Selaa lähdekoodia

Merge remote-tracking branch 'origin/master'

guoyujia 9 kuukautta sitten
vanhempi
commit
05d51a486d

+ 16 - 0
src/api/business/certificate.js

@@ -61,3 +61,19 @@ export function printPdf(data) {
     `合格证_${new Date().getTime()}.pdf`
   )
 }
+
+export function getDayworkList(data) {
+  return request({
+    url: baseUrl + "/business/certificate/getDayworkList",
+    method: "get",
+    params: data
+  });
+}
+
+export function newCertificate(data) {
+  return request({
+    url: baseUrl + "/business/certificate/newCertificate",
+    method: "post",
+    data: data
+  });
+}

+ 62 - 0
src/api/business/packageResourceGroup.js

@@ -0,0 +1,62 @@
+import request from '@/utils/request'
+const baseUrl = import.meta.env.VITE_APP_PRODUCTION_API
+
+// 查询包装线列表
+export function listGroup(query) {
+  return request({
+    url: baseUrl + '/business/packageResourceGroup/list',
+    method: 'get',
+    params: query
+  })
+}
+
+// 查询包装线详细
+export function getGroup(id) {
+  return request({
+    url: baseUrl + '/business/packageResourceGroup/' + id,
+    method: 'get'
+  })
+}
+
+// 新增包装线
+export function addGroup(data) {
+  return request({
+    url: baseUrl + '/business/packageResourceGroup',
+    method: 'post',
+    data: data
+  })
+}
+
+// 修改包装线
+export function updateGroup(data) {
+  return request({
+    url: baseUrl + '/business/packageResourceGroup',
+    method: 'put',
+    data: data
+  })
+}
+
+// 删除包装线
+export function delGroup(id) {
+  return request({
+    url: baseUrl + '/business/packageResourceGroup/' + id,
+    method: 'delete'
+  })
+}
+
+// 导出包装线
+export function addDetails(data) {
+  return request({
+    url: baseUrl + '/business/packageResourceGroup/addDetails',
+    method: 'post',
+    data: data
+  })
+}
+
+export function listDetails(params) {
+  return request({
+    url: baseUrl + '/business/packageResourceGroup/listDetails',
+    method: 'get',
+    params: params
+  })
+}

+ 45 - 0
src/api/business/packageResourceGroupDetail.js

@@ -0,0 +1,45 @@
+import request from '@/utils/request'
+const baseUrl = import.meta.env.VITE_APP_PRODUCTION_API
+
+// 查询包装线明细列表
+export function listDetail(query) {
+  return request({
+    url: baseUrl + '/business/packageResourceGroupDetail/list',
+    method: 'get',
+    params: query
+  })
+}
+
+// 查询包装线明细详细
+export function getDetail(id) {
+  return request({
+    url: baseUrl + '/business/packageResourceGroupDetail/' + id,
+    method: 'get'
+  })
+}
+
+// 新增包装线明细
+export function addDetail(data) {
+  return request({
+    url: baseUrl + '/business/packageResourceGroupDetail',
+    method: 'post',
+    data: data
+  })
+}
+
+// 修改包装线明细
+export function updateDetail(data) {
+  return request({
+    url: baseUrl + '/business/packageResourceGroupDetail',
+    method: 'put',
+    data: data
+  })
+}
+
+// 删除包装线明细
+export function delDetail(id) {
+  return request({
+    url: baseUrl + '/business/packageResourceGroupDetail/' + id,
+    method: 'delete'
+  })
+}

+ 45 - 0
src/api/business/productPackage.js

@@ -0,0 +1,45 @@
+import request from '@/utils/request'
+const baseUrl = import.meta.env.VITE_APP_PRODUCTION_API
+
+// 查询产品包装客户关联列表
+export function listProductPackage(query) {
+  return request({
+    url: baseUrl + '/business/productPackage/list',
+    method: 'get',
+    params: query
+  })
+}
+
+// 查询产品包装客户关联详细
+export function getProductPackage(id) {
+  return request({
+    url: baseUrl + '/business/productPackage/' + id,
+    method: 'get'
+  })
+}
+
+// 新增产品包装客户关联
+export function addProductPackage(data) {
+  return request({
+    url: baseUrl + '/business/productPackage',
+    method: 'post',
+    data: data
+  })
+}
+
+// 修改产品包装客户关联
+export function updateProductPackage(data) {
+  return request({
+    url: baseUrl + '/business/productPackage',
+    method: 'put',
+    data: data
+  })
+}
+
+// 删除产品包装客户关联
+export function delProductPackage(id) {
+  return request({
+    url: baseUrl + '/business/productPackage/' + id,
+    method: 'delete'
+  })
+}

+ 88 - 0
src/views/business/certificate/DeptChoiceDialog.vue

@@ -0,0 +1,88 @@
+<template>
+  <el-dialog title="选择部门" v-model="visible" width="800px" append-to-body draggable>
+    <el-form ref="dialogForm" class="master-container" :model="queryParams" style="align-items: center;">
+      <div style="display: flex;">
+        <el-form-item label="部门编码:" prop="deptCode" label-width="100px" style="margin-top: 20px;">
+          <el-input v-model.trim="queryParams.deptCode" type="text" @keydown.enter.prevent style="width: 180px"
+            placeholder="请输入部门编码" :clearable="true" @keyup.enter="handleSearch" />
+        </el-form-item>
+        <el-form-item label="部门名称:" prop="deptName" label-width="100px" style="margin-top: 20px;">
+          <el-input v-model.trim="queryParams.deptName" type="text" @keydown.enter.prevent style="width: 180px"
+            placeholder="请输入部门名称" :clearable="true" @keyup.enter="handleSearch" />
+        </el-form-item>
+        <el-form-item label-width="20px" style="margin-top: 20px;">
+          <el-button type="info" icon="Search" @click="handleSearch">搜索</el-button>
+        </el-form-item>
+      </div>
+    </el-form>
+    <el-table v-loading="loading" row-key="deptId" :data="dataList" height="400px">
+      <el-table-column label="行号" type="index" width="50" align="center" />
+      <el-table-column label="部门编码" prop="deptCode" width="150" align="center" />
+      <el-table-column label="部门名称" prop="deptName" align="center" />
+      <el-table-column label="操作" width="60" align="center">
+        <template #default="scope">
+          <el-button link type="success" icon="Select" @click="handleSelectDept(scope.row)">选择</el-button>
+        </template>
+      </el-table-column>
+    </el-table>
+  </el-dialog>
+</template>
+<script setup>
+import { listDept } from '@/api/system/dept'
+const emit = defineEmits(['handleSelectDept', 'handleSelectBelongingDept'])
+const { proxy } = getCurrentInstance()
+
+const loading = ref(false)
+const visible = ref(false)
+const multiple = ref(false)
+
+const dataList = ref([])
+
+/** 设备档案 查询对象 */
+const queryParams = ref({
+  type: 0,
+  deptName: '',
+  deptCode: '',
+  isWorkSection: 1
+})
+/***********************  方法区  ****************************/
+/** 打开抽屉 */
+const open = (data) => {
+  visible.value = true
+  multiple.value = data
+  loadData()
+}
+
+const loadData = () => {
+  loading.value = true
+  listDept(queryParams.value).then((res) => {
+    dataList.value = res.rows
+    //dataTotal.value = res.total
+    loading.value = false
+  })
+}
+
+const handleRefreshDetail = () => {
+  loadData()
+}
+
+const handleSelectDept = (data) => {
+  if (multiple.value) {
+    emit('handleSelectDept', data)
+  }
+  else {
+    emit('handleSelectBelongingDept', data)
+  }
+
+  proxy.$refs.dialogForm.resetFields()
+  visible.value = false
+}
+const handleSearch = () => {
+  loadData()
+}
+
+/** 暴露给父组件的方法 */
+defineExpose({
+  open
+})
+</script>

