增加工单计划

This commit is contained in:
龙运模 2024-09-01 23:15:16 +08:00
parent 39979c262a
commit 8f703ab06a
8 changed files with 293 additions and 145 deletions

View File

@ -139,19 +139,20 @@ function webSocketOnMessage(msg) {
global_callback(result); global_callback(result);
} }
} }
if (result.type == -1 || result.type == 8 || result.type == 9) {
// if(result.type == -1){ if (result.type == -1 || result.type == 0 || result.type == 8 || result.type == 9) {
// if(result.data && result.data.token){ if(result.type == -1 || result.type == 0){
// tool.cookie.set("TOKEN", result.data.token); if(result.data && result.data.token){
// } tool.cookie.set("TOKEN", result.data.token);
// }else{ }
}else{
showNot = ElNotification.error({ showNot = ElNotification.error({
title: '系统退出', title: '系统退出',
message: result.msg, message: result.msg,
duration:0 duration:0
}); });
handleError('系统退出', result.msg); handleError('系统退出', result.msg);
// } }
} }
eventBus.$emit('sockBack',result); eventBus.$emit('sockBack',result);

View File

@ -6,7 +6,7 @@
<span class="name">当前状态</span> <span class="name">当前状态</span>
<span class="text"> <span class="text">
<span v-for="(item,ind) in statusList" :key="ind"> <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-4)`}" <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> v-if="item.value == info.business_status">{{item.label}}</span>
</span> </span>
</span> </span>

View File

@ -38,24 +38,12 @@
<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" @selection-change="selectionChange">
<el-table-column type="selection" align="center" width="40"></el-table-column> <el-table-column type="selection" align="center" width="40"></el-table-column>
<sc-table-column label="序号" align="center" type="index"></sc-table-column> <sc-table-column label="序号" align="center" type="index"></sc-table-column>
<template #logo="scope">
<el-image class="logoCell" :src="scope.row.logo" preview-teleported :preview-src-list="[scope.row.logo]" fit="contain">
<template #error>
<div class="image-slot" style="text-align: center;font-size: 20px;">
<el-icon><el-icon-Picture /></el-icon>
</div>
</template>
</el-image>
</template>
<template #business_status="scope"> <template #business_status="scope">
<span v-for="(item,ind) in statusList" :key="ind"> <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-4)`}" <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 == scope.row.business_status">{{item.label}}</span> v-if="item.value == scope.row.business_status">{{item.label}}</span>
</span> </span>
</template> </template>
<template #active_status="scope">
<el-switch :size="size" v-model="scope.row.active_status" @change="changeSwitch($event, scope.row)" :loading="scope.row.$switch_status" :active-value="true" :inactive-value="false"></el-switch>
</template>
<el-table-column label="操作" fixed="right" align="center" width="150"> <el-table-column label="操作" fixed="right" align="center" width="150">
<template #default="scope"> <template #default="scope">
<el-dropdown> <el-dropdown>

View File

@ -0,0 +1,234 @@
<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-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>
<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: "confirm",
titleMap: {
confirm: '数据确认费用',
},
visible: false,
isSave: false,
//
form: {
id:"",
login_name: "",
name:"",
emp_id:"",
mobile:"",
email:"",
avatar: "",
password:"",
dept_id: "",
role_ids: []
},
//
rules: {
avatar:[
{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: {
//
open(mode='confirm'){
this.mode = mode;
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);
this.isSave = false;
if(res.code == 200){
this.$emit('success', this.form, this.mode)
this.visible = false;
this.$message.success("操作成功")
}
}else{
return false;
}
})
},
//
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:[]
}
}
}
</script>
<style>
</style>

View File

