index.vue 31 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996
  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 && item.length > 0) 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' })
  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 toAchive = (item) => {
  547. router.push({ path: '/nine', query: { type: item.value } })
  548. }
  549. const removeHtmlStyle = (html) => {
  550. let relStyle = /style\s*?=\s*?([‘"])[\s\S]*?\1/g //去除样式
  551. let relTag = /<.+?>/g //去除标签
  552. let relClass = /class\s*?=\s*?([‘"])[\s\S]*?\1/g // 清除类名
  553. let newHtml = ''
  554. if (html) {
  555. newHtml = html.replace(relStyle, '')
  556. newHtml = newHtml.replace(relTag, '')
  557. newHtml = newHtml.replace(relClass, '')
  558. }
  559. return newHtml
  560. }
  561. </script>
  562. <style scoped lang="scss">
  563. .main {
  564. .home {
  565. position: relative;
  566. .image {
  567. width: 100%;
  568. height: 200px;
  569. }
  570. .input {
  571. width: 800px;
  572. position: absolute;
  573. left: 30%;
  574. bottom: 40%;
  575. :deep(.ant-input-affix-wrapper) {
  576. background-color: transparent;
  577. border: 3px solid #fff !important;
  578. }
  579. :deep(.ant-input) {
  580. height: 45px;
  581. line-height: 45px;
  582. font-family: PingFangSC-Regular;
  583. font-size: $global-font-size-18;
  584. padding-right: 24px;
  585. color: #fff;
  586. border: none !important;
  587. outline: none !important;
  588. box-shadow: 0 0 0 0 !important;
  589. text-shadow: 0 0 0 0 !important;
  590. background-color: transparent !important;
  591. &::placeholder {
  592. color: #ffffff !important;
  593. }
  594. }
  595. }
  596. }
  597. .one {
  598. padding: 25px 0;
  599. .one_1 {
  600. display: flex;
  601. justify-content: space-between;
  602. margin: 0 0 10px 0;
  603. .left {
  604. font-size: $global-font-size-26;
  605. font-family:
  606. PingFangSC-Semibold,
  607. PingFang SC;
  608. font-weight: 600;
  609. color: #111;
  610. line-height: 33px;
  611. }
  612. .right {
  613. text-align: right;
  614. font-size: $global-font-size-18;
  615. font-family:
  616. PingFangSC-Regular,
  617. PingFang SC;
  618. font-weight: 400;
  619. color: #2280ff;
  620. line-height: $global-font-size-16;
  621. display: block;
  622. margin-top: 13px;
  623. margin-right: 34px;
  624. }
  625. .right:hover {
  626. cursor: pointer;
  627. }
  628. }
  629. .one_2 {
  630. display: flex;
  631. .left {
  632. padding: 10px;
  633. .list {
  634. display: flex;
  635. padding: 15px;
  636. border-radius: 8px;
  637. .image {
  638. text-align: center;
  639. width: 20px;
  640. height: 20px;
  641. }
  642. .title {
  643. font-size: $global-font-size-18;
  644. font-family:
  645. PingFangSC-Regular,
  646. PingFang SC;
  647. font-weight: 400;
  648. color: #111;
  649. line-height: $global-font-size-24;
  650. }
  651. }
  652. .list:hover {
  653. border-radius: 8px;
  654. background-color: #2280ff;
  655. cursor: pointer;
  656. .title {
  657. color: #ffffff;
  658. }
  659. }
  660. .active {
  661. border-radius: 8px;
  662. background-color: #2280ff;
  663. .title {
  664. color: #ffffff;
  665. }
  666. }
  667. }
  668. .right {
  669. display: flex;
  670. justify-content: space-around;
  671. align-items: flex-start;
  672. flex-wrap: wrap;
  673. .list {
  674. padding: 20px;
  675. border-radius: 10px;
  676. margin: 0 0 10px 0;
  677. .name {
  678. display: flex;
  679. align-items: center;
  680. font-size: $global-font-size-18;
  681. font-family:
  682. PingFangSC-Medium,
  683. PingFang SC;
  684. font-weight: 500;
  685. color: #111;
  686. line-height: $global-font-size-18;
  687. display: block;
  688. margin: 5px 0 12px 0;
  689. }
  690. .name:hover {
  691. color: #2374ff;
  692. cursor: pointer;
  693. }
  694. .brief {
  695. font-size: $global-font-size-18;
  696. font-family:
  697. PingFangSC-Regular,
  698. PingFang SC;
  699. font-weight: 400;
  700. color: #333;
  701. line-height: 24px;
  702. margin-bottom: 12px;
  703. cursor: pointer;
  704. }
  705. .info {
  706. display: flex;
  707. justify-content: space-between;
  708. font-size: $global-font-size-12;
  709. font-family:
  710. PingFangSC-Regular,
  711. PingFang SC;
  712. font-weight: 400;
  713. color: #666;
  714. line-height: $global-font-size-12;
  715. margin-bottom: 15px;
  716. cursor: pointer;
  717. }
  718. .key {
  719. font-size: $global-font-size-14;
  720. font-family:
  721. PingFangSC-Regular,
  722. PingFang SC;
  723. font-weight: 400;
  724. color: #999990;
  725. line-height: $global-font-size-14;
  726. height: 22px;
  727. border-radius: 2px;
  728. border: 1px solid #dbdbdb;
  729. box-sizing: border-box;
  730. padding: 0 6px;
  731. cursor: pointer;
  732. }
  733. }
  734. .list:nth-child(1n) {
  735. background: linear-gradient(180deg, #d5e5ff, #fff);
  736. }
  737. .list:nth-child(2n) {
  738. background: linear-gradient(180deg, #cbeff8, #fff);
  739. }
  740. }
  741. }
  742. .one_3 {
  743. margin: 10px;
  744. .table_1 {
  745. display: flex;
  746. justify-content: center;
  747. height: 50px;
  748. background-image: linear-gradient(90deg, #2171f6 0, #619bf5 100%);
  749. line-height: 50px;
  750. color: #ffffff;
  751. font-size: $global-font-size-18;
  752. .title {
  753. text-align: center;
  754. }
  755. .title:hover {
  756. cursor: pointer;
  757. }
  758. }
  759. .table_2 {
  760. max-height: 400px;
  761. overflow: hidden;
  762. .list {
  763. display: flex;
  764. justify-content: center;
  765. height: 50px;
  766. line-height: 50px;
  767. font-size: $global-font-size-18;
  768. color: #666;
  769. background: #fff;
  770. .content {
  771. text-align: center;
  772. padding: 0 10px;
  773. }
  774. .content:hover {
  775. color: #2374ff;
  776. }
  777. }
  778. .list:nth-child(2n) {
  779. background: #f4f4f4;
  780. }
  781. }
  782. }
  783. .one_4 {
  784. .list {
  785. display: flex;
  786. align-items: center;
  787. margin: 5px 0 0 0;
  788. padding: 5px;
  789. border-radius: 8px;
  790. border: 1px solid #f4f4f4;
  791. .left {
  792. text-align: center;
  793. .image {
  794. width: 150px;
  795. height: 150px;
  796. border-radius: 10px;
  797. }
  798. }
  799. .right {
  800. padding: 5px;
  801. .right_1 {
  802. display: flex;
  803. align-content: center;
  804. .name {
  805. margin: 0 10px 0 0;
  806. word-break: break-all;
  807. font-size: $global-font-size-20;
  808. font-family:
  809. PingFangSC-Regular,
  810. PingFang SC;
  811. font-weight: 500;
  812. line-height: 24px;
  813. overflow: hidden;
  814. text-overflow: ellipsis;
  815. display: -webkit-box;
  816. -webkit-line-clamp: 2;
  817. -webkit-box-orient: vertical;
  818. }
  819. }
  820. .right_2 {
  821. grid-gap: 10px;
  822. gap: 10px;
  823. display: flex;
  824. margin: 10px 0;
  825. }
  826. .right_3 {
  827. display: flex;
  828. margin: 10px 0;
  829. font-size: $global-font-size-18;
  830. font-family:
  831. PingFangSC-Regular,
  832. PingFang SC;
  833. color: #666;
  834. .info {
  835. span {
  836. color: #2171f6;
  837. }
  838. }
  839. }
  840. }
  841. }
  842. .list:hover {
  843. box-shadow:
  844. 0 4px 5px -3px rgba(0, 0, 0, 0.06),
  845. 0 4px 12px 4px rgba(0, 0, 0, 0.06);
  846. }
  847. }
  848. .one_5 {
  849. display: flex;
  850. .left {
  851. .image {
  852. width: 150px;
  853. height: 320px;
  854. }
  855. }
  856. .right {
  857. display: flex;
  858. justify-content: space-between;
  859. flex-wrap: wrap;
  860. .list {
  861. display: flex;
  862. justify-content: space-between;
  863. align-items: center;
  864. padding: 20px;
  865. transition: all 0.3s;
  866. .left {
  867. font-family: PingFangSC-Regular;
  868. font-size: $global-font-size-14;
  869. color: #2374ff;
  870. line-height: $global-font-size-14;
  871. .year {
  872. margin-bottom: 2px;
  873. }
  874. .date {
  875. font-size: $global-font-size-24;
  876. line-height: $global-font-size-24;
  877. margin-bottom: 10px;
  878. }
  879. }
  880. .right {
  881. .name {
  882. font-family: PingFangSC-Medium;
  883. font-size: $global-font-size-18;
  884. color: #121834;
  885. line-height: $global-font-size-18;
  886. font-weight: 700;
  887. margin-bottom: 8px;
  888. }
  889. .content {
  890. font-size: $global-font-size-14;
  891. color: #525a68;
  892. line-height: 19px;
  893. font-weight: 400;
  894. display: -webkit-box;
  895. -webkit-line-clamp: 2;
  896. -webkit-box-orient: vertical;
  897. overflow: hidden;
  898. text-overflow: ellipsis;
  899. margin-top: 8px;
  900. }
  901. }
  902. }
  903. .list:hover {
  904. background: #f0f7ff;
  905. box-shadow: 0 0 16px rgba(205, 205, 205, 0.6);
  906. cursor: pointer;
  907. }
  908. }
  909. }
  910. .one_6 {
  911. display: flex;
  912. padding: 20px 22px;
  913. background-color: #fbfcfd;
  914. .left {
  915. max-height: 300px;
  916. overflow: hidden;
  917. .list {
  918. display: flex;
  919. align-items: center;
  920. height: 34px;
  921. font-size: $global-font-size-18;
  922. .i {
  923. display: inline-block;
  924. vertical-align: middle;
  925. margin-right: 10px;
  926. width: 6px;
  927. height: 6px;
  928. background-color: #8ab7f1;
  929. border-radius: 50%;
  930. }
  931. .other {
  932. color: #145ca4;
  933. text-align: center;
  934. }
  935. }
  936. }
  937. .right {
  938. font-size: $global-font-size-18;
  939. .right_1 {
  940. padding: 10px 60px;
  941. span {
  942. margin: 0 5px 0 0;
  943. }
  944. }
  945. .right_2 {
  946. display: flex;
  947. justify-content: center;
  948. flex-wrap: wrap;
  949. margin: 10px 0 0 0;
  950. .list {
  951. display: flex;
  952. align-items: center;
  953. margin: 0 0 10px 10px;
  954. padding-left: 15px;
  955. width: 200px;
  956. height: 50px;
  957. line-height: 53px;
  958. background-color: #eaeff7;
  959. span {
  960. margin: 0 5px 0 0;
  961. }
  962. }
  963. .list:hover {
  964. cursor: pointer;
  965. color: #2e70f1;
  966. box-shadow: 0 0 10px 0 rgba(0, 69, 183, 0.3);
  967. }
  968. }
  969. }
  970. }
  971. }
  972. }
  973. </style>