695593266@qq.com пре 2 месеци
родитељ
комит
ef7906f0e1

+ 39 - 1
src/views/produce/components/new_produceOrder.vue

@@ -77,6 +77,24 @@
       <template v-slot:formingWeight="{ row }">
       <template v-slot:formingWeight="{ row }">
         <span> {{ row.formingWeight }} {{ row.weightUnit }} </span>
         <span> {{ row.formingWeight }} {{ row.weightUnit }} </span>
       </template>
       </template>
+
+      <template v-slot:teamId="{ row }">
+        <el-link
+          type="primary"
+          :underline="false"
+          @click="openDotLineDetail('plan', row)"
+          >查看详情</el-link
+        >
+      </template>
+
+      <template v-slot:taskId="{ row }">
+        <el-link
+          type="primary"
+          :underline="false"
+          @click="openDotLineDetail('task', row)"
+          >查看详情</el-link
+        >
+      </template>
     </ele-pro-table>
     </ele-pro-table>
 
 
     <!-- //工单列表 -->
     <!-- //工单列表 -->
@@ -85,12 +103,14 @@
       :routeObj="routeObj"
       :routeObj="routeObj"
       @closeRoute="closeRoute"
       @closeRoute="closeRoute"
     ></routings>
     ></routings>
+    <dotLinePopup ref="dotLinePopupRef"></dotLinePopup>
   </div>
   </div>
 </template>
 </template>
 
 
 <script>
 <script>
   import { workorderPage2 } from '@/api/produce/workOrder.js';
   import { workorderPage2 } from '@/api/produce/workOrder.js';
   import routings from './routings.vue';
   import routings from './routings.vue';
+  import dotLinePopup from '@/views/produceOrder/components/details/dotLinePopup.vue';
   import { isFullscreen } from 'ele-admin';
   import { isFullscreen } from 'ele-admin';
   import tableColumnsMixin from '@/mixins/tableColumnsMixin';
   import tableColumnsMixin from '@/mixins/tableColumnsMixin';
 
 
