From 47c9193f257d66925a5d40a1d0b12eba331b8f4a Mon Sep 17 00:00:00 2001
From: doum <doum>
Date: 星期三, 10 十二月 2025 17:52:49 +0800
Subject: [PATCH] 经销商管理

---
 admin/src/components/business/OperaShopWindow.vue |  398 +++++++++++++++++++++++++++++++++++++++++++++++---------
 1 files changed, 333 insertions(+), 65 deletions(-)

diff --git a/admin/src/components/business/OperaShopWindow.vue b/admin/src/components/business/OperaShopWindow.vue
index 4dd0994..c0d797a 100644
--- a/admin/src/components/business/OperaShopWindow.vue
+++ b/admin/src/components/business/OperaShopWindow.vue
@@ -1,68 +1,191 @@
 <template>
-  <GlobalAlertWindow
+  <GlobalWindow
     v-loading="isUploading"
     :title="title"
+    width="60%"
     :visible.sync="visible"
     :confirm-working="isWorking"
     @confirm="confirm"
   >
     <el-form :model="form" ref="form" :rules="rules" label-width="110px" label-suffix="锛�" inline>
-      <el-form-item label="搴楅摵鍚嶇О" prop="name">
+      <p class="tip-header" >璐﹀彿淇℃伅</p>
+      <el-form-item label="鐧诲綍璐﹀彿" prop="username">
+        <el-input v-model="form.username" placeholder="璇疯緭鍏ョ櫥褰曡处鍙�" :maxlength="20" v-trim/>
+      </el-form-item>
+      <p class="tip-warn" style="width: 100%;text-align: center"><i class="el-icon-warning"></i>鏂板缓鎴栬�呬慨鏀硅处鍙凤紝瀵嗙爜榛樿涓�:銆愰棬搴桰D+"@123456"銆戯紝濡傞棬搴桰D涓篠001,榛樿瀵嗙爜锛歋001@123456</p>
+      <p class="tip-header" >鍩烘湰淇℃伅</p>
+      <el-form-item label="缁忛攢鍟嗗悕绉�" prop="name">
         <el-input v-model="form.name" placeholder="璇疯緭鍏ュ簵閾哄悕绉帮紝20瀛椾互鍐�" :maxlength="20" v-trim/>
       </el-form-item>
-      <el-form-item label="搴楅摵LOGO" prop="imgurl">
-        <UploadAvatarImage
-          :file="{ 'imgurlfull': form.imgurlfull, 'imgurl': form.imgurl }"
-          :uploadData="uploadData"
-          @uploadSuccess="uploadAvatarSuccess"
-          @uploadEnd="isUploading = false"
-          @uploadBegin="isUploading = true"
-        />
+      <el-form-item label="闂ㄥ簵ID" prop="code">
+        <el-input v-model="form.code" placeholder="璇疯緭鍏ラ棬搴桰D锛�10瀛椾互鍐�" :maxlength="10" v-trim/>
       </el-form-item>
-      <el-form-item label="搴楅摵鍦板潃" prop="addr">
-        <el-input v-model="form.addr" placeholder="璇疯緭鍏ュ湴鍧�" v-trim/>
+      <el-form-item label="閿�鍞ā寮�" prop="saleType">
+        <el-radio-group v-model="form.saleType">
+          <el-radio :label="0">骞冲彴閾鸿揣</el-radio>
+          <el-radio :label="1">鑷富閲囪喘</el-radio>
+        </el-radio-group>
       </el-form-item>
-      <el-form-item label="搴楅摵璐熻矗浜�" prop="memberId">
-        <el-select
-          v-model="form.memberId"
-          placeholder="璇疯緭鍏ヤ細鍛樻樀绉�/鎵嬫満鍙凤紝鍐嶉�夋嫨"
-          filterable
-          remote
-          reserve-keyword
-          :remote-method="remoteMethod"
-          :loading="searchLoading"
-        >
+      <el-form-item label="鑱旂郴浜�" prop="realname">
+        <el-input v-model="form.realname" placeholder="璇疯緭鍏ヨ仈绯讳汉"  v-trim/>
+      </el-form-item>
+      <el-form-item label="鑱旂郴鐢佃瘽" prop="phone">
+        <el-input v-model="form.phone" placeholder="璇疯緭鍏ヨ仈绯荤數璇�"  v-trim/>
+      </el-form-item>
+      <el-form-item label="钀ヤ笟鏃堕棿" prop="startTime">
+        <el-input v-model="form.startTime" placeholder="璇疯緭鍏ヨ惀涓氭椂闂�"  v-trim/>
+      </el-form-item>
+      <el-form-item label="鎵�灞炲尯鍩�" prop="bigAreaId">
+        <el-select v-model="form.bigAreaId" placeholder="璇烽�夋嫨鎵�灞炲尯鍩�"  filterable clearable>
           <el-option
-            v-for="item in users"
-            :key="item.id"
-            :label="item.nickname"
-            :value="item.id">
-          </el-option>
+              v-for="item in bigAreas"
+              :key="item.id"
+              :value="item.id"
+              :label="item.name"
+          ></el-option>
         </el-select>
       </el-form-item>
+      <div  style="display: flex; ">
+        <el-form-item label="閫夋嫨鐪佸競鍖�" prop="provinceId">
+          <el-select v-model="form.provinceId" placeholder="閫夋嫨鐪佷唤" clearable @change="selectProvince">
+            <el-option
+                v-for="item in provinces"
+                :key="item.id"
+                :value="item.id"
+                :label="item.name"
+            ></el-option>
+          </el-select>
+      </el-form-item>
+        <el-form-item label="" prop="cityId">
+          <el-select v-model="form.cityId" placeholder="閫夋嫨鍩庡競" clearable  @change="selectCity">
+            <el-option
+                v-for="item in cities"
+                :key="item.id"
+                :value="item.id"
+                :label="item.name"
+            ></el-option>
+          </el-select>
+        </el-form-item>
+        <el-form-item label="" prop="areaId" >
+          <el-select v-model="form.areaId" placeholder="閫夋嫨鍘垮尯" clearable>
+            <el-option
+                v-for="item in areas"
+                :key="item.id"
+                :value="item.id"
+                :label="item.name"
+            ></el-option>
+          </el-select>
+        </el-form-item>
+      </div>
+      <el-form-item label="璇︾粏鍦板潃" prop="addr">
+        <el-input v-model="form.addr" placeholder="璇疯緭鍏ヨ缁嗗湴鍧�" v-trim/>
+      </el-form-item>
+      <el-form-item label="瀹氫綅淇℃伅" prop="locationInfo">
+        <div  style="display: flex;  ">
+          <el-input v-model="form.locationInfo" placeholder="璇风偣鍑婚�夋嫨鎸夐挳锛屾悳绱绾害,缁忓害]淇℃伅" v-trim  style=" width: calc(100% - 100px);"/>
+          <el-button type="primary" style=" margin-left: 20px; width: 80px" @click="selectLocation">閫夋嫨</el-button>
+         </div>
+        <p class="tip-warn" style="width: 100%;"><i class="el-icon-warning"></i>
+          鐐瑰嚮[閫夋嫨]锛岃烦杞悗鏍规嵁闂ㄥ簵鍦板潃鎼滅储鍦板浘瀹氫綅鍦板潃锛岃幏鍙朳绾害,缁忓害]淇℃伅銆�</p>
+      </el-form-item>
+      <el-form-item label="闂ㄥ簵鍥剧墖" prop="imgurl">
+        <div  style="display: flex; display: flex; align-items: center;justify-content: center;  height: 100%; width: 100%">
+          <UploadAvatarImage
+            :file="{ 'imgurlfull': form.imgurlfull, 'imgurl': form.imgurl }"
+            :uploadData="uploadData"
+            @uploadSuccess="uploadAvatarSuccess"
+            @uploadEnd="isUploading = false"
+            @uploadBegin="isUploading = true"
+            style=" width: 120px;"
+          />
+          <div class="tip-warn" style=" margin-left: 20px; margin-top: 30px;">
+            寤鸿灏哄锛�100px X 100px
+            鏀寔png銆乯pg銆乯peg鏍煎紡锛屽ぇ灏忎笉瓒呰繃2M锛屼笂浼犲浘鐗囦笉鍏佽娑夊強鏀挎不鏁忔劅涓庤壊鎯�
+          </div>
+        </div>
+      </el-form-item>
+      <el-form-item label="瀹d紶娴锋姤" prop="posterImg">
+        <div  style="display: flex;  align-items: center;justify-content: center;  height: 100%; width: 100%">
+        <UploadAvatarImage
+            :file="{ 'imgurlfull': form.posterImgfull, 'imgurl': form.posterImg }"
+            :uploadData="uploadData"
+            @uploadSuccess="uploadAvatarSuccess1"
+            @uploadEnd="isUploading1 = false"
+            @uploadBegin="isUploading1 = true"
+            style=" width: 120px;"
+        />
+          <div class="tip-warn" style=" margin-left: 20px; margin-top: 30px;">
+            寤鸿灏哄锛�100px X 100px
+            鏀寔png銆乯pg銆乯peg鏍煎紡锛屽ぇ灏忎笉瓒呰繃2M锛屼笂浼犲浘鐗囦笉鍏佽娑夊強鏀挎不鏁忔劅涓庤壊鎯�
+          </div>
+        </div>
+      </el-form-item>
+      <p class="tip-header" >璧勮川淇℃伅</p>
+      <el-form-item label="钀ヤ笟鎵х収" prop="businessImg">
+        <div  style="display: flex; align-items: center;justify-content: center;  height: 100%; width: 100%">
+        <UploadAvatarImage
+            :file="{ 'imgurlfull': form.businessImgfull, 'imgurl': form.businessImg}"
+            :uploadData="uploadData"
+            @uploadSuccess="uploadAvatarSuccess2"
+            @uploadEnd="isUploading2 = false"
+            @uploadBegin="isUploading2= true"
+            style=" width: 120px;"
+        />
+        <div class="tip-warn" style=" margin-left: 20px; margin-top: 30px;">
+          寤鸿灏哄锛�100px X 100px
+          鏀寔png銆乯pg銆乯peg鏍煎紡锛屽ぇ灏忎笉瓒呰繃2M锛屼笂浼犲浘鐗囦笉鍏佽娑夊強鏀挎不鏁忔劅涓庤壊鎯�
+        </div>
+        </div>
+      </el-form-item>
+      <el-form-item label="娉曚汉濮撳悕" prop="legalPersonName">
+        <el-input v-model="form.legalPersonName" placeholder="璇疯緭鍏ユ硶浜哄鍚�" v-trim/>
+      </el-form-item>
+      <el-form-item label="娉曚汉鐢佃瘽" prop="legalPersonPhone">
+        <el-input v-model="form.legalPersonPhone" placeholder="璇疯緭鍏ユ硶浜鸿仈绯荤數璇�" v-trim/>
+      </el-form-item>
+      <div  style="display: flex;  height: 100%; width: 100%">
+       <el-form-item label="韬唤璇佺収"   prop="idcardImg"   style=" width: 250px;">
+        <UploadAvatarImage
+            :file="{ 'imgurlfull': form.idcardImgfull, 'imgurl': form.idcardImg}"
+            :uploadData="uploadData"
+            @uploadSuccess="uploadAvatarSuccess3"
+            @uploadEnd="isUploading3 = false"
+            @uploadBegin="isUploading3= true"
+        />
+         <div class="tip-warn" style=" margin-left: 20px; ">  浜哄儚闈�  </div>
+          </el-form-item>
+        <el-form-item label="" prop="idcardImgBack" style="  width: 200px;margin-left: 30px">
+          <UploadAvatarImage
+              :file="{ 'imgurlfull': form.idcardImgBackfull, 'imgurl': form.idcardImgBack}"
+              :uploadData="uploadData"
+              @uploadSuccess="uploadAvatarSuccess4"
+              @uploadEnd="isUploading4 = false"
+              @uploadBegin="isUploading4= true"
+          />
+          <div class="tip-warn" style=" margin-left: 20px; ">鍥藉窘闈�</div>
+        </el-form-item>
+        </div>
     </el-form>
