FileList.vue 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491
  1. <template>
  2. <div class="file-list-wrapper">
  3. <!-- 操作按钮 -->
  4. <a-layout-header>
  5. <OperationMenu
  6. v-if="fileType != 12 && fileType != 13 && fileType != 14 && fileType != 15"
  7. :fileType="fileType"
  8. :filePath="filePath"
  9. @getSearchFileList="getSearchFileList"
  10. @getTableDataByType="getTableDataByType"
  11. ></OperationMenu>
  12. </a-layout-header>
  13. <div class="middle-wrapper">
  14. <!-- 面包屑导航栏 -->
  15. <BreadCrumb
  16. class="breadcrumb"
  17. :fileType="fileType"
  18. :filePath="filePath"
  19. @getTableDataByType="getTableDataByType"
  20. ></BreadCrumb>
  21. </div>
  22. <!-- 文件列表-表格模式 -->
  23. <FileTable
  24. :fileType="fileType"
  25. :filePath="filePath"
  26. :fileList="fileList"
  27. v-model:loading="loading"
  28. v-if="fileModel === 0 && fileType !== 12 && fileType !== 13 && fileType !== 14 && fileType !== 15"
  29. @getTableDataByType="getTableDataByType"
  30. @contextmenu="handleClickRight"
  31. ></FileTable>
  32. <!-- 文件列表-网格模式 -->
  33. <FileGrid
  34. :fileType="fileType"
  35. :filePath="filePath"
  36. :fileList="fileList"
  37. :loading="loading"
  38. v-if="fileModel === 1 && fileType !== 12 && fileType !== 13 && fileType !== 14 && fileType !== 15"
  39. @getTableDataByType="getTableDataByType"
  40. @contextmenu="handleClickRight"
  41. ></FileGrid>
  42. <!-- 图片-时间线模式 -->
  43. <FileTimeLine
  44. class="image-model"
  45. :fileList="fileList"
  46. v-model:loading="loading"
  47. v-if="fileModel === 2 && fileType === 1"
  48. @getTableDataByType="getTableDataByType"
  49. @contextmenu="handleClickRight"
  50. ></FileTimeLine>
  51. <!-- 敏感词管理 -->
  52. <SensitiveList :tableData="sensitiveListData" v-if="fileType === 12" @addSensitiveSuccess="addSensitiveSuccess" />
  53. <!-- 敏感词管理记录 -->
  54. <SensitiveListManage :tableData="sensitiveRecordsData" v-if="fileType === 13" @delRecords="delRecords" />
  55. <!-- 跨网传输 -->
  56. <TransferList :tableData="transferData" v-if="fileType === 14" @delTransferList="delTransferList" />
  57. <!-- 企业云盘 -->
  58. <EnterpriseDisk
  59. :fileType="fileType"
  60. :filePath="filePath"
  61. :fileList="fileList"
  62. v-model:loading="loading"
  63. :tableData="fileList"
  64. v-if="fileType === 15"
  65. @enterpriseDiskList="enterpriseDiskList"
  66. @contextmenu="handleClickRight"
  67. />
  68. <div class="pagination-wrapper">
  69. <div class="current-page-count" v-if="fileType == 12">当前页{{ sensitiveListData.length }}条</div>
  70. <div class="current-page-count" v-else-if="fileType == 13">当前页{{ sensitiveRecordsData.length }}条</div>
  71. <div class="current-page-count" v-else-if="fileType == 14">当前页{{ transferData.length }}条</div>
  72. <!-- <div class="current-page-count" v-else-if="fileType == 15">
  73. 当前页{{ enterpriseDiskData.length }}条
  74. </div> -->
  75. <div class="current-page-count" v-else>当前页{{ fileList.length }}条</div>
  76. <!-- 回收站不展示分页组件 -->
  77. <a-pagination
  78. :current="pageData.currentPage"
  79. :page-size="pageData.pageCount"
  80. :total="pageData.total"
  81. :page-size-options="['10', '50', '100', '200']"
  82. :show-total="(total) => `总共 ${total} 条`"
  83. :show-size-changer="screenWidth > 768"
  84. :show-quick-jumper="screenWidth <= 768"
  85. @change="handleCurrentChange"
  86. @showSizeChange="handleSizeChange"
  87. v-if="fileType !== 6"
  88. >
  89. </a-pagination>
  90. </div>
  91. </div>
  92. </template>
  93. <script setup>
  94. import { ref, reactive, computed, watch, onMounted, getCurrentInstance } from 'vue'
  95. import { useRoute } from 'vue-router'
  96. import { useMyResourceStore } from '@/store/myResource'
  97. import { message } from 'ant-design-vue'
  98. import OperationMenu from '../../components/OperationMenu.vue'
  99. import BreadCrumb from '../../common/BreadCrumb.vue'
  100. import FileTable from '../../common/FileTable.vue'
  101. import FileGrid from '../../components/FileGrid.vue'
  102. import FileTimeLine from '../../components/FileTimeLine.vue'
  103. import SensitiveList from '../../components/SensitiveList.vue'
  104. import SensitiveListManage from '../../components/SensitiveListManage.vue'
  105. import TransferList from '../../components/TransferList.vue'
  106. import EnterpriseDisk from '../../components/EnterpriseDisk.vue'
  107. import {
  108. getFileListByPath,
  109. getFileListByType,
  110. getRecoveryFile,
  111. getMyShareFileList,
  112. getSensitiveList,
  113. searchByFileName,
  114. getSensitiveRecord,
  115. getTransferRecord,
  116. getEnterpriseDiskList
  117. } from '@/api/myResource/file.js'
  118. const route = useRoute()
  119. const myResourceStore = useMyResourceStore()
  120. const { proxy } = getCurrentInstance()
  121. console.log('proxy.$openBox---', proxy.$openBox)
  122. const fileNameSearch = ref('')
  123. const loading = ref(true) // 表格数据-loading
  124. const fileList = ref([]) // 表格数据-文件列表
  125. // 分页数据
  126. const pageData = reactive({
  127. currentPage: 1,
  128. pageCount: 50,
  129. total: 0
  130. })
  131. const sensitiveListData = ref([])
  132. const sensitiveRecordsData = ref([])
  133. const transferData = ref([])
  134. const enterpriseDiskData = ref([])
  135. // 左侧菜单选中的文件类型
  136. const fileType = computed(() => {
  137. return route.query.fileType ? Number(route.query.fileType) : 0
  138. })
  139. // 当前所在路径
  140. const filePath = computed(() => {
  141. return route.query.filePath ? route.query.filePath : '/'
  142. })
  143. // 文件查看模式 0列表模式 1网格模式 2 时间线模式
  144. const fileModel = computed(() => {
  145. return myResourceStore.fileModel
  146. })
  147. console.log('fileModel---', fileModel.value)
  148. // 屏幕宽度
  149. const screenWidth = computed(() => {
  150. return myResourceStore.screenWidth
  151. })
  152. watch(filePath, () => {
  153. // 当左侧菜单选择“全部”或“我的分享”,文件路径发生变化时,再重新获取文件列表
  154. if (route.name === 'File' && [0, 8].includes(fileType.value)) {
  155. setPageCount()
  156. getTableDataByType()
  157. }
  158. })
  159. watch(fileType, () => {
  160. if (route.name === 'File') {
  161. setPageCount()
  162. getTableDataByType()
  163. }
  164. })
  165. // 监听文件查看模式
  166. watch(fileModel, () => {
  167. setPageCount()
  168. })
  169. onMounted(() => {
  170. setPageCount()
  171. getTableDataByType()
  172. })
  173. const delRecords = () => {
  174. getSensitiveRecordData()
  175. }
  176. const delTransferList = () => {
  177. getTransferListData()
  178. }
  179. const addSensitiveSuccess = () => {
  180. getSensitiveListData()
  181. }
  182. // 企业云盘
  183. const enterpriseDiskList = () => {
  184. getEnterpriseDisk()
  185. }
  186. /**
  187. * 文件展示区域的空白处右键事件
  188. * @param {Document} event 右键事件对象
  189. */
  190. const handleClickRight = (event) => {
  191. console.log('右键事件', proxy.$openBox)
  192. event.preventDefault()
  193. console.log('fileType.value---', fileType.value)
  194. // 只有在全部页面才可以进行以下操作
  195. if (![6, 8].includes(fileType.value)) {
  196. proxy.$openBox
  197. .contextMenu({
  198. selectedFile: undefined,
  199. domEvent: event,
  200. serviceEl: proxy
  201. })
  202. .then((res) => {
  203. if (res === 'confirm') {
  204. getTableDataByType() // 刷新文件列表
  205. myResourceStore.showStorage() // 刷新存储容量
  206. }
  207. })
  208. }
  209. }
  210. /**
  211. * 表格数据获取相关事件 | 调整分页大小
  212. */
  213. const setPageCount = () => {
  214. pageData.currentPage = 1
  215. if (myResourceStore.fileModel === 0) {
  216. pageData.pageCount = 50
  217. }
  218. if (myResourceStore.fileModel === 1) {
  219. pageData.pageCount = 100
  220. }
  221. if (fileType.value == 12 || fileType.value == 13) {
  222. pageData.pageCount = 10
  223. }
  224. }
  225. /**
  226. * 表格数据获取相关事件 | 获取文件列表数据
  227. */
  228. const getTableDataByType = () => {
  229. console.log('事件执行。。。', fileType.value)
  230. loading.value = true
  231. // 分类型
  232. if (Number(fileType.value)) {
  233. switch (Number(fileType.value)) {
  234. case 6:
  235. showFileRecovery() // 回收站
  236. break
  237. case 8:
  238. showMyShareFile() // 我的分享
  239. break
  240. case 12: //敏感词
  241. getSensitiveListData()
  242. break
  243. case 13: //敏感词记录过滤
  244. getSensitiveRecordData()
  245. break
  246. case 14: //跨网传输
  247. getTransferListData()
  248. break
  249. case 15: //企业云盘
  250. getEnterpriseDisk()
  251. break
  252. default:
  253. showFileList()
  254. break
  255. }
  256. } else {
  257. // 全部文件
  258. showFileList()
  259. }
  260. myResourceStore.showStorage()
  261. }
  262. /**
  263. * 表格数据获取相关事件 | 获取当前路径下的文件列表
  264. */
  265. const showFileList = () => {
  266. let data = {
  267. fileType: fileType.value,
  268. filePath: filePath.value,
  269. currentPage: pageData.currentPage,
  270. pageCount: pageData.pageCount
  271. }
  272. getFileListByPath(data).then((res) => {
  273. console.log('res---', res)
  274. if (res.success) {
  275. fileList.value = res.dataList
  276. pageData.total = Number(res.total)
  277. loading.value = false
  278. } else {
  279. message.error(res.message)
  280. }
  281. })
  282. }
  283. /**
  284. * 表格数据获取相关事件 | 分页组件 | 当前页码改变
  285. */
  286. const handleCurrentChange = (currentPage) => {
  287. pageData.currentPage = currentPage
  288. getTableDataByType()
  289. }
  290. /**
  291. * 表格数据获取相关事件 | 分页组件 | 页大小改变时
  292. */
  293. const handleSizeChange = (current, pageSize) => {
  294. pageData.pageCount = pageSize
  295. getTableDataByType()
  296. }
  297. /**
  298. * 表格数据获取相关事件 | 获取回收站文件列表
  299. */
  300. const showFileRecovery = () => {
  301. getRecoveryFile().then((res) => {
  302. if (res.success) {
  303. fileList.value = res.dataList
  304. loading.value = false
  305. } else {
  306. message.error(res.message)
  307. }
  308. })
  309. }
  310. /**
  311. * 表格数据获取相关事件 | 获取我的分享列表
  312. */
  313. const showMyShareFile = () => {
  314. let data = {
  315. shareFilePath: filePath.value,
  316. shareBatchNum: route.query.shareBatchNum,
  317. currentPage: pageData.currentPage,
  318. pageCount: pageData.pageCount
  319. }
  320. getMyShareFileList(data).then((res) => {
  321. if (res.success) {
  322. fileList.value = res.dataList
  323. pageData.total = Number(res.total)
  324. loading.value = false
  325. } else {
  326. message.error(res.message)
  327. }
  328. })
  329. }
  330. /**
  331. * 表格数据获取相关事件 | 根据文件类型展示文件列表
  332. */
  333. const showFileListByType = () => {
  334. // 分类型
  335. let data = {
  336. fileType: fileType.value,
  337. currentPage: pageData.currentPage,
  338. pageCount: pageData.pageCount
  339. }
  340. getFileListByType(data).then((res) => {
  341. if (res.success) {
  342. fileList.value = res.dataList
  343. pageData.total = Number(res.total)
  344. loading.value = false
  345. } else {
  346. message.error(res.message)
  347. }
  348. })
  349. }
  350. /**
  351. * 获取搜索文件结果列表
  352. * @param {string} fileName 文件名称
  353. */
  354. const getSearchFileList = (fileName) => {
  355. loading.value = true
  356. searchByFileName({
  357. currentPage: pageData.currentPage,
  358. pageCount: pageData.pageCount,
  359. fileName: fileName
  360. }).then((res) => {
  361. loading.value = false
  362. if (res.success) {
  363. fileList.value = res.dataList.map((item) => {
  364. return {
  365. ...item
  366. // highlightFields: item.highLight.fileName[0]
  367. }
  368. })
  369. // pageData.total = res.data.totalHits
  370. pageData.total = res.total
  371. } else {
  372. message.error(res.message)
  373. }
  374. })
  375. }
  376. //获取敏感词刘表
  377. const getSensitiveListData = () => {
  378. getSensitiveList({
  379. page: pageData.currentPage,
  380. pageSize: pageData.pageCount
  381. }).then((res) => {
  382. console.log(res)
  383. sensitiveListData.value = res.dataList
  384. pageData.total = res.total
  385. })
  386. }
  387. const getSensitiveRecordData = () => {
  388. getSensitiveRecord({
  389. page: pageData.currentPage,
  390. pageSize: pageData.pageCount
  391. }).then((res) => {
  392. for (let item of res.dataList) {
  393. let date = new Date(item.createTime)
  394. console.log(date.getMonth())
  395. item.createTime =
  396. date.getFullYear() +
  397. '-' +
  398. (date.getMonth() + 1).toString().padStart(2, 0) +
  399. '-' +
  400. date.getDay().toString().padStart(2, 0) +
  401. ' ' +
  402. date.getHours().toString().padStart(2, 0) +
  403. ':' +
  404. date.getMinutes().toString().padStart(2, 0) +
  405. ':' +
  406. date.getSeconds().toString().padStart(2, 0)
  407. }
  408. sensitiveRecordsData.value = res.dataList
  409. pageData.total = res.total
  410. })
  411. }
  412. const getTransferListData = () => {
  413. getTransferRecord({
  414. page: pageData.currentPage,
  415. pageSize: pageData.pageCount
  416. }).then((res) => {
  417. transferData.value = res.dataList
  418. pageData.total = res.total
  419. })
  420. }
  421. // 企业云盘的列表
  422. const getEnterpriseDisk = () => {
  423. fileList.value = []
  424. let data = {
  425. fileType: 0,
  426. filePath: filePath.value,
  427. currentPage: pageData.currentPage,
  428. pageCount: pageData.pageCount
  429. }
  430. getEnterpriseDiskList(data).then((res) => {
  431. if (res.success) {
  432. fileList.value = res.dataList
  433. pageData.total = Number(res.total)
  434. loading.value = false
  435. } else {
  436. message.error(res.message)
  437. }
  438. })
  439. }
  440. </script>
  441. <style lang="less" scoped>
  442. @import '@/style/myResource/varibles.less';
  443. .file-list-wrapper {
  444. :deep(.ant-layout-header) {
  445. padding: 0;
  446. }
  447. .middle-wrapper {
  448. margin-bottom: 8px;
  449. margin-top: 10px;
  450. }
  451. .pagination-wrapper {
  452. position: relative;
  453. border-top: 1px solid @border-base;
  454. height: 44px;
  455. line-height: 44px;
  456. text-align: center;
  457. .current-page-count {
  458. position: absolute;
  459. left: 16px;
  460. height: 32px;
  461. line-height: 32px;
  462. font-size: 13px;
  463. color: @regular-text;
  464. }
  465. }
  466. }
  467. :deep(.ant-pagination-item-active) {
  468. color: #29175b;
  469. cursor: default;
  470. }
  471. :deep(.ant-pagination-item:hover) {
  472. color: #29175b;
  473. }
  474. </style>