完善工单和配置

This commit is contained in:
龙运模 2024-08-30 15:37:12 +08:00
parent 4b0c546cb7
commit 2b408d6584
18 changed files with 452 additions and 25 deletions

View File

@ -6,14 +6,14 @@ export default {
add: { add: {
url: `${config.API_URL}/machine.room.add`, url: `${config.API_URL}/machine.room.add`,
name: "新增机房配置", name: "新增机房配置",
post: async function (data = {}) { post: async function (data) {
return await http.post(this.url, data); return await http.post(this.url, data);
}, },
}, },
list: { list: {
url: `${config.API_URL}/machine.room.list`, url: `${config.API_URL}/machine.room.list`,
name: "机房配置列表", name: "机房配置列表",
get: async function (data = {}) { get: async function (data) {
return await http.post(this.url, data); return await http.post(this.url, data);
}, },
}, },
@ -22,14 +22,14 @@ export default {
set:{ set:{
url: `${config.API_URL}/mail.config.set`, url: `${config.API_URL}/mail.config.set`,
name: "源邮件配置", name: "源邮件配置",
post: async function (data = {}) { post: async function (data) {
return await http.post(this.url, data); return await http.post(this.url, data);
}, },
}, },
get:{ get:{
url: `${config.API_URL}/mail.config.get`, url: `${config.API_URL}/mail.config.get`,
name: "源邮件获取", name: "源邮件获取",
post: async function (data = {}) { post: async function (data) {
return await http.post(this.url, data); return await http.post(this.url, data);
}, },
} }
@ -38,14 +38,30 @@ export default {
set:{ set:{
url: `${config.API_URL}/k3.api.config.set`, url: `${config.API_URL}/k3.api.config.set`,
name: "金蝶ERP接口配置", name: "金蝶ERP接口配置",
post: async function (data = {}) { post: async function (data) {
return await http.post(this.url, data); return await http.post(this.url, data);
}, },
}, },
get:{ get:{
url: `${config.API_URL}/k3.api.config.get`, url: `${config.API_URL}/k3.api.config.get`,
name: "金蝶ERP接口配置获取", name: "金蝶ERP接口配置获取",
post: async function (data = {}) { post: async function (data) {
return await http.post(this.url, data);
},
}
},
cost:{
set:{
url: `${config.API_URL}/cost.category.add`,
name: "新增费用列别配置",
post: async function (data) {
return await http.post(this.url, data);
},
},
get:{
url: `${config.API_URL}/cost.category.list`,
name: "费用类别配置",
post: async function (data) {
return await http.post(this.url, data); return await http.post(this.url, data);
}, },
} }
@ -54,21 +70,21 @@ export default {
list:{ list:{
url: `${config.API_URL}/bom.list`, url: `${config.API_URL}/bom.list`,
name: "bom列表", name: "bom列表",
get: async function (data = {}) { get: async function (data) {
return await http.post(this.url, data); return await http.post(this.url, data);
}, },
}, },
info:{ info:{
url: `${config.API_URL}/bom.detail`, url: `${config.API_URL}/bom.detail`,
name: "bom详情", name: "bom详情",
post: async function (data = {}) { post: async function (data) {
return await http.post(this.url, data); return await http.post(this.url, data);
}, },
}, },
refresh:{ refresh:{
url: `${config.API_URL}/bom.refresh`, url: `${config.API_URL}/bom.refresh`,
name: "重新拉取bom", name: "重新拉取bom",
post: async function (data = {}) { post: async function (data) {
return await http.post(this.url, data); return await http.post(this.url, data);
}, },
} }

View File

@ -113,6 +113,7 @@ export default {
return await http.post(this.url, params); return await http.post(this.url, params);
} }
}, },
roleCode: { roleCode: {
url: `${config.API_URL}/authorize.role.codes`, url: `${config.API_URL}/authorize.role.codes`,
name: "角色对应CODE列表", name: "角色对应CODE列表",
@ -482,5 +483,5 @@ export default {
} }
} }
}, },
}; };

View File

