| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530 | <!-- 国家 --><template>    <basic-container>        <avue-crud :option="option" :table-loading="loading" :data="data" :page.sync="page" :permission="permissionList"            id="out-table" :header-cell-class-name="headerClassName" :before-open="beforeOpen" v-model="form" ref="crud"            @row-update="rowUpdate" @row-save="rowSave" @row-del="rowDel" :search.sync="search"            @search-change="searchChange" @search-reset="searchReset" @selection-change="selectionChange"            @current-change="currentChange" @size-change="sizeChange" @refresh-change="refreshChange"            @resetColumn="resetColumnTwo('crud', 'option', 'optionBack', 287)"            @saveColumn="saveColumnTwo('crud', 'option', 'optionBack', 287)" @on-load="onLoad">            <template slot="remarks" slot-scope="scope">                <avue-text-ellipsis :text="scope.row.remarks" :height="30" use-tooltip placement="top">                    <small slot="more">...</small>                </avue-text-ellipsis>            </template>            <template slot="code" slot-scope="scope">                <avue-text-ellipsis :text="scope.row.code" :height="30" use-tooltip placement="top">                    <small slot="more">...</small>                </avue-text-ellipsis>            </template>            <template slot="cnName" slot-scope="scope">                <div style="color: #1e9fff;cursor: pointer;" @click.stop="editOpen(scope.row,scope.index)">                    <avue-text-ellipsis :text="scope.row.cnName" :height="30" use-tooltip placement="top">                        <small slot="more">...</small>                    </avue-text-ellipsis>                </div>            </template>            <template slot="enName" slot-scope="scope">                <avue-text-ellipsis :text="scope.row.enName" :height="30" use-tooltip placement="top">                    <small slot="more">...</small>                </avue-text-ellipsis>            </template>            <template slot="menuLeft">                <el-button type="primary" size="small" icon="el-icon-plus" @click="addbtnfun()">新建国家                </el-button>                <el-button type="danger" size="small" icon="el-icon-delete" plain @click="handleDelete">删 除                </el-button>                <el-button type="warning" size="small" icon="el-icon-printer" @click="excelBox = true">导入                </el-button>                <el-button type="success" size="small" @click="handleExport" icon="el-icon-printer">导出</el-button>            </template>            <template slot-scope="{ row, index }" slot="menu">                <el-button v-if="row.status == 1" type="text" style="color: #85e967" size="small"                           @click.stop="statusfun(row.id,0)">                    启用                </el-button>                <el-button v-if="row.status == 0" type="text" style="color: #e83c3a" size="small"                           @click.stop="statusfun(row.id,1)">                    停用                </el-button>            </template>        </avue-crud>        <el-dialog title="导入往来单位" append-to-body :visible.sync="excelBox" width="555px" :close-on-click-modal="false"            v-dialog-drag>            <avue-form :option="excelOption" v-model="excelForm" :table-loading="excelLoading" :upload-before="uploadBefore"                :upload-after="onSuccess">                <template slot="excelTemplate">                    <el-button type="primary" @click="handleGet">                        点击下载<i class="el-icon-download el-icon--right"></i>                    </el-button>                </template>            </avue-form>            <p style="text-align: center;color: #DC0505">                温馨提示 第一次导入时请先下载模板            </p>        </el-dialog>    </basic-container></template><script>import { bcountrysList, bcountrysDetail, bcountrysSubmit, bcountrysRemove } from "@/api/iosBasicData/bcountrys";import { mapGetters } from "vuex";import { getToken } from "@/util/auth";export default {    data() {        return {            excelBox: false,            form: {},            query: {},            loading: true,            search: {},            excelForm: {},            excelLoading: false,            excelOption: {                submitBtn: false,                emptyBtn: false,                column: [                    {                        label: "模板下载",                        prop: "excelTemplate",                        formslot: true,                        span: 24                    },                    {                        label: "模板上传",                        prop: "excelFile",                        type: "upload",                        drag: true,                        loadText: "模板上传中,请稍等",                        span: 24,                        propsHttp: {                            res: "data"                        },                        tip: "请上传 .xls,.xlsx 标准格式文件",                        action: "/api/blade-los/bcountrys/importBCountrys"                    }                ]            },            page: {                pageSize: 10,                currentPage: 1,                total: 0,                pageSizes: [10, 20, 30, 40, 50, 100, 200, 300, 400, 500]            },            selectionList: [],            option: {},            optionBack: {                addBtnText: '新建国家',                addTitle: '新建国家',                editBtnText: '编辑',                editTitle: '编辑国家',                viewBtnText: '查看',                viewTitle: '查看国家',                height: 'auto',                stripe: true,                calcHeight: 30,                tip: false,                searchShow: true,                searchMenuSpan: 6,                border: true,                index: true,                viewBtn: true,                selection: true,                dialogClickModal: false,                menuWidth:180,                column: [                    {                        label: "编码",                        prop: "code",                        width: "180",                        search: true,                        rules: [{                            required: true,                            message: "请输入编码",                            trigger: "blur"                        }]                    },                    {                        label: "中文名称",                        prop: "cnName",                        width: "180",                        search: true,                        rules: [{                            required: true,                            message: "请输入中文名称",                            trigger: "blur"                        }]                    },                    {                        label: "英文名称",                        prop: "enName",                        width: "180",                        search: true,                        rules: [{                            required: true,                            message: "请输入英文名称",                            trigger: "blur"                        }]                    },                    {                        label: "国际三字码",                        prop: "unCode",                        rules: [{                            pattern: /^[a-zA-Z0-9]{1,3}$/,                            message: "请输入英文字母或数字",                            trigger: 'blur'                        }]                    },                    {                        label: "状态",                        prop: "status",                        type: 'select',                        dicData: [{                            label: '启用',                            value: 0                        }, {                            label: '停用',                            value: 1                        }],                    },                    {                        label: "创建人",                        prop: "createUserName",                        display: false,                    },                    {                        label: "创建部门",                        prop: "createDeptName",                        display: false,                    },                    {                        label: "创建时间",                        prop: "createTime",                        width: 160,                        display: false,                    },                    {                        label: "修改人",                        prop: "updateUserName",                        display: false,                    },                    {                        label: "修改时间",                        prop: "updateTime",                        width: 160,                        display: false,                    },                    {                        label: "是否已删除(0 否 1是)",                        prop: "isDeleted",                        hide: true,                        display: false,                    },                    {                        label: "备注",                        prop: "remarks",                        type: 'textarea',                        width: "180",                        slot: true,                        span: 24,                        minRows: 3,                    },                ]            },            data: []        };    },    computed: {        ...mapGetters(["permission"]),        // 表格多个按钮权限控制,采用函数方式可以精确到行控制        permissionList() {            return {                addBtn: this.vaildData(this.permission.bcountrys_add, false),                // viewBtn: this.vaildData(this.permission.bcountrys_view, false),                // delBtn: this.vaildData(this.permission.bcountrys_delete, false),                editBtn: this.vaildData(this.permission.bcountrys_edit, false)            };        },        ids() {            let ids = [];            this.selectionList.forEach(ele => {                ids.push(ele.id);            });            return ids.join(",");        }    },    async created() {        this.option = await this.getColumnData(this.getColumnName(287), this.optionBack);    },    methods: {        // 禁用启用按钮        statusfun(id,status){            this.$confirm("确定将选择数据更改状态?", {                confirmButtonText: "确定",                cancelButtonText: "取消",                type: "warning"            }).then(()=>{                bcountrysDetail(id).then(res=>{                    let obj = res.data.data;                    obj.status = status                    bcountrysSubmit(obj).then(()=>{                        this.onLoad(this.page);                        this.$message({                            type: "success",                            message: "操作成功!"                        });                    })                })            })        },        // 编辑点击打开弹窗        editOpen(row,index){            this.$refs.crud.rowEdit(row,index)        },        // 导出        handleExport() {            var condition = ''            for (const key in this.search) {                var value = this.search[key]                if (value) {                    condition += `&${key}=${this.search[key]}`                }            }            this.$confirm('是否导出国家?', '提示', {                confirmButtonText: '确定',                cancelButtonText: '取消',                type: 'warning'            }).then(() => {                window.open(                    `/api/blade-los/bcountrys/exportBCountrys?${this.website.tokenHeader                    }=${getToken()}${condition}`                );            }).catch(() => {                this.$message({                    type: 'info',                    message: '已取消' //                });            })        },        uploadBefore(file, done, loading) {            done();            loading = true;        },        // 上传成功        onSuccess(res, done, loading, column) {            this.excelBox = false;            this.$message.success("导入成功!");            loading = false;            this.onLoad(this.page);            done();        },        // 下载模板        handleGet() {            window.open(                `/api/blade-los/bcountrys/exportBCountrys/template?${this.website.tokenHeader                }=${getToken()}`            );        },        // 新增        addbtnfun() {            this.form.status = 0            this.$refs.crud.rowAdd()        },        // 新增数据后点击确定触发该事件 (新增确认)        rowSave(row, done, loading) {            bcountrysSubmit(row).then(() => {                this.onLoad(this.page);                this.$message({                    type: "success",                    message: "操作成功!"                });                done();            }, error => {                loading();                window.console.log(error);            });        },        // 更新数据后确定触发该事件 (编辑确认)        rowUpdate(row, index, done, loading) {            bcountrysSubmit(row).then(() => {                this.onLoad(this.page);                this.$message({                    type: "success",                    message: "操作成功!"                });                done();            }, error => {                loading();                console.log(error);            });        },        // 行数据删除触发 (删除)        rowDel(row) {            if (row.status === 1) {                this.$confirm("确定将选择数据删除?", {                    confirmButtonText: "确定",                    cancelButtonText: "取消",                    type: "warning"                })                    .then(() => {                        return bcountrysRemove(row.id);                    })                    .then(() => {                        this.onLoad(this.page);                        this.$message({                            type: "success",                            message: "操作成功!"                        });                    });            } else {                this.$message({                    message: '非禁用状态无法删除',                    type: 'warning'                });            }        },        // 多选删除触发        handleDelete() {            if (this.selectionList.length === 0) {                this.$message.warning("请选择至少一条数据");                return;            }            for (const selection of this.selectionList) {                if (selection.status == 0) {                    this.$message.warning("选中的数据中有启用数据,启用数据不可删除!");                    return;                }            }            this.$confirm("确定将选择数据删除?", {                confirmButtonText: "确定",                cancelButtonText: "取消",                type: "warning"            })                .then(() => {                    return bcountrysRemove(this.ids);                })                .then(() => {                    this.onLoad(this.page);                    this.$message({                        type: "success",                        message: "操作成功!"                    });                    this.$refs.crud.toggleSelection();                });        },        // 打开前的回调,会暂停Dialog的打开,done用于关闭Dialog,type为当前窗口的类型        beforeOpen(done, type) {            if (["edit", "view"].includes(type)) {                bcountrysDetail(this.form.id).then(res => {                    this.form = res.data.data;                });            }            done();        },        // 清空搜索回调方法        searchReset() {            this.query = {};            this.onLoad(this.page);        },        // 点击搜索后触发该事件(由于page分页信息和search搜索信息,可以直接通过this.page和this.search拿到)        searchChange(params, done) {            this.query = params;            this.page.currentPage = 1;            this.onLoad(this.page, params);            done();        },        // 当选择项发生变化时会触发该事件 (多选)        selectionChange(list) {            this.selectionList = list;        },        // 用于多选表格,传递数组进去,会勾选数组中的对象,如果已经勾选则会取消勾选        selectionClear() {            this.selectionList = [];            this.$refs.crud.toggleSelection();        },        // 分页页数        currentChange(currentPage) {            this.page.currentPage = currentPage;        },        // 分页条数        sizeChange(pageSize) {            this.page.pageSize = pageSize;        },        // 点击刷新        refreshChange() {            this.onLoad(this.page, this.query);        },        // 获取列表数据        onLoad(page, params = {}) {            this.loading = true;            bcountrysList(page.currentPage, page.pageSize, Object.assign(params, this.query)).then(res => {                const data = res.data.data;                this.page.total = data.total;                this.data = data.records;                this.loading = false;                this.selectionClear();            });        },        //自定义列保存        async saveColumnTwo(ref, option, optionBack, code) {            /**             * 已定义全局方法,直接使用,saveColumnData保存列数据方法,参数传值(表格名称,当前表格的option数据)             * 已定义全局方法,直接使用,getColumnName方法用来获取枚举值,参数根据自己定义的code值获取中文名             * 一定要执行异步操作,要等接口成功返回,才能执行下一行代码             */            const inSave = await this.saveColumnData(this.getColumnName(code), this[option]);            if (inSave) {                this.$message.success("保存成功");                //关闭窗口                this.$refs[ref].$refs.dialogColumn.columnBox = false;            }        },        //自定义列重置        async resetColumnTwo(ref, option, optionBack, code) {            this[option] = this[optionBack];            const inSave = await this.delColumnData(this.getColumnName(code), this[optionBack]);            if (inSave) {                this.$message.success("重置成功");                this.$refs[ref].$refs.dialogColumn.columnBox = false;            }        },        // 更改表格颜色        headerClassName(tab) {            //颜色间隔            let back = ""            if (tab.columnIndex >= 0 && tab.column.level === 1) {                if (tab.columnIndex % 2 === 0) {                    back = "back-one"                } else if (tab.columnIndex % 2 === 1) {                    back = "back-two"                }            }            return back;        },    }};</script><style lang="scss" scoped>::v-deep#out-table .back-one {    background: #ecf5ff !important;}::v-deep#out-table .back-two {    background: #ecf5ff !important;}/deep/ .el-col-md-8 {    width: 24.33333%;}</style>
 |