@@ -101,7 +121,7 @@
   } from '@/api/inspectionWork';
   } from '@/api/inspectionWork';
 
 
   export default {
   export default {
-    components: { routings },
+    components: { routings, dotLinePopup },
     mixins: [tableColumnsMixin],
     mixins: [tableColumnsMixin],
     emits: ['changeIsPreProductionResult'],
     emits: ['changeIsPreProductionResult'],
     props: {
     props: {
@@ -234,6 +254,20 @@
             slot: 'outsourceStatus',
             slot: 'outsourceStatus',
             showOverflowTooltip: true
             showOverflowTooltip: true
           },
           },
+          {
+            prop: 'teamId',
+            label: '计划布点',
+            align: 'center',
+            slot: 'teamId',
+            showOverflowTooltip: true
+          },
+          {
+            prop: 'taskId',
+            label: '任务布点',
+            align: 'center',
+            slot: 'taskId',
+            showOverflowTooltip: true
+          },
           {
           {
             prop: 'entrustStatus',
             prop: 'entrustStatus',
             label: '请托状态',
             label: '请托状态',
@@ -533,6 +567,10 @@
         this.routingShow = false;
         this.routingShow = false;
       },
       },
 
 
+      openDotLineDetail(type, row) {
+        this.$refs.dotLinePopupRef?.open(type, row);
+      },
+
       handleResize() {
       handleResize() {
         this.internalIsFullscreen = isFullscreen();
         this.internalIsFullscreen = isFullscreen();
       }
       }

+ 44 - 1
src/views/produce/components/taskWorkList.vue

@@ -66,6 +66,28 @@
         >
         >
       </template>
       </template>
 
 
+      <template v-slot:teamId="{ row }">
+        <el-link
+          v-if="row.disposalStatus == 1"
+          type="primary"
+          :underline="false"
+          @click="openDotLineDetail('plan', row)"
+          >查看详情</el-link
+        >
+        <span v-else>-</span>
+      </template>
+
+      <template v-slot:taskId="{ row }">
+        <el-link
+          v-if="row.disposalStatus == 1"
+          type="primary"
+          :underline="false"
+          @click="openDotLineDetail('task', row)"
+          >查看详情</el-link
+        >
+        <span v-else>-</span>
+      </template>
+
       <template v-slot:action="{ row }">
       <template v-slot:action="{ row }">
         <el-popconfirm
         <el-popconfirm
           icon="el-icon-info"
           icon="el-icon-info"
@@ -88,6 +110,7 @@
     </ele-pro-table>
     </ele-pro-table>
 
 
     <Ddtails ref="detailsRef" @success="reload" />
     <Ddtails ref="detailsRef" @success="reload" />
+    <dotLinePopup ref="dotLinePopupRef"></dotLinePopup>
   </div>
   </div>
 </template>
 </template>
 
 
@@ -96,9 +119,10 @@
   import tableColumnsMixin from '@/mixins/tableColumnsMixin';
   import tableColumnsMixin from '@/mixins/tableColumnsMixin';
   import { pageByCurrentUser, taskManagement } from '@/api/workOrderList';
   import { pageByCurrentUser, taskManagement } from '@/api/workOrderList';
   import Ddtails from '@/views/taskList/components/Ddtails.vue';
   import Ddtails from '@/views/taskList/components/Ddtails.vue';
+  import dotLinePopup from '@/views/produceOrder/components/details/dotLinePopup.vue';
 
 
   export default {
   export default {
-    components: { Ddtails },
+    components: { Ddtails, dotLinePopup },
     mixins: [tableColumnsMixin],
     mixins: [tableColumnsMixin],
     emits: ['changeIsPreProductionResult'],
     emits: ['changeIsPreProductionResult'],
     props: {
     props: {
@@ -369,6 +393,22 @@
             slot: 'totalFirstArticleDualInspectionStatus',
             slot: 'totalFirstArticleDualInspectionStatus',
             width: 120
             width: 120
           },
           },
+          {
+            prop: 'teamId',
+            label: '计划布点',
+            align: 'center',
+            slot: 'teamId',
+            showOverflowTooltip: true,
+            width: 120
+          },
+          {
+            prop: 'taskId',
+            label: '任务布点',
+            align: 'center',
+            slot: 'taskId',
+            showOverflowTooltip: true,
+            width: 120
+          },
           {
           {
             prop: 'customerName',
             prop: 'customerName',
             label: '客户名称',
             label: '客户名称',
@@ -507,6 +547,9 @@
           this.reload();
           this.reload();
         });
         });
       },
       },
+      openDotLineDetail(type, row) {
+        this.$refs.dotLinePopupRef?.open(type, row);
+      },
 
 
       /* 表格数据源 */
       /* 表格数据源 */
       datasource({ page, where }) {
       datasource({ page, where }) {

+ 15 - 7
src/views/produceOrder/components/details/dotLineDetail.vue

@@ -71,13 +71,16 @@
             </template>
             </template>
           </el-table-column>
           </el-table-column>
           <el-table-column
           <el-table-column
-            label="执行班组"
+            label="执行对象"
             min-width="130"
             min-width="130"
             align="center"
             align="center"
-            prop="executionTeamName"
             label-class-name="config-execution-team-header"
             label-class-name="config-execution-team-header"
             class-name="config-meta-cell"
             class-name="config-meta-cell"
-          />
+          >
+            <template slot-scope="{ row }">
+              {{ dotLineExecutionTarget(row) }}
+            </template>
+          </el-table-column>
           <el-table-column
           <el-table-column
             label="执行开始时间"
             label="执行开始时间"
             min-width="168"
             min-width="168"
@@ -175,12 +178,17 @@
         return item.taskName || item.name || `工艺${index + 1}`;
         return item.taskName || item.name || `工艺${index + 1}`;
       },
       },
 
 
