This commit is contained in:
Your Name
2026-05-25 18:32:17 +08:00
parent 5430fe0417
commit 58c224a081
5 changed files with 376 additions and 3 deletions
@@ -216,6 +216,22 @@
@keyup.enter="resetPage"
/>
</el-form-item>
<el-form-item v-if="showAuditAdminFilter" class="w-[200px]" label="下单人">
<el-select
v-model="queryParams.audit_admin_id"
clearable
filterable
placeholder="全部下单人"
class="!w-full"
>
<el-option
v-for="a in auditAdminOptions"
:key="a.id"
:label="a.name"
:value="a.id"
/>
</el-select>
</el-form-item>
<el-form-item class="w-[200px]" label="医生">
<el-select
v-model="queryParams.doctor_id"
@@ -2688,9 +2704,39 @@ function openDiagnosisPatientDetailFromOrder() {
/** 诊间医助角色(与 DiagnosisLists 等一致) */
const TCM_ASSISTANT_ROLE_ID = 2
/** 下单角色(与 server/config/project.php prescription_order_placer_role_ids 一致) */
const ORDER_PLACER_ROLE_ID = 6
/** 拥有以下角色时可按任意审核人筛选(与 prescription_order_placer_exempt_role_ids 一致) */
const ORDER_PLACER_EXEMPT_ROLE_IDS = [3, 8]
/** 与 server/config/project.php prescription_audit_roles 默认一致,可处方审核的角色 */
const PRESCRIPTION_AUDIT_ROLE_IDS = [0, 3, 6]
/** 「下单」角色:下单人筛选仅允许查本人审核过的订单 */
const isOrderPlacerAuditFilterRestricted = computed(() => {
const u = userStore.userInfo
if (!u || Number(u.root) === 1) return false
const ids = Array.isArray(u.role_ids) ? u.role_ids.map((n: unknown) => Number(n)) : []
if (!ids.includes(ORDER_PLACER_ROLE_ID)) return false
return !ORDER_PLACER_EXEMPT_ROLE_IDS.some((rid) => ids.includes(rid))
})
/** 超管 / 经理 / 管理员:可按任意下单人筛选 */
const canSearchAnyAuditAdmin = computed(() => {
const u = userStore.userInfo
if (!u) return false
if (Number(u.root) === 1) return true
const ids = Array.isArray(u.role_ids) ? u.role_ids.map((n: unknown) => Number(n)) : []
return ORDER_PLACER_EXEMPT_ROLE_IDS.some((rid) => ids.includes(rid))
})
/** 是否展示「下单人」筛选(下单角色 + 经理/管理员/超管) */
const showAuditAdminFilter = computed(
() => isOrderPlacerAuditFilterRestricted.value || canSearchAnyAuditAdmin.value
)
/** 下单人下拉(lists extend.audit_admin_options,下单角色用户) */
const auditAdminOptions = ref<Array<{ id: number; name: string }>>([])
/**
* 是否展示处方审核筛选纯医助含角色 2 且不具备处方审核角色仅能用支付单审核筛选
*/
@@ -2928,7 +2974,9 @@ const queryParams = reactive({
/** 服务渠道:'' 不限;'0' 未指派(库内 '' 或 '0' */
service_channel: '' as '' | '0',
/** 列表排除履约已取消(4):重点看板「待处方审核」等用 */
exclude_fulfillment_cancelled: 0 as number
exclude_fulfillment_cancelled: 0 as number,
/** 下单人(关联操作日志 audit_rx_* / audit_pay_* */
audit_admin_id: '' as number | ''
})
const rxAuditTabs = [
@@ -3041,6 +3089,11 @@ function normalizePrescriptionOrderListQuery(params: Record<string, unknown>): R
}
if (!p.order_no) delete p.order_no
if (!String(p.patient_keyword || '').trim()) delete p.patient_keyword
if (p.audit_admin_id === '' || p.audit_admin_id === undefined || p.audit_admin_id === null) {
delete p.audit_admin_id
} else {
p.audit_admin_id = Number(p.audit_admin_id)
}
if (!String(p.express_keyword || '').trim()) delete p.express_keyword
if (!p.express_company || p.express_company === '') delete p.express_company
if (p.service_channel === '' || p.service_channel === undefined || p.service_channel === null) {
@@ -3076,6 +3129,24 @@ const { pager, getLists, resetPage, resetParams } = usePaging({
params: queryParams
})
watch(
() => (pager.extend as Record<string, unknown> | undefined)?.audit_admin_options,
(raw) => {
if (!Array.isArray(raw)) return
auditAdminOptions.value = raw
.map((r: unknown) => {
if (r == null || typeof r !== 'object') return null
const row = r as Record<string, unknown>
const id = Number(row.id)
const name = String(row.name ?? '').trim()
if (!Number.isFinite(id) || id <= 0 || name === '') return null
return { id, name }
})
.filter((x): x is { id: number; name: string } => x != null)
},
{ immediate: true }
)
/** 业绩看板等入口:URL 携带创建区间、诊单医助部门 / 医助 id */
function applyRouteQueryToPrescriptionOrderList() {
const q = route.query
@@ -3267,6 +3338,7 @@ function handleReset() {
queryParams.payment_slip_audit_status = ''
queryParams.supply_mode = ''
queryParams.service_channel = ''
queryParams.audit_admin_id = ''
queryParams.exclude_fulfillment_cancelled = 0
resetParams()
}
@@ -234,6 +234,22 @@
@keyup.enter="resetPage"
/>
</el-form-item>
<el-form-item v-if="showAuditAdminFilter" class="w-[200px]" label="下单人">
<el-select
v-model="queryParams.audit_admin_id"
clearable
filterable
placeholder="全部下单人"
class="!w-full"
>
<el-option
v-for="a in auditAdminOptions"
:key="a.id"
:label="a.name"
:value="a.id"
/>
</el-select>
</el-form-item>
<el-form-item class="w-[200px]" label="医生">
<el-select
v-model="queryParams.doctor_id"
@@ -2440,9 +2456,39 @@ function openDiagnosisPatientDetailFromOrder() {
/** 诊间医助角色(与 DiagnosisLists 等一致) */
const TCM_ASSISTANT_ROLE_ID = 2
/** 下单角色(与 server/config/project.php prescription_order_placer_role_ids 一致) */
const ORDER_PLACER_ROLE_ID = 6
/** 拥有以下角色时可按任意审核人筛选(与 prescription_order_placer_exempt_role_ids 一致) */
const ORDER_PLACER_EXEMPT_ROLE_IDS = [3, 8]
/** 与 server/config/project.php prescription_audit_roles 默认一致,可处方审核的角色 */
const PRESCRIPTION_AUDIT_ROLE_IDS = [0, 3, 6]
/** 「下单」角色:下单人筛选仅允许查本人审核过的订单 */
const isOrderPlacerAuditFilterRestricted = computed(() => {
const u = userStore.userInfo
if (!u || Number(u.root) === 1) return false
const ids = Array.isArray(u.role_ids) ? u.role_ids.map((n: unknown) => Number(n)) : []
if (!ids.includes(ORDER_PLACER_ROLE_ID)) return false
return !ORDER_PLACER_EXEMPT_ROLE_IDS.some((rid) => ids.includes(rid))
})
/** 超管 / 经理 / 管理员:可按任意下单人筛选 */
const canSearchAnyAuditAdmin = computed(() => {
const u = userStore.userInfo
if (!u) return false
if (Number(u.root) === 1) return true
const ids = Array.isArray(u.role_ids) ? u.role_ids.map((n: unknown) => Number(n)) : []
return ORDER_PLACER_EXEMPT_ROLE_IDS.some((rid) => ids.includes(rid))
})
/** 是否展示「下单人」筛选(下单角色 + 经理/管理员/超管) */
const showAuditAdminFilter = computed(
() => isOrderPlacerAuditFilterRestricted.value || canSearchAnyAuditAdmin.value
)
/** 下单人下拉(lists extend.audit_admin_options,下单角色用户) */
const auditAdminOptions = ref<Array<{ id: number; name: string }>>([])
/**
* 是否展示处方审核筛选纯医助含角色 2 且不具备处方审核角色仅能用支付单审核筛选
*/
@@ -2673,7 +2719,9 @@ const queryParams = reactive({
prescription_audit_status: '' as number | '',
payment_slip_audit_status: '' as number | '',
/** 供货方式:甘草(已传甘草药方单号)/ 自营(无甘草单号) */
supply_mode: '' as '' | 'gancao' | 'self'
supply_mode: '' as '' | 'gancao' | 'self',
/** 下单人(关联操作日志 audit_rx_* / audit_pay_* */
audit_admin_id: '' as number | ''
})
const rxAuditTabs = [
@@ -2767,6 +2815,11 @@ async function fetchLists(params: Record<string, unknown>) {
}
if (!p.order_no) delete p.order_no
if (!String(p.patient_keyword || '').trim()) delete p.patient_keyword
if (p.audit_admin_id === '' || p.audit_admin_id === undefined || p.audit_admin_id === null) {
delete p.audit_admin_id
} else {
p.audit_admin_id = Number(p.audit_admin_id)
}
if (!String(p.express_keyword || '').trim()) delete p.express_keyword
if (!p.express_company || p.express_company === '') delete p.express_company
if (!String(p.start_time || '').trim() || !String(p.end_time || '').trim()) {
@@ -2789,6 +2842,24 @@ const { pager, getLists, resetPage, resetParams } = usePaging({
params: queryParams
})
watch(
() => (pager.extend as Record<string, unknown> | undefined)?.audit_admin_options,
(raw) => {
if (!Array.isArray(raw)) return
auditAdminOptions.value = raw
.map((r: unknown) => {
if (r == null || typeof r !== 'object') return null
const row = r as Record<string, unknown>
const id = Number(row.id)
const name = String(row.name ?? '').trim()
if (!Number.isFinite(id) || id <= 0 || name === '') return null
return { id, name }
})
.filter((x): x is { id: number; name: string } => x != null)
},
{ immediate: true }
)
/** 选医助部门后,医助下拉仅显示该部门及子部门成员(与后台含子级一致) */
const filteredAssistantOptions = computed(() => {
const deptRaw = queryParams.assistant_dept_id
@@ -2950,6 +3021,7 @@ function handleReset() {
queryParams.prescription_audit_status = ''
queryParams.payment_slip_audit_status = ''
queryParams.supply_mode = ''
queryParams.audit_admin_id = ''
resetParams()
}