瀏覽代碼

修改通知公告

qinyan 3 月之前
父節點
當前提交
14348a0606

+ 31 - 10
ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysNoticeController.java

@@ -1,7 +1,9 @@
 package com.ruoyi.web.controller.system;
 
 import java.util.List;
+import java.util.Map;
 
+import com.ruoyi.common.core.domain.entity.SysUser;
 import com.ruoyi.system.domain.SysNoticeUser;
 import com.ruoyi.system.service.ISysNoticeUserService;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -94,16 +96,6 @@ public class SysNoticeController extends BaseController
         return toAjax(noticeService.deleteNoticeByIds(noticeIds));
     }
 
-    /**
-     * 修改通知公告
-     */
-    @PreAuthorize("@ss.hasPermi('system:notice:choose')")
-    @Log(title = "选择人员", businessType = BusinessType.UPDATE)
-    @PostMapping("/choose")
-    public AjaxResult choose(@Validated @RequestBody SysNotice notice)
-    {
-        return toAjax(noticeService.choose(notice));
-    }
 
     /**
      * 移除人员
@@ -139,4 +131,33 @@ public class SysNoticeController extends BaseController
         List<SysNoticeUser> list = noticeUserService.selectNoticeList(notice);
         return getDataTable(list);
     }
+
+    @Log(title = "添加公告用户", businessType = BusinessType.INSERT)
+    @PostMapping("/addNoticeUser/{noticeId}")
+    public AjaxResult addNoticeUser(@PathVariable Long noticeId, @RequestBody List<SysUser> users) {
+        if (users.isEmpty()) {
+            return warn("请选择用户后再添加!");
+        }
+        return success(noticeService.addNoticeUser(noticeId, users));
+    }
+
+    /**
+     * 删除通知公告
+     */
+    @GetMapping("/removeNoticeUser/{noticeIds}")
+    public AjaxResult removeNoticeUser(@PathVariable Long[] noticeIds)
+    {
+        return toAjax(noticeUserService.deleteNoticeUserByIds(noticeIds));
+    }
+
+    /**
+     * 获取通知公告用户列表
+     */
+    @GetMapping("/myNoticeList")
+    public TableDataInfo myNoticeList(SysNoticeUser notice)
+    {
+        startPage();
+        List<Map<String,Object>> list = noticeUserService.selectMyNoticeList(notice);
+        return getDataTable(list);
+    }
 }

+ 0 - 10
ruoyi-system/src/main/java/com/ruoyi/system/domain/SysNotice.java

@@ -37,16 +37,6 @@ public class SysNotice extends BaseEntity
     /** 公告状态(0正常 1关闭) */
     private String status;
 
-    private String userIds;
-
-    public String getUserIds() {
-        return userIds;
-    }
-
-    public void setUserIds(String userIds) {
-        this.userIds = userIds;
-    }
-
     public Long getNoticeId()
     {
         return noticeId;

+ 10 - 0
ruoyi-system/src/main/java/com/ruoyi/system/domain/SysNoticeUser.java

@@ -33,6 +33,16 @@ public class SysNoticeUser extends BaseEntity
     /** 公告状态(0正常 1关闭) */
     private String status;
 
+    private String nickName;
+
+    public String getNickName() {
+        return nickName;
+    }
+
+    public void setNickName(String nickName) {
+        this.nickName = nickName;
+    }
+
     public Long getNoticeUserId() {
         return noticeUserId;
     }

+ 8 - 0
ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysNoticeUserMapper.java

@@ -3,8 +3,10 @@ package com.ruoyi.system.mapper;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.ruoyi.system.domain.SysNotice;
 import com.ruoyi.system.domain.SysNoticeUser;
+import org.apache.ibatis.annotations.Param;
 
 import java.util.List;
+import java.util.Map;
 
 /**
  * 通知公告表 数据层
@@ -60,4 +62,10 @@ public interface SysNoticeUserMapper extends BaseMapper<SysNoticeUser>
      * @return 结果
      */
     public int deleteNoticeUserByIds(Long[] noticeUserIds);
+
+    List<SysNoticeUser> selectNoticeUsers(@Param("noticeId")Long noticeId,@Param("userIds") List<Long> userIds);
+
+    int insertBatch(@Param("list") List<SysNoticeUser> users);
+
+    List<Map<String, Object>> selectMyNoticeList(SysNoticeUser notice);
 }

