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

Merge branch '售后列表,销售退货表整改'

lxf 1 éve
szülő
commit
d4b6c663c6

+ 9 - 3
src/views/group/finance/check-bill/printBOM.vue

@@ -17,7 +17,8 @@
           <el-table-column label="快递包材费汇总" align="center" prop="deliveryMaterialsFeeSummary" width="130" />
           <el-table-column label="包装人工费汇总" align="center" prop="packingLaborSummary" width="130" />
           <el-table-column label="管理费汇总" align="center" prop="managementFeeSummary" width="130" />
-          <el-table-column label="打样费" align="center" prop="proofingFeeSummary" width="100" />
+          <el-table-column label="打样费" align="center" prop="proofingFeeSummary" width="100" v-if="tabValues.tabsCard != 4" />
+          <el-table-column label="质检费" align="center" prop="checkFeeSummary" width="100" v-else />
           <el-table-column label="小计" align="center" width="120">
             <template #default="{ row }">
               {{ moneyFormat(row.subtotal) }}
@@ -87,7 +88,7 @@ const labelList = ref({
   7: "deliveryMaterialsFeeSummary",
   8: "packingLaborSummary",
   9: "managementFeeSummary",
-  10: "proofingFeeSummary",
+  10: props.tabValues.tabsCard != 4 ? "proofingFeeSummary" : "checkFeeSummary",
   11: "subtotal",
   12: "total",
 });
@@ -186,7 +187,12 @@ const getSummaries = ({ columns, data }) => {
   return sums;
 };
 const getTotal = (label) => {
-  let list = tableData.value.map((item) => item[label]);
+  let list = [];
+  if (props.tabValues.tabsCard === 4 && label === "proofingFeeSummary") {
+    list = tableData.value.map((item) => item["checkFeeSummary"]);
+  } else {
+    list = tableData.value.map((item) => item[label]);
+  }
   return Number(Math.round(list.reduce((acc, curr) => acc + curr, 0) * 100) / 100);
 };
 const emit = defineEmits(["clickCancel"]);

+ 11 - 4
src/views/group/finance/check-bill/printOrder.vue

@@ -93,6 +93,7 @@ watch(
                           managementFeeSummary: res[i].skuSpecList[j].bomSpecList[y].managementFeeSummary,
                           proofingFeeSummary: res[i].skuSpecList[j].bomSpecList[y].proofingFeeSummary,
                           unitPriceSKU: res[i].skuSpecList[j].unitPrice,
+                          checkFee: res[i].skuSpecList[j].checkFee,
                           total: res[i].total,
                           indexOne: indexOne,
                           indexTwo: indexTwo,
@@ -257,21 +258,27 @@ const columns = computed(() => {
       width: 100,
     },
     {
-      dataKey: "subtotal",
+      dataKey: "checkFee",
       key: "column-18",
+      title: "质检费",
+      width: 100,
+    },
+    {
+      dataKey: "subtotal",
+      key: "column-19",
       title: "小计",
       width: 120,
     },
     {
       dataKey: "total",
-      key: "column-19",
+      key: "column-20",
       title: "合计",
       width: 120,
     },
   ];
 });