+      /** 自制(0) 显示班组名;请托(1) 显示工厂名 */
+      dotLineExecutionTarget(row) {
+        const t = row.executionType;
+        if (t === 0) return row.executionTeamName ?? '';
+        if (t === 1) return row.executionFactoryName ?? '';
+        return row.executionTeamName ?? row.executionFactoryName ?? '';
+      },
+
       dotLineRouteStepTitle(item, index) {
       dotLineRouteStepTitle(item, index) {
         return (
         return (
-          item.taskTypeName ||
-          item.taskName ||
-          item.name ||
-          `工艺${index + 1}`
+          item.taskTypeName || item.taskName || item.name || `工艺${index + 1}`
         );
         );
       },
       },
 
 

+ 324 - 0
src/views/produceOrder/components/details/dotLinePopup.vue

@@ -0,0 +1,324 @@
+<template>
+  <el-dialog
+    :title="dialogTitle"
+    :visible.sync="visible"
+    width="80%"
+    append-to-body
+    top="6vh"
+  >
+    <dotLineDetail
+      v-if="detailType === 'plan'"
+      :workOrderInfo="workOrderInfo"
+    ></dotLineDetail>
+
+    <div v-else v-loading="taskLoading" class="task-dot-line">
+      <el-empty
+        v-if="processList.length === 0 && !taskLoading"
+        description="暂无任务布点详情"
+      ></el-empty>
+      <template v-else>
+        <el-tabs
+          v-model="activeProcessId"
+          v-loading="tabsLoading"
+          type="border-card"
+          class="process_list"
+          style="margin-bottom: 20px"
+        >
+          <el-tab-pane
+            v-for="item in processList"
+            :key="item.id"
+            :label="item.name"
+            :name="item.id"
+          >
+            <span style="color: green">
+              工序编码:{{ item.code }},所属班组:{{
+                item.teamName
+              }},执行模式:{{ item.executionTypeLabel }}
+            </span>
+
+            <div class="toolbar-wrap">
+              <div
+                style="display: inline-block"
+                v-if="item.hasDispatched"
+              >
+                <span
+                  class="text"
+                  style="font-weight: bold; font-size: 14px; margin-right: 8px"
+                >指派:</span>
+                <el-radio-group
+                  :value="item.assignType"
+                  size="mini"
+                  disabled
+                >
+                  <el-radio-button
+                    v-if="item.assignType === 1"
+                    :label="1"
+                  >工位</el-radio-button>
+                  <el-radio-button
+                    v-if="item.assignType === 2"
+                    :label="2"
+                  >人员</el-radio-button>
+                  <el-radio-button
+                    v-if="item.assignType === 3"
+                    :label="3"
+                  >产线</el-radio-button>
+                </el-radio-group>
+              </div>
+              <div
+                v-if="item.allDispatched"
+                class="describe"
+                style="color: #67c23a"
+              >
+                该工序已完成派单!
+              </div>
+              <div
+                v-if="item.startDate && item.endDate"
+                style="margin-left: 50px; display: inline-block"
+              >
+                时间段: {{ item.startDate }} ----- {{ item.endDate }}
+              </div>
+            </div>
+
+            <el-table
+              v-if="item.hasDispatched"
+              :data="item.list"
+              border
+              size="small"
+              class="task-table"
+              max-height="420"
+            >
+              <el-table-column
+                type="index"
+                label="序号"
+                width="55"
+                align="center"
+                fixed="left"
+              />
+              <el-table-column
+                prop="assigneeName"
+                :label="getAssignLabel(item.assignType)"
+                min-width="150"
+                align="center"
+                show-overflow-tooltip
+              />
+              <el-table-column
+                prop="statusDesc"
+                label="状态"
+                min-width="100"
+                align="center"
+              />
+              <el-table-column
+                prop="disposalStatusLabel"
+                label="接收状态"
+                min-width="100"
+                align="center"
+              />
+              <el-table-column
+                prop="quantity"
+                label="数量"
+                min-width="100"
+                align="center"
+              />
+              <el-table-column
+                prop="weight"
+                :label="weightColumnLabel"
+                min-width="100"
+                align="center"
+              />
+              <el-table-column
+                prop="startTime"
+                label="计划开始时间"
+                min-width="170"
+                align="center"
+              />
+              <el-table-column
+                prop="endTime"
+                label="计划完成时间"
+                min-width="170"
+                align="center"
+              />
+            </el-table>
+
+            <el-empty
+              v-if="!item.hasDispatched"
+              description="该工序未派单"
+            ></el-empty>
+          </el-tab-pane>
+        </el-tabs>
+      </template>
+    </div>
+  </el-dialog>
+</template>
+
+<script>
+  import { listPlanDotLine } from '@/api/produceOrder/index';
+  import { listByMesWorkOrder } from '@/api/mainData/index.js';
+  import dotLineDetail from './dotLineDetail.vue';
+
+  const EXEC_TYPE_MAP = { 0: '自制', 1: '请托', 2: '委外' };
+  const ASSIGN_TYPE_LABEL = { 1: '工位名称', 2: '人员名称', 3: '产线名称' };
+
+  export default {
+    components: { dotLineDetail },
+    data() {
+      return {
+        visible: false,
+        detailType: 'plan',
+        workOrderInfo: {},
+        taskLoading: false,
+        tabsLoading: false,
+        processList: [],
+        activeProcessId: ''
+      };
+    },
+    computed: {
+      dialogTitle() {
+        return this.detailType === 'plan' ? '计划布点详情' : '任务布点详情';
+      },
+      weightColumnLabel() {
+        const u = this.workOrderInfo.weightUnit;
+        return u ? `重量(${u})` : '重量';
+      }
+    },
+    methods: {
+      open(type, row) {
+        this.detailType = type;
+        this.workOrderInfo = { ...row };
+        this.visible = true;
+        if (type === 'task') {
+          this.loadTaskDetail();
+        }
+      },
+
+      getAssignLabel(assignType) {
+        return ASSIGN_TYPE_LABEL[assignType] || '名称';
+      },
+
+      async loadTaskDetail() {
+        const {
+          productionPlanId,
+          produceRoutingId,
+          apsWorkOrderId,
+          categoryId,
+          id
+        } = this.workOrderInfo;
+
+        if (!productionPlanId || !produceRoutingId) {
+          this.processList = [];
+          return;
+        }
+
+        this.taskLoading = true;
+        try {
+          const [allRes, existRes] = await Promise.all([
+            listPlanDotLine({
+              planId: productionPlanId,
+              routingId: produceRoutingId
+            }),
+            listByMesWorkOrder({
+              apsWorkOrderId,
+              categoryId,
+              mesWorkOrderId: id,
+              produceRoutingId
+            }).catch(() => [])
+          ]);
+
+          if (!allRes || allRes.length === 0) {
+            this.processList = [];
+            return;
+          }
+
+          const assignMap = {};
+          (existRes || []).forEach((item) => {
+            if (item.assignees && item.assignees.length > 0) {
+              assignMap[item.taskId] = item.assignees;
+            }
+          });
+
+          this.processList = allRes.map((item, index) => {
+            const allAssignees = assignMap[item.sourceTaskId] || [];
+
+            const dispatchedList = allAssignees
+              .filter((a) => a.status && a.status.code == 1)
+              .map((a) => ({
+                ...a,
+                assigneeName: a.assigneeName || '',
+                statusDesc: a.status?.desc || '',
+                disposalStatusLabel:
+                  a.disposalStatus == 1
+                    ? '已接收'
+                    : a.disposalStatus == 2
+                    ? '已拒绝'
+                    : '未接收',
+                quantity: a.quantity ?? '',
+                weight: a.weight ?? '',
+                startTime: a.startTime || '',
+                endTime: a.endTime || ''
+              }));
+
+            let assignType = 1;
+            if (dispatchedList.length > 0) {
+              assignType = dispatchedList[0].assigneeType?.code || 1;
+            }
+
+            const starts = dispatchedList
+              .map((a) => a.startTime)
+              .filter(Boolean);
+            const ends = dispatchedList
+              .map((a) => a.endTime)
+              .filter(Boolean);
+
+            return {
+              id: item.sourceTaskId,
+              name: item.taskName || `工序${index + 1}`,
+              code: item.taskCode || '',
+              teamName: item.executionTeamName || '',
+              executionType: item.executionType,
+              executionTypeLabel: EXEC_TYPE_MAP[item.executionType] ?? '',
+              assignType,
+              hasDispatched: dispatchedList.length > 0,
+              allDispatched:
+                allAssignees.length > 0 &&
+                allAssignees.every((a) => a.status?.code == 1),
+              list: dispatchedList,
+              startDate: starts.length ? starts.sort()[0] : '',
+              endDate: ends.length ? ends.sort().reverse()[0] : ''
+            };
+          });
+
+          if (this.processList.length > 0) {
+            this.activeProcessId = this.processList[0].id;
+          }
+        } catch (err) {
+          this.processList = [];
+          this.$message.error(err.message || '获取任务布点详情失败');
+        } finally {
+          this.taskLoading = false;
+        }
+      }
+    }
+  };
+</script>
+
+<style lang="scss" scoped>
+  .task-dot-line {
+    min-height: 300px;
+  }
+
+  .toolbar-wrap {
+    display: flex;
+    align-items: center;
+    margin: 12px 0;
+    flex-wrap: wrap;
+    gap: 8px;
+  }
+
+  .describe {
+    font-size: 14px;
+    font-weight: 500;
+  }
+
+  .task-table {
+    width: 100%;
+  }
+</style>

