From 3313467ddc324d3e19610142756423c8355dc82d Mon Sep 17 00:00:00 2001
From: zhangxiao <898441624@qq.com>
Date: 星期五, 30 八月 2024 15:13:58 +0800
Subject: [PATCH] fix: 更新聊天展示
---
src/views/authority/users/index.vue | 571 +++++++++++++++++++++++++-------------------------------
1 files changed, 255 insertions(+), 316 deletions(-)
diff --git a/src/views/authority/users/index.vue b/src/views/authority/users/index.vue
index 65eb01d..068e9b5 100644
--- a/src/views/authority/users/index.vue
+++ b/src/views/authority/users/index.vue
@@ -64,71 +64,6 @@
</div>
</div>
</div>
- <!-- <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 type="primary" @click="search" style="margin-right: 20px">
- <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>
- </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
- >
- </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" />
- </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-table
row-key="id"
:loading="loading"
@@ -142,9 +77,6 @@
<template #index="{ rowIndex }">
{{ rowIndex + 1 + (pagination.current - 1) * pagination.pageSize }}
</template>
- <template #dept="{ record }">{{
- record.dept ? record.dept.deptName : ''
- }}</template>
<template #status="{ record }">
<a-switch
checked-value="1"
@@ -165,7 +97,7 @@
>缂栬緫</a-button
>
<a-popconfirm
- content="Are you sure you want to delete?"
+ content="璇风‘璁ゆ槸鍚﹀垹闄わ紵"
type="success"
@ok="operation(3, record)"
>
@@ -175,7 +107,7 @@
type="dashed"
status="warning"
@click="operation(4, record)"
- >鏉冮檺閰嶇疆</a-button
+ >鏌ョ湅鏉冮檺</a-button
>
<a-button status="success" @click="operation(5, record)"
>閮ㄩ棬閰嶇疆</a-button
@@ -189,20 +121,72 @@
:title="save"
@cancel="handleCancel(1)"
@ok="editHandleOk"
+ width="48%"
>
- <a-form :model="editform">
- <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 ref="formRef" :model="editform" auto-label-width>
+ <a-row :gutter="20">
+ <a-col :span="10">
+ <a-form-item
+ field="loginName"
+ label="鐢ㄦ埛鍚�"
+ :rules="[
+ { required: true, message: '鐢ㄦ埛鍚嶅繀濉�' },
+ { maxLength: 50, message: '闀垮害涓嶈秴杩�50' },
+ ]"
+ >
+ <a-input v-model="editform.loginName" />
+ </a-form-item>
+ </a-col>
+ <a-col :span="10">
+ <a-form-item field="userName" label="濮撳悕">
+ <a-input v-model="editform.userName" />
+ </a-form-item>
+ </a-col>
+ </a-row>
+ <a-row :gutter="20">
+ <a-col :span="10">
+ <a-form-item field="phoneNumber" label="鎵嬫満鍙�">
+ <a-input v-model="editform.phoneNumber" />
+ </a-form-item>
+ </a-col>
+ <a-col :span="10">
+ <a-form-item
+ required
+ field="email"
+ label="閭"
+ :rules="[
+ { required: true, message: '閭蹇呭~' },
+ { maxLength: 50, message: '闀垮害涓嶈秴杩�50' },
+ ]"
+ >
+ <a-input v-model="editform.email" />
+ </a-form-item>
+ </a-col>
+ </a-row>
+ <a-row :gutter="20">
+ <a-col :span="10">
+ <a-form-item field="psw" label="瀵嗙爜">
+ <a-input v-model="editform.psw" />
+ </a-form-item>
+ </a-col>
+ <a-col :span="10">
+ <a-form-item
+ required
+ field="role"
+ label="瑙掕壊"
+ :rules="[{ required: true, message: '瑙掕壊蹇呴��' }]"
+ >
+ <a-select
+ multiple
+ v-model="editform.role"
+ :options="roles"
+ :field-names="fieldNames"
+ @change="roleChange"
+ >
+ </a-select>
+ </a-form-item>
+ </a-col>
+ </a-row>
</a-form>
</a-modal>
<a-modal
@@ -231,7 +215,6 @@
title: 'deptName',
children: 'children',
}"
- :check-strictly="checkStrictly"
>
</a-tree>
</a-card>
@@ -249,86 +232,19 @@
</div>
</a-modal>
<a-modal
- width="30%"
+ width="50%"
v-model:visible="resourcevisible"
v-if="resourcevisible"
- title="鏉冮檺閰嶇疆"
- @cancel="handleCancel(3)"
- @ok="editResourceHandleOk"
+ title="鐢ㄦ埛鎵�鏈夋潈闄�"
+ okText="鍏抽棴"
+ hide-Cancel="true"
+ @ok="handleCancel(3)"
>
<div :style="{ 'display': 'flex', 'flex-direction': 'column' }">
- <a-tabs
- :style="{ 'width': '100%', 'height': '500px', 'overflow-y': 'auto' }"
- >
- <a-tab-pane key="1">
- <template #title>
- <icon-calendar />
- 鑿滃崟
- </template>
- <a-tree
- class="tree-demo"
- v-model:checked-keys="checkedKeysMenu"
- v-model:expanded-keys="expandKdysMenu"
- :checkable="true"
- :data="treeDataMenu"
- :show-line="showLineMenu"
- @check="onCheckMenu"
- :fieldNames="{
- key: 'menuId',
- title: 'menuName',
- children: 'children',
- }"
- :check-strictly="checkStrictlyMenu"
- >
- </a-tree>
- </a-tab-pane>
- <a-tab-pane key="2">
- <template #title>
- <icon-clock-circle />
- 鐭ヨ瘑搴�
- </template>
- <a-space direction="vertical" size="large">
- <a-checkbox-group
- v-model="checkedKeysKnowledge"
- direction="vertical"
- @change="onCheckKnowledge"
- >
- <a-checkbox
- v-for="(knowledg, index) of knowledgeList"
- :value="knowledg.id"
- :lable="knowledg.name"
- @change="onCheckKnowledge"
- >
- {{ knowledg.name }}
- </a-checkbox>
- </a-checkbox-group>
- </a-space>
- </a-tab-pane>
- <a-tab-pane key="3">
- <template #title>
- <icon-user />
- 鏅鸿兘浣�
- </template>
- <a-checkbox-group
- v-model="checkedKeysDialog"
- direction="vertical"
- @change="onCheckDialog"
- >
- <a-checkbox
- v-for="(dialog, index) of DialogsList"
- :value="dialog.id"
- :lable="dialog.name"
- @change="onCheckDialog"
- >
- {{ dialog.name }}
- </a-checkbox>
- </a-checkbox-group>
- </a-tab-pane>
- </a-tabs>
<a-card
:style="{
'width': '100%',
- 'height': '200px',
+ 'height': '40%',
'overflow-y': 'auto',
'margin': '1px',
}"
@@ -338,11 +254,7 @@
>
<a-space wrap>
鑿滃崟鍔熻兘锛�
- <a-tag
- v-for="(tag, index) of checkStrictlyMenu"
- :key="tag.menuId"
- @close="handleMenuRemove(tag)"
- >
+ <a-tag v-for="(tag, index) of checkStrictlyMenu" :key="tag.menuId">
{{ tag.menuName }}
</a-tag>
</a-space>
@@ -352,7 +264,6 @@
<a-tag
v-for="(tag, index) of checkStrictlyKnowledge"
:key="tag.knowledgeId"
- @close="handleKnowledgeRemove(tag)"
>
{{ tag.knowledgeName }}
</a-tag>
@@ -363,9 +274,14 @@
<a-tag
v-for="(tag, index) of checkStrictlyDialog"
:key="tag.dialogId"
- @close="handleDialogRemove(tag)"
>
{{ tag.dialogName }}
+ </a-tag>
+ <a-tag
+ v-for="(tag, index) of checkStrictlyAgent"
+ :key="tag.agentId"
+ >
+ {{ tag.agentName }}
</a-tag>
</a-space>
</a-card>
@@ -375,7 +291,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';
@@ -385,6 +301,8 @@
KnowledgeList,
OrganizationList,
ResourceList,
+ Role,
+ RoleList,
User,
UserAdd,
UserChangePwd,
@@ -395,25 +313,21 @@
} from '@/api/authority';
import { Modal } from '@arco-design/web-vue';
import Authheader from '@/views/authority/components/authheader.vue';
+ import { create } from 'lodash';
+ import { queryCanvasList } from '@/api/Agent';
+
+ const fieldNames = { value: 'roleId', label: 'roleName' };
+ const roles = ref([]);
let treeData = ref([]);
let checkedKeys = ref([]);
let expandKdys = ref([]);
let checkStrictly = ref([]);
-
- let treeDataMenu = ref([]);
- let checkedKeysMenu = ref([]);
- let expandKdysMenu = ref([]);
let checkStrictlyMenu = ref([]);
-
- let checkedKeysKnowledge = ref([]);
let checkStrictlyKnowledge = ref([]);
-
- let checkedKeysDialog = ref([]);
let checkStrictlyDialog = ref([]);
-
- let knowledgeList = ref([]);
- let DialogsList = ref([]);
+ let checkStrictlyAgent = ref([]);
+ let formRef = ref();
let menuTips = ref(['鏉冮檺绠$悊', '璐﹀彿']);
type SizeProps = 'mini' | 'small' | 'medium' | 'large';
@@ -438,7 +352,10 @@
phoneNumber: '',
status: '',
userId: '',
+ loginName: '',
userName: '',
+ psw: '',
+ role: [],
});
let size = ref<SizeProps>('medium');
@@ -446,6 +363,16 @@
let deptvisible = ref(false);
let resourcevisible = ref(false);
let selectUser = ref({});
+
+ const loadRole = async () => {
+ await RoleList(null).then((res) => {
+ roles.value = res.rows;
+ });
+ };
+
+ const roleChange = (val) => {
+ editform.value.role = val;
+ };
const onCheck = (newCheckedKeys, event) => {
let o = { deptId: event.node.deptId, deptName: event.node.deptName };
@@ -460,74 +387,6 @@
}
});
}
- };
- const onCheckMenu = (newCheckedKeys, event) => {
- let o = { menuId: event.node.menuId, menuName: event.node.menuName };
- if (event.checked) {
- checkStrictlyMenu.value.push(o);
- } else {
- checkStrictlyMenu.value.forEach((val, idx, array) => {
- // val: 褰撳墠鍊�
- if (val.menuId == event.node.menuId) {
- checkStrictlyMenu.value.splice(idx, 1);
- return true;
- }
- });
- }
- };
- const onCheckKnowledge = (newCheckedKeys, event) => {
- let o = {
- knowledgeId: event.target.value,
- knowledgeName: event.target.labels[0].innerText,
- };
- if (event.target.checked) {
- checkStrictlyKnowledge.value.push(o);
- } else {
- checkStrictlyKnowledge.value.forEach((val, idx, array) => {
- // val: 褰撳墠鍊�
- if (val.knowledgeId == event.target.value) {
- checkStrictlyKnowledge.value.splice(idx, 1);
- return true;
- }
- });
- }
- };
-
- const onCheckDialog = (newCheckedKeys, event) => {
- let o = {
- dialogId: event.target.value,
- dialogName: event.target.labels[0].innerText,
- };
- if (event.target.checked) {
- checkStrictlyDialog.value.push(o);
- } else {
- checkStrictlyDialog.value.forEach((val, idx, array) => {
- // val: 褰撳墠鍊�
- if (val.dialogId == event.target.value) {
- checkStrictlyDialog.value.splice(idx, 1);
- return true;
- }
- });
- }
- };
-
- const handleRemove = (key) => {
- checkStrictly.value = checkStrictly.value.filter((tag) => tag !== key);
- };
- const handleMenuRemove = (key) => {
- checkStrictlyMenu.value = checkStrictlyMenu.value.filter(
- (tag) => tag !== key
- );
- };
- const handleKnowledgeRemove = (key) => {
- checkStrictlyKnowledge.value = checkStrictlyKnowledge.value.filter(
- (tag) => tag !== key
- );
- };
- const handleDialogRemove = (key) => {
- checkStrictlyDialog.value = checkStrictlyDialog.value.filter(
- (tag) => tag !== key
- );
};
const basePagination: Pagination = {
@@ -563,12 +422,12 @@
slotName: 'index',
},
{
- title: t('鐧诲綍鍚�'),
- dataIndex: 'email',
+ title: t('鐢ㄦ埛鍚�'),
+ dataIndex: 'loginName',
},
{
- title: t('鍒涘缓鏃堕棿'),
- dataIndex: 'createTime',
+ title: t('瑙掕壊'),
+ dataIndex: 'roleName',
},
{
title: t('鎵�灞為儴闂�'),
@@ -588,7 +447,15 @@
]);
const statusChange = async (value, record) => {
- await Userstatus(record.userId, value).then((res) => {});
+ if (record?.dept) {
+ await Userstatus(record.userId, value).then((res) => {});
+ } else {
+ record.status = '0';
+ Modal.warning({
+ title: '鎻愮ず',
+ content: '濡傛兂鍚敤鐢ㄦ埛锛岄渶杩涜閮ㄩ棬閰嶇疆.',
+ });
+ }
};
const handleCancel = (type) => {
@@ -597,9 +464,6 @@
}
if (type == 2) {
deptvisible.value = false;
- }
- if (type == 2) {
- resourcevisible.value = false;
}
};
@@ -615,45 +479,37 @@
});
};
- const editResourceHandleOk = async () => {
- let resources: Array = [],
- dialogs: Array = [],
- Knowledges: Array = [],
- user: User = { userId: selectUser.value.userId };
- checkStrictlyMenu.value.forEach((val) => {
- resources.push(val.menuId);
- });
- user.resources = resources;
-
- checkStrictlyKnowledge.value.forEach((val) => {
- Knowledges.push(val.knowledgeId);
- });
- user.knowledges = Knowledges;
-
- checkStrictlyDialog.value.forEach((val) => {
- dialogs.push(val.dialogId);
- });
- user.dialogs = dialogs;
-
- await UserEdit(user).then((res) => {
- fetchData();
- });
- };
-
- const editHandleOk = async () => {
- if (editform.value.userId.length > 0) {
- await UserEdit({
- ...editform.value,
- } as unknown as User).then((res) => {
- fetchData();
- });
+ const cb = async (err) => {
+ if (err) {
+ visible.value = true;
} else {
- await UserAdd({
- ...editform.value,
- } as unknown as User).then((res) => {
- fetchData();
- });
+ let uuu;
+ if (editform.value.userId.length > 0) {
+ await UserEdit({
+ ...editform.value,
+ } as unknown as User).then((res) => {
+ fetchData();
+ uuu = res.data;
+ });
+ } else {
+ await UserAdd({
+ ...editform.value,
+ } as unknown as User).then((res) => {
+ fetchData();
+ uuu = res.data;
+ });
+ }
+ if (uuu.dept?false:true) {
+ deptvisible.value = true;
+ checkedKeys.value = [];
+ expandKdys.value = [];
+ checkStrictly.value = [];
+ selectUser.value = uuu;
+ }
}
+ };
+ const editHandleOk = () => {
+ formRef.value.validate(cb);
};
const operation = async (t, record) => {
if (t == 0) {
@@ -661,9 +517,11 @@
visible.value = true;
editform.value.userId = '';
editform.value.userName = '';
+ editform.value.loginName = '';
editform.value.nickName = '';
editform.value.email = '';
editform.value.phoneNumber = '';
+ editform.value.role = '';
}
//閲嶇疆瀵嗙爜
if (t == 1) {
@@ -684,12 +542,20 @@
//缂栬緫
if (t == 2) {
visible.value = true;
+ formRef.value?.resetFields();
+ editform.value.role=[];
save.value = '缂栬緫';
editform.value.userId = record.userId;
editform.value.userName = record.userName;
- editform.value.nickName = record.nickName;
+ editform.value.loginName = record.loginName;
editform.value.email = record.email;
editform.value.phoneNumber = record.phoneNumber;
+ if (record.roles?.length > 0) {
+ //閬嶅巻record.roles
+ record.roles.forEach((val) => {
+ editform.value.role.push(val.roleId);
+ })
+ }
}
//鍒犻櫎
if (t == 3) {
@@ -702,40 +568,61 @@
//鏉冮檺
if (t == 4) {
resourcevisible.value = true;
- checkedKeysMenu.value = [];
- expandKdysMenu.value = [];
checkStrictlyMenu.value = [];
checkStrictlyKnowledge.value = [];
- checkedKeysKnowledge.value = [];
checkStrictlyDialog.value = [];
- checkedKeysDialog.value = [];
+ checkStrictlyAgent.value = [];
selectUser.value = record;
+
+ let agents;
+ if (record.agents) {
+ agents = record.agents;
+ } else {
+ agents = record.roles ? record.roles[0].agents : null;
+ }
+ if (agents) {
+ agents.forEach((val) => {
+ checkStrictlyAgent.value.push({
+ agentId: val.id,
+ agentName: val.title,
+ });
+ });
+ }
+ let resources;
if (record.resources) {
- record.resources.forEach((val) => {
+ resources = record.resources;
+ } else {
+ resources = record.roles ? record.roles[0].resources : null;
+ }
+ if (resources) {
+ resources.forEach((val) => {
checkStrictlyMenu.value.push({
menuId: val.menuId,
menuName: val.menuName,
});
- checkedKeysMenu.value.push(val.menuId);
- expandKdysMenu.value.push(val.menuId);
});
}
+ let knowledges;
if (record.knowledges) {
- record.knowledges.forEach((val) => {
+ knowledges = record.knowledges;
+ } else {
+ knowledges = record.roles ? record.roles[0].knowledges : null;
+ }
+ if (knowledges) {
+ knowledges.forEach((val) => {
checkStrictlyKnowledge.value.push({
knowledgeId: val.id,
knowledgeName: val.name,
});
- checkedKeysKnowledge.value.push(val.id);
});
}
- if (record.dialogs) {
- record.dialogs.forEach((val) => {
+ let dialogs = record.roles ? record.roles[0].dialogs : null;
+ if (dialogs) {
+ dialogs.forEach((val) => {
checkStrictlyDialog.value.push({
dialogId: val.id,
dialogName: val.name,
});
- checkedKeysDialog.value.push(val.id);
});
}
}
@@ -747,7 +634,7 @@
checkStrictly.value = [];
selectUser.value = record;
expandKdys.value.push('0');
- if (record.dept) {
+ if (record?.dept) {
record.dept.forEach((val) => {
checkStrictly.value.push({
deptId: val.deptId,
@@ -773,6 +660,15 @@
user.deptName += d.deptName + ',';
} else {
user.deptName = d.deptName + ',';
+ }
+ }
+ }
+ if (user.roles) {
+ for (const r of user.roles) {
+ if (user.roleName) {
+ user.roleName += r.roleName + ',';
+ } else {
+ user.roleName = r.roleName + ',';
}
}
}
@@ -805,22 +701,10 @@
treeData.value = [...res.rows];
});
};
- const MenuData = async (key) => {
- await ResourceList(key).then((res) => {
- treeDataMenu.value = [...res.rows];
- });
- };
- KnowledgeList().then((res) => {
- knowledgeList.value = res.rows;
- });
-
- DialogList().then((res) => {
- DialogsList.value = res.rows;
- });
fetchData();
OrganizationData('');
- MenuData();
+ loadRole();
const reset = () => {
formModel.value = generateFormModel();
@@ -862,6 +746,61 @@
}
}
}
+ .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 {
--
Gitblit v1.8.0