diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 0000000..2326a69 --- /dev/null +++ b/.editorconfig @@ -0,0 +1,30 @@ +# EditorConfig is awesome: https://EditorConfig.org + +# 表示是最顶层的配置文件 +root = true + +# 对所有文件生效 +[*] +charset = utf-8 +end_of_line = lf +insert_final_newline = true +trim_trailing_whitespace = true + +# 对 JS、TS、Vue 文件的配置 +[*.{js,jsx,ts,tsx,vue}] +indent_style = tab +indent_size = 2 + +# 对 JSON、YAML 文件的配置 +[*.{json,yml,yaml}] +indent_style = tab +indent_size = 2 + +# 对 Markdown 文件的配置 +[*.md] +trim_trailing_whitespace = false + + + + + diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..4b2eea7 --- /dev/null +++ b/.gitattributes @@ -0,0 +1,37 @@ +# 设置默认行为,以防人们没有设置 core.autocrlf +* text=auto + +# 明确声明你想要始终规范化并在检出时转换为原生行结束符的文本文件 +*.vue text eol=lf +*.js text eol=lf +*.ts text eol=lf +*.jsx text eol=lf +*.tsx text eol=lf +*.json text eol=lf +*.css text eol=lf +*.scss text eol=lf +*.sass text eol=lf +*.html text eol=lf +*.htm text eol=lf +*.xml text eol=lf +*.md text eol=lf +*.yml text eol=lf +*.yaml text eol=lf + +# 明确声明你不想规范化并希望原样保留的文件 +*.png binary +*.jpg binary +*.jpeg binary +*.gif binary +*.ico binary +*.svg binary +*.eot binary +*.ttf binary +*.woff binary +*.woff2 binary +*.otf binary + + + + + diff --git a/.prettierrc b/.prettierrc index ef9c5c7..cea0c84 100644 --- a/.prettierrc +++ b/.prettierrc @@ -4,5 +4,6 @@ "trailingComma": "all", "semi": false, "singleQuote": false, - "printWidth": 140 + "printWidth": 140, + "endOfLine": "lf" } diff --git a/src/api/integrated/meetingRoom.ts b/src/api/integrated/meetingRoom.ts index 6b80046..278760f 100644 --- a/src/api/integrated/meetingRoom.ts +++ b/src/api/integrated/meetingRoom.ts @@ -39,3 +39,12 @@ export function putObj(obj?: Object) { }) } +// 获取会议室预约详情页面数据 +export function getBookingDetailPage(roomId: string, date: string) { + return request({ + url: `integrated/meetingRoom/app/booking-detail-page/${roomId}`, + method: 'get', + params: { date } + }) +} + diff --git a/src/api/integrated/meetingStats.ts b/src/api/integrated/meetingStats.ts new file mode 100644 index 0000000..a53743a --- /dev/null +++ b/src/api/integrated/meetingStats.ts @@ -0,0 +1,99 @@ +import request from '/@/utils/request'; + +// 会议室预约统计查询参数 +export interface MeetingStatsQuery { + startDate?: string; // 开始日期,格式:yyyy-MM-dd + endDate?: string; // 结束日期,格式:yyyy-MM-dd + dimension?: string; // 统计维度:dept-按部门统计,assignee-按负责人统计,time-按时间统计 + timeGranularity?: string; // 时间粒度:day-按天,week-按周,month-按月 + deptId?: number; // 部门ID,用于筛选特定部门 + roomId?: number; // 会议室ID,用于筛选特定会议室 +} + +// 总体统计数据 +export interface OverallStats { + totalBookings: number; // 总预约数 + approvedBookings: number; // 审核通过数 + pendingBookings: number; // 审核中数 + rejectedBookings: number; // 审核拒绝数 + cancelledBookings: number; // 已取消数 + approvalRate: number; // 通过率(百分比) + avgDuration: number; // 平均会议时长(分钟) + totalDuration: number; // 总会议时长(分钟) +} + +// 部门统计数据 +export interface DeptStats { + deptId: number; // 部门ID + deptName: string; // 部门名称(通过部门微服务获取) + bookingCount: number; // 预约数量 + approvedCount: number; // 通过数量 + approvalRate: number; // 通过率 + totalDuration: number; // 总会议时长 +} + +// 负责人统计数据 +export interface AssigneeStats { + assigneeName: string; // 负责人姓名 + bookingCount: number; // 预约数量 + approvedCount: number; // 通过数量 + approvalRate: number; // 通过率 + totalDuration: number; // 总会议时长 +} + +// 时间统计数据 +export interface TimeStats { + timeLabel: string; // 时间标签(格式化后的时间显示) + date?: string; // 日期(仅按天统计时有值) + bookingCount: number; // 预约数量 + approvedCount: number; // 通过数量 + totalDuration: number; // 总会议时长 +} + +// 状态统计数据 +export interface StatusStats { + status: string; // 状态码(1-审核中,2-审核通过,3-审核拒绝,4-已取消,5-取消,0-已到访) + statusName: string; // 状态名称 + count: number; // 数量 + percentage: number; // 占比(百分比) +} + +// 会议室统计数据 +export interface RoomStats { + roomId: number; // 会议室ID + roomName: string; // 会议室名称 + bookingCount: number; // 预约数量 + approvedCount: number; // 通过数量 + usageRate: number; // 使用率 + totalDuration: number; // 总会议时长 +} + +// 统计结果数据 +export interface MeetingStatsData { + overallStats: OverallStats; // 总体统计 + deptStats: DeptStats[]; // 部门统计 + assigneeStats: AssigneeStats[]; // 负责人统计 + timeStats: TimeStats[]; // 时间统计 + statusStats: StatusStats[]; // 状态统计 + roomStats: RoomStats[]; // 会议室统计 +} + +// 统计结果响应 +export interface MeetingStatsResponse { + code: number; + msg: string; + data: MeetingStatsData; +} + +/** + * 获取会议室预约统计信息 + * @param params 查询参数 + * @returns 统计结果 + */ +export function getMeetingStats(params?: MeetingStatsQuery): Promise { + return request({ + url: '/integrated/meetingBooking/stats', + method: 'get', + params + }); +} diff --git a/src/api/supermarketerp/profitMarginReport.ts b/src/api/supermarketerp/profitMarginReport.ts index a50ab2d..babd8a6 100644 --- a/src/api/supermarketerp/profitMarginReport.ts +++ b/src/api/supermarketerp/profitMarginReport.ts @@ -88,3 +88,6 @@ export function exportProfitMarginReport(params?: object) { responseType: 'blob' }) } + + + diff --git a/src/components/Select/SelectMch.vue b/src/components/Select/SelectMch.vue index e9e0b06..b0cc2e8 100644 --- a/src/components/Select/SelectMch.vue +++ b/src/components/Select/SelectMch.vue @@ -1,7 +1,7 @@