MyFile.vue 53 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484
  1. <template>
  2. <div>
  3. <div class="bigBox">
  4. <div class="settingBox">
  5. <!-- 设置盒子顶部搜索 -->
  6. <div class="topSearch">
  7. <div style="position: relative;">
  8. <el-input v-model="searchFire" class="searchFire" size="large" placeholder="搜索文件" />
  9. <el-icon style="color: gray;display: inline-block;position: absolute;top: 8px;right: 5px;">
  10. <Search />
  11. </el-icon>
  12. </div>
  13. <div>
  14. <el-icon style="font-size: 24px;" @click="createNewFile">
  15. <Plus />
  16. </el-icon>
  17. </div>
  18. </div>
  19. <!-- 方块点击盒子 -->
  20. <div
  21. style="display: flex;justify-content: flex-start;align-items: flex-start;flex-wrap: wrap;height: 80vh;align-content: flex-start;">
  22. <!-- v-for盒子 -->
  23. <template v-for="(item, index) in fileMenu">
  24. <div class="setBox" @click="changeFile(item, index)">
  25. <el-dropdown trigger="click" class="selectChe">
  26. <span class="el-dropdown-link">
  27. ...
  28. </span>
  29. <template #dropdown>
  30. <el-dropdown-menu>
  31. <el-dropdown-item @click="restName(item, index)">重命名</el-dropdown-item>
  32. <el-dropdown-item @click="delName(item, index)">删除</el-dropdown-item>
  33. </el-dropdown-menu>
  34. </template>
  35. </el-dropdown>
  36. <img src="../../assets/images/fileStyle.png" style="width: 72px;height: 72px;">
  37. <p class="ellipsis-text" v-if="selectedBox !== index">{{ item.spaceName }}</p>
  38. <el-input v-else v-model="newName" @blur="nameChange(item, index)"></el-input>
  39. </div>
  40. </template>
  41. </div>
  42. <div>
  43. <p>
  44. <span style="margin-left: 5px;">{{ useSpace ? useSpace + 'G' : '未能找到已使用空间' }}/{{ allSpace ?
  45. allSpace
  46. * 1024 + 'G' : '未能找到总空间' }}</span>
  47. <span style="margin-left: 5px;font-size: 12px;color: blue;cursor: pointer;"
  48. @click="askApply">申请扩容</span>
  49. </p>
  50. <el-progress style="margin-left: 8px;" :percentage="percent()" />
  51. </div>
  52. </div>
  53. <!-- 右侧大盒子 -->
  54. <div class="mesBox">
  55. <!-- 功能盒子 -->
  56. <div class="useBox">
  57. <!-- table切换 -->
  58. <div style="width: 100%;height: 24px;background-color: #7084B4;line-height: 20px;">
  59. <template v-for="(item, index) in menuList">
  60. <span @click="tableChange(item, index)"
  61. :class="['tables', { tableLis: selectedIndex === index }]">
  62. {{ item.name }}
  63. <img v-if="selectedIndex === index ? true : false"
  64. style="position: absolute;top: 4px;right: 4px;" src="../../assets/images/close.png"
  65. @click="shotdown(item)">
  66. </span>
  67. </template>
  68. </div>
  69. <!-- 众多功能 -->
  70. <div class="manyUse">
  71. <div
  72. style="display: flex;width: 82px;height: 32px;justify-content: flex-start;align-items: center;">
  73. <div style="margin-left: 5px;">
  74. <el-icon
  75. style="background-color: #7084B4;width: 24px;height: 24px;border-radius: 50%;color: white;">
  76. <Plus />
  77. </el-icon>
  78. </div>
  79. <div style="margin-left: 5px;" @click="createNewMenu">
  80. <span style="font-size: 14px;">新建</span>
  81. </div>
  82. </div>
  83. <template v-for="(item, index) in useMenu">
  84. <div style="display: flex;width: 82px;height: 32px;justify-content: flex-start;align-items: center;line-height: 18px;"
  85. @click="getMenu(item, index)">
  86. <div style="margin-left: 5px;">
  87. <img :src="item.img" style="width: 24px;height: 24px;" alt="">
  88. </div>
  89. <div style="margin-left: 5px;">
  90. <span style="font-size: 14px;">{{ item.name }}</span>
  91. </div>
  92. </div>
  93. </template>
  94. <div
  95. style="display: flex;width: 92px;height: 32px;justify-content: flex-start;align-items: center;line-height: 18px;">
  96. <div style="margin-left: 5px;">
  97. <img src="../../assets/images/upload.png" style="width: 24px;height: 24px;" alt="">
  98. </div>
  99. <div style="margin-left: 5px;">
  100. <el-dropdown trigger="click">
  101. <span style="color: black;cursor: pointer;">上传
  102. <el-icon>
  103. <arrow-down />
  104. </el-icon>
  105. </span>
  106. <template #dropdown>
  107. <el-dropdown-menu>
  108. <template v-for="(item, index) in arrorMenu">
  109. <el-dropdown-item @click="arrowClick(item, index)">
  110. <img :src="item.img" alt="">
  111. <span>{{ item.name }}</span>
  112. </el-dropdown-item>
  113. </template>
  114. </el-dropdown-menu>
  115. </template>
  116. </el-dropdown>
  117. </div>
  118. </div>
  119. </div>
  120. <!-- 面包屑功能栏 -->
  121. <div class="breadBox">
  122. <!-- 左侧 -->
  123. <div style="display: flex;justify-content: space-around;align-items: center;">
  124. <!-- 前进后退 -->
  125. <div style="display: flex;justify-content: space-around;align-items: center;">
  126. <img style="display:block;width: 11px;height: 11px;" :src="blueLeft" alt="">
  127. <img style="display:block;width: 16px;height: 16px;" :src="grayRight" alt="">
  128. </div>
  129. <!-- 面包屑 -->
  130. <div>
  131. <BreadMenu></BreadMenu>
  132. </div>
  133. </div>
  134. <!-- 右侧 -->
  135. <div>
  136. <img :src="sort" alt="">
  137. <img :src="squre" alt="">
  138. </div>
  139. </div>
  140. </div>
  141. <!-- 展示文件夹盒子 -->
  142. <div>
  143. <!-- 文件夹 -->
  144. <div class="detailBox">
  145. <el-collapse v-model="folder" accordion class="collapseSell">
  146. <el-collapse-item title="文件夹" name="1" class="custom-collapse-item">
  147. <el-table :data="folderList" style="width: 100%" @selection-change="handleSelectionChange1"
  148. :single-select="true" @row-click="folderClick">
  149. <el-table-column type="selection" width="55" />
  150. <el-table-column label="名称" width="180">
  151. <template #default="scope">
  152. <span>
  153. <img src="../../assets/images/fileBox.png" style="width: 20px;height: 24px;"
  154. alt="">
  155. {{ scope.row.dirName }}
  156. </span>
  157. </template>
  158. </el-table-column>
  159. <el-table-column prop="createTime" label="时间" width="180" />
  160. <el-table-column prop="dirType" label="类型">
  161. <template #default="scope">
  162. <span>{{ scope.row.dirType === "1" ? "文件夹" : "未知类型" }}</span>
  163. </template>
  164. </el-table-column>
  165. <el-table-column label="大小">
  166. <template #default="scope">
  167. <span>
  168. 10KB
  169. </span>
  170. </template>
  171. </el-table-column>
  172. </el-table>
  173. </el-collapse-item>
  174. </el-collapse>
  175. </div>
  176. <!-- 文件 -->
  177. <div class="fileTable">
  178. <el-collapse v-model="files" accordion class="collapse" style="height: 200px;">
  179. <el-collapse-item title="文件" name="2" class="">
  180. <el-table :data="fileList" style="width: 100%" @row-click="handleRowClick"
  181. @selection-change="handleSelectionChange">
  182. <el-table-column type="selection" width="55" />
  183. <el-table-column label="名称" width="200">
  184. <template #default="scope">
  185. <span style="white-space: nowrap;overflow: hidden;text-overflow: ellipsis;">
  186. <el-icon v-if="collectImg">
  187. <Star />
  188. </el-icon>
  189. <img v-else src="../../assets/images/yellowstar.png" alt="">
  190. <img :src="getImage(scope.row.fileType)" alt="">
  191. {{ scope.row.fileName }}
  192. </span>
  193. </template>
  194. </el-table-column>
  195. <el-table-column prop="createTime" label="时间" width="180" />
  196. <el-table-column prop="fileType" label="类型" />
  197. <el-table-column label="大小">
  198. <template #default="scope">
  199. <span>
  200. {{ scope.row.fileSize }}KB
  201. </span>
  202. </template>
  203. </el-table-column>
  204. </el-table>
  205. <div class="setCli" v-if="cliCC">
  206. <template v-for="(item, index) in mouseCli">
  207. <p @click="chooseSet(item, index)" class="chooseSet">
  208. <img :src="item.img" alt="">
  209. {{ item.name }}
  210. <span v-if="item.name == '在线编辑' || item.name == '协作' ? true : false"
  211. style="color: #7084B4;float: right;position: relative;">></span>
  212. </p>
  213. </template>
  214. <div class="setCli1" v-if="anyP">
  215. <p @click="chooseSet1()" class="chooseSet">
  216. <img :src="user" alt="">
  217. 选择人员
  218. </p>
  219. <p class="chooseSet">
  220. <img :src="archiveTray" alt="">
  221. 归档
  222. </p>
  223. </div>
  224. </div>
  225. </el-collapse-item>
  226. </el-collapse>
  227. </div>
  228. <!-- 穿梭框 -->
  229. <div>
  230. <el-dialog v-model="transferModal" title="分享" width="40%">
  231. <!-- 穿梭大盒子 -->
  232. <div class="transBox">
  233. <!-- 总数据包 -->
  234. <div class="allBag">
  235. <el-input style="width: 220px;margin-left: 18px;margin-top:5px" v-model="allBag"
  236. placeholder="搜索"></el-input>
  237. <div class="allLog">
  238. <el-tree :data="allTreeData" :props="allTreeProps" show-checkbox node-key="id"
  239. :default-expanded-keys="openTree" @check-change="allTreeChange" />
  240. </div>
  241. </div>
  242. <!-- 需要的数据包 -->
  243. <div class="needBag">
  244. <el-input style="width: 220px;margin-left: 18px;margin-top:5px" v-model="needBag"
  245. placeholder="搜索"></el-input>
  246. <div class="needLog">
  247. <el-tag v-for="(item, index) in chooseTagData" :key="index" class="tagtag" closable
  248. @close="handleClose(item)">
  249. {{ item.userName }}
  250. </el-tag>
  251. </div>
  252. </div>
  253. </div>
  254. <template #footer>
  255. <span class="dialog-footer">
  256. <el-button @click="transferModal = false">取消</el-button>
  257. <el-button type="primary" @click="sureShare">
  258. 确定
  259. </el-button>
  260. </span>
  261. </template>
  262. </el-dialog>
  263. </div>
  264. </div>
  265. </div>
  266. <!-- 扩容弹窗 -->
  267. <div>
  268. <el-dialog v-model="askTo" title="扩容申请" width="30%">
  269. <el-form>
  270. <el-form-item label="新容量">
  271. <el-input-number v-model="askNum" :min="1" :max="10" />
  272. </el-form-item>
  273. <el-form-item label="申请理由">
  274. <el-input v-model="askTalk" maxlength="150" placeholder="请输入申请理由" show-word-limit
  275. type="textarea" />
  276. </el-form-item>
  277. </el-form>
  278. <template #footer>
  279. <span class="dialog-footer">
  280. <el-button @click="askTo = false">取消</el-button>
  281. <el-button type="primary" @click="sureAsk">
  282. 确定
  283. </el-button>
  284. </span>
  285. </template>
  286. </el-dialog>
  287. </div>
  288. <!-- 新增文件夹弹窗 -->
  289. <div>
  290. <el-dialog v-model="addBoser" title="Tips" width="30%">
  291. <el-form :model="boserForm" label-width="120px">
  292. <!-- <el-form-item label="空间id">
  293. <el-input v-model="boserForm.spaceId" />
  294. </el-form-item> -->
  295. <!-- <el-form-item label="目录类型">
  296. <el-input v-model="boserForm.dirType" />
  297. </el-form-item> -->
  298. <!-- <el-form-item label="目录权限">
  299. <el-input v-model="boserForm.dirPower" />
  300. </el-form-item> -->
  301. <el-form-item label="目录名称">
  302. <el-input v-model="boserForm.dirName" />
  303. </el-form-item>
  304. <!-- <el-form-item label="父目录id">
  305. <el-input v-model="boserForm.parentId" />
  306. </el-form-item> -->
  307. <!-- <el-form-item label="备注">
  308. <el-input v-model="boserForm.remark" />
  309. </el-form-item> -->
  310. </el-form>
  311. <template #footer>
  312. <span class="dialog-footer">
  313. <el-button @click="addBoser = false">取消</el-button>
  314. <el-button type="primary" @click="sureAddBoser">
  315. 确认
  316. </el-button>
  317. </span>
  318. </template>
  319. </el-dialog>
  320. </div>
  321. <div>
  322. <el-dialog v-model="addFile" title="Tips" width="30%">
  323. <el-form :model="fileForm" label-width="120px">
  324. <el-form-item label="空间类型">
  325. <el-input v-model="fileForm.spaceType" />
  326. </el-form-item>
  327. <el-form-item label="空间名称">
  328. <el-input v-model="fileForm.spaceName" />
  329. </el-form-item>
  330. <el-form-item label="空间容量">
  331. <el-input v-model="fileForm.spaceCap" />
  332. </el-form-item>
  333. <el-form-item label="已使用空间">
  334. <el-input v-model="fileForm.usedCap" />
  335. </el-form-item>
  336. <el-form-item label="剩余空间">
  337. <el-input v-model="fileForm.freeCap" />
  338. </el-form-item>
  339. <el-form-item label="备注">
  340. <el-input v-model="fileForm.remark" />
  341. </el-form-item>
  342. </el-form>
  343. <template #footer>
  344. <span class="dialog-footer">
  345. <el-button @click="addFile = false">取消</el-button>
  346. <el-button type="primary" @click="sureAddFile">
  347. 确认
  348. </el-button>
  349. </span>
  350. </template>
  351. </el-dialog>
  352. </div>
  353. <!-- 文件上传 -->
  354. <div>
  355. <el-dialog v-model="uploadModal" title="文件上传" width="30%">
  356. <el-upload class="upload-demo" drag :http-request="onSuccess" multiple>
  357. <el-icon class="el-icon--upload"><upload-filled /></el-icon>
  358. <div class="el-upload__text">
  359. 拖入或<em>点击上传</em>
  360. </div>
  361. <template #tip>
  362. <div class="el-upload__tip">
  363. 请选择或拖入文件
  364. </div>
  365. </template>
  366. </el-upload>
  367. <template #footer>
  368. <span class="dialog-footer">
  369. <el-button @click="uploadModal = false">取消</el-button>
  370. <el-button type="primary" @click="sureUpload">
  371. 确认
  372. </el-button>
  373. </span>
  374. </template>
  375. </el-dialog>
  376. </div>
  377. <!-- 文件重命名 -->
  378. <div>
  379. <el-dialog v-model="fileNameChange" title="重命名" width="30%">
  380. <el-form :model="nameForm" label-width="120px">
  381. <el-form-item label="新名字">
  382. <el-input v-model="nameForm.name"></el-input>
  383. </el-form-item>
  384. </el-form>
  385. <template #footer>
  386. <span class="dialog-footer">
  387. <el-button @click="fileNameChange = false">取消</el-button>
  388. <el-button type="primary" @click="sureChangeName">
  389. 确认
  390. </el-button>
  391. </span>
  392. </template>
  393. </el-dialog>
  394. </div>
  395. <!-- 文件收藏 -->
  396. <div>
  397. <el-dialog v-model="fileCollect" title="重命名" width="30%">
  398. <el-form :model="collectForm" label-width="120px">
  399. <el-form-item label="名称">
  400. <el-input v-model="collectForm.name" />
  401. </el-form-item>
  402. <el-form-item label="收藏标签">
  403. <div class="newTag" v-if="tagCollect">
  404. <el-input v-model="newTag" placeholder="请输入新标签" @blur="tagBlur"></el-input>
  405. </div>
  406. <el-select v-model="collectForm.folders" class="m-2" placeholder="请选择" size="large"
  407. @change="collectChange">
  408. <el-option v-for="(item, index) in collectList" :key="item.labelId" :label="item.label"
  409. :value="item.labelId" />
  410. </el-select>
  411. </el-form-item>
  412. </el-form>
  413. <el-button @click="createTag">新建标签</el-button>
  414. <template #footer>
  415. <span class="dialog-footer">
  416. <el-button @click="fileCollect = false">取消</el-button>
  417. <el-button type="primary" @click="sureCollect">
  418. 确认
  419. </el-button>
  420. </span>
  421. </template>
  422. </el-dialog>
  423. </div>
  424. </div>
  425. </div>
  426. </template>
  427. <script>
  428. import { ref } from 'vue'
  429. import myfile from '../../api/myfile/myfile'
  430. import space from '../../api/space/space'
  431. import documents from '../../api/document/document'
  432. import fileSpace from '../../api/filespace/fileSpace'
  433. import userTree from '../../api/user/userTree'
  434. import fileShare from '../../api/fileShare/fileShare'
  435. import collect from '../../api/collect/collect'
  436. import BreadMenu from './components/BreadMenu.vue'
  437. import ImgFile from "./jsComponents/ImgFile"
  438. import { Search } from '@element-plus/icons-vue'
  439. import blueLeft from '../../assets/images/blueLeft.png'
  440. import grayRight from "../../assets/images/grayRight.png"
  441. import sort from '../../assets/images/sort.png'
  442. import squre from '../../assets/images/squre.png'
  443. import { ElMessage } from 'element-plus'
  444. import txt from '../../assets/images/txt.png'
  445. import pptx from '../../assets/images/pptx.png'
  446. import word from '../../assets/images/word.png'
  447. import pdf from '../../assets/images/pdf.png'
  448. import xlxs from '../../assets/images/xlxs.png'
  449. export default {
  450. setup() {
  451. let searchFire = ref('')
  452. let selectedIndex = ref(0)
  453. let folder = ref(['1'])
  454. let files = ref(['2'])
  455. let folderList = ref([])
  456. let askTo = ref(false)
  457. let askNum = ref(1)
  458. let askTalk = ref('')
  459. let newTag = ref('')
  460. let cliCC = ref(false)
  461. let transferModal = ref(false)
  462. let addBoser = ref(false)
  463. let addFile = ref(false)
  464. let anyP = ref(false)
  465. let uploadModal = ref(false)
  466. let collectImg = ref(true)
  467. let fileCollect = ref(false)
  468. let tagCollect = ref(false)//添加收藏标签时显示
  469. let selectedBox = ref(-1)
  470. let newName = ref('')
  471. let clickRowId = ref("")
  472. let trandata = ref()
  473. let folderId = ref('')
  474. let fileId = ref('')
  475. let tranvalue = ref([])
  476. let useSpace = ref(0)
  477. let allSpace = ref(0)
  478. let fileArr = ref([])
  479. let copyDirId = ref(0)//需要操作的dirid
  480. let copySpaceId = ref(0)//需要操作的spaceid
  481. let copyDocId = ref(0)//需要操作的docid
  482. let copyFileId = ref(0)//需要操作的fileid
  483. let copyFileSize = ref(0)//需要操作的filesize
  484. let copyFileType = ref('')//需要操作的文件类型
  485. let copyFileName = ref("")//需要操作的文件名
  486. let directoryId = ref('')
  487. let allBag = ref("")//穿梭狂内搜索
  488. let needBag = ref("")
  489. let sortNum = ref(0)
  490. let boserForm = ref({
  491. spaceId: "",//空间id
  492. dirName: "",
  493. dirPower: "",
  494. dirType: "",
  495. parentId: "",
  496. remark: ""//备注
  497. })
  498. let fileForm = ref({
  499. spaceType: '',
  500. spaceName: "",
  501. spaceCap: "",
  502. usedCap: "",
  503. freeCap: "",
  504. remark: "",
  505. })
  506. let fileList = ref([
  507. ])
  508. let menuList = ref([
  509. ])
  510. let useMenu = ref([
  511. {
  512. img: ImgFile.copy,
  513. name: "复制"
  514. },
  515. {
  516. img: ImgFile.clipboard,
  517. name: "粘贴"
  518. },
  519. {
  520. img: ImgFile.share,
  521. name: "分享给"
  522. },
  523. {
  524. img: ImgFile.trash,
  525. name: "删除"
  526. },
  527. ])
  528. let arrorMenu = ref([
  529. {
  530. img: ImgFile.file,
  531. name: "文件"
  532. },
  533. {
  534. img: ImgFile.folder,
  535. name: '文件夹'
  536. },
  537. {
  538. img: ImgFile.image,
  539. name: "图片"
  540. },
  541. {
  542. img: ImgFile.filmSlate,
  543. name: "视频"
  544. },
  545. {
  546. img: ImgFile.musicNotes,
  547. name: "音频"
  548. }
  549. ])
  550. let mouseCli = ref([
  551. {
  552. img: ImgFile.addolder,
  553. name: "移动",
  554. },
  555. {
  556. img: ImgFile.copy,
  557. name: "复制",
  558. },
  559. {
  560. img: ImgFile.clipboard,
  561. name: "粘贴"
  562. },
  563. {
  564. img: ImgFile.collect,
  565. name: "收藏"
  566. },
  567. {
  568. img: ImgFile.downLoad,
  569. name: "下载"
  570. },
  571. {
  572. img: ImgFile.textbox,
  573. name: "重命名"
  574. },
  575. {
  576. img: ImgFile.goon,
  577. name: "发送"
  578. },
  579. {
  580. img: ImgFile.share,
  581. name: "分享"
  582. },
  583. {
  584. img: ImgFile.notePencil,
  585. name: "在线编辑"
  586. },
  587. {
  588. img: ImgFile.togger,
  589. name: "协作"
  590. },
  591. {
  592. img: ImgFile.icc,
  593. name: "文字识别"
  594. },
  595. {
  596. img: ImgFile.history,
  597. name: "历史版本"
  598. },
  599. {
  600. img: ImgFile.share,
  601. name: "删除"
  602. }
  603. ])
  604. let nameForm = ref({
  605. name: ""
  606. })
  607. let allTreeProps = {
  608. label: 'label',
  609. children: 'children',
  610. disabled: false,
  611. id: "id"
  612. }
  613. let collectForm = ref({
  614. name: "",
  615. folders: "",
  616. })
  617. let allTreeData = ref([])
  618. let needTagData = ref([])
  619. let chooseTagData = ref([])
  620. let openTree = ref([])
  621. let fileNameChange = ref(false)
  622. let fileMenu = ref([])
  623. let collectList = ref([])
  624. // 获取所有文件夹
  625. function getAll() {
  626. myfile.getAllFileMenu({ dirId: folderId.value }).then(res => {
  627. if (res.code === 200) {
  628. fileList.value = res.rows
  629. }
  630. })
  631. }
  632. // 获取所有中栏
  633. function getAllMiddle() {
  634. fileSpace.getFileSpace({}).then(res => {
  635. fileMenu.value = res.rows
  636. })
  637. }
  638. // 获取用户树
  639. function getAllUser() {
  640. userTree.getUserTree({}).then(res => {
  641. allTreeData.value = [res]
  642. userTree.getUserTree({}).then(res => {
  643. allTreeData.value = [res];
  644. // 递归函数来获取所有节点的 id
  645. function getAllNodeIds(nodes) {
  646. nodes.forEach(node => {
  647. openTree.value.push(node.id);
  648. if (node.children && node.children.length > 0) {
  649. getAllNodeIds(node.children);
  650. }
  651. });
  652. }
  653. // 调用递归函数获取所有节点的 id
  654. getAllNodeIds(allTreeData.value);
  655. });
  656. })
  657. }
  658. function getAllCollect() {
  659. collect.getCollect({}).then(res => {
  660. const maxAge = res.rows.reduce((max, obj) => (obj.orderNum > max ? obj.orderNum : max), res.rows[0].orderNum)
  661. sortNum.value = maxAge
  662. collectList.value = res.rows.map(item => {
  663. return {
  664. label: item.labelName,
  665. labelId: item.labelId,
  666. order: item.orderNum
  667. }
  668. })
  669. })
  670. }
  671. function changeFile(row, num) {
  672. directoryId.value = row.spaceId
  673. getAllText()
  674. this.selectedIndex = num
  675. const newItem = {
  676. name: row.spaceName,
  677. choose: row.spaceId
  678. };
  679. // 检查 newItem 是否已存在于 menuList 中
  680. const isItemExist = menuList.value.some(item => item.choose === newItem.choose);
  681. // 如果不存在,则添加它
  682. if (!isItemExist) {
  683. menuList.value.push(newItem);
  684. }
  685. useSpace.value = row.usedCap
  686. allSpace.value = row.spaceCap
  687. }
  688. // tableMenu切换
  689. function tableChange(row, num) {
  690. this.selectedIndex = num
  691. }
  692. // x图标事件
  693. function shotdown(row) {
  694. this.menuList = this.menuList.filter(item => item.name !== row.name)
  695. }
  696. // 文件名表格每一行点击事件
  697. function handleRowClick(row) {
  698. console.log(row, '888');
  699. clickRowId.value = row.docId
  700. copyDirId.value = row.dirId
  701. copySpaceId.value = row.spaceId
  702. copyFileId.value = row.fileId
  703. copyFileSize.value = row.fileSize
  704. copyFileType.value = row.fileType
  705. nameForm.value.name = row.fileName
  706. if (cliCC.value === true) {
  707. cliCC.value = false
  708. } else {
  709. cliCC.value = true
  710. }
  711. fileShare.getSharePeople(row.docId).then(res => {
  712. console.log(res, 'res');
  713. }).catch(err => {
  714. console.log(err, 'err');
  715. })
  716. }
  717. // 申请扩容
  718. function askApply() {
  719. this.askTo = true
  720. }
  721. function sureAsk() {
  722. this.askTo = false
  723. }
  724. //mouse弹框
  725. function chooseSet(row, num) {
  726. if (row.name == '在线编辑' || row.name == '协作') {
  727. cliCC.value = true
  728. } else {
  729. cliCC.value = false
  730. }
  731. if (row.name == '分享') {
  732. transferModal.value = true
  733. } else {
  734. transferModal.value = false
  735. }
  736. if (row.name == '协作') {
  737. anyP.value = true
  738. } else {
  739. anyP.value = false
  740. }
  741. if (row.name == '删除') {
  742. myfile.delMenu(clickRowId.value).then(res => {
  743. if (res.code === 200) {
  744. ElMessage({
  745. type: "success",
  746. message: "删除成功"
  747. })
  748. getAll()
  749. }
  750. })
  751. }
  752. if (row.name === '复制') {
  753. myfile.fileCopy({ dirId: copyDirId.value, docId: clickRowId.value, spaceId: copySpaceId.value }).then(res => {
  754. if (res.code === 200) {
  755. ElMessage({
  756. message: "复制成功",
  757. type: "success"
  758. })
  759. }
  760. })
  761. }
  762. if (row.name === '移动') {
  763. myfile.fileMove({ dirId: copyDirId.value, docId: clickRowId.value, spaceId: copySpaceId.value }).then(res => {
  764. if (res.code === 200) {
  765. ElMessage({
  766. message: "移动成功",
  767. type: "success"
  768. })
  769. }
  770. })
  771. }
  772. if (row.name === '重命名') {
  773. fileNameChange.value = true
  774. }
  775. if (row.name === "下载") {
  776. myfile.fileDown(copyFileId.value).then(res => {
  777. if (res) {
  778. ElMessage({
  779. message: "正在下载",
  780. type: "info"
  781. })
  782. }
  783. })
  784. }
  785. if (row.name === '收藏') {
  786. collectForm.value.name = nameForm.value.name
  787. fileCollect.value = true
  788. }
  789. }
  790. function chooseSet1() {
  791. transferModal.value = true
  792. anyP.value = false
  793. }
  794. function getSpace() {
  795. }
  796. function createNewMenu() {
  797. addBoser.value = true
  798. }
  799. // 新增中栏下方数据
  800. function sureAddBoser() {
  801. documents.addDocument({
  802. "dirName": boserForm.value.dirName,
  803. // "dirRole": boserForm.value.dirPower,
  804. // "dirType": boserForm.value.dirType,
  805. // "parentId": boserForm.value.parentId,
  806. // "remark": boserForm.value.remark,
  807. // "spaceId": boserForm.value.spaceId,
  808. }).then(res => {
  809. if (res.code === 200) {
  810. ElMessage({
  811. message: '添加成功',
  812. type: 'success',
  813. })
  814. }
  815. addBoser.value = false
  816. getAllText()
  817. })
  818. }
  819. // 所有文件夹
  820. function getAllText() {
  821. documents.getALLdocument({ spaceId: directoryId.value }).then(res => {
  822. folderList.value = res.data
  823. })
  824. }
  825. function createNewFile() {
  826. addFile.value = true
  827. }
  828. // 确定新增中栏
  829. function sureAddFile() {
  830. fileSpace.addFileSpace(
  831. {
  832. "spaceName": fileForm.value.spaceName,
  833. "spaceType": fileForm.value.spaceType,
  834. "spaceCap": fileForm.value.spaceCap - 0,//空间容量
  835. "usedCap": fileForm.value.usedCap - 0,//已用空间
  836. "freeCap": fileForm.value.freeCap - 0,//剩余空间
  837. "remark": fileForm.value.remark,//备注
  838. }
  839. ).then(res => {
  840. if (res.code === 200) {
  841. ElMessage({
  842. message: "新增成功",
  843. type: "success"
  844. })
  845. getAllMiddle()
  846. addFile.value = false
  847. } else {
  848. ElMessage({
  849. message: "请检查错误",
  850. type: "warning"
  851. })
  852. }
  853. })
  854. }
  855. function arrowClick(row, num) {
  856. if (row.name === '文件') {
  857. uploadModal.value = true
  858. } else {
  859. uploadModal.value = false
  860. }
  861. }
  862. // 确认上传
  863. function sureUpload() {
  864. for (var i = 0; i <= fileArr.value.length; i++) {
  865. myfile.uploadFile({
  866. spaceId: 1,
  867. dirId: 1,
  868. file: fileArr.value[i]
  869. }).then(res => {
  870. if (res.code === 200) {
  871. ElMessage({
  872. message: "上传文件成功",
  873. type: "success"
  874. })
  875. getAll()
  876. uploadModal.value = false
  877. fileArr.value = []
  878. }
  879. })
  880. }
  881. }
  882. function onSuccess(files, val) {
  883. fileArr.value.push(files.file)
  884. }
  885. // 筛选后缀图片
  886. function getImage(file) {
  887. if (file === '.txt') {
  888. return txt
  889. } else if (file === '.xlxs' || file === '.docx') {
  890. return xlxs
  891. } else if (file === '.pptx') {
  892. return pptx
  893. } else if (file === '.word') {
  894. return word
  895. } else if (file === '.pdf') {
  896. return pdf
  897. }
  898. }
  899. // 表格多选框
  900. function handleSelectionChange(val) {
  901. if (val.length > 1) {
  902. // 如果选择了多项,只保留最后一项
  903. val.shift();
  904. }
  905. if (val.length === 1) {
  906. fileId.value = val[0].docId
  907. }
  908. }
  909. // 文件夹
  910. function handleSelectionChange1(val) {
  911. if (val.length > 1) {
  912. // 如果选择了多项,只保留最后一项
  913. val.shift();
  914. }
  915. if (val.length === 1) {
  916. folderId.value = val[0].dirId
  917. console.log(folderId.value, '666');
  918. }
  919. }
  920. // 重命名
  921. function restName(row, index) {
  922. newName.value = row.spaceName
  923. selectedBox.value = index
  924. }
  925. // 重命名失焦事件
  926. function nameChange(row, index) {
  927. fileSpace.editFileSpace({
  928. "spaceId": row.spaceId,
  929. "spaceName": newName.value,
  930. }).then(res => {
  931. if (res.code === 200) {
  932. getAllMiddle()
  933. selectedBox.value = -1
  934. ElMessage({
  935. message: '重命名成功',
  936. type: "success"
  937. })
  938. }
  939. })
  940. }
  941. function getMenu(row, num) {
  942. if (row.name === '删除') {
  943. // 文件夹删除
  944. documents.delDocument(folderId.value).then(res => {
  945. if (res.code === 200) {
  946. ElMessage({
  947. message: "删除成功",
  948. type: "success"
  949. })
  950. getAllText()
  951. } else {
  952. ElMessage({
  953. message: "删除失败,目录应不为空",
  954. type: "error"
  955. })
  956. }
  957. })
  958. myfile.delMenu(fileId.value).then(res => {
  959. if (res.code === 200) {
  960. ElMessage({
  961. message: "删除成功",
  962. type: "success"
  963. })
  964. getAll()
  965. }
  966. })
  967. }
  968. }
  969. function delName(row, num) {
  970. fileSpace.delFileSpace(row.spaceId).then(res => {
  971. if (res.code === 200) {
  972. getAllMiddle()
  973. ElMessage({
  974. message: "删除成功",
  975. type: "success"
  976. })
  977. }
  978. })
  979. }
  980. // 计算百分比
  981. function percent() {
  982. let numP = 0
  983. if (useSpace.value) {
  984. numP = parseInt(useSpace.value / (allSpace.value * 1024) * 100)
  985. return numP
  986. }
  987. }
  988. // 文件夹每行点击事件
  989. function folderClick(row, list) {
  990. folderId.value = row.dirId
  991. getAll()
  992. }
  993. // 确认文件重命名
  994. function sureChangeName() {
  995. myfile.editNewMenu({
  996. dirId: copyDirId.value - 0,
  997. docId: clickRowId.value - 0,
  998. fileId: copyFileId.value,
  999. fileName: nameForm.value.name,
  1000. fileSize: copyFileSize.value - 0,
  1001. fileType: copyFileType.value,
  1002. remark: '',
  1003. spaceId: copySpaceId.value - 0,
  1004. }).then(res => {
  1005. console.log(res, '852');
  1006. if (res.code === 200) {
  1007. ElMessage({
  1008. message: "重命名成功",
  1009. type: "success"
  1010. })
  1011. fileNameChange.value = false
  1012. getAll()
  1013. }
  1014. })
  1015. }
  1016. // 分享穿梭框
  1017. function allTreeChange(e) {
  1018. const id = e.id;
  1019. const label = e.label;
  1020. // 查找是否已经存在相同 userId 的数据的索引
  1021. const existingIndex = needTagData.value.findIndex(item => item.userId === id);
  1022. if (existingIndex !== -1) {
  1023. // 如果已存在,删除该项
  1024. needTagData.value.splice(existingIndex, 1);
  1025. } else {
  1026. // 选择操作,将数据添加到 needTagData 中
  1027. needTagData.value.push({ userId: id, userName: label });
  1028. }
  1029. chooseTagData.value = needTagData.value;
  1030. }
  1031. // 确认分享
  1032. function sureShare() {
  1033. fileShare.addSharePeople(clickRowId.value, needTagData.value).then(res => {
  1034. if (res.code === 200) {
  1035. ElMessage({
  1036. message: "分享成功",
  1037. type: "success"
  1038. })
  1039. transferModal.value = false
  1040. }
  1041. })
  1042. }
  1043. function handleClose(tag) {
  1044. chooseTagData.value.splice(chooseTagData.value.indexOf(tag), 1)
  1045. }
  1046. // 确认收藏
  1047. function sureCollect() {
  1048. collect.addCollect({
  1049. "docInfo": {
  1050. "fileId": copyFileId.value - 0,
  1051. "labelId": collectForm.value.folders - 0,
  1052. },
  1053. }).then(res => {
  1054. if (res.code === 200) {
  1055. ElMessage({
  1056. message: "收藏成功",
  1057. type: "success"
  1058. })
  1059. }
  1060. })
  1061. fileCollect.value = false
  1062. }
  1063. function collectChange(e) {
  1064. collectForm.value.folders = e
  1065. }
  1066. // 新建收藏标签
  1067. function createTag() {
  1068. newTag.value = ''
  1069. tagCollect.value = true
  1070. }
  1071. function tagBlur() {
  1072. collect.addNewTag({ labelName: newTag.value, orderNum: sortNum.value + 1 }).then(res => {
  1073. if (res.code === 200) {
  1074. ElMessage({
  1075. message: "新建标签成功",
  1076. type: "success"
  1077. })
  1078. getAllCollect()
  1079. }
  1080. })
  1081. tagCollect.value = false
  1082. }
  1083. return {
  1084. allBag,
  1085. folderList,//文件夹的数据
  1086. fileList,//文件夹的数据
  1087. getAll,//拿到数据的方法
  1088. searchFire,//搜索文件的model
  1089. changeFile,//切换右侧视图的file
  1090. menuList,//右侧切换
  1091. tableChange,//改变class点击事件
  1092. selectedIndex,//当前选中下标
  1093. shotdown,//筛选出当前数据
  1094. useMenu,
  1095. arrorMenu,
  1096. blueLeft,//返回
  1097. grayRight,//前进
  1098. squre,//视图切换
  1099. sort,//排序
  1100. folder,
  1101. files,
  1102. handleRowClick,
  1103. askApply,//申请扩容
  1104. askTo,
  1105. sureAsk,
  1106. askNum,
  1107. askTalk,
  1108. cliCC,
  1109. mouseCli,//文件点击弹框
  1110. chooseSet,
  1111. transferModal,
  1112. trandata,
  1113. tranvalue,
  1114. anyP,
  1115. chooseSet1,
  1116. getSpace,//获取内存空间
  1117. fileMenu,
  1118. addBoser,
  1119. boserForm,
  1120. createNewMenu,
  1121. sureAddBoser,
  1122. // delBoser,
  1123. getAllText,
  1124. clickRowId,
  1125. addFile,
  1126. createNewFile,
  1127. fileForm,
  1128. sureAddFile,
  1129. // fileUpload,
  1130. txt,
  1131. pptx,
  1132. xlxs,
  1133. pdf,
  1134. word,
  1135. getImage,//筛选文件类型
  1136. handleSelectionChange,
  1137. handleSelectionChange1,
  1138. selectedBox,//重命名相关
  1139. restName,//重命名相关
  1140. newName,//重命名相关
  1141. nameChange,
  1142. getMenu,
  1143. folderId,
  1144. fileId,
  1145. getAllMiddle,//拿到所有空间信息
  1146. delName,//删除空间信息
  1147. useSpace,//使用空间
  1148. allSpace,//总空间
  1149. percent,
  1150. arrowClick,
  1151. uploadModal,
  1152. sureUpload,
  1153. onSuccess,
  1154. fileArr,
  1155. directoryId,
  1156. folderClick,
  1157. copyDirId,//复制移动需要的↓
  1158. copyDocId,
  1159. copySpaceId,
  1160. copyFileId,
  1161. copyFileName,
  1162. copyFileSize,
  1163. copyFileType,
  1164. sureChangeName,//文件重命名
  1165. fileNameChange,//文件重命名模态框
  1166. nameForm,
  1167. getAllUser,//获取所有用户
  1168. allTreeProps,//树形控件需要显示键名
  1169. allTreeData,//树形控件数据
  1170. allTreeChange,
  1171. sureShare,
  1172. openTree,
  1173. chooseTagData,
  1174. handleClose,
  1175. collectImg,//收藏小星星
  1176. fileCollect,
  1177. collectForm,
  1178. sureCollect,
  1179. getAllCollect,//获取所有收藏文件夹
  1180. collectList,//文件收藏表
  1181. createTag,
  1182. tagCollect,
  1183. tagBlur,
  1184. newTag,
  1185. collectChange,
  1186. sortNum,
  1187. needBag,
  1188. }
  1189. },
  1190. created() {
  1191. if (this.directoryId === '') {
  1192. this.directoryId = 0
  1193. this.getAllText()
  1194. }
  1195. if (this.folderId === '') {
  1196. this.folderId = 0
  1197. this.getAll()
  1198. }
  1199. this.getAll();
  1200. this.getSpace()
  1201. this.getAllText()
  1202. this.getAllMiddle()
  1203. this.getAllUser()
  1204. this.getAllCollect()
  1205. },
  1206. watch: {
  1207. },
  1208. components: {
  1209. BreadMenu,
  1210. },
  1211. }
  1212. </script>
  1213. <style scoped>
  1214. p {
  1215. margin: 0;
  1216. padding: 0;
  1217. }
  1218. .bigBox {
  1219. display: flex;
  1220. justify-content: flex-start;
  1221. }
  1222. .settingBox {
  1223. width: 22vw;
  1224. height: 100%;
  1225. border: 2px solid black;
  1226. border-radius: 4px;
  1227. /* margin: 5px 5px; */
  1228. margin-right: 15px;
  1229. background-color: white;
  1230. }
  1231. .topSearch {
  1232. width: 100%;
  1233. height: 48px;
  1234. background-color: #EBEFF6;
  1235. display: flex;
  1236. justify-content: space-around;
  1237. align-items: center;
  1238. }
  1239. .searchFire {
  1240. width: 248px;
  1241. height: 32px;
  1242. }
  1243. .setBox {
  1244. width: 88px;
  1245. height: 112px;
  1246. text-align: center;
  1247. margin-left: 12px;
  1248. margin-top: 5px;
  1249. position: relative;
  1250. }
  1251. .setBox:hover {
  1252. background-color: #EEF9FF;
  1253. }
  1254. .setBox:hover .selectChe {
  1255. background-color: #EEF9FF;
  1256. display: block;
  1257. }
  1258. .selectChe {
  1259. display: none;
  1260. width: 20px;
  1261. height: 20px;
  1262. background: rgba(255, 255, 255, 0.7);
  1263. border-radius: 4px 4px 4px 4px;
  1264. position: absolute;
  1265. top: 2px;
  1266. right: 2px;
  1267. line-height: 10px;
  1268. }
  1269. .mesBox {
  1270. width: 70vw;
  1271. height: 100%;
  1272. /* margin: 5px 5px; */
  1273. border-radius: 4px;
  1274. background-color: white;
  1275. }
  1276. .useBox {
  1277. width: 100%;
  1278. height: 96px;
  1279. }
  1280. .tables {
  1281. display: inline-block;
  1282. width: 112px;
  1283. height: 22px;
  1284. border-radius: 4px;
  1285. line-height: 21px;
  1286. text-align: center;
  1287. font-size: 12px;
  1288. margin-left: 5px;
  1289. position: relative;
  1290. white-space: nowrap;
  1291. overflow: hidden;
  1292. text-overflow: ellipsis;
  1293. }
  1294. .tableLis {
  1295. display: inline-block;
  1296. width: 112px;
  1297. height: 22px;
  1298. border-radius: 4px;
  1299. background-color: #EBEFF6;
  1300. line-height: 21px;
  1301. text-align: center;
  1302. font-size: 12px;
  1303. margin-left: 5px;
  1304. position: relative;
  1305. white-space: nowrap;
  1306. overflow: hidden;
  1307. text-overflow: ellipsis;
  1308. max-width: auto;
  1309. }
  1310. .manyUse {
  1311. width: 100%;
  1312. height: 48px;
  1313. /* background-color: gray; */
  1314. line-height: 48px;
  1315. display: flex;
  1316. justify-content: flex-start;
  1317. align-items: center;
  1318. }
  1319. .el-dropdown-link {
  1320. color: white;
  1321. }
  1322. .breadBox {
  1323. width: 100%;
  1324. height: 24px;
  1325. display: flex;
  1326. justify-content: space-between;
  1327. align-items: center;
  1328. background-color: #D9E0F0;
  1329. }
  1330. :deep(.el-collapse-item__header) {
  1331. height: 24px !important;
  1332. background-color: #EBEFF6 !important;
  1333. }
  1334. .detailBox {
  1335. width: 100%;
  1336. height: 270px;
  1337. }
  1338. :deep(.el-dialog__header) {
  1339. background-color: #ECEFF7;
  1340. margin-right: 0px;
  1341. }
  1342. .fileTable {
  1343. position: relative;
  1344. height: 300px;
  1345. /* overflow-y: auto; */
  1346. }
  1347. .setCli {
  1348. width: 156px;
  1349. height: auto;
  1350. position: absolute;
  1351. top: -70px;
  1352. left: 300px;
  1353. background-color: white;
  1354. border: 1px solid gray;
  1355. border-radius: 4px;
  1356. z-index: 2;
  1357. }
  1358. .setCli1 {
  1359. width: 156px;
  1360. height: auto;
  1361. position: absolute;
  1362. top: 185px;
  1363. left: 155px;
  1364. background-color: white;
  1365. border: 1px solid gray;
  1366. border-radius: 4px;
  1367. z-index: 2;
  1368. }
  1369. .chooseSet {
  1370. width: 100%;
  1371. height: 30px;
  1372. line-height: 30px;
  1373. }
  1374. .chooseSet:hover {
  1375. width: 100%;
  1376. height: 30px;
  1377. line-height: 30px;
  1378. background-color: #8693b2;
  1379. color: white;
  1380. }
  1381. :deep([data-v-69cdaa40] .el-collapse-item__header) {
  1382. padding-left: 10px;
  1383. }
  1384. :deep(.el-collapse-item__content) {
  1385. height: 235px;
  1386. overflow-y: auto;
  1387. }
  1388. .ellipsis-text {
  1389. white-space: nowrap;
  1390. overflow: hidden;
  1391. text-overflow: ellipsis;
  1392. max-width: auto;
  1393. }
  1394. .transBox {
  1395. width: 550px;
  1396. height: 400px;
  1397. margin: 0 auto;
  1398. display: flex;
  1399. justify-content: space-around;
  1400. align-items: center;
  1401. border: 1px solid black;
  1402. }
  1403. .allBag {
  1404. width: 255px;
  1405. height: 380px;
  1406. border: 1px solid green;
  1407. }
  1408. .needBag {
  1409. width: 255px;
  1410. height: 380px;
  1411. border: 1px solid green;
  1412. }
  1413. .allLog {
  1414. width: 245px;
  1415. height: 330px;
  1416. margin: 5px auto;
  1417. border: 1px solid red;
  1418. overflow-y: auto;
  1419. }
  1420. .needLog {
  1421. width: 245px;
  1422. height: 330px;
  1423. margin: 5px auto;
  1424. border: 1px solid red;
  1425. overflow-y: auto;
  1426. text-align: center;
  1427. }
  1428. .tagtag {
  1429. display: flex;
  1430. justify-content: space-between;
  1431. align-items: center;
  1432. text-align: start;
  1433. width: 230px;
  1434. margin: 0 auto;
  1435. }
  1436. :deep(.el-tag__content) {
  1437. display: block;
  1438. }
  1439. :deep(.el-icon el-tag__close) {
  1440. display: block;
  1441. }
  1442. </style>