完善工单列表详情
This commit is contained in:
+32
-143
@@ -1,163 +1,28 @@
|
||||
<template>
|
||||
<el-container>
|
||||
<el-main class="orderMain">
|
||||
<el-main class="orderMain" v-loading="loading" element-loading-text="加载中...">
|
||||
<el-scrollbar>
|
||||
<div class="cardBox">
|
||||
<div class="headerView">
|
||||
<div class="title">工单时间</div>
|
||||
<div class="status">
|
||||
<span class="name">当前状态:</span>
|
||||
<span class="text">{{info.business_status}}</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="cardBody">
|
||||
<el-row>
|
||||
<el-col :span="8" :lg="6">
|
||||
<span class="label">创建时间:</span>
|
||||
<span class="text">{{info.created_at}}</span>
|
||||
</el-col>
|
||||
<el-col :span="8" :lg="6">
|
||||
<span class="label">PE确认时间:</span>
|
||||
<span class="text">{{info.pe_confirmation_time}}</span>
|
||||
</el-col>
|
||||
<el-col :span="8" :lg="6">
|
||||
<span class="label">过保时间:</span>
|
||||
<span class="text">{{info.warranty_end_date}}</span>
|
||||
</el-col>
|
||||
</el-row>
|
||||
</div>
|
||||
</div>
|
||||
<div class="cardBox footerCard">
|
||||
<div class="cardItem">
|
||||
<div class="title">流程进度</div>
|
||||
<div class="cardBody">
|
||||
<el-steps :active="2" align-center>
|
||||
<el-step :status="item.node?'error':'finish'" v-for="item in info.process_engine" :key="item" :title="item.description" />
|
||||
</el-steps>
|
||||
</div>
|
||||
</div>
|
||||
<div class="cardItem">
|
||||
<div class="title">维保单号</div>
|
||||
<div class="cardBody">
|
||||
<el-row>
|
||||
<el-col :span="8" :lg="6">
|
||||
<span class="label">维修单号:</span>
|
||||
<span class="text">{{info.repair_order_no}}</span>
|
||||
</el-col>
|
||||
</el-row>
|
||||
</div>
|
||||
</div>
|
||||
<div class="cardItem">
|
||||
<div class="title">维保工单信息</div>
|
||||
<div class="cardBody">
|
||||
<el-row>
|
||||
<el-col :span="8" :lg="6">
|
||||
<span class="label">维修等级:</span>
|
||||
<span class="text">{{info.maintenance_plan}}</span>
|
||||
</el-col>
|
||||
<el-col :span="8" :lg="6">
|
||||
<span class="label">故障类型:</span>
|
||||
<span class="text">{{info.fault_type}}</span>
|
||||
</el-col>
|
||||
<el-col :span="8" :lg="6">
|
||||
<span class="label">故障内容:</span>
|
||||
<span class="text">{{info.fault_description}}</span>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<el-row>
|
||||
<el-col :span="8" :lg="6">
|
||||
<span class="label">维保等级:</span>
|
||||
<span class="text">{{info.maintenance_plan}}</span>
|
||||
</el-col>
|
||||
<el-col :span="8" :lg="6">
|
||||
<span class="label">是否关机:</span>
|
||||
<span class="text">{{info.requires_shutdown}}</span>
|
||||
</el-col>
|
||||
</el-row>
|
||||
</div>
|
||||
</div>
|
||||
<div class="cardItem">
|
||||
<div class="title">部件信息</div>
|
||||
<div class="cardBody">
|
||||
<el-row>
|
||||
<el-col :span="8" :lg="6">
|
||||
<span class="label">机房城市:</span>
|
||||
<span class="text">{{info.city}}</span>
|
||||
</el-col>
|
||||
<el-col :span="8" :lg="6">
|
||||
<span class="label">园区:</span>
|
||||
<span class="text">{{info.park_name}}</span>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<el-row>
|
||||
<el-col :span="8" :lg="6">
|
||||
<span class="label">机房:</span>
|
||||
<span class="text">{{info.data_center_name}}</span>
|
||||
</el-col>
|
||||
<el-col :span="8" :lg="6">
|
||||
<span class="label">机架位:</span>
|
||||
<span class="text">{{info.rack_position}}</span>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<el-row>
|
||||
<el-col :span="8" :lg="6">
|
||||
<span class="label">整机SN:</span>
|
||||
<span class="text">{{info.device_sn}}</span>
|
||||
</el-col>
|
||||
<el-col :span="8" :lg="6">
|
||||
<span class="label">整机厂商:</span>
|
||||
<span class="text">{{info.device_manufacturer}}</span>
|
||||
</el-col>
|
||||
<el-col :span="8" :lg="6">
|
||||
<span class="label">整机型号:</span>
|
||||
<span class="text">{{info.device_model}}</span>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<el-row>
|
||||
<el-col :span="8" :lg="6">
|
||||
<span class="label">部件SN/Sp:</span>
|
||||
<span class="text">{{info.component_serial_no}}</span>
|
||||
</el-col>
|
||||
<el-col :span="8" :lg="6">
|
||||
<span class="label">部件厂商:</span>
|
||||
<span class="text">{{info.component_manufacturer}}</span>
|
||||
</el-col>
|
||||
<el-col :span="8" :lg="6">
|
||||
<span class="label">部件型号:</span>
|
||||
<span class="text">{{info.component_model}}</span>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<el-row>
|
||||
<el-col :span="8" :lg="6">
|
||||
<span class="label">部件PN/Sp:</span>
|
||||
<span class="text">{{info.component_pn}}</span>
|
||||
</el-col>
|
||||
<el-col :span="8" :lg="6">
|
||||
<span class="label">SLA截止时间:</span>
|
||||
<span class="text">{{info.sla_expiration}}</span>
|
||||
</el-col>
|
||||
<el-col :span="8" :lg="6">
|
||||
<span class="label">剩余BD数:</span>
|
||||
<span class="text">{{info.bd_backup_count}}</span>
|
||||
</el-col>
|
||||
</el-row>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<detailView :data="info"></detailView>
|
||||
</el-scrollbar>
|
||||
</el-main>
|
||||
</el-container>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import detailView from "@/views/order/orderList/detailView";
|
||||
export default {
|
||||
name: "order-info",
|
||||
components:{
|
||||
detailView
|
||||
},
|
||||
data(){
|
||||
return{
|
||||
loading:false,
|
||||
params:{
|
||||
order_id:Number(this.$route.query.id)
|
||||
},
|
||||
info:{}
|
||||
|
||||
}
|
||||
},
|
||||
mounted() {
|
||||
@@ -165,10 +30,34 @@ export default {
|
||||
},
|
||||
methods:{
|
||||
async getData() {
|
||||
this.loading = true;
|
||||
const res = await this.$API.orders.order.maintenance.info.post(this.params);
|
||||
if(res.code == 200){
|
||||
if(res.data.process_engine){
|
||||
res.data.process_engine = this.processList(res.data.process_engine).processedList;
|
||||
res.data.process_num = this.processList(res.data.process_engine).num;
|
||||
}
|
||||
this.info = res.data;
|
||||
}
|
||||
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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -23,7 +23,7 @@ export default {
|
||||
column: [],
|
||||
},
|
||||
params:{
|
||||
bill_id: this.$route.query.id,
|
||||
bill_id: Number(this.$route.query.id),
|
||||
bill_type:1, // 1维保单 2维修单
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,176 @@
|
||||
<template>
|
||||
<div class="cardBox">
|
||||
<div class="headerView">
|
||||
<div class="title">工单时间</div>
|
||||
<div class="status">
|
||||
<span class="name">当前状态:</span>
|
||||
<span class="text">{{info.business_status}}</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="cardBody">
|
||||
<el-row>
|
||||
<el-col :span="8" :lg="6">
|
||||
<span class="label">创建时间:</span>
|
||||
<span class="text">{{info.created_at}}</span>
|
||||
</el-col>
|
||||
<el-col :span="8" :lg="6">
|
||||
<span class="label">PE确认时间:</span>
|
||||
<span class="text">{{info.pe_confirmation_time}}</span>
|
||||
</el-col>
|
||||
<el-col :span="8" :lg="6">
|
||||
<span class="label">过保时间:</span>
|
||||
<span class="text">{{info.warranty_end_date}}</span>
|
||||
</el-col>
|
||||
</el-row>
|
||||
</div>
|
||||
</div>
|
||||
<div class="cardBox footerCard">
|
||||
<div class="cardItem">
|
||||
<div class="title">流程进度</div>
|
||||
<div class="cardBody">
|
||||
<el-steps class="orderSteps" :active="info.process_num" align-center>
|
||||
<el-step :status="item.status" v-for="item in info.process_engine" :key="item" :title="item.description" />
|
||||
</el-steps>
|
||||
</div>
|
||||
</div>
|
||||
<div class="cardItem">
|
||||
<div class="title">维保单号</div>
|
||||
<div class="cardBody">
|
||||
<el-row>
|
||||
<el-col :span="8" :lg="6">
|
||||
<span class="label">维修单号:</span>
|
||||
<span class="text">{{info.repair_order_no}}</span>
|
||||
</el-col>
|
||||
</el-row>
|
||||
</div>
|
||||
</div>
|
||||
<div class="cardItem">
|
||||
<div class="title">维保工单信息</div>
|
||||
<div class="cardBody">
|
||||
<el-row>
|
||||
<el-col :span="8" :lg="6">
|
||||
<span class="label">维修等级:</span>
|
||||
<span class="text">{{info.maintenance_plan}}</span>
|
||||
</el-col>
|
||||
<el-col :span="8" :lg="6">
|
||||
<span class="label">故障类型:</span>
|
||||
<span class="text">{{info.fault_type}}</span>
|
||||
</el-col>
|
||||
<el-col :span="8" :lg="6">
|
||||
<span class="label">故障内容:</span>
|
||||
<span class="text">{{info.fault_description}}</span>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<el-row>
|
||||
<el-col :span="8" :lg="6">
|
||||
<span class="label">维保等级:</span>
|
||||
<span class="text">{{info.maintenance_plan}}</span>
|
||||
</el-col>
|
||||
<el-col :span="8" :lg="6">
|
||||
<span class="label">是否关机:</span>
|
||||
<span class="text">{{info.requires_shutdown}}</span>
|
||||
</el-col>
|
||||
</el-row>
|
||||
</div>
|
||||
</div>
|
||||
<div class="cardItem">
|
||||
<div class="title">部件信息</div>
|
||||
<div class="cardBody">
|
||||
<el-row>
|
||||
<el-col :span="8" :lg="6">
|
||||
<span class="label">机房城市:</span>
|
||||
<span class="text">{{info.city}}</span>
|
||||
</el-col>
|
||||
<el-col :span="8" :lg="6">
|
||||
<span class="label">园区:</span>
|
||||
<span class="text">{{info.park_name}}</span>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<el-row>
|
||||
<el-col :span="8" :lg="6">
|
||||
<span class="label">机房:</span>
|
||||
<span class="text">{{info.data_center_name}}</span>
|
||||
</el-col>
|
||||
<el-col :span="8" :lg="6">
|
||||
<span class="label">机架位:</span>
|
||||
<span class="text">{{info.rack_position}}</span>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<el-row>
|
||||
<el-col :span="8" :lg="6">
|
||||
<span class="label">整机SN:</span>
|
||||
<span class="text">{{info.device_sn}}</span>
|
||||
</el-col>
|
||||
<el-col :span="8" :lg="6">
|
||||
<span class="label">整机厂商:</span>
|
||||
<span class="text">{{info.device_manufacturer}}</span>
|
||||
</el-col>
|
||||
<el-col :span="8" :lg="6">
|
||||
<span class="label">整机型号:</span>
|
||||
<span class="text">{{info.device_model}}</span>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<el-row>
|
||||
<el-col :span="8" :lg="6">
|
||||
<span class="label">部件SN/Sp:</span>
|
||||
<span class="text">{{info.component_serial_no}}</span>
|
||||
</el-col>
|
||||
<el-col :span="8" :lg="6">
|
||||
<span class="label">部件厂商:</span>
|
||||
<span class="text">{{info.component_manufacturer}}</span>
|
||||
</el-col>
|
||||
<el-col :span="8" :lg="6">
|
||||
<span class="label">部件型号:</span>
|
||||
<span class="text">{{info.component_model}}</span>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<el-row>
|
||||
<el-col :span="8" :lg="6">
|
||||
<span class="label">部件PN/Sp:</span>
|
||||
<span class="text">{{info.component_pn}}</span>
|
||||
</el-col>
|
||||
<el-col :span="8" :lg="6">
|
||||
<span class="label">SLA截止时间:</span>
|
||||
<span class="text">{{info.sla_expiration}}</span>
|
||||
</el-col>
|
||||
<el-col :span="8" :lg="6">
|
||||
<span class="label">剩余BD数:</span>
|
||||
<span class="text">{{info.bd_backup_count}}</span>
|
||||
</el-col>
|
||||
</el-row>
|
||||
</div>
|
||||
</div>
|
||||
<slot name="review"></slot>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
export default {
|
||||
name: "detailView",
|
||||
props:{
|
||||
data:{
|
||||
type:Object
|
||||
}
|
||||
},
|
||||
watch:{
|
||||
data(val){
|
||||
this.info = val;
|
||||
}
|
||||
},
|
||||
data(){
|
||||
return{
|
||||
info:{}
|
||||
}
|
||||
},
|
||||
mounted() {
|
||||
|
||||
},
|
||||
methods:{
|
||||
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style scoped lang="scss">
|
||||
|
||||
</style>
|
||||
@@ -3,9 +3,9 @@
|
||||
<el-header>
|
||||
<div class="left-panel">
|
||||
<el-button type="primary" :size="size" icon="el-icon-plus" @click="add">新增工单</el-button>
|
||||
<el-button type="success" :size="size" icon="sc-icon-Review" :disabled="selection.length==0" @click="batch_del">批量审核</el-button>
|
||||
<el-button type="primary" plain :size="size" icon="sc-icon-OrderSetup" :disabled="selection.length==0" @click="batch_del">提交维保</el-button>
|
||||
<el-button type="primary" plain :size="size" icon="sc-icon-OrderSetup" :disabled="selection.length==0" @click="batch_del">下发维保</el-button>
|
||||
<el-button type="success" :size="size" icon="sc-icon-OrderReview" :disabled="selection.length==0" @click="batch_review">批量审核</el-button>
|
||||
<el-button type="primary" plain :size="size" :disabled="selection.length==0" @click="save_maintenance">提交维保</el-button>
|
||||
<el-button type="primary" plain :size="size" :disabled="selection.length==0" @click="issued_maintenance">下发维保</el-button>
|
||||
<el-button type="danger" plain :size="size" icon="el-icon-Delete" :disabled="selection.length==0" @click="batch_del"></el-button>
|
||||
<scImport ref="scImport" :size="size" title="批量导入维保工单" @parentParams="importUpload" @importSuccess="importSuccess">
|
||||
<template #header>
|
||||
@@ -53,12 +53,12 @@
|
||||
<el-button class="noBorderBtn" icon="el-icon-more" :size="size"></el-button>
|
||||
<template #dropdown>
|
||||
<el-dropdown-menu>
|
||||
<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" divided>审核工单</el-dropdown-item>
|
||||
<el-dropdown-item @click="table_show(scope.row, 'see')" icon="sc-icon-See">工单详情</el-dropdown-item>
|
||||
<el-dropdown-item icon="sc-icon-OrderSetup" @click="table_setup(scope.row)" divided>提交维保</el-dropdown-item>
|
||||
<el-dropdown-item icon="sc-icon-OrderSetup" @click="table_setup(scope.row)">下发维保</el-dropdown-item>
|
||||
<el-dropdown-item @click="table_edit(scope.row)" icon="sc-icon-Edit">编辑工单</el-dropdown-item>
|
||||
<el-dropdown-item @click="table_del(scope.row)" icon="sc-icon-Delete">删除工单</el-dropdown-item>
|
||||
<el-dropdown-item @click="table_review(scope.row)" icon="sc-icon-OrderReview" divided>审核工单</el-dropdown-item>
|
||||
<el-dropdown-item @click="table_show(scope.row)" icon="sc-icon-See">工单详情</el-dropdown-item>
|
||||
<el-dropdown-item icon="sc-icon-SaveMaintenance" @click="table_submit(scope.row)" divided>提交维保</el-dropdown-item>
|
||||
<el-dropdown-item icon="sc-icon-OrderMaintenance" @click="table_send(scope.row)">下发维保</el-dropdown-item>
|
||||
<el-dropdown-item icon="sc-icon-OrderLog" @click="table_logs(scope.row)" divided>工单日志</el-dropdown-item>
|
||||
</el-dropdown-menu>
|
||||
</template>
|
||||
@@ -158,7 +158,7 @@ export default {
|
||||
|
||||
//添加
|
||||
add(){
|
||||
eventBus.$emit('tagClose','/order/create-order',{id:this.emailId});
|
||||
eventBus.$emit('tagClose','/order/create-order');
|
||||
},
|
||||
|
||||
// 批量导入
|
||||
@@ -192,15 +192,16 @@ export default {
|
||||
|
||||
//编辑
|
||||
table_edit(row){
|
||||
this.dialog.save = true
|
||||
this.$nextTick(() => {
|
||||
this.$refs.saveDialog.open('edit').setData(row)
|
||||
})
|
||||
eventBus.$emit('tagClose','/order/create-order',{id:row.id});
|
||||
},
|
||||
//查看
|
||||
table_show(row){
|
||||
eventBus.$emit('tagClose','/order/order-info',{id:row.id});
|
||||
},
|
||||
// 审核
|
||||
table_review(row){
|
||||
eventBus.$emit('tagClose','/order/preview-order',{id:row.id});
|
||||
},
|
||||
//删除
|
||||
async table_del(row){
|
||||
this.$confirm(`确定删除 ${row.repair_order_no} 吗?`, '提示', {
|
||||
@@ -210,7 +211,6 @@ export default {
|
||||
const res = await this.$API.orders.order.maintenance.delete.post(reqData);
|
||||
if(res.code == 200){
|
||||
this.$refs.table.refresh();
|
||||
this.$message.success("删除成功")
|
||||
}
|
||||
}).catch(()=>{})
|
||||
},
|
||||
@@ -223,30 +223,68 @@ export default {
|
||||
const res = await this.$API.orders.order.maintenance.delete.post(reqData);
|
||||
if(res.code == 200){
|
||||
this.$refs.table.refresh();
|
||||
this.$message.success("删除成功")
|
||||
}
|
||||
}).catch(()=>{})
|
||||
},
|
||||
async batch_review(){
|
||||
this.$messageBox.prompt('如果拒绝,请输入审核不通过的理由。', '审核', {
|
||||
confirmButtonText: '拒绝',
|
||||
cancelButtonText: '通过',
|
||||
cancelButtonClass:'cancelBtn el-button--primary',
|
||||
confirmButtonClass:'saveBtn el-button--danger',
|
||||
}).then(async ({value}) => {
|
||||
let params = {
|
||||
order_ids:this.selection.map(em=>em.id),
|
||||
status:false,
|
||||
opinion:value
|
||||
}
|
||||
const res = await this.$API.orders.order.maintenance.review.post(params);
|
||||
if(res.code == 200){
|
||||
this.$refs.table.refresh();
|
||||
}
|
||||
}).catch(async () => {
|
||||
let params = {
|
||||
order_ids: this.selection.map(em => em.id),
|
||||
status: true,
|
||||
}
|
||||
const res = await this.$API.orders.order.maintenance.review.post(params);
|
||||
if (res.code == 200) {
|
||||
this.$refs.table.refresh();
|
||||
}
|
||||
})
|
||||
},
|
||||
async save_maintenance() {
|
||||
const params = {order_ids: this.selection.map(em => em.id)};
|
||||
const res = await this.$API.orders.order.maintenance.submit.post(params);
|
||||
if (res.code == 200) {
|
||||
this.$refs.table.refresh();
|
||||
this.$message.success("操作成功")
|
||||
}
|
||||
},
|
||||
async issued_maintenance() {
|
||||
const params = {order_ids: this.selection.map(em => em.id)};
|
||||
const res = await this.$API.orders.order.maintenance.send.post(params);
|
||||
if (res.code == 200) {
|
||||
this.$refs.table.refresh();
|
||||
this.$message.success("操作成功")
|
||||
}
|
||||
},
|
||||
// 工单设置
|
||||
table_setup(){
|
||||
// row
|
||||
// this.$router.push({
|
||||
// path: '/order/add-permission',
|
||||
// query: {
|
||||
// id: row.id,
|
||||
// name:row.name
|
||||
// }
|
||||
// })
|
||||
async table_submit(row){
|
||||
eventBus.$emit('tagClose','/order/submit-order',{id:row.id});
|
||||
},
|
||||
async table_send(row) {
|
||||
let params = {
|
||||
order_ids:[row.id]
|
||||
}
|
||||
const res = await this.$API.orders.order.maintenance.send.post(params);
|
||||
if (res.code == 200) {
|
||||
this.$refs.table.refresh();
|
||||
}
|
||||
},
|
||||
// 工单日志
|
||||
table_logs(row){
|
||||
this.$router.push({
|
||||
path: '/order/order-logs',
|
||||
query: {
|
||||
id: row.id,
|
||||
name:row.name
|
||||
}
|
||||
})
|
||||
eventBus.$emit('tagClose','/order/order-logs',{id:row.id});
|
||||
},
|
||||
//表格选择后回调事件
|
||||
selectionChange(selection){
|
||||
@@ -303,4 +341,12 @@ export default {
|
||||
height: 20px;
|
||||
margin: 0 auto;
|
||||
}
|
||||
.el-message-box{
|
||||
::v-deep .cancelBtn{
|
||||
|
||||
}
|
||||
::v-deep .saveBtn{
|
||||
|
||||
}
|
||||
}
|
||||
</style>
|
||||
|
||||
@@ -1,24 +1,103 @@
|
||||
<template>
|
||||
<div></div>
|
||||
<el-container>
|
||||
<el-main class="orderMain" v-loading="loading" element-loading-text="加载中...">
|
||||
<el-scrollbar>
|
||||
<detailView :data="info">
|
||||
<template #review>
|
||||
<div class="reviewBox">
|
||||
<el-input type="textarea" v-model="opinion" min="4" placeholder="请填写具体原因"></el-input>
|
||||
<div class="btnView">
|
||||
<el-button type="primary" :size="size" @click="save(1)" :loading="confirmLoading">审核通过</el-button>
|
||||
<el-button type="danger" :size="size" @click="save(2)" :loading="cancelLoading">审核拒绝</el-button>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
</detailView>
|
||||
</el-scrollbar>
|
||||
</el-main>
|
||||
</el-container>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import detailView from "@/views/order/orderList/detailView";
|
||||
export default {
|
||||
name: "preview-order",
|
||||
components:{
|
||||
detailView
|
||||
},
|
||||
data(){
|
||||
return{
|
||||
|
||||
size:'small',
|
||||
loading:false,
|
||||
confirmLoading:false,
|
||||
cancelLoading:false,
|
||||
opinion:"",
|
||||
params:{
|
||||
order_id:Number(this.$route.query.id)
|
||||
},
|
||||
info:{}
|
||||
}
|
||||
},
|
||||
mounted() {
|
||||
|
||||
this.getData();
|
||||
},
|
||||
methods:{
|
||||
|
||||
async getData() {
|
||||
this.loading = true;
|
||||
const res = await this.$API.orders.order.maintenance.info.post(this.params);
|
||||
if(res.code == 200){
|
||||
if(res.data.process_engine){
|
||||
res.data.process_engine = this.processList(res.data.process_engine).processedList;
|
||||
res.data.process_num = this.processList(res.data.process_engine).num;
|
||||
}
|
||||
this.info = res.data;
|
||||
}
|
||||
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 save(type) {
|
||||
let params = {
|
||||
order_ids: [this.params.order_id],
|
||||
status: type == 1?true:false,
|
||||
opinion: this.opinion
|
||||
}
|
||||
if (type == 1) {
|
||||
delete params.opinion
|
||||
this.confirmLoading = true;
|
||||
}else{
|
||||
this.cancelLoading = true;
|
||||
}
|
||||
const res = await this.$API.orders.order.maintenance.review.post(params);
|
||||
if (res.code == 200) {
|
||||
await this.getData();
|
||||
}
|
||||
this.confirmLoading = false;
|
||||
this.cancelLoading = false;
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style scoped lang="scss">
|
||||
|
||||
.btnView{
|
||||
margin-top: 15px;
|
||||
display: flex;justify-content: flex-end;
|
||||
}
|
||||
</style>
|
||||
|
||||
@@ -0,0 +1,246 @@
|
||||
<template>
|
||||
<el-container>
|
||||
<el-main class="orderMain" v-loading="loading" element-loading-text="加载中...">
|
||||
<el-scrollbar>
|
||||
<div class="cardBox">
|
||||
<div class="headerView">
|
||||
<div class="title">工单时间</div>
|
||||
<div class="status">
|
||||
<span class="name">当前状态:</span>
|
||||
<span class="text">{{info.business_status}}</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="cardBody">
|
||||
<el-row>
|
||||
<el-col :span="8" :lg="6">
|
||||
<span class="label">创建时间:</span>
|
||||
<span class="text">{{info.created_at}}</span>
|
||||
</el-col>
|
||||
<el-col :span="8" :lg="6">
|
||||
<span class="label">PE确认时间:</span>
|
||||
<span class="text">{{info.pe_confirmation_time}}</span>
|
||||
</el-col>
|
||||
<el-col :span="8" :lg="6">
|
||||
<span class="label">过保时间:</span>
|
||||
<span class="text">{{info.warranty_end_date}}</span>
|
||||
</el-col>
|
||||
</el-row>
|
||||
</div>
|
||||
</div>
|
||||
<div class="cardBox footerCard">
|
||||
<div class="cardItem">
|
||||
<div class="title">流程进度</div>
|
||||
<div class="cardBody">
|
||||
<el-steps class="orderSteps" :active="info.process_num" align-center>
|
||||
<el-step :status="item.status" v-for="item in info.process_engine" :key="item" :title="item.description" />
|
||||
</el-steps>
|
||||
</div>
|
||||
</div>
|
||||
<div class="cardItem">
|
||||
<div class="title">维保单号</div>
|
||||
<div class="cardBody">
|
||||
<el-row>
|
||||
<el-col :span="8" :lg="6">
|
||||
<span class="label">维修单号:</span>
|
||||
<span class="text">{{info.repair_order_no}}</span>
|
||||
</el-col>
|
||||
</el-row>
|
||||
</div>
|
||||
</div>
|
||||
<div class="cardItem">
|
||||
<div class="title">维保工单信息</div>
|
||||
<div class="cardBody">
|
||||
<el-row>
|
||||
<el-col :span="8" :lg="6">
|
||||
<span class="label">维修等级:</span>
|
||||
<span class="text">{{info.maintenance_plan}}</span>
|
||||
</el-col>
|
||||
<el-col :span="8" :lg="6">
|
||||
<span class="label">故障类型:</span>
|
||||
<span class="text">{{info.fault_type}}</span>
|
||||
</el-col>
|
||||
<el-col :span="8" :lg="6">
|
||||
<span class="label">故障内容:</span>
|
||||
<span class="text">{{info.fault_description}}</span>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<el-row>
|
||||
<el-col :span="8" :lg="6">
|
||||
<span class="label">维保等级:</span>
|
||||
<span class="text">{{info.maintenance_plan}}</span>
|
||||
</el-col>
|
||||
<el-col :span="8" :lg="6">
|
||||
<span class="label">是否关机:</span>
|
||||
<span class="text">{{info.requires_shutdown}}</span>
|
||||
</el-col>
|
||||
</el-row>
|
||||
</div>
|
||||
</div>
|
||||
<div class="cardItem">
|
||||
<div class="title">部件信息</div>
|
||||
<div class="cardBody">
|
||||
<el-row>
|
||||
<el-col :span="8" :lg="6">
|
||||
<span class="label labelText">机房城市:</span>
|
||||
<span class="text">
|
||||
<el-input :size="size" v-model="info.city" placeholder="机房城市"></el-input>
|
||||
</span>
|
||||
</el-col>
|
||||
<el-col :span="8" :lg="6">
|
||||
<span class="label labelText">园区:</span>
|
||||
<span class="text">
|
||||
<el-input :size="size" v-model="info.park_name" placeholder="园区"></el-input>
|
||||
</span>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<el-row>
|
||||
<el-col :span="8" :lg="6">
|
||||
<span class="label labelText">机房:</span>
|
||||
<span class="text">
|
||||
<el-input :size="size" v-model="info.data_center_name" placeholder="机房"></el-input>
|
||||
</span>
|
||||
</el-col>
|
||||
<el-col :span="8" :lg="6">
|
||||
<span class="label labelText">机架位:</span>
|
||||
<span class="text">
|
||||
<el-input :size="size" v-model="info.rack_position" placeholder="机架位"></el-input>
|
||||
</span>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<el-row>
|
||||
<el-col :span="8" :lg="6">
|
||||
<span class="label labelText">整机SN:</span>
|
||||
<span class="text">
|
||||
<el-input :size="size" v-model="info.device_sn" placeholder="整机SN"></el-input>
|
||||
</span>
|
||||
</el-col>
|
||||
<el-col :span="8" :lg="6">
|
||||
<span class="label labelText">整机厂商:</span>
|
||||
<span class="text">
|
||||
<el-input :size="size" v-model="info.device_manufacturer" placeholder="整机厂商"></el-input>
|
||||
</span>
|
||||
</el-col>
|
||||
<el-col :span="8" :lg="6">
|
||||
<span class="label labelText">整机型号:</span>
|
||||
<span class="text">
|
||||
<el-input :size="size" v-model="info.device_model" placeholder="整机型号"></el-input>
|
||||
</span>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<el-row>
|
||||
<el-col :span="8" :lg="6">
|
||||
<span class="label labelText">部件SN/Sp:</span>
|
||||
<span class="text">
|
||||
<el-input :size="size" v-model="info.component_serial_no" placeholder="部件SN/Sp"></el-input>
|
||||
</span>
|
||||
</el-col>
|
||||
<el-col :span="8" :lg="6">
|
||||
<span class="label labelText">部件厂商:</span>
|
||||
<span class="text">
|
||||
<el-input :size="size" v-model="info.component_manufacturer" placeholder="部件厂商"></el-input>
|
||||
</span>
|
||||
</el-col>
|
||||
<el-col :span="8" :lg="6">
|
||||
<span class="label labelText">部件型号:</span>
|
||||
<span class="text">
|
||||
<el-input :size="size" v-model="info.component_model" placeholder="部件型号"></el-input>
|
||||
</span>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<el-row>
|
||||
<el-col :span="8" :lg="6">
|
||||
<span class="label labelText">部件PN/Sp:</span>
|
||||
<span class="text">
|
||||
<el-input :size="size" v-model="info.component_pn" placeholder="部件PN/Sp"></el-input>
|
||||
</span>
|
||||
</el-col>
|
||||
<el-col :span="8" :lg="6">
|
||||
<span class="label labelText">SLA截止时间:</span>
|
||||
<span class="text">
|
||||
<el-input :size="size" v-model="info.sla_expiration" placeholder="SLA截止时间"></el-input>
|
||||
</span>
|
||||
</el-col>
|
||||
<el-col :span="8" :lg="6">
|
||||
<span class="label labelText">剩余BD数:</span>
|
||||
<span class="text">
|
||||
<el-input :size="size" v-model="info.bd_backup_count" placeholder="剩余BD数"></el-input>
|
||||
</span>
|
||||
</el-col>
|
||||
</el-row>
|
||||
</div>
|
||||
</div>
|
||||
<div class="btnView">
|
||||
<el-button type="primary" :size="size" @click="save" :loading="saveLoading">确认提交</el-button>
|
||||
</div>
|
||||
</div>
|
||||
</el-scrollbar>
|
||||
</el-main>
|
||||
</el-container>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
export default {
|
||||
name: "submit-order",
|
||||
data(){
|
||||
return{
|
||||
size:"small",
|
||||
loading:false,
|
||||
saveLoading:false,
|
||||
params:{
|
||||
order_id:Number(this.$route.query.id)
|
||||
},
|
||||
info:{}
|
||||
}
|
||||
},
|
||||
mounted() {
|
||||
this.getData();
|
||||
},
|
||||
methods:{
|
||||
async getData() {
|
||||
this.loading = true;
|
||||
const res = await this.$API.orders.order.maintenance.info.post(this.params);
|
||||
if(res.code == 200){
|
||||
if(res.data.process_engine){
|
||||
res.data.process_engine = this.processList(res.data.process_engine).processedList;
|
||||
res.data.process_num = this.processList(res.data.process_engine).num;
|
||||
}
|
||||
this.info = res.data;
|
||||
}
|
||||
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 save() {
|
||||
const params = {order_ids: [this.params.order_id]};
|
||||
this.saveLoading = true;
|
||||
const res = await this.$API.orders.order.maintenance.submit.post(params);
|
||||
if (res.code == 200) {
|
||||
await this.getData();
|
||||
}
|
||||
this.saveLoading = false;
|
||||
},
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style scoped lang="scss">
|
||||
.btnView{
|
||||
text-align: right;
|
||||
}
|
||||
</style>
|
||||
Reference in New Issue
Block a user