feat: api请求按路由分割

This commit is contained in:
Zzz1zz
2026-02-01 12:04:08 +08:00
parent f7a710d6d2
commit adf2a2fa36
58 changed files with 1364 additions and 864 deletions
+14
View File
@@ -0,0 +1,14 @@
{
"tailwindCSS.experimental.configFile": "src/assets/style/index.css",
"tailwindCSS.includeLanguages": {
"vue": "html",
"vue-html": "html"
},
"editor.quickSuggestions": {
"other": true,
"comments": false,
"strings": true
},
"css.validate": true,
"tailwindCSS.emmetCompletions": true
}
-138
View File
@@ -1,138 +0,0 @@
import axios from 'axios';
import {
AllProjectListRes,
ProjectListRes,
CreateProjectParam,
ProjectDetailRes,
TopBuildingTagsRes,
} from '@/types/business';
import {
ProjectPaginationParams,
CommonCityRes,
PaginationParams,
} from '@/types/comm';
import { HttpResponse } from './interceptor';
// import type { RouteRecordNormalized } from 'vue-router';
// import { UserState } from '@/store/modules/user/types';
export interface ProjectRecord {
id: string;
name: string;
type: string;
}
// 全部项目列表(包含楼栋)
export function getAllProjectList(): Promise<AllProjectListRes> {
return axios.get(`project/getProjectBuildingList`);
}
// 项目列表(分页)
export function getProjectList(
params: ProjectPaginationParams
): Promise<ProjectListRes> {
return axios.post('project/getProjectList', params);
}
// 创建项目
export function createProject(
params: CreateProjectParam
): Promise<HttpResponse> {
return axios.post('project/createProject', params);
}
// 项目信息
export function getProjectDetail(id: number): Promise<ProjectDetailRes> {
return axios.get(`project/getProject?id=${id}`);
}
// 更新项目
export function updateProject(
params: CreateProjectParam
): Promise<HttpResponse> {
return axios.post('project/updateProject', params);
}
// 全部项目的城市列表
export function getProjectCityList(): Promise<CommonCityRes> {
return axios.get(`project/getCityList`);
}
// 删除项目
export function delProject(id: number): Promise<HttpResponse> {
return axios.get(`project/delProject?id=${id}`);
}
// ------------- 空间管理 -------------
// 创建房源
export function createRoom(params: any): Promise<HttpResponse> {
return axios.post('rooms/createRoom', params);
}
// 房源列表(分页)
export function getRoomList(params: PaginationParams): Promise<HttpResponse> {
return axios.post('rooms/getRoomList', params);
}
// 更新房源
export function updateRoom(params: any): Promise<HttpResponse> {
return axios.post('rooms/updateRoom', params);
}
// 删除房源
export function delRoom(id: number): Promise<HttpResponse> {
return axios.get(`rooms/delRoom?id=${id}`);
}
// 房源详情
export function getRoom(id: number): Promise<HttpResponse> {
return axios.get(`rooms/getRoom?id=${id}`);
}
// 修改房源状态 status:1招商 2保留 3下架 4在租
export function changeRoomStatus(params: any): Promise<HttpResponse> {
return axios.post('rooms/changeRoomStatus', params);
}
// 房源获取头部楼栋tags
export function getTopBuildingTagsByProjectId(
id: number
): Promise<TopBuildingTagsRes> {
return axios.get(`roomOver/getTopBuildingTags?project_id=${id}`);
}
// 房源剖视-数据统计
export function getStatisticsData(params: any): Promise<HttpResponse> {
return axios.post('roomOver/getStatisticsData', params);
}
// 房源剖视-房源列表
export function getRoomOverList(params: any): Promise<HttpResponse> {
return axios.post('roomOver/getRoomList', params);
}
// 房源图谱列表
export function getRoomsGraphList(params: any): Promise<HttpResponse> {
return axios.post('roomsGraph/getRoomList', params);
}
// ------------- 租客管理 -------------
//创建租客
export function createTenant(params: any): Promise<HttpResponse> {
return axios.post('tenants/createTenant', params);
}
// 租客列表(分页)
export function getTenantList(params: PaginationParams): Promise<HttpResponse> {
return axios.post('tenants/getTenantList', params);
}
// 更新租客信息
export function updateTenant(params: any): Promise<HttpResponse> {
return axios.post('tenants/updateTenant', params);
}
// 删除租客
export function delTenant(id: number): Promise<HttpResponse> {
return axios.get(`tenants/delTenant?id=${id}`);
}
// 租客详情
export function getTenantDetail(id: number): Promise<HttpResponse> {
return axios.get(`tenants/getTenant?id=${id}`);
}
// 租客归档
export function filingTenant(params: any): Promise<HttpResponse> {
return axios.post('tenants/filingTenant', params);
}
// 租客下拉列表(不分页)
export function getTenantAllList(
params: PaginationParams
): Promise<HttpResponse> {
return axios.post('tenants/getTenantAllList', params);
}
// 租客归档列表(分页)
export function getTenantFilingList(
params: PaginationParams
): Promise<HttpResponse> {
return axios.post('tenants/getTenantFilingList', params);
}
+279
View File
@@ -0,0 +1,279 @@
import axios from 'axios';
import {
SettingContractNumbeRes,
CreateCodeSettingParam,
DisableUserParam,
CreateTermSettingParam,
SettingContractTermListRes,
SettingContractTermInfo,
SettingContractTemplateListRes,
CreateTemplateSettingParam,
ContractWordFormParam,
ContractWordSettingListRes,
SettingContractFileInfoRes,
} from '@/types/setting';
import { PaginationParams } from '@/types/comm';
import { HttpResponse } from './interceptor';
// ==================== 合同设置 API (contractSetting 路由) ====================
// 合同设置-合同编号设置-全部启用列表
export function getAllCodeSettingList(): Promise<SettingContractNumbeRes> {
return axios.get(`contractSetting/getAllCodeSettingList`);
}
// 合同设置-合同编号设置-新增
export function createCodeSetting(
params: CreateCodeSettingParam
): Promise<HttpResponse> {
return axios.post(`contractSetting/createCodeSetting`, params);
}
// 合同设置-合同编号设置-编辑
export function updateCodeSetting(
params: CreateCodeSettingParam
): Promise<HttpResponse> {
return axios.post(`contractSetting/updateCodeSetting`, params);
}
// 合同设置-合同编号设置-删除
export function delCodeSetting(id: number): Promise<HttpResponse> {
return axios.get(`contractSetting/delCodeSetting?id=${id}`);
}
// 合同设置-合同编号设置-单个详情
export function getCodeSettingFromId(
id: number
): Promise<SettingContractNumbeRes> {
return axios.get(`contractSetting/getCodeSetting?id=${id}`);
}
// 合同设置-合同编号设置-启用/禁用
export function disableCodeSetting(
params: DisableUserParam
): Promise<HttpResponse> {
return axios.post(`contractSetting/disableCodeSetting`, params);
}
// 合同设置-合同编号设置-列表(带分页)
export function getCodeSettingList(
params: PaginationParams
): Promise<SettingContractNumbeRes> {
return axios.post(`contractSetting/getCodeSettingList`, params);
}
// 合同设置-合同条款设置-全部启用列表
export function getAllTermsSettingList(): Promise<any> {
return axios.get(`contractSetting/getAllTermsSettingList`);
}
// 合同设置-合同条款设置-新增
export function createTermsSetting(
params: CreateTermSettingParam
): Promise<HttpResponse> {
return axios.post(`contractSetting/createTermsSetting`, params);
}
// 合同设置-合同条款设置-编辑
export function updateTermsSetting(
params: CreateTermSettingParam
): Promise<HttpResponse> {
return axios.post(`contractSetting/updateTermsSetting`, params);
}
// 合同设置-合同条款设置-删除
export function delTermsSetting(id: number): Promise<HttpResponse> {
return axios.get(`contractSetting/delTermsSetting?id=${id}`);
}
// 合同设置-合同条款设置-单个条款配置详情
export function getTermsSettingFromId(
id: number
): Promise<SettingContractTermInfo> {
return axios.get(`contractSetting/getTermsSetting?id=${id}`);
}
// 合同设置-合同条款设置-单个条款数据详情
export function getTermsDataFromId(params: any): Promise<any> {
return axios.post(`contractSetting/getTerm`, params);
}
// 合同设置-合同条款设置-启用/禁用
export function disableTermsSetting(
params: DisableUserParam
): Promise<HttpResponse> {
return axios.post(`contractSetting/disableTermsSetting`, params);
}
// 合同设置-合同条款设置-列表(带分页)
export function getTermsSettingList(
params: PaginationParams
): Promise<SettingContractTermListRes> {
return axios.post(`contractSetting/getTermsSettingList`, params);
}
// 合同设置-合同模板管理-全部启用列表
export function getAllTemplateSettingList(): Promise<SettingContractNumbeRes> {
return axios.get(`contractSetting/getAllTemplateSettingList`);
}
// 合同设置-合同模板管理-新增
export function createTemplateSetting(
params: CreateTemplateSettingParam
): Promise<HttpResponse> {
return axios.post(`contractSetting/createTemplateSetting`, params);
}
// 合同设置-合同模板管理-编辑
export function updateTemplateSetting(params: any): Promise<HttpResponse> {
return axios.post(`contractSetting/saveTemplateSetting`, params);
}
// 合同设置-合同模板管理-删除
export function delTemplateSetting(id: number): Promise<HttpResponse> {
return axios.get(`contractSetting/delTemplateSetting?id=${id}`);
}
// 合同设置-合同模板管理-单个详情
export function getTemplateSettingFromId(id: number): Promise<any> {
return axios.get(`contractSetting/getTemplateSetting?id=${id}`);
}
// 合同设置-合同模板管理-启用/禁用
export function disableTemplateSetting(
params: DisableUserParam
): Promise<HttpResponse> {
return axios.post(`contractSetting/disableTemplateSetting`, params);
}
// 合同设置-合同模板管理-列表(带分页)
export function getTemplateSettingList(
params: PaginationParams
): Promise<SettingContractTemplateListRes> {
return axios.post(`contractSetting/getTemplateSettingList`, params);
}
// 合同设置-合同文档模板管理-全部启用列表
export function getAllWordSettingList(): Promise<ContractWordSettingListRes> {
return axios.get(`contractSetting/getAllWordSettingList`);
}
// 合同设置-合同文档模板管理-新增
export function createWordSetting(
params: ContractWordFormParam
): Promise<HttpResponse> {
return axios.post(`contractSetting/createWordSetting`, params);
}
// 合同设置-合同文档模板管理-编辑(更新)
export function updateWordSetting(
params: ContractWordFormParam
): Promise<HttpResponse> {
return axios.post(`contractSetting/updateWordSetting`, params);
}
// 合同设置-合同文档模板管理-删除
export function delWordSetting(id: number): Promise<HttpResponse> {
return axios.get(`contractSetting/delWordSetting?id=${id}`);
}
// 合同设置-合同文档模板管理-单个详情
export function getWordSettingFromId(
id: number
): Promise<SettingContractFileInfoRes> {
return axios.get(`contractSetting/getWordSetting?id=${id}`);
}
// 合同设置-合同文档模板管理-启用/禁用
export function disableWordSetting(
params: DisableUserParam
): Promise<HttpResponse> {
return axios.post(`contractSetting/disableWordSetting`, params);
}
// 合同设置-合同文档模板管理-列表(带分页)
export function getWordSettingList(
params: PaginationParams
): Promise<ContractWordSettingListRes> {
return axios.post(`contractSetting/getWordSettingList`, params);
}
// 获取合同占位符列表
export function getContractPlaceholderList(params: any): Promise<any> {
// type 类型:1租赁,2物业
return axios.post(`contractSetting/getPlaceholderList`, params);
}
// ==================== 合同管理 API (contracts 路由) ====================
// 合同管理-头部数据列表
export function getContractsListTopData(type: number): Promise<any> {
return axios.post(`contracts/getListTopData`, type);
}
// 合同管理-列表
export interface ContractPaginationParams extends PaginationParams {
type?: number;
}
export function getContractsList(
params: ContractPaginationParams
): Promise<any> {
return axios.post(`contracts/getList`, params);
}
// 合同管理-草稿合同列表
export function getDraftList(type: number): Promise<any> {
return axios.get(`contracts/getDraftList?type=${type}`);
}
// 合同管理-编辑合同详情
export function getEditDetail(id: number): Promise<any> {
return axios.get(`contracts/getEditDetail?id=${id}`);
}
// 合同管理-编辑合同标签详情
export function getEditTagDetail(params: any): Promise<any> {
return axios.post(`contracts/getEditTagDetail`, params);
}
// 合同管理-合同详情
export function getContractDetail(id: number): Promise<any> {
return axios.get(`contracts/getDetail?id=${id}`);
}
// 合同管理-标签详情
export function getTagDetail(params: any): Promise<any> {
return axios.post(`contracts/getTagDetail`, params);
}
// 合同管理-保存合同
export function saveContracts(params: any): Promise<any> {
return axios.post(`contracts/save`, params);
}
// 合同管理-禁用/启用合同
export function disableContracts(params: any): Promise<any> {
return axios.post(`contracts/disable`, params);
}
// 合同管理-删除合同
export function delContract(id: number): Promise<any> {
return axios.get(`contracts/del?id=${id}`);
}
// 合同管理-提交审批
export function approvalContract(id: number): Promise<any> {
return axios.get(`contracts/approval?id=${id}`);
}
// 合同管理-归档
export function filingContract(id: number): Promise<any> {
return axios.get(`contracts/filing?id=${id}`);
}
// 合同管理-生成合同
export function createContracts(params: any): Promise<any> {
return axios.post(`contracts/createWord`, params);
}
// 合同管理-合同文件上传
export function uploadFileContracts(params: any): Promise<any> {
return axios.post(`contracts/uploadFile`, params);
}
// 合同管理-合同文件更新
export function updateFileContracts(params: any): Promise<any> {
return axios.post(`contracts/updateFile`, params);
}
// 合同管理-取消审批
export function cancelApprovalContract(id: number): Promise<any> {
return axios.get(`contracts/cancelApproval?id=${id}`);
}
// 合同归档-列表
export function getFilingContractList(params: any): Promise<any> {
return axios.post(`contracts/getFilingList`, params);
}
+51
View File
@@ -0,0 +1,51 @@
import axios from 'axios';
import {
DepartmentFormParams,
DepartmentFormRes,
DepartmentListRes,
DepartmentDetailRes,
} from '@/types/setting';
import { HttpResponse } from './interceptor';
// ==================== 部门相关 API ====================
export function createDepartment(
params: DepartmentFormParams
): Promise<DepartmentFormRes> {
return axios.post('/department/createDepartment', params);
}
export function updateDepartment(
params: DepartmentFormParams
): Promise<DepartmentFormRes> {
return axios.post('/department/updateDepartment', params);
}
export function getDepartmentList(): Promise<DepartmentListRes> {
return axios.get('/department/getDepartmentList');
}
export function getDepartmentDetail(id: number): Promise<DepartmentDetailRes> {
return axios.get(`/department/getDepartment?id=${id}`);
}
export function departmentSetUp(id: number): Promise<HttpResponse> {
return axios.get(`/department/setUp?id=${id}`);
}
export function departmentSetDown(id: number): Promise<HttpResponse> {
return axios.get(`/department/setDown?id=${id}`);
}
export function delDepartment(id: number): Promise<HttpResponse> {
return axios.get(`/department/delDepartment?id=${id}`);
}
// 保存部门项目数据
export function saveDataPermission(params: any): Promise<HttpResponse> {
return axios.post('/department/saveDataPermission', params);
}
// 获取部门项目数据
export function getDataPermission(id: number): Promise<HttpResponse> {
return axios.get(`/department/getDataPermission?id=${id}`);
}
+221
View File
@@ -0,0 +1,221 @@
import axios from 'axios';
import {
SettingProjectTypeListRes,
SettingProjectTypeRes,
SettingProjectProvinceRes,
DictionaryForm,
CheckProjectParam,
SettingRoomTagsRes,
SettingRoomTagRes,
SettingTenantDictionaryRes,
} from '@/types/setting';
import { TenantDictionaryType } from '@/types/comm';
import { HttpResponse } from './interceptor';
// ==================== 数据字典 API (dictionary 路由) ====================
// 数据字典-项目管理-全部项目类型列表
export function getAllProjectTypeList(): Promise<SettingProjectTypeListRes> {
return axios.get('dictionary/getAllProjectTypeList');
}
// 数据字典-项目管理-单个项目类型信息
export function getProjectTypeById(id: number): Promise<SettingProjectTypeRes> {
return axios.get(`dictionary/getProjectType?id=${id}`);
}
// 数据字典-项目管理-项目地址列表
export function getProvinceList(): Promise<SettingProjectProvinceRes> {
return axios.get(`dictionary/getProvinceList`);
}
// 数据字典-项目管理-创建项目类型
export function createProjectType(
params: DictionaryForm
): Promise<HttpResponse> {
return axios.post(`dictionary/createProjectType`, params);
}
// 数据字典-项目管理-更新项目类型信息
export function updateProjectType(
params: DictionaryForm
): Promise<HttpResponse> {
return axios.post(`dictionary/updateProjectType`, params);
}
// 数据字典-项目管理-删除项目类型
export function delProjectType(id: number): Promise<SettingProjectProvinceRes> {
return axios.get(`dictionary/delProjectType?id=${id}`);
}
// 数据字典-项目管理-启用/禁用项目类型(单个)
export function checkProjectType(
params: CheckProjectParam
): Promise<HttpResponse> {
return axios.post(`dictionary/checkProjectType`, params);
}
// 数据字典-项目管理-启用/禁用项目类型(全选)
export function checkAllProjectType(
params: CheckProjectParam
): Promise<HttpResponse> {
return axios.post(`dictionary/checkAllProjectType`, params);
}
// 数据字典-项目管理-启用/禁用省份(单个)
export function checkProvince(
params: CheckProjectParam
): Promise<HttpResponse> {
return axios.post(`dictionary/checkProvince`, params);
}
// 数据字典-项目管理-启用/禁用省份(全选)
export function checkAllProvince(
params: CheckProjectParam
): Promise<HttpResponse> {
return axios.post(`dictionary/checkAllProvince`, params);
}
// 数据字典-空间管理-全部房源标签列表
export function getRoomTagList(): Promise<SettingRoomTagsRes> {
return axios.get(`dictionary/getRoomTagList`);
}
// 数据字典-项目管理-单个房源标签信息
export function getRoomTagById(id: number): Promise<SettingRoomTagRes> {
return axios.get(`dictionary/getRoomTag?id=${id}`);
}
// 数据字典-空间管理-创建房源标签
export function createRoomTag(params: DictionaryForm): Promise<HttpResponse> {
return axios.post(`dictionary/createRoomTag`, params);
}
// 数据字典-空间管理-更新房源标签
export function updateRoomTag(params: DictionaryForm): Promise<HttpResponse> {
return axios.post(`dictionary/updateRoomTag`, params);
}
// 数据字典-空间管理-删除房源标签
export function delRoomTag(id: number): Promise<SettingProjectProvinceRes> {
return axios.get(`dictionary/delRoomTag?id=${id}`);
}
// 数据字典-空间管理-禁用/启用 房源标签(单个)
export function checkRoomTag(params: CheckProjectParam): Promise<HttpResponse> {
return axios.post(`dictionary/checkRoomTag`, params);
}
// 数据字典-空间管理-禁用/启用 房源标签(全选)
export function checkAllRoomTag(
params: CheckProjectParam
): Promise<HttpResponse> {
return axios.post(`dictionary/checkAllRoomTag`, params);
}
// 数据字典-租客管理-全部租客标签列表(包含所有类型标签)
export function getAllTenantDictionaryList(): Promise<SettingTenantDictionaryRes> {
return axios.get(`dictionary/getAllTenantDictionaryList`);
}
// 数据字典-租客管理-单个租客标签信息
export function getTenantDictionary(
id: number,
type: TenantDictionaryType
): Promise<SettingRoomTagsRes> {
return axios.get(`dictionary/getTenantDictionary?id=${id}&type=${type}`);
}
// 数据字典-租客管理-创建租客标签
export function createTenantDictionary(
params: DictionaryForm
): Promise<HttpResponse> {
return axios.post(`dictionary/createTenantDictionary`, params);
}
// 数据字典-租客管理-更新租客标签
export function updateTenantDictionary(
params: DictionaryForm
): Promise<HttpResponse> {
return axios.post(`dictionary/updateTenantDictionary`, params);
}
// 数据字典-租客管理-删除租客标签
export function delTenantDictionary(
id: number,
type: TenantDictionaryType
): Promise<SettingRoomTagsRes> {
return axios.get(`dictionary/delTenantDictionary?id=${id}&type=${type}`);
}
// 数据字典-租客管理-禁用/启用 租客标签(单个)
export function checkTenantDictionary(
params: CheckProjectParam
): Promise<HttpResponse> {
return axios.post(`dictionary/checkTenantDictionary`, params);
}
// 数据字典-租客管理-禁用/启用 租客标签(全选)
export function checkAllTenantDictionary(
params: CheckProjectParam
): Promise<HttpResponse> {
return axios.post(`dictionary/checkAllTenantDictionary`, params);
}
// 数据字典-租客管理--已启用列表(type:1租客类型,2租客来源,3租客行业分类,4租客企业规模)
export function getTenantDictionaryListByType(
type: TenantDictionaryType
): Promise<SettingRoomTagsRes> {
return axios.get(`dictionary/getTenantDictionaryList?type=${type}`);
}
// 合同标签列表(已勾选)
export function getContractTagsList(): Promise<any> {
return axios.get(`dictionary/getContractTagsList`);
}
// 数据字典-合同管理-合同标签列表(全部)
export function getAllContractTagsList(): Promise<any> {
return axios.get(`dictionary/getAllContractTagsList`);
}
// 数据字典-合同管理-创建合同标签
export function createContractTags(
params: DictionaryForm
): Promise<HttpResponse> {
return axios.post(`dictionary/createContractTags`, params);
}
// 数据字典-合同管理-更新合同标签
export function updateContractTags(
params: DictionaryForm
): Promise<HttpResponse> {
return axios.post(`dictionary/updateContractTags`, params);
}
// 数据字典-合同管理-删除合同标签
export function delContractTags(
id: number
): Promise<SettingProjectProvinceRes> {
return axios.get(`dictionary/delContractTags?id=${id}`);
}
// 数据字典-合同管理-禁用/启用 合同标签(单个)
export function checkContractTags(
params: CheckProjectParam
): Promise<HttpResponse> {
return axios.post(`dictionary/checkContractTags`, params);
}
// 数据字典-合同管理-禁用/启用 合同标签(全选)
export function checkAllContractTags(
params: CheckProjectParam
): Promise<HttpResponse> {
return axios.post(`dictionary/checkAllContractTags`, params);
}
// 数据字典-合同管理-单个合同标签信息
export function getContractTags(
id: number
): Promise<SettingProjectProvinceRes> {
return axios.get(`dictionary/getContractTags?id=${id}`);
}
+55
View File
@@ -0,0 +1,55 @@
import axios from 'axios';
import {
FeeManagementListRes,
CreateFeeParams,
FeeManagementDetailRes,
FeeSelectListParams,
DisableUserParam,
} from '@/types/setting';
import { PaginationParams } from '@/types/comm';
import { HttpResponse } from './interceptor';
// ==================== 财务设置 API (financeSetting 路由) ====================
// 合同设置-财务设置-全部列表(带分页)
export function getFeeList(
params: PaginationParams
): Promise<FeeManagementListRes> {
return axios.post(`financeSetting/getFeeList`, params);
}
// 合同设置-财务设置-新增
export function createFee(params: CreateFeeParams): Promise<HttpResponse> {
return axios.post(`financeSetting/createFee`, params);
}
// 合同设置-财务设置-编辑
export function updateFee(params: CreateFeeParams): Promise<HttpResponse> {
return axios.post(`financeSetting/updateFee`, params);
}
// 合同设置-财务设置-删除
export function delFee(id: number): Promise<HttpResponse> {
return axios.get(`financeSetting/delFee?id=${id}`);
}
// 合同设置-财务设置-单个详情
export function getFeeFromId(id: number): Promise<FeeManagementDetailRes> {
return axios.get(`financeSetting/getFee?id=${id}`);
}
// 合同设置-财务设置-启用/禁用
export function disableFee(params: DisableUserParam): Promise<HttpResponse> {
return axios.post(`financeSetting/disableFee`, params);
}
// 合同设置-财务设置-获取下拉列表
export function getUseFeeList(
params: FeeSelectListParams
): Promise<FeeManagementListRes> {
return axios.post(`financeSetting/getUseFeeList`, params);
}
// 合同设置-流水账户管理--获取下拉列表
export function getUseTurnoverAccountList(params: any): Promise<any> {
return axios.get(`financeSetting/getUseTurnoverAccountList`, params);
}
+51
View File
@@ -0,0 +1,51 @@
import axios from 'axios';
import {
AllProjectListRes,
ProjectListRes,
CreateProjectParam,
ProjectDetailRes,
} from '@/types/business';
import { ProjectPaginationParams, CommonCityRes } from '@/types/comm';
import { HttpResponse } from './interceptor';
export interface ProjectRecord {
id: string;
name: string;
type: string;
}
// ==================== 项目相关 API (project 路由) ====================
// 全部项目列表(包含楼栋)
export function getAllProjectList(): Promise<AllProjectListRes> {
return axios.get(`project/getProjectBuildingList`);
}
// 项目列表(分页)
export function getProjectList(
params: ProjectPaginationParams
): Promise<ProjectListRes> {
return axios.post('project/getProjectList', params);
}
// 创建项目
export function createProject(
params: CreateProjectParam
): Promise<HttpResponse> {
return axios.post('project/createProject', params);
}
// 项目信息
export function getProjectDetail(id: number): Promise<ProjectDetailRes> {
return axios.get(`project/getProject?id=${id}`);
}
// 更新项目
export function updateProject(
params: CreateProjectParam
): Promise<HttpResponse> {
return axios.post('project/updateProject', params);
}
// 全部项目的城市列表
export function getProjectCityList(): Promise<CommonCityRes> {
return axios.get(`project/getCityList`);
}
// 删除项目
export function delProject(id: number): Promise<HttpResponse> {
return axios.get(`project/delProject?id=${id}`);
}
+56
View File
@@ -0,0 +1,56 @@
import axios from 'axios';
import {
AllUserListRes,
RoleListRes,
RoleFormParam,
PermissionRes,
RolePermissionRes,
SaveRolePermissionParam,
UpdateUserRoleParam,
} from '@/types/setting';
import { PaginationParams } from '@/types/comm';
import { HttpResponse } from './interceptor';
// ==================== 角色相关 API ====================
export function getRoleList(): Promise<RoleListRes> {
return axios.get('/role/getRoleList');
}
export function createRole(params: RoleFormParam): Promise<HttpResponse> {
return axios.post('/role/createRole', params);
}
export function updateRole(params: RoleFormParam): Promise<HttpResponse> {
return axios.post('/role/updateRole', params);
}
export function delRole(id: number): Promise<HttpResponse> {
return axios.get(`/role/delRole?id=${id}`);
}
export function getPermissionList(): Promise<PermissionRes> {
return axios.get('/role/getPermissionList');
}
export function getRolePermission(id: number): Promise<RolePermissionRes> {
return axios.get(`/role/getRolePermission?id=${id}`);
}
export function saveRolePermission(
params: SaveRolePermissionParam
): Promise<HttpResponse> {
return axios.post('/role/saveRolePermission', params);
}
// 角色下的用户列表
export function getUserListFromRole(
params: PaginationParams
): Promise<AllUserListRes> {
return axios.post('/role/getUserList', params);
}
export function updateUserRole(
params: UpdateUserRoleParam
): Promise<HttpResponse> {
return axios.post('/role/updateUserRole', params);
}
+52
View File
@@ -0,0 +1,52 @@
import axios from 'axios';
import { TopBuildingTagsRes } from '@/types/business';
import { PaginationParams } from '@/types/comm';
import { HttpResponse } from './interceptor';
// ==================== 空间管理 - rooms 路由 ====================
// 创建房源
export function createRoom(params: any): Promise<HttpResponse> {
return axios.post('rooms/createRoom', params);
}
// 房源列表(分页)
export function getRoomList(params: PaginationParams): Promise<HttpResponse> {
return axios.post('rooms/getRoomList', params);
}
// 更新房源
export function updateRoom(params: any): Promise<HttpResponse> {
return axios.post('rooms/updateRoom', params);
}
// 删除房源
export function delRoom(id: number): Promise<HttpResponse> {
return axios.get(`rooms/delRoom?id=${id}`);
}
// 房源详情
export function getRoom(id: number): Promise<HttpResponse> {
return axios.get(`rooms/getRoom?id=${id}`);
}
// 修改房源状态 status:1招商 2保留 3下架 4在租
export function changeRoomStatus(params: any): Promise<HttpResponse> {
return axios.post('rooms/changeRoomStatus', params);
}
// ==================== 空间管理 - roomOver 路由 ====================
// 房源获取头部楼栋tags
export function getTopBuildingTagsByProjectId(
id: number
): Promise<TopBuildingTagsRes> {
return axios.get(`roomOver/getTopBuildingTags?project_id=${id}`);
}
// 房源剖视-数据统计
export function getStatisticsData(params: any): Promise<HttpResponse> {
return axios.post('roomOver/getStatisticsData', params);
}
// 房源剖视-房源列表
export function getRoomOverList(params: any): Promise<HttpResponse> {
return axios.post('roomOver/getRoomList', params);
}
// ==================== 空间管理 - roomsGraph 路由 ====================
// 房源图谱列表
export function getRoomsGraphList(params: any): Promise<HttpResponse> {
return axios.post('roomsGraph/getRoomList', params);
}
+4 -543
View File
@@ -1,570 +1,31 @@
import axios from 'axios';
import {
DepartmentFormParams,
DepartmentFormRes,
DepartmentListRes,
DepartmentDetailRes,
AllUserListRes,
FormUserItem,
UserInfoRes,
DisableUserParam,
RoleListRes,
RoleFormParam,
PermissionRes,
RolePermissionRes,
SaveRolePermissionParam,
UpdateUserRoleParam,
SafeInfoRes,
SafeParams,
SettingProjectRes,
SettingProjectParam,
SettingProjectTypeListRes,
SettingProjectTypeRes,
SettingProjectProvinceRes,
DictionaryForm,
CheckProjectParam,
SettingRoomTagsRes,
SettingRoomTagRes,
SettingTenantDictionaryRes,
SettingContractNumbeRes,
CreateCodeSettingParam,
FeeManagementListRes,
CreateFeeParams,
FeeManagementDetailRes,
FeeSelectListParams,
CreateTermSettingParam,
SettingContractTermListRes,
SettingContractTermInfo,
SettingContractTemplateListRes,
CreateTemplateSettingParam,
ContractWordFormParam,
ContractWordSettingListRes,
SettingContractFileInfoRes,
} from '@/types/setting';
import { PaginationParams, TenantDictionaryType } from '@/types/comm';
import { HttpResponse } from './interceptor';
// ==================== 部门相关 API ====================
export function createDepartment(
params: DepartmentFormParams
): Promise<DepartmentFormRes> {
return axios.post('/department/createDepartment', params);
}
export function updateDepartment(
params: DepartmentFormParams
): Promise<DepartmentFormRes> {
return axios.post('/department/updateDepartment', params);
}
export function getDepartmentList(): Promise<DepartmentListRes> {
return axios.get('/department/getDepartmentList');
}
export function getDepartmentDetail(id: number): Promise<DepartmentDetailRes> {
return axios.get(`/department/getDepartment?id=${id}`);
}
export function departmentSetUp(id: number): Promise<HttpResponse> {
return axios.get(`/department/setUp?id=${id}`);
}
export function departmentSetDown(id: number): Promise<HttpResponse> {
return axios.get(`/department/setDown?id=${id}`);
}
export function delDepartment(id: number): Promise<HttpResponse> {
return axios.get(`/department/delDepartment?id=${id}`);
}
// 保存部门项目数据
export function saveDataPermission(params: any): Promise<HttpResponse> {
return axios.post('/department/saveDataPermission', params);
}
// 获取部门项目数据
export function getDataPermission(id: number): Promise<HttpResponse> {
return axios.get(`/department/getDataPermission?id=${id}`);
}
// ==================== 用户相关 API ====================
export function getAllUserList(
params: PaginationParams
): Promise<AllUserListRes> {
return axios.post('/user/getAllUserList', params);
}
export function getUserList(params: PaginationParams): Promise<AllUserListRes> {
return axios.post('/user/getUserList', params);
}
export function createUser(params: FormUserItem): Promise<HttpResponse> {
return axios.post('/user/createUser', params);
}
export function updateUser(params: FormUserItem): Promise<HttpResponse> {
return axios.post('/user/updateUser', params);
}
export function getUserInfo(id: number): Promise<UserInfoRes> {
return axios.get(`/user/getUser?id=${id}`);
}
export function delUser(id: number): Promise<HttpResponse> {
return axios.get(`/user/delUser?id=${id}`);
}
export function disableUser(params: DisableUserParam): Promise<HttpResponse> {
return axios.post('/user/disableUser', params);
}
// ==================== 角色相关 API ====================
export function getRoleList(): Promise<RoleListRes> {
return axios.get('/role/getRoleList');
}
export function createRole(params: RoleFormParam): Promise<HttpResponse> {
return axios.post('/role/createRole', params);
}
export function updateRole(params: RoleFormParam): Promise<HttpResponse> {
return axios.post('/role/updateRole', params);
}
export function delRole(id: number): Promise<HttpResponse> {
return axios.get(`/role/delRole?id=${id}`);
}
export function getPermissionList(): Promise<PermissionRes> {
return axios.get('/role/getPermissionList');
}
export function getRolePermission(id: number): Promise<RolePermissionRes> {
return axios.get(`role/getRolePermission?id=${id}`);
}
export function saveRolePermission(
params: SaveRolePermissionParam
): Promise<HttpResponse> {
return axios.post('role/saveRolePermission', params);
}
// 角色下的用户列表
export function getUserListFromRole(
params: PaginationParams
): Promise<AllUserListRes> {
return axios.post('role/getUserList', params);
}
// 角色下的用户列表
export function updateUserRole(
params: UpdateUserRoleParam
): Promise<HttpResponse> {
return axios.post('role/updateUserRole', params);
}
// ==================== 系统设置相关 API ====================
// ==================== 系统设置相关 API (setting 路由) ====================
// 通用设置-安全设置信息
export function getSafeSettingInfo(): Promise<SafeInfoRes> {
return axios.get('setting/getSafeSetting');
}
// 通用设置-安全设置信息保存
export function saveSafeSetting(params: SafeParams): Promise<HttpResponse> {
return axios.post('setting/saveSafeSetting', params);
}
// 项目设置信息
export function getProjectSetting(): Promise<SettingProjectRes> {
return axios.get('setting/getProjectSetting');
}
// 项目设置信息保存
export function saveProjectSetting(
params: SettingProjectParam
): Promise<HttpResponse> {
return axios.post('setting/saveProjectSetting', params);
}
// 数据字典-项目管理-全部项目类型列表
export function getAllProjectTypeList(): Promise<SettingProjectTypeListRes> {
return axios.get('dictionary/getAllProjectTypeList');
}
// 数据字典-项目管理-单个项目类型信息
export function getProjectTypeById(id: number): Promise<SettingProjectTypeRes> {
return axios.get(`dictionary/getProjectType?id=${id}`);
}
// 数据字典-项目管理-项目地址列表
export function getProvinceList(): Promise<SettingProjectProvinceRes> {
return axios.get(`dictionary/getProvinceList`);
}
// 数据字典-项目管理-创建项目类型
export function createProjectType(
params: DictionaryForm
): Promise<HttpResponse> {
return axios.post(`dictionary/createProjectType`, params);
}
// 数据字典-项目管理-更新项目类型信息
export function updateProjectType(
params: DictionaryForm
): Promise<HttpResponse> {
return axios.post(`dictionary/updateProjectType`, params);
}
// 数据字典-项目管理-删除项目类型
export function delProjectType(id: number): Promise<SettingProjectProvinceRes> {
return axios.get(`dictionary/delProjectType?id=${id}`);
}
// 数据字典-项目管理-启用/禁用项目类型(单个)
export function checkProjectType(
params: CheckProjectParam
): Promise<HttpResponse> {
return axios.post(`dictionary/checkProjectType`, params);
}
// 数据字典-项目管理-启用/禁用项目类型(全选)
export function checkAllProjectType(
params: CheckProjectParam
): Promise<HttpResponse> {
return axios.post(`dictionary/checkAllProjectType`, params);
}
// 数据字典-项目管理-启用/禁用省份(单个)
export function checkProvince(
params: CheckProjectParam
): Promise<HttpResponse> {
return axios.post(`dictionary/checkProvince`, params);
}
// 数据字典-项目管理-启用/禁用省份(全选)
export function checkAllProvince(
params: CheckProjectParam
): Promise<HttpResponse> {
return axios.post(`dictionary/checkAllProvince`, params);
}
// 数据字典-空间管理-全部房源标签列表
export function getRoomTagList(): Promise<SettingRoomTagsRes> {
return axios.get(`dictionary/getRoomTagList`);
}
// 数据字典-项目管理-单个房源标签信息
export function getRoomTagById(id: number): Promise<SettingRoomTagRes> {
return axios.get(`dictionary/getRoomTag?id=${id}`);
}
// 数据字典-空间管理-创建房源标签
export function createRoomTag(params: DictionaryForm): Promise<HttpResponse> {
return axios.post(`dictionary/createRoomTag`, params);
}
// 数据字典-空间管理-更新房源标签
export function updateRoomTag(params: DictionaryForm): Promise<HttpResponse> {
return axios.post(`dictionary/updateRoomTag`, params);
}
// 数据字典-空间管理-删除房源标签
export function delRoomTag(id: number): Promise<SettingProjectProvinceRes> {
return axios.get(`dictionary/delRoomTag?id=${id}`);
}
// 数据字典-空间管理-禁用/启用 房源标签(单个)
export function checkRoomTag(params: CheckProjectParam): Promise<HttpResponse> {
return axios.post(`dictionary/checkRoomTag`, params);
}
// 数据字典-空间管理-禁用/启用 房源标签(全选)
export function checkAllRoomTag(
params: CheckProjectParam
): Promise<HttpResponse> {
return axios.post(`dictionary/checkAllRoomTag`, params);
}
// 数据字典-租客管理-全部租客标签列表(包含所有类型标签)
export function getAllTenantDictionaryList(): Promise<SettingTenantDictionaryRes> {
return axios.get(`dictionary/getAllTenantDictionaryList`);
}
// 数据字典-租客管理-单个租客标签信息
export function getTenantDictionary(
id: number,
type: TenantDictionaryType
): Promise<SettingRoomTagsRes> {
return axios.get(`dictionary/getTenantDictionary?id=${id}&type=${type}`);
}
// 数据字典-租客管理-创建租客标签
export function createTenantDictionary(
params: DictionaryForm
): Promise<HttpResponse> {
return axios.post(`dictionary/createTenantDictionary`, params);
}
// 数据字典-租客管理-更新租客标签
export function updateTenantDictionary(
params: DictionaryForm
): Promise<HttpResponse> {
return axios.post(`dictionary/updateTenantDictionary`, params);
}
// 数据字典-租客管理-删除租客标签
export function delTenantDictionary(
id: number,
type: TenantDictionaryType
): Promise<SettingRoomTagsRes> {
return axios.get(`dictionary/delTenantDictionary?id=${id}&type=${type}`);
}
// 数据字典-租客管理-禁用/启用 租客标签(单个)
export function checkTenantDictionary(
params: CheckProjectParam
): Promise<HttpResponse> {
return axios.post(`dictionary/checkTenantDictionary`, params);
}
// 数据字典-租客管理-禁用/启用 租客标签(全选)
export function checkAllTenantDictionary(
params: CheckProjectParam
): Promise<HttpResponse> {
return axios.post(`dictionary/checkAllTenantDictionary`, params);
}
// 数据字典-租客管理--已启用列表(type:1租客类型,2租客来源,3租客行业分类,4租客企业规模)
export function getTenantDictionaryListByType(
type: TenantDictionaryType
): Promise<SettingRoomTagsRes> {
return axios.get(`dictionary/getTenantDictionaryList?type=${type}`);
}
// 合同设置-合同编号设置-全部启用列表
export function getAllCodeSettingList(): Promise<SettingContractNumbeRes> {
return axios.get(`contractSetting/getAllCodeSettingList`);
}
// 合同设置-合同编号设置-新增
export function createCodeSetting(
params: CreateCodeSettingParam
): Promise<HttpResponse> {
return axios.post(`contractSetting/createCodeSetting`, params);
}
// 合同设置-合同编号设置-编辑
export function updateCodeSetting(
params: CreateCodeSettingParam
): Promise<HttpResponse> {
return axios.post(`contractSetting/updateCodeSetting`, params);
}
// 合同设置-合同编号设置-删除
export function delCodeSetting(id: number): Promise<HttpResponse> {
return axios.get(`contractSetting/delCodeSetting?id=${id}`);
}
// 合同设置-合同编号设置-单个详情
export function getCodeSettingFromId(
id: number
): Promise<SettingContractNumbeRes> {
return axios.get(`contractSetting/getCodeSetting?id=${id}`);
}
// 合同设置-合同编号设置-启用/禁用
export function disableCodeSetting(
params: DisableUserParam
): Promise<HttpResponse> {
return axios.post(`contractSetting/disableCodeSetting`, params);
}
// 合同设置-合同编号设置-列表(带分页)
export function getCodeSettingList(
params: PaginationParams
): Promise<SettingContractNumbeRes> {
return axios.post(`contractSetting/getCodeSettingList`, params);
}
// 合同设置-合同条款设置-全部启用列表
export function getAllTermsSettingList(): Promise<any> {
return axios.get(`contractSetting/getAllTermsSettingList`);
}
// 合同设置-合同条款设置-新增
export function createTermsSetting(
params: CreateTermSettingParam
): Promise<HttpResponse> {
return axios.post(`contractSetting/createTermsSetting`, params);
}
// 合同设置-合同条款设置-编辑
export function updateTermsSetting(
params: CreateTermSettingParam
): Promise<HttpResponse> {
return axios.post(`contractSetting/updateTermsSetting`, params);
}
// 合同设置-合同条款设置-删除
export function delTermsSetting(id: number): Promise<HttpResponse> {
return axios.get(`contractSetting/delTermsSetting?id=${id}`);
}
// 合同设置-合同条款设置-单个条款配置详情
export function getTermsSettingFromId(
id: number
): Promise<SettingContractTermInfo> {
return axios.get(`contractSetting/getTermsSetting?id=${id}`);
}
// 合同设置-合同条款设置-单个条款数据详情
export function getTermsDataFromId(params: any): Promise<any> {
return axios.post(`contractSetting/getTerm`, params);
}
// 合同设置-合同条款设置-启用/禁用
export function disableTermsSetting(
params: DisableUserParam
): Promise<HttpResponse> {
return axios.post(`contractSetting/disableTermsSetting`, params);
}
// 合同设置-合同条款设置-列表(带分页)
export function getTermsSettingList(
params: PaginationParams
): Promise<SettingContractTermListRes> {
return axios.post(`contractSetting/getTermsSettingList`, params);
}
// 合同设置-财务设置-全部列表(带分页)
export function getFeeList(
params: PaginationParams
): Promise<FeeManagementListRes> {
return axios.post(`financeSetting/getFeeList`, params);
}
// 合同设置-财务设置-新增
export function createFee(params: CreateFeeParams): Promise<HttpResponse> {
return axios.post(`financeSetting/createFee`, params);
}
// 合同设置-财务设置-编辑
export function updateFee(params: CreateFeeParams): Promise<HttpResponse> {
return axios.post(`financeSetting/updateFee`, params);
}
// 合同设置-财务设置-删除
export function delFee(id: number): Promise<HttpResponse> {
return axios.get(`financeSetting/delFee?id=${id}`);
}
// 合同设置-财务设置-单个详情
export function getFeeFromId(id: number): Promise<FeeManagementDetailRes> {
return axios.get(`financeSetting/getFee?id=${id}`);
}
// 合同设置-财务设置-启用/禁用
export function disableFee(params: DisableUserParam): Promise<HttpResponse> {
return axios.post(`financeSetting/disableFee`, params);
}
// 合同设置-财务设置-获取下拉列表
export function getUseFeeList(
params: FeeSelectListParams
): Promise<FeeManagementListRes> {
return axios.post(`financeSetting/getUseFeeList`, params);
}
// 合同设置-流水账户管理--获取下拉列表
export function getUseTurnoverAccountList(params: any): Promise<any> {
return axios.get(`financeSetting/getUseTurnoverAccountList`, params);
}
// 合同设置-合同模板管理-全部启用列表
export function getAllTemplateSettingList(): Promise<SettingContractNumbeRes> {
return axios.get(`contractSetting/getAllTemplateSettingList`);
}
// 合同设置-合同模板管理-新增
export function createTemplateSetting(
params: CreateTemplateSettingParam
): Promise<HttpResponse> {
return axios.post(`contractSetting/createTemplateSetting`, params);
}
// 合同设置-合同模板管理-编辑
export function updateTemplateSetting(params: any): Promise<HttpResponse> {
return axios.post(`contractSetting/saveTemplateSetting`, params);
}
// 合同设置-合同模板管理-删除
export function delTemplateSetting(id: number): Promise<HttpResponse> {
return axios.get(`contractSetting/delTemplateSetting?id=${id}`);
}
// 合同设置-合同模板管理-单个详情
export function getTemplateSettingFromId(id: number): Promise<any> {
return axios.get(`contractSetting/getTemplateSetting?id=${id}`);
}
// 合同设置-合同模板管理-启用/禁用
export function disableTemplateSetting(
params: DisableUserParam
): Promise<HttpResponse> {
return axios.post(`contractSetting/disableTemplateSetting`, params);
}
// 合同设置-合同模板管理-列表(带分页)
export function getTemplateSettingList(
params: PaginationParams
): Promise<SettingContractTemplateListRes> {
return axios.post(`contractSetting/getTemplateSettingList`, params);
}
// 合同设置-合同文档模板管理-全部启用列表
export function getAllWordSettingList(): Promise<ContractWordSettingListRes> {
return axios.get(`contractSetting/getAllWordSettingList`);
}
// 合同设置-合同文档模板管理-新增
export function createWordSetting(
params: ContractWordFormParam
): Promise<HttpResponse> {
return axios.post(`contractSetting/createWordSetting`, params);
}
// 合同设置-合同文档模板管理-编辑(更新)
export function updateWordSetting(
params: ContractWordFormParam
): Promise<HttpResponse> {
return axios.post(`contractSetting/updateWordSetting`, params);
}
// 合同设置-合同文档模板管理-删除
export function delWordSetting(id: number): Promise<HttpResponse> {
return axios.get(`contractSetting/delWordSetting?id=${id}`);
}
// 合同设置-合同文档模板管理-单个详情
export function getWordSettingFromId(
id: number
): Promise<SettingContractFileInfoRes> {
return axios.get(`contractSetting/getWordSetting?id=${id}`);
}
// 合同设置-合同文档模板管理-启用/禁用
export function disableWordSetting(
params: DisableUserParam
): Promise<HttpResponse> {
return axios.post(`contractSetting/disableWordSetting`, params);
}
// 合同设置-合同文档模板管理-列表(带分页)
export function getWordSettingList(
params: PaginationParams
): Promise<ContractWordSettingListRes> {
return axios.post(`contractSetting/getWordSettingList`, params);
}
// 合同标签列表(已勾选)
export function getContractTagsList(): Promise<any> {
return axios.get(`dictionary/getContractTagsList`);
}
// 数据字典-合同管理-合同标签列表(全部)
export function getAllContractTagsList(): Promise<any> {
return axios.get(`dictionary/getAllContractTagsList`);
}
// 数据字典-合同管理-创建合同标签
export function createContractTags(
params: DictionaryForm
): Promise<HttpResponse> {
return axios.post(`dictionary/createContractTags`, params);
}
// 数据字典-合同管理-更新合同标签
export function updateContractTags(
params: DictionaryForm
): Promise<HttpResponse> {
return axios.post(`dictionary/updateContractTags`, params);
}
// 数据字典-合同管理-删除合同标签
export function delContractTags(
id: number
): Promise<SettingProjectProvinceRes> {
return axios.get(`dictionary/delContractTags?id=${id}`);
}
// 数据字典-合同管理-禁用/启用 合同标签(单个)
export function checkContractTags(
params: CheckProjectParam
): Promise<HttpResponse> {
return axios.post(`dictionary/checkContractTags`, params);
}
// 数据字典-合同管理-禁用/启用 合同标签(全选)
export function checkAllContractTags(
params: CheckProjectParam
): Promise<HttpResponse> {
return axios.post(`dictionary/checkAllContractTags`, params);
}
// 数据字典-合同管理-单个合同标签信息
export function getContractTags(
id: number
): Promise<SettingProjectProvinceRes> {
return axios.get(`dictionary/getContractTags?id=${id}`);
}
// 系统配置-流程设置-流程设置列表
// 类型:1审批流,2工作流
export function getWorkflowsList(type: number): Promise<any> {
return axios.get(`workflows/getList?type=${type}`);
}
// 创建流程
export function createWorkflows(params: any): Promise<any> {
return axios.post(`workflows/create`, params);
}
// 保存流程
export function saveWorkflows(params: any): Promise<any> {
return axios.post(`workflows/save`, params);
}
// 审批流详情
export function getWorkflowsDetail(id: number): Promise<any> {
return axios.get(`workflows/getDetail?id=${id}`);
}
// 审批流启用禁用
export function toggleWorkflowsDisable(params: any): Promise<any> {
return axios.post('workflows/disable', params);
}
// 删除审批流
export function delWorkflows(id: number): Promise<any> {
return axios.get(`workflows/del?id=${id}`);
}
+41
View File
@@ -0,0 +1,41 @@
import axios from 'axios';
import { PaginationParams } from '@/types/comm';
import { HttpResponse } from './interceptor';
// ==================== 租客管理 API (tenants 路由) ====================
// 创建租客
export function createTenant(params: any): Promise<HttpResponse> {
return axios.post('tenants/createTenant', params);
}
// 租客列表(分页)
export function getTenantList(params: PaginationParams): Promise<HttpResponse> {
return axios.post('tenants/getTenantList', params);
}
// 更新租客信息
export function updateTenant(params: any): Promise<HttpResponse> {
return axios.post('tenants/updateTenant', params);
}
// 删除租客
export function delTenant(id: number): Promise<HttpResponse> {
return axios.get(`tenants/delTenant?id=${id}`);
}
// 租客详情
export function getTenantDetail(id: number): Promise<HttpResponse> {
return axios.get(`tenants/getTenant?id=${id}`);
}
// 租客归档
export function filingTenant(params: any): Promise<HttpResponse> {
return axios.post('tenants/filingTenant', params);
}
// 租客下拉列表(不分页)
export function getTenantAllList(
params: PaginationParams
): Promise<HttpResponse> {
return axios.post('tenants/getTenantAllList', params);
}
// 租客归档列表(分页)
export function getTenantFilingList(
params: PaginationParams
): Promise<HttpResponse> {
return axios.post('tenants/getTenantFilingList', params);
}
+37 -3
View File
@@ -1,6 +1,13 @@
import axios from 'axios';
import type { RouteRecordNormalized } from 'vue-router';
import { UserPermission } from '@/types/api';
import {
AllUserListRes,
FormUserItem,
UserInfoRes,
DisableUserParam,
} from '@/types/setting';
import { PaginationParams } from '@/types/comm';
import { HttpResponse } from './interceptor';
export interface LoginData {
username: string;
@@ -61,6 +68,33 @@ export function getUserInfo() {
return axios.get<UserState>('/auth/profile');
}
export function getMenuList() {
return axios.post<RouteRecordNormalized[]>('/api/user/menu');
// ==================== 用户管理 API (user 路由) ====================
export function getAllUserList(
params: PaginationParams
): Promise<AllUserListRes> {
return axios.post('/user/getAllUserList', params);
}
export function getUserList(params: PaginationParams): Promise<AllUserListRes> {
return axios.post('/user/getUserList', params);
}
export function createUser(params: FormUserItem): Promise<HttpResponse> {
return axios.post('/user/createUser', params);
}
export function updateUser(params: FormUserItem): Promise<HttpResponse> {
return axios.post('/user/updateUser', params);
}
export function getUserById(id: number): Promise<UserInfoRes> {
return axios.get(`/user/getUser?id=${id}`);
}
export function delUser(id: number): Promise<HttpResponse> {
return axios.get(`/user/delUser?id=${id}`);
}
export function disableUser(params: DisableUserParam): Promise<HttpResponse> {
return axios.post('/user/disableUser', params);
}
+33
View File
@@ -0,0 +1,33 @@
import axios from 'axios';
// ==================== 流程设置 API (workflows 路由) ====================
// 系统配置-流程设置-流程设置列表
// 类型:1审批流,2工作流
export function getWorkflowsList(type: number): Promise<any> {
return axios.get(`workflows/getList?type=${type}`);
}
// 创建流程
export function createWorkflows(params: any): Promise<any> {
return axios.post(`workflows/create`, params);
}
// 保存流程
export function saveWorkflows(params: any): Promise<any> {
return axios.post(`workflows/save`, params);
}
// 审批流详情
export function getWorkflowsDetail(id: number): Promise<any> {
return axios.get(`workflows/getDetail?id=${id}`);
}
// 审批流启用禁用
export function toggleWorkflowsDisable(params: any): Promise<any> {
return axios.post('workflows/disable', params);
}
// 删除审批流
export function delWorkflows(id: number): Promise<any> {
return axios.get(`workflows/del?id=${id}`);
}
+39 -16
View File
@@ -1,20 +1,29 @@
<template>
<!-- Arco a-upload 只认 #upload-button 插槽作为触发区,需把自定义内容传入该插槽 -->
<a-upload
draggable
:accept="accept"
:disabled="disabled"
:custom-request="customRequest"
:multiple="maxCount > 1"
:limit="maxCount"
:show-file-list="showFileList"
:show-upload-button="showUploadButtonConfig"
@change="handleChange"
>
<div style="padding: 20px; text-align: center">
<icon-upload style="font-size: 32px; color: #666" />
<div style="margin-top: 8px">
<p>点击或拖拽文件到此处上传</p>
<p v-if="accept">支持的格式:{{ accept }}</p>
<p>最大支持 {{ maxSizeText }}</p>
</div>
</div>
<template #upload-button>
<!-- 插槽 trigger:可传入自定义触发内容(如按钮),不传则使用下方默认拖拽区 -->
<slot name="trigger">
<div style="padding: 20px; text-align: center">
<icon-upload style="font-size: 32px; color: #666" />
<div style="margin-top: 8px">
<p>点击或拖拽文件到此处上传</p>
<p v-if="accept">支持的格式:{{ accept }}</p>
<p>最大支持 {{ maxSizeText }}</p>
</div>
</div>
</slot>
</template>
</a-upload>
</template>
@@ -30,14 +39,24 @@
objectKey: string;
}
const props = defineProps<{
objectKeys: string[];
signedPutURL: string[];
uploadType: UploadType;
maxSize?: number; // 单位字节
maxCount?: number;
accept?: string; // 限制类型,例如 "application/pdf" 或 ".doc,.docx,.xls" 或 "application/pdf,.docx"
}>();
const props = withDefaults(
defineProps<{
objectKeys?: string[];
signedPutURL?: string[];
uploadType: UploadType;
maxSize?: number; // 单位字节
maxCount?: number;
accept?: string; // 限制类型,例如 "application/pdf" 或 ".doc,.docx,.xls" 或 "application/pdf,.docx"
showFileList?: boolean;
disabled?: boolean;
}>(),
{
objectKeys: () => [],
signedPutURL: () => [],
showFileList: true,
disabled: false,
}
);
const emit = defineEmits<{
(e: 'update:objectKeys', value: string[]): void;
@@ -51,6 +70,10 @@
const maxCount = props.maxCount ?? 1;
const accept = props.accept ?? '*/*'; // 默认支持所有文件
// 达到 limit 后仍显示上传按钮,方便替换文件(Arco 默认会隐藏)
const showUploadButtonConfig = computed(() =>
maxCount > 0 ? { showOnExceedLimit: true } : true
);
const maxSizeText = computed(() => {
const size = props.maxSize || 10 * 1024 * 1024;
return `${Math.round(size / 1024 / 1024)}MB`;
+4 -5
View File
@@ -1,5 +1,5 @@
import { ref, onMounted } from 'vue';
import { getDepartmentList, getDepartmentDetail } from '@/api/setting';
import { getDepartmentList, getDepartmentDetail } from '@/api/department';
import { DepartmentItem } from '@/types/setting';
export default function useDepartmentList(autoFetch = true) {
@@ -40,8 +40,8 @@ export default function useDepartmentList(autoFetch = true) {
);
departmentListData.value = fetchDepartmentList;
}
} catch (error) {
console.error('获取部门列表失败:', error);
} catch {
// 获取部门列表失败,静默处理
}
};
@@ -52,8 +52,7 @@ export default function useDepartmentList(autoFetch = true) {
return data;
}
return null;
} catch (error) {
console.error('获取部门详情失败:', error);
} catch {
return null;
}
};
+1 -28
View File
@@ -1,9 +1,6 @@
import { defineStore } from 'pinia';
import { Notification } from '@arco-design/web-vue';
import type { NotificationReturn } from '@arco-design/web-vue/es/notification/interface';
import type { RouteRecordRaw } from 'vue-router';
import defaultSettings from '@/config/settings.json';
import { getMenuList } from '@/api/user';
import { AppState } from './types';
const useAppStore = defineStore('app', {
@@ -42,7 +39,7 @@ const useAppStore = defineStore('app', {
actions: {
// Update app settings
updateSettings(partial: Partial<AppState>) {
// @ts-ignore-next-line
// @ts-expect-error pinia $patch typing with partial
this.$patch(partial);
},
@@ -62,30 +59,6 @@ const useAppStore = defineStore('app', {
toggleMenu(value: boolean) {
this.hideMenu = value;
},
async fetchServerMenuConfig() {
let notifyInstance: NotificationReturn | null = null;
try {
notifyInstance = Notification.info({
id: 'menuNotice', // Keep the instance id the same
content: 'loading',
closable: true,
});
const { data } = await getMenuList();
this.serverMenu = data;
notifyInstance = Notification.success({
id: 'menuNotice',
content: 'success',
closable: true,
});
} catch (error) {
// eslint-disable-next-line @typescript-eslint/no-unused-vars
notifyInstance = Notification.error({
id: 'menuNotice',
content: 'error',
closable: true,
});
}
},
clearServerMenu() {
this.serverMenu = [];
},
@@ -185,11 +185,11 @@
getCityListByProvinceId,
getDistrictListByCityId,
} from '@/api/common';
import { createProject, updateProject } from '@/api/business';
import { createProject, updateProject } from '@/api/project';
import { CreateProjectParam } from '@/types/business';
import { projectTypeInfo } from '@/types/setting';
import ImageUpload from '@/components/common/ImageUpload.vue';
import { getAllProjectTypeList } from '@/api/setting';
import { getAllProjectTypeList } from '@/api/dictionary';
import draggable from 'vuedraggable';
import { generateRandomId } from '@/utils';
@@ -52,7 +52,7 @@
<script lang="ts" setup>
import { ref, watch, onMounted, computed } from 'vue';
import { getAllProjectTypeList } from '@/api/setting';
import { getAllProjectTypeList } from '@/api/dictionary';
const props = defineProps<{
visible: boolean;
+2 -2
View File
@@ -119,8 +119,8 @@
import type { TableColumnData } from '@arco-design/web-vue';
import useDataTable from '@/composables/useDataTable';
import { ProjectItem } from '@/types/business';
import { getProjectList, getProjectDetail, delProject } from '@/api/business';
import { getAllProjectTypeList } from '@/api/setting';
import { getProjectList, getProjectDetail, delProject } from '@/api/project';
import { getAllProjectTypeList } from '@/api/dictionary';
import { ProjectPaginationParams } from '@/types/comm';
import projectFormDrawer from './drawer/project-form-drawer.vue';
import projectInfoDrawer from './drawer/project-info-drawer.vue';
@@ -179,8 +179,8 @@
getAllBuildingIdNameList,
getAllFloorIdNameList,
} from '@/api/common';
import { getRoomTagList } from '@/api/setting';
import { createRoom, updateRoom } from '@/api/business';
import { getRoomTagList } from '@/api/dictionary';
import { createRoom, updateRoom } from '@/api/room';
const props = defineProps<{
visible: boolean;
isEdit: boolean;
@@ -12,7 +12,7 @@
<p>
{{
`${detailInfo?.name} -
${detailInfo?.projectName}${detailInfo?.buildingName}${detailInfo?.floorName}`
${detailInfo?.projectName}${detailInfo?.buildingName}${detailInfo?.floorName}`
}}
</p>
<div class="mt-[10px]">
@@ -27,11 +27,11 @@
<template #icon>
<icon-edit />
</template>
{{ $t('edit') }}
</a-button> -->
{{ $t('edit') }}
</a-button> -->
</div>
<div class="mt-[20px]">
<a-tabs v-model:active-key="currentTab" class="">
<a-tabs v-model:active-key="currentTab">
<a-tab-pane key="1">
<template #title> <icon-calendar /> 基本信息 </template>
<a-alert type="warning">房源空置 xx 天</a-alert>
@@ -99,7 +99,7 @@
<script lang="ts" setup>
import { ref, watch, computed, onMounted, nextTick } from 'vue';
import { HOUSE_STATUS } from '@/constants';
import { getRoomTagList } from '@/api/setting';
import { getRoomTagList } from '@/api/dictionary';
// 特殊值用于表示"所有"选项(使用负数避免与真实ID冲突)
const ALL_BUILDING_ID = -1;
@@ -129,7 +129,7 @@
import { useI18n } from 'vue-i18n';
import type { TableColumnData } from '@arco-design/web-vue';
import useDataTable from '@/composables/useDataTable';
import { getRoomsGraphList, getRoom, delRoom } from '@/api/business';
import { getRoomsGraphList, getRoom, delRoom } from '@/api/room';
import { ProjectPaginationParams } from '@/types/comm';
import houseFormDrawer from '../drawer/house-form-drawer.vue';
import houseInfoDrawer from '../drawer/house-info-drawer.vue';
@@ -126,7 +126,7 @@
import { useI18n } from 'vue-i18n';
import type { TableColumnData } from '@arco-design/web-vue';
import useDataTable from '@/composables/useDataTable';
import { getRoomList, getRoom, delRoom } from '@/api/business';
import { getRoomList, getRoom, delRoom } from '@/api/room';
import { ProjectPaginationParams } from '@/types/comm';
import houseFormDrawer from '../drawer/house-form-drawer.vue';
import houseInfoDrawer from '../drawer/house-info-drawer.vue';
@@ -189,7 +189,7 @@
import HouseViewFilterDrawer from './house-view-filter-drawer.vue';
import HouseInfoDrawer from '@/views/business/space/drawer/house-info-drawer.vue';
import HouseFormDrawer from '@/views/business/space/drawer/house-form-drawer.vue';
import { getRoom } from '@/api/business';
import { getRoom } from '@/api/room';
import { useUserStore } from '@/store';
interface Props {
@@ -114,7 +114,7 @@
<script lang="ts" setup>
import { ref, watch, computed, onMounted, nextTick } from 'vue';
import { HOUSE_STATUS } from '@/constants';
import { getRoomTagList } from '@/api/setting';
import { getRoomTagList } from '@/api/dictionary';
// 特殊值用于表示"所有"选项(使用负数避免与真实ID冲突)
const ALL_BUILDING_ID = -1;
@@ -42,7 +42,7 @@
getTopBuildingTagsByProjectId,
getStatisticsData,
getRoomOverList,
} from '@/api/business';
} from '@/api/room';
import { useUserStore } from '@/store';
import { Message } from '@arco-design/web-vue';
import type { BuildingTag } from '@/types/business';
@@ -187,7 +187,7 @@
INVOICE_TYPES,
VALIDATION_RULES,
} from '@/constants';
import { createTenant, updateTenant } from '@/api/business';
import { createTenant, updateTenant } from '@/api/tenants';
const props = defineProps<{
visible: boolean;
+5 -5
View File
@@ -43,7 +43,7 @@
>
<template #filingType="{ record }">
<a-tag :color="getFilingTypeColor(record?.filingType)">
{{ record?.filingTypeName || '-' }}
{{ record?.filingName || '-' }}
</a-tag>
</template>
<template #creditScore="{ record }">
@@ -85,7 +85,7 @@
import { useI18n } from 'vue-i18n';
import type { TableColumnData } from '@arco-design/web-vue';
import useDataTable from '@/composables/useDataTable';
import { getTenantFilingList, getTenantDetail } from '@/api/business';
import { getTenantFilingList, getTenantDetail } from '@/api/tenants';
import { ProjectPaginationParams } from '@/types/comm';
import { Message } from '@arco-design/web-vue';
import { TENANT_FILING_TYPE_MAP } from '@/constants';
@@ -166,8 +166,8 @@
},
{
title: '归档原因',
dataIndex: 'filingTypeName',
key: 'filingTypeName',
dataIndex: 'filingName',
key: 'filingName',
slotName: 'filingType',
},
{
@@ -176,7 +176,7 @@
key: 'creditScore',
slotName: 'creditScore',
},
{ title: '操作', key: 'operate', slotName: 'operate', width: 200 },
{ title: '操作', key: 'operate', slotName: 'operate', width: 120 },
];
const queryParams = ref<ProjectPaginationParams>({
+13 -10
View File
@@ -132,9 +132,12 @@
@ok="handleFilingConfirm"
@cancel="handleFilingCancel"
>
<a-form layout="vertical">
<a-form-item label="请选择归档原因" required>
<a-select v-model="filingType" placeholder="请选择归档原因">
<a-form :model="filingForm" layout="vertical">
<a-form-item label="请选择归档原因" field="filingType" required>
<a-select
v-model="filingForm.filingType"
placeholder="请选择归档原因"
>
<a-option
v-for="item in TENANT_FILING_TYPES"
:key="item.value"
@@ -160,7 +163,7 @@
getTenantDetail,
delTenant,
filingTenant,
} from '@/api/business';
} from '@/api/tenants';
import { ProjectPaginationParams } from '@/types/comm';
import { Message, Modal } from '@arco-design/web-vue';
import { TENANT_FILING_TYPES } from '@/constants';
@@ -174,7 +177,7 @@
const showListFilterDrawer = ref<boolean>(false);
const showFilingModal = ref<boolean>(false);
const currentTenantId = ref<number | null>(null);
const filingType = ref<number | undefined>(undefined);
const filingForm = ref<{ filingType?: number }>({ filingType: undefined });
// 保存的筛选状态
const savedFilterState = ref<{
tenantType: number | null;
@@ -432,13 +435,13 @@
// 归档租客
const handleFilingTenant = (id: number) => {
currentTenantId.value = id;
filingType.value = undefined;
filingForm.value.filingType = undefined;
showFilingModal.value = true;
};
// 确认归档
const handleFilingConfirm = async () => {
if (!filingType.value) {
if (!filingForm.value.filingType) {
Message.warning('请选择归档原因');
return;
}
@@ -450,13 +453,13 @@
try {
const { code, message } = await filingTenant({
id: currentTenantId.value,
filingType: filingType.value,
filingType: filingForm.value.filingType,
});
if (code === 200) {
Message.success(message || '归档成功');
showFilingModal.value = false;
filingType.value = undefined;
filingForm.value.filingType = undefined;
currentTenantId.value = null;
// 重新加载列表数据
await getTenantListData();
@@ -471,7 +474,7 @@
// 取消归档
const handleFilingCancel = () => {
showFilingModal.value = false;
filingType.value = undefined;
filingForm.value.filingType = undefined;
currentTenantId.value = null;
};
const getTagsColor = (status) => {
@@ -3,7 +3,7 @@
<Breadcrumb
:items="['menu.setting', 'menu.setting.system', 'setting.contract']"
/>
<a-card class="full_height">
<a-card>
<a-row :gutter="24">
<a-col
v-if="contractFileInfo && Object.keys(contractFileInfo).length"
@@ -13,18 +13,84 @@
<div
class="mt-[24px] rounded-[6px] border-solid border-[#efefef] border-[1px] px-[12px] py-[20px]"
>
<h4 class="text-[16px] font-bold">{{ contractFileInfo?.name }}</h4>
<div class="flex items-center">
<p class="text-[16px] font-bold mr-[10px]">{{
contractFileInfo?.name
}}</p>
<p class="cursor-pointer px-[5px]" @click="openEditModal"
><icon-edit
/></p>
</div>
<p class="text-[14px] mt-[12px]"
><span class="mr-[5px] text-[#101010]">适用范围</span
>立思广州分公司</p
>{{ departmentName }}</p
>
<p class="text-[14px] mt-[4px]"
><span class="mr-[5px] text-[#101010]">适用项目</span
>星河商务中心</p
>{{ projectNames }}</p
>
</div>
<a-modal
v-model:visible="editModalVisible"
title="编辑合同文档模板信息"
unmount-on-close
@ok="confirmEditModal"
@cancel="editModalVisible = false"
>
<a-form
ref="editFormRef"
:model="editForm"
:rules="editFormRules"
layout="vertical"
auto-label-width
>
<a-form-item label="模板名称" field="name" required>
<a-input
v-model="editForm.name"
placeholder="请输入合同模板名称"
/>
</a-form-item>
<a-form-item label="适用范围" field="departmentId" required>
<a-tree-select
v-model="editForm.departmentId"
:data="departmentListData"
:field-names="{
key: 'id',
title: 'name',
children: 'children',
}"
placeholder="请选择适用范围"
allow-clear
@change="onEditDepartmentChange"
/>
</a-form-item>
<a-form-item label="适用项目" field="projects" required>
<a-select
v-model="editForm.projects"
multiple
:disabled="!editForm.departmentId"
placeholder="请选择适用项目"
>
<a-option
v-for="item in editDeptProjectList"
:key="item.id"
:value="item.id"
>
{{ item.name }}
</a-option>
</a-select>
</a-form-item>
</a-form>
</a-modal>
<div class="flex items-center mt-[24px]">
<a-input-search class="w-[256px] h-[30px]" placeholder="搜索名称" />
<a-input-search
v-model="contractPlaceholderListParams.keyword"
class="w-[256px] h-[30px]"
placeholder="搜索名称"
allow-clear
@search="handlePlaceholderSearch"
@press-enter="handlePlaceholderSearch"
/>
<div
class="flex items-center border-[1px] border-solid border-[#165DFF] px-[4px] py-[6px] ml-[10px]"
>
@@ -32,20 +98,51 @@
<p class="ml-[5px] text-[#165DFF]">AI助手</p>
</div>
</div>
<a-tabs default-active-key="1" class="mt-[10px]">
<a-tab-pane key="1" title="租赁条款"> 租赁条款 </a-tab-pane>
<a-tab-pane key="2" title="物业条款"> w物业条款 </a-tab-pane>
<a-tabs
v-model:active-key="contractPlaceholderListParams.type"
class="mt-[10px]"
>
<a-tab-pane
v-for="tab in placeholderTabs"
:key="tab.key"
class="cursor-pointer"
:title="tab.title"
>
<a-descriptions bordered :column="1">
<a-descriptions-item
v-for="item in contractPlaceholderList"
:key="item.id"
:label="item.name"
>
{{ item.keyword }}
</a-descriptions-item>
</a-descriptions>
</a-tab-pane>
</a-tabs>
</a-col>
<a-col :span="17">
<div class="flex items-center justify-between">
<div class="flex items-center">
<a-button>
<template #icon>
<icon-upload />
<FileUpload
v-model:object-keys="uploadObjectKeys"
v-model:signed-put-u-r-l="uploadSignedPutURL"
:max-count="1"
:upload-type="1"
accept=".doc,.docx"
:show-file-list="false"
:disabled="!contractFileInfo?.id"
@upload-success="onUploadSuccess"
@upload-error="onUploadError"
>
<template #trigger>
<a-button :disabled="!contractFileInfo?.id">
<template #icon>
<icon-upload />
</template>
上传文档
</a-button>
</template>
上传文档
</a-button>
</FileUpload>
<a-button class="ml-[10px]">
<template #icon>
<icon-cloud-download />
@@ -54,8 +151,8 @@
</a-button>
</div>
<div class="flex items-center">
<p>2025-09-10 00:25:30更新</p>
<a-button type="primary" class="ml-[10px]">
<p>{{ contractFileInfo?.updatedAt }}更新</p>
<a-button type="primary" class="ml-[10px]" @click="handleSave">
<template #icon>
<icon-storage />
</template>
@@ -65,14 +162,28 @@
</div>
<!-- OnlyOffice 文档编辑器 -->
<div class="onlyoffice-wrapper">
<!-- <OnlyOfficeEditor v-if="contractFileInfo?.url" :document-url="contractFileInfo.url"
:document-title="contractFileInfo.name || '合同文档'"
:document-type="getDocumentType(contractFileInfo.url)" :height="'600px'" :editable="true"
:mode="'edit'" @ready="onEditorReady" @error="onEditorError" @save="onDocumentSave"
@close="onEditorClose" />
<div v-else class="no-document">
<a-empty description="暂无文档内容" />
</div> -->
<OnlyOfficeEditor
v-if="contractFileInfo?.url"
:document-url="contractFileInfo.url"
:document-title="contractFileInfo?.name || '合同文档'"
:document-type="getDocumentType(contractFileInfo.url)"
height="600px"
:editable="true"
mode="edit"
@ready="onEditorReady"
@error="onEditorError"
@save="onDocumentSave"
@close="onEditorClose"
/>
<div v-else class="no-document">
<a-empty
:description="
contractFileInfo
? '暂无文档内容,请上传文档'
: '请先选择左侧合同模板'
"
/>
</div>
</div>
</a-col>
</a-row>
@@ -80,13 +191,136 @@
</div>
</template>
<script lang="ts" setup>
import { onMounted, ref } from 'vue';
import { onMounted, ref, reactive, computed, watch } from 'vue';
import { useRoute } from 'vue-router';
import { Message } from '@arco-design/web-vue';
import { getWordSettingFromId } from '@/api/setting';
import { CreateFileSettingParam } from '@/types/setting';
import type { FormInstance } from '@arco-design/web-vue';
import {
getWordSettingFromId,
getContractPlaceholderList,
updateWordSetting,
} from '@/api/contracts';
import { getDepartmentList } from '@/api/department';
import { getDeptProjectListFromDeptId } from '@/api/common';
import { CreateFileSettingParam, DepartmentItem } from '@/types/setting';
import FileUpload from '@/components/common/FileUpload.vue';
const contractFileInfo = ref<CreateFileSettingParam | null>(null);
const contractPlaceholderListParams = ref({ keyword: '', type: 1 });
const placeholderTabs = [
{ key: 1, title: '租赁条款' },
{ key: 2, title: '物业条款' },
];
const contractPlaceholderList = ref<any[]>([]);
const placeholderListLoading = ref(false);
// 占位符列表按 tab type 缓存:1 租赁条款,2 物业条款
const placeholderListCache = ref<Record<number, any[]>>({});
const uploadObjectKeys = ref<string[]>([]);
const uploadSignedPutURL = ref<string[]>([]);
// 编辑弹窗:仅改本地,不请求接口
const editModalVisible = ref(false);
const editFormRef = ref<FormInstance>();
const departmentListData = ref<DepartmentItem[]>([]);
const editDeptProjectList = ref<{ id: number; name: string }[]>([]);
const editForm = reactive<{
name: string;
departmentId: number | null;
projects: number[];
}>({
name: '',
departmentId: null,
projects: [],
});
const editFormRules = {
name: [{ required: true, message: '请输入合同模板名称' }],
departmentId: [{ required: true, message: '请选择适用范围' }],
projects: [
{ required: true, message: '请选择适用项目', type: 'array', min: 1 },
],
};
const departmentName = computed(() => {
if (!contractFileInfo.value?.departmentId) return '-';
const find = (list: DepartmentItem[], id: number): string | undefined => {
for (const item of list) {
if (item.id === id) return item.name;
if (item.children?.length) {
const n = find(item.children, id);
if (n) return n;
}
}
return undefined;
};
return (
find(departmentListData.value, contractFileInfo.value.departmentId) ?? '-'
);
});
// 适用项目展示:有则用顿号拼接名称,无则显示 -
const projectNames = computed(() => {
const list = contractFileInfo.value?.projects;
if (!list || !Array.isArray(list) || list.length === 0) return '-';
const names = list
.map((i: any) => (i?.name != null ? String(i.name).trim() : ''))
.filter(Boolean);
return names.length > 0 ? names.join('、') : '-';
});
const openEditModal = () => {
if (!contractFileInfo.value) return;
editForm.name = contractFileInfo.value.name ?? '';
editForm.departmentId = contractFileInfo.value.departmentId ?? null;
editForm.projects = (contractFileInfo.value.projects || []).map((p: any) =>
typeof p === 'object' && p?.id != null ? p.id : p
);
editModalVisible.value = true;
if (editForm.departmentId) {
getDeptProjectListFromDeptId(editForm.departmentId).then(
({ code, data }) => {
if (code === 200)
editDeptProjectList.value = data?.deptProjectList ?? [];
}
);
} else {
editDeptProjectList.value = [];
}
};
const onEditDepartmentChange = (id: number | undefined) => {
editForm.projects = [];
if (!id) {
editDeptProjectList.value = [];
return;
}
getDeptProjectListFromDeptId(id).then(({ code, data }) => {
if (code === 200) editDeptProjectList.value = data?.deptProjectList ?? [];
});
};
const confirmEditModal = async () => {
try {
await editFormRef.value?.validate();
} catch {
return false; // 校验失败时不关闭弹窗
}
if (!contractFileInfo.value) return false;
contractFileInfo.value.name = editForm.name.trim();
contractFileInfo.value.departmentId = editForm.departmentId;
contractFileInfo.value.projects = editForm.projects.map((id) => ({
id,
name: editDeptProjectList.value.find((p) => p.id === id)?.name ?? '',
})) as any;
editModalVisible.value = false;
Message.success('请点击保存按钮提交更新');
};
const getDepartmentListData = async () => {
const { code, data } = await getDepartmentList();
if (code === 200) departmentListData.value = data?.departmentList ?? [];
};
const route = useRoute();
// 获取文档数据
@@ -96,16 +330,17 @@
if (code === 200 && data) {
const { contractWordSetting } = data;
contractFileInfo.value = contractWordSetting || null;
contractFileInfo.value.url =
'http://oss.kola.work/documents%2F20250910%2F%E5%90%88%E5%90%8C%E6%A8%A1%E7%89%88.docx?Expires=1757479342&OSSAccessKeyId=LTAI5tDDNxXnZq7QcpZEf6hR&Signature=ydBzbF2yCyRWZ0G52s%2FPr%2BFIUzo%3D';
// contractFileInfo.value.url =
// 'http://oss.kola.work/documents%2F20250910%2F%E5%90%88%E5%90%8C%E6%A8%A1%E7%89%88.docx?Expires=1757479342&OSSAccessKeyId=LTAI5tDDNxXnZq7QcpZEf6hR&Signature=ydBzbF2yCyRWZ0G52s%2FPr%2BFIUzo%3D';
}
};
// 根据文件 URL 获取文档类型
// 根据文件 URL 获取文档类型(兼容带 ? 的签名链接)
const getDocumentType = (url: string): 'word' | 'excel' | 'powerpoint' => {
if (!url) return 'word';
const extension = url.toLowerCase().split('.').pop();
const pathWithoutQuery = url.split('?')[0];
const extension = pathWithoutQuery.toLowerCase().split('.').pop() || '';
switch (extension) {
case 'xlsx':
case 'xls':
@@ -142,8 +377,92 @@
Message.info('编辑器已关闭');
};
// 上传成功:仅更新本地 url,不请求接口(统一由保存按钮提交)
const onUploadSuccess = (payload: {
objectKey: string;
signedPutURL: string;
}) => {
if (!contractFileInfo.value?.id) return;
contractFileInfo.value.url = payload.signedPutURL;
Message.success('文档已上传,请点击保存按钮提交到服务器');
};
const onUploadError = () => {
Message.error('上传失败,请重试');
};
// 占位符搜索:按当前关键词重新拉取列表
const handlePlaceholderSearch = () => {
getContractPlaceholderListData();
};
// 获取合同占位符列表(type: 1 租赁,2 物业),请求成功后写入缓存
const getContractPlaceholderListData = async () => {
const { type, keyword } = contractPlaceholderListParams.value;
placeholderListLoading.value = true;
try {
const { code, data } = await getContractPlaceholderList({
type,
keyword,
});
const list = code === 200 ? data?.placeholderList ?? [] : [];
contractPlaceholderList.value = list;
placeholderListCache.value[type] = [...list];
} catch (e) {
Message.error('获取占位符列表失败');
contractPlaceholderList.value = [];
} finally {
placeholderListLoading.value = false;
}
};
// 切换 tab:有缓存则用缓存,无则请求并写入缓存(immediate 负责首屏请求)
watch(
() => contractPlaceholderListParams.value.type,
(newType) => {
const cached = placeholderListCache.value[newType];
if (cached !== undefined) {
contractPlaceholderList.value = cached;
} else {
getContractPlaceholderListData();
}
},
{ immediate: true }
);
// 保存按钮:统一调用更新接口
const handleSave = async () => {
if (!contractFileInfo.value?.id) {
Message.warning('请先选择合同模板');
return;
}
const departmentId = contractFileInfo.value.departmentId ?? 0;
const projects = (contractFileInfo.value.projects || []).map((p: any) =>
typeof p === 'object' && p?.id != null ? p.id : p
);
const url = contractFileInfo.value.url ?? '';
const params = {
id: contractFileInfo.value.id,
name: contractFileInfo.value.name,
departmentId,
projects,
url,
};
try {
const { code, message } = await updateWordSetting(params);
if (code === 200) {
Message.success(message || '保存成功');
} else {
Message.error(message || '保存失败');
}
} catch (e) {
Message.error('保存失败');
}
};
onMounted(() => {
getWordSettingFromIdData();
getDepartmentListData();
});
</script>
@@ -152,7 +471,6 @@
margin-top: 16px;
border: 1px solid #e5e6eb;
border-radius: 6px;
overflow: hidden;
background: #fff;
}
@@ -162,28 +480,7 @@
background: #f7f8fa;
}
.system-setting-contract-file {
height: 100vh;
overflow: hidden;
}
.full_height {
height: calc(100vh - 120px);
overflow: hidden;
}
:deep(.arco-card-body) {
height: 100%;
padding: 20px;
overflow: hidden;
}
:deep(.arco-row) {
height: 100%;
}
:deep(.arco-col) {
height: 100%;
overflow: hidden;
}
/* .system-setting-contract-file {
height: 100vh;
} */
</style>
@@ -64,8 +64,8 @@
delWordSetting,
getWordSettingList,
disableWordSetting,
getDepartmentList,
} from '@/api/setting';
} from '@/api/contracts';
import { getDepartmentList } from '@/api/department';
import { ContractWordItem, DepartmentItem } from '@/types/setting';
import { UserStatus } from '@/types/comm';
import { camelToSnake } from '@/utils/caseConvert';
@@ -65,7 +65,7 @@
getCodeSettingFromId,
disableCodeSetting,
delCodeSetting,
} from '@/api/setting';
} from '@/api/contracts';
import { ContractTermInfo } from '@/types/setting';
import { UserStatus } from '@/types/comm';
import { camelToSnake } from '@/utils/caseConvert';
@@ -256,13 +256,13 @@
import {
getTemplateSettingFromId,
getTermsSettingFromId,
getDepartmentList,
getAllCodeSettingList,
getContractTagsList,
updateTemplateSetting,
getAllTermsSettingList,
getTermsDataFromId,
} from '@/api/setting';
} from '@/api/contracts';
import { getDepartmentList } from '@/api/department';
import contractTemplateForm from './modal/contract-template-form.vue';
import { DepartmentItem } from '@/types/setting';
import type { FormInstance } from '@arco-design/web-vue';
@@ -63,9 +63,9 @@
import {
delTemplateSetting,
getTemplateSettingList,
getDepartmentList,
disableTemplateSetting,
} from '@/api/setting';
} from '@/api/contracts';
import { getDepartmentList } from '@/api/department';
import { ContractTemplateSettingItem, DepartmentItem } from '@/types/setting';
import { UserStatus } from '@/types/comm';
import contractTemplateForm from './modal/contract-template-form.vue';
@@ -65,7 +65,7 @@
getTermsSettingFromId,
disableTermsSetting,
delTermsSetting,
} from '@/api/setting';
} from '@/api/contracts';
import { TermSettingItem } from '@/types/setting';
import { UserStatus } from '@/types/comm';
import contractNumberFormDrawer from './drawer/contract-terms-form-drawer.vue';
@@ -105,7 +105,7 @@
import { ref, watch, reactive, computed } from 'vue';
import type { FormInstance } from '@arco-design/web-vue';
import { Message } from '@arco-design/web-vue';
import { createCodeSetting, updateCodeSetting } from '@/api/setting';
import { createCodeSetting, updateCodeSetting } from '@/api/contracts';
// import { CreateCodeSettingParam } from '@/types/setting'
import draggable from 'vuedraggable';
@@ -102,11 +102,8 @@
import { ref, watch, reactive, onMounted } from 'vue';
import type { FormInstance } from '@arco-design/web-vue';
import { Message } from '@arco-design/web-vue';
import {
createTermsSetting,
updateTermsSetting,
getUseFeeList,
} from '@/api/setting';
import { createTermsSetting, updateTermsSetting } from '@/api/contracts';
import { getUseFeeList } from '@/api/finance-setting';
import { feeTypeList, financeFeeFeriodicityList } from '@/utils/constant';
import { CreateTermSettingParam, FeeManagement } from '@/types/setting';
import { FeeManagementType } from '@/types/comm';
@@ -64,7 +64,7 @@
<script setup lang="ts">
import { ref, reactive, watch } from 'vue';
import type { FormInstance } from '@arco-design/web-vue';
import { createWordSetting, updateWordSetting } from '@/api/setting';
import { createWordSetting, updateWordSetting } from '@/api/contracts';
import { DepartmentItem } from '@/types/setting';
import { getDeptProjectListFromDeptId } from '@/api/common';
import { Message } from '@arco-design/web-vue';
@@ -34,7 +34,10 @@
<script setup lang="ts">
import { ref, reactive, watch } from 'vue';
import type { FormInstance } from '@arco-design/web-vue';
import { createTemplateSetting, updateTemplateSetting } from '@/api/setting';
import {
createTemplateSetting,
updateTemplateSetting,
} from '@/api/contracts';
import { DepartmentItem, CreateTemplateSettingParam } from '@/types/setting';
import { Message } from '@arco-design/web-vue';
import { useRouter } from 'vue-router';
@@ -74,7 +74,7 @@
import type { FormInstance } from '@arco-design/web-vue';
import rentSettingDrawer from '../drawer/rent-setting-drawer.vue';
import dayjs from 'dayjs';
import { getUseTurnoverAccountList } from '@/api/setting';
import { getUseTurnoverAccountList } from '@/api/finance-setting';
const isShowDrawer = ref<boolean>(false);
// 与抽屉保持一致的默认表单,用于初始回显与编辑回填
const defaultForm: any = {
@@ -71,7 +71,7 @@
createContractTags,
updateContractTags,
delContractTags,
} from '@/api/setting';
} from '@/api/dictionary';
import { ProjectTypeChecked } from '@/types/comm';
import useLoading from '@/hooks/loading';
import { Message } from '@arco-design/web-vue';
@@ -104,7 +104,7 @@
createProjectType,
updateProjectType,
delProjectType,
} from '@/api/setting';
} from '@/api/dictionary';
import { projectTypeInfo, ProvinceItem } from '@/types/setting';
import { ProjectTypeChecked } from '@/types/comm';
import useLoading from '@/hooks/loading';
@@ -71,7 +71,7 @@
createRoomTag,
updateRoomTag,
delRoomTag,
} from '@/api/setting';
} from '@/api/dictionary';
import { projectTypeInfo } from '@/types/setting';
import { ProjectTypeChecked } from '@/types/comm';
import useLoading from '@/hooks/loading';
@@ -202,7 +202,7 @@
createTenantDictionary,
updateTenantDictionary,
delTenantDictionary,
} from '@/api/setting';
} from '@/api/dictionary';
import { ProjectTypeChecked, TenantDictionaryType } from '@/types/comm';
import { projectTypeInfo } from '@/types/setting';
import useLoading from '@/hooks/loading';
@@ -74,7 +74,7 @@
import { ref, watch, reactive } from 'vue';
import type { FormInstance } from '@arco-design/web-vue';
import { Message } from '@arco-design/web-vue';
import { createFee, updateFee } from '@/api/setting';
import { createFee, updateFee } from '@/api/finance-setting';
import { CreateFeeParams } from '@/types/setting';
import { feeTypeList } from '@/utils/constant';
@@ -43,7 +43,7 @@
import { onMounted, ref, watch } from 'vue';
import useDataTable from '@/composables/useDataTable';
import type { TableColumnData } from '@arco-design/web-vue';
import { getFeeList, disableFee, delFee } from '@/api/setting';
import { getFeeList, disableFee, delFee } from '@/api/finance-setting';
import { FeeManagement } from '@/types/setting';
import { FeeType, UserStatus } from '@/types/comm';
import { Message } from '@arco-design/web-vue';
@@ -32,7 +32,7 @@
<script lang="ts" setup>
import { ref } from 'vue';
import { getFeeFromId } from '@/api/setting';
import { getFeeFromId } from '@/api/finance-setting';
import feeManagementTable from './fee-management-table.vue';
import feeManagementDrawer from './drawer/fee-management-drawer.vue';
@@ -67,7 +67,7 @@
import { ref, reactive, watch } from 'vue';
import { useI18n } from 'vue-i18n';
import type { FormInstance } from '@arco-design/web-vue';
import { createDepartment, updateDepartment } from '@/api/setting';
import { createDepartment, updateDepartment } from '@/api/department';
import { DepartmentItem, UserList } from '@/types/setting';
import { Message } from '@arco-design/web-vue';
// Props & Emits
@@ -129,15 +129,15 @@
import { ref, watch, onMounted } from 'vue';
import { useI18n } from 'vue-i18n';
import useDepartmentList from '@/composables/useDepartmentList';
import { getAllUserList } from '@/api/user';
import {
getAllUserList,
departmentSetUp,
departmentSetDown,
delDepartment,
saveDataPermission,
} from '@/api/setting';
} from '@/api/department';
import { DepartmentItem, UserList } from '@/types/setting';
import { getAllProjectList } from '@/api/business';
import { getAllProjectList } from '@/api/project';
import { debounce } from '@/utils';
import { Message } from '@arco-design/web-vue';
import departmentFormModal from './components/department-form-modal.vue';
@@ -62,7 +62,7 @@
import { ref, watch, reactive } from 'vue';
import type { FormInstance } from '@arco-design/web-vue';
import { Message } from '@arco-design/web-vue';
import { createWorkflows } from '@/api/setting';
import { createWorkflows } from '@/api/workflows';
import { getAllProjectIdNameList, getWorkflowsTypeList } from '@/api/common';
const allProjetList = ref<any>([]);
const isLoading = ref<boolean>(false);
@@ -215,7 +215,7 @@
saveWorkflows,
toggleWorkflowsDisable,
delWorkflows,
} from '@/api/setting';
} from '@/api/workflows';
import { Message } from '@arco-design/web-vue';
import addApproval from './components/add-approval.vue';
import StartNode from './components/custom-nodes/StartNode.vue';
@@ -37,7 +37,7 @@
import { useI18n } from 'vue-i18n';
import type { FormInstance } from '@arco-design/web-vue';
import { Message } from '@arco-design/web-vue';
import { updateUserRole } from '@/api/setting';
import { updateUserRole } from '@/api/role';
import { UpdateUserRoleParam, RoleItem } from '@/types/setting';
const isLoading = ref<boolean>(false);
@@ -33,7 +33,7 @@
<script lang="ts" setup>
import { ref, watch } from 'vue';
import { getRolePermission } from '@/api/setting';
import { getRolePermission } from '@/api/role';
import PermissionNode from './permission-node.vue';
const props = defineProps<{
@@ -37,7 +37,7 @@
import { useI18n } from 'vue-i18n';
import type { FormInstance } from '@arco-design/web-vue';
import { Message } from '@arco-design/web-vue';
import { updateRole, createRole } from '@/api/setting';
import { updateRole, createRole } from '@/api/role';
import { RoleFormParam, RoleItem } from '@/types/setting';
const isLoading = ref<boolean>(false);
@@ -111,7 +111,7 @@
import { ref, watch, reactive } from 'vue';
import { useI18n } from 'vue-i18n';
import type { FormInstance } from '@arco-design/web-vue';
import { createUser, updateUser } from '@/api/setting';
import { createUser, updateUser } from '@/api/user';
import { DepartmentItem, RoleItem, FormUserItem } from '@/types/setting';
const isLoading = ref<boolean>(false);
+3 -8
View File
@@ -119,13 +119,8 @@
import { useI18n } from 'vue-i18n';
import { useRouter } from 'vue-router';
import type { TableColumnData } from '@arco-design/web-vue';
import {
getUserList,
getRoleList,
getUserInfo,
disableUser,
delUser,
} from '@/api/setting';
import { getUserList, getUserById, disableUser, delUser } from '@/api/user';
import { getRoleList } from '@/api/role';
import { UserList, RoleItem, FormUserItem } from '@/types/setting';
import { UserStatus } from '@/types/comm';
import useDepartmentList from '@/composables/useDepartmentList';
@@ -310,7 +305,7 @@
};
const getUserInfoData = async (id: number) => {
try {
const { code, data } = await getUserInfo(id);
const { code, data } = await getUserById(id);
if (code === 200) userInfo.value = data?.user;
} catch (error) {
// 处理错误
+1 -1
View File
@@ -174,7 +174,7 @@
saveRolePermission,
getPermissionList,
getUserListFromRole,
} from '@/api/setting';
} from '@/api/role';
import { UserList, RoleItem } from '@/types/setting';
import useLoading from '@/hooks/loading';
import { Message } from '@arco-design/web-vue';