Parcourir la source

销售排行报表

chenrui il y a 1 an
Parent
commit
d38fb51e8c
2 fichiers modifiés avec 142 ajouts et 59 suppressions
  1. 34 0
      src/api/reportData.js
  2. 108 59
      src/views/reportData/salesRankingReport/list.vue

+ 34 - 0
src/api/reportData.js

@@ -1168,3 +1168,37 @@ export const salesOosExport = params => {
     }
   })
 }
+// 销售排行报表-列表
+export const salesBillRankList = (params) => {
+  const url = `/report/reportSalesBillRank/reportPage/${params.pageNo}/${params.pageSize}`
+  delete params.pageNo
+  delete params.pageSize
+  return axios({
+    url: url,
+    data: params,
+    method: 'post',
+    headers: {
+      'module': encodeURIComponent('列表查询')
+    }
+  })
+}
+// 采购明细退货报表-列表合计
+export const salesBillRankCount = (params) => {
+  return axios({
+    url: '/report/reportSalesBillRank/reportCount',
+    data: params,
+    method: 'post'
+  })
+}
+// 销售排行报表-导出
+export const salesBillRankExport = params => {
+  return axios.request({
+    url: `/report/reportSalesBillRank/export`,
+    data: params,
+    method: 'post',
+    responseType: 'blob',
+    headers: {
+      'module': encodeURIComponent('导出')
+    }
+  })
+}

+ 108 - 59
src/views/reportData/salesRankingReport/list.vue

@@ -32,12 +32,12 @@
             <template v-if="advanced">
               <a-col :md="6" :sm="24">
                 <a-form-model-item label="产品编码">
-                  <a-input id="salesDetailReportList-code" v-model.trim="queryParam.code" allowClear placeholder="请输入产品编码"/>
+                  <a-input id="salesDetailReportList-code" v-model.trim="queryParam.productCode" allowClear placeholder="请输入产品编码"/>
                 </a-form-model-item>
               </a-col>
               <a-col :md="6" :sm="24">
                 <a-form-model-item label="产品名称">
-                  <a-input id="salesDetailReportList-name" v-model.trim="queryParam.name" allowClear placeholder="请输入产品名称"/>
+                  <a-input id="salesDetailReportList-name" v-model.trim="queryParam.productName" allowClear placeholder="请输入产品名称"/>
                 </a-form-model-item>
               </a-col>
             </template>
@@ -67,14 +67,16 @@
         <!-- 合计 -->
         <div class="table-operator">
           <div class="alert-message">
-            销售数量:<strong>{{ (totalData && (totalData.discountedAmount || totalData.discountedAmount==0)) ? totalData.discountedAmount : '--' }}</strong>;
-            销售金额:<strong>{{ (totalData && (totalData.discountedAmount || totalData.discountedAmount==0)) ? toThousands(totalData.discountedAmount) : '--' }}</strong>;
-            销售折后金额:<strong>{{ (totalData && (totalData.discountedAmount || totalData.discountedAmount==0)) ? toThousands(totalData.discountedAmount) : '--' }}</strong>;
-            销售退货数量:<strong>{{ (totalData && (totalData.discountedAmount || totalData.discountedAmount==0)) ? totalData.discountedAmount : '--' }}</strong>;
-            销售退货金额:<strong>{{ (totalData && (totalData.discountedAmount || totalData.discountedAmount==0)) ? totalData.discountedAmount : '--' }}</strong>;
-            销售退货折后金额:<strong>{{ (totalData && (totalData.discountedAmount || totalData.discountedAmount==0)) ? totalData.discountedAmount : '--' }}</strong>;
-            合计销售数量:<strong>{{ (totalData && (totalData.discountedAmount || totalData.discountedAmount==0)) ? totalData.discountedAmount : '--' }}</strong>;
-            合计销售金额:<strong>{{ (totalData && (totalData.discountedAmount || totalData.discountedAmount==0)) ? totalData.discountedAmount : '--' }}</strong>;
+            销售数量:<strong>{{ (totalData && (totalData.salesTotalQty || totalData.salesTotalQty==0)) ? totalData.salesTotalQty : '--' }}</strong>;
+            销售金额:<strong>{{ (totalData && (totalData.salesTotalAmount || totalData.salesTotalAmount==0)) ? toThousands(totalData.salesTotalAmount) : '--' }}</strong>;
+            销售折后金额:<strong>{{ (totalData && (totalData.salesTotalDiscountedAmount || totalData.salesTotalDiscountedAmount==0)) ? toThousands(totalData.salesTotalDiscountedAmount) : '--' }}</strong>;
+            <div style="display: inline-block;" v-if="totalData&&totalData.delFlag==1">
+              销售退货数量:<strong>{{ (totalData && (totalData.salesReturnTotalQty || totalData.salesReturnTotalQty==0)) ? totalData.salesReturnTotalQty : '--' }}</strong>;
+              销售退货金额:<strong>{{ (totalData && (totalData.salesReturnTotalAmount || totalData.salesReturnTotalAmount==0)) ?toThousands(totalData.salesReturnTotalAmount) : '--' }}</strong>;
+              销售退货折后金额:<strong>{{ (totalData && (totalData.salesReturnTotalDiscountedAmount || totalData.salesReturnTotalDiscountedAmount==0)) ? toThousands(totalData.salesReturnTotalDiscountedAmount) : '--' }}</strong>;
+              销售数量合计:<strong>{{ (totalData && (totalData.totalQty || totalData.totalQty==0)) ? totalData.totalQty : '--' }}</strong>;
+              销售金额合计:<strong>{{ (totalData && (totalData.totalAmount || totalData.totalAmount==0)) ? toThousands(totalData.totalAmount) : '--' }}</strong>;
+            </div>
           </div>
           <div>
             <span>显示:</span>
@@ -103,6 +105,11 @@
           :scroll="{ x: 1820}"
           :defaultLoadData="false"
           bordered>
+          <!-- 产品分类 -->
+          <template slot="productType" slot-scope="text, record">
+            <span v-if="record.productTypeName2 || record.productTypeName3">{{ record.productTypeName2 }} {{ record.productTypeName3 ? '>' : '' }} {{ record.productTypeName3 }}</span>
+            <span v-else>--</span>
+          </template>
           <!-- 销售数量  标题 -->
           <template slot="salesNumTit">
             <a-tooltip placement="top">
@@ -129,11 +136,13 @@
           </template>
           <template slot="action" slot-scope="text, record">
             <a-button
+              v-if="record.sysFlag==1"
               size="small"
               type="link"
               class="button-primary"
-              @click="handleEexamine(record)"
+              @click="addShopCar(record)"
             >加入购物车</a-button>
+            <span v-else>--</span>
           </template>
         </s-table>
       </a-spin>
@@ -147,7 +156,9 @@ import { STable, VSelect } from '@/components'
 import rangeDate from '@/views/common/rangeDate.vue'
 import ProductBrand from '@/views/common/productBrand.js'
 import ProductType from '@/views/common/productType.js'
-import { reportBigCustomerList, reportBigCustomerCount } from '@/api/reportData'
+import { downloadExcel } from '@/libs/JGPrint.js'
+import { purchaseCartSave } from '@/api/purchaseCart'
+import { salesBillRankList, salesBillRankCount, salesBillRankExport } from '@/api/reportData'
 export default {
   mixins: [commonMixin],
   name: 'SalesRankingReport',
@@ -163,12 +174,12 @@ export default {
         time: [],
         beginDate: '',
         endDate: '',
-        productBrandSn: '',
-        productTypeSn1: '', //  产品一级分类
-        productTypeSn2: '', //  产品二级分类
-        productTypeSn3: '', //  产品三级分类
-        code: undefined,
-        name: undefined
+        productBrandSn: undefined,
+        productTypeSn1: undefined, //  产品一级分类
+        productTypeSn2: undefined, //  产品二级分类
+        productTypeSn3: undefined, //  产品三级分类
+        productCode: undefined,
+        productName: undefined
       },
       productType: [],
       rules: {
@@ -180,10 +191,11 @@ export default {
       loadData: parameter => {
         this.disabled = true
         const params = Object.assign(parameter, this.queryParam)
-        this.spinning = true
+        params.returnFlag = this.showCols.includes('returnFlag') ? 1 : 0
         delete params.time
-        if (params.beginDate) {
-          return reportBigCustomerList(params).then(res => {
+        this.spinning = true
+        if (params.beginDate && params.endDate) {
+          return salesBillRankList(params).then(res => {
             let data
             if (res.status == 200) {
               data = res.data
@@ -192,7 +204,6 @@ export default {
               const no = (data.pageNo - 1) * data.pageSize
               for (var i = 0; i < data.list.length; i++) {
                 data.list[i].no = no + i + 1
-                data.list[i].percentageUnit = data.list[i].percentage ? data.list[i].percentage + '%' : undefined
               }
               this.disabled = false
             }
@@ -219,12 +230,11 @@ export default {
       colsArr: [
         {
           title: '销售退货(明细)',
-          value: 'totalCancelQty',
-          key: 'totalCancelQty',
-          disabled: false,
-          checkedFlag: true
+          value: 'returnFlag',
+          key: 'returnFlag',
+          disabled: false
         }],
-      showCols: ['totalCancelQty']
+      showCols: []
     }
   },
   computed: {
@@ -232,32 +242,37 @@ export default {
       const _this = this
       const arr = [
         { title: '序号', dataIndex: 'no', width: 60, align: 'center' },
-        { title: '品牌', dataIndex: 'salesTargetName', width: 80, align: 'center', customRender: function (text) { return text || '--' } },
-        { title: '分类', dataIndex: 'customerTypeName', width: 100, align: 'center', customRender: function (text) { return text || '--' } },
-        { title: '产品编码', dataIndex: 'discountedAmount', width: 90, align: 'center', customRender: function (text) { return ((text || text == 0) ? _this.toThousands(text) : '--') } },
-        { title: '产品名称', dataIndex: 'discountedAmount', width: 150, align: 'left', customRender: function (text) { return text || '--' }, ellipsis: true },
-        { title: '原厂编码', dataIndex: 'discountedAmount', width: 90, align: 'center', customRender: function (text) { return ((text || text == 0) ? _this.toThousands(text) : '--') } },
-        { title: '单位', dataIndex: 'discountedAmount', width: 70, align: 'center', customRender: function (text) { return ((text || text == 0) ? _this.toThousands(text) : '--') } },
-        { slots: { title: 'salesNumTit' }, dataIndex: 'discountedAmount', width: 100, align: 'center', customRender: function (text) { return ((text || text == 0) ? _this.toThousands(text) : '--') } },
-        { title: '销售金额', dataIndex: 'discountedAmount', width: 100, align: 'right', customRender: function (text) { return ((text || text == 0) ? _this.toThousands(text) : '--') } },
-        { title: '销售折扣金额', dataIndex: 'discountedAmount', width: 100, align: 'right', customRender: function (text) { return ((text || text == 0) ? _this.toThousands(text) : '--') } },
-        { title: '销售折后金额', dataIndex: 'discountedAmount', width: 100, align: 'right', customRender: function (text) { return ((text || text == 0) ? _this.toThousands(text) : '--') } },
-        { title: '销售成本金额', dataIndex: 'discountedAmount', width: 100, align: 'right', customRender: function (text) { return ((text || text == 0) ? _this.toThousands(text) : '--') } },
-        { slots: { title: 'salesReturnNum' }, dataIndex: 'discountedAmount', width: 110, align: 'center', customRender: function (text) { return ((text || text == 0) ? _this.toThousands(text) : '--') } },
-        { title: '销售退货金额', dataIndex: 'discountedAmount', width: 100, align: 'right', customRender: function (text) { return ((text || text == 0) ? _this.toThousands(text) : '--') } },
-        { title: '销售退货折扣金额', dataIndex: 'discountedAmount', width: 120, align: 'right', customRender: function (text) { return ((text || text == 0) ? _this.toThousands(text) : '--') } },
-        { title: '销售退货折后金额', dataIndex: 'discountedAmount', width: 120, align: 'right', customRender: function (text) { return ((text || text == 0) ? _this.toThousands(text) : '--') } },
-        { title: '销售退货成本金额', dataIndex: 'discountedAmount', width: 120, align: 'right', customRender: function (text) { return ((text || text == 0) ? _this.toThousands(text) : '--') } },
-        { title: '合计销售数量', dataIndex: 'discountedAmount', width: 100, align: 'center', customRender: function (text) { return ((text || text == 0) ? _this.toThousands(text) : '--') } },
-        { title: '合计销售金额', dataIndex: 'discountedAmount', width: 100, align: 'right', customRender: function (text) { return ((text || text == 0) ? _this.toThousands(text) : '--') } },
-        { title: '当前库存数量', dataIndex: 'discountedAmount', width: 100, align: 'center', customRender: function (text) { return ((text || text == 0) ? _this.toThousands(text) : '--') } },
-        { title: '当前库存金额', dataIndex: 'discountedAmount', width: 100, align: 'right', customRender: function (text) { return ((text || text == 0) ? _this.toThousands(text) : '--') } },
+        { title: '品牌', dataIndex: 'productBrandName', width: 80, align: 'center', customRender: function (text) { return text || '--' } },
+        { title: '分类', scopedSlots: { customRender: 'productType' }, width: 100, align: 'center' },
+        { title: '产品编码', dataIndex: 'productCode', width: 90, align: 'center', customRender: function (text) { return text || '--' } },
+        { title: '产品名称', dataIndex: 'productName', width: 150, align: 'left', customRender: function (text) { return text || '--' }, ellipsis: true },
+        { title: '原厂编码', dataIndex: 'productOrigCode', width: 90, align: 'center', customRender: function (text) { return text || '--' } },
+        { title: '单位', dataIndex: 'productUnit', width: 70, align: 'center', customRender: function (text) { return text || '--' } },
+        { slots: { title: 'salesNumTit' }, dataIndex: 'salesTotalQty', width: 100, align: 'center', customRender: function (text) { return ((text || text == 0) ? text : '--') } },
+        { title: '销售金额', dataIndex: 'salesTotalAmount', width: 100, align: 'right', customRender: function (text) { return ((text || text == 0) ? _this.toThousands(text) : '--') } },
+        { title: '销售折扣金额', dataIndex: 'salesTotalDiscountAmount', width: 100, align: 'right', customRender: function (text) { return ((text || text == 0) ? _this.toThousands(text) : '--') } },
+        { title: '销售折后金额', dataIndex: 'salesTotalDiscountedAmount', width: 100, align: 'right', customRender: function (text) { return ((text || text == 0) ? _this.toThousands(text) : '--') } },
+        { title: '销售成本金额', dataIndex: 'salesTotalCost', width: 100, align: 'right', customRender: function (text) { return ((text || text == 0) ? _this.toThousands(text) : '--') } },
+        // { slots: { title: 'salesReturnNum' }, dataIndex: 'salesReturnTotalQty', width: 110, align: 'center', customRender: function (text) { return ((text || text == 0) ? _this.toThousands(text) : '--') } },
+        // { title: '销售退货金额', dataIndex: 'salesReturnTotalAmount', width: 100, align: 'right', customRender: function (text) { return ((text || text == 0) ? _this.toThousands(text) : '--') } },
+        // { title: '销售退货折扣金额', dataIndex: 'salesReturnTotalDiscountAmount', width: 120, align: 'right', customRender: function (text) { return ((text || text == 0) ? _this.toThousands(text) : '--') } },
+        // { title: '销售退货折后金额', dataIndex: 'salesReturnTotalDiscountedAmount', width: 120, align: 'right', customRender: function (text) { return ((text || text == 0) ? _this.toThousands(text) : '--') } },
+        // { title: '销售退货成本金额', dataIndex: 'salesReturnTotalCost', width: 120, align: 'right', customRender: function (text) { return ((text || text == 0) ? _this.toThousands(text) : '--') } },
+        // { title: '销售数量合计', dataIndex: 'totalQty', width: 100, align: 'center', customRender: function (text) { return ((text || text == 0) ? _this.toThousands(text) : '--') } },
+        // { title: '销售金额合计', dataIndex: 'totalAmount', width: 100, align: 'right', customRender: function (text) { return ((text || text == 0) ? _this.toThousands(text) : '--') } },
+        { title: '当前库存数量', dataIndex: 'stockTotalQty', width: 100, align: 'center', customRender: function (text) { return ((text || text == 0) ? text : '--') } },
+        { title: '当前库存金额', dataIndex: 'stockTotalCost', width: 100, align: 'right', customRender: function (text) { return ((text || text == 0) ? _this.toThousands(text) : '--') } },
         { title: '操作', scopedSlots: { customRender: 'action' }, width: 120, align: 'center', fixed: 'right' }
       ]
-      // if (this.$hasPermissions('M_ShowAllCost')) {
-      //   arr.splice(4, 0, { title: '毛利', dataIndex: 'totalGrossProfit', width: '15%', align: 'right', customRender: function (text) { return ((text || text == 0) ? _this.toThousands(text) : '--') } })
-      //   arr.splice(5, 0, { title: '毛利率', dataIndex: 'percentageUnit', width: '15%', align: 'right', customRender: function (text) { return text || '--' } })
-      // }
+      if (this.showCols.includes('returnFlag')) {
+        arr.splice(12, 0, { slots: { title: 'salesReturnNum' }, dataIndex: 'salesReturnTotalQty', width: 110, align: 'center', customRender: function (text) { return ((text || text == 0) ? text : '--') } })
+        arr.splice(13, 0, { title: '销售退货金额', dataIndex: 'salesReturnTotalAmount', width: 100, align: 'right', customRender: function (text) { return ((text || text == 0) ? _this.toThousands(text) : '--') } })
+        arr.splice(14, 0, { title: '销售退货折扣金额', dataIndex: 'salesReturnTotalDiscountAmount', width: 120, align: 'right', customRender: function (text) { return ((text || text == 0) ? _this.toThousands(text) : '--') } })
+        arr.splice(15, 0, { title: '销售退货折后金额', dataIndex: 'salesReturnTotalDiscountedAmount', width: 120, align: 'right', customRender: function (text) { return ((text || text == 0) ? _this.toThousands(text) : '--') } })
+        arr.splice(16, 0, { title: '销售退货成本金额', dataIndex: 'salesReturnTotalCost', width: 120, align: 'right', customRender: function (text) { return ((text || text == 0) ? _this.toThousands(text) : '--') } })
+        arr.splice(17, 0, { title: '销售数量合计', dataIndex: 'totalQty', width: 120, align: 'right', customRender: function (text) { return ((text || text == 0) ? text : '--') } })
+        arr.splice(18, 0, { title: '销售金额合计', dataIndex: 'totalAmount', width: 120, align: 'right', customRender: function (text) { return ((text || text == 0) ? _this.toThousands(text) : '--') } })
+      }
       return arr
     }
   },
@@ -269,7 +284,7 @@ export default {
     },
     // 合计
     getCount (params) {
-      reportBigCustomerCount(params).then(res => {
+      salesBillRankCount(params).then(res => {
         if (res.status == 200) {
           this.totalData = res.data
         } else {
@@ -309,12 +324,12 @@ export default {
       this.queryParam.time = []
       this.queryParam.beginDate = ''
       this.queryParam.endDate = ''
-      this.queryParam.productBrandSn = ''
-      this.queryParam.productTypeSn1 = ''
-      this.queryParam.productTypeSn2 = ''
-      this.queryParam.productTypeSn3 = ''
-      this.queryParam.code = undefined
-      this.queryParam.name = undefined
+      this.queryParam.productBrandSn = undefined
+      this.queryParam.productTypeSn1 = undefined
+      this.queryParam.productTypeSn2 = undefined
+      this.queryParam.productTypeSn3 = undefined
+      this.queryParam.productCode = undefined
+      this.queryParam.productName = undefined
       this.productType = []
       this.$refs.ruleForm.resetFields()
       this.totalData = null
@@ -327,7 +342,41 @@ export default {
       this.queryParam.productTypeSn3 = val[2] ? val[2] : ''
     },
     handleExport () {
-
+      const _this = this
+      this.$refs.ruleForm.validate(valid => {
+        if (valid) {
+          const params = JSON.parse(JSON.stringify(_this.queryParam))
+          params.returnFlag = _this.showCols.includes('returnFlag') ? 1 : 0
+          delete params.time
+          _this.exportLoading = true
+          _this.spinning = true
+          salesBillRankExport(params).then(res => {
+            downloadExcel(res, '销售排行报表')
+            _this.exportLoading = false
+            _this.spinning = false
+          })
+        } else {
+          console.log('error submit!!')
+          return false
+        }
+      })
+    },
+    // 加入购物车
+    addShopCar (row) {
+      this.spinning = true
+      purchaseCartSave({
+        productSn: row.productSn,
+        qty: 1,
+        productCode: row.productCode,
+        sysFlag: row.sysFlag
+      }).then(res => {
+        if (res.status == 200) {
+          if (res.data) {
+            this.$message.info('此产品已添加到购物车!')
+          }
+        }
+        this.spinning = false
+      })
     },
     setTableH () {
       const tableSearchH = this.$refs.tableSearch.offsetHeight