- 在应用配置中注册公司管理页面路由 - 实现首页轮播图组件优化,支持CSS尺寸转换和图片加载 - 新增企业ID修正API功能 - 实现信用模块数据权限控制工具 - 添加客户、联系人、数据查询等页面配置 - 完善行政许可、破产重整、分支机构等信用数据模型 - 实现各类信用数据的增删改查和导入导出接口 - 建立企业信用数据完整管理功能体系
234 lines
5.8 KiB
TypeScript
234 lines
5.8 KiB
TypeScript
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
|
||
};
|
||
}
|