cz 1 year ago
parent
commit
ee3daf0769
1 changed files with 409 additions and 200 deletions
  1. 409 200
      src/views/dataBoard/board/employeeAnalysis/index.vue

+ 409 - 200
src/views/dataBoard/board/employeeAnalysis/index.vue

@@ -1,8 +1,24 @@
 <template>
   <div class="tenant">
-    <div class="query">
+    <div class="query bck">
       <el-form :inline="true" :model="queryForm">
-        <el-form-item label="日期范围">
+        <el-form-item label="查看用户">
+          <el-select
+            v-model="selectUser"
+            multiple
+            placeholder="请选择用户"
+            @change="changeUser"
+          >
+            <el-option
+              v-for="item in userList"
+              :key="item.value"
+              :label="item.label"
+              :value="item.value"
+              :disabled="item.value !== 'all' && selectUser.includes('all')"
+            />
+          </el-select>
+        </el-form-item>
+        <el-form-item label="日期">
           <el-date-picker
             v-model="queryForm.timeArr"
             type="daterange"
@@ -22,219 +38,318 @@
           <el-button @click="onQuery">去年</el-button>
           <el-button @click="onQuery">今年</el-button>
         </el-form-item>
-        <div></div>
-        <el-form-item label="查看用户">
-          <el-button type="primary" plain @click="onQuery">近30天</el-button>
-        </el-form-item>
       </el-form>
     </div>
-    <div style="display: flex">
-      <div class="bck">
-        <TitleInfo :content="titleList[0]"></TitleInfo>
-        <div class="one-row" style="margin-top: 15px">
-          <div class="one-row-item first" style="margin-right: 15px">
-            <div class="label">存量客户</div>
-            <div class="value">20</div>
-          </div>
-          <div class="one-row-item other" style="margin-right: 15px">
-            <div class="label">新增</div>
-            <div class="value">20</div>
-          </div>
-          <div class="one-row-item other" style="margin-right: 15px">
-            <div class="label">报价</div>
-            <div class="value">20</div>
-          </div>
-          <div class="one-row-item other">
-            <div class="label">成交</div>
-            <div class="value">20</div>
-          </div>
-        </div>
-      </div>
-      <div class="bck" style="margin-left: 20px">
-        <TitleInfo :content="titleList[1]"></TitleInfo>
-        <div class="one-row" style="margin-top: 15px">
-          <div class="one-row-item first" style="margin-right: 15px">
-            <div class="label">存量产品</div>
-            <div class="value">20</div>
-          </div>
-          <div class="one-row-item other">
-            <div class="label">新增</div>
-            <div class="value">20</div>
-          </div>
-        </div>
-      </div>
-      <div class="bck" style="margin-left: 20px">
-        <TitleInfo :content="titleList[2]"></TitleInfo>
-        <div class="one-row" style="margin-top: 15px">
-          <div class="one-row-item first" style="margin-right: 15px">
-            <div class="label">发件</div>
-            <div class="value">20</div>
-          </div>
-          <div class="one-row-item other">
-            <div class="label">收件</div>
-            <div class="value">20</div>
-          </div>
-        </div>
-      </div>
-    </div>
-    <div style="margin-top: 15px">
-      <div class="bck">
-        <TitleInfo :content="titleList[3]"></TitleInfo>
-        <div class="two-row" style="margin-top: 15px">
-          <div class="two-row-item first" style="margin-right: 15px">
-            <div class="label">报价</div>
-            <div class="value">
-              <div style="margin-right: 15px">
-                <div class="child-value">aa</div>
-                <div class="text">订单数</div>
+    <div v-loading="loading">
+      <div style="display: flex; margin-top: 15px">
+        <div class="bck">
+          <TitleInfo :content="titleList[0]"></TitleInfo>
+          <div class="one-row" style="margin-top: 15px">
+            <div class="one-row-item first" style="margin-right: 15px">
+              <div class="label">存量客户(人)</div>
+              <div class="value">
+                {{ allData.customerSituation.customerCount }}
               </div>
-              <div>
-                <div class="child-value">666666</div>
-                <div class="text">金额</div>
+            </div>
+            <div class="one-row-item other" style="margin-right: 15px">
+              <div class="label">新增(人)</div>
+              <div class="value">
+                {{ allData.customerSituation.customerAddCount }}
               </div>
             </div>
