加销售数据权限控制

This commit is contained in:
luojiaquan
2026-09-21 09:52:41 +08:00
parent 8cbb8e2b5d
commit cf04681cea
13 changed files with 155 additions and 22 deletions
+8
View File
@@ -10,6 +10,14 @@ export function listUser(query) {
})
}
// 查询用户下拉选项(登录即可访问,仅含 id/账号/姓名/部门等展示字段)
export function optionUserList() {
return request({
url: '/system/user/optionselect',
method: 'get'
})
}
// 查询用户详细
export function getUser(userId) {
return request({
@@ -8,17 +8,17 @@
:loading="loading"
:size="size"
:multiple="false"
value-on-clear="null"
style="width: 100%;"
@change="handleChange"
>
<el-option
v-for="item in options"
:key="item.userId"
:label="item.nickName || item.userName"
:label="formatLabel(item)"
:value="String(item.userId)"
:disabled="item.status === '1'"
>
<span>{{ item.nickName || item.userName }}</span>
<span>{{ item.nickName || item.userName }}<template v-if="item.status === '1'">(停用)</template></span>
<span
v-if="showCode && item.userName"
class="user-select-sub"
@@ -83,6 +83,12 @@ const options = computed(() => {
return list
})
/** 选项文本:停用用户追加(停用)标记,便于编辑历史数据时识别 */
function formatLabel(item) {
const name = item.nickName || item.userName
return item.status === '1' ? `${name}(停用)` : name
}
function handleChange(val) {
const value = val === '' ? null : val
emit('update:modelValue', value)
@@ -1,20 +1,26 @@
import { ref } from 'vue'
import { listUser } from '@/api/system/user'
import { optionUserList } from '@/api/system/user'
/**
* 用户列表模块级共享缓存:整个应用只拉取一次,UserSelect / UserName 共用
* 走 /system/user/optionselect(登录即可),不依赖 system:user:list 权限,
* 避免销售等业务角色页面出现403提示、下拉无数据。
*/
const userList = ref([])
let loadingPromise = null
export function useUsers() {
/** 确保用户列表已加载(force=true 强制刷新) */
/** 确保用户列表已加载(force=true 强制刷新);失败时返回空数组,避免未捕获的 Promise 异常 */
function ensureUsers(force = false) {
if (!force && loadingPromise) return loadingPromise
if (!force && userList.value.length) return Promise.resolve(userList.value)
loadingPromise = listUser({ pageNum: 1, pageSize: 1000 })
loadingPromise = optionUserList()
.then(res => {
userList.value = res.rows || []
userList.value = res.data || []
return userList.value
})
.catch(() => {
userList.value = []
return userList.value
})
.finally(() => {