MyFile.vue 136 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037203820392040204120422043204420452046204720482049205020512052205320542055205620572058205920602061206220632064206520662067206820692070207120722073207420752076207720782079208020812082208320842085208620872088208920902091209220932094209520962097209820992100210121022103210421052106210721082109211021112112211321142115211621172118211921202121212221232124212521262127212821292130213121322133213421352136213721382139214021412142214321442145214621472148214921502151215221532154215521562157215821592160216121622163216421652166216721682169217021712172217321742175217621772178217921802181218221832184218521862187218821892190219121922193219421952196219721982199220022012202220322042205220622072208220922102211221222132214221522162217221822192220222122222223222422252226222722282229223022312232223322342235223622372238223922402241224222432244224522462247224822492250225122522253225422552256225722582259226022612262226322642265226622672268226922702271227222732274227522762277227822792280228122822283228422852286228722882289229022912292229322942295229622972298229923002301230223032304230523062307230823092310231123122313231423152316231723182319232023212322232323242325232623272328232923302331233223332334233523362337233823392340234123422343234423452346234723482349235023512352235323542355235623572358235923602361236223632364236523662367236823692370237123722373237423752376237723782379238023812382238323842385238623872388238923902391239223932394239523962397239823992400240124022403240424052406240724082409241024112412241324142415241624172418241924202421242224232424242524262427242824292430243124322433243424352436243724382439244024412442244324442445244624472448244924502451245224532454245524562457245824592460246124622463246424652466246724682469247024712472247324742475247624772478247924802481248224832484248524862487248824892490249124922493249424952496249724982499250025012502250325042505250625072508250925102511251225132514251525162517251825192520252125222523252425252526252725282529253025312532253325342535253625372538253925402541254225432544254525462547254825492550255125522553255425552556255725582559256025612562256325642565256625672568256925702571257225732574257525762577257825792580258125822583258425852586258725882589259025912592259325942595259625972598259926002601260226032604260526062607260826092610261126122613261426152616261726182619262026212622262326242625262626272628262926302631263226332634263526362637263826392640264126422643264426452646264726482649265026512652265326542655265626572658265926602661266226632664266526662667266826692670267126722673267426752676267726782679268026812682268326842685268626872688268926902691269226932694269526962697269826992700270127022703270427052706270727082709271027112712271327142715271627172718271927202721272227232724272527262727272827292730273127322733273427352736273727382739274027412742274327442745274627472748274927502751275227532754275527562757275827592760276127622763276427652766276727682769277027712772277327742775277627772778277927802781278227832784278527862787278827892790279127922793279427952796279727982799280028012802280328042805280628072808280928102811281228132814281528162817281828192820282128222823282428252826282728282829283028312832283328342835283628372838283928402841284228432844284528462847284828492850285128522853285428552856285728582859286028612862286328642865286628672868286928702871287228732874287528762877287828792880288128822883288428852886288728882889289028912892289328942895289628972898289929002901290229032904290529062907290829092910291129122913291429152916291729182919292029212922292329242925292629272928292929302931293229332934293529362937293829392940294129422943294429452946294729482949295029512952295329542955295629572958295929602961296229632964296529662967296829692970297129722973297429752976297729782979298029812982298329842985298629872988298929902991299229932994299529962997299829993000300130023003300430053006300730083009301030113012301330143015301630173018301930203021302230233024302530263027302830293030303130323033303430353036303730383039304030413042304330443045304630473048304930503051305230533054305530563057305830593060306130623063306430653066306730683069307030713072307330743075307630773078307930803081308230833084308530863087308830893090309130923093309430953096309730983099310031013102310331043105310631073108310931103111311231133114311531163117311831193120312131223123312431253126312731283129313031313132313331343135313631373138313931403141314231433144314531463147314831493150315131523153315431553156315731583159316031613162316331643165316631673168316931703171317231733174317531763177317831793180318131823183318431853186318731883189319031913192319331943195319631973198319932003201320232033204320532063207320832093210321132123213321432153216321732183219322032213222322332243225322632273228322932303231323232333234323532363237323832393240324132423243324432453246324732483249325032513252325332543255325632573258325932603261326232633264326532663267326832693270327132723273327432753276327732783279328032813282
  1. <template>
  2. <div>
  3. <div class="bigBox">
  4. <div class="settingBox" @click="mouseClick">
  5. <!-- 设置盒子顶部搜索 -->
  6. <div class="topSearch">
  7. <div class="spaceName">{{spaceName}}</div>
  8. <div>
  9. <el-icon v-hasRole="['system']" @click="createNewMenu(1, true)" color="#505870" size="24">
  10. <Plus />
  11. </el-icon>
  12. <!-- @click="createNewFile" -->
  13. </div>
  14. </div>
  15. <!-- 方块点击盒子 -->
  16. <div
  17. style="height: 75vh;overflow-y: auto;">
  18. <div class="searchBox">
  19. <div v-if="leftShowList === 2" style="width:100%">
  20. <el-input v-model="searchFire" @keyup.enter="fileBlur" @input="fileBlur" class="searchFire" size="large"
  21. placeholder="搜索文件夹" />
  22. <el-icon class="SearchIcon" @click="fileBlur">
  23. <Search />
  24. </el-icon>
  25. </div>
  26. <div v-else style="width:100%">
  27. <el-input v-model="searchFolderTree" @keyup.enter="folderBlur" class="searchFire" size="large"
  28. placeholder="搜索文件夹" />
  29. <el-icon class="SearchIcon" @click="folderBlur">
  30. <Search />
  31. </el-icon>
  32. </div>
  33. <div class="left_changeShow">
  34. <img v-if="leftShowList === 2" src="@/assets/images/squre.png" @click="changeLeftShow" alt="">
  35. <img v-else src="@/assets/images/Frame_187.png" @click="changeLeftShow" alt="">
  36. </div>
  37. </div>
  38. <!-- v-for盒子 -->
  39. <div v-if="leftShowList === 2" style="display: flex;justify-content: flex-start;align-items: flex-start;flex-wrap: wrap;align-content: flex-start;overflow-y: auto;">
  40. <template v-for="(item, index) in fileMenu" :key="index">
  41. <div class="setBox" >
  42. <el-dropdown trigger="click" class="selectChe">
  43. <span class="el-dropdown-link">
  44. ...
  45. </span>
  46. <template #dropdown>
  47. <el-dropdown-menu>
  48. <el-dropdown-item @click="restName(item, index)">重命名</el-dropdown-item>
  49. <el-dropdown-item v-if="item.dirType == '2' && isDept" @click="upFirstFoler(item)">编辑</el-dropdown-item>
  50. <el-dropdown-item v-if="isDept" @click="delName(item, index)">删除</el-dropdown-item>
  51. </el-dropdown-menu>
  52. </template>
  53. </el-dropdown>
  54. <div class="left_fileBox" @click="changeFile(item, index)">
  55. <el-tooltip
  56. class="box-item tool-tip"
  57. effect="dark"
  58. placement="top-start"
  59. v-if="item.encryptLevel"
  60. >
  61. <template #content> 安全级别: {{ item.encryptLevel == 'L1'?'敏感':(item.encryptLevel == 'L2'?'涉密':(item.encryptLevel == 'L3'?'机密':'绝密')) }} </template>
  62. <img :src="item.dirType=='1'?fileStyle:ordinaryList" style="width: 72px;height: 72px;" class="shouzhi"></el-tooltip>
  63. <img :src="item.dirType=='1'?fileStyle:ordinaryList" style="width: 72px;height: 72px;" class="shouzhi" v-else>
  64. <el-tooltip
  65. class="box-item tool-tip"
  66. effect="dark"
  67. placement="top-start"
  68. > <template #content> <span>{{ item.dirName }}</span></template>
  69. <p class="ellipsis-text shouzhi">{{ item.dirName }}</p>
  70. </el-tooltip>
  71. <img class="levelImg shouzhi" v-if="item.isEncrypt === 'Y' && item.encryptLevel" :src="getLevelImg(item.encryptLevel)" alt="">
  72. </div>
  73. </div>
  74. </template>
  75. </div>
  76. <LeftList v-else :spaceType="1" :collectId="collectId" @treeRClick="treeRClick" :searchFolderTree="searchFolderTree" :ListtreeData="ListtreeData" @listfolderClick="listfolderClick"></LeftList>
  77. </div>
  78. <!-- <div class="expansion">
  79. <div class="top_box">
  80. <span style="margin-left: 5px;font-size: 14px;font-weight: 500;">{{ formatStorage(useSpace) }}/{{ allSpace + "G" }}</span>
  81. <span style="margin-left: 5px;font-size: 14px;color: #2E6BC8;cursor: pointer;"
  82. @click="askApply">申请扩容</span>
  83. </div>
  84. <el-progress style="margin-left: 8px;" :stroke-width="12" color='#2E6BC8' :percentage="percent()" />
  85. </div> -->
  86. </div>
  87. <!-- 右侧大盒子 -->
  88. <div class="mesBox">
  89. <!-- 展示文件夹盒子 -->
  90. <!-- 文件夹 -->
  91. <div v-if="editOnline">
  92. <!-- 众多功能 -->
  93. <div class="manyUse">
  94. <div class="useMenu">
  95. <!-- <div v-if="(thisRole.some(item=>item == 'upload') || (isDept && thisFolder.dirId)) && (pathLabelData.length || leftShowList == 1)&& thisFolder.parentId != 0" -->
  96. <div v-if="(thisRole.some(item=>item == 'upload') || (isDept))"
  97. style="display: flex;width: 92px;height: 32px;justify-content: flex-start;align-items: center;line-height: 18px;">
  98. <div style="margin-left: 5px;">
  99. <img src="../../assets/images/upload.png" style="width: 24px;height: 24px;" alt="">
  100. </div>
  101. <div style="margin-left: 5px;">
  102. <span style="color: black;cursor: pointer;" @click="uploadModal = true" class="shouzhi">上传
  103. </span>
  104. </div>
  105. </div>
  106. <div v-else
  107. style="display: flex;width: 92px;opacity:0.5;height: 32px;justify-content: flex-start;align-items: center;line-height: 18px;">
  108. <div style="margin-left: 5px;">
  109. <img src="../../assets/images/upload.png" style="width: 24px;height: 24px;" alt="">
  110. </div>
  111. <div style="margin-left: 5px;">
  112. <span style="color: black;cursor: pointer;" class="shouzhi">上传
  113. </span>
  114. </div>
  115. </div>
  116. <div v-if="thisFolder.dirType && isDept"
  117. style="display: flex;width: 102px;height: 32px;justify-content: flex-start;align-items: center;">
  118. <div style="margin-left: 5px;">
  119. <el-icon
  120. style="background-color: #7084B4;width: 24px;height: 24px;border-radius: 50%;color: white;"
  121. @click="createNewMenu(0)">
  122. <Plus />
  123. </el-icon>
  124. </div>
  125. <div style="margin-left: 5px;" @click="createNewMenu(0)">
  126. <span style="font-size: 14px;" class="shouzhi">新建目录</span>
  127. </div>
  128. </div>
  129. <div v-else-if="!isDept"></div>
  130. <div v-else
  131. style="display: flex;opacity:0.5;width: 102px;height: 32px;justify-content: flex-start;align-items: center;">
  132. <div style="margin-left: 5px;">
  133. <el-icon
  134. style="background-color: #7084B4;width: 24px;height: 24px;border-radius: 50%;color: white;"
  135. >
  136. <Plus />
  137. </el-icon>
  138. </div>
  139. <div style="margin-left: 5px;">
  140. <span style="font-size: 14px;" class="shouzhi">新建目录</span>
  141. </div>
  142. </div>
  143. <template v-for="(item, index) in useMenu" :key="index">
  144. <div :class="{ 'isCheck': (haveCheck && thisRole.some(item=>item == 'delete')||haveCheck && isDept) }"
  145. style="display: flex;width: 82px;opacity:0.5;height: 32px;justify-content: flex-start;align-items: center;line-height: 18px;cursor: pointer;"
  146. @click="getMenu(item, index,(haveCheck && thisRole.some(item=>item == 'delete')||haveCheck && isDept))">
  147. <div style="margin-left: 5px;">
  148. <img :src="item.img" style="width: 24px;height: 24px;" alt="">
  149. </div>
  150. <div style="margin-left: 5px;">
  151. <span style="font-size: 14px;" class="shouzhi">{{ item.name }}</span>
  152. </div>
  153. </div>
  154. </template>
  155. <div v-if="(isDept && thisFolder.dirId)"
  156. style="display: flex;width: 92px;height: 32px;justify-content: flex-start;align-items: center;line-height: 18px;">
  157. <div style="margin-left: 5px;">
  158. <img src="../../assets/images/scanFile.png" style="width: 24px;height: 24px;" alt="">
  159. </div>
  160. <div style="margin-left: 5px;">
  161. <span style="color: black;cursor: pointer;" @click="scannerFile">扫描
  162. </span>
  163. </div>
  164. </div>
  165. <!-- <div v-else
  166. style="display: flex;width: 92px;opacity:0.5;height: 32px;justify-content: flex-start;align-items: center;line-height: 18px;">
  167. <div style="margin-left: 5px;">
  168. <img src="../../assets/images/scanFile.png" style="width: 24px;height: 24px;" alt="">
  169. </div>
  170. <div style="margin-left: 5px;">
  171. <span style="color: black;cursor: pointer;">扫描
  172. </span>
  173. </div>
  174. </div> -->
  175. </div>
  176. <div class="tip">
  177. <img src="@/assets/images/mouseRight.png" alt="">
  178. <span>使用右键进行文件操作</span>
  179. </div>
  180. </div>
  181. <div v-show="leftShowList === 2">
  182. <!-- 面包屑功能栏 -->
  183. <div class="breadBox">
  184. <!-- 左侧 -->
  185. <div style="display: flex;justify-content: space-around;align-items: center;margin-left: 5px;">
  186. <!-- 前进后退 -->
  187. <!-- <div style="display: flex;justify-content: space-around;align-items: center;">
  188. <img style="display:block;width: 11px;height: 11px;" :src="blueLeft" alt=""
  189. @click="arrowLift">
  190. <img style="display:block;width: 16px;height: 16px;" :src="grayRight" alt="">
  191. </div> -->
  192. <!-- 面包屑 -->
  193. <div class="topPath">
  194. <span @click="backTopPath">{{ topPath }}</span>
  195. <PathLabel v-if="!loadingPreview" @folderClick="folderClick" :pathLabelData='pathLabelData'></PathLabel>
  196. <!-- <BreadMenu></BreadMenu> -->
  197. </div>
  198. </div>
  199. <!-- 右侧 -->
  200. <div>
  201. <img
  202. src="@/assets/images/sort.png"
  203. @click="changeSort"
  204. v-if="isAsc == 'asc'"
  205. alt=""
  206. />
  207. <img
  208. src="@/assets/images/Frame_188.png"
  209. @click="changeSort"
  210. v-else
  211. alt=""
  212. />
  213. <!-- //控制宫格展示 -->
  214. <img
  215. v-if="fileGrid"
  216. src="@/assets/images/squre.png"
  217. class="shouzhi palace-grid"
  218. alt=""
  219. @click="changeShow(true)"
  220. />
  221. <img
  222. v-else
  223. src="@/assets/images/Frame_187.png"
  224. class="shouzhi palace-grid"
  225. alt=""
  226. @click="changeShow(false)"
  227. />
  228. <!-- <img :src="squre" alt="" @click="gridChange" class="shouzhi"> -->
  229. </div>
  230. </div>
  231. <!-- </div> -->
  232. <!-- 展示文件夹盒子 -->
  233. <div class="showBox">
  234. <!-- 文件夹 -->
  235. <div class="detailBox file-jia" @click="mouseClick">
  236. <el-collapse v-model="folder">
  237. <el-collapse-item name="1" class="custom-collapse-item">
  238. <template #title>
  239. <span class="file-title">文件夹</span>
  240. </template>
  241. <el-table v-if="fileGrid == 1" height="37vh" :data="folderList" style="width: 100%" :scrollbar-always-on="true"
  242. @selection-change="handleSelectionChange1" :single-select="true" @row-click="folderClick"
  243. @row-contextmenu="folderRClick" ref="taskTableRef">
  244. <!-- <el-table-column type="selection" width="55" /> -->
  245. <el-table-column label="名称" :show-overflow-tooltip="true" width="600">
  246. <template #default="scope">
  247. <span class="juzhong">
  248. <el-icon v-if="scope.row.isFavorite == 'N'" @click.stop="collectByStar(scope.row,true)" class="juli">
  249. <Star />
  250. </el-icon>
  251. <img v-else @click.stop="delCollect(scope.row,true)" src="../../assets/images/yellowstar.png" alt="" class="juli">
  252. <img :src="scope.row.dirType=='1'?fileBox:ordinary" style="width: 20px;height: 24px;"
  253. alt="" class="juli">
  254. <span class="shouzhi">{{ scope.row.dirName }}</span>
  255. </span>
  256. </template>
  257. </el-table-column>
  258. <el-table-column prop="createTime" label="时间" width="280" />
  259. <el-table-column prop="dirType" label="类型">
  260. <template #default="scope">
  261. <span v-if="scope.row.dirType == '1'">普通目录</span>
  262. <span v-else>组织目录</span>
  263. </template>
  264. </el-table-column>
  265. <el-table-column label="加密等级">
  266. <template #default="scope">
  267. <span>
  268. {{setTablelevel(scope.row.encryptLevel)}}
  269. </span>
  270. </template>
  271. </el-table-column>
  272. </el-table>
  273. <PlaceGridFolder v-else @folderClick="folderClick" :folderList="folderList" :restName="restName"
  274. :collectFolder="collectFolder" @collectByStar="collectByStar" @delCollect="delCollect" @setScroll="setScroll" @folderRClick="folderRClick" :getAllTop="getAllTop" @folderBack="folderBack" :thisFolder="thisFolder">
  275. </PlaceGridFolder>
  276. </el-collapse-item>
  277. </el-collapse>
  278. <!-- 右键唤出的菜单 -->
  279. <div class="right_menu" v-if="folderVisible"
  280. :style="{ left: folderleft + 'px', top: foldertop + 'px' }">
  281. <!-- <div class="menu_item" @click="folderClick(null, null)">
  282. <img src="@/assets/images/trash.png" alt="" />
  283. <span>打开</span>
  284. </div> -->
  285. <div class="menu_item" @click="restName(null, null)">
  286. <img src="@/assets/images/textbox.png" alt="" />
  287. <span class="shouzhi">重命名</span>
  288. </div>
  289. <div class="menu_item" @click="collectFolder">
  290. <img src="@/assets/images/collect.png" alt="" />
  291. <span class="shouzhi">收藏</span>
  292. </div>
  293. <div class="menu_item" v-if="clickRow.dirType === '2' && isDept" @click="upFirstFoler(null)">
  294. <img src="@/assets/images/notePencil.png" alt="" />
  295. <span class="shouzhi">编辑</span>
  296. </div>
  297. <div class="menu_item" v-if="isDept" @click="delFolderMenu">
  298. <img src="@/assets/images/trash.png" alt="" />
  299. <span>删除</span>
  300. </div>
  301. </div>
  302. </div>
  303. <!-- 文件 -->
  304. <div class="fileTable">
  305. <el-collapse v-model="files" >
  306. <el-collapse-item name="2" class="">
  307. <template #title>
  308. <span class="file-title">文件</span>
  309. </template>
  310. <el-table v-el-table-infinite-scroll="setScroll" :infinite-scroll-distance="10" :infinite-scroll-disabled="tableBeEnd" v-if="fileGrid == 1" :data="fileList" :height="fileHeight" :scrollbar-always-on="true" style="width: 100%"
  311. @row-contextmenu="handleRowClick" @selection-change="handleSelectionChange"
  312. @row-click="mouseClick" :default-sort="{ prop: 'createTime', order: 'descending' }">
  313. <el-table-column type="selection" width="55" />
  314. <el-table-column label="名称" width="600">
  315. <template #default="scope">
  316. <span style="white-space: nowrap;overflow: hidden;text-overflow: ellipsis;" class="juzhong">
  317. <el-icon v-if="scope.row.isFavorite == 'N'" @click.stop="collectByStar(scope.row,false)" class="juli">
  318. <Star />
  319. </el-icon>
  320. <img v-else @click.stop="delCollect(scope.row,false)" src="../../assets/images/yellowstar.png" alt="" class="juli">
  321. <img :src="setImg(scope.row.fileType)" style="width:22px;height:22px;" alt="" class="juli">
  322. <el-tooltip
  323. class="box-item"
  324. effect="dark"
  325. placement="top"
  326. :show-after="1000"
  327. :content="scope.row.fileName"
  328. >
  329. <!-- <template #content> {{ scope.row.encryptLevel == 'L1'?'敏感':(scope.row.encryptLevel == 'L2'?'涉密':(scope.row.encryptLevel == 'L3'?'机密':'绝密')) }} </template> -->
  330. <span class="shouzhi">{{ scope.row.fileName }}</span>
  331. </el-tooltip>
  332. </span>
  333. </template>
  334. </el-table-column>
  335. <el-table-column prop="createTime" label="时间" sortable width="280" />
  336. <el-table-column prop="fileType" label="类型" />
  337. <el-table-column label="大小">
  338. <template #default="scope">
  339. <span>
  340. {{ formatFileSize(scope.row.fileSize) }}
  341. </span>
  342. </template>
  343. </el-table-column>
  344. </el-table>
  345. <PalaceGridFile v-else :fileHeight="fileHeight" @showFile="showFile" :getAllTop="getAllTop" @navBack="navBack"
  346. @lastBB="lastBB" @collectByStar="collectByStar" @delCollect="delCollect" @setScroll="setScroll" @handleRowClick="handleRowClick" @onlineCase="onlineCase" @shareBack="shareBack" :thisFolder="thisFolder" :fileList="fileList"></PalaceGridFile>
  347. </el-collapse-item>
  348. </el-collapse>
  349. </div>
  350. </div>
  351. </div>
  352. <ListShow v-show="leftShowList === 1" @handleSelectionChange="handleSelectionChange" :fileList="fileList" @changeListSort="changeListSort" @delCollect="delCollect" @collectByStar="collectByStar" @handleRowClick="handleRowClick"></ListShow>
  353. </div>
  354. </div>
  355. <div :class="{'setCli':!noMenuItem}" v-if="cliCC" :style="{ left: xz + 'px', top: yz -100 + 'px' }">
  356. <template v-for="(item, index) in filterMouseCli()" :key="index">
  357. <p @click="chooseSet(item, index, 1)" :class="{'hasLine':item.name == '删除'||item.name == '文字识别','btmLine':(item.name == '收藏' && !noHis)||item.name == '下载'}" v-if="!noMenuItem" class="chooseSet" style="cursor: pointer;">
  358. <img :src="item.img" alt="">
  359. {{ item.name }}
  360. <span v-if="item.name == '协作' ? true : false"
  361. style="color: #7084B4;float: right;position: relative;" class="arrow"></span>
  362. </p>
  363. </template>
  364. </div>
  365. <div class="setCli1" v-if="anyP" :style="{ left: xz + 155 + 'px', top: yz + 'px' }">
  366. <p @click="chooseSet1(0)" class="chooseSet">
  367. <img src="../../assets/images/user.png" alt="">
  368. 选择人员
  369. </p>
  370. <p class="chooseSet" @click="goLock" v-if="clickRow.isActor === 'Y' && clickRow.isFiled != 'Y'">
  371. <img src="../../assets/images/archiveTray.png" alt="">
  372. 归档
  373. </p>
  374. </div>
  375. <!-- 扩容弹窗 -->
  376. <div>
  377. <SpaceBig v-if="spaces" :spaces="spaces" :impSpaceId="impSpaceId" @getSpaceC="getSpaceC"></SpaceBig>
  378. </div>
  379. <!-- 新增文件夹弹窗 -->
  380. <div>
  381. <CreateFloder v-if="folderCase" :getFirstFolder="getFirstFolder" :thisType="thisFolder" :thisRole="thisRole" :folderCase="folderCase" @getChildrenC="getChildrenC" :oneOrTwo="oneOrTwo"
  382. :impDirId="impDirId" :impSpaceId="impSpaceId" :newDirId="newDirId" :newSpaceId="newSpaceId" :upFolderData="upFolderData" :thisFolderRole="thisFolderRole"
  383. :refreshFile="refreshFile">
  384. </CreateFloder>
  385. </div>
  386. <!-- 文件上传 -->
  387. <div>
  388. <el-dialog v-model="uploadModal" :close-on-click-modal="false" title="文件上传" width="30%" @close="closeUpload">
  389. <el-upload class="upload-demo" :limit="10" :on-change="upBefore" :file-list="fileArr" drag :http-request="onSuccess" multiple
  390. :on-remove="handleRemove"
  391. element-loading-text="上传中..."
  392. element-loading-background="rgba(255, 255, 255, 0.8)"
  393. v-loading="loadingUpload" >
  394. <el-icon class="el-icon--upload"><upload-filled /></el-icon>
  395. <div class="el-upload__text">拖入或<em>点击上传</em></div>
  396. <template #tip>
  397. <div class="el-upload__tip">请选择或拖入文件(一次最多上传10个文件)&nbsp;&nbsp;&nbsp;仅支持上传文件格式</div>
  398. </template>
  399. </el-upload>
  400. <template #footer>
  401. <span class="dialog-footer">
  402. <el-button @click="closeUpload">取消</el-button>
  403. <el-button type="primary" @click="sureUpload">确认</el-button>
  404. </span>
  405. </template>
  406. </el-dialog>
  407. </div>
  408. <!-- 文件重命名 -->
  409. <div>
  410. <el-dialog v-model="fileNameChange" :close-on-click-modal="false" title="重命名" width="30%">
  411. <el-form :model="nameForm" label-width="120px">
  412. <el-form-item label="新名字">
  413. <el-input v-model="nameForm.name" placeholder="请输入不多于32位字符" maxlength="32"></el-input>
  414. </el-form-item>
  415. </el-form>
  416. <template #footer>
  417. <span class="dialog-footer">
  418. <el-button @click="fileNameChange = false">取消</el-button>
  419. <el-button type="primary" @click="sureChangeName">
  420. 确认
  421. </el-button>
  422. </span>
  423. </template>
  424. </el-dialog>
  425. </div>
  426. <!-- 文件收藏 -->
  427. <div>
  428. <FileCollect v-if="collects" :collects="collects" @getCollects="getCollects" :copyFileName="copyFileName"
  429. :copyFileId="copyFileId" @refreshFile="refreshFile" :isFolder="isFolder" :clickRow="clickRow"></FileCollect>
  430. </div>
  431. <!-- 中栏重命名 -->
  432. <div>
  433. <FolderReName v-if="rename" :rename="rename" :selectedBox="selectedBox" :getAllTop="refreshFile"
  434. :copyFolderName="copyFolderName" @getRename="getRename">
  435. </FolderReName>
  436. </div>
  437. <ImgPreview :previewData="previewData" :copyFileType="copyFileType" :showPreview="showPreview"
  438. @closeImgPreview="closeImgPreview"></ImgPreview>
  439. <div>
  440. <FileTree v-if="fileTrees" :fileTrees="fileTrees" :newSpaceId="newSpaceId" :fileId="clickRowId"
  441. @getChildren="getChildren" :copyOrMove="copyOrMove" :thisFolder="thisFolder.dirId"></FileTree>
  442. </div>
  443. <!-- 穿梭框 -->
  444. <div>
  445. <TransferModal v-if="thanks" :thanks="thanks" :clickRowId="clickRowId" :workOrEdit="workOrEdit"
  446. @getCback="getCback"></TransferModal>
  447. </div>
  448. </div>
  449. </div>
  450. <!-- 图片预览 -->
  451. <!-- 历史版本 -->
  452. <historyList v-if="openForwardFile" :openFile="openForwardFile" :docId="clickRowId" :name="nameForm.name"
  453. :copyRow="copyRow" @setHisData="setHisData" @close="openForwardFile = false" :fileUserTreeData="fileUserTreeData.data"
  454. @changeMsgClose="changeMsgClose" :historyTotal="historyTotal">
  455. </historyList>
  456. <!-- 历史版本 -->
  457. <!-- 二次密码验证 -->
  458. <inputPassword v-if="showInputPassword" @sureCode="sureCode" :isCode="isCode" :inputTitle="inputTitle" @surePass="surePass" @closeIptPass="closeIptPass" :showInputPassword="showInputPassword"></inputPassword>
  459. <div v-loading.fullscreen="loadingPreview" v-if="loadingPreview" class="lodingBox"></div>
  460. <!-- 扫描文档 -->
  461. <ScanFile v-if="openScan" :openScan="openScan" :scannerFiles="scannerFiles" @saveScanFile="saveScanFile" @closeOpen="closeOpen"></ScanFile>
  462. <!-- 可用扫描仪信息 -->
  463. <div>
  464. <el-dialog v-model="checkScanner" :close-on-click-modal="false" title="扫描仪" width="30%">
  465. <div v-for="item in scannerList" :key="item.scannerId" id="Onescan" @click="checkScanFn(item)" :class="{'checkScan':item.scannerId ==checkScanId }">
  466. <img src="@/assets/images/scanImg.png" alt="">
  467. {{item.scannerName}}
  468. </div>
  469. <template #footer>
  470. <span class="dialog-footer">
  471. <el-button @click="closeCheckScanner">取消</el-button>
  472. <el-button type="primary" @click="sureScaner">确认</el-button>
  473. </span>
  474. </template>
  475. </el-dialog>
  476. </div>
  477. <!-- 扫描文件移动到 -->
  478. <MoveTo v-if="openScanMove" :spaceType='1' :scanFileArr="scanFileArr" :thisFolder="thisFolder" :openScanMove="openScanMove" @closeOpenScanMove='closeOpenScanMove'></MoveTo>
  479. <TreeMenu v-show="showTreeMenu" :spaceType='1' @delCollect="delCollect" @collectFolder="collectFolder" :clickRow="clickRow" :noEdit="noEdit" :isDept="isDept" @upFirstFoler="upFirstFoler" @restName="restName" @delName="delName" :xz="xz" :yz="yz"></TreeMenu>
  480. <!-- 查看历史记录的iframe -->
  481. <el-dialog
  482. v-model="showHis"
  483. title="历史记录"
  484. width="1250px"
  485. :close-delay='200'
  486. :before-close="closeHis"
  487. >
  488. <iframe :key="nowTime" :src="hisIfarmeData.src" :name="nowTime" id="iframeHis" frameborder="0" width="1200px"
  489. height="800px" class="iframeBox" ></iframe>
  490. <!-- <PreHistory v-if="showHis" style="width:1200px;" :historyDocId="historyDocId" :historyFileId="historyFileId"></PreHistory> -->
  491. </el-dialog>
  492. </template>
  493. <script>
  494. import { ref, toRaw, onMounted ,onActivated,watch} from 'vue'
  495. import PreHistory from "@/components/PreHistory/PreHistory.vue"
  496. import myfile from '../../api/myfile/myfile'
  497. import {documentation}from "@/api/biz/actor.js"
  498. import { delFavorite } from '@/api/biz/favorite.js'
  499. import documents from '../../api/document/document'
  500. import {getInfo,delInfo}from "@/api/biz/info.js"
  501. import fileCount from '../../api/fileCount/fileCount'
  502. import FileTree from '@/views/myfile/components/FileTree.vue'
  503. import BreadMenu from './components/BreadMenu.vue'
  504. import FileEdit from './components/FileEdit.vue'
  505. import TransferModal from './modalComponebts/Transfer.vue'
  506. import CreateFloder from './modalComponebts/CreateFloder.vue'
  507. import FileCollect from '@/views/myfile/modalComponebts/FileCollect.vue'
  508. import FolderReName from './modalComponebts/FolderReName.vue'
  509. import SpaceBig from './modalComponebts/SpaceBig.vue'
  510. // import PlaceGridFolder from './components/PlaceGridFolder.vue'
  511. // import PalaceGridFile from './components/PalaceGridFile.vue'
  512. import PlaceGridFolder from '@/views/myfile/components/PlaceGridFolder.vue'
  513. import PalaceGridFile from '@/views/myfile/components/PalaceGridFile.vue'
  514. import ImgFile from "@/views/myfile/jsComponents/ImgFile"
  515. import LeftList from "@/components/LeftList/LeftList.vue"
  516. import ListShow from "@/components/ListShow/ListShow.vue"
  517. import { Search } from '@element-plus/icons-vue'
  518. import blueLeft from '../../assets/images/blueLeft.png'
  519. import grayRight from "../../assets/images/grayRight.png"
  520. import sort from '../../assets/images/sort.png'
  521. import squre from '../../assets/images/squre.png'
  522. import delImg from '../../assets/images/trash.png'
  523. import level1 from "@/assets/images/level1.png";
  524. import level2 from "@/assets/images/level2.png";
  525. import level3 from "@/assets/images/level3.png";
  526. import level4 from "@/assets/images/level4.png";
  527. import { ElMessage ,ElLoading ,ElMessageBox} from 'element-plus'
  528. import ImgPreview from '@/components/ImgPreview/ImgPreview.vue'
  529. import ScanFile from '@/components/ScanFile/ScanFile.vue'
  530. import MoveTo from '@/components/MoveTo/MoveTo.vue'
  531. import { preview } from "@/api/common/common.js";
  532. import historyList from "@/components/historyList/index.vue"; //选择文件发送的列表,历史版本
  533. import inputPassword from "./components/inputPassword.vue"; //选择文件发送的列表,历史版本
  534. import { listVersion } from "@/api/biz/version";
  535. import useUserStore from "@/store/modules/user";
  536. import { useRouter, useRoute,onBeforeRouteUpdate } from "vue-router";
  537. import { canPreviewFile,rightMenuRole,publicRightMenuRole } from "@/utils/index.js"
  538. import fileSpace from '../../api/filespace/fileSpace';
  539. import { getLeveldetail } from '../../api/level/level';
  540. import { encrypt, decrypt } from "@/utils/jsencrypt";
  541. import ordinaryList from "@/assets/images/ordinaryList.png";
  542. import ordinary from "@/assets/images/ordinary.png";
  543. import PathLabel from '@/components/PathLabel/index.vue'
  544. import fileStyle from "@/assets/images/fileStyle.png";
  545. import fileBox from "@/assets/images/fileBox.png";
  546. import Cookies from "js-cookie";
  547. import { listInfo,selectInfo ,getFileByScanerId} from '@/api/scanner/info.js';
  548. import { getLevel } from '@/api/level/level.js';
  549. import elTableInfiniteScroll from 'el-table-infinite-scroll'
  550. import { getConfigKey } from "@/api/system/config.js"
  551. import { setIcon } from "@/utils/index.js";
  552. import uploadApi from '../../api/upload/upload'
  553. import TreeMenu from '@/components/TreeMenu/TreeMenu.vue'
  554. export default {
  555. directives: {
  556. 'el-table-infinite-scroll': elTableInfiniteScroll
  557. },
  558. setup() {
  559. const { proxy } = getCurrentInstance();
  560. const levelList = ref()
  561. let fileTrees = ref(false)//filetree父传子
  562. let thanks = ref(false)//transfer父传子
  563. let collects = ref(false)//文件收藏父传子
  564. let rename = ref(false)//文件夹重命名
  565. let spaces = ref(false)//空间扩容父传子
  566. let folderCase = ref(false)
  567. let fileGrid = ref(sessionStorage.getItem('fileGrid') === "0" ? 0:1)
  568. let folderGrid = ref(true)
  569. let editOnline = ref(true)
  570. let searchFire = ref('')
  571. let selectedIndex = ref(0)
  572. let folder = ref(['1'])
  573. let files = ref(['2'])
  574. let folderList = ref([])
  575. let cliCC = ref(false)
  576. let anyP = ref(false)
  577. let uploadModal = ref(false)
  578. let collectImg = ref(true)
  579. let selectedBox = ref(-1)
  580. let clickRowId = ref(0)
  581. let trandata = ref()
  582. let folderId = ref('')
  583. let fileId = ref('')
  584. let tranvalue = ref([])
  585. let useSpace = ref(0)
  586. let allSpace = ref(0)
  587. let fileArr = ref([])
  588. const leftNewFile = ref(false) //解决左侧点击后不能显示的问题
  589. let copyDirId = ref(0)//需要操作的dirid
  590. let copySpaceId = ref(0)//需要操作的spaceid
  591. let copyDocId = ref(0)//需要操作的docid
  592. let copyFileId = ref(0)//需要操作的fileid
  593. let copyFileSize = ref(0)//需要操作的filesize
  594. let copyFileType = ref('')//需要操作的文件类型
  595. let copyFileName = ref("")//需要操作的文件名
  596. let copyFolderName = ref("")
  597. let copySpaceCup = ref(0)
  598. let directoryId = ref('')
  599. let impSpaceId = ref("")
  600. let impDirId = ref("")
  601. let impNum = ref(0)
  602. let copyParentId = ref("")//文件夹
  603. let needBag = ref("")
  604. let copyOrMove = ref(0)//0代表复制,1代表移动
  605. let oneOrTwo = ref(0)//0代表二级,1代表一级
  606. let sortNum = ref(0)
  607. let folderTotal = ref(0)//文件夹total
  608. let fileTotal = ref(0)//文件total
  609. const openForwardFile = ref(false) //历史版本展示
  610. const delMoreFile = ref([]) //删除多个文件夹
  611. const historyTotal = ref(0)
  612. const historyPrew = ref(false)
  613. let xz = ref(0)
  614. let yz = ref(0)
  615. const router = useRouter(); //注册路由
  616. const route = useRoute(); //注册路由
  617. const fileUserTreeData = reactive({ data: {} });
  618. const loadingUpload = ref(false);//文件上传加载
  619. let fileList = ref()
  620. let menuList = ref([
  621. {
  622. name: "我的空间",
  623. choose: "我的空间"
  624. }
  625. ])
  626. const fileHeight=ref('38vh')
  627. const pageSize = ref(10)
  628. let useMenu = ref([
  629. // {
  630. // img: ImgFile.copy,
  631. // name: "复制"
  632. // },
  633. // {
  634. // img: ImgFile.clipboard,
  635. // name: "粘贴"
  636. // },
  637. // {
  638. // img: ImgFile.share,
  639. // name: "分享给"
  640. // },
  641. {
  642. img: delImg,
  643. name: "删除"
  644. },
  645. ])
  646. let arrorMenu = ref([
  647. {
  648. img: ImgFile.file,
  649. name: "文件"
  650. },
  651. {
  652. img: ImgFile.folder,
  653. name: '文件夹'
  654. },
  655. {
  656. img: ImgFile.image,
  657. name: "图片"
  658. },
  659. {
  660. img: ImgFile.filmSlate,
  661. name: "视频"
  662. },
  663. {
  664. img: ImgFile.musicNotes,
  665. name: "音频"
  666. }
  667. ])
  668. let mouseCli = ref([
  669. {
  670. img: ImgFile.previewIcon,
  671. name: "打开"
  672. },
  673. {
  674. img: ImgFile.addolder,
  675. name: "移动到...",
  676. },
  677. {
  678. img: ImgFile.copy,
  679. name: "复制到...",
  680. },
  681. {
  682. img: ImgFile.downLoad,
  683. name: "下载"
  684. },
  685. {
  686. img: ImgFile.textbox,
  687. name: "重命名"
  688. },
  689. {
  690. img: ImgFile.share,
  691. name: "分享"
  692. },
  693. {
  694. img: ImgFile.collect,
  695. name: "收藏"
  696. },
  697. {
  698. img: ImgFile.icc,
  699. name: "文字识别"
  700. },
  701. {
  702. img: ImgFile.history,
  703. name: "历史版本"
  704. },
  705. {
  706. img: ImgFile.trash,
  707. name: "删除"
  708. }
  709. ])
  710. let nameForm = ref({
  711. name: ""
  712. })
  713. let ordinaryFolder = ref([ {
  714. img: ImgFile.previewIcon,
  715. name: "打开"
  716. },
  717. {
  718. img: ImgFile.collect,
  719. name: "收藏"
  720. },
  721. {
  722. img: ImgFile.downLoad,
  723. name: "下载"
  724. },
  725. ])
  726. let fileNameChange = ref(false)
  727. let fileMenu = ref([])
  728. let copyRow = ref({})
  729. let newDirId = ref('')
  730. let newSpaceId = ref('')
  731. let workOrEdit = ref(0)
  732. const showPreview = ref(false)//控制图片预览组件显示
  733. const previewData = ref()//需要预览的文件的数据
  734. const folderVisible = ref(false); //显示文件夹右键菜单
  735. const foldertop = ref(0);
  736. const folderleft = ref(0);
  737. const thisFolder = ref({}); //当前右键的文件夹
  738. const folderCheckout = ref(false)//是否有勾选
  739. const fileCheckout = ref(false)//是否有勾选
  740. const haveCheck = ref(false)//是否有勾选
  741. const onlyView = ref(false) //预览
  742. const topPath = ref()//顶部路径
  743. const isFolder = ref('N') //是否为文件夹
  744. const clickRow = ref()//当前右键的行数据
  745. const backFolder = ref()//上一级的文件夹
  746. const thisFolderRole = ref({})//文件夹安全等级
  747. const thisRole = ref([])//文件夹权限
  748. const showInputPassword = ref(false)
  749. const chooseRow = ref()
  750. const chooseNum = ref()
  751. const loadingPreview = ref(false)
  752. const noMenuItem = ref(false)
  753. const addTab = inject("addTab");
  754. const addFileTab = inject("addFileTab");
  755. const addFolderAdd = inject("addFolderAdd");
  756. const upFileData = inject("upFileData");
  757. const delFolderDataFn = inject("delFolderDataFn");
  758. const delFileFn = inject("delFileFn");
  759. const filePageNum = ref(1) //获取文件分页
  760. const spaceName = ref()
  761. const tableBeEnd = ref(true)//控制下拉是否到底
  762. const tableTotal = ref(0)//表格数据总数
  763. const isDept = ref(false)// 是否管理员
  764. const maxFileSize = ref()//能上传的最大size
  765. const scannerList = ref() // 扫描仪数据
  766. const checkScanId = ref() // 选中的scan的id
  767. const checkScanner = ref(false) //显示扫描仪选择框
  768. const scannerFiles = ref([]) //选择的扫描仪的文件
  769. const openScanMove = ref(false)
  770. const pathLabelData = ref([
  771. ])
  772. //控制宫格展示
  773. const isList = ref(false); //控制显示方式
  774. const openScan = ref(false)//控制扫描文档显示
  775. const scanFileArr = ref([]) //认领的扫描文件数组
  776. const delMoreFolder = ref([])
  777. const inputTitle = ref()//验证框标题
  778. const isCode = ref(false)// 验证的类型
  779. const isAsc = ref("desc");
  780. const clickPath = inject("clickPath");
  781. const leftShowList = ref()
  782. const thisFirst = ref()
  783. const ListtreeData = ref()
  784. const searchFolderTree = ref()
  785. const showTreeMenu = ref(false)
  786. const noEdit = ref(false)//树形节点 右键是否可编辑
  787. const collectId = ref()
  788. const showHis = ref(false)
  789. const hisIfarmeData = ref({
  790. // src: `${window.location.origin}/fileEdit?clickRowId=7567&canEdit=0&canCopy=0&history=0&fileId=0`,
  791. })
  792. const noHis = ref(false)
  793. const setHisData = (data)=>{
  794. hisIfarmeData.value = {
  795. // src:`${window.location.origin}/fileEdit?clickRowId=${data.docId}&canEdit=0&canCopy=0&history=1&fileId=${data.fileId}`,
  796. src:`${window.location.origin}/preHistory?clickRowId=${data.docId}&fileId=${data.fileId}`,
  797. }
  798. showHis.value = true
  799. const dom = document.getElementById('iframeHis')
  800. if(dom){
  801. dom.contentWindow.location.reload();
  802. }
  803. // console.log(21);
  804. setTimeout(() => {
  805. iframeSize()
  806. }, 200);
  807. // console.log('data',data);
  808. }
  809. // 控制iframe大小
  810. const iframeSize = () => {
  811. // console.log('执行ifSize',par);
  812. const outIframe = document.getElementById("iframeHis");
  813. const inIframe =
  814. outIframe.contentDocument.getElementsByTagName("iframe")[0];
  815. if(inIframe==null){
  816. // console.log('没有inF');
  817. setTimeout(() => {
  818. // console.log('==============');
  819. iframeSize()
  820. }, 200);
  821. return
  822. }
  823. // console.log('outIframe', outIframe);
  824. // console.error(outIframe.parentElement);
  825. inIframe.style.height = outIframe.style.height =
  826. outIframe.parentElement.offsetHeight - 40 + "px";
  827. inIframe.style.width = outIframe.style.width =
  828. outIframe.parentElement.offsetWidth - 80+ "px";
  829. }
  830. const closeHis = ()=>{
  831. // hisIfarmeData.value = {}
  832. showHis.value = false
  833. }
  834. const changeSort = async () => {
  835. isAsc.value == "asc" ? (isAsc.value = "desc") : (isAsc.value = "asc")
  836. // refreshFile()
  837. let obj = {
  838. pageNum: 1,
  839. pageSize: 9999,
  840. isAsc: isAsc.value,
  841. orderByColumn: "createTime"
  842. }
  843. documents.getALLdocumentByType({ parentId: thisFolder.value.dirId?thisFolder.value.dirId:impDirId.value, spaceId: impSpaceId.value,isAsc: isAsc.value,orderByColumn: "createTime",pageNum: obj.pageNum, pageSize: obj.pageSize },1).then(res => {
  844. // fileMenu.value = res.rows
  845. folderList.value = res.rows
  846. })
  847. const query = `${thisFolder.value.dirId?thisFolder.value.dirId:impDirId.value}?isAsc=${isAsc.value}&orderByColumn=createTime&pageSize=9999&pageNum=1`
  848. myfile.getById(query).then(res => {
  849. if (res.code === 200) {
  850. fileList.value = res.rows
  851. fileTotal.value = res.total
  852. // console.log('fileList.value',fileList.value);
  853. }
  854. // console.log('not200');
  855. })
  856. }
  857. const changeListSort = async (listAsc)=>{
  858. const query = `${thisFolder.value.dirId}?isAsc=${listAsc}&orderByColumn=createTime&pageSize=9999&pageNum=1`
  859. myfile.getById(query)
  860. .then(res => {
  861. if (res.code === 200) {
  862. fileList.value = res.rows;
  863. }
  864. })
  865. .catch(error => {
  866. console.error("myfile.getAllFileMenu 调用失败:", error);
  867. });
  868. }
  869. const changeShow =async (fileGrids) => {
  870. filePageNum.value = 1
  871. if(fileGrid.value == 1){
  872. fileGrid.value = 0 // 变宫格
  873. pageSize.value = 30+pageSize.value
  874. if(thisFolder.value.dirId){
  875. const query = `${thisFolder.value.dirId}?isAsc=${isAsc.value}&orderByColumn=createTime&pageSize=9999&pageNum=${filePageNum.value}`
  876. const res = await myfile.getById(query)
  877. console.log('filessetScrollres',res);
  878. if (res.code === 200) {
  879. // const newarr = res.rows.concat(toRaw(fileList.value))
  880. const newarr = res.rows
  881. console.log('newarr',newarr);
  882. fileList.value = JSON.parse(JSON.stringify(newarr))
  883. if(newarr.length < tableTotal.value){
  884. //获取后的数量<total就可以再次获取
  885. setTimeout(()=>{
  886. tableBeEnd.value = false
  887. },1000)
  888. }
  889. }
  890. }
  891. }else{
  892. fileGrid.value = 1
  893. pageSize.value = 20
  894. }
  895. sessionStorage.setItem('fileGrid',fileGrid.value)
  896. };
  897. const upFolderData = ref()// 修改的文件夹的数据
  898. // 获取文件夹,中栏,文件
  899. function getAllTop() {
  900. documents.getTop(1).then(res => {
  901. console.log('getAllTopres',res);
  902. if(!res){
  903. console.log('nores');
  904. return
  905. }
  906. let userMe = [res]
  907. impDirId.value = userMe[0].dirId//固定
  908. impSpaceId.value = userMe[0].spaceId//固定
  909. newSpaceId.value = userMe[0].spaceId//变化
  910. newDirId.value = userMe[0].dirId//变化
  911. topPath.value = userMe[0].dirPath
  912. spaceName.value = userMe[0].dirPath
  913. let obj = {
  914. pageNum: 1,
  915. pageSize: 10,
  916. isAsc: isAsc.value,
  917. orderByColumn: "createTime",
  918. }
  919. documents.getALLdocumentByType({ parentId: userMe[0].dirId - 0, spaceId: userMe[0].spaceId,isAsc: isAsc.value,orderByColumn: "createTime", pageNum: obj.pageNum, pageSize: 9999 },1).then(res => {
  920. fileMenu.value = res.rows
  921. folderList.value = res.rows
  922. },1)
  923. myfile.getById(userMe[0].dirId - 0, obj).then(res => {
  924. if (res.code === 200) {
  925. fileList.value = res.rows
  926. fileTotal.value = res.total
  927. if (fileTotal.value / 10 != 1) {
  928. let x = Math.trunc(fileTotal.value / 10) + 1
  929. for (var i = 1; i <= x; i++) {
  930. obj.pageNum = i
  931. myfile.getById(userMe[0].dirId - 0, obj).then(res => {
  932. fileList.value = fileList.value.concat(res.rows)
  933. const uniqueFileList = Array.from(new Set(fileList.value.map(item => item.docId)))
  934. .map(docId => fileList.value.find(item => item.docId === docId));
  935. // 合并数组并更新 fileList.value
  936. fileList.value = uniqueFileList
  937. })
  938. }
  939. }
  940. // console.log('fileList.value',fileList.value);
  941. }
  942. // console.log('not200');
  943. })
  944. })
  945. }
  946. const getFirstFolder = ()=>{
  947. getFileTree()
  948. let obj = {
  949. pageNum: 1,
  950. pageSize: 9999
  951. }
  952. documents.getALLdocumentByType({ parentId: impDirId.value, spaceId: impSpaceId.value,isAsc: isAsc.value,orderByColumn: "createTime", pageNum: obj.pageNum, pageSize: obj.pageSize },1).then(res => {
  953. fileMenu.value = res.rows
  954. // 如果label没有值说明不在一级目录下
  955. if(!pathLabelData.value[0]){
  956. folderList.value = res.rows
  957. }
  958. })
  959. }
  960. function getSpaceList() {
  961. getFileTree()
  962. myfile.fileType(1).then(res => {
  963. useSpace.value = res.data.usedCap
  964. allSpace.value = res.data.spaceCap
  965. })
  966. }
  967. //获取文件树
  968. function getFileTree() {
  969. documents.fileTree(1).then((res) => {
  970. res.disabled = true;
  971. ListtreeData.value = [res];
  972. function getAllNodeIds(nodes) {
  973. nodes.forEach((node) => {
  974. if (node.remark) {
  975. node.remark = JSON.parse(node.remark);
  976. }
  977. if (node.children && node.children.length > 0) {
  978. getAllNodeIds(node.children);
  979. }
  980. });
  981. return nodes;
  982. }
  983. // 调用递归函数获取所有节点的 id
  984. getAllNodeIds(ListtreeData.value);
  985. // console.log("treedataarr", arr);
  986. // console.log("treeData", treeData.value);
  987. });
  988. }
  989. function fileBlur() {
  990. if (searchFire.value == '') {
  991. getAllTop()
  992. } else {
  993. const searchTerm = searchFire.value.trim().toLowerCase(); // 转换为小写字母并去除首尾空格
  994. fileMenu.value = fileMenu.value.filter(item => {
  995. const dirName = item.dirName.trim();
  996. return dirName.includes(searchTerm);
  997. });
  998. }
  999. }
  1000. function changeFile(row, num) {
  1001. const labelItem = {
  1002. name:row.dirName,
  1003. dirId:row.dirId
  1004. }
  1005. pathLabelData.value = [labelItem]
  1006. const addData = {
  1007. path:'/publicment'+row.dirId,
  1008. name:row.dirName,
  1009. clickRowId:toRaw(row)
  1010. }
  1011. // addFolderAdd(addData) //加了这句代码界面会渲染两次
  1012. const itemData = {
  1013. name: row.dirName,
  1014. path:'/publicment' + row.dirId
  1015. }
  1016. // sessionStorage.setItem('newTab',JSON.stringify(itemData))
  1017. window.parent.$setOpenTab(itemData)
  1018. thisFolder.value = row
  1019. // console.log('row2',row);
  1020. // topPath.value = row.dirPath
  1021. if(row.isEncrypt === "Y" && row.encryptLevel){
  1022. getLeveldetailFn(row.encryptLevel)
  1023. }else{
  1024. thisFolderRole.value = {}
  1025. }
  1026. thisRole.value = row.dirRole?row.dirRole.split(','):[]
  1027. copyParentId.value = row.parentId
  1028. newDirId.value = row.dirId
  1029. newSpaceId.value = row.spaceId
  1030. documents.getALLdocumentByType({ parentId: row.dirId - 0, spaceId: row.spaceId - 0 , pageNum: 1, pageSize: 9999,isAsc: isAsc.value,orderByColumn: "createTime"},1).then(res => {
  1031. folderList.value = res.rows
  1032. // if (res.code === 200) {
  1033. if (res.rows.length === 0) {
  1034. myfile.getById(`${newDirId.value}?pageNum=1&pageSize=9999&isAsc=${isAsc.value}&orderByColumn=createTime`)
  1035. .then(res => {
  1036. if (res.code === 200) {
  1037. fileList.value = res.rows;
  1038. }
  1039. })
  1040. .catch(error => {
  1041. console.error("myfile.getAllFileMenu 调用失败:", error);
  1042. });
  1043. } else {
  1044. myfile.getById(`${row.dirId - 0}?pageNum=1&pageSize=9999&isAsc=${isAsc.value}&orderByColumn=createTime`)
  1045. .then(res => {
  1046. if (res.code === 200) {
  1047. fileList.value = res.rows;
  1048. }
  1049. })
  1050. .catch(error => {
  1051. console.error("myfile.getAllFileMenu 调用失败:", error);
  1052. });
  1053. }
  1054. // }
  1055. })
  1056. selectedIndex.value = num
  1057. const newItem = {
  1058. name: row.dirName,
  1059. choose: row.dirName,
  1060. dirIds: row.dirId,
  1061. spaceIds: row.spaceId
  1062. };
  1063. // 检查 newItem 是否已存在于 menuList 中
  1064. const isItemExist = menuList.value.some(item => item.choose === newItem.choose);
  1065. // 如果不存在,则添加它
  1066. if (!isItemExist) {
  1067. menuList.value.push(newItem);
  1068. }
  1069. }
  1070. // x图标事件
  1071. function shotdown(row) {
  1072. menuList.value = menuList.value.filter(item => item.name !== row.name)
  1073. selectedIndex.value = -1
  1074. if (!editOnline.value) {
  1075. editOnline.value = true
  1076. }
  1077. }
  1078. // 文件名表格每一行点击事件
  1079. function handleRowClick(row, col, e) {
  1080. console.log('row',row);
  1081. isFolder.value = "N"
  1082. clickRow.value = row
  1083. const canEditArr = ['.doc', '.docm', '.docx', '.dot', '.dotm', '.dotx', '.txt', '.djvu', '.xps', '.csv', '.fods', '.ods', '.ots', '.xls', '.xlsm', '.xlsx', '.xlt', '.xltm', '.xltx', '.fodp', '.odp', '.otp', '.doc', '.docm', '.docx', '.dot', '.dotm', '.dotx', '.epub', '.fodt', '.htm', '.html', '.mht', '.odt', '.ott', '.rtf', '.txt', '.djvu', '.xps', '.wps','.dps','.et', '.pptx','.pdf','.PDF']
  1084. if(!canEditArr.includes(row.fileType)){
  1085. noHis.value = true
  1086. }else{
  1087. noHis.value = false
  1088. }
  1089. e.preventDefault();
  1090. e.stopPropagation();
  1091. xz.value = e.pageX
  1092. yz.value = e.pageY
  1093. if ((window.innerHeight - e.clientY)<300) {
  1094. yz.value = e.pageY - 100
  1095. }
  1096. //如果带有(重命名)-前缀 只允许进行重命名操作
  1097. const regExp = /^\(重命名\)-/
  1098. if(regExp.test(clickRow.value.fileName)){
  1099. yz.value = e.pageY + 100
  1100. }
  1101. copyRow.value = row
  1102. clickRowId.value = row.docId
  1103. copyDirId.value = row.dirId
  1104. copySpaceId.value = row.spaceId
  1105. copyFileId.value = row.fileId
  1106. copyFileSize.value = row.fileSize
  1107. copyFileType.value = row.fileType
  1108. nameForm.value.name = row.fileName
  1109. copyFileName.value = row.fileName
  1110. if (cliCC.value === true) {
  1111. cliCC.value = false
  1112. } else {
  1113. cliCC.value = true
  1114. }
  1115. }
  1116. // 树节点右键事件
  1117. function treeRClick(row, col, e,Edit) {
  1118. // console.log('row', row);
  1119. // isFolder.value = "N"
  1120. clickRow.value = row
  1121. e.preventDefault();
  1122. e.stopPropagation();
  1123. xz.value = e.pageX
  1124. yz.value = e.pageY
  1125. noEdit.value = Edit
  1126. showTreeMenu.value = true
  1127. }
  1128. // 申请扩容
  1129. async function askApply() {
  1130. const res = await fileSpace.querySpace(impSpaceId.value)
  1131. console.log('res',res);
  1132. if(res.data){
  1133. ElMessage({ message: '已存在扩容申请', type: 'error' })
  1134. return
  1135. }
  1136. spaces.value = true
  1137. }
  1138. //mouse弹框
  1139. async function chooseSet(row, index, num) {
  1140. // 权限控制
  1141. if(thisFolderRole.value && thisFolderRole.value.roles){
  1142. if (thisFolderRole.value.roles.l0700) {
  1143. const codeArr = localStorage.getItem('codeArr');
  1144. let codeArrObj
  1145. if(codeArr){
  1146. codeArrObj = JSON.parse(codeArr)
  1147. }
  1148. if ((!codeArrObj) || !codeArrObj.some(item => item === clickRow.value.docId)) {
  1149. chooseRow.value = row
  1150. chooseNum.value = num
  1151. inputTitle.value = '请输入私有安全访问码'
  1152. isCode.value = true
  1153. showInputPassword.value = true
  1154. return
  1155. }
  1156. // console.log('needc');
  1157. }else if(thisFolderRole.value.roles.l0600){
  1158. const passArr = localStorage.getItem('passArr');
  1159. let passArrObj
  1160. if(passArr){
  1161. passArrObj = JSON.parse(passArr)
  1162. }
  1163. if((!passArrObj) || !passArrObj.some(item=>item === clickRow.value.docId)){
  1164. chooseRow.value = row
  1165. chooseNum.value = num
  1166. inputTitle.value = '请输入登录密码'
  1167. isCode.value = false
  1168. showInputPassword.value = true
  1169. return
  1170. }
  1171. // console.log('needc');
  1172. }
  1173. }
  1174. // console.log('chooseSetrow',row);
  1175. // console.log('chooseSetnum',num);
  1176. if (row.name == '在线编辑' || row.name == '协作') {
  1177. cliCC.value = true
  1178. }
  1179. if (row.name == '分享') {
  1180. workOrEdit.value = num
  1181. thanks.value = true
  1182. } else {
  1183. thanks.value = false
  1184. }
  1185. if (row.name == '协作') {
  1186. workOrEdit.value = num
  1187. if (anyP.value) {
  1188. anyP.value = false
  1189. } else {
  1190. anyP.value = true
  1191. }
  1192. } else {
  1193. anyP.value = false
  1194. }
  1195. if (row.name == '删除') {
  1196. ElMessageBox.confirm(
  1197. `是否确认删除名为"${clickRow.value.fileName}"的文件?`,
  1198. '系统提示',
  1199. {
  1200. confirmButtonText: '确认',
  1201. cancelButtonText: '取消',
  1202. type: 'warning',
  1203. }
  1204. )
  1205. .then(() => {
  1206. const has =hasThisTab(clickRowId.value)
  1207. if(has){
  1208. ElMessage({
  1209. type: "info",
  1210. message: "请先关闭文件"
  1211. })
  1212. return
  1213. }
  1214. myfile.delMenu(clickRowId.value).then(res => {
  1215. if (res.code === 200) {
  1216. ElMessage({
  1217. type: "success",
  1218. message: "删除成功"
  1219. })
  1220. // getAllTop()
  1221. refreshFile()
  1222. }
  1223. })
  1224. })
  1225. .catch(() => {
  1226. return
  1227. })
  1228. }
  1229. if (row.name === '复制到...') {
  1230. copyOrMove.value = 0
  1231. fileTrees.value = true
  1232. }
  1233. if (row.name === '移动到...') {
  1234. copyOrMove.value = 1
  1235. fileTrees.value = true
  1236. }
  1237. if (row.name === '重命名') {
  1238. const has = hasThisTab(copyRow.value.docId)
  1239. if(!has){
  1240. fileNameChange.value = true
  1241. }else{
  1242. ElMessage({
  1243. type: "info",
  1244. message: "请先关闭文件"
  1245. })
  1246. }
  1247. }
  1248. if (row.name === "下载") {
  1249. // location.href = `${import.meta.env.VITE_APP_BASE_API}/api/download/${copyFileId.value}`;
  1250. downLoadfile()
  1251. }
  1252. if (row.name === '收藏') {
  1253. if(clickRow.value.isFavorite === "Y"){
  1254. return ElMessage({
  1255. type: "error",
  1256. message: "请勿重复收藏"
  1257. })
  1258. }
  1259. collects.value = true
  1260. }
  1261. if (row.name === '文字识别') {
  1262. const itemData = {
  1263. name: '文字识别',
  1264. path: `/identifyFont`
  1265. }
  1266. const ocrData = {
  1267. docId: copyRow.value.docId,
  1268. fileId: copyRow.value.fileId,
  1269. fileType: copyFileType.value
  1270. }
  1271. window.parent.$setOpenTab(itemData)
  1272. sessionStorage.setItem('ocrData',JSON.stringify(ocrData))
  1273. sessionStorage.setItem('textData','')
  1274. sessionStorage.setItem('showImg','')
  1275. }
  1276. if (row.name === '打开') {
  1277. loadingPreview.value = true
  1278. const filePreview = canPreviewFile(copyFileType.value)
  1279. const canEditArr = ['.doc', '.docm', '.docx', '.dot', '.dotm', '.dotx', '.txt', '.djvu', '.xps', '.csv', '.fods', '.ods', '.ots', '.xls', '.xlsm', '.xlsx', '.xlt', '.xltm', '.xltx', '.fodp', '.odp', '.otp', '.doc', '.docm', '.docx', '.dot', '.dotm', '.dotx', '.epub', '.fodt', '.htm', '.html', '.mht', '.odt', '.ott', '.rtf', '.txt', '.djvu', '.xps', '.wps','.dps','.et', '.pptx','.pdf','.PDF']
  1280. if (filePreview) {
  1281. // 文件
  1282. getInfo(clickRow.value.docId).then((res)=>{
  1283. // console.log('res',res);
  1284. clickRow.value = res.data
  1285. if(clickRow.value.isFiled === "Y" || !canEditArr.includes(copyFileType.value) || !toRaw(thisRole.value).some(item=>item == "edit")){
  1286. //归档了或者不允许编辑的格式 就是预览
  1287. if(thisFolderRole.value &&thisFolderRole.value.roles&& thisFolderRole.value.roles.l0800){
  1288. const itemData = {
  1289. name: clickRow.value.fileName,
  1290. path: `${window.location.origin}/fileEdit?clickRowId=${clickRow.value.docId}&canEdit=0&canCopy=1&history=0&fileId=0`
  1291. }
  1292. // sessionStorage.setItem('newTab',JSON.stringify(itemData))
  1293. window.parent.$setOpenTab(itemData)
  1294. }else{
  1295. const itemData = {
  1296. name: clickRow.value.fileName,
  1297. path: `${window.location.origin}/fileEdit?clickRowId=${clickRow.value.docId}&canEdit=0&canCopy=0&history=0&fileId=0`
  1298. }
  1299. // sessionStorage.setItem('newTab',JSON.stringify(itemData))
  1300. window.parent.$setOpenTab(itemData)
  1301. }
  1302. }else{ // 编辑
  1303. //--------------------------
  1304. loadingPreview.value = false
  1305. if(thisFolderRole.value &&thisFolderRole.value.roles&& thisFolderRole.value.roles.l0800){
  1306. const itemData = {
  1307. name: clickRow.value.fileName,
  1308. path: `${window.location.origin}/fileEdit?clickRowId=${clickRow.value.docId}&canEdit=1&canCopy=1&history=0&fileId=0`
  1309. }
  1310. // sessionStorage.setItem('newTab',JSON.stringify(itemData))
  1311. window.parent.$setOpenTab(itemData)
  1312. }else{
  1313. const itemData = {
  1314. name: clickRow.value.fileName,
  1315. path: `${window.location.origin}/fileEdit?clickRowId=${clickRow.value.docId}&canEdit=1&canCopy=0&history=0&fileId=0`
  1316. }
  1317. // sessionStorage.setItem('newTab',JSON.stringify(itemData))
  1318. window.parent.$setOpenTab(itemData)
  1319. }
  1320. cliCC.value = false
  1321. loadingPreview.value = false
  1322. //---------------------------
  1323. }
  1324. })
  1325. onlyView.value = true
  1326. // editOnline.value = false
  1327. cliCC.value = false
  1328. } else {
  1329. const res = await preview(copyRow.value.docId)
  1330. showPreview.value = true
  1331. previewData.value = URL.createObjectURL(res)
  1332. }
  1333. loadingPreview.value = false
  1334. // console.log('filePreview', filePreview);
  1335. // // console.log('res',res);
  1336. // const res = await preview(copyFileId.value)
  1337. // showPreview.value = true
  1338. // previewData.value = URL.createObjectURL(res)
  1339. } else if (row.name === "历史版本") {
  1340. const resHistory = await listVersion({ docId: clickRowId.value })
  1341. // console.log('resHistory',resHistory);
  1342. historyTotal.value = resHistory.total
  1343. fileUserTreeData.data = resHistory.rows;
  1344. openForwardFile.value = true
  1345. }
  1346. }
  1347. //判断标签是否存在
  1348. const hasThisTab = (clickRowId) => {
  1349. const storage = sessionStorage.getItem("tagList");
  1350. if (storage) {
  1351. const oldStorage = JSON.parse(storage);
  1352. // 判断是否存在相同的标签
  1353. if (oldStorage.find((item) => item.path.includes(clickRowId))) {
  1354. // ElMessage({ message: "该页面已经打开", type: "info" });
  1355. return 1;
  1356. }else{
  1357. return 0;
  1358. }
  1359. }
  1360. };
  1361. function chooseSet1(num) {
  1362. workOrEdit.value = num
  1363. thanks.value = true
  1364. anyP.value = false
  1365. }
  1366. const closeOpen = ()=>{
  1367. openScan.value = false
  1368. }
  1369. function createNewMenu(num,leftNewFiles) {
  1370. if (leftNewFiles) {
  1371. leftNewFile.value = true //解决左侧点击文件后不显示的问题
  1372. }else{
  1373. leftNewFile.value = false
  1374. }
  1375. upFolderData.value = null
  1376. oneOrTwo.value = num
  1377. folderCase.value = true
  1378. }
  1379. function cancleHistoryPrew(val) {
  1380. historyPrew.value = false
  1381. }
  1382. function createNewFile() {
  1383. addFile.value = true
  1384. }
  1385. function arrowClick(row, num) {
  1386. if (row.name === '文件') {
  1387. uploadModal.value = true
  1388. } else {
  1389. uploadModal.value = false
  1390. }
  1391. }
  1392. // 确认上传
  1393. function sureUpload() {
  1394. loadingUpload.value = true;
  1395. if (fileArr.value.length > 0) {
  1396. let form=new FormData();
  1397. for (var i = 0; i < fileArr.value.length; i++) {
  1398. form.append("files",fileArr.value[i]);
  1399. }
  1400. form.append("spaceId",newSpaceId.value)
  1401. form.append("dirId",newDirId.value)
  1402. // console.error(fileArr.value);
  1403. uploadApi.uploadFileMany(form).then(res => {
  1404. if (res.code === 200) {
  1405. ElMessage({
  1406. message: "上传文件成功",
  1407. type: "success"
  1408. })
  1409. // getAllTop()
  1410. refreshFile()
  1411. uploadModal.value = false
  1412. loadingUpload.value = false;
  1413. fileArr.value = []
  1414. }
  1415. }).catch(err => {
  1416. loadingUpload.value = false;
  1417. fileArr.value = []
  1418. })
  1419. } else {
  1420. loadingUpload.value = false;
  1421. return ElMessage({ message: "请选择文件", type: "error" })
  1422. }
  1423. }
  1424. function onSuccess(files, val) {
  1425. const maxSize = (maxFileSize.value-0)*1024*1024
  1426. if(files.file.size<maxSize){
  1427. fileArr.value.push(files.file)
  1428. }
  1429. } //关闭文件上传
  1430. const closeUpload =() =>{
  1431. uploadModal.value = false;
  1432. fileArr.value = [];
  1433. // fileBig.value = 0
  1434. loadingUpload.value = false
  1435. }
  1436. // 移除上传的某些文件
  1437. const handleRemove = (file,rawFile) => {
  1438. // fileArr.value = [...rawFile]
  1439. // fileBig.value = fileBig.value - file.size
  1440. fileArr.value = rawFile.map(item=>{
  1441. if(item.raw){
  1442. return item.raw
  1443. }else{
  1444. return item
  1445. }
  1446. })
  1447. }
  1448. // 筛选后缀图片
  1449. function getImage(file) {
  1450. if (file === '.txt') {
  1451. return ImgFile.txt
  1452. } else if (file === '.xlxs' || file === '.docx') {
  1453. return ImgFile.xlxs
  1454. } else if (file === '.pptx') {
  1455. return ImgFile.pptx
  1456. } else if (file === '.word') {
  1457. return ImgFile.word
  1458. } else if (file === '.pdf') {
  1459. return ImgFile.pdf
  1460. }
  1461. }
  1462. // 表格多选框
  1463. function handleSelectionChange(val) {
  1464. delMoreFile.value = val //删除多项的数据
  1465. if (val.length) {
  1466. folderCheckout.value = true
  1467. haveCheck.value = true
  1468. } else {
  1469. folderCheckout.value = false
  1470. haveCheck.value = false
  1471. }
  1472. }
  1473. // 文件夹
  1474. function handleSelectionChange1(val) {
  1475. delMoreFolder.value = val //删除多项的数据
  1476. if (val.length) {
  1477. fileCheckout.value = true
  1478. haveCheck.value = true
  1479. }else{
  1480. haveCheck.value = false
  1481. fileCheckout.value = false
  1482. }
  1483. }
  1484. // 重命名
  1485. function restName(row, index) {
  1486. // 判断是点击打开还是右键菜单打开
  1487. row = row ? row : clickRow.value
  1488. copyFolderName.value = row.dirName
  1489. selectedBox.value = row.dirId
  1490. setTimeout(() => {
  1491. rename.value = true
  1492. }, 200);
  1493. }
  1494. async function getMenu(row, num,canDo) {
  1495. // if(delMoreFile.value[0].dirType === "2") return ElMessage({
  1496. // message: "删除失败,组织目录不可删除",
  1497. // type: "error"
  1498. // })
  1499. if (row.name === '删除') {
  1500. if(!canDo) return
  1501. ElMessageBox.confirm(
  1502. '是否确认删除文件?',
  1503. '系统提示',
  1504. {
  1505. confirmButtonText: '确认',
  1506. cancelButtonText: '取消',
  1507. type: 'warning',
  1508. }
  1509. )
  1510. .then(async () => {
  1511. const datas = delMoreFile.value.map(item=>{
  1512. return item.docId
  1513. })
  1514. let candel = false
  1515. await datas.forEach(item=>{
  1516. if(delFileFn(item)){//删除的这批里面有打开的
  1517. candel = true
  1518. return
  1519. }
  1520. })
  1521. if(candel)return
  1522. const filesStr = datas.join(',')
  1523. loadingPreview.value = true
  1524. // console.log('filesStr',filesStr);
  1525. delInfo(filesStr).then(res=>{
  1526. if (res.code === 200) {
  1527. ElMessage({
  1528. message: "删除成功",
  1529. type: "success"
  1530. })
  1531. // getAllTop()
  1532. loadingPreview.value = false
  1533. refreshFile()
  1534. }
  1535. })
  1536. })
  1537. .catch(() => {
  1538. return false
  1539. })
  1540. }
  1541. }
  1542. function delName(row, num) {
  1543. row = row ? row : clickRow.value
  1544. ElMessageBox.confirm(
  1545. `是否确认删除名为"${row.dirName}"的文件夹?`,
  1546. '系统提示',
  1547. {
  1548. confirmButtonText: '确认',
  1549. cancelButtonText: '取消',
  1550. type: 'warning',
  1551. }
  1552. )
  1553. .then(() => {
  1554. documents.delDocument(row.dirId).then(res => {
  1555. if (res.code === 200) {
  1556. // 如果当前打开的是要删除的这个文件夹
  1557. if(thisFolder.value.dirId === row.dirId){
  1558. getAllTop()
  1559. pathLabelData.value = []
  1560. }else{
  1561. getFirstFolder()
  1562. }
  1563. getSpaceList()
  1564. ElMessage({
  1565. message: "删除成功",
  1566. type: "success"
  1567. })
  1568. delFolder(row)
  1569. }
  1570. })
  1571. })
  1572. .catch(() => {
  1573. return false
  1574. })
  1575. }
  1576. const delFolder = (row)=>{
  1577. delFolderDataFn(row)
  1578. }
  1579. // 计算百分比
  1580. function percent() {
  1581. let numP = 0;
  1582. if (useSpace.value && allSpace.value) {
  1583. numP = (useSpace.value / allSpace.value) * 100;
  1584. }
  1585. if(numP<0)return 0
  1586. if(numP>100)return 100
  1587. return numP.toFixed(2) - 0; // 将结果保留两位小数
  1588. }
  1589. // 文件夹每行点击事件
  1590. function folderClick(row, list,e,jump) {
  1591. if(!pathLabelData.value[0] && leftShowList.value === 2){
  1592. // 创建标签
  1593. const addData = {
  1594. path: '/publicment' + row.dirId,
  1595. name: row.dirName,
  1596. clickRowId: toRaw(row)
  1597. }
  1598. addFolderAdd(addData)
  1599. }
  1600. // 初始化分页数据
  1601. tableBeEnd.value = true
  1602. filePageNum.value = 1
  1603. tableTotal.value = 0
  1604. // 上一级dirId就是下一级的parentId
  1605. // 判断是点击打开还是右键菜单打开
  1606. if(row){
  1607. backFolder.value = thisFolder.value
  1608. thisFolder.value = row;
  1609. if(pathLabelData.value[0]){
  1610. // 有值就说明是二级及以后的数据
  1611. const oldArr = toRaw(pathLabelData.value)
  1612. // console.log('oldArr',oldArr);
  1613. let newArr
  1614. console.log('jump',jump);
  1615. if(jump == undefined){
  1616. newArr = oldArr.push({
  1617. name:toRaw(row).dirName,
  1618. dirId:toRaw(row).dirId
  1619. })
  1620. }else{ // jump有值说明是点击过来的 后面的要截取掉
  1621. newArr = oldArr.splice(jump+1)
  1622. }
  1623. console.log('newArr',newArr);
  1624. pathLabelData.value = JSON.parse(JSON.stringify(oldArr))
  1625. }else{
  1626. const labelItem = {
  1627. name:row.dirName,
  1628. dirId:row.dirId
  1629. }
  1630. pathLabelData.value = [labelItem]
  1631. }
  1632. }else{
  1633. row =thisFolder.value
  1634. }
  1635. if(row.isEncrypt === "Y" && row.encryptLevel){
  1636. getLeveldetailFn(row.encryptLevel)
  1637. }else{
  1638. thisFolderRole.value = {}
  1639. }
  1640. thisRole.value = row.dirRole?row.dirRole.split(','):[]
  1641. console.log('row1', toRaw(row));
  1642. // topPath.value = row.dirPath
  1643. // console.log('topPath',toRaw(topPath.value));
  1644. newDirId.value = row.dirId
  1645. newSpaceId.value = row.spaceId
  1646. const query = `${newDirId.value}?isAsc=${isAsc.value}&orderByColumn=createTime&pageSize=9999&pageNum=${filePageNum.value}`
  1647. documents.getALLdocumentByType({
  1648. parentId: newDirId.value - 0,
  1649. spaceId: newSpaceId.value - 0,
  1650. isAsc: isAsc.value,
  1651. orderByColumn: "createTime"
  1652. },1).then(res => {
  1653. folderList.value = res.rows
  1654. if (res.rows.length === 0) {
  1655. myfile.getById(query).then(res => {
  1656. if (res.code === 200) {
  1657. tableTotal.value =res.total
  1658. if(res.rows.length<res.total){
  1659. //第一次拿到的数据少于总数开启下拉事件
  1660. tableBeEnd.value = false
  1661. }
  1662. fileList.value = res.rows
  1663. }
  1664. })
  1665. } else {
  1666. myfile.getById(query).then(res => {
  1667. console.log('folerFile',res);
  1668. if (res.code === 200) {
  1669. tableTotal.value =res.total
  1670. if(res.rows.length<res.total){
  1671. //第一次拿到的数据少于总数开启下拉事件
  1672. tableBeEnd.value = false
  1673. }
  1674. fileList.value = JSON.parse(JSON.stringify(res.rows))
  1675. // console.log('fileList',toRaw(fileList.value));
  1676. }
  1677. })
  1678. }
  1679. })
  1680. setTimeout(() => {
  1681. sessionStorage.setItem('folderArr','')
  1682. }, 1500);
  1683. }
  1684. // 左边树节点每行点击事件
  1685. function listfolderClick(row,firstData) {
  1686. leftNewFile.value = false
  1687. if(row){
  1688. thisFolder.value = row
  1689. }
  1690. row = row?row:thisFolder.value
  1691. if (row.isEncrypt === "Y") {
  1692. getLeveldetailFn(row.encryptLevel)
  1693. } else {
  1694. thisFolderRole.value = null
  1695. }
  1696. thisRole.value = row.dirRole?row.dirRole.split(','):[]
  1697. // console.log('row',row);
  1698. // console.log('rowthisFolderRole',thisFolderRole.value);
  1699. newDirId.value = row.dirId
  1700. newSpaceId.value = row.spaceId
  1701. const query = `${newDirId.value}?isAsc=${isAsc.value}&orderByColumn=createTime&pageSize=9999&pageNum=1`
  1702. documents.getALLdocumentByType({
  1703. parentId: newDirId.value - 0,
  1704. spaceId: newSpaceId.value - 0,
  1705. isAsc: isAsc.value,
  1706. orderByColumn: "createTime"
  1707. }, 1).then(res => {
  1708. folderList.value = res.rows
  1709. if (res.rows.length === 0) {
  1710. myfile.getById(query).then(res => {
  1711. // console.log('res = ',res);
  1712. if (res.code === 200) {
  1713. tableTotal.value = res.total
  1714. if (res.rows.length < res.total) {
  1715. //第一次拿到的数据少于总数开启下拉事件
  1716. tableBeEnd.value = false
  1717. }
  1718. fileList.value = JSON.parse(JSON.stringify(res.rows))
  1719. }
  1720. // console.log('folderClickshijian1',tableTotal.value,tableBeEnd.value);
  1721. })
  1722. } else {
  1723. myfile.getById(query).then(res => {
  1724. if (res.code === 200) {
  1725. tableTotal.value = res.total
  1726. if (res.rows.length < res.total) {
  1727. //第一次拿到的数据少于总数开启下拉事件
  1728. tableBeEnd.value = false
  1729. }
  1730. fileList.value = JSON.parse(JSON.stringify(res.rows))
  1731. }
  1732. // console.log('fileList',fileList.value);
  1733. })
  1734. }
  1735. })
  1736. }
  1737. // 确认文件重命名
  1738. function sureChangeName() {
  1739. myfile.editNewMenu({
  1740. dirId: copyDirId.value - 0,
  1741. docId: clickRowId.value - 0,
  1742. fileId: copyFileId.value,
  1743. fileName: nameForm.value.name,
  1744. fileSize: copyFileSize.value - 0,
  1745. fileType: copyFileType.value,
  1746. remark: '',
  1747. spaceId: copySpaceId.value - 0,
  1748. }).then(res => {
  1749. if (res.code === 200) {
  1750. ElMessage({
  1751. message: "重命名成功",
  1752. type: "success"
  1753. })
  1754. upFileData({
  1755. docId:clickRowId.value - 0,
  1756. fileName:nameForm.value.name
  1757. })
  1758. fileNameChange.value = false
  1759. refreshFile()
  1760. }
  1761. })
  1762. }
  1763. // 判断id
  1764. function isId() {
  1765. if (directoryId.value === '') {
  1766. directoryId.value = 0
  1767. getAllTop()
  1768. }
  1769. if (folderId.value === '') {
  1770. folderId.value = 0
  1771. getAllTop()
  1772. }
  1773. }
  1774. //关闭图片预览事件
  1775. const closeImgPreview = () => {
  1776. // console.log('close');
  1777. showPreview.value = false
  1778. }
  1779. function getChildren(data) {
  1780. fileTrees.value = data
  1781. refreshFile()
  1782. }
  1783. function getCback(data) {
  1784. thanks.value = data
  1785. }
  1786. function getChildrenC(data) {
  1787. folderCase.value = data
  1788. }
  1789. function getCollects(data) {
  1790. collects.value = data
  1791. }
  1792. function getRename(data) {
  1793. rename.value = data
  1794. }
  1795. function getSpaceC(data) {
  1796. spaces.value = data
  1797. }
  1798. function navBack(data, name) {
  1799. nameForm.value.name = name
  1800. fileNameChange.value = data
  1801. }
  1802. function onlineCase(data, uid, row) {
  1803. editOnline.value = data
  1804. clickRowId.value = uid
  1805. copyRow = row
  1806. }
  1807. function shareBack(data, num) {
  1808. thanks.value = data
  1809. workOrEdit.value = num
  1810. }
  1811. function showFile(data, e, a) {
  1812. editOnline.value = data
  1813. clickRowId.value = e
  1814. copyRow = a
  1815. }
  1816. function folderBack(dir, spa, nam) {
  1817. selectedBox.value = dir
  1818. copyFolderName.value = nam
  1819. copyFileName.value = spa
  1820. }
  1821. //历史版本
  1822. const forwardTreeData = reactive({ data: {} });
  1823. const historycopyRow = ref({})
  1824. function changeMsgClose(val, item) {
  1825. if (val) {
  1826. historycopyRow.value = item
  1827. editOnline.value = false
  1828. cliCC.value = false
  1829. historyPrew.value = true
  1830. }
  1831. openForwardFile.value = val
  1832. }
  1833. function lastBB(data, row, num) {
  1834. openForwardFile.value = data
  1835. historyTotal.value = row
  1836. fileUserTreeData.data = num
  1837. }
  1838. const setImg = (type)=>{
  1839. return setIcon(type)
  1840. }
  1841. //对mouseCli数组进行筛选,实现菜单的区分显示
  1842. const filterMouseCli = () => {
  1843. const canPreviewArray = ['.doc','.dps','.et','.wps', '.docm', '.docx', '.dot', '.dotm', '.dotx', '.epub', '.fodt', '.htm', '.html', '.mht', '.odt', '.ott', '.pdf', '.rtf', '.txt', '.djvu', '.xps', '.csv', '.fods', '.ods', '.ots', '.xls', '.xlsm', '.xlsx', '.xlt', '.xltm', '.xltx', '.fodp', '.odp', '.otp', '.pot', '.potm', '.potx', '.pps', '.ppsm', '.ppsx', '.ppt', '.pptm', '.pptx']
  1844. const typeArr = ['.png', '.jpg', '.jpeg', '.JPG','.PNG', '.mp3', '.mp4']
  1845. const imgTypeArr = ['.png', '.jpg', '.jpeg', '.JPG','.PNG','.webg']
  1846. const canEditArr = ['.doc', '.dps','.et','.docm', '.docx', '.dot', '.dotm', '.dotx', '.txt', '.djvu', '.xps', '.csv', '.fods', '.ods', '.ots', '.xls', '.xlsm', '.xlsx', '.xlt', '.xltm', '.xltx', '.fodp', '.odp', '.otp','.doc', '.docm', '.docx', '.dot', '.dotm', '.dotx', '.epub', '.fodt', '.htm', '.html', '.mht', '.odt', '.ott', '.rtf', '.txt', '.djvu', '.xps', '.wps','.pptx','.pdf','.PDF']
  1847. let arr = []
  1848. //如果带有(重命名)-前缀 只允许进行重命名操作
  1849. const regExp = /^\(重命名\)-/
  1850. if(regExp.test(clickRow.value.fileName)){
  1851. return arr = mouseCli.value.filter(item => item.name === "重命名")
  1852. }
  1853. if (!(typeArr.includes(copyFileType.value) || canPreviewArray.includes(copyFileType.value))) {
  1854. arr = mouseCli.value.filter(item => item.name !== "打开")
  1855. } else {
  1856. arr = toRaw(mouseCli.value)
  1857. }
  1858. if (!canEditArr.includes(copyFileType.value)) {
  1859. arr = arr.filter(item => item.name !== "在线编辑" && item.name !== "协作" && item.name !== "历史版本")
  1860. }
  1861. if (clickRow.value.isFiled === "Y") {
  1862. arr = arr.filter(item => item.name !== "在线编辑" && item.name !== "协作")
  1863. }
  1864. if (!imgTypeArr.includes(copyFileType.value)) {
  1865. arr = arr.filter(item => item.name !== "文字识别")
  1866. }
  1867. // console.log('arr',arr);
  1868. if(thisFolderRole.value?.roles){
  1869. console.log('thisFolderRole',thisFolderRole.value);
  1870. arr = rightMenuRole(toRaw(thisFolderRole.value),arr)
  1871. }
  1872. if(thisRole.value.length){
  1873. arr = publicRightMenuRole(toRaw(thisRole.value),arr)
  1874. }
  1875. // console.log('thisFolder',thisFolder.value);
  1876. if(thisFolder.value.dirType == '1'&& !isDept.value){
  1877. arr = ordinaryFolder.value
  1878. }
  1879. if(arr.length<1){
  1880. noMenuItem.value = true
  1881. }else{
  1882. noMenuItem.value = false
  1883. }
  1884. console.log('filterArr',arr);
  1885. return arr
  1886. }
  1887. function mouseClick() {
  1888. if (cliCC.value) {
  1889. cliCC.value = false
  1890. }
  1891. if (anyP) {
  1892. anyP.value = false
  1893. }
  1894. }
  1895. // 文件夹右键事件
  1896. const folderRClick = (row, col, e) => {
  1897. e.preventDefault();
  1898. e.stopPropagation();
  1899. // thisFolder.value = '' //先清空
  1900. let thisRow = toRaw(row)
  1901. // console.log('thisFolder',thisFolder.value);
  1902. clickRow.value = thisRow
  1903. copyFolderName.value = row.dirName
  1904. // 唤出右键菜单,思路:获取鼠标位置来定位菜单
  1905. folderVisible.value = true;
  1906. foldertop.value = e.pageY;
  1907. folderleft.value = e.pageX;
  1908. };
  1909. // 关闭文件夹右键菜单
  1910. const closeRMenu = () => {
  1911. // console.log("close");
  1912. folderVisible.value = false;
  1913. };
  1914. // 关闭tree右键菜单
  1915. const closeTreeRMenu = () => {
  1916. // console.log("close");
  1917. showTreeMenu.value = false;
  1918. };
  1919. // 文件夹收藏事件
  1920. const collectFolder = () => {
  1921. if(clickRow.value.isFavorite === "Y"){
  1922. return ElMessage({
  1923. type: "error",
  1924. message: "请勿重复收藏"
  1925. })
  1926. }
  1927. isFolder.value = 'Y'
  1928. // clickRow.value = thisFolder.value
  1929. // thisFolder.value = ''
  1930. copyFileName.value = clickRow.value.dirName
  1931. collects.value = true
  1932. }
  1933. // 左箭头事件
  1934. const arrowLift =async () => {
  1935. // router.go(-1)
  1936. // console.log(1);
  1937. topPath.value = backFolder.value.dirPath
  1938. // console.log('topPath',toRaw(topPath.value));
  1939. newDirId.value = backFolder.value.parentId
  1940. newSpaceId.value = backFolder.value.spaceId
  1941. documents.getALLdocumentByType({
  1942. parentId: newDirId.value - 0,
  1943. spaceId: newSpaceId.value - 0
  1944. },1).then(res => {
  1945. folderList.value = res.rows
  1946. if (res.rows.length === 0) {
  1947. myfile.getById(newDirId.value).then(res => {
  1948. if (res.code === 200) {
  1949. fileList.value = res.rows
  1950. }
  1951. })
  1952. } else {
  1953. myfile.getById(newDirId.value).then(res => {
  1954. if (res.code === 200) {
  1955. fileList.value = JSON.parse(JSON.stringify(res.rows))
  1956. // console.log('fileList',toRaw(fileList.value));
  1957. }
  1958. })
  1959. }
  1960. })
  1961. }
  1962. // 归档
  1963. async function goLock() {
  1964. console.log('goLockclickRow',clickRow.value);
  1965. const res = await documentation(clickRow.value.docId)
  1966. console.log('res',res);
  1967. if(res.code == 200){
  1968. ElMessage({
  1969. type: "success",
  1970. message: "成功归档"
  1971. })
  1972. }
  1973. cliCC.value = false
  1974. anyP.value = false
  1975. refreshFile()
  1976. }
  1977. function formatFileSize(fileSize) {
  1978. if (fileSize >= 1024 * 1024 * 1024) {
  1979. // 大于等于1GB,显示GB
  1980. return (fileSize / (1024 * 1024 * 1024)).toFixed(2) + 'GB';
  1981. } else if (fileSize >= 1024 * 1024) {
  1982. // 大于等于1MB,显示MB
  1983. return (fileSize / (1024 * 1024)).toFixed(2) + 'MB';
  1984. } else if (fileSize >= 1024) {
  1985. // 大于等于1KB,显示KB
  1986. return (fileSize / 1024).toFixed(2) + 'KB';
  1987. } else {
  1988. // 小于1KB,显示字节
  1989. return fileSize + 'B';
  1990. }
  1991. }
  1992. function formatStorage(sizeInGB) {
  1993. if(sizeInGB<=0) return "0KB"
  1994. if (sizeInGB >= 1) {
  1995. return sizeInGB.toFixed(2) + 'GB';
  1996. } else {
  1997. const sizeInMB = sizeInGB * 1024;
  1998. if (sizeInMB >= 1) {
  1999. return sizeInMB.toFixed(2) + 'MB';
  2000. } else {
  2001. const sizeInKB = sizeInMB * 1024;
  2002. return sizeInKB.toFixed(2) + 'KB';
  2003. }
  2004. }
  2005. }
  2006. function gridChange() {
  2007. if (fileGrid.value) {
  2008. fileGrid.value = false
  2009. } else {
  2010. fileGrid.value = true
  2011. }
  2012. if (folderGrid.value) {
  2013. folderGrid.value = false
  2014. } else {
  2015. folderGrid.value = true
  2016. }
  2017. }
  2018. //点击收藏后刷新文件
  2019. const refreshFile = (left,edit)=>{
  2020. // console.log('ref',toRaw(thisFolder.value));
  2021. if(left){
  2022. leftNewFile.value = true
  2023. }
  2024. if(edit){
  2025. getFirstFolder()
  2026. }
  2027. if (toRaw(thisFolder.value)?.dirId && !leftNewFile.value && leftShowList.value === 2 ) {//如果点开了文件夹
  2028. folderClick()
  2029. } else if(toRaw(thisFolder.value)?.dirId && !leftNewFile.value && leftShowList.value === 1){
  2030. listfolderClick()
  2031. }else {
  2032. getAllTop()
  2033. getFirstFolder()
  2034. }
  2035. getSpaceList()
  2036. }
  2037. //star收藏事件
  2038. const collectByStar = (row,isfolder)=>{
  2039. console.log('row',row);
  2040. if(isfolder){
  2041. let thisRow = toRaw(row)
  2042. isFolder.value = 'Y'
  2043. clickRow.value = thisRow
  2044. copyFolderName.value = row.dirName
  2045. copyFileName.value = clickRow.value.dirName
  2046. }else{
  2047. isFolder.value = "N"
  2048. clickRow.value = row
  2049. copyRow.value = row
  2050. clickRowId.value = row.docId
  2051. copyDirId.value = row.dirId
  2052. copyFileName.value = row.fileName
  2053. }
  2054. collects.value = true
  2055. }
  2056. // 取消文件收藏
  2057. const delCollect = async (row,isfolder)=>{
  2058. const thisRow = toRaw(row)
  2059. console.log('thisRow',thisRow);
  2060. let query = {}
  2061. if(isfolder){
  2062. query = {
  2063. isFolder:"Y",
  2064. relaId:thisRow.dirId
  2065. }
  2066. }else{
  2067. query = {
  2068. isFolder:"N",
  2069. relaId:thisRow.docId
  2070. }
  2071. }
  2072. const res = await delFavorite(query)
  2073. ElMessage({
  2074. type: "success",
  2075. message: "已取消收藏"
  2076. })
  2077. refreshFile()
  2078. }
  2079. //获取安全图标
  2080. const getLevelImg = (level)=>{
  2081. switch (level) {
  2082. case "L1":
  2083. return level1;
  2084. break;
  2085. case "L2":
  2086. return level2;
  2087. break;
  2088. case "L3":
  2089. return level3;
  2090. break;
  2091. case "L4":
  2092. return level4;
  2093. break;
  2094. return level1;
  2095. break;
  2096. }
  2097. }
  2098. const getLevelList = async ()=>{
  2099. const res = await getLevel()
  2100. if(res.rows){
  2101. levelList.value = res.rows.map(item=>{
  2102. return {
  2103. levelCode:item.levelCode,
  2104. levelName:item.levelName
  2105. }
  2106. })
  2107. console.log('levelList',levelList.value);
  2108. }
  2109. }
  2110. const setTablelevel = (level)=>{
  2111. const thisItem = levelList.value.find(item=>item.levelCode == level)
  2112. if(thisItem){
  2113. return thisItem.levelName
  2114. }else{
  2115. return '未加密'
  2116. }
  2117. }
  2118. //获取权限详情
  2119. const getLeveldetailFn =async (data)=>{
  2120. const res = await getLeveldetail(data)
  2121. // console.log('getLeveldetailFn',res);
  2122. if(res.code === 200){
  2123. thisFolderRole.value = res.data
  2124. thisFolderRole.value.accessCode = thisFolder.value.accessCode
  2125. }
  2126. // console.log('thisFolderRole',thisFolderRole.value);
  2127. }
  2128. const closeIptPass = ()=>{
  2129. showInputPassword.value = false
  2130. }
  2131. //输入验证密码后
  2132. const surePass = (pass)=>{
  2133. const passwordCookies = Cookies.get("pass");
  2134. // const oldPass = decrypt(passwordCookies)
  2135. // console.log('pass',pass);
  2136. // console.log('oldPass',oldPass);
  2137. // console.log('clickRow',clickRow);
  2138. showInputPassword.value = false
  2139. if(pass === passwordCookies){
  2140. const passArr = localStorage.getItem('passArr');
  2141. // console.log('passArr',passArr);
  2142. if(!passArr){
  2143. const newArr = []
  2144. newArr.push(clickRow.value.docId)
  2145. localStorage.setItem('passArr',JSON.stringify(newArr))
  2146. }else{
  2147. const passArrObj = JSON.parse(passArr)
  2148. passArrObj.push(clickRow.value.docId)
  2149. localStorage.setItem('passArr',JSON.stringify(passArrObj))
  2150. }
  2151. // 设置销毁
  2152. setTimeout(()=>{
  2153. const passArr = localStorage.getItem('passArr');
  2154. const passArrObj = JSON.parse(passArr)
  2155. console.log('```passArrObj',passArrObj);
  2156. const newArr = passArrObj.filter(item=>item != clickRow.value.docId)
  2157. console.log('```newArr',newArr);
  2158. localStorage.setItem('passArr',JSON.stringify(newArr))
  2159. },1000*30)
  2160. chooseSet(chooseRow.value,null,chooseNum.value)
  2161. }else{
  2162. ElMessage({ message: "验证失败", type: "error" })
  2163. }
  2164. }
  2165. //输入私有码后
  2166. const sureCode =async (pass) => {
  2167. console.log('pass',pass);
  2168. // console.log('oldPass',passwordCookies);
  2169. // console.log('clickRow',clickRow);
  2170. const query={
  2171. code:pass,
  2172. dirId:thisFolder.value.dirId
  2173. }
  2174. const res = await documents.matches(query)
  2175. console.log('res',res);
  2176. showInputPassword.value = false
  2177. if (res.data) {
  2178. const codeArr = localStorage.getItem('codeArr');
  2179. // console.log('passArr',passArr);
  2180. if (!codeArr) {
  2181. const newArr = []
  2182. newArr.push(clickRow.value.docId)
  2183. localStorage.setItem('codeArr', JSON.stringify(newArr))
  2184. } else {
  2185. const codeArrObj = JSON.parse(codeArr)
  2186. codeArrObj.push(clickRow.value.docId)
  2187. localStorage.setItem('codeArr', JSON.stringify(codeArrObj))
  2188. }
  2189. // 设置销毁
  2190. setTimeout(() => {
  2191. const codeArr = localStorage.getItem('codeArr');
  2192. const codeArrObj = JSON.parse(codeArr)
  2193. // console.log('```passArrObj',passArrObj);
  2194. const newArr = codeArrObj.filter(item => item != clickRow.value.docId)
  2195. // console.log('```newArr',newArr);
  2196. localStorage.setItem('codeArr', JSON.stringify(newArr))
  2197. }, 1000 * 30)
  2198. chooseSet(chooseRow.value, null, chooseNum.value)
  2199. } else {
  2200. ElMessage({ message: "验证失败", type: "error" })
  2201. }
  2202. }
  2203. // 文件下载
  2204. const downLoadfile = ()=>{
  2205. myfile.fileDown(clickRow.value.docId).then(res=>{
  2206. var reader = new FileReader();
  2207. reader.onloadend = function(event){
  2208. //event 就是你要的返回内容
  2209. //因为返回的报错格式是字符串,手动转换成对象,转换成功表示请求失败
  2210. //转换失败就意味着你拿到的result是文件流,那么直接手动下载就好
  2211. try{
  2212. let data = JSON.parse(event.target.result)
  2213. }catch(err){
  2214. const link = document.createElement('a'); // 创建a标签
  2215. let blob = new Blob([res]);
  2216. link.style.display = 'none';
  2217. link.href = URL.createObjectURL(blob); // 创建下载的链接
  2218. link.setAttribute('download', clickRow.value.fileName+clickRow.value.fileType); // 给下载后的文件命名
  2219. document.body.appendChild(link);
  2220. link.click(); // 点击下载
  2221. document.body.removeChild(link); // 完成移除元素
  2222. window.URL.revokeObjectURL(link.href); // 释放blob对象
  2223. }
  2224. };
  2225. reader.readAsText(res);
  2226. })
  2227. }
  2228. // 触底加载事件
  2229. const setScroll =async ()=>{
  2230. // console.log('setScroll','到底喽');
  2231. if(tableBeEnd.value)return
  2232. // console.log('tableBeEnd.value',tableBeEnd.value);
  2233. filePageNum.value = filePageNum.value+1
  2234. const query = `${thisFolder.value.dirId}?pageSize=9999&pageNum=${filePageNum.value}`
  2235. // -------------先禁止掉事件 定时器1秒钟后才能再次触发
  2236. tableBeEnd.value = true
  2237. // --------------------
  2238. const res = await myfile.getById(query)
  2239. console.log('setScrollres',res);
  2240. if (res.code === 200) {
  2241. // const newarr = res.rows.concat(toRaw(fileList.value))
  2242. const newarr = toRaw(fileList.value).concat(res.rows)
  2243. console.log('newarr',newarr);
  2244. fileList.value = JSON.parse(JSON.stringify(newarr))
  2245. if(newarr.length < tableTotal.value){
  2246. //获取后的数量<total就可以再次获取
  2247. setTimeout(()=>{
  2248. tableBeEnd.value = false
  2249. },1000)
  2250. }
  2251. }
  2252. // console.log('query',query);
  2253. // console.log('fileList',fileList.value);
  2254. }
  2255. // 获取用户信息
  2256. const getUserInfo =async ()=>{
  2257. const userStore = useUserStore();
  2258. const userId = toRaw(userStore.roles)
  2259. if(userId.some(item=>item == 'system')){
  2260. isDept.value = true
  2261. }else{
  2262. isDept.value = false
  2263. }
  2264. console.log('isDept',isDept.value);
  2265. }
  2266. //修改文件夹权限
  2267. const upFirstFoler =async (item)=>{
  2268. oneOrTwo.value = item?1:0
  2269. // console.log('upFirstFoler',item);
  2270. item = item || clickRow.value
  2271. const res = await myfile.getDir(item.dirId)
  2272. console.log('upFirstFolerres = ',res);
  2273. upFolderData.value = toRaw(res.data)
  2274. folderCase.value = true
  2275. }
  2276. const backTopPath = ()=>{
  2277. // pathLabelData.value = ([])
  2278. // getAllTop()
  2279. const addData = {
  2280. path: '/publicment',
  2281. label: '公共文件'
  2282. }
  2283. clickPath(null,addData)
  2284. }
  2285. const upBefore = (file,files)=>{
  2286. // console.log('file',file.size);
  2287. const maxSize = (maxFileSize.value-0)*1024*1024
  2288. // console.log('maxSize',maxSize);
  2289. if(file.size>maxSize){
  2290. files.pop()
  2291. ElMessage({ message: file.name+'上传失败,上传文件大小最大为'+maxFileSize.value+'M', type: 'error' })
  2292. }else{
  2293. // fileArr.value.push(file.raw)
  2294. }
  2295. }
  2296. //获取扫描仪列表
  2297. const scannerFile =async ()=>{
  2298. const res = await selectInfo()
  2299. scannerList.value = res.rows
  2300. checkScanner.value = true
  2301. checkScanId.value = null
  2302. // console.log('scanner',res);
  2303. }
  2304. // 选择扫描仪
  2305. const checkScanFn = (item)=>{
  2306. checkScanId.value = item.scannerId
  2307. }
  2308. // 确认选择扫描仪 获取扫描仪下文件列表
  2309. const sureScaner =async ()=>{
  2310. if(!checkScanId.value) return
  2311. const res = await getFileByScanerId(checkScanId.value)
  2312. console.log('sureScanerres',res);
  2313. scannerFiles.value = res.data
  2314. checkScanner.value = false
  2315. openScan.value = true
  2316. }
  2317. // 关闭窗口
  2318. const closeCheckScanner = ()=>{
  2319. checkScanner.value = false
  2320. }
  2321. // 移动到事件
  2322. const saveScanFile = (arr)=>{
  2323. console.log('arr',arr);
  2324. openScan.value = false
  2325. scanFileArr.value = arr
  2326. openScanMove.value = true
  2327. }
  2328. // 关闭窗口
  2329. const closeOpenScanMove = ()=>{
  2330. openScanMove.value = false
  2331. refreshFile()
  2332. }
  2333. const changeLeftShow = ()=>{
  2334. leftShowList.value = leftShowList.value == 1?2:1
  2335. if(leftShowList.value == 2){
  2336. getFirstFolder()
  2337. fileList.value = []
  2338. }else{
  2339. refreshFile()
  2340. }
  2341. thisFolder.value = {}
  2342. localStorage.setItem('leftShowList',leftShowList.value)
  2343. if(leftShowList.value === 1){
  2344. console.log('toList');
  2345. // 创建标签
  2346. const addData = {
  2347. path: '/publicment',
  2348. label: '公共文件'
  2349. }
  2350. clickPath(null,addData)
  2351. }
  2352. if(leftShowList.value === 2){
  2353. console.log('toList');
  2354. // 创建标签
  2355. const addData = {
  2356. path: '/publicment',
  2357. label: '公共文件'
  2358. }
  2359. clickPath(null,addData)
  2360. }
  2361. }
  2362. // 别处过来需要层层打开的文件夹
  2363. const openFolderPath = ()=>{
  2364. const FolderStr = sessionStorage.getItem('folderArr')
  2365. let foldersArr
  2366. if(FolderStr){
  2367. foldersArr = JSON.parse(FolderStr)
  2368. }else{
  2369. return
  2370. }
  2371. const oldLabelData = []
  2372. foldersArr.forEach((item,index)=>{
  2373. if(index<foldersArr.length - 1){
  2374. oldLabelData.push({
  2375. name:item.dirName,
  2376. dirId:item.dirId
  2377. })
  2378. }
  2379. })
  2380. pathLabelData.value = JSON.parse(JSON.stringify(oldLabelData))
  2381. // 打开文件夹
  2382. folderClick(foldersArr[foldersArr.length - 1])
  2383. // sessionStorage.setItem('folderArr','')
  2384. // console.log('pathLabelData',pathLabelData.value);
  2385. }
  2386. const delFolderMenu = ()=>{
  2387. ElMessageBox.confirm(
  2388. `是否确认删除名为"${clickRow.value.dirName}"的文件夹?`,
  2389. '系统提示',
  2390. {
  2391. confirmButtonText: '确认',
  2392. cancelButtonText: '取消',
  2393. type: 'warning',
  2394. }
  2395. )
  2396. .then(() => {
  2397. documents.delDocument(clickRow.value.dirId).then(res => {
  2398. if (res.code === 200) {
  2399. ElMessage({
  2400. message: "删除成功",
  2401. type: "success"
  2402. })
  2403. if(!thisFolder.value?.dirId){
  2404. delFolderDataFn(clickRow.value)
  2405. }
  2406. // getAllTop()
  2407. refreshFile()
  2408. } else {
  2409. ElMessage({
  2410. message: "删除失败,目录应不为空",
  2411. type: "error"
  2412. })
  2413. }
  2414. })
  2415. })
  2416. .catch(() => {
  2417. return false
  2418. })
  2419. }
  2420. watch(() => folder.value, async(newValue, oldValue) => {
  2421. // console.log('iFrameData 发生改变了', newValue, oldValue);
  2422. console.log('files',newValue);
  2423. filePageNum.value = 1
  2424. if(!newValue.length){
  2425. fileHeight.value = '75vh'
  2426. if(!thisFolder.value.dirId)return
  2427. if(fileGrid.value == 0){
  2428. pageSize.value = 20
  2429. }else{
  2430. pageSize.value = 80
  2431. }
  2432. const query = `${thisFolder.value.dirId}?pageSize=9999&pageNum=${filePageNum.value}`
  2433. const res = await myfile.getById(query)
  2434. // console.log('filessetScrollres',res);
  2435. if (res.code === 200) {
  2436. // const newarr = res.rows.concat(toRaw(fileList.value))
  2437. const newarr = res.rows
  2438. console.log('newarr',newarr);
  2439. fileList.value = JSON.parse(JSON.stringify(newarr))
  2440. if(newarr.length < tableTotal.value){
  2441. //获取后的数量<total就可以再次获取
  2442. setTimeout(()=>{
  2443. tableBeEnd.value = false
  2444. },1000)
  2445. }
  2446. }
  2447. }else{
  2448. if(fileGrid.value == 0){
  2449. pageSize.value = 10
  2450. }else{
  2451. pageSize.value = 50
  2452. }
  2453. fileHeight.value = '38vh'
  2454. if(!thisFolder.value.dirId)return
  2455. const query = `${thisFolder.value.dirId}?pageSize=9999&pageNum=${filePageNum.value}`
  2456. const res = await myfile.getById(query)
  2457. // console.log('filessetScrollres',res);
  2458. if (res.code === 200) {
  2459. // const newarr = res.rows.concat(toRaw(fileList.value))
  2460. const newarr = res.rows
  2461. console.log('newarr',newarr);
  2462. fileList.value = JSON.parse(JSON.stringify(newarr))
  2463. if(newarr.length < tableTotal.value){
  2464. //获取后的数量<total就可以再次获取
  2465. setTimeout(()=>{
  2466. tableBeEnd.value = false
  2467. },1000)
  2468. }
  2469. }
  2470. }
  2471. });
  2472. onMounted(() => {
  2473. const hasMsg = localStorage.getItem('leftShowList')
  2474. if (route.query.clickRowId) {
  2475. const newRow = JSON.parse(route.query.clickRowId)
  2476. collectId.value = newRow
  2477. }
  2478. if(!hasMsg){
  2479. getConfigKey("dir.style.config").then(response => {
  2480. leftShowList.value = response.msg - 0;
  2481. console.log('leftShowList == ',leftShowList.value);
  2482. });
  2483. }else{
  2484. leftShowList.value = hasMsg - 0
  2485. }
  2486. getAllTop()
  2487. getSpaceList()
  2488. getUserInfo()
  2489. getLevelList()
  2490. getConfigKey("file.size.limit").then(response => {
  2491. // console.log('response',response);
  2492. maxFileSize.value = response.msg
  2493. });
  2494. openFolderPath()
  2495. // 添加监听,点击其他地方关闭文件夹右键菜单
  2496. window.addEventListener("click", closeRMenu, true);
  2497. window.addEventListener("contextmenu", closeRMenu, true);
  2498. window.addEventListener("click", mouseClick, true);
  2499. window.addEventListener("mousewheel", mouseClick, true);
  2500. window.addEventListener("contextmenu", mouseClick, true);
  2501. window.addEventListener("click", closeTreeRMenu, true);
  2502. window.addEventListener("contextmenu", closeTreeRMenu, true);
  2503. })
  2504. // 组件显示
  2505. onActivated(()=>{
  2506. console.log('onActivated.query',route.query);
  2507. loadingPreview.value = true
  2508. //给pagesize复制
  2509. if(fileGrid.value == 0){
  2510. pageSize.value = 20
  2511. }else{
  2512. if(!folder.value.length){
  2513. pageSize.value = 80
  2514. }else{
  2515. pageSize.value = 30+pageSize.value
  2516. }
  2517. }
  2518. setTimeout(()=>{
  2519. if(route.query.clickRowId){
  2520. const newRow = JSON.parse(route.query.clickRowId)
  2521. // console.log('newRow',newRow);
  2522. myfile.getDir(newRow).then(res=>{
  2523. // console.log('tores',res);
  2524. thisFolder.value = res.data
  2525. // 这里点的是一级目录 所以重新给pathLabelData赋值
  2526. const labelItem = {
  2527. name:res.data.dirName,
  2528. dirId:res.data.dirId
  2529. }
  2530. pathLabelData.value = [labelItem]
  2531. openFolderPath()
  2532. refreshFile()
  2533. })
  2534. }
  2535. //查看是否有本地存储的文件夹信息
  2536. const json = sessionStorage.getItem('openFolder')
  2537. const openFolder =json? JSON.parse(json):''
  2538. if(openFolder){
  2539. const newRow = JSON.parse(openFolder.clickRowId)
  2540. // console.log('newRow',newRow);
  2541. myfile.getDir(newRow).then(res=>{
  2542. // console.log('tores',res);
  2543. thisFolder.value = res.data
  2544. // 这里点的是一级目录 所以重新给pathLabelData赋值
  2545. const labelItem = {
  2546. name:res.data.dirName,
  2547. dirId:res.data.dirId
  2548. }
  2549. pathLabelData.value = [labelItem]
  2550. //清楚该项本地存储
  2551. sessionStorage.setItem('openFolder','')
  2552. // openFolderPath()
  2553. // refreshFile()
  2554. })
  2555. }
  2556. const hasMsg = localStorage.getItem('leftShowList')
  2557. if(!hasMsg){
  2558. getConfigKey("dir.style.config").then(response => {
  2559. leftShowList.value = response.msg - 0;
  2560. console.log('leftShowList == ',leftShowList.value);
  2561. });
  2562. }else{
  2563. leftShowList.value = hasMsg - 0
  2564. }
  2565. loadingPreview.value = false
  2566. },500)
  2567. })
  2568. // onBeforeRouteUpdate((to,from)=>{
  2569. // console.log('to',to);
  2570. // console.log('from',from);
  2571. // if(to.name == 'publicment'){
  2572. // loadingPreview.value = true
  2573. // const thisdirId = to.params.dirId
  2574. // console.log('thisdirId',thisdirId);
  2575. // setTimeout(()=>{
  2576. // if(thisdirId){
  2577. // myfile.getDir(thisdirId).then(res=>{
  2578. // console.log('tores',res);
  2579. // thisFolder.value = res.data
  2580. // refreshFile()
  2581. // })
  2582. // }
  2583. // loadingPreview.value = false
  2584. // },500)
  2585. // }
  2586. // // docId = to.query.clickRowId
  2587. // // console.log(docId, "doc");
  2588. // // console.log(copyRow, "row");
  2589. // // edit();
  2590. // })
  2591. return {
  2592. getSpaceList,
  2593. folderList,//文件夹的数据
  2594. fileList,//文件夹的数据
  2595. searchFire,//搜索文件的model
  2596. changeFile,//切换右侧视图的file
  2597. menuList,//右侧切换
  2598. selectedIndex,//当前选中下标
  2599. shotdown,//筛选出当前数据
  2600. useMenu,
  2601. arrorMenu,
  2602. blueLeft,//返回
  2603. grayRight,//前进
  2604. squre,//视图切换
  2605. sort,//排序
  2606. folder,
  2607. files,
  2608. handleRowClick,
  2609. askApply,//申请扩容
  2610. cliCC,
  2611. mouseCli,//文件点击弹框
  2612. chooseSet,
  2613. trandata,
  2614. tranvalue,
  2615. anyP,
  2616. chooseSet1,
  2617. fileMenu,
  2618. createNewMenu,
  2619. // delBoser,
  2620. clickRowId,
  2621. createNewFile,
  2622. // fileUpload,
  2623. getImage,//筛选文件类型
  2624. handleSelectionChange,
  2625. handleSelectionChange1,
  2626. selectedBox,//重命名相关
  2627. restName,//重命名相关
  2628. getMenu,
  2629. folderId,
  2630. fileId,
  2631. // getAllMiddle,//拿到所有空间信息
  2632. delName,//删除空间信息
  2633. useSpace,//使用空间
  2634. allSpace,//总空间
  2635. percent,
  2636. arrowClick,
  2637. uploadModal,
  2638. sureUpload,
  2639. onSuccess,
  2640. fileArr,
  2641. directoryId,
  2642. folderClick,
  2643. copyDirId,//复制移动需要的↓
  2644. copyDocId,
  2645. copySpaceId,
  2646. copyFileId,
  2647. copyFileName,
  2648. copyFileSize,
  2649. copyFileType,
  2650. sureChangeName,//文件重命名
  2651. fileNameChange,//文件重命名模态框
  2652. nameForm,
  2653. collectImg,//收藏小星星
  2654. sortNum,
  2655. needBag,
  2656. isId,
  2657. editOnline,//在线编辑
  2658. copyParentId,
  2659. copyRow,
  2660. fileBox,
  2661. getAllTop,
  2662. newDirId,
  2663. newSpaceId,
  2664. showPreview,//控制图片预览
  2665. closeImgPreview,//关闭预览事件
  2666. previewData,//预览文件数据
  2667. router,
  2668. fileTrees,
  2669. getChildren,//子传父
  2670. copyOrMove,
  2671. impDirId,
  2672. impNum,
  2673. impSpaceId,
  2674. //历史版本=========
  2675. openForwardFile,
  2676. forwardTreeData,
  2677. fileUserTreeData,
  2678. filterMouseCli,
  2679. changeMsgClose,
  2680. historyPrew,
  2681. historycopyRow,
  2682. thanks,
  2683. getCback,
  2684. mouseClick,
  2685. folderVisible,
  2686. foldertop,
  2687. folderleft,
  2688. thisFolder,
  2689. folderRClick,
  2690. closeRMenu,
  2691. cancleHistoryPrew,
  2692. historyTotal,
  2693. //历史版本=========
  2694. fileUserTreeData,
  2695. thanks,
  2696. getCback,
  2697. mouseClick,
  2698. workOrEdit,
  2699. folderCase,//新建文件夹传值
  2700. getChildrenC,
  2701. oneOrTwo,//父传子判断
  2702. folderCheckout,
  2703. fileCheckout,
  2704. haveCheck,
  2705. onlyView,
  2706. goLock,
  2707. collects,//收藏父传子
  2708. getCollects,//收藏子传父
  2709. folderTotal,
  2710. fileTotal,
  2711. delMoreFile,//删除多个文件夹
  2712. topPath,
  2713. xz,//文件右键菜单left
  2714. yz,//文件右键菜单top
  2715. formatFileSize,
  2716. isFolder,
  2717. clickRow,
  2718. ordinaryList,
  2719. ordinary,
  2720. fileStyle,
  2721. rename,
  2722. leftNewFile,
  2723. getRename,//文件夹重命名子传父
  2724. copyFolderName,
  2725. spaces,//空间扩容父传子
  2726. getSpaceC,//空间扩容子传父
  2727. copySpaceCup,
  2728. fileGrid,
  2729. folderGrid,
  2730. collectFolder,
  2731. arrowLift,
  2732. formatStorage,
  2733. showFile,
  2734. navBack,
  2735. onlineCase,
  2736. lastBB,
  2737. shareBack,
  2738. folderBack,
  2739. refreshFile,
  2740. delCollect,
  2741. backFolder,
  2742. collectByStar,
  2743. getLevelImg,
  2744. level1,
  2745. level2,
  2746. level3,
  2747. level4,
  2748. getLeveldetailFn,
  2749. thisFolderRole,
  2750. showInputPassword,
  2751. closeIptPass,
  2752. surePass,
  2753. chooseRow,
  2754. chooseNum,
  2755. loadingPreview,
  2756. thisRole,
  2757. noMenuItem,
  2758. downLoadfile,
  2759. addFolderAdd,
  2760. addFileTab,
  2761. addTab,
  2762. ordinaryFolder,
  2763. filePageNum,
  2764. setScroll,
  2765. tableBeEnd,
  2766. tableTotal,
  2767. spaceName,
  2768. getUserInfo,
  2769. isDept,
  2770. upFirstFoler,
  2771. //控制宫格展示
  2772. changeShow,
  2773. isList,
  2774. upFolderData,
  2775. setTablelevel,
  2776. levelList,
  2777. getLevelList,
  2778. closeUpload,
  2779. handleRemove,
  2780. loadingUpload,
  2781. fileBlur,
  2782. pathLabelData,
  2783. fileBlur,
  2784. backTopPath,
  2785. maxFileSize,
  2786. upBefore,
  2787. getFirstFolder,
  2788. openScan,
  2789. closeOpen,
  2790. scannerFile,
  2791. scannerList,
  2792. checkScanner,
  2793. checkScanId,
  2794. checkScanFn,
  2795. closeCheckScanner,
  2796. sureScaner,
  2797. scannerFiles,
  2798. saveScanFile,
  2799. openScanMove,
  2800. closeOpenScanMove,
  2801. scanFileArr,
  2802. setImg,
  2803. fileHeight,
  2804. pageSize,
  2805. delMoreFolder,
  2806. inputTitle,
  2807. isCode,
  2808. sureCode,
  2809. upFileData,
  2810. isAsc,
  2811. changeSort,
  2812. clickPath,
  2813. leftShowList,
  2814. changeLeftShow,
  2815. listfolderClick,
  2816. ListtreeData,
  2817. getFileTree,
  2818. searchFolderTree,
  2819. treeRClick,
  2820. showTreeMenu,
  2821. closeTreeRMenu,
  2822. delFolder,
  2823. changeListSort,
  2824. delFolderDataFn,
  2825. openFolderPath,
  2826. delFolderMenu,
  2827. noEdit,
  2828. delFileFn,
  2829. collectId,
  2830. setHisData,
  2831. showHis,
  2832. closeHis,
  2833. hisIfarmeData,
  2834. noHis,
  2835. hasThisTab
  2836. }
  2837. },
  2838. watch: {
  2839. },
  2840. components: {
  2841. BreadMenu,
  2842. FileEdit,
  2843. ImgPreview,
  2844. FileTree,
  2845. historyList,
  2846. TransferModal,
  2847. CreateFloder,
  2848. FileCollect,
  2849. FolderReName,
  2850. SpaceBig,
  2851. PlaceGridFolder,
  2852. PalaceGridFile,
  2853. inputPassword,
  2854. PathLabel,
  2855. ScanFile,
  2856. MoveTo,
  2857. LeftList,
  2858. ListShow,
  2859. TreeMenu,
  2860. PreHistory
  2861. },
  2862. }
  2863. </script>
  2864. <style lang="scss" scoped>
  2865. @import "@/assets/styles/my-common.scss";
  2866. .lodingBox{
  2867. position:absolute;
  2868. top: 0;
  2869. left: 0;
  2870. width: 100vh;
  2871. height: 100vh;
  2872. z-index: 10000000;
  2873. }
  2874. p {
  2875. margin: 0;
  2876. padding: 0;
  2877. }
  2878. .bigBox {
  2879. width: 100%;
  2880. height: 88vh;
  2881. display: flex;
  2882. justify-content: flex-start;
  2883. overflow: hidden;
  2884. }
  2885. .settingBox {
  2886. width: 25vw;
  2887. height: 92vh;
  2888. // border: 1px solid black;
  2889. border-radius: 4px;
  2890. /* margin: 5px 5px; */
  2891. margin-right: 8px;
  2892. background-color: white;
  2893. }
  2894. .topSearch {
  2895. width: 100%;
  2896. height: 48px;
  2897. background-color: #EBEFF6;
  2898. display: flex;
  2899. justify-content: space-between;
  2900. align-items: center;
  2901. padding-left: 16px;
  2902. padding-right: 16px;
  2903. }
  2904. .searchFire {
  2905. // width: 248px;
  2906. width: 100%;
  2907. height: 32px;
  2908. }
  2909. .searchBox{
  2910. display: flex;
  2911. justify-content: space-between;
  2912. align-items: center;
  2913. position: relative;
  2914. padding: 8px 16px;
  2915. .SearchIcon {
  2916. color: gray;
  2917. position: absolute;
  2918. right: calc(5% + 34px);
  2919. top: 35%;
  2920. }
  2921. .left_changeShow{
  2922. margin-left: 10px;
  2923. width: 24px;
  2924. height: 24px;
  2925. img{
  2926. width: 24px;
  2927. height: 24px;
  2928. }
  2929. }
  2930. }
  2931. .checkScan{
  2932. background-color: #eee;
  2933. }
  2934. .setBox {
  2935. width: 88px;
  2936. height: 112px;
  2937. text-align: center;
  2938. margin-left: 5px;
  2939. margin-top: 5px;
  2940. position: relative;
  2941. .left_fileBox{
  2942. position: relative;
  2943. margin-top: 10px;
  2944. .levelImg{
  2945. width: 32px;
  2946. height: 32px;
  2947. position: absolute;
  2948. right: 5%;
  2949. bottom: 20%;
  2950. }
  2951. }
  2952. }
  2953. .setBox:hover {
  2954. background-color: #EEF9FF;
  2955. }
  2956. .setBox:hover .selectChe {
  2957. background-color: #EEF9FF;
  2958. display: block;
  2959. z-index: 1000;
  2960. }
  2961. .selectChe {
  2962. display: none;
  2963. width: 20px;
  2964. height: 20px;
  2965. background: rgba(255, 255, 255, 0.7);
  2966. border-radius: 4px 4px 4px 4px;
  2967. position: absolute;
  2968. top: 2px;
  2969. right: 2px;
  2970. line-height: 10px;
  2971. }
  2972. .mesBox {
  2973. width: 75vw;
  2974. height: 88vh;
  2975. border-radius: 4px;
  2976. background-color: white;
  2977. }
  2978. #Onescan{
  2979. height: 48px;
  2980. line-height: 48px;
  2981. font-size: 14px;
  2982. display: flex;
  2983. align-items: center;
  2984. }
  2985. .useBox {
  2986. width: 100%;
  2987. height: 24px;
  2988. }
  2989. .tables {
  2990. display: inline-block;
  2991. width: 112px;
  2992. height: 22px;
  2993. border-radius: 4px;
  2994. line-height: 21px;
  2995. text-align: center;
  2996. font-size: 12px;
  2997. margin-left: 5px;
  2998. position: relative;
  2999. white-space: nowrap;
  3000. overflow: hidden;
  3001. text-overflow: ellipsis;
  3002. }
  3003. .tableLis {
  3004. display: inline-block;
  3005. width: 112px;
  3006. height: 22px;
  3007. border-radius: 4px;
  3008. background-color: #EBEFF6;
  3009. line-height: 21px;
  3010. text-align: center;
  3011. font-size: 12px;
  3012. margin-left: 5px;
  3013. position: relative;
  3014. white-space: nowrap;
  3015. overflow: hidden;
  3016. text-overflow: ellipsis;
  3017. max-width: auto;
  3018. }
  3019. .manyUse {
  3020. width: 100%;
  3021. height: 48px;
  3022. /* background-color: gray; */
  3023. line-height: 48px;
  3024. display: flex;
  3025. justify-content:space-between;
  3026. align-items: center;
  3027. .useMenu{
  3028. height: 100%;
  3029. display: flex;
  3030. align-items: center;
  3031. line-height: 48px;
  3032. }
  3033. .tip{
  3034. display: flex;
  3035. align-items: center;
  3036. margin-right: 24px;
  3037. color: #2E6BC8;
  3038. font-size: 14px;
  3039. }
  3040. }
  3041. .el-dropdown-link {
  3042. color: white;
  3043. cursor: pointer;
  3044. }
  3045. .breadBox {
  3046. width: 100%;
  3047. height: 24px;
  3048. display: flex;
  3049. justify-content: space-between;
  3050. align-items: center;
  3051. background-color: #F6F7F9;
  3052. .topPath {
  3053. margin-left: 4px;
  3054. display: flex;
  3055. align-items: center;
  3056. cursor: pointer;
  3057. color: #6F85B5;
  3058. font-size: 12px;
  3059. }
  3060. }
  3061. :deep(.el-collapse-item__header) {
  3062. height: 24px !important;
  3063. background-color: #EBEFF6 !important;
  3064. }
  3065. .detailBox {
  3066. width: 100%;
  3067. height: 50%;
  3068. // overflow-y: auto;
  3069. }
  3070. .showBox{
  3071. height: calc(100% - 48px - 24px);
  3072. }
  3073. :deep(.el-dialog__header) {
  3074. background-color: #ECEFF7;
  3075. margin-right: 0px;
  3076. }
  3077. .fileTable {
  3078. height: 50%;
  3079. // overflow-y: hidden;
  3080. // margin-top: 48px;
  3081. }
  3082. .setCli {
  3083. width: 156px;
  3084. max-height: auto;
  3085. position: absolute;
  3086. top: -70px;
  3087. left: 300px;
  3088. flex-wrap: 400;
  3089. background-color: white;
  3090. border: 1px solid gray;
  3091. border-radius: 4px;
  3092. z-index: 3;
  3093. overflow-y: auto;
  3094. // font-size: 16px;
  3095. }
  3096. .setCli1 {
  3097. width: 156px;
  3098. height: auto;
  3099. position: absolute;
  3100. background-color: white;
  3101. border: 1px solid gray;
  3102. border-radius: 4px;
  3103. z-index: 100;
  3104. overflow-y: auto;
  3105. }
  3106. .chooseSet {
  3107. width: 140px;
  3108. height: 30px;
  3109. line-height: 30px;
  3110. margin: 5px auto;
  3111. font-size: 13px;
  3112. cursor: pointer;
  3113. // display: flex;
  3114. // align-items: center;
  3115. // position: relative;
  3116. img {
  3117. margin-right: 4px;
  3118. vertical-align: middle;
  3119. }
  3120. }
  3121. .hasLine{
  3122. border-top: 1px solid #C1CCE3;
  3123. }
  3124. .btmLine{
  3125. border-bottom: 1px solid #C1CCE3;
  3126. }
  3127. .chooseSet:hover {
  3128. width: 140px;
  3129. height: 30px;
  3130. line-height: 30px;
  3131. margin: 5px auto;
  3132. font-size: 13px;
  3133. background-color: #F5F7F9;
  3134. /* color: white; */
  3135. }
  3136. :deep(.el-collapse-item__content) {
  3137. // height: 235px;
  3138. overflow-y: auto;
  3139. padding-bottom: 0;
  3140. }
  3141. :deep(.el-scrollbar__wrap) {
  3142. height: 100% !important;
  3143. // overflow-y: auto;
  3144. }
  3145. .ellipsis-text {
  3146. white-space: nowrap;
  3147. overflow: hidden;
  3148. text-overflow: ellipsis;
  3149. max-width: auto;
  3150. }
  3151. .right_menu {
  3152. width: 156px;
  3153. position: absolute;
  3154. padding: 8px;
  3155. box-shadow: 0px 2px 10px 1px rgba(199, 203, 216);
  3156. border-radius: 4px 4px 4px 4px;
  3157. border: 1px solid gray;
  3158. background-color: #fff;
  3159. z-index: 10000;
  3160. .menu_item {
  3161. width: 100%;
  3162. height: 30px;
  3163. border-radius: 4px 4px 4px 4px;
  3164. line-height: 30px;
  3165. display: flex;
  3166. margin: 5px auto;
  3167. align-items: center;
  3168. font-size: 13px;
  3169. &:hover {
  3170. background-color: #f5f7f9;
  3171. }
  3172. span {
  3173. margin-left: 4px;
  3174. }
  3175. }
  3176. }
  3177. // 扩容盒子
  3178. .expansion{
  3179. margin: 0 16px;
  3180. border-top: 1px solid #C1CCE3 ;
  3181. .top_box{
  3182. margin-top: 16px;
  3183. width: 100%;
  3184. display: flex;
  3185. justify-content: space-between;
  3186. }
  3187. }
  3188. .isCheck {
  3189. opacity: 1 !important;
  3190. }
  3191. :deep(.el-tag__content) {
  3192. display: block;
  3193. }
  3194. :deep(.el-icon el-tag__close) {
  3195. display: block;
  3196. }
  3197. :deep(.el-collapse-item__content) {
  3198. height: 100%;
  3199. border-bottom: none;
  3200. }
  3201. // // 隐藏全选按钮
  3202. // .file-jia {
  3203. // :deep(.el-table th.el-table__cell:nth-child(1) .cell) {
  3204. // visibility: hidden;
  3205. // }
  3206. // }
  3207. .file-title{
  3208. color: #2E6BC8;
  3209. margin-left: 3%;
  3210. }
  3211. ::v-deep .el-collapse-item__arrow {
  3212. position: relative;
  3213. color: #2e6bc8;
  3214. right: 97%;
  3215. }
  3216. :deep(.el-collapse-item__header) {
  3217. padding-left: 10px;
  3218. box-sizing: border-box;
  3219. }
  3220. .palace-grid{
  3221. margin-left: 4px;
  3222. margin-right: 20px;
  3223. }
  3224. </style>