feat(credit): 添加企业信用模块功能

- 在应用配置中注册公司管理页面路由
- 实现首页轮播图组件优化,支持CSS尺寸转换和图片加载
- 新增企业ID修正API功能
- 实现信用模块数据权限控制工具
- 添加客户、联系人、数据查询等页面配置
- 完善行政许可、破产重整、分支机构等信用数据模型
- 实现各类信用数据的增删改查和导入导出接口
- 建立企业信用数据完整管理功能体系
This commit is contained in:
2026-03-05 10:58:39 +08:00
parent 61397b1711
commit 6e6fd43017
66 changed files with 6971 additions and 101 deletions

View File

@@ -0,0 +1,233 @@
import request from '@/utils/request';
import { withCreditUserScope } from '@/api/credit/utils/data-scope';
import type { ApiResult, PageResult } from '@/api';
import type { CreditNearbyCompany, CreditNearbyCompanyParam } from './model';
/**
* 分页查询附近企业
*/
export async function pageCreditNearbyCompany(
params: CreditNearbyCompanyParam
) {
const res = await request.get<ApiResult<PageResult<CreditNearbyCompany>>>(
'/credit/credit-nearby-company/page',
{ params: withCreditUserScope(params) }
);
if (res.data.code === 0) {
return res.data.data;
}
return Promise.reject(new Error(res.data.message));
}
/**
* 查询附近企业列表
*/
export async function listCreditNearbyCompany(
params?: CreditNearbyCompanyParam
) {
const res = await request.get<ApiResult<CreditNearbyCompany[]>>(
'/credit/credit-nearby-company',
{ params: withCreditUserScope(params) }
);
if (res.data.code === 0 && res.data.data) {
return res.data.data;
}
return Promise.reject(new Error(res.data.message));
}
/**
* 添加附近企业
*/
export async function addCreditNearbyCompany(data: CreditNearbyCompany) {
const res = await request.post<ApiResult<unknown>>(
'/credit/credit-nearby-company',
data
);
if (res.data.code === 0) {
return res.data.message;
}
return Promise.reject(new Error(res.data.message));
}
/**
* 修改附近企业
*/
export async function updateCreditNearbyCompany(data: CreditNearbyCompany) {
const res = await request.put<ApiResult<unknown>>(
'/credit/credit-nearby-company',
data
);
if (res.data.code === 0) {
return res.data.message;
}
return Promise.reject(new Error(res.data.message));
}
/**
* 删除附近企业
*/
export async function removeCreditNearbyCompany(id?: number) {
const res = await request.delete<ApiResult<unknown>>(
'/credit/credit-nearby-company/' + id
);
if (res.data.code === 0) {
return res.data.message;
}
return Promise.reject(new Error(res.data.message));
}
/**
* 批量删除附近企业
*/
export async function removeBatchCreditNearbyCompany(
data: (number | undefined)[]
) {
const res = await request.delete<ApiResult<unknown>>(
'/credit/credit-nearby-company/batch',
{
data
}
);
if (res.data.code === 0) {
return res.data.message;
}
return Promise.reject(new Error(res.data.message));
}
/**
* 根据id查询附近企业
*/
export async function getCreditNearbyCompany(id: number) {
const res = await request.get<ApiResult<CreditNearbyCompany>>(
'/credit/credit-nearby-company/' + id
);
if (res.data.code === 0 && res.data.data) {
return res.data.data;
}
return Promise.reject(new Error(res.data.message));
}
/**
* 导入附近企业
*/
export async function importCreditNearbyCompany(
file: File,
companyId?: number
) {
const formData = buildImportFormData(file, companyId);
const res = await request.post<ApiResult<unknown>>(
'/credit/credit-nearby-company/import',
formData,
{
headers: {
'Content-Type': 'multipart/form-data'
}
}
);
if (res.data.code === 0) {
return res.data.message;
}
return Promise.reject(new Error(res.data.message));
}
/**
* 导入附近企业(多文件,同一次请求)
*
* 约定:后端需支持 multipart 同名字段 `file` 多次出现(常见于 MultipartFile[] file
*/
export async function importCreditNearbyCompanyMulti(
files: File[] | FileList,
companyId?: number
) {
const formData = buildImportFormData(files, companyId);
const res = await request.post<ApiResult<unknown>>(
'/credit/credit-nearby-company/import',
formData,
{
headers: {
'Content-Type': 'multipart/form-data'
}
}
);
if (res.data.code === 0) {
return res.data.message;
}
return Promise.reject(new Error(res.data.message));
}
function buildImportFormData(
fileOrFiles: File | File[] | FileList,
companyId?: number
) {
const formData = new FormData();
if (Array.isArray(fileOrFiles)) {
fileOrFiles.forEach((f) => formData.append('file', f));
} else if (fileOrFiles instanceof FileList) {
Array.from(fileOrFiles).forEach((f) => formData.append('file', f));
} else {
formData.append('file', fileOrFiles);
}
if (companyId != null) {
formData.append('companyId', String(companyId));
}
return formData;
}
export interface ImportBatchCreditNearbyCompanyItem {
fileName: string;
success: boolean;
message: string;
}
export interface ImportBatchCreditNearbyCompanyResult {
total: number;
success: number;
failure: number;
items: ImportBatchCreditNearbyCompanyItem[];
}
/**
* 导入附近企业(多文件)
*
* 说明:
* - 目前复用单文件导入接口,前端循环调用实现“多文件导入”
* - 不会在有失败时 reject便于上层展示部分成功/失败明细)
*/
export async function importBatchCreditNearbyCompany(
files: File[] | FileList,
companyId?: number,
options?: {
/** 遇到失败是否立即停止,默认 false继续导入后续文件 */
stopOnError?: boolean;
}
): Promise<ImportBatchCreditNearbyCompanyResult> {
const list = Array.isArray(files) ? files : Array.from(files);
const items: ImportBatchCreditNearbyCompanyItem[] = [];
const stopOnError = options?.stopOnError ?? false;
for (const file of list) {
try {
const msg = await importCreditNearbyCompany(file, companyId);
items.push({ fileName: file.name, success: true, message: msg });
} catch (e: unknown) {
items.push({
fileName: file.name,
success: false,
message: e instanceof Error ? e.message : String(e)
});
if (stopOnError) {
break;
}
}
}
const success = items.filter((d) => d.success).length;
const failure = items.length - success;
return {
total: list.length,
success,
failure,
items
};
}