From a4b14a35a2209a30e53472e6333b13aa4a55b0eb Mon Sep 17 00:00:00 2001
From: wlzboy <66905212@qq.com>
Date: 星期二, 30 十二月 2025 22:14:25 +0800
Subject: [PATCH] feat:增加创建任务
---
app/pages/task/create.vue | 13
app/utils/request.js | 14
prd/用户创建任务权限前端控制功能说明.md | 404 ++++++++++++++++++++++++++++
sql/add_can_create_task_to_sys_user.sql | 16 +
ruoyi-system/src/main/resources/mapper/system/SysUserMapper.xml | 6
app/utils/constant.js | 3
app/store/modules/user.js | 8
ruoyi-system/src/main/java/com/ruoyi/system/domain/UserSyncDTO.java | 14 +
ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysLoginController.java | 1
ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysUser.java | 16 +
ruoyi-system/src/main/resources/mapper/system/UserSyncMapper.xml | 7
app/pagesTask/components/HospitalSelector.vue | 9
prd/用户创建任务单权限功能说明.md | 301 +++++++++++++++++++++
ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/VehicleGpsController.java | 4
ruoyi-system/src/main/java/com/ruoyi/system/service/impl/UserSyncServiceImpl.java | 8
15 files changed, 807 insertions(+), 17 deletions(-)
diff --git a/app/pages/task/create.vue b/app/pages/task/create.vue
index 748bc8e..097fe25 100644
--- a/app/pages/task/create.vue
+++ b/app/pages/task/create.vue
@@ -26,6 +26,8 @@
</template>
<script>
+import { mapState } from 'vuex'
+
export default {
data() {
return {
@@ -70,8 +72,19 @@
]
}
},
+ computed: {
+ ...mapState({
+ canCreateTask: state => state.user.canCreateTask
+ })
+ },
methods: {
selectTaskCategory(category) {
+ // 妫�鏌ユ槸鍚︽湁鍒涘缓浠诲姟鐨勬潈闄�
+ if (this.canCreateTask !== '1') {
+ this.$modal.msgError('鎮ㄦ病鏈夋潈闄愬垱寤轰换鍔�')
+ return
+ }
+
// 璺宠浆鍒板搴旂殑浠诲姟鍒涘缓椤甸潰
uni.navigateTo({
url: `${category.page}?categoryName=${category.name}&categoryType=${category.type}&taskType=${category.taskType}`
diff --git a/app/pagesTask/components/HospitalSelector.vue b/app/pagesTask/components/HospitalSelector.vue
index 6d6443e..3b2dd62 100644
--- a/app/pagesTask/components/HospitalSelector.vue
+++ b/app/pagesTask/components/HospitalSelector.vue
@@ -185,8 +185,9 @@
this.searchResults = response.data || []
this.showResults = true
}).catch(error => {
- console.error('鎼滅储鍖婚櫌澶辫触:', error)
+ // console.error('鎼滅储鍖婚櫌澶辫触:', error)
this.searchResults = []
+ // this.showResults = false
})
},
@@ -215,9 +216,9 @@
this.searchResults = this.defaultHospitals
this.showResults = true
this.hasLoadedDefault = true
- console.log('鍔犺浇榛樿鍖婚櫌鍒楄〃锛屾暟閲�:', this.defaultHospitals.length)
+ // console.log('鍔犺浇榛樿鍖婚櫌鍒楄〃锛屾暟閲�:', this.defaultHospitals.length)
}).catch(error => {
- console.error('鍔犺浇榛樿鍖婚櫌鍒楄〃澶辫触:', error)
+ // console.error('鍔犺浇榛樿鍖婚櫌鍒楄〃澶辫触:', error)
this.defaultHospitals = []
})
},
@@ -303,7 +304,7 @@
this.showAddressSuggestions = false
}
}).catch(error => {
- console.error('鎼滅储鍦板潃澶辫触:', error)
+ // console.error('鎼滅储鍦板潃澶辫触:', error)
this.addressSuggestions = []
this.showAddressSuggestions = false
})
diff --git a/app/store/modules/user.js b/app/store/modules/user.js
index 66b252d..45113d9 100644
--- a/app/store/modules/user.js
+++ b/app/store/modules/user.js
@@ -19,7 +19,8 @@
deptId: storage.get(constant.deptId),
branchCompanyId: storage.get(constant.branchCompanyId),
branchCompanyName: storage.get(constant.branchCompanyName),
- oaUserId: storage.get(constant.oaUserId)
+ oaUserId: storage.get(constant.oaUserId),
+ canCreateTask: storage.get(constant.canCreateTask)
},
mutations: {
@@ -65,6 +66,10 @@
SET_OA_USER_ID: (state, oaUserId) => {
state.oaUserId = oaUserId
storage.set(constant.oaUserId, oaUserId)
+ },
+ SET_CAN_CREATE_TASK: (state, canCreateTask) => {
+ state.canCreateTask = canCreateTask
+ storage.set(constant.canCreateTask, canCreateTask)
}
},
@@ -124,6 +129,7 @@
commit('SET_BRANCH_COMPANY_ID', res.branchCompanyId)
commit('SET_BRANCH_COMPANY_NAME', res.branchCompanyName)
commit('SET_OA_USER_ID', res.oaUserId)
+ commit('SET_CAN_CREATE_TASK', res.canCreateTask)
resolve(res)
}).catch(error => {
reject(error)
diff --git a/app/utils/constant.js b/app/utils/constant.js
index b084c8c..4133a31 100644
--- a/app/utils/constant.js
+++ b/app/utils/constant.js
@@ -8,7 +8,8 @@
deptId: 'vuex_deptId',
branchCompanyId: 'vuex_branchCompanyId',
branchCompanyName: 'vuex_branchCompanyName',
- oaUserId: 'vuex_oaUserId'
+ oaUserId: 'vuex_oaUserId',
+ canCreateTask: 'vuex_canCreateTask'
}
export default constant
diff --git a/app/utils/request.js b/app/utils/request.js
index f2fad21..fd6c1d7 100644
--- a/app/utils/request.js
+++ b/app/utils/request.js
@@ -54,9 +54,9 @@
reject('鏃犳晥鐨勪細璇濓紝鎴栬�呬細璇濆凡杩囨湡锛岃閲嶆柊鐧诲綍銆�')
} else if (code === 500) {
// checkDuplicate 鎺ュ彛涓嶆樉绀� toast锛岃涓氬姟浠g爜鑷繁澶勭悊
- if (!isCheckDuplicateApi) {
- toast(msg)
- }
+ // if (!isCheckDuplicateApi) {
+ // toast(msg)
+ // }
// checkDuplicate 鎺ュ彛杩斿洖瀹屾暣鍝嶅簲锛屼笉 reject
if (isCheckDuplicateApi) {
resolve(res.data)
@@ -65,9 +65,9 @@
reject('500')
} else if (code !== 200) {
// checkDuplicate 鎺ュ彛涓嶆樉绀� toast锛岃涓氬姟浠g爜鑷繁澶勭悊
- if (!isCheckDuplicateApi) {
- toast(msg)
- }
+ // if (!isCheckDuplicateApi) {
+ // toast(msg)
+ // }
// checkDuplicate 鎺ュ彛杩斿洖瀹屾暣鍝嶅簲锛屼笉 reject
if (isCheckDuplicateApi) {
resolve(res.data)
@@ -86,7 +86,7 @@
} else if (message.includes('Request failed with status code')) {
message = '绯荤粺鎺ュ彛' + message.substr(message.length - 3) + '寮傚父'
}
- toast(message)
+ // toast(message)
reject(error)
})
})
diff --git "a/prd/\347\224\250\346\210\267\345\210\233\345\273\272\344\273\273\345\212\241\345\215\225\346\235\203\351\231\220\345\212\237\350\203\275\350\257\264\346\230\216.md" "b/prd/\347\224\250\346\210\267\345\210\233\345\273\272\344\273\273\345\212\241\345\215\225\346\235\203\351\231\220\345\212\237\350\203\275\350\257\264\346\230\216.md"
new file mode 100644
index 0000000..4bee57f
--- /dev/null
+++ "b/prd/\347\224\250\346\210\267\345\210\233\345\273\272\344\273\273\345\212\241\345\215\225\346\235\203\351\231\220\345\212\237\350\203\275\350\257\264\346\230\216.md"
@@ -0,0 +1,301 @@
+# 鐢ㄦ埛鍒涘缓浠诲姟鍗曟潈闄愬姛鑳借鏄�
+
+## 馃搵 鍔熻兘姒傝堪
+鍦� sys_user 琛ㄤ腑鏂板 `can_create_task` 瀛楁锛岀敤浜庢爣璇嗙敤鎴锋槸鍚﹀叿鏈夊垱寤轰换鍔″崟鐨勬潈闄愩�傝瀛楁浠� OA 绯荤粺鐨� `OA_User` 琛ㄤ腑鐨� `OA_Power` 瀛楁鍚屾鑰屾潵銆�
+
+## 馃幆 鍚屾瑙勫垯
+褰� `OA_Power` 瀛楁鍖呭惈 `,020101,` 鏃讹紝鐢ㄦ埛鍏锋湁鍒涘缓浠诲姟鍗曟潈闄愩��
+
+**SQL 鍒ゆ柇閫昏緫**锛�
+```sql
+CASE
+ WHEN OA_Power LIKE '%,020101,%' THEN '1'
+ ELSE '0'
+END AS can_create_task
+```
+
+## 馃敤 瀹炵幇鍐呭
+
+### 1. 鏁版嵁搴撲慨鏀�
+
+#### 娣诲姞瀛楁
+**鏂囦欢**: `sql/add_can_create_task_to_sys_user.sql`
+
+```sql
+ALTER TABLE sys_user ADD COLUMN can_create_task CHAR(1) DEFAULT '0' COMMENT '鏄惁鍙垱寤轰换鍔″崟锛�0鍚� 1鏄級';
+CREATE INDEX idx_can_create_task ON sys_user(can_create_task);
+```
+
+**瀛楁璇存槑**锛�
+- **瀛楁鍚�**: `can_create_task`
+- **绫诲瀷**: `CHAR(1)`
+- **榛樿鍊�**: `'0'` (涓嶅彲鍒涘缓)
+- **鍙�夊��**:
+ - `'0'`: 涓嶅彲鍒涘缓浠诲姟鍗�
+ - `'1'`: 鍙互鍒涘缓浠诲姟鍗�
+- **绱㈠紩**: 宸叉坊鍔犵储寮� `idx_can_create_task` 鏂逛究鏌ヨ
+
+### 2. 瀹炰綋绫讳慨鏀�
+
+#### SysUser 瀹炰綋
+**鏂囦欢**: `ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysUser.java`
+
+**鏂板瀛楁**锛�
+```java
+/** 鏄惁鍙垱寤轰换鍔″崟锛�0鍚� 1鏄級 */
+@Excel(name = "鍙垱寤轰换鍔″崟", readConverterExp = "0=鍚�,1=鏄�")
+private String canCreateTask;
+
+public String getCanCreateTask() {
+ return canCreateTask;
+}
+
+public void setCanCreateTask(String canCreateTask) {
+ this.canCreateTask = canCreateTask;
+}
+```
+
+### 3. DTO 灞備慨鏀�
+
+#### UserSyncDTO
+**鏂囦欢**: `ruoyi-system/src/main/java/com/ruoyi/system/domain/UserSyncDTO.java`
+
+**鏂板瀛楁**锛�
+```java
+/** 鏄惁鍙垱寤轰换鍔″崟锛�0鍚� 1鏄級 */
+private String canCreateTask;
+
+public String getCanCreateTask() {
+ return canCreateTask;
+}
+
+public void setCanCreateTask(String canCreateTask) {
+ this.canCreateTask = canCreateTask;
+}
+```
+
+### 4. Mapper 灞備慨鏀�
+
+#### UserSyncMapper.xml
+**鏂囦欢**: `ruoyi-system/src/main/resources/mapper/system/UserSyncMapper.xml`
+
+**淇敼鍐呭**锛�
+1. 鍦� resultMap 涓坊鍔犲瓧娈垫槧灏�
+2. 鍦� SQL 鏌ヨ涓坊鍔� CASE 鍒ゆ柇閫昏緫
+
+```xml
+<result property="canCreateTask" column="can_create_task" />
+
+<!-- SQL 鏌ヨ娣诲姞 -->
+CASE
+ WHEN OA_Power LIKE '%,020101,%' THEN '1'
+ ELSE '0'
+END AS can_create_task
+```
+
+#### SysUserMapper.xml
+**鏂囦欢**: `ruoyi-system/src/main/resources/mapper/system/SysUserMapper.xml`
+
+**淇敼鍐呭**锛�
+1. resultMap 娣诲姞瀛楁鏄犲皠
+2. selectUserVo 鏌ヨ娣诲姞瀛楁
+3. insertUser 娣诲姞瀛楁鎻掑叆
+4. updateUser 娣诲姞瀛楁鏇存柊
+
+### 5. Service 灞備慨鏀�
+
+#### UserSyncServiceImpl
+**鏂囦欢**: `ruoyi-system/src/main/java/com/ruoyi/system/service/impl/UserSyncServiceImpl.java`
+
+**淇敼鍐呭**锛�
+
+**鏇存柊宸插瓨鍦ㄧ敤鎴�**锛�
+```java
+if (StringUtils.isNotEmpty(dto.getCanCreateTask())) {
+ existingUser.setCanCreateTask(dto.getCanCreateTask());
+}
+```
+
+**鍒涘缓鏂扮敤鎴�**锛�
+```java
+if (StringUtils.isNotEmpty(dto.getCanCreateTask())) {
+ newUser.setCanCreateTask(dto.getCanCreateTask());
+}
+```
+
+## 馃搳 鏁版嵁娴佽浆杩囩▼
+
+```
+OA_User (SQL Server)
+ 鈫�
+OA_Power LIKE '%,020101,%'
+ 鈫�
+SQL CASE 鍒ゆ柇
+ 鈫�
+UserSyncDTO.canCreateTask
+ 鈫�
+SysUser.canCreateTask
+ 鈫�
+sys_user.can_create_task
+```
+
+## 馃殌 浣跨敤姝ラ
+
+### 1. 鎵ц鏁版嵁搴撹剼鏈�
+```bash
+mysql -u root -p ry-vue < sql/add_can_create_task_to_sys_user.sql
+```
+
+### 2. 鍚屾鐢ㄦ埛鏁版嵁
+閫氳繃鍚庡彴绠$悊鐣岄潰鎴� API 鎵ц鐢ㄦ埛鍚屾锛�
+```bash
+POST http://localhost:8080/system/dept/sync/user
+Headers:
+ Authorization: Bearer {浣犵殑token}
+```
+
+### 3. 楠岃瘉鍚屾缁撴灉
+```sql
+-- 鏌ョ湅鍏锋湁鍒涘缓浠诲姟鍗曟潈闄愮殑鐢ㄦ埛
+SELECT
+ user_name,
+ nick_name,
+ can_create_task,
+ oa_user_id
+FROM sys_user
+WHERE can_create_task = '1'
+ AND del_flag = '0'
+ORDER BY create_time DESC;
+
+-- 缁熻鏉冮檺鍒嗗竷
+SELECT
+ can_create_task,
+ CASE can_create_task
+ WHEN '1' THEN '鍙垱寤�'
+ ELSE '涓嶅彲鍒涘缓'
+ END AS permission_label,
+ COUNT(*) AS user_count
+FROM sys_user
+WHERE del_flag = '0'
+GROUP BY can_create_task;
+```
+
+## 馃挕 浣跨敤绀轰緥
+
+### 鍦烘櫙1锛氭煡璇㈡湁鏉冮檺鐨勭敤鎴�
+```java
+// 鍦� Service 灞傛坊鍔犳煡璇㈡柟娉�
+public List<SysUser> getUsersWithCreateTaskPermission() {
+ SysUser query = new SysUser();
+ query.setCanCreateTask("1");
+ return userMapper.selectUserList(query);
+}
+```
+
+### 鍦烘櫙2锛氬墠绔潈闄愭帶鍒�
+```javascript
+// 鏍规嵁鐢ㄦ埛鏉冮檺鏄剧ず/闅愯棌鍒涘缓浠诲姟鎸夐挳
+if (user.canCreateTask === '1') {
+ // 鏄剧ず鍒涘缓浠诲姟鎸夐挳
+ showCreateTaskButton();
+} else {
+ // 闅愯棌鍒涘缓浠诲姟鎸夐挳
+ hideCreateTaskButton();
+}
+```
+
+### 鍦烘櫙3锛氬悗绔帴鍙f潈闄愰獙璇�
+```java
+@PreAuthorize("@ss.hasPermi('task:create')")
+@PostMapping("/create")
+public AjaxResult createTask(@RequestBody Task task) {
+ SysUser user = SecurityUtils.getLoginUser().getUser();
+ if (!"1".equals(user.getCanCreateTask())) {
+ return AjaxResult.error("鎮ㄦ病鏈夊垱寤轰换鍔″崟鐨勬潈闄�");
+ }
+ // 鍒涘缓浠诲姟閫昏緫
+ return taskService.createTask(task);
+}
+```
+
+## 馃摑 娉ㄦ剰浜嬮」
+
+### 閲嶈鎻愮ず
+1. **鏉冮檺鍚屾**: 璇ュ瓧娈典粠 OA 绯荤粺鑷姩鍚屾锛岃鍕挎墜鍔ㄤ慨鏀�
+2. **榛樿鍊�**: 鏂板垱寤虹敤鎴烽粯璁や负 `'0'`锛堜笉鍙垱寤猴級
+3. **鍚屾鏇存柊**: 姣忔鐢ㄦ埛鍚屾鏃朵細鑷姩鏇存柊璇ュ瓧娈�
+4. **鏉冮檺绮掑害**: 璇ュ瓧娈典粎鎺у埗鏄惁鍙垱寤轰换鍔″崟锛屼笉褰卞搷鍏朵粬鏉冮檺
+
+### 涓庡叾浠栨潈闄愬瓧娈电殑鍏崇郴
+- `can_view_all_consult`: 鏄惁鍙煡鐪嬫墍鏈夊挩璇㈠崟锛圤A_Power LIKE '%,020112,%'锛�
+- `can_create_task`: 鏄惁鍙垱寤轰换鍔″崟锛圤A_Power LIKE '%,020101,%'锛�
+
+杩欎袱涓瓧娈典簰鐩哥嫭绔嬶紝鐢ㄦ埛鍙互鍚屾椂鎷ユ湁鎴栧垎鍒嫢鏈夎繖浜涙潈闄愩��
+
+## 馃攳 楠岃瘉鏂规硶
+
+### 鏌ョ湅鍚庡彴鐢ㄦ埛绠$悊鐣岄潰
+1. 鐧诲綍鍚庡彴绠$悊绯荤粺
+2. 杩涘叆 **绯荤粺绠$悊** 鈫� **鐢ㄦ埛绠$悊**
+3. 鍦ㄧ敤鎴峰垪琛ㄤ腑鏌ョ湅 "鍙垱寤轰换鍔″崟" 鍒�
+4. 缂栬緫鐢ㄦ埛鏃跺彲鐪嬪埌璇ュ瓧娈碉紙鍙锛岀敱鍚屾鎺у埗锛�
+
+### 鏁版嵁搴撻獙璇�
+```sql
+-- 妫�鏌ュ瓧娈垫槸鍚﹀瓨鍦�
+SELECT COLUMN_NAME, COLUMN_TYPE, COLUMN_COMMENT
+FROM INFORMATION_SCHEMA.COLUMNS
+WHERE TABLE_NAME = 'sys_user'
+ AND COLUMN_NAME = 'can_create_task';
+
+-- 鏌ョ湅鍏蜂綋鐢ㄦ埛鐨勬潈闄�
+SELECT
+ u.user_name,
+ u.nick_name,
+ u.can_view_all_consult,
+ u.can_create_task,
+ u.oa_user_id
+FROM sys_user u
+WHERE u.oa_user_id IS NOT NULL
+ORDER BY u.user_id;
+```
+
+## 馃摎 鐩稿叧鏂囦欢娓呭崟
+
+### SQL 鑴氭湰
+- `sql/add_can_create_task_to_sys_user.sql` - 娣诲姞瀛楁鑴氭湰
+
+### Java 鏂囦欢
+- `SysUser.java`锛堜慨鏀癸級 - 娣诲姞瀛楁瀹氫箟
+- `UserSyncDTO.java`锛堜慨鏀癸級 - 娣诲姞 DTO 瀛楁
+- `UserSyncServiceImpl.java`锛堜慨鏀癸級 - 娣诲姞鍚屾閫昏緫
+
+### Mapper 鏂囦欢
+- `UserSyncMapper.xml`锛堜慨鏀癸級 - 娣诲姞 SQL 鏌ヨ閫昏緫
+- `SysUserMapper.xml`锛堜慨鏀癸級 - 娣诲姞瀛楁鏄犲皠鍜屾搷浣�
+
+### 鏂囨。
+- `prd/鐢ㄦ埛鍒涘缓浠诲姟鍗曟潈闄愬姛鑳借鏄�.md` - 鏈枃妗�
+
+## 馃幆 甯歌闂
+
+### Q1: 瀛楁鍊间负浠�涔堟槸瀛楃涓茶�屼笉鏄竷灏斿�硷紵
+**A**: 涓轰簡涓庤嫢渚濇鏋剁殑鏁版嵁瀛楀吀瑙勮寖淇濇寔涓�鑷达紝浣跨敤 `'0'` 鍜� `'1'` 瀛楃涓茶〃绀哄竷灏斿�笺��
+
+### Q2: 濡備綍鎵嬪姩璁剧疆鐢ㄦ埛鏉冮檺锛�
+**A**: 涓嶅缓璁墜鍔ㄤ慨鏀广�傝瀛楁搴旈�氳繃 OA 绯荤粺鐨� `OA_Power` 瀛楁鎺у埗锛岄�氳繃鐢ㄦ埛鍚屾鑷姩鏇存柊銆�
+
+### Q3: 鐢ㄦ埛鍚屾鍚庢潈闄愭病鏈夊彉鍖栵紵
+**A**: 璇锋鏌ワ細
+1. OA 绯荤粺涓敤鎴风殑 `OA_Power` 瀛楁鏄惁鍖呭惈 `,020101,`
+2. 鐢ㄦ埛鍚屾鏄惁鎵ц鎴愬姛
+3. 鏌ョ湅鍚屾鏃ュ織纭鏇存柊鎯呭喌
+
+### Q4: 濡備綍鎵归噺璁剧疆鐢ㄦ埛鏉冮檺锛�
+**A**: 鍦� OA 绯荤粺涓壒閲忎慨鏀圭敤鎴风殑 `OA_Power` 瀛楁锛岀劧鍚庢墽琛岀敤鎴峰悓姝ュ嵆鍙��
+
+---
+
+**鐗堟湰**: v1.0
+**鏇存柊鏃堕棿**: 2025-12-29
+**鐩稿叧鍔熻兘**: 鐢ㄦ埛鍚屾銆佹潈闄愮鐞�
diff --git "a/prd/\347\224\250\346\210\267\345\210\233\345\273\272\344\273\273\345\212\241\346\235\203\351\231\220\345\211\215\347\253\257\346\216\247\345\210\266\345\212\237\350\203\275\350\257\264\346\230\216.md" "b/prd/\347\224\250\346\210\267\345\210\233\345\273\272\344\273\273\345\212\241\346\235\203\351\231\220\345\211\215\347\253\257\346\216\247\345\210\266\345\212\237\350\203\275\350\257\264\346\230\216.md"
new file mode 100644
index 0000000..93b58f7
--- /dev/null
+++ "b/prd/\347\224\250\346\210\267\345\210\233\345\273\272\344\273\273\345\212\241\346\235\203\351\231\220\345\211\215\347\253\257\346\216\247\345\210\266\345\212\237\350\203\275\350\257\264\346\230\216.md"
@@ -0,0 +1,404 @@
+# 鐢ㄦ埛鍒涘缓浠诲姟鏉冮檺鍓嶇鎺у埗鍔熻兘璇存槑
+
+## 鍔熻兘姒傝堪
+
+鍦ㄧ敤鎴风櫥褰曞悗锛岀郴缁熶細杩斿洖 `canCreateTask` 瀛楁鍒� `getInfo` 鎺ュ彛鍝嶅簲涓紝骞跺瓨鍌ㄥ埌 APP 鐨� Vuex store銆傚綋鐢ㄦ埛鍦ㄤ换鍔″垱寤洪〉闈㈢偣鍑讳换鍔$被鍨嬫椂锛屼細妫�鏌ヨ鏉冮檺瀛楁锛屽鏋滃�间负 `'0'`锛堟棤鏉冮檺锛夛紝鍒欏脊鍑烘彁绀�"鎮ㄦ病鏈夋潈闄愬垱寤轰换鍔�"锛岄樆姝㈢敤鎴疯繘鍏ヤ换鍔″垱寤鸿〃鍗曢〉闈€��
+
+## 瀹炵幇鍐呭
+
+### 1. 鍚庣鎺ュ彛淇敼
+
+#### 1.1 getInfo 鎺ュ彛杩斿洖 canCreateTask
+
+**鏂囦欢**锛歚ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysLoginController.java`
+
+**淇敼浣嶇疆**锛氱 236-245 琛�
+
+**淇敼鍐呭**锛�
+```java
+AjaxResult ajax = AjaxResult.success();
+ajax.put("user", user);
+ajax.put("roles", roles);
+ajax.put("permissions", permissions);
+ajax.put("branchCompanyId", branchCompanyId);
+ajax.put("branchCompanyName", branchCompanyName);
+ajax.put("branchCompanies", branchCompanies);
+ajax.put("oaUserId", user.getOaUserId());
+ajax.put("canCreateTask", user.getCanCreateTask()); // 鉁� 鏂板
+return ajax;
+```
+
+**璇存槑**锛氬湪 getInfo 鎺ュ彛杩斿洖鐨� JSON 涓坊鍔� `canCreateTask` 瀛楁锛屽叾鍊兼潵鑷� `SysUser.canCreateTask`銆�
+
+---
+
+### 2. APP 绔瓨鍌ㄥ眰淇敼
+
+#### 2.1 娣诲姞 constant 甯搁噺
+
+**鏂囦欢**锛歚app/utils/constant.js`
+
+**淇敼鍐呭**锛�
+```javascript
+const constant = {
+ userId: 'vuex_userId',
+ avatar: 'vuex_avatar',
+ name: 'vuex_name',
+ nickName: 'vuex_nickName',
+ roles: 'vuex_roles',
+ permissions: 'vuex_permissions',
+ deptId: 'vuex_deptId',
+ branchCompanyId: 'vuex_branchCompanyId',
+ branchCompanyName: 'vuex_branchCompanyName',
+ oaUserId: 'vuex_oaUserId',
+ canCreateTask: 'vuex_canCreateTask' // 鉁� 鏂板
+}
+```
+
+**璇存槑**锛氭坊鍔� `canCreateTask` 鐨勫瓨鍌ㄩ敭鍚嶅父閲忥紝鐢ㄤ簬鍦ㄦ湰鍦板瓨鍌ㄤ腑淇濆瓨璇ュ瓧娈点��
+
+---
+
+#### 2.2 Vuex State 娣诲姞瀛楁
+
+**鏂囦欢**锛歚app/store/modules/user.js`
+
+**淇敼浣嶇疆 1**锛氱 11-23 琛�
+
+```javascript
+state: {
+ token: getToken(),
+ userId: storage.get(constant.userId),
+ name: storage.get(constant.name),
+ nickName: storage.get(constant.nickName),
+ avatar: storage.get(constant.avatar),
+ roles: storage.get(constant.roles),
+ permissions: storage.get(constant.permissions),
+ deptId: storage.get(constant.deptId),
+ branchCompanyId: storage.get(constant.branchCompanyId),
+ branchCompanyName: storage.get(constant.branchCompanyName),
+ oaUserId: storage.get(constant.oaUserId),
+ canCreateTask: storage.get(constant.canCreateTask) // 鉁� 鏂板
+},
+```
+
+**璇存槑**锛氬湪 Vuex state 涓坊鍔� `canCreateTask` 瀛楁锛屼粠鏈湴瀛樺偍涓鍙栧垵濮嬪�笺��
+
+---
+
+**淇敼浣嶇疆 2**锛氱 65-72 琛岋紙mutations锛�
+
+```javascript
+SET_OA_USER_ID: (state, oaUserId) => {
+ state.oaUserId = oaUserId
+ storage.set(constant.oaUserId, oaUserId)
+},
+SET_CAN_CREATE_TASK: (state, canCreateTask) => { // 鉁� 鏂板
+ state.canCreateTask = canCreateTask
+ storage.set(constant.canCreateTask, canCreateTask)
+}
+```
+
+**璇存槑**锛氭坊鍔� `SET_CAN_CREATE_TASK` mutation锛岀敤浜庢洿鏂� state 鍜屾湰鍦板瓨鍌ㄣ��
+
+---
+
+**淇敼浣嶇疆 3**锛氱 119-132 琛岋紙GetInfo Action锛�
+
+```javascript
+commit('SET_USER_ID', userId)
+commit('SET_NAME', username)
+commit('SET_NICK_NAME', nickname)
+commit('SET_AVATAR', avatar)
+commit('SET_DEPT_ID', deptId)
+commit('SET_BRANCH_COMPANY_ID', res.branchCompanyId)
+commit('SET_BRANCH_COMPANY_NAME', res.branchCompanyName)
+commit('SET_OA_USER_ID', res.oaUserId)
+commit('SET_CAN_CREATE_TASK', res.canCreateTask) // 鉁� 鏂板
+resolve(res)
+```
+
+**璇存槑**锛氬湪 GetInfo action 涓彁浜� `SET_CAN_CREATE_TASK` mutation锛屽皢鎺ュ彛杩斿洖鐨� `canCreateTask` 瀛樺偍鍒� Vuex銆�
+
+---
+
+### 3. APP 绔潈闄愭帶鍒�
+
+#### 3.1 浠诲姟鍒涘缓椤甸潰鏉冮檺妫�鏌�
+
+**鏂囦欢**锛歚app/pages/task/create.vue`
+
+**淇敼浣嶇疆 1**锛氱 28-30 琛岋紙寮曞叆 mapState锛�
+
+```javascript
+<script>
+import { mapState } from 'vuex' // 鉁� 鏂板
+
+export default {
+```
+
+**淇敼浣嶇疆 2**锛氱 72-78 琛岋紙娣诲姞 computed锛�
+
+```javascript
+computed: {
+ ...mapState({
+ canCreateTask: state => state.user.canCreateTask
+ })
+},
+```
+
+**璇存槑**锛氫娇鐢� Vuex 鐨� mapState 杈呭姪鍑芥暟锛屽皢 `canCreateTask` 鏄犲皠鍒扮粍浠剁殑璁$畻灞炴�с��
+
+---
+
+**淇敼浣嶇疆 3**锛氱 81-90 琛岋紙鏉冮檺妫�鏌ラ�昏緫锛�
+
+```javascript
+methods: {
+ selectTaskCategory(category) {
+ // 妫�鏌ユ槸鍚︽湁鍒涘缓浠诲姟鐨勬潈闄�
+ if (this.canCreateTask !== '1') {
+ this.$modal.msgError('鎮ㄦ病鏈夋潈闄愬垱寤轰换鍔�')
+ return
+ }
+
+ // 璺宠浆鍒板搴旂殑浠诲姟鍒涘缓椤甸潰
+ uni.navigateTo({
+ url: `${category.page}?categoryName=${category.name}&categoryType=${category.type}&taskType=${category.taskType}`
+ })
+ }
+}
+```
+
+**鏍稿績閫昏緫**锛�
+1. 鍦ㄧ偣鍑讳换鍔$被鍨嬫椂锛岄鍏堟鏌� `this.canCreateTask` 鐨勫��
+2. 濡傛灉鍊间笉绛変簬 `'1'`锛屽垯寮瑰嚭閿欒鎻愮ず"鎮ㄦ病鏈夋潈闄愬垱寤轰换鍔�"锛屽苟 return 闃绘鍚庣画鎵ц
+3. 鍙湁褰� `canCreateTask === '1'` 鏃讹紝鎵嶅厑璁歌烦杞埌鍏蜂綋鐨勪换鍔″垱寤洪〉闈�
+
+---
+
+## 鏁版嵁娴佸悜
+
+```
+SQL Server (OA_User.OA_Power)
+ 鈫�
+[鐢ㄦ埛鍚屾] CASE WHEN OA_Power LIKE '%,020101,%' THEN '1' ELSE '0' END
+ 鈫�
+MySQL (sys_user.can_create_task)
+ 鈫�
+[鐧诲綍鍚嶿 getInfo 鎺ュ彛
+ 鈫�
+{
+ "user": {...},
+ "canCreateTask": "1" or "0"
+}
+ 鈫�
+[APP] Vuex Store (state.user.canCreateTask)
+ 鈫�
+[鏈湴瀛樺偍] vuex_canCreateTask
+ 鈫�
+[椤甸潰鏉冮檺鎺у埗] create.vue 妫�鏌ユ潈闄�
+ 鈫�
+鍏佽鍒涘缓 or 鎻愮ず"鎮ㄦ病鏈夋潈闄愬垱寤轰换鍔�"
+```
+
+---
+
+## 浣跨敤鍦烘櫙
+
+### 鍦烘櫙 1锛氭湁鏉冮檺鐨勭敤鎴�
+
+1. 鐢ㄦ埛鐧诲綍鍚庯紝`canCreateTask` 涓� `'1'`
+2. 鐐瑰嚮搴曢儴 TabBar "鍒涘缓浠诲姟" 杩涘叆浠诲姟绫诲瀷閫夋嫨椤甸潰
+3. 鐐瑰嚮浠讳綍涓�绉嶄换鍔$被鍨嬶紙杞繍浠诲姟銆佺淮淇繚鍏汇�佸姞娌圭瓑锛�
+4. **鉁� 姝e父璺宠浆**鍒板搴旂殑浠诲姟鍒涘缓琛ㄥ崟椤甸潰
+
+### 鍦烘櫙 2锛氭棤鏉冮檺鐨勭敤鎴�
+
+1. 鐢ㄦ埛鐧诲綍鍚庯紝`canCreateTask` 涓� `'0'` 鎴� `null`
+2. 鐐瑰嚮搴曢儴 TabBar "鍒涘缓浠诲姟" 杩涘叆浠诲姟绫诲瀷閫夋嫨椤甸潰
+3. 鐐瑰嚮浠讳綍涓�绉嶄换鍔$被鍨�
+4. **鉂� 寮瑰嚭鎻愮ず**锛�"鎮ㄦ病鏈夋潈闄愬垱寤轰换鍔�"
+5. **鉂� 闃绘璺宠浆**锛屽仠鐣欏湪浠诲姟绫诲瀷閫夋嫨椤甸潰
+
+---
+
+## 楠岃瘉鏂规硶
+
+### 1. 鍚庣楠岃瘉
+
+**鏌ヨ鐢ㄦ埛鏉冮檺**锛�
+```sql
+SELECT user_name, nick_name, can_create_task, oa_user_id
+FROM sys_user
+WHERE del_flag = '0'
+ORDER BY can_create_task DESC;
+```
+
+**娴嬭瘯 getInfo 鎺ュ彛**锛�
+```bash
+# 鐧诲綍鑾峰彇 token
+POST http://localhost:8080/login
+{
+ "username": "test_user",
+ "password": "password"
+}
+
+# 鑾峰彇鐢ㄦ埛淇℃伅
+GET http://localhost:8080/getInfo
+Authorization: Bearer {token}
+
+# 鍝嶅簲绀轰緥
+{
+ "code": 200,
+ "msg": "鎿嶄綔鎴愬姛",
+ "user": {...},
+ "canCreateTask": "1" // 鉁� 纭鍖呭惈姝ゅ瓧娈�
+}
+```
+
+---
+
+### 2. APP 绔獙璇�
+
+**姝ラ 1**锛氱櫥褰� APP
+
+**姝ラ 2**锛氭墦寮�寮�鍙戣�呭伐鍏凤紝鏌ョ湅 Vuex State
+```javascript
+// 鍦ㄦ帶鍒跺彴杈撳叆
+console.log(this.$store.state.user.canCreateTask)
+// 杈撳嚭搴斾负 "1" 鎴� "0"
+```
+
+**姝ラ 3**锛氱偣鍑诲簳閮� TabBar "鍒涘缓浠诲姟"
+
+**姝ラ 4**锛氬湪浠诲姟绫诲瀷閫夋嫨椤甸潰锛岀偣鍑讳换鎰忎换鍔$被鍨�
+
+**棰勬湡缁撴灉**锛�
+- 鏈夋潈闄愮敤鎴凤紙`canCreateTask === '1'`锛夛細姝e父璺宠浆鍒板垱寤鸿〃鍗�
+- 鏃犳潈闄愮敤鎴凤紙`canCreateTask !== '1'`锛夛細寮瑰嚭鎻愮ず"鎮ㄦ病鏈夋潈闄愬垱寤轰换鍔�"
+
+---
+
+## 甯歌闂
+
+### Q1锛氭柊鐢ㄦ埛鐧诲綍鍚� canCreateTask 涓� null锛屽浣曞鐞嗭紵
+
+**A**锛氶渶瑕佸厛鎵ц鐢ㄦ埛鍚屾鎺ュ彛锛屼粠 OA 绯荤粺鍚屾鏉冮檺瀛楁锛�
+```bash
+POST http://localhost:8080/system/dept/sync/user
+```
+
+鍚屾鍚庯紝`can_create_task` 瀛楁浼氭牴鎹� OA_Power 鑷姩濉厖銆�
+
+---
+
+### Q2锛氬浣曠粰鐢ㄦ埛寮�閫氬垱寤轰换鍔℃潈闄愶紵
+
+**A**锛氭湁涓ょ鏂瑰紡锛�
+
+**鏂瑰紡 1锛堟帹鑽愶級**锛氬湪 OA 绯荤粺涓慨鏀圭敤鎴风殑 OA_Power 瀛楁
+- 纭繚 OA_Power 鍖呭惈 `,020101,`锛堟敞鎰忓墠鍚庨兘鏈夐�楀彿锛�
+- 鎵ц鐢ㄦ埛鍚屾鎺ュ彛
+
+**鏂瑰紡 2**锛氱洿鎺ヤ慨鏀规暟鎹簱
+```sql
+UPDATE sys_user
+SET can_create_task = '1'
+WHERE user_name = '鐢ㄦ埛鍚�';
+```
+
+**娉ㄦ剰**锛氭柟寮� 2 鐨勪慨鏀逛細鍦ㄤ笅娆$敤鎴峰悓姝ユ椂琚鐩栵紝寤鸿浣跨敤鏂瑰紡 1銆�
+
+---
+
+### Q3锛氱敤鎴锋潈闄愭洿鏂板悗锛岄渶瑕侀噸鏂扮櫥褰曞悧锛�
+
+**A**锛氭槸鐨勶紝鏈変袱绉嶆柟寮忕敓鏁堬細
+
+**鏂瑰紡 1**锛氱敤鎴烽��鍑虹櫥褰曪紝閲嶆柊鐧诲綍
+- 鐧诲綍鏃朵細璋冪敤 getInfo锛岃幏鍙栨渶鏂扮殑 `canCreateTask`
+
+**鏂瑰紡 2**锛氬墠绔富鍔ㄥ埛鏂扮敤鎴蜂俊鎭�
+```javascript
+this.$store.dispatch('GetInfo')
+```
+
+---
+
+### Q4锛氬浣曞湪鍓嶇鍏朵粬椤甸潰鍒ゆ柇鐢ㄦ埛鏄惁鏈夊垱寤烘潈闄愶紵
+
+**A**锛氬弬鑰� `create.vue` 鐨勫疄鐜版柟寮忥細
+
+```javascript
+import { mapState } from 'vuex'
+
+export default {
+ computed: {
+ ...mapState({
+ canCreateTask: state => state.user.canCreateTask
+ })
+ },
+ methods: {
+ checkPermission() {
+ if (this.canCreateTask !== '1') {
+ this.$modal.msgError('鎮ㄦ病鏈夋潈闄愬垱寤轰换鍔�')
+ return false
+ }
+ return true
+ }
+ }
+}
+```
+
+---
+
+## 娉ㄦ剰浜嬮」
+
+1. **瀛楁绫诲瀷**锛歚canCreateTask` 鏄瓧绗︿覆绫诲瀷 `CHAR(1)`锛屽�间负 `'0'` 鎴� `'1'`锛屾瘮杈冩椂蹇呴』浣跨敤瀛楃涓�
+ - 鉁� 姝g‘锛歚canCreateTask !== '1'`
+ - 鉂� 閿欒锛歚canCreateTask !== 1` 鎴� `!canCreateTask`
+
+2. **null 鍊煎鐞�**锛氭湭鍚屾鐨勭敤鎴� `canCreateTask` 鍙兘涓� `null`
+ - 鍦ㄦ潈闄愬垽鏂椂锛宍null !== '1'` 杩斿洖 `true`锛屼細闃绘鎿嶄綔锛岀鍚堝畨鍏ㄥ師鍒�
+
+3. **鏁版嵁鍚屾**锛氱‘淇濆畾鏈熸墽琛岀敤鎴峰悓姝ワ紝淇濇寔鏉冮檺瀛楁涓� OA 绯荤粺涓�鑷�
+
+4. **鍓嶇瀛樺偍**锛歚canCreateTask` 浼氬悓鏃跺瓨鍌ㄥ湪锛�
+ - Vuex State锛堝唴瀛橈級
+ - LocalStorage锛堟寔涔呭寲锛�
+ - 椤甸潰鍒锋柊鎴栭噸鍚� APP 鏃朵細浠� LocalStorage 鎭㈠
+
+5. **瀹夊叏鎬�**锛�
+ - 鍓嶇鏉冮檺妫�鏌ュ彧鏄敤鎴蜂綋楠屼紭鍖栵紝涓嶅奖鍝嶅悗绔畨鍏�
+ - 鍚庣浠嶉渶鍦ㄥ垱寤轰换鍔$殑鎺ュ彛涓繘琛屾潈闄愰獙璇�
+
+---
+
+## 鎶�鏈�荤粨
+
+鏈淇敼瀹炵幇浜嗗畬鏁寸殑**鍓嶇鏉冮檺鎺у埗娴佺▼**锛�
+
+1. 鉁� **鍚庣鎺ュ彛**锛歡etInfo 杩斿洖 canCreateTask
+2. 鉁� **鏁版嵁瀛樺偍**锛歏uex + LocalStorage 鍙岄噸瀛樺偍
+3. 鉁� **鏉冮檺妫�鏌�**锛氶〉闈㈢骇鏉冮檺鎷︽埅
+4. 鉁� **鐢ㄦ埛鎻愮ず**锛氬弸濂界殑閿欒鎻愮ず淇℃伅
+5. 鉁� **鏁版嵁鍚屾**锛氫笌 OA 绯荤粺鏉冮檺淇濇寔涓�鑷�
+
+**浼樼偣**锛�
+- 缁熶竴鐨勬潈闄愭暟鎹簮锛圤A_Power锛�
+- 鑷姩鍚屾鏈哄埗
+- 鍓嶇蹇�熷搷搴旓紝閬垮厤鏃犳晥璇锋眰
+- 鑹ソ鐨勭敤鎴蜂綋楠�
+
+**灞�闄愭��**锛�
+- 鍓嶇鏉冮檺鍙缁曡繃锛堝紑鍙戣�呭伐鍏蜂慨鏀癸級
+- 闇�瑕佷緷璧栧悗绔帴鍙g殑浜屾楠岃瘉
+
+---
+
+## 鐩稿叧鏂囨。
+
+- [鐢ㄦ埛鍒涘缓浠诲姟鍗曟潈闄愬姛鑳借鏄嶿(./鐢ㄦ埛鍒涘缓浠诲姟鍗曟潈闄愬姛鑳借鏄�.md)
+- [鐢ㄦ埛鍚屾鍔熻兘璇存槑](./鐢ㄦ埛鍚屾鍔熻兘璇存槑.md)
+- [Vuex 鐢ㄦ埛鐘舵�佸畬鏁存�т紭鍖朷(./Vuex鐢ㄦ埛鐘舵�佸畬鏁存�т紭鍖�.md)
diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysLoginController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysLoginController.java
index 4bef3fb..e3bb508 100644
--- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysLoginController.java
+++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysLoginController.java
@@ -241,6 +241,7 @@
ajax.put("branchCompanyName", branchCompanyName);
ajax.put("branchCompanies", branchCompanies);
ajax.put("oaUserId", user.getOaUserId());
+ ajax.put("canCreateTask", user.getCanCreateTask());
return ajax;
}
diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/VehicleGpsController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/VehicleGpsController.java
index 94222e5..a5a7621 100644
--- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/VehicleGpsController.java
+++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/VehicleGpsController.java
@@ -1349,7 +1349,9 @@
}
JSONArray results = jsonResponse.getJSONArray("pois");
-
+ if(results==null|| results.isEmpty()){
+ return AjaxResult.error("鏈壘鍒板尮閰嶇殑鍦板潃");
+ }
// 鏋勫缓杩斿洖缁撴灉
List<Map<String, Object>> suggestions = new ArrayList<>();
diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysUser.java b/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysUser.java
index 36ca34a..6e4586a 100644
--- a/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysUser.java
+++ b/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysUser.java
@@ -113,6 +113,10 @@
/** 鏄惁鍙煡鐪嬫墍鏈夊挩璇㈠崟锛�0鍚� 1鏄級 */
@Excel(name = "鍙煡鐪嬫墍鏈夊挩璇㈠崟", readConverterExp = "0=鍚�,1=鏄�")
private String canViewAllConsult;
+
+ /** 鏄惁鍙垱寤轰换鍔″崟锛�0鍚� 1鏄級 */
+ @Excel(name = "鍙垱寤轰换鍔″崟", readConverterExp = "0=鍚�,1=鏄�")
+ private String canCreateTask;
@@ -403,6 +407,16 @@
{
this.canViewAllConsult = canViewAllConsult;
}
+
+ public String getCanCreateTask()
+ {
+ return canCreateTask;
+ }
+
+ public void setCanCreateTask(String canCreateTask)
+ {
+ this.canCreateTask = canCreateTask;
+ }
@Override
@@ -435,7 +449,7 @@
.append("qyWechatUserId", getQyWechatUserId())
.append("qyWechatUpdateTime", getQyWechatUpdateTime())
.append("canViewAllConsult", getCanViewAllConsult())
-
+ .append("canCreateTask", getCanCreateTask())
.toString();
}
}
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/domain/UserSyncDTO.java b/ruoyi-system/src/main/java/com/ruoyi/system/domain/UserSyncDTO.java
index dd344e7..49b76f5 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/domain/UserSyncDTO.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/domain/UserSyncDTO.java
@@ -28,6 +28,9 @@
/** 鏄惁鍙煡鐪嬫墍鏈夊挩璇㈠崟锛�0鍚� 1鏄級 */
private String canViewAllConsult;
+
+ /** 鏄惁鍙垱寤轰换鍔″崟锛�0鍚� 1鏄級 */
+ private String canCreateTask;
/** 鐢ㄦ埛鎬у埆锛�0=鐢�,1=濂�,2=鏈煡锛� */
private String sex;
@@ -137,6 +140,16 @@
{
this.canViewAllConsult = canViewAllConsult;
}
+
+ public String getCanCreateTask()
+ {
+ return canCreateTask;
+ }
+
+ public void setCanCreateTask(String canCreateTask)
+ {
+ this.canCreateTask = canCreateTask;
+ }
@Override
public String toString()
@@ -152,6 +165,7 @@
", phonenumber='" + phonenumber + '\'' +
", oaOrderClass='" + oaOrderClass + '\'' +
", canViewAllConsult='" + canViewAllConsult + '\'' +
+ ", canCreateTask='" + canCreateTask + '\'' +
'}';
}
}
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/UserSyncServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/UserSyncServiceImpl.java
index 58689a0..83d93e8 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/UserSyncServiceImpl.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/UserSyncServiceImpl.java
@@ -227,6 +227,10 @@
{
existingUser.setCanViewAllConsult(dto.getCanViewAllConsult());
}
+ if (StringUtils.isNotEmpty(dto.getCanCreateTask()))
+ {
+ existingUser.setCanCreateTask(dto.getCanCreateTask());
+ }
// 鍚屾浼佷笟寰俊鐢ㄦ埛ID
if (StringUtils.isNotEmpty(dto.getOaWeixinUserId()))
{
@@ -253,6 +257,10 @@
{
newUser.setCanViewAllConsult(dto.getCanViewAllConsult());
}
+ if (StringUtils.isNotEmpty(dto.getCanCreateTask()))
+ {
+ newUser.setCanCreateTask(dto.getCanCreateTask());
+ }
// 璁剧疆浼佷笟寰俊鐢ㄦ埛ID
if (StringUtils.isNotEmpty(dto.getOaWeixinUserId()))
diff --git a/ruoyi-system/src/main/resources/mapper/system/SysUserMapper.xml b/ruoyi-system/src/main/resources/mapper/system/SysUserMapper.xml
index b62ed45..5b35c0f 100644
--- a/ruoyi-system/src/main/resources/mapper/system/SysUserMapper.xml
+++ b/ruoyi-system/src/main/resources/mapper/system/SysUserMapper.xml
@@ -31,6 +31,7 @@
<result property="qyWechatUserId" column="qy_wechat_user_id" />
<result property="qyWechatUpdateTime" column="qy_wechat_update_time" />
<result property="canViewAllConsult" column="can_view_all_consult" />
+ <result property="canCreateTask" column="can_create_task" />
<association property="dept" javaType="SysDept" resultMap="deptResult" />
<collection property="roles" javaType="java.util.List" resultMap="RoleResult" />
</resultMap>
@@ -55,7 +56,7 @@
</resultMap>
<sql id="selectUserVo">
- select u.user_id, u.dept_id, u.user_name,u.oa_user_id, u.oa_order_class, u.nick_name, u.email, u.avatar, u.phonenumber, u.password, u.sex, u.status, u.del_flag, u.login_ip, u.login_date, u.oa_user_id, u.create_by, u.create_time, u.remark,u.open_id,u.union_id,u.wechat_nickname,u.qy_wechat_user_id,u.qy_wechat_update_time,u.can_view_all_consult,
+ select u.user_id, u.dept_id, u.user_name,u.oa_user_id, u.oa_order_class, u.nick_name, u.email, u.avatar, u.phonenumber, u.password, u.sex, u.status, u.del_flag, u.login_ip, u.login_date, u.oa_user_id, u.create_by, u.create_time, u.remark,u.open_id,u.union_id,u.wechat_nickname,u.qy_wechat_user_id,u.qy_wechat_update_time,u.can_view_all_consult,u.can_create_task,
d.dept_id, d.parent_id, d.ancestors, d.dept_name, d.order_num, d.leader, d.status as dept_status,
r.role_id, r.role_name, r.role_key, r.role_sort, r.data_scope, r.status as role_status
from sys_user u
@@ -173,6 +174,7 @@
<if test="oaUserId != null">oa_user_id,</if>
<if test="oaOrderClass != null and oaOrderClass != ''">oa_order_class,</if>
<if test="canViewAllConsult != null and canViewAllConsult != ''">can_view_all_consult,</if>
+ <if test="canCreateTask != null and canCreateTask != ''">can_create_task,</if>
<if test="qyWechatUserId != null and qyWechatUserId != ''">qy_wechat_user_id,</if>
<if test="qyWechatUpdateTime != null">qy_wechat_update_time,</if>
<if test="createBy != null and createBy != ''">create_by,</if>
@@ -192,6 +194,7 @@
<if test="oaUserId != null">#{oaUserId},</if>
<if test="oaOrderClass != null and oaOrderClass != ''">#{oaOrderClass},</if>
<if test="canViewAllConsult != null and canViewAllConsult != ''">#{canViewAllConsult},</if>
+ <if test="canCreateTask != null and canCreateTask != ''">#{canCreateTask},</if>
<if test="qyWechatUserId != null and qyWechatUserId != ''">#{qyWechatUserId},</if>
<if test="qyWechatUpdateTime != null">#{qyWechatUpdateTime},</if>
<if test="createBy != null and createBy != ''">#{createBy},</if>
@@ -214,6 +217,7 @@
<if test="oaUserId != null">oa_user_id = #{oaUserId},</if>
<if test="oaOrderClass != null">oa_order_class = #{oaOrderClass},</if>
<if test="canViewAllConsult != null and canViewAllConsult != ''">can_view_all_consult = #{canViewAllConsult},</if>
+ <if test="canCreateTask != null and canCreateTask != ''">can_create_task = #{canCreateTask},</if>
<if test="qyWechatUserId != null and qyWechatUserId != ''">qy_wechat_user_id = #{qyWechatUserId},</if>
<if test="qyWechatUpdateTime != null">qy_wechat_update_time = #{qyWechatUpdateTime},</if>
<if test="openId != null and openId != ''">open_id = #{openId},</if>
diff --git a/ruoyi-system/src/main/resources/mapper/system/UserSyncMapper.xml b/ruoyi-system/src/main/resources/mapper/system/UserSyncMapper.xml
index a1dbfcd..8f025e3 100644
--- a/ruoyi-system/src/main/resources/mapper/system/UserSyncMapper.xml
+++ b/ruoyi-system/src/main/resources/mapper/system/UserSyncMapper.xml
@@ -15,6 +15,7 @@
<result property="phonenumber" column="phonenumber" />
<result property="oaOrderClass" column="OA_OrderClass" />
<result property="canViewAllConsult" column="can_view_all_consult" />
+ <result property="canCreateTask" column="can_create_task" />
</resultMap>
<!-- 鏌ヨSQL Server涓殑OA鐢ㄦ埛鍒楄〃 -->
@@ -33,7 +34,11 @@
CASE
WHEN OA_Power LIKE '%,020112,%' THEN '1'
ELSE '0'
- END AS can_view_all_consult
+ END AS can_view_all_consult,
+ CASE
+ WHEN OA_Power LIKE '%,020101,%' THEN '1'
+ ELSE '0'
+ END AS can_create_task
FROM OA_User
WHERE OA_User IS NOT NULL
AND OA_Name IS NOT NULL
diff --git a/sql/add_can_create_task_to_sys_user.sql b/sql/add_can_create_task_to_sys_user.sql
new file mode 100644
index 0000000..eb14bf6
--- /dev/null
+++ b/sql/add_can_create_task_to_sys_user.sql
@@ -0,0 +1,16 @@
+-- 鍦╯ys_user琛ㄤ腑娣诲姞鏄惁鍙垱寤轰换鍔″崟瀛楁
+-- 浣滅敤: 鏍囪瘑鐢ㄦ埛鏄惁鏈夊垱寤轰换鍔″崟鐨勬潈闄愶紝浠嶰A绯荤粺鍚屾
+-- 鍚屾瑙勫垯: OA_Power LIKE '%,020101,%' 鐨勭敤鎴峰彲浠ュ垱寤轰换鍔″崟
+
+-- 娣诲姞瀛楁
+ALTER TABLE sys_user ADD COLUMN can_create_task CHAR(1) DEFAULT '0' COMMENT '鏄惁鍙垱寤轰换鍔″崟锛�0鍚� 1鏄級';
+
+-- 娣诲姞绱㈠紩锛堟柟渚挎煡璇㈡湁鏉冮檺鐨勭敤鎴凤級
+CREATE INDEX idx_can_create_task ON sys_user(can_create_task);
+
+-- 鏌ヨ楠岃瘉
+SELECT COLUMN_NAME, COLUMN_TYPE, COLUMN_COMMENT
+FROM INFORMATION_SCHEMA.COLUMNS
+WHERE TABLE_SCHEMA = 'ry-vue'
+ AND TABLE_NAME = 'sys_user'
+ AND COLUMN_NAME = 'can_create_task';
--
Gitblit v1.9.1