Pārlūkot izejas kodu

feat(web-admin): add optional occur date on reimburse apply details

Allow picking YYYY-MM-DD per detail line and show it in the view dialog.

Co-authored-by: Cursor <cursoragent@cursor.com>
zlwu 2 mēneši atpakaļ
vecāks
revīzija
8f032488a4
1 mainītis faili ar 25 papildinājumiem un 8 dzēšanām
  1. 25 8
      web-admin/src/views/bx/reimburse/apply/index.vue

+ 25 - 8
web-admin/src/views/bx/reimburse/apply/index.vue

@@ -291,6 +291,7 @@
                 <th class="col-expense">费用项目<span class="th-required">*</span></th>
                 <th class="col-amount">金额(元)<span class="th-required">*</span></th>
                 <th class="col-remark">报销事由<span class="th-required">*</span></th>
+                <th class="col-occur">发生时间</th>
                 <th class="col-action">操作</th>
               </tr>
             </thead>
@@ -321,6 +322,16 @@
                 <td class="col-remark">
                   <el-input v-model="line.remark" placeholder="请输入报销事由" />
                 </td>
+                <td class="col-occur">
+                  <el-date-picker
+                    v-model="line.occurDate"
+                    type="date"
+                    value-format="YYYY-MM-DD"
+                    placeholder="可选"
+                    clearable
+                    style="width: 100%"
+                  />
+                </td>
                 <td class="col-action">
                   <el-button
                     v-if="addForm.details.length > 1"
@@ -523,6 +534,9 @@
             <el-table-column prop="remark" label="报销事由" min-width="140" align="left" header-align="center">
               <template #default="{ row }">{{ row.remark || '-' }}</template>
             </el-table-column>
+            <el-table-column prop="occurDate" label="发生时间" min-width="120" align="center" header-align="center">
+              <template #default="{ row }">{{ row.occurDate || '—' }}</template>
+            </el-table-column>
           </ListTable>
         </div>
 
@@ -649,6 +663,7 @@ interface DetailLine {
   expenseItemId: string
   amount: number | string
   remark: string
+  occurDate: string
 }
 
 const loadingMap = reactive<Record<string, boolean>>({})
@@ -759,7 +774,7 @@ const addForm = reactive({
   reimburseDate: todayYmd(),
   title: '',
   remark: '',
-  details: [{ expenseItemId: '', amount: '' as number | string, remark: '' }] as DetailLine[]
+  details: [{ expenseItemId: '', amount: '' as number | string, remark: '', occurDate: '' }] as DetailLine[]
 })
 
 const viewData = ref<Record<string, any>>({})
@@ -1014,7 +1029,7 @@ async function openAddDialog() {
   addForm.reimburseDate = todayYmd()
   addForm.title = ''
   addForm.remark = ''
-  addForm.details = [{ expenseItemId: '', amount: '', remark: '' }]
+  addForm.details = [{ expenseItemId: '', amount: '', remark: '', occurDate: '' }]
   selectedInvoicePicks.value = []
   editingId.value = null
   titleAutoLinked.value = true
@@ -1100,10 +1115,11 @@ async function openEditDialog(row: any) {
     addForm.details = (data.details || []).map((d: any) => ({
       expenseItemId: d.expenseId,
       amount: d.amount,
-      remark: d.remark || ''
+      remark: d.remark || '',
+      occurDate: d.occurDate || ''
     }))
     if (addForm.details.length === 0) {
-      addForm.details = [{ expenseItemId: '', amount: '', remark: '' }]
+      addForm.details = [{ expenseItemId: '', amount: '', remark: '', occurDate: '' }]
     }
     editingId.value = row.id
     const invoices = Array.isArray(data.invoices) ? data.invoices : []
@@ -1119,7 +1135,7 @@ async function openEditDialog(row: any) {
 }
 
 function addDetailLine() {
-  addForm.details.push({ expenseItemId: '', amount: '', remark: '' })
+  addForm.details.push({ expenseItemId: '', amount: '', remark: '', occurDate: '' })
 }
 
 function removeDetailLine(index: number) {
@@ -1227,7 +1243,7 @@ type AddPayload = {
   remark: string
   invoiceIds: string[]
   invoiceLinks: { invoiceId: string; attachmentId: string }[]
-  details: { expenseItemId: string; amount: number; remark: string }[]
+  details: { expenseItemId: string; amount: number; remark: string; occurDate?: string }[]
 }
 
 function buildAddPayload(): AddPayload | null {
@@ -1256,7 +1272,8 @@ function buildAddPayload(): AddPayload | null {
     details: validDetails.map((d) => ({
       expenseItemId: String(d.expenseItemId),
       amount: Number(d.amount),
-      remark: String(d.remark).trim()
+      remark: String(d.remark).trim(),
+      occurDate: d.occurDate ? String(d.occurDate) : undefined
     }))
   }
 }
@@ -1267,7 +1284,7 @@ function resetAddForm() {
   addForm.reimburseDate = todayYmd()
   addForm.title = ''
   addForm.remark = ''
-  addForm.details = [{ expenseItemId: '', amount: '', remark: '' }]
+  addForm.details = [{ expenseItemId: '', amount: '', remark: '', occurDate: '' }]
   selectedInvoicePicks.value = []
   editingId.value = null
 }