footprint-list.vue 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184
  1. <template>
  2. <mescroll-uni ref="mescrollRef" :top="positionTop" left="" @init="mescrollInit" @down="downCallback"
  3. @up="upCallback" :down="downOption" :up="upOption" style="left: 100px;">
  4. <view class="content">
  5. <!-- 搜索 -->
  6. <!-- <view>
  7. <u-search v-model="keyword" wrap-bg-color="transparent" bg-color="#ffffff" :disabled="false" :height="54"
  8. shape="square" @search="searchTalents"></u-search>
  9. </view> -->
  10. <!-- 列表 -->
  11. <view class="talents-item m-t-16" v-for="(item, index) in talentsList" :key="index">
  12. <!-- 人才 -->
  13. <router-link :to="{ path: '/pages/talents/detail', query: { id: item.id }}">
  14. <view class="flex row-between">
  15. <text
  16. style="width: 12rpx;height: 12rpx;background: #DD4250;border-radius: 50%; margin-right: 20rpx;"></text>
  17. <view class="flex-1 bold">{{ item.title }}</view>
  18. <view class="p-l-20 p-r-20 primary" v-if="item.position">
  19. {{ item.position }}
  20. </view>
  21. </view>
  22. <!-- 内容 -->
  23. <view style="font-size: 24rpx;">
  24. <view class="flex row-between m-t-16">
  25. <view class="line-2 flex-1" v-if="item.chain">产业链:{{ item.chain }}</view>
  26. <view class="flex" @tap.stop="makePhoneCall(item.tel)">
  27. <u-icon name="phone-fill" color="#DD4250" size="28"></u-icon>
  28. <view class="m-l-20">{{ phoneNumHide(item.tel) }}</view>
  29. </view>
  30. </view>
  31. <view class="m-t-16" v-if="item.company">单位:{{ item.company }}</view>
  32. <view class="m-t-16" v-if="item.module == 'base'">负责人:{{ item.principal }}</view>
  33. <view class="m-t-16" v-if="item.module == 'pedigreeCompany'">法人:{{ item.principal }}</view>
  34. <view class="m-t-16" v-if="item.module == 'firm'">秘书长:{{ item.principal }}</view>
  35. <view class="m-t-16 line-2">
  36. <text v-if="item.module == 'talent'">研究领域:</text>
  37. <text v-else-if="item.module == 'base'">基地特色:</text>
  38. <text v-else-if="item.module == 'university' || item.module == 'association'">研究方向:</text>
  39. <text v-else-if="item.module == 'fund'">投资产业领域:</text>
  40. <text v-else-if="item.module == 'pedigreeCompany'">主要产品:</text>
  41. <text v-else-if="item.module == 'pedigree'">个人简介:</text>
  42. <text v-else>简介:</text>
  43. <text>{{ item.description }}</text>
  44. </view>
  45. <view class="flex m-t-16 p-t-16" style="border-top: 2rpx solid #DEDEDE;;">
  46. <u-icon name="map-fill" color="#DD4250" size="28"></u-icon>
  47. <view class="m-l-10">{{ item.city }}{{ item.address }}</view>
  48. </view>
  49. </view>
  50. </router-link>
  51. </view>
  52. </view>
  53. <loading-view v-if="showLoading" background-color="transparent" :size="50"></loading-view>
  54. </mescroll-uni>
  55. </template>
  56. <script>
  57. import MescrollMixin from "@/components/mescroll-uni/mescroll-mixins.js";
  58. import MescrollMoreItemMixin from "@/components/mescroll-uni/mixins/mescroll-more-item.js";
  59. import {
  60. getTalentsFootprintList
  61. } from '@/api/app';
  62. export default {
  63. mixins: [MescrollMixin, MescrollMoreItemMixin],
  64. data() {
  65. return {
  66. statusBarHeight: 0,
  67. talentsList: [],
  68. downOption: {
  69. // use: false,
  70. auto: false // 不自动加载 (mixin已处理第一个tab触发downCallback)
  71. },
  72. upOption: {
  73. auto: true, // 不自动加载
  74. noMoreSize: 4, //如果列表已无数据,可设置列表的总数量要大于半页才显示无更多数据;避免列表数据过少(比如只有一条数据),显示无更多数据会不好看; 默认5
  75. empty: {
  76. icon: '/static/images/order_null.png',
  77. tip: '暂无数据~', // 提示
  78. fixed: true,
  79. top: '100rpx'
  80. }
  81. },
  82. showLoading: false
  83. };
  84. },
  85. props: {
  86. },
  87. created() {
  88. uni.$on("refreshTalentsFootprintList", (params) => {
  89. this.refresh()
  90. })
  91. uni.getSystemInfo({
  92. success: (res) => {
  93. this.statusBarHeight = res.statusBarHeight;
  94. }
  95. });
  96. },
  97. destroyed() {
  98. uni.$off("refreshTalentsFootprintList")
  99. },
  100. computed: {
  101. positionTop() {
  102. return (this.statusBarHeight)
  103. },
  104. phoneNumHide(tel) {
  105. return (tel) => {
  106. return tel.substring(0, 3) + '****' + tel.substring(7);
  107. }
  108. },
  109. },
  110. methods: {
  111. refresh() {
  112. this.mescroll.resetUpScroll()
  113. },
  114. makePhoneCall(tel) {
  115. if (tel) {
  116. uni.makePhoneCall({
  117. phoneNumber: tel
  118. });
  119. }
  120. },
  121. searchTalents() {
  122. let {
  123. keyword
  124. } = this;
  125. if (!keyword) {
  126. this.$toast({
  127. title: '请输入关键字'
  128. })
  129. return;
  130. }
  131. this.downCallback();
  132. },
  133. upCallback(page) {
  134. let pageNum = page.num; // 页码, 默认从1开始
  135. let pageSize = page.size; // 页长, 默认每页10条
  136. getTalentsFootprintList({
  137. page_size: pageSize,
  138. page_no: pageNum
  139. }).then(({
  140. data,
  141. _meta
  142. }) => {
  143. let curPageData = data;
  144. let curPageLen = curPageData.length;
  145. let hasNext = _meta.pageCount > _meta.currentPage;
  146. if (page.num == 1) this.talentsList = [];
  147. this.talentsList = this.talentsList.concat(curPageData);
  148. this.mescroll.endSuccess(curPageLen, hasNext);
  149. })
  150. }
  151. },
  152. };
  153. </script>
  154. <style lang="scss" scoped>
  155. // /deep/ .mescroll-uni-fixed {
  156. // left: 250rpx !important;
  157. // }
  158. .content {
  159. padding: 16rpx;
  160. }
  161. .u-search {
  162. padding: 0;
  163. }
  164. .talents-item {
  165. background: #FFFFFF;
  166. box-shadow: 0rpx 8rpx 16rpx 2rpx rgba(0, 0, 0, 0.03);
  167. border-radius: 12rpx 12rpx 12rpx 12rpx;
  168. padding: 24rpx 16rpx;
  169. font-size: 28rpx;
  170. }
  171. .u-content {}
  172. </style>