-          </div>
-          <div class="two-row-item other" style="margin-right: 15px">
-            <div class="label">成交</div>
-            <div class="value">
-              <div style="margin-right: 15px">
-                <div class="child-value">aa</div>
-                <div class="text">订单数</div>
+            <div class="one-row-item other" style="margin-right: 15px">
+              <div class="label">报价(人)</div>
+              <div class="value">
+                {{ allData.customerSituation.saleQuotationCustomerCount }}
               </div>
-              <div>
-                <div class="child-value">666666</div>
-                <div class="text">金额</div>
+            </div>
+            <div class="one-row-item other">
+              <div class="label">成交(人)</div>
+              <div class="value">
+                {{ allData.customerSituation.contractCustomerCount }}
               </div>
             </div>
           </div>
-          <div class="two-row-item other" style="margin-right: 15px">
-            <div class="label">到账</div>
-            <div class="value">
-              <div style="margin-right: 15px">
-                <div class="child-value">aa</div>
-                <div class="text">笔</div>
+        </div>
+        <div class="bck" style="margin-left: 20px">
+          <TitleInfo :content="titleList[1]"></TitleInfo>
+          <div class="one-row" style="margin-top: 15px">
+            <div class="one-row-item first" style="margin-right: 15px">
+              <div class="label">存量产品</div>
+              <div class="value">
+                {{ allData.productSituation.productCount }}
               </div>
-              <div>
-                <div class="child-value">666666</div>
-                <div class="text">金额</div>
+            </div>
+            <div class="one-row-item other">
+              <div class="label">新增产品</div>
+              <div class="value">
+                {{ allData.productSituation.productAddCount }}
               </div>
             </div>
           </div>
-          <div class="two-row-item other">
-            <div class="label">创建单证</div>
-            <div class="value">
-              <div style="margin-right: 15px">
-                <div class="child-value">aa</div>
-                <div class="text">套</div>
-              </div>
+        </div>
+        <div class="bck" style="margin-left: 20px">
+          <TitleInfo :content="titleList[2]"></TitleInfo>
+          <div class="one-row" style="margin-top: 15px">
+            <div class="one-row-item first" style="margin-right: 15px">
+              <div class="label">发件</div>
+              <div class="value">{{ allData.commMail.sentMailCount }}</div>
+            </div>
+            <div class="one-row-item other">
+              <div class="label">收件</div>
+              <div class="value">{{ allData.commMail.receiveMailCount }}</div>
             </div>
           </div>
         </div>
       </div>
-    </div>
-    <div style="margin-top: 15px">
-      <div class="bck">
-        <TitleInfo :content="titleList[4]"></TitleInfo>
-        <div class="two-row" style="margin-top: 15px">
-          <div class="two-row-item first" style="margin-right: 15px">
-            <div class="label">报价</div>
-            <div class="value">
-              <div style="margin-right: 15px">
-                <div class="child-value">aa</div>
-                <div class="text">订单数</div>
+      <div style="margin-top: 15px">
+        <div class="bck">
+          <TitleInfo :content="titleList[3]"></TitleInfo>
+          <div class="two-row" style="margin-top: 15px">
+            <div class="two-row-item first" style="margin-right: 15px">
+              <div class="label">报价</div>
+              <div class="value">
+                <div style="margin-right: 15px">
+                  <div class="child-value">
+                    {{ allData.saleSituation.quotationAddStatistics.count }}
+                  </div>
+                  <div class="text">订单数</div>
+                </div>
+                <div>
+                  <div class="child-value color-blue">
+                    {{
+                      moneyFormat(
+                        allData.saleSituation.quotationAddStatistics.sumAmount,
+                        2
+                      )
+                    }}
+                  </div>
+                  <div class="text">金额</div>
+                </div>
               </div>
-              <div>
-                <div class="child-value">666666</div>
-                <div class="text">金额</div>
+            </div>
+            <div class="two-row-item other" style="margin-right: 15px">
+              <div class="label">成交</div>
+              <div class="value">
+                <div style="margin-right: 15px">
+                  <div class="child-value">
+                    {{ allData.saleSituation.contractAddStatistics.count }}
+                  </div>
+                  <div class="text">订单数</div>
+                </div>
+                <div>
+                  <div class="child-value color-blue">
+                    {{
+                      moneyFormat(
+                        allData.saleSituation.quotationAddStatistics.sumAmount,
+                        2
+                      )
+                    }}
+                  </div>
+                  <div class="text">金额</div>
+                </div>
               </div>
             </div>
