From bcad3fe1b888ae11d437f6558b7974cfa30cfb2e Mon Sep 17 00:00:00 2001
From: doum <doum>
Date: 星期二, 13 一月 2026 18:24:07 +0800
Subject: [PATCH] 经销商管理

---
 admin/src/components/business/OperaGoodsWindow.vue |  266 ++++++++++++++++++++++++++++++++++++++++-------------
 1 files changed, 200 insertions(+), 66 deletions(-)

diff --git a/admin/src/components/business/OperaGoodsWindow.vue b/admin/src/components/business/OperaGoodsWindow.vue
index a3084a4..cb55733 100644
--- a/admin/src/components/business/OperaGoodsWindow.vue
+++ b/admin/src/components/business/OperaGoodsWindow.vue
@@ -10,69 +10,113 @@
       <el-form-item label="鍟嗗搧鍚嶇О" prop="name">
         <el-input v-model="form.name" placeholder="璇疯緭鍏ュ晢鍝佸悕绉�" v-trim/>
       </el-form-item>
-      <el-form-item v-if="form.type==2" label="鍟嗗搧鏍囩" prop="labels">
-        <el-input v-model="form.labels" placeholder="璇疯緭鍏ユ爣绛撅紝澶氫釜鐢ㄢ��,鈥濋殧寮�锛屼笉瓒呰繃5涓�" v-trim/>
+      <el-form-item label="鍟嗗搧鍒嗙被" prop="categoryId">
+        <el-select  v-model="form.categoryId"    placeholder="璇烽�夋嫨鎵�灞炲垎绫�"  clearable filterable >
+          <el-option
+            v-for="item in labels()"
+            :key="item.id"
+            :value="item.id"
+            :label="item.name"
+          ></el-option>
+        </el-select>
       </el-form-item>
-      <template v-else>
-        <el-form-item label="鍟嗗搧鍒嗙被" prop="categoryId">
-          <el-select
-            v-model="form.categoryId"
-            placeholder="璇烽�夋嫨鎵�灞炲垎绫�"
-          >
-            <el-option
-              v-for="item in labels()"
-              :key="item.id"
-              :value="item.id"
-              :label="item.name"
-            ></el-option>
-          </el-select>
-        </el-form-item>
-        <el-form-item label="鍟嗗搧鍝佺墝" prop="brandId">
-          <el-select
-            v-model="form.brandId"
-            placeholder="璇烽�夋嫨鍟嗗搧鍝佺墝"
-          >
-            <el-option
-              v-for="item in brands()"
-              :key="item.id"
-              :value="item.id"
-              :label="item.name"
-            ></el-option>
-          </el-select>
-        </el-form-item>
-      </template>
+      <el-form-item label="鍟嗗搧鍝佺墝" prop="brandId">
+        <el-select v-model="form.brandId"   placeholder="璇烽�夋嫨鍟嗗搧鍝佺墝" clearable filterable >
+          <el-option
+            v-for="item in brands()"
+            :key="item.id"
+            :value="item.id"
+            :label="item.name"
+          ></el-option>
+        </el-select>
+      </el-form-item>
       <el-form-item label="鍟嗗搧涓诲浘" prop="imgurl">
-        <UploadAvatarImage
-          :file="{ 'imgurlfull': form.imgurlfull, 'imgurl': form.imgurl }"
-          @uploadSuccess="uploadAvatarSuccess"
-          @uploadEnd="isUploading = false"
-          @uploadBegin="isUploading = true"
-        />
+        <div  style="display: flex; align-items: center;justify-content: center;  height: 100%; width: 100%">
+          <UploadAvatarImage
+              :file="{ 'imgurlfull': form.imgurlfull, 'imgurl': form.imgurl}"
+              :uploadData="{folder:'goods'}"
+              @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 v-if="form.type==2" label="鍜栬眴椋庡懗" prop="fileList">
-        <UploadAvatarImage
-          :file="{ 'imgurlfull': form.imgurlfull, 'imgurl': form.imgurl }"
-          @uploadSuccess="uploadAvatarSuccess"
-          @uploadEnd="isUploading = false"
-          @uploadBegin="isUploading = true"
-        />
-      </el-form-item>
-      <el-form-item v-else label="鍟嗗搧杞挱鍥�" prop="fileList">
+      <el-form-item label="鍟嗗搧杞挱鍥�" prop="fileList">
         <UploadImage
           :fileList="form.fileList"
