|
@@ -0,0 +1,281 @@
|
|
|
+<template>
|
|
|
+ <view class="tab1 flex flex-col">
|
|
|
+ <view class="tag-box">
|
|
|
+ <view class="tag-item" :class="{ active: params.status === 'undefined' }" @click="toggleStatus('undefined')">全部</view>
|
|
|
+ <view class="tag-item" :class="{ active: params.status === false }" @click="toggleStatus(false)"
|
|
|
+ >未读
|
|
|
+ <view class="red"></view>
|
|
|
+ </view>
|
|
|
+ <view class="tag-item" :class="{ active: params.status === true }" @click="toggleStatus(true)">已读</view>
|
|
|
+ </view>
|
|
|
+ <scroll-view
|
|
|
+ :scroll-top="scrollTop"
|
|
|
+ scroll-y="true"
|
|
|
+ refresher-enabled="true"
|
|
|
+ class="scroll-Y"
|
|
|
+ :refresher-triggered="triggered"
|
|
|
+ refresher-background="transparent"
|
|
|
+ @refresherrefresh="onRefresh"
|
|
|
+ @scrolltolower="scrolltolower"
|
|
|
+ >
|
|
|
+ <view class="msg-item" v-for="(item, index) in list" :key="index">
|
|
|
+ <view class="m-head flex items-center justify-between">
|
|
|
+ <view class="m-title">
|
|
|
+ <text class="title">{{ MESSAGE_TYPE[item.messageType] }}</text>
|
|
|
+ <!-- <view class="tag">未读</view> -->
|
|
|
+ <u-tag text="未读" v-if="!item.readStatus" type="error" size="mini" />
|
|
|
+ </view>
|
|
|
+ <view class="m-time">{{ dateFormat(item.sendTime, 'yyyy-MM-dd hh:mm') }}</view>
|
|
|
+ </view>
|
|
|
+ <view class="m-body rd-12rpx p-24rpx flex flex-wrap">
|
|
|
+ <view class="key-value"> 发起人:{{ item.formUser }} </view>
|
|
|
+ <view class="key-value"> 服务单元:{{ item.service }} </view>
|
|
|
+ <view class="key-value"> 客户类型:{{ item.customType }} </view>
|
|
|
+ <view class="key-value"> 客户名称:{{ item.custom }} </view>
|
|
|
+ </view>
|
|
|
+ <view class="m-foot text-right">
|
|
|
+ <u-button type="primary" size="mini" plain>查看</u-button>
|
|
|
+ </view>
|
|
|
+ </view>
|
|
|
+ <view class="bottom">
|
|
|
+ <u-loading v-if="loadingFlag == 1" mode="flower" size="44"></u-loading>
|
|
|
+ <view v-if="loadingFlag == 2" class="text flex items-center"> <view class="line"></view>我是有底线的<view class="line"></view></view>
|
|
|
+ </view>
|
|
|
+ </scroll-view>
|
|
|
+ <view class="bottom-space">
|
|
|
+ <u-button type="primary" @click="open">筛选条件</u-button>
|
|
|
+ </view>
|
|
|
+ <u-toast ref="uToast" />
|
|
|
+ <u-popup v-model="showPopup" mode="bottom" :mask-close-able="false">
|
|
|
+ <!-- <MyPopup :show="showPopup"> -->
|
|
|
+ <view class="search-box">
|
|
|
+ <view class="form-item">
|
|
|
+ <view class="label">消息类型</view>
|
|
|
+ <u-input :value="typesLabel" type="select" :border="true" placeholder="请选择" @click="showParamsType = !showParamsType" />
|
|
|
+ <MessageType :show.sync="showParamsType" :value.sync="params.types"></MessageType>
|
|
|
+ </view>
|
|
|
+ <view class="form-item">
|
|
|
+ <view class="label">服务单元</view>
|
|
|
+ <ServiceUnit :show.sync="showParamsServiceId" :value.sync="params.serviceId"></ServiceUnit>
|
|
|
+ </view>
|
|
|
+ <view class="form-item">
|
|
|
+ <view class="label">客户名称</view>
|
|
|
+ <u-input v-model="params.custom" type="input" :border="true" placeholder="请输入" clearable />
|
|
|
+ </view>
|
|
|
+ <view class="flex justify-between items-center">
|
|
|
+ <u-button class="flex-1" @click="showPopup = false" :throttle-time="1">取消</u-button>
|
|
|
+ <u-button class="flex-1 m-l-30rpx" type="primary" @click="searchByParams" :throttle-time="1">搜索</u-button>
|
|
|
+ </view>
|
|
|
+ </view>
|
|
|
+ <!-- </MyPopup> -->
|
|
|
+ </u-popup>
|
|
|
+ </view>
|
|
|
+</template>
|
|
|
+
|
|
|
+<script>
|
|
|
+ import { getMyMessages } from '@/api/workbenches'
|
|
|
+ import { MESSAGE_TYPE } from '@/utils/constants'
|
|
|
+ import { dictToOptionList } from '@/utils/utils'
|
|
|
+ import { dateFormat } from '@/utils/utils'
|
|
|
+ import ServiceUnit from '@/components/service-unit.vue'
|
|
|
+ import MessageType from '@/components/message-type.vue'
|
|
|
+ export default {
|
|
|
+ name: 'TabContent1',
|
|
|
+ components: { ServiceUnit, MessageType },
|
|
|
+ computed: {
|
|
|
+ transParams() {
|
|
|
+ let types = this.params.types.join(',')
|
|
|
+ if (!types.length && this.params.status === 'undefined') {
|
|
|
+ types = Object.keys(MESSAGE_TYPE).join()
|
|
|
+ }
|
|
|
+ let status = this.params.status === 'undefined' ? '' : this.params.status
|
|
|
+ return { ...this.params, types, status }
|
|
|
+ },
|
|
|
+ typesLabel() {
|
|
|
+ return this.params.types.map((item) => MESSAGE_TYPE[item]).join('、')
|
|
|
+ }
|
|
|
+ },
|
|
|
+ data() {
|
|
|
+ return {
|
|
|
+ MESSAGE_TYPE,
|
|
|
+ dateFormat,
|
|
|
+ dictToOptionList,
|
|
|
+ params: { types: [], serviceId: '', custom: '', status: 'undefined' },
|
|
|
+ pageNumber: 1,
|
|
|
+ pageSize: 10,
|
|
|
+ loadingFlag: 0,
|
|
|
+ list: [],
|
|
|
+ triggered: false,
|
|
|
+ showPopup: false,
|
|
|
+ showParamsType: false,
|
|
|
+ showParamsServiceId: false,
|
|
|
+ serviceList: []
|
|
|
+ }
|
|
|
+ },
|
|
|
+ mounted() {
|
|
|
+ this.search()
|
|
|
+ },
|
|
|
+ methods: {
|
|
|
+ open() {
|
|
|
+ console.log('open')
|
|
|
+ this.showPopup = true
|
|
|
+ },
|
|
|
+ searchByParams() {
|
|
|
+ this.showPopup = false
|
|
|
+ this.search()
|
|
|
+ },
|
|
|
+ toggleStatus(status) {
|
|
|
+ this.params.status = status
|
|
|
+ this.search()
|
|
|
+ },
|
|
|
+ scrolltolower() {
|
|
|
+ if (this.loadingFlag > 0) {
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
+ this.loadingFlag = 1
|
|
|
+ this.pageNumber++
|
|
|
+ this.getList()
|
|
|
+ },
|
|
|
+ search(bool) {
|
|
|
+ this.pageNumber = 1
|
|
|
+ this.list = []
|
|
|
+ this.getList(bool)
|
|
|
+ },
|
|
|
+ getList(bool) {
|
|
|
+ getMyMessages({ ...this.transParams, pageNumber: this.pageNumber, pageSize: this.pageSize }).then((res) => {
|
|
|
+ this.loadingFlag = res.pages == this.pageNumber ? 2 : 0
|
|
|
+ console.log('this.loadingFlag:', this.loadingFlag)
|
|
|
+ this.list.push(...(res.records || []))
|
|
|
+ if (bool) {
|
|
|
+ this.triggered = false
|
|
|
+ this.$refs.uToast.show({
|
|
|
+ title: '刷新成功',
|
|
|
+ type: 'success'
|
|
|
+ })
|
|
|
+ }
|
|
|
+ })
|
|
|
+ },
|
|
|
+ onRefresh() {
|
|
|
+ if (this.triggered) return
|
|
|
+ this.triggered = true
|
|
|
+ this.search(true)
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+</script>
|
|
|
+
|
|
|
+<style lang="scss" scoped>
|
|
|
+ .tab1 {
|
|
|
+ height: calc(100% - 80rpx);
|
|
|
+ padding: 24rpx;
|
|
|
+ .search-box {
|
|
|
+ padding: 30rpx 20rpx;
|
|
|
+ }
|
|
|
+ .tag-box {
|
|
|
+ height: 84rpx;
|
|
|
+ display: flex;
|
|
|
+ .tag-item {
|
|
|
+ height: 60rpx;
|
|
|
+ width: 96rpx;
|
|
|
+ font-size: 24rpx;
|
|
|
+ text-align: center;
|
|
|
+ line-height: 60rpx;
|
|
|
+ border-radius: 30rpx;
|
|
|
+ display: flex;
|
|
|
+ justify-content: center;
|
|
|
+ align-items: center;
|
|
|
+ margin-right: 24rpx;
|
|
|
+ background: #fff;
|
|
|
+ position: relative;
|
|
|
+ color: #bfbfbf;
|
|
|
+ &.active {
|
|
|
+ background: #165dff;
|
|
|
+ color: #fff;
|
|
|
+ }
|
|
|
+ .red {
|
|
|
+ position: absolute;
|
|
|
+ width: 12rpx;
|
|
|
+ height: 12rpx;
|
|
|
+ right: 10rpx;
|
|
|
+ top: 10rpx;
|
|
|
+ background: red;
|
|
|
+ border-radius: 6px;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ .scroll-Y {
|
|
|
+ height: calc(100% - 184rpx);
|
|
|
+ .msg-item {
|
|
|
+ padding: 24rpx;
|
|
|
+ border-radius: 12rpx;
|
|
|
+ background: #fff;
|
|
|
+ margin-bottom: 24rpx;
|
|
|
+ .m-foot {
|
|
|
+ padding-top: 14rpx;
|
|
|
+ }
|
|
|
+ .m-body {
|
|
|
+ background: #f7f7f7;
|
|
|
+ margin-top: 16rpx;
|
|
|
+ .key-value {
|
|
|
+ color: #8c8c8c;
|
|
|
+ font-size: 24rpx;
|
|
|
+ width: 50%;
|
|
|
+ &:nth-child(1),
|
|
|
+ &:nth-child(2) {
|
|
|
+ margin-bottom: 12rpx;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ .m-head {
|
|
|
+ .m-time {
|
|
|
+ color: #8c8c8c;
|
|
|
+ font-size: 24rpx;
|
|
|
+ }
|
|
|
+ .m-title {
|
|
|
+ display: flex;
|
|
|
+ align-items: center;
|
|
|
+ .title {
|
|
|
+ color: #262626;
|
|
|
+ font-size: 32rpx;
|
|
|
+ margin-right: 10rpx;
|
|
|
+ }
|
|
|
+ // .tag {
|
|
|
+ // background: #ffece8;
|
|
|
+ // border-radius: 6rpx;
|
|
|
+ // text-align: center;
|
|
|
+ // line-height: 18px;
|
|
|
+ // height: 18px;
|
|
|
+ // color: #f53f3f;
|
|
|
+ // font-size: 20rpx;
|
|
|
+ // padding: 0 8rpx;
|
|
|
+ // margin-left: 10rpx;
|
|
|
+ // }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ .bottom {
|
|
|
+ padding: 20rpx 0 30rpx 0;
|
|
|
+ text-align: center;
|
|
|
+ .text {
|
|
|
+ color: #aaa;
|
|
|
+ font-size: 24rpx;
|
|
|
+ .line {
|
|
|
+ border-bottom: 1px dashed #ccc;
|
|
|
+ flex: 1;
|
|
|
+ &:first-child {
|
|
|
+ margin-right: 20rpx;
|
|
|
+ }
|
|
|
+ &:last-child {
|
|
|
+ margin-left: 20rpx;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ .bottom-space {
|
|
|
+ height: 100rpx;
|
|
|
+ padding-top: 20rpx;
|
|
|
+ }
|
|
|
+ }
|
|
|
+</style>
|