From e81eae6c8446bbd91c162b5ef3e42051b5523bf1 Mon Sep 17 00:00:00 2001
From: zxl <763096477@qq.com>
Date: 星期五, 11 七月 2025 09:39:56 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/dev' into dev

---
 manager/src/components/verify/index.vue                   |    3 
 manager/src/views/member/list/index.vue                   |   79 +++++++++++++++----
 manager/src/views/video/VideoList.vue                     |   16 ++++
 seller/src/views/goods/goods-seller/goods.vue             |    2 
 manager/src/main.js                                       |    1 
 manager/src/views/goods/goods-info/goods.vue              |    2 
 manager/src/views/seller/shop/shopOperation.vue           |    9 +-
 manager/src/views/goods/goods-info/goodsDetail.vue        |   10 ++
 seller/src/views/my-components/verify/index.vue           |    3 
 buyer/src/components/verify/index.vue                     |    3 
 seller/src/views/goods/goods-seller/goodsOperationSec.vue |   64 +++++++++++++++
 11 files changed, 166 insertions(+), 26 deletions(-)

diff --git a/buyer/src/components/verify/index.vue b/buyer/src/components/verify/index.vue
index 2cbb882..498cc92 100644
--- a/buyer/src/components/verify/index.vue
+++ b/buyer/src/components/verify/index.vue
@@ -89,7 +89,7 @@
         } else {
           this.init()
         }
-        
+
       }).catch(()=>{
         this.init()
       });
@@ -133,6 +133,7 @@
   height: 150px;
   position: relative;
   overflow: hidden;
+  user-select: none;
 
   .slider {
     position: absolute;
diff --git a/manager/src/components/verify/index.vue b/manager/src/components/verify/index.vue
index 2cbb882..498cc92 100644
--- a/manager/src/components/verify/index.vue
+++ b/manager/src/components/verify/index.vue
@@ -89,7 +89,7 @@
         } else {
           this.init()
         }
-        
+
       }).catch(()=>{
         this.init()
       });
@@ -133,6 +133,7 @@
   height: 150px;
   position: relative;
   overflow: hidden;
+  user-select: none;
 
   .slider {
     position: absolute;
diff --git a/manager/src/main.js b/manager/src/main.js
index 0481784..97bfb9b 100644
--- a/manager/src/main.js
+++ b/manager/src/main.js
@@ -49,6 +49,7 @@
 
   window.open(src, "_blank");
 };
+Vue.prototype.endpoint = "https://lmk-1356772813.cos.ap-chengdu.myqcloud.com"
 Vue.prototype.wapLinkTo = function (goodsId, skuId) {
   // app绔簩缁寸爜
   if (skuId) {
diff --git a/manager/src/views/goods/goods-info/goods.vue b/manager/src/views/goods/goods-info/goods.vue
index 7d1d4e4..7dd86dd 100644
--- a/manager/src/views/goods/goods-info/goods.vue
+++ b/manager/src/views/goods/goods-info/goods.vue
@@ -216,6 +216,8 @@
               return h("Tag", { props: { color: "orange" } }, "闆跺敭");
             } else if (params.row.salesModel === "WHOLESALE") {
               return h("Tag", { props: { color: "magenta" } }, "鎵瑰彂");
+            } else if (params.row.salesModel === "PRESALE") {
+              return h("Tag", { props: { color: "magenta" } }, "棰勫敭");
             } else {
               return h("Tag", { props: { color: "volcano" } }, "鍏朵粬绫诲瀷");
             }
diff --git a/manager/src/views/goods/goods-info/goodsDetail.vue b/manager/src/views/goods/goods-info/goodsDetail.vue
index 2b79c55..1f96c75 100644
--- a/manager/src/views/goods/goods-info/goodsDetail.vue
+++ b/manager/src/views/goods/goods-info/goodsDetail.vue
@@ -18,6 +18,9 @@
             <FormItem label="鍟嗗搧鍗栫偣">
               {{ goods.sellingPoint }}
             </FormItem>
+            <FormItem label="鎶芥垚姣斾緥">
+              {{ goods.commission }}%
+            </FormItem>
             <FormItem label="鍟嗗搧鍙傛暟">
              <div v-if="goods.goodsParamsDTOList && goods.goodsParamsDTOList.length" v-for="(item,index) in goods.goodsParamsDTOList" :key="index">
                <div style="margin-bottom: 10px; display: flex; align-items: center;" >
@@ -32,7 +35,12 @@
           <div class="form-item-view">
             <FormItem label="璁¢噺鍗曚綅"> {{ goods.goodsUnit }}</FormItem>
             <FormItem label="閿�鍞ā寮�">
-              {{ goods.salesModel === "RETAIL" ? "闆跺敭鍨�" : "鎵瑰彂鍨�" }}
+              <span v-if="goods.salesModel ==='RETAIL'">闆跺敭鍨�</span>
+              <span v-else-if="goods.salesModel ==='PRESALE'">棰勫敭</span>
+              <span v-else-if="goods.salesModel ==='WHOLESALE'">鎵瑰彂鍨�</span>
+              <span v-else>鍏朵粬绫诲瀷</span>
+
+<!--              {{ goods.salesModel === "RETAIL" ? "闆跺敭鍨�" : "鎵瑰彂鍨�" }}-->
             </FormItem>
             <FormItem label="閿�鍞鍒�" v-if="goods.salesModel !== 'RETAIL'">
               <Table
diff --git a/manager/src/views/member/list/index.vue b/manager/src/views/member/list/index.vue
index 3611c63..0d346e4 100644
--- a/manager/src/views/member/list/index.vue
+++ b/manager/src/views/member/list/index.vue
@@ -52,14 +52,14 @@
     <Modal v-model="descFlag" :title="descTitle" @on-ok="handleSubmitModal" width="500">
       <Form ref="form" :model="form" :rules="ruleValidate" :label-width="80">
 
-        <Input v-model="form.id" v-show="false"/>
+        <Input v-model="form.id" v-show="false" />
 
         <FormItem label="澶村儚">
           <img :src="form.face || defaultPic" class="face" />
           <Button type="text" class="upload" @click="() => {
-                this.picModelFlag = true;
-                this.$refs.ossManage.selectImage = true;
-              }">淇敼</Button>
+            this.picModelFlag = true;
+            this.$refs.ossManage.selectImage = true;
+          }">淇敼</Button>
           <input type="file" style="display: none" id="file" />
         </FormItem>
         <FormItem label="鐢ㄦ埛鍚�" prop="name">
