preview.vue 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183
  1. <template>
  2. <div :class="{kaifainDetailMobile: mobile, kaifainDetail: !mobile}">
  3. <div class="topArea" :style="{backgroundImage: 'url(' + detail.bg_image + ')' }">
  4. <div class="topContent" :class="{noneMobileAPP: true}">
  5. <div class="title">{{detail.title}}</div>
  6. <div class="desc">{{detail.description}}</div>
  7. <div class="btn" @click="isShowToast=true" v-if="!mobile">
  8. <p>咨询了解</p>
  9. </div>
  10. <div class="companyInfo">
  11. <div class="left">
  12. <div class="userImage">
  13. <img :src="detail.company_info && detail.company_info.logo" alt />
  14. </div>
  15. <p
  16. class="cname"
  17. :class="{status: detail.company_info && Number(detail.company_info.company_verify) === 2}"
  18. >{{detail.company_info && detail.company_info.name}}</p>
  19. </div>
  20. <div class="right">
  21. <div class="icon"></div>
  22. </div>
  23. </div>
  24. </div>
  25. <div class="bgChange" @click="isShowToastChange=true" v-if="isSelf"></div>
  26. </div>
  27. <div class="contentArea">
  28. <div class="bannerSelect">
  29. <div class="cell selected">方案首页</div>
  30. <a class="cell" href="#">文章({{detail.jishuin && detail.jishuin.topics_count || 0}})</a>
  31. <a class="cell" href="#">视频({{detail.jishuin && detail.jishuin.videos_count || 0}})</a>
  32. </div>
  33. <div class="introArea">
  34. <div class="title" v-if="!mobile">
  35. <p class="word">方案介绍</p>
  36. <p class="line"></p>
  37. </div>
  38. <div class="introContent ql-editor" v-html="detail.detail" style="padding-left: 0;"></div>
  39. </div>
  40. <div class="caseListArea" v-if="haveCase">
  41. <div class="title">
  42. <p class="word">成功案例</p>
  43. <p class="line"></p>
  44. </div>
  45. <div class="list">
  46. <nuxt-link
  47. class="cell"
  48. v-for="item in detail.successful_case"
  49. :key="item.id"
  50. :to="`${kaifainUrl}/d/${item.hash_id}`"
  51. target="_blank"
  52. :title="item.name"
  53. >
  54. <div class="left">
  55. <img :src="item.logo" alt />
  56. </div>
  57. <div class="right">
  58. <div class="top">
  59. <div class="bTitle" v-if="!mobile">{{item.title}}</div>
  60. <div class="bStitle">【{{detail.title}}】帮助【{{item.title}}】提供解决方案</div>
  61. </div>
  62. <div class="bottom" @click="openPDF(item)" v-if="!mobile">
  63. <div class="icon" />
  64. <div class="word">{{item.title}}.pdf</div>
  65. </div>
  66. </div>
  67. </nuxt-link>
  68. </div>
  69. </div>
  70. </div>
  71. <div class="mobileBottomArea" v-if="mobile">
  72. <div class="mobileBottomBtn" @click="isShowToast=true">
  73. <p>咨询了解</p>
  74. </div>
  75. </div>
  76. <ConnectUs
  77. :source="'开发屋详情'"
  78. :isShowToast="isShowToast"
  79. @close="isShowToast=false"
  80. :sourceId="tid"
  81. ></ConnectUs>
  82. <KaifainFooter style="margin-top: 30px;" :data="footer" />
  83. </div>
  84. </template>
  85. <script>
  86. import "quill/dist/quill.core.css";
  87. import "quill/dist/quill.snow.css";
  88. import ConnectUs from "@/components/common/connectUs";
  89. import DealSeoFooter from "@/components/kaifain/dealSeoFooter";
  90. import KaifainFooter from "@/components/SeoFooter";
  91. export default {
  92. layout: "opacity_header_kf_tmp",
  93. components: { ConnectUs, KaifainFooter },
  94. head() {
  95. return {
  96. title: "开发屋-提供定制化SaaS、PasS、IaaS等各大行业技术开发解决方案",
  97. meta: [
  98. {
  99. name: "keywords",
  100. content: "定制化Saas、PasS、API、行业技术解决方案",
  101. },
  102. {
  103. name: "descrption",
  104. content:
  105. "开发屋为企业提供行业内领先的技术解决方案,包括行业定制化SaaS、PasS、API数据接口服务以及技术组织,保障企业在降低人力开发成本的同时,得到优质的项目开发实力。",
  106. },
  107. {
  108. name: "h1",
  109. content: "开发屋",
  110. },
  111. ],
  112. };
  113. },
  114. async asyncData({ ...params }) {
  115. try {
  116. params.store.commit("updateNoneCommonFooter", true);
  117. } catch (e) {
  118. console.log("updateNoneCommonFooter", e);
  119. }
  120. let dealSeoFooterObj = new DealSeoFooter(params);
  121. let footer = await dealSeoFooterObj.dealData();
  122. let domainConfig = params.store.state.domainConfig;
  123. return {
  124. ...domainConfig,
  125. ...footer,
  126. mobile: params.app.$deviceType.isMobile(),
  127. };
  128. },
  129. data() {
  130. return {
  131. detail: {},
  132. tid: 0,
  133. isShowToast: false,
  134. jishuBaseUrl: "",
  135. kaifainUrl: ""
  136. };
  137. },
  138. created() {
  139. const {kaifainUrl, jishuBaseUrl} = this.$store.state.domainConfig;
  140. this.kaifainUrl = kaifainUrl
  141. this.jishuBaseUrl = jishuBaseUrl
  142. },
  143. created() {
  144. this.tid = this.$route.params.tid || 0;
  145. this.getDetail();
  146. },
  147. mounted() {
  148. window.οnbefοreunlοad = () => {
  149. localStorage.removeItem("kaifainPreviewData");
  150. };
  151. },
  152. computed: {
  153. haveCase() {
  154. const { successful_case = [] } = this.detail;
  155. return successful_case.length > 0;
  156. },
  157. },
  158. methods: {
  159. getDetail() {
  160. try {
  161. let data = localStorage.getItem("kaifainPreviewData");
  162. data = JSON.parse(data);
  163. this.detail = data;
  164. } catch (e) {
  165. this.$message.error("解析预览数据失败,请重新点击预览!");
  166. }
  167. },
  168. openPDF(item) {
  169. const { file } = item;
  170. window.open(file, "pdf" + Math.random());
  171. },
  172. },
  173. };
  174. </script>
  175. <style scope lang="scss">
  176. @import "../../assets/css/kaifain/detail.scss";
  177. </style>