瀏覽代碼

Merge branch 'master' of http://47.100.37.243:10191/wutt/manHourHousekeeper

Lijy 11 月之前
父節點
當前提交
28b8db9de6

+ 1 - 1
fhKeeper/formulahousekeeper/customerBuler-crm/src/pages/analysis/components/TrendCard.vue

@@ -15,7 +15,7 @@
           v-if="compare"
         >
           <span>{{ compare.includes('-') ? compare.slice(1) : compare }}</span>
-          <el-icon>
+          <el-icon class="mt-0.5">
             <Bottom v-if="compare.includes('-')" />
             <Top v-else />
           </el-icon>

+ 1 - 2
fhKeeper/formulahousekeeper/customerBuler-crm/src/pages/analysis/index.vue

@@ -6,7 +6,6 @@ import Divider from './components/Divider.vue';
 import Echarts from '@/components/ReEcharts/index.vue';
 import { EChartsOption } from 'echarts';
 import { dayjs } from 'element-plus';
-import { ElLoading } from 'element-plus';
 import {
   getSummaryData,
   getBulletinData,
@@ -381,7 +380,7 @@ watchEffect(() => {
         </div>
       </div>
     </section>
-    <nav class="flex-1 min-w-60 sticky right-0 top-9">
+    <nav class="flex-1 min-w-60 sticky right-0 top-9 max-lg:hidden">
       <div class="border border-gray-200 rounded w-3/4 text-sm text-gray-500">
         <div class="p-2" v-for="primission in permissionOptions">
           {{ primission.label }}

+ 74 - 39
fhKeeper/formulahousekeeper/customerBuler-crm/src/pages/corpreport/index.vue

@@ -1,42 +1,33 @@
-<template>
-  <div class="m-5 bg-white h-full p-4 rounded">
-    <div class="flex justify-start">
-      <span class="mr-12 font-bold text-gray-900">客户总量分析</span>
-      <el-form class="flex gap-4">
-        <el-form-item class="w-52">
-          <el-select>
-            <el-option
-              v-for="date in dateOptions"
-              :key="date.value"
-              :label="date.label"
-              :value="date.value"
-            />
-          </el-select>
-        </el-form-item>
-        <el-form-item class="w-52">
-          <el-select>
-            <el-option label="按部门" value="1" />
-            <el-option label="按员工" value="2" />
-          </el-select>
-        </el-form-item>
-        <el-form-item class="w-52">
-          <el-select></el-select>
-        </el-form-item>
-        <el-button type="primary">搜索</el-button>
-      </el-form>
-    </div>
-    <el-table :data="dataSource">
-      <el-table-column prop="date" label="员工姓名" />
-      <el-table-column prop="date" label="新增客户数" />
-      <el-table-column prop="date" label="成交客户数" />
-      <el-table-column prop="date" label="客户成交率(%)" />
-      <el-table-column prop="date" label="合同总金额" />
-      <el-table-column prop="date" label="回款金额" />
-    </el-table>
-  </div>
-</template>
-
 <script lang="ts" setup>
+import { ref, reactive, onMounted, watchEffect } from 'vue';
+
+import Echarts from '@/components/ReEcharts/index.vue';
+import { EChartsOption } from 'echarts';
+
+const chartOptions: EChartsOption = {
+  grid: { bottom: 30 },
+  legend: {},
+  tooltip: {},
+  dataset: {
+    dimensions: ['product', '2015', '2016', '2017'],
+    source: [
+      { product: 'Matcha Latte', 2015: 43.3, 2016: 85.8, 2017: 93.7 },
+      { product: 'Milk Tea', 2015: 83.1, 2016: 73.4, 2017: 55.1 },
+      { product: 'Cheese Cocoa', 2015: 86.4, 2016: 65.2, 2017: 82.5 },
+      { product: 'Walnut Brownie', 2015: 72.4, 2016: 53.9, 2017: 39.1 }
+    ]
+  },
+  xAxis: { type: 'category' },
+  yAxis: {},
+  // Declare several bar series, each will be mapped
+  // to a column of dataset.source by default.
+  series: [
+    { type: 'bar', barWidth: 20 },
+    { type: 'bar', barWidth: 20 },
+    { type: 'bar', barWidth: 20 }
+  ]
+};
+
 const dateOptions = [
   { label: '今天', value: '1' },
   { label: '昨天', value: '2' },
@@ -71,4 +62,48 @@ const dataSource = [
 ];
 </script>
 
-<style lang="scss" scoped></style>
+<template>
+  <div class="m-5 bg-white h-full p-4 rounded">
+    <div class="flex justify-between">
+      <el-form class="flex gap-4">
+        <el-form-item class="w-28">
+          <el-select>
+            <el-option
+              v-for="date in dateOptions"
+              :key="date.value"
+              :label="date.label"
+              :value="date.value"
+            />
+          </el-select>
+        </el-form-item>
+        <el-form-item class="w-28">
+          <el-select>
+            <el-option label="按部门" value="1" />
+            <el-option label="按员工" value="2" />
+          </el-select>
+        </el-form-item>
+        <el-form-item class="w-52">
+          <el-select></el-select>
+        </el-form-item>
+        <el-button type="primary">搜索</el-button>
+      </el-form>
+      <el-tabs type="card">
+        <el-tab-pane label="客户总量分析" name="first" />
+        <el-tab-pane label="客户转化率分析" name="first" />
+        <el-tab-pane label="合同数量分析" name="first" />
+      </el-tabs>
+      <!-- <span class="mr-12 font-bold text-gray-900">客户总量分析</span> -->
+    </div>
+    <div class="h-96">
+      <Echarts :option="chartOptions"></Echarts>
+    </div>
+    <el-table :data="dataSource">
+      <el-table-column prop="date" label="员工姓名" />
+      <el-table-column prop="date" label="新增客户数" />
+      <el-table-column prop="date" label="成交客户数" />
+      <el-table-column prop="date" label="客户成交率(%)" />
+      <el-table-column prop="date" label="合同总金额" />
+      <el-table-column prop="date" label="回款金额" />
+    </el-table>
+  </div>
+</template>

+ 16 - 16
fhKeeper/formulahousekeeper/customerBuler-crm/vite.config.ts

@@ -1,40 +1,40 @@
-import { defineConfig } from "vite";
-import vue from "@vitejs/plugin-vue";
+import { defineConfig } from 'vite';
+import vue from '@vitejs/plugin-vue';
 
-import { resolve } from "path";
+import { resolve } from 'path';
 
-// const target = "http://192.168.2.8:10080";
+const target = 'http://192.168.2.8:10010';
 // const target = "http://127.0.0.1:10010";
 // const target = "http://192.168.2.178:10010";
-const target = "http://47.101.180.183:10010";
+// const target = 'http://47.101.180.183:10010';
 
 export default defineConfig({
   plugins: [vue()],
   server: {
-    host: "0.0.0.0",
+    host: '0.0.0.0',
     port: 19123,
     open: true,
     proxy: {
-      "/api": {
+      '/api': {
         // 这里的'/api'表示需要转发到的接口路径前缀
         target, // 将请求转发到的目标地址
         changeOrigin: true, // 支持跨域
-        rewrite: (path) => path.replace(/^\/api/, ""), // 去除请求路径中的'/api'前缀
-      },
-    },
+        rewrite: (path) => path.replace(/^\/api/, '') // 去除请求路径中的'/api'前缀
+      }
+    }
   },
   resolve: {
     alias: {
-      "@": resolve(__dirname, "./src"),
+      '@': resolve(__dirname, './src')
     },
-    extensions: [".mjs", ".js", ".ts", ".jsx", ".tsx", ".json", ".vue"],
+    extensions: ['.mjs', '.js', '.ts', '.jsx', '.tsx', '.json', '.vue']
   },
   css: {
     preprocessorOptions: {
       scss: {
         additionalData: '@import "@/styles/global.scss";'
-      },
-    },
+      }
+    }
   },
 
   build: {
@@ -47,8 +47,8 @@ export default defineConfig({
         manualChunks: {
           vue: ['vue', 'vue-router', 'vuex'],
           echarts: ['echarts']
-        },
-      },
+        }
+      }
     }
   }
 });

