- 业务域:学生请假(请假申请 / 我的请假 / 请假审批 / 请假登记 / 请假统计 / 应用设置) - 接口直连真实后端(/api/leave/*、/api/base/*),无本地 mock - 同步本轮路由改造:浏览器地址匹配不上已授权菜单节点时落回第一个节点 - .gitignore 补充 .workbuddy/、*.bak、*.orig 与改造来源包 FamilyActivity.rar
This commit is contained in:
@@ -0,0 +1,12 @@
|
||||
# 开发环境 (dev):仅 vite dev --mode dev 加载;build 产物不读任何 .env.*
|
||||
# (.env.base/.env.ld/.env.prod 已删,线上由 /api/env-config?target=front 运行时下发)。
|
||||
# ⚠️ VITE_* 仅本地开发生效。
|
||||
# API 走 /api 同源相对路径(vite proxy 转发到本地后端 8106,见 vite.config.ts),
|
||||
# 规避后端 CAS 过滤器不回 CORS 头导致的跨域拦截;SSO/基础平台用真实环境。
|
||||
# ⚠️ VITE_SERVICE_HOST 必须留空:host.config 设计约定 dev 模式走同源代理,
|
||||
# 配置远端地址会导致浏览器直连被 CAS 过滤器拦截(无 CORS 头),全部请求失败
|
||||
VITE_BASE_HOST=http://base.yunhaixingtong.com
|
||||
VITE_SSO_HOST=http://sso.yunhaixingtong.com
|
||||
VITE_SERVICE_HOST=http://base.yunhaixingtong.com/home-leave
|
||||
VITE_ZIYUANKU_HOST=https://base.bestsch.com/BschZyk
|
||||
VITE_ZHUANXIANG_HOST=https://base.bestsch.com/BschZncpd
|
||||
+40
@@ -0,0 +1,40 @@
|
||||
# Logs
|
||||
logs
|
||||
*.log
|
||||
npm-debug.log*
|
||||
yarn-debug.log*
|
||||
yarn-error.log*
|
||||
pnpm-debug.log*
|
||||
lerna-debug.log*
|
||||
|
||||
node_modules
|
||||
dist
|
||||
dist-ssr
|
||||
*.local
|
||||
|
||||
yarn.lock
|
||||
.npmrc
|
||||
# Editor directories and files
|
||||
.vscode/*
|
||||
!.vscode/extensions.json
|
||||
.idea
|
||||
.DS_Store
|
||||
*.suo
|
||||
*.ntvs*
|
||||
*.njsproj
|
||||
*.sln
|
||||
*.sw?
|
||||
|
||||
# scratch
|
||||
.temp
|
||||
|
||||
# AI 工作目录(记忆/技能,非工程内容,勿入公开仓库)
|
||||
.workbuddy/
|
||||
|
||||
# 本地备份与编辑器残留
|
||||
*.bak
|
||||
*.orig
|
||||
*.old
|
||||
|
||||
# 改造来源工程包(非本工程源码,8.4M)
|
||||
FamilyActivity.rar
|
||||
@@ -0,0 +1,15 @@
|
||||
module.exports = {
|
||||
extends: ["airbnb", "prettier", "prettier/react"],
|
||||
singleQuote: false, // 是否强制使用单引号
|
||||
printWidth: 120, // 超过最大值换行
|
||||
tabWidth: 4,
|
||||
htmlWhitespaceSensitivity: "ignore",
|
||||
semi: true, // 结尾是否使用分号
|
||||
//disableLanguages: ["vue"], // 不格式化vue文件,vue文件的格式化单独设置
|
||||
endOfLine: "auto",
|
||||
arrowParens: "avoid", // 箭头函数参数括号 默认avoid 可选 avoid| always
|
||||
};
|
||||
//如需显示webpack目录,运行以下命令
|
||||
// npm run eject
|
||||
//如需配合使eslint生效,运行以下命令
|
||||
//npm install --save-dev eslint-plugin-prettier
|
||||
@@ -1,3 +1,66 @@
|
||||
# home-leave-front
|
||||
# 学生请假(homeleave)
|
||||
|
||||
managed by projman
|
||||
学生请假模块 —— 学生向老师请假(学生申请、教师审批),教师给学生请假(教师登记,免审直接通过)。
|
||||
|
||||
> 由家校活动(family-activity)工程改造:保留 Vue3 + Vite + view-ui-plus + alova
|
||||
> 技术栈、布局壳层、权限菜单契约、表格/分页/附件等基础设施,业务域整体替换为「学生请假」。
|
||||
> 后端:`E:\YHXT\java\HomeLeave`(Spring Boot,包名 `com.yunhai.homeleave`)。
|
||||
> 本工程已去除本地 mock,全部接口直连真实后端。
|
||||
|
||||
## 快速开始
|
||||
|
||||
```bash
|
||||
# 联调本地后端(需先启动 HomeLeaveApplication,端口 8106)
|
||||
npm run dev
|
||||
|
||||
# 构建(产物直出 dist/)
|
||||
npm run build
|
||||
```
|
||||
|
||||
开发地址:<http://localhost:8078/>(`/api` 由 vite 代理转发到 `http://localhost:8106`)
|
||||
|
||||
## 功能范围
|
||||
|
||||
| 菜单 | 路由 | 说明 |
|
||||
| --- | --- | --- |
|
||||
| 请假审批 | `/audit` | 教师审批列表:审核(通过/拒绝)、批量通过、撤销审批、销假审批 |
|
||||
| 请假登记 | `/register` | 教师给学生请假:选任教班级与学生直接登记(免审通过) |
|
||||
| 请假统计 | `/stats` | 按班级 / 日期 / 请假类型统计 |
|
||||
| 请假申请 | `/apply` | 学生提交请假:类型、起止时间、连续请假、事由、附件 |
|
||||
| 我的请假 | `/my` | 学生查看本人请假记录,可撤销、申请销假 |
|
||||
|
||||
## 状态机(LeaveStatusEnum)
|
||||
|
||||
```
|
||||
0 待审核 ──教师审核──→ 1 已通过 / 8 已拒绝
|
||||
0 待审核 ──学生撤销──→ 3 已撤销
|
||||
1 已通过 ──学生申请撤销──→ 2 待撤销 ──教师审批──→ 3 已撤销 / 4 撤销拒绝
|
||||
1/7 ──学生申请销假──→ 5 待销假 ──教师审批──→ 6 已销假(回写时间)/ 7 销假拒绝
|
||||
教师登记(type=1)免审直接 1,教师可直接销假(→6)
|
||||
```
|
||||
|
||||
## 目录结构(业务部分)
|
||||
|
||||
```
|
||||
src
|
||||
├── api/module/leave.ts # 请假域接口封装(get/postJSON/postForm,统一 {code,msg,data} 解包)
|
||||
├── assets
|
||||
│ └── config/menu.ts # 左侧菜单兜底数据(modId 契约)
|
||||
├── types/leave.ts # 请假域 TS 契约(对齐后端 VO/DTO)
|
||||
└── views/leave/ # 业务页面(申请 / 我的 / 审批 / 登记 / 统计 + 详情弹窗)
|
||||
```
|
||||
|
||||
## 后端接口契约(/{platform}/leave/*)
|
||||
|
||||
| 接口 | 说明 |
|
||||
| --- | --- |
|
||||
| `POST /api/leave/Save` | 提交请假(学生 type=2 待审核;教师登记 type=1 免审通过) |
|
||||
| `GET /api/leave/List` | 分页列表(学生本人 / 教师任教班级 / 校管理员全校) |
|
||||
| `GET /api/leave/Details?id=` | 详情(时间段、销假时间段、附件、按钮状态) |
|
||||
| `POST /api/leave/Audit` | 教师审批:1 通过 / 8 拒绝;撤销 3/4;销假 6/7 |
|
||||
| `POST /api/leave/BatchPass` | 批量通过(classId 一键 / ids 勾选) |
|
||||
| `POST /api/leave/Withdraw?id=` | 学生申请撤销 |
|
||||
| `POST /api/leave/ReportBack` | 销假(学生申请 → 待销假;教师直接销假 → 已销假) |
|
||||
| `GET /api/leave/MyClasses` | 我的班级(学生所在 / 教师任教 / 管理员全校) |
|
||||
| `GET /api/leave/ClassStudents?classId=` | 班级学生名单 |
|
||||
| `GET /api/leavestats/Stats` | 请假统计 |
|
||||
|
||||
@@ -0,0 +1,41 @@
|
||||
import type { GeneratorConfig } from "@alova/wormhole";
|
||||
|
||||
export default {
|
||||
generator: [
|
||||
{
|
||||
input: "http://base.yunhaixingtong.com/homework/v3/api-docs",
|
||||
// 文档平台类型
|
||||
platform: "swagger",
|
||||
|
||||
// 生成代码的输出目录
|
||||
output: "src/api",
|
||||
// 响应数据的媒体类型
|
||||
responseMediaType: "application/json",
|
||||
// 请求体数据的媒体类型
|
||||
bodyMediaType: "application/json",
|
||||
// 生成的 API 版本
|
||||
version: 1,
|
||||
// 生成代码类型
|
||||
type: "typescript",
|
||||
// 全局 API 名称
|
||||
global: "Apis",
|
||||
splitImplementation: true,
|
||||
implementation: "inline",
|
||||
// API 处理函数
|
||||
handleApi: apiDescriptor => {
|
||||
// 过滤掉已废弃的 API
|
||||
if (apiDescriptor.deprecated) {
|
||||
return undefined;
|
||||
}
|
||||
const newOpId = apiDescriptor.summary?.trim() || apiDescriptor.operationId;
|
||||
const url = apiDescriptor.url.replace(/^\/{platform}\//, "/api/");
|
||||
|
||||
return {
|
||||
...apiDescriptor,
|
||||
operationId: newOpId, // 关键:改掉它
|
||||
url: apiDescriptor.url.replace(/^\/{platform}\//, "/api/"),
|
||||
};
|
||||
},
|
||||
},
|
||||
],
|
||||
} as GeneratorConfig;
|
||||
@@ -0,0 +1,6 @@
|
||||
//铃铛debug
|
||||
window.conf = {
|
||||
baseHost: "http://basedebug.bestsch.com",
|
||||
ssoHost: "http://ssodebug.bestsch.com",
|
||||
serviceHost: "http://basedebug.bestsch.com/QualityEvaluate",
|
||||
};
|
||||
@@ -0,0 +1,124 @@
|
||||
# 活动信息发布模块 · 功能与接口说明 v1
|
||||
|
||||
> 武校家校信息发布 —— 活动信息发布子模块。本文档面向后端联调与前端维护,与代码同步维护。
|
||||
> 前端契约:`src/types/activity.ts`、`src/api/module/activity.ts`;本地 mock:`src/assets/mock/activityapi.ts`。
|
||||
|
||||
## 一、页面与路由
|
||||
|
||||
| 页面 | 路由 | 组件 | 关键交互 |
|
||||
| --- | --- | --- | --- |
|
||||
| 我发布的 | `/list` | `ActivityList.vue` | 状态标签(全部/报名中/已截止/已结束/草稿)、时间范围 + 分类 + 关键字筛选、发布活动入口 |
|
||||
| 全部活动 | `/activitylist` | `ActivityList.vue` | 同组件;不传 `scope=user`,展示全量 |
|
||||
| 发布活动 | `/list/new` | `NewActivity.vue` | `?serid=` 编辑、`?fid=` 复用;立即发布 / 存草稿 / 定时发布 |
|
||||
| 活动详情 | `/list/detail`、`/activitylist/detail` | `ActivityDetails.vue` | `type=0` 管理视角(阅读 + 回执进度、报名情况、编辑、复用、打印);`type=1` 查看视角(标读) |
|
||||
| 报名情况 | `/signups` | `Signups.vue` | 活动下拉切换、回执状态筛选、汇总卡、按班级分组名单、回执详情、代为确认/取消、催报名、导出 CSV |
|
||||
| 活动统计 | `/stats` | `ActivityStats.vue` | 总量卡、分类分布、月度趋势、发布人分布、我发布活动的回执表 |
|
||||
| 应用设置 | `/setting` | `ActivitySetting.vue` | 主办部门(拖拽排序 / 启停 / 内联改名)+ 自定义组(组成员设置) |
|
||||
| 活动广场 | `/par/activities` | `ParentActivities.vue` | 家长端;标签(全部/待回执/已报名/已结束)+ 关键字;右侧详情 + 报名回执弹窗 |
|
||||
| 我的报名 | `/par/mine` | `ParentActivities.vue` | 同组件,`meta.initTab=signed` |
|
||||
|
||||
菜单 ↔ 路由通过 `meta.modId` 契约绑定(`src/router/routes.ts` 头部注释为唯一口径来源):
|
||||
|
||||
```
|
||||
2 我发布的 /list
|
||||
3 全部活动 /activitylist
|
||||
4 活动统计 /stats
|
||||
21 应用设置 /setting
|
||||
25 报名情况 /signups
|
||||
31 活动广场 /par/activities
|
||||
32 我的报名 /par/mine
|
||||
22 发布活动 /list/new (深层子页,parentId=2,不在菜单)
|
||||
23 活动详情 /list/detail (parentId=2)
|
||||
24 活动详情 /activitylist/detail (parentId=3)
|
||||
```
|
||||
|
||||
## 二、枚举口径
|
||||
|
||||
| 字段 | 取值 | 含义 |
|
||||
| --- | --- | --- |
|
||||
| `actStatus` | `draft` / `signup` / `closed` / `finished` | 草稿 / 报名中 / 已截止 / 已结束 |
|
||||
| `receiptMode` | `none` / `signup` / `confirm` | 仅通知 / 需报名 / 需确认(打开即自动确认) |
|
||||
| `status`(回执记录) | `none` / `signed` / `confirmed` / `canceled` | 未回执 / 已报名 / 已确认 / 已取消(请假) |
|
||||
|
||||
派生量(`ActivityProgress`):`should` 应收、`signed` 已报名、`confirmed` 已确认、`canceled` 已取消、
|
||||
`unsigned` 未回执、`signupRate` 回执率(%)、`quota` 名额上限、`usedQuota` 已占名额、`full` 是否满额。
|
||||
|
||||
`receiptMode = none` 或 `actStatus = draft` 时 `progress` 为 `null`(不产生回执记录,只统计已读)。
|
||||
|
||||
## 三、接口清单
|
||||
|
||||
统一响应 `{ code, msg, data }`,`code` 为 0 表示成功,由 `utils/alova/alova-core.ts` 解包为 `data`。
|
||||
|
||||
### 基础 / 布局(`/api/base`)
|
||||
|
||||
| 方法 | 路径 | 说明 |
|
||||
| --- | --- | --- |
|
||||
| GET | `/api/base/GetUserInfo` | 当前登录用户 |
|
||||
| GET | `/api/base/GetUserMod` | 已授权模块(左侧菜单) |
|
||||
| POST | `/api/base/SetRole` | 切换视角 `{ as: "teacher" \| "parent" }`,需在拉取用户信息前调用 |
|
||||
| GET | `/api/base/GetSchoolAll` | 教师组织树(选择用户) |
|
||||
| GET | `/api/base/GetClassTree` | 年级 → 班级树(发布对象到班级一级,叶子带 `studentCount`) |
|
||||
| POST | `/api/base/FileUpload` | 附件上传 |
|
||||
|
||||
### 活动域(`/api/activity`)
|
||||
|
||||
| 方法 | 路径 | 入参 | 说明 |
|
||||
| --- | --- | --- | --- |
|
||||
| GET | `/List` | `ActivityQuery` | 家长端收件箱(已发布 + 面向本班) |
|
||||
| GET | `/SendList` | `ActivityQuery`(`scope=user` 只看自己) | 我发布的 / 全部活动 |
|
||||
| GET | `/Detail` | `serid, type` | `type=1` 标读;`type=0` 不标读(管理视角) |
|
||||
| GET | `/GetDetail` | `serid` | 编辑/复用回显,不标读 |
|
||||
| GET | `/GetNextPrev` | `serid, type` | 上一篇/下一篇 id |
|
||||
| GET | `/ReadDetail` | `serid` | 阅读情况:按年级分组的班级读/未读 |
|
||||
| POST | `/Create` | `ActivityRequest` | 新建,返回活动 id |
|
||||
| POST | `/Edit` | `ActivityRequest`(含 `sourceId`) | 编辑 |
|
||||
| POST | `/Delete` | `number[]` | 批量删除(级联清回执记录) |
|
||||
| POST | `/InitializeRed` | —— | 一键全部已读 |
|
||||
| POST | `/UserPull` | `serid` | 撤回(家长端不可见) |
|
||||
| POST | `/SetTopmost` | `serid, topmost` | 置顶 / 取消置顶 |
|
||||
| POST | `/Expedite` | `serid` | 催办未读,返回 `{ reminded }` |
|
||||
| POST | `/ReceiveClasses` | `serid, classes` | 追加接收班级(补发,自动补回执记录) |
|
||||
| GET | `/Statis` | `startTime?, endTime?` | 活动统计 |
|
||||
| GET | `/Signups` | `serid, signupStatus` | 报名回执名单(按班级分组 + 汇总) |
|
||||
| GET | `/SignupDetail` | `signupId` | 单条回执详情 |
|
||||
| POST | `/Review` | `{ signupId, action: "confirm"\|"cancel"\|"waitlist", remark? }` | 处理回执 |
|
||||
| POST | `/Remind` | `serid` | 催报名,返回 `{ reminded }` |
|
||||
| GET | `/ExportSignups` | `serid` | 导出回执名单(JSON 包装 `{ csv }`,csv 为带 BOM 的 CSV 文本,前端取 csv 字段生成文件下载) |
|
||||
| GET | `/MyActivities` | `ActivityQuery` | 家长端活动广场(含分桶计数 `buckets`) |
|
||||
| GET | `/MySignup` | `serid` | 家长端活动详情 + 我的回执(同时标读) |
|
||||
| POST | `/Signup` | `{ serid, joinCount, guardianName, guardianPhone, remark }` | 家长报名 / 修改回执 |
|
||||
| POST | `/CancelSignup` | `serid` | 取消报名 |
|
||||
|
||||
### 字典 / 联系组
|
||||
|
||||
| 方法 | 路径 | 说明 |
|
||||
| --- | --- | --- |
|
||||
| GET | `/api/dict/List?type=1` | 主办部门下拉(仅启用) |
|
||||
| GET | `/api/dict/ManageList?type=dept` | 主办部门管理列表 |
|
||||
| POST | `/api/dict/Add` / `Update` / `Delete` / `Sort` | 主办部门增删改与排序 |
|
||||
| GET | `/api/contacts/GetGroup` | 自定义组分页 |
|
||||
| POST | `/api/contacts/AddGroup` / `EditGroup` / `DelGroup` | 自定义组增删改 |
|
||||
| GET | `/api/contacts/GetContactsTea` | 组内成员(`page=0&count=0` 取全部) |
|
||||
| POST | `/api/contacts/SetContactsTea` | 设置组内成员 |
|
||||
| GET | `/api/contacts/GetGroupTree` | 组 → 成员树(选人弹窗 tab) |
|
||||
|
||||
### 文件
|
||||
|
||||
| 方法 | 路径 | 说明 |
|
||||
| --- | --- | --- |
|
||||
| POST | `/api/file/UploadImage` | 富文本内嵌图片上传 |
|
||||
| GET | `/api/file/Preview` | 文件预览 |
|
||||
| GET | `/api/file/Down` | 附件下载 |
|
||||
| GET | `/api/activity/AllFileDown` | 全部附件打包下载 |
|
||||
|
||||
## 四、关键实现约定
|
||||
|
||||
1. **表单参数传递**:`postForm` 会把参数同时拼进 URL query。后端 `@RequestParam` 都能接收;本地 `vite-plugin-mock`
|
||||
不解析 `application/x-www-form-urlencoded` body,靠 query 才能取到参数(不影响线上)。
|
||||
2. **`@RequestBody` 接口**(`Create` / `Edit` / `Delete` / `Signup` / `Review`)走 `postJSON`,mock 侧用 `bodyOf(body, query)` 合并取参。
|
||||
3. **接收班级**:`receiveList = "ALL"` 或班级 id 逗号串;`targetClassIds()` 统一解析。
|
||||
4. **已读判定**:以班级为粒度(`classRead: string[]`);应收 / 已读人数按班级 `studentCount` 累加。
|
||||
5. **端分离**:`App.vue` 依据路由前缀(`/par` → 家长端)调用 `SetRole` 切换视角并重新拉取 `GetUserMod`,
|
||||
菜单与用户信息随视角变化;家长端菜单提供「发布端(教师)」入口便于返回。
|
||||
6. **表格高度**:`Utils.useTableHeight({ isSearch, isTabs, isPage, isOperat })`,头部 112(自身 header 56 + 面包屑 56)。
|
||||
7. **操作列图标**:`Utils.operatingHandle(h, 提示, iconClass, cb)`,图标取自 `src/assets/styles/icons.css` 的 bsch-icons 字体。
|
||||
+45
@@ -0,0 +1,45 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="zh-CN">
|
||||
|
||||
<head>
|
||||
<meta charset="UTF-8" />
|
||||
<link rel="icon" type="image/svg+xml" href="/favicon.ico" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||
<!-- 运行时配置引导:在任何应用模块执行前同步拉取 /<contextPath>/api/env-config
|
||||
(后端免登录端点,projman 配置管理在线维护),替代生产构建环境变量。
|
||||
必须同步:host.config.ts 在模块求值期就读 window.__APP_CONFIG__;失败/本地开发
|
||||
(根路径,段数不足 2)则不设置:本地走 .env.dev(VITE_*),线上走同域推导兜底。
|
||||
target = URL 第 2 段目录名:本应用产物部署于 /{contextPath}/front/,故为 front,
|
||||
对应后端配置键 yh.env-config.source.front(环境变量 YH_ENV_CONFIG_SOURCE_FRONT)。
|
||||
注意:同步 XHR 不支持 timeout 属性(赋值会抛 InvalidAccessError),依赖内网快速失败 -->
|
||||
<script>
|
||||
(function () {
|
||||
try {
|
||||
var seg = location.pathname.split("/").filter(Boolean);
|
||||
if (seg.length < 2) return; // 本地开发(根路径):走 .env.dev
|
||||
var xhr = new XMLHttpRequest();
|
||||
xhr.open("GET", "/" + seg[0] + "/api/env-config?target=" + encodeURIComponent(seg[1]), false);
|
||||
xhr.send(null);
|
||||
if (xhr.status === 200) {
|
||||
var conf = JSON.parse(xhr.responseText);
|
||||
if (conf && typeof conf === "object") window.__APP_CONFIG__ = conf;
|
||||
}
|
||||
} catch (e) {
|
||||
/* 拉取失败保持未设置,走同域推导兜底 */
|
||||
}
|
||||
})();
|
||||
</script>
|
||||
<title><%- title %></title>
|
||||
<link rel="stylesheet" href="./libs/ztree/zTreeStyle.css" />
|
||||
<script src="./libs/jquery.min.js"></script>
|
||||
<script src="./libs/lodash.min.js"></script>
|
||||
<script src="./libs/ztree/jquery.ztree.all.min.js"></script>
|
||||
<%- injectScript %>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<div id="app"></div>
|
||||
<script type="module" src="/src/main.ts"></script>
|
||||
</body>
|
||||
|
||||
</html>
|
||||
Generated
+13978
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,50 @@
|
||||
{
|
||||
"name": "homeleave",
|
||||
"private": true,
|
||||
"version": "0.0.0",
|
||||
"nodeversion": "20.19.4",
|
||||
"type": "module",
|
||||
"scripts": {
|
||||
"dev": "vite --mode dev",
|
||||
"build": "vite build --mode base",
|
||||
"build:base": "vite build --mode base",
|
||||
"build:ld": "vite build --mode ld",
|
||||
"build:prod": "vite build --mode prod",
|
||||
"preview": "vite preview",
|
||||
"api:gen": "alova gen -f"
|
||||
},
|
||||
"dependencies": {
|
||||
"@open-file-viewer/core": "^0.1.43",
|
||||
"@open-file-viewer/vue": "^0.1.43",
|
||||
"@types/lodash": "^4.14.196",
|
||||
"@wangeditor/editor": "^5.1.23",
|
||||
"@wangeditor/editor-for-vue": "^5.1.12",
|
||||
"alova": "^3.4.0",
|
||||
"axios": "^0.24.0",
|
||||
"lodash": "^4.17.21",
|
||||
"mitt": "^3.0.1",
|
||||
"node-sass": "latest",
|
||||
"pdfjs-dist": "^4.10.38",
|
||||
"pinia": "^2.1.4",
|
||||
"sass": "^1.64.1",
|
||||
"view-ui-plus": "^1.3.16",
|
||||
"vue": "^3.4.19",
|
||||
"vue-router": "4",
|
||||
"vuedraggable": "^4.1.0"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@alova/wormhole": "^1.5.0",
|
||||
"@types/node": "^20.4.4",
|
||||
"@unocss/preset-rem-to-px": "^66.6.0",
|
||||
"@unocss/preset-uno": "^66.6.0",
|
||||
"@vitejs/plugin-vue": "^5.0.4",
|
||||
"fast-glob": "^3.3.2",
|
||||
"typescript": "^5.2.2",
|
||||
"unocss": "^66.6.0",
|
||||
"unplugin-auto-import": "0.18.3",
|
||||
"vite": "^5.1.4",
|
||||
"vite-plugin-html": "^3.2.2",
|
||||
"vite-plugin-svg-icons": "^2.0.1",
|
||||
"vue-tsc": "^1.8.27"
|
||||
}
|
||||
}
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -0,0 +1,3 @@
|
||||
àRCopyright 1990-2009 Adobe Systems Incorporated.
|
||||
All rights reserved.
|
||||
See ./LICENSEáCNS2-H
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -0,0 +1,3 @@
|
||||
àRCopyright 1990-2009 Adobe Systems Incorporated.
|
||||
All rights reserved.
|
||||
See ./LICENSEá ETen-B5-H` ^
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -0,0 +1,4 @@
|
||||
àRCopyright 1990-2009 Adobe Systems Incorporated.
|
||||
All rights reserved.
|
||||
See ./LICENSE!!�º]aX!!]`�21�> �p�z�$]‚�"R‚d�-Uƒ7�*„
4„%�+ „Z „{�/…%…<�9K…b�1]†.�"‡‰`]‡,�"]ˆ
|
||||
�"]ˆh�"]‰F�"]Š$�"]‹�"]‹`�"]Œ>�"]��"]�z�"]ŽX�"]�6�"]��"]�r�"]‘P�"]’.�"]“�"]“j�"]”H�"]•&�"]–�"]–b�"]—@�"]˜�"]˜|�"]™Z�"]š8�"]›�"]›t�"]œR�"]�0�"]ž�"]žl�"]ŸJ�"] (�"]¡�"]¡d�"]¢B�"]£ �"X£~�']¤W�"]¥5�"]¦�"]¦q�"]§O�"]¨-�"]©�"]©i�"]ªG�"]«%�"]¬�"]¬a�"]?�"]®�"]®{�"]¯Y�"]°7�"]±�"]±s�"]²Q�"]³/�"]´
�"]´k�"]µI�"]¶'�"]·�"]·c�"]¸A�"]¹�"]¹}�"]º[�"]»9
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user