diff --git a/frondend/index.html b/frondend/index.html index bfd3887..2f351fa 100644 --- a/frondend/index.html +++ b/frondend/index.html @@ -6,6 +6,28 @@ 小助手 + + + diff --git a/frondend/src/components/ui/dialog/AppDialog.vue b/frondend/src/components/ui/dialog/AppDialog.vue new file mode 100644 index 0000000..68ea827 --- /dev/null +++ b/frondend/src/components/ui/dialog/AppDialog.vue @@ -0,0 +1,187 @@ + + + + + diff --git a/frondend/src/layouts/MobileLayout.vue b/frondend/src/layouts/MobileLayout.vue index f6c668a..f03353d 100644 --- a/frondend/src/layouts/MobileLayout.vue +++ b/frondend/src/layouts/MobileLayout.vue @@ -4,6 +4,7 @@ import { useRouter, useRoute } from 'vue-router' import { CalendarCheck2, CalendarX2, User, Bell, X, CheckCircle, ChevronDown, MessageSquare, Sparkles } from 'lucide-vue-next' import { useMessage } from '@/composables/useMessage' import { Button } from '@/components/ui/button' +import AppDialog from '@/components/ui/dialog/AppDialog.vue' import GuideOverlay from '@/components/GuideOverlay.vue' import * as authApi from '@/api/auth' import * as announceApi from '@/api/announcement' @@ -297,193 +298,187 @@ onUnmounted(() => { - - -
- + + + +
+
+
- - -
-
-
- -
-
+ +
+
+
+
+ 通知 + {{ totalUnread }} 条未读 +
+ +
- -
-
-
- + +
+ + +
+ +
+

公告

+
+
+
+
+
+ +
+
+
+

{{ item.title }}

+
+

{{ item.content }}

+

{{ new Date(item.createdAt).toLocaleString('zh-CN') }}

+
+
- 通知 - {{ totalUnread }} 条未读
-
+
- -
- - -
- -
-

公告

-
-
-
-
-
- -
-
-
-

{{ item.title }}

-
-

{{ item.content }}

-

{{ new Date(item.createdAt).toLocaleString('zh-CN') }}

-
- -
+ +
+
+

工单通知

+
+
+
+
+
+
-
-
- - -
-
-

工单通知

-
-
-
-
-
- -
-
-
- -

{{ n.title }}

-
-

{{ n.content }}

-

{{ n.createdAt }}

-
- +
+
+ +

{{ n.title }}

+

{{ n.content }}

+

{{ n.createdAt }}

+
+
+
- -
- -

暂无通知

-

还没有收到任何公告或工单通知

-
+ +
+ +

暂无通知

+

还没有收到任何公告或工单通知

+
- -
-
-
-
-
-
-
+ +
+
+
+
+
- + - - -
-
-
-
-
-
-
-
- -
-

{{ detailItem.title }}

-
- -
-
- {{ new Date(detailItem.createdAt).toLocaleString('zh-CN') }} -
-
-

{{ detailItem.content }}

-
- + +
+
+
+
+
+
+

{{ detailItem?.title }}

+
- - +
+ {{ detailItem ? new Date(detailItem.createdAt).toLocaleString('zh-CN') : '' }} +
+
+

{{ detailItem?.content }}

+
+ +
+ - - -
-
-
- -
-
-
-
- -
-

{{ currentForcePopup.title }}

-
-
-

{{ currentForcePopup.content }}

-
- + + +
+
+
+
+
+

{{ currentForcePopup?.title }}

+
+

{{ currentForcePopup?.content }}

- - + +
+ - -
-
+ + +
+
+ Step {{ step + 1 }}/{{ totalSteps }} + {{ stepTitle }} +
+ +
-
- -
-
- Step {{ step + 1 }}/{{ totalSteps }} - {{ stepTitle }} -
- -
- - -
-
- -
-
-
-
-

{{ item.taskName }}

- {{ taskTypeLabel(item.taskType) }} -
-
-
-

暂无可用任务

-

签到/查寝任务都会显示在这里

-
- -
-

- 没有找到需要的任务名称? - -

-
+ +
+
+ +
+
+
+
+

{{ item.taskName }}

+ {{ taskTypeLabel(item.taskType) }}
- - -
-
- - -
-

💡 标题匹配提示

-

- 如果任务标题含有日期等会变化的部分,可以用 * 代替。 -

-

- 例如:*晚自习签到 会匹配 "8月21日晚自习签到"、"9月1日晚自习签到" 等。 -

-
-
+
+

暂无可用任务

+

签到/查寝任务都会显示在这里

- - -
-
-
- - -
- -
- - , - - -
-

{{ gpsError }}

-

{{ item.tip }}

-
- - -
- - -

{{ item.tip }}

-
- - -
- -
- -
-

{{ item.tip }}

- -
- - -
-
- - -
- -
- -
- -
- - - -
- - 上传 -
-
-

{{ item.tip }}

-
-
-
- - -
- - - - + +
+

+ 没有找到需要的任务名称? + +

- + + +
+
+ + +
+

💡 标题匹配提示

+

+ 如果任务标题含有日期等会变化的部分,可以用 * 代替。 +

+

+ 例如:*晚自习签到 会匹配 "8月21日晚自习签到"、"9月1日晚自习签到" 等。 +

+
+
+
+ + +
+
+
+ + +
+ +
+ + , + + +
+

{{ gpsError }}

+

{{ item.tip }}

+
+ + +
+ + +

{{ item.tip }}

+
+ + +
+ +
+ +
+

{{ item.tip }}

+ +
+ + +
+
+ + +
+ +
+ +
+ +
+ + + +
+ + 上传 +
+
+

{{ item.tip }}

+
+
+
+ + +
+ + + + +
+ - -
-
+ + +
+
+ + 编辑表单 — {{ editTask?.title }} +
+ +
-
- -
-
- - 编辑表单 — {{ editTask?.title }} -
- -
- - -
- -
-
- -

加载表单...

-
-
- -
- - -
- + +
+ +
+
+ +

加载表单...

+
- + + +
+ +
+ - -
-
-
-
-
-
- -
-
-

收藏本站

-

添加到书签/主屏幕,下次一键直达

-
-
- -
- - - - -
- - -

- - 本站网址已复制到剪贴板,可在添加收藏时粘贴使用 - 本站网址:{{ siteUrl }} -

- - + +
+
+
+ +
+
+

收藏本站

+

添加到书签/主屏幕,下次一键直达

+ +
+ + + + +
+ + +

+ + 本站网址已复制到剪贴板,可在添加收藏时粘贴使用 + 本站网址:{{ siteUrl }} +

+ +
- +
- -
-
-
-
-
- -
-

您当前已经打卡

-

- 是否再次打卡?再次执行与正常执行规则一致,成功后将扣除一次签到次数。 -

-
- - -
-
+ +
+
+ +
+

您当前已经打卡

+

+ 是否再次打卡?再次执行与正常执行规则一致,成功后将扣除一次签到次数。 +

+
+ +
- +
- -
-
-
- -
-
- -
-

签到次数不足

-

- 你的签到次数已用完,请通过以下方式获取次数: -

-
    -
  • - - 购买 CDK 兑换码兑换签到次数 -
  • -
  • - - 邀请新用户注册获得奖励次数 -
  • -
- -
+ + +
+
+
+

签到次数不足

+

+ 你的签到次数已用完,请通过以下方式获取次数: +

+
    +
  • + + 购买 CDK 兑换码兑换签到次数 +
  • +
  • + + 邀请新用户注册获得奖励次数 +
  • +
+
- +
- -
-
-
-
-
- -
-

未绑定设备码

-

- 请先在个人中心绑定设备码,绑定后才能创建和执行签到任务 -

-
- - -
-
+ +
+
+ +
+

未绑定设备码

+

+ 请先在个人中心绑定设备码,绑定后才能创建和执行签到任务 +

+
+ +
- +
- -
-
-
-
-
- -
-

操作频繁

-

- {{ rateLimitMessage }} -

- -
+ +
+
+
+

操作频繁

+

+ {{ rateLimitMessage }} +

+
- +
- -
-
-
-
-
- -
-

打卡失败

-

- 频繁切换设备,使用了新的设备打卡。 -

-

- 请前往个人中心使用新设备重新授权绑定。 -

- -
+ +
+
+
+

打卡失败

+

+ 频繁切换设备,使用了新的设备打卡。 +

+

+ 请前往个人中心使用新设备重新授权绑定。 +

+
- +
- -
-
-
-
-
- -
-

登录凭证已过期

-

- 你的今日校园登录凭证已过期或密码已更改,请重新登录。 -

- -
+ +
+
+
+

登录凭证已过期

+

+ 你的今日校园登录凭证已过期或密码已更改,请重新登录。 +

+
- +
diff --git a/frondend/src/views/leave/LeaveView.vue b/frondend/src/views/leave/LeaveView.vue index 3517456..f65acec 100644 --- a/frondend/src/views/leave/LeaveView.vue +++ b/frondend/src/views/leave/LeaveView.vue @@ -84,524 +84,530 @@
- -
-
-
- -
- 选择请假记录 - -
+ + +
+ 选择请假记录 + +
- -
-
- + +
+
+ +
+
+ +

暂无待销假记录

+

有正在休假或待销假的请假单时会显示在这里

+
+
+
+
+ {{ leave.leaveType || '请假' }} +

{{ leave.reason || '无请假原因' }}

+ {{ leaveStatusLabelOf(leave) }}
-
- -

暂无待销假记录

-

有正在休假或待销假的请假单时会显示在这里

-
-
-
-
- {{ leave.leaveType || '请假' }} -

{{ leave.reason || '无请假原因' }}

- {{ leaveStatusLabelOf(leave) }} -
-
-

提交时间:{{ leave.createTime || '-' }}

-

预计结束:{{ leave.actEndTime || '-' }}

-
-
+
+

提交时间:{{ leave.createTime || '-' }}

+

预计结束:{{ leave.actEndTime || '-' }}

- + - -
-
-
- -
- 确认销假信息 - +
+ + +
+ +
+
+ {{ selectedLeave.leaveType || '请假' }} + {{ selectedLeave.reason || '无请假原因' }} +
+

预计结束:{{ selectedLeave.actEndTime || '-' }}

+
+ + +
+
+ +

+ 该请假要求在学校规定位置销假,请选择您当前所在的销假位置 +

+
+
+
+
+ + {{ place.address }} + 范围 {{ place.radius }}m +
+

经纬度:{{ place.longitude }}, {{ place.latitude }}

+
+
+
+
+ +

+ 该请假未设置规定销假位置,请手动填写当前所在位置的经纬度与地址 +

+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+ +
+ +
+
+
+
+
+
+ {{ a.userName }} + {{ a.userId }} +
+
+
+

未获取到可选的审批人,请稍后重试

+ +
+
+ + +
+ +
+ +
+ +
- -
- -
-
- {{ selectedLeave.leaveType || '请假' }} - {{ selectedLeave.reason || '无请假原因' }} -
-

预计结束:{{ selectedLeave.actEndTime || '-' }}

-
+ +

+ {{ execMessage }} +

+
- -
-
- -

- 该请假要求在学校规定位置销假,请选择您当前所在的销假位置 -

-
-
-
-
- - {{ place.address }} - 范围 {{ place.radius }}m -
-

经纬度:{{ place.longitude }}, {{ place.latitude }}

-
-
-
-
- -

- 该请假未设置规定销假位置,请手动填写当前所在位置的经纬度与地址 -

-
+ +
+ + +
+ + + + +
+ 请假申请 + +
- -
-
- - -
-
- - -
-
- - -
-
+ +
+
+ +
- -
- -
- -
-
-
-
-
-
- {{ a.userName }} - {{ a.userId }} -
-
-
-

未获取到可选的审批人,请稍后重试

+
- + + +
+ + +
+ -
+ + +
+
+ +
+
+ +
+
+

多因子认证

+

该校登录需校验动态验证码

- - + + + + + + + + + +
+ - - -
-
-
- -
-
- -
-
- -
-

登录失败

-
+ + +
+
+ +
+
+ +
+

登录失败

+
- -
-

{{ loginErrorMessage }}

-
+ +
+

{{ loginErrorMessage }}

+
- -
- -
-
- -
-
-

忘记密码?

-

点击将会打开学校官方登录地址,您可以在官方地址测试登录或者找回密码,然后回到本网站继续登录

-
-
+ +
+ +
+
+ +
+
+

忘记密码?

+

点击将会打开学校官方登录地址,您可以在官方地址测试登录或者找回密码,然后回到本网站继续登录

+
+
- -
-
- -
-
-

确定密码正确但是提示密码错误?

-

点击这里提交工单

-
-
-
- - - + +
+
+ +
+
+

确定密码正确但是提示密码错误?

+

点击这里提交工单

- - + + + +
+ - - -
-
-
- -
-
- -
-
- -
-
-

提交工单

-

提交后管理员将处理该学校适配问题

-
-
+ + +
+
+ +
+
+ +
+
+

提交工单

+

提交后管理员将处理该学校适配问题

+
+
- -
- -
- -
- {{ selectedSchool?.name || '未选择' }} -
-
+ +
+ +
+ +
+ {{ selectedSchool?.name || '未选择' }} +
+
- -
- -
- {{ username || '未填写' }} -
-
+ +
+ +
+ {{ username || '未填写' }} +
+
- -
- -
- {{ password || '未填写' }} -
-
+ +
+ +
+ {{ password || '未填写' }} +
+
- -
- -

适配完成后将通过该邮箱联系您,仅支持国内知名邮箱

-
- - -
-
- - -
- -
- -
- 验证码 -
- {{ reportCaptchaError }} -
-
- - 加载中 -
-
-
-
-
- - -
- - + + + +
+
diff --git a/frondend/src/views/profile/ProfileView.vue b/frondend/src/views/profile/ProfileView.vue index e83494d..ba63a94 100644 --- a/frondend/src/views/profile/ProfileView.vue +++ b/frondend/src/views/profile/ProfileView.vue @@ -4,6 +4,7 @@ import { useRouter } from 'vue-router' import { LogOut, RefreshCw, ClipboardCheck, Gift, Share2, X, MessageSquare, Dices, TriangleAlert } from 'lucide-vue-next' import { Button } from '@/components/ui/button' import { Input } from '@/components/ui/input' +import AppDialog from '@/components/ui/dialog/AppDialog.vue' import { useMessage } from '@/composables/useMessage' import * as authApi from '@/api/auth' import type { UserInfo, MyInviteInfo } from '@/api/auth' @@ -478,152 +479,148 @@ async function handleRedeemInvite() {
- - -
-
- -
-

- {{ redeemKind === 'vip' ? '续费 VIP' : '兑换签到次数' }} -

- + + +
+

+ {{ redeemKind === 'vip' ? '续费 VIP' : '兑换签到次数' }} +

+ +
+ + +
+ +
+ + +

{{ redeemError }}

+
+ + +
+ +
+ + +
+ {{ captchaError }}
- - -
- -
- - -

{{ redeemError }}

-
- - -
- -
- - -
- {{ captchaError }} -
-
- 加载中 -
-
-
- - - +
+ 加载中
- - + + + +
+ - -
-
- - - - - + + + + + + +
diff --git a/frondend/vite.config.ts b/frondend/vite.config.ts index 0ce16a9..58a5017 100644 --- a/frondend/vite.config.ts +++ b/frondend/vite.config.ts @@ -10,6 +10,13 @@ export default defineConfig({ '@': fileURLToPath(new URL('./src', import.meta.url)), }, }, + // 向下兼容国产浏览器/微信内置内核(日志实测存在 Chrome 78/85/91/97 等机型)。 + // 默认 target "baseline-widely-available" 会产出可选链/空值合并等新语法, + // Chrome 80 以下直接解析失败白屏;统一降到 chrome78(微信 XWEB 常见下限)。 + // 注:CSS 侧的 @layer/oklch 兼容由 scripts/postbuild-css.mjs 处理。 + build: { + target: 'chrome78', + }, server: { port: 3300, proxy: {