+          :uploadData="{folder:'goods'}"
           @beginUpload="isUploading=true"
           @endUpload="isUploading=false"/>
+        <p class="tip-warn">
+          寤鸿灏哄锛�750px X 750px锛屼笂闄�6寮�
+          鏀寔png銆乯pg銆乯peg鏍煎紡锛屽ぇ灏忎笉瓒呰繃2M锛屼笂浼犲浘鐗囦笉鍏佽娑夊強鏀挎不鏁忔劅涓庤壊鎯�,
+        </p>
       </el-form-item>
-      <el-form-item label="灞曠ず浠锋牸" prop="price">
-        <el-input v-model="form.price" placeholder="璇疯緭鍏ュ睍绀轰环鏍�" v-trim>
-          <template slot="append">{{ form.type != 1 ? '鍏�' : '鍜栬眴' }}</template>
+      <el-form-item label="鍑哄巶浠凤紙鍏冿級" prop="price">
+        <el-input type="number" v-model="form.price" placeholder="璇疯緭鍏ュ嚭鍘備环" v-trim>  <template slot="append"> 鍏�</template>  </el-input>
+      </el-form-item>
+      <el-form-item label="閿�鍞环锛堝厓锛�" prop="skuPrice">
+        <el-input type="number" v-model="form.skuPrice" placeholder="璇疯緭鍏ラ攢鍞环" v-trim>  <template slot="append"> 鍏�</template>  </el-input>
+      </el-form-item>
+      <el-form-item label="鍒掔嚎浠凤紙鍏冿級" prop="showPrice">
+        <el-input type="number" v-model="form.showPrice" placeholder="璇疯緭鍏ョ嚎浠�" v-trim>  <template slot="append"> 鍏�</template>  </el-input>
+      </el-form-item>
+      <el-form-item label="绉垎鎶垫墸棰濆害" prop="deductRata">
+        <el-input type="number" v-model="form.deductRata" placeholder="璇疯緭鍏ョН鍒嗘姷鎵i搴�" v-trim>
+          <template slot="append">%</template>
+        </el-input>
+        <p class="tip-warn" style="margin-bottom: 1px;"><i class="el-icon-warning"></i>鎻愰啋锛氱Н鍒嗗彲鎶垫墸閲戦鍗犲晢鍝侀浂鍞环鐨勭櫨鍒嗘瘮锛�0.1%锝�100%涔嬮棿 </p>
+      </el-form-item>
+      <el-form-item  label="搴撳瓨閲�" prop="stockNum">
+        <el-input type="number" v-model="form.stockNum" placeholder="璇疯緭鍏ュ晢鍝佸簱瀛橀噺" v-trim/>
+      </el-form-item>
+      <el-form-item label="鍟嗗搧鍗曚綅" prop="unitName">
+        <el-input v-model="form.unitName" placeholder="璇疯緭鍏ュ晢鍝佸崟浣�" v-trim/>
+      </el-form-item>
+      <el-form-item  label="鍒濆閿�閲�" prop="salenum">
+        <el-input type="number" v-model="form.salenum" placeholder="璇疯緭鍏ュ垵濮嬮攢閲�" v-trim/>
+      </el-form-item>
+      <el-form-item  label="鍟嗗搧閲嶉噺" prop="weight">
+        <el-input type="number" v-model="form.weight" placeholder="璇疯緭鍏ュ晢鍝侀噸閲�" v-trim>
+        <template slot="append">kg</template>
         </el-input>
       </el-form-item>