@ -0,0 +1,13 @@
<template>
<svg t="1725001028284" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="4537" width="200" height="200"><path d="M844.17422199 56.888889A130.048 130.048 0 0 1 974.22222199 186.936889v650.126222l-0.056889 1.649778L974.22222199 512h-65.024V186.936889a64.967111 64.967111 0 0 0-65.024-65.024H194.04799999A65.024 65.024 0 0 0 129.42222199 179.313778l-0.455111 7.623111v650.126222a65.024 65.024 0 0 0 57.400889 64.568889l7.623111 0.455111h325.006222L519.11111099 967.111111H194.04799999A130.048 130.048 0 0 1 63.99999999 837.063111V186.936889A130.048 130.048 0 0 1 194.04799999 56.888889h650.126222z" p-id="4538"></path><path d="M777.72799999 577.024a278.755556 278.755556 0 0 1 39.594667 2.844444 14.961778 14.961778 0 0 1 11.150222 10.581334c4.721778 18.602667 17.123556 34.588444 34.417778 44.259555 10.695111 6.371556 23.04 9.728 35.612444 9.614223 7.111111 0 14.279111-1.080889 21.219556-2.958223a6.371556 6.371556 0 0 1 4.096-0.910222 10.126222 10.126222 0 0 1 10.183111 5.688889c8.305778 9.329778 15.758222 19.342222 22.300444 29.809778 6.428444 10.752 11.889778 22.016 16.213334 33.621333a14.904889 14.904889 0 0 1-4.096 14.449778c-14.165333 13.084444-22.186667 31.118222-22.300445 50.005333 0 19.057778 8.476444 37.148444 23.324445 49.891556a13.312 13.312 0 0 1 4.039111 14.449778 196.266667 196.266667 0 0 1-38.513778 63.374222l-4.039111 2.844444a19.512889 19.512889 0 0 1-7.168 1.991111l-3.982222-0.967111a77.368889 77.368889 0 0 0-56.888889 5.802667 64.113778 64.113778 0 0 0-33.393778 43.235555 12.743111 12.743111 0 0 1-11.207111 9.614223c-12.344889 1.934222-24.917333 2.844444-37.489778 2.844444a275.057778 275.057778 0 0 1-39.537778-3.925333 12.743111 12.743111 0 0 1-11.150222-9.557334 70.542222 70.542222 0 0 0-34.474667-44.202666 67.982222 67.982222 0 0 0-35.555555-9.557334c-7.168 0-14.336 0.967111-21.276445 2.844445a6.371556 6.371556 0 0 1-4.096 1.024 16.497778 16.497778 0 0 1-10.126222-4.835556 210.204444 210.204444 0 0 1-22.528-29.752889 207.416889 207.416889 0 0 1-16.213333-33.678222 15.473778 15.473778 0 0 1 4.096-14.392889c14.222222-13.084444 22.186667-31.118222 22.300444-50.005333 0-19.057778-8.476444-37.262222-23.324444-49.891556a13.312 13.312 0 0 1-4.096-14.449777 205.937778 205.937778 0 0 1 38.570666-63.374223 22.983111 22.983111 0 0 1 12.174223-4.835555c0.967111 0 3.072 0.967111 3.982222 0.967111 19.000889 5.404444 39.367111 3.356444 56.888889-5.802667a64.284444 64.284444 0 0 0 33.450666-43.235555 15.303111 15.303111 0 0 1 4.039112-6.712889c1.024-0.910222 1.024-1.934222 1.991111-1.934222a16.782222 16.782222 0 0 1 8.135111-2.844445c11.207111-0.967111 22.300444-1.934222 33.507555-1.934222h0.170667z m0.682667 65.024c-6.599111 0.056889-13.084444 0.796444-19.512889 2.218667a74.581333 74.581333 0 0 1-35.100445 40.277333 89.713778 89.713778 0 0 1-39.367111 9.671111 117.76 117.76 0 0 1-16.042666-1.536 128.796444 128.796444 0 0 0-19.228445 31.288889c12.856889 13.312 19.911111 30.549333 20.081778 48.469333a70.371556 70.371556 0 0 1-20.081778 48.469334c2.446222 5.688889 5.404444 11.093333 8.817778 16.384 3.413333 5.12 7.168 10.069333 11.207111 14.961777a112.071111 112.071111 0 0 1 16.042667-1.592888c13.824-0.113778 27.420444 3.242667 39.310222 9.784888 16.668444 8.817778 29.297778 23.096889 35.384889 40.163556 6.656 0.853333 13.312 1.365333 20.024889 1.479111 6.485333-0.113778 12.856889-0.625778 19.342222-1.479111 6.087111-17.066667 18.659556-31.345778 35.271111-40.277333 12.231111-6.144 25.656889-9.443556 39.367111-9.671111 5.347556 0.113778 10.695111 0.682667 16.042667 1.479111 8.078222-9.386667 14.563556-19.911111 19.228444-31.288889a68.721778 68.721778 0 0 1-20.081778-48.355556c0.113778-17.976889 7.224889-35.214222 20.081778-48.469333a163.384889 163.384889 0 0 0-8.817778-16.384 113.777778 113.777778 0 0 0-11.264-15.701333 130.844444 130.844444 0 0 1-16.042666 1.536 80.554667 80.554667 0 0 1-39.367111-9.784889 74.638222 74.638222 0 0 1-35.271111-40.163556 179.996444 179.996444 0 0 0-20.024889-1.479111z m0.739555 65.024a64.796444 64.796444 0 0 1 65.024 64.967111 65.024 65.024 0 1 1-65.024-64.967111z m0 32.483556a32.426667 32.426667 0 0 0-27.022222 50.574222 32.483556 32.483556 0 1 0 27.022222-50.574222zM490.95111099 276.878222a32.483556 32.483556 0 1 1 56.32 32.540445l-41.870222 72.533333h46.193778a32.483556 32.483556 0 0 1 0 65.024H454.08711099V512h97.507556a32.483556 32.483556 0 0 1 0 65.024H454.08711099v97.507556a32.483556 32.483556 0 0 1-65.024 0v-97.507556H291.55555599A32.540444 32.540444 0 0 1 291.55555599 512h97.507555V446.976H291.55555599a32.483556 32.483556 0 0 1 0-65.024h46.136888L295.93599999 309.475556a32.483556 32.483556 0 1 1 56.32-32.540445l60.643556 105.073778h17.351111l60.700444-105.073778z" p-id="4539"></path></svg>
</template>
<script>
export default {
name: "CostSetup"
}
</script>
<style scoped>
</style>

