@sugarat/easypicker2-client 2.4.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (145) hide show
  1. package/.env +6 -0
  2. package/.env.production +3 -0
  3. package/.env.test +4 -0
  4. package/.eslintignore +0 -0
  5. package/.eslintrc.json +57 -0
  6. package/.github/workflows/main.yml +61 -0
  7. package/.prettierrc.js +9 -0
  8. package/LICENSE +21 -0
  9. package/README.md +86 -0
  10. package/auto-imports.d.ts +6 -0
  11. package/components.d.ts +56 -0
  12. package/docker/ep_backup/easypicker2.sql +214 -0
  13. package/docker/ep_backup/mongodb/easypicker2/action.bson +0 -0
  14. package/docker/ep_backup/mongodb/easypicker2/action.metadata.json +1 -0
  15. package/docker/ep_backup/mongodb/easypicker2/log.bson +0 -0
  16. package/docker/ep_backup/mongodb/easypicker2/log.metadata.json +1 -0
  17. package/docker/ep_backup/user-config.json +176 -0
  18. package/docs/.env +1 -0
  19. package/docs/.env.production +2 -0
  20. package/docs/.vitepress/config.ts +204 -0
  21. package/docs/.vitepress/theme/bg.png +0 -0
  22. package/docs/.vitepress/theme/index.scss +41 -0
  23. package/docs/.vitepress/theme/index.ts +5 -0
  24. package/docs/author.md +24 -0
  25. package/docs/auto-imports.d.ts +6 -0
  26. package/docs/components.d.ts +17 -0
  27. package/docs/deploy/design/api.md +3 -0
  28. package/docs/deploy/design/db.md +3 -0
  29. package/docs/deploy/design/index.md +3 -0
  30. package/docs/deploy/design/shell.md +9 -0
  31. package/docs/deploy/faq.md +86 -0
  32. package/docs/deploy/index.md +9 -0
  33. package/docs/deploy/local.md +275 -0
  34. package/docs/deploy/online-new.md +610 -0
  35. package/docs/deploy/online.md +683 -0
  36. package/docs/deploy/qiniu.md +183 -0
  37. package/docs/index.md +40 -0
  38. package/docs/introduction/about/code.md +26 -0
  39. package/docs/introduction/about/index.md +33 -0
  40. package/docs/introduction/feature/index.md +3 -0
  41. package/docs/plan/log.md +333 -0
  42. package/docs/plan/todo.md +127 -0
  43. package/docs/plan/wish.md +29 -0
  44. package/docs/praise/index.md +45 -0
  45. package/docs/public/favicon.ico +0 -0
  46. package/docs/public/logo.png +0 -0
  47. package/docs/public/robots.txt +2 -0
  48. package/docs/src/apis/ajax.ts +66 -0
  49. package/docs/src/apis/index.ts +1 -0
  50. package/docs/src/apis/modules/wish.ts +20 -0
  51. package/docs/src/components/Avatar.vue +60 -0
  52. package/docs/src/components/Home.vue +85 -0
  53. package/docs/src/components/Picture.vue +13 -0
  54. package/docs/src/components/Praise.vue +52 -0
  55. package/docs/src/components/WishBtn.vue +98 -0
  56. package/docs/src/components/WishPanel.vue +170 -0
  57. package/docs/src/components/callme/index.vue +72 -0
  58. package/docs/vite.config.ts +42 -0
  59. package/index.html +127 -0
  60. package/package.json +52 -0
  61. package/public/favicon.ico +0 -0
  62. package/public/logo.png +0 -0
  63. package/scripts/deploy/docs.mjs +24 -0
  64. package/scripts/deploy/prod.mjs +24 -0
  65. package/scripts/deploy/test.mjs +26 -0
  66. package/src/@types/ajax.d.ts +5 -0
  67. package/src/@types/api.d.ts +305 -0
  68. package/src/@types/lib.d.ts +26 -0
  69. package/src/@types/page.d.ts +18 -0
  70. package/src/App.vue +36 -0
  71. package/src/apis/ajax.ts +70 -0
  72. package/src/apis/index.ts +20 -0
  73. package/src/apis/modules/action.ts +17 -0
  74. package/src/apis/modules/category.ts +20 -0
  75. package/src/apis/modules/config.ts +19 -0
  76. package/src/apis/modules/file.ts +150 -0
  77. package/src/apis/modules/people.ts +81 -0
  78. package/src/apis/modules/public.ts +49 -0
  79. package/src/apis/modules/super/overview.ts +56 -0
  80. package/src/apis/modules/super/user.ts +62 -0
  81. package/src/apis/modules/task.ts +67 -0
  82. package/src/apis/modules/user.ts +56 -0
  83. package/src/apis/modules/wish.ts +31 -0
  84. package/src/assets/i/EasyPicker.png +0 -0
  85. package/src/assets/logo.png +0 -0
  86. package/src/assets/styles/app.css +69 -0
  87. package/src/components/HomeFooter/index.vue +134 -0
  88. package/src/components/HomeHeader/index.vue +156 -0
  89. package/src/components/InfosForm/index.vue +73 -0
  90. package/src/components/MessageList/index.vue +155 -0
  91. package/src/components/MessagePanel/index.vue +42 -0
  92. package/src/components/Praise/index.vue +102 -0
  93. package/src/components/QrCode.vue +44 -0
  94. package/src/components/linkDialog.vue +104 -0
  95. package/src/components/loginPanel.vue +92 -0
  96. package/src/constants/index.ts +83 -0
  97. package/src/env.d.ts +8 -0
  98. package/src/main.ts +19 -0
  99. package/src/pages/404/index.vue +59 -0
  100. package/src/pages/about/index.vue +152 -0
  101. package/src/pages/callme/index.vue +155 -0
  102. package/src/pages/dashboard/config/index.vue +264 -0
  103. package/src/pages/dashboard/files/index.vue +1152 -0
  104. package/src/pages/dashboard/index.vue +335 -0
  105. package/src/pages/dashboard/manage/config/index.vue +97 -0
  106. package/src/pages/dashboard/manage/index.vue +105 -0
  107. package/src/pages/dashboard/manage/overview/index.vue +488 -0
  108. package/src/pages/dashboard/manage/user/index.vue +679 -0
  109. package/src/pages/dashboard/manage/wish/index.vue +257 -0
  110. package/src/pages/dashboard/tasks/components/CategoryPanel.vue +208 -0
  111. package/src/pages/dashboard/tasks/components/CreateTask.vue +93 -0
  112. package/src/pages/dashboard/tasks/components/TaskInfo.vue +129 -0
  113. package/src/pages/dashboard/tasks/components/infoPanel/ddl.vue +96 -0
  114. package/src/pages/dashboard/tasks/components/infoPanel/file.vue +175 -0
  115. package/src/pages/dashboard/tasks/components/infoPanel/info.vue +477 -0
  116. package/src/pages/dashboard/tasks/components/infoPanel/people.vue +567 -0
  117. package/src/pages/dashboard/tasks/components/infoPanel/template.vue +146 -0
  118. package/src/pages/dashboard/tasks/components/infoPanel/tip.vue +55 -0
  119. package/src/pages/dashboard/tasks/components/infoPanel/tipInfo.vue +196 -0
  120. package/src/pages/dashboard/tasks/index.vue +302 -0
  121. package/src/pages/dashboard/tasks/public.ts +32 -0
  122. package/src/pages/disabled/index.vue +47 -0
  123. package/src/pages/feedback/index.vue +5 -0
  124. package/src/pages/home/index.vue +72 -0
  125. package/src/pages/login/index.vue +270 -0
  126. package/src/pages/register/index.vue +211 -0
  127. package/src/pages/reset/index.vue +186 -0
  128. package/src/pages/task/index.vue +897 -0
  129. package/src/pages/wish/index.vue +152 -0
  130. package/src/router/Interceptor/index.ts +112 -0
  131. package/src/router/index.ts +13 -0
  132. package/src/router/routes/index.ts +197 -0
  133. package/src/shims-vue.d.ts +6 -0
  134. package/src/store/index.ts +17 -0
  135. package/src/store/modules/category.ts +44 -0
  136. package/src/store/modules/public.ts +27 -0
  137. package/src/store/modules/task.ts +55 -0
  138. package/src/store/modules/user.ts +57 -0
  139. package/src/utils/elementUI.ts +8 -0
  140. package/src/utils/networkUtil.ts +236 -0
  141. package/src/utils/other.ts +25 -0
  142. package/src/utils/regExp.ts +11 -0
  143. package/src/utils/stringUtil.ts +242 -0
  144. package/tsconfig.json +24 -0
  145. package/vite.config.ts +55 -0