@ -13,17 +13,11 @@
<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" @selection-change="selectionChange">
<el-table-column type="selection" align="center" width="40"></el-table-column> <el-table-column type="selection" align="center" width="40"></el-table-column>
<sc-table-column label="序号" align="center" type="index"></sc-table-column> <sc-table-column label="序号" align="center" type="index"></sc-table-column>
<template #logo="scope"> <template #business_status="scope">
<el-image class="logoCell" :src="scope.row.logo" preview-teleported :preview-src-list="[scope.row.logo]" fit="contain"> <span v-for="(item,ind) in statusList" :key="ind">
<template #error> <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)`}"
<div class="image-slot" style="text-align: center;font-size: 20px;"> v-if="item.value == scope.row.business_status">{{item.label}}</span>
<el-icon><el-icon-Picture /></el-icon> </span>
</div>
</template>
</el-image>
</template>
<template #active_status="scope">
<el-switch :size="size" v-model="scope.row.active_status" @change="changeSwitch($event, scope.row)" :loading="scope.row.$switch_status" :active-value="true" :inactive-value="false"></el-switch>
</template> </template>
<el-table-column label="操作" fixed="right" align="center" width="150"> <el-table-column label="操作" fixed="right" align="center" width="150">
<template #default="scope"> <template #default="scope">
@ -31,7 +25,7 @@
<el-button class="noBorderBtn" icon="el-icon-more" :size="size"></el-button> <el-button class="noBorderBtn" icon="el-icon-more" :size="size"></el-button>
<template #dropdown> <template #dropdown>
<el-dropdown-menu> <el-dropdown-menu>
<el-dropdown-item icon="sc-icon-ConfirmOrder">确认工单</el-dropdown-item> <el-dropdown-item icon="sc-icon-ConfirmOrder" @click="confirmOrderClick">确认工单</el-dropdown-item>
<el-dropdown-item @click="table_show(scope.row, 'see')" icon="sc-icon-See">工单详情</el-dropdown-item> <el-dropdown-item @click="table_show(scope.row, 'see')" icon="sc-icon-See">工单详情</el-dropdown-item>
</el-dropdown-menu> </el-dropdown-menu>
</template> </template>
@ -42,25 +36,25 @@
</el-main> </el-main>
</el-container> </el-container>
<!-- <save-dialog v-if="dialog.save" ref="saveDialog" @success="handleSaveSuccess" @closed="dialog.save=false"></save-dialog>--> <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>--> <!-- <see-dialog v-if="dialog.show" ref="showDialog" @closed="dialog.show=false"></see-dialog>-->
</template> </template>
<script> <script>
// import saveDialog from './save' import confirmDialog from './confirmOrder'
// import seeDialog from './see' // import seeDialog from './see'
export default { export default {
components: { components: {
// saveDialog, confirmDialog,
// seeDialog, // seeDialog,
}, },
data() { data() {
return { return {
size:'small', size:'small',
dialog: { dialog: {
save: false, confirm: false,
show: false, show: false,
}, },
list: { list: {
@ -79,9 +73,16 @@ export default {
{name:'关键字',type:'text',code:['fault_description','device_sn'],keyword:true,show:true}, {name:'关键字',type:'text',code:['fault_description','device_sn'],keyword:true,show:true},
], ],
params: {}, params: {},
statusList:[],
} }
}, },
methods: { methods: {
async getStatusList() {
const res = await this.$API.orders.order.maintenance.status.post();
if (res.code == 200) {
this.statusList = res.data;
}
},
searchShowClick(){ searchShowClick(){
this.searchShow = !this.searchShow; this.searchShow = !this.searchShow;
this.searchList.forEach(item=>{ this.searchList.forEach(item=>{
@ -115,53 +116,15 @@ export default {
}) })
} }
}, },
async getStatusList(data,params) {
const res = await this.$API.oss.status.post(params);
if(res.code == 200){
this.searchList.forEach(item=>{
if(item.code == data.code){
item.data = res.data;
}
})
}
},
//
add(){
this.dialog.save = true;
this.$nextTick(() => {
this.$refs.saveDialog.open()
})
},
// //
importFile(){ confirmOrderClick(){
this.dialog.confirm = true;
this.$nextTick(() => { this.$nextTick(() => {
this.$refs.scImport.importFile(); this.$refs.confirmDialog.open()
}) })
}, },
async importTemplate() {
const res = await this.$API.orders.order.maintenance.template.post();
const blob = new Blob([res]);
const text = new Date().getTime();
const eLink = document.createElement('a');
eLink.download = "维保导入模版_"+text+'.xlsx';
eLink.style.display = 'none';
eLink.href = URL.createObjectURL(blob);
document.body.appendChild(eLink);
eLink.click();
URL.revokeObjectURL(eLink.href);
document.body.removeChild(eLink);
},
async importUpload(params) {
const res = await this.$API.orders.order.maintenance.import.post(params);
if(res.code == 200){
this.$message.success('上传成功,开始导入数据');
}
},
importSuccess(){
this.$refs.table.refresh()
},
// //
table_edit(row){ table_edit(row){
@ -216,35 +179,6 @@ export default {
selectionChange(selection){ selectionChange(selection){
this.selection = selection; this.selection = selection;
}, },
//
changeSwitch(val, row) {
row.$switch_yx = true;
setTimeout(async () => {
let params = {
id: row.id,
status: row.active_status,
};
const res = await this.$API.system.company.status.post(params);
if(res.code !=200){
row.active_status = !row.active_status;
}
delete row.$switch_status;
delete row.$switch_yx;
}, 500);
},
//
exportChangeShow(params){
if(params.type == 11){
this.exportShow = params.status==0?true:false
}
},
async exportData() {
if(this.exportShow) return
const res = await this.$API.orders.order.maintenance.export.post(this.params);
if(res.code == 200){
this.$message.success('开始导出');
}
},
upSearch(){ upSearch(){
this.$refs.table.upData(this.params); this.$refs.table.upData(this.params);
}, },

View File

@ -16,18 +16,9 @@
<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" @selection-change="selectionChange">
<el-table-column type="selection" align="center" width="40"></el-table-column> <el-table-column type="selection" align="center" width="40"></el-table-column>
<sc-table-column label="序号" align="center" type="index"></sc-table-column> <sc-table-column label="序号" align="center" type="index"></sc-table-column>
<template #logo="scope">
<el-image class="logoCell" :src="scope.row.logo" preview-teleported :preview-src-list="[scope.row.logo]" fit="contain">
<template #error>
<div class="image-slot" style="text-align: center;font-size: 20px;">
<el-icon><el-icon-Picture /></el-icon>
</div>
</template>
</el-image>
</template>
<template #repair_status="scope"> <template #repair_status="scope">
<span v-for="(item,ind) in statusList" :key="ind"> <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-4)`}" <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 == scope.row.repair_status">{{item.label}}</span> v-if="item.value == scope.row.repair_status">{{item.label}}</span>
</span> </span>
</template> </template>

View File

@ -9,7 +9,7 @@
<span class="name">当前状态</span> <span class="name">当前状态</span>
<span class="text"> <span class="text">
<span v-for="(item,ind) in statusList" :key="ind"> <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-4)`}" <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> v-if="item.value == info.business_status">{{item.label}}</span>
</span> </span>
</span> </span>

View File

@ -17,7 +17,8 @@
<el-input placeholder="输入关键字进行过滤" :size="size" v-model="groupFilterText" clearable></el-input> <el-input placeholder="输入关键字进行过滤" :size="size" v-model="groupFilterText" clearable></el-input>
</el-header> </el-header>
<el-main class="treeMain nopadding"> <el-main class="treeMain nopadding">
<el-tree ref="group" class="menu" node-key="id" :data="group" :default-checked-keys="roleCheckList" :current-node-key="role_id" :highlight-current="true" :expand-on-click-node="false" :filter-node-method="groupFilterNode" @check-change="groupChange" @node-click="groupClick"> <!-- :default-checked-keys="roleCheckList" @check-change="groupChange"-->
<el-tree ref="group" class="menu" node-key="id" :data="group" :current-node-key="role_id" :highlight-current="true" :expand-on-click-node="false" :filter-node-method="groupFilterNode" @node-click="groupClick">
<template #default="{ node, data }"> <template #default="{ node, data }">
<span class="custom-tree-node"> <span class="custom-tree-node">
<span>{{ node.label }}</span> <span>{{ node.label }}</span>
@ -113,7 +114,6 @@
import treeUser from "./tree" import treeUser from "./tree"
export default { export default {
name: 'role',
components: { components: {
saveDialog, saveDialog,
permissionDialog, permissionDialog,
@ -148,7 +148,7 @@
isDataSave:false, isDataSave:false,
activeNum:0, activeNum:0,
roleCheckList:[], roleCheckList:[],
role_id:"", role_id:0,
dataTreeLoading:false, dataTreeLoading:false,
menu: { menu: {
list: [], list: [],
@ -173,18 +173,18 @@
this.getGroup(true); this.getGroup(true);
}, },
methods: { methods: {
async getGroup(flag = false){ async getGroup(flag = true){
this.showGroupLoading = true; this.showGroupLoading = true;
const res = await this.$API.system.role.list.get(); const res = await this.$API.system.role.list.get();
this.showGroupLoading = false; this.showGroupLoading = false;
if(res.code == 200){ if(res.code == 200){
this.group = res.data.rows; this.group = res.data.rows;
if(res.data.rows && res.data.rows.length>0){ if(res.data.rows && res.data.rows.length>0){
this.role_id = res.data.rows[0].id; this.role_id = res.data.rows[0].id
if(flag){ if(flag){
await this.getMenu(); await this.getMenu(res.data.rows[0].id);
await this.getRoleList(); await this.getRoleList(res.data.rows[0].id);
await this.getDataList(); await this.getDataList(res.data.rows[0].id);
} }
} }
} }
@ -283,14 +283,14 @@
return data.label.indexOf(value) !== -1; return data.label.indexOf(value) !== -1;
}, },
// //
groupChange(data,isCheck){ // groupChange(data,isCheck){
let list = JSON.parse(JSON.stringify(this.roleCheckList)); // let list = JSON.parse(JSON.stringify(this.roleCheckList));
if(isCheck){ // if(isCheck){
this.roleCheckList.push(data.id); // this.roleCheckList.push(data.id);
}else{ // }else{
this.roleCheckList = list.filter(em=>em != data.id); // this.roleCheckList = list.filter(em=>em != data.id);
} // }
}, // },
// //
groupClick(data){ groupClick(data){
this.role_id = data.id; this.role_id = data.id;
@ -387,10 +387,10 @@
activeClick(e){ activeClick(e){
this.activeNum = e; this.activeNum = e;
}, },
async getMenu() { async getMenu(id) {
if(this.role_id!=""){ if(this.role_id!="" || id){
let params = { let params = {
role_id: this.role_id, role_id:id?id:this.role_id,
}; };
this.dataTreeLoading = true; this.dataTreeLoading = true;
const res = await this.$API.system.role.roleMenu.post(params); const res = await this.$API.system.role.roleMenu.post(params);
@ -398,10 +398,10 @@
this.menu.list = res.data; this.menu.list = res.data;
} }
}, },
async getDataList() { async getDataList(id) {
if (this.role_id != "") { if (this.role_id != "" || id) {
let params = { let params = {
role_id: this.role_id, role_id:id?id:this.role_id,
}; };
this.dataPermissionsLoading = true; this.dataPermissionsLoading = true;
const res = await this.$API.system.role.dataMenu.post(params); const res = await this.$API.system.role.dataMenu.post(params);
@ -410,10 +410,10 @@
} }
}, },
async getRoleList() { async getRoleList(id) {
if(this.role_id!=""){ if(this.role_id!="" || id){
let params = { let params = {
role_id: this.role_id, role_id:id?id:this.role_id,
}; };
this.roleUserLoading = true; this.roleUserLoading = true;
const res = await this.$API.system.role.roleUser.post(params); const res = await this.$API.system.role.roleUser.post(params);