赛事管理新增bug
This commit is contained in:
parent
4276180a08
commit
dfbd252ed1
@ -295,6 +295,14 @@ const rules = {
|
||||
|
||||
const validate = async () => {
|
||||
if (!formRef.value) return false;
|
||||
|
||||
// 1. 验证必须选择至少一个项目
|
||||
if (!localFormData.value.projects || localFormData.value.projects.length === 0) {
|
||||
ElMessage.warning('请至少选择一个项目');
|
||||
return false;
|
||||
}
|
||||
|
||||
// 2. 验证表单字段(限报数等)
|
||||
return await formRef.value.validate();
|
||||
};
|
||||
|
||||
|
||||
@ -17,10 +17,11 @@
|
||||
|
||||
<el-divider content-position="center" style="margin: 60px 0 40px;">账户信息</el-divider>
|
||||
<div v-if="localFormData.chargeMode !== 0" class="account-panel">
|
||||
<el-form-item label="收款商户" prop="merchantId" required style="margin-bottom: 14px;">
|
||||
<el-select v-model="localFormData.merchantId" filterable placeholder="请选择商户" @change="syncMerchantInfo" style="width: 100%">
|
||||
<el-option v-for="m in merchantOptions" :key="m.value" :label="m.label" :value="m.value" />
|
||||
</el-select>
|
||||
<el-form-item label="收款账户" prop="merchantId" required style="margin-bottom: 14px;">
|
||||
<div style="display: flex; align-items: center; gap: 12px;">
|
||||
<el-input v-model="localFormData.merchantName" disabled placeholder="-" style="flex: 1;" />
|
||||
<el-button type="primary" @click="openMerchantDialog">选择账户</el-button>
|
||||
</div>
|
||||
</el-form-item>
|
||||
|
||||
<div class="account-grid">
|
||||
@ -29,15 +30,15 @@
|
||||
<el-input v-model="localFormData.merchantName" disabled placeholder="-" />
|
||||
</div>
|
||||
<div class="account-item">
|
||||
<div class="account-item__label">统一信用代码</div>
|
||||
<div class="account-item__label">统一社会信用代码</div>
|
||||
<el-input v-model="localFormData.creditCode" disabled placeholder="-" />
|
||||
</div>
|
||||
<div class="account-item">
|
||||
<div class="account-item__label">开户银行</div>
|
||||
<div class="account-item__label">开户行</div>
|
||||
<el-input v-model="localFormData.bankName" disabled placeholder="-" />
|
||||
</div>
|
||||
<div class="account-item">
|
||||
<div class="account-item__label">银行账号</div>
|
||||
<div class="account-item__label">收款账号</div>
|
||||
<el-input v-model="localFormData.accountNumber" disabled placeholder="-" />
|
||||
</div>
|
||||
<div class="account-item">
|
||||
@ -58,6 +59,70 @@
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row> -->
|
||||
|
||||
<!-- 商户选择弹窗 -->
|
||||
<el-dialog
|
||||
v-model="merchantDialogVisible"
|
||||
title="选择收款账户"
|
||||
width="1200px"
|
||||
:close-on-click-modal="false"
|
||||
>
|
||||
<div class="merchant-search">
|
||||
<el-form :inline="true" :model="searchForm">
|
||||
<el-form-item label="商户名称">
|
||||
<el-input v-model="searchForm.merchantName" placeholder="请输入" clearable />
|
||||
</el-form-item>
|
||||
<el-form-item label="账号">
|
||||
<el-input v-model="searchForm.accountNumber" placeholder="请输入" clearable />
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
<el-button @click="resetSearch">重置</el-button>
|
||||
<el-button type="primary" @click="searchMerchants">查询</el-button>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
</div>
|
||||
<div class="merchant-table">
|
||||
<el-table :data="merchantList" style="width: 100%" border>
|
||||
<el-table-column prop="index" label="序号" width="80" align="center">
|
||||
<template #default="{ $index }">
|
||||
{{ (merchantPage.PageNo - 1) * merchantPage.PageSize + $index + 1 }}
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="merchantName" label="商户名称" min-width="220" />
|
||||
<el-table-column prop="creditCode" label="统一社会信用代码" min-width="200" />
|
||||
<el-table-column prop="bankName" label="开户行" min-width="180" />
|
||||
<el-table-column prop="accountNumber" label="收款账号" min-width="220" />
|
||||
<el-table-column prop="businessLicenseUrl" label="营业执照" width="120" align="center">
|
||||
<template #default="{ row }">
|
||||
<el-image
|
||||
v-if="row.businessLicenseUrl"
|
||||
:src="row.businessLicenseUrl"
|
||||
:preview-src-list="[row.businessLicenseUrl]"
|
||||
style="width: 60px; height: 60px;"
|
||||
fit="cover"
|
||||
/>
|
||||
<span v-else>-</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="操作" width="100" align="center">
|
||||
<template #default="{ row }">
|
||||
<el-button type="primary" link @click="selectMerchant(row)">使用</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
</div>
|
||||
<div class="merchant-pagination" style="margin-top: 20px; display: flex; justify-content: flex-end;">
|
||||
<el-pagination
|
||||
v-model:current-page="merchantPage.PageNo"
|
||||
v-model:page-size="merchantPage.PageSize"
|
||||
:page-sizes="[10, 20, 50, 100]"
|
||||
:total="merchantPage.Total"
|
||||
layout="total, sizes, prev, pager, next, jumper"
|
||||
@size-change="searchMerchants"
|
||||
@current-change="searchMerchants"
|
||||
/>
|
||||
</div>
|
||||
</el-dialog>
|
||||
</el-form>
|
||||
</template>
|
||||
|
||||
@ -123,9 +188,9 @@ const syncMerchantInfo = () => {
|
||||
localFormData.value.creditCode = '';
|
||||
localFormData.value.bankName = '';
|
||||
localFormData.value.accountNumber = '';
|
||||
businessLicenseUrl.value = '';
|
||||
return;
|
||||
}
|
||||
// el-select 可能返回 string/number,这里做宽松匹配避免找不到
|
||||
const m = (merchantOptions.value ?? []).find((x) => x?.value == id);
|
||||
localFormData.value.merchantName = m?.merchantName ?? '';
|
||||
localFormData.value.creditCode = m?.creditCode ?? '';
|
||||
@ -134,7 +199,60 @@ const syncMerchantInfo = () => {
|
||||
businessLicenseUrl.value = m?.businessLicenseUrl ?? '';
|
||||
};
|
||||
|
||||
// watch(() => localFormData.value.merchantId, syncMerchantInfo, { immediate: true , deep: true});
|
||||
// 商户选择弹窗相关
|
||||
const merchantDialogVisible = ref(false);
|
||||
const merchantList = ref([]);
|
||||
const merchantPage = ref({
|
||||
PageNo: 1,
|
||||
PageSize: 10,
|
||||
Total: 0
|
||||
});
|
||||
const searchForm = ref({
|
||||
merchantName: '',
|
||||
accountNumber: ''
|
||||
});
|
||||
|
||||
const openMerchantDialog = () => {
|
||||
merchantDialogVisible.value = true;
|
||||
merchantPage.value.PageNo = 1;
|
||||
searchMerchants();
|
||||
};
|
||||
|
||||
const searchMerchants = async () => {
|
||||
try {
|
||||
const params = {
|
||||
PageNo: merchantPage.value.PageNo,
|
||||
PageSize: merchantPage.value.PageSize
|
||||
};
|
||||
if (searchForm.value.merchantName) {
|
||||
params.merchantName = searchForm.value.merchantName;
|
||||
}
|
||||
const res = await merchantPageGet(params);
|
||||
merchantList.value = res?.data?.rows ?? [];
|
||||
merchantPage.value.Total = res?.data?.total ?? 0;
|
||||
} catch {
|
||||
merchantList.value = [];
|
||||
merchantPage.value.Total = 0;
|
||||
}
|
||||
};
|
||||
|
||||
const resetSearch = () => {
|
||||
searchForm.value.merchantName = '';
|
||||
searchForm.value.accountNumber = '';
|
||||
merchantPage.value.PageNo = 1;
|
||||
searchMerchants();
|
||||
};
|
||||
|
||||
const selectMerchant = (row) => {
|
||||
localFormData.value.merchantId = row.id;
|
||||
localFormData.value.merchantName = row.merchantName ?? row.name ?? '';
|
||||
localFormData.value.creditCode = row.creditCode ?? '';
|
||||
localFormData.value.bankName = row.bankName ?? '';
|
||||
localFormData.value.accountNumber = row.accountNumber ?? '';
|
||||
businessLicenseUrl.value = row.businessLicenseUrl ?? '';
|
||||
merchantDialogVisible.value = false;
|
||||
};
|
||||
|
||||
watch(merchantOptions, syncMerchantInfo, { deep: true });
|
||||
|
||||
const rules = {
|
||||
@ -234,4 +352,18 @@ defineExpose({ validate });
|
||||
margin: 8px 0;
|
||||
line-height: 1.6;
|
||||
}
|
||||
|
||||
/* 商户选择弹窗样式 */
|
||||
.merchant-search {
|
||||
margin-bottom: 20px;
|
||||
}
|
||||
|
||||
.merchant-search .el-form-item {
|
||||
margin-bottom: 0;
|
||||
}
|
||||
|
||||
.merchant-table {
|
||||
max-height: 500px;
|
||||
overflow-y: auto;
|
||||
}
|
||||
</style>
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user