1.vue 20 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515
  1. <template>
  2. <div class="listNewsBox">
  3. <div class="listNewsTitle">
  4. <NuxtLink v-if="titleLink.cid" :href="getLinkPath(titleLink)" :title="titleLink.alias">
  5. {{ titleLink.alias }}
  6. </NuxtLink>
  7. </div>
  8. <!--样式1-->
  9. <div class="listNewsContent" v-if="componentStyle == 1">
  10. <div class="listNewsContentTop">
  11. <div class="listNewsContentLeftTop" v-for="item in component_style1_News1Array">
  12. <NuxtLink :href="getLinkPathDetail(item)" :title="item.title"
  13. :target="item.islink == 1 ? '_blank' : '_self'">
  14. <img :src="item.imgurl" />
  15. <div class="listNewsContentLeftTopTitle">{{ item.title }}</div>
  16. </NuxtLink>
  17. </div>
  18. </div>
  19. <div class="listNewsContentBottom">
  20. <div v-for="item in component_style1_News2Array">
  21. <NuxtLink :href="getLinkPathDetail(item)" :title="item.title"
  22. :target="item.islink == 1 ? '_blank' : '_self'">
  23. {{ item.title }}
  24. </NuxtLink>
  25. </div>
  26. </div>
  27. </div>
  28. <!--样式2-->
  29. <div class="listNewsContent" v-if="componentStyle == 2">
  30. <div class="listNewsBigContentBottom">
  31. <div class="listNewsContentBottom">
  32. <div v-for="item in component_style1_News2Array">
  33. <NuxtLink :href="getLinkPathDetail(item)" :title="item.title"
  34. :target="item.islink == 1 ? '_blank' : '_self'">
  35. {{ item.title }}
  36. </NuxtLink>
  37. </div>
  38. </div>
  39. </div>
  40. <div class="listNewsContentTop">
  41. <div class="listNewsContentLeftTop" v-for="item in component_style1_News1Array">
  42. <NuxtLink :href="getLinkPathDetail(item)" :title="item.title"
  43. :target="item.islink == 1 ? '_blank' : '_self'">
  44. <img :src="item.imgurl" />
  45. <div class="listNewsContentLeftTopTitle">{{ item.title }}</div>
  46. </NuxtLink>
  47. </div>
  48. </div>
  49. </div>
  50. <!--样式3-->
  51. <div class="listNewsContent_style listNewsStyle3" v-if="componentStyle == 3">
  52. <div class="listNewsContentLeft">
  53. <div class="listNewsContentLeftBottom">
  54. <div v-for="item in component_style1_News2Array_1">
  55. <NuxtLink :href="getLinkPathDetail(item)" :title="item.title"
  56. :target="item.islink == 1 ? '_blank' : '_self'">
  57. {{ item.title }}
  58. </NuxtLink>
  59. </div>
  60. </div>
  61. <div class="listNewsContentLeftTop" v-for="item in component_style1_News1Array_1">
  62. <NuxtLink :href="getLinkPathDetail(item)" :title="item.title"
  63. :target="item.islink == 1 ? '_blank' : '_self'">
  64. <img :src="item.imgurl" />
  65. <div class="listNewsContentLeftTopTitle">{{ item.title }}</div>
  66. </NuxtLink>
  67. </div>
  68. </div>
  69. <div class="listNewsContentRight">
  70. <div class="listNewsContentLeftTop" v-for="item in component_style1_News1Array_2">
  71. <NuxtLink :href="getLinkPathDetail(item)" :title="item.title"
  72. :target="item.islink == 1 ? '_blank' : '_self'">
  73. <img :src="item.imgurl" />
  74. <div class="listNewsContentLeftTopTitle">{{ item.title }}</div>
  75. </NuxtLink>
  76. </div>
  77. <div class="listNewsContentRightBottom">
  78. <div v-for="item in component_style1_News2Array_2">
  79. <NuxtLink :href="getLinkPathDetail(item)" :title="item.title"
  80. :target="item.islink == 1 ? '_blank' : '_self'">
  81. {{ item.title }}
  82. </NuxtLink>
  83. </div>
  84. </div>
  85. </div>
  86. </div>
  87. <!--样式4-->
  88. <div class="listNewsContent_style listNewsStyle4" v-if="componentStyle == 4">
  89. <div class="listNewsContentLeft">
  90. <div class="listNewsContentLeftTop" v-for="item in component_style1_News1Array_1">
  91. <NuxtLink :href="getLinkPathDetail(item)" :title="item.title"
  92. :target="item.islink == 1 ? '_blank' : '_self'">
  93. <img :src="item.imgurl" />
  94. <div class="listNewsContentLeftTopTitle">{{ item.title }}</div>
  95. </NuxtLink>
  96. </div>
  97. <div class="listNewsContentLeftBottom">
  98. <div v-for="item in component_style1_News2Array_1">
  99. <NuxtLink :href="getLinkPathDetail(item)" :title="item.title"
  100. :target="item.islink == 1 ? '_blank' : '_self'">
  101. {{ item.title }}
  102. </NuxtLink>
  103. </div>
  104. </div>
  105. </div>
  106. <div class="listNewsContentRight">
  107. <div class="listNewsContentRightBottom">
  108. <div v-for="item in component_style1_News2Array_2">
  109. <NuxtLink :href="getLinkPathDetail(item)" :title="item.title"
  110. :target="item.islink == 1 ? '_blank' : '_self'">
  111. {{ item.title }}
  112. </NuxtLink>
  113. </div>
  114. </div>
  115. <div class="listNewsContentLeftTop" v-for="item in component_style1_News1Array_2">
  116. <NuxtLink :href="getLinkPathDetail(item)" :title="item.title"
  117. :target="item.islink == 1 ? '_blank' : '_self'">
  118. <img :src="item.imgurl" />
  119. <div class="listNewsContentLeftTopTitle">{{ item.title }}</div>
  120. </NuxtLink>
  121. </div>
  122. </div>
  123. </div>
  124. <!--样式5-->
  125. <div class="listNewsContent_style listNewsStyle5" v-if="componentStyle == 5">
  126. <div class="listNewsContentLeft">
  127. <div class="listNewsContentLeftTop" v-for="item in component_style1_News1Array_1">
  128. <NuxtLink :href="getLinkPathDetail(item)" :title="item.title"
  129. :target="item.islink == 1 ? '_blank' : '_self'">
  130. <img :src="item.imgurl" />
  131. <div class="listNewsContentLeftTopTitle">{{ item.title }}</div>
  132. </NuxtLink>
  133. </div>
  134. <div class="listNewsContentLeftBottom">
  135. <div v-for="item in component_style1_News2Array_1">
  136. <NuxtLink :href="getLinkPathDetail(item)" :title="item.title"
  137. :target="item.islink == 1 ? '_blank' : '_self'">
  138. {{ item.title }}
  139. </NuxtLink>
  140. </div>
  141. </div>
  142. </div>
  143. <div class="listNewsContentRight">
  144. <div class="listNewsContentLeftTop" v-for="item in component_style1_News1Array_2">
  145. <NuxtLink :href="getLinkPathDetail(item)" :title="item.title"
  146. :target="item.islink == 1 ? '_blank' : '_self'">
  147. <img :src="item.imgurl" />
  148. <div class="listNewsContentLeftTopTitle">{{ item.title }}</div>
  149. </NuxtLink>
  150. </div>
  151. <div class="listNewsContentRightBottom">
  152. <div v-for="item in component_style1_News2Array_2">
  153. <NuxtLink :href="getLinkPathDetail(item)" :title="item.title"
  154. :target="item.islink == 1 ? '_blank' : '_self'">
  155. {{ item.title }}
  156. </NuxtLink>
  157. </div>
  158. </div>
  159. </div>
  160. </div>
  161. <!--样式6-->
  162. <div class="listNewsContent_style listNewsStyle6 listNewsStyle5" v-if="componentStyle == 6">
  163. <div class="listNewsContentLeft">
  164. <div class="listNewsContentLeftBottom">
  165. <div v-for="item in component_style1_News2Array_1">
  166. <NuxtLink :href="getLinkPathDetail(item)" :title="item.title"
  167. :target="item.islink == 1 ? '_blank' : '_self'">
  168. {{ item.title }}
  169. </NuxtLink>
  170. </div>
  171. </div>
  172. <div class="listNewsContentLeftTop" v-for="item in component_style1_News1Array_1">
  173. <NuxtLink :href="getLinkPathDetail(item)" :title="item.title"
  174. :target="item.islink == 1 ? '_blank' : '_self'">
  175. <img :src="item.imgurl" />
  176. <div class="listNewsContentLeftTopTitle">{{ item.title }}</div>
  177. </NuxtLink>
  178. </div>
  179. </div>
  180. <div class="listNewsContentRight">
  181. <div class="listNewsContentRightBottom">
  182. <div v-for="item in component_style1_News2Array_2">
  183. <NuxtLink :href="getLinkPathDetail(item)" :title="item.title"
  184. :target="item.islink == 1 ? '_blank' : '_self'">
  185. {{ item.title }}
  186. </NuxtLink>
  187. </div>
  188. </div>
  189. <div class="listNewsContentLeftTop" v-for="item in component_style1_News1Array_2">
  190. <NuxtLink :href="getLinkPathDetail(item)" :title="item.title"
  191. :target="item.islink == 1 ? '_blank' : '_self'">
  192. <img :src="item.imgurl" />
  193. <div class="listNewsContentLeftTopTitle">{{ item.title }}</div>
  194. </NuxtLink>
  195. </div>
  196. </div>
  197. </div>
  198. <!--样式7-->
  199. <div class="listNewsContent_style listNewsStyle3 listNewsStyle5" v-if="componentStyle == 7">
  200. <div class="listNewsContentLeft">
  201. <div class="listNewsContentLeftBottom">
  202. <div v-for="item in component_style1_News2Array_1">
  203. <NuxtLink :href="getLinkPathDetail(item)" :title="item.title"
  204. :target="item.islink == 1 ? '_blank' : '_self'">
  205. {{ item.title }}
  206. </NuxtLink>
  207. </div>
  208. </div>
  209. <div class="listNewsContentLeftTop" v-for="item in component_style1_News1Array_1">
  210. <NuxtLink :href="getLinkPathDetail(item)" :title="item.title"
  211. :target="item.islink == 1 ? '_blank' : '_self'">
  212. <img :src="item.imgurl" />
  213. <div class="listNewsContentLeftTopTitle">{{ item.title }}</div>
  214. </NuxtLink>
  215. </div>
  216. </div>
  217. <div class="listNewsContentRight">
  218. <div class="listNewsContentLeftTop" v-for="item in component_style1_News1Array_2">
  219. <NuxtLink :href="getLinkPathDetail(item)" :title="item.title"
  220. :target="item.islink == 1 ? '_blank' : '_self'">
  221. <img :src="item.imgurl" />
  222. <div class="listNewsContentLeftTopTitle">{{ item.title }}</div>
  223. </NuxtLink>
  224. </div>
  225. <div class="listNewsContentRightBottom">
  226. <div v-for="item in component_style1_News2Array_2">
  227. <NuxtLink :href="getLinkPathDetail(item)" :title="item.title"
  228. :target="item.islink == 1 ? '_blank' : '_self'">
  229. {{ item.title }}
  230. </NuxtLink>
  231. </div>
  232. </div>
  233. </div>
  234. </div>
  235. <!--样式8-->
  236. <div class="listNewsContent_style listNewsStyle4 listNewsStyle5" v-if="componentStyle == 8">
  237. <div class="listNewsContentLeft">
  238. <div class="listNewsContentLeftTop" v-for="item in component_style1_News1Array_1">
  239. <NuxtLink :href="getLinkPathDetail(item)" :title="item.title"
  240. :target="item.islink == 1 ? '_blank' : '_self'">
  241. <img :src="item.imgurl" />
  242. <div class="listNewsContentLeftTopTitle">{{ item.title }}</div>
  243. </NuxtLink>
  244. </div>
  245. <div class="listNewsContentLeftBottom">
  246. <div v-for="item in component_style1_News2Array_1">
  247. <NuxtLink :href="getLinkPathDetail(item)" :title="item.title"
  248. :target="item.islink == 1 ? '_blank' : '_self'">
  249. {{ item.title }}
  250. </NuxtLink>
  251. </div>
  252. </div>
  253. </div>
  254. <div class="listNewsContentRight">
  255. <div class="listNewsContentRightBottom">
  256. <div v-for="item in component_style1_News2Array_2">
  257. <NuxtLink :href="getLinkPathDetail(item)" :title="item.title"
  258. :target="item.islink == 1 ? '_blank' : '_self'">
  259. {{ item.title }}
  260. </NuxtLink>
  261. </div>
  262. </div>
  263. <div class="listNewsContentLeftTop" v-for="item in component_style1_News1Array_2">
  264. <NuxtLink :href="getLinkPathDetail(item)" :title="item.title"
  265. :target="item.islink == 1 ? '_blank' : '_self'">
  266. <img :src="item.imgurl" />
  267. <div class="listNewsContentLeftTopTitle">{{ item.title }}</div>
  268. </NuxtLink>
  269. </div>
  270. </div>
  271. </div>
  272. </div>
  273. </template>
  274. <script setup>
  275. //引入vue
  276. import { ref } from 'vue';
  277. //获得新闻数据
  278. const props = defineProps({
  279. titleLink: Object,//板块名称
  280. templateData: Array,//新闻数据
  281. componentStyle: Number,//样式编号
  282. });
  283. //样式1与样式2共用 start ---------------------------------------->
  284. const component_style1_News1Array = ref([]);
  285. const component_style1_News1Array_1 = ref([]);
  286. const component_style1_News1Array_2 = ref([]);
  287. const component_style1_News2Array = ref([]);
  288. const component_style1_News2Array_1 = ref([]);
  289. const component_style1_News2Array_2 = ref([]);
  290. component_style1_News1Array.value = props.templateData.imgnum.slice(0, 2);
  291. component_style1_News1Array_1.value = props.templateData.imgnum.slice(0, 1);
  292. component_style1_News1Array_2.value = props.templateData.imgnum.slice(1, 2);
  293. component_style1_News2Array.value = props.templateData.textnum;
  294. component_style1_News2Array_1.value = props.templateData.textnum.slice(0, 7);
  295. component_style1_News2Array_2.value = props.templateData.textnum.slice(7, 14);
  296. //样式1与样式2共用 end ---------------------------------------->
  297. </script>
  298. <style lang="less" scoped>
  299. //基本样式 start ---------------------------------------->
  300. // 样式1,2基本样式
  301. .listNewsBox {
  302. position: relative;
  303. .listNewsTitle {
  304. font-size: 22px;
  305. font-weight: bold;
  306. height: 40px;
  307. line-height: 40px;
  308. border-bottom: 2px solid #004564;
  309. color: #004564;
  310. margin-bottom: 20px;
  311. box-sizing: border-box;
  312. a {
  313. color: #004564;
  314. display: block;
  315. height: 25px;
  316. line-height: 25px;
  317. }
  318. }
  319. .listNewsContent {
  320. .listNewsContentTop {
  321. width: 720px;
  322. height: 247px;
  323. display: flex;
  324. align-items: center;
  325. justify-content: space-between;
  326. margin-bottom: 20px;
  327. .listNewsContentLeftTop {
  328. position: relative;
  329. img {
  330. width: 350px;
  331. height: 245px;
  332. display: block;
  333. }
  334. .listNewsContentLeftTopTitle {
  335. position: absolute;
  336. bottom: 0;
  337. z-index: 1;
  338. width: 100%;
  339. color: #fff;
  340. height: 44px;
  341. background: linear-gradient(0deg, rgba(0, 0, 0, 0.5) 33%, rgba(0, 0, 0, 0) 100%);
  342. box-sizing: border-box;
  343. padding: 0 10px;
  344. overflow: hidden;
  345. text-overflow: ellipsis;
  346. white-space: nowrap;
  347. line-height: 44px;
  348. font-size: 18px;
  349. }
  350. }
  351. }
  352. .listNewsContentBottom {
  353. display: flex;
  354. flex-wrap: wrap;
  355. justify-content: space-between;
  356. div {
  357. color: #333333;
  358. font-size: 18px;
  359. line-height: 25px;
  360. height: 25px;
  361. margin-bottom: 20px;
  362. overflow: hidden;
  363. text-overflow: ellipsis;
  364. white-space: nowrap;
  365. width: 345px;
  366. &:last-child {
  367. margin-bottom: 0;
  368. }
  369. &:nth-child(1),
  370. &:nth-child(2),
  371. &:nth-child(7),
  372. &:nth-child(8) {
  373. font-weight: bold;
  374. }
  375. a {
  376. color: #333333;
  377. }
  378. }
  379. }
  380. }
  381. }
  382. // 样式3至样式8基本样式
  383. .listNewsContent_style {
  384. display: flex;
  385. justify-content: space-between;
  386. .listNewsContentLeft,
  387. .listNewsContentRight {
  388. width: 350px;
  389. height: 560px;
  390. .listNewsContentLeftTop {
  391. position: relative;
  392. margin-bottom: 20px;
  393. img {
  394. width: 350px;
  395. height: 247px;
  396. display: block;
  397. }
  398. .listNewsContentLeftTopTitle {
  399. position: absolute;
  400. bottom: 0;
  401. z-index: 1;
  402. width: 100%;
  403. color: #fff;
  404. height: 44px;
  405. background: linear-gradient(0deg, rgba(0, 0, 0, 0.5) 33%, rgba(0, 0, 0, 0) 100%);
  406. box-sizing: border-box;
  407. padding: 0 10px;
  408. overflow: hidden;
  409. text-overflow: ellipsis;
  410. white-space: nowrap;
  411. line-height: 44px;
  412. font-size: 18px;
  413. }
  414. }
  415. .listNewsContentLeftBottom,
  416. .listNewsContentRightBottom {
  417. div {
  418. color: #333333;
  419. font-size: 18px;
  420. line-height: 25px;
  421. height: 25px;
  422. margin-bottom: 20px;
  423. overflow: hidden;
  424. text-overflow: ellipsis;
  425. white-space: nowrap;
  426. &:last-child {
  427. margin-bottom: 0;
  428. }
  429. &:nth-child(1),
  430. &:nth-child(4) {
  431. font-weight: bold;
  432. }
  433. a{
  434. color: #333333;
  435. }
  436. }
  437. }
  438. }
  439. }
  440. //基本样式 end ---------------------------------------->
  441. //样式3
  442. .listNewsStyle3 {
  443. .listNewsContentLeft {
  444. .listNewsContentLeftBottom {
  445. margin-bottom: 20px;
  446. }
  447. }
  448. }
  449. //样式4
  450. .listNewsStyle4 {
  451. .listNewsContentRight {
  452. .listNewsContentRightBottom {
  453. margin-bottom: 20px;
  454. }
  455. }
  456. }
  457. //样式5
  458. .listNewsBox {
  459. .listNewsStyle5 {
  460. .listNewsContentLeft {
  461. .listNewsContentLeftBottom {
  462. div {
  463. &:nth-child(1),
  464. &:nth-child(4) {
  465. font-weight: 400;
  466. }
  467. }
  468. }
  469. }
  470. .listNewsContentRight {
  471. .listNewsContentRightBottom {
  472. div {
  473. &:nth-child(1),
  474. &:nth-child(4) {
  475. font-weight: 400;
  476. }
  477. }
  478. }
  479. }
  480. }
  481. }
  482. //样式6
  483. .listNewsStyle6 {
  484. .listNewsContentLeft,.listNewsContentRight {
  485. .listNewsContentLeftTop {
  486. margin-top: 20px;
  487. }
  488. }
  489. }
  490. </style>