index.vue 25 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954
  1. <template>
  2. <!-- <TopTabs></TopTabs> -->
  3. <div class="page">
  4. <el-collapse v-model="activeNames" @change="handleChange">
  5. <div v-if="isList">
  6. <el-collapse-item name="folder" class="collapse_Item">
  7. <template #title>
  8. <span class="collapseItem_title">文件夹</span>
  9. </template>
  10. <!-- 表格 -->
  11. <el-table
  12. :data="tableFolderData"
  13. style="width: 100%"
  14. height="40vh"
  15. :scrollbar-always-on="true"
  16. @row-click="changeFile"
  17. >
  18. <el-table-column fixed prop="date" label="名称" width="500">
  19. <template #default="scope">
  20. <div>
  21. <img
  22. class="table_icon"
  23. src="@/assets/images/fileBox.png"
  24. alt=""
  25. style=""
  26. />
  27. {{ scope.row.dirName }}
  28. </div>
  29. </template>
  30. </el-table-column>
  31. <el-table-column prop="createTime" label="时间" width="200" />
  32. <el-table-column prop="state" label="类型" width="180"
  33. >文件夹</el-table-column
  34. >
  35. <!-- <el-table-column prop="city" label="大小" width="160" /> -->
  36. </el-table>
  37. </el-collapse-item>
  38. <el-collapse-item name="file" class="collapse_Item">
  39. <template #title>
  40. <span class="collapseItem_title">文件</span>
  41. </template>
  42. <!-- 表格 -->
  43. <el-table
  44. :data="tableFileData"
  45. style="width: 100%"
  46. height="40vh"
  47. :scrollbar-always-on="true"
  48. @row-contextmenu="handleRowClick"
  49. >
  50. <el-table-column fixed prop="date" label="名称" width="500">
  51. <template #default="scope">
  52. <div>
  53. <img
  54. class="table_icon"
  55. :src="setIcon(scope.row.fileType)"
  56. alt=""
  57. style=""
  58. />
  59. {{ scope.row.fileName }}
  60. </div>
  61. <!-- <span
  62. style="
  63. white-space: nowrap;
  64. overflow: hidden;
  65. text-overflow: ellipsis;
  66. "
  67. >
  68. <el-icon
  69. v-if="scope.row.isFavorite == 'N' || !scope.row.isFavorite"
  70. @click.stop="collectByStar(scope.row, false)"
  71. >
  72. <Star />
  73. </el-icon>
  74. <img
  75. v-else
  76. @click.stop="delCollect(scope.row, false)"
  77. src="../../../assets/images/yellowstar.png"
  78. alt=""
  79. />
  80. <img
  81. :src="setIcon(scope.row.fileType)"
  82. class="table_icon"
  83. alt=""
  84. />
  85. <el-tooltip
  86. class="box-item"
  87. effect="dark"
  88. :content="scope.row.fileName"
  89. placement="top"
  90. :show-after="1000"
  91. >
  92. {{ scope.row.fileName }}
  93. </el-tooltip>
  94. </span> -->
  95. </template>
  96. </el-table-column>
  97. <el-table-column prop="createTime" label="时间" width="200" />
  98. <el-table-column prop="fileType" label="类型" width="180" />
  99. <el-table-column label="大小">
  100. <template #default="scope">
  101. <span>
  102. {{ formatFileSize(scope.row.fileSize) }}
  103. </span>
  104. </template>
  105. </el-table-column>
  106. </el-table>
  107. </el-collapse-item>
  108. <div
  109. class="setCli"
  110. v-if="cliCC"
  111. :style="{ left: xz + 'px', top: yz + 'px' }"
  112. >
  113. <template v-for="(item, index) in filterMouseCli()" :key="index">
  114. <p @click="chooseSet(item, index, 1)" class="chooseSet">
  115. <img :src="item.img" alt="" />
  116. {{ item.name }}
  117. <span
  118. v-if="
  119. item.name == '在线编辑' || item.name == '协作' ? true : false
  120. "
  121. style="color: #7084b4; float: right; position: relative"
  122. class="arrow"
  123. >></span
  124. >
  125. </p>
  126. </template>
  127. </div>
  128. <div
  129. class="setCli1"
  130. v-if="anyP"
  131. :style="{ left: xz + 155 + 'px', top: yz + 'px' }"
  132. >
  133. <p @click="chooseSet1(0)" class="chooseSet">
  134. <img src="../../../assets/images/user.png" alt="" />
  135. 选择人员
  136. </p>
  137. <p class="chooseSet" @click="goLock">
  138. <img src="../../../assets/images/archiveTray.png" alt="" />
  139. 归档
  140. </p>
  141. </div>
  142. </div>
  143. <div v-else>
  144. <el-collapse-item name="folder">
  145. <template #title>
  146. <span class="collapseItem_title">文件夹</span>
  147. </template>
  148. <!-- 平铺 -->
  149. <el-scrollbar height="360px">
  150. <div class="tile_box">
  151. <div class="file_box" v-for="item in tableData" :key="item">
  152. <img
  153. class="big_file_img"
  154. src="@/assets/images/fileBox.png"
  155. alt=""
  156. />
  157. <span>Inceptos</span>
  158. </div>
  159. </div>
  160. </el-scrollbar>
  161. </el-collapse-item>
  162. <el-collapse-item name="file">
  163. <template #title>
  164. <span class="collapseItem_title">文件</span>
  165. </template>
  166. <!-- 平铺 -->
  167. <el-scrollbar height="360px">
  168. <div class="tile_box">
  169. <div class="file_box" v-for="item in 20" :key="item">
  170. <img
  171. class="big_file_img"
  172. src="@/assets/images/fileType//file_DOC.png"
  173. alt=""
  174. />
  175. <span>Inceptos</span>
  176. </div>
  177. </div>
  178. </el-scrollbar>
  179. </el-collapse-item>
  180. </div>
  181. </el-collapse>
  182. <div>
  183. <FileTree
  184. v-if="fileTrees"
  185. :fileTrees="fileTrees"
  186. :newSpaceId="newSpaceId"
  187. :fileId="clickRowId"
  188. @getChildren="getChildren"
  189. :copyOrMove="copyOrMove"
  190. ></FileTree>
  191. </div>
  192. <ImgPreview
  193. :previewData="previewData"
  194. :copyFileType="copyFileType"
  195. :showPreview="showPreview"
  196. @closeImgPreview="closeImgPreview"
  197. ></ImgPreview>
  198. <div
  199. v-loading.fullscreen="loadingPreview"
  200. v-if="loadingPreview"
  201. class="lodingBox"
  202. ></div>
  203. <!-- 文件收藏 -->
  204. <div>
  205. <FileCollect
  206. v-if="collects"
  207. :collects="collects"
  208. @getCollects="getCollects"
  209. :copyFileName="copyFileName"
  210. :copyFileId="copyFileId"
  211. @refreshFile="refreshFile"
  212. :isFolder="isFolder"
  213. :clickRow="clickRow"
  214. ></FileCollect>
  215. </div>
  216. </div>
  217. </template>
  218. <script setup>
  219. import { onMounted, ref, toRaw, inject } from "vue";
  220. // import TopTabs from "@/components/TopTabs/index.vue"
  221. import { listRecent, getRecent } from "@/api/biz/recent";
  222. import { getInfo } from "@/api/biz/info";
  223. import { getDir } from "@/api/biz/dir";
  224. import documents from "@/api/document/document";
  225. import ImgFile from "@/views/myfile/jsComponents/ImgFile";
  226. import FileTree from "@/views/myfile/components/FileTree.vue";
  227. import FileCollect from "@/views/myfile/modalComponebts/FileCollect.vue";
  228. import myfile from "@/api/myfile/myfile";
  229. import { getLeveldetail } from "@/api/level/level";
  230. import { canPreviewFile, rightMenuRole } from "@/utils/index.js";
  231. import { preview } from "@/api/common/common.js";
  232. import { delFavorite } from "@/api/biz/favorite.js";
  233. import ImgPreview from "@/components/ImgPreview/ImgPreview.vue";
  234. const activeNames = ref(["folder", "file"]);
  235. const isList = ref(true); //控制显示方式
  236. const tableFolderData = ref([]);
  237. const tableFileData = ref([]);
  238. const thisFolder = ref(); //当前文件夹
  239. const newDirId = ref();
  240. const newSpaceId = ref();
  241. const cliCC = ref(false); //文件右键菜单
  242. const clickRow = ref(); //当前右键的文件
  243. let xz = ref(0);
  244. let yz = ref(0);
  245. let anyP = ref(false);
  246. const thisFolderRole = ref(); //文件夹权限
  247. const workOrEdit = ref();
  248. const thanks = ref();
  249. const selectedIndex = ref();
  250. const editOnline = ref();
  251. const isFolder = ref();
  252. const copyRow = ref();
  253. const clickRowId = ref();
  254. const copyDirId = ref();
  255. const copySpaceId = ref();
  256. const copyFileId = ref();
  257. const copyFileSize = ref();
  258. const copyFileType = ref();
  259. const copyParentId = ref();
  260. const copyFileName = ref();
  261. const loadingPreview = ref(false);
  262. const onlyView = ref(false);
  263. const showPreview = ref(false);
  264. const previewData = ref();
  265. const fileTrees = ref(false);
  266. const copyOrMove = ref();
  267. const backFolder = ref();
  268. const copyFolderName = ref();
  269. const addFolderAdd = inject("addFolderAdd");
  270. let collects = ref(false);
  271. let menuList = ref([
  272. {
  273. name: "我的空间",
  274. choose: "我的空间",
  275. },
  276. ]);
  277. let nameForm = ref({
  278. name: "",
  279. });
  280. let mouseCli = ref([
  281. {
  282. img: ImgFile.previewIcon,
  283. name: "预览",
  284. },
  285. {
  286. img: ImgFile.downLoad,
  287. name: "下载",
  288. },
  289. {
  290. img: ImgFile.addolder,
  291. name: "打开文件所在位置",
  292. },
  293. ]);
  294. const addTab = inject("addTab");
  295. //----引入图片----
  296. import file_DOC from "../../../assets/images/fileType/file_DOC.png";
  297. import file_pdf from "../../../assets/images/fileType/file_pdf.png";
  298. import file_PPT from "../../../assets/images/fileType/file_PPT.png";
  299. import file_TXT from "../../../assets/images/fileType/file_TXT.png";
  300. import file_XLSX from "../../../assets/images/fileType/file_XLSX.png";
  301. import file_pic from "../../../assets/images/fileType/file_pic.png";
  302. import file_audio from "../../../assets/images/fileType/file_audio.png";
  303. import file_video from "../../../assets/images/fileType/file_video.png";
  304. import file_zip from "../../../assets/images/fileType/file_zip.png";
  305. // -------
  306. onMounted(() => {
  307. getList();
  308. window.addEventListener("click", closeRMenu, true);
  309. });
  310. const getList = async () => {
  311. const resY = await listRecent({ isFolder: "Y" });
  312. const resN = await listRecent({ isFolder: "N" });
  313. if (resY.code === 200) {
  314. var arr = [];
  315. resY.rows.map(async (item) => {
  316. const detail = await getDir(item.relaId);
  317. tableFolderData.value.push(JSON.parse(JSON.stringify(detail.data)));
  318. });
  319. console.log("resYarr", arr);
  320. // tableFolderData.value = resY.rows;
  321. console.log("tableData.value = ", toRaw(tableFolderData.value));
  322. }
  323. if (resN.code === 200) {
  324. var arr = [];
  325. resN.rows.map(async (item) => {
  326. const detail = await getInfo(item.relaId);
  327. tableFileData.value.push(detail.data);
  328. });
  329. console.log("resNarr", arr);
  330. // tableFileData.value = resN.rows;
  331. console.log("tableFileData.value = ", tableFileData.value);
  332. }
  333. };
  334. const getFileDetail = () => {};
  335. const handleChange = (val) => {
  336. // console.log(val);
  337. };
  338. function changeFile(row, num) {
  339. row = toRaw(row);
  340. if (row) {
  341. backFolder.value = thisFolder.value;
  342. thisFolder.value = row;
  343. } else {
  344. row = thisFolder.value;
  345. }
  346. thisFolder.value = row;
  347. console.log("changeFilerow2", row);
  348. if (row.isEncrypt === "Y") {
  349. getLeveldetailFn(row.encryptLevel);
  350. } else {
  351. thisFolderRole.value = null;
  352. }
  353. copyParentId.value = row.parentId;
  354. newDirId.value = row.dirId;
  355. newSpaceId.value = row.spaceId;
  356. documents
  357. .getALLdocument({ parentId: row.dirId - 0, spaceId: row.spaceId - 0 })
  358. .then((res) => {
  359. tableFolderData.value = res.data;
  360. // if (res.code === 200) {
  361. if (res.data.length === 0) {
  362. myfile
  363. .getById(newDirId.value)
  364. .then((res) => {
  365. if (res.code === 200) {
  366. tableFileData.value = res.rows;
  367. }
  368. })
  369. .catch((error) => {
  370. console.error("myfile.getAllFileMenu 调用失败:", error);
  371. });
  372. } else {
  373. myfile
  374. .getById(row.dirId - 0)
  375. .then((res) => {
  376. if (res.code === 200) {
  377. tableFileData.value = res.rows;
  378. }
  379. })
  380. .catch((error) => {
  381. console.error("myfile.getAllFileMenu 调用失败:", error);
  382. });
  383. }
  384. // }
  385. });
  386. selectedIndex.value = num;
  387. const newItem = {
  388. name: row.dirName,
  389. choose: row.dirName,
  390. dirIds: row.dirId,
  391. spaceIds: row.spaceId,
  392. };
  393. // 检查 newItem 是否已存在于 menuList 中
  394. const isItemExist = menuList.value.some(
  395. (item) => item.choose === newItem.choose
  396. );
  397. // 如果不存在,则添加它
  398. if (!isItemExist) {
  399. menuList.value.push(newItem);
  400. }
  401. }
  402. // 文件名表格每一行点击事件
  403. function handleRowClick(row, col, e) {
  404. console.log("row", row);
  405. isFolder.value = "N";
  406. clickRow.value = row;
  407. e.preventDefault();
  408. e.stopPropagation();
  409. xz.value = e.pageX;
  410. yz.value = e.pageY;
  411. copyRow.value = row;
  412. clickRowId.value = row.docId;
  413. copyDirId.value = row.dirId;
  414. copySpaceId.value = row.spaceId;
  415. copyFileId.value = row.fileId;
  416. copyFileSize.value = row.fileSize;
  417. copyFileType.value = row.fileType;
  418. nameForm.value.name = row.fileName;
  419. copyFileName.value = row.fileName;
  420. if (cliCC.value === true) {
  421. cliCC.value = false;
  422. } else {
  423. cliCC.value = true;
  424. }
  425. }
  426. //mouse弹框
  427. async function chooseSet(row, index, num) {
  428. // 权限控制
  429. if (thisFolderRole.value && thisFolderRole.value.roles) {
  430. if (thisFolderRole.value.roles.l0600) {
  431. const passArr = localStorage.getItem("passArr");
  432. const passArrObj = JSON.parse(passArr);
  433. if (
  434. !passArrObj ||
  435. !passArrObj.some((item) => item === clickRow.value.docId)
  436. ) {
  437. chooseRow.value = row;
  438. chooseNum.value = num;
  439. showInputPassword.value = true;
  440. return;
  441. }
  442. // console.log('needc');
  443. }
  444. }
  445. console.log("chooseSetrow", row);
  446. console.log("chooseSetnum", num);
  447. if (row.name == "在线编辑" || row.name == "协作") {
  448. cliCC.value = true;
  449. }
  450. if (row.name == "分享") {
  451. workOrEdit.value = num;
  452. thanks.value = true;
  453. } else {
  454. thanks.value = false;
  455. }
  456. if (row.name == "协作") {
  457. workOrEdit.value = num;
  458. if (anyP.value) {
  459. anyP.value = false;
  460. } else {
  461. anyP.value = true;
  462. }
  463. } else {
  464. anyP.value = false;
  465. }
  466. if (row.name == "删除") {
  467. myfile.delMenu(clickRowId.value).then((res) => {
  468. if (res.code === 200) {
  469. ElMessage({
  470. type: "success",
  471. message: "删除成功",
  472. });
  473. getAllTop();
  474. }
  475. });
  476. }
  477. if (row.name === "复制到...") {
  478. copyOrMove.value = 0;
  479. fileTrees.value = true;
  480. }
  481. if (row.name === "移动到...") {
  482. copyOrMove.value = 1;
  483. fileTrees.value = true;
  484. }
  485. if (row.name === "打开文件所在位置") {
  486. documents.getALLdocument(({parentId: clickRow.value.dirId - 0, spaceId: clickRow.value.spaceId - 0})).then((res)=>{
  487. console.log('rowres',res);
  488. })
  489. const addData = {
  490. path: "/myfile",
  491. row: toRaw(clickRow.value),
  492. };
  493. console.log("addData", addData);
  494. addFolderAdd(addData);
  495. }
  496. if (row.name === "下载") {
  497. // location.href = `${import.meta.env.VITE_APP_BASE_API}/biz/info/download/${copyFileId.value}`;
  498. downLoadfile();
  499. }
  500. if (row.name === "预览") {
  501. loadingPreview.value = true;
  502. const filePreview = canPreviewFile(copyFileType.value);
  503. if (filePreview) {
  504. loadingPreview.value = false;
  505. addTab(clickRow.value);
  506. onlyView.value = true;
  507. // editOnline.value = false
  508. cliCC.value = false;
  509. } else {
  510. const res = await preview(copyFileId.value);
  511. showPreview.value = true;
  512. previewData.value = URL.createObjectURL(res);
  513. }
  514. loadingPreview.value = false;
  515. console.log("filePreview", filePreview);
  516. // // console.log('res',res);
  517. // const res = await preview(copyFileId.value)
  518. // showPreview.value = true
  519. // previewData.value = URL.createObjectURL(res)
  520. } else if (row.name === "历史版本") {
  521. const resHistory = await listVersion({ docId: clickRowId.value });
  522. console.log("resHistory", resHistory);
  523. historyTotal.value = resHistory.total;
  524. fileUserTreeData.data = resHistory.rows;
  525. openForwardFile.value = true;
  526. }
  527. }
  528. function chooseSet1(num) {
  529. workOrEdit.value = num;
  530. thanks.value = true;
  531. anyP.value = false;
  532. }
  533. function formatFileSize(fileSize) {
  534. if (fileSize >= 1024 * 1024 * 1024) {
  535. // 大于等于1GB,显示GB
  536. return (fileSize / (1024 * 1024 * 1024)).toFixed(2) + "GB";
  537. } else if (fileSize >= 1024 * 1024) {
  538. // 大于等于1MB,显示MB
  539. return (fileSize / (1024 * 1024)).toFixed(2) + "MB";
  540. } else if (fileSize >= 1024) {
  541. // 大于等于1KB,显示KB
  542. return (fileSize / 1024).toFixed(2) + "KB";
  543. } else {
  544. // 小于1KB,显示字节
  545. return fileSize + "B";
  546. }
  547. }
  548. const setIcon = (fileType) => {
  549. switch (fileType) {
  550. case ".docx":
  551. return file_DOC;
  552. break;
  553. case ".pdf":
  554. return file_pdf;
  555. break;
  556. case ".ppt":
  557. return file_PPT;
  558. break;
  559. case ".txt":
  560. return file_TXT;
  561. break;
  562. case ".xlsx":
  563. return file_XLSX;
  564. break;
  565. case ".csv":
  566. return file_XLSX;
  567. break;
  568. case ".png":
  569. return file_pic;
  570. break;
  571. case ".mp3":
  572. return file_audio;
  573. break;
  574. case ".mp4":
  575. return file_video;
  576. break;
  577. case ".zip":
  578. return file_zip;
  579. break;
  580. default:
  581. return file_DOC;
  582. break;
  583. }
  584. };
  585. //对mouseCli数组进行筛选,实现菜单的区分显示
  586. const filterMouseCli = () => {
  587. const canPreviewArray = [
  588. ".doc",
  589. ".wps",
  590. ".docm",
  591. ".docx",
  592. ".dot",
  593. ".dotm",
  594. ".dotx",
  595. ".epub",
  596. ".fodt",
  597. ".htm",
  598. ".html",
  599. ".mht",
  600. ".odt",
  601. ".ott",
  602. ".pdf",
  603. ".rtf",
  604. ".txt",
  605. ".djvu",
  606. ".xps",
  607. ".csv",
  608. ".fods",
  609. ".ods",
  610. ".ots",
  611. ".xls",
  612. ".xlsm",
  613. ".xlsx",
  614. ".xlt",
  615. ".xltm",
  616. ".xltx",
  617. ".fodp",
  618. ".odp",
  619. ".otp",
  620. ".pot",
  621. ".potm",
  622. ".potx",
  623. ".pps",
  624. ".ppsm",
  625. ".ppsx",
  626. ".ppt",
  627. ".pptm",
  628. ".pptx",
  629. ];
  630. const typeArr = [".png", ".jpg", ".jpeg", ".JPG", ".mp3", ".mp4"];
  631. const imgTypeArr = [".png", ".jpg", ".jpeg", ".JPG"];
  632. const canEditArr = [
  633. ".doc",
  634. ".docm",
  635. ".docx",
  636. ".dot",
  637. ".dotm",
  638. ".dotx",
  639. ".txt",
  640. ".djvu",
  641. ".xps",
  642. ".csv",
  643. ".fods",
  644. ".ods",
  645. ".ots",
  646. ".xls",
  647. ".xlsm",
  648. ".xlsx",
  649. ".xlt",
  650. ".xltm",
  651. ".xltx",
  652. ".fodp",
  653. ".odp",
  654. ".otp",
  655. ".doc",
  656. ".docm",
  657. ".docx",
  658. ".dot",
  659. ".dotm",
  660. ".dotx",
  661. ".epub",
  662. ".fodt",
  663. ".htm",
  664. ".html",
  665. ".mht",
  666. ".odt",
  667. ".ott",
  668. ".rtf",
  669. ".txt",
  670. ".djvu",
  671. ".xps",
  672. ".wps",
  673. ".pptx",
  674. ];
  675. let arr = [];
  676. if (
  677. !(
  678. typeArr.includes(copyFileType.value) ||
  679. canPreviewArray.includes(copyFileType.value)
  680. )
  681. ) {
  682. arr = mouseCli.value.filter((item) => item.name !== "预览");
  683. } else {
  684. arr = toRaw(mouseCli.value);
  685. }
  686. if (!canEditArr.includes(copyFileType.value)) {
  687. arr = arr.filter(
  688. (item) =>
  689. item.name !== "在线编辑" &&
  690. item.name !== "协作" &&
  691. item.name !== "历史版本"
  692. );
  693. }
  694. if (!imgTypeArr.includes(copyFileType.value)) {
  695. arr = arr.filter((item) => item.name !== "文字识别");
  696. }
  697. // console.log('arr',arr);
  698. // if (thisFolderRole.value) {
  699. // arr = rightMenuRole(toRaw(thisFolderRole.value), arr);
  700. // }
  701. return arr;
  702. };
  703. // 关闭文件夹右键菜单
  704. const closeRMenu = () => {
  705. // console.log("close");
  706. cliCC.value = false;
  707. };
  708. //关闭图片预览事件
  709. const closeImgPreview = () => {
  710. // console.log('close');
  711. showPreview.value = false;
  712. };
  713. function getChildren(data) {
  714. fileTrees.value = data;
  715. refreshFile();
  716. }
  717. function getCollects(data) {
  718. collects.value = data;
  719. }
  720. //star收藏事件
  721. const collectByStar = (row, isfolder) => {
  722. console.log("row", row);
  723. if (isfolder) {
  724. let thisRow = toRaw(row);
  725. isFolder.value = "Y";
  726. clickRow.value = thisRow;
  727. copyFolderName.value = row.dirName;
  728. copyFileName.value = clickRow.value.dirName;
  729. } else {
  730. isFolder.value = "N";
  731. clickRow.value = row;
  732. copyRow.value = row;
  733. clickRowId.value = row.docId;
  734. copyDirId.value = row.dirId;
  735. copyFileName.value = row.fileName;
  736. }
  737. collects.value = true;
  738. };
  739. // 取消文件收藏
  740. const delCollect = async (row, isfolder) => {
  741. const thisRow = toRaw(row);
  742. console.log("thisRow", thisRow);
  743. let query = {};
  744. if (isfolder) {
  745. query = {
  746. isFolder: "Y",
  747. relaId: thisRow.dirId,
  748. };
  749. } else {
  750. query = {
  751. isFolder: "N",
  752. relaId: thisRow.docId,
  753. };
  754. }
  755. const res = await delFavorite(query);
  756. //TODO 之后需要重新获取数据 并message提示
  757. console.log("res", res);
  758. refreshFile();
  759. };
  760. //刷新文件
  761. const refreshFile = () => {
  762. // console.log('ref',toRaw(thisFolder.value));
  763. if (toRaw(thisFolder.value) && toRaw(thisFolder.value).isFavorite) {
  764. //如果点开了文件夹
  765. // console.log(111);
  766. folderClick();
  767. } else {
  768. // console.log(222);
  769. getList();
  770. }
  771. };
  772. //获取权限详情
  773. const getLeveldetailFn = async (data) => {
  774. const res = await getLeveldetail(data);
  775. // console.log('getLeveldetailFn',res);
  776. if (res.code === 200) {
  777. thisFolderRole.value = res.data;
  778. }
  779. // console.log('thisFolderRole',thisFolderRole.value);
  780. };
  781. // 文件下载
  782. const downLoadfile = () => {
  783. myfile.fileDown(clickRow.value.docId).then((res) => {
  784. var reader = new FileReader();
  785. reader.onloadend = function (event) {
  786. //event 就是你要的返回内容
  787. //因为返回的报错格式是字符串,手动转换成对象,转换成功表示请求失败
  788. //转换失败就意味着你拿到的result是文件流,那么直接手动下载就好
  789. try {
  790. let data = JSON.parse(event.target.result);
  791. } catch (err) {
  792. const link = document.createElement("a"); // 创建a标签
  793. let blob = new Blob([res]);
  794. link.style.display = "none";
  795. link.href = URL.createObjectURL(blob); // 创建下载的链接
  796. link.setAttribute("download", clickRow.value.fileName); // 给下载后的文件命名
  797. document.body.appendChild(link);
  798. link.click(); // 点击下载
  799. document.body.removeChild(link); // 完成移除元素
  800. window.URL.revokeObjectURL(link.href); // 释放blob对象
  801. }
  802. };
  803. reader.readAsText(res);
  804. });
  805. };
  806. </script>
  807. <style lang="scss" scoped>
  808. .page {
  809. height: 100%;
  810. height: 100%;
  811. background-color: #fff;
  812. }
  813. .table_icon {
  814. height: 27px;
  815. width: 27px;
  816. vertical-align: middle;
  817. }
  818. .collapse_Item {
  819. height: 50%;
  820. }
  821. .setCli {
  822. width: 156px;
  823. max-height: auto;
  824. position: absolute;
  825. top: -70px;
  826. left: 300px;
  827. flex-wrap: 400;
  828. background-color: white;
  829. border: 1px solid gray;
  830. border-radius: 4px;
  831. z-index: 3;
  832. overflow-y: auto;
  833. // font-size: 16px;
  834. }
  835. .setCli1 {
  836. width: 156px;
  837. height: auto;
  838. position: absolute;
  839. background-color: white;
  840. border: 1px solid gray;
  841. border-radius: 4px;
  842. z-index: 100;
  843. overflow-y: auto;
  844. }
  845. .chooseSet {
  846. width: 140px;
  847. height: 30px;
  848. line-height: 30px;
  849. margin: 5px auto;
  850. font-size: 13px;
  851. // display: flex;
  852. // align-items: center;
  853. // position: relative;
  854. img {
  855. margin-right: 4px;
  856. vertical-align: middle;
  857. }
  858. }
  859. .chooseSet:hover {
  860. width: 140px;
  861. height: 30px;
  862. line-height: 30px;
  863. margin: 5px auto;
  864. font-size: 13px;
  865. background-color: #f5f7f9;
  866. /* color: white; */
  867. }
  868. ::v-deep .el-collapse-item__content {
  869. padding-bottom: 0;
  870. height: 50% !important;
  871. }
  872. ::v-deep .el-collapse-item__header {
  873. background-color: #ebeff6 !important;
  874. width: 100% !important;
  875. height: 24px !important;
  876. }
  877. ::v-deep .el-collapse-item__arrow {
  878. position: relative;
  879. color: #2e6bc8;
  880. right: 97%;
  881. }
  882. ::v-deep .el-table td.el-table__cell {
  883. border: none;
  884. font-size: 14px !important;
  885. font-weight: 400 !important;
  886. color: #000 !important;
  887. }
  888. ::v-deep .el-table__row {
  889. height: 35px !important;
  890. }
  891. ::v-deep .el-table .el-table__header-wrapper th {
  892. border-bottom: none;
  893. border-right: 1px solid #c1cce3;
  894. background-color: #fff !important;
  895. color: #505870;
  896. font-size: 14px;
  897. }
  898. .collapseItem_title {
  899. position: relative;
  900. left: 60px;
  901. color: #2e6bc8;
  902. font-family: Inter-Medium;
  903. font-size: 12px;
  904. }
  905. // 表格右边3个靠右对齐
  906. ::v-deep .el-table__header thead tr th {
  907. font-family: Inter-Medium;
  908. font-size: 14px;
  909. color: #505870;
  910. text-align: right;
  911. &:nth-child(1) {
  912. text-align: left;
  913. }
  914. }
  915. ::v-deep .el-table__body tbody [class*="column_"] {
  916. text-align: right;
  917. &:nth-child(4n + 1) {
  918. text-align: left;
  919. }
  920. }
  921. //平铺
  922. .tile_box {
  923. width: 100%;
  924. height: 300px;
  925. display: flex;
  926. flex-wrap: wrap;
  927. .file_box {
  928. width: 116px;
  929. min-height: 138px;
  930. // border: 1px solid #000;
  931. display: flex;
  932. flex-direction: column;
  933. align-items: center;
  934. .big_file_img {
  935. width: 100px;
  936. height: 100px;
  937. }
  938. span {
  939. font-size: 14px;
  940. font-weight: 400;
  941. line-height: 22px;
  942. }
  943. }
  944. }
  945. </style>