feat: 完善设计报工研发管理流程

This commit is contained in:
2026-07-10 17:43:23 +08:00
parent 68acbf76cb
commit e89cef4895
9 changed files with 1103 additions and 54 deletions

View File

@@ -71,6 +71,11 @@
<el-table-column type="selection" width="50" align="center" />
<el-table-column align="center" fixed label="RID" prop="RID" width="70" />
<el-table-column align="center" fixed label="DID" prop="DID" width="70" />
<el-table-column align="center" label="任务状态" prop="单据状态" width="90">
<template slot-scope="scope">
<el-tag :type="getStatusType(scope.row.单据状态)" size="mini">{{ scope.row.单据状态 }}</el-tag>
</template>
</el-table-column>
<el-table-column align="center" label="校验状态" width="90">
<template slot-scope="scope">
<el-tag :type="scope.row.已校验 ? 'success' : 'info'" size="mini">{{ scope.row.校验状态 }}</el-tag>
@@ -86,6 +91,7 @@
<el-table-column align="center" label="开始时间" prop="开始时间" width="150" />
<el-table-column align="center" label="结束时间" prop="结束时间" width="150" />
<el-table-column align="right" label="工时(h)" prop="工时小时" width="90" />
<el-table-column align="left" label="进度说明" prop="进度说明" width="180" show-overflow-tooltip />
<el-table-column align="left" label="校验人" prop="校验人" width="110" show-overflow-tooltip />
<el-table-column align="center" label="校验时间" prop="校验时间" width="150" />
<el-table-column align="left" label="备注" prop="备注" width="180" show-overflow-tooltip />
@@ -285,7 +291,7 @@ export default {
if (String(result.result) === '1') {
this.$message.success(result.message || '校验成功')
this.dialogVisible = false
this.searchTable()
await this.searchTable()
} else {
this.$message.error(result.message || '校验失败')
}
@@ -315,7 +321,7 @@ export default {
const result = this.getResult(response)
if (String(result.result) === '1') {
this.$message.success(result.message || '批量校验成功')
this.searchTable()
await this.searchTable()
} else {
this.$message.error(result.message || '批量校验失败')
}
@@ -339,6 +345,12 @@ export default {
},
formatProjectLabel(item) {
return item.项目名称 ? `${item.项目号} | ${item.项目名称}` : item.项目号
},
getStatusType(status) {
if (status === '已完成') return 'success'
if (status === '执行中') return 'warning'
if (status === '已结束') return 'primary'
return 'info'
}
}
}

View File

@@ -98,6 +98,7 @@
<el-table-column align="center" label="开始时间" prop="开始时间" width="150" />
<el-table-column align="center" label="结束时间" prop="结束时间" width="150" />
<el-table-column align="center" label="校验状态" prop="校验状态" width="90" />
<el-table-column align="left" label="进度说明" prop="进度说明" min-width="160" show-overflow-tooltip />
<el-table-column align="left" label="备注" prop="备注" min-width="160" show-overflow-tooltip />
</el-table>

View File

@@ -113,6 +113,43 @@
</el-table-column>
</el-table>
</el-card>
<el-dialog
:visible.sync="endDialogVisible"
title="结束报工"
width="620px"
center
:close-on-click-modal="false"
>
<el-form :model="endForm" label-width="100px" size="small">
<el-form-item label="DID">
<el-input v-model="endForm.DID" disabled />
</el-form-item>
<el-form-item label="物料编码">
<el-input v-model="endForm.物料编码" disabled />
</el-form-item>
<el-form-item label="物料名称">
<el-input v-model="endForm.物料名称" disabled />
</el-form-item>
<el-form-item label="任务描述">
<el-input v-model="endForm.任务描述" type="textarea" :rows="2" disabled />
</el-form-item>
<el-form-item label="进度说明">
<el-input
v-model="endForm.进度说明"
type="textarea"
:rows="4"
maxlength="500"
show-word-limit
placeholder="请输入本次报工进度说明"
/>
</el-form-item>
</el-form>
<div slot="footer">
<el-button @click="endDialogVisible = false">取消</el-button>
<el-button type="primary" :loading="actionLoading" @click="confirmEndTask">确认</el-button>
</div>
</el-dialog>
</div>
</template>
@@ -123,10 +160,18 @@ export default {
return {
loading: false,
actionLoading: false,
endDialogVisible: false,
tableData: [],
projectOptions: [],
materialOptions: [],
parentMaterialOptions: [],
endForm: {
DID: '',
物料编码: '',
物料名称: '',
任务描述: '',
进度说明: ''
},
searchForm: {
did: '',
projectNo: '',
@@ -241,12 +286,35 @@ export default {
['操作人', this.currentUserName()]
], '开始成功')
},
endTask(row) {
this.runAction('设计报工_任务_结束', [
['DID', row.DID],
async endTask(row) {
const latest = await this.getLatestTask(row.DID)
if (!latest) return
Object.assign(row, latest)
if (Number(latest.当前用户未结束报工数 || 0) <= 0) {
this.$message.warning('当前人员没有未结束的报工记录')
this.searchTable()
return
}
this.endForm = {
DID: latest.DID,
物料编码: latest.物料编码 || '',
物料名称: latest.物料名称 || '',
任务描述: latest.任务描述 || '',
进度说明: ''
}
this.endDialogVisible = true
},
async confirmEndTask() {
if (!this.endForm.DID) return
const success = await this.runAction('设计报工_任务_结束', [
['DID', this.endForm.DID],
['操作人ID', this.currentUserId()],
['操作人', this.currentUserName()]
['操作人', this.currentUserName()],
['进度说明', this.endForm.进度说明 || '']
], '结束成功')
if (success) {
this.endDialogVisible = false
}
},
async completeTask(row) {
const latest = await this.getLatestTask(row.DID)
@@ -317,12 +385,15 @@ export default {
if (String(result.result) === '1') {
this.$message.success(result.message || defaultMessage)
this.searchTable()
return true
} else {
this.$message.error(result.message || '操作失败')
return false
}
} catch (error) {
console.error(`${procedure}失败:`, error)
this.$message.error('操作失败')
return false
} finally {
this.actionLoading = false
}

View File

@@ -255,9 +255,9 @@
<el-input v-model="formData.研发立项号" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-col :span="24">
<el-form-item label="研发目的">
<el-input v-model="formData.研发目的" />
<el-input v-model="formData.研发目的" type="textarea" :rows="2"/>
</el-form-item>
</el-col>
<el-col :span="24">
@@ -340,7 +340,6 @@ export default {
},
formData: this.getEmptyForm(),
rules: {
物料编码: [{ required: true, message: '请选择物料编码', trigger: 'change' }],
任务描述: [{ required: true, message: '请输入任务描述', trigger: 'blur' }]
}
}
@@ -615,7 +614,7 @@ export default {
return item.项目名称 ? `${item.项目号} | ${item.项目名称}` : item.项目号
},
formatPersonLabel(item) {
return item.账号 ? `${item.人员姓名} | ${item.账号}` : item.人员姓名
return item.账号 ? `${item.人员姓名}` : item.人员姓名
},
getResult(response) {
const data = response && response.data