¶Ô±ÈÐÂÎļþ |
| | |
| | | <template> |
| | | <el-row> |
| | | <el-col :span="9"> |
| | | <div class="box"> |
| | | <el-scrollbar> |
| | | <basic-container> |
| | | <avue-tree :option="treeOption" :data="treeData" @node-click="nodeClick"/> |
| | | </basic-container> |
| | | </el-scrollbar> |
| | | </div> |
| | | </el-col> |
| | | <el-col :span="15"> |
| | | <basic-container> |
| | | <el-button-group> |
| | | <el-button v-if="permission.region_add" type="primary" size="small" icon="el-icon-circle-plus-outline" @click="addChildren">æ°å¢ä¸çº§</el-button> |
| | | <el-button v-if="permission.region_delete" type="primary" size="small" icon="el-icon-delete" @click="handleDelete">å é¤</el-button> |
| | | <el-button v-if="permission.region_import" type="primary" size="small" icon="el-icon-upload2" @click="handleImport">导å
¥</el-button> |
| | | <el-button v-if="permission.region_export" type="primary" size="small" icon="el-icon-download" @click="handleExport">导åº</el-button> |
| | | <el-button v-if="permission.region_debug" type="primary" size="small" icon="el-icon-video-play" @click="handleDebug">è°è¯</el-button> |
| | | </el-button-group> |
| | | </basic-container> |
| | | <basic-container> |
| | | <avue-form ref="form" :option="regionOption" v-model="regionForm" @submit="handleSubmit"> |
| | | <template slot="code" slot-scope="{}"> |
| | | <el-input placeholder="请è¾å
¥ åºååç¼å·" v-model="regionForm.subCode"> |
| | | <template slot="prepend">{{regionForm.parentCode}}</template> |
| | | </el-input> |
| | | </template> |
| | | </avue-form> |
| | | <el-dialog title="è¡æ¿åºåæ°æ®å¯¼å
¥" |
| | | append-to-body |
| | | :visible.sync="excelBox" |
| | | width="555px"> |
| | | <avue-form :option="excelOption" v-model="excelForm" :upload-after="uploadAfter"> |
| | | <template slot="excelTemplate"> |
| | | <el-button type="primary" @click="handleTemplate"> |
| | | ç¹å»ä¸è½½<i class="el-icon-download el-icon--right"></i> |
| | | </el-button> |
| | | </template> |
| | | </avue-form> |
| | | </el-dialog> |
| | | <el-dialog title="è¡æ¿åºåæ°æ®è°è¯" |
| | | append-to-body |
| | | :visible.sync="debugBox" |
| | | width="350px"> |
| | | <avue-form :option="debugOption" v-model="debugForm"/> |
| | | </el-dialog> |
| | | </basic-container> |
| | | </el-col> |
| | | </el-row> |
| | | </template> |
| | | |
| | | <script> |
| | | import {getLazyTree, getDetail, submit, remove} from "@/api/base/region"; |
| | | import {exportBlob} from "@/api/common"; |
| | | import {mapGetters} from "vuex"; |
| | | import {validatenull} from "@/util/validate"; |
| | | import {downloadXls} from "@/util/util"; |
| | | import {dateNow} from "@/util/date"; |
| | | import {getToken} from "@/util/auth"; |
| | | import NProgress from 'nprogress'; |
| | | import 'nprogress/nprogress.css'; |
| | | |
| | | export default { |
| | | data() { |
| | | return { |
| | | topCode: '00', |
| | | treeCode: '', |
| | | treeParentCode: '', |
| | | treeData: [], |
| | | treeOption: { |
| | | nodeKey: 'id', |
| | | lazy: true, |
| | | treeLoad: function (node, resolve) { |
| | | const parentCode = (node.level === 0) ? "00" : node.data.id; |
| | | getLazyTree(parentCode).then(res => { |
| | | resolve(res.data.data.map(item => { |
| | | return { |
| | | ...item, |
| | | leaf: !item.hasChildren |
| | | } |
| | | })) |
| | | }); |
| | | }, |
| | | addBtn: false, |
| | | menu: false, |
| | | size: 'small', |
| | | props: { |
| | | labelText: 'æ é¢', |
| | | label: 'title', |
| | | value: 'value', |
| | | children: 'children' |
| | | } |
| | | }, |
| | | regionForm: {}, |
| | | regionOption: { |
| | | labelWidth: 100, |
| | | column: [ |
| | | { |
| | | label: "ç¶åºåç¼å·", |
| | | prop: "parentCode", |
| | | span: 24, |
| | | disabled: true, |
| | | rules: [{ |
| | | required: true, |
| | | message: "请è¾å
¥ç¶åºåç¼å·", |
| | | trigger: "blur" |
| | | }] |
| | | }, |
| | | { |
| | | label: "ç¶åºååç§°", |
| | | prop: "parentName", |
| | | span: 24, |
| | | disabled: true, |
| | | }, |
| | | { |
| | | label: "åºåç¼å·", |
| | | prop: "code", |
| | | formslot: true, |
| | | span: 24, |
| | | rules: [{ |
| | | required: true, |
| | | message: "请è¾å
¥åºåç¼å·", |
| | | trigger: "blur" |
| | | }] |
| | | }, |
| | | { |
| | | label: "åºååç¼å·", |
| | | prop: "subCode", |
| | | display: false, |
| | | }, |
| | | { |
| | | label: "åºååç§°", |
| | | prop: "name", |
| | | span: 24, |
| | | rules: [{ |
| | | required: true, |
| | | message: "请è¾å
¥åºååç§°", |
| | | trigger: "blur" |
| | | }] |
| | | }, |
| | | { |
| | | label: "åºåç级", |
| | | prop: "regionLevel", |
| | | type: "radio", |
| | | dicUrl: "/api/ubcs-system/dict/dictionary?code=region", |
| | | props: { |
| | | label: "dictValue", |
| | | value: "dictKey" |
| | | }, |
| | | dataType: "number", |
| | | span: 24, |
| | | rules: [{ |
| | | required: true, |
| | | message: "è¯·éæ©åºåç级", |
| | | trigger: "blur" |
| | | }] |
| | | }, |
| | | { |
| | | label: "åºåæåº", |
| | | prop: "sort", |
| | | type: "number", |
| | | span: 24, |
| | | rules: [{ |
| | | required: true, |
| | | message: "请è¾å
¥åºåæåº", |
| | | trigger: "blur" |
| | | }] |
| | | }, |
| | | { |
| | | label: "åºå夿³¨", |
| | | prop: "remark", |
| | | type: "textarea", |
| | | minRows: 6, |
| | | span: 24, |
| | | }, |
| | | ] |
| | | }, |
| | | excelBox: false, |
| | | excelForm: {}, |
| | | excelOption: { |
| | | submitBtn: false, |
| | | emptyBtn: false, |
| | | column: [ |
| | | { |
| | | label: '模æ¿ä¸ä¼ ', |
| | | prop: 'excelFile', |
| | | type: 'upload', |
| | | drag: true, |
| | | loadText: '模æ¿ä¸ä¼ ä¸ï¼è¯·ç¨ç', |
| | | span: 24, |
| | | propsHttp: { |
| | | res: 'data' |
| | | }, |
| | | tip: '请ä¸ä¼ .xls,.xlsx æ åæ ¼å¼æä»¶', |
| | | action: "/api/ubcs-system/region/import-region" |
| | | }, |
| | | { |
| | | label: "æ°æ®è¦ç", |
| | | prop: "isCovered", |
| | | type: "switch", |
| | | align: "center", |
| | | width: 80, |
| | | dicData: [ |
| | | { |
| | | label: "å¦", |
| | | value: 0 |
| | | }, |
| | | { |
| | | label: "æ¯", |
| | | value: 1 |
| | | } |
| | | ], |
| | | value: 0, |
| | | slot: true, |
| | | rules: [ |
| | | { |
| | | required: true, |
| | | message: "è¯·éæ©æ¯å¦è¦ç", |
| | | trigger: "blur" |
| | | } |
| | | ] |
| | | }, |
| | | { |
| | | label: '模æ¿ä¸è½½', |
| | | prop: 'excelTemplate', |
| | | formslot: true, |
| | | span: 24, |
| | | } |
| | | ] |
| | | }, |
| | | debugBox: false, |
| | | debugForm: {}, |
| | | debugOption: { |
| | | labelWidth: 50, |
| | | submitBtn: false, |
| | | emptyBtn: false, |
| | | column: [ |
| | | { |
| | | label: 'ç份', |
| | | prop: 'province', |
| | | type: 'select', |
| | | props: { |
| | | label: 'name', |
| | | value: 'code' |
| | | }, |
| | | cascader: ['city'], |
| | | dicUrl: '/api/ubcs-system/region/select', |
| | | span: 24, |
| | | }, |
| | | { |
| | | label: 'å°å¸', |
| | | prop: 'city', |
| | | type: 'select', |
| | | props: { |
| | | label: 'name', |
| | | value: 'code' |
| | | }, |
| | | cascader: ['district'], |
| | | dicFlag: false, |
| | | dicUrl: '/api/ubcs-system/region/select?code={{province}}', |
| | | span: 24, |
| | | }, |
| | | { |
| | | label: 'åºå¿', |
| | | prop: 'district', |
| | | type: 'select', |
| | | props: { |
| | | label: 'name', |
| | | value: 'code' |
| | | }, |
| | | dicFlag: false, |
| | | dicUrl: '/api/ubcs-system/region/select?code={{city}}', |
| | | span: 24, |
| | | } |
| | | ] |
| | | } |
| | | }; |
| | | }, |
| | | watch: { |
| | | 'regionForm.subCode'() { |
| | | this.regionForm.code = this.regionForm.parentCode + this.regionForm.subCode; |
| | | }, |
| | | 'excelForm.isCovered'() { |
| | | if (this.excelForm.isCovered !== '') { |
| | | const column = this.findObject(this.excelOption.column, "excelFile"); |
| | | column.action = `/api/ubcs-system/region/import-region?isCovered=${this.excelForm.isCovered}`; |
| | | } |
| | | } |
| | | }, |
| | | computed: { |
| | | ...mapGetters(["permission"]), |
| | | permissionList() { |
| | | return { |
| | | addBtn: this.vaildData(this.permission.region_add, false), |
| | | viewBtn: this.vaildData(this.permission.region_view, false), |
| | | delBtn: this.vaildData(this.permission.region_delete, false), |
| | | editBtn: this.vaildData(this.permission.region_edit, false) |
| | | }; |
| | | }, |
| | | ids() { |
| | | let ids = []; |
| | | this.selectionList.forEach(ele => { |
| | | ids.push(ele.id); |
| | | }); |
| | | return ids.join(","); |
| | | } |
| | | }, |
| | | methods: { |
| | | initTree() { |
| | | this.treeData = []; |
| | | getLazyTree(this.topCode).then(res => { |
| | | this.treeData = res.data.data.map(item => { |
| | | return { |
| | | ...item, |
| | | leaf: !item.hasChildren |
| | | } |
| | | }) |
| | | }); |
| | | }, |
| | | nodeClick(data) { |
| | | const column = this.findObject(this.regionOption.column, "parentCode"); |
| | | column.disabled = true; |
| | | this.treeCode = data.id; |
| | | this.treeParentCode = data.parentId; |
| | | getDetail(this.treeCode).then(res => { |
| | | this.regionForm = res.data.data; |
| | | this.regionForm.subCode = this.regionForm.code.replace(this.regionForm.parentCode, ''); |
| | | }) |
| | | }, |
| | | addChildren() { |
| | | if (validatenull(this.regionForm.code) || validatenull(this.regionForm.name)) { |
| | | this.$message.warning("请å
éæ©ä¸é¡¹åºå"); |
| | | return; |
| | | } |
| | | this.regionForm.parentCode = this.regionForm.code; |
| | | this.regionForm.parentName = this.regionForm.name; |
| | | this.regionForm.code = ''; |
| | | this.regionForm.subCode = ''; |
| | | this.regionForm.name = ''; |
| | | this.regionForm.regionLevel = (this.regionForm.regionLevel === 5) ? 5 : this.regionForm.regionLevel + 1; |
| | | }, |
| | | handleSubmit(form, done, loading) { |
| | | const parentCode = form.parentCode === this.topCode ? '' : form.parentCode; |
| | | form.code = parentCode + form.subCode; |
| | | submit(form).then(() => { |
| | | this.$message({ |
| | | type: "success", |
| | | message: "æä½æå!" |
| | | }); |
| | | this.initTree(); |
| | | this.regionForm.subCode = ''; |
| | | this.$refs.form.resetForm(); |
| | | done(); |
| | | }, error => { |
| | | loading(); |
| | | window.console.log(error); |
| | | }); |
| | | }, |
| | | handleDelete() { |
| | | if (validatenull(this.regionForm.code)) { |
| | | this.$message.warning("请å
éæ©ä¸é¡¹åºå"); |
| | | return; |
| | | } |
| | | this.$confirm(`ç¡®å®å° [${this.regionForm.name}] æ°æ®å é¤?`, { |
| | | confirmButtonText: "ç¡®å®", |
| | | cancelButtonText: "åæ¶", |
| | | type: "warning" |
| | | }) |
| | | .then(() => { |
| | | return remove(this.treeCode); |
| | | }) |
| | | .then(() => { |
| | | this.$message({ |
| | | type: "success", |
| | | message: "æä½æå!" |
| | | }); |
| | | this.initTree(); |
| | | this.regionForm.subCode = ''; |
| | | this.$refs.form.resetForm(); |
| | | }); |
| | | }, |
| | | uploadAfter(res, done, loading, column) { |
| | | window.console.log(column); |
| | | this.excelBox = false; |
| | | this.initTree(); |
| | | done(); |
| | | }, |
| | | handleDebug() { |
| | | this.debugBox = true; |
| | | }, |
| | | handleImport() { |
| | | this.excelBox = true; |
| | | }, |
| | | handleExport() { |
| | | this.$confirm("æ¯å¦å¯¼åºè¡æ¿åºåæ°æ®?", "æç¤º", { |
| | | confirmButtonText: "ç¡®å®", |
| | | cancelButtonText: "åæ¶", |
| | | type: "warning" |
| | | }).then(() => { |
| | | NProgress.start(); |
| | | exportBlob(`/api/ubcs-system/region/export-region?${this.website.tokenHeader}=${getToken()}`).then(res => { |
| | | downloadXls(res.data, `è¡æ¿åºåæ°æ®${dateNow()}.xlsx`); |
| | | NProgress.done(); |
| | | }) |
| | | }); |
| | | }, |
| | | handleTemplate() { |
| | | exportBlob(`/api/ubcs-system/region/export-template?${this.website.tokenHeader}=${getToken()}`).then(res => { |
| | | downloadXls(res.data, "è¡æ¿åºå模æ¿.xlsx"); |
| | | }) |
| | | }, |
| | | } |
| | | }; |
| | | </script> |
| | | |
| | | <style> |
| | | .box { |
| | | height: 800px; |
| | | } |
| | | |
| | | .el-scrollbar { |
| | | height: 100%; |
| | | } |
| | | |
| | | .box .el-scrollbar__wrap { |
| | | overflow: scroll; |
| | | } |
| | | </style> |