@sugarat/easypicker2-client 2.5.0 → 2.6.1-beta.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.
- package/dist/assets/{data-analysis-13490516.js → data-analysis-b5271288.js} +2 -2
- package/dist/assets/{data-analysis-13490516.js.map → data-analysis-b5271288.js.map} +1 -1
- package/dist/assets/{data-analysis-legacy.f8612e65.js → data-analysis-legacy.6a4ab152.js} +2 -2
- package/dist/assets/{data-board-229a3bf5.js → data-board-fac5314d.js} +2 -2
- package/dist/assets/{data-board-229a3bf5.js.map → data-board-fac5314d.js.map} +1 -1
- package/dist/assets/{data-board-legacy.a60c4519.js → data-board-legacy.6c886296.js} +2 -2
- package/dist/assets/{el-date-picker-5a3e3d86.js → el-date-picker-7c194444.js} +2 -2
- package/dist/assets/{el-date-picker-5a3e3d86.js.map → el-date-picker-7c194444.js.map} +1 -1
- package/dist/assets/{el-date-picker-legacy.6d67764b.js → el-date-picker-legacy.749a72ef.js} +2 -2
- package/dist/assets/{el-dialog-463960e0.js → el-dialog-6d1c807a.js} +2 -2
- package/dist/assets/{el-dialog-463960e0.js.map → el-dialog-6d1c807a.js.map} +1 -1
- package/dist/assets/{el-dialog-legacy.0bcf48a4.js → el-dialog-legacy.5be8230f.js} +2 -2
- package/dist/assets/{el-dropdown-item-7c33f4fa.js → el-dropdown-item-958bfc71.js} +2 -2
- package/dist/assets/{el-dropdown-item-7c33f4fa.js.map → el-dropdown-item-958bfc71.js.map} +1 -1
- package/dist/assets/{el-dropdown-item-legacy.8625546e.js → el-dropdown-item-legacy.6457e2d9.js} +2 -2
- package/dist/assets/{el-form-item-f40006bf.js → el-form-item-14709389.js} +2 -2
- package/dist/assets/{el-form-item-f40006bf.js.map → el-form-item-14709389.js.map} +1 -1
- package/dist/assets/{el-form-item-legacy.d28db5d0.js → el-form-item-legacy.964d0dc1.js} +2 -2
- package/dist/assets/{el-loading-5d91bb6c.js → el-loading-2e8f5cae.js} +2 -2
- package/dist/assets/{el-loading-5d91bb6c.js.map → el-loading-2e8f5cae.js.map} +1 -1
- package/dist/assets/{el-loading-legacy.0f35210f.js → el-loading-legacy.8e1450cb.js} +2 -2
- package/dist/assets/{el-pagination-ffb99240.js → el-pagination-257e3c38.js} +2 -2
- package/dist/assets/{el-pagination-ffb99240.js.map → el-pagination-257e3c38.js.map} +1 -1
- package/dist/assets/{el-pagination-legacy.25b54e8d.js → el-pagination-legacy.20f976d7.js} +2 -2
- package/dist/assets/{el-progress-2fff98be.js → el-progress-d60eb9c6.js} +2 -2
- package/dist/assets/{el-progress-2fff98be.js.map → el-progress-d60eb9c6.js.map} +1 -1
- package/dist/assets/{el-progress-legacy.db8b5855.js → el-progress-legacy.d8c96dd6.js} +2 -2
- package/dist/assets/{el-select-7d894fd0.js → el-select-ca05d15a.js} +2 -2
- package/dist/assets/{el-select-7d894fd0.js.map → el-select-ca05d15a.js.map} +1 -1
- package/dist/assets/{el-select-legacy.ad6ded5a.js → el-select-legacy.96230556.js} +2 -2
- package/dist/assets/{el-switch-2eda0412.js → el-switch-a175c6ff.js} +2 -2
- package/dist/assets/{el-switch-2eda0412.js.map → el-switch-a175c6ff.js.map} +1 -1
- package/dist/assets/{el-switch-legacy.e17e7919.js → el-switch-legacy.c18bba6a.js} +2 -2
- package/dist/assets/{el-tab-pane-b3156067.js → el-tab-pane-499e4804.js} +2 -2
- package/dist/assets/{el-tab-pane-b3156067.js.map → el-tab-pane-499e4804.js.map} +1 -1
- package/dist/assets/{el-tab-pane-legacy.2cf21031.js → el-tab-pane-legacy.dfd3489b.js} +2 -2
- package/dist/assets/{el-table-column-22352e92.js → el-table-column-bccbd0ee.js} +2 -2
- package/dist/assets/{el-table-column-22352e92.js.map → el-table-column-bccbd0ee.js.map} +1 -1
- package/dist/assets/{el-table-column-legacy.fd665e2a.js → el-table-column-legacy.b083e5c9.js} +2 -2
- package/dist/assets/{index-c61deab7.js → index-04a69740.js} +2 -2
- package/dist/assets/index-04a69740.js.map +1 -0
- package/dist/assets/{index-6d7ac779.js → index-05e1d8e9.js} +2 -2
- package/dist/assets/{index-6d7ac779.js.map → index-05e1d8e9.js.map} +1 -1
- package/dist/assets/{index-b0a4c236.js → index-0aa5a09d.js} +2 -2
- package/dist/assets/{index-b0a4c236.js.map → index-0aa5a09d.js.map} +1 -1
- package/dist/assets/{index-f298d979.js → index-13570b16.js} +2 -2
- package/dist/assets/{index-f298d979.js.map → index-13570b16.js.map} +1 -1
- package/dist/assets/{index-f47a54b0.js → index-39c9824a.js} +2 -2
- package/dist/assets/{index-f47a54b0.js.map → index-39c9824a.js.map} +1 -1
- package/dist/assets/{index-c3a1cd43.js → index-3a3af29f.js} +2 -2
- package/dist/assets/{index-c3a1cd43.js.map → index-3a3af29f.js.map} +1 -1
- package/dist/assets/{index-d32645f3.js → index-4766f4e2.js} +2 -2
- package/dist/assets/{index-d32645f3.js.map → index-4766f4e2.js.map} +1 -1
- package/dist/assets/{index-c840d3aa.js → index-4f21c270.js} +2 -2
- package/dist/assets/{index-c840d3aa.js.map → index-4f21c270.js.map} +1 -1
- package/dist/assets/{index-f6ffb548.js → index-57c9ea07.js} +2 -2
- package/dist/assets/{index-f6ffb548.js.map → index-57c9ea07.js.map} +1 -1
- package/dist/assets/{index-bc1a6d96.js → index-930e03dd.js} +2 -2
- package/dist/assets/{index-bc1a6d96.js.map → index-930e03dd.js.map} +1 -1
- package/dist/assets/{index-17fa8fb7.js → index-9d8bb3cd.js} +2 -2
- package/dist/assets/{index-17fa8fb7.js.map → index-9d8bb3cd.js.map} +1 -1
- package/dist/assets/{index-75b8c91c.js → index-a880a055.js} +2 -2
- package/dist/assets/{index-75b8c91c.js.map → index-a880a055.js.map} +1 -1
- package/dist/assets/{index-5f3a9ae0.css → index-b6a0083a.css} +1 -1
- package/dist/assets/{index-34bd5929.js → index-c0ed4574.js} +2 -2
- package/dist/assets/{index-34bd5929.js.map → index-c0ed4574.js.map} +1 -1
- package/dist/assets/index-ce410282.js +19 -0
- package/dist/assets/index-ce410282.js.map +1 -0
- package/dist/assets/{index-ca90e8da.js → index-d14594d8.js} +2 -2
- package/dist/assets/{index-ca90e8da.js.map → index-d14594d8.js.map} +1 -1
- package/dist/assets/{index-8eff6b5a.js → index-d88fcb67.js} +2 -2
- package/dist/assets/{index-8eff6b5a.js.map → index-d88fcb67.js.map} +1 -1
- package/dist/assets/{index-6f4c911e.js → index-f2876d54.js} +2 -2
- package/dist/assets/{index-6f4c911e.js.map → index-f2876d54.js.map} +1 -1
- package/dist/assets/{index-afb7d164.js → index-f2af0aed.js} +2 -2
- package/dist/assets/{index-afb7d164.js.map → index-f2af0aed.js.map} +1 -1
- package/dist/assets/{index-98964915.js → index-f3cfa998.js} +2 -2
- package/dist/assets/{index-98964915.js.map → index-f3cfa998.js.map} +1 -1
- package/dist/assets/{index-b3774417.js → index-ff4fa185.js} +2 -2
- package/dist/assets/{index-b3774417.js.map → index-ff4fa185.js.map} +1 -1
- package/dist/assets/{index-legacy.6c7021b3.js → index-legacy.08acab8b.js} +2 -2
- package/dist/assets/{index-legacy.5d174bde.js → index-legacy.0fa09a50.js} +2 -2
- package/dist/assets/index-legacy.1bc3fb32.js +23 -0
- package/dist/assets/{index-legacy.e7464d3c.js → index-legacy.350597a4.js} +2 -2
- package/dist/assets/{index-legacy.1540c5bc.js → index-legacy.42c315a5.js} +2 -2
- package/dist/assets/{index-legacy.01d9320a.js → index-legacy.48503271.js} +2 -2
- package/dist/assets/{index-legacy.189f20a8.js → index-legacy.487dc8a3.js} +2 -2
- package/dist/assets/{index-legacy.d9854cf5.js → index-legacy.592d0ad8.js} +2 -2
- package/dist/assets/{index-legacy.45ec3501.js → index-legacy.764c62f4.js} +2 -2
- package/dist/assets/{index-legacy.7dae3131.js → index-legacy.7754567f.js} +2 -2
- package/dist/assets/{index-legacy.9f65dcb9.js → index-legacy.9bbb913d.js} +2 -2
- package/dist/assets/{index-legacy.4f956884.js → index-legacy.a30b5102.js} +2 -2
- package/dist/assets/{index-legacy.9dc57803.js → index-legacy.a755cc49.js} +2 -2
- package/dist/assets/{index-legacy.e6994f0a.js → index-legacy.af83663e.js} +2 -2
- package/dist/assets/{index-legacy.d32480a5.js → index-legacy.b7dbd470.js} +2 -2
- package/dist/assets/{index-legacy.9c4986d3.js → index-legacy.c2ac3287.js} +2 -2
- package/dist/assets/{index-legacy.08663170.js → index-legacy.c81edf2b.js} +2 -2
- package/dist/assets/{index-legacy.51740a44.js → index-legacy.d7412d7f.js} +2 -2
- package/dist/assets/{index-legacy.bd5a4368.js → index-legacy.e0df9935.js} +2 -2
- package/dist/assets/{index-legacy.1f2405e5.js → index-legacy.fcf53d84.js} +2 -2
- package/dist/assets/{isEqual-9c466456.js → isEqual-3a3c96c5.js} +2 -2
- package/dist/assets/{isEqual-9c466456.js.map → isEqual-3a3c96c5.js.map} +1 -1
- package/dist/assets/{isEqual-legacy.985bb619.js → isEqual-legacy.184e606c.js} +2 -2
- package/dist/assets/{refresh-6ae903c0.js → refresh-3ba5bdd3.js} +2 -2
- package/dist/assets/{refresh-6ae903c0.js.map → refresh-3ba5bdd3.js.map} +1 -1
- package/dist/assets/{refresh-legacy.8092415a.js → refresh-legacy.25fa8f66.js} +2 -2
- package/dist/assets/{tip-00ddf749.js → tip-e392c57d.js} +2 -2
- package/dist/assets/{tip-00ddf749.js.map → tip-e392c57d.js.map} +1 -1
- package/dist/assets/{tip-legacy.6e921091.js → tip-legacy.707697b5.js} +2 -2
- package/dist/assets/validator-001cb5f7.js +2 -0
- package/dist/assets/{validator-853854a1.js.map → validator-001cb5f7.js.map} +1 -1
- package/dist/assets/validator-legacy.9dc39c21.js +2 -0
- package/dist/index.html +3 -3
- package/package.json +8 -4
- package/dist/assets/index-62c7029f.js +0 -15
- package/dist/assets/index-62c7029f.js.map +0 -1
- package/dist/assets/index-c61deab7.js.map +0 -1
- package/dist/assets/index-legacy.978f90e1.js +0 -18
- package/dist/assets/validator-853854a1.js +0 -2
- package/dist/assets/validator-legacy.b34dfdfa.js +0 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index-b0a4c236.js","sources":["../../node_modules/.pnpm/@element-plus+icons-vue@1.1.4_vue@3.3.4/node_modules/@element-plus/icons-vue/dist/es/upload-filled.mjs","../../src/pages/task/index.vue"],"sourcesContent":["import { defineComponent, openBlock, createElementBlock, createElementVNode } from 'vue';\nimport _export_sfc from './_virtual/plugin-vue_export-helper.mjs';\n\nconst _sfc_main = defineComponent({\n name: \"UploadFilled\"\n});\nconst _hoisted_1 = {\n viewBox: \"0 0 1024 1024\",\n xmlns: \"http://www.w3.org/2000/svg\"\n};\nconst _hoisted_2 = /* @__PURE__ */ createElementVNode(\"path\", {\n fill: \"currentColor\",\n d: \"M544 864V672h128L512 480 352 672h128v192H320v-1.6c-5.376.32-10.496 1.6-16 1.6A240 240 0 0 1 64 624c0-123.136 93.12-223.488 212.608-237.248A239.808 239.808 0 0 1 512 192a239.872 239.872 0 0 1 235.456 194.752c119.488 13.76 212.48 114.112 212.48 237.248a240 240 0 0 1-240 240c-5.376 0-10.56-1.28-16-1.6v1.6H544z\"\n}, null, -1);\nconst _hoisted_3 = [\n _hoisted_2\n];\nfunction _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {\n return openBlock(), createElementBlock(\"svg\", _hoisted_1, _hoisted_3);\n}\nvar uploadFilled = /* @__PURE__ */ _export_sfc(_sfc_main, [[\"render\", _sfc_render]]);\n\nexport { uploadFilled as default };\n","<template>\n <div class=\"task-panel\">\n <div class=\"pc-nav\">\n <div class=\"nav\">\n <!-- LOGO -->\n <div class=\"logo\">\n <router-link to=\"/\">\n <img\n style=\"height: 40px; width: 170px\"\n src=\"https://img.cdn.sugarat.top/easypicker/EasyPicker.png\"\n alt=\"logo\"\n />\n </router-link>\n </div>\n <nav>\n <div\n class=\"nav-item\"\n v-for=\"(n, idx) in pcNavs\"\n :key=\"idx\"\n @click=\"handleNav(idx)\"\n >\n {{ n.title }}\n </div>\n </nav>\n </div>\n </div>\n <!-- 有效 -->\n <div\n v-loading=\"isLoadingData\"\n element-loading-text=\"Loading...\"\n class=\"panel tc\"\n v-if=\"k\"\n >\n <!-- 任务名 -->\n <h1 class=\"name\">\n {{ taskInfo.name }}\n </h1>\n <!-- 提示信息 -->\n <!-- 时间截止了也不再展示 -->\n <template v-if=\"tipData.text && (ddlStr ? !isOver : true)\">\n <el-divider>⚠️ 注意事项 ⚠️</el-divider>\n <Tip>\n <div class=\"tip-wrapper\">\n <p v-for=\"(t, i) in tipData.text.split('\\n')\" :key=\"i\">\n {{ t.replace(/\\s/g, ' ') }}\n </p>\n </div>\n </Tip>\n </template>\n <template v-if=\"imageList.length && (ddlStr ? !isOver : true)\">\n <el-image\n hide-on-click-modal\n v-for=\"(img, idx) in imageList\"\n :key=\"img.uid\"\n style=\"width: 100px; height: 100px; margin: 10px\"\n :src=\"img.url\"\n :zoom-rate=\"1.2\"\n :preview-src-list=\"imageList.map((v) => v.preview)\"\n :initial-index=\"idx\"\n fit=\"contain\"\n />\n </template>\n <!-- 截止时间字符串 -->\n <template v-if=\"ddlStr\">\n <el-divider>截止时间</el-divider>\n <h2 class=\"ddl\">\n {{ timeInfo }}\n </h2>\n <div v-if=\"isOver\">\n <el-empty description=\"已经结束啦!\"> </el-empty>\n </div>\n </template>\n <!-- 未设置ddl 或者 设置了还未结束 -->\n <div v-if=\"!ddlStr || !isOver\">\n <el-divider>必要信息填写</el-divider>\n <div class=\"infos\">\n <div v-show=\"taskMoreInfo.people\">\n <Tip>“{{ limitBindField }}”在参与名单里才能正常提交</Tip>\n </div>\n <div v-if=\"showValidForm\">\n <div class=\"infos\">\n <el-form\n ref=\"validModalRef\"\n :rules=\"validModalRules\"\n status-icon\n :model=\"validModal\"\n :disabled=\"disableForm\"\n label-position=\"top\"\n >\n <el-form-item prop=\"peopleName\" :label=\"limitBindField\">\n <el-input\n :maxlength=\"14\"\n clearable\n show-word-limit\n :placeholder=\"`请输入 ${limitBindField}`\"\n v-model=\"validModal.peopleName\"\n ></el-input>\n </el-form-item>\n </el-form>\n </div>\n </div>\n <InfosForm :infos=\"infos\" :disabled=\"disableForm\"></InfosForm>\n </div>\n <el-upload\n style=\"max-width: 400px; margin: 0 auto\"\n :drag=\"!isMobile\"\n action=\"\"\n ref=\"fileUpload\"\n :on-change=\"handleChangeFile\"\n :before-remove=\"handleRemoveFile\"\n :on-exceed=\"handleExceed\"\n :auto-upload=\"false\"\n multiple\n :limit=\"limitUploadCount\"\n v-model:file-list=\"fileList\"\n >\n <el-button v-if=\"isMobile\" type=\"primary\">选择文件</el-button>\n <template v-else>\n <el-icon class=\"el-icon--upload\">\n <upload-filled />\n </el-icon>\n <div class=\"el-upload__text\">\n 将文件拖于此处 or <em>直接选择文件</em>\n </div>\n </template>\n <template #tip>\n <div class=\"p10\" v-show=\"!!calculateMd5Count\">\n <tip\n >还有\n {{ calculateMd5Count }}\n 个文件正在生成校验信息,请稍等(1G通常需要20s)</tip\n >\n </div>\n </template>\n </el-upload>\n <div class=\"p10\">\n <el-button\n v-if=\"isWithdraw\"\n size=\"default\"\n @click=\"startWithdraw\"\n type=\"warning\"\n :disabled=\"!allowWithdraw || !!calculateMd5Count\"\n >一键撤回</el-button\n >\n <el-button\n v-else\n size=\"default\"\n @click=\"submitUpload\"\n type=\"success\"\n :disabled=\"!allowUpload || !!calculateMd5Count\"\n >提交文件</el-button\n >\n <el-button @click=\"checkSubmitStatus\" size=\"default\"\n >查询提交情况</el-button\n >\n </div>\n <!-- 提示信息 -->\n <div class=\"p10 option-tips\">\n <tip v-if=\"formatData.status && formatData.format.length\"\n >限制格式为:\n <span style=\"color: red\">{{\n formatData.format.join(', ')\n }}</span></tip\n >\n <tip v-if=\"formatData.size\"\n >限制文件大小不超过:\n <span style=\"color: red\">{{\n formatSize(formatData.size)\n }}</span></tip\n >\n <template v-if=\"isWithdraw\">\n <tip\n >① 须保证选择的文件与提交时的文件一致<br />\n ② 填写表单信息一致 <br />\n ③\n 完全一模一样的文件的提交记录(内容md5+命名),将会一次性全部撤回</tip\n >\n </template>\n <template v-else>\n <tip\n >① 选择完文件,点击 ”提交文件“即可 <br />\n ② <strong>选择大文件后需要等待一会儿才展示处理</strong>\n <template v-if=\"taskMoreInfo.template\"\n ><br />\n ③\n <strong>\n <el-button\n type=\"primary\"\n text\n style=\"color: #85ce61\"\n size=\"small\"\n @click=\"downloadTemplate\"\n >右下角可 “查看提交示例”\n </el-button>\n </strong></template\n >\n </tip>\n </template>\n </div>\n <div class=\"withdraw\">\n <el-button\n type=\"primary\"\n text\n style=\"color: #85ce61\"\n v-if=\"taskMoreInfo.template\"\n size=\"small\"\n @click=\"downloadTemplate\"\n >查看提交示例</el-button\n >\n <el-button\n v-if=\"isWithdraw\"\n @click=\"isWithdraw = false\"\n size=\"small\"\n type=\"primary\"\n text\n >正常提交</el-button\n >\n <el-button\n v-else\n size=\"small\"\n @click=\"isWithdraw = true\"\n type=\"primary\"\n text\n >我要撤回</el-button\n >\n </div>\n </div>\n </div>\n <!-- 无效任务 -->\n <div class=\"panel tc\" v-else>\n <h1 class=\"name\">\n {{ taskInfo.name }}\n </h1>\n </div>\n <LinkDialog\n v-model:value=\"showLinkModel\"\n title=\"示例文件下载链接\"\n :link=\"templateLink\"\n ></LinkDialog>\n <div style=\"padding-top: 20px\">\n <home-footer type=\"task\"></home-footer>\n </div>\n </div>\n</template>\n<script lang=\"ts\" setup>\nimport { ElMessage, ElMessageBox } from 'element-plus'\nimport type { UploadUserFile, UploadInstance, FormInstance } from 'element-plus'\nimport { computed, onMounted, onUnmounted, reactive, ref, watch } from 'vue'\nimport { useRoute, useRouter } from 'vue-router'\nimport HomeFooter from '@components/HomeFooter/index.vue'\nimport LinkDialog from '@components/linkDialog.vue'\nimport { UploadFilled } from '@element-plus/icons-vue'\nimport { useStore } from 'vuex'\nimport {\n formatDate,\n formatSize,\n getFileMd5Hash,\n getFileSuffix,\n normalizeFileName,\n parseFileFormat,\n parseInfo\n} from '@/utils/stringUtil'\nimport { downLoadByUrl, qiniuUpload } from '@/utils/networkUtil'\nimport { FileApi, PeopleApi, PublicApi, TaskApi } from '@/apis'\nimport Tip from '../dashboard/tasks/components/infoPanel/tip.vue'\nimport InfosForm from '@/components/InfosForm/index.vue'\n\nconst $store = useStore()\nconst isMobile = computed(() => $store.getters['public/isMobile'])\n// 顶部导航\nconst $router = useRouter()\nconst $route = useRoute()\nconst pcNavs = reactive([\n {\n title: '我也要收集',\n path: 'https://docs.ep.sugarat.top/'\n }\n])\nconst handleNav = (idx: number) => {\n if (pcNavs[idx].path.startsWith('http')) {\n window.location.href = pcNavs[idx].path\n return\n }\n $router.push({\n path: pcNavs[idx].path\n })\n}\n\n// 任务基本信息展示\nconst taskInfo = reactive<TaskApiTypes.TaskInfo>({\n name: '',\n category: ''\n})\nconst taskMoreInfo = reactive<Partial<TaskApiTypes.TaskInfo>>({\n bindField: ''\n})\nconst formatData = computed(() => parseFileFormat(taskMoreInfo.format))\nconst k = ref('')\n\n// 用于展示截止日期\nconst waitTime = ref(0)\n// 判断是否结束\nconst isOver = computed(() => waitTime.value <= 0)\nconst waitTimeStr = computed(() => {\n let seconds = ~~(waitTime.value / 1000)\n let hour = ~~(seconds / (60 * 60))\n const day = ~~(hour / 24)\n hour %= 24\n const minute = ~~((seconds % 3600) / 60)\n seconds %= 60\n return `剩余${day}天${hour}时${minute}分${seconds}秒`\n})\nconst refreshWaitTime = (loop = true) => {\n if (taskMoreInfo?.ddl) {\n const date = new Date(taskMoreInfo.ddl)\n waitTime.value = date.getTime() - Date.now()\n } else {\n waitTime.value = 0\n }\n if (loop) {\n setTimeout(() => {\n refreshWaitTime()\n }, 1000)\n }\n}\nconst ddlStr = computed(() => {\n if (taskMoreInfo?.ddl) {\n const date = new Date(taskMoreInfo.ddl)\n return formatDate(date)\n }\n return ''\n})\n\n// 必填信息\nconst infos = reactive<InfoItem[]>([])\n\n// 文件上传部分\n\n// 文件上传\nconst fileList = ref<(UploadUserFile & { md5: string; subscription: any })[]>(\n []\n)\nconst fileUpload = ref<UploadInstance>()\nconst disableForm = computed(\n () => fileList.value.filter((item) => item.status === 'uploading').length > 0\n)\nconst handleRemoveFile: any = (file: any) => {\n if (file.status === 'uploading' || file.status === 'success') {\n return ElMessageBox.confirm(\n '不影响已经上传成功的,正在上传的将取消上传',\n '确定从列表移除文件吗?'\n )\n .then(() => {\n if (file.status === 'uploading') {\n ElMessage.info(`取消${file.name}的上传`)\n // 取消上传\n file.subscription.unsubscribe() // 取消上传\n }\n return true\n })\n .catch(() => false)\n }\n return true\n}\n\n// 校验表单填写\nconst isWriteFinish = computed(() => infos.every((item) => item.value))\n// 提交文件\n\nconst limitBindField = computed(() => {\n return taskMoreInfo.bindField.trim() || '姓名'\n})\n\n// 身份核验表单\nconst isSameFieldName = computed(() =>\n infos.find((v) => v.text === limitBindField.value)\n)\nconst showValidForm = computed(\n () => taskMoreInfo.people && !isSameFieldName.value\n)\nconst validModal = reactive({\n peopleName: ''\n})\n\nconst validatePeopleName = (rule: any, value: any, callback: any) => {\n if (!value) {\n const message = `请输入${limitBindField.value}`\n callback(new Error(message))\n ElMessage.error(message)\n return\n }\n // 异步校验\n PeopleApi.checkPeopleIsExist(k.value, value).then((res) => {\n if (!res.data.exist) {\n ElMessage.error('你不在此次提交名单中,如有疑问请联系管理员')\n }\n callback(\n res.data.exist\n ? undefined\n : new Error('你不在此次提交名单中,如有疑问请联系管理员')\n )\n })\n}\n\nconst validModalRef = ref<FormInstance>()\nconst validModalRules = reactive({\n peopleName: [{ validator: validatePeopleName, trigger: 'blur' }]\n})\nconst confirmPeopleName = () => {\n // 处理表单必填项含有 limitBindField 的情况\n if (isSameFieldName.value) {\n const value = infos.find((v) => v.text === limitBindField.value)?.value\n validModal.peopleName = value || ''\n return new Promise((resolve) => {\n validatePeopleName(null, value, resolve)\n }).then((v) => !v)\n }\n return validModalRef.value.validate((isValid: boolean) => isValid)\n}\n\nconst startUpload = () => {\n const uploadFiles = fileList.value\n for (const file of uploadFiles) {\n if (!file.md5) {\n ElMessage.info(\n `文件(${file.name})的唯一指纹还在计算中,再等待一会儿再点击上传`\n )\n setTimeout(() => {\n ElMessage.info('文件越大计算时间越长(1G通常需要20s)')\n }, 100)\n } else if (file.status === 'ready') {\n // 开始上传\n file.status = 'uploading'\n let { name } = file\n const originName = name\n // 如果开启了自动重命名,这里重命名一下\n if (taskMoreInfo.rewrite) {\n name =\n infos.map((v) => v.value).join(formatData.value.splitChar || '-') +\n getFileSuffix(name)\n }\n // 替换不合法的字符\n name = normalizeFileName(name)\n const key = `easypicker2/${k.value}/${file.md5}/${name}`\n\n FileApi.getUploadToken().then((res) => {\n qiniuUpload(res.data.token, file.raw, key, {\n success(data: any) {\n const { fsize } = data\n FileApi.addFile({\n originName,\n name,\n taskKey: k.value,\n taskName: taskInfo.name,\n size: fsize,\n hash: file.md5,\n info: JSON.stringify(infos),\n people: validModal.peopleName\n }).then(() => {\n file.status = 'success'\n ElMessage.success(`文件:${file.name}提交成功`)\n if (taskMoreInfo.people) {\n // 无感知更新一下\n PeopleApi.updatePeopleStatus(\n k.value,\n name,\n validModal.peopleName,\n file.md5\n )\n }\n })\n },\n process(per: number, data: any, subscription: any) {\n file.percentage = Math.floor(per)\n // 挂载取消上传的方法\n file.subscription = subscription\n }\n })\n })\n }\n }\n}\n\nconst submitUpload = async () => {\n if (!isWriteFinish.value) {\n ElMessage.warning('请先完成必要信息的填写')\n return\n }\n\n if (taskMoreInfo.people) {\n const isValid = await confirmPeopleName()\n if (!isValid) {\n return\n }\n }\n startUpload()\n}\n\n// 是否允许上传\nconst allowUpload = computed(() => {\n for (const file of fileList.value) {\n if (file.status === 'ready') {\n return true\n }\n }\n return false\n})\n\n// 是否允许撤回\nconst allowWithdraw = computed(() => {\n for (const file of fileList.value) {\n if (['success', 'ready'].includes(file.status)) {\n return true\n }\n }\n return false\n})\n\n// 添加文件\n// 正在计算MD5值的文件个数\nconst calculateMd5Count = ref(0)\nconst handleChangeFile = (file: any) => {\n // 校验文件后缀名\n const { name } = file\n if (formatData.value.format.length && formatData.value.status) {\n const suffix = getFileSuffix(name)\n if (!formatData.value.format.find((v) => suffix.endsWith(v))) {\n ElMessage.error(`${name} 格式不符合要球`)\n fileUpload.value.handleRemove(file)\n return\n }\n }\n\n // 校验文件大小\n if (formatData.value.size && formatData.value.size < file.size) {\n ElMessage.error(`${name} 大小${formatSize(file.size)} 不符合要求`)\n fileUpload.value.handleRemove(file)\n return\n }\n\n calculateMd5Count.value += 1\n // 计算md5 hash\n getFileMd5Hash(file.raw).then((str) => {\n file.md5 = str\n calculateMd5Count.value -= 1\n })\n}\n\nconst limitUploadCount = computed(() => formatData.value.limit || 10)\nconst handleExceed = () => {\n ElMessage.warning(\n `一次提交最多只能选择${limitUploadCount.value}个文件,请移除已经上传成功的或刷新页面`\n )\n}\nconst showLinkModel = ref(false)\nconst templateLink = ref('')\nconst runWithdraw = () => {\n const uploadFiles = fileList.value\n for (const file of uploadFiles) {\n if (!file.md5) {\n ElMessage.info(\n `文件(${file.name})的唯一指纹还在计算中,再等待一会儿再点击上传`\n )\n setTimeout(() => {\n ElMessage.info('文件越大计算时间越长(1G通常需要20s)')\n }, 100)\n } else if (!['fail', 'uploading'].includes(file.status)) {\n // 准备开始撤回\n let { name } = file\n\n // 如果开启了自动重命名,这里重命名一下\n if (taskMoreInfo.rewrite) {\n name =\n infos.map((v) => v.value).join(formatData.value.splitChar || '-') +\n getFileSuffix(name)\n }\n\n FileApi.withdrawFile({\n taskKey: k.value,\n taskName: taskInfo.name,\n filename: name,\n hash: file.md5,\n info: JSON.stringify(infos),\n peopleName: validModal.peopleName\n })\n .then(() => {\n ElMessage.success(`文件:${file.name}撤回成功`)\n file.name += ' - (已撤回 ✅ )'\n file.status = 'fail'\n })\n .catch(() => {\n ElMessage.error(`撤回失败: 没有文件:${file.name}对应提交记录`)\n })\n }\n }\n}\nconst downloadTemplate = () => {\n FileApi.getTemplateUrl(taskMoreInfo.template, k.value)\n .then((res) => {\n showLinkModel.value = true\n const { link } = res.data\n templateLink.value = link\n downLoadByUrl(link, taskMoreInfo.template)\n })\n .catch(() => {\n ElMessage.warning('文件已从服务器上移除,请联系管理员重新上传')\n })\n}\n\n// 撤回相关逻辑\nconst isWithdraw = ref(false)\nconst startWithdraw = async () => {\n // 校验表单填写\n if (!isWriteFinish.value) {\n ElMessage.warning('请先完成必要信息的填写')\n return\n }\n if (taskMoreInfo.people) {\n const isValid = await confirmPeopleName()\n if (!isValid) {\n return\n }\n }\n runWithdraw()\n}\n\n// 查询提交情况\nconst checkSubmitStatus = async () => {\n // 校验表单填写\n if (!isWriteFinish.value) {\n ElMessage.warning('请先完成必要信息的填写,需和提交时信息完全一致')\n return\n }\n // 卡控人员限制\n if (taskMoreInfo.people) {\n const isValid = await confirmPeopleName()\n if (!isValid) {\n return\n }\n }\n FileApi.checkSubmitStatus(k.value, infos, validModal.peopleName).then(\n (res) => {\n if (res.data.isSubmit) {\n ElMessage.success('已经提交过啦')\n } else {\n ElMessage.warning('还未提交过哟')\n }\n }\n )\n}\nconst isLoadingData = ref(false)\nconst readyRefresh = ref(false)\nconst isEqualInfos = (a: InfoItem[] = [], b: InfoItem[] = []) => {\n if (a.length !== b.length) {\n return false\n }\n return a.every(\n (v, i) =>\n v.type === b[i].type &&\n v.text === b[i].text &&\n isEqualInfos(v.children, b[i].children)\n )\n}\nconst refreshTaskMoreInfo = (hot = false) => {\n TaskApi.getTaskMoreInfo(k.value).then((res) => {\n Object.assign(taskMoreInfo, res.data)\n if (!isEqualInfos(infos, parseInfo(taskMoreInfo.info))) {\n infos.splice(0, infos.length)\n infos.push(...parseInfo(taskMoreInfo.info))\n if (hot) {\n ElMessage.success('表单信息有更新')\n }\n }\n refreshWaitTime(false)\n isLoadingData.value = false\n })\n}\nconst handleBlur = () => {\n readyRefresh.value = true\n}\nconst handleFocus = () => {\n if (readyRefresh.value && !disableForm.value) {\n readyRefresh.value = false\n refreshTaskMoreInfo(true)\n }\n}\n\n// 展示的时间提示文案\nconst timeInfo = computed(() => {\n if (!isOver.value) {\n return ddlStr.value + waitTimeStr.value\n }\n return ddlStr.value\n})\n\n// tipImage\nconst tipData = reactive<{\n text: string\n imgs: {\n uid: number\n name: string\n }[]\n}>({\n text: '',\n imgs: []\n})\nconst imageList = ref<\n { name: string; uid: number; preview?: string; url: string }[]\n>([])\n\nwatch(\n () => taskMoreInfo.tip,\n () => {\n // 初始化\n try {\n const parseData = JSON.parse(taskMoreInfo.tip)\n tipData.imgs = parseData.imgs\n tipData.text = parseData.text || ''\n imageList.value = tipData.imgs.map((v) => {\n return {\n ...v,\n url: 'https://img.cdn.sugarat.top/mdImg/MTY3NzkxMDI1NTU1Nw==20140524124237518.gif'\n }\n })\n if (imageList.value.length) {\n // 异步填充url\n PublicApi.getTipImageUrl(\n k.value,\n imageList.value.map((v) => ({\n uid: v.uid,\n name: v.name\n }))\n ).then((v) => {\n v.data.forEach((url, idx) => {\n imageList.value[idx].url = url.cover\n Object.assign(imageList.value[idx], {\n preview: url.preview\n })\n })\n })\n }\n } catch {\n tipData.text = ''\n tipData.imgs = []\n imageList.value = []\n }\n }\n)\nonMounted(() => {\n k.value = $route.params.key as string\n if (k.value) {\n isLoadingData.value = true\n TaskApi.getTaskInfo(k.value)\n .then((res) => {\n Object.assign(taskInfo, res.data)\n })\n .catch((err) => {\n if (err.code === 4001) {\n ElMessage.error('任务不存在')\n k.value = ''\n taskInfo.name = '任务不存在'\n }\n })\n refreshTaskMoreInfo()\n refreshWaitTime()\n }\n // 页面隐藏\n window.addEventListener('blur', handleBlur)\n\n // 页面展示\n window.addEventListener('focus', handleFocus)\n})\n\nonUnmounted(() => {\n // 页面隐藏\n window.removeEventListener('blur', handleBlur)\n // 页面展示\n window.removeEventListener('focus', handleFocus)\n})\n</script>\n<style scoped lang=\"scss\">\n.task-panel :deep(ul.el-upload-list) {\n border: 1px dashed #d4d4d4;\n padding: 10px;\n\n &::before {\n content: '此处展示选择文件列表';\n font-size: 12px;\n position: relative;\n bottom: 4px;\n }\n}\n\n.task-panel :deep(.el-upload-list__item-name) {\n display: block;\n overflow: hidden;\n max-width: 290px;\n text-overflow: ellipsis;\n word-break: keep-all;\n}\n\n.task-panel :deep(.is-ready .el-icon--close) {\n display: block;\n color: black;\n}\n\n.task-panel {\n background-color: #f3f6f8;\n padding-bottom: 1rem;\n position: relative;\n}\n\n.pc-nav {\n background-color: #fff;\n display: flex;\n padding: 10px;\n justify-content: space-between;\n align-items: center;\n\n .exit {\n cursor: pointer;\n }\n\n .nav {\n display: flex;\n\n nav {\n display: flex;\n align-items: center;\n\n .nav-item {\n font-size: 1rem;\n color: #595959;\n padding: 10px;\n cursor: pointer;\n\n &.active {\n color: #409eff !important;\n font-weight: 600;\n }\n }\n }\n\n .exit {\n color: #595959;\n }\n }\n\n .logo {\n width: 180px;\n margin: 0 10px;\n\n img {\n height: 40px;\n }\n }\n}\n\n.panel {\n max-width: 1024px;\n padding: 1em;\n background-color: #fff;\n margin: 10px auto;\n box-sizing: border-box;\n box-shadow: 0 2px 12px 0 rgb(0 0 0 / 10%);\n border-radius: 4px;\n\n .name {\n text-align: center;\n }\n\n .ddl {\n margin-top: 10px;\n color: #919191;\n font-size: 14px;\n }\n\n .infos {\n max-width: 460px;\n margin: auto;\n overflow: hidden;\n :deep(div.el-form-item > label) {\n font-weight: bold;\n &::before {\n content: '* ';\n color: red;\n }\n }\n }\n}\n\n.withdraw {\n text-align: right;\n}\n\n.tip-wrapper {\n line-height: 20px;\n text-align: left;\n word-break: break-all;\n // max-height: 100px;\n overflow: hidden;\n padding: 0 20px;\n color: #e6a23c;\n max-width: 320px;\n font-size: 14px;\n}\n</style>\n"],"names":["_sfc_main","defineComponent","_hoisted_1","_hoisted_2","createElementVNode","_hoisted_3","_sfc_render","_ctx","_cache","$props","$setup","$data","$options","openBlock","createElementBlock","uploadFilled","_export_sfc","$store","useStore","isMobile","computed","$router","useRouter","$route","useRoute","pcNavs","reactive","handleNav","idx","taskInfo","taskMoreInfo","formatData","parseFileFormat","k","ref","waitTime","isOver","waitTimeStr","seconds","hour","day","minute","refreshWaitTime","loop","date","ddlStr","formatDate","infos","fileList","fileUpload","disableForm","item","handleRemoveFile","file","ElMessageBox","ElMessage","isWriteFinish","limitBindField","isSameFieldName","v","showValidForm","validModal","validatePeopleName","rule","value","callback","message","PeopleApi","res","validModalRef","validModalRules","confirmPeopleName","_a","resolve","isValid","startUpload","uploadFiles","name","originName","getFileSuffix","normalizeFileName","key","FileApi","qiniuUpload","data","fsize","per","subscription","submitUpload","allowUpload","allowWithdraw","calculateMd5Count","handleChangeFile","suffix","formatSize","getFileMd5Hash","str","limitUploadCount","handleExceed","showLinkModel","templateLink","runWithdraw","downloadTemplate","link","downLoadByUrl","isWithdraw","startWithdraw","checkSubmitStatus","isLoadingData","readyRefresh","isEqualInfos","a","b","i","refreshTaskMoreInfo","hot","TaskApi","parseInfo","handleBlur","handleFocus","timeInfo","tipData","imageList","watch","parseData","PublicApi","url","e","onMounted","err","onUnmounted"],"mappings":"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","x_google_ignoreList":[0]}
|
|
1
|
+
{"version":3,"file":"index-0aa5a09d.js","sources":["../../node_modules/.pnpm/@element-plus+icons-vue@1.1.4_vue@3.3.4/node_modules/@element-plus/icons-vue/dist/es/upload-filled.mjs","../../src/pages/task/index.vue"],"sourcesContent":["import { defineComponent, openBlock, createElementBlock, createElementVNode } from 'vue';\nimport _export_sfc from './_virtual/plugin-vue_export-helper.mjs';\n\nconst _sfc_main = defineComponent({\n name: \"UploadFilled\"\n});\nconst _hoisted_1 = {\n viewBox: \"0 0 1024 1024\",\n xmlns: \"http://www.w3.org/2000/svg\"\n};\nconst _hoisted_2 = /* @__PURE__ */ createElementVNode(\"path\", {\n fill: \"currentColor\",\n d: \"M544 864V672h128L512 480 352 672h128v192H320v-1.6c-5.376.32-10.496 1.6-16 1.6A240 240 0 0 1 64 624c0-123.136 93.12-223.488 212.608-237.248A239.808 239.808 0 0 1 512 192a239.872 239.872 0 0 1 235.456 194.752c119.488 13.76 212.48 114.112 212.48 237.248a240 240 0 0 1-240 240c-5.376 0-10.56-1.28-16-1.6v1.6H544z\"\n}, null, -1);\nconst _hoisted_3 = [\n _hoisted_2\n];\nfunction _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {\n return openBlock(), createElementBlock(\"svg\", _hoisted_1, _hoisted_3);\n}\nvar uploadFilled = /* @__PURE__ */ _export_sfc(_sfc_main, [[\"render\", _sfc_render]]);\n\nexport { uploadFilled as default };\n","<template>\n <div class=\"task-panel\">\n <div class=\"pc-nav\">\n <div class=\"nav\">\n <!-- LOGO -->\n <div class=\"logo\">\n <router-link to=\"/\">\n <img\n style=\"height: 40px; width: 170px\"\n src=\"https://img.cdn.sugarat.top/easypicker/EasyPicker.png\"\n alt=\"logo\"\n />\n </router-link>\n </div>\n <nav>\n <div\n class=\"nav-item\"\n v-for=\"(n, idx) in pcNavs\"\n :key=\"idx\"\n @click=\"handleNav(idx)\"\n >\n {{ n.title }}\n </div>\n </nav>\n </div>\n </div>\n <!-- 有效 -->\n <div\n v-loading=\"isLoadingData\"\n element-loading-text=\"Loading...\"\n class=\"panel tc\"\n v-if=\"k\"\n >\n <!-- 任务名 -->\n <h1 class=\"name\">\n {{ taskInfo.name }}\n </h1>\n <!-- 提示信息 -->\n <!-- 时间截止了也不再展示 -->\n <template v-if=\"tipData.text && (ddlStr ? !isOver : true)\">\n <el-divider>⚠️ 注意事项 ⚠️</el-divider>\n <Tip>\n <div class=\"tip-wrapper\">\n <p v-for=\"(t, i) in tipData.text.split('\\n')\" :key=\"i\">\n {{ t.replace(/\\s/g, ' ') }}\n </p>\n </div>\n </Tip>\n </template>\n <template v-if=\"imageList.length && (ddlStr ? !isOver : true)\">\n <el-image\n hide-on-click-modal\n v-for=\"(img, idx) in imageList\"\n :key=\"img.uid\"\n style=\"width: 100px; height: 100px; margin: 10px\"\n :src=\"img.url\"\n :zoom-rate=\"1.2\"\n :preview-src-list=\"imageList.map((v) => v.preview)\"\n :initial-index=\"idx\"\n fit=\"contain\"\n />\n </template>\n <!-- 截止时间字符串 -->\n <template v-if=\"ddlStr\">\n <el-divider>截止时间</el-divider>\n <h2 class=\"ddl\">\n {{ timeInfo }}\n </h2>\n <div v-if=\"isOver\">\n <el-empty description=\"已经结束啦!\"> </el-empty>\n </div>\n </template>\n <!-- 未设置ddl 或者 设置了还未结束 -->\n <div v-if=\"!ddlStr || !isOver\">\n <el-divider>必要信息填写</el-divider>\n <div class=\"infos\">\n <div v-show=\"taskMoreInfo.people\">\n <Tip>“{{ limitBindField }}”在参与名单里才能正常提交</Tip>\n </div>\n <div v-if=\"showValidForm\">\n <div class=\"infos\">\n <el-form\n ref=\"validModalRef\"\n :rules=\"validModalRules\"\n status-icon\n :model=\"validModal\"\n :disabled=\"disableForm\"\n label-position=\"top\"\n >\n <el-form-item prop=\"peopleName\" :label=\"limitBindField\">\n <el-input\n :maxlength=\"14\"\n clearable\n show-word-limit\n :placeholder=\"`请输入 ${limitBindField}`\"\n v-model=\"validModal.peopleName\"\n ></el-input>\n </el-form-item>\n </el-form>\n </div>\n </div>\n <InfosForm :infos=\"infos\" :disabled=\"disableForm\"></InfosForm>\n </div>\n <el-upload\n style=\"max-width: 400px; margin: 0 auto\"\n :drag=\"!isMobile\"\n action=\"\"\n ref=\"fileUpload\"\n :on-change=\"handleChangeFile\"\n :before-remove=\"handleRemoveFile\"\n :on-exceed=\"handleExceed\"\n :auto-upload=\"false\"\n multiple\n :limit=\"limitUploadCount\"\n v-model:file-list=\"fileList\"\n >\n <el-button v-if=\"isMobile\" type=\"primary\">选择文件</el-button>\n <template v-else>\n <el-icon class=\"el-icon--upload\">\n <upload-filled />\n </el-icon>\n <div class=\"el-upload__text\">\n 将文件拖于此处 or <em>直接选择文件</em>\n </div>\n </template>\n <template #tip>\n <div class=\"p10\" v-show=\"!!calculateMd5Count\">\n <tip\n >还有\n {{ calculateMd5Count }}\n 个文件正在生成校验信息,请稍等(1G通常需要20s)</tip\n >\n </div>\n </template>\n </el-upload>\n <div class=\"p10\">\n <el-button\n v-if=\"isWithdraw\"\n size=\"default\"\n @click=\"startWithdraw\"\n type=\"warning\"\n :disabled=\"!allowWithdraw || !!calculateMd5Count\"\n >一键撤回</el-button\n >\n <el-button\n v-else\n size=\"default\"\n @click=\"submitUpload\"\n type=\"success\"\n :disabled=\"!allowUpload || !!calculateMd5Count\"\n >提交文件</el-button\n >\n <el-button @click=\"checkSubmitStatus\" size=\"default\"\n >查询提交情况</el-button\n >\n </div>\n <!-- 提示信息 -->\n <div class=\"p10 option-tips\">\n <tip v-if=\"formatData.status && formatData.format.length\"\n >限制格式为:\n <span style=\"color: red\">{{\n formatData.format.join(', ')\n }}</span></tip\n >\n <tip v-if=\"formatData.size\"\n >限制文件大小不超过:\n <span style=\"color: red\">{{\n formatSize(formatData.size)\n }}</span></tip\n >\n <template v-if=\"isWithdraw\">\n <tip\n >① 须保证选择的文件与提交时的文件一致<br />\n ② 填写表单信息一致 <br />\n ③\n 完全一模一样的文件的提交记录(内容md5+命名),将会一次性全部撤回</tip\n >\n </template>\n <template v-else>\n <tip\n >① 选择完文件,点击 ”提交文件“即可 <br />\n ② <strong>选择大文件后需要等待一会儿才展示处理</strong>\n <template v-if=\"taskMoreInfo.template\"\n ><br />\n ③\n <strong>\n <el-button\n type=\"primary\"\n text\n style=\"color: #85ce61\"\n size=\"small\"\n @click=\"downloadTemplate\"\n >右下角可 “查看提交示例”\n </el-button>\n </strong></template\n >\n </tip>\n </template>\n </div>\n <div class=\"withdraw\">\n <el-button\n type=\"primary\"\n text\n style=\"color: #85ce61\"\n v-if=\"taskMoreInfo.template\"\n size=\"small\"\n @click=\"downloadTemplate\"\n >查看提交示例</el-button\n >\n <el-button\n v-if=\"isWithdraw\"\n @click=\"isWithdraw = false\"\n size=\"small\"\n type=\"primary\"\n text\n >正常提交</el-button\n >\n <el-button\n v-else\n size=\"small\"\n @click=\"isWithdraw = true\"\n type=\"primary\"\n text\n >我要撤回</el-button\n >\n </div>\n </div>\n </div>\n <!-- 无效任务 -->\n <div class=\"panel tc\" v-else>\n <h1 class=\"name\">\n {{ taskInfo.name }}\n </h1>\n </div>\n <LinkDialog\n v-model:value=\"showLinkModel\"\n title=\"示例文件下载链接\"\n :link=\"templateLink\"\n ></LinkDialog>\n <div style=\"padding-top: 20px\">\n <home-footer type=\"task\"></home-footer>\n </div>\n </div>\n</template>\n<script lang=\"ts\" setup>\nimport { ElMessage, ElMessageBox } from 'element-plus'\nimport type { UploadUserFile, UploadInstance, FormInstance } from 'element-plus'\nimport { computed, onMounted, onUnmounted, reactive, ref, watch } from 'vue'\nimport { useRoute, useRouter } from 'vue-router'\nimport HomeFooter from '@components/HomeFooter/index.vue'\nimport LinkDialog from '@components/linkDialog.vue'\nimport { UploadFilled } from '@element-plus/icons-vue'\nimport { useStore } from 'vuex'\nimport {\n formatDate,\n formatSize,\n getFileMd5Hash,\n getFileSuffix,\n normalizeFileName,\n parseFileFormat,\n parseInfo\n} from '@/utils/stringUtil'\nimport { downLoadByUrl, qiniuUpload } from '@/utils/networkUtil'\nimport { FileApi, PeopleApi, PublicApi, TaskApi } from '@/apis'\nimport Tip from '../dashboard/tasks/components/infoPanel/tip.vue'\nimport InfosForm from '@/components/InfosForm/index.vue'\n\nconst $store = useStore()\nconst isMobile = computed(() => $store.getters['public/isMobile'])\n// 顶部导航\nconst $router = useRouter()\nconst $route = useRoute()\nconst pcNavs = reactive([\n {\n title: '我也要收集',\n path: 'https://docs.ep.sugarat.top/'\n }\n])\nconst handleNav = (idx: number) => {\n if (pcNavs[idx].path.startsWith('http')) {\n window.location.href = pcNavs[idx].path\n return\n }\n $router.push({\n path: pcNavs[idx].path\n })\n}\n\n// 任务基本信息展示\nconst taskInfo = reactive<TaskApiTypes.TaskInfo>({\n name: '',\n category: ''\n})\nconst taskMoreInfo = reactive<Partial<TaskApiTypes.TaskInfo>>({\n bindField: ''\n})\nconst formatData = computed(() => parseFileFormat(taskMoreInfo.format))\nconst k = ref('')\n\n// 用于展示截止日期\nconst waitTime = ref(0)\n// 判断是否结束\nconst isOver = computed(() => waitTime.value <= 0)\nconst waitTimeStr = computed(() => {\n let seconds = ~~(waitTime.value / 1000)\n let hour = ~~(seconds / (60 * 60))\n const day = ~~(hour / 24)\n hour %= 24\n const minute = ~~((seconds % 3600) / 60)\n seconds %= 60\n return `剩余${day}天${hour}时${minute}分${seconds}秒`\n})\nconst refreshWaitTime = (loop = true) => {\n if (taskMoreInfo?.ddl) {\n const date = new Date(taskMoreInfo.ddl)\n waitTime.value = date.getTime() - Date.now()\n } else {\n waitTime.value = 0\n }\n if (loop) {\n setTimeout(() => {\n refreshWaitTime()\n }, 1000)\n }\n}\nconst ddlStr = computed(() => {\n if (taskMoreInfo?.ddl) {\n const date = new Date(taskMoreInfo.ddl)\n return formatDate(date)\n }\n return ''\n})\n\n// 必填信息\nconst infos = reactive<InfoItem[]>([])\n\n// 文件上传部分\n\n// 文件上传\nconst fileList = ref<(UploadUserFile & { md5: string; subscription: any })[]>(\n []\n)\nconst fileUpload = ref<UploadInstance>()\nconst disableForm = computed(\n () => fileList.value.filter((item) => item.status === 'uploading').length > 0\n)\nconst handleRemoveFile: any = (file: any) => {\n if (file.status === 'uploading' || file.status === 'success') {\n return ElMessageBox.confirm(\n '不影响已经上传成功的,正在上传的将取消上传',\n '确定从列表移除文件吗?'\n )\n .then(() => {\n if (file.status === 'uploading') {\n ElMessage.info(`取消${file.name}的上传`)\n // 取消上传\n file.subscription.unsubscribe() // 取消上传\n }\n return true\n })\n .catch(() => false)\n }\n return true\n}\n\n// 校验表单填写\nconst isWriteFinish = computed(() => infos.every((item) => item.value))\n// 提交文件\n\nconst limitBindField = computed(() => {\n return taskMoreInfo.bindField.trim() || '姓名'\n})\n\n// 身份核验表单\nconst isSameFieldName = computed(() =>\n infos.find((v) => v.text === limitBindField.value)\n)\nconst showValidForm = computed(\n () => taskMoreInfo.people && !isSameFieldName.value\n)\nconst validModal = reactive({\n peopleName: ''\n})\n\nconst validatePeopleName = (rule: any, value: any, callback: any) => {\n if (!value) {\n const message = `请输入${limitBindField.value}`\n callback(new Error(message))\n ElMessage.error(message)\n return\n }\n // 异步校验\n PeopleApi.checkPeopleIsExist(k.value, value).then((res) => {\n if (!res.data.exist) {\n ElMessage.error('你不在此次提交名单中,如有疑问请联系管理员')\n }\n callback(\n res.data.exist\n ? undefined\n : new Error('你不在此次提交名单中,如有疑问请联系管理员')\n )\n })\n}\n\nconst validModalRef = ref<FormInstance>()\nconst validModalRules = reactive({\n peopleName: [{ validator: validatePeopleName, trigger: 'blur' }]\n})\nconst confirmPeopleName = () => {\n // 处理表单必填项含有 limitBindField 的情况\n if (isSameFieldName.value) {\n const value = infos.find((v) => v.text === limitBindField.value)?.value\n validModal.peopleName = value || ''\n return new Promise((resolve) => {\n validatePeopleName(null, value, resolve)\n }).then((v) => !v)\n }\n return validModalRef.value.validate((isValid: boolean) => isValid)\n}\n\nconst startUpload = () => {\n const uploadFiles = fileList.value\n for (const file of uploadFiles) {\n if (!file.md5) {\n ElMessage.info(\n `文件(${file.name})的唯一指纹还在计算中,再等待一会儿再点击上传`\n )\n setTimeout(() => {\n ElMessage.info('文件越大计算时间越长(1G通常需要20s)')\n }, 100)\n } else if (file.status === 'ready') {\n // 开始上传\n file.status = 'uploading'\n let { name } = file\n const originName = name\n // 如果开启了自动重命名,这里重命名一下\n if (taskMoreInfo.rewrite) {\n name =\n infos.map((v) => v.value).join(formatData.value.splitChar || '-') +\n getFileSuffix(name)\n }\n // 替换不合法的字符\n name = normalizeFileName(name)\n const key = `easypicker2/${k.value}/${file.md5}/${name}`\n\n FileApi.getUploadToken().then((res) => {\n qiniuUpload(res.data.token, file.raw, key, {\n success(data: any) {\n const { fsize } = data\n FileApi.addFile({\n originName,\n name,\n taskKey: k.value,\n taskName: taskInfo.name,\n size: fsize,\n hash: file.md5,\n info: JSON.stringify(infos),\n people: validModal.peopleName\n }).then(() => {\n file.status = 'success'\n ElMessage.success(`文件:${file.name}提交成功`)\n if (taskMoreInfo.people) {\n // 无感知更新一下\n PeopleApi.updatePeopleStatus(\n k.value,\n name,\n validModal.peopleName,\n file.md5\n )\n }\n })\n },\n process(per: number, data: any, subscription: any) {\n file.percentage = Math.floor(per)\n // 挂载取消上传的方法\n file.subscription = subscription\n }\n })\n })\n }\n }\n}\n\nconst submitUpload = async () => {\n if (!isWriteFinish.value) {\n ElMessage.warning('请先完成必要信息的填写')\n return\n }\n\n if (taskMoreInfo.people) {\n const isValid = await confirmPeopleName()\n if (!isValid) {\n return\n }\n }\n startUpload()\n}\n\n// 是否允许上传\nconst allowUpload = computed(() => {\n for (const file of fileList.value) {\n if (file.status === 'ready') {\n return true\n }\n }\n return false\n})\n\n// 是否允许撤回\nconst allowWithdraw = computed(() => {\n for (const file of fileList.value) {\n if (['success', 'ready'].includes(file.status)) {\n return true\n }\n }\n return false\n})\n\n// 添加文件\n// 正在计算MD5值的文件个数\nconst calculateMd5Count = ref(0)\nconst handleChangeFile = (file: any) => {\n // 校验文件后缀名\n const { name } = file\n if (formatData.value.format.length && formatData.value.status) {\n const suffix = getFileSuffix(name)\n if (!formatData.value.format.find((v) => suffix.endsWith(v))) {\n ElMessage.error(`${name} 格式不符合要球`)\n fileUpload.value.handleRemove(file)\n return\n }\n }\n\n // 校验文件大小\n if (formatData.value.size && formatData.value.size < file.size) {\n ElMessage.error(`${name} 大小${formatSize(file.size)} 不符合要求`)\n fileUpload.value.handleRemove(file)\n return\n }\n\n calculateMd5Count.value += 1\n // 计算md5 hash\n getFileMd5Hash(file.raw).then((str) => {\n file.md5 = str\n calculateMd5Count.value -= 1\n })\n}\n\nconst limitUploadCount = computed(() => formatData.value.limit || 10)\nconst handleExceed = () => {\n ElMessage.warning(\n `一次提交最多只能选择${limitUploadCount.value}个文件,请移除已经上传成功的或刷新页面`\n )\n}\nconst showLinkModel = ref(false)\nconst templateLink = ref('')\nconst runWithdraw = () => {\n const uploadFiles = fileList.value\n for (const file of uploadFiles) {\n if (!file.md5) {\n ElMessage.info(\n `文件(${file.name})的唯一指纹还在计算中,再等待一会儿再点击上传`\n )\n setTimeout(() => {\n ElMessage.info('文件越大计算时间越长(1G通常需要20s)')\n }, 100)\n } else if (!['fail', 'uploading'].includes(file.status)) {\n // 准备开始撤回\n let { name } = file\n\n // 如果开启了自动重命名,这里重命名一下\n if (taskMoreInfo.rewrite) {\n name =\n infos.map((v) => v.value).join(formatData.value.splitChar || '-') +\n getFileSuffix(name)\n }\n\n FileApi.withdrawFile({\n taskKey: k.value,\n taskName: taskInfo.name,\n filename: name,\n hash: file.md5,\n info: JSON.stringify(infos),\n peopleName: validModal.peopleName\n })\n .then(() => {\n ElMessage.success(`文件:${file.name}撤回成功`)\n file.name += ' - (已撤回 ✅ )'\n file.status = 'fail'\n })\n .catch(() => {\n ElMessage.error(`撤回失败: 没有文件:${file.name}对应提交记录`)\n })\n }\n }\n}\nconst downloadTemplate = () => {\n FileApi.getTemplateUrl(taskMoreInfo.template, k.value)\n .then((res) => {\n showLinkModel.value = true\n const { link } = res.data\n templateLink.value = link\n downLoadByUrl(link, taskMoreInfo.template)\n })\n .catch(() => {\n ElMessage.warning('文件已从服务器上移除,请联系管理员重新上传')\n })\n}\n\n// 撤回相关逻辑\nconst isWithdraw = ref(false)\nconst startWithdraw = async () => {\n // 校验表单填写\n if (!isWriteFinish.value) {\n ElMessage.warning('请先完成必要信息的填写')\n return\n }\n if (taskMoreInfo.people) {\n const isValid = await confirmPeopleName()\n if (!isValid) {\n return\n }\n }\n runWithdraw()\n}\n\n// 查询提交情况\nconst checkSubmitStatus = async () => {\n // 校验表单填写\n if (!isWriteFinish.value) {\n ElMessage.warning('请先完成必要信息的填写,需和提交时信息完全一致')\n return\n }\n // 卡控人员限制\n if (taskMoreInfo.people) {\n const isValid = await confirmPeopleName()\n if (!isValid) {\n return\n }\n }\n FileApi.checkSubmitStatus(k.value, infos, validModal.peopleName).then(\n (res) => {\n if (res.data.isSubmit) {\n ElMessage.success('已经提交过啦')\n } else {\n ElMessage.warning('还未提交过哟')\n }\n }\n )\n}\nconst isLoadingData = ref(false)\nconst readyRefresh = ref(false)\nconst isEqualInfos = (a: InfoItem[] = [], b: InfoItem[] = []) => {\n if (a.length !== b.length) {\n return false\n }\n return a.every(\n (v, i) =>\n v.type === b[i].type &&\n v.text === b[i].text &&\n isEqualInfos(v.children, b[i].children)\n )\n}\nconst refreshTaskMoreInfo = (hot = false) => {\n TaskApi.getTaskMoreInfo(k.value).then((res) => {\n Object.assign(taskMoreInfo, res.data)\n if (!isEqualInfos(infos, parseInfo(taskMoreInfo.info))) {\n infos.splice(0, infos.length)\n infos.push(...parseInfo(taskMoreInfo.info))\n if (hot) {\n ElMessage.success('表单信息有更新')\n }\n }\n refreshWaitTime(false)\n isLoadingData.value = false\n })\n}\nconst handleBlur = () => {\n readyRefresh.value = true\n}\nconst handleFocus = () => {\n if (readyRefresh.value && !disableForm.value) {\n readyRefresh.value = false\n refreshTaskMoreInfo(true)\n }\n}\n\n// 展示的时间提示文案\nconst timeInfo = computed(() => {\n if (!isOver.value) {\n return ddlStr.value + waitTimeStr.value\n }\n return ddlStr.value\n})\n\n// tipImage\nconst tipData = reactive<{\n text: string\n imgs: {\n uid: number\n name: string\n }[]\n}>({\n text: '',\n imgs: []\n})\nconst imageList = ref<\n { name: string; uid: number; preview?: string; url: string }[]\n>([])\n\nwatch(\n () => taskMoreInfo.tip,\n () => {\n // 初始化\n try {\n const parseData = JSON.parse(taskMoreInfo.tip)\n tipData.imgs = parseData.imgs\n tipData.text = parseData.text || ''\n imageList.value = tipData.imgs.map((v) => {\n return {\n ...v,\n url: 'https://img.cdn.sugarat.top/mdImg/MTY3NzkxMDI1NTU1Nw==20140524124237518.gif'\n }\n })\n if (imageList.value.length) {\n // 异步填充url\n PublicApi.getTipImageUrl(\n k.value,\n imageList.value.map((v) => ({\n uid: v.uid,\n name: v.name\n }))\n ).then((v) => {\n v.data.forEach((url, idx) => {\n imageList.value[idx].url = url.cover\n Object.assign(imageList.value[idx], {\n preview: url.preview\n })\n })\n })\n }\n } catch {\n tipData.text = ''\n tipData.imgs = []\n imageList.value = []\n }\n }\n)\nonMounted(() => {\n k.value = $route.params.key as string\n if (k.value) {\n isLoadingData.value = true\n TaskApi.getTaskInfo(k.value)\n .then((res) => {\n Object.assign(taskInfo, res.data)\n })\n .catch((err) => {\n if (err.code === 4001) {\n ElMessage.error('任务不存在')\n k.value = ''\n taskInfo.name = '任务不存在'\n }\n })\n refreshTaskMoreInfo()\n refreshWaitTime()\n }\n // 页面隐藏\n window.addEventListener('blur', handleBlur)\n\n // 页面展示\n window.addEventListener('focus', handleFocus)\n})\n\nonUnmounted(() => {\n // 页面隐藏\n window.removeEventListener('blur', handleBlur)\n // 页面展示\n window.removeEventListener('focus', handleFocus)\n})\n</script>\n<style scoped lang=\"scss\">\n.task-panel :deep(ul.el-upload-list) {\n border: 1px dashed #d4d4d4;\n padding: 10px;\n\n &::before {\n content: '此处展示选择文件列表';\n font-size: 12px;\n position: relative;\n bottom: 4px;\n }\n}\n\n.task-panel :deep(.el-upload-list__item-name) {\n display: block;\n overflow: hidden;\n max-width: 290px;\n text-overflow: ellipsis;\n word-break: keep-all;\n}\n\n.task-panel :deep(.is-ready .el-icon--close) {\n display: block;\n color: black;\n}\n\n.task-panel {\n background-color: #f3f6f8;\n padding-bottom: 1rem;\n position: relative;\n}\n\n.pc-nav {\n background-color: #fff;\n display: flex;\n padding: 10px;\n justify-content: space-between;\n align-items: center;\n\n .exit {\n cursor: pointer;\n }\n\n .nav {\n display: flex;\n\n nav {\n display: flex;\n align-items: center;\n\n .nav-item {\n font-size: 1rem;\n color: #595959;\n padding: 10px;\n cursor: pointer;\n\n &.active {\n color: #409eff !important;\n font-weight: 600;\n }\n }\n }\n\n .exit {\n color: #595959;\n }\n }\n\n .logo {\n width: 180px;\n margin: 0 10px;\n\n img {\n height: 40px;\n }\n }\n}\n\n.panel {\n max-width: 1024px;\n padding: 1em;\n background-color: #fff;\n margin: 10px auto;\n box-sizing: border-box;\n box-shadow: 0 2px 12px 0 rgb(0 0 0 / 10%);\n border-radius: 4px;\n\n .name {\n text-align: center;\n }\n\n .ddl {\n margin-top: 10px;\n color: #919191;\n font-size: 14px;\n }\n\n .infos {\n max-width: 460px;\n margin: auto;\n overflow: hidden;\n :deep(div.el-form-item > label) {\n font-weight: bold;\n &::before {\n content: '* ';\n color: red;\n }\n }\n }\n}\n\n.withdraw {\n text-align: right;\n}\n\n.tip-wrapper {\n line-height: 20px;\n text-align: left;\n word-break: break-all;\n // max-height: 100px;\n overflow: hidden;\n padding: 0 20px;\n color: #e6a23c;\n max-width: 320px;\n font-size: 14px;\n}\n</style>\n"],"names":["_sfc_main","defineComponent","_hoisted_1","_hoisted_2","createElementVNode","_hoisted_3","_sfc_render","_ctx","_cache","$props","$setup","$data","$options","openBlock","createElementBlock","uploadFilled","_export_sfc","$store","useStore","isMobile","computed","$router","useRouter","$route","useRoute","pcNavs","reactive","handleNav","idx","taskInfo","taskMoreInfo","formatData","parseFileFormat","k","ref","waitTime","isOver","waitTimeStr","seconds","hour","day","minute","refreshWaitTime","loop","date","ddlStr","formatDate","infos","fileList","fileUpload","disableForm","item","handleRemoveFile","file","ElMessageBox","ElMessage","isWriteFinish","limitBindField","isSameFieldName","v","showValidForm","validModal","validatePeopleName","rule","value","callback","message","PeopleApi","res","validModalRef","validModalRules","confirmPeopleName","_a","resolve","isValid","startUpload","uploadFiles","name","originName","getFileSuffix","normalizeFileName","key","FileApi","qiniuUpload","data","fsize","per","subscription","submitUpload","allowUpload","allowWithdraw","calculateMd5Count","handleChangeFile","suffix","formatSize","getFileMd5Hash","str","limitUploadCount","handleExceed","showLinkModel","templateLink","runWithdraw","downloadTemplate","link","downLoadByUrl","isWithdraw","startWithdraw","checkSubmitStatus","isLoadingData","readyRefresh","isEqualInfos","a","b","i","refreshTaskMoreInfo","hot","TaskApi","parseInfo","handleBlur","handleFocus","timeInfo","tipData","imageList","watch","parseData","PublicApi","url","e","onMounted","err","onUnmounted"],"mappings":"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","x_google_ignoreList":[0]}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{g as I,d as k,f as c,c as r,a as e,h as ce,O as j,r as i,Z as N,a5 as B,o as ie,i as re,a6 as A,F as J,C as G,j as a,w as n,k as w,D as P,bq as L,E as K,s as F,aa as ue,v as pe,x as de,p as _e,e as ve,bp as me,G as he,t as V,b as h,ac as fe,I as ge,_ as $e}from"./index-
|
|
2
|
-
//# sourceMappingURL=index-
|
|
1
|
+
import{g as I,d as k,f as c,c as r,a as e,h as ce,O as j,r as i,Z as N,a5 as B,o as ie,i as re,a6 as A,F as J,C as G,j as a,w as n,k as w,D as P,bq as L,E as K,s as F,aa as ue,v as pe,x as de,p as _e,e as ve,bp as me,G as he,t as V,b as h,ac as fe,I as ge,_ as $e}from"./index-ce410282.js";import{v as we}from"./el-loading-2e8f5cae.js";import{E as ye}from"./el-dialog-6d1c807a.js";import{E as xe,s as be}from"./el-pagination-257e3c38.js";import{E as Ce,a as ze}from"./el-select-ca05d15a.js";import{E as Ve,a as ke}from"./el-table-column-bccbd0ee.js";import{d as Ee}from"./other-8d7ba6a0.js";import{d as Se}from"./data-board-fac5314d.js";import{r as De}from"./refresh-3ba5bdd3.js";import{d as He}from"./data-analysis-b5271288.js";import"./index-05e1d8e9.js";import"./isEqual-3a3c96c5.js";import"./validator-001cb5f7.js";const Me=k({name:"Coin"}),Be={viewBox:"0 0 1024 1024",xmlns:"http://www.w3.org/2000/svg"},Le=e("path",{fill:"currentColor",d:"m161.92 580.736 29.888 58.88C171.328 659.776 160 681.728 160 704c0 82.304 155.328 160 352 160s352-77.696 352-160c0-22.272-11.392-44.16-31.808-64.32l30.464-58.432C903.936 615.808 928 657.664 928 704c0 129.728-188.544 224-416 224S96 833.728 96 704c0-46.592 24.32-88.576 65.92-123.264z"},null,-1),Ie=e("path",{fill:"currentColor",d:"m161.92 388.736 29.888 58.88C171.328 467.84 160 489.792 160 512c0 82.304 155.328 160 352 160s352-77.696 352-160c0-22.272-11.392-44.16-31.808-64.32l30.464-58.432C903.936 423.808 928 465.664 928 512c0 129.728-188.544 224-416 224S96 641.728 96 512c0-46.592 24.32-88.576 65.92-123.264z"},null,-1),Te=e("path",{fill:"currentColor",d:"M512 544c-227.456 0-416-94.272-416-224S284.544 96 512 96s416 94.272 416 224-188.544 224-416 224zm0-64c196.672 0 352-77.696 352-160S708.672 160 512 160s-352 77.696-352 160 155.328 160 352 160z"},null,-1),Oe=[Le,Ie,Te];function je(u,y,x,m,o,f){return c(),r("svg",Be,Oe)}var Ne=I(Me,[["render",je]]);const Pe=k({name:"Document"}),Fe={viewBox:"0 0 1024 1024",xmlns:"http://www.w3.org/2000/svg"},Ue=e("path",{fill:"currentColor",d:"M832 384H576V128H192v768h640V384zm-26.496-64L640 154.496V320h165.504zM160 64h480l256 256v608a32 32 0 0 1-32 32H160a32 32 0 0 1-32-32V96a32 32 0 0 1 32-32zm160 448h384v64H320v-64zm0-192h160v64H320v-64zm0 384h384v64H320v-64z"},null,-1),qe=[Ue];function Ae(u,y,x,m,o,f){return c(),r("svg",Fe,qe)}var Je=I(Pe,[["render",Ae]]);const Ge=k({name:"TakeawayBox"}),Ke={viewBox:"0 0 1024 1024",xmlns:"http://www.w3.org/2000/svg"},Re=e("path",{fill:"currentColor",d:"M832 384H192v448h640V384zM96 320h832V128H96v192zm800 64v480a32 32 0 0 1-32 32H160a32 32 0 0 1-32-32V384H64a32 32 0 0 1-32-32V96a32 32 0 0 1 32-32h896a32 32 0 0 1 32 32v256a32 32 0 0 1-32 32h-64zM416 512h192a32 32 0 0 1 0 64H416a32 32 0 0 1 0-64z"},null,-1),We=[Re];function Ze(u,y,x,m,o,f){return c(),r("svg",Ke,We)}var Qe=I(Ge,[["render",Ze]]);const Xe=k({name:"Tickets"}),Ye={viewBox:"0 0 1024 1024",xmlns:"http://www.w3.org/2000/svg"},et=e("path",{fill:"currentColor",d:"M192 128v768h640V128H192zm-32-64h704a32 32 0 0 1 32 32v832a32 32 0 0 1-32 32H160a32 32 0 0 1-32-32V96a32 32 0 0 1 32-32zm160 448h384v64H320v-64zm0-192h192v64H320v-64zm0 384h384v64H320v-64z"},null,-1),tt=[et];function at(u,y,x,m,o,f){return c(),r("svg",Ye,tt)}var ot=I(Xe,[["render",at]]);const st=u=>(_e("data-v-c6757aaa"),u=u(),ve(),u),lt={class:"overview"},nt={class:"card-list","element-loading-text":"Loading..."},ct={class:"logo"},it={class:"content"},rt={class:"title"},ut={class:"text"},pt={class:"supplement"},dt={class:"panel"},_t={class:"p10 log-filter"},vt={class:"item"},mt=st(()=>e("span",{class:"label"},"类型",-1)),ht={class:"item"},ft={class:"item"},gt={class:"item"},$t={class:"item"},wt={class:"flex fc p10"},yt={class:"dialog-footer"},xt=k({__name:"index",setup(u){const y=ce(),x=j(()=>y.getters["public/isMobile"]),m=i(!1),o=N([{type:"user",title:"用户数量",value:"0",supplement:"较昨日 +0",icon:me,color:"#40c9c6"},{type:"file",title:"记录/OSS",value:"0",supplement:"记录较昨日 +0",icon:Je,color:"#36a3f7"},{type:"log",title:"日志数量",value:"0",supplement:"较昨日 +0",icon:ot,color:"#f4516c"},{type:"pv",title:"PV/UV",value:"0/0",supplement:"",icon:Se,color:"#34bfa3"},{type:"compress",title:"归档&无效文件",value:"0/0KB",supplement:"已失效0个",icon:Ne,color:"#e38013"}]),f=()=>{m.value=!0,L.getCount().then(s=>{const{user:l,file:d,log:g,pv:_,compress:v}=s.data;o[0].value="".concat(l.sum),o[0].supplement="较昨日 +".concat(l.recent),o[1].value="".concat(d.server.sum,"/").concat(d.oss.sum," (").concat(d.oss.size,")"),o[1].supplement="记录较昨日 +".concat(d.server.recent),o[2].value="".concat(g.sum),o[2].supplement="较昨日 +".concat(g.recent),o[3].value="".concat(_.today.sum,"/").concat(_.today.uv),o[3].supplement="历史: ".concat(_.all.sum,"/").concat(_.all.uv),o[4].value="".concat(v.all.sum,"/").concat(v.all.size),o[4].supplement="已失效 ".concat(v.expired.sum,"/").concat(v.expired.size),m.value=!1})},E=i(!1),R=()=>{E.value=!0,L.clearExpiredCompressFile().then(()=>{setTimeout(()=>{K.success("清理成功,数据同步可能有延迟"),E.value=!1,f()},2e3)})},p=N([]),b=i("behavior"),S=i(""),W=N([{label:"用户行为",type:"behavior"},{label:"网络请求",type:"request"},{label:"服务端错误",type:"error"},{label:"页面访问",type:"pv"}]),C=i(10),Z=s=>{C.value=s},T=i(0),Q=j(()=>Math.ceil(T.value/C.value)),z=i(1),X=s=>{z.value=s},D=Ee(()=>{L.getLogMsg(C.value,z.value,b.value,S.value).then(s=>{p.splice(0,p.length),p.push(...s.data.logs),T.value=s.data.sum})},100,!1);B(()=>{b.value&&(z.value=1)}),B(()=>{S.value!==void 0&&D()}),B(()=>{b.value&&D()}),B(()=>{(z.value||C.value)&&D()});const H=i(!1),O=i(""),Y=s=>{L.getLogMsgDetail(s).then(l=>{H.value=!0,O.value=JSON.stringify(l.data,null,2)})},ee=j(()=>{try{return JSON.parse(O.value)}catch(s){return{}}}),te=()=>{fe(O.value)},ae=()=>{if(p.length===0)return;const s=["日期","IP","内容"],l=p.map(d=>{const{date:g,ip:_,msg:v}=d;return[F(new Date(g)),_,v]});ue(s,l,"导出日志_".concat(p.length,"条").concat(F(new Date,"yyyy年MM月日hh时mm分ss秒"),".xlsx")),K.success("导出成功")};return ie(()=>{f()}),(s,l)=>{const d=ge,g=ze,_=Ce,v=pe,$=de,M=ke,oe=Ve,se=xe,le=re("json-viewer"),ne=ye,U=we;return c(),r("div",lt,[A((c(),r("div",nt,[(c(!0),r(J,null,G(o,t=>(c(),r("div",{key:t.type,class:"card"},[e("div",ct,[a(d,{color:t.color},{default:n(()=>[(c(),P(he(t.icon)))]),_:2},1032,["color"])]),e("div",it,[e("div",rt,V(t.title),1),e("div",ut,V(t.value),1),e("div",pt,V(t.supplement),1)])]))),128))])),[[U,m.value]]),e("div",dt,[e("div",_t,[e("span",vt,[mt,a(_,{modelValue:b.value,"onUpdate:modelValue":l[0]||(l[0]=t=>b.value=t),size:"default",placeholder:"请选择日志类型"},{default:n(()=>[(c(!0),r(J,null,G(W,(t,q)=>(c(),P(g,{key:q,label:t.label,value:t.type},null,8,["label","value"]))),128))]),_:1},8,["modelValue"])]),e("span",ht,[a(v,{size:"default",clearable:"",placeholder:"请输入要检索的内容","prefix-icon":w(be),modelValue:S.value,"onUpdate:modelValue":l[1]||(l[1]=t=>S.value=t)},null,8,["prefix-icon","modelValue"])]),e("span",ft,[a($,{size:"default",icon:w(De),onClick:w(D)},{default:n(()=>[h("刷新")]),_:1},8,["icon","onClick"])]),e("span",gt,[a($,{size:"default",type:"primary",icon:w(He),onClick:ae},{default:n(()=>[h("导出日志 "+V(p.length)+" 条",1)]),_:1},8,["icon"])]),e("span",$t,[A((c(),P($,{size:"default",type:"danger",icon:w(Qe),disabled:E.value,onClick:R},{default:n(()=>[h("清理无效文件")]),_:1},8,["icon","disabled"])),[[U,E.value]])])]),a(oe,{"tooltip-effect":"dark",height:"400",stripe:"",border:"","default-sort":{prop:"date",order:"descending"},data:p,style:{width:"100%"}},{default:n(()=>[a(M,{sortable:"",prop:"date",label:"日期",width:"180"},{default:n(t=>[h(V(w(F)(new Date(t.row.date))),1)]),_:1}),a(M,{sortable:"",prop:"ip",label:"IP",width:"100"}),a(M,{"min-width":"160",prop:"msg",label:"内容"}),a(M,{fixed:"right",label:"操作",width:"100"},{default:n(t=>[a($,{onClick:q=>Y(t.row.id),type:"primary",text:"",size:"small"},{default:n(()=>[h("查看详情")]),_:2},1032,["onClick"])]),_:1})]),_:1},8,["data"]),e("div",wt,[a(se,{"current-page":z.value,onCurrentChange:X,background:"","page-count":Q.value,"page-sizes":[10,50,100,200,500,1e3],"page-size":C.value,onSizeChange:Z,total:T.value,layout:"total, sizes, prev, pager, next, jumper"},null,8,["current-page","page-count","page-size","total"])])]),a(ne,{modelValue:H.value,"onUpdate:modelValue":l[3]||(l[3]=t=>H.value=t),title:"详细信息",width:"50%",center:"",fullscreen:x.value},{footer:n(()=>[e("span",yt,[a($,{type:"default",onClick:te},{default:n(()=>[h("复制")]),_:1}),a($,{type:"primary",onClick:l[2]||(l[2]=t=>H.value=!1)},{default:n(()=>[h("确定")]),_:1})])]),default:n(()=>[a(le,{value:ee.value,"expand-depth":5,copyable:"",boxed:"",sort:""},null,8,["value"])]),_:1},8,["modelValue","fullscreen"])])}}});const Tt=$e(xt,[["__scopeId","data-v-c6757aaa"]]);export{Tt as default};
|
|
2
|
+
//# sourceMappingURL=index-13570b16.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index-f298d979.js","sources":["../../node_modules/.pnpm/@element-plus+icons-vue@1.1.4_vue@3.3.4/node_modules/@element-plus/icons-vue/dist/es/coin.mjs","../../node_modules/.pnpm/@element-plus+icons-vue@1.1.4_vue@3.3.4/node_modules/@element-plus/icons-vue/dist/es/document.mjs","../../node_modules/.pnpm/@element-plus+icons-vue@1.1.4_vue@3.3.4/node_modules/@element-plus/icons-vue/dist/es/takeaway-box.mjs","../../node_modules/.pnpm/@element-plus+icons-vue@1.1.4_vue@3.3.4/node_modules/@element-plus/icons-vue/dist/es/tickets.mjs","../../src/pages/dashboard/manage/overview/index.vue"],"sourcesContent":["import { defineComponent, openBlock, createElementBlock, createElementVNode } from 'vue';\nimport _export_sfc from './_virtual/plugin-vue_export-helper.mjs';\n\nconst _sfc_main = defineComponent({\n name: \"Coin\"\n});\nconst _hoisted_1 = {\n viewBox: \"0 0 1024 1024\",\n xmlns: \"http://www.w3.org/2000/svg\"\n};\nconst _hoisted_2 = /* @__PURE__ */ createElementVNode(\"path\", {\n fill: \"currentColor\",\n d: \"m161.92 580.736 29.888 58.88C171.328 659.776 160 681.728 160 704c0 82.304 155.328 160 352 160s352-77.696 352-160c0-22.272-11.392-44.16-31.808-64.32l30.464-58.432C903.936 615.808 928 657.664 928 704c0 129.728-188.544 224-416 224S96 833.728 96 704c0-46.592 24.32-88.576 65.92-123.264z\"\n}, null, -1);\nconst _hoisted_3 = /* @__PURE__ */ createElementVNode(\"path\", {\n fill: \"currentColor\",\n d: \"m161.92 388.736 29.888 58.88C171.328 467.84 160 489.792 160 512c0 82.304 155.328 160 352 160s352-77.696 352-160c0-22.272-11.392-44.16-31.808-64.32l30.464-58.432C903.936 423.808 928 465.664 928 512c0 129.728-188.544 224-416 224S96 641.728 96 512c0-46.592 24.32-88.576 65.92-123.264z\"\n}, null, -1);\nconst _hoisted_4 = /* @__PURE__ */ createElementVNode(\"path\", {\n fill: \"currentColor\",\n d: \"M512 544c-227.456 0-416-94.272-416-224S284.544 96 512 96s416 94.272 416 224-188.544 224-416 224zm0-64c196.672 0 352-77.696 352-160S708.672 160 512 160s-352 77.696-352 160 155.328 160 352 160z\"\n}, null, -1);\nconst _hoisted_5 = [\n _hoisted_2,\n _hoisted_3,\n _hoisted_4\n];\nfunction _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {\n return openBlock(), createElementBlock(\"svg\", _hoisted_1, _hoisted_5);\n}\nvar coin = /* @__PURE__ */ _export_sfc(_sfc_main, [[\"render\", _sfc_render]]);\n\nexport { coin as default };\n","import { defineComponent, openBlock, createElementBlock, createElementVNode } from 'vue';\nimport _export_sfc from './_virtual/plugin-vue_export-helper.mjs';\n\nconst _sfc_main = defineComponent({\n name: \"Document\"\n});\nconst _hoisted_1 = {\n viewBox: \"0 0 1024 1024\",\n xmlns: \"http://www.w3.org/2000/svg\"\n};\nconst _hoisted_2 = /* @__PURE__ */ createElementVNode(\"path\", {\n fill: \"currentColor\",\n d: \"M832 384H576V128H192v768h640V384zm-26.496-64L640 154.496V320h165.504zM160 64h480l256 256v608a32 32 0 0 1-32 32H160a32 32 0 0 1-32-32V96a32 32 0 0 1 32-32zm160 448h384v64H320v-64zm0-192h160v64H320v-64zm0 384h384v64H320v-64z\"\n}, null, -1);\nconst _hoisted_3 = [\n _hoisted_2\n];\nfunction _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {\n return openBlock(), createElementBlock(\"svg\", _hoisted_1, _hoisted_3);\n}\nvar document = /* @__PURE__ */ _export_sfc(_sfc_main, [[\"render\", _sfc_render]]);\n\nexport { document as default };\n","import { defineComponent, openBlock, createElementBlock, createElementVNode } from 'vue';\nimport _export_sfc from './_virtual/plugin-vue_export-helper.mjs';\n\nconst _sfc_main = defineComponent({\n name: \"TakeawayBox\"\n});\nconst _hoisted_1 = {\n viewBox: \"0 0 1024 1024\",\n xmlns: \"http://www.w3.org/2000/svg\"\n};\nconst _hoisted_2 = /* @__PURE__ */ createElementVNode(\"path\", {\n fill: \"currentColor\",\n d: \"M832 384H192v448h640V384zM96 320h832V128H96v192zm800 64v480a32 32 0 0 1-32 32H160a32 32 0 0 1-32-32V384H64a32 32 0 0 1-32-32V96a32 32 0 0 1 32-32h896a32 32 0 0 1 32 32v256a32 32 0 0 1-32 32h-64zM416 512h192a32 32 0 0 1 0 64H416a32 32 0 0 1 0-64z\"\n}, null, -1);\nconst _hoisted_3 = [\n _hoisted_2\n];\nfunction _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {\n return openBlock(), createElementBlock(\"svg\", _hoisted_1, _hoisted_3);\n}\nvar takeawayBox = /* @__PURE__ */ _export_sfc(_sfc_main, [[\"render\", _sfc_render]]);\n\nexport { takeawayBox as default };\n","import { defineComponent, openBlock, createElementBlock, createElementVNode } from 'vue';\nimport _export_sfc from './_virtual/plugin-vue_export-helper.mjs';\n\nconst _sfc_main = defineComponent({\n name: \"Tickets\"\n});\nconst _hoisted_1 = {\n viewBox: \"0 0 1024 1024\",\n xmlns: \"http://www.w3.org/2000/svg\"\n};\nconst _hoisted_2 = /* @__PURE__ */ createElementVNode(\"path\", {\n fill: \"currentColor\",\n d: \"M192 128v768h640V128H192zm-32-64h704a32 32 0 0 1 32 32v832a32 32 0 0 1-32 32H160a32 32 0 0 1-32-32V96a32 32 0 0 1 32-32zm160 448h384v64H320v-64zm0-192h192v64H320v-64zm0 384h384v64H320v-64z\"\n}, null, -1);\nconst _hoisted_3 = [\n _hoisted_2\n];\nfunction _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {\n return openBlock(), createElementBlock(\"svg\", _hoisted_1, _hoisted_3);\n}\nvar tickets = /* @__PURE__ */ _export_sfc(_sfc_main, [[\"render\", _sfc_render]]);\n\nexport { tickets as default };\n","<template>\n <div class=\"overview\">\n <div\n class=\"card-list\"\n v-loading=\"isLoadingOverview\"\n element-loading-text=\"Loading...\"\n >\n <div v-for=\"c in cardList\" :key=\"c.type\" class=\"card\">\n <div class=\"logo\">\n <el-icon :color=\"c.color\">\n <component :is=\"c.icon\"></component>\n </el-icon>\n </div>\n <div class=\"content\">\n <div class=\"title\">{{ c.title }}</div>\n <div class=\"text\">{{ c.value }}</div>\n <div class=\"supplement\">{{ c.supplement }}</div>\n </div>\n </div>\n </div>\n <div class=\"panel\">\n <div class=\"p10 log-filter\">\n <span class=\"item\">\n <span class=\"label\">类型</span>\n <el-select\n v-model=\"filterLogType\"\n size=\"default\"\n placeholder=\"请选择日志类型\"\n >\n <el-option\n v-for=\"(item, idx) in logTypeList\"\n :key=\"idx\"\n :label=\"item.label\"\n :value=\"item.type\"\n ></el-option>\n </el-select>\n </span>\n <span class=\"item\">\n <el-input\n size=\"default\"\n clearable\n placeholder=\"请输入要检索的内容\"\n :prefix-icon=\"Search\"\n v-model=\"searchWord\"\n >\n </el-input>\n </span>\n <span class=\"item\">\n <el-button size=\"default\" :icon=\"Refresh\" @click=\"refreshLogs\"\n >刷新</el-button\n >\n </span>\n <span class=\"item\">\n <el-button\n size=\"default\"\n type=\"primary\"\n :icon=\"DataAnalysis\"\n @click=\"exportLogData\"\n >导出日志 {{ logs.length }} 条</el-button\n >\n </span>\n <span class=\"item\">\n <el-button\n size=\"default\"\n type=\"danger\"\n :icon=\"TakeawayBox\"\n :disabled=\"disableDelete\"\n @click=\"clearExpiredCompressFile\"\n v-loading=\"disableDelete\"\n >清理无效文件</el-button\n >\n </span>\n </div>\n <el-table\n tooltip-effect=\"dark\"\n height=\"400\"\n stripe\n border\n :default-sort=\"{ prop: 'date', order: 'descending' }\"\n :data=\"logs\"\n style=\"width: 100%\"\n >\n <el-table-column sortable prop=\"date\" label=\"日期\" width=\"180\">\n <template #default=\"scope\">{{\n formatDate(new Date(scope.row.date))\n }}</template>\n </el-table-column>\n <!-- <el-table-column prop=\"type\" label=\"类型\" width=\"100\">\n <template #default=\"scope\">{{ getLogsTypeText(scope.row.type) }}</template>\n </el-table-column>-->\n <el-table-column\n sortable\n prop=\"ip\"\n label=\"IP\"\n width=\"100\"\n ></el-table-column>\n <el-table-column\n min-width=\"160\"\n prop=\"msg\"\n label=\"内容\"\n ></el-table-column>\n <el-table-column fixed=\"right\" label=\"操作\" width=\"100\">\n <template #default=\"scope\">\n <el-button\n @click=\"handleDetail(scope.row.id)\"\n type=\"primary\"\n text\n size=\"small\"\n >查看详情</el-button\n >\n </template>\n </el-table-column>\n </el-table>\n\n <div class=\"flex fc p10\">\n <el-pagination\n :current-page=\"pageCurrent\"\n @current-change=\"handlePageChange\"\n background\n :page-count=\"pageCount\"\n :page-sizes=\"[10, 50, 100, 200, 500, 1000]\"\n :page-size=\"pageSize\"\n @size-change=\"handleSizeChange\"\n :total=\"logSumCount\"\n layout=\"total, sizes, prev, pager, next, jumper\"\n ></el-pagination>\n </div>\n </div>\n <el-dialog\n v-model=\"showDetail\"\n title=\"详细信息\"\n width=\"50%\"\n center\n :fullscreen=\"isMobile\"\n >\n <json-viewer\n :value=\"jsonData\"\n :expand-depth=\"5\"\n copyable\n boxed\n sort\n ></json-viewer>\n <template #footer>\n <span class=\"dialog-footer\">\n <el-button type=\"default\" @click=\"handleCopyDetail\">复制</el-button>\n <el-button type=\"primary\" @click=\"showDetail = false\">确定</el-button>\n </span>\n </template>\n </el-dialog>\n </div>\n</template>\n<script lang=\"ts\" setup>\nimport { computed, onMounted, reactive, ref, watchEffect } from 'vue'\nimport {\n User,\n Document,\n Tickets,\n DataBoard,\n Search,\n Refresh,\n DataAnalysis,\n Coin,\n TakeawayBox\n} from '@element-plus/icons-vue'\nimport { useStore } from 'vuex'\nimport { ElMessage } from 'element-plus'\nimport { SuperOverviewApi } from '@/apis'\nimport { copyRes, formatDate } from '@/utils/stringUtil'\nimport { tableToExcel } from '@/utils/networkUtil'\nimport { debounce } from '@/utils/other'\n\nconst $store = useStore()\n\nconst isMobile = computed(() => $store.getters['public/isMobile'])\n\nconst isLoadingOverview = ref(false)\nconst cardList = reactive([\n {\n type: 'user',\n title: '用户数量',\n value: '0',\n supplement: '较昨日 +0',\n icon: User,\n color: '#40c9c6'\n },\n {\n type: 'file',\n title: '记录/OSS',\n value: '0',\n supplement: '记录较昨日 +0',\n icon: Document,\n color: '#36a3f7'\n },\n {\n type: 'log',\n title: '日志数量',\n value: '0',\n supplement: '较昨日 +0',\n icon: Tickets,\n color: '#f4516c'\n },\n {\n type: 'pv',\n title: 'PV/UV',\n value: '0/0',\n supplement: '',\n icon: DataBoard,\n color: '#34bfa3'\n },\n {\n type: 'compress',\n title: '归档&无效文件',\n value: '0/0KB',\n supplement: '已失效0个',\n icon: Coin,\n color: '#e38013'\n }\n])\n// 刷新记录条数\nconst refreshCount = () => {\n isLoadingOverview.value = true\n SuperOverviewApi.getCount().then((res) => {\n const { user, file, log, pv, compress } = res.data\n cardList[0].value = `${user.sum}`\n cardList[0].supplement = `较昨日 +${user.recent}`\n cardList[1].value = `${file.server.sum}/${file.oss.sum} (${file.oss.size})`\n cardList[1].supplement = `记录较昨日 +${file.server.recent}`\n cardList[2].value = `${log.sum}`\n cardList[2].supplement = `较昨日 +${log.recent}`\n cardList[3].value = `${pv.today.sum}/${pv.today.uv}`\n cardList[3].supplement = `历史: ${pv.all.sum}/${pv.all.uv}`\n cardList[4].value = `${compress.all.sum}/${compress.all.size}`\n cardList[4].supplement = `已失效 ${compress.expired.sum}/${compress.expired.size}`\n isLoadingOverview.value = false\n })\n}\n\nconst disableDelete = ref(false)\nconst clearExpiredCompressFile = () => {\n disableDelete.value = true\n SuperOverviewApi.clearExpiredCompressFile().then(() => {\n setTimeout(() => {\n ElMessage.success('清理成功,数据同步可能有延迟')\n disableDelete.value = false\n refreshCount()\n }, 2000)\n })\n}\n\n// 日志\nconst logs: any[] = reactive([])\n\n// function getLogsTypeText(type: string) {\n// const logsTypeText: any = {\n// request: '网络请求',\n// behavior: '用户行为',\n// error: '错误',\n// pv: '页面访问',\n// }\n// return logsTypeText[type]\n// }\n// 筛选的日志\nconst filterLogType = ref('behavior')\nconst searchWord = ref('')\nconst logTypeList = reactive([\n {\n label: '用户行为',\n type: 'behavior'\n },\n {\n label: '网络请求',\n type: 'request'\n },\n {\n label: '服务端错误',\n type: 'error'\n },\n {\n label: '页面访问',\n type: 'pv'\n }\n])\n\n// 分页\n// 页大小\nconst pageSize = ref(10)\nconst handleSizeChange = (v: number) => {\n pageSize.value = v\n}\n// 总条数\nconst logSumCount = ref(0)\nconst pageCount = computed(() => {\n const t = Math.ceil(logSumCount.value / pageSize.value)\n return t\n})\nconst pageCurrent = ref(1)\nconst handlePageChange = (idx: number) => {\n pageCurrent.value = idx\n}\n\nconst refreshLogs = debounce(\n () => {\n SuperOverviewApi.getLogMsg(\n pageSize.value,\n pageCurrent.value,\n filterLogType.value,\n searchWord.value\n ).then((res) => {\n logs.splice(0, logs.length)\n logs.push(...res.data.logs)\n logSumCount.value = res.data.sum\n })\n },\n 100,\n false\n)\n\nwatchEffect(() => {\n if (filterLogType.value) {\n pageCurrent.value = 1\n }\n})\n\nwatchEffect(() => {\n if (searchWord.value !== undefined) {\n refreshLogs()\n }\n})\n\nwatchEffect(() => {\n if (filterLogType.value) {\n refreshLogs()\n }\n})\n\nwatchEffect(() => {\n if (pageCurrent.value || pageSize.value) {\n refreshLogs()\n }\n})\n\nconst showDetail = ref(false)\nconst showData = ref('')\nconst handleDetail = (id) => {\n SuperOverviewApi.getLogMsgDetail(id).then((res) => {\n showDetail.value = true\n showData.value = JSON.stringify(res.data, null, 2)\n })\n}\nconst jsonData = computed(() => {\n try {\n return JSON.parse(showData.value)\n } catch (e) {\n return {}\n }\n})\nconst handleCopyDetail = () => {\n copyRes(showData.value)\n}\n\nconst exportLogData = () => {\n if (logs.length === 0) {\n return\n }\n const headers = ['日期', 'IP', '内容']\n const body = logs.map((v) => {\n const { date, ip, msg } = v\n return [formatDate(new Date(date)), ip, msg]\n })\n tableToExcel(\n headers,\n body,\n `导出日志_${logs.length}条${formatDate(\n new Date(),\n 'yyyy年MM月日hh时mm分ss秒'\n )}.xlsx`\n )\n ElMessage.success('导出成功')\n}\nonMounted(() => {\n refreshCount()\n})\n</script>\n\n<style scoped lang=\"scss\">\n@media screen and (max-width: 700px) {\n .card-list {\n margin-top: 40px;\n }\n\n .card {\n min-width: 300px;\n }\n\n .log-filter {\n justify-content: center;\n }\n}\n\n.overview {\n margin: 0 auto;\n}\n\n.card-list {\n display: flex;\n margin-top: 20px;\n justify-content: center;\n flex-wrap: wrap;\n}\n\n.card {\n margin: 10px;\n cursor: pointer;\n font-size: 12px;\n position: relative;\n overflow: hidden;\n color: #666;\n background: #fff;\n box-shadow: 4px 4px 40px rgb(0 0 0 / 5%);\n border-color: rgba(0, 0, 0, 0.05);\n min-width: 300px;\n\n .logo {\n float: left;\n margin: 4px 10px 0 10px;\n -webkit-transition: all 0.38s ease-out;\n transition: all 0.38s ease-out;\n border-radius: 6px;\n font-size: 48px;\n\n i {\n padding: 10px;\n }\n }\n\n .content {\n float: right;\n font-weight: 700;\n margin: 10px;\n margin-left: 0;\n\n .title {\n line-height: 18px;\n color: rgba(0, 0, 0, 0.45);\n font-size: 14px;\n text-align: right;\n }\n\n .text {\n font-size: 16px;\n text-align: right;\n }\n\n .supplement {\n font-size: 12px;\n font-weight: lighter;\n text-align: right;\n }\n }\n}\n\n.panel {\n max-width: 1024px;\n padding: 1em;\n background-color: #fff;\n margin: 10px auto;\n box-sizing: border-box;\n box-shadow: 0 2px 12px 0 rgb(0 0 0 / 10%);\n border-radius: 4px;\n}\n\n.log-filter {\n display: flex;\n flex-wrap: wrap;\n\n .item {\n margin-right: 10px;\n margin-bottom: 10px;\n\n .label {\n margin-right: 10px;\n font-size: 12px;\n }\n }\n}\n</style>\n"],"names":["_sfc_main","defineComponent","_hoisted_1","_hoisted_2","createElementVNode","_hoisted_3","_hoisted_4","_hoisted_5","_sfc_render","_ctx","_cache","$props","$setup","$data","$options","openBlock","createElementBlock","coin","_export_sfc","document","takeawayBox","tickets","$store","useStore","isMobile","computed","isLoadingOverview","ref","cardList","reactive","User","Document","Tickets","DataBoard","Coin","refreshCount","SuperOverviewApi","res","user","file","log","pv","compress","disableDelete","clearExpiredCompressFile","ElMessage","logs","filterLogType","searchWord","logTypeList","pageSize","handleSizeChange","v","logSumCount","pageCount","pageCurrent","handlePageChange","idx","refreshLogs","debounce","watchEffect","showDetail","showData","handleDetail","id","jsonData","e","handleCopyDetail","copyRes","exportLogData","headers","body","date","ip","msg","formatDate","tableToExcel","onMounted"],"mappings":"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","x_google_ignoreList":[0,1,2,3]}
|
|
1
|
+
{"version":3,"file":"index-13570b16.js","sources":["../../node_modules/.pnpm/@element-plus+icons-vue@1.1.4_vue@3.3.4/node_modules/@element-plus/icons-vue/dist/es/coin.mjs","../../node_modules/.pnpm/@element-plus+icons-vue@1.1.4_vue@3.3.4/node_modules/@element-plus/icons-vue/dist/es/document.mjs","../../node_modules/.pnpm/@element-plus+icons-vue@1.1.4_vue@3.3.4/node_modules/@element-plus/icons-vue/dist/es/takeaway-box.mjs","../../node_modules/.pnpm/@element-plus+icons-vue@1.1.4_vue@3.3.4/node_modules/@element-plus/icons-vue/dist/es/tickets.mjs","../../src/pages/dashboard/manage/overview/index.vue"],"sourcesContent":["import { defineComponent, openBlock, createElementBlock, createElementVNode } from 'vue';\nimport _export_sfc from './_virtual/plugin-vue_export-helper.mjs';\n\nconst _sfc_main = defineComponent({\n name: \"Coin\"\n});\nconst _hoisted_1 = {\n viewBox: \"0 0 1024 1024\",\n xmlns: \"http://www.w3.org/2000/svg\"\n};\nconst _hoisted_2 = /* @__PURE__ */ createElementVNode(\"path\", {\n fill: \"currentColor\",\n d: \"m161.92 580.736 29.888 58.88C171.328 659.776 160 681.728 160 704c0 82.304 155.328 160 352 160s352-77.696 352-160c0-22.272-11.392-44.16-31.808-64.32l30.464-58.432C903.936 615.808 928 657.664 928 704c0 129.728-188.544 224-416 224S96 833.728 96 704c0-46.592 24.32-88.576 65.92-123.264z\"\n}, null, -1);\nconst _hoisted_3 = /* @__PURE__ */ createElementVNode(\"path\", {\n fill: \"currentColor\",\n d: \"m161.92 388.736 29.888 58.88C171.328 467.84 160 489.792 160 512c0 82.304 155.328 160 352 160s352-77.696 352-160c0-22.272-11.392-44.16-31.808-64.32l30.464-58.432C903.936 423.808 928 465.664 928 512c0 129.728-188.544 224-416 224S96 641.728 96 512c0-46.592 24.32-88.576 65.92-123.264z\"\n}, null, -1);\nconst _hoisted_4 = /* @__PURE__ */ createElementVNode(\"path\", {\n fill: \"currentColor\",\n d: \"M512 544c-227.456 0-416-94.272-416-224S284.544 96 512 96s416 94.272 416 224-188.544 224-416 224zm0-64c196.672 0 352-77.696 352-160S708.672 160 512 160s-352 77.696-352 160 155.328 160 352 160z\"\n}, null, -1);\nconst _hoisted_5 = [\n _hoisted_2,\n _hoisted_3,\n _hoisted_4\n];\nfunction _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {\n return openBlock(), createElementBlock(\"svg\", _hoisted_1, _hoisted_5);\n}\nvar coin = /* @__PURE__ */ _export_sfc(_sfc_main, [[\"render\", _sfc_render]]);\n\nexport { coin as default };\n","import { defineComponent, openBlock, createElementBlock, createElementVNode } from 'vue';\nimport _export_sfc from './_virtual/plugin-vue_export-helper.mjs';\n\nconst _sfc_main = defineComponent({\n name: \"Document\"\n});\nconst _hoisted_1 = {\n viewBox: \"0 0 1024 1024\",\n xmlns: \"http://www.w3.org/2000/svg\"\n};\nconst _hoisted_2 = /* @__PURE__ */ createElementVNode(\"path\", {\n fill: \"currentColor\",\n d: \"M832 384H576V128H192v768h640V384zm-26.496-64L640 154.496V320h165.504zM160 64h480l256 256v608a32 32 0 0 1-32 32H160a32 32 0 0 1-32-32V96a32 32 0 0 1 32-32zm160 448h384v64H320v-64zm0-192h160v64H320v-64zm0 384h384v64H320v-64z\"\n}, null, -1);\nconst _hoisted_3 = [\n _hoisted_2\n];\nfunction _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {\n return openBlock(), createElementBlock(\"svg\", _hoisted_1, _hoisted_3);\n}\nvar document = /* @__PURE__ */ _export_sfc(_sfc_main, [[\"render\", _sfc_render]]);\n\nexport { document as default };\n","import { defineComponent, openBlock, createElementBlock, createElementVNode } from 'vue';\nimport _export_sfc from './_virtual/plugin-vue_export-helper.mjs';\n\nconst _sfc_main = defineComponent({\n name: \"TakeawayBox\"\n});\nconst _hoisted_1 = {\n viewBox: \"0 0 1024 1024\",\n xmlns: \"http://www.w3.org/2000/svg\"\n};\nconst _hoisted_2 = /* @__PURE__ */ createElementVNode(\"path\", {\n fill: \"currentColor\",\n d: \"M832 384H192v448h640V384zM96 320h832V128H96v192zm800 64v480a32 32 0 0 1-32 32H160a32 32 0 0 1-32-32V384H64a32 32 0 0 1-32-32V96a32 32 0 0 1 32-32h896a32 32 0 0 1 32 32v256a32 32 0 0 1-32 32h-64zM416 512h192a32 32 0 0 1 0 64H416a32 32 0 0 1 0-64z\"\n}, null, -1);\nconst _hoisted_3 = [\n _hoisted_2\n];\nfunction _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {\n return openBlock(), createElementBlock(\"svg\", _hoisted_1, _hoisted_3);\n}\nvar takeawayBox = /* @__PURE__ */ _export_sfc(_sfc_main, [[\"render\", _sfc_render]]);\n\nexport { takeawayBox as default };\n","import { defineComponent, openBlock, createElementBlock, createElementVNode } from 'vue';\nimport _export_sfc from './_virtual/plugin-vue_export-helper.mjs';\n\nconst _sfc_main = defineComponent({\n name: \"Tickets\"\n});\nconst _hoisted_1 = {\n viewBox: \"0 0 1024 1024\",\n xmlns: \"http://www.w3.org/2000/svg\"\n};\nconst _hoisted_2 = /* @__PURE__ */ createElementVNode(\"path\", {\n fill: \"currentColor\",\n d: \"M192 128v768h640V128H192zm-32-64h704a32 32 0 0 1 32 32v832a32 32 0 0 1-32 32H160a32 32 0 0 1-32-32V96a32 32 0 0 1 32-32zm160 448h384v64H320v-64zm0-192h192v64H320v-64zm0 384h384v64H320v-64z\"\n}, null, -1);\nconst _hoisted_3 = [\n _hoisted_2\n];\nfunction _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {\n return openBlock(), createElementBlock(\"svg\", _hoisted_1, _hoisted_3);\n}\nvar tickets = /* @__PURE__ */ _export_sfc(_sfc_main, [[\"render\", _sfc_render]]);\n\nexport { tickets as default };\n","<template>\n <div class=\"overview\">\n <div\n class=\"card-list\"\n v-loading=\"isLoadingOverview\"\n element-loading-text=\"Loading...\"\n >\n <div v-for=\"c in cardList\" :key=\"c.type\" class=\"card\">\n <div class=\"logo\">\n <el-icon :color=\"c.color\">\n <component :is=\"c.icon\"></component>\n </el-icon>\n </div>\n <div class=\"content\">\n <div class=\"title\">{{ c.title }}</div>\n <div class=\"text\">{{ c.value }}</div>\n <div class=\"supplement\">{{ c.supplement }}</div>\n </div>\n </div>\n </div>\n <div class=\"panel\">\n <div class=\"p10 log-filter\">\n <span class=\"item\">\n <span class=\"label\">类型</span>\n <el-select\n v-model=\"filterLogType\"\n size=\"default\"\n placeholder=\"请选择日志类型\"\n >\n <el-option\n v-for=\"(item, idx) in logTypeList\"\n :key=\"idx\"\n :label=\"item.label\"\n :value=\"item.type\"\n ></el-option>\n </el-select>\n </span>\n <span class=\"item\">\n <el-input\n size=\"default\"\n clearable\n placeholder=\"请输入要检索的内容\"\n :prefix-icon=\"Search\"\n v-model=\"searchWord\"\n >\n </el-input>\n </span>\n <span class=\"item\">\n <el-button size=\"default\" :icon=\"Refresh\" @click=\"refreshLogs\"\n >刷新</el-button\n >\n </span>\n <span class=\"item\">\n <el-button\n size=\"default\"\n type=\"primary\"\n :icon=\"DataAnalysis\"\n @click=\"exportLogData\"\n >导出日志 {{ logs.length }} 条</el-button\n >\n </span>\n <span class=\"item\">\n <el-button\n size=\"default\"\n type=\"danger\"\n :icon=\"TakeawayBox\"\n :disabled=\"disableDelete\"\n @click=\"clearExpiredCompressFile\"\n v-loading=\"disableDelete\"\n >清理无效文件</el-button\n >\n </span>\n </div>\n <el-table\n tooltip-effect=\"dark\"\n height=\"400\"\n stripe\n border\n :default-sort=\"{ prop: 'date', order: 'descending' }\"\n :data=\"logs\"\n style=\"width: 100%\"\n >\n <el-table-column sortable prop=\"date\" label=\"日期\" width=\"180\">\n <template #default=\"scope\">{{\n formatDate(new Date(scope.row.date))\n }}</template>\n </el-table-column>\n <!-- <el-table-column prop=\"type\" label=\"类型\" width=\"100\">\n <template #default=\"scope\">{{ getLogsTypeText(scope.row.type) }}</template>\n </el-table-column>-->\n <el-table-column\n sortable\n prop=\"ip\"\n label=\"IP\"\n width=\"100\"\n ></el-table-column>\n <el-table-column\n min-width=\"160\"\n prop=\"msg\"\n label=\"内容\"\n ></el-table-column>\n <el-table-column fixed=\"right\" label=\"操作\" width=\"100\">\n <template #default=\"scope\">\n <el-button\n @click=\"handleDetail(scope.row.id)\"\n type=\"primary\"\n text\n size=\"small\"\n >查看详情</el-button\n >\n </template>\n </el-table-column>\n </el-table>\n\n <div class=\"flex fc p10\">\n <el-pagination\n :current-page=\"pageCurrent\"\n @current-change=\"handlePageChange\"\n background\n :page-count=\"pageCount\"\n :page-sizes=\"[10, 50, 100, 200, 500, 1000]\"\n :page-size=\"pageSize\"\n @size-change=\"handleSizeChange\"\n :total=\"logSumCount\"\n layout=\"total, sizes, prev, pager, next, jumper\"\n ></el-pagination>\n </div>\n </div>\n <el-dialog\n v-model=\"showDetail\"\n title=\"详细信息\"\n width=\"50%\"\n center\n :fullscreen=\"isMobile\"\n >\n <json-viewer\n :value=\"jsonData\"\n :expand-depth=\"5\"\n copyable\n boxed\n sort\n ></json-viewer>\n <template #footer>\n <span class=\"dialog-footer\">\n <el-button type=\"default\" @click=\"handleCopyDetail\">复制</el-button>\n <el-button type=\"primary\" @click=\"showDetail = false\">确定</el-button>\n </span>\n </template>\n </el-dialog>\n </div>\n</template>\n<script lang=\"ts\" setup>\nimport { computed, onMounted, reactive, ref, watchEffect } from 'vue'\nimport {\n User,\n Document,\n Tickets,\n DataBoard,\n Search,\n Refresh,\n DataAnalysis,\n Coin,\n TakeawayBox\n} from '@element-plus/icons-vue'\nimport { useStore } from 'vuex'\nimport { ElMessage } from 'element-plus'\nimport { SuperOverviewApi } from '@/apis'\nimport { copyRes, formatDate } from '@/utils/stringUtil'\nimport { tableToExcel } from '@/utils/networkUtil'\nimport { debounce } from '@/utils/other'\n\nconst $store = useStore()\n\nconst isMobile = computed(() => $store.getters['public/isMobile'])\n\nconst isLoadingOverview = ref(false)\nconst cardList = reactive([\n {\n type: 'user',\n title: '用户数量',\n value: '0',\n supplement: '较昨日 +0',\n icon: User,\n color: '#40c9c6'\n },\n {\n type: 'file',\n title: '记录/OSS',\n value: '0',\n supplement: '记录较昨日 +0',\n icon: Document,\n color: '#36a3f7'\n },\n {\n type: 'log',\n title: '日志数量',\n value: '0',\n supplement: '较昨日 +0',\n icon: Tickets,\n color: '#f4516c'\n },\n {\n type: 'pv',\n title: 'PV/UV',\n value: '0/0',\n supplement: '',\n icon: DataBoard,\n color: '#34bfa3'\n },\n {\n type: 'compress',\n title: '归档&无效文件',\n value: '0/0KB',\n supplement: '已失效0个',\n icon: Coin,\n color: '#e38013'\n }\n])\n// 刷新记录条数\nconst refreshCount = () => {\n isLoadingOverview.value = true\n SuperOverviewApi.getCount().then((res) => {\n const { user, file, log, pv, compress } = res.data\n cardList[0].value = `${user.sum}`\n cardList[0].supplement = `较昨日 +${user.recent}`\n cardList[1].value = `${file.server.sum}/${file.oss.sum} (${file.oss.size})`\n cardList[1].supplement = `记录较昨日 +${file.server.recent}`\n cardList[2].value = `${log.sum}`\n cardList[2].supplement = `较昨日 +${log.recent}`\n cardList[3].value = `${pv.today.sum}/${pv.today.uv}`\n cardList[3].supplement = `历史: ${pv.all.sum}/${pv.all.uv}`\n cardList[4].value = `${compress.all.sum}/${compress.all.size}`\n cardList[4].supplement = `已失效 ${compress.expired.sum}/${compress.expired.size}`\n isLoadingOverview.value = false\n })\n}\n\nconst disableDelete = ref(false)\nconst clearExpiredCompressFile = () => {\n disableDelete.value = true\n SuperOverviewApi.clearExpiredCompressFile().then(() => {\n setTimeout(() => {\n ElMessage.success('清理成功,数据同步可能有延迟')\n disableDelete.value = false\n refreshCount()\n }, 2000)\n })\n}\n\n// 日志\nconst logs: any[] = reactive([])\n\n// function getLogsTypeText(type: string) {\n// const logsTypeText: any = {\n// request: '网络请求',\n// behavior: '用户行为',\n// error: '错误',\n// pv: '页面访问',\n// }\n// return logsTypeText[type]\n// }\n// 筛选的日志\nconst filterLogType = ref('behavior')\nconst searchWord = ref('')\nconst logTypeList = reactive([\n {\n label: '用户行为',\n type: 'behavior'\n },\n {\n label: '网络请求',\n type: 'request'\n },\n {\n label: '服务端错误',\n type: 'error'\n },\n {\n label: '页面访问',\n type: 'pv'\n }\n])\n\n// 分页\n// 页大小\nconst pageSize = ref(10)\nconst handleSizeChange = (v: number) => {\n pageSize.value = v\n}\n// 总条数\nconst logSumCount = ref(0)\nconst pageCount = computed(() => {\n const t = Math.ceil(logSumCount.value / pageSize.value)\n return t\n})\nconst pageCurrent = ref(1)\nconst handlePageChange = (idx: number) => {\n pageCurrent.value = idx\n}\n\nconst refreshLogs = debounce(\n () => {\n SuperOverviewApi.getLogMsg(\n pageSize.value,\n pageCurrent.value,\n filterLogType.value,\n searchWord.value\n ).then((res) => {\n logs.splice(0, logs.length)\n logs.push(...res.data.logs)\n logSumCount.value = res.data.sum\n })\n },\n 100,\n false\n)\n\nwatchEffect(() => {\n if (filterLogType.value) {\n pageCurrent.value = 1\n }\n})\n\nwatchEffect(() => {\n if (searchWord.value !== undefined) {\n refreshLogs()\n }\n})\n\nwatchEffect(() => {\n if (filterLogType.value) {\n refreshLogs()\n }\n})\n\nwatchEffect(() => {\n if (pageCurrent.value || pageSize.value) {\n refreshLogs()\n }\n})\n\nconst showDetail = ref(false)\nconst showData = ref('')\nconst handleDetail = (id) => {\n SuperOverviewApi.getLogMsgDetail(id).then((res) => {\n showDetail.value = true\n showData.value = JSON.stringify(res.data, null, 2)\n })\n}\nconst jsonData = computed(() => {\n try {\n return JSON.parse(showData.value)\n } catch (e) {\n return {}\n }\n})\nconst handleCopyDetail = () => {\n copyRes(showData.value)\n}\n\nconst exportLogData = () => {\n if (logs.length === 0) {\n return\n }\n const headers = ['日期', 'IP', '内容']\n const body = logs.map((v) => {\n const { date, ip, msg } = v\n return [formatDate(new Date(date)), ip, msg]\n })\n tableToExcel(\n headers,\n body,\n `导出日志_${logs.length}条${formatDate(\n new Date(),\n 'yyyy年MM月日hh时mm分ss秒'\n )}.xlsx`\n )\n ElMessage.success('导出成功')\n}\nonMounted(() => {\n refreshCount()\n})\n</script>\n\n<style scoped lang=\"scss\">\n@media screen and (max-width: 700px) {\n .card-list {\n margin-top: 40px;\n }\n\n .card {\n min-width: 300px;\n }\n\n .log-filter {\n justify-content: center;\n }\n}\n\n.overview {\n margin: 0 auto;\n}\n\n.card-list {\n display: flex;\n margin-top: 20px;\n justify-content: center;\n flex-wrap: wrap;\n}\n\n.card {\n margin: 10px;\n cursor: pointer;\n font-size: 12px;\n position: relative;\n overflow: hidden;\n color: #666;\n background: #fff;\n box-shadow: 4px 4px 40px rgb(0 0 0 / 5%);\n border-color: rgba(0, 0, 0, 0.05);\n min-width: 300px;\n\n .logo {\n float: left;\n margin: 4px 10px 0 10px;\n -webkit-transition: all 0.38s ease-out;\n transition: all 0.38s ease-out;\n border-radius: 6px;\n font-size: 48px;\n\n i {\n padding: 10px;\n }\n }\n\n .content {\n float: right;\n font-weight: 700;\n margin: 10px;\n margin-left: 0;\n\n .title {\n line-height: 18px;\n color: rgba(0, 0, 0, 0.45);\n font-size: 14px;\n text-align: right;\n }\n\n .text {\n font-size: 16px;\n text-align: right;\n }\n\n .supplement {\n font-size: 12px;\n font-weight: lighter;\n text-align: right;\n }\n }\n}\n\n.panel {\n max-width: 1024px;\n padding: 1em;\n background-color: #fff;\n margin: 10px auto;\n box-sizing: border-box;\n box-shadow: 0 2px 12px 0 rgb(0 0 0 / 10%);\n border-radius: 4px;\n}\n\n.log-filter {\n display: flex;\n flex-wrap: wrap;\n\n .item {\n margin-right: 10px;\n margin-bottom: 10px;\n\n .label {\n margin-right: 10px;\n font-size: 12px;\n }\n }\n}\n</style>\n"],"names":["_sfc_main","defineComponent","_hoisted_1","_hoisted_2","createElementVNode","_hoisted_3","_hoisted_4","_hoisted_5","_sfc_render","_ctx","_cache","$props","$setup","$data","$options","openBlock","createElementBlock","coin","_export_sfc","document","takeawayBox","tickets","$store","useStore","isMobile","computed","isLoadingOverview","ref","cardList","reactive","User","Document","Tickets","DataBoard","Coin","refreshCount","SuperOverviewApi","res","user","file","log","pv","compress","disableDelete","clearExpiredCompressFile","ElMessage","logs","filterLogType","searchWord","logTypeList","pageSize","handleSizeChange","v","logSumCount","pageCount","pageCurrent","handlePageChange","idx","refreshLogs","debounce","watchEffect","showDetail","showData","handleDetail","id","jsonData","e","handleCopyDetail","copyRes","exportLogData","headers","body","date","ip","msg","formatDate","tableToExcel","onMounted"],"mappings":"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","x_google_ignoreList":[0,1,2,3]}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{d as v,h as b,u as w,O as i,Z as x,o as g,bq as d,c as n,a as o,j as _,w as y,F as C,C as D,y as R,f as l,b as S,t as r,_ as k}from"./index-
|
|
2
|
-
//# sourceMappingURL=index-
|
|
1
|
+
import{d as v,h as b,u as w,O as i,Z as x,o as g,bq as d,c as n,a as o,j as _,w as y,F as C,C as D,y as R,f as l,b as S,t as r,_ as k}from"./index-ce410282.js";import{E}from"./el-switch-a175c6ff.js";import"./validator-001cb5f7.js";const B={class:"user"},N={class:"panel"},V={class:"routes"},$={class:"title"},F={class:"path"},M=v({__name:"index",setup(O){const u=b(),p=w(),h=i(()=>p.options.routes.filter(e=>{var t;return(t=e.meta)==null?void 0:t.allowDisabled})),c=x([]),m=e=>{d.addDisabledRoute(e.path,!e.disabled).then(()=>{e.disabled=!e.disabled})};return g(()=>{for(const e of h.value)d.checkDisabledRoute(e.path).then(t=>{var a;c.push({path:e.path,name:e.name.toString(),title:e.meta.title,disabled:!!((a=t.data)!=null&&a.status)})})}),i(()=>u.getters["public/isMobile"]),(e,t)=>{const a=R,f=E;return l(),n("div",B,[o("div",N,[_(a,null,{default:y(()=>[S("部分路由管理")]),_:1}),o("ul",V,[(l(!0),n(C,null,D(c,s=>(l(),n("li",{key:s.name},[_(f,{onChange:j=>m(s),value:!s.disabled,style:{"--el-switch-on-color":"#13ce66","--el-switch-off-color":"#ff4949"}},null,8,["onChange","value"]),o("span",$,r(s.title),1),o("span",F,r(s.path),1)]))),128))])])])}}});const L=k(M,[["__scopeId","data-v-6edac847"]]);export{L as default};
|
|
2
|
+
//# sourceMappingURL=index-39c9824a.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index-
|
|
1
|
+
{"version":3,"file":"index-39c9824a.js","sources":["../../src/pages/dashboard/manage/config/index.vue"],"sourcesContent":["<template>\n <div class=\"user\">\n <div class=\"panel\">\n <el-divider>部分路由管理</el-divider>\n <ul class=\"routes\">\n <li v-for=\"r in showRoutes\" :key=\"r.name\">\n <el-switch\n @change=\"handleChangeRoute(r)\"\n :value=\"!r.disabled\"\n style=\"\n --el-switch-on-color: #13ce66;\n --el-switch-off-color: #ff4949;\n \"\n />\n <span class=\"title\">{{ r.title }}</span>\n <span class=\"path\">{{ r.path }}</span>\n </li>\n </ul>\n </div>\n </div>\n</template>\n<script lang=\"ts\" setup>\nimport { ElMessage } from 'element-plus'\nimport { computed, onMounted, reactive, ref } from 'vue'\nimport { useStore } from 'vuex'\nimport { useRouter } from 'vue-router'\nimport { SuperOverviewApi } from '@/apis'\n\nconst $store = useStore()\nconst $router = useRouter()\nconst routes = computed(() =>\n $router.options.routes.filter((v) => v.meta?.allowDisabled)\n)\nconst showRoutes = reactive<\n {\n path: string\n name: string\n title: string\n disabled: boolean\n }[]\n>([])\n\nconst handleChangeRoute = (r: typeof showRoutes[0]) => {\n SuperOverviewApi.addDisabledRoute(r.path, !r.disabled).then(() => {\n r.disabled = !r.disabled\n })\n}\nonMounted(() => {\n for (const r of routes.value) {\n SuperOverviewApi.checkDisabledRoute(r.path).then((v) => {\n showRoutes.push({\n path: r.path,\n name: r.name.toString(),\n title: r.meta.title,\n disabled: !!v.data?.status\n })\n })\n }\n})\nconst isMobile = computed(() => $store.getters['public/isMobile'])\n</script>\n\n<style scoped lang=\"scss\">\n@media screen and (max-width: 700px) {\n .user {\n margin-top: 40px !important;\n }\n}\n\n.user {\n margin: 0 auto;\n}\n\n.panel {\n max-width: 1256px;\n padding: 1em;\n background-color: #fff;\n margin: 10px auto;\n box-sizing: border-box;\n box-shadow: 0 2px 12px 0 rgb(0 0 0 / 10%);\n border-radius: 4px;\n}\n\n.routes {\n max-width: 500px;\n margin: 0 auto;\n li {\n display: flex;\n padding: 20px;\n align-items: center;\n .title {\n font-weight: bold;\n margin: 0 10px;\n }\n }\n}\n</style>\n"],"names":["$store","useStore","$router","useRouter","routes","computed","v","_a","showRoutes","reactive","handleChangeRoute","r","SuperOverviewApi","onMounted"],"mappings":"mWA4BA,MAAAA,EAAAC,IACAC,EAAAC,IACAC,EAAAC,EAAe,IAAAH,EAAA,QAAA,OAAA,OAAAI,GAAA,OAAA,OAAAC,EAAAD,EAAA,OAAA,YAAAC,EAAA,cAAA,CAC6C,EAE5DC,EAAAC,EAAA,CAAA,CAAA,EASAC,EAAAC,GAAA,CACEC,EAAA,iBAAAD,EAAA,KAAA,CAAAA,EAAA,QAAA,EAAA,KAAA,IAAA,CACEA,EAAA,SAAA,CAAAA,EAAA,QAAgB,CAAA,CACjB,EAEH,OAAAE,EAAA,IAAA,CACE,UAAAF,KAAAP,EAAA,MACEQ,EAAA,mBAAAD,EAAA,IAAA,EAAA,KAAAL,GAAA,OACEE,EAAA,KAAA,CAAgB,KAAAG,EAAA,KACN,KAAAA,EAAA,KAAA,SAAA,EACc,MAAAA,EAAA,KAAA,MACR,SAAA,CAAA,GAAAJ,EAAAD,EAAA,OAAA,MAAAC,EAAA,OACM,CAAA,CACrB,CAAA,CAEL,CAAA,EAEFF,EAAA,IAAAL,EAAA,QAAA,iBAAA,CAAA"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{a4 as lt,g as Ae,d as Ce,f as r,c as y,a as s,h as at,a1 as ot,r as _,Z as H,O as C,a5 as Ne,o as nt,j as e,w as o,k as u,a6 as P,b as n,a7 as we,F as ye,C as ke,D as $,a8 as xe,E as c,s as F,a9 as K,aa as st,ab as L,x as it,v as rt,p as dt,e as ut,t as w,S as I,ac as ct,ad as pt,ae as mt,I as ft,af as _t,_ as vt}from"./index-62c7029f.js";import{v as ht}from"./el-loading-5d91bb6c.js";import{E as gt,a as wt}from"./el-form-item-f40006bf.js";import{E as yt}from"./el-dialog-463960e0.js";import{T as R,E as kt}from"./tip-00ddf749.js";import{E as xt,s as bt}from"./el-pagination-ffb99240.js";import{E as Ct,a as zt}from"./el-select-7d894fd0.js";import{E as Et,a as St}from"./el-table-column-22352e92.js";import{E as Vt}from"./el-switch-2eda0412.js";import{E as $t,a as Fe,b as It,c as Dt}from"./el-dropdown-item-7c33f4fa.js";import{L as Tt,I as Nt}from"./index-34bd5929.js";import{D as z,A as Le,f as be}from"./index-9e6bd406.js";import{E as Me}from"./index-17fa8fb7.js";import{r as Ft}from"./refresh-6ae903c0.js";import{d as Lt}from"./data-analysis-13490516.js";import"./isEqual-9c466456.js";import"./index-6d7ac779.js";import"./validator-853854a1.js";import"./aria-bc8e8b0f.js";function Mt(D,E,B=[]){return lt.post("/action/download/list",{pageSize:D,pageIndex:E,extraIds:B})}const At={getDownloadActions:Mt},Ut=Ce({name:"Download"}),Ot={viewBox:"0 0 1024 1024",xmlns:"http://www.w3.org/2000/svg"},Ht=s("path",{fill:"currentColor",d:"M160 832h704a32 32 0 1 1 0 64H160a32 32 0 1 1 0-64zm384-253.696 236.288-236.352 45.248 45.248L508.8 704 192 387.2l45.248-45.248L480 584.704V128h64v450.304z"},null,-1),Pt=[Ht];function Rt(D,E,B,M,J,A){return r(),y("svg",Ot,Pt)}var Bt=Ae(Ut,[["render",Rt]]);const Jt=Ce({name:"Picture"}),qt={viewBox:"0 0 1024 1024",xmlns:"http://www.w3.org/2000/svg"},jt=s("path",{fill:"currentColor",d:"M160 160v704h704V160H160zm-32-64h768a32 32 0 0 1 32 32v768a32 32 0 0 1-32 32H128a32 32 0 0 1-32-32V128a32 32 0 0 1 32-32z"},null,-1),Wt=s("path",{fill:"currentColor",d:"M384 288q64 0 64 64t-64 64q-64 0-64-64t64-64zM185.408 876.992l-50.816-38.912L350.72 556.032a96 96 0 0 1 134.592-17.856l1.856 1.472 122.88 99.136a32 32 0 0 0 44.992-4.864l216-269.888 49.92 39.936-215.808 269.824-.256.32a96 96 0 0 1-135.04 14.464l-122.88-99.072-.64-.512a32 32 0 0 0-44.8 5.952L185.408 876.992z"},null,-1),Xt=[jt,Wt];function Zt(D,E,B,M,J,A){return r(),y("svg",qt,Xt)}var Gt=Ae(Jt,[["render",Zt]]);const fe=D=>(dt("data-v-7d8411d6"),D=D(),ut(),D),Kt={class:"files"},Qt={class:"panel header"},Yt={class:"item"},el=fe(()=>s("span",{class:"label"},"分类",-1)),tl={class:"item"},ll=fe(()=>s("span",{class:"label"},"任务",-1)),al={class:"item"},ol={class:"item"},nl={class:"panel"},sl={class:"export-btns flex fac"},il={class:"control-item"},rl={class:"control-item"},dl={class:"control-item"},ul={class:"control-item"},cl={class:"panel"},pl={"element-loading-text":"...",style:{"--el-loading-spinner-size":"20px"}},ml={class:"panel"},fl={key:0},_l={key:1},vl={key:2},hl={key:0},gl={key:1},wl={key:2},yl={key:3},kl={class:"flex fc"},xl={class:"panel"},bl=fe(()=>s("strong",null,[n("如果你觉得应用不错,"),s("a",{style:{color:"#409eff"},href:"http://docs.ep.sugarat.top/praise/index.html",target:"_blank",rel:"noopener noreferrer"},"请作者喝茶 🍵")],-1)),Cl={class:"imageDes"},zl=fe(()=>s("div",{class:"imageLoading"},"Loading...",-1)),El={class:"imageLoading"},Sl={class:"text-btns"},Vl={class:"panel flex fc"},$l=Ce({__name:"index",setup(D){const E=at(),B=ot(),M=_(!1),J=_(""),A=_(localStorage.getItem("ep-show-images")==="true"),Q=_(!0),Y=_(!1),se=_(!1),v=H({actions:[],pageSize:3,pageCount:0,pageCurrent:1,pageTotal:0,compressTask:[]}),q=()=>{const t=JSON.parse(localStorage.getItem("ep_compress_task")||"[]");v.compressTask=t,At.getDownloadActions(v.pageSize,v.pageCurrent,t.map(a=>a.id)).then(a=>{const{actions:i,sum:f}=a.data,d=!!i.find(p=>p.status===z.ARCHIVE);i.filter(p=>p.type===Le.Compress).forEach(p=>{const m=t.findIndex(b=>b.id===p.id);p.status===z.SUCCESS&&m!==-1&&(J.value=p.url,M.value=!0,xe(p.url),t.splice(m,1)),p.status===z.ARCHIVE&&m===-1&&t.push(p),p.status===z.FAIL&&m!==-1&&t.splice(m,1)}),v.compressTask=t,localStorage.setItem("ep_compress_task",JSON.stringify(t)),d&&setTimeout(q,1e3),v.pageTotal=f,v.actions=i,v.pageCount=Math.ceil(f/v.pageSize)})},Ue=t=>{v.pageCurrent=t,q()},ze=(t,a)=>{if(t.length===0){c.warning("表格中没有可导出的内容");return}const i=["提交时间","任务","文件名","大小"];Y.value&&i.push("原文件名"),Q.value&&i.push("姓名");const f=i.map(m=>({value:m,row:2})),d=t.reduce((m,b)=>(JSON.parse(b.info).forEach(U=>{m.includes(U.text)||m.push(U.text)}),m),[]);f.push({value:"提交信息",col:d.length});const p=t.map(m=>{const{date:b,task_name:U,name:ce,size:Z,people:g}=m,V=JSON.parse(m.info).reduce((G,T)=>(G[T.text]=T.value,G),{}),pe=d.map(G=>{var T;return(T=V[G])!=null?T:"-"}),O=[F(new Date(b)),U,ce,K(Z)];return Y.value&&O.push(m.origin_name||"-"),Q.value&&O.push(g||"-"),O.push(...pe),O});p.unshift(d),st(f,p,a||"数据导出_".concat(F(new Date,"yyyy年MM月日hh时mm分ss秒"),".xlsx")),c.success("导出成功")},Oe=C(()=>E.state.category.categoryList),ee=_("all"),te=C(()=>E.state.task.taskList),S=_("all"),ie=C(()=>ee.value==="all"?te.value:(S.value="all",te.value.filter(t=>t.category===ee.value))),He=C(()=>{const t=ie.value.find(a=>a.key===S.value);return t==null?void 0:t.name});Ne(()=>{te.value.length&&te.value.some(t=>t.key===B.query.task)&&(S.value="".concat(B.query.task))});const re=_(!1),k=H([]),Ee=()=>{re.value=!0,k.splice(0,k.length),L.getFileList().then(t=>{k.push(...t.data.files),re.value=!1})},_e=_(),le=_(""),ae=C(()=>k.filter(t=>ee.value==="no-task"?te.value.every(a=>a.key!==t.task_key):ie.value.length===0?!1:S.value==="all"?ie.value.find(a=>a.key===t.task_key):S.value===t.task_key).filter(t=>le.value?JSON.stringify([F(new Date(t.date)),K(t.size),t.people,t.name,t.task_name,t.info]).replace(/[:'"{},[\]]/g,"").includes(le.value):!0)),Pe=()=>{_e.value.clearSelection()},x=H([]),Se=t=>{x.splice(0,x.length),x.push(...t)},j=_(!1),Ve=t=>{const a=x.map(i=>i.id);switch(t){case"download":if(x.length===0){c.warning("没有选中需要下载的内容");return}if(j.value){c.warning("已经有批量下载任务正在进行,请稍后再试");return}L.batchDownload(a,"批量下载_".concat(F(new Date,"yyyy年MM月日hh时mm分ss秒"))).then(()=>{q()}).catch(()=>{c.error("所选文件均已从服务器上移除"),j.value=!1}),c.info("开始归档选中的文件,请赖心等待");break;case"delete":if(x.length===0){c.warning("没有选中需要删除的内容");return}Me.confirm("删除后无法恢复,是否删除","数据无价,请谨慎操作").then(()=>{L.batchDel(a).then(()=>{k.splice(0,k.length,...k.filter(i=>!a.includes(i.id))),c.success("删除成功")})}).catch(()=>{c.info("取消")});break;case"excel":if(x.length===0){c.warning("没有选中需要导出的内容");return}ze(x,"批量导出_".concat(F(new Date,"yyyy年MM月日hh时mm分ss秒"),".xlsx")),c.success("导出成功");break}Pe()},ve=_(!1),de=H([]),Re=t=>{de.splice(0,de.length),de.push(...pt(t.info)),ve.value=!0},oe=_(!1),h=H({oldName:"",newName:"",suffix:"",id:-1}),Be=t=>{const{id:a,name:i}=t,f=mt(i);h.oldName=i,h.suffix=f,h.id=a,oe.value=!0},Je=()=>{if(be.test(h.newName)){c.error("文件名不能包含".concat(be.source,"等字符")),be.lastIndex=0;return}L.updateFilename(h.id,"".concat(h.newName).concat(h.suffix)).then(()=>{c.success("修改成功");const t=k.find(a=>a.id===h.id);t.name="".concat(h.newName).concat(h.suffix)}).catch(()=>{c.error("修改失败")}).finally(()=>{oe.value=!1})},qe=t=>{const{id:a,name:i}=t;L.getOneFileUrl(a).then(f=>{const{link:d}=f.data;M.value=!0,J.value=d,xe(d,i),q()}).catch(()=>{c.error("文件已从服务器上移除")})},je=t=>{const a=k.findIndex(i=>i===t);Me.confirm("确认删除此文件吗?","数据无价,请谨慎操作").then(()=>{L.deleteOneFile(t.id).then(()=>{c.success("删除成功"),k.splice(a,1)})}).catch(()=>{c.info("取消删除")})},W=_(6),We=t=>{W.value=t},Xe=C(()=>Math.ceil(ae.value.length/W.value)),ne=_(1),X=C(()=>{const t=(ne.value-1)*W.value,a=ne.value*W.value;return ae.value.slice(t,a)}),Ze=C(()=>K(ae.value.reduce((t,a)=>t+a.size,0))),Ge=C(()=>K(k.reduce((t,a)=>t+a.size,0))),Ke=t=>{ne.value=t},Qe=()=>{c.success({message:"刷新成功"}),Ee()},Ye=()=>{const t=k.filter(a=>a.task_key===S.value).map(a=>a.id);if(t.length===0){c.warning("该任务中没有数据");return}if(j.value){c.warning("已经有批量下载任务正在进行,请稍后再试");return}j.value=!0,L.batchDownload(t,He.value).then(()=>{q()}).catch(()=>{c.error("所选任务中的文件均已从服务器上移除")}).finally(()=>{setTimeout(()=>{j.value=!1},1e3)}),c.info("开始归档选中的文件,请赖心等待")},ue=H([]);H({order:null,prop:null});const $e=_(""),et=C(()=>ue.map(t=>t.preview)),Ie=t=>{$e.value=X.value[t].name};let he=!1;const De=()=>{const t=X.value.map(a=>a.id);t.length===0||he||(he=!0,L.checkImageFilePreviewUrl(t).then(a=>{he=!1;const{data:i}=a;i.length===0||i.length!==X.value.length||(ue.splice(0,ue.length),X.value.forEach((f,d)=>{const{cover:p,preview:m}=i[d];f.cover=p,ue.push({cover:p,preview:m,name:f.name,date:f.date,id:f.id})}))}))};Ne(()=>{if(window.localStorage.setItem("ep-show-images","".concat(A.value)),!!A.value){if(le.value||ne.value||W.value){De();return}De()}}),nt(()=>{Ee(),q(),E.dispatch("category/getCategory"),E.dispatch("task/getTask")});const Te=C(()=>E.getters["public/isMobile"]);return(t,a)=>{const i=zt,f=Ct,d=it,p=rt,m=ft,b=It,U=Dt,ce=$t,Z=Vt,g=St,V=_t,pe=Et,O=xt,G=kt,T=yt,ge=gt,tt=wt,me=ht;return r(),y("div",Kt,[s("div",Qt,[s("div",Yt,[el,e(f,{size:"default",modelValue:ee.value,"onUpdate:modelValue":a[0]||(a[0]=l=>ee.value=l),filterable:"",placeholder:"请选择"},{default:o(()=>[e(i,{label:"全部",value:"all"}),e(i,{label:"默认",value:"default"}),(r(!0),y(ye,null,ke(Oe.value,l=>(r(),$(i,{key:l.k,label:l.name,value:l.k},null,8,["label","value"]))),128)),e(i,{label:"无关联任务",value:"no-task"}),e(i,{label:"♻️回收站♻️",value:"trash"})]),_:1},8,["modelValue"])]),s("div",tl,[ll,e(f,{size:"default",modelValue:S.value,"onUpdate:modelValue":a[1]||(a[1]=l=>S.value=l),filterable:"",placeholder:"请选择"},{default:o(()=>[e(i,{label:"全部",value:"all"}),(r(!0),y(ye,null,ke(ie.value,l=>(r(),$(i,{key:l.key,label:l.name,value:l.key},null,8,["label","value"]))),128))]),_:1},8,["modelValue"])]),s("div",al,[e(d,{loading:j.value,disabled:S.value==="all",type:"primary",size:"default",icon:u(Bt),onClick:Ye},{default:o(()=>[n("下载任务中的文件")]),_:1},8,["loading","disabled","icon"])]),s("div",ol,[e(p,{size:"default",clearable:"",placeholder:"请输入要检索的内容","prefix-icon":u(bt),modelValue:le.value,"onUpdate:modelValue":a[2]||(a[2]=l=>le.value=l)},null,8,["prefix-icon","modelValue"])])]),s("div",nl,[s("div",sl,[e(ce,{trigger:"click",onCommand:Ve},{dropdown:o(()=>[e(U,null,{default:o(()=>[e(b,{disabled:x.length===0,command:"download"},{default:o(()=>[n("下载")]),_:1},8,["disabled"]),e(b,{disabled:x.length===0,command:"delete"},{default:o(()=>[n("删除")]),_:1},8,["disabled"]),e(b,{disabled:x.length===0,command:"excel"},{default:o(()=>[n("导出记录")]),_:1},8,["disabled"])]),_:1})]),default:o(()=>[e(d,{type:"primary",size:"default"},{default:o(()=>[n(" 批量操作"),e(m,{class:"el-icon--right"},{default:o(()=>[e(u(Fe))]),_:1})]),_:1})]),_:1}),P(s("div",null,[e(ce,{trigger:"click",onCommand:Ve},{dropdown:o(()=>[e(U,null,{default:o(()=>[e(b,{command:"download"},{default:o(()=>[n("下载")]),_:1}),e(b,{command:"delete"},{default:o(()=>[n("删除")]),_:1}),e(b,{command:"excel"},{default:o(()=>[n("导出记录")]),_:1})]),_:1})]),default:o(()=>[e(d,{type:"primary",disabled:x.length===0,size:"default"},{default:o(()=>[n(" 批量操作 "),e(m,null,{default:o(()=>[e(u(Fe))]),_:1})]),_:1},8,["disabled"])]),_:1})],512),[[we,!1]]),e(d,{size:"default",icon:u(Ft),onClick:Qe},{default:o(()=>[n("刷新")]),_:1},8,["icon"]),e(d,{title:"导出表格中所有的数据",type:"success",size:"default",icon:u(Lt),onClick:a[3]||(a[3]=()=>{ze(ae.value,"筛选数据导出_".concat(u(F)(new Date,"yyyy年MM月日hh时mm分ss秒"),".xlsx"))}),disabled:X.value.length===0},{default:o(()=>[n("导出记录")]),_:1},8,["icon","disabled"]),s("div",il,[n(" 显示图片 "),e(Z,{"inline-prompt":"",modelValue:A.value,"onUpdate:modelValue":a[4]||(a[4]=l=>A.value=l),"active-color":"#13ce66","inactive-color":"#ff4949","active-text":"是","inactive-text":"否"},null,8,["modelValue"])]),s("div",rl,[n(" 展示原文件名 "),e(Z,{"inline-prompt":"",modelValue:Y.value,"onUpdate:modelValue":a[5]||(a[5]=l=>Y.value=l),"active-color":"#13ce66","inactive-color":"#ff4949","active-text":"是","inactive-text":"否"},null,8,["modelValue"])]),s("div",dl,[n(" 显示提交人姓名 "),e(Z,{"inline-prompt":"",modelValue:Q.value,"onUpdate:modelValue":a[6]||(a[6]=l=>Q.value=l),"active-color":"#13ce66","inactive-color":"#ff4949","active-text":"是","inactive-text":"否"},null,8,["modelValue"])]),s("div",ul,[n(" ⏰ 查看下载历史 "),e(Z,{modelValue:se.value,"onUpdate:modelValue":a[7]||(a[7]=l=>se.value=l),style:{"--el-switch-on-color":"#13ce66","--el-switch-off-color":"#ff4949"}},null,8,["modelValue"])])])]),P(s("div",cl,[e(R,{style:{"font-size":"16px"}},{default:o(()=>[n("正在进行归档的任务 "+w(v.compressTask.length)+"个",1)]),_:1}),e(R,null,{default:o(()=>[n("详细归档记录点击右上角 “⏰查看下载历史”")]),_:1}),(r(!0),y(ye,null,ke(v.compressTask,(l,N)=>(r(),y("p",{key:l.id,class:"tc",style:{"margin-top":"10px"}},[n(w(N+1)+". "+w(l.tip)+" ",1),P(s("span",pl,null,512),[[me,!0]])]))),128))],512),[[we,v.compressTask.length&&!se.value]]),P(s("div",ml,[e(R,{style:{"font-size":"16px"}},{default:o(()=>[n("”❤️下面展示历史的下载记录与归档任务完成情况❤️“")]),_:1}),e(R,null,{default:o(()=>[n("”再也不需要在页面停留等待归档完成“")]),_:1}),s("div",null,[P((r(),$(pe,{"element-loading-text":"Loading...","tooltip-effect":"dark",multipleTable:"",ref_key:"multipleTable",ref:_e,onSelectionChange:Se,stripe:"",border:"","default-sort":{prop:"date",order:"descending"},"max-height":666,data:v.actions,style:{width:"100%"}},{default:o(()=>[e(g,{prop:"date",label:"触发时间",width:"200"},{default:o(l=>[n(w(u(F)(new Date(l.row.date))),1)]),_:1}),e(g,{prop:"tip",label:"文件信息"}),e(g,{prop:"type",label:"任务类型"},{default:o(l=>[l.row.type===u(Le).Compress?(r(),$(V,{key:0,type:"primary"},{default:o(()=>[n("归档下载")]),_:1})):(r(),$(V,{key:1,type:"default"},{default:o(()=>[n("普通下载")]),_:1}))]),_:1}),e(g,{prop:"size",label:"大小",width:"100"},{default:o(l=>[l.row.status===u(z).ARCHIVE?(r(),y("span",fl,[e(V,{type:"danger"},{default:o(()=>[n("归档中...")]),_:1})])):l.row.status!==u(z).FAIL?(r(),y("span",_l,w(l.row.size?u(K)(l.row.size):"未知大小"),1)):I("",!0),l.row.status===u(z).FAIL?(r(),y("span",vl,[e(V,{type:"danger"},{default:o(()=>[n("归档失败")]),_:1})])):I("",!0)]),_:1}),e(g,{fixed:"right",label:"操作",width:"140"},{default:o(l=>[l.row.status===u(z).ARCHIVE?P((r(),y("div",hl,[n(" 归档中... ")])),[[me,!0]]):I("",!0),l.row.status===u(z).EXPIRED?(r(),y("div",gl," 链接已失效 ")):I("",!0),l.row.status===u(z).FAIL?(r(),y("div",wl," 联系开发者,提供错误信息:"+w(l.row.error),1)):I("",!0),l.row.status===u(z).SUCCESS?(r(),y("div",yl,[e(V,{onClick:N=>u(xe)(l.row.url),type:"primary"},{default:o(()=>[n("下载")]),_:2},1032,["onClick"]),e(V,{type:"success",style:{"margin-left":"10px"},onClick:N=>u(ct)(l.row.url)},{default:o(()=>[n("链接")]),_:2},1032,["onClick"]),e(V,{type:"warning",style:{"margin-left":"10px"},onClick:()=>{M.value=!0,J.value=l.row.url}},{default:o(()=>[n("二维码")]),_:2},1032,["onClick"])])):I("",!0)]),_:1})]),_:1},8,["data"])),[[me,re.value]]),s("div",kl,[e(O,{small:"","current-page":v.pageCurrent,"page-count":v.pageCount,total:v.pageTotal,layout:"total, prev, pager, next",onCurrentChange:Ue},null,8,["current-page","page-count","total"])])])],512),[[we,se.value]]),s("div",xl,[e(R,null,{default:o(()=>[n("空间占用情况:"+w(Ze.value)+" / "+w(Ge.value),1)]),_:1}),e(R,null,{default:o(()=>[n("↑ 仅供使用者参考,应用无存储空间上限,也不收费")]),_:1}),e(R,null,{default:o(()=>[bl]),_:1}),P((r(),$(pe,{"element-loading-text":"Loading...","tooltip-effect":"dark",multipleTable:"",ref_key:"multipleTable",ref:_e,onSelectionChange:Se,stripe:"",border:"","max-height":666,data:X.value,style:{width:"100%"}},{default:o(()=>[e(g,{type:"selection",width:"55"}),e(g,{prop:"date",label:"提交时间",width:"160"},{default:o(l=>[n(w(u(F)(new Date(l.row.date))),1)]),_:1}),e(g,{prop:"task_name",label:"任务",width:"150"}),e(g,{prop:"name",label:"文件名",width:"200"}),Y.value?(r(),$(g,{key:0,prop:"origin_name",label:"原文件名",width:"200"},{default:o(l=>[n(w(l.row.origin_name||"-"),1)]),_:1})):I("",!0),e(g,{prop:"size",label:"大小"},{default:o(l=>[n(w(l.row.size===0?"未知大小":u(K)(l.row.size)),1)]),_:1}),A.value?(r(),$(g,{key:1,label:"缩略图",width:"120"},{default:o(l=>[e(G,{onSwitch:Ie,onClick:N=>Ie(l.$index),"preview-teleported":"","preview-src-list":et.value,"initial-index":l.$index,lazy:"",style:{width:"100px",height:"100px"},src:l.row.cover,fit:"cover"},{viewer:o(()=>[s("div",Cl,w($e.value),1)]),placeholder:o(()=>[zl]),error:o(()=>[s("div",El,[n(" 不支持 "),e(m,null,{default:o(()=>[e(u(Gt))]),_:1})])]),_:2},1032,["onClick","preview-src-list","initial-index","src"])]),_:1})):I("",!0),Q.value?(r(),$(g,{key:2,prop:"people",width:"100",label:"限制名单"},{default:o(l=>[n(w(l.row.people||"-"),1)]),_:1})):I("",!0),e(g,{fixed:"right",label:"操作",width:"140"},{default:o(l=>[s("div",Sl,[e(d,{onClick:N=>Re(l.row),type:"primary",text:"",size:"small"},{default:o(()=>[n("查看提交信息")]),_:2},1032,["onClick"]),e(d,{onClick:N=>Be(l.row),type:"primary",text:"",size:"small"},{default:o(()=>[n("修改文件名")]),_:2},1032,["onClick"]),e(d,{onClick:N=>qe(l.row),type:"primary",text:"",size:"small"},{default:o(()=>[n("下载")]),_:2},1032,["onClick"]),e(d,{onClick:N=>je(l.row),type:"primary",text:"",size:"small"},{default:o(()=>[n("删除")]),_:2},1032,["onClick"])])]),_:1})]),_:1},8,["data"])),[[me,re.value]])]),s("div",Vl,[e(O,{"current-page":ne.value,onCurrentChange:Ke,background:"","page-count":Xe.value,"page-sizes":[6,10,50,100],"page-size":W.value,onSizeChange:We,total:ae.value.length,layout:"total, sizes, prev, pager, next, jumper"},null,8,["current-page","page-count","page-size","total"])]),e(T,{fullscreen:Te.value,title:"提交填写的信息",modelValue:ve.value,"onUpdate:modelValue":a[8]||(a[8]=l=>ve.value=l)},{default:o(()=>[e(Nt,{infos:de,disabled:!0},null,8,["infos"])]),_:1},8,["fullscreen","modelValue"]),e(Tt,{value:M.value,"onUpdate:value":a[9]||(a[9]=l=>M.value=l),title:"下载链接",link:J.value},null,8,["value","link"]),e(T,{fullscreen:Te.value,title:"修改文件名",modelValue:oe.value,"onUpdate:modelValue":a[13]||(a[13]=l=>oe.value=l)},{default:o(()=>[s("div",null,[e(tt,{"label-width":"100px",model:h},{default:o(()=>[e(ge,{label:"原文件名",prop:"newName"},{default:o(()=>[e(p,{modelValue:h.oldName,"onUpdate:modelValue":a[10]||(a[10]=l=>h.oldName=l),disabled:""},null,8,["modelValue"])]),_:1}),e(ge,{label:"新文件名",prop:"newName"},{default:o(()=>[e(p,{modelValue:h.newName,"onUpdate:modelValue":a[11]||(a[11]=l=>h.newName=l),placeholder:"请输入新文件名"},{append:o(()=>[n(w(h.suffix),1)]),_:1},8,["modelValue"])]),_:1}),e(ge,null,{default:o(()=>[e(d,{type:"success",onClick:Je},{default:o(()=>[n("保存")]),_:1}),e(d,{onClick:a[12]||(a[12]=l=>oe.value=!1)},{default:o(()=>[n("取消")]),_:1})]),_:1})]),_:1},8,["model"])])]),_:1},8,["fullscreen","modelValue"])])}}});const Zl=vt($l,[["__scopeId","data-v-7d8411d6"]]);export{Zl as default};
|
|
2
|
-
//# sourceMappingURL=index-
|
|
1
|
+
import{a4 as lt,g as Ae,d as Ce,f as r,c as y,a as s,h as at,a1 as ot,r as _,Z as H,O as C,a5 as Ne,o as nt,j as e,w as o,k as u,a6 as P,b as n,a7 as we,F as ye,C as ke,D as $,a8 as xe,E as c,s as F,a9 as K,aa as st,ab as L,x as it,v as rt,p as dt,e as ut,t as w,S as I,ac as ct,ad as pt,ae as mt,I as ft,af as _t,_ as vt}from"./index-ce410282.js";import{v as ht}from"./el-loading-2e8f5cae.js";import{E as gt,a as wt}from"./el-form-item-14709389.js";import{E as yt}from"./el-dialog-6d1c807a.js";import{T as R,E as kt}from"./tip-e392c57d.js";import{E as xt,s as bt}from"./el-pagination-257e3c38.js";import{E as Ct,a as zt}from"./el-select-ca05d15a.js";import{E as Et,a as St}from"./el-table-column-bccbd0ee.js";import{E as Vt}from"./el-switch-a175c6ff.js";import{E as $t,a as Fe,b as It,c as Dt}from"./el-dropdown-item-958bfc71.js";import{L as Tt,I as Nt}from"./index-c0ed4574.js";import{D as z,A as Le,f as be}from"./index-9e6bd406.js";import{E as Me}from"./index-9d8bb3cd.js";import{r as Ft}from"./refresh-3ba5bdd3.js";import{d as Lt}from"./data-analysis-b5271288.js";import"./isEqual-3a3c96c5.js";import"./index-05e1d8e9.js";import"./validator-001cb5f7.js";import"./aria-bc8e8b0f.js";function Mt(D,E,B=[]){return lt.post("/action/download/list",{pageSize:D,pageIndex:E,extraIds:B})}const At={getDownloadActions:Mt},Ut=Ce({name:"Download"}),Ot={viewBox:"0 0 1024 1024",xmlns:"http://www.w3.org/2000/svg"},Ht=s("path",{fill:"currentColor",d:"M160 832h704a32 32 0 1 1 0 64H160a32 32 0 1 1 0-64zm384-253.696 236.288-236.352 45.248 45.248L508.8 704 192 387.2l45.248-45.248L480 584.704V128h64v450.304z"},null,-1),Pt=[Ht];function Rt(D,E,B,M,J,A){return r(),y("svg",Ot,Pt)}var Bt=Ae(Ut,[["render",Rt]]);const Jt=Ce({name:"Picture"}),qt={viewBox:"0 0 1024 1024",xmlns:"http://www.w3.org/2000/svg"},jt=s("path",{fill:"currentColor",d:"M160 160v704h704V160H160zm-32-64h768a32 32 0 0 1 32 32v768a32 32 0 0 1-32 32H128a32 32 0 0 1-32-32V128a32 32 0 0 1 32-32z"},null,-1),Wt=s("path",{fill:"currentColor",d:"M384 288q64 0 64 64t-64 64q-64 0-64-64t64-64zM185.408 876.992l-50.816-38.912L350.72 556.032a96 96 0 0 1 134.592-17.856l1.856 1.472 122.88 99.136a32 32 0 0 0 44.992-4.864l216-269.888 49.92 39.936-215.808 269.824-.256.32a96 96 0 0 1-135.04 14.464l-122.88-99.072-.64-.512a32 32 0 0 0-44.8 5.952L185.408 876.992z"},null,-1),Xt=[jt,Wt];function Zt(D,E,B,M,J,A){return r(),y("svg",qt,Xt)}var Gt=Ae(Jt,[["render",Zt]]);const fe=D=>(dt("data-v-7d8411d6"),D=D(),ut(),D),Kt={class:"files"},Qt={class:"panel header"},Yt={class:"item"},el=fe(()=>s("span",{class:"label"},"分类",-1)),tl={class:"item"},ll=fe(()=>s("span",{class:"label"},"任务",-1)),al={class:"item"},ol={class:"item"},nl={class:"panel"},sl={class:"export-btns flex fac"},il={class:"control-item"},rl={class:"control-item"},dl={class:"control-item"},ul={class:"control-item"},cl={class:"panel"},pl={"element-loading-text":"...",style:{"--el-loading-spinner-size":"20px"}},ml={class:"panel"},fl={key:0},_l={key:1},vl={key:2},hl={key:0},gl={key:1},wl={key:2},yl={key:3},kl={class:"flex fc"},xl={class:"panel"},bl=fe(()=>s("strong",null,[n("如果你觉得应用不错,"),s("a",{style:{color:"#409eff"},href:"http://docs.ep.sugarat.top/praise/index.html",target:"_blank",rel:"noopener noreferrer"},"请作者喝茶 🍵")],-1)),Cl={class:"imageDes"},zl=fe(()=>s("div",{class:"imageLoading"},"Loading...",-1)),El={class:"imageLoading"},Sl={class:"text-btns"},Vl={class:"panel flex fc"},$l=Ce({__name:"index",setup(D){const E=at(),B=ot(),M=_(!1),J=_(""),A=_(localStorage.getItem("ep-show-images")==="true"),Q=_(!0),Y=_(!1),se=_(!1),v=H({actions:[],pageSize:3,pageCount:0,pageCurrent:1,pageTotal:0,compressTask:[]}),q=()=>{const t=JSON.parse(localStorage.getItem("ep_compress_task")||"[]");v.compressTask=t,At.getDownloadActions(v.pageSize,v.pageCurrent,t.map(a=>a.id)).then(a=>{const{actions:i,sum:f}=a.data,d=!!i.find(p=>p.status===z.ARCHIVE);i.filter(p=>p.type===Le.Compress).forEach(p=>{const m=t.findIndex(b=>b.id===p.id);p.status===z.SUCCESS&&m!==-1&&(J.value=p.url,M.value=!0,xe(p.url),t.splice(m,1)),p.status===z.ARCHIVE&&m===-1&&t.push(p),p.status===z.FAIL&&m!==-1&&t.splice(m,1)}),v.compressTask=t,localStorage.setItem("ep_compress_task",JSON.stringify(t)),d&&setTimeout(q,1e3),v.pageTotal=f,v.actions=i,v.pageCount=Math.ceil(f/v.pageSize)})},Ue=t=>{v.pageCurrent=t,q()},ze=(t,a)=>{if(t.length===0){c.warning("表格中没有可导出的内容");return}const i=["提交时间","任务","文件名","大小"];Y.value&&i.push("原文件名"),Q.value&&i.push("姓名");const f=i.map(m=>({value:m,row:2})),d=t.reduce((m,b)=>(JSON.parse(b.info).forEach(U=>{m.includes(U.text)||m.push(U.text)}),m),[]);f.push({value:"提交信息",col:d.length});const p=t.map(m=>{const{date:b,task_name:U,name:ce,size:Z,people:g}=m,V=JSON.parse(m.info).reduce((G,T)=>(G[T.text]=T.value,G),{}),pe=d.map(G=>{var T;return(T=V[G])!=null?T:"-"}),O=[F(new Date(b)),U,ce,K(Z)];return Y.value&&O.push(m.origin_name||"-"),Q.value&&O.push(g||"-"),O.push(...pe),O});p.unshift(d),st(f,p,a||"数据导出_".concat(F(new Date,"yyyy年MM月日hh时mm分ss秒"),".xlsx")),c.success("导出成功")},Oe=C(()=>E.state.category.categoryList),ee=_("all"),te=C(()=>E.state.task.taskList),S=_("all"),ie=C(()=>ee.value==="all"?te.value:(S.value="all",te.value.filter(t=>t.category===ee.value))),He=C(()=>{const t=ie.value.find(a=>a.key===S.value);return t==null?void 0:t.name});Ne(()=>{te.value.length&&te.value.some(t=>t.key===B.query.task)&&(S.value="".concat(B.query.task))});const re=_(!1),k=H([]),Ee=()=>{re.value=!0,k.splice(0,k.length),L.getFileList().then(t=>{k.push(...t.data.files),re.value=!1})},_e=_(),le=_(""),ae=C(()=>k.filter(t=>ee.value==="no-task"?te.value.every(a=>a.key!==t.task_key):ie.value.length===0?!1:S.value==="all"?ie.value.find(a=>a.key===t.task_key):S.value===t.task_key).filter(t=>le.value?JSON.stringify([F(new Date(t.date)),K(t.size),t.people,t.name,t.task_name,t.info]).replace(/[:'"{},[\]]/g,"").includes(le.value):!0)),Pe=()=>{_e.value.clearSelection()},x=H([]),Se=t=>{x.splice(0,x.length),x.push(...t)},j=_(!1),Ve=t=>{const a=x.map(i=>i.id);switch(t){case"download":if(x.length===0){c.warning("没有选中需要下载的内容");return}if(j.value){c.warning("已经有批量下载任务正在进行,请稍后再试");return}L.batchDownload(a,"批量下载_".concat(F(new Date,"yyyy年MM月日hh时mm分ss秒"))).then(()=>{q()}).catch(()=>{c.error("所选文件均已从服务器上移除"),j.value=!1}),c.info("开始归档选中的文件,请赖心等待");break;case"delete":if(x.length===0){c.warning("没有选中需要删除的内容");return}Me.confirm("删除后无法恢复,是否删除","数据无价,请谨慎操作").then(()=>{L.batchDel(a).then(()=>{k.splice(0,k.length,...k.filter(i=>!a.includes(i.id))),c.success("删除成功")})}).catch(()=>{c.info("取消")});break;case"excel":if(x.length===0){c.warning("没有选中需要导出的内容");return}ze(x,"批量导出_".concat(F(new Date,"yyyy年MM月日hh时mm分ss秒"),".xlsx")),c.success("导出成功");break}Pe()},ve=_(!1),de=H([]),Re=t=>{de.splice(0,de.length),de.push(...pt(t.info)),ve.value=!0},oe=_(!1),h=H({oldName:"",newName:"",suffix:"",id:-1}),Be=t=>{const{id:a,name:i}=t,f=mt(i);h.oldName=i,h.suffix=f,h.id=a,oe.value=!0},Je=()=>{if(be.test(h.newName)){c.error("文件名不能包含".concat(be.source,"等字符")),be.lastIndex=0;return}L.updateFilename(h.id,"".concat(h.newName).concat(h.suffix)).then(()=>{c.success("修改成功");const t=k.find(a=>a.id===h.id);t.name="".concat(h.newName).concat(h.suffix)}).catch(()=>{c.error("修改失败")}).finally(()=>{oe.value=!1})},qe=t=>{const{id:a,name:i}=t;L.getOneFileUrl(a).then(f=>{const{link:d}=f.data;M.value=!0,J.value=d,xe(d,i),q()}).catch(()=>{c.error("文件已从服务器上移除")})},je=t=>{const a=k.findIndex(i=>i===t);Me.confirm("确认删除此文件吗?","数据无价,请谨慎操作").then(()=>{L.deleteOneFile(t.id).then(()=>{c.success("删除成功"),k.splice(a,1)})}).catch(()=>{c.info("取消删除")})},W=_(6),We=t=>{W.value=t},Xe=C(()=>Math.ceil(ae.value.length/W.value)),ne=_(1),X=C(()=>{const t=(ne.value-1)*W.value,a=ne.value*W.value;return ae.value.slice(t,a)}),Ze=C(()=>K(ae.value.reduce((t,a)=>t+a.size,0))),Ge=C(()=>K(k.reduce((t,a)=>t+a.size,0))),Ke=t=>{ne.value=t},Qe=()=>{c.success({message:"刷新成功"}),Ee()},Ye=()=>{const t=k.filter(a=>a.task_key===S.value).map(a=>a.id);if(t.length===0){c.warning("该任务中没有数据");return}if(j.value){c.warning("已经有批量下载任务正在进行,请稍后再试");return}j.value=!0,L.batchDownload(t,He.value).then(()=>{q()}).catch(()=>{c.error("所选任务中的文件均已从服务器上移除")}).finally(()=>{setTimeout(()=>{j.value=!1},1e3)}),c.info("开始归档选中的文件,请赖心等待")},ue=H([]);H({order:null,prop:null});const $e=_(""),et=C(()=>ue.map(t=>t.preview)),Ie=t=>{$e.value=X.value[t].name};let he=!1;const De=()=>{const t=X.value.map(a=>a.id);t.length===0||he||(he=!0,L.checkImageFilePreviewUrl(t).then(a=>{he=!1;const{data:i}=a;i.length===0||i.length!==X.value.length||(ue.splice(0,ue.length),X.value.forEach((f,d)=>{const{cover:p,preview:m}=i[d];f.cover=p,ue.push({cover:p,preview:m,name:f.name,date:f.date,id:f.id})}))}))};Ne(()=>{if(window.localStorage.setItem("ep-show-images","".concat(A.value)),!!A.value){if(le.value||ne.value||W.value){De();return}De()}}),nt(()=>{Ee(),q(),E.dispatch("category/getCategory"),E.dispatch("task/getTask")});const Te=C(()=>E.getters["public/isMobile"]);return(t,a)=>{const i=zt,f=Ct,d=it,p=rt,m=ft,b=It,U=Dt,ce=$t,Z=Vt,g=St,V=_t,pe=Et,O=xt,G=kt,T=yt,ge=gt,tt=wt,me=ht;return r(),y("div",Kt,[s("div",Qt,[s("div",Yt,[el,e(f,{size:"default",modelValue:ee.value,"onUpdate:modelValue":a[0]||(a[0]=l=>ee.value=l),filterable:"",placeholder:"请选择"},{default:o(()=>[e(i,{label:"全部",value:"all"}),e(i,{label:"默认",value:"default"}),(r(!0),y(ye,null,ke(Oe.value,l=>(r(),$(i,{key:l.k,label:l.name,value:l.k},null,8,["label","value"]))),128)),e(i,{label:"无关联任务",value:"no-task"}),e(i,{label:"♻️回收站♻️",value:"trash"})]),_:1},8,["modelValue"])]),s("div",tl,[ll,e(f,{size:"default",modelValue:S.value,"onUpdate:modelValue":a[1]||(a[1]=l=>S.value=l),filterable:"",placeholder:"请选择"},{default:o(()=>[e(i,{label:"全部",value:"all"}),(r(!0),y(ye,null,ke(ie.value,l=>(r(),$(i,{key:l.key,label:l.name,value:l.key},null,8,["label","value"]))),128))]),_:1},8,["modelValue"])]),s("div",al,[e(d,{loading:j.value,disabled:S.value==="all",type:"primary",size:"default",icon:u(Bt),onClick:Ye},{default:o(()=>[n("下载任务中的文件")]),_:1},8,["loading","disabled","icon"])]),s("div",ol,[e(p,{size:"default",clearable:"",placeholder:"请输入要检索的内容","prefix-icon":u(bt),modelValue:le.value,"onUpdate:modelValue":a[2]||(a[2]=l=>le.value=l)},null,8,["prefix-icon","modelValue"])])]),s("div",nl,[s("div",sl,[e(ce,{trigger:"click",onCommand:Ve},{dropdown:o(()=>[e(U,null,{default:o(()=>[e(b,{disabled:x.length===0,command:"download"},{default:o(()=>[n("下载")]),_:1},8,["disabled"]),e(b,{disabled:x.length===0,command:"delete"},{default:o(()=>[n("删除")]),_:1},8,["disabled"]),e(b,{disabled:x.length===0,command:"excel"},{default:o(()=>[n("导出记录")]),_:1},8,["disabled"])]),_:1})]),default:o(()=>[e(d,{type:"primary",size:"default"},{default:o(()=>[n(" 批量操作"),e(m,{class:"el-icon--right"},{default:o(()=>[e(u(Fe))]),_:1})]),_:1})]),_:1}),P(s("div",null,[e(ce,{trigger:"click",onCommand:Ve},{dropdown:o(()=>[e(U,null,{default:o(()=>[e(b,{command:"download"},{default:o(()=>[n("下载")]),_:1}),e(b,{command:"delete"},{default:o(()=>[n("删除")]),_:1}),e(b,{command:"excel"},{default:o(()=>[n("导出记录")]),_:1})]),_:1})]),default:o(()=>[e(d,{type:"primary",disabled:x.length===0,size:"default"},{default:o(()=>[n(" 批量操作 "),e(m,null,{default:o(()=>[e(u(Fe))]),_:1})]),_:1},8,["disabled"])]),_:1})],512),[[we,!1]]),e(d,{size:"default",icon:u(Ft),onClick:Qe},{default:o(()=>[n("刷新")]),_:1},8,["icon"]),e(d,{title:"导出表格中所有的数据",type:"success",size:"default",icon:u(Lt),onClick:a[3]||(a[3]=()=>{ze(ae.value,"筛选数据导出_".concat(u(F)(new Date,"yyyy年MM月日hh时mm分ss秒"),".xlsx"))}),disabled:X.value.length===0},{default:o(()=>[n("导出记录")]),_:1},8,["icon","disabled"]),s("div",il,[n(" 显示图片 "),e(Z,{"inline-prompt":"",modelValue:A.value,"onUpdate:modelValue":a[4]||(a[4]=l=>A.value=l),"active-color":"#13ce66","inactive-color":"#ff4949","active-text":"是","inactive-text":"否"},null,8,["modelValue"])]),s("div",rl,[n(" 展示原文件名 "),e(Z,{"inline-prompt":"",modelValue:Y.value,"onUpdate:modelValue":a[5]||(a[5]=l=>Y.value=l),"active-color":"#13ce66","inactive-color":"#ff4949","active-text":"是","inactive-text":"否"},null,8,["modelValue"])]),s("div",dl,[n(" 显示提交人姓名 "),e(Z,{"inline-prompt":"",modelValue:Q.value,"onUpdate:modelValue":a[6]||(a[6]=l=>Q.value=l),"active-color":"#13ce66","inactive-color":"#ff4949","active-text":"是","inactive-text":"否"},null,8,["modelValue"])]),s("div",ul,[n(" ⏰ 查看下载历史 "),e(Z,{modelValue:se.value,"onUpdate:modelValue":a[7]||(a[7]=l=>se.value=l),style:{"--el-switch-on-color":"#13ce66","--el-switch-off-color":"#ff4949"}},null,8,["modelValue"])])])]),P(s("div",cl,[e(R,{style:{"font-size":"16px"}},{default:o(()=>[n("正在进行归档的任务 "+w(v.compressTask.length)+"个",1)]),_:1}),e(R,null,{default:o(()=>[n("详细归档记录点击右上角 “⏰查看下载历史”")]),_:1}),(r(!0),y(ye,null,ke(v.compressTask,(l,N)=>(r(),y("p",{key:l.id,class:"tc",style:{"margin-top":"10px"}},[n(w(N+1)+". "+w(l.tip)+" ",1),P(s("span",pl,null,512),[[me,!0]])]))),128))],512),[[we,v.compressTask.length&&!se.value]]),P(s("div",ml,[e(R,{style:{"font-size":"16px"}},{default:o(()=>[n("”❤️下面展示历史的下载记录与归档任务完成情况❤️“")]),_:1}),e(R,null,{default:o(()=>[n("”再也不需要在页面停留等待归档完成“")]),_:1}),s("div",null,[P((r(),$(pe,{"element-loading-text":"Loading...","tooltip-effect":"dark",multipleTable:"",ref_key:"multipleTable",ref:_e,onSelectionChange:Se,stripe:"",border:"","default-sort":{prop:"date",order:"descending"},"max-height":666,data:v.actions,style:{width:"100%"}},{default:o(()=>[e(g,{prop:"date",label:"触发时间",width:"200"},{default:o(l=>[n(w(u(F)(new Date(l.row.date))),1)]),_:1}),e(g,{prop:"tip",label:"文件信息"}),e(g,{prop:"type",label:"任务类型"},{default:o(l=>[l.row.type===u(Le).Compress?(r(),$(V,{key:0,type:"primary"},{default:o(()=>[n("归档下载")]),_:1})):(r(),$(V,{key:1,type:"default"},{default:o(()=>[n("普通下载")]),_:1}))]),_:1}),e(g,{prop:"size",label:"大小",width:"100"},{default:o(l=>[l.row.status===u(z).ARCHIVE?(r(),y("span",fl,[e(V,{type:"danger"},{default:o(()=>[n("归档中...")]),_:1})])):l.row.status!==u(z).FAIL?(r(),y("span",_l,w(l.row.size?u(K)(l.row.size):"未知大小"),1)):I("",!0),l.row.status===u(z).FAIL?(r(),y("span",vl,[e(V,{type:"danger"},{default:o(()=>[n("归档失败")]),_:1})])):I("",!0)]),_:1}),e(g,{fixed:"right",label:"操作",width:"140"},{default:o(l=>[l.row.status===u(z).ARCHIVE?P((r(),y("div",hl,[n(" 归档中... ")])),[[me,!0]]):I("",!0),l.row.status===u(z).EXPIRED?(r(),y("div",gl," 链接已失效 ")):I("",!0),l.row.status===u(z).FAIL?(r(),y("div",wl," 联系开发者,提供错误信息:"+w(l.row.error),1)):I("",!0),l.row.status===u(z).SUCCESS?(r(),y("div",yl,[e(V,{onClick:N=>u(xe)(l.row.url),type:"primary"},{default:o(()=>[n("下载")]),_:2},1032,["onClick"]),e(V,{type:"success",style:{"margin-left":"10px"},onClick:N=>u(ct)(l.row.url)},{default:o(()=>[n("链接")]),_:2},1032,["onClick"]),e(V,{type:"warning",style:{"margin-left":"10px"},onClick:()=>{M.value=!0,J.value=l.row.url}},{default:o(()=>[n("二维码")]),_:2},1032,["onClick"])])):I("",!0)]),_:1})]),_:1},8,["data"])),[[me,re.value]]),s("div",kl,[e(O,{small:"","current-page":v.pageCurrent,"page-count":v.pageCount,total:v.pageTotal,layout:"total, prev, pager, next",onCurrentChange:Ue},null,8,["current-page","page-count","total"])])])],512),[[we,se.value]]),s("div",xl,[e(R,null,{default:o(()=>[n("空间占用情况:"+w(Ze.value)+" / "+w(Ge.value),1)]),_:1}),e(R,null,{default:o(()=>[n("↑ 仅供使用者参考,应用无存储空间上限,也不收费")]),_:1}),e(R,null,{default:o(()=>[bl]),_:1}),P((r(),$(pe,{"element-loading-text":"Loading...","tooltip-effect":"dark",multipleTable:"",ref_key:"multipleTable",ref:_e,onSelectionChange:Se,stripe:"",border:"","max-height":666,data:X.value,style:{width:"100%"}},{default:o(()=>[e(g,{type:"selection",width:"55"}),e(g,{prop:"date",label:"提交时间",width:"160"},{default:o(l=>[n(w(u(F)(new Date(l.row.date))),1)]),_:1}),e(g,{prop:"task_name",label:"任务",width:"150"}),e(g,{prop:"name",label:"文件名",width:"200"}),Y.value?(r(),$(g,{key:0,prop:"origin_name",label:"原文件名",width:"200"},{default:o(l=>[n(w(l.row.origin_name||"-"),1)]),_:1})):I("",!0),e(g,{prop:"size",label:"大小"},{default:o(l=>[n(w(l.row.size===0?"未知大小":u(K)(l.row.size)),1)]),_:1}),A.value?(r(),$(g,{key:1,label:"缩略图",width:"120"},{default:o(l=>[e(G,{onSwitch:Ie,onClick:N=>Ie(l.$index),"preview-teleported":"","preview-src-list":et.value,"initial-index":l.$index,lazy:"",style:{width:"100px",height:"100px"},src:l.row.cover,fit:"cover"},{viewer:o(()=>[s("div",Cl,w($e.value),1)]),placeholder:o(()=>[zl]),error:o(()=>[s("div",El,[n(" 不支持 "),e(m,null,{default:o(()=>[e(u(Gt))]),_:1})])]),_:2},1032,["onClick","preview-src-list","initial-index","src"])]),_:1})):I("",!0),Q.value?(r(),$(g,{key:2,prop:"people",width:"100",label:"限制名单"},{default:o(l=>[n(w(l.row.people||"-"),1)]),_:1})):I("",!0),e(g,{fixed:"right",label:"操作",width:"140"},{default:o(l=>[s("div",Sl,[e(d,{onClick:N=>Re(l.row),type:"primary",text:"",size:"small"},{default:o(()=>[n("查看提交信息")]),_:2},1032,["onClick"]),e(d,{onClick:N=>Be(l.row),type:"primary",text:"",size:"small"},{default:o(()=>[n("修改文件名")]),_:2},1032,["onClick"]),e(d,{onClick:N=>qe(l.row),type:"primary",text:"",size:"small"},{default:o(()=>[n("下载")]),_:2},1032,["onClick"]),e(d,{onClick:N=>je(l.row),type:"primary",text:"",size:"small"},{default:o(()=>[n("删除")]),_:2},1032,["onClick"])])]),_:1})]),_:1},8,["data"])),[[me,re.value]])]),s("div",Vl,[e(O,{"current-page":ne.value,onCurrentChange:Ke,background:"","page-count":Xe.value,"page-sizes":[6,10,50,100],"page-size":W.value,onSizeChange:We,total:ae.value.length,layout:"total, sizes, prev, pager, next, jumper"},null,8,["current-page","page-count","page-size","total"])]),e(T,{fullscreen:Te.value,title:"提交填写的信息",modelValue:ve.value,"onUpdate:modelValue":a[8]||(a[8]=l=>ve.value=l)},{default:o(()=>[e(Nt,{infos:de,disabled:!0},null,8,["infos"])]),_:1},8,["fullscreen","modelValue"]),e(Tt,{value:M.value,"onUpdate:value":a[9]||(a[9]=l=>M.value=l),title:"下载链接",link:J.value},null,8,["value","link"]),e(T,{fullscreen:Te.value,title:"修改文件名",modelValue:oe.value,"onUpdate:modelValue":a[13]||(a[13]=l=>oe.value=l)},{default:o(()=>[s("div",null,[e(tt,{"label-width":"100px",model:h},{default:o(()=>[e(ge,{label:"原文件名",prop:"newName"},{default:o(()=>[e(p,{modelValue:h.oldName,"onUpdate:modelValue":a[10]||(a[10]=l=>h.oldName=l),disabled:""},null,8,["modelValue"])]),_:1}),e(ge,{label:"新文件名",prop:"newName"},{default:o(()=>[e(p,{modelValue:h.newName,"onUpdate:modelValue":a[11]||(a[11]=l=>h.newName=l),placeholder:"请输入新文件名"},{append:o(()=>[n(w(h.suffix),1)]),_:1},8,["modelValue"])]),_:1}),e(ge,null,{default:o(()=>[e(d,{type:"success",onClick:Je},{default:o(()=>[n("保存")]),_:1}),e(d,{onClick:a[12]||(a[12]=l=>oe.value=!1)},{default:o(()=>[n("取消")]),_:1})]),_:1})]),_:1},8,["model"])])]),_:1},8,["fullscreen","modelValue"])])}}});const Zl=vt($l,[["__scopeId","data-v-7d8411d6"]]);export{Zl as default};
|
|
2
|
+
//# sourceMappingURL=index-3a3af29f.js.map
|