Эх сурвалжийг харах

1, 修改数据列表无法刷新的问题;
2, 修改时间选择,后端按照年实现的,前端同样按照年份选择实现;
3,修改环比同比计算;
4,回款金额统计bug修复。

scholar 10 сар өмнө
parent
commit
f4dd1bed63

+ 7 - 6
src/views/crm/statistics/performance/components/ContractCountPerformance.vue

@@ -1,4 +1,4 @@
-<!-- 客户总量统计 -->
+<!-- 员工业绩统计 -->
 <template>
   <!-- Echarts图 -->
   <el-card shadow="never">
@@ -180,6 +180,7 @@ const loadData = async () => {
 
   // 2.2 更新列表数据
   list.value = performanceList
+  convertListData()
   loading.value = false
 
 }
@@ -189,9 +190,10 @@ const columnsData = reactive([]);
 const tableData = reactive([{title: '当月合同数量统计(个)'}, {title: '上月合同数量统计(个)'},
   {title: '去年当月合同数量统计(个)'}, {title: '同比增长率(%)'}, {title: '环比增长率(%)'}])
 
-// 定义 init 方法
-const init = () => {
+// 定义 convertListData 方法,数据行列转置,展示每月数据
+const convertListData = () => {
   const columnObj = {label: '日期', prop: 'title'}
+  columnsData.splice(0, columnsData.length);//清空数组
   columnsData.push(columnObj)
 
   list.value.forEach((item, index) => {
@@ -200,8 +202,8 @@ const init = () => {
     tableData[0]['prop' + index] = item.currentMonthCount
     tableData[1]['prop' + index] = item.lastMonthCount
     tableData[2]['prop' + index] = item.lastYearCount
-    tableData[3]['prop' + index] = item.lastYearCount !== 0 ? (item.currentMonthCount / item.lastYearCount).toFixed(2) : 'NULL'
-    tableData[4]['prop' + index] = item.lastMonthCount !== 0 ? (item.currentMonthCount / item.lastMonthCount).toFixed(2) : 'NULL'
+    tableData[3]['prop' + index] = item.lastMonthCount !== 0 ? (item.currentMonthCount / item.lastMonthCount).toFixed(2) : 'NULL'
+    tableData[4]['prop' + index] = item.lastYearCount !== 0 ? (item.currentMonthCount / item.lastYearCount).toFixed(2) : 'NULL'
   })
 }
 
@@ -210,6 +212,5 @@ defineExpose({ loadData })
 /** 初始化 */
 onMounted(async () => {
   await loadData()
-  init()
 })
 </script>

+ 6 - 5
src/views/crm/statistics/performance/components/ContractPricePerformance.vue

@@ -1,4 +1,4 @@
-<!-- 客户总量统计 -->
+<!-- 员工业绩统计 -->
 <template>
   <!-- Echarts图 -->
   <el-card shadow="never">
@@ -180,6 +180,7 @@ const loadData = async () => {
 
   // 2.2 更新列表数据
   list.value = performanceList
+  convertListData()
   loading.value = false
 
 }
@@ -190,8 +191,9 @@ const tableData = reactive([{title: '当月合同金额统计(元)'}, {title
   {title: '同比增长率(%)'}, {title: '环比增长率(%)'}])
 
 // 定义 init 方法
-const init = () => {
+const convertListData = () => {
   const columnObj = {label: '日期', prop: 'title'}
+  columnsData.splice(0, columnsData.length)//清空数组
   columnsData.push(columnObj)
 
   list.value.forEach((item, index) => {
@@ -200,8 +202,8 @@ const init = () => {
     tableData[0]['prop' + index] = item.currentMonthCount
     tableData[1]['prop' + index] = item.lastMonthCount
     tableData[2]['prop' + index] = item.lastYearCount
-    tableData[3]['prop' + index] = item.lastYearCount !== 0 ? (item.currentMonthCount / item.lastYearCount).toFixed(2) : 'NULL'
-    tableData[4]['prop' + index] = item.lastMonthCount !== 0 ? (item.currentMonthCount / item.lastMonthCount).toFixed(2) : 'NULL'
+    tableData[3]['prop' + index] = item.lastMonthCount !== 0 ? (item.currentMonthCount / item.lastMonthCount).toFixed(2) : 'NULL'
+    tableData[4]['prop' + index] = item.lastYearCount !== 0 ? (item.currentMonthCount / item.lastYearCount).toFixed(2) : 'NULL'
   })
 }
 
@@ -210,6 +212,5 @@ defineExpose({ loadData })
 /** 初始化 */
 onMounted(async () => {
   await loadData()
-  init()
 })
 </script>

+ 6 - 5
src/views/crm/statistics/performance/components/ReceivablePricePerformance.vue

@@ -1,4 +1,4 @@
-<!-- 客户总量统计 -->
+<!-- 员工业绩统计 -->
 <template>
   <!-- Echarts图 -->
   <el-card shadow="never">
@@ -180,6 +180,7 @@ const loadData = async () => {
 
   // 2.2 更新列表数据
   list.value = performanceList
+  convertListData()
   loading.value = false
 
 }
@@ -190,8 +191,9 @@ const tableData = reactive([{title: '当月回款金额统计(元)'}, {title
   {title: '去年当月回款金额统计(元)'}, {title: '同比增长率(%)'}, {title: '环比增长率(%)'}]);
 
 // 定义 init 方法
-const init = () => {
+const convertListData = () => {
   const columnObj = {label: '日期', prop: 'title'}
+  columnsData.splice(0, columnsData.length)//清空数组
   columnsData.push(columnObj)
 
   list.value.forEach((item, index) => {
@@ -200,8 +202,8 @@ const init = () => {
     tableData[0]['prop' + index] = item.currentMonthCount
     tableData[1]['prop' + index] = item.lastMonthCount
     tableData[2]['prop' + index] = item.lastYearCount
-    tableData[3]['prop' + index] = item.lastYearCount !== 0 ? (item.currentMonthCount / item.lastYearCount).toFixed(2) : 'NULL'
-    tableData[4]['prop' + index] = item.lastMonthCount !== 0 ? (item.currentMonthCount / item.lastMonthCount).toFixed(2) : 'NULL'
+    tableData[3]['prop' + index] = item.lastMonthCount !== 0 ? (item.currentMonthCount / item.lastMonthCount).toFixed(2) : 'NULL'
+    tableData[4]['prop' + index] = item.lastYearCount !== 0 ? (item.currentMonthCount / item.lastYearCount).toFixed(2) : 'NULL'
   })
 }
 
@@ -210,6 +212,5 @@ defineExpose({ loadData })
 /** 初始化 */
 onMounted(async () => {
   await loadData()
-  init()
 })
 </script>

+ 21 - 18
src/views/crm/statistics/performance/index.vue

@@ -1,4 +1,4 @@
-<!-- 数据统计 - 员工客户分析 -->
+<!-- 数据统计 - 员工业绩分析 -->
 <template>
   <ContentWrap>
     <!-- 搜索工作栏 -->
@@ -9,16 +9,13 @@
       :inline="true"
       label-width="68px"
     >
-      <el-form-item label="时间范围" prop="orderDate">
+      <el-form-item label="选择年份" prop="orderDate">
         <el-date-picker
-          v-model="queryParams.times"
-          :shortcuts="defaultShortcuts"
+          v-model="queryParams.times[0]"
           class="!w-240px"
-          end-placeholder="结束日期"
-          start-placeholder="开始日期"
-          type="daterange"
-          value-format="YYYY-MM-DD HH:mm:ss"
-          :default-time="[new Date('1 00:00:00'), new Date('1 23:59:59')]"
+          type="year"
+          value-format="YYYY"
+          :default-time="[new Date().getFullYear()]"
         />
       </el-form-item>
       <el-form-item label="归属部门" prop="deptId">
@@ -62,7 +59,7 @@
         <ContractPricePerformance :query-params="queryParams" ref="ContractPricePerformanceRef" />
       </el-tab-pane>
       <!-- 员工回款金额统计 -->
-      <el-tab-pane label="员工回款金额统计" name="followupType" lazy>
+      <el-tab-pane label="员工回款金额统计" name="ReceivablePricePerformance" lazy>
         <ReceivablePricePerformance :query-params="queryParams" ref="ReceivablePricePerformanceRef" />
       </el-tab-pane>
     </el-tabs>
@@ -78,9 +75,6 @@ import { defaultProps, handleTree } from '@/utils/tree'
 import ContractCountPerformance from './components/ContractCountPerformance.vue'
 import ContractPricePerformance from './components/ContractPricePerformance.vue'
 import ReceivablePricePerformance from './components/ReceivablePricePerformance.vue'
-import CustomerFollowupType from './components/CustomerFollowupType.vue'
-import CustomerConversionStat from './components/CustomerConversionStat.vue'
-import CustomerDealCycle from './components/CustomerDealCycle.vue'
 
 defineOptions({ name: 'CrmStatisticsCustomer' })
 
@@ -88,9 +82,8 @@ const queryParams = reactive({
   deptId: useUserStore().getUser.deptId,
   userId: undefined,
   times: [
-    // 默认显示最近一周的数据
-    formatDate(beginOfDay(new Date(new Date().getTime() - 3600 * 1000 * 24 * 7))),
-    formatDate(endOfDay(new Date(new Date().getTime() - 3600 * 1000 * 24)))
+    // 默认显示当年的数据
+    formatDate(beginOfDay(new Date(new Date().getTime() - 3600 * 1000 * 24 * 7)))
   ]
 })
 
@@ -113,9 +106,19 @@ const ContractPricePerformanceRef = ref()
 // 3.员工回款金额统计
 const ReceivablePricePerformanceRef = ref()
 
-
 /** 搜索按钮操作 */
-const handleQuery = () => {
+const handleQuery =  () => {
+  // 从 queryParams.times[0] 中获取到了年份
+  const selectYear = parseInt(queryParams.times[0])
+
+  // 创建一个新的 Date 对象,设置为指定的年份的第一天
+  const fullDate = new Date(selectYear, 0, 1, 0, 0, 0)
+
+  // 将完整的日期时间格式化为需要的字符串形式,比如 2004-01-01 00:00:00
+  queryParams.times[0] = `${fullDate.getFullYear()}-${
+    String(fullDate.getMonth() + 1).padStart(2, '0')
+  }-${String(fullDate.getDate()).padStart(2, '0')} ${String(fullDate.getHours()).padStart(2, '0')}:${String(fullDate.getMinutes()).padStart(2, '0')}:${String(fullDate.getSeconds()).padStart(2, '0')}`
+
   switch (activeTab.value) {
     case 'ContractCountPerformance':
       ContractCountPerformanceRef.value?.loadData?.()