+ 84 - 0
src/views/business/certificate/HistoryDialog.vue

@@ -0,0 +1,84 @@
+<template>
+  <el-dialog title="历史记录" v-model="visible" width="800px" append-to-body draggable>
+    <el-form ref="dialogForm" class="master-container" :model="queryParams" style="align-items: center;">
+      <div style="display: flex;">
+      </div>
+    </el-form>
+    <el-table v-loading="loading" row-key="deptId" :data="dataList" height="400px">
+      <el-table-column label="行号" type="index" width="50" align="center" />
+      <el-table-column label="生成日期" prop="printDate" width="150" align="center" />
+      <el-table-column label="部门名称" prop="deptName" width="150" align="center" />
+      <el-table-column label="包装线名" prop="packageResourceGroupName" align="center" />
+      <el-table-column label="包装线号" prop="packageLineNo" width="150" align="center" />
+      <el-table-column label="开始编码" prop="startCode" width="150" align="center" />
+      <el-table-column label="结束编码" prop="endCode" width="150" align="center" />
+      <el-table-column label="包装箱号" prop="packageCode" width="150" align="center" />
+      <el-table-column label="包装规格" prop="packageStandard" width="150" align="center" />
+      <el-table-column label="打印时间" prop="printTime" width="150" align="center" />
+    </el-table>
+  </el-dialog>
+</template>
+<script setup>
+import { listCertificate, getDayworkList } from '@/api/business/certificate'
+const emit = defineEmits(['multipleChoice', 'singleChoice'])
+const { proxy } = getCurrentInstance()
+const props = defineProps({
+  multiple: {
+    default: false,
+    type: Boolean
+  }
+})
+
+const { multiple } = toRefs(props)
+
+const loading = ref(false)
+const visible = ref(false)
+
+const dataList = ref([])
+
+/** 设备档案 查询对象 */
+const queryParams = ref({
+})
+/***********************  方法区  ****************************/
+/** 打开抽屉 */
+const open = (data) => {
+  visible.value = true
+  if (data) {
+    queryParams.value = { ...queryParams.value, ...data }
+  }
+  loadData()
+}
+
+const loadData = () => {
+  loading.value = true
+  listCertificate(queryParams.value).then((res) => {
+    dataList.value = res.rows
+    //dataTotal.value = res.total
+    loading.value = false
+  })
+}
+
+const handleRefreshDetail = () => {
+  loadData()
+}
+
+const handleSelectDept = (data) => {
+  if (multiple.value) {
+    emit('multipleChoice', data)
+  }
+  else {
+    emit('singleChoice', data)
+  }
+
+  proxy.$refs.dialogForm.resetFields()
+  visible.value = false
+}
+const handleSearch = () => {
+  loadData()
+}
+
+/** 暴露给父组件的方法 */
+defineExpose({
+  open
+})
+</script>

+ 97 - 0
src/views/business/certificate/PackageLineChoiceDialog.vue

@@ -0,0 +1,97 @@
+<template>
+  <el-dialog title="选择包装线" v-model="visible" width="800px" append-to-body draggable>
+    <el-form ref="dialogForm" class="master-container" :model="queryParams" style="align-items: center;">
+      <div style="display: flex;">
+        <el-form-item label="包装线名称:" prop="name" label-width="100px" style="margin-top: 20px;">
+          <el-input v-model.trim="queryParams.name" type="text" @keydown.enter.prevent style="width: 180px"
+            placeholder="请输入包装线名称" :clearable="true" @keyup.enter="handleSearch" />
+        </el-form-item>
+        <!-- <el-form-item label="部门名称:" prop="deptName" label-width="100px" style="margin-top: 20px;">
+          <el-input v-model.trim="queryParams.deptName" type="text" @keydown.enter.prevent style="width: 180px"
+            placeholder="请输入部门名称" :clearable="true" @keyup.enter="handleSearch" />
+        </el-form-item> -->
+        <el-form-item label-width="20px" style="margin-top: 20px;">
+          <el-button type="info" icon="Search" @click="handleSearch">搜索</el-button>
+        </el-form-item>
+      </div>
+    </el-form>
+    <el-table v-loading="loading" row-key="deptId" :data="dataList" height="400px">
+      <el-table-column label="行号" type="index" width="50" align="center" />
+      <el-table-column label="包装线名" prop="name" align="center" />
+      <el-table-column label="包装线号" prop="packageLineNo" width="150" align="center" />
+      <el-table-column label="操作" width="60" align="center">
+        <template #default="scope">
+          <el-button link type="success" icon="Select" @click="handleSelectDept(scope.row)">选择</el-button>
+        </template>
+      </el-table-column>
+    </el-table>
+  </el-dialog>
+</template>
+<script setup>
+import { listGroup } from '@/api/business/packageResourceGroup'
+const emit = defineEmits(['multipleChoice', 'singleChoice'])
+const { proxy } = getCurrentInstance()
+const props = defineProps({
+  multiple: {
+    default: false,
+    type: Boolean
+  }
+})
+
+const { multiple } = toRefs(props)
+
+const loading = ref(false)
+const visible = ref(false)
+
+const dataList = ref([])
+
+/** 设备档案 查询对象 */
+const queryParams = ref({
+  type: 0,
+  deptName: '',
+  deptCode: '',
+  isWorkSection: 1
+})
+/***********************  方法区  ****************************/
+/** 打开抽屉 */
+const open = (data) => {
+  visible.value = true
+  if (data) {
+    queryParams.value = { ...queryParams.value, ...data }
+  }
+  loadData()
+}
+
+const loadData = () => {
+  loading.value = true
+  listGroup(queryParams.value).then((res) => {
+    dataList.value = res.rows
+    //dataTotal.value = res.total
+    loading.value = false
+  })
+}
+
+const handleRefreshDetail = () => {
+  loadData()
+}
+
+const handleSelectDept = (data) => {
+  if (multiple.value) {
+    emit('multipleChoice', data)
+  }
+  else {
+    emit('singleChoice', data)
+  }
+
+  proxy.$refs.dialogForm.resetFields()
+  visible.value = false
+}
+const handleSearch = () => {
+  loadData()
+}
+
+/** 暴露给父组件的方法 */
+defineExpose({
+  open
+})
+</script>