+ 3 - 1
ruoyi-system/src/main/java/com/ruoyi/system/service/ISysNoticeService.java

@@ -1,6 +1,8 @@
 package com.ruoyi.system.service;
 
 import java.util.List;
+
+import com.ruoyi.common.core.domain.entity.SysUser;
 import com.ruoyi.system.domain.SysNotice;
 
 /**
@@ -58,5 +60,5 @@ public interface ISysNoticeService
      */
     public int deleteNoticeByIds(Long[] noticeIds);
 
-    int choose(SysNotice notice);
+    int addNoticeUser(Long noticeId, List<SysUser> users);
 }

+ 4 - 0
ruoyi-system/src/main/java/com/ruoyi/system/service/ISysNoticeUserService.java

@@ -1,9 +1,11 @@
 package com.ruoyi.system.service;
 
+import com.ruoyi.common.core.domain.entity.SysUser;
 import com.ruoyi.system.domain.SysNotice;
 import com.ruoyi.system.domain.SysNoticeUser;
 
 import java.util.List;
+import java.util.Map;
 
 /**
  * 公告 服务层
@@ -59,4 +61,6 @@ public interface ISysNoticeUserService
      * @return 结果
      */
     public int deleteNoticeUserByIds(Long[] noticeUserIds);
+
+    List<Map<String, Object>> selectMyNoticeList(SysNoticeUser notice);
 }

+ 32 - 9
ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysNoticeServiceImpl.java

@@ -1,9 +1,14 @@
 package com.ruoyi.system.service.impl;
 
+import java.util.ArrayList;
+import java.util.Date;
 import java.util.List;
+import java.util.stream.Collectors;
 
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ruoyi.common.core.domain.entity.SysUser;
+import com.ruoyi.common.utils.SecurityUtils;
 import com.ruoyi.system.domain.SysNoticeUser;
 import com.ruoyi.system.mapper.SysNoticeUserMapper;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -11,6 +16,7 @@ import org.springframework.stereotype.Service;
 import com.ruoyi.system.domain.SysNotice;
 import com.ruoyi.system.mapper.SysNoticeMapper;
 import com.ruoyi.system.service.ISysNoticeService;
