Browse Source

2026-07-28

异常规则配置
master
fengyuan_yang 1 day ago
parent
commit
bdea90ae5b
  1. 158
      src/views/modules/todo/todoCenter.vue
  2. 39
      src/views/modules/yieldReport/com_mrb_register.vue

158
src/views/modules/todo/todoCenter.vue

@ -19,10 +19,12 @@
</div> </div>
</div> </div>
<el-form :inline="true" :model="searchData" class="search-form" @keyup.enter.native="queryHandle">
<el-form :inline="true" label-position="top" :model="searchData" class="search-form" @keyup.enter.native="queryHandle">
<template v-if="searchExpanded"> <template v-if="searchExpanded">
<el-row :gutter="16" class="search-condition-row">
<el-col :span="2">
<el-form-item label="BU"> <el-form-item label="BU">
<el-select v-model="searchData.buNo" clearable filterable placeholder="全部" style="width: 180px">
<el-select v-model="searchData.buNo" clearable filterable placeholder="全部">
<el-option <el-option
v-for="item in buList" v-for="item in buList"
:key="item.buNo" :key="item.buNo"
@ -31,8 +33,10 @@
</el-option> </el-option>
</el-select> </el-select>
</el-form-item> </el-form-item>
</el-col>
<el-col :span="2">
<el-form-item label="是否强制"> <el-form-item label="是否强制">
<el-select v-model="searchData.forceType" clearable placeholder="全部" style="width: 100px">
<el-select v-model="searchData.forceType" clearable placeholder="全部">
<el-option <el-option
v-for="item in forceTypeOptions" v-for="item in forceTypeOptions"
:key="item.value" :key="item.value"
@ -41,8 +45,10 @@
</el-option> </el-option>
</el-select> </el-select>
</el-form-item> </el-form-item>
</el-col>
<el-col :span="2">
<el-form-item label="代办状态"> <el-form-item label="代办状态">
<el-select v-model="searchData.todoStatus" clearable placeholder="全部" style="width: 100px">
<el-select v-model="searchData.todoStatus" clearable placeholder="全部">
<el-option <el-option
v-for="item in todoStatusOptions" v-for="item in todoStatusOptions"
:key="item.value" :key="item.value"
@ -51,8 +57,10 @@
</el-option> </el-option>
</el-select> </el-select>
</el-form-item> </el-form-item>
</el-col>
<el-col :span="3">
<el-form-item label="责任部门"> <el-form-item label="责任部门">
<el-select v-model="searchData.responsibilityDept" clearable filterable placeholder="全部" style="width: 140px">
<el-select v-model="searchData.responsibilityDept" clearable filterable placeholder="全部">
<el-option <el-option
v-for="item in roleList" v-for="item in roleList"
:key="item.roleId" :key="item.roleId"
@ -61,14 +69,59 @@
</el-option> </el-option>
</el-select> </el-select>
</el-form-item> </el-form-item>
</el-col>
<el-col :span="3">
<el-form-item label="关键字"> <el-form-item label="关键字">
<el-input <el-input
v-model="searchData.keyword" v-model="searchData.keyword"
clearable clearable
placeholder="信息编码/派工单号/订单号"
style="width: 200px">
placeholder="信息编码/派工单号/订单号">
</el-input> </el-input>
</el-form-item> </el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="审核时间">
<el-date-picker
v-model="searchData.auditTimeStart"
type="datetime"
value-format="yyyy-MM-dd HH:mm:ss"
format="yyyy-MM-dd HH:mm:ss"
placeholder="开始日期"
style="width: 45%">
</el-date-picker>
<span style="margin: 0 6px; color: #DCDFE6;">~</span>
<el-date-picker
v-model="searchData.auditTimeEnd"
type="datetime"
value-format="yyyy-MM-dd HH:mm:ss"
format="yyyy-MM-dd HH:mm:ss"
placeholder="结束日期"
style="width: 45%">
</el-date-picker>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="触发时间">
<el-date-picker
v-model="searchData.triggerTimeStart"
type="datetime"
value-format="yyyy-MM-dd HH:mm:ss"
format="yyyy-MM-dd HH:mm:ss"
placeholder="开始日期"
style="width: 45%">
</el-date-picker>
<span style="margin: 0 6px; color: #DCDFE6;">~</span>
<el-date-picker
v-model="searchData.triggerTimeEnd"
type="datetime"
value-format="yyyy-MM-dd HH:mm:ss"
format="yyyy-MM-dd HH:mm:ss"
placeholder="结束日期"
style="width: 45%">
</el-date-picker>
</el-form-item>
</el-col>
</el-row>
</template> </template>
<div class="search-actions"> <div class="search-actions">
@ -136,6 +189,14 @@
<div class="todo-footer"> <div class="todo-footer">
<span class="todo-time">{{ formatDateTime(item.createdTime) }}</span> <span class="todo-time">{{ formatDateTime(item.createdTime) }}</span>
<div class="todo-action-group"> <div class="todo-action-group">
<el-button
size="mini"
type="primary"
plain
:disabled="item.auditFlag === 'Y' && item.operateFlag === 'Y'"
@click="showDetail(item)">
详情
</el-button>
<el-button <el-button
size="mini" size="mini"
type="warning" type="warning"
@ -146,11 +207,11 @@
</el-button> </el-button>
<el-button <el-button
size="mini" size="mini"
type="primary"
type="success"
plain plain
:disabled="item.auditFlag === 'Y' && item.operateFlag === 'Y'"
@click="showDetail(item)">
详情
:disabled="authChange || item.auditFlag !== 'Y'"
@click="openTodoChangeModal(item)">
变更
</el-button> </el-button>
</div> </div>
</div> </div>
@ -280,7 +341,8 @@
ref="comMrbRegister" ref="comMrbRegister"
:visible.sync="showMrbRegisterFlag" :visible.sync="showMrbRegisterFlag"
mode="single" mode="single"
:load-history="false"
:mrb-required="false"
:load-history="true"
@confirmed="onTodoMrbConfirmed"> @confirmed="onTodoMrbConfirmed">
</ComMrbRegister> </ComMrbRegister>
</div> </div>
@ -310,7 +372,11 @@ export default {
forceType: 'force', forceType: 'force',
todoStatus: 'pendingAudit', todoStatus: 'pendingAudit',
responsibilityDept: '', responsibilityDept: '',
keyword: ''
keyword: '',
auditTimeStart: '',
auditTimeEnd: '',
triggerTimeStart: '',
triggerTimeEnd: ''
}, },
forceTypeOptions: [ forceTypeOptions: [
{ label: '强制', value: 'force' }, { label: '强制', value: 'force' },
@ -341,12 +407,16 @@ export default {
}, },
detailRowList: [], detailRowList: [],
showMrbRegisterFlag: false, showMrbRegisterFlag: false,
currentAuditTodo: null
currentAuditTodo: null,
currentMrbAction: '',
authChange: false,
menuId: this.$route && this.$route.meta ? this.$route.meta.menuId : ''
} }
}, },
created () { created () {
this.loadBuList() this.loadBuList()
this.loadRoleList() this.loadRoleList()
this.getButtonAuthData()
this.getTodoStats() this.getTodoStats()
this.getDataList() this.getDataList()
}, },
@ -388,6 +458,10 @@ export default {
this.searchData.todoStatus = 'pendingAudit' this.searchData.todoStatus = 'pendingAudit'
this.searchData.responsibilityDept = '' this.searchData.responsibilityDept = ''
this.searchData.keyword = '' this.searchData.keyword = ''
this.searchData.auditTimeStart = ''
this.searchData.auditTimeEnd = ''
this.searchData.triggerTimeStart = ''
this.searchData.triggerTimeEnd = ''
this.queryHandle() this.queryHandle()
}, },
getTodoStats () { getTodoStats () {
@ -423,7 +497,11 @@ export default {
forceType: this.searchData.forceType, forceType: this.searchData.forceType,
todoStatus: this.searchData.todoStatus, todoStatus: this.searchData.todoStatus,
responsibilityDept: this.searchData.responsibilityDept, responsibilityDept: this.searchData.responsibilityDept,
keyword: this.searchData.keyword
keyword: this.searchData.keyword,
auditTimeStart: this.searchData.auditTimeStart || '',
auditTimeEnd: this.searchData.auditTimeEnd || '',
triggerTimeStart: this.searchData.triggerTimeStart || '',
triggerTimeEnd: this.searchData.triggerTimeEnd || ''
} }
}, },
sizeChangeHandle (val) { sizeChangeHandle (val) {
@ -527,11 +605,32 @@ export default {
this.$message.info('该代办已审核') this.$message.info('该代办已审核')
return return
} }
this.openTodoMrbModal(row, 'audit')
},
openTodoChangeModal (row) {
if (!row) {
return
}
if (this.authChange) {
this.$message.warning('当前用户无变更权限')
return
}
if (row.auditFlag !== 'Y') {
this.$message.warning('请先完成审核再进行变更')
return
}
this.openTodoMrbModal(row, 'change')
},
openTodoMrbModal (row, action) {
if (!row) {
return
}
const itemNo = this.toInt(row.itemNo) const itemNo = this.toInt(row.itemNo)
if (itemNo === null) { if (itemNo === null) {
this.$message.warning('未找到工序信息,无法发起审核')
this.$message.warning('未找到工序信息,无法打开MRB异常登记')
return return
} }
this.currentMrbAction = action || ''
this.currentAuditTodo = row this.currentAuditTodo = row
const scheduleData = { const scheduleData = {
site: row.site || this.searchData.site || this.$store.state.user.site, site: row.site || this.searchData.site || this.$store.state.user.site,
@ -554,6 +653,13 @@ export default {
if (!this.currentAuditTodo) { if (!this.currentAuditTodo) {
return return
} }
if (this.currentMrbAction === 'change') {
this.getTodoStats()
this.getDataList()
this.currentAuditTodo = null
this.currentMrbAction = ''
return
}
const todo = this.currentAuditTodo const todo = this.currentAuditTodo
const params = { const params = {
site: todo.site || this.searchData.site || this.$store.state.user.site, site: todo.site || this.searchData.site || this.$store.state.user.site,
@ -574,8 +680,17 @@ export default {
this.$message.error('代办审核失败') this.$message.error('代办审核失败')
}).finally(() => { }).finally(() => {
this.currentAuditTodo = null this.currentAuditTodo = null
this.currentMrbAction = ''
}) })
}, },
getButtonAuthData () {
if (typeof this.isAuth !== 'function' || !this.menuId) {
this.authChange = false
return
}
const changeFlag = this.isAuth(this.menuId + ':change')
this.authChange = !changeFlag
},
notifyTodoBadgeRefresh () { notifyTodoBadgeRefresh () {
if (typeof window !== 'undefined' && typeof window.dispatchEvent === 'function') { if (typeof window !== 'undefined' && typeof window.dispatchEvent === 'function') {
window.dispatchEvent(new Event('todo-badge-refresh')) window.dispatchEvent(new Event('todo-badge-refresh'))
@ -727,6 +842,7 @@ export default {
} }
.search-form /deep/ .el-form-item { .search-form /deep/ .el-form-item {
width: 100%;
margin-bottom: 12px; margin-bottom: 12px;
} }
@ -736,6 +852,16 @@ export default {
padding-bottom: 4px; padding-bottom: 4px;
} }
.search-condition-row {
margin-bottom: 0;
}
.search-form /deep/ .el-select,
.search-form /deep/ .el-date-editor.el-input,
.search-form /deep/ .el-date-editor.el-input__inner {
width: 100%;
}
.search-form /deep/ .el-input__inner, .search-form /deep/ .el-input__inner,
.search-form /deep/ .el-textarea__inner { .search-form /deep/ .el-textarea__inner {
border-radius: 6px; border-radius: 6px;

39
src/views/modules/yieldReport/com_mrb_register.vue

@ -46,7 +46,7 @@
</template> </template>
<template v-else> <template v-else>
<el-form ref="singleFormRef" class="mrb-entry-form" :model="singleForm" :rules="formRules" label-position="top">
<el-form ref="singleFormRef" class="mrb-entry-form" :model="singleForm" :rules="resolvedFormRules" label-position="top">
<el-row :gutter="16" class="mrb-form-row"> <el-row :gutter="16" class="mrb-form-row">
<el-col :span="12"> <el-col :span="12">
<el-form-item class="mrb-field" label="工单号"> <el-form-item class="mrb-field" label="工单号">
@ -99,7 +99,7 @@
ref="editFormRef" ref="editFormRef"
class="mrb-entry-form" class="mrb-entry-form"
:model="editForm" :model="editForm"
:rules="formRules"
:rules="resolvedFormRules"
label-position="top"> label-position="top">
<el-row :gutter="16" class="mrb-form-row"> <el-row :gutter="16" class="mrb-form-row">
<el-col :span="12"> <el-col :span="12">
@ -162,6 +162,10 @@ export default {
menuId: { menuId: {
type: [String, Number], type: [String, Number],
default: '' default: ''
},
mrbRequired: {
type: Boolean,
default: true
} }
}, },
data () { data () {
@ -183,18 +187,7 @@ export default {
editDialogMode: 'add', editDialogMode: 'add',
editForm: this.createEmptyForm(), editForm: this.createEmptyForm(),
singleForm: this.createEmptyForm(), singleForm: this.createEmptyForm(),
rowKeySeed: 1,
formRules: {
rollNo: [
{ required: true, message: '请输入卷号', trigger: ['blur', 'change'] }
],
mrb: [
{ required: true, message: '请输入MRB异常单号', trigger: ['blur', 'change'] }
],
mrbInspectionReport: [
{ required: true, message: '请输入制程异常单号', trigger: ['blur', 'change'] }
]
}
rowKeySeed: 1
} }
}, },
computed: { computed: {
@ -206,6 +199,22 @@ export default {
}, },
editDialogTitle () { editDialogTitle () {
return this.editDialogMode === 'edit' ? 'MRB异常单编辑' : 'MRB异常单登记' return this.editDialogMode === 'edit' ? 'MRB异常单编辑' : 'MRB异常单登记'
},
resolvedFormRules () {
const rules = {
rollNo: [
{ required: true, message: '请输入卷号', trigger: ['blur', 'change'] }
],
mrbInspectionReport: [
{ required: true, message: '请输入制程异常单号', trigger: ['blur', 'change'] }
]
}
if (this.mrbRequired) {
rules.mrb = [
{ required: true, message: '请输入MRB异常单号', trigger: ['blur', 'change'] }
]
}
return rules
} }
}, },
watch: { watch: {
@ -495,7 +504,7 @@ export default {
this.$message.warning(`${rowNo}行【卷号】不能为空`) this.$message.warning(`${rowNo}行【卷号】不能为空`)
return false return false
} }
if (!row.mrb) {
if (this.mrbRequired && !row.mrb) {
this.$message.warning(`${rowNo}行【MRB】不能为空`) this.$message.warning(`${rowNo}行【MRB】不能为空`)
return false return false
} }

Loading…
Cancel
Save