Index.vue 7.6 KB

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