Преглед на файлове

feat(bx): add apply-attachment upload UI on reimburse apply dialog

Co-authored-by: Cursor <cursoragent@cursor.com>
zlwu преди 2 месеца
родител
ревизия
24aca104ad
променени са 1 файла, в които са добавени 24 реда и са изтрити 1 реда
  1. 24 1
      web-admin/src/views/bx/reimburse/apply/index.vue

+ 24 - 1
web-admin/src/views/bx/reimburse/apply/index.vue

@@ -551,6 +551,17 @@
         </div>
       </div>
 
+      <div class="form-section">
+        <h4>申请附件(可选)</h4>
+        <BxAttachmentUpload
+          ref="applyAttachmentRef"
+          v-model="applyAttachments"
+          biz-type="reimburse_apply"
+          :biz-id="editingId || 0"
+          hint="补充行程单、说明截图、合同等;与发票夹无关。支持图片、视频、PDF、Office、压缩包等。"
+        />
+      </div>
+
       <el-form label-position="top" class="bx-dialog-form">
         <el-form-item label="备注说明">
           <el-input v-model="addForm.remark" type="textarea" :rows="4" placeholder="请输入报销说明" />
@@ -859,6 +870,7 @@ import BxApprovalFlowTabs from '@/components/bx/base/BxApprovalFlowTabs.vue'
 import BxViewKvGrid from '@/components/bx/base/BxViewKvGrid.vue'
 import BxViewKvTable from '@/components/bx/base/BxViewKvTable.vue'
 import BxAttachmentReadonly from '@/components/bx/base/BxAttachmentReadonly.vue'
+import BxAttachmentUpload from '@/components/bx/base/BxAttachmentUpload.vue'
 import BxInvoiceSelectDialog from '@/components/bx/base/BxInvoiceSelectDialog.vue'
 import type { ViewField } from '@/components/business/system-view-dialog/types'
 import { bxViewKv, bxViewKvLong, bxViewKvMoney } from '@/utils/bx/view-kv'
@@ -1120,6 +1132,8 @@ type SelectedInvoicePick = {
 }
 
 const selectedInvoicePicks = ref<SelectedInvoicePick[]>([])
+const applyAttachmentRef = ref<InstanceType<typeof BxAttachmentUpload> | null>(null)
+const applyAttachments = ref<BxAttachmentItem[]>([])
 const invoiceSelectVisible = ref(false)
 const walletBalance = ref(0)
 const editingId = ref<number | null>(null)
@@ -1325,6 +1339,7 @@ async function openAddDialog() {
   addForm.remark = ''
   addForm.details = [{ expenseItemId: '', amount: '', remark: '', occurDate: '' }]
   selectedInvoicePicks.value = []
+  applyAttachments.value = []
   editingId.value = null
   titleAutoLinked.value = true
   dialogs.add = true
@@ -1422,7 +1437,14 @@ async function openEditDialog(row: any) {
     await Promise.all([
       loadApplicantOptions(),
       refreshWalletBalance(),
-      loadSelectedPicksFromInvoices(invoices)
+      loadSelectedPicksFromInvoices(invoices),
+      loadBxAttachments('reimburse_apply', row.id)
+        .then((files) => {
+          applyAttachments.value = files
+        })
+        .catch(() => {
+          applyAttachments.value = []
+        })
     ])
   } catch (e: any) {
     ElMessage.error(e.message || '加载失败')
@@ -1671,6 +1693,7 @@ function resetAddForm() {
   addForm.remark = ''
   addForm.details = [{ expenseItemId: '', amount: '', remark: '', occurDate: '' }]
   selectedInvoicePicks.value = []
+  applyAttachments.value = []
   editingId.value = null
 }