ezhizao_zx il y a 1 an
Parent
commit
b98f79744c

+ 34 - 25
src/api/business/outsourcedOrderDetail.js

@@ -4,40 +4,40 @@ const baseUrl = import.meta.env.VITE_APP_PRODUCTION_API
 // 查询外协单从列表
 export function listDetail(query) {
   return request({
-    url: baseUrl +  '/business/detail/list',
+    url: baseUrl + '/business/detail/list',
     method: 'get',
     params: query
   })
 }
 // 获取已完成的外协单从表
 export function listDetailForReceipt(query) {
-	return request({
-		url: baseUrl + '/business/outsourceDetail/listDetailForReceipt',
-		method: 'get',
-		params: query
-	})
+  return request({
+    url: baseUrl + '/business/outsourceDetail/listDetailForReceipt',
+    method: 'get',
+    params: query
+  })
 }
 
 export function getNotFinishedOutsourceDetailList(query) {
-	return request({
-		url: baseUrl + '/business/outsourceDetail/getNotFinishedOutsourceDetailList',
-		method: 'get',
-		params: query
-	})
+  return request({
+    url: baseUrl + '/business/outsourceDetail/getNotFinishedOutsourceDetailList',
+    method: 'get',
+    params: query
+  })
 }
 // 获取所有的外协单从表
 export function listDetailForAllReceipt(query) {
-	return request({
-		url: baseUrl + '/business/outsourceDetail/listDetailForAllReceipt',
-		method: 'get',
-		params: query
-	})
+  return request({
+    url: baseUrl + '/business/outsourceDetail/listDetailForAllReceipt',
+    method: 'get',
+    params: query
+  })
 }
 
 // 查询外协单从详细
 export function getDetail(id) {
   return request({
-    url:  baseUrl + '/business/detail/' + id,
+    url: baseUrl + '/business/detail/' + id,
     method: 'get'
   })
 }