-      <el-form-item v-if="form.type!=2" label="鍒濆閿�閲�" prop="salenum">
-        <el-input v-model="form.salenum" placeholder="璇疯緭鍏ュ垵濮嬮攢閲�" v-trim/>
+      <el-form-item label="鏄惁涓婃灦" prop="status">
+        <el-radio-group v-model="form.status">
+          <el-radio :value="1" :label="1" >涓婃灦</el-radio>
+          <el-radio :value="0" :label="0" >涓嬫灦</el-radio>
+        </el-radio-group>
       </el-form-item>
+      <el-form-item label="浣跨敤鍟嗗搧鍝佺墝" prop="brandIdList">
+        <el-select v-model="form.brandIdList"   placeholder="璇烽�夋嫨鍟嗗搧鍝佺墝" clearable multiple @change="changeBrand">
+          <el-option
+              v-for="item in applyBrands"
+              :key="item.id"
+              :value="item.id"
+              :label="item.name"
+          ></el-option>
+        </el-select>
+      </el-form-item>
+      <div v-if="form.brandIdList && form.brandIdList.length" style="border:1px solid #f2f2f2; margin-left: 150px;width: 700px;padding: 20px 0 0px 0;margin-bottom: 20px;"  class="el-form-item__content">
+<!--
+        <span style="line-height: 32px;font-size: 14px;"><b style="color: #F56C6C;margin-right: 4px;font-size: 11px;">*</b>{{'銆�'+(item.name)+'銆戠郴鍒楋細'}}</span>
+-->
+        <el-form-item  v-for="(item,index) in applyBrands" v-if="item.show" :key="'warning_'+index" style="display: block;width: 100%;"  :label="'銆�'+(item.name)+'銆戠郴鍒�'"  >
+          <el-select v-model="item.childIdList" filterable  multiple   style=" width: 500px;"  clearable  placeholder="璇烽�夋嫨鍝佺墝绯诲垪" >
+            <el-option v-for="item in item.childList"   :label="item.name" :value="item.id" :key="'brand_'+index+item.id">  </el-option>
+          </el-select>
+        </el-form-item>
+<!--
+        <el-button type="danger" style="margin-left: 10px;height: 32px; " @click="delDo(index)" v-if="index>0 || form.detailList.length>1">鍒犻櫎</el-button>
+-->
+      </div>
       <el-form-item label="鍟嗗搧璇︽儏" prop="content">
-        <RichEditor :content="{ content : form.content}"  @edit="form.content=$event" />
+        <RichEditor  :richData="form.content" :styleEditor="'border: 1px solid #ccc;display: inline-block;height:500px;'" @getWangedditor="getWangedditor" :readonly="false"/>
       </el-form-item>
     </el-form>
   </GlobalWindow>
@@ -84,6 +128,7 @@
 import UploadImage from '@/components/common/UploadImage'
 import UploadAvatarImage from '@/components/common/UploadAvatarImage'
 import RichEditor from '@/components/common/RichEditor'
+import { findAll as labelList } from '@/api/business/labels'
 export default {
   name: 'OperaGoodsWindow',
   extends: BaseOpera,
@@ -103,24 +148,30 @@
         imgurlfull: '',
         salenum: '',
         type: 0,
-        creator: '',
-        createDate: '',
-        editor: '',
-        editDate: '',
-        isdeleted: '',
-        remark: '',
         info: '',
         content: '',
         sortnum: '',
-        looknum: '',
-        type: '',
-        status: '',
-        isrec: '',
-        styleImg: '',
-        labels: ''
+        skuPrice: null,
+        status: 1,
+        showPrice: null,
+        deductRata: null,
+        weight: null,
+        unitName: '',
+        stockNum: null,
+        brandIdList: [],
+        brandList: []
       },
