Commit 12e1aa86 authored by WangXu's avatar WangXu

用户选择组件 缺数据绑定

parent 3aa0f9c9
...@@ -20,7 +20,8 @@ const api = { ...@@ -20,7 +20,8 @@ const api = {
getTempletById: '/task/work-template/queryTemplateByTemplateId', getTempletById: '/task/work-template/queryTemplateByTemplateId',
copyTemplate: '/task/work-template/templateCopy', copyTemplate: '/task/work-template/templateCopy',
moveTemplate: '/task/work-template/templateMove', moveTemplate: '/task/work-template/templateMove',
roleTree: 'http://localhost:8080/roleTree' roleTree: 'http://localhost:8080/roleTree',
userTree: 'http://localhost:8080/userTree',
} }
export default api export default api
...@@ -187,3 +188,11 @@ export function roleTree(params) { ...@@ -187,3 +188,11 @@ export function roleTree(params) {
params: params params: params
}) })
} }
export function userTree(params) {
const url = api.userTree
return axios({
url,
method: 'get',
params: params
})
}
...@@ -4,7 +4,6 @@ import { builder } from '../util'; ...@@ -4,7 +4,6 @@ import { builder } from '../util';
const userTree = () => { const userTree = () => {
return builder( return builder(
{ {
'data': {
'deptId': 1042237414280511489, 'deptId': 1042237414280511489,
'deptName': '天津美腾科技有限公司', 'deptName': '天津美腾科技有限公司',
'pid': null, 'pid': null,
...@@ -2003,12 +2002,10 @@ const userTree = () => { ...@@ -2003,12 +2002,10 @@ const userTree = () => {
} }
] ]
} }
}
); );
}; };
const roleTree = () => { const roleTree = () => {
console.log('roleTree')
return builder([ return builder([
{ {
'id': '1128488217616879618', 'id': '1128488217616879618',
......
...@@ -8,6 +8,7 @@ ...@@ -8,6 +8,7 @@
<div><strong>选择</strong></div> <div><strong>选择</strong></div>
<a-input-search style="margin-bottom: 8px" placeholder="搜索" @change="onChange"/> <a-input-search style="margin-bottom: 8px" placeholder="搜索" @change="onChange"/>
<a-tree <a-tree
ref="roleTree"
@expand="onExpand" @expand="onExpand"
:expandedKeys="expandedKeys" :expandedKeys="expandedKeys"
:autoExpandParent="autoExpandParent" :autoExpandParent="autoExpandParent"
...@@ -15,6 +16,7 @@ ...@@ -15,6 +16,7 @@
:checkable="true" :checkable="true"
:checkStrictly="true" :checkStrictly="true"
v-model="selectedList" v-model="selectedList"
@check="handleCheck"
> >
<template slot="title" slot-scope="{title}"> <template slot="title" slot-scope="{title}">
<span v-if="title.indexOf(searchValue) > -1"> <span v-if="title.indexOf(searchValue) > -1">
...@@ -31,14 +33,14 @@ ...@@ -31,14 +33,14 @@
<a-col class="content right" :span="12"> <a-col class="content right" :span="12">
<div class="ant-card-bordered"> <div class="ant-card-bordered">
<div><strong>已选</strong></div> <div><strong>已选</strong></div>
<template v-for="(role, index) in selectedList.checked"> <template v-for="(role, index) in selectedListForTags">
<a-tooltip v-if="role.name.length > 20" :key="role.id" :title="role.name"> <a-tooltip v-if="role.title.length > 20" :key="role.id" :title="role.title">
<a-tag class="role" :key="role.id" :closable="true" :afterClose="() => handleClose(role)"> <a-tag class="role" :key="role.id" :closable="true" :afterClose="() => handleClose(role)">
{{`${role.name.slice(0, 20)}...`}} {{`${role.title.slice(0, 20)}...`}}
</a-tag> </a-tag>
</a-tooltip> </a-tooltip>
<a-tag class="role" v-else :key="role.id" :closable="true" :afterClose="() => handleClose(role)"> <a-tag class="role" v-else :key="role.id" :closable="true" :afterClose="() => handleClose(role)">
{{role.name}} {{role.title}}
</a-tag> </a-tag>
</template> </template>
<div v-if="!hasSelectedData"> <div v-if="!hasSelectedData">
...@@ -57,6 +59,7 @@ ...@@ -57,6 +59,7 @@
<script> <script>
import { Ellipsis } from '@/components' import { Ellipsis } from '@/components'
import ACol from 'ant-design-vue/es/grid/Col'; import ACol from 'ant-design-vue/es/grid/Col';
import roleSelectTree from "@/views/taskTemplate/taskDesign/taskFlow/component/role-select-tree";
const getParentKey = (key, tree) => { const getParentKey = (key, tree) => {
let parentKey let parentKey
...@@ -72,6 +75,19 @@ ...@@ -72,6 +75,19 @@
} }
return parentKey return parentKey
} }
const dataList = []
const generateList = (data) => {
for (let i = 0; i < data.length; i++) {
const node = data[i]
const key = node.key
dataList.push({ key, title: key })
if (node.children) {
generateList(node.children, node.key)
}
}
}
export default { export default {
name: 'RoleSelectTree', name: 'RoleSelectTree',
components: { components: {
...@@ -84,19 +100,20 @@ ...@@ -84,19 +100,20 @@
expandedKeys: [], expandedKeys: [],
searchValue: '', searchValue: '',
autoExpandParent: true, autoExpandParent: true,
selectedList: {} selectedList: {},
selectedListForTags: []
} }
}, },
computed: { computed: {
hasSelectedData() { hasSelectedData() {
const flag = this.selectedList.checked && this.selectedList.checked.length > 0 const flag = this.selectedListForTags && this.selectedListForTags.length > 0
return flag return flag
} }
}, },
methods: { methods: {
handleClose(removedTag) { handleClose(removedTag) {
const selectedList = this.selectedList && this.selectedList.checked const selectedList = this.selectedList && this.selectedList.checked
const tags = selectedList.filter(tag => tag !== removedTag) const tags = selectedList.filter(tag => tag !== removedTag.key)
console.log(tags) console.log(tags)
this.selectedList = Object.assign({}, this.selectedList, { this.selectedList = Object.assign({}, this.selectedList, {
checked: tags checked: tags
...@@ -123,7 +140,28 @@ ...@@ -123,7 +140,28 @@
autoExpandParent: true, autoExpandParent: true,
}) })
}, },
handleCheck(checkedKeys, e) {
console.log('handleCheck', this.$refs.roleTree)
// const checked
const hasKey = this.selectedListForTags.some(item => {
return item.key === e.node.eventKey
})
// 取消选中
if (!e.checked && hasKey) {
this.selectedListForTags = this.selectedListForTags.filter(item => {
return item.key !== e.node.eventKey
})
}
// 选中
if (e.checked && !hasKey) {
this.selectedListForTags.push(e.node.dataRef)
}
}
}, },
mounted(){
console.log('roleTree', this.$refs.roleTree)
generateList(this.gData)
}
} }
</script> </script>
......
<template> <template>
<div> <div>
<mt-show-input v-model="mtShowInputText"></mt-show-input> <mt-show-input v-model="mtShowInputText"></mt-show-input>
<role-select-tree :gData="roleTree"></role-select-tree> <!--<role-select-tree :gData="roleTree"></role-select-tree>-->
<!--<user-select-tree></user-select-tree>--> <!--<user-select-tree :gData="userTree" v-if="userTree.length>0"></user-select-tree>-->
<div id="user-select-tree">
<a-button type="primary" @click="showModal">Open Modal</a-button>
<a-modal
v-model="visible"
:width="700"
style="top: 20px;"
@ok="handleOk"
>
<div class="title" slot="title">
<span>选择人员<span style="color: #00000073">(可多选)</span></span>
</div>
<user-select-tree :selectedKeys="[1042237480110104577, 1042237480391122946]"></user-select-tree>
</a-modal>
</div>
</div> </div>
</template> </template>
<script> <script>
import mtShowInput from "@comp/mt-show-input"; import mtShowInput from '@comp/mt-show-input';
import roleSelectTree from "@/views/taskTemplate/taskDesign/taskFlow/component/role-select-tree"; import roleSelectTree from "@/views/taskTemplate/taskDesign/taskFlow/component/role-select-tree";
import userSelectTree from "@/views/taskTemplate/taskDesign/taskFlow/component/user-select-tree"; import userSelectTree from "@/views/taskTemplate/taskDesign/taskFlow/component/user-select-tree";
import { roleTree } from '@/api/task'; import { roleTree, userTree } from '@/api/task';
const generateData = (_obj, _keys) => {
const children = []
for (let i = 0; i < _obj; i++) {
tns.push({ title: key, key, scopedSlots: { title: 'title' }})
if (i < y) {
children.push(key)
}
}
if (_level < 0) {
return tns
}
const level = _level - 1
children.forEach((key, index) => {
tns[index].children = []
return generateData(level, key, tns[index].children)
})
}
export default { export default {
name: 'test', name: 'test',
data() { data() {
return { return {
visible: false,
mtShowInputText: '王旭', mtShowInputText: '王旭',
roleTree: [] roleTree: [],
} }
}, },
components: { components: {
...@@ -47,16 +43,23 @@ ...@@ -47,16 +43,23 @@
userSelectTree userSelectTree
}, },
methods: { methods: {
showModal() {
this.visible = true
},
handleOk(e) {
console.log(e);
this.visible = false
},
getRoleTreeData() { getRoleTreeData() {
roleTree().then(res => { roleTree().then(res => {
const list = res.data || [] const list = res.data || []
const treeData = list.map(role => { const treeData = list.map(role => {
const obj = Object.assign({}, { const obj = Object.assign({}, {
key: role, key: role.id,
title: role.name, title: role.name,
children: role.roles.map(cRole => { children: role.roles.map(cRole => {
const cObj = Object.assign({}, { const cObj = Object.assign({}, {
key: cRole, key: cRole.id,
title: cRole.name title: cRole.name
}) })
return cObj return cObj
...@@ -67,11 +70,9 @@ ...@@ -67,11 +70,9 @@
this.roleTree = treeData this.roleTree = treeData
console.log('getRoleTreeData', this.roleTree) console.log('getRoleTreeData', this.roleTree)
}) })
}, }
}, },
mounted() { mounted() {
this.getRoleTreeData()
} }
} }
</script> </script>
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment