修改工单

This commit is contained in:
龙运模 2024-10-09 16:19:45 +08:00
parent 9c575ee296
commit ac7a61b375
9 changed files with 268 additions and 66 deletions

View File

@ -105,7 +105,13 @@ export default {
return await http.post(this.url, params);
},
},
roleUserTree:{
url: `${config.API_URL}/roles.user.select.list`,
name: "角色用户列表",
post: async function (params) {
return await http.post(this.url, params);
}
},
roleAuth: {
url: `${config.API_URL}/auth.role.auth`,
name: "角色授权",

View File

@ -324,6 +324,7 @@ tool.isBinaryFile = function (file) {
tool.authPermissions = function (list){
let arr = [];
if(list && list.length>0){
console.log(list,233)
list.forEach(item=>{
for(let i in item){
if(item[i] && item[i].length>0){

View File

@ -2,16 +2,28 @@
<el-container>
<el-main>
<el-scrollbar>
<el-form ref="form" :size="size" label-width="90px" :model="form">
<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="创建时间">-->
<!-- <el-date-picker class="input" 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="报修客户" prop="customer">
<el-input class="input" type="text" v-model="form.customer" placeholder="请输入报修客户"></el-input>
</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>
@ -53,7 +65,7 @@
</el-select>
</el-form-item>
</el-col>
<el-col :span="8" :lg="12">
<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>
@ -117,13 +129,13 @@
</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 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 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>
@ -133,39 +145,56 @@
<div class="title">维保工单信息</div>
<div class="boxCom">
<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-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">
<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>
<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>
<div style="padding-left: 105px">
<el-button type="primary" size="small" icon="el-icon-Plus"></el-button>
<el-button type="danger" size="small" icon="el-icon-Minus"></el-button>
</div>
</el-row>
</div>
</div>
@ -190,9 +219,11 @@ export default {
fault_type:[],
},
form:{
customer:"", //
standard_model:"", //
repair_order_no:"",
maintenance_grade:"", //
maintenance_level: "", //
maintenance_level: "", //
fault_type: "", //
fault_description: "", //
requires_shutdown: "", //
@ -211,8 +242,27 @@ export default {
bd_backup_count: "", // BD
pe_confirmation_time: "", // PE
warranty_end_date: "", //
maintenance_plan: '' // 1-
}
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() {

View File

@ -14,10 +14,20 @@
</div>
<div class="cardBody">
<el-row>
<el-col :span="8" :lg="6">
<span class="label">报修客户</span>
<span class="text">{{info.customer}}</span>
</el-col>
<el-col :span="8" :lg="6">
<span class="label">标准机型</span>
<span class="text">{{info.standard_model}}</span>
</el-col>
<el-col :span="8" :lg="6">
<span class="label">创建时间</span>
<span class="text">{{info.created_at}}</span>
</el-col>
</el-row>
<el-row>
<el-col :span="8" :lg="6">
<span class="label">PE确认时间</span>
<span class="text">{{info.pe_confirmation_time}}</span>
@ -54,7 +64,7 @@
<div class="cardBody">
<el-row>
<el-col :span="8" :lg="6">
<span class="label">维修等级</span>
<span class="label">维修等级</span>
<span class="text">{{info.maintenance_plan}}</span>
</el-col>
<el-col :span="8" :lg="6">

View File

@ -11,9 +11,9 @@
<div v-auth="'maintenanceOrderImport'" @click="importTemplate">下载导入模版</div>
</template>
</scImport>
<el-button type="primary" v-auth="'maintenanceOrderSubmit'" plain :size="size" :disabled="selection.length==0" @click="save_maintenance">提交维保</el-button>
<el-button type="primary" v-auth="'maintenanceOrderSubmit'" plain :size="size" :disabled="selection.length!=1" @click="save_maintenance">提交维保</el-button>
<el-button type="success" v-auth="'maintenanceOrderApproval'" :size="size" icon="sc-icon-OrderReview" :disabled="selection.length==0" @click="batch_review">批量审核</el-button>
<el-button type="primary" v-auth="'maintenanceOrderSend'" plain :size="size" :disabled="selection.length==0" @click="issued_maintenance">下发维保</el-button>
<!-- <el-button type="primary" v-auth="'maintenanceOrderSend'" plain :size="size" :disabled="selection.length==0" @click="issued_maintenance">下发维保</el-button>-->
<el-button type="danger" v-auth="'maintenanceOrderDelete'" plain :size="size" icon="el-icon-Delete" :disabled="selection.length==0" @click="batch_del"></el-button>
</div>
<div class="right-panel">
@ -53,6 +53,9 @@
<div v-auth="'maintenanceOrderAdd'">
<el-dropdown-item @click="table_edit(scope.row)" icon="sc-icon-Edit">编辑工单</el-dropdown-item>
</div>
<div v-auth="'maintenanceOrderSubmit'">
<el-dropdown-item icon="sc-icon-SaveMaintenance" @click="table_submit(scope.row)">提交维保</el-dropdown-item>
</div>
<div v-auth="'maintenanceOrderDelete'">
<el-dropdown-item @click="table_del(scope.row)" icon="sc-icon-Delete">删除工单</el-dropdown-item>
</div>
@ -62,12 +65,9 @@
<div v-auth="'maintenanceOrderDetail'">
<el-dropdown-item @click="table_show(scope.row)" icon="sc-icon-See">工单详情</el-dropdown-item>
</div>
<div v-auth="'maintenanceOrderSubmit'">
<el-dropdown-item icon="sc-icon-SaveMaintenance" @click="table_submit(scope.row)" divided>提交维保</el-dropdown-item>
</div>
<div v-auth="'maintenanceOrderSend'">
<el-dropdown-item icon="sc-icon-OrderMaintenance" @click="table_send(scope.row)">下发维保</el-dropdown-item>
</div>
<!-- <div v-auth="'maintenanceOrderSend'">-->
<!-- <el-dropdown-item icon="sc-icon-OrderMaintenance" @click="table_send(scope.row)">下发维保</el-dropdown-item>-->
<!-- </div>-->
<div v-auth="'orderLogsList'">
<el-dropdown-item icon="sc-icon-OrderLog" @click="table_logs(scope.row)" divided>工单日志</el-dropdown-item>
</div>
@ -274,12 +274,14 @@ export default {
})
},
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("操作成功")
}
eventBus.$emit('tagClose','/order/submit-order',{id:this.selection.map(em => em.id)[0]});
// 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)};

View File

@ -21,7 +21,7 @@
<script>
import detailView from "@/views/order/orderList/detailView";
export default {
name: "preview-order",
name: "",
components:{
detailView
},

View File

@ -60,8 +60,8 @@
>
<div class="bodyView">
<div class="viewLeft">
<div class="viewTitle">部门</div>
<div class="viewCom">
<div class="viewTitle">成员</div>
<div class="viewCom" element-loading-text="加载中..." v-loading="userLoading">
<el-scrollbar>
<treeUser class="treeUser" ref="treeList" :data="deptTree" :userIds="userIds" @roleChecked="roleChecked" />
</el-scrollbar>
@ -102,7 +102,7 @@
import dataTree from "./dataTree";
import dataPermissions from "./dataPermissions";
import members from "./members";
import treeUser from "./tree"
import treeUser from "./userTree"
import roleSort from "./roleSort";
export default {
@ -160,6 +160,7 @@
isMember:false,
userCheckList:[],
userIds:[],
userLoading:false,
}
},
mounted() {
@ -424,13 +425,15 @@
},
async getDeptTree() {
this.memberShow = true;
const res = await this.$API.system.role.tree.post();
this.userLoading = true;
const res = await this.$API.system.role.roleUserTree.post();
this.deptTree = this.treeShow(res.data);
this.userLoading = false;
},
//
treeShow(list){
list.forEach(item=>{
item.isOpen = false;
item.isOpen = true;
if(item.children){
this.treeShow(item.children)
}
@ -483,6 +486,7 @@
user_ids:ids,
role_id:this.role_id
}
this.roleUserLoading = true;
const res = await this.$API.system.role.roleUserDel.post(params);
if(res.code == 200){
await this.getRoleList();

View File

@ -0,0 +1,129 @@
<template>
<!-- 自定义表格 -->
<div class="tableBody">
<div class="tr" v-for="(item,index) in data" :key="index">
<div class="td tdUser">
<div :class="userChecked(userIds,item)?'userList':'userList userChecked'" @click="roleChecked(item)">
<div class="userName">
<div class="avatar">{{ userAvatar(item) }}</div>
<div class="name">{{item.name}}</div>
</div>
<div class="userBtn" v-if="!userChecked(userIds,item)"><el-icon-Check></el-icon-Check></div>
</div>
</div>
<template v-if="item.children && item.isOpen">
<treeDept class="td tdCom" :data="item.children" :userIds="userIds" @roleChecked="roleChecked" />
</template>
</div>
</div>
</template>
<script>
export default {
name:'treeDept',
data() {
return {
size: "small",
isShow:true,
};
},
props:{
data:{
type:Array,
required: true
},
userIds:{
type:Array
}
},
watch:{
},
computed:{
},
methods:{
userAvatar(row) {
return row.name.substring(0, 1)
},
userChecked(arr,em){
return arr.indexOf(em.id)!=-1?false:true
},
roleChecked(em){
this.$emit('roleChecked',em);
},
openFile(item){
this.$nextTick(()=>{
item.isOpen = !item.isOpen;
})
}
}
};
</script>
<style lang="scss" scoped>
.tableBody .tr{
display: flex;
flex-direction: column;
align-items: stretch;
justify-content: space-between;
.td{
padding: 3px 0 3px 12px;
}
.td:first-child{
border-left: 0;
}
.tdTitle{
display: flex;
justify-content: flex-start;
cursor: pointer;
.file{
width: 14px;
margin-right: 5px;
}
}
.tdUser{
.userList{
padding:4px 0 4px 12px;
display: flex;
justify-content: space-between;
.userName{
flex: 1;
display: flex;
align-items: center;
cursor: pointer;
.avatar{
background: var(--el-text-color-disabled);
color: var(--el-color-white);
border-radius: 50%;
display: inline-block;
height: 21px;
width: 21px;
text-align: center;
line-height: 21px;
}
.name{
margin-left: 10px;
}
}
.userBtn{
flex-basis: 12px;
display: flex;
align-items: center;
justify-content: center;
}
}
.userChecked{
color: var(--el-color-primary);
.userName{
.avatar{
background:var(--el-color-primary);
}
}
}
}
}
.tableBody .tr:last-child{
border-bottom: 0;
}
</style>

View File

@ -52,7 +52,7 @@
<script>
export default {
name: "view-permission",
name: "",
data(){
return{
size:'default',