|
|
@@ -20,6 +20,8 @@
|
|
20
|
20
|
</el-form>
|
|
21
|
21
|
</el-card>
|
|
22
|
22
|
|
|
|
23
|
+ <br/>
|
|
|
24
|
+
|
|
23
|
25
|
<!-- 列表区 -->
|
|
24
|
26
|
<el-card shadow="never" class="table-card">
|
|
25
|
27
|
<el-row :gutter="10" class="mb8">
|
|
|
@@ -207,10 +209,21 @@
|
|
207
|
209
|
<el-input v-model="form.creditCode" maxlength="18" :disabled="!!form.merchantId" placeholder="选填" />
|
|
208
|
210
|
</el-form-item>
|
|
209
|
211
|
</el-col>
|
|
210
|
|
- <el-col :span="12"><el-form-item label="注册地区编码" prop="regRegionCode"><el-input v-model="form.regRegionCode" placeholder="如 110105" maxlength="64" /></el-form-item></el-col>
|
|
211
|
|
- <el-col :span="12"><el-form-item label="注册地区名称" prop="regRegionName"><el-input v-model="form.regRegionName" placeholder="如 北京市/西城区" maxlength="128" /></el-form-item></el-col>
|
|
212
|
|
- <el-col :span="12"><el-form-item label="注册地址" prop="regAddress"><el-input v-model="form.regAddress" maxlength="255" placeholder="选填" /></el-form-item></el-col>
|
|
213
|
|
- <el-col :span="12"><el-form-item label="详细地址" prop="companyDetailAddress"><el-input v-model="form.companyDetailAddress" maxlength="255" /></el-form-item></el-col>
|
|
|
212
|
+ <el-col :span="24">
|
|
|
213
|
+ <el-form-item label="注册地区" prop="regRegionCascader">
|
|
|
214
|
+ <el-cascader
|
|
|
215
|
+ v-model="form.regRegionCascader"
|
|
|
216
|
+ :options="regionTree"
|
|
|
217
|
+ :props="regionCascaderProps"
|
|
|
218
|
+ clearable
|
|
|
219
|
+ filterable
|
|
|
220
|
+ placeholder="请选择省/市/区县"
|
|
|
221
|
+ style="width: 100%"
|
|
|
222
|
+ @change="handleRegRegionChange"
|
|
|
223
|
+ />
|
|
|
224
|
+ </el-form-item>
|
|
|
225
|
+ </el-col>
|
|
|
226
|
+ <el-col :span="24"><el-form-item label="注册详细地址" prop="companyDetailAddress"><el-input v-model="form.companyDetailAddress" maxlength="255" placeholder="选填,街道门牌号" /></el-form-item></el-col>
|
|
214
|
227
|
<el-col :span="24"><el-form-item label="经营范围" prop="businessScope"><el-input v-model="form.businessScope" type="textarea" :rows="2" maxlength="1000" /></el-form-item></el-col>
|
|
215
|
228
|
<el-col :span="24">
|
|
216
|
229
|
<el-form-item label="营业期限" prop="licenseValidType">
|
|
|
@@ -239,8 +252,20 @@
|
|
239
|
252
|
<el-row :gutter="16">
|
|
240
|
253
|
<el-col :span="12"><el-form-item label="商户名称" prop="merchantName"><el-input v-model="form.merchantName" maxlength="128" /></el-form-item></el-col>
|
|
241
|
254
|
<el-col :span="12"><el-form-item label="客服电话" prop="servicePhone"><el-input v-model="form.servicePhone" maxlength="20" /></el-form-item></el-col>
|
|
242
|
|
- <el-col :span="12"><el-form-item label="经营地区编码" prop="bizRegionCode"><el-input v-model="form.bizRegionCode" placeholder="如 110105" maxlength="64" /></el-form-item></el-col>
|
|
243
|
|
- <el-col :span="12"><el-form-item label="经营地区名称" prop="bizRegionName"><el-input v-model="form.bizRegionName" placeholder="如 北京市/朝阳区" maxlength="128" /></el-form-item></el-col>
|
|
|
255
|
+ <el-col :span="24">
|
|
|
256
|
+ <el-form-item label="经营地区" prop="bizRegionCascader">
|
|
|
257
|
+ <el-cascader
|
|
|
258
|
+ v-model="form.bizRegionCascader"
|
|
|
259
|
+ :options="regionTree"
|
|
|
260
|
+ :props="regionCascaderProps"
|
|
|
261
|
+ clearable
|
|
|
262
|
+ filterable
|
|
|
263
|
+ placeholder="请选择省/市/区县"
|
|
|
264
|
+ style="width: 100%"
|
|
|
265
|
+ @change="handleBizRegionChange"
|
|
|
266
|
+ />
|
|
|
267
|
+ </el-form-item>
|
|
|
268
|
+ </el-col>
|
|
244
|
269
|
<el-col :span="24"><el-form-item label="经营详细地址" prop="bizDetailAddress"><el-input v-model="form.bizDetailAddress" maxlength="255" /></el-form-item></el-col>
|
|
245
|
270
|
<el-col :span="12"><el-form-item label="联系人姓名" prop="contactName"><el-input v-model="form.contactName" maxlength="64" /></el-form-item></el-col>
|
|
246
|
271
|
<el-col :span="12"><el-form-item label="联系人手机" prop="contactPhone"><el-input v-model="form.contactPhone" maxlength="20" /></el-form-item></el-col>
|
|
|
@@ -311,6 +336,7 @@
|
|
311
|
336
|
|
|
312
|
337
|
<script>
|
|
313
|
338
|
import { listMerchant, getMerchant, addMerchant, updateMerchant, delMerchant, deleteMerchantCheck, adminUserOptions, memberOptions } from "@/api/agri/merchant"
|
|
|
339
|
+import { getRegionTree } from "@/api/agri/region"
|
|
314
|
340
|
import MerchantDetail from "./detail"
|
|
315
|
341
|
|
|
316
|
342
|
export default {
|
|
|
@@ -330,6 +356,14 @@ export default {
|
|
330
|
356
|
bindSearchLoading: false,
|
|
331
|
357
|
adminUserList: [],
|
|
332
|
358
|
memberList: [],
|
|
|
359
|
+ regionTree: [],
|
|
|
360
|
+ regionTreeLoaded: false,
|
|
|
361
|
+ regionCascaderProps: {
|
|
|
362
|
+ value: "code",
|
|
|
363
|
+ label: "name",
|
|
|
364
|
+ children: "children",
|
|
|
365
|
+ emitPath: true
|
|
|
366
|
+ },
|
|
333
|
367
|
queryParams: {
|
|
334
|
368
|
pageNum: 1,
|
|
335
|
369
|
pageSize: 10,
|
|
|
@@ -365,6 +399,7 @@ export default {
|
|
365
|
399
|
},
|
|
366
|
400
|
created() {
|
|
367
|
401
|
this.getList()
|
|
|
402
|
+ this.loadRegionTree()
|
|
368
|
403
|
},
|
|
369
|
404
|
methods: {
|
|
370
|
405
|
/** 查询商户列表 */
|
|
|
@@ -421,6 +456,7 @@ export default {
|
|
421
|
456
|
creditCode: undefined,
|
|
422
|
457
|
regRegionCode: undefined,
|
|
423
|
458
|
regRegionName: undefined,
|
|
|
459
|
+ regRegionCascader: [],
|
|
424
|
460
|
regAddress: undefined,
|
|
425
|
461
|
companyDetailAddress: undefined,
|
|
426
|
462
|
businessScope: undefined,
|
|
|
@@ -430,7 +466,8 @@ export default {
|
|
430
|
466
|
licenseValidEnd: undefined,
|
|
431
|
467
|
bindType: "SYS_USER",
|
|
432
|
468
|
bindUserId: undefined,
|
|
433
|
|
- bindMemberId: undefined
|
|
|
469
|
+ bindMemberId: undefined,
|
|
|
470
|
+ bizRegionCascader: []
|
|
434
|
471
|
}
|
|
435
|
472
|
this.activeTab = "subject"
|
|
436
|
473
|
this.adminUserList = []
|
|
|
@@ -451,15 +488,18 @@ export default {
|
|
451
|
488
|
},
|
|
452
|
489
|
handleAdd() {
|
|
453
|
490
|
this.reset()
|
|
|
491
|
+ this.loadRegionTree()
|
|
454
|
492
|
this.open = true
|
|
455
|
493
|
this.title = "添加商户"
|
|
456
|
494
|
},
|
|
457
|
|
- /** 打开编辑并组装日期区间 */
|
|
|
495
|
+ /** 打开编辑并组装日期区间、省市区回显 */
|
|
458
|
496
|
handleUpdate(row) {
|
|
459
|
497
|
this.reset()
|
|
460
|
|
- getMerchant(row.merchantId).then(response => {
|
|
|
498
|
+ this.loadRegionTree().then(() => {
|
|
|
499
|
+ return getMerchant(row.merchantId)
|
|
|
500
|
+ }).then(response => {
|
|
461
|
501
|
const data = response.data || {}
|
|
462
|
|
- this.form = { ...data }
|
|
|
502
|
+ this.form = { ...data, regRegionCascader: [], bizRegionCascader: [] }
|
|
463
|
503
|
if (data.idValidType === "1" && data.idValidStart && data.idValidEnd) {
|
|
464
|
504
|
this.form.idValidRange = [data.idValidStart, data.idValidEnd]
|
|
465
|
505
|
}
|
|
|
@@ -469,6 +509,7 @@ export default {
|
|
469
|
509
|
if (data.licenseValidType === "1" && data.licenseValidStart && data.licenseValidEnd) {
|
|
470
|
510
|
this.form.licenseValidRange = [data.licenseValidStart, data.licenseValidEnd]
|
|
471
|
511
|
}
|
|
|
512
|
+ this.syncRegionCascaderFromForm()
|
|
472
|
513
|
this.activeTab = "subject"
|
|
473
|
514
|
this.open = true
|
|
474
|
515
|
this.title = "编辑商户"
|
|
|
@@ -487,7 +528,83 @@ export default {
|
|
487
|
528
|
this.adminUserList = []
|
|
488
|
529
|
this.memberList = []
|
|
489
|
530
|
},
|
|
490
|
|
- /** 管理员下拉展示:昵称 / 用户名 / 手机号 */
|
|
|
531
|
+ /** 加载省市区树 */
|
|
|
532
|
+ loadRegionTree() {
|
|
|
533
|
+ if (this.regionTreeLoaded) {
|
|
|
534
|
+ return Promise.resolve()
|
|
|
535
|
+ }
|
|
|
536
|
+ return getRegionTree().then(response => {
|
|
|
537
|
+ this.regionTree = response.data || []
|
|
|
538
|
+ this.regionTreeLoaded = true
|
|
|
539
|
+ }).catch(() => {
|
|
|
540
|
+ this.regionTree = []
|
|
|
541
|
+ })
|
|
|
542
|
+ },
|
|
|
543
|
+ /** 根据区县 code 回显级联选中路径 */
|
|
|
544
|
+ findRegionPath(nodes, targetCode, path) {
|
|
|
545
|
+ if (!nodes || !nodes.length) {
|
|
|
546
|
+ return null
|
|
|
547
|
+ }
|
|
|
548
|
+ for (let i = 0; i < nodes.length; i++) {
|
|
|
549
|
+ const node = nodes[i]
|
|
|
550
|
+ const nextPath = (path || []).concat(node.code)
|
|
|
551
|
+ if (String(node.code) === String(targetCode)) {
|
|
|
552
|
+ return nextPath
|
|
|
553
|
+ }
|
|
|
554
|
+ if (node.children && node.children.length) {
|
|
|
555
|
+ const found = this.findRegionPath(node.children, targetCode, nextPath)
|
|
|
556
|
+ if (found) {
|
|
|
557
|
+ return found
|
|
|
558
|
+ }
|
|
|
559
|
+ }
|
|
|
560
|
+ }
|
|
|
561
|
+ return null
|
|
|
562
|
+ },
|
|
|
563
|
+ /** 根据级联 code 路径拼地区名称 */
|
|
|
564
|
+ getRegionNamesByCodes(codes) {
|
|
|
565
|
+ const names = []
|
|
|
566
|
+ let nodes = this.regionTree
|
|
|
567
|
+ for (let i = 0; i < codes.length; i++) {
|
|
|
568
|
+ const code = codes[i]
|
|
|
569
|
+ const node = (nodes || []).find(item => String(item.code) === String(code))
|
|
|
570
|
+ if (!node) {
|
|
|
571
|
+ break
|
|
|
572
|
+ }
|
|
|
573
|
+ names.push(node.name)
|
|
|
574
|
+ nodes = node.children || []
|
|
|
575
|
+ }
|
|
|
576
|
+ return names
|
|
|
577
|
+ },
|
|
|
578
|
+ /** 编辑回显:把库里的 code 转成 cascader 路径 */
|
|
|
579
|
+ syncRegionCascaderFromForm() {
|
|
|
580
|
+ if (this.form.regRegionCode && this.regionTree.length) {
|
|
|
581
|
+ this.form.regRegionCascader = this.findRegionPath(this.regionTree, this.form.regRegionCode) || []
|
|
|
582
|
+ }
|
|
|
583
|
+ if (this.form.bizRegionCode && this.regionTree.length) {
|
|
|
584
|
+ this.form.bizRegionCascader = this.findRegionPath(this.regionTree, this.form.bizRegionCode) || []
|
|
|
585
|
+ }
|
|
|
586
|
+ },
|
|
|
587
|
+ /** 企业注册地区变更:写入 regRegionCode / regRegionName */
|
|
|
588
|
+ handleRegRegionChange(codes) {
|
|
|
589
|
+ this.applyRegionSelection(codes, "reg")
|
|
|
590
|
+ },
|
|
|
591
|
+ /** 经营地区变更:写入 bizRegionCode / bizRegionName */
|
|
|
592
|
+ handleBizRegionChange(codes) {
|
|
|
593
|
+ this.applyRegionSelection(codes, "biz")
|
|
|
594
|
+ },
|
|
|
595
|
+ /** 级联选择落库:code=区县 code,name=省/市/区县用 / 连接 */
|
|
|
596
|
+ applyRegionSelection(codes, prefix) {
|
|
|
597
|
+ const codeKey = prefix + "RegionCode"
|
|
|
598
|
+ const nameKey = prefix + "RegionName"
|
|
|
599
|
+ if (!codes || !codes.length) {
|
|
|
600
|
+ this.form[codeKey] = undefined
|
|
|
601
|
+ this.form[nameKey] = undefined
|
|
|
602
|
+ return
|
|
|
603
|
+ }
|
|
|
604
|
+ const names = this.getRegionNamesByCodes(codes)
|
|
|
605
|
+ this.form[codeKey] = String(codes[codes.length - 1])
|
|
|
606
|
+ this.form[nameKey] = names.join("/")
|
|
|
607
|
+ },
|
|
491
|
608
|
formatAdminOption(item) {
|
|
492
|
609
|
const parts = [item.nickName || item.userName, item.userName]
|
|
493
|
610
|
if (item.phonenumber) {
|
|
|
@@ -549,6 +666,8 @@ export default {
|
|
549
|
666
|
delete payload.idValidRange
|
|
550
|
667
|
delete payload.legalIdValidRange
|
|
551
|
668
|
delete payload.licenseValidRange
|
|
|
669
|
+ delete payload.regRegionCascader
|
|
|
670
|
+ delete payload.bizRegionCascader
|
|
552
|
671
|
// 新增时不传绑定无关字段;会员绑定不传 sysUserInitPassword(后端忽略)
|
|
553
|
672
|
if (!payload.merchantId) {
|
|
554
|
673
|
delete payload.sysUserInitPassword
|
|
|
@@ -612,7 +731,7 @@ export default {
|
|
612
|
731
|
|
|
613
|
732
|
<style scoped>
|
|
614
|
733
|
.search-card {
|
|
615
|
|
- margin-bottom: 10px;
|
|
|
734
|
+ margin-bottom: 0;
|
|
616
|
735
|
}
|
|
617
|
736
|
.form-section-title {
|
|
618
|
737
|
font-size: 13px;
|