From 89c12efa2ef8464680c81b11a5d98ac39fc99338 Mon Sep 17 00:00:00 2001 From: peng <peng.com> Date: 星期一, 15 九月 2025 11:59:43 +0800 Subject: [PATCH] Merge remote-tracking branch 'origin/send_coupon' into send_coupon --- seller/src/views/goods/goods-seller/goodsOperationSec.vue | 335 +++++++++++++++++++++++++++++++++++++++++++++++++------ 1 files changed, 296 insertions(+), 39 deletions(-) diff --git a/seller/src/views/goods/goods-seller/goodsOperationSec.vue b/seller/src/views/goods/goods-seller/goodsOperationSec.vue index 2f3df7c..8ed6ef2 100644 --- a/seller/src/views/goods/goods-seller/goodsOperationSec.vue +++ b/seller/src/views/goods/goods-seller/goodsOperationSec.vue @@ -74,6 +74,17 @@ @on-change="choosePreTime"></DatePicker> </div> </FormItem> + <FormItem v-if="baseInfoForm.goodsType == 'VIRTUAL_GOODS'" class="form-item-view-el" label="鍟嗗搧绫诲瀷"> + <Select + v-model="baseInfoForm.virtualGoodsType" + clearable + style="width: 160px" + @on-clear="handleGoodsType" + @on-change="handleGoodsType" + > + <Option value="COUPON">浼樻儬鍗�</option> + </select> + </FormItem> <FormItem v-if="baseInfoForm.salesModel == 'WHOLESALE'" class="form-item-view-el" label="閿�鍞鍒�" prop="wholesaleRule"> <div class="form-item-view-wholesale"> @@ -118,6 +129,7 @@ </FormItem> </div> <h4>鍟嗗搧瑙勬牸鍙婂浘鐗�</h4> + <div class="form-item-view"> <FormItem class="form-item-view-el required" label="涓诲浘" prop="goodsGalleryFiles" > <div style="display: flex; flex-wrap: wrap;"> @@ -156,6 +168,9 @@ <img v-if="goodsPictureVisible" :src="previewGoodsPicture" style="width: 100%"/> </Modal> </FormItem> + + + <FormItem> <!-- <div class="demo-upload-list" v-for="(item,index) in showListImages">--> @@ -270,12 +285,13 @@ </template> </div> </vuedraggable> -<!-- todo 3--> - <Upload ref="uploadSku" action="-" + <!-- todo 3--> + <Upload ref="uploadSku" :action="uploadFileUrl" v-if="val.images < 1" :before-upload="handleBeforeUpload" :format="['jpg', 'jpeg', 'png', 'webp']" :max-size="2048" + :headers="{ ...accessToken }" :on-error="() => { $Spin.hide(); }" :on-exceeded-size="handleMaxSize" :on-format-error="handleFormatError" @@ -327,9 +343,9 @@ overflow-x: hidden; } "> - <template slot="sn" slot-scope="{ row }"> - <Input v-model="row.sn" clearable placeholder="璇疯緭鍏ヨ揣鍙�" - @on-change="updateSkuTable(row, 'sn')"/> + <template slot="sn" slot-scope="{ row, index }"> + <Input v-model="row.sn" placeholder="璇疯緭鍏ヨ揣鍙�" disabled + @on-change="updateSkuTable(row, 'sn')" /> </template> <div v-if="baseInfoForm.goodsType !== 'VIRTUAL_GOODS'" slot="weight" slot-scope="{ row }"> <Input v-model="row.weight" clearable placeholder="璇疯緭鍏ラ噸閲�" @@ -344,6 +360,14 @@ baseInfoForm.goodsUnit || "" }}</span> </Input> + </template> + <template slot="COUPON" slot-scope="{ row }"> + <div @click="showCouponListModal(row)"> + <Input v-model="row.couponName" clearable placeholder="閫夋嫨浼樻儬鍗�" + > + </Input> + </div> + </template> <template slot="cost" slot-scope="{ row }"> <Input v-model="row.cost" clearable placeholder="璇疯緭鍏ユ垚鏈环" @@ -401,7 +425,7 @@ </div> <FormItem class="form-item-view-el" label="PC鍟嗗搧鎻忚堪" prop="intro" style="width: 100%"> <editor - :show-upload="false" + :show-upload="true" ref="editor" v-model="baseInfoForm.intro" height="800px" @@ -415,7 +439,7 @@ <FormItem class="form-item-view-el" label="绉诲姩绔弿杩�" prop="skuList" style="width: 100%"> <editor - :show-upload="false" + :show-upload="true" ref="introEditor" v-model="baseInfoForm.mobileIntro" height="800px" @@ -504,7 +528,43 @@ <Button type="primary" @click="saveToDraft">淇濆瓨涓烘ā鐗�</Button> </ButtonGroup> </div> - + <Modal v-model="showCouponModal" title="浼樻儬鍗峰垪琛�" width="1200px"> + <div style="display: flex; align-items: center; margin-bottom: 20px;"> + <!-- 妯℃嫙琛ㄥ崟label鏍峰紡 --> + <label style="width: 100px; text-align: right; padding-right: 12px; font-size:14px;"> + 宸查�夋嫨浼樻儬鍗�: + </label> + <Input + :disabled="true" + style="width: 30%;" + v-model="showCoupon" + placeholder="璇风偣鍑婚�夋嫨琛ㄦ牸鍐呬紭鎯犲姷" + ></Input> + </div> + <Table + :loading="couponLoading" + border + :columns="couponColumns" + :data="couponData" + ref="table" + @on-current-change="handleRowClick" + highlight-row + ></Table> + <Row type="flex" justify="center" class="mt_10"> + <Page + :current="couponSearchForm.pageNumber" + :total="couponTotal" + :page-size="couponSearchForm.pageSize" + @on-change="couponChangePage" + @on-page-size-change="couponChangePageSize" + :page-size-opts="[10, 20, 50]" + size="small" + show-total + show-elevator + show-sizer + ></Page> + </Row> + </Modal> <Modal v-model="showGoodsVideo" title="鏌ョ湅瑙嗛"> <div id="dplayer"> @@ -560,7 +620,8 @@ import {getFileKey} from "@/utils/file.js"; import {getFilePreview, getSts} from "@/api/file"; import {formatDate} from "@/utils/filters"; - +import {getShopCouponList} from '@/api/promotion' +import {promotionsScopeTypeRender} from "../../../utils/promotions"; export default { name: "goodsOperationSec", @@ -592,6 +653,105 @@ }, 1000); }; return { + currentRow:null, + showCouponModal:false, + showCoupon:'', + + couponSearchForm: { + // 鎼滅储妗嗗垵濮嬪寲瀵硅薄 + pageNumber: 1, // 褰撳墠椤垫暟 + pageSize: 10, // 椤甸潰澶у皬 + sort: "startTime", // 榛樿鎺掑簭瀛楁 + order: "desc", // 榛樿鎺掑簭鏂瑰紡 + promotionStatus:"START", + }, + selectedRowId:'', + couponTotal:0, + couponData:[], + couponLoading:false, + couponColumns: [ + // 琛ㄥご + { + title: "浼樻儬鍒稿悕绉�", + key: "couponName", + width: 180, + tooltip: true, + }, + { + title: "闈㈤/鎶樻墸", + key: "price", + width: 150, + render: (h, params) => { + if (params.row.price) { + return h("priceColorScheme", {props:{value:params.row.price,color:this.$mainColor}} ); + + } else { + return h("div", params.row.couponDiscount + "鎶�"); + } + }, + }, + + { + title: "鑾峰彇鏂瑰紡", + width: 120, + key: "getType", + render: (h, params) => { + if (params.row.getType === "FREE") { + return h("Tag", { props: { color: "red" } }, "鍏嶈垂鑾峰彇"); + } else if (params.row.getType === "ACTIVITY") { + return h("Tag", { props: { color: "volcano" } }, "娲诲姩鑾峰彇"); + } else if (params.row.getType === "INSIDE") { + return h("Tag", { props: { color: "lime" } }, "鍐呰喘"); + } else if (params.row.getType === "IGAME") { + return h("Tag", { props: { color: "lime" } }, "娓告垙浜虹敓"); + } else { + return h("Tag", { props: { color: "purple" } }, "鏈煡"); + } + }, + }, + { + title: "浼樻儬鍒哥被鍨�", + key: "couponType", + width: 150, + render: (h, params) => { + let text = ""; + if (params.row.couponType === "DISCOUNT") { + return h("Tag", { props: { color: "blue" } }, "鎵撴姌"); + } else if (params.row.couponType === "PRICE") { + return h("Tag", { props: { color: "geekblue" } }, "鍑忓厤鐜伴噾"); + } else { + return h("Tag", { props: { color: "purple" } }, "鏈煡"); + } + }, + }, + { + title: "鍝佺被鎻忚堪", + key: "scopeType", + width: 120, + render: (h, params) => { + return promotionsScopeTypeRender(h, params); + }, + }, + { + title: "娲诲姩鏃堕棿", + render: (h, params) => { + if ( + params?.row?.getType === "ACTIVITY" && + params?.row?.rangeDayType === "DYNAMICTIME" + ) { + return h("div", "闀挎湡鏈夋晥"); + } else if (params?.row?.startTime && params?.row?.endTime) { + return h("div", { + domProps: { + innerHTML: + params.row.startTime + "<br/>" + params.row.endTime, + }, + }); + } + }, + } + ], + showListImages: [], regular, openImage: false, @@ -664,6 +824,7 @@ ], /** 鍙戝竷鍟嗗搧鍩烘湰鍙傛暟 */ baseInfoForm: { + virtualGoodsType:"", salesModel: "RETAIL", /** 鍟嗗搧鐩稿唽鍒楄〃 */ goodsGalleryFiles: [], @@ -700,7 +861,8 @@ preSaleTime:[], preSaleBeginDate:'', preSaleEndDate:'', - commission:5 + commission:5, + }, /** 琛ㄦ牸澶� */ skuTableColumn: [], @@ -758,6 +920,8 @@ "price", "weight", "quantity", + "couponName", + "couponId", // "alertQuantity", "specId", "specValueId", @@ -766,6 +930,7 @@ selectedFormBtnName: "", // 鐐瑰嚮鍥剧墖缁戝畾form selectedImage: [], lastEditSkuValue: '', + }; }, watch: { @@ -782,6 +947,50 @@ } }, methods: { + showCouponListModal(row){ + this.showCouponModal = true; + this.showCoupon =''; + this.getCouponDataList() + this.currentRow = row; + }, + handleGoodsType(){ + //閲嶆柊娓叉煋 + this.renderTableData(this.skuTableData); + }, + getCouponDataList() { + // 鑾峰彇鏁版嵁 + this.couponLoading = true; + getShopCouponList(this.couponSearchForm).then((res) => { + this.couponLoading = false; + if (res.success) { + this.couponData = res.result.records; + this.couponTotal = res.result.total; + } + }); + this.couponLoading = false; + }, + // 澶勭悊琛岀偣鍑讳簨浠� + handleRowClick(currentRow ,oldCurrentRow){ + this.showCoupon = currentRow.couponName; + this.$set(this.currentRow, 'couponName', currentRow.couponName); + this.currentRow.couponId = currentRow.id + console.log(this.currentRow) + this.updateSkuTable(this.currentRow,"couponName") + this.updateSkuTable(this.currentRow,"couponId") + console.log(this.skuTableData) + }, + couponChangePage(v) { + // 鏀瑰彉椤电爜 + this.couponSearchForm.pageNumber = v; + this.getCouponDataList(); + }, + couponChangePageSize(v) { + // 鏀瑰彉椤垫暟 + this.couponSearchForm.pageNumber = 1; + this.couponSearchForm.pageSize = v; + this.getCouponDataList(); + }, + // 鏍煎紡鍖栨樉绀哄�� formatter(date) { return this.formatDate(date, 'yyyy-MM-dd'); @@ -1116,6 +1325,16 @@ } }, // sku鍥剧墖涓婁紶鍓嶉挬瀛� + // async handleBeforeUpload(file) { + // const check = + // this.selectedSku.images !== undefined && + // this.selectedSku.images.length > 5; + // if (check) { + // this.$Notice.warning({title: "鍥剧墖鏁伴噺涓嶈兘澶т簬浜斿紶"}); + // return false; + // } + // }, + // sku鍥剧墖涓婁紶鍓嶉挬瀛� async handleBeforeUpload(file) { const check = this.selectedSku.images !== undefined && @@ -1327,6 +1546,8 @@ // cost: e.cost, quantity: e.quantity, // alertQuantity: e.alertQuantity, + couponName:e.couponName, + couponId:e.couponId, weight: e.weight, }; if (e.goodsGalleryList && e.goodsGalleryList.length >= 1) { @@ -1459,8 +1680,8 @@ this.$Message.error("宸插瓨鍦ㄧ浉鍚岃鏍奸」锛�"); return; } - if (this.zz(0, val) > 20) { - this.$Message.error("瑙勬牸鍊兼渶澶氬崄涓瓧绗﹂暱搴︼紒"); + if (this.zz(0, val) > 30) { + this.$Message.error("瑙勬牸鍊兼渶澶氬崄浜斾釜瀛楃闀垮害锛�"); // val = val.toString().slice(0, 4); this.skuInfo[index].name = this.countCharacters(val, 10); this.$forceUpdate();// 璋冪敤璇ユ柟娉曚細瑙﹀彂缁勪欢鐨勯噸鏂版覆鏌� @@ -1515,8 +1736,8 @@ if (val.value === '') { return; } - if (this.zz(0, val.value) > 20) { - this.$Message.error("瑙勬牸鍊兼渶澶氬崄涓瓧绗﹂暱搴︼紒"); + if (this.zz(0, val.value) > 30) { + this.$Message.error("瑙勬牸鍊兼渶澶氬崄浜斾釜瀛楃闀垮害锛�"); // val.value = val.value.toString().slice(0, 4); this.skuInfo[$index].spec_values[index].value = this.countCharacters(val.value, 10); this.$forceUpdate();// 璋冪敤璇ユ柟娉曚細瑙﹀彂缁勪欢鐨勯噸鏂版覆鏌� @@ -1678,6 +1899,8 @@ // find.cost && (find.cost = ""); find.quantity && (find.quantity = ""); // find.alertQuantity && (find.alertQuantity = ""); + find.couponName && (find.couponName = ""); + find.couponId && (find.couponId = ""); find.weight && (find.weight = ""); this.skuTableData.splice(this.skuTableData.length, 0, find); @@ -1692,6 +1915,8 @@ find.sn && (find.sn = ""); // find.cost && (find.cost = ""); find.quantity && (find.quantity = ""); + find.couponName && (find.couponName = ""); + find.couponId && (find.couponId = ""); // find.alertQuantity && (find.alertQuantity = ""); find.weight && (find.weight = ""); @@ -1703,6 +1928,7 @@ this.baseInfoForm.regeneratorSkuFlag = true; this.newSkuValues[$index] = ""; } + this.renderTableData(this.skuTableData); }, handleClearSku() { this.skuInfo = []; @@ -1730,7 +1956,7 @@ * 娓叉煋table鎵�闇�瑕佺殑column 鍜� data */ renderTableData(skus) { - console.log('-------------->閿�鍞被鍨�',skus) + console.log('-------------->閿�鍞被鍨�', skus) this.skuTableColumn = []; let pushData = []; // 娓叉煋澶撮儴 @@ -1756,14 +1982,14 @@ ); } // 棰勫敭妯″紡 - if (this.baseInfoForm.salesModel !== "PRESALE") { - pushData.push( - { - title: "棰勫敭鏃堕棿", - slot: "price", - } - ); - } + // if (this.baseInfoForm.salesModel !== "PRESALE") { + // pushData.push( + // { + // title: "棰勫敭鏃堕棿", + // slot: "price", + // } + // ); + // } if (this.baseInfoForm.salesModel === "WHOLESALE" && this.wholesaleData) { this.wholesaleData.forEach((item, index) => { pushData.push({ @@ -1782,6 +2008,14 @@ title: "閲嶉噺", slot: "weight", }); + } + if (this.baseInfoForm.goodsType ==="VIRTUAL_GOODS" && this.baseInfoForm.virtualGoodsType==="COUPON"){ + pushData.push( + { + title:"浼樻儬鍗�", + slot:"COUPON" + } + ) } pushData.push( { @@ -1819,6 +2053,7 @@ * array spec鏁版嵁 */ specIterator(result, spec, skus) { + let table = result; if (spec.length > 0) { //娓呴櫎褰撳墠寰幆鐨勫垎缁� @@ -1834,6 +2069,7 @@ id: skus[index].id, sn: skus[index].sn, quantity: skus[index].quantity, + coupon: skus[index].coupon, cost: skus[index].cost, price: skus[index].price, // [spec[0].name]: skus[index][spec[0].name] ? skus[index][spec[0].name] : specItem.value, @@ -1860,6 +2096,11 @@ } else { this.skuIndex++; } + + table.forEach((item,index) =>{ + console.log("鍏冪礌:" + item +"index:" + (index +1)) + item.sn = index + 1; + }) return table; }, /** 鏍规嵁鍒嗙被id鑾峰彇绯荤粺璁剧疆瑙勬牸淇℃伅*/ @@ -1917,6 +2158,7 @@ return; } } + // else if (item === "alertQuantity") { // if ( // !/^[0-9]\d*$/.test(row[item]) || @@ -1991,20 +2233,20 @@ } this.baseInfoForm.goodsId = this.goodsId; let submit = JSON.parse(JSON.stringify(this.baseInfoForm)); - console.log('----------------->鎻愪氦',submit); + if ( submit.goodsGalleryFiles && - submit.goodsGalleryFiles.length <= 0 + submit.goodsGalleryFiles.length <= 0 ) { this.submitLoading = false; this.$Message.error("璇蜂笂浼犲晢鍝佸浘鐗�"); return; } - if (!submit.goodsVideo){ - this.submitLoading = false; - this.$Message.error("璇蜂笂浼犲晢鍝佽棰�"); - return; - } + // if (!submit.goodsVideo){ + // this.submitLoading = false; + // this.$Message.error("璇蜂笂浼犲晢鍝佽棰�"); + // return; + // } if (submit.templateId === "") submit.templateId = 0; let flag = false; let paramValue = ""; @@ -2029,10 +2271,25 @@ cost: 1, price: sku.price, quantity: sku.quantity, + couponName:sku.couponName, + couponId:sku.couponId, // alertQuantity: sku.alertQuantity, sn: sku.sn, images: [], }; + if(this.baseInfoForm.goodsType === "VIRTUAL_GOODS" && + this.baseInfoForm.virtualGoodsType !== '' && + this.baseInfoForm.virtualGoodsType !== undefined && + this.baseInfoForm.virtualGoodsType !== null){ + if (sku.couponId === null || sku.couponId === undefined){ + this.$Message.error("璇烽�夋嫨浼樻儬鍔�") + return; + } + if (sku.couponName === null || sku.couponName === undefined){ + this.$Message.error("璇烽�夋嫨浼樻儬鍔�") + return; + } + } if (this.openImage) { this.skuInfo[0].spec_values.forEach(item => { if (!item.images || item.images.length === 0) { @@ -2059,6 +2316,7 @@ } submit.skuList.push(skuCopy); }); + console.log('----------------->鎻愪氦', submit); if (containEmptyImage) { this.$Message.error("寮�鍚鏍煎浘鐗囷紝鎵�鏈夎鏍煎浘鐗囦笉鑳戒负绌猴紒"); this.submitLoading = false; @@ -2086,6 +2344,7 @@ } }); } else { + console.log(submit) API_GOODS.createGoods(submit).then((res) => { if (res.success) { this.submitLoading = false; @@ -2169,18 +2428,18 @@ this.$Message.error("鍒锋柊澶辫触锛岃閲嶈瘯"); } }).catch(reason => { - console.log("鑾峰彇妯℃澘澶辫触",reason) + console.log("鑾峰彇妯℃澘澶辫触", reason) }); }, - removeVideo(){ + removeVideo() { this.baseInfoForm.showGoodsVideo = null; this.baseInfoForm.goodsVideo = null; }, // todo 鏂囦欢涓婁紶 async upLoadImg(file) { - console.log(file,this.count++); - if (this.listImages.length >= 5) { - this.$Message.error("鍥剧墖涓婁紶涓嶈兘瓒呰繃5涓�"); + console.log(file, this.count++); + if (this.listImages.length >= 10) { + this.$Message.error("鍥剧墖涓婁紶涓嶈兘瓒呰繃10涓�"); return; } try { @@ -2297,12 +2556,10 @@ this.baseInfoForm.goodsType = this.firstData.goodsType; - - - if (this.categoryId!=null && this.categoryId!=='') { + if (this.categoryId != null && this.categoryId !== '') { /** 鑾峰彇璇ュ晢鍩庡垎绫讳笅 鍟嗗搧鍙傛暟淇℃伅 */ this.GET_GoodsParams(); - console.log('鍒嗙被id------------------>',this.categoryId); + console.log('鍒嗙被id------------------>', this.categoryId); /** 鏌ヨ鍒嗙被缁戝畾鐨勮鏍间俊鎭� */ this.Get_SkuInfoByCategory(this.categoryId); /** 鏌ヨ鍝佺墝鍒楄〃 */ -- Gitblit v1.8.0