fix: 协议子资源单事务保存,并补齐样本编码/OA/质检等近期能力
锁定缴费校验失败时整单回滚,避免样本半成功落库;前端禁止删除锁定缴费样本,改码走更正编码。同步落地样本更正、采集微信通知、OA提及未读、细胞产品套餐与相关迁移文档。 Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
1 parent
19bc66ba45
commit
5dad1bb0e3
142 files changed
+95584
-65717
No files matched your search
@@ -1675,6 +1675,33 @@ export function fetchDeleteCellProductSpec(id: string) {
|
||||
return request.del({ url: `/web/admin/cell-product-specs/${id}` })
|
||||
}
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
// 中试服务管理 — 细胞产品包装
|
||||
// ---------------------------------------------------------------------------
|
||||
|
||||
export function fetchCellProductPackageList(params?: {
|
||||
page?: number
|
||||
pageSize?: number
|
||||
keyword?: string
|
||||
}) {
|
||||
return request.get({
|
||||
url: '/web/admin/cell-product-packages',
|
||||
params
|
||||
})
|
||||
}
|
||||
|
||||
export function fetchCreateCellProductPackage(data: Record<string, any>) {
|
||||
return request.post({ url: '/web/admin/cell-product-packages', params: data })
|
||||
}
|
||||
|
||||
export function fetchUpdateCellProductPackage(id: string, data: Record<string, any>) {
|
||||
return request.put({ url: `/web/admin/cell-product-packages/${id}`, params: data })
|
||||
}
|
||||
|
||||
export function fetchDeleteCellProductPackage(id: string) {
|
||||
return request.del({ url: `/web/admin/cell-product-packages/${id}` })
|
||||
}
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
// 中试服务管理 — 细胞产品价格
|
||||
// ---------------------------------------------------------------------------
|
||||
|
||||
@@ -488,6 +488,17 @@ export function fetchOaCcUnreadCount() {
|
||||
return request.get<{ count: number }>({ url: `${BASE}/tasks/cc/unread-count` })
|
||||
}
|
||||
|
||||
export function fetchOaMentionUnreadCount() {
|
||||
return request.get<{ count: number }>({ url: `${BASE}/mentions/unread-count` })
|
||||
}
|
||||
|
||||
export function fetchMarkOaMentionRead(instanceId: string) {
|
||||
return request.post({
|
||||
url: `${BASE}/mentions/${instanceId}/read`,
|
||||
showSuccessMessage: false
|
||||
})
|
||||
}
|
||||
|
||||
export function fetchMarkOaCcTaskRead(taskId: string) {
|
||||
return request.post({
|
||||
url: `${BASE}/tasks/${taskId}/read`,
|
||||
|
||||
@@ -234,6 +234,8 @@ export function fetchQcWorkOrderList(params?: {
|
||||
pageSize?: number
|
||||
keyword?: string
|
||||
workOrderStatus?: string
|
||||
/** 协议/捐赠状态,逗号分隔;科研捐赠 Tab 使用;空串表示无匹配 */
|
||||
protocolStatus?: string
|
||||
workOrderType?: string
|
||||
bizType?: string
|
||||
receptionSource?: string
|
||||
|
||||
@@ -0,0 +1,63 @@
|
||||
import request from '@/utils/http'
|
||||
|
||||
export type SampleCodeCorrectionSource = 'cell_storage' | 'research_donation'
|
||||
|
||||
export interface SampleCodeCorrectionImpact {
|
||||
table: string
|
||||
label: string
|
||||
count: number
|
||||
}
|
||||
|
||||
export interface SampleCodeCorrectionPreview {
|
||||
ok: boolean
|
||||
blockers: string[]
|
||||
receptionSource: SampleCodeCorrectionSource
|
||||
oldSampleCode: string
|
||||
newSampleCode: string
|
||||
sampleId?: string | null
|
||||
impacts: SampleCodeCorrectionImpact[]
|
||||
totalAffectedRows: number
|
||||
hints?: {
|
||||
sameProductCodeAsOld?: number
|
||||
sameProductCodeAsNew?: number
|
||||
labStorageCodeUnchanged?: boolean
|
||||
cellProductCodeNotAutoUpdated?: boolean
|
||||
}
|
||||
}
|
||||
|
||||
export interface SampleCodeCorrectionApplyResult {
|
||||
ok: boolean
|
||||
logId: string
|
||||
receptionSource: SampleCodeCorrectionSource
|
||||
oldSampleCode: string
|
||||
newSampleCode: string
|
||||
impactCounts: Record<string, number>
|
||||
totalAffectedRows: number
|
||||
hints?: SampleCodeCorrectionPreview['hints']
|
||||
}
|
||||
|
||||
export function fetchPreviewSampleCodeCorrection(data: {
|
||||
receptionSource: SampleCodeCorrectionSource
|
||||
oldSampleCode: string
|
||||
newSampleCode: string
|
||||
newSampleCodeId?: string | null
|
||||
reason?: string
|
||||
}) {
|
||||
return request.post<SampleCodeCorrectionPreview>({
|
||||
url: '/web/admin/sample-code-corrections/preview',
|
||||
data
|
||||
})
|
||||
}
|
||||
|
||||
export function fetchApplySampleCodeCorrection(data: {
|
||||
receptionSource: SampleCodeCorrectionSource
|
||||
oldSampleCode: string
|
||||
newSampleCode: string
|
||||
newSampleCodeId?: string | null
|
||||
reason?: string
|
||||
}) {
|
||||
return request.post<SampleCodeCorrectionApplyResult>({
|
||||
url: '/web/admin/sample-code-corrections/apply',
|
||||
data
|
||||
})
|
||||
}
|
||||
Reference in new issue
Block a user