From 7f072a3fed7882989b676c6775dd67a88feddc39 Mon Sep 17 00:00:00 2001
From: peng <peng.com>
Date: 星期一, 01 九月 2025 09:40:10 +0800
Subject: [PATCH] 修改适配页面

---
 seller/src/views/goods/goods-seller/goodsOperationSec.vue |  711 ++++++++++++++++++++++++++++++++++++++++++++--------------
 1 files changed, 537 insertions(+), 174 deletions(-)

diff --git a/seller/src/views/goods/goods-seller/goodsOperationSec.vue b/seller/src/views/goods/goods-seller/goodsOperationSec.vue
index 0965954..ffa87b6 100644
--- a/seller/src/views/goods/goods-seller/goodsOperationSec.vue
+++ b/seller/src/views/goods/goods-seller/goodsOperationSec.vue
@@ -23,16 +23,25 @@
             <FormItem label="鍟嗗搧浠锋牸" prop="price">
               <Input v-model="baseInfoForm.price" clearable placeholder="鍟嗗搧浠锋牸" style="width: 260px" type="text"/>
             </FormItem>
+
+            <FormItem label="鎶芥垚姣斾緥" prop="commission">
+<!--              <Input v-model="baseInfoForm.commission" max="100" min="0" clearable placeholder="鎶芥垚姣斾緥" style="width: 260px" type="number"/>-->
+              <InputNumber v-model="baseInfoForm.commission" :formatter="value => `${value}%`"
+                           :parser="value => value.replace('%', '')" :max="100" :min="0" clearable
+                           :active-change="false"
+                           placeholder="鎶芥垚姣斾緥" style="width: 260px" type="number"/>
+            </FormItem>
+
             <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">
@@ -48,13 +57,22 @@
               <RadioGroup v-if="baseInfoForm.goodsType != 'VIRTUAL_GOODS'" v-model="baseInfoForm.salesModel"
                           button-style="solid" type="button" @on-change="renderTableData(skuTableData)">
                 <Radio label="RETAIL" title="闆跺敭鍨�">闆跺敭鍨�</Radio>
-                <Radio label="WHOLESALE" title="鎵瑰彂鍨�">鎵瑰彂鍨�</Radio>
+<!--                <Radio label="WHOLESALE" title="鎵瑰彂鍨�">鎵瑰彂鍨�</Radio>-->
+                <Radio label="PRESALE" title="棰勫敭">棰勫敭</Radio>
               </RadioGroup>
               <RadioGroup v-else v-model="baseInfoForm.salesModel" button-style="solid" type="button">
                 <Radio label="RETAIL" title="闆跺敭鍨�">
                   <span>铏氭嫙鍨�</span>
                 </Radio>
               </RadioGroup>
+            </FormItem>
+            <FormItem v-if="baseInfoForm.salesModel == 'PRESALE'">
+              <div>
+                棰勫敭鏃堕棿锛�
+                <DatePicker type="daterange" v-model="baseInfoForm.preSaleTime"
+                            format="yyyy-MM-dd" placement="bottom-end" placeholder="璇烽�夋嫨棰勫敭鏃堕棿" style="width: 200px"
+                            @on-change="choosePreTime"></DatePicker>
+              </div>
             </FormItem>
             <FormItem v-if="baseInfoForm.salesModel == 'WHOLESALE'" class="form-item-view-el" label="閿�鍞鍒�"
                       prop="wholesaleRule">
@@ -101,10 +119,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"  >
               <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 +136,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 +157,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" >
               <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;max-height: 400px"/>
                   </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 +194,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 +208,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 +217,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 +245,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 +261,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 +292,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"
@@ -288,9 +327,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="璇疯緭鍏ラ噸閲�"
@@ -362,6 +401,7 @@
             </div>
             <FormItem class="form-item-view-el" label="PC鍟嗗搧鎻忚堪" prop="intro" style="width: 100%">
               <editor
+                :show-upload="true"
                 ref="editor"
                 v-model="baseInfoForm.intro"
                 height="800px"
@@ -375,6 +415,7 @@
 
             <FormItem class="form-item-view-el" label="绉诲姩绔弿杩�" prop="skuList" style="width: 100%">
               <editor
+                :show-upload="true"
                 ref="introEditor"
                 v-model="baseInfoForm.mobileIntro"
                 height="800px"
@@ -473,8 +514,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 +556,10 @@
 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";
+import {formatDate} from "@/utils/filters";
 
 
 export default {
@@ -523,6 +592,7 @@
       }, 1000);
     };
     return {
+      showListImages: [],
       regular,
       openImage: false,
       needToloadSku: false,
@@ -625,6 +695,12 @@
         /** 鍟嗗搧鍒嗙被涓枃鍚� */
         categoryName: [],
         goodsVideo: "",
+        showGoodsVideo: "",
+        // 棰勫敭鏃堕棿
+        preSaleTime:[],
+        preSaleBeginDate:'',
+        preSaleEndDate:'',
+        commission:5
       },
       /** 琛ㄦ牸澶� */
       skuTableColumn: [],
@@ -698,12 +774,45 @@
       if (val) {
         this.initVideo();
       }
