销售权限控制修改

This commit is contained in:
luojiaquan
2026-09-30 09:18:23 +08:00
parent 4f5959a2f9
commit 4d8cb7c69c
9 changed files with 83 additions and 14 deletions
+37 -5
View File
@@ -4,18 +4,20 @@
:placeholder="placeholder"
:clearable="clearable"
:filterable="filterable"
:filter-method="filterMethod"
:disabled="disabled"
:loading="loading"
:size="size"
:multiple="false"
style="width: 100%;"
@change="handleChange"
@visible-change="handleVisibleChange"
>
<el-option
v-for="item in options"
:key="item.userId"
:label="formatLabel(item)"
:value="String(item.userId)"
:value="String(item[valueField])"
:disabled="item.status === '1'"
>
<span>{{ item.nickName || item.userName }}<template v-if="item.status === '1'">(停用)</template></span>
@@ -61,23 +63,53 @@ const props = defineProps({
showCode: {
type: Boolean,
default: true
},
/** 绑定值字段:userId=用户ID(默认);userName=登录账号/工号(老系统迁移数据按工号存储时使用) */
valueField: {
type: String,
default: 'userId'
}
})
const emit = defineEmits(['update:modelValue', 'change'])
const { userList, ensureUsers, findUser } = useUsers()
const { userList, ensureUsers } = useUsers()
const loading = ref(false)
/** 下拉搜索关键字(可同时匹配昵称/姓名与登录账号/工号) */
const filterQuery = ref('')
const innerValue = ref(props.modelValue === null || props.modelValue === undefined ? null : String(props.modelValue))
watch(() => props.modelValue, (val) => {
innerValue.value = val === null || val === undefined || val === '' ? null : String(val)
})
/** 按当前绑定值字段(userId 或 userName/工号)查找用户 */
function findByValue(val) {
if (val === null || val === undefined || val === '') return null
return userList.value.find(u => String(u[props.valueField]) === String(val)) || null
}
/** 自定义过滤:昵称/姓名、登录账号/工号 任一命中即可(忽略大小写) */
function matchUser(item, q) {
if (!q) return true
const kw = q.trim().toLowerCase()
if (!kw) return true
return ['nickName', 'userName'].some(k => item[k] && String(item[k]).toLowerCase().includes(kw))
}
function filterMethod(q) {
filterQuery.value = q || ''
}
/** 下拉收起后清空搜索词,恢复完整选项 */
function handleVisibleChange(visible) {
if (!visible) filterQuery.value = ''
}
/** 兜底:当前值在用户列表中不存在(停用/未加载到)时补占位项,避免显示空白 */
const options = computed(() => {
const list = userList.value
if (innerValue.value && !findUser(innerValue.value)) {
const list = userList.value.filter(item => matchUser(item, filterQuery.value))
if (innerValue.value && !findByValue(innerValue.value) && !filterQuery.value) {
return [{ userId: innerValue.value, userName: '', nickName: String(innerValue.value) }, ...list]
}
return list
@@ -92,7 +124,7 @@ function formatLabel(item) {
function handleChange(val) {
const value = val === '' ? null : val
emit('update:modelValue', value)
emit('change', value, value === null ? null : findUser(value))
emit('change', value, value === null ? null : findByValue(value))
}
onMounted(() => {
@@ -74,6 +74,7 @@
<el-form-item label="业务员" prop="salesUserId">
<user-select
v-model="form.salesUserId"
value-field="userName"
placeholder="请选择业务员"
@change="(uid, user) => handleUserChange(uid, user, 'salesUser')"
/>
@@ -32,7 +32,12 @@
</el-form-item>
<el-form-item label="业务员" prop="salesUserId">
<user-select v-model="queryParams.salesUserId" placeholder="请选择业务员" @change="handleQuery" />
<user-select
v-model="queryParams.salesUserId"
value-field="userName"
placeholder="工号/姓名搜索"
@change="handleQuery"
/>
</el-form-item>
@@ -122,7 +127,7 @@
</template>
</el-table-column>
<el-table-column v-if="isColVisible('salesUserId')" label="业务员" align="center" prop="salesUserId">
<template #default="scope"><user-name :user-id="scope.row.salesUserId" /></template>
<template #default="scope">{{ scope.row.salesUserNickName || scope.row.salesUser || scope.row.salesUserId }}</template>
</el-table-column>
<!-- <el-table-column v-if="isColVisible('ed')" label="资金额度" align="center" prop="ed" />-->
@@ -188,6 +188,7 @@ const extraParams = computed(() => ({ deptId: deptId.value }))
// 搜索项配置
const searchColumns = [
{ label: "用户名称", prop: "userName", component: "input", placeholder: "请输入用户名称", width: "240px" },
{ label: "用户昵称", prop: "nickName", component: "input", placeholder: "请输入用户昵称", width: "240px" },
{ label: "手机号码", prop: "phonenumber", component: "input", placeholder: "请输入手机号码", width: "240px" },
{ label: "状态", prop: "status", component: "select", dict: "sys_normal_disable", placeholder: "用户状态", width: "240px" },
{ label: "创建时间", prop: "dateRange", component: "daterange", width: "308px" }