Browse Source

样式

master
han\hanst 3 weeks ago
parent
commit
bed5d03a13
  1. 1
      src/api/longchuang/productionPlan.js
  2. 301
      src/views/modules/longtron/production-plan-cable-cop-task.vue
  3. 6
      src/views/modules/longtron/production-plan-home-order.vue
  4. 279
      src/views/modules/longtron/production-plan-renovation-order.vue
  5. 26
      src/views/modules/longtron/production-work-report.vue

1
src/api/longchuang/productionPlan.js

@ -10,6 +10,7 @@ export const deleteHomeLiftOrder = data => createAPI(`/longchuang/productionPlan
// ================= 序号2:线缆/COP自制任务单 =================
export const getCableCopTaskList = data => createAPI(`/longchuang/productionPlan/cableCopTask/list`, 'post', data)
export const saveCableCopTask = data => createAPI(`/longchuang/productionPlan/cableCopTask/save`, 'post', data)
export const finishCableCopTask = data => createAPI(`/longchuang/productionPlan/cableCopTask/finish`, 'post', data)
export const reportCableCopTaskNode = data => createAPI(`/longchuang/productionPlan/cableCopTask/reportNode`, 'post', data)
export const deleteCableCopTask = data => createAPI(`/longchuang/productionPlan/cableCopTask/delete`, 'post', data)

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

@ -33,7 +33,16 @@
</el-form-item>
</el-form>
<el-table class="data-table" :data="dataList" :height="tableHeight" border highlight-current-row v-loading="dataListLoading" style="width: 100%">
<el-table
ref="orderTable"
class="data-table"
:data="dataList"
:height="tableHeight"
border
highlight-current-row
v-loading="dataListLoading"
style="width: 100%"
@current-change="onCurrentRowChange">
<el-table-column type="index" label="#" width="50" align="center"></el-table-column>
<el-table-column prop="taskNo" label="任务单号" width="140" align="center"></el-table-column>
<el-table-column prop="taskType" label="任务类型" width="100" align="center">
@ -82,6 +91,61 @@
style="margin-top: 20px; text-align: right">
</el-pagination>
<div class="detail-tabs-wrap">
<el-tabs v-model="detailTabName" type="border-card">
<el-tab-pane label="节点状态和日志" name="statusLogs">
<div v-if="selectedOrder.orderNo" class="two-column-layout">
<div class="stages-column">
<div class="column-header">
<i class="el-icon-s-order"></i>
<span>节点流程</span>
<span class="progress-badge">{{ selectedOrderProgressPercent }}%</span>
</div>
<div class="stages-list">
<div
v-for="(stage, index) in selectedOrderNodeList"
:key="stage.nodeCode || index"
class="stage-item"
:class="'stage-' + getStageClass(stage.status)">
<div class="stage-icon">
<i :class="getStageIcon(stage.status)"></i>
</div>
<div class="stage-content">
<div class="stage-name">{{ stage.nodeName }}</div>
<div class="stage-meta">
<el-tag :type="getStageTagType(stage.status)" size="mini" effect="plain">{{ stage.status || '未开始' }}</el-tag>
<span class="stage-owner">负责人{{ stage.assigneeUserName || '-' }}</span>
</div>
</div>
</div>
</div>
</div>
<div class="logs-column">
<div class="column-header">
<i class="el-icon-tickets"></i>
<span>操作日志</span>
<span class="logs-count">{{ selectedOrderLogList.length }}</span>
</div>
<div class="logs-table-wrapper">
<el-table :data="selectedOrderLogList" border size="small" class="detail-table" v-loading="detailLogLoading" height="300px">
<el-table-column prop="logTime" label="时间" width="160" align="center"></el-table-column>
<el-table-column prop="action" label="操作" width="95" align="center"></el-table-column>
<el-table-column prop="nodeName" label="节点" width="130" align="center">
<template slot-scope="scope">{{ scope.row.nodeName || scope.row.nodeCode || '-' }}</template>
</el-table-column>
<el-table-column prop="operatorName" label="操作人" width="100" align="center"></el-table-column>
<el-table-column prop="comment" label="备注" min-width="220" show-overflow-tooltip>
<template slot-scope="scope">{{ scope.row.comment || '-' }}</template>
</el-table-column>
</el-table>
</div>
</div>
</div>
<el-empty v-else description="请先选择一条任务记录"></el-empty>
</el-tab-pane>
</el-tabs>
</div>
<el-dialog :title="saveHeaderData.orderNo ? '修改线缆/COP自制任务单' : '新增线缆/COP自制任务单'" :visible.sync="setUp.reviewFlag" width="550px" :close-on-click-modal="false" v-drag>
<el-form
ref="editForm"
@ -151,8 +215,8 @@
<el-button plain class="search-btn" :loading="setUp.reportButton" @click="submitNodeReport">提交报工</el-button>
</el-footer>
</el-dialog>
<el-dialog title="节点负责人分配" :visible.sync="setUp.assignFlag" width="700px" :close-on-click-modal="false" v-drag>
<el-table :data="assignNodeList" border>
<el-dialog title="节点负责人分配" :visible.sync="setUp.assignFlag" width="500px" :close-on-click-modal="false" v-drag>
<el-table :data="assignNodeList" border class="data-table">
<el-table-column prop="nodeName" label="节点" width="180"></el-table-column>
<el-table-column label="负责人">
<template slot-scope="scope">
@ -171,7 +235,7 @@
</template>
<script>
import { deleteCableCopTask, getCableCopTaskList, getNodeAssigneeList, getNodeAssigneeUsers, reportCableCopTaskNode, saveCableCopTask, saveNodeAssignee } from '@/api/longchuang/productionPlan'
import { deleteCableCopTask, finishCableCopTask, getCableCopTaskList, getNodeAssigneeList, getNodeAssigneeUsers, getReportLogList, reportCableCopTaskNode, saveCableCopTask, saveNodeAssignee } from '@/api/longchuang/productionPlan'
export default {
name: 'ProductionPlanCableCopTask',
@ -185,11 +249,15 @@ export default {
dataList: [],
currentAssignOrder: { orderNo: '', orderType: 'CABLE_COP' },
assignNodeList: [],
selectedOrder: {},
detailTabName: 'statusLogs',
selectedOrderLogList: [],
detailLogLoading: false,
pageIndex: 1,
pageSize: 20,
totalPage: 0,
dataListLoading: false,
tableHeight: 520
tableHeight: (window.innerHeight - 320) / 2
}
},
activated() {
@ -206,6 +274,7 @@ export default {
if (data && data.code === 0) {
this.dataList = (data.page.list || []).map(this.normalizeRow)
this.totalPage = data.page.totalCount || 0
this.syncSelectedOrder()
} else this.loadMockData()
}).catch(() => {
this.dataListLoading = false
@ -259,6 +328,47 @@ export default {
}
].map(this.normalizeRow)
this.totalPage = this.dataList.length
this.syncSelectedOrder()
},
syncSelectedOrder() {
if (!this.dataList.length) {
this.selectedOrder = {}
this.selectedOrderLogList = []
return
}
const selectedOrderNo = this.selectedOrder && this.selectedOrder.orderNo
const matched = selectedOrderNo ? this.dataList.find(item => item.orderNo === selectedOrderNo) : null
const current = matched || this.dataList[0]
this.selectedOrder = current
this.$nextTick(() => {
if (this.$refs.orderTable && current) {
this.$refs.orderTable.setCurrentRow(current)
}
})
this.loadSelectedOrderLogList(current)
},
onCurrentRowChange(row) {
if (!row || !row.orderNo) {
this.selectedOrder = {}
this.selectedOrderLogList = []
return
}
this.selectedOrder = row
this.loadSelectedOrderLogList(row)
},
loadSelectedOrderLogList(row) {
if (!row || !row.orderNo) {
this.selectedOrderLogList = []
return
}
this.detailLogLoading = true
getReportLogList({ orderNo: row.orderNo, orderType: 'CABLE_COP' }).then(({ data }) => {
this.detailLogLoading = false
this.selectedOrderLogList = data && data.code === 0 ? (data.rows || []) : []
}).catch(() => {
this.detailLogLoading = false
this.selectedOrderLogList = []
})
},
resetQuery() {
this.searchData = { taskNo: '', taskType: '', sourceProjectNo: '', status: '', planStartDate: '', planEndDate: '', page: 1, limit: 20 }
@ -270,6 +380,7 @@ export default {
},
saveTask() {
if (!this.saveHeaderData.taskNo || !this.saveHeaderData.taskType) return this.$message.warning('请先填写任务单号和任务类型')
this.saveHeaderData.projectNo = this.saveHeaderData.taskNo
this.setUp.saveButton = true
saveCableCopTask(this.saveHeaderData).then(({data}) => {
this.setUp.saveButton = false
@ -376,13 +487,20 @@ export default {
}
},
finishTask(row) {
row.status = '已完成'
row.finishDate = this.dayjs().format('YYYY-MM-DD')
row.reportQty = row.taskQty
row.nodeList = row.nodeList.map(item => ({ ...item, status: '已完成' }))
row.currentNode = '全部完成'
row.nodeDoneCount = row.nodeTotalCount
this.$message.success('已标记为完工')
finishCableCopTask({ orderNo: row.orderNo }).then(({data}) => {
if (data && data.code === 0) {
this.$message.success(data.msg || '完工成功')
this.searchTable()
} else this.$message.error(data.msg || '完工失败')
}).catch(() => {
row.status = '已完成'
row.finishDate = this.dayjs().format('YYYY-MM-DD')
row.reportQty = row.taskQty
row.nodeList = row.nodeList.map(item => ({ ...item, status: '已完成' }))
row.currentNode = '全部完成'
row.nodeDoneCount = row.nodeTotalCount
this.$message.success('后端未完成,已在前端演示完工')
})
},
deleteTask(row) {
this.$confirm('确定删除该任务单吗?', '提示', { confirmButtonText: '确定', cancelButtonText: '取消', type: 'warning' }).then(() => {
@ -402,6 +520,21 @@ export default {
const map = { 已排产: 'info', 进行中: 'warning', 已完成: 'success' }
return map[status] || 'info'
},
getStageClass(status) {
if (status === '已完成') return 'done'
if (status === '进行中') return 'processing'
return 'pending'
},
getStageIcon(status) {
if (status === '已完成') return 'el-icon-check'
if (status === '进行中') return 'el-icon-loading'
return 'el-icon-time'
},
getStageTagType(status) {
if (status === '已完成') return 'success'
if (status === '进行中') return 'warning'
return 'info'
},
sizeChangeHandle(val) {
this.pageSize = val
this.pageIndex = 1
@ -411,6 +544,19 @@ export default {
this.pageIndex = val
this.searchTable()
}
},
computed: {
selectedOrderNodeList() {
return (this.selectedOrder && this.selectedOrder.nodeList) ? this.selectedOrder.nodeList : []
},
selectedOrderProgressPercent() {
const total = this.selectedOrderNodeList.length
if (!total) {
return 0
}
const done = this.selectedOrderNodeList.filter(item => item.status === '已完成').length
return Math.round((done * 100) / total)
}
}
}
</script>
@ -420,7 +566,10 @@ export default {
background-color: #fff;
border-radius: 4px;
}
.data-table >>> .cell {
line-height: 20px;
height: 20px;
}
.data-table >>> .el-table__header-wrapper th,
.data-table >>> .el-table__fixed-header-wrapper th {
background-color: #f5f7fa !important;
@ -520,4 +669,130 @@ export default {
margin-left: 5px;
margin-top: -5px;
}
.detail-tabs-wrap {
margin-top: 12px;
background-color: #fff;
border-radius: 4px;
}
.detail-table {
width: 100%;
}
.detail-table >>> .el-table__header-wrapper th,
.detail-table >>> .el-table__fixed-header-wrapper th {
background-color: #f5f7fa !important;
color: #333;
font-weight: 600;
border-color: #ebeef5;
}
.two-column-layout {
display: flex;
gap: 12px;
}
.stages-column {
width: 38%;
min-width: 320px;
border: 1px solid #ebeef5;
border-radius: 4px;
background: #fff;
}
.logs-column {
flex: 1;
border: 1px solid #ebeef5;
border-radius: 4px;
background: #fff;
}
.column-header {
height: 40px;
display: flex;
align-items: center;
gap: 6px;
padding: 0 12px;
border-bottom: 1px solid #ebeef5;
font-weight: 600;
color: #303133;
}
.progress-badge,
.logs-count {
margin-left: auto;
color: #409eff;
font-size: 12px;
font-weight: 500;
}
.stages-list {
max-height: 300px;
overflow-y: auto;
padding: 10px;
}
.stage-item {
display: flex;
align-items: flex-start;
gap: 10px;
padding: 4px 8px;
border-radius: 4px;
}
.stage-item + .stage-item {
margin-top: 2px;
}
.stage-item.stage-done {
background: #f0f9eb;
}
.stage-item.stage-processing {
background: #fdf6ec;
}
.stage-item.stage-pending {
background: #f5f7fa;
}
.stage-icon {
width: 22px;
height: 22px;
border-radius: 50%;
display: flex;
align-items: center;
justify-content: center;
font-size: 13px;
background: #fff;
border: 1px solid #dcdfe6;
color: #606266;
}
.stage-content {
flex: 1;
}
.stage-name {
font-size: 13px;
color: #303133;
line-height: 20px;
}
.stage-meta {
margin-top: 6px;
display: flex;
align-items: center;
gap: 8px;
}
.stage-owner {
color: #606266;
font-size: 12px;
}
.logs-table-wrapper {
padding: 8px;
}
</style>

6
src/views/modules/longtron/production-plan-home-order.vue

@ -211,8 +211,8 @@
</el-footer>
</el-dialog>
<el-dialog title="节点负责人分配" :visible.sync="setUp.assignFlag" width="700px" :close-on-click-modal="false" v-drag>
<el-table :data="assignNodeList" border class="board-table">
<el-dialog title="节点负责人分配" :visible.sync="setUp.assignFlag" width="500px" :close-on-click-modal="false" v-drag>
<el-table :data="assignNodeList" border class="data-table">
<el-table-column prop="nodeName" label="节点" width="180"></el-table-column>
<el-table-column label="负责人">
<template slot-scope="scope">
@ -528,7 +528,7 @@ export default {
background-color: #fff;
border-radius: 4px;
}
.board-table >>> .cell {
.data-table >>> .cell {
line-height: 20px;
height: 20px;
}

279
src/views/modules/longtron/production-plan-renovation-order.vue

@ -30,7 +30,16 @@
</el-form-item>
</el-form>
<el-table class="data-table" :data="dataList" :height="tableHeight" border highlight-current-row v-loading="dataListLoading" style="width: 100%">
<el-table
ref="orderTable"
class="data-table"
:data="dataList"
:height="tableHeight"
border
highlight-current-row
v-loading="dataListLoading"
style="width: 100%"
@current-change="onCurrentRowChange">
<el-table-column type="index" label="#" width="50" align="center"></el-table-column>
<el-table-column prop="projectNo" label="项目号" width="120" align="center"></el-table-column>
<el-table-column prop="modelNo" label="型号" width="130" align="center"></el-table-column>
@ -74,6 +83,61 @@
style="margin-top: 20px; text-align: right">
</el-pagination>
<div class="detail-tabs-wrap">
<el-tabs v-model="detailTabName" type="border-card">
<el-tab-pane label="节点状态和日志" name="statusLogs">
<div v-if="selectedOrder.orderNo" class="two-column-layout">
<div class="stages-column">
<div class="column-header">
<i class="el-icon-s-order"></i>
<span>节点流程</span>
<span class="progress-badge">{{ selectedOrderProgressPercent }}%</span>
</div>
<div class="stages-list">
<div
v-for="(stage, index) in selectedOrderNodeList"
:key="stage.nodeCode || index"
class="stage-item"
:class="'stage-' + getStageClass(stage.status)">
<div class="stage-icon">
<i :class="getStageIcon(stage.status)"></i>
</div>
<div class="stage-content">
<div class="stage-name">{{ stage.nodeName }}</div>
<div class="stage-meta">
<el-tag :type="getStageTagType(stage.status)" size="mini" effect="plain">{{ stage.status || '未开始' }}</el-tag>
<span class="stage-owner">负责人{{ stage.assigneeUserName || '-' }}</span>
</div>
</div>
</div>
</div>
</div>
<div class="logs-column">
<div class="column-header">
<i class="el-icon-tickets"></i>
<span>操作日志</span>
<span class="logs-count">{{ selectedOrderLogList.length }}</span>
</div>
<div class="logs-table-wrapper">
<el-table :data="selectedOrderLogList" border size="small" class="detail-table" v-loading="detailLogLoading" height="300px">
<el-table-column prop="logTime" label="时间" width="160" align="center"></el-table-column>
<el-table-column prop="action" label="操作" width="95" align="center"></el-table-column>
<el-table-column prop="nodeName" label="节点" width="130" align="center">
<template slot-scope="scope">{{ scope.row.nodeName || scope.row.nodeCode || '-' }}</template>
</el-table-column>
<el-table-column prop="operatorName" label="操作人" width="100" align="center"></el-table-column>
<el-table-column prop="comment" label="备注" min-width="220" show-overflow-tooltip>
<template slot-scope="scope">{{ scope.row.comment || '-' }}</template>
</el-table-column>
</el-table>
</div>
</div>
</div>
<el-empty v-else description="请先选择一条订单记录"></el-empty>
</el-tab-pane>
</el-tabs>
</div>
<el-dialog :title="saveHeaderData.orderNo ? '修改改造项目订单' : '新增改造项目订单'" :visible.sync="setUp.reviewFlag" width="550px" :close-on-click-modal="false" v-drag>
<el-form
ref="editForm"
@ -143,8 +207,8 @@
<el-button plain class="search-btn" :loading="setUp.reportButton" @click="submitNodeReport">提交报工</el-button>
</el-footer>
</el-dialog>
<el-dialog title="节点负责人分配" :visible.sync="setUp.assignFlag" width="700px" :close-on-click-modal="false" v-drag>
<el-table :data="assignNodeList" border>
<el-dialog title="节点负责人分配" :visible.sync="setUp.assignFlag" width="500px" :close-on-click-modal="false" v-drag>
<el-table :data="assignNodeList" border class="data-table">
<el-table-column prop="nodeName" label="节点" width="180"></el-table-column>
<el-table-column label="负责人">
<template slot-scope="scope">
@ -163,7 +227,7 @@
</template>
<script>
import { deleteRenovationOrder, finishRenovationOrder, getNodeAssigneeList, getNodeAssigneeUsers, getRenovationOrderList, reportRenovationOrderNode, saveNodeAssignee, saveRenovationOrder } from '@/api/longchuang/productionPlan'
import { deleteRenovationOrder, finishRenovationOrder, getNodeAssigneeList, getNodeAssigneeUsers, getRenovationOrderList, getReportLogList, reportRenovationOrderNode, saveNodeAssignee, saveRenovationOrder } from '@/api/longchuang/productionPlan'
export default {
name: 'ProductionPlanRenovationOrder',
@ -177,11 +241,15 @@ export default {
dataList: [],
currentAssignOrder: { orderNo: '', orderType: 'RENOVATION' },
assignNodeList: [],
selectedOrder: {},
detailTabName: 'statusLogs',
selectedOrderLogList: [],
detailLogLoading: false,
pageIndex: 1,
pageSize: 20,
totalPage: 0,
dataListLoading: false,
tableHeight: 520
tableHeight: (window.innerHeight - 320) / 2
}
},
activated() {
@ -198,6 +266,7 @@ export default {
if (data && data.code === 0) {
this.dataList = (data.page.list || []).map(this.normalizeRow)
this.totalPage = data.page.totalCount || 0
this.syncSelectedOrder()
} else this.loadMockData()
}).catch(() => {
this.dataListLoading = false
@ -253,6 +322,47 @@ export default {
}
].map(this.normalizeRow)
this.totalPage = this.dataList.length
this.syncSelectedOrder()
},
syncSelectedOrder() {
if (!this.dataList.length) {
this.selectedOrder = {}
this.selectedOrderLogList = []
return
}
const selectedOrderNo = this.selectedOrder && this.selectedOrder.orderNo
const matched = selectedOrderNo ? this.dataList.find(item => item.orderNo === selectedOrderNo) : null
const current = matched || this.dataList[0]
this.selectedOrder = current
this.$nextTick(() => {
if (this.$refs.orderTable && current) {
this.$refs.orderTable.setCurrentRow(current)
}
})
this.loadSelectedOrderLogList(current)
},
onCurrentRowChange(row) {
if (!row || !row.orderNo) {
this.selectedOrder = {}
this.selectedOrderLogList = []
return
}
this.selectedOrder = row
this.loadSelectedOrderLogList(row)
},
loadSelectedOrderLogList(row) {
if (!row || !row.orderNo) {
this.selectedOrderLogList = []
return
}
this.detailLogLoading = true
getReportLogList({ orderNo: row.orderNo, orderType: 'RENOVATION' }).then(({ data }) => {
this.detailLogLoading = false
this.selectedOrderLogList = data && data.code === 0 ? (data.rows || []) : []
}).catch(() => {
this.detailLogLoading = false
this.selectedOrderLogList = []
})
},
resetQuery() {
this.searchData = { projectNo: '', modelNo: '', color: '', status: '', deliveryStartDate: '', deliveryEndDate: '', page: 1, limit: 20 }
@ -402,6 +512,21 @@ export default {
const map = { 已排产: 'info', 进行中: 'warning', 已完成: 'success' }
return map[status] || 'info'
},
getStageClass(status) {
if (status === '已完成') return 'done'
if (status === '进行中') return 'processing'
return 'pending'
},
getStageIcon(status) {
if (status === '已完成') return 'el-icon-check'
if (status === '进行中') return 'el-icon-loading'
return 'el-icon-time'
},
getStageTagType(status) {
if (status === '已完成') return 'success'
if (status === '进行中') return 'warning'
return 'info'
},
sizeChangeHandle(val) {
this.pageSize = val
this.pageIndex = 1
@ -411,6 +536,19 @@ export default {
this.pageIndex = val
this.getDataList()
}
},
computed: {
selectedOrderNodeList() {
return (this.selectedOrder && this.selectedOrder.nodeList) ? this.selectedOrder.nodeList : []
},
selectedOrderProgressPercent() {
const total = this.selectedOrderNodeList.length
if (!total) {
return 0
}
const done = this.selectedOrderNodeList.filter(item => item.status === '已完成').length
return Math.round((done * 100) / total)
}
}
}
</script>
@ -420,7 +558,10 @@ export default {
background-color: #fff;
border-radius: 4px;
}
.data-table >>> .cell {
line-height: 20px;
height: 20px;
}
.data-table >>> .el-table__header-wrapper th,
.data-table >>> .el-table__fixed-header-wrapper th {
background-color: #f5f7fa !important;
@ -520,4 +661,130 @@ export default {
margin-left: 5px;
margin-top: -5px;
}
.detail-tabs-wrap {
margin-top: 12px;
background-color: #fff;
border-radius: 4px;
}
.detail-table {
width: 100%;
}
.detail-table >>> .el-table__header-wrapper th,
.detail-table >>> .el-table__fixed-header-wrapper th {
background-color: #f5f7fa !important;
color: #333;
font-weight: 600;
border-color: #ebeef5;
}
.two-column-layout {
display: flex;
gap: 12px;
}
.stages-column {
width: 38%;
min-width: 320px;
border: 1px solid #ebeef5;
border-radius: 4px;
background: #fff;
}
.logs-column {
flex: 1;
border: 1px solid #ebeef5;
border-radius: 4px;
background: #fff;
}
.column-header {
height: 40px;
display: flex;
align-items: center;
gap: 6px;
padding: 0 12px;
border-bottom: 1px solid #ebeef5;
font-weight: 600;
color: #303133;
}
.progress-badge,
.logs-count {
margin-left: auto;
color: #409eff;
font-size: 12px;
font-weight: 500;
}
.stages-list {
max-height: 300px;
overflow-y: auto;
padding: 10px;
}
.stage-item {
display: flex;
align-items: flex-start;
gap: 10px;
padding: 4px 8px;
border-radius: 4px;
}
.stage-item + .stage-item {
margin-top: 2px;
}
.stage-item.stage-done {
background: #f0f9eb;
}
.stage-item.stage-processing {
background: #fdf6ec;
}
.stage-item.stage-pending {
background: #f5f7fa;
}
.stage-icon {
width: 22px;
height: 22px;
border-radius: 50%;
display: flex;
align-items: center;
justify-content: center;
font-size: 13px;
background: #fff;
border: 1px solid #dcdfe6;
color: #606266;
}
.stage-content {
flex: 1;
}
.stage-name {
font-size: 13px;
color: #303133;
line-height: 20px;
}
.stage-meta {
margin-top: 6px;
display: flex;
align-items: center;
gap: 8px;
}
.stage-owner {
color: #606266;
font-size: 12px;
}
.logs-table-wrapper {
padding: 8px;
}
</style>

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

@ -340,7 +340,7 @@ export default {
const map = {
HOME_LIFT: '家用电梯',
CABLE_COP: '线缆COP',
RENOVATION: '改造项目'
RENOVATION: 'VL2.5升级'
}
return map[orderType] || orderType || '-'
},
@ -487,7 +487,7 @@ export default {
display: flex;
justify-content: space-between;
align-items: center;
margin-bottom: 15px;
margin-bottom: 8px;
padding: 5px 20px;
background: #FFFFFF;
border-radius: 4px;
@ -568,7 +568,7 @@ export default {
}
.search-section {
margin-bottom: 15px;
margin-bottom: 8px;
background: #FFFFFF;
border-radius: 4px;
border: 1px solid #EBEEF5;
@ -582,8 +582,8 @@ export default {
.search-section >>> .el-collapse-item__header {
padding: 0 15px;
height: 45px;
line-height: 45px;
height: 35px;
line-height: 35px;
background: white;
border-bottom: 1px solid #ebeef5;
font-size: 13px;
@ -613,7 +613,7 @@ export default {
.report-card {
background: white;
border-radius: 4px;
padding: 16px;
padding: 8px 16px;
border: 1px solid #EBEEF5;
transition: all 0.3s ease;
position: relative;
@ -649,8 +649,8 @@ export default {
display: flex;
justify-content: space-between;
align-items: center;
margin-bottom: 12px;
padding-bottom: 10px;
margin-bottom: 4px;
padding-bottom: 6px;
border-bottom: 1px solid #EBEEF5;
}
@ -675,7 +675,7 @@ export default {
font-size: 15px;
font-weight: 600;
color: #303133;
margin: 0 0 12px 0;
margin: 0 0 6px 0;
display: flex;
align-items: center;
gap: 6px;
@ -688,7 +688,7 @@ export default {
.card-details {
display: flex;
flex-direction: column;
gap: 8px;
gap: 4px;
}
.detail-row {
@ -720,7 +720,7 @@ export default {
}
.node-section {
margin-top: 14px;
margin-top: 4px;
border-top: 1px dashed #EBEEF5;
padding-top: 10px;
}
@ -728,14 +728,14 @@ export default {
.node-title {
font-size: 12px;
color: #909399;
margin-bottom: 8px;
margin-bottom: 2px;
}
.node-row {
display: flex;
justify-content: space-between;
align-items: center;
padding: 6px 8px;
padding: 4px 8px;
border-radius: 4px;
}

Loading…
Cancel
Save