@@ -0,0 +1,127 @@
1
+ # 进展情况
2
+ > 问题反馈交流新“地盘” => [EasyPicker](https://support.qq.com/product/444158)
3
+
4
+ 列举待办的内容
5
+ * ❌: 未开始
6
+ * 🧱: 规划中
7
+ * ✅: 已上线
8
+
9
+ 已解决&完成的问题将会在页末折叠展示
10
+ ## Bug
11
+ | 序号 | 简介 | 来源 | 进度 | 补充 |
12
+ | ---- | --------------------------- | ---- | ---- | ---------------- |
13
+ | 1 | iOS侧微信中填写表单渲染异常 | QQ群 | ❌ | 无设备,无法复现 |
14
+
15
+ ## Feature
16
+ | 序号 | 简介 | 来源 | 进度 |
17
+ | ---- | -------------------------------------------------------------- | ------ | ---- |
18
+ | 1 | 使用手册 | 问卷 | 🧱 |
19
+ | 2 | 支持查看历史的生成下载记录(包含归档文件,避免重复生成归档文件) | - | 🧱 |
20
+ | 3 | 文件提交,限制人员可提交次数(重复提交自动覆盖) | QQ群 | ❌ |
21
+ | 4 | 人员提交情况列表的图片缩略图+预览 | QQ群 | ❌ |
22
+ | 5 | 接口耗时统计 | - | 🧱 |
23
+ | 6 | 支持在任务页切换同一分类下的其它任务 | GitHub | ❌ |
24
+ | 7 | 存储支持 oneDrive | QQ群 | ❌ |
25
+ | 8 | 支持用户自主绑定/换绑手机号 | - | ❌ |
26
+ | 9 | 任务支持多个账号共享查看数据 => 任务提交数据查看外链 | QQ群 | ❌ |
27
+ | 10 | 提供docker镜像,一键部署应用 | - | ❌ |
28
+ | 11 | 页面中记录最近操作的任务 | - | ❌ |
29
+ | 12 | 自动部署脚本不使用机器构建,直接拉取对应产物 | - | ❌ |
30
+
31
+ ## UI
32
+ | 序号 | 简介 | 来源 | 进度 |
33
+ | ---- | ------------------------------------ | ------ | ---- |
34
+ | 1 | 固定创建任务入口(PC/Mobile) | GitHub | ❌ |
35
+ | 2 | 支持移动端滑动任务设置面板的顶部菜单 | QQ群 | ✅ |
36
+ | 3 | 支持展示预览图片的名称 | QQ群 | ✅ |
37
+
38
+
39
+ ## 完成已归档
40
+ :::details bug 🐛
41
+ | 序号 | 简介 | 来源 | 进度 |
42
+ | ---- | --------------------------------------------------------------- | ---- | ---- |
43
+ | 1 | Excel报表下载打开乱码 | 问卷 | ✅ |
44
+ | 2 | 下载时,会自动预览浏览器支持的文件(可以先用批量下载解决) | - | ✅ |
45
+ | 3 | 创建任务后,分类列表进行了刷新 | - | ✅ |
46
+ | 4 | 带特殊字符的文件,批量下载失败 | QQ群 | ✅ |
47
+ | 5 | 人员限制,部分可以提交部分不可以 | QQ群 | ✅ |
48
+ | 6 | 批量操作UI卡顿 | - | ✅ |
49
+ | 7 | 单个文件记录删除,导致指向同一文件删除 | QQ群 | ✅ |
50
+ | 8 | 批量文件记录删除,导致指向同一文件删除 | QQ群 | ✅ |
51
+ | 9 | 任务删除,未删除关联文件OSS上的资源(不删除,将其单独展示出来) | QQ群 | ✅ |
52
+ | 10 | 提交文件,未选择文件也会弹窗 | QQ群 | ✅ |
53
+ | 11 | 撤回文件时,导致指向同一文件删除 | - | ✅ |
54
+ | 12 | 接入腾讯云短信,少暴露了个人签名变量 | - | ✅ |
55
+ | 13 | 上传文件未正确处理 ? 特殊字符 | QQ | ✅ |
56
+ | 14 | PC/H5来回切换导航栏展示异常 | - | ✅ |
57
+ | 15 | 服务在 windows上无法正常运行 | QQ群 | ✅ |
58
+ | 16 | blob文件下载失败 | QQ群 | ✅ |
59
+ | 17 | 无token情况下直接访问/dashboard路由报错 | QQ群 | ✅ |
60
+ | 18 | 登录后重定向到登录页 | QQ群 | ✅ |
61
+ | 19 | Excel文件下载失败、Excel报表下载打开乱码 | QQ群 | ✅ | |
62
+ | 20 | 页面 问题缺少 反馈入口 | - | ✅ | |
63
+ | 21 | 表单项过多,无法渲染,同时影响创建更新 | QQ群 | ✅ | |
64
+ | | | | |
65
+ :::
66
+
67
+ :::details features ⭐️
68
+
69
+ | 序号 | 简介 | 来源 | 进度 |
70
+ | ---- | ---------------------------------------------------------- | ------ | ---- |
71
+ | 1 | 任务支持批注功能 | 问卷 | ✅ |
72
+ | 2 | 任务必填信息,支持导入模板 | QQ群 | ✅ |
73
+ | 3 | 任务收集中增加限制文件类型 | 问卷 | ✅ |
74
+ | 4 | 文件自动重命名后,可以增加原始文件名项 | 问卷 | ✅ |
75
+ | 5 | 导出的提交名单,显示提交/未提交数据 | 问卷 | ✅ |
76
+ | 6 | 支持直接从任务卡片跳转到文件面板展示对应任务数据 | GitHub | ✅ |
77
+ | 7 | 添加标题进一步说明近期提交情况数据 | GitHub | ✅ |
78
+ | 8 | 文件提交,限制单次最大同时上传文件数量 | GitHub | ✅ |
79
+ | 9 | 文件提交,限制文件大小 | GitHub | ✅ |
80
+ | 10 | 人员提交情况面板展示序号 | QQ群 | ✅ |
81
+ | 11 | 任务信息维护面板,显示帮助提示信息(带图) | - | ✅ |
82
+ | 12 | 限制人员后,提交情况加个附件数量 | QQ群 | ✅ |
83
+ | 13 | 优化文件提交的导出记录展示(分开展示提交信息) | QQ群 | ✅ |
84
+ | 14 | 文件列表的图片缩略图+预览 | QQ群 | ✅ |
85
+ | 15 | 表单支持单选多选 | QQ群 | ✅ |
86
+ | 16 | 限制人员名单,支持导入模板 | QQ群 | ✅ |
87
+ | 17 | 自动重命名,支持固定内容(表单支持固定内容) | QQ群 | ✅ |
88
+ | 18 | 表单支持下拉选择 | QQ群 | ✅ |
89
+ | 19 | 上传前,显示文件的MD5校验进度 | GitHub | ✅ |
90
+ | 20 | 提交面板的操作提示文案 | - | ✅ |
91
+ | 21 | 撤回后建议文件列表添加提示(文件名后面加个"已撤回"提示一下) | GitHub | ✅ |
92
+ | 22 | 提交信息面板展示人员名字 | QQ群 | ✅ |
93
+ | 23 | 管理端支持直接修改账号的密码和绑定手机号 | QQ群 | ✅ |
94
+ | 24 | 文件列表支持文件名排序 | QQ群 | ✅ |
95
+ | 26 | 应用管理刷新会404 | QQ群 | ✅ |
96
+ | 26 | 简化部署步骤,部分配置移入单独控制面板 | - | ✅ |
97
+ | 27 | 文档完善,添加FAQ,部署自查步骤 | - | ✅ |
98
+ | 28 | 支持直接修改已提交文件的文件名 | QQ群 | ✅ |
99
+ | 29 | 文件面板XXG空间文案介绍更新 | - | ✅ |
100
+ | 30 | 限制名单后,弹窗确认改为直接输入框输入 | QQ群 | ✅ |
101
+ | 31 | 添加可视化面板,配置数据库,七牛云等相关配置 | - | ✅ |
102
+ | 32 | 批量压缩完成后删除OSS上的中间产物 | QQ群 | ✅ |
103
+ | 33 | 支持单独添加限制人员 | QQ群 | ✅ |
104
+ :::
105
+
106
+ :::details UI/UE🪞
107
+
108
+ | 序号 | 简介 | 来源 | 进度 |
109
+ | ---- | ------------------------------------------------ | ------ | ---- |
110
+ | 1 | 创建任务时,“确定”按钮可以变成绿色等明显的颜色 | 问卷 | ✅ |
111
+ | 2 | 下拉列表限制宽度,自动截断长文案 | - | ✅ |
112
+ | 3 | 显示登录的用户名 | - | ✅ |
113
+ | 4 | 任务卡片自动截断长title,居中对齐 | GitHub | ✅ |
114
+ | 5 | 查询按钮和左边的按钮一致 | GitHub | ✅ |
115
+ | 6 | 退出按钮样式优化 | GitHub | ✅ |
116
+ | 7 | 必填信息展示对齐 | GitHub | ✅ |
117
+ | 8 | 开始上传改为提交文件 | GitHub | ✅ |
118
+ | 9 | 登录面板UI未对齐 | GitHub | ✅ |
119
+ | 10 | “关闭” 改为 “取消” | GitHub | ✅ |
120
+ | 11 | 表单页UI未对齐 | GitHub | ✅ |
121
+ | 12 | 限制提示消息展示条数 | GitHub | ✅ |
122
+ | 13 | 上传文件列表如果能突出一下就好了, 加个边框什么的 | GitHub | ✅ |
123
+ | 14 | 删除文件的ICON太小了 | QQ群 | ✅ |
124
+ | 15 | 更新提交任务页的"下载模板"文案和提示信息 | QQ群 | ✅ |
125
+ | 16 | 调大提交按钮 | QQ群 | ✅ |
126
+ | 17 | 首页大拇指错位 | - | ✅ |
127
+ :::
@@ -0,0 +1,29 @@
1
+ # 需求墙
2
+ > 问题反馈交流新“地盘” => [EasyPicker](https://support.qq.com/product/444158)
3
+
4
+ :::danger 优先处理Bug(应用缺陷)!!!
5
+ 如有使用上的问题,也在此处反馈
6
+ :::
7
+
8
+ :::tip 展示一些用户侧反馈的建议与使用问题
9
+ 通过投票决定下一个新功能是什么
10
+
11
+ 票数越多优先级越高
12
+
13
+ 当然你也可以提出你的建议,让大家来投票
14
+ :::
15
+
16
+ :::warning But,优先支持打赏朋友提的功能
17
+ 💐 💐 感谢各位[打赏](./../praise/index.md)的朋友,💐 💐
18
+ :::
19
+
20
+ <wish-btn />
21
+
22
+ <wish-panel />
23
+
24
+ ## 其它方式
25
+
26
+ | 加群反馈 | [问卷反馈](https://www.wenjuan.com/s/UZBZJvA040/#《轻取(EasyPicker)用户意见收集》,快来参与吧。【问卷网提供支持】) |
27
+ | ------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------- |
28
+ | <img style="width: 240px" src="https://img.cdn.sugarat.top/mdImg/MTY0OTkwMDk2MzQ3OQ==649900963479" alt="QQ群"/> | <img style="width: 240px" src="https://img.cdn.sugarat.top/mdImg/MTY1NTYwNjA0OTc0OA==655606049748" alt="问卷"/> |
29
+
@@ -0,0 +1,45 @@
1
+ # 请作者喝茶
2
+
3
+ :::tip 💰
4
+ `EasyPicker(轻取)` 是[完全开源](https://github.com/ATQQ/easypicker2-client)&免费的Web应用!!!
5
+
6
+ `EasyPicker(轻取)` 是[完全开源](https://github.com/ATQQ/easypicker2-client)&免费的Web应用!!!
7
+
8
+ `EasyPicker(轻取)` 是[完全开源](https://github.com/ATQQ/easypicker2-client)&免费的Web应用!!!
9
+ :::
10
+
11
+ 缘于兴趣和机缘巧合
12
+
13
+ 和大家一样,在学校被`收图`,`收文件`反复折磨,当时市面上也没有比较合适好用的成品
14
+
15
+ 这给笔者开发 `轻取` 带来了`契机`
16
+
17
+ 目前注册用户已经有了一定规模
18
+
19
+ 过程中收到许多网友的称赞与反馈,应用能被大家认可也是非常开心😄
20
+
21
+ 如果你觉得应用不错,可以请作者喝茶🍵
22
+
23
+ :::warning 应用的开销
24
+ * 存储 `0.15` 元/GB/月
25
+ * 下载 `0.29` 元/GB
26
+ :::
27
+
28
+ ## 打赏码
29
+ <Praise />
30
+
31
+ ## 打赏记录
32
+ | 昵称 | 日期 | 来源 | 金额 | 备注 |
33
+ | --------- | ---------- | ---- | ----- | ------------------ |
34
+ | Sak***iro | 2022-06-18 | 微信 | 6.66 | 加油 |
35
+ | 欲****熊 | 2022-07-12 | 微信 | 6.66 | 我是大废物 |
36
+ | 周****琪 | 2022-07-31 | QQ | 35.00 | 请你喝奶茶 |
37
+ | *了 | 2022-08-31 | 微信 | 6.66 | 加油大哥 |
38
+ | 欲****熊 | 2022-09-12 | 微信 | 20.00 | 手动狗头 发电 |
39
+ | 匿名˝ | 2022-09-27 | 微信 | 20.00 | 辛苦了,喝杯奶茶 |
40
+ | 太***谦 | 2022-10-23 | 微信 | 6.66 | 加油💪🏻 |
41
+ | *凌 | 2023-01-22 | 微信 | 6.66 | 非常好的程序,加油 |
42
+ | *L | 2023-01-31 | 微信 | 6.66 | - |
43
+
44
+
45
+ 再次感谢以上网友 💐💐
Binary file
Binary file
@@ -0,0 +1,2 @@
1
+ User-agent: *
2
+ Allow: /
@@ -0,0 +1,66 @@
1
+ import axios from 'axios'
2
+ import { ElMessage } from 'element-plus'
3
+
4
+ const instance = axios.create({
5
+ baseURL: import.meta.env.VITE_APP_AXIOS_BASE_URL,
6
+ })
7
+
8
+ /**
9
+ * 请求拦截
10
+ */
11
+ instance.interceptors.request.use((config) => {
12
+ const { method, params } = config
13
+ // 附带鉴权的token
14
+ const headers: any = {
15
+
16
+ }
17
+ // 不缓存get请求
18
+ if (method === 'get') {
19
+ headers['Cache-Control'] = 'no-cache'
20
+ }
21
+ // delete请求参数放入body中
22
+ if (method === 'delete') {
23
+ headers['Content-type'] = 'application/json;'
24
+ Object.assign(config, {
25
+ data: params,
26
+ params: {},
27
+ })
28
+ }
29
+
30
+ return ({
31
+ ...config,
32
+ headers,
33
+ })
34
+ })
35
+
36
+ // 跳转首页防抖
37
+ let redirectHome = true
38
+ /**
39
+ * 响应拦截
40
+ */
41
+ instance.interceptors.response.use((v) => {
42
+ if (v.status === 200) {
43
+ if (v.data.code === 0) {
44
+ return v.data
45
+ }
46
+ if (v.data?.code === 3004) {
47
+ if (redirectHome) {
48
+ redirectHome = false
49
+ ElMessage.error('登录过期,跳转首页')
50
+ setTimeout(() => {
51
+ redirectHome = true
52
+ }, 1000)
53
+ }
54
+ }
55
+ if (v?.data?.code === 500) {
56
+ ElMessage.error(v?.data?.msg)
57
+ }
58
+ return Promise.reject(v.data)
59
+ }
60
+ ElMessage.error(v.statusText)
61
+ return Promise.reject(v)
62
+ }, (err) => {
63
+ ElMessage.error(`网络错误:${err}`)
64
+ return Promise.reject(err)
65
+ })
66
+ export default instance
@@ -0,0 +1 @@
1
+ export { default as WishApi } from './modules/wish'
@@ -0,0 +1,20 @@
1
+ import ajax from '../ajax'
2
+
3
+ function addWish(wish:Partial<WishApiTypes.Wish>):WishApiTypes.addWish {
4
+ return ajax.post(
5
+ '/wish/add', wish,
6
+ )
7
+ }
8
+
9
+ function getDocsWish():WishApiTypes.allDocsWishData {
10
+ return ajax.get('wish/all/docs')
11
+ }
12
+
13
+ function praiseWish(id:string) {
14
+ return ajax.post(`wish/praise/${id}`)
15
+ }
16
+ export default {
17
+ addWish,
18
+ getDocsWish,
19
+ praiseWish,
20
+ }
@@ -0,0 +1,60 @@
1
+ <template>
2
+ <div class="avatar">
3
+ <img class="logo" loading="lazy" src="https://sugarat.top/icon.png" />
4
+ <div class="name">
5
+ <a href="https://sugarat.top" target="_blank">粥里有勺糖</a>
6
+ </div>
7
+ <div class="description">
8
+ 前端切图仔
9
+ <br />热爱开源,乐于分享
10
+ </div>
11
+ <div class="links">
12
+ <a
13
+ class="github-icon"
14
+ href="https://github.com/ATQQ"
15
+ target="_blank"
16
+ rel="noopener noreferrer"
17
+ />
18
+ </div>
19
+ </div>
20
+ </template>
21
+ <style scoped>
22
+ .avatar {
23
+ margin-top: 20px;
24
+ text-align: center;
25
+ }
26
+ .logo {
27
+ width: 100px;
28
+ border-radius: 50%;
29
+ margin: 0 auto;
30
+ }
31
+
32
+ .name {
33
+ font-size: 18px;
34
+ font-weight: bold;
35
+ margin-top: 10px;
36
+ text-align: center;
37
+ }
38
+ .description {
39
+ margin-top: 10px;
40
+ text-align: center;
41
+ line-height: 26px;
42
+ opacity: 0.6;
43
+ }
44
+ .github-icon {
45
+ background-image: url("data:image/svg+xml;utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='1.2em' height='1.2em' preserveAspectRatio='xMidYMid meet' viewBox='0 0 32 32'%3E%3Cpath fill='currentColor' fill-rule='evenodd' d='M16 2a14 14 0 0 0-4.43 27.28c.7.13 1-.3 1-.67v-2.38c-3.89.84-4.71-1.88-4.71-1.88a3.71 3.71 0 0 0-1.62-2.05c-1.27-.86.1-.85.1-.85a2.94 2.94 0 0 1 2.14 1.45a3 3 0 0 0 4.08 1.16a2.93 2.93 0 0 1 .88-1.87c-3.1-.36-6.37-1.56-6.37-6.92a5.4 5.4 0 0 1 1.44-3.76a5 5 0 0 1 .14-3.7s1.17-.38 3.85 1.43a13.3 13.3 0 0 1 7 0c2.67-1.81 3.84-1.43 3.84-1.43a5 5 0 0 1 .14 3.7a5.4 5.4 0 0 1 1.44 3.76c0 5.38-3.27 6.56-6.39 6.91a3.33 3.33 0 0 1 .95 2.59v3.84c0 .46.25.81 1 .67A14 14 0 0 0 16 2Z'/%3E%3C/svg%3E");
46
+ width: 30px;
47
+ height: 30px;
48
+ background-repeat: no-repeat;
49
+ background-size: 100%;
50
+ }
51
+ .links {
52
+ margin-top: 10px;
53
+ display: flex;
54
+ justify-content: center;
55
+ }
56
+ .links a {
57
+ display: block;
58
+ opacity: 0.5;
59
+ }
60
+ </style>
@@ -0,0 +1,85 @@
1
+ <template>
2
+ <div class="home">
3
+ <ul class="card-grid">
4
+ <li>
5
+ <h2 class="h2">微信赞赏</h2>
6
+ <Picture
7
+ style="width: 200px"
8
+ src="https://img.cdn.sugarat.top/mdImg/MTY0Nzc2MDE3MzM1NA==647760173354"
9
+ />
10
+
11
+ <div class="description">
12
+ 如果你觉得项目不错
13
+ <br />
14
+ <span>
15
+ 可以
16
+ <a href="/praise/index" style="color: #3f9eff"
17
+ >请作者喝 <strong>🍵</strong></a
18
+ >
19
+ </span>
20
+ </div>
21
+ </li>
22
+ <li>
23
+ <h2 class="h2">Developer</h2>
24
+ <div class="user-list">
25
+ <Avatar />
26
+ </div>
27
+ </li>
28
+ <li>
29
+ <h2 class="h2">
30
+ <a href="https://support.qq.com/product/444158" target="_blank"
31
+ >反馈交流</a
32
+ >群
33
+ </h2>
34
+
35
+ <Picture
36
+ style="width: 200px; margin: 10px"
37
+ src="https://img.cdn.sugarat.top/mdImg/MTY0Nzc1MjI3MzUwMw==647752273503"
38
+ />
39
+ </li>
40
+ </ul>
41
+ </div>
42
+ </template>
43
+ <script setup>
44
+ import Avatar from './Avatar.vue'
45
+ import Picture from './Picture.vue'
46
+ </script>
47
+
48
+ <style scoped lang="scss">
49
+ .home {
50
+ margin: 20px 0;
51
+ display: flex;
52
+ flex-direction: column;
53
+ align-items: center;
54
+ }
55
+
56
+ .h2 {
57
+ opacity: 0.5;
58
+ text-align: center;
59
+ }
60
+
61
+ .description {
62
+ margin-top: 10px;
63
+ text-align: center;
64
+ line-height: 26px;
65
+ }
66
+
67
+ .action-link + .action-link {
68
+ margin-left: 20px;
69
+ }
70
+
71
+ .version {
72
+ margin: 0rem 0 2.5rem 0;
73
+ opacity: 0.5;
74
+ display: flex;
75
+ align-items: center;
76
+ }
77
+
78
+ .card-grid {
79
+ display: flex;
80
+ max-width: 1168px;
81
+ width: 100%;
82
+ justify-content: space-around;
83
+ flex-wrap: wrap;
84
+ }
85
+ </style>
@@ -0,0 +1,13 @@
1
+ <template>
2
+ <el-image :src="src" :preview-src-list="[src]" hide-on-click-modal/>
3
+ </template>
4
+ <script setup lang="ts">
5
+ import { ElImage } from 'element-plus'
6
+
7
+ defineProps({
8
+ src: {
9
+ type: String,
10
+ default: '',
11
+ },
12
+ })
13
+ </script>
@@ -0,0 +1,52 @@
1
+ <template>
2
+ <span class="praise">
3
+ <table>
4
+ <thead>
5
+ <tr>
6
+ <th v-for="(v, idx) in praiseImg" :key="idx">{{ v.title }}</th>
7
+ </tr>
8
+ </thead>
9
+ <tbody>
10
+ <tr>
11
+ <td v-for="(v, idx) in praiseImg" :key="idx">
12
+ <el-image hide-on-click-modal preview-teleported style="width: 200px; height: 200px" :src="v.url"
13
+ :preview-src-list="praiseImg.map(v => v.url)" :initial-index="idx" fit="cover" />
14
+ </td>
15
+ </tr>
16
+ </tbody>
17
+ </table>
18
+ </span>
19
+ </template>
20
+ <script setup lang="ts">
21
+ import {
22
+ ElImage,
23
+ } from 'element-plus'
24
+ import {
25
+ reactive,
26
+ } from 'vue'
27
+
28
+ const praiseImg = reactive([
29
+ {
30
+ url: 'https://img.cdn.sugarat.top/mdImg/MTY1MTU0NzQ0MjMzNA==651547442334',
31
+ title: '微信',
32
+ },
33
+ {
34
+ url: 'https://img.cdn.sugarat.top/mdImg/MTY0Nzc1NTYyOTE5Mw==647755629193',
35
+ title: '微信赞赏',
36
+ },
37
+ {
38
+ url: 'https://img.cdn.sugarat.top/mdImg/MTY1MTU0NzQyOTg0OA==651547429848',
39
+ title: '支付宝',
40
+ },
41
+ ])
42
+
43
+ </script>
44
+ <style scoped>
45
+ .praise {
46
+ cursor: pointer;
47
+ }
48
+
49
+ .praise-line {
50
+ margin-bottom: 10px;
51
+ }
52
+ </style>
@@ -0,0 +1,98 @@
1
+ <template>
2
+ <div class="wish-btn">
3
+ <div class="btn-list">
4
+ <el-button
5
+ v-if="!dialogVisible"
6
+ @click="handleOpenFeature"
7
+ style="margin: 0 auto"
8
+ size="large"
9
+ type="success"
10
+ >提建议 & 给反馈</el-button
11
+ >
12
+ <el-button
13
+ v-else
14
+ @click="dialogVisible = false"
15
+ style="margin: 0 auto"
16
+ size="large"
17
+ type="warning"
18
+ >取消
19
+ </el-button>
20
+ </div>
21
+ <el-form :model="formData" v-show="dialogVisible" style="margin-top: 10px">
22
+ <el-form-item label="建议&问题" :label-width="formLabelWidth">
23
+ <el-input
24
+ placeholder="一句简单明了的话概括一下"
25
+ v-model="formData.title"
26
+ ></el-input>
27
+ </el-form-item>
28
+ <el-form-item label="详细描述" :label-width="formLabelWidth">
29
+ <el-input
30
+ placeholder="用朴素的话语进一步描述你的建议"
31
+ type="textarea"
32
+ v-model="formData.des"
33
+ ></el-input>
34
+ </el-form-item>
35
+ <el-form-item label="联系方式" :label-width="formLabelWidth">
36
+ <el-input
37
+ placeholder="邮箱,QQ,微信等任意方式均可"
38
+ v-model="formData.contact"
39
+ ></el-input>
40
+ </el-form-item>
41
+ </el-form>
42
+ <div class="btn-list" v-show="dialogVisible">
43
+ <el-button type="success" @click="handleAddFeature">提交</el-button>
44
+ </div>
45
+ </div>
46
+ </template>
47
+
48
+ <script lang="ts" setup>
49
+ import { ElButton, ElMessage, ElFormItem, ElInput, ElForm } from 'element-plus'
50
+ import { ref, reactive } from 'vue'
51
+ import { WishApi } from '../apis'
52
+
53
+ const formLabelWidth = '80px'
54
+ const dialogVisible = ref(false)
55
+ const formData = reactive({
56
+ title: '',
57
+ des: '',
58
+ contact: ''
59
+ })
60
+ const handleOpenFeature = () => {
61
+ dialogVisible.value = true
62
+ }
63
+
64
+ const vaildFormData = () => {
65
+ if (formData.title.length === 0) {
66
+ ElMessage.error('建议标题不能为空')
67
+ return false
68
+ }
69
+ if (formData.des.length === 0) {
70
+ ElMessage.error('建议详细描述,不能为空')
71
+ return false
72
+ }
73
+ return true
74
+ }
75
+ const handleAddFeature = () => {
76
+ // 信息校验
77
+ if (!vaildFormData()) {
78
+ return
79
+ }
80
+ dialogVisible.value = false
81
+ // 提交信息
82
+ WishApi.addWish(formData).then(() => {
83
+ ElMessage.success('提交成功,感谢你的反馈')
84
+ })
85
+ // 初始化 表单内容
86
+ formData.title = ''
87
+ formData.des = ''
88
+ formData.contact = ''
89
+ }
90
+ </script>
91
+
92
+ <style lang="scss" scoped>
93
+ .btn-list {
94
+ display: flex;
95
+ justify-content: center;
96
+ align-items: center;
97
+ }
98
+ </style>