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