-          </div>
-          <div class="two-row-item other" style="margin-right: 15px">
-            <div class="label">成交</div>
-            <div class="value">
-              <div style="margin-right: 15px">
-                <div class="child-value">aa</div>
-                <div class="text">订单数</div>
+            <div class="two-row-item other" style="margin-right: 15px">
+              <div class="label">到账</div>
+              <div class="value">
+                <div style="margin-right: 15px">
+                  <div class="child-value">
+                    {{ allData.saleSituation.claimAddStatistics.count }}
+                  </div>
+                  <div class="text">笔</div>
+                </div>
+                <div>
+                  <div class="child-value color-blue">
+                    {{
+                      moneyFormat(
+                        allData.saleSituation.claimAddStatistics.sumAmount,
+                        2
+                      )
+                    }}
+                  </div>
+                  <div class="text">金额</div>
+                </div>
               </div>
-              <div>
-                <div class="child-value">666666</div>
-                <div class="text">金额</div>
+            </div>
+            <div class="two-row-item other">
+              <div class="label">创建单证</div>
+              <div class="value">
+                <div style="margin-right: 15px">
+                  <div class="child-value">
+                    {{ allData.saleSituation.documentsCount }}
+                  </div>
+                  <div class="text">套</div>
+                </div>
               </div>
             </div>
           </div>
-          <div class="two-row-item other" style="margin-right: 15px">
-            <div class="label">到账</div>
-            <div class="value">
-              <div style="margin-right: 15px">
-                <div class="child-value">aa</div>
-                <div class="text">笔</div>
+        </div>
+      </div>
+      <div style="margin-top: 15px">
+        <div class="bck">
+          <TitleInfo :content="titleList[4]"></TitleInfo>
+          <div class="two-row" style="margin-top: 15px">
+            <div class="two-row-item first" style="margin-right: 15px">
+              <div class="label">报价</div>
+              <div class="value">
+                <div style="margin-right: 15px">
+                  <div class="child-value">
+                    {{ allData.saleAddSituation.quotationAddStatistics.count }}
+                  </div>
+                  <div class="text">订单数</div>
+                </div>
+                <div>
+                  <div class="child-value color-blue">
+                    {{
+                      moneyFormat(
+                        allData.saleAddSituation.quotationAddStatistics
+                          .sumAmount,
+                        2
+                      )
+                    }}
+                  </div>
+                  <div class="text">金额</div>
+                </div>
               </div>
-              <div>
-                <div class="child-value">666666</div>
-                <div class="text">金额</div>
+            </div>
+            <div class="two-row-item other" style="margin-right: 15px">
+              <div class="label">成交</div>
+              <div class="value">
+                <div style="margin-right: 15px">
+                  <div class="child-value">
+                    {{ allData.saleAddSituation.contractAddStatistics.count }}
+                  </div>
+                  <div class="text">订单数</div>
+                </div>
+                <div>
+                  <div class="child-value color-blue">
+                    {{
+                      moneyFormat(
+                        allData.saleAddSituation.contractAddStatistics
+                          .sumAmount,
+                        2
+                      )
+                    }}
+                  </div>
+                  <div class="text">金额</div>
+                </div>
               </div>
             </div>
-          </div>
-          <div class="two-row-item other">
-            <div class="label">创建单证</div>
-            <div class="value">
-              <div style="margin-right: 15px">
-                <div class="child-value">aa</div>
-                <div class="text">套</div>
+            <div class="two-row-item other" style="margin-right: 15px">
+              <div class="label">到账</div>
+              <div class="value">
+                <div style="margin-right: 15px">
+                  <div class="child-value">
+                    {{ allData.saleAddSituation.claimAddStatistics.count }}
+                  </div>
+                  <div class="text">笔</div>
+                </div>
+                <div>
+                  <div class="child-value color-blue">
+                    {{
+                      moneyFormat(
+                        allData.saleAddSituation.claimAddStatistics.sumAmount,
+                        2
+                      )
+                    }}
+                  </div>
+                  <div class="text">金额</div>
+                </div>
+              </div>
+            </div>
+            <div class="two-row-item other">
+              <div class="label">创建单证</div>
+              <div class="value">
+                <div style="margin-right: 15px">
+                  <div class="child-value">
+                    {{ allData.saleAddSituation.documentsCount }}
+                  </div>
+                  <div class="text">套</div>
+                </div>
               </div>
             </div>
           </div>
         </div>
       </div>
-    </div>
 
