123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424 |
- <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 { mapGetters } from 'vuex'
- import { validatenull } from '@/util/validate'
- import { getToken } from '@/util/auth'
- 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: '/blade-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: '/blade-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',
- },
- cascaderItem: ['city', 'district'],
- dicUrl: '/blade-system/region/select',
- span: 24,
- },
- {
- label: '地市',
- prop: 'city',
- type: 'select',
- props: {
- label: 'name',
- value: 'code',
- },
- dicFlag: false,
- dicUrl: '/blade-system/region/select?code={{key}}',
- span: 24,
- },
- {
- label: '区县',
- prop: 'district',
- type: 'select',
- props: {
- label: 'name',
- value: 'code',
- },
- dicFlag: false,
- dicUrl: '/blade-system/region/select?code={{key}}',
- 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 = `/blade-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(() => {
- window.open(`/blade-system/region/export-region?${this.website.tokenHeader}=${getToken()}`)
- })
- },
- handleTemplate() {
- window.open(`/blade-system/region/export-template?${this.website.tokenHeader}=${getToken()}`)
- },
- },
- }
- </script>
- <style>
- .box {
- height: 800px;
- }
- .el-scrollbar {
- height: 100%;
- }
- .box .el-scrollbar__wrap {
- overflow: scroll;
- }
- </style>
|