+ 3 - 3
src/views/produceOrder/components/details/index.vue

@@ -101,9 +101,9 @@
               :workOrderInfo="workOrderInfo"
               :workOrderInfo="workOrderInfo"
             ></checkList>
             ></checkList>
           </el-tab-pane>
           </el-tab-pane>
-          <el-tab-pane label="布点详情" name="dot">
+          <!-- <el-tab-pane label="布点详情" name="dot">
             <dotLineDetail :workOrderInfo="workOrderInfo"></dotLineDetail>
             <dotLineDetail :workOrderInfo="workOrderInfo"></dotLineDetail>
-          </el-tab-pane>
+          </el-tab-pane> -->
         </el-tabs>
         </el-tabs>
       </div>
       </div>
     </el-drawer>
     </el-drawer>
@@ -111,7 +111,7 @@
 </template>
 </template>
 
 
 <script>
 <script>
-  import Info from './info.vue';
+  import Info from './newInfo.vue';
 
 
   import feedDetails from '@/views/produce/components/feeding/details.vue';
   import feedDetails from '@/views/produce/components/feeding/details.vue';
   import jobDetails from '@/views/produce/components/jobBooking/details.vue';
   import jobDetails from '@/views/produce/components/jobBooking/details.vue';

+ 161 - 0
src/views/produceOrder/components/details/newInfo.vue

