This commit is contained in:
Your Name
2026-08-11 17:39:41 +08:00
parent cfe4c82c90
commit 25467b9d91
350 changed files with 201115 additions and 132208 deletions
+106 -106
View File
@@ -1,106 +1,106 @@
import request from '@/utils/request'
// 医生列表(从管理员表获取,role_id=1;默认不含禁止登录账号)
export function doctorLists(params: any) {
return request.get({
url: '/auth.admin/lists',
params: { ...params, role_id: 1, exclude_disabled: 1 }
})
}
// 医生详情
export function doctorDetail(params: any) {
return request.get({ url: '/auth.admin/detail', params })
}
// ========== 排班管理 ==========
// 获取排班列表(按周)
export function rosterLists(params: any) {
return request.get({ url: '/doctor.roster/lists', params })
}
// 添加/更新排班
export function rosterSave(params: any) {
return request.post({ url: '/doctor.roster/save', params })
}
// 删除排班
export function rosterDelete(params: any) {
return request.post({ url: '/doctor.roster/delete', params })
}
// 批量设置排班
export function rosterBatchSave(params: any) {
return request.post({ url: '/doctor.roster/batchSave', params })
}
// 获取医生某天的排班详情
export function rosterDetail(params: any) {
return request.get({ url: '/doctor.roster/detail', params })
}
// 复制排班(复制某周到另一周)
export function rosterCopy(params: any) {
return request.post({ url: '/doctor.roster/copy', params })
}
// ========== 挂号管理 ==========
// 获取医生某天的可用时间段
export function getAvailableSlots(params: any) {
return request.get({ url: '/doctor.appointment/availableSlots', params })
}
// 创建挂号
export function createAppointment(params: any) {
return request.post({ url: '/doctor.appointment/create', params })
}
// 取消挂号
export function cancelAppointment(params: any) {
return request.post({ url: '/doctor.appointment/cancel', params })
}
// 获取挂号列表
export function appointmentLists(params: any) {
return request.get({ url: '/doctor.appointment/lists', params })
}
/** 后台编辑挂号(预约日期/时段/类型/状态/备注/医助) */
export function appointmentAdminEdit(params: any) {
return request.post({ url: '/doctor.appointment/edit', params })
}
/** 批量修改挂号渠道来源(与 edit 共用 doctor.appointment/edit 权限) */
export function appointmentBatchEditChannel(params: any) {
return request.post({ url: '/doctor.appointment/batchEditChannel', params })
}
// 获取挂号详情
export function appointmentDetail(params: any) {
return request.get({ url: '/doctor.appointment/detail', params })
}
// 完成挂号
export function completeAppointment(params: any) {
return request.post({ url: '/doctor.appointment/complete', params })
}
// ========== 医生统计 ==========
// 获取医生诊单统计
export function getDoctorStatistics(params: any) {
return request.get({ url: '/doctor.statistics/lists', params })
}
// ========== 部门统计 ==========
// 获取部门列表
export function getDeptList() {
return request.get({ url: '/dept.dept/all' })
}
// 获取部门统计
export function getDeptStatistics(params: any) {
return request.get({ url: '/doctor.statistics/deptLists', params })
}
import request from '@/utils/request'
// 医生列表(从管理员表获取,role_id=1;默认不含禁止登录账号)
export function doctorLists(params: any) {
return request.get({
url: '/auth.admin/lists',
params: { ...params, role_id: 1, exclude_disabled: 1 }
})
}
// 医生详情
export function doctorDetail(params: any) {
return request.get({ url: '/auth.admin/detail', params })
}
// ========== 排班管理 ==========
// 获取排班列表(按周)
export function rosterLists(params: any) {
return request.get({ url: '/doctor.roster/lists', params })
}
// 添加/更新排班
export function rosterSave(params: any) {
return request.post({ url: '/doctor.roster/save', params })
}
// 删除排班
export function rosterDelete(params: any) {
return request.post({ url: '/doctor.roster/delete', params })
}
// 批量设置排班
export function rosterBatchSave(params: any) {
return request.post({ url: '/doctor.roster/batchSave', params })
}
// 获取医生某天的排班详情
export function rosterDetail(params: any) {
return request.get({ url: '/doctor.roster/detail', params })
}
// 复制排班(复制某周到另一周)
export function rosterCopy(params: any) {
return request.post({ url: '/doctor.roster/copy', params })
}
// ========== 挂号管理 ==========
// 获取医生某天的可用时间段
export function getAvailableSlots(params: any) {
return request.get({ url: '/doctor.appointment/availableSlots', params })
}
// 创建挂号
export function createAppointment(params: any) {
return request.post({ url: '/doctor.appointment/create', params })
}
// 取消挂号
export function cancelAppointment(params: any) {
return request.post({ url: '/doctor.appointment/cancel', params })
}
// 获取挂号列表
export function appointmentLists(params: any) {
return request.get({ url: '/doctor.appointment/lists', params })
}
/** 后台编辑挂号(预约日期/时段/类型/状态/备注/医助) */
export function appointmentAdminEdit(params: any) {
return request.post({ url: '/doctor.appointment/edit', params })
}
/** 批量修改挂号渠道来源(与 edit 共用 doctor.appointment/edit 权限) */
export function appointmentBatchEditChannel(params: any) {
return request.post({ url: '/doctor.appointment/batchEditChannel', params })
}
// 获取挂号详情
export function appointmentDetail(params: any) {
return request.get({ url: '/doctor.appointment/detail', params })
}
// 完成挂号
export function completeAppointment(params: any) {
return request.post({ url: '/doctor.appointment/complete', params })
}
// ========== 医生统计 ==========
// 获取医生诊单统计
export function getDoctorStatistics(params: any) {
return request.get({ url: '/doctor.statistics/lists', params })
}
// ========== 部门统计 ==========
// 获取部门列表
export function getDeptList() {
return request.get({ url: '/dept.dept/all' })
}
// 获取部门统计
export function getDeptStatistics(params: any) {
return request.get({ url: '/doctor.statistics/deptLists', params })
}
+289 -285
View File
@@ -1,285 +1,289 @@
import request from '@/utils/request'
export interface MyPatientListParams {
page_no: number
page_size: number
keyword?: string
status_filter?: '' | 'unbooked' | 'pending_interview' | 'completed' | 'missed'
start_date?: string
end_date?: string
}
export function myPatientLists(params: MyPatientListParams) {
return request.get({ url: '/firstvisit.myPatient/lists', params })
}
export interface MyPatientOrderListParams {
page_no: number
page_size: number
keyword?: string
prescription_audit_status?: '' | number
payment_slip_audit_status?: '' | number
fulfillment_status?: '' | number
start_date?: string
end_date?: string
}
export function myPatientOrderLists(params: MyPatientOrderListParams) {
return request.get({ url: '/firstvisit.myPatient/orders', params })
}
export function myPatientOrderDetail(params: { id: number }) {
return request.get({ url: '/firstvisit.myPatient/orderDetail', params })
}
export function myPatientOrderEdit(params: Record<string, unknown>) {
return request.post({ url: '/firstvisit.myPatient/orderEdit', params })
}
export function myPatientOrderAuditPrescription(params: {
id: number
action: 'approve' | 'reject'
remark?: string
}) {
return request.post({ url: '/firstvisit.myPatient/orderAuditPrescription', params })
}
export function myPatientOrderRevokeRxAudit(params: { id: number }) {
return request.post({ url: '/firstvisit.myPatient/orderRevokeRxAudit', params })
}
export function myPatientOrderAuditPayment(params: {
id: number
action: 'approve' | 'reject'
remark?: string
}) {
return request.post({ url: '/firstvisit.myPatient/orderAuditPayment', params })
}
export function myPatientOrderRevokePayAudit(params: { id: number }) {
return request.post({ url: '/firstvisit.myPatient/orderRevokePayAudit', params })
}
export function myPatientOrderDdcode(params: {
id: number
express_company: string
tracking_number: string
}) {
return request.post({ url: '/firstvisit.myPatient/orderDdcode', params })
}
export function myPatientOrderShip(params: {
id: number
ship_mode?: 'gancao' | 'direct'
express_company: string
tracking_number: string
}) {
return request.post({ url: '/firstvisit.myPatient/orderShip', params })
}
export function myPatientOrderAddPayOrder(params: {
id: number
order_type: number
pay_amount: number
pay_remark?: string
completion_request?: number
pay_create_type?: 'fubei' | 'express_cod'
}) {
return request.post({ url: '/firstvisit.myPatient/orderAddPayOrder', params })
}
export function myPatientOrderComplete(params: { id: number; fulfillment_status: number }) {
return request.post({ url: '/firstvisit.myPatient/orderComplete', params })
}
export function myPatientOrderRefund(params: { id: number; reason: string; refund_amount?: number }) {
return request.post({ url: '/firstvisit.myPatient/orderRefund', params })
}
export function myPatientOrderWithdraw(params: { id: number }) {
return request.post({ url: '/firstvisit.myPatient/orderWithdraw', params })
}
export function myPatientOrderUploadToPharmacy(params: { id: number }) {
return request.post({ url: '/firstvisit.myPatient/orderUploadToPharmacy', params })
}
export interface MyPatientProgressListParams {
page_no: number
page_size: number
keyword?: string
status?: '' | 1 | 3 | 4
start_date?: string
end_date?: string
}
export function myPatientProgressLists(params: MyPatientProgressListParams) {
return request.get({ url: '/firstvisit.myPatient/progress', params })
}
export function myPatientCreateAppointment(params: Record<string, unknown>) {
return request.post({ url: '/firstvisit.myPatient/createAppointment', params })
}
export function myPatientCancelAppointment(params: { id: number }) {
return request.post({ url: '/firstvisit.myPatient/cancelAppointment', params })
}
export function myPatientAssistants() {
return request.get({ url: '/firstvisit.myPatient/assistants' })
}
export function myPatientAssign(params: { id: number; assistant_id: number; is_inherit?: 0 | 1 }) {
return request.post({ url: '/firstvisit.myPatient/assign', params })
}
export function myPatientFillIdCard(params: { id: number; id_card: string }) {
return request.post({ url: '/firstvisit.myPatient/fillIdCard', params })
}
export interface FirstVisitConversionParams {
time_type: 'today' | 'yesterday' | 'week' | 'month' | 'quarter' | 'year'
dept_id?: number
assistant_id?: number
media_channel_code?: string
}
/** 一诊综合数据转化:服务端按当前角色 DataScope 与所选部门/员工取交集。 */
export function firstVisitConversionOverview(params: FirstVisitConversionParams) {
return request.get(
{ url: '/firstvisit.conversion/overview', params, timeout: 120000 },
{ ignoreCancelToken: true }
)
}
export interface FirstVisitRegistrationStatsParams {
time_type: 'today' | 'week' | 'month'
dept_id?: number
assistant_id?: number
}
/** 一诊挂号统计:部门和员工参数只会在服务端 DataScope 权限范围内继续收窄。 */
export function firstVisitRegistrationStatsOverview(params: FirstVisitRegistrationStatsParams) {
return request.get(
{ url: '/firstvisit.registrationStats/overview', params, timeout: 120000 },
{ ignoreCancelToken: true }
)
}
export interface FirstVisitDoctorDashboardParams {
time_type: 'today' | 'week' | 'month'
dept_id?: number
doctor_id?: number
active_only?: 0 | 1
alert_threshold?: number
}
/** 一诊医生看板:医生与经手医助范围均由服务端根据当前角色和部门权限计算。 */
export function firstVisitDoctorDashboardOverview(params: FirstVisitDoctorDashboardParams) {
return request.get(
{ url: '/firstvisit.doctorDashboard/overview', params, timeout: 120000 },
{ ignoreCancelToken: true }
)
}
export function wecomPromotionOverview() {
return request.get({ url: '/firstvisit.wecomPromotion/overview' })
}
export function wecomPromotionSavePool(params: Record<string, unknown>) {
return request.post({ url: '/firstvisit.wecomPromotion/savePool', params })
}
export function wecomPromotionSaveWidget(params: Record<string, unknown>) {
return request.post({ url: '/firstvisit.wecomPromotion/saveWidget', params })
}
export function wecomPromotionDeletePool(params: { id: number }) {
return request.post({ url: '/firstvisit.wecomPromotion/deletePool', params })
}
export function wecomPromotionSaveLink(params: Record<string, unknown>) {
return request.post({ url: '/firstvisit.wecomPromotion/saveLink', params })
}
export function wecomPromotionCheckApiPermission() {
return request.post({ url: '/firstvisit.wecomPromotion/checkApiPermission' })
}
export function wecomPromotionSyncRemoteLinks(params: { pool_id: number }) {
return request.post({ url: '/firstvisit.wecomPromotion/syncRemoteLinks', params, timeout: 120000 })
}
export function wecomPromotionRemoteLinkDetail(params: { id: number }) {
return request.get({ url: '/firstvisit.wecomPromotion/remoteLinkDetail', params })
}
export function wecomPromotionDeleteRemoteLink(params: { id: number }) {
return request.post({ url: '/firstvisit.wecomPromotion/deleteRemoteLink', params })
}
export function wecomPromotionToggleLink(params: { id: number; status: number }) {
return request.post({ url: '/firstvisit.wecomPromotion/toggleLink', params })
}
export function wecomPromotionDeleteLink(params: { id: number }) {
return request.post({ url: '/firstvisit.wecomPromotion/deleteLink', params })
}
export type WecomPromotionCustomerChatStatus = '' | 'messaged' | 'silent' | 'unknown'
export interface WecomPromotionCustomerStatsParams {
page_no: number
page_size: number
promotion_link_id?: number
userid?: string
chat_status?: 0 | 1 | 2
}
export interface WecomPromotionCustomerStatsSummary {
customer_count: number
messaged_customer_count: number
message_customer_rate: number
received_message_count: number
message_count_known_count: number
}
export interface WecomPromotionCustomerStatRow {
id?: number
external_userid_masked?: string
customer_id_masked?: string
customer_name_masked?: string
link_id?: number | string
link_name?: string
member_id?: number
member_name?: string
department_name?: string
dept_name?: string
has_messaged?: boolean | number
chat_status?: 0 | 1 | 2
message_count_known?: boolean | number
received_message_count?: number
last_synced_at?: string
last_message_at?: string
}
export interface WecomPromotionCustomerStatsResult {
summary?: Partial<WecomPromotionCustomerStatsSummary>
lists?: WecomPromotionCustomerStatRow[]
total?: number
link_options?: Array<{ id: number | string; name: string }>
member_options?: Array<{ id: number; name: string; department_name?: string; dept_name?: string }>
meta?: { last_synced_at?: string }
}
/** 获客客户消息统计:服务端继续按当前角色和部门数据范围收窄。 */
export function wecomPromotionCustomerStats(params: WecomPromotionCustomerStatsParams) {
return request.get(
{ url: '/firstvisit.wecomPromotion/customerStatistics', params, timeout: 120000 },
{ ignoreCancelToken: true }
)
}
export function wecomPromotionSyncCustomers(params: { promotion_link_id?: number } = {}) {
return request.post({ url: '/firstvisit.wecomPromotion/syncCustomers', params, timeout: 120000 })
}
import request from '@/utils/request'
export interface MyPatientListParams {
page_no: number
page_size: number
keyword?: string
status_filter?: '' | 'unbooked' | 'pending_interview' | 'completed' | 'missed'
start_date?: string
end_date?: string
}
export function myPatientLists(params: MyPatientListParams) {
return request.get({ url: '/firstvisit.myPatient/lists', params })
}
export interface MyPatientOrderListParams {
page_no: number
page_size: number
keyword?: string
prescription_audit_status?: '' | number
payment_slip_audit_status?: '' | number
fulfillment_status?: '' | number
start_date?: string
end_date?: string
}
export function myPatientOrderLists(params: MyPatientOrderListParams) {
return request.get({ url: '/firstvisit.myPatient/orders', params })
}
export function myPatientOrderDetail(params: { id: number }) {
return request.get({ url: '/firstvisit.myPatient/orderDetail', params })
}
export function myPatientOrderEdit(params: Record<string, unknown>) {
return request.post({ url: '/firstvisit.myPatient/orderEdit', params })
}
export function myPatientOrderAuditPrescription(params: {
id: number
action: 'approve' | 'reject'
remark?: string
}) {
return request.post({ url: '/firstvisit.myPatient/orderAuditPrescription', params })
}
export function myPatientOrderRevokeRxAudit(params: { id: number }) {
return request.post({ url: '/firstvisit.myPatient/orderRevokeRxAudit', params })
}
export function myPatientOrderAuditPayment(params: {
id: number
action: 'approve' | 'reject'
remark?: string
}) {
return request.post({ url: '/firstvisit.myPatient/orderAuditPayment', params })
}
export function myPatientOrderRevokePayAudit(params: { id: number }) {
return request.post({ url: '/firstvisit.myPatient/orderRevokePayAudit', params })
}
export function myPatientOrderDdcode(params: {
id: number
express_company: string
tracking_number: string
}) {
return request.post({ url: '/firstvisit.myPatient/orderDdcode', params })
}
export function myPatientOrderShip(params: {
id: number
ship_mode?: 'gancao' | 'direct'
express_company: string
tracking_number: string
}) {
return request.post({ url: '/firstvisit.myPatient/orderShip', params })
}
export function myPatientOrderAddPayOrder(params: {
id: number
order_type: number
pay_amount: number
pay_remark?: string
completion_request?: number
pay_create_type?: 'fubei' | 'express_cod'
}) {
return request.post({ url: '/firstvisit.myPatient/orderAddPayOrder', params })
}
export function myPatientOrderComplete(params: { id: number; fulfillment_status: number }) {
return request.post({ url: '/firstvisit.myPatient/orderComplete', params })
}
export function myPatientOrderRefund(params: { id: number; reason: string; refund_amount?: number }) {
return request.post({ url: '/firstvisit.myPatient/orderRefund', params })
}
export function myPatientOrderWithdraw(params: { id: number }) {
return request.post({ url: '/firstvisit.myPatient/orderWithdraw', params })
}
export function myPatientOrderUploadToPharmacy(params: { id: number }) {
return request.post({ url: '/firstvisit.myPatient/orderUploadToPharmacy', params })
}
export interface MyPatientProgressListParams {
page_no: number
page_size: number
keyword?: string
status?: '' | 1 | 3 | 4
start_date?: string
end_date?: string
}
export function myPatientProgressLists(params: MyPatientProgressListParams) {
return request.get({ url: '/firstvisit.myPatient/progress', params })
}
export function myPatientCreateAppointment(params: Record<string, unknown>) {
return request.post({ url: '/firstvisit.myPatient/createAppointment', params })
}
export function myPatientCancelAppointment(params: { id: number }) {
return request.post({ url: '/firstvisit.myPatient/cancelAppointment', params })
}
export function myPatientAssistants() {
return request.get({ url: '/firstvisit.myPatient/assistants' })
}
export function myPatientAssign(params: { id: number; assistant_id: number; is_inherit?: 0 | 1 }) {
return request.post({ url: '/firstvisit.myPatient/assign', params })
}
export function myPatientFillIdCard(params: { id: number; id_card: string }) {
return request.post({ url: '/firstvisit.myPatient/fillIdCard', params })
}
export interface FirstVisitConversionParams {
time_type: 'today' | 'yesterday' | 'week' | 'month' | 'quarter' | 'year' | 'custom'
start_date?: string
end_date?: string
dept_id?: number
assistant_id?: number
media_channel_code?: string
}
/** 一诊综合数据转化:服务端按当前角色 DataScope 与所选部门/员工取交集。 */
export function firstVisitConversionOverview(params: FirstVisitConversionParams) {
return request.get(
{ url: '/firstvisit.conversion/overview', params, timeout: 120000 },
{ ignoreCancelToken: true }
)
}
export interface FirstVisitRegistrationStatsParams {
time_type: 'today' | 'week' | 'month'
dept_id?: number
assistant_id?: number
}
/** 一诊挂号统计:部门和员工参数只会在服务端 DataScope 权限范围内继续收窄。 */
export function firstVisitRegistrationStatsOverview(params: FirstVisitRegistrationStatsParams) {
return request.get(
{ url: '/firstvisit.registrationStats/overview', params, timeout: 120000 },
{ ignoreCancelToken: true }
)
}
export interface FirstVisitDoctorDashboardParams {
time_type: 'today' | 'week' | 'month' | 'custom'
start_date?: string
end_date?: string
dept_id?: number
doctor_id?: number
active_only?: 0 | 1
alert_threshold?: number
}
/** 一诊医生看板:医生与经手医助范围均由服务端根据当前角色和部门权限计算。 */
export function firstVisitDoctorDashboardOverview(params: FirstVisitDoctorDashboardParams) {
return request.get(
{ url: '/firstvisit.doctorDashboard/overview', params, timeout: 120000 },
{ ignoreCancelToken: true }
)
}
export function wecomPromotionOverview() {
return request.get({ url: '/firstvisit.wecomPromotion/overview' })
}
export function wecomPromotionSavePool(params: Record<string, unknown>) {
return request.post({ url: '/firstvisit.wecomPromotion/savePool', params })
}
export function wecomPromotionSaveWidget(params: Record<string, unknown>) {
return request.post({ url: '/firstvisit.wecomPromotion/saveWidget', params })
}
export function wecomPromotionDeletePool(params: { id: number }) {
return request.post({ url: '/firstvisit.wecomPromotion/deletePool', params })
}
export function wecomPromotionSaveLink(params: Record<string, unknown>) {
return request.post({ url: '/firstvisit.wecomPromotion/saveLink', params })
}
export function wecomPromotionCheckApiPermission() {
return request.post({ url: '/firstvisit.wecomPromotion/checkApiPermission' })
}
export function wecomPromotionSyncRemoteLinks(params: { pool_id: number }) {
return request.post({ url: '/firstvisit.wecomPromotion/syncRemoteLinks', params, timeout: 120000 })
}
export function wecomPromotionRemoteLinkDetail(params: { id: number }) {
return request.get({ url: '/firstvisit.wecomPromotion/remoteLinkDetail', params })
}
export function wecomPromotionDeleteRemoteLink(params: { id: number }) {
return request.post({ url: '/firstvisit.wecomPromotion/deleteRemoteLink', params })
}
export function wecomPromotionToggleLink(params: { id: number; status: number }) {
return request.post({ url: '/firstvisit.wecomPromotion/toggleLink', params })
}
export function wecomPromotionDeleteLink(params: { id: number }) {
return request.post({ url: '/firstvisit.wecomPromotion/deleteLink', params })
}
export type WecomPromotionCustomerChatStatus = '' | 'messaged' | 'silent' | 'unknown'
export interface WecomPromotionCustomerStatsParams {
page_no: number
page_size: number
promotion_link_id?: number
userid?: string
chat_status?: 0 | 1 | 2
}
export interface WecomPromotionCustomerStatsSummary {
customer_count: number
messaged_customer_count: number
message_customer_rate: number
received_message_count: number
message_count_known_count: number
}
export interface WecomPromotionCustomerStatRow {
id?: number
external_userid_masked?: string
customer_id_masked?: string
customer_name_masked?: string
link_id?: number | string
link_name?: string
member_id?: number
member_name?: string
department_name?: string
dept_name?: string
has_messaged?: boolean | number
chat_status?: 0 | 1 | 2
message_count_known?: boolean | number
received_message_count?: number
last_synced_at?: string
last_message_at?: string
}
export interface WecomPromotionCustomerStatsResult {
summary?: Partial<WecomPromotionCustomerStatsSummary>
lists?: WecomPromotionCustomerStatRow[]
total?: number
link_options?: Array<{ id: number | string; name: string }>
member_options?: Array<{ id: number; name: string; department_name?: string; dept_name?: string }>
meta?: { last_synced_at?: string }
}
/** 获客客户消息统计:服务端继续按当前角色和部门数据范围收窄。 */
export function wecomPromotionCustomerStats(params: WecomPromotionCustomerStatsParams) {
return request.get(
{ url: '/firstvisit.wecomPromotion/customerStatistics', params, timeout: 120000 },
{ ignoreCancelToken: true }
)
}
export function wecomPromotionSyncCustomers(params: { promotion_link_id?: number } = {}) {
return request.post({ url: '/firstvisit.wecomPromotion/syncCustomers', params, timeout: 120000 })
}
+111 -111
View File
@@ -1,111 +1,111 @@
import request from '@/utils/request'
// 订单列表
export function orderLists(params: any) {
return request.get({ url: '/order.order/lists', params })
}
// 同步企业微信对外收款账单到订单
export function syncWechatWorkBills(params?: { begin_time?: string; end_time?: string }) {
return request.get({ url: '/order.order/syncWechatWorkBills', params })
}
// 调试:测试企业微信对外收款 API 连接
export function syncWechatWorkBillsDebug(params?: { begin_time?: string; end_time?: string; payee_userid?: string }) {
return request.get({ url: '/order.order/syncWechatWorkBillsDebug', params })
}
// 今日收益(按角色权限)
export function orderTodayRevenue() {
return request.get({ url: '/order.order/todayRevenue' })
}
// 订单统计(-1全部已支付类型合计,0退款,1~8:含全部费用与驼奶费用等)
export function orderStats(params?: { order_type?: number; days?: number }) {
return request.get({ url: '/order.order/orderStats', params })
}
// 订单详情
export function orderDetail(params: any) {
return request.post({ url: '/order.order/detail', params })
}
// 创建订单
export function orderCreate(params: any) {
return request.post({ url: '/order.order/create', params })
}
// 创建企业微信对外收款订单(返回 order_no 供企业微信发起收款时使用)
export function orderCreateForWechatWork(params: any) {
return request.post({ url: '/order.order/createForWechatWork', params })
}
// 编辑订单
export function orderEdit(params: any) {
return request.post({ url: '/order.order/edit', params })
}
// 删除订单
export function orderDelete(params: any) {
return request.post({ url: '/order.order/delete', params })
}
// 支付订单
export function orderPay(params: any) {
return request.post({ url: '/order.order/pay', params })
}
// 支付宝支付
export function alipayPay(params: any) {
return request.post({ url: '/order.order/alipay', params })
}
// 微信支付
export function wechatPay(params: any) {
return request.post({ url: '/order.order/wechat', params })
}
// 取消订单
export function orderCancel(params: any) {
return request.post({ url: '/order.order/cancel', params })
}
// 退款订单
export function orderRefund(params: any) {
return request.post({ url: '/order.order/refund', params })
}
// 导出订单
export function orderExport(params: any) {
return request.get({ url: '/order.order/export', params }, { isReturnDefaultResponse: true })
}
// 拆分订单(待支付 / 付呗待审核)
export function orderSplit(params: { id: number; amounts: number[]; order_types: number[] }) {
return request.post({ url: '/order.order/split', params })
}
// 搜索患者(从诊单表)
export function searchPatients(params: any) {
return request.get({ url: '/tcm.diagnosis/searchPatient', params })
}
/** 单条订单操作日志(分页) */
export function orderActionLogs(params: { order_id: number; page_no?: number; page_size?: number }) {
return request.get({ url: '/order.order/actionLogs', params })
}
/** 按管理员统计操作次数(时间范围,未传时默认近 7 天) */
export function orderActionLogStats(params?: { start_time?: string; end_time?: string; limit?: number }) {
return request.get({ url: '/order.order/actionLogStats', params })
}
/** 批量将支付单指派给医助 */
export function orderBatchAssignAssistant(params: { order_ids: number[]; assistant_id: number }) {
return request.post({ url: '/order.order/assignAssistant', params })
}
/** 设置/取消支付单豁免权 */
export function orderSetExempt(params: { id: number; is_exempt: 0 | 1 }) {
return request.post({ url: '/order.order/setExempt', params })
}
import request from '@/utils/request'
// 订单列表
export function orderLists(params: any) {
return request.get({ url: '/order.order/lists', params })
}
// 同步企业微信对外收款账单到订单
export function syncWechatWorkBills(params?: { begin_time?: string; end_time?: string }) {
return request.get({ url: '/order.order/syncWechatWorkBills', params })
}
// 调试:测试企业微信对外收款 API 连接
export function syncWechatWorkBillsDebug(params?: { begin_time?: string; end_time?: string; payee_userid?: string }) {
return request.get({ url: '/order.order/syncWechatWorkBillsDebug', params })
}
// 今日收益(按角色权限)
export function orderTodayRevenue() {
return request.get({ url: '/order.order/todayRevenue' })
}
// 订单统计(-1全部已支付类型合计,0退款,1~8:含全部费用与驼奶费用等)
export function orderStats(params?: { order_type?: number; days?: number }) {
return request.get({ url: '/order.order/orderStats', params })
}
// 订单详情
export function orderDetail(params: any) {
return request.post({ url: '/order.order/detail', params })
}
// 创建订单
export function orderCreate(params: any) {
return request.post({ url: '/order.order/create', params })
}
// 创建企业微信对外收款订单(返回 order_no 供企业微信发起收款时使用)
export function orderCreateForWechatWork(params: any) {
return request.post({ url: '/order.order/createForWechatWork', params })
}
// 编辑订单
export function orderEdit(params: any) {
return request.post({ url: '/order.order/edit', params })
}
// 删除订单
export function orderDelete(params: any) {
return request.post({ url: '/order.order/delete', params })
}
// 支付订单
export function orderPay(params: any) {
return request.post({ url: '/order.order/pay', params })
}
// 支付宝支付
export function alipayPay(params: any) {
return request.post({ url: '/order.order/alipay', params })
}
// 微信支付
export function wechatPay(params: any) {
return request.post({ url: '/order.order/wechat', params })
}
// 取消订单
export function orderCancel(params: any) {
return request.post({ url: '/order.order/cancel', params })
}
// 退款订单
export function orderRefund(params: any) {
return request.post({ url: '/order.order/refund', params })
}
// 导出订单
export function orderExport(params: any) {
return request.get({ url: '/order.order/export', params }, { isReturnDefaultResponse: true })
}
// 拆分订单(待支付 / 付呗待审核)
export function orderSplit(params: { id: number; amounts: number[]; order_types: number[] }) {
return request.post({ url: '/order.order/split', params })
}
// 搜索患者(从诊单表)
export function searchPatients(params: any) {
return request.get({ url: '/tcm.diagnosis/searchPatient', params })
}
/** 单条订单操作日志(分页) */
export function orderActionLogs(params: { order_id: number; page_no?: number; page_size?: number }) {
return request.get({ url: '/order.order/actionLogs', params })
}
/** 按管理员统计操作次数(时间范围,未传时默认近 7 天) */
export function orderActionLogStats(params?: { start_time?: string; end_time?: string; limit?: number }) {
return request.get({ url: '/order.order/actionLogStats', params })
}
/** 批量将支付单指派给医助 */
export function orderBatchAssignAssistant(params: { order_ids: number[]; assistant_id: number }) {
return request.post({ url: '/order.order/assignAssistant', params })
}
/** 设置/取消支付单豁免权 */
export function orderSetExempt(params: { id: number; is_exempt: 0 | 1 }) {
return request.post({ url: '/order.order/setExempt', params })
}
+31 -31
View File
@@ -1,31 +1,31 @@
import request from '@/utils/request'
// 部门列表
export function deptLists(params?: any) {
return request.get({ url: '/dept.dept/lists', params })
}
// 添加部门
export function deptAdd(params: any) {
return request.post({ url: '/dept.dept/add', params })
}
// 编辑部门
export function deptEdit(params: any) {
return request.post({ url: '/dept.dept/edit', params })
}
// 删除部门
export function deptDelete(params: any) {
return request.post({ url: '/dept.dept/delete', params })
}
// 部门详情
export function deptDetail(params: any) {
return request.get({ url: '/dept.dept/detail', params })
}
// 部门列表全部;apply_data_scope=1 时按当前账号角色数据权限收窄树(与 DataScopeService 一致)
export function deptAll(params?: { apply_data_scope?: number }) {
return request.get({ url: '/dept.dept/all', params })
}
import request from '@/utils/request'
// 部门列表
export function deptLists(params?: any) {
return request.get({ url: '/dept.dept/lists', params })
}
// 添加部门
export function deptAdd(params: any) {
return request.post({ url: '/dept.dept/add', params })
}
// 编辑部门
export function deptEdit(params: any) {
return request.post({ url: '/dept.dept/edit', params })
}
// 删除部门
export function deptDelete(params: any) {
return request.post({ url: '/dept.dept/delete', params })
}
// 部门详情
export function deptDetail(params: any) {
return request.get({ url: '/dept.dept/detail', params })
}
// 部门列表全部;apply_data_scope=1 时按当前账号角色数据权限收窄树(与 DataScopeService 一致)
export function deptAll(params?: { apply_data_scope?: number }) {
return request.get({ url: '/dept.dept/all', params })
}
+255 -255
View File
@@ -1,255 +1,255 @@
import request from '@/utils/request'
/** 角色数据驾驶舱:服务端统一按当前管理员的数据范围聚合。 */
export function performanceDashboardOverview(params?: { ranking_dept_id?: number; _t?: number }) {
return request.get(
{ url: '/stats.performanceDashboard/overview', params, timeout: 120000 },
{ ignoreCancelToken: true }
)
}
export function getConversionStatsOverview(params: any) {
return request.get({ url: '/stats.conversion/overview', params })
}
/** 业绩看板:单区间(部门 × 时间 × 渠道) */
export function yejiStatsOverview(params: {
start_date: string
end_date: string
dept_ids?: number[] | string
channel_code?: string
}) {
return request.get({ url: '/stats.yejiStats/overview', params })
}
/** 业绩看板:多区间一次返回(默认 月/周/今日/昨日 四张表) */
export function yejiStatsMulti(params: {
dept_ids?: number[] | string
channel_code?: string
ranges?: Array<{ label?: string; start_date: string; end_date: string }>
}) {
return request.get({ url: '/stats.yejiStats/multi', params })
}
/** 业绩看板:部门下拉 */
export function yejiStatsDeptOptions() {
return request.get({ url: '/stats.yejiStats/deptOptions' })
}
/** 业绩看板:渠道下拉(按 source_group_name 分组) */
export function yejiStatsChannelOptions() {
return request.get({ url: '/stats.yejiStats/channelOptions' })
}
/** 业绩看板:医助排行榜(按部门分表;区间须与当前业绩表一致) */
export function yejiStatsLeaderboard(params: {
start_date: string
end_date: string
dept_ids?: number[] | string
channel_code?: string
}) {
return request.get({ url: '/stats.yejiStats/leaderboard', params })
}
/** 「未归属中心」行:按订单创建人拆解合计业绩(与看板「合计业绩」未归属部分同口径) */
export function yejiStatsUnassignedBreakdown(params: {
start_date: string
end_date: string
dept_ids?: string
channel_code?: string
tag_id?: string
}) {
return request.get({ url: '/stats.yejiStats/unassignedBreakdown', params })
}
/** 部门行「进线数据」逐条明细(与看板同口径) */
export function yejiStatsLeadLines(params: {
start_date: string
end_date: string
dept_id: number
dept_ids?: string
channel_code?: string
tag_id?: string
page?: number
page_size?: number
}) {
return request.get({ url: '/stats.yejiStats/leadLines', params })
}
/** 医助排行榜「预约诊单」逐条挂号明细;业绩主表部门行传 dept_id(可与 assistant_id 二选一) */
export function yejiStatsAppointmentLines(params: {
start_date: string
end_date: string
assistant_id?: number
dept_id?: number
dept_ids?: string
channel_code?: string
tag_id?: string
page?: number
page_size?: number
}) {
return request.get({ url: '/stats.yejiStats/appointmentLines', params })
}
/** 二中心复诊:部门行下钻医助 × 业务订单笔数 */
export function yejiStatsRevisitBreakdown(params: {
start_date: string
end_date: string
dept_id: number
revisit_slot: number
dept_ids?: string
channel_code?: string
tag_id?: string
}) {
return request.get({ url: '/stats.yejiStats/revisitBreakdown', params })
}
/** 被指派数明细:与看板「被指派数」同口径;部门行传 dept_id,医助排行榜传 assistant_id */
export function yejiStatsAssignLines(params: {
start_date: string
end_date: string
dept_id?: number
assistant_id?: number
dept_ids?: string
channel_code?: string
tag_id?: string
page?: number
page_size?: number
}) {
return request.get({ url: '/stats.yejiStats/assignLines', params })
}
export function doctorDailyStatsOverview(params: {
start_date?: string
end_date?: string
channel_code?: string
dept_ids?: number[] | string
}) {
return request.get({ url: '/stats.doctorDailyStats/overview', params })
}
/** 提成结算接口计算较重,单独放宽超时(默认多为 60s) */
const COMMISSION_SETTLEMENT_TIMEOUT_MS = 120000
/** 提成结算业绩(独立于业绩看板 yejiStats) */
export function commissionSettlementOverview(params: {
settlement_month: string
/** 与 tcm.prescriptionOrder/lists 同源:create_time between */
start_time?: string
end_time?: string
/** 默认 3=履约完成,与列表 fulfillment_status 一致 */
fulfillment_status?: number
/** 传 1 时仅统计 is_system_auto=1;显式时段下默认不传(含手动) */
require_system_auto_prescription?: 0 | 1
dept_ids?: number[] | string
channel_code?: string
}) {
return request.get(
{ url: '/stats.commissionSettlement/overview', params, timeout: COMMISSION_SETTLEMENT_TIMEOUT_MS },
{ ignoreCancelToken: true }
)
}
export function commissionSettlementDeptOptions() {
return request.get({ url: '/stats.commissionSettlement/deptOptions' })
}
export function commissionSettlementChannelOptions() {
return request.get({ url: '/stats.commissionSettlement/channelOptions' })
}
/** 提成核对:订单明细分页 bucket: 空|current|deferredappt_channel_value 可与 assistant_id/doctor_id 组合(0=未匹配挂号渠道) */
export function commissionSettlementOrderLines(params: {
settlement_month: string
start_time?: string
end_time?: string
fulfillment_status?: number
require_system_auto_prescription?: 0 | 1
dept_ids?: number[] | string
channel_code?: string
page?: number
page_size?: number
bucket?: string
assistant_id?: number
doctor_id?: number
appt_channel_value?: number
}) {
return request.get(
{ url: '/stats.commissionSettlement/orderLines', params, timeout: COMMISSION_SETTLEMENT_TIMEOUT_MS },
{ ignoreCancelToken: true }
)
}
export function commissionSettlementConfirmStatus(params: {
settlement_month: string
dept_ids?: number[] | string
channel_code?: string
}) {
return request.get({ url: '/stats.commissionSettlement/confirmStatus', params })
}
export function commissionSettlementSaveReconcile(params: Record<string, any>) {
return request.post({ url: '/stats.commissionSettlement/saveReconcile', params })
}
export function commissionSettlementConfirmFinalize(params: Record<string, any>) {
return request.post(
{ url: '/stats.commissionSettlement/confirmFinalize', params, timeout: COMMISSION_SETTLEMENT_TIMEOUT_MS },
{ ignoreCancelToken: true }
)
}
/** 撤回「确定本期业绩」:清除顺延结转,状态变为可再次核对/确定 */
export function commissionSettlementConfirmRevoke(params: Record<string, any>) {
return request.post({ url: '/stats.commissionSettlement/confirmRevoke', params })
}
/** 复诊接诊率(按月):当月 N 诊接诊率,部门 → 医助分组 + 合计;剔除「继承」指派 */
export function revisitRateOverview(params: { month?: string; dept_ids?: string }) {
return request.get({ url: '/stats.revisitRate/overview', params })
}
/** 复诊接诊率:部门下拉(前端组树) */
export function revisitRateDeptOptions() {
return request.get({ url: '/stats.revisitRate/deptOptions' })
}
/** 复诊接诊率:「被指派数」点击下钻(按诊单聚合明细) */
export function revisitRateAssignLines(params: {
month?: string
dept_ids?: string
assistant_id?: number
dept_id?: number
}) {
return request.get({ url: '/stats.revisitRate/assignLines', params })
}
/** 复诊接诊率:「N 诊单数」点击下钻(具体订单明细) */
export function revisitRateVisitOrderLines(params: {
month?: string
slot: number
dept_ids?: string
assistant_id?: number
dept_id?: number
}) {
return request.get({ url: '/stats.revisitRate/visitOrderLines', params })
}
/** 待分配诊单自动指派日志列表(定时命令 tcm:auto-assign-pending 写入,含分配/未分配原因) */
export function autoAssignLogLists(params: Record<string, any>) {
return request.get({ url: '/stats.autoAssignLog/lists', params })
}
/** 批量回退自动分配:将诊单医助撤回到自动分配前的原医助 */
export function autoAssignLogRollback(data: { ids: number[] }) {
return request.post({ url: '/stats.autoAssignLog/rollback', data })
}
/** 医助个人业绩概览 */
export function assistantPerformanceOverview(params: {
time_type?: string
start_date?: string
end_date?: string
}) {
return request.get({ url: '/stats.assistantPerformance/overview', params })
}
import request from '@/utils/request'
/** 角色数据驾驶舱:服务端统一按当前管理员的数据范围聚合。 */
export function performanceDashboardOverview(params?: { ranking_dept_id?: number; _t?: number }) {
return request.get(
{ url: '/stats.performanceDashboard/overview', params, timeout: 120000 },
{ ignoreCancelToken: true }
)
}
export function getConversionStatsOverview(params: any) {
return request.get({ url: '/stats.conversion/overview', params })
}
/** 业绩看板:单区间(部门 × 时间 × 渠道) */
export function yejiStatsOverview(params: {
start_date: string
end_date: string
dept_ids?: number[] | string
channel_code?: string
}) {
return request.get({ url: '/stats.yejiStats/overview', params })
}
/** 业绩看板:多区间一次返回(默认 月/周/今日/昨日 四张表) */
export function yejiStatsMulti(params: {
dept_ids?: number[] | string
channel_code?: string
ranges?: Array<{ label?: string; start_date: string; end_date: string }>
}) {
return request.get({ url: '/stats.yejiStats/multi', params })
}
/** 业绩看板:部门下拉 */
export function yejiStatsDeptOptions() {
return request.get({ url: '/stats.yejiStats/deptOptions' })
}
/** 业绩看板:渠道下拉(按 source_group_name 分组) */
export function yejiStatsChannelOptions() {
return request.get({ url: '/stats.yejiStats/channelOptions' })
}
/** 业绩看板:医助排行榜(按部门分表;区间须与当前业绩表一致) */
export function yejiStatsLeaderboard(params: {
start_date: string
end_date: string
dept_ids?: number[] | string
channel_code?: string
}) {
return request.get({ url: '/stats.yejiStats/leaderboard', params })
}
/** 「未归属中心」行:按订单创建人拆解合计业绩(与看板「合计业绩」未归属部分同口径) */
export function yejiStatsUnassignedBreakdown(params: {
start_date: string
end_date: string
dept_ids?: string
channel_code?: string
tag_id?: string
}) {
return request.get({ url: '/stats.yejiStats/unassignedBreakdown', params })
}
/** 部门行「进线数据」逐条明细(与看板同口径) */
export function yejiStatsLeadLines(params: {
start_date: string
end_date: string
dept_id: number
dept_ids?: string
channel_code?: string
tag_id?: string
page?: number
page_size?: number
}) {
return request.get({ url: '/stats.yejiStats/leadLines', params })
}
/** 医助排行榜「预约诊单」逐条挂号明细;业绩主表部门行传 dept_id(可与 assistant_id 二选一) */
export function yejiStatsAppointmentLines(params: {
start_date: string
end_date: string
assistant_id?: number
dept_id?: number
dept_ids?: string
channel_code?: string
tag_id?: string
page?: number
page_size?: number
}) {
return request.get({ url: '/stats.yejiStats/appointmentLines', params })
}
/** 二中心复诊:部门行下钻医助 × 业务订单笔数 */
export function yejiStatsRevisitBreakdown(params: {
start_date: string
end_date: string
dept_id: number
revisit_slot: number
dept_ids?: string
channel_code?: string
tag_id?: string
}) {
return request.get({ url: '/stats.yejiStats/revisitBreakdown', params })
}
/** 被指派数明细:与看板「被指派数」同口径;部门行传 dept_id,医助排行榜传 assistant_id */
export function yejiStatsAssignLines(params: {
start_date: string
end_date: string
dept_id?: number
assistant_id?: number
dept_ids?: string
channel_code?: string
tag_id?: string
page?: number
page_size?: number
}) {
return request.get({ url: '/stats.yejiStats/assignLines', params })
}
export function doctorDailyStatsOverview(params: {
start_date?: string
end_date?: string
channel_code?: string
dept_ids?: number[] | string
}) {
return request.get({ url: '/stats.doctorDailyStats/overview', params })
}
/** 提成结算接口计算较重,单独放宽超时(默认多为 60s) */
const COMMISSION_SETTLEMENT_TIMEOUT_MS = 120000
/** 提成结算业绩(独立于业绩看板 yejiStats) */
export function commissionSettlementOverview(params: {
settlement_month: string
/** 与 tcm.prescriptionOrder/lists 同源:create_time between */
start_time?: string
end_time?: string
/** 默认 3=履约完成,与列表 fulfillment_status 一致 */
fulfillment_status?: number
/** 传 1 时仅统计 is_system_auto=1;显式时段下默认不传(含手动) */
require_system_auto_prescription?: 0 | 1
dept_ids?: number[] | string
channel_code?: string
}) {
return request.get(
{ url: '/stats.commissionSettlement/overview', params, timeout: COMMISSION_SETTLEMENT_TIMEOUT_MS },
{ ignoreCancelToken: true }
)
}
export function commissionSettlementDeptOptions() {
return request.get({ url: '/stats.commissionSettlement/deptOptions' })
}
export function commissionSettlementChannelOptions() {
return request.get({ url: '/stats.commissionSettlement/channelOptions' })
}
/** 提成核对:订单明细分页 bucket: 空|current|deferredappt_channel_value 可与 assistant_id/doctor_id 组合(0=未匹配挂号渠道) */
export function commissionSettlementOrderLines(params: {
settlement_month: string
start_time?: string
end_time?: string
fulfillment_status?: number
require_system_auto_prescription?: 0 | 1
dept_ids?: number[] | string
channel_code?: string
page?: number
page_size?: number
bucket?: string
assistant_id?: number
doctor_id?: number
appt_channel_value?: number
}) {
return request.get(
{ url: '/stats.commissionSettlement/orderLines', params, timeout: COMMISSION_SETTLEMENT_TIMEOUT_MS },
{ ignoreCancelToken: true }
)
}
export function commissionSettlementConfirmStatus(params: {
settlement_month: string
dept_ids?: number[] | string
channel_code?: string
}) {
return request.get({ url: '/stats.commissionSettlement/confirmStatus', params })
}
export function commissionSettlementSaveReconcile(params: Record<string, any>) {
return request.post({ url: '/stats.commissionSettlement/saveReconcile', params })
}
export function commissionSettlementConfirmFinalize(params: Record<string, any>) {
return request.post(
{ url: '/stats.commissionSettlement/confirmFinalize', params, timeout: COMMISSION_SETTLEMENT_TIMEOUT_MS },
{ ignoreCancelToken: true }
)
}
/** 撤回「确定本期业绩」:清除顺延结转,状态变为可再次核对/确定 */
export function commissionSettlementConfirmRevoke(params: Record<string, any>) {
return request.post({ url: '/stats.commissionSettlement/confirmRevoke', params })
}
/** 复诊接诊率(按月):当月 N 诊接诊率,部门 → 医助分组 + 合计;剔除「继承」指派 */
export function revisitRateOverview(params: { month?: string; dept_ids?: string }) {
return request.get({ url: '/stats.revisitRate/overview', params })
}
/** 复诊接诊率:部门下拉(前端组树) */
export function revisitRateDeptOptions() {
return request.get({ url: '/stats.revisitRate/deptOptions' })
}
/** 复诊接诊率:「被指派数」点击下钻(按诊单聚合明细) */
export function revisitRateAssignLines(params: {
month?: string
dept_ids?: string
assistant_id?: number
dept_id?: number
}) {
return request.get({ url: '/stats.revisitRate/assignLines', params })
}
/** 复诊接诊率:「N 诊单数」点击下钻(具体订单明细) */
export function revisitRateVisitOrderLines(params: {
month?: string
slot: number
dept_ids?: string
assistant_id?: number
dept_id?: number
}) {
return request.get({ url: '/stats.revisitRate/visitOrderLines', params })
}
/** 待分配诊单自动指派日志列表(定时命令 tcm:auto-assign-pending 写入,含分配/未分配原因) */
export function autoAssignLogLists(params: Record<string, any>) {
return request.get({ url: '/stats.autoAssignLog/lists', params })
}
/** 批量回退自动分配:将诊单医助撤回到自动分配前的原医助 */
export function autoAssignLogRollback(data: { ids: number[] }) {
return request.post({ url: '/stats.autoAssignLog/rollback', data })
}
/** 医助个人业绩概览 */
export function assistantPerformanceOverview(params: {
time_type?: string
start_date?: string
end_date?: string
}) {
return request.get({ url: '/stats.assistantPerformance/overview', params })
}
+165
View File
@@ -590,6 +590,119 @@ export function prescriptionOrderSetShipMode(params: { id: number; ship_mode: 'g
// ========== 处方库 ==========
export type PrescriptionAiProfile = 'qwen' | 'openai'
export interface PrescriptionLibraryHerb {
medicine_id?: number
name: string
dosage: number | string
}
export interface PrescriptionLibraryRow {
id: number
prescription_name: string
formula_type: '主方' | '辅方' | string
herbs: PrescriptionLibraryHerb[]
is_public: 0 | 1
disable_edit: 0 | 1
creator_id: number
creator_name: string
create_time: string
update_time?: string
}
export interface PrescriptionAiStructuredReport {
summary: string
possible_symptoms: string[]
main_indications: string
efficacy: string[]
suitable_people: string[]
compatibility_analysis: string
cautions: string[]
disclaimer: string
}
export interface PrescriptionAiReportRecord {
report_id: number
id: number
model_key: PrescriptionAiProfile
model_name: string
model_label: string
prompt_version: string
message_id: string
prescription_fingerprint: string
is_stale: boolean
generated_by: number
generated_time: number
generated_at: string
report?: PrescriptionAiStructuredReport | null
content: string
edited_by: number
edited_time: number
edited_at?: string
is_edited: boolean
}
export interface PrescriptionAiGenerationResult {
model_key: PrescriptionAiProfile
model_name: string
model_label: string
status: 'success' | 'error'
report_id?: number
message_id?: string
prompt_version?: string
latency_ms: number
error_code?: string
error_message?: string
}
export interface PrescriptionAiCapabilities {
can_view: boolean
can_refresh: boolean
can_edit: boolean
}
export interface PrescriptionAiReportsResponse {
prescription_id: number
prescription_name: string
formula_type: string
prescription_updated_at: string
prescription_fingerprint: string
prompt_version: string
reports: PrescriptionAiReportRecord[]
missing_model_keys: PrescriptionAiProfile[]
can_view: boolean
can_refresh: boolean
can_edit: boolean
capabilities: PrescriptionAiCapabilities
status?: 'success' | 'partial' | 'error'
partial?: boolean
success_count?: number
failure_count?: number
results?: PrescriptionAiGenerationResult[]
}
export interface PrescriptionAiReportEditResponse {
prescription_id: number
report: PrescriptionAiReportRecord
can_edit: boolean
can_refresh: boolean
}
export interface PrescriptionMissingAiReportItem {
id: number
prescription_name: string
formula_type: string
herb_count: number
}
export interface PrescriptionMissingAiReportsResponse {
total: number
items: PrescriptionMissingAiReportItem[]
limit: number
truncated?: boolean
}
// 处方库列表
export function prescriptionLibraryLists(params: any) {
return request.get({ url: '/tcm.prescriptionLibrary/lists', params })
@@ -615,6 +728,58 @@ export function prescriptionLibraryDetail(params: { id: number }) {
return request.get({ url: '/tcm.prescriptionLibrary/detail', params })
}
/** 查询完全没有持久化 AI 报告的处方,单次最多返回 500 条。 */
export function prescriptionLibraryMissingAiReports(params: { limit?: number } = {}) {
return request.get<PrescriptionMissingAiReportsResponse>(
{
url: '/tcm.prescriptionLibrary/missingAiReports',
params,
timeout: 30000
},
{ ignoreCancelToken: true }
)
}
/** 读取数据库中已保存的 AI 报告;不会触发模型生成。 */
export function prescriptionLibraryAiReports(params: { id: number }) {
return request.get<PrescriptionAiReportsResponse>(
{
url: '/tcm.prescriptionLibrary/aiReports',
params,
timeout: 30000
},
{ ignoreCancelToken: true }
)
}
/** 重新生成整份多模型诊断报告;POST 不自动重试,避免重复计费。 */
export function prescriptionLibraryGenerateAiReports(params: { id: number }) {
return request.post<PrescriptionAiReportsResponse>(
{
url: '/tcm.prescriptionLibrary/generateAiReports',
params,
timeout: 210000
},
{ ignoreCancelToken: true, isOpenRetry: false }
)
}
/** 编辑一份已持久化的模型报告。 */
export function prescriptionLibraryEditAiReport(params: {
id: number
report_id: number
content: string
}) {
return request.post<PrescriptionAiReportEditResponse>(
{
url: '/tcm.prescriptionLibrary/editAiReport',
params,
timeout: 30000
},
{ ignoreCancelToken: true, isOpenRetry: false }
)
}
// ========== 诊单待办事项(T5 ==========
/** 待办列表(按 diagnosis_id */