guoyujia 4 mesi fa
parent
commit
dfdfe886c7

+ 14 - 0
src/api/business/daywork.js

@@ -209,6 +209,20 @@ export function updateDayworkFurnace(data) {
 		data: data
 	})
 }
+export function processesMultiForOutsource(data) {
+	return request({
+		url: baseUrl + '/business/productionDaywork/processesMultiForOutsource',
+		method: 'post',
+		data: data
+	})
+}
+export function multiProcessesForOutsourceByFirst(data) {
+	return request({
+		url: baseUrl + '/business/productionDaywork/multiProcessesForOutsourceByFirst',
+		method: 'post',
+		data: data
+	})
+}
 /**
  * 批次日报
  * @param {*} query 

+ 119 - 2
src/views/business/firstOutsource/form.vue

@@ -122,6 +122,15 @@
         <el-button v-show="editStatus" type="primary" icon="Plus" @click="handleChoiceFurnaceNoInfo()">
           批量选择炉号
         </el-button>
+        <el-button
+          v-show="editStatus"
+          :disabled="selections.length === 0"
+          type="primary"
+          icon="Plus"
+          @click="handleShowMultiDialogProcesses"
+        >
+          批量选择工序
+        </el-button>
       </div>
       <div class="el-table-container">
         <div class="el-table-inner-container">
@@ -131,6 +140,7 @@
             <el-table-column label="行号" type="index" align="center" width="48" />
             <el-table-column label="批次号" align="center" prop="lotCode" width="104" />
             <el-table-column label="产品描述" align="center" prop="productDescription" width="320" />
+            <el-table-column label="图纸版本" width="80" prop="technologyVersion" align="center" />
             <el-table-column label="产品数" align="center" width="160" prop="productNum">
             </el-table-column>
             <el-table-column label="箱数" align="center" prop="newCarrierCount" width="100">
@@ -154,6 +164,14 @@
                 <span v-else>{{ scope.row.furnaceNoInfo.furnaceNumber }}</span>
               </template>
             </el-table-column>
+            <el-table-column label="标识" width="300" align="center">
+            <template #default="scope">
+              <el-tag v-if="scope.row.isWaste == 1" class="spacing" type="danger">{{ "批废" }}</el-tag>
+              <el-tag v-if="scope.row.isAmend == 1" class="spacing" type="danger">{{ "工艺修改" }}</el-tag>
+              <el-tag v-if="scope.row.isWasteRecycling == 1" class="spacing" type="primary">{{ "废品回用" }}</el-tag>
+              <el-tag v-if="scope.row.isSuperaddition == 1" class="spacing" type="warning">{{ "追增" }}</el-tag>
+            </template>
+          </el-table-column>
             <el-table-column label="外协工序" align="center" prop="processNames" width="320">
               <template #default="scope">
                 <el-input v-if="editStatus && scope.row.hasReturnReceiptDetailFlag" v-model="scope.row.processNames"
@@ -165,14 +183,14 @@
                 <span v-else>{{ scope.row.processNames }}</span>
               </template>
             </el-table-column>
-            <el-table-column label="备注" align="center" prop="remark">
+            <el-table-column label="备注" align="center" prop="remark" width="300">
               <template #default="scope">
                 <el-input v-if="editStatus && scope.row.hasReturnReceiptDetailFlag" v-model="scope.row.remark"
                   placeholder="备注" />
                 <span v-else>{{ scope.row.remark }}</span>
               </template>
             </el-table-column>
-            <el-table-column v-if="editStatus" label="操作" align="center" class-name="small-padding fixed-width"
+            <el-table-column v-if="editStatus" label="操作" align="center" fixed="right" class-name="small-padding fixed-width"
               width="64">
               <template #default="scope">
                 <el-button circle type="danger" v-if="scope.row.hasReturnReceiptDetailFlag" icon="Delete"
@@ -191,6 +209,8 @@
 
     <!-- 工序选择 -->
     <dialog-processes ref="dialogProcessesRef" :multiple-selected="handleMultipleSelectedProcesses" />
+        <!-- 批量工序选择 -->
+        <dialog-multiProcess ref="dialogMultiProcessRef" :multiple-selected="handleMultipleSetProcesses" />
     <!-- 新箱号选择 -->
     <DialogFurnaceNoInfo ref="dialogFurnaceNoInfoRef" :singleSelected="handleSingleSelectFurnaceNoInfo" />
     <!-- 历史记录弹窗 -->
@@ -216,6 +236,7 @@ import DialogFurnaceNoInfo from "./DialogFurnaceNoInfo";
 import dialogSuppliers from "./DialogSuppliers";
 import dialogProducts from "./DialogProducts";
 import dialogProcesses from "./DialogProcesses";
+import dialogMultiProcess from "./multiSingleChangeDialog";
 import dialogOutsourcedRecords from "./DialogOutsourcedRecords";
 // import FormDetailsRecycling from "./detailsRecyclingForm";
 const { proxy } = getCurrentInstance();
@@ -640,6 +661,7 @@ const handleMultipleSelectedProducts = (selection) => {
     supplierId: form.value.supplierId,
     supplierName: form.value.supplierName,
     masterId: form.value.id,
+
   };
   getLotByProductionPlanSub(requestData).then((res) => {
     // console.log(res)
@@ -661,6 +683,48 @@ const handleShowDialogProcesses = (row) => {
   currentDetail.value = row;
   proxy.$refs.dialogProcessesRef.open(row);
 };
+function handleShowMultiDialogProcesses (){
+  if (selections.value.every((item) => item.isWaste == 1)) {
+    proxy.$message.error("批废不能再进行操作");
+    return;
+  }
+
+  //判断是否同产品、同计划、同工艺版本
+  let isConsistent =
+    selections.value.every(
+      (item) => item.productionPlanDetailId === selections.value[0].productionPlanDetailId
+    ) &&
+    selections.value.every(
+      (item) => item.technologyVersion === selections.value[0].technologyVersion
+    )&&
+    selections.value.every(
+      (item) => item.productId === selections.value[0].productId
+    );
+
+  if (!isConsistent) {
+    proxy.$modal.msgError("请选择同产品、同计划、同工艺版本的数据");
+    return;
+  }
+  //判断是否未修改过的批次
+  isConsistent =
+    selections.value.every((item) => item.isAmend == 0) &&
+    selections.value.every((item) => item.isWaste == 0) &&
+    selections.value.every((item) => item.isWasteRecycling == 0);
+
+  if (!isConsistent) {
+    proxy.$modal.msgError("只能选择标准工艺的数据进行批量操作");
+    return;
+  }
+  console.log(selections.value)
+  if (selections.value.filter(
+      (item) => !item.hasReturnReceiptDetailFlag
+  ).length >0) {
+    proxy.$modal.msgError("已经收回审核数据不能进行批量选择工序操作");
+    return;
+  }
+  console.log(selections.value)
+  proxy.$refs.dialogMultiProcessRef.open(selections.value)
+}
 
 // 工序选择带回
 const handleMultipleSelectedProcesses = (selection) => {
@@ -698,6 +762,59 @@ const handleMultipleSelectedProcesses = (selection) => {
     currentDetail.value.processes.push(newProcess);
   });
 };
+const handleMultipleSetProcesses = (selection) => {
+  console.log(selections.value)
+  console.log(form.value.details)
+  for(let i = 0; i < selections.value.length; i++){
+    console.log(selections.value[i])
+  let currentOriginal = form.value.details.filter(
+    (item) => (item.lotId == selections.value[i].lotId)
+  );
+  console.log(currentOriginal)
+  let flag = true;
+  if (
+    currentOriginal[0].returnReceiptDetailList &&
+    currentOriginal[0].returnReceiptDetailList.length > 0
+  ) {
+    selection.forEach((item) => {
+      if (
+        currentOriginal[0].processes.findIndex(
+          (info) => info.processStepNumber == item.processStepNumber
+        ) < 0
+      ) {
+        flag = false;
+      }
+    });
+  }
+  if (flag) {
+    const processNames = selection
+      .sort((a, b) => a.processStepNumber - b.processStepNumber)
+      .map((item) => item.processAlias);
+    // 使用join方法将数组转换为以逗号分隔的字符串
+    let commaSeparatedString = processNames.join(",");
+    currentOriginal.processes = [];
+    form.value.details.filter(
+    (item) => (item.lotId == selections.value[i].lotId)
+  )[0] .processNames = commaSeparatedString;
+    selection.forEach((item) => {
+      const newProcess = {
+        processId: item.processId,
+        processCode: item.processCode,
+        processAlias: item.processAlias,
+        processStepNumber: item.processStepNumber,
+        technologicalProcessDetailId: item.id,
+      };
+      currentOriginal.processes.push(newProcess);
+    });
+    form.value.details.filter(
+    (item) => (item.lotId == selections.value[i].lotId)
+  )[0] .processes = currentOriginal.processes;
+  console.log(form.value.details)
+  } else {
+    proxy.$modal.msgError("外协厂/德迈仕已收回,不可添加新工序");
+  }
+}
+}
 
 function handleSelectionChange(selection) {
   selections.value = selection;

+ 29 - 6
src/views/business/firstOutsource/index.vue

@@ -7,11 +7,11 @@
         <el-input v-model="queryParams.formCode" placeholder="请输入单据号" style="width: 144px" clearable
           @keyup.enter="handleQuery" />
       </el-form-item>
-      <el-form-item label="表单日期:" prop="formDate">
+      <!-- <el-form-item label="表单日期:" prop="formDate">
         <el-date-picker v-model="queryParams.formDate" type="date" style="width: 144px" clearable
           value-format="YYYY-MM-DD" placeholder="请选择表单日期">
         </el-date-picker>
-      </el-form-item>
+      </el-form-item> -->
       <el-form-item label="外协商名称:" prop="supplierName">
         <el-input v-model="queryParams.supplierName" placeholder="请输入关键字" style="width: 144px" clearable
           @keyup.enter="handleQuery" />
@@ -26,6 +26,13 @@
           <el-option v-for="dict in packaging_method" :key="dict.value" :label="dict.label" :value="dict.value" />
         </el-select>
       </el-form-item>
+      <el-form-item label="外协日期:">
+        <el-date-picker v-model="queryParams.startTime" type="date" value-format="YYYY-MM-DD" :editable="false"
+        clearable placeholder="请选择开始时间" style="width: 145px" @change="handleDateChange" />
+        <span>到</span>
+        <el-date-picker v-model="queryParams.endTime" type="date" value-format="YYYY-MM-DD" :editable="false"
+        clearable placeholder="请选择结束时间" style="width: 145px" @change="handleDateChange" />
+      </el-form-item>
       <el-form-item>
         <el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button>
         <el-button icon="Refresh" @click="resetQuery">重置</el-button>
@@ -102,10 +109,10 @@
 
     <!-- 分页 -->
     <pagination v-show="total > 0" :total="total" v-model:page="queryParams.pageNum"
-      v-model:limit="queryParams.pageSize" @pagination="getList" />
+      v-model:limit="queryParams.pageSize" @pagination="handleGetOrderList" />
 
     <!-- 表单 -->
-    <order-form ref="orderRef" :get-list="getList" :delivery-method="delivery_method" :settlement-type="settlement_type"
+    <order-form ref="orderRef" :get-list="handleGetOrderList" :delivery-method="delivery_method" :settlement-type="settlement_type"
       :packaging-method="packaging_method" />
     <!-- 打印箱码 -->
     <div id="image-group" style="height: 0px; width: 0px">
@@ -162,6 +169,12 @@ const queryParams = ref({
 /** 查询外协单主
 带箱方式,是整单的。如果换新箱子,明细中,都需要更换箱子列表 */
 function getList() {
+  getNowDate();
+  getPassDate();
+  loading.value = true;
+  handleGetOrderList()
+}
+function handleGetOrderList(){
   loading.value = true;
   listOrder(queryParams.value).then((response) => {
     orderList.value = response.rows;
@@ -169,11 +182,21 @@ function getList() {
     loading.value = false;
   });
 }
+function getNowDate() {
+  queryParams.value.endTime = proxy.moment().format("YYYY-MM-DD");
+}
+
+function getPassDate() {
+  queryParams.value.startTime = proxy
+    .moment()
+    .subtract(1, "month")
+    .format("YYYY-MM-DD");
+}
 
 /** 搜索按钮操作 */
 function handleQuery() {
   queryParams.value.pageNum = 1;
-  getList();
+  handleGetOrderList();
 }
 
 /** 重置按钮操作 */
@@ -215,7 +238,7 @@ function handleDelete(row) {
       return delOrderForFirst(_ids);
     })
     .then(() => {
-      getList();
+      handleGetOrderList();
       proxy.$modal.msgSuccess("删除成功!");
     })
     .catch(() => { });

