增加工单计划

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);
}
}
if (result.type == -1 || result.type == 8 || result.type == 9) {
// if(result.type == -1){
// if(result.data && result.data.token){
// tool.cookie.set("TOKEN", result.data.token);
// }
// }else{
if (result.type == -1 || result.type == 0 || result.type == 8 || result.type == 9) {
if(result.type == -1 || result.type == 0){
if(result.data && result.data.token){
tool.cookie.set("TOKEN", result.data.token);
}
}else{
showNot = ElNotification.error({
title: '系统退出',
message: result.msg,
duration:0
});
handleError('系统退出', result.msg);
// }
}
}
eventBus.$emit('sockBack',result);

View File

@ -6,7 +6,7 @@
<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-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>
</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">
<el-table-column type="selection" align="center" width="40"></el-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">
<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>
</span>
</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">
<template #default="scope">
<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">
<el-table-column type="selection" align="center" width="40"></el-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 #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 #business_status="scope">
<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 == scope.row.business_status">{{item.label}}</span>
</span>
</template>
<el-table-column label="操作" fixed="right" align="center" width="150">
<template #default="scope">
@ -31,7 +25,7 @@
<el-button class="noBorderBtn" icon="el-icon-more" :size="size"></el-button>
<template #dropdown>
<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-menu>
</template>
@ -42,25 +36,25 @@
</el-main>
</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>-->
</template>
<script>
// import saveDialog from './save'
import confirmDialog from './confirmOrder'
// import seeDialog from './see'
export default {
components: {
// saveDialog,
confirmDialog,
// seeDialog,
},
data() {
return {
size:'small',
dialog: {
save: false,
confirm: false,
show: false,
},
list: {
@ -79,9 +73,16 @@ export default {
{name:'关键字',type:'text',code:['fault_description','device_sn'],keyword:true,show:true},
],
params: {},
statusList:[],
}
},
methods: {
async getStatusList() {
const res = await this.$API.orders.order.maintenance.status.post();
if (res.code == 200) {
this.statusList = res.data;
}
},
searchShowClick(){
this.searchShow = !this.searchShow;
this.searchList.forEach(item=>{
@ -115,54 +116,16 @@ 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;
//
confirmOrderClick(){
this.dialog.confirm = true;
this.$nextTick(() => {
this.$refs.saveDialog.open()
this.$refs.confirmDialog.open()
})
},
//
importFile(){
this.$nextTick(()=>{
this.$refs.scImport.importFile();
})
},
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){
this.dialog.save = true
@ -216,35 +179,6 @@ export default {
selectionChange(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(){
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">
<el-table-column type="selection" align="center" width="40"></el-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">
<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>
</span>
</template>

View File

@ -9,7 +9,7 @@
<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-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>
</span>
</span>

View File

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