Merge remote-tracking branch 'websoft/master'

# Conflicts:
#	src/views/business/components/business-crud-page.vue
This commit is contained in:
2026-08-25 00:11:14 +08:00
36 changed files with 560 additions and 330 deletions
+138 -141
View File
@@ -43,7 +43,7 @@
</el-button>
</template>
<template #customerCode="{ row }">
<el-button type="primary" link @click="openArchive(row, true)">
<el-button type="primary" link @click="viewArchive(row)">
{{ row.customerCode }}
</el-button>
</template>
@@ -80,7 +80,7 @@
<el-link
type="primary"
v-if="hasPermission('customer_archive_view')"
@click="openArchive(row, true)"
@click="viewArchive(row)"
>
查看
</el-link>
@@ -354,7 +354,7 @@
<section-card title="财务/信用信息">
<el-row :gutter="18">
<el-col :span="6">
<el-form-item label="注册资金(万元)" prop="registeredCapital">
<el-form-item label="注册资金万元" prop="registeredCapital">
<el-input
v-model="archiveForm.registeredCapital"
maxlength="18"
@@ -363,7 +363,7 @@
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="开票税点(%)" prop="invoiceTaxRate">
<el-form-item label="开票税点%" prop="invoiceTaxRate">
<el-input
v-model="archiveForm.invoiceTaxRate"
maxlength="5"
@@ -377,7 +377,7 @@
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="最大资金使用额度(万元)" prop="maxCreditLimit">
<el-form-item label="最大资金使用额度万元" prop="maxCreditLimit">
<el-input
v-model="archiveForm.maxCreditLimit"
maxlength="18"
@@ -387,7 +387,7 @@
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="申请总资金使用额度(万元)" prop="applyCreditLimit">
<el-form-item label="申请总资金使用额度万元" prop="applyCreditLimit">
<el-input v-model="archiveForm.applyCreditLimit" maxlength="18" disabled />
</el-form-item>
</el-col>
@@ -439,17 +439,17 @@
<span>{{ row.creditLevel }}</span>
</template>
</el-table-column>
<el-table-column min-width="185" align="center">
<el-table-column min-width="210" align="center">
<template #header>
<span>最大资金使用额度(万<br />元)</span>
<span>最大资金使用额度(万元)</span>
</template>
<template #default="{ row }">
<span>{{ formatScoreValue(row.maxCreditLimit) }}</span>
</template>
</el-table-column>
<el-table-column min-width="190" align="center">
<el-table-column min-width="220" align="center">
<template #header>
<span>拟申请总资金使用额<br />度(万元)</span>
<span>拟申请总资金使用额(万元)</span>
</template>
<template #default="{ row }">
<span>{{ formatScoreValue(row.applyCreditLimit) }}</span>
@@ -486,37 +486,40 @@
>新增联系人</el-button
>
</div>
<el-table :data="contactTableData" border class="contact-table">
<el-table-column label="序号" prop="__index" width="90" align="center" />
<el-table-column label="联系人姓名" prop="contactName" min-width="150" />
<el-table-column label="联系人电话" prop="contactPhone" min-width="150" />
<el-table-column label="邮箱" prop="email" min-width="180" />
<el-table-column label="联系地址" min-width="240">
<template #default="{ row }">
<span>{{ formatContactAddress(row) || '-' }}</span>
</template>
</el-table-column>
<el-table-column label="备注" prop="remark" min-width="180" />
<el-table-column label="所属分公司/事业部" min-width="170">
<template #default="{ row }">
<span>{{ row.branchName || archiveForm.deptName || '-' }}</span>
</template>
</el-table-column>
<el-table-column label="操作" width="130" align="center" v-if="!readonly">
<template #default="{ row }">
<el-link type="primary" @click="openContact(row.__raw, row.__rawIndex)">
修改
</el-link>
<el-link type="danger" @click="deleteContact(row.__rawIndex)">删除</el-link>
</template>
</el-table-column>
</el-table>
<empty-pagination
:page="contactPaginationPage"
always-show
@size-change="size => handleDetailSizeChange('contact', size)"
@current-change="page => handleDetailCurrentChange('contact', page)"
/>
<section-card>
<el-table :data="contactTableData" border class="contact-table">
<el-table-column label="序号" prop="__index" width="90" align="center" />
<el-table-column label="联系人姓名" prop="contactName" min-width="150" />
<el-table-column label="联系人电话" prop="contactPhone" min-width="150" />
<el-table-column label="邮箱" prop="email" min-width="180" />
<el-table-column label="联系地址" min-width="240">
<template #default="{ row }">
<span>{{ formatContactAddress(row) || '-' }}</span>
</template>
</el-table-column>
<el-table-column label="备注" prop="remark" min-width="180" />
<el-table-column label="所属分公司/事业部" min-width="170">
<template #default="{ row }">
<span>{{ row.branchName || archiveForm.deptName || '-' }}</span>
</template>
</el-table-column>
<el-table-column label="操作" width="130" align="center" v-if="!readonly">
<template #default="{ row }">
<el-link type="primary" @click="openContact(row.__raw, row.__rawIndex)">
修改
</el-link>
<el-link type="danger" @click="deleteContact(row.__rawIndex)">删除</el-link>
</template>
</el-table-column>
</el-table>
<empty-pagination
:page="contactPaginationPage"
always-show
@size-change="size => handleDetailSizeChange('contact', size)"
@current-change="page => handleDetailCurrentChange('contact', page)"
/>
</section-card>
</el-tab-pane>
<el-tab-pane label="收款信息" name="receiptAccounts">
<div class="tab-table-toolbar" v-if="!readonly">
@@ -800,12 +803,12 @@
</el-dialog>
<div class="archive-form__footer">
<el-button v-if="!isArchivePage" @click="closeArchive">
{{ readonly ? '关闭' : '取消' }}
<el-button v-if="!isArchivePage || readonly" @click="closeArchive">
{{ isArchivePage ? '返回' : readonly ? '关闭' : '取消' }}
</el-button>
<el-button type="primary" v-if="!readonly" @click="saveArchive">保存</el-button>
<el-button type="success" v-if="!readonly" @click="saveAndSubmitArchive">提交</el-button>
<el-button v-if="!readonly" @click="closeArchive">返回</el-button>
<el-button v-if="!readonly && !isArchivePage" @click="closeArchive">返回</el-button>
</div>
</component>
@@ -817,45 +820,47 @@
class="contact-dialog"
@closed="resetContact"
>
<el-form
ref="contactForm"
:model="contactForm"
:rules="contactRules"
label-position="right"
label-width="110px"
class="contact-form"
>
<el-form-item label="联系人姓名" prop="contactName" class="contact-form__compact-field">
<el-input v-model="contactForm.contactName" maxlength="30" />
</el-form-item>
<el-form-item label="手机号" prop="contactPhone" class="contact-form__compact-field">
<el-input v-model="contactForm.contactPhone" maxlength="11" />
</el-form-item>
<el-form-item label="邮箱" prop="email" class="contact-form__compact-field">
<el-input v-model="contactForm.email" maxlength="100" />
</el-form-item>
<el-form-item label="地址" prop="detailAddress">
<div class="contact-form__address">
<el-input
v-model="contactForm.regionName"
readonly
maxlength="100"
placeholder="行政区划自动带出"
/>
<el-input
v-model="contactForm.detailAddress"
readonly
maxlength="255"
placeholder="点击后弹出地图组件"
suffix-icon="el-icon-location"
@click="handleContactMapPick"
/>
</div>
</el-form-item>
<el-form-item label="备注" prop="remark" class="contact-form__compact-field">
<el-input v-model="contactForm.remark" maxlength="200" />
</el-form-item>
</el-form>
<section-card>
<el-form
ref="contactForm"
:model="contactForm"
:rules="contactRules"
label-position="right"
label-width="110px"
class="contact-form"
>
<el-form-item label="联系人姓名" prop="contactName" class="contact-form__compact-field">
<el-input v-model="contactForm.contactName" maxlength="30" />
</el-form-item>
<el-form-item label="手机号" prop="contactPhone" class="contact-form__compact-field">
<el-input v-model="contactForm.contactPhone" maxlength="11" />
</el-form-item>
<el-form-item label="邮箱" prop="email" class="contact-form__compact-field">
<el-input v-model="contactForm.email" maxlength="100" />
</el-form-item>
<el-form-item label="地址" prop="detailAddress">
<div class="contact-form__address">
<el-input
v-model="contactForm.regionName"
readonly
maxlength="100"
placeholder="行政区划自动带出"
/>
<el-input
v-model="contactForm.detailAddress"
readonly
maxlength="255"
placeholder="点击后弹出地图组件"
suffix-icon="el-icon-location"
@click="handleContactMapPick"
/>
</div>
</el-form-item>
<el-form-item label="备注" prop="remark" class="contact-form__compact-field">
<el-input v-model="contactForm.remark" maxlength="200" />
</el-form-item>
</el-form>
</section-card>
<template #footer>
<div class="contact-dialog__footer-actions">
<el-button type="primary" @click="saveContact">保存</el-button>
@@ -915,37 +920,39 @@
class="receipt-dialog"
@closed="resetReceipt"
>
<el-form
ref="receiptForm"
:model="receiptForm"
:rules="receiptRules"
label-position="right"
label-width="120px"
class="receipt-form"
>
<el-form-item label="收款单位名称" prop="accountName">
<el-input v-model="receiptForm.accountName" maxlength="100" />
</el-form-item>
<el-form-item label="开户人姓名" prop="accountHolderName">
<el-input v-model="receiptForm.accountHolderName" maxlength="50" />
</el-form-item>
<el-form-item label="开户行" prop="bankName">
<el-select v-model="receiptForm.bankName" filterable clearable>
<el-option
v-for="item in bankListOptions"
:key="item.value"
:label="item.label"
:value="item.value"
/>
</el-select>
</el-form-item>
<el-form-item label="收款账号" prop="bankAccount">
<el-input v-model="receiptForm.bankAccount" maxlength="50" />
</el-form-item>
<el-form-item label="备注" prop="remark">
<el-input v-model="receiptForm.remark" maxlength="200" />
</el-form-item>
</el-form>
<section-card>
<el-form
ref="receiptForm"
:model="receiptForm"
:rules="receiptRules"
label-position="right"
label-width="120px"
class="receipt-form"
>
<el-form-item label="收款单位名称" prop="accountName">
<el-input v-model="receiptForm.accountName" maxlength="100" />
</el-form-item>
<el-form-item label="开户人姓名" prop="accountHolderName">
<el-input v-model="receiptForm.accountHolderName" maxlength="50" />
</el-form-item>
<el-form-item label="开户行" prop="bankName">
<el-select v-model="receiptForm.bankName" filterable clearable>
<el-option
v-for="item in bankListOptions"
:key="item.value"
:label="item.label"
:value="item.value"
/>
</el-select>
</el-form-item>
<el-form-item label="收款账号" prop="bankAccount">
<el-input v-model="receiptForm.bankAccount" maxlength="50" />
</el-form-item>
<el-form-item label="备注" prop="remark">
<el-input v-model="receiptForm.remark" maxlength="200" />
</el-form-item>
</el-form>
</section-card>
<template #footer>
<div class="receipt-dialog__footer-actions">
<el-button type="primary" @click="saveReceipt">保存</el-button>
@@ -1376,6 +1383,7 @@ import pdfWorkerSrc from 'pdfjs-dist/build/pdf.worker.mjs?url';
import { mapGetters } from 'vuex';
import NProgress from 'nprogress';
import 'nprogress/nprogress.css';
import SectionCard from '@/components/section-card/main.vue';
const createTimeRangeMap = {
createTimeRange: ['createTimeStart', 'createTimeEnd'],
@@ -1394,6 +1402,7 @@ const qualificationViewerPlugins = [
export default {
components: {
SectionCard,
ArrowRight,
Location,
ElImageViewer,
@@ -1809,7 +1818,11 @@ export default {
this.initBusinessDictionaries();
this.initScoreQuantificationOptions();
if (this.isArchivePage) {
this.openArchive(this.$route.query.id ? { id: this.$route.query.id } : null);
const readonly = this.$route.query.view === '1' || this.$route.query.view === 'true';
this.openArchive(
this.$route.query.id ? { id: this.$route.query.id } : null,
readonly
);
}
},
computed: {
@@ -1827,24 +1840,10 @@ export default {
return this.$route.path === '/vehicle/customer-archive/form';
},
archiveContainer() {
return this.isArchivePage ? 'div' : 'el-dialog';
return 'div';
},
archiveContainerProps() {
if (this.isArchivePage) {
return { class: 'archive-page-form' };
}
return {
title: this.dialogTitle,
appendToBody: true,
modelValue: this.archiveBox,
width: '92%',
top: '4vh',
modal: true,
showClose: true,
closeOnClickModal: true,
closeOnPressEscape: true,
class: 'archive-dialog',
};
return { class: 'archive-page-form' };
},
regionCascaderProps() {
return {
@@ -3588,12 +3587,14 @@ export default {
query: isEdit ? { id: row.id, name: '编辑客商档案' } : { name: '新增客商档案' },
});
},
viewArchive(row) {
this.$router.push({
path: '/vehicle/customer-archive/form',
query: { id: row.id, name: '查看客商档案', view: '1' },
});
},
closeArchive() {
if (this.isArchivePage) {
this.$router.push('/vehicle/customer-archive');
return;
}
this.archiveBox = false;
this.$router.push('/vehicle/customer-archive');
},
openArchive(row, readonly = false) {
this.readonly = readonly;
@@ -4893,13 +4894,9 @@ export default {
font-size: 14px;
}
:deep(.archive-dialog .el-dialog__body) {
max-height: 72vh;
overflow: auto;
}
.archive-page-form {
min-height: 100%;
margin-bottom: 60px;
}
.archive-form__footer {
display: flex;