+
),
@@ -114,45 +128,29 @@ export const LayoutConfig: RuntimeConfig['layout'] = () => {
- {/*
-
-
-
-
- }
- >
-
} />
-
-
} /> */}
-
}
onClick={() => history.push('/system/sys_permissions')}
+ /> */}
+
@@ -202,7 +200,6 @@ export const LayoutConfig: RuntimeConfig['layout'] = () => {
const repeatIndex = openKeys
.filter((key) => key !== currentOpenKey)
.findIndex((key) => levelKeys[key] === levelKeys[currentOpenKey]);
-
setStateOpenKeys(
openKeys
// remove repeat key
diff --git a/src/common/libs/umi/requestConfig.ts b/src/common/libs/umi/requestConfig.ts
index 5d48bf6..e3dc680 100644
--- a/src/common/libs/umi/requestConfig.ts
+++ b/src/common/libs/umi/requestConfig.ts
@@ -41,7 +41,9 @@ export const requestConfig: RequestConfig = {
// 错误接收及处理
errorHandler: (error: any) => {
if (error) {
- message.error(error.errorMessage);
+ if (error.errorMessage !== '用户未登录') {
+ message.error(error.errorMessage);
+ }
switch (error.errorCode) {
case 10000:
if (history.location.pathname !== '/login') history.push('/login');
diff --git a/src/common/libs/valtio/actions.ts b/src/common/libs/valtio/actions.ts
index 7f79f47..1d2c4d5 100644
--- a/src/common/libs/valtio/actions.ts
+++ b/src/common/libs/valtio/actions.ts
@@ -17,6 +17,7 @@ export const stateActions = {
state.session.campus = res.data.campus;
state.session.company_configs = res.data.company_configs;
state.session.permissions = res.data.permissions;
+ state.session.current_project = res.data.current_project;
if (res.data?.token?.access_token)
state.storage.access_token = res.data?.token?.access_token;
// 解析apis
diff --git a/src/common/libs/valtio/state.ts b/src/common/libs/valtio/state.ts
index 2ec6308..83c185b 100644
--- a/src/common/libs/valtio/state.ts
+++ b/src/common/libs/valtio/state.ts
@@ -48,6 +48,10 @@ type SessionType = {
permissions?: any;
apiKeys: string[];
loading: number;
+ current_project?: {
+ id: number;
+ name: string;
+ };
};
const session: SessionType = proxy({
@@ -58,6 +62,7 @@ const session: SessionType = proxy({
company_configs: {},
apiKeys: [],
loading: 0,
+ current_project: undefined,
});
export const state = proxy({
diff --git a/src/common/pages/MyLoginPage.tsx b/src/common/pages/MyLoginPage.tsx
index 5dc56c6..28d28cc 100644
--- a/src/common/pages/MyLoginPage.tsx
+++ b/src/common/pages/MyLoginPage.tsx
@@ -59,7 +59,10 @@ export function MyLoginPage() {
...values,
...{ captcha_key: getCaptcha?.key },
})
- .then(async (res) => {
+ .then(async (res: any) => {
+ let pass = btoa(`${values?.password}_01`);
+ console.log(pass, 'pass', values?.password);
+ sessionStorage.setItem('loginUserInfo', pass);
await stateActions.setLogin(res);
navigate('/');
})
diff --git a/src/common/utils/day.ts b/src/common/utils/day.ts
index 770f45e..6c76a88 100644
--- a/src/common/utils/day.ts
+++ b/src/common/utils/day.ts
@@ -11,3 +11,41 @@ export const isInTimeRange = (startTime?: string, endTime?: string) => {
export function showTime(time?: string, num?: number) {
return time?.substring(0, num || 5) || '';
}
+
+export function useCurrentDayTime() {
+ let currentTime = dayjs().format('HH:mm:ss');
+ let intervalId: NodeJS.Timeout;
+
+ const start = () => {
+ intervalId = setInterval(() => {
+ currentTime = dayjs().format('HH:mm:ss');
+ }, 1000);
+ };
+
+ const stop = () => {
+ if (intervalId) {
+ clearInterval(intervalId);
+ }
+ };
+
+ const getTime = () => {
+ return currentTime;
+ };
+
+ return {
+ start,
+ stop,
+ getTime,
+ };
+}
+
+// 保持原有函数兼容性
+export function ShowCurrentDayTime() {
+ const timeString = dayjs().format('HH:mm:ss');
+ return timeString;
+}
+
+export function GetFromNow(time: string) {
+ //获取时间距离现在的时间
+ return time ? dayjs(time).fromNow() : '';
+}
diff --git a/src/common/utils/renderTextHelper.tsx b/src/common/utils/renderTextHelper.tsx
index 6c7662f..42202dc 100644
--- a/src/common/utils/renderTextHelper.tsx
+++ b/src/common/utils/renderTextHelper.tsx
@@ -27,11 +27,7 @@ export const renderTextHelper = {
let item: any = Object.values(Enums).find((data: any) => {
return data.value === '' + value;
});
- return isColor ? (
-
{item?.text}
- ) : (
-
{item?.text}
- );
+ return isColor ?
{item?.text} : item?.text;
// return
{item.text};
},
Images(images: string[]) {
diff --git a/src/components/MyModal.tsx b/src/components/MyModal.tsx
index d9249ae..edf9bed 100644
--- a/src/components/MyModal.tsx
+++ b/src/components/MyModal.tsx
@@ -34,6 +34,7 @@ export function MyModal(props?: any) {
type={props.type || 'primary'}
size={props.size || 'small'}
onClick={() => setOpen(true)}
+ {...props?.modal?.btnProps}
/>
)
) : (
diff --git a/src/gen/ApiTypes.d.ts b/src/gen/ApiTypes.d.ts
index 9337a58..abb4d8e 100644
--- a/src/gen/ApiTypes.d.ts
+++ b/src/gen/ApiTypes.d.ts
@@ -151,6 +151,11 @@ declare namespace ApiTypes {
"asset_houses_id"?: number; // 资产房屋ID
"asset_projects_id"?: number; // 资产项目ID
"status"?: string; // 状态,[enum:HouseOccupantsStatusEnum]
+ "name"?: string; // 客户姓名
+ "phone"?: string; // 客户手机号
+ "id_card"?: string; // 客户身份证号
+ "house_name"?: string; // 房屋名称
+ "project_name"?: string; // 项目名称
};
type CustomerList = {
"name"?: string; // 客户姓名
@@ -191,6 +196,9 @@ declare namespace ApiTypes {
"id": number; // id
"is_contact": boolean; // 是否是常用联系人
};
+ type Import = {
+ "upload_file"?: mimes:xlsx,xls; // 上传的时候必填文件
+ };
}
namespace HouseRegisters {
type List = {
@@ -198,6 +206,8 @@ declare namespace ApiTypes {
"type"?: string[]; // 类型,[enum:HouseRegistersTypeEnum]
"status"?: string; // 状态,[enum:HouseRegistersStatusEnum]
"asset_houses_id"?: number; // 房屋ID
+ "customer_name"?: string; // 客户名称
+ "project_name"?: string; // 模糊搜索:项目名称
};
type Store = {
"asset_houses_id": number; // 房屋ID
@@ -660,6 +670,156 @@ declare namespace ApiTypes {
};
}
}
+ namespace Attendance {
+ namespace AttendanceConfigs {
+ type List = {
+ "page"?: number; // -
+ "per_page"?: number; // -
+ };
+ type Store = {
+ "asset_projects_id": number; // 项目ID
+ "check_in_range": number; // 打卡范围(米)
+ "require_photo": boolean; // 是否要求拍照打卡
+ "allow_out_range_checkin"?: boolean; // 是否允许范围外打卡
+ };
+ type UpdateConfig = {
+ "id": number; // id
+ "check_in_range": number; // 打卡范围(米)
+ "require_photo": boolean; // 是否要求拍照打卡
+ "allow_out_range_checkin"?: boolean; // 是否允许范围外打卡
+ };
+ type Enable = {
+ "id": number; // id
+ "is_enabled": boolean; // 是否启用: 1:启用 0:禁用
+ };
+ }
+ namespace AttendanceEmployeeTracks {
+ type List = {
+ "company_employees_id"?: number; // 员工ID
+ "asset_projects_id"?: number; // 项目ID
+ "start_date"?: Date; // 开始日期
+ "end_date"?: Date; // 结束日期
+ };
+ type Detail = {
+ "company_employees_id": number; // 员工ID
+ "start_date": Date; // 开始日期
+ "end_date": Date; // 结束日期
+ "asset_projects_id"?: number; // 项目ID
+ };
+ type Heatmap = {
+ "company_employees_id": number; // 员工ID
+ "date": Date; // 日期
+ };
+ }
+ namespace AttendanceRecords {
+ type List = {
+ "company_employees_id"?: number; // 员工ID
+ "asset_projects_id"?: number; // 项目ID
+ "status"?: string; // 状态
+ "checkin_type"?: string; // 打卡类型
+ "checkin_time"?: string[]; // 打卡时间
+ };
+ type Show = {
+ "id": number; // 记录ID
+ };
+ type Export = {
+ "company_employees_id"?: number; // 员工ID
+ "asset_projects_id"?: number; // 项目ID
+ "status"?: string; // 状态
+ "checkin_type"?: string; // 打卡类型
+ "checkin_time"?: string[]; // 打卡时间
+ };
+ }
+ namespace AttendanceSchedules {
+ type List = {
+ "company_employees_id"?: number; // 员工ID
+ "asset_projects_id"?: number; // 项目ID
+ "schedule_date"?: Date; // 排班日期
+ "status"?: string; // 状态,[enum:AttendanceSchedulesStatusEnum]
+ "project_name"?: string; // 项目名称
+ "employee_name"?: string; // -
+ };
+ type Store = {
+ "company_employees_id": number; // 员工ID
+ "attendance_shifts_id": number; // 班次ID
+ "asset_projects_id": number; // 项目ID
+ "schedule_date": Date; // 排班日期
+ "remark"?: string; // 备注
+ };
+ type BatchStore = {
+ "schedules": string[]; // 排班列表
+ };
+ type ShiftList = {
+ "organizations_id": number; // 组织ID
+ "schedule_date": Date; // 排班日期
+ };
+ type Update = {
+ "id": number; // id
+ "company_employees_id"?: number; // 员工ID
+ "attendance_shifts_id"?: number; // 班次ID
+ "asset_projects_id"?: number; // 项目ID
+ "schedule_date"?: Date; // 排班日期
+ "remark"?: string; // 备注
+ };
+ type ChangeStatus = {
+ "id": number; // id
+ "status": string; // 状态,[enum:AttendanceSchedulesStatusEnum]
+ };
+ type Cancel = {
+ "id": number; // id
+ };
+ type Show = {
+ "id": number; // id
+ };
+ type SoftDelete = {
+ "id": number; // id
+ };
+ type Restore = {
+ "id": number; // id
+ };
+ type Delete = {
+ "id": number; // id
+ };
+ }
+ namespace AttendanceShifts {
+ type List = {
+ "name"?: string; // 班次名称
+ "is_enabled"?: boolean; // 状态
+ "asset_projects_id"?: number; // 项目ID
+ "project_name"?: string; // 项目名称
+ };
+ type Store = {
+ "name": string; // 班次名称
+ "asset_projects_id": number; // 关联项目IDs
+ "allow_checkin_start": date_format:H:i:s; // 可打卡开始时间
+ "allow_checkin_end": date_format:H:i:s; // 可打卡结束时间
+ "is_enabled"?: boolean; // 状态
+ "remark"?: string; // 备注
+ "periods": string[]; // 时段列表
+ };
+ type Update = {
+ "id": number; // id
+ "name"?: string; // 班次名称
+ "asset_projects_id"?: number; // 关联项目IDs
+ "allow_checkin_start"?: date_format:H:i:s; // 可打卡开始时间
+ "allow_checkin_end"?: date_format:H:i:s; // 可打卡结束时间
+ "is_enabled"?: boolean; // 状态
+ "remark"?: string; // 备注
+ "periods"?: string[]; // 时段列表
+ };
+ type Show = {
+ "id": number; // id
+ };
+ type Delete = {
+ "id": number; // id
+ };
+ type Select = {
+ "name"?: string; // 班次名称
+ "asset_projects_id"?: number; // 项目ID
+ "project_name"?: string; // 项目名称
+ };
+ }
+ }
namespace Bill {
namespace HouseBills {
type List = {
@@ -783,6 +943,9 @@ declare namespace ApiTypes {
type TemporaryUrl = {
"filename": string; // 文件名称
};
+ type SwitchProject = {
+ "project_id": string; // 项目ID all-查看所有
+ };
}
namespace ConvenienceServices {
type List = {
@@ -1191,7 +1354,7 @@ declare namespace ApiTypes {
"tiered_rates"?: string[]; // 阶梯收费标准
"is_apportionment"?: number; // 是否分摊
"apportionment_method"?: string; // 分摊方式,[enum:HouseChargeStandardsApportionmentMethodEnum]
- "has_late_fee"?: number; // 是否滞纳金
+ "has_late_fee"?: boolean; // 是否滞纳金
"late_fee_start_days"?: number; // 生成几天后开始收取滞纳金
"late_fee_rate"?: number; // 滞纳金费率(百分比)
"late_fee_cap_days"?: number; // 滞纳金封顶天数
@@ -1216,7 +1379,7 @@ declare namespace ApiTypes {
"tiered_rates"?: string[]; // 阶梯收费标准
"is_apportionment"?: number; // 是否分摊
"apportionment_method"?: string; // 分摊方式,[enum:HouseChargeStandardsApportionmentMethodEnum]
- "has_late_fee"?: number; // 是否滞纳金
+ "has_late_fee"?: boolean; // 是否滞纳金
"late_fee_start_days"?: number; // 生成几天后开始收取滞纳金
"late_fee_rate"?: number; // 滞纳金费率(百分比)
"late_fee_cap_days"?: number; // 滞纳金封顶天数
@@ -1255,11 +1418,15 @@ declare namespace ApiTypes {
}
namespace HouseChargeTasks {
type List = {
+ "id"?: number; // id 任务id
"charge_standard_name"?: string; // 模糊搜索:收费标准名称
"asset_projects_id"?: number; // 资产项目id,[ref:asset_projects]
"status"?: string; // 任务状态,[enum:HouseChargeTasksStatusEnum]
"type"?: string; // 类型,[enum:HouseChargeTasksTypeEnum]
"project_name"?: string; // 资产项目名称
+ "company_name"?: string; // 公司名称
+ "bill_year"?: string; // 月份
+ "bill_month"?: string; // 月份
};
type Store = {
"house_charge_standards_id": number; // 房屋收费标准id,[ref:house_charge_standards]
@@ -1422,6 +1589,9 @@ declare namespace ApiTypes {
"total_payable_amount": number; // 应付金额
"bill_ids": string[]; // 账单id
};
+ type ImportOfflinePayment = {
+ "upload_file": mimes:xlsx,xls; // 上传文件
+ };
}
namespace HousePrepaymentLogs {
type List = {
@@ -1517,6 +1687,9 @@ declare namespace ApiTypes {
type Delete = {
"id": number; // id
};
+ type Import = {
+ "upload_file"?: mimes:xlsx,xls; // 上传的时候必填文件
+ };
}
namespace HouseMeterReadings {
type List = {
@@ -1573,6 +1746,10 @@ declare namespace ApiTypes {
namespace HouseMeterTasks {
type List = {
"name"?: string; // 模糊搜索:名称
+ "status"?: string; // 任务状态,[enum:HouseChargeTasksStatusEnum]
+ "generation_method"?: string; // 生成方式,[enum:HouseMeterTasksGenerationMethodEnum]
+ "bill_year"?: number; // 年份
+ "bill_month"?: number; // 月份
};
type Store = {
"asset_projects_id": number; // 资产项目id,[ref:asset_projects]
@@ -1599,6 +1776,9 @@ declare namespace ApiTypes {
"project_name"?: string; // 模糊搜索:项目名称
"charge_standards_id"?: number; // 房屋收费标准id,[ref:house_charge_standards]
"meter_type"?: string; // 仪表类型,[enum:HouseMetersMeterTypeEnum]
+ "usage_type"?: string; // 使用类型,[enum:HouseMetersUsageTypeEnum]
+ "charge_standard_name"?: string; // 模糊搜索:收费标准名称
+ "asset_houses_id"?: number; // 房屋id,[ref:asset_houses]
};
type Store = {
"asset_projects_id": number; // 项目id,[ref:asset_projects]
@@ -1635,6 +1815,21 @@ declare namespace ApiTypes {
type Delete = {
"id": number; // id
};
+ type Import = {
+ "upload_file"?: mimes:xlsx,xls; // 上传的时候必填文件
+ };
+ type Export = {
+ "name"?: string; // 模糊搜索:名称
+ "asset_projects_id"?: number; // 项目id,[ref:asset_projects]
+ "project_name"?: string; // 模糊搜索:项目名称
+ "charge_standards_id"?: number; // 房屋收费标准id,[ref:house_charge_standards]
+ "meter_type"?: string; // 仪表类型,[enum:HouseMetersMeterTypeEnum]
+ "usage_type"?: string; // 使用类型,[enum:HouseMetersUsageTypeEnum]
+ "charge_standard_name"?: string; // 模糊搜索:收费标准名称
+ "asset_houses_id"?: number; // 房屋id,[ref:asset_houses]
+ "download_type"?: string; // 下载类型:all-全部,page-当前页
+ "current"?: number; // 当前页偏移量
+ };
}
}
namespace Msg {
@@ -1745,6 +1940,10 @@ declare namespace ApiTypes {
};
}
}
+ namespace Statistics {
+ namespace IndexCount {
+ }
+ }
namespace Visitor {
namespace VisitorApplies {
type List = {
@@ -1813,6 +2012,13 @@ declare namespace ApiTypes {
"assign_status"?: string; // 工单分配状态,[enum:HouseWorkOrdersAssignStatusEnum]
"reporter_name"?: string; // 模糊搜索:上报人姓名
"reporter_phone"?: string; // 模糊搜索:上报人手机
+ "is_completed"?: boolean; // 是否完工:0否,1是
+ "is_evaluated"?: boolean; // 是否评价: 0否,1是
+ "is_visited"?: boolean; // 是否已访问: 0否,1是
+ "location"?: string; // 报修位置[enum:HouseWorkOrdersLocationEnum]
+ "asset_projects_id"?: number; // 资产项目id,[ref:asset_projects]
+ "project_name"?: string; // 模糊搜索:项目名称
+ "asset_houses_id"?: number; // 资产房屋id,[ref:asset_houses]
};
type Store = {
"type": string; // 工单类型,[enum:HouseWorkOrdersTypeEnum]
diff --git a/src/gen/Apis.ts b/src/gen/Apis.ts
index 8e4a4dd..f6c7e8c 100644
--- a/src/gen/Apis.ts
+++ b/src/gen/Apis.ts
@@ -121,6 +121,12 @@ export const Apis = {
ChangeIsContact(data: ApiTypes.Archive.HouseOccupants.ChangeIsContact): Promise
{
return request('company/archive/house_occupants/change_is_contact', { data });
},
+ Import(data?: ApiTypes.Archive.HouseOccupants.Import): Promise {
+ return request('company/archive/house_occupants/import', { data });
+ },
+ DownloadTemplate(): Promise {
+ return request('company/archive/house_occupants/download_template', {responseType: 'blob',});
+ },
},
HouseRegisters: {
List(data?: ApiTypes.Archive.HouseRegisters.List): Promise {
@@ -315,6 +321,102 @@ export const Apis = {
},
},
},
+ Attendance: {
+ AttendanceConfigs: {
+ List(data?: ApiTypes.Attendance.AttendanceConfigs.List): Promise {
+ return request('company/attendance/attendance_configs/list', { data });
+ },
+ Store(data: ApiTypes.Attendance.AttendanceConfigs.Store): Promise {
+ return request('company/attendance/attendance_configs/store', { data });
+ },
+ UpdateConfig(data: ApiTypes.Attendance.AttendanceConfigs.UpdateConfig): Promise {
+ return request('company/attendance/attendance_configs/update_config', { data });
+ },
+ Enable(data: ApiTypes.Attendance.AttendanceConfigs.Enable): Promise {
+ return request('company/attendance/attendance_configs/enable', { data });
+ },
+ },
+ AttendanceEmployeeTracks: {
+ List(data?: ApiTypes.Attendance.AttendanceEmployeeTracks.List): Promise {
+ return request('company/attendance/attendance_employee_tracks/list', { data });
+ },
+ Detail(data: ApiTypes.Attendance.AttendanceEmployeeTracks.Detail): Promise {
+ return request('company/attendance/attendance_employee_tracks/detail', { data });
+ },
+ Heatmap(data: ApiTypes.Attendance.AttendanceEmployeeTracks.Heatmap): Promise {
+ return request('company/attendance/attendance_employee_tracks/heatmap', { data });
+ },
+ Cleanup(): Promise {
+ return request('company/attendance/attendance_employee_tracks/cleanup', {});
+ },
+ },
+ AttendanceRecords: {
+ List(data?: ApiTypes.Attendance.AttendanceRecords.List): Promise {
+ return request('company/attendance/attendance_records/list', { data });
+ },
+ Show(data: ApiTypes.Attendance.AttendanceRecords.Show): Promise {
+ return request('company/attendance/attendance_records/show', { data });
+ },
+ Export(data?: ApiTypes.Attendance.AttendanceRecords.Export): Promise {
+ return request('company/attendance/attendance_records/export', { responseType: 'blob',data });
+ },
+ },
+ AttendanceSchedules: {
+ List(data?: ApiTypes.Attendance.AttendanceSchedules.List): Promise {
+ return request('company/attendance/attendance_schedules/list', { data });
+ },
+ Store(data: ApiTypes.Attendance.AttendanceSchedules.Store): Promise {
+ return request('company/attendance/attendance_schedules/store', { data });
+ },
+ BatchStore(data: ApiTypes.Attendance.AttendanceSchedules.BatchStore): Promise {
+ return request('company/attendance/attendance_schedules/batch_store', { data });
+ },
+ ShiftList(data: ApiTypes.Attendance.AttendanceSchedules.ShiftList): Promise {
+ return request('company/attendance/attendance_schedules/shift_list', { data });
+ },
+ Update(data: ApiTypes.Attendance.AttendanceSchedules.Update): Promise {
+ return request('company/attendance/attendance_schedules/update', { data });
+ },
+ ChangeStatus(data: ApiTypes.Attendance.AttendanceSchedules.ChangeStatus): Promise {
+ return request('company/attendance/attendance_schedules/change_status', { data });
+ },
+ Cancel(data: ApiTypes.Attendance.AttendanceSchedules.Cancel): Promise {
+ return request('company/attendance/attendance_schedules/cancel', { data });
+ },
+ Show(data: ApiTypes.Attendance.AttendanceSchedules.Show): Promise {
+ return request('company/attendance/attendance_schedules/show', { data });
+ },
+ SoftDelete(data: ApiTypes.Attendance.AttendanceSchedules.SoftDelete): Promise {
+ return request('company/attendance/attendance_schedules/soft_delete', { data });
+ },
+ Restore(data: ApiTypes.Attendance.AttendanceSchedules.Restore): Promise {
+ return request('company/attendance/attendance_schedules/restore', { data });
+ },
+ Delete(data: ApiTypes.Attendance.AttendanceSchedules.Delete): Promise {
+ return request('company/attendance/attendance_schedules/delete', { data });
+ },
+ },
+ AttendanceShifts: {
+ List(data?: ApiTypes.Attendance.AttendanceShifts.List): Promise {
+ return request('company/attendance/attendance_shifts/list', { data });
+ },
+ Store(data: ApiTypes.Attendance.AttendanceShifts.Store): Promise {
+ return request('company/attendance/attendance_shifts/store', { data });
+ },
+ Update(data: ApiTypes.Attendance.AttendanceShifts.Update): Promise {
+ return request('company/attendance/attendance_shifts/update', { data });
+ },
+ Show(data: ApiTypes.Attendance.AttendanceShifts.Show): Promise {
+ return request('company/attendance/attendance_shifts/show', { data });
+ },
+ Delete(data: ApiTypes.Attendance.AttendanceShifts.Delete): Promise {
+ return request('company/attendance/attendance_shifts/delete', { data });
+ },
+ Select(data?: ApiTypes.Attendance.AttendanceShifts.Select): Promise {
+ return request('company/attendance/attendance_shifts/select', { data });
+ },
+ },
+ },
Bill: {
HouseBills: {
List(data?: ApiTypes.Bill.HouseBills.List): Promise {
@@ -390,6 +492,12 @@ export const Apis = {
TemporaryUrl(data: ApiTypes.Common.Auth.TemporaryUrl): Promise {
return request('company/common/auth/temporary_url', { data });
},
+ SwitchProject(data: ApiTypes.Common.Auth.SwitchProject): Promise {
+ return request('company/common/auth/switch_project', { data });
+ },
+ GetProjects(): Promise {
+ return request('company/common/auth/get_projects', {});
+ },
},
ConvenienceServices: {
List(data?: ApiTypes.Common.ConvenienceServices.List): Promise {
@@ -784,6 +892,12 @@ export const Apis = {
GetPayCode(data: ApiTypes.HouseOrder.HouseOrders.GetPayCode): Promise {
return request('company/house_order/house_orders/get_pay_code', { data });
},
+ DownloadOfflinePaymentTemplate(): Promise {
+ return request('company/house_order/house_orders/download_offline_payment_template', {responseType: 'blob',});
+ },
+ ImportOfflinePayment(data: ApiTypes.HouseOrder.HouseOrders.ImportOfflinePayment): Promise {
+ return request('company/house_order/house_orders/import_offline_payment', { data });
+ },
},
HousePrepaymentLogs: {
List(data?: ApiTypes.HouseOrder.HousePrepaymentLogs.List): Promise {
@@ -856,6 +970,12 @@ export const Apis = {
Delete(data: ApiTypes.Meter.HouseMeterHasHouses.Delete): Promise {
return request('company/meter/house_meter_has_houses/delete', { data });
},
+ Import(data?: ApiTypes.Meter.HouseMeterHasHouses.Import): Promise {
+ return request('company/meter/house_meter_has_houses/import', { data });
+ },
+ DownloadTemplate(): Promise {
+ return request('company/meter/house_meter_has_houses/download_template', {responseType: 'blob',});
+ },
},
HouseMeterReadings: {
List(data: ApiTypes.Meter.HouseMeterReadings.List): Promise {
@@ -927,6 +1047,15 @@ export const Apis = {
Delete(data: ApiTypes.Meter.HouseMeters.Delete): Promise {
return request('company/meter/house_meters/delete', { data });
},
+ Import(data?: ApiTypes.Meter.HouseMeters.Import): Promise {
+ return request('company/meter/house_meters/import', { data });
+ },
+ DownloadTemplate(): Promise {
+ return request('company/meter/house_meters/download_template', {responseType: 'blob',});
+ },
+ Export(data?: ApiTypes.Meter.HouseMeters.Export): Promise {
+ return request('company/meter/house_meters/export', { responseType: 'blob',data });
+ },
},
},
Msg: {
@@ -998,6 +1127,25 @@ export const Apis = {
},
},
},
+ Statistics: {
+ IndexCount: {
+ FinancialAnalysis(): Promise {
+ return request('company/statistics/index_count/financial_analysis', {});
+ },
+ TodayDynamics(): Promise {
+ return request('company/statistics/index_count/today_dynamics', {});
+ },
+ WorkOrderAnalysis(): Promise {
+ return request('company/statistics/index_count/work_order_analysis', {});
+ },
+ CommunityOverview(): Promise {
+ return request('company/statistics/index_count/community_overview', {});
+ },
+ ClearCache(): Promise {
+ return request('company/statistics/index_count/clear_cache', {});
+ },
+ },
+ },
Visitor: {
VisitorApplies: {
List(data?: ApiTypes.Visitor.VisitorApplies.List): Promise {
diff --git a/src/gen/Enums.ts b/src/gen/Enums.ts
index 2d0a7cf..6263842 100644
--- a/src/gen/Enums.ts
+++ b/src/gen/Enums.ts
@@ -227,6 +227,37 @@ export const AssetUnitsBuildingTypeEnum= {
'Tower': {"text":"塔楼","color":"#ffc107","value":"Tower"},
};
+// AttendanceRecordsCheckinTypeEnum
+export const AttendanceRecordsCheckinTypeEnum= {
+ 'CheckIn': {"text":"上班","color":"#1890ff","value":"CheckIn"},
+ 'CheckOut': {"text":"下班","color":"#52c41a","value":"CheckOut"},
+};
+
+// AttendanceRecordsStatusEnum
+export const AttendanceRecordsStatusEnum= {
+ 'Normal': {"text":"正常","color":"#52c41a","value":"Normal"},
+ 'Late': {"text":"迟到","color":"#faad14","value":"Late"},
+ 'EarlyLeave': {"text":"早退","color":"#fa8c16","value":"EarlyLeave"},
+ 'OutOfRange': {"text":"范围外","color":"#ff4d4f","value":"OutOfRange"},
+ 'Reissue': {"text":"补卡","color":"#1890ff","value":"Reissue"},
+};
+
+// AttendanceSchedulesStatusEnum
+export const AttendanceSchedulesStatusEnum= {
+ 'Pending': {"text":"待生效","color":"#faad14","value":"Pending"},
+ 'Active': {"text":"生效中","color":"#52c41a","value":"Active"},
+ 'Cancelled': {"text":"已取消","color":"#ff4d4f","value":"Cancelled"},
+};
+
+// 打卡状态枚举
+export const AttendanceStatusEnum= {
+ 'Normal': {"text":"正常","color":"#52c41a","value":"Normal"},
+ 'Late': {"text":"迟到","color":"#faad14","value":"Late"},
+ 'Early': {"text":"早退","color":"#faad14","value":"Early"},
+ 'OutOfRange': {"text":"范围外","color":"#ff4d4f","value":"OutOfRange"},
+ 'MakeUp': {"text":"补卡","color":"#722ed1","value":"MakeUp"},
+};
+
// BannerSpacesTypeEnum
export const BannerSpacesTypeEnum= {
'Popup': {"text":"弹窗","color":"#ff0000","value":"Popup"},
@@ -251,7 +282,7 @@ export const BannersTypeEnum= {
// 缓存类型
export const CacheTypeEnum= {
- 'MobilePhoneVerificationCode': {"text":"手机验证码","color":"#63f8de","value":"MobilePhoneVerificationCode"},
+ 'MobilePhoneVerificationCode': {"text":"手机验证码","color":"#827a7d","value":"MobilePhoneVerificationCode"},
};
// CompaniesMerchantTypeEnum
@@ -297,6 +328,13 @@ export const CompanyEmployeeBacklogsTypeEnum= {
'MomentTask': {"text":"朋友圈任务","color":"#FF6600","value":"MomentTask"},
};
+// CompanyEmployeesTypeEnum
+export const CompanyEmployeesTypeEnum= {
+ 'Staff': {"text":"员工","color":"#1890ff","value":"Staff"},
+ 'WeCom': {"text":"企微","color":"#2196f3","value":"WeCom"},
+ 'External': {"text":"外部","color":"#4caf50","value":"External"},
+};
+
// CompanyReceiptAccountsPayChannelEnum
export const CompanyReceiptAccountsPayChannelEnum= {
'WeChat': {"text":"微信","color":"#07c160","value":"WeChat"},
@@ -691,6 +729,7 @@ export const HouseRegistersTypeEnum= {
'UpdateInfo': {"text":"修改信息","color":"#722ed1","value":"UpdateInfo"},
'UpdatePhone': {"text":"修改电话","color":"#13c2c2","value":"UpdatePhone"},
'GoodsRelease': {"text":"物品放行","color":"#a0d911","value":"GoodsRelease"},
+ 'VisitorApplies': {"text":"来访申请","color":"#a0d911","value":"VisitorApplies"},
};
// HouseRegistersUsagePlanEnum
@@ -762,6 +801,12 @@ export const HouseWorkOrdersTypeEnum= {
'Complaint': {"text":"投诉","color":"#aa00ff","value":"Complaint"},
};
+// 公告阅读者类型
+export const MsgPropertyAnnouncementReadsReaderTypeEnum= {
+ 'Customer': {"text":"客户","color":"#3b82f6","value":"Customer"},
+ 'Employee': {"text":"员工","color":"#10b981","value":"Employee"},
+};
+
// 公告接收对象
export const MsgPropertyAnnouncementsObjectEnum= {
'Customer': {"text":"客户","color":"#3b82f6","value":"Customer"},
diff --git a/src/pages/asset/activities/index.tsx b/src/pages/asset/activities/index.tsx
index 9d10779..7b6a87f 100644
--- a/src/pages/asset/activities/index.tsx
+++ b/src/pages/asset/activities/index.tsx
@@ -38,13 +38,7 @@ export default function Index({ title = '项目活动' }) {
// title={title}
/>
),
- enrolls: (
- <>
- {item.is_enroll === 1 && (
-
- )}
- >
- ),
+ enrolls: ,
publish: (
(
-
<>{tableRender(item, action)}>
),
diff --git a/src/pages/asset/activities/modals/EnrollsList.tsx b/src/pages/asset/activities/modals/EnrollsList.tsx
index a408e11..f5d4164 100644
--- a/src/pages/asset/activities/modals/EnrollsList.tsx
+++ b/src/pages/asset/activities/modals/EnrollsList.tsx
@@ -16,6 +16,11 @@ export default function EnrollsList(props: MyBetaModalFormProps) {
title={props.title || '报名'}
type={props.item?.type || 'primary'}
width="800px"
+ modal={{
+ btnProps: {
+ disabled: !props?.item.is_enroll,
+ },
+ }}
node={
-
-
-
-
-
-
-
-
+ 2
);
diff --git a/src/pages/charge/standard/components/Instrument.tsx b/src/pages/charge/standard/components/Instrument.tsx
index 5b9bd3a..9a56aa6 100644
--- a/src/pages/charge/standard/components/Instrument.tsx
+++ b/src/pages/charge/standard/components/Instrument.tsx
@@ -30,7 +30,7 @@ export default function Index(props: MyBetaModalFormProps) {
/>
),
},
- '/instrument/instrument_list',
+ '/meter',
);
};
let tableRender = (item: any, action: any) => {
@@ -54,7 +54,7 @@ export default function Index(props: MyBetaModalFormProps) {
/>
),
},
- '/instrument/instrument_list',
+ '/meter',
);
};
return (
diff --git a/src/pages/company/employees/index.tsx b/src/pages/company/employees/index.tsx
index 200159c..3cc4ba9 100644
--- a/src/pages/company/employees/index.tsx
+++ b/src/pages/company/employees/index.tsx
@@ -44,11 +44,11 @@ export default function Index({ title = '员工管理' }) {
title="重置"
type="default"
isConfirm={true}
- description={`确定要重置用户「${item.name}」的密码为「12345678」吗?`}
+ description={`确定要重置用户「${item.name}」的密码为「ly#123」吗?`}
onConfirm={() =>
Apis.Company.CompanyEmployees.ResetPassword({
id: item.id,
- password: '12345678',
+ password: 'ly#123',
}).then(() => action?.reload())
}
/>
diff --git a/src/pages/company/employees/modals/EmployeeCreate.tsx b/src/pages/company/employees/modals/EmployeeCreate.tsx
index a5b6728..213991d 100644
--- a/src/pages/company/employees/modals/EmployeeCreate.tsx
+++ b/src/pages/company/employees/modals/EmployeeCreate.tsx
@@ -36,7 +36,7 @@ export default function Create(props: MyBetaModalFormProps) {
...values,
companies_id: values?.companies_id || props?.item?.id,
// type: CompanyEmployeesTypeEnum.External.value,
- password: '12345678',
+ password: 'ly#123',
organizations_id:
values?.organizations_id?.[values.organizations_id.length - 1],
})
diff --git a/src/pages/customer/archive/components/MeterInfo.tsx b/src/pages/customer/archive/components/MeterInfo.tsx
index 55ac0eb..f8a45ba 100644
--- a/src/pages/customer/archive/components/MeterInfo.tsx
+++ b/src/pages/customer/archive/components/MeterInfo.tsx
@@ -79,12 +79,12 @@ export default function Index(props: MyBetaModalFormProps) {
renderValue ? dayjs().diff(renderValue, 'day') : '-',
},
MyColumns.Option({
- render: (_, item: any, index, action) => (
+ render: (_, item: any, index) => (