Преглед изворни кода

销售管理新增销量排行

qymljy пре 2 година
родитељ
комит
9a729de90b

+ 8 - 2
src/Form/payvoucher/add.vue

@@ -39,7 +39,7 @@
               </el-form-item>
             </el-col>
             <el-col :span="12">
-              <el-form-item label="分类:" >
+              <el-form-item label="分类:" prop="class">
                 <el-select v-model="form.class" placeholder="请选择分类" style="width: 100%">
                   <el-option
                       v-for="item in classData"
@@ -64,7 +64,7 @@
               </el-form-item>
             </el-col>
             <el-col :span="12">
-              <el-form-item label="分类明细:" >
+              <el-form-item label="分类明细:" prop="subclass">
                 <el-select v-model="form.subclass" placeholder="请选择分类明细" style="width: 100%">
                   <el-option
                       v-for="item in subClass"
@@ -149,6 +149,12 @@ export default {
         period:[
           { required: true, message: '归属日期不能为空', trigger: 'change'},
         ],
+        class:[
+          { required: true, message: '分类不能为空', trigger: 'change'},
+        ],
+        subclass:[
+          { required: true, message: '分类明细不能为空', trigger: 'change'},
+        ],
       },
       enterprises:[],
       accountclass:[],

+ 8 - 2
src/Form/payvoucher/edit.vue

@@ -40,7 +40,7 @@
               </el-form-item>
             </el-col>
             <el-col :span="12">
-              <el-form-item label="分类:" >
+              <el-form-item label="分类:" prop="class">
                 <el-select v-model="form.class" placeholder="请选择分类" style="width: 100%">
                   <el-option
                       v-for="item in classData"
@@ -65,7 +65,7 @@
               </el-form-item>
             </el-col>
             <el-col :span="12">
-              <el-form-item label="分类明细:" >
+              <el-form-item label="分类明细:" prop="subclass">
                 <el-select v-model="form.subclass" placeholder="请选择分类明细" style="width: 100%">
                   <el-option
                       v-for="item in subClass"
@@ -124,6 +124,12 @@ export default {
         amount:[
           { required: true, message: '支出金额不可为空', trigger: 'blur'},
         ],
+        class:[
+          { required: true, message: '分类不能为空', trigger: 'change'},
+        ],
+        subclass:[
+          { required: true, message: '分类明细不能为空', trigger: 'change'},
+        ],
       },
       classData:[],
       subClass:[]

+ 8 - 2
src/Form/recvoucher/add.vue

@@ -39,7 +39,7 @@
               </el-form-item>
             </el-col>
             <el-col :span="12">
-              <el-form-item label="分类:" >
+              <el-form-item label="分类:" prop="class">
                 <el-select v-model="form.class" placeholder="请选择分类" style="width: 100%">
                   <el-option
                       v-for="item in classData"
@@ -64,7 +64,7 @@
               </el-form-item>
             </el-col>
             <el-col :span="12">
-              <el-form-item label="分类明细:" >
+              <el-form-item label="分类明细:" prop="subclass">
                 <el-select v-model="form.subclass" placeholder="请选择分类明细" style="width: 100%">
                   <el-option
                       v-for="item in subClass"
@@ -136,6 +136,12 @@ export default {
         period:[
           { required: true, message: '归属日期不可为空', trigger: 'blur'},
         ],
+        class:[
+          { required: true, message: '分类不能为空', trigger: 'change'},
+        ],
+        subclass:[
+          { required: true, message: '分类明细不能为空', trigger: 'change'},
+        ],
       },
       enterprises:[],
       accountclass:[],

+ 9 - 3
src/Form/recvoucher/edit.vue

@@ -40,7 +40,7 @@
               </el-form-item>
             </el-col>
             <el-col :span="12">
-              <el-form-item label="分类:" >
+              <el-form-item label="分类:" prop="class">
                 <el-select v-model="form.class" placeholder="请选择分类" style="width: 100%">
                   <el-option
                       v-for="item in classData"
@@ -53,7 +53,7 @@
               </el-form-item>
             </el-col>
             <el-col :span="12">
-              <el-form-item label="分类明细:" >
+              <el-form-item label="分类明细:" prop="subclass">
                 <el-select v-model="form.subclass" placeholder="请选择分类明细" style="width: 100%">
                   <el-option
                       v-for="item in subClass"
