feat: 选票弹窗销/购方条件改客商选择器——按名称远程搜客商档案带出税号过滤,粘贴裸税号直查
This commit is contained in:
@@ -20,21 +20,47 @@
|
|||||||
<el-form-item label="受票单位">
|
<el-form-item label="受票单位">
|
||||||
<el-input v-model="query.buyerName" clearable @keyup.enter="handleQuery" />
|
<el-input v-model="query.buyerName" clearable @keyup.enter="handleQuery" />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="销方税号">
|
<el-form-item label="开票单位(销方)">
|
||||||
<el-input
|
<el-select
|
||||||
v-model="query.salerTaxNo"
|
v-model="query.salerTaxNo"
|
||||||
clearable
|
clearable
|
||||||
style="width: 180px"
|
filterable
|
||||||
|
remote
|
||||||
|
reserve-keyword
|
||||||
|
:remote-method="keyword => searchCustomers(keyword, 'saler')"
|
||||||
|
:loading="customerLoading.saler"
|
||||||
|
placeholder="输入名称搜索或直接粘贴税号"
|
||||||
|
style="width: 220px"
|
||||||
@keyup.enter="handleQuery"
|
@keyup.enter="handleQuery"
|
||||||
/>
|
>
|
||||||
|
<el-option
|
||||||
|
v-for="item in customerOptions.saler"
|
||||||
|
:key="item.value"
|
||||||
|
:label="item.label"
|
||||||
|
:value="item.value"
|
||||||
|
/>
|
||||||
|
</el-select>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="购方税号">
|
<el-form-item label="受票单位(购方)">
|
||||||
<el-input
|
<el-select
|
||||||
v-model="query.buyerTaxNo"
|
v-model="query.buyerTaxNo"
|
||||||
clearable
|
clearable
|
||||||
style="width: 180px"
|
filterable
|
||||||
|
remote
|
||||||
|
reserve-keyword
|
||||||
|
:remote-method="keyword => searchCustomers(keyword, 'buyer')"
|
||||||
|
:loading="customerLoading.buyer"
|
||||||
|
placeholder="输入名称搜索或直接粘贴税号"
|
||||||
|
style="width: 220px"
|
||||||
@keyup.enter="handleQuery"
|
@keyup.enter="handleQuery"
|
||||||
/>
|
>
|
||||||
|
<el-option
|
||||||
|
v-for="item in customerOptions.buyer"
|
||||||
|
:key="item.value"
|
||||||
|
:label="item.label"
|
||||||
|
:value="item.value"
|
||||||
|
/>
|
||||||
|
</el-select>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="发票类型">
|
<el-form-item label="发票类型">
|
||||||
<el-select
|
<el-select
|
||||||
@@ -167,6 +193,7 @@
|
|||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
|
import { getList as getCustomerList } from '@/api/vehicle/customer-archive';
|
||||||
import {
|
import {
|
||||||
downloadKingdeeInvoiceFile,
|
downloadKingdeeInvoiceFile,
|
||||||
isKingdeePathAttachment,
|
isKingdeePathAttachment,
|
||||||
@@ -199,6 +226,9 @@ export default {
|
|||||||
page: { current: 1, size: 10, total: 0 },
|
page: { current: 1, size: 10, total: 0 },
|
||||||
// 正在查看/下载附件的发票号(行级 loading 守卫)
|
// 正在查看/下载附件的发票号(行级 loading 守卫)
|
||||||
attachmentBusy: null,
|
attachmentBusy: null,
|
||||||
|
// 销/购方客商下拉:远程按名称搜客商档案,选中带出税号查询;手动输入的裸税号直接作为值过滤
|
||||||
|
customerOptions: { saler: [], buyer: [] },
|
||||||
|
customerLoading: { saler: false, buyer: false },
|
||||||
query: this.emptyQuery(),
|
query: this.emptyQuery(),
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
@@ -296,6 +326,24 @@ export default {
|
|||||||
this.query = this.emptyQuery();
|
this.query = this.emptyQuery();
|
||||||
this.handleQuery();
|
this.handleQuery();
|
||||||
},
|
},
|
||||||
|
// 客商名称远程搜索:含 18 位社会信用代码特征(数字+大写字母)时按裸税号直查,否则搜客商档案带出税号
|
||||||
|
async searchCustomers(keyword, side) {
|
||||||
|
const text = String(keyword || '').trim();
|
||||||
|
if (!text) return;
|
||||||
|
if (/^[0-9A-Z]{15,20}$/.test(text)) {
|
||||||
|
this.customerOptions[side] = [{ label: `${text}(手输税号)`, value: text }];
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
this.customerLoading[side] = true;
|
||||||
|
try {
|
||||||
|
const data = this.unwrap(await getCustomerList(1, 20, { fullName: text }));
|
||||||
|
this.customerOptions[side] = (data.records || [])
|
||||||
|
.filter(item => item.unifiedCreditCode)
|
||||||
|
.map(item => ({ label: `${item.fullName}(${item.unifiedCreditCode})`, value: item.unifiedCreditCode }));
|
||||||
|
} finally {
|
||||||
|
this.customerLoading[side] = false;
|
||||||
|
}
|
||||||
|
},
|
||||||
unwrap(response) {
|
unwrap(response) {
|
||||||
const body = response?.data || response || {};
|
const body = response?.data || response || {};
|
||||||
return body?.data || body;
|
return body?.data || body;
|
||||||
|
|||||||
Reference in New Issue
Block a user