+ 99 - 0
src/views/business/certificate/PackageTypeChoiceDialog.vue

@@ -0,0 +1,99 @@
+<template>
+  <el-dialog title="选择包装" v-model="visible" width="800px" append-to-body draggable>
+    <el-form ref="dialogForm" class="master-container" :model="queryParams" style="align-items: center;">
+      <div style="display: flex;">
+        <el-form-item label="包装编码:" prop="packageCode" label-width="100px" style="margin-top: 20px;">
+          <el-input v-model.trim="queryParams.packageCode" type="text" @keydown.enter.prevent style="width: 180px"
+            placeholder="请输入包装编码" :clearable="true" @keyup.enter="handleSearch" />
+        </el-form-item>
+        <!-- <el-form-item label="部门名称:" prop="deptName" label-width="100px" style="margin-top: 20px;">
+          <el-input v-model.trim="queryParams.deptName" type="text" @keydown.enter.prevent style="width: 180px"
+            placeholder="请输入部门名称" :clearable="true" @keyup.enter="handleSearch" />
+        </el-form-item> -->
+        <el-form-item label-width="20px" style="margin-top: 20px;">
+          <el-button type="info" icon="Search" @click="handleSearch">搜索</el-button>
+        </el-form-item>
+      </div>
+    </el-form>
+    <el-table v-loading="loading" row-key="deptId" :data="dataList" height="400px">
+      <el-table-column label="行号" type="index" width="50" align="center" />
+      <el-table-column label="包装编码" prop="packageCode" align="center" />
+      <el-table-column label="包装箱号" prop="packageNo" width="150" align="center" />
+      <el-table-column label="包装形式码" prop="packageTypeCode" width="150" align="center" />
+      <el-table-column label="包装尺寸" prop="packageStandard" width="150" align="center" />
+      <el-table-column label="操作" width="60" align="center">
+        <template #default="scope">
+          <el-button link type="success" icon="Select" @click="handleSelectDept(scope.row)">选择</el-button>
+        </template>
+      </el-table-column>
+    </el-table>
+  </el-dialog>
+</template>
+<script setup>
+import { listProductPackage } from '@/api/business/productPackage'
+const emit = defineEmits(['multipleChoice', 'singleChoice'])
+const { proxy } = getCurrentInstance()
+const props = defineProps({
+  multiple: {
+    default: false,
+    type: Boolean
+  }
+})
+
+const { multiple } = toRefs(props)
+
+const loading = ref(false)
+const visible = ref(false)
+
+const dataList = ref([])
+
+/** 设备档案 查询对象 */
+const queryParams = ref({
+  type: 0,
+  deptName: '',
+  deptCode: '',
+  isWorkSection: 1
+})
+/***********************  方法区  ****************************/
+/** 打开抽屉 */
+const open = (data) => {
+  visible.value = true
+  if (data) {
+    queryParams.value = { ...queryParams.value, ...data }
+  }
+  loadData()
+}
+
+const loadData = () => {
+  loading.value = true
+  listProductPackage(queryParams.value).then((res) => {
+    dataList.value = res.rows
+    //dataTotal.value = res.total
+    loading.value = false
+  })
+}
+
+const handleRefreshDetail = () => {
+  loadData()
+}
+
+const handleSelectDept = (data) => {
+  if (multiple.value) {
+    emit('multipleChoice', data)
+  }
+  else {
+    emit('singleChoice', data)
+  }
+
+  proxy.$refs.dialogForm.resetFields()
+  visible.value = false
+}
+const handleSearch = () => {
+  loadData()
+}
+
+/** 暴露给父组件的方法 */
+defineExpose({
+  open
+})
+</script>

+ 197 - 24
src/views/business/certificate/form.vue

@@ -7,9 +7,10 @@
             <Document />
           </el-icon>
           打印合格证</span>
-        <el-button style="margin-left: 30px" type="primary" icon="Check" @click="handleGenerate">生成
+        <el-button :disabled="form.generateTime != null" style="margin-left: 30px" type="primary" icon="Check"
+          @click="handleGenerate">生成
         </el-button>
-        <el-button style="margin-left: 30px" type="primary" icon="Check" @click="handlePrint">打印
+        <el-button style="margin-left: 30px" type="primary" icon="Check" @click="handlePrint">预览并打印
         </el-button>
         <el-button icon="Close" @click="cancel">取 消 </el-button>
         <div class="close-btn" @click="cancel">
@@ -25,22 +26,120 @@
           </el-col>
         </el-row>
         <el-form :model="form" ref="queryRef" :inline="true"