@@ -124,6 +124,12 @@ export default {
         amount:[
           { required: true, message: '收入金额不可为空', trigger: 'blur'},
         ],
+        class:[
+          { required: true, message: '分类不能为空', trigger: 'change'},
+        ],
+        subclass:[
+          { required: true, message: '分类明细不能为空', trigger: 'change'},
+        ],
       },
       classData:[],
       subClass:[]
@@ -217,4 +223,4 @@ export default {
 
 <style scoped>
 
-</style>
+</style>

+ 183 - 0
src/HDrpManagement/promotion/components/salesRanking.vue

@@ -0,0 +1,183 @@
+<template>
+  <div>
+    <div style="display:flex;align-items:center;">
+      <el-input
+          v-if="isdealer"
+          placeholder="请输入搜索内容"
+          suffix-icon="el-icon-search"
+          v-model="dealerParam.content.where.condition"
+          style="width:200px"
+          size="mini"
+          class="input-with-select inline-16"
+          @keyup.native.enter="search()"
+          @clear="listData(dealerParam.content.where.condition='')"
+          clearable>
+      </el-input>
+      <el-input
+          v-else
+          placeholder="请输入搜索内容"
+          suffix-icon="el-icon-search"
+          v-model="productParam.content.where.condition"
+          style="width:200px"
+          size="mini"
+          class="input-with-select inline-16"
+          @keyup.native.enter="search()"
+          @clear="listData(productParam.content.where.condition='')"
+          clearable>
+      </el-input>
+      <isExport v-if="isdealer" :tablecols="dealercols" :param="dealerParam" :total="total"  excelTitle="经销商销量排行"></isExport>
+      <isExport v-else :tablecols="productcols" :param="productParam" :total="total"  excelTitle="商品销量排行"></isExport>
+      <div class="float-icon">
+        <i class="el-icon-sort icon-style" @click="dealerChange" :style="{color:isdealer?'#1376e7':''}">经销商</i>
+        <i class="el-icon-sort icon-style" @click="productChange" :style="{color:!isdealer?'#1376e7':''}">商品</i>
+      </div>
+
+    </div>
+    <tableLayout v-if="isdealer" style="margin-top: 15px" :layout="dealercols" :data="dealerData" :opwidth="200"  :custom="true" :width="false" :height="tableHeight">
+      <template v-slot:customcol="scope">
+        <p>{{scope.column.data[scope.column.columnname]}}</p>
+      </template>
+    </tableLayout>
+    <tableLayout v-else style="margin-top: 15px" :layout="productcols" :data="productData" :opwidth="200"  :custom="true" :width="false" :height="tableHeight">
+      <template v-slot:customcol="scope">
+        <p>{{scope.column.data[scope.column.columnname]}}</p>
+      </template>
+    </tableLayout>
+    <div style="margin-top:16px;text-align:right" v-if="isdealer">
+      <el-pagination
+          background
+          small
+          @size-change="handleSizeChange"
+          @current-change="handleCurrentChange"
+          :current-page="dealerParam.content.pageNumber"
+          :page-size="dealerParam.content.pageSize"
+          layout="total, prev, pager, next, jumper"
+          :total="total">
+      </el-pagination>
+    </div>
+    <div style="margin-top:16px;text-align:right" v-else>
+      <el-pagination
+          background
+          small
+          @size-change="handleSizeChange"
+          @current-change="handleCurrentChange"
+          :current-page="productParam.content.pageNumber"
+          :page-size="productParam.content.pageSize"
+          layout="total, prev, pager, next, jumper"
+          :total="total">
+      </el-pagination>
+    </div>
+  </div>
+</template>
+
+<script>
+import tableLayout from '@/components/selectTable/index1.vue'
+import isExport  from '@/components/export_excel/index'
+export default {
+  name: "salesRanking",
+  components:{tableLayout,isExport},
+  data(){
+    return {
+      isdealer:true,
+      tableHeight:"calc(100vh - 526px)",
+      total:0,
+      dealercols:[],
+      dealerData:[],
+      dealerParam:{
+        "id": 20231007101703,
+        "content": {
+          "sa_promotionid":'',
+          "pageNumber":1,
+          "pageSize":20,
+          "where":{
+            "condition":""
+          }
+        }
+      },
+      productcols:[],
+      productData:[],
+      productParam:{
+        "id": 20231007101803,
+        "content": {
+          "sa_promotionid":'',
+          "pageNumber":1,
+          "pageSize":20,
+          "where":{
+            "condition":""
+          }
+        }
+      }
+    }
+  },
+  methods:{
+    async listData(){
+      console.log(this.isdealer,'isdealer')
+      if (this.isdealer){
+        const res = await this.$api.requested(this.dealerParam)
+        console.log(res.data,'经销商')
+        this.dealerData = res.data
+        this.total = res.total
+      }else {
+        const res1 = await this.$api.requested(this.productParam)
+        console.log(res1.data,'商品')
+        this.productData = res1.data
+        this.total = res1.total
+      }
+    },
+    search(){
+      if (this.isdealer){
+        this.listData(this.dealerParam.content.pageNumber = 1)
+      }else {
+        this.listData(this.productParam.content.pageNumber = 1)
+      }
+    },
+    dealerChange(){
+      this.isdealer = true
+      this.listData(this.dealerParam.content.pageNumber = 1)
+    },
+    productChange(){
+      this.isdealer = false
+      this.listData(this.productParam.content.pageNumber = 1)
+    },
+    handleSizeChange(val) {
+      // console.log(`每页 ${val} 条`);
+      if (this.isdealer){
+        this.dealerParam.content.pageSize = val
+        this.listData()
+      }else {
+        this.productParam.content.pageSize = val
+        this.listData()
+      }
+
+    },
+    handleCurrentChange(val) {
+      // console.log(`当前页: ${val}`);
+      if (this.isdealer){
+        this.dealerParam.content.pageNumber = val
+        this.listData()
+      }else {
+        this.productParam.content.pageNumber = val
+        this.listData()
+      }
+
+    },
+  },
+  mounted() {
+    this.listData()
+  },
+  created () {
+    this.dealercols = this.tool.tabelCol(this.$route.name).dealerSalesRankingTable.tablecols
+    this.productcols = this.tool.tabelCol(this.$route.name).productSalesRankingTable.tablecols
+  }
+}
+</script>
+
+<style scoped>
+.float-icon{
+  position:absolute;
+  right:30px
+}
+.icon-style{
+  margin-left: 10px;
+}
+</style>

+ 8 - 3
src/HDrpManagement/promotion/modules/detail.vue

@@ -10,7 +10,7 @@
         idname="sa_promotionid"
         ownertable="sa_promotion"
         tags=""
-        :tabs="['促销商品','授权范围','详细信息']"
+        :tabs="['促销商品','授权范围','销量排行','详细信息']"
         :statusCheck="[{key:'status',value:'审核'},{key:'status',value:'发布'}]"
         @pageChange="pageChange"
         @onEditSuccess="queryMainData($route.query.id)">
@@ -77,7 +77,10 @@
           <add-prower-area v-if="tool.checkAuth($route.name,'prowerArea')" @onSuccess="$refs.prowerArea.listData()" slot="addProwerArea"></add-prower-area>
         </prowerArea>
       </div>
-      <div slot="slot2" >
+      <div slot="slot2">
+        <salesRanking></salesRanking>
+      </div>
+      <div slot="slot3" >
         <base-info v-if="detailInfo" :data="detailInfo"></base-info>
       </div>
     </basicDetails>
@@ -102,9 +105,11 @@ import prowerArea from './prowerArea/index.vue'
 import addProwerArea from './prowerArea/addPowerArea'
 
 import importFile from './productModel/importFile.vue'
+
+import salesRanking from "@/HDrpManagement/promotion/components/salesRanking";
 export default {
   name: "index",
-  components:{Edit,BaseInfo,Check,Send,Close,promotionModel,addModel,productDetail,promotionPrice,calcPrice,addProduct,prowerArea,addProwerArea,importFile},
+  components:{Edit,BaseInfo,Check,Send,Close,promotionModel,addModel,productDetail,promotionPrice,calcPrice,addProduct,prowerArea,addProwerArea,importFile,salesRanking},
   data(){
     return {
       mainData:'',

+ 1 - 1
src/components/dynamic-table/index.vue

@@ -52,4 +52,4 @@ export default {
 
 </script>
 <style>
-</style>
+</style>

+ 96 - 0
src/components/selectTable/index1.vue

@@ -0,0 +1,96 @@
+<template>
+  <div>
+    <el-table ref="tables"  @select="onselect" @select-all="selectAll" @selection-change="selectChange" v-loading="loading" highlight-current-row :data="data" size="mini" :height="height" style="width:100%"  border>
+<!--        <el-table-column
+        type="selection"
+        width="45"
+        align="center"
+        fixed>
+      </el-table-column>-->
+      <el-table-column v-for="col in layout" :key="col.tablecolid" :prop="col.columnname" :label="col.title" :width="col.width" :fixed="col.columnname === fixedName?'right':false">
+        <template slot-scope="scope">
+          <!-- 自定义表格显示内容 -->
+          <slot v-if="custom" name="customcol" :column="{data:scope.row,columnname:col.columnname}"></slot>
+          <!-- 否则就是默认 -->
+          <span v-else>{{scope.row[col.columnname]}}</span>
+          <!-- 操作结构内容 -->
+          <slot v-if="col.columnname === 'operation'" name="opreation" :data="scope.row"></slot>
+        </template>
+      </el-table-column>
+    </el-table>
+  </div>
+</template>
+
+<script>
+import {mapGetters} from "vuex"
+export default {
+  /*
+    layout:表结构数据;
+    data:表渲染数据;
+    custom:是否启用自定义结构;
+    opwidth:操作列宽度
+  */
+  props:['layout','data','custom','height','fixedName','idName'],
+  data () {
+    return {
+      list:[],
+      allArr:[]
+    }
+  },
+  computed:{
+    ...mapGetters({
+      loading:'loading'
+    })
+  },
+  watch: {
+    data (val) {
+      this.data.forEach((row) => {
+        this.allArr.forEach(item => {
+          if (row[this.idName] == item[this.idName]) {
+            this.$nextTick(() => {
+              this.$refs["tables"].toggleRowSelection(row, true);
+            })
+          }
+        })
+      });
+    },
+    allArr (val) {
+      this.$emit('upDateData',val)
+    }
+  },
+  methods:{
+    onselect(e,a) {
+      let index = this.allArr.findIndex(v=>v[this.idName] == a[this.idName])
+      if(index == -1) {
+        this.allArr.push(a)
+      } else {
+        this.allArr.splice(index,1)
+      }
+      console.log(this.allArr);
+      this.$emit('selectChange',this.allArr)
+    },
+    selectAll (val) {
+      if (val.length == 0) {
+        this.data.forEach(item => {
+          this.allArr.splice(item,1)
+        })
+      } else {
+        val.forEach(item => {
+          let res = this.allArr.every(item2 => item[this.idName] != item2[this.idName])
+          res ? this.allArr.push(item) : ''
+        })
+      }
+    },
+    selectChange(data){
+      this.$emit('selectChange',data)
+    }
+  },
+}
+
+</script>
+<style scoped>
+
+/deep/.el-table__header .DisableSelection > .cell {
+  display: none !important;
+}
+</style>

+ 1 - 1
yos/index.html

@@ -1 +1 @@
-<!doctype html><html lang=""><head><meta charset="utf-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width,initial-scale=1"><link rel="icon" href="favicon.ico"><title>yos_manage</title><script defer="defer" type="module" src="js/chunk-vendors.e428fee0.js"></script><script defer="defer" type="module" src="js/app.b6447b9a.js"></script><link href="css/app.fafa1607.css" rel="stylesheet"><script defer="defer" src="js/chunk-vendors-legacy.0beef1e9.js" nomodule></script><script defer="defer" src="js/app-legacy.39b95217.js" nomodule></script></head><body><noscript><strong>We're sorry but yos_manage doesn't work properly without JavaScript enabled. Please enable it to continue.</strong></noscript><div id="app"></div></body><head><meta http-equiv="pragma" content="no-cache"></head></html>
+<!doctype html><html lang=""><head><meta charset="utf-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width,initial-scale=1"><link rel="icon" href="favicon.ico"><title>yos_manage</title><script defer="defer" type="module" src="js/chunk-vendors.e428fee0.js"></script><script defer="defer" type="module" src="js/app.d9c7bb71.js"></script><link href="css/app.fafa1607.css" rel="stylesheet"><script defer="defer" src="js/chunk-vendors-legacy.0beef1e9.js" nomodule></script><script defer="defer" src="js/app-legacy.e2afc509.js" nomodule></script></head><body><noscript><strong>We're sorry but yos_manage doesn't work properly without JavaScript enabled. Please enable it to continue.</strong></noscript><div id="app"></div></body><head><meta http-equiv="pragma" content="no-cache"></head></html>