From eb7a808aaf7dd0a6dd2ff70f9ef3f8ce0b1e31d1 Mon Sep 17 00:00:00 2001
From: MrShi <1878285526@qq.com>
Date: 星期五, 22 五月 2026 18:27:32 +0800
Subject: [PATCH] Merge branch 'master' of http://139.186.142.91:10010/r/productDev/gtzxinglijicun
---
admin/src/components/business/OperaShopEditWindow.vue | 308 ++++++++++++++++++++++++++++++++++++++------------
1 files changed, 233 insertions(+), 75 deletions(-)
diff --git a/admin/src/components/business/OperaShopEditWindow.vue b/admin/src/components/business/OperaShopEditWindow.vue
index 7c3855d..0cf82a2 100644
--- a/admin/src/components/business/OperaShopEditWindow.vue
+++ b/admin/src/components/business/OperaShopEditWindow.vue
@@ -49,6 +49,17 @@
<el-button type="primary" @click="openMapSelector">閫夋嫨</el-button>
</div>
</el-form-item>
+ <el-form-item label="浣嶇疆鏍囩" prop="locationTagIds">
+ <el-select v-model="form.locationTagIds" multiple placeholder="璇烽�夋嫨浣嶇疆鏍囩" style="width: 100%;" @change="handleLocationTagChange">
+ <el-option v-for="item in locationTagList" :key="item.id" :label="item.name" :value="item.id"></el-option>
+ </el-select>
+ </el-form-item>
+ <el-form-item label="闂ㄥ簵閰嶉�佽寖鍥�" prop="deliveryRange">
+ <div class="delivery-range">
+ <el-input v-model.number="form.deliveryRange" placeholder="璇疯緭鍏ラ厤閫佽寖鍥�" style="width: 150px;"></el-input>
+ <span class="unit">鍏噷</span>
+ </div>
+ </el-form-item>
</div>
<div class="form-section">
@@ -143,6 +154,34 @@
@deleteRow="index => form.otherMaterialImgs.splice(index, 1)" />
</el-form-item>
</el-tab-pane>
+
+ <el-tab-pane label="闂ㄥ簵鍒嗘垚" name="profit">
+ <div class="profit-section">
+ <h4 class="section-title">灏卞湴瀵勫瓨妯″紡</h4>
+ <el-form-item label="鍦ㄨ鍗曚腑浣滀负瀵勪欢鐐规椂锛屽垎鎴愭瘮渚嬩负" prop="localDeposit" label-suffix="锛�*" :rules="[{ validator: this.validateDepositRate, trigger: 'blur' }]">
+ <div class="profit-input">
+ <el-input v-model="form.localDeposit" placeholder="璇疯緭鍏ュ垎鎴愭瘮渚�" style="width: 150px;"></el-input>
+ <span class="unit">%</span>
+ </div>
+ </el-form-item>
+ </div>
+
+ <div class="profit-section">
+ <h4 class="section-title">鍚屽煄瀵勯�佹ā寮�</h4>
+ <el-form-item label="鍦ㄨ鍗曚腑浣滀负瀵勪欢鐐规椂锛屽垎鎴愭瘮渚嬩负" prop="remoteTake" label-suffix="锛�*" :rules="[{ validator: this.validateDepositRate, trigger: 'blur' }]">
+ <div class="profit-input">
+ <el-input v-model="form.remoteDeposit" placeholder="璇疯緭鍏ュ垎鎴愭瘮渚�" style="width: 150px;"></el-input>
+ <span class="unit">%</span>
+ </div>
+ </el-form-item>
+ <el-form-item label="鍦ㄨ鍗曚腑浣滀负鏀朵欢鐐规椂锛屽垎鎴愭瘮渚嬩负" prop="remoteDeposit" label-suffix="锛�" :rules="[{ validator: this.validateDepositRate, trigger: 'blur' }]">
+ <div class="profit-input">
+ <el-input v-model="form.remoteTake" placeholder="璇疯緭鍏ュ垎鎴愭瘮渚�" style="width: 150px;"></el-input>
+ <span class="unit">%</span>
+ </div>
+ </el-form-item>
+ </div>
+ </el-tab-pane>
</el-tabs>
</div>
</el-form>
@@ -155,6 +194,7 @@
import UploadImages from '@/components/common/uploadImages'
import { detail, updateById } from '@/api/business/shopInfo'
import { listByParentId } from '@/api/business/areas'
+import { fetchList } from '@/api/business/category'
export default {
name: 'OperaShopEditWindow',
extends: BaseOpera,
@@ -176,6 +216,11 @@
address: '',
longitude: '',
latitude: '',
+ locationTagIds: [],
+ deliveryRange: '',
+ localDeposit: '',
+ remoteTake: '',
+ remoteDeposit: '',
legalPersonName: '',
legalPersonPhone: '',
legalPersonCard: '',
@@ -188,6 +233,7 @@
storeInteriorImgs: '',
otherMaterialImgs: ''
},
+ locationTagList: [],
rules: {
name: [{ required: true, message: '璇疯緭鍏ラ棬搴楀悕绉�', trigger: 'blur' }],
companyType: [{ required: true, message: '璇烽�夋嫨闂ㄥ簵绫诲瀷', trigger: 'change' }],
@@ -206,8 +252,8 @@
laborContractImgs: [{ required: true, message: '璇疯緭鍏ユ湁鏁堝姵鍔ㄥ悎鍚�', trigger: 'blur' }],
socialSecurityImgs: [{ required: true, message: '璇疯緭鍏ョぞ淇濈即绾宠瘉鏄�', trigger: 'blur' }],
storeFrontImgs: [{ required: true, message: '璇疯緭鍏ラ棬搴楅棬澶寸収', trigger: 'blur' }],
- storeInteriorImgs: [{ required: true, message: '璇疯緭鍏ラ棬搴楀唴閮ㄧ収鐗�', trigger: 'blur' }],
- otherMaterialImgs: [{ required: true, message: '璇疯緭鍏ュ叾瀹冩潗鏂�', trigger: 'blur' }]
+ storeInteriorImgs: [{ required: true, message: '璇疯緭鍏ラ棬搴楀唴閮ㄧ収鐗�', trigger: 'blur' }]
+ // otherMaterialImgs: [{ required: true, message: '璇疯緭鍏ュ叾瀹冩潗鏂�', trigger: 'blur' }]
},
qualificationTab: 'enterprise',
areaOptions: [],
@@ -222,47 +268,87 @@
'field.id': 'id'
})
this.loadAreaOptions()
+ this.getLocationTagList()
},
methods: {
- open (title, row) {
- this.isWorking.save = false
- detail(row.id)
- .then(res => {
- this.form = {
- id: res.id,
- telephone: res.telephone || '',
- name: res.name || '',
- companyType: res.companyType ?? 1,
- linkName: res.linkName || '',
- linkPhone: res.linkPhone || '',
- idcard: res.idcard || '',
- areaCode: res.provinceId ? [res.provinceId, res.cityId, res.areaId] : [],
- provinceId: res.provinceId || '',
- cityId: res.cityId || '',
- areaId: res.areaId || '',
- address: res.address || '',
- longitude: res.longitude || '',
- latitude: res.latitude || '',
- legalPersonName: res.legalPersonName || '',
- legalPersonPhone: res.legalPersonPhone || '',
- legalPersonCard: res.legalPersonCard || '',
- businessImg: res.companyType === 1 ? [{ fileurl: res.businessImg, url: res.imgPrefix + res.businessImg }] : [],
- idcardImg: [{ fileurl: res.idcardImg, url: res.imgPrefix + res.idcardImg }],
- idcardImgBack: [{ fileurl: res.idcardImgBack, url: res.imgPrefix + res.idcardImgBack }],
- laborContractImgs: res.laborContractImgs.map(item => ({ fileurl: item, url: res.imgPrefix + item })),
- socialSecurityImgs: res.socialSecurityImgs.map(item => ({ fileurl: item, url: res.imgPrefix + item })),
- storeFrontImgs: res.storeFrontImgs.map(item => ({ fileurl: item, url: res.imgPrefix + item })),
- storeInteriorImgs: res.storeInteriorImgs.map(item => ({ fileurl: item, url: res.imgPrefix + item })),
- otherMaterialImgs: res.otherMaterialImgs ? res.otherMaterialImgs.map(item => ({ fileurl: item, url: res.imgPrefix + item })) : []
+ validateDepositRate (rule, value, callback) {
+ if (value !== null && value !== '' && value !== undefined) {
+ const num = Number(value)
+ if (isNaN(num)) {
+ callback(new Error('璇疯緭鍏ユ湁鏁堟暟瀛�'))
+ } else if (num < 1) {
+ callback(new Error('蹇呴』澶т簬绛変簬1'))
+ } else {
+ const str = String(num)
+ if (str.includes('.')) {
+ const decimal = str.split('.')[1]
+ if (decimal.length > 1) {
+ callback(new Error('鏈�澶氭敮鎸佷竴浣嶅皬鏁�'))
+ } else {
+ callback()
+ }
+ } else {
+ callback()
}
- this.qualificationTab = res.companyType === 1 ? 'enterprise' : 'personal'
- this.title = title
- this.visible = true
- })
- .catch(e => {
- this.$tip.apiFailed(e)
- })
+ }
+ } else {
+ callback()
+ }
},
+ handleLocationTagChange (val) {
+ if (val.length > 2) {
+ this.$message.warning('浣嶇疆鏍囩鏈�澶氬彧鑳介�夋嫨2涓�')
+ this.form.locationTagIds = val.slice(0, 2)
+ }
+ },
+ open (title, row) {
+ this.isWorking.save = false
+ detail(row.id)
+ .then(res => {
+ this.form = {
+ id: res.id,
+ telephone: res.telephone || '',
+ name: res.name || '',
+ companyType: res.companyType ?? 1,
+ linkName: res.linkName || '',
+ linkPhone: res.linkPhone || '',
+ idcard: res.idcard || '',
+ areaCode: res.provinceId ? [res.provinceId, res.cityId, res.areaId] : [],
+ provinceId: res.provinceId || '',
+ cityId: res.cityId || '',
+ areaId: res.areaId || '',
+ address: res.address || '',
+ longitude: res.longitude || '',
+ latitude: res.latitude || '',
+ locationTagIds: res.locationTagIds || [],
+ deliveryRange: res.deliveryRange || '',
+ localDeposit: res.localDeposit || '',
+ remoteTake: res.remoteTake || '',
+ remoteDeposit: res.remoteDeposit || '',
+ legalPersonName: res.legalPersonName || '',
+ legalPersonPhone: res.legalPersonPhone || '',
+ legalPersonCard: res.legalPersonCard || '',
+ businessImg: res.companyType === 1 ? [{ fileurl: res.businessImg, url: res.imgPrefix + res.businessImg }] : [],
+ idcardImg: [{ fileurl: res.idcardImg, url: res.imgPrefix + res.idcardImg }],
+ idcardImgBack: [{ fileurl: res.idcardImgBack, url: res.imgPrefix + res.idcardImgBack }],
+ laborContractImgs: res.laborContractImgs.map(item => ({ fileurl: item, url: res.imgPrefix + item })),
+ socialSecurityImgs: res.socialSecurityImgs.map(item => ({ fileurl: item, url: res.imgPrefix + item })),
+ storeFrontImgs: res.storeFrontImgs.map(item => ({ fileurl: item, url: res.imgPrefix + item })),
+ storeInteriorImgs: res.storeInteriorImgs.map(item => ({ fileurl: item, url: res.imgPrefix + item })),
+ otherMaterialImgs: res.otherMaterialImgs ? res.otherMaterialImgs.map(item => ({ fileurl: item, url: res.imgPrefix + item })) : []
+ }
+ // 澶勭悊浣嶇疆鏍囩锛堝瓧绗︿覆杞暟缁勶級
+ if (this.form.locationTagIds && typeof this.form.locationTagIds === 'string') {
+ this.form.locationTagIds = this.form.locationTagIds.split(',').map(Number)
+ }
+ this.qualificationTab = res.companyType === 1 ? 'enterprise' : 'personal'
+ this.title = title
+ this.visible = true
+ })
+ .catch(e => {
+ this.$tip.apiFailed(e)
+ })
+ },
loadAreaOptions () {
listByParentId({ })
.then(data => {
@@ -272,6 +358,21 @@
.catch(e => {
this.$tip.apiFailed(e)
})
+ },
+ // 鑾峰彇浣嶇疆鏍囩鍒楄〃
+ async getLocationTagList() {
+ try {
+ const res = await fetchList({
+ capacity: 9999,
+ page: 1,
+ model: {
+ type: 5
+ }
+ })
+ this.locationTagList = res.records
+ } catch (e) {
+ this.$tip.apiFailed(e.message)
+ }
},
formatAreaData (data) {
const map = {}
@@ -303,40 +404,64 @@
openMapSelector () {
window.open('https://lbs.qq.com/getPoint/', '_blank')
},
- handleConfirm () {
- this.$refs.form.validate(valid => {
+ async handleConfirm () {
+ try {
+ // 鏍¢獙鍒嗘垚姣斾緥
+ if (!this.form.localDeposit) {
+ this.$message.error('璇峰~鍐欏氨鍦板瘎瀛樻ā寮忕殑鍒嗘垚姣斾緥')
+ return
+ }
+ if (!this.form.remoteTake) {
+ this.$message.error('璇峰~鍐欏悓鍩庡瘎閫佹ā寮忎笅浣滀负瀵勪欢鐐圭殑鍒嗘垚姣斾緥')
+ return
+ }
+ if (!this.form.remoteDeposit) {
+ this.$message.error('璇峰~鍐欏悓鍩庡瘎閫佹ā寮忎笅浣滀负鏀朵欢鐐圭殑鍒嗘垚姣斾緥')
+ return
+ }
+
+ const valid = await this.$refs.form.validate()
if (!valid) return
this.isWorking.save = true
- const imageFields = ['laborContractImgs', 'socialSecurityImgs', 'storeFrontImgs', 'storeInteriorImgs', 'otherMaterialImgs']
- const singleImageFields = ['businessImg', 'idcardImg', 'idcardImgBack']
- const data = { ...this.form }
- singleImageFields.forEach(field => {
- if (data[field] && Array.isArray(data[field])) {
- data[field] = data[field].map(item => typeof item === 'object' ? item.fileurl : item).join(',')
- }
- })
+ const params = { ...this.form }
+ // 澶勭悊鐪佸競鍖虹紪鐮�
+ if (params.areaCode && params.areaCode.length === 3) {
+ params.provinceId = params.areaCode[0]
+ params.cityId = params.areaCode[1]
+ params.areaId = params.areaCode[2]
+ }
+ delete params.areaCode
+ // 澶勭悊浣嶇疆鏍囩锛堟暟缁勮浆閫楀彿鍒嗛殧瀛楃涓诧級
+ if (params.locationTagIds && Array.isArray(params.locationTagIds)) {
+ params.locationTagIds = params.locationTagIds.join(',')
+ }
+ // 澶勭悊鍥剧墖鏁扮粍
+ const imageFields = ['idcardImg', 'idcardImgBack', 'businessImg', 'laborContractImgs', 'socialSecurityImgs', 'storeFrontImgs', 'storeInteriorImgs', 'otherMaterialImgs']
imageFields.forEach(field => {
- if (data[field] && Array.isArray(data[field])) {
- data[field] = data[field].map(item => typeof item === 'object' ? item.fileurl : item)
+ if (params[field] && Array.isArray(params[field])) {
+ // 韬唤璇佸拰钀ヤ笟鎵х収鍥剧墖闇�瑕佷紶瀛楃涓诧紙鍗曚釜鍥剧墖锛�
+ if (['idcardImg', 'idcardImgBack', 'businessImg'].includes(field)) {
+ params[field] = params[field].map(item => item.fileurl).join(',')
+ } else {
+ // 鍏朵粬鍥剧墖浼犳暟缁�
+ params[field] = params[field].map(item => item.fileurl)
+ }
}
})
- data.provinceId = this.form.areaCode[0] || ''
- data.cityId = this.form.areaCode[1] || ''
- data.areaId = this.form.areaCode[2] || ''
- delete data.areaCode
- updateById(data)
- .then(res => {
- this.$tip.apiSuccess(res || '淇濆瓨鎴愬姛')
- this.visible = false
- this.$emit('success')
- })
- .catch(e => {
- this.$tip.apiFailed(e)
- })
- .finally(() => {
- this.isWorking.save = false
- })
- })
+ // 涓汉闂ㄥ簵涓嶉渶瑕佷紶businessImg
+ if (params.companyType === 0) {
+ delete params.businessImg
+ }
+ await updateById(params)
+ this.$tip.apiSuccess('淇濆瓨鎴愬姛')
+ this.visible = false
+ this.$emit('success')
+ } catch (e) {
+ this.$tip.apiFailed(e)
+ console.error('淇濆瓨澶辫触:', e)
+ } finally {
+ this.isWorking.save = false
+ }
}
}
}
@@ -360,13 +485,46 @@
margin: -10px 0 15px 0;
}
.longitude-latitude {
- display: flex;
- align-items: center;
- gap: 10px;
-}
-.longitude-latitude .separator {
- color: #606266;
-}
+ display: flex;
+ align-items: center;
+ gap: 10px;
+ }
+ .longitude-latitude .separator {
+ color: #909399;
+ }
+
+ .delivery-range {
+ display: flex;
+ align-items: center;
+ gap: 10px;
+ }
+
+ .unit {
+ color: #909399;
+ font-size: 14px;
+ }
+
+ .profit-section {
+ margin-bottom: 30px;
+ padding: 20px;
+ background: #f5f7fa;
+ border-radius: 4px;
+ }
+
+ .profit-section .section-title {
+ font-size: 16px;
+ font-weight: bold;
+ color: #303133;
+ margin-bottom: 20px;
+ padding-bottom: 10px;
+ border-bottom: 1px solid #e4e7ed;
+ }
+
+ .profit-input {
+ display: flex;
+ align-items: center;
+ gap: 10px;
+ }
.inline-form /deep/ .el-form-item {
display: block;
margin-right: 0;
--
Gitblit v1.9.3