+import org.springframework.transaction.annotation.Transactional;
 
 /**
  * 公告 服务层实现
@@ -100,15 +106,32 @@ public class SysNoticeServiceImpl  extends ServiceImpl<SysNoticeMapper, SysNotic
     }
 
     @Override
-    public int choose(SysNotice notice) {
-        String userIds[]= notice.getUserIds().split(",");
-        for(String userId:userIds){
-            SysNoticeUser noticeUser=new SysNoticeUser();
-            noticeUser.setNoticeId(notice.getNoticeId());
-            noticeUser.setUserId(Long.parseLong(userId));
-            noticeUser.setStatus("0");//未读
-            noticeUserMapper.insert(noticeUser);
+    @Transactional
+    public int addNoticeUser(Long noticeId, List<SysUser> users) {
+        Long userId = SecurityUtils.getUserId();
+        Date date = new Date();
+        List<Long> userIds = users.stream().map(SysUser::getUserId).collect(Collectors.toList());
+        //查询已经添加的学生
+        List<SysNoticeUser> userList = noticeUserMapper.selectNoticeUsers(noticeId, userIds);
+        List<Long> hasExistIds = userList.stream().map(SysNoticeUser::getUserId).collect(Collectors.toList());
+        List<SysNoticeUser> noticeUsers = new ArrayList<>();
+        for (SysUser user : users) {
+            if (!hasExistIds.contains(user.getUserId())) {
+                SysNoticeUser st = new SysNoticeUser();
+                st.setUserId(user.getUserId());
+                st.setNoticeId(noticeId);
+                st.setCreateBy(userId.toString());
+                st.setCreateTime(date);
+                st.setStatus("0");
+                noticeUsers.add(st);
+            }
         }
-        return 1;
+        if (!noticeUsers.isEmpty()) {
+            noticeUserMapper.insertBatch(noticeUsers);
+        }
+
+        SysNoticeUser noticeUser = new SysNoticeUser();
+        noticeUser.setNoticeId(noticeId);
+        return noticeUserMapper.selectNoticeUserList(noticeUser).size();
     }
 }

+ 13 - 0
ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysNoticeUserServiceImpl.java

@@ -1,6 +1,8 @@
 package com.ruoyi.system.service.impl;
 
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ruoyi.common.core.domain.entity.SysUser;
+import com.ruoyi.common.utils.SecurityUtils;
 import com.ruoyi.system.domain.SysNotice;
 import com.ruoyi.system.domain.SysNoticeUser;
 import com.ruoyi.system.mapper.SysNoticeUserMapper;
@@ -9,7 +11,11 @@ import com.ruoyi.system.service.ISysNoticeUserService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
+import java.util.ArrayList;
+import java.util.Date;
 import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
 
 /**
  * 公告 服务层实现
@@ -95,4 +101,11 @@ public class SysNoticeUserServiceImpl extends ServiceImpl<SysNoticeUserMapper, S
     {
         return noticeUserMapper.deleteNoticeUserByIds(noticeIds);
     }
+
+    @Override
+    public List<Map<String, Object>> selectMyNoticeList(SysNoticeUser notice) {
+        return noticeUserMapper.selectMyNoticeList(notice);
+    }
+
+
 }

+ 54 - 7
ruoyi-system/src/main/resources/mapper/system/SysNoticeUserMapper.xml

@@ -8,6 +8,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         <result property="noticeUserId"       column="notice_user_id"       />
         <result property="noticeId"    column="notice_id"    />
         <result property="userId"     column="user_id"     />
+        <result property="nickName"     column="nick_name"     />
         <result property="status"         column="status"          />
         <result property="createBy"       column="create_by"       />
         <result property="createTime"     column="create_time"     />
@@ -17,23 +18,35 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
     </resultMap>
     
     <sql id="selectNoticeUserVo">
-        select notice_id, notice_user_id, user_id, status, create_by, create_time, update_by, update_time, remark
-		from sys_notice_user
+        SELECT
+            o.notice_id,
+            o.notice_user_id,
+            o.user_id,
+            o.STATUS,
+            o.create_by,
+            o.create_time,
+            o.update_by,
+            o.update_time,
+            o.remark,
+            u.nick_name
+        FROM
+            sys_notice_user o
+                left join sys_user u on u.user_id=o.user_id
     </sql>
     
     <select id="selectNoticeUserById" parameterType="Long" resultMap="SysNoticeUserResult">
         <include refid="selectNoticeUserVo"/>
-        where notice_user_id = #{noticeUserId}
+        where o.notice_user_id = #{noticeUserId}
     </select>
     
     <select id="selectNoticeUserList" parameterType="SysNoticeUser" resultMap="SysNoticeUserResult">
         <include refid="selectNoticeUserVo"/>
         <where>
 			<if test="noticeId != null and noticeId != ''">
-				AND notice_id = #{noticeId}
+				AND o.notice_id = #{noticeId}
 			</if>
 			<if test="userId != null and userId != ''">
-				AND user_id = #{userId}
+				AND o.user_id = #{userId}
 			</if>
 		</where>
     </select>
@@ -68,7 +81,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             <if test="updateBy != null and updateBy != ''">update_by = #{updateBy},</if>
  			update_time = sysdate()
         </set>
-        where notice_id = #{noticeId}
+        where notice_user_id = #{noticeId}
     </update>
 	
     <delete id="deleteNoticeUserById" parameterType="Long">
@@ -81,5 +94,39 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             #{noticeUserId}
         </foreach>
     </delete>
-    
+
+    <select id="selectNoticeUsers" resultType="com.ruoyi.system.domain.SysNoticeUser">
+        select user_id
+        from sys_notice_user
+        where notice_id = #{noticeId} and
+        user_id in
+        <foreach item="id" collection="userIds" open="(" separator="," close=")">
+            #{id}
+        </foreach>;
+    </select>
+
+    <!--只做为公告关联用户时使用-->
+    <insert id="insertBatch">
+        INSERT INTO sys_notice_user (notice_id, user_id,create_time,create_by,status)
+        VALUES
+        <foreach collection="list" item="item" index="index" separator=",">
+            (#{item.noticeId}, #{item.userId},#{item.createTime},#{item.createBy},#{item.status})
+        </foreach>
+    </insert>
+
+    <select id="selectMyNoticeList" parameterType="SysNoticeUser" resultType="map">
+        select n.*,u.`status` 'readStatus',u.notice_user_id from sys_notice_user u
+        LEFT JOIN sys_notice n on n.notice_id=u.notice_id
+        <where>
+            <if test="noticeId != null and noticeId != ''">
+                AND u.notice_id = #{noticeId}
+            </if>
+            <if test="userId != null and userId != ''">
+                AND u.user_id = #{userId}
+            </if>
+            <if test="status != null and status != ''">
+                AND u.status = #{status}
+            </if>
+        </where>
+    </select>
 </mapper>

+ 4 - 1
ruoyi-system/src/main/resources/mapper/system/SysUserMapper.xml

@@ -58,7 +58,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
     </sql>
     
     <select id="selectUserList" parameterType="SysUser" resultMap="SysUserResult">
-		select u.user_id, u.dept_id, u.nick_name, u.user_name, u.email, u.avatar, u.phonenumber, u.sex, u.status, u.del_flag, u.login_ip, u.login_date, u.create_by, u.create_time, u.remark, d.dept_name, d.leader,u.open_id from sys_user u
+		select u.user_id, u.dept_id, u.nick_name, u.user_name, u.email, u.avatar, u.user_type,u.phonenumber, u.sex, u.status, u.del_flag, u.login_ip, u.login_date, u.create_by, u.create_time, u.remark, d.dept_name, d.leader,u.open_id from sys_user u
 		left join sys_dept d on u.dept_id = d.dept_id
 		where u.del_flag = '0'
 		<if test="userId != null and userId != 0">
@@ -70,6 +70,9 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 		<if test="status != null and status != ''">
 			AND u.status = #{status}
 		</if>
+		<if test="userType != null and userType != ''">
+			AND u.user_type = #{userType}
+		</if>
 		<if test="openId != null and openId != ''">
 			AND u.open_id = #{openId}
 		</if>

+ 1 - 1
ruoyi-ui/src/views/system/user/index.vue

@@ -673,4 +673,4 @@ export default {
     }
   }
 };
-</script>
+</script>

+ 16 - 1
ruoyi-vue/src/api/system/notice.js

@@ -49,4 +49,19 @@ export function delNotice(noticeId) {
     url: '/system/notice/' + noticeId,
     method: 'delete'
   })
-}
+}
+
+export function addNoticeUser(noticeId,data) {
+  return request({
+    url: '/system/notice/addNoticeUser/' + noticeId,
+    method: 'post',
+    data: data
+  })
+}
+
+export function removeNoticeUser(noticeUserIds) {
+  return request({
+    url: '/system/notice/removeNoticeUser/' + noticeUserIds,
+    method: 'get'
+  })
+}

+ 4 - 4
ruoyi-vue/src/views/care/companies/index.vue

@@ -85,11 +85,11 @@
 
     <el-table v-loading="loading" :data="companiesList" @selection-change="handleSelectionChange">
       <el-table-column type="selection" width="55" align="center" />
-      <el-table-column label="公司名称" align="center" prop="name" show-overflow-tooltip/>
+      <el-table-column label="公司名称" align="center" prop="name" width="255" show-overflow-tooltip/>
       <el-table-column label="登录名" align="center" prop="loginName" />
-      <el-table-column label="公司地址" align="center" prop="address" show-overflow-tooltip/>
-      <el-table-column label="公司法人" align="center" prop="legalPerson" />
-      <el-table-column label="公司联系电话" align="center" prop="phoneNumber" />
+<!--      <el-table-column label="公司地址" align="center" prop="address" show-overflow-tooltip/>-->
+<!--      <el-table-column label="公司法人" align="center" prop="legalPerson" />-->
+<!--      <el-table-column label="公司联系电话" align="center" prop="phoneNumber" />-->
       <el-table-column label="每日可派单人数" align="center" prop="dispatchPersonNumber" />
       <el-table-column label="公司状态" align="center" prop="status">
         <template #default="scope">

+ 202 - 0
ruoyi-vue/src/views/system/notice/choose_user.vue

@@ -0,0 +1,202 @@
+<template>
+  <div class="app-container">
+    <el-row :gutter="20">
+      <!--部门数据-->
+      <el-col :span="4" :xs="24">
+        <div class="head-container">
+          <el-tree
+              :data="deptOptions"
+              :props="{ label: 'label', children: 'children' }"
+              :expand-on-click-node="false"
+              :filter-node-method="filterNode"
+              ref="deptTreeRef"
+              node-key="id"
+              highlight-current
+              default-expand-all
+              @node-click="handleNodeClick"
+          />
+        </div>
+      </el-col>
+      <!--用户数据-->
+      <el-col :span="20" :xs="24">
+        <el-form :model="queryParams" ref="queryRef" :inline="true" v-show="showSearch" label-width="68px">
+          <el-form-item label="登录名" prop="userName">
+            <el-input
+                v-model="queryParams.userName"
+                placeholder="请输入登录名"
+                clearable
+                style="width: 240px"
+                @keyup.enter="handleQuery"
+            />
+          </el-form-item>
+          <el-form-item label="手机号码" prop="phonenumber">
+            <el-input
+                v-model="queryParams.phonenumber"
+                placeholder="请输入手机号码"
+                clearable
+                style="width: 240px"
+                @keyup.enter="handleQuery"
+            />
+          </el-form-item>
+          <el-form-item label="用户类型" prop="userType">
+            <el-select
+                v-model="queryParams.userType"
+                placeholder="用户类型"
+                clearable
+                style="width: 240px"
+            >
+              <el-option
+                  v-for="dict in sys_user_type"
+                  :key="dict.value"
+                  :label="dict.label"
+                  :value="dict.value"
+              />
+            </el-select>
+          </el-form-item>
+          <el-form-item>
+            <el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button>
+            <el-button icon="Refresh" @click="resetQuery">重置</el-button>
+          </el-form-item>
+        </el-form>
+
+        <el-table v-loading="loading" :data="userList" @selection-change="handleSelectionChange" row-key="userId">
+          <el-table-column type="selection" width="50" align="center" :reserve-selection="true" />
+          <el-table-column label="用户编号" align="center" key="userId" prop="userId" v-if="columns[0].visible" />
+          <el-table-column label="用户名称" align="center" key="userName" prop="userName" v-if="columns[1].visible" :show-overflow-tooltip="true" />
+          <el-table-column label="用户昵称" align="center" key="nickName" prop="nickName" v-if="columns[2].visible" :show-overflow-tooltip="true" />
+          <el-table-column label="部门" align="center" key="deptName" prop="dept.deptName" v-if="columns[3].visible" :show-overflow-tooltip="true" />
+          <el-table-column label="手机号码" align="center" key="phonenumber" prop="phonenumber" v-if="columns[4].visible" width="120" />
+          <el-table-column label="类型" align="center" key="userType" v-if="columns[5].visible">
+            <template #default="scope">
+              <dict-tag :options="sys_user_type" :value="scope.row.userType" />
+            </template>
+          </el-table-column>
+        </el-table>
+        <pagination
+            v-show="total > 0"
+            :total="total"
+            v-model:page="queryParams.pageNum"
+            v-model:limit="queryParams.pageSize"
+            @pagination="getList"
+        />
+      </el-col>
+    </el-row>
+
+
+  </div>
+</template>
+
+<script setup name="User">
+
+import {  listUser, deptTreeSelect } from "@/api/system/user";
+
+const router = useRouter();
+const { proxy } = getCurrentInstance();
+const { sys_user_type } = proxy.useDict("sys_user_type");
+
+const userList = ref([]);
+const open = ref(false);
+const loading = ref(true);
+const showSearch = ref(true);
+const ids = ref([]);
+const single = ref(true);
+const multiple = ref(true);
+const total = ref(0);
+const dateRange = ref([]);
+const deptOptions = ref(undefined);
+
+
+const emit = defineEmits(['sendUsersToNotice']);
+//公告关联用户传递对象
+const rows = ref([]);
+
+
+// 列显隐信息
+const columns = ref([
+  { key: 0, label: `用户编号`, visible: true },
+  { key: 1, label: `用户名称`, visible: true },
+  { key: 2, label: `用户昵称`, visible: true },
+  { key: 3, label: `部门`, visible: true },
+  { key: 4, label: `手机号码`, visible: true },
+  { key: 5, label: `类型`, visible: true },
+  { key: 6, label: `状态`, visible: true },
+  { key: 7, label: `创建时间`, visible: true },
+]);
+
+const data = reactive({
+  form: {},
+  queryParams: {
+    pageNum: 1,
+    pageSize: 10,
+    userName: undefined,
+    phonenumber: undefined,
+    status: 0,
+    deptId: undefined,
+    userType:undefined
+  }
+});
+
+const { queryParams, form, rules } = toRefs(data);
+
+/** 通过条件过滤节点  */
+const filterNode = (value, data) => {
+  if (!value) return true;
+  return data.label.indexOf(value) !== -1;
+};
+/** 查询部门下拉树结构 */
+function getDeptTree() {
+  deptTreeSelect().then(response => {
+    deptOptions.value = response.data;
+  });
+};
+/** 查询用户列表 */
+function getList() {
+  loading.value = true;
+  listUser(proxy.addDateRange(queryParams.value, dateRange.value)).then(res => {
+    loading.value = false;
+    userList.value = res.rows;
+    total.value = res.total;
+  });
+};
+/** 节点单击事件 */
+function handleNodeClick(data) {
+  queryParams.value.deptId = data.id;
+  handleQuery();
+};
+/** 搜索按钮操作 */
+function handleQuery() {
+  queryParams.value.pageNum = 1;
+  getList();
+};
+/** 重置按钮操作 */
+function resetQuery() {
+  dateRange.value = [];
+  proxy.resetForm("queryRef");
+  queryParams.value.deptId = undefined;
+  proxy.$refs.tree.setCurrentKey(null);
+  handleQuery();
+};
+
+/** 选择条数  */
+function handleSelectionChange(selection) {
+  rows.value = selection;
+  ids.value = selection.map(item => item.userId);
+  single.value = selection.length != 1;
+  multiple.value = !selection.length;
+
+  //公告关联用户操作
+  sendUsersToNotice();
+};
+
+
+/** 取消按钮 */
+function cancel() {
+  open.value = false;
+};
+
+function sendUsersToNotice(){
+  emit('sendUsersToNotice', rows.value)
+}
+getDeptTree();
+getList();
+</script>