@@ -0,0 +1,161 @@
+<template>
+  <div class="material">
+    <div class="content_table">
+      <div class="item rx-sc">
+        <div class="rx ww25">
+          <div class="lable rx-cc">工单编号</div>
+          <div class="content">
+            {{ workOrderInfo.code }}
+          </div>
+        </div>
+
+        <div class="rx ww25">
+          <div class="lable rx-cc">产品编码</div>
+          <div class="content">{{ workOrderInfo.productCode }}</div>
+        </div>
+
+        <div class="rx ww25">
+          <div class="lable rx-cc">产品名称</div>
+          <div class="content">{{ workOrderInfo.productName }}</div>
+        </div>
+
+        <div class="rx ww25">
+          <div class="lable rx-cc">批次号</div>
+          <div class="content">{{ workOrderInfo.batchNo }}</div>
+        </div>
+      </div>
+
+      <div class="item rx-sc">
+        <div class="rx ww25">
+          <div class="lable rx-cc">生产数量</div>
+          <div class="content rx-sc">
+            <div>{{ workOrderInfo.formingNum }}</div>
+            <div class="unit">{{ workOrderInfo.unit }}</div>
+          </div>
+        </div>
+
+        <div class="rx ww25">
+          <div class="lable rx-cc">重量</div>
+          <div class="content content_num">
+            <div>{{ workOrderInfo.formingWeight }}</div>
+            <div class="unit">{{ workOrderInfo.weightUnit }}</div>
+          </div>
+        </div>
+
+        <div class="rx ww25">
+          <div class="lable rx-cc">计划开始时间</div>
+          <div class="content">{{ workOrderInfo.planStartTime }}</div>
+        </div>
+
+        <div class="rx ww25">
+          <div class="lable rx-cc">计划结束时间</div>
+          <div class="content">{{ workOrderInfo.planCompleteTime }}</div>
+        </div>
+      </div>
+
+      <div class="item rx-sc">
+        <div class="rx ww25">
+          <div class="lable rx-cc">工艺路线:</div>
+          <div class="content">
+            {{ workOrderInfo.produceRoutingName }}
+          </div>
+        </div>
+      </div>
+    </div>
+  </div>
+</template>
+
+<script>
+  export default {
+    props: {
+      workOrderInfo: {
+        type: Object,
+        default: () => ({})
+      }
+    },
+    data() {
+      return {};
+    },
+
+    methods: {}
+  };
+</script>
+
+<style lang="scss">
+  .content_table {
+    width: 100%;
+    border: 1px solid #e3e5e5;
+    position: relative;
+
+    .item {
+      display: flex;
+      border-bottom: 1px solid #e3e5e5;
+
+      .lable {
+        width: 98px;
+        text-align: center;
+        background-color: #f7f9fa;
+        font-size: 12px;
+        border-right: 1px solid #e3e5e5;
+        flex-shrink: 0;
+      }
+
+      .content {
+        min-width: 250px;
+        min-height: 32px;
+        font-size: 14px;
+        line-height: 14px;
+        font-style: normal;
+        font-weight: 400;
+        padding: 9px 4px;
+        box-sizing: border-box;
+        word-wrap: break-word;
+        flex-grow: 1 !important;
+
+        .unit {
+          padding: 0 2px;
+          font-size: 12px;
+          color: #404446;
+        }
+      }
+
+      .content_num {
+        display: flex;
+        align-items: center;
+        padding: 2px;
+        --input-background-color: #f0f8f2;
+      }
+
+      &:last-child {
+        border-bottom: none;
+      }
+    }
+
+    .ww25 {
+      width: 25%;
+    }
+  }
+
+  .title_box {
+    .name {
+      font-size: 14px;
+      font-style: normal;
+      font-weight: 400;
+      color: #157a2c;
+      padding-left: 5px;
+      position: relative;
+
+      &:before {
+        position: absolute;
+        content: '';
+        left: 0px;
+        top: 0px;
+        bottom: 0px;
+        width: 2px;
+        height: 14px;
+        background: #157a2c;
+        margin: auto;
+      }
+    }
+  }
+</style>

