ソースを参照

fix:销售反馈优化
fix:不合格处置流程出来新增打印

liziliang 1 日 前
コミット
bb99cd9e0e
3 ファイル変更126 行追加29 行削除
  1. 24 1
      src/api/sales/index.ts
  2. 97 27
      src/views/sales/add.vue
  3. 5 1
      src/views/unqualified/handle20.vue

+ 24 - 1
src/api/sales/index.ts

@@ -25,6 +25,29 @@ export function getCheckList(data: object) {
   });
 }
 
+export function getMaterialList(checkCode: string, materialModel: string) {
+  return request({
+    url: "/api/v1/sales/checkCode/getMaterialModel",
+    method: "get",
+    params: {
+      checkCode,
+      materialModel
+    }
+  });
+}
+
+export function getSeqNoList(checkCode: string, materialModel: string, seqNo: string) {
+  return request({
+    url: "/api/v1/sales/checkCode/getSeqNoList",
+    method: "get",
+    params: {
+      checkCode,
+      materialModel,
+      seqNo
+    }
+  });
+}
+
 // 用户列表
 export function getUserList(data: object) {
   return request({
@@ -50,7 +73,7 @@ export function deleteFeedback(id: number) {
   return request({
     url: "/api/v1/sales/del",
     method: "post",
-    data: { id },
+    data: {id},
   });
 }
 

+ 97 - 27
src/views/sales/add.vue

@@ -13,17 +13,17 @@
           style="max-width: 600px"
         >
           <el-form-item label="顾客名称" prop="customer">
-            <el-input v-model="saleForm.customer" />
+            <el-input v-model="saleForm.customer"/>
           </el-form-item>
           <el-form-item label="详细地址" prop="address">
-            <el-input v-model="saleForm.address" />
+            <el-input v-model="saleForm.address"/>
           </el-form-item>
           <el-form-item label="联系人" prop="contacts">
-            <el-input v-model="saleForm.contacts" />
+            <el-input v-model="saleForm.contacts"/>
           </el-form-item>
 
           <el-form-item label="联系电话" prop="phoneNo">
-            <el-input v-model="saleForm.phoneNo" />
+            <el-input v-model="saleForm.phoneNo"/>
           </el-form-item>
           <!--          <el-form-item label="阶段" prop="stage">
             <el-input v-model="saleForm.stage" />
@@ -35,6 +35,7 @@
               placeholder="请选择检验批号"
               style="width: 100%"
               @change="orderSelect"
+              filterable
             >
               <el-option
                 v-for="item in orders"
@@ -44,6 +45,23 @@
               />
             </el-select>
           </el-form-item>
+          <el-form-item label="产品型号">
+            <el-select
+              v-model="selectMaterialModel"
+              value-key="materialModel"
+              placeholder="请选择产品型号"
+              style="width: 100%"
+              @change="modelSelect"
+              filterable
+            >
+              <el-option
+                v-for="item in selectdMaterialModel"
+                :key="item.materialModel"
+                :label="item.materialModel"
+                :value="item"
+              />
+            </el-select>
+          </el-form-item>
 
           <!--          <el-form-item label="检验批号">
             <div>{{ selectedOrder.workOrderCode }}</div>
@@ -52,12 +70,19 @@
           <el-form-item label="产品编号" prop="seqs">
             <el-select
               v-model="saleForm.seqs"
+              @change="handleSelectAll"
               value-key="orderCode"
               placeholder="请选择流转卡号"
               style="width: 100%"
               filterable
               multiple
             >
+              <!-- 全选选项 -->
+              <el-option
+                label="全选"
+                :value="allSelectValue"
+              />
+
               <el-option
                 v-for="item in seqList"
                 :key="item.label"
@@ -66,7 +91,7 @@
               />
             </el-select>
           </el-form-item>
-          <el-form-item label="产品分类" prop="seqs">
+          <el-form-item label="产品分类" prop="type">
             <el-select
               v-model="saleForm.type"
               value-key="value"
@@ -91,7 +116,7 @@
           style="max-width: 600px"
         >
           <el-form-item label="顾客投诉或建议" prop="content">
-            <el-input v-model="remark1.content" type="textarea" />
+            <el-input v-model="remark1.content" type="textarea"/>
           </el-form-item>
           <el-form-item label="填表人" prop="user">
             <!--            <el-select
@@ -150,9 +175,12 @@ import {
   getCheckList,
   getOrderList,
   getUserList,
+  getMaterialList,
+  getSeqNoList,
 } from "@/api/sales/index";
-import { getUserTree } from "@/api/user/index";
-import { useDictionaryStore } from "@/store";
+import {getUserTree} from "@/api/user/index";
+import {useDictionaryStore} from "@/store";
+
 const drawerVisible = ref(false);
 const disabledDate = (time) => {
   //选择今天以及今天之后的日期
@@ -160,7 +188,7 @@ const disabledDate = (time) => {
   //选择今天以及今天之前的日期
   return time.getTime() > Date.now() - 8.64e7; //如果没有后面的-8.64e7就是不可以选择今天的
 };
-const { dicts } = useDictionaryStore();
+const {dicts} = useDictionaryStore();
 const baseInfoRef = ref(null);
 const saleForm = reactive({
   customer: "",
@@ -182,32 +210,33 @@ const remark1 = reactive({
 
 const rules = {
   customer: [
-    { required: true, message: "请输入顾客名称", trigger: "blur" },
-    { min: 2, max: 50, message: "长度在 2 到 50 个字符", trigger: "blur" },
+    {required: true, message: "请输入顾客名称", trigger: "blur"},
+    {min: 2, max: 50, message: "长度在 2 到 50 个字符", trigger: "blur"},
   ],
   address: [
-    { required: true, message: "请输入详细地址", trigger: "blur" },
-    { min: 2, max: 200, message: "长度在 2 到 200 个字符", trigger: "blur" },
+    {required: true, message: "请输入详细地址", trigger: "blur"},
+    {min: 2, max: 200, message: "长度在 2 到 200 个字符", trigger: "blur"},
   ],
   contacts: [
-    { required: true, message: "请输入联系人", trigger: "blur" },
-    { min: 2, max: 20, message: "长度在 2 到 20 个字符", trigger: "blur" },
+    {required: true, message: "请输入联系人", trigger: "blur"},
+    {min: 2, max: 20, message: "长度在 2 到 20 个字符", trigger: "blur"},
   ],
   phoneNo: [
-    { required: true, message: "请输入联系电话", trigger: "blur" },
-    { min: 11, max: 11, message: "请输入正确的手机号", trigger: "blur" },
+    {required: true, message: "请输入联系电话", trigger: "blur"},
+    {min: 11, max: 11, message: "请输入正确的手机号", trigger: "blur"},
   ],
-  seqs: [{ required: true, message: "请选择订单信息", trigger: "change" }],
+  seqs: [{required: true, message: "请选择产品分类", trigger: "change"}],
+  materialModel: [{required: true, message: "请选择产品型号", trigger: "change"}],
 };
 const rules1 = {
   content: [
-    { required: true, message: "请输入顾客投诉或建议", trigger: "blur" },
-    { min: 2, max: 200, message: "长度在 2 到 200 个字符", trigger: "blur" },
+    {required: true, message: "请输入顾客投诉或建议", trigger: "blur"},
+    {min: 2, max: 200, message: "长度在 2 到 200 个字符", trigger: "blur"},
   ],
   user: [
-    { required: true, message: "请输入姓名", trigger: "blur" },
+    {required: true, message: "请输入姓名", trigger: "blur"},
   ],
-  time: [{ required: true, message: "请选择日期", trigger: "change" }],
+  time: [{required: true, message: "请选择日期", trigger: "change"}],
   nextRemarkUser: [
     {required: true, message: "请选择处理人", trigger: "blur"},
   ],
@@ -217,7 +246,31 @@ const rules1 = {
 const orders = ref([]);
 const typeList = dicts.sales_info_type;
 const selectedCheckCode = ref({});
+const selectdMaterialModel = ref({});
+const selectMaterialModel = ref("");
 const selectCheckCode = ref("");
+const allSelectValue = ref("ALL_SELECT_MAGIC_VALUE"); // 全选的特殊值
+const handleSelectAll = (selectedValues) => {
+  const allLabels = seqList.value.map(item => item.label);
+  const allSelected = allLabels.length > 0 &&
+    allLabels.every(label => selectedValues.includes(label));
+
+  // 如果点击了"全选"选项
+  if (selectedValues.includes(allSelectValue.value)) {
+    saleForm.seqs = allSelected ? [] : [...allLabels];
+    return;
+  }
+
+  // 如果手动选择了所有选项(不通过全选按钮)
+  if (selectedValues.length === allLabels.length && allLabels.length > 0) {
+    // 保持纯净值,不添加全选标识
+    saleForm.seqs = [...allLabels];
+    return;
+  }
+
+  // 其他情况直接使用选择的值
+  saleForm.seqs = selectedValues;
+}
 const getOrders = async () => {
   const res = await getCheckList({});
   orders.value = res.data;
@@ -228,11 +281,28 @@ const getOrders = async () => {
 };
 const orderSelect = (value) => {
   selectedCheckCode.value = value;
-  seqList.value = selectedCheckCode.value.seqs.map((item, index) => ({
-    value: item,
-    label: item,
-  }));
+  console.log(value, "ppp")
+
   saleForm.seqs = [];
+  getMaterialList(value.checkCode, "").then((res) => {
+    console.log(res);
+    selectdMaterialModel.value = res.data;
+  });
+  console.log(selectdMaterialModel, "lizil")
+};
+const modelSelect = (value) => {
+  console.log(value, "6666")
+  saleForm.materialModel = value.materialModel;
+  getSeqNoList(value.checkCode, value.materialModel, "").then((res) => {
+    console.log(res);
+    seqList.value = res.data.seqs.map((item, index) => ({
+      value: item,
+      label: item,
+    }));
+    console.log(seqList, "woani")
+  });
+
+  // console.log(selectdMaterialModel,"lizil")
 };
 
 const seqList = ref([]);
@@ -259,7 +329,7 @@ const showDrawer = () => {
   drawerVisible.value = true;
 };
 
-defineExpose({ showDrawer });
+defineExpose({showDrawer});
 
 const cancelClick = () => {
   drawerVisible.value = false;

+ 5 - 1
src/views/unqualified/handle20.vue

@@ -1,5 +1,9 @@
 <template>
-  <el-drawer v-model="drawerVisible" size="1000">
+
+  <el-drawer v-model="drawerVisible" size="1000" id="print">
+    <div>
+      <el-button type="primary" v-print="'#print'">打印</el-button>
+    </div>
     <div>
       <DetailCom ref="detailComRef"></DetailCom>
     </div>