+ 162 - 0
src/views/business/firstOutsource/multiSingleChangeDialog.vue

@@ -0,0 +1,162 @@
+<template>
+  <el-dialog
+    title="添加工序"
+    v-model="visible"
+    width="800px"
+    height="400px"
+    @close="close"
+    append-to-body
+    draggable
+  >
+    <el-form
+      ref="dialogForm"
+      :model="queryParams"
+      :inline="true"
+      style="padding-top: 16px"
+    >
+      <el-form-item label="工序名称:" prop="processAlias" label-width="104">
+        <el-input
+          v-model.trim="queryParams.keyword"
+          type="text"
+          @keydown.enter.prevent
+          style="width: 160px"
+          placeholder="请输入关键字"
+          :clearable="true"
+          @keyup.enter="handleSearch"
+        />
+      </el-form-item>
+      <el-form-item label-width="20px">
+        <el-button type="info" icon="Search" @click="handleSearch"
+          >搜索</el-button
+        >
+      </el-form-item>
+    </el-form>
+
+    <el-table
+      ref="dialogTable"
+      :data="productList"
+      size="small"
+      v-loading="loading"
+      border
+      height="370px"
+      @selection-change="handleSelectionChange"
+    >
+      <el-table-column type="selection" width="40" align="center" />
+      <el-table-column label="序号" width="56" align="center" type="index" />
+      <el-table-column label="工序名称" align="center" prop="processAlias" />
+    </el-table>
+    <!-- 分页 -->
+    <!-- <pagination
+      v-show="total > 0"
+      :total="total"
+      v-model:page="queryParams.pageNum"
+      v-model:limit="queryParams.pageSize"
+      @pagination="getList"
+    /> -->
+    <template #footer>
+      <div class="dialog-footer">
+        <el-button
+          type="primary"
+          icon="Check"
+          :disabled="selections.length === 0"
+          @click="handleMultipleSelected"
+        >
+          确 定
+        </el-button>
+        <el-button type="danger" icon="Close" @click="close">取 消</el-button>
+      </div>
+    </template>
+  </el-dialog>
+</template>
+<script setup>
+import { multiProcessesForOutsourceByFirst } from "@/api/business/daywork.js";
+import { ref } from "vue";
+const { proxy } = getCurrentInstance();
+
+/** 变量 */
+/** 工序变量 */
+const total = ref(0);
+const props = defineProps({
+  multipleSelected: {
+    type: Function,
+    default: null,
+  },
+  supplierId: {
+    type: String,
+    default: "",
+  },
+});
+
+const { multipleSelected, supplierId } = toRefs(props);
+const productList = ref([]);
+const visible = ref(false);
+const loading = ref(false);
+const dataList = ref([])
+const queryParams = ref({
+  pageNum: 1,
+  pageSize: 10,
+  keyword: "",
+});
+const selections = ref([]);
+
+/***********************  方法区  ****************************/
+/** 打开弹窗 */
+function open(data) {
+  console.log(data)
+  dataList.value = []
+  for (let i = 0; i < data.length; i++) {
+    let info = {}
+    info.lotId = data[i].lotId
+    info.outsourceDetailId = data[i].id?data[i].id:0
+    dataList.value.push(info)
+  }
+queryParams.value.dayworkList = dataList.value
+  visible.value = true;
+  getList();
+}
+/**
+ * 对话框关闭 事件
+ */
+ function close() {
+  proxy.$refs.dialogForm.resetFields();
+  proxy.$refs.dialogTable.clearSelection();
+  queryParams.value.pageNum = 1;
+  queryParams.value.keyword = ""
+  visible.value = false;
+}
+
+/**
+ * 加载数据
+ */
+function getList() {
+  loading.value = true;
+  multiProcessesForOutsourceByFirst(queryParams.value).then((res) => {
+    productList.value = res.rows;
+    total.value = res.total;
+    loading.value = false;
+  });
+}
+
+/**
+ * 列表checkbox列选择 事件
+ */
+function handleSelectionChange(selection) {
+  selections.value = selection;
+}
+
+/**  搜索 事件 */
+function handleSearch() {
+  getList();
+}
+/** 多选事件 */
+function handleMultipleSelected() {
+  if (multipleSelected.value) {
+    multipleSelected.value(selections.value);
+  }
+  close();
+}
+/** 暴露给父组件的方法 */
+defineExpose({
+  open,
+});
+</script>

