From c1e567ddda7f65651179a8a73ca849b07b066b14 Mon Sep 17 00:00:00 2001 From: zxl <763096477@qq.com> Date: 星期四, 19 六月 2025 19:58:42 +0800 Subject: [PATCH] Merge remote-tracking branch 'origin/dev' into dev --- seller/src/views/goods/goods-seller/goodsOperationSec.vue | 618 +++++++++++++++++++++++++++++++++++++++++--------------- 1 files changed, 453 insertions(+), 165 deletions(-) diff --git a/seller/src/views/goods/goods-seller/goodsOperationSec.vue b/seller/src/views/goods/goods-seller/goodsOperationSec.vue index 0965954..a2e8262 100644 --- a/seller/src/views/goods/goods-seller/goodsOperationSec.vue +++ b/seller/src/views/goods/goods-seller/goodsOperationSec.vue @@ -26,13 +26,13 @@ <FormItem label="鍟嗗搧鍗栫偣" prop="sellingPoint"> <Input v-model="baseInfoForm.sellingPoint" :rows="4" style="width: 260px" type="textarea"/> </FormItem> - <FormItem label="鍟嗗搧鍝佺墝" prop="brandId"> - <Select v-model="baseInfoForm.brandId" filterable style="width: 200px"> - <Option v-for="item in brandList" :key="item.id" :label="item.name" :value="item.id"></Option> - </Select> - <Button class="refresh-icon" icon="md-refresh" shape="circle" type="text" - @click="refresh('brand')"></Button> - </FormItem> +<!-- <FormItem label="鍟嗗搧鍝佺墝" prop="brandId">--> +<!-- <Select v-model="baseInfoForm.brandId" filterable style="width: 200px">--> +<!-- <Option v-for="item in brandList" :key="item.id" :label="item.name" :value="item.id"></Option>--> +<!-- </Select>--> +<!-- <Button class="refresh-icon" icon="md-refresh" shape="circle" type="text"--> +<!-- @click="refresh('brand')"></Button>--> +<!-- </FormItem>--> </div> <h4>鍟嗗搧浜ゆ槗淇℃伅</h4> <div class="form-item-view"> @@ -101,10 +101,10 @@ </div> <h4>鍟嗗搧瑙勬牸鍙婂浘鐗�</h4> <div class="form-item-view"> - <FormItem class="form-item-view-el required" label="涓诲浘" prop="goodsGalleryFiles"> + <FormItem class="form-item-view-el required" label="涓诲浘" prop="goodsGalleryFiles" v-if=" baseInfoForm.goodsVideo ==null || baseInfoForm.goodsVideo ===''"> <div style="display: flex; flex-wrap: wrap;"> - <vuedraggable :animation="200" :list="baseInfoForm.goodsGalleryFiles"> - <div v-for="(item, __index) in baseInfoForm.goodsGalleryFiles" :key="__index" + <vuedraggable :animation="200" :list="showListImages"> + <div v-for="(item, __index) in showListImages" :key="__index" class="demo-upload-list"> <template> <img :src="item"/> @@ -118,17 +118,17 @@ </div> </vuedraggable> <!--<Upload ref="upload"--> - <!--:action="uploadFileUrl" :before-upload="handleBeforeUploadGoodsPicture"--> - <!--:format="['jpg', 'jpeg', 'png', 'webp']"--> - <!--:headers="{ ...accessToken }"--> - <!--:max-size="2048" :on-error="() => { $Spin.hide(); }" :on-exceeded-size="handleMaxSize"--> - <!--:on-format-error="handleFormatError" :on-progress="() => { $Spin.show(); }"--> - <!--:on-success="handleSuccessGoodsPicture" :show-upload-list="false" multiple--> - <!--style="margin-left: 10px"--> - <!--type="drag">--> - <!--<div style="width: 148px; height: 148px; line-height: 148px">--> - <!--<Icon size="20" type="md-add"></Icon>--> - <!--</div>--> + <!--:action="uploadFileUrl" :before-upload="handleBeforeUploadGoodsPicture"--> + <!--:format="['jpg', 'jpeg', 'png', 'webp']"--> + <!--:headers="{ ...accessToken }"--> + <!--:max-size="2048" :on-error="() => { $Spin.hide(); }" :on-exceeded-size="handleMaxSize"--> + <!--:on-format-error="handleFormatError" :on-progress="() => { $Spin.show(); }"--> + <!--:on-success="handleSuccessGoodsPicture" :show-upload-list="false" multiple--> + <!--style="margin-left: 10px"--> + <!--type="drag">--> + <!--<div style="width: 148px; height: 148px; line-height: 148px">--> + <!--<Icon size="20" type="md-add"></Icon>--> + <!--</div>--> <!--</Upload>--> </div> <div style="width: 100%;display: flex;justify-content: start;margin-top: 10px;"> @@ -139,22 +139,33 @@ </Modal> </FormItem> <FormItem> - <div style="color: grey">涓诲浘浠呮敮鎸乸ng锛宩pg锛宩peg鏍煎紡锛屽楂樿嚦灏�600*600px锛屽ぇ灏�2M鍐咃紝鍙嫋鎷借皟鏁翠富鍥鹃『搴�</div> + +<!-- <div class="demo-upload-list" v-for="(item,index) in showListImages">--> +<!-- <template style="display: flex">--> +<!-- <img :src="item">--> +<!-- <div class="demo-upload-list-cover">--> +<!-- <Icon type="ios-eye-outline" @click.native="handleView(item)"></Icon>--> +<!-- <Icon type="ios-trash-outline" @click.native="handleRemove(index)"></Icon>--> +<!-- </div>--> +<!-- </template>--> +<!-- </div>--> + <div style="color: grey" v-if="!baseInfoForm.goodsVideo">涓诲浘浠呮敮鎸乸ng锛宩pg锛宩peg鏍煎紡锛屽楂樿嚦灏�600*600px锛屽ぇ灏�2M鍐�</div> </FormItem> - <FormItem class="form-item-view-el" label="涓诲浘瑙嗛" prop="goodsVideo"> + <FormItem class="form-item-view-el" label="瑙嗛" prop="goodsVideo" v-if="!(baseInfoForm.goodsGalleryFiles !=null &&baseInfoForm.goodsGalleryFiles.length>0)"> <div class="goods-video"> <div v-if="baseInfoForm.goodsVideo"> <div> - <video :src="baseInfoForm.goodsVideo" class="video" controls style="max-width: 300px;"/> + <video :src="baseInfoForm.showGoodsVideo" class="video" controls style="max-width: 300px;"/> </div> </div> - <Upload ref="upload" :action="uploadFileUrl" :format="['avi', 'wmv', 'mpeg', 'mp4', 'mov']" + <Upload ref="upload" action="-" :format="['avi', 'wmv', 'mpeg', 'mp4', 'mov']" :headers="{ ...accessToken }" :max-size="10240" :on-error="() => { loadingVideo = false }" :on-exceeded-size="handleVideoMaxSize" :on-format-error="handleFormatError" :on-progress="() => { loadingVideo = true }" :on-success="handleSuccessGoodsVideo" :show-upload-list="false" - multiple + :before-upload="upLoadVideo" + accept="video/*" style="margin-left: 10px" type="drag"> <Button :loading="loadingVideo" icon="ios-cloud-upload-outline" type="text"> <span v-if="!loadingVideo"> @@ -165,6 +176,9 @@ </span> </Button> </Upload> + <Button :loading="loadingVideo" v-if="baseInfoForm.goodsVideo" icon="delete" @click="removeVideo" type="text"> + <span>鍒犻櫎瑙嗛</span> + </Button> </div> </FormItem> <div class="layout" style="width: 100%"> @@ -176,7 +190,7 @@ <div v-for="(item, $index) in skuInfo" :key="$index" class="sku-item-content"> <Card :bordered="true" class="ivu-card-body"> <a slot="extra" style="margin-left: 6px"> - <Icon size="20" type="md-trash" @click="handleCloseSkuItem($index, item)"></Icon> + <Icon size="20" type="md-trash" @click="handleCloseSkuItem($index, item)"></Icon> </a> <div> <div style="display: flex;margin-bottom: 10px;font-weight: bold">瑙勬牸椤�</div> @@ -185,10 +199,13 @@ <div> <AutoComplete v-model="item.name" :filter-method="filterMethod" :maxlength="30" placeholder="璇疯緭鍏ヨ鏍奸」鍚嶇О" style="width: 150px" - @on-focus="changeSkuItem(item.name)" @on-change="editSkuItem(item.name, $index, item)"> + @on-focus="changeSkuItem(item.name)" + @on-change="editSkuItem(item.name, $index, item)"> </AutoComplete> - <iSwitch v-if="$index === 0" style="margin-left: 10px" size="small" @on-change="changeSkuOpenImage" v-model="openImage" /><span v-if="$index === 0" style="margin-left: 5px">娣诲姞瑙勬牸鍥剧墖</span> +<!-- <iSwitch v-if="$index === 0" style="margin-left: 10px" size="small"--> +<!-- @on-change="changeSkuOpenImage" v-model="openImage"/>--> +<!-- <span v-if="$index === 0" style="margin-left: 5px">娣诲姞瑙勬牸鍥剧墖</span>--> </div> </FormItem> @@ -210,7 +227,8 @@ @on-change="skuValueChange(val, index, item)"> </AutoComplete> <a style="margin-left: 6px" v-if="val.value && val.value !== ''"> - <Icon size="15" type="md-trash" @click="handleCloseSkuValue(val, index, item)"></Icon> + <Icon size="15" type="md-trash" + @click="handleCloseSkuValue(val, index, item)"></Icon> </a> </div> <div v-if="$index === 0 && openImage" style="margin-top: 10px"> @@ -225,19 +243,20 @@ style="width: 180px;height: 140px" /> <div class="sku-upload-list-cover"> - <div style="margin-top: 50px" > + <div style="margin-top: 50px"> <Icon size="25" type="md-search" @click="handleView(img)"></Icon> - <Icon size="25" type="md-trash" @click="handleRemove(val.images, __index)"></Icon> + <Icon size="25" type="md-trash" + @click="handleRemove(val.images, __index)"></Icon> </div> </div> </template> </div> </vuedraggable> - <Upload ref="uploadSku" :action="uploadFileUrl" +<!-- todo 3--> + <Upload ref="uploadSku" action="-" v-if="val.images < 1" :before-upload="handleBeforeUpload" :format="['jpg', 'jpeg', 'png', 'webp']" - :headers="{ ...accessToken }" :max-size="2048" :on-error="() => { $Spin.hide(); }" :on-exceeded-size="handleMaxSize" @@ -255,7 +274,9 @@ </div> </FormItem> - <FormItem v-if="item.spec_values.length < 10 && item.spec_values.length >= 1 && item.spec_values[0].value !== ''" class="sku-item-content-val flex" label="" style="line-height: 32px;"> + <FormItem + v-if="item.spec_values.length < 10 && item.spec_values.length >= 1 && item.spec_values[0].value !== ''" + class="sku-item-content-val flex" label="" style="line-height: 32px;"> <AutoComplete ref="input" v-model="newSkuValues[$index]" :filter-method="filterMethod" :maxlength="30" placeholder="鑷畾涔夎鏍煎��" style="width: 180px" @@ -473,8 +494,32 @@ <!--<Modal width="1200px" v-model="picModelFlag">--> <!--<ossManage @callback="callbackSelected" ref="ossManage" />--> <!--</Modal>--> - <Modal v-model="picModelFlag" width="1200px" @on-ok="confirmUrls"> - <ossManage ref="ossManage" :isComponent="true" :initialize="picModelFlag" @callback="callbackSelected" @selected="(list)=>{ selectedImage = list}"/> + <!-- todo web--> + <Modal v-model="picModelFlag" width="1200px"> + <!-- <ossManage ref="ossManRage" :isComponent="true" :initialize="picModelFlag" @callback="callbackSelected" @selected="(list)=>{ selectedImage = list}"/>--> + <div class="demo-upload-list" v-for="(item,index) in showListImages"> + <template> + <img :src="item"> + <div class="demo-upload-list-cover"> + <Icon type="ios-eye-outline" @click.native="handleView(item)"></Icon> + <Icon type="ios-trash-outline" @click.native="handleRemove(null,index)"></Icon> + </div> + </template> + </div> + <div class="demo-upload-list"> + <Upload + :before-upload="upLoadImg" + accept="image/*" + action="-" + type="drag" + style=" display: inline-block;width: 58px" + > + <div style="width: 58px;height:58px;line-height: 58px;"> + <Icon type="ios-camera" size="20"></Icon> + </div> + </Upload> + </div> + </Modal> </div> @@ -491,6 +536,9 @@ import DPlayer from 'dplayer'; // import ossManage from "@/views/sys/oss-manage/ossManage"; import ossManage from "@/views/shop/ossManages"; +import COS from 'cos-js-sdk-v5'; +import {getFileKey} from "@/utils/file.js"; +import {getFilePreview, getSts} from "@/api/file"; export default { @@ -523,6 +571,7 @@ }, 1000); }; return { + showListImages: [], regular, openImage: false, needToloadSku: false, @@ -625,6 +674,7 @@ /** 鍟嗗搧鍒嗙被涓枃鍚� */ categoryName: [], goodsVideo: "", + showGoodsVideo: "", }, /** 琛ㄦ牸澶� */ skuTableColumn: [], @@ -698,12 +748,19 @@ if (val) { this.initVideo(); } + }, + showListImages(newValue){ + this.baseInfoForm.goodsGalleryFiles = newValue.map(item => { + return item.split('/').slice(-2).join('/') + }) } }, methods: { // 閫夋嫨鍥剧墖modal handleCLickImg(val, index) { - this.$refs.ossManage.selectImage = true; + console.log('娴嬭瘯杈撳叆鐨勫��----------------銆�', val) + // 搴熷純鍘熸湁鐨勫浘鐗囦笂浼� + // this.$refs.ossManage.selectImage = true; this.picModelFlag = true; this.selectedFormBtnName = val; // this.picIndex = index; @@ -865,7 +922,15 @@ }, // 绉婚櫎宸查�夊浘鐗� handleRemove(item, index) { - item.splice(index, 1) + if (!item) { + this.listImages.splice(index, 1); + this.showListImages.splice(index, 1); + this.baseInfoForm.goodsGalleryFiles.splice(index, 1); + this.baseInfoForm.goodsGalleryList.splice(index, 1); + } else { + console.log('绉婚櫎娴嬭瘯',item, index); + item.splice(index, 1) + } this.previewPicture = ""; }, // 鏌ョ湅鍟嗗搧澶у浘 @@ -999,14 +1064,57 @@ } }, // sku鍥剧墖涓婁紶鍓嶉挬瀛� - handleBeforeUpload(file) { + async handleBeforeUpload(file) { const check = this.selectedSku.images !== undefined && this.selectedSku.images.length > 5; if (check) { this.$Notice.warning({title: "鍥剧墖鏁伴噺涓嶈兘澶т簬浜斿紶"}); - return false; } + try { + // this.upLoadVideoLoading = true; + // 鑾峰彇鏂囦欢涓婁紶涓存椂瀵嗛挜 + const sts = await getSts(); + const cos = new COS({ + getAuthorization: async function (options, callback) { + callback({ + TmpSecretId: sts.data.tmpSecretId, + TmpSecretKey: sts.data.tmpSecretKey, + SecurityToken: sts.data.sessionToken, + // 寤鸿杩斿洖鏈嶅姟鍣ㄦ椂闂翠綔涓虹鍚嶇殑寮�濮嬫椂闂达紝閬垮厤瀹㈡埛绔湰鍦版椂闂村亸宸繃澶у鑷寸鍚嶉敊璇� + StartTime: sts.data.stsStartTime, // 鏃堕棿鎴筹紝鍗曚綅绉掞紝濡傦細1580000000 + ExpiredTime: sts.data.stsEndTime,// 鏃堕棿鎴筹紝鍗曚綅绉掞紝濡傦細1580000000 + ScopeLimit: true, // 缁嗙矑搴︽帶鍒舵潈闄愰渶瑕佽涓� true锛屼細闄愬埗瀵嗛挜鍙湪鐩稿悓璇锋眰鏃堕噸澶嶄娇鐢� + }); + } + }) + const fileKey = getFileKey(file.name) + const upData = await cos.uploadFile({ + Bucket: sts.data.bucket, + Region: sts.data.region, + Key: fileKey, + Body: file, // 瑕佷笂浼犵殑鏂囦欢瀵硅薄銆� + SliceSize: 1024 * 1024 * 5, + onProgress: function (progressData) { + console.log('涓婁紶杩涘害锛�', progressData); + }, + }); + console.log("涓婁紶鎴愬姛", upData) + this.$nextTick(() => { + this.listImages.push(fileKey); + this.showListImages.push(sts.data.endpoint + "/" + fileKey); + this.baseInfoForm.goodsGalleryFiles.push(fileKey); + }) + + } catch (e) { + console.log("涓婁紶澶辫触", upData) + return false; + } finally { + // this.upLoadVideoLoading = false; + + } + return false; + }, /** 鏌ヨ鍟嗗搧鍝佺墝鍒楄〃 */ @@ -1086,8 +1194,34 @@ this.baseInfoForm.goodsGalleryFiles = response.result.goodsGalleryList.map((i) => { return i; - }); + }) + try { + const stsInfo = await getSts(); + const endpoint = stsInfo.data.endpoint; + this.showListImages = response.result.goodsGalleryList.map((i) => { + if (i!=null&&i.indexOf('http')===-1) + return endpoint+'/'+i; + else return i; + }) + if (response.result.goodsVideo){ + + } + } catch (e) { + console.log('缁勮璺緞鍑洪棶棰�',e); + } + } + if (response.result.goodsVideo){ + try { + const stsInfo = await getSts(); + const endpoint = stsInfo.data.endpoint; + this.baseInfoForm.goodsVideo = response.result.goodsVideo; + this.baseInfoForm.showGoodsVideo = endpoint + '/' + response.result.goodsVideo; + console.log('鏄剧ず鍟嗗搧瑙嗛------------------->', this.baseInfoForm.showGoodsVideo); + } catch (e) { + console.log('缁勮瑙嗛鍦板潃鍑洪敊浜�') + } + } if ( response.result.wholesaleList && @@ -1105,7 +1239,8 @@ this.renderGoodsDetailSku(response.result.skuList); /** 鏌ヨ鍝佺墝鍒楄〃 */ - this.getGoodsBrandList(); + //todo 绉婚櫎鍝佺墝姒傚康 + // this.getGoodsBrandList(); /** 鏌ヨ搴楅摵鍟嗗搧鍒嗙被 */ this.GET_ShopGoodsLabel(); @@ -1125,7 +1260,7 @@ this.firstData.goodsType && (this.baseInfoForm.goodsType = this.firstData.goodsType); /** 鏌ヨ鍟嗗搧鍙傛暟 */ - this.GET_GoodsParams(); + // this.GET_GoodsParams(); }, // 娓叉煋sku鏁版嵁 renderGoodsDetailSku(skuList) { @@ -1780,124 +1915,129 @@ }, /** 娣诲姞鍟嗗搧 **/ save() { - this.submitLoading = true; - this.$refs["baseInfoForm"].validate((valid) => { - if (valid) { - if (this.baseInfoForm.salesModel === "WHOLESALE") { - for (let i = 0; i < this.wholesaleData.length; i++) { - this.checkWholesaleNum(i); - this.checkWholesalePrice(i); - this.wholesaleData[i].goodsId = this.goodsId; - } - this.baseInfoForm.wholesaleList = this.wholesaleData; - } - this.baseInfoForm.goodsId = this.goodsId; - let submit = JSON.parse(JSON.stringify(this.baseInfoForm)); - if ( - submit.goodsGalleryFiles && - submit.goodsGalleryFiles.length <= 0 - ) { - this.submitLoading = false; - this.$Message.error("璇蜂笂浼犲晢鍝佸浘鐗�"); - return; - } - if (submit.templateId === "") submit.templateId = 0; - let flag = false; - let paramValue = ""; - - if (flag) { - this.$Message.error(paramValue + " 鍙傛暟鍊间笉鑳戒负绌�"); - this.submitLoading = false; - return; - } - - if (this.goodsUnitList && !this.goodsUnitList.find(i => i === this.baseInfoForm.goodsUnit)) { - submit.goodsUnit = "" - this.$Message.error("鍟嗗搧鍗曚綅涓嶅瓨鍦�"); - this.submitLoading = false; - return; - } - let skuInfoNames = this.skuInfo.map((n) => n.name); - submit.skuList = []; - let containEmptyImage = false; - this.skuTableData.map((sku) => { - let skuCopy = { - cost: 1, - price: sku.price, - quantity: sku.quantity, - // alertQuantity: sku.alertQuantity, - sn: sku.sn, - images: [], - }; - if (this.openImage) { - this.skuInfo[0].spec_values.forEach(item => { - if (!item.images || item.images.length === 0) { - containEmptyImage = true; - return; - } - if (item.value === sku[this.skuInfo[0].name]) { - skuCopy.images = item.images - } - }) - - } - if (sku.weight) { - skuCopy.weight = sku.weight; - } - if (this.baseInfoForm.weight) { - skuCopy.weight = this.baseInfoForm.weight; - } - if (sku.id) { - skuCopy.id = sku.id; - } - for (let skuInfoName of skuInfoNames) { - skuCopy[skuInfoName] = sku[skuInfoName]; - } - submit.skuList.push(skuCopy); - }); - if (containEmptyImage) { - this.$Message.error("寮�鍚鏍煎浘鐗囷紝鎵�鏈夎鏍煎浘鐗囦笉鑳戒负绌猴紒"); - this.submitLoading = false; - return; - } - if (submit.goodsGalleryFiles.length > 0) { - submit.goodsGalleryList = submit.goodsGalleryFiles.map( - (i) => i - ); - } - /** 鍙傛暟鏍¢獙 **/ - /* Object.keys(submit.goodsParamsList).forEach((item) => { - });*/ - submit.release ? (submit.release = true) : (submit.release = false); - submit.recommend - ? (submit.recommend = true) - : (submit.recommend = false); - if (this.goodsId) { - API_GOODS.editGoods(this.goodsId, submit).then((res) => { - if (res.success) { - this.submitLoading = false; - this.$router.go(-1); - } else { - this.submitLoading = false; + try { + this.submitLoading = true; + this.$refs["baseInfoForm"].validate((valid) => { + if (valid) { + if (this.baseInfoForm.salesModel === "WHOLESALE") { + for (let i = 0; i < this.wholesaleData.length; i++) { + this.checkWholesaleNum(i); + this.checkWholesalePrice(i); + this.wholesaleData[i].goodsId = this.goodsId; } + this.baseInfoForm.wholesaleList = this.wholesaleData; + } + this.baseInfoForm.goodsId = this.goodsId; + let submit = JSON.parse(JSON.stringify(this.baseInfoForm)); + console.log('----------------->鎻愪氦',submit); + // if ( + // (submit.goodsGalleryFiles && + // submit.goodsGalleryFiles.length <= 0) && !submit.goodsVideo + // ) { + // this.submitLoading = false; + // this.$Message.error("璇蜂笂浼犲晢鍝佸浘鐗囨垨鑰呰棰�"); + // return; + // } + if (submit.templateId === "") submit.templateId = 0; + let flag = false; + let paramValue = ""; + + if (flag) { + this.$Message.error(paramValue + " 鍙傛暟鍊间笉鑳戒负绌�"); + this.submitLoading = false; + return; + } + + if (this.goodsUnitList && !this.goodsUnitList.find(i => i === this.baseInfoForm.goodsUnit)) { + submit.goodsUnit = "" + this.$Message.error("鍟嗗搧鍗曚綅涓嶅瓨鍦�"); + this.submitLoading = false; + return; + } + let skuInfoNames = this.skuInfo.map((n) => n.name); + submit.skuList = []; + let containEmptyImage = false; + this.skuTableData.map((sku) => { + let skuCopy = { + cost: 1, + price: sku.price, + quantity: sku.quantity, + // alertQuantity: sku.alertQuantity, + sn: sku.sn, + images: [], + }; + if (this.openImage) { + this.skuInfo[0].spec_values.forEach(item => { + if (!item.images || item.images.length === 0) { + containEmptyImage = true; + return; + } + if (item.value === sku[this.skuInfo[0].name]) { + skuCopy.images = item.images + } + }) + + } + if (sku.weight) { + skuCopy.weight = sku.weight; + } + if (this.baseInfoForm.weight) { + skuCopy.weight = this.baseInfoForm.weight; + } + if (sku.id) { + skuCopy.id = sku.id; + } + for (let skuInfoName of skuInfoNames) { + skuCopy[skuInfoName] = sku[skuInfoName]; + } + submit.skuList.push(skuCopy); }); + if (containEmptyImage) { + this.$Message.error("寮�鍚鏍煎浘鐗囷紝鎵�鏈夎鏍煎浘鐗囦笉鑳戒负绌猴紒"); + this.submitLoading = false; + return; + } + if (submit.goodsGalleryFiles.length > 0) { + submit.goodsGalleryList = submit.goodsGalleryFiles.map( + (i) => i + ); + } + /** 鍙傛暟鏍¢獙 **/ + /* Object.keys(submit.goodsParamsList).forEach((item) => { + });*/ + submit.release ? (submit.release = true) : (submit.release = false); + submit.recommend + ? (submit.recommend = true) + : (submit.recommend = false); + if (this.goodsId) { + API_GOODS.editGoods(this.goodsId, submit).then((res) => { + if (res.success) { + this.submitLoading = false; + this.$router.go(-1); + } else { + this.submitLoading = false; + } + }); + } else { + API_GOODS.createGoods(submit).then((res) => { + if (res.success) { + this.submitLoading = false; + this.$parent.activestep = 2; + window.scrollTo(0, 0); + } else { + this.submitLoading = false; + } + }); + } } else { - API_GOODS.createGoods(submit).then((res) => { - if (res.success) { - this.submitLoading = false; - this.$parent.activestep = 2; - window.scrollTo(0, 0); - } else { - this.submitLoading = false; - } - }); - } - } else { - this.submitLoading = false; + this.submitLoading = false; - this.$Message.error("杩樻湁蹇呭~椤规湭鍋氬鐞嗭紝璇锋鏌ヨ〃鍗�"); - } - }); + this.$Message.error("杩樻湁蹇呭~椤规湭鍋氬鐞嗭紝璇锋鏌ヨ〃鍗�"); + } + }); + } finally { + this.submitLoading = false; + } }, /** 淇濆瓨涓烘ā鏉� */ saveToDraft() { @@ -1961,8 +2101,110 @@ } else if (type === 'localRefresh') { this.$Message.error("鍒锋柊澶辫触锛岃閲嶈瘯"); } + }).catch(reason => { + console.log("鑾峰彇妯℃澘澶辫触",reason) }); - } + }, + 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涓�"); + return; + } + try { + // this.upLoadVideoLoading = true; + // 鑾峰彇鏂囦欢涓婁紶涓存椂瀵嗛挜 + const sts = await getSts(); + const cos = new COS({ + getAuthorization: async function (options, callback) { + callback({ + TmpSecretId: sts.data.tmpSecretId, + TmpSecretKey: sts.data.tmpSecretKey, + SecurityToken: sts.data.sessionToken, + // 寤鸿杩斿洖鏈嶅姟鍣ㄦ椂闂翠綔涓虹鍚嶇殑寮�濮嬫椂闂达紝閬垮厤瀹㈡埛绔湰鍦版椂闂村亸宸繃澶у鑷寸鍚嶉敊璇� + StartTime: sts.data.stsStartTime, // 鏃堕棿鎴筹紝鍗曚綅绉掞紝濡傦細1580000000 + ExpiredTime: sts.data.stsEndTime,// 鏃堕棿鎴筹紝鍗曚綅绉掞紝濡傦細1580000000 + ScopeLimit: true, // 缁嗙矑搴︽帶鍒舵潈闄愰渶瑕佽涓� true锛屼細闄愬埗瀵嗛挜鍙湪鐩稿悓璇锋眰鏃堕噸澶嶄娇鐢� + }); + } + }) + const fileKey = getFileKey(file.name) + const upData = await cos.uploadFile({ + Bucket: sts.data.bucket, + Region: sts.data.region, + Key: fileKey, + Body: file, // 瑕佷笂浼犵殑鏂囦欢瀵硅薄銆� + SliceSize: 1024 * 1024 * 5, + onProgress: function (progressData) { + console.log('涓婁紶杩涘害锛�', progressData); + }, + }); + console.log("涓婁紶鎴愬姛", upData) + this.$nextTick(() => { + this.listImages.push(fileKey); + this.showListImages.push(sts.data.endpoint + "/" + fileKey); + this.baseInfoForm.goodsGalleryFiles.push(fileKey); + }) + + } catch (e) { + console.log("涓婁紶澶辫触", upData) + return false; + } finally { + // this.upLoadVideoLoading = false; + + } + return false; + }, + async upLoadVideo(file) { + try { + // this.upLoadVideoLoading = true; + // 鑾峰彇鏂囦欢涓婁紶涓存椂瀵嗛挜 + const sts = await getSts(); + const cos = new COS({ + getAuthorization: async function (options, callback) { + callback({ + TmpSecretId: sts.data.tmpSecretId, + TmpSecretKey: sts.data.tmpSecretKey, + SecurityToken: sts.data.sessionToken, + // 寤鸿杩斿洖鏈嶅姟鍣ㄦ椂闂翠綔涓虹鍚嶇殑寮�濮嬫椂闂达紝閬垮厤瀹㈡埛绔湰鍦版椂闂村亸宸繃澶у鑷寸鍚嶉敊璇� + StartTime: sts.data.stsStartTime, // 鏃堕棿鎴筹紝鍗曚綅绉掞紝濡傦細1580000000 + ExpiredTime: sts.data.stsEndTime,// 鏃堕棿鎴筹紝鍗曚綅绉掞紝濡傦細1580000000 + ScopeLimit: true, // 缁嗙矑搴︽帶鍒舵潈闄愰渶瑕佽涓� true锛屼細闄愬埗瀵嗛挜鍙湪鐩稿悓璇锋眰鏃堕噸澶嶄娇鐢� + }); + } + }) + const fileKey = getFileKey(file.name) + const upData = await cos.uploadFile({ + Bucket: sts.data.bucket, + Region: sts.data.region, + Key: fileKey, + Body: file, // 瑕佷笂浼犵殑鏂囦欢瀵硅薄銆� + SliceSize: 1024 * 1024 * 5, + onProgress: function (progressData) { + console.log('涓婁紶杩涘害锛�', progressData); + }, + }); + console.log("涓婁紶鎴愬姛", upData) + this.$nextTick(() => { + this.baseInfoForm.goodsVideo = fileKey; + this.baseInfoForm.showGoodsVideo = sts.data.endpoint + "/" + fileKey; + this.baseInfoForm.goodsVideo = fileKey; + }) + + } catch (e) { + console.log("涓婁紶澶辫触", upData) + return false; + } finally { + // this.upLoadVideoLoading = false; + + } + return false; + }, }, mounted() { this.accessToken = { @@ -1988,12 +2230,17 @@ this.baseInfoForm.goodsType = this.firstData.goodsType; - /** 鑾峰彇璇ュ晢鍩庡垎绫讳笅 鍟嗗搧鍙傛暟淇℃伅 */ - this.GET_GoodsParams(); - /** 鏌ヨ鍝佺墝鍒楄〃 */ - this.getGoodsBrandList(); - /** 鏌ヨ鍒嗙被缁戝畾鐨勮鏍间俊鎭� */ - this.Get_SkuInfoByCategory(this.categoryId); + + + if (this.categoryId!=null && this.categoryId!=='') { + /** 鑾峰彇璇ュ晢鍩庡垎绫讳笅 鍟嗗搧鍙傛暟淇℃伅 */ + this.GET_GoodsParams(); + console.log('鍒嗙被id------------------>',this.categoryId); + /** 鏌ヨ鍒嗙被缁戝畾鐨勮鏍间俊鎭� */ + this.Get_SkuInfoByCategory(this.categoryId); + /** 鏌ヨ鍝佺墝鍒楄〃 */ + this.getGoodsBrandList(); + } // 鑾峰彇鍟嗗搧鍗曚綅 this.GET_GoodsUnit(); // 鑾峰彇褰撳墠搴楅摵鍒嗙被 @@ -2044,4 +2291,45 @@ .refresh-icon { margin-left: 10px; } + +.demo-upload-list { + display: inline-block; + width: 60px; + height: 60px; + text-align: center; + line-height: 60px; + border: 1px solid transparent; + border-radius: 4px; + overflow: hidden; + background: #fff; + position: relative; + box-shadow: 0 1px 1px rgba(0, 0, 0, .2); + margin-right: 4px; +} + +.demo-upload-list img { + width: 100%; + height: 100%; +} + +.demo-upload-list-cover { + display: none; + position: absolute; + top: 0; + bottom: 0; + left: 0; + right: 0; + background: rgba(0, 0, 0, .6); +} + +.demo-upload-list:hover .demo-upload-list-cover { + display: block; +} + +.demo-upload-list-cover i { + color: #fff; + font-size: 20px; + cursor: pointer; + margin: 0 2px; +} </style> -- Gitblit v1.8.0