@sugarat/easypicker2-client 2.4.3 → 2.6.0

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 (293) hide show
  1. package/dist/assets/aria-bc8e8b0f.js +2 -0
  2. package/dist/assets/aria-bc8e8b0f.js.map +1 -0
  3. package/dist/assets/aria-legacy.af0825d3.js +2 -0
  4. package/dist/assets/data-analysis-3ce8c1c1.js +2 -0
  5. package/dist/assets/data-analysis-3ce8c1c1.js.map +1 -0
  6. package/dist/assets/data-analysis-legacy.985137a1.js +2 -0
  7. package/dist/assets/data-board-fc2c2ec1.js +2 -0
  8. package/dist/assets/data-board-fc2c2ec1.js.map +1 -0
  9. package/dist/assets/data-board-legacy.33116f7c.js +2 -0
  10. package/dist/assets/el-date-picker-b377a533.js +2 -0
  11. package/dist/assets/el-date-picker-b377a533.js.map +1 -0
  12. package/dist/assets/el-date-picker-cf2e83b6.css +1 -0
  13. package/dist/assets/el-date-picker-legacy.127f0787.js +2 -0
  14. package/dist/assets/el-dialog-25bd2fb8.css +1 -0
  15. package/dist/assets/el-dialog-5b7bce58.js +2 -0
  16. package/dist/assets/el-dialog-5b7bce58.js.map +1 -0
  17. package/dist/assets/el-dialog-legacy.e6ef2c86.js +2 -0
  18. package/dist/assets/el-dropdown-item-0c6ddabc.css +1 -0
  19. package/dist/assets/el-dropdown-item-e0275106.js +2 -0
  20. package/dist/assets/el-dropdown-item-e0275106.js.map +1 -0
  21. package/dist/assets/el-dropdown-item-legacy.4888d114.js +2 -0
  22. package/dist/assets/el-form-item-3aad794a.css +1 -0
  23. package/dist/assets/el-form-item-c0658f70.js +2 -0
  24. package/dist/assets/el-form-item-c0658f70.js.map +1 -0
  25. package/dist/assets/el-form-item-legacy.a8e8784e.js +2 -0
  26. package/dist/assets/el-loading-c8798044.js +2 -0
  27. package/dist/assets/el-loading-c8798044.js.map +1 -0
  28. package/dist/assets/el-loading-d0f2d079.css +1 -0
  29. package/dist/assets/el-loading-legacy.534bd799.js +2 -0
  30. package/dist/assets/el-pagination-bf7c736d.css +1 -0
  31. package/dist/assets/el-pagination-dabcccbb.js +2 -0
  32. package/dist/assets/el-pagination-dabcccbb.js.map +1 -0
  33. package/dist/assets/el-pagination-legacy.7d2ae10d.js +2 -0
  34. package/dist/assets/el-progress-54b274cd.js +2 -0
  35. package/dist/assets/el-progress-54b274cd.js.map +1 -0
  36. package/dist/assets/el-progress-63aabe3a.css +1 -0
  37. package/dist/assets/el-progress-legacy.07ca6502.js +2 -0
  38. package/dist/assets/el-select-6be23320.css +1 -0
  39. package/dist/assets/el-select-f81a7377.js +2 -0
  40. package/dist/assets/el-select-f81a7377.js.map +1 -0
  41. package/dist/assets/el-select-legacy.94fad7fa.js +2 -0
  42. package/dist/assets/el-switch-9eba6fd0.js +2 -0
  43. package/dist/assets/el-switch-9eba6fd0.js.map +1 -0
  44. package/dist/assets/el-switch-aeab2c6b.css +1 -0
  45. package/dist/assets/el-switch-legacy.490534be.js +2 -0
  46. package/dist/assets/el-tab-pane-4a1bb4c7.css +1 -0
  47. package/dist/assets/el-tab-pane-89bdd69b.js +2 -0
  48. package/dist/assets/el-tab-pane-89bdd69b.js.map +1 -0
  49. package/dist/assets/el-tab-pane-legacy.cfdbc441.js +2 -0
  50. package/dist/assets/el-table-column-6716308a.js +21 -0
  51. package/dist/assets/el-table-column-6716308a.js.map +1 -0
  52. package/dist/assets/el-table-column-6c2089f9.css +1 -0
  53. package/dist/assets/el-table-column-legacy.49685e5a.js +24 -0
  54. package/dist/assets/index-01e33329.css +1 -0
  55. package/dist/assets/index-0b0f29ec.js +2 -0
  56. package/dist/assets/index-0b0f29ec.js.map +1 -0
  57. package/dist/assets/index-17c6005d.css +1 -0
  58. package/dist/assets/index-20019c57.js +2 -0
  59. package/dist/assets/index-20019c57.js.map +1 -0
  60. package/dist/assets/index-247f2c67.css +1 -0
  61. package/dist/assets/index-248e88e2.js +2 -0
  62. package/dist/assets/index-248e88e2.js.map +1 -0
  63. package/dist/assets/index-3091894a.css +1 -0
  64. package/dist/assets/index-37e15bc6.css +1 -0
  65. package/dist/assets/index-39637d43.js +2 -0
  66. package/dist/assets/index-39637d43.js.map +1 -0
  67. package/dist/assets/index-3f82ab7a.css +1 -0
  68. package/dist/assets/index-4c81cf78.css +1 -0
  69. package/dist/assets/index-5099f123.js +2 -0
  70. package/dist/assets/index-5099f123.js.map +1 -0
  71. package/dist/assets/index-57513f17.css +1 -0
  72. package/dist/assets/index-76f31e30.css +1 -0
  73. package/dist/assets/index-76ff9b9b.css +1 -0
  74. package/dist/assets/index-8557974a.js +2 -0
  75. package/dist/assets/index-8557974a.js.map +1 -0
  76. package/dist/assets/index-85fcd87a.css +1 -0
  77. package/dist/assets/index-867d07e4.js +2 -0
  78. package/dist/assets/index-867d07e4.js.map +1 -0
  79. package/dist/assets/index-8f353d3b.js +2 -0
  80. package/dist/assets/index-8f353d3b.js.map +1 -0
  81. package/dist/assets/index-8f7abc30.js +2 -0
  82. package/dist/assets/index-8f7abc30.js.map +1 -0
  83. package/dist/assets/index-8fbd06a5.js +2 -0
  84. package/dist/assets/index-8fbd06a5.js.map +1 -0
  85. package/dist/assets/index-93c733b3.css +1 -0
  86. package/dist/assets/index-98b55468.css +1 -0
  87. package/dist/assets/index-9e6bd406.js +2 -0
  88. package/dist/assets/index-9e6bd406.js.map +1 -0
  89. package/dist/assets/index-a880597c.css +1 -0
  90. package/dist/assets/index-acdbf3b6.js +2 -0
  91. package/dist/assets/index-acdbf3b6.js.map +1 -0
  92. package/dist/assets/index-b3e58b02.js +2 -0
  93. package/dist/assets/index-b3e58b02.js.map +1 -0
  94. package/dist/assets/index-c13133c5.js +2 -0
  95. package/dist/assets/index-c13133c5.js.map +1 -0
  96. package/dist/assets/index-c1d6836c.js +2 -0
  97. package/dist/assets/index-c1d6836c.js.map +1 -0
  98. package/dist/assets/index-d26aeed5.css +1 -0
  99. package/dist/assets/index-d98be3e4.js +19 -0
  100. package/dist/assets/index-d98be3e4.js.map +1 -0
  101. package/dist/assets/index-d9db6cc1.js +2 -0
  102. package/dist/assets/index-d9db6cc1.js.map +1 -0
  103. package/dist/assets/index-da51da36.css +1 -0
  104. package/dist/assets/index-e0ef7135.js +2 -0
  105. package/dist/assets/index-e0ef7135.js.map +1 -0
  106. package/dist/assets/index-e7d8a83e.css +1 -0
  107. package/dist/assets/index-ebf625c9.js +2 -0
  108. package/dist/assets/index-ebf625c9.js.map +1 -0
  109. package/dist/assets/index-eda7d85a.js +2 -0
  110. package/dist/assets/index-eda7d85a.js.map +1 -0
  111. package/dist/assets/index-fdc557f8.js +2 -0
  112. package/dist/assets/index-fdc557f8.js.map +1 -0
  113. package/dist/assets/index-legacy.0c570346.js +2 -0
  114. package/dist/assets/index-legacy.24edddf9.js +2 -0
  115. package/dist/assets/index-legacy.31681402.js +2 -0
  116. package/dist/assets/index-legacy.3e6b32cf.js +2 -0
  117. package/dist/assets/index-legacy.4edc099d.js +2 -0
  118. package/dist/assets/index-legacy.614df679.js +2 -0
  119. package/dist/assets/index-legacy.6420d0ab.js +2 -0
  120. package/dist/assets/index-legacy.679e5ce1.js +2 -0
  121. package/dist/assets/index-legacy.7b42e0cb.js +2 -0
  122. package/dist/assets/index-legacy.7bafa2e6.js +2 -0
  123. package/dist/assets/index-legacy.7ff3d773.js +2 -0
  124. package/dist/assets/index-legacy.84e0eca9.js +2 -0
  125. package/dist/assets/index-legacy.9ca64f8c.js +2 -0
  126. package/dist/assets/index-legacy.a4371211.js +2 -0
  127. package/dist/assets/index-legacy.acb8b137.js +23 -0
  128. package/dist/assets/index-legacy.bc3790f6.js +2 -0
  129. package/dist/assets/index-legacy.d0e21cb1.js +2 -0
  130. package/dist/assets/index-legacy.daf56c8f.js +2 -0
  131. package/dist/assets/index-legacy.e12feae0.js +2 -0
  132. package/dist/assets/index-legacy.e7f8790c.js +2 -0
  133. package/dist/assets/index-legacy.f84efe08.js +2 -0
  134. package/dist/assets/isEqual-82bb65ad.js +2 -0
  135. package/dist/assets/isEqual-82bb65ad.js.map +1 -0
  136. package/dist/assets/isEqual-legacy.dbaa2a6e.js +2 -0
  137. package/dist/assets/other-8d7ba6a0.js +2 -0
  138. package/dist/assets/other-8d7ba6a0.js.map +1 -0
  139. package/dist/assets/other-legacy.39078796.js +2 -0
  140. package/dist/assets/polyfills-legacy.99e38685.js +4 -0
  141. package/dist/assets/refresh-f2c4c532.js +2 -0
  142. package/dist/assets/refresh-f2c4c532.js.map +1 -0
  143. package/dist/assets/refresh-legacy.0ee83ca1.js +2 -0
  144. package/dist/assets/tip-3d272885.js +2 -0
  145. package/dist/assets/tip-3d272885.js.map +1 -0
  146. package/dist/assets/tip-9cb18ee8.css +1 -0
  147. package/dist/assets/tip-legacy.dee89e85.js +2 -0
  148. package/dist/assets/validator-d4ea1237.js +2 -0
  149. package/dist/assets/validator-d4ea1237.js.map +1 -0
  150. package/dist/assets/validator-legacy.ecd1e5dd.js +2 -0
  151. package/{index.html → dist/index.html} +8 -1
  152. package/package.json +30 -19
  153. package/.env +0 -6
  154. package/.env.production +0 -3
  155. package/.env.test +0 -4
  156. package/.eslintignore +0 -0
  157. package/.eslintrc.json +0 -57
  158. package/.github/workflows/main.yml +0 -61
  159. package/.prettierrc.js +0 -9
  160. package/auto-imports.d.ts +0 -6
  161. package/components.d.ts +0 -56
  162. package/docker/ep_backup/easypicker2.sql +0 -214
  163. package/docker/ep_backup/mongodb/easypicker2/action.bson +0 -0
  164. package/docker/ep_backup/mongodb/easypicker2/action.metadata.json +0 -1
  165. package/docker/ep_backup/mongodb/easypicker2/log.bson +0 -0
  166. package/docker/ep_backup/mongodb/easypicker2/log.metadata.json +0 -1
  167. package/docker/ep_backup/user-config.json +0 -176
  168. package/docs/.env +0 -1
  169. package/docs/.env.production +0 -2
  170. package/docs/.vitepress/config.ts +0 -204
  171. package/docs/.vitepress/theme/bg.png +0 -0
  172. package/docs/.vitepress/theme/index.scss +0 -41
  173. package/docs/.vitepress/theme/index.ts +0 -5
  174. package/docs/author.md +0 -24
  175. package/docs/auto-imports.d.ts +0 -6
  176. package/docs/components.d.ts +0 -17
  177. package/docs/deploy/design/api.md +0 -3
  178. package/docs/deploy/design/db.md +0 -3
  179. package/docs/deploy/design/index.md +0 -3
  180. package/docs/deploy/design/shell.md +0 -9
  181. package/docs/deploy/faq.md +0 -86
  182. package/docs/deploy/index.md +0 -9
  183. package/docs/deploy/local.md +0 -275
  184. package/docs/deploy/online-new.md +0 -610
  185. package/docs/deploy/online.md +0 -683
  186. package/docs/deploy/qiniu.md +0 -183
  187. package/docs/index.md +0 -40
  188. package/docs/introduction/about/code.md +0 -26
  189. package/docs/introduction/about/index.md +0 -33
  190. package/docs/introduction/feature/index.md +0 -3
  191. package/docs/plan/log.md +0 -346
  192. package/docs/plan/todo.md +0 -127
  193. package/docs/plan/wish.md +0 -29
  194. package/docs/praise/index.md +0 -45
  195. package/docs/public/robots.txt +0 -2
  196. package/docs/src/apis/ajax.ts +0 -66
  197. package/docs/src/apis/index.ts +0 -1
  198. package/docs/src/apis/modules/wish.ts +0 -20
  199. package/docs/src/components/Avatar.vue +0 -60
  200. package/docs/src/components/Home.vue +0 -85
  201. package/docs/src/components/Picture.vue +0 -13
  202. package/docs/src/components/Praise.vue +0 -52
  203. package/docs/src/components/WishBtn.vue +0 -98
  204. package/docs/src/components/WishPanel.vue +0 -170
  205. package/docs/src/components/callme/index.vue +0 -72
  206. package/docs/vite.config.ts +0 -42
  207. package/public/favicon.ico +0 -0
  208. package/public/logo.png +0 -0
  209. package/scripts/deploy/docs.mjs +0 -24
  210. package/scripts/deploy/prod.mjs +0 -24
  211. package/scripts/deploy/test.mjs +0 -26
  212. package/src/@types/ajax.d.ts +0 -5
  213. package/src/@types/api.d.ts +0 -305
  214. package/src/@types/lib.d.ts +0 -26
  215. package/src/@types/page.d.ts +0 -18
  216. package/src/App.vue +0 -36
  217. package/src/apis/ajax.ts +0 -72
  218. package/src/apis/index.ts +0 -20
  219. package/src/apis/modules/action.ts +0 -17
  220. package/src/apis/modules/category.ts +0 -20
  221. package/src/apis/modules/config.ts +0 -19
  222. package/src/apis/modules/file.ts +0 -150
  223. package/src/apis/modules/people.ts +0 -81
  224. package/src/apis/modules/public.ts +0 -49
  225. package/src/apis/modules/super/overview.ts +0 -56
  226. package/src/apis/modules/super/user.ts +0 -62
  227. package/src/apis/modules/task.ts +0 -67
  228. package/src/apis/modules/user.ts +0 -56
  229. package/src/apis/modules/wish.ts +0 -31
  230. package/src/assets/i/EasyPicker.png +0 -0
  231. package/src/assets/logo.png +0 -0
  232. package/src/assets/styles/app.css +0 -69
  233. package/src/components/HomeFooter/index.vue +0 -134
  234. package/src/components/HomeHeader/index.vue +0 -156
  235. package/src/components/InfosForm/index.vue +0 -73
  236. package/src/components/MessageList/index.vue +0 -155
  237. package/src/components/MessagePanel/index.vue +0 -46
  238. package/src/components/Praise/index.vue +0 -102
  239. package/src/components/QrCode.vue +0 -44
  240. package/src/components/linkDialog.vue +0 -104
  241. package/src/components/loginPanel.vue +0 -92
  242. package/src/constants/index.ts +0 -83
  243. package/src/env.d.ts +0 -8
  244. package/src/main.ts +0 -19
  245. package/src/pages/404/index.vue +0 -59
  246. package/src/pages/about/index.vue +0 -152
  247. package/src/pages/callme/index.vue +0 -155
  248. package/src/pages/dashboard/config/index.vue +0 -304
  249. package/src/pages/dashboard/files/index.vue +0 -1152
  250. package/src/pages/dashboard/index.vue +0 -335
  251. package/src/pages/dashboard/manage/config/index.vue +0 -97
  252. package/src/pages/dashboard/manage/index.vue +0 -105
  253. package/src/pages/dashboard/manage/overview/index.vue +0 -486
  254. package/src/pages/dashboard/manage/user/index.vue +0 -678
  255. package/src/pages/dashboard/manage/wish/index.vue +0 -257
  256. package/src/pages/dashboard/tasks/components/CategoryPanel.vue +0 -208
  257. package/src/pages/dashboard/tasks/components/CreateTask.vue +0 -93
  258. package/src/pages/dashboard/tasks/components/TaskInfo.vue +0 -129
  259. package/src/pages/dashboard/tasks/components/infoPanel/ddl.vue +0 -96
  260. package/src/pages/dashboard/tasks/components/infoPanel/file.vue +0 -175
  261. package/src/pages/dashboard/tasks/components/infoPanel/info.vue +0 -467
  262. package/src/pages/dashboard/tasks/components/infoPanel/people.vue +0 -566
  263. package/src/pages/dashboard/tasks/components/infoPanel/template.vue +0 -146
  264. package/src/pages/dashboard/tasks/components/infoPanel/tip.vue +0 -55
  265. package/src/pages/dashboard/tasks/components/infoPanel/tipInfo.vue +0 -196
  266. package/src/pages/dashboard/tasks/index.vue +0 -302
  267. package/src/pages/dashboard/tasks/public.ts +0 -32
  268. package/src/pages/disabled/index.vue +0 -47
  269. package/src/pages/feedback/index.vue +0 -5
  270. package/src/pages/home/index.vue +0 -72
  271. package/src/pages/login/index.vue +0 -270
  272. package/src/pages/register/index.vue +0 -211
  273. package/src/pages/reset/index.vue +0 -186
  274. package/src/pages/task/index.vue +0 -895
  275. package/src/pages/wish/index.vue +0 -152
  276. package/src/router/Interceptor/index.ts +0 -112
  277. package/src/router/index.ts +0 -13
  278. package/src/router/routes/index.ts +0 -197
  279. package/src/shims-vue.d.ts +0 -6
  280. package/src/store/index.ts +0 -17
  281. package/src/store/modules/category.ts +0 -44
  282. package/src/store/modules/public.ts +0 -27
  283. package/src/store/modules/task.ts +0 -55
  284. package/src/store/modules/user.ts +0 -57
  285. package/src/utils/elementUI.ts +0 -8
  286. package/src/utils/networkUtil.ts +0 -236
  287. package/src/utils/other.ts +0 -25
  288. package/src/utils/regExp.ts +0 -11
  289. package/src/utils/stringUtil.ts +0 -241
  290. package/tsconfig.json +0 -24
  291. package/vite.config.ts +0 -55
  292. /package/{docs/public → dist}/favicon.ico +0 -0
  293. /package/{docs/public → dist}/logo.png +0 -0
