This commit is contained in:
zlwu committed 2026-05-25 15:14:06 +08:00
1 parent 575e63e7e8
commit 771f010a39
165 files changed
+67359 -21698

No files matched your search

+182 -2
View File
@@ -862,7 +862,13 @@ type PageResult<T> = {
totalPages: number
}
export function fetchCustomerList(params?: { page?: number; pageSize?: number; keyword?: string }) {
export function fetchCustomerList(params?: {
page?: number
pageSize?: number
keyword?: string
createTimeStart?: string
createTimeEnd?: string
}) {
return request.get<PageResult<Api.BizCustomer.CustomerItem>>({
url: '/web/admin/customers',
params
@@ -1433,7 +1439,13 @@ export function fetchRemoveOccupancy(id: string) {
// 展馆预约
// ---------------------------------------------------------------------------
export function fetchExhibitionAppointmentList(params?: { page?: number; pageSize?: number; keyword?: string }) {
export function fetchExhibitionAppointmentList(params?: {
page?: number
pageSize?: number
keyword?: string
visitDateStart?: string
visitDateEnd?: string
}) {
return request.get({ url: '/web/admin/exhibition-appointments', params })
}
@@ -1873,6 +1885,8 @@ export function fetchStorageCertList(params?: {
pageSize?: number
keyword?: string
makeStatus?: string
storageInDateStart?: string
storageInDateEnd?: string
}) {
return request.get({ url: '/web/admin/storage-certs', params })
}
@@ -1884,6 +1898,8 @@ export function fetchFullmoonTodoList(params?: {
pageSize?: number
keyword?: string
todoStatus?: string
fullmoonDateStart?: string
fullmoonDateEnd?: string
}) {
return request.get({ url: '/web/admin/fullmoon-todos', params })
}
@@ -2005,3 +2021,167 @@ export function fetchConfirmTxn(txnId: string, data: Record<string, any>) {
export function fetchVoidTxn(txnId: string) {
return request.put({ url: `/web/admin/channel-service-order-txns/${txnId}/void` })
}
// ==================== 中试服务申请单 ====================
export function fetchPilotApplicationList(params: any) {
return request({ url: '/pilot-application/list', method: 'get', params })
}
export function fetchPilotApplicationDetail(params: any) {
return request({ url: '/pilot-application/detail', method: 'get', params })
}
export function createPilotApplication(data: any) {
return request({ url: '/pilot-application/create', method: 'post', data })
}
export function updatePilotApplication(data: any) {
return request({ url: '/pilot-application/update', method: 'put', data })
}
export function deletePilotApplication(data: any) {
return request({ url: '/pilot-application/delete', method: 'delete', data })
}
export function startPilotApplication(data: any) {
return request({ url: '/pilot-application/start', method: 'post', data })
}
export function completePilotApplication(data: any) {
return request({ url: '/pilot-application/complete', method: 'post', data })
}
export function voidPilotApplication(data: any) {
return request({ url: '/pilot-application/void', method: 'post', data })
}
// 患者信息
export function fetchPilotPatient(params: any) {
return request({ url: '/pilot-patient/detail', method: 'get', params })
}
export function savePilotPatient(data: any) {
return request({ url: '/pilot-patient/save', method: 'post', data })
}
// 输注方案
export function fetchPilotInfusionPlanList(params: any) {
return request({ url: '/pilot-infusion-plan/list', method: 'get', params })
}
export function createPilotInfusionPlan(data: any) {
return request({ url: '/pilot-infusion-plan/create', method: 'post', data })
}
export function updatePilotInfusionPlan(data: any) {
return request({ url: '/pilot-infusion-plan/update', method: 'put', data })
}
export function deletePilotInfusionPlan(data: any) {
return request({ url: '/pilot-infusion-plan/delete', method: 'delete', data })
}
// 输注计划
export function fetchPilotInfusionScheduleList(params: any) {
return request({ url: '/pilot-infusion-schedule/list', method: 'get', params })
}
export function autoGenerateSchedules(data: any) {
return request({ url: '/pilot-infusion-schedule/auto-generate', method: 'post', data })
}
export function updatePilotInfusionSchedule(data: any) {
return request({ url: '/pilot-infusion-schedule/update', method: 'put', data })
}
export function deletePilotInfusionSchedule(data: any) {
return request({ url: '/pilot-infusion-schedule/delete', method: 'delete', data })
}
export function markScheduleComplete(data: any) {
return request({ url: '/pilot-infusion-schedule/mark-complete', method: 'post', data })
}
// ========== 中试服务 - 体检管理 ==========
export const fetchPilotCheckupDetail = (params: any) =>
request.get('/web/admin/pilot-checkup/detail', { params })
export const savePilotCheckup = (data: any) =>
request.post('/web/admin/pilot-checkup/save', data)
export const deletePilotCheckup = (data: any) =>
request.delete('/web/admin/pilot-checkup/delete', { data })
export const markPilotCheckupChecked = (data: any) =>
request.post('/web/admin/pilot-checkup/mark-checked', data)
export const settlePilotCheckupFee = (data: any) =>
request.post('/web/admin/pilot-checkup/settle-fee', data)
export const fetchPilotCheckupReserveItems = (params: any) =>
request.get('/web/admin/pilot-checkup/reserve-items', { params })
export const savePilotCheckupReserveItems = (data: any) =>
request.post('/web/admin/pilot-checkup/reserve-items/save', data)
export const deletePilotCheckupReserveItem = (data: any) =>
request.delete('/web/admin/pilot-checkup/reserve-item/delete', { data })
export const fetchPilotCheckupActualItems = (params: any) =>
request.get('/web/admin/pilot-checkup/actual-items', { params })
export const savePilotCheckupActualItems = (data: any) =>
request.post('/web/admin/pilot-checkup/actual-items/save', data)
export const deletePilotCheckupActualItem = (data: any) =>
request.delete('/web/admin/pilot-checkup/actual-item/delete', { data })
// ========== 中试服务 - 交付管理 ==========
export const fetchPilotDeliveryDetail = (params: any) =>
request.get('/web/admin/pilot-delivery/detail', { params })
export const fetchPilotDeliveryListByApplication = (params: any) =>
request.get('/web/admin/pilot-delivery/list-by-application', { params })
export const createPilotDelivery = (data: any) =>
request.post('/web/admin/pilot-delivery/create', data)
export const deletePilotDelivery = (data: any) =>
request.delete('/web/admin/pilot-delivery/delete', { data })
export const fetchPilotDeliveryMaterials = (params: any) =>
request.get('/web/admin/pilot-delivery/materials', { params })
export const savePilotDeliveryMaterials = (data: any) =>
request.post('/web/admin/pilot-delivery/materials/save', data)
export const fetchPilotDeliveryMethod = (params: any) =>
request.get('/web/admin/pilot-delivery/method', { params })
export const savePilotDeliveryMethod = (data: any) =>
request.post('/web/admin/pilot-delivery/method/save', data)
// ========== 中试服务 - 出库联动 ==========
export const createOutboundProductionWorkOrder = (data: any) =>
request.post('/web/admin/pilot-infusion-schedule/create-production-work-order', data)
export const createOutboundQcWorkOrder = (data: any) =>
request.post('/web/admin/pilot-infusion-schedule/create-qc-work-order', data)
// ========== 中试服务 - 放行审核 ==========
export const createReleaseReview = (data: any) =>
request.post('/web/admin/pilot-release-review/create', data)
export const fetchReleaseReviewList = (params: any) =>
request.get('/web/admin/pilot-release-review/list', { params })
export const updateReleaseReview = (data: any) =>
request.put('/web/admin/pilot-release-review/update', data)
export const deleteReleaseReview = (data: any) =>
request.delete('/web/admin/pilot-release-review/delete', { data })
// ========== 中试服务 - 应用确认 ==========
export const createInfusionConfirm = (data: any) =>
request.post('/web/admin/pilot-infusion-confirm/create', data)
export const fetchInfusionConfirmList = (params: any) =>
request.get('/web/admin/pilot-infusion-confirm/list', { params })
export const getInfusionConfirmDetail = (params: any) =>
request.get('/web/admin/pilot-infusion-confirm/detail', { params })
export const confirmInfusion = (data: any) =>
request.post('/web/admin/pilot-infusion-confirm/confirm', data)
export const updateInfusionConfirm = (data: any) =>
request.put('/web/admin/pilot-infusion-confirm/update', data)
export const deleteInfusionConfirm = (data: any) =>
request.delete('/web/admin/pilot-infusion-confirm/delete', { data })
+34 -4
View File
@@ -16,6 +16,10 @@ export function fetchCollectionProtocolList(params?: {
pageSize?: number
keyword?: string
protocolStatus?: string
createTimeStart?: string
createTimeEnd?: string
sampleCollectTimeStart?: string
sampleCollectTimeEnd?: string
}) {
return request.get<PageList<CollectionProtocolRow>>({
url: '/web/admin/collection-protocols',
@@ -62,14 +66,26 @@ export function fetchSubmitProtocolAudit(
})
}
export function fetchReceiptConfirmList(params?: { page?: number; pageSize?: number }) {
export function fetchReceiptConfirmList(params?: {
page?: number
pageSize?: number
keyword?: string
installmentDueDateStart?: string
installmentDueDateEnd?: string
}) {
return request.get<PageList<Record<string, unknown>>>({
url: '/web/admin/protocol-payment-details/receipt-confirm',
params
})
}
export function fetchReceiptConfirmedList(params?: { page?: number; pageSize?: number }) {
export function fetchReceiptConfirmedList(params?: {
page?: number
pageSize?: number
keyword?: string
installmentDueDateStart?: string
installmentDueDateEnd?: string
}) {
return request.get<PageList<Record<string, unknown>>>({
url: '/web/admin/protocol-payment-details/receipt-confirmed',
params
@@ -87,14 +103,26 @@ export function fetchReceiptConfirmSubmit(
})
}
export function fetchRefundConfirmList(params?: { page?: number; pageSize?: number }) {
export function fetchRefundConfirmList(params?: {
page?: number
pageSize?: number
keyword?: string
installmentDueDateStart?: string
installmentDueDateEnd?: string
}) {
return request.get<PageList<Record<string, unknown>>>({
url: '/web/admin/protocol-payment-details/refund-confirm',
params
})
}
export function fetchRefundConfirmedList(params?: { page?: number; pageSize?: number }) {
export function fetchRefundConfirmedList(params?: {
page?: number
pageSize?: number
keyword?: string
installmentDueDateStart?: string
installmentDueDateEnd?: string
}) {
return request.get<PageList<Record<string, unknown>>>({
url: '/web/admin/protocol-payment-details/refund-confirmed',
params
@@ -161,6 +189,8 @@ export function fetchPaymentDetailList(params?: {
payStatus?: string
keyword?: string
transferType?: string
installmentDueDateStart?: string
installmentDueDateEnd?: string
}) {
return request.get<PageList<Record<string, unknown>>>({
url: '/web/admin/protocol-payment-details',
+2
View File
@@ -10,6 +10,8 @@ export function fetchProductionTaskList(params?: {
keyword?: string
taskStatus?: string
workOrderId?: string
startedTimeStart?: string
startedTimeEnd?: string
}) {
return request.get<{
list: any[]
@@ -27,6 +27,8 @@ export function fetchProductionWorkOrderList(params?: {
keyword?: string
workOrderStatus?: string
workOrderType?: string
createTimeStart?: string
createTimeEnd?: string
}) {
return request.get<{
list: ProductionWorkOrderItem[]
+2
View File
@@ -116,6 +116,8 @@ export function fetchQcWorkOrderList(params?: {
keyword?: string
workOrderStatus?: string
workOrderType?: string
createTimeStart?: string
createTimeEnd?: string
}) {
return request.get<PageList<QcWorkOrder>>({
url: '/web/admin/qc-work-orders',
+4
View File
@@ -16,6 +16,10 @@ export function fetchResearchDonationList(params?: {
pageSize?: number
keyword?: string
donationStatus?: string
createTimeStart?: string
createTimeEnd?: string
sampleCollectTimeStart?: string
sampleCollectTimeEnd?: string
}) {
return request.get<PageList<ResearchDonationRow>>({
url: '/web/admin/research-donations',
+4
View File
@@ -13,6 +13,8 @@ export function fetchSampleReceptionPendingList(params?: {
pageSize?: number
keyword?: string
sourceType?: string
etaTimeStart?: string
etaTimeEnd?: string
}) {
return request.get<PageList<Record<string, unknown>>>({
url: '/web/admin/sample-receptions/pending',
@@ -25,6 +27,8 @@ export function fetchSampleReceptionReceivedList(params?: {
pageSize?: number
keyword?: string
sourceType?: string
receptionTimeStart?: string
receptionTimeEnd?: string
}) {
return request.get<PageList<Record<string, unknown>>>({
url: '/web/admin/sample-receptions/received',
@@ -15,6 +15,8 @@ export function fetchSampleSmsNotificationList(params?: {
keyword?: string
acceptConclusion?: string
smsNotified?: string
receptionTimeStart?: string
receptionTimeEnd?: string
}) {
return request.get<PageList<Record<string, unknown>>>({
url: '/web/admin/sample-sms-notifications/list',
@@ -15,6 +15,8 @@ export function fetchStorageEntrySmsList(params?: {
keyword?: string
storageStatus?: string
smsNotified?: string
storageTimeStart?: string
storageTimeEnd?: string
}) {
return request.get<PageList<Record<string, unknown>>>({
url: '/web/admin/storage-entry-sms-notifications/list',
@@ -0,0 +1 @@
{"nodes": [{"id": "users_wuzilong_work_00code_zkxw_web_admin_src_utils_status_tag_registry_ts", "label": "status-tag-registry.ts", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/status-tag-registry.ts", "source_location": "L1"}, {"id": "utils_status_tag_registry_createlabelgetter", "label": "createLabelGetter()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/status-tag-registry.ts", "source_location": "L29"}, {"id": "utils_status_tag_registry_createtagtypegetter", "label": "createTagTypeGetter()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/status-tag-registry.ts", "source_location": "L33"}, {"id": "utils_status_tag_registry_txntypelabel", "label": "txnTypeLabel()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/status-tag-registry.ts", "source_location": "L377"}, {"id": "utils_status_tag_registry_txntypetagtype", "label": "txnTypeTagType()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/status-tag-registry.ts", "source_location": "L387"}, {"id": "utils_status_tag_registry_txnstatuslabel", "label": "txnStatusLabel()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/status-tag-registry.ts", "source_location": "L398"}, {"id": "utils_status_tag_registry_txnstatustagtype", "label": "txnStatusTagType()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/status-tag-registry.ts", "source_location": "L408"}, {"id": "utils_status_tag_registry_applicationstatuslabel", "label": "applicationStatusLabel()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/status-tag-registry.ts", "source_location": "L419"}, {"id": "utils_status_tag_registry_applicationstatustagtype", "label": "applicationStatusTagType()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/status-tag-registry.ts", "source_location": "L423"}, {"id": "utils_status_tag_registry_checkupstatuslabel", "label": "checkupStatusLabel()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/status-tag-registry.ts", "source_location": "L431"}, {"id": "utils_status_tag_registry_checkupstatustagtype", "label": "checkupStatusTagType()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/status-tag-registry.ts", "source_location": "L439"}, {"id": "utils_status_tag_registry_feestatuslabel", "label": "feeStatusLabel()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/status-tag-registry.ts", "source_location": "L447"}, {"id": "utils_status_tag_registry_feestatustagtype", "label": "feeStatusTagType()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/status-tag-registry.ts", "source_location": "L455"}, {"id": "utils_status_tag_registry_schedulestatuslabel", "label": "scheduleStatusLabel()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/status-tag-registry.ts", "source_location": "L464"}, {"id": "utils_status_tag_registry_schedulestatustagtype", "label": "scheduleStatusTagType()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/status-tag-registry.ts", "source_location": "L473"}, {"id": "utils_status_tag_registry_releasereviewconclusionlabel", "label": "releaseReviewConclusionLabel()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/status-tag-registry.ts", "source_location": "L484"}, {"id": "utils_status_tag_registry_releasereviewconclusiontagtype", "label": "releaseReviewConclusionTagType()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/status-tag-registry.ts", "source_location": "L488"}], "edges": [{"source": "users_wuzilong_work_00code_zkxw_web_admin_src_utils_status_tag_registry_ts", "target": "utils_status_tag_registry_createlabelgetter", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/status-tag-registry.ts", "source_location": "L29", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_utils_status_tag_registry_ts", "target": "utils_status_tag_registry_createtagtypegetter", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/status-tag-registry.ts", "source_location": "L33", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_utils_status_tag_registry_ts", "target": "utils_status_tag_registry_txntypelabel", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/status-tag-registry.ts", "source_location": "L377", "weight":Line truncated
@@ -0,0 +1 @@
{"nodes": [{"id": "users_wuzilong_work_00code_zkxw_web_admin_src_views_cell_storage_sample_reception_info_index_vue", "label": "index.vue", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/cell-storage/sample-reception-info/index.vue", "source_location": "L1"}], "edges": [], "raw_calls": []}
@@ -0,0 +1 @@
{"nodes": [{"id": "users_wuzilong_work_00code_zkxw_web_admin_src_utils_status_tag_registry_ts", "label": "status-tag-registry.ts", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/status-tag-registry.ts", "source_location": "L1"}, {"id": "utils_status_tag_registry_createlabelgetter", "label": "createLabelGetter()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/status-tag-registry.ts", "source_location": "L29"}, {"id": "utils_status_tag_registry_createtagtypegetter", "label": "createTagTypeGetter()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/status-tag-registry.ts", "source_location": "L33"}, {"id": "utils_status_tag_registry_txntypelabel", "label": "txnTypeLabel()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/status-tag-registry.ts", "source_location": "L377"}, {"id": "utils_status_tag_registry_txntypetagtype", "label": "txnTypeTagType()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/status-tag-registry.ts", "source_location": "L387"}, {"id": "utils_status_tag_registry_txnstatuslabel", "label": "txnStatusLabel()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/status-tag-registry.ts", "source_location": "L398"}, {"id": "utils_status_tag_registry_txnstatustagtype", "label": "txnStatusTagType()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/status-tag-registry.ts", "source_location": "L408"}], "edges": [{"source": "users_wuzilong_work_00code_zkxw_web_admin_src_utils_status_tag_registry_ts", "target": "utils_status_tag_registry_createlabelgetter", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/status-tag-registry.ts", "source_location": "L29", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_utils_status_tag_registry_ts", "target": "utils_status_tag_registry_createtagtypegetter", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/status-tag-registry.ts", "source_location": "L33", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_utils_status_tag_registry_ts", "target": "utils_status_tag_registry_txntypelabel", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/status-tag-registry.ts", "source_location": "L377", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_utils_status_tag_registry_ts", "target": "utils_status_tag_registry_txntypetagtype", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/status-tag-registry.ts", "source_location": "L387", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_utils_status_tag_registry_ts", "target": "utils_status_tag_registry_txnstatuslabel", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/status-tag-registry.ts", "source_location": "L398", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_utils_status_tag_registry_ts", "target": "utils_status_tag_registry_txnstatustagtype", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/status-tag-registry.ts", "source_location": "L408", "weight": 1.0}], "raw_calls": []}
@@ -0,0 +1 @@
{"nodes": [{"id": "users_wuzilong_work_00code_zkxw_web_admin_src_api_sample_sms_notification_ts", "label": "sample-sms-notification.ts", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/sample-sms-notification.ts", "source_location": "L1"}, {"id": "api_sample_sms_notification_fetchsamplesmsnotificationlist", "label": "fetchSampleSmsNotificationList()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/sample-sms-notification.ts", "source_location": "L12"}, {"id": "api_sample_sms_notification_fetchtogglesmsnotified", "label": "fetchToggleSmsNotified()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/sample-sms-notification.ts", "source_location": "L28"}, {"id": "api_sample_sms_notification_fetchgeneratesms", "label": "fetchGenerateSms()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/sample-sms-notification.ts", "source_location": "L39"}], "edges": [{"source": "users_wuzilong_work_00code_zkxw_web_admin_src_api_sample_sms_notification_ts", "target": "users_wuzilong_work_00code_zkxw_web_admin_src_utils_http", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/sample-sms-notification.ts", "source_location": "L1", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_api_sample_sms_notification_ts", "target": "api_sample_sms_notification_fetchsamplesmsnotificationlist", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/sample-sms-notification.ts", "source_location": "L12", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_api_sample_sms_notification_ts", "target": "api_sample_sms_notification_fetchtogglesmsnotified", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/sample-sms-notification.ts", "source_location": "L28", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_api_sample_sms_notification_ts", "target": "api_sample_sms_notification_fetchgeneratesms", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/sample-sms-notification.ts", "source_location": "L39", "weight": 1.0}], "raw_calls": [{"caller_nid": "api_sample_sms_notification_fetchsamplesmsnotificationlist", "callee": "get", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/sample-sms-notification.ts", "source_location": "L21"}, {"caller_nid": "api_sample_sms_notification_fetchtogglesmsnotified", "callee": "put", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/sample-sms-notification.ts", "source_location": "L32"}, {"caller_nid": "api_sample_sms_notification_fetchgeneratesms", "callee": "post", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/sample-sms-notification.ts", "source_location": "L40"}]}
@@ -0,0 +1 @@
{"nodes": [{"id": "users_wuzilong_work_00code_zkxw_web_admin_src_api_admin_ts", "label": "admin.ts", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/admin.ts", "source_location": "L1"}, {"id": "api_admin_fetchgetmenulist", "label": "fetchGetMenuList()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/admin.ts", "source_location": "L10"}, {"id": "api_admin_fetchgetrolelist", "label": "fetchGetRoleList()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/admin.ts", "source_location": "L19"}, {"id": "api_admin_fetchuseroptions", "label": "fetchUserOptions()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/admin.ts", "source_location": "L26"}, {"id": "api_admin_fetchroleoptions", "label": "fetchRoleOptions()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/admin.ts", "source_location": "L33"}, {"id": "api_admin_fetchtenantlist", "label": "fetchTenantList()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/admin.ts", "source_location": "L43"}, {"id": "api_admin_fetchcreatetenant", "label": "fetchCreateTenant()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/admin.ts", "source_location": "L56"}, {"id": "api_admin_fetchupdatetenant", "label": "fetchUpdateTenant()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/admin.ts", "source_location": "L71"}, {"id": "api_admin_fetchdeletetenant", "label": "fetchDeleteTenant()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/admin.ts", "source_location": "L89"}, {"id": "api_admin_fetchuserlist", "label": "fetchUserList()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/admin.ts", "source_location": "L100"}, {"id": "api_admin_fetchuserdetail", "label": "fetchUserDetail()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/admin.ts", "source_location": "L119"}, {"id": "api_admin_fetchcreateuser", "label": "fetchCreateUser()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/admin.ts", "source_location": "L125"}, {"id": "api_admin_fetchupdateuser", "label": "fetchUpdateUser()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/admin.ts", "source_location": "L147"}, {"id": "api_admin_fetchdeleteuser", "label": "fetchDeleteUser()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/admin.ts", "source_location": "L170"}, {"id": "api_admin_fetchresetpassword", "label": "fetchResetPassword()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/admin.ts", "source_location": "L177"}, {"id": "api_admin_fetchuploaduseravatar", "label": "fetchUploadUserAvatar()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/admin.ts", "source_location": "L185"}, {"id": "api_admin_fetchregionlist", "label": "fetchRegionList()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/admin.ts", "source_location": "L196"}, {"id": "api_admin_fetchactiveregions", "label": "fetchActiveRegions()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/admin.ts", "source_location": "L214"}, {"id": "api_admin_fetchnotdeletedregions", "label": "fetchNotDeletedRegions()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/admin.ts", "source_location": "L231"}, {"id": "api_admin_fetchcategorylist", "label": "fetchCategoryList()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/admin.ts", "source_location": "L259"}, {"id": "api_admin_fetchcreatecategory", "label": "fetchCreateCategory()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/admin.ts", "source_location": "L277"}, {"id": "api_admin_fetchupdatecategory", "label": "fetchUpdateCategory()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/admin.ts", "source_location": "L290"}, {"id": "api_admin_fetchdeletecategory", "label": "fetchDeleteCategory()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/admin.ts", "source_location": "L307"}, {"id": "api_admin_fetchuploadcategoryimage", "label": "fetchUploadCategoryImage()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/admin.ts", "source_location": "L313"}, {"id": "api_admin_fetchunitlist", "label": "fetchUnitList()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/admin.ts", "source_location": "L324"}, {"id": "api_admin_fetchcreateunit", "label": "fetchCrLine truncated
@@ -0,0 +1 @@
{"nodes": [{"id": "users_wuzilong_work_00code_zkxw_web_admin_src_views_cell_storage_refund_confirm_index_vue", "label": "index.vue", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/cell-storage/refund-confirm/index.vue", "source_location": "L1"}], "edges": [], "raw_calls": []}
@@ -0,0 +1 @@
{"nodes": [{"id": "users_wuzilong_work_00code_zkxw_web_admin_src_types_import_components_d_ts", "label": "components.d.ts", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/types/import/components.d.ts", "source_location": "L1"}], "edges": [], "raw_calls": []}
@@ -0,0 +1 @@
{"nodes": [{"id": "users_wuzilong_work_00code_zkxw_web_admin_src_api_storage_entry_sms_notification_ts", "label": "storage-entry-sms-notification.ts", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/storage-entry-sms-notification.ts", "source_location": "L1"}, {"id": "api_storage_entry_sms_notification_fetchstorageentrysmslist", "label": "fetchStorageEntrySmsList()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/storage-entry-sms-notification.ts", "source_location": "L12"}, {"id": "api_storage_entry_sms_notification_fetchtogglestorageentrysmsnotified", "label": "fetchToggleStorageEntrySmsNotified()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/storage-entry-sms-notification.ts", "source_location": "L28"}, {"id": "api_storage_entry_sms_notification_fetchgeneratestorageentrysms", "label": "fetchGenerateStorageEntrySms()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/storage-entry-sms-notification.ts", "source_location": "L39"}], "edges": [{"source": "users_wuzilong_work_00code_zkxw_web_admin_src_api_storage_entry_sms_notification_ts", "target": "users_wuzilong_work_00code_zkxw_web_admin_src_utils_http", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/storage-entry-sms-notification.ts", "source_location": "L1", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_api_storage_entry_sms_notification_ts", "target": "api_storage_entry_sms_notification_fetchstorageentrysmslist", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/storage-entry-sms-notification.ts", "source_location": "L12", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_api_storage_entry_sms_notification_ts", "target": "api_storage_entry_sms_notification_fetchtogglestorageentrysmsnotified", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/storage-entry-sms-notification.ts", "source_location": "L28", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_api_storage_entry_sms_notification_ts", "target": "api_storage_entry_sms_notification_fetchgeneratestorageentrysms", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/storage-entry-sms-notification.ts", "source_location": "L39", "weight": 1.0}], "raw_calls": [{"caller_nid": "api_storage_entry_sms_notification_fetchstorageentrysmslist", "callee": "get", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/storage-entry-sms-notification.ts", "source_location": "L21"}, {"caller_nid": "api_storage_entry_sms_notification_fetchtogglestorageentrysmsnotified", "callee": "put", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/storage-entry-sms-notification.ts", "source_location": "L32"}, {"caller_nid": "api_storage_entry_sms_notification_fetchgeneratestorageentrysms", "callee": "post", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/storage-entry-sms-notification.ts", "source_location": "L40"}]}
@@ -0,0 +1 @@
{"nodes": [{"id": "users_wuzilong_work_00code_zkxw_web_admin_src_api_collection_protocol_ts", "label": "collection-protocol.ts", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/collection-protocol.ts", "source_location": "L1"}, {"id": "api_collection_protocol_fetchcollectionprotocollist", "label": "fetchCollectionProtocolList()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/collection-protocol.ts", "source_location": "L14"}, {"id": "api_collection_protocol_fetchcollectionprotocoldetail", "label": "fetchCollectionProtocolDetail()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/collection-protocol.ts", "source_location": "L30"}, {"id": "api_collection_protocol_fetchcollectionprotocolauditlist", "label": "fetchCollectionProtocolAuditList()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/collection-protocol.ts", "source_location": "L45"}, {"id": "api_collection_protocol_fetchsubmitprotocolaudit", "label": "fetchSubmitProtocolAudit()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/collection-protocol.ts", "source_location": "L57"}, {"id": "api_collection_protocol_fetchreceiptconfirmlist", "label": "fetchReceiptConfirmList()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/collection-protocol.ts", "source_location": "L69"}, {"id": "api_collection_protocol_fetchreceiptconfirmedlist", "label": "fetchReceiptConfirmedList()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/collection-protocol.ts", "source_location": "L82"}, {"id": "api_collection_protocol_fetchreceiptconfirmsubmit", "label": "fetchReceiptConfirmSubmit()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/collection-protocol.ts", "source_location": "L95"}, {"id": "api_collection_protocol_fetchrefundconfirmlist", "label": "fetchRefundConfirmList()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/collection-protocol.ts", "source_location": "L106"}, {"id": "api_collection_protocol_fetchrefundconfirmedlist", "label": "fetchRefundConfirmedList()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/collection-protocol.ts", "source_location": "L119"}, {"id": "api_collection_protocol_fetchrefundconfirmsubmit", "label": "fetchRefundConfirmSubmit()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/collection-protocol.ts", "source_location": "L132"}, {"id": "api_collection_protocol_fetchsubmitreceiptfinance", "label": "fetchSubmitReceiptFinance()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/collection-protocol.ts", "source_location": "L143"}, {"id": "api_collection_protocol_fetchsubmitreceiptfinancebatch", "label": "fetchSubmitReceiptFinanceBatch()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/collection-protocol.ts", "source_location": "L150"}, {"id": "api_collection_protocol_fetchsubmitrefundfinance", "label": "fetchSubmitRefundFinance()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/collection-protocol.ts", "source_location": "L158"}, {"id": "api_collection_protocol_fetchsubmitrefundfinancebatch", "label": "fetchSubmitRefundFinanceBatch()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/collection-protocol.ts", "source_location": "L173"}, {"id": "api_collection_protocol_fetchpaymentdetaillist", "label": "fetchPaymentDetailList()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/collection-protocol.ts", "source_location": "L186"}, {"id": "api_collection_protocol_fetchcreatecollectionprotocol", "label": "fetchCreateCollectionProtocol()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/collection-protocol.ts", "source_location": "L201"}, {"id": "api_collection_protocol_fetchupdatecollectionprotocol", "label": "fetchUpdateCollectionProtocol()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/collection-protocol.ts", "source_location": "L209"}, {"id": "api_collection_protocol_fetchdeletecollectionprotocol", "label": "fetchDeleteCollectionProtocol()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/collection-protocol.ts", "source_location": "L220"}], "edges": [{"source": "users_wuzilong_work_00code_zkxw_web_admin_src_api_collection_protocol_ts", "target": "users_wuzilong_work_00code_zkxw_web_admin_src_utils_http", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/collection-protocol.ts", "source_location": "L1", "weight": 1.0}, Line truncated
@@ -0,0 +1 @@
{"nodes": [{"id": "users_wuzilong_work_00code_zkxw_web_admin_src_api_admin_ts", "label": "admin.ts", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/admin.ts", "source_location": "L1"}, {"id": "api_admin_fetchgetmenulist", "label": "fetchGetMenuList()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/admin.ts", "source_location": "L10"}, {"id": "api_admin_fetchgetrolelist", "label": "fetchGetRoleList()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/admin.ts", "source_location": "L19"}, {"id": "api_admin_fetchuseroptions", "label": "fetchUserOptions()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/admin.ts", "source_location": "L26"}, {"id": "api_admin_fetchroleoptions", "label": "fetchRoleOptions()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/admin.ts", "source_location": "L33"}, {"id": "api_admin_fetchtenantlist", "label": "fetchTenantList()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/admin.ts", "source_location": "L43"}, {"id": "api_admin_fetchcreatetenant", "label": "fetchCreateTenant()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/admin.ts", "source_location": "L56"}, {"id": "api_admin_fetchupdatetenant", "label": "fetchUpdateTenant()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/admin.ts", "source_location": "L71"}, {"id": "api_admin_fetchdeletetenant", "label": "fetchDeleteTenant()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/admin.ts", "source_location": "L89"}, {"id": "api_admin_fetchuserlist", "label": "fetchUserList()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/admin.ts", "source_location": "L100"}, {"id": "api_admin_fetchuserdetail", "label": "fetchUserDetail()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/admin.ts", "source_location": "L119"}, {"id": "api_admin_fetchcreateuser", "label": "fetchCreateUser()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/admin.ts", "source_location": "L125"}, {"id": "api_admin_fetchupdateuser", "label": "fetchUpdateUser()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/admin.ts", "source_location": "L147"}, {"id": "api_admin_fetchdeleteuser", "label": "fetchDeleteUser()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/admin.ts", "source_location": "L170"}, {"id": "api_admin_fetchresetpassword", "label": "fetchResetPassword()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/admin.ts", "source_location": "L177"}, {"id": "api_admin_fetchuploaduseravatar", "label": "fetchUploadUserAvatar()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/admin.ts", "source_location": "L185"}, {"id": "api_admin_fetchregionlist", "label": "fetchRegionList()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/admin.ts", "source_location": "L196"}, {"id": "api_admin_fetchactiveregions", "label": "fetchActiveRegions()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/admin.ts", "source_location": "L214"}, {"id": "api_admin_fetchnotdeletedregions", "label": "fetchNotDeletedRegions()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/admin.ts", "source_location": "L231"}, {"id": "api_admin_fetchcategorylist", "label": "fetchCategoryList()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/admin.ts", "source_location": "L259"}, {"id": "api_admin_fetchcreatecategory", "label": "fetchCreateCategory()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/admin.ts", "source_location": "L277"}, {"id": "api_admin_fetchupdatecategory", "label": "fetchUpdateCategory()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/admin.ts", "source_location": "L290"}, {"id": "api_admin_fetchdeletecategory", "label": "fetchDeleteCategory()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/admin.ts", "source_location": "L307"}, {"id": "api_admin_fetchuploadcategoryimage", "label": "fetchUploadCategoryImage()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/admin.ts", "source_location": "L313"}, {"id": "api_admin_fetchunitlist", "label": "fetchUnitList()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/admin.ts", "source_location": "L324"}, {"id": "api_admin_fetchcreateunit", "label": "fetchCrLine truncated
@@ -0,0 +1 @@
{"nodes": [{"id": "users_wuzilong_work_00code_zkxw_web_admin_src_views_research_donation_audit_index_vue", "label": "index.vue", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/research-donation/audit/index.vue", "source_location": "L1"}], "edges": [], "raw_calls": []}
@@ -0,0 +1 @@
{"nodes": [{"id": "users_wuzilong_work_00code_zkxw_web_admin_src_api_collection_protocol_ts", "label": "collection-protocol.ts", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/collection-protocol.ts", "source_location": "L1"}, {"id": "api_collection_protocol_fetchcollectionprotocollist", "label": "fetchCollectionProtocolList()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/collection-protocol.ts", "source_location": "L14"}, {"id": "api_collection_protocol_fetchcollectionprotocoldetail", "label": "fetchCollectionProtocolDetail()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/collection-protocol.ts", "source_location": "L30"}, {"id": "api_collection_protocol_fetchcollectionprotocolauditlist", "label": "fetchCollectionProtocolAuditList()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/collection-protocol.ts", "source_location": "L45"}, {"id": "api_collection_protocol_fetchsubmitprotocolaudit", "label": "fetchSubmitProtocolAudit()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/collection-protocol.ts", "source_location": "L57"}, {"id": "api_collection_protocol_fetchreceiptconfirmlist", "label": "fetchReceiptConfirmList()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/collection-protocol.ts", "source_location": "L69"}, {"id": "api_collection_protocol_fetchreceiptconfirmedlist", "label": "fetchReceiptConfirmedList()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/collection-protocol.ts", "source_location": "L82"}, {"id": "api_collection_protocol_fetchreceiptconfirmsubmit", "label": "fetchReceiptConfirmSubmit()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/collection-protocol.ts", "source_location": "L95"}, {"id": "api_collection_protocol_fetchrefundconfirmlist", "label": "fetchRefundConfirmList()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/collection-protocol.ts", "source_location": "L106"}, {"id": "api_collection_protocol_fetchrefundconfirmedlist", "label": "fetchRefundConfirmedList()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/collection-protocol.ts", "source_location": "L113"}, {"id": "api_collection_protocol_fetchrefundconfirmsubmit", "label": "fetchRefundConfirmSubmit()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/collection-protocol.ts", "source_location": "L120"}, {"id": "api_collection_protocol_fetchsubmitreceiptfinance", "label": "fetchSubmitReceiptFinance()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/collection-protocol.ts", "source_location": "L131"}, {"id": "api_collection_protocol_fetchsubmitreceiptfinancebatch", "label": "fetchSubmitReceiptFinanceBatch()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/collection-protocol.ts", "source_location": "L138"}, {"id": "api_collection_protocol_fetchsubmitrefundfinance", "label": "fetchSubmitRefundFinance()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/collection-protocol.ts", "source_location": "L146"}, {"id": "api_collection_protocol_fetchsubmitrefundfinancebatch", "label": "fetchSubmitRefundFinanceBatch()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/collection-protocol.ts", "source_location": "L161"}, {"id": "api_collection_protocol_fetchpaymentdetaillist", "label": "fetchPaymentDetailList()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/collection-protocol.ts", "source_location": "L174"}, {"id": "api_collection_protocol_fetchcreatecollectionprotocol", "label": "fetchCreateCollectionProtocol()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/collection-protocol.ts", "source_location": "L189"}, {"id": "api_collection_protocol_fetchupdatecollectionprotocol", "label": "fetchUpdateCollectionProtocol()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/collection-protocol.ts", "source_location": "L197"}, {"id": "api_collection_protocol_fetchdeletecollectionprotocol", "label": "fetchDeleteCollectionProtocol()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/collection-protocol.ts", "source_location": "L208"}], "edges": [{"source": "users_wuzilong_work_00code_zkxw_web_admin_src_api_collection_protocol_ts", "target": "users_wuzilong_work_00code_zkxw_web_admin_src_utils_http", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/collection-protocol.ts", "source_location": "L1", "weight": 1.0}, Line truncated
@@ -0,0 +1 @@
{"nodes": [{"id": "users_wuzilong_work_00code_zkxw_web_admin_src_api_admin_ts", "label": "admin.ts", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/admin.ts", "source_location": "L1"}, {"id": "api_admin_fetchgetmenulist", "label": "fetchGetMenuList()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/admin.ts", "source_location": "L10"}, {"id": "api_admin_fetchgetrolelist", "label": "fetchGetRoleList()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/admin.ts", "source_location": "L19"}, {"id": "api_admin_fetchuseroptions", "label": "fetchUserOptions()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/admin.ts", "source_location": "L26"}, {"id": "api_admin_fetchroleoptions", "label": "fetchRoleOptions()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/admin.ts", "source_location": "L33"}, {"id": "api_admin_fetchtenantlist", "label": "fetchTenantList()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/admin.ts", "source_location": "L43"}, {"id": "api_admin_fetchcreatetenant", "label": "fetchCreateTenant()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/admin.ts", "source_location": "L56"}, {"id": "api_admin_fetchupdatetenant", "label": "fetchUpdateTenant()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/admin.ts", "source_location": "L71"}, {"id": "api_admin_fetchdeletetenant", "label": "fetchDeleteTenant()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/admin.ts", "source_location": "L89"}, {"id": "api_admin_fetchuserlist", "label": "fetchUserList()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/admin.ts", "source_location": "L100"}, {"id": "api_admin_fetchuserdetail", "label": "fetchUserDetail()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/admin.ts", "source_location": "L119"}, {"id": "api_admin_fetchcreateuser", "label": "fetchCreateUser()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/admin.ts", "source_location": "L125"}, {"id": "api_admin_fetchupdateuser", "label": "fetchUpdateUser()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/admin.ts", "source_location": "L147"}, {"id": "api_admin_fetchdeleteuser", "label": "fetchDeleteUser()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/admin.ts", "source_location": "L170"}, {"id": "api_admin_fetchresetpassword", "label": "fetchResetPassword()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/admin.ts", "source_location": "L177"}, {"id": "api_admin_fetchuploaduseravatar", "label": "fetchUploadUserAvatar()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/admin.ts", "source_location": "L185"}, {"id": "api_admin_fetchregionlist", "label": "fetchRegionList()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/admin.ts", "source_location": "L196"}, {"id": "api_admin_fetchactiveregions", "label": "fetchActiveRegions()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/admin.ts", "source_location": "L214"}, {"id": "api_admin_fetchnotdeletedregions", "label": "fetchNotDeletedRegions()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/admin.ts", "source_location": "L231"}, {"id": "api_admin_fetchcategorylist", "label": "fetchCategoryList()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/admin.ts", "source_location": "L259"}, {"id": "api_admin_fetchcreatecategory", "label": "fetchCreateCategory()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/admin.ts", "source_location": "L277"}, {"id": "api_admin_fetchupdatecategory", "label": "fetchUpdateCategory()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/admin.ts", "source_location": "L290"}, {"id": "api_admin_fetchdeletecategory", "label": "fetchDeleteCategory()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/admin.ts", "source_location": "L307"}, {"id": "api_admin_fetchuploadcategoryimage", "label": "fetchUploadCategoryImage()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/admin.ts", "source_location": "L313"}, {"id": "api_admin_fetchunitlist", "label": "fetchUnitList()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/admin.ts", "source_location": "L324"}, {"id": "api_admin_fetchcreateunit", "label": "fetchCrLine truncated
@@ -0,0 +1 @@
{"nodes": [{"id": "users_wuzilong_work_00code_zkxw_web_admin_src_api_research_donation_ts", "label": "research-donation.ts", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/research-donation.ts", "source_location": "L1"}, {"id": "api_research_donation_fetchresearchdonationlist", "label": "fetchResearchDonationList()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/research-donation.ts", "source_location": "L14"}, {"id": "api_research_donation_fetchresearchdonationdetail", "label": "fetchResearchDonationDetail()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/research-donation.ts", "source_location": "L31"}, {"id": "api_research_donation_fetchcreateresearchdonation", "label": "fetchCreateResearchDonation()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/research-donation.ts", "source_location": "L44"}, {"id": "api_research_donation_fetchupdateresearchdonation", "label": "fetchUpdateResearchDonation()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/research-donation.ts", "source_location": "L53"}, {"id": "api_research_donation_fetchdeleteresearchdonation", "label": "fetchDeleteResearchDonation()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/research-donation.ts", "source_location": "L62"}, {"id": "api_research_donation_fetchbatchdeleteresearchdonation", "label": "fetchBatchDeleteResearchDonation()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/research-donation.ts", "source_location": "L70"}, {"id": "api_research_donation_fetchresearchdonationauditlist", "label": "fetchResearchDonationAuditList()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/research-donation.ts", "source_location": "L79"}, {"id": "api_research_donation_fetchsubmitdonationaudit", "label": "fetchSubmitDonationAudit()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/research-donation.ts", "source_location": "L92"}, {"id": "api_research_donation_fetchdonationstatuschange", "label": "fetchDonationStatusChange()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/research-donation.ts", "source_location": "L105"}, {"id": "api_research_donation_fetchconvertfromstorage", "label": "fetchConvertFromStorage()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/research-donation.ts", "source_location": "L117"}, {"id": "api_research_donation_fetchconverttostorage", "label": "fetchConvertToStorage()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/research-donation.ts", "source_location": "L126"}], "edges": [{"source": "users_wuzilong_work_00code_zkxw_web_admin_src_api_research_donation_ts", "target": "users_wuzilong_work_00code_zkxw_web_admin_src_utils_http", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/research-donation.ts", "source_location": "L1", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_api_research_donation_ts", "target": "api_research_donation_fetchresearchdonationlist", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/research-donation.ts", "source_location": "L14", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_api_research_donation_ts", "target": "api_research_donation_fetchresearchdonationdetail", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/research-donation.ts", "source_location": "L31", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_api_research_donation_ts", "target": "api_research_donation_fetchcreateresearchdonation", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/research-donation.ts", "source_location": "L44", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_api_research_donation_ts", "target": "api_research_donation_fetchupdateresearchdonation", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/research-donation.ts", "source_location": "L53", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_api_research_donation_ts", "target": "api_research_donation_fetchdeleteresearchdonation", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/research-donation.ts", "source_location": "L62", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_api_research_donation_ts", "target": "api_researcLine truncated
@@ -0,0 +1 @@
{"nodes": [{"id": "users_wuzilong_work_00code_zkxw_web_admin_src_types_import_components_d_ts", "label": "components.d.ts", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/types/import/components.d.ts", "source_location": "L1"}], "edges": [], "raw_calls": []}
@@ -0,0 +1 @@
{"nodes": [{"id": "users_wuzilong_work_00code_zkxw_web_admin_src_views_pilot_service_channel_service_order_finance_index_vue", "label": "index.vue", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/pilot-service/channel-service-order-finance/index.vue", "source_location": "L1"}], "edges": [], "raw_calls": []}
@@ -0,0 +1 @@
{"nodes": [{"id": "users_wuzilong_work_00code_zkxw_web_admin_src_views_cell_storage_fullmoon_todo_index_vue", "label": "index.vue", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/cell-storage/fullmoon-todo/index.vue", "source_location": "L1"}, {"id": "fullmoon_todo_index_loaddata", "label": "loadData()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/cell-storage/fullmoon-todo/index.vue", "source_location": "L638"}, {"id": "fullmoon_todo_index_handlesearch", "label": "handleSearch()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/cell-storage/fullmoon-todo/index.vue", "source_location": "L656"}, {"id": "fullmoon_todo_index_handlereset", "label": "handleReset()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/cell-storage/fullmoon-todo/index.vue", "source_location": "L661"}, {"id": "fullmoon_todo_index_formatymdfromany", "label": "formatYmdFromAny()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/cell-storage/fullmoon-todo/index.vue", "source_location": "L669"}, {"id": "fullmoon_todo_index_normalizenewbornsex", "label": "normalizeNewbornSex()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/cell-storage/fullmoon-todo/index.vue", "source_location": "L677"}, {"id": "fullmoon_todo_index_handleexportinsurancesheet", "label": "handleExportInsuranceSheet()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/cell-storage/fullmoon-todo/index.vue", "source_location": "L685"}, {"id": "fullmoon_todo_index_resolveprotocolid", "label": "resolveProtocolId()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/cell-storage/fullmoon-todo/index.vue", "source_location": "L834"}, {"id": "fullmoon_todo_index_resetformfields", "label": "resetFormFields()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/cell-storage/fullmoon-todo/index.vue", "source_location": "L858"}, {"id": "fullmoon_todo_index_resetdialogcontext", "label": "resetDialogContext()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/cell-storage/fullmoon-todo/index.vue", "source_location": "L874"}, {"id": "fullmoon_todo_index_handleinsurancedialogclosed", "label": "handleInsuranceDialogClosed()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/cell-storage/fullmoon-todo/index.vue", "source_location": "L881"}, {"id": "fullmoon_todo_index_parseinsuranceattachmentsfromurls", "label": "parseInsuranceAttachmentsFromUrls()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/cell-storage/fullmoon-todo/index.vue", "source_location": "L885"}, {"id": "fullmoon_todo_index_buildinsuranceattachmentsvalue", "label": "buildInsuranceAttachmentsValue()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/cell-storage/fullmoon-todo/index.vue", "source_location": "L897"}, {"id": "fullmoon_todo_index_buildinsurancepayload", "label": "buildInsurancePayload()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/cell-storage/fullmoon-todo/index.vue", "source_location": "L904"}, {"id": "fullmoon_todo_index_handlebatchedit", "label": "handleBatchEdit()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/cell-storage/fullmoon-todo/index.vue", "source_location": "L921"}, {"id": "fullmoon_todo_index_handleedit", "label": "handleEdit()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/cell-storage/fullmoon-todo/index.vue", "source_location": "L934"}, {"id": "fullmoon_todo_index_handleinsurancecompanychange", "label": "handleInsuranceCompanyChange()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/cell-storage/fullmoon-todo/index.vue", "source_location": "L957"}, {"id": "fullmoon_todo_index_handleinsurancetypechange", "label": "handleInsuranceTypeChange()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/cell-storage/fullmoon-todo/index.vue", "source_location": "L965"}, {"id": "fullmoon_todo_index_handlesubmit", "label": "handleSubmit()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/cell-storage/fullmoon-todo/index.vue", "source_location": "L972"}, {"id": "fullmoon_todo_index_fullfileurl", "label": "fullFileUrl()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/cell-storage/fullmoon-todo/index.vue", "source_location": "L1034"}, {"id": "fullmoon_todo_index_isimagefile", "label": "isImageFile()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admiLine truncated
@@ -0,0 +1 @@
{"nodes": [{"id": "users_wuzilong_work_00code_zkxw_web_admin_src_views_cell_storage_payment_confirm_index_vue", "label": "index.vue", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/cell-storage/payment-confirm/index.vue", "source_location": "L1"}], "edges": [], "raw_calls": []}
@@ -0,0 +1 @@
{"nodes": [{"id": "users_wuzilong_work_00code_zkxw_web_admin_src_views_cell_storage_protocol_audit_index_vue", "label": "index.vue", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/cell-storage/protocol-audit/index.vue", "source_location": "L1"}], "edges": [], "raw_calls": []}
@@ -0,0 +1 @@
{"nodes": [{"id": "users_wuzilong_work_00code_zkxw_web_admin_src_types_import_components_d_ts", "label": "components.d.ts", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/types/import/components.d.ts", "source_location": "L1"}], "edges": [], "raw_calls": []}
@@ -0,0 +1 @@
{"nodes": [{"id": "users_wuzilong_work_00code_zkxw_web_admin_src_views_pilot_service_pilot_application_index_vue", "label": "index.vue", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/pilot-service/pilot-application/index.vue", "source_location": "L1"}, {"id": "pilot_application_index_displayvalue", "label": "displayValue()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/pilot-service/pilot-application/index.vue", "source_location": "L319"}, {"id": "pilot_application_index_formatserviceorderlabel", "label": "formatServiceOrderLabel()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/pilot-service/pilot-application/index.vue", "source_location": "L324"}, {"id": "pilot_application_index_onchannelselectfocus", "label": "onChannelSelectFocus()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/pilot-service/pilot-application/index.vue", "source_location": "L363"}, {"id": "pilot_application_index_loadchanneloptions", "label": "loadChannelOptions()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/pilot-service/pilot-application/index.vue", "source_location": "L369"}, {"id": "pilot_application_index_handlesearchchannelchange", "label": "handleSearchChannelChange()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/pilot-service/pilot-application/index.vue", "source_location": "L386"}, {"id": "pilot_application_index_loadsearchserviceorders", "label": "loadSearchServiceOrders()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/pilot-service/pilot-application/index.vue", "source_location": "L395"}, {"id": "pilot_application_index_loaddata", "label": "loadData()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/pilot-service/pilot-application/index.vue", "source_location": "L416"}, {"id": "pilot_application_index_handlesearch", "label": "handleSearch()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/pilot-service/pilot-application/index.vue", "source_location": "L439"}, {"id": "pilot_application_index_handlereset", "label": "handleReset()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/pilot-service/pilot-application/index.vue", "source_location": "L444"}, {"id": "pilot_application_index_handleview", "label": "handleView()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/pilot-service/pilot-application/index.vue", "source_location": "L457"}, {"id": "pilot_application_index_ondialogchannelfocus", "label": "onDialogChannelFocus()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/pilot-service/pilot-application/index.vue", "source_location": "L484"}, {"id": "pilot_application_index_loaddialogchanneloptions", "label": "loadDialogChannelOptions()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/pilot-service/pilot-application/index.vue", "source_location": "L490"}, {"id": "pilot_application_index_handledialogchannelchange", "label": "handleDialogChannelChange()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/pilot-service/pilot-application/index.vue", "source_location": "L507"}, {"id": "pilot_application_index_handlecreate", "label": "handleCreate()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/pilot-service/pilot-application/index.vue", "source_location": "L526"}, {"id": "pilot_application_index_handledialogclose", "label": "handleDialogClose()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/pilot-service/pilot-application/index.vue", "source_location": "L535"}, {"id": "pilot_application_index_handlesubmit", "label": "handleSubmit()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/pilot-service/pilot-application/index.vue", "source_location": "L539"}, {"id": "pilot_application_index_handleedit", "label": "handleEdit()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/pilot-service/pilot-application/index.vue", "source_location": "L570"}, {"id": "pilot_application_index_handledelete", "label": "handleDelete()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/pilot-service/pilot-application/index.vue", "source_location": "L576"}, {"id": "pilot_application_index_handlestart", "label": "handleStart()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/pilot-service/pilot-application/index.vue", "source_location": "L587"}, {"id": "pilot_application_index_handlecomplete", "label": "handlLine truncated
@@ -0,0 +1 @@
{"nodes": [{"id": "users_wuzilong_work_00code_zkxw_web_admin_src_views_pilot_service_channel_service_order_index_vue", "label": "index.vue", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/pilot-service/channel-service-order/index.vue", "source_location": "L1"}, {"id": "channel_service_order_index_validate", "label": "validate()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/pilot-service/channel-service-order/index.vue", "source_location": "L1206"}, {"id": "channel_service_order_index_if", "label": "if()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/pilot-service/channel-service-order/index.vue", "source_location": "L1211"}], "edges": [{"source": "users_wuzilong_work_00code_zkxw_web_admin_src_views_pilot_service_channel_service_order_index_vue", "target": "channel_service_order_index_validate", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/pilot-service/channel-service-order/index.vue", "source_location": "L1206", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_views_pilot_service_channel_service_order_index_vue", "target": "channel_service_order_index_if", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/pilot-service/channel-service-order/index.vue", "source_location": "L1211", "weight": 1.0}], "raw_calls": [{"caller_nid": "channel_service_order_index_if", "callee": "warning", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/pilot-service/channel-service-order/index.vue", "source_location": "L1213"}, {"caller_nid": "channel_service_order_index_if", "callee": "filter", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/pilot-service/channel-service-order/index.vue", "source_location": "L1216"}, {"caller_nid": "channel_service_order_index_if", "callee": "map", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/pilot-service/channel-service-order/index.vue", "source_location": "L1216"}, {"caller_nid": "channel_service_order_index_if", "callee": "warning", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/pilot-service/channel-service-order/index.vue", "source_location": "L1218"}, {"caller_nid": "channel_service_order_index_if", "callee": "some", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/pilot-service/channel-service-order/index.vue", "source_location": "L1221"}, {"caller_nid": "channel_service_order_index_if", "callee": "warning", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/pilot-service/channel-service-order/index.vue", "source_location": "L1225"}]}
@@ -0,0 +1 @@
{"nodes": [{"id": "users_wuzilong_work_00code_zkxw_web_admin_src_views_cell_storage_storage_cert_index_vue", "label": "index.vue", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/cell-storage/storage-cert/index.vue", "source_location": "L1"}], "edges": [], "raw_calls": []}
@@ -0,0 +1 @@
{"nodes": [{"id": "users_wuzilong_work_00code_zkxw_web_admin_src_views_pilot_service_pilot_application_applicationdetail_vue", "label": "ApplicationDetail.vue", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/pilot-service/pilot-application/ApplicationDetail.vue", "source_location": "L1"}, {"id": "pilot_application_applicationdetail_if", "label": "if()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/pilot-service/pilot-application/ApplicationDetail.vue", "source_location": "L1453"}, {"id": "pilot_application_applicationdetail_catch", "label": "catch()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/pilot-service/pilot-application/ApplicationDetail.vue", "source_location": "L1907"}, {"id": "pilot_application_applicationdetail_async", "label": "async()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/pilot-service/pilot-application/ApplicationDetail.vue", "source_location": "L2042"}], "edges": [{"source": "users_wuzilong_work_00code_zkxw_web_admin_src_views_pilot_service_pilot_application_applicationdetail_vue", "target": "pilot_application_applicationdetail_if", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/pilot-service/pilot-application/ApplicationDetail.vue", "source_location": "L1453", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_views_pilot_service_pilot_application_applicationdetail_vue", "target": "pilot_application_applicationdetail_catch", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/pilot-service/pilot-application/ApplicationDetail.vue", "source_location": "L1907", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_views_pilot_service_pilot_application_applicationdetail_vue", "target": "pilot_application_applicationdetail_if", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/pilot-service/pilot-application/ApplicationDetail.vue", "source_location": "L2027", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_views_pilot_service_pilot_application_applicationdetail_vue", "target": "pilot_application_applicationdetail_async", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/pilot-service/pilot-application/ApplicationDetail.vue", "source_location": "L2042", "weight": 1.0}], "raw_calls": [{"caller_nid": "pilot_application_applicationdetail_if", "callee": "filter", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/pilot-service/pilot-application/ApplicationDetail.vue", "source_location": "L1604"}, {"caller_nid": "pilot_application_applicationdetail_catch", "callee": "error", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/pilot-service/pilot-application/ApplicationDetail.vue", "source_location": "L1908"}, {"caller_nid": "pilot_application_applicationdetail_if", "callee": "parseAttachmentUrls", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/pilot-service/pilot-application/ApplicationDetail.vue", "source_location": "L2034"}, {"caller_nid": "pilot_application_applicationdetail_async", "callee": "append", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/pilot-service/pilot-application/ApplicationDetail.vue", "source_location": "L2046"}, {"caller_nid": "pilot_application_applicationdetail_async", "callee": "fetchUploadAttachment", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/pilot-service/pilot-application/ApplicationDetail.vue", "source_location": "L2047"}, {"caller_nid": "pilot_application_applicationdetail_async", "callee": "push", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/pilot-service/pilot-application/ApplicationDetail.vue", "source_location": "L2050"}, {"caller_nid": "pilot_application_applicationdetail_async", "callee": "error", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/pilot-service/pilot-application/ApplicationDetail.vue", "source_location": "L2053"}]}
@@ -0,0 +1 @@
{"nodes": [{"id": "users_wuzilong_work_00code_zkxw_web_admin_src_api_admin_ts", "label": "admin.ts", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/admin.ts", "source_location": "L1"}, {"id": "api_admin_fetchgetmenulist", "label": "fetchGetMenuList()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/admin.ts", "source_location": "L10"}, {"id": "api_admin_fetchgetrolelist", "label": "fetchGetRoleList()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/admin.ts", "source_location": "L19"}, {"id": "api_admin_fetchuseroptions", "label": "fetchUserOptions()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/admin.ts", "source_location": "L26"}, {"id": "api_admin_fetchroleoptions", "label": "fetchRoleOptions()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/admin.ts", "source_location": "L33"}, {"id": "api_admin_fetchtenantlist", "label": "fetchTenantList()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/admin.ts", "source_location": "L43"}, {"id": "api_admin_fetchcreatetenant", "label": "fetchCreateTenant()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/admin.ts", "source_location": "L56"}, {"id": "api_admin_fetchupdatetenant", "label": "fetchUpdateTenant()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/admin.ts", "source_location": "L71"}, {"id": "api_admin_fetchdeletetenant", "label": "fetchDeleteTenant()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/admin.ts", "source_location": "L89"}, {"id": "api_admin_fetchuserlist", "label": "fetchUserList()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/admin.ts", "source_location": "L100"}, {"id": "api_admin_fetchuserdetail", "label": "fetchUserDetail()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/admin.ts", "source_location": "L119"}, {"id": "api_admin_fetchcreateuser", "label": "fetchCreateUser()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/admin.ts", "source_location": "L125"}, {"id": "api_admin_fetchupdateuser", "label": "fetchUpdateUser()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/admin.ts", "source_location": "L147"}, {"id": "api_admin_fetchdeleteuser", "label": "fetchDeleteUser()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/admin.ts", "source_location": "L170"}, {"id": "api_admin_fetchresetpassword", "label": "fetchResetPassword()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/admin.ts", "source_location": "L177"}, {"id": "api_admin_fetchuploaduseravatar", "label": "fetchUploadUserAvatar()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/admin.ts", "source_location": "L185"}, {"id": "api_admin_fetchregionlist", "label": "fetchRegionList()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/admin.ts", "source_location": "L196"}, {"id": "api_admin_fetchactiveregions", "label": "fetchActiveRegions()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/admin.ts", "source_location": "L214"}, {"id": "api_admin_fetchnotdeletedregions", "label": "fetchNotDeletedRegions()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/admin.ts", "source_location": "L231"}, {"id": "api_admin_fetchcategorylist", "label": "fetchCategoryList()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/admin.ts", "source_location": "L259"}, {"id": "api_admin_fetchcreatecategory", "label": "fetchCreateCategory()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/admin.ts", "source_location": "L277"}, {"id": "api_admin_fetchupdatecategory", "label": "fetchUpdateCategory()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/admin.ts", "source_location": "L290"}, {"id": "api_admin_fetchdeletecategory", "label": "fetchDeleteCategory()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/admin.ts", "source_location": "L307"}, {"id": "api_admin_fetchuploadcategoryimage", "label": "fetchUploadCategoryImage()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/admin.ts", "source_location": "L313"}, {"id": "api_admin_fetchunitlist", "label": "fetchUnitList()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/admin.ts", "source_location": "L324"}, {"id": "api_admin_fetchcreateunit", "label": "fetchCrLine truncated
@@ -0,0 +1 @@
{"nodes": [{"id": "users_wuzilong_work_00code_zkxw_web_admin_src_views_research_donation_list_index_vue", "label": "index.vue", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/research-donation/list/index.vue", "source_location": "L1"}], "edges": [], "raw_calls": []}
@@ -0,0 +1 @@
{"nodes": [{"id": "users_wuzilong_work_00code_zkxw_web_admin_src_views_operations_exhibition_appointment_index_vue", "label": "index.vue", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/operations/exhibition-appointment/index.vue", "source_location": "L1"}], "edges": [], "raw_calls": []}
@@ -0,0 +1 @@
{"nodes": [{"id": "users_wuzilong_work_00code_zkxw_web_admin_src_views_basic_info_customer_index_vue", "label": "index.vue", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/basic-info/customer/index.vue", "source_location": "L1"}, {"id": "customer_index_formatlocaldate", "label": "formatLocalDate()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/basic-info/customer/index.vue", "source_location": "L253"}, {"id": "customer_index_handleview", "label": "handleView()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/basic-info/customer/index.vue", "source_location": "L302"}, {"id": "customer_index_handleselectionchange", "label": "handleSelectionChange()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/basic-info/customer/index.vue", "source_location": "L322"}, {"id": "customer_index_loaddata", "label": "loadData()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/basic-info/customer/index.vue", "source_location": "L326"}, {"id": "customer_index_handlesearch", "label": "handleSearch()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/basic-info/customer/index.vue", "source_location": "L343"}, {"id": "customer_index_handlereset", "label": "handleReset()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/basic-info/customer/index.vue", "source_location": "L348"}, {"id": "customer_index_resetform", "label": "resetForm()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/basic-info/customer/index.vue", "source_location": "L355"}, {"id": "customer_index_handleadd", "label": "handleAdd()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/basic-info/customer/index.vue", "source_location": "L367"}, {"id": "customer_index_handleedit", "label": "handleEdit()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/basic-info/customer/index.vue", "source_location": "L375"}, {"id": "customer_index_handlesubmit", "label": "handleSubmit()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/basic-info/customer/index.vue", "source_location": "L391"}, {"id": "customer_index_handledelete", "label": "handleDelete()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/basic-info/customer/index.vue", "source_location": "L420"}, {"id": "customer_index_handlebatchdelete", "label": "handleBatchDelete()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/basic-info/customer/index.vue", "source_location": "L427"}], "edges": [{"source": "users_wuzilong_work_00code_zkxw_web_admin_src_views_basic_info_customer_index_vue", "target": "element_plus", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/basic-info/customer/index.vue", "source_location": "L239", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_views_basic_info_customer_index_vue", "target": "icons_vue", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/basic-info/customer/index.vue", "source_location": "L240", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_views_basic_info_customer_index_vue", "target": "users_wuzilong_work_00code_zkxw_web_admin_src_utils_fullscreen_loading", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/basic-info/customer/index.vue", "source_location": "L241", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_views_basic_info_customer_index_vue", "target": "users_wuzilong_work_00code_zkxw_web_admin_src_api_admin", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/basic-info/customer/index.vue", "source_location": "L242", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_views_basic_info_customer_index_vue", "target": "users_wuzilong_work_00code_zkxw_web_admin_src_components_business_system_view_dialog_index_vue", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/basic-info/customer/index.vue", "source_location": "L248", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_views_basic_info_customer_index_vue", "target": "users_wuzilong_work_00code_zkxw_web_admin_src_utils_status_tag_registry", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/basic-info/customer/index.vue", "source_lLine truncated
@@ -0,0 +1 @@
{"nodes": [{"id": "users_wuzilong_work_00code_zkxw_web_admin_src_views_cell_storage_storage_entry_info_index_vue", "label": "index.vue", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/cell-storage/storage-entry-info/index.vue", "source_location": "L1"}], "edges": [], "raw_calls": []}
@@ -0,0 +1 @@
{"nodes": [{"id": "users_wuzilong_work_00code_zkxw_web_admin_src_router_modules_sqxp_ts", "label": "sqxp.ts", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/router/modules/sqxp.ts", "source_location": "L1"}], "edges": [{"source": "users_wuzilong_work_00code_zkxw_web_admin_src_router_modules_sqxp_ts", "target": "users_wuzilong_work_00code_zkxw_web_admin_src_types_router", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/router/modules/sqxp.ts", "source_location": "L1", "weight": 1.0}], "raw_calls": []}
@@ -0,0 +1 @@
{"nodes": [{"id": "users_wuzilong_work_00code_zkxw_web_admin_src_views_cell_storage_payment_info_index_vue", "label": "index.vue", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/cell-storage/payment-info/index.vue", "source_location": "L1"}], "edges": [], "raw_calls": []}
@@ -0,0 +1 @@
{"nodes": [{"id": "users_wuzilong_work_00code_zkxw_web_admin_src_views_cell_storage_protocol_index_vue", "label": "index.vue", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/cell-storage/protocol/index.vue", "source_location": "L1"}], "edges": [], "raw_calls": []}
@@ -0,0 +1 @@
{"nodes": [{"id": "users_wuzilong_work_00code_zkxw_web_admin_src_api_collection_protocol_ts", "label": "collection-protocol.ts", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/collection-protocol.ts", "source_location": "L1"}, {"id": "api_collection_protocol_fetchcollectionprotocollist", "label": "fetchCollectionProtocolList()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/collection-protocol.ts", "source_location": "L14"}, {"id": "api_collection_protocol_fetchcollectionprotocoldetail", "label": "fetchCollectionProtocolDetail()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/collection-protocol.ts", "source_location": "L30"}, {"id": "api_collection_protocol_fetchcollectionprotocolauditlist", "label": "fetchCollectionProtocolAuditList()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/collection-protocol.ts", "source_location": "L45"}, {"id": "api_collection_protocol_fetchsubmitprotocolaudit", "label": "fetchSubmitProtocolAudit()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/collection-protocol.ts", "source_location": "L57"}, {"id": "api_collection_protocol_fetchreceiptconfirmlist", "label": "fetchReceiptConfirmList()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/collection-protocol.ts", "source_location": "L69"}, {"id": "api_collection_protocol_fetchreceiptconfirmedlist", "label": "fetchReceiptConfirmedList()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/collection-protocol.ts", "source_location": "L76"}, {"id": "api_collection_protocol_fetchreceiptconfirmsubmit", "label": "fetchReceiptConfirmSubmit()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/collection-protocol.ts", "source_location": "L83"}, {"id": "api_collection_protocol_fetchrefundconfirmlist", "label": "fetchRefundConfirmList()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/collection-protocol.ts", "source_location": "L94"}, {"id": "api_collection_protocol_fetchrefundconfirmedlist", "label": "fetchRefundConfirmedList()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/collection-protocol.ts", "source_location": "L101"}, {"id": "api_collection_protocol_fetchrefundconfirmsubmit", "label": "fetchRefundConfirmSubmit()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/collection-protocol.ts", "source_location": "L108"}, {"id": "api_collection_protocol_fetchsubmitreceiptfinance", "label": "fetchSubmitReceiptFinance()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/collection-protocol.ts", "source_location": "L119"}, {"id": "api_collection_protocol_fetchsubmitreceiptfinancebatch", "label": "fetchSubmitReceiptFinanceBatch()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/collection-protocol.ts", "source_location": "L126"}, {"id": "api_collection_protocol_fetchsubmitrefundfinance", "label": "fetchSubmitRefundFinance()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/collection-protocol.ts", "source_location": "L134"}, {"id": "api_collection_protocol_fetchsubmitrefundfinancebatch", "label": "fetchSubmitRefundFinanceBatch()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/collection-protocol.ts", "source_location": "L149"}, {"id": "api_collection_protocol_fetchpaymentdetaillist", "label": "fetchPaymentDetailList()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/collection-protocol.ts", "source_location": "L162"}, {"id": "api_collection_protocol_fetchcreatecollectionprotocol", "label": "fetchCreateCollectionProtocol()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/collection-protocol.ts", "source_location": "L177"}, {"id": "api_collection_protocol_fetchupdatecollectionprotocol", "label": "fetchUpdateCollectionProtocol()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/collection-protocol.ts", "source_location": "L185"}, {"id": "api_collection_protocol_fetchdeletecollectionprotocol", "label": "fetchDeleteCollectionProtocol()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/collection-protocol.ts", "source_location": "L196"}], "edges": [{"source": "users_wuzilong_work_00code_zkxw_web_admin_src_api_collection_protocol_ts", "target": "users_wuzilong_work_00code_zkxw_web_admin_src_utils_http", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/collection-protocol.ts", "source_location": "L1", "weight": 1.0}, {Line truncated
@@ -0,0 +1 @@
{"nodes": [{"id": "users_wuzilong_work_00code_zkxw_web_admin_src_api_collection_protocol_ts", "label": "collection-protocol.ts", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/collection-protocol.ts", "source_location": "L1"}, {"id": "api_collection_protocol_fetchcollectionprotocollist", "label": "fetchCollectionProtocolList()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/collection-protocol.ts", "source_location": "L14"}, {"id": "api_collection_protocol_fetchcollectionprotocoldetail", "label": "fetchCollectionProtocolDetail()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/collection-protocol.ts", "source_location": "L30"}, {"id": "api_collection_protocol_fetchcollectionprotocolauditlist", "label": "fetchCollectionProtocolAuditList()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/collection-protocol.ts", "source_location": "L45"}, {"id": "api_collection_protocol_fetchsubmitprotocolaudit", "label": "fetchSubmitProtocolAudit()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/collection-protocol.ts", "source_location": "L57"}, {"id": "api_collection_protocol_fetchreceiptconfirmlist", "label": "fetchReceiptConfirmList()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/collection-protocol.ts", "source_location": "L69"}, {"id": "api_collection_protocol_fetchreceiptconfirmedlist", "label": "fetchReceiptConfirmedList()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/collection-protocol.ts", "source_location": "L76"}, {"id": "api_collection_protocol_fetchreceiptconfirmsubmit", "label": "fetchReceiptConfirmSubmit()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/collection-protocol.ts", "source_location": "L83"}, {"id": "api_collection_protocol_fetchrefundconfirmlist", "label": "fetchRefundConfirmList()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/collection-protocol.ts", "source_location": "L94"}, {"id": "api_collection_protocol_fetchrefundconfirmedlist", "label": "fetchRefundConfirmedList()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/collection-protocol.ts", "source_location": "L101"}, {"id": "api_collection_protocol_fetchrefundconfirmsubmit", "label": "fetchRefundConfirmSubmit()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/collection-protocol.ts", "source_location": "L108"}, {"id": "api_collection_protocol_fetchsubmitreceiptfinance", "label": "fetchSubmitReceiptFinance()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/collection-protocol.ts", "source_location": "L119"}, {"id": "api_collection_protocol_fetchsubmitreceiptfinancebatch", "label": "fetchSubmitReceiptFinanceBatch()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/collection-protocol.ts", "source_location": "L126"}, {"id": "api_collection_protocol_fetchsubmitrefundfinance", "label": "fetchSubmitRefundFinance()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/collection-protocol.ts", "source_location": "L134"}, {"id": "api_collection_protocol_fetchsubmitrefundfinancebatch", "label": "fetchSubmitRefundFinanceBatch()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/collection-protocol.ts", "source_location": "L149"}, {"id": "api_collection_protocol_fetchpaymentdetaillist", "label": "fetchPaymentDetailList()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/collection-protocol.ts", "source_location": "L162"}, {"id": "api_collection_protocol_fetchcreatecollectionprotocol", "label": "fetchCreateCollectionProtocol()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/collection-protocol.ts", "source_location": "L175"}, {"id": "api_collection_protocol_fetchupdatecollectionprotocol", "label": "fetchUpdateCollectionProtocol()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/collection-protocol.ts", "source_location": "L183"}, {"id": "api_collection_protocol_fetchdeletecollectionprotocol", "label": "fetchDeleteCollectionProtocol()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/collection-protocol.ts", "source_location": "L194"}], "edges": [{"source": "users_wuzilong_work_00code_zkxw_web_admin_src_api_collection_protocol_ts", "target": "users_wuzilong_work_00code_zkxw_web_admin_src_utils_http", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/collection-protocol.ts", "source_location": "L1", "weight": 1.0}, {Line truncated
+14
View File
@@ -639,6 +639,20 @@ export const sqxpAdminRoutes: AppRouteRecord[] = [
keepAlive: true,
menuCode: 'pilot-service:channel-service-order-finance:list'
}
},
{
id: '80000000000000000000000000000010',
name: 'PilotApplication',
path: 'pilot-application',
component: '/pilot-service/pilot-application/index',
meta: { title: '中试服务申请单', icon: 'i-ep:document' }
},
{
id: '80000000000000000000000000000011',
name: 'PilotApplicationDetail',
path: 'pilot-application/detail',
component: '/pilot-service/pilot-application/ApplicationDetail',
meta: { title: '申请单详情', hidden: true }
}
]
}
@@ -415,3 +415,78 @@ export const txnStatusTagType = (status: string): string => {
return map[status] || 'info'
}
/** 中试申请单状态 */
export function applicationStatusLabel(status: string): string {
const map: Record<string, string> = { dks: '待开始', jxz: '进行中', ywc: '已完成', yzf: '已作废' }
return map[status] || status || '-'
}
export function applicationStatusTagType(status: string): '' | 'success' | 'warning' | 'danger' | 'info' {
const map: Record<string, '' | 'success' | 'warning' | 'danger' | 'info'> = {
dks: 'info', jxz: '', ywc: 'success', yzf: 'danger'
}
return map[status] || 'info'
}
// ========== 中试服务体检状态 ==========
export function checkupStatusLabel(status: string): string {
const map: Record<string, string> = {
dtj: '待体检',
ytj: '已体检',
}
return map[status] || status || '-'
}
export function checkupStatusTagType(status: string): string {
const map: Record<string, string> = {
dtj: 'warning',
ytj: 'success',
}
return map[status] || 'info'
}
export function feeStatusLabel(status: string): string {
const map: Record<string, string> = {
wjs: '未结算',
yjs: '已结算',
}
return map[status] || status || '-'
}
export function feeStatusTagType(status: string): string {
const map: Record<string, string> = {
wjs: 'info',
yjs: 'success',
}
return map[status] || 'info'
}
// ========== 中试服务 - 输注计划状态 ==========
export function scheduleStatusLabel(status: string): string {
const map: Record<string, string> = {
dsc: '待生产',
ysc: '已生产',
yjf: '已交付',
yqx: '已取消',
}
return map[status] || status || '-'
}
export function scheduleStatusTagType(status: string): string {
const map: Record<string, string> = {
dsc: 'info',
ysc: '',
yjf: 'success',
yqx: 'danger',
}
return map[status] || 'info'
}
// ========== 中试服务 - 放行审核结论 ==========
export function releaseReviewConclusionLabel(conclusion: string): string {
const map: Record<string, string> = { tg: '通过', btg: '不通过' }
return map[conclusion] || conclusion || '-'
}
export function releaseReviewConclusionTagType(conclusion: string): string {
const map: Record<string, string> = { tg: 'success', btg: 'danger' }
return map[conclusion] || 'info'
}
@@ -22,9 +22,20 @@
clearable
/>
</el-form-item>
<el-form-item label="创建时间">
<el-date-picker
v-model="createTimeRange"
type="daterange"
range-separator="至"
start-placeholder="开始日期"
end-placeholder="结束日期"
value-format="YYYY-MM-DD"
style="width: 100%"
/>
</el-form-item>
</div>
<div class="filter-actions-row">
<span class="filter-hint">支持模糊查询。</span>
<span class="filter-hint">支持模糊查询;默认展示近 30 天内创建的客户。</span>
<div class="filter-actions-end">
<el-button class="btn-ghost" @click="handleReset"><el-icon><RefreshLeft /></el-icon>重置</el-button>
<el-button class="btn-main" type="primary" @click="handleSearch"><el-icon><Search /></el-icon>搜索</el-button>
@@ -239,7 +250,22 @@
defineOptions({ name: 'BizCustomer' })
function formatLocalDate(d: Date): string {
const y = d.getFullYear()
const m = String(d.getMonth() + 1).padStart(2, '0')
const day = String(d.getDate()).padStart(2, '0')
return `${y}-${m}-${day}`
}
function getDefaultCreateTimeRange(): [string, string] {
const end = new Date()
const start = new Date()
start.setDate(start.getDate() - 30)
return [formatLocalDate(start), formatLocalDate(end)]
}
const searchForm = reactive<{ keyword: string }>({ keyword: '' })
const createTimeRange = ref<[string, string] | null>(getDefaultCreateTimeRange())
const tableData = ref<Api.BizCustomer.CustomerItem[]>([])
const selectedRows = ref<Api.BizCustomer.CustomerItem[]>([])
const loading = ref(false)
@@ -303,7 +329,9 @@
const res = await fetchCustomerList({
page: pagination.page,
pageSize: pagination.pageSize,
keyword: searchForm.keyword || undefined
keyword: searchForm.keyword || undefined,
createTimeStart: createTimeRange.value?.[0] || undefined,
createTimeEnd: createTimeRange.value?.[1] || undefined
})
tableData.value = res.list || []
pagination.total = res.total ?? 0
@@ -319,6 +347,7 @@
function handleReset() {
searchForm.keyword = ''
createTimeRange.value = getDefaultCreateTimeRange()
pagination.page = 1
loadData()
}
@@ -412,7 +441,7 @@
}
// 输入检索条件时自动搜索(防抖 300ms)
watchDebounced(
searchForm,
[searchForm, createTimeRange],
() => {
pagination.page = 1
loadData()
@@ -37,8 +37,20 @@
<el-option label="已办保险" value="1" />
</el-select>
</el-form-item>
<el-form-item label="满月日期">
<el-date-picker
v-model="fullmoonDateRange"
type="daterange"
range-separator="至"
start-placeholder="开始日期"
end-placeholder="结束日期"
value-format="YYYY-MM-DD"
style="width: 100%"
/>
</el-form-item>
</div>
<div class="filter-actions-row">
<span class="filter-hint">支持按协议号、姓名模糊检索;待办状态默认未办保险,满月日期默认近 30 天。</span>
<div class="filter-actions-end">
<el-button class="btn-ghost" @click="handleReset">
<el-icon><RefreshLeft /></el-icon>重置
@@ -481,10 +493,25 @@
defineOptions({ name: 'CellStorageFullmoonTodo' })
function formatLocalDate(d: Date): string {
const y = d.getFullYear()
const m = String(d.getMonth() + 1).padStart(2, '0')
const day = String(d.getDate()).padStart(2, '0')
return `${y}-${m}-${day}`
}
function getDefaultFullmoonDateRange(): [string, string] {
const end = new Date()
const start = new Date()
start.setDate(start.getDate() - 30)
return [formatLocalDate(start), formatLocalDate(end)]
}
// ---------------------------------------------------------------------------
// 搜索 & 主表
// ---------------------------------------------------------------------------
const searchForm = reactive({ keyword: '', todoStatus: '' })
const searchForm = reactive({ keyword: '', todoStatus: '0' })
const fullmoonDateRange = ref<[string, string] | null>(getDefaultFullmoonDateRange())
const tableData = ref<any[]>([])
const tableRef = ref()
const selectedRows = ref<any[]>([])
@@ -615,7 +642,9 @@
page: pagination.page,
pageSize: pagination.pageSize,
keyword: searchForm.keyword || undefined,
todoStatus: searchForm.todoStatus || undefined
todoStatus: searchForm.todoStatus || undefined,
fullmoonDateStart: fullmoonDateRange.value?.[0] || undefined,
fullmoonDateEnd: fullmoonDateRange.value?.[1] || undefined
})
tableData.value = (res as any)?.list || []
pagination.total = (res as any)?.total ?? 0
@@ -631,7 +660,8 @@
function handleReset() {
searchForm.keyword = ''
searchForm.todoStatus = ''
searchForm.todoStatus = '0'
fullmoonDateRange.value = getDefaultFullmoonDateRange()
pagination.page = 1
loadData()
}
@@ -1093,7 +1123,7 @@
}
// 输入检索条件时自动搜索(防抖 300ms)
watchDebounced(
searchForm,
[searchForm, fullmoonDateRange],
() => {
pagination.page = 1
loadData()
@@ -30,6 +30,45 @@
<h2>缴费确认列表</h2>
</div>
<div class="filter-block">
<el-form :model="searchForm" class="filter-form" label-position="top" @submit.prevent>
<div class="filter-grid">
<el-form-item label="关键词">
<el-input
v-model="searchForm.keyword"
placeholder="协议号/客户姓名/身份证号/新生儿姓名/新生儿身份证号"
clearable
@keyup.enter="handleSearch"
/>
</el-form-item>
<el-form-item label="应缴费时间">
<el-date-picker
v-model="installmentDueDateRange"
type="daterange"
range-separator="至"
start-placeholder="开始日期"
end-placeholder="结束日期"
value-format="YYYY-MM-DD"
style="width: 100%"
/>
</el-form-item>
</div>
<div class="filter-actions-row">
<span class="filter-hint"
>支持协议号、客户姓名、身份证号、新生儿姓名、新生儿身份证号模糊检索;默认展示近 30 天内应缴费的明细。</span
>
<div class="filter-actions-end">
<el-button class="btn-ghost" @click="handleReset">
<el-icon><RefreshLeft /></el-icon>重置
</el-button>
<el-button class="btn-main" type="primary" @click="handleSearch">
<el-icon><Search /></el-icon>搜索
</el-button>
</div>
</div>
</el-form>
</div>
<div class="list-body list-wrap payment-confirm-table-wrap">
<el-table class="list-table" :data="tableData" v-loading="loading" stripe row-key="id" @row-dblclick="handleRowDblClick">
<el-table-column
@@ -230,7 +269,7 @@
<script setup lang="ts">
import { ref, reactive, onMounted, computed } from 'vue'
import { ElMessage } from 'element-plus'
import { Close, Check } from '@element-plus/icons-vue'
import { Close, Check, RefreshLeft, Search } from '@element-plus/icons-vue'
import {
fetchReceiptConfirmList,
fetchReceiptConfirmedList,
@@ -256,6 +295,23 @@
defineOptions({ name: 'CellStoragePaymentConfirm' })
function formatLocalDate(d: Date): string {
const y = d.getFullYear()
const m = String(d.getMonth() + 1).padStart(2, '0')
const day = String(d.getDate()).padStart(2, '0')
return `${y}-${m}-${day}`
}
function getDefaultInstallmentDueDateRange(): [string, string] {
const end = new Date()
const start = new Date()
start.setDate(start.getDate() - 30)
return [formatLocalDate(start), formatLocalDate(end)]
}
const searchForm = reactive({ keyword: '' })
const installmentDueDateRange = ref<[string, string] | null>(getDefaultInstallmentDueDateRange())
const tabs = [
{ key: 'pending', label: '待确认' },
{ key: 'confirmed', label: '已确认' }
@@ -311,10 +367,20 @@
downloadAttachmentFile(file, { fullFileUrl })
}
function buildListParams() {
return {
page: pagination.page,
pageSize: pagination.pageSize,
keyword: searchForm.keyword || undefined,
installmentDueDateStart: installmentDueDateRange.value?.[0] || undefined,
installmentDueDateEnd: installmentDueDateRange.value?.[1] || undefined
}
}
async function loadData() {
loading.value = true
try {
const params = { page: pagination.page, pageSize: pagination.pageSize }
const params = buildListParams()
const res =
activeTab.value === 'pending'
? await fetchReceiptConfirmList(params)
@@ -333,6 +399,18 @@
loadData()
}
function handleSearch() {
pagination.page = 1
loadData()
}
function handleReset() {
searchForm.keyword = ''
installmentDueDateRange.value = getDefaultInstallmentDueDateRange()
pagination.page = 1
loadData()
}
function openConfirm(row: Record<string, unknown>) {
currentDetailId.value = String(row.id)
confirmRow.value = row
@@ -370,6 +448,15 @@
}
}
watchDebounced(
[searchForm, installmentDueDateRange],
() => {
pagination.page = 1
loadData()
},
{ debounce: 300, deep: true }
)
onMounted(() => {
loadData()
})
@@ -404,6 +491,19 @@
width: 100%;
}
.filter-form :deep(.el-form-item) {
margin-bottom: 0;
min-width: 0;
}
.filter-form :deep(.el-form-item__label) {
font-size: 13px;
font-weight: 500;
color: var(--mint-text-muted, #64748b);
padding: 0 0 4px;
line-height: 1.2;
}
.payment-confirm-table-wrap {
overflow-x: auto;
}
@@ -48,9 +48,20 @@
<el-option label="现金" value="xj" />
</el-select>
</el-form-item>
<el-form-item label="应缴费时间">
<el-date-picker
v-model="installmentDueDateRange"
type="daterange"
range-separator="至"
start-placeholder="开始日期"
end-placeholder="结束日期"
value-format="YYYY-MM-DD"
style="width: 100%"
/>
</el-form-item>
</div>
<div class="filter-actions-row">
<span class="filter-hint">支持按协议号模糊检索。</span>
<span class="filter-hint">支持按协议号模糊检索;默认展示近 30 天内应缴费的明细。</span>
<div class="filter-actions-end">
<el-button class="btn-ghost" @click="handleReset">
<el-icon><RefreshLeft /></el-icon>重置
@@ -447,6 +458,20 @@
defineOptions({ name: 'CellStoragePaymentInfo' })
function formatLocalDate(d: Date): string {
const y = d.getFullYear()
const m = String(d.getMonth() + 1).padStart(2, '0')
const day = String(d.getDate()).padStart(2, '0')
return `${y}-${m}-${day}`
}
function getDefaultInstallmentDueDateRange(): [string, string] {
const end = new Date()
const start = new Date()
start.setDate(start.getDate() - 30)
return [formatLocalDate(start), formatLocalDate(end)]
}
const tabs = [
{ key: 'dfj', label: '待缴费' },
{ key: 'jfqrz', label: '缴费确认中' },
@@ -457,6 +482,7 @@
const activeTab = ref('dfj')
const searchForm = reactive({ keyword: '', transferType: '' })
const installmentDueDateRange = ref<[string, string] | null>(getDefaultInstallmentDueDateRange())
const tableData = ref<Record<string, unknown>[]>([])
const selectedRows = ref<Record<string, unknown>[]>([])
const loading = ref(false)
@@ -533,7 +559,9 @@
pageSize: pagination.pageSize,
payStatus: activeTab.value,
keyword: searchForm.keyword || undefined,
transferType: searchForm.transferType || undefined
transferType: searchForm.transferType || undefined,
installmentDueDateStart: installmentDueDateRange.value?.[0] || undefined,
installmentDueDateEnd: installmentDueDateRange.value?.[1] || undefined
})
tableData.value = res.list || []
pagination.total = res.total ?? 0
@@ -713,12 +741,13 @@
function handleReset() {
searchForm.keyword = ''
searchForm.transferType = ''
installmentDueDateRange.value = getDefaultInstallmentDueDateRange()
pagination.page = 1
loadData()
}
// 输入检索条件时自动搜索(防抖 300ms)
watchDebounced(
searchForm,
[searchForm, installmentDueDateRange],
() => {
pagination.page = 1
loadData()
@@ -32,9 +32,32 @@
<el-option label="转科研" value="zky" />
</el-select>
</el-form-item>
<el-form-item label="创建时间">
<el-date-picker
v-model="createTimeRange"
type="daterange"
range-separator="至"
start-placeholder="开始日期"
end-placeholder="结束日期"
value-format="YYYY-MM-DD"
style="width: 100%"
/>
</el-form-item>
<el-form-item label="样本采集时间">
<el-date-picker
v-model="sampleCollectTimeRange"
type="daterange"
range-separator="至"
start-placeholder="开始日期"
end-placeholder="结束日期"
value-format="YYYY-MM-DD"
clearable
style="width: 100%"
/>
</el-form-item>
</div>
<div class="filter-actions-row">
<span class="filter-hint">列表为概要信息,详情见弹窗。</span>
<span class="filter-hint">列表为概要信息,详情见弹窗;默认展示近 30 天内创建的协议单。</span>
<div class="filter-actions-end">
<el-button class="btn-ghost" @click="handleReset"
><el-icon><RefreshLeft /></el-icon>重置</el-button
@@ -326,11 +349,27 @@
defineOptions({ name: 'CellStorageProtocolAudit' })
function formatLocalDate(d: Date): string {
const y = d.getFullYear()
const m = String(d.getMonth() + 1).padStart(2, '0')
const day = String(d.getDate()).padStart(2, '0')
return `${y}-${m}-${day}`
}
function getDefaultCreateTimeRange(): [string, string] {
const end = new Date()
const start = new Date()
start.setDate(start.getDate() - 30)
return [formatLocalDate(start), formatLocalDate(end)]
}
/* ====== 列表 ====== */
const searchForm = reactive<{ keyword: string; protocolStatus: string }>({
keyword: '',
protocolStatus: ''
})
const createTimeRange = ref<[string, string] | null>(getDefaultCreateTimeRange())
const sampleCollectTimeRange = ref<[string, string] | null>(null)
const tableData = ref<CollectionProtocolRow[]>([])
const selectedRows = ref<CollectionProtocolRow[]>([])
const loading = ref(false)
@@ -347,7 +386,11 @@
page: pagination.page,
pageSize: pagination.pageSize,
keyword: searchForm.keyword || undefined,
protocolStatus: searchForm.protocolStatus || undefined
protocolStatus: searchForm.protocolStatus || undefined,
createTimeStart: createTimeRange.value?.[0] || undefined,
createTimeEnd: createTimeRange.value?.[1] || undefined,
sampleCollectTimeStart: sampleCollectTimeRange.value?.[0] || undefined,
sampleCollectTimeEnd: sampleCollectTimeRange.value?.[1] || undefined
})
tableData.value = res.list || []
pagination.total = res.total ?? 0
@@ -364,6 +407,8 @@
function handleReset() {
searchForm.keyword = ''
searchForm.protocolStatus = ''
createTimeRange.value = getDefaultCreateTimeRange()
sampleCollectTimeRange.value = null
pagination.page = 1
loadData()
}
@@ -485,7 +530,7 @@
}
// 输入检索条件时自动搜索(防抖 300ms)
watchDebounced(
searchForm,
[searchForm, createTimeRange, sampleCollectTimeRange],
() => {
pagination.page = 1
loadData()
@@ -32,9 +32,32 @@
<el-option label="转科研" value="zky" />
</el-select>
</el-form-item>
<el-form-item label="创建时间">
<el-date-picker
v-model="createTimeRange"
type="daterange"
range-separator="至"
start-placeholder="开始日期"
end-placeholder="结束日期"
value-format="YYYY-MM-DD"
style="width: 100%"
/>
</el-form-item>
<el-form-item label="样本采集时间">
<el-date-picker
v-model="sampleCollectTimeRange"
type="daterange"
range-separator="至"
start-placeholder="开始日期"
end-placeholder="结束日期"
value-format="YYYY-MM-DD"
clearable
style="width: 100%"
/>
</el-form-item>
</div>
<div class="filter-actions-row">
<span class="filter-hint">列表为概要信息,详情见弹窗。</span>
<span class="filter-hint">列表为概要信息,详情见弹窗;默认展示近 30 天内创建的协议单。</span>
<div class="filter-actions-end">
<el-button class="btn-ghost" @click="handleReset"
><el-icon><RefreshLeft /></el-icon>重置</el-button
@@ -284,11 +307,27 @@
defineOptions({ name: 'CellStorageProtocol' })
function formatLocalDate(d: Date): string {
const y = d.getFullYear()
const m = String(d.getMonth() + 1).padStart(2, '0')
const day = String(d.getDate()).padStart(2, '0')
return `${y}-${m}-${day}`
}
function getDefaultCreateTimeRange(): [string, string] {
const end = new Date()
const start = new Date()
start.setDate(start.getDate() - 30)
return [formatLocalDate(start), formatLocalDate(end)]
}
/* ====== 列表 ====== */
const searchForm = reactive<{ keyword: string; protocolStatus: string }>({
keyword: '',
protocolStatus: ''
})
const createTimeRange = ref<[string, string] | null>(getDefaultCreateTimeRange())
const sampleCollectTimeRange = ref<[string, string] | null>(null)
const tableData = ref<CollectionProtocolRow[]>([])
const selectedRows = ref<CollectionProtocolRow[]>([])
const loading = ref(false)
@@ -305,7 +344,11 @@
page: pagination.page,
pageSize: pagination.pageSize,
keyword: searchForm.keyword || undefined,
protocolStatus: searchForm.protocolStatus || undefined
protocolStatus: searchForm.protocolStatus || undefined,
createTimeStart: createTimeRange.value?.[0] || undefined,
createTimeEnd: createTimeRange.value?.[1] || undefined,
sampleCollectTimeStart: sampleCollectTimeRange.value?.[0] || undefined,
sampleCollectTimeEnd: sampleCollectTimeRange.value?.[1] || undefined
})
tableData.value = res.list || []
pagination.total = res.total ?? 0
@@ -322,6 +365,8 @@
function handleReset() {
searchForm.keyword = ''
searchForm.protocolStatus = ''
createTimeRange.value = getDefaultCreateTimeRange()
sampleCollectTimeRange.value = null
pagination.page = 1
loadData()
}
@@ -391,7 +436,7 @@
}
// 输入检索条件时自动搜索(防抖 300ms)
watchDebounced(
searchForm,
[searchForm, createTimeRange, sampleCollectTimeRange],
() => {
pagination.page = 1
loadData()
@@ -30,6 +30,45 @@
<h2>退费确认列表</h2>
</div>
<div class="filter-block">
<el-form :model="searchForm" class="filter-form" label-position="top" @submit.prevent>
<div class="filter-grid">
<el-form-item label="关键词">
<el-input
v-model="searchForm.keyword"
placeholder="协议号/客户姓名/身份证号/新生儿姓名/新生儿身份证号"
clearable
@keyup.enter="handleSearch"
/>
</el-form-item>
<el-form-item label="应缴费时间">
<el-date-picker
v-model="installmentDueDateRange"
type="daterange"
range-separator="至"
start-placeholder="开始日期"
end-placeholder="结束日期"
value-format="YYYY-MM-DD"
style="width: 100%"
/>
</el-form-item>
</div>
<div class="filter-actions-row">
<span class="filter-hint"
>支持协议号、客户姓名、身份证号、新生儿姓名、新生儿身份证号模糊检索;默认展示近 30 天内应缴费的明细。</span
>
<div class="filter-actions-end">
<el-button class="btn-ghost" @click="handleReset">
<el-icon><RefreshLeft /></el-icon>重置
</el-button>
<el-button class="btn-main" type="primary" @click="handleSearch">
<el-icon><Search /></el-icon>搜索
</el-button>
</div>
</div>
</el-form>
</div>
<div class="list-body list-wrap refund-confirm-table-wrap">
<el-table class="list-table" :data="tableData" v-loading="loading" stripe row-key="id" @row-dblclick="handleRowDblClick">
<el-table-column
@@ -247,7 +286,7 @@
<script setup lang="ts">
import { ref, reactive, onMounted, computed } from 'vue'
import { ElMessage } from 'element-plus'
import { Close, Check } from '@element-plus/icons-vue'
import { Close, Check, RefreshLeft, Search } from '@element-plus/icons-vue'
import {
fetchRefundConfirmList,
fetchRefundConfirmedList,
@@ -273,6 +312,23 @@
defineOptions({ name: 'CellStorageRefundConfirm' })
function formatLocalDate(d: Date): string {
const y = d.getFullYear()
const m = String(d.getMonth() + 1).padStart(2, '0')
const day = String(d.getDate()).padStart(2, '0')
return `${y}-${m}-${day}`
}
function getDefaultInstallmentDueDateRange(): [string, string] {
const end = new Date()
const start = new Date()
start.setDate(start.getDate() - 30)
return [formatLocalDate(start), formatLocalDate(end)]
}
const searchForm = reactive({ keyword: '' })
const installmentDueDateRange = ref<[string, string] | null>(getDefaultInstallmentDueDateRange())
const tabs = [
{ key: 'pending', label: '待确认' },
{ key: 'confirmed', label: '已确认' }
@@ -328,10 +384,20 @@
downloadAttachmentFile(file, { fullFileUrl })
}
function buildListParams() {
return {
page: pagination.page,
pageSize: pagination.pageSize,
keyword: searchForm.keyword || undefined,
installmentDueDateStart: installmentDueDateRange.value?.[0] || undefined,
installmentDueDateEnd: installmentDueDateRange.value?.[1] || undefined
}
}
async function loadData() {
loading.value = true
try {
const params = { page: pagination.page, pageSize: pagination.pageSize }
const params = buildListParams()
const res =
activeTab.value === 'pending'
? await fetchRefundConfirmList(params)
@@ -350,6 +416,18 @@
loadData()
}
function handleSearch() {
pagination.page = 1
loadData()
}
function handleReset() {
searchForm.keyword = ''
installmentDueDateRange.value = getDefaultInstallmentDueDateRange()
pagination.page = 1
loadData()
}
function openConfirm(row: Record<string, unknown>) {
currentDetailId.value = String(row.id)
confirmRow.value = row
@@ -387,6 +465,15 @@
}
}
watchDebounced(
[searchForm, installmentDueDateRange],
() => {
pagination.page = 1
loadData()
},
{ debounce: 300, deep: true }
)
onMounted(() => {
loadData()
})
@@ -421,6 +508,19 @@
width: 100%;
}
.filter-form :deep(.el-form-item) {
margin-bottom: 0;
min-width: 0;
}
.filter-form :deep(.el-form-item__label) {
font-size: 13px;
font-weight: 500;
color: var(--mint-text-muted, #64748b);
padding: 0 0 4px;
line-height: 1.2;
}
.refund-confirm-table-wrap {
overflow-x: auto;
}
@@ -30,8 +30,20 @@
<el-option label="未通知" value="0" />
</el-select>
</el-form-item>
<el-form-item label="接收时间">
<el-date-picker
v-model="receptionTimeRange"
type="daterange"
range-separator="至"
start-placeholder="开始日期"
end-placeholder="结束日期"
value-format="YYYY-MM-DD"
style="width: 100%"
/>
</el-form-item>
</div>
<div class="filter-actions-row">
<span class="filter-hint">支持按协议号、姓名、样本编码模糊检索;默认展示近 30 天内接收的样本。</span>
<div class="filter-actions-end">
<el-button class="btn-ghost" @click="handleReset">
<el-icon><RefreshLeft /></el-icon>重置
@@ -155,7 +167,22 @@
defineOptions({ name: 'CellStorageSampleReceptionInfo' })
function formatLocalDate(d: Date): string {
const y = d.getFullYear()
const m = String(d.getMonth() + 1).padStart(2, '0')
const day = String(d.getDate()).padStart(2, '0')
return `${y}-${m}-${day}`
}
function getDefaultReceptionTimeRange(): [string, string] {
const end = new Date()
const start = new Date()
start.setDate(start.getDate() - 30)
return [formatLocalDate(start), formatLocalDate(end)]
}
const searchForm = reactive({ keyword: '', acceptConclusion: '', smsNotified: '' })
const receptionTimeRange = ref<[string, string] | null>(getDefaultReceptionTimeRange())
const tableData = ref<any[]>([])
const loading = ref(false)
const pagination = reactive({ page: 1, pageSize: 10, total: 0 })
@@ -174,7 +201,9 @@
pageSize: pagination.pageSize,
keyword: searchForm.keyword || undefined,
acceptConclusion: searchForm.acceptConclusion || undefined,
smsNotified: searchForm.smsNotified || undefined
smsNotified: searchForm.smsNotified || undefined,
receptionTimeStart: receptionTimeRange.value?.[0] || undefined,
receptionTimeEnd: receptionTimeRange.value?.[1] || undefined
})
const res = (result as any) || {}
tableData.value = res.list || []
@@ -191,6 +220,7 @@
function handleReset() {
Object.assign(searchForm, { keyword: '', acceptConclusion: '', smsNotified: '' })
receptionTimeRange.value = getDefaultReceptionTimeRange()
handleSearch()
}
@@ -240,7 +270,7 @@
}
// 输入检索条件时自动搜索(防抖 300ms)
watchDebounced(
searchForm,
[searchForm, receptionTimeRange],
() => {
pagination.page = 1
loadData()
@@ -24,8 +24,20 @@
<el-option label="已制作" value="1" />
</el-select>
</el-form-item>
<el-form-item label="入库日期">
<el-date-picker
v-model="storageInDateRange"
type="daterange"
range-separator="至"
start-placeholder="开始日期"
end-placeholder="结束日期"
value-format="YYYY-MM-DD"
style="width: 100%"
/>
</el-form-item>
</div>
<div class="filter-actions-row">
<span class="filter-hint">支持按协议号、姓名模糊检索;制作状态默认未制作,入库日期默认近 30 天。</span>
<div class="filter-actions-end">
<el-button class="btn-ghost" @click="handleReset">
<el-icon><RefreshLeft /></el-icon>重置
@@ -317,10 +329,25 @@
defineOptions({ name: 'CellStorageStorageCert' })
function formatLocalDate(d: Date): string {
const y = d.getFullYear()
const m = String(d.getMonth() + 1).padStart(2, '0')
const day = String(d.getDate()).padStart(2, '0')
return `${y}-${m}-${day}`
}
function getDefaultStorageInDateRange(): [string, string] {
const end = new Date()
const start = new Date()
start.setDate(start.getDate() - 30)
return [formatLocalDate(start), formatLocalDate(end)]
}
// ---------------------------------------------------------------------------
// 搜索 & 主表
// ---------------------------------------------------------------------------
const searchForm = reactive({ keyword: '', makeStatus: '' })
const searchForm = reactive({ keyword: '', makeStatus: '0' })
const storageInDateRange = ref<[string, string] | null>(getDefaultStorageInDateRange())
const tableData = ref<any[]>([])
const loading = ref(false)
const pagination = reactive({ page: 1, pageSize: 10, total: 0 })
@@ -393,7 +420,9 @@
page: pagination.page,
pageSize: pagination.pageSize,
keyword: searchForm.keyword || undefined,
makeStatus: searchForm.makeStatus || undefined
makeStatus: searchForm.makeStatus || undefined,
storageInDateStart: storageInDateRange.value?.[0] || undefined,
storageInDateEnd: storageInDateRange.value?.[1] || undefined
})
tableData.value = (res as any)?.list || []
pagination.total = (res as any)?.total ?? 0
@@ -409,7 +438,8 @@
function handleReset() {
searchForm.keyword = ''
searchForm.makeStatus = ''
searchForm.makeStatus = '0'
storageInDateRange.value = getDefaultStorageInDateRange()
pagination.page = 1
loadData()
}
@@ -593,7 +623,7 @@
}
// 输入检索条件时自动搜索(防抖 300ms)
watchDebounced(
searchForm,
[searchForm, storageInDateRange],
() => {
pagination.page = 1
loadData()
@@ -30,8 +30,20 @@
<el-option label="未通知" value="0" />
</el-select>
</el-form-item>
<el-form-item label="入库时间">
<el-date-picker
v-model="storageTimeRange"
type="daterange"
range-separator="至"
start-placeholder="开始日期"
end-placeholder="结束日期"
value-format="YYYY-MM-DD"
style="width: 100%"
/>
</el-form-item>
</div>
<div class="filter-actions-row">
<span class="filter-hint">支持按协议号、姓名、样本编码模糊检索;默认展示近 30 天内入库的样本。</span>
<div class="filter-actions-end">
<el-button class="btn-ghost" @click="handleReset">
<el-icon><RefreshLeft /></el-icon>重置
@@ -161,7 +173,22 @@
defineOptions({ name: 'CellStorageStorageEntryInfo' })
function formatLocalDate(d: Date): string {
const y = d.getFullYear()
const m = String(d.getMonth() + 1).padStart(2, '0')
const day = String(d.getDate()).padStart(2, '0')
return `${y}-${m}-${day}`
}
function getDefaultStorageTimeRange(): [string, string] {
const end = new Date()
const start = new Date()
start.setDate(start.getDate() - 30)
return [formatLocalDate(start), formatLocalDate(end)]
}
const searchForm = reactive({ keyword: '', storageStatus: '', smsNotified: '' })
const storageTimeRange = ref<[string, string] | null>(getDefaultStorageTimeRange())
const tableData = ref<any[]>([])
const loading = ref(false)
const pagination = reactive({ page: 1, pageSize: 10, total: 0 })
@@ -180,7 +207,9 @@
pageSize: pagination.pageSize,
keyword: searchForm.keyword || undefined,
storageStatus: searchForm.storageStatus || undefined,
smsNotified: searchForm.smsNotified || undefined
smsNotified: searchForm.smsNotified || undefined,
storageTimeStart: storageTimeRange.value?.[0] || undefined,
storageTimeEnd: storageTimeRange.value?.[1] || undefined
})
const res = (result as any) || {}
tableData.value = res.list || []
@@ -197,6 +226,7 @@
function handleReset() {
Object.assign(searchForm, { keyword: '', storageStatus: '', smsNotified: '' })
storageTimeRange.value = getDefaultStorageTimeRange()
handleSearch()
}
@@ -246,7 +276,7 @@
}
// 输入检索条件时自动搜索(防抖 300ms)
watchDebounced(
searchForm,
[searchForm, storageTimeRange],
() => {
pagination.page = 1
loadData()
@@ -18,9 +18,20 @@
<el-form-item label="关键词">
<el-input v-model="searchForm.keyword" placeholder="预约编号/来访单位/联系人" clearable />
</el-form-item>
<el-form-item label="到访日期">
<el-date-picker
v-model="visitDateRange"
type="daterange"
range-separator="至"
start-placeholder="开始日期"
end-placeholder="结束日期"
value-format="YYYY-MM-DD"
style="width: 100%"
/>
</el-form-item>
</div>
<div class="filter-actions-row">
<span class="filter-hint">按预约编号、来访单位、联系人模糊查询。</span>
<span class="filter-hint">按预约编号、来访单位、联系人模糊查询;默认展示未来 30 天内的到访预约。</span>
<div class="filter-actions-end">
<el-button class="btn-ghost" @click="handleReset"><el-icon><RefreshLeft /></el-icon>重置</el-button>
<el-button class="btn-main" type="primary" @click="handleSearch"><el-icon><Search /></el-icon>搜索</el-button>
@@ -190,7 +201,22 @@
[key: string]: any
}
function formatLocalDate(d: Date): string {
const y = d.getFullYear()
const m = String(d.getMonth() + 1).padStart(2, '0')
const day = String(d.getDate()).padStart(2, '0')
return `${y}-${m}-${day}`
}
function getDefaultVisitDateRange(): [string, string] {
const start = new Date()
const end = new Date()
end.setDate(end.getDate() + 30)
return [formatLocalDate(start), formatLocalDate(end)]
}
const searchForm = reactive<{ keyword: string }>({ keyword: '' })
const visitDateRange = ref<[string, string] | null>(getDefaultVisitDateRange())
const tableData = ref<AppointmentRow[]>([])
const selectedRows = ref<AppointmentRow[]>([])
const loading = ref(false)
@@ -245,7 +271,9 @@
const res = await fetchExhibitionAppointmentList({
page: pagination.page,
pageSize: pagination.pageSize,
keyword: searchForm.keyword || undefined
keyword: searchForm.keyword || undefined,
visitDateStart: visitDateRange.value?.[0] || undefined,
visitDateEnd: visitDateRange.value?.[1] || undefined
})
tableData.value = res.list || []
pagination.total = res.total ?? 0
@@ -261,6 +289,7 @@
function handleReset() {
searchForm.keyword = ''
visitDateRange.value = getDefaultVisitDateRange()
pagination.page = 1
loadData()
}
@@ -350,7 +379,7 @@
}
// 输入检索条件时自动搜索(防抖 300ms)
watchDebounced(
searchForm,
[searchForm, visitDateRange],
() => {
pagination.page = 1
loadData()
@@ -37,9 +37,20 @@
<el-option label="退订产品" value="unsubscribe" />
</el-select>
</el-form-item>
<el-form-item label="创建时间">
<el-date-picker
v-model="createTimeRange"
type="daterange"
range-separator="至"
start-placeholder="开始日期"
end-placeholder="结束日期"
value-format="YYYY-MM-DD"
style="width: 100%"
/>
</el-form-item>
</div>
<div class="filter-actions-row">
<span class="filter-hint"></span>
<span class="filter-hint">默认展示近 30 天内创建的流水。</span>
<div class="filter-actions-end">
<el-button class="btn-ghost" @click="handleReset">
<el-icon><RefreshLeft /></el-icon>重置
@@ -391,7 +402,22 @@
done: ['yqr']
}
function formatLocalDate(d: Date): string {
const y = d.getFullYear()
const m = String(d.getMonth() + 1).padStart(2, '0')
const day = String(d.getDate()).padStart(2, '0')
return `${y}-${m}-${day}`
}
function getDefaultLast30DaysRange(): [string, string] {
const end = new Date()
const start = new Date()
start.setDate(start.getDate() - 30)
return [formatLocalDate(start), formatLocalDate(end)]
}
const activeTab = ref('pending')
const createTimeRange = ref<[string, string] | null>(getDefaultLast30DaysRange())
const searchForm = reactive({
txnType: '' as string,
txnStatus: ['dqr'] as string[],
@@ -418,6 +444,8 @@
params.txnStatus = searchForm.txnStatus.join(',')
}
if (searchForm.keyword.trim()) params.keyword = searchForm.keyword.trim()
if (createTimeRange.value?.[0]) params.createTimeStart = createTimeRange.value[0]
if (createTimeRange.value?.[1]) params.createTimeEnd = createTimeRange.value[1]
const res: any = await fetchServiceOrderTxnList(params)
tableData.value = res?.data?.list || res?.list || []
@@ -438,6 +466,7 @@
searchForm.txnType = ''
searchForm.txnStatus = [...TAB_STATUS_MAP[activeTab.value]]
searchForm.keyword = ''
createTimeRange.value = getDefaultLast30DaysRange()
pagination.page = 1
loadData()
}
@@ -453,7 +482,7 @@
// 检索条件变更时自动搜索(防抖 300ms)
watchDebounced(
searchForm,
[searchForm, createTimeRange],
() => {
pagination.page = 1
loadData()
@@ -45,9 +45,20 @@
<el-option label="已作废" value="yzf" />
</el-select>
</el-form-item>
<el-form-item label="创建时间">
<el-date-picker
v-model="createTimeRange"
type="daterange"
range-separator="至"
start-placeholder="开始日期"
end-placeholder="结束日期"
value-format="YYYY-MM-DD"
style="width: 100%"
/>
</el-form-item>
</div>
<div class="filter-actions-row">
<span class="filter-hint">渠道名称输入后自动检索;订单类型、状态变更后亦会自动刷新列表。</span>
<span class="filter-hint">默认展示近 30 天内创建的订单;渠道名称输入后自动检索。</span>
<div class="filter-actions-end">
<el-button class="btn-ghost" @click="handleReset">
<el-icon><RefreshLeft /></el-icon>重置
@@ -728,6 +739,22 @@ const formatProjectOptionLabel = (p: any) => {
}
// ── 搜索 ──────────────────────────────────────────────────────────────
function formatLocalDate(d: Date): string {
const y = d.getFullYear()
const m = String(d.getMonth() + 1).padStart(2, '0')
const day = String(d.getDate()).padStart(2, '0')
return `${y}-${m}-${day}`
}
function getDefaultLast30DaysRange(): [string, string] {
const end = new Date()
const start = new Date()
start.setDate(start.getDate() - 30)
return [formatLocalDate(start), formatLocalDate(end)]
}
const createTimeRange = ref<[string, string] | null>(getDefaultLast30DaysRange())
const searchForm = reactive<{
orderType: string
orderStatus: string[]
@@ -758,6 +785,8 @@ const loadData = async () => {
if (searchForm.orderType) params.orderType = searchForm.orderType
if (searchForm.orderStatus.length) params.orderStatus = searchForm.orderStatus.join(',')
if (searchForm.keyword) params.keyword = searchForm.keyword
if (createTimeRange.value?.[0]) params.createTimeStart = createTimeRange.value[0]
if (createTimeRange.value?.[1]) params.createTimeEnd = createTimeRange.value[1]
const res: any = await fetchChannelServiceOrderList(params)
const data = res?.data ?? res
@@ -779,13 +808,14 @@ const handleReset = () => {
searchForm.orderType = ''
searchForm.orderStatus = []
searchForm.keyword = ''
createTimeRange.value = getDefaultLast30DaysRange()
pagination.page = 1
loadData()
}
// 检索条件变更时自动搜索(防抖 300ms)
watchDebounced(
searchForm,
[searchForm, createTimeRange],
() => {
pagination.page = 1
loadData()
File diff suppressed because it is too large. Load diff
@@ -0,0 +1,651 @@
<!-- 中试服务申请单列表页 -->
<template>
<div class="page-container">
<header class="page-head">
<h1>中试服务申请单</h1>
<p class="page-desc">管理中试服务申请单的创建、审批、状态流转,关联渠道服务订单与患者信息。</p>
</header>
<section class="panel">
<div class="panel-top">
<h2 class="title-bar-heading">中试服务申请单</h2>
</div>
<div class="filter-block">
<el-form :model="searchForm" class="filter-form" @submit.prevent>
<div class="filter-grid">
<el-form-item label="申请单号">
<el-input
v-model="searchForm.applicationNo"
placeholder="请输入申请单号"
clearable
@keyup.enter="handleSearch"
/>
</el-form-item>
<el-form-item label="渠道">
<el-select
v-model="searchForm.channelId"
placeholder="全部"
clearable
filterable
:loading="channelLoading"
@focus="onChannelSelectFocus"
@change="handleSearchChannelChange"
>
<el-option
v-for="ch in channelOptions"
:key="ch.id"
:label="ch.channelName || ch.name"
:value="ch.id"
/>
</el-select>
</el-form-item>
<el-form-item label="服务订单">
<el-select
v-model="searchForm.channelServiceOrderId"
placeholder="全部"
clearable
filterable
:disabled="!searchForm.channelId"
:loading="serviceOrderLoading"
@change="handleSearch"
>
<el-option
v-for="so in serviceOrderOptions"
:key="so.id"
:label="formatServiceOrderLabel(so)"
:value="so.id"
/>
</el-select>
</el-form-item>
</div>
<div class="filter-actions-row">
<div class="status-filter-group">
<el-button
v-for="item in statusFilters"
:key="item.value"
:type="activeStatus === item.value ? 'primary' : 'default'"
size="default"
@click="handleStatusFilter(item.value)"
>
{{ item.label }}
</el-button>
</div>
<div class="filter-actions-end">
<el-button class="btn-ghost" @click="handleReset">
<el-icon><RefreshLeft /></el-icon>重置
</el-button>
<el-button class="btn-main" type="primary" @click="handleSearch">
<el-icon><Search /></el-icon>搜索
</el-button>
</div>
</div>
</el-form>
</div>
<div class="list-toolbar">
<div class="list-toolbar-row">
<el-button class="btn-main" type="primary" @click="handleCreate">
<el-icon><Plus /></el-icon>
新增
</el-button>
</div>
</div>
<div class="list-body list-wrap">
<el-table
class="list-table"
:data="tableData"
v-loading="loading"
stripe
row-key="id"
@row-dblclick="handleView"
>
<el-table-column
type="index"
label="序号"
min-width="68"
align="center"
header-align="center"
:index="index => (pagination.page - 1) * pagination.pageSize + index + 1"
/>
<el-table-column prop="applicationNo" label="申请单号" min-width="180" show-overflow-tooltip>
<template #default="{ row }">
<el-button link type="primary" @click="handleView(row)">
{{ row.applicationNo || '-' }}
</el-button>
</template>
</el-table-column>
<el-table-column prop="channelName" label="渠道名称" min-width="150" show-overflow-tooltip />
<el-table-column label="关联服务订单" min-width="180" show-overflow-tooltip>
<template #default="{ row }">
<span v-if="row.serviceOrderNo">{{ row.serviceOrderNo }}</span>
<span v-else>-</span>
</template>
</el-table-column>
<el-table-column prop="patientName" label="患者姓名" min-width="100" show-overflow-tooltip>
<template #default="{ row }">{{ row.patientName || '-' }}</template>
</el-table-column>
<el-table-column prop="infusionPlanCount" label="输注方案数" min-width="100" align="center">
<template #default="{ row }">{{ row.infusionPlanCount ?? 0 }}</template>
</el-table-column>
<el-table-column prop="applicationStatus" label="状态" min-width="100" align="center">
<template #default="{ row }">
<el-tag :type="applicationStatusTagType(row.applicationStatus)" size="small">
{{ applicationStatusLabel(row.applicationStatus) }}
</el-tag>
</template>
</el-table-column>
<el-table-column prop="createTime" label="创建时间" min-width="160" align="center" />
<el-table-column label="操作" min-width="280" fixed="right" align="center" header-align="center">
<template #default="{ row }">
<el-button class="btn-op-item primary" @click="handleView(row)">查看</el-button>
<el-button
v-if="row.applicationStatus === 'dks'"
class="btn-op-item"
@click="handleEdit(row)"
>
编辑
</el-button>
<el-popconfirm
v-if="row.applicationStatus === 'dks'"
title="确定删除该申请单吗?"
confirm-button-text="确定"
cancel-button-text="取消"
@confirm="handleDelete(row)"
>
<template #reference>
<el-button class="btn-op-item op-warn">删除</el-button>
</template>
</el-popconfirm>
<el-button
v-if="row.applicationStatus === 'dks'"
class="btn-op-item primary"
type="primary"
@click="handleStart(row)"
>
开始
</el-button>
<el-button
v-if="row.applicationStatus === 'dks'"
class="btn-op-item op-warn"
type="danger"
@click="handleVoid(row)"
>
作废
</el-button>
<el-button
v-if="row.applicationStatus === 'jxz'"
class="btn-op-item primary"
type="primary"
@click="handleComplete(row)"
>
完成
</el-button>
<el-button
v-if="row.applicationStatus === 'jxz'"
class="btn-op-item op-warn"
type="danger"
@click="handleVoid(row)"
>
作废
</el-button>
</template>
</el-table-column>
</el-table>
<div class="pagination list-pager-bar">
<el-pagination
:current-page="pagination.page"
:page-size="pagination.pageSize"
:total="pagination.total"
:page-sizes="[10, 20, 50, 100]"
layout="total, sizes, prev, pager, next, jumper"
@update:current-page="val => (pagination.page = val)"
@update:page-size="val => (pagination.pageSize = val)"
@size-change="loadData"
@current-change="loadData"
/>
</div>
</div>
</section>
<!-- 新增申请单弹窗 -->
<el-dialog
v-model="dialogVisible"
title="新增中试服务申请单"
width="600px"
destroy-on-close
:close-on-click-modal="false"
@close="handleDialogClose"
>
<div class="dialog-form-layout">
<el-form
ref="formRef"
:model="formData"
:rules="formRules"
label-position="top"
class="dialog-form"
>
<div class="form-grid-2">
<el-form-item label="渠道" prop="channelId">
<el-select
v-model="formData.channelId"
placeholder="请选择渠道"
filterable
clearable
:loading="dialogChannelLoading"
@focus="onDialogChannelFocus"
@change="handleDialogChannelChange"
>
<el-option
v-for="ch in dialogChannelOptions"
:key="ch.id"
:label="ch.channelName || ch.name"
:value="ch.id"
/>
</el-select>
</el-form-item>
<el-form-item label="服务订单" prop="channelServiceOrderId">
<el-select
v-model="formData.channelServiceOrderId"
placeholder="请先选择渠道,再选择服务订单"
filterable
clearable
:disabled="!formData.channelId"
:loading="dialogServiceOrderLoading"
>
<el-option
v-for="so in dialogServiceOrderOptions"
:key="so.id"
:label="formatServiceOrderLabel(so)"
:value="so.id"
/>
</el-select>
</el-form-item>
<el-form-item label="备注" class="form-col-span-2">
<el-input
v-model="formData.remark"
type="textarea"
placeholder="请输入备注"
:rows="3"
/>
</el-form-item>
</div>
</el-form>
</div>
<template #footer>
<el-button class="btn-ghost" @click="dialogVisible = false">
<el-icon><Close /></el-icon>取消
</el-button>
<el-button class="btn-main" type="primary" :loading="submitLoading" @click="handleSubmit">
<el-icon><Check /></el-icon>确定
</el-button>
</template>
</el-dialog>
</div>
</template>
<script setup lang="ts">
import { ref, reactive, onMounted } from 'vue'
import { ElMessage, ElMessageBox, type FormInstance, type FormRules } from 'element-plus'
import {
Plus,
Search,
RefreshLeft,
Close,
Check,
} from '@element-plus/icons-vue'
import {
fetchPilotApplicationList,
createPilotApplication,
deletePilotApplication,
startPilotApplication,
completePilotApplication,
voidPilotApplication,
fetchChannelList,
fetchChannelServiceOrderList,
} from '@/api/admin'
import {
applicationStatusLabel,
applicationStatusTagType,
channelServiceOrderTypeLabel,
} from '@/utils/status-tag-registry'
defineOptions({ name: 'PilotApplicationManagement' })
// ── 工具函数 ──────────────────────────────────────────────────────────
const displayValue = (v: any): string => {
if (v == null || v === '' || v === undefined) return '-'
return String(v)
}
const formatServiceOrderLabel = (so: any) => {
const no = so.orderNo || so.id || ''
const typeLabel = channelServiceOrderTypeLabel(so.orderType)
return `${no}(${typeLabel})`
}
const unwrapApiList = (res: any): any[] => {
const d = res?.data ?? res
if (Array.isArray(d)) return d
return d?.list ?? d?.records ?? []
}
// ── 状态筛选 ──────────────────────────────────────────────────────────
const statusFilters = [
{ label: '全部', value: '' },
{ label: '待开始', value: 'dks' },
{ label: '进行中', value: 'jxz' },
{ label: '已完成', value: 'ywc' },
{ label: '已作废', value: 'yzf' },
]
const activeStatus = ref('')
const handleStatusFilter = (val: string) => {
activeStatus.value = val
handleSearch()
}
// ── 搜索 ──────────────────────────────────────────────────────────────
const searchForm = reactive({
applicationNo: '',
channelId: '',
channelServiceOrderId: '',
})
// ── 搜索区域渠道下拉 ──────────────────────────────────────────────────
const channelOptions = ref<any[]>([])
const channelLoading = ref(false)
const channelLoaded = ref(false)
const onChannelSelectFocus = () => {
if (!channelLoaded.value) {
loadChannelOptions()
}
}
const loadChannelOptions = async () => {
channelLoading.value = true
try {
const res: any = await fetchChannelList({ page: 1, pageSize: 200 })
channelOptions.value = unwrapApiList(res)
channelLoaded.value = true
} catch {
channelOptions.value = []
} finally {
channelLoading.value = false
}
}
// ── 搜索区域服务订单下拉(联动渠道) ──────────────────────────────────
const serviceOrderOptions = ref<any[]>([])
const serviceOrderLoading = ref(false)
const handleSearchChannelChange = () => {
searchForm.channelServiceOrderId = ''
serviceOrderOptions.value = []
if (searchForm.channelId) {
loadSearchServiceOrders(searchForm.channelId)
}
handleSearch()
}
const loadSearchServiceOrders = async (channelId: string) => {
serviceOrderLoading.value = true
try {
const res: any = await fetchChannelServiceOrderList({
channelId,
page: 1,
pageSize: 200,
})
serviceOrderOptions.value = unwrapApiList(res)
} catch {
serviceOrderOptions.value = []
} finally {
serviceOrderLoading.value = false
}
}
// ── 表格 ──────────────────────────────────────────────────────────────
const tableData = ref<any[]>([])
const loading = ref(false)
const pagination = reactive({ page: 1, pageSize: 10, total: 0 })
const loadData = async () => {
loading.value = true
try {
const params: Record<string, any> = {
page: pagination.page,
pageSize: pagination.pageSize,
}
if (searchForm.applicationNo) params.applicationNo = searchForm.applicationNo
if (searchForm.channelId) params.channelId = searchForm.channelId
if (searchForm.channelServiceOrderId) params.channelServiceOrderId = searchForm.channelServiceOrderId
if (activeStatus.value) params.applicationStatus = activeStatus.value
const res: any = await fetchPilotApplicationList(params)
const data = res?.data ?? res
tableData.value = data?.list ?? data?.records ?? []
pagination.total = data?.total ?? 0
} catch (e) {
console.error('加载申请单列表失败:', e)
} finally {
loading.value = false
}
}
const handleSearch = () => {
pagination.page = 1
loadData()
}
const handleReset = () => {
searchForm.applicationNo = ''
searchForm.channelId = ''
searchForm.channelServiceOrderId = ''
activeStatus.value = ''
serviceOrderOptions.value = []
pagination.page = 1
loadData()
}
// ── 查看详情 ──────────────────────────────────────────────────────────
const router = useRouter()
const handleView = (row: any) => {
router.push({ name: 'PilotApplicationDetail', query: { id: row.id } })
}
// ── 新增弹窗 ──────────────────────────────────────────────────────────
const dialogVisible = ref(false)
const submitLoading = ref(false)
const formRef = ref<FormInstance>()
const initFormData = () => ({
channelId: '',
channelServiceOrderId: '',
remark: '',
})
const formData = reactive(initFormData())
const formRules: FormRules = {
channelId: [{ required: true, message: '请选择渠道', trigger: 'change' }],
channelServiceOrderId: [{ required: true, message: '请选择服务订单', trigger: 'change' }],
}
// ── 弹窗渠道下拉 ──────────────────────────────────────────────────────
const dialogChannelOptions = ref<any[]>([])
const dialogChannelLoading = ref(false)
const dialogChannelLoaded = ref(false)
const onDialogChannelFocus = () => {
if (!dialogChannelLoaded.value) {
loadDialogChannelOptions()
}
}
const loadDialogChannelOptions = async () => {
dialogChannelLoading.value = true
try {
const res: any = await fetchChannelList({ page: 1, pageSize: 200 })
dialogChannelOptions.value = unwrapApiList(res)
dialogChannelLoaded.value = true
} catch {
dialogChannelOptions.value = []
} finally {
dialogChannelLoading.value = false
}
}
// ── 弹窗服务订单下拉(联动渠道) ──────────────────────────────────────
const dialogServiceOrderOptions = ref<any[]>([])
const dialogServiceOrderLoading = ref(false)
const handleDialogChannelChange = async (channelId: string) => {
formData.channelServiceOrderId = ''
dialogServiceOrderOptions.value = []
if (!channelId) return
dialogServiceOrderLoading.value = true
try {
const res: any = await fetchChannelServiceOrderList({
channelId,
page: 1,
pageSize: 200,
})
dialogServiceOrderOptions.value = unwrapApiList(res)
} catch {
dialogServiceOrderOptions.value = []
} finally {
dialogServiceOrderLoading.value = false
}
}
const handleCreate = () => {
Object.assign(formData, initFormData())
dialogChannelLoaded.value = false
dialogChannelOptions.value = []
dialogServiceOrderOptions.value = []
dialogVisible.value = true
void loadDialogChannelOptions()
}
const handleDialogClose = () => {
formRef.value?.resetFields()
}
const handleSubmit = async () => {
try {
await formRef.value?.validate()
} catch {
return
}
submitLoading.value = true
try {
const res: any = await createPilotApplication({
channelServiceOrderId: formData.channelServiceOrderId,
remark: formData.remark,
})
dialogVisible.value = false
ElMessage.success('创建成功')
// 跳转详情页
const data = res?.data ?? res
const newId = data?.id || data?.pilotApplicationId || data
if (newId) {
router.push({ name: 'PilotApplicationDetail', query: { id: newId } })
} else {
loadData()
}
} catch (e: any) {
ElMessage.error(e?.message || '创建失败')
} finally {
submitLoading.value = false
}
}
// ── 编辑 ──────────────────────────────────────────────────────────────
const handleEdit = (row: any) => {
// Phase 1 编辑仅修改备注,直接跳详情页
router.push({ name: 'PilotApplicationDetail', query: { id: row.id } })
}
// ── 删除 ──────────────────────────────────────────────────────────────
const handleDelete = async (row: any) => {
try {
await deletePilotApplication({ id: row.id })
ElMessage.success('删除成功')
loadData()
} catch (e: any) {
ElMessage.error(e?.message || '删除失败')
}
}
// ── 状态操作 ──────────────────────────────────────────────────────────
const handleStart = async (row: any) => {
try {
await ElMessageBox.confirm('确定开始该申请单吗?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'info',
})
await startPilotApplication({ id: row.id })
ElMessage.success('操作成功')
loadData()
} catch (e: any) {
if (e !== 'cancel') {
ElMessage.error(e?.message || '操作失败')
}
}
}
const handleComplete = async (row: any) => {
try {
await ElMessageBox.confirm('确定完成该申请单吗?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'info',
})
await completePilotApplication({ id: row.id })
ElMessage.success('操作成功')
loadData()
} catch (e: any) {
if (e !== 'cancel') {
ElMessage.error(e?.message || '操作失败')
}
}
}
const handleVoid = async (row: any) => {
try {
await ElMessageBox.confirm('确定作废该申请单吗?作废后不可恢复。', '提示', {
confirmButtonText: '确定作废',
cancelButtonText: '取消',
type: 'warning',
})
await voidPilotApplication({ id: row.id })
ElMessage.success('操作成功')
loadData()
} catch (e: any) {
if (e !== 'cancel') {
ElMessage.error(e?.message || '操作失败')
}
}
}
// ── 初始化 ────────────────────────────────────────────────────────────
onMounted(() => {
loadData()
})
</script>
<style scoped lang="scss">
.status-filter-group {
display: flex;
gap: 8px;
flex-wrap: wrap;
align-items: center;
}
</style>
@@ -24,8 +24,20 @@
<el-option label="已完成" value="ywc" />
</el-select>
</el-form-item>
<el-form-item label="开始时间">
<el-date-picker
v-model="startedTimeRange"
type="daterange"
range-separator="至"
start-placeholder="开始日期"
end-placeholder="结束日期"
value-format="YYYY-MM-DD"
style="width: 100%"
/>
</el-form-item>
</div>
<div class="filter-actions-row">
<span class="filter-hint">默认展示近 30 天内已开始的任务;清空日期可查看尚未开始的待配置任务。</span>
<div class="filter-actions-end">
<el-button class="btn-ghost" @click="handleReset"><el-icon><RefreshLeft /></el-icon>重置</el-button>
<el-button class="btn-main" type="primary" @click="handleSearch"><el-icon><Search /></el-icon>搜索</el-button>
@@ -325,7 +337,22 @@
// ---------------------------------------------------------------------------
// 列表视图
// ---------------------------------------------------------------------------
function formatLocalDate(d: Date): string {
const y = d.getFullYear()
const m = String(d.getMonth() + 1).padStart(2, '0')
const day = String(d.getDate()).padStart(2, '0')
return `${y}-${m}-${day}`
}
function getDefaultLast30DaysRange(): [string, string] {
const end = new Date()
const start = new Date()
start.setDate(start.getDate() - 30)
return [formatLocalDate(start), formatLocalDate(end)]
}
const searchForm = reactive({ keyword: '', taskStatus: '' })
const startedTimeRange = ref<[string, string] | null>(getDefaultLast30DaysRange())
const tableData = ref<Record<string, any>[]>([])
const loading = ref(false)
const pagination = reactive({ page: 1, pageSize: 10, total: 0 })
@@ -344,7 +371,9 @@
page: pagination.page,
pageSize: pagination.pageSize,
keyword: searchForm.keyword || undefined,
taskStatus: searchForm.taskStatus || undefined
taskStatus: searchForm.taskStatus || undefined,
startedTimeStart: startedTimeRange.value?.[0] || undefined,
startedTimeEnd: startedTimeRange.value?.[1] || undefined
})
tableData.value = res.list || []
pagination.total = res.total ?? 0
@@ -361,6 +390,7 @@
function handleReset() {
searchForm.keyword = ''
searchForm.taskStatus = ''
startedTimeRange.value = getDefaultLast30DaysRange()
pagination.page = 1
loadData()
}
@@ -400,7 +430,7 @@
// ---------------------------------------------------------------------------
// 输入检索条件时自动搜索(防抖 300ms)
watchDebounced(
searchForm,
[searchForm, startedTimeRange],
() => {
pagination.page = 1
loadData()
@@ -40,8 +40,20 @@
<el-option label="已完成" value="ywc" />
</el-select>
</el-form-item>
<el-form-item label="创建时间">
<el-date-picker
v-model="createTimeRange"
type="daterange"
range-separator="至"
start-placeholder="开始日期"
end-placeholder="结束日期"
value-format="YYYY-MM-DD"
style="width: 100%"
/>
</el-form-item>
</div>
<div class="filter-actions-row">
<span class="filter-hint">默认展示近 30 天内创建的工单。</span>
<div class="filter-actions-end">
<el-button class="btn-ghost" @click="handleReset"
><el-icon><RefreshLeft /></el-icon>重置</el-button
@@ -519,7 +531,22 @@
return map[source] || { label: source, type: 'info' }
}
function formatLocalDate(d: Date): string {
const y = d.getFullYear()
const m = String(d.getMonth() + 1).padStart(2, '0')
const day = String(d.getDate()).padStart(2, '0')
return `${y}-${m}-${day}`
}
function getDefaultLast30DaysRange(): [string, string] {
const end = new Date()
const start = new Date()
start.setDate(start.getDate() - 30)
return [formatLocalDate(start), formatLocalDate(end)]
}
const searchForm = reactive({ keyword: '', workOrderStatus: '' })
const createTimeRange = ref<[string, string] | null>(getDefaultLast30DaysRange())
const tableData = ref<any[]>([])
const workOrderListTableRef = ref<TableInstance>()
const loading = ref(false)
@@ -544,7 +571,9 @@
pageSize: pagination.pageSize,
keyword: searchForm.keyword || undefined,
workOrderStatus: searchForm.workOrderStatus || undefined,
workOrderType: activeTypeTab.value === 'all' ? undefined : activeTypeTab.value
workOrderType: activeTypeTab.value === 'all' ? undefined : activeTypeTab.value,
createTimeStart: createTimeRange.value?.[0] || undefined,
createTimeEnd: createTimeRange.value?.[1] || undefined
})
tableData.value = res.list || []
pagination.total = res.total ?? 0
@@ -560,6 +589,7 @@
function handleReset() {
searchForm.keyword = ''
searchForm.workOrderStatus = ''
createTimeRange.value = getDefaultLast30DaysRange()
pagination.page = 1
loadData()
}
@@ -782,7 +812,7 @@
}
// 输入检索条件时自动搜索(防抖 300ms)
watchDebounced(
searchForm,
[searchForm, createTimeRange],
() => {
pagination.page = 1
loadData()
@@ -35,8 +35,20 @@
<el-option label="已完成" value="ywc" />
</el-select>
</el-form-item>
<el-form-item label="创建时间">
<el-date-picker
v-model="createTimeRange"
type="daterange"
range-separator="至"
start-placeholder="开始日期"
end-placeholder="结束日期"
value-format="YYYY-MM-DD"
style="width: 100%"
/>
</el-form-item>
</div>
<div class="filter-actions-row">
<span class="filter-hint">默认展示近 30 天内创建的工单。</span>
<div class="filter-actions-end">
<el-button class="btn-ghost" @click="handleReset"><el-icon><RefreshLeft /></el-icon>重置</el-button>
<el-button class="btn-main" type="primary" @click="handleSearch"><el-icon><Search /></el-icon>搜索</el-button>
@@ -575,7 +587,22 @@
}
}
function formatLocalDate(d: Date): string {
const y = d.getFullYear()
const m = String(d.getMonth() + 1).padStart(2, '0')
const day = String(d.getDate()).padStart(2, '0')
return `${y}-${m}-${day}`
}
function getDefaultLast30DaysRange(): [string, string] {
const end = new Date()
const start = new Date()
start.setDate(start.getDate() - 30)
return [formatLocalDate(start), formatLocalDate(end)]
}
const searchForm = reactive({ keyword: '', workOrderStatus: '' })
const createTimeRange = ref<[string, string] | null>(getDefaultLast30DaysRange())
const tableData = ref<QcWorkOrder[]>([])
const loading = ref(false)
const pagination = reactive({ page: 1, pageSize: 10, total: 0 })
@@ -929,7 +956,9 @@
pageSize: pagination.pageSize,
keyword: searchForm.keyword || undefined,
workOrderStatus: searchForm.workOrderStatus || undefined,
workOrderType: activeTypeTab.value === 'all' ? undefined : activeTypeTab.value
workOrderType: activeTypeTab.value === 'all' ? undefined : activeTypeTab.value,
createTimeStart: createTimeRange.value?.[0] || undefined,
createTimeEnd: createTimeRange.value?.[1] || undefined
})
tableData.value = res.list || []
pagination.total = res.total ?? 0
@@ -945,6 +974,7 @@
function handleReset() {
searchForm.keyword = ''
searchForm.workOrderStatus = ''
createTimeRange.value = getDefaultLast30DaysRange()
pagination.page = 1
loadData()
}
@@ -1015,7 +1045,7 @@
}
// 输入检索条件时自动搜索(防抖 300ms)
watchDebounced(
searchForm,
[searchForm, createTimeRange],
() => {
pagination.page = 1
loadData()
@@ -46,13 +46,35 @@
<el-option label="科研捐赠" value="research_donation" />
</el-select>
</el-form-item>
<el-form-item v-if="activeTab === 'pending'" label="预计到达时间">
<el-date-picker
v-model="etaDateRange"
type="daterange"
range-separator="至"
start-placeholder="开始日期"
end-placeholder="结束日期"
value-format="YYYY-MM-DD"
style="width: 100%"
/>
</el-form-item>
<el-form-item v-else label="接收时间">
<el-date-picker
v-model="receptionTimeRange"
type="daterange"
range-separator="至"
start-placeholder="开始日期"
end-placeholder="结束日期"
value-format="YYYY-MM-DD"
style="width: 100%"
/>
</el-form-item>
</div>
<div class="filter-actions-row">
<span class="filter-hint">
{{
activeTab === 'pending'
? '勾选多个样本后可批量接收(同快递可一次登记,每项单独填写)。'
: '双击行可查看接收详情;也可点击「编辑」修改接收登记。'
? '勾选多个样本后可批量接收;预计到达时间默认近 30 天。'
: '双击行可查看接收详情;接收时间默认近 30 天。'
}}
</span>
<div class="filter-actions-end">
@@ -607,6 +629,23 @@
const activeTab = ref('pending')
const searchForm = reactive({ keyword: '', sourceType: '' })
function formatLocalDate(d: Date): string {
const y = d.getFullYear()
const m = String(d.getMonth() + 1).padStart(2, '0')
const day = String(d.getDate()).padStart(2, '0')
return `${y}-${m}-${day}`
}
function getDefaultLast30DaysRange(): [string, string] {
const end = new Date()
const start = new Date()
start.setDate(start.getDate() - 30)
return [formatLocalDate(start), formatLocalDate(end)]
}
const etaDateRange = ref<[string, string] | null>(getDefaultLast30DaysRange())
const receptionTimeRange = ref<[string, string] | null>(getDefaultLast30DaysRange())
const tableData = ref<Record<string, unknown>[]>([])
const loading = ref(false)
const pagination = reactive({ page: 1, pageSize: 10, total: 0 })
@@ -1027,16 +1066,24 @@
async function loadData() {
loading.value = true
try {
const params = {
const baseParams = {
page: pagination.page,
pageSize: pagination.pageSize,
keyword: searchForm.keyword || undefined,
sourceType: searchForm.sourceType || undefined,
sourceType: searchForm.sourceType || undefined
}
const res =
activeTab.value === 'pending'
? await fetchSampleReceptionPendingList(params)
: await fetchSampleReceptionReceivedList(params)
? await fetchSampleReceptionPendingList({
...baseParams,
etaTimeStart: etaDateRange.value?.[0] || undefined,
etaTimeEnd: etaDateRange.value?.[1] || undefined
})
: await fetchSampleReceptionReceivedList({
...baseParams,
receptionTimeStart: receptionTimeRange.value?.[0] || undefined,
receptionTimeEnd: receptionTimeRange.value?.[1] || undefined
})
tableData.value = res.list || []
pagination.total = res.total ?? 0
} finally {
@@ -1060,6 +1107,11 @@
function handleReset() {
searchForm.keyword = ''
searchForm.sourceType = ''
if (activeTab.value === 'pending') {
etaDateRange.value = getDefaultLast30DaysRange()
} else {
receptionTimeRange.value = getDefaultLast30DaysRange()
}
pagination.page = 1
loadData()
}
@@ -1196,7 +1248,7 @@
}
// 输入检索条件时自动搜索(防抖 300ms)
watchDebounced(
searchForm,
[searchForm, etaDateRange, receptionTimeRange],
() => {
pagination.page = 1
loadData()
@@ -1,10 +1,10 @@
<!-- 捐赠协议审核 -->
<!-- 捐赠协议管理 -->
<!-- eslint-disable vue/no-v-model-argument -->
<template>
<div class="page-container">
<header class="page-head">
<h1>捐赠协议审核</h1>
<p class="page-desc">审核与管理科研捐赠协议数据。</p>
<h1>捐赠协议管理</h1>
<p class="page-desc">管理科研捐赠协议数据,含审核与状态变更。</p>
</header>
<section class="panel">
@@ -32,9 +32,32 @@
<el-option label="转细胞存储" value="zckc" />
</el-select>
</el-form-item>
<el-form-item label="创建时间">
<el-date-picker
v-model="createTimeRange"
type="daterange"
range-separator="至"
start-placeholder="开始日期"
end-placeholder="结束日期"
value-format="YYYY-MM-DD"
style="width: 100%"
/>
</el-form-item>
<el-form-item label="样本采集时间">
<el-date-picker
v-model="sampleCollectTimeRange"
type="daterange"
range-separator="至"
start-placeholder="开始日期"
end-placeholder="结束日期"
value-format="YYYY-MM-DD"
clearable
style="width: 100%"
/>
</el-form-item>
</div>
<div class="filter-actions-row">
<span class="filter-hint">列表为概要信息,详情见弹窗。</span>
<span class="filter-hint">列表为概要信息,详情见弹窗;默认展示近 30 天内创建的协议单。</span>
<div class="filter-actions-end">
<el-button class="btn-ghost" @click="handleReset"
><el-icon><RefreshLeft /></el-icon>重置</el-button
@@ -343,11 +366,27 @@
defineOptions({ name: 'ResearchDonationAudit' })
function formatLocalDate(d: Date): string {
const y = d.getFullYear()
const m = String(d.getMonth() + 1).padStart(2, '0')
const day = String(d.getDate()).padStart(2, '0')
return `${y}-${m}-${day}`
}
function getDefaultCreateTimeRange(): [string, string] {
const end = new Date()
const start = new Date()
start.setDate(start.getDate() - 30)
return [formatLocalDate(start), formatLocalDate(end)]
}
/* ====== 列表 ====== */
const searchForm = reactive<{ keyword: string; donationStatus: string }>({
keyword: '',
donationStatus: ''
})
const createTimeRange = ref<[string, string] | null>(getDefaultCreateTimeRange())
const sampleCollectTimeRange = ref<[string, string] | null>(null)
const tableData = ref<ResearchDonationRow[]>([])
const selectedRows = ref<ResearchDonationRow[]>([])
const loading = ref(false)
@@ -364,7 +403,11 @@
page: pagination.page,
pageSize: pagination.pageSize,
keyword: searchForm.keyword || undefined,
donationStatus: searchForm.donationStatus || undefined
donationStatus: searchForm.donationStatus || undefined,
createTimeStart: createTimeRange.value?.[0] || undefined,
createTimeEnd: createTimeRange.value?.[1] || undefined,
sampleCollectTimeStart: sampleCollectTimeRange.value?.[0] || undefined,
sampleCollectTimeEnd: sampleCollectTimeRange.value?.[1] || undefined
})
tableData.value = res.list || []
pagination.total = res.total ?? 0
@@ -381,6 +424,8 @@
function handleReset() {
searchForm.keyword = ''
searchForm.donationStatus = ''
createTimeRange.value = getDefaultCreateTimeRange()
sampleCollectTimeRange.value = null
pagination.page = 1
loadData()
}
@@ -496,7 +541,7 @@
}
// 输入检索条件时自动搜索(防抖 300ms)
watchDebounced(
searchForm,
[searchForm, createTimeRange, sampleCollectTimeRange],
() => {
pagination.page = 1
loadData()
@@ -32,9 +32,32 @@
<el-option label="转细胞存储" value="zckc" />
</el-select>
</el-form-item>
<el-form-item label="创建时间">
<el-date-picker
v-model="createTimeRange"
type="daterange"
range-separator="至"
start-placeholder="开始日期"
end-placeholder="结束日期"
value-format="YYYY-MM-DD"
style="width: 100%"
/>
</el-form-item>
<el-form-item label="样本采集时间">
<el-date-picker
v-model="sampleCollectTimeRange"
type="daterange"
range-separator="至"
start-placeholder="开始日期"
end-placeholder="结束日期"
value-format="YYYY-MM-DD"
clearable
style="width: 100%"
/>
</el-form-item>
</div>
<div class="filter-actions-row">
<span class="filter-hint">列表为概要信息,详情见弹窗。</span>
<span class="filter-hint">列表为概要信息,详情见弹窗;默认展示近 30 天内创建的协议单。</span>
<div class="filter-actions-end">
<el-button class="btn-ghost" @click="handleReset"
><el-icon><RefreshLeft /></el-icon>重置</el-button
@@ -280,11 +303,27 @@
defineOptions({ name: 'ResearchDonationList' })
function formatLocalDate(d: Date): string {
const y = d.getFullYear()
const m = String(d.getMonth() + 1).padStart(2, '0')
const day = String(d.getDate()).padStart(2, '0')
return `${y}-${m}-${day}`
}
function getDefaultCreateTimeRange(): [string, string] {
const end = new Date()
const start = new Date()
start.setDate(start.getDate() - 30)
return [formatLocalDate(start), formatLocalDate(end)]
}
/* ====== 列表 ====== */
const searchForm = reactive<{ keyword: string; donationStatus: string }>({
keyword: '',
donationStatus: ''
})
const createTimeRange = ref<[string, string] | null>(getDefaultCreateTimeRange())
const sampleCollectTimeRange = ref<[string, string] | null>(null)
const tableData = ref<ResearchDonationRow[]>([])
const selectedRows = ref<ResearchDonationRow[]>([])
const loading = ref(false)
@@ -301,7 +340,11 @@
page: pagination.page,
pageSize: pagination.pageSize,
keyword: searchForm.keyword || undefined,
donationStatus: searchForm.donationStatus || undefined
donationStatus: searchForm.donationStatus || undefined,
createTimeStart: createTimeRange.value?.[0] || undefined,
createTimeEnd: createTimeRange.value?.[1] || undefined,
sampleCollectTimeStart: sampleCollectTimeRange.value?.[0] || undefined,
sampleCollectTimeEnd: sampleCollectTimeRange.value?.[1] || undefined
})
tableData.value = res.list || []
pagination.total = res.total ?? 0
@@ -318,6 +361,8 @@
function handleReset() {
searchForm.keyword = ''
searchForm.donationStatus = ''
createTimeRange.value = getDefaultCreateTimeRange()
sampleCollectTimeRange.value = null
pagination.page = 1
loadData()
}
@@ -387,7 +432,7 @@
}
// 输入检索条件时自动搜索(防抖 300ms)
watchDebounced(
searchForm,
[searchForm, createTimeRange, sampleCollectTimeRange],
() => {
pagination.page = 1
loadData()