设备总包项目管理部分

This commit is contained in:
jhd
2026-06-12 13:54:43 +08:00
parent 79e536aeca
commit 1e140cf1da
115 changed files with 6614 additions and 0 deletions

View File

@@ -0,0 +1,183 @@
<template>
<div class="rm-container">
<div class="rm-panel">
<div class="rm-panel-header">
<span>图纸审查</span>
<el-button size="small" type="primary" icon="el-icon-plus" @click="handleAdd">新增审查记录</el-button>
</div>
<div class="rm-panel-body">
<!-- Search -->
<div class="search-row">
<el-input v-model="query.drawingName" size="small" placeholder="图纸名称" clearable style="width:160px" @keyup.enter="handleSearch" />
<el-select v-model="query.status" size="small" placeholder="状态" clearable style="width:110px">
<el-option label="待审查" value="pending" />
<el-option label="通过" value="approved" />
<el-option label="驳回" value="rejected" />
</el-select>
<el-button size="small" type="primary" icon="el-icon-search" @click="handleSearch">查询</el-button>
<el-button size="small" icon="el-icon-refresh" @click="handleReset">重置</el-button>
</div>
<!-- Table -->
<el-table :data="list" v-loading="loading" stripe border highlight-current-row size="small">
<el-table-column type="index" label="#" width="45" />
<el-table-column prop="drawingName" label="图纸名称" min-width="160" />
<el-table-column prop="reviewer" label="审查人" width="90" />
<el-table-column prop="reviewDate" label="审查日期" width="100" align="center" />
<el-table-column prop="status" label="结果" width="90" align="center">
<template slot-scope="scope">
<el-tag :type="statusTag(scope.row.status)" size="mini">{{ statusLabel(scope.row.status) }}</el-tag>
</template>
</el-table-column>
<el-table-column prop="reviewOpinion" label="审查意见" min-width="160" show-overflow-tooltip />
<el-table-column label="操作" width="120" fixed="right">
<template slot-scope="scope">
<el-button type="text" size="mini" icon="el-icon-edit" @click="handleEdit(scope.row)">编辑</el-button>
<el-button type="text" size="mini" icon="el-icon-delete" @click="handleDelete(scope.row)">删除</el-button>
</template>
</el-table-column>
</el-table>
<div class="pagination-row">
<el-pagination :current-page="query.pageNum" :page-sizes="[10, 20, 50, 100]" :page-size="query.pageSize"
:total="total" layout="total, sizes, prev, pager, next, jumper" size="small"
@size-change="handleSizeChange" @current-change="handlePageChange" />
</div>
</div>
</div>
<!-- Add/Edit Dialog -->
<el-dialog :title="dialogTitle" :visible.sync="dialogVisible" width="500px" append-to-body>
<el-form ref="formRef" :model="form" :rules="rules" label-width="90px" size="small">
<el-form-item label="图纸名称" prop="drawingName">
<el-input v-model="form.drawingName" placeholder="关联图纸名称" />
</el-form-item>
<el-row :gutter="16">
<el-col :span="12">
<el-form-item label="审查人" prop="reviewer">
<el-input v-model="form.reviewer" placeholder="审查人姓名" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="审查日期" prop="reviewDate">
<el-date-picker v-model="form.reviewDate" type="date" placeholder="选择日期" style="width:100%" value-format="yyyy-MM-dd" />
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="16">
<el-col :span="12">
<el-form-item label="结果" prop="status">
<el-select v-model="form.status" placeholder="请选择" style="width:100%">
<el-option label="待审查" value="pending" />
<el-option label="通过" value="approved" />
<el-option label="驳回" value="rejected" />
</el-select>
</el-form-item>
</el-col>
</el-row>
<el-form-item label="审查意见" prop="reviewOpinion">
<el-input v-model="form.reviewOpinion" type="textarea" :rows="3" placeholder="审查意见" />
</el-form-item>
<el-form-item label="备注" prop="remark">
<el-input v-model="form.remark" type="textarea" :rows="2" placeholder="备注信息" />
</el-form-item>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button size="small" @click="dialogVisible = false">取消</el-button>
<el-button size="small" type="primary" :loading="submitting" @click="handleSubmit">保存</el-button>
</div>
</el-dialog>
</div>
</template>
<script>
import { listDrawingReview, getDrawingReview, addDrawingReview, updateDrawingReview, delDrawingReview } from '@/api/rm/drawingReview'
import { listProject } from '@/api/rm/project'
export default {
name: 'RmDrawingReview',
data() {
return {
loading: false,
list: [],
total: 0,
currentProjectId: null,
query: { pageNum: 1, pageSize: 10, drawingName: undefined, status: undefined, projectId: undefined },
dialogVisible: false,
dialogTitle: '',
submitting: false,
form: {},
rules: { drawingName: [{ required: true, message: '请填写图纸名称', trigger: 'blur' }] }
}
},
created() { this.loadCurrentProject() },
methods: {
loadCurrentProject() {
listProject({ pageNum: 1, pageSize: 1 }).then(res => {
const rows = res.rows || []
if (rows.length > 0) {
this.currentProjectId = rows[0].projectId
this.query.projectId = rows[0].projectId
this.loadList()
}
})
},
loadList() {
this.loading = true
listDrawingReview(this.query).then(res => {
this.list = res.rows || []
this.total = res.total || 0
}).finally(() => { this.loading = false })
},
handleSearch() { this.query.pageNum = 1; this.loadList() },
handleReset() { this.query = { pageNum: 1, pageSize: 10 }; this.loadList() },
handleSizeChange(val) { this.query.pageSize = val; this.loadList() },
handlePageChange(val) { this.query.pageNum = val; this.loadList() },
handleAdd() {
this.dialogTitle = '新增审查记录'
if (!this.currentProjectId) { this.$message.warning('请先在项目总览中创建项目'); return }
this.form = { projectId: this.currentProjectId, drawingName: '', reviewer: '', reviewDate: '', status: 'pending', reviewOpinion: '', remark: '' }
this.dialogVisible = true
this.$nextTick(() => { this.$refs.formRef?.clearValidate() })
},
handleEdit(row) {
this.dialogTitle = '编辑审查记录'
getDrawingReview(row.reviewId).then(res => {
this.form = res.data
this.dialogVisible = true
this.$nextTick(() => { this.$refs.formRef?.clearValidate() })
})
},
handleDelete(row) {
this.$confirm(`确认删除 "${row.drawingName}" 的审查记录?`, '提示', { type: 'warning', confirmButtonText: '确定', cancelButtonText: '取消' }).then(() => {
delDrawingReview(row.reviewId).then(() => { this.$message.success('删除成功'); this.loadList() })
})
},
handleSubmit() {
this.$refs.formRef.validate(valid => {
if (!valid) return
this.submitting = true
const api = this.form.reviewId ? updateDrawingReview : addDrawingReview
api(this.form).then(() => {
this.$message.success(this.form.reviewId ? '更新成功' : '新增成功')
this.dialogVisible = false
if (!this.form.reviewId) this.query.pageNum = 1
this.loadList()
}).finally(() => { this.submitting = false })
})
},
statusTag(s) { return { pending: 'info', approved: 'success', rejected: 'danger' }[s] || 'info' },
statusLabel(s) { return { pending: '待审查', approved: '通过', rejected: '驳回' }[s] || s }
}
}
</script>
<style scoped>
.rm-container { padding: 8px; }
.rm-panel { background: #fff; border-radius: 4px; border: 1px solid #d0d7de; }
.rm-panel-header { padding: 8px 12px; font-size: 14px; font-weight: 600; border-bottom: 1px solid #d0d7de; display: flex; align-items: center; justify-content: space-between; }
.rm-panel-body { padding: 8px 12px; }
.search-row { display: flex; gap: 6px; align-items: center; margin-bottom: 8px; flex-wrap: wrap; }
.pagination-row { margin-top: 10px; display: flex; justify-content: flex-end; }
.dialog-footer { text-align: right; }
</style>