Browse Source

部件

master
han\hanst 2 weeks ago
parent
commit
664e3a9adc
  1. 24
      src/views/modules/longtron/production-plan-cable-cop-task.vue
  2. 4
      src/views/modules/longtron/production-report-cancel.vue
  3. 6
      src/views/modules/longtron/production-work-report.vue
  4. 18
      src/views/modules/longtron/screen-factory-overview.vue
  5. 10
      src/views/modules/longtron/screen-renovation-progress.vue

24
src/views/modules/longtron/production-plan-cable-cop-task.vue

@ -8,6 +8,7 @@
<el-select v-model="searchData.taskType" clearable placeholder="全部" style="width: 120px"> <el-select v-model="searchData.taskType" clearable placeholder="全部" style="width: 120px">
<el-option label="线缆自制" value="线缆自制"></el-option> <el-option label="线缆自制" value="线缆自制"></el-option>
<el-option label="COP自制" value="COP自制"></el-option> <el-option label="COP自制" value="COP自制"></el-option>
<el-option label="其他" value="其他"></el-option>
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item label="类别"> <el-form-item label="类别">
@ -73,7 +74,7 @@
<el-table-column prop="projectNo" label="项目号" width="140" align="center"></el-table-column> <el-table-column prop="projectNo" label="项目号" width="140" align="center"></el-table-column>
<el-table-column prop="taskType" label="任务类型" width="100" align="center"> <el-table-column prop="taskType" label="任务类型" width="100" align="center">
<template slot-scope="scope"> <template slot-scope="scope">
<el-tag :type="scope.row.taskType === '线缆自制' ? 'primary' : 'success'" size="small">{{ scope.row.taskType }}</el-tag>
<el-tag :type="getTaskTypeTagType(scope.row.taskType)" size="small">{{ scope.row.taskType }}</el-tag>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column prop="category" label="类别" width="90" align="center"></el-table-column> <el-table-column prop="category" label="类别" width="90" align="center"></el-table-column>
@ -177,7 +178,7 @@
</el-tabs> </el-tabs>
</div> </div>
<el-dialog :title="saveHeaderData.orderNo ? '修改线缆/COP自制任务单' : '新增线缆/COP自制任务单'" :visible.sync="setUp.reviewFlag" width="550px" :close-on-click-modal="false" v-drag>
<el-dialog :title="saveHeaderData.orderNo ? '修改部件自制任务单' : '新增部件自制任务单'" :visible.sync="setUp.reviewFlag" width="550px" :close-on-click-modal="false" v-drag>
<el-form <el-form
ref="editForm" ref="editForm"
:model="saveHeaderData" :model="saveHeaderData"
@ -185,7 +186,7 @@
class="edit-form"> class="edit-form">
<el-row :gutter="20"> <el-row :gutter="20">
<el-col :span="12"><el-form-item label="项目号" required><el-input v-model="saveHeaderData.projectNo" :disabled="isDateOnlyEditMode()"></el-input></el-form-item></el-col> <el-col :span="12"><el-form-item label="项目号" required><el-input v-model="saveHeaderData.projectNo" :disabled="isDateOnlyEditMode()"></el-input></el-form-item></el-col>
<el-col :span="12"><el-form-item label="任务类型" required><el-select v-model="saveHeaderData.taskType" style="width: 100%" :disabled="isDateOnlyEditMode()"><el-option label="线缆自制" value="线缆自制"></el-option><el-option label="COP自制" value="COP自制"></el-option></el-select></el-form-item></el-col>
<el-col :span="12"><el-form-item label="任务类型" required><el-select v-model="saveHeaderData.taskType" style="width: 100%" :disabled="isDateOnlyEditMode()"><el-option label="线缆自制" value="线缆自制"></el-option><el-option label="COP自制" value="COP自制"></el-option><el-option label="其他" value="其他"></el-option></el-select></el-form-item></el-col>
</el-row> </el-row>
<el-row :gutter="20"> <el-row :gutter="20">
<el-col :span="12"> <el-col :span="12">
@ -412,8 +413,15 @@ export default {
const status = String(this.saveHeaderData.status || '').trim() const status = String(this.saveHeaderData.status || '').trim()
return !!this.saveHeaderData.orderNo && !!status && status !== '已排产' return !!this.saveHeaderData.orderNo && !!status && status !== '已排产'
}, },
getTaskTypeTagType(taskType) {
if (taskType === '线缆自制') return 'primary'
if (taskType === 'COP自制') return 'success'
if (taskType === '其他' || taskType === '其它') return 'info'
return 'warning'
},
getExpectedNodeCodeByTaskType(taskType) { getExpectedNodeCodeByTaskType(taskType) {
const text = (taskType || '').trim() const text = (taskType || '').trim()
if (text.includes('其他') || text.includes('其它')) return 'otherProduction'
if (text.includes('线缆')) return 'lineProduction' if (text.includes('线缆')) return 'lineProduction'
if (text.toUpperCase().includes('COP')) return 'copProduction' if (text.toUpperCase().includes('COP')) return 'copProduction'
return '' return ''
@ -422,6 +430,7 @@ export default {
const nodeCode = this.getExpectedNodeCodeByTaskType(taskType) const nodeCode = this.getExpectedNodeCodeByTaskType(taskType)
if (nodeCode === 'lineProduction') return '线缆生产' if (nodeCode === 'lineProduction') return '线缆生产'
if (nodeCode === 'copProduction') return 'COP生产' if (nodeCode === 'copProduction') return 'COP生产'
if (nodeCode === 'otherProduction') return '其他'
return '' return ''
}, },
getDefaultNodeListByTaskType(taskType) { getDefaultNodeListByTaskType(taskType) {
@ -430,7 +439,8 @@ export default {
if (!nodeCode || !nodeName) { if (!nodeCode || !nodeName) {
return [ return [
{ nodeCode: 'lineProduction', nodeName: '线缆生产', status: '未开始' }, { nodeCode: 'lineProduction', nodeName: '线缆生产', status: '未开始' },
{ nodeCode: 'copProduction', nodeName: 'COP生产', status: '未开始' }
{ nodeCode: 'copProduction', nodeName: 'COP生产', status: '未开始' },
{ nodeCode: 'otherProduction', nodeName: '其他', status: '未开始' }
] ]
} }
return [{ nodeCode: nodeCode, nodeName: nodeName, status: '未开始' }] return [{ nodeCode: nodeCode, nodeName: nodeName, status: '未开始' }]
@ -577,8 +587,8 @@ export default {
if (row.action && row.action !== '报工完成') { if (row.action && row.action !== '报工完成') {
return false return false
} }
const codeSet = ['lineProduction', 'copProduction']
const nameSet = ['线缆生产', 'COP生产']
const codeSet = ['lineProduction', 'copProduction', 'otherProduction']
const nameSet = ['线缆生产', 'COP生产', '其他']
const nodeCode = String(row.nodeCode || '').trim() const nodeCode = String(row.nodeCode || '').trim()
const nodeName = String(row.nodeName || '').replace(/\s+/g, '') const nodeName = String(row.nodeName || '').replace(/\s+/g, '')
return codeSet.includes(nodeCode) || nameSet.some(item => item.replace(/\s+/g, '') === nodeName) return codeSet.includes(nodeCode) || nameSet.some(item => item.replace(/\s+/g, '') === nodeName)
@ -848,7 +858,7 @@ export default {
this.$message.error(errorMsg) this.$message.error(errorMsg)
return return
} }
const fileName = this.resolveExportFileName(response, '线缆COP任务单')
const fileName = this.resolveExportFileName(response, '部件任务单')
this.downloadExportFile(response.data, fileName) this.downloadExportFile(response.data, fileName)
this.$message.success('导出成功') this.$message.success('导出成功')
} catch (e) { } catch (e) {

4
src/views/modules/longtron/production-report-cancel.vue

@ -7,7 +7,7 @@
<el-form-item label="订单类型"> <el-form-item label="订单类型">
<el-select v-model="searchData.orderType" clearable placeholder="全部" style="width: 150px"> <el-select v-model="searchData.orderType" clearable placeholder="全部" style="width: 150px">
<el-option label="家用电梯" value="HOME_LIFT"></el-option> <el-option label="家用电梯" value="HOME_LIFT"></el-option>
<el-option label="线缆/COP" value="CABLE_COP"></el-option>
<el-option label="部件" value="CABLE_COP"></el-option>
<el-option label="改造项目" value="RENOVATION"></el-option> <el-option label="改造项目" value="RENOVATION"></el-option>
<el-option label="机加工生产" value="MACHINING"></el-option> <el-option label="机加工生产" value="MACHINING"></el-option>
</el-select> </el-select>
@ -117,7 +117,7 @@ export default {
getOrderTypeName(orderType) { getOrderTypeName(orderType) {
const map = { const map = {
HOME_LIFT: '家用电梯', HOME_LIFT: '家用电梯',
CABLE_COP: '线缆/COP',
CABLE_COP: '部件',
RENOVATION: '改造项目', RENOVATION: '改造项目',
MACHINING: '机加工生产' MACHINING: '机加工生产'
} }

6
src/views/modules/longtron/production-work-report.vue

@ -5,7 +5,7 @@
<h2 class="page-title"> <h2 class="page-title">
<i class="el-icon-s-order"></i> 生产报工 <i class="el-icon-s-order"></i> 生产报工
</h2> </h2>
<p class="page-subtitle">家用电梯 / 线缆COP / 改造项目 / 机加工节点报工管理</p>
<p class="page-subtitle">家用电梯 / 部件 / 改造项目 / 机加工节点报工管理</p>
</div> </div>
<div class="header-right"> <div class="header-right">
<div class="stat-cards"> <div class="stat-cards">
@ -42,7 +42,7 @@
<el-select v-model="searchData.orderType" placeholder="请选择" clearable style="width: 150px"> <el-select v-model="searchData.orderType" placeholder="请选择" clearable style="width: 150px">
<el-option label="全部" value=""></el-option> <el-option label="全部" value=""></el-option>
<el-option label="家用电梯" value="HOME_LIFT"></el-option> <el-option label="家用电梯" value="HOME_LIFT"></el-option>
<el-option label="线缆COP" value="CABLE_COP"></el-option>
<el-option label="部件" value="CABLE_COP"></el-option>
<el-option label="改造项目" value="RENOVATION"></el-option> <el-option label="改造项目" value="RENOVATION"></el-option>
<el-option label="机加工生产" value="MACHINING"></el-option> <el-option label="机加工生产" value="MACHINING"></el-option>
</el-select> </el-select>
@ -509,7 +509,7 @@ export default {
getOrderTypeName (orderType) { getOrderTypeName (orderType) {
const map = { const map = {
HOME_LIFT: '家用电梯', HOME_LIFT: '家用电梯',
CABLE_COP: '线缆COP',
CABLE_COP: '部件',
RENOVATION: 'VL2.5升级', RENOVATION: 'VL2.5升级',
MACHINING: '机加工生产' MACHINING: '机加工生产'
} }

18
src/views/modules/longtron/screen-factory-overview.vue

@ -20,7 +20,7 @@
<div class="kpi-value">{{ kpi.renovationFinishRate }}%</div> <div class="kpi-value">{{ kpi.renovationFinishRate }}%</div>
</div> </div>
<div class="kpi-card"> <div class="kpi-card">
<div class="kpi-label">线缆/COP完工比</div>
<div class="kpi-label">部件完工比</div>
<div class="kpi-value">{{ kpi.taskFinishRate }}%</div> <div class="kpi-value">{{ kpi.taskFinishRate }}%</div>
</div> </div>
<div class="kpi-card"> <div class="kpi-card">
@ -71,14 +71,15 @@ import echarts from 'echarts'
import { getFactoryOverviewBoardData } from '@/api/longchuang/productionPlan' import { getFactoryOverviewBoardData } from '@/api/longchuang/productionPlan'
const STATUS_ALLOW_LIST = ['已排产', '进行中', '已完成'] const STATUS_ALLOW_LIST = ['已排产', '进行中', '已完成']
const KEY_NODE_NAME_ORDER = ['仓库配料', 'VL2.5组装', 'VL2.5校验', '打包', '线缆/COP', '机加工生产', '机加工检验']
const KEY_NODE_NAME_ORDER = ['仓库配料', 'VL2.5组装', 'VL2.5校验', '打包', '部件', '机加工生产', '机加工检验']
const NODE_NAME_BY_CODE = { const NODE_NAME_BY_CODE = {
stocking: '仓库配料', stocking: '仓库配料',
assy: 'VL2.5组装', assy: 'VL2.5组装',
inspect: 'VL2.5校验', inspect: 'VL2.5校验',
pack: '打包', pack: '打包',
lineProduction: '线缆/COP',
copProduction: '线缆/COP',
lineProduction: '部件',
copProduction: '部件',
otherProduction: '部件',
machiningProduction: '机加工生产', machiningProduction: '机加工生产',
machiningInspection: '机加工检验', machiningInspection: '机加工检验',
platformDebug: '平台组装/调试', platformDebug: '平台组装/调试',
@ -88,8 +89,9 @@ const NODE_NAME_BY_CODE = {
const NODE_DISPLAY_NAME_ALIAS = { const NODE_DISPLAY_NAME_ALIAS = {
组装: 'VL2.5组装', 组装: 'VL2.5组装',
检验: 'VL2.5校验', 检验: 'VL2.5校验',
线缆生产: '线缆/COP',
COP生产: '线缆/COP'
线缆生产: '部件',
COP生产: '部件',
其他: '部件'
} }
const AVERAGE_CYCLE_CATEGORY_LIST = [ const AVERAGE_CYCLE_CATEGORY_LIST = [
{ key: 'VW', name: 'VW', orderType: 'HOME_LIFT' }, { key: 'VW', name: 'VW', orderType: 'HOME_LIFT' },
@ -347,7 +349,7 @@ export default {
} }
}, },
legend: { textStyle: { color: '#cbe7ff', fontSize: 13 }, data: ['完工比'] }, legend: { textStyle: { color: '#cbe7ff', fontSize: 13 }, data: ['完工比'] },
xAxis: { type: 'category', axisLabel: { color: '#cbe7ff', fontSize: 13 }, data: ['整梯', 'VL2.5升级', '线缆/COP', '机加工'] },
xAxis: { type: 'category', axisLabel: { color: '#cbe7ff', fontSize: 13 }, data: ['整梯', 'VL2.5升级', '部件', '机加工'] },
yAxis: { yAxis: {
type: 'value', type: 'value',
min: 0, min: 0,
@ -386,7 +388,7 @@ export default {
const pieData = [ const pieData = [
{ value: wholeCount, name: '整梯订单' }, { value: wholeCount, name: '整梯订单' },
{ value: renovationCount, name: 'VL2.5升级订单' }, { value: renovationCount, name: 'VL2.5升级订单' },
{ value: taskCount, name: '线缆/COP任务' },
{ value: taskCount, name: '部件任务' },
{ value: machiningCount, name: '机加工任务' } { value: machiningCount, name: '机加工任务' }
] ]
this.chartPie.setOption({ this.chartPie.setOption({

10
src/views/modules/longtron/screen-renovation-progress.vue

@ -3,7 +3,7 @@
<div class="top-bar"> <div class="top-bar">
<div class="header-left"><img class="site-navbar__brand-logo" src="~@/assets/img/lc.png" alt="龙闯电梯"></div> <div class="header-left"><img class="site-navbar__brand-logo" src="~@/assets/img/lc.png" alt="龙闯电梯"></div>
<div class="header-center"> <div class="header-center">
<div class="title">生产进度管理看板 · VL2.5升级/线缆COP/机加工</div>
<div class="title">生产进度管理看板 · VL2.5升级/部件/机加工</div>
</div> </div>
<div class="tools"> <div class="tools">
<span class="time">{{ currentTime }}</span> <span class="time">{{ currentTime }}</span>
@ -19,7 +19,7 @@
</div> </div>
</div> </div>
<div class="summary-card"> <div class="summary-card">
<div class="summary-title">线缆/COP任务</div>
<div class="summary-title">部件任务</div>
<div class="summary-main"> <div class="summary-main">
<span class="summary-rate">{{ cableCopKpi.finishRate }}%</span> <span class="summary-rate">{{ cableCopKpi.finishRate }}%</span>
<span class="summary-rate-label">完工达成率</span> <span class="summary-rate-label">完工达成率</span>
@ -61,7 +61,7 @@
<div class="section-card section-bottom-left"> <div class="section-card section-bottom-left">
<div class="section-header"> <div class="section-header">
<span class="section-title">线缆/COP任务进度</span>
<span class="section-title">部件任务进度</span>
<span class="section-count"> {{ cableCopPage + 1 }}/{{ cableCopPageCount }} · 显示 {{ displayCableCopList.length }} / {{ cableCopList.length }} </span> <span class="section-count"> {{ cableCopPage + 1 }}/{{ cableCopPageCount }} · 显示 {{ displayCableCopList.length }} / {{ cableCopList.length }} </span>
</div> </div>
<el-table class="board-table" :data="displayCableCopList" :height="tableHeightBottom" border stripe> <el-table class="board-table" :data="displayCableCopList" :height="tableHeightBottom" border stripe>
@ -120,7 +120,7 @@ import { getScreenInnerHeight } from '@/utils/screenAdapt'
const STATUS_ALLOW_LIST = ['已排产', '进行中', '已完成'] const STATUS_ALLOW_LIST = ['已排产', '进行中', '已完成']
const STATUS_EXCLUDE_FROM_LIST = ['已完成'] const STATUS_EXCLUDE_FROM_LIST = ['已完成']
const RENOVATION_NODE_TEMPLATE = ['stocking', 'assy', 'inspect', 'pack'] const RENOVATION_NODE_TEMPLATE = ['stocking', 'assy', 'inspect', 'pack']
const CABLE_COP_NODE_TEMPLATE = ['lineProduction', 'copProduction']
const CABLE_COP_NODE_TEMPLATE = ['lineProduction', 'copProduction', 'otherProduction']
const MACHINING_NODE_TEMPLATE = ['machiningProduction', 'machiningInspection'] const MACHINING_NODE_TEMPLATE = ['machiningProduction', 'machiningInspection']
const BOARD_PAGE_SIZE = 6 const BOARD_PAGE_SIZE = 6
@ -336,6 +336,7 @@ export default {
getTaskTypeClass(taskType) { getTaskTypeClass(taskType) {
if (taskType === '线缆自制') return 'type-cable' if (taskType === '线缆自制') return 'type-cable'
if (taskType === 'COP自制') return 'type-cop' if (taskType === 'COP自制') return 'type-cop'
if (taskType === '其他' || taskType === '其它') return 'type-other'
return 'type-default' return 'type-default'
}, },
getStatusTagClass(status) { getStatusTagClass(status) {
@ -403,6 +404,7 @@ export default {
.board-tag{display:inline-flex!important;align-items:center!important;justify-content:center!important;min-width:88px!important;height:29px!important;padding:0 10px!important;border-radius:14px!important;border:1px solid transparent!important;font-size:14px!important;font-weight:600!important;line-height:27px!important;box-sizing:border-box!important} .board-tag{display:inline-flex!important;align-items:center!important;justify-content:center!important;min-width:88px!important;height:29px!important;padding:0 10px!important;border-radius:14px!important;border:1px solid transparent!important;font-size:14px!important;font-weight:600!important;line-height:27px!important;box-sizing:border-box!important}
.board-tag.type-cable{color:#73cfff!important;background:rgba(28,88,136,.32)!important;border-color:rgba(115,207,255,.45)!important} .board-tag.type-cable{color:#73cfff!important;background:rgba(28,88,136,.32)!important;border-color:rgba(115,207,255,.45)!important}
.board-tag.type-cop{color:#7ef0c0!important;background:rgba(31,108,89,.32)!important;border-color:rgba(126,240,192,.45)!important} .board-tag.type-cop{color:#7ef0c0!important;background:rgba(31,108,89,.32)!important;border-color:rgba(126,240,192,.45)!important}
.board-tag.type-other{color:#c8d5ff!important;background:rgba(71,82,129,.34)!important;border-color:rgba(200,213,255,.45)!important}
.board-tag.type-default{color:#d0e5f9!important;background:rgba(80,118,149,.28)!important;border-color:rgba(208,229,249,.34)!important} .board-tag.type-default{color:#d0e5f9!important;background:rgba(80,118,149,.28)!important;border-color:rgba(208,229,249,.34)!important}
.board-tag.status-planned{color:#b9c7d8!important;background:rgba(96,118,141,.28)!important;border-color:rgba(185,199,216,.34)!important} .board-tag.status-planned{color:#b9c7d8!important;background:rgba(96,118,141,.28)!important;border-color:rgba(185,199,216,.34)!important}
.board-tag.status-doing{color:#ffd774!important;background:rgba(120,92,27,.32)!important;border-color:rgba(255,215,116,.45)!important} .board-tag.status-doing{color:#ffd774!important;background:rgba(120,92,27,.32)!important;border-color:rgba(255,215,116,.45)!important}

Loading…
Cancel
Save