+ 12 - 0
src/views/produceOrder/components/releaseDialog/planDotLineReleaseDialog.vue

@@ -650,6 +650,7 @@
             let obj = {
             let obj = {
               id: item.sourceTaskId, //工序 id
               id: item.sourceTaskId, //工序 id
               name: item.taskName, //工序 名称
               name: item.taskName, //工序 名称
+              executionTeamId: item.executionTeamId || '', // 工序执行班组id
               executionTeamName: item.executionTeamName || '', // 工序执行班组
               executionTeamName: item.executionTeamName || '', // 工序执行班组
               assignType: 1, // 默认的指派数据
               assignType: 1, // 默认的指派数据
               assignName: '工位', // 默认指派数据名称
               assignName: '工位', // 默认指派数据名称
@@ -682,6 +683,7 @@
           });
           });
           this.processList = list;
           this.processList = list;
           this.processId = res[0].sourceTaskId;
           this.processId = res[0].sourceTaskId;
+          console.log(this.processList, 'this.processList');
           // this.handleClick({ name: res[0].sourceTaskId });
           // this.handleClick({ name: res[0].sourceTaskId });
           this.initializeQuery();
           this.initializeQuery();
         } catch (err) {
         } catch (err) {
@@ -1021,6 +1023,16 @@
           // 点击工序后,班组显示以工序返回的 executionTeamName 为准
           // 点击工序后,班组显示以工序返回的 executionTeamName 为准
           this.form.taskAss = 0;
           this.form.taskAss = 0;
           this.form.teamName = data.executionTeamName || '';
           this.form.teamName = data.executionTeamName || '';
+          this.form.teamId = data.executionTeamId || '';
+          const matchedTeam = (this.teamList || []).find(
+            (item) => String(item.teamId) === String(data.executionTeamId)
+          );
+          // 只有当前用户可见班组里能匹配到 executionTeamId 时,才更新 teamId。
+          // 否则保留原 teamId,避免 listAssign 被错误 teamId 过滤为空。
+          if (matchedTeam) {
+            this.form.teamId = matchedTeam.teamId || this.form.teamId;
+            this.form.teamName = matchedTeam.teamName || this.form.teamName;
+          }
           await this.changeRadio(data.assignType, data.index);
           await this.changeRadio(data.assignType, data.index);
         }
         }
       },
       },

