From e611f0e211e257776bd3402ea7a90bb1fa2afdc3 Mon Sep 17 00:00:00 2001 From: zhangxiao <898441624@qq.com> Date: 星期二, 13 八月 2024 18:17:38 +0800 Subject: [PATCH] Merge branch 'master' of http://192.168.5.5:10010/r/web/flow_web --- src/views/authority/users/index.vue | 419 ++++++++++++++++++++++++++++++++++++++++++++--------------- 1 files changed, 314 insertions(+), 105 deletions(-) diff --git a/src/views/authority/users/index.vue b/src/views/authority/users/index.vue index 45fb9e7..3b2f2a3 100644 --- a/src/views/authority/users/index.vue +++ b/src/views/authority/users/index.vue @@ -2,71 +2,68 @@ <div class="container"> <authheader :items="menuTips"></authheader> <a-card ref="account" class="general-card"> - <a-row> - <a-col :flex="2"></a-col> - <a-col :flex="1"> - <a-form :model="formModel" style="margin-top: 30px"> - <a-form-item field="name"> - <a-input - v-model="formModel.name" - :style="{ width: '320px' }" - :placeholder="$t('璇疯緭鍏�')" - /> - </a-form-item> - </a-form> - </a-col> - <a-col :flex="'200px'" style="text-align: right; margin-top: 30px"> - <a-button @click="reset" style="margin-right: 20px"> - <template #icon> - <icon-refresh /> - </template> - {{ $t('searchTable.form.reset') }} - </a-button> - <a-button type="primary" @click="search"> - <template #icon> - <icon-search /> - </template> - {{ $t('searchTable.form.search') }} - </a-button> - </a-col> - </a-row> - <a-divider style="margin-top: 0" /> - <a-row style="margin-bottom: 16px"> - <a-col :span="12"> - <a-space> - <a-button type="primary" :align="'right'" @click="operation(0)" - >+ 鏂板缓璐︽埛</a-button + <div class="table-page-search-wrapper"> + <div class="search-wrapper"> + <div> + <a-input + v-model="formModel.name" + :style="{ width: '320px' }" + :placeholder="$t('璇疯緭鍏�')" + /> + </div> + <div> + <a-button + type="primary" + @click="search" + style="margin-right: 20px; margin-left: 10px" > - </a-space> - </a-col> - <a-col - :span="12" - style="display: flex; align-items: center; justify-content: end" - > - <a-tooltip :content="$t('searchTable.actions.refresh')"> - <div class="action-icon" @click="search"> - <icon-refresh size="18" /> - </div> - </a-tooltip> - <a-dropdown @select="handleSelectDensity"> - <a-tooltip :content="$t('searchTable.actions.density')"> - <div class="action-icon"> - <icon-line-height size="18" /> + <template #icon> + <icon-search /> + </template> + {{ $t('searchTable.form.search') }} + </a-button> + <a-button @click="reset"> + <template #icon> + <icon-refresh /> + </template> + {{ $t('searchTable.form.reset') }} + </a-button> + </div> + </div> + <div class="search-wrapper"> + <div> + <a-space> + <a-button type="primary" :align="'right'" @click="operation(0)" + >+ 鏂板缓璐︽埛</a-button + > + </a-space></div + > + <div class="wrapper-icon"> + <a-tooltip :content="$t('searchTable.actions.refresh')"> + <div class="action-icon" @click="search"> + <icon-refresh size="18" /> </div> </a-tooltip> - <template #content> - <a-doption - v-for="item in densityList" - :key="item.value" - :value="item.value" - :class="{ active: item.value === size }" - > - <span>{{ item.name }}</span> - </a-doption> - </template> - </a-dropdown> - </a-col> - </a-row> + <a-dropdown @select="handleSelectDensity"> + <a-tooltip :content="$t('searchTable.actions.density')"> + <div class="action-icon"> + <icon-line-height size="18" /> + </div> + </a-tooltip> + <template #content> + <a-doption + v-for="item in densityList" + :key="item.value" + :value="item.value" + :class="{ active: item.value === size }" + > + <span>{{ item.name }}</span> + </a-doption> + </template> + </a-dropdown> + </div> + </div> + </div> <a-table row-key="id" :loading="loading" @@ -129,18 +126,16 @@ @ok="editHandleOk" > <a-form :model="editform"> + <a-form-item field="email" label="鐢ㄦ埛鍚�"> + <a-input v-model="editform.email" /> + </a-form-item> <a-form-item field="name" label="鏄电О"> <a-input v-model="editform.nickName" /> - </a-form-item> - <a-form-item field="userName" label="鐢ㄦ埛鍚�"> - <a-input v-model="editform.userName" /> </a-form-item> <a-form-item field="phoneNumber" label="鎵嬫満鍙�"> <a-input v-model="editform.phoneNumber" /> </a-form-item> - <a-form-item field="email" label="閭"> - <a-input v-model="editform.email" /> - </a-form-item> + </a-form> </a-modal> <a-modal @@ -187,8 +182,9 @@ </div> </a-modal> <a-modal - width="30%" + width="70%" v-model:visible="resourcevisible" + v-if="resourcevisible" title="鏉冮檺閰嶇疆" @cancel="handleCancel(3)" @ok="editResourceHandleOk" @@ -203,7 +199,7 @@ 鑿滃崟 </template> <a-tree - class="tree-demo" + class="tree-demo-box" v-model:checked-keys="checkedKeysMenu" v-model:expanded-keys="expandKdysMenu" :checkable="true" @@ -212,12 +208,72 @@ @check="onCheckMenu" :fieldNames="{ key: 'menuId', - title: 'menuName', + children: 'children', }" :check-strictly="checkStrictlyMenu" > + <template #extra="nodeData"> + <div :class="{ 'custom-class': nodeData.menuType == 1 }"> + <span> + {{ nodeData.menuName }} + </span> + </div> + </template> + <!-- <template #extra="nodeData"> {{ nodeData.menuName }}) </template> --> </a-tree> + <!-- <a-space class="space_select_all"> + <a-button type="primary">鍏ㄩ��</a-button> + <a-button>鍙栨秷鍏ㄩ��</a-button> + </a-space> + + <div class="table_box" v-if="treeDataMenu[0].children"> + <div class="table_row1"> + <div + class="row1_list" + v-for="(item, index) in treeDataMenu[0].children" + :key="item.menuId" + > + <div class="row1_clo"> + <a-checkbox + :checked="item.menuId" + @change="onCheckChange(item, $event)" + > + {{ item.menuName }} + </a-checkbox> + </div> + <div v-if="item.children" class="row1_clo2"> + <div + class="row2_clo2_1" + v-for="(item2, index2) in item.children" + :key="item2.menuId" + > + <div class="row1_clo2_1"> + <a-checkbox + :checked="item2.menuId" + @change="onCheckChange(item2, $event)" + > + {{ item2.menuName }} + </a-checkbox> + </div> + <div v-if="item2.children" class="row1_clo2_2"> + <div + v-for="(item3, index3) in item2.children" + :key="item3.menuId" + > + <a-checkbox + :checked="item3.menuId" + @change="onCheckChange(item3, $event)" + > + {{ item3.menuName }}</a-checkbox + > + </div> + </div> + </div> + </div> + </div> + </div> + </div> --> </a-tab-pane> <a-tab-pane key="2"> <template #title> @@ -312,7 +368,7 @@ </template> <script lang="ts" setup> - import { computed, reactive, ref } from 'vue'; + import { computed, reactive, ref, h, onMounted } from 'vue'; import { useI18n } from 'vue-i18n'; import useLoading from '@/hooks/loading'; import { Pagination } from '@/types/global'; @@ -332,13 +388,14 @@ } from '@/api/authority'; import { Modal } from '@arco-design/web-vue'; import Authheader from '@/views/authority/components/authheader.vue'; + import { create } from 'lodash'; let treeData = ref([]); let checkedKeys = ref([]); let expandKdys = ref([]); let checkStrictly = ref([]); - let treeDataMenu = ref([]); + let treeDataMenu = ref<any>([]); let checkedKeysMenu = ref([]); let expandKdysMenu = ref([]); let checkStrictlyMenu = ref([]); @@ -369,6 +426,7 @@ let editform = ref<User>({ createTime: '', dept: undefined, + deptName: '', email: '', nickName: '', phoneNumber: '', @@ -382,6 +440,13 @@ let deptvisible = ref(false); let resourcevisible = ref(false); let selectUser = ref({}); + // const treeDataList = ref([]); + const checked1 = ref(false); + + //琛ㄦ牸澶嶉�夋閫夋嫨 + const onCheckChange = (checkedKeysValue: (string | number)[], e: any) => { + console.log('onCheckChange', checkedKeysValue, e); + }; const onCheck = (newCheckedKeys, event) => { let o = { deptId: event.node.deptId, deptName: event.node.deptName }; @@ -468,7 +533,7 @@ const basePagination: Pagination = { current: 1, - pageSize: 20, + pageSize: 15, }; const pagination = reactive({ ...basePagination, @@ -500,7 +565,7 @@ }, { title: t('鐢ㄦ埛鍚�'), - dataIndex: 'userName', + dataIndex: 'email', }, { title: t('鍒涘缓鏃堕棿'), @@ -508,8 +573,8 @@ }, { title: t('鎵�灞為儴闂�'), - dataIndex: 'dept', - slotName: 'dept', + dataIndex: 'deptName', + slotName: 'deptName', }, { title: t('鐘舵��'), @@ -630,7 +695,7 @@ //鍒犻櫎 if (t == 3) { await UserDelete(record.userId).then((res) => { - if (res.code == 20000) { + if (res.code == 200) { fetchData(); } }); @@ -646,28 +711,34 @@ checkStrictlyDialog.value = []; checkedKeysDialog.value = []; selectUser.value = record; - record.resources.forEach((val) => { - checkStrictlyMenu.value.push({ - menuId: val.menuId, - menuName: val.menuName, + if (record.resources) { + record.resources.forEach((val) => { + checkStrictlyMenu.value.push({ + menuId: val.menuId, + menuName: val.menuName, + }); + checkedKeysMenu.value.push(val.menuId); + expandKdysMenu.value.push(val.menuId); }); - checkedKeysMenu.value.push(val.menuId); - expandKdysMenu.value.push(val.menuId); - }); - record.knowledges.forEach((val) => { - checkStrictlyKnowledge.value.push({ - knowledgeId: val.id, - knowledgeName: val.name, + } + if (record.knowledges) { + record.knowledges.forEach((val) => { + checkStrictlyKnowledge.value.push({ + knowledgeId: val.id, + knowledgeName: val.name, + }); + checkedKeysKnowledge.value.push(val.id); }); - checkedKeysKnowledge.value.push(val.id); - }); - record.dialogs.forEach((val) => { - checkStrictlyDialog.value.push({ - dialogId: val.id, - dialogName: val.name, + } + if (record.dialogs) { + record.dialogs.forEach((val) => { + checkStrictlyDialog.value.push({ + dialogId: val.id, + dialogName: val.name, + }); + checkedKeysDialog.value.push(val.id); }); - checkedKeysDialog.value.push(val.id); - }); + } } //鏈烘瀯 if (t == 5) { @@ -677,14 +748,16 @@ checkStrictly.value = []; selectUser.value = record; expandKdys.value.push('0'); - record.dept.forEach((val) => { - checkStrictly.value.push({ - deptId: val.deptId, - deptName: val.deptName, + if (record.dept) { + record.dept.forEach((val) => { + checkStrictly.value.push({ + deptId: val.deptId, + deptName: val.deptName, + }); + checkedKeys.value.push(val.deptId); + expandKdys.value.push(val.deptId); }); - checkedKeys.value.push(val.deptId); - expandKdys.value.push(val.deptId); - }); + } } }; @@ -694,6 +767,17 @@ setLoading(true); try { await UserList(params).then((res) => { + for (const user of res.rows) { + if (user.dept) { + for (const d of user.dept) { + if (user.deptName) { + user.deptName += d.deptName + ','; + } else { + user.deptName = d.deptName + ','; + } + } + } + } renderData.value = res.rows; console.log(renderData); pagination.current = params.current; @@ -722,9 +806,12 @@ treeData.value = [...res.rows]; }); }; + const objArr = ref<any>([]); const MenuData = async (key) => { await ResourceList(key).then((res) => { treeDataMenu.value = [...res.rows]; + // addClassToLeafNodes(treeDataMenu.value); + treeDataList.value = res.rows; }); }; @@ -751,7 +838,7 @@ }; </script> -<style scoped> +<style scoped lang="less"> .card-demo { width: 460px; margin-left: 24px; @@ -761,4 +848,126 @@ .card-demo:hover { transform: translateY(-4px); } + .table-page-search-wrapper { + padding-top: 10px; + display: flex; + justify-content: space-between; + align-items: center; + margin-bottom: 20px; + padding-bottom: 10px; + border-bottom: 1px solid #e8e8e8; + .search-wrapper { + display: flex; + .wrapper-icon { + display: flex; + align-items: center; + margin-left: 40px; + // margin-right: 40px; + } + } + } + .space_select_all { + display: flex; + justify-content: end; + margin-bottom: 15px; + } + .table_box { + display: flex; + + border: 1px solid #e8e8e8; + border-bottom: none; + .row1_clo { + min-width: 200px; + display: flex; + padding-left: 20px; + border-right: 1px solid #e8e8e8; + } + .table_row1 { + width: 100%; + .row1_list { + display: flex; + min-height: 40px; + border-bottom: 1px solid #e8e8e8; + // line-height: 40px; + } + } + .row1_clo2 { + width: 100%; + border-top: none; + .row2_clo2_1 { + display: flex; + width: 100%; + min-height: 40px; + line-height: 40px; + border-bottom: 1px solid #e8e8e8; + .row1_clo2_1 { + border-right: 1px solid #e8e8e8; + min-width: 310px; + padding-left: 20px; + } + .row1_clo2_2 { + border-top: none; + border-right: none; + width: 100%; + display: flex; + flex-wrap: wrap; + div { + margin-left: 20px; + } + } + } + } + .row2_clo2_1:last-child { + border-bottom: none; + } + } +</style> +<style lang="less"> + .ant-table-wrapper { + .ant-table-tbody { + tr { + td { + .ant-table-row-cell-break-word { + .ant-table-column-sorter { + display: none; + } + } + } + } + } + + .search-wrapper { + display: flex; + .wrapper-icon { + display: flex; + align-items: center; + margin-left: 40px; + // margin-right: 40px; + } + } + } +</style> +<style lang="less"> + .ant-table-wrapper { + .ant-table-tbody { + tr { + td { + .ant-table-row-cell-break-word { + .ant-table-column-sorter { + display: none; + } + } + } + } + } + } +</style> +<style lang="less" scoped> + .table-page-search-wrapper { + .ant-form-inline { + :deep(.ant-form-item) { + display: flex; + } + } + } </style> -- Gitblit v1.8.0