+      applyBrands: [],
       // 楠岃瘉瑙勫垯
       rules: {
+        name: [{ required: true, message: '璇疯緭鍏ュ晢鍝佸悕绉�', tigger: 'blur' }],
+        categoryId: [{ required: true, message: '璇烽�夋嫨鎵�灞炲垎绫�' }],
+        brandIdList: [{ required: true, message: '璇峰綍鍏ラ�傜敤鍝佺墝鍜岀郴鍒椾俊鎭�' }],
+        weight: [{ required: true, message: '璇疯緭鍏ュ晢鍝侀噸閲�' }],
+        price: [{ required: true, message: '璇疯緭鍏ュ晢鍝佸嚭鍘備环' }],
+        skuPrice: [{ required: true, message: '璇疯緭鍏ュ晢鍝侀浂鍞环' }],
+        deductRata: [{ required: true, message: '璇疯緭鍏ョН鍒嗘姷鎵f瘮渚�' }],
+        status: [{ required: true, message: '璇烽�夋嫨鏄惁涓婃灦' }]
       }
     }
   },
@@ -130,11 +181,48 @@
       api: '/business/goods',
       'field.id': 'id'
     })
+    this.loadBrandList()
   },
   methods: {
+    isSeletedBrand (val) {
+      var r = false
+      if (!this.form.brandIdList || !this.form.brandIdList.length) {
+        return false
+      }
+      this.form.brandIdList.forEach(item => {
+        if (item === val.id) {
+          r = true
+        }
+      })
+      return r
+    },
+    changeBrand () {
+      this.applyBrands.forEach(item => {
+        item.show = this.isSeletedBrand(item)
+      })
+      console.log(this.form.brandIdList, this.applyBrands)
+    },
+    loadBrandList () {
+      labelList({
+        type: 14 // 閫傚簲鍟嗗搧鍝佺墝
+      })
+        .then(res => {
+          this.applyBrands = res
+          this.applyBrands.forEach(item => {
+            item.show = this.isSeletedBrand(item)
+          })
+        })
+    },
+    getWangedditor (val) {
+      this.form.content = val
+    },
     open (title, target, type) {
       this.title = title
       this.visible = true
+      this.form.brandIdList = []
+      this.form.fileList = []
+      this.form.imgurl=''
+      this.form.imgurlfull=''
       // debugger
       // 鏂板缓
       if (target == null) {
@@ -143,21 +231,64 @@
           this.form[this.configData['field.id']] = null
           this.form.type = type
         })
+        this.loadBrandList()
         return
       }
       // 缂栬緫
-      this.$nextTick(() => {
+      this.$nextTick(async () => {
         for (const key in this.form) {
           this.form[key] = target[key]
         }
         this.form.type = type
+        await this.loadInfo(this.form.id)
+        if (this.form.imgurl) {
+          this.form.imgurlfull = target.resourcePath + target.imgurl
+        }
       })
     },
-    uploadAvatarSuccess(file) {
+    loadInfo () {
+      this.form.brandIdList =[]
+      this.form.fileList =[]
+      this.api.detail(this.form.id).then(res => {
+        if (res && res.brandList) {
+          this.form.brandList = res.brandList
+          res.brandList.forEach(item => {
+            this.form.brandIdList.push(item.id)
+          })
+        }
+        if (res.fileList && res.fileList.length) {
+          res.fileList.forEach(item => {
+            this.form.fileList.push(
+              {
+                fileurl: item.fileurl,
+                name: item.fileName,
+                url: res.resourcePath + item.fileurl
+              }
+            )
+          })
+          console.log(this.form.fileList)
+        }
+        this.loadBrandList()
+      })
+    },
+    uploadAvatarSuccess (file) {
       this.form.imgurlfull = file.imgurlfull
       this.form.imgurl = file.imgurl
+    },
+    confirm () {
+      this.form.brandList = []
+      this.applyBrands.forEach(item => {
+        if (item.show) {
+          this.form.brandList.push(item)
+        }
+      })
+      if (this.form.id == null || this.form.id === '') {
+        this.__confirmCreate()
+        return
+      }
+      this.__confirmEdit()
     }
-  },
+  }
 }
 </script>
 
@@ -172,4 +303,7 @@
     width: 100%;
   }
 }
+::v-deep  .el-form-item__label{
+  width: 150px !important;
+}
 </style>

--
Gitblit v1.9.3