From a10590ef8d017cbe39675e092e8cc5b0cdf8c3f5 Mon Sep 17 00:00:00 2001 From: Cheng Zhou Date: Wed, 17 Dec 2025 14:07:23 +0800 Subject: [PATCH] =?UTF-8?q?Step=20F9=EF=BC=9A=E8=B4=B9=E7=94=A8=E7=AE=A1?= =?UTF-8?q?=E7=90=86=EF=BC=88Finance=EF=BC=89=E5=89=8D=E7=AB=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- frontend/src/api/finance.ts | 64 ++++++ frontend/src/components/FinanceForm.vue | 138 +++++++++++++ .../src/components/FinanceStatusActions.vue | 91 +++++++++ frontend/src/components/FinanceSummary.vue | 65 ++++++ frontend/src/router/index.ts | 7 + frontend/src/views/Finance.vue | 187 +++++++++++++++++- frontend/src/views/FinanceDetail.vue | 111 +++++++++++ pg_data/base/16384/24576 | Bin 8192 -> 8192 bytes pg_data/base/16384/24584 | Bin 8192 -> 8192 bytes pg_data/base/16384/24653 | Bin 8192 -> 8192 bytes pg_data/base/16384/24659 | Bin 16384 -> 16384 bytes pg_data/base/16384/25066 | Bin 8192 -> 8192 bytes pg_data/base/16384/25073 | Bin 16384 -> 16384 bytes pg_data/base/16384/25105 | Bin 16384 -> 16384 bytes pg_data/base/16384/25106 | Bin 16384 -> 16384 bytes pg_data/base/16384/25107 | Bin 16384 -> 16384 bytes pg_data/global/pg_control | Bin 8192 -> 8192 bytes pg_data/pg_subtrans/0000 | Bin 8192 -> 8192 bytes pg_data/pg_wal/000000010000000000000001 | Bin 16777216 -> 16777216 bytes pg_data/pg_xact/0000 | Bin 8192 -> 8192 bytes 20 files changed, 661 insertions(+), 2 deletions(-) create mode 100644 frontend/src/api/finance.ts create mode 100644 frontend/src/components/FinanceForm.vue create mode 100644 frontend/src/components/FinanceStatusActions.vue create mode 100644 frontend/src/components/FinanceSummary.vue create mode 100644 frontend/src/views/FinanceDetail.vue diff --git a/frontend/src/api/finance.ts b/frontend/src/api/finance.ts new file mode 100644 index 00000000..705706da --- /dev/null +++ b/frontend/src/api/finance.ts @@ -0,0 +1,64 @@ +import { apiGet, apiPatch, apiPost } from "./axios"; +import type { AxiosResponse } from "axios"; +import type { ApiListResponse } from "../types/api"; + +export interface FinanceItem { + id: string; + study_id: string; + site_id?: string | null; + subject_id?: string | null; + visit_id?: string | null; + category: string; + title: string; + description?: string | null; + currency: string; + amount: number | string; + occur_date: string; + status: string; + submitted_at?: string | null; + approved_at?: string | null; + rejected_at?: string | null; + paid_at?: string | null; + approver_id?: string | null; + payer_id?: string | null; + reject_reason?: string | null; + created_by: string; + created_at: string; + updated_at?: string | null; +} + +export interface FinanceSummary { + total_amount: number | string; + approved_amount: number | string; + paid_amount: number | string; + submitted_amount?: number | string; + count_total: number; + count_paid: number; +} + +export const fetchFinanceItems = ( + studyId: string, + params?: Record +): Promise>> => + apiGet(`/api/v1/studies/${studyId}/finance/items/`, { params }); + +export const fetchFinanceItem = (studyId: string, itemId: string) => + apiGet(`/api/v1/studies/${studyId}/finance/items/${itemId}`); + +export const createFinanceItem = (studyId: string, payload: Record) => + apiPost(`/api/v1/studies/${studyId}/finance/items`, payload); + +export const updateFinanceItem = (studyId: string, itemId: string, payload: Record) => + apiPatch(`/api/v1/studies/${studyId}/finance/items/${itemId}`, payload); + +export const changeFinanceStatus = ( + studyId: string, + itemId: string, + payload: { status: string; reject_reason?: string } +) => apiPost(`/api/v1/studies/${studyId}/finance/items/${itemId}/status`, payload); + +export const fetchFinanceSummary = (studyId: string, params?: Record) => + apiGet>( + `/api/v1/studies/${studyId}/finance/summary`, + { params } + ); diff --git a/frontend/src/components/FinanceForm.vue b/frontend/src/components/FinanceForm.vue new file mode 100644 index 00000000..ff14a1e0 --- /dev/null +++ b/frontend/src/components/FinanceForm.vue @@ -0,0 +1,138 @@ + + + diff --git a/frontend/src/components/FinanceStatusActions.vue b/frontend/src/components/FinanceStatusActions.vue new file mode 100644 index 00000000..b4d43329 --- /dev/null +++ b/frontend/src/components/FinanceStatusActions.vue @@ -0,0 +1,91 @@ + + + + + diff --git a/frontend/src/components/FinanceSummary.vue b/frontend/src/components/FinanceSummary.vue new file mode 100644 index 00000000..31332077 --- /dev/null +++ b/frontend/src/components/FinanceSummary.vue @@ -0,0 +1,65 @@ + + + + + diff --git a/frontend/src/router/index.ts b/frontend/src/router/index.ts index 47f7dbe9..a03f2df3 100644 --- a/frontend/src/router/index.ts +++ b/frontend/src/router/index.ts @@ -20,6 +20,7 @@ import ImpBatches from "../views/ImpBatches.vue"; import ImpInventory from "../views/ImpInventory.vue"; import ImpTransactions from "../views/ImpTransactions.vue"; import Finance from "../views/Finance.vue"; +import FinanceDetail from "../views/FinanceDetail.vue"; import Faq from "../views/Faq.vue"; import Issues from "../views/Issues.vue"; import IssueDetail from "../views/IssueDetail.vue"; @@ -145,6 +146,12 @@ const routes: RouteRecordRaw[] = [ component: Finance, meta: { title: "费用", requiresStudy: true }, }, + { + path: "study/finance/:itemId", + name: "StudyFinanceDetail", + component: FinanceDetail, + meta: { title: "费用详情", requiresStudy: true }, + }, { path: "study/faq", name: "StudyFaq", diff --git a/frontend/src/views/Finance.vue b/frontend/src/views/Finance.vue index 4668650b..9dcd6429 100644 --- a/frontend/src/views/Finance.vue +++ b/frontend/src/views/Finance.vue @@ -1,13 +1,196 @@ - + diff --git a/frontend/src/views/FinanceDetail.vue b/frontend/src/views/FinanceDetail.vue new file mode 100644 index 00000000..41c636e2 --- /dev/null +++ b/frontend/src/views/FinanceDetail.vue @@ -0,0 +1,111 @@ + + + + + diff --git a/pg_data/base/16384/24576 b/pg_data/base/16384/24576 index e2490e635d1f57f19b6bda2d4e28e3e599408f0f..691daa8ee10c1a6d668e5b3563fb6eada285aaf8 100644 GIT binary patch delta 34 ocmZp0XmDU>0D=uQ%Qmvt$}t*DZk4NNRGG{wU(aYXxmCUz0H;w2(*OVf delta 34 ocmZp0XmDU>0D=wImu_UQm1AU?+$vYkC^DH0D_8|WgFS2$}<{Go-3aW07VQ2a{vGU delta 22 ccmZp0XmDU>0D_9^OERY%NRlQ42BMli2^Y?1``SxGx{emF6f)U_@K9eQKPqjF`;Jymk?Mt!~I+EL_fpzvD->N&y?4gY#=UQpO|WCVPc+UrfX_!X{c+GYHX;Rm}Z)y zn`CBgnr3WiX_#hYp%5JEgDPTWPjXvdewt>K69pSH|FvYjP>Jn zbn*4{W034P8Y}mbiNOHPY4T8~IS1%}RhaDFF}wKbxvT$~^i#0Atw2m{GM@ye3Nh}R zY%QT{@U^!z3S_Syn!R#RdplFlrO7GzWX-z%?%qy>x+W%ODY}WN=1ID#W=SdLCKg61$)>3ajsXEd{$Y?v2ypbo6#?MX@Y;M! z7$`Kf(3~a%by}o@G%LeBAMweD7M)V-Wr|?K?lw>gA~lguVWNg+uN2hYUF*5$zr5`A zY@bVS$nllGWU*TdN+Cp92}&W7|24o?s-RgZ3AK{{?((#+8XmjnKVGP~|Kv;`u$32> zxL+CcIq0s+lA39LCf5d(LR3-=42%qtQWJHJ4J=Z1O$>~HDJ0P>QP(ih($d&GIoT}5 zIC=7BF;#;NYcfSazEnc9QUYpaYhsXf|8K9~JNLir3669;f!#`A#1m&_vAC|mjSPsD z3TRe}L#@nNr1H_A!T-zLEeqr(&!2h@yOpr`B+93t954AU1ME{dG;776)~+l)l`zrM jZ^cAbrtp>7+8eN23yM#otOUj<`-Duem7AXnNb&;!-psR* delta 40 tcmZp0XmAi<0D>RamNJ6q9EKMH69r;6E_}|ual;Mvi5vEAejy;i4*&(W4z>UQ diff --git a/pg_data/base/16384/24659 b/pg_data/base/16384/24659 index 1071a1a8b2b0839943da1c6f4651a0f75bf3ec3d..9f306113294efe97b84c227d83e7e16efed8f3b1 100644 GIT binary patch delta 425 zcmZo@U~Fh$+`y{9U9*gl0SIO=e2|$epdeB|W3B;%!#o3q4j@jLZ@_Q^hzo#h4xo4i zkR1S|C4jU65HA3Vp8)a?0NEer7%=<*vNr&+22fl9NbdmB4}kOvpnL<6769@yfb;|) z-vUTS0Qnby7zu3j4V0-@V31&_>v(+mYm=A$=7b3fpQOUSg4DbW#IC7-NW*WVr7(qgz6BrXdSziu@B)uW?6Cubcz(&o4+=Q2oK z1}GlsAkE5f&qsXnp+%?EdL!6C;?h9ziy1TOBj5jbIk|7q$Cpu;bfrNOQb37a>$&H@ zyzKRCpG$AZ@s+=1LE@4?asIo@)4pnW?4JL4q2m6NGkrkf5lY- p0P+t2=^t|q7&L(F9YDMS$QJ<86XtL3Q%IB97+}J<`Hw9N697F8AZP#p diff --git a/pg_data/base/16384/25066 b/pg_data/base/16384/25066 index 3339dc876867621312d13208b98c00b2c6bd8dd2..67f2ddc2ad68a9aee061b5faea2213c9ce190657 100644 GIT binary patch literal 8192 zcmeI1TS!zv7{_N^&C9B5iDFrKEUXo8D-kN0x#||1m$uziO7a3qRANY_nZ2k%h()ZF zd0(lA5G!{hyJ&cWd{G~^f{HAVXw{+&k+R2T&Ny@&I3T!BF&_s$&hD9Se&7H5GY{tg z0D!&b9z+S4fguE0nn>OfQH)@Vl7;c2UmbAz!l&Ma0R#mTmh~CSAZ+P72pbR1-JrS0j>a7 zfGfZi;0pXd3dEy#$I?)N;95nbP*Sv?{My%g=(njUC*D@@v~sB}OkI}r>1X#vZDm*5 zebcMOID4Q;Z`KtZ)akrSOG~}ebB-%Pox>9VuLuAFjk?3Sbh9o4mHJUtnZNz38>r78 zFTi>6(PZz;LRM$nS70-l6r`gC64g z_labE9O9O;BkoZ}gisQexPI;+Q*K(e-YkMsZWf91d^V82Vh|5zqTvsMQxzUUiOK~$ zei=sXK{HE0cA^|KM@bm)6TU0+9N9;nKY4R7FF87+yzlbt(1rSsg|hQhIfq-E4R&#) zuul9&5Q1i^G-&mBo`rKAW<1BE%RBOLzO=bt%&MX9C)eg}&GY>ObGLf_ z9W+XbCvp9x=~F@C`Eug4m~-!vJY-Lg?zxlc7<|3->uSLHDfXV#^GyP&v#Fh|4@Z4S zdqI7y@}(>Kkb0BtW39a7M#3A0crh~#PsW$7;FWrl^2+J>XOif-4KZOh8XFj2x`Ip2 zn|Mz;SDHN~EckzS#-DyEXUnQ$wbKp$-^Xeks&lgb4FB@{p>yPl(_(Wr_8^z8SacrM z_mOzC+B6)x6`hxwCX%BjNM`5D-m|(keHaq!#J(i!JREOBq45219`CL;;D7iSI=>7Fe=x4v^iz1OTk~3K;+Z diff --git a/pg_data/base/16384/25073 b/pg_data/base/16384/25073 index 48f4fb042ec88b50a7bf4fe1b96e3346810f8dc3..6c6375a692f5b7b6b56fb8695fb8c9cdf9a6a34a 100644 GIT binary patch delta 122 zcmZo@U~Fh$+`yustPr-0kpT!a7$(SnkY`ZvAhn!8@wCai!fbS0a@SQq+gs9fCk`ae3KYM<#Qn;k&p~%p Qmefr1Gr2aCZ`f-90HUfUmjD0& delta 44 wcmZo@U~Fh$+`ytB{=jo7BLfh~Fx-&;AkU%zV&9l=u+ee1{KNpZ$#?8k02$K_F8}}l diff --git a/pg_data/base/16384/25105 b/pg_data/base/16384/25105 index 7687dd61bc35e8d0d748d97b0e7e5703c5781e44..bc1141d4193f8031b60ddddaf82afdf8938a4412 100644 GIT binary patch delta 90 zcmZo@U~Fh$+`yusd?9QZBLfgCo`3f5yd*xMl83Y*Z=?k diff --git a/pg_data/base/16384/25106 b/pg_data/base/16384/25106 index 179abbf835588066fd86caefc486e5e8e4c58677..458c89e9ff5ffc8cc285b9fc95415659e3cb9be8 100644 GIT binary patch delta 71 zcmZo@U~Fh$+`yusydZoTBLfgf delta 44 wcmZo@U~Fh$+`ytBuHn6ukpT!~7;eaakY`Zn+a diff --git a/pg_data/base/16384/25107 b/pg_data/base/16384/25107 index a15035c71903ac8c7ebd4ff8c67841eeecaf5fa2..09a747ec849ab609941a49185b76b33ba2819af5 100644 GIT binary patch delta 90 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 delta 562271 zcmeIwc@h@_06^hMN>oyoR#YTfBxM&_q6JYAMTxXf)L%XzL4ezo>ba_`avQdrh%Eok6V;k4iUDLH)*Z3whu}MvC zO4oNoH#W6tP4A{|Zbr8>vs=5ZSE+Y(WdVtGm0Wd%Lgud!Pqf)I&Yo z;vVVI9_#Uz^h8g#v}G-CMNjo~&$O~f`qGNuTyvpSQPt4f>+}9jFd=s4qL* zk&bq(ull-g`nK=-z8^Z?iGJ*4KlO9JbgI+++Hald_s({%^Zn7E7ykO^-@hlFU3PBh z$xYK{$pZ!$V1NMz7+`<_1{h#~0R|XgfB^;=V1NMz7+`<_1{h#~0R|XgfB^;=V1NMz z7+`<_1{h#~0R|XgfB^;=V1NMz7+`<_1{h#~0R|XgfB^;=V1NMz7+`<_1{h#~0R|Xg zfB^;=V1NMz7+`<_1{h#~0R|XgfB^;=V1NMz7+`<_1{h#~0R|XgfB^;=V1NMz7+`<_ z1{h#~0R|XgfB^;=V1NMz7+`<_1{h#~0R|XgfB^;=V1NMz7+`<_1{h#~0R|XgfB^;= zV1NMz7+`<_1{h#~0R|XgfB^;=V1NMz7+`<_1{h#~0R|XgfB^;=V1NMz7+`<_1{h#~ z0R|XgfB^;=V1NMz7+`<_1{h#~0R|XgfB^;=V1NMz7+`<_1{h#~0R|XgfB^;=V1NMz z7+`<_1{h#~0R|XgfB^;=V1NMz7+`<_1{h#~0R|XgfB^;=V1NMz7+`<_1{h#~0R|Xg zfB^;=V1NMz7+`<_1{h#~0R|XgfB^;=V1NMz7+`<_1{h#~0R|XgfB^;=V1NMz7+`<_ z1{h#~0R|XgfB^;=V1NMz7+`<_1{h#~0R|XgfB^;=V1NMz7+`<_1{h#~0R|XgfB^;= zV1NMz7+`<_1{h#~0R|XgfB^;=V1NMz7+`<_1{h#~0R|XgfB^;=V1NMz7+`<_1{h#~ z0R|XgfB^;=V1NMz7+`<_1{h#~0R|XgfB^;=V1NMz7+`<_1{h#~0R|XgfB^;=V1NMz z7+`<_1{h#~0R|XgfB^;=V1NMz7+`<_1{h#~0R|XgfB^;=V1NMz7+`<_1{h#~0R|Xg zfB^;=V1NMz7+`<_1{h#~0R|XgfB^;=V1NMz7+`<_1{h#~0R|XgfB^;=V1NMz7+`<_ z1{h#~0R|XgfB^;=V1NMz7+`<_1{h#~0R|XgfB^;=V1NMz7+`<_1{h#~0R|XgfB^;= zV1NMz7+`<_1{h#~0R|XgfB^;=V1NMz7+`<_1{h#~0R|XgfB^;=V1NMz7+`<_1{h#~ z0R|XgfB^;=V1NMz7+`<_1{h#~0R|XgfB^;=V1NMz7+`<_1{h#~0R|XgfB^;=V1NMz z7+`<_1{h#~0R|XgfB^;=V1NMz7+`<_1{h#~0R|XgfB^;=V1NMz7+`<_1{h#~0R|Xg zfB^;=V1NMz7+`<_1{h#~0R|XgfB^;=V1NMz7+`<_1{h#~0R|XgfB^;=V1NMz7+`<_ z1{h#~0R|XgfB^;=V1NMz7+`<_1{h#~0R|XgfB^;=V1NMz7+`<_1{h#~0R|XgfB^;= zV1NMz7+`<_1{h#~0R|XgfB^;=V1NMz7+`<_1{h#~0R|XgfB^;=V1NMz7+`<_1{h#~ z0R|XgfB^;=V1NMz7+`<_1{h#~0R|XgfB^;=V1NMz7+`<_1{h#~0R|XgfB^;=V1NMz z7+`<_1{h#~0R|XgfB^;=V1NMz7+`<_1{h#~0R|XgfB^;=V1NMz7+`<_1{h#~0R|Xg zfB^;=V1NMz7+`<_1{h#~0R|XgfB^;=V1NMz7+`<_1{h#~0R|XgfB^;=V1NMz7+`<_ z1{h#~0R|XgfB^;=V1NMz7+`<_1{h#~0R|XgfB^;=V1NMz7+`<_1{h#~0R|XgfB^;= zV1NMz7+`<_1{h#~0R|XgfB^;=V1NMz7+`<_1{h#~0R|XgfB^;=V1NMz7+`<_1{h#~ z0R|XgfB^;=V1NMz7+`<_1{h#~0R|XgfB^;=V1NMz7+`<_1{h#~0R|XgfB^;=V1NMz z7+`<_1{h#~0R|XgfB^;=V1NMz7+`<_1{h#~0R|XgfB^;=V1NMz7+`<_1{h#~0R|Xg zfB^;=V1NMz7+`<_1{h#~0R|XgfB^;=V1NMz7+`<_1{h#~0R|XgfB^;=V1NMz7+`<_ z1{h#~0R|XgfB^;=V1NMz7+`<_1{h#~0R|XgfB^;=V1NMz7+`<_1{h#~0R|XgfB^;= zV1NMz7+`<_1{h#~0R|XgfB^;=V1NMz7+`<_1{h#~0R|XgfB^;=V1NMz7+`<_1{h#~ z0R|XgfB^;=V1NMz7+`<_1{h#~0R|XgfB^;=V1NMz7+`<_1{h#~0R|XgfB^;=V1NMz z7+`<_1{h#~0R|XgfB^;=V1NMz7+`<_1{h#~0R|XgfB^;=V1NMz7+`<_1{h#~0R|Xg zfB^;=V1NMz7+`<_1{h#~0R|XgfB^;=V1NMz7+`<_1{h#~0R|XgfB^;=V1NMz7+`<_ z1{h#~0R|XgfB^;=V1NMz7+`<_1{h#~0R|XgfB^;=V1NMz7+`<_1{h#~0R|XgfB^;= zV1NMz7+`<_1{h#~0R|XgfB^;=V1NMz7+`<_1{h#~0R|XgfB^;=V1NMz7+`<_1{h#~ z0R|XgfB^;=V1NMz7+`<_1{h#~0R|XgfB^;=V1NMz7+`<_1{h#~0R|XgfB^;=V1NMz z7+`<_1{h#~0R|XgfB^;=V1NMz7+`<_1{h#~0R|XgfB^;=V1NMz7+`<_1{h#~0R|Xg zfB^;=V1NMz7+`<_1{h#~0R|XgfB^;=V1NMz7+`<_1{h#~0R|XgfB^;=V1NMz7+`<_ z1{h#~0R|XgfB^;=V1NMz7+`<_1{h#~0R|XgfB^;=V1NMz7+`<_1{h#~0R|XgfB^;= zV1NMz7+`<_1{h#~0R|XgfB^;=V1NMz7+`<_1{h#~0R|XgfB^;=V1NMz7+`<_1{h#~ z0R|XgfB^;=V1NMz7+`<_1{h#~0R|XgfB^;=V1NMz7+`<_1{h#~0R|XgfB^;=V1NMz z7+`<_1{h#~0R|XgfB^;=V1NMz7+`<_1{h#~0R|XgfB^;=V1NMz7+`<_1{h#~0R|Xg zfB^;=V1NMz7+`<_1{h#~0R|XgfB^;=V1NMz7+`<_1{h#~0R|XgfB^;=V1NMz7+`<_ z1{h#~0R|XgfB^;=V1NMz7+`<_1{h#~0R|XgfB^;=V1NMz7+`<_1{h#~0R|XgfB^;= zV1NMz7+`<_1{h#~0R|XgfB^;=V1NMz7+`<_1{h#~0R|XgfB^;=V1NMz7+`<_1{h#~ z0R|XgfB^;=V1NMz7+`<_1{h#~0R|XgfB^;=V1NMz7+`<_1{h#~0R|XgfB^;=V1NMz z7+`<_1{h#~0R|XgfB^;=V1NMz7+`<_1{h#~0R|XgfB^;=V1NMz7+`<_1{h#~0R|Xg zfB^;=V1NMz7+`<_1{h#~0R|XgfB^;=V1NMz7+`<_1{h#~0R|XgfB^;=V1NMz7+`<_ z1{h#~0R|XgfB^;=V1NMz7+`<_1{h#~0R|XgfB^;=V1NMz7+`<_1{h#~0R|XgfB^;= zV1NMz7+`<_1{h#~0R|XgfB^;=V1NMz7+`<_1{h#~0R|XgfB^;=V1NMz7+`<_1{h#~ z0R|XgfB^;=V1NMz7+`<_1{h#~0R|XgfB^;=V1NMz7+`<_1{h#~0R|XgfB^;=V1NMz z7+`<_1{h#~0R|XgfB^;=V1NMz7+`<_1{h#~0R|XgfB^;=V1NMz7+`<_1{h#~0R|Xg hfB^;=V1NMz7+`<_1{h#~0R|Xg;Qwpj_|zd|{sT5a^(O!T diff --git a/pg_data/pg_xact/0000 b/pg_data/pg_xact/0000 index 3a30c261be73f1b8e75926135c1e1824d2ae1ffd..6f73d0ee0d41f76d4ccee5dc0567a2031695248c 100644 GIT binary patch delta 21 ZcmZp0XmFTtj6D<#L^od4m!J561prza2sQu! delta 15 WcmZp0XmFTtjFEBUMSb~+54Zp^Ee0e2