xw_admin/src/views/order/create-order.vue
2024-10-12 16:49:30 +08:00

382 lines
15 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<template>
<el-container>
<el-main>
<el-scrollbar>
<el-form ref="form" :size="size" :rules="rules" label-width="95px" :model="form">
<div class="boxMain">
<div class="title">工作时间</div>
<div class="boxCom">
<el-row>
<el-col :span="8" :lg="6">
<el-form-item label="报修客户" prop="customer">
<el-select class="input" v-model="form.customer" @visible-change="getCustomerSelect('customer')" placeholder="请选择报修客户">
<el-option v-for="(item,index) in setMap['customer']" :key="index" :value="item.id" :label="item.customer_name"></el-option>
</el-select>
</el-form-item>
</el-col>
<el-col :span="8" :lg="6">
<el-form-item label="标准机型" prop="standard_model">
<el-input class="input" type="text" v-model="form.standard_model" placeholder="请输入标准机型"></el-input>
</el-form-item>
</el-col>
<el-col :span="8" :lg="6">
<el-form-item label="报修日期">
<el-date-picker class="input" type="date" value-format="YYYY-MM-DD" placeholder="请选择报修日期"></el-date-picker>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="8" :lg="6">
<el-form-item label="PE确认时间" prop="pe_confirmation_time">
<el-date-picker class="input" v-model="form.pe_confirmation_time" type="date" value-format="YYYY-MM-DD" placeholder="请选择PE确认时间"></el-date-picker>
</el-form-item>
</el-col>
<el-col :span="8" :lg="6">
<el-form-item label="过保时间" prop="warranty_end_date">
<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-row>
</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="repair_order_no">
<el-input class="input" type="text" v-model="form.repair_order_no" disabled placeholder="请输入维修单号"></el-input>
</el-form-item>
</el-col>
</el-row>
</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.maintenance_grade" type="text" placeholder="请输入维修等级"></el-input>
</el-form-item>
</el-col>
<el-col :span="8" :lg="6">
<el-form-item label="维修分类" prop="maintenance_level">
<el-select class="input" v-model="form.maintenance_level" @visible-change="getSelect('maintenance_level',2)" placeholder="请选择维修分类">
<el-option v-for="(item,index) in setMap['maintenance_level']" :key="index" :value="item.id" :label="item.item_name"></el-option>
</el-select>
</el-form-item>
</el-col>
<el-col :span="8" :lg="6">
<el-form-item label="故障内容" prop="fault_description">
<el-input class="input" v-model="form.fault_description" type="text" placeholder="请输入维修单号"></el-input>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="8" :lg="6">
<el-form-item label="故障类型" prop="fault_type">
<el-select class="input" v-model="form.fault_type" @visible-change="getSelect('fault_type',1)" placeholder="请选择故障类型">
<el-option v-for="(item,index) in setMap['fault_type']" :key="index" :value="item.id" :label="item.item_name"></el-option>
</el-select>
</el-form-item>
</el-col>
<el-col :span="8" :lg="6">
<el-form-item label="维保等级" prop="maintenance_plan">
<el-input class="input" v-model="form.maintenance_plan" placeholder="维保等级">
</el-input>
</el-form-item>
</el-col>
<el-col :span="8" :lg="6">
<el-form-item label="是否关机" prop="requires_shutdown">
<el-select class="input" v-model="form.requires_shutdown" placeholder="请选择是否关机">
<el-option label="是" :value="1"></el-option>
<el-option label="否" :value="0"></el-option>
</el-select>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="8" :lg="6">
<el-form-item label="机房城市" prop="city">
<el-input class="input" v-model="form.city" placeholder="机房城市">
</el-input>
</el-form-item>
</el-col>
<el-col :span="8" :lg="6">
<el-form-item label="园区" prop="park_name">
<el-input class="input" v-model="form.park_name" placeholder="园区">
</el-input>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="8" :lg="6">
<el-form-item label="机房/IDC" prop="data_center_name">
<el-input class="input" v-model="form.data_center_name" placeholder="机房/IDC">
</el-input>
</el-form-item>
</el-col>
<el-col :span="8" :lg="6">
<el-form-item label="机架位" prop="rack_position">
<el-input class="input" v-model="form.rack_position" type="text" placeholder="请输入机架位"></el-input>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="8" :lg="6">
<el-form-item label="整机SN/Se" prop="device_sn">
<el-input class="input" v-model="form.device_sn" placeholder="整机SN/Se">
</el-input>
</el-form-item>
</el-col>
<el-col :span="8" :lg="6">
<el-form-item label="整机厂商" prop="device_manufacturer">
<el-input class="input" v-model="form.device_manufacturer" type="text" placeholder="请输入整机厂商"></el-input>
</el-form-item>
</el-col>
<el-col :span="8" :lg="6">
<el-form-item label="整机型号" prop="device_model">
<el-input class="input" v-model="form.device_model" type="text" placeholder="请输入整机型号"></el-input>
</el-form-item>
</el-col>
</el-row>
</div>
</div>
<div class="boxMain">
<div class="title">维保工单信息</div>
<div class="boxCom">
<el-row>
<el-col :span="25" :lg="24">
<el-form-item label="验证ERP库存" prop="is_verify_erp_inventory">
<el-radio-group v-model="form.is_verify_erp_inventory">
<el-radio :value="true">是</el-radio>
<el-radio :value="false">否</el-radio>
</el-radio-group>
</el-form-item>
</el-col>
</el-row>
<div class="orderView" v-if="!form.is_verify_erp_inventory">
<el-row>
<el-col :span="8" :lg="6">
<el-form-item label="部件SN/Sp" prop="component_serial_no">
<el-input class="input" v-model="form.component_serial_no" placeholder="部件SN/Se"></el-input>
</el-form-item>
</el-col>
<el-col :span="8" :lg="6">
<el-form-item label="部件厂商" prop="component_manufacturer">
<el-input class="input" v-model="form.component_manufacturer" type="text" placeholder="请输入部件厂商"></el-input>
</el-form-item>
</el-col>
<el-col :span="8" :lg="6">
<el-form-item label="部件型号" prop="component_model">
<el-input class="input" v-model="form.component_model" type="text" placeholder="请输入部件型号"></el-input>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="8" :lg="6">
<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-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截止时间"></el-date-picker>
</el-form-item>
</el-col>
<el-col :span="8" :lg="6">
<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-col>
</el-row>
</div>
<div v-else>
<div v-for="(item,index) in form.component_info" :key="index">
<el-row>
<el-col :span="8" :lg="6">
<el-form-item label="部件SN/Sp" :prop="'form.component_info.'+index+'.component_serial_no'">
<el-input class="input" v-model="item.component_serial_no" placeholder="部件SN/Se"></el-input>
</el-form-item>
</el-col>
<el-col :span="8" :lg="6">
<el-form-item label="部件厂商" :prop="'form.component_info.'+index+'.component_manufacturer'">
<el-input class="input" v-model="item.component_manufacturer" type="text" placeholder="请输入部件厂商"></el-input>
</el-form-item>
</el-col>
<el-col :span="8" :lg="6">
<el-form-item label="部件型号" :prop="'form.component_info.'+index+'.component_model'">
<el-input class="input" v-model="item.component_model" type="text" placeholder="请输入部件型号"></el-input>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="8" :lg="6">
<el-form-item label="部件PN/Sp" :prop="'form.component_info.'+index+'.component_pn'">
<el-input class="input" v-model="item.component_pn" type="text" placeholder="请输入部件SN/Sp"></el-input>
</el-form-item>
</el-col>
<el-col :span="8" :lg="6">
<el-form-item label="SLA截止时间" :prop="'form.component_info.'+index+'.sla_expiration'">
<el-date-picker class="input" v-model="item.sla_expiration" type="date" value-format="YYYY-MM-DD" placeholder="请选择SLA截止时间"></el-date-picker>
</el-form-item>
</el-col>
<el-col :span="8" :lg="6">
<el-form-item label="剩余BD数" :prop="'form.component_info.'+index+'.bd_backup_count'">
<el-input class="input" v-model="item.bd_backup_count" type="text" placeholder="请输入剩余BD数"></el-input>
</el-form-item>
</el-col>
</el-row>
</div>
</div>
<el-row v-if="form.is_verify_erp_inventory">
<div style="padding-left: 105px">
<el-button type="primary" size="small" icon="el-icon-Plus" @click="addOrder"></el-button>
<el-button type="danger" size="small" icon="el-icon-Minus" @click="deleteOrder" v-if="form.component_info.length>1"></el-button>
</div>
</el-row>
</div>
</div>
<div class="btnBox">
<el-button type="primary" :size="size" @click="save" :loading="isSave">确认保存</el-button>
</div>
</el-form>
</el-scrollbar>
</el-main>
</el-container>
</template>
<script>
export default {
name: "create-order",
data(){
return{
size:"small",
isSave:false,
setMap:{
maintenance_level:[],
fault_type:[],
},
form:{
customer:"", // 客户
standard_model:"", // 标准机型
repair_order_no:"",
maintenance_grade:"", // 维修等级
maintenance_level: "", // 维修分类
fault_type: "", // 故障类型
fault_description: "", // 故障描述
requires_shutdown: "", // 是否需要关机
city: "", // 机房城市
park_name: "", // 园区名称
data_center_name: "", // 机房/IDC名称
rack_position: "", // 机架位置
device_sn: "", // 整机SN
device_manufacturer: "", // 整机厂商
device_model: "", // 整机型号
component_serial_no: "", // 部件序列号
component_manufacturer: "", // 部件厂商
component_model: "", // 部件型号
component_pn: "", // 部件零件PN号
sla_expiration: "", // SLA到期时间
bd_backup_count: "", // 剩余BD数
pe_confirmation_time: "", // PE确认时间
warranty_end_date: "", // 保修期结束
maintenance_plan: '', // 维保等级1-铜牌;常量维护项
is_verify_erp_inventory:true,
component_info:[
{
component_serial_no:"",
component_manufacturer:"",
component_model:"",
component_pn:""
}
]
},
rules:{
fault_description:[{required:true,trigger:"blur",message:"故障描述不能为空"}],
fault_type:[{required:true,trigger:"change",message:"故障类型不能为空"}],
city:[{required:true,trigger:"blur",message:"机房城市不能为空"}],
device_sn:[{required:true,trigger:"blur",message:"整机SN/Se不能为空"}],
device_manufacturer:[{required:true,trigger:"blur",message:"整机厂商不能为空"}],
device_model:[{required:true,trigger:"blur",message:"整机型号不能为空"}],
sla_expiration:[{required:true,trigger:"change",message:"SLA截止时间不能为空"}],
bd_backup_count:[{required:true,trigger:"blur",message:"剩余BD数不能为空"}],
},
}
},
mounted() {
},
methods:{
async getSelect(name,num) {
const res = await this.$API.orders.order.maintenance.optionList.post({const_type:num});
if(res.code == 200){
this.setMap[name] = res.data;
}
},
async getCustomerSelect(name){
let params = {
field:"customer_name",
id:{
operator:"in",
value:""
}
}
const res = await this.$API.setup.customer.select.post(params);
if(res.code == 200){
this.setMap[name] = res.data;
}
},
addOrder(){
this.form.component_info.push({
component_serial_no:"",
component_manufacturer:"",
component_model:"",
component_pn:""
})
},
deleteOrder(){
this.form.component_info.pop();
},
save(){
this.$refs.form.validate(async (valid) => {
if (valid) {
this.isSave = true;
const res = await this.$API.orders.order.maintenance.add.post(this.form);
this.isSave = false;
if(res.code == 200){
this.$message.success("操作成功");
}
}
})
}
}
}
</script>
<style scoped lang="scss">
.boxMain{
border-bottom: 1px solid #f2f2f2;
padding: 10px 0 5px 0;
.title{
margin-bottom: 10px;
}
.boxCom{
.el-row{
.el-col{
padding: 0 10px;
::v-deep .input{
width: 100%;
}
}
}
}
}
.btnBox{
margin-top: 15px;
text-align: left;
padding: 0 10px;
}
</style>