@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,566 +0,0 @@
1
- <template>
2
- <div class="tc info-panel">
3
- <tip
4
- :imgs="[
5
- 'https://img.cdn.sugarat.top/mdImg/MTY1MDE4MzEwOTEzOQ==650183109139',
6
- 'https://img.cdn.sugarat.top/mdImg/MTY1MTQ5NjY3MTUyMw==651496671523'
7
- ]"
8
- >只有名单里的成员,才可提交文件</tip
9
- >
10
- <el-button
11
- @click="updateLimitPeople(true)"
12
- v-if="!people"
13
- size="default"
14
- round
15
- type="success"
16
- >开启</el-button
17
- >
18
- <el-button
19
- @click="updateLimitPeople(false)"
20
- v-if="people"
21
- size="default"
22
- round
23
- type="danger"
24
- >关闭</el-button
25
- >
26
- <el-button
27
- @click="checkPeople"
28
- v-if="people"
29
- round
30
- size="default"
31
- type="primary"
32
- >查看提交情况</el-button
33
- >
34
- <div class="upload-people" v-if="people">
35
- <el-radio-group v-model="activeTab" size="small">
36
- <el-radio-button label="文件导入" />
37
- <el-radio-button label="任务导入" />
38
- <el-radio-button label="手动添加" />
39
- </el-radio-group>
40
- <div class="import-people-wrapper">
41
- <div v-show="activeTab === '文件导入'">
42
- <el-upload
43
- accept="text/plain"
44
- action=""
45
- class="upload-demo"
46
- ref="peopleUpload"
47
- :on-change="handleChangeFile"
48
- :on-exceed="handleExceedFile"
49
- :on-remove="clearFiles"
50
- :auto-upload="false"
51
- :limit="1"
52
- v-model:file-list="peopleFileList"
53
- >
54
- <template #trigger>
55
- <el-button size="small" type="primary">选择文件</el-button>
56
- </template>
57
- <el-button
58
- @click="submitUploadPeople"
59
- style="margin-left: 10px"
60
- size="small"
61
- type="success"
62
- :disabled="!peopleFileList.length"
63
- >确定上传</el-button
64
- >
65
- <template #tip>
66
- <div class="el-upload__tip">
67
- <tip
68
- :imgs="[
69
- 'https://img.cdn.sugarat.top/mdImg/MTY1MDE4Mjk2NjUxMA==650182966510'
70
- ]"
71
- >只能上传 .txt 文本文件,每行一个名字</tip
72
- >
73
- <tip>如名字有特殊字符,建议去除</tip>
74
- <tip>上传文件导入的方式,为追加导入,不会覆盖已存在数据</tip>
75
- </div>
76
- </template>
77
- </el-upload>
78
- </div>
79
- <div v-show="activeTab === '任务导入'">
80
- <!-- 从其它任务导入 -->
81
- <el-button size="small" type="success" @click="openImportPanel"
82
- >选择任务</el-button
83
- >
84
- <div class="p10">
85
- <tip>支持从已有的任务直接导入名单</tip>
86
- </div>
87
- </div>
88
- <div v-show="activeTab === '手动添加'">
89
- <div style="max-width: 300px; margin: 0 auto">
90
- <el-input
91
- :disabled="importStatus"
92
- v-model="userInputName"
93
- placeholder="请输入姓名"
94
- >
95
- <template #append>
96
- <el-button @click="handAddName"> 确定 </el-button>
97
- </template>
98
- </el-input>
99
- </div>
100
- <div class="p10">
101
- <tip>会自动判重,不会重复添加</tip>
102
- <tip>大量名单优先推荐使用文件导入</tip>
103
- </div>
104
- </div>
105
- </div>
106
- </div>
107
- <el-dialog :fullscreen="isMobile" title="提交情况" v-model="showPeopleList">
108
- <!-- 上部分的筛选菜单 -->
109
- <div class="nav">
110
- <div class="item">
111
- <el-button
112
- :disabled="peopleList.length === 0"
113
- type="success"
114
- size="default"
115
- @click="handleExportExcel"
116
- >导出记录</el-button
117
- >
118
- </div>
119
- <div class="item">
120
- <el-select
121
- size="default"
122
- v-model="selectSubmitStatus"
123
- placeholder="状态筛选"
124
- >
125
- <el-option label="全部" value="all" />
126
- <el-option label="已提交" :value="1" />
127
- <el-option label="未提交" :value="0" />
128
- </el-select>
129
- </div>
130
- <div class="item">
131
- <el-input
132
- size="default"
133
- placeholder="输入要查询的姓名"
134
- v-model="searchName"
135
- ></el-input>
136
- </div>
137
- <div class="item">
138
- <el-button type="primary" size="default" @click="handleCheckMore"
139
- >{{ checkMore ? '隐藏' : '显示' }}详细提交情况
140
- </el-button>
141
- </div>
142
- </div>
143
- <!-- 概况信息 -->
144
- <div class="tc p10">
145
- <span>共: {{ peopleSubmitData.length }} 条数据</span>,
146
- <span
147
- >已提交: {{ peopleSubmitData.filter((v) => v.status).length }}</span
148
- >,
149
- <span
150
- >未提交: {{ peopleSubmitData.filter((v) => !v.status).length }}</span
151
- >
152
- </div>
153
- <div class="tc p10">
154
- <tip>"提交次数" 用户实际的提交次数</tip>
155
- <tip>"现存数量" 还存在于服务器上的文件数 (不包含删除) --- 慢查询</tip>
156
- <tip>"提交数量" 用户实际提交的文件数 (不包含撤回) --- 慢查询</tip>
157
- </div>
158
- <!-- 数据部分 -->
159
- <el-table
160
- v-loading="isLoadingPeopleData"
161
- element-loading-text="Loading..."
162
- stripe
163
- border
164
- :data="peopleSubmitData"
165
- height="460px"
166
- >
167
- <el-table-column label="序号" width="60">
168
- <template #default="scope">
169
- <div style="text-align: center">{{ scope.$index + 1 }}</div>
170
- </template>
171
- </el-table-column>
172
- <el-table-column property="name" label="姓名"></el-table-column>
173
- <el-table-column label="提交状态" width="100">
174
- <template #default="scope">
175
- <span class="submit-ok" v-if="scope.row.status">已提交</span>
176
- <span class="submit-fail" v-else>未提交</span>
177
- </template>
178
- </el-table-column>
179
- <el-table-column
180
- property="count"
181
- label="提交次数"
182
- width="94"
183
- ></el-table-column>
184
- <el-table-column
185
- sortable
186
- property="lastDate"
187
- label="最后操作时间"
188
- width="120"
189
- ></el-table-column>
190
- <template v-if="checkMore">
191
- <el-table-column
192
- property="fileCount"
193
- label="现存数量"
194
- width="94"
195
- ></el-table-column>
196
- <el-table-column
197
- sortable
198
- property="submitCount"
199
- label="提交数量"
200
- width="120"
201
- ></el-table-column>
202
- </template>
203
- <el-table-column label="操作" width="100">
204
- <template #default="scope">
205
- <el-button
206
- @click="handleDeletePeople(scope.row)"
207
- type="primary"
208
- text
209
- size="small"
210
- >删除</el-button
211
- >
212
- </template>
213
- </el-table-column>
214
- </el-table>
215
- </el-dialog>
216
- <el-dialog
217
- :fullscreen="isMobile"
218
- title="人员列表导入"
219
- v-model="showImportPanel"
220
- >
221
- <el-form
222
- :model="importPanelInfo"
223
- label-width="100px"
224
- label-position="right"
225
- >
226
- <el-form-item label="任务">
227
- <el-select
228
- filterable
229
- v-model="importPanelInfo.taskValue"
230
- placeholder="请选择"
231
- no-data-text="无可用任务"
232
- >
233
- <el-option
234
- v-for="t in importPanelInfo.taskList"
235
- :key="t.taskKey"
236
- :label="t.name"
237
- :value="t.taskKey"
238
- >
239
- </el-option>
240
- </el-select>
241
- </el-form-item>
242
- <tip>{{ ImportTaskTipMsg }}</tip>
243
- <el-form-item label="任务">
244
- <el-radio-group v-model="importPanelInfo.type">
245
- <el-radio label="override">覆盖导入</el-radio>
246
- <el-radio label="add">追加导入</el-radio>
247
- </el-radio-group>
248
- </el-form-item>
249
- <tip>{{
250
- importPanelInfo.type === 'override'
251
- ? '“覆盖导入” 将会覆盖原来的数据'
252
- : '“追加导入” 将只会导入不存在数据'
253
- }}</tip>
254
- </el-form>
255
- <template #footer>
256
- <span class="dialog-footer">
257
- <el-button @click="showImportPanel = false">取 消</el-button>
258
- <el-button
259
- :disabled="!importPanelInfo.taskValue"
260
- type="primary"
261
- @click="handleSaveImportInfo"
262
- >确 定</el-button
263
- >
264
- </span>
265
- </template>
266
- </el-dialog>
267
- </div>
268
- </template>
269
- <script lang="ts" setup>
270
- import { ElMessage, ElMessageBox, UploadUserFile } from 'element-plus'
271
- import { computed, reactive, ref, watchEffect } from 'vue'
272
- import { useStore } from 'vuex'
273
- import { PeopleApi } from '@/apis'
274
- import { uploadFile, tableToExcel } from '@/utils/networkUtil'
275
- import { formatDate } from '@/utils/stringUtil'
276
- import { updateTaskInfo } from '../../public'
277
- import Tip from './tip.vue'
278
-
279
- const props = defineProps({
280
- value: {
281
- type: Number,
282
- defalut: 0
283
- },
284
- k: {
285
- type: String,
286
- default: ''
287
- },
288
- name: {
289
- type: String,
290
- default: ''
291
- }
292
- })
293
-
294
- const activeTab = ref('手动添加')
295
- const userInputName = ref('')
296
- const importStatus = ref(false)
297
-
298
- const handAddName = () => {
299
- if (!userInputName.value) {
300
- return
301
- }
302
- importStatus.value = true
303
- PeopleApi.addPeopleByUser(userInputName.value, props.k)
304
- .then((v) => {
305
- ElMessage.success(`添加 ${userInputName.value} 成功`)
306
- })
307
- .catch(() => {
308
- ElMessage.error(`${userInputName.value} 已存在`)
309
- })
310
- .finally(() => {
311
- importStatus.value = false
312
- userInputName.value = ''
313
- })
314
- }
315
- const checkMore = ref(false)
316
-
317
- const people = ref(0)
318
- watchEffect(() => {
319
- people.value = props.value as number
320
- })
321
- // 限制提交人员
322
- const updateLimitPeople = (limit: boolean) => {
323
- updateTaskInfo(props.k, {
324
- people: +limit
325
- })
326
- people.value = +limit
327
- }
328
-
329
- // 查看提交情况
330
- const showPeopleList = ref(false)
331
- const peopleList: any = reactive([])
332
- const selectSubmitStatus = ref('all')
333
- const searchName = ref('')
334
- const filterPeopleBySearchWord = computed(() => {
335
- if (!searchName.value) {
336
- return peopleList
337
- }
338
- return peopleList.filter((v) => v.name.includes(searchName.value))
339
- })
340
- const peopleSubmitData = computed(() => {
341
- if (selectSubmitStatus.value === 'all') {
342
- return filterPeopleBySearchWord.value
343
- }
344
- return filterPeopleBySearchWord.value.filter(
345
- (p) => p.status === selectSubmitStatus.value
346
- )
347
- })
348
- const isLoadingPeopleData = ref(false)
349
- const refreshSubmitData = () => {
350
- isLoadingPeopleData.value = true
351
- PeopleApi.getPeople(props.k, `${+checkMore.value}`).then((res) => {
352
- peopleList.splice(0, peopleList.length)
353
- peopleList.push(...res.data.people)
354
- peopleList.forEach((p) => {
355
- if (!p.status && p.count === 0) {
356
- p.lastDate = '暂无记录'
357
- } else {
358
- p.lastDate = formatDate(new Date(p.lastDate), 'yyyy-MM-dd hh:mm:ss')
359
- }
360
- })
361
- isLoadingPeopleData.value = false
362
- })
363
- }
364
- const handleCheckMore = () => {
365
- checkMore.value = !checkMore.value
366
- if (checkMore.value) {
367
- refreshSubmitData()
368
- }
369
- }
370
- const checkPeople = () => {
371
- showPeopleList.value = true
372
- // 默认不展示提交数量
373
- checkMore.value = false
374
- refreshSubmitData()
375
- }
376
- const handleDeletePeople = (item: any) => {
377
- ElMessageBox.confirm('确认删除此人员吗', '数据无价,请谨慎操作')
378
- .then(() => {
379
- PeopleApi.deletePeople(props.k, item.id).then(() => {
380
- ElMessage.success('删除成功')
381
- peopleList.splice(
382
- peopleList.findIndex((v) => v.id === item.id),
383
- 1
384
- )
385
- })
386
- })
387
- .catch(() => {
388
- ElMessage.info('取消删除')
389
- })
390
- }
391
- // 文件上传
392
- const peopleFileList = ref<UploadUserFile[]>([])
393
- const peopleUpload = ref()
394
- // 超出选择的文件个数
395
- const handleExceedFile = () => {
396
- ElMessage.error('只能选择一个文件,可删除后重新选择')
397
- }
398
- // 清空文件
399
- const clearFiles = () => {
400
- peopleFileList.value.splice(0, peopleFileList.value.length)
401
- peopleUpload.value.clearFiles()
402
- }
403
- // 开始上传
404
- const submitUploadPeople = () => {
405
- peopleFileList.value.forEach((file) => {
406
- // eslint-disable-next-line @typescript-eslint/ban-ts-comment
407
- // @ts-ignore
408
- uploadFile(
409
- file.raw,
410
- `${import.meta.env.VITE_APP_AXIOS_BASE_URL}public/upload`,
411
- {
412
- success: (e: any) => {
413
- const { name, type } = e.data
414
- PeopleApi.importPeople(props.k, name, type).then((res) => {
415
- const { success, fail } = res.data
416
- ElMessage.success(`导入完成:${success}成功,${fail.length}失败`)
417
- if (fail.length > 0) {
418
- setTimeout(() => {
419
- ElMessage.info('自动开始下载未成功导入名单')
420
- tableToExcel(
421
- ['未成功导入名单'],
422
- fail.map((v: string) => [v]),
423
- `${props.name}_导入失败名单_${formatDate(
424
- new Date(),
425
- 'yyyy年MM月日hh时mm分ss秒'
426
- )}.xlsx`
427
- )
428
- }, 1000)
429
- }
430
- clearFiles()
431
- })
432
- }
433
- }
434
- )
435
- })
436
- }
437
- // 添加文件
438
- const handleChangeFile = (file: any) => {
439
- if (file.raw.type !== 'text/plain') {
440
- ElMessage.warning({
441
- message: '只支持txt文件',
442
- zIndex: 4000
443
- })
444
- clearFiles()
445
- }
446
- }
447
- const handleExportExcel = () => {
448
- if (peopleSubmitData.value.length === 0) {
449
- ElMessage.warning('表格中没有可导出数据')
450
- return
451
- }
452
- const headers = [
453
- '姓名',
454
- '提交状态',
455
- '提交数量',
456
- '最后操作时间',
457
- ...(checkMore.value ? ['现存数量', '提交次数'] : [])
458
- ]
459
- const body = peopleSubmitData.value.map((v) => {
460
- const { name, status, lastDate, submitCount, fileCount, count } = v
461
- return [
462
- name,
463
- status ? '✔' : 'x',
464
- submitCount,
465
- status ? formatDate(new Date(lastDate)) : '',
466
- ...(checkMore.value ? [fileCount, count] : [])
467
- ]
468
- })
469
- tableToExcel(
470
- headers,
471
- body,
472
- `${props.name}_提交情况_${formatDate(
473
- new Date(),
474
- 'yyyy年MM月日hh时mm分ss秒'
475
- )}.xlsx`
476
- )
477
- ElMessage.success('导出成功')
478
- }
479
- const $store = useStore()
480
- const isMobile = computed(() => $store.getters['public/isMobile'])
481
- const importPanelInfo = reactive({
482
- taskList: [],
483
- type: 'override',
484
- taskValue: ''
485
- })
486
- const showImportPanel = ref(false)
487
- const openImportPanel = async () => {
488
- const taskKey = props.k
489
- // 通过任务Key获取可用任务列表,与概况信息
490
- const { data } = await PeopleApi.getUsefulTemplate(taskKey)
491
- importPanelInfo.taskList = data
492
- importPanelInfo.taskValue = data[0]?.taskKey || ''
493
- showImportPanel.value = true
494
- }
495
- const ImportTaskTipMsg = computed(() => {
496
- const { taskList, taskValue } = importPanelInfo
497
- const task = taskList.find((v) => v.taskKey === taskValue)
498
- if (!task) {
499
- return '无可用任务'
500
- }
501
- return `${task.count} 条数据`
502
- })
503
- const handleSaveImportInfo = () => {
504
- PeopleApi.importPeopleFromTpl(
505
- props.k,
506
- importPanelInfo.taskValue,
507
- importPanelInfo.type
508
- ).then((res) => {
509
- showImportPanel.value = false
510
- const { success, fail } = res.data
511
- ElMessage.success(`导入成功${success}条,失败${fail.length}条`)
512
-
513
- if (fail.length > 0) {
514
- setTimeout(() => {
515
- ElMessage.info('自动开始下载未成功导入名单')
516
- tableToExcel(
517
- ['未成功导入名单'],
518
- fail.map((v: string) => [v]),
519
- `${props.name}_导入失败名单_${formatDate(
520
- new Date(),
521
- 'yyyy年MM月日hh时mm分ss秒'
522
- )}.xlsx`
523
- )
524
- }, 1000)
525
- }
526
- })
527
- }
528
-
529
- const importPanelFlexStyle = computed(() => (isMobile.value ? '0 0 auto' : 0.5))
530
- </script>
531
- <style scoped>
532
- .upload-people {
533
- padding: 10px;
534
- }
535
-
536
- .import-people-wrapper {
537
- padding: 10px 0;
538
- }
539
- .submit-ok {
540
- color: #67c23a;
541
- }
542
-
543
- .submit-fail {
544
- color: #f56c6c;
545
- }
546
-
547
- .nav {
548
- display: flex;
549
- flex-wrap: wrap;
550
- justify-content: center;
551
- padding-bottom: 5px;
552
- }
553
-
554
- .nav .item {
555
- margin-left: 10px;
556
- margin-top: 5px;
557
- }
558
-
559
- .info-panel :deep(.el-form-item__label) {
560
- flex: v-bind(importPanelFlexStyle);
561
- }
562
-
563
- .info-panel :deep(.el-upload-list__item-name) {
564
- justify-content: center;
565
- }
566
- </style>
@@ -1,146 +0,0 @@
1
- <template>
2
- <div class="tc info-panel">
3
- <tip
4
- :imgs="[
5
- 'https://img.cdn.sugarat.top/mdImg/MTY1MDE4MjY3MjUxNw==650182672517'
6
- ]"
7
- >设置的模板文件,可供用户在提交页下载。</tip
8
- >
9
- <el-button
10
- v-if="template"
11
- :disabled="!template"
12
- @click="deleteTemplate"
13
- size="default"
14
- round
15
- type="danger"
16
- >删除</el-button
17
- >
18
- <div class="p10">{{ template || '尚未设置模板文件' }}</div>
19
- <div class="upload-file" v-if="!template">
20
- <el-upload
21
- action=""
22
- ref="elUpload"
23
- :on-exceed="handleExceedFile"
24
- :on-remove="clearFiles"
25
- :auto-upload="false"
26
- :limit="1"
27
- v-model:file-list="fileList"
28
- >
29
- <template #trigger>
30
- <el-button size="small" type="primary">选取文件</el-button>
31
- </template>
32
- <el-button
33
- @click="submitUploadPeople"
34
- style="margin-left: 10px"
35
- size="small"
36
- type="success"
37
- >设为模板</el-button
38
- >
39
- <template #tip>
40
- <div class="el-upload__tip">选择模板文件,然后点击上传</div>
41
- </template>
42
- </el-upload>
43
- </div>
44
- </div>
45
- </template>
46
- <script lang="ts">
47
- import { ElMessage, UploadUserFile } from 'element-plus'
48
- import { defineComponent, ref, watchEffect } from 'vue'
49
- import { FileApi } from '@/apis'
50
- import { qiniuUpload } from '@/utils/networkUtil'
51
- import { updateTaskInfo } from '../../public'
52
- import Tip from './tip.vue'
53
-
54
- export default defineComponent({
55
- name: 'templatePanel',
56
- props: {
57
- value: {
58
- type: String,
59
- default: ''
60
- },
61
- k: {
62
- type: String,
63
- default: ''
64
- }
65
- },
66
- setup(props) {
67
- const template = ref()
68
- watchEffect(() => {
69
- if (props.value) {
70
- template.value = props.value
71
- } else {
72
- template.value = ''
73
- }
74
- })
75
- const percentage = ref(0)
76
- // 删除模板
77
- const deleteTemplate = () => {
78
- if (template.value) {
79
- // 移除文件,避免空间被长时间占用
80
- updateTaskInfo(props.k, { template: '' })
81
- template.value = ''
82
- percentage.value = 0
83
- }
84
- }
85
- // 文件上传
86
- const fileList = ref<UploadUserFile[]>([])
87
- const elUpload = ref()
88
- // 超出选择的文件个数
89
- const handleExceedFile = () => {
90
- ElMessage.error('只能选择一个文件,可删除后重新选择')
91
- }
92
- // 清空文件
93
- const clearFiles = () => {
94
- elUpload.value.clearFiles()
95
- }
96
- // 开始上传
97
- const submitUploadPeople = () => {
98
- fileList.value.forEach((file) => {
99
- if (!props.k) {
100
- return
101
- }
102
- const { name } = file
103
- const key = `easypicker2/${props.k}_template/${name}`
104
- if (file.status === 'ready') {
105
- file.status = 'uploading'
106
- // qiniu上传
107
- FileApi.getUploadToken().then((res) => {
108
- qiniuUpload(res.data.token, file.raw, key, {
109
- success() {
110
- ElMessage.success('上传成功')
111
- updateTaskInfo(props.k, { template: name })
112
- // 清理上传完成的
113
- clearFiles()
114
- template.value = name
115
- file.status = 'success'
116
- // hash,key
117
- // console.log(data)
118
- },
119
- process(per: number) {
120
- file.percentage = ~~per
121
- }
122
- })
123
- })
124
- }
125
- })
126
- }
127
- return {
128
- template,
129
- deleteTemplate,
130
- fileList,
131
- handleExceedFile,
132
- clearFiles,
133
- submitUploadPeople,
134
- elUpload,
135
- percentage
136
- }
137
- },
138
- components: { Tip }
139
- })
140
- </script>
141
-
142
- <style lang="scss" scoped>
143
- .info-panel :deep(.el-upload-list__item-name) {
144
- justify-content: center;
145
- }
146
- </style>