View File

@ -0,0 +1,13 @@
<template>
<svg t="1725000939626" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="4823" width="200" height="200"><path d="M147.911111 222.833778h142.734222v42.325333c0 30.492444 24.746667 55.296 55.182223 55.296H469.902222a55.296 55.296 0 0 0 55.296-55.296v-42.325333H989.866667a34.133333 34.133333 0 1 0 0-68.266667H525.084444V112.071111A55.239111 55.239111 0 0 0 469.902222 56.888889H345.884444a55.296 55.296 0 0 0-55.239111 55.182222v42.496H147.911111a34.133333 34.133333 0 1 0 0 68.266667zM358.912 125.155556H456.817778v127.032888H358.912V125.155556z m630.897778 335.530666h-142.677334v-42.382222a55.352889 55.352889 0 0 0-55.296-55.296h-124.017777a55.352889 55.352889 0 0 0-55.239111 55.296V460.8H147.911111a34.133333 34.133333 0 0 0 0 68.266667h464.668445v42.382222c0 30.435556 24.803556 55.239111 55.239111 55.239111h124.074666a55.352889 55.352889 0 0 0 55.239111-55.182222v-42.439111H989.866667a34.133333 34.133333 0 1 0 0-68.323556z m-210.944 97.678222H680.96V431.217778h97.962667v127.089778z m210.944 208.440889H525.141333v-42.382222a55.296 55.296 0 0 0-55.239111-55.239111H345.884444a55.352889 55.352889 0 0 0-55.239111 55.182222v42.439111H147.911111a34.133333 34.133333 0 1 0 0 68.266667h142.734222v42.439111c0 30.492444 24.746667 55.296 55.182223 55.296H469.902222a55.352889 55.352889 0 0 0 55.296-55.296v-42.439111H989.866667a34.133333 34.133333 0 1 0 0-68.266667z m-532.935111 97.678223H358.912v-127.032889H456.817778v127.032889z" p-id="4824"></path></svg>
</template>
<script>
export default {
name: "K3Api"
}
</script>
<style scoped>
</style>

View File

