PlaceGridFolder.vue 7.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241
  1. <template>
  2. <div>
  3. <div>
  4. <!-- flex盒子 -->
  5. <div class="bigBox">
  6. <template v-for="(item, index) in folderList">
  7. <!-- 循环盒子 -->
  8. <div class="flexBox" @contextmenu="rightClick(item, index, $event)">
  9. <!-- 图片 -->
  10. <div class="imgBox">
  11. <img src="../../../assets/images/folderBig.png" alt="" style="vertical-align: middle;">
  12. </div>
  13. <!-- 名称 -->
  14. <div class="nameBox">
  15. <p class="nameName">{{ item.dirName }}</p>
  16. </div>
  17. </div>
  18. </template>
  19. <!-- 右键唤出的菜单 -->
  20. <div class="rightList" v-if="folderVisible"
  21. :style="{ left: folderleft + 30 + 'px', top: foldertop - 50 + 'px' }">
  22. <div class="menu_item" @click="fatherOpen(null, null)">
  23. <img src="@/assets/images/trash.png" alt="" />
  24. <span>打开</span>
  25. </div>
  26. <div class="menu_item" @click="fatherRest(null, null)">
  27. <img src="@/assets/images/textbox.png" alt="" />
  28. <span>重命名</span>
  29. </div>
  30. <div class="menu_item" @click="fatherCollect">
  31. <img src="@/assets/images/collect.png" alt="" />
  32. <span>收藏</span>
  33. </div>
  34. </div>
  35. </div>
  36. </div>
  37. </div>
  38. </template>
  39. <script>
  40. import { ref, onMounted } from "vue"
  41. import { ElMessage } from "element-plus";
  42. import myfile from "../../../api/myfile/myfile";
  43. import documents from "../../../api/document/document";
  44. import ImgFile from "../jsComponents/ImgFile";
  45. export default {
  46. props: {
  47. folderClick: {
  48. type: Function,
  49. required: true,
  50. },
  51. restName: {
  52. type: Function,
  53. required: true
  54. },
  55. collectFolder: {
  56. type: Function,
  57. required: true
  58. },
  59. getAllTop: {
  60. type: Function,
  61. required: true
  62. },
  63. },
  64. setup(props, { emit }) {
  65. let impDirId = ref(0)
  66. let impSpaceId = ref(0)
  67. let newSpaceId = ref(0)
  68. let newDirId = ref(0)
  69. let topPath = ref("")
  70. let fileList = ref([])
  71. let folderList = ref([])
  72. let fileTotal = ref(0)
  73. let fileMenu = ref([])
  74. let folderleft = ref(0)
  75. let foldertop = ref(0)
  76. let folderVisible = ref(false)
  77. let copyDir = ref(0)
  78. let copySpa = ref(0)
  79. let copyNma = ref("")
  80. let copyFir = ref("")
  81. // 获取文件夹,中栏,文件
  82. function getAllTop() {
  83. documents.getTop(3).then(res => {
  84. let userMe = [res]
  85. impDirId.value = userMe[0].dirId//固定
  86. impSpaceId.value = userMe[0].spaceId//固定
  87. newSpaceId.value = userMe[0].spaceId//变化
  88. newDirId.value = userMe[0].dirId//变化
  89. topPath.value = userMe[0].dirPath
  90. let obj = {
  91. pageNum: 1,
  92. pageSize: 10
  93. }
  94. documents.getALLdocument({ parentId: userMe[0].dirId - 0, spaceId: userMe[0].spaceId, pageNum: obj.pageNum, pageSize: obj.pageSize }).then(res => {
  95. fileMenu.value = res.data
  96. folderList.value = res.data
  97. })
  98. myfile.getById(userMe[0].dirId - 0, obj).then(res => {
  99. if (res.code === 200) {
  100. fileList.value = res.rows
  101. fileTotal.value = res.total
  102. if (fileTotal.value / 10 != 1) {
  103. let x = Math.trunc(fileTotal.value / 10) + 1
  104. for (var i = 1; i <= x; i++) {
  105. obj.pageNum = i
  106. myfile.getById(userMe[0].dirId - 0, obj).then(res => {
  107. fileList.value = fileList.value.concat(res.rows)
  108. const uniqueFileList = Array.from(new Set(fileList.value.map(item => item.docId)))
  109. .map(docId => fileList.value.find(item => item.docId === docId));
  110. // 合并数组并更新 fileList.value
  111. fileList.value = uniqueFileList
  112. })
  113. }
  114. }
  115. }
  116. })
  117. })
  118. }
  119. function rightClick(row, num, eve) {
  120. eve.preventDefault();
  121. eve.stopPropagation();
  122. folderleft.value = eve.pageX
  123. foldertop.value = eve.pageY
  124. copyDir.value = row.dirId
  125. copySpa.value = row.spaceId
  126. copyNma.value = row.dirName
  127. copyFir.value = row.dirName
  128. if (folderVisible.value) {
  129. folderVisible.value = false
  130. } else {
  131. folderVisible.value = true
  132. }
  133. }
  134. function mouseClick() {
  135. folderVisible.value = false
  136. }
  137. function fatherOpen(a, b) {
  138. documents.getALLdocument({
  139. parentId: copyDir.value - 0,
  140. spaceId: copySpa.value - 0
  141. }).then(res => {
  142. folderList.value = res.data
  143. if (res.data.length === 0) {
  144. myfile.getById(copyDir.value).then(res => {
  145. if (res.code === 200) {
  146. fileList.value = res.rows
  147. }
  148. })
  149. } else {
  150. myfile.getById(copyDir.value).then(res => {
  151. if (res.code === 200) {
  152. fileList.value = res.rows
  153. }
  154. })
  155. }
  156. })
  157. }
  158. function fatherCollect() {
  159. emit("folderBack", copyNma.value, copyFir.value)
  160. props.collectFolder()
  161. }
  162. function fatherRest(a, b) {
  163. props.restName(a, b)
  164. emit('folderBack', copyDir.value, copySpa.value, copyNma.value)
  165. }
  166. onMounted(() => {
  167. getAllTop()
  168. window.addEventListener("click", mouseClick, true);
  169. })
  170. return {
  171. getAllTop,
  172. impDirId,
  173. impSpaceId,
  174. newDirId,
  175. newSpaceId,
  176. fileList,
  177. fileMenu,
  178. folderList,
  179. fileTotal,
  180. rightClick,
  181. folderleft,
  182. foldertop,
  183. folderVisible,
  184. mouseClick,
  185. fatherCollect,
  186. fatherOpen,
  187. fatherRest,
  188. copyDir,
  189. copySpa,
  190. copyNma,
  191. copyFir
  192. }
  193. }
  194. }
  195. </script>
  196. <style scoped>
  197. .bigBox {
  198. width: 100%;
  199. height: 100%;
  200. display: flex;
  201. justify-content: flex-start;
  202. align-items: center;
  203. flex-wrap: wrap;
  204. }
  205. .imgBox {
  206. width: 88px;
  207. height: 88px;
  208. text-align: center;
  209. line-height: 88px;
  210. }
  211. .flexBox {
  212. width: 104px;
  213. height: 148px;
  214. position: relative;
  215. }
  216. .nameName {
  217. width: 100%;
  218. text-align: center;
  219. white-space: nowrap;
  220. /* 禁止文本换行 */
  221. overflow: hidden;
  222. /* 隐藏溢出部分文本 */
  223. text-overflow: ellipsis;
  224. /* 显示省略号 */
  225. }
  226. .rightList {
  227. width: 100px;
  228. height: auto;
  229. position: absolute;
  230. background-color: white;
  231. border: 1px solid black;
  232. border-radius: 5px;
  233. }
  234. </style>