+    },
+    showListImages(newValue){
+      this.baseInfoForm.goodsGalleryFiles = newValue.map(item => {
+        return   item.split('/').slice(-2).join('/')
+      })
     }
   },
   methods: {
+    // 鏍煎紡鍖栨樉绀哄��
+    formatter(date) {
+      return this.formatDate(date, 'yyyy-MM-dd');
+    },
+
+    // 鏃ユ湡鏍煎紡鍖栧伐鍏�
+    formatDate(date, format) {
+      const year = date.getFullYear();
+      const month = (date.getMonth() + 1).toString().padStart(2, '0');
+      const day = date.getDate().toString().padStart(2, '0');
+
+      return format
+        .replace('yyyy', year)
+        .replace('MM', month)
+        .replace('dd', day);
+    },
+    choosePreTime(e){
+      if (this.baseInfoForm.preSaleTime){
+        const[begin,end] = this.baseInfoForm.preSaleTime;
+        this.baseInfoForm.preSaleBeginDate = this.formatDate(begin,'yyyy-MM-dd');
+        this.baseInfoForm.preSaleEndDate = this.formatDate(end,'yyyy-MM-dd');
+        console.log('------------------>閫夋嫨鏃堕棿',this.baseInfoForm.preSaleBeginDate,this.baseInfoForm.preSaleEndDate)
+
+      }
+      console.log('鏃堕棿閫夋嫨------------------銆�',e)
+    },
     // 閫夋嫨鍥剧墖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;
@@ -724,10 +833,10 @@
     },
     // ship澶у皬涓嶆纭�
     handleVideoMaxSize(file) {
-      this.$Notice.warning({
-        title: "瓒呰繃鏂囦欢澶у皬闄愬埗",
-        desc: "瑙嗛澶у皬涓嶈兘瓒呰繃10MB",
-      });
+      // this.$Notice.warning({
+      //   title: "瓒呰繃鏂囦欢澶у皬闄愬埗",
+      //   desc: "瑙嗛澶у皬涓嶈兘瓒呰繃10MB",
+      // });
     },
     onAddSku(index) {
       if (!this.newSkuValues[index]) {
@@ -865,7 +974,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 +1116,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;
+
     },
 
     /** 鏌ヨ鍟嗗搧鍝佺墝鍒楄〃 */
@@ -1075,6 +1235,7 @@
       response.result.recommend
         ? (response.result.recommend = 1)
         : (response.result.recommend = 0);
+      response.result.preSaleTime = [response.result.preSaleBeginDate, response.result.preSaleEndDate];
       this.baseInfoForm = {...this.baseInfoForm, ...response.result};
       this.baseInfoForm.release = 1; //鍗充娇鏄鏀惧叆浠撳簱锛屼慨鏀圭殑鏃跺�欎篃浼氭樉绀轰細绔嬪嵆鍙戝竷
       this.categoryId = response.result.categoryPath.split(",")[2];
@@ -1086,8 +1247,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 +1292,8 @@
       this.renderGoodsDetailSku(response.result.skuList);
 
       /** 鏌ヨ鍝佺墝鍒楄〃 */
-      this.getGoodsBrandList();
+      //todo 绉婚櫎鍝佺墝姒傚康
+      // this.getGoodsBrandList();
 
       /** 鏌ヨ搴楅摵鍟嗗搧鍒嗙被 */
       this.GET_ShopGoodsLabel();
@@ -1125,7 +1313,7 @@
       this.firstData.goodsType &&
       (this.baseInfoForm.goodsType = this.firstData.goodsType);
       /** 鏌ヨ鍟嗗搧鍙傛暟 */
-      this.GET_GoodsParams();
+      // this.GET_GoodsParams();
     },
     // 娓叉煋sku鏁版嵁
     renderGoodsDetailSku(skuList) {
@@ -1515,6 +1703,7 @@
         this.baseInfoForm.regeneratorSkuFlag = true;
         this.newSkuValues[$index] = "";
       }
+      this.renderTableData(this.skuTableData);
     },
     handleClearSku() {
       this.skuInfo = [];
@@ -1542,6 +1731,7 @@
      * 娓叉煋table鎵�闇�瑕佺殑column 鍜� data
      */
     renderTableData(skus) {
+      console.log('-------------->閿�鍞被鍨�',skus)
       this.skuTableColumn = [];
       let pushData = [];
       // 娓叉煋澶撮儴
@@ -1566,7 +1756,15 @@
           }
         );
       }
-
+      // 棰勫敭妯″紡
+      // if (this.baseInfoForm.salesModel !== "PRESALE") {
+      //   pushData.push(
+      //     {
+      //       title: "棰勫敭鏃堕棿",
+      //       slot: "price",
+      //     }
+      //   );
+      // }
       if (this.baseInfoForm.salesModel === "WHOLESALE" && this.wholesaleData) {
         this.wholesaleData.forEach((item, index) => {
           pushData.push({
@@ -1622,6 +1820,7 @@
      * array spec鏁版嵁
      */
     specIterator(result, spec, skus) {
+
       let table = result;
       if (spec.length > 0) {
         //娓呴櫎褰撳墠寰幆鐨勫垎缁�
@@ -1663,6 +1862,11 @@
       } else {
         this.skuIndex++;
       }
+
+      table.forEach((item,index) =>{
+        console.log("鍏冪礌:" + item +"index:" + (index +1))
+          item.sn = index + 1;
+      })
       return table;
     },
     /** 鏍规嵁鍒嗙被id鑾峰彇绯荤粺璁剧疆瑙勬牸淇℃伅*/
@@ -1720,6 +1924,7 @@
           return;
         }
       }
+
       // else if (item === "alertQuantity") {
       //   if (
       //     !/^[0-9]\d*$/.test(row[item]) ||
@@ -1780,124 +1985,134 @@
     },
     /**  娣诲姞鍟嗗搧 **/
     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
+            ) {
+              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 = "";
+
+            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 +2176,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 +2305,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 +2366,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