guoyujia 1 tahun lalu
induk
melakukan
cd0d030ed6

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

@@ -0,0 +1,45 @@
+import request from '@/utils/request'
+const baseUrl = import.meta.env.VITE_APP_BASE_API
+
+// 查询车间管理列表
+export function listWorkshop(query) {
+  return request({
+    url:baseUrl + '/business/workshop/list',
+    method: 'get',
+    params: query
+  })
+}
+
+// 查询车间管理详细
+export function getWorkshop(id) {
+  return request({
+    url:baseUrl + '/business/workshop/' + id,
+    method: 'get'
+  })
+}
+
+// 新增车间管理
+export function addWorkshop(data) {
+  return request({
+    url:baseUrl + '/business/workshop',
+    method: 'post',
+    data: data
+  })
+}
+
+// 修改车间管理
+export function updateWorkshop(data) {
+  return request({
+    url:baseUrl + '/business/workshop',
+    method: 'put',
+    data: data
+  })
+}
+
+// 删除车间管理
+export function delWorkshop(id) {
+  return request({
+    url:baseUrl + '/business/workshop/' + id,
+    method: 'delete'
+  })
+}

+ 22 - 0
src/api/system/dept.js

@@ -18,6 +18,14 @@ export function getDeptList(query) {
   })
 }
 
+export function getDeptInfo(query) {
+  return request({
+    url: baseUrl + '/system/dept/getDeptInfo',
+    method: 'get',
+    params: query
+  })
+}
+
 // 针对设备设置使用部门,提供部门列表
 export function listDeptForEquipment(data) {
   return request({
@@ -26,6 +34,20 @@ export function listDeptForEquipment(data) {
     data: data
   })
 }
+export function updateDeptWorkshop(data) {
+  return request({
+    url: baseUrl + '/system/dept/updateDeptWorkshop',
+    method: 'put',
+    data: data
+  })
+}
+export function updateDeptWorkshopByDeptId(data) {
+  return request({
+    url: baseUrl + '/system/dept/updateDeptWorkshopByDeptId',
+    method: 'put',
+    data: data
+  })
+}
 // 查询部门列表(排除节点)
 export function listDeptExcludeChild(deptId) {
   return request({

+ 361 - 176
src/views/business/daywork/index.vue

@@ -3,314 +3,499 @@
     <!-- 左侧区域 -->
     <section class="list-part-container" style="flex: 3">
       <!-- 搜索区 -->
-      <el-form class="list-search-container" :model="queryDayworkParams" ref="queryRef" :inline="true" style="margin-right: 0px;" >
+      <el-form
+        class="list-search-container"
+        :model="queryDayworkParams"
+        ref="queryRef"
+        :inline="true"
+        style="margin-right: 0px"
+      >
         <el-form-item class="section-title" label="生产批次" />
         <el-form-item label="生产计划单号:">
-          <el-input placeholder="请输入生产计划单号/批次号" v-model.trim="queryDayworkParams.productionPlanNo" @keyup.enter="handleQuery" @keydown.enter.prevent clearable style="width: 200px" />
+          <el-input
+            placeholder="请输入生产计划单号/批次号"
+            v-model.trim="queryDayworkParams.productionPlanNo"
+            @keyup.enter="handleQuery"
+            @keydown.enter.prevent
+            clearable
+            style="width: 200px"
+          />
         </el-form-item>
         <!-- <el-form-item label="批次号:">
           <el-input placeholder="请输入批次号" v-model.trim="queryDayworkParams.lotCode" @keyup.enter="handleQuery" @keydown.enter.prevent clearable style="width: 120px" />
         </el-form-item> -->
         <el-form-item label="产品描述:">
-          <el-input placeholder="请输入产品描述" v-model.trim="queryDayworkParams.productDescription" @keyup.enter="handleQuery" @keydown.enter.prevent clearable style="width: 120px" />
+          <el-input
+            placeholder="请输入产品描述"
+            v-model.trim="queryDayworkParams.productDescription"
+            @keyup.enter="handleQuery"
+            @keydown.enter.prevent
+            clearable
+            style="width: 120px"
+          />
         </el-form-item>
         <el-form-item class="section-title" label="请选择当前工段:">
-          <el-select-v2 v-model="queryDayworkParams.deptId" filterable :options="deptList" placeholder="请选择工段" style="width: 140px" @change="handleDeptChange" />
+          <el-select-v2
+            v-model="queryDayworkParams.deptId"
+            :options="deptList"
+            placeholder="请选择工段"
+            style="width: 140px"
+            @change="handleDeptChange"
+          />
         </el-form-item>
-        <el-form-item style="margin-left: 0;" >
-          <el-button type="info" icon="Search" @click="handleQuery">搜索 </el-button>
+        <el-form-item style="margin-left: 0">
+          <el-button type="info" icon="Search" @click="handleQuery"
+            >搜索
+          </el-button>
         </el-form-item>
       </el-form>
       <div class="el-table-container">
         <div class="el-table-inner-container">
-          <el-table ref="dayworkTable" :data="dayworkList" v-loading="dayworkLoading" highlight-current-row height="100%" @current-change="handleDayworkCurrentChange">
-            <el-table-column label="客户简称" prop="companyAlias" width="120" align="center" />
-            <el-table-column label="生产计划单号" prop="productionPlanNo" width="100" align="center" />
-            <el-table-column label="批次号" prop="lotCode" width="120" align="center" />
-            <el-table-column label="产品描述" prop="productDescription" align="center" />
-            <el-table-column label="图纸版本" prop="technologyVersion" width="60" align="center" />
-            <el-table-column label="投产量" prop="productionQuantity" width="60" align="center" />
-            <el-table-column label="炉号" prop="furnaceNumber" width="60" align="center" />
-            <el-table-column label="下达日期" prop="createTime" width="100" align="center">
+          <el-table
+            ref="dayworkTable"
+            :data="dayworkList"
+            v-loading="dayworkLoading"
+            highlight-current-row
+            height="100%"
+            @current-change="handleDayworkCurrentChange"
+          >
+            <el-table-column
+              label="客户简称"
+              prop="companyAlias"
+              width="120"
+              align="center"
+            />
+            <el-table-column
+              label="生产计划单号"
+              prop="productionPlanNo"
+              width="100"
+              align="center"
+            />
+            <el-table-column
+              label="批次号"
+              prop="lotCode"
+              width="120"
+              align="center"
+            />
+            <el-table-column
+              label="产品描述"
+              prop="productDescription"
+              align="center"
+            />
+            <el-table-column
+              label="图纸版本"
+              prop="technologyVersion"
+              width="60"
+              align="center"
+            />
+            <el-table-column
+              label="投产量"
+              prop="productionQuantity"
+              width="60"
+              align="center"
+            />
+            <el-table-column
+              label="炉号"
+              prop="furnaceNumber"
+              width="60"
+              align="center"
+            />
+            <el-table-column
+              label="下达日期"
+              prop="createTime"
+              width="100"
+              align="center"
+            >
               <template #default="scope">
-                <span>{{ proxy.moment(scope.row.createTime).format('YYYY-MM-DD') }}</span>
+                <span>{{
+                  proxy.moment(scope.row.createTime).format("YYYY-MM-DD")
+                }}</span>
               </template>
             </el-table-column>
-            <el-table-column label="报工总时长" prop="totalWorkingHours" width="150" align="center" />
+            <el-table-column
+              label="报工总时长"
+              prop="totalWorkingHours"
+              width="150"
+              align="center"
+            />
           </el-table>
         </div>
       </div>
       <!-- 分页 -->
-      <pagination v-show="total > 0" :total="total" v-model:page="queryDayworkParams.pageNum" v-model:limit="queryDayworkParams.pageSize" @pagination="getDayworks" />
+      <pagination
+        v-show="total > 0"
+        :total="total"
+        v-model:page="queryDayworkParams.pageNum"
+        v-model:limit="queryDayworkParams.pageSize"
+        @pagination="getDayworks"
+      />
     </section>
     <!-- 右侧区域 -->
     <section class="list-part-container" style="flex: 2">
       <el-form class="list-search-container" :inline="true">
         <el-form-item class="section-title" label="报工信息" />
-        <el-form-item class="section-title" label="请选择工序:" prop="technologicalProcessDetailId">
-          <el-select-v2 v-model="queryItemParams.technologicalProcessDetailId" clearable :options="processList" placeholder="请选择工序" style="width: 100%" @change="handleProcessChange" />
+        <el-form-item
+          class="section-title"
+          label="请选择工序:"
+          prop="technologicalProcessDetailId"
+        >
+          <el-select-v2
+            v-model="queryItemParams.technologicalProcessDetailId"
+            clearable
+            :options="processList"
+            placeholder="请选择工序"
+            style="width: 100%"
+            @change="handleProcessChange"
+          />
         </el-form-item>
       </el-form>
 
       <div class="el-table-container">
         <div class="el-table-inner-container">
-          <el-table :data="dayworkItemList" v-loading="dayworkItemLoading" height="100%">
-            <el-table-column label="操作者" prop="nickName" width="60" align="center" />
-            <el-table-column label="工序名称" prop="processAlias" align="center" />
-            <el-table-column label="投产量" prop="prodNum" width="60" align="center" />
-            <el-table-column label="合格数" prop="qualifiedNum" width="60" align="center" />
-            <el-table-column label="废品数" prop="rejectNum" width="60" align="center" />
-            <el-table-column label="开始时间" prop="startTime" width="160" align="center" />
-            <el-table-column label="结束时间" prop="endTime" width="160" align="center" />
-            <el-table-column label="总工时" prop="workingHours" width="160" align="center" />
-            <el-table-column label="生产状态" prop="status" width="100" align="center">
+          <el-table
+            :data="dayworkItemList"
+            v-loading="dayworkItemLoading"
+            height="100%"
+          >
+            <el-table-column
+              label="操作者"
+              prop="nickName"
+              width="60"
+              align="center"
+            />
+            <el-table-column
+              label="工序名称"
+              prop="processAlias"
+              align="center"
+            />
+            <el-table-column
+              label="投产量"
+              prop="prodNum"
+              width="60"
+              align="center"
+            />
+            <el-table-column
+              label="合格数"
+              prop="qualifiedNum"
+              width="60"
+              align="center"
+            />
+            <el-table-column
+              label="废品数"
+              prop="rejectNum"
+              width="60"
+              align="center"
+            />
+            <el-table-column
+              label="开始时间"
+              prop="startTime"
+              width="160"
+              align="center"
+            />
+            <el-table-column
+              label="结束时间"
+              prop="endTime"
+              width="160"
+              align="center"
+            />
+            <el-table-column
+              label="总工时"
+              prop="workingHours"
+              width="160"
+              align="center"
+            />
+            <el-table-column
+              label="生产状态"
+              prop="status"
+              width="100"
+              align="center"
+            >
               <template #default="scope">
                 <dict-tag :options="daywork_status" :value="scope.row.status" />
               </template>
             </el-table-column>
-            <el-table-column fixed="right" label="操作" align="center" width="70px">
+            <el-table-column
+              fixed="right"
+              label="操作"
+              align="center"
+              width="70px"
+            >
               <template #default="scope">
-                <el-button v-if="(scope.row.status ==2 ||scope.row.status == 3) &&scope.row.flag"  link type="warning" icon="Edit" @click="handleUpdateDayworkItem(scope.row)" >编辑</el-button>
-                <el-button v-else-if="(scope.row.status !=2 ||scope.row.status != 3) || scope.row.flag"  link type="primary" icon="View" @click="handleCheckDayworkItem(scope.row)" >查看</el-button>
+                <el-button
+                  v-if="
+                    (scope.row.status == 2 || scope.row.status == 3) &&
+                    scope.row.flag
+                  "
+                  link
+                  type="warning"
+                  icon="Edit"
+                  @click="handleUpdateDayworkItem(scope.row)"
+                  >编辑</el-button
+                >
+                <el-button
+                  v-else-if="
+                    scope.row.status != 2 ||
+                    scope.row.status != 3 ||
+                    scope.row.flag
+                  "
+                  link
+                  type="primary"
+                  icon="View"
+                  @click="handleCheckDayworkItem(scope.row)"
+                  >查看</el-button
+                >
               </template>
             </el-table-column>
           </el-table>
         </div>
       </div>
       <!-- 分页 -->
-      <pagination v-show="itemTotal > 0" :total="itemTotal" v-model:page="queryItemParams.pageNum" v-model:limit="queryItemParams.pageSize" @pagination="getDayworkItems" />
+      <pagination
+        v-show="itemTotal > 0"
+        :total="itemTotal"
+        v-model:page="queryItemParams.pageNum"
+        v-model:limit="queryItemParams.pageSize"
+        @pagination="getDayworkItems"
+      />
     </section>
-    <dayworkItem-form ref="dayworkItemRef" @handleSaveSuccess = "handleGetDayworkItems" />
+    <dayworkItem-form
+      ref="dayworkItemRef"
+      @handleSaveSuccess="handleGetDayworkItems"
+    />
   </div>
 </template>
 
 <script setup>
-import { listDaywork, listDayworkItem, getProcessList } from '@/api/business/daywork.js'
-import { listDeptProcess} from '@/api/business/deptProcess'
-import { getDept } from '@/api/business/planDetailSubDetail.js'
-import { toHHmmss } from '@/components/Time/time.js'
-import dayworkItemForm from './form'
-import { get } from '@vueuse/core'
-const { proxy } = getCurrentInstance()
+import {
+  listDaywork,
+  listDayworkItem,
+  getProcessList,
+} from "@/api/business/daywork.js";
+import { listDeptProcess } from "@/api/business/deptProcess";
+import { getDept } from "@/api/business/planDetailSubDetail.js";
+import dayworkItemForm from "./form";
+import { get } from "@vueuse/core";
+const { proxy } = getCurrentInstance();
 
 /** 字典 */
-const { daywork_status } = proxy.useDict('daywork_status')
+const { daywork_status } = proxy.useDict("daywork_status");
 
 /** daywork 列表 */
-const dayworkList = ref([])
-const dayworkItemList = ref([])
-const dayworkTable = ref(null)
-const deptList = ref([])
+const dayworkList = ref([]);
+const dayworkItemList = ref([]);
+const dayworkTable = ref(null);
+const deptList = ref([]);
 
 /** daywork 批次 */
-const currentDaywork = ref({})
-const dayworkLoading = ref(false)
-const loading = ref(false)
-const dayworkItemLoading = ref(false)
-const processList = ref([])
-const total = ref(0)
-const itemTotal = ref(0)
+const currentDaywork = ref({});
+const dayworkLoading = ref(false);
+const loading = ref(false);
+const dayworkItemLoading = ref(false);
+const processList = ref([]);
+const total = ref(0);
+const itemTotal = ref(0);
 
 /** 查询对象 */
 const queryDayworkParams = ref({
-  productDescription: '',
-  deptId:'',
-  lotCode: '',
+  productDescription: "",
+  deptId: "",
+  lotCode: "",
   pageNum: 1,
-  pageSize: 10
-})
+  pageSize: 10,
+});
 const queryItemParams = ref({
-  dayworkId: '0',
+  dayworkId: "0",
   pageNum: 1,
   pageSize: 10,
-  technologicalProcessDetailId: null
-})
+  technologicalProcessDetailId: null,
+});
 
 /***********************  方法区  ****************************/
 
 function getList() {
-  loading.value = true
+  loading.value = true;
   getDept().then((response) => {
-    deptList.value = response.data  
+    deptList.value = response.data;
     if (deptList.value.length > 0) {
-      queryDayworkParams.value.deptId = deptList.value[0].value
-      getDayworks()
-    }
-    else{
-      dayworkList.value = []
+      queryDayworkParams.value.deptId = deptList.value[0].value;
+      getDayworks();
+    } else {
+      dayworkList.value = [];
     }
-  })
-  loading.value = false
+  });
+  loading.value = false;
 }
 /** 查询计划明细 */
 function getDayworks() {
-  dayworkLoading.value = true
+  dayworkLoading.value = true;
   listDaywork(queryDayworkParams.value).then((res) => {
-    dayworkList.value = res.rows
+    dayworkList.value = res.rows;
     for (var i = 0; i < dayworkList.value.length; i++) {
-      let timeStamp = dayworkList.value[i].totalWorkingHours
+      let timeStamp = dayworkList.value[i].totalWorkingHours;
       let seconds = Math.floor((timeStamp / 1000) % 60);
-      let minutes = Math.floor(
-      (timeStamp / (1000 * 60)) % 60
-    );
-    let hours = Math.floor(timeStamp / (1000 * 60 * 60));
-    let time = `${hours}小时${minutes}分钟${seconds}秒`;
-      dayworkList.value[i].totalWorkingHours = time
+      let minutes = Math.floor((timeStamp / (1000 * 60)) % 60);
+      let hours = Math.floor(timeStamp / (1000 * 60 * 60));
+      let time = `${hours}小时${minutes}分钟${seconds}秒`;
+      dayworkList.value[i].totalWorkingHours = time;
     }
-    total.value = res.total
-    dayworkLoading.value = false
+    total.value = res.total;
+    dayworkLoading.value = false;
     // 批次
     if (dayworkList.value.length > 0) {
-      proxy.$refs.dayworkTable.setCurrentRow(dayworkList.value[0])
+      proxy.$refs.dayworkTable.setCurrentRow(dayworkList.value[0]);
     }
-  })
+  });
 }
 function handleGetDayworkItems() {
-  dayworkLoading.value = true
+  dayworkLoading.value = true;
   listDaywork(queryDayworkParams.value).then((res) => {
-    dayworkList.value = res.rows
+    dayworkList.value = res.rows;
     for (var i = 0; i < dayworkList.value.length; i++) {
-      let timeStamp = dayworkList.value[i].totalWorkingHours
+      let timeStamp = dayworkList.value[i].totalWorkingHours;
       let seconds = Math.floor((timeStamp / 1000) % 60);
-      let minutes = Math.floor(
-      (timeStamp / (1000 * 60)) % 60
-    );
-    let hours = Math.floor(timeStamp / (1000 * 60 * 60));
-    let time = `${hours}小时${minutes}分钟${seconds}秒`;
-      dayworkList.value[i].totalWorkingHours = time
+      let minutes = Math.floor((timeStamp / (1000 * 60)) % 60);
+      let hours = Math.floor(timeStamp / (1000 * 60 * 60));
+      let time = `${hours}小时${minutes}分钟${seconds}秒`;
+      dayworkList.value[i].totalWorkingHours = time;
     }
-    total.value = res.total
-    dayworkLoading.value = false
-      if (dayworkList.value.length > 0) {
+    total.value = res.total;
+    dayworkLoading.value = false;
+    if (dayworkList.value.length > 0) {
       for (var i = 0; i < dayworkList.value.length; i++) {
         if (dayworkList.value[i].id == currentDaywork.value.id) {
-          var index = i
-          break
+          var index = i;
+          break;
         }
       }
     }
-    proxy.$refs.dayworkTable.setCurrentRow(dayworkList.value[index])
-  })
-    
+    proxy.$refs.dayworkTable.setCurrentRow(dayworkList.value[index]);
+  });
 }
 function handleDeptChange() {
-  getDayworks()
+  getDayworks();
 }
 
 function handleUpdateDayworkItem(row) {
   //编辑时拿到同工序下的合格数总数
-  let totalQuailifiedNum = 0
-  for(let i = 0; i<dayworkItemList.value.length;i++) {
-    if(row.processAlias == dayworkItemList.value[i].processAlias && (dayworkItemList.value[i].status == 2 || dayworkItemList.value[i].status == 3) && row.id != dayworkItemList.value[i].id) {
-      totalQuailifiedNum += dayworkItemList.value[i].qualifiedNum
+  let totalQuailifiedNum = 0;
+  for (let i = 0; i < dayworkItemList.value.length; i++) {
+    if (
+      row.processAlias == dayworkItemList.value[i].processAlias &&
+      (dayworkItemList.value[i].status == 2 ||
+        dayworkItemList.value[i].status == 3) &&
+      row.id != dayworkItemList.value[i].id
+    ) {
+      totalQuailifiedNum += dayworkItemList.value[i].qualifiedNum;
     }
   }
   //该daywork合格数总数不能超过投产数的103%
-  let maxQuailifiedNum = Math.floor(currentDaywork.value.productionQuantity * 1.03 - totalQuailifiedNum)
-  row.technologicalProcessId = queryItemParams.value.technologicalProcessId
-  row.deptId =  queryDayworkParams.value.deptId
-  row.productionPlanDetailId = currentDaywork.value.productionPlanDetailId
-  row.dayworkId = currentDaywork.value.id
-  row.lotId = currentDaywork.value.lotId
-  row.maxQuailifiedNum = maxQuailifiedNum
+  let maxQuailifiedNum = Math.floor(
+    currentDaywork.value.productionQuantity * 1.03 - totalQuailifiedNum
+  );
+  row.technologicalProcessId = queryItemParams.value.technologicalProcessId;
+  row.deptId = queryDayworkParams.value.deptId;
+  row.productionPlanDetailId = currentDaywork.value.productionPlanDetailId;
+  row.dayworkId = currentDaywork.value.id;
+  row.lotId = currentDaywork.value.lotId;
+  row.maxQuailifiedNum = maxQuailifiedNum;
   //判断是编辑
-  row.editStatus = true
+  row.editStatus = true;
   //判断是否是当前工段
-  if(row.deptId == currentDaywork.value.deptId) {
-    row.currentDept = true
-  }else {
-    row.currentDept = false
+  if (row.deptId == currentDaywork.value.deptId) {
+    row.currentDept = true;
+  } else {
+    row.currentDept = false;
   }
-  proxy.$refs.dayworkItemRef.open(row)
+  proxy.$refs.dayworkItemRef.open(row);
 }
 function handleCheckDayworkItem(row) {
-  row.technologicalProcessId = queryItemParams.value.technologicalProcessId
-  row.deptId =  queryDayworkParams.value.deptId
-  row.productionPlanDetailId = currentDaywork.value.productionPlanDetailId
-  row.dayworkId = currentDaywork.value.id
-  row.lotId = currentDaywork.value.lotId
+  row.technologicalProcessId = queryItemParams.value.technologicalProcessId;
+  row.deptId = queryDayworkParams.value.deptId;
+  row.productionPlanDetailId = currentDaywork.value.productionPlanDetailId;
+  row.dayworkId = currentDaywork.value.id;
+  row.lotId = currentDaywork.value.lotId;
   //判断是查看
-  row.editStatus = false
+  row.editStatus = false;
   //判断是否是当前工段
-  if(row.deptId == currentDaywork.value.deptId) {
-    row.currentDept = true
-  }else {
-    row.currentDept = false
+  if (row.deptId == currentDaywork.value.deptId) {
+    row.currentDept = true;
+  } else {
+    row.currentDept = false;
   }
-  proxy.$refs.dayworkItemRef.open(row)
+  proxy.$refs.dayworkItemRef.open(row);
 }
 
 function handleProcessChange() {
-  getDayworkItems()
+  getDayworkItems();
 }
 
 /** 查询报工详情列表 */
 function getDayworkItems() {
-  dayworkItemLoading.value = true
+  dayworkItemLoading.value = true;
   listDayworkItem(queryItemParams.value).then((res) => {
-    listDeptProcess({deptId:queryDayworkParams.value.deptId,flag:true}).then((deptProcess) => {
-    for(let i = 0; i < res.rows.length; i++) {
-      for(let j = 0; j < deptProcess.rows.length; j++) {
-        //如果在工段资源工序里,则代表工段长能编辑
-        if(res.rows[i].processAlias.trim() == deptProcess.rows[j].processAlias.trim()) {
-          console.log(res.rows[i].processAlias.trim())
-          console.log(deptProcess.rows[j].processAlias.trim())
-          console.log(res.rows[i].processAlias.trim() == deptProcess.rows[j].processAlias.trim())
-           res.rows[i].flag = true
-           break;
-        }
-        else {
-          res.rows[i].flag = false
+    listDeptProcess({
+      deptId: queryDayworkParams.value.deptId,
+      flag: true,
+    }).then((deptProcess) => {
+      for (let i = 0; i < res.rows.length; i++) {
+        for (let j = 0; j < deptProcess.rows.length; j++) {
+          //如果在工段资源工序里,则代表工段长能编辑
+          if (
+            res.rows[i].processAlias.trim() ==
+            deptProcess.rows[j].processAlias.trim()
+          ) {
+            res.rows[i].flag = true;
+            break;
+          } else {
+            res.rows[i].flag = false;
+          }
         }
       }
-    }
-    console.log(res.rows)
-    dayworkItemList.value = res.rows
-    console.log(dayworkItemList.value)
-    for (var i = 0; i < dayworkItemList.value.length; i++) {
-      let timeStamp = dayworkItemList.value[i].workingHours
-      let seconds = Math.floor((timeStamp / 1000) % 60);
-      let minutes = Math.floor(
-      (timeStamp / (1000 * 60)) % 60
-    );
-    let hours = Math.floor(timeStamp / (1000 * 60 * 60));
-    let time = `${hours}小时${minutes}分钟${seconds}秒`;
-      dayworkItemList.value[i].workingHours = time
-    }
-    getProcessList({ technologicalProcessId: queryItemParams.value.technologicalProcessId }).then((res) => {
-      processList.value = res.data
-    })
-    itemTotal.value = res.total
-    dayworkItemLoading.value = false
-  })
-})
+      dayworkItemList.value = res.rows;
+      for (var i = 0; i < dayworkItemList.value.length; i++) {
+        let timeStamp = dayworkItemList.value[i].workingHours;
+        let seconds = Math.floor((timeStamp / 1000) % 60);
+        let minutes = Math.floor((timeStamp / (1000 * 60)) % 60);
+        let hours = Math.floor(timeStamp / (1000 * 60 * 60));
+        let time = `${hours}小时${minutes}分钟${seconds}秒`;
+        dayworkItemList.value[i].workingHours = time;
+      }
+      getProcessList({
+        technologicalProcessId: queryItemParams.value.technologicalProcessId,
+      }).then((res) => {
+        processList.value = res.data;
+      });
+      itemTotal.value = res.total;
+      dayworkItemLoading.value = false;
+    });
+  });
 }
 
 /** 搜索按钮操作 */
 function handleQuery() {
   //queryDayworkParams.value.pageNum = 1
-  getDayworks()
+  getDayworks();
 }
 
 /** 生产计划明细 current-change 事件 */
 function handleDayworkCurrentChange(row) {
   if (row) {
-    currentDaywork.value = row
-    queryItemParams.value.dayworkId = currentDaywork.value.id
-    queryItemParams.value.technologicalProcessDetailId = null
-    queryItemParams.value.technologicalProcessId = row.technologicalProcessId
-    getDayworkItems()
+    currentDaywork.value = row;
+    queryItemParams.value.dayworkId = currentDaywork.value.id;
+    queryItemParams.value.technologicalProcessDetailId = null;
+    queryItemParams.value.technologicalProcessId = row.technologicalProcessId;
+    getDayworkItems();
   } else {
-    dayworkItemList.value = []
+    dayworkItemList.value = [];
   }
 }
 
 onMounted(() => {
-  getList()
-})
+  getList();
+});
 </script>
 <style scoped>
 .el-form--inline .el-form-item {
-    margin-right: 20px;
+  margin-right: 20px;
 }
 </style>

+ 0 - 1
src/views/business/resourcePlan/form.vue

@@ -109,7 +109,6 @@
    */
   function getList() {
     loading.value = true
-    console.log(queryParams.value)
     listProductionPlanDetailList(queryParams.value).then((res) => {
       subDetailList.value = res.rows
       total.value = res.total

+ 4 - 3
src/views/business/resourcePlan/index.vue

@@ -58,9 +58,10 @@
             <el-table ref="planDetailsTable"  v-loading="planDetailLoading" row-key="id" :data="planDetailList" highlight-current-row height="100%" @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="厂家" prop="companyAlias" width="150" align="center" />
-              <el-table-column label="生产计划单号" prop="productionPlanNo" width="110" align="center" />
-              <el-table-column label="产品描述" prop="productDescription" align="center" />
+              <el-table-column label="厂家" prop="companyAlias" align="center" />
+              <el-table-column label="生产计划单号" prop="productionPlanNo" width="100" align="center" />
+              <el-table-column label="序号" width="60" prop="lineNumber" align="center" />
+              <el-table-column label="产品描述" prop="productDescription" width="350" align="center" />
               <el-table-column label="操作" width="150" align="center">
                 <template #default="scope">
                   <el-button  icon="delete" link type="danger" @click="handleDelPlanDetail(scope.row)">删除

+ 200 - 0
src/views/business/workshop/DialogDept.vue

@@ -0,0 +1,200 @@
+<template>
+  <el-dialog
+    title="添加工段"
+    v-model="visible"
+    width="800px"
+    append-to-body
+    draggable
+    @close="close"
+  >
+    <el-form ref="deptChoiceRef" class="master-container" :model="queryParams">
+      <div style="display: flex">
+        <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="工段编码:"
+          prop="deptCode"
+          label-width="100px"
+          style="margin-top: 20px"
+        >
+          <el-input
+            v-model.trim="queryParams.deptCode"
+            type="text"
+            style="width: 180px"
+            placeholder="请输入工段编码"
+            :clearable="true"
+            @keydown.enter.prevent
+            @keyup.enter="handleSearch"
+          />
+        </el-form-item>
+        <el-form-item label-width="20px" style="margin-top: 20px">
+          <el-button
+            type="info"
+            icon="Search"
+            size="default"
+            @click="handleSearch"
+            >搜索</el-button
+          >
+        </el-form-item>
+      </div>
+    </el-form>
+
+    <el-table
+      ref="dialogTable"
+      :data="deptList"
+      :row-key="getRowKey"
+      size="small"
+      v-loading="loading"
+      border
+      height="370px"
+      header-row-class-name="list-header-row"
+      row-class-name="list-row"
+      @selection-change="handleSelectionChange"
+    >
+      <el-table-column
+        type="selection"
+        width="40"
+        align="center"
+        :reserve-selection="true" :selectable="(row) => !deptIds.includes(row.id)"
+      />
+      <el-table-column type="index" label="行号" width="50" align="center" />
+      <el-table-column label="工段名称" align="center" prop="deptName" />
+      <el-table-column label="工段编码" align="center" prop="deptCode" />
+    </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 icon="Close" @click="close">取 消</el-button>
+      </div>
+    </template>
+  </el-dialog>
+</template>
+<script setup>
+import { getDeptInfo } from "@/api/system/dept.js"
+const { proxy } = getCurrentInstance();
+const total = ref(0);
+const props = defineProps({
+  selected: {
+    type: Array,
+    defalut: [],
+  },
+  multipleSelected: {
+    type: Function,
+    default: null,
+  },
+});
+
+const { multipleSelected, selected } = toRefs(props);
+const deptList = ref([]);
+const visible = ref(false);
+const deptIds = ref([])
+const loading = ref(false);
+const data = reactive({
+  queryParams: {
+    pageSize: 10,
+    pageNum: 1,
+  },
+});
+const selections = ref([]);
+const { queryParams } = toRefs(data);
+
+/** 获取行 id */
+function getRowKey(row) {
+  return row.deptId;
+}
+
+/**
+ * 对话框打开 事件
+ */
+function open(data) {
+  deptIds.value = data;
+  console.log(deptIds.value)
+  visible.value = true;
+  getList();
+}
+
+
+/**
+ * 对话框关闭 事件
+ */
+function close() {
+  proxy.$refs.deptChoiceRef.resetFields();
+  proxy.$refs.dialogTable.clearSelection();
+  visible.value = false;
+}
+
+/**
+ * 加载数据
+ */
+function getList() {
+  loading.value = true;
+  getDeptInfo(queryParams.value).then((res) => {
+    deptList.value = res.rows;
+    total.value = res.total;
+    loading.value = false;
+  });
+}
+
+/**
+ * 列表checkbox列选择 事件
+ */
+function handleSelectionChange(selection) {
+  console.log(selection);
+  selections.value = selection;
+}
+
+/**  搜索 事件 */
+function handleSearch(type) {
+  if (type && type === "clear") {
+    queryParams.value = {
+      deptName: "",
+      deptCode: "",
+      total: 0,
+      pageSize: 10,
+      pageNum: 1,
+    };
+  }
+  getList();
+}
+
+/** 多选事件 */
+function handleMultipleSelected() {
+  if (multipleSelected.value) {
+    multipleSelected.value(selections.value);
+  }
+  close();
+}
+
+defineExpose({
+  open,
+});
+</script>
+<style scoped></style>

+ 106 - 0
src/views/business/workshop/form.vue

@@ -0,0 +1,106 @@
+<template>
+  <!-- 添加或修改项目信息对话框 -->
+  <el-dialog
+    title="车间信息"
+    v-model="visible"
+    width="400px"
+    append-to-body
+    draggable
+  >
+    <div class="form-container">
+      <el-form
+        ref="workshopRef"
+        class="master-container"
+        :model="form"
+        :rules="rules"
+        label-width="100px"
+      >
+        <el-form-item label="车间名称" prop="name">
+          <el-input v-model.trim="form.name" placeholder="请输入车间名称" />
+        </el-form-item>
+      </el-form>
+    </div>
+    <template #footer>
+      <el-button type="primary" icon="Check" @click="submitForm"
+        >确 定</el-button
+      >
+      <el-button icon="Close" @click="cancel">取 消</el-button>
+    </template>
+  </el-dialog>
+</template>
+  <script setup>
+import { getWorkshop,addWorkshop,updateWorkshop } from "@/api/business/workshop";
+const { proxy } = getCurrentInstance();
+const emit = defineEmits(["handleSaveSuccess"]);
+/** 字典数组区 */
+/** 表单抽屉 页变量 */
+const visible = ref(false);
+const deptOptions = ref([]);
+const data = reactive({
+  form: {},
+  rules: {
+    name: [
+      { required: true, message: "车间名称不能为空", trigger: "blur" },
+    ]
+  },
+});
+const { form, rules } = toRefs(data);
+/***********************  方法区  ****************************/
+/** 打开抽屉 */
+function open(row) {
+  reset();
+  visible.value = true;
+  if (row) {
+    getWorkshop(row.id).then((response) => {
+      form.value = response.data;
+    });
+  }
+}
+/** 取消按钮 */
+function cancel() {
+  visible.value = false;
+  reset();
+}
+
+/** 表单重置 */
+function reset() {
+  form.value = {
+    id: null,
+    name: "",
+
+  };
+  proxy.resetForm("workshopRef");
+}
+
+/** 提交按钮 */
+function submitForm() {
+  proxy.$refs["workshopRef"].validate((valid) => {
+    if (valid) {
+        if(form.value.id) {
+        updateWorkshop(form.value).then((res) => {
+        if (res.code === 200) {
+          proxy.$modal.msgSuccess("保存成功");
+          emit("handleSaveSuccess");
+          visible.value = false;
+        }
+      });
+    }
+    else {
+        addWorkshop(form.value).then((res) => {
+        if (res.code === 200) {
+          proxy.$modal.msgSuccess("添加成功");
+          emit("handleSaveSuccess");
+          visible.value = false;
+        }
+      });
+    }
+    }
+  });
+}
+
+/** 暴露给父组件的方法 */
+defineExpose({
+  open,
+});
+</script>
+  

+ 285 - 0
src/views/business/workshop/index.vue

@@ -0,0 +1,285 @@
+<template>
+  <div class="page-container row-container">
+    <!-- 左侧区域 -->
+    <section class="list-part-container" style="flex: 2">
+      <!-- 搜索区 -->
+      <el-form
+        class="list-search-container"
+        :model="queryDeptParams"
+        ref="queryRef"
+        :inline="true"
+      >
+        <el-form-item class="section-title" label="车间管理" />
+        <el-form-item>
+          <el-button type="primary" icon="Plus" @click="handleAdd"
+            >新增</el-button
+          >
+        </el-form-item>
+        <el-form-item label="车间名称:" prop="name">
+          <el-input
+            v-model.trim="queryParams.name"
+            placeholder="请输入车间名称"
+            @keydown.enter.prevent
+            @keyup.enter="handleSearch"
+            clearable
+            style="width: 155px"
+          />
+        </el-form-item>
+        <el-form-item>
+          <el-button type="info" icon="Search" @click="handleSearch"
+            >搜索</el-button
+          >
+        </el-form-item>
+      </el-form>
+      <!-- 列表区 -->
+      <div class="el-table-container">
+        <div class="el-table-inner-container">
+          <!-- 列表区 -->
+          <el-table
+            ref="workshopTable"
+            v-loading="loading"
+            :data="workshopList"
+            row-key="id"
+            height="100%"
+            :indent="20"
+            default-expand-all
+            highlight-current-row
+            @current-change="handleGetDept"
+          >
+            <el-table-column
+              label="行号"
+              type="index"
+              width="50"
+              align="center"
+            />
+            <el-table-column label="车间名称" prop="name" align="center" />
+            <el-table-column label="操作" width="150" align="center">
+              <template #default="scope">
+                <el-button
+                  link
+                  type="warning"
+                  icon="Edit"
+                  @click="handleUpdateWorkshop(scope.row)"
+                  >编辑</el-button
+                >
+                <el-button
+                  link
+                  type="danger"
+                  icon="Delete"
+                  @click="handleDeleteWorkshop(scope.row)"
+                  >删除</el-button
+                >
+              </template>
+            </el-table-column>
+          </el-table>
+        </div>
+      </div>
+    </section>
+
+    <!-- 右侧区域 -->
+    <section class="list-part-container" style="flex: 3">
+      <!-- 搜索区 -->
+      <el-form
+        class="list-search-container"
+        :model="queryDeptParams"
+        ref="queryRef"
+        :inline="true"
+      >
+        <el-form-item class="section-title" label="工段" />
+        <el-form-item>
+          <el-button type="primary" icon="Plus" @click="handleAddDept"
+            >新增</el-button
+          >
+          <el-button type="danger" icon="Delete" @click="handleDeptDelete">
+            删除</el-button
+          >
+        </el-form-item>
+      </el-form>
+
+      <!-- 列表区 -->
+      <div class="el-table-container">
+        <div class="el-table-inner-container">
+          <el-table
+            v-loading="deptLoading"
+            :data="deptList"
+            :row-key="getRowKey"
+            height="100%"
+            @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="工段名称" prop="deptName" align="center" />
+            <el-table-column label="工段编码" prop="deptCode" align="center" />
+          </el-table>
+        </div>
+      </div>
+      <!-- 分页 -->
+      <pagination
+        v-show="total > 0"
+        :total="total"
+        v-model:page="queryDeptParams.pageNum"
+        v-model:limit="queryDeptParams.pageSize"
+        @pagination="getdeptList"
+      />
+    </section>
+
+    <!-- 表单 -->
+    <workshop-form ref="workshopRef" @handleSaveSuccess="getList" />
+    <dept-form ref="deptChoiceRef" :multiple="true" :multiple-selected="handleDeptSelected" />
+  </div>
+</template>
+<script setup >
+import { listWorkshop,delWorkshop } from "@/api/business/workshop";
+import { listDept,updateDeptWorkshop,updateDeptWorkshopByDeptId } from "@/api/system/dept";
+import deptForm from '@/views/business/workshop/DialogDept'
+import workshopForm from './form'
+const { proxy } = getCurrentInstance();
+
+const workshopList = ref([]);
+const deptList = ref([]);
+const loading = ref(false);
+const deptLoading = ref(false);
+const currentWorkshop = ref({});
+const total = ref(0);
+const ids = ref([])
+const workshopIds = ref([])
+/** 查询对象 */
+const queryParams = ref({
+  name: "",
+});
+const queryDeptParams = ref({
+  deptCode: "",
+});
+
+/***********************  方法区  ****************************/
+
+/** 查询车间管理列表 */
+function getList() {
+  loading.value = true;
+  listWorkshop(queryParams.value).then((res) => {
+    if (res.code == 200) {
+      workshopList.value = res.rows;
+      if (workshopList.value.length > 0) {
+        proxy.$refs.workshopTable.setCurrentRow(workshopList.value[0]);
+      } else {
+        deptList.value = [];
+      }
+    }
+  });
+  loading.value = false;
+}
+function handleSearch() {
+  getList();
+}
+
+//打开添加工段
+const handleAddDept = () => {
+  handleAddBatchDept();
+};
+/** 多选添加 */
+function handleAddBatchDept() {
+  let deptIds = [];
+  deptIds = deptList.value.map((item) => {
+    return item.deptId;
+  });
+  proxy.$refs.deptChoiceRef.open(deptIds);
+}
+
+// 多选框选中数据
+function handleSelectionChange(selection) {
+  ids.value = selection.map((item) => {
+    return item.deptId;
+  });
+  console.log(ids.value);
+
+}
+/** 获取行 id */
+function getRowKey(row) {
+  return row.deptId;
+}
+/** 新增按钮操作 */
+function handleAdd() {
+  proxy.$refs.workshopRef.open();
+}
+
+/** 修改按钮操作 */
+function handleUpdateWorkshop(row) {
+  proxy.$refs.workshopRef.open(row);
+}
+
+/**车间表点击事件 */
+function handleGetDept(row) {
+  if (row) {
+    currentWorkshop.value = row;
+  }
+  getdeptList();
+}
+//工段多选带回
+function handleDeptSelected(selection) {
+ let deptInfo = {}
+ let deptIds = []
+ deptIds = selection.map((item) => {
+    return item.deptId;
+  });
+  deptInfo.workshopId = currentWorkshop.value.id
+  deptInfo.ids = deptIds
+  console.log(deptInfo)
+  updateDeptWorkshop(deptInfo).then((res)=>{
+    if (res.code == 200) {
+        handleGetDept(currentWorkshop.value)
+      proxy.$modal.msgSuccess("添加成功!");
+    }
+  })
+
+
+}
+function getdeptList() {
+  queryDeptParams.value.workshopId = currentWorkshop.value.id;
+  listDept(queryDeptParams.value).then((res) => {
+    if (res.code == 200) {
+      deptList.value = res.rows;
+      total.value = res.total;
+      deptLoading.value = false;
+    }
+  });
+}
+
+/** 删除按钮操作 */
+function handleDeleteWorkshop(row) {
+  const _ids = row.id 
+  proxy.$modal
+    .confirm("是否确认删除选中的车间?")
+    .then(function () {
+      return delWorkshop(_ids);
+    })
+    //删除车间的同时删除工段上workId
+    .then(function () {
+         
+        return updateDeptWorkshopByDeptId({workshopId:_ids})
+    })
+    .then(() => {
+      getList();
+      proxy.$modal.msgSuccess("删除成功!");
+    })
+    .catch(() => {});
+}
+/** 车间工段删除按钮操作 */
+function handleDeptDelete(row) {
+    updateDeptWorkshop({ids:ids.value}).then((res)=>{
+    if (res.code == 200) {
+        handleGetDept(currentWorkshop.value)
+      proxy.$modal.msgSuccess("删除成功!");
+    }
+  })
+}
+
+onMounted(() => {
+  getList();
+});
+</script>
+