@@ -67,6 +67,11 @@
         </FormItem>
         <FormItem label="鐢ㄦ埛鏄电О" prop="name">
           <Input v-model="form.nickName" style="width: 200px" />
+        </FormItem>
+        <FormItem label="鏍囩" prop="tags">
+          <Select v-model="selectTagIds" multiple filterable :loading="selectLoading" style="width:200px;">
+            <Option v-for="item in options" :key="item.id" :label="item.tagName" :value="item.id"></Option>
+          </Select>
         </FormItem>
         <FormItem label="鎬у埆" prop="sex">
           <RadioGroup type="button" button-style="solid" v-model="form.sex">
@@ -96,7 +101,7 @@
     <Modal width="1200px" v-model="picModelFlag">
       <ossManage @callback="callbackSelected" :isComponent="true" :initialize="picModelFlag" ref="ossManage" />
     </Modal>
-    <multipleMap ref="map" @callback="selectedRegion"/>
+    <multipleMap ref="map" @callback="selectedRegion" />
   </div>
 </template>
 
@@ -105,6 +110,7 @@
 import * as API_Member from "@/api/member.js";
 import ossManage from "@/views/sys/oss-manage/ossManage";
 import * as RegExp from "@/libs/RegExp.js";
+import { getTags } from "@/api/tag.js";
 
 export default {
   name: "member",
@@ -114,12 +120,15 @@
   },
   data() {
     return {
-      defaultPic:require('@/assets/default.png'),
+      defaultPic: require('@/assets/default.png'),
       descTitle: "", // modal鏍囬
       descFlag: false, //缂栬緫鏌ョ湅妗�
       loading: true, // 琛ㄥ崟鍔犺浇鐘舵��
       addFlag: false, // modal鏄鹃殣鎺у埗
-
+      selectLoading: false,
+      options: [],
+      selectTagIds: [],
+      selectTags: [],
       addMemberForm: {
         // 娣诲姞鐢ㄦ埛琛ㄥ崟
         mobile: "",
@@ -323,7 +332,7 @@
   methods: {
     // 鍥炶皟缁欑埗绾�
     callback(val, index) {
-      this.selectMember.forEach(item=>{item.___selected = false})
+      this.selectMember.forEach(item => { item.___selected = false })
       this.$set(val, "___selected", !val.___selected);
       console.log(val.___selected);
       console.log(this.selectMember);
@@ -391,8 +400,16 @@
      * 鏌ヨ鏌ョ湅浼氬憳璇︽儏
      */
     getMemberInfo(id) {
+      var that = this;
       API_Member.getMemberInfoData(id).then((res) => {
         if (res.result) {
+          debugger
+          that.selectTags = []
+          that.selectTagIds = []
+          res.result.tags.forEach(element => {
+            that.selectTags.push(element.tagName)
+            that.selectTagIds.push(element.tagId)
+          });
           this.$set(this, "form", res.result);
         }
       });
@@ -432,17 +449,17 @@
 
     // 閫変腑鐨勫湴鍧�
     selectedRegion(val) {
-      if(val.type === 'select'){
+      if (val.type === 'select') {
         const paths = val.data.map(item => item.name).join(',')
         const ids = val.data.map(item => item.id).join(',')
 
-        this.$set(this.form,'region',paths)
-        this.$set(this.form,'regionId',ids)
+        this.$set(this.form, 'region', paths)
+        this.$set(this.form, 'regionId', ids)
 
       }
-      else{
-        this.$set(this.form,'region',val.data.addr)
-        this.$set(this.form,'regionId',val.data.addrId)
+      else {
+        this.$set(this.form, 'region', val.data.addr)
+        this.$set(this.form, 'regionId', val.data.addrId)
       }
     },
     //鏌ョ湅浼氬憳
@@ -474,9 +491,10 @@
 
     // 鎻愪氦淇敼鏁版嵁
     handleSubmitModal() {
-      const { nickName, sex, username, face, newPassword,id,regionId,region } = this.form;
+      debugger
+      const { nickName, sex, username, face, newPassword, id, regionId, region } = this.form;
       let time = new Date(this.form.birthday);
-      let birthday = this.form.birthday=== undefined?'':
+      let birthday = this.form.birthday === undefined ? '' :
         time.getFullYear() + "-" + (time.getMonth() + 1) + "-" + time.getDate();
       let submit = {
         regionId,
@@ -489,6 +507,7 @@
         id
       };
 
+      submit.tags = this.selectTagIds
       if (newPassword) {
         submit.password = this.md5(newPassword);
       }
@@ -499,9 +518,35 @@
         }
       });
     },
+    selectTag(e) {
+      debugger
+      if (this.selectTagIds.indexOf(e.value) != -1) {
+        this.selectTagIds.splice(this.selectTagIds.indexOf(e.value), 1)
+        this.selectTags.splice(this.selectTags.indexOf(e.label), 1)
+      }
+      else {
+        this.selectTagIds.push(e.value)
+        this.selectTags.push(e.label)
+      }
+      console.log(this.selectTags);
+
+    },
+    remoteMethod(query) {
+      this.selectLoading = true;
+      var params = {
+        "tagTypeKey": "USER",
+        "pageNumber": 1,
+        "pageSize": 500
+      }
+      getTags(params).then(res => {
+        this.options = res.data;
+        this.selectLoading = false;
+      });
+    },
   },
   mounted() {
     this.getData();
+    this.remoteMethod("")
   },
 };
 </script>
@@ -509,9 +554,11 @@
 /deep/ .ivu-table-wrapper {
   width: 100%;
 }
+
 /deep/ .ivu-card {
   width: 100%;
 }
+
 .face {
   width: 60px;
   height: 60px;
diff --git a/manager/src/views/seller/shop/shopOperation.vue b/manager/src/views/seller/shop/shopOperation.vue
index aa69836..1693e7b 100644
--- a/manager/src/views/seller/shop/shopOperation.vue
+++ b/manager/src/views/seller/shop/shopOperation.vue
@@ -73,7 +73,7 @@
                   shape="square"
                   icon="ios-person"
                   size="default"
-                  :src="shopForm.storeLogo"
+                  :src="endpoint + '/' + shopForm.storeLogo"
                 />
                 <div>
                   <Button @click="handleCLickImg('storeLogo')" type="primary"
@@ -208,7 +208,7 @@
                   shape="square"
                   icon="ios-person"
                   size="default"
-                  :src="shopForm.licencePhoto"
+                  :src="endpoint + '/' + shopForm.licencePhoto"
                 />
                 <div>
                   <Button @click="handleCLickImg('licencePhoto')" type="primary"
@@ -231,7 +231,7 @@
                   size="100"
                   icon="md-add"
                   @click.native="handleCLickImg('legalPhoto', 0)"
-                  :src="shopForm.legalPhoto[0]"
+                  :src="endpoint + '/' + shopForm.legalPhoto[0]"
                 />
                 <Avatar
                   class="ml_10 legal-photo"
@@ -239,7 +239,7 @@
                   size="100"
                   icon="md-add"
                   @click.native="handleCLickImg('legalPhoto', 1)"
-                  :src="shopForm.legalPhoto[1]"
+                  :src="endpoint + '/' + shopForm.legalPhoto[1]"
                 />
                 <span>鐐瑰嚮鍥剧墖涓婁紶韬唤璇佹鍙嶉潰锛岃姹傝韩浠借瘉娓呮櫚锛屽洓瑙掓棤缂烘紡</span>
               </FormItem>
@@ -427,6 +427,7 @@
 
   data() {
     return {
+      endpoint: this.endpoint,
       shopId: this.$route.query.shopId, // 搴楅摵id
       isRead: false, // 鏄惁鍙锛屽彧鏈夊湪搴楅摵閫氳繃瀹℃牳鎵嶅彲淇敼
       selectedFormBtnName: "", // 鐐瑰嚮鍥剧墖缁戝畾form
diff --git a/manager/src/views/video/VideoList.vue b/manager/src/views/video/VideoList.vue
index e8c0227..7def5a8 100644
--- a/manager/src/views/video/VideoList.vue
+++ b/manager/src/views/video/VideoList.vue
@@ -133,6 +133,22 @@
               <div v-for="img in detail.imgs" :key="img" class="img-warp">
                 <img :src="img" class="image">
               </div>
+              <Row v-for="goods in detail.goodsList" :key="goods.goodsId" style="width: 100%">
+                <Row style="width:100%;align-items: center; padding: 5px 10px">
+                  <Col span="6">
+                    <img :src="goods.thumbnail" style="width: 100px;height: 100px"/>
+                  </Col>
+                  <Col span="10">
+                    <p>鍟嗗搧鍚嶇О: {{ goods.goodsName }}</p>
+                  </Col>
+                  <Col span="4">
+                    <p>鍟嗗搧鍗曚环: 锟{ goods.price }}</p>
+                  </Col>
+                  <Col span="4">
+                    <p>鍟嗗搧鏁伴噺: {{ goods.goodsNum }}</p>
+                  </Col>
+                </Row>
+              </Row>
             </div>
 
           </Form-item>
diff --git a/seller/src/views/goods/goods-seller/goods.vue b/seller/src/views/goods/goods-seller/goods.vue
index e4efb96..63942cf 100644
--- a/seller/src/views/goods/goods-seller/goods.vue
+++ b/seller/src/views/goods/goods-seller/goods.vue
@@ -333,6 +333,8 @@
               return h("Tag", { props: { color: "orange" } }, "闆跺敭");
             } else if (params.row.salesModel === "WHOLESALE") {
               return h("Tag", { props: { color: "magenta" } }, "鎵瑰彂");
+            }  else if (params.row.salesModel === "PRESALE") {
+              return h("Tag", { props: { color: "magenta" } }, "棰勫敭");
             } else {
               return h("Tag", { props: { color: "volcano" } }, "鍏朵粬绫诲瀷");
             }
diff --git a/seller/src/views/goods/goods-seller/goodsOperationSec.vue b/seller/src/views/goods/goods-seller/goodsOperationSec.vue
index c78ec8b..2f3df7c 100644
--- a/seller/src/views/goods/goods-seller/goodsOperationSec.vue
+++ b/seller/src/views/goods/goods-seller/goodsOperationSec.vue
@@ -23,6 +23,15 @@
             <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>
@@ -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">
@@ -541,6 +559,7 @@
 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 {
@@ -677,6 +696,11 @@
         categoryName: [],
         goodsVideo: "",
         showGoodsVideo: "",
+        // 棰勫敭鏃堕棿
+        preSaleTime:[],
+        preSaleBeginDate:'',
+        preSaleEndDate:'',
+        commission:5
       },
       /** 琛ㄦ牸澶� */
       skuTableColumn: [],
@@ -758,6 +782,32 @@
     }
   },
   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) {
       console.log('娴嬭瘯杈撳叆鐨勫��----------------銆�', val)
@@ -1185,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];
@@ -1679,6 +1730,7 @@
      * 娓叉煋table鎵�闇�瑕佺殑column 鍜� data
      */
     renderTableData(skus) {
+      console.log('-------------->閿�鍞被鍨�',skus)
       this.skuTableColumn = [];
       let pushData = [];
       // 娓叉煋澶撮儴
@@ -1703,7 +1755,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({
diff --git a/seller/src/views/my-components/verify/index.vue b/seller/src/views/my-components/verify/index.vue
index 2cbb882..498cc92 100644
--- a/seller/src/views/my-components/verify/index.vue
+++ b/seller/src/views/my-components/verify/index.vue
@@ -89,7 +89,7 @@
         } else {
           this.init()
         }
-        
+
       }).catch(()=>{
         this.init()
       });
@@ -133,6 +133,7 @@
   height: 150px;
   position: relative;
   overflow: hidden;
+  user-select: none;
 
   .slider {
     position: absolute;

--
Gitblit v1.8.0