-    <div style="display: flex; margin-top: 15px">
-      <div class="bck">
-        <TitleInfo :content="titleList[0]"></TitleInfo>
-        <div class="one-row" style="margin-top: 15px">
-          <div class="one-row-item first" style="margin-right: 15px">
-            <div class="label">存量客户</div>
-            <div class="value">20</div>
-          </div>
-          <div class="one-row-item other" style="margin-right: 15px">
-            <div class="label">新增</div>
-            <div class="value">20</div>
-          </div>
-          <div class="one-row-item other" style="margin-right: 15px">
-            <div class="label">报价</div>
-            <div class="value">20</div>
-          </div>
-          <div class="one-row-item other">
-            <div class="label">成交</div>
-            <div class="value">20</div>
+      <div style="display: flex; margin-top: 15px">
+        <div class="bck">
+          <TitleInfo :content="titleList[5]"></TitleInfo>
+          <div class="two-row" style="margin-top: 15px">
+            <div class="two-row-item first" style="margin-right: 15px">
+              <div class="label">待采购</div>
+              <div class="value">
+                <div style="margin-right: 15px">
+                  <div class="child-value">
+                    {{
+                      allData.purchaseStatistics.waitPurchaseStatistics
+                        .contractProductCount
+                    }}
+                  </div>
+                  <div class="text">交接单</div>
+                </div>
+                <div>
+                  <div class="child-value color-blue">
+                    {{
+                      allData.purchaseStatistics.waitPurchaseStatistics
+                        .subscribeDetailCount
+                    }}
+                  </div>
+                  <div class="text">申购</div>
+                </div>
+              </div>
+            </div>
+            <div class="two-row-item other" style="margin-right: 15px">
+              <div class="label">采购订单</div>
+              <div class="value">
+                <div style="margin-right: 15px">
+                  <div class="child-value">
+                    {{ allData.purchaseStatistics.purchaseOrder.purchaseCount }}
+                  </div>
+                  <div class="text">订单数</div>
+                </div>
+                <div>
+                  <div class="child-value color-blue">
+                    {{
+                      moneyFormat(
+                        allData.purchaseStatistics.purchaseOrder.purchaseAmount,
+                        2
+                      )
+                    }}
+                  </div>
+                  <div class="text">金额</div>
+                </div>
+                <div>
+                  <div class="child-value color-blue">
+                    {{
+                      allData.purchaseStatistics.purchaseOrder.purchasePayAmount
+                    }}
+                  </div>
+                  <div class="text">已付款</div>
+                </div>
+              </div>
+            </div>
           </div>
         </div>
-      </div>
-      <div class="bck" style="margin-left: 20px">
-        <TitleInfo :content="titleList[1]"></TitleInfo>
-        <div class="one-row" style="margin-top: 15px">
-          <div class="one-row-item first" style="margin-right: 15px">
-            <div class="label">存量产品</div>
-            <div class="value">20</div>
-          </div>
-          <div class="one-row-item other">
-            <div class="label">新增</div>
-            <div class="value">20</div>
+
+        <!-- <div class="bck" style="margin-left: 20px">
+          <TitleInfo :content="titleList[6]"></TitleInfo>
+          <div class="one-row" style="margin-top: 15px">
+            <div class="one-row-item first" style="margin-right: 15px">
+              <div class="label">发起</div>
+              <div class="value">
+                {{ allData.flowStatistics.flowExampleCount }}
+              </div>
+            </div>
+            <div class="one-row-item other">
+              <div class="label">待处理</div>
+              <div class="value">
+                {{ allData.flowStatistics.waitFlowExampleCount }}
+              </div>
+            </div>
           </div>
-        </div>
-      </div>
-      <div class="bck" style="margin-left: 20px">
-        <TitleInfo :content="titleList[2]"></TitleInfo>
-        <div class="one-row" style="margin-top: 15px">
-          <div class="one-row-item first" style="margin-right: 15px">
-            <div class="label">发件</div>
-            <div class="value">20</div>
-          </div>
-          <div class="one-row-item other">
-            <div class="label">收件</div>
-            <div class="value">20</div>
-          </div>
-        </div>
+        </div> -->
       </div>
     </div>
   </div>
@@ -242,21 +357,92 @@
 
 <script setup>
 import TitleInfo from "@/components/TitleInfo/index.vue";
+import useUserStore from "@/store/modules/user";
+
 const titleList = [
   "客户情况",
   "产品情况",
   "往来邮件",
   "销售行为(存量客户)",
   "销售行为(新增客户)",
+  "采购行为",
+  "流程统计",
 ];
+const userList = ref([]);
+const selectUser = ref([]);
 const { proxy } = getCurrentInstance();
 const loading = ref(false);
 const queryForm = reactive({
-  countryId: "",
+  userIds: [],
   beginTime: "",
   endTime: "",
   timeArr: "",
 });
+const allData = ref({
+  customerSituation: {},
+  productSituation: {},
+  commMail: {},
+  flowStatistics: {},
+  saleSituation: {
+    quotationAddStatistics: {},
+    contractAddStatistics: {},
+    claimAddStatistics: {},
+  },
+  saleAddSituation: {
+    quotationAddStatistics: {},
+    contractAddStatistics: {},
+    claimAddStatistics: {},
+  },
+  purchaseStatistics: {
+    waitPurchaseStatistics: {},
+    purchaseOrder: {},
+  },
+});
+const getData = () => {
+  loading.value = true;
+  proxy.post("/employeeAnalysis/info", queryForm).then((res) => {
+    allData.value = res;
+    loading.value = false;
+  });
+};
+const getDict = () => {
+  proxy
+    .get("/tenantUser/list", {
+      pageNum: 1,
+      pageSize: 10000,
+      tenantId: useUserStore().user.tenantId,
+    })
+    .then((res) => {
+      userList.value = res.rows.map((item) => {
+        return {
+          label: item.nickName,
+          value: item.userId,
+        };
+      });
+      userList.value.unshift({
+        label: "全部",
+        value: "all",
+      });
+    });
+};
+
+const onQuery = () => {
+  if (queryForm.timeArr.length > 1) {
+    queryForm.beginTime = queryForm.timeArr[0];
+    queryForm.endTime = queryForm.timeArr[1];
+  } else {
+    queryForm.beginTime = "";
+    queryForm.endTime = "";
+  }
+  getData();
+};
+const changeUser = (val) => {
+  selectUser.value = val.includes("all") ? ["all"] : val;
+  queryForm.userIds = val.includes("all") ? [] : val;
+  onQuery();
+};
+getDict();
+getData();
 </script>
 
 <style lang="scss" scoped>
@@ -270,71 +456,94 @@ const queryForm = reactive({
 .one-row {
   display: flex;
   .one-row-item {
-    min-width: 100px;
+    min-width: 160px;
     padding: 15px;
     border-radius: 10px;
     .label {
       margin-bottom: 10px;
-      font-size: 16px;
-    }
-    .value {
       font-size: 14px;
+      color: #333333;
     }
-    .label,
     .value {
+      font-size: 24px;
       font-weight: 700;
     }
   }
 
   .first {
-    background: #f5f3ff;
+    background: #fff1e1;
     .value {
-      color: #9e64ed;
+      color: #333333;
+    }
+    .label::before {
+      content: "";
+      display: inline-block;
+      width: 10px;
+      height: 10px;
+      background: #ff9315;
+      border-radius: 50%;
+      margin-right: 10px;
     }
   }
+
   .other {
     background: #eff6ff;
     .value {
-      color: #0084ff;
+      color: #333333;
+    }
+    .label::before {
+      content: "";
+      display: inline-block;
+      width: 10px;
+      height: 10px;
+      background: #0084ff;
+      border-radius: 50%;
+      margin-right: 10px;
     }
   }
 }
 .two-row {
   display: flex;
   .two-row-item {
-    min-width: 160px;
+    min-width: 320px;
     padding: 15px;
     border-radius: 10px;
     .label {
       margin-bottom: 10px;
-      font-size: 16px;
+      font-size: 14px;
       font-weight: 700;
+      color: #333333;
     }
     .value {
       display: flex;
       font-size: 14px;
+      justify-content: space-between;
+      padding-right: 30px;
       .child-value {
-        font-size: 14px;
+        font-size: 16px;
         font-weight: 700;
       }
       .text {
-        color: #908f91;
-        font-size: 12px;
+        // color: #333333;
+        font-size: 14px;
         margin-top: 10px;
       }
     }
   }
   .first {
-    background: #f5f3ff;
-    .child-value {
-      color: #9e64ed;
-    }
+    background: #fff1e1;
+    // .child-value {
+    //   color: #333333;
+    // }
   }
   .other {
     background: #eff6ff;
-    .child-value {
-      color: #0084ff;
-    }
+    // .child-value {
+    //   color: #0084ff;
+    // }
+  }
+  .color-blue {
+    color: #0084ff;
   }
 }
 </style>