admin.ts 70 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080208120822083208420852086208720882089209020912092209320942095209620972098209921002101210221032104210521062107210821092110211121122113211421152116211721182119212021212122212321242125212621272128212921302131213221332134213521362137213821392140214121422143214421452146214721482149215021512152215321542155215621572158215921602161216221632164216521662167216821692170217121722173217421752176217721782179218021812182218321842185218621872188218921902191219221932194219521962197219821992200220122022203220422052206220722082209221022112212221322142215221622172218221922202221222222232224222522262227222822292230223122322233223422352236223722382239224022412242224322442245224622472248224922502251225222532254225522562257225822592260226122622263226422652266226722682269227022712272227322742275227622772278227922802281228222832284228522862287228822892290229122922293229422952296229722982299230023012302230323042305230623072308230923102311231223132314231523162317231823192320232123222323232423252326232723282329233023312332233323342335233623372338233923402341234223432344234523462347234823492350235123522353235423552356235723582359236023612362236323642365236623672368236923702371237223732374237523762377237823792380238123822383238423852386238723882389239023912392239323942395239623972398239924002401240224032404240524062407240824092410241124122413241424152416241724182419242024212422242324242425242624272428242924302431243224332434243524362437243824392440
  1. import request from '@/utils/http'
  2. import type { AppRouteRecord } from '@/types/router'
  3. import { MAX_ADMIN_LIST_PAGE_SIZE } from '@/utils/fetch-paged-list'
  4. // ---------------------------------------------------------------------------
  5. // 后端菜单 / 角色(与 router 后端模式、用户弹窗对齐)
  6. // ---------------------------------------------------------------------------
  7. /** 后端菜单模式:拉取动态路由 */
  8. export async function fetchGetMenuList() {
  9. const res = await request.get<AppRouteRecord[] | { menuList?: AppRouteRecord[] }>({
  10. url: '/web/menu/list'
  11. })
  12. if (Array.isArray(res)) return res
  13. return res?.menuList || []
  14. }
  15. /** 用户表单等:角色下拉 */
  16. export function fetchGetRoleList() {
  17. return request.get<Array<{ label: string; value: string }>>({
  18. url: '/web/admin/roles'
  19. })
  20. }
  21. /** 流程设计器:用户下拉选项(label=昵称,value=用户ID) */
  22. export function fetchUserOptions(params?: { roleName?: string }) {
  23. return request.get<Array<{ label: string; value: string }>>({
  24. url: '/web/admin/users/options',
  25. params
  26. })
  27. }
  28. /** 流程设计器:角色下拉选项(label=角色名,value=角色ID UUID) */
  29. export function fetchRoleOptions() {
  30. return request.get<Array<{ label: string; value: string }>>({
  31. url: '/web/admin/roles/options'
  32. })
  33. }
  34. // ---------------------------------------------------------------------------
  35. // 租户(系统管理)
  36. // ---------------------------------------------------------------------------
  37. export function fetchTenantList(params?: { page?: number; pageSize?: number; keyword?: string }) {
  38. return request.get<{
  39. list: Api.Tenant.TenantItem[]
  40. total: number
  41. page: number
  42. pageSize: number
  43. totalPages: number
  44. }>({
  45. url: '/web/admin/tenants',
  46. params
  47. })
  48. }
  49. export function fetchCreateTenant(data: {
  50. tenantNo: string
  51. tenantName: string
  52. contactName?: string
  53. contactPhone?: string
  54. orderNum?: number
  55. remark?: string
  56. }) {
  57. return request.post<Api.Tenant.TenantItem>({
  58. url: '/web/admin/tenants',
  59. data,
  60. showSuccessMessage: true
  61. })
  62. }
  63. export function fetchUpdateTenant(
  64. id: string,
  65. data: Partial<{
  66. tenantNo: string
  67. tenantName: string
  68. contactName: string
  69. contactPhone: string
  70. orderNum: number
  71. remark: string
  72. }>
  73. ) {
  74. return request.put<Api.Tenant.TenantItem>({
  75. url: `/web/admin/tenants/${id}`,
  76. data,
  77. showSuccessMessage: true
  78. })
  79. }
  80. export function fetchDeleteTenant(id: string) {
  81. return request.del({
  82. url: `/web/admin/tenants/${id}`,
  83. showSuccessMessage: true
  84. })
  85. }
  86. // ---------------------------------------------------------------------------
  87. // 用户管理
  88. // ---------------------------------------------------------------------------
  89. export function fetchUserList(params?: {
  90. page?: number
  91. pageSize?: number
  92. keyword?: string
  93. deptId?: string
  94. status?: string
  95. roleName?: string
  96. }) {
  97. return request.get<{
  98. list: Api.User.UserItem[]
  99. total: number
  100. page: number
  101. pageSize: number
  102. totalPages: number
  103. }>({
  104. url: '/web/admin/users',
  105. params
  106. })
  107. }
  108. export function fetchUserDetail(id: string) {
  109. return request.get<Api.User.UserItem>({
  110. url: `/web/admin/users/${id}`
  111. })
  112. }
  113. export function fetchCreateUser(data: {
  114. userNo: string
  115. nickName: string
  116. password: string
  117. deptId?: string
  118. supervisorUserId?: string
  119. email?: string
  120. phoneNo?: string
  121. hireDate?: string
  122. probationMonths?: number | null
  123. lastWorkDay?: string
  124. sex?: string
  125. avatar?: string
  126. status?: string
  127. orderNum?: number
  128. remark?: string
  129. roleIds?: string[]
  130. postIds?: string[]
  131. }) {
  132. return request.post({
  133. url: '/web/admin/users',
  134. data,
  135. showSuccessMessage: true
  136. })
  137. }
  138. export function fetchUpdateUser(
  139. id: string,
  140. data: Partial<{
  141. nickName: string
  142. deptId: string
  143. supervisorUserId: string
  144. email: string
  145. phoneNo: string
  146. hireDate: string | null
  147. probationMonths: number | null
  148. lastWorkDay: string | null
  149. sex: string
  150. avatar: string
  151. status: string
  152. orderNum: number
  153. remark: string
  154. roleIds: string[]
  155. postIds: string[]
  156. }>
  157. ) {
  158. return request.put({
  159. url: `/web/admin/users/${id}`,
  160. data,
  161. showSuccessMessage: true
  162. })
  163. }
  164. export function fetchDeleteUser(id: string) {
  165. return request.del({
  166. url: `/web/admin/users/${id}`,
  167. showSuccessMessage: true
  168. })
  169. }
  170. export function fetchResetPassword(id: string) {
  171. return request.post<{ tempPassword: string }>({
  172. url: `/web/admin/users/${id}/reset-password`,
  173. showSuccessMessage: false
  174. })
  175. }
  176. /** 上传用户头像,返回存储后的 URL,供写入 avatarUrl */
  177. export function fetchUploadUserAvatar(data: FormData) {
  178. return request.post<{ url: string }>({
  179. url: '/web/admin/users/upload-avatar',
  180. data
  181. })
  182. }
  183. // ---------------------------------------------------------------------------
  184. // 区域(仅列表分页供 fetchNotDeletedRegions 使用 + 启用列表)
  185. // ---------------------------------------------------------------------------
  186. function fetchRegionList(params?: {
  187. page?: number
  188. pageSize?: number
  189. keyword?: string
  190. isActive?: boolean
  191. }) {
  192. return request.get<{
  193. list: Api.Region.RegionItem[]
  194. total: number
  195. page: number
  196. pageSize: number
  197. totalPages: number
  198. }>({
  199. url: '/web/admin/regions',
  200. params
  201. })
  202. }
  203. export function fetchActiveRegions() {
  204. const now = Date.now()
  205. const anyFn = fetchActiveRegions as any
  206. const cache = anyFn.__cache as undefined | { ts: number; data: Api.Region.RegionItem[] }
  207. if (cache && now - cache.ts < 5 * 60 * 1000) return Promise.resolve(cache.data)
  208. return request
  209. .get<Api.Region.RegionItem[]>({
  210. url: '/web/admin/regions/active'
  211. })
  212. .then((data) => {
  213. anyFn.__cache = { ts: now, data: data || [] }
  214. return data
  215. })
  216. }
  217. /** 未删除的全量区域(含禁用),供各页区域 Tab */
  218. export async function fetchNotDeletedRegions() {
  219. const now = Date.now()
  220. const anyFn = fetchNotDeletedRegions as any
  221. const cache = anyFn.__cache as undefined | { ts: number; data: Api.Region.RegionItem[] }
  222. if (cache && now - cache.ts < 5 * 60 * 1000) return cache.data
  223. const pageSize = MAX_ADMIN_LIST_PAGE_SIZE
  224. const all: Api.Region.RegionItem[] = []
  225. let page = 1
  226. while (true) {
  227. const res: any = await fetchRegionList({ page, pageSize })
  228. const list: Api.Region.RegionItem[] = Array.isArray(res?.list) ? res.list : []
  229. all.push(...list)
  230. const total = Number(res?.total ?? 0)
  231. if (!total || all.length >= total || list.length < pageSize) break
  232. page++
  233. }
  234. anyFn.__cache = { ts: now, data: all }
  235. return all
  236. }
  237. // ---------------------------------------------------------------------------
  238. // 商品分类
  239. // ---------------------------------------------------------------------------
  240. export function fetchCategoryList(params?: {
  241. page?: number
  242. pageSize?: number
  243. keyword?: string
  244. isActive?: boolean
  245. }) {
  246. return request.get<{
  247. list: Api.Category.CategoryItem[]
  248. total: number
  249. page: number
  250. pageSize: number
  251. totalPages: number
  252. }>({
  253. url: '/web/admin/categories',
  254. params
  255. })
  256. }
  257. export function fetchCreateCategory(data: {
  258. name: string
  259. parentId?: string
  260. sortOrder?: number
  261. imageUrl?: string
  262. priceCoefficient?: number
  263. }) {
  264. return request.post({
  265. url: '/web/admin/categories',
  266. params: data
  267. })
  268. }
  269. export function fetchUpdateCategory(
  270. id: string,
  271. data: Partial<{
  272. name: string
  273. parentId?: string
  274. sortOrder?: number
  275. isActive?: boolean
  276. imageUrl?: string
  277. priceCoefficient?: number
  278. }>
  279. ) {
  280. return request.put({
  281. url: `/web/admin/categories/${id}`,
  282. params: data
  283. })
  284. }
  285. export function fetchDeleteCategory(id: string) {
  286. return request.del({
  287. url: `/web/admin/categories/${id}`
  288. })
  289. }
  290. export function fetchUploadCategoryImage(data: FormData) {
  291. return request.post({
  292. url: '/web/admin/categories/upload-image',
  293. data
  294. })
  295. }
  296. // ---------------------------------------------------------------------------
  297. // 商品单位
  298. // ---------------------------------------------------------------------------
  299. export function fetchUnitList(params?: {
  300. page?: number
  301. pageSize?: number
  302. keyword?: string
  303. isActive?: boolean
  304. }) {
  305. return request.get<{
  306. list: Api.Unit.UnitItem[]
  307. total: number
  308. page: number
  309. pageSize: number
  310. totalPages: number
  311. }>({
  312. url: '/web/admin/units',
  313. params
  314. })
  315. }
  316. export function fetchCreateUnit(data: { name: string; code: string }) {
  317. return request.post({
  318. url: '/web/admin/units',
  319. params: data
  320. })
  321. }
  322. export function fetchUpdateUnit(
  323. id: string,
  324. data: Partial<{
  325. name: string
  326. code: string
  327. isActive?: boolean
  328. }>
  329. ) {
  330. return request.put({
  331. url: `/web/admin/units/${id}`,
  332. params: data
  333. })
  334. }
  335. export function fetchDeleteUnit(id: string) {
  336. return request.del({
  337. url: `/web/admin/units/${id}`
  338. })
  339. }
  340. // ---------------------------------------------------------------------------
  341. // 商品
  342. // ---------------------------------------------------------------------------
  343. export function fetchProductList(params?: {
  344. page?: number
  345. pageSize?: number
  346. keyword?: string
  347. categoryId?: string
  348. isActive?: boolean
  349. }) {
  350. return request.get<{
  351. list: Api.Product.ProductItem[]
  352. total: number
  353. page: number
  354. pageSize: number
  355. totalPages: number
  356. }>({
  357. url: '/web/admin/products',
  358. params
  359. })
  360. }
  361. export function fetchProductDetail(id: string) {
  362. return request.get<Api.Product.ProductDetail>({
  363. url: `/web/admin/products/${id}`
  364. })
  365. }
  366. export function fetchProductRegionPrices(productId: string) {
  367. return request.get<{
  368. list: Array<{
  369. regionId: string
  370. regionName: string
  371. price: number | null
  372. unitId?: string | null
  373. unitName?: string | null
  374. }>
  375. }>({
  376. url: `/web/admin/products/${productId}/region-prices`
  377. })
  378. }
  379. export function fetchCreateProduct(data: {
  380. name: string
  381. skuCode?: string
  382. categoryId?: string
  383. unitId?: string
  384. measureValue?: number | null
  385. description?: string
  386. imageUrl?: string
  387. priceCoefficient?: number
  388. isActive?: boolean
  389. detailContent?: string
  390. }) {
  391. return request.post({
  392. url: '/web/admin/products',
  393. params: data
  394. })
  395. }
  396. export function fetchUpdateProduct(
  397. id: string,
  398. data: Partial<{
  399. name: string
  400. skuCode?: string
  401. categoryId?: string
  402. unitId?: string
  403. measureValue?: number | null
  404. description?: string
  405. imageUrl?: string
  406. priceCoefficient?: number
  407. isActive?: boolean
  408. detailContent?: string
  409. }>
  410. ) {
  411. return request.put({
  412. url: `/web/admin/products/${id}`,
  413. params: data
  414. })
  415. }
  416. export function fetchDeleteProduct(id: string) {
  417. return request.del({
  418. url: `/web/admin/products/${id}`
  419. })
  420. }
  421. // --- 轮播图 ---
  422. export function fetchProductBannerList(productId: string) {
  423. return request.get<{
  424. list: Api.Product.ProductBanner[]
  425. total: number
  426. }>({
  427. url: `/web/admin/product-banners/product/${productId}`
  428. })
  429. }
  430. export function fetchCreateProductBanners(
  431. productId: string,
  432. items: Api.Product.ProductBannerCreate[]
  433. ) {
  434. return request.post({
  435. url: `/web/admin/product-banners/product/${productId}`,
  436. params: items
  437. })
  438. }
  439. export function fetchUpdateProductBannerSort(
  440. productId: string,
  441. items: { id: string; sortOrder: number }[]
  442. ) {
  443. return request.put({
  444. url: `/web/admin/product-banners/product/${productId}/sort`,
  445. params: { items }
  446. })
  447. }
  448. export function fetchDeleteProductBanner(id: string) {
  449. return request.del({
  450. url: `/web/admin/product-banners/${id}`
  451. })
  452. }
  453. // --- 详情媒体 ---
  454. export function fetchProductDetailMediaList(productId: string) {
  455. return request.get<{
  456. list: Api.Product.ProductDetailMedia[]
  457. total: number
  458. }>({
  459. url: `/web/admin/product-detail-media/product/${productId}`
  460. })
  461. }
  462. export function fetchCreateProductDetailMedia(
  463. productId: string,
  464. items: Api.Product.ProductDetailMediaCreate[]
  465. ) {
  466. return request.post({
  467. url: `/web/admin/product-detail-media/product/${productId}`,
  468. params: items
  469. })
  470. }
  471. export function fetchUpdateProductDetailMediaSort(
  472. productId: string,
  473. items: { id: string; sortOrder: number }[]
  474. ) {
  475. return request.put({
  476. url: `/web/admin/product-detail-media/product/${productId}/sort`,
  477. params: { items }
  478. })
  479. }
  480. export function fetchDeleteProductDetailMedia(id: string) {
  481. return request.del({
  482. url: `/web/admin/product-detail-media/${id}`
  483. })
  484. }
  485. // --- 参数模板(简洁列表供分类/商品选择) ---
  486. export function fetchProductParameterSimple() {
  487. return request.get<{
  488. list: Api.Product.ProductParameterSimple[]
  489. total: number
  490. }>({
  491. url: '/web/admin/product-parameters/simple'
  492. })
  493. }
  494. // --- 分类关联参数 ---
  495. export function fetchCategoryParameters(categoryId: string) {
  496. return request.get<{
  497. list: Api.Product.CategoryParameter[]
  498. total: number
  499. }>({
  500. url: `/web/admin/categories/${categoryId}/parameters`
  501. })
  502. }
  503. export function fetchUpdateCategoryParameters(
  504. categoryId: string,
  505. items: Api.Product.CategoryParameterCreate[]
  506. ) {
  507. return request.put({
  508. url: `/web/admin/categories/${categoryId}/parameters`,
  509. params: { items }
  510. })
  511. }
  512. // --- 商品参数值 ---
  513. export function fetchProductParameterValues(productId: string) {
  514. return request.get<{
  515. list: Api.Product.ProductParameterValue[]
  516. total: number
  517. }>({
  518. url: `/web/admin/product-parameter-values/product/${productId}`
  519. })
  520. }
  521. export function fetchSaveProductParameterValues(
  522. productId: string,
  523. values: Api.Product.ProductParameterValueCreate[]
  524. ) {
  525. return request.post({
  526. url: `/web/admin/product-parameter-values/product/${productId}`,
  527. params: { productId, values }
  528. })
  529. }
  530. // ---------------------------------------------------------------------------
  531. // 字典类型
  532. // ---------------------------------------------------------------------------
  533. export function fetchDictTypeList(params?: { page?: number; pageSize?: number; keyword?: string }) {
  534. return request.get<{
  535. list: Api.Dict.DictTypeItem[]
  536. total: number
  537. page: number
  538. pageSize: number
  539. totalPages: number
  540. }>({
  541. url: '/web/admin/dict-types',
  542. params
  543. })
  544. }
  545. export function fetchCreateDictType(data: {
  546. dictName: string
  547. dictType: string
  548. orderNum?: number
  549. remark?: string
  550. }) {
  551. return request.post({ url: '/web/admin/dict-types', params: data })
  552. }
  553. export function fetchUpdateDictType(
  554. id: string,
  555. data: Partial<{
  556. dictName: string
  557. dictType: string
  558. orderNum: number
  559. remark: string
  560. }>
  561. ) {
  562. return request.put({ url: `/web/admin/dict-types/${id}`, params: data })
  563. }
  564. export function fetchDeleteDictType(id: string) {
  565. return request.del({ url: `/web/admin/dict-types/${id}` })
  566. }
  567. // ---------------------------------------------------------------------------
  568. // 字典数据
  569. // ---------------------------------------------------------------------------
  570. export function fetchDictDataList(params?: {
  571. page?: number
  572. pageSize?: number
  573. dictType?: string
  574. keyword?: string
  575. }) {
  576. return request.get<{
  577. list: Api.Dict.DictDataItem[]
  578. total: number
  579. page: number
  580. pageSize: number
  581. totalPages: number
  582. }>({
  583. url: '/web/admin/dict-data',
  584. params
  585. })
  586. }
  587. export function fetchCreateDictData(data: {
  588. dictLabel: string
  589. dictValue: string
  590. dictType: string
  591. orderNum?: number
  592. remark?: string
  593. }) {
  594. return request.post({ url: '/web/admin/dict-data', params: data })
  595. }
  596. export function fetchUpdateDictData(
  597. id: string,
  598. data: Partial<{
  599. dictLabel: string
  600. dictValue: string
  601. orderNum: number
  602. remark: string
  603. }>
  604. ) {
  605. return request.put({ url: `/web/admin/dict-data/${id}`, params: data })
  606. }
  607. export function fetchDeleteDictData(id: string) {
  608. return request.del({ url: `/web/admin/dict-data/${id}` })
  609. }
  610. export function fetchDictDataOptions(dictType: string) {
  611. return request.get<Api.Dict.DictDataOption[]>({
  612. url: '/web/admin/dict-data/options',
  613. params: { dictType }
  614. })
  615. }
  616. // ---------------------------------------------------------------------------
  617. // 组织管理
  618. // ---------------------------------------------------------------------------
  619. export function fetchDeptTree(params?: { keyword?: string }) {
  620. return request.get<Api.Dept.DeptItem[]>({
  621. url: '/web/admin/depts',
  622. params
  623. })
  624. }
  625. export function fetchCreateDept(data: {
  626. parentId?: string
  627. deptName: string
  628. deptCategoryCode?: string
  629. status?: string
  630. leader?: string
  631. leaderPhone?: string
  632. leaderUserId?: string
  633. orderNum?: number
  634. remark?: string
  635. }) {
  636. return request.post({ url: '/web/admin/depts', params: data })
  637. }
  638. export function fetchUpdateDept(
  639. id: string,
  640. data: Partial<{
  641. deptName: string
  642. deptCategoryCode: string
  643. status: string
  644. leader: string
  645. leaderPhone: string
  646. leaderUserId: string
  647. orderNum: number
  648. remark: string
  649. }>
  650. ) {
  651. return request.put({ url: `/web/admin/depts/${id}`, params: data })
  652. }
  653. export function fetchDeleteDept(id: string) {
  654. return request.del({ url: `/web/admin/depts/${id}` })
  655. }
  656. // ---------------------------------------------------------------------------
  657. // 站点管理
  658. // ---------------------------------------------------------------------------
  659. export function fetchSiteList(params?: { page?: number; pageSize?: number; keyword?: string }) {
  660. return request.get<{
  661. list: Api.Site.SiteItem[]
  662. total: number
  663. page: number
  664. pageSize: number
  665. totalPages: number
  666. }>({ url: '/web/admin/sites', params })
  667. }
  668. export function fetchCreateSite(data: {
  669. siteName: string
  670. siteCode: string
  671. siteType?: string
  672. status?: string
  673. address?: string
  674. contactName?: string
  675. contactPhone?: string
  676. businessScope?: string
  677. siteImage?: string
  678. orderNum?: number
  679. remark?: string
  680. }) {
  681. return request.post({ url: '/web/admin/sites', params: data })
  682. }
  683. export function fetchUpdateSite(
  684. id: string,
  685. data: Partial<{
  686. siteName: string
  687. siteCode: string
  688. siteType: string
  689. status: string
  690. address: string
  691. contactName: string
  692. contactPhone: string
  693. businessScope: string
  694. siteImage: string
  695. orderNum: number
  696. remark: string
  697. }>
  698. ) {
  699. return request.put({ url: `/web/admin/sites/${id}`, params: data })
  700. }
  701. export function fetchDeleteSite(id: string) {
  702. return request.del({ url: `/web/admin/sites/${id}` })
  703. }
  704. // ---------------------------------------------------------------------------
  705. // 职位管理
  706. // ---------------------------------------------------------------------------
  707. export function fetchPostList(params?: { page?: number; pageSize?: number; keyword?: string }) {
  708. return request.get<{
  709. list: Api.Post.PostItem[]
  710. total: number
  711. page: number
  712. pageSize: number
  713. totalPages: number
  714. }>({ url: '/web/admin/posts', params })
  715. }
  716. export function fetchCreatePost(data: {
  717. postName: string
  718. postCode: string
  719. status?: string
  720. orderNum?: number
  721. remark?: string
  722. }) {
  723. return request.post({ url: '/web/admin/posts', params: data })
  724. }
  725. export function fetchUpdatePost(
  726. id: string,
  727. data: Partial<{
  728. postName: string
  729. postCode: string
  730. status: string
  731. orderNum: number
  732. remark: string
  733. }>
  734. ) {
  735. return request.put({ url: `/web/admin/posts/${id}`, params: data })
  736. }
  737. export function fetchDeletePost(id: string) {
  738. return request.del({ url: `/web/admin/posts/${id}` })
  739. }
  740. export function fetchPostBoundUserIds(postId: string) {
  741. return request.get<{ userIds: string[] }>({ url: `/web/admin/posts/${postId}/users` })
  742. }
  743. export function fetchUpdatePostBoundUsers(postId: string, userIds: string[]) {
  744. return request.put({
  745. url: `/web/admin/posts/${postId}/users`,
  746. params: { userIds },
  747. showSuccessMessage: true
  748. })
  749. }
  750. export function fetchPostBoundRoleIds(postId: string) {
  751. return request.get<{ roleIds: string[] }>({ url: `/web/admin/posts/${postId}/roles` })
  752. }
  753. export function fetchUpdatePostBoundRoles(postId: string, roleIds: string[]) {
  754. return request.put({
  755. url: `/web/admin/posts/${postId}/roles`,
  756. params: { roleIds },
  757. showSuccessMessage: true
  758. })
  759. }
  760. // ---------------------------------------------------------------------------
  761. // 物品单位管理
  762. // ---------------------------------------------------------------------------
  763. export function fetchItemUnitList(params?: { page?: number; pageSize?: number; keyword?: string }) {
  764. return request.get<{
  765. list: Api.ItemUnit.ItemUnitItem[]
  766. total: number
  767. page: number
  768. pageSize: number
  769. totalPages: number
  770. }>({ url: '/web/admin/item-units', params })
  771. }
  772. export function fetchCreateItemUnit(data: {
  773. unitCode: string
  774. unitName: string
  775. orderNum?: number
  776. remark?: string
  777. }) {
  778. return request.post({ url: '/web/admin/item-units', params: data })
  779. }
  780. export function fetchUpdateItemUnit(
  781. id: string,
  782. data: Partial<{ unitCode: string; unitName: string; orderNum: number; remark: string }>
  783. ) {
  784. return request.put({ url: `/web/admin/item-units/${id}`, params: data })
  785. }
  786. export function fetchDeleteItemUnit(id: string) {
  787. return request.del({ url: `/web/admin/item-units/${id}` })
  788. }
  789. // ---------------------------------------------------------------------------
  790. // 基础信息管理
  791. // ---------------------------------------------------------------------------
  792. type PageResult<T> = {
  793. list: T[]
  794. total: number
  795. page: number
  796. pageSize: number
  797. totalPages: number
  798. }
  799. export function fetchCustomerList(params?: {
  800. page?: number
  801. pageSize?: number
  802. keyword?: string
  803. createTimeStart?: string
  804. createTimeEnd?: string
  805. }) {
  806. return request.get<PageResult<Api.BizCustomer.CustomerItem>>({
  807. url: '/web/admin/customers',
  808. params
  809. })
  810. }
  811. export function fetchCreateCustomer(data: {
  812. customerName: string
  813. sex?: string
  814. idCardNo?: string
  815. age?: number | null
  816. phoneNo?: string
  817. customerTags?: string
  818. orderNum?: number
  819. remark?: string
  820. }) {
  821. return request.post({ url: '/web/admin/customers', params: data })
  822. }
  823. export function fetchUpdateCustomer(
  824. id: string,
  825. data: Partial<{
  826. customerName: string
  827. sex: string
  828. idCardNo: string
  829. age: number | null
  830. phoneNo: string
  831. customerTags: string
  832. orderNum: number
  833. remark: string
  834. }>
  835. ) {
  836. return request.put({ url: `/web/admin/customers/${id}`, params: data })
  837. }
  838. export function fetchDeleteCustomer(id: string) {
  839. return request.del({ url: `/web/admin/customers/${id}` })
  840. }
  841. export function fetchCustomerRelations(id: string) {
  842. return request.get<Api.BizCustomer.CustomerRelations>({
  843. url: `/web/admin/customers/${id}/relations`
  844. })
  845. }
  846. export function fetchCellSampleTypeList(params?: {
  847. page?: number
  848. pageSize?: number
  849. keyword?: string
  850. }) {
  851. return request.get<PageResult<Api.BizCellSampleType.CellSampleTypeItem>>({
  852. url: '/web/admin/cell-sample-types',
  853. params
  854. })
  855. }
  856. export function fetchCreateCellSampleType(data: {
  857. typeCode: string
  858. typeName: string
  859. typeLogo?: string
  860. storageYears?: number | null
  861. storagePrice?: number | null
  862. sampleCodeFilter?: string
  863. orderNum?: number
  864. remark?: string
  865. }) {
  866. return request.post({ url: '/web/admin/cell-sample-types', params: data })
  867. }
  868. export function fetchUpdateCellSampleType(
  869. id: string,
  870. data: Partial<{
  871. typeCode: string
  872. typeName: string
  873. typeLogo: string
  874. storageYears: number | null
  875. storagePrice: number | null
  876. sampleCodeFilter: string
  877. orderNum: number
  878. remark: string
  879. }>
  880. ) {
  881. return request.put({ url: `/web/admin/cell-sample-types/${id}`, params: data })
  882. }
  883. export function fetchDeleteCellSampleType(id: string) {
  884. return request.del({ url: `/web/admin/cell-sample-types/${id}` })
  885. }
  886. export function fetchCollectionRegionList(params?: {
  887. page?: number
  888. pageSize?: number
  889. keyword?: string
  890. }) {
  891. return request.get<PageResult<Api.BizCollectionRegion.RegionItem>>({
  892. url: '/web/admin/collection-regions',
  893. params
  894. })
  895. }
  896. export function fetchCreateCollectionRegion(data: {
  897. regionName: string
  898. orderNum?: number
  899. remark?: string
  900. }) {
  901. return request.post({ url: '/web/admin/collection-regions', params: data })
  902. }
  903. export function fetchUpdateCollectionRegion(
  904. id: string,
  905. data: Partial<{ regionName: string; orderNum: number; remark: string }>
  906. ) {
  907. return request.put({ url: `/web/admin/collection-regions/${id}`, params: data })
  908. }
  909. export function fetchDeleteCollectionRegion(id: string) {
  910. return request.del({ url: `/web/admin/collection-regions/${id}` })
  911. }
  912. export function fetchHospitalList(
  913. regionId: string,
  914. params?: { page?: number; pageSize?: number; keyword?: string }
  915. ) {
  916. return request.get<PageResult<Api.BizCollectionHospital.HospitalItem>>({
  917. url: `/web/admin/collection-regions/${regionId}/hospitals`,
  918. params
  919. })
  920. }
  921. export function fetchSearchCollectionHospitals(params: { keyword: string; limit?: number }) {
  922. return request.get<{ list: Api.BizCollectionHospital.HospitalItem[] }>({
  923. url: '/web/admin/collection-hospitals/search',
  924. params
  925. })
  926. }
  927. export function fetchCreateHospital(
  928. regionId: string,
  929. data: { hospitalName: string; orderNum?: number; remark?: string }
  930. ) {
  931. return request.post({ url: `/web/admin/collection-regions/${regionId}/hospitals`, params: data })
  932. }
  933. export function fetchUpdateHospital(
  934. regionId: string,
  935. hospitalId: string,
  936. data: Partial<{ hospitalName: string; orderNum: number; remark: string }>
  937. ) {
  938. return request.put({
  939. url: `/web/admin/collection-regions/${regionId}/hospitals/${hospitalId}`,
  940. params: data
  941. })
  942. }
  943. export function fetchDeleteHospital(regionId: string, hospitalId: string) {
  944. return request.del({ url: `/web/admin/collection-regions/${regionId}/hospitals/${hospitalId}` })
  945. }
  946. export function fetchRegionStaffList(
  947. regionId: string,
  948. params?: { page?: number; pageSize?: number }
  949. ) {
  950. return request.get<PageResult<Api.BizCollectionRegionStaff.StaffItem>>({
  951. url: `/web/admin/collection-regions/${regionId}/staff`,
  952. params
  953. })
  954. }
  955. export function fetchCreateRegionStaff(
  956. regionId: string,
  957. data: { userId: string; isLeader?: boolean; orderNum?: number; remark?: string }
  958. ) {
  959. return request.post({ url: `/web/admin/collection-regions/${regionId}/staff`, params: data })
  960. }
  961. export function fetchUpdateRegionStaff(
  962. regionId: string,
  963. staffId: string,
  964. data: Partial<{ isLeader: boolean; orderNum: number; remark: string }>
  965. ) {
  966. return request.put({
  967. url: `/web/admin/collection-regions/${regionId}/staff/${staffId}`,
  968. params: data
  969. })
  970. }
  971. export function fetchDeleteRegionStaff(regionId: string, staffId: string) {
  972. return request.del({ url: `/web/admin/collection-regions/${regionId}/staff/${staffId}` })
  973. }
  974. export function fetchCollectionProtocolNoList(params?: {
  975. page?: number
  976. pageSize?: number
  977. keyword?: string
  978. issuedUserId?: string
  979. }) {
  980. return request.get<PageResult<Api.BizCollectionProtocolNo.ProtocolNoItem>>({
  981. url: '/web/admin/collection-protocol-nos',
  982. params
  983. })
  984. }
  985. export function fetchCreateCollectionProtocolNo(data: {
  986. protocolNo: string
  987. issued?: number
  988. orderNum?: number
  989. remark?: string
  990. issuedUserId?: string | null
  991. issuedUserName?: string | null
  992. issuedTime?: string | null
  993. }) {
  994. return request.post({ url: '/web/admin/collection-protocol-nos', params: data })
  995. }
  996. export function fetchUpdateCollectionProtocolNo(
  997. id: string,
  998. data: Partial<{
  999. protocolNo: string
  1000. issued: number
  1001. orderNum: number
  1002. remark: string
  1003. issuedUserId: string | null
  1004. issuedUserName: string | null
  1005. issuedTime: string | null
  1006. }>
  1007. ) {
  1008. return request.put({ url: `/web/admin/collection-protocol-nos/${id}`, params: data })
  1009. }
  1010. export function fetchDeleteCollectionProtocolNo(id: string) {
  1011. return request.del({ url: `/web/admin/collection-protocol-nos/${id}` })
  1012. }
  1013. export function fetchBatchGenerateProtocolNos(data: {
  1014. prefix: string
  1015. middle: string
  1016. seqStart: number
  1017. seqEnd: number
  1018. digitCount?: number
  1019. }) {
  1020. return request.post({
  1021. url: '/web/admin/collection-protocol-nos/batch-generate',
  1022. params: data,
  1023. showSuccessMessage: true,
  1024. timeout: 120_000
  1025. })
  1026. }
  1027. export function fetchBatchIssueProtocolNos(data: {
  1028. ids: string[]
  1029. issuedUserId: string
  1030. issuedUserName?: string
  1031. }) {
  1032. return request.post({
  1033. url: '/web/admin/collection-protocol-nos/batch-issue',
  1034. params: data,
  1035. showSuccessMessage: true,
  1036. timeout: 120_000
  1037. })
  1038. }
  1039. export function fetchBatchRevokeProtocolNos(ids: string[]) {
  1040. return request.post({
  1041. url: '/web/admin/collection-protocol-nos/batch-revoke',
  1042. params: { ids },
  1043. showSuccessMessage: true,
  1044. timeout: 120_000
  1045. })
  1046. }
  1047. export function fetchSampleCodeList(params?: {
  1048. page?: number
  1049. pageSize?: number
  1050. keyword?: string
  1051. sampleCodeType?: string
  1052. codeFilter?: string
  1053. issuedUserId?: string
  1054. }) {
  1055. return request.get<PageResult<Api.BizSampleCode.SampleCodeItem>>({
  1056. url: '/web/admin/sample-codes',
  1057. params
  1058. })
  1059. }
  1060. export function fetchCreateSampleCode(data: {
  1061. sampleCode: string
  1062. sampleCodeType?: string
  1063. issued?: number
  1064. issuedUserId?: string | null
  1065. issuedUserName?: string | null
  1066. issuedTime?: string
  1067. orderNum?: number
  1068. remark?: string
  1069. }) {
  1070. return request.post({ url: '/web/admin/sample-codes', params: data })
  1071. }
  1072. export function fetchUpdateSampleCode(
  1073. id: string,
  1074. data: Partial<{
  1075. sampleCode: string
  1076. issued: number
  1077. issuedUserId: string | null
  1078. issuedUserName: string | null
  1079. issuedTime: string
  1080. orderNum: number
  1081. remark: string
  1082. }>
  1083. ) {
  1084. return request.put({ url: `/web/admin/sample-codes/${id}`, params: data })
  1085. }
  1086. export function fetchDeleteSampleCode(id: string) {
  1087. return request.del({ url: `/web/admin/sample-codes/${id}` })
  1088. }
  1089. export function fetchBatchGenerateSampleCodes(data: {
  1090. sampleCodeType: string
  1091. middle: string
  1092. seqStart: number
  1093. seqEnd: number
  1094. digitCount?: number
  1095. }) {
  1096. return request.post({
  1097. url: '/web/admin/sample-codes/batch-generate',
  1098. params: data,
  1099. showSuccessMessage: true,
  1100. timeout: 120_000
  1101. })
  1102. }
  1103. export function fetchBatchIssueSampleCodes(data: {
  1104. ids: string[]
  1105. issuedUserId: string
  1106. issuedUserName?: string
  1107. }) {
  1108. return request.post({
  1109. url: '/web/admin/sample-codes/batch-issue',
  1110. params: data,
  1111. showSuccessMessage: true,
  1112. timeout: 120_000
  1113. })
  1114. }
  1115. export function fetchBatchRevokeSampleCodes(ids: string[]) {
  1116. return request.post({
  1117. url: '/web/admin/sample-codes/batch-revoke',
  1118. params: { ids },
  1119. showSuccessMessage: true,
  1120. timeout: 120_000
  1121. })
  1122. }
  1123. // ---------------------------------------------------------------------------
  1124. // 快递公司管理
  1125. // ---------------------------------------------------------------------------
  1126. export function fetchExpressCompanyList(params?: {
  1127. page?: number
  1128. pageSize?: number
  1129. keyword?: string
  1130. }) {
  1131. return request.get<{
  1132. list: Api.ExpressCompany.ExpressCompanyItem[]
  1133. total: number
  1134. page: number
  1135. pageSize: number
  1136. totalPages: number
  1137. }>({ url: '/web/admin/express-companies', params })
  1138. }
  1139. export function fetchCreateExpressCompany(data: {
  1140. expressCode: string
  1141. expressName: string
  1142. expressLogo?: string
  1143. orderNum?: number
  1144. remark?: string
  1145. }) {
  1146. return request.post({ url: '/web/admin/express-companies', params: data })
  1147. }
  1148. export function fetchUpdateExpressCompany(
  1149. id: string,
  1150. data: Partial<{
  1151. expressCode: string
  1152. expressName: string
  1153. expressLogo: string
  1154. orderNum: number
  1155. remark: string
  1156. }>
  1157. ) {
  1158. return request.put({ url: `/web/admin/express-companies/${id}`, params: data })
  1159. }
  1160. export function fetchDeleteExpressCompany(id: string) {
  1161. return request.del({ url: `/web/admin/express-companies/${id}` })
  1162. }
  1163. // ---------------------------------------------------------------------------
  1164. // 菜单管理
  1165. // ---------------------------------------------------------------------------
  1166. export function fetchMenuTree(params?: { keyword?: string }) {
  1167. return request.get<Api.Menu.MenuItem[]>({
  1168. url: '/web/admin/menus',
  1169. params
  1170. })
  1171. }
  1172. export function fetchCreateMenu(data: {
  1173. menuName: string
  1174. parentId?: string
  1175. menuType?: string
  1176. path?: string
  1177. component?: string
  1178. perms?: string
  1179. isFrame?: number
  1180. visible?: string
  1181. status?: string
  1182. orderNum?: number
  1183. remark?: string
  1184. }) {
  1185. return request.post({ url: '/web/admin/menus', params: data })
  1186. }
  1187. export function fetchUpdateMenu(
  1188. id: string,
  1189. data: Partial<{
  1190. menuName: string
  1191. parentId: string
  1192. menuType: string
  1193. path: string
  1194. component: string
  1195. perms: string
  1196. isFrame: number
  1197. visible: string
  1198. status: string
  1199. orderNum: number
  1200. remark: string
  1201. }>
  1202. ) {
  1203. return request.put({ url: `/web/admin/menus/${id}`, params: data })
  1204. }
  1205. export function fetchDeleteMenu(id: string) {
  1206. return request.del({ url: `/web/admin/menus/${id}` })
  1207. }
  1208. // ---------------------------------------------------------------------------
  1209. // 角色管理
  1210. // ---------------------------------------------------------------------------
  1211. export function fetchRoleList(params?: { page?: number; pageSize?: number; keyword?: string }) {
  1212. return request.get<{
  1213. list: Api.Role.RoleItem[]
  1214. total: number
  1215. page: number
  1216. pageSize: number
  1217. totalPages: number
  1218. }>({ url: '/web/admin/role-management', params })
  1219. }
  1220. export function fetchCreateRole(data: {
  1221. roleName: string
  1222. dataScope?: string
  1223. status?: string
  1224. orderNum?: number
  1225. remark?: string
  1226. }) {
  1227. return request.post({ url: '/web/admin/role-management', params: data, showSuccessMessage: true })
  1228. }
  1229. export function fetchUpdateRole(
  1230. id: string,
  1231. data: Partial<{
  1232. roleName: string
  1233. dataScope: string
  1234. status: string
  1235. orderNum: number
  1236. remark: string
  1237. }>
  1238. ) {
  1239. return request.put({
  1240. url: `/web/admin/role-management/${id}`,
  1241. params: data,
  1242. showSuccessMessage: true
  1243. })
  1244. }
  1245. export function fetchDeleteRole(id: string) {
  1246. return request.del({ url: `/web/admin/role-management/${id}`, showSuccessMessage: true })
  1247. }
  1248. export function fetchRoleMenuIds(roleId: string) {
  1249. return request.get<{ menuIds: string[] }>({ url: `/web/admin/role-management/${roleId}/menus` })
  1250. }
  1251. export function fetchUpdateRoleMenus(roleId: string, menuIds: string[]) {
  1252. return request.put({
  1253. url: `/web/admin/role-management/${roleId}/menus`,
  1254. params: { menuIds },
  1255. showSuccessMessage: true
  1256. })
  1257. }
  1258. export function fetchRoleDataScope(roleId: string) {
  1259. return request.get<{
  1260. dataScope: string
  1261. scopeDetails: Array<{ scopeType: string; scopeValue: string }>
  1262. }>({ url: `/web/admin/role-management/${roleId}/data-scope` })
  1263. }
  1264. export function fetchUpdateRoleDataScope(
  1265. roleId: string,
  1266. data: { dataScope: string; scopeDetails?: Array<{ scopeType: string; scopeValue: string }> }
  1267. ) {
  1268. return request.put({
  1269. url: `/web/admin/role-management/${roleId}/data-scope`,
  1270. params: data,
  1271. showSuccessMessage: true
  1272. })
  1273. }
  1274. // ---------------------------------------------------------------------------
  1275. // 洁净室管理
  1276. // ---------------------------------------------------------------------------
  1277. export function fetchCleanRoomList(params?: {
  1278. page?: number
  1279. pageSize?: number
  1280. keyword?: string
  1281. }) {
  1282. return request.get({ url: '/web/admin/clean-rooms', params })
  1283. }
  1284. export function fetchCreateCleanRoom(data: Record<string, any>) {
  1285. return request.post({ url: '/web/admin/clean-rooms', params: data })
  1286. }
  1287. export function fetchUpdateCleanRoom(id: string, data: Record<string, any>) {
  1288. return request.put({ url: `/web/admin/clean-rooms/${id}`, params: data })
  1289. }
  1290. export function fetchDeleteCleanRoom(id: string) {
  1291. return request.del({ url: `/web/admin/clean-rooms/${id}` })
  1292. }
  1293. export function fetchAccessLogList(params?: {
  1294. page?: number
  1295. pageSize?: number
  1296. cleanRoomId?: string
  1297. keyword?: string
  1298. }) {
  1299. return request.get({ url: '/web/admin/clean-room-access-logs', params })
  1300. }
  1301. export function fetchCreateAccessLog(data: Record<string, any>) {
  1302. return request.post({ url: '/web/admin/clean-room-access-logs', params: data })
  1303. }
  1304. export function fetchUpdateAccessLog(id: string, data: Record<string, any>) {
  1305. return request.put({ url: `/web/admin/clean-room-access-logs/${id}`, params: data })
  1306. }
  1307. export function fetchDeleteAccessLog(id: string) {
  1308. return request.del({ url: `/web/admin/clean-room-access-logs/${id}` })
  1309. }
  1310. export function fetchUvDisinfectLogList(params?: {
  1311. page?: number
  1312. pageSize?: number
  1313. cleanRoomId?: string
  1314. keyword?: string
  1315. }) {
  1316. return request.get({ url: '/web/admin/clean-room-uv-disinfect-logs', params })
  1317. }
  1318. export function fetchCreateUvDisinfectLog(data: Record<string, any>) {
  1319. return request.post({ url: '/web/admin/clean-room-uv-disinfect-logs', params: data })
  1320. }
  1321. export function fetchUpdateUvDisinfectLog(id: string, data: Record<string, any>) {
  1322. return request.put({ url: `/web/admin/clean-room-uv-disinfect-logs/${id}`, params: data })
  1323. }
  1324. export function fetchDeleteUvDisinfectLog(id: string) {
  1325. return request.del({ url: `/web/admin/clean-room-uv-disinfect-logs/${id}` })
  1326. }
  1327. // ---------------------------------------------------------------------------
  1328. // 库位管理
  1329. // ---------------------------------------------------------------------------
  1330. export function fetchStorageFacilityList(params?: { keyword?: string }) {
  1331. return request.get({ url: '/web/admin/storage-facilities', params })
  1332. }
  1333. export function fetchCreateStorageFacility(data: Record<string, any>) {
  1334. return request.post({ url: '/web/admin/storage-facilities', params: data })
  1335. }
  1336. export function fetchBatchCreateStorageFacilities(data: {
  1337. parentId?: string
  1338. namePrefix?: string
  1339. nameSuffix?: string
  1340. startNum: number
  1341. endNum: number
  1342. padWidth?: number
  1343. codePrefix?: string
  1344. codeSuffix?: string
  1345. nodeType?: string
  1346. isLeaf?: number
  1347. remark?: string
  1348. }) {
  1349. return request.post({ url: '/web/admin/storage-facilities/batch', params: data })
  1350. }
  1351. export function fetchUpdateStorageFacility(id: string, data: Record<string, any>) {
  1352. return request.put({ url: `/web/admin/storage-facilities/${id}`, params: data })
  1353. }
  1354. export function fetchDeleteStorageFacility(id: string) {
  1355. return request.del({ url: `/web/admin/storage-facilities/${id}` })
  1356. }
  1357. export function fetchStorageSlotList(params?: { facilityNodeId?: string; availableOnly?: boolean }) {
  1358. return request.get({ url: '/web/admin/storage-facility-slots', params })
  1359. }
  1360. export function fetchStorageSlotStats() {
  1361. return request.get<
  1362. Array<{ facilityNodeId: string; total: number; occupied: number; empty: number }>
  1363. >({ url: '/web/admin/storage-facility-slots/stats' })
  1364. }
  1365. export function fetchStorageSlotSelectOptions(params?: {
  1366. keyword?: string
  1367. availableOnly?: boolean
  1368. includeSlotIds?: string
  1369. page?: number
  1370. pageSize?: number
  1371. }) {
  1372. return request.get<{
  1373. list: Array<{ id: string; name: string; fullSlotCode?: string; slotCode?: string }>
  1374. total: number
  1375. page: number
  1376. pageSize: number
  1377. totalPages: number
  1378. }>({
  1379. url: '/web/admin/storage-facility-slots/select-options',
  1380. params
  1381. })
  1382. }
  1383. export function fetchCreateStorageSlot(data: Record<string, any>) {
  1384. return request.post({ url: '/web/admin/storage-facility-slots', params: data })
  1385. }
  1386. export function fetchBatchCreateSlots(data: {
  1387. facilityNodeId: string
  1388. rows: number
  1389. cols: number
  1390. codePrefix?: string
  1391. }) {
  1392. return request.post({ url: '/web/admin/storage-facility-slots/batch', params: data })
  1393. }
  1394. export function fetchClearStorageSlots(data: { facilityNodeId: string }) {
  1395. return request.post({ url: '/web/admin/storage-facility-slots/clear', params: data })
  1396. }
  1397. export function fetchInsertStorageSlotRow(data: {
  1398. facilityNodeId: string
  1399. afterRowNum: number
  1400. cols: number
  1401. codePrefix?: string
  1402. }) {
  1403. return request.post({ url: '/web/admin/storage-facility-slots/insert-row', params: data })
  1404. }
  1405. export function fetchUpdateStorageSlot(id: string, data: Record<string, any>) {
  1406. return request.put({ url: `/web/admin/storage-facility-slots/${id}`, params: data })
  1407. }
  1408. export function fetchDeleteStorageSlot(id: string) {
  1409. return request.del({ url: `/web/admin/storage-facility-slots/${id}` })
  1410. }
  1411. // ---------------------------------------------------------------------------
  1412. // 库位占用记录
  1413. // ---------------------------------------------------------------------------
  1414. export function fetchSlotOccupancies(params: {
  1415. slotId: string
  1416. occupancyStatus?: string
  1417. itemType?: string
  1418. page?: number
  1419. pageSize?: number
  1420. }) {
  1421. return request.get({ url: '/web/admin/storage-slot-occupancies', params })
  1422. }
  1423. export function fetchSlotOccupancyHistory(params?: {
  1424. slotId?: string
  1425. facilityNodeId?: string
  1426. itemType?: string
  1427. startDate?: string
  1428. endDate?: string
  1429. page?: number
  1430. pageSize?: number
  1431. }) {
  1432. return request.get({ url: '/web/admin/storage-slot-occupancies/history', params })
  1433. }
  1434. export function fetchCreateOccupancy(data: {
  1435. slotId: string
  1436. itemType?: string
  1437. itemCode: string
  1438. itemName: string
  1439. itemSource?: string
  1440. remark?: string
  1441. }) {
  1442. return request.post({ url: '/web/admin/storage-slot-occupancies', params: data })
  1443. }
  1444. export function fetchRemoveOccupancy(id: string) {
  1445. return request.put({ url: `/web/admin/storage-slot-occupancies/${id}/remove` })
  1446. }
  1447. // ---------------------------------------------------------------------------
  1448. // 展馆预约
  1449. // ---------------------------------------------------------------------------
  1450. export function fetchExhibitionAppointmentList(params?: {
  1451. page?: number
  1452. pageSize?: number
  1453. keyword?: string
  1454. visitDateStart?: string
  1455. visitDateEnd?: string
  1456. }) {
  1457. return request.get({ url: '/web/admin/exhibition-appointments', params })
  1458. }
  1459. export function fetchCreateExhibitionAppointment(data: Record<string, any>) {
  1460. return request.post({ url: '/web/admin/exhibition-appointments', params: data })
  1461. }
  1462. export function fetchUpdateExhibitionAppointment(id: string, data: Record<string, any>) {
  1463. return request.put({ url: `/web/admin/exhibition-appointments/${id}`, params: data })
  1464. }
  1465. export function fetchDeleteExhibitionAppointment(id: string) {
  1466. return request.del({ url: `/web/admin/exhibition-appointments/${id}` })
  1467. }
  1468. // ---------------------------------------------------------------------------
  1469. // 中试服务管理 — 细胞产品类型
  1470. // ---------------------------------------------------------------------------
  1471. export function fetchCellProductTypeList(params?: {
  1472. page?: number
  1473. pageSize?: number
  1474. keyword?: string
  1475. }) {
  1476. return request.get({
  1477. url: '/web/admin/cell-product-types',
  1478. params
  1479. })
  1480. }
  1481. export function fetchCreateCellProductType(data: Record<string, any>) {
  1482. return request.post({ url: '/web/admin/cell-product-types', params: data })
  1483. }
  1484. export function fetchUpdateCellProductType(id: string, data: Record<string, any>) {
  1485. return request.put({ url: `/web/admin/cell-product-types/${id}`, params: data })
  1486. }
  1487. export function fetchDeleteCellProductType(id: string) {
  1488. return request.del({ url: `/web/admin/cell-product-types/${id}` })
  1489. }
  1490. // ---------------------------------------------------------------------------
  1491. // 中试服务管理 — 细胞产品规格
  1492. // ---------------------------------------------------------------------------
  1493. export function fetchCellProductSpecList(params?: {
  1494. page?: number
  1495. pageSize?: number
  1496. keyword?: string
  1497. }) {
  1498. return request.get({
  1499. url: '/web/admin/cell-product-specs',
  1500. params
  1501. })
  1502. }
  1503. export function fetchCreateCellProductSpec(data: Record<string, any>) {
  1504. return request.post({ url: '/web/admin/cell-product-specs', params: data })
  1505. }
  1506. export function fetchUpdateCellProductSpec(id: string, data: Record<string, any>) {
  1507. return request.put({ url: `/web/admin/cell-product-specs/${id}`, params: data })
  1508. }
  1509. export function fetchDeleteCellProductSpec(id: string) {
  1510. return request.del({ url: `/web/admin/cell-product-specs/${id}` })
  1511. }
  1512. // ---------------------------------------------------------------------------
  1513. // 中试服务管理 — 细胞产品价格
  1514. // ---------------------------------------------------------------------------
  1515. export function fetchCellProductPriceList(params?: {
  1516. page?: number
  1517. pageSize?: number
  1518. keyword?: string
  1519. cellProductTypeId?: string
  1520. }) {
  1521. return request.get({
  1522. url: '/web/admin/cell-product-prices',
  1523. params
  1524. })
  1525. }
  1526. export function fetchCreateCellProductPrice(data: Record<string, any>) {
  1527. return request.post({ url: '/web/admin/cell-product-prices', params: data })
  1528. }
  1529. export function fetchUpdateCellProductPrice(id: string, data: Record<string, any>) {
  1530. return request.put({ url: `/web/admin/cell-product-prices/${id}`, params: data })
  1531. }
  1532. export function fetchDeleteCellProductPrice(id: string) {
  1533. return request.del({ url: `/web/admin/cell-product-prices/${id}` })
  1534. }
  1535. // ---------------------------------------------------------------------------
  1536. // 中试服务管理 — 项目价格体系(主表)
  1537. // ---------------------------------------------------------------------------
  1538. export function fetchProjectSystemList(params?: {
  1539. page?: number
  1540. pageSize?: number
  1541. keyword?: string
  1542. }) {
  1543. return request.get({
  1544. url: '/web/admin/project-price-systems',
  1545. params
  1546. })
  1547. }
  1548. export function fetchCreateProjectSystem(data: Record<string, any>) {
  1549. return request.post({ url: '/web/admin/project-price-systems', params: data })
  1550. }
  1551. export function fetchUpdateProjectSystem(id: string, data: Record<string, any>) {
  1552. return request.put({ url: `/web/admin/project-price-systems/${id}`, params: data })
  1553. }
  1554. export function fetchDeleteProjectSystem(id: string) {
  1555. return request.del({ url: `/web/admin/project-price-systems/${id}` })
  1556. }
  1557. // ---------------------------------------------------------------------------
  1558. // 中试服务管理 — 项目价格体系明细(子表)
  1559. // ---------------------------------------------------------------------------
  1560. export function fetchProjectSystemItems(systemId: string) {
  1561. return request.get({ url: `/web/admin/project-price-systems/${systemId}/items` })
  1562. }
  1563. export function fetchCreateProjectSystemItem(systemId: string, data: Record<string, any>) {
  1564. return request.post({ url: `/web/admin/project-price-systems/${systemId}/items`, params: data })
  1565. }
  1566. export function fetchUpdateProjectSystemItem(id: string, data: Record<string, any>) {
  1567. return request.put({ url: `/web/admin/project-system-items/${id}`, params: data })
  1568. }
  1569. export function fetchDeleteProjectSystemItem(id: string) {
  1570. return request.del({ url: `/web/admin/project-system-items/${id}` })
  1571. }
  1572. // ---------------------------------------------------------------------------
  1573. // 中试服务管理 — 渠道信息(主表)
  1574. // ---------------------------------------------------------------------------
  1575. export function fetchChannelList(params?: { page?: number; pageSize?: number; keyword?: string }) {
  1576. return request.get({
  1577. url: '/web/admin/channels',
  1578. params
  1579. })
  1580. }
  1581. export function fetchCreateChannel(data: Record<string, any>) {
  1582. return request.post({ url: '/web/admin/channels', params: data })
  1583. }
  1584. export function fetchUpdateChannel(id: string, data: Record<string, any>) {
  1585. return request.put({ url: `/web/admin/channels/${id}`, params: data })
  1586. }
  1587. export function fetchDeleteChannel(id: string) {
  1588. return request.del({ url: `/web/admin/channels/${id}` })
  1589. }
  1590. // ---------------------------------------------------------------------------
  1591. // 中试服务管理 — 渠道开票信息(子表)
  1592. // ---------------------------------------------------------------------------
  1593. export function fetchChannelInvoices(channelId: string) {
  1594. return request.get({ url: `/web/admin/channels/${channelId}/invoices` })
  1595. }
  1596. export function fetchCreateChannelInvoice(channelId: string, data: Record<string, any>) {
  1597. return request.post({ url: `/web/admin/channels/${channelId}/invoices`, params: data })
  1598. }
  1599. export function fetchUpdateChannelInvoice(id: string, data: Record<string, any>) {
  1600. return request.put({ url: `/web/admin/channel-invoices/${id}`, params: data })
  1601. }
  1602. export function fetchDeleteChannelInvoice(id: string) {
  1603. return request.del({ url: `/web/admin/channel-invoices/${id}` })
  1604. }
  1605. // ---------------------------------------------------------------------------
  1606. // 中试服务管理 — 渠道邮寄地址(子表)
  1607. // ---------------------------------------------------------------------------
  1608. export function fetchChannelMailAddresses(channelId: string) {
  1609. return request.get({ url: `/web/admin/channels/${channelId}/mail-addresses` })
  1610. }
  1611. export function fetchCreateChannelMailAddress(channelId: string, data: Record<string, any>) {
  1612. return request.post({ url: `/web/admin/channels/${channelId}/mail-addresses`, params: data })
  1613. }
  1614. export function fetchUpdateChannelMailAddress(id: string, data: Record<string, any>) {
  1615. return request.put({ url: `/web/admin/channel-mail-addresses/${id}`, params: data })
  1616. }
  1617. export function fetchDeleteChannelMailAddress(id: string) {
  1618. return request.del({ url: `/web/admin/channel-mail-addresses/${id}` })
  1619. }
  1620. // ---------------------------------------------------------------------------
  1621. // 中试服务管理 — 渠道协议(子表)
  1622. // ---------------------------------------------------------------------------
  1623. export function fetchChannelAgreements(channelId: string) {
  1624. return request.get({ url: `/web/admin/channels/${channelId}/agreements` })
  1625. }
  1626. export function fetchCreateChannelAgreement(channelId: string, data: Record<string, any>) {
  1627. return request.post({ url: `/web/admin/channels/${channelId}/agreements`, params: data })
  1628. }
  1629. export function fetchUpdateChannelAgreement(id: string, data: Record<string, any>) {
  1630. return request.put({ url: `/web/admin/channel-agreements/${id}`, params: data })
  1631. }
  1632. export function fetchDeleteChannelAgreement(id: string) {
  1633. return request.del({ url: `/web/admin/channel-agreements/${id}` })
  1634. }
  1635. export function fetchActivateChannelAgreement(id: string) {
  1636. return request.put({ url: `/web/admin/channel-agreements/${id}/activate` })
  1637. }
  1638. export function fetchVoidChannelAgreement(id: string) {
  1639. return request.put({ url: `/web/admin/channel-agreements/${id}/void` })
  1640. }
  1641. // ---------------------------------------------------------------------------
  1642. // 中试服务管理 — 渠道协议产品价格(子表)
  1643. // ---------------------------------------------------------------------------
  1644. export function fetchChannelAgreementPrices(agreementId: string) {
  1645. return request.get({ url: `/web/admin/channel-agreements/${agreementId}/product-prices` })
  1646. }
  1647. export function fetchCreateChannelAgreementPrice(agreementId: string, data: Record<string, any>) {
  1648. return request.post({
  1649. url: `/web/admin/channel-agreements/${agreementId}/product-prices`,
  1650. params: data
  1651. })
  1652. }
  1653. export function fetchUpdateChannelAgreementPrice(id: string, data: Record<string, any>) {
  1654. return request.put({ url: `/web/admin/channel-agreement-product-prices/${id}`, params: data })
  1655. }
  1656. export function fetchDeleteChannelAgreementPrice(id: string) {
  1657. return request.del({ url: `/web/admin/channel-agreement-product-prices/${id}` })
  1658. }
  1659. // ---------------------------------------------------------------------------
  1660. // 中试服务管理 — 体检机构(主表)
  1661. // ---------------------------------------------------------------------------
  1662. export function fetchCheckupInstitutionList(params?: {
  1663. page?: number
  1664. pageSize?: number
  1665. keyword?: string
  1666. status?: string
  1667. }) {
  1668. return request.get({
  1669. url: '/web/admin/checkup-institutions',
  1670. params
  1671. })
  1672. }
  1673. export function fetchCreateCheckupInstitution(data: Record<string, any>) {
  1674. return request.post({ url: '/web/admin/checkup-institutions', params: data })
  1675. }
  1676. export function fetchUpdateCheckupInstitution(id: string, data: Record<string, any>) {
  1677. return request.put({ url: `/web/admin/checkup-institutions/${id}`, params: data })
  1678. }
  1679. export function fetchDeleteCheckupInstitution(id: string) {
  1680. return request.del({ url: `/web/admin/checkup-institutions/${id}` })
  1681. }
  1682. // ---------------------------------------------------------------------------
  1683. // 中试服务管理 — 体检机构开票信息(子表)
  1684. // ---------------------------------------------------------------------------
  1685. export function fetchCheckupInstitutionInvoices(institutionId: string) {
  1686. return request.get({ url: `/web/admin/checkup-institutions/${institutionId}/invoices` })
  1687. }
  1688. export function fetchCreateCheckupInstitutionInvoice(
  1689. institutionId: string,
  1690. data: Record<string, any>
  1691. ) {
  1692. return request.post({
  1693. url: `/web/admin/checkup-institutions/${institutionId}/invoices`,
  1694. params: data
  1695. })
  1696. }
  1697. export function fetchUpdateCheckupInstitutionInvoice(id: string, data: Record<string, any>) {
  1698. return request.put({ url: `/web/admin/checkup-institution-invoices/${id}`, params: data })
  1699. }
  1700. export function fetchDeleteCheckupInstitutionInvoice(id: string) {
  1701. return request.del({ url: `/web/admin/checkup-institution-invoices/${id}` })
  1702. }
  1703. // ---------------------------------------------------------------------------
  1704. // 中试服务管理 — 体检机构项目及价格(子表)
  1705. // ---------------------------------------------------------------------------
  1706. export function fetchCheckupInstitutionProjects(institutionId: string) {
  1707. return request.get({ url: `/web/admin/checkup-institutions/${institutionId}/projects` })
  1708. }
  1709. export function fetchCreateCheckupInstitutionProject(
  1710. institutionId: string,
  1711. data: Record<string, any>
  1712. ) {
  1713. return request.post({
  1714. url: `/web/admin/checkup-institutions/${institutionId}/projects`,
  1715. params: data
  1716. })
  1717. }
  1718. export function fetchUpdateCheckupInstitutionProject(id: string, data: Record<string, any>) {
  1719. return request.put({ url: `/web/admin/checkup-institution-projects/${id}`, params: data })
  1720. }
  1721. export function fetchDeleteCheckupInstitutionProject(id: string) {
  1722. return request.del({ url: `/web/admin/checkup-institution-projects/${id}` })
  1723. }
  1724. // ---------------------------------------------------------------------------
  1725. // 中试服务管理 — 体检机构项目套餐
  1726. // ---------------------------------------------------------------------------
  1727. export function fetchCheckupInstitutionPackages(institutionId: string) {
  1728. return request.get({ url: `/web/admin/checkup-institutions/${institutionId}/packages` })
  1729. }
  1730. export function fetchCheckupInstitutionPackageDetail(packageId: string) {
  1731. return request.get({ url: `/web/admin/checkup-institution-packages/${packageId}` })
  1732. }
  1733. export function fetchCreateCheckupInstitutionPackage(
  1734. institutionId: string,
  1735. data: Record<string, unknown>
  1736. ) {
  1737. return request.post({
  1738. url: `/web/admin/checkup-institutions/${institutionId}/packages`,
  1739. params: data
  1740. })
  1741. }
  1742. export function fetchUpdateCheckupInstitutionPackage(
  1743. packageId: string,
  1744. data: Record<string, unknown>
  1745. ) {
  1746. return request.put({ url: `/web/admin/checkup-institution-packages/${packageId}`, params: data })
  1747. }
  1748. export function fetchDeleteCheckupInstitutionPackage(packageId: string) {
  1749. return request.del({ url: `/web/admin/checkup-institution-packages/${packageId}` })
  1750. }
  1751. // ============ 保险公司及险种价格管理 ============
  1752. export function fetchInsuranceCompanyList(params?: {
  1753. page?: number
  1754. pageSize?: number
  1755. keyword?: string
  1756. status?: string
  1757. }) {
  1758. return request.get({ url: '/web/admin/insurance-companies', params })
  1759. }
  1760. export function fetchCreateInsuranceCompany(data: Record<string, any>) {
  1761. return request.post({ url: '/web/admin/insurance-companies', params: data })
  1762. }
  1763. export function fetchUpdateInsuranceCompany(id: string, data: Record<string, any>) {
  1764. return request.put({ url: `/web/admin/insurance-companies/${id}`, params: data })
  1765. }
  1766. export function fetchDeleteInsuranceCompany(id: string) {
  1767. return request.del({ url: `/web/admin/insurance-companies/${id}` })
  1768. }
  1769. // 保险公司开票信息
  1770. export function fetchInsuranceCompanyInvoices(companyId: string) {
  1771. return request.get({ url: `/web/admin/insurance-companies/${companyId}/invoices` })
  1772. }
  1773. export function fetchCreateInsuranceCompanyInvoice(companyId: string, data: Record<string, any>) {
  1774. return request.post({ url: `/web/admin/insurance-companies/${companyId}/invoices`, params: data })
  1775. }
  1776. export function fetchUpdateInsuranceCompanyInvoice(id: string, data: Record<string, any>) {
  1777. return request.put({ url: `/web/admin/insurance-company-invoices/${id}`, params: data })
  1778. }
  1779. export function fetchDeleteInsuranceCompanyInvoice(id: string) {
  1780. return request.del({ url: `/web/admin/insurance-company-invoices/${id}` })
  1781. }
  1782. // 保险险种价格
  1783. export function fetchInsuranceProjectPrices(companyId: string) {
  1784. return request.get({ url: `/web/admin/insurance-companies/${companyId}/project-prices` })
  1785. }
  1786. export function fetchCreateInsuranceProjectPrice(companyId: string, data: Record<string, any>) {
  1787. return request.post({
  1788. url: `/web/admin/insurance-companies/${companyId}/project-prices`,
  1789. params: data
  1790. })
  1791. }
  1792. export function fetchUpdateInsuranceProjectPrice(id: string, data: Record<string, any>) {
  1793. return request.put({ url: `/web/admin/insurance-project-prices/${id}`, params: data })
  1794. }
  1795. export function fetchDeleteInsuranceProjectPrice(id: string) {
  1796. return request.del({ url: `/web/admin/insurance-project-prices/${id}` })
  1797. }
  1798. // ============ 储存证管理 ============
  1799. export function fetchStorageCertList(params?: {
  1800. page?: number
  1801. pageSize?: number
  1802. keyword?: string
  1803. makeStatus?: string
  1804. storageInDateStart?: string
  1805. storageInDateEnd?: string
  1806. }) {
  1807. return request.get({ url: '/web/admin/storage-certs', params })
  1808. }
  1809. // ============ 满月待办管理 ============
  1810. export function fetchFullmoonTodoList(params?: {
  1811. page?: number
  1812. pageSize?: number
  1813. keyword?: string
  1814. todoStatus?: string
  1815. fullmoonDateStart?: string
  1816. fullmoonDateEnd?: string
  1817. }) {
  1818. return request.get({ url: '/web/admin/fullmoon-todos', params })
  1819. }
  1820. export function fetchUpdateFullmoonTodoInsurance(protocolId: string, data: Record<string, any>) {
  1821. return request.put({ url: `/web/admin/fullmoon-todos/${protocolId}/insurance`, params: data })
  1822. }
  1823. // ---------------------------------------------------------------------------
  1824. // 渠道服务购买订单
  1825. // ---------------------------------------------------------------------------
  1826. /** 渠道服务订单列表 */
  1827. export function fetchChannelServiceOrderList(params?: Record<string, any>) {
  1828. return request.get({ url: '/web/admin/channel-service-orders', params })
  1829. }
  1830. /** 渠道服务订单详情 */
  1831. export function fetchChannelServiceOrderDetail(orderId: string) {
  1832. return request.get({ url: `/web/admin/channel-service-orders/${orderId}` })
  1833. }
  1834. /** 创建渠道服务订单 */
  1835. export function fetchCreateChannelServiceOrder(data: Record<string, any>) {
  1836. return request.post({ url: '/web/admin/channel-service-orders', params: data })
  1837. }
  1838. /** 更新渠道服务订单 */
  1839. export function fetchUpdateChannelServiceOrder(orderId: string, data: Record<string, any>) {
  1840. return request.put({ url: `/web/admin/channel-service-orders/${orderId}`, params: data })
  1841. }
  1842. /** 删除渠道服务订单 */
  1843. export function fetchDeleteChannelServiceOrder(orderId: string) {
  1844. return request.del({ url: `/web/admin/channel-service-orders/${orderId}` })
  1845. }
  1846. /** 发起财务确认(市场人员提交备注与凭证) */
  1847. export function fetchSubmitServiceOrderFinanceConfirm(orderId: string, data: Record<string, any>) {
  1848. return request.post({
  1849. url: `/web/admin/channel-service-orders/${orderId}/submit-finance-confirm`,
  1850. params: data
  1851. })
  1852. }
  1853. /** 财务确认收款 */
  1854. export function fetchConfirmServiceOrderReceipt(orderId: string, data: Record<string, any>) {
  1855. return request.post({
  1856. url: `/web/admin/channel-service-orders/${orderId}/confirm-receipt`,
  1857. params: data
  1858. })
  1859. }
  1860. /** 提交退款 */
  1861. export function fetchSubmitServiceOrderRefund(orderId: string, data: Record<string, any>) {
  1862. return request.post({
  1863. url: `/web/admin/channel-service-orders/${orderId}/submit-refund`,
  1864. params: data
  1865. })
  1866. }
  1867. /** 确认退款 */
  1868. export function fetchConfirmServiceOrderRefund(orderId: string, data: Record<string, any>) {
  1869. return request.post({
  1870. url: `/web/admin/channel-service-orders/${orderId}/confirm-refund`,
  1871. params: data
  1872. })
  1873. }
  1874. /** 作废订单 */
  1875. export function fetchVoidServiceOrder(orderId: string) {
  1876. return request.put({ url: `/web/admin/channel-service-orders/${orderId}/void` })
  1877. }
  1878. /** 渠道账户 */
  1879. export function fetchChannelAccount(channelId: string) {
  1880. return request.get({ url: `/web/admin/channels/${channelId}/account` })
  1881. }
  1882. /** 渠道产品份数 */
  1883. export function fetchChannelProductQuotas(channelId: string) {
  1884. return request.get({ url: `/web/admin/channels/${channelId}/product-quotas` })
  1885. }
  1886. // ========== 渠道服务订单操作流水 ==========
  1887. /** 流水列表 */
  1888. export function fetchServiceOrderTxnList(params?: Record<string, any>) {
  1889. return request.get({ url: '/web/admin/channel-service-order-txns', params })
  1890. }
  1891. /** 流水详情 */
  1892. export function fetchServiceOrderTxnDetail(txnId: string) {
  1893. return request.get({ url: `/web/admin/channel-service-order-txns/${txnId}` })
  1894. }
  1895. /** 发起充值 */
  1896. export function fetchCreateRechargeTxn(orderId: string, data: Record<string, any>) {
  1897. return request.post({
  1898. url: `/web/admin/channel-service-orders/${orderId}/recharge`,
  1899. params: data
  1900. })
  1901. }
  1902. /** 申请退款 */
  1903. export function fetchCreateRefundTxn(orderId: string, data: Record<string, any>) {
  1904. return request.post({ url: `/web/admin/channel-service-orders/${orderId}/refund`, params: data })
  1905. }
  1906. /** 购买产品 */
  1907. export function fetchCreatePurchaseTxn(orderId: string, data: Record<string, any>) {
  1908. return request.post({
  1909. url: `/web/admin/channel-service-orders/${orderId}/purchase`,
  1910. params: data
  1911. })
  1912. }
  1913. /** 退订产品 */
  1914. export function fetchCreateUnsubscribeTxn(orderId: string, data: Record<string, any>) {
  1915. return request.post({
  1916. url: `/web/admin/channel-service-orders/${orderId}/unsubscribe`,
  1917. params: data
  1918. })
  1919. }
  1920. /** 更新待生效流水 */
  1921. export function fetchUpdateServiceOrderTxn(txnId: string, data: Record<string, any>) {
  1922. return request.put({ url: `/web/admin/channel-service-order-txns/${txnId}`, params: data })
  1923. }
  1924. /** 流水发起财务确认 */
  1925. export function fetchSubmitTxnFinance(txnId: string, data: Record<string, any>) {
  1926. return request.post({
  1927. url: `/web/admin/channel-service-order-txns/${txnId}/submit-finance`,
  1928. params: data
  1929. })
  1930. }
  1931. /** 流水财务确认 */
  1932. export function fetchConfirmTxn(txnId: string, data: Record<string, any>) {
  1933. return request.post({
  1934. url: `/web/admin/channel-service-order-txns/${txnId}/confirm`,
  1935. params: data
  1936. })
  1937. }
  1938. /** 作废流水 */
  1939. export function fetchVoidTxn(txnId: string) {
  1940. return request.put({ url: `/web/admin/channel-service-order-txns/${txnId}/void` })
  1941. }
  1942. // ==================== 中试服务申请单 ====================
  1943. export function fetchPilotApplicationList(params: any) {
  1944. return request.get({ url: '/web/admin/pilot-application/list', params })
  1945. }
  1946. export function fetchPilotApplicationDetail(params: any) {
  1947. return request.get({ url: '/web/admin/pilot-application/detail', params })
  1948. }
  1949. export function createPilotApplication(data: any) {
  1950. return request.post({ url: '/web/admin/pilot-application/create', params: data })
  1951. }
  1952. export function updatePilotApplication(data: any) {
  1953. return request.put({ url: '/web/admin/pilot-application/update', params: data })
  1954. }
  1955. export function deletePilotApplication(data: any) {
  1956. return request.del({ url: '/web/admin/pilot-application/delete', data })
  1957. }
  1958. export function startPilotApplication(data: any) {
  1959. return request.post({ url: '/web/admin/pilot-application/start', params: data })
  1960. }
  1961. export function completePilotApplication(data: any) {
  1962. return request.post({ url: '/web/admin/pilot-application/complete', params: data })
  1963. }
  1964. export function voidPilotApplication(data: any) {
  1965. return request.post({ url: '/web/admin/pilot-application/void', params: data })
  1966. }
  1967. export function savePilotApplication(data: any) {
  1968. return request.post({ url: '/web/admin/pilot-application/save', params: data })
  1969. }
  1970. export function createBasicExperimentSaleSchedules(
  1971. applicationId: string,
  1972. data: { productLines: any[] }
  1973. ) {
  1974. return request.post({
  1975. url: `/web/admin/pilot-application/${applicationId}/sale-schedules`,
  1976. params: data
  1977. })
  1978. }
  1979. // 患者信息
  1980. export function fetchPilotPatient(params: any) {
  1981. return request.get({ url: '/web/admin/pilot-patient/detail', params })
  1982. }
  1983. export function savePilotPatient(data: any) {
  1984. return request.post({ url: '/web/admin/pilot-patient/save', params: data })
  1985. }
  1986. // 输注方案
  1987. export function fetchPilotInfusionPlanList(params: any) {
  1988. return request.get({ url: '/web/admin/pilot-infusion-plan/list', params })
  1989. }
  1990. export function createPilotInfusionPlan(data: any) {
  1991. return request.post({ url: '/web/admin/pilot-infusion-plan/create', params: data })
  1992. }
  1993. export function updatePilotInfusionPlan(data: any) {
  1994. return request.put({ url: '/web/admin/pilot-infusion-plan/update', params: data })
  1995. }
  1996. export function deletePilotInfusionPlan(data: any) {
  1997. return request.del({ url: '/web/admin/pilot-infusion-plan/delete', data })
  1998. }
  1999. // 输注计划
  2000. export function fetchPilotInfusionScheduleList(params: any) {
  2001. return request.get({ url: '/web/admin/pilot-infusion-schedule/list', params })
  2002. }
  2003. export function autoGenerateSchedules(data: any) {
  2004. return request.post({ url: '/web/admin/pilot-infusion-schedule/auto-generate', params: data })
  2005. }
  2006. export function updatePilotInfusionSchedule(data: any) {
  2007. return request.put({ url: '/web/admin/pilot-infusion-schedule/update', params: data })
  2008. }
  2009. export function deletePilotInfusionSchedule(data: any) {
  2010. return request.del({ url: '/web/admin/pilot-infusion-schedule/delete', data })
  2011. }
  2012. export function markScheduleComplete(data: any) {
  2013. return request.post({ url: '/web/admin/pilot-infusion-schedule/mark-complete', params: data })
  2014. }
  2015. // ========== 中试服务 - 体检管理 ==========
  2016. export const fetchPilotCheckupDetail = (params: any) =>
  2017. request.get({ url: '/web/admin/pilot-checkup/detail', params })
  2018. export const savePilotCheckup = (data: any) =>
  2019. request.post({ url: '/web/admin/pilot-checkup/save', params: data })
  2020. export const deletePilotCheckup = (data: any) =>
  2021. request.del({ url: '/web/admin/pilot-checkup/delete', data })
  2022. export const markPilotCheckupChecked = (data: any) =>
  2023. request.post({ url: '/web/admin/pilot-checkup/mark-checked', params: data })
  2024. export const settlePilotCheckupFee = (data: any) =>
  2025. request.post({ url: '/web/admin/pilot-checkup/settle-fee', params: data })
  2026. export const fetchPilotCheckupReserveItems = (params: any) =>
  2027. request.get({ url: '/web/admin/pilot-checkup/reserve-items', params })
  2028. export const savePilotCheckupReserveItems = (data: any) =>
  2029. request.post({ url: '/web/admin/pilot-checkup/reserve-items/save', params: data })
  2030. export const deletePilotCheckupReserveItem = (data: any) =>
  2031. request.del({ url: '/web/admin/pilot-checkup/reserve-item/delete', data })
  2032. export const fetchPilotCheckupActualItems = (params: any) =>
  2033. request.get({ url: '/web/admin/pilot-checkup/actual-items', params })
  2034. export const savePilotCheckupActualItems = (data: any) =>
  2035. request.post({ url: '/web/admin/pilot-checkup/actual-items/save', params: data })
  2036. export const deletePilotCheckupActualItem = (data: any) =>
  2037. request.del({ url: '/web/admin/pilot-checkup/actual-item/delete', data })
  2038. // 体检记录分页列表
  2039. export const fetchPilotCheckupList = (params: any) =>
  2040. request.get({ url: '/web/admin/pilot-checkup/list', params })
  2041. // 待登记体检的患者列表
  2042. export const fetchPilotCheckupPendingPatients = (params: any) =>
  2043. request.get({ url: '/web/admin/pilot-checkup/pending-patients', params })
  2044. // 批量创建体检记录
  2045. export const batchSavePilotCheckup = (data: any) =>
  2046. request.post({ url: '/web/admin/pilot-checkup/batch-save', params: data })
  2047. // ========== 中试服务 - 交付管理 ==========
  2048. export const fetchPilotDeliveryDetail = (params: any) =>
  2049. request.get({ url: '/web/admin/pilot-delivery/detail', params })
  2050. export const fetchPilotDeliveryListByApplication = (params: any) =>
  2051. request.get({ url: '/web/admin/pilot-delivery/list-by-application', params })
  2052. export const createPilotDelivery = (data: any) =>
  2053. request.post({ url: '/web/admin/pilot-delivery/create', params: data })
  2054. export const deletePilotDelivery = (data: any) =>
  2055. request.del({ url: '/web/admin/pilot-delivery/delete', data })
  2056. export const fetchPilotDeliveryMaterials = (params: any) =>
  2057. request.get({ url: '/web/admin/pilot-delivery/materials', params })
  2058. export const savePilotDeliveryMaterials = (data: any) =>
  2059. request.post({ url: '/web/admin/pilot-delivery/materials/save', params: data })
  2060. export const fetchPilotDeliveryMethod = (params: any) =>
  2061. request.get({ url: '/web/admin/pilot-delivery/method', params })
  2062. export const savePilotDeliveryMethod = (data: any) =>
  2063. request.post({ url: '/web/admin/pilot-delivery/method/save', params: data })
  2064. // ========== 中试服务 - 出库联动 ==========
  2065. export const createOutboundProductionWorkOrder = (data: any) =>
  2066. request.post({
  2067. url: '/web/admin/pilot-infusion-schedule/create-production-work-order',
  2068. params: data
  2069. })
  2070. export const createOutboundQcWorkOrder = (data: any) =>
  2071. request.post({
  2072. url: '/web/admin/pilot-infusion-schedule/create-qc-work-order',
  2073. params: data
  2074. })
  2075. // ========== 中试服务 - 应用确认 ==========
  2076. export const createInfusionConfirm = (data: any) =>
  2077. request.post({ url: '/web/admin/pilot-infusion-confirm/create', params: data })
  2078. export const fetchInfusionConfirmList = (params: any) =>
  2079. request.get({ url: '/web/admin/pilot-infusion-confirm/list', params })
  2080. export const getInfusionConfirmDetail = (params: any) =>
  2081. request.get({ url: '/web/admin/pilot-infusion-confirm/detail', params })
  2082. export const confirmInfusion = (data: any) =>
  2083. request.post({ url: '/web/admin/pilot-infusion-confirm/confirm', params: data })
  2084. export const updateInfusionConfirm = (data: any) =>
  2085. request.put({ url: '/web/admin/pilot-infusion-confirm/update', params: data })
  2086. export const deleteInfusionConfirm = (data: any) =>
  2087. request.del({ url: '/web/admin/pilot-infusion-confirm/delete', data })
  2088. // ========== 中试服务 - 输注计划管理 ==========
  2089. export function fetchInfusionScheduleMgmtList(params: any) {
  2090. return request.get({ url: '/web/admin/pilot-infusion-schedule-mgmt/list', params })
  2091. }
  2092. export function fetchInfusionScheduleMgmtDetail(params: { scheduleId: string } | { id: string }) {
  2093. const scheduleId =
  2094. 'scheduleId' in params && params.scheduleId
  2095. ? params.scheduleId
  2096. : 'id' in params
  2097. ? params.id
  2098. : ''
  2099. return request.get({
  2100. url: '/web/admin/pilot-infusion-schedule-mgmt/detail',
  2101. params: { scheduleId }
  2102. })
  2103. }
  2104. export function updateInfusionScheduleStatus(data: {
  2105. scheduleId?: string
  2106. id?: string
  2107. infusionStatus: string
  2108. cancelReason?: string
  2109. }) {
  2110. const scheduleId = data.scheduleId || data.id || ''
  2111. return request.put({
  2112. url: '/web/admin/pilot-infusion-schedule-mgmt/update-status',
  2113. data: {
  2114. scheduleId,
  2115. infusionStatus: data.infusionStatus,
  2116. cancelReason: data.cancelReason
  2117. }
  2118. })
  2119. }
  2120. export function updateInfusionScheduleQcStatus(data: {
  2121. scheduleId?: string
  2122. id?: string
  2123. qcStatus: string
  2124. }) {
  2125. const scheduleId = data.scheduleId || data.id || ''
  2126. return request.put({
  2127. url: '/web/admin/pilot-infusion-schedule-mgmt/update-qc-status',
  2128. data: {
  2129. scheduleId,
  2130. qcStatus: data.qcStatus
  2131. }
  2132. })
  2133. }
  2134. export function updateInfusionScheduleMgmt(data: any) {
  2135. return request.put({
  2136. url: '/web/admin/pilot-infusion-schedule-mgmt/update',
  2137. data
  2138. })
  2139. }