Index.vue 8.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293
  1. <template>
  2. <div class="hello">
  3. <Header> </Header>
  4. <el-container>
  5. <el-aside class="el-aside" id="left-side">
  6. <LeftMenu :get_page_content="get_page_content" :item_info="item_info" :search_item="search_item" v-if="item_info" ></LeftMenu>
  7. </el-aside>
  8. <el-container class="right-side" id="right-side">
  9. <el-header >
  10. <div class="header-left">
  11. <i class="el-icon-rank header-left-btn" id="header-left-btn" @click="switch_menu"></i>
  12. </div>
  13. <div class="header-right">
  14. <el-button type="text" @click="goback">{{$t('goback')}}</el-button>
  15. <!-- 登录的事情下 -->
  16. <el-dropdown @command="dropdown_callback" v-if="item_info.is_login">
  17. <span class="el-dropdown-link">
  18. {{$t('item')}}<i class="el-icon-arrow-down el-icon--right"></i>
  19. </span>
  20. <el-dropdown-menu slot="dropdown">
  21. <el-dropdown-item :command="share_item">{{$t('share')}}</el-dropdown-item>
  22. <router-link :to="'/item/export/'+item_info.item_id" v-if="item_info.ItemPermn"><el-dropdown-item>{{$t('export')}}</el-dropdown-item></router-link>
  23. <router-link :to="'/item/setting/'+item_info.item_id" v-if="item_info.ItemCreator"><el-dropdown-item>{{$t('item_setting')}}</el-dropdown-item></router-link>
  24. <!--<router-link to="/item/index"><el-dropdown-item >{{$t('goback')}}</el-dropdown-item></router-link>-->
  25. </el-dropdown-menu>
  26. </el-dropdown>
  27. <!-- 非登录的情况下 -->
  28. <div class="not_login" v-if="!item_info.is_login">
  29. <router-link to="/user/login">{{$t('login_or_register')}}</router-link>
  30. &nbsp;&nbsp;&nbsp;&nbsp;
  31. <!--<a href="https://www.showdoc.cc/help" target="_blank">{{$t('about_showdoc')}}</a>-->
  32. </div>
  33. </div>
  34. </el-header>
  35. <el-main class="page_content_main" id="page_content_main">
  36. <div class="doc_logo_bg"></div>
  37. <div class="doc-title-box" v-if="page_id">
  38. <span id="doc-title-span" class="dn"></span>
  39. <h2 id="doc-title">{{page_title}}</h2>
  40. </div>
  41. <Editormd v-bind:content="content" type="html" v-if="page_id" ></Editormd>
  42. </el-main>
  43. </el-container>
  44. <div class="page-bar" v-show="show_page_bar && item_info.ItemPermn && item_info.is_archived < 1 " >
  45. <PageBar v-if="page_id" :page_id="page_id" :item_id='item_info.item_id' :page_info="page_info"></PageBar>
  46. </div>
  47. </el-container>
  48. <BackToTop > </BackToTop>
  49. <el-dialog
  50. title="分享项目"
  51. :visible.sync="dialogVisible"
  52. width="400px"
  53. :modal="false"
  54. class="text-center"
  55. >
  56. <p>项目地址:<code >{{share_item_link}}</code></p>
  57. <p style="border-bottom: 1px solid #eee;"><img id="" style="width:114px;height:114px;" :src="qr_item_link"> </p>
  58. <span slot="footer" class="dialog-footer">
  59. <el-button type="primary" @click="dialogVisible = false">{{$t('confirm')}}</el-button>
  60. </span>
  61. </el-dialog>
  62. <Footer> </Footer>
  63. </div>
  64. </template>
  65. <script>
  66. import Editormd from '@/components/common/Editormd'
  67. import BackToTop from '@/components/common/BackToTop'
  68. import LeftMenu from '@/components/item/show/show_regular_item/LeftMenu'
  69. import PageBar from '@/components/item/show/show_regular_item/PageBar'
  70. export default {
  71. props:{
  72. item_info:'',
  73. search_item:''
  74. },
  75. data() {
  76. return {
  77. content:"###正在加载...",
  78. page_id:'',
  79. page_title:'',
  80. dialogVisible:false,
  81. share_item_link:'',
  82. qr_item_link:'',
  83. page_info:'',
  84. show_page_bar:true
  85. }
  86. },
  87. components:{
  88. Editormd,
  89. LeftMenu,
  90. PageBar,
  91. BackToTop
  92. },
  93. methods:{
  94. //获取页面内容
  95. get_page_content(page_id){
  96. if (page_id <= 0 ) {return;};
  97. //根据屏幕宽度进行响应(应对移动设备的访问)
  98. if( this.isMobile() || window.screen.width< 1000){
  99. this.$nextTick(() => {
  100. this.AdaptToMobile();
  101. });
  102. }
  103. var that = this ;
  104. var url = DocConfig.server+'/api/page/info';
  105. //var loading = that.$loading({target:".page_content_main",fullscreen:false});
  106. var params = new URLSearchParams();
  107. params.append('page_id', page_id);
  108. that.axios.post(url, params)
  109. .then(function (response) {
  110. //loading.close();
  111. if (response.data.error_code === 0 ) {
  112. that.content = response.data.data.page_content ;
  113. that.page_title = response.data.data.page_title ;
  114. that.page_info = response.data.data ;
  115. //切换变量让它重新加载、渲染子组件
  116. that.page_id = 0 ;
  117. that.$nextTick(() => {
  118. that.page_id = page_id ;
  119. });
  120. document.title = response.data.data.page_title + ' - ' + response.data.data.item_name + ' - 文档管理分享平台 | ZhuLiang\'s Shared';
  121. }else{
  122. //that.$alert(response.data.error_message);
  123. }
  124. });
  125. },
  126. dropdown_callback(data){
  127. if (data) {
  128. data();
  129. };
  130. },
  131. share_item(){
  132. this.share_item_link = this.getRootPath()+"#/"+this.item_info.item_id ;
  133. this.qr_item_link = DocConfig.server +'/api/common/qrcode&size=3&url='+encodeURIComponent(this.share_item_link);
  134. this.dialogVisible = true;
  135. },
  136. //根据屏幕宽度进行响应(应对移动设备的访问)
  137. AdaptToMobile(){
  138. this.hide_menu();
  139. this.show_page_bar = false;
  140. },
  141. show_menu(){
  142. var element = document.getElementById('left-side') ;
  143. element.style.display = 'block' ;
  144. var element = document.getElementById('right-side') ;
  145. element.style.marginLeft = '300px';
  146. var element = document.getElementById('page_content_main') ;
  147. element.style.width = '800px' ;
  148. },
  149. hide_menu(){
  150. var element = document.getElementById('left-side') ;
  151. element.style.display = 'none';
  152. var element = document.getElementById('right-side') ;
  153. element.style.marginLeft = '0px';
  154. var element = document.getElementById('page_content_main') ;
  155. element.style.width = '95%' ;
  156. },
  157. switch_menu(){
  158. var element = document.getElementById('left-side') ;
  159. if (element.style.display == 'none') {
  160. this.show_menu();
  161. }else{
  162. this.hide_menu();
  163. }
  164. },
  165. goback(){
  166. this.$router.push({path:'/item/index'});
  167. }
  168. },
  169. mounted () {
  170. //根据屏幕宽度进行响应(应对移动设备的访问)
  171. if( this.isMobile() || window.screen.width< 1000){
  172. this.$nextTick(() => {
  173. this.AdaptToMobile();
  174. });
  175. }
  176. }
  177. };
  178. </script>
  179. <!-- Add "scoped" attribute to limit CSS to this component only -->
  180. <style scoped>
  181. .header-right{
  182. color: #333;
  183. line-height: 40px;
  184. text-align: right;
  185. font-size: 12px;
  186. /*border: 1px solid #eee;*/
  187. }
  188. .header-right .el-dropdown-link{
  189. margin-right: 20px;
  190. }
  191. .el-aside {
  192. color: #333;
  193. position:fixed;
  194. height: calc(100% - 20px);
  195. background-color: rgb(250, 250, 250);
  196. border-right: solid 1px #e6e6e6;
  197. }
  198. .page-bar{
  199. color: #333;
  200. position:fixed;
  201. top: 100px;
  202. right: 10px;
  203. width: 100px;
  204. }
  205. .page_content_main{
  206. width:800px;
  207. margin: 0 auto ;
  208. height: 50%;
  209. position: relative;
  210. }
  211. .right-side{
  212. margin-left:300px;
  213. }
  214. .doc-title-box{
  215. height: auto;
  216. margin: 30px 30px 10px 30px;
  217. width: auto;
  218. border-bottom: 1px solid #ebebeb;
  219. padding-bottom: 10px;
  220. }
  221. .editormd-html-preview{
  222. width: 95%;
  223. font-size: 16px;
  224. }
  225. .header-left{
  226. float: left;
  227. }
  228. .header-left-btn{
  229. font-size: 20px;
  230. margin-top: 5px;
  231. margin-left: -15px;
  232. cursor: pointer;
  233. }
  234. .not_login>a{
  235. font-size: 16px;
  236. }
  237. .doc_logo_bg{
  238. position: fixed;
  239. width: 400px;
  240. height:400px;
  241. left: calc(50% - 100px);
  242. top: calc(50% - 200px);
  243. background: url("../../../../../static/logo/logo_large.png") no-repeat center;
  244. background-size: cover;
  245. -webkit-filter: blur(5px);
  246. -moz-filter: blur(5px);
  247. -o-filter: blur(5px);
  248. -ms-filter: blur(5px);
  249. filter: blur(5px);
  250. opacity: 0.05;
  251. }
  252. </style>