+ 132 - 2
src/views/business/innerOutsource/form.vue

@@ -234,6 +234,15 @@
         >
         一键包装签票
         </el-button>
+        <el-button
+          v-show="editStatus"
+          :disabled="selections.length === 0"
+          type="primary"
+          icon="Plus"
+          @click="handleShowMultiDialogProcesses"
+        >
+          批量选择工序
+        </el-button>
       </div>
       <div class="el-table-container">
         <div class="el-table-inner-container">
@@ -241,9 +250,16 @@
             v-loading="loading"
             :data="form.details"
             size="small"
+            @selection-change="handleSelectionChange"
             border
             height="100%"
           >
+          <el-table-column
+          type="selection"
+          :selectable="checkSelectable"
+          width="50"
+          align="center"
+        />
             <el-table-column
               label="行号"
               type="index"
@@ -262,6 +278,7 @@
               prop="productDescription"
               width="300"
             />
+            <el-table-column label="图纸版本" width="80" prop="technologyVersion" align="center" />
             <el-table-column
               label="产品数"
               align="center"
@@ -335,6 +352,14 @@
                 <span v-if="!editStatus">{{ scope.row.newCarrier }}</span>
               </template>
             </el-table-column>
+            <el-table-column label="标识" width="300" align="center">
+            <template #default="scope">
+              <el-tag v-if="scope.row.isWaste == 1" class="spacing" type="danger">{{ "批废" }}</el-tag>
+              <el-tag v-if="scope.row.isAmend == 1" class="spacing" type="danger">{{ "工艺修改" }}</el-tag>
+              <el-tag v-if="scope.row.isWasteRecycling == 1" class="spacing" type="primary">{{ "废品回用" }}</el-tag>
+              <el-tag v-if="scope.row.isSuperaddition == 1" class="spacing" type="warning">{{ "追增" }}</el-tag>
+            </template>
+          </el-table-column>
             <el-table-column
               label="外协工序"
               align="center"
@@ -358,7 +383,7 @@
                 <span v-else>{{ scope.row.processNames }}</span>
               </template>
             </el-table-column>
-            <el-table-column label="是否包装签票" align="center" prop="isPackage" >
+            <el-table-column label="是否包装签票" align="center" prop="isPackage" width="150">
               <template #default="scope">
                 <el-switch :disabled="!editStatus || scope.row.hasNextInfo" v-model="scope.row.isPackage" style="
                     --el-switch-on-color: #13ce66;
@@ -366,7 +391,7 @@
                   " :active-value="1" :inactive-value="0" active-text="是" inactive-text="否" />
               </template>
             </el-table-column>
-            <el-table-column label="备注" align="center" prop="remark">
+            <el-table-column label="备注" align="center" prop="remark" width="300">
               <template #default="scope">
                 <el-input
                   v-if="editStatus && !scope.row.hasNextInfo"
@@ -378,6 +403,7 @@
             </el-table-column>
             <el-table-column
               v-if="editStatus"
+              fixed="right"
               label="操作"
               align="center"
               class-name="small-padding fixed-width"
@@ -414,6 +440,8 @@
       ref="dialogProcessesRef"
       :multiple-selected="handleMultipleSelectedProcesses"
     />
+        <!-- 批量工序选择 -->
+        <dialog-multiProcess ref="dialogMultiProcessRef" :multiple-selected="handleMultipleSetProcesses" />
     <!-- 新箱号选择 -->
     <dialog-carrier
       ref="dialogCarrierRef"
@@ -440,6 +468,7 @@ import dialogCarrier from "./DialogCarrier";
 import dialogSuppliers from "./DialogSuppliers";
 import dialogProducts from "./DialogProducts";
 import dialogProcesses from "./DialogProcesses";
+import dialogMultiProcess from "./multiSingleChangeDialog";
 import dialogOutsourcedRecords from "./DialogOutsourcedRecords";
 // import FormDetailsRecycling from "./detailsRecyclingForm";
 const { proxy } = getCurrentInstance();
@@ -480,6 +509,7 @@ const details = ref([]);
 const form = ref({});
 const outsourceDeptList = ref([])
 const deptList = ref([])
