| | |
| | | placeholder="请输入" |
| | | clearable |
| | | prefix-icon="Search" |
| | | style="width: 160px;" |
| | | style="width: 160px" |
| | | @change="handleQuery" /> |
| | | </el-form-item> |
| | | <el-form-item label="产品名称:"> |
| | |
| | | placeholder="请输入" |
| | | clearable |
| | | prefix-icon="Search" |
| | | style="width: 160px;" |
| | | style="width: 160px" |
| | | @change="handleQuery" /> |
| | | </el-form-item> |
| | | <el-form-item label="规格:"> |
| | |
| | | placeholder="请输入" |
| | | clearable |
| | | prefix-icon="Search" |
| | | style="width: 160px;" |
| | | style="width: 160px" |
| | | @change="handleQuery" /> |
| | | </el-form-item> |
| | | <el-form-item label="状态:"> |
| | | <el-select v-model="searchForm.status" |
| | | placeholder="请选择" |
| | | style="width: 160px;" |
| | | style="width: 160px" |
| | | @change="handleQuery"> |
| | | <el-option label="待开始" |
| | | value="1" /> |
| | |
| | | value="2" /> |
| | | <el-option label="已完成" |
| | | value="3" /> |
| | | <el-option label="已取消" |
| | | value="4" /> |
| | | <!-- <el-option label="已取消"--> |
| | | <!-- value="4" />--> |
| | | <el-option label="已结束" |
| | | value="5" /> |
| | | </el-select> |
| | |
| | | :tableLoading="tableLoading" |
| | | :row-class-name="tableRowClassName" |
| | | :isSelection="true" |
| | | :selectable="row => !row.endOrder" |
| | | :selectable="(row) => !row.endOrder" |
| | | @selection-change="handleSelectionChange" |
| | | @pagination="pagination"> |
| | | <template #completionStatus="{ row }"> |
| | | <el-progress :percentage="toProgressPercentage(row?.completionStatus)" |
| | | :color="progressColor(toProgressPercentage(row?.completionStatus))" |
| | | :status="toProgressPercentage(row?.completionStatus) >= 100 ? 'success' : ''" /> |
| | | :status=" |
| | | toProgressPercentage(row?.completionStatus) >= 100 |
| | | ? 'success' |
| | | : '' |
| | | " /> |
| | | </template> |
| | | <template #processRouteStatus="{ row }"> |
| | | <div v-if="row.processRouteStatus && row.processRouteStatus.length" |
| | |
| | | <div class="step-circle" |
| | | :class="{ 'is-completed': item.percentage >= 100 }"> |
| | | <span class="step-percentage" |
| | | :style="{ color: item.percentage >= 70 ? item.percentage >= 100 ? '#67c23a' : '#f56c6c' : '#000' }">{{ item.percentage }}%</span> |
| | | :style="{ |
| | | color: |
| | | item.percentage >= 70 |
| | | ? item.percentage >= 100 |
| | | ? '#67c23a' |
| | | : '#f56c6c' |
| | | : '#000', |
| | | }">{{ item.percentage }}%</span> |
| | | </div> |
| | | <div class="step-name">{{ item.name }}</div> |
| | | </div> |
| | |
| | | <el-form-item label="工艺路线"> |
| | | <el-select v-model="bindForm.routeId" |
| | | placeholder="请选择工艺路线" |
| | | style="width: 100%;" |
| | | style="width: 100%" |
| | | :loading="bindRouteLoading"> |
| | | <el-option v-for="item in routeOptions" |
| | | :key="item.id" |
| | |
| | | <!-- 来源数据弹窗 --> |
| | | <el-dialog v-model="sourceDataDialogVisible" |
| | | title="来源数据" |
| | | width="1200px"> |
| | | width="1200px" |
| | | top="5vh" |
| | | class="source-data-dialog" |
| | | append-to-body> |
| | | <div v-if="sourceRowData" |
| | | class="applyno-summary1"> |
| | | <div class="summary-item"> |
| | | <span class="summary-label">产品名称:</span> |
| | | <span class="summary-value"> |
| | | <el-tag type="primary">{{ sourceRowData.productName || '-' }}</el-tag> |
| | | <el-tag type="primary">{{ |
| | | sourceRowData.productName || "-" |
| | | }}</el-tag> |
| | | </span> |
| | | </div> |
| | | <div class="summary-item"> |
| | | <span class="summary-label">规格:</span> |
| | | <span class="summary-value">{{ sourceRowData.model || '-' }}</span> |
| | | <span class="summary-value">{{ sourceRowData.model || "-" }}</span> |
| | | </div> |
| | | <div class="summary-item"> |
| | | <span class="summary-label">订单需求数量:</span> |
| | |
| | | <div class="info-grid"> |
| | | <div class="info-item"> |
| | | <div class="info-label">计划号</div> |
| | | <div class="info-value">{{ item.mpsNo || '-' }}</div> |
| | | <div class="info-value">{{ item.mpsNo || "-" }}</div> |
| | | </div> |
| | | <div class="info-item"> |
| | | <div class="info-label">数据来源</div> |
| | | <div class="info-value"> |
| | | <el-tag :type="item.source === '销售' ? 'primary' : 'warning'"> |
| | | {{ item.source || '未知' }} |
| | | {{ item.source || "未知" }} |
| | | </el-tag> |
| | | </div> |
| | | </div> |
| | | <div class="info-item"> |
| | | <div class="info-label">合同号</div> |
| | | <div class="info-value">{{ item.salesContractNo || '-' }}</div> |
| | | <div class="info-value"> |
| | | {{ item.salesContractNo || "-" }} |
| | | </div> |
| | | </div> |
| | | <div class="info-item"> |
| | | <div class="info-label">客户名称</div> |
| | | <div class="info-value">{{ item.customerName || '-' }}</div> |
| | | <div class="info-value">{{ item.customerName || "-" }}</div> |
| | | </div> |
| | | <div class="info-item"> |
| | | <div class="info-label">项目名称</div> |
| | | <div class="info-value">{{ item.projectName || '-' }}</div> |
| | | <div class="info-value">{{ item.projectName || "-" }}</div> |
| | | </div> |
| | | <div class="info-item"> |
| | | <div class="info-label">计划需求数量</div> |
| | | <div class="info-value">{{ item.qtyRequired || 0 }} {{ item.unit || '' }}</div> |
| | | <div class="info-value"> |
| | | {{ item.qtyRequired || 0 }} {{ item.unit || "" }} |
| | | </div> |
| | | </div> |
| | | <div class="info-item"> |
| | | <div class="info-label">单位</div> |
| | | <div class="info-value">{{ item.unit || '-' }}</div> |
| | | <div class="info-value">{{ item.unit || "-" }}</div> |
| | | </div> |
| | | <div class="info-item"> |
| | | <div class="info-label">需求日期</div> |
| | | <div class="info-value">{{ item.requiredDate ? dayjs(item.requiredDate).format('YYYY-MM-DD') : '-' }}</div> |
| | | <div class="info-value"> |
| | | {{ |
| | | item.requiredDate |
| | | ? dayjs(item.requiredDate).format("YYYY-MM-DD") |
| | | : "-" |
| | | }} |
| | | </div> |
| | | </div> |
| | | </div> |
| | | </div> |
| | |
| | | { |
| | | name: "绑定工艺路线", |
| | | type: "text", |
| | | showHide: row => !row.processRouteCode && !row.endOrder, |
| | | showHide: row => |
| | | !row.processRouteCode && !row.endOrder && row.status !== 3, |
| | | clickFun: row => { |
| | | openBindRouteDialog(row, "add"); |
| | | }, |
| | |
| | | { |
| | | name: "更换工艺路线", |
| | | type: "text", |
| | | showHide: row => row.processRouteCode && !row.endOrder, |
| | | showHide: row => |
| | | row.processRouteCode && !row.endOrder && row.status !== 3, |
| | | clickFun: row => { |
| | | openBindRouteDialog(row, "change"); |
| | | }, |
| | |
| | | if (!Number.isFinite(n)) return 0; |
| | | if (n <= 0) return 0; |
| | | if (n >= 100) return 100; |
| | | return Math.round(n); |
| | | return parseFloat(n.toFixed(2)); |
| | | }; |
| | | |
| | | // 30/50/80/100 分段颜色:红/橙/蓝/绿 |
| | |
| | | technologyRoutingId: data.technologyRoutingId, |
| | | orderId, |
| | | type: "order", |
| | | editable: !row.endOrder, |
| | | editable: !row.endOrder && row.status !== 3, |
| | | }, |
| | | }); |
| | | } catch (e) { |
| | |
| | | |
| | | .source-table-container { |
| | | margin-top: 20px; |
| | | flex: 1; |
| | | min-height: 0; |
| | | max-height: 500px; |
| | | overflow: auto; |
| | | } |
| | | |
| | | .source-data-cards-container { |
| | | display: flex; |
| | | flex-direction: column; |
| | | gap: 16px; |
| | | max-height: 500px; |
| | | flex: 1; |
| | | min-height: 0; |
| | | max-height: none; |
| | | overflow-y: auto; |
| | | padding: 10px; |
| | | background-color: #f5f7fa; |
| | |
| | | } |
| | | } |
| | | } |
| | | |
| | | .source-data-dialog { |
| | | .el-dialog { |
| | | display: flex; |
| | | flex-direction: column; |
| | | max-height: 90vh; |
| | | } |
| | | |
| | | .el-dialog__body { |
| | | flex: 1; |
| | | min-height: 0; |
| | | display: flex; |
| | | flex-direction: column; |
| | | overflow: hidden; |
| | | } |
| | | } |
| | | </style> |