This commit is contained in:
Your Name
2026-03-20 13:56:40 +08:00
parent 7147c8e148
commit d765517b74
258 changed files with 2481 additions and 364 deletions
@@ -131,6 +131,7 @@ class DiagnosisLists extends BaseAdminDataLists implements ListsSearchInterface
$apt = $appointmentMap[$item['patient_id']] ?? null;
if ($apt) {
$item['has_appointment'] = 1;
$item['appointment_id'] = $apt['id'];
$item['appointment_doctor_id'] = $apt['doctor_id'];
$item['appointment_doctor_name'] = $doctorNames[$apt['doctor_id']] ?? '-';
$timePart = $apt['appointment_time'] ?? '';
@@ -140,6 +141,7 @@ class DiagnosisLists extends BaseAdminDataLists implements ListsSearchInterface
$item['appointment_time_text'] = trim(($apt['appointment_date'] ?? '') . ' ' . $timePart);
} else {
$item['has_appointment'] = 0;
$item['appointment_id'] = null;
$item['appointment_doctor_id'] = null;
$item['appointment_doctor_name'] = '';
$item['appointment_time_text'] = '';
@@ -148,6 +150,7 @@ class DiagnosisLists extends BaseAdminDataLists implements ListsSearchInterface
} else {
foreach ($lists as &$item) {
$item['has_appointment'] = 0;
$item['appointment_id'] = null;
$item['appointment_doctor_id'] = null;
$item['appointment_doctor_name'] = '';
$item['appointment_time_text'] = '';
+36 -1
View File
@@ -52,6 +52,16 @@ class AdminLogic extends BaseLogic
$defaultAvatar = config('project.default_image.admin_avatar');
$avatar = !empty($params['avatar']) ? FileService::setFileUrl($params['avatar']) : $defaultAvatar;
// 处理资质图片:如果是数组则转为JSON字符串
$qualificationImages = '';
if (isset($params['qualification_images'])) {
if (is_array($params['qualification_images'])) {
$qualificationImages = json_encode($params['qualification_images'], JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES);
} else {
$qualificationImages = $params['qualification_images'];
}
}
$admin = Admin::create([
'name' => $params['name'],
'account' => $params['account'],
@@ -71,6 +81,7 @@ class AdminLogic extends BaseLogic
'experience' => $params['experience'] ?? null,
'honors' => $params['honors'] ?? null,
'license_no' => $params['license_no'] ?? '',
'qualification_images' => $qualificationImages,
'enable_image_consult' => $params['enable_image_consult'] ?? 1,
'enable_video_consult' => $params['enable_video_consult'] ?? 1,
'enable_charge' => $params['enable_charge'] ?? 0,
@@ -107,6 +118,16 @@ class AdminLogic extends BaseLogic
{
Db::startTrans();
try {
// 处理资质图片:如果是数组则转为JSON字符串
$qualificationImages = '';
if (isset($params['qualification_images'])) {
if (is_array($params['qualification_images'])) {
$qualificationImages = json_encode($params['qualification_images'], JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES);
} else {
$qualificationImages = $params['qualification_images'];
}
}
// 基础信息
$data = [
'id' => $params['id'],
@@ -125,6 +146,7 @@ class AdminLogic extends BaseLogic
'experience' => $params['experience'] ?? null,
'honors' => $params['honors'] ?? null,
'license_no' => $params['license_no'] ?? '',
'qualification_images' => $qualificationImages,
'enable_image_consult' => $params['enable_image_consult'] ?? 1,
'enable_video_consult' => $params['enable_video_consult'] ?? 1,
'enable_charge' => $params['enable_charge'] ?? 0,
@@ -262,10 +284,23 @@ class AdminLogic extends BaseLogic
'multipoint_login', 'avatar',
'gender', 'age', 'phone', 'title', 'department',
'specialty', 'education', 'experience', 'honors',
'license_no', 'enable_image_consult', 'enable_video_consult', 'enable_charge',
'license_no', 'qualification_images', 'enable_image_consult', 'enable_video_consult', 'enable_charge',
'work_wechat_userid'
])->findOrEmpty($params['id'])->toArray();
// 将资质图片JSON字符串转换为数组,供前端组件使用
if (!empty($admin['qualification_images'])) {
try {
$images = json_decode($admin['qualification_images'], true);
if (is_array($images)) {
$admin['qualification_images'] = $images;
}
} catch (\Exception $e) {
// 解析失败时保持原值
Log::error('解析资质图片失败: ' . $e->getMessage());
}
}
if ($action == 'detail') {
$roleIds = AdminRole::where('admin_id', $params['id'])->column('role_id');
if (in_array(2, $roleIds)) {
@@ -1014,6 +1014,7 @@ class DiagnosisLogic extends BaseLogic
// 获取小程序配置
$config = self::getMiniProgramConfig();
if (!$config) {
throw new \Exception('小程序配置未设置');
}
@@ -1022,7 +1023,7 @@ class DiagnosisLogic extends BaseLogic
// 调用微信接口生成小程序码
$qrcodeUrl = self::generateWxQrcode($config, $page, $scene);
if (!$qrcodeUrl) {
throw new \Exception('生成小程序码失败: ' . self::getError());
}
@@ -1122,7 +1123,7 @@ class DiagnosisLogic extends BaseLogic
if (!$accessToken) {
throw new \Exception('获取access_token失败: ' . self::getError());
}
// 调用微信接口生成小程序码
$url = "https://api.weixin.qq.com/wxa/getwxacodeunlimit?access_token={$accessToken}";
@@ -1213,7 +1214,7 @@ class DiagnosisLogic extends BaseLogic
// 从微信服务器获取
$url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid={$appId}&secret={$appSecret}";
$response = self::httpGet($url);
// 记录原始响应用于调试
\think\facade\Log::info('微信AccessToken响应: ' . $response);
@@ -1383,7 +1384,7 @@ class DiagnosisLogic extends BaseLogic
'user_id' => $userId,
'diagnosis_id' => $diagnosisId
])->find();
$now = time();
if ($record) {
@@ -1434,16 +1435,26 @@ class DiagnosisLogic extends BaseLogic
* @param int $patientId
* @return array|false
*/
public static function getCardList(int $patientId)
public static function getCardList(int $user_id)
{
try {
if (!$patientId) {
self::setError('患者ID不能为空');
if (!$user_id) {
self::setError('用户ID不能为空');
return false;
}
// 查询该患者的所有诊单
$cardList = Diagnosis::where('patient_id', $patientId)
// 从诊断查看记录表中获取该用户查看过的诊断ID列表
$viewRecords = \think\facade\Db::name('diagnosis_view_records')
->where('user_id', $user_id)
->where('delete_time', null)
->column('diagnosis_id');
if (empty($viewRecords)) {
return [];
}
// 根据诊断ID列表查询诊单详情
$cardList = Diagnosis::whereIn('id', $viewRecords)
->where('delete_time', null)
->field([
'id', 'patient_id', 'patient_name', 'gender', 'age',
@@ -1482,7 +1493,7 @@ class DiagnosisLogic extends BaseLogic
return $cardList;
} catch (\Exception $e) {
\think\facade\Log::error('获取就诊卡列表失败 - patient_id: ' . $patientId . ', error: ' . $e->getMessage());
\think\facade\Log::error('获取就诊卡列表失败 - user_id: ' . $user_id . ', error: ' . $e->getMessage());
self::setError($e->getMessage());
return false;
}
@@ -69,6 +69,7 @@ class PrescriptionLogic
'pulse' => $params['pulse'] ?? $diagnosis->pulse ?? '',
'tongue' => $params['tongue'] ?? $diagnosis->tongue_coating ?? '',
'clinical_diagnosis' => $params['clinical_diagnosis'] ?? '',
'case_record' => $params['case_record'] ?? null,
'herbs' => $herbs,
'dose_count' => (int)($params['dose_count'] ?? 1),
'dose_unit' => $params['dose_unit'] ?? '剂',
@@ -33,7 +33,6 @@ class DiagnosisValidate extends BaseValidate
'age' => 'require|number|between:0,150',
'diagnosis_date' => 'require',
'diagnosis_type' => 'require',
'syndrome_type' => 'require',
'status' => 'in:0,1',
];
@@ -51,7 +50,6 @@ class DiagnosisValidate extends BaseValidate
'age.between' => '年龄范围0-150',
'diagnosis_date.require' => '请选择诊断日期',
'diagnosis_type.require' => '请选择诊断类型',
'syndrome_type.require' => '请选择证型',
'status.in' => '状态参数错误',
];