增加备件预警管理

This commit is contained in:
龙运模 2024-12-04 10:26:11 +08:00
parent 9161fa358e
commit 098396f716
5 changed files with 303 additions and 41 deletions

View File

@ -9,6 +9,35 @@ export default {
get: async function (params) {
return await http.post(this.url, params);
},
}
},
add:{
url: `${config.API_URL}/spare.parts.water.level.warning.edit`,
name: "新增/编辑水位信息",
post: async function (params) {
return await http.post(this.url, params);
},
},
delete:{
url: `${config.API_URL}/spare.parts.water.level.warning.delete`,
name: "删除水位信息",
post: async function (params) {
return await http.post(this.url, params);
},
},
room:{
url: `${config.API_URL}/regional.room.code.list`,
name: "区域机房代码列表",
post: async function (params) {
return await http.post(this.url, params);
},
},
export:{
url: `${config.API_URL}/spare.parts.water.level.warning.export`,
name: "导出备件预警列表",
post: async function (params) {
return await http.post(this.url,params);
}
},
}
};

View File

@ -47,7 +47,7 @@ export default {
},
methods:{
getWsResult(res){
if(res.data && (res.data.type == 6 || res.data.type == 7 || res.data.type == 8 || res.data.type == 11 || res.data.type == 19 || res.data.type == 20 || res.data.type == 29 || res.data.type == 30 || res.data.type == 32 || res.data.type == 33 || res.data.type == 34)){
if(res.data && (res.data.type == 6 || res.data.type == 7 || res.data.type == 8 || res.data.type == 11 || res.data.type == 19 || res.data.type == 20 || res.data.type == 29 || res.data.type == 30 || res.data.type == 32 || res.data.type == 33 || res.data.type == 34 || res.data.type == 43)){
let item = {
type:res.data.type,
type_desc:res.data.type_desc,
@ -86,9 +86,12 @@ export default {
case 33:
this.list[9] = item;
break;
default:
case 34:
this.list[10] = item;
break;
default:
this.list[11] = item;
break;
}
if(res.data && res.data.status == 1100){

View File

@ -1,5 +1,16 @@
<template>
<el-container class="mainBox mainBoxHeaderNoBorder">
<el-header class="header">
<div class="left-panel">
<el-button type="primary" v-auth="'sparePartsWaterLevelWarningEdit'" :size="size" icon="el-icon-plus" @click="add">新增预警</el-button>
<el-button type="danger" v-auth="'sparePartsWaterLevelWarningDelete'" plain :size="size" icon="el-icon-Delete" :disabled="selection.length==0" @click="batch_del"></el-button>
</div>
<div class="right-panel">
<scExport :size="size" @exportData="exportData" @updateShow="exportChangeShow" :show="exportShow" type="43">
<el-button :size="size" v-auth="'sparePartsWaterLevelWarningExport'" icon="sc-icon-Download" :disabled="exportShow" @click="exportData">下载</el-button>
</scExport>
</div>
</el-header>
<el-main class="nopadding">
<div class="searchMain">
<scSearch ref="scSearch" :searchList="searchList" @fetchSelectData="getSelectData"></scSearch>
@ -9,7 +20,7 @@
<el-button :size="size" type="info" icon="el-icon-RefreshRight">重置</el-button>
</div>
</div>
<scTable ref="table" :apiObj="list.apiObj" row-key="id" @selection-change="selectionChange" stripe :size="size">
<scTable ref="table" :apiObj="list.apiObj" :column="list.column" row-key="id" @selection-change="selectionChange" stripe :size="size">
<el-table-column type="selection" align="center" width="40"></el-table-column>
<sc-table-column label="序号" align="center" type="index"></sc-table-column>
<el-table-column label="操作" fixed="right" align="center" width="150">
@ -18,9 +29,13 @@
<el-button class="noBorderBtn" icon="el-icon-more" :size="size"></el-button>
<template #dropdown>
<el-dropdown-menu>
<el-dropdown-item @click="table_show(scope.row, 'see')" icon="sc-icon-See">查看详情</el-dropdown-item>
<el-dropdown-item @click="table_edit(scope.row, 'edit')" icon="sc-icon-Edit">编辑</el-dropdown-item>
<el-dropdown-item @click="table_del(scope.row, 'delete')" icon="sc-icon-Delete">删除</el-dropdown-item>
<el-dropdown-item @click="table_show(scope.row, 'see')" icon="sc-icon-See">查看</el-dropdown-item>
<span v-auth="'sparePartsWaterLevelWarningEdit'">
<el-dropdown-item @click="table_edit(scope.row, 'edit')" icon="sc-icon-Edit">编辑</el-dropdown-item>
</span>
<span v-auth="'sparePartsWaterLevelWarningDelete'">
<el-dropdown-item @click="table_del(scope.row, 'delete')" divided icon="sc-icon-Delete">删除</el-dropdown-item>
</span>
</el-dropdown-menu>
</template>
</el-dropdown>
@ -29,27 +44,25 @@
</scTable>
</el-main>
</el-container>
<save-dialog v-if="dialog.save" ref="saveDialog" @success="handleSaveSuccess" @closed="dialog.save=false"></save-dialog>
</template>
<script>
import saveDialog from "./save"
export default {
name: 'earlyManager',
components: {
saveDialog
},
data() {
return {
size:'small',
searchShow:false,
setMap:{
status:[]
},
dialog: {
save: false,
permission: false
},
exportShow:false,
list:{
apiObj: this.$API.early.earlyWarn.list,
column:[]
@ -105,31 +118,28 @@ export default {
this.$refs.saveDialog.open('show').setData(row)
})
},
//
permission(){
this.dialog.permission = true
this.$nextTick(() => {
this.$refs.permissionDialog.open()
})
},
//
async table_del(row){
const reqData = {id: row.id};
const res = await this.$API.demo.post.post(reqData);
const reqData = {ids: [row.id]};
const res = await this.$API.early.earlyWarn.delete.post(reqData);
if(res.code == 200){
this.$refs.table.refresh()
this.$message.success("删除成功")
this.$refs.table.refresh();
this.$message.success("删除成功");
}
},
//
async batch_del(){
this.$confirm(`确定删除选中的 ${this.selection.length} 项吗?`, '提示', {
type: 'warning'
}).then(() => {
}).then(async () => {
const loading = this.$loading();
this.$refs.table.refresh()
loading.close();
this.$message.success("操作成功")
const params = {ids: this.selection.map(em => em.id)}
const res = await this.$API.early.earlyWarn.delete.post(params);
if (res.code == 200) {
this.$refs.table.refresh()
loading.close();
this.$message.success("操作成功")
}
}).catch(() => {
})
@ -138,16 +148,6 @@ export default {
selectionChange(selection){
this.selection = selection;
},
//
changeSwitch(val, row){
row.status = row.status == '1'?'0':'1'
row.$switch_status = true;
setTimeout(()=>{
delete row.$switch_status;
row.status = val;
this.$message.success("操作成功")
}, 500)
},
//
upSearch(){
this.$refs.table.upData(this.params);
@ -160,7 +160,21 @@ export default {
}else if(mode=='edit'){
this.$refs.table.refresh()
}
}
},
//
exportChangeShow(params){
if(params.type == 43){
this.exportShow = params.status==0?true:false
}
},
async exportData() {
if(this.exportShow) return
const res = await this.$API.early.earlyWarn.export.post(this.params);
if(res.code == 200){
this.$message.success('开始导出');
}
},
}
}
</script>

View File

@ -0,0 +1,139 @@
<template>
<el-dialog :title="titleMap[mode]" v-model="visible" :width="500" destroy-on-close @closed="$emit('closed')">
<el-form :model="form" :rules="rules" :disabled="mode=='show'" ref="dialogForm" label-width="140px">
<el-form-item label="区域" prop="region">
<el-select v-model="form.region" placeholder="请选择区域" filterable clearable style="width: 100%;">
<el-option v-for="(item,index) in setMap.roomList" :key="index" :label="item.room_name" :value="item.room_code"></el-option>
</el-select>
</el-form-item>
<el-form-item label="部件类别" prop="part_category">
<el-input v-model="form.part_category" placeholder="请输入部件类别" clearable type="text"></el-input>
</el-form-item>
<el-form-item label="部件MPN" prop="part_mpn">
<el-input v-model="form.part_mpn" placeholder="请输入部件MPN" clearable type="text"></el-input>
</el-form-item>
<el-form-item label="在保备件出货总数" prop="total_protected_parts">
<el-input v-model="form.total_protected_parts" placeholder="请输入出货总数" clearable type="text"></el-input>
</el-form-item>
<el-form-item label="在保备件水位" prop="protected_spares_water_level">
<el-input v-model="form.protected_spares_water_level" placeholder="请输入备件水位" clearable type="text"></el-input>
</el-form-item>
<el-form-item label="在保备件数量" prop="protected_spares_quantity">
<el-input v-model="form.protected_spares_quantity" placeholder="请输入备件数量" clearable type="text"></el-input>
</el-form-item>
<el-form-item label="治理计划" prop="governance_plan">
<el-input v-model="form.governance_plan" placeholder="请输入治理计划" clearable type="textarea" :rows="3"></el-input>
</el-form-item>
<el-form-item label="风险描述" prop="risk_description">
<el-input v-model="form.risk_description" placeholder="请输入风险描述" clearable type="textarea" :rows="3"></el-input>
</el-form-item>
</el-form>
<template #footer>
<el-button @click="visible=false" > </el-button>
<el-button v-if="mode!='show'" type="primary" :loading="isSave" @click="submit()"> </el-button>
</template>
</el-dialog>
</template>
<script>
export default {
emits: ['success', 'closed'],
data() {
return {
mode: "add",
titleMap: {
add: '新增预警',
edit: '编辑预警',
show: '查看详情'
},
visible: false,
isSave: false,
setMap:{
roomList:[]
},
//
form: {
id:"",
region: "",
part_category: "",
part_mpn: "",
total_protected_parts: "",
protected_spares_water_level: "",
protected_spares_quantity: "",
governance_plan: "",
risk_description: "",
},
//
rules: {
region:[
{required:true,message:"区域不能为空"}
],
part_category:[
{required:true,message:"部件类别不能为空"}
],
part_mpn:[
{required:true,message:"部件MPN不能为空"}
],
total_protected_parts:[
{required:true,message:"在保备件出货总数不能为空"}
],
protected_spares_water_level:[
{required:true,message:"在保备件水位不能为空"}
],
protected_spares_quantity:[
{required:true,message:"在保备件数量不能为空"}
]
},
roomParams:{
field:"room_code",
room_code:{
operator:"link",
value:""
}
}
}
},
mounted() {
this.roomList()
},
methods: {
//
open(mode='add'){
this.mode = mode;
this.visible = true;
return this
},
//
async roomList(){
const res = await this.$API.early.earlyWarn.room.post(this.roomParams);
if(res.code == 200){
this.setMap.roomList = res.data;
}
},
//
submit(){
this.$refs.dialogForm.validate(async (valid) => {
if (valid) {
this.isSave = true;
const res = await this.$API.early.earlyWarn.add.post(this.form);
this.isSave = false;
if(res.code == 200){
this.$emit('success', this.form, this.mode);
this.visible = false;
this.$message.success("操作成功");
}
}
})
},
//
async setData(data) {
Object.assign(this.form, data);
}
}
}
</script>
<style>
</style>

View File

@ -44,6 +44,26 @@
</el-row>
</div>
</div>
<div class="boxMain cardItem">
<div class="title">流程进度</div>
<div class="boxCom cardBody">
<el-steps class="orderSteps" :active="form.process_num" align-center>
<el-step :status="item.status" v-for="(item,index) in form.process_engine" :key="index" :title="item.description" />
</el-steps>
</div>
</div>
<div class="boxMain ">
<div class="title">维保单号</div>
<div class="boxCom">
<el-row>
<el-col :span="8" :lg="6">
<el-form-item label="维修单号" prop="maintenance_grade">
<el-input class="input" v-model="form.repair_order_no" type="text" disabled placeholder="请输入维修单号"></el-input>
</el-form-item>
</el-col>
</el-row>
</div>
</div>
<div class="boxMain">
<div class="title">维保工单信息</div>
<div class="boxCom">
@ -192,8 +212,13 @@ export default {
setMap:{
maintenance_level:[],
fault_type:[],
customer:[],
},
params:{
order_id:Number(this.$route.query.id)
},
form:{
id:"",
customer_id:"", //
standard_model:"", //
repair_order_no:"",
@ -219,7 +244,8 @@ export default {
warranty_end_date: "", //
maintenance_plan: '', // 1-
is_verify_erp_inventory:true,
component_info:[]
component_info:[],
process_engine:[]
},
rules:{
fault_description:[{required:true,trigger:"blur",message:"故障描述不能为空"}],
@ -238,9 +264,60 @@ export default {
}
},
mounted() {
this.getData();
this.getCustomerSelect('customer');
this.getSelect('fault_type',1);
this.getSelect('maintenance_level',2);
},
methods:{
async getData() {
this.loading = true;
const res = await this.$API.orders.order.maintenance.info.post(this.params);
if(res.code == 200){
for(let i in this.form){
this.form[i] = res.data[i]===0?'':res.data[i];
}
if(res.data.process_engine){
let obj = this.processList(res.data.process_engine);
res.data.process_engine = obj.processedList;
res.data.process_num = obj.num;
}
this.form.process_engine = res.data.process_engine;
this.form.component_info = res.data.component_info;
if(res.data.component_info.length==0){
this.form.component_info = [
{
component_serial_no:res.data.component_serial_no,
component_manufacturer:res.data.component_manufacturer,
component_model:res.data.component_model,
component_pn:res.data.component_pn,
bd_backup_count:res.data.bd_backup_count
}
]
}
}
this.loading = false;
},
processList(list) {
let obj = {
num:0,
processedList:this.$TOOL.objCopy(list)
}
let foundNodeTrue = false;
for (let i = 0; i < obj.processedList.length; i++) {
if (obj.processedList[i].node === true) {
foundNodeTrue = true;
obj.processedList[i].status = 'finish';
obj.num = i;
} else if (!foundNodeTrue) {
obj.processedList[i].status = 'success';
}
if (foundNodeTrue && obj.processedList[i].node !== true) break;
}
return obj;
},
async getSelect(name,num) {
const res = await this.$API.orders.order.maintenance.optionList.post({const_type:num});
if(res.code == 200){