瀏覽代碼

Merge branch 'master' of gitee.com:beijing_hongye_huicheng/lilishop-ui

Chopper 4 年之前
父節點
當前提交
59a580ccac

+ 6 - 8
buyer/src/api/member.js

@@ -457,23 +457,21 @@ export function memberMsgList (params) {
  * 设置消息为已读
  * @param {String} messageId 消息id
  */
- export function readMemberMsg (params) {
+ export function readMemberMsg (id) {
   return request({
-    url: `/buyer/member/message`,
+    url: `/buyer/member/message/${id}`,
     method: Method.PUT,
-    needToken: true,
-    params
+    needToken: true
   });
 }
 /**
  * 删除会员消息
  * @param {String} messageId 消息id
  */
- export function delMemberMsg (params) {
+ export function delMemberMsg (id) {
   return request({
-    url: `/buyer/member/message`,
+    url: `/buyer/member/message/${id}`,
     method: Method.DELETE,
-    needToken: true,
-    params
+    needToken: true
   });
 }

+ 8 - 8
buyer/src/config/index.js

@@ -17,15 +17,15 @@ export default {
    * @description api请求基础路径
    */
   api_dev: {
-    // common: 'http://192.168.0.109:8890',
-    // buyer: 'http://192.168.0.109:8888',
-    // seller: 'http://192.168.0.109:8889',
-    // manager: 'http://192.168.0.109:8887'
+    common: 'http://192.168.0.100:8890',
+    buyer: 'http://192.168.0.100:8888',
+    seller: 'http://192.168.0.100:8889',
+    manager: 'http://192.168.0.100:8887'
 
-    common: 'https://common-api.pickmall.cn',
-    buyer: 'https://buyer-api.pickmall.cn',
-    seller: 'https://store-api.pickmall.cn',
-    manager: 'https://admin-api.pickmall.cn'
+    // common: 'https://common-api.pickmall.cn',
+    // buyer: 'https://buyer-api.pickmall.cn',
+    // seller: 'https://store-api.pickmall.cn',
+    // manager: 'https://admin-api.pickmall.cn'
   },
   api_prod: {
     common: 'https://common-api.pickmall.cn',

+ 20 - 11
buyer/src/pages/Merchant.vue

@@ -9,10 +9,12 @@
         <img :src="storeMsg.storeLogo" height="50" alt="">
         <div>
           <p>{{storeMsg.storeName || 'xx店铺'}}</p>
-          <p v-html="storeMsg.storeDesc"></p>
+          <p class="ellipsis" :alt="storeMsg.storeDesc" v-html="storeMsg.storeDesc"></p>
+        </div>
+        <div>
+          <span class="hover-pointer" @click="collect"><Icon type="ios-heart" :color="storeCollected ? '#ed3f14' : '#fff'" />{{storeCollected?'已收藏店铺':'收藏店铺'}}</span>
+          <span style="width:80px" class="hover-pointer ml_10" @click="connectCs(storeMsg.yzfSign)"><Icon custom="icomoon icon-customer-service"  />联系客服</span>
         </div>
-        <div class="store-collect" @click="collect"><Icon type="ios-heart" :color="storeCollected ? '#ed3f14' : '#fff'" />{{storeCollected?'已收藏店铺':'收藏店铺'}}</div>
-        <span class="hover-pointer ml_10" @click="connectCs(storeMsg.yzfSign)"><Icon custom="icomoon icon-customer-service"  />联系客服</span>
       </div>
     </div>
     <div  class="store-category">
@@ -183,15 +185,25 @@ export default {
   position: relative;
   width: 100%;
   background-color: #666;
-  padding: 10px;
+  padding: 4px;
   color: #fff;
   >div{
     display: flex;
     width: 1200px;
     margin: 0 auto;
     align-items: center;
-    >div{
+
+    img {
+      width: 80px;
+    }
+
+    >div:nth-child(2){
       margin-left: 10px;
+      flex: 1;
+    }
+
+    >div:nth-child(3){
+      width: 200px;
     }
   }
   img {
@@ -202,14 +214,11 @@ export default {
   }
   p:nth-child(2){
     font-size: 14px;
+    max-height: 40px;
+    max-width: 400px;
   }
 }
-.store-collect{
-  margin-left: 750px!important;
-  &:hover{
-    cursor: pointer;
-  }
-}
+
 .store-category {
   background-color: #005aa0;
   color: #fff;

+ 24 - 35
buyer/src/pages/forgetPassword.vue

@@ -1,14 +1,13 @@
 <template>
   <div class="login">
+    <div style="height:50px;"></div>
     <!-- 顶部logo -->
-    <div class="top-content">
-      <div class="logo-box">
-        <img
-          src="../assets/images/logo1.png"
-          @click="$router.push('/')"
-        />
-        <div>修改密码</div>
-      </div>
+    <div class="logo-box">
+      <img
+        :src="logoImg" width='150'
+        @click="$router.push('/')"
+      />
+      <div>修改密码</div>
     </div>
     <div class="login-container">
         <!-- 验证手机号 -->
@@ -119,6 +118,7 @@ export default {
   components: { Verify },
   data () {
     return {
+      logoImg: '', // logo图
       loading: false, // 加载状态
       loading1: false, // 第二步加载状态
       formFirst: { // 手机验证码表单
@@ -242,34 +242,22 @@ export default {
   },
   mounted () {
     this.$refs.formFirst.resetFields();
+    this.logoImg = this.Cookies.getItem('logo')
   },
   watch: {
   }
 };
 </script>
 <style scoped lang="scss">
-.login {
-  height: 100%;
-}
-.top-content {
-  width: 100%;
+.logo-box {
+  width: 600px;
   height: 80px;
-  position: relative;
-  z-index: 1;
-  box-shadow: 0 1px 1px #ddd;
-  background-color: #fff;
-
-  .logo-box {
-    width: 80%;
-    max-width: 1200px;
-    height: 80px;
-    margin: 0 auto;
-    display: flex;
-    align-items: center;
-    img {
-      width: 200px;
-      cursor: pointer;
-    }
+  margin: 0 auto;
+  display: flex;
+  align-items: center;
+  img {
+    width: 150px;
+    cursor: pointer;
   }
   div {
     font-size: 20px;
@@ -278,22 +266,23 @@ export default {
 }
 
 .login-container {
+  border-top: 2px solid $theme_color;
   position: relative;
-  margin: 10px auto;
-  width: 1200px;
+  margin: 0 auto;
+  width: 600px;
   background-color: #fff;
-  padding: 20px;
+  padding: 20px 150px;
   .login-btn{
     position: absolute;
     right: 20px;
-    top: 20px;
+    top: -45px;
   }
 }
 
 .verify-con{
   position: absolute;
-  left: 400px;
-  top: 50px;
+  left: 140px;
+  top: -30px;
   z-index: 10;
 }
 

+ 168 - 8
buyer/src/pages/home/memberCenter/memberMsg/MsgList.vue

@@ -1,6 +1,22 @@
 <template>
   <div class="msg-list">
-    <card _Title="我的消息" :_Tabs="status" :_Size="16" />
+    <card _Title="我的消息" :_Tabs="status" :_Size="16"  @_Change="statusChange"/>
+
+    <Table v-if="params.status != 'ALREADY_REMOVE' " :columns="messageColumns" :data="messageData.records"></Table>
+    <Table v-if="params.status == 'ALREADY_REMOVE' " :columns="messageDelColumns" :data="messageData.records"></Table>
+    <!-- 分页 -->
+    <Page
+      style="float:right;margin-top:10px"
+      :current="params.pageNumber"
+      :total="messageData.total"
+      :page-size="params.pageSize"
+      @on-change="changePage"
+      @on-page-size-change="changePageSize"
+      :page-size-opts="[10, 20, 50]"
+      size="small"
+      show-total
+      show-elevator
+    ></Page>
   </div>
 </template>
 <script>
@@ -8,27 +24,171 @@ import {memberMsgList, readMemberMsg, delMemberMsg} from '@/api/member.js'
 export default {
   data() {
     return {
-      list: [], // 会员列表
+      messageData: {}, // 消息数据
       status: ['未读', '已读', '回收站'],
       params: { // 请求参数
         pageNumber: 1,
         pageSize: 10,
-        status: ''
+        status: 'UN_READY'
       },
+      messageDelColumns: [ // table展示数据
+        {
+          title: '消息标题',
+          key: 'title',
+          align: 'left',
+          tooltip: true,
+        },
+        {
+          title: '消息内容',
+          key: 'content',
+          align: 'left',
+          tooltip: true
+        },
+        {
+          title: '发送时间',
+          key: 'createTime',
+          align: 'left',
+          width: 240
+        },
+      ],
+      messageColumns: [ // table展示数据
+        {
+          title: '消息标题',
+          key: 'title',
+          align: 'left',
+          tooltip: true,
+        },
+        {
+          title: '消息内容',
+          key: 'content',
+          align: 'left',
+          tooltip: true
+        },
+        {
+          title: '发送时间',
+          key: 'createTime',
+          align: 'left',
+          width: 240
+        },
+        {
+          title: '操作',
+          key: 'action',
+          align: 'center',
+          fixed: 'right',
+          width: 150,
+          render: (h, params) => {
+            if (params.row.status === 'UN_READY') {
+              return h('div', [
+                h(
+                  'Button',
+                  {
+                    props: {
+                      type: 'info',
+                      size: 'small'
+                    },
+                    style: {
+                      marginRight: '5px'
+                    },
+                    on: {
+                      click: () => {
+                        this.setRead(params.row.id);
+                      }
+                    }
+                  },
+                  '已读'
+                ), h(
+                  'Button',
+                  {
+                    props: {
+                      size: 'small',
+                      type: 'error'
+                    },
+                    on: {
+                      click: () => {
+                        this.removeMessage(params.row.id);
+                      }
+                    }
+                  },
+                  '删除'
+                )
+              ]);
+            } else if (params.row.status === 'ALREADY_READY') {
+              return h('div', [
+                h(
+                  'Button',
+                  {
+                    props: {
+                      size: 'small',
+                      type: 'error'
+                    },
+                    on: {
+                      click: () => {
+                        this.removeMessage(params.row.id);
+                      }
+                    }
+                  },
+                  '删除'
+                )
+              ]);
+            } else {
+
+            }
+          }
+        }
+      ]
     }
   },
   methods: {
+    // 消息状态发生变化
+    statusChange (index) {
+      if (index === 0) { this.params.status = 'UN_READY' }
+      if (index === 1) { this.params.status = 'ALREADY_READY' }
+      if (index === 2) { this.params.status = 'ALREADY_REMOVE' }
+      this.getList()
+    },
+    // 修改页码
+    changePage (v) {
+      this.params.pageNumber = v;
+      this.getList();
+    },
+    // 修改页数
+    changePageSize (v) {
+      this.params.pageSize = v;
+      this.getList();
+    },
     getList () { // 获取消息列表
       memberMsgList(this.params).then(res => {
         if (res.success) {
-          this.list = res.result.records;
+          this.messageData = res.result;
         }
       })
     },
-    setRead (id) { // 设置消息已读
+    // 设置消息已读
+    setRead (id) {
       readMemberMsg(id).then(res => {
-
+        if (res.success) {
+          this.getList()
+        }
       })
+    },
+    // 消息放入回收站
+    removeMessage (id) {
+      this.$Modal.confirm({
+        title: '确认删除',
+        // 记得确认修改此处
+        content: '确认要删除此消息?',
+        loading: true,
+        onOk: () => {
+          // 删除
+          delMemberMsg(id).then((res) => {
+            this.$Modal.remove();
+            if (res.success) {
+              this.$Message.success('消息已成功放入回收站');
+              this.getList();
+            }
+          });
+        },
+      });
     }
   },
   mounted () {
@@ -37,5 +197,5 @@ export default {
 }
 </script>
 <style lang="scss" scoped>
-  
-</style>
+
+</style>

+ 2 - 0
buyer/src/pages/payment/thirdPay.vue

@@ -63,6 +63,7 @@ export default {
       this.num++;
       if (this.num >= 7) {
         clearInterval(this.interval);
+        this.interval = null;
       }
       let params = JSON.parse(JSON.stringify(this.$route.query));
       delete params.paymentMethod;
@@ -70,6 +71,7 @@ export default {
       payCallback(params).then(res => {
         if (res.result) {
           clearInterval(this.interval);
+          this.interval = null;
           this.$router.push({path: '/payDone', query: {orderType: this.$route.query.orderType}});
         }
       });

+ 7 - 1
buyer/src/pages/shopEntry/first-apply.vue

@@ -10,7 +10,6 @@
         />
       </FormItem>
       <FormItem prop="storeAddressIdPath" label="公司所在地">
-        <!-- <Input type="text" v-model="form.storeAddressIdPath" placeholder="请选择公司所在地" /> -->
         <region
           style="width: 250px"
           @selected="selectedRegion"
@@ -32,6 +31,13 @@
           ><span slot="append">人</span>
           </Input>
       </FormItem>
+      <FormItem prop="linkPhone" label="公司电话">
+        <Input
+          type="text"
+          v-model="form.companyPhone"
+          placeholder="请填写公司电话"
+          ></Input>
+      </FormItem>
       <FormItem prop="registeredCapital" label="注册资金">
         <Input
           type="text"

+ 47 - 45
buyer/src/pages/shopEntry/shop-entry.vue

@@ -3,7 +3,7 @@
     <div style="height: 20px"></div>
     <div class="content">
       <h3>店铺入驻</h3>
-      <Steps :current="currentIndex" size="small" class="margin">
+      <Steps :current="currentIndex" class="margin">
         <Step title="企业资质信息"></Step>
         <Step title="财务资质信息"></Step>
         <Step title="其他信息"></Step>
@@ -38,38 +38,37 @@
   </div>
 </template>
 <script>
-import { agreement, applyStatus } from "@/api/shopentry";
-import firstApply from "./first-apply";
-import secondApply from "./second-apply";
-import thirdApply from "./third-apply";
+import { agreement, applyStatus } from '@/api/shopentry';
+import firstApply from './first-apply';
+import secondApply from './second-apply';
+import thirdApply from './third-apply';
 export default {
   components: {
     firstApply,
     secondApply,
-    thirdApply,
+    thirdApply
   },
-  data() {
+  data () {
     return {
       currentIndex: 0, // 当前步骤
       showAgreement: false, // 协议显示
-      agreementCon: "", // 协议内容
+      agreementCon: '', // 协议内容
       checked: false, // 选中协议
-      applyData: {}, // 申请数据
       firstData: {}, // 第一步数据
       secondData: {}, // 第二步数据
       thirdData: {}, // 第三步数据
-      storeDisable: "", // APPLY OPEN 开店中 CLOSED 关闭 REFUSED 拒绝 APPLYING 申请中,审核
-      dataReview: true, // 根据接口返回判断是否可展示数据
+      storeDisable: '', // APPLY OPEN 开店中 CLOSED 关闭 REFUSED 拒绝 APPLYING 申请中,审核
+      dataReview: true // 根据接口返回判断是否可展示数据
     };
   },
   methods: {
-    getArticle() {
+    getArticle () {
       // 入驻协议
       agreement().then((res) => {
         this.agreementCon = res.result.content;
       });
     },
-    getData() {
+    getData () { // 获取已填写店铺信息
       applyStatus().then((res) => {
         if (res.success) {
           if (!res.result) {
@@ -78,34 +77,34 @@ export default {
             this.dataReview = false;
             let data = res.result;
             let first = [
-              "addressIdPath",
-              "addressPath",
-              "companyAddress",
-              "companyEmail",
-              "companyName",
-              "employeeNum",
-              "legalId",
-              "legalName",
-              "licencePhoto",
-              "legalPhoto",
-              "licenseNum",
-              "linkName",
-              "linkPhone",
-              "registeredCapital",
-              "scope",
+              'storeAddressIdPath',
+              'storeAddressPath',
+              'storeAddressDetail',
+              'companyEmail',
+              'companyName',
+              'employeeNum',
+              'legalId',
+              'legalName',
+              'licencePhoto',
+              'legalPhoto',
+              'licenseNum',
+              'linkName',
+              'linkPhone',
+              'registeredCapital',
+              'scope'
             ];
             let second = [
-              "settlementBankAccountName",
-              "settlementBankAccountNum",
-              "settlementBankBranchName",
-              "settlementBankJointName",
+              'settlementBankAccountName',
+              'settlementBankAccountNum',
+              'settlementBankBranchName',
+              'settlementBankJointName'
             ];
             let third = [
-              "goodsManagementCategory",
-              "storeCenter",
-              "storeDesc",
-              "storeLogo",
-              "storeName",
+              'goodsManagementCategory',
+              'storeCenter',
+              'storeDesc',
+              'storeLogo',
+              'storeName'
             ];
 
             this.storeDisable = data.storeDisable;
@@ -120,25 +119,28 @@ export default {
               this.thirdData[e] = data[e];
             });
 
-            if (this.storeDisable === "APPLY") {
+            if (this.storeDisable === 'APPLY') {
               this.currentIndex = 0;
             } else {
               this.currentIndex = 3;
             }
-            this.dataReview = true;
-            this.$forceUpdate();
+            this.$nextTick(() => {
+              this.dataReview = true;
+              this.$forceUpdate();
+            })
           }
+          console.log(33333333333333);
         }
       });
     },
-    nextPage(step) {
+    nextPage (step) {
       this.currentIndex = step;
-    },
+    }
   },
-  mounted() {
+  mounted () {
     this.getData();
     this.getArticle();
-  },
+  }
 };
 </script>
 <style lang="scss" scoped>
@@ -159,7 +161,7 @@ export default {
 }
 
 .margin {
-  margin: 10px 0;
+  margin: 30px 0;
 }
 .agreeent-con {
   max-height: 500px;

+ 11 - 5
buyer/src/pages/shopEntry/third-apply.vue

@@ -60,17 +60,23 @@
           >
         </Select>
       </FormItem>
-      <FormItem prop="storeCenter" label="经纬度">
-        <Input
+      <FormItem prop="storeCenter" label="店铺定位">
+        <!-- <Input
           type="text"
           v-model="form.storeCenter"
           readonly
           placeholder="点击右侧按钮选择店铺位置"
-        />
+        /> -->
+        <Button
+          type="info"
+          v-if="!form.storeCenter"
+          @click="$refs.liliMap.showMap = true"
+        >点击获取店铺定位</Button>
         <Button
-          icon="ios-locate-outline"
+          type="success"
+          v-else
           @click="$refs.liliMap.showMap = true"
-        ></Button>
+        >已定位</Button>
       </FormItem>
       <FormItem prop="storeDesc" label="店铺简介">
         <Input

+ 2 - 9
buyer/src/pages/user/Home.vue

@@ -15,7 +15,8 @@
           >
             <div class="user-icon">
               <div class="user-img">
-                <img :src="userInfo.face" />
+                <img :src="userInfo.face" v-if="userInfo.face" alt />
+                <Avatar icon="ios-person" class="mb_10" v-else size="96" />
               </div>
               <p>{{userInfo.nickName}}</p>
             </div>
@@ -125,10 +126,6 @@ export default {
   align-items: center;
 }
 
-.user-icon span {
-  font-size: 96px;
-}
-
 .user-img {
   margin-bottom: 15px;
   width: 96px;
@@ -137,10 +134,6 @@ export default {
   overflow: hidden;
 }
 
-.user-img img {
-  width: 100%;
-}
-
 .layout-footer-center {
   padding: 0px 15px;
 

+ 1 - 0
buyer/src/plugins/request.js

@@ -116,6 +116,7 @@ async function refresh (error) {
         });
       },
       onCancel: () => {
+        router.go(0)
         Modal.remove();
       }
     });

+ 4 - 0
manager/src/config/index.js

@@ -21,6 +21,10 @@ export default {
     buyer: "https://buyer-api.pickmall.cn",
     seller: "https://store-api.pickmall.cn",
     manager: "https://admin-api.pickmall.cn"
+    // common: 'http://192.168.0.109:8890',
+    // buyer: 'http://192.168.0.109:8888',
+    // seller: 'http://192.168.0.109:8889',
+    // manager: 'http://192.168.0.109:8887'
   },
   api_prod: {
     common: "https://common-api.pickmall.cn",

+ 2 - 2
manager/src/views/goods/goods-info/goods.vue

@@ -112,7 +112,7 @@
       </Form>
       <div slot="footer">
         <Button type="text" @click="modalVisible = false">取消</Button>
-        <Button type="primary" :loading="submitLoading" @click="lower(form.id)"
+        <Button type="primary" :loading="submitLoading" @click="lower"
           >提交</Button
         >
       </div>
@@ -363,7 +363,7 @@ export default {
       this.modalTitle = "下架操作";
       this.modalVisible = true;
     },
-    lower(id) {
+    lower() {
       lowGoods(this.id, this.underForm).then((res) => {
         this.$Modal.remove();
         if (res.success) {

+ 1 - 1
manager/src/views/home/home.vue

@@ -150,7 +150,7 @@
             <div class="today-item">
               <div>今日交易额</div>
 
-              <span>¥{{homeData.todayOrderPrice | unitPrice }}</span>
+              <span>¥{{homeData.todayOrderPrice ? (homeData.todayOrderPrice  | unitPrice) : 0}}</span>
             </div>
             <div class="today-item">
               <div>今日新增店铺</div>

+ 2 - 1
manager/src/views/member/list/index.vue

@@ -324,7 +324,7 @@ export default {
     // 已选择用户数据
     selectedList: {
       type: null,
-      default: "",
+      default: [],
     },
   },
   watch: {
@@ -344,6 +344,7 @@ export default {
     callback(val, index) {
       this.$set(val, "___selected", !val.___selected);
       console.log(val.___selected);
+      console.log(this.selectMember);
       let findUser = this.selectMember.find((item) => {
         return item.id == val.id;
       });

+ 1 - 4
manager/src/views/my-components/verify/index.vue

@@ -18,7 +18,7 @@
 import { getVerifyImg, postVerifyImg } from './verify.js';
 export default {
   props: {
-    verifyType: {
+    verifyType: { // 验证方式,登录,注册等
       defalut: 'LOGIN',
       type: String
     }
@@ -97,9 +97,6 @@ export default {
       });
     }
   },
-  created () {
-    // this.getImg();
-  },
   watch: {
     verifyType: {
       immediate: true,

+ 2 - 2
manager/src/views/seller/shop/shopDetail.vue

@@ -98,8 +98,8 @@
 
           </p>
           <p class="item">
-            <span class="label">店铺经纬度:</span>
-            <span class="info">{{storeInfo.storeCenter?storeInfo.storeCenter:'暂未完善'}}</span>
+            <span class="label">店铺定位:</span>
+            <span class="info">{{storeInfo.storeCenter?'已定位':'未定位'}}</span>
           </p>
           <p class="item">
             <span class="label">经营范围:</span>

+ 13 - 3
manager/src/views/seller/shop/shopOperation.vue

@@ -27,8 +27,18 @@
                 </RadioGroup>
               </FormItem>
 
-              <FormItem label="店铺经纬度" prop="shopCenter">
-                <Input v-model="shopForm.storeCenter" @on-focus="$refs.liliMap.showMap = true" clearable style="width: 350px" />
+              <FormItem label="店铺定位" prop="shopCenter">
+                <!-- <Input v-model="shopForm.storeCenter" @on-focus="$refs.liliMap.showMap = true" clearable style="width: 350px" /> -->
+                <Button
+                  type="info"
+                  v-if="!shopForm.storeCenter"
+                  @click="$refs.liliMap.showMap = true"
+                >点击获取店铺定位</Button>
+                <Button
+                  type="success"
+                  v-else
+                  @click="$refs.liliMap.showMap = true"
+                >已定位</Button>
               </FormItem>
 
               <FormItem label="店铺所在地" prop="storeAddressPath">
@@ -267,7 +277,7 @@ export default {
           { required: true, message: "店铺简介不能为空", trigger: "blur" },
         ],
         storeCenter: [
-          { required: true, message: "店铺经纬度不能为空", trigger: "change" },
+          { required: true, message: "店铺未定位", trigger: "change" },
         ],
         companyName: [
           { required: true, message: "公司名称不能为空", trigger: "blur" },

+ 8 - 8
seller/src/config/index.js

@@ -18,14 +18,14 @@ export default {
    * @description api请求基础路径
    */
   api_dev: {
-    // common: 'https://common-api.pickmall.cn',
-    // buyer: 'https://buyer-api.pickmall.cn',
-    // seller: 'https://store-api.pickmall.cn',
-    // manager: 'https://admin-api.pickmall.cn',
-    common: 'http://192.168.0.109:8890',
-    buyer: 'http://192.168.0.109:8888',
-    seller: 'http://192.168.0.109:8889',
-    manager: 'http://192.168.0.109:8887'
+    common: 'https://common-api.pickmall.cn',
+    buyer: 'https://buyer-api.pickmall.cn',
+    seller: 'https://store-api.pickmall.cn',
+    manager: 'https://admin-api.pickmall.cn',
+    // common: 'http://192.168.0.100:8890',
+    // buyer: 'http://192.168.0.100:8888',
+    // seller: 'http://192.168.0.100:8889',
+    // manager: 'http://192.168.0.100:8887'
   },
   api_prod: {
     common: 'https://common-api.pickmall.cn',

+ 1 - 1
seller/src/views/goods/goods-seller/addGoods.scss

@@ -423,7 +423,7 @@ div.base-info-item {
   display:flex;
 }
 .demo-upload-list-cover div {
-  margin: 10% 0;
+  margin-top: 50px;
   width: 100%;
 
   > i {

+ 28 - 50
seller/src/views/goods/goods-seller/goods.vue

@@ -36,7 +36,7 @@
             <DropdownItem name="uppers">批量上架</DropdownItem>
             <DropdownItem name="lowers">批量下架</DropdownItem>
             <DropdownItem name="deleteAll">批量删除</DropdownItem>
-            <!-- <DropdownItem name="batchShipTemplate">批量设置运费模板</DropdownItem> -->
+            <DropdownItem name="batchShipTemplate">批量设置物流模板</DropdownItem>
           </DropdownMenu>
         </Dropdown>
       </Row>
@@ -87,21 +87,10 @@
       </div>
     </Modal>
 
-    <!-- 批量设置运费模板 -->
-    <Modal title="批量设置运费模板" v-model="shipTemplateModal" :mask-closable="false" :width="500">
+    <!-- 批量设置物流模板 -->
+    <Modal title="批量设置物流模板" v-model="shipTemplateModal" :mask-closable="false" :width="500">
       <Form ref="shipTemplateForm" :model="shipTemplateForm" :label-width="120">
-        <FormItem class="form-item-view-el" label="运费" prop="freightPayer">
-          <RadioGroup type="button" button-style="solid" @on-change="logisticsTemplateUndertakerChange" v-model="shipTemplateForm.freightPayer">
-            <Radio label="STORE">
-              <span>卖家承担运费</span>
-            </Radio>
-            <Radio label="BUYER">
-              <span>使用物流规则</span>
-            </Radio>
-          </RadioGroup>
-        </FormItem>
-
-        <FormItem class="form-item-view-el" label="物流模板" prop="templateId" v-if="shipTemplateShow">
+        <FormItem class="form-item-view-el" label="物流模板" prop="templateId">
           <Select v-model="shipTemplateForm.templateId" style="width: 200px">
             <Option v-for="item in logisticsTemplate" :value="item.id" :key="item.id">{{ item.name }}
             </Option>
@@ -124,10 +113,9 @@ import {
   upGoods,
   lowGoods,
   deleteGoods,
-  batchShipTemplate,
+  batchShipTemplate
 } from "@/api/goods";
-
-import * as API_Store from "@/api/shops";
+import * as API_Shop from "@/api/shops";
 
 export default {
   name: "goods",
@@ -135,10 +123,7 @@ export default {
     return {
       id: "", //要操作的id
       loading: true, // 表单加载状态
-      shipTemplateForm: {
-        freightPayer: "STORE",
-      },
-      shipTemplateShow: false, //物流模板是否显示
+      shipTemplateForm: {},
       shipTemplateModal: false, // 物流模板是否显示
       logisticsTemplate: [], // 物流列表
       updateStockModalVisible: false, // 更新库存模态框显隐
@@ -421,11 +406,12 @@ export default {
       if (v == "deleteAll") {
         this.deleteAll();
       }
-      //批量设置运费模板
+      //批量设置物流模板
       if (v == "batchShipTemplate") {
         this.batchShipTemplate();
       }
     },
+    // 获取库存详情
     getStockDetail(id) {
       getGoodsSkuListDataSeller({ goodsId: id, pageSize: 1000 }).then((res) => {
         if (res.success) {
@@ -435,6 +421,7 @@ export default {
         }
       });
     },
+    // 更新库存
     updateStock() {
       let updateStockList = this.stockList.map((i) => {
         let j = { skuId: i.id, quantity: i.quantity };
@@ -486,28 +473,24 @@ export default {
       this.selectList = e;
       this.selectCount = e.length;
     },
-    //保存运费模板信息
+    //保存物流模板信息
     saveShipTemplate() {
-      if (this.shipTemplateForm.freightPayer == "STORE") {
-        {
-          this.shipTemplateForm.templateId = 0;
-        }
-      }
+     
       this.$Modal.confirm({
-        title: "确认设置运费模板",
+        title: "确认设置物流模板",
         content:
-          "您确认要设置所选的 " + this.selectCount + " 个商品的运费模板?",
+          "您确认要设置所选的 " + this.selectCount + " 个商品的物流模板?",
         loading: true,
         onOk: () => {
           let ids = [];
           this.selectList.forEach(function (e) {
             ids.push(e.id);
           });
-          // 批量设置运费模板
+          // 批量设置物流模板
           batchShipTemplate(this.shipTemplateForm).then((res) => {
             this.$Modal.remove();
             if (res.success) {
-              this.$Message.success("运费模板设置成功");
+              this.$Message.success("物流模板设置成功");
               this.clearSelectAll();
               this.getDataList();
             }
@@ -516,12 +499,13 @@ export default {
         },
       });
     },
-    //批量设置运费模板
+    //批量设置物流模板
     batchShipTemplate() {
       if (this.selectCount <= 0) {
-        this.$Message.warning("您还未选择要设置运费模板的商品");
+        this.$Message.warning("您还未选择要设置物流模板的商品");
         return;
       }
+      this.getShipTempList()
       let data = [];
       this.selectList.forEach(function (e) {
         data.push(e.id);
@@ -529,21 +513,7 @@ export default {
       this.shipTemplateForm.goodsId = data;
       this.shipTemplateModal = true;
     },
-    //运费承担者变化
-    logisticsTemplateUndertakerChange(v) {
-      //如果是卖家承担运费 需要显示运费模板
-      if (v == "BUYER") {
-        API_Store.getShipTemplate().then((res) => {
-          if (res.success) {
-            this.logisticsTemplate = res.result;
-          }
-        });
-        this.shipTemplateShow = true;
-      }
-      if (v == "STORE") {
-        this.shipTemplateShow = false;
-      }
-    },
+    // 获取商品列表数据
     getDataList() {
       this.loading = true;
       // 带多条件搜索参数获取表单数据
@@ -555,6 +525,14 @@ export default {
         }
       });
     },
+    // 获取物流模板
+    getShipTempList () {
+      API_Shop.getShipTemplate().then((res) => {
+        if (res.success) {
+          this.logisticsTemplate = res.result;
+        }
+      })
+    },
     //下架商品
     lower(v) {
       this.$Modal.confirm({

+ 39 - 44
seller/src/views/goods/goods-seller/goodsOperation.vue

@@ -137,27 +137,33 @@
               <Input type="text" v-model="baseInfoForm.cost" placeholder="市场价格" clearable style="width: 260px"/>
             </FormItem>
             <FormItem class="form-item-view-el required" label="商品图片" prop="goodsGalleryFiles">
-              <div class="demo-upload-list" v-for="(item, __index) in baseInfoForm.goodsGalleryFiles" :key="__index">
-                <template v-if="item.status === 'finished'">
-                  <img :src="item.url"/>
-
-                  <div class="demo-upload-list-cover">
-                    <div>
-                      <Icon type="ios-eye-outline" @click.native="handleViewGoodsPicture(item.url)"></Icon>
-                      <Icon type="ios-trash-outline" @click.native="handleRemoveGoodsPicture(item)"></Icon>
-                    </div>
-                    <div>
-                      <Icon type="ios-arrow-dropleft" @click.native="
-                        handleGoodsPicRemoteUp(baseInfoForm.goodsGalleryFiles,__index)"/>
-                      <Icon type="ios-arrow-dropright" @click.native="
-                        handleGoodsPicRemoteDown(baseInfoForm.goodsGalleryFiles,__index)"/>
+              <vuedraggable
+                :list="baseInfoForm.goodsGalleryFiles"
+                :animation="200"
+                style="display:inline-block;"
+                ghost-class="thumb-ghost"
+              >
+                <div class="demo-upload-list" v-for="(item, __index) in baseInfoForm.goodsGalleryFiles" :key="__index">
+                  <template v-if="item.status === 'finished'">
+                    <img :src="item.url"/>
+                    <div class="demo-upload-list-cover">
+                      <div>
+                        <Icon type="ios-eye-outline" size="30" @click.native="handleViewGoodsPicture(item.url)"></Icon>
+                        <Icon type="ios-trash-outline" size="30" @click.native="handleRemoveGoodsPicture(item)"></Icon>
+                      </div>
+                      <!-- <div>
+                        <Icon type="ios-arrow-dropleft" @click.native="
+                          handleGoodsPicRemoteUp(baseInfoForm.goodsGalleryFiles,__index)"/>
+                        <Icon type="ios-arrow-dropright" @click.native="
+                          handleGoodsPicRemoteDown(baseInfoForm.goodsGalleryFiles,__index)"/>
+                      </div> -->
                     </div>
-                  </div>
-                </template>
-                <template v-else>
-                  <Progress v-if="item.showProgress" :percent="item.percentage" hide-info></Progress>
-                </template>
-              </div>
+                  </template>
+                  <template v-else>
+                    <Progress v-if="item.showProgress" :percent="item.percentage" hide-info></Progress>
+                  </template>
+                </div>
+              </vuedraggable>
               <Upload ref="upload" :show-upload-list="false" :default-file-list="baseInfoForm.goodsGalleryFiles"
                       :on-success="handleSuccessGoodsPicture" :format="['jpg', 'jpeg', 'png']"
                       :on-format-error="handleFormatError" :on-exceeded-size="handleMaxSize"
@@ -167,6 +173,7 @@
                   <Icon type="ios-camera" size="20"></Icon>
                 </div>
               </Upload>
+              <!-- <upload-pic-thumb v-model="baseInfoForm.goodsGalleryFiles" :multiple="true"></upload-pic-thumb> -->
 
               <Modal title="View Image" v-model="goodsPictureVisible">
                 <img :src="previewGoodsPicture" v-if="goodsPictureVisible" style="width: 100%"/>
@@ -371,7 +378,7 @@
                       <Select v-model="params.paramValue" placeholder="请选择" style="width: 200px" clearable
                               @on-change="selectParams(paramsGroup,groupIndex,params,paramsIndex,params.paramValue)">
                         <Option v-for="option in params.options.split(',')" :label="option"
-                                :value="option"></Option>
+                                :value="option" :key="option"></Option>
                       </Select>
                     </FormItem>
                   </p>
@@ -428,18 +435,17 @@
 
 <script>
 import {regular} from "@/utils";
-import uploadPicThumb from "@/views/my-components/lili/upload-pic-thumb";
 import editor from "@/views/my-components/lili/editor";
 import * as API_GOODS from "@/api/goods";
 import * as API_Shop from "@/api/shops";
 
 import cloneObj from "@/utils/index";
-
+import vuedraggable from "vuedraggable";
 export default {
   name: "addGoods",
   components: {
-    uploadPicThumb,
     editor,
+    vuedraggable
   },
   watch: {
     selectGoodsType: {
@@ -620,8 +626,8 @@ export default {
         updateSku: true,
         /** 是否重新生成sku */
         regeneratorSkuFlag: false,
-        /** 运费模板id **/
-        templateId: 0,
+        /** 物流模板id **/
+        templateId: '',
         /** 参数组*/
         goodsParamsDTOList: [],
       },
@@ -647,7 +653,7 @@ export default {
       /** 规格图片 */
       images: [],
 
-      /** 运费模板 **/
+      /** 物流模板 **/
       logisticsTemplate: [],
 
       /** 固定列校验提示内容 */
@@ -685,6 +691,7 @@ export default {
           {required: true, message: "请输入物流参数"},
           {validator: checkWeight},
         ],
+        templateId: [{required: true, message: '请选择物流模板'}],
         sellingPoint: [{required: true, message: "请输入商品卖点"}],
         goodsUnit: [{required: true, message: "请选择计量单位"}],
       },
@@ -715,7 +722,7 @@ export default {
     this.accessToken = {
       accessToken: this.getStore("accessToken"),
     };
-    // 获取运费模板
+    // 获取物流模板
     API_Shop.getShipTemplate().then((res) => {
       if (res.success) {
         this.logisticsTemplate = res.result;
@@ -763,7 +770,7 @@ export default {
         mobileIntro: "",
         updateSku: true,
         regeneratorSkuFlag: false,
-        templateId: 0,
+        templateId: '',
         goodsParamsDTOList: [],
       };
       this.activestep = 0;
@@ -837,7 +844,6 @@ export default {
      * @value 参数选项值
      */
     selectParams(paramsGroup, groupIndex, params, paramsIndex, value) {
-      console.log(params.id);
       if (!this.baseInfoForm.goodsParamsDTOList[groupIndex]) {
         this.baseInfoForm.goodsParamsDTOList[groupIndex] = {
           groupId:'',
@@ -871,14 +877,13 @@ export default {
 
     // 编辑sku图片
     editSkuPicture(row) {
-      console.log(row);
       if (row.images && row.images.length > 0) {
         this.previewPicture = row.images[0].url;
       }
       this.selectedSku = row;
       this.showSkuPicture = true;
     },
-    handleView(url) {
+    handleView (url) {
       this.previewPicture = url;
       this.visible = true;
     },
@@ -937,7 +942,6 @@ export default {
       });
     },
     handleBeforeUploadGoodsPicture() {
-      console.log(this.baseInfoForm);
       const check = this.baseInfoForm.goodsGalleryFiles.length < 5;
       if (!check) {
         this.$Notice.warning({
@@ -1016,7 +1020,6 @@ export default {
         ...this.baseInfoForm,
         ...response.result,
       };
-      // console.warn(this.baseInfoForm);
 
       this.baseInfoForm.release = "true";
       this.baseInfoForm.recommend = this.baseInfoForm.recommend
@@ -1140,7 +1143,6 @@ export default {
               group.goodsParamsItemDTOList.forEach(param => {
                 param.groupId = group.groupId
                 paramsArr.push(param)
-                console.log(param);
               })
             })
             // 循环参数分组
@@ -1154,7 +1156,6 @@ export default {
                 })
               })
             });
-            console.log(this.goodsParams);
           } else {
             this.baseInfoForm.goodsParamsDTOList = []
           }
@@ -1183,10 +1184,7 @@ export default {
     },
     // 编辑规格值
     async skuValueChange(val, index, item) {
-      /** 更新skuInfo数据 */
-      // let _arr = cloneObj(item);
-      // this.$set(item, "name", _arr.name);
-      // this.$set(this.skuInfo, index, _arr);
+ 
       /**
        * 渲染规格详细表格
        */
@@ -1308,7 +1306,6 @@ export default {
       );
 
       this.skuTableColumn = pushData;
-      console.log(this.skuTableColumn);
       //克隆所有渲染的数据
       let cloneTemp = cloneObj(this.skuInfo);
 
@@ -1328,7 +1325,6 @@ export default {
         cloneTemp.splice(0, 1);
         result = this.specIterator(result, cloneTemp);
         this.skuTableData = result;
-        console.log(this.skuTableData);
       }
     },
      /**
@@ -1458,7 +1454,6 @@ export default {
         this.GET_GoodData();
         return;
       }
-      console.log(this.baseInfoForm);
       this.GET_GoodsParams();
       /** 1级校验 */
       this.loading = true;
@@ -1548,6 +1543,7 @@ export default {
             this.$Message.error("请上传商品图片");
             return;
           }
+          if (this.baseInfoForm.templateId === '') this.baseInfoForm.templateId = 0;
           let flag = false;
           let paramValue = "";
           // //参数校验
@@ -1580,7 +1576,6 @@ export default {
           }
           /** 参数校验 **/
           /* Object.keys(this.baseInfoForm.goodsParamsList).forEach((item) => {
-            console.warn(item.paramName)
           });*/
 
           if (this.goodsId) {

+ 1 - 1
seller/src/views/home/home.vue

@@ -121,7 +121,7 @@
             </div>
 
             <div class="detail-item">
-              <div>
+              <div @click="navigateTo('seckill')">
                 <span>{{homeData.seckillNum || 0}}</span>
                 <div>待参加活动</div>
               </div>

+ 2 - 2
seller/src/views/statistics/order.vue

@@ -48,7 +48,7 @@
                 </div>
                 <div class="card-item">
                   <div class="card-item-label">下单金额</div>
-                  <div class="card-item-value">{{overViewList.orderAmount| unitPrice('¥') }}</div>
+                  <div class="card-item-value">{{overViewList.orderAmount  ? ($options.filters.unitPrice(overViewList.orderAmount )) : 0 }}</div>
                 </div>
                 <div class="card-item">
                   <div class="card-item-label">付款笔数</div>
@@ -56,7 +56,7 @@
                 </div>
                 <div class="card-item">
                   <div class="card-item-label">付款金额</div>
-                  <div class="card-item-value">{{overViewList.paymentAmount | unitPrice('¥')}}</div>
+                  <div class="card-item-value">{{ overViewList.paymentAmount ?  ($options.filters.unitPrice(overViewList.paymentAmount)) : 0 }}</div>
                 </div>
 
               </div>