-  </GlobalAlertWindow>
+  </GlobalWindow>
 </template>
 
 <script>
 import BaseOpera from '@/components/base/BaseOpera'
-import GlobalAlertWindow from '@/components/common/GlobalAlertWindow'
 import UploadAvatarImage from '@/components/common/UploadAvatarImage'
-import { findAll } from '@/api/business/member'
+import GlobalWindow from '@/components/common/GlobalWindow'
+import { listByParentId } from '@/api/business/areas'
+import { findAll as listBigAreas } from '@/api/business/labels'
 export default {
   name: 'OperaShopWindow',
   extends: BaseOpera,
-  components: { GlobalAlertWindow, UploadAvatarImage },
+  components: { GlobalWindow, UploadAvatarImage },
   data () {
-    let memberRule = (rule, value, callBack) => {
-      if (!value) {
-        callBack(new Error())
-      } else {
-        callBack()
-      }
-    }
     return {
       isUploading: false,
+      isUploading1: false,
+      isUploading2: false,
+      isUploading3: false,
+      isUploading4: false,
       searchLoading: false,
       uploadData: {
         folder: 'shop'
@@ -71,23 +194,89 @@
       form: {
         id: null,
         name: '',
+        username: '',
+        realname: '',
+        phone: '',
+        code: '',
+        startTime: null,
+        bigAreaId: null,
+        areaId: null,
+        saleType: 0,
+        provinceId: null,
+        legalPersonName: null,
+        legalPersonPhone: null,
+        cityId: null,
         imgurl: '',
         imgurlfull: '',
+        businessImg: '',
+        businessImgfull: '',
+        idcardImgBack: '',
+        idcardImgBackfull: '',
+        idcardImg: '',
+        idcardImgfull: '',
+        posterImg: '',
+        posterImgfull: '',
+        locationInfo: '',
         addr: '',
         memberId: ''
       },
-      users: [],
+      bigAreas: [],
+      provinces: [],
+      cities: [],
+      areas: [],
       // 楠岃瘉瑙勫垯
       rules: {
         name: [
-          { required: true, message: '璇疯緭鍏ュ簵閾哄悕绉�', tigger: 'blur' }
+          { required: true, message: '璇疯緭鍏ュ悕绉�', tigger: 'blur' }
         ],
-        imgurl: [
-          { required: true, message: '璇蜂笂浼犲簵閾篖OGO', tigger: 'change' }
+        saleType: [
+          { required: true, message: '璇烽�夋嫨閿�鍞ā寮�' }
         ],
-        memberId: [
-          { required: true, validator: memberRule,  message: '璇烽�夋嫨鍏宠仈鐢ㄦ埛', tigger: 'change' }
+        addr: [
+          { required: true, message: '璇疯緭鍏ヨ缁嗗湴鍧�', tigger: 'blur' }
         ],
+        code: [
+          { required: true, message: '璇疯緭鍏ヤ笂浼犻棬搴桰D', tigger: 'blur' }
+        ],
+        username: [
+          { required: true, message: '璇疯緭鍏ョ櫥褰曡处鍙�', tigger: 'blur' }
+        ],
+        realname: [
+          { required: true, message: '璇疯緭鍏ヨ仈绯讳汉濮撳悕', tigger: 'blur' }
+        ],
+        legalPersonName: [
+          { required: true, message: '璇疯緭鍏ユ硶浜哄鍚�', tigger: 'blur' }
+        ],
+        phone: [
+          { required: true, message: '璇疯緭鍏ヨ仈绯讳汉鐢佃瘽', tigger: 'blur' }
+        ],
+        startTime: [
+          { required: true, message: '璇疯緭鍏ヨ惀涓氭椂闂�', tigger: 'blur' }
+        ],
+        locationInfo: [
+          { required: true, message: '璇峰畬鍠勫畾浣嶄俊鎭�', tigger: 'blur' }
+        ],
+        businessImg: [
+          { required: true, message: '璇蜂笂浼犺惀涓氭墽鐓�', tigger: 'change' }
+        ],
+        idcardImgBack: [
+          { required: true, message: '璇蜂笂浼犳硶浜鸿韩浠借瘉鍥藉窘闈�', tigger: 'change' }
+        ],
+        idcardImg: [
+          { required: true, message: '璇蜂笂浼犳硶浜鸿韩浠借瘉浜哄儚闈�', tigger: 'change' }
+        ],
+        provinceId: [
+          { required: true, message: '璇烽�夋嫨鐪佸競' }
+        ],
+        cityId: [
+          { required: true, message: '璇烽�夋嫨鍩庡競' }
+        ],
+        areaId: [
+          { required: true, message: '璇烽�夋嫨鍘垮尯' }
+        ],
+        bigAreaId: [
+          { required: true, message: '璇烽�夋嫨鎵�灞炲尯鍩�' }
+        ]
       }
     }
   },
@@ -96,14 +285,75 @@
       api: '/business/shop',
       'field.id': 'id'
     })
+    listBigAreas({ type: 13 })
+      .then(data => {
+        this.bigAreas = data
+      })
+    listByParentId({ type: 0, parentId: '' })
+      .then(data => {
+        this.provinces = data
+      })
   },
   methods: {
+    selectProvince (val) {
+      this.form.cityId = null
+      this.form.areaId = null
+      this.cities = []
+      this.areas = []
+      listByParentId({ type: 1, parentId: val })
+        .then(data => {
+          this.cities = data
+        })
+        .catch(e => {
+          this.$tip.error(e)
+        })
+    },
+    selectCity (val) {
+      this.form.areaId = null
+      this.areas = []
+      listByParentId({ type: 2, parentId: val })
+        .then(data => {
+          this.areas = data
+        })
+        .catch(e => {
+          this.$tip.error(e)
+        })
+    },
+    initCityArea (proid, cityid) {
+      listByParentId({ type: 1, parentId: proid })
+        .then(data => {
+          this.cities = data
+        })
+        .catch(e => {
+          this.$tip.error(e)
+        })
+      listByParentId({ type: 2, parentId: cityid })
+        .then(data => {
+          this.areas = data
+        })
+        .catch(e => {
+          this.$tip.error(e)
+        })
+    },
+
+    selectLocation () {
+      window.open('https://lbs.qq.com/tool/getpoint/get-point.html')
+    },
     open (title, target) {
       this.title = title
       this.visible = true
-      // this.isEdit = false
       this.form.imgurlfull = ''
       this.form.imgurl = ''
+      this.form.idcardImgfull = ''
+      this.form.idcardImg = ''
+      this.form.idcardImgBackfull = ''
+      this.form.idcardImgBack = ''
+      this.form.businessImgfull = ''
+      this.form.businessImg = ''
+      this.form.posterImgfull = ''
+      this.form.posterImg = ''
+      this.cities = []
+      this.areas = []
       // 鏂板缓
       if (target == null) {
         this.$nextTick(() => {
@@ -118,32 +368,50 @@
         for (const key in this.form) {
           this.form[key] = target[key]
         }
-        this.form.imgurlfull = target.imgFullUrl + target.imgurl
-        this.remoteMethod(target.nikeName)
+        if (target.idcardImg) {
+          this.form.idcardImgfull = target.imgFullUrl + target.idcardImg
+        }
+        if (target.idcardImgBack) {
+          this.form.idcardImgBackfull = target.imgFullUrl + target.idcardImgBack
+        }
+        if (target.imgurl) {
+          this.form.imgurlfull = target.imgFullUrl + target.imgurl
+        }
+        if (target.businessImg) {
+          this.form.businessImgfull = target.imgFullUrl + target.businessImg
+        }
+        if (target.posterImg) {
+          this.form.posterImgfull = target.imgFullUrl + target.posterImg
+        }
+        console.log('==========================', target.areas)
+        if (target.areas != null) {
+          this.form.provinceId = target.areas.provinceId
+          this.form.cityId = target.areas.cityId
+          this.initCityArea(this.form.provinceId, this.form.cityId)
+        }
       })
     },
-    uploadAvatarSuccess(file) {
+    uploadAvatarSuccess (file) {
       this.form.imgurl = file.imgurl
       this.form.imgurlfull = file.imgurlfull
     },
-    remoteMethod(query) {
-      if (query !== '') {
-        this.searchLoading = true
-        findAll({
-          model: {
-            nickname: query,
-            status: 0
-          }
-        })
-          .then(res => {
-            this.users = res
-          })
-          .finally(() => {
-            this.searchLoading = false
-          })
-      }
+    uploadAvatarSuccess1 (file) {
+      this.form.posterImg = file.imgurl
+      this.form.posterImgfull = file.imgurlfull
+    },
+    uploadAvatarSuccess2 (file) {
+      this.form.businessImg = file.imgurl
+      this.form.businessImgfull = file.imgurlfull
+    },
+    uploadAvatarSuccess4 (file) {
+      this.form.idcardImgBack = file.imgurl
+      this.form.idcardImgBackfull = file.imgurlfull
+    },
+    uploadAvatarSuccess3 (file) {
+      this.form.idcardImg = file.imgurl
+      this.form.idcardImgfull = file.imgurlfull
     }
-  },
+  }
 }
 </script>
 

--
Gitblit v1.9.3