+ 40 - 1
src/views/produceOrder/index.vue

@@ -112,6 +112,24 @@
           <span> {{ row.formingWeight }} {{ row.weightUnit }} </span>
           <span> {{ row.formingWeight }} {{ row.weightUnit }} </span>
         </template>
         </template>
 
 
+        <template v-slot:teamId="{ row }">
+          <el-link
+            type="primary"
+            :underline="false"
+            @click="openDotLineDetail('plan', row)"
+            >查看详情</el-link
+          >
+        </template>
+
+        <template v-slot:taskId="{ row }">
+          <el-link
+            type="primary"
+            :underline="false"
+            @click="openDotLineDetail('task', row)"
+            >查看详情</el-link
+          >
+        </template>
+
         <template v-slot:singleReport="{ row }">
         <template v-slot:singleReport="{ row }">
           <span v-if="row.singleReport == 0">批量报工</span>
           <span v-if="row.singleReport == 0">批量报工</span>
           <span v-if="row.singleReport == 1">单个报工</span>
           <span v-if="row.singleReport == 1">单个报工</span>
@@ -292,6 +310,7 @@
       @confirm="checkAddConfirm('add', $event)"
       @confirm="checkAddConfirm('add', $event)"
     ></checkAdd>
     ></checkAdd>
     <checkDetails ref="checkDetailsRef" @reload="reload"></checkDetails>
     <checkDetails ref="checkDetailsRef" @reload="reload"></checkDetails>
+    <dotLinePopup ref="dotLinePopupRef"></dotLinePopup>
   </div>
   </div>
 </template>
 </template>
 
 
@@ -329,6 +348,7 @@
   import checkDetails from '@/views/checklistManagement/components/checkDetails.vue';
   import checkDetails from '@/views/checklistManagement/components/checkDetails.vue';
   import { getTaskInstanceList } from '@/api/produce/job';
   import { getTaskInstanceList } from '@/api/produce/job';
   import planDotLineReleaseDialog from './components/releaseDialog/planDotLineReleaseDialog.vue';
   import planDotLineReleaseDialog from './components/releaseDialog/planDotLineReleaseDialog.vue';
+  import dotLinePopup from './components/details/dotLinePopup.vue';
 
 
   export default {
   export default {
     mixins: [tableColumnsMixin],
     mixins: [tableColumnsMixin],
@@ -349,7 +369,8 @@
       originCode,
       originCode,
       checkAdd,
       checkAdd,
       checkDetails,
       checkDetails,
-      planDotLineReleaseDialog
+      planDotLineReleaseDialog,
+      dotLinePopup
     },
     },
 
 
     data() {
     data() {
@@ -414,6 +435,7 @@
             type: 'input',
             type: 'input',
             labelWidth: 100
             labelWidth: 100
           },
           },
