123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403 |
- import auditTreeService from './audit-tree-service'
- import axios from '@/common/services/axios-instance'
- import { getUserInfo } from '@/common/store-mixin'
- // 判断是否已经选择
- function isChecked(selectedKeys, eventKey) {
- return selectedKeys.indexOf(eventKey) === -1
- }
- const iamAuditTreeMixins = {
- created() {
- // 判断单选多选
- if (!this.single) {
- this.checkedKeys = {
- checked: [],
- halfChecked: [],
- }
- }
- // 如果有默认展开节点,则赋值
- if (this.defaultExpandedKeys) {
- this.defaultTreeExpandedKeys = [...this.defaultExpandedKeys]
- }
- // 如果有传根节点名称,则赋值
- if (this.topNodeText) {
- this.defaultTopNodeText = this.topNodeText
- }
- // 如果有传根节点ID,则赋值
- if (this.topNodeId) {
- this.defaultTopNodeId = this.topNodeId
- }
- // 如果有传默认选中节点,则赋值
- if (this.selectedKeys.length > 0) {
- this.defaultSelectedKeys = [...this.selectedKeys]
- }
- // this.userRoles =
- },
- methods: {
- // 初始化部门下拉 分级授权获取部门下拉列表 维护权限
- initDeptList(formId) {
- auditTreeService.getManagedHierarchyOrg(formId).then((res) => {
- res.data.editNodes.forEach((item) => {
- this.depOptions.push({
- label: item.text,
- value: item.id,
- text: item.text,
- edit: true,
- })
- })
- if (this.managerType !== 'manager') {
- // 取编辑和查看节点并集
- res.data.viewNodes.forEach((item, index) => {
- const node = this.depOptions.find((nodeinfo) => {
- return nodeinfo.value === item.id
- })
- if (!node) {
- this.depOptions.push({
- label: item.text,
- value: item.id,
- text: item.text,
- edit: false,
- })
- }
- })
- }
- // 部门下拉框列表值赋值
- if (this.depOptions.length > 0) {
- let userInfo = getUserInfo()
- const params = {
- orgId: userInfo.deptId,
- }
- axios({
- url: 'api/xcoa-mobile/v1/iamorg/getCurrentUserGroup',
- method: 'get',
- }).then((res) => {
- userInfo = res.data
- params.orgId = res.data.id
- axios({
- url: 'api/xcoa-mobile/v1/iamorg/findIamOrgId',
- method: 'post',
- params,
- }).then((res) => {
- const obj = this.depOptions.find((i) => i.value === res.data)
- if (obj) {
- this.depvalue = obj.value
- this.defaultTopNodeId = obj.value
- this.defaultTopNodeText = obj.text + this.topNodeText
- this.defaultTreeExpandedKeys = [obj.value]
- this.defaultSelectedKeys = [obj.value]
- this.edit = obj.edit
- this.initTreeData(obj.value)
- this.emitTreeSelect(obj.value, {
- selectedNodes: [
- {
- data: {
- props: {
- id: obj.value,
- text: obj.text + this.topNodeText,
- edit: obj.edit,
- },
- },
- },
- ],
- })
- } else {
- this.depvalue = this.depOptions[0].value
- // 加载默认值
- this.defaultTopNodeId = this.depOptions[0].value
- this.defaultTopNodeText = this.depOptions[0].text + this.topNodeText
- this.defaultTreeExpandedKeys = [this.depOptions[0].value]
- this.defaultSelectedKeys = [this.depOptions[0].value]
- this.edit = this.depOptions[0].edit
- this.initTreeData(this.depOptions[0].value)
- this.emitTreeSelect(this.depOptions[0].value, {
- selectedNodes: [
- {
- data: {
- props: {
- id: this.depOptions[0].value,
- text: this.depOptions[0].text + this.topNodeText,
- edit: this.depOptions[0].edit,
- },
- },
- },
- ],
- })
- }
- })
- })
- } else {
- this.defaultTopNodeId = null
- this.defaultTopNodeText = null
- this.defaultTreeExpandedKeys = []
- this.defaultSelectedKeys = []
- this.emitTreeSelect(9999999, {
- selectedNodes: [],
- })
- this.spinning = false
- this.empty = true
- }
- })
- },
- /**
- * 显示分类负责人
- */
- showUser(item) {
- this.$emit('showUser', item)
- },
- // 判断当前树需要展示的节点信息
- bindTree(nodeinfo) {
- const checklist = this.checkedKeys.checked
- if (nodeinfo.children) {
- this.bindTree(nodeinfo.children)
- const hiddenItem = nodeinfo.children.find((item, index) => {
- return item.hidden !== true
- })
- // 判断当前进节点是否隐藏
- if (!hiddenItem && checklist.indexOf(nodeinfo.id) === -1) {
- nodeinfo.hidden = true
- }
- // 如果显示但是没有在选择列表,则不可选中
- if (!nodeinfo.hidden && checklist.indexOf(nodeinfo.id) === -1) {
- nodeinfo.disabled = true
- }
- } else {
- nodeinfo.forEach((node, nodeindex) => {
- if (node.children) {
- // 判断子节点是否有选中的节点
- this.bindTree(node.children)
- const hiddenItem = node.children.find((item, index) => {
- return item.hidden !== true
- })
- // 判断当前进节点是否隐藏
- if (!hiddenItem && checklist.indexOf(node.id) === -1) {
- node.hidden = true
- }
- // 如果显示但是没有在选择列表,则不可选中
- if (!node.hidden && checklist.indexOf(node.id) === -1) {
- node.disabled = true
- }
- } else {
- if (checklist.indexOf(node.id) === -1) {
- node.hidden = true
- }
- // 如果显示但是没有在选择列表,则不可选中
- if (!node.hidden && checklist.indexOf(node.id) === -1) {
- node.disabled = true
- }
- }
- })
- }
- },
- /***
- * 选中复选框时的事件
- */
- treeCheck(allKeys, echecked) {
- // echecked.checkedNodes 选中的所有节点信息为数组 .data.props 获取详细信息
- // echecked.node.dataRef 当前选中的节点信息
- if (this.single) {
- this.checkedKeys.checked = []
- this.checkedKeys.checked = [echecked.node.dataRef.id]
- }
- this.$emit('checkedKeys', echecked.node.dataRef, echecked.checkedNodes)
- },
- getTree(node) {
- const removeIndex = []
- node.children.forEach((item, index) => {
- if (item.hidden === true) {
- removeIndex.push(index)
- } else {
- if (item.children) {
- this.getTree(item)
- }
- }
- })
- // 删除元素
- removeIndex.forEach((oneindex, index) => {
- node.children.splice(oneindex - index, 1)
- })
- },
- // 点击树
- treeSelect(selectedKeys, info) {
- // 点击树不会取消选中
- if (info.selectedNodes.length === 0) {
- info.selectedNodes = [
- {
- data: {
- props: info.node.dataRef,
- },
- },
- ]
- info.selectedNodes[0].data.props.props.id = info.node.dataRef.id
- info.selectedNodes[0].data.props.props.edit = info.node.dataRef.edit
- }
- // 点击树不会取消选中
- this.defaultSelectedKeys = [info.node.dataRef.id]
- if (this.single) {
- this.checkedKeys = []
- this.checkedKeys = [info.node.dataRef.id]
- } else {
- if (isChecked(this.checkedKeys.checked, info.node.dataRef.id)) {
- this.checkedKeys.checked.push(info.node.dataRef.id)
- } else {
- this.checkedKeys.checked.splice(this.checkedKeys.checked.indexOf(info.node.dataRef.id), 1)
- }
- this.checkedKeys.checked = [...new Set(this.checkedKeys.checked)]
- }
- this.emitTreeSelect(info.node.dataRef.id, info)
- },
- // 筛选树
- onSearchChange(e) {
- const value = e.target.value
- const expandedKeys = this.dataList
- .map((item) => {
- if (item.title.indexOf(value) > -1) {
- return this.getParentKey(item.key, this.treeData)
- }
- return null
- })
- .filter((item, i, self) => item && self.indexOf(item) === i)
- expandedKeys.unshift('0') // 顶结点永远展开
- Object.assign(this, {
- expandedKeys,
- searchValue: value,
- autoExpandParent: true,
- })
- },
- getParentKey(key, tree) {
- let parentKey
- for (let i = 0; i < tree.length; i++) {
- const node = tree[i]
- if (node.children) {
- if (node.children.some((item) => item.id === key)) {
- parentKey = node.id
- } else if (this.getParentKey(key, node.children)) {
- parentKey = this.getParentKey(key, node.children)
- }
- }
- }
- return parentKey
- },
- transformData(data, nodeEdit) {
- return data.map((d) => {
- let isEdit
- const { children, ...rest } = d
- rest.edit = this.edit
- // 如果需要检查节点属性,且此节点不存在属性,则添加,否则直接赋值
- if (this.checkNodeEdit && !this.userRoles) {
- const nodeinfo = this.depOptions.find((item) => {
- return item.value === rest.id
- })
- if (nodeEdit === undefined) {
- if (nodeinfo) {
- rest.edit = nodeinfo.edit
- isEdit = nodeinfo.edit
- } else {
- rest.edit = false
- }
- } else {
- rest.edit = nodeEdit
- isEdit = nodeEdit
- if (nodeinfo) {
- rest.edit = nodeinfo.edit
- isEdit = nodeinfo.edit
- }
- }
- // 如果不是根节点且没有编辑权限,则设置不可点击
- if (isEdit === undefined && rest.props.isroot !== true) {
- rest.disabled = true
- }
- }
- return {
- ...rest,
- children: children && this.transformData(children),
- scopedSlots: { title: 'title' },
- }
- })
- },
- // 处理搜索用的dataList
- generateList(data) {
- for (let i = 0; i < data.length; i++) {
- const node = data[i]
- const key = node.id
- const title = node.text
- const props = node.props
- // 用来判断此几点是否已经配置了用户,需要后台返回标识位进行判断
- if (props.showuser) {
- data[i].scopedSlots.icon = 'hasuser'
- }
- this.dataList.push({ key, id: key, title: title, props })
- if (node.children) {
- this.generateList(node.children)
- }
- }
- },
- onExpand(expandedKeys) {
- // 用户点击展开时,取消自动展开效果
- this.expandedKeys = expandedKeys
- this.autoExpandParent = false
- },
- // 小箭头点击事件
- foldClick() {
- this.fold = !this.fold
- if (this.fold) {
- this.icontype = 'right'
- } else {
- this.icontype = 'left'
- }
- },
- // 组织下拉框change时触发
- changedep(value, option) {
- this.key++
- if (!value) {
- this.defaultTreeExpandedKeys = ['0']
- this.defaultSelectedKeys = ['0']
- this.defaultTopNodeId = '0'
- this.defaultTopNodeText = this.topNodeText
- } else {
- this.defaultTreeExpandedKeys = [value]
- this.defaultSelectedKeys = [value]
- this.defaultTopNodeId = value
- this.defaultTopNodeText = option.data.props.text + this.topNodeText
- this.edit = option.data.props.edit
- }
- this.initTreeData(value)
- this.$emit('depChanged', value, option)
- this.emitTreeSelect(value, {
- selectedNodes: [
- {
- data: {
- props: {
- id: value,
- text: option.data.props.text + this.topNodeText,
- edit: option.data.props.edit,
- },
- },
- },
- ],
- })
- },
- // 刷新树方法
- refreshTree() {
- this.key++
- },
- // 发布点击事件
- emitTreeSelect(value, info) {
- this.$emit('treeSelect', value, info)
- },
- },
- }
- export default iamAuditTreeMixins
|