Forráskód Böngészése

Merge branch 'develop_yh58' of http://git.chelingzhu.com/jianguan-web/jg-ocs-html into develop_yh59

# Conflicts:
#	src/config/report/salesReport.js
lilei 1 hónapja
szülő
commit
55049ca038

+ 1 - 1
public/version.json

@@ -1,4 +1,4 @@
 {
-    "version": "2.2.553",
+    "version": "2.2.58",
     "message": "发现有新版本发布,确定更新系统?"
 }

+ 1 - 1
src/config/dealerManagement.js

@@ -308,7 +308,7 @@ export default {
             title: '管辖品类权限设置',
             icon: 'user',
             hidden: true,
-            replaceTab: true,
+            replaceTab: false,
             permission: 'M_settingsIndex'
           }
         }

+ 4 - 4
src/config/report/salesReport.js

@@ -98,8 +98,8 @@ export default {
       component: BlankLayout,
       meta: {
         title: '每日报表',
-        icon: 'profile'
-        // permission: 'M_dailyReportList'
+        icon: 'profile',
+        permission: 'M_dailyReport'
       },
       hideChildrenInMenu: true,
       children: [
@@ -110,8 +110,8 @@ export default {
           meta: {
             title: '每日报表',
             icon: 'profile',
-            hidden: true
-            // permission: 'M_dailyReportList'
+            hidden: true,
+            permission: 'M_dailyReport'
           }
         }
       ]

+ 30 - 216
src/views/reportData/dailyReport/index.vue

@@ -1,242 +1,53 @@
 <template>
-  <div>
-    <a-spin :spinning="spinning" tip="Loading...">
-      <!-- 选项卡切换 -->
-      <a-tabs v-model="activeKey" @change="callback" :tabBarStyle="{'background':'#fff'}">
-        <a-tab-pane :key="item.id" :tab="item.name" v-for="item in tabsList">
-        </a-tab-pane>
-      </a-tabs>
-      <a-card size="small">
-        <!-- 搜索条件 -->
-        <div class="table-page-search-wrapper newTableSearchName" ref="tableSearch">
-          <a-form-model
-            id="dayReportList-form"
-            ref="ruleForm"
-            class="form-model-con"
-            layout="inline"
-            :rules="rules"
-            :model="queryParam"
-            @keyup.enter.native="handleSearch">
-            <a-row :gutter="15">
-              <a-col :md="6" :sm="24">
-                <a-form-model-item label="月份" prop="month">
-                  <a-month-picker
-                    placeholder="请选择月份"
-                    locale="zh-cn"
-                    id="dayReportList-month"
-                    v-model="queryParam.month"
-                    @change="onChange"
-                    :disabled-date="disabledDate"
-                    style="width: 100%;"/>
-                </a-form-model-item>
-              </a-col>
-              <a-col :md="6" :sm="24" style="margin-bottom: 10px;">
-                <a-button type="primary" @click="handleSearch" :disabled="disabled" id="dayReportList-refresh">查询</a-button>
-                <a-button style="margin-left: 5px" @click="resetSearchForm" :disabled="disabled" id="dayReportList-reset">重置</a-button>
-                <a-button
-                  style="margin-left: 5px"
-                  type="primary"
-                  class="button-warning"
-                  @click="handleExport"
-                  :disabled="disabled"
-                  :loading="exportLoading"
-                  id="dayReportList-export">导出</a-button>
-              </a-col>
-            </a-row>
-          </a-form-model>
-        </div>
-      </a-card>
-      <!-- 列表 -->
-      <a-card size="small" style="margin-top:4px!important">
-        <table0
-          v-if="activeKey == 0"
-          ref="table0"
-          :month="queryParam.month"
-          :columns="columns"
-          :tableData="tableData"
-          :nowDate="nowDate"
-        ></table0>
-        <table1
-          v-if="activeKey == 1"
-          ref="table1"
-          :month="queryParam.month"
-          :columns="columns"
-          :tableData="tableData"
-          :nowDate="nowDate"
-        ></table1>
-        <table2
-          v-if="activeKey == 2"
-          ref="table2"
-          :month="queryParam.month"
-          :columns="columns"
-          :tableData="tableData"
-          :nowDate="nowDate"
-        ></table2>
-        <table3
-          v-if="activeKey == 3"
-          ref="table3"
-          :month="queryParam.month"
-          :columns="columns"
-          :tableData="tableData"
-          :nowDate="nowDate"
-        ></table3>
-      </a-card>
-    </a-spin>
+  <div class="dayReport-box">
+    <!-- 选项卡切换 -->
+    <a-tabs v-model="activeKey" @change="callback" :tabBarStyle="{'background':'#fff',height:'41px',overflow:'hidden',marginBottom:'5px'}">
+      <a-tab-pane :key="item.id" :tab="item.name" v-for="item in tabsList" forceRender>
+        <dTable :ref="'table'+item.id"></dTable>
+      </a-tab-pane>
+    </a-tabs>
   </div>
 </template>
 
 <script>
 import { commonMixin } from '@/utils/mixin'
-import XLSX from 'xlsx-js-style'
-// 组件
-import moment from 'moment'
-import table0 from './table0'
-import table1 from './table1'
-import table2 from './table2'
-import table3 from './table3'
-// 接口
-import { salesReportDailyList } from '@/api/reportData.js'
+import dTable from './table.vue'
 export default {
   name: 'RegionTypeSalesReportList',
   mixins: [commonMixin],
-  components: { table0, table1, table2, table3 },
+  components: { dTable },
   data () {
     return {
       spinning: false,
       activeKey: 0, // 切换显示页面值 0 各分区品类实售明细 1各区域品类实售明细
-      advanced: true, // 高级搜索 展开/关闭
-      disabled: false, //  查询、重置按钮是否可操作
-      exportLoading: false, // 导出按钮加载状态
-      tableHeight: 0, // 表格高度
-      tabsList: [{ id: 0, name: '全国销售日报' }, { id: 1, name: '项目销售日报1' }, { id: 2, name: '项目销售日报2' }, { id: 3, name: '分区销售日报' }], // tab切换data
-      columns: [], // 表头数据
-      tableData: [], // 表格数据
-      totalNums: 0, // 总条数
-      // 查询参数
-      queryParam: {
-        month: moment().format('YYYY-MM') // 月份默认值
-      },
-      rules: {
-        'month': [{ required: true, message: '请选择月份', trigger: 'change' }]
-      },
-      nowDate: ''
+      tabsList: [] // tab切换data
     }
   },
   methods: {
-    // 月份 change
-    onChange (date, dateString) {
-      this.queryParam.month = dateString
-    },
-    // 月份选择范围
-    disabledDate (current) {
-      return current && current > moment().endOf('day')
-    },
     // tabs切换  change时间
     callback (key) {
       this.activeKey = key
-      const _this = this
-      _this.$nextTick(() => {
-        this.resetSearchForm()
-      })
-    },
-    // 查询
-    handleSearch () {
-      const _this = this
-      this.$refs.ruleForm.validate(valid => {
-        if (valid) {
-          _this.getTableData()
-        } else {
-          _this.$message.error('请选择月份')
-          return false
-        }
-      })
+      this.$refs['table' + this.activeKey][0].pageInit(this.activeKey)
     },
-    //  重置
-    resetSearchForm () {
-      this.$refs.ruleForm.resetFields()
-      this.tableData = []
-    },
-    exportTable (dom, title) {
-      const zim = 'A、B、C、D、E、F、G、H、I、J、K、L、M、N、O、P、Q、R、S、T、U、V、W、X、Y、Z‌'.split('、')
-      var ws = XLSX.utils.table_to_sheet(dom)
-      var wb = XLSX.utils.book_new()
-      console.log(ws)
-      // 设置样式
-      Object.keys(ws).forEach(cell => {
-        if (cell[0] !== '!') {
-          ws[cell].s = {
-            alignment: {
-              horizontal: 'center',
-              vertical: 'center'
-            }
-          }
-        }
-      })
-      // 表格1
-      if (this.activeKey == 1 || this.activeKey == 2) {
-        const cols = zim[this.columns.length - 1]
-        Array(this.totalNums).fill().forEach((item, i) => {
-          const a = ws[cols + (i + 2)]
-          if (a) {
-            a.z = (a.v * 100) + '%' // 设置单元格格式为百分比
-          }
-        })
+    // 初始化
+    pageInit () {
+      this.tabsList = []
+      if (this.$hasPermissions('M_National_Sales_Daily_Report')) {
+        this.tabsList.push({ id: 0, name: '全国销售日报' })
       }
-      // 4. 设置列宽
-      ws['!cols'] = Array(this.columns.length).fill().map(() => ({ wch: 35 }))
-
-      XLSX.utils.book_append_sheet(wb, ws, 'Sheet1')
-      XLSX.writeFile(wb, this.queryParam.month + title + '.xlsx')
-    },
-    //  导出
-    handleExport () {
-      const excelTitle = this.tabsList.find(item => item.id == this.activeKey)
-      if (this.$refs.table0 && this.activeKey == 0) {
-        this.exportTable(this.$refs.table0.getTable(), excelTitle.name)
-      } else if (this.$refs.table1 && this.activeKey == 1) {
-        this.totalNums = this.$refs.table1.list.length
-        this.exportTable(this.$refs.table1.getTable(), excelTitle.name)
-      } else if (this.$refs.table2 && this.activeKey == 2) {
-        this.exportTable(this.$refs.table2.getTable(), excelTitle.name)
-      } else if (this.$refs.table3 && this.activeKey == 3) {
-        this.exportTable(this.$refs.table3.getTable(), excelTitle.name)
+      if (this.$hasPermissions('M_Project_Sales_Daily_Report')) {
+        this.tabsList.push({ id: 1, name: '项目销售日报1' })
       }
-    },
-    // 获取表格数据
-    async getTableData () {
-      const url = [salesReportDailyList, salesReportDailyList, salesReportDailyList, salesReportDailyList]
-      const reportType = ['DailyPL', 'DailyPL', 'DailyPLJL', 'DailyPL'][this.activeKey]
-      const reportDate = this.queryParam.month + '-01 00:00:00'
-      this.nowDate = moment().format('DD日HH点mm分')
-      this.spinning = true
-      const data = await url[this.activeKey]({ reportType, reportDate }).then(res => res.data)
-      if (data) {
-        this.tableData = data
-        if (this.activeKey == 1) {
-          this.columns = this.getColumns()
-        }
-        if (this.activeKey == 2) {
-          this.columns = [1, 2, 3, 4, 5]
-        }
-        this.spinning = false
+      if (this.$hasPermissions('M_Project_Sales_Daily_Report_2')) {
+        this.tabsList.push({ id: 2, name: '项目销售日报2' })
       }
-    },
-    getColumns () {
-      const row = this.tableData[0]
-      const ret = []
-      if (row) {
-        row.detailList[0].forEach(item => {
-          ret.push(item)
-        })
-        ret.push(row.bymb)
-        ret.push(row.wcl)
+      if (this.$hasPermissions('M_Regional_Sales_Daily_Report')) {
+        this.tabsList.push({ id: 3, name: '分区销售日报' })
       }
-      return ret
-    },
-    // 初始化
-    pageInit () {
-      this.activeKey = 0
-      this.tableData = []
+      this.activeKey = this.tabsList[0].id
+      this.$nextTick(() => {
+        this.$refs['table' + this.activeKey][0].pageInit(this.activeKey)
+      })
     }
   },
   mounted () {
@@ -256,5 +67,8 @@ export default {
 }
 </script>
 <style lang="less" scoped>
-
+.dayReport-box{
+  min-height: calc(100vh - 90px);
+  background: #fff;
+}
 </style>

+ 320 - 0
src/views/reportData/dailyReport/table.vue

@@ -0,0 +1,320 @@
+<template>
+  <div>
+    <a-spin :spinning="spinning" tip="Loading...">
+      <a-card size="small" class="card-table">
+        <!-- 搜索条件 -->
+        <div class="table-page-search-wrapper newTableSearchName" ref="tableSearch">
+          <a-form-model
+            id="dayReportList-form"
+            ref="ruleForm"
+            class="form-model-con"
+            layout="inline"
+            :rules="rules"
+            :model="queryParam"
+            @keyup.enter.native="handleSearch">
+            <a-row :gutter="15">
+              <a-col :md="6" :sm="24">
+                <a-form-model-item label="月份" prop="month">
+                  <a-month-picker
+                    placeholder="请选择月份"
+                    locale="zh-cn"
+                    id="dayReportList-month"
+                    v-model="queryParam.month"
+                    :allowClear="false"
+                    @change="onChange"
+                    :disabled-date="disabledDate"
+                    style="width: 100%;"/>
+                </a-form-model-item>
+              </a-col>
+              <a-col :md="6" :sm="24" style="margin-bottom: 10px;">
+                <a-button type="primary" @click="handleSearch" :disabled="disabled" id="dayReportList-refresh">查询</a-button>
+                <a-button style="margin-left: 5px" @click="resetSearchForm" :disabled="disabled" id="dayReportList-reset">重置</a-button>
+                <a-button
+                  style="margin-left: 5px"
+                  type="primary"
+                  class="button-warning"
+                  @click="handleExport"
+                  :disabled="tableData.length==0"
+                  v-if="$hasPermissions('B_National_Sales_Daily_Export')&&activeKey==0
+                    ||$hasPermissions('B_Project_Sales_Daily_Export')&&activeKey==1
+                    ||$hasPermissions('B_Project_Sales_Daily_Export_2')&&activeKey==2
+                    ||$hasPermissions('M_Regional_Sales_Daily_Export')&&activeKey==3"
+                  :loading="exportLoading"
+                  id="dayReportList-export">导出</a-button>
+              </a-col>
+            </a-row>
+          </a-form-model>
+        </div>
+        <!-- 列表 -->
+        <table0
+          v-if="activeKey == 0"
+          ref="table0"
+          :month="queryParam.month"
+          :columns="columns"
+          :tableData="tableData"
+          :nowDate="nowDate"
+        ></table0>
+        <table1
+          v-if="activeKey == 1"
+          ref="table1"
+          :month="queryParam.month"
+          :columns="columns"
+          :tableData="tableData"
+          :nowDate="nowDate"
+        ></table1>
+        <table2
+          v-if="activeKey == 2"
+          ref="table2"
+          :month="queryParam.month"
+          :columns="columns"
+          :tableData="tableData"
+          :nowDate="nowDate"
+        ></table2>
+        <table3
+          v-if="activeKey == 3"
+          ref="table3"
+          :month="queryParam.month"
+          :columns="columns"
+          :tableData="tableData"
+          :nowDate="nowDate"
+        ></table3>
+      </a-card>
+    </a-spin>
+  </div>
+</template>
+
+<script>
+import { commonMixin } from '@/utils/mixin'
+import XLSX from 'xlsx-js-style'
+// 组件
+import moment from 'moment'
+import table0 from './table0'
+import table1 from './table1'
+import table2 from './table2'
+import table3 from './table3'
+// 接口
+import { salesReportDailyList } from '@/api/reportData.js'
+export default {
+  name: 'RegionTypeSalesReportList',
+  mixins: [commonMixin],
+  components: { table0, table1, table2, table3 },
+  data () {
+    return {
+      spinning: false,
+      activeKey: 0, // 切换显示页面值 0 各分区品类实售明细 1各区域品类实售明细
+      advanced: true, // 高级搜索 展开/关闭
+      disabled: false, //  查询、重置按钮是否可操作
+      exportLoading: false, // 导出按钮加载状态
+      tableHeight: 0, // 表格高度
+      tabsList: [{ id: 0, name: '全国销售日报' }, { id: 1, name: '项目销售日报1' }, { id: 2, name: '项目销售日报2' }, { id: 3, name: '分区销售日报' }], // tab切换data
+      columns: [], // 表头数据
+      tableData: [], // 表格数据
+      totalNums: 0, // 总条数
+      // 查询参数
+      queryParam: {
+        month: moment().format('YYYY-MM') // 月份默认值
+      },
+      rules: {
+        'month': [{ required: true, message: '请选择月份', trigger: 'change' }]
+      },
+      nowDate: ''
+    }
+  },
+  methods: {
+    // 月份 change
+    onChange (date, dateString) {
+      this.queryParam.month = dateString
+    },
+    // 月份选择范围
+    disabledDate (current) {
+      return current && current > moment().endOf('day')
+    },
+    // tabs切换  change时间
+    callback (key) {
+      this.activeKey = key
+      const _this = this
+      _this.$nextTick(() => {
+        this.resetSearchForm()
+      })
+    },
+    // 查询
+    handleSearch () {
+      const _this = this
+      this.$refs.ruleForm.validate(valid => {
+        if (valid) {
+          _this.getTableData()
+        } else {
+          _this.$message.error('请选择月份')
+          return false
+        }
+      })
+    },
+    //  重置
+    resetSearchForm () {
+      this.$refs.ruleForm.resetFields()
+      this.tableData = []
+      this.totalNums = 0
+      this.totalNums = []
+    },
+    exportTable (dom, title) {
+      const zim = 'A、B、C、D、E、F、G、H、I、J、K、L、M、N、O、P、Q、R、S、T、U、V、W、X、Y、Z‌'.split('、')
+      var ws = XLSX.utils.table_to_sheet(dom)
+      // console.log(ws)
+      // 设置样式
+      Object.keys(ws).forEach(cell => {
+        if (cell[0] !== '!') {
+          // 设置表头样式
+          if (cell === 'A1') {
+            ws[cell].s = {
+              font: { bold: true, color: { rgb: 'FFFFFF' } },
+              fill: { fgColor: { rgb: '4472C4' } },
+              alignment: { horizontal: 'center' }
+            }
+          } else {
+            ws[cell].s = {
+              alignment: {
+                horizontal: 'center',
+                vertical: 'center'
+              }
+            }
+          }
+        }
+      })
+
+      // 表格0
+      if (this.activeKey == 0) {
+        const ri = [6, 11, 20, 23]
+        this.columns.forEach((item, i) => {
+          if (i > 1) {
+            const cols = zim[i]
+            ri.forEach((row, j) => {
+              const a = ws[cols + row]
+              if (a) {
+                a.v = Number(a.v * 100).toFixed(2) + '%' // 设置单元格格式为百分比
+                a.t = 's'
+              }
+            })
+          }
+        })
+      }
+      // 表格1表格2
+      if (this.activeKey == 1 || this.activeKey == 2) {
+        const cols = zim[this.columns.length - 1]
+        Array(this.totalNums).fill().forEach((item, i) => {
+          const a = ws[cols + (i + 3)]
+          console.log(a)
+          if (a) {
+            a.v = Number(a.v * 100).toFixed(2) + '%' // 设置单元格格式为百分比
+            a.t = 's'
+          }
+        })
+      }
+      // 表格3
+      if (this.activeKey == 3) {
+        const ci = [6, 8]
+        ci.forEach((row) => {
+          const cols = zim[row]
+          Array(this.totalNums).fill().forEach((item, i) => {
+            const a = ws[cols + (i + 4)]
+            if (a) {
+              a.v = Number(a.v * 100).toFixed(2) + '%' // 设置单元格格式为百分比
+              a.t = 's'
+            }
+          })
+        })
+      }
+      // 4. 设置列宽
+      ws['!cols'] = Array(this.columns.length).fill().map(() => ({ wch: this.activeKey == 3 ? 15 : 35 }))
+      const timeStr = moment().format('YYYYMMDDHHmmss')
+      // 创建工作簿并导出
+      var wb = XLSX.utils.book_new()
+      // 5. 写入文件
+      XLSX.utils.book_append_sheet(wb, ws, 'Sheet1')
+      XLSX.writeFile(wb, this.queryParam.month.split('-')[1] + '月' + title + '-' + timeStr + '.xlsx')
+    },
+    //  导出
+    handleExport () {
+      const excelTitle = this.tabsList.find(item => item.id == this.activeKey)
+      if (this.$refs.table0 && this.activeKey == 0) {
+        this.totalNums = this.$refs.table0.list.length
+        this.exportTable(this.$refs.table0.getTable(), excelTitle.name)
+      } else if (this.$refs.table1 && this.activeKey == 1) {
+        this.totalNums = this.$refs.table1.list.length
+        this.exportTable(this.$refs.table1.getTable(), excelTitle.name)
+      } else if (this.$refs.table2 && this.activeKey == 2) {
+        this.totalNums = this.$refs.table2.list.length
+        this.exportTable(this.$refs.table2.getTable(), excelTitle.name)
+      } else if (this.$refs.table3 && this.activeKey == 3) {
+        this.totalNums = this.$refs.table3.list.length
+        this.exportTable(this.$refs.table3.getTable(), excelTitle.name)
+      }
+    },
+    // 获取表格数据
+    async getTableData () {
+      const reportType = ['COUNTRY_SALES_DAY', 'DailyPL', 'DailyPLJL', 'AREA_SALES_DAY'][this.activeKey]
+      const reportDate = this.queryParam.month + '-01 00:00:00'
+      this.nowDate = moment().format('DD日HH点mm分')
+      this.spinning = true
+      const data = await salesReportDailyList({ reportType, reportDate }).then(res => res.data)
+      if (data && data.length) {
+        this.tableData = data
+        // 全国销售日报
+        if (this.activeKey == 0) {
+          this.columns = ['', '']
+          data.forEach(item => {
+            this.columns.push(item.subareaName)
+          })
+        }
+        // 项目销售日报1
+        if (this.activeKey == 1) {
+          this.columns = this.getColumns()
+        }
+        // 项目销售日报2
+        if (this.activeKey == 2) {
+          this.columns = [1, 2, 3, 4, 5]
+        }
+        // 分区销售报表
+        if (this.activeKey == 3 && this.$refs.table3) {
+          this.columns = this.$refs.table3.columns
+        }
+        // 初始化页面
+        this.$nextTick(() => {
+          if (this.$refs['table' + this.activeKey]) {
+            this.$refs['table' + this.activeKey].pageInit()
+          }
+        })
+      } else {
+        this.tableData = []
+      }
+      this.spinning = false
+    },
+    getColumns () {
+      const row = this.tableData[0]
+      const ret = []
+      if (row) {
+        row.detailList[0].forEach(item => {
+          ret.push(item)
+        })
+        ret.push(row.bymb)
+        ret.push(row.wcl)
+      }
+      return ret
+    },
+    // 初始化
+    pageInit (activeKey) {
+      this.activeKey = activeKey
+    }
+  },
+  mounted () {
+    if (!this.$store.state.app.isNewTab) { // 页签刷新时调用
+      this.pageInit()
+    }
+  }
+}
+</script>
+<style lang="less" scoped>
+.card-table{
+  height: calc(100vh - 140px);
+  overflow: auto;
+}
+</style>

+ 140 - 171
src/views/reportData/dailyReport/table0.vue

@@ -1,179 +1,36 @@
 <template>
   <div>
     <!-- 全国销售日报 -->
-    <h2 class="table-title">2025年3月 全国销售日报(截止22日17点30分)</h2>
-    <table class="table-box" id="day-table-0">
-      <thead>
+    <table class="table-box" id="day-table-0" v-if="tableData.length">
+      <thead class="ant-table-thead">
         <tr>
-          <th></th>
-          <th></th>
-          <th align="center">销售额</th>
-          <th align="center">东莞服务中心</th>
-          <th align="center">合计</th>
-        </tr>
-      </thead>
-      <tbody>
-        <tr>
-          <td rowspan="12" width="150" align="center" valign="center">品牌</td>
-          <td width="250">年度目标</td>
-          <td align="right">141,150,000.00</td>
-          <td align="right">10,850,000.00</td>
-          <td align="right">152,000,000.00</td>
-        </tr>
-        <tr>
-          <td>截止1-2月销售实际完成</td>
-          <td align="right">11,553,506.00</td>
-          <td align="right">3,199,085.00</td>
-          <td align="right">14,752,590.00</td>
-        </tr>
-        <tr>
-          <td>累计3月销售实际截止完成</td>
-          <td align="right">14,863,711.00</td>
-          <td align="right">3,942,037.00</td>
-          <td align="right">18,805,748.00</td>
-        </tr>
-        <tr>
-          <td>年度完成率</td>
-          <td>12%</td>
-          <td>13%</td>
-          <td>12%</td>
-        </tr>
-        <tr>
-          <td>本月目标</td>
-          <td align="right">9,858,800.00</td>
-          <td align="right">2,481,200.00</td>
-          <td align="right">12,340,000.00</td>
-        </tr>
-        <tr>
-          <td>本月实际销售</td>
-          <td align="right">3,314,024.00</td>
-          <td align="right">743,977.00</td>
-          <td align="right">4,058,001.00</td>
-        </tr>
-        <tr>
-          <td>本月销售实际退货</td>
-          <td align="right">3,818.00</td>
-          <td align="right">1,025.00</td>
-          <td align="right">4,843.00</td>
-        </tr>
-        <tr>
-          <td>本月销售实际完成</td>
-          <td align="right">3,818.00</td>
-          <td align="right">1,025.00</td>
-          <td align="right">4,843.00</td>
-        </tr>
-        <tr>
-          <td>本月达成率</td>
-          <td align="right">3,818.00</td>
-          <td align="right">1,025.00</td>
-          <td align="right">4,843.00</td>
-        </tr>
-        <tr>
-          <td>预估订单</td>
-          <td align="right">3,818.00</td>
-          <td align="right">1,025.00</td>
-          <td align="right">4,843.00</td>
-        </tr>
-        <tr>
-          <td>预估完成</td>
-          <td align="right">3,818.00</td>
-          <td align="right">1,025.00</td>
-          <td align="right">4,843.00</td>
-        </tr>
-        <tr>
-          <td>离目标差额</td>
-          <td align="right">3,818.00</td>
-          <td align="right">1,025.00</td>
-          <td align="right">4,843.00</td>
-        </tr>
-        <tr>
-          <td rowspan="12" width="100" align="center" valign="center">轮胎</td>
-          <td>年度目标</td>
-          <td align="right">141,150,000.00</td>
-          <td align="right">10,850,000.00</td>
-          <td align="right">152,000,000.00</td>
-        </tr>
-        <tr>
-          <td>截止1-2月销售实际完成</td>
-          <td align="right">11,553,506.00</td>
-          <td align="right">3,199,085.00</td>
-          <td align="right">14,752,590.00</td>
-        </tr>
-        <tr>
-          <td>累计3月销售实际截止完成</td>
-          <td align="right">14,863,711.00</td>
-          <td align="right">3,942,037.00</td>
-          <td align="right">18,805,748.00</td>
+          <th :colspan="columns.length">
+            <div class="table-title">{{ dateStr }} 全国销售日报 <span v-if="showDz">(截止{{ nowDate }})</span></div>
+          </th>
         </tr>
         <tr>
-          <td>年度完成率</td>
-          <td>12%</td>
-          <td>13%</td>
-          <td>12%</td>
+          <th v-for="(item,index) in columns" :key="index">{{ item }}</th>
         </tr>
-        <tr>
-          <td>本月目标</td>
-          <td align="right">9,858,800.00</td>
-          <td align="right">2,481,200.00</td>
-          <td align="right">12,340,000.00</td>
-        </tr>
-        <tr>
-          <td>本月实际销售</td>
-          <td align="right">3,314,024.00</td>
-          <td align="right">743,977.00</td>
-          <td align="right">4,058,001.00</td>
-        </tr>
-        <tr>
-          <td>本月销售实际退货</td>
-          <td align="right">3,818.00</td>
-          <td align="right">1,025.00</td>
-          <td align="right">4,843.00</td>
-        </tr>
-        <tr>
-          <td>本月销售实际完成</td>
-          <td align="right">3,818.00</td>
-          <td align="right">1,025.00</td>
-          <td align="right">4,843.00</td>
-        </tr>
-        <tr>
-          <td>本月达成率</td>
-          <td align="right">3,818.00</td>
-          <td align="right">1,025.00</td>
-          <td align="right">4,843.00</td>
-        </tr>
-        <tr>
-          <td>预估订单</td>
-          <td align="right">3,818.00</td>
-          <td align="right">1,025.00</td>
-          <td align="right">4,843.00</td>
-        </tr>
-        <tr>
-          <td>预估完成</td>
-          <td align="right">3,818.00</td>
-          <td align="right">1,025.00</td>
-          <td align="right">4,843.00</td>
-        </tr>
-        <tr>
-          <td>离目标差额</td>
-          <td align="right">3,818.00</td>
-          <td align="right">1,025.00</td>
-          <td align="right">4,843.00</td>
-        </tr>
-        <tr>
-          <td rowspan="2" width="100" align="center" valign="center">品牌+轮胎</td>
-          <td>本月实际销售额</td>
-          <td align="right">141,150,000.00</td>
-          <td align="right">10,850,000.00</td>
-          <td align="right">152,000,000.00</td>
-        </tr>
-        <tr>
-          <td>本月预估完成</td>
-          <td align="right">11,553,506.00</td>
-          <td align="right">3,199,085.00</td>
-          <td align="right">14,752,590.00</td>
+      </thead>
+      <tbody>
+        <tr v-for="item in list" :key="item.key">
+          <td
+            v-for="cols in columns.length"
+            :key="cols+'td'"
+            :width="cols==2?350:150"
+            v-if="item['col'+cols]!==''"
+            :rowspan="hasRowspan(item['col'+cols])[1]"
+            :align="item['col'+cols].indexOf('.')>=0 ? (hasRate(item)&&cols>2?'center':'right'):'center'"
+            :class="item.key=='currRealFinish'||item.key=='currRealTireFinish'?'red':''"
+          >
+            {{ hasRowspan(item['col'+cols])[1] ? hasRowspan(item['col'+cols])[0] : item['col'+cols] }}{{ hasRate(item)&&cols>2?'%':'' }}
+          </td>
         </tr>
       </tbody>
     </table>
+    <div v-else class="noData">
+      暂无数据,请点击查询
+    </div>
   </div>
 </template>
 
@@ -184,11 +41,113 @@ export default {
     tableData: {
       type: Array,
       default: () => []
+    },
+    month: {
+      type: String,
+      default: () => ''
+    },
+    columns: {
+      type: Array,
+      default: () => []
+    },
+    nowDate: {
+      type: String,
+      default: () => ''
+    }
+  },
+  data () {
+    return {
+      months: '',
+      list: [],
+      showDz: false,
+      dateStr: ''
     }
   },
   methods: {
+    getmonths () {
+      this.months = this.month.split('-')[1]
+      this.dateStr = this.month.replace('-', '年') + '月'
+    },
+    getshowDz () {
+      const nowMonths = new Date().getMonth() + 1
+      this.showDz = this.months == nowMonths
+    },
+    getlist () {
+      const rets = []
+      const row1 = [
+        '年度目标|yearTarget',
+        '截止1-' + (this.months - 1) + '月销售实际完成|histSalesReal',
+        '累计' + this.months + '月销售实际截止完成|accuSalesReal',
+        '年度完成率|yearTargetRate',
+        '本月目标|currTarget',
+        '本月实际销售|currSalesReal',
+        '本月销售实际退货|currReturnReal',
+        '本月销售实际完成|currRealFinish',
+        '本月达成率|currTargetRate',
+        '预估订单|currExpect',
+        '预估完成|currExpectFinish',
+        '离目标差额|currTargetDiff'
+      ]
+      const row2 = [
+        '年度目标|yearTargetTire',
+        '截止1-' + (this.months - 1) + '月销售实际完成条数|histSalesRealTireNum',
+        '截止1-' + (this.months - 1) + '月销售实际完成销售额|histSalesRealTireAmount',
+        '累计' + this.months + '月销售实际完成条数|accuSalesRealTireNum',
+        '累计' + this.months + '月销售实际截止完成|accuSalesRealTireAmount',
+        '年度完成率|yearTargetTireRate',
+        '本月目标条数|currTargetTireNum',
+        '本月销售条数|currSalesTireNum',
+        '本月达成率|currTargetTireRate',
+        '本月实际销售|currSalesTireReal',
+        '本月销售实际退货|currReturnTireReal',
+        '本月销售实际完成|currRealTireFinish',
+        '预估订单|currExpectTire',
+        '预估完成|currExpectTireFinish',
+        '离目标差额|currTargetTireDiff'
+      ]
+      const row3 = ['本月实际销售额|totalCurrRealFinish', '本月预估完成|totalCurrExpectFinish']
+      const getRows = function (row, arr, name) {
+        row.forEach((item, i) => {
+          const nameArr = item.split('|')
+          if (i == 0) {
+            arr.push({ col1: name + 'rowspan' + row.length, col2: nameArr[0], key: nameArr[1] })
+          } else {
+            arr.push({ col1: '', col2: nameArr[0], key: nameArr[1] })
+          }
+        })
+      }
+      // 品牌
+      getRows(row1, rets, '品牌')
+      // 轮胎
+      getRows(row2, rets, '轮胎')
+      // 品牌+轮胎
+      getRows(row3, rets, '品牌+轮胎')
+      // 循环列
+      rets.forEach(item => {
+        this.tableData.forEach((cols, i) => {
+          for (const key in cols) {
+            if (key === item.key) {
+              const data = item.col2.indexOf('条数') >= 0 ? String(cols[key]) : Number(cols[key]).toFixed(2)
+              item['col' + (i + 3)] = data
+            }
+          }
+        })
+      })
+      this.list = rets
+    },
+    hasRowspan (row) {
+      return row && row.toString().split('rowspan')
+    },
+    hasRate (row) {
+      return ['yearTargetRate', 'currTargetRate', 'yearTargetTireRate', 'currTargetTireRate'].includes(row.key)
+    },
     getTable () {
       return document.getElementById('day-table-0')
+    },
+    pageInit () {
+      this.getmonths()
+      this.getshowDz()
+      this.getlist()
     }
   }
 }
@@ -196,25 +155,35 @@ export default {
 
 <style lang="less" scoped>
   .table-title{
-    margin-bottom: 10px;
     font-size: 16px;
     font-weight: bold;
     width: 100%;
-    max-width: 1024px;
+    max-width: 1400px;
     text-align: center;
   }
+  .noData{
+    width: 100%;
+    text-align: center;
+    font-size: 16px;
+    color: #999;
+    min-height: 300px;
+    line-height: 300px;
+  }
   .table-box{
     width: 100%;
-    max-width: 1024px;
+    max-width: 1400px;
     font-size: 14px;
+    .red{
+      color: red;
+    }
     tr > th{
       padding: 6px 8px;
-      border: 1px solid #eee;
+      border: 1px solid #dedede;
       text-align: center;
     }
     tr > td{
       padding: 5px;
-      border: 1px solid #eee;
+      border: 1px solid #dedede;
     }
     tr{
       &:hover{

+ 46 - 19
src/views/reportData/dailyReport/table1.vue

@@ -1,9 +1,13 @@
 <template>
   <div>
     <!-- 项目销售日报 -->
-    <h2 class="table-title" v-if="tableData.length">{{ month.replace('-','年')+'月' }} 项目销售日报(截止{{ nowDate }})</h2>
     <table class="table-box" id="day-table-1" v-if="tableData.length">
-      <thead>
+      <thead class="ant-table-thead">
+        <tr>
+          <th :colspan="columns.length">
+            <div class="table-title">{{ dateStr }} 项目销售日报1 <span v-if="showDz">(截止{{ nowDate }})</span></div>
+          </th>
+        </tr>
         <tr>
           <th v-for="item in columns" :key="item">{{ item }}</th>
         </tr>
@@ -16,9 +20,9 @@
             :key="tdi+'td'"
             :rowspan="hasRowspan(td)[1]"
             :align="typeof td == 'number' ? 'right':'center'"
-            :class="hasRed(td)?'red':''"
+            :class="hasRed(td)||hasHj(sitem,index,td,tdi)?'red':''"
           >
-            {{ hasRowspan(td)[1] ? hasRowspan(td)[0] : td }}
+            {{ hasRowspan(td)[1] ? hasRowspan(td)[0] : tdi > 0 ? Number(td).toFixed(2) : td }}
           </td>
         </tr>
       </tbody>
@@ -31,7 +35,7 @@
 
 <script>
 export default {
-  name: 'Table0',
+  name: 'Table1',
   props: {
     tableData: {
       type: Array,
@@ -50,8 +54,24 @@ export default {
       default: () => ''
     }
   },
-  computed: {
-    list () {
+  data () {
+    return {
+      months: '',
+      list: [],
+      showDz: false,
+      dateStr: ''
+    }
+  },
+  methods: {
+    getmonths () {
+      this.months = this.month.split('-')[1]
+      this.dateStr = this.month.replace('-', '年') + '月'
+    },
+    getshowDz () {
+      const nowMonths = new Date().getMonth() + 1
+      this.showDz = this.months == nowMonths
+    },
+    getlist () {
       let rets = []
       this.tableData.forEach((item, i) => {
         if (i > 0) {
@@ -59,19 +79,27 @@ export default {
           rets = rets.concat(item.detailList)
         }
       })
-      return rets
-    }
-  },
-  methods: {
+      this.list = rets
+    },
     hasRowspan (row) {
       return row.toString().split('rowspan')
     },
-    hasRed (row) {
+    hasHj (a, b, c, d) {
+      const hj = this.columns.findIndex(item => item == '销售额合计')
+      const arr = ['合计', '箭牌喇叭', '制动系统']
+      return (d == hj && arr.find(item => a.toString().indexOf(item) >= 0))
+    },
+    hasRed (row, tdi) {
       const arr = ['合计', '箭牌喇叭', '制动系统']
       return arr.find(item => row.toString().indexOf(item) >= 0)
     },
     getTable () {
       return document.getElementById('day-table-1')
+    },
+    pageInit () {
+      this.getmonths()
+      this.getshowDz()
+      this.getlist()
     }
   }
 }
@@ -79,11 +107,10 @@ export default {
 
 <style lang="less" scoped>
   .table-title{
-    margin-bottom: 10px;
     font-size: 16px;
     font-weight: bold;
     width: 100%;
-    max-width: 1024px;
+    max-width: 1400px;
     text-align: center;
   }
   .noData{
@@ -91,24 +118,24 @@ export default {
     text-align: center;
     font-size: 16px;
     color: #999;
-    min-height: 100px;
-    line-height: 100px;
+    min-height: 300px;
+    line-height: 300px;
   }
   .table-box{
     width: 100%;
-    max-width: 1024px;
+    max-width: 1400px;
     font-size: 14px;
     .red{
       color: red;
     }
     tr > th{
       padding: 6px 8px;
-      border: 1px solid #eee;
+      border: 1px solid #dedede;
       text-align: center;
     }
     tr > td{
       padding: 5px;
-      border: 1px solid #eee;
+      border: 1px solid #dedede;
     }
     tr{
       &:hover{

+ 44 - 20
src/views/reportData/dailyReport/table2.vue

@@ -2,19 +2,23 @@
   <div>
     <div v-if="tableData.length">
       <!-- 全国销售日报 -->
-      <h2 class="table-title">{{ month.replace('-','年')+'月' }}全国销售日报2(截止{{ nowDate }})</h2>
       <table class="table-box" id="day-table-2" >
-        <thead>
+        <thead class="ant-table-thead">
+          <tr>
+            <th :colspan="cloumns.length">
+              <div class="table-title">{{ dateStr }} 项目销售日报2 <span v-if="showDz">(截止{{ nowDate }})</span></div>
+            </th>
+          </tr>
           <tr>
             <th v-for="item in cloumns" :key="item">{{ item }}</th>
           </tr>
         </thead>
         <tbody>
           <tr v-for="(item,index) in list" :key="index">
-            <td width="150" align="center">{{ item.proName }}</td>
+            <td align="center">{{ item.proName }}</td>
             <td align="center">{{ item.userName }}</td>
-            <td align="center">{{ item.bymb }}</td>
-            <td align="center">{{ item.amount }}</td>
+            <td align="center">{{ Number(item.bymb).toFixed(2) }}</td>
+            <td align="center">{{ Number(item.amount).toFixed(2) }}</td>
             <td align="center" class="red">{{ item.wcl }}</td>
           </tr>
         </tbody>
@@ -28,7 +32,7 @@
 
 <script>
 export default {
-  name: 'Table0',
+  name: 'Table2',
   props: {
     tableData: {
       type: Array,
@@ -43,18 +47,39 @@ export default {
       default: () => ''
     }
   },
-  computed: {
-    list () {
-      return this.tableData
-    },
-    cloumns () {
-      const m = this.month.split('-')
-      return ['项目', '品类经理', m[1] + '月业绩目标', m[1] + '月销售额截止达成', '达成率']
+  data () {
+    return {
+      months: '',
+      list: [],
+      showDz: false,
+      dateStr: '',
+      cloumns: []
     }
   },
   methods: {
+    getcloumns () {
+      const m = this.month.split('-')
+      this.cloumns = ['项目', '品类经理', m[1] + '月业绩目标', m[1] + '月销售额截止达成', '达成率']
+    },
+    getmonths () {
+      this.months = this.month.split('-')[1]
+      this.dateStr = this.month.replace('-', '年') + '月'
+    },
+    getshowDz () {
+      const nowMonths = new Date().getMonth() + 1
+      this.showDz = this.months == nowMonths
+    },
+    getlist () {
+      this.list = this.tableData
+    },
     getTable () {
       return document.getElementById('day-table-2')
+    },
+    pageInit () {
+      this.getmonths()
+      this.getcloumns()
+      this.getshowDz()
+      this.getlist()
     }
   }
 }
@@ -62,11 +87,10 @@ export default {
 
 <style lang="less" scoped>
   .table-title{
-    margin-bottom: 10px;
     font-size: 16px;
     font-weight: bold;
     width: 100%;
-    max-width: 1024px;
+    max-width: 1400px;
     text-align: center;
   }
   .noData{
@@ -74,24 +98,24 @@ export default {
     text-align: center;
     font-size: 16px;
     color: #999;
-    min-height: 100px;
-    line-height: 100px;
+    min-height: 300px;
+    line-height: 300px;
   }
   .table-box{
     width: 100%;
-    max-width: 1024px;
+    max-width: 1400px;
     font-size: 14px;
     .red{
       color: red;
     }
     tr > th{
       padding: 6px 8px;
-      border: 1px solid #eee;
+      border: 1px solid #dedede;
       text-align: center;
     }
     tr > td{
       padding: 5px;
-      border: 1px solid #eee;
+      border: 1px solid #dedede;
     }
     tr{
       &:hover{

+ 197 - 174
src/views/reportData/dailyReport/table3.vue

@@ -1,217 +1,240 @@
 <template>
   <div>
-    <!-- 全国销售日报 -->
-    <h2 class="table-title">2025年3月 全国销售日报(截止22日17点30分)</h2>
-    <table class="table-box">
-      <thead>
-        <tr>
-          <th></th>
-          <th></th>
-          <th>销售额</th>
-          <th>东莞服务中心</th>
-          <th>合计</th>
+    <!-- 分区销售日报 -->
+    <table class="table-box" id="day-table-3" v-if="tableData.length">
+      <thead class="ant-table-thead">
+        <tr>
+          <th :colspan="columns.length">
+            <div class="table-title">{{ dateStr }} 分区销售日报 <span v-if="showDz">(截止{{ nowDate }})</span></div>
+          </th>
+        </tr>
+        <tr>
+          <th key="managerNameList" rowspan="2" style="text-align: center;">
+            <span class="ant-table-header-column"><div><span class="ant-table-column-title">区域负责人</span><span class="ant-table-column-sorter"></span></div></span>
+          </th>
+          <th key="subareaAreaName" rowspan="2" style="text-align: center;">
+            <span class="ant-table-header-column"><div><span class="ant-table-column-title">分区</span><span class="ant-table-column-sorter"></span></div></span>
+          </th>
+          <th key="2" colspan="8" class="ant-table-align-center" style="text-align: center;"><span class="ant-table-header-column"><div><span class="ant-table-column-title">品牌</span><span class="ant-table-column-sorter"></span></div></span></th>
+          <th key="3" colspan="4" class="ant-table-align-center" style="text-align: center;"><span class="ant-table-header-column"><div><span class="ant-table-column-title">轮胎</span><span class="ant-table-column-sorter"></span></div></span></th>
+          <th key="4" colspan="1" class="ant-table-align-center ant-table-row-cell-last" style="text-align: center;"><span class="ant-table-header-column"><div><span class="ant-table-column-title">品牌+轮胎</span><span class="ant-table-column-sorter"></span></div></span></th>
+        </tr>
+        <tr>
+          <th style="text-align: center;"><span class="ant-table-header-column"><div><span class="ant-table-column-title">年度目标</span><span class="ant-table-column-sorter"></span></div></span></th>
+          <th style="text-align: center;"><span class="ant-table-header-column"><div><span class="ant-table-column-title">截止1-{{ months-1 }}月完成</span><span class="ant-table-column-sorter"></span></div></span></th>
+          <th style="text-align: center;"><span class="ant-table-header-column"><div><span class="ant-table-column-title">{{ months }}月销售额截止达成</span><span class="ant-table-column-sorter"></span></div></span></th>
+          <th style="text-align: center;"><span class="ant-table-header-column"><div><span class="ant-table-column-title">累计{{ months }}月截止完成</span><span class="ant-table-column-sorter"></span></div></span></th>
+          <th style="text-align: center;"><span class="ant-table-header-column"><div><span class="ant-table-column-title red">年度完成率</span><span class="ant-table-column-sorter"></span></div></span></th>
+          <th style="text-align: center;"><span class="ant-table-header-column"><div><span class="ant-table-column-title">{{ months }}月业绩目标</span><span class="ant-table-column-sorter"></span></div></span></th>
+          <th style="text-align: center;"><span class="ant-table-header-column"><div><span class="ant-table-column-title red">达成率</span><span class="ant-table-column-sorter"></span></div></span></th>
+          <th style="text-align: center;"><span class="ant-table-header-column"><div><span class="ant-table-column-title">今日销售额</span><span class="ant-table-column-sorter"></span></div></span></th>
+          <th style="text-align: center;"><span class="ant-table-header-column"><div><span class="ant-table-column-title">截止1-{{ months-1 }}月销售额</span><span class="ant-table-column-sorter"></span></div></span></th>
+          <th style="text-align: center;"><span class="ant-table-header-column"><div><span class="ant-table-column-title">{{ months }}月销售额截止达成</span><span class="ant-table-column-sorter"></span></div></span></th>
+          <th style="text-align: center;"><span class="ant-table-header-column"><div><span class="ant-table-column-title">累计{{ months }}月截止完成</span><span class="ant-table-column-sorter"></span></div></span></th>
+          <th style="text-align: center;"><span class="ant-table-header-column"><div><span class="ant-table-column-title">今日销售额</span><span class="ant-table-column-sorter"></span></div></span></th>
+          <th class="ant-table-align-center ant-table-row-cell-break-word ant-table-row-cell-last" style="text-align: center;"><span class="ant-table-header-column"><div><span class="ant-table-column-title">{{ months }}月销售额截止达成</span><span class="ant-table-column-sorter"></span></div></span></th>
         </tr>
       </thead>
       <tbody>
-        <tr>
-          <td rowspan="12" width="150" align="center">品牌</td>
-          <td width="250">年度目标</td>
-          <td align="right">141,150,000.00</td>
-          <td align="right">10,850,000.00</td>
-          <td align="right">152,000,000.00</td>
-        </tr>
-        <tr>
-          <td>截止1-2月销售实际完成</td>
-          <td align="right">11,553,506.00</td>
-          <td align="right">3,199,085.00</td>
-          <td align="right">14,752,590.00</td>
-        </tr>
-        <tr>
-          <td>累计3月销售实际截止完成</td>
-          <td align="right">14,863,711.00</td>
-          <td align="right">3,942,037.00</td>
-          <td align="right">18,805,748.00</td>
-        </tr>
-        <tr>
-          <td>年度完成率</td>
-          <td>12%</td>
-          <td>13%</td>
-          <td>12%</td>
-        </tr>
-        <tr>
-          <td>本月目标</td>
-          <td align="right">9,858,800.00</td>
-          <td align="right">2,481,200.00</td>
-          <td align="right">12,340,000.00</td>
-        </tr>
-        <tr>
-          <td>本月实际销售</td>
-          <td align="right">3,314,024.00</td>
-          <td align="right">743,977.00</td>
-          <td align="right">4,058,001.00</td>
-        </tr>
-        <tr>
-          <td>本月销售实际退货</td>
-          <td align="right">3,818.00</td>
-          <td align="right">1,025.00</td>
-          <td align="right">4,843.00</td>
-        </tr>
-        <tr>
-          <td>本月销售实际完成</td>
-          <td align="right">3,818.00</td>
-          <td align="right">1,025.00</td>
-          <td align="right">4,843.00</td>
-        </tr>
-        <tr>
-          <td>本月达成率</td>
-          <td align="right">3,818.00</td>
-          <td align="right">1,025.00</td>
-          <td align="right">4,843.00</td>
-        </tr>
-        <tr>
-          <td>预估订单</td>
-          <td align="right">3,818.00</td>
-          <td align="right">1,025.00</td>
-          <td align="right">4,843.00</td>
-        </tr>
-        <tr>
-          <td>预估完成</td>
-          <td align="right">3,818.00</td>
-          <td align="right">1,025.00</td>
-          <td align="right">4,843.00</td>
-        </tr>
-        <tr>
-          <td>离目标差额</td>
-          <td align="right">3,818.00</td>
-          <td align="right">1,025.00</td>
-          <td align="right">4,843.00</td>
-        </tr>
-        <tr>
-          <td rowspan="12" width="100" align="center">轮胎</td>
-          <td>年度目标</td>
-          <td align="right">141,150,000.00</td>
-          <td align="right">10,850,000.00</td>
-          <td align="right">152,000,000.00</td>
-        </tr>
-        <tr>
-          <td>截止1-2月销售实际完成</td>
-          <td align="right">11,553,506.00</td>
-          <td align="right">3,199,085.00</td>
-          <td align="right">14,752,590.00</td>
-        </tr>
-        <tr>
-          <td>累计3月销售实际截止完成</td>
-          <td align="right">14,863,711.00</td>
-          <td align="right">3,942,037.00</td>
-          <td align="right">18,805,748.00</td>
-        </tr>
-        <tr>
-          <td>年度完成率</td>
-          <td>12%</td>
-          <td>13%</td>
-          <td>12%</td>
-        </tr>
-        <tr>
-          <td>本月目标</td>
-          <td align="right">9,858,800.00</td>
-          <td align="right">2,481,200.00</td>
-          <td align="right">12,340,000.00</td>
-        </tr>
-        <tr>
-          <td>本月实际销售</td>
-          <td align="right">3,314,024.00</td>
-          <td align="right">743,977.00</td>
-          <td align="right">4,058,001.00</td>
-        </tr>
-        <tr>
-          <td>本月销售实际退货</td>
-          <td align="right">3,818.00</td>
-          <td align="right">1,025.00</td>
-          <td align="right">4,843.00</td>
-        </tr>
-        <tr>
-          <td>本月销售实际完成</td>
-          <td align="right">3,818.00</td>
-          <td align="right">1,025.00</td>
-          <td align="right">4,843.00</td>
-        </tr>
-        <tr>
-          <td>本月达成率</td>
-          <td align="right">3,818.00</td>
-          <td align="right">1,025.00</td>
-          <td align="right">4,843.00</td>
-        </tr>
-        <tr>
-          <td>预估订单</td>
-          <td align="right">3,818.00</td>
-          <td align="right">1,025.00</td>
-          <td align="right">4,843.00</td>
-        </tr>
-        <tr>
-          <td>预估完成</td>
-          <td align="right">3,818.00</td>
-          <td align="right">1,025.00</td>
-          <td align="right">4,843.00</td>
-        </tr>
-        <tr>
-          <td>离目标差额</td>
-          <td align="right">3,818.00</td>
-          <td align="right">1,025.00</td>
-          <td align="right">4,843.00</td>
-        </tr>
-        <tr>
-          <td rowspan="2" width="100" align="center">品牌+轮胎</td>
-          <td>本月实际销售额</td>
-          <td align="right">141,150,000.00</td>
-          <td align="right">10,850,000.00</td>
-          <td align="right">152,000,000.00</td>
-        </tr>
-        <tr>
-          <td>本月预估完成</td>
-          <td align="right">11,553,506.00</td>
-          <td align="right">3,199,085.00</td>
-          <td align="right">14,752,590.00</td>
+        <tr v-for="(item, index) in list" :key="index">
+          <td
+            v-for="(sitem,si) in columns"
+            :key="sitem.dataIndex+index"
+            :class="sitem.title.indexOf('率')>=0?'red '+(hjRow.indexOf(index)>=0?'hj':''):(hjRow.indexOf(index)>=0?'hj':'')"
+            style="text-align: center;"
+            v-if="!(index==list.length-1&&si==0)"
+            :colspan="index==list.length-1&&si==1?2:1"
+            :style="index==list.length-1?'color: red;font-weight:bold;background:#dfdeff;border-color:#c7c7ff;':''"
+          >
+            {{ si>1 ? Number(item[sitem.dataIndex]).toFixed(2) : item[sitem.dataIndex].toString() }}{{ sitem.title.indexOf('率')>=0?'%':'' }}
+          </td>
         </tr>
       </tbody>
     </table>
+    <div v-else class="noData">
+      暂无数据,请点击查询
+    </div>
   </div>
 </template>
 
 <script>
 export default {
-  name: 'Table0',
+  name: 'Table3',
   props: {
     tableData: {
       type: Array,
       default: () => []
+    },
+    month: {
+      type: String,
+      default: () => ''
+    },
+    nowDate: {
+      type: String,
+      default: () => ''
+    }
+  },
+  data () {
+    return {
+      months: '',
+      list: [],
+      showDz: false,
+      dateStr: ''
+    }
+  },
+  computed: {
+    hjRow () {
+      const ret = []
+      this.list.forEach((item, index) => {
+        if (item.subareaAreaName.indexOf('合计') >= 0 || item.subareaAreaName.indexOf('云南省') >= 0) {
+          ret.push(index)
+        }
+      })
+      return ret
+    },
+    columns () {
+      return [
+        {
+          title: '区域负责人',
+          dataIndex: 'managerNameList',
+          align: 'center',
+          width: '250'
+        },
+        {
+          title: '分区',
+          dataIndex: 'subareaAreaName',
+          align: 'center',
+          width: '250'
+        },
+        {
+          title: '年度目标',
+          dataIndex: 'yearTarget',
+          align: 'center',
+          width: '100'
+        },
+        {
+          title: '截止1-' + (this.months - 1) + '月完成',
+          dataIndex: 'histSalesReal',
+          align: 'center',
+          width: '100'
+        }, {
+          title: this.months + '月销售额截止达成',
+          dataIndex: 'currSalesReal',
+          align: 'center',
+          width: '130'
+        }, {
+          title: '累计' + this.months + '月截止完成',
+          dataIndex: 'accuSalesReal',
+          align: 'center',
+          width: '100'
+        }, {
+          title: '年度完成率',
+          dataIndex: 'yearTargetRate',
+          align: 'center',
+          width: '100'
+        }, {
+          title: this.months + '月业绩目标',
+          dataIndex: 'currTarget',
+          align: 'center',
+          width: '100'
+        }, {
+          title: '达成率',
+          dataIndex: 'currTargetRate',
+          align: 'center',
+          width: '100'
+        }, {
+          title: '今日销售额',
+          dataIndex: 'todaySalesReal',
+          align: 'center',
+          width: '100'
+        },
+        {
+          title: '截止1-' + (this.months - 1) + '月销售额',
+          dataIndex: 'histSalesRealTireAmount',
+          align: 'center',
+          width: '100'
+        }, {
+          title: this.months + '月销售额截止达成',
+          dataIndex: 'currSalesTireReal',
+          align: 'center',
+          width: '130'
+        }, {
+          title: '累计' + this.months + '月截止完成',
+          dataIndex: 'accuSalesRealTireAmount',
+          align: 'center',
+          width: '100'
+        }, {
+          title: '今日销售额',
+          dataIndex: 'todaySalesTireReal',
+          align: 'center',
+          width: '100'
+        },
+        {
+          title: this.months + '月销售额截止达成',
+          dataIndex: 'totalCurrSalesTireReal',
+          align: 'center',
+          width: '130'
+        }
+      ]
     }
   },
   methods: {
+    getmonths () {
+      this.months = this.month.split('-')[1]
+      this.dateStr = this.month.replace('-', '年') + '月'
+    },
+    getshowDz () {
+      const nowMonths = new Date().getMonth() + 1
+      this.showDz = this.months == nowMonths
+    },
+    getlist () {
+      this.list = this.tableData
+    },
+    getTable () {
+      return document.getElementById('day-table-3')
+    },
+    pageInit () {
+      this.getmonths()
+      this.getshowDz()
+      this.getlist()
+    }
   }
 }
 </script>
 
 <style lang="less" scoped>
   .table-title{
-    margin-bottom: 10px;
     font-size: 16px;
     font-weight: bold;
     width: 100%;
-    max-width: 1024px;
     text-align: center;
   }
+  .noData{
+    width: 100%;
+    text-align: center;
+    font-size: 16px;
+    color: #999;
+    min-height: 300px;
+    line-height: 300px;
+  }
   .table-box{
     width: 100%;
-    max-width: 1024px;
     font-size: 14px;
     tr > th{
       padding: 6px 8px;
-      border: 1px solid #eee;
+      border: 1px solid #dedede;
       text-align: center;
     }
+    .red{
+      color: red;
+    }
+    .hj{
+      font-weight: bold;
+      background-color: #f4f5ff;
+    }
     tr > td{
       padding: 5px;
-      border: 1px solid #eee;
+      border: 1px solid #dedede;
     }
     tr{
       &:hover{

+ 10 - 11
src/views/setting/dailyReportSettings/categoryTargetList.vue

@@ -18,8 +18,7 @@
                   style="width: 100%"
                   placeholder="请选择年份"
                   :value="queryParam.confYear"
-                  @change="changeYear"
-                  s>
+                  @change="changeYear">
                   <a-select-option :id="'estimatedOrderList-'+item" v-for="item in years" :value="item" :key="item">
                     {{ item }}
                   </a-select-option>
@@ -58,7 +57,6 @@
           :defaultLoadData="false"
           :showPagination="false"
           bordered>
-          <!-- $hasPermissions('B_tireSubsidySetting_edit')&& -->
           <!-- 1月~12月 -->
           <template
             v-for="col in 12"
@@ -71,12 +69,12 @@
                 v-if="record.editable"
                 size="small"
                 :min="0"
-                :max="999999999"
+                :max="999999999.99"
                 placeholder="请输入"
                 :value="text"
                 :precision="2"
                 :id="'estimatedOrderList-input-'+record.id"
-                @change="e => handleChange(e,record, col)" />
+                @blur="e => handleChange(e.target.value,record, col)"/>
               <template v-else>
                 {{ text?toThousands(text):'0.00' }}
               </template>
@@ -119,7 +117,6 @@
 
 <script>
 import { commonMixin } from '@/utils/mixin'
-import debounce from 'lodash/debounce'
 // 组件
 import { STable } from '@/components'
 // 接口
@@ -135,8 +132,6 @@ export default {
     }
   },
   data () {
-    const _this = this
-    _this.handleChange = debounce(_this.handleChange, 800)
     return {
       spinning: false,
       disabled: false, //  查询、重置按钮是否可操作
@@ -190,7 +185,7 @@ export default {
     columns () {
       const _this = this
       const arr = [
-        { title: (_this.pageType === 'CATEGORY_MONTHLY_TARGET' ? '类别' : '项目'), dataIndex: 'productTypeName', width: '12%', align: 'center', customRender: function (text) { return text || '--' }, ellipsis: true },
+        { title: (_this.pageType === 'CATEGORY_MONTHLY_TARGET' ? '类别' : '项目'), dataIndex: 'productTypeName', width: '12%', align: 'center', customRender: function (text) { return text || '--' } },
         { title: '1月', dataIndex: 'value01', width: '8%', align: 'right', scopedSlots: { customRender: 'month1' } },
         { title: '2月', dataIndex: 'value02', width: '8%', align: 'right', scopedSlots: { customRender: 'month2' } },
         { title: '3月', dataIndex: 'value03', width: '8%', align: 'right', scopedSlots: { customRender: 'month3' } },
@@ -235,6 +230,7 @@ export default {
     handleSearch () {
       this.$refs.ruleForm.validate(valid => {
         if (valid) {
+          this.editingKey = ''
           this.$refs.table.refresh(true)
         } else {
           this.$message.error('请选择年份')
@@ -278,7 +274,7 @@ export default {
     handleChange (val, row, column) {
       const _this = this
       const newColumn = _this.padZero(column)
-      row['value' + newColumn] = val
+      row['value' + newColumn] = val || 0
       row.summation = _this.calculateTotal(row)
       // _this.dataSources[column * 1 - 1] = row
     },
@@ -320,7 +316,10 @@ export default {
 }
 </script>
 <style lang="less" scoped>
-::v-deep.button-info[disabled] {
+/deep/.button-info[disabled] {
   color: gray;
 }
+/deep/.ant-input-number-handler-wrap {
+  display: none;
+}
 </style>

+ 11 - 11
src/views/setting/dailyReportSettings/estimatedOrderList.vue

@@ -69,14 +69,14 @@
                 v-if="record.editable"
                 size="small"
                 :min="0"
-                :max="999999999"
+                :max="pageType === 'REGIONAL_ESTIMATED_ORDER'?999999999.99:999999999"
                 placeholder="请输入"
-                :precision="0"
+                :precision="pageType === 'REGIONAL_ESTIMATED_ORDER'?2:0"
                 :value="text"
                 :id="'estimatedOrderList-input-'+record.id"
-                @change="e => handleChange(e,record, col)" />
+                @blur="e => handleChange(e.target.value,record, col)" />
               <template v-else>
-                {{ text }}
+                {{ pageType === 'REGIONAL_ESTIMATED_ORDER'?toThousands(text) :text }}
               </template>
             </div>
           </template>
@@ -117,7 +117,6 @@
 
 <script>
 import { commonMixin } from '@/utils/mixin'
-import debounce from 'lodash/debounce'
 // 组件
 import { STable } from '@/components'
 // 接口
@@ -133,8 +132,6 @@ export default {
     }
   },
   data () {
-    const _this = this
-    _this.handleChange = debounce(_this.handleChange, 800)
     return {
       spinning: false,
       disabled: false, //  查询、重置按钮是否可操作
@@ -205,7 +202,7 @@ export default {
         { title: '10月', dataIndex: 'value10', width: '8%', align: 'right', scopedSlots: { customRender: 'month10' } },
         { title: '11月', dataIndex: 'value11', width: '8%', align: 'right', scopedSlots: { customRender: 'month11' } },
         { title: '12月', dataIndex: 'value12', width: '8%', align: 'right', scopedSlots: { customRender: 'month12' } },
-        { title: '合计', dataIndex: 'summation', width: '11%', align: 'right', customRender: function (text) { return ((text || text == 0) ? text : '--') } },
+        { title: '合计', dataIndex: 'summation', width: '11%', align: 'right', customRender: function (text) { return ((text || text == 0) ? (_this.pageType === 'REGIONAL_ESTIMATED_ORDER' ? _this.toThousands(text) : text) : '--') } },
         { title: '操作', scopedSlots: { customRender: 'action' }, width: '11%', align: 'center' }
       ]
       if (_this.pageType === 'REGIONAL_ESTIMATED_ORDER') {
@@ -246,6 +243,7 @@ export default {
     handleSearch () {
       this.$refs.ruleForm.validate(valid => {
         if (valid) {
+          this.editingKey = ''
           this.$refs.table.refresh(true)
         } else {
           this.$message.error('请选择年份')
@@ -289,7 +287,7 @@ export default {
     handleChange (val, row, column) {
       const _this = this
       const newColumn = _this.padZero(column)
-      row['value' + newColumn] = val
+      row['value' + newColumn] = val || 0
       row.summation = _this.calculateTotal(row)
       // _this.dataSources[column * 1 - 1] = row
     },
@@ -301,7 +299,6 @@ export default {
     calculateTotal (rowData) {
       const keys = Array.from({ length: 12 }, (_, i) => 'value' + this.padZero(i + 1))
       const totalNum = keys.reduce((sum, key) => sum + (Number(rowData[key]) || 0), 0)
-      console.log('sdsdsd:', totalNum)
       return totalNum
     },
     //  重置
@@ -331,7 +328,10 @@ export default {
 }
 </script>
 <style lang="less" scoped>
-::v-deep.button-info[disabled] {
+/deep/.button-info[disabled] {
   color: gray;
 }
+/deep/.ant-input-number-handler-wrap {
+  display: none;
+}
 </style>

+ 7 - 6
src/views/setting/dailyReportSettings/partitionTargetList.vue

@@ -70,12 +70,12 @@
                 v-if="record.editable"
                 size="small"
                 :min="0"
-                :max="999999999"
+                :max="999999999.99"
                 placeholder="请输入"
                 :precision="2"
                 :value="text"
                 :id="'estimatedOrderList-input-'+record.id"
-                @change="e => handleChange(e,record, col)" />
+                @blur="e => handleChange(e.target.value,record, col)"/>
               <template v-else>
                 {{ text?toThousands(text):'0.00' }}
               </template>
@@ -118,7 +118,6 @@
 
 <script>
 import { commonMixin } from '@/utils/mixin'
-import debounce from 'lodash/debounce'
 // 组件
 import { STable } from '@/components'
 // 接口
@@ -134,8 +133,6 @@ export default {
     }
   },
   data () {
-    const _this = this
-    _this.handleChange = debounce(_this.handleChange, 800)
     return {
       spinning: false,
       disabled: false, //  查询、重置按钮是否可操作
@@ -258,6 +255,7 @@ export default {
     handleSearch () {
       this.$refs.ruleForm.validate(valid => {
         if (valid) {
+          this.editingKey = ''
           this.$refs.table.refresh(true)
         } else {
           this.$message.error('请选择年份')
@@ -301,7 +299,7 @@ export default {
     handleChange (val, row, column) {
       const _this = this
       const newColumn = _this.padZero(column)
-      row['value' + newColumn] = val
+      row['value' + newColumn] = val || 0
       row.summation = _this.calculateTotal(row)
       // _this.dataSources[column * 1 - 1] = row
     },
@@ -354,4 +352,7 @@ export default {
     bottom: 0;
     z-index: 2;
   }
+/deep/.ant-input-number-handler-wrap {
+    display: none;
+  }
 </style>

+ 2 - 3
vue.config.js

@@ -60,7 +60,6 @@ const vueConfig = {
   chainWebpack: (config) => {
     config.resolve.alias
       .set('@$', resolve('src'))
-
     const svgRule = config.module.rule('svg')
     svgRule.uses.clear()
     svgRule
@@ -108,9 +107,9 @@ const vueConfig = {
     // If you want to turn on the proxy, please remosve the mockjs /src/main.jsL11
     proxy: {
       '/api': {
-        target: 'http://192.168.2.132/ocs-admin',
+        // target: 'http://192.168.2.10/ocs-admin',
         // target: 'https://t.ocs.360arrow.com/ocs-admin', //  练习
-        // target: 'https://p.ocs.360arrow.com/ocs-admin', //  预发布
+        target: 'https://p.ocs.360arrow.com/ocs-admin', //  预发布
         ws: false,
         changeOrigin: true,
         pathRewrite: {