index.vue 9.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290
  1. <template>
  2. <view class="index">
  3. <view class="index-header">
  4. <view class="index-header-container">
  5. <!-- <view class="index-header-left"></view>
  6. <view class="index-header-right"></view>
  7. <view class="index-header-top">
  8. <u-search placeholder="请输入您关键词" v-model="headerTopKeyword" :show-action="false"
  9. class="header-top-usearch"></u-search>
  10. <view class="header-top-notice" @tap="openPage('pages/notification/notification')">
  11. <u-icon name="bell" color="#FFFFFF" size="48"></u-icon>
  12. <u-badge size="mini" type="error" :count="unreadInfoNum" :absolute="false"
  13. class="header-top-notice-badge">
  14. </u-badge>
  15. </view>
  16. <view class="header-top-scan">
  17. <u-icon name="scan" color="#FFFFFF" size="48" class="header-scan-icon"></u-icon>
  18. </view>
  19. </view> -->
  20. <view class="index-header-banner">
  21. <u-swiper
  22. :list="bannerList"
  23. name="bannerUrl"
  24. border-radius="0"
  25. mode="round"
  26. height="380"
  27. img-mode="scaleToFill"
  28. @click="swiperClick"
  29. :mode="bannerList.length > 1 ? 'round' : 'none'"
  30. />
  31. </view>
  32. </view>
  33. </view>
  34. <!-- 滚动通知 -->
  35. <view class="notice">
  36. <u-notice-bar
  37. mode="horizontal"
  38. :type="unreadInfoNum > 0 ? 'primary' : 'none'"
  39. :list="noticeList"
  40. bg-color="#fff"
  41. duration="2000"
  42. @click="noticeBarClick"
  43. />
  44. </view>
  45. <!-- 宫格 -->
  46. <view class="service">
  47. <view class="service-body u-flex u-flex-wrap u-row-left">
  48. <view class="service-item" @click="openPage('pages/policyInfo/policyInfo')">
  49. <image class="service-item-img" src="../../static/img/index-service-01.png" mode="aspectFill"> </image>
  50. <view class="service-item-text">政策资讯</view>
  51. </view>
  52. <view class="service-item" @click="openPage('pages/recruitment/recruitment')">
  53. <image class="service-item-img" src="../../static/img/index-service-02.png" mode="aspectFill"> </image>
  54. <view class="service-item-text">招聘就业</view>
  55. </view>
  56. <view class="service-item" @click="openPage('pages/cooperativeEnterprise/cooperativeEnterprise')">
  57. <image class="service-item-img" src="../../static/img/index-service-03.png" mode="aspectFill"> </image>
  58. <view class="service-item-text">合作企业</view>
  59. </view>
  60. <view class="service-item" @click="openPage('pages/schools/schools')">
  61. <image class="service-item-img" src="../../static/img/index-service-04.png" mode="aspectFill"> </image>
  62. <view class="service-item-text">合作院校</view>
  63. </view>
  64. <view class="service-item" @click="openPage('pages/skillsTraining/skillsTraining')">
  65. <image class="service-item-img" src="../../static/img/index-service-05.png" mode="aspectFill"> </image>
  66. <view class="service-item-text">技能培训</view>
  67. </view>
  68. <view class="service-item" @click="openPage('pages/basicTraining/basicTraining')">
  69. <image class="service-item-img" src="../../static/img/index-service-06.png" mode="aspectFill"> </image>
  70. <view class="service-item-text">适应性培训</view>
  71. </view>
  72. <view class="service-item" @click="openPage('pages/upgrade/upgrade/upgrade')">
  73. <image class="service-item-img" src="../../static/img/index-service-07.png" mode="aspectFill"> </image>
  74. <view class="service-item-text">学历提升</view>
  75. </view>
  76. <view class="service-item" @click="openPage('pages/entrepreneurshipGuidelines/entrepreneurshipGuidelines')">
  77. <image class="service-item-img" src="../../static/img/index-service-08.png" mode="aspectFill"> </image>
  78. <view class="service-item-text">创业指导</view>
  79. </view>
  80. </view>
  81. </view>
  82. <!-- 新闻动态 -->
  83. <view class="news">
  84. <u-card
  85. class="news-list"
  86. :body-style="{ 'padding-top': 0 }"
  87. :border="false"
  88. :foot-border-top="false"
  89. :head-border-bottom="false"
  90. :full="true"
  91. :border-radius="10"
  92. margin="0"
  93. >
  94. <view class="news-list-head" slot="head">
  95. <view class="news-list-head-item">
  96. <view class="card-head-title">新闻动态</view>
  97. <view @click="openPage('/pages/newsInformation/newsInformation')">更多<u-icon name="arrow-right" color="#d2d3d5"></u-icon> </view>
  98. </view>
  99. </view>
  100. <view class="news-list-body" slot="body">
  101. <u-nodata notice="暂无新闻" v-if="newsList.length == 0"></u-nodata>
  102. <view
  103. v-for="(item, index) in newsList"
  104. @click="newsItemClick(item)"
  105. :key="index"
  106. class="news-list-body-item u-body-item u-flex u-col-between u-row-between"
  107. >
  108. <view class="news-text">
  109. <view class="news-text-title u-body-item-title u-line-2">{{ item.artTitle }}</view>
  110. <view class="news-text-foot foot u-flex u-flex-wrap">
  111. <view>{{ item.artCategoryName }}</view>
  112. <view>{{ $u.timeFormat(item.createTime.replace(/-/g, '/'), 'mm-dd hh:MM') }}</view>
  113. </view>
  114. </view>
  115. <view class="image-border">
  116. <u-image :src="item.artImage" mode="aspectFill" width="160" height="120" border-radius="10">
  117. <view slot="error">
  118. <u-image src="../../static/img/default-news.png" mode="aspectFill" width="160" height="120" border-radius="10" />
  119. </view>
  120. </u-image>
  121. </view>
  122. </view>
  123. </view>
  124. </u-card>
  125. </view>
  126. <!-- ########################## -- 底部导航栏 -- ################################ -->
  127. <u-tabbar
  128. :list="tabbarConfig.tabbarList"
  129. :height="tabbarConfig.height"
  130. :mid-button="tabbarConfig.midButton"
  131. :inactive-color="tabbarConfig.inactiveColor"
  132. :active-color="tabbarConfig.activeColor"
  133. :mid-button-size="tabbarConfig.midButtonSize"
  134. />
  135. </view>
  136. </template>
  137. <script>
  138. import tabbarconfig from 'tabbarconfig.js';
  139. export default {
  140. data() {
  141. return {
  142. unreadInfoNum: 0,
  143. headerTopKeyword: '',
  144. paginationConfig: {
  145. pageNo: 1,
  146. pageSize: 10
  147. },
  148. // 轮播图
  149. bannerList: [
  150. {
  151. bannerUrl: '../../static/img/default.png'
  152. }
  153. ],
  154. // 新闻列表
  155. newsList: [],
  156. // 消息通知
  157. noticeList: [],
  158. // 自定义tabbar
  159. tabbarConfig: tabbarconfig
  160. };
  161. },
  162. onLoad() {},
  163. onShow() {
  164. this.getUnreadInfoNum();
  165. this.getBannerList();
  166. this.getNewsList();
  167. this.getNewestInfo();
  168. },
  169. methods: {
  170. /**
  171. * 打开新页面
  172. * @param {String} path 跳转路径
  173. * */
  174. openPage(path, msg) {
  175. let tempRoute = {
  176. url: path
  177. };
  178. if (msg) {
  179. tempRoute.params = {
  180. msg: msg
  181. };
  182. }
  183. this.$u.route(tempRoute);
  184. },
  185. /**
  186. * 获取未读消息条数
  187. */
  188. getUnreadInfoNum() {
  189. this.$u.api.indexApi.getUnreadInfoNumApi().then((res) => {
  190. if (res?.code === 200) {
  191. this.unreadInfoNum = res.data;
  192. }
  193. });
  194. },
  195. /**
  196. * 获取最新三条信息
  197. */
  198. getNewestInfo() {
  199. this.$u.api.indexApi.getNewestInfoApi().then((res) => {
  200. if (res?.code === 200) {
  201. this.noticeList = res.data.map((item) => {
  202. return item.name;
  203. });
  204. }
  205. });
  206. },
  207. /**
  208. * 获取新闻列表
  209. */
  210. getNewsList() {
  211. let params = {
  212. artCategoryId: 2,
  213. pageNum: 1,
  214. pageSize: 5
  215. };
  216. this.$u.api.indexApi.getIndexNewsListApi(params).then((res) => {
  217. if (res?.code == 200) {
  218. this.newsList = res.rows;
  219. }
  220. });
  221. },
  222. /**
  223. * 获取轮播广告
  224. */
  225. getBannerList() {
  226. this.$u.api.indexApi
  227. .indexBannerListApi({
  228. type: 0
  229. })
  230. .then((res) => {
  231. if (res?.code === 200) {
  232. this.bannerList = res.data.map((item) => {
  233. return {
  234. ...item,
  235. image: item.bannerUrl,
  236. title: item.name
  237. };
  238. });
  239. } else {
  240. }
  241. });
  242. },
  243. /**
  244. * 轮播图点击
  245. * @param {Object} index
  246. */
  247. swiperClick(index) {
  248. if (this.bannerList[index].jumpUrl) {
  249. location.href = this.bannerList[index].jumpUrl
  250. } else {
  251. this.$u.route({
  252. url: 'pages/bannerDetails/bannerDetails',
  253. params: {
  254. id: this.bannerList[index].id,
  255. type: 0
  256. }
  257. });
  258. }
  259. },
  260. /**
  261. * 滚动条
  262. */
  263. noticeBarClick() {
  264. this.openPage('pages/notification/notification');
  265. },
  266. /**
  267. * @description: 新闻点击
  268. * @param {*} item
  269. * @return {*}
  270. */
  271. newsItemClick(item) {
  272. let routeUrl = '/pages/newsDetails/newsDetails';
  273. if (item.artLinkUrl) {
  274. location.href = item.artLinkUrl
  275. } else {
  276. this.$u.route(routeUrl, { artId: item.artId });
  277. }
  278. }
  279. }
  280. };
  281. </script>
  282. <style lang="scss" scoped>
  283. @import './index.scss';
  284. </style>