123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345 |
- <template>
- <view class="page-content experts">
- <view class="page-header experts-header">
- <view class="experts-header-field">
- <picker @change="bindPickerChange" :value="expertsFieldIndex" :range="expertsFieldList">
- <view class="field-content">
- <view class="field-img">
- <u-icon name="list" size="54" class="field-icon"></u-icon>
- </view>
- <view class="field-text">{{ expertsFieldList[expertsFieldIndex] }}</view>
- </view>
- </picker>
- </view>
- </view>
- <view class="page-main experts-content">
- <view class="experts-content-main">
- <scroll-view scroll-y="true" class="scroll-Y" @scrolltolower="handleScrolltolower">
- <view class="experts-content-main-listbody">
- <template v-if="expertsMainObj.list_empty">
- <view class="experts-content-main-nodata">
- <text class="expertsmain-nodata">暂无数据</text>
- </view>
- </template>
- <template>
- <u-row gutter="16" class="listbody-row">
- <u-col
- span="12"
- class="listbody-col"
- v-for="expertsModalItem in expertsMainObj.expertsModalList"
- :key="expertsModalItem.id"
- >
- <view class="listbody-item">
- <view class="item-content">
- <view class="item-content-sub item-content-left">
- <text class="item-content-text">姓名:{{ expertsModalItem.professorName }}</text>
- </view>
- <view class="item-content-sub item-content-right">
- <text class="item-content-text">职称:{{ expertsModalItem.title }}</text>
- </view>
- </view>
- <view class="item-content">
- <view class="item-content-sub item-content-left">
- <text class="item-content-text">年龄:{{ expertsModalItem.age }}</text>
- </view>
- <view class="item-content-sub item-content-right">
- <text class="item-content-text">性别:{{ expertsModalItem.sex }}</text>
- </view>
- </view>
- <view class="item-content">
- <view class="item-content-sub item-content-field">
- <text class="item-content-text">专业领域:{{ expertsModalItem.professorField }}</text>
- </view>
- </view>
- <view class="item-content">
- <view class="item-content-sub item-content-institution">
- <text class="item-content-text">供职单位:{{ expertsModalItem.institution }}</text>
- </view>
- </view>
- </view>
- </u-col>
- </u-row>
- </template>
- <uni-load-more :status="expertsMainObj.loadStatus" v-if="!expertsMainObj.list_empty"></uni-load-more>
- </view>
- </scroll-view>
- </view>
- <view class="experts-content-btn">
- <view class="experts-consultbtn">
- <view class="consultbtn-text" @click="handleConsultExpertsClick">咨询专家</view>
- </view>
- </view>
- </view>
- </view>
- </template>
- <script>
- import {
- expertsMainListData,
- expertsMainFieldListData
- } from '@/agrcloud-api/expertsmodal';
- import uniLoadMore from "@/agrcloud-components/uni-load-more/uni-load-more"
- export default {
- name: 'experts',
- components: {
- uniLoadMore
- },
- data() {
- return {
- expertsFieldIndex: 0,
- expertsFieldList: ["全部"],
- currExpertsFieldValue: '',
- expertsMainObj: {
- loadStatus: 'more',
- list_empty: false,
- pageTotal: 0,
- pageCount: 0,
- pagination: {
- pageNum: 1,
- pageSize: 10
- },
- listData: []
- }
- };
- },
- onLoad() {
- this.initData();
- },
- methods: {
- initData() {
- this.getExpertsMainFieldListData();
- },
- getExpertsMainFieldListData() {
- expertsMainFieldListData().then((res) => {
- this.expertsFieldList = [...this.expertsFieldList, ...res.data || []];
- this.getExpertsMainListData();
- });
- },
- bindPickerChange: function (e) {
- this.expertsFieldIndex = e.target.value;
- const currPickerChangeField = this.expertsFieldList[e.target.value];
- this.currExpertsFieldValue = (currPickerChangeField != '全部') ? currPickerChangeField : '';
- this.expertsMainObj.pagination.pageNum = 1;
- this.getExpertsMainListData();
- },
- getExpertsMainListData() {
- this.expertsMainObj = {
- ...this.expertsMainObj,
- list_empty: false,
- loadStatus: 'loading',
- pageTotal: 0
- };
- // 请求获取列表数据
- expertsMainListData({
- ...this.expertsMainObj.pagination,
- professorField: this.currExpertsFieldValue
- }).then(res => {
- // 数据总条数
- this.expertsMainObj.pageTotal = res.total || 0;
- // 如果列表为第一页,返回列表数据清空
- if (this.expertsMainObj.pagination.pageNum == 1) {
- this.expertsMainObj.expertsModalList = [];
- };
- // 处理返回结果
- if ((res.rows || []).length <= 0) { // 返回结果没有数据
- if ((this.expertsMainObj.expertsModalList || []).length <= 0) {
- this.expertsMainObj.loadStatus = 'noMores';
- this.expertsMainObj.list_empty = true;
- } else {
- this.expertsMainObj.loadStatus = 'noMores';
- }
- } else { //返回结果有数据
- //返回历史咨询列表存在
- this.expertsMainObj.list_empty = false;
- // 获取列表数据分页数量
- this.expertsMainObj.pageCount = Math.ceil((res.total || 0) / this.expertsMainObj.pagination.pageSize);
- if ((res.total || 0) % this.expertsMainObj.pagination.pageSize == 0) {
- this.expertsMainObj.pageCount = Math.ceil((res.total || 0) / this.expertsMainObj.pagination.pageSize);
- if (this.expertsMainObj.pageCount == 1) {
- this.expertsMainObj.pageCount--;
- }
- } else {
- this.expertsMainObj.pageCount--;
- };
- // 处理页面状态
- if (this.expertsMainObj.pageCount === 0) {
- this.expertsMainObj.loadStatus = 'noMores'
- } else {
- this.expertsMainObj.loadStatus = 'more'
- }
- // 组装返回数据
- this.expertsMainObj.expertsModalList.push.apply(this.expertsMainObj.expertsModalList, res.rows || []);
- uni.stopPullDownRefresh();
- }
- }).catch(err => {
- this.expertsMainObj.loadStatus = 'noMores';
- });
- },
- handleScrolltolower() {
- this.expertsMainObj.loadStatus = 'loading'
- if (this.expertsMainObj.pagination.pageNum - 1 >= this.expertsMainObj.pageCount) {
- this.expertsMainObj.loadStatus = 'noMores';
- return
- } else {
- this.expertsMainObj.pagination.pageNum++;
- this.getExpertsMainListData();
- }
- },
- handleConsultExpertsClick() {
- uni.navigateTo({
- url: '/pages/experts/modal/index'
- });
- }
- }
- }
- </script>
- <style lang="scss"
- scoped>
- .experts {
- padding: 0;
- &-header {
- width: 100%;
- background: #ffffff;
- &-field {
- margin: 24rpx;
- width: 100%;
- height: 56rpx;
- line-height: 56rpx;
- .field-content {
- display: flex;
- .field-img {
- flex: 1;
- margin-top: 4rpx;
- }
- .field-text {
- flex: 10;
- height: 56rpx;
- font-size: 34rpx;
- font-family: PingFangSC-Medium, PingFang SC;
- font-weight: 500;
- color: #333333;
- line-height: 56rpx;
- }
- }
- }
- }
- &-content {
- width: 100%;
- .experts-content-main {
- .scroll-Y {
- height: calc(
- 100vh - 88rpx - 236rpx - env(safe-area-inset-bottom) -
- var(--status-bar-height)
- );
- }
- .experts-content-main-listbody {
- .experts-content-main-nodata {
- text-align: center;
- margin-top: 20rpx;
- .expertsmain-nodata {
- font-size: 30rpx;
- color: #777777;
- }
- }
- .listbody-row {
- .listbody-col {
- padding: 24rpx 0 0 0 !important;
- .listbody-item {
- background: #ffffff;
- min-height: 288rpx;
- width: 100%;
- padding-bottom: 24rpx;
- .item-content {
- display: flex;
- padding-top: 24rpx;
- &-sub {
- flex: 1;
- }
- &-left {
- padding-left: 24rpx;
- }
- &-right {
- padding-right: 24rpx;
- }
- &-field {
- padding: 0rpx 24rpx 0rpx 24rpx;
- }
- &-institution {
- padding: 0rpx 24rpx 0rpx 24rpx;
- }
- &-text {
- height: 42rpx;
- font-size: 30rpx;
- font-family: PingFangSC-Regular, PingFang SC;
- font-weight: 400;
- color: #666666;
- line-height: 42rpx;
- }
- }
- }
- }
- }
- }
- }
- &-btn {
- width: 100%;
- position: fixed;
- bottom: 40rpx;
- padding: 16rpx 32rpx;
- .experts-consultbtn {
- width: 686rpx;
- height: 88rpx;
- background: #53a0fd;
- border-radius: 4rpx;
- width: 100%;
- display: flex;
- flex-direction: column;
- align-items: center;
- justify-content: center;
- .consultbtn-text {
- height: 50rpx;
- font-size: 36rpx;
- font-family: PingFangSC-Regular, PingFang SC;
- font-weight: 400;
- color: #ffffff;
- line-height: 50rpx;
- }
- }
- }
- }
- }
- </style>
|