semanticsPage.vue 21 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510
  1. <template>
  2. <!-- 文档管理 -->
  3. <div class="document-file-page-wrap">
  4. <!-- 目录栏 -->
  5. <div class="catalog-wrap page-block-wrap catalog-block" id="left">
  6. <div class="btn-box">
  7. <el-button v-permission="permissionBtn.semanticPermission.saPage_save"
  8. type="primary" @click="toPage('addFile')">添加文档对比</el-button>
  9. <!-- <el-button type="primary" plain @click="toPage('tag')">标签管理</el-button> -->
  10. </div>
  11. <div class="select-wrap">
  12. <el-select
  13. filterable remote
  14. placeholder="请输入文件名称"
  15. v-model="searchTitle"
  16. :remote-method="searchHandle"
  17. clearable
  18. value-key="SaCompareId"
  19. >
  20. <i slot="prefix" class="el-input__icon el-icon-search"></i>
  21. <el-option
  22. v-for="item in searchOptions"
  23. :key="item.SaCompareId"
  24. :label="item.Title"
  25. :value="item"
  26. >
  27. </el-option>
  28. </el-select>
  29. </div>
  30. <div class="catalog-list-wrap">
  31. <div class="catalog-list">
  32. <el-tree
  33. ref="catalogTree"
  34. class="catalog-tree other-tree"
  35. empty-text="暂无分类"
  36. :data="listData"
  37. node-key="nodeKeyId"
  38. :expand-on-click-node="true"
  39. :default-expanded-keys="expandKeys"
  40. draggable
  41. :allow-drag="checkAllowDrag"
  42. :allow-drop="checkAllowDrop"
  43. @node-drop="handleDropOver"
  44. @node-expand="handleNodeExpand"
  45. @node-collapse="handleNodeCollapse"
  46. @current-change="(data,node)=>{nodeChange(data,node)}"
  47. >
  48. <span class="custom-tree-node" slot-scope="{ data,node }"
  49. >
  50. <span class="tree-label">{{ data.label }}</span>
  51. <span style="display: flex; align-items: center"
  52. v-if="data.nodeKeyId===selectNodeKey"
  53. >
  54. <img
  55. :src="require('@/assets/img/set_m/edit.png')"
  56. alt="" v-if="node.level!==2&&isShowTreeBtn(node.level,'edit')"
  57. style="width: 14px; height: 14px; margin-right: 5px"
  58. @click.stop="clickNodeHandle('edit', data)"
  59. />
  60. <img
  61. :src="require('@/assets/img/set_m/del.png')"
  62. alt="" v-if="isShowTreeBtn(node.level,'delete')"
  63. style="width: 14px; height: 14px; margin-right: 5px"
  64. @click.stop="clickNodeHandle('del', data)"
  65. />
  66. </span>
  67. </span>
  68. </el-tree>
  69. </div>
  70. </div>
  71. <div class="catalog-tool">
  72. <div class="add-catalog" @click="isModifyClassifyShow=true" v-if="isShowTreeBtn(1,'edit')">
  73. <img
  74. src="~@/assets/img/set_m/add_ico.png"
  75. alt=""
  76. style="width: 16px; height: 16px; margin-right: 6px"
  77. />
  78. <span>添加分类</span>
  79. </div>
  80. <span class="total-text" v-if="selectNode&&model==='list'">共{{catalogList.length}}个文档</span>
  81. </div>
  82. <span class="move-btn resize" v-drag id="resize"></span>
  83. </div>
  84. <div class="detail-wrap page-block-wrap catalog-block" id="right">
  85. <!-- 列表栏 -->
  86. <div class="detail-list overflow-hide-scrollbar" v-if="model==='list'">
  87. <!-- 选择一级分类不再展示列表 -->
  88. <!-- <draggable
  89. class="drag-cont"
  90. v-model="catalogList"
  91. animation="300"
  92. @start="dragStartHandler"
  93. @update="dragenter"
  94. @end="moveListItem"
  95. :disabled="true"
  96. >
  97. <div class="list-item"
  98. v-for="item in catalogList" :key="item.nodeKeyId"
  99. @click="changeModel('file',item)"
  100. >
  101. <div class="item-title">
  102. <span>{{item.label}}</span>
  103. <img
  104. src="~@/assets/img/data_m/move_ico.png"
  105. style="width: 14px; height: 14px; margin-right: 8px"
  106. />
  107. </div>
  108. <div style="height:1px;background:#ECECEC;margin:0 -10px;"></div>
  109. <div class="item-image" :style="`background-image:url(${item.ResultImg?item.ResultImg:require('@/assets/img/document_m/default-img.png')})`"></div>
  110. <div style="height:1px;background:#ECECEC;margin:0 -10px;"></div>
  111. <div class="item-info">
  112. <span style="font-size:14px;">创建时间:{{item.CreateTime}}</span>
  113. <span>{{item.SysAdminName}}</span>
  114. </div>
  115. </div>
  116. </draggable> -->
  117. <div class="empty" v-if="catalogList.length===0">
  118. <tableNoData text="暂无数据"/>
  119. </div>
  120. </div>
  121. <!-- 文件详情 -->
  122. <div class="detail-file" v-else>
  123. <div class="file-info">
  124. <ul>
  125. <li>{{semanticInfo.Title}}</li>
  126. <li style="margin-left:auto;">作者:{{semanticInfo.SysAdminName}}</li>
  127. <li>创建时间:{{semanticInfo.CreateTime}}</li>
  128. </ul>
  129. <div class="pic-wrap">
  130. <img class="pic" id="copy-img" :src="semanticInfo.ResultImg" v-if="semanticInfo.ResultImg">
  131. <div class="empty" v-if="!semanticInfo.ResultImg">
  132. <img src="~@/assets/img/document_m/default-img.png" style="
  133. display: block;
  134. width: 120px;
  135. height: 120px;
  136. margin: 5% auto 10px;
  137. "/>
  138. 暂无图片信息
  139. </div>
  140. </div>
  141. </div>
  142. <div class="opt-box">
  143. <div style="margin-bottom:28px">操作</div>
  144. <div
  145. class="opt-item"
  146. v-permission="permissionBtn.semanticPermission.saPage_save"
  147. @click="handleEdit('file',selectNode)"
  148. >
  149. <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16" fill="none">
  150. <g opacity="0.9">
  151. <path d="M14.1321 4.95049L10.8888 1.70711L11.5959 1L14.8393 4.24338L14.1321 4.95049Z" fill="#409EFF"/>
  152. <path d="M5.97196 13.1108L2.359 13.8334C2.14909 13.8754 1.96401 13.6903 2.00599 13.4804L2.72858 9.86742L10.0262 2.56982L13.2696 5.8132L5.97196 13.1108ZM11.8554 5.8132L10.0262 3.98403L3.64979 10.3604L3.19249 12.6469L5.47895 12.1896L11.8554 5.8132Z" fill="#409EFF"/>
  153. <path d="M15 11H11V12H15V11Z" fill="#409EFF"/>
  154. <path d="M15 13H8.5V14H15V13Z" fill="#409EFF"/>
  155. </g>
  156. </svg>
  157. <span>编辑</span>
  158. </div>
  159. <div class="opt-item"
  160. v-permission="permissionBtn.semanticPermission.saPage_download"
  161. @click="handleDownLoadImg">
  162. <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16" fill="none">
  163. <path d="M12.2636 5.81387L8.5 9.57746L8.49998 0.5L7.49998 0.500002L7.5 9.57746L3.73641 5.81387L3.02931 6.52098L7.64645 11.1381C7.84171 11.3334 8.15829 11.3334 8.35355 11.1381L12.9707 6.52098L12.2636 5.81387Z" fill="#409EFF"/>
  164. <path d="M2 11V13C2 13.5523 2.44772 14 3 14H13C13.5523 14 14 13.5523 14 13V11H13V13H3V11H2Z" fill="#409EFF"/>
  165. </svg>
  166. <span>下载</span>
  167. </div>
  168. <div class="opt-item"
  169. v-permission="permissionBtn.semanticPermission.saPage_copyOffice"
  170. @click="handleCopyImg">
  171. <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16" fill="none">
  172. <path d="M3.99995 1.92191C3.99995 1.33727 4.52001 1 4.9953 1H9.36584C9.63437 1 9.89162 1.108 10.0797 1.29969L13.7139 5.00415C13.8972 5.19093 13.9999 5.44209 14.0001 5.70375L14.0046 12.0777C14.0046 12.6624 13.4846 13 13.0093 13H4.99995C4.52472 13 4.00474 12.6628 4.00461 12.0783L3.99995 1.92191ZM4.99999 2L5.00457 12H13.0046L13.0003 6.01275H9.00004V2H4.99999ZM10 2.64645V5.01275H12.3215L10 2.64645Z" fill="#409EFF"/>
  173. <path d="M2 5.00001V14.0128C2 14.565 2.44772 15.0128 3 15.0128H11V14.0128L3 14.0128V5.00001H2Z" fill="#409EFF"/>
  174. </svg>
  175. <span>复制到Office</span>
  176. </div>
  177. <div class="opt-item"
  178. v-permission="permissionBtn.semanticPermission.saPage_copyWeixin"
  179. @click="handleCopyImg">
  180. <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16" fill="none">
  181. <mask id="mask0_803_18530" style="mask-type:alpha" maskUnits="userSpaceOnUse" x="0" y="0" width="16" height="16">
  182. <rect width="16" height="16" fill="#D9D9D9"/>
  183. </mask>
  184. <g mask="url(#mask0_803_18530)">
  185. <path d="M15 9.6018C15 8.57143 14.5605 7.6063 13.7597 6.88639C13.0456 6.24297 12.1201 5.86727 11.1292 5.80877C10.9116 4.74691 10.2946 3.78178 9.38605 3.08661C8.47117 2.3847 7.30697 2 6.10896 2C4.75883 2 3.48687 2.47694 2.52551 3.34083C1.54301 4.22722 1 5.41057 1 6.67492C1 7.32733 1.14368 7.95951 1.42892 8.55343C1.67612 9.07087 2.02052 9.53881 2.45155 9.94151L2.10081 12.018C2.07123 12.198 2.13251 12.3825 2.26351 12.4994C2.35014 12.5782 2.46212 12.6187 2.57199 12.6187C2.62692 12.6187 2.68186 12.6097 2.73468 12.5872L5.93993 11.3476C6.3287 11.3386 6.70057 11.3093 7.05131 11.2576C7.22246 11.6445 7.45699 11.9865 7.7549 12.2745C8.4923 12.9899 9.58044 13.3678 10.9918 13.3993C11.0003 13.3993 11.0066 13.3993 11.013 13.4016L13.3583 13.9865C13.3942 13.9955 13.4301 14 13.466 14C13.5801 14 13.6921 13.9573 13.7809 13.874C13.8971 13.766 13.9562 13.6063 13.9436 13.4443L13.8379 12.2407C14.5795 11.5388 15 10.5872 15 9.6018ZM5.85119 10.3622L5.77301 10.3645L3.15726 11.3768L3.39813 9.95726C3.44039 9.70754 3.35164 9.45332 3.16994 9.29359C2.37338 8.59618 1.9339 7.66704 1.9339 6.67942C1.9339 4.64792 3.80803 2.99213 6.11319 2.99213C8.08029 2.99213 9.75581 4.18448 10.1868 5.85602C9.35436 5.982 8.58527 6.33746 7.97042 6.89089C7.17175 7.6108 6.73015 8.57593 6.73015 9.6063C6.73015 9.84702 6.74706 10.081 6.78086 10.3037C6.48506 10.3352 6.17446 10.3577 5.85119 10.3622ZM13.0899 11.622C12.9505 11.739 12.8787 11.9213 12.8956 12.108L12.9632 12.8751L11.2306 12.4454C11.1609 12.4229 11.089 12.4139 11.0172 12.4139C8.82191 12.3667 7.65982 11.3926 7.65982 9.6018C7.65982 8.05174 9.0987 6.78965 10.8672 6.78965C12.6357 6.78965 14.0703 8.05174 14.0703 9.6018C14.0703 10.369 13.7217 11.0866 13.0899 11.622ZM3.74887 5.88976C3.74887 6.06876 3.81565 6.24043 3.93452 6.367C4.0534 6.49357 4.21462 6.56468 4.38273 6.56468C4.55085 6.56468 4.71207 6.49357 4.83095 6.367C4.94982 6.24043 5.0166 6.06876 5.0166 5.88976C5.0166 5.71077 4.94982 5.5391 4.83095 5.41253C4.71207 5.28596 4.55085 5.21485 4.38273 5.21485C4.21462 5.21485 4.0534 5.28596 3.93452 5.41253C3.81565 5.5391 3.74887 5.71077 3.74887 5.88976ZM7.10836 5.95726C7.10836 6.13625 7.17514 6.30792 7.29402 6.43449C7.41289 6.56106 7.57411 6.63217 7.74223 6.63217C7.91034 6.63217 8.07157 6.56106 8.19044 6.43449C8.30931 6.30792 8.37609 6.13625 8.37609 5.95726C8.37609 5.77826 8.30931 5.60659 8.19044 5.48002C8.07157 5.35345 7.91034 5.28234 7.74223 5.28234C7.57411 5.28234 7.41289 5.35345 7.29402 5.48002C7.17514 5.60659 7.10836 5.77826 7.10836 5.95726ZM8.92544 9.12936C8.92544 9.27853 8.9811 9.42158 9.08016 9.52706C9.17922 9.63253 9.31357 9.69179 9.45367 9.69179C9.59376 9.69179 9.72812 9.63253 9.82718 9.52706C9.92624 9.42158 9.98189 9.27853 9.98189 9.12936C9.98189 8.98019 9.92624 8.83714 9.82718 8.73166C9.72812 8.62619 9.59376 8.56693 9.45367 8.56693C9.31357 8.56693 9.17922 8.62619 9.08016 8.73166C8.9811 8.83714 8.92544 8.98019 8.92544 9.12936ZM11.2919 9.12936C11.2919 9.27853 11.3475 9.42158 11.4466 9.52706C11.5457 9.63253 11.68 9.69179 11.8201 9.69179C11.9602 9.69179 12.0946 9.63253 12.1936 9.52706C12.2927 9.42158 12.3483 9.27853 12.3483 9.12936C12.3483 8.98019 12.2927 8.83714 12.1936 8.73166C12.0946 8.62619 11.9602 8.56693 11.8201 8.56693C11.68 8.56693 11.5457 8.62619 11.4466 8.73166C11.3475 8.83714 11.2919 8.98019 11.2919 9.12936Z" fill="#409EFF"/>
  186. </g>
  187. </svg>
  188. <span>复制到微信</span>
  189. </div>
  190. <!-- <li>
  191. <span @click="handleDownLoadImg" style="cursor: pointer;color:#409eff;margin-right:10px">下载</span>
  192. <span @click="handleCopyImg" style="cursor: pointer;color:#409eff;margin-right:10px">复制到微信</span>
  193. <span @click="handleCopyImg" style="cursor: pointer;color:#409eff">复制到Office</span>
  194. </li>
  195. <li style="min-width: auto;"><el-button v-permission="permissionBtn.semanticPermission.saPage_save"
  196. type="primary" @click="handleEdit('file',selectNode)">编辑</el-button></li> -->
  197. </div>
  198. </div>
  199. </div>
  200. <!-- 添加/编辑分类弹窗 -->
  201. <el-dialog
  202. :title="classifyForm.classify_id?'编辑分类':'添加分类'"
  203. :visible.sync="isModifyClassifyShow"
  204. :close-on-click-modal="false"
  205. :modal-append-to-body="false"
  206. @close="isModifyClassifyShow=false"
  207. width="589px"
  208. v-dialogDrag
  209. center
  210. >
  211. <div class="dialog-container">
  212. <el-form
  213. ref="formRef"
  214. label-position="left"
  215. hide-required-asterisk
  216. label-width="80px"
  217. :model="classifyForm"
  218. :rules="classifyFormRules"
  219. >
  220. <el-form-item label="分类名称" prop="classify_name">
  221. <el-input
  222. v-model="classifyForm.classify_name"
  223. style="width: 80%"
  224. placeholder="请输入分类名称"
  225. />
  226. </el-form-item>
  227. </el-form>
  228. </div>
  229. <div class="foot-container">
  230. <el-button @click="isModifyClassifyShow=false">取 消</el-button>
  231. <el-button type="primary" @click="modifyClassify">确定</el-button>
  232. </div>
  233. </el-dialog>
  234. </div>
  235. </template>
  236. <script>
  237. /* js */
  238. import catalogMixin from "./mixins/catalogMixin";
  239. import { formatArr } from './utils/index';
  240. /* components */
  241. //import draggable from 'vuedraggable';
  242. /* api */
  243. import {semanticInterface} from '@/api/modules/semanticsApi.js';
  244. export default {
  245. mixins:[catalogMixin],
  246. components:{/*draggable*/},
  247. data() {
  248. return {
  249. classifyForm:{},//分类信息
  250. classifyFormRules:{
  251. classify_name:[{ required: true, message: "分类名称不能为空"}],
  252. },//分类校验规则
  253. isModifyClassifyShow:false,//控制分类显示弹窗
  254. semanticInfo:{},//语义分析详情
  255. };
  256. },
  257. watch:{
  258. searchTitle(newVal){
  259. const {SaCompareId,ClassifyId} = newVal
  260. if(SaCompareId&&ClassifyId){
  261. this.handleNodeExpand({nodeKeyId:ClassifyId+''})
  262. this.nodeChange({SaCompareId,nodeKeyId:`children_${SaCompareId}`},{level:2})
  263. this.searchOptions = []
  264. }
  265. }
  266. },
  267. methods: {
  268. // 下载图片
  269. handleDownLoadImg(){
  270. let img=new Image()
  271. img.setAttribute('crossOrigin', 'anonymous');
  272. img.src=this.semanticInfo.ResultImg
  273. img.onload=()=>{
  274. let canvas = document.createElement("canvas");
  275. canvas.width = img.width;
  276. canvas.height = img.height;
  277. let context = canvas.getContext('2d');
  278. context.drawImage(img, 0, 0, img.width, img.height);
  279. let dataURL = canvas.toDataURL("image/png", 1);
  280. const a=document.createElement('a')
  281. a.setAttribute("download",this.semanticInfo.Title)
  282. a.style.display = "none"
  283. a.href=dataURL
  284. document.body.appendChild(a);
  285. a.click()
  286. }
  287. },
  288. //复制图片
  289. handleCopyImg(){
  290. let img=new Image()
  291. img.setAttribute('crossOrigin', 'anonymous');
  292. img.src=this.semanticInfo.ResultImg
  293. img.onload=()=>{
  294. let canvas = document.createElement("canvas");
  295. canvas.width = img.width;
  296. canvas.height = img.height;
  297. let context = canvas.getContext('2d');
  298. context.drawImage(img, 0, 0, img.width, img.height);
  299. if(window.ClipboardItem) {
  300. canvas.toBlob(async (blob) => {
  301. const data = [new ClipboardItem({ [blob.type]: blob })];
  302. await navigator.clipboard.write(data).then(
  303. () => {
  304. this.$message.success('复制成功!')
  305. },
  306. () => {
  307. this.$message.warning('复制失败,稍后再试')
  308. }
  309. );
  310. });
  311. }else {
  312. this.$message.warning('浏览器暂不支持')
  313. }
  314. }
  315. },
  316. //搜索语义分析
  317. searchHandle(keyword){
  318. semanticInterface.getSemanticList({
  319. PageSize:1000,
  320. CurrentIndex:1,
  321. Keyword:keyword
  322. }).then(res=>{
  323. if(res.Ret!==200) return
  324. this.searchOptions = res.Data.List||[]
  325. })
  326. },
  327. //获取分类列表
  328. async getListData(){
  329. await semanticInterface.getClassifyList().then(res=>{
  330. if(res.Ret!==200) return
  331. this.listData = formatArr(res.Data||[],'SaCompareClassifyId','SaCompareId')
  332. })
  333. },
  334. //获取语义分析详情
  335. getDetail(data){
  336. //不用请求接口,展示信息和图片即可
  337. //console.log('selectNode',this.selectNode)
  338. this.semanticInfo = _.cloneDeep(this.selectNode)
  339. },
  340. //新增/编辑分类
  341. async modifyClassify(){
  342. let res = null
  343. let flag = false
  344. const {classify_id,classify_name} = this.classifyForm
  345. this.$refs.formRef.validate((valid) => {
  346. flag = valid
  347. })
  348. if(!flag) return
  349. if(classify_id){
  350. res = await semanticInterface.editClassify({
  351. SaCompareClassifyId:Number(classify_id),
  352. ClassifyName:classify_name,
  353. })
  354. }else{
  355. res = await semanticInterface.addNewClassify({
  356. ClassifyName:classify_name,
  357. })
  358. }
  359. if(res.Ret!==200) return
  360. this.$message.success(`${classify_id?'编辑':'新增'}成功`)
  361. await this.getListData()
  362. if(classify_id){
  363. const catalog = this.listData.find(item=>{return item.nodeKeyId===classify_id})
  364. catalog&&this.nodeChange(catalog,{level:1})
  365. }
  366. this.clearForm()
  367. },
  368. //删除分类
  369. async deleteClassify(data){
  370. await semanticInterface.deleteClassify({
  371. SaCompareClassifyId:Number(data.SaCompareClassifyId)
  372. }).then(res=>{
  373. if(res.Ret!==200) return
  374. this.$message.success('删除成功')
  375. this.clearForm()
  376. })
  377. },
  378. //删除语义分析
  379. async deleteDocument(data){
  380. await semanticInterface.deleteSemantic({
  381. SaCompareId:Number(data.SaCompareId)
  382. }).then(async res=>{
  383. if(res.Ret!==200) return
  384. this.$message.success('删除成功')
  385. this.chooseDataClassify(data)
  386. })
  387. },
  388. //切换页面
  389. toPage(pageName,params){
  390. const routerPathMap = {
  391. 'addFile':'/addSemantics',
  392. 'editFile':'/editSemantics',
  393. 'tag':'/tagPage'
  394. }
  395. /* this.$router.push({
  396. path:routerPathMap[pageName],
  397. query:params||{}
  398. }) */
  399. //新增一页打开
  400. let {href} = this.$router.resolve({
  401. path:routerPathMap[pageName],
  402. query:params||{}
  403. })
  404. window.open(href,'_blank')
  405. },
  406. //移动语义分析
  407. moveCompare(moveParams){
  408. semanticInterface.moveCompare(moveParams).then(async res=>{
  409. if(res.Ret!==200) return
  410. await this.getListData()
  411. this.handleNodeExpand({
  412. nodeKeyId: moveParams.SaCompareClassifyId
  413. })
  414. this.nodeChange({
  415. SaCompareId:moveParams.SaCompareId,
  416. nodeKeyId:`children_${moveParams.SaCompareId}`},
  417. {
  418. level:2
  419. })
  420. })
  421. },
  422. //根据层级判断是否展示编辑/删除按钮
  423. isShowTreeBtn(level,btnType){
  424. return level===1
  425. ?this.permissionBtn.isShowBtn('semanticPermission',`saPage_classifyOpt_${btnType}`)
  426. :this.permissionBtn.isShowBtn('semanticPermission',`saPage_${btnType==='edit'?'save':btnType}`)
  427. }
  428. },
  429. };
  430. </script>
  431. <style lang="scss">
  432. @import "./css/catalogTree.scss";
  433. </style>
  434. <style scoped lang="scss">
  435. @import "./css/basePage.scss";
  436. @import "./css/catalogPage.scss";
  437. .document-file-page-wrap{
  438. display: flex;
  439. width: 100%;
  440. .detail-file{
  441. display: flex;
  442. flex-direction: row;
  443. border: 1px solid #DCDFE6;
  444. border-radius: 4px;
  445. overflow: hidden;
  446. .file-info{
  447. padding:20px 30px;
  448. flex:1;
  449. display: flex;
  450. flex-direction: column;
  451. height: 100%;
  452. ul{
  453. flex: none;
  454. margin-right: 0;
  455. justify-content: space-between;
  456. align-items: center;
  457. li{
  458. &:last-child{
  459. margin-right: 0;
  460. text-align: right;
  461. }
  462. }
  463. }
  464. .pic-wrap{
  465. flex: 1;
  466. margin-top:20px;
  467. width:100%;
  468. color: #999999;
  469. position: relative;
  470. overflow: hidden;
  471. .pic{
  472. width:100%;
  473. height: 100%;
  474. }
  475. }
  476. }
  477. .opt-box{
  478. padding: 20px 30px;
  479. height: 100%;
  480. flex-shrink: 0;
  481. width: 200px;
  482. border-left: 1px solid #DCDFE6;
  483. background-color: #fff;
  484. .opt-item{
  485. display: flex;
  486. align-items: center;
  487. color: #409EFF;
  488. margin-bottom: 20px;
  489. cursor: pointer;
  490. svg{
  491. width: 16px;
  492. height: 16px;
  493. margin-right: 5px;
  494. }
  495. }
  496. }
  497. }
  498. .dialog-container{
  499. padding: 0 35px;
  500. }
  501. }
  502. </style>