@@ -1,467 +0,0 @@
1
- <template>
2
- <div class="tc">
3
- <tip
4
- :imgs="[
5
- 'https://img.cdn.sugarat.top/mdImg/MTY1MDE4MzM3NjUyNg==650183376526',
6
- 'https://img.cdn.sugarat.top/mdImg/MTY1MTQ5NjU2ODcyNg==651496568726'
7
- ]"
8
- >上传文件必填表单信息</tip
9
- >
10
- <div class="auto-format">
11
- <span>文件自动重命名:</span>
12
- <el-switch
13
- style="display: block"
14
- v-model="autoRewrite"
15
- active-color="#13ce66"
16
- inactive-color="#ff4949"
17
- active-text="开"
18
- @change="handleChange"
19
- inactive-text="关"
20
- ></el-switch>
21
- </div>
22
- <div v-if="autoRewrite" style="margin-bottom: 10px">
23
- 预期格式:
24
- <span style="color: #409eff">{{ resFormat }}</span>
25
- </div>
26
- <div v-if="autoRewrite" style="margin-bottom: 10px">
27
- 分割符:
28
- <el-select
29
- @change="handleChangeSplitChar"
30
- v-model="formatData.splitChar"
31
- placeholder="分隔符"
32
- style="width: 60px"
33
- size="small"
34
- >
35
- <el-option v-for="v in splitCharList" :key="v" :label="v" :value="v" />
36
- </el-select>
37
- </div>
38
- <tip v-if="autoRewrite" style="color: red"
39
- >开启自动重命名后,重点关注文件名格式是否符合预期</tip
40
- >
41
- <div>
42
- 预览
43
- <el-switch
44
- v-model="openPreview"
45
- inline-prompt
46
- active-text="是"
47
- inactive-text="否"
48
- active-color="#13ce66"
49
- inactive-color="#ff4949"
50
- />
51
- </div>
52
- <!-- 必填信息区域 -->
53
- <div class="form-wrapper">
54
- <InfosForm v-if="openPreview" :infos="infos" :disabled="openPreview" />
55
- <el-form v-else label-width="100px">
56
- <el-form-item v-for="(item, idx) in infos" :key="idx">
57
- <template #label>
58
- <div class="flex fc fac">
59
- <div class="num-wrapper">
60
- <div>{{ idx + 1 }}</div>
61
- </div>
62
- <div class="form-item-type" :class="item.type">
63
- {{ getTypeDes(item.type) }}
64
- </div>
65
- </div>
66
- </template>
67
- <el-input
68
- placeholder="输入内容"
69
- v-model="item.text"
70
- :maxlength="maxInputLength"
71
- clearable
72
- show-word-limit
73
- >
74
- <template #append>
75
- <div class="form-item-wrapper">
76
- <el-icon
77
- :color="infos.length > 1 ? 'red' : 'grey'"
78
- @click="deleteInfo(idx)"
79
- >
80
- <CircleCloseFilled />
81
- </el-icon>
82
- <el-icon
83
- color="#000"
84
- style="margin-left: 6px"
85
- v-if="idx > 0"
86
- @click="moveInfoUp(idx)"
87
- >
88
- <Top />
89
- </el-icon>
90
- </div>
91
- </template>
92
- </el-input>
93
- <div
94
- v-if="item.type === 'radio' || item.type === 'select'"
95
- class="radio-list"
96
- >
97
- <el-input
98
- size="small"
99
- v-for="(v, idx) in item.children"
100
- :key="idx"
101
- placeholder="输入内容"
102
- v-model="v.text"
103
- :maxlength="maxInputLength"
104
- clearable
105
- show-word-limit
106
- >
107
- <template #append>
108
- <div class="form-item-wrapper">
109
- <el-icon
110
- :color="item.children.length > 2 ? 'red' : 'grey'"
111
- @click="deleteInfo(idx, item.children, 2)"
112
- >
113
- <CircleCloseFilled />
114
- </el-icon>
115
- <template v-if="idx + 1 === item.children.length">
116
- <el-icon
117
- style="margin-left: 10px"
118
- color="#67C23A"
119
- @click="addInfo(item.children, item.type)"
120
- >
121
- <CirclePlusFilled />
122
- </el-icon>
123
- </template>
124
- </div>
125
- </template>
126
- </el-input>
127
- </div>
128
- </el-form-item>
129
- </el-form>
130
- </div>
131
- <div class="p10" v-if="showAddInfo">
132
- <el-button
133
- size="small"
134
- type="primary"
135
- @click="
136
- () => {
137
- addInfo()
138
- }
139
- "
140
- round
141
- >添加一项</el-button
142
- >
143
- <el-select
144
- style="margin: 0 10px"
145
- size="small"
146
- v-model="selectType"
147
- placeholder="选择添加的类型"
148
- >
149
- <el-option
150
- v-for="(v, idx) in infoTypeList"
151
- :key="idx"
152
- :label="v.label"
153
- :value="v.value"
154
- />
155
- </el-select>
156
- <el-button type="primary" text @click="showHelp">提示❓</el-button>
157
- </div>
158
- <!-- 从其它任务导入 -->
159
- <el-button size="small" type="warning" @click="openImportPanel"
160
- >从其它任务导入</el-button
161
- >
162
- <div class="p10">
163
- <tip>支持从已有的任务直接导入表单信息</tip>
164
- <el-button type="success" @click="saveInfo" style="width: 200px"
165
- >保存</el-button
166
- >
167
- </div>
168
- <div style="color: red" v-if="needSave">有变动,请记得点击保存</div>
169
- <div class="info-panel">
170
- <el-dialog
171
- :fullscreen="isMobile"
172
- title="表单信息导入"
173
- v-model="showImportPanel"
174
- >
175
- <el-form
176
- :model="importPanelInfo"
177
- label-width="100px"
178
- label-position="right"
179
- >
180
- <el-form-item label="任务">
181
- <el-select
182
- filterable
183
- v-model="importPanelInfo.taskValue"
184
- placeholder="请选择"
185
- no-data-text="无可用任务"
186
- >
187
- <el-option
188
- v-for="t in importPanelInfo.taskList"
189
- :key="t.taskKey"
190
- :label="t.name"
191
- :value="t.taskKey"
192
- >
193
- </el-option>
194
- </el-select>
195
- </el-form-item>
196
- <tip>{{ importPanelInfo.taskValue ? '' : '无可用任务' }}</tip>
197
- </el-form>
198
- <template #footer>
199
- <span class="dialog-footer">
200
- <el-button @click="showImportPanel = false">取 消</el-button>
201
- <el-button
202
- :disabled="!importPanelInfo.taskValue"
203
- type="primary"
204
- @click="handleSaveImportInfo"
205
- >确 定
206
- </el-button>
207
- </span>
208
- </template>
209
- </el-dialog>
210
- </div>
211
- </div>
212
- </template>
213
- <script lang="ts" setup>
214
- import { ElMessage, ElMessageBox } from 'element-plus'
215
- import { computed, reactive, ref, watch, watchEffect } from 'vue'
216
- import {
217
- CircleCloseFilled,
218
- CirclePlusFilled,
219
- Top
220
- } from '@element-plus/icons-vue'
221
- import { useStore } from 'vuex'
222
- import { updateTaskInfo } from '../../public'
223
- import Tip from './tip.vue'
224
- import { TaskApi } from '@/apis'
225
- import InfosForm from '@/components/InfosForm/index.vue'
226
- import {
227
- getDefaultFormat,
228
- parseFileFormat,
229
- parseInfo
230
- } from '@/utils/stringUtil'
231
-
232
- const props = defineProps({
233
- rewrite: {
234
- type: Number,
235
- default: 0
236
- },
237
- info: {
238
- typs: String,
239
- default: '[]'
240
- },
241
- k: {
242
- type: String,
243
- default: ''
244
- },
245
- format: {
246
- type: String,
247
- default: '',
248
- required: false
249
- }
250
- })
251
- const formatData = reactive(getDefaultFormat())
252
- const openPreview = ref(false)
253
- const infoTypeList = reactive<{ label: string; value: InfoItemType }[]>([
254
- {
255
- label: '输入框',
256
- value: 'input'
257
- },
258
- {
259
- label: '固定内容',
260
- value: 'text'
261
- },
262
- {
263
- label: '单选框',
264
- value: 'radio'
265
- },
266
- {
267
- label: '下拉选择',
268
- value: 'select'
269
- }
270
- ])
271
- const getTypeDes = (type: string) =>
272
- infoTypeList.find((v) => v.value === type)?.label
273
-
274
- const selectType = ref<InfoItemType>('input')
275
-
276
- const maxInputLength = +import.meta.env.VITE_APP_INPUT_MAX_LENGTH || 10
277
-
278
- const autoRewrite = ref(false)
279
- const infos = reactive<InfoItem[]>([])
280
- const needSave = ref(false)
281
- // TODO:暂时限制表单的题目数为10,遇到case再修改
282
- const showAddInfo = computed(() => infos.length < 10 && !openPreview.value)
283
- // 负责清空
284
- watch(
285
- () => props.info,
286
- () => {
287
- infos.splice(0, infos.length)
288
- selectType.value = 'input'
289
- openPreview.value = false
290
- }
291
- )
292
- // 负责更新
293
- watchEffect(() => {
294
- infos.push(...parseInfo(props.info))
295
- needSave.value = false
296
- })
297
-
298
- // 预计格式
299
- const resFormat = computed(
300
- () => `${infos.map((v) => v.text).join(formatData.splitChar)}.后缀`
301
- )
302
- watchEffect(() => {
303
- autoRewrite.value = !!props.rewrite
304
- })
305
- const handleChange = (v: boolean) => {
306
- updateTaskInfo(props.k, {
307
- rewrite: +v
308
- })
309
- }
310
-
311
- const addInfo = (infoList?: InfoItem[], type?: InfoItemType) => {
312
- const list = infoList || infos
313
- const t = type || selectType.value
314
- const item: InfoItem = { text: `标题${list.length + 1}`, type: t, value: '' }
315
- if (t === 'radio' || t === 'select') {
316
- item.children = [{ text: '选项1' }, { text: '选项2' }]
317
- }
318
- list.push(item)
319
- needSave.value = true
320
- }
321
- const deleteInfo = (idx: number, infoList?: InfoItem[], minLen = 1) => {
322
- const list = infoList || infos
323
- if (list.length <= minLen) {
324
- return
325
- }
326
- list.splice(idx, 1)
327
- needSave.value = true
328
- }
329
- const judgeInfoForm = (items: InfoItem[]) =>
330
- items.every((v) => v.text.trim() && judgeInfoForm(v.children || []))
331
- const saveInfo = () => {
332
- if (!judgeInfoForm(infos)) {
333
- ElMessage.error('请完整填写表单信息')
334
- setTimeout(() => {
335
- ElMessage.warning('不能有空项')
336
- }, 100)
337
- return
338
- }
339
- updateTaskInfo(props.k, {
340
- info: JSON.stringify(
341
- infos.map((v) => {
342
- // 特殊处理固定值的内容
343
- if (v.type === 'text') {
344
- v.value = v.text
345
- }
346
- return v
347
- })
348
- )
349
- })
350
- needSave.value = false
351
- }
352
-
353
- const moveInfoUp = (idx: number) => {
354
- if (idx === 0) return
355
- const temp = infos[idx - 1]
356
- infos.splice(idx - 1, 1)
357
- infos.splice(idx, 0, temp)
358
- }
359
-
360
- const importPanelInfo = reactive({ taskList: [], taskValue: '' })
361
- const showImportPanel = ref(false)
362
- const openImportPanel = async () => {
363
- const taskKey = props.k
364
- // 通过任务Key获取可用任务列表,与概况信息
365
- const { data } = await TaskApi.getUsefulTemplate(taskKey)
366
- importPanelInfo.taskList = data
367
- importPanelInfo.taskValue = data[0]?.taskKey || ''
368
- showImportPanel.value = true
369
- }
370
-
371
- const handleSaveImportInfo = () => {
372
- const usefulInfo = importPanelInfo.taskList.find(
373
- (v) => v.taskKey === importPanelInfo.taskValue
374
- ).info
375
- infos.splice(0, infos.length)
376
- infos.push(...parseInfo(usefulInfo))
377
- showImportPanel.value = false
378
- needSave.value = true
379
- }
380
-
381
- const $store = useStore()
382
- const isMobile = computed(() => $store.getters['public/isMobile'])
383
- const importPanelFlexStyle = computed(() => (isMobile.value ? '0 0 auto' : 0.5))
384
-
385
- const showHelp = () => {
386
- ElMessageBox.alert(
387
- '<p>固定内容主要用于重命名中,固定的部分,如“活动名”,“班级名”</p><p>如要设置注意事项,请使用 <strong>批注</strong> 功能</p>',
388
- '注意事项',
389
- { dangerouslyUseHTMLString: true }
390
- )
391
- }
392
-
393
- const handleChangeSplitChar = () => {
394
- updateTaskInfo(props.k, {
395
- format: JSON.stringify(formatData)
396
- })
397
- }
398
- const splitCharList = reactive(['-', '+', '_'])
399
- watchEffect(() => {
400
- if (props.format !== null) {
401
- Object.assign(formatData, parseFileFormat(props.format))
402
- }
403
- })
404
- </script>
405
- <style scoped lang="scss">
406
- .auto-format {
407
- display: flex;
408
- justify-content: center;
409
- }
410
-
411
- :deep(.el-form-item__label) {
412
- display: flex;
413
- justify-content: center;
414
- align-items: flex-start;
415
- }
416
-
417
- .num-wrapper {
418
- display: flex;
419
- justify-content: center;
420
- align-items: center;
421
- width: 20px;
422
- height: 20px;
423
- border-radius: 50%;
424
- border: 2px solid #000;
425
- text-align: center;
426
- font-size: 14px;
427
- }
428
-
429
- .info-panel :deep(.el-form-item__label) {
430
- flex: v-bind(importPanelFlexStyle);
431
- justify-content: flex-end;
432
- }
433
-
434
- .form-wrapper {
435
- max-width: 380px;
436
- margin: 0 auto;
437
- }
438
-
439
- .form-wrapper :deep(.el-input-group__append) {
440
- background-color: transparent;
441
- border: none;
442
- box-shadow: none;
443
- padding: 0;
444
- }
445
-
446
- .form-item-wrapper {
447
- width: 50px;
448
- display: flex;
449
- justify-content: center;
450
- align-items: center;
451
- }
452
-
453
- .form-item-type {
454
- margin-left: 10px;
455
- font-size: 12px;
456
- width: 48px;
457
- text-align: left;
458
- }
459
-
460
- .radio-list {
461
- padding-top: 10px;
462
- }
463
-
464
- .radio-list :deep(.el-input) {
465
- width: 80%;
466
- }
467
- </style>