+ 54 - 31
ruoyi-vue/src/views/system/notice/notice_user.vue

@@ -43,11 +43,27 @@
 
     <el-table v-loading="loading" :data="userList" @selection-change="handleSelectionChange" :row-key="getRowKey">
       <el-table-column type="selection" width="55" align="center"/>
-      <el-table-column label="名字" align="center" prop="name"/>
-      <el-table-column label="类型" align="center" prop="userType"/>
+      <el-table-column label="名字" align="center" prop="nickName"/>
+<!--      <el-table-column label="类型" align="center" prop="userType"/>-->
+      <el-table-column label="状态" align="center" prop="status">
+        <template #default="scope">
+          <div v-if="scope.row.status == '0'">
+            <span class="el-tag el-tag--danger el-tag--light" index="1" data-v-00e5bcbc=""><span class="el-tag__content">未读</span><!--v-if--></span>
+          </div>
+          <div v-else>
+            <span class="el-tag el-tag--default el-tag--light" index="1" data-v-00e5bcbc=""><span class="el-tag__content">已读</span><!--v-if--></span>
+          </div>
+        </template>
+      </el-table-column>
       <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
         <template #default="scope">
-          <el-button link type="primary" icon="Delete" @click="handleDelete(scope.row)">移除</el-button>
+          <div v-if="scope.row.status == '0'">
+            <el-button link type="primary" icon="Delete" @click="handleDelete(scope.row)">移除</el-button>
+          </div>
+          <div v-else>
+            ——
+          </div>
+
         </template>
       </el-table-column>
     </el-table>
