index.vue 9.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352
  1. <template>
  2. <div class="elevenHatch">
  3. <el-row>
  4. <el-col :span="24" class="animate__animated animate__backInRight" v-loading="loading">
  5. <div class="head">
  6. <div class="head_1">孵化器管理驾驶舱</div>
  7. <div class="head_2" id="showTime">{{ formattedTime }}</div>
  8. </div>
  9. <div class="center">
  10. <el-row :gutter="20">
  11. <el-col :span="6">
  12. <div class="center_1">
  13. <div class="boxall">
  14. <div class="alltitle">孵化进度</div>
  15. <echarts3></echarts3>
  16. </div>
  17. <div class="boxall">
  18. <div class="alltitle">孵化项目列表</div>
  19. <div class="wraptit">
  20. <span>项目名称</span><span>金额</span><span>风险概率</span><span>时间</span>
  21. </div>
  22. <div class="one">
  23. <vue3-seamless-scroll
  24. :list="oneList"
  25. :hover="true"
  26. :step="0.2"
  27. :wheel="true"
  28. :isWatch="true"
  29. class="scroll"
  30. >
  31. <div class="wrap" v-for="(item, index) in oneList" :key="index">
  32. <div class="other">{{ item.name }}</div>
  33. <div class="other">{{ item.money }}</div>
  34. <div class="other">{{ item.number }}</div>
  35. <div class="other">{{ item.time }}</div>
  36. </div>
  37. </vue3-seamless-scroll>
  38. </div>
  39. </div>
  40. <div class="boxall">
  41. <div class="alltitle">行业领域占比情况</div>
  42. <echarts1></echarts1>
  43. </div>
  44. </div>
  45. </el-col>
  46. <el-col :span="12">
  47. <div class="center_1">
  48. <div class="boxall" style="height: 170px">
  49. <div class="clearfix navboxall" style="height: 100%">
  50. <div class="pulll_left num">
  51. <div class="numbt">总体情况<span>(单位:家)</span></div>
  52. <div class="numtxt">190</div>
  53. </div>
  54. <div class="pulll_right zhibiao">
  55. <div class="zb1">
  56. <span>工研院运营</span>
  57. <echarts5></echarts5>
  58. </div>
  59. <div class="zb2">
  60. <span>参股孵化器</span>
  61. <echarts6></echarts6>
  62. </div>
  63. <div class="zb3">
  64. <span>合作孵化器</span>
  65. <echarts7></echarts7>
  66. </div>
  67. </div>
  68. </div>
  69. </div>
  70. <div class="boxall">
  71. <div class="alltitle">年度项目完成对比</div>
  72. <echarts2></echarts2>
  73. </div>
  74. <div class="boxall">
  75. <div class="alltitle">投资收益对比</div>
  76. <echarts4></echarts4>
  77. </div>
  78. </div>
  79. </el-col>
  80. <el-col :span="6">
  81. <div class="center_1">
  82. <div class="boxall bottom">
  83. <div class="alltitle">视频监控</div>
  84. <div v-for="(item, index) in twoList" :key="index">
  85. <el-image class="image" :src="item.url" fit="fill" />
  86. </div>
  87. </div>
  88. </div>
  89. </el-col>
  90. </el-row>
  91. </div>
  92. </el-col>
  93. </el-row>
  94. </div>
  95. </template>
  96. <script setup>
  97. import echarts1 from './path/echarts1.vue'
  98. import echarts2 from './path/echarts2.vue'
  99. import echarts3 from './path/echarts3.vue'
  100. import echarts4 from './path/echarts4.vue'
  101. import echarts5 from './path/echarts5.vue'
  102. import echarts6 from './path/echarts6.vue'
  103. import echarts7 from './path/echarts7.vue'
  104. // 加载中
  105. const loading = ref(false)
  106. // 时间
  107. const formattedTime = ref('')
  108. const oneList = ref([
  109. { name: '鱿鱼卤制品的研究', money: '110万', number: '10%', time: '2023-4-22' },
  110. { name: '一种快速装置自净系统', money: '190万', number: '20%', time: '2023-6-15' },
  111. { name: '玻璃表面清洁技术', money: '90万', number: '33%', time: '2023-5-30' },
  112. { name: '网上信息安全处理', money: '180万', number: '14%', time: '2023-7-12' },
  113. { name: '视觉检测', money: '119万', number: '10%', time: '2023-5-14' },
  114. { name: '无纺布气味去除', money: '120万', number: '20%', time: '2023-6-15' },
  115. { name: '功能性色母开发', money: '160万', number: '10%', time: '2023-5-30' }
  116. ])
  117. import video_1 from '/images/video_1.jpg'
  118. import video_2 from '/images/video_2.jpg'
  119. import video_3 from '/images/video_3.jpg'
  120. import video_4 from '/images/video_4.jpg'
  121. const twoList = ref([{ url: video_1 }, { url: video_2 }, { url: video_3 }, { url: video_4 }])
  122. // 请求
  123. onMounted(async () => {
  124. loading.value = true
  125. await updateTime()
  126. loading.value = false
  127. })
  128. // 创建一个函数来格式化时间并更新状态
  129. const updateTime = () => {
  130. const now = new Date()
  131. const options = {
  132. year: 'numeric',
  133. month: '2-digit',
  134. day: '2-digit',
  135. hour: '2-digit',
  136. minute: '2-digit',
  137. second: '2-digit',
  138. hour12: false
  139. }
  140. formattedTime.value = now.toLocaleString('zh-CN', options)
  141. }
  142. const timer = setInterval(updateTime, 1000)
  143. onMounted(() => {
  144. timer // 开始计时器
  145. })
  146. onBeforeUnmount(() => {
  147. clearInterval(timer) // 组件卸载前清除计时器
  148. })
  149. </script>
  150. <style scoped lang="scss">
  151. .elevenHatch {
  152. width: 100%;
  153. position: relative;
  154. background: url(/images/bg.jpg);
  155. background-size: 100% 100%;
  156. padding: 0px;
  157. margin: 0px;
  158. color: #222;
  159. font-family: '微软雅黑';
  160. cursor: default; /* 将鼠标样式更改为箭头 */
  161. @font-face {
  162. font-family: electronicFont;
  163. src: url(./font/DS-DIGIT.TTF);
  164. }
  165. a:hover {
  166. color: #06c;
  167. text-decoration: none !important;
  168. }
  169. .head {
  170. position: relative;
  171. height: 70px;
  172. background: url(/images/head_bg.png) no-repeat center center;
  173. background-size: 100% 100%;
  174. .head_1 {
  175. color: #fff;
  176. text-align: center;
  177. font-size: 38px;
  178. line-height: 38px;
  179. margin: 20px 0;
  180. }
  181. .head_2 {
  182. position: absolute;
  183. right: 10px;
  184. top: 5px;
  185. line-height: 20px;
  186. color: rgba(255, 255, 255, 0.7);
  187. font-size: 20px;
  188. padding-right: 10px;
  189. font-family: electronicFont;
  190. }
  191. }
  192. .center {
  193. margin: 0 10px;
  194. .center_1 {
  195. .navboxall {
  196. height: calc(100% - 30px);
  197. }
  198. .boxall {
  199. padding: 15px;
  200. background: rgba(0, 0, 0, 0.2);
  201. position: relative;
  202. margin-bottom: 10px;
  203. z-index: 10;
  204. }
  205. .bottom {
  206. margin-bottom: 0;
  207. }
  208. .alltitle {
  209. font-size: $global-font-size-20;
  210. color: #fff;
  211. position: relative;
  212. padding-left: 12px;
  213. margin-bottom: 10px;
  214. }
  215. .alltitle:before {
  216. width: 5px;
  217. height: 20px;
  218. top: 2px;
  219. position: absolute;
  220. content: '';
  221. background: #49bcf7;
  222. border-radius: 20px;
  223. left: 0;
  224. }
  225. .image {
  226. width: 430px;
  227. height: 187px;
  228. }
  229. .wraptit span {
  230. display: inline-block;
  231. font-size: $global-font-size-18;
  232. color: rgba(255, 255, 255, 0.6);
  233. }
  234. .wraptit {
  235. text-align: center;
  236. border-bottom: 1px solid rgba(255, 255, 255, 0.2);
  237. padding: 0 0 10px 0;
  238. margin-bottom: 10px;
  239. }
  240. .wraptit span:nth-child(1) {
  241. width: 30%;
  242. }
  243. .wraptit span:nth-child(2) {
  244. width: 20%;
  245. }
  246. .wraptit span:nth-child(3) {
  247. width: 30%;
  248. }
  249. .wraptit span:nth-child(4) {
  250. width: 20%;
  251. }
  252. .clearfix {
  253. display: flex;
  254. align-items: center;
  255. }
  256. .num,
  257. .zhibiao {
  258. height: 100%;
  259. width: 50%;
  260. }
  261. .zb1,
  262. .zb2,
  263. .zb3 {
  264. float: left;
  265. width: 33.3333%;
  266. height: 100%;
  267. }
  268. #zb1,
  269. #zb2,
  270. #zb3 {
  271. height: calc(100% - 30px);
  272. }
  273. .zhibiao span {
  274. padding-top: 20px;
  275. display: block;
  276. text-align: center;
  277. color: #fff;
  278. font-size: $global-font-size-18;
  279. }
  280. .num {
  281. padding-right: 20px;
  282. }
  283. .numbt {
  284. font-size: $global-font-size-26;
  285. color: #fff;
  286. padding-top: 14px;
  287. }
  288. .numbt span {
  289. font-size: $global-font-size-20;
  290. padding-left: 10px;
  291. color: #fff;
  292. }
  293. .numtxt {
  294. color: #fef000;
  295. font-size: 40px;
  296. font-family: arial;
  297. border-top: 1px solid rgba(255, 255, 255, 0.1);
  298. border-bottom: 1px solid rgba(255, 255, 255, 0.1);
  299. padding: 10px 0;
  300. margin: 18px 0;
  301. font-weight: bold;
  302. letter-spacing: 2px;
  303. }
  304. .one {
  305. height: 72px;
  306. overflow: hidden;
  307. .scroll {
  308. width: 100%;
  309. .wrap {
  310. display: flex;
  311. justify-content: space-between;
  312. border: 1px solid rgba(25, 186, 139, 0.17);
  313. padding: 10px;
  314. margin: 0 0 10px 0;
  315. .other:first-child {
  316. width: 40%;
  317. }
  318. .other {
  319. width: 30%;
  320. color: rgba(255, 255, 255, 0.6);
  321. text-align: center;
  322. text-overflow: ellipsis;
  323. white-space: nowrap;
  324. overflow: hidden;
  325. font-size: 16px;
  326. }
  327. }
  328. }
  329. }
  330. }
  331. }
  332. }
  333. </style>