From c77086ad2d7949ab36dd0c4e0b59907e672dd64f Mon Sep 17 00:00:00 2001
From: 云 <2163098428@qq.com>
Date: 星期五, 18 九月 2026 15:04:42 +0800
Subject: [PATCH] Merge remote-tracking branch 'refs/remotes/origin/dev_pro2.0' into dev_宁夏_九泓化工
---
src/views/erp/purchase/invoice/modules/purchase-order-select.vue | 194 ++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 194 insertions(+), 0 deletions(-)
diff --git a/src/views/erp/purchase/invoice/modules/purchase-order-select.vue b/src/views/erp/purchase/invoice/modules/purchase-order-select.vue
new file mode 100644
index 0000000..59e969b
--- /dev/null
+++ b/src/views/erp/purchase/invoice/modules/purchase-order-select.vue
@@ -0,0 +1,194 @@
+<script lang="ts" setup>
+import type { VxeTableGridOptions } from '#/adapter/vxe-table';
+import type { ErpPurchaseOrderApi } from '#/api/erp/purchase/order';
+
+import { computed, nextTick, ref, watch } from 'vue';
+
+import { DICT_TYPE } from '@vben/constants';
+import { IconifyIcon } from '@vben/icons';
+
+import { Input, message, Modal } from 'ant-design-vue';
+
+import { useVbenVxeGrid } from '#/adapter/vxe-table';
+import {
+ getPurchaseOrder,
+ getPurchaseOrderPage,
+} from '#/api/erp/purchase/order';
+
+defineOptions({ name: 'ErpPurchaseInvoiceOrderSelect' });
+
+const props = withDefaults(
+ defineProps<{
+ disabled?: boolean;
+ modelValue?: number;
+ placeholder?: string;
+ }>(),
+ {
+ disabled: false,
+ modelValue: undefined,
+ placeholder: '璇烽�夋嫨閲囪喘璁㈠崟',
+ },
+);
+const emit = defineEmits<{
+ change: [order: ErpPurchaseOrderApi.PurchaseOrder | undefined];
+ 'update:modelValue': [value: number | undefined];
+}>();
+
+const open = ref(false); // 閫夋嫨寮圭獥鏄惁鎵撳紑
+const order = ref<ErpPurchaseOrderApi.PurchaseOrder>(); // 褰撳墠閫変腑閲囪喘璁㈠崟
+
+const displayNo = computed(() => order.value?.no ?? '');
+
+/** 鏍规嵁璁㈠崟缂栧彿鍥炴樉閫夋嫨鍣� */
+async function resolveOrderById(id: number | undefined) {
+ if (!id) {
+ order.value = undefined;
+ return;
+ }
+ if (order.value?.id === id) {
+ return;
+ }
+ order.value = await getPurchaseOrder(id);
+}
+
+watch(
+ () => props.modelValue,
+ (value) => {
+ resolveOrderById(value);
+ },
+ { immediate: true },
+);
+
+/** 琛ㄦ牸閰嶇疆 */
+const [Grid, gridApi] = useVbenVxeGrid({
+ formOptions: {
+ schema: [
+ {
+ fieldName: 'no',
+ label: '璁㈠崟鍗曞彿',
+ component: 'Input',
+ componentProps: {
+ placeholder: '璇疯緭鍏ヨ鍗曞崟鍙�',
+ allowClear: true,
+ },
+ },
+ ],
+ },
+ gridOptions: {
+ columns: [
+ { type: 'radio', width: 50, fixed: 'left' },
+ { field: 'no', title: '璁㈠崟鍗曞彿', width: 200, fixed: 'left' },
+ { field: 'supplierName', title: '渚涘簲鍟�', minWidth: 120 },
+ {
+ field: 'orderTime',
+ title: '璁㈠崟鏃堕棿',
+ width: 160,
+ formatter: 'formatDate',
+ },
+ {
+ field: 'totalPrice',
+ title: '鍚◣閲戦',
+ formatter: 'formatAmount2',
+ minWidth: 120,
+ },
+ {
+ field: 'remainInvoicePrice',
+ title: '鏈紑绁ㄩ噾棰�',
+ formatter: 'formatAmount2',
+ minWidth: 120,
+ },
+ {
+ field: 'status',
+ title: '鐘舵��',
+ minWidth: 100,
+ cellRender: {
+ name: 'CellDict',
+ props: { type: DICT_TYPE.ERP_AUDIT_STATUS },
+ },
+ },
+ ],
+ height: 520,
+ keepSource: true,
+ proxyConfig: {
+ ajax: {
+ query: async ({ page }, formValues) => {
+ return await getPurchaseOrderPage({
+ pageNo: page.currentPage,
+ pageSize: page.pageSize,
+ status: 20, // 浠呭睍绀哄凡瀹℃牳閫氳繃鐨勯噰璐鍗�
+ remainPriceEnable: true, // 浠呭睍绀哄墿浣欏彲寮�绁ㄩ噾棰濆ぇ浜� 0 鐨勮鍗曪紙閲戦宸插紑瀹岀殑涓嶅睍绀猴級
+ ...formValues,
+ });
+ },
+ },
+ },
+ rowConfig: {
+ keyField: 'id',
+ isHover: true,
+ },
+ radioConfig: {
+ trigger: 'row',
+ highlight: true,
+ },
+ toolbarConfig: {
+ refresh: true,
+ search: true,
+ },
+ } as VxeTableGridOptions<ErpPurchaseOrderApi.PurchaseOrder>,
+ gridEvents: {
+ radioChange: ({ row }: { row: ErpPurchaseOrderApi.PurchaseOrder }) => {
+ order.value = row;
+ },
+ },
+});
+
+/** 鎵撳紑閫夋嫨寮圭獥 */
+async function handleOpen() {
+ if (props.disabled) {
+ return;
+ }
+ open.value = true;
+ await nextTick();
+ gridApi.query();
+}
+
+/** 纭閫夋嫨閲囪喘璁㈠崟 */
+function handleOk() {
+ if (!order.value?.id) {
+ message.warning('璇烽�夋嫨閲囪喘璁㈠崟');
+ return;
+ }
+ emit('update:modelValue', order.value.id);
+ emit('change', order.value);
+ open.value = false;
+}
+</script>
+
+<template>
+ <div>
+ <Input
+ readonly
+ :disabled="disabled"
+ :placeholder="placeholder"
+ :value="displayNo"
+ @click="handleOpen"
+ >
+ <template #suffix>
+ <IconifyIcon
+ class="size-4 cursor-pointer"
+ icon="lucide:search"
+ :style="{ cursor: disabled ? 'not-allowed' : 'pointer' }"
+ />
+ </template>
+ </Input>
+ <Modal
+ v-model:open="open"
+ title="閫夋嫨閲囪喘璁㈠崟锛堜粎宸插鏍搁�氳繃锛�"
+ width="80%"
+ @cancel.stop="open = false"
+ @ok.stop="handleOk"
+ >
+ <Grid table-title="閲囪喘璁㈠崟鍒楄〃" />
+ </Modal>
+ </div>
+</template>
--
Gitblit v1.9.3