Explorar o código

Merge branch 'master' into feature/1962-memberBrandAmbassador

kevin_zhangl %!s(int64=3) %!d(string=hai) anos
pai
achega
70efb8f2d3

+ 1 - 0
backendEle/package.json

@@ -22,6 +22,7 @@
     "countup.js": "^1.9.3",
     "echarts": "^4.1.0",
     "element-ui": "2.9.1",
+    "moment": "^2.29.4",
     "nix-tinymce": "^1.0.7",
     "ua-parser-js": "^0.7.20",
     "v-charts": "^1.16.20",

+ 4 - 1
backendEle/src/main.js

@@ -1,5 +1,6 @@
 // The Vue build version to load with the `import` command
 // (runtime-only or standalone) has been set in webpack.base.conf with an alias.
+import moment from 'moment'
 import Vue from 'vue'
 import ElementUI from 'element-ui'
 import locale from 'element-ui/lib/locale/lang/en'
@@ -10,7 +11,9 @@ import router from './router'
 import axios from './utils/axiosPlugin'
 import errorInfo from './utils/errorCode'
 
-Vue.use(ElementUI,{locale})
+Vue.prototype.$moment = moment
+
+Vue.use(ElementUI, {locale})
 
 Vue.config.productionTip = false
 

+ 17 - 9
backendEle/src/views/bonus/period.vue

@@ -20,13 +20,13 @@
         </el-table-column>
         <el-table-column label="time frame" width="260"><!-- 时间范围 -->
           <template slot-scope="scope">
-            <!-- 应开始于 -->Should start on:{{tool.formatDate(scope.row.START_TIME)}}<br/>
-            <!-- 应结束于 -->Should end on:{{tool.formatDate(scope.row.END_TIME)}}
+            <!-- 应开始于 -->Should start on:{{getWatTime(scope.row.START_TIME)}}<br/>
+            <!-- 应结束于 -->Should end on:{{getWatTime(scope.row.END_TIME)}}
           </template>
         </el-table-column>
         <el-table-column label="Closing time" width="180"><!-- 封期时间 -->
           <template slot-scope="scope">
-            {{tool.formatDate(scope.row.CLOSED_AT)}}
+            {{getWatTime(scope.row.CLOSED_AT)}}
           </template>
         </el-table-column>
         <el-table-column label="Performance sheet progress" width="90"><!-- 业绩单进度 -->
@@ -37,8 +37,8 @@
         </el-table-column>
         <el-table-column label="Time of generating performance sheet" width="210"><!-- 生成业绩单时间 -->
           <template slot-scope="scope">
-            <!-- 开始 -->start:{{tool.formatDate(scope.row.PERF_STARTED_AT)}}<br>
-            <!-- 完成 -->complete:{{tool.formatDate(scope.row.PERFED_AT)}}
+            <!-- 开始 -->start:{{getWatTime(scope.row.PERF_STARTED_AT)}}<br>
+            <!-- 完成 -->complete:{{getWatTime(scope.row.PERFED_AT)}}
           </template>
         </el-table-column>
         <el-table-column label="Settlement progress" width="80"><!-- 结算进度 -->
@@ -49,8 +49,8 @@
         </el-table-column>
         <el-table-column label="Date" width="210"><!-- 结算时间 -->
           <template slot-scope="scope">
-            <!-- 开始 -->start:{{tool.formatDate(scope.row.CALCULATE_STARTED_AT)}}<br>
-            <!-- 完成 -->complete:{{tool.formatDate(scope.row.CALCULATED_AT)}}
+            <!-- 开始 -->start:{{getWatTime(scope.row.CALCULATE_STARTED_AT)}}<br>
+            <!-- 完成 -->complete:{{getWatTime(scope.row.CALCULATED_AT)}}
           </template>
         </el-table-column>
         <el-table-column label="Network connection progress" width="80"><!-- 挂网进度 -->
@@ -61,8 +61,8 @@
         </el-table-column>
         <el-table-column label="Network connection time" width="210"><!-- 挂网时间 -->
           <template slot-scope="scope">
-            <!-- 开始 -->start:{{tool.formatDate(scope.row.SEND_STARTED_AT)}}<br/>
-            <!-- 完成 -->complete:{{tool.formatDate(scope.row.SENT_AT)}}
+            <!-- 开始 -->start:{{getWatTime(scope.row.SEND_STARTED_AT)}}<br/>
+            <!-- 完成 -->complete:{{getWatTime(scope.row.SENT_AT)}}
           </template>
         </el-table-column>
         <el-table-column fixed="right" label="Action" width="180"><!-- 操作 -->
@@ -294,6 +294,14 @@ export default {
           this.getData(this.currentPage, this.pageSize)
         }
       }
+    },
+    getWatTime (ts) {
+      ts = parseInt(ts)
+      if (ts) {
+        return this.$moment(ts * 1000).utcOffset('+0100' ).format('YYYY-MM-DD HH:mm:ss')
+      } else {
+        return ''
+      }
     }
   }
 }

+ 176 - 178
backendEle/src/views/layout/layout.vue

@@ -90,198 +90,196 @@
   </el-container>
 </template>
 <script>
-  import {WEBSOCKET_HOST} from '@/utils/config'
-  import userInfo from '@/utils/userInfo'
-  import network from '@/utils/network'
-  import tool from '@/utils/tool'
-  import Waves from '@/static/plugins/waves/waves.js'
-  import store from '@/utils/vuexStore'
-  import baseInfo from '@/utils/baseInfo'
-  import initRegion from '@/utils/region'
-  import '@/static/plugins/css/font-awesome.min.css'
+import {WEBSOCKET_HOST} from '@/utils/config'
+import userInfo from '@/utils/userInfo'
+import network from '@/utils/network'
+import tool from '@/utils/tool'
+import Waves from '@/static/plugins/waves/waves.js'
+import store from '@/utils/vuexStore'
+import baseInfo from '@/utils/baseInfo'
+import initRegion from '@/utils/region'
+import '@/static/plugins/css/font-awesome.min.css'
 