-          style="margin-right: 0px; font-size: 15px; padding-top: 10px">
-          <el-form-item label="生成日期" prop="selectedProcess">
-          </el-form-item>
-          <el-form-item label="箱号:" prop="carrierIds">
-          </el-form-item>
+          style="margin-right: 0px; font-size: 15px; padding-top: 10px" label-width="100px">
+          <el-row :gutter="30" style="margin-top: 10px; padding-top: 10px">
+            <el-col :span="6">
+              <el-form-item label="生成日期:" prop="printDate">
+                <el-date-picker v-model="form.printDate" value-format="YYYY-MM-DD" style="width: 210px" />
+              </el-form-item>
+            </el-col>
+            <el-col :span="6">
+              <el-form-item label="合格证种类:" prop="type">
+                <el-input readonly v-model="form.type" placeholder="请输入合格证种类" style="width: 210px" />
+              </el-form-item>
+            </el-col>
+            <el-col :span="6">
+              <el-form-item label="生产批号:" prop="lotCode">
+                <el-input readonly v-model="form.lotCode" style="width: 210px" />
+              </el-form-item>
+            </el-col>
+            <el-col :span="6">
+              <el-form-item label="生产工段:" prop="deptName">
+                <el-input readonly v-model="form.deptName" placeholder="" style="width: 210px">
+                  <template #append>
+                    <el-button icon="Search" @click="showDeptChoiceDialog"></el-button>
+                  </template>
+                </el-input>
+              </el-form-item>
+            </el-col>
+            <el-col :span="6">
+              <el-form-item label="包装线号:" prop="packageLineNo">
+                <el-input readonly v-model="form.packageLineNo" placeholder="" style="width: 210px">
+                  <template #append>
+                    <el-button icon="Search" @click="showLineChoiceDialog"></el-button>
+                  </template>
+                </el-input>
+              </el-form-item>
+            </el-col>
+            <el-col :span="6">
+              <el-form-item label="年:" prop="year">
+                <el-input readonly v-model="form.year" placeholder="" style="width: 210px" />
+              </el-form-item>
+            </el-col>
+            <el-col :span="6">
+              <el-form-item label="标签数量:" prop="labelNumber">
+                <el-input-number v-model="form.labelNumber" :step="1" step-strictly :controls="false"
+                  @change="handleLabelNumberChange" style="width: 210px" />
+              </el-form-item>
+            </el-col>
+            <el-col :span="6">
+              <el-form-item label="打印份数:" prop="printPages">
+                <el-input readonly v-model="form.printPages" style="width: 210px" />
+              </el-form-item>
+            </el-col>
+            <el-col :span="6">
+              <el-form-item label="包装数量:" prop="number">
+                <el-input readonly v-model="form.number" style="width: 210px" />
+              </el-form-item>
+            </el-col>
+            <el-col :span="6">
+              <el-form-item label="产品描述:" prop="productDescription">
+                <el-input readonly v-model="form.productDescription" placeholder="" style="width: 210px" />
+              </el-form-item>
+            </el-col>
+            <el-col :span="6">
+              <el-form-item label="规格:" prop="specification">
+                <el-input readonly v-model="form.specification" placeholder="" style="width: 210px" />
+              </el-form-item>
+            </el-col>
+            <el-col :span="6">
+              <el-form-item label="图号:" prop="drawingNumber">
+                <el-input readonly v-model="form.drawingNumber" placeholder="" style="width: 210px" />
+              </el-form-item>
+            </el-col>
+            <el-col :span="6">
+              <el-form-item label="客户简称:" prop="customerName">
+                <el-input readonly v-model="form.customerName" placeholder="" style="width: 210px" />
+              </el-form-item>
+            </el-col>
+            <el-col :span="6">
+              <el-form-item label="包装箱号:" prop="packageCode">
+                <el-input readonly v-model="form.packageCode" placeholder="" style="width: 210px">
+                  <template #append>
+                    <el-button icon="Search" @click="showPackageChoiceDialog"></el-button>
+                  </template>
+                </el-input>
+              </el-form-item>
+            </el-col>
+            <el-col :span="6">
+              <el-form-item label="包装尺寸:" prop="packageStandard">
+                <el-input readonly v-model="form.packageStandard" placeholder="" style="width: 210px" />
+              </el-form-item>
+            </el-col>
+            <el-col :span="6">
+              <el-form-item label="包装形式码:" prop="packageTypeCode">
+                <el-input readonly v-model="form.packageTypeCode" placeholder="" style="width: 210px" />
+              </el-form-item>
+            </el-col>
+            <el-col :span="6">
+            </el-col>
+          </el-row>
         </el-form>
       </div>
     </div>
-
+    <DeptChoiceDialog ref="deptChoiceDialogRef" @handleSelectBelongingDept="handleDeptChoice" />
+    <PackageLineChoiceDialog ref="packageLineChoiceDialogRef" @singleChoice="handlePackageLineChoice" />
+    <PackageTypeChoiceDialog ref="packageTypeChoiceDialogRef" @singleChoice="handlePackageTypeChoice" />
   </el-drawer>
 </template>
 <script setup>
 import { ref } from "vue";
-import { getCertificate, generateQrCode, printPdf } from '@/api/business/certificate'
+import { getCertificate, generateQrCode, printPdf, newCertificate } from '@/api/business/certificate'
 import useUserStore from "@/store/modules/user";
 import { debounce } from "lodash";
