修改维保计划

This commit is contained in:
龙运模 2024-10-16 19:44:07 +08:00
parent e174feeb7d
commit 856dbfe26e
15 changed files with 357 additions and 442 deletions

View File

@ -212,6 +212,13 @@ export default {
post: async function (params) {
return await http.post(this.url,params);
}
},
confirm:{
url: `${config.API_URL}/repair.order.confirm`,
name: "维保计划确认",
post: async function (params) {
return await http.post(this.url,params);
}
}
},
sock: {

View File

@ -94,7 +94,7 @@ export default {
return
}
let data = {
column_config:column,
column_config:[],
save_column:false,
page:1,
pageSize:this.pageSize

View File

@ -20,6 +20,9 @@
</el-icon>
</el-badge>
<el-drawer title="新消息" v-model="msg" :size="400" append-to-body destroy-on-close>
<template #title>
<span class="msgTitle">新消息 <span class="msg-tag">{{unreadMsgNum.length>99?'99+':unreadMsgNum.length}}</span></span>
</template>
<el-container>
<el-main class="nopadding" v-loading="msgLoading" element-loading-text="加载中...">
<el-scrollbar>
@ -369,6 +372,20 @@
font-weight: inherit;
}
}
.msgTitle{
display: flex;align-items: center;
}
.msg-tag{
height: 18px;
line-height: 18px;
padding: 0 6px;
border-radius: 18px;
background: var(--el-color-danger);
color: var(--el-color-white);
font-size: 12px;
font-weight: initial;
margin-left: 15px;
}
.dark .msg-list__main h2 {
color: #d0d0d0;

View File

@ -279,24 +279,39 @@
},
methods: {
getWsResult(res){
if(res.data && res.data.type == 21){
if(res.data && (res.data.type == 21 || res.data.type == 23)){
if(res.data.list_count_info && res.data.list_count_info.main_order_count.length>0){
this.$store.commit("set_list_count_info", res.data.list_count_info.main_order_count);
}
if(res.data.list_repair_info && res.data.list_repair_info.repair_count.length>0){
this.$store.commit("set_repair_count", res.data.list_repair_info.repair_count);
}
let apiMenu = tool.objCopy(tool.data.get("MENU"));
apiMenu.forEach(item=>{
if(item.name == 'order'){
item.meta.tag = null;
item.meta.tag = 0;
if(item.children && item.children.length>0){
item.children.forEach(em=>{
if(em.name == "orderList"){
em.meta.tag = 0;
if(em.name == "orderList" && res.data.type == 21){
let tag = 0;
if(res.data.list_count_info && res.data.list_count_info.main_order_count && res.data.list_count_info.main_order_count.length>0){
res.data.list_count_info.main_order_count.forEach(li=>{
em.meta.tag += li.value;
tag += li.value;
})
}
item.meta.tag = em.meta.tag;
em.meta.tag = tag;
}
if(em.name == 'repairList' && res.data.type == 23){
let tag = 0;
if(res.data.list_repair_info && res.data.list_repair_info.repair_count && res.data.list_repair_info.repair_count.length>0){
res.data.list_repair_info.repair_count.forEach(li=>{
tag += li.value;
})
}
em.meta.tag = tag;
}
if(em.meta.tag){
item.meta.tag += em.meta.tag
}
})
}

View File

@ -1,11 +1,15 @@
export default {
state: {
main_order_count:[]
main_order_count:[],
repair_count:[],
},
mutations: {
set_list_count_info(state, list){
state.main_order_count = list;
},
set_repair_count(state, list){
state.repair_count = list;
},
},
actions: {

View File

@ -68,10 +68,10 @@ a,button,input,textarea{-webkit-tap-highlight-color:rgba(0,0,0,0);box-sizing: bo
.adminui-side-bottom i {font-size: 16px;}
.adminui-side-bottom:hover {color: var(--el-color-primary);}
.aminui-side.isCollapse {width: 65px;}
.el-menu .menu-tag {position: absolute;height: 15px;line-height: 15px;background: var(--el-color-danger);font-size: 10px;color: #fff;right: 20px;border-radius:14px;padding:0 4px;}
.el-menu .menu-tag {position: absolute;height: 15px;line-height: 15px;background: var(--el-color-danger);font-size: 10px;color: #fff;right: 20px;border-radius:14px;padding:0 5px;}
.el-menu .el-sub-menu__title .menu-tag {right: 40px;top: 10px;}
.el-menu--horizontal > li .menu-tag {display: none;}
.aminui-side.isCollapse .el-menu > li .menu-tag{display: inline-block;width: auto;height: 15px;line-height: 15px;padding: 0 4px;visibility: initial;right: 18px;top: 4px;}
.aminui-side.isCollapse .el-menu > li .menu-tag{display: inline-block;width: auto;height: 15px;line-height: 15px;padding: 0 5px;visibility: initial;right: 18px;top: 4px;}
/* 右侧内容 */
.aminui-body {flex: 1;display: flex;flex-flow: column;}

View File

@ -13,12 +13,9 @@
<el-form-item label="部件PN/Sp" prop="component_pn">
<el-input class="input" v-model="form.component_pn" type="text" placeholder="请输入部件SN/Sp"></el-input>
</el-form-item>
<el-form-item label="SLA截止时间" prop="sla_expiration">
<el-date-picker class="input" v-model="form.sla_expiration" type="date" value-format="YYYY-MM-DD" placeholder="请选择SLA截止时间" style="width: 100%"></el-date-picker>
</el-form-item>
<el-form-item label="剩余BD数" prop="bd_backup_count">
<el-input class="input" v-model="form.bd_backup_count" type="text" placeholder="请输入剩余BD数"></el-input>
</el-form-item>
<!-- <el-form-item label="SLA截止时间" prop="sla_expiration">-->
<!-- <el-date-picker class="input" v-model="form.sla_expiration" type="date" value-format="YYYY-MM-DD" placeholder="请选择SLA截止时间" style="width: 100%"></el-date-picker>-->
<!-- </el-form-item>-->
</el-form>
<template #footer>
<el-button @click="visible=false" > </el-button>
@ -76,7 +73,15 @@
},
//
setData(data){
this.form.id = data.id
if(data.id){
this.form.id = data.id;
}else{
this.form.num = data.num;
}
this.form.component_serial_no = data.component_serial_no;
this.form.component_manufacturer = data.component_serial_no;
this.form.component_model = data.component_model;
this.form.component_pn = data.component_pn;
}
}
}

View File

@ -36,6 +36,11 @@
<el-date-picker class="input" v-model="form.warranty_end_date" type="date" value-format="YYYY-MM-DD" placeholder="请选择过保时间"></el-date-picker>
</el-form-item>
</el-col>
<el-col :span="8" :lg="6">
<el-form-item label="SLA截止时间" prop="sla_expiration">
<el-date-picker class="input" v-model="form.sla_expiration" type="date" value-format="YYYY-MM-DD" placeholder="请选择SLA截止时间" style="width: 100%"></el-date-picker>
</el-form-item>
</el-col>
</el-row>
</div>
</div>
@ -165,7 +170,6 @@
<sc-table-column prop="component_manufacturer" label="部件厂商"></sc-table-column>
<sc-table-column prop="component_model" label="部件型号"></sc-table-column>
<sc-table-column prop="component_pn" label="部件PN/Sp"></sc-table-column>
<sc-table-column prop="sla_expiration" label="SLA截止时间"></sc-table-column>
<sc-table-column prop="bd_backup_count" label="甚于BD数"></sc-table-column>
<sc-table-column label="操作" fixed="right" width="120">
<template #default="scope">
@ -227,14 +231,7 @@ export default {
warranty_end_date: "", //
maintenance_plan: '', // 1-
is_verify_erp_inventory:true,
component_info:[
// {
// component_serial_no:"",
// component_manufacturer:"",
// component_model:"",
// component_pn:""
// }
]
component_info:[]
},
rules:{
fault_description:[{required:true,trigger:"blur",message:"故障描述不能为空"}],
@ -281,8 +278,22 @@ export default {
this.$refs.saveDialog.open()
})
},
handleSaveSuccess(data){
handleSaveSuccess(data,mode){
if(mode == 'add'){
this.form.component_info.push(data);
}
if(mode == 'edit'){
if(this.info.component_info.length>0){
this.info.component_info.forEach((item,index)=>{
if(index == data.num || (data.id && item.id == data.id)){
item = data;
item.num = index;
}
})
}else{
this.info.component_info.push(data);
}
}
},
deleteOrder(row,num){
this.form.component_info.forEach((em,index)=>{

View File

@ -2,7 +2,33 @@
<el-container>
<el-main class="orderMain" v-loading="loading" element-loading-text="加载中...">
<el-scrollbar>
<detailView :data="info"></detailView>
<detailView :data="info">
<template #submit>
<div class="cardItem">
<div class="title titleFlex">
<span class="name">维保部件信息</span>
</div>
<div class="cardBody">
<el-row>
<el-col :span="24" :lg="24" class="colFlex">
<span class="label labelText">验证ERP库存</span>
<span class="text">{{info.is_verify_erp_inventory?'是':'否'}}</span>
</el-col>
</el-row>
</div>
<div class="cardBody">
<sc-table ref="table" :data="info.component_info" style="width: 100%;" :hidePagination="true" :hideDo="true" :hideEmpty="true" :size="size">
<sc-table-column type="index" label="序号" width="65"></sc-table-column>
<sc-table-column prop="component_serial_no" label="部件SN/Sp" :show-overflow-tooltip="true" width="160"></sc-table-column>
<sc-table-column prop="component_manufacturer" label="部件厂商" :show-overflow-tooltip="true" width="130"></sc-table-column>
<sc-table-column prop="component_model" label="部件型号" :show-overflow-tooltip="true" width="160"></sc-table-column>
<sc-table-column prop="component_pn" label="部件PN/Sp" :show-overflow-tooltip="true" width="150"></sc-table-column>
<sc-table-column prop="bd_backup_count" label="甚于BD数" :show-overflow-tooltip="true" width="120"></sc-table-column>
</sc-table>
</div>
</div>
</template>
</detailView>
</el-scrollbar>
</el-main>
</el-container>
@ -17,12 +43,15 @@ export default {
},
data(){
return{
size:'small',
loading:false,
params:{
order_id:Number(this.$route.query.id)
},
info:{}
info:{
is_verify_erp_inventory:false,
component_info:[]
},
}
},
mounted() {
@ -39,6 +68,17 @@ export default {
res.data.process_num = obj.num;
}
this.info = res.data;
if(res.data.component_info.length==0){
this.info.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;
},

View File

@ -16,7 +16,7 @@
<el-row>
<el-col :span="8" :lg="6">
<span class="label">报修客户</span>
<span class="text">{{info.customer}}</span>
<span class="text">{{info.customer_name}}</span>
</el-col>
<el-col :span="8" :lg="6">
<span class="label">标准机型</span>
@ -36,6 +36,10 @@
<span class="label">过保时间</span>
<span class="text">{{info.warranty_end_date}}</span>
</el-col>
<el-col :span="8" :lg="6">
<span class="label">SLA截止时间</span>
<span class="text">{{info.sla_expiration}}</span>
</el-col>
</el-row>
</div>
</div>
@ -126,26 +130,8 @@
</el-row>
</div>
</div>
<div class="cardItem">
<div class="title">维保部件信息</div>
<div class="cardBody">
<el-row>
<el-col :span="24" :lg="24">
<span class="label">验证ERP库存</span>
<span class="text">{{info.is_verify_erp_inventory?'是':'否'}}</span>
</el-col>
</el-row>
<sc-table ref="table" :data="info.component_info" style="width: 100%;" :hidePagination="true" :hideDo="true" :hideEmpty="true" :size="size">
<sc-table-column type="index" label="序号" width="65"></sc-table-column>
<sc-table-column prop="component_serial_no" label="部件SN/Sp"></sc-table-column>
<sc-table-column prop="component_manufacturer" label="部件厂商"></sc-table-column>
<sc-table-column prop="component_model" label="部件型号"></sc-table-column>
<sc-table-column prop="component_pn" label="部件PN/Sp"></sc-table-column>
<sc-table-column prop="sla_expiration" label="SLA截止时间"></sc-table-column>
<sc-table-column prop="bd_backup_count" label="甚于BD数"></sc-table-column>
</sc-table>
</div>
</div>
<slot name="submit"></slot>
<slot name="review"></slot>
</div>
</template>
@ -166,7 +152,9 @@ export default {
data(){
return{
size:'small',
info:{},
info:{
component_info:[]
},
statusList:[]
}
},

View File

@ -1,80 +1,11 @@
<template>
<el-dialog :title="titleMap[mode]" v-model="visible" :width="800" draggable destroy-on-close @closed="$emit('closed')">
<el-form :model="form" :rules="rules" :disabled="mode=='show'" ref="dialogForm" label-width="120px" label-position="right">
<div class="boxHeader">
<el-row :gutter="4" justify="space-between">
<el-col :span="11">
<el-form-item label="费用类型" prop="login_name">
<el-select v-model="form.login_name" placeholder="请填写登录账号" clearable style="width: 100%;">
<el-option></el-option>
</el-select>
<el-dialog :title="titleMap[mode]" v-model="visible" :width="400" draggable destroy-on-close @closed="$emit('closed')">
<el-form :model="form" :rules="rules" :disabled="mode=='show'" ref="dialogForm" label-width="90px" label-position="right">
<el-col :span="24" :sm="24">
<el-form-item label="维修日期" prop="schedule_date">
<el-date-picker v-model="form.schedule_date" type="date" placeholder="请选择维修日期" clearable value-format="YYYY-MM-DD"></el-date-picker>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="4" justify="space-between">
<el-col :span="11">
<el-form-item label="快递单号" prop="login_name">
<el-input v-model="form.login_name" placeholder="请填写快递单号" clearable></el-input>
</el-form-item>
</el-col>
<el-col :span="11" :sm="11">
<el-form-item label="快递发货日期" prop="login_name">
<el-date-picker v-model="form.login_name" type="date" placeholder="请选择发货日期" clearable value-format="YYYY-MM-DD"></el-date-picker>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="4" justify="space-between">
<el-col :span="11">
<el-form-item label="发货地址" prop="login_name">
<el-input v-model="form.login_name" placeholder="请填写发货地址" clearable></el-input>
</el-form-item>
</el-col>
<el-col :span="11">
<el-form-item label="调拨地址" prop="login_name">
<el-input v-model="form.login_name" placeholder="请填写调拨地址" clearable></el-input>
</el-form-item>
</el-col>
</el-row>
</div>
<div class="boxFooter">
<div class="title">费用项</div>
<el-row :gutter="4" justify="space-between">
<el-col :span="11">
<el-form-item label="运费" prop="login_name">
<el-input v-model="form.login_name" placeholder="请填写运费" clearable></el-input>
</el-form-item>
</el-col>
<el-col :span="11">
<el-form-item label="备件数量" prop="login_name">
<el-input v-model="form.login_name" placeholder="请填写备件数量" clearable></el-input>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="4" justify="space-between">
<el-col :span="11">
<el-form-item label="税费" prop="login_name">
<el-input v-model="form.login_name" placeholder="请填写税费" clearable></el-input>
</el-form-item>
</el-col>
<el-col :span="11">
<el-form-item label="备件数量" prop="login_name">
<el-input v-model="form.login_name" placeholder="请填写备件数量" clearable></el-input>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="4" justify="space-between">
<el-col :span="11">
<el-form-item label="仓储费" prop="login_name">
<el-input v-model="form.login_name" placeholder="请填写仓储费" clearable></el-input>
</el-form-item>
</el-col>
<el-col :span="11">
<el-form-item label="备件数量" prop="login_name">
<el-input v-model="form.login_name" placeholder="请填写备件数量" clearable></el-input>
</el-form-item>
</el-col>
</el-row>
</div>
</el-form>
<template #footer>
<el-button @click="visible=false" > </el-button>
@ -90,87 +21,26 @@ export default {
return {
mode: "confirm",
titleMap: {
confirm: '数据确认费用',
confirm: '确认工单',
},
visible: false,
isSave: false,
//
form: {
id:"",
login_name: "",
name:"",
emp_id:"",
mobile:"",
email:"",
avatar: "",
password:"",
dept_id: "",
role_ids: []
order_ids:[],
schedule_date: "",
},
//
rules: {
avatar:[
{required: true, message: '请上传头像'}
schedule_date: [
{required: true, message: '请输入维修日期'}
],
login_name: [
{required: true, message: '请输入登录账号'}
],
name: [
{required: true, message: '请输入真实姓名'}
],
emp_id:[
{required: true, message: '请输入工号'}
],
mobile: [
{required: true, message: '请输入联系方式'}
],
email: [
{required: true, message: '请输入邮箱地址'}
],
password: [
{required: true, message: '请输入登录密码'},
{validator: (rule, value, callback) => {
if (this.form.password2 !== '') {
this.$refs.dialogForm.validateField('password2');
}
callback();
}}
],
password_cnf: [
{required: true, message: '请再次输入密码'},
{validator: (rule, value, callback) => {
if (value !== this.form.password) {
callback(new Error('两次输入密码不一致!'));
}else{
callback();
}
}}
],
dept_id: [
{required: true, message: '请选择所属部门'}
],
role_ids: [
{required: true, message: '请选择所属角色', trigger: 'change'}
]
},
//
groups: [],
groupsProps: {
value: "id",
multiple: true,
checkStrictly: true
},
depts: [],
deptsProps: {
value: "id",
checkStrictly: false,
emitPath:false
}
}
},
mounted() {
this.getGroup()
this.getDept()
},
methods: {
//
@ -179,28 +49,12 @@ export default {
this.visible = true;
return this
},
//
async getGroup(){
const res = await this.$API.system.role.list.get();
if(res.code == 200){
this.groups = res.data.rows;
}
},
async getDept(){
const res = await this.$API.system.dept.active.post();
if(res.code == 200){
this.depts = res.data;
}
},
parentParams(item){
this.form.avatar = item;
},
//
submit(){
this.$refs.dialogForm.validate(async (valid) => {
if (valid) {
this.isSave = true;
const res = await this.$API.system.user.add.post(this.form);
const res = await this.$API.orders.order.plan.confirm.post(this.form);
this.isSave = false;
if(res.code == 200){
this.$emit('success', this.form, this.mode)
@ -214,17 +68,7 @@ export default {
},
//
setData(data){
this.form.id = data.id
this.form.login_name = data.login_name
this.form.name = data.name
this.form.emp_id = data.emp_id
this.form.mobile = data.mobile
this.form.email = data.email
this.form.avatar = data.avatar
this.form.dept_id = data.dept_id
this.form.group = data.group
this.form.role_ids = data.user_roles && data.user_roles.role_ids?data.user_roles.role_ids:[]
this.form.order_ids = data.map(em=>(em.id))
}
}
}

View File

@ -1,7 +1,15 @@
<template>
<el-container class="mainBox mainBoxHeaderNoBorder">
<el-container class="mainBox mainHeaderNoBorderPadding">
<el-header class="header">
<div class="left-panel">
<el-button type="primary" v-auth="'repairOrderConfirm'" :size="size" icon="sc-icon-ConfirmOrder" @click="confirmOrder">确认工单</el-button>
</div>
</el-header>
<el-main class="nopadding">
<div class="searchMain">
<div class="flowPath">
<flow :list="flowList"/>
</div>
<div class="searchMain searchMainNoTop">
<scSearch ref="scSearch" :searchList="searchList" @fetchSelectData="getSelectData"></scSearch>
<div class="searchItem searchBtn">
@ -19,14 +27,21 @@
v-if="item.value == scope.row.business_status">{{item.label}}</span>
</span>
</template>
<template #repair_date="scope">{{scope.row.repair_order && scope.row.repair_order.repair_date?scope.row.repair_order.repair_date:''}}</template>
<template #schedule_date="scope">{{scope.row.repair_order && scope.row.repair_order.schedule_date?scope.row.repair_order.schedule_date:''}}</template>
<template #repair_status="scope">{{scope.row.repair_order && scope.row.repair_order.repair_status?scope.row.repair_order.repair_status:''}}</template>
<el-table-column label="操作" fixed="right" align="center" width="150">
<template #default="scope">
<el-dropdown>
<el-button class="noBorderBtn" icon="el-icon-more" :size="size"></el-button>
<template #dropdown>
<el-dropdown-menu>
<el-dropdown-item icon="sc-icon-ConfirmOrder" @click="confirmOrderClick">确认工单</el-dropdown-item>
<div v-auth="'repairOrderConfirm'">
<el-dropdown-item icon="sc-icon-ConfirmOrder" @click="confirmOrderClick(scope.row)">确认工单</el-dropdown-item>
</div>
<div v-auth="'order_plan_detail'">
<el-dropdown-item @click="table_show(scope.row, 'see')" icon="sc-icon-See">工单详情</el-dropdown-item>
</div>
</el-dropdown-menu>
</template>
</el-dropdown>
@ -37,22 +52,27 @@
</el-container>
<confirm-dialog v-if="dialog.confirm" ref="confirmDialog" @success="handleSaveSuccess" @closed="dialog.confirm=false"></confirm-dialog>
<!-- <see-dialog v-if="dialog.show" ref="showDialog" @closed="dialog.show=false"></see-dialog>-->
</template>
<script>
import flow from '../orderList/components/flow'
import confirmDialog from './confirmOrder'
// import seeDialog from './see'
import {eventBus} from "@/utils/eventBus";
export default {
components: {
flow,
confirmDialog,
// seeDialog,
},
data() {
return {
size:'small',
flowList:[
{name:'执行维修',left:false,right:true},
{name:'维修中',left:true,right:true},
{name:'维修完成',left:true,right:false},
],
dialog: {
confirm: false,
show: false,
@ -111,63 +131,22 @@ export default {
}
}
},
//
confirmOrderClick(){
confirmOrder(){
this.dialog.confirm = true;
this.$nextTick(() => {
this.$refs.confirmDialog.open()
this.$refs.confirmDialog.open('confirm').setData(this.selection)
})
},
//
table_edit(row){
this.dialog.save = true
//
confirmOrderClick(row){
this.dialog.confirm = true;
this.$nextTick(() => {
this.$refs.saveDialog.open('edit').setData(row)
this.$refs.confirmDialog.open('confirm').setData([row])
})
},
//
table_show(row){
this.dialog.show = true
this.$nextTick(() => {
this.$refs.showDialog.open('show').setData(row);
})
},
//
async table_del(row){
this.$confirm(`确定删除 ${row.name} 吗?`, '提示', {
type: 'warning'
}).then(async () => {
const reqData = {id: row.id};
const res = await this.$API.system.company.delete.post(reqData);
if(res.code == 200){
this.$refs.table.refresh()
this.$message.success("删除成功")
}else{
await this.$alert(res.message, "提示", {type: 'error'})
}
}).catch(()=>{})
},
//
table_empower(row){
this.$router.push({
path: '/setting/company/add-permission',
query: {
id: row.id,
name:row.name
}
})
},
//
table_user_ist(row){
this.$router.push({
path: '/setting/user/company-user-list',
query: {
id: row.id,
name:row.name
}
})
eventBus.$emit('tagClose','/order/order-info',{id:row.id});
},
//
selectionChange(selection){
@ -189,6 +168,19 @@ export default {
</script>
<style lang="scss" scoped>
.mainBox{
padding: 0;
.header{
padding: 0 10px;
}
.searchMain{
margin-left: 10px;
margin-right: 10px;
}
.scTable{
padding: 0 10px;
}
}
.logoCell{
display: flex;
align-items: center;

View File

@ -4,6 +4,27 @@
<el-scrollbar>
<detailView :data="info">
<template #review>
<div class="cardItem cardItemNoBorder">
<div class="title">维保部件信息</div>
<div class="cardBody">
<el-row>
<el-col :span="24" :lg="24">
<span class="label">验证ERP库存</span>
<span class="text">{{info.is_verify_erp_inventory?'是':'否'}}</span>
</el-col>
</el-row>
</div>
<div class="cardBody">
<sc-table ref="table" :data="info.component_info" style="width: 100%;" :hidePagination="true" :hideDo="true" :hideEmpty="true" :size="size">
<sc-table-column type="index" label="序号" width="65"></sc-table-column>
<sc-table-column prop="component_serial_no" label="部件SN/Sp" :show-overflow-tooltip="true" width="160"></sc-table-column>
<sc-table-column prop="component_manufacturer" label="部件厂商" :show-overflow-tooltip="true" width="130"></sc-table-column>
<sc-table-column prop="component_model" label="部件型号" :show-overflow-tooltip="true" width="160"></sc-table-column>
<sc-table-column prop="component_pn" label="部件PN/Sp" :show-overflow-tooltip="true" width="150"></sc-table-column>
<sc-table-column prop="bd_backup_count" label="甚于BD数" :show-overflow-tooltip="true" width="120"></sc-table-column>
</sc-table>
</div>
</div>
<div class="reviewBox">
<el-input type="textarea" v-model="opinion" min="4" placeholder="请填写具体原因"></el-input>
<div class="btnView">
@ -35,7 +56,10 @@ export default {
params:{
order_id:Number(this.$route.query.id)
},
info:{}
info:{
is_verify_erp_inventory:false,
component_info:[]
},
}
},
mounted() {
@ -52,6 +76,17 @@ export default {
res.data.process_num = obj.num;
}
this.info = res.data;
if(res.data.component_info.length==0){
this.info.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;
},
@ -101,4 +136,7 @@ export default {
margin-top: 15px;
display: flex;justify-content: flex-start;
}
.orderMain .footerCard .cardItemNoBorder{
border-bottom: 0;
}
</style>

View File

@ -13,7 +13,7 @@
<el-button :size="size" type="info" icon="el-icon-RefreshRight" @click="reset">重置</el-button>
</div>
</div>
<scTable ref="table" :apiObj="list.apiObj" :column="list.column" row-key="id" stripe :size="size" @selection-change="selectionChange">
<scTable ref="table" :apiObj="list.apiObj" :column="list.column" row-key="id" stripe :size="size" :hideTotal="false" @selection-change="selectionChange">
<el-table-column type="selection" align="center" width="40"></el-table-column>
<sc-table-column label="序号" align="center" type="index"></sc-table-column>
<template #repair_status="scope">
@ -35,6 +35,14 @@
</el-dropdown>
</template>
</el-table-column>
<template #total>
<div class="countView">
<div class="countItem" v-for="(item,index) in countParams" :key="index">
<span class="name">{{item.title}}:</span>
<span class="num">{{item.value}}</span>
</div>
</div>
</template>
</scTable>
</el-main>
</el-container>
@ -48,6 +56,7 @@
// import saveDialog from './save'
// import seeDialog from './see'
import flow from '../orderList/components/flow'
import {eventBus} from "@/utils/eventBus";
export default {
components: {
@ -84,12 +93,26 @@ export default {
],
params: {},
statusList:[],
countParams:this.$store.state.msg.repair_count
}
},
mounted() {
this.getStatusList();
//
eventBus.$on('sockBack', this.getWsResult);
},
unmounted() {
//
eventBus.$off('sockBack', this.getWsResult);
},
methods: {
getWsResult(res){
if(res.data && res.data.type == 23){
this.$store.commit('set_repair_count',res.data.list_repair_info.repair_count);
this.countParams = res.data.list_repair_info.repair_count;
}
},
async getStatusList() {
const res = await this.$API.orders.order.maintenance.status.post();
if (res.code == 200) {
@ -138,7 +161,10 @@ export default {
this.$refs.saveDialog.open()
})
},
//
// table_show(row){
// eventBus.$emit('tagClose','/order/order-info',{id:row.id});
// },
//
table_edit(row){
this.dialog.save = true
@ -146,13 +172,6 @@ export default {
this.$refs.saveDialog.open('edit').setData(row)
})
},
//
table_show(row){
this.dialog.show = true
this.$nextTick(() => {
this.$refs.showDialog.open('show').setData(row);
})
},
//
async table_del(row){
this.$confirm(`确定删除 ${row.name} 吗?`, '提示', {

View File

@ -2,145 +2,35 @@
<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">
<span v-for="(item,ind) in statusList" :key="ind">
<span :style="{color:item.value==1?`var(--el-order-color-1)`:item.value==2?`var(--el-order-color-2)`:item.value==3?`var(--el-order-color-3)`:item.value==4?`var(--el-order-color-4)`:`var(--el-order-color-5)`}"
v-if="item.value == info.business_status">{{item.label}}</span>
</span>
</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,index) in info.process_engine" :key="index" :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.maintenance_level}}</span>
</el-col>
<el-col :span="8" :lg="12">
<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.fault_type}}</span>
</el-col>
<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>
<el-row>
<el-col :span="8" :lg="6">
<span class="label labelText">机房城市</span>
<span class="text">{{info.city}}</span>
</el-col>
<el-col :span="8" :lg="6">
<span class="label labelText">园区</span>
<span class="text">{{info.park_name}}</span>
</el-col>
</el-row>
<el-row>
<el-col :span="8" :lg="6">
<span class="label labelText">机房</span>
<span class="text">{{info.data_center_name}}</span>
</el-col>
<el-col :span="8" :lg="6">
<span class="label labelText">机架位</span>
<span class="text">{{info.rack_position}}</span>
</el-col>
</el-row>
<el-row>
<el-col :span="8" :lg="6">
<span class="label labelText">整机SN</span>
<span class="text">{{info.device_sn}}</span>
</el-col>
<el-col :span="8" :lg="6">
<span class="label labelText">整机厂商</span>
<span class="text">{{info.device_manufacturer}}</span>
</el-col>
<el-col :span="8" :lg="6">
<span class="label labelText">整机型号</span>
<span class="text">{{info.device_model}}</span>
</el-col>
</el-row>
</div>
</div>
<detailView :data="info">
<template #submit>
<div class="cardItem">
<div class="title titleFlex">
<span class="name">维保部件信息</span>
<el-button type="primary" plain :size="size" icon="el-icon-Plus" @click="addOrder">添加部件信息</el-button>
</div>
<el-row>
<el-col :span="24" :lg="24">
<el-col :span="24" :lg="24" class="colFlex">
<span class="label labelText">验证ERP库存</span>
<span class="text">{{info.is_verify_erp_inventory?'是':'否'}}</span>
<span class="text">
<el-radio-group v-model="info.is_verify_erp_inventory">
<el-radio :value="true"></el-radio>
<el-radio :value="false"></el-radio>
</el-radio-group>
</span>
</el-col>
</el-row>
<div class="cardBody">
<sc-table ref="table" :data="info.component_info" style="width: 100%;" :hidePagination="true" :hideDo="true" :hideEmpty="true" :size="size">
<sc-table-column type="index" label="序号" width="65"></sc-table-column>
<sc-table-column prop="component_serial_no" label="部件SN/Sp"></sc-table-column>
<sc-table-column prop="component_manufacturer" label="部件厂商"></sc-table-column>
<sc-table-column prop="component_model" label="部件型号"></sc-table-column>
<sc-table-column prop="component_pn" label="部件PN/Sp"></sc-table-column>
<sc-table-column prop="sla_expiration" label="SLA截止时间"></sc-table-column>
<sc-table-column prop="bd_backup_count" label="甚于BD数"></sc-table-column>
<sc-table-column prop="component_serial_no" label="部件SN/Sp" :show-overflow-tooltip="true" width="160"></sc-table-column>
<sc-table-column prop="component_manufacturer" label="部件厂商" :show-overflow-tooltip="true" width="130"></sc-table-column>
<sc-table-column prop="component_model" label="部件型号" :show-overflow-tooltip="true" width="160"></sc-table-column>
<sc-table-column prop="component_pn" label="部件PN/Sp" :show-overflow-tooltip="true" width="150"></sc-table-column>
<sc-table-column prop="bd_backup_count" label="甚于BD数" :show-overflow-tooltip="true" width="120"></sc-table-column>
<sc-table-column label="操作" fixed="right" width="120">
<template #default="scope">
<el-button link type="primary" :size="size" @click="editOrder(scope.row,scope.$index)">编辑</el-button>
<el-button link type="danger" :size="size" @click="deleteOrder(scope.row,scope.$index)">删除</el-button>
</template>
</sc-table-column>
@ -150,7 +40,8 @@
<div class="btnView">
<el-button type="primary" :size="size" @click="save" :loading="saveLoading">确认提交</el-button>
</div>
</div>
</template>
</detailView>
</el-scrollbar>
</el-main>
</el-container>
@ -159,10 +50,12 @@
</template>
<script>
import detailView from "@/views/order/orderList/detailView";
import infoSaveDialog from "@/views/order/components/infoSave";
export default {
name: "",
components:{
detailView,
infoSaveDialog
},
data(){
@ -171,9 +64,12 @@ export default {
loading:false,
saveLoading:false,
params:{
order_id:Number(this.$route.query.id)
order_id:Number(this.$route.query.id),
},
info:{
is_verify_erp_inventory:false,
component_info:[]
},
info:{},
statusList:[],
dialog: {
@ -196,6 +92,17 @@ export default {
res.data.process_num = obj.num;
}
this.info = res.data;
if(res.data.component_info.length==0){
this.info.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;
},
@ -218,7 +125,11 @@ export default {
return obj;
},
async save() {
const params = {order_ids: [this.params.order_id]};
const params = {
order_ids: [this.params.order_id],
is_verify_erp_inventory:this.info.is_verify_erp_inventory,
component_info:this.info.component_info
};
this.saveLoading = true;
const res = await this.$API.orders.order.maintenance.submit.post(params);
if (res.code == 200) {
@ -238,13 +149,34 @@ export default {
this.$refs.saveDialog.open()
})
},
handleSaveSuccess(data){
this.form.component_info.push(data);
handleSaveSuccess(data,mode){
if(mode == 'add'){
this.info.component_info.push(data);
}
if(mode == 'edit'){
if(this.info.component_info.length>0){
this.info.component_info.forEach((item,index)=>{
if(index == data.num || (data.id && item.id == data.id)){
item = data;
item.num = index;
}
})
}else{
this.info.component_info.push(data);
}
}
},
editOrder(row,num){
row.num = num;
this.dialog.save = true;
this.$nextTick(() => {
this.$refs.saveDialog.open('edit').setData(row);
})
},
deleteOrder(row,num){
this.form.component_info.forEach((em,index)=>{
this.info.component_info.forEach((em,index)=>{
if(index === num){
this.form.component_info.splice(index,1);
this.info.component_info.splice(index,1);
}
});
},
@ -259,4 +191,7 @@ export default {
.titleFlex{
display: flex;align-items: stretch;justify-content: space-between;
}
.colFlex{
display: flex;align-items: center;
}
</style>