@ -26,6 +26,8 @@ export { default as Finish } from './Finish.vue'
export { default as FormXls } from './FormXls.vue' export { default as FormXls } from './FormXls.vue'
export { default as AgentMaintenance } from './AgentMaintenance.vue' export { default as AgentMaintenance } from './AgentMaintenance.vue'
export { default as CostAllocation } from './CostAllocation.vue' export { default as CostAllocation } from './CostAllocation.vue'
export { default as K3Api } from './K3Api.vue'
export { default as CostSetup } from './CostSetup.vue'
export { default as DataSource } from './DataSource.vue' export { default as DataSource } from './DataSource.vue'
export { default as MachineRoom } from './MachineRoom.vue' export { default as MachineRoom } from './MachineRoom.vue'
export { default as CreateFolder } from './CreateFolder.vue' export { default as CreateFolder } from './CreateFolder.vue'

View File

@ -30,6 +30,12 @@
--el-menu-item-height:50px; --el-menu-item-height:50px;
--el-component-size-small:28px; --el-component-size-small:28px;
--el-order-color-1:#E8641B;
--el-order-color-2:#3072FF;
--el-order-color-3:#0DA525;
--el-order-color-4:#FFB103;
--el-order-color-5:#E81B1B;
} }
.el-table{ .el-table{

View File

@ -159,7 +159,7 @@
h2{ h2{
height: 36px; height: 36px;
display: flex; display: flex;
align-items: baseline; align-items: flex-start;
font-size: 24px; font-size: 24px;
position: relative; position: relative;
padding-left: 18px; padding-left: 18px;
@ -167,7 +167,7 @@
font-weight: 500; font-weight: 500;
.origin{ .origin{
position: absolute; position: absolute;
left: 0; left: 4px;
top: 12px; top: 12px;
display: inline-block; display: inline-block;
width: 8px; width: 8px;

View File

@ -170,7 +170,7 @@
</div> </div>
</div> </div>
<div class="btnBox"> <div class="btnBox">
<el-button type="primary" size="default" @click="save" :loading="isSave">确认保存</el-button> <el-button type="primary" :size="size" @click="save" :loading="isSave">确认保存</el-button>
</div> </div>
</el-form> </el-form>
</el-scrollbar> </el-scrollbar>

View File

@ -6,7 +6,8 @@
<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 v-if="item.value == info.business_status">{{item.label}}</span> <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)`}"
v-if="item.value == info.business_status">{{item.label}}</span>
</span> </span>
</span> </span>
</div> </div>

View File

@ -49,7 +49,8 @@
</template> </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 v-if="item.value == scope.row.business_status">{{item.label}}</span> <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)`}"
v-if="item.value == scope.row.business_status">{{item.label}}</span>
</span> </span>
</template> </template>
<template #active_status="scope"> <template #active_status="scope">

View File

@ -7,8 +7,8 @@
<div class="reviewBox"> <div class="reviewBox">
<el-input type="textarea" v-model="opinion" min="4" placeholder="请填写具体原因"></el-input> <el-input type="textarea" v-model="opinion" min="4" placeholder="请填写具体原因"></el-input>
<div class="btnView"> <div class="btnView">
<el-button type="primary" size="default" @click="save(1)" :loading="confirmLoading">审核通过</el-button> <el-button type="primary" :size="size" @click="save(1)" :loading="confirmLoading">审核通过</el-button>
<el-button type="danger" size="default" @click="save(2)" :loading="cancelLoading">审核拒绝</el-button> <el-button type="danger" :size="size" @click="save(2)" :loading="cancelLoading">审核拒绝</el-button>
</div> </div>
</div> </div>
</template> </template>

View File

@ -2,8 +2,8 @@
<el-container class="mainBox mainHeaderNoBorderPadding"> <el-container class="mainBox mainHeaderNoBorderPadding">
<el-header> <el-header>
<div class="left-panel"> <div class="left-panel">
<el-button type="primary" :size="size" icon="el-icon-plus" @click="add">新增工单</el-button> <el-button type="primary" :size="size" icon="el-icon-plus" @click="add">新增维修</el-button>
<scImport ref="scImport" :size="size" title="批量导入维工单" @parentParams="importUpload" @importSuccess="importSuccess"> <scImport ref="scImport" :size="size" title="批量导入维工单" @parentParams="importUpload" @importSuccess="importSuccess">
<template #header> <template #header>
<el-button v-auth="'organizationImport'" type="primary" :size="size" plain @click="importFile">批量导入</el-button> <el-button v-auth="'organizationImport'" type="primary" :size="size" plain @click="importFile">批量导入</el-button>
</template> </template>

View File

@ -9,7 +9,8 @@
<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 v-if="item.value == info.business_status">{{item.label}}</span> <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)`}"
v-if="item.value == info.business_status">{{item.label}}</span>
</span> </span>
</span> </span>
</div> </div>
@ -164,7 +165,7 @@
</div> </div>
</div> </div>
<div class="btnView"> <div class="btnView">
<el-button type="primary" size="default" @click="save" :loading="saveLoading">确认提交</el-button> <el-button type="primary" :size="size" @click="save" :loading="saveLoading">确认提交</el-button>
</div> </div>
</div> </div>
</el-scrollbar> </el-scrollbar>

View File

@ -42,11 +42,11 @@ export default {
seting: defineAsyncComponent(() => import('./setup/computerRoom')), seting: defineAsyncComponent(() => import('./setup/computerRoom')),
pushSettings: defineAsyncComponent(() => import('./setup/computerRoom')), pushSettings: defineAsyncComponent(() => import('./setup/computerRoom')),
password: defineAsyncComponent(() => import('./setup/computerRoom')), password: defineAsyncComponent(() => import('./setup/computerRoom')),
space: defineAsyncComponent(() => import('./setup/computerRoom')),
upToEnterprise: defineAsyncComponent(() => import('./setup/computerRoom')), upToEnterprise: defineAsyncComponent(() => import('./setup/computerRoom')),
bind: defineAsyncComponent(() => import('./setup/computerRoom')), bind: defineAsyncComponent(() => import('./setup/computerRoom')),
mail: defineAsyncComponent(() => import('./setup/mail')), mail: defineAsyncComponent(() => import('./setup/mail')),
interface: defineAsyncComponent(() => import('./setup/interface')), interface: defineAsyncComponent(() => import('./setup/interface')),
cost: defineAsyncComponent(() => import('./setup/cost')),
}, },
data() { data() {
return { return {
@ -80,10 +80,16 @@ export default {
actions:'mailConfigSet' actions:'mailConfigSet'
}, },
{ {
icon: "sc-icon-AgentMaintenance", icon: "sc-icon-K3Api",
title: "K3接口配置", title: "K3接口配置",
component: "interface", component: "interface",
actions:'k3ApiConfigSet' actions:'k3ApiConfigSet'
},
{
icon: "sc-icon-CostSetup",
title: "费用类别配置",
component: "cost",
actions:'costCategoryAdd'
} }
] ]
}, },

View File

@ -0,0 +1,99 @@
<template>
<el-container>
<el-main>
<div class="mailView">
<div class="headerBox ">
<div class="title">费用类别配置</div>
<div class="item">
<span class="name">上架费</span>
<el-input type="text" v-model="cost.name" :size="size" placeholder="上架费"></el-input>
</div>
<div class="item">
<span class="name">服务费</span>
<el-input type="text" v-model="cost.price" :size="size" placeholder="服务费"></el-input>
</div>
<div class="item">
<span class="name">物料厂商费</span>
<el-input type="text" v-model="cost.company_id" :size="size" placeholder="物料厂商费"></el-input>
</div>
<div class="item">
<span class="name">备件费</span>
<el-input type="text" v-model="cost.description" :size="size" placeholder="备件费"></el-input>
</div>
</div>
<div class="btnView">
<el-button type="primary" :size="size" @click="save" :loading="loading">保存配置</el-button>
</div>
</div>
</el-main>
</el-container>
</template>
<script>
export default {
name: "cost",
data(){
return{
size:'small',
loading:false,
cost:{
code:'',
description:'',
price:''
}
}
},
mounted() {
this.getCost();
},
methods:{
async getCost() {
const res = await this.$API.setup.cost.get.post();
if(res.code == 200){
if(res.data && res.data.length>0){
this.cost = res.data[0];
}
}
},
async save() {
this.loading = true;
let params = {
cost:[this.cost]
}
const res = await this.$API.setup.cost.set.post(params);
this.loading = false;
if (res.code == 200) {
this.$message.success('保存成功');
}
}
}
}
</script>
<style scoped lang="scss">
.mailView{
.headerBox{
border-bottom: 1px solid #e8e8e8;
padding-bottom: 5px;
.title{
font-weight: 500;
padding: 10px 0;
}
.item{
margin-bottom: 15px;
.name{
width: 90px;
display: inline-block;
text-align: left;
margin-right: 10px;
}
}
}
.btnView{
padding: 15px 0;
}
::v-deep .el-input{
width: 480px;
}
}
</style>

View File

@ -0,0 +1,262 @@
<template>
<!-- 自定义表格 -->
<el-scrollbar height="100%">
<div class="customTable">
<div class="tableBody" v-if="list.length>0">
<template v-for="(item,inde) in list" :key="inde">
<div class="trTitle">
<div class="name">
<el-checkbox :indeterminate="item.isCheck" v-model="item.checked" @change="menuCheckChange(item)" :size="size">{{item.meta.title}}</el-checkbox>
</div>
<div class="coseBtn" @click="item.show=!item.show">
<div class="coseBtnIcon">
<span v-if="item.show"><el-icon-arrowDown /></span>
<span v-else><el-icon-arrowRight /></span>
</div>
</div>
</div>
<template v-if="item.show">
<div class="tr" v-for="(em,ind) in item.children" :key="ind">
<div class="td module">
<el-checkbox :indeterminate="em.isCheck" v-model="em.checked" @change="moduleCheckChange(item,em)" :size="size">{{em.meta.title}}</el-checkbox>
</div>
<div class="td tdChild">
<div class="nextTd">
<div class="tdName authority">
<div class="boxName" v-for="(li,ind) in em.meta.data_permission" :key="ind">
<el-checkbox v-model="li.checked" :size="size" @change="checkChange(item,em)"><span class="name">{{li.title}}</span></el-checkbox>
</div>
</div>
</div>
</div>
</div>
</template>
</template>
</div>
</div>
</el-scrollbar>
</template>
<script>
export default {
data() {
return {
size: "default",
list:[]
};
},
props:{
data:{
type:Array
}
},
watch:{
data(val){
if(val && val.length>0){
val.forEach(item=>{
item.show = true;
if(item.children){
item.children.forEach(em=>{
if(em.meta.data_permission && em.meta.data_permission.length>0){
let check = em.meta.data_permission.filter((li)=>li.checked).length;
let ed = em.meta.data_permission.length;
em.isCheck = check>0 && check != ed?true:false;
if(ed>0){
em.checked = check>0 && check== ed?true:false;
}
}
})
let check = item.children.filter((em)=>em.checked).length;
let isCheck = item.children.filter((em)=>em.isCheck).length;
let ed = item.children.length;
item.isCheck = (check>0 && check != ed) || (isCheck>0 && check != ed)?true:false;
item.checked = check>0 && check== ed?true:false;
}
})
this.list = JSON.parse(JSON.stringify(val));
}
}
},
computed:{
},
methods:{
menuCheckChange(e){
this.list.forEach(item=>{
if(e.id == item.id){
if(item.children){
item.children.forEach(em=>{
em.checked = e.checked;
if(em.meta.data_permission && em.meta.data_permission.length>0){
em.meta.data_permission.forEach((li)=>{
li.checked = e.checked;
})
}
if(em.checked){
em.isCheck = false;
}
})
}
if(item.checked){
item.isCheck = false;
}
}
})
},
moduleCheckChange(pre,e){
this.list.forEach(item=>{
if(pre.id == item.id){
if(item.children){
item.children.forEach(em=>{
if(em.id == e.id){
if(em.meta.data_permission && em.meta.data_permission.length>0){
em.meta.data_permission.forEach((li)=>{
li.checked = e.checked;
})
}
if(e.checked){
e.isCheck = false;
}
}
})
let check = item.children.filter((em)=>em.checked).length;
let isCheck = item.children.filter((em)=>em.isCheck).length;
let ed = item.children.length;
item.checked = check>0 && check == ed?true:false;
item.isCheck = (check>0 || isCheck>0) && ed!=check?true:false;
}
}
})
},
checkChange(max,pre){
this.list.forEach(item=>{
if(item.id == max.id){
if(item.children){
item.children.forEach((em)=>{
if(pre.id == em.id){
let check = em.meta.data_permission.filter((em)=>em.checked).length;
let ed = em.meta.data_permission.length;
em.checked = check>0 && check == ed?true:false;
em.isCheck = check>0 && check != ed?true:false;
}
})
}
let check = item.children.filter((em)=>em.checked).length;
let isCheck = item.children.filter((em)=>em.isCheck).length;
let ed = item.children.length;
item.checked = check>0 && check == ed?true:false;
item.isCheck = (check>0 || isCheck>0) && ed!=check?true:false;
}
})
},
}
};
</script>
<style lang="scss" scoped>
.module{
flex-basis: 120px;
display: flex;
align-items: center;
justify-content: flex-start;
}
.check{
flex-basis: 60px;
display: flex;
align-items: center;
justify-content: center;
}
.menu{
flex:1;
}
.authority{
flex-basis: 80px;
text-align: center;
}
.customTable{
border: 1px solid var(--el-border-color-light);
border-bottom: 0;
}
.tableBodyNull{
border-top:1px solid var(--el-border-color-light);
}
.tableBody .trTitle{
background: #f5f7fa;
display: flex;
justify-content: space-between;
align-items: center;
height: 36px;
padding: 0 10px;
border-bottom: 1px solid var(--el-border-color-light);
.name{
flex: 1;
}
.coseBtn{
flex-basis: 40px;
display: flex;
align-items: center;
justify-content: center;
cursor: pointer;
.coseBtnIcon{
width: 14px;
color: var(--el-color-primary);
}
}
}
.tableBody .tr{
display: flex;
align-items: stretch;
justify-content: space-between;
border-bottom:1px solid var(--el-border-color-light);
.td{
padding: 0 10px;
border-left: 1px solid var(--el-border-color-light);
.nextTd{
border-bottom:1px solid var(--el-border-color-light);
flex: 1;
}
.nextTd:last-child{
border-bottom: 0;
}
}
.td:first-child{
border-left: 0;
}
.tdChild{
flex: 1;
padding: 0;
border-left: 1px solid var(--el-border-color-light);
.tdName:first-child{
border-left: 0;
}
.tdName{
border-left: 1px solid var(--el-border-color-light);
padding: 0 10px;
width: 100%;
display: flex;
justify-content: flex-start;
align-items: center;
flex-wrap: wrap;
.boxName{
display: flex;
align-items: center;
margin-right: 20px;
width: 120px;
.name{
width: 100px;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
display: block;
text-align: left;
}
}
}
}
}
.tableBody .tr:last-child{
//border-bottom: 0;
}
</style>

View File

@ -183,7 +183,7 @@ export default {
border-top:1px solid var(--el-border-color-light); border-top:1px solid var(--el-border-color-light);
} }
.tableBody .trTitle{ .tableBody .trTitle{
background: var(--el-bg-color-overlay); background: #f5f7fa;
display: flex; display: flex;
justify-content: space-between; justify-content: space-between;
align-items: center; align-items: center;

View File

@ -45,7 +45,7 @@
<dataTree ref="dataTree" v-loading="dataTreeLoading" element-loading-text="加载中..." :data="menu.list"/> <dataTree ref="dataTree" v-loading="dataTreeLoading" element-loading-text="加载中..." :data="menu.list"/>
</el-tab-pane> </el-tab-pane>
<el-tab-pane label="数据权限"> <el-tab-pane label="数据权限">
<dataPermissions ref="dataPermissions" v-loading="dataPermissionsLoading" element-loading-text="加载中..." :data="dataPermissions.list"/>
</el-tab-pane> </el-tab-pane>
<el-tab-pane label="角色成员"> <el-tab-pane label="角色成员">
<members ref="members" v-loading="roleUserLoading" element-loading-text="加载中..." :data="roleUser.list" /> <members ref="members" v-loading="roleUserLoading" element-loading-text="加载中..." :data="roleUser.list" />
@ -105,6 +105,7 @@
import saveDialog from './save'; import saveDialog from './save';
import permissionDialog from './permission'; import permissionDialog from './permission';
import dataTree from "./dataTree"; import dataTree from "./dataTree";
import dataPermissions from "./dataPermissions";
import members from "./members"; import members from "./members";
import treeUser from "./tree" import treeUser from "./tree"
@ -114,6 +115,7 @@
saveDialog, saveDialog,
permissionDialog, permissionDialog,
dataTree, dataTree,
dataPermissions,
members, members,
treeUser treeUser
}, },
@ -147,6 +149,10 @@
menu: { menu: {
list: [], list: [],
}, },
dataPermissionsLoading:false,
dataPermissions:{
list:[],
},
roleUserLoading:false, roleUserLoading:false,
roleUser:{ roleUser:{
list:[] list:[]