Browse Source

可以选择手动还是自动分配人员

master
han\hanst 1 month ago
parent
commit
52e847a285
  1. 53
      src/views/modules/longchuang/production-plan-cable-cop-task.vue
  2. 61
      src/views/modules/longchuang/production-plan-home-order.vue
  3. 55
      src/views/modules/longchuang/production-plan-renovation-order.vue
  4. 10
      src/views/modules/longchuang/production-work-report.vue

53
src/views/modules/longchuang/production-plan-cable-cop-task.vue

@ -64,7 +64,7 @@
<el-table-column label="操作" width="300" align="center"> <el-table-column label="操作" width="300" align="center">
<template slot-scope="scope"> <template slot-scope="scope">
<a type="text" @click="openEditDialog(scope.row)">修改</a> <a type="text" @click="openEditDialog(scope.row)">修改</a>
<a type="text" @click="openAssignDialog(scope.row)" :disabled="!scope.row.id">分配人员</a>
<a type="text" @click="openAssignDialog(scope.row)" :disabled="!scope.row.orderNo">分配人员</a>
<a type="text" @click="openReportDialog(scope.row)" :disabled="scope.row.status === '已完成'">节点报工</a> <a type="text" @click="openReportDialog(scope.row)" :disabled="scope.row.status === '已完成'">节点报工</a>
<a type="text" @click="finishTask(scope.row)" :disabled="scope.row.status === '已完成'">完工</a> <a type="text" @click="finishTask(scope.row)" :disabled="scope.row.status === '已完成'">完工</a>
<a type="text" style="color:#F56C6C" @click="deleteTask(scope.row)">删除</a> <a type="text" style="color:#F56C6C" @click="deleteTask(scope.row)">删除</a>
@ -83,7 +83,7 @@
style="margin-top: 20px; text-align: right"> style="margin-top: 20px; text-align: right">
</el-pagination> </el-pagination>
<el-dialog :title="saveHeaderData.id ? '修改线缆/COP自制任务单' : '新增线缆/COP自制任务单'" :visible.sync="setUp.reviewFlag" width="720px" :close-on-click-modal="false" v-drag>
<el-dialog :title="saveHeaderData.orderNo ? '修改线缆/COP自制任务单' : '新增线缆/COP自制任务单'" :visible.sync="setUp.reviewFlag" width="720px" :close-on-click-modal="false" v-drag>
<el-form <el-form
ref="editForm" ref="editForm"
:model="saveHeaderData" :model="saveHeaderData"
@ -101,6 +101,15 @@
<el-col :span="12"><el-form-item label="任务数量"><el-input v-model="saveHeaderData.taskQty" :min="1" :max="9999" style="width: 100%"></el-input></el-form-item></el-col> <el-col :span="12"><el-form-item label="任务数量"><el-input v-model="saveHeaderData.taskQty" :min="1" :max="9999" style="width: 100%"></el-input></el-form-item></el-col>
<el-col :span="12"><el-form-item label="计划完成日期"><el-date-picker v-model="saveHeaderData.planFinishDate" type="date" value-format="yyyy-MM-dd" style="width: 100%"></el-date-picker></el-form-item></el-col> <el-col :span="12"><el-form-item label="计划完成日期"><el-date-picker v-model="saveHeaderData.planFinishDate" type="date" value-format="yyyy-MM-dd" style="width: 100%"></el-date-picker></el-form-item></el-col>
</el-row> </el-row>
<el-form-item label="人员分配策略">
<el-switch
v-model="saveHeaderData.autoAssignAllUsers"
:active-value="true"
:inactive-value="false"
active-text="创建后默认分配对应角色全部人员"
inactive-text="手动分配人员">
</el-switch>
</el-form-item>
</el-form> </el-form>
<el-footer style="height: 40px; margin-top: 50px; text-align: center"> <el-footer style="height: 40px; margin-top: 50px; text-align: center">
<el-button plain class="reset-btn" @click="setUp.reviewFlag = false">取消</el-button> <el-button plain class="reset-btn" @click="setUp.reviewFlag = false">取消</el-button>
@ -152,11 +161,11 @@ export default {
return { return {
searchData: { taskNo: '', taskType: '', sourceProjectNo: '', status: '', planStartDate: '', planEndDate: '', page: 1, limit: 20 }, searchData: { taskNo: '', taskType: '', sourceProjectNo: '', status: '', planStartDate: '', planEndDate: '', page: 1, limit: 20 },
saveHeaderData: {}, saveHeaderData: {},
reportData: { id: 0, taskNo: '', nodeCode: '', reportQty: 1, remark: '' },
reportData: { orderNo: '', taskNo: '', nodeCode: '', reportQty: 1, remark: '' },
reportNodeOptions: [], reportNodeOptions: [],
setUp: { reviewFlag: false, reportFlag: false, assignFlag: false, saveButton: false, reportButton: false, assignButton: false }, setUp: { reviewFlag: false, reportFlag: false, assignFlag: false, saveButton: false, reportButton: false, assignButton: false },
dataList: [], dataList: [],
currentAssignOrder: { id: 0, orderType: 'CABLE_COP' },
currentAssignOrder: { orderNo: '', orderType: 'CABLE_COP' },
assignNodeList: [], assignNodeList: [],
pageIndex: 1, pageIndex: 1,
pageSize: 20, pageSize: 20,
@ -190,18 +199,19 @@ export default {
const done = list.filter(item => item.status === '已完成').length const done = list.filter(item => item.status === '已完成').length
const currentNode = (list.find(item => item.status !== '已完成') || {}).nodeName || '全部完成' const currentNode = (list.find(item => item.status !== '已完成') || {}).nodeName || '全部完成'
const assigneeSummary = list.filter(item => item.assigneeUserName).map(item => `${item.nodeName}:${item.assigneeUserName}`).join(';') const assigneeSummary = list.filter(item => item.assigneeUserName).map(item => `${item.nodeName}:${item.assigneeUserName}`).join(';')
return { ...row, nodeList: list, nodeDoneCount: done, nodeTotalCount: list.length, currentNode: row.currentNode || currentNode, reportQty: row.reportQty || 0, assigneeSummary: assigneeSummary || '-' }
return { ...row, autoAssignAllUsers: !!row.autoAssignAllUsers, nodeList: list, nodeDoneCount: done, nodeTotalCount: list.length, currentNode: row.currentNode || currentNode, reportQty: row.reportQty || 0, assigneeSummary: assigneeSummary || '-' }
}, },
loadMockData() { loadMockData() {
this.dataList = [ this.dataList = [
{ {
id: 1,
orderNo: 'MOCK-CABLE-001',
taskNo: 'TASK-XL-202604-001', taskNo: 'TASK-XL-202604-001',
taskType: '线缆自制', taskType: '线缆自制',
sourceProjectNo: 'LC-202604-001', sourceProjectNo: 'LC-202604-001',
modelNo: 'LC-HOME-820', modelNo: 'LC-HOME-820',
taskQty: 6, taskQty: 6,
reportQty: 2, reportQty: 2,
autoAssignAllUsers: false,
planFinishDate: '2026-04-20', planFinishDate: '2026-04-20',
finishDate: '', finishDate: '',
status: '进行中', status: '进行中',
@ -211,13 +221,14 @@ export default {
] ]
}, },
{ {
id: 2,
orderNo: 'MOCK-CABLE-002',
taskNo: 'TASK-COP-202604-002', taskNo: 'TASK-COP-202604-002',
taskType: 'COP自制', taskType: 'COP自制',
sourceProjectNo: 'LC-202604-002', sourceProjectNo: 'LC-202604-002',
modelNo: 'LC-HOME-1050', modelNo: 'LC-HOME-1050',
taskQty: 8, taskQty: 8,
reportQty: 0, reportQty: 0,
autoAssignAllUsers: false,
planFinishDate: '2026-04-22', planFinishDate: '2026-04-22',
finishDate: '', finishDate: '',
status: '已排产', status: '已排产',
@ -234,7 +245,7 @@ export default {
this.searchTable('Y') this.searchTable('Y')
}, },
openEditDialog(row) { openEditDialog(row) {
this.saveHeaderData = row ? { ...row } : { id: 0, taskNo: '', taskType: '线缆自制', sourceProjectNo: '', modelNo: '', taskQty: 1, reportQty: 0, planFinishDate: '', status: '已排产', nodeList: [] }
this.saveHeaderData = row ? { ...row, autoAssignAllUsers: !!row.autoAssignAllUsers } : { orderNo: '', taskNo: '', taskType: '线缆自制', sourceProjectNo: '', modelNo: '', taskQty: 1, reportQty: 0, planFinishDate: '', status: '已排产', autoAssignAllUsers: false, nodeList: [] }
this.setUp.reviewFlag = true this.setUp.reviewFlag = true
}, },
saveTask() { saveTask() {
@ -249,11 +260,11 @@ export default {
} else this.$message.error(data.msg || '保存失败') } else this.$message.error(data.msg || '保存失败')
}).catch(() => { }).catch(() => {
this.setUp.saveButton = false this.setUp.saveButton = false
const id = this.saveHeaderData.id || Date.now()
const index = this.dataList.findIndex(item => item.id === id)
const orderNo = this.saveHeaderData.orderNo || String(Date.now())
const index = this.dataList.findIndex(item => item.orderNo === orderNo)
const saveData = this.normalizeRow({ const saveData = this.normalizeRow({
...this.saveHeaderData, ...this.saveHeaderData,
id: id,
orderNo: orderNo,
nodeList: this.saveHeaderData.nodeList && this.saveHeaderData.nodeList.length ? this.saveHeaderData.nodeList : [ nodeList: this.saveHeaderData.nodeList && this.saveHeaderData.nodeList.length ? this.saveHeaderData.nodeList : [
{ nodeCode: 'lineProduction', nodeName: '线缆生产', status: '未开始' }, { nodeCode: 'lineProduction', nodeName: '线缆生产', status: '未开始' },
{ nodeCode: 'copProduction', nodeName: 'COP生产', status: '未开始' } { nodeCode: 'copProduction', nodeName: 'COP生产', status: '未开始' }
@ -268,13 +279,13 @@ export default {
}, },
openReportDialog(row) { openReportDialog(row) {
this.reportNodeOptions = (row.nodeList || []).filter(item => item.status !== '已完成') this.reportNodeOptions = (row.nodeList || []).filter(item => item.status !== '已完成')
this.reportData = { id: row.id, taskNo: row.taskNo, nodeCode: '', reportQty: 1, remark: '' }
this.reportData = { orderNo: row.orderNo, taskNo: row.taskNo, nodeCode: '', reportQty: 1, remark: '' }
this.setUp.reportFlag = true this.setUp.reportFlag = true
}, },
openAssignDialog(row) { openAssignDialog(row) {
if (!row.id) return this.$message.warning('请先保存任务单后再分配人员')
this.currentAssignOrder = { id: row.id, orderType: 'CABLE_COP' }
getNodeAssigneeList({ orderId: row.id, orderType: 'CABLE_COP' }).then(({ data }) => {
if (!row.orderNo) return this.$message.warning('请先保存任务单后再分配人员')
this.currentAssignOrder = { orderNo: row.orderNo, orderType: 'CABLE_COP' }
getNodeAssigneeList({ orderNo: row.orderNo, orderType: 'CABLE_COP' }).then(({ data }) => {
const assignRows = data && data.code === 0 ? (data.rows || []) : [] const assignRows = data && data.code === 0 ? (data.rows || []) : []
this.assignNodeList = assignRows.map(item => ({ ...item, assigneeUserIdList: item.assigneeUserIdList || [], userOptions: [] })) this.assignNodeList = assignRows.map(item => ({ ...item, assigneeUserIdList: item.assigneeUserIdList || [], userOptions: [] }))
const requests = this.assignNodeList.map(item => const requests = this.assignNodeList.map(item =>
@ -295,7 +306,7 @@ export default {
assigneeUserIdList: item.assigneeUserIdList || [] assigneeUserIdList: item.assigneeUserIdList || []
})) }))
saveNodeAssignee({ saveNodeAssignee({
orderId: this.currentAssignOrder.id,
orderNo: this.currentAssignOrder.orderNo,
orderType: this.currentAssignOrder.orderType, orderType: this.currentAssignOrder.orderType,
assigneeList: assigneeList assigneeList: assigneeList
}).then(({ data }) => { }).then(({ data }) => {
@ -323,13 +334,13 @@ export default {
} else this.$message.error(data.msg || '报工失败') } else this.$message.error(data.msg || '报工失败')
}).catch(() => { }).catch(() => {
this.setUp.reportButton = false this.setUp.reportButton = false
this.simulateNodeReport(this.reportData.id, this.reportData.nodeCode, this.reportData.reportQty)
this.simulateNodeReport(this.reportData.orderNo, this.reportData.nodeCode, this.reportData.reportQty)
this.setUp.reportFlag = false this.setUp.reportFlag = false
this.$message.success('后端未完成,已在前端演示节点报工') this.$message.success('后端未完成,已在前端演示节点报工')
}) })
}, },
simulateNodeReport(id, nodeCode, qty) {
const row = this.dataList.find(item => item.id === id)
simulateNodeReport(orderNo, nodeCode, qty) {
const row = this.dataList.find(item => item.orderNo === orderNo)
if (!row) return if (!row) return
const node = row.nodeList.find(item => item.nodeCode === nodeCode) const node = row.nodeList.find(item => item.nodeCode === nodeCode)
if (!node) return if (!node) return
@ -355,13 +366,13 @@ export default {
}, },
deleteTask(row) { deleteTask(row) {
this.$confirm('确定删除该任务单吗?', '提示', { confirmButtonText: '确定', cancelButtonText: '取消', type: 'warning' }).then(() => { this.$confirm('确定删除该任务单吗?', '提示', { confirmButtonText: '确定', cancelButtonText: '取消', type: 'warning' }).then(() => {
deleteCableCopTask({ id: row.id }).then(({data}) => {
deleteCableCopTask({ orderNo: row.orderNo }).then(({data}) => {
if (data && data.code === 0) { if (data && data.code === 0) {
this.$message.success(data.msg || '删除成功') this.$message.success(data.msg || '删除成功')
this.searchTable() this.searchTable()
} else this.$message.error(data.msg || '删除失败') } else this.$message.error(data.msg || '删除失败')
}).catch(() => { }).catch(() => {
this.dataList = this.dataList.filter(item => item.id !== row.id)
this.dataList = this.dataList.filter(item => item.orderNo !== row.orderNo)
this.totalPage = this.dataList.length this.totalPage = this.dataList.length
this.$message.success('后端未完成,已在前端演示删除') this.$message.success('后端未完成,已在前端演示删除')
}) })

61
src/views/modules/longchuang/production-plan-home-order.vue

@ -65,7 +65,7 @@
<el-table-column label="操作" width="300" align="center" > <el-table-column label="操作" width="300" align="center" >
<template slot-scope="scope"> <template slot-scope="scope">
<a type="text" @click="openEditDialog(scope.row)">修改</a> <a type="text" @click="openEditDialog(scope.row)">修改</a>
<a type="text" @click="openAssignDialog(scope.row)" :disabled="!scope.row.id">分配人员</a>
<a type="text" @click="openAssignDialog(scope.row)" :disabled="!scope.row.orderNo">分配人员</a>
<a type="text" @click="finishOrder(scope.row)" :disabled="scope.row.status === '已完成'">完工</a> <a type="text" @click="finishOrder(scope.row)" :disabled="scope.row.status === '已完成'">完工</a>
<a type="text" style="color:#F56C6C" @click="deleteOrder(scope.row)">删除</a> <a type="text" style="color:#F56C6C" @click="deleteOrder(scope.row)">删除</a>
</template> </template>
@ -86,7 +86,7 @@
<div class="detail-tabs-wrap"> <div class="detail-tabs-wrap">
<el-tabs v-model="detailTabName" type="border-card"> <el-tabs v-model="detailTabName" type="border-card">
<el-tab-pane label="节点状态和日志" name="statusLogs"> <el-tab-pane label="节点状态和日志" name="statusLogs">
<div v-if="selectedOrder.id" class="two-column-layout">
<div v-if="selectedOrder.orderNo" class="two-column-layout">
<div class="stages-column"> <div class="stages-column">
<div class="column-header"> <div class="column-header">
<i class="el-icon-s-order"></i> <i class="el-icon-s-order"></i>
@ -138,7 +138,7 @@
</el-tabs> </el-tabs>
</div> </div>
<el-dialog :title="saveHeaderData.id ? '修改家用梯销售订单' : '新增家用梯销售订单'" :visible.sync="setUp.reviewFlag" width="700px" :close-on-click-modal="false" v-drag>
<el-dialog :title="saveHeaderData.orderNo ? '修改家用梯销售订单' : '新增家用梯销售订单'" :visible.sync="setUp.reviewFlag" width="700px" :close-on-click-modal="false" v-drag>
<el-form <el-form
ref="editForm" ref="editForm"
:model="saveHeaderData" :model="saveHeaderData"
@ -156,6 +156,15 @@
<el-col :span="12"><el-form-item label="计划发货日期"><el-date-picker v-model="saveHeaderData.planDeliveryDate" type="date" value-format="yyyy-MM-dd" style="width: 100%"></el-date-picker></el-form-item></el-col> <el-col :span="12"><el-form-item label="计划发货日期"><el-date-picker v-model="saveHeaderData.planDeliveryDate" type="date" value-format="yyyy-MM-dd" style="width: 100%"></el-date-picker></el-form-item></el-col>
<el-col :span="12"><el-form-item label="状态"><el-select v-model="saveHeaderData.status" style="width: 100%"><el-option label="已排产" value="已排产"></el-option><el-option label="进行中" value="进行中"></el-option><el-option label="已完成" value="已完成"></el-option></el-select></el-form-item></el-col> <el-col :span="12"><el-form-item label="状态"><el-select v-model="saveHeaderData.status" style="width: 100%"><el-option label="已排产" value="已排产"></el-option><el-option label="进行中" value="进行中"></el-option><el-option label="已完成" value="已完成"></el-option></el-select></el-form-item></el-col>
</el-row> </el-row>
<el-form-item label="">
<el-switch
v-model="saveHeaderData.autoAssignAllUsers"
:active-value="true"
:inactive-value="false"
active-text="创建后默认分配对应角色全部人员"
inactive-text="手动分配人员">
</el-switch>
</el-form-item>
<el-form-item label="特殊要求"><el-input v-model="saveHeaderData.specialRequirement" type="textarea" :rows="3"></el-input></el-form-item> <el-form-item label="特殊要求"><el-input v-model="saveHeaderData.specialRequirement" type="textarea" :rows="3"></el-input></el-form-item>
</el-form> </el-form>
<el-footer style="height: 40px; margin-top: 50px; text-align: center"> <el-footer style="height: 40px; margin-top: 50px; text-align: center">
@ -208,11 +217,11 @@ export default {
return { return {
searchData: { projectNo: '', modelNo: '', color: '', status: '', deliveryStartDate: '', deliveryEndDate: '', page: 1, limit: 20 }, searchData: { projectNo: '', modelNo: '', color: '', status: '', deliveryStartDate: '', deliveryEndDate: '', page: 1, limit: 20 },
saveHeaderData: {}, saveHeaderData: {},
reportData: { id: 0, projectNo: '', nodeCode: '', remark: '' },
reportData: { orderNo: '', projectNo: '', nodeCode: '', remark: '' },
reportNodeOptions: [], reportNodeOptions: [],
setUp: { reviewFlag: false, reportFlag: false, assignFlag: false, saveButton: false, reportButton: false, assignButton: false }, setUp: { reviewFlag: false, reportFlag: false, assignFlag: false, saveButton: false, reportButton: false, assignButton: false },
dataList: [], dataList: [],
currentAssignOrder: { id: 0, orderType: 'HOME_LIFT' },
currentAssignOrder: { orderNo: '', orderType: 'HOME_LIFT' },
assignNodeList: [], assignNodeList: [],
selectedOrder: {}, selectedOrder: {},
detailTabName: 'statusLogs', detailTabName: 'statusLogs',
@ -253,7 +262,7 @@ export default {
const done = list.filter(item => item.status === '已完成').length const done = list.filter(item => item.status === '已完成').length
const currentNode = (list.find(item => item.status !== '已完成') || {}).nodeName || '全部完成' const currentNode = (list.find(item => item.status !== '已完成') || {}).nodeName || '全部完成'
const assigneeSummary = list.filter(item => item.assigneeUserName).map(item => `${item.nodeName}:${item.assigneeUserName}`).join(';') const assigneeSummary = list.filter(item => item.assigneeUserName).map(item => `${item.nodeName}:${item.assigneeUserName}`).join(';')
return { ...row, nodeList: list, nodeDoneCount: done, nodeTotalCount: list.length, currentNode: row.currentNode || currentNode, assigneeSummary: assigneeSummary || '-' }
return { ...row, autoAssignAllUsers: !!row.autoAssignAllUsers, nodeList: list, nodeDoneCount: done, nodeTotalCount: list.length, currentNode: row.currentNode || currentNode, assigneeSummary: assigneeSummary || '-' }
}, },
loadMockData() { loadMockData() {
this.dataList = [].map(this.normalizeRow) this.dataList = [].map(this.normalizeRow)
@ -266,8 +275,8 @@ export default {
this.selectedOrderLogList = [] this.selectedOrderLogList = []
return return
} }
const selectedId = this.selectedOrder && this.selectedOrder.id
const matched = selectedId ? this.dataList.find(item => item.id === selectedId) : null
const selectedOrderNo = this.selectedOrder && this.selectedOrder.orderNo
const matched = selectedOrderNo ? this.dataList.find(item => item.orderNo === selectedOrderNo) : null
const current = matched || this.dataList[0] const current = matched || this.dataList[0]
this.selectedOrder = current this.selectedOrder = current
this.$nextTick(() => { this.$nextTick(() => {
@ -278,7 +287,7 @@ export default {
this.loadSelectedOrderLogList(current) this.loadSelectedOrderLogList(current)
}, },
onCurrentRowChange(row) { onCurrentRowChange(row) {
if (!row || !row.id) {
if (!row || !row.orderNo) {
this.selectedOrder = {} this.selectedOrder = {}
this.selectedOrderLogList = [] this.selectedOrderLogList = []
return return
@ -287,12 +296,12 @@ export default {
this.loadSelectedOrderLogList(row) this.loadSelectedOrderLogList(row)
}, },
loadSelectedOrderLogList(row) { loadSelectedOrderLogList(row) {
if (!row || !row.id) {
if (!row || !row.orderNo) {
this.selectedOrderLogList = [] this.selectedOrderLogList = []
return return
} }
this.detailLogLoading = true this.detailLogLoading = true
getReportLogList({ orderId: row.id, orderType: 'HOME_LIFT' }).then(({ data }) => {
getReportLogList({ orderNo: row.orderNo, orderType: 'HOME_LIFT' }).then(({ data }) => {
this.detailLogLoading = false this.detailLogLoading = false
this.selectedOrderLogList = data && data.code === 0 ? (data.rows || []) : [] this.selectedOrderLogList = data && data.code === 0 ? (data.rows || []) : []
}).catch(() => { }).catch(() => {
@ -305,7 +314,7 @@ export default {
this.getDataList('Y') this.getDataList('Y')
}, },
openEditDialog(row) { openEditDialog(row) {
this.saveHeaderData = row ? { ...row } : { id: 0, projectNo: '', modelNo: '', color: '', floorCount: 1, specialRequirement: '', planDeliveryDate: '', status: '已排产', nodeList: [] }
this.saveHeaderData = row ? { ...row, autoAssignAllUsers: !!row.autoAssignAllUsers } : { orderNo: '', projectNo: '', modelNo: '', color: '', floorCount: 1, specialRequirement: '', planDeliveryDate: '', status: '已排产', autoAssignAllUsers: true, nodeList: [] }
this.setUp.reviewFlag = true this.setUp.reviewFlag = true
}, },
saveOrder() { saveOrder() {
@ -322,11 +331,11 @@ export default {
} }
}).catch(() => { }).catch(() => {
this.setUp.saveButton = false this.setUp.saveButton = false
const id = this.saveHeaderData.id || Date.now()
const index = this.dataList.findIndex(item => item.id === id)
const orderNo = this.saveHeaderData.orderNo || String(Date.now())
const index = this.dataList.findIndex(item => item.orderNo === orderNo)
const saveData = this.normalizeRow({ const saveData = this.normalizeRow({
...this.saveHeaderData, ...this.saveHeaderData,
id: id,
orderNo: orderNo,
nodeList: this.saveHeaderData.nodeList && this.saveHeaderData.nodeList.length ? this.saveHeaderData.nodeList : [ nodeList: this.saveHeaderData.nodeList && this.saveHeaderData.nodeList.length ? this.saveHeaderData.nodeList : [
{ nodeCode: 'stocking', nodeName: '仓库配料', status: '未开始' }, { nodeCode: 'stocking', nodeName: '仓库配料', status: '未开始' },
{ nodeCode: 'platformDebug', nodeName: '平台组装/调试', status: '未开始' }, { nodeCode: 'platformDebug', nodeName: '平台组装/调试', status: '未开始' },
@ -344,13 +353,13 @@ export default {
}, },
openReportDialog(row) { openReportDialog(row) {
this.reportNodeOptions = (row.nodeList || []).filter(item => item.status !== '已完成') this.reportNodeOptions = (row.nodeList || []).filter(item => item.status !== '已完成')
this.reportData = { id: row.id, projectNo: row.projectNo, nodeCode: '', remark: '' }
this.reportData = { orderNo: row.orderNo, projectNo: row.projectNo, nodeCode: '', remark: '' }
this.setUp.reportFlag = true this.setUp.reportFlag = true
}, },
openAssignDialog(row) { openAssignDialog(row) {
if (!row.id) return this.$message.warning('请先保存订单后再分配人员')
this.currentAssignOrder = { id: row.id, orderType: 'HOME_LIFT' }
getNodeAssigneeList({ orderId: row.id, orderType: 'HOME_LIFT' }).then(({ data }) => {
if (!row.orderNo) return this.$message.warning('请先保存订单后再分配人员')
this.currentAssignOrder = { orderNo: row.orderNo, orderType: 'HOME_LIFT' }
getNodeAssigneeList({ orderNo: row.orderNo, orderType: 'HOME_LIFT' }).then(({ data }) => {
const assignRows = data && data.code === 0 ? (data.rows || []) : [] const assignRows = data && data.code === 0 ? (data.rows || []) : []
this.assignNodeList = assignRows.map(item => ({ ...item, assigneeUserIdList: item.assigneeUserIdList || [], userOptions: [] })) this.assignNodeList = assignRows.map(item => ({ ...item, assigneeUserIdList: item.assigneeUserIdList || [], userOptions: [] }))
const requests = this.assignNodeList.map(item => const requests = this.assignNodeList.map(item =>
@ -371,7 +380,7 @@ export default {
assigneeUserIdList: item.assigneeUserIdList || [] assigneeUserIdList: item.assigneeUserIdList || []
})) }))
saveNodeAssignee({ saveNodeAssignee({
orderId: this.currentAssignOrder.id,
orderNo: this.currentAssignOrder.orderNo,
orderType: this.currentAssignOrder.orderType, orderType: this.currentAssignOrder.orderType,
assigneeList: assigneeList assigneeList: assigneeList
}).then(({ data }) => { }).then(({ data }) => {
@ -398,13 +407,13 @@ export default {
} else this.$message.error(data.msg || '报工失败') } else this.$message.error(data.msg || '报工失败')
}).catch(() => { }).catch(() => {
this.setUp.reportButton = false this.setUp.reportButton = false
this.simulateNodeReport(this.reportData.id, this.reportData.nodeCode)
this.simulateNodeReport(this.reportData.orderNo, this.reportData.nodeCode)
this.setUp.reportFlag = false this.setUp.reportFlag = false
this.$message.success('后端未完成,已在前端演示节点报工') this.$message.success('后端未完成,已在前端演示节点报工')
}) })
}, },
simulateNodeReport(id, nodeCode) {
const row = this.dataList.find(item => item.id === id)
simulateNodeReport(orderNo, nodeCode) {
const row = this.dataList.find(item => item.orderNo === orderNo)
if (!row) return if (!row) return
const node = row.nodeList.find(item => item.nodeCode === nodeCode) const node = row.nodeList.find(item => item.nodeCode === nodeCode)
if (!node) return if (!node) return
@ -419,7 +428,7 @@ export default {
} }
}, },
finishOrder(row) { finishOrder(row) {
finishHomeLiftOrder({ id: row.id }).then(({data}) => {
finishHomeLiftOrder({ orderNo: row.orderNo }).then(({data}) => {
if (data && data.code === 0) { if (data && data.code === 0) {
this.$message.success(data.msg || '完工成功') this.$message.success(data.msg || '完工成功')
this.getDataList() this.getDataList()
@ -435,13 +444,13 @@ export default {
}, },
deleteOrder(row) { deleteOrder(row) {
this.$confirm('确定删除该订单吗?', '提示', { confirmButtonText: '确定', cancelButtonText: '取消', type: 'warning' }).then(() => { this.$confirm('确定删除该订单吗?', '提示', { confirmButtonText: '确定', cancelButtonText: '取消', type: 'warning' }).then(() => {
deleteHomeLiftOrder({ id: row.id }).then(({data}) => {
deleteHomeLiftOrder({ orderNo: row.orderNo }).then(({data}) => {
if (data && data.code === 0) { if (data && data.code === 0) {
this.$message.success(data.msg || '删除成功') this.$message.success(data.msg || '删除成功')
this.getDataList() this.getDataList()
} else this.$message.error(data.msg || '删除失败') } else this.$message.error(data.msg || '删除失败')
}).catch(() => { }).catch(() => {
this.dataList = this.dataList.filter(item => item.id !== row.id)
this.dataList = this.dataList.filter(item => item.orderNo !== row.orderNo)
this.totalPage = this.dataList.length this.totalPage = this.dataList.length
this.$message.success('后端未完成,已在前端演示删除') this.$message.success('后端未完成,已在前端演示删除')
}) })

55
src/views/modules/longchuang/production-plan-renovation-order.vue

@ -56,7 +56,7 @@
<el-table-column label="操作" width="300" align="center" > <el-table-column label="操作" width="300" align="center" >
<template slot-scope="scope"> <template slot-scope="scope">
<a type="text" @click="openEditDialog(scope.row)">修改</a> <a type="text" @click="openEditDialog(scope.row)">修改</a>
<a type="text" @click="openAssignDialog(scope.row)" :disabled="!scope.row.id">分配人员</a>
<a type="text" @click="openAssignDialog(scope.row)" :disabled="!scope.row.orderNo">分配人员</a>
<a type="text" @click="openReportDialog(scope.row)" :disabled="scope.row.status === '已完成'">节点报工</a> <a type="text" @click="openReportDialog(scope.row)" :disabled="scope.row.status === '已完成'">节点报工</a>
<a type="text" @click="finishOrder(scope.row)" :disabled="scope.row.status === '已完成'">完工</a> <a type="text" @click="finishOrder(scope.row)" :disabled="scope.row.status === '已完成'">完工</a>
<a type="text" style="color:#F56C6C" @click="deleteOrder(scope.row)">删除</a> <a type="text" style="color:#F56C6C" @click="deleteOrder(scope.row)">删除</a>
@ -75,7 +75,7 @@
style="margin-top: 20px; text-align: right"> style="margin-top: 20px; text-align: right">
</el-pagination> </el-pagination>
<el-dialog :title="saveHeaderData.id ? '修改改造项目订单' : '新增改造项目订单'" :visible.sync="setUp.reviewFlag" width="700px" :close-on-click-modal="false" v-drag>
<el-dialog :title="saveHeaderData.orderNo ? '修改改造项目订单' : '新增改造项目订单'" :visible.sync="setUp.reviewFlag" width="700px" :close-on-click-modal="false" v-drag>
<el-form <el-form
ref="editForm" ref="editForm"
:model="saveHeaderData" :model="saveHeaderData"
@ -93,6 +93,15 @@
<el-col :span="12"><el-form-item label="计划发货日期"><el-date-picker v-model="saveHeaderData.planDeliveryDate" type="date" value-format="yyyy-MM-dd" style="width: 100%"></el-date-picker></el-form-item></el-col> <el-col :span="12"><el-form-item label="计划发货日期"><el-date-picker v-model="saveHeaderData.planDeliveryDate" type="date" value-format="yyyy-MM-dd" style="width: 100%"></el-date-picker></el-form-item></el-col>
<el-col :span="12"><el-form-item label="状态"><el-select v-model="saveHeaderData.status" style="width: 100%"><el-option label="已排产" value="已排产"></el-option><el-option label="进行中" value="进行中"></el-option><el-option label="已完成" value="已完成"></el-option></el-select></el-form-item></el-col> <el-col :span="12"><el-form-item label="状态"><el-select v-model="saveHeaderData.status" style="width: 100%"><el-option label="已排产" value="已排产"></el-option><el-option label="进行中" value="进行中"></el-option><el-option label="已完成" value="已完成"></el-option></el-select></el-form-item></el-col>
</el-row> </el-row>
<el-form-item label="人员分配策略">
<el-switch
v-model="saveHeaderData.autoAssignAllUsers"
:active-value="true"
:inactive-value="false"
active-text="创建后默认分配对应角色全部人员"
inactive-text="手动分配人员">
</el-switch>
</el-form-item>
<el-form-item label="特殊要求"><el-input v-model="saveHeaderData.specialRequirement" type="textarea" :rows="3"></el-input></el-form-item> <el-form-item label="特殊要求"><el-input v-model="saveHeaderData.specialRequirement" type="textarea" :rows="3"></el-input></el-form-item>
</el-form> </el-form>
<el-footer style="height: 40px; margin-top: 50px; text-align: center"> <el-footer style="height: 40px; margin-top: 50px; text-align: center">
@ -144,11 +153,11 @@ export default {
return { return {
searchData: { projectNo: '', modelNo: '', color: '', status: '', deliveryStartDate: '', deliveryEndDate: '', page: 1, limit: 20 }, searchData: { projectNo: '', modelNo: '', color: '', status: '', deliveryStartDate: '', deliveryEndDate: '', page: 1, limit: 20 },
saveHeaderData: {}, saveHeaderData: {},
reportData: { id: 0, projectNo: '', nodeCode: '', remark: '' },
reportData: { orderNo: '', projectNo: '', nodeCode: '', remark: '' },
reportNodeOptions: [], reportNodeOptions: [],
setUp: { reviewFlag: false, reportFlag: false, assignFlag: false, saveButton: false, reportButton: false, assignButton: false }, setUp: { reviewFlag: false, reportFlag: false, assignFlag: false, saveButton: false, reportButton: false, assignButton: false },
dataList: [], dataList: [],
currentAssignOrder: { id: 0, orderType: 'RENOVATION' },
currentAssignOrder: { orderNo: '', orderType: 'RENOVATION' },
assignNodeList: [], assignNodeList: [],
pageIndex: 1, pageIndex: 1,
pageSize: 20, pageSize: 20,
@ -182,16 +191,17 @@ export default {
const done = list.filter(item => item.status === '已完成').length const done = list.filter(item => item.status === '已完成').length
const currentNode = (list.find(item => item.status !== '已完成') || {}).nodeName || '全部完成' const currentNode = (list.find(item => item.status !== '已完成') || {}).nodeName || '全部完成'
const assigneeSummary = list.filter(item => item.assigneeUserName).map(item => `${item.nodeName}:${item.assigneeUserName}`).join(';') const assigneeSummary = list.filter(item => item.assigneeUserName).map(item => `${item.nodeName}:${item.assigneeUserName}`).join(';')
return { ...row, nodeList: list, nodeDoneCount: done, nodeTotalCount: list.length, currentNode: row.currentNode || currentNode, assigneeSummary: assigneeSummary || '-' }
return { ...row, autoAssignAllUsers: !!row.autoAssignAllUsers, nodeList: list, nodeDoneCount: done, nodeTotalCount: list.length, currentNode: row.currentNode || currentNode, assigneeSummary: assigneeSummary || '-' }
}, },
loadMockData() { loadMockData() {
this.dataList = [ this.dataList = [
{ {
id: 1,
orderNo: 'MOCK-RENOVATION-001',
projectNo: 'RNV-202604-001', projectNo: 'RNV-202604-001',
modelNo: 'LC-REN-630', modelNo: 'LC-REN-630',
color: '钛金灰', color: '钛金灰',
floorCount: 10, floorCount: 10,
autoAssignAllUsers: false,
specialRequirement: '井道尺寸受限,需优化导轨方案', specialRequirement: '井道尺寸受限,需优化导轨方案',
planDeliveryDate: '2026-04-28', planDeliveryDate: '2026-04-28',
status: '进行中', status: '进行中',
@ -204,11 +214,12 @@ export default {
] ]
}, },
{ {
id: 2,
orderNo: 'MOCK-RENOVATION-002',
projectNo: 'RNV-202604-002', projectNo: 'RNV-202604-002',
modelNo: 'LC-REN-800', modelNo: 'LC-REN-800',
color: '深空黑', color: '深空黑',
floorCount: 14, floorCount: 14,
autoAssignAllUsers: false,
specialRequirement: '兼容旧楼层召唤系统', specialRequirement: '兼容旧楼层召唤系统',
planDeliveryDate: '2026-05-06', planDeliveryDate: '2026-05-06',
status: '已排产', status: '已排产',
@ -228,7 +239,7 @@ export default {
this.getDataList('Y') this.getDataList('Y')
}, },
openEditDialog(row) { openEditDialog(row) {
this.saveHeaderData = row ? { ...row } : { id: 0, projectNo: '', modelNo: '', color: '', floorCount: 1, specialRequirement: '', planDeliveryDate: '', status: '已排产', nodeList: [] }
this.saveHeaderData = row ? { ...row, autoAssignAllUsers: !!row.autoAssignAllUsers } : { orderNo: '', projectNo: '', modelNo: '', color: '', floorCount: 1, specialRequirement: '', planDeliveryDate: '', status: '已排产', autoAssignAllUsers: false, nodeList: [] }
this.setUp.reviewFlag = true this.setUp.reviewFlag = true
}, },
saveOrder() { saveOrder() {
@ -243,11 +254,11 @@ export default {
} else this.$message.error(data.msg || '保存失败') } else this.$message.error(data.msg || '保存失败')
}).catch(() => { }).catch(() => {
this.setUp.saveButton = false this.setUp.saveButton = false
const id = this.saveHeaderData.id || Date.now()
const index = this.dataList.findIndex(item => item.id === id)
const orderNo = this.saveHeaderData.orderNo || String(Date.now())
const index = this.dataList.findIndex(item => item.orderNo === orderNo)
const saveData = this.normalizeRow({ const saveData = this.normalizeRow({
...this.saveHeaderData, ...this.saveHeaderData,
id: id,
orderNo: orderNo,
nodeList: this.saveHeaderData.nodeList && this.saveHeaderData.nodeList.length ? this.saveHeaderData.nodeList : [ nodeList: this.saveHeaderData.nodeList && this.saveHeaderData.nodeList.length ? this.saveHeaderData.nodeList : [
{ nodeCode: 'stocking', nodeName: '仓库配料', status: '未开始' }, { nodeCode: 'stocking', nodeName: '仓库配料', status: '未开始' },
{ nodeCode: 'assy', nodeName: '组装', status: '未开始' }, { nodeCode: 'assy', nodeName: '组装', status: '未开始' },
@ -264,13 +275,13 @@ export default {
}, },
openReportDialog(row) { openReportDialog(row) {
this.reportNodeOptions = (row.nodeList || []).filter(item => item.status !== '已完成') this.reportNodeOptions = (row.nodeList || []).filter(item => item.status !== '已完成')
this.reportData = { id: row.id, projectNo: row.projectNo, nodeCode: '', remark: '' }
this.reportData = { orderNo: row.orderNo, projectNo: row.projectNo, nodeCode: '', remark: '' }
this.setUp.reportFlag = true this.setUp.reportFlag = true
}, },
openAssignDialog(row) { openAssignDialog(row) {
if (!row.id) return this.$message.warning('请先保存订单后再分配人员')
this.currentAssignOrder = { id: row.id, orderType: 'RENOVATION' }
getNodeAssigneeList({ orderId: row.id, orderType: 'RENOVATION' }).then(({ data }) => {
if (!row.orderNo) return this.$message.warning('请先保存订单后再分配人员')
this.currentAssignOrder = { orderNo: row.orderNo, orderType: 'RENOVATION' }
getNodeAssigneeList({ orderNo: row.orderNo, orderType: 'RENOVATION' }).then(({ data }) => {
const assignRows = data && data.code === 0 ? (data.rows || []) : [] const assignRows = data && data.code === 0 ? (data.rows || []) : []
this.assignNodeList = assignRows.map(item => ({ ...item, assigneeUserIdList: item.assigneeUserIdList || [], userOptions: [] })) this.assignNodeList = assignRows.map(item => ({ ...item, assigneeUserIdList: item.assigneeUserIdList || [], userOptions: [] }))
const requests = this.assignNodeList.map(item => const requests = this.assignNodeList.map(item =>
@ -291,7 +302,7 @@ export default {
assigneeUserIdList: item.assigneeUserIdList || [] assigneeUserIdList: item.assigneeUserIdList || []
})) }))
saveNodeAssignee({ saveNodeAssignee({
orderId: this.currentAssignOrder.id,
orderNo: this.currentAssignOrder.orderNo,
orderType: this.currentAssignOrder.orderType, orderType: this.currentAssignOrder.orderType,
assigneeList: assigneeList assigneeList: assigneeList
}).then(({ data }) => { }).then(({ data }) => {
@ -318,13 +329,13 @@ export default {
} else this.$message.error(data.msg || '报工失败') } else this.$message.error(data.msg || '报工失败')
}).catch(() => { }).catch(() => {
this.setUp.reportButton = false this.setUp.reportButton = false
this.simulateNodeReport(this.reportData.id, this.reportData.nodeCode)
this.simulateNodeReport(this.reportData.orderNo, this.reportData.nodeCode)
this.setUp.reportFlag = false this.setUp.reportFlag = false
this.$message.success('后端未完成,已在前端演示节点报工') this.$message.success('后端未完成,已在前端演示节点报工')
}) })
}, },
simulateNodeReport(id, nodeCode) {
const row = this.dataList.find(item => item.id === id)
simulateNodeReport(orderNo, nodeCode) {
const row = this.dataList.find(item => item.orderNo === orderNo)
if (!row) return if (!row) return
const node = row.nodeList.find(item => item.nodeCode === nodeCode) const node = row.nodeList.find(item => item.nodeCode === nodeCode)
if (!node) return if (!node) return
@ -339,7 +350,7 @@ export default {
} }
}, },
finishOrder(row) { finishOrder(row) {
finishRenovationOrder({ id: row.id }).then(({data}) => {
finishRenovationOrder({ orderNo: row.orderNo }).then(({data}) => {
if (data && data.code === 0) { if (data && data.code === 0) {
this.$message.success(data.msg || '完工成功') this.$message.success(data.msg || '完工成功')
this.getDataList() this.getDataList()
@ -355,13 +366,13 @@ export default {
}, },
deleteOrder(row) { deleteOrder(row) {
this.$confirm('确定删除该改造订单吗?', '提示', { confirmButtonText: '确定', cancelButtonText: '取消', type: 'warning' }).then(() => { this.$confirm('确定删除该改造订单吗?', '提示', { confirmButtonText: '确定', cancelButtonText: '取消', type: 'warning' }).then(() => {
deleteRenovationOrder({ id: row.id }).then(({data}) => {
deleteRenovationOrder({ orderNo: row.orderNo }).then(({data}) => {
if (data && data.code === 0) { if (data && data.code === 0) {
this.$message.success(data.msg || '删除成功') this.$message.success(data.msg || '删除成功')
this.getDataList() this.getDataList()
} else this.$message.error(data.msg || '删除失败') } else this.$message.error(data.msg || '删除失败')
}).catch(() => { }).catch(() => {
this.dataList = this.dataList.filter(item => item.id !== row.id)
this.dataList = this.dataList.filter(item => item.orderNo !== row.orderNo)
this.totalPage = this.dataList.length this.totalPage = this.dataList.length
this.$message.success('后端未完成,已在前端演示删除') this.$message.success('后端未完成,已在前端演示删除')
}) })

10
src/views/modules/longchuang/production-work-report.vue

@ -92,7 +92,7 @@
<div class="cards-grid"> <div class="cards-grid">
<div <div
v-for="item in dataList" v-for="item in dataList"
:key="item.id"
:key="item.orderNo"
class="report-card" class="report-card"
:class="getCardClass(item)"> :class="getCardClass(item)">
<div class="card-header"> <div class="card-header">
@ -276,7 +276,7 @@ export default {
historyOrder: {}, historyOrder: {},
reportLoading: false, reportLoading: false,
reportData: { reportData: {
orderId: 0,
orderNo: '',
orderType: '', orderType: '',
nodeCode: '', nodeCode: '',
projectNo: '', projectNo: '',
@ -396,7 +396,7 @@ export default {
}, },
directReportNode(order, node) { directReportNode(order, node) {
this.reportData = { this.reportData = {
orderId: order.id,
orderNo: order.orderNo,
orderType: order.orderType, orderType: order.orderType,
nodeCode: node.nodeCode, nodeCode: node.nodeCode,
projectNo: order.projectNo, projectNo: order.projectNo,
@ -409,7 +409,7 @@ export default {
}, },
openReportDialog(order, node) { openReportDialog(order, node) {
this.reportData = { this.reportData = {
orderId: order.id,
orderNo: order.orderNo,
orderType: order.orderType, orderType: order.orderType,
nodeCode: node.nodeCode, nodeCode: node.nodeCode,
projectNo: order.projectNo, projectNo: order.projectNo,
@ -437,7 +437,7 @@ export default {
} }
this.reportLoading = true this.reportLoading = true
apiFn({ apiFn({
id: this.reportData.orderId,
orderNo: this.reportData.orderNo,
nodeCode: this.reportData.nodeCode, nodeCode: this.reportData.nodeCode,
reportQty: this.reportData.reportQty, reportQty: this.reportData.reportQty,
remark: this.reportData.remark remark: this.reportData.remark

Loading…
Cancel
Save