From af8cab142a6b15c06e131a8474574dd5b00df982 Mon Sep 17 00:00:00 2001
From: wlzboy <66905212@qq.com>
Date: 星期四, 04 十二月 2025 22:09:58 +0800
Subject: [PATCH] feat: 改造微信accesstoken存放在系统配置表中
---
prd/StaffSelector组件分公司用户加载说明.md | 485 +++++++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 485 insertions(+), 0 deletions(-)
diff --git "a/prd/StaffSelector\347\273\204\344\273\266\345\210\206\345\205\254\345\217\270\347\224\250\346\210\267\345\212\240\350\275\275\350\257\264\346\230\216.md" "b/prd/StaffSelector\347\273\204\344\273\266\345\210\206\345\205\254\345\217\270\347\224\250\346\210\267\345\212\240\350\275\275\350\257\264\346\230\216.md"
new file mode 100644
index 0000000..22c26a6
--- /dev/null
+++ "b/prd/StaffSelector\347\273\204\344\273\266\345\210\206\345\205\254\345\217\270\347\224\250\346\210\267\345\212\240\350\275\275\350\257\264\346\230\216.md"
@@ -0,0 +1,485 @@
+# StaffSelector 缁勪欢鍒嗗叕鍙哥敤鎴峰姞杞藉姛鑳借鏄�
+
+## 馃搵 鍔熻兘姒傝堪
+
+浼樺寲 `StaffSelector` 缁勪欢,鏀寔閫氳繃澶栭儴浼犲叆鍒嗗叕鍙窱D鍒楄〃鏉ュ姞杞芥寚瀹氬垎鍏徃鐨勭敤鎴�,鎻愪緵鏇寸伒娲荤殑浜哄憳閫夋嫨鍔熻兘銆�
+
+---
+
+## 馃攧 淇敼鍐呭
+
+### 1. 鍚庣鎺ュ彛鏂板
+
+#### **鏂囦欢**: `SysUserController.java`
+
+**鏂板鎺ュ彛**: `GET /system/user/branch/users/by-dept-ids`
+
+```java
+/**
+ * 鏍规嵁鍒嗗叕鍙窱D鍒楄〃鑾峰彇鐢ㄦ埛(灏忕▼搴忕涓撶敤)
+ * 鏀寔澶栭儴浼犲叆鍒嗗叕鍙窱D鏁扮粍,鏌ヨ杩欎簺鍒嗗叕鍙稿強鍏舵墍鏈夊瓙閮ㄩ棬鐨勭敤鎴�
+ */
+@GetMapping("/branch/users/by-dept-ids")
+public AjaxResult listUsersByBranchDeptIds(Long[] branchDeptIds)
+```
+
+**鍙傛暟**:
+- `branchDeptIds`: 鍒嗗叕鍙窱D鏁扮粍,渚嬪 `[101, 102]`
+
+**杩斿洖鏁版嵁**:
+```json
+{
+ "code": 200,
+ "msg": "鎿嶄綔鎴愬姛",
+ "data": [
+ {
+ "userId": 1,
+ "nickName": "寮犱笁",
+ "phonenumber": "13800138000",
+ "dept": {
+ "deptId": 201,
+ "deptName": "骞垮窞鍒嗗叕鍙�-杞﹂槦A"
+ },
+ "posts": [...],
+ "roles": [...]
+ }
+ ]
+}
+```
+
+---
+
+### 2. 鍓嶇API鎵╁睍
+
+#### **鏂囦欢**: `app/api/system/user.js`
+
+**鏂板鏂规硶**:
+```javascript
+// 鏍规嵁鍒嗗叕鍙窱D鍒楄〃鏌ヨ鐢ㄦ埛(灏忕▼搴忕涓撶敤)
+export function listUsersByBranchDeptIds(branchDeptIds) {
+ return request({
+ url: '/system/user/branch/users/by-dept-ids',
+ method: 'get',
+ params: {
+ branchDeptIds: branchDeptIds
+ }
+ })
+}
+```
+
+---
+
+### 3. StaffSelector 缁勪欢鍗囩骇
+
+#### **鏂囦欢**: `app/pagesTask/components/StaffSelector.vue`
+
+**鏂板 Props**:
+```javascript
+props: {
+ // ... 鍏朵粬 props
+
+ // 鍒嗗叕鍙窱D鍒楄〃(澶栭儴浼犲叆,鐢ㄤ簬鎸囧畾鍔犺浇鍝簺鍒嗗叕鍙哥殑鐢ㄦ埛)
+ branchDeptIds: {
+ type: Array,
+ default: null
+ }
+}
+```
+
+**鏍稿績閫昏緫**:
+```javascript
+loadStaffList() {
+ // 濡傛灉浼犲叆浜嗗垎鍏徃ID,浣跨敤鎸囧畾鐨勫垎鍏徃
+ if (this.branchDeptIds && this.branchDeptIds.length > 0) {
+ this.loadStaffByBranchDeptIds(this.branchDeptIds)
+ } else {
+ // 鍚﹀垯浣跨敤褰撳墠鐢ㄦ埛鐨勫垎鍏徃
+ this.loadStaffByCurrentUser()
+ }
+}
+```
+
+**鐩戝惉鍙樺寲**:
+```javascript
+watch: {
+ branchDeptIds: {
+ handler(newVal, oldVal) {
+ if (JSON.stringify(newVal) !== JSON.stringify(oldVal)) {
+ this.loadStaffList()
+ }
+ },
+ deep: true
+ }
+}
+```
+
+---
+
+## 馃摉 浣跨敤鏂瑰紡
+
+### 鏂瑰紡涓�: 榛樿鍔犺浇(浣跨敤褰撳墠鐢ㄦ埛鐨勫垎鍏徃)
+
+```vue
+<template>
+ <staff-selector
+ v-model="selectedStaff"
+ label="鎵ц浠诲姟浜哄憳"
+ :required="true"
+ />
+</template>
+
+<script>
+import StaffSelector from '@/components/StaffSelector.vue'
+
+export default {
+ components: { StaffSelector },
+ data() {
+ return {
+ selectedStaff: []
+ }
+ }
+}
+</script>
+```
+
+**琛屼负**:
+- 鑷姩璋冪敤 `/system/user/branch/users` 鎺ュ彛
+- 鍔犺浇褰撳墠鐧诲綍鐢ㄦ埛鎵�灞炲垎鍏徃鍙婂叾瀛愰儴闂ㄧ殑鎵�鏈夌敤鎴�
+
+---
+
+### 鏂瑰紡浜�: 鎸囧畾鍒嗗叕鍙窱D(澶栭儴浼犲叆)
+
+```vue
+<template>
+ <view>
+ <!-- 鍒嗗叕鍙搁�夋嫨鍣� -->
+ <view class="form-item">
+ <view class="form-label">閫夋嫨鍒嗗叕鍙�</view>
+ <picker
+ mode="multiSelector"
+ @change="onBranchChange"
+ :value="selectedBranchIndex"
+ :range="branchList"
+ range-key="deptName"
+ >
+ <view class="picker-value">
+ {{ selectedBranchNames || '璇烽�夋嫨鍒嗗叕鍙�' }}
+ </view>
+ </picker>
+ </view>
+
+ <!-- 浜哄憳閫夋嫨鍣� -->
+ <staff-selector
+ v-model="selectedStaff"
+ label="鎵ц浠诲姟浜哄憳"
+ :required="true"
+ :branch-dept-ids="selectedBranchIds"
+ />
+ </view>
+</template>
+
+<script>
+import StaffSelector from '@/components/StaffSelector.vue'
+import { listBranchCompany } from '@/api/system/dept'
+
+export default {
+ components: { StaffSelector },
+ data() {
+ return {
+ branchList: [], // 鎵�鏈夊垎鍏徃鍒楄〃
+ selectedBranchIds: [], // 閫変腑鐨勫垎鍏徃ID鏁扮粍
+ selectedBranchNames: '', // 閫変腑鐨勫垎鍏徃鍚嶇О
+ selectedStaff: [] // 閫変腑鐨勪汉鍛�
+ }
+ },
+ mounted() {
+ this.loadBranchList()
+ },
+ methods: {
+ // 鍔犺浇鍒嗗叕鍙稿垪琛�
+ loadBranchList() {
+ listBranchCompany().then(response => {
+ this.branchList = response.data || []
+ })
+ },
+
+ // 鍒嗗叕鍙搁�夋嫨鍙樺寲
+ onBranchChange(e) {
+ const indices = e.detail.value
+ const selected = indices.map(index => this.branchList[index])
+
+ this.selectedBranchIds = selected.map(dept => dept.deptId)
+ this.selectedBranchNames = selected.map(dept => dept.deptName).join('銆�')
+
+ console.log('閫変腑鐨勫垎鍏徃ID:', this.selectedBranchIds)
+ }
+ }
+}
+</script>
+```
+
+**琛屼负**:
+- 鐢ㄦ埛閫夋嫨鍒嗗叕鍙稿悗,`selectedBranchIds` 鏇存柊
+- `StaffSelector` 鐩戝惉鍒� `branchDeptIds` 鍙樺寲
+- 鑷姩璋冪敤 `/system/user/branch/users/by-dept-ids?branchDeptIds=101,102`
+- 鍔犺浇鎸囧畾鍒嗗叕鍙稿強鍏跺瓙閮ㄩ棬鐨勬墍鏈夌敤鎴�
+
+---
+
+### 鏂瑰紡涓�: 鍔ㄦ�佸垏鎹㈠垎鍏徃
+
+```vue
+<template>
+ <view>
+ <!-- Tab 鍒囨崲鍒嗗叕鍙� -->
+ <view class="tabs">
+ <view
+ class="tab-item"
+ :class="{ active: currentBranchId === branch.deptId }"
+ v-for="branch in branchList"
+ :key="branch.deptId"
+ @click="switchBranch(branch)"
+ >
+ {{ branch.deptName }}
+ </view>
+ </view>
+
+ <!-- 浜哄憳閫夋嫨鍣� -->
+ <staff-selector
+ v-model="selectedStaff"
+ label="鎵ц浠诲姟浜哄憳"
+ :branch-dept-ids="[currentBranchId]"
+ />
+ </view>
+</template>
+
+<script>
+import StaffSelector from '@/components/StaffSelector.vue'
+import { listBranchCompany } from '@/api/system/dept'
+
+export default {
+ components: { StaffSelector },
+ data() {
+ return {
+ branchList: [],
+ currentBranchId: null,
+ selectedStaff: []
+ }
+ },
+ mounted() {
+ this.loadBranchList()
+ },
+ methods: {
+ loadBranchList() {
+ listBranchCompany().then(response => {
+ this.branchList = response.data || []
+ if (this.branchList.length > 0) {
+ // 榛樿閫変腑绗竴涓垎鍏徃
+ this.currentBranchId = this.branchList[0].deptId
+ }
+ })
+ },
+
+ switchBranch(branch) {
+ this.currentBranchId = branch.deptId
+ // branchDeptIds 鍙樺寲浼氳嚜鍔ㄨЕ鍙� StaffSelector 閲嶆柊鍔犺浇
+ }
+ }
+}
+</script>
+```
+
+---
+
+## 馃攽 Props 璇存槑
+
+| Props | 绫诲瀷 | 榛樿鍊� | 璇存槑 |
+|-------|------|--------|------|
+| `value` | Array | `[]` | 宸查�夋嫨鐨勪汉鍛樺垪琛�(v-model) |
+| `label` | String | `'鎵ц浠诲姟浜哄憳'` | 鏍囩鏂囨湰 |
+| `required` | Boolean | `false` | 鏄惁蹇呭~ |
+| `autoAddCurrentUser` | Boolean | `true` | 鏄惁鑷姩娣诲姞褰撳墠鐢ㄦ埛 |
+| `currentUserRemovable` | Boolean | `false` | 褰撳墠鐢ㄦ埛鏄惁鍙Щ闄� |
+| **`branchDeptIds`** | Array | `null` | **鍒嗗叕鍙窱D鍒楄〃(鏂板)** |
+
+---
+
+## 馃搳 鏁版嵁娴佺▼
+
+### 榛樿妯″紡(涓嶄紶 branchDeptIds)
+
+```
+1. 缁勪欢 mounted
+ 鈫�
+2. loadStaffList()
+ 鈫�
+3. 鍒ゆ柇 branchDeptIds 涓虹┖
+ 鈫�
+4. 璋冪敤 listBranchUsers()
+ 鈫�
+5. 鍚庣鏍规嵁褰撳墠鐢ㄦ埛鐨� oaOrderClass 鎴� deptId 鏌ヨ鍒嗗叕鍙�
+ 鈫�
+6. 杩斿洖璇ュ垎鍏徃鍙婂叾瀛愰儴闂ㄧ殑鎵�鏈夌敤鎴�
+ 鈫�
+7. processUserList() 澶勭悊鏁版嵁
+ 鈫�
+8. 灞曠ず鐢ㄦ埛鍒楄〃
+```
+
+### 鎸囧畾妯″紡(浼犲叆 branchDeptIds)
+
+```
+1. 缁勪欢 mounted
+ 鈫�
+2. loadStaffList()
+ 鈫�
+3. 鍒ゆ柇 branchDeptIds 鏈夊��
+ 鈫�
+4. 璋冪敤 listUsersByBranchDeptIds(branchDeptIds)
+ 鈫�
+5. 鍚庣鏍规嵁浼犲叆鐨勫垎鍏徃ID鍒楄〃鏌ヨ
+ 鈫�
+6. 杩斿洖鎸囧畾鍒嗗叕鍙稿強鍏跺瓙閮ㄩ棬鐨勬墍鏈夌敤鎴�
+ 鈫�
+7. processUserList() 澶勭悊鏁版嵁
+ 鈫�
+8. 灞曠ず鐢ㄦ埛鍒楄〃
+```
+
+### 鍔ㄦ�佸垏鎹�
+
+```
+1. 鐖剁粍浠朵慨鏀� branchDeptIds
+ 鈫�
+2. StaffSelector 鐩戝惉鍒板彉鍖�(watch)
+ 鈫�
+3. 閲嶆柊鎵ц loadStaffList()
+ 鈫�
+4. 鏍规嵁鏂扮殑 branchDeptIds 鍔犺浇鐢ㄦ埛
+ 鈫�
+5. 鏇存柊鐢ㄦ埛鍒楄〃
+```
+
+---
+
+## 鈿� 鎬ц兘浼樺寲
+
+### 1. 閬垮厤閲嶅鍔犺浇
+```javascript
+watch: {
+ branchDeptIds: {
+ handler(newVal, oldVal) {
+ // 鍙湁鐪熸鍙樺寲鏃舵墠閲嶆柊鍔犺浇
+ if (JSON.stringify(newVal) !== JSON.stringify(oldVal)) {
+ this.loadStaffList()
+ }
+ },
+ deep: true
+ }
+}
+```
+
+### 2. 鍓嶇缂撳瓨
+鍙互鍦ㄧ埗缁勪欢灞傞潰缂撳瓨鐢ㄦ埛鍒楄〃:
+```javascript
+data() {
+ return {
+ userCache: {} // { '101': [...users], '102': [...users] }
+ }
+}
+```
+
+---
+
+## 鉁� 娴嬭瘯鐢ㄤ緥
+
+### 娴嬭瘯1: 榛樿鍔犺浇
+**杈撳叆**: 涓嶄紶 `branchDeptIds`
+**棰勬湡**: 鍔犺浇褰撳墠鐢ㄦ埛鐨勫垎鍏徃鐢ㄦ埛
+**楠岃瘉**: 妫�鏌ョ敤鎴峰垪琛ㄦ槸鍚︾鍚堥鏈�
+
+### 娴嬭瘯2: 鍗曚釜鍒嗗叕鍙�
+**杈撳叆**: `branchDeptIds: [101]`
+**棰勬湡**: 鍙姞杞� ID=101 鐨勫垎鍏徃鍙婂叾瀛愰儴闂ㄧ敤鎴�
+**楠岃瘉**: 妫�鏌ョ敤鎴烽儴闂ㄦ槸鍚﹂兘灞炰簬璇ュ垎鍏徃
+
+### 娴嬭瘯3: 澶氫釜鍒嗗叕鍙�
+**杈撳叆**: `branchDeptIds: [101, 102]`
+**棰勬湡**: 鍔犺浇涓や釜鍒嗗叕鍙稿強鍏跺瓙閮ㄩ棬鐨勭敤鎴�
+**楠岃瘉**: 妫�鏌ョ敤鎴烽儴闂ㄦ槸鍚﹂兘灞炰簬杩欎袱涓垎鍏徃
+
+### 娴嬭瘯4: 鍔ㄦ�佸垏鎹�
+**鎿嶄綔**: 鍏堜紶 `[101]`,鍐嶆敼涓� `[102]`
+**棰勬湡**: 鐢ㄦ埛鍒楄〃瀹炴椂鏇存柊
+**楠岃瘉**: 妫�鏌ヤ袱娆″姞杞界殑鐢ㄦ埛鏄惁涓嶅悓
+
+### 娴嬭瘯5: 绌烘暟缁�
+**杈撳叆**: `branchDeptIds: []`
+**棰勬湡**: 杩斿洖绌哄垪琛�
+**楠岃瘉**: 鐢ㄦ埛鍒楄〃涓虹┖
+
+---
+
+## 馃挕 浣跨敤寤鸿
+
+### 鍦烘櫙1: 璺ㄥ垎鍏徃鍗忎綔浠诲姟
+褰撲换鍔¢渶瑕佸涓垎鍏徃鐨勪汉鍛樺崗浣滄椂:
+```vue
+<staff-selector
+ :branch-dept-ids="[101, 102, 103]"
+ label="璺ㄥ尯鍩熷崗浣滀汉鍛�"
+/>
+```
+
+### 鍦烘櫙2: 鍖哄煙绛涢��
+鎻愪緵鍖哄煙閫夋嫨鍣�,鐢ㄦ埛鑷�夊垎鍏徃:
+```vue
+<region-selector v-model="selectedRegions" />
+<staff-selector
+ :branch-dept-ids="selectedRegions.map(r => r.deptId)"
+/>
+```
+
+### 鍦烘櫙3: 鏉冮檺鎺у埗
+鏍规嵁鐢ㄦ埛鏉冮檺鍔ㄦ�侀檺鍒跺彲閫夊垎鍏徃:
+```javascript
+computed: {
+ allowedBranchIds() {
+ // 鏍规嵁鐢ㄦ埛瑙掕壊杩斿洖鍏佽鐨勫垎鍏徃ID
+ return this.currentUser.allowedBranches.map(b => b.deptId)
+ }
+}
+```
+
+---
+
+## 馃搶 娉ㄦ剰浜嬮」
+
+1. **鏁扮粍浼犻��**: `branchDeptIds` 蹇呴』鏄暟缁勭被鍨�,鍗充娇鍙湁涓�涓狪D涔熻鐢ㄦ暟缁� `[101]`
+2. **鍔ㄦ�佹洿鏂�**: 淇敼 `branchDeptIds` 浼氳嚜鍔ㄨЕ鍙戦噸鏂板姞杞�,鏃犻渶鎵嬪姩璋冪敤
+3. **绌哄�煎鐞�**: 浼犲叆 `null` 鎴栦笉浼犳椂,浣跨敤榛樿鐨勫綋鍓嶇敤鎴峰垎鍏徃
+4. **鏉冮檺鏍¢獙**: 鍚庣浼氭牴鎹敤鎴锋潈闄愯繃婊ゆ暟鎹�,鍓嶇鏃犻渶棰濆澶勭悊
+
+---
+
+## 馃敆 鐩稿叧鏂囦欢
+
+### 鍚庣
+- `SysUserController.java` - 鐢ㄦ埛鎺у埗鍣�
+- `SysUserService.java` - 鐢ㄦ埛鏈嶅姟鎺ュ彛
+- `SysUserServiceImpl.java` - 鐢ㄦ埛鏈嶅姟瀹炵幇
+- `SysUserMapper.xml` - SQL鏄犲皠鏂囦欢
+
+### 鍓嶇
+- `app/api/system/user.js` - 鐢ㄦ埛API
+- `app/pagesTask/components/StaffSelector.vue` - 浜哄憳閫夋嫨鍣ㄧ粍浠�
+- `app/api/system/dept.js` - 閮ㄩ棬API
+
+---
+
+## 馃摑 鐗堟湰鍘嗗彶
+
+| 鐗堟湰 | 鏃ユ湡 | 璇存槑 |
+|------|------|------|
+| 1.0 | 2025-12-04 | 鍒濆鐗堟湰,鏂板鎸夊垎鍏徃ID鍔犺浇鐢ㄦ埛鍔熻兘 |
--
Gitblit v1.9.1