新增功能
This commit is contained in:
@@ -6,6 +6,7 @@ namespace app\adminapi\lists\tcm;
|
||||
|
||||
use app\adminapi\lists\BaseAdminDataLists;
|
||||
use app\common\lists\ListsSearchInterface;
|
||||
use app\adminapi\logic\tcm\PrescriptionLogic;
|
||||
use app\common\model\tcm\Prescription;
|
||||
|
||||
/**
|
||||
@@ -19,24 +20,86 @@ class PrescriptionLists extends BaseAdminDataLists implements ListsSearchInterfa
|
||||
public function setSearch(): array
|
||||
{
|
||||
return [
|
||||
'=' => ['is_shared'],
|
||||
'%like%' => ['prescription_name', 'patient_name', 'sn']
|
||||
'%like%' => ['patient_name', 'sn'],
|
||||
'between_time' => 'create_time',
|
||||
];
|
||||
}
|
||||
|
||||
/** 创建人(医师账号)多选,参数 creator_ids:数组或逗号分隔 ID */
|
||||
private function applyCreatorIdsFilter($query): void
|
||||
{
|
||||
$raw = $this->params['creator_ids'] ?? null;
|
||||
if ($raw === null || $raw === '') {
|
||||
return;
|
||||
}
|
||||
$ids = \is_array($raw) ? $raw : explode(',', (string) $raw);
|
||||
$ids = array_values(array_filter(array_map('intval', $ids), static function (int $id): bool {
|
||||
return $id > 0;
|
||||
}));
|
||||
if ($ids === []) {
|
||||
return;
|
||||
}
|
||||
$query->whereIn('creator_id', $ids);
|
||||
}
|
||||
|
||||
/**
|
||||
* audit_filter:passed=已通过,not_passed=未通过(待审+驳回),pending,rejected
|
||||
*/
|
||||
private function applyAuditFilter($query): void
|
||||
{
|
||||
$af = (string) ($this->params['audit_filter'] ?? '');
|
||||
if ($af === '' || $af === 'all') {
|
||||
return;
|
||||
}
|
||||
switch ($af) {
|
||||
case 'passed':
|
||||
$query->where('audit_status', '=', 1);
|
||||
break;
|
||||
case 'not_passed':
|
||||
$query->whereIn('audit_status', [0, 2]);
|
||||
break;
|
||||
case 'pending':
|
||||
$query->where('audit_status', '=', 0);
|
||||
break;
|
||||
case 'rejected':
|
||||
$query->where('audit_status', '=', 2);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
private function applyVisibilityScope($query): void
|
||||
{
|
||||
$query->where(function ($query) {
|
||||
if (!empty($this->adminInfo['root']) && (int) $this->adminInfo['root'] === 1) {
|
||||
return;
|
||||
}
|
||||
$adminId = $this->adminId;
|
||||
$roleIds = array_values(array_unique(array_map('intval', $this->adminInfo['role_id'] ?? [])));
|
||||
$query->where(function ($q) use ($adminId, $roleIds) {
|
||||
$q->whereOr('is_shared', '=', 1);
|
||||
$q->whereOr('creator_id', '=', $adminId);
|
||||
foreach ($roleIds as $rid) {
|
||||
if ($rid > 0) {
|
||||
$q->whereOrRaw('FIND_IN_SET(?, `visible_role_ids`)', [(string) $rid]);
|
||||
}
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* @notes 获取列表
|
||||
*/
|
||||
public function lists(): array
|
||||
{
|
||||
$lists = Prescription::where($this->searchWhere)
|
||||
->where(function ($query) {
|
||||
// 如果不是共享的,只能看到自己创建的
|
||||
$query->whereOr([
|
||||
['is_shared', '=', 1],
|
||||
['creator_id', '=', $this->adminId]
|
||||
]);
|
||||
})
|
||||
$query = Prescription::where($this->searchWhere);
|
||||
$this->applyAuditFilter($query);
|
||||
$this->applyVisibilityScope($query);
|
||||
$this->applyCreatorIdsFilter($query);
|
||||
|
||||
$lists = $query
|
||||
->whereNull('delete_time')
|
||||
->order('id', 'desc')
|
||||
->limit($this->limitOffset, $this->limitLength)
|
||||
@@ -51,7 +114,10 @@ class PrescriptionLists extends BaseAdminDataLists implements ListsSearchInterfa
|
||||
$item['usage_notes'] = $item['usage_notes'] ?? '';
|
||||
$item['usage_days'] = $item['usage_days'] ?? 7;
|
||||
$item['is_shared'] = $item['is_shared'] ?? 0;
|
||||
|
||||
$item['audit_status'] = (int) ($item['audit_status'] ?? 1);
|
||||
$item['void_status'] = (int) ($item['void_status'] ?? 0);
|
||||
$item['visible_role_ids'] = PrescriptionLogic::visibleRoleIdsToArray((string) ($item['visible_role_ids'] ?? ''));
|
||||
|
||||
// 将 dietary_taboo 从逗号分隔的字符串转换为数组(前端需要数组格式)
|
||||
if (!empty($item['dietary_taboo']) && is_string($item['dietary_taboo'])) {
|
||||
$item['dietary_taboo'] = array_filter(explode(',', $item['dietary_taboo']));
|
||||
@@ -68,15 +134,11 @@ class PrescriptionLists extends BaseAdminDataLists implements ListsSearchInterfa
|
||||
*/
|
||||
public function count(): int
|
||||
{
|
||||
return Prescription::where($this->searchWhere)
|
||||
->where(function ($query) {
|
||||
// 如果不是共享的,只能看到自己创建的
|
||||
$query->whereOr([
|
||||
['is_shared', '=', 1],
|
||||
['creator_id', '=', $this->adminId]
|
||||
]);
|
||||
})
|
||||
->whereNull('delete_time')
|
||||
->count();
|
||||
$query = Prescription::where($this->searchWhere);
|
||||
$this->applyAuditFilter($query);
|
||||
$this->applyVisibilityScope($query);
|
||||
$this->applyCreatorIdsFilter($query);
|
||||
|
||||
return $query->whereNull('delete_time')->count();
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user