one.vue 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570
  1. <template>
  2. <myMain>
  3. <div class="brainOne">
  4. <div class="menu_1" v-if="is_show">
  5. <div class="left">
  6. <div class="label" v-for="(item, index) in list" :key="index" @click="toView(item)">
  7. {{ item.label }}
  8. </div>
  9. </div>
  10. <div class="right" @click="is_show = false">
  11. <el-icon color="#595959"><ArrowLeftBold /></el-icon>
  12. </div>
  13. </div>
  14. <div class="menu_2" v-else @click="is_show = true">
  15. <el-icon color="#595959"><ArrowRightBold /></el-icon>
  16. </div>
  17. <div class="content">
  18. <div class="one">
  19. <span>产学研用协同创新数字化平台</span>
  20. </div>
  21. <div class="two">
  22. <div class="two_1">
  23. <div class="two_left">当前区域:</div>
  24. <div class="two_right">
  25. <el-cascader placeholder="请选择" v-model="form.area" :props="{ value: 'label', label: 'label' }" :teleported="false" :options="cityList" style="width: 14rem" />
  26. </div>
  27. </div>
  28. <div class="two_1">
  29. <div class="two_left">当前产业:</div>
  30. <div class="two_right">
  31. <el-select v-model="form.industry" clearable placeholder="请选择" :popper-append-to-body="false" style="width: 14rem" :teleported="false">
  32. <el-option v-for="(item, index) in industryList" :key="index" :label="item.label" :value="item.label" />
  33. </el-select>
  34. </div>
  35. </div>
  36. <div class="two_1">
  37. <div class="two_left">产业链:</div>
  38. <div class="two_right">
  39. <el-select v-model="form.chain" clearable placeholder="请选择" :popper-append-to-body="false" style="width: 14rem" :teleported="false">
  40. <el-option v-for="(item, index) in chainList" :key="index" :label="item.label" :value="item.label" />
  41. </el-select>
  42. </div>
  43. </div>
  44. </div>
  45. <div class="thr">
  46. <div class="thr_1">
  47. <BorderBox13 class="boxall boxall_1" title="产业链图谱">
  48. <div class="title center">
  49. <div class="titleRight">产业链图谱</div>
  50. </div>
  51. <div class="image1">
  52. <div style="height: 100%">
  53. <vue3-tree-org
  54. :data="list_3"
  55. center
  56. :toolBar="toolBar"
  57. :horizontal="horizontal"
  58. :collapsable="collapsable"
  59. :label-style="style"
  60. :only-one-node="onlyOneNode"
  61. :clone-node-drag="cloneNodeDrag"
  62. :before-drag-end="beforeDragEnd"
  63. @on-node-drag="nodeDragMove"
  64. @on-node-drag-end="nodeDragEnd"
  65. @on-contextmenu="onMenus"
  66. @on-expand="onExpand"
  67. @on-node-dblclick="onNodeDblclick"
  68. @on-node-click="onNodeClick"
  69. />
  70. </div>
  71. </div>
  72. </BorderBox13>
  73. </div>
  74. <div class="thr_2">
  75. <BorderBox13 class="boxall boxall_2" title="完整性">
  76. <div class="title center">
  77. <div class="titleRight">完整性</div>
  78. </div>
  79. <div class="round">
  80. <div class="round_1">
  81. <div class="round_left">
  82. <div class="title_1">国内有厂商环节</div>
  83. <div class="title_2">225</div>
  84. </div>
  85. <div class="round_center">
  86. <echarts1 :data="list_1"></echarts1>
  87. </div>
  88. <div class="round_right">占比:85.88%</div>
  89. </div>
  90. <div class="round_1">
  91. <div class="round_left">
  92. <div class="title_1">本地有厂商环节</div>
  93. <div class="title_3">176</div>
  94. </div>
  95. <div class="round_center">
  96. <echarts1 :data="list_2"></echarts1>
  97. </div>
  98. <div class="round_right">占比:63.74%</div>
  99. </div>
  100. </div>
  101. </BorderBox13>
  102. <BorderBox13 class="boxall boxall_3" title="安全性">
  103. <div class="title center">
  104. <div class="titleRight">安全性</div>
  105. </div>
  106. <echarts3></echarts3>
  107. </BorderBox13>
  108. <BorderBox13 class="boxall boxall_4" title="韧性">
  109. <div class="title">
  110. <div class="titleRight">韧性</div>
  111. <div class="titleLeft">更多</div>
  112. </div>
  113. <div class="list flex">
  114. <div class="list_5" v-for="(item, index) in list_5" :key="index">
  115. <div class="titleList">{{ item.name || '暂无' }}</div>
  116. <div class="num">{{ item.total || '暂无' }}</div>
  117. </div>
  118. </div>
  119. </BorderBox13>
  120. <BorderBox13 class="boxall boxall_5" title="稳定性">
  121. <div class="title">
  122. <div class="titleRight">稳定性</div>
  123. <div class="titleLeft">更多</div>
  124. </div>
  125. <echarts2></echarts2>
  126. </BorderBox13>
  127. <BorderBox13 class="boxall boxall_6" title="可靠性">
  128. <div class="title">
  129. <div class="titleRight">可靠性</div>
  130. <div class="titleLeft">更多</div>
  131. </div>
  132. <div class="list">
  133. <div class="list_4" v-for="(item, index) in list_4" :key="index">
  134. <BorderBox10 class="Box10">
  135. <div class="titleList">{{ item.name || '暂无' }}</div>
  136. <div class="num">{{ item.total1 || '暂无' }}</div>
  137. </BorderBox10>
  138. <BorderBox10 class="Box10">
  139. <div class="titleList">总市值</div>
  140. <div class="num">
  141. {{ item.total2 || '暂无' }}
  142. <span>亿元</span>
  143. </div>
  144. </BorderBox10>
  145. <BorderBox10 class="Box10">
  146. <div class="titleList">参与环节</div>
  147. <div class="num">{{ item.total2 || '暂无' }}</div>
  148. </BorderBox10>
  149. </div>
  150. </div>
  151. </BorderBox13>
  152. </div>
  153. </div>
  154. </div>
  155. </div>
  156. </myMain>
  157. </template>
  158. <script setup>
  159. import { BorderBox13, BorderBox10 } from '@kjgl77/datav-vue3'
  160. import myMain from '@/components/dataV/myMain.vue'
  161. // 组件
  162. import echarts1 from './one/echarts1.vue'
  163. import echarts2 from './one/echarts2.vue'
  164. import echarts3 from './one/echarts3.vue'
  165. import { UserStore } from '@/store/user'
  166. import { getCity } from '@/utils/city'
  167. const userStore = UserStore()
  168. const user = computed(() => userStore.user)
  169. // 加载中
  170. const loading = ref(false)
  171. // 路由
  172. const router = useRouter()
  173. // 路由
  174. const is_show = ref(false)
  175. const form = ref({})
  176. const list = ref([
  177. { label: '产业大脑', route: '/brain' },
  178. { label: '产业链供应链监测', route: '/brain/one' },
  179. { label: '上市公司监测与培育', route: '/brain/two' },
  180. { label: '科技要素整合', route: '/brain/thr' },
  181. { label: '人才资源配置', route: '/brain/four' },
  182. { label: '营商环境监测', route: '/brain/five' },
  183. { label: '优质企业梯度培育', route: '/brain/six' }
  184. ])
  185. // 字典表
  186. const cityList = ref([])
  187. const industryList = ref([{ label: '智能网联汽车', value: '0' }])
  188. const chainList = ref([{ label: '新能源汽车', value: '0' }])
  189. const list_1 = ref([
  190. { name: '国内有厂商环节', value: 176 },
  191. { name: '本地有厂商环节', value: 288 }
  192. ])
  193. const list_2 = ref([
  194. { name: '国内有厂商环节', value: 176 },
  195. { name: '本地有厂商环节', value: 288 }
  196. ])
  197. const horizontal = ref(true)
  198. const collapsable = ref(true)
  199. const onlyOneNode = ref(false)
  200. const style = ref({
  201. color: '#ffffff'
  202. })
  203. const toolBar = ref({ scale: false, restore: false, expand: false, zoom: false, fullscreen: false })
  204. const list_3 = ref({
  205. id: 1,
  206. label: '长春xxx科技有限公司',
  207. style: { color: '#fff', background: '#7B68EE' },
  208. children: [
  209. {
  210. id: 2,
  211. pid: 1,
  212. label: '产品研发部',
  213. style: { color: '#fff', background: '#7B68EE' },
  214. children: [
  215. { id: 6, pid: 2, label: '产品研发一部' },
  216. { id: 8, pid: 2, label: '产品研发二部' },
  217. { id: 10, pid: 2, label: '产品研发三部' }
  218. ]
  219. },
  220. {
  221. id: 3,
  222. pid: 1,
  223. label: '客服部',
  224. style: { color: '#fff', background: '#7B68EE' },
  225. children: [
  226. { id: 11, pid: 3, label: '客服一部' },
  227. { id: 12, pid: 3, label: '客服二部' }
  228. ]
  229. },
  230. {
  231. id: 4,
  232. pid: 1,
  233. label: '业务部',
  234. style: { color: '#fff', background: '#7B68EE' },
  235. children: [
  236. { id: 11, pid: 3, label: '业务一部' },
  237. { id: 12, pid: 3, label: '业务二部' }
  238. ]
  239. }
  240. ]
  241. })
  242. const list_4 = ref([
  243. { name: 'A股上市公司', total1: 88, total2: 17800.26, total3: '108/262' },
  244. { name: '科创板上市公司', total1: 10, total2: 1210.67, total3: '34/262' }
  245. ])
  246. const list_5 = ref([
  247. { name: '专利', total: 14701 },
  248. { name: '产业化计划', total: 8 },
  249. { name: '创新平台', total: 2 },
  250. { name: '制定标准', total: 257 },
  251. { name: '检验检测平台', total: 571 },
  252. { name: '科技成果', total: 37 },
  253. { name: '认证认可平台', total: 11 },
  254. { name: '重点研发计划', total: 2 }
  255. ])
  256. // 请求
  257. onMounted(async () => {
  258. getCity().then((response) => {
  259. cityList.value = response.address
  260. })
  261. })
  262. // 查看
  263. const toView = (item) => {
  264. router.push(item.route)
  265. }
  266. </script>
  267. <style scoped lang="scss">
  268. .brainOne {
  269. width: 100%;
  270. height: 100%;
  271. position: relative;
  272. // background-color: #17171d;
  273. background: url(/images/brain/brain-bg.gif);
  274. background-size: 100% 100%;
  275. padding: 0rem;
  276. margin: 0rem;
  277. color: #ffffff;
  278. font-family: '微软雅黑';
  279. cursor: default; /* 将鼠标样式更改为箭头 */
  280. .menu_1 {
  281. display: flex;
  282. align-items: center;
  283. background: rgba(194, 209, 225, 0.2);
  284. position: absolute;
  285. padding: 1.5rem 1rem;
  286. left: 0;
  287. top: 35%;
  288. border-radius: 0 1rem 1rem 0;
  289. font-size: 1.2rem;
  290. z-index: 10000;
  291. .left {
  292. .label {
  293. text-align: center;
  294. background: rgba(5, 28, 53, 0.2);
  295. padding: 0.5rem;
  296. margin: 0 0 1rem 0;
  297. border-radius: 0.5rem;
  298. color: #595959;
  299. }
  300. .label:hover {
  301. text-align: center;
  302. background: rgba(20, 123, 233, 0.2);
  303. padding: 0.5rem;
  304. margin: 0 0 1rem 0;
  305. border-radius: 0.5rem;
  306. color: #ffffff;
  307. text-shadow:
  308. 0 0 0.5rem #fff,
  309. 0 0 1rem #fff,
  310. 0 0 1.5rem #fff,
  311. 0 0 2rem #1073ff,
  312. 0 0 3.5rem #1073ff,
  313. 0 0 4.5rem #1073ff,
  314. 0 0 5rem #1073ff,
  315. 0 0 7.5rem #1073ff;
  316. }
  317. }
  318. .right {
  319. margin: 0 0 0 1rem;
  320. }
  321. }
  322. .menu_2 {
  323. display: flex;
  324. align-items: center;
  325. justify-content: center;
  326. background: rgba(194, 209, 225, 0.2);
  327. position: absolute;
  328. left: 0;
  329. top: 35%;
  330. height: 30%;
  331. padding: 0 0.3rem;
  332. border-radius: 0 1.5rem 1.5rem 0;
  333. z-index: 10000;
  334. }
  335. .content {
  336. width: 100%;
  337. height: 100%;
  338. .one {
  339. display: flex;
  340. align-items: center;
  341. justify-content: center;
  342. width: 100%;
  343. height: 6%;
  344. background: url(/images/brain/titleBg.svg);
  345. background-size: 100% 100%;
  346. font-size: 2.4rem;
  347. color: #53befe;
  348. span {
  349. letter-spacing: 0.2em;
  350. }
  351. }
  352. .two {
  353. width: 100%;
  354. height: 5%;
  355. display: flex;
  356. align-items: center;
  357. color: #ffffff;
  358. font-size: 1.2rem;
  359. .two_1 {
  360. display: flex;
  361. align-items: center;
  362. margin: 0 0 0 1rem;
  363. }
  364. }
  365. .thr {
  366. display: flex;
  367. width: 100%;
  368. height: 89%;
  369. .thr_1 {
  370. width: 50%;
  371. height: 100%;
  372. .boxall_1 {
  373. width: 100%;
  374. height: 100%;
  375. }
  376. }
  377. .thr_2 {
  378. display: flex;
  379. flex-wrap: wrap;
  380. width: 50%;
  381. height: 100%;
  382. .boxall_2 {
  383. width: 50%;
  384. height: 35%;
  385. }
  386. .boxall_3 {
  387. width: 50%;
  388. height: 35%;
  389. }
  390. .boxall_4 {
  391. width: 50%;
  392. height: 35%;
  393. }
  394. .boxall_5 {
  395. width: 50%;
  396. height: 35%;
  397. }
  398. .boxall_6 {
  399. width: 100%;
  400. height: 30%;
  401. }
  402. }
  403. .boxall {
  404. padding: 1.5rem 1rem;
  405. .title {
  406. display: flex;
  407. justify-content: space-between;
  408. background-color: rgba($color: #18459d, $alpha: 0.3);
  409. padding: 0.4rem;
  410. font-size: 1.2rem;
  411. border-bottom: 0.3rem solid #18459d;
  412. -webkit-animation: twinkling 2s infinite ease-in-out; /*1秒钟的开始结束都慢的无限次动画*/
  413. }
  414. .center {
  415. justify-content: center !important;
  416. align-items: center;
  417. }
  418. @-webkit-keyframes twinkling {
  419. /*透明度由0到1*/
  420. 0% {
  421. border-color: #612bdf;
  422. box-shadow:
  423. 0 0 10px rgba(97, 43, 223, 0.2),
  424. inset 0 0 10px rgba(97, 43, 223, 0.1),
  425. 0 1px 0 rgb(97, 43, 223);
  426. }
  427. 100% {
  428. border-color: rgb(56, 201, 226);
  429. box-shadow:
  430. 0 0 25px rgba(56, 201, 226, 0.6),
  431. inset 0 0 15px rgba(56, 201, 226, 0.4),
  432. 0 1px 0 rgb(56, 201, 226);
  433. }
  434. }
  435. .image1 {
  436. background: url(/images/brain/car.png);
  437. background-size: 100% 100%;
  438. width: 100%;
  439. height: 96%;
  440. }
  441. .round {
  442. margin: 0.5rem 0 0 0;
  443. padding: 0 0.5rem;
  444. .round_1 {
  445. position: relative;
  446. display: flex;
  447. justify-content: space-between;
  448. align-items: center;
  449. margin: 0 0 4rem 0;
  450. .round_left {
  451. font-size: 1.5rem;
  452. .title_1 {
  453. margin: 0 0 0.5rem 0;
  454. }
  455. .title_2 {
  456. color: #75f9fd;
  457. font-weight: bold;
  458. }
  459. .title_3 {
  460. color: #2785f2;
  461. font-weight: bold;
  462. }
  463. }
  464. .round_center {
  465. position: absolute;
  466. top: -3.5rem;
  467. left: 0;
  468. height: 100%;
  469. width: 100%;
  470. }
  471. .round_right {
  472. font-size: 1.3rem;
  473. }
  474. }
  475. }
  476. .list {
  477. margin: 0.5rem 0 0 0;
  478. height: 80%;
  479. width: 100%;
  480. .list_4 {
  481. display: flex;
  482. justify-content: space-between;
  483. height: 47%;
  484. width: 96%;
  485. margin: 0.5rem 1rem;
  486. .Box10 {
  487. width: 30%;
  488. height: 100%;
  489. padding: 1rem;
  490. text-align: center;
  491. font-size: 1.4rem;
  492. .titleList {
  493. margin: 0 0 0.5rem 0;
  494. }
  495. .num {
  496. color: #54bcbd;
  497. span {
  498. color: #ffffff;
  499. font-size: 1rem;
  500. }
  501. }
  502. }
  503. }
  504. .list_5 {
  505. background: url(/images/brain/title-bg.png);
  506. background-size: 100% 100%;
  507. height: 45%;
  508. width: 25%;
  509. display: flex;
  510. flex-direction: column;
  511. justify-content: space-between;
  512. align-items: center;
  513. color: #ffffff;
  514. font-size: 1.2rem;
  515. }
  516. }
  517. .flex {
  518. display: flex;
  519. flex-wrap: wrap;
  520. align-items: center;
  521. }
  522. }
  523. }
  524. }
  525. //select 选择器
  526. :deep(.el-select__wrapper) {
  527. background: linear-gradient(90deg, #0b3571, rgba(11, 53, 113, 0) 100%);
  528. box-shadow: 0 0 0 0 var(--el-input-border-color, var(--el-border-color)) inset;
  529. }
  530. :deep(.el-input__wrapper) {
  531. background: linear-gradient(90deg, #0b3571, rgba(11, 53, 113, 0) 100%);
  532. box-shadow: 0 0 0 0 var(--el-input-border-color, var(--el-border-color)) inset;
  533. }
  534. // 修改下拉框背景颜色
  535. :deep(.el-popper.is-light) {
  536. background: #0b3571 !important;
  537. border: 1px solid #33394d !important;
  538. }
  539. // 小三角颜色修改
  540. :deep(.el-popper.is-light .el-popper__arrow::before) {
  541. border: 1px solid #33394d !important;
  542. background: #0b3571 !important;
  543. }
  544. //下拉选项字体颜色修改
  545. :deep(.el-select-dropdown__item) {
  546. color: #6687b8 !important;
  547. }
  548. :deep(.el-select-dropdown__item.is-hovering) {
  549. background: #0b3571 !important;
  550. }
  551. :deep(.el-cascader-node:hover) {
  552. background: #4d5b87 !important;
  553. border-radius: 0.5rem !important;
  554. color: #fff !important;
  555. margin: 0 0.7vh !important;
  556. }
  557. //下拉选项---鼠标选中 字体,背景,颜色修改,圆角,间距修改
  558. :deep(.el-select-dropdown__item:hover) {
  559. background: #4d5b87 !important;
  560. border-radius: 0.5rem !important;
  561. color: #fff !important;
  562. margin: 0 0.7vh !important;
  563. }
  564. :deep(.zm-tree-org) {
  565. background-color: transparent !important;
  566. }
  567. }
  568. </style>