+
           {
           {
             label: '计划编号:',
             label: '计划编号:',
             value: 'productionPlanCode',
             value: 'productionPlanCode',
@@ -740,6 +762,20 @@
             slot: 'outsourceStatus',
             slot: 'outsourceStatus',
             showOverflowTooltip: true
             showOverflowTooltip: true
           },
           },
+          {
+            prop: 'teamId',
+            label: '计划布点',
+            align: 'center',
+            slot: 'teamId',
+            showOverflowTooltip: true
+          },
+          {
+            prop: 'taskId',
+            label: '任务布点',
+            align: 'center',
+            slot: 'taskId',
+            showOverflowTooltip: true
+          },
           {
           {
             prop: 'priority',
             prop: 'priority',
             label: '优先级',
             label: '优先级',
@@ -1330,6 +1366,9 @@
       goDetail(row) {
       goDetail(row) {
         this.$refs.detailsRef.open(row);
         this.$refs.detailsRef.open(row);
       },
       },
+      openDotLineDetail(type, row) {
+        this.$refs.dotLinePopupRef?.open(type, row);
+      },
       handleDelete({ id }) {
       handleDelete({ id }) {
         this.$confirm('确定删除当前数据?', '提示').then(async () => {
         this.$confirm('确定删除当前数据?', '提示').then(async () => {
           await del(id);
           await del(id);

+ 10 - 6
src/views/taskList/components/task-search.vue

@@ -1,6 +1,6 @@
 <!-- 搜索表单 -->
 <!-- 搜索表单 -->
 <template>
 <template>
-  <seekPage :seekList="seekList" :formLength="3" @search="search"></seekPage>
+  <seekPage :seekList="seekList" :maxLength="3" @search="search"></seekPage>
 </template>
 </template>
 <script>
 <script>
   export default {
   export default {
@@ -18,11 +18,15 @@
       seekList() {
       seekList() {
         return [
         return [
           {
           {
-            label: '工作中心名称:',
-            value: 'workCenterName',
-            type: 'input',
-            placeholder: '',
-            labelWidth: 110
+            label: '任务状态:',
+            value: 'disposalStatus',
+            type: 'select',
+            placeholder: '请选择',
+            planList: [
+              { label: '待接收', value: 0 },
+              { label: '执行中', value: 1 },
+              { label: '已完成', value: 3 }
+            ]
           },
           },
           {
           {
             label: '班组名称:',
             label: '班组名称:',

+ 12 - 1
src/views/taskList/index.vue

@@ -62,6 +62,7 @@
           </el-link>
           </el-link>
         </template>
         </template>
         <template v-slot:disposalStatus="{ row }">
         <template v-slot:disposalStatus="{ row }">
+          <el-tag v-if="row.disposalStatus == 0" type="success">待接收</el-tag>
           <el-tag v-if="row.disposalStatus == 1" type="success">已接收</el-tag>
           <el-tag v-if="row.disposalStatus == 1" type="success">已接收</el-tag>
           <el-tag v-if="row.disposalStatus == 2" type="danger">已拒绝</el-tag>
           <el-tag v-if="row.disposalStatus == 2" type="danger">已拒绝</el-tag>
         </template>
         </template>
@@ -537,7 +538,7 @@
           },
           },
           {
           {
             prop: 'disposalStatus',
             prop: 'disposalStatus',
-            label: '任务接收状态',
+            label: '任务状态',
             align: 'center',
             align: 'center',
             slot: 'disposalStatus',
             slot: 'disposalStatus',
             width: 120
             width: 120
@@ -751,6 +752,16 @@
             size: limit
             size: limit
           };
           };
 
 
+          if (
+            params.taskStatus !== undefined &&
+            params.taskStatus !== null &&
+            params.taskStatus !== ''
+          ) {
+            params.status = params.taskStatus;
+          }
+          delete params.taskStatus;
+          delete params.workCenterName;
+
           if (this.tabValue === '3') {
           if (this.tabValue === '3') {
             params.teamIdsStr = this.$store.state.user.info?.teamId;
             params.teamIdsStr = this.$store.state.user.info?.teamId;
             // if (teamId) {
             // if (teamId) {