+ 3 - 0
fhKeeper/formulahousekeeper/management-crm/src/main/java/com/management/platform/service/impl/SalesOrderServiceImpl.java

@@ -512,6 +512,7 @@ public class SalesOrderServiceImpl extends ServiceImpl<SalesOrderMapper, SalesOr
                     deptIds.add(-1);
                     List<User> userList = userMapper.selectList(new LambdaQueryWrapper<User>().in(User::getDepartmentId, deptIds));
                     List<String> userIds = userList.stream().map(User::getId).distinct().collect(Collectors.toList());
+                    userIds.add("-1");
                     customLambdaQueryWrapper.in(Custom::getCreatorId,userIds);
                     contactsLambdaQueryWrapper.in(Contacts::getCreatorId,userIds);
                     businessOpportunityLambdaQueryWrapper.in(BusinessOpportunity::getCreatorId,userIds);
@@ -529,6 +530,7 @@ public class SalesOrderServiceImpl extends ServiceImpl<SalesOrderMapper, SalesOr
                     Integer targetDeptId = user.getDepartmentId();
                     List<User> users = userMapper.selectList(new LambdaQueryWrapper<User>().eq(User::getDepartmentId, targetDeptId));
                     List<String> targetUserIds = users.stream().map(User::getId).distinct().collect(Collectors.toList());
+                    targetUserIds.add("-1");
                     customLambdaQueryWrapper.in(Custom::getCreatorId,targetUserIds);
                     contactsLambdaQueryWrapper.in(Contacts::getCreatorId,targetUserIds);
                     businessOpportunityLambdaQueryWrapper.in(BusinessOpportunity::getCreatorId,targetUserIds);
@@ -547,6 +549,7 @@ public class SalesOrderServiceImpl extends ServiceImpl<SalesOrderMapper, SalesOr
                     List<Integer> branchDepartment = getBranchDepartment(targetDeptId1, allDeptList);
                     List<User> users1 = userMapper.selectList(new LambdaQueryWrapper<User>().in(User::getDepartmentId, branchDepartment));
                     List<String> targetUserIds1 = users1.stream().map(User::getId).distinct().collect(Collectors.toList());
+                    targetUserIds1.add("-1");
                     customLambdaQueryWrapper.in(Custom::getCreatorId,targetUserIds1);
                     contactsLambdaQueryWrapper.in(Contacts::getCreatorId,targetUserIds1);
                     businessOpportunityLambdaQueryWrapper.in(BusinessOpportunity::getCreatorId,targetUserIds1);