+const selections = ref([])
 // const formatDetails = ref([])
 const currentDetail = ref({});
 const rules = {
@@ -630,6 +660,10 @@ function handleChangeDeliveryMethod() {
     form.value.freightAmount = 0.0;
   }
 }
+/** 是否可选 */
+function checkSelectable(row) {
+return row.hasReturnReceiptDetailFlag? true : false
+}
 //外协工段
 function getOutsorceDeptList() {
   listOutsourceDeptList({}).then((response) => {
@@ -930,6 +964,10 @@ const handleMultipleSelectedProducts = (selection) => {
       originalCarrierList: item.originalCarrierList,
       productNum: item.productNum,
       productCode: item.productCode,
+      isAmend: item.isAmend,
+      isWasteRecycling: item.isWasteRecycling,
+      isSuperaddition:item.isSuperaddition,
+      isWaste:item.isWaste,
       newCarrier: "",
       carriers: [],
       newCarrierCount: 0,
@@ -1099,6 +1137,45 @@ const handleShowDialogProcesses = (row) => {
   currentDetail.value = row;
   proxy.$refs.dialogProcessesRef.open(row);
 };
+/** 多选框选中数据 */
+function handleSelectionChange(selection) {
+selections.value = selection
+}
+function handleShowMultiDialogProcesses (){
+  if (selections.value.every((item) => item.isWaste == 1)) {
+    proxy.$message.error("批废不能再进行操作");
+    return;
+  }
+
+  //判断是否同产品、同计划、同工艺版本
+  let isConsistent =
+    selections.value.every(
+      (item) => item.productionPlanDetailId === selections.value[0].productionPlanDetailId
+    ) &&
+    selections.value.every(
+      (item) => item.technologyVersion === selections.value[0].technologyVersion
+    )&&
+    selections.value.every(
+      (item) => item.productId === selections.value[0].productId
+    );
+
+  if (!isConsistent) {
+    proxy.$modal.msgError("请选择同产品、同计划、同工艺版本的数据");
+    return;
+  }
+  //判断是否未修改过的批次
+  isConsistent =
+    selections.value.every((item) => item.isAmend == 0) &&
+    selections.value.every((item) => item.isWaste == 0) &&
+    selections.value.every((item) => item.isWasteRecycling == 0);
+
+  if (!isConsistent) {
+    proxy.$modal.msgError("只能选择标准工艺的数据进行批量操作");
+    return;
+  }
+  console.log(selections.value)
+  proxy.$refs.dialogMultiProcessRef.open(selections.value)
+}
 
 // 工序选择带回
 const handleMultipleSelectedProcesses = (selection) => {
@@ -1142,6 +1219,59 @@ const handleMultipleSelectedProcesses = (selection) => {
     proxy.$modal.msgError("外协厂/德迈仕已收回,不可添加新工序");
   }
 };
+const handleMultipleSetProcesses = (selection) => {
+  console.log(selections.value)
+  console.log(form.value.details)
+  for(let i = 0; i < selections.value.length; i++){
+    console.log(selections.value[i])
+  let currentOriginal = form.value.details.filter(
+    (item) => (item.lotId == selections.value[i].lotId)
+  );
+  console.log(currentOriginal)
+  let flag = true;
+  if (
+    currentOriginal[0].returnReceiptDetailList &&
+    currentOriginal[0].returnReceiptDetailList.length > 0
+  ) {
+    selection.forEach((item) => {
+      if (
+        currentOriginal[0].processes.findIndex(
+          (info) => info.processStepNumber == item.processStepNumber
+        ) < 0
+      ) {
+        flag = false;
+      }
+    });
+  }
+  if (flag) {
+    const processNames = selection
+      .sort((a, b) => a.processStepNumber - b.processStepNumber)
+      .map((item) => item.processAlias);
+    // 使用join方法将数组转换为以逗号分隔的字符串
+    let commaSeparatedString = processNames.join(",");
+    currentOriginal.processes = [];
+    form.value.details.filter(
+    (item) => (item.lotId == selections.value[i].lotId)
+  )[0] .processNames = commaSeparatedString;
+    selection.forEach((item) => {
+      const newProcess = {
+        processId: item.processId,
+        processCode: item.processCode,
+        processAlias: item.processAlias,
+        processStepNumber: item.processStepNumber,
+        technologicalProcessDetailId: item.id,
+      };
+      currentOriginal.processes.push(newProcess);
+    });
+    form.value.details.filter(
+    (item) => (item.lotId == selections.value[i].lotId)
+  )[0] .processes = currentOriginal.processes;
+  console.log(form.value.details)
+  } else {
+    proxy.$modal.msgError("外协厂/德迈仕已收回,不可添加新工序");
+  }
+}
+}
 
 /** 暴露给父组件的方法 */
 defineExpose({

+ 35 - 12
src/views/business/innerOutsource/index.vue

@@ -6,29 +6,36 @@
         <el-input v-model="queryParams.formCode" placeholder="请输入单据号" style="width: 144px" clearable
           @keyup.enter="handleQuery" />
       </el-form-item>
-      <el-form-item label="表单日期:" prop="formDate">
+      <!-- <el-form-item label="表单日期:" prop="formDate">
         <el-date-picker v-model="queryParams.formDate" type="date" style="width: 144px" clearable
           value-format="YYYY-MM-DD" placeholder="请选择表单日期">
         </el-date-picker>
-      </el-form-item>
+      </el-form-item> -->
       <el-form-item label="外协商名称:" prop="supplierName">
         <el-input v-model="queryParams.supplierName" placeholder="请输入关键字" style="width: 144px" clearable
           @keyup.enter="handleQuery" />
       </el-form-item>
       <el-form-item label="外协工段:" prop="outsourceDeptName">
-        <el-input v-model="queryParams.outsourceDeptName" placeholder="请输入关键字" style="width: 144px" clearable
+        <el-input v-model="queryParams.outsourceDeptName" placeholder="请输入关键字" style="width: 140px" clearable
           @keyup.enter="handleQuery" />
       </el-form-item>
       <el-form-item label="送货方式:" prop="deliveryMethod">
-        <el-select v-model="queryParams.deliveryMethod" style="width: 144px" clearable placeholder="请选择">
+        <el-select v-model="queryParams.deliveryMethod" style="width: 130px" clearable placeholder="请选择">
           <el-option v-for="dict in delivery_method" :key="dict.value" :label="dict.label" :value="dict.value" />
         </el-select>
       </el-form-item>
       <el-form-item label="带箱方式:" prop="packagingMethod">
-        <el-select v-model="queryParams.packagingMethod" style="width: 144px" clearable placeholder="请选择">
+        <el-select v-model="queryParams.packagingMethod" style="width: 130px" clearable placeholder="请选择">
           <el-option v-for="dict in packaging_method" :key="dict.value" :label="dict.label" :value="dict.value" />
         </el-select>
       </el-form-item>
+      <el-form-item label="外协日期:">
+        <el-date-picker v-model="queryParams.startTime" type="date" value-format="YYYY-MM-DD" :editable="false"
+        clearable placeholder="请选择开始时间" style="width: 145px" @change="handleDateChange" />
+        <span>到</span>
+        <el-date-picker v-model="queryParams.endTime" type="date" value-format="YYYY-MM-DD" :editable="false"
+        clearable placeholder="请选择结束时间" style="width: 145px" @change="handleDateChange" />
+      </el-form-item>
       <el-form-item>
         <el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button>
         <el-button icon="Refresh" @click="resetQuery">重置</el-button>
@@ -111,10 +118,10 @@
 
     <!-- 分页 -->
     <pagination v-show="total > 0" :total="total" v-model:page="queryParams.pageNum"
-      v-model:limit="queryParams.pageSize" @pagination="getList" />
+      v-model:limit="queryParams.pageSize" @pagination="getOrderList" />
 
     <!-- 表单 -->
-    <order-form ref="orderRef" :get-list="getList" :delivery-method="delivery_method" :settlement-type="settlement_type"
+    <order-form ref="orderRef" :get-list="getOrderList" :delivery-method="delivery_method" :settlement-type="settlement_type"
       :packaging-method="packaging_method" />
     <!-- 打印箱码 -->
     <div id="image-group" style="height: 0px; width: 0px">
@@ -165,7 +172,9 @@ const queryParams = ref({
   packagingMethod: null,
   freightPrice: null,
   freightAmount: null,
-  isFirstProcess:0
+  isFirstProcess:0,
+  startTime: null,
+  endTime:null
 });
 
 /***********************  方法区  ****************************/
@@ -173,18 +182,32 @@ const queryParams = ref({
 /** 查询外协单主
 带箱方式,是整单的。如果换新箱子,明细中,都需要更换箱子列表 */
 function getList() {
-  console.log(innerOutsourceStore().innerOutsourceQueryParams)
-  loading.value = true;
+  getNowDate();
+  getPassDate();
   if (innerOutsourceStore().innerOutsourceQueryParams != null) {
     console.log(innerOutsourceStore().innerOutsourceQueryParams)
      queryParams.value = innerOutsourceStore().innerOutsourceQueryParams;
     }
+ getOrderList()
+}
+function getOrderList(){
+  loading.value = true; 
   innerOrderList(queryParams.value).then((response) => {
     orderList.value = response.rows;
     total.value = response.total;
     loading.value = false;
   });
 }
+function getNowDate() {
+  queryParams.value.endTime = proxy.moment().format("YYYY-MM-DD");
+}
+
+function getPassDate() {
+  queryParams.value.startTime = proxy
+    .moment()
+    .subtract(1, "month")
+    .format("YYYY-MM-DD");
+}
 
 /** 搜索按钮操作 */
 function handleQuery() {
@@ -192,7 +215,7 @@ function handleQuery() {
   const innerOutsourceQueryParams = JSON.parse(JSON.stringify(queryParams.value));
   console.log(innerOutsourceQueryParams)
     innerOutsourceStore().setInnerOutsourceQueryParams(innerOutsourceQueryParams);
-  getList();
+    getOrderList();
 }
 
 /** 重置按钮操作 */
@@ -236,7 +259,7 @@ function handleDelete(row) {
       return delInnerOrder(_ids);
     })
     .then(() => {
-      getList();
+      getOrderList();
       proxy.$modal.msgSuccess("删除成功!");
     })
     .catch(() => { });

+ 162 - 0
src/views/business/innerOutsource/multiSingleChangeDialog.vue

@@ -0,0 +1,162 @@
+<template>
+  <el-dialog
+    title="添加工序"
+    v-model="visible"
+    width="800px"
+    height="400px"
+    @close="close"
+    append-to-body
+    draggable
+  >
+    <el-form
+      ref="dialogForm"
+      :model="queryParams"
+      :inline="true"
+      style="padding-top: 16px"
+    >
+      <el-form-item label="工序名称:" prop="processAlias" label-width="104">
+        <el-input
+          v-model.trim="queryParams.keyword"
+          type="text"
+          @keydown.enter.prevent
+          style="width: 160px"
+          placeholder="请输入关键字"
+          :clearable="true"
+          @keyup.enter="handleSearch"
+        />
+      </el-form-item>
+      <el-form-item label-width="20px">
+        <el-button type="info" icon="Search" @click="handleSearch"
+          >搜索</el-button
+        >
+      </el-form-item>
+    </el-form>
+
+    <el-table
+      ref="dialogTable"
+      :data="productList"
+      size="small"
+      v-loading="loading"
+      border
+      height="370px"
+      @selection-change="handleSelectionChange"
+    >
+      <el-table-column type="selection" width="40" align="center" />
+      <el-table-column label="序号" width="56" align="center" type="index" />
+      <el-table-column label="工序名称" align="center" prop="processAlias" />
+    </el-table>
+    <!-- 分页 -->
+    <!-- <pagination
+      v-show="total > 0"
+      :total="total"
+      v-model:page="queryParams.pageNum"
+      v-model:limit="queryParams.pageSize"
+      @pagination="getList"
+    /> -->
+    <template #footer>
+      <div class="dialog-footer">
+        <el-button
+          type="primary"
+          icon="Check"
+          :disabled="selections.length === 0"
+          @click="handleMultipleSelected"
+        >
+          确 定
+        </el-button>
+        <el-button type="danger" icon="Close" @click="close">取 消</el-button>
+      </div>
+    </template>
+  </el-dialog>
+</template>
+<script setup>
+import { processesMultiForOutsource } from "@/api/business/daywork.js";
+import { ref } from "vue";
+const { proxy } = getCurrentInstance();
+
+/** 变量 */
+/** 工序变量 */
+const total = ref(0);
+const props = defineProps({
+  multipleSelected: {
+    type: Function,
+    default: null,
+  },
+  supplierId: {
+    type: String,
+    default: "",
+  },
+});
+
+const { multipleSelected, supplierId } = toRefs(props);
+const productList = ref([]);
+const visible = ref(false);
+const loading = ref(false);
+const dataList = ref([])
+const queryParams = ref({
+  pageNum: 1,
+  pageSize: 10,
+  keyword: "",
+});
+const selections = ref([]);
+
+/***********************  方法区  ****************************/
+/** 打开弹窗 */
+function open(data) {
+  console.log(data)
+  dataList.value = []
+  for (let i = 0; i < data.length; i++) {
+    let info = {}
+    info.lotId = data[i].lotId
+    info.outsourceDetailId = data[i].id?data[i].id:0
+    dataList.value.push(info)
+  }
+queryParams.value.dayworkList = dataList.value
+  visible.value = true;
+  getList();
+}
+/**
+ * 对话框关闭 事件
+ */
+ function close() {
+  proxy.$refs.dialogForm.resetFields();
+  proxy.$refs.dialogTable.clearSelection();
+  queryParams.value.pageNum = 1;
+  queryParams.value.keyword = ""
+  visible.value = false;
+}
+
+/**
+ * 加载数据
+ */
+function getList() {
+  loading.value = true;
+  processesMultiForOutsource(queryParams.value).then((res) => {
+    productList.value = res.rows;
+    total.value = res.total;
+    loading.value = false;
+  });
+}
+
+/**
+ * 列表checkbox列选择 事件
+ */
+function handleSelectionChange(selection) {
+  selections.value = selection;
+}
+
+/**  搜索 事件 */
+function handleSearch() {
+  getList();
+}
+/** 多选事件 */
+function handleMultipleSelected() {
+  if (multipleSelected.value) {
+    multipleSelected.value(selections.value);
+  }
+  close();
+}
+/** 暴露给父组件的方法 */
+defineExpose({
+  open,
+});
+</script>

+ 134 - 1
src/views/business/outsource/form.vue

@@ -222,6 +222,15 @@
         >
           添加外协产品明细
         </el-button>
+        <el-button
+          v-show="editStatus"
+          :disabled="selections.length === 0"
+          type="primary"
+          icon="Plus"
+          @click="handleShowMultiDialogProcesses"
+        >
+          批量选择工序
+        </el-button>
       </div>
       <div class="el-table-container">
         <div class="el-table-inner-container">
@@ -229,9 +238,16 @@
             v-loading="loading"
             :data="form.details"
             size="small"
+             @selection-change="handleSelectionChange"
             border
             height="100%"
           >
+          <el-table-column
+          type="selection"
+          :selectable="checkSelectable"
+          width="50"
+          align="center"
+        />
             <el-table-column
               label="行号"
               type="index"
@@ -250,6 +266,7 @@
               prop="productDescription"
               width="320"
             />
+            <el-table-column label="图纸版本" width="80" prop="technologyVersion" align="center" />
             <el-table-column
               label="产品数"
               align="center"
@@ -337,6 +354,14 @@
         <span v-else>{{ scope.row.newCarrier }}</span>-->
               </template>
             </el-table-column>
+            <el-table-column label="标识" width="300" align="center">
+            <template #default="scope">
+              <el-tag v-if="scope.row.isWaste == 1" class="spacing" type="danger">{{ "批废" }}</el-tag>
+              <el-tag v-if="scope.row.isAmend == 1" class="spacing" type="danger">{{ "工艺修改" }}</el-tag>
+              <el-tag v-if="scope.row.isWasteRecycling == 1" class="spacing" type="primary">{{ "废品回用" }}</el-tag>
+              <el-tag v-if="scope.row.isSuperaddition == 1" class="spacing" type="warning">{{ "追增" }}</el-tag>
+            </template>
+          </el-table-column>
             <el-table-column
               label="外协工序"
               align="center"
@@ -360,7 +385,7 @@
                 <span v-else>{{ scope.row.processNames }}</span>
               </template>
             </el-table-column>
-            <el-table-column label="备注" align="center" prop="remark">
+            <el-table-column label="备注" align="center" prop="remark" width="300">
               <template #default="scope">
                 <el-input
                   v-if="editStatus && scope.row.hasReturnReceiptDetailFlag"
@@ -375,6 +400,7 @@
               label="操作"
               align="center"
               class-name="small-padding fixed-width"
+              fixed="right"
               width="64"
             >
               <template #default="scope">
@@ -408,6 +434,8 @@
       ref="dialogProcessesRef"
       :multiple-selected="handleMultipleSelectedProcesses"
     />
+    <!-- 批量工序选择 -->
+    <dialog-multiProcess ref="dialogMultiProcessRef" :multiple-selected="handleMultipleSetProcesses" />
     <!-- 新箱号选择 -->
     <dialog-carrier
       ref="dialogCarrierRef"
@@ -433,6 +461,7 @@ import dialogCarrier from "./DialogCarrier";
 import dialogSuppliers from "./DialogSuppliers";
 import dialogProducts from "./DialogProducts";
 import dialogProcesses from "./DialogProcesses";
+import dialogMultiProcess from "./multiSingleChangeDialog";
 import dialogOutsourcedRecords from "./DialogOutsourcedRecords";
 // import FormDetailsRecycling from "./detailsRecyclingForm";
 const { proxy } = getCurrentInstance();
@@ -471,6 +500,7 @@ const loadingCarrier = ref(false);
 const carriers = ref([]);
 const details = ref([]);
 const form = ref({});
+const selections = ref([])
 // const formatDetails = ref([])
 const currentDetail = ref({});
 const rules = {
@@ -646,6 +676,10 @@ const handleDelete = (index) => {
   }
   form.value.details.splice(index, 1);
 };
+/** 是否可选 */
+function checkSelectable(row) {
+return row.hasReturnReceiptDetailFlag? true : false
+}
 
 /** 表单重置 */
 function reset() {
@@ -873,6 +907,10 @@ const handleMultipleSelectedProducts = (selection) => {
       lineNumber:item.lineNumber,
       productNum: item.productNum,
       productCode: item.productCode,
+      isAmend: item.isAmend,
+      isWasteRecycling: item.isWasteRecycling,
+      isSuperaddition:item.isSuperaddition,
+      isWaste:item.isWaste,
       newCarrier: "",
       carriers: [],
       newCarrierCount: 0,
@@ -1042,6 +1080,45 @@ const handleShowDialogProcesses = (row) => {
   currentDetail.value = row;
   proxy.$refs.dialogProcessesRef.open(row);
 };
+/** 多选框选中数据 */
+function handleSelectionChange(selection) {
+selections.value = selection
+}
+function handleShowMultiDialogProcesses (){
+  if (selections.value.every((item) => item.isWaste == 1)) {
+    proxy.$message.error("批废不能再进行操作");
+    return;
+  }
+
+  //判断是否同产品、同计划、同工艺版本
+  let isConsistent =
+    selections.value.every(
+      (item) => item.productionPlanDetailId === selections.value[0].productionPlanDetailId
+    ) &&
+    selections.value.every(
+      (item) => item.technologyVersion === selections.value[0].technologyVersion
+    )&&
+    selections.value.every(
+      (item) => item.productId === selections.value[0].productId
+    );
+
+  if (!isConsistent) {
+    proxy.$modal.msgError("请选择同产品、同计划、同工艺版本的数据");
+    return;
+  }
+  //判断是否未修改过的批次
+  isConsistent =
+    selections.value.every((item) => item.isAmend == 0) &&
+    selections.value.every((item) => item.isWaste == 0) &&
+    selections.value.every((item) => item.isWasteRecycling == 0);
+
+  if (!isConsistent) {
+    proxy.$modal.msgError("只能选择标准工艺的数据进行批量操作");
+    return;
+  }
+  console.log(selections.value)
+  proxy.$refs.dialogMultiProcessRef.open(selections.value)
+}
 
 // 工序选择带回
 const handleMultipleSelectedProcesses = (selection) => {
@@ -1053,6 +1130,7 @@ const handleMultipleSelectedProcesses = (selection) => {
     currentDetail.value.returnReceiptDetailList &&
     currentDetail.value.returnReceiptDetailList.length > 0
   ) {
+  
     selection.forEach((item) => {
       if (
         currentOriginal[0].processes.findIndex(
@@ -1085,6 +1163,61 @@ const handleMultipleSelectedProcesses = (selection) => {
     proxy.$modal.msgError("外协厂/德迈仕已收回,不可添加新工序");
   }
 };
+const handleMultipleSetProcesses = (selection) => {
+  console.log(selections.value)
+  console.log(form.value.details)
+  for(let i = 0; i < selections.value.length; i++){
+    console.log(selections.value[i])
+  let currentOriginal = form.value.details.filter(
+    (item) => (item.lotId == selections.value[i].lotId)
+  );
+  console.log(currentOriginal)
+  console.log(selection)
+  let flag = true;
+  console.log(currentOriginal[0].processes)
+  if (
+    currentOriginal[0].returnReceiptDetailList &&
+    currentOriginal[0].returnReceiptDetailList.length > 0
+  ) {
+    selection.forEach((item) => {
+      if (
+        currentOriginal[0].processes.findIndex(
+          (info) => info.processStepNumber == item.processStepNumber
+        ) < 0
+      ) {
+        flag = false;
+      }
+    });
+  }
+  if (flag) {
+    const processNames = selection
+      .sort((a, b) => a.processStepNumber - b.processStepNumber)
+      .map((item) => item.processAlias);
+    // 使用join方法将数组转换为以逗号分隔的字符串
+    let commaSeparatedString = processNames.join(",");
+    currentOriginal.processes = [];
+    form.value.details.filter(
+    (item) => (item.lotId == selections.value[i].lotId)
+  )[0] .processNames = commaSeparatedString;
+    selection.forEach((item) => {
+      const newProcess = {
+        processId: item.processId,
+        processCode: item.processCode,
+        processAlias: item.processAlias,
+        processStepNumber: item.processStepNumber,
+        technologicalProcessDetailId: item.id,
+      };
+      currentOriginal.processes.push(newProcess);
+    });
+    form.value.details.filter(
+    (item) => (item.lotId == selections.value[i].lotId)
+  )[0] .processes = currentOriginal.processes;
+  console.log(form.value.details)
+  } else {
+    proxy.$modal.msgError("外协厂/德迈仕已收回,不可添加新工序");
+  }
+}
+}
 
 /** 暴露给父组件的方法 */
 defineExpose({

+ 28 - 6
src/views/business/outsource/index.vue

@@ -6,11 +6,11 @@
         <el-input v-model="queryParams.formCode" placeholder="请输入单据号" style="width: 144px" clearable
           @keyup.enter="handleQuery" />
       </el-form-item>
-      <el-form-item label="表单日期:" prop="formDate">
+      <!-- <el-form-item label="表单日期:" prop="formDate">
         <el-date-picker v-model="queryParams.formDate" type="date" style="width: 144px" clearable
           value-format="YYYY-MM-DD" placeholder="请选择表单日期">
         </el-date-picker>
-      </el-form-item>
+      </el-form-item> -->
       <el-form-item label="外协商名称:" prop="supplierName">
         <el-input v-model="queryParams.supplierName" placeholder="请输入关键字" style="width: 144px" clearable
           @keyup.enter="handleQuery" />
@@ -25,6 +25,13 @@
           <el-option v-for="dict in packaging_method" :key="dict.value" :label="dict.label" :value="dict.value" />
         </el-select>
       </el-form-item>
+      <el-form-item label="外协日期:">
+        <el-date-picker v-model="queryParams.startTime" type="date" value-format="YYYY-MM-DD" :editable="false"
+        clearable placeholder="请选择开始时间" style="width: 145px"  />
+        <span>到</span>
+        <el-date-picker v-model="queryParams.endTime" type="date" value-format="YYYY-MM-DD" :editable="false"
+        clearable  placeholder="请选择结束时间" style="width: 145px"  />
+      </el-form-item>
       <el-form-item>
         <el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button>
         <el-button icon="Refresh" @click="resetQuery">重置</el-button>
@@ -106,10 +113,10 @@
 
     <!-- 分页 -->
     <pagination v-show="total > 0" :total="total" v-model:page="queryParams.pageNum"
-      v-model:limit="queryParams.pageSize" @pagination="getList" />
+      v-model:limit="queryParams.pageSize" @pagination="handleGetOrderList" />
 
     <!-- 表单 -->
-    <order-form ref="orderRef" :get-list="getList" :delivery-method="delivery_method" :settlement-type="settlement_type"
+    <order-form ref="orderRef" :get-list="handleGetOrderList" :delivery-method="delivery_method" :settlement-type="settlement_type"
       :packaging-method="packaging_method" />
     <!-- 打印箱码 -->
     <div id="image-group" style="height: 0px; width: 0px">
@@ -166,6 +173,11 @@ const queryParams = ref({
 /** 查询外协单主
 带箱方式,是整单的。如果换新箱子,明细中,都需要更换箱子列表 */
 function getList() {
+  getNowDate();
+  getPassDate();
+  handleGetOrderList()
+}
+function handleGetOrderList(){
   loading.value = true;
   listOrder(queryParams.value).then((response) => {
     orderList.value = response.rows;
@@ -173,11 +185,21 @@ function getList() {
     loading.value = false;
   });
 }
+function getNowDate() {
+  queryParams.value.endTime = proxy.moment().format("YYYY-MM-DD");
+}
+
+function getPassDate() {
+  queryParams.value.startTime = proxy
+    .moment()
+    .subtract(1, "month")
+    .format("YYYY-MM-DD");
+}
 
 /** 搜索按钮操作 */
 function handleQuery() {
   queryParams.value.pageNum = 1;
-  getList();
+  handleGetOrderList();
 }
 
 /** 重置按钮操作 */
@@ -219,7 +241,7 @@ function handleDelete(row) {
       return delOrder(_ids);
     })
     .then(() => {
-      getList();
+      handleGetOrderList();
       proxy.$modal.msgSuccess("删除成功!");
     })
     .catch(() => { });

+ 162 - 0
src/views/business/outsource/multiSingleChangeDialog.vue

@@ -0,0 +1,162 @@
+<template>
+  <el-dialog
+    title="添加工序"
+    v-model="visible"
+    width="800px"
+    height="400px"
+    @close="close"
+    append-to-body
+    draggable
+  >
+    <el-form
+      ref="dialogForm"
+      :model="queryParams"
+      :inline="true"
+      style="padding-top: 16px"
+    >
+      <el-form-item label="工序名称:" prop="processAlias" label-width="104">
+        <el-input
+          v-model.trim="queryParams.keyword"
+          type="text"
+          @keydown.enter.prevent
+          style="width: 160px"
+          placeholder="请输入关键字"
+          :clearable="true"
+          @keyup.enter="handleSearch"
+        />
+      </el-form-item>
+      <el-form-item label-width="20px">
+        <el-button type="info" icon="Search" @click="handleSearch"
+          >搜索</el-button
+        >
+      </el-form-item>
+    </el-form>
+
+    <el-table
+      ref="dialogTable"
+      :data="productList"
+      size="small"
+      v-loading="loading"
+      border
+      height="370px"
+      @selection-change="handleSelectionChange"
+    >
+      <el-table-column type="selection" width="40" align="center" />
+      <el-table-column label="序号" width="56" align="center" type="index" />
+      <el-table-column label="工序名称" align="center" prop="processAlias" />
+    </el-table>
+    <!-- 分页 -->
+    <!-- <pagination
+      v-show="total > 0"
+      :total="total"
+      v-model:page="queryParams.pageNum"
+      v-model:limit="queryParams.pageSize"
+      @pagination="getList"
+    /> -->
+    <template #footer>
+      <div class="dialog-footer">
+        <el-button
+          type="primary"
+          icon="Check"
+          :disabled="selections.length === 0"
+          @click="handleMultipleSelected"
+        >
+          确 定
+        </el-button>
+        <el-button type="danger" icon="Close" @click="close">取 消</el-button>
+      </div>
+    </template>
+  </el-dialog>
+</template>
+<script setup>
+import { processesMultiForOutsource } from "@/api/business/daywork.js";
+import { ref } from "vue";
+const { proxy } = getCurrentInstance();
+
+/** 变量 */
+/** 工序变量 */
+const total = ref(0);
+const props = defineProps({
+  multipleSelected: {
+    type: Function,
+    default: null,
+  },
+  supplierId: {
+    type: String,
+    default: "",
+  },
+});
+
+const { multipleSelected, supplierId } = toRefs(props);
+const productList = ref([]);
+const visible = ref(false);
+const loading = ref(false);
+const dataList = ref([])
+const queryParams = ref({
+  pageNum: 1,
+  pageSize: 10,
+  keyword: "",
+});
+const selections = ref([]);
+
+/***********************  方法区  ****************************/
+/** 打开弹窗 */
+function open(data) {
+  console.log(data)
+  dataList.value = []
+  for (let i = 0; i < data.length; i++) {
+    let info = {}
+    info.lotId = data[i].lotId
+    info.outsourceDetailId = data[i].id?data[i].id:0
+    dataList.value.push(info)
+  }
+queryParams.value.dayworkList = dataList.value
+  visible.value = true;
+  getList();
+}
+/**
+ * 对话框关闭 事件
+ */
+ function close() {
+  proxy.$refs.dialogForm.resetFields();
+  proxy.$refs.dialogTable.clearSelection();
+  queryParams.value.pageNum = 1;
+  queryParams.value.keyword = ""
+  visible.value = false;
+}
+
+/**
+ * 加载数据
+ */
+function getList() {
+  loading.value = true;
+  processesMultiForOutsource(queryParams.value).then((res) => {
+    productList.value = res.rows;
+    total.value = res.total;
+    loading.value = false;
+  });
+}
+
+/**
+ * 列表checkbox列选择 事件
+ */
+function handleSelectionChange(selection) {
+  selections.value = selection;
+}
+
+/**  搜索 事件 */
+function handleSearch() {
+  getList();
+}
+/** 多选事件 */
+function handleMultipleSelected() {
+  if (multipleSelected.value) {
+    multipleSelected.value(selections.value);
+  }
+  close();
+}
+/** 暴露给父组件的方法 */
+defineExpose({
+  open,
+});
+</script>

+ 28 - 7
src/views/business/returnReceipt/index.vue

@@ -6,12 +6,16 @@
         <el-input v-model="queryParams.formCode" placeholder="请输入单据号" style="width: 144px" clearable
           @keyup.enter="handleQuery" />
       </el-form-item>
-      <el-form-item label="表单日期:" prop="startTime">
+      <el-form-item label="外协商名称:" prop="supplierName">
+        <el-input v-model="queryParams.supplierName" placeholder="请输入关键字" style="width: 144px" clearable
+          @keyup.enter="handleQuery" />
+      </el-form-item>
+      <el-form-item label="收回日期:" prop="startTime">
         <el-date-picker v-model="queryParams.startTime" type="date" style="width: 144px" value-format="YYYY-MM-DD"
-          placeholder="选择起始日期" clearable />
+          placeholder="选择起始日期" :clearable="true"  />
         <span style="margin: 0 4px">到</span>
         <el-date-picker v-model="queryParams.endTime" type="date" style="width: 144px" value-format="YYYY-MM-DD"
-          placeholder="选择结束日期" clearable />
+          placeholder="选择结束日期" :clearable="true" />
       </el-form-item>
       <el-form-item>
         <el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button>
@@ -63,10 +67,10 @@
 
     <!-- 分页 -->
     <pagination v-show="total > 0" :total="total" v-model:page="queryParams.pageNum"
-      v-model:limit="queryParams.pageSize" @pagination="getList" />
+      v-model:limit="queryParams.pageSize" @pagination="getReturnReceiptList" />
 
     <!-- 表单 -->
-    <receipt-form ref="receiptRef" @handleSaveSuccess="getList()" />
+    <receipt-form ref="receiptRef" @handleSaveSuccess="getReturnReceiptList()" />
   </div>
 </template>
 
@@ -94,6 +98,11 @@ const queryParams = ref({
 /** 查询外协单主
 带箱方式,是整单的。如果换新箱子,明细中,都需要更换箱子列表 */
 function getList() {
+  getNowDate();
+  getPassDate();
+  getReturnReceiptList()
+}
+function getReturnReceiptList(){
   loading.value = true;
   listReceipt(queryParams.value).then((response) => {
     dataList.value = response.rows;
@@ -105,7 +114,17 @@ function getList() {
 /** 搜索按钮操作 */
 function handleQuery() {
   queryParams.value.pageNum = 1;
-  getList();
+  getReturnReceiptList();
+}
+function getNowDate() {
+  queryParams.value.endTime = proxy.moment().format("YYYY-MM-DD");
+}
+
+function getPassDate() {
+  queryParams.value.startTime = proxy
+    .moment()
+    .subtract(1, "month")
+    .format("YYYY-MM-DD");
 }
 
 /** 重置按钮操作 */
@@ -117,6 +136,8 @@ function resetQuery() {
     formCode: null,
     formDate: null,
   };
+  getNowDate();
+  getPassDate();
   handleQuery();
 }
 /**复选框选中数据 */
@@ -157,7 +178,7 @@ function handleDelete() {
         return delReceipt(_ids);
       })
       .then(() => {
-        getList();
+        getReturnReceiptList();
         proxy.$modal.msgSuccess("删除成功!");
       })
       .catch(() => { });

+ 9 - 0
src/views/business/returnTurnover/index.vue

@@ -199,6 +199,10 @@ function resetQuery() {
 function handleShowTurnoverDialog(row) {
 	console.log(row)
 	//proxy.$refs.dialogReturnTurnoverRef.open(row)
+	//判断当前发出明细是否已经被收回审核
+	if(row.returnReceiptDetailList[0].status == 0){
+		proxy.$modal.msgError('当前批次未收回审核,暂时无法周转')
+	}else{
 	//判断该批次的工序是否需要审核
 	// /* 
 	getP2NeedCheckProcess("Y").then(res => {
@@ -242,6 +246,7 @@ function handleShowTurnoverDialog(row) {
 			}
 		}
 	})
+}
 	// */
 
 	// proxy.$refs.dialogReturnTurnoverRef.open(row)
@@ -286,6 +291,10 @@ async function handleBatchTurnover() {
 		proxy.$modal.msgError('请选择标准工艺批次进行批量周转')
 		return
 	}
+	if(selections.value.findIndex(v => v.returnReceiptDetailList[0].status == 0) >= 0) {
+		proxy.$modal.msgError('请选择审核通过批次进行批量周转')
+		return
+	}
 	const carriers = selections.value.map(v => v.newCarrierName).join()
 	const res = await checkCarriers({ carriers: carriers })
 	if (!res.data) {