-const mergeColumnOne = [0, 1, 2, 19];
-const mergeColumnTwo = [3, 4, 5, 17, 18];
+const mergeColumnOne = [0, 1, 2, 20];
+const mergeColumnTwo = [3, 4, 5, 17, 18, 19];
 const Row = ({ rowData, cells }) => {
   if (rowData.indexOne > 1) {
     for (let i = 0; i < mergeColumnOne.length; i++) {

+ 6 - 3
src/views/group/finance/check-bill/printSKU.vue

@@ -11,6 +11,7 @@
           <el-table-column label="SKU品名" prop="skuSpecName" min-width="220" />
           <el-table-column label="数量(PCS)" align="center" prop="quantity" width="160" />
           <el-table-column label="SKU单价" align="center" prop="unitPrice" width="160" />
+          <el-table-column label="质检费" align="center" prop="checkFee" width="140" />
           <el-table-column label="小计" align="center" width="180">
             <template #default="{ row }">
               {{ moneyFormat(row.subtotal) }}
@@ -74,7 +75,9 @@ watch(
 );
 const labelList = ref({
   2: "quantity",
-  5: "total",
+  4: "checkFee",
+  5: "subtotal",
+  6: "total",
 });
 const textList = ref({
   1: "胜德体育总经理:",
@@ -102,7 +105,7 @@ const getSummaries = ({ columns, data }) => {
       return;
     } else {
       sums[index] = h("div", { class: "" }, [
-        [1, 3, 4].includes(index)
+        [1, 3].includes(index)
           ? h("div", {
               style: {
                 "text-align": "center",
@@ -150,7 +153,7 @@ const getSummaries = ({ columns, data }) => {
           },
           innerHTML: ".",
         }),
-        [3, 4, 5].includes(index)
+        [3, 4, 5, 6].includes(index)
           ? h("div", {
               style: {
                 "text-align": "center",

+ 9 - 3
src/views/group/finance/summary/printBOM.vue

@@ -17,7 +17,8 @@
           <el-table-column label="快递包材费汇总" align="center" prop="deliveryMaterialsFeeSummary" width="130" />
           <el-table-column label="包装人工费汇总" align="center" prop="packingLaborSummary" width="130" />
           <el-table-column label="管理费汇总" align="center" prop="managementFeeSummary" width="130" />
-          <el-table-column label="打样费" align="center" prop="proofingFeeSummary" width="100" />
+          <el-table-column label="打样费" align="center" prop="proofingFeeSummary" width="100" v-if="tabValues.tabsCard != 4" />
+          <el-table-column label="质检费" align="center" prop="checkFeeSummary" width="100" v-else />
           <el-table-column label="小计" align="center" width="120">
             <template #default="{ row }">
               {{ moneyFormat(row.subtotal) }}
@@ -87,7 +88,7 @@ const labelList = ref({
   7: "deliveryMaterialsFeeSummary",
   8: "packingLaborSummary",
   9: "managementFeeSummary",
-  10: "proofingFeeSummary",
+  10: props.tabValues.tabsCard != 4 ? "proofingFeeSummary" : "checkFeeSummary",
   11: "subtotal",
   12: "total",
 });
@@ -186,7 +187,12 @@ const getSummaries = ({ columns, data }) => {
   return sums;
 };
 const getTotal = (label) => {
-  let list = tableData.value.map((item) => item[label]);
+  let list = [];
+  if (props.tabValues.tabsCard === 4 && label === "proofingFeeSummary") {
+    list = tableData.value.map((item) => item["checkFeeSummary"]);
+  } else {
+    list = tableData.value.map((item) => item[label]);
+  }
   return Number(Math.round(list.reduce((acc, curr) => acc + curr, 0) * 100) / 100);
 };
 const emit = defineEmits(["clickCancel"]);

+ 11 - 4
src/views/group/finance/summary/printOrder.vue

@@ -93,6 +93,7 @@ watch(
                           managementFeeSummary: res[i].skuSpecList[j].bomSpecList[y].managementFeeSummary,
                           proofingFeeSummary: res[i].skuSpecList[j].bomSpecList[y].proofingFeeSummary,
                           unitPriceSKU: res[i].skuSpecList[j].unitPrice,
+                          checkFee: res[i].skuSpecList[j].checkFee,
                           total: res[i].total,
                           indexOne: indexOne,
                           indexTwo: indexTwo,
@@ -264,21 +265,27 @@ const columns = computed(() => {
       width: 100,
     },
     {
-      dataKey: "subtotal",
+      dataKey: "checkFee",
       key: "column-18",
+      title: "质检费",
+      width: 100,
+    },
+    {
+      dataKey: "subtotal",
+      key: "column-19",
       title: "小计",
       width: 120,
     },
     {
       dataKey: "total",
-      key: "column-19",
+      key: "column-20",
       title: "合计",
       width: 120,
     },
   ];
 });
-const mergeColumnOne = [0, 1, 2, 19];
-const mergeColumnTwo = [3, 4, 5, 17, 18];
+const mergeColumnOne = [0, 1, 2, 20];
+const mergeColumnTwo = [3, 4, 5, 17, 18, 19];
 const Row = ({ rowData, cells }) => {
   if (rowData.indexOne > 1) {
     for (let i = 0; i < mergeColumnOne.length; i++) {

+ 6 - 3
src/views/group/finance/summary/printSKU.vue

@@ -11,6 +11,7 @@
           <el-table-column label="SKU品名" prop="skuSpecName" min-width="220" />
           <el-table-column label="数量(PCS)" align="center" prop="quantity" width="160" />
           <el-table-column label="SKU单价" align="center" prop="unitPrice" width="160" />
+          <el-table-column label="质检费" align="center" prop="checkFee" width="140" />
           <el-table-column label="小计" align="center" width="180">
             <template #default="{ row }">
               {{ moneyFormat(row.subtotal) }}
@@ -74,7 +75,9 @@ watch(
 );
 const labelList = ref({
   2: "quantity",
-  5: "total",
+  4: "checkFee",
+  5: "subtotal",
+  6: "total",
 });
 const textList = ref({
   1: "胜德体育总经理:",
@@ -102,7 +105,7 @@ const getSummaries = ({ columns, data }) => {
       return;
     } else {
       sums[index] = h("div", { class: "" }, [
-        [1, 3, 4].includes(index)
+        [1, 3].includes(index)
           ? h("div", {
               style: {
                 "text-align": "center",
@@ -150,7 +153,7 @@ const getSummaries = ({ columns, data }) => {
           },
           innerHTML: ".",
         }),
-        [3, 4, 5].includes(index)
+        [3, 4, 5, 6].includes(index)
           ? h("div", {
               style: {
                 "text-align": "center",

+ 137 - 2
src/views/group/order/after-sale/index.vue

@@ -7,16 +7,53 @@
       :loading="loading"
       :searchConfig="searchConfig"
       highlight-current-row
+      :action-list="[
+        {
+          text: '同步万里牛售后单',
+          action: () => clickSynchronousOrder(),
+          loading: btnLoading,
+        },
+      ]"
       @get-list="getList"
       @clickReset="clickReset"
       :spanMethod="spanMethod"
       :borderStatus="true">
     </byTable>
+
+    <el-dialog title="质检" v-if="openQualityTesting" v-model="openQualityTesting" width="500px">
+      <el-form :model="rowData" ref="submit" :rules="rules" v-loading="loadingQualityTesting">
+        <div style="margin: 10px 0; font-weight: 700; font-size: 18px; color: black">请根据质检结果选择,此裸垫是否可二次销售</div>
+        <template v-if="rowData.orderExchangeDetailList && rowData.orderExchangeDetailList.length > 0">
+          <div v-for="(item, index) in rowData.orderExchangeDetailList" :key="index" style="margin-top: 20px">
+            <div style="margin-bottom: 10px">SKU品号:{{ item.skuSpecCode }}</div>
+            <el-form-item
+              label="质检通过数量"
+              :prop="'orderExchangeDetailList.' + index + '.checkPassesQuantity'"
+              :rules="rules.checkPassesQuantity"
+              :inline-message="true">
+              <el-input-number
+                onmousewheel="return false;"
+                v-model="item.checkPassesQuantity"
+                placeholder="数量"
+                style="width: 100%"
+                :controls="false"
+                :min="0"
+                :precision="0" />
+            </el-form-item>
+          </div>
+        </template>
+      </el-form>
+      <template #footer>
+        <el-button @click="openQualityTesting = false" size="large" v-preReClick>取 消</el-button>
+        <el-button type="primary" @click="clickSubmit()" size="large" v-preReClick>质检完成</el-button>
+      </template>
+    </el-dialog>
   </el-card>
 </template>
 
 <script setup>
 import byTable from "/src/components/byTable/index";
+import { ElMessage } from "element-plus";
 
 const { proxy } = getCurrentInstance();
 const departmentList = ref([]);
@@ -30,9 +67,20 @@ const sourceList = ref({
     orderCode: "",
     orderWlnCode: "",
     departmentId: "",
+    status: 0,
   },
 });
 const loading = ref(false);
+const status = ref([
+  {
+    dictKey: 0,
+    dictValue: "待质检",
+  },
+  {
+    dictKey: 1,
+    dictValue: "已质检入库",
+  },
+]);
 const searchConfig = computed(() => {
   return [
     {
@@ -56,6 +104,12 @@ const searchConfig = computed(() => {
       data: departmentList.value,
       label: "事业部",
     },
+    {
+      type: "select",
+      prop: "status",
+      data: status.value,
+      label: "质检状态",
+    },
   ];
 });
 const config = computed(() => {
@@ -114,6 +168,16 @@ const config = computed(() => {
     },
     {
       attrs: {
+        label: "质检状态",
+        prop: "status",
+        width: 120,
+      },
+      render(val) {
+        return proxy.dictKeyValue(val, status.value);
+      },
+    },
+    {
+      attrs: {
         label: "操作人",
         prop: "createUserName",
       },
@@ -121,12 +185,25 @@ const config = computed(() => {
     {
       attrs: {
         label: "操作",
-        width: 100,
+        width: 140,
         align: "center",
         fixed: "right",
       },
       renderHTML(row) {
         return [
+          row.status === 0
+            ? {
+                attrs: {
+                  label: "质检",
+                  type: "primary",
+                  text: true,
+                },
+                el: "button",
+                click() {
+                  clickQualityTesting(row);
+                },
+              }
+            : {},
           {
             attrs: {
               label: "查看详情",
@@ -204,6 +281,8 @@ const getList = async (req, status) => {
             returnAmount: res.rows[i].orderExchangeDetailList[j].returnAmount,
             createTime: res.rows[i].createTime,
             createUserName: res.rows[i].createUserName,
+            status: res.rows[i].status,
+            orderExchangeDetailList: res.rows[i].orderExchangeDetailList,
           });
         }
       }
@@ -240,6 +319,62 @@ const spanMethod = ({ rowIndex, columnIndex }) => {
     };
   }
 };
+const rowData = ref({});
+const openQualityTesting = ref(false);
+const loadingQualityTesting = ref(false);
+const rules = ref({
+  checkPassesQuantity: [{ required: true, message: "请输入质检通过数量", trigger: "blur" }],
+});
+const clickQualityTesting = (item) => {
+  rowData.value = proxy.deepClone(item);
+  if (rowData.value.orderExchangeDetailList && rowData.value.orderExchangeDetailList.length > 0) {
+    rowData.value.orderExchangeDetailList = rowData.value.orderExchangeDetailList.map((row) => {
+      return {
+        ...row,
+        checkPassesQuantity: row.quantity,
+      };
+    });
+  }
+  loadingQualityTesting.value = false;
+  openQualityTesting.value = true;
+};
+const clickSubmit = () => {
+  proxy.$refs.submit.validate((valid) => {
+    if (valid) {
+      loadingQualityTesting.value = true;
+      proxy.post("/orderExchange/orderExchangeCheck", rowData.value).then(
+        () => {
+          ElMessage({ message: "质检完成", type: "success" });
+          openQualityTesting.value = false;
+          getList();
+        },
+        (err) => {
+          console.log(err);
+          loadingQualityTesting.value = false;
+        }
+      );
+    }
+  });
+};
+const btnLoading = ref(false);
+const clickSynchronousOrder = () => {
+  btnLoading.value = true;
+  proxy.post("/orderHandle/resynchronizationReturnOrder", {}).then(
+    () => {
+      ElMessage.success("同步完成成功");
+      btnLoading.value = false;
+      getList();
+    },
+    (err) => {
+      ElMessage.error(`同步失败: ${err} !`);
+      btnLoading.value = false;
+    }
+  );
+};
 </script>
 
-<style lang="scss" scoped></style>
+<style lang="scss" scoped>
+::v-deep(.el-input-number .el-input__inner) {
+  text-align: left;
+}
+</style>