+import DeptChoiceDialog from "./DeptChoiceDialog.vue";
+import PackageLineChoiceDialog from './PackageLineChoiceDialog.vue'
+import PackageTypeChoiceDialog from './PackageTypeChoiceDialog.vue'
 
 /** 父组件传参 */
 const props = defineProps({
@@ -49,6 +148,9 @@ const props = defineProps({
     default: () => { },
   },
 });
+const deptChoiceDialogRef = ref(null)
+const packageLineChoiceDialogRef = ref(null)
+const packageTypeChoiceDialogRef = ref(null)
 
 const { getList } = toRefs(props);
 const { proxy } = getCurrentInstance();
@@ -78,8 +180,9 @@ const { daywork, daywoerkItem, rules } = toRefs(data);
 /** 打开抽屉 */
 const open = (row) => {
   visible.value = true;
+  daywork.value = row
   if (row) {
-    getCertificate(row.id).then(res => {
+    newCertificate(row).then(res => {
       form.value = res.data;
     })
   }
@@ -88,14 +191,31 @@ const open = (row) => {
 /** 取消按钮 */
 const cancel = () => {
   visible.value = false;
-  isEdit.value = false;
   reset();
   getList.value();
 };
 
 function handleGenerate() {
+  // 生成判断
+  if (form.value.deptId == null) {
+    proxy.$modal.msgError("请先选择部门");
+    return
+  }
+  if (form.value.packageLineNo == null) {
+    proxy.$modal.msgError("请先选择包装线");
+    return
+  }
+  if (form.value.printPages == null || form.value.printPages == 0) {
+    proxy.$modal.msgError("请填写打印份数");
+    return
+  }
+  if (form.value.packageId == null) {
+    proxy.$modal.msgError("请先选择包装");
+    return
+  }
   generateQrCode(form.value).then(res => {
     if (res.code === 200) {
+      form.value = res.data
       proxy.$modal.msgSuccess("生成成功");
     } else {
       proxy.$modal.msgError("生成失败");
@@ -105,19 +225,7 @@ function handleGenerate() {
 
 /** 表单重置 */
 function reset() {
-  productList.value = [];
-  firstOrder.value = true;
-  batchNo.value = {};
-  processList.value = [];
-  lotList.value = [];
-  lotClick.value = false;
-  selectedProcess.value = null;
   daywork.value = {};
-  furnaceNumberInfoList.value = [];
-  dayworkItemList.value = [];
-  processAlias.value = [];
-  furnaceNoInfo.value = {};
-  carriers.value = [];
   queryParams.value = {
     pageNum: 1,
     pageSize: 10,
@@ -128,7 +236,72 @@ function reset() {
 }
 
 function handlePrint() {
-  printPdf(form.value)
+  // 生成判断
+  if (form.value.deptId == null) {
+    proxy.$modal.msgError("请先选择部门");
+    return
+  }
+  if (form.value.packageLineNo == null) {
+    proxy.$modal.msgError("请先选择包装线");
+    return
+  }
+  if (form.value.printPages == null || form.value.printPages == 0) {
+    proxy.$modal.msgError("请填写打印份数");
+    return
+  }
+  if (form.value.packageId == null) {
+    proxy.$modal.msgError("请先选择包装");
+    return
+  }
+  if (form.value.generateTime == null) {
+    proxy.$modal.msgError("请先生成二维码")
+    return
+  }
+  printPdf({ ...form.value, lots: null })
+}
+
+function showDeptChoiceDialog() {
+  deptChoiceDialogRef.value.open()
+}
+
+function handleDeptChoice(item) {
+  // console.log(item)
+  form.value.deptName = item.deptName
+  form.value.deptId = item.deptId
+}
+
+function showLineChoiceDialog() {
+  if (form.value.deptId) {
+    packageLineChoiceDialogRef.value.open({ deptId: form.value.deptId })
+  } else {
+    proxy.$modal.msgError("请先选择部门");
+  }
+}
+
+function handlePackageLineChoice(item) {
+  form.value.deptNo = item.deptNo
+  form.value.packageLineNo = item.packageLineNo
+  form.value.year = item.year
+  form.value.packageResourceGroupId = item.id
+  form.value.packageResourceGroupName = item.name
+}
+
+function handleLabelNumberChange(value) {
+  console.log(form.value.number)
+  console.log(Number.isNaN(form.value.number))
+  form.value.printPages = Number.isNaN(form.value.number) || Number.isNaN(form.value.labelNumber) ? 0 : Math.floor(form.value.number / form.value.labelNumber)
+}
+
+function showPackageChoiceDialog() {
+  packageTypeChoiceDialogRef.value.open({ productId: form.value.productId, companyId: form.value.companyId })
+}
+
+function handlePackageTypeChoice(item) {
+  console.log(item)
+  form.value.packageCode = item.packageCode
+  form.value.packageStandard = item.packageStandard
+  form.value.packageId = item.accessoriesId
+  form.value.packageTypeCode = item.packageTypeCode
 }
 
 /** 暴露给父组件的方法 */

+ 21 - 14
src/views/business/certificate/index.vue

@@ -5,6 +5,14 @@
       <!-- 搜索区域 -->
       <el-form class="list-search-container" :model="queryParams" ref="queryRef" :inline="true">
         <el-form-item class="section-title" label="合格证打印" />
+        <el-form-item label="批次号:">
+          <el-input placeholder="请输入批次号" v-model.trim="queryParams.lotCode" @keydown.enter.prevent clearable
+            style="width: 200px" />
+        </el-form-item>
+        <el-form-item label="产品描述:">
+          <el-input placeholder="请输入产品描述" v-model.trim="queryParams.productDescription" @keydown.enter.prevent clearable
+            style="width: 200px" />
+        </el-form-item>
         <el-form-item>
           <el-button type="primary" @click="handleQuery">搜索</el-button>
         </el-form-item>
@@ -18,14 +26,13 @@
             <el-table-column label="行号" type="index" width="80" align="center" />
             <el-table-column label="产品编码" prop="productCode" align="center" />
             <el-table-column label="产品描述" prop="productDescription" align="center" />
-            <el-table-column label="客户名称" prop="customerName" align="center" />
-            <el-table-column label="包装数量" prop="number" align="center" />
-            <el-table-column label="标签数量" prop="labelNumber" align="center" />
+            <el-table-column label="客户名称" prop="companyAlias" align="center" />
             <el-table-column label="批次号" prop="lotCode" align="center" />
-            <el-table-column label="打印次数" prop="printNumber" align="center" />
+            <el-table-column label="打印次数" prop="printCount" align="center" />
             <el-table-column label="操作">
               <template #default="scope">
                 <el-button type="primary" @click="handleInfo(scope.row)">详情</el-button>
+                <el-button type="primary" @click="handleHistory(scope.row)">历史记录</el-button>
               </template>
             </el-table-column>
           </el-table>
@@ -34,15 +41,17 @@
       <pagination v-show="total > 0" :total="total" v-model:page="queryParams.pageNum"
         v-model:limit="queryParams.pageSize" @pagination="getList" />
     </section>
-    <form-dialog ref="formRef" />
+    <form-dialog ref="formRef" :getList="handleQuery" />
+    <HistoryDialog ref="historyDialogRef" />
     <!-- 设备档案管理表单 -->
   </div>
 </template>
 
 <script setup name="Equipment">
-import { listCertificate } from '@/api/business/certificate'
+import { listCertificate, getDayworkList } from '@/api/business/certificate'
 import { getToken } from '@/utils/auth'
 import formDialog from '@/views/business/certificate/form'
+import HistoryDialog from './HistoryDialog.vue'
 const { proxy } = getCurrentInstance();
 
 const webHost = import.meta.env.VITE_APP_BASE_API
@@ -56,6 +65,7 @@ const sealItem = ref({})
 const certificateList = ref([]);
 const loading = ref(false);
 const formRef = ref(null)
+const historyDialogRef = ref(null)
 const webUrl = ref("")
 /** 设备档案 查询对象 */
 const queryParams = ref({
@@ -65,22 +75,15 @@ const queryParams = ref({
 const form = ref({})
 const formLoading = ref(false)
 
-/****************************************************  生命周期函数区  ****************************************************/
 onMounted(() => {
   getList();
 });
-/****************************************************  方法区  ****************************************************/
-
-
-
-
-/****************************** 设备档案 事件处理区 ******************************/
 
 
 /** 获取设备档案列表 */
 const getList = () => {
   form.value = {}
-  listCertificate(queryParams.value).then(res => {
+  getDayworkList(queryParams.value).then(res => {
     if (res.code == 200) {
       certificateList.value = res.rows;
       if (certificateList.value.length > 0) {
@@ -147,6 +150,10 @@ function handleInfo(row) {
   formRef.value.open(row)
 }
 
+function handleHistory(row) {
+  historyDialogRef.value.open({ dayworkId: row.id })
+}
+
 function handleQuery() {
   getList()
 }

+ 88 - 0
src/views/business/packageLine/DeptChoiceDialog.vue

@@ -0,0 +1,88 @@
+<template>
+  <el-dialog title="选择部门" v-model="visible" width="800px" append-to-body draggable>
+    <el-form ref="dialogForm" class="master-container" :model="queryParams" style="align-items: center;">
+      <div style="display: flex;">
+        <el-form-item label="部门编码:" prop="deptCode" label-width="100px" style="margin-top: 20px;">
+          <el-input v-model.trim="queryParams.deptCode" type="text" @keydown.enter.prevent style="width: 180px"
+            placeholder="请输入部门编码" :clearable="true" @keyup.enter="handleSearch" />
+        </el-form-item>
+        <el-form-item label="部门名称:" prop="deptName" label-width="100px" style="margin-top: 20px;">
+          <el-input v-model.trim="queryParams.deptName" type="text" @keydown.enter.prevent style="width: 180px"
+            placeholder="请输入部门名称" :clearable="true" @keyup.enter="handleSearch" />
+        </el-form-item>
+        <el-form-item label-width="20px" style="margin-top: 20px;">
+          <el-button type="info" icon="Search" @click="handleSearch">搜索</el-button>
+        </el-form-item>
+      </div>
+    </el-form>
+    <el-table v-loading="loading" row-key="deptId" :data="dataList" height="400px">
+      <el-table-column label="行号" type="index" width="50" align="center" />
+      <el-table-column label="部门编码" prop="deptCode" width="150" align="center" />
+      <el-table-column label="部门名称" prop="deptName" align="center" />
+      <el-table-column label="操作" width="60" align="center">
+        <template #default="scope">
+          <el-button link type="success" icon="Select" @click="handleSelectDept(scope.row)">选择</el-button>
+        </template>
+      </el-table-column>
+    </el-table>
+  </el-dialog>
+</template>
+<script setup>
+import { listDept } from '@/api/system/dept'
+const emit = defineEmits(['handleSelectDept', 'handleSelectBelongingDept'])
+const { proxy } = getCurrentInstance()
+
+const loading = ref(false)
+const visible = ref(false)
+const multiple = ref(false)
+
+const dataList = ref([])
+
+/** 设备档案 查询对象 */
+const queryParams = ref({
+  type: 0,
+  deptName: '',
+  deptCode: '',
+  isWorkSection: 1
+})
+/***********************  方法区  ****************************/
+/** 打开抽屉 */
+const open = (data) => {
+  visible.value = true
+  multiple.value = data
+  loadData()
+}
+
+const loadData = () => {
+  loading.value = true
+  listDept(queryParams.value).then((res) => {
+    dataList.value = res.rows
+    //dataTotal.value = res.total
+    loading.value = false
+  })
+}
+
+const handleRefreshDetail = () => {
+  loadData()
+}
+
+const handleSelectDept = (data) => {
+  if (multiple.value) {
+    emit('handleSelectDept', data)
+  }
+  else {
+    emit('handleSelectBelongingDept', data)
+  }
+
+  proxy.$refs.dialogForm.resetFields()
+  visible.value = false
+}
+const handleSearch = () => {
+  loadData()
+}
+
+/** 暴露给父组件的方法 */
+defineExpose({
+  open
+})
+</script>

+ 205 - 0
src/views/business/packageLine/EmployeeChoiceDialog.vue

@@ -0,0 +1,205 @@
+<template>
+  <el-dialog title="员工选择" v-model="visible" :width="width" @close="close" append-to-body draggable>
+    <el-form ref="dialogForm" class="list-search-container" :inline="true" :model="queryParams">
+      <el-form-item label="员工编码:" prop="userName">
+        <el-input v-model.trim="queryParams.userName" type="text" placeholder="请输入员工编码" @keydown.enter.prevent
+          @keyup.enter="handleSearch" style="width: 180px" clearable />
+      </el-form-item>
+      <el-form-item label="员工姓名:" prop="nickName">
+        <el-input v-model.trim="queryParams.nickName" type="text" placeholder="请输入员工姓名" @keydown.enter.prevent
+          @keyup.enter="handleSearch" style="width: 180px" clearable />
+      </el-form-item>
+      <el-form-item>
+        <el-button type="info" icon="Search" @click="handleSearch">搜索</el-button>
+      </el-form-item>
+    </el-form>
+    <el-table ref="dialogTable" :data="list" :row-key="getRowKey" v-loading="personLoading" height="440px"
+      @selection-change="handleSelectionChange" align="center">
+      <el-table-column v-if="multiple" type="selection" width="40" align="center" :reserve-selection="true"
+        :selectable="handleSelected" />
+      <el-table-column type="index" label="行号" width="50" align="center" />
+      <el-table-column label="员工编码" prop="userName" width="100" align="center" />
+      <el-table-column label="员工姓名" prop="nickName" width="100" align="center" />
+      <el-table-column label="手机号码" prop="phoneNumber" width="150" align="center" />
+      <el-table-column label="性别" prop="sex" width="60" align="center" />
+      <el-table-column label="使用单位" prop="usageCompanyName" width="220" align="center" />
+      <el-table-column label="备注" prop="remark" align="center" />
+      <el-table-column v-if="!multiple" label="操作" width="50" align="center">
+        <template #default="scope">
+          <el-button type="success" icon="finished" circle @click="handleSingleSelected(scope.row)" />
+        </template>
+      </el-table-column>
+    </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 v-if="multiple" type="primary" :disabled="selections.length === 0" icon="Check"
+          @click="handleMultipleSelected">
+          确定
+        </el-button>
+        <el-button icon="Close" @click="close">取 消</el-button>
+      </div>
+    </template>
+  </el-dialog>
+</template>
+<script setup>
+import { ref } from '@vue/reactivity'
+import { listEmployee } from '@/api/system/user'
+import { listUser, listByLikeNickNameOrUserName, getUsersByDeptId, getUsersItemByDeptId } from '@/api/system/user'
+
+
+const { proxy } = getCurrentInstance()
+const total = ref(0)
+const props = defineProps({
+  width: {
+    type: String,
+    default: '1000px'
+  },
+  multiple: {
+    type: Boolean,
+    default: false
+  },
+  selected: {
+    type: Array,
+    defalut: []
+  },
+  singleSelected: {
+    type: Function,
+    default: null
+  },
+  multipleSelected: {
+    type: Function,
+    default: null
+  }
+})
+const { singleSelected, multipleSelected, selected } = toRefs(props)
+const list = ref([])
+const userIds = ref([])
+const personLoading = ref(false)
+const visible = ref(false)
+const identifying = ref(false)
+const data = reactive({
+  queryParams: {
+    nickName: '',
+    userName: '',
+    pageSize: 10,
+    pageNum: 1
+  }
+})
+const selections = ref([])
+const { queryParams } = toRefs(data)
+/**
+ * 对话框打开 事件
+ */
+function open() {
+  //部门管理新增
+  visible.value = true
+  getList()
+}
+/** 获取行 id */
+function getRowKey(row) {
+  return row.userId
+}
+
+/**
+ * 对话框关闭 事件
+ */
+function close() {
+  proxy.$refs.dialogForm.resetFields()
+  proxy.$refs.dialogTable.clearSelection()
+  queryParams.value.pageNum = 1
+  visible.value = false
+}
+
+/**
+ * 加载数据
+ */
+function getList() {
+  personLoading.value = true
+  console.log(identifying.value)
+  //如果identifying为true,则是部门管理添加员工弹窗数据;如果为false,则是在资源分配添加员工弹窗
+  if (identifying.value) {
+    listByLikeNickNameOrUserName(queryParams.value).then(response => {
+      if (response.code == 200) {
+        list.value = response.rows
+        total.value = response.total
+        personLoading.value = false
+      }
+    })
+  } else {
+    listUser(queryParams.value).then((response) => {
+      if (response.code == 200) {
+        list.value = response.rows
+        total.value = response.total
+        personLoading.value = false
+      }
+    })
+  }
+}
+
+/**
+ * 列表checkbox列选择 事件
+ */
+function handleSelectionChange(selection) {
+  selections.value = selection
+}
+
+function handleSelected(row) {
+  return !userIds.value.includes(row.userName)
+}
+
+/**  搜索 事件 */
+function handleSearch(type) {
+  if (type && type === 'clear') {
+    queryParams.value = {
+      subject: '',
+      nickName: '',
+      userName: '',
+      total: 0,
+      pageSize: 10,
+      pageNum: 1
+    }
+  }
+  else {
+    if (identifying.value) {
+      listByLikeNickNameOrUserName(queryParams.value).then(response => {
+        if (response.code == 200) {
+          list.value = response.rows
+          total.value = response.total
+          personLoading.value = false
+        }
+      })
+    } else {
+      listUser(queryParams.value).then((response) => {
+        if (response.code == 200) {
+          list.value = response.rows
+          total.value = response.total
+          personLoading.value = false
+        }
+      })
+    }
+  }
+
+}
+
+/** 单选事件 */
+function handleSingleSelected(row) {
+  if (singleSelected.value) {
+    singleSelected.value(row)
+  }
+  close()
+}
+
+/** 多选事件 */
+function handleMultipleSelected() {
+  if (multipleSelected.value) {
+    multipleSelected.value(selections.value)
+  }
+  close()
+}
+
+defineExpose({
+  open
+})
+</script>

+ 2 - 0
src/views/business/packageLine/form.vue

@@ -0,0 +1,2 @@
+<template></template>
+<script setup></script>

+ 356 - 0
src/views/business/packageLine/index.vue

@@ -0,0 +1,356 @@
+<template>
+  <div class="page-container row-container">
+    <!-- 左侧区域 -->
+    <section class="list-part-container column-container" style="flex: 3">
+      <!-- 搜索区域 -->
+      <el-form class="list-search-container" :inline="true" style="display: flex">
+        <el-form-item class="section-title" label="包装线列表" />
+        <el-button type="primary" icon="Plus" :disabled="packageResourceGroups.length === 0" @click="handleAdd()"
+          v-hasPermi="['business:packageResourceGroup:add']">新增</el-button>
+        <el-button type="info" icon="Search" @click="getList()"
+          v-hasPermi="['business:packageResourceGroup:list']">刷新</el-button>
+      </el-form>
+      <!-- 列表区 -->
+      <div class="el-table-container">
+        <div class="el-table-inner-container">
+          <el-table ref="workSectionTable" v-loading="workSectionLoading" :data="packageResourceGroups" row-key="id"
+            height="100%" highlight-current-row @current-change="handleWorkSectionChange">
+            <el-table-column label="行号" type="index" width="50" align="center" />
+            <el-table-column label="工段编码" prop="deptCode" width="120" align="center">
+              <template #default="scope">
+                <el-input v-if="scope.row.editStatus" v-model="scope.row.deptCode" readonly>
+                  <template #append>
+                    <el-button type="primary" icon="Search" @click="showDeptChoiceDialog(scope.row)"></el-button>
+                  </template>
+                </el-input>
+              </template>
+            </el-table-column>
+            <el-table-column label="工段名称" prop="deptName" align="center" />
+            <el-table-column label="工段号" prop="deptNo" width="80" align="center">
+              <template #default="scope">
+                <el-input v-if="scope.row.editStatus" v-model="scope.row.deptNo" maxlength="1" />
+              </template>
+            </el-table-column>
+            <el-table-column label="包装线号" prop="packageLineNo" align="center">
+              <template #default="scope">
+                <el-input v-if="scope.row.editStatus" v-model="scope.row.packageLineNo" maxlength="1" />
+              </template>
+            </el-table-column>
+            <el-table-column label="包装线名" prop="name" align="center">
+              <template #default="scope">
+                <el-input v-if="scope.row.editStatus" v-model="scope.row.name" />
+              </template>
+            </el-table-column>
+            <el-table-column label="年" prop="year" align="center">
+              <template #default="scope">
+                <el-input v-if="scope.row.editStatus" v-model="scope.row.year" maxLength="2" />
+              </template>
+            </el-table-column>
+            <el-table-column label="当前编号" prop="code" align="center">
+              <template #default="scope">
+                <el-input v-if="scope.row.editStatus" v-model="scope.row.code" />
+              </template>
+            </el-table-column>
+            <el-table-column label="操作" align="center" width="220">
+              <template #default="scope">
+                <template v-if="!scope.row.editStatus">
+                  <el-button type="primary" link icon="Edit" @click="handleShowProcessFormDialog(scope.row)"
+                    v-hasPermi="['business:packageResourceGroup:edit']">编辑</el-button>
+                  <el-button type="danger" link icon="Delete" @click="handleDeleteGroup(scope.row, scope.$index)"
+                    v-hasPermi="['business:packageResourceGroup:remove']">删除</el-button>
+                </template>
+                <template v-else>
+                  <el-button type="success" link icon="Finished" @click="handleGroupSave(scope.row)"
+                    v-hasPermi="['business:packageResourceGroup:edit']">保存</el-button>
+                  <el-button type="info" link icon="Close" @click="handleGroupCancel(scope.row, scope.$index)"
+                    v-hasPermi="['business:packageResourceGroup:remove']">取消</el-button>
+
+                </template>
+              </template>
+            </el-table-column>
+          </el-table>
+        </div>
+      </div>
+    </section>
+    <!-- 右侧区域 -->
+    <section class="list-part-container row-container" style="flex: 3">
+      <el-form class="list-search-container" :inline="true">
+        <el-form-item class="section-title" label="包装线员工" />
+        <el-form-item>
+          <el-button type="primary" icon="Plus" :disabled="packageResourceGroups.length === 0"
+            @click="handleShowEmployeeDialog()" v-hasPermi="['business:packageResourceGroup:add']">新增</el-button>
+          <el-button type="danger" icon="Delete" @click="handledelDeptProcess" :disabled="deptProcessIds.length === 0"
+            v-hasPermi="['business:packageResourceGroup:remove']">
+            删除
+          </el-button>
+        </el-form-item>
+        <el-form-item style="margin: 0;">
+          <el-button type="info" icon="Search" :disabled="packageResourceGroups.length === 0"
+            @click="handleQueryProcess">刷新</el-button>
+        </el-form-item>
+      </el-form>
+      <div class="el-table-container">
+        <div class="el-table-inner-container">
+          <el-table v-loading="deptProcessLoading" :data="userList" row-key="id" height="100%"
+            @selection-change="deptProcessSelectionChange">
+            <el-table-column type="selection" width="40" align="center" :reserve-selection="true" />
+            <el-table-column label="行号" type="index" width="50" align="center" />
+            <el-table-column label="员工号" prop="userName" align="center" />
+            <el-table-column label="员工姓名" prop="nickName" align="center" />
+          </el-table>
+        </div>
+      </div>
+      <pagination v-show="deptProcessTotal > 0" :total="deptProcessTotal" v-model:page="queryDeptProcessParams.pageNum"
+        v-model:limit="queryDeptProcessParams.pageSize" @pagination="getDetails"
+        layout="total, sizes, prev, next, jumper" />
+    </section>
+    <EmployeeChoiceDialog ref="employeeChoiceDialogRef" :multiple="true"
+      :multipleSelected="handleEmployeeMultipleSelected" />
+    <DeptChoiceDialog ref="deptChoiceDialogRef" @handleSelectBelongingDept="handleSelectBelongingDept" />
+  </div>
+</template>
+
+<script setup>
+import {
+  listResourceGroup,
+  delResourceGroup
+} from "@/api/business/resourceGroup";
+import { listGroup, addGroup, updateGroup, delGroup, listDetails, addDetails } from "@/api/business/packageResourceGroup";
+import {
+  listDeptProcess,
+  addDeptProcess,
+  delDeptProcess,
+} from "@/api/business/deptProcess";
+import resourceGroupForm from "./form";
+import useUserStore from '@/store/modules/user'
+import EmployeeChoiceDialog from './EmployeeChoiceDialog.vue'
+import DeptChoiceDialog from './DeptChoiceDialog.vue'
+const { proxy } = getCurrentInstance();
+/** 查询对象 */
+const data = reactive({
+  form: {},
+  queryDeptParams: {
+    deptName: "",
+    deptCode: "",
+  },
+  queryParams: {
+    pageNum: 1,
+    pageSize: 10,
+    code: "",
+  },
+  queryResourceGroupDetailParams: {
+    code: "",
+    productionResourceGroupId: "",
+  },
+  queryDeptProcessParams: {
+    pageNum: 1,
+    pageSize: 10,
+  },
+});
+
+const employeeChoiceDialogRef = ref(null)
+const deptChoiceDialogRef = ref(null)
+
+const {
+  queryParams,
+  queryDeptProcessParams,
+  queryDeptParams,
+  queryResourceGroupDetailParams,
+} = toRefs(data);
+/** 页面变量 */
+/**工段 */
+const packageResourceGroups = ref([]);
+const workSectionLoading = ref(false);
+const currentGroup = ref({});
+const groupList = ref([]);
+const groupLoading = ref(false);
+/**资源组明细 */
+const groupDetailLoading = ref(false);
+const groupDetailList = ref([]);
+/**工序 */
+const userList = ref([]);
+const deptProcessLoading = ref(false);
+const deptProcessTotal = ref(0);
+const deptProcessIds = ref([]);
+const single = ref(true);
+
+/****************************  工段方法区  ****************************/
+
+/** 获取工段列表 */
+function getList() {
+  workSectionLoading.value = true;
+  //如果当前登录人不是管理员传true;否则传false
+  queryDeptParams.value.getType = true
+  listGroup(queryDeptParams.value).then((res) => {
+    packageResourceGroups.value = res.rows.map(e => ({ ...e, editStatus: false }));
+    if (packageResourceGroups.value.length > 0) {
+      proxy.$refs.workSectionTable.setCurrentRow(packageResourceGroups.value[0]);
+    } else {
+      packageResourceGroups.value = [];
+    }
+    workSectionLoading.value = false;
+  });
+}
+/**工段点击事件 */
+const handleWorkSectionChange = (row) => {
+  queryParams.value.code = "";
+  queryResourceGroupDetailParams.value.commonCode = "";
+  queryDeptProcessParams.value.processAlias = "";
+  if (row) {
+    currentGroup.value = row;
+    queryParams.value.deptId = row.id;
+    getDetails();
+  }
+};
+
+/*******************************工序方法区*********************************** */
+/**获取工序 */
+const getDetails = () => {
+  deptProcessLoading.value = true;
+  queryDeptProcessParams.value.packageResourceGroupId = currentGroup.value.id;
+  listDetails(queryDeptProcessParams.value).then((res) => {
+    userList.value = res.rows;
+    deptProcessLoading.value = false;
+    deptProcessTotal.value = res.total;
+  });
+};
+/**工序搜索框 */
+function handleQueryProcess() {
+  getDetails();
+}
+/** 打开工序对话框事件 */
+function handleShowProcessFormDialog(row) {
+  row.editStatus = !row.editStatus
+}
+
+
+//工段工序多选框选中数据
+function deptProcessSelectionChange(selection) {
+  deptProcessIds.value = selection.map((item) => item.id);
+  single.value = selection.length != 1;
+}
+
+/**删除工序工段表数据 */
+function handledelDeptProcess() {
+  proxy.$modal
+    .confirm("是否确认删除选中的数据项?")
+    .then(function () {
+      return delDeptProcess(deptProcessIds.value);
+    })
+    .then(() => {
+      getDetails();
+      proxy.$modal.msgSuccess("删除成功!");
+    })
+    .catch((e) => {
+      proxy.$modal.msg("操作失败!");
+    });
+}
+
+function handleDeleteGroup(row, index) {
+  proxy.$modal
+    .confirm("是否确认删除选中的数据项?")
+    .then(function () {
+      if (row != null && row.id != null)
+        return delGroup(row.id).then(res => {
+          getList()
+        });
+      else
+        return packageResourceGroups.splice(index, 1)
+    })
+    .then(() => {
+      getDetails();
+      proxy.$modal.msgSuccess("删除成功!");
+    })
+    .catch((e) => {
+      proxy.$modal.msg("操作失败!");
+    });
+
+}
+
+function handleShowEmployeeDialog() {
+  employeeChoiceDialogRef.value.open()
+}
+
+function showDeptChoiceDialog(row) {
+  currentGroup.value = row
+  deptChoiceDialogRef.value.open()
+}
+
+function handleAdd() {
+  packageResourceGroups.value.push({ editStatus: true, year: proxy.moment().format('YY'), code: '000000' })
+}
+
+function handleSelectBelongingDept(info) {
+  currentGroup.value.deptId = info.deptId
+  currentGroup.value.deptName = info.deptName
+  currentGroup.value.deptCode = info.deptCode
+}
+
+function handleGroupCancel(row) {
+  row.editStatus = false
+}
+
+function handleGroupSave(row) {
+  // 判断工段包装线名都不能为空
+  if (row.name == null || row.name == '') {
+    proxy.$modal.msgError("包装线名不能为空")
+    return
+  }
+  if (row.deptId == null) {
+    proxy.$modal.msgError("工段不能为空")
+    return
+  }
+  if (row.year == null || row.year == '') {
+    proxy.$modal.msgError("年份不能为空")
+    return
+  }
+  if (row.deptNo == null || row.deptNo == '') {
+    proxy.$modal.msgError("工段号不能为空")
+    return
+  }
+  if (row.packageLineNo == null || row.packageLineNo == '') {
+    proxy.$modal.msgError("包装线号不能为空")
+    return
+  }
+  if (row.code == null || row.code == '') {
+    proxy.$modal.msgError("当前编码不能为空")
+    return
+  }
+  // 判断年是否是2位数字
+  if (!isNaN(Number(row.year)) && row.year.length > 2) {
+    proxy.$modal.msgError("年份不能为非数字或大于2位")
+    return
+  }
+  // 判断code只能是小于6位数字
+  if (!isNaN(Number(row.code)) && row.code.length > 6) {
+    proxy.$modal.msgError("当前编码不能为非数字或大于6位")
+    return
+  }
+
+  if (row.id == null) {
+    addGroup(row).then(() => {
+      getList()
+    })
+  } else {
+    updateGroup(row).then(() => {
+      getList()
+    })
+  }
+}
+
+function handleEmployeeMultipleSelected(infos) {
+  const data = {
+    ...currentGroup.value,
+    employees: infos
+  }
+  addDetails(data).then(res => {
+    if (res.code == 200) {
+      getDetails()
+    }
+  })
+}
+
+onMounted(() => {
+  getList();
+});
+</script>