index.vue 31 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000
  1. <template>
  2. <div class="w_1300" v-loading="loadingOne">
  3. <el-col :span="24" class="one" v-loading="loadingTwo">
  4. <el-col :span="24" class="one_1">
  5. <el-col :span="12" class="left">汇聚各种行业政策法规</el-col>
  6. <el-col :span="12" class="right" @click="toMore('0')">查看更多新闻</el-col>
  7. </el-col>
  8. <el-col :span="24" class="one_5">
  9. <el-col :span="3" class="left">
  10. <el-image class="image" :src="news" fit="fill" />
  11. </el-col>
  12. <el-col :span="21" class="right">
  13. <el-col :span="12" class="list" v-for="(item, index) in newsList" :key="index" @click="toView(item, '3')">
  14. <el-col :span="4" class="left">
  15. <div class="year" v-if="item.time">{{ moment(item.time).format('YYYY') }}</div>
  16. <div class="date" v-if="item.time">{{ moment(item.time).format('MM-DD') }}</div>
  17. </el-col>
  18. <el-col :span="20" class="right">
  19. <el-col :span="24" class="name textOne">
  20. <el-tooltip effect="dark" :content="item.title" placement="top">
  21. {{ item.title || '暂无标题' }}
  22. </el-tooltip>
  23. </el-col>
  24. <el-col :span="24" class="content">
  25. <div v-html="removeHtmlStyle(item.content)"></div>
  26. </el-col>
  27. </el-col>
  28. </el-col>
  29. </el-col>
  30. </el-col>
  31. </el-col>
  32. <el-col :span="24" class="one" v-loading="loadingThr">
  33. <el-col :span="24" class="one_1">
  34. <el-col :span="12" class="left">汇聚科技创新的创新赛道</el-col>
  35. <el-col :span="12" class="right" @click="toMore('1')">查看全部项目</el-col>
  36. </el-col>
  37. <el-col :span="24" class="one_2">
  38. <el-col :span="4" class="left">
  39. <el-col :span="24" class="list" v-for="(item, index) in typeList" :key="index" @mouseover="mouseOver(item)" :class="[active == item.type ? 'active' : '']">
  40. <el-col :span="6" class="image">
  41. <el-image v-show="active == item.type" class="image" :src="item.icon" fit="fill" />
  42. <el-image v-show="active != item.type" class="image" :src="item.url" fit="fill" />
  43. </el-col>
  44. <el-col :span="18" class="title textOne">{{ item.title }}</el-col>
  45. </el-col>
  46. </el-col>
  47. <el-col :span="20" class="right">
  48. <el-col :span="7" class="list" v-for="(item, index) in list" :key="index" @click="toView(item, '0')">
  49. <el-col :span="24" class="name textOne">{{ item.name || '暂无项目名称' }}</el-col>
  50. <el-col :span="24" class="brief textMore"> 项目介绍:{{ item.brief || '暂无项目介绍' }} </el-col>
  51. <el-col :span="24" class="info">
  52. <div>项目进展:{{ item.progress || '暂无' }}</div>
  53. <div>项目来源:{{ item.source || '暂无' }}</div>
  54. </el-col>
  55. <span class="key">{{ item.industry }}</span>
  56. </el-col>
  57. </el-col>
  58. </el-col>
  59. </el-col>
  60. <el-col :span="24" class="one" v-loading="loadingFour">
  61. <el-col :span="24" class="one_1">
  62. <el-col :span="12" class="left">汇聚各种行业的专家</el-col>
  63. <el-col :span="12" class="right" @click="toMore('2')">查看更多专家</el-col>
  64. </el-col>
  65. <el-col :span="24" class="one_3">
  66. <el-col :span="24" class="table_1">
  67. <el-col :span="3" class="title">姓名</el-col>
  68. <el-col :span="3" class="title">学历/职称</el-col>
  69. <el-col :span="4" class="title">工作类型</el-col>
  70. <el-col :span="5" class="title">工作单位</el-col>
  71. <el-col :span="6" class="title">所属产业</el-col>
  72. <el-col :span="3" class="title">操作</el-col>
  73. </el-col>
  74. <el-col :span="24" class="table_2">
  75. <vue3-seamless-scroll :list="exportList" :hover="true" :step="0.5" :wheel="true" :isWatch="true">
  76. <el-col :span="24" class="list" v-for="(item, index) in exportList" :key="index">
  77. <el-col :span="3" class="content textOne">
  78. <el-tooltip effect="dark" :content="item.name" placement="top">
  79. {{ item.name || '暂无名称' }}
  80. </el-tooltip>
  81. </el-col>
  82. <el-col :span="3" class="content textOne">
  83. {{ item.title || '暂无学历/职称' }}
  84. </el-col>
  85. <el-col :span="4" class="content textOne">
  86. {{ item.work_type || '暂无' }}
  87. </el-col>
  88. <el-col :span="5" class="content textOne">
  89. {{ item.work || '暂无工作单位' }}
  90. </el-col>
  91. <el-col :span="6" class="content textOne">
  92. {{ item.industry || '暂无研究方向' }}
  93. </el-col>
  94. <el-col :span="3" class="content textOne">
  95. <el-button @click.stop="toView(item, '1')" type="primary"> 查看详情 </el-button>
  96. </el-col>
  97. </el-col>
  98. </vue3-seamless-scroll>
  99. </el-col>
  100. </el-col>
  101. </el-col>
  102. <el-col :span="24" class="one" v-loading="loadingFive">
  103. <el-col :span="24" class="one_1">
  104. <el-col :span="12" class="left">汇聚各类优质的企业</el-col>
  105. <el-col :span="12" class="right" @click="toMore('3')">查看更多企业</el-col>
  106. </el-col>
  107. <el-col :span="24" class="one_4">
  108. <el-col :span="24" class="list" v-for="(item, index) in companyList" :key="index" @click="toView(item, '2')">
  109. <el-col :span="4" class="left">
  110. <el-image class="image" :src="getUrl(item.logo)" fit="fill">
  111. <template v-slot:error>
  112. <el-image class="image" :src="company" fit="fill" />
  113. </template>
  114. </el-image>
  115. </el-col>
  116. <el-col :span="20" class="right">
  117. <el-col :span="24" class="right_1">
  118. <el-tooltip effect="dark" :content="item.name" placement="top">
  119. <span class="name">{{ item.name || '暂无名称' }}</span>
  120. </el-tooltip>
  121. <el-tag :type="[item.companyStatus == '0' ? 'success' : 'info']">{{ getDict(item.companyStatus, 'status') }}</el-tag>
  122. </el-col>
  123. <el-col :span="24" class="right_2">
  124. <el-tag type="primary" v-if="item.pattern">{{ getDict(item.pattern, 'pattern') }}</el-tag>
  125. <el-tag type="primary" v-if="item.scale">{{ getDict(item.scale, 'scale') }}</el-tag>
  126. </el-col>
  127. <el-col :span="24" class="right_3">
  128. <el-col :span="6" class="info">
  129. 联系人:<span>{{ item.representative || '暂无' }}</span>
  130. </el-col>
  131. <el-col :span="6" class="info"> 成立日期: {{ moment(item.create_time).format('YYYY-MM-DD') || '暂无' }} </el-col>
  132. <el-col :span="8" class="info">员工人数:{{ item.person || '暂无' }}人 </el-col>
  133. </el-col>
  134. <el-col :span="24" class="right_3">
  135. <el-col :span="6" class="info">电话:{{ item.phone || '暂无' }}</el-col>
  136. <el-col :span="8" class="info">邮箱:{{ item.email || '暂无' }}</el-col>
  137. </el-col>
  138. <el-col :span="24" class="right_3"> 地址:{{ getArea(item.area) || '暂无' }} </el-col>
  139. </el-col>
  140. </el-col>
  141. </el-col>
  142. </el-col>
  143. <el-col :span="24" class="one" v-loading="loadingSix">
  144. <el-col :span="24" class="one_1">
  145. <el-col :span="12" class="left">汇聚各类优质的成果</el-col>
  146. <el-col :span="12" class="right" @click="toMore('4')">查看更多成果</el-col>
  147. </el-col>
  148. <el-col :span="24" class="one_6">
  149. <el-col :span="10" class="left">
  150. <vue3-seamless-scroll :list="achievementList" :hover="true" :step="0.5" :wheel="true" :isWatch="true">
  151. <el-col :span="24" class="list" v-for="(item, index) in achievementList" :key="index" @click="toView(item, '4')">
  152. <el-col :span="1">
  153. <div class="i"></div>
  154. </el-col>
  155. <el-col :span="16" class="content textOne">
  156. {{ item.name || '暂无名称' }}
  157. </el-col>
  158. <el-col :span="7" class="other textOne">
  159. {{ item.field || '暂无技术领域' }}
  160. </el-col>
  161. </el-col>
  162. </vue3-seamless-scroll>
  163. </el-col>
  164. <el-col :span="14" class="right">
  165. <el-col :span="24" class="right_1"> <BuildTwoTone /> <span>热门技术领域</span> </el-col>
  166. <div class="right_2">
  167. <div class="list" v-for="(item, index) in fieldList" :key="index" @click="toAchive(item)">
  168. <RocketTwoTone />
  169. <span class="textOne">{{ item.label }}</span>
  170. </div>
  171. </div>
  172. </el-col>
  173. </el-col>
  174. </el-col>
  175. </div>
  176. </template>
  177. <script setup>
  178. import company from '/images/companyLogo.jpg'
  179. import moment from 'moment'
  180. const $checkRes = inject('$checkRes')
  181. import { get } from 'lodash-es'
  182. // 接口
  183. import { DictDataStore } from '@/store/api/system/dictData'
  184. import { ProjectStore } from '@/store/api/platform/project'
  185. import { AchievementStore } from '@/store/api/platform/achievement'
  186. import { ExpertStore } from '@/store/api/user/expert'
  187. import { NewsStore } from '@/store/api/platform/news'
  188. import { CompanyStore } from '@/store/api/user/company'
  189. const companyStore = CompanyStore()
  190. const newsStore = NewsStore()
  191. const store = ProjectStore()
  192. const dictDataStore = DictDataStore()
  193. const achievementStore = AchievementStore()
  194. const expertStore = ExpertStore()
  195. // 路由
  196. const router = useRouter()
  197. // 图片引入
  198. import science_1 from '/images/science_1.png'
  199. import science_2 from '/images/science_2.png'
  200. import science_3 from '/images/science_3.png'
  201. import science_4 from '/images/science_4.png'
  202. import science_5 from '/images/science_5.png'
  203. import science_6 from '/images/science_6.png'
  204. import science_7 from '/images/science_7.png'
  205. import science_8 from '/images/science_8.png'
  206. import science_9 from '/images/science_9.png'
  207. import science1 from '/images/science1.png'
  208. import science2 from '/images/science2.png'
  209. import science3 from '/images/science3.png'
  210. import science4 from '/images/science4.png'
  211. import science5 from '/images/science5.png'
  212. import science6 from '/images/science6.png'
  213. import science7 from '/images/science7.png'
  214. import science8 from '/images/science8.png'
  215. import science9 from '/images/science9.png'
  216. import news from '/images/news.jpg'
  217. // 加载中
  218. const loadingOne = ref(false)
  219. const loadingTwo = ref(false)
  220. const loadingThr = ref(false)
  221. const loadingFour = ref(false)
  222. const loadingFive = ref(false)
  223. const loadingSix = ref(false)
  224. // 搜索
  225. const active = ref('0')
  226. const typeList = ref([
  227. { url: science_1, icon: science1, title: '汽车电子及新型汽车零部件', type: '0' },
  228. { url: science_2, icon: science2, title: '光电子及智能传感器', type: '1' },
  229. { url: science_3, icon: science3, title: '精密仪器及先进装备', type: '2' },
  230. { url: science_4, icon: science4, title: '生物医药及先进医疗器械', type: '3' },
  231. { url: science_5, icon: science5, title: '车规级芯片及功率半导体器件', type: '4' },
  232. { url: science_6, icon: science6, title: '人工智能及智能机器人', type: '5' },
  233. { url: science_7, icon: science7, title: '生物基及高性能新材料', type: '6' },
  234. { url: science_8, icon: science8, title: '新能源及动力电池', type: '7' },
  235. { url: science_9, icon: science9, title: '碳纤维及复合材料', type: '8' }
  236. ])
  237. const list = ref([])
  238. // 字典表
  239. const projectList = ref([])
  240. const maturityList = ref([])
  241. const industryList = ref([])
  242. const statusList = ref([])
  243. const fieldList = ref([])
  244. const patternList = ref([])
  245. const scaleList = ref([])
  246. const educationList = ref([])
  247. // 成果
  248. const achievementList = ref([])
  249. // 专家
  250. const exportList = ref([])
  251. // 企业
  252. const companyList = ref([])
  253. // 新闻
  254. const newsList = ref([])
  255. // 项目
  256. const list0 = ref([])
  257. const list1 = ref([])
  258. const list2 = ref([])
  259. const list3 = ref([])
  260. const list4 = ref([])
  261. const list5 = ref([])
  262. const list6 = ref([])
  263. const list7 = ref([])
  264. const list8 = ref([])
  265. // 请求
  266. onMounted(async () => {
  267. loadingOne.value = true
  268. await searchOther()
  269. loadingOne.value = false
  270. loadingTwo.value = true
  271. await searchNews()
  272. loadingTwo.value = false
  273. loadingThr.value = true
  274. await search(active.value)
  275. loadingThr.value = false
  276. loadingFour.value = true
  277. await searchExport()
  278. loadingFour.value = false
  279. loadingFive.value = true
  280. await searchCompany()
  281. loadingFive.value = false
  282. loadingSix.value = true
  283. await searchAchieve()
  284. loadingSix.value = false
  285. })
  286. const searchOther = async () => {
  287. let result
  288. // // 学历
  289. // result = await dictDataStore.query({ code: 'education', is_use: '0' })
  290. // if ($checkRes(result)) educationList.value = result.data
  291. // // 合作类型
  292. // result = await dictDataStore.query({ code: 'projectType', is_use: '0' })
  293. // if ($checkRes(result)) projectList.value = result.data
  294. // // 成熟度
  295. // result = await dictDataStore.query({ code: 'projectMaturity', is_use: '0' })
  296. // if ($checkRes(result)) maturityList.value = result.data
  297. // // 行业分类
  298. // result = await dictDataStore.query({ code: 'industry', is_use: '0' })
  299. // if ($checkRes(result)) industryList.value = result.data
  300. // 企业状态
  301. result = await dictDataStore.query({ code: 'companyStatus', is_use: '0' })
  302. if ($checkRes(result)) statusList.value = result.data
  303. // // 企业类型
  304. // result = await dictDataStore.query({ code: 'companyType', is_use: '0' })
  305. // if ($checkRes(result)) patternList.value = result.data
  306. // // 企业规模
  307. // result = await dictDataStore.query({ code: 'companyScale', is_use: '0' })
  308. // if ($checkRes(result)) scaleList.value = result.data
  309. // 技术领域
  310. result = await dictDataStore.query({ code: 'field', is_use: '0' })
  311. if ($checkRes(result)) fieldList.value = result.data
  312. }
  313. const search = async (active) => {
  314. if (active == '0') {
  315. if (list0.value.length > 0) list.value = list0.value
  316. else {
  317. const info = {
  318. skip: 0,
  319. limit: 9
  320. // is_use: '0',
  321. // status: '1'
  322. }
  323. if (active) info.industry = '汽车电子及新型汽车零部件'
  324. const res = await store.query(info)
  325. if (res.errcode == '0') {
  326. list.value = res.data
  327. list0.value = res.data
  328. }
  329. }
  330. }
  331. if (active == '1') {
  332. if (list1.value.length > 0) list.value = list1.value
  333. else {
  334. const info = {
  335. skip: 0,
  336. limit: 9
  337. // is_use: '0',
  338. // status: '1'
  339. }
  340. if (active) info.industry = '光电子及智能传感器'
  341. const res = await store.query(info)
  342. if (res.errcode == '0') {
  343. list.value = res.data
  344. list1.value = res.data
  345. }
  346. }
  347. }
  348. if (active == '2') {
  349. if (list2.value.length > 0) list.value = list2.value
  350. else {
  351. const info = {
  352. skip: 0,
  353. limit: 9
  354. // is_use: '0',
  355. // status: '1'
  356. }
  357. if (active) info.industry = '精密仪器及先进装备'
  358. const res = await store.query(info)
  359. if (res.errcode == '0') {
  360. list.value = res.data
  361. list2.value = res.data
  362. }
  363. }
  364. }
  365. if (active == '3') {
  366. if (list3.value.length > 0) list.value = list3.value
  367. else {
  368. const info = {
  369. skip: 0,
  370. limit: 9
  371. // is_use: '0',
  372. // status: '1'
  373. }
  374. if (active) info.industry = '生物医药及先进医疗器械'
  375. const res = await store.query(info)
  376. if (res.errcode == '0') {
  377. list.value = res.data
  378. list3.value = res.data
  379. }
  380. }
  381. }
  382. if (active == '4') {
  383. if (list4.value.length > 0) list.value = list4.value
  384. else {
  385. const info = {
  386. skip: 0,
  387. limit: 9
  388. // is_use: '0',
  389. // status: '1'
  390. }
  391. if (active) info.industry = '车规级芯片及功率半导体器件'
  392. const res = await store.query(info)
  393. if (res.errcode == '0') {
  394. list.value = res.data
  395. list4.value = res.data
  396. }
  397. }
  398. }
  399. if (active == '5') {
  400. if (list5.value.length > 0) list.value = list5.value
  401. else {
  402. const info = {
  403. skip: 0,
  404. limit: 9
  405. // is_use: '0',
  406. // status: '1'
  407. }
  408. if (active) info.industry = '人工智能及智能机器人'
  409. const res = await store.query(info)
  410. if (res.errcode == '0') {
  411. list.value = res.data
  412. list5.value = res.data
  413. }
  414. }
  415. }
  416. if (active == '6') {
  417. if (list6.value.length > 0) list.value = list6.value
  418. else {
  419. const info = {
  420. skip: 0,
  421. limit: 9
  422. // is_use: '0',
  423. // status: '1'
  424. }
  425. if (active) info.industry = '生物基及高性能新材料'
  426. const res = await store.query(info)
  427. if (res.errcode == '0') {
  428. list.value = res.data
  429. list6.value = res.data
  430. }
  431. }
  432. }
  433. if (active == '7') {
  434. if (list7.value.length > 0) list.value = list7.value
  435. else {
  436. const info = {
  437. skip: 0,
  438. limit: 9
  439. // is_use: '0',
  440. // status: '1'
  441. }
  442. if (active) info.industry = '新能源及动力电池'
  443. const res = await store.query(info)
  444. if (res.errcode == '0') {
  445. list.value = res.data
  446. list7.value = res.data
  447. }
  448. }
  449. }
  450. if (active == '8') {
  451. if (list0.value.length > 0) list.value = list8.value
  452. else {
  453. const info = {
  454. skip: 0,
  455. limit: 9
  456. // is_use: '0',
  457. // status: '1'
  458. }
  459. if (active) info.industry = '碳纤维及复合材料'
  460. const res = await store.query(info)
  461. if (res.errcode == '0') {
  462. list.value = res.data
  463. list8.value = res.data
  464. }
  465. }
  466. }
  467. }
  468. const searchNews = async () => {
  469. const info = {
  470. skip: 0,
  471. limit: 6,
  472. is_use: '0',
  473. status: '1'
  474. }
  475. const res = await newsStore.query(info)
  476. if (res.errcode == '0') newsList.value = res.data
  477. }
  478. const searchExport = async () => {
  479. const info = {
  480. skip: 0,
  481. limit: 10
  482. }
  483. const res = await expertStore.query(info)
  484. if (res.errcode == '0') exportList.value = res.data
  485. }
  486. const searchCompany = async () => {
  487. const info = {
  488. skip: 0,
  489. limit: 10,
  490. status: '0'
  491. }
  492. const res = await companyStore.query(info)
  493. if (res.errcode == '0') companyList.value = res.data
  494. }
  495. const searchAchieve = async () => {
  496. const info = {
  497. skip: 20,
  498. limit: 10
  499. }
  500. const res = await achievementStore.list(info)
  501. if (res.errcode == '0') achievementList.value = res.data
  502. }
  503. // 字典数据转换
  504. const getDict = (data, model) => {
  505. let res
  506. if (model == 'cooperate') res = projectList.value.find((f) => f.value == data)
  507. else if (model == 'education') res = educationList.value.find((f) => f.value == data)
  508. else if (model == 'maturity') res = maturityList.value.find((f) => f.value == data)
  509. else if (model == 'type') res = industryList.value.find((f) => f.value == data)
  510. else if (model == 'status') res = statusList.value.find((f) => f.value == data)
  511. else if (model == 'field') res = fieldList.value.find((f) => f.value == data)
  512. else if (model == 'pattern') res = patternList.value.find((f) => f.value == data)
  513. else if (model == 'scale') res = scaleList.value.find((f) => f.value == data)
  514. return get(res, 'label')
  515. }
  516. const getUrl = (item) => {
  517. if (item) return `${import.meta.env.VITE_APP_HOST}${item[0].uri}`
  518. }
  519. // 地区显示
  520. const getArea = (data) => {
  521. if (data) return data.join(',')
  522. else return '暂无地区'
  523. }
  524. // 查看详情
  525. const toView = (item, type) => {
  526. if (type == '0') router.push({ path: '/project/detail', query: { id: item.id || item._id } })
  527. else if (type == '1') router.push({ path: '/expert/detail', query: { id: item.id || item._id } })
  528. else if (type == '2') router.push({ path: '/company/detail', query: { id: item.id || item._id } })
  529. else if (type == '3') router.push({ path: '/news/detail', query: { id: item.id || item._id } })
  530. else if (type == '4') router.push({ path: '/achievement/detail', query: { id: item.id || item._id } })
  531. }
  532. // 查看更多
  533. const toMore = (type) => {
  534. if (type == '0') router.push({ path: '/news', query: { type } })
  535. else if (type == '1') router.push({ path: '/project' })
  536. else if (type == '2') router.push({ path: '/expert' })
  537. else if (type == '3') router.push({ path: '/company' })
  538. else if (type == '4') router.push({ path: '/nine' })
  539. }
  540. // 类型
  541. const mouseOver = async (item) => {
  542. active.value = item.type
  543. await search(item.type)
  544. }
  545. // 联络专家
  546. const toChat = (item) => {
  547. router.push({ path: '/chat', query: { id: item.user } })
  548. }
  549. // 查看成果
  550. const toAchive = (item) => {
  551. router.push({ path: '/nine', query: { type: item.value } })
  552. }
  553. const removeHtmlStyle = (html) => {
  554. let relStyle = /style\s*?=\s*?([‘"])[\s\S]*?\1/g //去除样式
  555. let relTag = /<.+?>/g //去除标签
  556. let relClass = /class\s*?=\s*?([‘"])[\s\S]*?\1/g // 清除类名
  557. let newHtml = ''
  558. if (html) {
  559. newHtml = html.replace(relStyle, '')
  560. newHtml = newHtml.replace(relTag, '')
  561. newHtml = newHtml.replace(relClass, '')
  562. }
  563. return newHtml
  564. }
  565. </script>
  566. <style scoped lang="scss">
  567. .main {
  568. .home {
  569. position: relative;
  570. .image {
  571. width: 100%;
  572. height: 200px;
  573. }
  574. .input {
  575. width: 800px;
  576. position: absolute;
  577. left: 30%;
  578. bottom: 40%;
  579. :deep(.ant-input-affix-wrapper) {
  580. background-color: transparent;
  581. border: 3px solid #fff !important;
  582. }
  583. :deep(.ant-input) {
  584. height: 45px;
  585. line-height: 45px;
  586. font-family: PingFangSC-Regular;
  587. font-size: $global-font-size-18;
  588. padding-right: 24px;
  589. color: #fff;
  590. border: none !important;
  591. outline: none !important;
  592. box-shadow: 0 0 0 0 !important;
  593. text-shadow: 0 0 0 0 !important;
  594. background-color: transparent !important;
  595. &::placeholder {
  596. color: #ffffff !important;
  597. }
  598. }
  599. }
  600. }
  601. .one {
  602. padding: 25px 0;
  603. .one_1 {
  604. display: flex;
  605. justify-content: space-between;
  606. margin: 0 0 10px 0;
  607. .left {
  608. font-size: $global-font-size-26;
  609. font-family:
  610. PingFangSC-Semibold,
  611. PingFang SC;
  612. font-weight: 600;
  613. color: #111;
  614. line-height: 33px;
  615. }
  616. .right {
  617. text-align: right;
  618. font-size: $global-font-size-18;
  619. font-family:
  620. PingFangSC-Regular,
  621. PingFang SC;
  622. font-weight: 400;
  623. color: #2280ff;
  624. line-height: $global-font-size-16;
  625. display: block;
  626. margin-top: 13px;
  627. margin-right: 34px;
  628. }
  629. .right:hover {
  630. cursor: pointer;
  631. }
  632. }
  633. .one_2 {
  634. display: flex;
  635. .left {
  636. padding: 10px;
  637. .list {
  638. display: flex;
  639. padding: 15px;
  640. border-radius: 8px;
  641. .image {
  642. text-align: center;
  643. width: 20px;
  644. height: 20px;
  645. }
  646. .title {
  647. font-size: $global-font-size-18;
  648. font-family:
  649. PingFangSC-Regular,
  650. PingFang SC;
  651. font-weight: 400;
  652. color: #111;
  653. line-height: $global-font-size-24;
  654. }
  655. }
  656. .list:hover {
  657. border-radius: 8px;
  658. background-color: #2280ff;
  659. cursor: pointer;
  660. .title {
  661. color: #ffffff;
  662. }
  663. }
  664. .active {
  665. border-radius: 8px;
  666. background-color: #2280ff;
  667. .title {
  668. color: #ffffff;
  669. }
  670. }
  671. }
  672. .right {
  673. display: flex;
  674. justify-content: space-around;
  675. align-items: flex-start;
  676. flex-wrap: wrap;
  677. .list {
  678. padding: 20px;
  679. border-radius: 10px;
  680. margin: 0 0 10px 0;
  681. .name {
  682. display: flex;
  683. align-items: center;
  684. font-size: $global-font-size-18;
  685. font-family:
  686. PingFangSC-Medium,
  687. PingFang SC;
  688. font-weight: 500;
  689. color: #111;
  690. line-height: $global-font-size-18;
  691. display: block;
  692. margin: 5px 0 12px 0;
  693. }
  694. .name:hover {
  695. color: #2374ff;
  696. cursor: pointer;
  697. }
  698. .brief {
  699. font-size: $global-font-size-18;
  700. font-family:
  701. PingFangSC-Regular,
  702. PingFang SC;
  703. font-weight: 400;
  704. color: #333;
  705. line-height: 24px;
  706. margin-bottom: 12px;
  707. cursor: pointer;
  708. }
  709. .info {
  710. display: flex;
  711. justify-content: space-between;
  712. font-size: $global-font-size-12;
  713. font-family:
  714. PingFangSC-Regular,
  715. PingFang SC;
  716. font-weight: 400;
  717. color: #666;
  718. line-height: $global-font-size-12;
  719. margin-bottom: 15px;
  720. cursor: pointer;
  721. }
  722. .key {
  723. font-size: $global-font-size-14;
  724. font-family:
  725. PingFangSC-Regular,
  726. PingFang SC;
  727. font-weight: 400;
  728. color: #999990;
  729. line-height: $global-font-size-14;
  730. height: 22px;
  731. border-radius: 2px;
  732. border: 1px solid #dbdbdb;
  733. box-sizing: border-box;
  734. padding: 0 6px;
  735. cursor: pointer;
  736. }
  737. }
  738. .list:nth-child(1n) {
  739. background: linear-gradient(180deg, #d5e5ff, #fff);
  740. }
  741. .list:nth-child(2n) {
  742. background: linear-gradient(180deg, #cbeff8, #fff);
  743. }
  744. }
  745. }
  746. .one_3 {
  747. margin: 10px;
  748. .table_1 {
  749. display: flex;
  750. justify-content: center;
  751. height: 50px;
  752. background-image: linear-gradient(90deg, #2171f6 0, #619bf5 100%);
  753. line-height: 50px;
  754. color: #ffffff;
  755. font-size: $global-font-size-18;
  756. .title {
  757. text-align: center;
  758. }
  759. .title:hover {
  760. cursor: pointer;
  761. }
  762. }
  763. .table_2 {
  764. max-height: 400px;
  765. overflow: hidden;
  766. .list {
  767. display: flex;
  768. justify-content: center;
  769. height: 50px;
  770. line-height: 50px;
  771. font-size: $global-font-size-18;
  772. color: #666;
  773. background: #fff;
  774. .content {
  775. text-align: center;
  776. padding: 0 10px;
  777. }
  778. .content:hover {
  779. color: #2374ff;
  780. }
  781. }
  782. .list:nth-child(2n) {
  783. background: #f4f4f4;
  784. }
  785. }
  786. }
  787. .one_4 {
  788. .list {
  789. display: flex;
  790. align-items: center;
  791. margin: 5px 0 0 0;
  792. padding: 5px;
  793. border-radius: 8px;
  794. border: 1px solid #f4f4f4;
  795. .left {
  796. text-align: center;
  797. .image {
  798. width: 150px;
  799. height: 150px;
  800. border-radius: 10px;
  801. }
  802. }
  803. .right {
  804. padding: 5px;
  805. .right_1 {
  806. display: flex;
  807. align-content: center;
  808. .name {
  809. margin: 0 10px 0 0;
  810. word-break: break-all;
  811. font-size: $global-font-size-20;
  812. font-family:
  813. PingFangSC-Regular,
  814. PingFang SC;
  815. font-weight: 500;
  816. line-height: 24px;
  817. overflow: hidden;
  818. text-overflow: ellipsis;
  819. display: -webkit-box;
  820. -webkit-line-clamp: 2;
  821. -webkit-box-orient: vertical;
  822. }
  823. }
  824. .right_2 {
  825. grid-gap: 10px;
  826. gap: 10px;
  827. display: flex;
  828. margin: 10px 0;
  829. }
  830. .right_3 {
  831. display: flex;
  832. margin: 10px 0;
  833. font-size: $global-font-size-18;
  834. font-family:
  835. PingFangSC-Regular,
  836. PingFang SC;
  837. color: #666;
  838. .info {
  839. span {
  840. color: #2171f6;
  841. }
  842. }
  843. }
  844. }
  845. }
  846. .list:hover {
  847. box-shadow:
  848. 0 4px 5px -3px rgba(0, 0, 0, 0.06),
  849. 0 4px 12px 4px rgba(0, 0, 0, 0.06);
  850. }
  851. }
  852. .one_5 {
  853. display: flex;
  854. .left {
  855. .image {
  856. width: 150px;
  857. height: 320px;
  858. }
  859. }
  860. .right {
  861. display: flex;
  862. justify-content: space-between;
  863. flex-wrap: wrap;
  864. .list {
  865. display: flex;
  866. justify-content: space-between;
  867. align-items: center;
  868. padding: 20px;
  869. transition: all 0.3s;
  870. .left {
  871. font-family: PingFangSC-Regular;
  872. font-size: $global-font-size-14;
  873. color: #2374ff;
  874. line-height: $global-font-size-14;
  875. .year {
  876. margin-bottom: 2px;
  877. }
  878. .date {
  879. font-size: $global-font-size-24;
  880. line-height: $global-font-size-24;
  881. margin-bottom: 10px;
  882. }
  883. }
  884. .right {
  885. .name {
  886. font-family: PingFangSC-Medium;
  887. font-size: $global-font-size-18;
  888. color: #121834;
  889. line-height: $global-font-size-18;
  890. font-weight: 700;
  891. margin-bottom: 8px;
  892. }
  893. .content {
  894. font-size: $global-font-size-14;
  895. color: #525a68;
  896. line-height: 19px;
  897. font-weight: 400;
  898. display: -webkit-box;
  899. -webkit-line-clamp: 2;
  900. -webkit-box-orient: vertical;
  901. overflow: hidden;
  902. text-overflow: ellipsis;
  903. margin-top: 8px;
  904. }
  905. }
  906. }
  907. .list:hover {
  908. background: #f0f7ff;
  909. box-shadow: 0 0 16px rgba(205, 205, 205, 0.6);
  910. cursor: pointer;
  911. }
  912. }
  913. }
  914. .one_6 {
  915. display: flex;
  916. padding: 20px 22px;
  917. background-color: #fbfcfd;
  918. .left {
  919. max-height: 300px;
  920. overflow: hidden;
  921. .list {
  922. display: flex;
  923. align-items: center;
  924. height: 34px;
  925. font-size: $global-font-size-18;
  926. .i {
  927. display: inline-block;
  928. vertical-align: middle;
  929. margin-right: 10px;
  930. width: 6px;
  931. height: 6px;
  932. background-color: #8ab7f1;
  933. border-radius: 50%;
  934. }
  935. .other {
  936. color: #145ca4;
  937. text-align: center;
  938. }
  939. }
  940. }
  941. .right {
  942. font-size: $global-font-size-18;
  943. .right_1 {
  944. padding: 10px 60px;
  945. span {
  946. margin: 0 5px 0 0;
  947. }
  948. }
  949. .right_2 {
  950. display: flex;
  951. justify-content: center;
  952. flex-wrap: wrap;
  953. margin: 10px 0 0 0;
  954. .list {
  955. display: flex;
  956. align-items: center;
  957. margin: 0 0 10px 10px;
  958. padding-left: 15px;
  959. width: 200px;
  960. height: 50px;
  961. line-height: 53px;
  962. background-color: #eaeff7;
  963. span {
  964. margin: 0 5px 0 0;
  965. }
  966. }
  967. .list:hover {
  968. cursor: pointer;
  969. color: #2e70f1;
  970. box-shadow: 0 0 10px 0 rgba(0, 69, 183, 0.3);
  971. }
  972. }
  973. }
  974. }
  975. }
  976. }
  977. </style>