-  export default {
-    name: 'layout',
-    beforeCreate() {
-      let vueObj = this
-      // 检测用户是否已经登录,如果已经登录则直接跳转到控制台页
-      if (!userInfo.hasLogin()) {
-        this.$router.push('/login')
-        return
-      }
-      // websocket连接
-      let wsServer = WEBSOCKET_HOST
-      let webSocket = new WebSocket(wsServer)
-      store.state.socket.socketObj = webSocket
-      webSocket.onopen = function (evt) {
-        let userId = userInfo.userId()
-        let sendData = {app: 'admin', userId: userId}
-        webSocket.send(JSON.stringify(sendData))
-      }
-      webSocket.onmessage = function (env) {
-        let data = JSON.parse(env.data)
-        if (data.handle === 'adminAsync') {
-          vueObj.$message({
-            message: data.message,
-            type: data.success ? 'success' : 'error',
-            showClose: !data.success,
-            duration: data.success ? 3000 : 0,
-          })
-          if (store.state.socket.onMessageCallback !== null) {
-            store.state.socket.onMessageCallback()
-          }
+export default {
+  name: 'layout',
+  beforeCreate () {
+    let vueObj = this
+    // 检测用户是否已经登录,如果已经登录则直接跳转到控制台页
+    if (!userInfo.hasLogin()) {
+      this.$router.push('/login')
+      return
+    }
+    // websocket连接
+    let wsServer = WEBSOCKET_HOST
+    let webSocket = new WebSocket(wsServer)
+    store.state.socket.socketObj = webSocket
+    webSocket.onopen = function (evt) {
+      let userId = userInfo.userId()
+      let sendData = {app: 'admin', userId: userId}
+      webSocket.send(JSON.stringify(sendData))
+    }
+    webSocket.onmessage = function (env) {
+      let data = JSON.parse(env.data)
+      if (data.handle === 'adminAsync') {
+        vueObj.$message({
+          message: data.message,
+          type: data.success ? 'success' : 'error',
+          showClose: !data.success,
+          duration: data.success ? 3000 : 0
+        })
+        if (store.state.socket.onMessageCallback !== null) {
+          store.state.socket.onMessageCallback()
         }
-        else if (data.handle === 'adminAsyncPercent') {
-          if (store.state.socket.onMessageCallback !== null) {
-            store.state.socket.onMessageCallback(data)
-          }
+      } else if (data.handle === 'adminAsyncPercent') {
+        if (store.state.socket.onMessageCallback !== null) {
+          store.state.socket.onMessageCallback(data)
         }
-
       }
-      // 获取系统相关信息
-      // network.getData(`site/base-info`).then(response => {
-      //     store.state.baseInfo.decLevels = response.decLevels;
-      //     store.state.baseInfo.empLevels = response.empLevels;
-      //     store.state.baseInfo.adminRoles = response.adminRoles;
-      //     store.state.baseInfo.menu = response.menu;
-      // });
-
-      // 获取地区信息
-      initRegion(this)
-    },
-    mounted() {
-      Waves.init()
-      this.calcTime()
-      Waves.attach('.waves-btn')
-      this.activeNav();
-      this.$nextTick(function () {
-          window.addEventListener('scroll', this.scrollToTop, true);
-      });
-      // 取消菜单a标签的默认动作
-      let allLeftMenuA = document.getElementsByClassName('left-menu-a')
-      for(let i in allLeftMenuA){
-        if(allLeftMenuA[i].onclick){
-          allLeftMenuA[i].onclick = function(e){
-            e.preventDefault()
-          }
+    }
+    // 获取系统相关信息
+    // network.getData(`site/base-info`).then(response => {
+    //     store.state.baseInfo.decLevels = response.decLevels;
+    //     store.state.baseInfo.empLevels = response.empLevels;
+    //     store.state.baseInfo.adminRoles = response.adminRoles;
+    //     store.state.baseInfo.menu = response.menu;
+    // });
+    // 获取地区信息
+    initRegion(this)
+  },
+  mounted () {
+    Waves.init()
+    this.calcTime()
+    Waves.attach('.waves-btn')
+    this.activeNav()
+    this.$nextTick(function () {
+      window.addEventListener('scroll', this.scrollToTop, true)
+    })
+    // 取消菜单a标签的默认动作
+    let allLeftMenuA = document.getElementsByClassName('left-menu-a')
+    for (let i in allLeftMenuA) {
+      if (allLeftMenuA[i].onclick) {
+        allLeftMenuA[i].onclick = function (e) {
+          e.preventDefault()
         }
       }
-
+    }
+  },
+  destroyed () {
+    window.removeEventListener('scroll', this.scrollToTop)
+  },
+  data () {
+    return {
+      isCollapse: false,
+      menuActiveIndex: this.$route.meta.highLight || this.$route.path,
+      mainTitle: this.$route.meta.title,
+      messageShow: false,
+      profileShow: false,
+      adminNameShow: true,
+      menuClass: '',
+      adminName: userInfo.adminName(),
+      nowTime: tool.getTimestamp(),
+      periodNum: baseInfo.nowPeriodNum(),
+      showBackToUp: false
+    }
+  },
+  computed: {
+    nowDateTime: function () {
+      // console.log(this.nowTime)
+      return this.$moment(this.nowTime * 1000).utcOffset('+0100' ).format('YYYY-MM-DD HH:mm:ss') + ' (WAT)'
+      // return tool.formatDate(this.nowTime)
     },
-    destroyed () {
-        window.removeEventListener('scroll', this.scrollToTop);
+    menu: function () {
+      return baseInfo.menu()
     },
-    data() {
-      return {
-        isCollapse: false,
-        menuActiveIndex: this.$route.meta.highLight || this.$route.path,
-        mainTitle: this.$route.meta.title,
-        messageShow: false,
-        profileShow: false,
-        adminNameShow: true,
-        menuClass: '',
-        adminName: userInfo.adminName(),
-        nowTime: tool.getTimestamp(),
-        periodNum: baseInfo.nowPeriodNum(),
-        showBackToUp:false,
+    contentTitle: function () {
+      return this.$route.meta.title
+    },
+    breadcrumb: function () {
+      let breadcrumbArr = []
+      for (let i in this.$route.meta.breadcrumb) {
+        breadcrumbArr.push(this.$route.meta.breadcrumb[i])
       }
+      breadcrumbArr.push({title: this.$route.meta.title, path: ''})
+      return breadcrumbArr
     },
-    computed: {
-      nowDateTime: function () {
-        return tool.formatDate(this.nowTime)
-      },
-      menu: function () {
-        return baseInfo.menu()
-      },
-      contentTitle: function () {
-        return this.$route.meta.title
-      },
-      breadcrumb: function () {
-        let breadcrumbArr = []
-        for (let i in this.$route.meta.breadcrumb) {
-          breadcrumbArr.push(this.$route.meta.breadcrumb[i])
-        }
-        breadcrumbArr.push({title: this.$route.meta.title, path: ''})
-        return breadcrumbArr
-      },
+  },
+  methods: {
+    calcTime () {
+      let obj = this
+      setInterval(function () {
+        obj.nowTime += 1
+      }, 1000)
     },
-    methods: {
-      calcTime() {
-        let obj = this
-        setInterval(function () {
-          obj.nowTime += 1
-        }, 1000)
-      },
-      onMenu() {
-        if (this.isCollapse) {
-          this.isCollapse = false
-          document.getElementsByTagName('body')[0].className = ''
-        } else {
-          this.isCollapse = true
-          document.getElementsByTagName('body')[0].className = 'content-wrapper'
-        }
-      },
-      onMobileMenu() {
-        if (this.menuClass === 'show-menu') {
-          this.menuClass = ''
-        } else {
-          this.menuClass = 'show-menu'
+    onMenu () {
+      if (this.isCollapse) {
+        this.isCollapse = false
+        document.getElementsByTagName('body')[0].className = ''
+      } else {
+        this.isCollapse = true
+        document.getElementsByTagName('body')[0].className = 'content-wrapper'
+      }
+    },
+    onMobileMenu () {
+      if (this.menuClass === 'show-menu') {
+        this.menuClass = ''
+      } else {
+        this.menuClass = 'show-menu'
+      }
+    },
+    onMessage () {
+      this.messageShow = !this.messageShow
+    },
+    onProfile () {
+      this.profileShow = !this.profileShow
+    },
+    onLogout () {
+      userInfo.clear()
+      this.$router.push('/login')
+    },
+    onChangePassword () {
+      this.$router.push('/admin/change-password')
+    },
+    onCloseProfile () {
+      this.profileShow = false
+    },
+    // 点击图片回到顶部方法,加计时器是为了过渡顺滑
+    backTop () {
+      let that = this
+      let timer = setInterval(() => {
+        let _speed = Math.floor(-that.scrollTop / 5)
+        document.documentElement.scrollTop = document.body.scrollTop = that.scrollTop + _speed
+        if (that.scrollTop === 0) {
+          clearInterval(timer)
         }
-      },
-      onMessage() {
-        this.messageShow = !this.messageShow
-      },
-      onProfile() {
-        this.profileShow = !this.profileShow
-      },
-      onLogout() {
-        userInfo.clear()
-        this.$router.push('/login')
-      },
-      onChangePassword() {
-        this.$router.push('/admin/change-password')
-      },
-      onCloseProfile() {
-        this.profileShow = false
-      },
-      // 点击图片回到顶部方法,加计时器是为了过渡顺滑
-      backTop () {
-          let that = this;
-          let timer = setInterval(() => {
-              let _speed = Math.floor(-that.scrollTop / 5);
-              document.documentElement.scrollTop = document.body.scrollTop = that.scrollTop + _speed;
-              if (that.scrollTop === 0) {
-                  clearInterval(timer);
-              }
-          }, 16);
-      },
-      // 为了计算距离顶部的高度,当高度大于60显示回顶部图标,小于60则隐藏
-      scrollToTop () {
-          let that = this,
-              _scrollTop = window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop;
-          that.scrollTop = _scrollTop;
-          if (that.scrollTop > 60) {
-              that.showBackToUp = true;
-          } else {
-              that.showBackToUp = false;
-          }
-      },
-      activeNav(){
-          let currentRouteMeta = this.$route.meta;
-          if(typeof currentRouteMeta['activeRoute'] !== 'undefined'){
-              this.menuActiveIndex = currentRouteMeta['activeRoute'];
-          }else{
-              this.fixedMenuActive();
-          }
-      },
-      fixedMenuActive(){
-          let module = this.$route.matched[1].path;
-          //fixed shop nav
-          // if(module === '/shop') module = '/shop/goods';
-          this.menuActiveIndex = module + '/index';
-      },
+      }, 16)
+    },
+    // 为了计算距离顶部的高度,当高度大于60显示回顶部图标,小于60则隐藏
+    scrollToTop () {
+      let that = this,
+        _scrollTop = window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop
+      that.scrollTop = _scrollTop
+      if (that.scrollTop > 60) {
+        that.showBackToUp = true
+      } else {
+        that.showBackToUp = false
+      }
+    },
+    activeNav () {
+      let currentRouteMeta = this.$route.meta
+      if (typeof currentRouteMeta['activeRoute'] !== 'undefined') {
+        this.menuActiveIndex = currentRouteMeta['activeRoute']
+      } else {
+        this.fixedMenuActive()
+      }
+    },
+    fixedMenuActive () {
+      let module = this.$route.matched[1].path
+      // fixed shop nav
+      // if(module === '/shop') module = '/shop/goods';
+      this.menuActiveIndex = module + '/index'
     }
   }
+}
 </script>
 
 <style>

+ 42 - 26
backendEle/src/views/shop/goods-add.vue

@@ -22,7 +22,15 @@
                     <el-checkbox  v-for="(value,key) in sellType" v-model="form.sellType[key-1]" :key="key" >{{value.name}}</el-checkbox>
                 </el-form-item> -->
                 <el-form-item label="BV split">
-                    <el-checkbox v-model="form.pvSplit"></el-checkbox>
+<!--                    <el-checkbox v-model="form.pvSplit"></el-checkbox>-->
+                  <el-select v-model="form.pvSplit" placeholder="">
+                    <el-option
+                      v-for="item in pvSplitOptions"
+                      :key="item.value"
+                      :label="item.label"
+                      :value="item.value">
+                    </el-option>
+                  </el-select>
                 </el-form-item>
                 <el-form-item label="Product Category"><!-- 商品分类 -->
                     <el-select v-model="form.categoryType" placeholder="">
@@ -95,8 +103,8 @@ export default {
   name: 'goods-add',
   components: {LeoUploader},
   mounted () {
-    this.getData();
-    this.getFileToken();
+    this.getData()
+    this.getFileToken()
   },
   data () {
     return {
@@ -106,16 +114,25 @@ export default {
       loading: false,
       file: null,
       uploadToken: '',
+      pvSplitOptions: [
+        {
+          value: '0',
+          label: 'No'
+        },
+        {
+          value: '1',
+          label: 'Yes'
+        }],
       form: {
         goodsName: '',
         type: '',
-        giftType: [false,false,false,false],
-        sellType: [false,false],
+        giftType: [false, false, false, false],
+        sellType: [false, false],
         goodsNo: '',
         unit: '',
         marketPrice: '',
         sellPrice: '',
-        pvSplit: '',
+        pvSplit: '0',
         pricePv: '',
         point: '',
         storeNums: '',
@@ -127,7 +144,7 @@ export default {
         sellDiscount: '',
         categoryType: '',
         sellPriceStandard: '',
-        taxRate: 0,
+        taxRate: 0
       },
       submitButtonStat: false,
       goodsType: [],
@@ -137,12 +154,12 @@ export default {
       width: '100px',
       height: '100px',
       pvDisabled: true,
-      exchangeRate: baseInfo.exchangeRate(),
+      exchangeRate: baseInfo.exchangeRate()
     }
   },
   watch: {
-    dialogVisible (newVal,oldVal) {
-      console.log(newVal,oldVal)
+    dialogVisible (newVal, oldVal) {
+      console.log(newVal, oldVal)
     },
     // 监听商品分类,控制PV是否展示
     'form.categoryType': {
@@ -150,7 +167,7 @@ export default {
       handler (modern, origin) {
         this.pvDisabled = (parseInt(modern) === 1)
       }
-    },
+    }
     // 监听商品标准价格,自动计算销售价格
     // 'form.sellPriceStandard': {
     //     deep: true,
@@ -161,20 +178,19 @@ export default {
   },
   methods: {
     handleRemove (file) {
-      console.log(file);
+      console.log(file)
     },
     upLoadSuccess (file) {
-      this.form.cover = file;
+      this.form.cover = file
     },
     handlePictureCardPreview (file) {
-      this.dialogImageUrl = file.url;
-      this.dialogVisible = true;
-      this.file = file;
+      this.dialogImageUrl = file.url
+      this.dialogVisible = true
+      this.file = file
       // console.log(file);
-
     },
     handleDownload (file) {
-      console.log(file);
+      console.log(file)
     },
     getFile () {
       let data = {
@@ -184,13 +200,13 @@ export default {
       if (this.uploadToken) {
         network.postData('shop/upload', data)
           .then(response => {
-            console.log(response);
+            console.log(response)
           })
       }
     },
     getFileToken () {
       network.getData('shop/upload').then(response => {
-        this.uploadToken = response;
+        this.uploadToken = response
       })
     },
     getData (page, pageSize) {
@@ -208,7 +224,7 @@ export default {
     },
     addSubmit () {
       this.submitButtonStat = true
-      let path = 'shop/goods-add';
+      let path = 'shop/goods-add'
 
       // let sellType =[]
       // this.form.sellType.map((item,index)=>{
@@ -217,10 +233,10 @@ export default {
       //   }
       // });
 
-      let sen_gift = [];
-      this.form.giftType.map((item,index) => {
+      let sen_gift = []
+      this.form.giftType.map((item, index) => {
         if (item) {
-          sen_gift.push((index+1).toString())
+          sen_gift.push((index + 1).toString())
         }
       })
 
@@ -245,7 +261,7 @@ export default {
         content: this.form.content,
         sort: this.form.sort,
         cover: this.form.cover,
-        taxRate: this.form.taxRate,
+        taxRate: this.form.taxRate
       }
 
       return network.postData(path, postData).then(response => {
@@ -258,7 +274,7 @@ export default {
       }).catch(() => {
         this.submitButtonStat = false
       })
-    },
+    }
     // handleEdit() {
     //   this.dialogEditFormVisible = false
     //   this.$message({

+ 444 - 431
backendEle/src/views/shop/index.vue

@@ -1,460 +1,473 @@
 <template>
-    <div v-loading="loading">
-        <div class="white-box">
-            <div class="filter-box">
-                <filter-user :filter-types="filterTypes" @select-value="handleFilterUser"></filter-user>
-            </div>
-            <el-table class="table-box" ref="multipleTable" :data="tableData" stripe style="width: 100%;" :height="tool.getTableHeight()" @selection-change="handleSelectionChange">
-                 <el-table-column fixed type="selection" width="55" v-if="tableHeaders" :selectable="checkSelectable"></el-table-column>
-                <el-table-column v-for="(tableHeader, key) in tableHeaders" :key="key" :label="tableHeader.header" :width="tableHeader.other.width ? tableHeader.other.width : ''" :prop="tableHeader.other.prop ? tableHeader.other.prop : null">
-                    <template slot-scope="scope">
-                        <template v-if="scope.row[tableHeader.index].other.tag" >
-                            <el-tag :type="scope.row[tableHeader.index].other.tag.type ? scope.row[tableHeader.index].other.tag.type : null" :size="scope.row[tableHeader.index].other.tag.size ? scope.row[tableHeader.index].other.tag.size : null" :class="scope.row[tableHeader.index].other.tag.class ? scope.row[tableHeader.index].other.tag.class : null" >{{scope.row[tableHeader.index].value}}</el-tag>
-                        </template>
-                        <template v-else>
-                            <div v-html="scope.row[tableHeader.index].value"></div>
-                        </template>
-                    </template>
-                </el-table-column>
-                <el-table-column fixed="right" label="Action" width="180"><!-- 操作 -->
-                    <template slot-scope="scope">
-                        <el-dropdown size="small" trigger="click" v-if="permission.hasPermission(`shop/goods-edit`) || permission.hasPermission(`shop/goods-delete`)">
-                            <el-button type="primary" size="small" @click.stop="">
-                              Action<!-- 操作该数据 --><i class="el-icon-arrow-down el-icon--right"></i>
-                            </el-button>
-                            <el-dropdown-menu slot="dropdown">
-                                <el-dropdown-item command="goods-edit" @click.native="handleEditShow(scope.row)">Edit<!-- 修改数据 --> </el-dropdown-item>
-                                <el-dropdown-item command="del" @click.native="handleDel(scope.row.ID)"
-                                                  v-show="permission.hasPermission(`shop/goods-delete`)">Delete<!-- 删除数据 -->
-                                </el-dropdown-item>
-                                <el-dropdown-item command="goods-edit" @click.native="handleGoodUp(scope.row.ID)">On sale<!-- 商品上架 --> </el-dropdown-item>
-                                 <el-dropdown-item command="goods-edit" @click.native="handleGoodDown(scope.row.ID)">Sold out<!-- 商品下架 --> </el-dropdown-item>
-                            </el-dropdown-menu>
-                        </el-dropdown>
-                    </template>
-                </el-table-column>
-             <!--   <el-table-column label="操作">
-                    <template slot-scope="scope">
-                        <el-button type="success" size="small" @click="handleGroupManage(scope.row)" >
-                            状态管理
-                        </el-button>
-                    </template></el-table-column>-->
-
-            </el-table>
-            <div class="white-box-footer">
-
-               <!-- <el-dropdown size="small" trigger="click">
-                    <el-button type="primary" size="small">
-                        所选数据<i class="el-icon-arrow-down el-icon&#45;&#45;right"></i>
-                    </el-button>
-                    <el-dropdown-menu slot="dropdown">
-                        <el-dropdown-item command="delete" @click.native="handleMuliDel()">上架</el-dropdown-item>
-                    </el-dropdown-menu>
-                </el-dropdown>-->
-                <el-button type="primary" size="small" @click="handlestate" icon="el-icon-plus"
-                           v-if="permission.hasPermission(`shop/goods-add`)"><!-- 商品添加 -->Add Product
-                </el-button>
+  <div v-loading="loading">
+    <div class="white-box">
+      <div class="filter-box">
+          <filter-user :filter-types="filterTypes" @select-value="handleFilterUser"></filter-user>
+      </div>
+      <el-table class="table-box" ref="multipleTable" :data="tableData" stripe style="width: 100%;" :height="tool.getTableHeight()" @selection-change="handleSelectionChange">
+        <el-table-column fixed type="selection" width="55" v-if="tableHeaders" :selectable="checkSelectable"></el-table-column>
+        <el-table-column v-for="(tableHeader, key) in tableHeaders" :key="key" :label="tableHeader.header" :width="tableHeader.other.width ? tableHeader.other.width : ''" :prop="tableHeader.other.prop ? tableHeader.other.prop : null">
+          <template slot-scope="scope">
+            <template v-if="scope.row[tableHeader.index].other.tag" >
+              <el-tag :type="scope.row[tableHeader.index].other.tag.type ? scope.row[tableHeader.index].other.tag.type : null" :size="scope.row[tableHeader.index].other.tag.size ? scope.row[tableHeader.index].other.tag.size : null" :class="scope.row[tableHeader.index].other.tag.class ? scope.row[tableHeader.index].other.tag.class : null" >{{scope.row[tableHeader.index].value}}</el-tag>
+            </template>
+            <template v-else>
+              <div v-html="scope.row[tableHeader.index].value"></div>
+            </template>
+          </template>
+        </el-table-column>
+        <el-table-column fixed="right" label="Action" width="180"><!-- 操作 -->
+          <template slot-scope="scope">
+            <el-dropdown size="small" trigger="click" v-if="permission.hasPermission(`shop/goods-edit`) || permission.hasPermission(`shop/goods-delete`)">
+              <el-button type="primary" size="small" @click.stop="">
+                Action<!-- 操作该数据 --><i class="el-icon-arrow-down el-icon--right"></i>
+              </el-button>
+              <el-dropdown-menu slot="dropdown">
+                <el-dropdown-item command="goods-edit" @click.native="handleEditShow(scope.row)">Edit<!-- 修改数据 --> </el-dropdown-item>
+                <el-dropdown-item command="del" @click.native="handleDel(scope.row.ID)" v-show="permission.hasPermission(`shop/goods-delete`)">
+                  Delete<!-- 删除数据 -->
+                </el-dropdown-item>
+                <el-dropdown-item command="goods-edit" @click.native="handleGoodUp(scope.row.ID)">On sale<!-- 商品上架 --> </el-dropdown-item>
+                <el-dropdown-item command="goods-edit" @click.native="handleGoodDown(scope.row.ID)">Sold out<!-- 商品下架 --> </el-dropdown-item>
+              </el-dropdown-menu>
+            </el-dropdown>
+          </template>
+        </el-table-column>
+        <!--   <el-table-column label="操作">
+          <template slot-scope="scope">
+            <el-button type="success" size="small" @click="handleGroupManage(scope.row)" >
+              状态管理
+            </el-button>
+          </template></el-table-column>-->
+      </el-table>
+      <div class="white-box-footer">
 
-                <el-button type="success" size="small" @click="handleExport" v-show="permission.hasPermission(`shop/goods-list-export`)">Export Excel</el-button>
-                <!-- <el-button-group>
-                    <el-button type="success" size="mini" @click.native="handleup(scope.row.ID)">上架</el-button>
-                    <el-button type="danger" size="mini">下架</el-button>
-                </el-button-group> -->
-                <pagination :total="totalCount" :page_size="pageSize" @size-change="handleSizeChange" @current-change="handleCurrentChange"></pagination>
-            </div>
-        </div>
-        <el-dialog title="Edit Products" :visible.sync="dialogEditFormVisible"><!-- 修改商品 -->
-            <el-form :model="form" label-width="250px" class="form-dialog" v-loading="dialogEditLoading">
+       <!-- <el-dropdown size="small" trigger="click">
+            <el-button type="primary" size="small">
+                所选数据<i class="el-icon-arrow-down el-icon&#45;&#45;right"></i>
+            </el-button>
+            <el-dropdown-menu slot="dropdown">
+                <el-dropdown-item command="delete" @click.native="handleMuliDel()">上架</el-dropdown-item>
+            </el-dropdown-menu>
+        </el-dropdown>-->
+        <el-button type="primary" size="small" @click="handlestate" icon="el-icon-plus" v-if="permission.hasPermission(`shop/goods-add`)">
+          <!-- 商品添加 -->Add Product
+        </el-button>
 
-
-                    <el-form-item label="Product Name"><!-- 商品名称 -->
-                        <el-input v-model="form.goodsName"></el-input>
-                    </el-form-item>
-                    <!-- <el-form-item label="商品来源">
-                        <el-select v-model="form.type">
-                            <el-option v-for="(item,index) in goodsType" :key="index" :label="item.name"
-                                       :value="index"></el-option>
-                        </el-select>
-                    </el-form-item> -->
-                    <el-form-item label="Member discount"><!-- 会员折扣 -->
-                        <el-input v-model="form.sellDiscount"></el-input>
-                    </el-form-item>
-                    <el-form-item label="Product type"><!-- 商品类型 -->
-                        <el-checkbox  v-for="(value,index) in GiftTypeArr" v-model="value.checked" :key="index" >{{value.name}}</el-checkbox>
-                    </el-form-item>
-                    <!-- <el-form-item label="复消购买方式">
-                         <el-checkbox  v-for="(value,index) in sell_type" v-model="value.checked" :key="index" >{{value.name}}</el-checkbox>
-                    </el-form-item> -->
-                    <el-form-item label="BV split">
-                      <el-checkbox v-model="form.pvSplit" :checked="form.pvSplit">Yes</el-checkbox>
-                    </el-form-item>
-                    <el-form-item label="Product Category"> <!-- 商品分类 -->
-                        <el-select v-model="form.categoryType">
-                            <el-option v-for="item in categoryType" :key="item.id" :label="item.name" :value="item.id" ></el-option>
-                        </el-select>
-                    </el-form-item>
-                    <el-form-item label="Product Code"><!-- 商品编号 -->
-                        <el-input v-model="form.goodsNo"></el-input>
-                    </el-form-item>
-                    <el-form-item label="Unit"><!-- 单位 -->
-                        <el-input v-model="form.unit"></el-input>
-                    </el-form-item>
-                    <el-form-item label="Tax Rate"><!-- 税率 -->
-                      <el-input v-model="form.taxRate">
-                        <template slot="append">%</template>
-                      </el-input>
-                    </el-form-item>
-                    <el-form-item label="US Price($)" p>
-                        <el-input v-model="form.sellPriceStandard"></el-input>
-                    </el-form-item>
-                    <el-form-item label="Sales Price(₦)" p>
-                        <el-input v-model="form.sellPrice"></el-input>
-                    </el-form-item>
-                    <el-form-item label="Market Price(₦)">
-                      <el-input v-model="form.marketPrice"></el-input>
-                    </el-form-item>
-                    <el-form-item label="Price BV" v-show="pvDisabled"> <!-- 价格BV -->
-                        <el-input v-model="form.pricePv"></el-input>
-                    </el-form-item>
+        <el-button type="success" size="small" @click="handleExport" v-show="permission.hasPermission(`shop/goods-list-export`)">Export Excel</el-button>
+        <!-- <el-button-group>
+          <el-button type="success" size="mini" @click.native="handleup(scope.row.ID)">上架</el-button>
+          <el-button type="danger" size="mini">下架</el-button>
+        </el-button-group> -->
+        <pagination :total="totalCount" :page_size="pageSize" @size-change="handleSizeChange" @current-change="handleCurrentChange"></pagination>
+      </div>
+    </div>
+    <el-dialog title="Edit Products" :visible.sync="dialogEditFormVisible"><!-- 修改商品 -->
+      <el-form :model="form" label-width="250px" class="form-dialog" v-loading="dialogEditLoading">
+        <el-form-item label="Product Name"><!-- 商品名称 -->
+          <el-input v-model="form.goodsName"></el-input>
+        </el-form-item>
+          <!-- <el-form-item label="商品来源">
+            <el-select v-model="form.type">
+                <el-option v-for="(item,index) in goodsType" :key="index" :label="item.name"
+                           :value="index"></el-option>
+            </el-select>
+          </el-form-item> -->
+          <el-form-item label="Member discount"><!-- 会员折扣 -->
+            <el-input v-model="form.sellDiscount"></el-input>
+          </el-form-item>
+          <el-form-item label="Product type"><!-- 商品类型 -->
+            <el-checkbox  v-for="(value,index) in GiftTypeArr" v-model="value.checked" :key="index" >{{value.name}}</el-checkbox>
+          </el-form-item>
+          <!-- <el-form-item label="复消购买方式">
+             <el-checkbox  v-for="(value,index) in sell_type" v-model="value.checked" :key="index" >{{value.name}}</el-checkbox>
+          </el-form-item> -->
+          <el-form-item label="BV split">
+<!--                      <el-checkbox v-model="form.pvSplit" :checked="form.pvSplit">Yes</el-checkbox>-->
+            <el-select v-model="form.pvSplit" placeholder="">
+              <el-option
+                v-for="item in pvSplitOptions"
+                :key="item.value"
+                :label="item.label"
+                :value="item.value">
+              </el-option>
+            </el-select>
+          </el-form-item>
+          <el-form-item label="Product Category"> <!-- 商品分类 -->
+            <el-select v-model="form.categoryType">
+              <el-option v-for="item in categoryType" :key="item.id" :label="item.name" :value="item.id" ></el-option>
+            </el-select>
+          </el-form-item>
+          <el-form-item label="Product Code"><!-- 商品编号 -->
+            <el-input v-model="form.goodsNo"></el-input>
+          </el-form-item>
+          <el-form-item label="Unit"><!-- 单位 -->
+            <el-input v-model="form.unit"></el-input>
+          </el-form-item>
+          <el-form-item label="Tax Rate"><!-- 税率 -->
+            <el-input v-model="form.taxRate">
+              <template slot="append">%</template>
+            </el-input>
+          </el-form-item>
+          <el-form-item label="US Price($)" p>
+            <el-input v-model="form.sellPriceStandard"></el-input>
+          </el-form-item>
+          <el-form-item label="Sales Price(₦)" p>
+            <el-input v-model="form.sellPrice"></el-input>
+          </el-form-item>
+          <el-form-item label="Market Price(₦)">
+            <el-input v-model="form.marketPrice"></el-input>
+          </el-form-item>
+          <el-form-item label="Price BV" v-show="pvDisabled"> <!-- 价格BV -->
+            <el-input v-model="form.pricePv"></el-input>
+          </el-form-item>
 <!--                    <el-form-item label="Exchange points" v-show="false"> &lt;!&ndash; 兑换积分 &ndash;&gt;-->
 <!--                        <el-input v-model="form.point"></el-input>-->
 <!--                    </el-form-item>-->
-                    <el-form-item label="Inventory"> <!-- 库存 -->
-                        <el-input v-model="form.storeNums"></el-input>
-                    </el-form-item>
-                    <el-form-item label="Product details"><!-- 商品详情 -->
-                        <el-input
-                                type="textarea"
-                                :rows="2"
-                                placeholder="Please enter the content"
-                                v-model="form.content">
-                        </el-input><!-- 请输入内容 -->
-                    </el-form-item>
-                    <el-form-item label="Order"> <!-- 排序 -->
-                        <el-input v-model="form.sort"></el-input>
-                    </el-form-item>
-
-                    <el-form-item label="Upload Images"> <!-- 上传图片 -->
-                       <div class='up_load'>
-                           <!-- <img v-if="form.cover&&img_show" :src="form.cover" alt=""> -->
-                            <leo-uploader
-                                @on-success='upLoadSuccess'
-                                :request-route="'shop/upload'"
-                                ref='up_load'
-                                :defaultImageUrl='form.cover'
-                            ></leo-uploader>
-                        </div>
-                    </el-form-item>
-
+          <el-form-item label="Inventory"> <!-- 库存 -->
+            <el-input v-model="form.storeNums"></el-input>
+          </el-form-item>
+          <el-form-item label="Product details"><!-- 商品详情 -->
+            <el-input
+              type="textarea"
+              :rows="2"
+              placeholder="Please enter the content"
+              v-model="form.content">
+            </el-input><!-- 请输入内容 -->
+          </el-form-item>
+          <el-form-item label="Order"> <!-- 排序 -->
+            <el-input v-model="form.sort"></el-input>
+          </el-form-item>
 
-
-            </el-form>
-            <div slot="footer" class="dialog-footer">
-                <el-button @click="dialogEditFormVisible = false">Cancel<!-- 取 消 --></el-button>
-                <el-button type="primary" @click.native="handleEdit">Edit<!-- 修 改 --></el-button>
+          <el-form-item label="Upload Images"> <!-- 上传图片 -->
+            <div class='up_load'>
+           <!-- <img v-if="form.cover&&img_show" :src="form.cover" alt=""> -->
+              <leo-uploader
+                  @on-success='upLoadSuccess'
+                  :request-route="'shop/upload'"
+                  ref='up_load'
+                  :defaultImageUrl='form.cover'
+              ></leo-uploader>
             </div>
-        </el-dialog>
-    </div>
+          </el-form-item>
+
+        </el-form>
+        <div slot="footer" class="dialog-footer">
+          <el-button @click="dialogEditFormVisible = false">Cancel<!-- 取 消 --></el-button>
+          <el-button type="primary" @click.native="handleEdit">Edit<!-- 修 改 --></el-button>
+        </div>
+    </el-dialog>
+  </div>
 </template>
 
 <script>
-    import network from '@/utils/network'
-    import tool from '@/utils/tool'
-    import baseInfo from '@/utils/baseInfo'
-    import FilterUser from '../../components/FilterUser'
-    import permission from '@/utils/permission'
-    import Pagination from '@/components/Pagination'
-    import filterHelper from '@/utils/filterHelper'
-    import {FRONTEND_SERVER,SERVER_API_HTTP_TYPE,SERVER_API_DOMAIN,CDN_BASE_URL} from '@/utils/config'
-    import store from './../../utils/vuexStore'
-     import LeoUploader from '@/components/Uploader';
-    export default {
-        name: 'index',
-        components: {FilterUser,Pagination,LeoUploader},
-        mounted () {
-            this.getData();
-            // this.$refs.up_load.successImageUrl='';
-        },
+import network from '@/utils/network'
+import tool from '@/utils/tool'
+import baseInfo from '@/utils/baseInfo'
+import FilterUser from '../../components/FilterUser'
+import permission from '@/utils/permission'
+import Pagination from '@/components/Pagination'
+import filterHelper from '@/utils/filterHelper'
+import {FRONTEND_SERVER,SERVER_API_HTTP_TYPE,SERVER_API_DOMAIN,CDN_BASE_URL} from '@/utils/config'
+import store from './../../utils/vuexStore'
+import LeoUploader from '@/components/Uploader';
+export default {
+  name: 'index',
+  components: {FilterUser, Pagination, LeoUploader},
+  mounted () {
+    this.getData()
+    // this.$refs.up_load.successImageUrl='';
+  },
 
-        data () {
-            return {
-                tableHeaders: null,
-                tableData: null,
-                loading: true,
-                currentPage: 1,
-                totalPages: 1,
-                totalCount: 1,
-                pageSize: 20,
-                multipleSelection: [],
-                tool: tool,
-                permission: permission,
-                baseDecLevels: baseInfo.decLevels(),
-                baseEmpLevels: baseInfo.empLevels(),
-                filterTypes: null,
-                dialogVisible: false,
-                dialogLoading: false,
-                filterModel: {},
-                value:[],
-                selectedIds:'',
-                dialogEditFormVisible: false,
-                dialogEditLoading: false,
-                form:{
-                    // sellType:[],
-                    goodsName:'',
-                    type:'',
-                    giftType:[],
-                    goodsNo:'',
-                    unit:'',
-                    marketPrice:'',
-                    sellPrice:'',
-                    sellPriceStandard: '',
-                    pricePv:'',
-                    point:'',
-                    storeNums:'',
-                    content:'',
-                    sort:'',
-                    discount:'',
-                    cover:'',
-                    textarea:'',
-                    sellDiscount:'',
-                    pvSplit:'',
-                    categoryType: '',
-                    sellType: 1,
-                    taxRate: 0,
-                },
-                submitButtonStat: false,
-                goodsType:[],
-                GiftTypeArr:[],
-                sell_type:[],
-                categoryType: [],
-                img_show:true,
-                pvDisabled: true,
-                exchangeRate: baseInfo.exchangeRate(),
-            }
+  data () {
+    return {
+      tableHeaders: null,
+      tableData: null,
+      loading: true,
+      currentPage: 1,
+      totalPages: 1,
+      totalCount: 1,
+      pageSize: 20,
+      multipleSelection: [],
+      tool: tool,
+      permission: permission,
+      baseDecLevels: baseInfo.decLevels(),
+      baseEmpLevels: baseInfo.empLevels(),
+      filterTypes: null,
+      dialogVisible: false,
+      dialogLoading: false,
+      filterModel: {},
+      value: [],
+      selectedIds: '',
+      dialogEditFormVisible: false,
+      dialogEditLoading: false,
+      pvSplitOptions: [
+        {
+          value: '0',
+          label: 'No'
         },
-        methods: {
-            handleSelectionChange(val) {
-                this.multipleSelection = val
-            },
-            handleCurrentChange (page) {
-                this.getData(page, this.pageSize)
-            },
-            handleSizeChange (pageSize) {
-                this.getData(this.currentPage, pageSize)
-            },
-            handleFilterUser(filterData){
-                filterHelper.handleFilterUser(this, filterData)
-            },
-            checkSelectable(row) {
-                return row.DONT_DEL !== '1'
-            },
-            handleFilter() {
-                this.getData()
-            },
-            handlestate(){
-                this.$router.push({path: `/shop/goods-add`})
-            },
-            upLoadSuccess(file){
-                // this.form.cover=file;
-                this.form.cover = tool.getArImage(file, '/files/');
-                this.form.coverOrigin = file
-                this.img_show=false;
-            },
-            handleEditShow(row) {
-                this.dialogEditLoading = true
-                this.auditId = row.ID
-                this.dialogEditFormVisible = true
-                let vueObj = this
-                network.getData('shop/goods-edit', {id: this.auditId}).then(response => {
-                    vueObj.dialogEditLoading = false
-                    vueObj.goodsType=response.goodsType
-                    vueObj.categoryType = response.categoryType
+        {
+          value: '1',
+          label: 'Yes'
+        }],
+      form: {
+        // sellType: [],
+        goodsName: '',
+        type: '',
+        giftType: [],
+        goodsNo: '',
+        unit: '',
+        marketPrice: '',
+        sellPrice: '',
+        sellPriceStandard: '',
+        pricePv: '',
+        point: '',
+        storeNums: '',
+        content: '',
+        sort: '',
+        discount: '',
+        cover: '',
+        textarea: '',
+        sellDiscount: '',
+        pvSplit: '',
+        categoryType: '',
+        sellType: 1,
+        taxRate: 0
+      },
+      submitButtonStat: false,
+      goodsType: [],
+      GiftTypeArr: [],
+      sell_type: [],
+      categoryType: [],
+      img_show: true,
+      pvDisabled: true,
+      exchangeRate: baseInfo.exchangeRate()
+    }
+  },
+  methods: {
+    handleSelectionChange (val) {
+      this.multipleSelection = val
+    },
+    handleCurrentChange (page) {
+      this.getData(page, this.pageSize)
+    },
+    handleSizeChange (pageSize) {
+      this.getData(this.currentPage, pageSize)
+    },
+    handleFilterUser (filterData) {
+      filterHelper.handleFilterUser(this, filterData)
+    },
+    checkSelectable (row) {
+      return row.DONT_DEL !== '1'
+    },
+    handleFilter () {
+      this.getData()
+    },
+    handlestate () {
+      this.$router.push({path: `/shop/goods-add`})
+    },
+    upLoadSuccess (file) {
+      // this.form.cover=file;
+      this.form.cover = tool.getArImage(file, '/files/')
+      this.form.coverOrigin = file
+      this.img_show = false
+    },
+    handleEditShow (row) {
+      this.dialogEditLoading = true
+      this.auditId = row.ID
+      this.dialogEditFormVisible = true
+      let vueObj = this
+      network.getData('shop/goods-edit', {id: this.auditId}).then(response => {
+        vueObj.dialogEditLoading = false
+        vueObj.goodsType = response.goodsType
+        vueObj.categoryType = response.categoryType
 
-                    let gift=response.goodsInfo.GIFT_TYPE;
-                    let gift_type=response.giftType;
+        let gift = response.goodsInfo.GIFT_TYPE;
+        let gift_type = response.giftType
 
-                    let giftType=[];
-                    if(gift.length>0){
-                        for(let i in gift_type){
-                            giftType.push({key:i,name:gift_type[i].name,checked:false})
-                            gift.map((v,k)=>{
-                                if(v==i){
-                                    giftType[i-1].checked=true;
-                                }
-                            })
-                        }
-                    }
-                    vueObj.GiftTypeArr=giftType
+        let giftType = []
+        if (gift.length > 0) {
+          for (let i in gift_type) {
+            giftType.push({key: i, name: gift_type[i].name, checked: false})
+            gift.map((v, k) => {
+              if (v === i) {
+                giftType[i - 1].checked = true
+              }
+            })
+          }
+        }
+        vueObj.GiftTypeArr = giftType
 
-                    // let sell=response.goodsInfo.SELL_TYPE;
-                    // let sell_type=response.sellType;
-                    // let sellType=[];
-                    // if(sell.length>0){
-                    //     for(let i in sell_type){
-                    //         sellType.push({key:i,name:sell_type[i].name,checked:false})
-                    //         sell.map((item,index)=>{
-                    //             if(item==i){
-                    //                 sellType[i-1].checked=true;
-                    //             }
-                    //         })
-                    //     }
-                    // }
-                    vueObj.sell_type=response.goodsInfo.SELL_TYPE;
-                    vueObj.form.goodsName=response.goodsInfo.GOODS_NAME
-                    vueObj.form.sellDiscount=response.goodsInfo.SELL_DISCOUNT
-                    vueObj.form.goodsNo=response.goodsInfo.GOODS_NO
-                    vueObj.form.type=response.goodsInfo.TYPE
-                    vueObj.form.unit=response.goodsInfo.UNIT
-                    vueObj.form.marketPrice=response.goodsInfo.MARKET_PRICE
-                    vueObj.form.sellPrice=response.goodsInfo.SELL_PRICE
-                    vueObj.form.sellPriceStandard=response.goodsInfo.SELL_PRICE_STANDARD
-                    vueObj.form.pricePv=response.goodsInfo.PRICE_PV
-                    vueObj.form.point=response.goodsInfo.POINT
-                    vueObj.form.storeNums=response.goodsInfo.STORE_NUMS
-                    vueObj.form.content=response.goodsInfo.CONTENT
-                    vueObj.form.sort=response.goodsInfo.SORT
-                    vueObj.form.id=response.goodsInfo.ID
-                    // vueObj.form.cover=response.goodsInfo.COVER
-                    vueObj.form.categoryType=parseInt(response.goodsInfo.CATEGORY_TYPE)
-                    vueObj.form.taxRate=response.goodsInfo.TAX_RATE
-                    // vueObj.form.sellType=vueObj.form.sellType.map((item,index)=>{
-                    //   return response.goodsInfo.SELL_TYPE.some(val=>(index+1).toString()==val)
-                    //   })
+        // let sell = response.goodsInfo.SELL_TYPE;
+        // let sell_type = response.sellType;
+        // let sellType=[];
+        // if(sell.length>0){
+        //     for(let i in sell_type){
+        //         sellType.push({key:i,name:sell_type[i].name,checked:false})
+        //         sell.map((item,index)=>{
+        //             if(item==i){
+        //                 sellType[i-1].checked=true;
+        //             }
+        //         })
+        //     }
+        // }
+        vueObj.sell_type = response.goodsInfo.SELL_TYPE;
+        vueObj.form.goodsName = response.goodsInfo.GOODS_NAME
+        vueObj.form.sellDiscount = response.goodsInfo.SELL_DISCOUNT
+        vueObj.form.goodsNo = response.goodsInfo.GOODS_NO
+        vueObj.form.type = response.goodsInfo.TYPE
+        vueObj.form.unit = response.goodsInfo.UNIT
+        vueObj.form.marketPrice = response.goodsInfo.MARKET_PRICE
+        vueObj.form.sellPrice = response.goodsInfo.SELL_PRICE
+        vueObj.form.sellPriceStandard = response.goodsInfo.SELL_PRICE_STANDARD
+        vueObj.form.pricePv = response.goodsInfo.PRICE_PV
+        vueObj.form.point = response.goodsInfo.POINT
+        vueObj.form.storeNums = response.goodsInfo.STORE_NUMS
+        vueObj.form.content = response.goodsInfo.CONTENT
+        vueObj.form.sort = response.goodsInfo.SORT
+        vueObj.form.id = response.goodsInfo.ID
+        vueObj.form.pvSplit = response.goodsInfo.PV_SPLIT
+        // vueObj.form.cover = response.goodsInfo.COVER
+        vueObj.form.categoryType = parseInt(response.goodsInfo.CATEGORY_TYPE)
+        vueObj.form.taxRate = response.goodsInfo.TAX_RATE
+        // vueObj.form.sellType=vueObj.form.sellType.map((item,index)=>{
+        //   return response.goodsInfo.SELL_TYPE.some(val=>(index+1).toString()==val)
+        //   })
 
-                    vueObj.form.coverOrigin = response.goodsInfo.COVER
-                    vueObj.form.cover = tool.getArImage(response.goodsInfo.COVER, '/files/');
+        vueObj.form.coverOrigin = response.goodsInfo.COVER
+        vueObj.form.cover = tool.getArImage(response.goodsInfo.COVER, '/files/')
 
-                    this.$forceUpdate()
-                })
-            },
-            handleEdit() {
-                this.dialogEditFormVisible = false
-                this.$message({
-                    message: 'Modifying data',//正在修改数据
-                    type: 'info'
-                })
-                let path = 'shop/goods-edit'
+        this.$forceUpdate()
+      })
+    },
+    handleEdit () {
+      this.dialogEditFormVisible = false
+      this.$message({
+        message: 'Modifying data', // 正在修改数据
+        type: 'info'
+      })
+      let path = 'shop/goods-edit'
 
-                // let sen_sell=[];
-                // this.sell_type.map((item,index)=>{
-                //     if(item.checked){
-                //         sen_sell.push(item.key);
-                //     }
-                // })
-                // this.form.sellType=sen_sell;
+      // let sen_sell=[];
+      // this.sell_type.map((item,index)=>{
+      //     if(item.checked){
+      //         sen_sell.push(item.key);
+      //     }
+      // })
+      // this.form.sellType=sen_sell;
 
-                let sen_gift=[];
-                this.GiftTypeArr.map((item,index)=>{
-                    if(item.checked){
-                        sen_gift.push(item.key);
-                    }
-                })
-                this.form.giftType=sen_gift;
-                this.form.sellType = 1
-                this.form.cover = this.form.coverOrigin;
-                delete this.form.coverOrigin;
+      let sen_gift = []
+      this.GiftTypeArr.map((item, index) => {
+        if (item.checked) {
+          sen_gift.push(item.key)
+        }
+      })
+      this.form.giftType = sen_gift
+      this.form.sellType = 1
+      this.form.cover = this.form.coverOrigin
+      delete this.form.coverOrigin
 
-                network.postData(path, {...this.form}).then(response => {
-                    this.$message({
-                        message: response,
-                        type: 'success'
-                    })
-                    this.getData(this.currentPage, this.pageSize)
-                }).catch(response => {
-                })
-            },
+      network.postData(path, {...this.form}).then(response => {
+        this.$message({
+          message: response,
+          type: 'success'
+        })
+        this.getData(this.currentPage, this.pageSize)
+      }).catch(response => {
+      })
+    },
 
-            handleDel(id = null) {
-                let obj = this
-                this.$confirm('Determine to delete the selected data?', 'Hint', {//'确定删除选定的数据?', '提示'
-                    confirmButtonText: 'Confirm',//确定
-                    cancelButtonText: 'Cancel',//取消
-                    type: 'warning'
-                }).then(() => {
-                    let selectedIds = []
-                    if (id === null) {
-                        for (let val of obj.multipleSelection) {
-                            selectedIds.push(val.ID)
-                        }
-                    } else {
-                        selectedIds.push(id)
-                    }
-                    return network.postData(`shop/goods-delete`, {
-                        selected: selectedIds
-                    })
-                }).then(response => {
-                    this.$message({
-                        message: response,
-                        type: 'success'
-                    })
-                    obj.getData(obj.currentPage, obj.pageSize)
-                }).catch(response => {
+    handleDel (id = null) {
+      let obj = this
+      this.$confirm('Determine to delete the selected data?', 'Hint', { // '确定删除选定的数据?', '提示'
+        confirmButtonText: 'Confirm', // 确定
+        cancelButtonText: 'Cancel', // 取消
+        type: 'warning'
+      }).then(() => {
+        let selectedIds = []
+        if (id === null) {
+          for (let val of obj.multipleSelection) {
+            selectedIds.push(val.ID)
+          }
+        } else {
+          selectedIds.push(id)
+        }
+        return network.postData(`shop/goods-delete`, {
+          selected: selectedIds
+        })
+      }).then(response => {
+        this.$message({
+          message: response,
+          type: 'success'
+        })
+        obj.getData(obj.currentPage, obj.pageSize)
+      }).catch(response => {
 
-                })
-            },
-            getData (page, pageSize) {
-                let filterData = this.filterModel
-                /*this.allData = response*/
-                network.getPageData(this, 'shop/index', page, pageSize, this.filterModel, response => {
-                    this.filterTypes = response.filterTypes
-                })
-            },
-            handleGoodUp(id){
-                console.log(id);
-                network.postData('shop/goods-status',{selectedIds:id,status:1})
-                .then(response=>{
-                    this.$message({
-                        message: response,
-                        type: 'success'
-                    })
-                    this.getData(this.currentPage, this.pageSize)
-                })
-            },
-            handleGoodDown(id){
-                network.postData('shop/goods-status',{selectedIds:id,status:0})
-                .then(response=>{
-                    this.$message({
-                        message: response,
-                        type: 'success'
-                    })
-                    this.getData(this.currentPage, this.pageSize)
-                })
-            },
+      })
+    },
+    getData (page, pageSize) {
+      let filterData = this.filterModel
+      /* this.allData = response */
+      network.getPageData(this, 'shop/index', page, pageSize, this.filterModel, response => {
+        this.filterTypes = response.filterTypes
+      })
+    },
+    handleGoodUp (id) {
+      console.log(id)
+      network.postData('shop/goods-status', {selectedIds: id, status: 1})
+        .then(response => {
+          this.$message({
+            message: response,
+            type: 'success'
+          })
+          this.getData(this.currentPage, this.pageSize)
+        })
+    },
+    handleGoodDown (id) {
+      network.postData('shop/goods-status', {selectedIds: id, status: 0})
+        .then(response => {
+          this.$message({
+            message: response,
+            type: 'success'
+          })
+          this.getData(this.currentPage, this.pageSize)
+        })
+    },
 
-            handleExport(){
-                this.$confirm(`Determine to export the selected data?`, 'Hint', {//确定要导出当前数据吗?`, '提示'
-                    confirmButtonText: 'Confirm',//确定
-                    cancelButtonText: 'Cancel',//取消
-                    type: 'warning'
-                }).then(() => {
-                    return network.getData(`shop/goods-list-export`, this.filterModel)
-                }).then(response => {
-                    this.$message({
-                        message: response,
-                        type: 'success'
-                    })
-                }).catch(response => {
+    handleExport () {
+      this.$confirm(`Determine to export the selected data?`, 'Hint', { // 确定要导出当前数据吗?`, '提示'
+        confirmButtonText: 'Confirm', // 确定
+        cancelButtonText: 'Cancel', // 取消
+        type: 'warning'
+      }).then(() => {
+        return network.getData(`shop/goods-list-export`, this.filterModel)
+      }).then(response => {
+        this.$message({
+          message: response,
+          type: 'success'
+        })
+      }).catch(response => {
 
-                })
-            },
-        },
-        watch:{
-            // 监听商品分类,控制PV是否展示
-            'form.categoryType': {
-                deep: true,
-                handler(modern, origin) {
-                    this.pvDisabled = (parseInt(modern) === 1)
-                }
-            },
-            // // 监听商品标准价格,自动计算销售价格
-            // 'form.sellPriceStandard': {
-            //     deep: true,
-            //     handler(modern, origin) {
-            //         this.form.sellPrice = modern * this.exchangeRate
-            //     }
-            // },
-        },
+      })
+    }
+  },
+  watch: {
+    // 监听商品分类,控制PV是否展示
+    'form.categoryType': {
+      deep: true,
+      handler (modern, origin) {
+        this.pvDisabled = (parseInt(modern) === 1)
+      }
     }
+    // // 监听商品标准价格,自动计算销售价格
+    // 'form.sellPriceStandard': {
+    //     deep: true,
+    //     handler(modern, origin) {
+    //         this.form.sellPrice = modern * this.exchangeRate
+    //     }
+    // },
+  }
+}
 
 </script>
 

+ 3 - 2
common/helpers/bonus/PerfCalc.php

@@ -72,6 +72,7 @@ class PerfCalc {
     const LOOP_CONTINUE = 2;
 
     const ORDER_PAY_TYPE_CASH = 'cash';
+    const ORDER_PAY_TYPE_STACK = 'pay_stack'; // pay_stack支付方式
 //    const ORDER_PAY_TYPE_POINT = 'point';
 
     /**
@@ -745,7 +746,7 @@ class PerfCalc {
                 }
 
                 //如果支付方式是现金,那么实际业绩是支付PV的50%
-                if( $data['PAY_TYPE'] === self::ORDER_PAY_TYPE_CASH ) {
+                if( $data['PAY_TYPE'] === self::ORDER_PAY_TYPE_CASH || $data['PAY_TYPE'] === self::ORDER_PAY_TYPE_STACK) {
                     $orderCashAmount = $data['ORDER_AMOUNT'];
                     //111期开始由50%改为60%-by 2020-04-30修改
                     $payPv = $data['PAY_PV'] * $this->_sysConfig['cashReconsumeBonusPercent']['VALUE'] / 100;
@@ -870,7 +871,7 @@ class PerfCalc {
                 }
 
                 //如果支付方式是现金,那么实际业绩是支付PV的50%
-                if( $data['PAY_TYPE'] === self::ORDER_PAY_TYPE_CASH ) {
+                if( $data['PAY_TYPE'] === self::ORDER_PAY_TYPE_CASH || $data['PAY_TYPE'] === self::ORDER_PAY_TYPE_STACK) {
                     $orderCashAmount = $data['ORDER_AMOUNT'];
                     //111期开始由50%改为60%-by 2020-04-30修改
                     $payPv = $data['PAY_PV'] * $this->_sysConfig['cashReconsumeBonusPercent']['VALUE'] / 100;

+ 7 - 2
common/models/forms/OrderForm.php

@@ -426,8 +426,13 @@ class OrderForm extends Model
      *
      */
     private function _pvSplit($oPv){
-        $currentPv = $oPv % 30 + 30;
-        $remainPv = $oPv - $currentPv;
+        if($oPv>60){
+            $currentPv = $oPv % 30 + 30;
+            $remainPv = $oPv - $currentPv;
+        }else{
+            $currentPv = $oPv;
+            $remainPv = 0;
+        }
         return [
             'current' => $currentPv,
             'remain' => $remainPv