Переглянути джерело

fix:增加消息组功能

luoxiao 1 місяць тому
батько
коміт
ec8126ee66

+ 13 - 0
src/api/messageOrg/index.ts

@@ -0,0 +1,13 @@
+import request from "@/utils/request";
+import { AxiosPromise } from "axios";
+import { UserForm, UserPageVO, UserQuery } from "./types";
+
+/**
+ * 登录成功后获取用户信息(昵称、头像、权限集合和角色集合)
+ */
+export function getMessageOrgList(): AxiosPromise {
+  return request({
+    url: "api/v1/syn/message/org/listAll",
+    method: "get",
+  });
+}

+ 19 - 0
src/api/user/index.ts

@@ -67,6 +67,25 @@ export function updateUser(id: number, data: UserForm) {
 }
 
 /**
+ * 获取用户分页列表
+ *
+ * @param queryParams
+ */
+export function getUserList(): AxiosPromise<any[]> {
+  return request({
+    url: "api/v1/syn/user/info/listAll",
+    method: "post",
+  });
+}
+
+export function getUserTree(): AxiosPromise {
+  return request({
+    url: "api/v1/syn/user/info/tree",
+    method: "get",
+  });
+}
+
+/**
  * 修改用户密码
  *
  * @param id

+ 6 - 0
src/router/index.ts

@@ -45,6 +45,12 @@ export const constantRoutes: RouteRecordRaw[] = [
         meta: { hidden: true, back: true, title: "用户权限管理" },
       },
       {
+        path: "/messageOrg",
+        component: () => import("@/views/sets/messageOrg.vue"),
+        name: "messageOrg",
+        meta: { hidden: true, back: true, title: "消息组织管理" },
+      },
+      {
         path: "/roles",
         component: () => import("@/views/sets/roles.vue"),
         name: "Roles",

+ 40 - 21
src/views/main/set.vue

@@ -13,27 +13,42 @@
           class="sys-item-img"
           size="60"
         />
-        <h3
-          v-if="userStore.user.canSetPermission"
-          class="sys-item-title"
-          @click="gotoUserPage"
-        >
-          {{ item.menuName }}
-        </h3>
-        <h3
-          v-if="userStore.user.setRoles"
-          class="sys-item-title"
-          @click="gotoRolsePage"
-        >
-          角色管理
-        </h3>
-        <h3
-          v-if="userStore.user.canSetIP"
-          class="sys-item-title"
-          @click="openDrawer"
-        >
-          配置IP地址
-        </h3>
+        <el-row>
+          <el-col :span="12">
+            <h3
+              v-if="userStore.user.canSetPermission"
+              class="sys-item-title"
+              @click="gotoUserPage"
+            >
+              {{ item.menuName }}
+            </h3>
+          </el-col>
+          <el-col :span="12">
+            <h3 class="sys-item-title" @click="gotoMessageOrgPage">
+              消息组织管理
+            </h3>
+          </el-col>
+        </el-row>
+        <el-row>
+          <el-col :span="12">
+            <h3
+              v-if="userStore.user.setRoles"
+              class="sys-item-title"
+              @click="gotoRolsePage"
+            >
+              角色管理
+            </h3>
+          </el-col>
+          <el-col :span="12">
+            <h3
+              v-if="userStore.user.canSetIP"
+              class="sys-item-title"
+              @click="openDrawer"
+            >
+              配置IP地址
+            </h3>
+          </el-col>
+        </el-row>
       </div>
     </div>
     <el-drawer
@@ -72,6 +87,10 @@ const gotoUserPage = () => {
 const gotoRolsePage = () => {
   router.push("/roles");
 };
+
+const gotoMessageOrgPage = () => {
+  router.push("/messageOrg");
+};
 </script>
 
 <style lang="scss" scoped>

+ 38 - 10
src/views/messages/index.vue

@@ -51,6 +51,7 @@ import MultiUpload from "@/components/Upload/MultiUpload.vue";
 import FilesUpload from "@/components/Upload/FilesUpload.vue";
 import { sendMessage } from "@/api/message/index.ts";
 import { treeList } from "@/api/user/index";
+import { getMessageOrgList } from "@/api/messageOrg/index";
 
 const userTableRef = ref(null);
 
@@ -93,6 +94,26 @@ const crudRef = ref(null); //crudRef.value 获取avue-crud对象
 const messageType = ref("");
 const route = useRoute();
 
+const messageOrgList = ref([]); //组织列表
+const getMessageOrgsList = async () => {
+  let res = await getMessageOrgList();
+  if (res && res.code == 200) {
+    messageOrgList.value = res.data ?? []; //获取组织列表
+    console.log(messageOrgList.value, "组织列表");
+  }
+};
+
+const messageChoseType = ref([
+  {
+    label: "系统公告",
+    value: "2",
+  },
+  {
+    label: "个人消息",
+    value: "0",
+  },
+]);
+
 const sendMsg = (row) => {
   sendMessage(row.id).then(() => {
     page.value.currentPage = 1;
@@ -192,6 +213,18 @@ option.value = Object.assign(option.value, {
       valueformat: "array", // 确保值是数组格式
     },
     {
+      label: "消息组织",
+      prop: "messageOrgIds",
+      type: "select",
+      dicData: messageOrgList, // 组织列表
+      props: {
+        label: "messageOrgName",
+        value: "id",
+      },
+      multiple: true, // 支持多选
+      hide: true,
+    },
+    {
       label: "消息内容",
       prop: "content",
       search: true,
@@ -205,16 +238,7 @@ option.value = Object.assign(option.value, {
       prop: "type",
       search: false,
       type: "radio",
-      dicData: [
-        {
-          label: "系统公告",
-          value: "2",
-        },
-        {
-          label: "个人消息",
-          value: "0",
-        },
-      ],
+      dicData: messageChoseType.value,
       value: "0",
     },
 
@@ -245,6 +269,9 @@ onMounted(() => {
   option.value.column.forEach((item) => {
     if (item.prop === "type") {
       item.value = messageType.value;
+      item.dicData = messageChoseType.value.filter(
+        (item) => item.value === messageType.value
+      );
     }
     if (item.prop === "receiveUsers") {
       item.addDisplay = messageType.value === "0";
@@ -255,5 +282,6 @@ onMounted(() => {
   });
   dataList();
   getDeptList();
+  getMessageOrgsList();
 });
 </script>

+ 124 - 0
src/views/sets/messageOrg.vue

@@ -0,0 +1,124 @@
+<template>
+  <div class="mainContentBox">
+    <avue-crud
+      ref="crudRef"
+      v-model="form"
+      v-model:search="search"
+      :data="data"
+      :page="page"
+      :option="option"
+      @search-change="searchChange"
+      @search-reset="resetChange"
+      @size-change="dataList"
+      @current-change="dataList"
+      @row-save="createRow"
+      @row-update="updateRow"
+      @row-del="deleteRow"
+    >
+    </avue-crud>
+  </div>
+</template>
+<script setup>
+import { ref } from "vue";
+import { useCrud } from "@/hooks/userCrud";
+import { getUserList } from "@/api/user/index";
+
+// 传入一个url,后面不带/
+const { form, data, option, search, page, toDeleteIds, Methords, Utils } =
+  useCrud({
+    src: "/api/v1/syn/message/org",
+  });
+const { dataList, createRow, updateRow, deleteRow, searchChange, resetChange } =
+  Methords; //增删改查
+const { selectionChange, multipleDelete } = Methords; //选中和批量删除事件
+const { checkBtnPerm, downloadTemplate, exportData } = Utils; //按钮权限等工具
+
+const crudRef = ref(null); //crudRef.value 获取avue-crud对象
+
+const usersList = ref([]); //人员列表
+// 设置表格列或者其他自定义的option
+option.value = Object.assign(option.value, {
+  editBtn: true, //是否显示编辑按钮
+  delBtn: true, //是否显示删除按钮
+  addBtn: true, //是否显示新增按钮
+  viewBtn: false, //是否显示查看按钮
+  menu: true, //是否显示操作列
+  column: [
+    {
+      label: "组织编码",
+      prop: "messageOrgCode",
+      search: true,
+      type: "input", //类型为单选框
+      rules: [
+        {
+          required: true,
+          message: "请输入组织编码",
+          trigger: "blur",
+        },
+      ],
+    },
+    {
+      label: "组织名称",
+      prop: "messageOrgName",
+      search: true,
+      type: "input", //类型为单选框
+      rules: [
+        {
+          required: true,
+          message: "请输入组织名称",
+          trigger: "blur",
+        },
+      ],
+    },
+    {
+      label: "状态",
+      prop: "state",
+      type: "select", //类型为单选框
+      search: true,
+      dicData: [
+        {
+          label: "启用",
+          value: 0,
+        },
+        {
+          label: "禁用",
+          value: 1,
+        },
+      ],
+      value: 0,
+      rules: [
+        {
+          required: true,
+          message: "请选择状态",
+          trigger: "blur",
+        },
+      ],
+    },
+    {
+      label: "人员",
+      prop: "receivers", // 这里是接收者的字段
+      type: "select", //类型为单选框
+      multiple: true, //是否多选
+      filterable: true, //是否可搜索
+      clearable: true, //是否可清空
+      dicData: usersList, //人员列表
+      props: {
+        label: "nickName", //标签字段
+        value: "id", //值字段
+      },
+      valueformat: "array", //确保值是数组格式
+      overHidden: true,
+    },
+  ],
+});
+
+const getUsersList = async () => {
+  const res = await getUserList();
+  usersList.value = res.data;
+};
+
+onMounted(() => {
+  dataList();
+  getUsersList();
+});
+</script>