Browse Source

京东订单接收

cz 2 years ago
parent
commit
81bf90ce74

BIN
src/assets/images/portrait/icon_cjht.png


BIN
src/assets/images/portrait/icon_email.png


BIN
src/assets/images/portrait/icon_offer.png


BIN
src/assets/images/portrait/icon_profits.png


BIN
src/assets/images/portrait/icon_sales.png


+ 3 - 0
src/components/byTable/index.vue

@@ -462,6 +462,9 @@ export default defineComponent({
   background-color: #dee1e6;
   border-color: #b2b4b9;
 }
+.el-table .cell {
+  line-height: 34px;
+}
 </style>
   <style lang="scss" scoped>
 .by-search {

+ 10 - 7
src/utils/util.js

@@ -1,5 +1,8 @@
 import moment from "moment";
-import { post, get } from "@/utils/request";
+import {
+  post,
+  get
+} from "@/utils/request";
 import Cookies from "js-cookie";
 import html2canvas from "html2canvas";
 import JsPDF from "jspdf";
@@ -35,11 +38,11 @@ export function getDict(key) {
     let dictObj = {};
     let arr = {};
     let num = 0;
-    if (!sessionStorage.getItem("dict")) {
-      sessionStorage.setItem("dict", JSON.stringify(dictObj));
-    } else {
-      dictObj = JSON.parse(sessionStorage.getItem("dict"));
-    }
+    // if (!sessionStorage.getItem("dict")) {
+    //   sessionStorage.setItem("dict", JSON.stringify(dictObj));
+    // } else {
+    //   dictObj = JSON.parse(sessionStorage.getItem("dict"));
+    // }
     for (let i = 0; i < key.length; i++) {
       const element = key[i];
       if (dictObj[element]) {
@@ -230,4 +233,4 @@ export function random() {
     random += $chars.charAt(Math.floor(Math.random() * maxPos));
   }
   return random;
-}
+}

+ 159 - 119
src/views/WDLY/outInBound/jdOrderReceive/index.vue

@@ -36,7 +36,8 @@
       :title="modalType == 'add' ? '京东订单接收' : '调仓接收'"
       v-model="dialogVisible"
       width="800"
-      v-loading="loading"
+      v-loading="submitLoading"
+      destroy-on-close
     >
       <byForm
         :formConfig="formConfig"
@@ -126,20 +127,24 @@
         </template>
         <template #products>
           <div style="width: 100%">
-            <el-table :data="formData.data.jdOrderDetailsList">
+            <el-table :data="formData.data.stockTransferDetailsList">
               <el-table-column prop="productCode" label="物品编码" />
               <el-table-column prop="productName" label="物品名称" />
-              <el-table-column prop="productName" label="规格型号" />
-              <el-table-column prop="productName" label="调仓数量" />
-              <el-table-column prop="quantity" label="接收数量" min-width="150">
+              <el-table-column prop="productSpec" label="规格型号" />
+              <el-table-column prop="quantity" label="调仓数量" />
+              <el-table-column
+                prop="inQuantity"
+                label="接收数量"
+                min-width="150"
+              >
                 <template #default="{ row, $index }">
                   <el-form-item
-                    :prop="'jdOrderDetailsList.' + $index + '.quantity'"
-                    :rules="rules.quantity"
+                    :prop="'stockTransferDetailsList.' + $index + '.inQuantity'"
+                    :rules="rules.inQuantity"
                     :inline-message="true"
                   >
                     <el-input-number
-                      v-model="row.quantity"
+                      v-model="row.inQuantity"
                       :precision="4"
                       :controls="false"
                       :min="0"
@@ -204,108 +209,108 @@ let dialogVisible = ref(false);
 let openDetails = ref(false);
 let modalType = ref("add");
 let rules = ref({
-  customerId: [
+  // customerId: [
+  //   {
+  //     required: true,
+  //     message: "请选择客户",
+  //     trigger: "change",
+  //   },
+  // ],
+  // type: [
+  //   {
+  //     required: true,
+  //     message: "请选择订单类型",
+  //     trigger: "change",
+  //   },
+  // ],
+  // countryId: [
+  //   {
+  //     required: true,
+  //     message: "请选择国家",
+  //     trigger: "change",
+  //   },
+  // ],
+  // provinceId: [
+  //   {
+  //     required: true,
+  //     message: "请选择省/洲",
+  //     trigger: "change",
+  //   },
+  // ],
+  // cityId: [
+  //   {
+  //     required: true,
+  //     message: "请选择城市",
+  //     trigger: "change",
+  //   },
+  // ],
+  // code: [
+  //   {
+  //     required: true,
+  //     message: "请输入订单编号",
+  //     trigger: "blur",
+  //   },
+  // ],
+  // contactPerson: [
+  //   {
+  //     required: true,
+  //     message: "请输入收货负责人",
+  //     trigger: "blur",
+  //   },
+  // ],
+  // contactNumber: [
+  //   {
+  //     required: true,
+  //     message: "请输入收货电话",
+  //     trigger: "blur",
+  //   },
+  // ],
+  // detailedAddress: [
+  //   {
+  //     required: true,
+  //     message: "请输入详细地址",
+  //     trigger: "blur",
+  //   },
+  // ],
+  // price: [
+  //   {
+  //     required: true,
+  //     message: "请输入单价",
+  //     trigger: "blur",
+  //   },
+  // ],
+  inQuantity: [
     {
       required: true,
-      message: "请选择客户",
-      trigger: "change",
-    },
-  ],
-  type: [
-    {
-      required: true,
-      message: "请选择订单类型",
-      trigger: "change",
-    },
-  ],
-  countryId: [
-    {
-      required: true,
-      message: "请选择国家",
-      trigger: "change",
-    },
-  ],
-  provinceId: [
-    {
-      required: true,
-      message: "请选择省/洲",
-      trigger: "change",
-    },
-  ],
-  cityId: [
-    {
-      required: true,
-      message: "请选择城市",
-      trigger: "change",
-    },
-  ],
-  code: [
-    {
-      required: true,
-      message: "请输入订单编号",
-      trigger: "blur",
-    },
-  ],
-  contactPerson: [
-    {
-      required: true,
-      message: "请输入收货负责人",
-      trigger: "blur",
-    },
-  ],
-  contactNumber: [
-    {
-      required: true,
-      message: "请输入收货电话",
-      trigger: "blur",
-    },
-  ],
-  detailedAddress: [
-    {
-      required: true,
-      message: "请输入详细地址",
-      trigger: "blur",
-    },
-  ],
-  price: [
-    {
-      required: true,
-      message: "请输入单价",
-      trigger: "blur",
-    },
-  ],
-  quantity: [
-    {
-      required: true,
-      message: "请输入数量",
-      trigger: "blur",
-    },
-  ],
-  distributionCenter: [
-    {
-      required: true,
-      message: "请输入/选择配送中心",
+      message: "请输入接收数量",
       trigger: "blur",
     },
   ],
+  // distributionCenter: [
+  //   {
+  //     required: true,
+  //     message: "请输入/选择配送中心",
+  //     trigger: "blur",
+  //   },
+  // ],
 });
 const { proxy } = getCurrentInstance();
 const selectConfig = reactive([
   {
     label: "接收状态",
-    prop: "status",
+    prop: "inStatus",
     data: [
       {
-        label: "未出库",
-        value: "1",
+        label: "未接收",
+        value: "0",
       },
       {
-        label: "部分出库",
-        value: "2",
+        label: "部分接收",
+        value: "1",
       },
       {
-        label: "已出库",
-        value: "3",
+        label: "已接收",
+        value: "2",
       },
     ],
   },
@@ -320,7 +325,6 @@ const config = computed(() => {
         slot: "code",
       },
     },
-
     {
       attrs: {
         label: "配送中心",
@@ -371,7 +375,10 @@ const config = computed(() => {
     {
       attrs: {
         label: "接收状态",
-        prop: "status",
+        prop: "inStatus",
+      },
+      render(inStatus) {
+        return inStatus == 0 ? "未接收" : inStatus == 1 ? "部分接收" : "已接收";
       },
     },
     {
@@ -383,17 +390,19 @@ const config = computed(() => {
       // 渲染 el-button,一般用在最后一列。
       renderHTML(row) {
         return [
-          {
-            attrs: {
-              label: "接收",
-              type: "primary",
-              text: true,
-            },
-            el: "button",
-            click() {
-              openModal();
-            },
-          },
+          row.inStatus < 2
+            ? {
+                attrs: {
+                  label: "接收",
+                  type: "primary",
+                  text: true,
+                },
+                el: "button",
+                click() {
+                  getDtl(row);
+                },
+              }
+            : {},
         ];
       },
     },
@@ -502,35 +511,66 @@ const openModal = () => {
   dialogVisible.value = true;
   modalType.value = "add";
   formData.data = {
-    jdOrderDetailsList: [{}],
+    stockTransferDetailsList: [{}],
     countryId: "China",
   };
   getCityData(formData.data.countryId, "20");
 };
 
+const getDtl = (row) => {
+  proxy.post("/jdOrder/detail", { id: row.id }).then((res) => {
+    getCityData(res.countryId, "20");
+    getCityData(res.provinceId, "30");
+    proxy
+      .post("/stockTransfer/detail", { id: row.stockTransferId })
+      .then((resOne) => {
+        formData.data = {
+          ...res,
+          id: row.stockTransferId,
+          stockTransferDetailsList: resOne.stockTransferDetailsList.map(
+            (x) => ({
+              inQuantity: undefined,
+              quantity: x.outQuantity,
+              productId: x.productId,
+              id: x.id,
+              productCode: x.productCode,
+              productName: x.productName,
+              productSpec: x.productSpec,
+            })
+          ),
+        };
+        dialogVisible.value = true;
+      });
+  });
+};
+
 const submitForm = () => {
-  console.log(byform.value);
   byform.value.handleSubmit((valid) => {
-    const list = formData.data.jdOrderDetailsList;
-    if (!list.length > 0)
-      return ElMessage({
-        message: `请添加订单明细!`,
-        type: "info",
-      });
+    const list = formData.data.stockTransferDetailsList;
     for (let i = 0; i < list.length; i++) {
       const e = list[i];
-      if (e.quantity == 0) {
+      if (!(e.inQuantity > 0)) {
+        return ElMessage({
+          message: "接收数量不能为0!",
+          type: "info",
+        });
+      }
+      if (e.inQuantity > e.quantity) {
         return ElMessage({
-          message: `数量不能为0!`,
+          message: "接收数量不能大于调仓数量!",
           type: "info",
         });
       }
     }
     submitLoading.value = true;
-    proxy.post("/jdOrder/" + modalType.value, formData.data).then(
+    const submitData = {
+      id: formData.data.id,
+      stockTransferDetailsList: formData.data.stockTransferDetailsList,
+    };
+    proxy.post("/jdOrder/receive", submitData).then(
       (res) => {
         ElMessage({
-          message: modalType.value == "add" ? "添加成功" : "编辑成功",
+          message: "接收成功",
           type: "success",
         });
         dialogVisible.value = false;

+ 93 - 102
src/views/WDLY/outInBound/waitOutBound/index.vue

@@ -24,8 +24,9 @@
     <el-dialog
       title="出库"
       v-model="dialogVisible"
-      width="500"
-      v-loading="loading"
+      width="800"
+      v-loading="submitLoading"
+      destroy-on-close
     >
       <byForm
         :formConfig="formConfig"
@@ -36,50 +37,28 @@
       >
         <template #products>
           <div style="width: 100%">
-            <el-button
+            <!-- <el-button
               type="primary"
               @click="clickAdd()"
               style="margin-bottom: 10px"
               v-if="modalType == 'add'"
             >
               添加物品
-            </el-button>
-            <el-table :data="formData.data.stockTransferDetailsList">
+            </el-button> -->
+            <el-table :data="formData.data.jdOrderDetailsList">
               <el-table-column prop="productCode" label="物品编码" />
               <el-table-column prop="productName" label="物品名称" />
               <el-table-column prop="productSpec" label="规格型号" />
-              <el-table-column
-                prop="outQuantity"
-                label="调仓数量"
-                v-if="modalType == 'detail'"
-              />
-              <el-table-column
-                prop="inQuantity"
-                label="接收数量"
-                v-if="modalType == 'detail'"
-              />
-
-              <el-table-column
-                prop="outQuantity"
-                label="调仓数量"
-                v-if="modalType == 'edit'"
-              />
-              <el-table-column
-                prop="outQuantity"
-                label="调仓数量"
-                min-width="150"
-                v-if="modalType == 'add'"
-              >
+              <el-table-column prop="waitQuantity" label="待出库数量" />
+              <el-table-column prop="quantity" label="调仓数量" min-width="150">
                 <template #default="{ row, $index }">
                   <el-form-item
-                    :prop="
-                      'stockTransferDetailsList.' + $index + '.outQuantity'
-                    "
-                    :rules="rules.outQuantity"
+                    :prop="'jdOrderDetailsList.' + $index + '.quantity'"
+                    :rules="rules.quantity"
                     :inline-message="true"
                   >
                     <el-input-number
-                      v-model="row.outQuantity"
+                      v-model="row.quantity"
                       :precision="2"
                       :controls="false"
                       :min="0"
@@ -95,7 +74,7 @@
               >
                 <template #default="{ row, $index }">
                   <el-form-item
-                    :prop="'stockTransferDetailsList.' + $index + '.inQuantity'"
+                    :prop="'jdOrderDetailsList.' + $index + '.inQuantity'"
                     :rules="rules.inQuantity"
                     :inline-message="true"
                   >
@@ -187,18 +166,24 @@ let rules = ref({
   warehouseId: [
     { required: true, message: "请选择仓库名称", trigger: "change" },
   ],
-  quantity: [{ required: true, message: "请输入入库数量", trigger: "blur" }],
+  outWarehouseId: [
+    { required: true, message: "请选择调出仓库", trigger: "change" },
+  ],
+  inWarehouseId: [
+    { required: true, message: "请选择调入仓库", trigger: "change" },
+  ],
+  quantity: [{ required: true, message: "请输入调仓数量", trigger: "blur" }],
 });
 const { proxy } = getCurrentInstance();
 const selectConfig = reactive([
   {
     label: "数据来源",
-    prop: "type",
+    prop: "businessType",
     data: [],
   },
   {
     label: "出库状态",
-    prop: "type",
+    prop: "status",
     data: [],
   },
 ]);
@@ -282,7 +267,7 @@ const config = computed(() => {
         prop: "status",
       },
       render(status) {
-        return status == 0 ? "未出库" : status == 1 ? "部分出库" : "";
+        return status == 0 ? "未出库" : status == 1 ? "部分出库" : "入库完成";
       },
     },
     {
@@ -294,18 +279,20 @@ const config = computed(() => {
       // 渲染 el-button,一般用在最后一列。
       renderHTML(row) {
         return [
-          {
-            attrs: {
-              label: "出库",
-              type: "primary",
-              text: true,
-              disabled: row.status > 1,
-            },
-            el: "button",
-            click() {
-              outBound(row);
-            },
-          },
+          row.status < 2
+            ? {
+                attrs: {
+                  label: "出库",
+                  type: "primary",
+                  text: true,
+                  disabled: row.status > 1,
+                },
+                el: "button",
+                click() {
+                  outBound(row);
+                },
+              }
+            : {},
         ];
       },
     },
@@ -453,62 +440,66 @@ const openModal = () => {
 
 const submitForm = () => {
   byform.value.handleSubmit((valid) => {
-    const list = formData.data.stockWaitDetailsList;
-    const total = list.reduce((total, x) => (total += Number(x.quantity)), 0);
-    if (!(total > 0)) {
-      return ElMessage({
-        message: `本次入库不能为0!`,
-        type: "info",
-      });
-    }
-    for (let i = 0; i < list.length; i++) {
-      const e = list[i];
-      if (Number(e.receiptQuantity) + e.quantity > Number(e.arrivalQuantity)) {
-        return ElMessage({
-          message: "本次入库加已入库数量不可大于发货数量!",
-          type: "info",
-        });
+    if (modalType.value === "add") {
+      const list = formData.data.jdOrderDetailsList;
+      for (let i = 0; i < list.length; i++) {
+        const e = list[i];
+        if (!(e.quantity > 0)) {
+          return ElMessage({
+            message: "调仓数量不能为0!",
+            type: "info",
+          });
+        }
+        if (e.quantity > e.waitQuantity) {
+          return ElMessage({
+            message: "调仓数量不能大于待出库数量!",
+            type: "info",
+          });
+        }
       }
+      submitLoading.value = true;
+      proxy.post("/jdOrder/outbound", formData.data).then(
+        (res) => {
+          ElMessage({
+            message: "操作成功",
+            type: "success",
+          });
+          dialogVisible.value = false;
+          submitLoading.value = false;
+          getList();
+        },
+        (err) => (submitLoading.value = false)
+      );
     }
-    submitLoading.value = true;
-    proxy.post("/stockWait/addByWdly", formData.data).then(
-      (res) => {
-        ElMessage({
-          message: "操作成功",
-          type: "success",
-        });
-        dialogVisible.value = false;
-        submitLoading.value = false;
-        getList();
-      },
-      (err) => (submitLoading.value = false)
-    );
   });
 };
 
 const outBound = (row) => {
-  const index = row.$index;
-  modalType.value = "add";
-  if (index % 2 == 0) {
-    formConfig.value = configData[0];
-  } else {
+  if (row.businessType == 5) {
+    modalType.value = "add";
     formConfig.value = configData[1];
+    proxy.post("/jdOrder/detail", { id: row.businessId }).then((res) => {
+      formData.data = {
+        id: row.businessId,
+        outWarehouseId: "",
+        inWarehouseId: "",
+        jdOrderDetailsList: res.jdOrderDetailsList.map((x) => ({
+          waitQuantity: row.quantity,
+          quantity: row.quantity,
+          productId: x.productId,
+          id: x.id,
+          productCode: x.productCode,
+          productName: x.productName,
+          productSpec: x.productSpec,
+        })),
+      };
+      dialogVisible.value = true;
+    });
+  } else {
+    modalType.value = "edit";
+    formConfig.value = configData[0];
   }
-  // proxy.post("/stockWait/detailByWdly", { id: row.id }).then((res) => {
-  //   const json = JSON.parse(res.victoriatouristJson);
-  //   formData.data = {
-  //     type: "1",
-  //     businessType: res.businessType,
-  //     warehouseId: "",
-  //     code: json.code,
-  //     stockWaitDetailsList: res.stockWaitDetailsList.map((x) => ({
-  //       ...x,
-  //       arrivalQuantity: x.quantity,
-  //       quantity: 0,
-  //     })),
-  //   };
-  //   dialogVisible.value = true;
-  // });
+
   dialogVisible.value = true;
 };
 const warehouseType = ref([]);
@@ -519,7 +510,7 @@ const businessType = [
 ];
 
 const handleRemove = (index) => {
-  formData.data.stockTransferDetailsList.splice(index, 1);
+  formData.data.jdOrderDetailsList.splice(index, 1);
   return ElMessage({
     message: "删除成功",
     type: "success",
@@ -536,17 +527,17 @@ const clickAdd = () => {
 
 const select = (x) => {
   if (
-    formData.data.stockTransferDetailsList &&
-    formData.data.stockTransferDetailsList.length > 0
+    formData.data.jdOrderDetailsList &&
+    formData.data.jdOrderDetailsList.length > 0
   ) {
-    let data = formData.data.stockTransferDetailsList.filter(
+    let data = formData.data.jdOrderDetailsList.filter(
       (row) => row.bussinessId === x.productId
     );
     if (data && data.length > 0) {
       return ElMessage("请勿重复添加");
     }
   }
-  formData.data.stockTransferDetailsList.push({
+  formData.data.jdOrderDetailsList.push({
     goodType: x.goodType,
     productCode: x.productCode,
     productName: x.productName,

+ 2 - 1
src/views/WDLY/purchaseManage/alreadyPurchase/index.vue

@@ -280,7 +280,8 @@ const config = computed(() => {
         prop: "arrivalStatus",
       },
       render(status) {
-        return arrivalStatus.find((x) => x.value == status).label;
+        const current = arrivalStatus.find((x) => x.value == status);
+        if (current) return current.label;
       },
     },
     {

+ 9 - 8
src/views/WDLY/stockManage/query/index.vue

@@ -113,7 +113,7 @@ const selectConfigData = [
   [
     {
       label: "仓库名称",
-      prop: "type",
+      prop: "id",
       data: [],
     },
     {
@@ -330,31 +330,31 @@ const configData = [
     {
       attrs: {
         label: "spu编码",
-        prop: "warehouseName",
+        prop: "productSpuCode",
       },
     },
     {
       attrs: {
         label: "spu名称",
-        prop: "productClassifyName",
+        prop: "productSpuName",
       },
     },
     {
       attrs: {
         label: "关联产品数",
-        prop: "productCode",
+        prop: "linkProductQuantity",
       },
     },
     {
       attrs: {
         label: "库存数量",
-        prop: "productName",
+        prop: "quantity",
       },
     },
     {
       attrs: {
         label: "可组合数量",
-        prop: "productSpec",
+        prop: "combinationQuantity",
       },
     },
   ],
@@ -459,7 +459,7 @@ const handleChange = () => {
     selectConfig.value = selectConfigData[1];
     config.value = configData[1];
   } else {
-    requestUrl = "/stock/pageByProduct";
+    requestUrl = "/stock/pageByProductSpu";
     selectConfig.value = selectConfigData[1];
     config.value = configData[2];
   }
@@ -476,7 +476,8 @@ const warehouseListData = () => {
     })
     .then((message) => {
       warehouseList.value = message.rows;
-      selectConfig[0].data = warehouseList.value.map((x) => ({
+      selectConfig.value = selectConfigData[0];
+      selectConfig.value[0].data = warehouseList.value.map((x) => ({
         label: x.name,
         value: x.id,
       }));

+ 131 - 0
src/views/customer/portrait/com/SaleStatistics.vue

@@ -0,0 +1,131 @@
+<template>
+  <div class="details" v-loading="loading">
+    <div class="item first">
+      <div class="left_">
+        <div class="money">
+          {{ moneyFormat(saleData.salesAmount, 2) }}
+        </div>
+        <div>销售额(¥)</div>
+      </div>
+      <div class="right_">
+        <div class="icon">
+          <img src="@/assets/images/portrait/icon_sales.png" alt="" />
+        </div>
+      </div>
+    </div>
+    <div class="item two">
+      <div class="left_">
+        <div class="money">
+          {{ moneyFormat(saleData.profitAmount, 2) }}
+        </div>
+        <div>利润额(¥)</div>
+      </div>
+      <div class="right_">
+        <div class="icon">
+          <img src="@/assets/images/portrait/icon_profits.png" alt="" />
+        </div>
+      </div>
+    </div>
+    <div class="item three">
+      <div class="left_">
+        <div class="money">
+          {{ saleData.mailCount }}
+        </div>
+        <div>往来邮件(封)</div>
+      </div>
+      <div class="right_">
+        <div class="icon">
+          <img src="@/assets/images/portrait/icon_email.png" alt="" />
+        </div>
+      </div>
+    </div>
+    <div class="item four">
+      <div class="left_">
+        <div class="money">
+          {{ saleData.reportPriceCount }}
+        </div>
+        <div>报价次数(次)</div>
+      </div>
+      <div class="right_">
+        <div class="icon">
+          <img src="@/assets/images/portrait/icon_offer.png" alt="" />
+        </div>
+      </div>
+    </div>
+    <div class="item five">
+      <div class="left_">
+        <div class="money">
+          {{ saleData.contractCount }}
+        </div>
+        <div>成交合同(单)</div>
+      </div>
+      <div class="right_">
+        <div class="icon">
+          <img src="@/assets/images/portrait/icon_cjht.png" alt="" />
+        </div>
+      </div>
+    </div>
+  </div>
+</template>
+
+<script setup>
+const saleData = ref({});
+</script>
+
+<style lang="scss" scoped>
+.details {
+  margin-top: 10px;
+  display: flex;
+  justify-content: space-around;
+  .item {
+    border-radius: 10px;
+    width: 13vw;
+    height: 70px;
+    padding: 10px;
+    box-sizing: border-box;
+    display: flex;
+    justify-content: space-between;
+    .left_ {
+      display: flex;
+      flex-direction: column;
+      justify-content: space-around;
+      .money {
+        font-weight: 700;
+        color: #333333;
+        font-size: 15px;
+      }
+    }
+    .right_ {
+      .icon {
+        img {
+          width: 20px;
+          height: 20px;
+          margin-top: 6px;
+        }
+        width: 34px;
+        height: 34px;
+        margin-top: 10px;
+        border-radius: 8px;
+        background-color: #ffffff;
+        text-align: center;
+        line-height: 34px;
+      }
+    }
+  }
+  .first {
+    background: linear-gradient(#c7e3fe, #dfecff);
+  }
+  .two {
+    background: linear-gradient(#eae8fb, #ded9ff);
+  }
+  .three {
+    background: linear-gradient(#fcf1e4, #fce5ca);
+  }
+  .four {
+    background: linear-gradient(#e2fbe8, #e2fbe8);
+  }
+  .five {
+    background: linear-gradient(#ffebe9, #ffebe9);
+  }
+}
+</style>

+ 5 - 1
src/views/customer/portrait/index.vue

@@ -25,7 +25,9 @@
           <div class="title-box">
             <TitleInfo :content="titleList[2]"></TitleInfo>
           </div>
-          <div class="content-box">2</div>
+          <div class="content-box">
+            <SaleStatistics></SaleStatistics>
+          </div>
         </div>
       </div>
 
@@ -55,6 +57,8 @@
 <script setup>
 import TitleInfo from "@/components/TitleInfo/index.vue";
 import SalesDetails from "./com/SalesDetails.vue";
+import SaleStatistics from "./com/SaleStatistics.vue";
+
 const titleList = ["客户信息", "最新跟进", "销售统计", "销售走势", "销售明细"];
 </script>