Quellcode durchsuchen

feat(system): 支持用户负责区域多选功能

- 修改数据库查询逻辑以支持逗号分隔的区域字段解析- 更新前端界面实现区域多选下拉框
- 调整数据回显逻辑以适应数组格式的区域值
-优化区域字段保存逻辑,将数组转换为逗号分隔字符串
- 移除未使用的HashMap导入语句
- 格式化Java代码中的条件判断与方法调用空格
jiangbiao vor 1 Monat
Ursprung
Commit
5f3bd6b3af

+ 2 - 3
master/src/main/java/com/ruoyi/project/system/controller/SysUserController.java

@@ -25,7 +25,6 @@ import org.springframework.web.bind.annotation.*;
 import org.springframework.web.multipart.MultipartFile;
 
 import java.io.IOException;
-import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 import java.util.Objects;
@@ -112,8 +111,8 @@ public class SysUserController extends BaseController
         list.forEach(item->{
             item.entrySet().stream().forEach(entry->{
                 Object nickname = item.get("NICKNAME");
-                if (Objects.nonNull(nickname)){
-                    item.replace("NICKNAME",String.valueOf(nickname).replace(",",","));
+                if (Objects.nonNull(nickname)) {
+                    item.replace("NICKNAME", String.valueOf(nickname).replace(",", ","));
                 }
             });
         });

+ 27 - 23
master/src/main/resources/mybatis/system/SysUserMapper.xml

@@ -98,29 +98,33 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 	</select>
 
 	<select id="selectUserByMgrRegion" parameterType="tStaffmgr" resultType="map">
-		SELECT
-		a.region "REGION",
-		listagg ( b.NICK_NAME, ',' ) within GROUP ( ORDER BY a.region ) "NICKNAME",
-		listagg ( b.user_id, ',' ) within GROUP ( ORDER BY a.region ) "USERID"
-		FROM
-		T_STAFFMGR a
-		LEFT JOIN SYS_USER b ON a.STAFFID = b.STAFFID
-		LEFT JOIN sys_dept d ON a.dept_id = d.dept_id
-		<where>
-			(
-			a.region = '芳烃抽提'
-			OR a.region = '汽油加氢'
-			OR a.region = '压缩'
-			OR a.region = '分离'
-			OR a.region = '裂解'
-			)
-			AND a.DEL_FLAG = 0
-			AND b.USER_ID IS NOT NULL
-		</where>
-		${params.dataScope}
-		GROUP BY
-		a.region
-	</select>
+            <![CDATA[
+  WITH split_regions AS (
+    SELECT
+        a.STAFFID,
+        a.DEL_FLAG,
+        a.dept_id,
+        TRIM(REGEXP_SUBSTR(a.region, '[^,]+', 1, LEVEL)) as single_region
+    FROM T_STAFFMGR a
+    WHERE (a.region LIKE '%芳烃抽提%' OR a.region LIKE '%汽油加氢%' OR a.region LIKE '%压缩%'
+           OR a.region LIKE '%分离%' OR a.region LIKE '%裂解%')
+      AND a.DEL_FLAG = 0
+    CONNECT BY LEVEL <= REGEXP_COUNT(a.region, '[^,]+')
+       AND PRIOR a.STAFFID = a.STAFFID
+       AND PRIOR DBMS_RANDOM.VALUE IS NOT NULL
+  )
+  SELECT
+      sr.single_region AS "REGION",
+      LISTAGG(b.NICK_NAME, ',') WITHIN GROUP (ORDER BY b.NICK_NAME) AS "NICKNAME",
+      LISTAGG(b.user_id, ',') WITHIN GROUP (ORDER BY b.user_id) AS "USERID"
+  FROM split_regions sr
+  LEFT JOIN SYS_USER b ON sr.STAFFID = b.STAFFID
+  LEFT JOIN sys_dept d ON sr.dept_id = d.dept_id
+  WHERE b.USER_ID IS NOT NULL
+  ]]>
+                ${params.dataScope}
+            GROUP BY sr.single_region
+        </select>
 
 	<select id="selectAllUser" resultType="SysUser">
 		select * from sys_user u where u.del_flag = '0'

+ 7 - 1
ui/src/views/plant/staffmgr/index.vue

@@ -421,7 +421,7 @@
           </el-col>
           <el-col :span="12"  v-else>
             <el-form-item :label="$t('负责区域')" prop="region">
-              <el-select v-model="form.region" :placeholder="$t('请选择') + $t('负责区域')">
+              <el-select v-model="form.region" multiple :placeholder="$t('请选择') + $t('负责区域')">
                 <el-option
                   v-for="dict in regionOptions"
                   :key="dict.dictValue"
@@ -1109,6 +1109,9 @@
           }else {
             this.specialDutys = [];
           }
+          if (response.data.region){
+            this.form.region = response.data.region.split(',');
+          }
           this.open = true;
           this.notPhoto = true;
           this.title = this.$t('修改') +  this.$t('人员管理');
@@ -1121,6 +1124,9 @@
           if (valid) {
             /*this.$refs.photo.submit();*/
             this.form.specialDuty = this.specialDutys.join();
+            if (this.form.region) {
+              this.form.region = this.form.region.join(',');
+            }
             if (this.form.id != null) {
               updateStaffmgr(this.form).then(response => {
                 this.msgSuccess(this.$t('修改成功'));