Browse Source

角色,全宗,部门接口调试

master
xuhuajiao 2 years ago
parent
commit
cf7544b232
  1. 18
      src/api/system/dept.js
  2. 7
      src/api/system/fonds.js
  3. 1
      src/assets/styles/yxk-admin.scss
  4. 2
      src/components/Crud/crud.js
  5. 181
      src/views/system/dept/index.vue
  6. 2
      src/views/system/groupManage/index.vue
  7. 225
      src/views/system/role/index.vue

18
src/api/system/dept.js

@ -1,5 +1,13 @@
import request from '@/utils/request'
export function getDeptsList(params) {
return request({
url: 'api/depts/initDeptsList',
method: 'get',
params
})
}
export function getDepts(params) {
return request({
url: 'api/depts/initDeptsList',
@ -19,7 +27,7 @@ export function getDeptSuperior(ids) {
export function add(data) {
return request({
url: 'api/dept',
url: 'api/depts/editDepts',
method: 'post',
data
})
@ -27,8 +35,8 @@ export function add(data) {
export function del(ids) {
return request({
url: 'api/depts/editDepts',
method: 'delete',
url: 'api/depts/delDepts',
method: 'post',
data: ids
})
}
@ -36,9 +44,9 @@ export function del(ids) {
export function edit(data) {
return request({
url: 'api/depts/editDepts',
method: 'put',
method: 'post',
data
})
}
export default { add, edit, del, getDepts, getDeptSuperior }
export default { add, edit, del, getDepts, getDeptSuperior, getDeptsList }

7
src/api/system/fonds.js

@ -48,4 +48,11 @@ export function FetchDownload(params) {
})
}
export function FetchFondsAll() {
return request({
url: '/api/fonds/getFondsAll',
method: 'get'
})
}
export default { add, edit, del, FetchInitFondsList, FetchUpdateFondsStatus, FetchDownload }

1
src/assets/styles/yxk-admin.scss

@ -427,6 +427,7 @@
}
.el-table__body tr.el-table__row:hover>td.el-table__cell,
.el-table__body tr.el-table__row:focus>td.el-table__cell,
.el-table__body tr.current-row>td.el-table__cell,
.el-table__body tr.current-row:hover>td.el-table__cell,
.el-table__body tr.current-row:focus>td.el-table__cell{
@include elTable-hover-style;

2
src/components/Crud/crud.js

@ -32,7 +32,7 @@ function CRUD(options) {
// 重置表单
defaultForm: () => {},
// 排序规则,默认 id 降序, 支持多字段排序 ['id,desc', 'createTime,asc']
sort: ['id,desc'],
sort: ['update_time,desc'],
// 等待时间
time: 50,
// CRUD Method

181
src/views/system/dept/index.vue

@ -4,13 +4,10 @@
<!--侧边部门数据-->
<div class="elect-cont-left">
<div class="head-container">
<el-input v-model="deptName" clearable size="small" placeholder="输入部门名称搜索" prefix-icon="el-icon-search" class="filter-item" @input="getDeptDatas" />
<el-input v-model="deptName" clearable size="small" placeholder="输入全宗名称搜索" prefix-icon="el-icon-search" class="filter-item" @input="getDeptDatas" />
</div>
<!-- <div class="container-left">
<span class="right-top-line" />
<span class="left-bottom-line" />
<el-tree :data="deptDatas" :load="getDeptDatas" :props="defaultProps" :expand-on-click-node="false" lazy @node-click="handleNodeClick" />
</div> -->
<el-tree ref="tree" v-loading="crud.loading" :data="fondsDatas" :props="defaultProps" :expand-on-click-node="false" :default-expanded-keys="defaultExpandedKeys" node-key="id" highlight-current @node-click="handleNodeClick" />
</div>
<!--用户数据-->
<div class="elect-cont-right">
@ -32,42 +29,53 @@
<el-dialog append-to-body :close-on-click-modal="false" :before-close="crud.cancelCU" :visible.sync="crud.status.cu > 0" :title="crud.status.title">
<div class="setting-dialog">
<el-form ref="form" inline :model="form" :rules="rules" size="small" label-width="90px">
<el-form-item label="所属全宗" prop="dept">
<treeselect v-model="form.dept" :options="depts" placeholder="选择全宗" />
<el-form-item label="所属全宗" prop="fondsId">
<el-select v-model="form.fondsId" placeholder="请选择" style="width: 225px;">
<el-option
v-for="(item,index) in fondsOptions"
:key="index"
:label="item.fondsName"
:value="item.id"
/>
</el-select>
</el-form-item>
<el-form-item label="部门编码" prop="name">
<el-input v-model="form.name" />
<el-form-item label="部门编码" prop="deptsCode">
<el-input v-model="form.deptsCode" />
</el-form-item>
<el-form-item label="部门名称" prop="name">
<el-input v-model="form.name" />
<el-form-item label="部门名称" prop="deptsName">
<el-input v-model="form.deptsName" />
</el-form-item>
<el-form-item label="部门简称" prop="name">
<el-input v-model="form.name" />
<el-form-item label="部门简称" prop="deptsAbbr">
<el-input v-model="form.deptsAbbr" />
</el-form-item>
<el-form-item label="顶级部门">
<el-form-item label="顶级部门" prop="isTop">
<el-radio-group v-model="form.isTop">
<el-radio label="1"></el-radio>
<el-radio label="0"></el-radio>
</el-radio-group>
</el-form-item>
<el-form-item label="排序" prop="deptSort">
<el-form-item label="排序" prop="deptsOrders">
<el-input-number
v-model.number="form.deptSort"
v-model.number="form.deptsOrders"
:min="0"
:max="999"
controls-position="right"
/>
</el-form-item>
<el-form-item v-if="form.isTop === '0'" label="上级部门" prop="pid">
<el-form-item v-if="form.isTop === '0'" label="上级部门" prop="deptsParentsId">
<treeselect
v-model="form.pid"
v-model="form.deptsParentsId"
:load-options="loadDepts"
:options="depts"
placeholder="选择上级类目"
/>
</el-form-item>
<el-form-item label="状态" prop="enabled" :style="form.isTop === '0'? 'margin-left:0': 'margin:0 0 0 360px'">
<el-radio v-for="item in dict.dept_status" :key="item.id" v-model="form.enabled" :label="item.value">{{ item.label }}</el-radio>
<el-form-item label="状态" prop="deptsStatus" :style="form.isTop === '0'? 'margin-left:0': 'margin:0 0 0 360px'">
<!-- <el-radio v-for="item in dict.dept_status" :key="item.id" v-model="form.deptsStatus" :label="item.value">{{ item.label }}</el-radio> -->
<el-radio-group v-model="form.deptsStatus">
<el-radio :label="1">启用</el-radio>
<el-radio :label="0">停用</el-radio>
</el-radio-group>
</el-form-item>
</el-form>
<div slot="footer" class="dialog-footer">
@ -93,20 +101,23 @@
@selection-change="crud.selectionChangeHandler"
>
<el-table-column :selectable="checkboxT" type="selection" align="center" width="55" />
<el-table-column label="部门名称" prop="name" />
<el-table-column label="部门编码" prop="name" />
<el-table-column label="部门人数" prop="name" />
<el-table-column label="排序" prop="deptSort" />
<el-table-column label="所属全宗" prop="deptSort" />
<el-table-column label="状态" align="center" prop="enabled">
<template slot-scope="scope">
<el-table-column label="部门名称" prop="deptsName" />
<el-table-column label="部门编码" prop="deptsCode" />
<el-table-column label="部门人数" prop="deptsTotalPeoNum" />
<el-table-column label="排序" prop="deptsOrders" />
<el-table-column label="所属全宗" prop="fondsName" />
<el-table-column label="状态" align="center" prop="deptsStatus">
<!-- <template slot-scope="scope">
<el-switch
v-model="scope.row.enabled"
v-model="scope.row.deptsStatus"
:disabled="scope.row.id === 1"
active-color="#409EFF"
inactive-color="#F56C6C"
@change="changeEnabled(scope.row, scope.row.enabled,)"
@change="changeEnabled(scope.row, scope.row.deptsStatus,)"
/>
</template> -->
<template slot-scope="scope">
<el-switch v-model="scope.row.deptsStatus" active-color="#409EFF" inactive-color="#F56C6C" :active-value="1" :inactive-value="0" @change="changeStatus(scope.row, scope.row.deptsStatus)" />
</template>
</el-table-column>
<el-table-column prop="createTime" label="创建日期">
@ -114,16 +125,6 @@
<div>{{ scope.row.createTime | parseTime }}</div>
</template>
</el-table-column>
<!-- <el-table-column v-if="checkPer(['admin','dept:edit','dept:del'])" label="操作" width="130px" align="center" fixed="right">
<template slot-scope="scope">
<udOperation
:data="scope.row"
:permission="permission"
:disabled-dle="scope.row.id === 1"
msg="确定删除吗,如果存在下级节点则一并删除,此操作不能撤销!"
/>
</template>
</el-table-column> -->
</el-table>
<!--分页组件-->
<pagination v-if="crud.data.length!==0" />
@ -135,6 +136,7 @@
<script>
import crudDept from '@/api/system/dept'
import { FetchFondsAll } from '@/api/system/fonds'
import Treeselect from '@riophae/vue-treeselect'
import '@riophae/vue-treeselect/dist/vue-treeselect.css'
import { LOAD_CHILDREN_OPTIONS } from '@riophae/vue-treeselect'
@ -144,13 +146,14 @@ import crudOperation from '@crud/CRUD.operation'
// import udOperation from '@crud/UD.operation'
import DateRangePicker from '@/components/DateRangePicker'
import pagination from '@crud/Pagination'
import Vue from 'vue'
const defaultForm = { id: null, name: null, isTop: '1', subCount: 0, pid: null, deptSort: 999, enabled: 'true' }
const defaultForm = { id: null, fondsId: null, deptsCode: '', deptsName: '', deptsAbbr: '', isTop: '1', deptsParentsId: null, deptsOrders: 999, deptsStatus: null }
export default {
name: 'Dept',
components: { Treeselect, crudOperation, rrOperation, DateRangePicker, pagination },
cruds() {
return CRUD({ title: '部门', url: 'api/dept', crudMethod: { ...crudDept }})
return CRUD({ title: '部门', url: 'api/depts/initDeptsList', crudMethod: { ...crudDept }})
},
mixins: [presenter(), header(), form(defaultForm), crud()],
//
@ -159,16 +162,37 @@ export default {
return {
depts: [],
rules: {
name: [
{ required: true, message: '请输入名称', trigger: 'blur' }
fondsId: [
{ required: true, message: '请选择所属全宗', trigger: 'change' }
],
deptsName: [
{ required: true, message: '部门名称不可为空', trigger: 'blur' }
],
deptsCode: [
{ required: true, message: '部门编码不可为空', trigger: 'blur' }
],
deptsAbbr: [
{ required: true, message: '部门简称不可为空', trigger: 'blur' }
],
isTop: [
{ required: true, message: '是否为顶级部门', trigger: 'change' }
],
deptSort: [
deptsParentsId: [
{ required: true, message: '请选择上级部门', trigger: 'change' }
],
deptsOrders: [
{ required: true, message: '请输入序号', trigger: 'blur', type: 'number' }
],
deptsStatus: [
{ required: true, message: '请选择状态', trigger: 'change' }
]
},
deptName: '', deptDatas: [], jobs: [], level: 3, roles: [],
jobDatas: [], roleDatas: [], // 使
defaultProps: { children: 'children', label: 'name', isLeaf: 'leaf' },
fondsDatas: [],
defaultExpandedKeys: [],
fondsOptions: [],
defaultProps: { children: 'children', label: 'fondsName' },
permission: {
add: ['admin', 'dept:add'],
edit: ['admin', 'dept:edit'],
@ -180,6 +204,9 @@ export default {
]
}
},
mounted() {
this.getFondsDatas()
},
methods: {
getDeptDatas(tree, treeNode, resolve) {
const params = { pid: tree.id }
@ -189,19 +216,51 @@ export default {
})
}, 100)
},
getFondsDatas() {
const parent = {}
parent.id = 0
parent.fondsName = '全宗选择'
FetchFondsAll().then(res => {
parent.children = res
this.fondsDatas.push(parent)
this.fondsOptions = res
this.$nextTick(() => {
Vue.set(this.defaultExpandedKeys, 0, this.fondsDatas[0].children[0].id)
this.$refs.tree.setCurrentKey(this.fondsDatas[0].children[0].id)
})
})
},
handleNodeClick(val) {
if (val) {
console.log(val)
const params = {
fondsName: val.fondsName,
fondsNo: val.fondsNo
}
crudDept.getDeptsList(params).then(res => {
console.log(res)
})
}
},
//
[CRUD.HOOK.afterToCU](crud, form) {
if (form.pid !== null) {
form.isTop = '0'
} else if (form.id !== null) {
form.isTop = '1'
}
form.enabled = `${form.enabled}`
if (form.id != null) {
this.getSupDepts(form.id)
} else {
this.getDepts()
}
// if (form.isTop === '1') {
// form.deptsParentsId = 0
// } else {
// form.deptsParentsId = ''
// }
// console.log(form)
// if (form.pid !== null) {
// form.isTop = '0'
// } else if (form.id !== null) {
// form.isTop = '1'
// }
// form.enabled = `${form.enabled}`
// if (form.id != null) {
// this.getSupDepts(form.id)
// } else {
// this.getDepts()
// }
},
getSupDepts(id) {
crudDept.getDeptSuperior(id).then(res => {
@ -256,13 +315,15 @@ export default {
return false
}
if (this.form.isTop === '1') {
this.form.pid = null
this.form.deptsParentsId = null
}
delete this.form.isTop
console.log(form)
return true
},
//
changeEnabled(data, val) {
this.$confirm('此操作将禁用 / 启用部门 “' + data.name + '”' + '<span>你是否还要继续?</span>', '提示', {
changeStatus(data, val) {
this.$confirm('此操作将禁用 / 启用部门 “' + data.deptsName + '”' + '<span>你是否还要继续?</span>', '提示', {
confirmButtonText: '继续',
cancelButtonText: '取消',
type: 'warning',

2
src/views/system/groupManage/index.vue

@ -131,8 +131,6 @@
<script>
import crudfonds from '@/api/system/fonds'
// getMenusTree
// import { getChild } from '@/api/system/menu' FetchCategoryMenu
import { FetchCategoryMenuChildren } from '@/api/system/category'
import CRUD, { presenter, header, form, crud } from '@crud/crud'
import rrOperation from '@crud/RR.operation'

225
src/views/system/role/index.vue

@ -87,12 +87,13 @@
<el-button
v-permission="['admin','roles:edit']"
:disabled="!showButton"
:loading="menuLoading"
:loading="treeLoading"
size="mini"
@click="saveMenu"
>保存</el-button>
</div>
<el-tree
v-show="roleTabIndex == 0"
ref="menu"
lazy
:data="menus"
@ -105,6 +106,26 @@
node-key="id"
@check="menuChange"
/>
<el-tree
v-show="roleTabIndex == 1"
ref="fonds"
lazy
:data="fondDatas"
:default-checked-keys="fondIds"
:load="getFondsDatas"
:props="defaultFondsProps"
check-strictly
accordion
show-checkbox
node-key="id"
@check="fondsChange"
>
<template slot-scope="{ node }">
<el-tooltip :content="node.label" placement="top-end" effect="dark">
<span>{{ node.label }}</span>
</el-tooltip>
</template>
</el-tree>
</div>
</div>
</div>
@ -113,7 +134,7 @@
<script>
import crudRoles from '@/api/system/role'
// import { getDepts, getDeptSuperior } from '@/api/system/dept'
import { FetchFondsAll } from '@/api/system/fonds'
import { getMenusTree, getChild } from '@/api/system/menu'
import CRUD, { presenter, header, form, crud } from '@crud/crud'
import rrOperation from '@crud/RR.operation'
@ -124,7 +145,6 @@ import { exportFile } from '@/utils/index'
import qs from 'qs'
import { mapGetters } from 'vuex'
// depts: [], level: 3
const defaultForm = { id: null, name: null, description: null, dataScope: null }
export default {
name: 'Role',
@ -143,9 +163,11 @@ export default {
data() {
return {
defaultProps: { children: 'children', label: 'label', isLeaf: 'leaf' },
defaultFondsProps: { children: 'children', label: 'fondsName', isLeaf: 'leaf' },
// dateScopes: ['', '', ''], level: 3,
currentId: 0, menuLoading: false, showButton: false,
currentId: 0, treeLoading: false, showButton: false,
menus: [], menuIds: [],
fondDatas: [], fondIds: [],
// depts: [], deptDatas: [], // 使
permission: {
add: ['admin', 'roles:add'],
@ -161,7 +183,9 @@ export default {
]
},
roleTabIndex: 0,
blurryTime: null
blurryTime: null,
fondsAllData: [],
getFondsChecked: []
}
},
computed: {
@ -170,9 +194,19 @@ export default {
])
},
created() {
// crudRoles.getLevel().then(data => {
// this.level = data.level
// })
},
mounted() {
FetchFondsAll().then(res => {
const resArr = []
res.forEach(item => {
resArr.push({
fondsName: item.fondsName,
id: item.id,
leaf: true
})
})
this.fondsAllData = resArr
})
},
methods: {
changeActiveTab(index) {
@ -185,6 +219,13 @@ export default {
})
}, 100)
},
getFondsDatas(node, resolve) {
if (node.level === 0) {
return resolve([{ fondsName: '全宗选择', id: 0, isChecked: false }])
}
if (node.level > 1) return resolve([])
resolve(this.fondsAllData)
},
[CRUD.HOOK.beforeRefresh]() {
if (this.blurryTime) {
this.crud.query.startTime = this.blurryTime[0]
@ -193,59 +234,46 @@ export default {
},
[CRUD.HOOK.afterRefresh]() {
this.$refs.menu.setCheckedKeys([])
this.$refs.fonds.setCheckedKeys([])
},
//
[CRUD.HOOK.beforeToAdd](crud, form) {
// this.deptDatas = []
form.menus = null
form.fondDatas = null
},
//
[CRUD.HOOK.beforeToEdit](crud, form) {
// this.deptDatas = []
// if (form.dataScope === '') {
// this.getSupDepts(form.depts)
// }
// const _this = this
// form.depts.forEach(function(dept) {
// _this.deptDatas.push(dept.id)
// })
//
form.menus = null
form.fondDatas = null
},
//
[CRUD.HOOK.afterValidateCU](crud) {
// if (crud.form.dataScope === '' && this.deptDatas.length === 0) {
// this.$message({
// message: '',
// type: 'warning'
// })
// return false
// } else if (crud.form.dataScope === '') {
// const depts = []
// this.deptDatas.forEach(function(data) {
// const dept = { id: data }
// depts.push(dept)
// })
// crud.form.depts = depts
// } else {
// crud.form.depts = []
// }
// return true
},
//
handleCurrentChange(val) {
console.log(val)
if (val) {
const _this = this
//
this.$refs.menu.setCheckedKeys([])
this.$refs.fonds.setCheckedKeys([])
// id
this.currentId = val.id
// key
this.menuIds = []
this.fondIds = []
val.menus.forEach(function(data) {
_this.menuIds.push(data.id)
})
if (val.fonds) {
if (this.fondsAllData.length === val.fonds.length) {
_this.fondIds.push(0)
}
val.fonds.forEach(function(data) {
_this.fondIds.push(data.id)
})
}
this.showButton = true
}
},
@ -290,23 +318,71 @@ export default {
this.$refs.menu.setCheckedKeys(this.menuIds)
})
},
fondsChange(fonds) {
if (fonds.id === 0) {
fonds.isChecked = !fonds.isChecked
this.fondIds.push(fonds.id)
this.fondsAllData.forEach(childIds => {
if (fonds.isChecked) {
const index = this.fondIds.indexOf(childIds.id)
if (index !== -1) {
this.fondIds.splice(index, 1)
}
this.fondIds.push(childIds.id)
} else {
this.fondIds = []
}
})
} else {
if (this.fondIds.indexOf(fonds.id) !== -1) {
const index = this.fondIds.indexOf(fonds.id)
if (index !== -1) {
this.fondIds.splice(index, 1)
}
} else {
const index = this.fondIds.indexOf(fonds.id)
if (index === -1) {
this.fondIds.push(fonds.id)
}
}
}
this.$refs.fonds.setCheckedKeys(this.fondIds)
},
//
saveMenu() {
this.menuLoading = true
const role = { id: this.currentId, menus: [] }
// key
this.menuIds.forEach(function(id) {
const menu = { id: id }
role.menus.push(menu)
})
crudRoles.editMenu(role).then(() => {
this.crud.notify('保存成功', CRUD.NOTIFICATION_TYPE.SUCCESS)
this.menuLoading = false
this.update()
}).catch(err => {
this.menuLoading = false
console.log(err.response.data.message)
})
this.treeLoading = true
if (this.roleTabIndex === 0) {
const role = { id: this.currentId, menus: [] }
// key
this.menuIds.forEach(function(id) {
const menu = { id: id }
role.menus.push(menu)
})
crudRoles.editMenu(role).then(() => {
this.crud.notify('保存成功', CRUD.NOTIFICATION_TYPE.SUCCESS)
this.treeLoading = false
this.update()
}).catch(err => {
this.treeLoading = false
console.log(err.response.data.message)
})
} else {
const params = { id: this.currentId, fonds: [] }
// key
this.fondIds.forEach(function(id, index) {
if (id !== 0) {
const fondsArray = { id: id }
params.fonds.push(fondsArray)
}
})
crudRoles.editFonds(params).then(() => {
this.crud.notify('保存成功', CRUD.NOTIFICATION_TYPE.SUCCESS)
this.treeLoading = false
}).catch(err => {
console.log(err.response.data.message)
this.treeLoading = false
})
}
},
//
update() {
@ -320,50 +396,17 @@ export default {
}
})
}
//
// getDepts() {
// getDepts({ enabled: true }).then(res => {
// this.depts = res.content.map(function(obj) {
// if (obj.hasChildren) {
// obj.children = null
// }
// return obj
// })
// })
// },
// getSupDepts(depts) {
// const ids = []
// depts.forEach(dept => {
// ids.push(dept.id)
// })
// getDeptSuperior(ids).then(res => {
// const date = res.content
// this.buildDepts(date)
// this.depts = date
// })
// },
// buildDepts(depts) {
// depts.forEach(data => {
// if (data.children) {
// this.buildDepts(data.children)
// }
// if (data.hasChildren && !data.children) {
// data.children = null
// }
// })
// }
//
// changeScope() {
// if (this.form.dataScope === '') {
// this.getDepts()
// }
// }
// checkboxT(row) {
// return row.level >= this.level
// }
}
}
</script>
<style lang="scss" scoped>
::v-deep .el-tree .el-tree-node__children .el-tooltip{
width: 150px;
font-size: 14px;
color: #545b65;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
</style>
Loading…
Cancel
Save