@@ -61,11 +77,11 @@
     />
 
     <!--关联学生-->
-    <el-dialog title="选择用户" v-model="userOpen" append-to-body style="padding: 20px 60px;">
-
+    <el-dialog title="选择用户" v-model="userOpen" append-to-body  :style="{ width:'1200px','overflow-y': 'auto' }"  width="1200px">
+      <UserList @sendUsersToNotice="getUsers"></UserList>
       <template #footer>
         <div class="dialog-footer">
-          <el-button type="success" @click="addStudent">添加用户</el-button>
+          <el-button type="success" @click="addUser">添加用户</el-button>
         </div>
       </template>
     </el-dialog>
@@ -73,10 +89,10 @@
 </template>
 
 <script setup name="noticeUser">
-import { listNoticeUser } from "@/api/system/notice";
-
+import {listNoticeUser, addNoticeUser, removeNoticeUser, delNotice} from "@/api/system/notice";
+import UserList from "@/views/system/notice/choose_user.vue";
+import {delProtocol} from "@/api/care/protocol";
 const router = useRoute();
-const rows = ref([]);
 const {proxy} = getCurrentInstance();
 const noticeId=ref("");
 const noticeTitle = ref("");
@@ -90,8 +106,7 @@ const single = ref(true);
 const multiple = ref(true);
 const total = ref(0);
 const title = ref("");