@@ -45,7 +45,7 @@ export function getDetail(id) {
 // 新增外协单从
 export function addDetail(data) {
   return request({
-    url: baseUrl +  '/business/detail',
+    url: baseUrl + '/business/detail',
     method: 'post',
     data: data
   })
@@ -54,7 +54,7 @@ export function addDetail(data) {
 // 修改外协单从
 export function updateDetail(data) {
   return request({
-    url: baseUrl +  '/business/detail',
+    url: baseUrl + '/business/detail',
     method: 'put',
     data: data
   })
@@ -63,16 +63,25 @@ export function updateDetail(data) {
 // 删除外协单从
 export function delDetail(id) {
   return request({
-    url: baseUrl +  '/business/detail/' + id,
+    url: baseUrl + '/business/detail/' + id,
     method: 'delete'
   })
 }
 //获取报工完成的发出单明细
 // 获取已完成的外协单从表
 export function getFinishedOutsourceDetailList(query) {
-	return request({
-		url: baseUrl + '/business/outsourceDetail/getFinishedOutsourceDetailList',
-		method: 'get',
-		params: query
-	})
+  return request({
+    url: baseUrl + '/business/outsourceDetail/getFinishedOutsourceDetailList',
+    method: 'get',
+    params: query
+  })
+}
+
+// 获取工序列表
+export function getProcessList(query) {
+  return request({
+    url: baseUrl + '/business/technologicalProcess/list',
+    method: 'get',
+    params: query
+  })
 }

+ 20 - 4
src/api/business/returnTurnover.js

@@ -4,7 +4,7 @@ const baseUrl = import.meta.env.VITE_APP_PRODUCTION_API
 // 查询收回周转列表
 export function getFinishedReturnList(query) {
   return request({
-    url:baseUrl +  '/business/returnTurnover/getFinishedReturnList',
+    url: baseUrl + '/business/returnTurnover/getFinishedReturnList',
     method: 'get',
     params: query
   })
@@ -13,14 +13,14 @@ export function getFinishedReturnList(query) {
 // 查询收回周转详细
 export function getReceiptTurnover(id) {
   return request({
-    url:baseUrl +  '/business/returnTurnover/' + id,
+    url: baseUrl + '/business/returnTurnover/' + id,
     method: 'get'
   })
 }
 // 查询收回周转
 export function getTurnoverDeptList(query) {
   return request({
-    url:baseUrl +  '/business/returnTurnover/getTurnoverDeptList',
+    url: baseUrl + '/business/returnTurnover/getTurnoverDeptList',
     method: 'get',
     params: query
   })
@@ -53,12 +53,20 @@ export function getNowBindCarriers(data) {
 // 修改收回周转
 export function updateReceiptTurnover(data) {
   return request({
-    url:baseUrl +  '/business/returnTurnover',
+    url: baseUrl + '/business/returnTurnover',
     method: 'put',
     data: data
   })
 }
 
+export function batchReceiptTurnover(data) {
+  return request({
+    url: baseUrl + '/business/returnTurnover/batchTurnover',
+    method: 'post',
+    data: data
+  })
+}
+
 // 删除收回周转
 export function delReceiptTurnover(id) {
   return request({
@@ -66,3 +74,11 @@ export function delReceiptTurnover(id) {
     method: 'delete'
   })
 }
+
+export function checkCarriers(data) {
+  return request({
+    url: baseUrl + '/business/returnTurnover/checkCarriers',
+    method: 'get',
+    params: data
+  })
+}

+ 95 - 0
src/views/business/returnTurnover/DialogProcess.vue

@@ -0,0 +1,95 @@
+<template>
+  <el-dialog title="工艺列表" v-model="visible" width="800px" height="400px" @close="close" append-to-body draggable>
+    <el-table ref="dialogTable" :data="processList" size="small" v-loading="loading" border height="370px"
+      @selection-change="handleSelectionChange">
+      <!-- <el-table-column type="selection" width="40" align="center" /> -->
+      <el-table-column type="index" label="行号" width="50" align="center" />
+      <el-table-column label="工序编码" align="center" prop="processCode" />
+      <el-table-column label="工序简称" align="center" prop="processAlias" />
+    </el-table>
+    <template #footer>
+      <div class="dialog-footer">
+        <el-button icon="Close" @click="close">取 消</el-button>
+      </div>
+    </template>
+  </el-dialog>
+</template>
+<script setup>
+const { proxy } = getCurrentInstance()
+/** 工序变量 */
+const total = ref(0)
+import { getProcessList } from '@/api/business/outsourcedOrderDetail'
+
+const processList = ref([])
+const visible = ref(false)
+const loading = ref(false)
+const queryParams = ref({
+  lotId: '',
+  dayworkId: '',
+  isAmend: '',
+  isWasteRecycling: '',
+  processAlias: '',
+  pageNum: 1,
+  pageSize: 10
+})
+const technologyVersions = ref([])
+const selections = ref([])
+const finishedProcesses = ref([])
+
+/**
+ * 对话框打开 事件
+ */
+function open(data) {
+  visible.value = true
+  console.log(data)
+  queryParams.value.dayworkId = data.dayworkId
+  queryParams.value.lotId = data.lotId
+  queryParams.value.isAmend = data.isAmend
+  queryParams.value.isWasteRecycling = data.isWasteRecycling
+  finishedProcesses.value = data.finishedProcesses
+  getProcessesList()
+}
+
+/**
+ * 对话框关闭 事件
+ */
+function close() {
+  proxy.$refs.dialogTable.clearSelection()
+  queryParams.value.pageNum = 1
+  visible.value = false
+}
+function getProcessesList() {
+  // queryParams.value.productId = productId.value
+  getProcessList(queryParams.value).then((res) => {
+    const maxStep = res.rows.findLastIndex(e => finishedProcesses.value.some(t => t.technologicalProcessDetailId === e.id))
+    console.log(maxStep)
+    res.rows.splice(0, maxStep + 1)
+    processList.value = res.rows
+  })
+}
+//切换工艺版本
+function handleTechnologyVersionChange() {
+}
+
+/**
+ * 列表checkbox列选择 事件
+ */
+function handleSelectionChange(selection) {
+  selections.value = selection
+}
+
+/**  搜索 事件 */
+function handleSearch() {
+}
+/** 多选事件 */
+function handleMultipleSelected() {
+  if (multipleSelected.value) {
+    multipleSelected.value(selections.value)
+  }
+  close()
+}
+
+defineExpose({
+  open
+})
+</script>

+ 33 - 65
src/views/business/returnTurnover/DialogReturnTurnover.vue

@@ -1,69 +1,27 @@
 <template>
-  <el-dialog
-    title="周转信息表单"
-    v-model="visible"
-    width="500px"
-    append-to-body
-    draggable
-  >
+  <el-dialog title="周转信息表单" v-model="visible" width="500px" append-to-body draggable>
     <div class="form-container">
-      <el-form
-        ref="returnTurnoverRef"
-        class="master-container"
-        :model="form"
-        :rules="rules"
-        label-width="80px"
-      >
-        <el-form-item
-          label="下序工段:"
-          prop="productionDeptId"
-          label-width="100px"
-        >
-          <el-select-v2
-            v-model="form.productionDeptId"
-            clearable
-            :disabled="!form.flag"
-            :options="deptList"
-            placeholder="请选择下序工段"
-            style="width: 220px"
-          />
+      <el-form ref="returnTurnoverRef" class="master-container" :model="form" :rules="rules" label-width="80px">
+        <el-form-item label="下序工段:" prop="productionDeptId" label-width="100px">
+          <el-select-v2 v-model="form.productionDeptId" clearable :disabled="!form.flag" :options="deptList"
+            placeholder="请选择下序工段" style="width: 220px" />
+          <el-button @click="showProcessList">工序列表</el-button>
         </el-form-item>
         <el-form-item label="周转载具:" prop="carrierIds" label-width="100px">
-          <el-select
-            v-model="form.carrierIds"
-            :disabled="form.productionDeptId == null || !form.flag"
-            multiple
-            filterable
-            remote
-            reserve-keyword
-            placeholder="请选择载具"
-            value-key="value"
-            :remote-method="(arg) => remoteCarriers(arg, form.carriers)"
-            :loading="loadingCarrier"
-            @change="(arg) => handleCarrierChange(arg)"
-          >
-            <el-option
-              v-for="item in carriers"
-              :key="item.value"
-              :label="item.label"
-              :value="item.value"
-            />
+          <el-select v-model="form.carrierIds" :disabled="form.productionDeptId == null || !form.flag" multiple
+            filterable remote reserve-keyword placeholder="请选择载具" value-key="value"
+            :remote-method="(arg) => remoteCarriers(arg, form.carriers)" :loading="loadingCarrier"
+            @change="(arg) => handleCarrierChange(arg)">
+            <el-option v-for="item in carriers" :key="item.value" :label="item.label" :value="item.value" />
           </el-select>
         </el-form-item>
       </el-form>
     </div>
     <template #footer>
-      <el-button
-        v-if="form.flag"
-        type="primary"
-        icon="Check"
-        @click="handleSave"
-        >确 定</el-button
-      >
-      <el-button v-if="form.flag" icon="Close" @click="handleCancel"
-        >取 消</el-button
-      >
+      <el-button v-if="form.flag" type="primary" icon="Check" @click="handleSave">确 定</el-button>
+      <el-button v-if="form.flag" icon="Close" @click="handleCancel">取 消</el-button>
     </template>
+    <dialog-process ref="dialogProcessRef" />
   </el-dialog>
 </template>
 <script setup>
@@ -73,6 +31,7 @@ import {
   updateReceiptTurnover,
   getNowBindCarriers,
 } from "@/api/business/returnTurnover";
+import DialogProcess from './DialogProcess.vue'
 import { ref } from "vue";
 const { proxy } = getCurrentInstance();
 const emit = defineEmits(["handleSaveSuccess"]);
@@ -81,6 +40,7 @@ const carriers = ref([]);
 const deptList = ref([]);
 const loadingCarrier = ref(false);
 const visible = ref(false);
+const dialogProcessRef = ref(null)
 const data = reactive({
   form: {},
   rules: {
@@ -104,15 +64,17 @@ const { form, rules } = toRefs(data);
 function open(data) {
   reset();
   visible.value = true;
-  if (data.productionDeptId == 0) {
-    data.productionDeptId = null;
-  }
   form.value = proxy.deepClone(data);
+
+  if (form.value.productionDeptId == 0) {
+    form.value.productionDeptId = null;
+  }
   console.log(form.value);
-  getNowCarriers(data);
-  getTurnoverDept(data);
-  getCarriers();
+  getNowCarriers(form.value);
+  getTurnoverDept(form.value);
+  // getCarriers();
 }
+
 function getCarriers() {
   listCarriers({ isAbandoned: 0, pageSize: 200 }).then((res) => {
     if (res.code === 200) {
@@ -131,11 +93,12 @@ function getNowCarriers(data) {
       form.value.carriers =
         res.data.dayworkCarrierList && res.data.dayworkCarrierList.length > 0
           ? res.data.dayworkCarrierList.map((v) => ({
-              value: v.carrierId,
-              label: v.carrierCode,
-            }))
+            value: v.carrierId,
+            label: v.carrierCode,
+          }))
           : [];
       form.value.carrierIds = res.data.carrierIds;
+      getCarriers()
     }
   });
 }
@@ -241,6 +204,11 @@ function handleSave() {
     });
   }
 }
+
+function showProcessList() {
+  console.log(form.value)
+  dialogProcessRef.value.open({ dayworkId: form.value.dayworkId, lotId: form.value.lotId, isAmend: form.value.isAmend, isWasteRecycling: form.value.isWasteRecycling, finishedProcesses: form.value.finishedProcesses })
+}
 /** 暴露给父组件的方法 */
 defineExpose({
   open,

+ 173 - 0
src/views/business/returnTurnover/DialogReturnTurnoverBatch.vue

@@ -0,0 +1,173 @@
+<template>
+  <el-dialog title="批量周转信息表单" v-model="visible" width="500px" append-to-body draggable>
+    <div class="form-container">
+      <el-form ref="returnTurnoverRef" class="master-container" :model="form" :rules="rules" label-width="80px">
+        <el-form-item label="下序工段:" prop="productionDeptId" label-width="100px">
+          <el-select-v2 v-model="form.productionDeptId" clearable :disabled="!form.flag" :options="deptList"
+            placeholder="请选择下序工段" style="width: 220px" />
+          <el-button @click="showProcessList">工序列表</el-button>
+        </el-form-item>
+      </el-form>
+    </div>
+    <template #footer>
+      <el-button v-if="form.flag" type="primary" icon="Check" @click="handleSave">确 定</el-button>
+      <el-button v-if="form.flag" icon="Close" @click="handleCancel">取 消</el-button>
+    </template>
+    <dialog-process ref="dialogProcessRef" />
+  </el-dialog>
+</template>
+<script setup>
+import { listCarriers } from "@/api/business/lot";
+import {
+  getTurnoverDeptList,
+  batchReceiptTurnover,
+  getNowBindCarriers,
+} from "@/api/business/returnTurnover";
+import DialogProcess from './DialogProcess.vue'
+import { ref } from "vue";
+const { proxy } = getCurrentInstance();
+const emit = defineEmits(["handleSaveSuccess"]);
+/**工周转弹窗变量 */
+const carriers = ref([]);
+const deptList = ref([]);
+const loadingCarrier = ref(false);
+const visible = ref(false);
+const dialogProcessRef = ref(null)
+const data = reactive({
+  form: {},
+  rules: {
+    productionDeptId: [
+      { required: true, message: "下序工段不能为空", trigger: "change" },
+    ],
+    carrierIds: [
+      {
+        required: true,
+        type: "array",
+        message: "周转载具不能为空",
+        trigger: "blur",
+      },
+    ],
+  },
+});
+const { form, rules } = toRefs(data);
+
+/***********************  方法区  ****************************/
+/** 打开抽屉 */
+function openBatch(batches) {
+  reset();
+  visible.value = true;
+  form.value = proxy.deepClone(batches[0]);
+  if (form.value.productionDeptId == 0) {
+    form.value.productionDeptId = null;
+  }
+  form.value.batches = batches
+  getTurnoverDept(form.value);
+  form.value.batches.forEach((v, i) => {
+    getNowCarriers(v, i)
+  })
+  // getCarriers();
+}
+
+//判断箱子是否需要解绑
+function getNowCarriers(data, index) {
+  getNowBindCarriers(data).then((res) => {
+    if (res.code == 200) {
+      form.value.batches[index].carriers =
+        res.data.dayworkCarrierList && res.data.dayworkCarrierList.length > 0
+          ? res.data.dayworkCarrierList.map((v) => ({
+            id: v.carrierId,
+            code: v.carrierCode,
+          }))
+          : [];
+      form.value.batches[index].carrierIds = res.data.carrierIds;
+    }
+  });
+}
+function getTurnoverDept(data) {
+  let lastProcessStepNumber =
+    data.processes[data.processes.length - 1].processStepNumber;
+  getTurnoverDeptList({
+    dayworkId: form.value.dayworkId,
+    processStepNumber: lastProcessStepNumber,
+  }).then((res) => {
+    if (res.code === 200) {
+      deptList.value = res.data;
+    }
+  });
+}
+function remoteCarriers(queryString, choiced) {
+  console.log(choiced);
+  loadingCarrier.value = true;
+  listCarriers({
+    isAbandoned: 0,
+    pageSize: 200,
+    code: queryString != "" ? queryString : null,
+  }).then((res) => {
+    if (res.code === 200) {
+      carriers.value = res.rows.map((v) => ({
+        value: v.id,
+        label: v.code,
+        category: v.categoryId,
+      }));
+      carriers.value.push(
+        ...choiced
+          .filter((v) => !carriers.value.map((e) => e.value).includes(v.id))
+          .map((v) => ({ value: v.id, label: v.code }))
+      );
+    } else {
+      carriers.value = [];
+      carriers.value.push(...choiced);
+    }
+    loadingCarrier.value = false;
+  });
+}
+
+function handleCarrierChange(arg) {
+  form.value.carriers = carriers.value
+    .filter((v) => arg.includes(v.value))
+    .map((v) => ({ id: v.value, code: v.label }));
+}
+
+/** 取消按钮 */
+function handleCancel() {
+  visible.value = false;
+  reset();
+}
+/** 表单重置 */
+function reset() {
+  form.value = {
+    productionDeptId: null,
+    productionCarrier: null,
+    lotId: null,
+    dayworkId: null,
+  };
+  proxy.resetForm("returnTurnoverRef");
+}
+
+/** 提交按钮 */
+function handleSave() {
+  if (!form.value.flag) {
+    visible.value = false;
+  } else {
+    proxy.$refs["returnTurnoverRef"].validate((valid) => {
+      if (valid) {
+        //如果没有重新选箱
+        batchReceiptTurnover(form.value).then((response) => {
+          proxy.$modal.msgSuccess("修改成功");
+          visible.value = false;
+          emit("handleSaveSuccess");
+        });
+      }
+    });
+  }
+}
+
+function showProcessList() {
+  console.log(form.value)
+  dialogProcessRef.value.open({ dayworkId: form.value.dayworkId, lotId: form.value.lotId, isAmend: form.value.isAmend, isWasteRecycling: form.value.isWasteRecycling, finishedProcesses: form.value.finishedProcesses })
+}
+/** 暴露给父组件的方法 */
+defineExpose({
+  openBatch,
+});
+</script>

+ 168 - 68
src/views/business/returnTurnover/index.vue

@@ -3,69 +3,52 @@
 		<!-- 搜索区 -->
 		<el-form class="list-search-container" :model="queryParams" ref="queryRef" :inline="true" style="margin-right: 0px">
 			<el-form-item label="单据号:" prop="formCode">
-				<el-input
-					v-model="queryParams.formCode"
-					placeholder="请输入单据号"
-					style="width: 144px"
-					clearable
-					@keyup.enter="handleQuery"
-				/>
+				<el-input v-model="queryParams.formCode" placeholder="请输入单据号" style="width: 144px" clearable
+					@keyup.enter="handleQuery" />
 			</el-form-item>
 			<el-form-item label="批次号:" prop="lotCode">
-				<el-input
-					v-model="queryParams.lotCode"
-					placeholder="请输入批次号"
-					style="width: 144px"
-					clearable
-					@keyup.enter="handleQuery"
-				/>
+				<el-input v-model="queryParams.lotCode" placeholder="请输入批次号" style="width: 144px" clearable
+					@keyup.enter="handleQuery" />
 			</el-form-item>
 			<el-form-item label="产品描述:" prop="productDescription">
-				<el-input
-					v-model="queryParams.productDescription"
-					placeholder="请输入产品描述"
-					style="width: 144px"
-					clearable
-					@keyup.enter="handleQuery"
-				/>
+				<el-input v-model="queryParams.productDescription" placeholder="请输入产品描述" style="width: 144px" clearable
+					@keyup.enter="handleQuery" />
 			</el-form-item>
 			<el-form-item label="外协商:" prop="supplierName">
-				<el-input
-					v-model="queryParams.supplierName"
-					placeholder="请输入外协商"
-					style="width: 144px"
-					clearable
-					@keyup.enter="handleQuery"
-				/>
+				<el-input v-model="queryParams.supplierName" placeholder="请输入外协商" style="width: 144px" clearable
+					@keyup.enter="handleQuery" />
+			</el-form-item>
+			<el-form-item label="状态:" prop="supplierName">
+				<el-select v-model="queryParams.statusValue" placeholder="请选择周转状态" style="width: 120px;">
+					<el-option v-for="item in statusLabels" :key="item.value" :label="item.label" :value="item.value"></el-option>
+				</el-select>
+			</el-form-item>
+			<el-form-item label="标识:">
+				<el-select style="width: 360px" multiple v-model="queryParams.flags" clearable placeholder="请选择标识"
+					@change="handleFlagChange">
+					<el-option v-for="item in is_identification" :key="item.value" :label="item.label"
+						:value="item.value"></el-option>
+				</el-select>
 			</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
-				/>
+				<el-date-picker v-model="queryParams.startTime" type="date" style="width: 144px" value-format="YYYY-MM-DD"
+					placeholder="选择起始日期" clearable />
 				<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
-				/>
+				<el-date-picker v-model="queryParams.endTime" type="date" style="width: 144px" value-format="YYYY-MM-DD"
+					placeholder="选择结束日期" clearable />
 			</el-form-item>
 			<el-form-item>
 				<el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button>
+				<el-button type="success" icon="Search" @click="handleBatchTurnover">批量周转</el-button>
 			</el-form-item>
 		</el-form>
 		<!-- 渲染数据区 -->
 		<div class="el-table-container">
 			<div class="el-table-inner-container">
-				<el-table v-loading="loading" :data="dataList" size="small" border height="100%">
-					<el-table-column label="收回单号" align="center" prop="formCode" width="120" />
+				<el-table v-loading="loading" :data="dataList" size="small" border height="100%"
+					@selection-change="handleOutsourceOrderSelectionChange">
+					<el-table-column type="selection" align="center" />
+					<!-- <el-table-column label="收回单号" align="center" prop="formCode" width="120" /> -->
 					<el-table-column label="外协商" align="center" prop="supplierName" width="120" />
 					<el-table-column label="批次号" align="center" prop="lotCode" width="240" />
 					<el-table-column label="产品描述" align="center" prop="productDescription" width="240" />
@@ -76,11 +59,30 @@
 						</template>
 					</el-table-column>
 					<el-table-column label="备注" align="center" prop="remark" />
-					<el-table-column label="周转箱号" align="center" prop="productionCarrier" />
+					<el-table-column label="周转箱号" align="center" prop="productionCarrier">
+						<template #default="scope">
+							<div>{{ scope.row.productionDeptId === '0' ? scope.row.newCarrierName : scope.row.productionCarrier }}
+							</div>
+						</template>
+					</el-table-column>
 					<el-table-column label="周转工段" align="center" prop="productionDeptName" />
+					<el-table-column label="状态" align="center" prop="status">
+						<template #default="scope">
+							<div>{{ scope.row.productionDeptId === '0' ? '待周转' : '已周转' }}</div>
+						</template>
+					</el-table-column>
+					<el-table-column label="批次标识" align="center" prop="lotID">
+						<template #default="scope">
+							<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="danger">{{ "废品回用" }}</el-tag>
+							<el-tag v-if="scope.row.isWasteRecycling == 0 && scope.row.isAmend == 0" class="spacing">{{
+			"正常批次" }}</el-tag>
+						</template>
+					</el-table-column>
 					<el-table-column label="操作" align="center" class-name="small-padding fixed-width" width="64">
 						<template #default="scope">
-							<el-button v-if="scope.row.flag" link type="warning" icon="Edit" @click="handleShowTurnoverDialog(scope.row)"> 编辑 </el-button>
+							<el-button v-if="scope.row.flag" link type="warning" icon="Edit"
+								@click="handleShowTurnoverDialog(scope.row)"> 编辑 </el-button>
 						</template>
 					</el-table-column>
 				</el-table>
@@ -88,34 +90,55 @@
 		</div>
 
 		<!-- 分页 -->
-		<pagination
-			v-show="total > 0"
-			:total="total"
-			v-model:page="queryParams.pageNum"
-			v-model:limit="queryParams.pageSize"
-			@pagination="getList"
-		/>
+		<pagination v-show="total > 0" :total="total" v-model:page="queryParams.pageNum"
+			v-model:limit="queryParams.pageSize" @pagination="getList" />
 		<!-- 周转信息弹窗 -->
 		<dialog-return-turnover ref="dialogReturnTurnoverRef" @handleSaveSuccess=getList() />
+		<dialog-return-turnover-batch ref="dialogReturnTurnoverBatchRef" @handleSaveSuccess="getList" />
 	</div>
 </template>
 
 <script setup name="ReturnTurnover">
-import { getFinishedReturnList ,getProcessInspectionList } from '@/api/business/returnTurnover'
-import {getP2NeedCheckProcess} from '@/api/business/p2'
+import { getFinishedReturnList, getProcessInspectionList, checkCarriers } from '@/api/business/returnTurnover'
+import { getP2NeedCheckProcess } from '@/api/business/p2'
 import dialogReturnTurnover from './DialogReturnTurnover.vue';
+import DialogReturnTurnoverBatch from './DialogReturnTurnoverBatch.vue';
 const { proxy } = getCurrentInstance()
 const dataList = ref([])
 const loading = ref(false)
 const ids = ref([])
 const total = ref(0)
+const selections = ref([])
+const statusLabels = ref([{
+	value: '0',
+	label: '全部'
+}, {
+	value: '1',
+	label: '待周转'
+}, {
+	value: '2',
+	label: '已周转'
+}])
 /** 查询对象 */
 const queryParams = ref({
 	pageNum: 1,
 	pageSize: 10,
 	formCode: null,
-	formDate: null
+	formDate: null,
+	statusValue: '1'
 })
+/** 字典数组区 */
+// const { is_identification } = proxy.useDict("is_identification");
+const is_identification = ref([{
+	value: '1',
+	label: '废品回用'
+}, {
+	value: '2',
+	label: '工艺修改'
+}, {
+	value: '3',
+	label: '正常批次'
+}])
 
 /***********************  方法区  ****************************/
 
@@ -138,6 +161,7 @@ function handleQuery() {
 /** 重置按钮操作 */
 function resetQuery() {
 	proxy.resetForm('queryRef')
+	queryParams.value.statusValue = '1'
 	handleQuery()
 }
 
@@ -146,15 +170,16 @@ function handleShowTurnoverDialog(row) {
 	console.log(row)
 	//proxy.$refs.dialogReturnTurnoverRef.open(row)
 	//判断该批次的工序是否需要审核
+	/* 
 	getP2NeedCheckProcess("Y").then(res => {
-		if(res.code == 200) {
+		if (res.code == 200) {
 			//需要序检的工序
 			var process = []
 			let needCheckProcessCodeList = res.rows.map(item => item.prcode.trim())
-			let returnReceiptProcessCodeList=row.finishedProcesses.map(v => ({ processCode: v.processCode, processStepNumber: v.processStepNumber,returnReceiptDetailId:v.returnReceiptDetailId }))
-			for(let i = 0;i<needCheckProcessCodeList.length;i++) {
-				for(let j = 0;j<returnReceiptProcessCodeList.length;j++) {
-					if(needCheckProcessCodeList[i] == returnReceiptProcessCodeList[j].processCode) {
+			let returnReceiptProcessCodeList = row.finishedProcesses.map(v => ({ processCode: v.processCode, processStepNumber: v.processStepNumber, returnReceiptDetailId: v.returnReceiptDetailId }))
+			for (let i = 0; i < needCheckProcessCodeList.length; i++) {
+				for (let j = 0; j < returnReceiptProcessCodeList.length; j++) {
+					if (needCheckProcessCodeList[i] == returnReceiptProcessCodeList[j].processCode) {
 						process.push(returnReceiptProcessCodeList[j])
 					}
 				}
@@ -162,22 +187,25 @@ function handleShowTurnoverDialog(row) {
 			console.log(needCheckProcessCodeList)
 			console.log(returnReceiptProcessCodeList)
 			console.log(process)
-			if(process.length >0) {
+			if (process.length > 0) {
 				getProcessInspectionList(process[process.length - 1]).then(res => {
-					if(res.code == 200) {
-						if(res.data){
-						proxy.$refs.dialogReturnTurnoverRef.open(row)
+					if (res.code == 200) {
+						if (res.data) {
+							proxy.$refs.dialogReturnTurnoverRef.open(row)
 						}
 						else {
 							proxy.$modal.msgError('当前批次检查未处于合格状态,暂时无法周转')
 						}
 					}
 				})
-			}else {
+			} else {
 				proxy.$refs.dialogReturnTurnoverRef.open(row)
 			}
 		}
 	})
+	// */
+
+	proxy.$refs.dialogReturnTurnoverRef.open(row)
 }
 
 /** 导出按钮操作 */
@@ -191,5 +219,77 @@ function handleExport() {
 	)
 }
 
+function handleFlagChange() {
+}
+
+function handleOutsourceOrderSelectionChange(selection) {
+	selections.value = selection
+}
+
+async function handleBatchTurnover() {
+	// 批量周转
+	// 判断是否选择批次周转项
+	if (selections.value.some(v => v.productionDeptId != '0')) {
+		proxy.$modal.msgError('请选择未周转外协单进行周转')
+		return
+	}
+	if (selections.value.length === 0) {
+		proxy.$modal.msgError('请选择一条外协单进行周转')
+		return
+	}
+	// 先判断批量周转是否是同一个产品
+	if (selections.value.findIndex(v => v.productId != selections.value[0].productId) >= 0) {
+		proxy.$modal.msgError('请选择同一产品进行批量周转')
+		return
+	}
+	// 判断批量周转中是否存在单批单改
+	if (selections.value.length > 1 && selections.value.findIndex(v => v.isAmend == 1 || v.isWasteRecycling == 1) >= 0) {
+		proxy.$modal.msgError('请选择标准工艺批次进行批量周转')
+		return
+	}
+	const carriers = selections.value.map(v => v.newCarrierName).join()
+	const res = await checkCarriers({ carriers: carriers })
+	if (!res.data) {
+		proxy.$modal.msgError('请不要选择外协箱外协单进行批量周转')
+		return
+	}
+	/* 
+	getP2NeedCheckProcess("Y").then(res => {
+		if (res.code == 200) {
+			//需要序检的工序
+			var process = []
+			let needCheckProcessCodeList = res.rows.map(item => item.prcode.trim())
+			let returnReceiptProcessCodeList = row.finishedProcesses.map(v => ({ processCode: v.processCode, processStepNumber: v.processStepNumber, returnReceiptDetailId: v.returnReceiptDetailId }))
+			for (let i = 0; i < needCheckProcessCodeList.length; i++) {
+				for (let j = 0; j < returnReceiptProcessCodeList.length; j++) {
+					if (needCheckProcessCodeList[i] == returnReceiptProcessCodeList[j].processCode) {
+						process.push(returnReceiptProcessCodeList[j])
+					}
+				}
+			}
+			console.log(needCheckProcessCodeList)
+			console.log(returnReceiptProcessCodeList)
+			console.log(process)
+			if (process.length > 0) {
+				getProcessInspectionList(process[process.length - 1]).then(res => {
+					if (res.code == 200) {
+						if (res.data) {
+							proxy.$refs.dialogReturnTurnoverRef.openBatch(selections.value)
+						}
+						else {
+							proxy.$modal.msgError('当前批次检查未处于合格状态,暂时无法周转')
+						}
+					}
+				})
+			} else {
+				proxy.$refs.dialogReturnTurnoverBatchRef.openBatch(selections.value)
+			}
+		}
+	})
+	// */
+
+	proxy.$refs.dialogReturnTurnoverBatchRef.openBatch(selections.value)
+}
+
 getList();
 </script>