App.vue 6.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291
  1. <template>
  2. <div class="app-container">
  3. <div class="header">
  4. <div class="logo">
  5. <img src="/gw-logo.png" alt="Logo" style="height: 40px;" />
  6. <!--<span>网讯创智</span>-->
  7. </div>
  8. <div class="nav">
  9. <router-link to="/">首页</router-link>
  10. <router-link to="/products">产品</router-link>
  11. <router-link to="/solutions">解决方案</router-link>
  12. <router-link to="/education">产教融合</router-link>
  13. <router-link to="/service">产业服务</router-link>
  14. <router-link to="/news">新闻动态</router-link>
  15. <router-link to="/about">关于我们</router-link>
  16. </div>
  17. </div>
  18. <div class="content">
  19. <router-view />
  20. </div>
  21. <div class="footer">
  22. <div class="footer-content">
  23. <div class="footer-logo">
  24. <img src="/bottom-logo.png" alt="Logo" />
  25. <div class="beian-row">
  26. <a href="https://beian.mps.gov.cn/#/query/webSearch?code=51019002008384" rel="noreferrer" target="_blank" class="beian-link">
  27. <img src="/beianicon.png" alt="公网安备图标" class="beian-icon-small" />
  28. <span>川公网安备51019002008384号</span>
  29. </a>
  30. <a href="http://beian.miit.gov.cn/" target="_blank" rel="noopener noreferrer" class="beian-link">
  31. <span>蜀ICP备2025168675号-1</span>
  32. </a>
  33. </div>
  34. </div>
  35. <div class="footer-links">
  36. <div class="link-group">
  37. <h4>探索网讯创智</h4>
  38. <router-link to="/about">公司介绍</router-link>
  39. <router-link to="/about">公司治理</router-link>
  40. <router-link to="/about">企业文化</router-link>
  41. </div>
  42. <div class="link-group">
  43. <h4>关于我们</h4>
  44. <router-link to="/about">关于我们</router-link>
  45. <router-link to="/news">新闻动态</router-link>
  46. <a href="#">加入我们</a>
  47. </div>
  48. <div class="link-group">
  49. <h4>联系我们</h4>
  50. <p>{{ companyInfo.phone || '123-456-7890' }}</p>
  51. <p>{{ companyInfo.email || 'contact@example.com' }}</p>
  52. </div>
  53. </div>
  54. <div class="footer-qrcode">
  55. <img :src="getImageUrl(companyInfo.qrcode_url) || ''" alt="QR Code" v-if="companyInfo.qrcode_url" />
  56. <p>关注公众号</p>
  57. </div>
  58. </div>
  59. <div class="copyright">
  60. <p>&copy; 2026 网讯创智 版权所有</p>
  61. </div>
  62. </div>
  63. </div>
  64. </template>
  65. <script setup>
  66. import { ref, onMounted } from 'vue'
  67. import api from './api'
  68. const companyInfo = ref({})
  69. const getImageUrl = (url) => {
  70. if (!url) return ''
  71. if (url.startsWith('http')) return url
  72. return `${import.meta.env.VITE_IMG_BASE_URL}${url}`
  73. }
  74. onMounted(async () => {
  75. try {
  76. const res = await api.get('/company-info')
  77. if (res.data && res.data.id) {
  78. companyInfo.value = res.data
  79. }
  80. } catch (error) {
  81. console.error(error)
  82. }
  83. })
  84. </script>
  85. <style lang="scss">
  86. body {
  87. margin: 0;
  88. font-family: 'Helvetica Neue', Helvetica, 'PingFang SC', 'Hiragino Sans GB', 'Microsoft YaHei', '微软雅黑', Arial, sans-serif;
  89. }
  90. .app-container {
  91. display: flex;
  92. flex-direction: column;
  93. min-height: 100vh;
  94. }
  95. .header {
  96. display: flex;
  97. justify-content: space-between;
  98. align-items: center;
  99. padding: 0 50px;
  100. height: 80px;
  101. background-color: #fff;
  102. box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1);
  103. position: sticky;
  104. top: 0;
  105. z-index: 1000;
  106. .logo {
  107. display: flex;
  108. align-items: center;
  109. font-size: 24px;
  110. font-weight: bold;
  111. color: #409eff; /* Adjusted color */
  112. img {
  113. margin-right: 10px;
  114. }
  115. }
  116. .nav {
  117. display: flex;
  118. gap: 30px;
  119. a {
  120. text-decoration: none;
  121. color: #333;
  122. font-size: 16px;
  123. font-weight: 500;
  124. &.router-link-active {
  125. color: #409eff;
  126. font-weight: bold;
  127. }
  128. &:hover {
  129. color: #409eff;
  130. }
  131. }
  132. }
  133. }
  134. .content {
  135. flex: 1;
  136. }
  137. .footer {
  138. background-color: #1a1a2e;
  139. color: #fff;
  140. padding: 50px 0 30px;
  141. .footer-content {
  142. max-width: 1200px;
  143. margin: 0 auto;
  144. display: flex;
  145. justify-content: space-between;
  146. align-items: flex-start;
  147. padding-bottom: 30px;
  148. border-bottom: 1px solid rgba(255, 255, 255, 0.1);
  149. .footer-logo {
  150. display: flex;
  151. flex-direction: column;
  152. align-items: flex-start;
  153. min-width: 200px;
  154. img {
  155. height: 50px;
  156. margin-bottom: 20px;
  157. margin-top: 20px;
  158. }
  159. .beian-row {
  160. display: flex;
  161. align-items: center;
  162. gap: 15px;
  163. font-size: 12px;
  164. color: rgba(255, 255, 255, 0.6);
  165. margin-top: 0px;
  166. .beian-link {
  167. display: inline-flex;
  168. align-items: center;
  169. color: rgba(255, 255, 255, 0.6);
  170. text-decoration: none;
  171. line-height: 1;
  172. &:hover {
  173. color: #409eff;
  174. }
  175. span {
  176. line-height: 1;
  177. margin-left: 2px;
  178. }
  179. .beian-icon-small {
  180. width: 14px;
  181. height: 14px;
  182. margin-right: 4px;
  183. margin-top: 16px;
  184. flex-shrink: 0;
  185. }
  186. }
  187. }
  188. }
  189. .footer-links {
  190. display: flex;
  191. gap: 60px;
  192. flex: 1;
  193. justify-content: center;
  194. .link-group {
  195. h4 {
  196. font-size: 14px;
  197. margin-bottom: 15px;
  198. color: #fff;
  199. font-weight: 600;
  200. }
  201. a, p {
  202. display: block;
  203. color: rgba(255, 255, 255, 0.7);
  204. text-decoration: none;
  205. margin-bottom: 8px;
  206. font-size: 13px;
  207. line-height: 1.6;
  208. &:hover {
  209. color: #409eff;
  210. }
  211. }
  212. }
  213. }
  214. .footer-qrcode {
  215. text-align: center;
  216. img {
  217. width: 80px;
  218. height: 80px;
  219. background: #fff;
  220. padding: 5px;
  221. border-radius: 4px;
  222. }
  223. p {
  224. margin-top: 8px;
  225. color: rgba(255, 255, 255, 0.7);
  226. font-size: 12px;
  227. }
  228. }
  229. }
  230. .copyright {
  231. text-align: center;
  232. padding-top: 20px;
  233. color: rgba(255, 255, 255, 0.5);
  234. font-size: 12px;
  235. .beian-info {
  236. display: flex;
  237. justify-content: center;
  238. align-items: center;
  239. gap: 20px;
  240. margin-top: 10px;
  241. a {
  242. display: flex;
  243. align-items: center;
  244. text-decoration: none;
  245. color: rgba(255, 255, 255, 0.5);
  246. transition: color 0.3s;
  247. &:hover {
  248. color: #409eff;
  249. }
  250. .beian-icon {
  251. width: 16px;
  252. height: 16px;
  253. margin-right: 5px;
  254. }
  255. }
  256. }
  257. }
  258. }
  259. </style>