-const classLoading = ref(true);
-const classList = ref([]);
+
 const addUsers = ref([]);
 
 const data = reactive({
@@ -111,6 +126,10 @@ function getRowKey(row) {
   return row.studentId;
 }
 
+function getUsers(value) {
+  addUsers.value = value;
+}
+
 /** 查询已选择的用户列表 */
 function getList() {
   loading.value = true;
@@ -147,38 +166,42 @@ function handleAddUser() {
   title.value = "选择学生";
 }
 
-function getStudents(value) {
-  addUsers.value = value;
-}
-
-function addStudent() {
+function addUser() {
   if (addUsers.value.length > 0) {
-    console.info(noticeId.value+"-----"+addUsers.value);
+    console.info(JSON.stringify(noticeId.value)+"-----"+JSON.stringify(addUsers.value));
+    addNoticeUser(noticeId.value, addUsers.value).then(res => {
+      if (res.code === 200) {
+        proxy.$modal.confirm("添加成功,人数总共:" + res.data + "人,是否继续添加?", "提示", {
+          confirmButtonText: "继续添加",
+          cancelButtonText: "关闭窗口",
+          showClose: false,
+          type: "success",
+        }).catch(() => {
+          getList();
+          userOpen.value = false;
+        });
+      }
+    })
   } else {
-    proxy.$modal.msgWarning("请先选择学生后再添加");
+    proxy.$modal.msgWarning("请先选择用户后再添加");
   }
 
 }
 
 /** 删除按钮操作 */
 function handleDelete(row) {
-  const _studentIds = row.studentId ? [row.studentId] : ids.value;
-  // proxy.$modal.confirm('是否确认移除所选中的学生?').then(function () {
-  //   if (routerType.value === "paper") {
-  //     return removePaperStudent(paperId.value, _studentIds);
-  //   } else {
-  //     return removePracticeStudent(paperId.value, _studentIds);
-  //   }
-  // }).then(() => {
-  //   getList();
-  //   proxy.$modal.msgSuccess("移除成功");
-  // }).catch(() => {
-  // });
+  const noticeUserIds = row.noticeUserId ? [row.noticeUserId] : ids.value;
+  proxy.$modal.confirm('是否确认移除该用户?"' + noticeUserIds + '"').then(function() {
+    return removeNoticeUser(noticeUserIds);
+  }).then(() => {
+    getList();
+    proxy.$modal.msgSuccess("移除成功");
+  }).catch(() => {});
 }
 
 
 (() => {
-  noticeId.value = router.params;
+  noticeId.value = router.params.id;
   noticeTitle.value = router.query && router.query.noticeTitle;
 
   if (noticeId.value) {

+ 28 - 6
ruoyi-vue/src/views/system/user/index.vue

@@ -47,6 +47,21 @@
                      @keyup.enter="handleQuery"
                   />
                </el-form-item>
+              <el-form-item label="用户类型" prop="userType">
+                <el-select
+                    v-model="queryParams.userType"
+                    placeholder="用户类型"
+                    clearable
+                    style="width: 240px"
+                >
+                  <el-option
+                      v-for="dict in sys_user_type"
+                      :key="dict.value"
+                      :label="dict.label"
+                      :value="dict.value"
+                  />
+                </el-select>
+              </el-form-item>
                <el-form-item label="状态" prop="status">
                   <el-select
                      v-model="queryParams.status"
@@ -136,7 +151,12 @@
                <el-table-column label="用户昵称" align="center" key="nickName" prop="nickName" v-if="columns[2].visible" :show-overflow-tooltip="true" />
                <el-table-column label="部门" align="center" key="deptName" prop="dept.deptName" v-if="columns[3].visible" :show-overflow-tooltip="true" />
                <el-table-column label="手机号码" align="center" key="phonenumber" prop="phonenumber" v-if="columns[4].visible" width="120" />
-               <el-table-column label="状态" align="center" key="status" v-if="columns[5].visible">
+              <el-table-column label="类型" align="center" key="userType" v-if="columns[5].visible">
+                <template #default="scope">
+                  <dict-tag :options="sys_user_type" :value="scope.row.userType" />
+                </template>
+              </el-table-column>
+               <el-table-column label="状态" align="center" key="status" v-if="columns[6].visible">
                   <template #default="scope">
                      <el-switch
                         v-model="scope.row.status"
@@ -146,7 +166,7 @@
                      ></el-switch>
                   </template>
                </el-table-column>
-               <el-table-column label="创建时间" align="center" prop="createTime" v-if="columns[6].visible" width="160">
+               <el-table-column label="创建时间" align="center" prop="createTime" v-if="columns[7].visible" width="160">
                   <template #default="scope">
                      <span>{{ parseTime(scope.row.createTime) }}</span>
                   </template>
@@ -335,7 +355,7 @@ import { changeUserStatus, listUser, resetUserPwd, delUser, getUser, updateUser,
 
 const router = useRouter();
 const { proxy } = getCurrentInstance();
-const { sys_normal_disable, sys_user_sex } = proxy.useDict("sys_normal_disable", "sys_user_sex");
+const { sys_normal_disable, sys_user_sex,sys_user_type } = proxy.useDict("sys_normal_disable", "sys_user_sex","sys_user_type");
 
 const userList = ref([]);
 const open = ref(false);
@@ -374,8 +394,9 @@ const columns = ref([
   { key: 2, label: `用户昵称`, visible: true },
   { key: 3, label: `部门`, visible: true },
   { key: 4, label: `手机号码`, visible: true },
-  { key: 5, label: `状态`, visible: true },
-  { key: 6, label: `创建时间`, visible: true }
+  { key: 5, label: `类型`, visible: true },
+  { key: 6, label: `状态`, visible: true },
+  { key: 7, label: `创建时间`, visible: true },
 ]);
 
 const data = reactive({
@@ -386,7 +407,8 @@ const data = reactive({
     userName: undefined,
     phonenumber: undefined,
     status: undefined,
-    deptId: undefined
+    deptId: undefined,
+    userType:undefined
   },
   rules: {
     userName: [{ required: true, message: "用户名称不能为空", trigger: "blur" }, { min: 2, max: 20, message: "用户名称长度必须介于 2 和 20 之间", trigger: "blur" }],