From a1d7e81859f554f3a53680cc35f0f49bf1f77098 Mon Sep 17 00:00:00 2001
From: wwf <1971391498@qq.com>
Date: 星期四, 14 五月 2026 14:37:02 +0800
Subject: [PATCH] 导入项目

---
 src/views/erp/finance/receipt/components/FinanceReceiptItemForm.vue |  176 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 176 insertions(+), 0 deletions(-)

diff --git a/src/views/erp/finance/receipt/components/FinanceReceiptItemForm.vue b/src/views/erp/finance/receipt/components/FinanceReceiptItemForm.vue
new file mode 100644
index 0000000..1a48b41
--- /dev/null
+++ b/src/views/erp/finance/receipt/components/FinanceReceiptItemForm.vue
@@ -0,0 +1,176 @@
+<template>
+  <el-form
+    ref="formRef"
+    :model="formData"
+    :rules="formRules"
+    v-loading="formLoading"
+    label-width="0px"
+    :inline-message="true"
+    :disabled="disabled"
+  >
+    <el-table :data="formData" show-summary :summary-method="getSummaries" class="-mt-10px">
+      <el-table-column label="搴忓彿" type="index" align="center" width="60" />
+      <el-table-column label="閿�鍞崟鎹紪鍙�" min-width="200">
+        <template #default="{ row }">
+          <el-form-item class="mb-0px!">
+            <el-input disabled v-model="row.bizNo" />
+          </el-form-item>
+        </template>
+      </el-table-column>
+      <el-table-column label="搴斾粯閲戦" prop="totalPrice" fixed="right" min-width="100">
+        <template #default="{ row }">
+          <el-form-item class="mb-0px!">
+            <el-input disabled v-model="row.totalPrice" :formatter="erpPriceInputFormatter" />
+          </el-form-item>
+        </template>
+      </el-table-column>
+      <el-table-column label="宸蹭粯閲戦" prop="receiptedPrice" fixed="right" min-width="100">
+        <template #default="{ row }">
+          <el-form-item class="mb-0px!">
+            <el-input disabled v-model="row.receiptedPrice" :formatter="erpPriceInputFormatter" />
+          </el-form-item>
+        </template>
+      </el-table-column>
+      <el-table-column label="鏈鏀舵" prop="receiptPrice" fixed="right" min-width="115">
+        <template #default="{ row, $index }">
+          <el-form-item :prop="`${$index}.receiptPrice`" class="mb-0px!">
+            <el-input-number
+              v-model="row.receiptPrice"
+              controls-position="right"
+              :precision="2"
+              class="!w-100%"
+            />
+          </el-form-item>
+        </template>
+      </el-table-column>
+      <el-table-column label="澶囨敞" min-width="150">
+        <template #default="{ row, $index }">
+          <el-form-item :prop="`${$index}.remark`" class="mb-0px!">
+            <el-input v-model="row.remark" placeholder="璇疯緭鍏ュ娉�" />
+          </el-form-item>
+        </template>
+      </el-table-column>
+      <el-table-column align="center" fixed="right" label="鎿嶄綔" width="60">
+        <template #default="{ $index }">
+          <el-button @click="handleDelete($index)" link>鈥�</el-button>
+        </template>
+      </el-table-column>
+    </el-table>
+  </el-form>
+  <el-row justify="center" class="mt-3" v-if="!disabled">
+    <el-button @click="handleOpenSaleOut" round>+ 娣诲姞閿�鍞嚭搴撳崟</el-button>
+    <el-button @click="handleOpenSaleReturn" round>+ 娣诲姞閿�鍞��璐у崟</el-button>
+  </el-row>
+
+  <!-- 鍙敹娆剧殑銆愰攢鍞嚭搴撳崟銆戝垪琛� -->
+  <SaleOutReceiptEnableList ref="saleOutReceiptEnableListRef" @success="handleAddSaleOut" />
+  <!-- 鍙敹娆剧殑銆愰攢鍞嚭搴撳崟銆戝垪琛� -->
+  <SaleReturnRefundEnableList ref="saleReturnRefundEnableListRef" @success="handleAddSaleReturn" />
+</template>
+<script setup lang="ts">
+import { ProductVO } from '@/api/erp/product/product'
+import { erpPriceInputFormatter, getSumValue } from '@/utils'
+import SaleOutReceiptEnableList from '@/views/erp/sale/out/components/SaleOutReceiptEnableList.vue'
+import SaleReturnRefundEnableList from '@/views/erp/sale/return/components/SaleReturnRefundEnableList.vue'
+import { SaleOutVO } from '@/api/erp/sale/out'
+import { ErpBizType } from '@/utils/constants'
+import { SaleReturnVO } from '@/api/erp/sale/return'
+
+const props = defineProps<{
+  items: undefined
+  customerId: undefined
+  disabled: false
+}>()
+const message = useMessage()
+
+const formLoading = ref(false) // 琛ㄥ崟鐨勫姞杞戒腑
+const formData = ref([])
+const formRules = reactive({
+  receiptPrice: [{ required: true, message: '鏈鏀舵涓嶈兘涓虹┖', trigger: 'blur' }]
+})
+const formRef = ref([]) // 琛ㄥ崟 Ref
+const productList = ref<ProductVO[]>([]) // 浜у搧鍒楄〃
+
+/** 鍒濆鍖栬缃嚭搴撻」 */
+watch(
+  () => props.items,
+  async (val) => {
+    formData.value = val
+  },
+  { immediate: true }
+)
+
+/** 鍚堣 */
+const getSummaries = (param: SummaryMethodProps) => {
+  const { columns, data } = param
+  const sums: string[] = []
+  columns.forEach((column, index: number) => {
+    if (index === 0) {
+      sums[index] = '鍚堣'
+      return
+    }
+    if (['totalPrice', 'receiptedPrice', 'receiptPrice'].includes(column.property)) {
+      const sum = getSumValue(data.map((item) => Number(item[column.property])))
+      sums[index] = erpPriceInputFormatter(sum)
+    } else {
+      sums[index] = ''
+    }
+  })
+  return sums
+}
+
+/** 鏂板銆愰攢鍞嚭搴撱�戞寜閽搷浣� */
+const saleOutReceiptEnableListRef = ref()
+const handleOpenSaleOut = () => {
+  if (!props.customerId) {
+    message.error('璇烽�夋嫨瀹㈡埛')
+    return
+  }
+  saleOutReceiptEnableListRef.value.open(props.customerId)
+}
+const handleAddSaleOut = (rows: SaleOutVO[]) => {
+  rows.forEach((row) => {
+    formData.value.push({
+      bizId: row.id,
+      bizType: ErpBizType.SALE_OUT,
+      bizNo: row.no,
+      totalPrice: row.totalPrice,
+      receiptedPrice: row.receiptPrice,
+      receiptPrice: row.totalPrice - row.receiptPrice
+    })
+  })
+}
+
+/** 鏂板銆愰攢鍞��璐с�戞寜閽搷浣� */
+const saleReturnRefundEnableListRef = ref()
+const handleOpenSaleReturn = () => {
+  if (!props.customerId) {
+    message.error('璇烽�夋嫨瀹㈡埛')
+    return
+  }
+  saleReturnRefundEnableListRef.value.open(props.customerId)
+}
+const handleAddSaleReturn = (rows: SaleReturnVO[]) => {
+  rows.forEach((row) => {
+    formData.value.push({
+      bizId: row.id,
+      bizType: ErpBizType.SALE_RETURN,
+      bizNo: row.no,
+      totalPrice: -row.totalPrice,
+      receiptedPrice: -row.refundPrice,
+      receiptPrice: -row.totalPrice + row.refundPrice
+    })
+  })
+}
+
+/** 鍒犻櫎鎸夐挳鎿嶄綔 */
+const handleDelete = (index: number) => {
+  formData.value.splice(index, 1)
+}
+
+/** 琛ㄥ崟鏍¢獙 */
+const validate = () => {
+  return formRef.value.validate()
+}
+defineExpose({ validate })
+</script>

--
Gitblit v1.8.0