剔除不上线内容
@@ -1,603 +0,0 @@
 | 
			
		||||
<template>
 | 
			
		||||
  <div class="page">
 | 
			
		||||
    <div class="header-content">
 | 
			
		||||
      <div class="header-top">
 | 
			
		||||
        <img :src="detail.url" alt="" />
 | 
			
		||||
      </div>
 | 
			
		||||
 | 
			
		||||
      <div class="header-middle">
 | 
			
		||||
        <div class="img-title">{{ detail.title }}</div>
 | 
			
		||||
 | 
			
		||||
        <div class="header-middle-bottom">
 | 
			
		||||
          <div class="left">
 | 
			
		||||
            <div class="left-btn" :class="'status' + detail.status">{{ $dict.getLabel('newActivityStatus', detail.status) }}</div>
 | 
			
		||||
          </div>
 | 
			
		||||
          <div class="right">
 | 
			
		||||
            <img :src="detail.avatar" alt="" />
 | 
			
		||||
            <span>{{ detail.createUserName }}</span>
 | 
			
		||||
          </div>
 | 
			
		||||
        </div>
 | 
			
		||||
 | 
			
		||||
        <div class="cards">
 | 
			
		||||
          <div class="cards-left">活动时间</div>
 | 
			
		||||
          <div class="cards-right">{{ detail.beginTime }}-{{ detail.endTime }}</div>
 | 
			
		||||
        </div>
 | 
			
		||||
 | 
			
		||||
        <div class="cards">
 | 
			
		||||
          <div class="cards-left">活动人数</div>
 | 
			
		||||
          <div class="cards-right" @click="toSignUser()">
 | 
			
		||||
            <span>
 | 
			
		||||
              <span :style="{ color: detail.realNum == detail.total ? '#FF4466 ' : '#1C6BDF' }">{{ detail.realNum || 0 }}</span>
 | 
			
		||||
              <span v-if="detail.total != 0">/{{ detail.total }}</span>
 | 
			
		||||
              <span v-else>/不限</span>
 | 
			
		||||
            </span>
 | 
			
		||||
            <u-icon name="arrow-right" color="#DDDDDD" size="28" style="margin-left: 8px"></u-icon>
 | 
			
		||||
          </div>
 | 
			
		||||
        </div>
 | 
			
		||||
 | 
			
		||||
        <div class="cards">
 | 
			
		||||
          <div class="cards-left">活动地点</div>
 | 
			
		||||
          <div class="cards-right" style="width: 75%; text-align: right">{{ detail.address }}</div>
 | 
			
		||||
        </div>
 | 
			
		||||
      </div>
 | 
			
		||||
 | 
			
		||||
      <div class="header-bottom">
 | 
			
		||||
        <!-- v-if="detail.status == 1 || detail.status == 2 || detail.status == 3" -->
 | 
			
		||||
        <div class="tab-title">
 | 
			
		||||
          <span :class="current == 0 ? 'active' : ''" @click="change(0)">活动详情</span>
 | 
			
		||||
          <span :class="current == 1 ? 'active' : ''" @click="change(1)">活动动态</span>
 | 
			
		||||
        </div>
 | 
			
		||||
        <!-- <div class="info-title" v-else>活动详情</div> -->
 | 
			
		||||
        <div class="content-details" v-if="current == 0">
 | 
			
		||||
          <div v-html="detail.content"></div>
 | 
			
		||||
        </div>
 | 
			
		||||
 | 
			
		||||
        <div class="content-trends" v-if="current == 1">
 | 
			
		||||
          <div class="details" v-if="activeList.length > 0">
 | 
			
		||||
            <div class="card" v-for="(item, index) in activeList" :key="index" @click="toDetail(item.id)">
 | 
			
		||||
              <div class="card-nav">
 | 
			
		||||
                <div class="avatar">
 | 
			
		||||
                  <img :src="item.avatar" alt="" style="width: 100%; height: 100%" v-if="item.avatar" />
 | 
			
		||||
                  <span v-else>
 | 
			
		||||
                    <span v-if="item.name">{{ item.name.substring(item.name.length, item.name.length - 2) }}</span>
 | 
			
		||||
                  </span>
 | 
			
		||||
                </div>
 | 
			
		||||
 | 
			
		||||
                <div class="right">
 | 
			
		||||
                  <span class="name">{{ item.name }}</span>
 | 
			
		||||
                  <span class="time">{{ item.createTime }}</span>
 | 
			
		||||
                </div>
 | 
			
		||||
              </div>
 | 
			
		||||
 | 
			
		||||
              <div class="card-font">
 | 
			
		||||
                {{ item.content }}
 | 
			
		||||
              </div>
 | 
			
		||||
 | 
			
		||||
              <div class="card-img">
 | 
			
		||||
                <img :src="e.url" v-for="(e, i) in imgList[index]" :key="i" alt="" @click.stop="previewImage(info.images, item.url)" />
 | 
			
		||||
              </div>
 | 
			
		||||
 | 
			
		||||
              <div class="card-icon">
 | 
			
		||||
                <div>
 | 
			
		||||
                  <i class="iconfont"></i>
 | 
			
		||||
                  <span>{{ item.viewNum ? item.viewNum : 0 }}</span>
 | 
			
		||||
                </div>
 | 
			
		||||
 | 
			
		||||
                <div>
 | 
			
		||||
                  <i class="iconfont"></i>
 | 
			
		||||
                  <span>{{ item.replyNum ? item.replyNum : 0 }}</span>
 | 
			
		||||
                </div>
 | 
			
		||||
 | 
			
		||||
                <div>
 | 
			
		||||
                  <i class="iconfont"></i>
 | 
			
		||||
                  <span>{{ item.supportNum ? item.supportNum : 0 }}</span>
 | 
			
		||||
                </div>
 | 
			
		||||
              </div>
 | 
			
		||||
            </div>
 | 
			
		||||
 | 
			
		||||
            <div class="card-bottom"></div>
 | 
			
		||||
          </div>
 | 
			
		||||
 | 
			
		||||
          <AiEmpty v-else />
 | 
			
		||||
        </div>
 | 
			
		||||
      </div>
 | 
			
		||||
    </div>
 | 
			
		||||
 | 
			
		||||
    <div class="addicon" @click="toPublicPage()">
 | 
			
		||||
      <u-icon name="plus" color="#1365DD" size="50"></u-icon>
 | 
			
		||||
    </div>
 | 
			
		||||
 | 
			
		||||
    <div class="btn" v-if="detail.status == 0 && detail.createUserId == user.partyId">
 | 
			
		||||
      <div class="edit" @click="editActive">编辑</div>
 | 
			
		||||
      <div class="public" style="background: #3671ee" @click="changeStatus(1, '是否发布?')">发布活动</div>
 | 
			
		||||
    </div>
 | 
			
		||||
 | 
			
		||||
    <div class="btn" v-if="detail.realNum < detail.total && detail.status == 1 && detail.myReport == 0">
 | 
			
		||||
      <div class="edit" @click="callPhone(detail.contactPhone)">电话咨询</div>
 | 
			
		||||
      <div class="public" style="background: #3671ee" @click="changeStatus(2, '是否报名?')">立即报名</div>
 | 
			
		||||
    </div>
 | 
			
		||||
 | 
			
		||||
    <div class="btn" v-if="detail.status == 1 && detail.myReport == 0 && detail.total == 0">
 | 
			
		||||
      <div class="edit" @click="callPhone(detail.contactPhone)">电话咨询</div>
 | 
			
		||||
      <div class="public" style="background: #3671ee" @click="changeStatus(2, '是否报名?')">立即报名</div>
 | 
			
		||||
    </div>
 | 
			
		||||
 | 
			
		||||
    <div class="btn" v-if="detail.status == 1 && detail.myReport == 1">
 | 
			
		||||
      <div class="edit" @click="callPhone(detail.contactPhone)">电话咨询</div>
 | 
			
		||||
      <div class="public" style="background: #3671ee" @click="changeStatus(3, '是否取消报名?取消报名无法重新报名!')">取消报名</div>
 | 
			
		||||
    </div>
 | 
			
		||||
 | 
			
		||||
    <div class="btn" v-if="detail.realNum == detail.total && detail.status == 1 && detail.status == 1 && detail.total != 0">
 | 
			
		||||
      <div class="max">已满员</div>
 | 
			
		||||
    </div>
 | 
			
		||||
 | 
			
		||||
    <div class="btn" v-if="detail.myReport == 1 && detail.status == 2">
 | 
			
		||||
      <div class="edit" @click="callPhone(detail.contactPhone)">联系负责人</div>
 | 
			
		||||
      <div class="public" style="background: #ffd8df; color: #ff4466" v-if="detail.allow1 == 0">未签到</div>
 | 
			
		||||
      <div class="public" style="background: #3671ee; color: #ffffff" v-if="detail.allow1 == 1" @click="sign(0)">签到</div>
 | 
			
		||||
      <div class="public" style="background: #cbead9; color: #20bc65" v-if="detail.allow1 == 2">已签到</div>
 | 
			
		||||
    </div>
 | 
			
		||||
 | 
			
		||||
    <div class="btn" v-if="detail.status == 5">
 | 
			
		||||
      <div class="edit" @click="callPhone(detail.contactPhone)">联系负责人</div>
 | 
			
		||||
      <div class="public" style="background: #cbead9; color: #20bc65" v-if="detail.allow2 == 1" @click="sign(1)">离场签到</div>
 | 
			
		||||
      <div class="public" style="background: #cbead9; color: #20bc65" v-if="detail.allow2 == 2">已离场签到</div>
 | 
			
		||||
      <div class="public" style="background: #ffd8df; color: #ff4466" v-if="detail.allow2 == 0">未离场签到</div>
 | 
			
		||||
    </div>
 | 
			
		||||
  </div>
 | 
			
		||||
</template>
 | 
			
		||||
 | 
			
		||||
<script>
 | 
			
		||||
import { mapState } from 'vuex'
 | 
			
		||||
 | 
			
		||||
export default {
 | 
			
		||||
  name: 'ActiveDetail',
 | 
			
		||||
  computed: {
 | 
			
		||||
    ...mapState(['user']),
 | 
			
		||||
  },
 | 
			
		||||
  data() {
 | 
			
		||||
    return {
 | 
			
		||||
      id: '',
 | 
			
		||||
      detail: {},
 | 
			
		||||
      activeList: [],
 | 
			
		||||
      imgList: [],
 | 
			
		||||
      list: [
 | 
			
		||||
        {
 | 
			
		||||
          name: '活动详情',
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
          name: '活动动态',
 | 
			
		||||
        },
 | 
			
		||||
      ],
 | 
			
		||||
      current: 0,
 | 
			
		||||
    }
 | 
			
		||||
  },
 | 
			
		||||
  onLoad(option) {
 | 
			
		||||
    this.id = option.id
 | 
			
		||||
    this.$dict.load(['newActivityStatus']).then(() => {
 | 
			
		||||
      this.getDetail()
 | 
			
		||||
    })
 | 
			
		||||
  },
 | 
			
		||||
  methods: {
 | 
			
		||||
    getDetail() {
 | 
			
		||||
      this.$instance.post(`/app/appactivityinfo/queryDetailById?id=${this.id}&partyId=${this.user.partyId}`).then((res) => {
 | 
			
		||||
        if (res?.data) {
 | 
			
		||||
          res.data.beginTime = res.data.beginTime.substring(0, 16)
 | 
			
		||||
          res.data.endTime = res.data.endTime.substring(0, 16)
 | 
			
		||||
          this.detail = res.data
 | 
			
		||||
          this.getActiveList()
 | 
			
		||||
        }
 | 
			
		||||
      })
 | 
			
		||||
    },
 | 
			
		||||
    getActiveList() {
 | 
			
		||||
      this.$instance.post(`/app/apppostinfo/list?activityId=${this.id}`).then((res) => {
 | 
			
		||||
        if (res?.data) {
 | 
			
		||||
          this.activeList = res.data.records
 | 
			
		||||
 | 
			
		||||
          if (this.activeList) {
 | 
			
		||||
            let imagesList = []
 | 
			
		||||
            this.activeList.map((item) => {
 | 
			
		||||
              if (item.images) {
 | 
			
		||||
                item.images = JSON.parse(item.images || '[]')
 | 
			
		||||
                imagesList.push(item.images)
 | 
			
		||||
              }
 | 
			
		||||
              return item
 | 
			
		||||
            })
 | 
			
		||||
            this.imgList = imagesList
 | 
			
		||||
          }
 | 
			
		||||
        }
 | 
			
		||||
      })
 | 
			
		||||
    },
 | 
			
		||||
    change(index) {
 | 
			
		||||
      this.current = index
 | 
			
		||||
    },
 | 
			
		||||
    toPublicPage() {
 | 
			
		||||
      uni.navigateTo({
 | 
			
		||||
        url: `./AddPosts?id=${this.id}`,
 | 
			
		||||
      })
 | 
			
		||||
    },
 | 
			
		||||
    editActive() {
 | 
			
		||||
      uni.navigateTo({ url: `./AddActive?id=${this.id}` })
 | 
			
		||||
    },
 | 
			
		||||
    changeStatus(status, text) {
 | 
			
		||||
      uni.showModal({
 | 
			
		||||
        title: '提示',
 | 
			
		||||
        content: `${text}`,
 | 
			
		||||
        confirmText: '确定',
 | 
			
		||||
        success: (e) => {
 | 
			
		||||
          if (status == 1) {
 | 
			
		||||
            //发布
 | 
			
		||||
            this.changeStatusConfirm(status)
 | 
			
		||||
          }
 | 
			
		||||
          if (status == 2) {
 | 
			
		||||
            //报名
 | 
			
		||||
            this.report()
 | 
			
		||||
          }
 | 
			
		||||
          if (status == 3) {
 | 
			
		||||
            //取消报名
 | 
			
		||||
            this.cancelReport()
 | 
			
		||||
          }
 | 
			
		||||
        },
 | 
			
		||||
      })
 | 
			
		||||
    },
 | 
			
		||||
    cancelReport() {
 | 
			
		||||
      this.$instance
 | 
			
		||||
        .post(`/app/appactivityuser/removeReport`, {
 | 
			
		||||
          activityId: this.id,
 | 
			
		||||
          partyId: this.user.partyId,
 | 
			
		||||
        })
 | 
			
		||||
        .then((res) => {
 | 
			
		||||
          if (res.code == 0) {
 | 
			
		||||
            this.$toast('提交成功')
 | 
			
		||||
            this.getDetail()
 | 
			
		||||
          }
 | 
			
		||||
        })
 | 
			
		||||
    },
 | 
			
		||||
    changeStatusConfirm(status) {
 | 
			
		||||
      this.$instance
 | 
			
		||||
        .post(`/app/appactivityinfo/changeStatus`, {
 | 
			
		||||
          id: this.id,
 | 
			
		||||
          status: status,
 | 
			
		||||
        })
 | 
			
		||||
        .then((res) => {
 | 
			
		||||
          if (res.code == 0) {
 | 
			
		||||
            this.$toast('提交成功')
 | 
			
		||||
            this.getDetail()
 | 
			
		||||
          }
 | 
			
		||||
        })
 | 
			
		||||
    },
 | 
			
		||||
    callPhone(phone) {
 | 
			
		||||
      uni.makePhoneCall({ phoneNumber: phone })
 | 
			
		||||
    },
 | 
			
		||||
    report() {
 | 
			
		||||
      this.$instance
 | 
			
		||||
        .post(`/app/appactivityuser/report`, {
 | 
			
		||||
          activityId: this.id,
 | 
			
		||||
          partyId: this.user.partyId,
 | 
			
		||||
          name: this.user.realName,
 | 
			
		||||
          orgId: this.user.partyOrgId,
 | 
			
		||||
          orgName: this.user.partyOrgName,
 | 
			
		||||
          phone: this.user.phone,
 | 
			
		||||
          communityId: this.user.communityId,
 | 
			
		||||
        })
 | 
			
		||||
        .then((res) => {
 | 
			
		||||
          if (res.code == 0) {
 | 
			
		||||
            this.$toast('报名成功')
 | 
			
		||||
            this.getDetail()
 | 
			
		||||
          }
 | 
			
		||||
        })
 | 
			
		||||
    },
 | 
			
		||||
    toSignUser() {
 | 
			
		||||
      var isAdmin = this.detail.createUserId == this.user.partyId ? 1 : 0
 | 
			
		||||
      uni.navigateTo({ url: `./SignUser?id=${this.id}&isAdmin=${isAdmin}&status=${this.detail.status}` })
 | 
			
		||||
    },
 | 
			
		||||
    sign(status) {
 | 
			
		||||
      //status 0开始签到 1离场签到
 | 
			
		||||
      this.$instance
 | 
			
		||||
        .post(`/app/appactivityuser/sign`, {
 | 
			
		||||
          activityId: this.id,
 | 
			
		||||
          partyId: this.user.partyId,
 | 
			
		||||
        })
 | 
			
		||||
        .then((res) => {
 | 
			
		||||
          if (res.code == 0) {
 | 
			
		||||
            this.$toast(status == 1 ? '离场签到成功' : '签到成功')
 | 
			
		||||
            this.getDetail()
 | 
			
		||||
          }
 | 
			
		||||
        })
 | 
			
		||||
    },
 | 
			
		||||
    toDetail(id) {
 | 
			
		||||
      this.linkTo(`./detail?id=${id}`)
 | 
			
		||||
    },
 | 
			
		||||
    previewImage(images, img) {
 | 
			
		||||
      uni.previewImage({
 | 
			
		||||
        urls: images.map((v) => v.url),
 | 
			
		||||
        current: img,
 | 
			
		||||
      })
 | 
			
		||||
    },
 | 
			
		||||
  },
 | 
			
		||||
}
 | 
			
		||||
</script>
 | 
			
		||||
<style scoped lang="scss">
 | 
			
		||||
.page {
 | 
			
		||||
  width: 100%;
 | 
			
		||||
  height: 100%;
 | 
			
		||||
  background-color: #fff;
 | 
			
		||||
 | 
			
		||||
  .info-title {
 | 
			
		||||
    padding-left: 32px;
 | 
			
		||||
    line-height: 108px;
 | 
			
		||||
    font-size: 32px;
 | 
			
		||||
    font-family: PingFangSC-Semibold, PingFang SC;
 | 
			
		||||
    font-weight: 600;
 | 
			
		||||
    color: #333;
 | 
			
		||||
  }
 | 
			
		||||
  .tab-title {
 | 
			
		||||
    line-height: 108px;
 | 
			
		||||
    font-size: 32px;
 | 
			
		||||
    font-family: PingFangSC-Semibold, PingFang SC;
 | 
			
		||||
    font-weight: 600;
 | 
			
		||||
    color: #333;
 | 
			
		||||
    span {
 | 
			
		||||
      display: inline-block;
 | 
			
		||||
      width: 192px;
 | 
			
		||||
      text-align: center;
 | 
			
		||||
    }
 | 
			
		||||
    .active {
 | 
			
		||||
      color: #3671ee;
 | 
			
		||||
      border-bottom: 4px solid #3671ee;
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
  .status0 {
 | 
			
		||||
    background: #000;
 | 
			
		||||
  }
 | 
			
		||||
  .status1 {
 | 
			
		||||
    background: #ff883c;
 | 
			
		||||
  }
 | 
			
		||||
  .status3 {
 | 
			
		||||
    background: #1aaaff;
 | 
			
		||||
  }
 | 
			
		||||
  .status2 {
 | 
			
		||||
    background: #42d784;
 | 
			
		||||
  }
 | 
			
		||||
  .status4,
 | 
			
		||||
  .status5 {
 | 
			
		||||
    background: #e4e4e4;
 | 
			
		||||
  }
 | 
			
		||||
  .header-content {
 | 
			
		||||
    padding-bottom: 150px;
 | 
			
		||||
    .header-top {
 | 
			
		||||
      width: 100%;
 | 
			
		||||
      height: 440px;
 | 
			
		||||
      img {
 | 
			
		||||
        width: 100%;
 | 
			
		||||
        height: 100%;
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    .header-middle {
 | 
			
		||||
      padding: 32px 32px 0 32px;
 | 
			
		||||
 | 
			
		||||
      .img-title {
 | 
			
		||||
        font-size: 36px;
 | 
			
		||||
        font-weight: 600;
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      .header-middle-bottom {
 | 
			
		||||
        display: flex;
 | 
			
		||||
        justify-content: space-between;
 | 
			
		||||
        margin-top: 32px;
 | 
			
		||||
        .left {
 | 
			
		||||
          .left-btn {
 | 
			
		||||
            padding: 4px 8px;
 | 
			
		||||
            border-radius: 8px;
 | 
			
		||||
 | 
			
		||||
            font-size: 26px;
 | 
			
		||||
            color: #ffffff;
 | 
			
		||||
            text-align: center;
 | 
			
		||||
          }
 | 
			
		||||
        }
 | 
			
		||||
        .right {
 | 
			
		||||
          img {
 | 
			
		||||
            width: 40px;
 | 
			
		||||
            height: 40px;
 | 
			
		||||
            border-radius: 50%;
 | 
			
		||||
            vertical-align: text-top;
 | 
			
		||||
            margin-right: 8px;
 | 
			
		||||
          }
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      .cards {
 | 
			
		||||
        display: flex;
 | 
			
		||||
        justify-content: space-between;
 | 
			
		||||
        border-bottom: 2px solid #eee;
 | 
			
		||||
        padding: 36px 0;
 | 
			
		||||
        line-height: 40px;
 | 
			
		||||
        font-size: 28px;
 | 
			
		||||
 | 
			
		||||
        .cards-left {
 | 
			
		||||
          color: #999;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        .cards-right {
 | 
			
		||||
          color: #333;
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    .header-bottom {
 | 
			
		||||
      background: #fff;
 | 
			
		||||
 | 
			
		||||
      .content-details {
 | 
			
		||||
        padding: 32px 32px 80px 32px;
 | 
			
		||||
        .font {
 | 
			
		||||
          margin-top: 32px;
 | 
			
		||||
          font-size: 30px;
 | 
			
		||||
          line-height: 1.5;
 | 
			
		||||
        }
 | 
			
		||||
        .font-img {
 | 
			
		||||
          margin-top: 26px;
 | 
			
		||||
          width: 100%;
 | 
			
		||||
          height: 480px;
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      .content-trends {
 | 
			
		||||
        // padding-bottom: 40px;
 | 
			
		||||
        .details {
 | 
			
		||||
          .card {
 | 
			
		||||
            padding: 26px 32px 28px 32px;
 | 
			
		||||
            .card-nav {
 | 
			
		||||
              display: flex;
 | 
			
		||||
              .avatar {
 | 
			
		||||
                width: 64px;
 | 
			
		||||
                height: 64px;
 | 
			
		||||
                line-height: 60px;
 | 
			
		||||
                background: #4e8eee;
 | 
			
		||||
                border-radius: 50%;
 | 
			
		||||
                text-align: center;
 | 
			
		||||
 | 
			
		||||
                font-size: 24px;
 | 
			
		||||
                font-weight: 500;
 | 
			
		||||
                color: #ffffff;
 | 
			
		||||
                margin-right: 16px;
 | 
			
		||||
              }
 | 
			
		||||
              .right {
 | 
			
		||||
                // display: inline;
 | 
			
		||||
                display: flex;
 | 
			
		||||
                flex-direction: column;
 | 
			
		||||
 | 
			
		||||
                .name {
 | 
			
		||||
                  font-size: 26px;
 | 
			
		||||
                  font-weight: 500;
 | 
			
		||||
                }
 | 
			
		||||
                .time {
 | 
			
		||||
                  font-size: 22px;
 | 
			
		||||
                  color: #999999;
 | 
			
		||||
                }
 | 
			
		||||
              }
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            .card-font {
 | 
			
		||||
              margin-top: 36px;
 | 
			
		||||
              line-height: 1.6;
 | 
			
		||||
              text-overflow: -o-ellipsis-lastline;
 | 
			
		||||
              overflow: hidden;
 | 
			
		||||
              text-overflow: ellipsis;
 | 
			
		||||
              display: -webkit-box;
 | 
			
		||||
              -webkit-line-clamp: 2;
 | 
			
		||||
              line-clamp: 2;
 | 
			
		||||
              -webkit-box-orient: vertical;
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            .card-img {
 | 
			
		||||
              margin-top: 16px;
 | 
			
		||||
              img {
 | 
			
		||||
                width: 224px;
 | 
			
		||||
                height: 224px;
 | 
			
		||||
                margin-right: 8px;
 | 
			
		||||
              }
 | 
			
		||||
              img:last-child {
 | 
			
		||||
                margin-right: 0;
 | 
			
		||||
              }
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            .card-icon {
 | 
			
		||||
              display: flex;
 | 
			
		||||
              justify-content: space-between;
 | 
			
		||||
              margin-top: 28px;
 | 
			
		||||
              div {
 | 
			
		||||
                display: flex;
 | 
			
		||||
                align-items: center;
 | 
			
		||||
                span {
 | 
			
		||||
                  font-size: 24px;
 | 
			
		||||
                }
 | 
			
		||||
              }
 | 
			
		||||
            }
 | 
			
		||||
          }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        ::v-deep .emptyWrap {
 | 
			
		||||
          // background-color: pink;
 | 
			
		||||
          padding-bottom: 50px;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        .noDeatil {
 | 
			
		||||
          background-color: #f3f6f9;
 | 
			
		||||
          img {
 | 
			
		||||
            width: 400px;
 | 
			
		||||
            height: 240px;
 | 
			
		||||
            transform: translate(50%, 25%);
 | 
			
		||||
            padding-bottom: 156px;
 | 
			
		||||
          }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        .card-bottom {
 | 
			
		||||
          height: 20px;
 | 
			
		||||
          background-color: #f3f6f9;
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  .addicon {
 | 
			
		||||
    position: fixed;
 | 
			
		||||
    bottom: 280px;
 | 
			
		||||
    right: 30px;
 | 
			
		||||
    background: #fefefe;
 | 
			
		||||
    box-shadow: 0px 8px 16px 0px rgba(0, 0, 0, 0.2);
 | 
			
		||||
    border-radius: 50%;
 | 
			
		||||
    padding: 26px 24px 22px 24px;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  .btn {
 | 
			
		||||
    position: fixed;
 | 
			
		||||
    bottom: 0;
 | 
			
		||||
    width: 100%;
 | 
			
		||||
    // height: 112px;
 | 
			
		||||
    background: #f3f6f9;
 | 
			
		||||
 | 
			
		||||
    display: flex;
 | 
			
		||||
    justify-content: space-between;
 | 
			
		||||
    padding: 32px 0;
 | 
			
		||||
    text-align: center;
 | 
			
		||||
    .edit {
 | 
			
		||||
      width: 254px;
 | 
			
		||||
      height: 92px;
 | 
			
		||||
      line-height: 92px;
 | 
			
		||||
      background: #ffffff;
 | 
			
		||||
      border-radius: 8px;
 | 
			
		||||
      border: 2px solid #3671ee;
 | 
			
		||||
 | 
			
		||||
      font-size: 34px;
 | 
			
		||||
      font-weight: 500;
 | 
			
		||||
      color: #3671ee;
 | 
			
		||||
      margin-left: 32px;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    .public {
 | 
			
		||||
      width: 400px;
 | 
			
		||||
 | 
			
		||||
      line-height: 92px;
 | 
			
		||||
      border-radius: 8px;
 | 
			
		||||
      font-size: 34px;
 | 
			
		||||
      font-weight: 500;
 | 
			
		||||
      color: #ffffff;
 | 
			
		||||
      margin-right: 32px;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    .max {
 | 
			
		||||
      margin: 0 auto;
 | 
			
		||||
      width: 686px;
 | 
			
		||||
      height: 92px;
 | 
			
		||||
      line-height: 92px;
 | 
			
		||||
      background: #cbddf9;
 | 
			
		||||
      border-radius: 8px;
 | 
			
		||||
 | 
			
		||||
      font-size: 34px;
 | 
			
		||||
      font-weight: 500;
 | 
			
		||||
      color: #ffffff;
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
</style>
 | 
			
		||||
@@ -1,468 +0,0 @@
 | 
			
		||||
<template>
 | 
			
		||||
  <div class="page">
 | 
			
		||||
    <div class="textarea-div border">
 | 
			
		||||
      <div class="title mar-b32"><span>*</span>活动标题</div>
 | 
			
		||||
      <div class="pad-l20">
 | 
			
		||||
        <u-input type="textarea" v-model="params.title" :border="false" height="44" :auto-height="true" placeholder="请输入标题(60字以内)" :placeholder-style="placeholderStyle" maxlength="60" />
 | 
			
		||||
      </div>
 | 
			
		||||
    </div>
 | 
			
		||||
    <div class="textarea-div mar-b16">
 | 
			
		||||
      <div class="title mar-b32"><span>*</span>活动详情</div>
 | 
			
		||||
      <div class="pad-l20">
 | 
			
		||||
        <u-input type="textarea" v-model="params.content" :border="false" :height="140" :auto-height="true" placeholder="请输入活动详情(500字以内)" :placeholder-style="placeholderStyle" maxlength="500" />
 | 
			
		||||
      </div>
 | 
			
		||||
    </div>
 | 
			
		||||
    <div class="textarea-div mar-b16">
 | 
			
		||||
      <div class="title mar-b32"><span>*</span>活动封面图</div>
 | 
			
		||||
      <div class="pad-l20">
 | 
			
		||||
        <AiUploader v-model="files"></AiUploader>
 | 
			
		||||
      </div>
 | 
			
		||||
    </div>
 | 
			
		||||
    <div class="input-div">
 | 
			
		||||
      <div class="border-content border">
 | 
			
		||||
        <div class="title"><span>*</span>活动主题</div>
 | 
			
		||||
        <div class="value" @click="selectClick(topicList, 'target')">
 | 
			
		||||
          <span :class="params.target ? '' : 'color-999'">{{ params.target || '请选择' }}</span>
 | 
			
		||||
          <img src="https://cdn.cunwuyun.cn/img/right-icon-999.png" alt="" class="right-icon" />
 | 
			
		||||
        </div>
 | 
			
		||||
      </div>
 | 
			
		||||
    </div>
 | 
			
		||||
    <div class="input-div">
 | 
			
		||||
      <div class="border-content border">
 | 
			
		||||
        <div class="title"><span>*</span>活动类型</div>
 | 
			
		||||
        <div class="value" @click="selectClick(activeTypeList, 'type')">
 | 
			
		||||
          <span :class="params.type ? '' : 'color-999'">{{ params.type || '请选择' }}</span>
 | 
			
		||||
          <img src="https://cdn.cunwuyun.cn/img/right-icon-999.png" alt="" class="right-icon" />
 | 
			
		||||
        </div>
 | 
			
		||||
      </div>
 | 
			
		||||
    </div>
 | 
			
		||||
    <div class="input-div">
 | 
			
		||||
      <div class="border-content border">
 | 
			
		||||
        <div class="title"><span>*</span>报名范围</div>
 | 
			
		||||
        <div class="value" @click="selectClick($dict.getDict('activityScope'), 'scope')">
 | 
			
		||||
          <span :class="params.scope === '' ? 'color-999' : ''">{{ $dict.getLabel('activityScope', params.scope) || '请选择' }}</span>
 | 
			
		||||
          <img src="https://cdn.cunwuyun.cn/img/right-icon-999.png" alt="" class="right-icon" />
 | 
			
		||||
        </div>
 | 
			
		||||
      </div>
 | 
			
		||||
    </div>
 | 
			
		||||
    <div class="input-div" v-if="params.scope == 1">
 | 
			
		||||
      <div class="border-content border">
 | 
			
		||||
        <div class="title"><span>*</span>发布单位</div>
 | 
			
		||||
        <div class="value">
 | 
			
		||||
          <AIsEarchPopup title="请选择发布单位" placeholder="搜索单位名称" :ops="{ label: 'name', search: 'name' }" url="/admin/partyOrganization/queryPartyOrganizationListByName" @select="(v) => (selectedOrg = v)">
 | 
			
		||||
            <div class="picker-input" slot="btn">
 | 
			
		||||
              <view class="uni-input color-999" v-if="!selectedOrg.id">请选择</view>
 | 
			
		||||
              <view class="uni-input" v-else>{{ selectedOrg.name }}</view>
 | 
			
		||||
              <image src="https://cdn.cunwuyun.cn/img/right-icon-999.png" class="right-icon"></image>
 | 
			
		||||
            </div>
 | 
			
		||||
          </AIsEarchPopup>
 | 
			
		||||
        </div>
 | 
			
		||||
      </div>
 | 
			
		||||
    </div>
 | 
			
		||||
 | 
			
		||||
    <div class="input-div" v-if="params.scope == 2">
 | 
			
		||||
      <div class="border-content border">
 | 
			
		||||
        <div class="title"><span>*</span>发布小区</div>
 | 
			
		||||
        <div class="value" @click="estateSelect = true">
 | 
			
		||||
          <span :class="params.communityName ? '' : 'color-999'">{{ params.communityName || '请选择' }}</span>
 | 
			
		||||
          <img src="https://cdn.cunwuyun.cn/img/right-icon-999.png" alt="" class="right-icon" />
 | 
			
		||||
        </div>
 | 
			
		||||
      </div>
 | 
			
		||||
    </div>
 | 
			
		||||
    <u-select v-model="estateSelect" mode="mutil-column-auto" :list="estateTreeData" @confirm="handleBindEstate" value-name="id" label-name="name" />
 | 
			
		||||
 | 
			
		||||
    <div class="input-div mar-b16">
 | 
			
		||||
      <div class="border-content">
 | 
			
		||||
        <div class="title"><span>*</span>活动名额</div>
 | 
			
		||||
        <div class="value">
 | 
			
		||||
          <u-input type="input" v-model="params.total" :border="false" :height="44" :auto-height="true" placeholder="如不限制人数,填写0" input-align="right" :placeholder-style="placeholderStyle" maxlength="5" />
 | 
			
		||||
        </div>
 | 
			
		||||
      </div>
 | 
			
		||||
    </div>
 | 
			
		||||
    <div class="input-div">
 | 
			
		||||
      <div class="border-content border">
 | 
			
		||||
        <div class="title"><span>*</span>开始时间</div>
 | 
			
		||||
        <div class="value" @click="selectDate('beginTime')">
 | 
			
		||||
          <span :class="params.beginTime ? '' : 'color-999'">{{ params.beginTime || '请选择' }}</span>
 | 
			
		||||
          <img src="https://cdn.cunwuyun.cn/img/right-icon-999.png" alt="" class="right-icon" />
 | 
			
		||||
        </div>
 | 
			
		||||
      </div>
 | 
			
		||||
    </div>
 | 
			
		||||
    <div class="input-div">
 | 
			
		||||
      <div class="border-content border">
 | 
			
		||||
        <div class="title"><span>*</span>结束时间</div>
 | 
			
		||||
        <div class="value" @click="selectDate('endTime')">
 | 
			
		||||
          <span :class="params.endTime ? '' : 'color-999'">{{ params.endTime || '请选择' }}</span>
 | 
			
		||||
          <img src="https://cdn.cunwuyun.cn/img/right-icon-999.png" alt="" class="right-icon" />
 | 
			
		||||
        </div>
 | 
			
		||||
      </div>
 | 
			
		||||
    </div>
 | 
			
		||||
    <div class="input-div">
 | 
			
		||||
      <div class="border-content border">
 | 
			
		||||
        <div class="title"><span>*</span>报名截止时间</div>
 | 
			
		||||
        <div class="value" @click="selectDate('stopSignupTime')">
 | 
			
		||||
          <span :class="params.stopSignupTime ? '' : 'color-999'">{{ params.stopSignupTime || '请选择' }}</span>
 | 
			
		||||
          <img src="https://cdn.cunwuyun.cn/img/right-icon-999.png" alt="" class="right-icon" />
 | 
			
		||||
        </div>
 | 
			
		||||
      </div>
 | 
			
		||||
    </div>
 | 
			
		||||
    <div class="input-div mar-b16">
 | 
			
		||||
      <div class="border-content">
 | 
			
		||||
        <div class="title"><span>*</span>活动地点</div>
 | 
			
		||||
        <div class="value">
 | 
			
		||||
          <input type="text" maxlength="20" v-model="params.address" :border="false" :height="44" :auto-height="true" placeholder="请输入" input-align="right" :placeholder-style="placeholderStyle" />
 | 
			
		||||
        </div>
 | 
			
		||||
      </div>
 | 
			
		||||
    </div>
 | 
			
		||||
    <div class="input-div">
 | 
			
		||||
      <div class="border-content border">
 | 
			
		||||
        <div class="title"><span>*</span>联系人</div>
 | 
			
		||||
        <div class="value">
 | 
			
		||||
          <u-input type="input" v-model="params.contactPerson" :border="false" :height="44" :auto-height="true" placeholder="请输入" input-align="right" :placeholder-style="placeholderStyle" maxlength="10" />
 | 
			
		||||
        </div>
 | 
			
		||||
      </div>
 | 
			
		||||
    </div>
 | 
			
		||||
    <div class="input-div mar-b16 pad-b220">
 | 
			
		||||
      <div class="border-content">
 | 
			
		||||
        <div class="title"><span>*</span>联系方式</div>
 | 
			
		||||
        <div class="value">
 | 
			
		||||
          <u-input type="input" v-model="params.contactPhone" :border="false" :height="44" :auto-height="true" placeholder="请输入" input-align="right" :placeholder-style="placeholderStyle" maxlength="11" />
 | 
			
		||||
        </div>
 | 
			
		||||
      </div>
 | 
			
		||||
    </div>
 | 
			
		||||
    <div class="footer-btn">
 | 
			
		||||
      <div class="btn" @click="add">保存</div>
 | 
			
		||||
    </div>
 | 
			
		||||
 | 
			
		||||
    <u-select v-model="showSelect" :list="selectList" label-name="dictName" value-name="dictValue" @confirm="selectConfirm"></u-select>
 | 
			
		||||
    <u-picker mode="time" v-model="showDate" :start-year="startYear" @confirm="dateConfirm" :params="timeParams"></u-picker>
 | 
			
		||||
  </div>
 | 
			
		||||
</template>
 | 
			
		||||
 | 
			
		||||
<script>
 | 
			
		||||
import { mapState } from 'vuex'
 | 
			
		||||
 | 
			
		||||
export default {
 | 
			
		||||
  name: 'AddActive',
 | 
			
		||||
  components: {},
 | 
			
		||||
  computed: {
 | 
			
		||||
    ...mapState(['user', 'global']),
 | 
			
		||||
  },
 | 
			
		||||
  data() {
 | 
			
		||||
    return {
 | 
			
		||||
      files: [],
 | 
			
		||||
      showSelect: false,
 | 
			
		||||
      selectList: [],
 | 
			
		||||
      topicList: [], //活动主题分类
 | 
			
		||||
      activeTypeList: [],
 | 
			
		||||
      selectData: '',
 | 
			
		||||
      showDate: false,
 | 
			
		||||
      startYear: '',
 | 
			
		||||
      beginTimestamp: '',
 | 
			
		||||
      params: {
 | 
			
		||||
        title: '',
 | 
			
		||||
        content: '',
 | 
			
		||||
        url: '',
 | 
			
		||||
        target: '',
 | 
			
		||||
        type: '',
 | 
			
		||||
        scope: '',
 | 
			
		||||
        total: '',
 | 
			
		||||
        address: '',
 | 
			
		||||
        beginTime: '',
 | 
			
		||||
        endTime: '',
 | 
			
		||||
        stopSignupTime: '',
 | 
			
		||||
        contactPerson: '',
 | 
			
		||||
        contactPhone: '',
 | 
			
		||||
        status: 0,
 | 
			
		||||
        createUserId: '',
 | 
			
		||||
        createUserName: '',
 | 
			
		||||
        orgName: '',
 | 
			
		||||
        avatar: '',
 | 
			
		||||
        id: '',
 | 
			
		||||
        orgId: '',
 | 
			
		||||
        orgName: '',
 | 
			
		||||
        communityId: '',
 | 
			
		||||
        communityName: '',
 | 
			
		||||
      },
 | 
			
		||||
      timeParams: {
 | 
			
		||||
        year: true,
 | 
			
		||||
        month: true,
 | 
			
		||||
        day: true,
 | 
			
		||||
        hour: true,
 | 
			
		||||
        minute: true,
 | 
			
		||||
        second: true,
 | 
			
		||||
        timestamp: true,
 | 
			
		||||
      },
 | 
			
		||||
      placeholderStyle: 'color:#999;font-size:16px;',
 | 
			
		||||
      selectedOrg: {},
 | 
			
		||||
      estateTreeData: [],
 | 
			
		||||
      estateSelect: false,
 | 
			
		||||
    }
 | 
			
		||||
  },
 | 
			
		||||
  onLoad(option) {
 | 
			
		||||
    this.$dict.load('activityScope').then(() => {
 | 
			
		||||
      this.getTopicList()
 | 
			
		||||
      console.log(option)
 | 
			
		||||
      if (option.id) {
 | 
			
		||||
        this.params.id = option.id
 | 
			
		||||
        this.getDetail()
 | 
			
		||||
      } else {
 | 
			
		||||
        this.params.contactPerson = this.user.realName
 | 
			
		||||
        this.params.contactPhone = this.user.phone
 | 
			
		||||
      }
 | 
			
		||||
    })
 | 
			
		||||
    var date = new Date()
 | 
			
		||||
    this.startYear = date.getFullYear()
 | 
			
		||||
    this.getEstates()
 | 
			
		||||
  },
 | 
			
		||||
  onShow() {
 | 
			
		||||
    document.title = '编辑活动' 
 | 
			
		||||
  },
 | 
			
		||||
  methods: {
 | 
			
		||||
    getEstates() {
 | 
			
		||||
      this.$http.post(`/app/appvanguardcommunityinfo/getTree?type=1&areaId=${this.global.areaId}`).then((res) => {
 | 
			
		||||
        if (res?.data) {
 | 
			
		||||
          this.estateTreeData = res.data?.children
 | 
			
		||||
        }
 | 
			
		||||
      })
 | 
			
		||||
    },
 | 
			
		||||
    handleBindEstate(e) {
 | 
			
		||||
      this.params.communityId = e[2].value
 | 
			
		||||
      this.params.communityName = e[2].label
 | 
			
		||||
    },
 | 
			
		||||
    getDetail() {
 | 
			
		||||
      this.$http.post(`/app/appactivityinfo/queryDetailById?id=${this.params.id}`).then((res) => {
 | 
			
		||||
        if (res?.data) {
 | 
			
		||||
          this.files = [
 | 
			
		||||
            {
 | 
			
		||||
              url: res.data.url,
 | 
			
		||||
            },
 | 
			
		||||
          ]
 | 
			
		||||
          this.params = res.data
 | 
			
		||||
        }
 | 
			
		||||
      })
 | 
			
		||||
    },
 | 
			
		||||
    getTopicList() {
 | 
			
		||||
      this.$http.post(`/app/appactivitytopic/list?status=1&size=1000`).then((res) => {
 | 
			
		||||
        if (res.code == 0) {
 | 
			
		||||
          res.data.records.map((item) => {
 | 
			
		||||
            ;(item.dictName = item.name), (item.dictValue = item.content)
 | 
			
		||||
          })
 | 
			
		||||
          this.topicList = res.data.records
 | 
			
		||||
        }
 | 
			
		||||
      })
 | 
			
		||||
    },
 | 
			
		||||
    selectClick(list, data) {
 | 
			
		||||
      if (data == 'type' && !list.length) {
 | 
			
		||||
        //活动类型
 | 
			
		||||
        return this.$toast('请先选择活动主题')
 | 
			
		||||
      }
 | 
			
		||||
      this.selectData = data
 | 
			
		||||
      this.selectList = list
 | 
			
		||||
      this.showSelect = true
 | 
			
		||||
    },
 | 
			
		||||
    selectConfirm(e) {
 | 
			
		||||
      console.log(e)
 | 
			
		||||
      if (this.selectData == 'target' || this.selectData == 'type') {
 | 
			
		||||
        this.params[this.selectData] = e[0].label
 | 
			
		||||
      } else {
 | 
			
		||||
        this.params[this.selectData] = e[0].value
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      if (this.selectData == 'target') {
 | 
			
		||||
        //选择主题分类
 | 
			
		||||
        var content = e[0].value.split(',')
 | 
			
		||||
        this.activeTypeList = []
 | 
			
		||||
        this.type = ''
 | 
			
		||||
        content.map((items) => {
 | 
			
		||||
          var info = { dictName: items }
 | 
			
		||||
          this.activeTypeList.push(info)
 | 
			
		||||
        })
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    selectDate(data) {
 | 
			
		||||
      if (data == 'endTime' && !this.params.beginTime) {
 | 
			
		||||
        return this.$toast('请先选择活动开始时间')
 | 
			
		||||
      }
 | 
			
		||||
      if (data == 'stopSignupTime' && !this.params.beginTime) {
 | 
			
		||||
        return this.$toast('请先选择活动开始时间')
 | 
			
		||||
      }
 | 
			
		||||
      this.selectData = data
 | 
			
		||||
      this.showDate = true
 | 
			
		||||
    },
 | 
			
		||||
    dateConfirm(e) {
 | 
			
		||||
      console.log(e)
 | 
			
		||||
      if (this.selectData == 'beginTime') {
 | 
			
		||||
        this.beginTimestamp = e.timestamp
 | 
			
		||||
        this.params.endTime = ''
 | 
			
		||||
        this.params.stopSignupTime = ''
 | 
			
		||||
      }
 | 
			
		||||
      if (this.selectData == 'endTime' && e.timestamp < this.beginTimestamp) {
 | 
			
		||||
        return this.$toast('活动结束时间不能晚于开始时间')
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      if (this.selectData == 'stopSignupTime' && e.timestamp > this.beginTimestamp) {
 | 
			
		||||
        return this.$toast('报名截止时间不能早于开始时间')
 | 
			
		||||
      }
 | 
			
		||||
      this.params[this.selectData] = `${e.year}-${e.month}-${e.day} ${e.hour}:${e.minute}:${e.second}`
 | 
			
		||||
    },
 | 
			
		||||
    add() {
 | 
			
		||||
      if (!this.params.title) {
 | 
			
		||||
        return this.$toast('请输入活动标题')
 | 
			
		||||
      }
 | 
			
		||||
      if (!this.params.content) {
 | 
			
		||||
        return this.$toast('请输入活动标题')
 | 
			
		||||
      }
 | 
			
		||||
      if (!this.files.length) {
 | 
			
		||||
        return this.$toast('请上传活动封面')
 | 
			
		||||
      }
 | 
			
		||||
      if (!this.params.target) {
 | 
			
		||||
        return this.$toast('请选择活动主题')
 | 
			
		||||
      }
 | 
			
		||||
      if (!this.params.type) {
 | 
			
		||||
        return this.$toast('请选择活动类型')
 | 
			
		||||
      }
 | 
			
		||||
      if (this.params.scope === '') {
 | 
			
		||||
        return this.$toast('请选择报名范围')
 | 
			
		||||
      }
 | 
			
		||||
      if (this.params.scope == 1 && !this.selectedOrg.id) {
 | 
			
		||||
        return this.$toast('请选择发布单位')
 | 
			
		||||
      }
 | 
			
		||||
      if (this.params.scope == 2 && !this.params.communityId) {
 | 
			
		||||
        return this.$toast('请选择发布小区')
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      if (!this.params.total) {
 | 
			
		||||
        return this.$toast('请输入活动名额')
 | 
			
		||||
      }
 | 
			
		||||
      if (!this.params.address) {
 | 
			
		||||
        return this.$toast('请输入活动地点')
 | 
			
		||||
      }
 | 
			
		||||
      if (!this.params.beginTime) {
 | 
			
		||||
        return this.$toast('请选择开始时间')
 | 
			
		||||
      }
 | 
			
		||||
      if (!this.params.endTime) {
 | 
			
		||||
        return this.$toast('请选择结束时间')
 | 
			
		||||
      }
 | 
			
		||||
      if (!this.params.stopSignupTime) {
 | 
			
		||||
        return this.$toast('请选择报名截止时间')
 | 
			
		||||
      }
 | 
			
		||||
      if (!this.params.contactPerson) {
 | 
			
		||||
        return this.$toast('请输入联系人')
 | 
			
		||||
      }
 | 
			
		||||
      if (!this.params.contactPhone) {
 | 
			
		||||
        return this.$toast('请输入联系方式')
 | 
			
		||||
      }
 | 
			
		||||
      if (this.params.scope == 1) {
 | 
			
		||||
        this.params.orgId = this.selectedOrg.id
 | 
			
		||||
        this.params.orgName = this.selectedOrg.name
 | 
			
		||||
      }
 | 
			
		||||
      this.params.url = this.files[0].url
 | 
			
		||||
      this.params.createUserId = this.user.partyId
 | 
			
		||||
      this.params.createUserName = this.user.realName
 | 
			
		||||
      this.params.orgName = this.user.partyOrgName
 | 
			
		||||
      this.params.avatar = this.user.avatarUrl
 | 
			
		||||
      this.confirmAdd()
 | 
			
		||||
    },
 | 
			
		||||
    confirmAdd() {
 | 
			
		||||
      this.$http.post(`/app/appactivityinfo/addOrUpdate`, this.params).then((res) => {
 | 
			
		||||
        if (res.code == 0) {
 | 
			
		||||
          this.$toast(this.params.id ? '活动编辑成功' : '活动新增成功')
 | 
			
		||||
          setTimeout(() => {
 | 
			
		||||
            uni.$emit('refresh')
 | 
			
		||||
            uni.navigateBack()
 | 
			
		||||
          }, 2000)
 | 
			
		||||
        }
 | 
			
		||||
      })
 | 
			
		||||
    },
 | 
			
		||||
  },
 | 
			
		||||
}
 | 
			
		||||
</script>
 | 
			
		||||
<style lang="scss" scoped>
 | 
			
		||||
.textarea-div {
 | 
			
		||||
  width: 100%;
 | 
			
		||||
  padding: 32px 32px 38px 32px;
 | 
			
		||||
  box-sizing: border-box;
 | 
			
		||||
  background-color: #fff;
 | 
			
		||||
}
 | 
			
		||||
.input-div {
 | 
			
		||||
  width: 100%;
 | 
			
		||||
  padding-left: 32px;
 | 
			
		||||
  box-sizing: border-box;
 | 
			
		||||
  background-color: #fff;
 | 
			
		||||
  .border-content {
 | 
			
		||||
    display: flex;
 | 
			
		||||
    justify-content: space-between;
 | 
			
		||||
    line-height: 44px;
 | 
			
		||||
    color: #333;
 | 
			
		||||
    padding: 34px 32px 34px 0;
 | 
			
		||||
    .right-icon {
 | 
			
		||||
      width: 32px;
 | 
			
		||||
      height: 32px;
 | 
			
		||||
      margin-left: 8px;
 | 
			
		||||
      vertical-align: middle;
 | 
			
		||||
    }
 | 
			
		||||
    .color-999 {
 | 
			
		||||
      color: #999;
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
.title {
 | 
			
		||||
  font-size: 32px;
 | 
			
		||||
  font-family: PingFangSC-Regular, PingFang SC;
 | 
			
		||||
  color: #333;
 | 
			
		||||
  line-height: 44px;
 | 
			
		||||
  span {
 | 
			
		||||
    font-family: PingFangSC-Regular, PingFang SC;
 | 
			
		||||
    color: #ff4466;
 | 
			
		||||
    margin-right: 4px;
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
.border {
 | 
			
		||||
  border-bottom: 2px solid #ddd;
 | 
			
		||||
}
 | 
			
		||||
.mar-b32 {
 | 
			
		||||
  margin-bottom: 32px;
 | 
			
		||||
}
 | 
			
		||||
.pad-l20 {
 | 
			
		||||
  padding-left: 20px;
 | 
			
		||||
}
 | 
			
		||||
.mar-b16 {
 | 
			
		||||
  margin-bottom: 16px;
 | 
			
		||||
}
 | 
			
		||||
.pad-b220 {
 | 
			
		||||
  padding-bottom: 220px;
 | 
			
		||||
}
 | 
			
		||||
.footer-btn {
 | 
			
		||||
  width: 100%;
 | 
			
		||||
  padding: 116px 32px 32px;
 | 
			
		||||
  box-sizing: border-box;
 | 
			
		||||
  position: fixed;
 | 
			
		||||
  bottom: 0;
 | 
			
		||||
  left: 0;
 | 
			
		||||
  background-color: #f3f6f9;
 | 
			
		||||
  z-index: 99;
 | 
			
		||||
  .btn {
 | 
			
		||||
    width: 100%;
 | 
			
		||||
    height: 92px;
 | 
			
		||||
    line-height: 92px;
 | 
			
		||||
    text-align: center;
 | 
			
		||||
    background: #1365dd;
 | 
			
		||||
    border-radius: 8px;
 | 
			
		||||
    font-size: 34px;
 | 
			
		||||
    color: #fff;
 | 
			
		||||
    font-family: PingFangSC-Medium, PingFang SC;
 | 
			
		||||
    font-weight: 500;
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
.value {
 | 
			
		||||
  width: calc(100% - 240px);
 | 
			
		||||
  text-align: right;
 | 
			
		||||
}
 | 
			
		||||
::v-deep ai-search-popup {
 | 
			
		||||
  width: 100%;
 | 
			
		||||
  .uni-input {
 | 
			
		||||
    display: inline-block;
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
</style>
 | 
			
		||||
@@ -1,137 +0,0 @@
 | 
			
		||||
<template>
 | 
			
		||||
  <div class="page">
 | 
			
		||||
    <div class="textarea-div mar-b16">
 | 
			
		||||
      <div class="title mar-b32"><span></span>帖子内容</div>
 | 
			
		||||
      <div class="pad-l20">
 | 
			
		||||
        <u-input v-model="form.content" type="textarea" :border="false" :height="140" :auto-height="true" placeholder="请输入内容(1000字以内)" placeholder-style="color:#999;font-size:16px;" maxLength="140" />
 | 
			
		||||
      </div>
 | 
			
		||||
    </div>
 | 
			
		||||
    <div class="textarea-div pad-b208">
 | 
			
		||||
      <div class="title mar-b32"><span></span>图片(最多9张)</div>
 | 
			
		||||
      <div class="pad-l20">
 | 
			
		||||
        <AiUploader :limit="9" v-model="form.images"></AiUploader>
 | 
			
		||||
      </div>
 | 
			
		||||
    </div>
 | 
			
		||||
    <div class="footer-btn">
 | 
			
		||||
      <div class="btn" @click="addPost">立即发布</div>
 | 
			
		||||
    </div>
 | 
			
		||||
  </div>
 | 
			
		||||
</template>
 | 
			
		||||
 | 
			
		||||
<script>
 | 
			
		||||
import { mapState } from 'vuex'
 | 
			
		||||
 | 
			
		||||
export default {
 | 
			
		||||
  name: 'AddPosts',
 | 
			
		||||
  components: {},
 | 
			
		||||
  computed: {
 | 
			
		||||
    ...mapState(['user']),
 | 
			
		||||
  },
 | 
			
		||||
  data() {
 | 
			
		||||
    return {
 | 
			
		||||
      files: [],
 | 
			
		||||
      id: '',
 | 
			
		||||
      flag: false,
 | 
			
		||||
      form: {
 | 
			
		||||
        content: '',
 | 
			
		||||
        images: [],
 | 
			
		||||
      },
 | 
			
		||||
    }
 | 
			
		||||
  },
 | 
			
		||||
  onLoad(o) {
 | 
			
		||||
    this.id = o.id || ''
 | 
			
		||||
  },
 | 
			
		||||
  methods: {
 | 
			
		||||
    addPost() {
 | 
			
		||||
      if (this.flag) return
 | 
			
		||||
 | 
			
		||||
      if (!this.form.content && !this.form.images.length) {
 | 
			
		||||
        return this.$u.toast('帖子内容不能为空')
 | 
			
		||||
      }
 | 
			
		||||
      this.flag = true
 | 
			
		||||
 | 
			
		||||
      let imagesList = []
 | 
			
		||||
      if (this.form.images) {
 | 
			
		||||
        this.form.images.map((item) => {
 | 
			
		||||
          imagesList.push({ id: item.id, url: item.url })
 | 
			
		||||
        })
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      this.$http
 | 
			
		||||
        .post(`/app/apppostinfo/addOrUpdate`, {
 | 
			
		||||
          content: this.form.content,
 | 
			
		||||
          avatar: this.user.avatarUrl,
 | 
			
		||||
          name: this.user.realName,
 | 
			
		||||
          phone: this.user.phone ? this.user.phone : '',
 | 
			
		||||
          userId: this.user.partyId,
 | 
			
		||||
          activityId: this.id,
 | 
			
		||||
          images: JSON.stringify(imagesList),
 | 
			
		||||
        })
 | 
			
		||||
        .then((res) => {
 | 
			
		||||
          if (res.code == 0) {
 | 
			
		||||
            this.$u.toast('发布成功')
 | 
			
		||||
            this.flag = false
 | 
			
		||||
            uni.$emit('refresh')
 | 
			
		||||
            uni.navigateBack()
 | 
			
		||||
          }
 | 
			
		||||
        })
 | 
			
		||||
    },
 | 
			
		||||
  },
 | 
			
		||||
}
 | 
			
		||||
</script>
 | 
			
		||||
<style lang="scss" scoped>
 | 
			
		||||
.textarea-div {
 | 
			
		||||
  width: 100%;
 | 
			
		||||
  padding: 32px 32px 38px 32px;
 | 
			
		||||
  box-sizing: border-box;
 | 
			
		||||
  background-color: #fff;
 | 
			
		||||
}
 | 
			
		||||
.title {
 | 
			
		||||
  font-size: 32px;
 | 
			
		||||
  font-family: PingFangSC-Regular, PingFang SC;
 | 
			
		||||
  color: #333;
 | 
			
		||||
  line-height: 44px;
 | 
			
		||||
  span {
 | 
			
		||||
    font-family: PingFangSC-Regular, PingFang SC;
 | 
			
		||||
    color: #ff4466;
 | 
			
		||||
    margin-right: 4px;
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
.border {
 | 
			
		||||
  border-bottom: 2px solid #ddd;
 | 
			
		||||
}
 | 
			
		||||
.mar-b32 {
 | 
			
		||||
  margin-bottom: 32px;
 | 
			
		||||
}
 | 
			
		||||
.pad-l20 {
 | 
			
		||||
  padding-left: 20px;
 | 
			
		||||
}
 | 
			
		||||
.mar-b16 {
 | 
			
		||||
  margin-bottom: 16px;
 | 
			
		||||
}
 | 
			
		||||
.pad-b208 {
 | 
			
		||||
  padding-bottom: 208px;
 | 
			
		||||
}
 | 
			
		||||
.footer-btn {
 | 
			
		||||
  width: 100%;
 | 
			
		||||
  padding: 116px 32px 32px;
 | 
			
		||||
  box-sizing: border-box;
 | 
			
		||||
  position: fixed;
 | 
			
		||||
  bottom: 0;
 | 
			
		||||
  left: 0;
 | 
			
		||||
  background-color: #f3f6f9;
 | 
			
		||||
  z-index: 99;
 | 
			
		||||
  .btn {
 | 
			
		||||
    width: 100%;
 | 
			
		||||
    height: 92px;
 | 
			
		||||
    line-height: 92px;
 | 
			
		||||
    text-align: center;
 | 
			
		||||
    background: #1365dd;
 | 
			
		||||
    border-radius: 8px;
 | 
			
		||||
    font-size: 34px;
 | 
			
		||||
    color: #fff;
 | 
			
		||||
    font-family: PingFangSC-Medium, PingFang SC;
 | 
			
		||||
    font-weight: 500;
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
</style>
 | 
			
		||||
@@ -1,644 +0,0 @@
 | 
			
		||||
<template>
 | 
			
		||||
  <div class="page">
 | 
			
		||||
    <div class="po-f">
 | 
			
		||||
      <view class="nav-box flex-row">
 | 
			
		||||
        <view
 | 
			
		||||
          class="nav-item"
 | 
			
		||||
          :class="tabIndex == index ? 'active' : ''"
 | 
			
		||||
          v-for="(item, index) in tabList"
 | 
			
		||||
          :key="index"
 | 
			
		||||
          @click="tabClick(index)"
 | 
			
		||||
          >{{ item }}<span></span
 | 
			
		||||
        ></view>
 | 
			
		||||
      </view>
 | 
			
		||||
      <div v-if="tabIndex == 0" class="header-tab">
 | 
			
		||||
        <div class="header-info" v-if="newsList.length">
 | 
			
		||||
          <span class="tips">公告</span>
 | 
			
		||||
          <div class="text-content">
 | 
			
		||||
            <u-notice-bar @click="noticeClick"
 | 
			
		||||
              mode="vertical"
 | 
			
		||||
              :list="newsList"
 | 
			
		||||
              :volume-icon="false"
 | 
			
		||||
              type="none"
 | 
			
		||||
              color="#333"
 | 
			
		||||
            ></u-notice-bar>
 | 
			
		||||
          </div>
 | 
			
		||||
        </div>
 | 
			
		||||
        <div class="header-title">
 | 
			
		||||
          <p class="text">帖子列表</p>
 | 
			
		||||
          <!-- <div class="right-select" @click="showSelect=true">
 | 
			
		||||
            {{selectText}}<img src="../../static/img/right-icon-666.png" alt="" />
 | 
			
		||||
          </div> -->
 | 
			
		||||
        </div>
 | 
			
		||||
      </div>
 | 
			
		||||
      <div v-if="tabIndex == 1" class="header-tab">
 | 
			
		||||
        <div class="header-info">活动报名大于{{num}}人时组团成功,人数不足时活动失效。</div>
 | 
			
		||||
        <div class="header-title">
 | 
			
		||||
          <p class="text">活动列表</p>
 | 
			
		||||
        <div class="right-select" @click="showSelect=true">
 | 
			
		||||
            {{selectText}}<img src="./components/right-icon-666.png" alt="" />
 | 
			
		||||
          </div>
 | 
			
		||||
        </div>
 | 
			
		||||
      </div>
 | 
			
		||||
      <div v-if="tabIndex == 2" class="header-tab">
 | 
			
		||||
        <!-- <AiHeaderSearchBar placeholder="请输入活动标题或者地点" barBgColor="#fff" inputBgColor="#F5F5F5" inputColor="#333" inputPlaceholderColor="#999" searchIconColor="#ccc" @change="search"></AiHeaderSearchBar> -->
 | 
			
		||||
      </div>
 | 
			
		||||
    </div>
 | 
			
		||||
    <div class="list-content">
 | 
			
		||||
      <div v-if="tabIndex == 0" :class="isPadding ? 'pad-t308' : 'pad-t200'">
 | 
			
		||||
        <div class="forum-list">
 | 
			
		||||
          <div class="forum-item" v-for="(item, index) in list" :key="index" @click="toBBSDetail(item.id)">
 | 
			
		||||
            <div class="user-info">
 | 
			
		||||
              <image :src="item.avatar" class="user-name-bg"></image>
 | 
			
		||||
              <div class="info">
 | 
			
		||||
                <div>{{ item.name }}</div>
 | 
			
		||||
                <p>{{ item.createTime }}</p>
 | 
			
		||||
              </div>
 | 
			
		||||
            </div>
 | 
			
		||||
            <p class="conent-text">{{ item.content }}</p>
 | 
			
		||||
            <div class="img-list" v-if="item.images.length">
 | 
			
		||||
              <image v-for="(img, i) in item.images" :key="i" :src="img.url" @click.stop="previewImage(item.images, img.url)" v-if="i<3">
 | 
			
		||||
            </div>
 | 
			
		||||
            <div class="bottom-icon">
 | 
			
		||||
              <div>
 | 
			
		||||
                <i class="iconfont"></i>
 | 
			
		||||
                <span>{{ item.viewNum }}</span>
 | 
			
		||||
              </div>
 | 
			
		||||
              <div>
 | 
			
		||||
                <i class="iconfont"></i>
 | 
			
		||||
                <span>{{ item.replyNum }}</span>
 | 
			
		||||
              </div>
 | 
			
		||||
              <!-- <div @click.stop="support(item, index)">
 | 
			
		||||
                <AiIcon icon="iconpraiseactive2x" size="18" v-if="item.mySupport==1" style="vertical-align: middle;" />
 | 
			
		||||
                <i class="iconfont" v-else></i>
 | 
			
		||||
                <span>{{ item.supportNum }}</span>
 | 
			
		||||
              </div> -->
 | 
			
		||||
            </div>
 | 
			
		||||
          </div>
 | 
			
		||||
        </div>
 | 
			
		||||
      </div>
 | 
			
		||||
      <div v-if="tabIndex == 1" class="pad-t308">
 | 
			
		||||
        <div class="active-list mar-t32">
 | 
			
		||||
          <div class="active-item" v-for="(item, index) in list" :key="index" @click="toActiveDetail(item)">
 | 
			
		||||
            <div class="img-div">
 | 
			
		||||
              <div class="status" :class="'status'+item.status">{{ $dict.getLabel('newActivityStatus', item.status) }}</div>
 | 
			
		||||
              <img :src="item.url" alt="">
 | 
			
		||||
            </div>
 | 
			
		||||
            <div class="right-info">
 | 
			
		||||
              <p class="title">{{ item.title }}</p>
 | 
			
		||||
              <div class="time"><span>{{ item.realNum }}人</span>已报名</div>
 | 
			
		||||
              <div class="time">{{ item.beginTime }} </div>
 | 
			
		||||
              <div class="time address">{{ item.address }}</div>
 | 
			
		||||
            </div>
 | 
			
		||||
          </div>
 | 
			
		||||
        </div>
 | 
			
		||||
      </div>
 | 
			
		||||
      <div v-if="tabIndex == 2" class="pad-t200">
 | 
			
		||||
        <div class="active-list mar-t32">
 | 
			
		||||
          <div class="active-item" v-for="(item, index) in list" :key="index" @click="toActiveDetail(item)">
 | 
			
		||||
            <div class="img-div">
 | 
			
		||||
              <div class="status" :class="'status'+item.status">{{ $dict.getLabel('newActivityStatus', item.status) }}</div>
 | 
			
		||||
              <img :src="item.url" alt="">
 | 
			
		||||
            </div>
 | 
			
		||||
            <div class="right-info">
 | 
			
		||||
              <p class="title">{{ item.title }}</p>
 | 
			
		||||
              <div class="time"><span>{{ item.realNum }}人</span>已报名</div>
 | 
			
		||||
              <div class="time">{{ item.beginTime }} </div>
 | 
			
		||||
              <div class="time address">{{ item.address }}</div>
 | 
			
		||||
            </div>
 | 
			
		||||
          </div>
 | 
			
		||||
        </div>
 | 
			
		||||
      </div>
 | 
			
		||||
      <AiEmpty v-if="!list.length"/>
 | 
			
		||||
    </div>
 | 
			
		||||
    <u-select v-model="showSelect" mode="mutil-column-auto" :list="selectList" @confirm="confirmSelect" />
 | 
			
		||||
    <!-- <img src="../../static/img/add-icon.png" alt="" class="add-icon" @click="toAdd"> -->
 | 
			
		||||
 | 
			
		||||
    <AiFixedBtn>
 | 
			
		||||
      <div class="addBtn iconfont iconfont-iconfangda" @tap.stop="toAdd()" />
 | 
			
		||||
    </AiFixedBtn>
 | 
			
		||||
 | 
			
		||||
    <u-back-top :scrollTop="scrollTop" :iconStyle="iconStyle" icon="arrow-up" :customStyle="customStyle" bottom="72" right="32"></u-back-top>
 | 
			
		||||
  </div>
 | 
			
		||||
</template>
 | 
			
		||||
 | 
			
		||||
<script>
 | 
			
		||||
import { mapState } from 'vuex'
 | 
			
		||||
 | 
			
		||||
export default {
 | 
			
		||||
  name: 'AppActive',
 | 
			
		||||
  appName: '居民议事',
 | 
			
		||||
  components: {},
 | 
			
		||||
  computed: {
 | 
			
		||||
    ...mapState(['user']),
 | 
			
		||||
  },
 | 
			
		||||
  data() {
 | 
			
		||||
    return {
 | 
			
		||||
      list: [],
 | 
			
		||||
      isMore: false,
 | 
			
		||||
      current: 0,
 | 
			
		||||
      pageShow: false,
 | 
			
		||||
      tabIndex: 0,
 | 
			
		||||
      tabList: ["论坛", "活动", "动态"],
 | 
			
		||||
      list: [],
 | 
			
		||||
      newsList: [],
 | 
			
		||||
      iconStyle: {
 | 
			
		||||
				fontSize: '56rpx',
 | 
			
		||||
				color: '#1365DD',
 | 
			
		||||
        fontWeight: '700'
 | 
			
		||||
			},
 | 
			
		||||
      customStyle: {
 | 
			
		||||
        width: '96rpx',
 | 
			
		||||
        height: '96rpx',
 | 
			
		||||
        backgroundColor: '#fff',
 | 
			
		||||
        boxShadow: '0px 8rpx 16rpx 0px rgba(0, 0, 0, 0.2)',
 | 
			
		||||
      },
 | 
			
		||||
      scrollTop: 0,
 | 
			
		||||
      supportFlag: true,
 | 
			
		||||
      num: '',
 | 
			
		||||
      title: '',
 | 
			
		||||
      selectText: '最新活动',
 | 
			
		||||
      showSelect: false,
 | 
			
		||||
      selectList: [{label: '最新活动'}, {label: '我的活动'}],
 | 
			
		||||
      noticeList: [],
 | 
			
		||||
      isPadding: false
 | 
			
		||||
    };
 | 
			
		||||
  },
 | 
			
		||||
  onLoad(option) {
 | 
			
		||||
    if(option.tabIndex) {
 | 
			
		||||
      this.tabIndex = option.tabIndex
 | 
			
		||||
    }
 | 
			
		||||
    this.$dict.load(['newActivityStatus']).then(() => {
 | 
			
		||||
      this.getList()
 | 
			
		||||
      this.getActiveNum()
 | 
			
		||||
    })
 | 
			
		||||
 | 
			
		||||
    uni.$on('refresh', () => {
 | 
			
		||||
      this.getListInit()
 | 
			
		||||
    })
 | 
			
		||||
 | 
			
		||||
    this.getNewList()
 | 
			
		||||
  },
 | 
			
		||||
 | 
			
		||||
  methods: {
 | 
			
		||||
    search(v) {
 | 
			
		||||
      this.title = v
 | 
			
		||||
      this.getListInit()
 | 
			
		||||
    },
 | 
			
		||||
    confirmSelect(e) {
 | 
			
		||||
      this.selectText = e[0].label
 | 
			
		||||
      this.getListInit()
 | 
			
		||||
    },
 | 
			
		||||
    tabClick(index) {
 | 
			
		||||
      this.tabIndex = index
 | 
			
		||||
      this.getListInit()
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    toBBSDetail (id) {
 | 
			
		||||
      uni.navigateTo({
 | 
			
		||||
        url: `./Detail?id=${id}`
 | 
			
		||||
      })
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    toAdd () {
 | 
			
		||||
      if (this.tabIndex == 0) {
 | 
			
		||||
        uni.navigateTo({
 | 
			
		||||
          url: `./AddPosts`
 | 
			
		||||
        })
 | 
			
		||||
      } else {
 | 
			
		||||
        uni.navigateTo({
 | 
			
		||||
          url: `./AddActive`
 | 
			
		||||
        })
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    previewImage (images, img) {
 | 
			
		||||
      uni.previewImage({
 | 
			
		||||
        urls: images.map(v => v.url),
 | 
			
		||||
        current: img
 | 
			
		||||
      })
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    getListInit() {
 | 
			
		||||
      this.current = 0
 | 
			
		||||
      this.isMore = false
 | 
			
		||||
      this.getList()
 | 
			
		||||
    },
 | 
			
		||||
    getList () {
 | 
			
		||||
      if (this.isMore) return
 | 
			
		||||
 | 
			
		||||
      this.$loading()
 | 
			
		||||
      let url = this.tabIndex == 0 ? `/app/apppostinfo/list` : `/app/appactivityinfo/list`
 | 
			
		||||
      let params = `&searchUserId=${this.user.partyId}`
 | 
			
		||||
 | 
			
		||||
      if(this.tabIndex == 1 && this.selectText == '我的活动') { //我的活动
 | 
			
		||||
        params = `&createUserId=${this.user.partyId}`
 | 
			
		||||
      }
 | 
			
		||||
      if (this.tabIndex == 2) {
 | 
			
		||||
        params = `&status=5&title=${this.title}`
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
      this.$http.post(`${url}?size=10¤t=${this.current + 1}${params}`).then(res => {
 | 
			
		||||
        if (res.code === 0) {
 | 
			
		||||
          if (!this.current) {
 | 
			
		||||
            this.list = []
 | 
			
		||||
          }
 | 
			
		||||
 | 
			
		||||
          if (!res.data.records.length) {
 | 
			
		||||
            this.$hideLoading()
 | 
			
		||||
            this.isMore = true
 | 
			
		||||
 | 
			
		||||
            this.$nextTick(() => {
 | 
			
		||||
              this.pageShow = true
 | 
			
		||||
            })
 | 
			
		||||
 | 
			
		||||
            return false
 | 
			
		||||
          }
 | 
			
		||||
 | 
			
		||||
          const data = res.data.records.map(item => {
 | 
			
		||||
            if (this.tabIndex == 0) {
 | 
			
		||||
              if (item.images) {
 | 
			
		||||
                item.images = JSON.parse(item.images)
 | 
			
		||||
              }
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            return item
 | 
			
		||||
          })
 | 
			
		||||
 | 
			
		||||
          this.list.push(...data)
 | 
			
		||||
          this.current = this.current + 1
 | 
			
		||||
 | 
			
		||||
          this.$hideLoading()
 | 
			
		||||
          this.$nextTick(() => {
 | 
			
		||||
            this.pageShow = true
 | 
			
		||||
          })
 | 
			
		||||
        } else {
 | 
			
		||||
          this.$hideLoading()
 | 
			
		||||
        }
 | 
			
		||||
      }).catch(() => {
 | 
			
		||||
        this.$hideLoading()
 | 
			
		||||
      })
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    support(e, index) {
 | 
			
		||||
      if (this.supportFlag) {
 | 
			
		||||
        this.supportFlag = false;
 | 
			
		||||
        this.$http.post(`/app/apppostsupport/support`, {
 | 
			
		||||
          postId: e.id,
 | 
			
		||||
          createUserId: this.user.partyId
 | 
			
		||||
        }).then(res => {
 | 
			
		||||
          if (res.code == 0) {
 | 
			
		||||
            this.supportFlag = true
 | 
			
		||||
            if(e.mySupport == 1) {
 | 
			
		||||
              this.list[index].mySupport = 0
 | 
			
		||||
              this.list[index].supportNum = this.list[index].supportNum-1
 | 
			
		||||
            }else {
 | 
			
		||||
              this.list[index].mySupport = 1
 | 
			
		||||
              this.list[index].supportNum = this.list[index].supportNum+1
 | 
			
		||||
            }
 | 
			
		||||
          }
 | 
			
		||||
        })
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    toActiveDetail(e) {
 | 
			
		||||
      uni.navigateTo({url: `./ActiveDetail?id=${e.id}`})
 | 
			
		||||
    },
 | 
			
		||||
    getActiveNum() {
 | 
			
		||||
      this.$http.post(`/app/appactivityconfig/queryDetail`).then(res => {
 | 
			
		||||
        if(res.code == 0) {
 | 
			
		||||
          this.num = res.data.num
 | 
			
		||||
        }
 | 
			
		||||
      })
 | 
			
		||||
    },
 | 
			
		||||
    getNewList() {
 | 
			
		||||
      this.$http.post(`/app/apppolicypromotion/listWechat`, {
 | 
			
		||||
        type: 3,
 | 
			
		||||
        areaId: this.$areaId,
 | 
			
		||||
        current: 1,
 | 
			
		||||
        size: 5
 | 
			
		||||
      }).then(res => {
 | 
			
		||||
        if(res.code == 0) {
 | 
			
		||||
          if(res.data && res.data.records.length) {
 | 
			
		||||
            this.isPadding = true
 | 
			
		||||
            this.noticeList = res.data.records
 | 
			
		||||
            res.data.records.map((item) => {
 | 
			
		||||
              this.newsList.push(item.title)
 | 
			
		||||
            })
 | 
			
		||||
          }
 | 
			
		||||
        }
 | 
			
		||||
      })
 | 
			
		||||
    },
 | 
			
		||||
    noticeClick(e) {
 | 
			
		||||
      console.log(e)
 | 
			
		||||
      this.linkTo(`./notice?id=${this.noticeList[0].id}`)
 | 
			
		||||
    }
 | 
			
		||||
  },
 | 
			
		||||
 | 
			
		||||
  onReachBottom (){
 | 
			
		||||
    this.getList()
 | 
			
		||||
  },
 | 
			
		||||
 | 
			
		||||
  onPageScroll(e) {
 | 
			
		||||
    this.scrollTop = e.scrollTop;
 | 
			
		||||
  },
 | 
			
		||||
};
 | 
			
		||||
</script>
 | 
			
		||||
<style lang="scss" scoped>
 | 
			
		||||
.po-f{
 | 
			
		||||
  position: fixed;
 | 
			
		||||
  top: 0;
 | 
			
		||||
  left: 0;
 | 
			
		||||
  width: 100%;
 | 
			
		||||
  z-index: 99;
 | 
			
		||||
}
 | 
			
		||||
.pad-t200{
 | 
			
		||||
  padding-top: 200rpx;
 | 
			
		||||
}
 | 
			
		||||
.pad-t308{
 | 
			
		||||
  padding-top: 308rpx;
 | 
			
		||||
}
 | 
			
		||||
.header-tab{
 | 
			
		||||
  width: 100%;
 | 
			
		||||
  height: 100%;
 | 
			
		||||
}
 | 
			
		||||
.list-content{
 | 
			
		||||
  // padding-top: 96px;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 .AiFixedBtn {
 | 
			
		||||
    .movableArea {
 | 
			
		||||
      .addBtn {
 | 
			
		||||
        display: flex;
 | 
			
		||||
        justify-content: center;
 | 
			
		||||
        align-items: center;
 | 
			
		||||
        width: 96px;
 | 
			
		||||
        height: 96px;
 | 
			
		||||
        flex-shrink: 0;
 | 
			
		||||
        background: $uni-color-primary;
 | 
			
		||||
        box-shadow: 0 8px 16px 0 rgba(0, 0, 0, 0.2);
 | 
			
		||||
        font-size: 48px;
 | 
			
		||||
        background: #fff;
 | 
			
		||||
        color: #1365dd;
 | 
			
		||||
        border-radius: 50%;
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
.nav-box {
 | 
			
		||||
  background-color: #3671ee;
 | 
			
		||||
  height: 96px;
 | 
			
		||||
  box-sizing: border-box;
 | 
			
		||||
  display: flex;
 | 
			
		||||
  .active {
 | 
			
		||||
    display: block;
 | 
			
		||||
    position: relative;
 | 
			
		||||
    span {
 | 
			
		||||
      position: absolute;
 | 
			
		||||
      top: 78px;
 | 
			
		||||
      left: 50%;
 | 
			
		||||
      margin-left: -20px;
 | 
			
		||||
      width: 40px;
 | 
			
		||||
      height: 4px;
 | 
			
		||||
      background-color: #fff;
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
.nav-item {
 | 
			
		||||
  flex: 1;
 | 
			
		||||
  color: #ffffff;
 | 
			
		||||
  font-size: 28px;
 | 
			
		||||
  line-height: 96px;
 | 
			
		||||
  text-align: center;
 | 
			
		||||
}
 | 
			
		||||
.header-info {
 | 
			
		||||
  width: 100%;
 | 
			
		||||
  height: 112px;
 | 
			
		||||
  padding: 32px;
 | 
			
		||||
  box-sizing: border-box;
 | 
			
		||||
  background: #fefaea;
 | 
			
		||||
  color: #FFA13E;
 | 
			
		||||
  font-size: 28px;
 | 
			
		||||
  .tips {
 | 
			
		||||
    display: inline-block;
 | 
			
		||||
    width: 104px;
 | 
			
		||||
    height: 48px;
 | 
			
		||||
    line-height: 48px;
 | 
			
		||||
    text-align: center;
 | 
			
		||||
    background: #ffa13e;
 | 
			
		||||
    border-radius: 16px;
 | 
			
		||||
    font-family: PingFangSC-Medium, PingFang SC;
 | 
			
		||||
    font-weight: 500;
 | 
			
		||||
    color: #fff;
 | 
			
		||||
    vertical-align: top;
 | 
			
		||||
    margin-right: 16px;
 | 
			
		||||
  }
 | 
			
		||||
  .text-content {
 | 
			
		||||
    display: inline-block;
 | 
			
		||||
    width: calc(100% - 122px);
 | 
			
		||||
    margin-top: -10px;
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
.header-title {
 | 
			
		||||
  width: 100%;
 | 
			
		||||
  height: 108px;
 | 
			
		||||
  padding: 32px;
 | 
			
		||||
  box-sizing: border-box;
 | 
			
		||||
  background: #fff;
 | 
			
		||||
  display: flex;
 | 
			
		||||
  justify-content: space-between;
 | 
			
		||||
  border-bottom: 2px solid #f3f6f9;
 | 
			
		||||
  .text {
 | 
			
		||||
    font-size: 32px;
 | 
			
		||||
    font-family: PingFangSC-Semibold, PingFang SC;
 | 
			
		||||
    font-weight: 600;
 | 
			
		||||
    color: #333;
 | 
			
		||||
    line-height: 44px;
 | 
			
		||||
  }
 | 
			
		||||
  .right-select {
 | 
			
		||||
    font-size: 26px;
 | 
			
		||||
    font-family: PingFangSC-Regular, PingFang SC;
 | 
			
		||||
    font-weight: 400;
 | 
			
		||||
    color: #666;
 | 
			
		||||
    line-height: 36px;
 | 
			
		||||
    img {
 | 
			
		||||
      width: 32px;
 | 
			
		||||
      height: 32px;
 | 
			
		||||
      margin-left: 8px;
 | 
			
		||||
      vertical-align: middle;
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
.forum-item{
 | 
			
		||||
  padding: 26px 30px 28px;
 | 
			
		||||
  background-color: #fff;
 | 
			
		||||
  .user-info{
 | 
			
		||||
    display: flex;
 | 
			
		||||
    margin-bottom: 32px;
 | 
			
		||||
    .user-name-bg{
 | 
			
		||||
      width: 64px;
 | 
			
		||||
      height: 64px;
 | 
			
		||||
      line-height: 64px;
 | 
			
		||||
      text-align: center;
 | 
			
		||||
      background: #4E8EEE;
 | 
			
		||||
      font-size: 24px;
 | 
			
		||||
      font-family: PingFangSC-Medium, PingFang SC;
 | 
			
		||||
      font-weight: 500;
 | 
			
		||||
      color: #FFF;
 | 
			
		||||
      margin-right: 16px;
 | 
			
		||||
      border-radius: 50%;
 | 
			
		||||
    }
 | 
			
		||||
    .info{
 | 
			
		||||
      div{
 | 
			
		||||
        font-size: 26px;
 | 
			
		||||
        font-family: PingFangSC-Medium, PingFang SC;
 | 
			
		||||
        font-weight: 500;
 | 
			
		||||
        color: #333;
 | 
			
		||||
        line-height: 26px;
 | 
			
		||||
        margin-bottom: 10px;
 | 
			
		||||
      }
 | 
			
		||||
      p{
 | 
			
		||||
        font-size: 22px;
 | 
			
		||||
        font-family: PingFangSC-Regular, PingFang SC;
 | 
			
		||||
        font-weight: 400;
 | 
			
		||||
        color: #999;
 | 
			
		||||
        line-height: 22px;
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
  .conent-text{
 | 
			
		||||
    font-size: 26px;
 | 
			
		||||
    font-family: PingFangSC-Regular, PingFang SC;
 | 
			
		||||
    font-weight: 400;
 | 
			
		||||
    color: #333;
 | 
			
		||||
    line-height: 42px;
 | 
			
		||||
    word-break: break-all;
 | 
			
		||||
    text-overflow: -o-ellipsis-lastline;
 | 
			
		||||
    overflow: hidden;
 | 
			
		||||
    text-overflow: ellipsis;
 | 
			
		||||
    display: -webkit-box;
 | 
			
		||||
    -webkit-line-clamp: 4;
 | 
			
		||||
    line-clamp: 4;
 | 
			
		||||
    -webkit-box-orient: vertical;
 | 
			
		||||
    margin-bottom: 16px;
 | 
			
		||||
  }
 | 
			
		||||
  .img-list{
 | 
			
		||||
    image {
 | 
			
		||||
      width: 224px;
 | 
			
		||||
      height: 224px;
 | 
			
		||||
      margin-right: 8px;
 | 
			
		||||
    }
 | 
			
		||||
    img:nth-of-type(3n){
 | 
			
		||||
      margin-right: 0;
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
  .bottom-icon{
 | 
			
		||||
    display: flex;
 | 
			
		||||
    justify-content: space-between;
 | 
			
		||||
    .iconfont{
 | 
			
		||||
      display: inline-block;
 | 
			
		||||
      width: 40px;
 | 
			
		||||
      vertical-align: middle;
 | 
			
		||||
    }
 | 
			
		||||
    span{
 | 
			
		||||
      font-size: 24px;
 | 
			
		||||
      font-family: PingFangSC-Regular, PingFang SC;
 | 
			
		||||
      color: #333;
 | 
			
		||||
      line-height: 40px;
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
.active-item{
 | 
			
		||||
  padding: 24px;
 | 
			
		||||
  display: flex;
 | 
			
		||||
  background-color: #fff;
 | 
			
		||||
  width: 686px;
 | 
			
		||||
  background: #FFF;
 | 
			
		||||
  box-shadow: 0px 8px 16px 0px rgba(0, 0, 0, 0.02);
 | 
			
		||||
  border-radius: 4px;
 | 
			
		||||
  margin: 0 0 32px 32px;
 | 
			
		||||
  box-sizing: border-box;
 | 
			
		||||
  .img-div{
 | 
			
		||||
    width: 200px;
 | 
			
		||||
    height: 200px;
 | 
			
		||||
    margin-right: 24px;
 | 
			
		||||
    position: relative;
 | 
			
		||||
    img{
 | 
			
		||||
      width: 200px;
 | 
			
		||||
      height: 200px;
 | 
			
		||||
      border-radius: 4px;
 | 
			
		||||
    }
 | 
			
		||||
    .status{
 | 
			
		||||
      position: absolute;
 | 
			
		||||
      top: 0;
 | 
			
		||||
      left: 0;
 | 
			
		||||
      height: 44px;
 | 
			
		||||
      padding: 0 8px;
 | 
			
		||||
      font-size: 26px;
 | 
			
		||||
      font-family: PingFangSC-Regular, PingFang SC;
 | 
			
		||||
      color: #FFF;
 | 
			
		||||
    }
 | 
			
		||||
    .status0{
 | 
			
		||||
      background: #000;
 | 
			
		||||
    }
 | 
			
		||||
    .status1{
 | 
			
		||||
      background: #FF883C;
 | 
			
		||||
    }
 | 
			
		||||
    .status3{
 | 
			
		||||
      background: #1AAAFF;
 | 
			
		||||
    }
 | 
			
		||||
    .status2{
 | 
			
		||||
      background: #42D784;
 | 
			
		||||
    }
 | 
			
		||||
    .status4, .status5{
 | 
			
		||||
      background: #E4E4E4;
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
  .right-info{
 | 
			
		||||
    width: calc(100% - 224px);
 | 
			
		||||
    .title{
 | 
			
		||||
      font-size: 32px;
 | 
			
		||||
      font-family: PingFangSC-Medium, PingFang SC;
 | 
			
		||||
      font-weight: 500;
 | 
			
		||||
      color: #333;
 | 
			
		||||
      line-height: 44px;
 | 
			
		||||
      word-break: break-all;
 | 
			
		||||
      margin-bottom: 8px;
 | 
			
		||||
      text-overflow: -o-ellipsis-lastline;
 | 
			
		||||
      overflow: hidden;
 | 
			
		||||
      text-overflow: ellipsis;
 | 
			
		||||
      display: -webkit-box;
 | 
			
		||||
      -webkit-line-clamp: 2;
 | 
			
		||||
      line-clamp: 2;
 | 
			
		||||
      -webkit-box-orient: vertical;
 | 
			
		||||
    }
 | 
			
		||||
    .time{
 | 
			
		||||
      font-size: 26px;
 | 
			
		||||
      font-family: PingFangSC-Regular, PingFang SC;
 | 
			
		||||
      color: #666;
 | 
			
		||||
      line-height: 36px;
 | 
			
		||||
      margin-bottom: 4px;
 | 
			
		||||
      word-break: break-all;
 | 
			
		||||
      span{
 | 
			
		||||
        color: #3376FD;
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
    .address{
 | 
			
		||||
      white-space: nowrap;
 | 
			
		||||
      text-overflow: ellipsis;
 | 
			
		||||
      overflow: hidden;
 | 
			
		||||
      word-break: break-all;
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
.add-icon{
 | 
			
		||||
  position: fixed;
 | 
			
		||||
  right: 16px;
 | 
			
		||||
  bottom: 160px;
 | 
			
		||||
  width: 128px;
 | 
			
		||||
  height: 128px;
 | 
			
		||||
}
 | 
			
		||||
.mar-t32{
 | 
			
		||||
  margin-top: 32px;
 | 
			
		||||
}
 | 
			
		||||
</style>
 | 
			
		||||
@@ -1,387 +0,0 @@
 | 
			
		||||
<template>
 | 
			
		||||
  <div class="page" v-if="pageShow">
 | 
			
		||||
    <div class="header">
 | 
			
		||||
      <div class="user-info">
 | 
			
		||||
        <image class="user-name-bg" :src="info.avatar" />
 | 
			
		||||
        <div class="info">
 | 
			
		||||
          <div>{{ info.name }}</div>
 | 
			
		||||
          <p>{{ info.createTime }}<span v-if="info.userId == user.id" @click="del">删除帖子</span></p>
 | 
			
		||||
        </div>
 | 
			
		||||
      </div>
 | 
			
		||||
      <p class="text-content">{{ info.content }}</p>
 | 
			
		||||
      <div class="img-list" v-if="info.images.length">
 | 
			
		||||
        <img :src="item.url" :key="index" v-for="(item, index) in info.images" @click.stop="previewImage(info.images, item.url)" />
 | 
			
		||||
      </div>
 | 
			
		||||
    </div>
 | 
			
		||||
    <div class="reply-list">
 | 
			
		||||
      <div class="item" v-for="(item, index) in info.replyList" :key="index" @click="replyClick(item)">
 | 
			
		||||
        <div class="user-img">
 | 
			
		||||
          <img :src="item.headPortrait" alt="" />
 | 
			
		||||
        </div>
 | 
			
		||||
        <div class="item-info">
 | 
			
		||||
          <div class="user-info">
 | 
			
		||||
            <span class="user-name">{{ item.createUserName }}</span>
 | 
			
		||||
            <span class="time">{{ item.createTime }}</span>
 | 
			
		||||
          </div>
 | 
			
		||||
          <p class="text">
 | 
			
		||||
            <span v-if="item.lastReplyName"
 | 
			
		||||
              >回复<span class="color-365D92">{{ item.lastReplyName }}</span></span
 | 
			
		||||
            >{{ item.content }}
 | 
			
		||||
          </p>
 | 
			
		||||
        </div>
 | 
			
		||||
      </div>
 | 
			
		||||
    </div>
 | 
			
		||||
    <div class="reply-bottom">
 | 
			
		||||
      <div class="input" @click="showReply = true">我来说两句…</div>
 | 
			
		||||
      <div class="support" @click="support()">
 | 
			
		||||
        <!-- <AiIcon icon="iconpraiseactive2x" size="18" v-if="info.mySupport == 1" style="vertical-align: middle" />
 | 
			
		||||
        <i class="iconfont" v-else></i>赞 -->
 | 
			
		||||
      </div>
 | 
			
		||||
    </div>
 | 
			
		||||
    <u-popup v-model="showReply" mode="bottom">
 | 
			
		||||
      <div class="reply-content">
 | 
			
		||||
        <u-input v-model.trim="content" type="textarea" :height="144" :auto-height="true" placeholder="写下你的想法…" placeholder-style="color:#999999;font-size:24rpx;" maxlength="1000" />
 | 
			
		||||
        <div class="btn">
 | 
			
		||||
          <span class="clear" @click="content = ''">清空内容</span>
 | 
			
		||||
          <span class="confirm" @click="confirmReply()">发表</span>
 | 
			
		||||
        </div>
 | 
			
		||||
      </div>
 | 
			
		||||
    </u-popup>
 | 
			
		||||
  </div>
 | 
			
		||||
</template>
 | 
			
		||||
 | 
			
		||||
<script>
 | 
			
		||||
import { mapState } from 'vuex'
 | 
			
		||||
 | 
			
		||||
export default {
 | 
			
		||||
  name: 'Detail',
 | 
			
		||||
  computed: {
 | 
			
		||||
    ...mapState(['user']),
 | 
			
		||||
  },
 | 
			
		||||
  data() {
 | 
			
		||||
    return {
 | 
			
		||||
      info: {},
 | 
			
		||||
      pageShow: false,
 | 
			
		||||
      id: '',
 | 
			
		||||
      supportFlag: true,
 | 
			
		||||
      showReply: false,
 | 
			
		||||
      content: '',
 | 
			
		||||
      lastReplyId: '',
 | 
			
		||||
      lastReplyName: '',
 | 
			
		||||
    }
 | 
			
		||||
  },
 | 
			
		||||
 | 
			
		||||
  onLoad(query) {
 | 
			
		||||
    this.id = query.id
 | 
			
		||||
    this.getInfo()
 | 
			
		||||
    uni.$emit('refresh')
 | 
			
		||||
  },
 | 
			
		||||
 | 
			
		||||
  methods: {
 | 
			
		||||
    getInfo() {
 | 
			
		||||
      this.$loading()
 | 
			
		||||
      this.$http.post(`/app/apppostinfo/queryDetailById?id=${this.id}`).then((res) => {
 | 
			
		||||
        if (res.code === 0) {
 | 
			
		||||
          this.info = res.data
 | 
			
		||||
 | 
			
		||||
          if (res.data.images) {
 | 
			
		||||
            this.info.images = JSON.parse(res.data.images)
 | 
			
		||||
          } else {
 | 
			
		||||
            this.info.images = []
 | 
			
		||||
          }
 | 
			
		||||
          if (res.data.replyList.length) {
 | 
			
		||||
            res.data.replyList.map((item) => {
 | 
			
		||||
              item.createTime = item.createTime.substring(0, 19)
 | 
			
		||||
            })
 | 
			
		||||
          }
 | 
			
		||||
          document.title = this.info.userId == this.user.id ? '我的帖子' : 'Ta的帖子'
 | 
			
		||||
          this.$nextTick(() => {
 | 
			
		||||
            this.pageShow = true
 | 
			
		||||
          })
 | 
			
		||||
        }
 | 
			
		||||
      })
 | 
			
		||||
    },
 | 
			
		||||
    support() {
 | 
			
		||||
      if (this.supportFlag) {
 | 
			
		||||
        this.supportFlag = false
 | 
			
		||||
        this.$http
 | 
			
		||||
          .post(`/app/apppostsupport/support`, {
 | 
			
		||||
            postId: this.id,
 | 
			
		||||
            createUserId: this.user.partyId,
 | 
			
		||||
          })
 | 
			
		||||
          .then((res) => {
 | 
			
		||||
            if (res.code == 0) {
 | 
			
		||||
              uni.$emit('refresh')
 | 
			
		||||
              this.supportFlag = true
 | 
			
		||||
              if (this.info.mySupport == 1) {
 | 
			
		||||
                this.info.mySupport = 0
 | 
			
		||||
              } else {
 | 
			
		||||
                this.info.mySupport = 1
 | 
			
		||||
              }
 | 
			
		||||
            }
 | 
			
		||||
          })
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    confirmReply() {
 | 
			
		||||
      if (!this.content) {
 | 
			
		||||
        return this.$toast('请输入回复内容')
 | 
			
		||||
      }
 | 
			
		||||
      var params = {
 | 
			
		||||
        postId: this.id,
 | 
			
		||||
        content: this.content,
 | 
			
		||||
        createUserId: this.user.partyId,
 | 
			
		||||
        createUserName: this.user.realName,
 | 
			
		||||
        headPortrait: this.user.avatarUrl,
 | 
			
		||||
        lastReplyId: this.lastReplyId ? this.lastReplyId : '',
 | 
			
		||||
        lastReplyName: this.lastReplyName ? this.lastReplyName : '',
 | 
			
		||||
      }
 | 
			
		||||
      this.$http.post(`/app/apppostreply/addOrUpdate`, params).then((res) => {
 | 
			
		||||
        if (res.code == 0) {
 | 
			
		||||
          uni.$emit('refresh')
 | 
			
		||||
          this.$toast('提交成功')
 | 
			
		||||
          this.lastReplyId = ''
 | 
			
		||||
          this.lastReplyName = ''
 | 
			
		||||
          this.content = ''
 | 
			
		||||
          this.showReply = false
 | 
			
		||||
          this.getInfo()
 | 
			
		||||
        }
 | 
			
		||||
      })
 | 
			
		||||
    },
 | 
			
		||||
    replyClick(e) {
 | 
			
		||||
      uni.showModal({
 | 
			
		||||
        title: '提示',
 | 
			
		||||
        content: `是否回复${e.createUserName}的评论?`,
 | 
			
		||||
        confirmText: '确定',
 | 
			
		||||
        success: (res) => {
 | 
			
		||||
          if (res.confirm) {
 | 
			
		||||
            uni.$emit('refresh')
 | 
			
		||||
            this.showReply = true
 | 
			
		||||
            this.lastReplyId = e.id
 | 
			
		||||
            this.lastReplyName = e.createUserName
 | 
			
		||||
          }
 | 
			
		||||
        },
 | 
			
		||||
      })
 | 
			
		||||
    },
 | 
			
		||||
    del() {
 | 
			
		||||
      uni.showModal({
 | 
			
		||||
        title: '提示',
 | 
			
		||||
        content: `是否删除该帖子?`,
 | 
			
		||||
        confirmText: '确定',
 | 
			
		||||
        success: (res) => {
 | 
			
		||||
          if (res.confirm) {
 | 
			
		||||
            this.confirmDel()
 | 
			
		||||
          }
 | 
			
		||||
        },
 | 
			
		||||
      })
 | 
			
		||||
    },
 | 
			
		||||
    confirmDel() {
 | 
			
		||||
      this.$http.post(`/app/apppostinfo/delete?id=${this.id}`).then((res) => {
 | 
			
		||||
        if (res.code == 0) {
 | 
			
		||||
          this.$toast('删除成功')
 | 
			
		||||
          setTimeout(() => {
 | 
			
		||||
            uni.$emit('refresh')
 | 
			
		||||
            uni.navigateBack({ delta: 1 })
 | 
			
		||||
          }, 3000)
 | 
			
		||||
        }
 | 
			
		||||
      })
 | 
			
		||||
    },
 | 
			
		||||
    previewImage(images, img) {
 | 
			
		||||
      uni.previewImage({
 | 
			
		||||
        urls: images.map((v) => v.url),
 | 
			
		||||
        current: img,
 | 
			
		||||
      })
 | 
			
		||||
    },
 | 
			
		||||
  },
 | 
			
		||||
}
 | 
			
		||||
</script>
 | 
			
		||||
<style lang="scss" scoped>
 | 
			
		||||
.page {
 | 
			
		||||
  width: 100%;
 | 
			
		||||
  height: 100%;
 | 
			
		||||
  background-color: #f6f7f9;
 | 
			
		||||
}
 | 
			
		||||
.color-365D92 {
 | 
			
		||||
  color: #365d92;
 | 
			
		||||
}
 | 
			
		||||
.header {
 | 
			
		||||
  background-color: #fff;
 | 
			
		||||
  padding: 26px 30px 32px;
 | 
			
		||||
  .user-info {
 | 
			
		||||
    display: flex;
 | 
			
		||||
    margin-bottom: 32px;
 | 
			
		||||
    .user-name-bg {
 | 
			
		||||
      width: 64px;
 | 
			
		||||
      height: 64px;
 | 
			
		||||
      line-height: 64px;
 | 
			
		||||
      text-align: center;
 | 
			
		||||
      background: #4e8eee;
 | 
			
		||||
      font-size: 24px;
 | 
			
		||||
      font-family: PingFangSC-Medium, PingFang SC;
 | 
			
		||||
      font-weight: 500;
 | 
			
		||||
      color: #fff;
 | 
			
		||||
      margin-right: 16px;
 | 
			
		||||
      border-radius: 50%;
 | 
			
		||||
    }
 | 
			
		||||
    .info {
 | 
			
		||||
      div {
 | 
			
		||||
        font-size: 26px;
 | 
			
		||||
        font-family: PingFangSC-Medium, PingFang SC;
 | 
			
		||||
        font-weight: 500;
 | 
			
		||||
        color: #333;
 | 
			
		||||
        line-height: 26px;
 | 
			
		||||
        margin-bottom: 10px;
 | 
			
		||||
      }
 | 
			
		||||
      p {
 | 
			
		||||
        font-size: 22px;
 | 
			
		||||
        font-family: PingFangSC-Regular, PingFang SC;
 | 
			
		||||
        font-weight: 400;
 | 
			
		||||
        color: #999;
 | 
			
		||||
        line-height: 22px;
 | 
			
		||||
      }
 | 
			
		||||
      span {
 | 
			
		||||
        color: #3376fd;
 | 
			
		||||
        margin-left: 16px;
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
  .text-content {
 | 
			
		||||
    font-size: 26px;
 | 
			
		||||
    font-family: PingFangSC-Regular, PingFang SC;
 | 
			
		||||
    font-weight: 400;
 | 
			
		||||
    color: #333;
 | 
			
		||||
    line-height: 42px;
 | 
			
		||||
    word-break: break-all;
 | 
			
		||||
  }
 | 
			
		||||
  .img-list {
 | 
			
		||||
    margin-top: 16px;
 | 
			
		||||
    img {
 | 
			
		||||
      width: 224px;
 | 
			
		||||
      height: 224px;
 | 
			
		||||
      margin-right: 8px;
 | 
			
		||||
    }
 | 
			
		||||
    img:nth-of-type(3n) {
 | 
			
		||||
      margin-right: 0;
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
.reply-list {
 | 
			
		||||
  padding: 0 32px 112px;
 | 
			
		||||
  .item {
 | 
			
		||||
    display: flex;
 | 
			
		||||
    padding: 32px 0;
 | 
			
		||||
    border-bottom: 2px solid #eee;
 | 
			
		||||
    .user-img {
 | 
			
		||||
      width: 96px;
 | 
			
		||||
      height: 96px;
 | 
			
		||||
      margin-right: 24px;
 | 
			
		||||
      img {
 | 
			
		||||
        width: 96px;
 | 
			
		||||
        height: 96px;
 | 
			
		||||
        border-radius: 50%;
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
    .item-info {
 | 
			
		||||
      width: calc(100% - 116px);
 | 
			
		||||
    }
 | 
			
		||||
    .user-info {
 | 
			
		||||
      display: flex;
 | 
			
		||||
      justify-content: space-between;
 | 
			
		||||
      margin-bottom: 10px;
 | 
			
		||||
      .user-name {
 | 
			
		||||
        font-size: 30px;
 | 
			
		||||
        font-family: PingFangSC-Medium, PingFang SC;
 | 
			
		||||
        font-weight: 500;
 | 
			
		||||
        color: #365d92;
 | 
			
		||||
        line-height: 42px;
 | 
			
		||||
      }
 | 
			
		||||
      .time {
 | 
			
		||||
        font-size: 22px;
 | 
			
		||||
        font-family: PingFangSC-Regular, PingFang SC;
 | 
			
		||||
        font-weight: 400;
 | 
			
		||||
        color: #999;
 | 
			
		||||
        line-height: 42px;
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
    .text {
 | 
			
		||||
      font-size: 28px;
 | 
			
		||||
      font-family: PingFangSC-Regular, PingFang SC;
 | 
			
		||||
      color: #333;
 | 
			
		||||
      line-height: 40px;
 | 
			
		||||
      word-break: break-all;
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
.reply-bottom {
 | 
			
		||||
  position: fixed;
 | 
			
		||||
  bottom: 0;
 | 
			
		||||
  left: 0;
 | 
			
		||||
  width: 100%;
 | 
			
		||||
  height: 104px;
 | 
			
		||||
  padding: 22px 30px 24px;
 | 
			
		||||
  box-sizing: border-box;
 | 
			
		||||
  background-color: #fff;
 | 
			
		||||
  font-size: 30px;
 | 
			
		||||
  font-family: PingFangSC-Regular, PingFang SC;
 | 
			
		||||
  color: #333;
 | 
			
		||||
  line-height: 58px;
 | 
			
		||||
  .input {
 | 
			
		||||
    display: inline-block;
 | 
			
		||||
    width: 580px;
 | 
			
		||||
    height: 58px;
 | 
			
		||||
    line-height: 58px;
 | 
			
		||||
    text-align: center;
 | 
			
		||||
    background: #f0f0f0;
 | 
			
		||||
    border-radius: 30px;
 | 
			
		||||
    font-size: 26px;
 | 
			
		||||
    font-family: PingFangSC-Regular, PingFang SC;
 | 
			
		||||
    color: #666;
 | 
			
		||||
    margin-right: 42px;
 | 
			
		||||
  }
 | 
			
		||||
  .support {
 | 
			
		||||
    display: inline-block;
 | 
			
		||||
  }
 | 
			
		||||
  .iconfont {
 | 
			
		||||
    display: inline-block;
 | 
			
		||||
    width: 36px;
 | 
			
		||||
    height: 36px;
 | 
			
		||||
    font-size: 36px;
 | 
			
		||||
    color: #333;
 | 
			
		||||
    margin-right: 8px;
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
.reply-content {
 | 
			
		||||
  width: 100%;
 | 
			
		||||
  padding: 32px;
 | 
			
		||||
  box-sizing: border-box;
 | 
			
		||||
  background: #fff;
 | 
			
		||||
  ::v-deep .u-input {
 | 
			
		||||
    background-color: #f7f7f7 !important;
 | 
			
		||||
    border-radius: 8px !important;
 | 
			
		||||
    padding: 24px !important;
 | 
			
		||||
    font-size: 26px !important;
 | 
			
		||||
  }
 | 
			
		||||
  .btn {
 | 
			
		||||
    display: flex;
 | 
			
		||||
    justify-content: space-between;
 | 
			
		||||
    padding: 24px 0;
 | 
			
		||||
    span {
 | 
			
		||||
      line-height: 64px;
 | 
			
		||||
    }
 | 
			
		||||
    .clear {
 | 
			
		||||
      font-size: 26px;
 | 
			
		||||
      font-family: PingFangSC-Regular, PingFang SC;
 | 
			
		||||
      color: #666;
 | 
			
		||||
    }
 | 
			
		||||
    .confirm {
 | 
			
		||||
      width: 144px;
 | 
			
		||||
      height: 64px;
 | 
			
		||||
      text-align: center;
 | 
			
		||||
      background: #135ab8;
 | 
			
		||||
      border-radius: 32px;
 | 
			
		||||
      font-size: 28px;
 | 
			
		||||
      font-family: PingFangSC-Regular, PingFang SC;
 | 
			
		||||
      color: #fff;
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
</style>
 | 
			
		||||
@@ -1,164 +0,0 @@
 | 
			
		||||
<template>
 | 
			
		||||
  <div class="page">
 | 
			
		||||
    <!-- <div class="title">已签到(2)</div>
 | 
			
		||||
    <div class="user-list">
 | 
			
		||||
      <div class="item">
 | 
			
		||||
        <div class="item-border">
 | 
			
		||||
          <div class="left">
 | 
			
		||||
            <span class="user-name-bg">李毅</span>李毅
 | 
			
		||||
          </div>
 | 
			
		||||
          <div class="right">
 | 
			
		||||
            <span>157****8456</span>
 | 
			
		||||
            <img src="../../static/img/phone-icon.png" alt="">
 | 
			
		||||
            <img src="../../static/img/del-icon.png" alt="">
 | 
			
		||||
          </div>
 | 
			
		||||
        </div>
 | 
			
		||||
      </div>
 | 
			
		||||
    </div>
 | 
			
		||||
    <div class="title">未签到(3)</div> -->
 | 
			
		||||
    <div class="user-list" v-for="(item, index) in list" :key="index">
 | 
			
		||||
      <div class="item">
 | 
			
		||||
        <div class="item-border">
 | 
			
		||||
          <div class="left">
 | 
			
		||||
            <span class="user-name-bg">{{$formatName(item.name)}}</span>{{item.name}}
 | 
			
		||||
          </div>
 | 
			
		||||
          <div class="right">
 | 
			
		||||
            <span>{{formatPhone(item.phone)}}</span>
 | 
			
		||||
            <img src="./components/phone-icon.png" alt="" v-if="isAdmin" @click="callPhone(item.phone)">
 | 
			
		||||
            <img src="./components/del-icon.png" alt="" v-if="isAdmin && status < 2" @click="del(item.id)">
 | 
			
		||||
          </div>
 | 
			
		||||
        </div>
 | 
			
		||||
      </div>
 | 
			
		||||
    </div>
 | 
			
		||||
    <AiEmpty description="暂无活动报名人员" v-if="!list.length" />
 | 
			
		||||
  </div>
 | 
			
		||||
</template>
 | 
			
		||||
 | 
			
		||||
<script>
 | 
			
		||||
export default {
 | 
			
		||||
  data() {
 | 
			
		||||
    return {
 | 
			
		||||
      isAdmin: 0,
 | 
			
		||||
      id: '',
 | 
			
		||||
      list: [],
 | 
			
		||||
      status: 0
 | 
			
		||||
    }
 | 
			
		||||
  },
 | 
			
		||||
  onLoad(option) {
 | 
			
		||||
    this.id = option.id
 | 
			
		||||
    this.isAdmin = option.isAdmin
 | 
			
		||||
    this.status = Number(option.status)
 | 
			
		||||
    console.log(option)
 | 
			
		||||
    this.getUserList()
 | 
			
		||||
  },
 | 
			
		||||
  methods: {
 | 
			
		||||
    getUserList() {
 | 
			
		||||
      this.$http.post(`/app/appactivityuser/list?activityId=${this.id}&status=1`).then(res => {
 | 
			
		||||
        if (res.code == 0) {
 | 
			
		||||
          this.list = res.data.records
 | 
			
		||||
        }
 | 
			
		||||
      })
 | 
			
		||||
    },
 | 
			
		||||
    formatPhone(value) {
 | 
			
		||||
      const start = value.slice(0, 3)
 | 
			
		||||
      const end = value.slice(-4)
 | 
			
		||||
      return `${start}****${end}`
 | 
			
		||||
    },
 | 
			
		||||
    callPhone(phone) {
 | 
			
		||||
      uni.makePhoneCall({phoneNumber: phone})
 | 
			
		||||
    },
 | 
			
		||||
    del(id) {
 | 
			
		||||
      uni.showModal({
 | 
			
		||||
        title: '提示',
 | 
			
		||||
        content: `是否删除该报名人?`,
 | 
			
		||||
        confirmText: "确定",
 | 
			
		||||
        success: (res) => {
 | 
			
		||||
          if (res.confirm) {
 | 
			
		||||
            this.confirmDel(id)
 | 
			
		||||
          }
 | 
			
		||||
        }
 | 
			
		||||
      });
 | 
			
		||||
    },
 | 
			
		||||
    confirmDel(id) {
 | 
			
		||||
      this.$http.post(`/app/appactivityuser/removeReport`, {
 | 
			
		||||
        id: id
 | 
			
		||||
      }).then(res => {
 | 
			
		||||
        if (res.code == 0) {
 | 
			
		||||
          this.$toast('删除成功')
 | 
			
		||||
          this.getUserList()
 | 
			
		||||
        }
 | 
			
		||||
      })
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
</script>
 | 
			
		||||
<style lang="scss" scoped>
 | 
			
		||||
.title{
 | 
			
		||||
  width: 100%;
 | 
			
		||||
  height: 108px;
 | 
			
		||||
  line-height: 108px;
 | 
			
		||||
  background: #FFF;
 | 
			
		||||
  padding-left: 32px;
 | 
			
		||||
  font-size: 32px;
 | 
			
		||||
  font-family: PingFangSC-Semibold, PingFang SC;
 | 
			
		||||
  font-weight: 600;
 | 
			
		||||
  color: #333;
 | 
			
		||||
  margin-top: 20px;
 | 
			
		||||
}
 | 
			
		||||
.item{
 | 
			
		||||
  padding: 0 32px;
 | 
			
		||||
  background-color: #fff;
 | 
			
		||||
  .item-border{
 | 
			
		||||
    border-bottom: 2px solid #ddd;
 | 
			
		||||
    display: flex;
 | 
			
		||||
    justify-content: space-between;
 | 
			
		||||
    padding: 20px 0;
 | 
			
		||||
    .left{
 | 
			
		||||
      line-height: 80px;
 | 
			
		||||
      font-size: 32px;
 | 
			
		||||
      font-family: PingFangSC-Regular, PingFang SC;
 | 
			
		||||
      font-weight: 400;
 | 
			
		||||
      color: #333;
 | 
			
		||||
      .user-name-bg{
 | 
			
		||||
        display: inline-block;
 | 
			
		||||
        width: 80px;
 | 
			
		||||
        height: 80px;
 | 
			
		||||
        border-radius: 50%;
 | 
			
		||||
        line-height: 80px;
 | 
			
		||||
        text-align: center;
 | 
			
		||||
        background: #4E8EEE;
 | 
			
		||||
        font-size: 28px;
 | 
			
		||||
        font-family: PingFangSC-Medium, PingFang SC;
 | 
			
		||||
        font-weight: 500;
 | 
			
		||||
        color: #FFF;
 | 
			
		||||
        margin-right: 16px;
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
    .right{
 | 
			
		||||
      span{
 | 
			
		||||
        font-size: 28px;
 | 
			
		||||
        font-family: PingFangSC-Regular, PingFang SC;
 | 
			
		||||
        color: #999;
 | 
			
		||||
        line-height: 80px;
 | 
			
		||||
      }
 | 
			
		||||
      img{
 | 
			
		||||
        width: 56px;
 | 
			
		||||
        height: 56px;
 | 
			
		||||
        border-radius: 50%;
 | 
			
		||||
        margin-left: 32px;
 | 
			
		||||
        vertical-align: middle;
 | 
			
		||||
      }
 | 
			
		||||
      .iconfont{
 | 
			
		||||
        display: inline-block;
 | 
			
		||||
        font-size: 26px;
 | 
			
		||||
        color: #3671EE;
 | 
			
		||||
      }
 | 
			
		||||
      .bg-blue{
 | 
			
		||||
        // width: 56px;
 | 
			
		||||
        // height: 56px;
 | 
			
		||||
        // background: #EAF0FD;
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
</style>
 | 
			
		||||
| 
		 Before Width: | Height: | Size: 1.6 KiB  | 
| 
		 Before Width: | Height: | Size: 1.8 KiB  | 
| 
		 Before Width: | Height: | Size: 267 B  | 
@@ -1,15 +1,15 @@
 | 
			
		||||
<template>
 | 
			
		||||
  <div class="AppBroadcast">
 | 
			
		||||
    <div class="header">
 | 
			
		||||
      <img src="./img/bigHorn-bg.png" alt="">
 | 
			
		||||
      <img src="img/bigHorn-bg.png" alt="">
 | 
			
		||||
      <div class="content">
 | 
			
		||||
        <div class="item" @click="linkTo('./onlineList')">
 | 
			
		||||
          <img src="./img/bigHorn-icon1@2x.png" alt="">
 | 
			
		||||
          <img src="img/bigHorn-icon1@2x.png" alt="">
 | 
			
		||||
          <div>在线设备</div>
 | 
			
		||||
          <!-- <h2>1</h2> -->
 | 
			
		||||
        </div>
 | 
			
		||||
        <div class="item" @click="linkTo('./playList')">
 | 
			
		||||
          <img src="./img/bigHorn-icon2@2x.png" alt="">
 | 
			
		||||
          <img src="img/bigHorn-icon2@2x.png" alt="">
 | 
			
		||||
          <div>播放记录</div>
 | 
			
		||||
        </div>
 | 
			
		||||
        <!-- <div class="item" @click="linkTo('./onlinePlayList')">
 | 
			
		||||
@@ -71,7 +71,7 @@ export default {
 | 
			
		||||
    }
 | 
			
		||||
  },
 | 
			
		||||
  onShow() {
 | 
			
		||||
    document.title = '云广播' 
 | 
			
		||||
    document.title = '云广播'
 | 
			
		||||
  },
 | 
			
		||||
}
 | 
			
		||||
</script>
 | 
			
		||||
 
 | 
			
		||||
@@ -5,30 +5,30 @@
 | 
			
		||||
        <div class="label">播发内容</div>
 | 
			
		||||
        <div class="value" @click="nameClick">
 | 
			
		||||
          <span :class="formData.mediaName == '请选择' ? 'color-999' : ''">{{ formData.mediaName }}</span>
 | 
			
		||||
          <img src="./img/right-icon.png" alt="">
 | 
			
		||||
          <img src="img/right-icon.png" alt="">
 | 
			
		||||
        </div>
 | 
			
		||||
      </div>
 | 
			
		||||
      <div class="item">
 | 
			
		||||
        <div class="label">播放设备</div>
 | 
			
		||||
        <div class="value" @click="selectClick('showEquipment', equipmentList)">
 | 
			
		||||
          <span :class="formData.serialName == '请选择' ? 'color-999' : ''">{{ formData.serialName }}</span>
 | 
			
		||||
          <img src="./img/right-icon.png" alt="">
 | 
			
		||||
          <img src="img/right-icon.png" alt="">
 | 
			
		||||
        </div>
 | 
			
		||||
      </div>
 | 
			
		||||
      <div class="item">
 | 
			
		||||
        <div class="label">播发级别</div>
 | 
			
		||||
        <div class="value" @click="selectClick('showMessageLevel', messageLevelList)">
 | 
			
		||||
          <span :class="formData.messageLevelName == '请选择' ? 'color-999' : ''">{{ formData.messageLevelName }}</span>
 | 
			
		||||
          <img src="./img/right-icon.png" alt="">
 | 
			
		||||
          <img src="img/right-icon.png" alt="">
 | 
			
		||||
        </div>
 | 
			
		||||
      </div>
 | 
			
		||||
    </div>
 | 
			
		||||
    <div class="radio-content">
 | 
			
		||||
      <div class="title">播放方式</div>
 | 
			
		||||
      <div class="item mar-r50" :class="formData.taskType == 0 ? 'active' : ''" @click="formData.taskType = 0">立即播放<img
 | 
			
		||||
          src="./img/bigHorn-xz.png" alt=""></div>
 | 
			
		||||
          src="img/bigHorn-xz.png" alt=""></div>
 | 
			
		||||
      <div class="item" :class="formData.taskType == 1 ? 'active' : ''" @click="formData.taskType = 1"><img
 | 
			
		||||
          src="./img/bigHorn-xz.png" alt="">定时播放
 | 
			
		||||
          src="img/bigHorn-xz.png" alt="">定时播放
 | 
			
		||||
      </div>
 | 
			
		||||
    </div>
 | 
			
		||||
    <div class="content" v-if="formData.taskType != 0">
 | 
			
		||||
@@ -36,7 +36,7 @@
 | 
			
		||||
        <div class="label">定时策略</div>
 | 
			
		||||
        <div class="value" @click="selectClick('showCyclingType', cyclingTypeList)">
 | 
			
		||||
          <span :class="formData.cyclingTypeName == '请选择' ? 'color-999' : ''">{{ formData.cyclingTypeName }}</span>
 | 
			
		||||
          <img src="./img/right-icon.png" alt="">
 | 
			
		||||
          <img src="img/right-icon.png" alt="">
 | 
			
		||||
        </div>
 | 
			
		||||
      </div>
 | 
			
		||||
    </div>
 | 
			
		||||
@@ -60,21 +60,21 @@
 | 
			
		||||
        <div class="label">开始日期</div>
 | 
			
		||||
        <div class="value" @click="timeClick(true, 'showDate')">
 | 
			
		||||
          <span :class="formData.startDate ? 'color-999' : ''">{{ formData.startDate || '请选择' }}</span>
 | 
			
		||||
          <img src="./img/right-icon.png" alt="">
 | 
			
		||||
          <img src="img/right-icon.png" alt="">
 | 
			
		||||
        </div>
 | 
			
		||||
      </div>
 | 
			
		||||
      <div class="item">
 | 
			
		||||
        <div class="label">开始时间</div>
 | 
			
		||||
        <div class="value" @click="timeClick(false, 'showSatrt')">
 | 
			
		||||
          <span :class="formData.startTime ? 'color-999' : ''">{{ formData.startTime || '请选择' }}</span>
 | 
			
		||||
          <img src="./img/right-icon.png" alt="">
 | 
			
		||||
          <img src="img/right-icon.png" alt="">
 | 
			
		||||
        </div>
 | 
			
		||||
      </div>
 | 
			
		||||
      <div class="item">
 | 
			
		||||
        <div class="label">结束时间</div>
 | 
			
		||||
        <div class="value" @click="timeClick(false, 'showEnd')">
 | 
			
		||||
          <span :class="formData.endTime ? 'color-999' : ''">{{ formData.endTime || '请选择' }}</span>
 | 
			
		||||
          <img src="./img/right-icon.png" alt="">
 | 
			
		||||
          <img src="img/right-icon.png" alt="">
 | 
			
		||||
        </div>
 | 
			
		||||
      </div>
 | 
			
		||||
    </div>
 | 
			
		||||
@@ -176,7 +176,7 @@ export default {
 | 
			
		||||
    })
 | 
			
		||||
  },
 | 
			
		||||
  onShow() {
 | 
			
		||||
    document.title = '音频播放' 
 | 
			
		||||
    document.title = '音频播放'
 | 
			
		||||
  },
 | 
			
		||||
 | 
			
		||||
  methods: {
 | 
			
		||||
 
 | 
			
		||||
@@ -2,7 +2,7 @@
 | 
			
		||||
  <div class="onlineList">
 | 
			
		||||
    <div class="record">
 | 
			
		||||
      <div class="item" v-for="(item, index) in list" :key="index">
 | 
			
		||||
        <img src="./img/bigHorn-lb@2x.png" alt="">
 | 
			
		||||
        <img src="img/bigHorn-lb@2x.png" alt="">
 | 
			
		||||
        <div class="info">
 | 
			
		||||
          <p>{{ item.deviceName }}</p>
 | 
			
		||||
          <span>{{ item.areaName }}</span>
 | 
			
		||||
@@ -47,7 +47,7 @@ export default {
 | 
			
		||||
    this.getList()
 | 
			
		||||
  },
 | 
			
		||||
  onShow() {
 | 
			
		||||
    document.title = '在线设备' 
 | 
			
		||||
    document.title = '在线设备'
 | 
			
		||||
  },
 | 
			
		||||
}
 | 
			
		||||
</script>
 | 
			
		||||
 
 | 
			
		||||
@@ -2,7 +2,7 @@
 | 
			
		||||
  <div class="onlinePlayList">
 | 
			
		||||
    <div class="record">
 | 
			
		||||
      <div class="item" v-for="(item, index) in list" :key="index">
 | 
			
		||||
        <img src="./img/bigHorn-lb@2x.png" alt="">
 | 
			
		||||
        <img src="img/bigHorn-lb@2x.png" alt="">
 | 
			
		||||
        <div class="info">
 | 
			
		||||
          <p>{{ item.deviceName }}</p>
 | 
			
		||||
          <span>{{ item.createTime }}</span><br/>
 | 
			
		||||
@@ -49,7 +49,7 @@ export default {
 | 
			
		||||
    this.getList()
 | 
			
		||||
  },
 | 
			
		||||
  onShow() {
 | 
			
		||||
    document.title = '在播设备' 
 | 
			
		||||
    document.title = '在播设备'
 | 
			
		||||
  },
 | 
			
		||||
}
 | 
			
		||||
</script>
 | 
			
		||||
 
 | 
			
		||||
@@ -2,14 +2,14 @@
 | 
			
		||||
  <div class="selectEquipment">
 | 
			
		||||
    <div class="search">
 | 
			
		||||
      <div class="search-bg">
 | 
			
		||||
        <img src="./img/search-icon.png" alt="">
 | 
			
		||||
        <img src="img/search-icon.png" alt="">
 | 
			
		||||
        <u-input v-model="value" type="text" placeholder="搜索设备名称" class="search-input" height="18"/>
 | 
			
		||||
      </div>
 | 
			
		||||
    </div>
 | 
			
		||||
    <div class="record">
 | 
			
		||||
      <div class="item">
 | 
			
		||||
        <img src="./img/cir.png" alt="" class="check-img">
 | 
			
		||||
        <img src="./img/lb@2x.png" alt="" class="voice-img">
 | 
			
		||||
        <img src="img/cir.png" alt="" class="check-img">
 | 
			
		||||
        <img src="img/lb@2x.png" alt="" class="voice-img">
 | 
			
		||||
        <div class="info">
 | 
			
		||||
          <div class="text">
 | 
			
		||||
            <p>村头大喇叭</p>
 | 
			
		||||
@@ -19,8 +19,8 @@
 | 
			
		||||
        </div>
 | 
			
		||||
      </div>
 | 
			
		||||
      <div class="item">
 | 
			
		||||
        <img src="./img/cir.png" alt="" class="check-img">
 | 
			
		||||
        <img src="./img/lb@2x.png" alt="" class="voice-img">
 | 
			
		||||
        <img src="img/cir.png" alt="" class="check-img">
 | 
			
		||||
        <img src="img/lb@2x.png" alt="" class="voice-img">
 | 
			
		||||
        <div class="info">
 | 
			
		||||
          <div class="text">
 | 
			
		||||
            <p>村头大喇叭</p>
 | 
			
		||||
 
 | 
			
		||||
@@ -2,7 +2,7 @@
 | 
			
		||||
  <div class="selectMp3">
 | 
			
		||||
    <div class="record">
 | 
			
		||||
      <div class="item">
 | 
			
		||||
        <img src="./img/cir.png" alt="">
 | 
			
		||||
        <img src="img/cir.png" alt="">
 | 
			
		||||
        <div class="info">
 | 
			
		||||
          <p>村头大喇叭</p>
 | 
			
		||||
        </div>
 | 
			
		||||
 
 | 
			
		||||
@@ -1,21 +1,21 @@
 | 
			
		||||
<template>
 | 
			
		||||
  <div class="searchMap">
 | 
			
		||||
    <div class="grid-input">
 | 
			
		||||
      <img src="./img/back-icon.png" alt="" class="back-icon" v-if="name && show" @click="show=false">
 | 
			
		||||
      <img src="./img/search-icon.png" alt="" class="search-icon" v-else>
 | 
			
		||||
      <img src="img/back-icon.png" alt="" class="back-icon" v-if="name && show" @click="show=false">
 | 
			
		||||
      <img src="img/search-icon.png" alt="" class="search-icon" v-else>
 | 
			
		||||
      <input type="text" class="input" placeholder="请输入姓名、房屋信息" v-model="name" maxlength="10" confirm-type="search"
 | 
			
		||||
             @confirm="search"/>
 | 
			
		||||
      <div class="clear-btn">
 | 
			
		||||
        <img src="./img/del-icon.png" alt="" class="del-icon" v-if="name" @click="clear">
 | 
			
		||||
        <img src="img/del-icon.png" alt="" class="del-icon" v-if="name" @click="clear">
 | 
			
		||||
      </div>
 | 
			
		||||
      <span class="search-btn" @click="search">搜索</span>
 | 
			
		||||
    </div>
 | 
			
		||||
    <div class="search-list" v-if="show">
 | 
			
		||||
      <div class="title border">
 | 
			
		||||
        <img src="./img/search-icon.png" alt="" class="search-icon">{{ name }}
 | 
			
		||||
        <img src="img/search-icon.png" alt="" class="search-icon">{{ name }}
 | 
			
		||||
      </div>
 | 
			
		||||
      <div class="item border" v-for="(item, index) in buildList" :key="index" @click="getBuildingInfo(item)">
 | 
			
		||||
        <img src="./img/user-icon.png" alt="" class="search-icon user-icon">
 | 
			
		||||
        <img src="img/user-icon.png" alt="" class="search-icon user-icon">
 | 
			
		||||
        <div class="item-content">
 | 
			
		||||
          <h3>{{ item.residentName }}</h3>
 | 
			
		||||
          <p>{{ item.areaName || '' }}{{ item.createAddress }}</p>
 | 
			
		||||
@@ -23,7 +23,7 @@
 | 
			
		||||
      </div>
 | 
			
		||||
    </div>
 | 
			
		||||
    <div class="build-btn" @click="toList()">
 | 
			
		||||
      <img src="./img/build-icon.png" alt=""> 楼栋<br/>列表
 | 
			
		||||
      <img src="img/build-icon.png" alt=""> 楼栋<br/>列表
 | 
			
		||||
    </div>
 | 
			
		||||
    <div class="map-content">
 | 
			
		||||
      <AiTMap v-if="areaId" :areaId="areaId" :map.sync="map" :lib.sync="lib" :ops="ops"
 | 
			
		||||
 
 | 
			
		||||
@@ -1,7 +1,7 @@
 | 
			
		||||
<template>
 | 
			
		||||
  <div class="map">
 | 
			
		||||
    <div class="build-btn">
 | 
			
		||||
      <img src="./components/img/model-icon.png" alt="" @click="toDetail"> 楼栋<br/>模型
 | 
			
		||||
      <img src="components/img/model-icon.png" alt="" @click="toDetail"> 楼栋<br/>模型
 | 
			
		||||
    </div>
 | 
			
		||||
    <div class="map-content">
 | 
			
		||||
      <AiTMap v-if="user.areaId" :areaId="user.areaId" :map.sync="map" :lib.sync="lib" :ops="ops" :libraries="['service', 'tools']"></AiTMap>
 | 
			
		||||
 
 | 
			
		||||
@@ -3,7 +3,7 @@
 | 
			
		||||
    <AiTopFixed>
 | 
			
		||||
      <div class="area-content">
 | 
			
		||||
        <AiAreaPicker :areaId="user.areaId" v-model="areaId" @select="areaSelect">
 | 
			
		||||
          <img src="./img/local-icon.png" alt="">
 | 
			
		||||
          <img src="img/local-icon.png" alt="">
 | 
			
		||||
          <span class="label" v-if="areaName">{{ areaName }}</span>
 | 
			
		||||
          <span v-else>请选择</span>
 | 
			
		||||
          <u-icon name="arrow-down" color="#666" size="24" />
 | 
			
		||||
@@ -18,7 +18,7 @@
 | 
			
		||||
      </div>
 | 
			
		||||
      <AiEmpty v-if="!list.length"/>
 | 
			
		||||
    </div>
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
  </div>
 | 
			
		||||
</template>
 | 
			
		||||
 | 
			
		||||
@@ -53,7 +53,7 @@ export default {
 | 
			
		||||
      this.areaId = e.id
 | 
			
		||||
      this.areaName = e.name
 | 
			
		||||
      this.getList()
 | 
			
		||||
    },  
 | 
			
		||||
    },
 | 
			
		||||
    getList() {
 | 
			
		||||
      this.$http.post(`/app/appvillagepicturealbum/queryAlbumMenu`, null, {
 | 
			
		||||
        params: {
 | 
			
		||||
@@ -131,4 +131,4 @@ export default {
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
</style>
 | 
			
		||||
</style>
 | 
			
		||||
 
 | 
			
		||||
@@ -1,210 +0,0 @@
 | 
			
		||||
<template>
 | 
			
		||||
  <div class="AppHandSnapshot">
 | 
			
		||||
    <u-tabs :list="tabList" :is-scroll="false" :current="currentTabs" height="96" bg-color="#3975C6" inactive-color="#fff" active-color="#fff" @change="change"></u-tabs>
 | 
			
		||||
 | 
			
		||||
    <div class="select-top">
 | 
			
		||||
      <AiSelect @data="(v) => (list = v.map((e) => e.value))" :list="list" placeholder="所属网格"></AiSelect>
 | 
			
		||||
 | 
			
		||||
      <AiSelect @data="(v) => (list = v.map((e) => e.value))" :list="list" placeholder="办件状态"></AiSelect>
 | 
			
		||||
    </div>
 | 
			
		||||
 | 
			
		||||
    <template v-if="datas.length > 0">
 | 
			
		||||
      <AiCard v-for="(item, i) in datas" :key="i" @click.native="goDetail(item, 1)">
 | 
			
		||||
        <template #custom>
 | 
			
		||||
          <div class="card-top">
 | 
			
		||||
            <div class="titles">世纪花园南区一号楼前面因没有排水渠道,多世纪花园南区一号楼前面因没有排水渠道,多世纪花园南区一号楼前面因没有排水渠道,多</div>
 | 
			
		||||
 | 
			
		||||
            <div class="types">
 | 
			
		||||
              <span>事件类型</span>
 | 
			
		||||
              <span class="types-right">矛盾纠纷</span>
 | 
			
		||||
            </div>
 | 
			
		||||
 | 
			
		||||
            <div class="gards">
 | 
			
		||||
              <span>所属网格</span>
 | 
			
		||||
              <span class="gards-right">04号网格</span>
 | 
			
		||||
            </div>
 | 
			
		||||
          </div>
 | 
			
		||||
 | 
			
		||||
          <div class="status status0">
 | 
			
		||||
            <span class="icon"></span>
 | 
			
		||||
            <span>待处理</span>
 | 
			
		||||
          </div>
 | 
			
		||||
        </template>
 | 
			
		||||
      </AiCard>
 | 
			
		||||
    </template>
 | 
			
		||||
 | 
			
		||||
    <AiEmpty v-else></AiEmpty>
 | 
			
		||||
  </div>
 | 
			
		||||
</template>
 | 
			
		||||
 | 
			
		||||
<script>
 | 
			
		||||
export default {
 | 
			
		||||
  name: 'AppHandSnapshot',
 | 
			
		||||
  appName: '随手拍',
 | 
			
		||||
  components: {},
 | 
			
		||||
  props: {},
 | 
			
		||||
  data() {
 | 
			
		||||
    return {
 | 
			
		||||
      datas: [],
 | 
			
		||||
      tabList: [
 | 
			
		||||
        {
 | 
			
		||||
          name: '全部待办',
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
          name: '办件历史',
 | 
			
		||||
        },
 | 
			
		||||
      ],
 | 
			
		||||
      list: [
 | 
			
		||||
        {
 | 
			
		||||
          value: '1',
 | 
			
		||||
          label: '江',
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
          value: '2',
 | 
			
		||||
          label: '湖',
 | 
			
		||||
        },
 | 
			
		||||
      ],
 | 
			
		||||
      currentTabs: 0,
 | 
			
		||||
      current: 0,
 | 
			
		||||
      current: 1,
 | 
			
		||||
      size: 10,
 | 
			
		||||
      pages: 0,
 | 
			
		||||
    }
 | 
			
		||||
  },
 | 
			
		||||
  computed: {
 | 
			
		||||
    loadmore() {
 | 
			
		||||
      return this.pages <= this.current ? 'loading ' : 'nomore'
 | 
			
		||||
    },
 | 
			
		||||
  },
 | 
			
		||||
  watch: {},
 | 
			
		||||
  onLoad() {
 | 
			
		||||
    this.getList()
 | 
			
		||||
  },
 | 
			
		||||
  onShow() {},
 | 
			
		||||
  methods: {
 | 
			
		||||
    getList() {
 | 
			
		||||
      this.$http
 | 
			
		||||
        .post('/app/appvisitvondolence/list', null, {
 | 
			
		||||
          params: {
 | 
			
		||||
            size: this.size,
 | 
			
		||||
            current: this.current,
 | 
			
		||||
            createUserId: this.currentTabs == 1 ? this.user.id : '',
 | 
			
		||||
          },
 | 
			
		||||
        })
 | 
			
		||||
        .then((res) => {
 | 
			
		||||
          if (res.code == 0) {
 | 
			
		||||
            this.datas = this.current > 1 ? [...this.datas, ...res.data.records] : res.data.records
 | 
			
		||||
            this.pages = res.data.pages
 | 
			
		||||
          }
 | 
			
		||||
        })
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    goDetail(item) {
 | 
			
		||||
      uni.navigateTo({ url: `./Detail?id=${item.id}` })
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    change(index) {
 | 
			
		||||
      this.currentTabs = index
 | 
			
		||||
      this.getList()
 | 
			
		||||
    },
 | 
			
		||||
  },
 | 
			
		||||
  onReachBottom() {
 | 
			
		||||
    this.current = this.current + 1
 | 
			
		||||
    this.getList()
 | 
			
		||||
  },
 | 
			
		||||
}
 | 
			
		||||
</script>
 | 
			
		||||
 | 
			
		||||
<style scoped lang="scss">
 | 
			
		||||
uni-page-body {
 | 
			
		||||
  height: 100%;
 | 
			
		||||
}
 | 
			
		||||
.AppHandSnapshot {
 | 
			
		||||
  height: 100%;
 | 
			
		||||
  .select-top {
 | 
			
		||||
    background: #fff;
 | 
			
		||||
    display: flex;
 | 
			
		||||
    justify-content: space-around;
 | 
			
		||||
    .AiSelect {
 | 
			
		||||
      margin: 30px 0;
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
  ::v-deep .AiCard {
 | 
			
		||||
    background: #f3f6f9;
 | 
			
		||||
    padding: 24px 40px 0 32px;
 | 
			
		||||
    .start {
 | 
			
		||||
      background: #fff;
 | 
			
		||||
      border-radius: 16px;
 | 
			
		||||
      .card-top {
 | 
			
		||||
        padding: 32px;
 | 
			
		||||
        .titles {
 | 
			
		||||
          margin-bottom: 34px;
 | 
			
		||||
          font-size: 32px;
 | 
			
		||||
          font-weight: 500;
 | 
			
		||||
          color: #333333;
 | 
			
		||||
          line-height: 1.4;
 | 
			
		||||
          word-break: break-all;
 | 
			
		||||
          overflow: hidden;
 | 
			
		||||
          text-overflow: ellipsis;
 | 
			
		||||
          display: -webkit-box;
 | 
			
		||||
          -webkit-line-clamp: 2;
 | 
			
		||||
          -webkit-box-orient: vertical;
 | 
			
		||||
        }
 | 
			
		||||
        .types,
 | 
			
		||||
        .gards {
 | 
			
		||||
          margin-top: 8px;
 | 
			
		||||
          font-size: 26px;
 | 
			
		||||
          .types-right,
 | 
			
		||||
          .gards-right {
 | 
			
		||||
            margin-left: 32px;
 | 
			
		||||
            color: #333333;
 | 
			
		||||
          }
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      .status {
 | 
			
		||||
        padding: 32px;
 | 
			
		||||
        border-top: 1px solid #dddddd;
 | 
			
		||||
        .icon {
 | 
			
		||||
          display: inline-block;
 | 
			
		||||
          width: 8px;
 | 
			
		||||
          height: 8px;
 | 
			
		||||
          vertical-align: middle;
 | 
			
		||||
          margin-right: 8px;
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      .status0 {
 | 
			
		||||
        color: #ff883c;
 | 
			
		||||
        .icon {
 | 
			
		||||
          background: #ff883c;
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      .status1 {
 | 
			
		||||
        color: #1aaaff;
 | 
			
		||||
        .icon {
 | 
			
		||||
          background: #1aaaff;
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      .status2 {
 | 
			
		||||
        color: #42d784;
 | 
			
		||||
        .icon {
 | 
			
		||||
          background: #42d784;
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      .status3 {
 | 
			
		||||
        color: #ff4466;
 | 
			
		||||
        .icon {
 | 
			
		||||
          background: #ff4466;
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
  // ::v-deep .AiCard:last-child {
 | 
			
		||||
  //   padding-bottom: 24px;
 | 
			
		||||
  // }
 | 
			
		||||
}
 | 
			
		||||
</style>
 | 
			
		||||
@@ -1,527 +0,0 @@
 | 
			
		||||
<template>
 | 
			
		||||
  <div class="Detail">
 | 
			
		||||
    <div class="header-top">
 | 
			
		||||
      <div class="avatars" v-if="data.name">{{ data.name.substring(data.name.length, data.name.length - 2) }}</div>
 | 
			
		||||
 | 
			
		||||
      <div class="right">
 | 
			
		||||
        <div class="names">{{ data.name }}的上报</div>
 | 
			
		||||
 | 
			
		||||
        <div class="times">2021-05-06 13:45</div>
 | 
			
		||||
      </div>
 | 
			
		||||
    </div>
 | 
			
		||||
 | 
			
		||||
    <div class="header-middle">
 | 
			
		||||
      <div class="titles">世纪花园南区一号楼前面因没有排水渠道,多世纪花园南区一号楼前面因没有排水渠道,多世纪花园南区一号楼前面因没有排水渠道,多</div>
 | 
			
		||||
 | 
			
		||||
      <span class="status status0">待处理</span>
 | 
			
		||||
 | 
			
		||||
      <div class="card">
 | 
			
		||||
        <span class="card-left">事件类型</span>
 | 
			
		||||
        <span class="card-right">聚众闹事</span>
 | 
			
		||||
      </div>
 | 
			
		||||
 | 
			
		||||
      <div class="card">
 | 
			
		||||
        <span class="card-left">所属网格</span>
 | 
			
		||||
        <span class="card-right">聚众闹事</span>
 | 
			
		||||
      </div>
 | 
			
		||||
 | 
			
		||||
      <div class="card">
 | 
			
		||||
        <span class="card-left">联系方式</span>
 | 
			
		||||
        <span class="card-right">聚众闹事</span>
 | 
			
		||||
      </div>
 | 
			
		||||
 | 
			
		||||
      <div class="card">
 | 
			
		||||
        <span class="card-left">上报地址</span>
 | 
			
		||||
        <span class="card-right">
 | 
			
		||||
          <span>{{ data.corpId }}</span>
 | 
			
		||||
          <u-icon name="phone-fill" color="#3D94FB"></u-icon>
 | 
			
		||||
        </span>
 | 
			
		||||
      </div>
 | 
			
		||||
 | 
			
		||||
      <div class="card">
 | 
			
		||||
        <span class="card-left">上报地址</span>
 | 
			
		||||
        <span class="card-right">广东省中关村世纪花园北一组广东省中关村世纪花园北一组</span>
 | 
			
		||||
      </div>
 | 
			
		||||
 | 
			
		||||
      <div class="card">
 | 
			
		||||
        <span class="card-left">上报来源</span>
 | 
			
		||||
        <span class="card-right">三角湖居民社群 李毅 小程序填报三角湖居民社群 李毅 小程序填报三角湖居民社群 李毅 小程序填报</span>
 | 
			
		||||
      </div>
 | 
			
		||||
 | 
			
		||||
      <div class="card">
 | 
			
		||||
        <span class="card-left">照片</span>
 | 
			
		||||
      </div>
 | 
			
		||||
 | 
			
		||||
      <img src="./components/yan.jpg" alt="" v-for="(item, i) in 4" :key="i" />
 | 
			
		||||
    </div>
 | 
			
		||||
 | 
			
		||||
    <div class="header-bottom">
 | 
			
		||||
      <div class="line"></div>
 | 
			
		||||
 | 
			
		||||
      <div class="plan">
 | 
			
		||||
        <div class="nav">
 | 
			
		||||
          <span>办理进度</span>
 | 
			
		||||
          <span>(待受理)</span>
 | 
			
		||||
        </div>
 | 
			
		||||
 | 
			
		||||
        <div class="cards">
 | 
			
		||||
          <div class="cardss">
 | 
			
		||||
            <!-- v-for="(item, index) in data.processNodes" :key="index" -->
 | 
			
		||||
            <div class="cardss-left">
 | 
			
		||||
              <span v-if="data.name">
 | 
			
		||||
                李伟民
 | 
			
		||||
                <!-- {{ data.name.split(',')[0].substring(data.name.split(',')[0].length - 2, data.name.split(',')[0].length) }} -->
 | 
			
		||||
              </span>
 | 
			
		||||
 | 
			
		||||
              <img src="./components/1.png" class="avatarIcon" alt="" />
 | 
			
		||||
            </div>
 | 
			
		||||
 | 
			
		||||
            <div class="cardss-right">
 | 
			
		||||
              <div class="cardsss-right-left">
 | 
			
		||||
                <div class="cardssss-right-left-top">
 | 
			
		||||
                  <span>李维民</span>
 | 
			
		||||
                  <span style="margin-left: 26px">
 | 
			
		||||
                    111
 | 
			
		||||
                    <!-- {{ item.status == 0 ? '驳回' : '通过' }} -->
 | 
			
		||||
                  </span>
 | 
			
		||||
                </div>
 | 
			
		||||
 | 
			
		||||
                <!-- <div class="cardssss-right-left-bottom" v-if="item.auditName.split(',').length > 3">
 | 
			
		||||
                  <span v-for="(items, i) in item.auditName.split(',')" :key="i" v-if="i < 3" style="margin-left: 5px">
 | 
			
		||||
                    <span> {{ items }} </span>
 | 
			
		||||
                  </span>
 | 
			
		||||
                  <span>...</span>
 | 
			
		||||
                </div>
 | 
			
		||||
                <div class="cardssss-right-left-bottom" v-else>{{ item.auditName }}</div> -->
 | 
			
		||||
              </div>
 | 
			
		||||
 | 
			
		||||
              <div class="cardees-right-right" v-if="">2021-12-17</div>
 | 
			
		||||
            </div>
 | 
			
		||||
 | 
			
		||||
            <div class="lines"></div>
 | 
			
		||||
          </div>
 | 
			
		||||
 | 
			
		||||
          <div class="cardes-msg-top">1111</div>
 | 
			
		||||
 | 
			
		||||
          <div class="imgs">
 | 
			
		||||
            <img src="./components/yan.jpg" alt="" v-for="(e, i) in 4" :key="i" />
 | 
			
		||||
          </div>
 | 
			
		||||
        </div>
 | 
			
		||||
 | 
			
		||||
        <div class="cards">
 | 
			
		||||
          <div class="cardss">
 | 
			
		||||
            <!-- v-for="(item, index) in data.processNodes" :key="index" -->
 | 
			
		||||
            <div class="cardss-left">
 | 
			
		||||
              <span v-if="data.name">
 | 
			
		||||
                李伟民
 | 
			
		||||
                <!-- {{ data.name.split(',')[0].substring(data.name.split(',')[0].length - 2, data.name.split(',')[0].length) }} -->
 | 
			
		||||
              </span>
 | 
			
		||||
 | 
			
		||||
              <img src="./components/1.png" class="avatarIcon" alt="" />
 | 
			
		||||
            </div>
 | 
			
		||||
 | 
			
		||||
            <div class="cardss-right">
 | 
			
		||||
              <div class="cardsss-right-left">
 | 
			
		||||
                <div class="cardssss-right-left-top">
 | 
			
		||||
                  <span>李维民</span>
 | 
			
		||||
                  <span style="margin-left: 26px">
 | 
			
		||||
                    111
 | 
			
		||||
                    <!-- {{ item.status == 0 ? '驳回' : '通过' }} -->
 | 
			
		||||
                  </span>
 | 
			
		||||
                </div>
 | 
			
		||||
 | 
			
		||||
                <!-- <div class="cardssss-right-left-bottom" v-if="item.auditName.split(',').length > 3">
 | 
			
		||||
                  <span v-for="(items, i) in item.auditName.split(',')" :key="i" v-if="i < 3" style="margin-left: 5px">
 | 
			
		||||
                    <span> {{ items }} </span>
 | 
			
		||||
                  </span>
 | 
			
		||||
                  <span>...</span>
 | 
			
		||||
                </div>
 | 
			
		||||
                <div class="cardssss-right-left-bottom" v-else>{{ item.auditName }}</div> -->
 | 
			
		||||
              </div>
 | 
			
		||||
 | 
			
		||||
              <div class="cardees-right-right" v-if="">2021-12-17</div>
 | 
			
		||||
            </div>
 | 
			
		||||
 | 
			
		||||
            <div class="lines"></div>
 | 
			
		||||
          </div>
 | 
			
		||||
 | 
			
		||||
          <div class="cardes-msg-top">1111</div>
 | 
			
		||||
 | 
			
		||||
          <div class="imgs">
 | 
			
		||||
            <img src="./components/yan.jpg" alt="" v-for="(e, i) in 4" :key="i" />
 | 
			
		||||
          </div>
 | 
			
		||||
        </div>
 | 
			
		||||
 | 
			
		||||
        <div class="cards">
 | 
			
		||||
          <div class="cardss">
 | 
			
		||||
            <!-- v-for="(item, index) in data.processNodes" :key="index" -->
 | 
			
		||||
            <div class="cardss-left">
 | 
			
		||||
              <span v-if="data.name">
 | 
			
		||||
                李伟民
 | 
			
		||||
                <!-- {{ data.name.split(',')[0].substring(data.name.split(',')[0].length - 2, data.name.split(',')[0].length) }} -->
 | 
			
		||||
              </span>
 | 
			
		||||
 | 
			
		||||
              <img src="./components/1.png" class="avatarIcon" alt="" />
 | 
			
		||||
            </div>
 | 
			
		||||
 | 
			
		||||
            <div class="cardss-right">
 | 
			
		||||
              <div class="cardsss-right-left">
 | 
			
		||||
                <div class="cardssss-right-left-top">
 | 
			
		||||
                  <span>李维民</span>
 | 
			
		||||
                  <span style="margin-left: 26px">
 | 
			
		||||
                    111
 | 
			
		||||
                    <!-- {{ item.status == 0 ? '驳回' : '通过' }} -->
 | 
			
		||||
                  </span>
 | 
			
		||||
                </div>
 | 
			
		||||
 | 
			
		||||
                <!-- <div class="cardssss-right-left-bottom" v-if="item.auditName.split(',').length > 3">
 | 
			
		||||
                  <span v-for="(items, i) in item.auditName.split(',')" :key="i" v-if="i < 3" style="margin-left: 5px">
 | 
			
		||||
                    <span> {{ items }} </span>
 | 
			
		||||
                  </span>
 | 
			
		||||
                  <span>...</span>
 | 
			
		||||
                </div>
 | 
			
		||||
                <div class="cardssss-right-left-bottom" v-else>{{ item.auditName }}</div> -->
 | 
			
		||||
              </div>
 | 
			
		||||
 | 
			
		||||
              <div class="cardees-right-right" v-if="">2021-12-17</div>
 | 
			
		||||
            </div>
 | 
			
		||||
 | 
			
		||||
            <div class="lines"></div>
 | 
			
		||||
          </div>
 | 
			
		||||
 | 
			
		||||
          <div class="cardes-msg-top">1111</div>
 | 
			
		||||
 | 
			
		||||
          <div class="imgs">
 | 
			
		||||
            <img src="./components/yan.jpg" alt="" v-for="(e, i) in 4" :key="i" />
 | 
			
		||||
          </div>
 | 
			
		||||
        </div>
 | 
			
		||||
      </div>
 | 
			
		||||
    </div>
 | 
			
		||||
 | 
			
		||||
    <div class="fixedBtn">
 | 
			
		||||
      <div class="status00">
 | 
			
		||||
        <div class="columns" @click="toTransfer">
 | 
			
		||||
          <img src="./components/22.png" alt="" />
 | 
			
		||||
          <span class="hint">转交事件</span>
 | 
			
		||||
        </div>
 | 
			
		||||
 | 
			
		||||
        <div class="columns" @click="toReject">
 | 
			
		||||
          <img src="./components/22.png" alt="" />
 | 
			
		||||
          <span class="hint">拒绝受理</span>
 | 
			
		||||
        </div>
 | 
			
		||||
 | 
			
		||||
        <div class="doIt" @click="ToMyDoIt">我来受理</div>
 | 
			
		||||
      </div>
 | 
			
		||||
 | 
			
		||||
      <!-- <div class="endDoIt">我已办结</div> -->
 | 
			
		||||
    </div>
 | 
			
		||||
  </div>
 | 
			
		||||
</template>
 | 
			
		||||
 | 
			
		||||
<script>
 | 
			
		||||
export default {
 | 
			
		||||
  name: 'Detail',
 | 
			
		||||
  components: {},
 | 
			
		||||
  props: {},
 | 
			
		||||
  data() {
 | 
			
		||||
    return {
 | 
			
		||||
      data: {},
 | 
			
		||||
      id: '',
 | 
			
		||||
    }
 | 
			
		||||
  },
 | 
			
		||||
  computed: {},
 | 
			
		||||
  watch: {},
 | 
			
		||||
  onLoad(o) {
 | 
			
		||||
    this.id = o.id
 | 
			
		||||
    this.$dict.load('realityStatus').then(() => {
 | 
			
		||||
      this.getDetail()
 | 
			
		||||
    })
 | 
			
		||||
  },
 | 
			
		||||
  onShow() {},
 | 
			
		||||
  methods: {
 | 
			
		||||
    getDetail() {
 | 
			
		||||
      this.$http.post(`/app/appvisitvondolence/queryDetailById?id=${this.id}`).then((res) => {
 | 
			
		||||
        if (res?.data) {
 | 
			
		||||
          this.data = res.data
 | 
			
		||||
        }
 | 
			
		||||
      })
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    toTransfer() {
 | 
			
		||||
      console.log('转交事件')
 | 
			
		||||
      uni.navigateTo({ url: `./Transfer?id=${this.id}` })
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    toReject() {
 | 
			
		||||
      console.log('拒绝受理')
 | 
			
		||||
      uni.navigateTo({ url: `./Reject?id=${this.id}` })
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    ToMyDoIt() {
 | 
			
		||||
      console.log('我来受理')
 | 
			
		||||
      uni.navigateTo({ url: `./DoThings?id=${this.id}` })
 | 
			
		||||
    },
 | 
			
		||||
  },
 | 
			
		||||
}
 | 
			
		||||
</script>
 | 
			
		||||
 | 
			
		||||
<style scoped lang="scss">
 | 
			
		||||
uni-page-body {
 | 
			
		||||
  height: 100%;
 | 
			
		||||
}
 | 
			
		||||
.Detail {
 | 
			
		||||
  height: 100%;
 | 
			
		||||
  background: #fff;
 | 
			
		||||
 | 
			
		||||
  .header-top {
 | 
			
		||||
    display: flex;
 | 
			
		||||
    margin: 26px 0 14px 0;
 | 
			
		||||
    padding: 0 32px;
 | 
			
		||||
    .avatars {
 | 
			
		||||
      width: 80px;
 | 
			
		||||
      height: 80px;
 | 
			
		||||
      line-height: 80px;
 | 
			
		||||
      background: #4e8eee;
 | 
			
		||||
      border-radius: 50%;
 | 
			
		||||
      color: #fff;
 | 
			
		||||
      text-align: center;
 | 
			
		||||
      font-size: 28px;
 | 
			
		||||
      font-weight: 500;
 | 
			
		||||
      margin-right: 16px;
 | 
			
		||||
    }
 | 
			
		||||
    .right {
 | 
			
		||||
      .names {
 | 
			
		||||
        font-size: 32px;
 | 
			
		||||
        font-weight: 500;
 | 
			
		||||
      }
 | 
			
		||||
      .times {
 | 
			
		||||
        margin-top: 10px;
 | 
			
		||||
        font-size: 28px;
 | 
			
		||||
        color: #999999;
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  .header-middle {
 | 
			
		||||
    padding: 0 32px;
 | 
			
		||||
    .titles {
 | 
			
		||||
      margin: 32px 0;
 | 
			
		||||
      line-height: 1.4;
 | 
			
		||||
      word-break: break-all;
 | 
			
		||||
      font-size: 40px;
 | 
			
		||||
      font-weight: 600;
 | 
			
		||||
    }
 | 
			
		||||
    .status {
 | 
			
		||||
      display: inline-block;
 | 
			
		||||
      margin-bottom: 14px;
 | 
			
		||||
      padding: 4px 8px;
 | 
			
		||||
      font-size: 26px;
 | 
			
		||||
      color: #ffffff;
 | 
			
		||||
      border-radius: 8px;
 | 
			
		||||
    }
 | 
			
		||||
    .status0 {
 | 
			
		||||
      background: #ff883c;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    .status1 {
 | 
			
		||||
      background: #1aaaff;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    .status2 {
 | 
			
		||||
      background: #42d784;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    .status3 {
 | 
			
		||||
      background: #ff4466;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    .card {
 | 
			
		||||
      display: flex;
 | 
			
		||||
      justify-content: space-between;
 | 
			
		||||
      padding: 34px 0;
 | 
			
		||||
      border-bottom: 1px solid #ddd;
 | 
			
		||||
      .card-left {
 | 
			
		||||
        width: 46%;
 | 
			
		||||
        font-size: 32px;
 | 
			
		||||
        color: #999999;
 | 
			
		||||
      }
 | 
			
		||||
      .card-right {
 | 
			
		||||
        font-size: 32px;
 | 
			
		||||
        .u-icon {
 | 
			
		||||
          margin-left: 8px;
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    .card:last-child {
 | 
			
		||||
      border-bottom: none;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    img {
 | 
			
		||||
      width: 225px;
 | 
			
		||||
      height: 226px;
 | 
			
		||||
      margin-right: 8px;
 | 
			
		||||
    }
 | 
			
		||||
    img:nth-child(3n) {
 | 
			
		||||
      margin-right: 0;
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  .header-bottom {
 | 
			
		||||
    padding-bottom: 80px;
 | 
			
		||||
    .line {
 | 
			
		||||
      height: 16px;
 | 
			
		||||
      background: #f3f6f9;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    .plan {
 | 
			
		||||
      padding: 0 32px;
 | 
			
		||||
      .nav {
 | 
			
		||||
        padding: 26px 0;
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      .cards {
 | 
			
		||||
        position: relative;
 | 
			
		||||
        padding-bottom: 80px;
 | 
			
		||||
        .cardss {
 | 
			
		||||
          display: flex;
 | 
			
		||||
          justify-content: space-between;
 | 
			
		||||
 | 
			
		||||
          .cardss-left {
 | 
			
		||||
            position: relative;
 | 
			
		||||
            width: 80px;
 | 
			
		||||
            height: 80px;
 | 
			
		||||
            text-align: center;
 | 
			
		||||
            line-height: 80px;
 | 
			
		||||
            color: #fff;
 | 
			
		||||
            background: #197df0;
 | 
			
		||||
            border: 1px solid #dddddd;
 | 
			
		||||
            border-radius: 50%;
 | 
			
		||||
            font-size: 28px;
 | 
			
		||||
            z-index: 9;
 | 
			
		||||
            // img {
 | 
			
		||||
            //   width: 100%;
 | 
			
		||||
            //   height: 100%;
 | 
			
		||||
            //   border-radius: 50%;
 | 
			
		||||
            // }
 | 
			
		||||
            .avatarIcon {
 | 
			
		||||
              position: absolute;
 | 
			
		||||
              bottom: 0;
 | 
			
		||||
              right: 0;
 | 
			
		||||
              width: 38px;
 | 
			
		||||
              height: 38px;
 | 
			
		||||
            }
 | 
			
		||||
          }
 | 
			
		||||
          .cardss-right {
 | 
			
		||||
            width: calc(100% - 110px);
 | 
			
		||||
            display: flex;
 | 
			
		||||
            justify-content: space-between;
 | 
			
		||||
            .cardsss-right-left {
 | 
			
		||||
              .cardssss-right-left-top {
 | 
			
		||||
                width: 300px;
 | 
			
		||||
                white-space: nowrap;
 | 
			
		||||
                overflow: hidden;
 | 
			
		||||
                text-overflow: ellipsis;
 | 
			
		||||
                font-size: 32px;
 | 
			
		||||
              }
 | 
			
		||||
              .cardssss-right-left-bottom {
 | 
			
		||||
                margin-top: 10px;
 | 
			
		||||
                font-size: 28px;
 | 
			
		||||
                color: #666666;
 | 
			
		||||
              }
 | 
			
		||||
            }
 | 
			
		||||
            .cardees-right-right {
 | 
			
		||||
              font-size: 28px;
 | 
			
		||||
              color: #999999;
 | 
			
		||||
            }
 | 
			
		||||
          }
 | 
			
		||||
          .lines {
 | 
			
		||||
            position: absolute;
 | 
			
		||||
            top: 0;
 | 
			
		||||
            left: 40px;
 | 
			
		||||
            width: 4px;
 | 
			
		||||
            height: 100%;
 | 
			
		||||
            background: #eeeeee;
 | 
			
		||||
          }
 | 
			
		||||
        }
 | 
			
		||||
        .cardes-msg-top {
 | 
			
		||||
          font-size: 28px;
 | 
			
		||||
          color: #343d65;
 | 
			
		||||
          margin-top: 10px;
 | 
			
		||||
          margin-left: 110px;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        .imgs {
 | 
			
		||||
          margin-top: 10px;
 | 
			
		||||
          margin-left: 110px;
 | 
			
		||||
          img {
 | 
			
		||||
            width: 136px;
 | 
			
		||||
            height: 136px;
 | 
			
		||||
            border-radius: 4px;
 | 
			
		||||
            margin-right: 12px;
 | 
			
		||||
          }
 | 
			
		||||
          img:nth-child(4n) {
 | 
			
		||||
            margin-right: 0;
 | 
			
		||||
          }
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
      .cards:last-child {
 | 
			
		||||
        .lines {
 | 
			
		||||
          width: 0;
 | 
			
		||||
          height: 0;
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  .fixedBtn {
 | 
			
		||||
    background: #fff;
 | 
			
		||||
    position: fixed;
 | 
			
		||||
    bottom: 0;
 | 
			
		||||
    width: 100%;
 | 
			
		||||
    box-sizing: border-box;
 | 
			
		||||
    z-index: 999;
 | 
			
		||||
    .status00 {
 | 
			
		||||
      display: flex;
 | 
			
		||||
 | 
			
		||||
      .columns {
 | 
			
		||||
        display: flex;
 | 
			
		||||
        flex-direction: column;
 | 
			
		||||
        align-items: center;
 | 
			
		||||
        width: 22%;
 | 
			
		||||
        padding: 16px 0;
 | 
			
		||||
        img {
 | 
			
		||||
          width: 44px;
 | 
			
		||||
          height: 42px;
 | 
			
		||||
        }
 | 
			
		||||
        .hint {
 | 
			
		||||
          margin-top: 4px;
 | 
			
		||||
          font-size: 28px;
 | 
			
		||||
          color: #666666;
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
      .doIt {
 | 
			
		||||
        width: 56%;
 | 
			
		||||
        background: #3975c6;
 | 
			
		||||
        text-align: center;
 | 
			
		||||
        height: 112px;
 | 
			
		||||
        line-height: 112px;
 | 
			
		||||
 | 
			
		||||
        font-size: 36px;
 | 
			
		||||
        font-weight: 500;
 | 
			
		||||
        color: #fff;
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    .endDoIt {
 | 
			
		||||
      background: #3975c6;
 | 
			
		||||
      text-align: center;
 | 
			
		||||
      padding: 34px 0;
 | 
			
		||||
 | 
			
		||||
      font-size: 32px;
 | 
			
		||||
      font-weight: 500;
 | 
			
		||||
      color: #ffffff;
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
</style>
 | 
			
		||||
@@ -1,160 +0,0 @@
 | 
			
		||||
<template>
 | 
			
		||||
  <div class="DoThings">
 | 
			
		||||
    <div class="contents">
 | 
			
		||||
      <u-form :model="forms" ref="uForm" label-width="auto" :border-bottom="false">
 | 
			
		||||
        <u-form-item label="事件分类" prop="status" required :border-bottom="false" right-icon="arrow-right">
 | 
			
		||||
          <u-input v-model="forms.status" placeholder="请选择事件分类" @click="show = true" />
 | 
			
		||||
 | 
			
		||||
          <u-select v-model="show" :list="$dict.getDict('realityStatus')" value-name="dictValue" label-name="dictName" @confirm="selectStatus"></u-select>
 | 
			
		||||
        </u-form-item>
 | 
			
		||||
 | 
			
		||||
        <u-form-item label="拒绝意见" prop="content" :border-bottom="false" label-position="top" class="contents">
 | 
			
		||||
          <u-input v-model="forms.content" placeholder="请写下你的拒绝意见..." type="textarea" auto-height height="100" maxlength="500" />
 | 
			
		||||
        </u-form-item>
 | 
			
		||||
 | 
			
		||||
        <div class="line"></div>
 | 
			
		||||
 | 
			
		||||
        <u-form-item label="图片上传(最多9张)" prop="fileIds" :border-bottom="false" class="avatars" label-position="top">
 | 
			
		||||
          <AiUploader :def.sync="forms.fileIds" multiple placeholder="上传图片" :limit="9"></AiUploader>
 | 
			
		||||
        </u-form-item>
 | 
			
		||||
      </u-form>
 | 
			
		||||
    </div>
 | 
			
		||||
 | 
			
		||||
    <div class="btn" @click="submit">转交事件</div>
 | 
			
		||||
  </div>
 | 
			
		||||
</template>
 | 
			
		||||
 | 
			
		||||
<script>
 | 
			
		||||
export default {
 | 
			
		||||
  name: 'DoThings',
 | 
			
		||||
  components: {},
 | 
			
		||||
  props: {},
 | 
			
		||||
  data() {
 | 
			
		||||
    return {
 | 
			
		||||
      forms: {
 | 
			
		||||
        status: '',
 | 
			
		||||
        content: '',
 | 
			
		||||
        fileIds: [],
 | 
			
		||||
      },
 | 
			
		||||
      flag: false,
 | 
			
		||||
      show: false,
 | 
			
		||||
    }
 | 
			
		||||
  },
 | 
			
		||||
  computed: {},
 | 
			
		||||
  watch: {},
 | 
			
		||||
  onLoad() {
 | 
			
		||||
    this.$dict.load('realityStatus').then(() => {
 | 
			
		||||
      // this.getDetail()
 | 
			
		||||
    })
 | 
			
		||||
  },
 | 
			
		||||
  onShow() {},
 | 
			
		||||
  methods: {
 | 
			
		||||
    submit() {
 | 
			
		||||
      if (this.flag) return
 | 
			
		||||
 | 
			
		||||
      this.$refs.uForm.validate((valid) => {
 | 
			
		||||
        if (valid) {
 | 
			
		||||
          if (!this.forms.content) {
 | 
			
		||||
            return this.$u.toast('请选择转交人')
 | 
			
		||||
          }
 | 
			
		||||
 | 
			
		||||
          const imgs = []
 | 
			
		||||
          if (this.forms.fileIds) {
 | 
			
		||||
            this.forms.fileIds.map((e) => {
 | 
			
		||||
              imgs.push({ url: e.url, id: e.id })
 | 
			
		||||
            })
 | 
			
		||||
          }
 | 
			
		||||
 | 
			
		||||
          this.flag = true
 | 
			
		||||
          this.$http
 | 
			
		||||
            .post(`/app/appvisitvondolence/addOrUpdate`, {
 | 
			
		||||
              title: this.forms.title,
 | 
			
		||||
              content: this.forms.content,
 | 
			
		||||
              // images: JSON.stringify(imgs) || [],
 | 
			
		||||
              images: imgs || [],
 | 
			
		||||
 | 
			
		||||
              people: this.forms.people,
 | 
			
		||||
              phone: this.forms.phone,
 | 
			
		||||
              id: this.id,
 | 
			
		||||
            })
 | 
			
		||||
            .then((res) => {
 | 
			
		||||
              if (res.code == 0) {
 | 
			
		||||
                this.$u.toast('发布成功')
 | 
			
		||||
                this.flag = false
 | 
			
		||||
                uni.navigateTo({ url: `./AppHandSnapshot` })
 | 
			
		||||
              }
 | 
			
		||||
            })
 | 
			
		||||
        } else {
 | 
			
		||||
          this.$u.toast('失败')
 | 
			
		||||
        }
 | 
			
		||||
      })
 | 
			
		||||
    },
 | 
			
		||||
  },
 | 
			
		||||
}
 | 
			
		||||
</script>
 | 
			
		||||
 | 
			
		||||
<style scoped lang="scss">
 | 
			
		||||
.DoThings {
 | 
			
		||||
  height: 100%;
 | 
			
		||||
  .contents {
 | 
			
		||||
    ::v-deep .u-form {
 | 
			
		||||
      .u-form-item {
 | 
			
		||||
        padding: 0 45px !important;
 | 
			
		||||
        .u-form-item__body {
 | 
			
		||||
          .u-form-item--right__content__slot {
 | 
			
		||||
            padding-bottom: 0;
 | 
			
		||||
            .u-input {
 | 
			
		||||
              text-align: right !important;
 | 
			
		||||
            }
 | 
			
		||||
          }
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      .u-form-item:first-child {
 | 
			
		||||
        .u-form-item__body {
 | 
			
		||||
          border-bottom: 1px solid #ddd;
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      .line {
 | 
			
		||||
        height: 24px;
 | 
			
		||||
        background: #f3f6f9;
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      .contents {
 | 
			
		||||
        padding-bottom: 20px !important;
 | 
			
		||||
        .u-form-item__body {
 | 
			
		||||
          .u-form-item--right__content__slot {
 | 
			
		||||
            .u-input {
 | 
			
		||||
              text-align: left !important;
 | 
			
		||||
            }
 | 
			
		||||
          }
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      .avatars {
 | 
			
		||||
        padding-bottom: 20px !important;
 | 
			
		||||
        .u-form-item__body {
 | 
			
		||||
          .default {
 | 
			
		||||
            width: 160px;
 | 
			
		||||
            height: 160px;
 | 
			
		||||
          }
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  .btn {
 | 
			
		||||
    position: fixed;
 | 
			
		||||
    bottom: 0;
 | 
			
		||||
    width: 100%;
 | 
			
		||||
    box-sizing: border-box;
 | 
			
		||||
    background: #3975c6;
 | 
			
		||||
    padding: 34px 0;
 | 
			
		||||
    text-align: center;
 | 
			
		||||
    font-size: 32px;
 | 
			
		||||
    font-weight: 500;
 | 
			
		||||
    color: #ffffff;
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
</style>
 | 
			
		||||
@@ -1,160 +0,0 @@
 | 
			
		||||
<template>
 | 
			
		||||
  <div class="Reject">
 | 
			
		||||
    <div class="contents">
 | 
			
		||||
      <u-form :model="forms" ref="uForm" label-width="auto" :border-bottom="false">
 | 
			
		||||
        <u-form-item label="事件分类" prop="status" required :border-bottom="false" right-icon="arrow-right">
 | 
			
		||||
          <u-input v-model="forms.status" placeholder="请选择事件分类" @click="show = true" />
 | 
			
		||||
 | 
			
		||||
          <u-select v-model="show" :list="$dict.getDict('realityStatus')" value-name="dictValue" label-name="dictName" @confirm="selectStatus"></u-select>
 | 
			
		||||
        </u-form-item>
 | 
			
		||||
 | 
			
		||||
        <u-form-item label="拒绝意见" prop="content" :border-bottom="false" label-position="top" class="contents">
 | 
			
		||||
          <u-input v-model="forms.content" placeholder="请写下你的拒绝意见..." type="textarea" auto-height height="100" maxlength="500" />
 | 
			
		||||
        </u-form-item>
 | 
			
		||||
 | 
			
		||||
        <div class="line"></div>
 | 
			
		||||
 | 
			
		||||
        <u-form-item label="图片上传(最多9张)" prop="fileIds" :border-bottom="false" class="avatars" label-position="top">
 | 
			
		||||
          <AiUploader :def.sync="forms.fileIds" multiple placeholder="上传图片" :limit="9"></AiUploader>
 | 
			
		||||
        </u-form-item>
 | 
			
		||||
      </u-form>
 | 
			
		||||
    </div>
 | 
			
		||||
 | 
			
		||||
    <div class="btn" @click="submit">转交事件</div>
 | 
			
		||||
  </div>
 | 
			
		||||
</template>
 | 
			
		||||
 | 
			
		||||
<script>
 | 
			
		||||
export default {
 | 
			
		||||
  name: 'Reject',
 | 
			
		||||
  components: {},
 | 
			
		||||
  props: {},
 | 
			
		||||
  data() {
 | 
			
		||||
    return {
 | 
			
		||||
      forms: {
 | 
			
		||||
        status: '',
 | 
			
		||||
        content: '',
 | 
			
		||||
        fileIds: [],
 | 
			
		||||
      },
 | 
			
		||||
      flag: false,
 | 
			
		||||
      show: false,
 | 
			
		||||
    }
 | 
			
		||||
  },
 | 
			
		||||
  computed: {},
 | 
			
		||||
  watch: {},
 | 
			
		||||
  onLoad() {
 | 
			
		||||
    this.$dict.load('realityStatus').then(() => {
 | 
			
		||||
      // this.getDetail()
 | 
			
		||||
    })
 | 
			
		||||
  },
 | 
			
		||||
  onShow() {},
 | 
			
		||||
  methods: {
 | 
			
		||||
    submit() {
 | 
			
		||||
      if (this.flag) return
 | 
			
		||||
 | 
			
		||||
      this.$refs.uForm.validate((valid) => {
 | 
			
		||||
        if (valid) {
 | 
			
		||||
          if (!this.forms.content) {
 | 
			
		||||
            return this.$u.toast('请选择转交人')
 | 
			
		||||
          }
 | 
			
		||||
 | 
			
		||||
          const imgs = []
 | 
			
		||||
          if (this.forms.fileIds) {
 | 
			
		||||
            this.forms.fileIds.map((e) => {
 | 
			
		||||
              imgs.push({ url: e.url, id: e.id })
 | 
			
		||||
            })
 | 
			
		||||
          }
 | 
			
		||||
 | 
			
		||||
          this.flag = true
 | 
			
		||||
          this.$http
 | 
			
		||||
            .post(`/app/appvisitvondolence/addOrUpdate`, {
 | 
			
		||||
              title: this.forms.title,
 | 
			
		||||
              content: this.forms.content,
 | 
			
		||||
              // images: JSON.stringify(imgs) || [],
 | 
			
		||||
              images: imgs || [],
 | 
			
		||||
 | 
			
		||||
              people: this.forms.people,
 | 
			
		||||
              phone: this.forms.phone,
 | 
			
		||||
              id: this.id,
 | 
			
		||||
            })
 | 
			
		||||
            .then((res) => {
 | 
			
		||||
              if (res.code == 0) {
 | 
			
		||||
                this.$u.toast('发布成功')
 | 
			
		||||
                this.flag = false
 | 
			
		||||
                uni.navigateTo({ url: `./AppHandSnapshot` })
 | 
			
		||||
              }
 | 
			
		||||
            })
 | 
			
		||||
        } else {
 | 
			
		||||
          this.$u.toast('失败')
 | 
			
		||||
        }
 | 
			
		||||
      })
 | 
			
		||||
    },
 | 
			
		||||
  },
 | 
			
		||||
}
 | 
			
		||||
</script>
 | 
			
		||||
 | 
			
		||||
<style scoped lang="scss">
 | 
			
		||||
.Reject {
 | 
			
		||||
  height: 100%;
 | 
			
		||||
  .contents {
 | 
			
		||||
    ::v-deep .u-form {
 | 
			
		||||
      .u-form-item {
 | 
			
		||||
        padding: 0 45px !important;
 | 
			
		||||
        .u-form-item__body {
 | 
			
		||||
          .u-form-item--right__content__slot {
 | 
			
		||||
            padding-bottom: 0;
 | 
			
		||||
            .u-input {
 | 
			
		||||
              text-align: right !important;
 | 
			
		||||
            }
 | 
			
		||||
          }
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      .u-form-item:first-child {
 | 
			
		||||
        .u-form-item__body {
 | 
			
		||||
          border-bottom: 1px solid #ddd;
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      .line {
 | 
			
		||||
        height: 24px;
 | 
			
		||||
        background: #f3f6f9;
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      .contents {
 | 
			
		||||
        padding-bottom: 20px !important;
 | 
			
		||||
        .u-form-item__body {
 | 
			
		||||
          .u-form-item--right__content__slot {
 | 
			
		||||
            .u-input {
 | 
			
		||||
              text-align: left !important;
 | 
			
		||||
            }
 | 
			
		||||
          }
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      .avatars {
 | 
			
		||||
        padding-bottom: 20px !important;
 | 
			
		||||
        .u-form-item__body {
 | 
			
		||||
          .default {
 | 
			
		||||
            width: 160px;
 | 
			
		||||
            height: 160px;
 | 
			
		||||
          }
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  .btn {
 | 
			
		||||
    position: fixed;
 | 
			
		||||
    bottom: 0;
 | 
			
		||||
    width: 100%;
 | 
			
		||||
    box-sizing: border-box;
 | 
			
		||||
    background: #3975c6;
 | 
			
		||||
    padding: 34px 0;
 | 
			
		||||
    text-align: center;
 | 
			
		||||
    font-size: 32px;
 | 
			
		||||
    font-weight: 500;
 | 
			
		||||
    color: #ffffff;
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
</style>
 | 
			
		||||
@@ -1,29 +0,0 @@
 | 
			
		||||
<template>
 | 
			
		||||
  <div class="Selecter"></div>
 | 
			
		||||
</template>
 | 
			
		||||
 | 
			
		||||
<script>
 | 
			
		||||
export default {
 | 
			
		||||
  name: 'Selecter',
 | 
			
		||||
  components: {},
 | 
			
		||||
  props: {
 | 
			
		||||
    dict: Object,
 | 
			
		||||
    instance: Function,
 | 
			
		||||
    params: Object,
 | 
			
		||||
  },
 | 
			
		||||
  data() {
 | 
			
		||||
    return {}
 | 
			
		||||
  },
 | 
			
		||||
  computed: {},
 | 
			
		||||
  watch: {},
 | 
			
		||||
  onLoad() {},
 | 
			
		||||
  onShow() {},
 | 
			
		||||
  methods: {},
 | 
			
		||||
}
 | 
			
		||||
</script>
 | 
			
		||||
 | 
			
		||||
<style scoped lang="scss">
 | 
			
		||||
.Selecter {
 | 
			
		||||
  height: 100%;
 | 
			
		||||
}
 | 
			
		||||
</style>
 | 
			
		||||
@@ -1,153 +0,0 @@
 | 
			
		||||
<template>
 | 
			
		||||
  <div class="Transfer">
 | 
			
		||||
    <div class="contents">
 | 
			
		||||
      <u-form :model="forms" ref="uForm" label-width="auto" :border-bottom="false">
 | 
			
		||||
        <u-form-item label="转交给" prop="status" required :border-bottom="false" right-icon="arrow-right" class="first-form">
 | 
			
		||||
          <u-input v-model="forms.status" placeholder="请选择转交对象" />
 | 
			
		||||
        </u-form-item>
 | 
			
		||||
 | 
			
		||||
        <u-form-item label="办理意见" prop="content" :border-bottom="false" label-position="top" class="contents">
 | 
			
		||||
          <u-input v-model="forms.content" placeholder="请写下你的办理意见..." type="textarea" auto-height height="100" maxlength="500" />
 | 
			
		||||
        </u-form-item>
 | 
			
		||||
 | 
			
		||||
        <div class="line"></div>
 | 
			
		||||
 | 
			
		||||
        <u-form-item label="图片上传(最多9张)" prop="fileIds" :border-bottom="false" class="avatars" label-position="top">
 | 
			
		||||
          <AiUploader :def.sync="forms.fileIds" multiple placeholder="上传图片" :limit="9"></AiUploader>
 | 
			
		||||
        </u-form-item>
 | 
			
		||||
      </u-form>
 | 
			
		||||
    </div>
 | 
			
		||||
 | 
			
		||||
    <div class="btn" @click="submit">转交事件</div>
 | 
			
		||||
  </div>
 | 
			
		||||
</template>
 | 
			
		||||
 | 
			
		||||
<script>
 | 
			
		||||
export default {
 | 
			
		||||
  name: 'Transfer',
 | 
			
		||||
  components: {},
 | 
			
		||||
  props: {},
 | 
			
		||||
  data() {
 | 
			
		||||
    return {
 | 
			
		||||
      forms: {
 | 
			
		||||
        status: '',
 | 
			
		||||
        content: '',
 | 
			
		||||
        fileIds: [],
 | 
			
		||||
      },
 | 
			
		||||
      flag: false,
 | 
			
		||||
    }
 | 
			
		||||
  },
 | 
			
		||||
  computed: {},
 | 
			
		||||
  watch: {},
 | 
			
		||||
  onLoad() {},
 | 
			
		||||
  onShow() {},
 | 
			
		||||
  methods: {
 | 
			
		||||
    submit() {
 | 
			
		||||
      if (this.flag) return
 | 
			
		||||
 | 
			
		||||
      this.$refs.uForm.validate((valid) => {
 | 
			
		||||
        if (valid) {
 | 
			
		||||
          if (!this.forms.content) {
 | 
			
		||||
            return this.$u.toast('请选择转交人')
 | 
			
		||||
          }
 | 
			
		||||
 | 
			
		||||
          const imgs = []
 | 
			
		||||
          if (this.forms.fileIds) {
 | 
			
		||||
            this.forms.fileIds.map((e) => {
 | 
			
		||||
              imgs.push({ url: e.url, id: e.id })
 | 
			
		||||
            })
 | 
			
		||||
          }
 | 
			
		||||
 | 
			
		||||
          this.flag = true
 | 
			
		||||
          this.$http
 | 
			
		||||
            .post(`/app/appvisitvondolence/addOrUpdate`, {
 | 
			
		||||
              title: this.forms.title,
 | 
			
		||||
              content: this.forms.content,
 | 
			
		||||
              // images: JSON.stringify(imgs) || [],
 | 
			
		||||
              images: imgs || [],
 | 
			
		||||
 | 
			
		||||
              people: this.forms.people,
 | 
			
		||||
              phone: this.forms.phone,
 | 
			
		||||
              id: this.id,
 | 
			
		||||
            })
 | 
			
		||||
            .then((res) => {
 | 
			
		||||
              if (res.code == 0) {
 | 
			
		||||
                this.$u.toast('发布成功')
 | 
			
		||||
                this.flag = false
 | 
			
		||||
                uni.navigateTo({ url: `./AppHandSnapshot` })
 | 
			
		||||
              }
 | 
			
		||||
            })
 | 
			
		||||
        } else {
 | 
			
		||||
          this.$u.toast('失败')
 | 
			
		||||
        }
 | 
			
		||||
      })
 | 
			
		||||
    },
 | 
			
		||||
  },
 | 
			
		||||
}
 | 
			
		||||
</script>
 | 
			
		||||
 | 
			
		||||
<style scoped lang="scss">
 | 
			
		||||
.Transfer {
 | 
			
		||||
  height: 100%;
 | 
			
		||||
  .contents {
 | 
			
		||||
    ::v-deep .u-form {
 | 
			
		||||
      .u-form-item {
 | 
			
		||||
        padding: 0 45px !important;
 | 
			
		||||
        .u-form-item__body {
 | 
			
		||||
          .u-form-item--right__content__slot {
 | 
			
		||||
            padding-bottom: 0;
 | 
			
		||||
            .u-input {
 | 
			
		||||
              text-align: right !important;
 | 
			
		||||
            }
 | 
			
		||||
          }
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      .u-form-item:first-child {
 | 
			
		||||
        .u-form-item__body {
 | 
			
		||||
          border-bottom: 1px solid #ddd;
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      .line {
 | 
			
		||||
        height: 24px;
 | 
			
		||||
        background: #f3f6f9;
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      .contents {
 | 
			
		||||
        padding-bottom: 20px !important;
 | 
			
		||||
        .u-form-item__body {
 | 
			
		||||
          .u-form-item--right__content__slot {
 | 
			
		||||
            .u-input {
 | 
			
		||||
              text-align: left !important;
 | 
			
		||||
            }
 | 
			
		||||
          }
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      .avatars {
 | 
			
		||||
        padding-bottom: 20px !important;
 | 
			
		||||
        .u-form-item__body {
 | 
			
		||||
          .default {
 | 
			
		||||
            width: 160px;
 | 
			
		||||
            height: 160px;
 | 
			
		||||
          }
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  .btn {
 | 
			
		||||
    position: fixed;
 | 
			
		||||
    bottom: 0;
 | 
			
		||||
    width: 100%;
 | 
			
		||||
    box-sizing: border-box;
 | 
			
		||||
    background: #3975c6;
 | 
			
		||||
    padding: 34px 0;
 | 
			
		||||
    text-align: center;
 | 
			
		||||
    font-size: 32px;
 | 
			
		||||
    font-weight: 500;
 | 
			
		||||
    color: #ffffff;
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
</style>
 | 
			
		||||
| 
		 Before Width: | Height: | Size: 623 B  | 
| 
		 Before Width: | Height: | Size: 810 B  | 
| 
		 Before Width: | Height: | Size: 88 KiB  | 
@@ -1,225 +0,0 @@
 | 
			
		||||
<template>
 | 
			
		||||
  <div class="AppInterview">
 | 
			
		||||
    <AiTopFixed>
 | 
			
		||||
      <div flex>
 | 
			
		||||
        <AiDate placeholder="日期选择" mode="range" @change="handleDateSearch"/>
 | 
			
		||||
        <u-search placeholder="请输入标题" :show-action="false" v-model="search.title" @search="current=1,getList()"/>
 | 
			
		||||
      </div>
 | 
			
		||||
    </AiTopFixed>
 | 
			
		||||
    <template v-if="list.length>0">
 | 
			
		||||
      <AiCard :ref="'aiCard' + index" v-for="(e,index) in list" :key="index" @click.native="goDetail(e.id,1)">
 | 
			
		||||
        <template #custom>
 | 
			
		||||
          <div flex>
 | 
			
		||||
            <b class="fill">{{ e.title }}</b>
 | 
			
		||||
          </div>
 | 
			
		||||
          <div flex v-if="!!e.fileList" class="wrap" @click.stop>
 | 
			
		||||
            <AiImage v-for="(op,i) in e.fileList.slice(0,3)" :src="op.accessUrl" preview :key="i"/>
 | 
			
		||||
          </div>
 | 
			
		||||
          <div class="bottom">{{ e.createTime }}</div>
 | 
			
		||||
        </template>
 | 
			
		||||
        <template #menu>
 | 
			
		||||
          <div class="menu" @tap.stop="goDetail(e.id,false,index)">编辑</div>
 | 
			
		||||
          <div class="menu" @tap.stop="handleDelete(e.id, index)">删除</div>
 | 
			
		||||
        </template>
 | 
			
		||||
      </AiCard>
 | 
			
		||||
      <u-loadmore :status="loadmore" color="#999" font-size="24"
 | 
			
		||||
                  margin-top="32" margin-bottom="80"/>
 | 
			
		||||
    </template>
 | 
			
		||||
    <div class="no-message" v-else>
 | 
			
		||||
      <image src="https://cdn.cunwuyun.cn/wxAdmin/img/message.png"/>
 | 
			
		||||
      <p>您还未添加过入户调查走访<br>点击<b>新增按钮</b>试试吧~</p>
 | 
			
		||||
    </div>
 | 
			
		||||
    <AiFixedBtn>
 | 
			
		||||
      <div class="addBtn iconfont iconfont-iconfangda" @tap="gotoAdd()"/>
 | 
			
		||||
    </AiFixedBtn>
 | 
			
		||||
  </div>
 | 
			
		||||
</template>
 | 
			
		||||
 | 
			
		||||
<script>
 | 
			
		||||
import qs from "query-string"
 | 
			
		||||
 | 
			
		||||
export default {
 | 
			
		||||
  name: "AppInterview",
 | 
			
		||||
  appName: "调查走访",
 | 
			
		||||
  inject: {
 | 
			
		||||
    root: {}
 | 
			
		||||
  },
 | 
			
		||||
  data() {
 | 
			
		||||
    return {
 | 
			
		||||
      search: {title: ""},
 | 
			
		||||
      list: [],
 | 
			
		||||
      current: 1,
 | 
			
		||||
      pages: 0,
 | 
			
		||||
    }
 | 
			
		||||
  },
 | 
			
		||||
  computed: {
 | 
			
		||||
    loadmore() {
 | 
			
		||||
      return this.pages <= this.current ? 'loading ' : 'nomore'
 | 
			
		||||
    }
 | 
			
		||||
  },
 | 
			
		||||
  methods: {
 | 
			
		||||
    getList() {
 | 
			
		||||
      this.$http.post('/app/appinterview/list-xcx', null, {
 | 
			
		||||
        params: {
 | 
			
		||||
          current: this.current,
 | 
			
		||||
          size: 10,
 | 
			
		||||
          ...this.search
 | 
			
		||||
        }
 | 
			
		||||
      }).then(res => {
 | 
			
		||||
        if (res?.data) {
 | 
			
		||||
          this.list = this.current > 1 ? [...this.list, ...res.data.records] : res.data.records
 | 
			
		||||
          this.pages = res.data.pages
 | 
			
		||||
        }
 | 
			
		||||
      })
 | 
			
		||||
    },
 | 
			
		||||
    goDetail(id, readonly, index) {
 | 
			
		||||
      let query = {id}
 | 
			
		||||
      readonly && (query.detail = 1)
 | 
			
		||||
      index > -1 && this.$refs[`aiCard${index}`][0].handleClose()
 | 
			
		||||
      uni.navigateTo({url: `./interviewDetail?${qs.stringify(query)}`})
 | 
			
		||||
    },
 | 
			
		||||
    gotoAdd() {
 | 
			
		||||
      uni.navigateTo({url: `./interviewDetail`})
 | 
			
		||||
    },
 | 
			
		||||
    handleDelete(ids, index) {
 | 
			
		||||
      this.$refs[`aiCard${index}`][0].handleClose()
 | 
			
		||||
      this.$confirm("是否要删除该调查走访").then(() => {
 | 
			
		||||
        this.$http.post("/app/appinterview/delete", null, {
 | 
			
		||||
          params: {ids}
 | 
			
		||||
        }).then(res => {
 | 
			
		||||
          if (res?.code == 0) {
 | 
			
		||||
            this.$u.toast("删除成功!")
 | 
			
		||||
            this.getList()
 | 
			
		||||
          }
 | 
			
		||||
        })
 | 
			
		||||
      })
 | 
			
		||||
    },
 | 
			
		||||
    handleDateSearch(v) {
 | 
			
		||||
      this.search.startTime = v?.startDate
 | 
			
		||||
      this.search.endTime = v?.endDate || v?.startDate
 | 
			
		||||
      this.current = 1
 | 
			
		||||
      this.getList()
 | 
			
		||||
    }
 | 
			
		||||
  },
 | 
			
		||||
  onShow() {
 | 
			
		||||
    document.title = "调查走访"
 | 
			
		||||
    this.current = 1;
 | 
			
		||||
    this.getList()
 | 
			
		||||
  },
 | 
			
		||||
  onReachBottom() {
 | 
			
		||||
    this.current++;
 | 
			
		||||
    this.getList()
 | 
			
		||||
  },
 | 
			
		||||
}
 | 
			
		||||
</script>
 | 
			
		||||
 | 
			
		||||
<style lang="scss" scoped>
 | 
			
		||||
.AppInterview {
 | 
			
		||||
  width: 100%;
 | 
			
		||||
  height: 100%;
 | 
			
		||||
  box-sizing: border-box;
 | 
			
		||||
  position: absolute;
 | 
			
		||||
  background: #fff;
 | 
			
		||||
 | 
			
		||||
  .no-message {
 | 
			
		||||
    margin-top: 140px;
 | 
			
		||||
    text-align: center;
 | 
			
		||||
    color: #888;
 | 
			
		||||
    font-size: 30px;
 | 
			
		||||
 | 
			
		||||
    b {
 | 
			
		||||
      font-size: 32px;
 | 
			
		||||
      color: $uni-color-primary;
 | 
			
		||||
      padding: 0 8px;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    image {
 | 
			
		||||
      width: 320px;
 | 
			
		||||
      height: 240px;
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  ::v-deep .AiCard {
 | 
			
		||||
    width: 100%;
 | 
			
		||||
    min-height: 160px;
 | 
			
		||||
    background: #FFFFFF;
 | 
			
		||||
    padding: 32px 32px 0;
 | 
			
		||||
    box-sizing: border-box;
 | 
			
		||||
    display: flex;
 | 
			
		||||
    flex-direction: column;
 | 
			
		||||
    position: relative;
 | 
			
		||||
 | 
			
		||||
    b {
 | 
			
		||||
      display: block;
 | 
			
		||||
      width: 100%;
 | 
			
		||||
      font-size: 30px;
 | 
			
		||||
      white-space: nowrap;
 | 
			
		||||
      overflow: hidden;
 | 
			
		||||
      text-overflow: ellipsis;
 | 
			
		||||
      color: #333;
 | 
			
		||||
      margin-right: 60px;
 | 
			
		||||
      margin-bottom: 20px;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    .iconfont-iconMore {
 | 
			
		||||
      color: #666;
 | 
			
		||||
      position: absolute;
 | 
			
		||||
      right: 32px;
 | 
			
		||||
      top: 32px;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    .bottom {
 | 
			
		||||
      font-size: 24px;
 | 
			
		||||
      color: #999999;
 | 
			
		||||
      padding: 24px 0;
 | 
			
		||||
      border-bottom: 1px solid rgba(221, 221, 221, .4);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    .AiImage {
 | 
			
		||||
      width: 30%;
 | 
			
		||||
      margin-bottom: 8px;
 | 
			
		||||
      margin-right: 8px;
 | 
			
		||||
 | 
			
		||||
      image {
 | 
			
		||||
        width: 100%;
 | 
			
		||||
        height: 218px;
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  .addBtn {
 | 
			
		||||
    width: 96px;
 | 
			
		||||
    height: 96px;
 | 
			
		||||
    flex-shrink: 0;
 | 
			
		||||
    background: $uni-color-primary;
 | 
			
		||||
    box-shadow: 0 8px 16px 0 rgba(0, 0, 0, 0.2);
 | 
			
		||||
    font-size: 48px;
 | 
			
		||||
    color: #fff;
 | 
			
		||||
    border-radius: 50%;
 | 
			
		||||
    justify-content: center;
 | 
			
		||||
    align-items: center;
 | 
			
		||||
    display: flex;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  .menu {
 | 
			
		||||
    text-align: center;
 | 
			
		||||
    line-height: 80px;
 | 
			
		||||
    width: 192px;
 | 
			
		||||
    height: 80px;
 | 
			
		||||
    font-size: 28px;
 | 
			
		||||
    font-weight: 400;
 | 
			
		||||
    color: #333333;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  ::v-deep .u-search {
 | 
			
		||||
    margin-bottom: 0 !important;
 | 
			
		||||
    padding-left: 146px;
 | 
			
		||||
    box-shadow: none;
 | 
			
		||||
 | 
			
		||||
    .u-content {
 | 
			
		||||
      padding-left: 50px;
 | 
			
		||||
      box-sizing: border-box;
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
</style>
 | 
			
		||||
@@ -1,177 +0,0 @@
 | 
			
		||||
<template>
 | 
			
		||||
  <div class="interviewDetail">
 | 
			
		||||
    <template v-if="isEdit">
 | 
			
		||||
      <u-form ref="interviewForm" label-position="top" :model="form">
 | 
			
		||||
        <u-form-item label="调查走访事项" prop="title" required>
 | 
			
		||||
          <u-input v-model="form.title" placeholder="请输入,最多30字" maxlength="30"/>
 | 
			
		||||
        </u-form-item>
 | 
			
		||||
        <u-form-item label="调查走访内容" prop="content">
 | 
			
		||||
          <AiTextarea v-model="form.content" placeholder="请输入,最多500字" :maxlength="500"/>
 | 
			
		||||
        </u-form-item>
 | 
			
		||||
        <u-form-item label="图片(最多9张)">
 | 
			
		||||
          <AiUploader multiple :limit="9" :def.sync="form.fileList" action="/admin/file/add2"/>
 | 
			
		||||
        </u-form-item>
 | 
			
		||||
      </u-form>
 | 
			
		||||
      <div bottom>
 | 
			
		||||
        <u-button type="primary" @tap="submitForm">保存</u-button>
 | 
			
		||||
      </div>
 | 
			
		||||
    </template>
 | 
			
		||||
    <template v-else>
 | 
			
		||||
      <div class="headerPane">
 | 
			
		||||
        <b>{{ form.title }}</b>
 | 
			
		||||
        <div>记录时间:{{ form.createTime }}</div>
 | 
			
		||||
      </div>
 | 
			
		||||
      <div class="contentPane">
 | 
			
		||||
        <div v-html="form.content"/>
 | 
			
		||||
        <div flex class="wrap">
 | 
			
		||||
          <AiImage v-for="(op,i) in form.fileList" :src="op.accessUrl" preview :key="i"/>
 | 
			
		||||
        </div>
 | 
			
		||||
      </div>
 | 
			
		||||
    </template>
 | 
			
		||||
 | 
			
		||||
  </div>
 | 
			
		||||
</template>
 | 
			
		||||
 | 
			
		||||
<script>
 | 
			
		||||
 | 
			
		||||
export default {
 | 
			
		||||
  name: 'interviewDetail',
 | 
			
		||||
  inject: {root: {}},
 | 
			
		||||
  computed: {
 | 
			
		||||
    isEdit() {
 | 
			
		||||
      return this.$route.query?.detail != 1
 | 
			
		||||
    }
 | 
			
		||||
  },
 | 
			
		||||
  data() {
 | 
			
		||||
    return {
 | 
			
		||||
      form: {
 | 
			
		||||
        fileList: []
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  },
 | 
			
		||||
  mounted() {
 | 
			
		||||
  },
 | 
			
		||||
  created() {
 | 
			
		||||
    this.searchDetail();
 | 
			
		||||
  },
 | 
			
		||||
  methods: {
 | 
			
		||||
    submitForm() {
 | 
			
		||||
      if (!this.form.title) {
 | 
			
		||||
        return this.$u.toast("请输入调查走访事项")
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      this.$refs.interviewForm?.validate(v => {
 | 
			
		||||
        if (v) {
 | 
			
		||||
          this.$http.post(`/app/appinterview/add-xcx`, {
 | 
			
		||||
            ...this.form
 | 
			
		||||
          }).then(res => {
 | 
			
		||||
            if (res?.code == 0) {
 | 
			
		||||
              this.$u.toast("提交成功!")
 | 
			
		||||
              setTimeout(() => {
 | 
			
		||||
                uni.navigateBack({})
 | 
			
		||||
              }, 1000)
 | 
			
		||||
            }
 | 
			
		||||
          })
 | 
			
		||||
        }
 | 
			
		||||
      })
 | 
			
		||||
    },
 | 
			
		||||
    searchDetail() {
 | 
			
		||||
      let {id} = this.$route.query
 | 
			
		||||
      id && this.$http.post(`/app/appinterview/queryDetailById`, null, {
 | 
			
		||||
        params: {id}
 | 
			
		||||
      }).then(res => {
 | 
			
		||||
        if (res?.data) {
 | 
			
		||||
          this.form = {...res.data};
 | 
			
		||||
        }
 | 
			
		||||
      })
 | 
			
		||||
    },
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
</script>
 | 
			
		||||
 | 
			
		||||
<style lang="scss" scoped>
 | 
			
		||||
.interviewDetail {
 | 
			
		||||
  background: #F3F6F9;
 | 
			
		||||
  height: 100%;
 | 
			
		||||
 | 
			
		||||
  .u-form {
 | 
			
		||||
    width: 100%;
 | 
			
		||||
    height: 100%;
 | 
			
		||||
    overflow-y: auto;
 | 
			
		||||
    background-color: #f3f6f9;
 | 
			
		||||
    position: relative;
 | 
			
		||||
    padding: 0 0 188px;
 | 
			
		||||
    box-sizing: border-box;
 | 
			
		||||
    font-size: 30px;
 | 
			
		||||
 | 
			
		||||
    ::v-deep textarea {
 | 
			
		||||
      width: 100%;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    ::v-deep .u-form-item {
 | 
			
		||||
      margin-bottom: 16px;
 | 
			
		||||
 | 
			
		||||
      .u-form-item--left__content__label {
 | 
			
		||||
        font-weight: 400;
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      div[flex] {
 | 
			
		||||
        width: 100%;
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  div[bottom] {
 | 
			
		||||
    z-index: 99;
 | 
			
		||||
    padding: 0;
 | 
			
		||||
    height: 112px;
 | 
			
		||||
 | 
			
		||||
    .u-btn {
 | 
			
		||||
      height: 100%;
 | 
			
		||||
      border-radius: 0;
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  ::v-deep .headerPane {
 | 
			
		||||
    width: 100%;
 | 
			
		||||
    background: #3975C6;
 | 
			
		||||
    color: #fff;
 | 
			
		||||
    padding: 24px 32px 32px;
 | 
			
		||||
    box-sizing: border-box;
 | 
			
		||||
    font-size: 28px;
 | 
			
		||||
 | 
			
		||||
    b {
 | 
			
		||||
      display: block;
 | 
			
		||||
      font-size: 40px;
 | 
			
		||||
      line-height: 64px;
 | 
			
		||||
      letter-spacing: 2px;
 | 
			
		||||
      margin-bottom: 16px;
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  ::v-deep .contentPane {
 | 
			
		||||
    padding: 32px;
 | 
			
		||||
    width: 100%;
 | 
			
		||||
    box-sizing: border-box;
 | 
			
		||||
    font-size: 32px;
 | 
			
		||||
    font-weight: 400;
 | 
			
		||||
    color: #666;
 | 
			
		||||
    line-height: 56px;
 | 
			
		||||
 | 
			
		||||
    .wrap {
 | 
			
		||||
      margin-top: 32px;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    .AiImage {
 | 
			
		||||
      width: 31%;
 | 
			
		||||
      margin-bottom: 16px;
 | 
			
		||||
      margin-right: 16px;
 | 
			
		||||
 | 
			
		||||
      image {
 | 
			
		||||
        width: 100%;
 | 
			
		||||
        height: 218px;
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
</style>
 | 
			
		||||
@@ -9,13 +9,13 @@
 | 
			
		||||
          </div>
 | 
			
		||||
        </div>
 | 
			
		||||
        <div class="right">
 | 
			
		||||
          <img src="./img/edit-icon.png" alt="" @click="edit(item.id)">
 | 
			
		||||
          <img src="./img/del-icon.png" alt="" @click="del(item)">
 | 
			
		||||
          <img src="img/edit-icon.png" alt="" @click="edit(item.id)">
 | 
			
		||||
          <img src="img/del-icon.png" alt="" @click="del(item)">
 | 
			
		||||
        </div>
 | 
			
		||||
      </div>
 | 
			
		||||
    </div>
 | 
			
		||||
    <div class="empty" v-else>
 | 
			
		||||
      <img src="./img/empty.png" alt="">
 | 
			
		||||
      <img src="img/empty.png" alt="">
 | 
			
		||||
      <p>您还未添加便民通讯录<br/>点击<span>新增按钮</span>试试吧</p>
 | 
			
		||||
    </div>
 | 
			
		||||
    <div class="footer-btn" @click="edit('')">新增</div>
 | 
			
		||||
@@ -164,4 +164,4 @@ export default {
 | 
			
		||||
    z-index: 999;
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
</style>
 | 
			
		||||
</style>
 | 
			
		||||
 
 | 
			
		||||
@@ -10,7 +10,7 @@
 | 
			
		||||
            <span class="titlesContent">查看全部活动和本月新增</span>
 | 
			
		||||
          </div>
 | 
			
		||||
 | 
			
		||||
          <img src="./img/1.png" alt="" />
 | 
			
		||||
          <img src="img/1.png" alt="" />
 | 
			
		||||
        </div>
 | 
			
		||||
 | 
			
		||||
        <div class="card" @click="toList(1)">
 | 
			
		||||
@@ -19,7 +19,7 @@
 | 
			
		||||
            <span class="titlesContent">查看全部参与操办信息和本月新增</span>
 | 
			
		||||
          </div>
 | 
			
		||||
 | 
			
		||||
          <img src="./img/2.png" alt="" />
 | 
			
		||||
          <img src="img/2.png" alt="" />
 | 
			
		||||
        </div>
 | 
			
		||||
 | 
			
		||||
        <div class="card" @click="toList(2)">
 | 
			
		||||
@@ -28,7 +28,7 @@
 | 
			
		||||
            <span class="titlesContent">查看全部婚礼和本月新增</span>
 | 
			
		||||
          </div>
 | 
			
		||||
 | 
			
		||||
          <img src="./img/3.png" alt="" />
 | 
			
		||||
          <img src="img/3.png" alt="" />
 | 
			
		||||
        </div>
 | 
			
		||||
 | 
			
		||||
        <div class="card" @click="toList(3)">
 | 
			
		||||
@@ -37,7 +37,7 @@
 | 
			
		||||
            <span class="titlesContent">查看全部丧礼和本月新增</span>
 | 
			
		||||
          </div>
 | 
			
		||||
 | 
			
		||||
          <img src="./img/4.png" alt="" />
 | 
			
		||||
          <img src="img/4.png" alt="" />
 | 
			
		||||
        </div>
 | 
			
		||||
      </div>
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -1,7 +1,7 @@
 | 
			
		||||
<template>
 | 
			
		||||
  <section class="AppOnlineAnswer">
 | 
			
		||||
    <div class="page" v-if="list.length">
 | 
			
		||||
      <img src="./static/img/answer-bg.png" alt="" class="bg-img">
 | 
			
		||||
      <img src="static/img/answer-bg.png" alt="" class="bg-img">
 | 
			
		||||
      <div class="subject-content" v-if="!showAnwser">
 | 
			
		||||
        <div class="btn" v-if="showTopBtn" @click="confirm()">{{ topBtnText }}</div>
 | 
			
		||||
        <div class="bg-fff pad-b48">
 | 
			
		||||
@@ -18,8 +18,8 @@
 | 
			
		||||
          <div v-if="list[index].type == 1">
 | 
			
		||||
            <div class="item" v-for="(item, i) in list[index].items" :key="i" @click="itemClick(i)"
 | 
			
		||||
                 :class="{ 'item-click': clickIndex === i, 'item-success': showAnalysis && item.checked == 1, 'item-error': showAnalysis && clickIndex == i && item.checked == 0}">
 | 
			
		||||
              <img src="./static/img/success-icon.png" alt="" v-if="showAnalysis && item.checked == 1">
 | 
			
		||||
              <img src="./static/img/error-icon.png" alt=""
 | 
			
		||||
              <img src="static/img/success-icon.png" alt="" v-if="showAnalysis && item.checked == 1">
 | 
			
		||||
              <img src="static/img/error-icon.png" alt=""
 | 
			
		||||
                   v-if="showAnalysis && clickIndex == i && item.checked == 0">
 | 
			
		||||
              {{ item.sort }}  {{ item.content }}
 | 
			
		||||
            </div>
 | 
			
		||||
@@ -28,8 +28,8 @@
 | 
			
		||||
          <div v-if="list[index].type == 2">
 | 
			
		||||
            <div class="item" v-for="(item, i) in list[index].items" :key="i" @click="itemClick(i)"
 | 
			
		||||
                 :class="{ 'item-click': item.isCheked, 'item-success': showAnalysis && item.checked == 1, 'item-error': showAnalysis && item.isCheked && item.checked == 0}">
 | 
			
		||||
              <img src="./static/img/success-icon.png" alt="" v-if="showAnalysis && item.checked == 1">
 | 
			
		||||
              <img src="./static/img/error-icon.png" alt=""
 | 
			
		||||
              <img src="static/img/success-icon.png" alt="" v-if="showAnalysis && item.checked == 1">
 | 
			
		||||
              <img src="static/img/error-icon.png" alt=""
 | 
			
		||||
                   v-if="showAnalysis && clickIndex == i && item.checked == 0">
 | 
			
		||||
              {{ item.sort }}  {{ item.content }}
 | 
			
		||||
            </div>
 | 
			
		||||
@@ -54,7 +54,7 @@
 | 
			
		||||
      </div>
 | 
			
		||||
      <div class="subject-content" v-else>
 | 
			
		||||
        <div class="bg-fff pad-b48">
 | 
			
		||||
          <img src="./static/img/answer-head.png" alt="" class="head-img">
 | 
			
		||||
          <img src="static/img/answer-head.png" alt="" class="head-img">
 | 
			
		||||
          <div class="head-content">
 | 
			
		||||
            <p>本次答对题目数</p>
 | 
			
		||||
            <div>{{ resultInfo.right }}</div>
 | 
			
		||||
@@ -214,7 +214,7 @@ export default {
 | 
			
		||||
};
 | 
			
		||||
</script>
 | 
			
		||||
<style scoped lang="scss">
 | 
			
		||||
@import "../../../common/common.css";
 | 
			
		||||
@import "../../common/common.css";
 | 
			
		||||
 | 
			
		||||
.AppOnlineAnswer {
 | 
			
		||||
  width: 100%;
 | 
			
		||||
| 
		 Before Width: | Height: | Size: 92 KiB After Width: | Height: | Size: 92 KiB  | 
| 
		 Before Width: | Height: | Size: 136 KiB After Width: | Height: | Size: 136 KiB  | 
| 
		 Before Width: | Height: | Size: 1.2 KiB After Width: | Height: | Size: 1.2 KiB  | 
| 
		 Before Width: | Height: | Size: 1.1 KiB After Width: | Height: | Size: 1.1 KiB  | 
@@ -12,12 +12,12 @@ export default {
 | 
			
		||||
    return {
 | 
			
		||||
      label: '基层党建',
 | 
			
		||||
      appList: [
 | 
			
		||||
        {
 | 
			
		||||
          name: '三会一课',
 | 
			
		||||
          icon: require('./img/shyk.png'),
 | 
			
		||||
          url: '../party/AppThreeSessions/AppThreeSessions',
 | 
			
		||||
          isBottom: true
 | 
			
		||||
        },
 | 
			
		||||
        // {
 | 
			
		||||
        //   name: '三会一课',
 | 
			
		||||
        //   icon: require('./img/shyk.png'),
 | 
			
		||||
        //   url: '../party/AppThreeSessions/AppThreeSessions',
 | 
			
		||||
        //   isBottom: true
 | 
			
		||||
        // },
 | 
			
		||||
        {
 | 
			
		||||
          name: '党建要闻',
 | 
			
		||||
          icon: require('./img/djyw.png'),
 | 
			
		||||
@@ -55,4 +55,4 @@ uni-page-body{
 | 
			
		||||
.AppPageParty{
 | 
			
		||||
  height: 100%;
 | 
			
		||||
}
 | 
			
		||||
</style>
 | 
			
		||||
</style>
 | 
			
		||||
 
 | 
			
		||||
@@ -68,7 +68,7 @@ import {mapState} from "vuex";
 | 
			
		||||
 | 
			
		||||
export default {
 | 
			
		||||
  name: "AppPartyHistoryEducation",
 | 
			
		||||
  appName: "党史教育",
 | 
			
		||||
  appName: "党员学习",
 | 
			
		||||
  computed: {
 | 
			
		||||
    ...mapState(["user", "token"]),
 | 
			
		||||
  },
 | 
			
		||||
@@ -141,7 +141,7 @@ export default {
 | 
			
		||||
};
 | 
			
		||||
</script>
 | 
			
		||||
<style scoped lang="scss">
 | 
			
		||||
@import "../../../common/common.css";
 | 
			
		||||
@import "../../common/common.css";
 | 
			
		||||
 | 
			
		||||
.AppPartyHistoryEducation {
 | 
			
		||||
  width: 100%;
 | 
			
		||||
@@ -57,7 +57,7 @@ export default {
 | 
			
		||||
};
 | 
			
		||||
</script>
 | 
			
		||||
<style scoped lang="scss">
 | 
			
		||||
@import "../../../common/common.css";
 | 
			
		||||
@import "../../common/common.css";
 | 
			
		||||
.home {
 | 
			
		||||
  width: 100%;
 | 
			
		||||
  height: 100%;
 | 
			
		||||
@@ -50,7 +50,7 @@ export default {
 | 
			
		||||
};
 | 
			
		||||
</script>
 | 
			
		||||
<style scoped lang="scss">
 | 
			
		||||
@import "../../../common/common.css";
 | 
			
		||||
@import "../../common/common.css";
 | 
			
		||||
.home {
 | 
			
		||||
  width: 100%;
 | 
			
		||||
  height: 100%;
 | 
			
		||||
@@ -184,7 +184,7 @@ export default {
 | 
			
		||||
};
 | 
			
		||||
</script>
 | 
			
		||||
<style lang="scss" scope>
 | 
			
		||||
@import "../../../common/common.css";
 | 
			
		||||
@import "../../common/common.css";
 | 
			
		||||
.page {
 | 
			
		||||
  .search-box {
 | 
			
		||||
    width: 100%;
 | 
			
		||||
@@ -201,7 +201,7 @@ export default {
 | 
			
		||||
};
 | 
			
		||||
</script>
 | 
			
		||||
<style lang="scss" scope>
 | 
			
		||||
@import "../../../common/common.css";
 | 
			
		||||
@import "../../common/common.css";
 | 
			
		||||
 | 
			
		||||
.page {
 | 
			
		||||
  .search-box {
 | 
			
		||||
@@ -34,7 +34,7 @@ export default {
 | 
			
		||||
};
 | 
			
		||||
</script>
 | 
			
		||||
<style scoped lang="scss">
 | 
			
		||||
@import "../../../common/common.css";
 | 
			
		||||
@import "../../common/common.css";
 | 
			
		||||
.home {
 | 
			
		||||
  width: 100%;
 | 
			
		||||
  height: 100%;
 | 
			
		||||
@@ -53,7 +53,7 @@ export default {
 | 
			
		||||
};
 | 
			
		||||
</script>
 | 
			
		||||
<style scoped lang="scss">
 | 
			
		||||
@import "../../../common/common.css";
 | 
			
		||||
@import "../../common/common.css";
 | 
			
		||||
.home {
 | 
			
		||||
  width: 100%;
 | 
			
		||||
  height: 100%;
 | 
			
		||||
@@ -90,7 +90,7 @@ export default {
 | 
			
		||||
};
 | 
			
		||||
</script>
 | 
			
		||||
<style scoped lang="scss">
 | 
			
		||||
@import "../../../common/common.css";
 | 
			
		||||
@import "../../common/common.css";
 | 
			
		||||
.home {
 | 
			
		||||
  width: 100%;
 | 
			
		||||
  height: 100%;
 | 
			
		||||
@@ -80,7 +80,7 @@ export default {
 | 
			
		||||
};
 | 
			
		||||
</script>
 | 
			
		||||
<style scoped lang="scss">
 | 
			
		||||
@import "../../../common/common.css";
 | 
			
		||||
@import "../../common/common.css";
 | 
			
		||||
.home {
 | 
			
		||||
  width: 100%;
 | 
			
		||||
  height: 100%;
 | 
			
		||||
@@ -1,168 +0,0 @@
 | 
			
		||||
<template>
 | 
			
		||||
  <div class="info">
 | 
			
		||||
    <div class="info-top">
 | 
			
		||||
      <div class="info-top__item" @click="linkTo('./Monitor')">
 | 
			
		||||
        <image src="/static/images/wdbf.png"/>
 | 
			
		||||
        <h2>监测对象</h2>
 | 
			
		||||
      </div>
 | 
			
		||||
      <div class="info-top__item" @click="linkTo('./povertyMonitor')">
 | 
			
		||||
        <image src="/static/images/yjjk.png"/>
 | 
			
		||||
        <h2>预警监控</h2>
 | 
			
		||||
      </div>
 | 
			
		||||
      <div class="info-top__item" @click="linkTo('./News')">
 | 
			
		||||
        <image src="/static/images/news.png"/>
 | 
			
		||||
        <h2>政策动态</h2>
 | 
			
		||||
      </div>
 | 
			
		||||
    </div>
 | 
			
		||||
    <div class="news">
 | 
			
		||||
      <h2>最新动态</h2>
 | 
			
		||||
      <div class="news-list">
 | 
			
		||||
        <div class="news-item" v-for="(item, index) in list" :key="index"
 | 
			
		||||
             @click="linkTo(`./NewsDetail?id=${item.id}`)">
 | 
			
		||||
          <div class="left">
 | 
			
		||||
            <h2>{{ item.title }}</h2>
 | 
			
		||||
            <div class="item-bottom">
 | 
			
		||||
              <span>{{ $dict.getLabel('newsCenterPolicyType', item.policyType) }}</span>
 | 
			
		||||
              <span>{{ item.createTime }}</span>
 | 
			
		||||
            </div>
 | 
			
		||||
          </div>
 | 
			
		||||
          <image v-if="item.coverFile" :src="item.coverFile ? item.coverFile.url : ''"/>
 | 
			
		||||
        </div>
 | 
			
		||||
      </div>
 | 
			
		||||
    </div>
 | 
			
		||||
  </div>
 | 
			
		||||
</template>
 | 
			
		||||
 | 
			
		||||
<script>
 | 
			
		||||
export default {
 | 
			
		||||
  name: "AppPovertyAlleviation",
 | 
			
		||||
  appName: "防返贫",
 | 
			
		||||
  data() {
 | 
			
		||||
    return {
 | 
			
		||||
      list: []
 | 
			
		||||
    }
 | 
			
		||||
  },
 | 
			
		||||
  onLoad() {
 | 
			
		||||
    this.$dict.load(['newsCenterPolicyType']).then(() => {
 | 
			
		||||
      this.getList()
 | 
			
		||||
    })
 | 
			
		||||
  },
 | 
			
		||||
 | 
			
		||||
  methods: {
 | 
			
		||||
    linkTo(url) {
 | 
			
		||||
      uni.navigateTo({url})
 | 
			
		||||
    },
 | 
			
		||||
    getList() {
 | 
			
		||||
      this.$http.post(`/app/appnewscenterinfo/listForWx`, null, {
 | 
			
		||||
        params: {
 | 
			
		||||
          current: 1,
 | 
			
		||||
          size: 10,
 | 
			
		||||
          status: 1
 | 
			
		||||
        }
 | 
			
		||||
      }).then(res => {
 | 
			
		||||
        if (res.code == 0) {
 | 
			
		||||
          this.list = res.data.records
 | 
			
		||||
        }
 | 
			
		||||
      })
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
</script>
 | 
			
		||||
 | 
			
		||||
<style lang="scss">
 | 
			
		||||
.info {
 | 
			
		||||
  padding: 32px 30px;
 | 
			
		||||
 | 
			
		||||
  .info-top {
 | 
			
		||||
    display: flex;
 | 
			
		||||
    align-items: center;
 | 
			
		||||
    margin-bottom: 32px;
 | 
			
		||||
    background: #FFFFFF;
 | 
			
		||||
    border-radius: 16px;
 | 
			
		||||
 | 
			
		||||
    div {
 | 
			
		||||
      flex: 1;
 | 
			
		||||
      padding: 32px 0;
 | 
			
		||||
      text-align: center;
 | 
			
		||||
 | 
			
		||||
      image {
 | 
			
		||||
        width: 80px;
 | 
			
		||||
        height: 80px;
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      h2 {
 | 
			
		||||
        margin-top: 4px;
 | 
			
		||||
        color: #3D434A;
 | 
			
		||||
        font-size: 28px;
 | 
			
		||||
        font-weight: normal;
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  .news {
 | 
			
		||||
    & > h2 {
 | 
			
		||||
      margin-bottom: 32px;
 | 
			
		||||
      color: #333333;
 | 
			
		||||
      font-weight: 600;
 | 
			
		||||
      font-size: 32px;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    .news-item {
 | 
			
		||||
      display: flex;
 | 
			
		||||
      align-items: center;
 | 
			
		||||
      margin-bottom: 20px;
 | 
			
		||||
      padding: 32px 24px;
 | 
			
		||||
      background: #fff;
 | 
			
		||||
      border-radius: 14px;
 | 
			
		||||
 | 
			
		||||
      &:active {
 | 
			
		||||
        background: #eee;
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      &:last-child {
 | 
			
		||||
        border-bottom: none;
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      .left {
 | 
			
		||||
        flex: 1;
 | 
			
		||||
        margin-right: 20px;
 | 
			
		||||
        display: -webkit-box;
 | 
			
		||||
        -webkit-box-orient: vertical;
 | 
			
		||||
        -webkit-line-clamp: 2;
 | 
			
		||||
        overflow: hidden;
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      & > image {
 | 
			
		||||
        width: 200px;
 | 
			
		||||
        height: 140px;
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      h2 {
 | 
			
		||||
        width: 100%;
 | 
			
		||||
        margin-bottom: 32px;
 | 
			
		||||
        color: #333333;
 | 
			
		||||
        font-size: 30px;
 | 
			
		||||
        font-weight: 600;
 | 
			
		||||
        display: -webkit-box;
 | 
			
		||||
        -webkit-box-orient: vertical;
 | 
			
		||||
        -webkit-line-clamp: 2;
 | 
			
		||||
        overflow: hidden;
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      .item-bottom {
 | 
			
		||||
        display: flex;
 | 
			
		||||
        align-items: center;
 | 
			
		||||
 | 
			
		||||
        span {
 | 
			
		||||
          color: #999999;
 | 
			
		||||
          font-size: 24px;
 | 
			
		||||
 | 
			
		||||
          &:first-child {
 | 
			
		||||
            margin-right: 32px;
 | 
			
		||||
          }
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
</style>
 | 
			
		||||
@@ -1,87 +0,0 @@
 | 
			
		||||
<template>
 | 
			
		||||
  <div class="povertyMonitor">
 | 
			
		||||
    <div class="form-content">
 | 
			
		||||
      <List ref="list" v-if="currIndex === 0"></List>
 | 
			
		||||
      <Statistics ref="statistics" v-if="currIndex === 1"></Statistics>
 | 
			
		||||
    </div>
 | 
			
		||||
    <div class="footer">
 | 
			
		||||
      <div @click="currIndex = 0" :class="[currIndex === 0 ? 'active' : '']">监测对象列表</div>
 | 
			
		||||
      <div @click="currIndex = 1" :class="[currIndex === 1 ? 'active' : '']">数据统计</div>
 | 
			
		||||
    </div>
 | 
			
		||||
  </div>
 | 
			
		||||
</template>
 | 
			
		||||
 | 
			
		||||
<script>
 | 
			
		||||
import Statistics from './Monitor/Statistics.vue'
 | 
			
		||||
import List from './Monitor/List.vue'
 | 
			
		||||
 | 
			
		||||
export default {
 | 
			
		||||
  data() {
 | 
			
		||||
    return {
 | 
			
		||||
      currIndex: 0
 | 
			
		||||
    }
 | 
			
		||||
  },
 | 
			
		||||
 | 
			
		||||
  components: {
 | 
			
		||||
    List,
 | 
			
		||||
    Statistics
 | 
			
		||||
  },
 | 
			
		||||
 | 
			
		||||
  computed: {
 | 
			
		||||
    tabBar() {
 | 
			
		||||
      const link = icon => `${this.$cdn}askform/${icon}.png`
 | 
			
		||||
      return [
 | 
			
		||||
        {text: "监测对象列表", iconPath: "bdlb1", selectedIconPath: "bdlb2"},
 | 
			
		||||
        {text: "数据统计", iconPath: "xjxm1", selectedIconPath: "xjxm2"}
 | 
			
		||||
      ].map(e => ({
 | 
			
		||||
        ...e,
 | 
			
		||||
        iconPath: link(e.iconPath),
 | 
			
		||||
        selectedIconPath: link(e.selectedIconPath)
 | 
			
		||||
      }))
 | 
			
		||||
    }
 | 
			
		||||
  },
 | 
			
		||||
 | 
			
		||||
  onLoad() {
 | 
			
		||||
    uni.$on('reload', () => {
 | 
			
		||||
      if (this.currIndex === 0) {
 | 
			
		||||
        this.$refs.list.reload()
 | 
			
		||||
      }
 | 
			
		||||
    })
 | 
			
		||||
  },
 | 
			
		||||
 | 
			
		||||
  onReachBottom() {
 | 
			
		||||
    if (this.currIndex === 0) {
 | 
			
		||||
      this.$refs.list.getList()
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
</script>
 | 
			
		||||
 | 
			
		||||
<style lang="scss" scoped>
 | 
			
		||||
.povertyMonitor {
 | 
			
		||||
  .footer {
 | 
			
		||||
    display: flex;
 | 
			
		||||
    position: fixed;
 | 
			
		||||
    bottom: 0;
 | 
			
		||||
    left: 0;
 | 
			
		||||
    z-index: 11;
 | 
			
		||||
    width: 100%;
 | 
			
		||||
    height: 98px;
 | 
			
		||||
 | 
			
		||||
    div {
 | 
			
		||||
      flex: 1;
 | 
			
		||||
      height: 98px;
 | 
			
		||||
      line-height: 98px;
 | 
			
		||||
      text-align: center;
 | 
			
		||||
      color: #333333;
 | 
			
		||||
      font-size: 32px;
 | 
			
		||||
      background: #fff;
 | 
			
		||||
 | 
			
		||||
      &.active {
 | 
			
		||||
        color: #fff;
 | 
			
		||||
        background: #3192F4;
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
</style>
 | 
			
		||||
@@ -1,285 +0,0 @@
 | 
			
		||||
<template>
 | 
			
		||||
  <div class="list">
 | 
			
		||||
    <div class="area">
 | 
			
		||||
      <i>可选范围</i>
 | 
			
		||||
      <span class="separat">/</span>
 | 
			
		||||
      <!-- <AiArea class="aiArea" v-model="addressAreaId" mode="custom" fullname :areaRange="$areaId" :name.sync="addressArea" @change="reload">
 | 
			
		||||
        <div class="label" v-if="addressArea">{{ addressArea }}</div>
 | 
			
		||||
        <i v-else>请选择</i>
 | 
			
		||||
      </AiArea> -->
 | 
			
		||||
      <AiAreaPicker ref="area" class="aiArea" :name.sync="addressArea" :areaId="areaId" mode="custom"
 | 
			
		||||
                    @select="onChange">
 | 
			
		||||
        <span class="label" v-if="addressArea">{{ addressArea }}</span>
 | 
			
		||||
        <i v-else>请选择</i>
 | 
			
		||||
      </AiAreaPicker>
 | 
			
		||||
    </div>
 | 
			
		||||
    <div class="list-wrapper">
 | 
			
		||||
      <div class="tab">
 | 
			
		||||
        <span @click="changeTab(0)" :class="[currIndex === 0 ? 'active' : '']">已登记监测对象</span>
 | 
			
		||||
        <span @click="changeTab(1)" :class="[currIndex === 1 ? 'active' : '']">已消除风险对象</span>
 | 
			
		||||
      </div>
 | 
			
		||||
      <div class="search">
 | 
			
		||||
        <u-search
 | 
			
		||||
            placeholder="请输入"
 | 
			
		||||
            :show-action="false"
 | 
			
		||||
            search-icon-color="#ccc"
 | 
			
		||||
            v-model="name"
 | 
			
		||||
            @search="reload">
 | 
			
		||||
        </u-search>
 | 
			
		||||
      </div>
 | 
			
		||||
      <div class="list-item__wrapper">
 | 
			
		||||
        <div class="list-item" v-for="(item, index) in list" :key="index" @click="toDetail(item.id)">
 | 
			
		||||
          <image src="/static/images/avatar.png"/>
 | 
			
		||||
          <div class="right">
 | 
			
		||||
            <h2>{{ item.name || item.phone }}</h2>
 | 
			
		||||
            <p>{{ item.addressArea }}</p>
 | 
			
		||||
          </div>
 | 
			
		||||
        </div>
 | 
			
		||||
      </div>
 | 
			
		||||
      <AiEmpty v-if="!list.length && isMore" style="padding-bottom: 20px;"></AiEmpty>
 | 
			
		||||
    </div>
 | 
			
		||||
    <AiFixedBtn>
 | 
			
		||||
      <div class="addBtn iconfont iconfont-iconfangda" @tap="toAdd"></div>
 | 
			
		||||
    </AiFixedBtn>
 | 
			
		||||
  </div>
 | 
			
		||||
</template>
 | 
			
		||||
 | 
			
		||||
<script>
 | 
			
		||||
 | 
			
		||||
export default {
 | 
			
		||||
  name: 'list',
 | 
			
		||||
 | 
			
		||||
  data() {
 | 
			
		||||
    return {
 | 
			
		||||
      currIndex: 0,
 | 
			
		||||
      name: '',
 | 
			
		||||
      list: [],
 | 
			
		||||
      areaId: '',
 | 
			
		||||
      addressAreaId: '',
 | 
			
		||||
      addressArea: '',
 | 
			
		||||
      isMore: false,
 | 
			
		||||
      current: 1
 | 
			
		||||
    }
 | 
			
		||||
  },
 | 
			
		||||
 | 
			
		||||
  created() {
 | 
			
		||||
    uni.showLoading()
 | 
			
		||||
    this.areaId = this.$store.state.user.areaId
 | 
			
		||||
    this.addressAreaId = this.$store.state.user.areaId
 | 
			
		||||
    this.addressArea = this.$store.state.user.areaName
 | 
			
		||||
 | 
			
		||||
    this.$nextTick(() => {
 | 
			
		||||
      this.getList()
 | 
			
		||||
    })
 | 
			
		||||
    uni.$on('reload', () => {
 | 
			
		||||
      if (this.currIndex === 0) {
 | 
			
		||||
      } else {
 | 
			
		||||
      }
 | 
			
		||||
    })
 | 
			
		||||
  },
 | 
			
		||||
 | 
			
		||||
  methods: {
 | 
			
		||||
    toDetail(id) {
 | 
			
		||||
      uni.navigateTo({
 | 
			
		||||
        url: './MonitorDetail?id=' + id
 | 
			
		||||
      })
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    onChange(e) {
 | 
			
		||||
      this.addressAreaId = e.id
 | 
			
		||||
 | 
			
		||||
      this.$nextTick(() => {
 | 
			
		||||
        this.reload()
 | 
			
		||||
      })
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    toAdd() {
 | 
			
		||||
      uni.navigateTo({
 | 
			
		||||
        url: './MonitorAdd'
 | 
			
		||||
      })
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    reload() {
 | 
			
		||||
      this.isMore = false
 | 
			
		||||
      this.current = 1
 | 
			
		||||
      uni.showLoading()
 | 
			
		||||
 | 
			
		||||
      this.$nextTick(() => {
 | 
			
		||||
        this.getList()
 | 
			
		||||
      })
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    changeTab(index) {
 | 
			
		||||
      this.currIndex = index
 | 
			
		||||
      this.reload()
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    getList() {
 | 
			
		||||
      if (this.isMore) return
 | 
			
		||||
 | 
			
		||||
      this.$http.post(`/app/apppreventionreturntopoverty/list`, null, {
 | 
			
		||||
        params: {
 | 
			
		||||
          current: this.current,
 | 
			
		||||
          size: 15,
 | 
			
		||||
          status: this.currIndex === 1 ? '1' : '',
 | 
			
		||||
          addressAreaId: this.addressAreaId,
 | 
			
		||||
          name: this.name
 | 
			
		||||
        }
 | 
			
		||||
      }).then(res => {
 | 
			
		||||
        if (res.code == 0) {
 | 
			
		||||
          if (this.current > 1) {
 | 
			
		||||
            this.list = [...this.list, ...res.data.records]
 | 
			
		||||
          } else {
 | 
			
		||||
            this.list = res.data.records
 | 
			
		||||
          }
 | 
			
		||||
 | 
			
		||||
          uni.hideLoading()
 | 
			
		||||
 | 
			
		||||
          if (res.data.records.length < 10) {
 | 
			
		||||
            this.isMore = true
 | 
			
		||||
 | 
			
		||||
            return false
 | 
			
		||||
          }
 | 
			
		||||
 | 
			
		||||
          this.current = this.current + 1
 | 
			
		||||
        } else {
 | 
			
		||||
          uni.hideLoading()
 | 
			
		||||
        }
 | 
			
		||||
      }).catch(() => {
 | 
			
		||||
        uni.hideLoading()
 | 
			
		||||
      })
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
</script>
 | 
			
		||||
 | 
			
		||||
<style lang="scss">
 | 
			
		||||
.list {
 | 
			
		||||
  padding: 112px 0 120px;
 | 
			
		||||
 | 
			
		||||
  .addBtn {
 | 
			
		||||
    width: 96px;
 | 
			
		||||
    height: 96px;
 | 
			
		||||
    flex-shrink: 0;
 | 
			
		||||
    background: $uni-color-primary;
 | 
			
		||||
    box-shadow: 0 4px 8px 0 rgba(0, 0, 0, 0.2);
 | 
			
		||||
    font-size: 48px;
 | 
			
		||||
    color: #fff;
 | 
			
		||||
    border-radius: 50%;
 | 
			
		||||
    justify-content: center;
 | 
			
		||||
    align-items: center;
 | 
			
		||||
    display: flex;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  .list-wrapper {
 | 
			
		||||
    margin-top: 16px;
 | 
			
		||||
    background: #fff;
 | 
			
		||||
 | 
			
		||||
    .list-item {
 | 
			
		||||
      display: flex;
 | 
			
		||||
      align-items: center;
 | 
			
		||||
      padding: 20px 32px;
 | 
			
		||||
 | 
			
		||||
      image {
 | 
			
		||||
        width: 80px;
 | 
			
		||||
        height: 80px;
 | 
			
		||||
        margin-right: 32px;
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      .right {
 | 
			
		||||
        flex: 1;
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      p {
 | 
			
		||||
        color: #999999;
 | 
			
		||||
        font-size: 26px;
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      h2 {
 | 
			
		||||
        margin-bottom: 10px;
 | 
			
		||||
        color: #333333;
 | 
			
		||||
        font-size: 32px;
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    .search {
 | 
			
		||||
      margin: 20px 0;
 | 
			
		||||
      padding: 0 32px;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    .tab {
 | 
			
		||||
      display: flex;
 | 
			
		||||
      align-items: center;
 | 
			
		||||
      width: 100%;
 | 
			
		||||
      height: 96px;
 | 
			
		||||
      padding: 0 60px;
 | 
			
		||||
      background: #FFFFFF;
 | 
			
		||||
      border-bottom: 1px solid #D4D4D4;
 | 
			
		||||
      box-sizing: border-box;
 | 
			
		||||
 | 
			
		||||
      * {
 | 
			
		||||
        box-sizing: border-box;
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      span {
 | 
			
		||||
        position: relative;
 | 
			
		||||
        flex: 1;
 | 
			
		||||
        height: 96px;
 | 
			
		||||
        line-height: 96px;
 | 
			
		||||
        color: #000000;
 | 
			
		||||
        text-align: center;
 | 
			
		||||
        font-size: 32px;
 | 
			
		||||
 | 
			
		||||
        &::after {
 | 
			
		||||
          position: absolute;
 | 
			
		||||
          bottom: 0;
 | 
			
		||||
          left: 50%;
 | 
			
		||||
          width: 192px;
 | 
			
		||||
          height: 6px;
 | 
			
		||||
          background: transparent;
 | 
			
		||||
          transform: translateX(-50%);
 | 
			
		||||
          content: ' ';
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        &.active {
 | 
			
		||||
          color: #1365DD;
 | 
			
		||||
 | 
			
		||||
          &::after {
 | 
			
		||||
            background: #1365DD;
 | 
			
		||||
          }
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  .area {
 | 
			
		||||
    display: flex;
 | 
			
		||||
    position: fixed;
 | 
			
		||||
    align-items: center;
 | 
			
		||||
    top: 0;
 | 
			
		||||
    left: 0;
 | 
			
		||||
    z-index: 11;
 | 
			
		||||
    width: 100%;
 | 
			
		||||
    padding: 0 32px;
 | 
			
		||||
    height: 112px;
 | 
			
		||||
    color: #333333;
 | 
			
		||||
    font-size: 30px;
 | 
			
		||||
    background: #fff;
 | 
			
		||||
 | 
			
		||||
    .separat {
 | 
			
		||||
      padding: 0 8px;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    i {
 | 
			
		||||
      color: #3F8DF5;
 | 
			
		||||
      font-size: 30px;
 | 
			
		||||
      font-style: normal;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    span {
 | 
			
		||||
      color: #333333;
 | 
			
		||||
      font-size: 30px;
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
</style>
 | 
			
		||||
@@ -1,433 +0,0 @@
 | 
			
		||||
<template>
 | 
			
		||||
  <div class="statistics">
 | 
			
		||||
    <div class="area">
 | 
			
		||||
      <i>可选范围</i>
 | 
			
		||||
      <span class="separat">/</span>
 | 
			
		||||
      <AiAreaPicker ref="area" class="aiArea" :areaId="areaId" :name.sync="addressArea" mode="custom"
 | 
			
		||||
                    @select="onChange">
 | 
			
		||||
        <span class="label" v-if="addressArea">{{ addressArea }}</span>
 | 
			
		||||
        <i v-else>请选择</i>
 | 
			
		||||
      </AiAreaPicker>
 | 
			
		||||
    </div>
 | 
			
		||||
    <div class="charts-wrapper">
 | 
			
		||||
      <div class="total">
 | 
			
		||||
        <div class="total-item">
 | 
			
		||||
          <h2>{{ info.jths }}</h2>
 | 
			
		||||
          <p>检测家庭户数</p>
 | 
			
		||||
        </div>
 | 
			
		||||
        <div class="total-item">
 | 
			
		||||
          <h2>{{ info.zrs }}</h2>
 | 
			
		||||
          <p>监测对象总人数</p>
 | 
			
		||||
        </div>
 | 
			
		||||
      </div>
 | 
			
		||||
      <div class="charts">
 | 
			
		||||
        <h2>近半年风险人数变化趋势</h2>
 | 
			
		||||
        <div id="chart1" style="height: 400rpx"></div>
 | 
			
		||||
      </div>
 | 
			
		||||
      <div class="total middle-total">
 | 
			
		||||
        <div class="total-item">
 | 
			
		||||
          <h2>{{ info['饮水安全'] || 0 }}</h2>
 | 
			
		||||
          <p>住房安全</p>
 | 
			
		||||
        </div>
 | 
			
		||||
        <div class="total-item">
 | 
			
		||||
          <h2>{{ info['饮水安全'] || 0 }}</h2>
 | 
			
		||||
          <p>饮水安全</p>
 | 
			
		||||
        </div>
 | 
			
		||||
        <div class="total-item">
 | 
			
		||||
          <h2>{{ info['失学辍学'] || 0 }}</h2>
 | 
			
		||||
          <p>失学辍学</p>
 | 
			
		||||
        </div>
 | 
			
		||||
        <div class="total-item">
 | 
			
		||||
          <h2>{{ info['医疗保险'] || 0 }}</h2>
 | 
			
		||||
          <p>医疗保险</p>
 | 
			
		||||
        </div>
 | 
			
		||||
      </div>
 | 
			
		||||
      <div class="charts">
 | 
			
		||||
        <h2>风险类型排行TOP10</h2>
 | 
			
		||||
        <div id="chart3" style="height: 400rpx"></div>
 | 
			
		||||
      </div>
 | 
			
		||||
      <div class="charts">
 | 
			
		||||
        <h2>风险消除方式</h2>
 | 
			
		||||
        <div id="chart4" style="height: 400rpx"></div>
 | 
			
		||||
      </div>
 | 
			
		||||
    </div>
 | 
			
		||||
  </div>
 | 
			
		||||
</template>
 | 
			
		||||
 | 
			
		||||
<script>
 | 
			
		||||
import echarts from 'echarts'
 | 
			
		||||
 | 
			
		||||
export default {
 | 
			
		||||
  name: 'statistics',
 | 
			
		||||
 | 
			
		||||
  data() {
 | 
			
		||||
    return {
 | 
			
		||||
      addressAreaId: '',
 | 
			
		||||
      addressArea: '',
 | 
			
		||||
      chart1: null,
 | 
			
		||||
      chart2: null,
 | 
			
		||||
      chart3: null,
 | 
			
		||||
      chart4: null,
 | 
			
		||||
      areaId: '',
 | 
			
		||||
      info: {},
 | 
			
		||||
      pageShow: false
 | 
			
		||||
    }
 | 
			
		||||
  },
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
  created() {
 | 
			
		||||
    this.areaId = this.$store.state.user.areaId
 | 
			
		||||
    this.addressAreaId = this.$store.state.user.areaId
 | 
			
		||||
    this.addressArea = this.$store.state.user.areaName
 | 
			
		||||
  },
 | 
			
		||||
 | 
			
		||||
  mounted() {
 | 
			
		||||
    window.scrollTo(0, 0)
 | 
			
		||||
    this.chart1 = echarts.init(document.getElementById('chart1'))
 | 
			
		||||
    this.chart4 = echarts.init(document.getElementById('chart4'))
 | 
			
		||||
    this.chart3 = echarts.init(document.getElementById('chart3'))
 | 
			
		||||
 | 
			
		||||
    this.$dict.load(['fpRiskType', 'fpRiskEliminationMethod']).then(() => {
 | 
			
		||||
      this.getInfo()
 | 
			
		||||
    })
 | 
			
		||||
  },
 | 
			
		||||
 | 
			
		||||
  methods: {
 | 
			
		||||
    reload() {
 | 
			
		||||
      this.$nextTick(() => {
 | 
			
		||||
        this.getInfo()
 | 
			
		||||
      })
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    onChange(e) {
 | 
			
		||||
      this.addressAreaId = e.id
 | 
			
		||||
 | 
			
		||||
      this.$nextTick(() => {
 | 
			
		||||
        this.reload()
 | 
			
		||||
      })
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    initChart1(data) {
 | 
			
		||||
      const x = data.map(v => v.m)
 | 
			
		||||
      const v = data.map(v => v.c)
 | 
			
		||||
      const option = {
 | 
			
		||||
        color: ['#2896FF', '#09DBFE', '#61FDB9', '#FFBB69', '#8429FF', '#ea7ccc'],
 | 
			
		||||
        xAxis: {
 | 
			
		||||
          type: 'category',
 | 
			
		||||
          data: x,
 | 
			
		||||
          splitLine: {
 | 
			
		||||
            show: true,
 | 
			
		||||
            lineStyle: {
 | 
			
		||||
              width: 1,
 | 
			
		||||
              type: 'solid',
 | 
			
		||||
              color: '#f5f5f5'
 | 
			
		||||
            }
 | 
			
		||||
          },
 | 
			
		||||
          axisLabel: {
 | 
			
		||||
            align: 'center',
 | 
			
		||||
            padding: [2, 0, 0, 0],
 | 
			
		||||
            interval: 0,
 | 
			
		||||
            fontSize: 14,
 | 
			
		||||
            color: '#999'
 | 
			
		||||
          },
 | 
			
		||||
          axisTick: {
 | 
			
		||||
            length: 1,
 | 
			
		||||
            show: true
 | 
			
		||||
          },
 | 
			
		||||
          boundaryGap: true,
 | 
			
		||||
          axisLine: {
 | 
			
		||||
            show: true,
 | 
			
		||||
            lineStyle: {
 | 
			
		||||
              color: '#aaa'
 | 
			
		||||
            }
 | 
			
		||||
          }
 | 
			
		||||
        },
 | 
			
		||||
        grid: {
 | 
			
		||||
          top: '4%',
 | 
			
		||||
          left: '4%',
 | 
			
		||||
          right: '6%',
 | 
			
		||||
          bottom: '0%',
 | 
			
		||||
          containLabel: true
 | 
			
		||||
        },
 | 
			
		||||
        yAxis: {
 | 
			
		||||
          type: 'value',
 | 
			
		||||
          boundaryGap: true,
 | 
			
		||||
          axisTick: {
 | 
			
		||||
            length: 1,
 | 
			
		||||
            show: true
 | 
			
		||||
          },
 | 
			
		||||
          splitLine: {
 | 
			
		||||
            show: true,
 | 
			
		||||
            lineStyle: {
 | 
			
		||||
              width: 1,
 | 
			
		||||
              type: 'solid',
 | 
			
		||||
              color: '#f5f5f5'
 | 
			
		||||
            }
 | 
			
		||||
          },
 | 
			
		||||
          nameTextStyle: {
 | 
			
		||||
            color: '#f5f5f5',
 | 
			
		||||
            align: 'left'
 | 
			
		||||
          },
 | 
			
		||||
          axisLine: {
 | 
			
		||||
            show: true,
 | 
			
		||||
            lineStyle: {
 | 
			
		||||
              width: 1,
 | 
			
		||||
              type: 'solid',
 | 
			
		||||
              color: '#aaa'
 | 
			
		||||
            }
 | 
			
		||||
          },
 | 
			
		||||
          axisLabel: {
 | 
			
		||||
            color: '#999'
 | 
			
		||||
          }
 | 
			
		||||
        },
 | 
			
		||||
        series: [
 | 
			
		||||
          {
 | 
			
		||||
            data: v,
 | 
			
		||||
            type: 'line'
 | 
			
		||||
          }
 | 
			
		||||
        ]
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      this.chart1.setOption(option)
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    initChart3(data) {
 | 
			
		||||
      const y = data.map(v => this.$dict.getLabel('fpRiskType', v.risk_type) || '其他')
 | 
			
		||||
      const v = data.map(v => v.c)
 | 
			
		||||
      const option = {
 | 
			
		||||
        tooltip: {},
 | 
			
		||||
        color: ['#2896FF', '#09DBFE', '#61FDB9', '#FFBB69', '#8429FF', '#ea7ccc'],
 | 
			
		||||
        grid: {
 | 
			
		||||
          top: '4%',
 | 
			
		||||
          left: '4%',
 | 
			
		||||
          right: '6%',
 | 
			
		||||
          bottom: '0%',
 | 
			
		||||
          containLabel: true
 | 
			
		||||
        },
 | 
			
		||||
        xAxis: {
 | 
			
		||||
          type: 'value',
 | 
			
		||||
          splitLine: {
 | 
			
		||||
            show: true,
 | 
			
		||||
            lineStyle: {
 | 
			
		||||
              width: 1,
 | 
			
		||||
              type: 'solid',
 | 
			
		||||
              color: '#f5f5f5'
 | 
			
		||||
            }
 | 
			
		||||
          },
 | 
			
		||||
          axisTick: {
 | 
			
		||||
            length: 1,
 | 
			
		||||
            show: true
 | 
			
		||||
          },
 | 
			
		||||
          axisLabel: {
 | 
			
		||||
            align: 'center',
 | 
			
		||||
            padding: [2, 0, 0, 0],
 | 
			
		||||
            interval: 0,
 | 
			
		||||
            fontSize: 14,
 | 
			
		||||
            color: '#999'
 | 
			
		||||
          },
 | 
			
		||||
          boundaryGap: true,
 | 
			
		||||
          axisLine: {
 | 
			
		||||
            show: true,
 | 
			
		||||
            lineStyle: {
 | 
			
		||||
              width: 1,
 | 
			
		||||
              type: 'solid',
 | 
			
		||||
              color: '#aaa'
 | 
			
		||||
            }
 | 
			
		||||
          },
 | 
			
		||||
        },
 | 
			
		||||
        yAxis: {
 | 
			
		||||
          type: 'category',
 | 
			
		||||
          data: y,
 | 
			
		||||
          boundaryGap: true,
 | 
			
		||||
          axisTick: {
 | 
			
		||||
            length: 0,
 | 
			
		||||
            show: false
 | 
			
		||||
          },
 | 
			
		||||
          splitLine: {
 | 
			
		||||
            show: true,
 | 
			
		||||
            lineStyle: {
 | 
			
		||||
              color: ['#e9e9e9'],
 | 
			
		||||
              width: 1,
 | 
			
		||||
              type: 'solid'
 | 
			
		||||
            }
 | 
			
		||||
          },
 | 
			
		||||
          nameTextStyle: {
 | 
			
		||||
            color: '#999',
 | 
			
		||||
            align: 'left'
 | 
			
		||||
          },
 | 
			
		||||
          axisLine: {
 | 
			
		||||
            show: true,
 | 
			
		||||
            lineStyle: {
 | 
			
		||||
              width: 1,
 | 
			
		||||
              type: 'solid',
 | 
			
		||||
              color: '#aaa'
 | 
			
		||||
            }
 | 
			
		||||
          },
 | 
			
		||||
          axisLabel: {
 | 
			
		||||
            color: '#999'
 | 
			
		||||
          }
 | 
			
		||||
        },
 | 
			
		||||
        series: [
 | 
			
		||||
          {
 | 
			
		||||
            name: '2011',
 | 
			
		||||
            type: 'bar',
 | 
			
		||||
            data: v
 | 
			
		||||
          }
 | 
			
		||||
        ]
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      this.chart3.setOption(option)
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    initChart4(data) {
 | 
			
		||||
      const values = data.map(v => {
 | 
			
		||||
        return {
 | 
			
		||||
          value: v.c,
 | 
			
		||||
          name: this.$dict.getLabel('fpRiskEliminationMethod', v.risk_elimination_method) || '其他'
 | 
			
		||||
        }
 | 
			
		||||
      })
 | 
			
		||||
      const option = {
 | 
			
		||||
        tooltip: {
 | 
			
		||||
          trigger: 'item'
 | 
			
		||||
        },
 | 
			
		||||
        grid: {
 | 
			
		||||
          left: '0%',
 | 
			
		||||
          right: '0%',
 | 
			
		||||
          bottom: '0%',
 | 
			
		||||
          top: '40px',
 | 
			
		||||
          containLabel: true
 | 
			
		||||
        },
 | 
			
		||||
        color: ['#2896FF', '#09DBFE', '#61FDB9', '#FFBB69', '#8429FF', '#ea7ccc'],
 | 
			
		||||
        series: [
 | 
			
		||||
          {
 | 
			
		||||
            name: '本月纳入监测人群属性分析',
 | 
			
		||||
            type: 'pie',
 | 
			
		||||
            radius: ['40%', '70%'],
 | 
			
		||||
            emphasis: {
 | 
			
		||||
              label: {
 | 
			
		||||
                show: true,
 | 
			
		||||
                fontSize: '40',
 | 
			
		||||
                fontWeight: 'bold'
 | 
			
		||||
              }
 | 
			
		||||
            },
 | 
			
		||||
            data: values
 | 
			
		||||
          }
 | 
			
		||||
        ]
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      this.chart4.setOption(option)
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    getInfo() {
 | 
			
		||||
      this.$http.post(`/app/apppreventionreturntopoverty/statistics-prtp?areaId=${this.addressAreaId}`).then(res => {
 | 
			
		||||
        if (res.code === 0) {
 | 
			
		||||
          this.info = res.data
 | 
			
		||||
          this.initChart1(res.data['近半年趋势'])
 | 
			
		||||
          this.initChart3(res.data['风险类型排行'])
 | 
			
		||||
          this.initChart4(res.data['风险消除方式'])
 | 
			
		||||
        }
 | 
			
		||||
      })
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
</script>
 | 
			
		||||
 | 
			
		||||
<style lang="scss">
 | 
			
		||||
.statistics {
 | 
			
		||||
  padding: 112px 0 120px;
 | 
			
		||||
 | 
			
		||||
  .area {
 | 
			
		||||
    display: flex;
 | 
			
		||||
    position: fixed;
 | 
			
		||||
    align-items: center;
 | 
			
		||||
    top: 0;
 | 
			
		||||
    left: 0;
 | 
			
		||||
    z-index: 11;
 | 
			
		||||
    width: 100%;
 | 
			
		||||
    padding: 0 32px;
 | 
			
		||||
    height: 112px;
 | 
			
		||||
    color: #333333;
 | 
			
		||||
    font-size: 30px;
 | 
			
		||||
    background: #fff;
 | 
			
		||||
 | 
			
		||||
    .separat {
 | 
			
		||||
      padding: 0 8px;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    i {
 | 
			
		||||
      color: #3F8DF5;
 | 
			
		||||
      font-size: 30px;
 | 
			
		||||
      font-style: normal;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    span {
 | 
			
		||||
      color: #333333;
 | 
			
		||||
      font-size: 30px;
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  .charts-wrapper {
 | 
			
		||||
    position: relative;
 | 
			
		||||
    z-index: 1;
 | 
			
		||||
    padding: 0 32px;
 | 
			
		||||
 | 
			
		||||
    .total {
 | 
			
		||||
      display: flex;
 | 
			
		||||
      align-items: center;
 | 
			
		||||
      height: 200px;
 | 
			
		||||
      margin-top: 32px;
 | 
			
		||||
      background: #FFFFFF;
 | 
			
		||||
      border-radius: 8px;
 | 
			
		||||
 | 
			
		||||
      .total-item {
 | 
			
		||||
        flex: 1;
 | 
			
		||||
        text-align: center;
 | 
			
		||||
 | 
			
		||||
        h2 {
 | 
			
		||||
          font-size: 64px;
 | 
			
		||||
          color: #3192F4;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        p {
 | 
			
		||||
          margin-top: 10px;
 | 
			
		||||
          color: #999999;
 | 
			
		||||
          font-size: 28px;
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    .middle-total {
 | 
			
		||||
      height: 160px;
 | 
			
		||||
 | 
			
		||||
      h2 {
 | 
			
		||||
        font-size: 48px !important;
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      p {
 | 
			
		||||
        margin-top: 8px !important;
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    .charts {
 | 
			
		||||
      margin-top: 32px;
 | 
			
		||||
      background: #FFFFFF;
 | 
			
		||||
      border-radius: 8px;
 | 
			
		||||
 | 
			
		||||
      & > h2 {
 | 
			
		||||
        height: 96px;
 | 
			
		||||
        line-height: 96px;
 | 
			
		||||
        padding: 0 32px;
 | 
			
		||||
        color: #333333;
 | 
			
		||||
        font-size: 32px;
 | 
			
		||||
        border-bottom: 1px solid #DDDDDD;
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      & > div {
 | 
			
		||||
        width: 686px;
 | 
			
		||||
        margin: 0 auto;
 | 
			
		||||
        padding: 32px 0;
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
</style>
 | 
			
		||||
@@ -1,359 +0,0 @@
 | 
			
		||||
<template>
 | 
			
		||||
  <div class="add">
 | 
			
		||||
    <div class="form-group">
 | 
			
		||||
      <div class="form-item">
 | 
			
		||||
        <div class="form-item__wrapper">
 | 
			
		||||
          <div class="left">
 | 
			
		||||
            <i>*</i>
 | 
			
		||||
            <span>监测对象类型</span>
 | 
			
		||||
          </div>
 | 
			
		||||
          <div class="right">
 | 
			
		||||
            <AiSelect dict="fpType" v-model="form.type"></AiSelect>
 | 
			
		||||
          </div>
 | 
			
		||||
        </div>
 | 
			
		||||
      </div>
 | 
			
		||||
      <div class="form-item">
 | 
			
		||||
        <div class="form-item__wrapper">
 | 
			
		||||
          <div class="left">
 | 
			
		||||
            <i>*</i>
 | 
			
		||||
            <span>联系方式</span>
 | 
			
		||||
          </div>
 | 
			
		||||
          <div class="right">
 | 
			
		||||
            <input placeholder="请输入" type="number" v-model="form.phone" :maxlength="11"
 | 
			
		||||
                   placeholder-style="color: #999; font-size: 30rpx;"/>
 | 
			
		||||
          </div>
 | 
			
		||||
        </div>
 | 
			
		||||
      </div>
 | 
			
		||||
    </div>
 | 
			
		||||
    <div class="form-group">
 | 
			
		||||
      <div class="form-item">
 | 
			
		||||
        <div class="form-item__wrapper">
 | 
			
		||||
          <div class="left">
 | 
			
		||||
            <i>*</i>
 | 
			
		||||
            <span>地址</span>
 | 
			
		||||
          </div>
 | 
			
		||||
          <div class="right">
 | 
			
		||||
            <!-- <AiArea class="aiArea" v-model="form.addressAreaId" mode="custom" fullname :areaRange="$areaId" :name.sync="form.addressArea">
 | 
			
		||||
              <span class="label" v-if="form.addressArea">{{ form.addressArea }}</span>
 | 
			
		||||
              <i v-else>请选择</i>
 | 
			
		||||
              <u-icon name="arrow-right" color="#ddd"/>
 | 
			
		||||
            </AiArea> -->
 | 
			
		||||
            <AiAreaPicker ref="address" class="aiArea" :areaId="$areaId" mode="custom" all @select="onAreaChange">
 | 
			
		||||
              <span class="label" v-if="form.addressArea">{{ form.addressArea }}</span>
 | 
			
		||||
              <i v-else>请选择</i>
 | 
			
		||||
              <u-icon name="arrow-right" color="#ddd"/>
 | 
			
		||||
            </AiAreaPicker>
 | 
			
		||||
          </div>
 | 
			
		||||
        </div>
 | 
			
		||||
      </div>
 | 
			
		||||
      <div class="form-item">
 | 
			
		||||
        <div class="form-item__wrapper">
 | 
			
		||||
          <div class="left">
 | 
			
		||||
            <i style="opacity: 0;">*</i>
 | 
			
		||||
            <span>家庭住址</span>
 | 
			
		||||
          </div>
 | 
			
		||||
          <div class="right">
 | 
			
		||||
            <input placeholder="请输入" v-model="form.address" placeholder-style="color: #999; font-size: 30rpx;"/>
 | 
			
		||||
          </div>
 | 
			
		||||
        </div>
 | 
			
		||||
      </div>
 | 
			
		||||
      <div class="form-item">
 | 
			
		||||
        <div class="form-item__wrapper">
 | 
			
		||||
          <div class="left">
 | 
			
		||||
            <i style="opacity: 0;">*</i>
 | 
			
		||||
            <span>是否扶贫搬迁</span>
 | 
			
		||||
          </div>
 | 
			
		||||
          <div class="right">
 | 
			
		||||
            <u-radio-group v-model="form.move">
 | 
			
		||||
              <u-radio :name="item.dictValue" v-for="(item, index) in $dict.getDict('fpYesOrNo')" :key="index">
 | 
			
		||||
                {{ item.dictName }}
 | 
			
		||||
              </u-radio>
 | 
			
		||||
            </u-radio-group>
 | 
			
		||||
          </div>
 | 
			
		||||
        </div>
 | 
			
		||||
      </div>
 | 
			
		||||
    </div>
 | 
			
		||||
    <div class="form-group" v-if="form.move === '01'">
 | 
			
		||||
      <div class="form-item">
 | 
			
		||||
        <div class="form-item__wrapper">
 | 
			
		||||
          <div class="left">
 | 
			
		||||
            <i>*</i>
 | 
			
		||||
            <span>安置地区</span>
 | 
			
		||||
          </div>
 | 
			
		||||
          <div class="right">
 | 
			
		||||
            <AiAreaPicker ref="area" class="aiArea" :areaId.sync="form.placeAreaId" mode="custom" all
 | 
			
		||||
                          @select="onChange">
 | 
			
		||||
              <span class="label" v-if="form.placeArea">{{ form.placeArea }}</span>
 | 
			
		||||
              <i v-else>请选择</i>
 | 
			
		||||
              <u-icon name="arrow-right" color="#ddd"/>
 | 
			
		||||
            </AiAreaPicker>
 | 
			
		||||
          </div>
 | 
			
		||||
        </div>
 | 
			
		||||
      </div>
 | 
			
		||||
      <div class="form-item">
 | 
			
		||||
        <div class="form-item__wrapper">
 | 
			
		||||
          <div class="left">
 | 
			
		||||
            <i>*</i>
 | 
			
		||||
            <span>安置地区详细地址</span>
 | 
			
		||||
          </div>
 | 
			
		||||
          <div class="right">
 | 
			
		||||
            <input placeholder="请输入" v-model="form.place" placeholder-style="color: #999; font-size: 30rpx;"/>
 | 
			
		||||
          </div>
 | 
			
		||||
        </div>
 | 
			
		||||
      </div>
 | 
			
		||||
    </div>
 | 
			
		||||
    <div class="btn" hover-class="text" @click="submit"> {{ isEdit ? '保存' : '提交' }}</div>
 | 
			
		||||
  </div>
 | 
			
		||||
</template>
 | 
			
		||||
 | 
			
		||||
<script>
 | 
			
		||||
 | 
			
		||||
export default {
 | 
			
		||||
  data() {
 | 
			
		||||
    return {
 | 
			
		||||
      form: {
 | 
			
		||||
        addressAreaId: '',
 | 
			
		||||
        address: '',
 | 
			
		||||
        addressArea: '',
 | 
			
		||||
        move: '02',
 | 
			
		||||
        place: '',
 | 
			
		||||
        placeAreaId: '',
 | 
			
		||||
        placeArea: '',
 | 
			
		||||
        type: ''
 | 
			
		||||
      },
 | 
			
		||||
      $areaId: '',
 | 
			
		||||
      isEdit: false,
 | 
			
		||||
      id: '',
 | 
			
		||||
      areaName: ''
 | 
			
		||||
    }
 | 
			
		||||
  },
 | 
			
		||||
 | 
			
		||||
  created() {
 | 
			
		||||
    this.$areaId = this.$store.state.user.areaId
 | 
			
		||||
    this.areaName = this.$store.state.user.areaFullName
 | 
			
		||||
    this.$dict.load(['fpType', 'fpYesOrNo'])
 | 
			
		||||
  },
 | 
			
		||||
 | 
			
		||||
  onLoad(query) {
 | 
			
		||||
    if (query.id) {
 | 
			
		||||
      this.isEdit = true
 | 
			
		||||
      this.id = query.id
 | 
			
		||||
 | 
			
		||||
      this.getInfo(this.id)
 | 
			
		||||
    }
 | 
			
		||||
  },
 | 
			
		||||
 | 
			
		||||
  methods: {
 | 
			
		||||
    submit() {
 | 
			
		||||
      if (!this.form.type) {
 | 
			
		||||
        return this.$u.toast('请选择监测类型')
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      if (!this.form.phone) {
 | 
			
		||||
        return this.$u.toast('请输入联系方式')
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      if (!this.form.addressAreaId) {
 | 
			
		||||
        return this.$u.toast('请选择住址')
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      uni.showLoading()
 | 
			
		||||
      this.$http.post('/app/apppreventionreturntopoverty/addOrUpdate', {
 | 
			
		||||
        ...this.form,
 | 
			
		||||
        id: this.isEdit ? this.id : ''
 | 
			
		||||
      }).then(res => {
 | 
			
		||||
        if (res.code === 0) {
 | 
			
		||||
          this.$u.toast(this.isEdit ? '保存成功' : '提交成功')
 | 
			
		||||
          uni.$emit('reload')
 | 
			
		||||
          uni.navigateBack({
 | 
			
		||||
            delta: 1
 | 
			
		||||
          })
 | 
			
		||||
        }
 | 
			
		||||
        uni.hideLoading()
 | 
			
		||||
      })
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    onAreaChange(e) {
 | 
			
		||||
      this.form.addressAreaId = e.id
 | 
			
		||||
      const areaList = this.$refs.address.fullArea
 | 
			
		||||
      let fullAreaName = ''
 | 
			
		||||
      areaList.forEach(item => {
 | 
			
		||||
        fullAreaName = fullAreaName + item.name
 | 
			
		||||
      })
 | 
			
		||||
 | 
			
		||||
      this.form.addressArea = fullAreaName.replace('全国', '')
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    onChange(e) {
 | 
			
		||||
      this.form.placeAreaId = e.id
 | 
			
		||||
      const areaList = this.$refs.area.fullArea
 | 
			
		||||
      let fullAreaName = ''
 | 
			
		||||
      areaList.forEach(item => {
 | 
			
		||||
        fullAreaName = fullAreaName + item.name
 | 
			
		||||
      })
 | 
			
		||||
 | 
			
		||||
      this.form.placeArea = fullAreaName.replace('全国', '')
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    getInfo(id) {
 | 
			
		||||
      this.$http.post(`/app/apppreventionreturntopoverty/queryDetailById?id=${id}`).then(res => {
 | 
			
		||||
        if (res.code === 0) {
 | 
			
		||||
          this.form = {
 | 
			
		||||
            ...this.form,
 | 
			
		||||
            ...res.data
 | 
			
		||||
          }
 | 
			
		||||
        }
 | 
			
		||||
      })
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
</script>
 | 
			
		||||
 | 
			
		||||
<style lang="scss">
 | 
			
		||||
.add {
 | 
			
		||||
  padding-bottom: 120px;
 | 
			
		||||
 | 
			
		||||
  .aiArea {
 | 
			
		||||
    display: flex;
 | 
			
		||||
    align-items: center;
 | 
			
		||||
 | 
			
		||||
    .label {
 | 
			
		||||
      color: #303133 !important;
 | 
			
		||||
      font-size: 30px;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    i {
 | 
			
		||||
      margin-left: 4px;
 | 
			
		||||
      font-style: normal;
 | 
			
		||||
      color: #999999;
 | 
			
		||||
      font-size: 30px;
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  ::v-deep .u-radio {
 | 
			
		||||
    &:last-child {
 | 
			
		||||
      .u-radio__label {
 | 
			
		||||
        margin-right: 0;
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  & > div {
 | 
			
		||||
    margin-bottom: 16px;
 | 
			
		||||
    background: #fff;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  .form-group {
 | 
			
		||||
    .form-item {
 | 
			
		||||
      padding-left: 32px;
 | 
			
		||||
 | 
			
		||||
      .form-item__wrapper {
 | 
			
		||||
        display: flex;
 | 
			
		||||
        align-items: center;
 | 
			
		||||
        justify-content: space-between;
 | 
			
		||||
        height: 112px;
 | 
			
		||||
        border-bottom: 1px solid #E4E5E6;
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      .right {
 | 
			
		||||
        height: 112px;
 | 
			
		||||
        line-height: 112px;
 | 
			
		||||
        padding-right: 32px;
 | 
			
		||||
 | 
			
		||||
        span {
 | 
			
		||||
          font-size: 30px;
 | 
			
		||||
          color: #999999;
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      input {
 | 
			
		||||
        height: 100%;
 | 
			
		||||
        text-align: right;
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      .left {
 | 
			
		||||
        display: flex;
 | 
			
		||||
        align-items: center;
 | 
			
		||||
 | 
			
		||||
        span {
 | 
			
		||||
          color: #333333;
 | 
			
		||||
          font-size: 32px;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        i {
 | 
			
		||||
          margin-right: 4px;
 | 
			
		||||
          font-style: normal;
 | 
			
		||||
          color: #FF4466;
 | 
			
		||||
          font-size: 32px;
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      &:last-child {
 | 
			
		||||
        .form-item__wrapper {
 | 
			
		||||
          border: none;
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  .form-item__imgs {
 | 
			
		||||
    padding: 32px;
 | 
			
		||||
 | 
			
		||||
    .form-item__title {
 | 
			
		||||
      display: flex;
 | 
			
		||||
      align-items: center;
 | 
			
		||||
      margin-bottom: 34px;
 | 
			
		||||
 | 
			
		||||
      h2 {
 | 
			
		||||
        color: #333333;
 | 
			
		||||
        font-weight: normal;
 | 
			
		||||
        font-size: 32px;
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      i {
 | 
			
		||||
        color: #999999;
 | 
			
		||||
        font-size: 28px;
 | 
			
		||||
        font-style: normal;
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    textarea {
 | 
			
		||||
      width: 100%;
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  .form-type {
 | 
			
		||||
    display: flex;
 | 
			
		||||
    align-items: center;
 | 
			
		||||
    justify-content: space-between;
 | 
			
		||||
    height: 112px;
 | 
			
		||||
    padding: 0 32px;
 | 
			
		||||
 | 
			
		||||
    h2 {
 | 
			
		||||
      font-weight: normal;
 | 
			
		||||
      color: #333333;
 | 
			
		||||
      font-size: 32px;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    span {
 | 
			
		||||
      color: #999999;
 | 
			
		||||
      font-size: 28px;
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  .btn {
 | 
			
		||||
    position: fixed;
 | 
			
		||||
    left: 0;
 | 
			
		||||
    bottom: 0;
 | 
			
		||||
    z-index: 11;
 | 
			
		||||
    width: 100%;
 | 
			
		||||
    height: 112px;
 | 
			
		||||
    line-height: 112px;
 | 
			
		||||
    margin: 0;
 | 
			
		||||
    text-align: center;
 | 
			
		||||
    color: #FFFFFF;
 | 
			
		||||
    font-size: 32px;
 | 
			
		||||
    background: #3192F4;
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
</style>
 | 
			
		||||
@@ -1,466 +0,0 @@
 | 
			
		||||
<template>
 | 
			
		||||
  <div class="add">
 | 
			
		||||
    <div class="form-group">
 | 
			
		||||
      <div class="form-item">
 | 
			
		||||
        <div class="form-item__wrapper">
 | 
			
		||||
          <div class="left">
 | 
			
		||||
            <i>*</i>
 | 
			
		||||
            <span>与户主关系</span>
 | 
			
		||||
          </div>
 | 
			
		||||
          <div class="right">
 | 
			
		||||
            <AiSelect dict="fpRelationship" v-model="form.relationship"></AiSelect>
 | 
			
		||||
          </div>
 | 
			
		||||
        </div>
 | 
			
		||||
      </div>
 | 
			
		||||
    </div>
 | 
			
		||||
    <div class="form-group">
 | 
			
		||||
      <div class="form-item">
 | 
			
		||||
        <div class="form-item__wrapper">
 | 
			
		||||
          <div class="left">
 | 
			
		||||
            <i>*</i>
 | 
			
		||||
            <span>姓名</span>
 | 
			
		||||
          </div>
 | 
			
		||||
          <div class="right">
 | 
			
		||||
            <input placeholder="请输入" v-model="form.name" placeholder-style="color: #999; font-size: 30rpx;"/>
 | 
			
		||||
          </div>
 | 
			
		||||
        </div>
 | 
			
		||||
      </div>
 | 
			
		||||
      <div class="form-item">
 | 
			
		||||
        <div class="form-item__wrapper">
 | 
			
		||||
          <div class="left">
 | 
			
		||||
            <i>*</i>
 | 
			
		||||
            <span>身份证号</span>
 | 
			
		||||
          </div>
 | 
			
		||||
          <div class="right">
 | 
			
		||||
            <input placeholder="请输入" v-model="form.idNumber" placeholder-style="color: #999; font-size: 30rpx;"/>
 | 
			
		||||
          </div>
 | 
			
		||||
        </div>
 | 
			
		||||
      </div>
 | 
			
		||||
      <div class="form-item">
 | 
			
		||||
        <div class="form-item__wrapper">
 | 
			
		||||
          <div class="left">
 | 
			
		||||
            <i>*</i>
 | 
			
		||||
            <span>性别</span>
 | 
			
		||||
          </div>
 | 
			
		||||
          <div class="right">
 | 
			
		||||
            <AiSelect dict="sex" v-model="form.sex"></AiSelect>
 | 
			
		||||
          </div>
 | 
			
		||||
        </div>
 | 
			
		||||
      </div>
 | 
			
		||||
      <div class="form-item">
 | 
			
		||||
        <div class="form-item__wrapper">
 | 
			
		||||
          <div class="left">
 | 
			
		||||
            <i style="opacity: 0;">*</i>
 | 
			
		||||
            <span>民族</span>
 | 
			
		||||
          </div>
 | 
			
		||||
          <div class="right">
 | 
			
		||||
            <AiSelect dict="fpNation" v-model="form.nation"></AiSelect>
 | 
			
		||||
          </div>
 | 
			
		||||
        </div>
 | 
			
		||||
      </div>
 | 
			
		||||
      <div class="form-item">
 | 
			
		||||
        <div class="form-item__wrapper">
 | 
			
		||||
          <div class="left">
 | 
			
		||||
            <i style="opacity: 0;">*</i>
 | 
			
		||||
            <span>政治面貌</span>
 | 
			
		||||
          </div>
 | 
			
		||||
          <div class="right">
 | 
			
		||||
            <AiSelect dict="fpPoliticalOutlook" v-model="form.politicalOutlook"></AiSelect>
 | 
			
		||||
          </div>
 | 
			
		||||
        </div>
 | 
			
		||||
      </div>
 | 
			
		||||
      <div class="form-item">
 | 
			
		||||
        <div class="form-item__wrapper">
 | 
			
		||||
          <div class="left">
 | 
			
		||||
            <i style="opacity: 0;">*</i>
 | 
			
		||||
            <span>文化程度</span>
 | 
			
		||||
          </div>
 | 
			
		||||
          <div class="right">
 | 
			
		||||
            <AiSelect dict="fpEducation" v-model="form.education"></AiSelect>
 | 
			
		||||
          </div>
 | 
			
		||||
        </div>
 | 
			
		||||
      </div>
 | 
			
		||||
    </div>
 | 
			
		||||
    <div class="form-group">
 | 
			
		||||
      <div class="form-item">
 | 
			
		||||
        <div class="form-item__wrapper">
 | 
			
		||||
          <div class="left">
 | 
			
		||||
            <i>*</i>
 | 
			
		||||
            <span>在校情况</span>
 | 
			
		||||
          </div>
 | 
			
		||||
          <div class="right">
 | 
			
		||||
            <AiSelect dict="fpStudentsInSchool" v-model="form.studentsInSchool"></AiSelect>
 | 
			
		||||
          </div>
 | 
			
		||||
        </div>
 | 
			
		||||
      </div>
 | 
			
		||||
      <div class="form-item">
 | 
			
		||||
        <div class="form-item__wrapper">
 | 
			
		||||
          <div class="left">
 | 
			
		||||
            <i>*</i>
 | 
			
		||||
            <span>健康状况</span>
 | 
			
		||||
          </div>
 | 
			
		||||
          <div class="right">
 | 
			
		||||
            <AiSelect dict="fpHealth" v-model="form.health"></AiSelect>
 | 
			
		||||
          </div>
 | 
			
		||||
        </div>
 | 
			
		||||
      </div>
 | 
			
		||||
      <div class="form-item">
 | 
			
		||||
        <div class="form-item__wrapper">
 | 
			
		||||
          <div class="left">
 | 
			
		||||
            <i style="opacity: 0;">*</i>
 | 
			
		||||
            <span>劳动技能</span>
 | 
			
		||||
          </div>
 | 
			
		||||
          <div class="right">
 | 
			
		||||
            <AiSelect dict="fpLaborSkills" v-model="form.laborSkills"></AiSelect>
 | 
			
		||||
          </div>
 | 
			
		||||
        </div>
 | 
			
		||||
      </div>
 | 
			
		||||
      <div class="form-item">
 | 
			
		||||
        <div class="form-item__wrapper">
 | 
			
		||||
          <div class="left">
 | 
			
		||||
            <i style="opacity: 0;">*</i>
 | 
			
		||||
            <span>务工区域</span>
 | 
			
		||||
          </div>
 | 
			
		||||
          <div class="right">
 | 
			
		||||
            <input placeholder="请输入" v-model="form.workArea" placeholder-style="color: #999; font-size: 30rpx;"/>
 | 
			
		||||
          </div>
 | 
			
		||||
        </div>
 | 
			
		||||
      </div>
 | 
			
		||||
      <div class="form-item">
 | 
			
		||||
        <div class="form-item__wrapper">
 | 
			
		||||
          <div class="left">
 | 
			
		||||
            <i style="opacity: 0;">*</i>
 | 
			
		||||
            <span>务工时长(月)</span>
 | 
			
		||||
          </div>
 | 
			
		||||
          <div class="right">
 | 
			
		||||
            <input placeholder="请输入" type="number" v-model="form.workingMonths"
 | 
			
		||||
                   placeholder-style="color: #999; font-size: 30rpx;"/>
 | 
			
		||||
          </div>
 | 
			
		||||
        </div>
 | 
			
		||||
      </div>
 | 
			
		||||
    </div>
 | 
			
		||||
    <div class="form-group">
 | 
			
		||||
      <div class="form-item">
 | 
			
		||||
        <div class="form-item__wrapper">
 | 
			
		||||
          <div class="left">
 | 
			
		||||
            <i>*</i>
 | 
			
		||||
            <span>是否参加医保</span>
 | 
			
		||||
          </div>
 | 
			
		||||
          <div class="right">
 | 
			
		||||
            <u-radio-group v-model="form.medicalInsurance">
 | 
			
		||||
              <u-radio :name="item.dictValue" v-for="(item, index) in $dict.getDict('fpYesOrNo')" :key="index">
 | 
			
		||||
                {{ item.dictName }}
 | 
			
		||||
              </u-radio>
 | 
			
		||||
            </u-radio-group>
 | 
			
		||||
          </div>
 | 
			
		||||
        </div>
 | 
			
		||||
      </div>
 | 
			
		||||
      <div class="form-item">
 | 
			
		||||
        <div class="form-item__wrapper">
 | 
			
		||||
          <div class="left">
 | 
			
		||||
            <i>*</i>
 | 
			
		||||
            <span>是否参加大病保险</span>
 | 
			
		||||
          </div>
 | 
			
		||||
          <div class="right">
 | 
			
		||||
            <u-radio-group v-model="form.sicknessInsurance">
 | 
			
		||||
              <u-radio :name="item.dictValue" v-for="(item, index) in $dict.getDict('fpYesOrNo')" :key="index">
 | 
			
		||||
                {{ item.dictName }}
 | 
			
		||||
              </u-radio>
 | 
			
		||||
            </u-radio-group>
 | 
			
		||||
          </div>
 | 
			
		||||
        </div>
 | 
			
		||||
      </div>
 | 
			
		||||
      <div class="form-item">
 | 
			
		||||
        <div class="form-item__wrapper">
 | 
			
		||||
          <div class="left">
 | 
			
		||||
            <i>*</i>
 | 
			
		||||
            <span>是否参加养老保险</span>
 | 
			
		||||
          </div>
 | 
			
		||||
          <div class="right">
 | 
			
		||||
            <u-radio-group v-model="form.endowmentInsurance">
 | 
			
		||||
              <u-radio :name="item.dictValue" v-for="(item, index) in $dict.getDict('fpYesOrNo')" :key="index">
 | 
			
		||||
                {{ item.dictName }}
 | 
			
		||||
              </u-radio>
 | 
			
		||||
            </u-radio-group>
 | 
			
		||||
          </div>
 | 
			
		||||
        </div>
 | 
			
		||||
      </div>
 | 
			
		||||
      <div class="form-item">
 | 
			
		||||
        <div class="form-item__wrapper">
 | 
			
		||||
          <div class="left">
 | 
			
		||||
            <i>*</i>
 | 
			
		||||
            <span>是否享受最低生活保障</span>
 | 
			
		||||
          </div>
 | 
			
		||||
          <div class="right">
 | 
			
		||||
            <u-radio-group v-model="form.subsistenceAllowance">
 | 
			
		||||
              <u-radio :name="item.dictValue" v-for="(item, index) in $dict.getDict('fpYesOrNo')" :key="index">
 | 
			
		||||
                {{ item.dictName }}
 | 
			
		||||
              </u-radio>
 | 
			
		||||
            </u-radio-group>
 | 
			
		||||
          </div>
 | 
			
		||||
        </div>
 | 
			
		||||
      </div>
 | 
			
		||||
      <div class="form-item">
 | 
			
		||||
        <div class="form-item__wrapper">
 | 
			
		||||
          <div class="left">
 | 
			
		||||
            <i>*</i>
 | 
			
		||||
            <span>是否特困供养</span>
 | 
			
		||||
          </div>
 | 
			
		||||
          <div class="right">
 | 
			
		||||
            <u-radio-group v-model="form.destitute">
 | 
			
		||||
              <u-radio :name="item.dictValue" v-for="(item, index) in $dict.getDict('fpYesOrNo')" :key="index">
 | 
			
		||||
                {{ item.dictName }}
 | 
			
		||||
              </u-radio>
 | 
			
		||||
            </u-radio-group>
 | 
			
		||||
          </div>
 | 
			
		||||
        </div>
 | 
			
		||||
      </div>
 | 
			
		||||
    </div>
 | 
			
		||||
    <div class="btn" @click="submit">提交</div>
 | 
			
		||||
  </div>
 | 
			
		||||
</template>
 | 
			
		||||
 | 
			
		||||
<script>
 | 
			
		||||
 | 
			
		||||
export default {
 | 
			
		||||
  data() {
 | 
			
		||||
    return {
 | 
			
		||||
      form: {
 | 
			
		||||
        destitute: '',
 | 
			
		||||
        education: '',
 | 
			
		||||
        endowmentInsurance: '',
 | 
			
		||||
        health: '',
 | 
			
		||||
        idNumber: '',
 | 
			
		||||
        laborSkills: '',
 | 
			
		||||
        medicalInsurance: '',
 | 
			
		||||
        name: '',
 | 
			
		||||
        nation: '',
 | 
			
		||||
        politicalOutlook: '',
 | 
			
		||||
        relationship: '',
 | 
			
		||||
        relocation: '',
 | 
			
		||||
        sex: '',
 | 
			
		||||
        sicknessInsurance: '',
 | 
			
		||||
        studentsInSchool: '',
 | 
			
		||||
        subsistenceAllowance: '',
 | 
			
		||||
        workArea: '',
 | 
			
		||||
        workingMonths: ''
 | 
			
		||||
      },
 | 
			
		||||
      id: '',
 | 
			
		||||
      info: {},
 | 
			
		||||
      isEdit: false,
 | 
			
		||||
      index: ''
 | 
			
		||||
    }
 | 
			
		||||
  },
 | 
			
		||||
 | 
			
		||||
  onLoad(query) {
 | 
			
		||||
    uni.showLoading()
 | 
			
		||||
    this.id = query.id
 | 
			
		||||
    this.$dict.load(['fpRelationship', 'sex', 'fpNation', 'fpHealth', 'fpEducation', 'fpYesOrNo', 'fpLaborSkills', 'fpPoliticalOutlook',
 | 
			
		||||
      'fpRelationship', 'fpStudentsInSchool', 'fpFnancialAssistance', 'fpHealthAssistance', 'fpHousingSecurity']).then(() => {
 | 
			
		||||
      this.getInfo(query.id)
 | 
			
		||||
    })
 | 
			
		||||
 | 
			
		||||
    if (query.index > -1) {
 | 
			
		||||
      this.isEdit = true
 | 
			
		||||
      this.index = Number(query.index)
 | 
			
		||||
    }
 | 
			
		||||
  },
 | 
			
		||||
 | 
			
		||||
  methods: {
 | 
			
		||||
    getInfo(id) {
 | 
			
		||||
      this.$http.post(`/app/apppreventionreturntopoverty/queryDetailById?id=${id}`).then(res => {
 | 
			
		||||
        if (res.code === 0) {
 | 
			
		||||
          if (this.isEdit) {
 | 
			
		||||
            this.form = {
 | 
			
		||||
              ...res.data.familyList[this.index]
 | 
			
		||||
            }
 | 
			
		||||
          }
 | 
			
		||||
          this.info = res.data
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        uni.hideLoading()
 | 
			
		||||
      })
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    rules() {
 | 
			
		||||
      return {
 | 
			
		||||
        relationship: '请选择与户主关系',
 | 
			
		||||
        name: '请输入姓名',
 | 
			
		||||
        idNumber: '请输入身份证号',
 | 
			
		||||
        sex: '请选择性别',
 | 
			
		||||
        studentsInSchool: '请选择在校情况',
 | 
			
		||||
        health: '请选择健康状况',
 | 
			
		||||
        medicalInsurance: '请选择是否参加医保',
 | 
			
		||||
        sicknessInsurance: '请选择是否参加大病保险',
 | 
			
		||||
        endowmentInsurance: '请选择是否参加养老保险',
 | 
			
		||||
        subsistenceAllowance: '请选择是否享受最低生活保障',
 | 
			
		||||
        destitute: '请选择是否特困供养',
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    submit() {
 | 
			
		||||
      const rules = this.rules()
 | 
			
		||||
 | 
			
		||||
      for (let v of Object.keys(rules)) {
 | 
			
		||||
        if (!this.form[v]) {
 | 
			
		||||
          return this.$u.toast(rules[v])
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      uni.showLoading()
 | 
			
		||||
      let familyList = this.info.familyList
 | 
			
		||||
      if (this.isEdit) {
 | 
			
		||||
        familyList[this.index] = this.form
 | 
			
		||||
      } else {
 | 
			
		||||
        familyList.push(this.form)
 | 
			
		||||
      }
 | 
			
		||||
      this.$http.post('/app/apppreventionreturntopoverty/addOrUpdate', {
 | 
			
		||||
        ...this.info,
 | 
			
		||||
        familyList,
 | 
			
		||||
        id: this.id
 | 
			
		||||
      }).then(res => {
 | 
			
		||||
        if (res.code === 0) {
 | 
			
		||||
          this.$u.toast(this.isEdit ? '编辑成功' : '提交成功')
 | 
			
		||||
          uni.$emit('reload')
 | 
			
		||||
          uni.navigateBack({
 | 
			
		||||
            delta: 1
 | 
			
		||||
          })
 | 
			
		||||
        }
 | 
			
		||||
        uni.hideLoading()
 | 
			
		||||
      })
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
</script>
 | 
			
		||||
 | 
			
		||||
<style lang="scss">
 | 
			
		||||
.add {
 | 
			
		||||
  padding-bottom: 120px;
 | 
			
		||||
 | 
			
		||||
  ::v-deep .u-radio {
 | 
			
		||||
    &:last-child {
 | 
			
		||||
      .u-radio__label {
 | 
			
		||||
        margin-right: 0;
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  & > div {
 | 
			
		||||
    margin-bottom: 16px;
 | 
			
		||||
    background: #fff;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  .form-group {
 | 
			
		||||
    .form-item {
 | 
			
		||||
      padding-left: 32px;
 | 
			
		||||
 | 
			
		||||
      .form-item__wrapper {
 | 
			
		||||
        display: flex;
 | 
			
		||||
        align-items: center;
 | 
			
		||||
        justify-content: space-between;
 | 
			
		||||
        height: 112px;
 | 
			
		||||
        border-bottom: 1px solid #E4E5E6;
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      .right {
 | 
			
		||||
        height: 112px;
 | 
			
		||||
        line-height: 112px;
 | 
			
		||||
        padding-right: 32px;
 | 
			
		||||
 | 
			
		||||
        span {
 | 
			
		||||
          font-size: 30px;
 | 
			
		||||
          color: #999999;
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      input {
 | 
			
		||||
        height: 100%;
 | 
			
		||||
        text-align: right;
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      .left {
 | 
			
		||||
        display: flex;
 | 
			
		||||
        align-items: center;
 | 
			
		||||
 | 
			
		||||
        span {
 | 
			
		||||
          color: #333333;
 | 
			
		||||
          font-size: 32px;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        i {
 | 
			
		||||
          margin-right: 4px;
 | 
			
		||||
          font-style: normal;
 | 
			
		||||
          color: #FF4466;
 | 
			
		||||
          font-size: 32px;
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      &:last-child {
 | 
			
		||||
        .form-item__wrapper {
 | 
			
		||||
          border: none;
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  .form-item__imgs {
 | 
			
		||||
    padding: 32px;
 | 
			
		||||
 | 
			
		||||
    .form-item__title {
 | 
			
		||||
      display: flex;
 | 
			
		||||
      align-items: center;
 | 
			
		||||
      margin-bottom: 34px;
 | 
			
		||||
 | 
			
		||||
      h2 {
 | 
			
		||||
        color: #333333;
 | 
			
		||||
        font-weight: normal;
 | 
			
		||||
        font-size: 32px;
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      i {
 | 
			
		||||
        color: #999999;
 | 
			
		||||
        font-size: 28px;
 | 
			
		||||
        font-style: normal;
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    textarea {
 | 
			
		||||
      width: 100%;
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  .form-type {
 | 
			
		||||
    display: flex;
 | 
			
		||||
    align-items: center;
 | 
			
		||||
    justify-content: space-between;
 | 
			
		||||
    height: 112px;
 | 
			
		||||
    padding: 0 32px;
 | 
			
		||||
 | 
			
		||||
    h2 {
 | 
			
		||||
      font-weight: normal;
 | 
			
		||||
      color: #333333;
 | 
			
		||||
      font-size: 32px;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    span {
 | 
			
		||||
      color: #999999;
 | 
			
		||||
      font-size: 28px;
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  .btn {
 | 
			
		||||
    position: fixed;
 | 
			
		||||
    left: 0;
 | 
			
		||||
    bottom: 0;
 | 
			
		||||
    z-index: 11;
 | 
			
		||||
    width: 100%;
 | 
			
		||||
    height: 112px;
 | 
			
		||||
    line-height: 112px;
 | 
			
		||||
    margin: 0;
 | 
			
		||||
    text-align: center;
 | 
			
		||||
    color: #FFFFFF;
 | 
			
		||||
    font-size: 32px;
 | 
			
		||||
    background: #3192F4;
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
</style>
 | 
			
		||||
@@ -1,155 +0,0 @@
 | 
			
		||||
<template>
 | 
			
		||||
  <div class="form">
 | 
			
		||||
    <div class="form-item form-item__textarea">
 | 
			
		||||
      <div class="form-item__title">
 | 
			
		||||
        <em>*</em>
 | 
			
		||||
        <h2>帮扶内容</h2>
 | 
			
		||||
      </div>
 | 
			
		||||
      <textarea :maxlength="500" v-model="detail" placeholder="请输入帮扶内容"></textarea>
 | 
			
		||||
    </div>
 | 
			
		||||
    <div class="form-item form-item__imgs">
 | 
			
		||||
      <div class="form-item__title">
 | 
			
		||||
        <h2>图片</h2>
 | 
			
		||||
        <i>(最多9张)</i>
 | 
			
		||||
      </div>
 | 
			
		||||
      <div>
 | 
			
		||||
        <AiUploader :limit="9" multiple :def.sync="picture"></AiUploader>
 | 
			
		||||
      </div>
 | 
			
		||||
    </div>
 | 
			
		||||
    <div class="btn" @click="submit">提交</div>
 | 
			
		||||
  </div>
 | 
			
		||||
</template>
 | 
			
		||||
 | 
			
		||||
<script>
 | 
			
		||||
 | 
			
		||||
export default {
 | 
			
		||||
  data() {
 | 
			
		||||
    return {
 | 
			
		||||
      detail: '',
 | 
			
		||||
      pid: '',
 | 
			
		||||
      id: '',
 | 
			
		||||
      picture: []
 | 
			
		||||
    }
 | 
			
		||||
  },
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
  onLoad(query) {
 | 
			
		||||
    if (query.id) {
 | 
			
		||||
      this.getInfo(query.id)
 | 
			
		||||
      this.id = query.id
 | 
			
		||||
    }
 | 
			
		||||
    this.pid = query.pid
 | 
			
		||||
  },
 | 
			
		||||
 | 
			
		||||
  methods: {
 | 
			
		||||
    getInfo(id) {
 | 
			
		||||
      this.$http.post(`/app/apppreventionreturntopovertylog/queryDetailById?id=${id}`).then(res => {
 | 
			
		||||
        if (res.code === 0) {
 | 
			
		||||
          this.detail = res.data.detail
 | 
			
		||||
          this.picture = JSON.parse(res.data.picture)
 | 
			
		||||
        }
 | 
			
		||||
      })
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    submit() {
 | 
			
		||||
      if (!this.detail) {
 | 
			
		||||
        return this.$u.toast('请输入帮扶内容')
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      uni.showLoading()
 | 
			
		||||
      this.$http.post('/app/apppreventionreturntopovertylog/addOrUpdate', {
 | 
			
		||||
        detail: this.detail,
 | 
			
		||||
        picture: JSON.stringify(this.picture),
 | 
			
		||||
        pid: this.pid,
 | 
			
		||||
        id: this.id || ''
 | 
			
		||||
      }).then(res => {
 | 
			
		||||
        if (res.code === 0) {
 | 
			
		||||
          this.$u.toast(this.isEdit ? '保存成功' : '提交成功')
 | 
			
		||||
          uni.$emit('reload')
 | 
			
		||||
          uni.navigateBack({
 | 
			
		||||
            delta: 1
 | 
			
		||||
          })
 | 
			
		||||
        }
 | 
			
		||||
        uni.hideLoading()
 | 
			
		||||
      })
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
</script>
 | 
			
		||||
 | 
			
		||||
<style lang="scss">
 | 
			
		||||
.form {
 | 
			
		||||
  padding-bottom: 120px;
 | 
			
		||||
 | 
			
		||||
  div {
 | 
			
		||||
    margin-bottom: 16px;
 | 
			
		||||
    background: #fff;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  .form-item {
 | 
			
		||||
    padding: 32px;
 | 
			
		||||
 | 
			
		||||
    .form-item__title {
 | 
			
		||||
      display: flex;
 | 
			
		||||
      align-items: center;
 | 
			
		||||
      margin-bottom: 34px;
 | 
			
		||||
 | 
			
		||||
      em {
 | 
			
		||||
        margin-right: 4px;
 | 
			
		||||
        font-style: normal;
 | 
			
		||||
        color: #FF4466;
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      h2 {
 | 
			
		||||
        color: #333333;
 | 
			
		||||
        font-weight: normal;
 | 
			
		||||
        font-size: 32px;
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      i {
 | 
			
		||||
        color: #999999;
 | 
			
		||||
        font-size: 28px;
 | 
			
		||||
        font-style: normal;
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    textarea {
 | 
			
		||||
      width: 100%;
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  .form-type {
 | 
			
		||||
    display: flex;
 | 
			
		||||
    align-items: center;
 | 
			
		||||
    justify-content: space-between;
 | 
			
		||||
    height: 112px;
 | 
			
		||||
    padding: 0 32px;
 | 
			
		||||
 | 
			
		||||
    h2 {
 | 
			
		||||
      font-weight: normal;
 | 
			
		||||
      color: #333333;
 | 
			
		||||
      font-size: 32px;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    span {
 | 
			
		||||
      color: #999999;
 | 
			
		||||
      font-size: 28px;
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  .btn {
 | 
			
		||||
    position: fixed;
 | 
			
		||||
    left: 0;
 | 
			
		||||
    bottom: 0;
 | 
			
		||||
    z-index: 11;
 | 
			
		||||
    width: 100%;
 | 
			
		||||
    height: 112px;
 | 
			
		||||
    line-height: 112px;
 | 
			
		||||
    margin: 0;
 | 
			
		||||
    text-align: center;
 | 
			
		||||
    color: #FFFFFF;
 | 
			
		||||
    font-size: 32px;
 | 
			
		||||
    background: #3192F4;
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
</style>
 | 
			
		||||
@@ -1,538 +0,0 @@
 | 
			
		||||
<template>
 | 
			
		||||
  <div class="detail" v-if="pageShow" :class="[isFrom ? 'active' : '']">
 | 
			
		||||
    <div class="tab" v-if="!isFrom">
 | 
			
		||||
      <span @click="changeTab(0)" :class="[currIndex === 0 ? 'active' : '']">基本信息</span>
 | 
			
		||||
      <span @click="changeTab(1)" :class="[currIndex === 1 ? 'active' : '']">帮扶日志</span>
 | 
			
		||||
    </div>
 | 
			
		||||
    <div class="tab-content">
 | 
			
		||||
      <div class="tab-content__item" v-show="currIndex === 0">
 | 
			
		||||
        <div class="item-wrapper">
 | 
			
		||||
          <div class="item-header item-avatar">
 | 
			
		||||
            <div class="left">
 | 
			
		||||
              <image src="/static/images/avatar.png"/>
 | 
			
		||||
              <div class="left-right">
 | 
			
		||||
                <h2>{{ info.name }}</h2>
 | 
			
		||||
                <p>{{ info.phone }}</p>
 | 
			
		||||
              </div>
 | 
			
		||||
            </div>
 | 
			
		||||
            <span @click="linkTo('./MonitorAdd?id=' + info.id)">编辑</span>
 | 
			
		||||
          </div>
 | 
			
		||||
          <div class="item-info">
 | 
			
		||||
            <label>行政区划</label>
 | 
			
		||||
            <span>{{ info.addressArea }}</span>
 | 
			
		||||
          </div>
 | 
			
		||||
          <div class="item-info">
 | 
			
		||||
            <label>家庭地址</label>
 | 
			
		||||
            <span>{{ info.address }}</span>
 | 
			
		||||
          </div>
 | 
			
		||||
          <div class="item-info">
 | 
			
		||||
            <label>是否扶贫搬迁</label>
 | 
			
		||||
            <span>{{ $dict.getLabel('fpYesOrNo', info.move) }}</span>
 | 
			
		||||
          </div>
 | 
			
		||||
          <div class="item-info" v-if="info.move === '01'">
 | 
			
		||||
            <label>安置地区</label>
 | 
			
		||||
            <span>{{ info.placeArea }}</span>
 | 
			
		||||
          </div>
 | 
			
		||||
          <div class="item-info" v-if="info.move === '01'">
 | 
			
		||||
            <label>安置详细地址</label>
 | 
			
		||||
            <span>{{ info.place }}</span>
 | 
			
		||||
          </div>
 | 
			
		||||
          <div class="item-info">
 | 
			
		||||
            <label>纳入监测时间</label>
 | 
			
		||||
            <span>{{ info.createTime }}</span>
 | 
			
		||||
          </div>
 | 
			
		||||
          <div class="item-info">
 | 
			
		||||
            <label>监测员</label>
 | 
			
		||||
            <span>{{ info.monitoringContact || '-' }}</span>
 | 
			
		||||
          </div>
 | 
			
		||||
          <div class="item-info">
 | 
			
		||||
            <label>监测员电话</label>
 | 
			
		||||
            <span style="color: #3D94FB;"
 | 
			
		||||
                  @click="call(info.monitoringContactPhone)">{{ info.monitoringContactPhone || '-' }}</span>
 | 
			
		||||
          </div>
 | 
			
		||||
        </div>
 | 
			
		||||
        <div class="item-wrapper">
 | 
			
		||||
          <div class="item-header">
 | 
			
		||||
            <div class="left">
 | 
			
		||||
              <h2>家庭成员</h2>
 | 
			
		||||
              <i :style="{color: info.familyList.length ? '#2EA222' : '#FF4466'}">({{
 | 
			
		||||
                  info.familyList.length ? '已填写' : '未填写'
 | 
			
		||||
                }})</i>
 | 
			
		||||
            </div>
 | 
			
		||||
            <span @click="linkTo('./MonitorFamilyMember?id=' + info.id)">编辑</span>
 | 
			
		||||
          </div>
 | 
			
		||||
          <div class="item-info">
 | 
			
		||||
            <label>未参加医疗参保</label>
 | 
			
		||||
            <span>{{ info.ylbxCount }}人</span>
 | 
			
		||||
          </div>
 | 
			
		||||
          <div class="item-info">
 | 
			
		||||
            <label>未参加养老保险</label>
 | 
			
		||||
            <span>{{ info.ylCount }}人</span>
 | 
			
		||||
          </div>
 | 
			
		||||
        </div>
 | 
			
		||||
        <div class="item-wrapper">
 | 
			
		||||
          <div class="item-header">
 | 
			
		||||
            <div class="left">
 | 
			
		||||
              <h2>家庭情况</h2>
 | 
			
		||||
              <i :style="{color: isFamilySituation ? '#2EA222' : '#FF4466'}">({{
 | 
			
		||||
                  isFamilySituation ? '已填写' : '未填写'
 | 
			
		||||
                }})</i>
 | 
			
		||||
            </div>
 | 
			
		||||
            <span @click="linkTo('./MonitorFamilySituation?id=' + info.id)">编辑</span>
 | 
			
		||||
          </div>
 | 
			
		||||
          <div class="item-info">
 | 
			
		||||
            <label>是否危房</label>
 | 
			
		||||
            <span>{{ $dict.getLabel('fpYesOrNo', info.dilapidatedHouse) || '-' }}</span>
 | 
			
		||||
          </div>
 | 
			
		||||
          <div class="item-info">
 | 
			
		||||
            <label>饮用水安全问题</label>
 | 
			
		||||
            <span>{{ $dict.getLabel('fpYesOrNo', info.drinkingWaterSafety) || '-' }}</span>
 | 
			
		||||
          </div>
 | 
			
		||||
        </div>
 | 
			
		||||
        <div class="item-wrapper">
 | 
			
		||||
          <div class="item-header">
 | 
			
		||||
            <div class="left">
 | 
			
		||||
              <h2>收支情况</h2>
 | 
			
		||||
              <i :style="{color: isIncome ? '#2EA222' : '#FF4466'}">({{ isIncome ? '已填写' : '未填写' }})</i>
 | 
			
		||||
            </div>
 | 
			
		||||
            <span @click="linkTo('./MonitorIncome?id=' + info.id)">编辑</span>
 | 
			
		||||
          </div>
 | 
			
		||||
          <div class="item-info">
 | 
			
		||||
            <label>家庭纯收入</label>
 | 
			
		||||
            <span>{{ info.income6 }}元</span>
 | 
			
		||||
          </div>
 | 
			
		||||
          <div class="item-info">
 | 
			
		||||
            <label>家庭人均纯收入</label>
 | 
			
		||||
            <span>{{ info.income7 }}元</span>
 | 
			
		||||
          </div>
 | 
			
		||||
        </div>
 | 
			
		||||
        <div class="item-wrapper">
 | 
			
		||||
          <div class="item-header">
 | 
			
		||||
            <div class="left">
 | 
			
		||||
              <h2>风险解除</h2>
 | 
			
		||||
              <i :style="{color: isPoorStatus ? '#2EA222' : '#FF4466'}">({{ isPoorStatus ? '已填写' : '未填写' }})</i>
 | 
			
		||||
            </div>
 | 
			
		||||
            <span @click="linkTo('./MonitorPoorStatus?id=' + info.id)">编辑</span>
 | 
			
		||||
          </div>
 | 
			
		||||
          <div class="item-info">
 | 
			
		||||
            <label>是否消除风险</label>
 | 
			
		||||
            <span>{{ info.riskEliminationMethod ? '是' : '-' }}</span>
 | 
			
		||||
          </div>
 | 
			
		||||
        </div>
 | 
			
		||||
      </div>
 | 
			
		||||
      <div class="tab-content__item" v-show="currIndex === 1">
 | 
			
		||||
        <div class="log-item" v-for="(item, index) in list" :key="index">
 | 
			
		||||
          <div class="log-item__wrapper">
 | 
			
		||||
            <div class="log-item__user">
 | 
			
		||||
              <div class="left">
 | 
			
		||||
                <div class="user">
 | 
			
		||||
                  <span>{{ item.createUserName.substr(item.createUserName.length - 2) }}</span>
 | 
			
		||||
                </div>
 | 
			
		||||
                <h2>{{ item.createUserName }}</h2>
 | 
			
		||||
              </div>
 | 
			
		||||
              <div class="right">
 | 
			
		||||
                <span>{{ item.createTime }}</span>
 | 
			
		||||
                <image src="/static/images/more.png" @click="edit(item.id)"/>
 | 
			
		||||
              </div>
 | 
			
		||||
            </div>
 | 
			
		||||
            <p>{{ item.detail }}</p>
 | 
			
		||||
            <div class="imgs">
 | 
			
		||||
              <image :src="img.url" @click="prevImg(item.imgs, img.url)" v-for="(img, index) in item.imgs"
 | 
			
		||||
                     :key="index"/>
 | 
			
		||||
            </div>
 | 
			
		||||
          </div>
 | 
			
		||||
        </div>
 | 
			
		||||
        <AiEmpty v-if="!list.length" style="padding-bottom: 20px;"></AiEmpty>
 | 
			
		||||
      </div>
 | 
			
		||||
    </div>
 | 
			
		||||
    <AiFixedBtn v-if="currIndex === 1">
 | 
			
		||||
      <div class="addBtn iconfont iconfont-iconfangda" @tap="toAddLog"></div>
 | 
			
		||||
    </AiFixedBtn>
 | 
			
		||||
  </div>
 | 
			
		||||
</template>
 | 
			
		||||
 | 
			
		||||
<script>
 | 
			
		||||
 | 
			
		||||
export default {
 | 
			
		||||
  name: 'detail',
 | 
			
		||||
 | 
			
		||||
  data() {
 | 
			
		||||
    return {
 | 
			
		||||
      info: {},
 | 
			
		||||
      pageShow: false,
 | 
			
		||||
      currIndex: 0,
 | 
			
		||||
      list: [],
 | 
			
		||||
      isFrom: false
 | 
			
		||||
    }
 | 
			
		||||
  },
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
  computed: {
 | 
			
		||||
    isIncome() {
 | 
			
		||||
      if (!this.info.id) {
 | 
			
		||||
        return false
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      return this.info.income6 > 0 && this.info.income7 > 0;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    isPoorStatus() {
 | 
			
		||||
      if (!this.info.id) {
 | 
			
		||||
        return false
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      return !!this.info.riskEliminationMethod;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    isFamilySituation() {
 | 
			
		||||
      if (!this.info.id) {
 | 
			
		||||
        return false
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      return !!(this.info.drinkingWaterSafety && this.info.dilapidatedHouse);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
  },
 | 
			
		||||
 | 
			
		||||
  onLoad(query) {
 | 
			
		||||
    if (query.isFrom) {
 | 
			
		||||
      this.isFrom = true
 | 
			
		||||
    }
 | 
			
		||||
    uni.showLoading()
 | 
			
		||||
    this.$dict.load(['fpType', 'riskEliminationMethod', 'fpRiskType', 'fpYesOrNo']).then(() => {
 | 
			
		||||
      this.getInfo(query.id)
 | 
			
		||||
    })
 | 
			
		||||
 | 
			
		||||
    this.id = query.id
 | 
			
		||||
    uni.$on('reload', () => {
 | 
			
		||||
      this.getInfo(query.id)
 | 
			
		||||
    })
 | 
			
		||||
  },
 | 
			
		||||
  onShow() {
 | 
			
		||||
    document.title = '风险预警详情'
 | 
			
		||||
  },
 | 
			
		||||
 | 
			
		||||
  methods: {
 | 
			
		||||
    linkTo(url) {
 | 
			
		||||
      uni.navigateTo({url})
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    call(phone) {
 | 
			
		||||
      if (phone) {
 | 
			
		||||
        uni.makePhoneCall({
 | 
			
		||||
          phoneNumber: phone
 | 
			
		||||
        })
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    edit(id) {
 | 
			
		||||
      uni.showActionSheet({
 | 
			
		||||
        itemList: ['编辑', '删除'],
 | 
			
		||||
        success: res => {
 | 
			
		||||
          if (res.tapIndex === 0) {
 | 
			
		||||
            uni.navigateTo({
 | 
			
		||||
              url: `./MonitorAddLog?pid=${this.info.id}&id=${id}`
 | 
			
		||||
            })
 | 
			
		||||
          } else if (res.tapIndex === 1) {
 | 
			
		||||
            this.$confirm('确定删除该数据?').then(() => {
 | 
			
		||||
              uni.showLoading()
 | 
			
		||||
              this.$http.post(`/app/apppreventionreturntopovertylog/delete?ids=${id}`).then(res => {
 | 
			
		||||
                if (res.code === 0) {
 | 
			
		||||
                  this.$u.toast('删除成功')
 | 
			
		||||
                  this.getInfo(this.id)
 | 
			
		||||
                }
 | 
			
		||||
                uni.hideLoading()
 | 
			
		||||
              })
 | 
			
		||||
            }).catch(() => {
 | 
			
		||||
            })
 | 
			
		||||
          }
 | 
			
		||||
        }
 | 
			
		||||
      })
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    prevImg(urls, img) {
 | 
			
		||||
      const imgs = urls.map(v => v.url)
 | 
			
		||||
      uni.previewImage({
 | 
			
		||||
        urls: imgs,
 | 
			
		||||
        current: img
 | 
			
		||||
      })
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    toAddLog() {
 | 
			
		||||
      uni.navigateTo({
 | 
			
		||||
        url: './MonitorAddLog?pid=' + this.info.id
 | 
			
		||||
      })
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    changeTab(index) {
 | 
			
		||||
      this.currIndex = index
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    getInfo(id) {
 | 
			
		||||
      this.$http.post(`/app/apppreventionreturntopoverty/queryDetailById?id=${id}`).then(res => {
 | 
			
		||||
        if (res.code === 0) {
 | 
			
		||||
          this.info = res.data
 | 
			
		||||
 | 
			
		||||
          let ylbxCount = 0
 | 
			
		||||
          let ylCount = 0
 | 
			
		||||
          res.data.familyList.forEach(item => {
 | 
			
		||||
            if (item.medicalInsurance === '02') {
 | 
			
		||||
              ylbxCount = ylbxCount + 1
 | 
			
		||||
            }
 | 
			
		||||
            if (item.endowmentInsurance === '02') {
 | 
			
		||||
              ylCount = ylCount + 1
 | 
			
		||||
            }
 | 
			
		||||
          })
 | 
			
		||||
          this.info.ylbxCount = ylbxCount
 | 
			
		||||
          this.info.ylCount = ylCount
 | 
			
		||||
          this.pageShow = true
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        uni.hideLoading()
 | 
			
		||||
      })
 | 
			
		||||
      this.$http.post(`/app/apppreventionreturntopovertylog/list?pid=${id}&size=1000¤t=1`).then(res => {
 | 
			
		||||
        if (res.code === 0) {
 | 
			
		||||
          this.list = res.data.records.map(item => {
 | 
			
		||||
            return {
 | 
			
		||||
              ...item,
 | 
			
		||||
              imgs: JSON.parse(item.picture)
 | 
			
		||||
            }
 | 
			
		||||
          })
 | 
			
		||||
        }
 | 
			
		||||
      })
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
</script>
 | 
			
		||||
 | 
			
		||||
<style lang="scss">
 | 
			
		||||
.detail {
 | 
			
		||||
  padding-top: 96px;
 | 
			
		||||
  padding-bottom: 60px;
 | 
			
		||||
 | 
			
		||||
  &.active {
 | 
			
		||||
    padding-top: 0;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  .addBtn {
 | 
			
		||||
    width: 96px;
 | 
			
		||||
    height: 96px;
 | 
			
		||||
    flex-shrink: 0;
 | 
			
		||||
    background: $uni-color-primary;
 | 
			
		||||
    box-shadow: 0 4px 8px 0 rgba(0, 0, 0, 0.2);
 | 
			
		||||
    font-size: 48px;
 | 
			
		||||
    color: #fff;
 | 
			
		||||
    border-radius: 50%;
 | 
			
		||||
    justify-content: center;
 | 
			
		||||
    align-items: center;
 | 
			
		||||
    display: flex;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  .tab {
 | 
			
		||||
    display: flex;
 | 
			
		||||
    position: fixed;
 | 
			
		||||
    align-items: center;
 | 
			
		||||
    left: 0;
 | 
			
		||||
    top: 0;
 | 
			
		||||
    z-index: 1;
 | 
			
		||||
    width: 100%;
 | 
			
		||||
    height: 96px;
 | 
			
		||||
    padding: 0 60px;
 | 
			
		||||
    background: #FFFFFF;
 | 
			
		||||
    border-bottom: 1px solid #D4D4D4;
 | 
			
		||||
    box-sizing: border-box;
 | 
			
		||||
 | 
			
		||||
    * {
 | 
			
		||||
      box-sizing: border-box;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    span {
 | 
			
		||||
      position: relative;
 | 
			
		||||
      flex: 1;
 | 
			
		||||
      height: 96px;
 | 
			
		||||
      line-height: 96px;
 | 
			
		||||
      color: #000000;
 | 
			
		||||
      text-align: center;
 | 
			
		||||
      font-size: 32px;
 | 
			
		||||
 | 
			
		||||
      &::after {
 | 
			
		||||
        position: absolute;
 | 
			
		||||
        bottom: 0;
 | 
			
		||||
        left: 50%;
 | 
			
		||||
        width: 192px;
 | 
			
		||||
        height: 6px;
 | 
			
		||||
        background: transparent;
 | 
			
		||||
        transform: translateX(-50%);
 | 
			
		||||
        content: ' ';
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      &.active {
 | 
			
		||||
        color: #1365DD;
 | 
			
		||||
 | 
			
		||||
        &::after {
 | 
			
		||||
          background: #1365DD;
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  .item-wrapper {
 | 
			
		||||
    background: #fff;
 | 
			
		||||
    margin-bottom: 16px;
 | 
			
		||||
    padding: 0 32px 16px;
 | 
			
		||||
 | 
			
		||||
    .item-header {
 | 
			
		||||
      display: flex;
 | 
			
		||||
      align-items: center;
 | 
			
		||||
      justify-content: space-between;
 | 
			
		||||
      height: 96px;
 | 
			
		||||
 | 
			
		||||
      & > span {
 | 
			
		||||
        color: #3975C6;
 | 
			
		||||
        font-size: 32px;
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      .left {
 | 
			
		||||
        display: flex;
 | 
			
		||||
        align-items: center;
 | 
			
		||||
 | 
			
		||||
        h2 {
 | 
			
		||||
          color: #333333;
 | 
			
		||||
          font-size: 32px;
 | 
			
		||||
          font-weight: 500;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        i {
 | 
			
		||||
          font-style: normal;
 | 
			
		||||
          color: #2EA222;
 | 
			
		||||
          font-size: 32px;
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    .item-info {
 | 
			
		||||
      display: flex;
 | 
			
		||||
      justify-content: space-between;
 | 
			
		||||
      padding: 14px 0;
 | 
			
		||||
 | 
			
		||||
      label {
 | 
			
		||||
        color: #999999;
 | 
			
		||||
        font-size: 32px;
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      span {
 | 
			
		||||
        max-width: 496px;
 | 
			
		||||
        text-align: right;
 | 
			
		||||
        color: #333333;
 | 
			
		||||
        font-size: 32px;
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    .item-avatar {
 | 
			
		||||
      height: 192px;
 | 
			
		||||
 | 
			
		||||
      image {
 | 
			
		||||
        width: 112px;
 | 
			
		||||
        height: 112px;
 | 
			
		||||
        margin-right: 24px;
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      .left-right {
 | 
			
		||||
        p {
 | 
			
		||||
          margin-top: 8px;
 | 
			
		||||
          color: #999999;
 | 
			
		||||
          font-size: 28px;
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  .log-item {
 | 
			
		||||
    padding: 0 0 0 32px;
 | 
			
		||||
    background: #fff;
 | 
			
		||||
 | 
			
		||||
    &:first-child {
 | 
			
		||||
      margin-top: 16px;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    &:last-child {
 | 
			
		||||
      .log-item__wrapper {
 | 
			
		||||
        border: none !important;
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    .log-item__wrapper {
 | 
			
		||||
      padding: 32px 32px 32px 0;
 | 
			
		||||
      border-bottom: 1px solid #E4E5E6;
 | 
			
		||||
 | 
			
		||||
      .log-item__user {
 | 
			
		||||
        display: flex;
 | 
			
		||||
        align-items: center;
 | 
			
		||||
        justify-content: space-between;
 | 
			
		||||
 | 
			
		||||
        & > div {
 | 
			
		||||
          display: flex;
 | 
			
		||||
          align-items: center;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        .left {
 | 
			
		||||
          .user, image {
 | 
			
		||||
            width: 80px;
 | 
			
		||||
            height: 80px;
 | 
			
		||||
            line-height: 80px;
 | 
			
		||||
            margin-right: 16px;
 | 
			
		||||
            text-align: center;
 | 
			
		||||
            border-radius: 50%;
 | 
			
		||||
            background: #2266FF;
 | 
			
		||||
 | 
			
		||||
            span {
 | 
			
		||||
              color: #fff;
 | 
			
		||||
              font-size: 28px;
 | 
			
		||||
            }
 | 
			
		||||
          }
 | 
			
		||||
 | 
			
		||||
          h2 {
 | 
			
		||||
            color: #333;
 | 
			
		||||
            font-size: 32px;
 | 
			
		||||
          }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        .right {
 | 
			
		||||
          image {
 | 
			
		||||
            width: 32px;
 | 
			
		||||
            height: 32px;
 | 
			
		||||
          }
 | 
			
		||||
 | 
			
		||||
          span {
 | 
			
		||||
            margin-right: 6px;
 | 
			
		||||
            color: #999999;
 | 
			
		||||
            font-size: 28px;
 | 
			
		||||
          }
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      p {
 | 
			
		||||
        margin: 4px 0 16px 96px;
 | 
			
		||||
        color: #343D65;
 | 
			
		||||
        font-size: 28px;
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      .imgs {
 | 
			
		||||
        margin-left: 96px;
 | 
			
		||||
 | 
			
		||||
        image {
 | 
			
		||||
          width: 136px;
 | 
			
		||||
          height: 136px;
 | 
			
		||||
          margin-right: 8px;
 | 
			
		||||
          margin-bottom: 8px;
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
</style>
 | 
			
		||||
@@ -1,329 +0,0 @@
 | 
			
		||||
<template>
 | 
			
		||||
  <div class="familyMember" v-if="pageShow">
 | 
			
		||||
    <div class="item" v-for="(item, index) in list" :key="index">
 | 
			
		||||
      <div class="item-title">
 | 
			
		||||
        <div class="top">
 | 
			
		||||
          <div class="left">
 | 
			
		||||
            <h2>{{ item.name }}</h2>
 | 
			
		||||
            <span>{{ item.idNumber }}</span>
 | 
			
		||||
          </div>
 | 
			
		||||
          <span>{{ $dict.getLabel('fpRelationship', item.relationship) }}</span>
 | 
			
		||||
        </div>
 | 
			
		||||
        <div class="bottom">
 | 
			
		||||
          <span>{{ $dict.getLabel('sex', item.sex) }}</span>
 | 
			
		||||
          <span>{{ item.age }}岁</span>
 | 
			
		||||
        </div>
 | 
			
		||||
      </div>
 | 
			
		||||
      <div class="item-info" v-if="item.isShow">
 | 
			
		||||
        <div class="item-info__item">
 | 
			
		||||
          <label>民族</label>
 | 
			
		||||
          <span>{{ $dict.getLabel('fpNation', item.nation) }}</span>
 | 
			
		||||
        </div>
 | 
			
		||||
        <div class="item-info__item">
 | 
			
		||||
          <label>政治面貌</label>
 | 
			
		||||
          <span>{{ $dict.getLabel('fpPoliticalOutlook', item.politicalOutlook) }}</span>
 | 
			
		||||
        </div>
 | 
			
		||||
        <div class="item-info__item">
 | 
			
		||||
          <label>文化程度</label>
 | 
			
		||||
          <span>{{ $dict.getLabel('fpEducation', item.education) }}</span>
 | 
			
		||||
        </div>
 | 
			
		||||
        <div class="item-info__item">
 | 
			
		||||
          <label>在校情况</label>
 | 
			
		||||
          <span>{{ $dict.getLabel('fpStudentsInSchool', item.studentsInSchool) }}</span>
 | 
			
		||||
        </div>
 | 
			
		||||
        <div class="item-info__item">
 | 
			
		||||
          <label>健康状况</label>
 | 
			
		||||
          <span>{{ $dict.getLabel('fpHealth', item.health) }}</span>
 | 
			
		||||
        </div>
 | 
			
		||||
        <div class="item-info__item">
 | 
			
		||||
          <label>劳动技能</label>
 | 
			
		||||
          <span>{{ $dict.getLabel('fpLaborSkills', item.laborSkills) }}</span>
 | 
			
		||||
        </div>
 | 
			
		||||
        <div class="item-info__item">
 | 
			
		||||
          <label>务工区域</label>
 | 
			
		||||
          <span>{{ item.workArea }}</span>
 | 
			
		||||
        </div>
 | 
			
		||||
        <div class="item-info__item">
 | 
			
		||||
          <label>务工时间</label>
 | 
			
		||||
          <span>{{ item.workingMonths }}月</span>
 | 
			
		||||
        </div>
 | 
			
		||||
        <div class="item-info__item">
 | 
			
		||||
          <label>是否参加医疗参保</label>
 | 
			
		||||
          <span>{{ $dict.getLabel('fpYesOrNo', item.medicalInsurance) }}</span>
 | 
			
		||||
        </div>
 | 
			
		||||
        <div class="item-info__item">
 | 
			
		||||
          <label>是否参加大病保险</label>
 | 
			
		||||
          <span>{{ $dict.getLabel('fpYesOrNo', item.sicknessInsurance) }}</span>
 | 
			
		||||
        </div>
 | 
			
		||||
        <div class="item-info__item">
 | 
			
		||||
          <label>是否参加养老保险</label>
 | 
			
		||||
          <span>{{ $dict.getLabel('fpYesOrNo', item.endowmentInsurance) }}</span>
 | 
			
		||||
        </div>
 | 
			
		||||
        <div class="item-info__item">
 | 
			
		||||
          <label>是否享受最低生活保障</label>
 | 
			
		||||
          <span>{{ $dict.getLabel('fpYesOrNo', item.subsistenceAllowance) }}</span>
 | 
			
		||||
        </div>
 | 
			
		||||
        <div class="item-info__item">
 | 
			
		||||
          <label>是否特困供养</label>
 | 
			
		||||
          <span>{{ $dict.getLabel('fpYesOrNo', item.destitute) }}</span>
 | 
			
		||||
        </div>
 | 
			
		||||
        <div class="item-info__item">
 | 
			
		||||
        </div>
 | 
			
		||||
      </div>
 | 
			
		||||
      <div class="item-bottom">
 | 
			
		||||
        <span @click="showMore(index)">{{ item.isShow ? '收起详情' : '展开详情' }}</span>
 | 
			
		||||
        <span @click="toEdit(index)">编辑</span>
 | 
			
		||||
        <span @click="remove(index)">删除</span>
 | 
			
		||||
      </div>
 | 
			
		||||
    </div>
 | 
			
		||||
    <AiFixedBtn>
 | 
			
		||||
      <div class="addBtn iconfont iconfont-iconfangda" @tap="toAdd"></div>
 | 
			
		||||
    </AiFixedBtn>
 | 
			
		||||
    <div class="no-more" v-if="!list.length">
 | 
			
		||||
      <image src="/static/images/empty.png"/>
 | 
			
		||||
      <div>
 | 
			
		||||
        <span>您还未添加过家庭成员点击</span>
 | 
			
		||||
        <i>新增按钮</i>
 | 
			
		||||
        <span>试试吧~</span>
 | 
			
		||||
      </div>
 | 
			
		||||
    </div>
 | 
			
		||||
  </div>
 | 
			
		||||
</template>
 | 
			
		||||
 | 
			
		||||
<script>
 | 
			
		||||
 | 
			
		||||
export default {
 | 
			
		||||
  data() {
 | 
			
		||||
    return {
 | 
			
		||||
      list: [],
 | 
			
		||||
      id: '',
 | 
			
		||||
      info: {},
 | 
			
		||||
      pageShow: false
 | 
			
		||||
    }
 | 
			
		||||
  },
 | 
			
		||||
 | 
			
		||||
  onLoad(query) {
 | 
			
		||||
    uni.showLoading()
 | 
			
		||||
    this.id = query.id
 | 
			
		||||
    this.$dict.load(['fpRelationship', 'sex', 'fpNation', 'fpHealth', 'fpEducation', 'fpYesOrNo', 'fpLaborSkills', 'fpPoliticalOutlook',
 | 
			
		||||
      'fpRelationship', 'fpStudentsInSchool', 'fpFnancialAssistance', 'fpHealthAssistance', 'fpHousingSecurity']).then(() => {
 | 
			
		||||
      this.getInfo(query.id)
 | 
			
		||||
    })
 | 
			
		||||
 | 
			
		||||
    uni.$on('reload', () => {
 | 
			
		||||
      this.getInfo(query.id)
 | 
			
		||||
    })
 | 
			
		||||
  },
 | 
			
		||||
 | 
			
		||||
  methods: {
 | 
			
		||||
    toAdd() {
 | 
			
		||||
      uni.navigateTo({
 | 
			
		||||
        url: './MonitorAddFamilyMember?id=' + this.id
 | 
			
		||||
      })
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    toEdit(index) {
 | 
			
		||||
      this.$confirm('确定编辑该数据?').then(() => {
 | 
			
		||||
        uni.navigateTo({
 | 
			
		||||
          url: `./MonitorAddFamilyMember?id=${this.id}&index=${index}`
 | 
			
		||||
        })
 | 
			
		||||
      }).catch(() => {
 | 
			
		||||
      })
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    remove(index) {
 | 
			
		||||
      this.$confirm('确定删除该数据?').then(() => {
 | 
			
		||||
        let familyList = JSON.parse(JSON.stringify(this.list))
 | 
			
		||||
        familyList.splice(index, 1)
 | 
			
		||||
        uni.showLoading()
 | 
			
		||||
        this.$http.post('/app/apppreventionreturntopoverty/addOrUpdate', {
 | 
			
		||||
          ...this.info,
 | 
			
		||||
          familyList,
 | 
			
		||||
          id: this.id
 | 
			
		||||
        }).then(res => {
 | 
			
		||||
          if (res.code === 0) {
 | 
			
		||||
            this.$u.toast('删除成功')
 | 
			
		||||
            this.getInfo(this.id)
 | 
			
		||||
          }
 | 
			
		||||
          uni.hideLoading()
 | 
			
		||||
        })
 | 
			
		||||
      }).catch(() => {
 | 
			
		||||
      })
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    showMore(index) {
 | 
			
		||||
      this.list[index].isShow = !this.list[index].isShow
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    getInfo(id) {
 | 
			
		||||
      this.$http.post(`/app/apppreventionreturntopoverty/queryDetailById?id=${id}`).then(res => {
 | 
			
		||||
        if (res.code === 0) {
 | 
			
		||||
          this.info = res.data
 | 
			
		||||
          this.list = res.data.familyList.map(item => {
 | 
			
		||||
            return {
 | 
			
		||||
              ...item,
 | 
			
		||||
              isShow: false,
 | 
			
		||||
              age: this.$calcAge(item.idNumber)
 | 
			
		||||
            }
 | 
			
		||||
          })
 | 
			
		||||
 | 
			
		||||
          this.pageShow = true
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        uni.hideLoading()
 | 
			
		||||
      })
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
</script>
 | 
			
		||||
 | 
			
		||||
<style lang="scss">
 | 
			
		||||
.familyMember {
 | 
			
		||||
  padding: 32px 0;
 | 
			
		||||
 | 
			
		||||
  .no-more {
 | 
			
		||||
    padding-top: 160px;
 | 
			
		||||
    text-align: center;
 | 
			
		||||
 | 
			
		||||
    image {
 | 
			
		||||
      width: 282px;
 | 
			
		||||
      height: 304px;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    div {
 | 
			
		||||
      width: 280px;
 | 
			
		||||
      margin: 0 auto;
 | 
			
		||||
 | 
			
		||||
      span {
 | 
			
		||||
        color: #999999;
 | 
			
		||||
        font-size: 28px;
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      i {
 | 
			
		||||
        font-style: normal;
 | 
			
		||||
        color: #467DFE;
 | 
			
		||||
        font-size: 28px;
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  .addBtn {
 | 
			
		||||
    width: 96px;
 | 
			
		||||
    height: 96px;
 | 
			
		||||
    flex-shrink: 0;
 | 
			
		||||
    background: $uni-color-primary;
 | 
			
		||||
    box-shadow: 0 4px 8px 0 rgba(0, 0, 0, 0.2);
 | 
			
		||||
    font-size: 48px;
 | 
			
		||||
    color: #fff;
 | 
			
		||||
    border-radius: 50%;
 | 
			
		||||
    justify-content: center;
 | 
			
		||||
    align-items: center;
 | 
			
		||||
    display: flex;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  .item {
 | 
			
		||||
    width: 686px;
 | 
			
		||||
    margin: 0 auto 32px;
 | 
			
		||||
    border-radius: 16px;
 | 
			
		||||
    overflow: hidden;
 | 
			
		||||
    background: #fff;
 | 
			
		||||
 | 
			
		||||
    .item-bottom {
 | 
			
		||||
      display: flex;
 | 
			
		||||
      align-items: center;
 | 
			
		||||
      height: 94px;
 | 
			
		||||
 | 
			
		||||
      span {
 | 
			
		||||
        flex: 1;
 | 
			
		||||
        height: 100%;
 | 
			
		||||
        line-height: 96px;
 | 
			
		||||
        color: #3975C6;
 | 
			
		||||
        font-size: 26px;
 | 
			
		||||
        text-align: center;
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    .item-title {
 | 
			
		||||
      padding: 32px;
 | 
			
		||||
      background: #FFFFFF;
 | 
			
		||||
      border-bottom: 1px solid #DDDDDD;
 | 
			
		||||
 | 
			
		||||
      .top {
 | 
			
		||||
        display: flex;
 | 
			
		||||
        align-items: center;
 | 
			
		||||
        justify-content: space-between;
 | 
			
		||||
        margin-bottom: 8px;
 | 
			
		||||
 | 
			
		||||
        .left {
 | 
			
		||||
          display: flex;
 | 
			
		||||
          align-items: center;
 | 
			
		||||
 | 
			
		||||
          h2 {
 | 
			
		||||
            margin-right: 32px;
 | 
			
		||||
            color: #333333;
 | 
			
		||||
            font-size: 40px;
 | 
			
		||||
            font-weight: 500;
 | 
			
		||||
          }
 | 
			
		||||
 | 
			
		||||
          span {
 | 
			
		||||
            color: #999999;
 | 
			
		||||
            font-size: 28px;
 | 
			
		||||
          }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        & > span {
 | 
			
		||||
          color: #3975C6;
 | 
			
		||||
          font-size: 28px;
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    .item-info {
 | 
			
		||||
      display: flex;
 | 
			
		||||
      align-items: center;
 | 
			
		||||
      flex-wrap: wrap;
 | 
			
		||||
      background: #F9F9F9;
 | 
			
		||||
 | 
			
		||||
      .item-info__item {
 | 
			
		||||
        display: flex;
 | 
			
		||||
        align-items: center;
 | 
			
		||||
        justify-content: space-between;
 | 
			
		||||
        width: 50%;
 | 
			
		||||
        height: 72px;
 | 
			
		||||
        padding: 0 20px;
 | 
			
		||||
        border-bottom: 1px solid #DDDDDD;
 | 
			
		||||
        border-right: 1px solid #DDDDDD;
 | 
			
		||||
        box-sizing: border-box;
 | 
			
		||||
 | 
			
		||||
        &:nth-of-type(2n) {
 | 
			
		||||
          border-right: none;
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      label {
 | 
			
		||||
        color: #999999;
 | 
			
		||||
        font-size: 26px;
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      span {
 | 
			
		||||
        color: #3975C6;
 | 
			
		||||
        font-size: 26px;
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    .bottom {
 | 
			
		||||
      display: flex;
 | 
			
		||||
      align-items: center;
 | 
			
		||||
 | 
			
		||||
      span {
 | 
			
		||||
        color: #999999;
 | 
			
		||||
        font-size: 28px;
 | 
			
		||||
 | 
			
		||||
        &:first-child {
 | 
			
		||||
          margin-right: 20px;
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
</style>
 | 
			
		||||
@@ -1,257 +0,0 @@
 | 
			
		||||
<template>
 | 
			
		||||
  <div class="add">
 | 
			
		||||
    <div class="form-group">
 | 
			
		||||
      <div class="form-item">
 | 
			
		||||
        <div class="form-item__wrapper">
 | 
			
		||||
          <div class="left">
 | 
			
		||||
            <i>*</i>
 | 
			
		||||
            <span>是否危房</span>
 | 
			
		||||
          </div>
 | 
			
		||||
          <div class="right">
 | 
			
		||||
            <u-radio-group v-model="form.dilapidatedHouse">
 | 
			
		||||
              <u-radio :name="item.dictValue" v-for="(item, index) in $dict.getDict('fpYesOrNo')" :key="index">
 | 
			
		||||
                {{ item.dictName }}
 | 
			
		||||
              </u-radio>
 | 
			
		||||
            </u-radio-group>
 | 
			
		||||
          </div>
 | 
			
		||||
        </div>
 | 
			
		||||
      </div>
 | 
			
		||||
      <div class="form-item">
 | 
			
		||||
        <div class="form-item__wrapper">
 | 
			
		||||
          <div class="left">
 | 
			
		||||
            <i>*</i>
 | 
			
		||||
            <span>是否饮水安全问题</span>
 | 
			
		||||
          </div>
 | 
			
		||||
          <div class="right">
 | 
			
		||||
            <u-radio-group v-model="form.drinkingWaterSafety">
 | 
			
		||||
              <u-radio :name="item.dictValue" v-for="(item, index) in $dict.getDict('fpYesOrNo')" :key="index">
 | 
			
		||||
                {{ item.dictName }}
 | 
			
		||||
              </u-radio>
 | 
			
		||||
            </u-radio-group>
 | 
			
		||||
          </div>
 | 
			
		||||
        </div>
 | 
			
		||||
      </div>
 | 
			
		||||
      <div class="form-item">
 | 
			
		||||
        <div class="form-item__wrapper">
 | 
			
		||||
          <div class="left">
 | 
			
		||||
            <i style="opacity: 0;">*</i>
 | 
			
		||||
            <span>风险类型</span>
 | 
			
		||||
          </div>
 | 
			
		||||
          <div class="right">
 | 
			
		||||
            <AiSelect dict="fpRiskType" v-model="form.riskType"></AiSelect>
 | 
			
		||||
          </div>
 | 
			
		||||
        </div>
 | 
			
		||||
      </div>
 | 
			
		||||
    </div>
 | 
			
		||||
    <!-- <div class="form-group form-textarea">
 | 
			
		||||
      <h2>备注</h2>
 | 
			
		||||
      <textarea placeholder-style="color: #999; font-size: 30rpx;" placeholder="请输入"></textarea>
 | 
			
		||||
    </div> -->
 | 
			
		||||
    <div class="btn" hover-class="text" @click="submit">保存</div>
 | 
			
		||||
 | 
			
		||||
  </div>
 | 
			
		||||
</template>
 | 
			
		||||
 | 
			
		||||
<script>
 | 
			
		||||
 | 
			
		||||
export default {
 | 
			
		||||
  data() {
 | 
			
		||||
    return {
 | 
			
		||||
      form: {
 | 
			
		||||
        dilapidatedHouse: '',
 | 
			
		||||
        drinkingWaterSafety: '',
 | 
			
		||||
        riskType: ''
 | 
			
		||||
      },
 | 
			
		||||
      id: ''
 | 
			
		||||
    }
 | 
			
		||||
  },
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
  onLoad(query) {
 | 
			
		||||
    this.$dict.load(['fpYesOrNo', 'fpRiskType'])
 | 
			
		||||
    uni.showLoading()
 | 
			
		||||
    this.id = query.id
 | 
			
		||||
    this.getInfo(query.id)
 | 
			
		||||
  },
 | 
			
		||||
 | 
			
		||||
  methods: {
 | 
			
		||||
    getInfo(id) {
 | 
			
		||||
      this.$http.post(`/app/apppreventionreturntopoverty/queryDetailById?id=${id}`).then(res => {
 | 
			
		||||
        if (res.code === 0) {
 | 
			
		||||
          this.form = {
 | 
			
		||||
            ...this.form,
 | 
			
		||||
            ...res.data
 | 
			
		||||
          }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        uni.hideLoading()
 | 
			
		||||
      })
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    submit() {
 | 
			
		||||
      uni.showLoading()
 | 
			
		||||
      this.$http.post('/app/apppreventionreturntopoverty/addOrUpdate', {
 | 
			
		||||
        ...this.form,
 | 
			
		||||
        id: this.id
 | 
			
		||||
      }).then(res => {
 | 
			
		||||
        if (res.code === 0) {
 | 
			
		||||
          this.$u.toast(this.isEdit ? '保存成功' : '提交成功')
 | 
			
		||||
          uni.$emit('reload')
 | 
			
		||||
          uni.navigateBack({
 | 
			
		||||
            delta: 1
 | 
			
		||||
          })
 | 
			
		||||
        }
 | 
			
		||||
        uni.hideLoading()
 | 
			
		||||
      })
 | 
			
		||||
    },
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
</script>
 | 
			
		||||
 | 
			
		||||
<style lang="scss">
 | 
			
		||||
.add {
 | 
			
		||||
  padding-bottom: 120px;
 | 
			
		||||
 | 
			
		||||
  .form-textarea {
 | 
			
		||||
    padding: 32px;
 | 
			
		||||
 | 
			
		||||
    h2 {
 | 
			
		||||
      margin-bottom: 32px;
 | 
			
		||||
      color: #333333;
 | 
			
		||||
      font-size: 32px;
 | 
			
		||||
      font-weight: 500;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    textarea {
 | 
			
		||||
      width: 100%;
 | 
			
		||||
      height: 200px;
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  & > div {
 | 
			
		||||
    margin-bottom: 16px;
 | 
			
		||||
    background: #fff;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  ::v-deep .u-radio {
 | 
			
		||||
    &:last-child {
 | 
			
		||||
      .u-radio__label {
 | 
			
		||||
        margin-right: 0;
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  .form-group {
 | 
			
		||||
    .form-item {
 | 
			
		||||
      padding-left: 32px;
 | 
			
		||||
 | 
			
		||||
      .form-item__wrapper {
 | 
			
		||||
        display: flex;
 | 
			
		||||
        align-items: center;
 | 
			
		||||
        justify-content: space-between;
 | 
			
		||||
        height: 112px;
 | 
			
		||||
        border-bottom: 1px solid #E4E5E6;
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      .right {
 | 
			
		||||
        height: 112px;
 | 
			
		||||
        line-height: 112px;
 | 
			
		||||
        padding-right: 32px;
 | 
			
		||||
 | 
			
		||||
        span {
 | 
			
		||||
          font-size: 30px;
 | 
			
		||||
          color: #999999;
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      input {
 | 
			
		||||
        height: 100%;
 | 
			
		||||
        text-align: right;
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      .left {
 | 
			
		||||
        display: flex;
 | 
			
		||||
        align-items: center;
 | 
			
		||||
 | 
			
		||||
        span {
 | 
			
		||||
          color: #333333;
 | 
			
		||||
          font-size: 32px;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        i {
 | 
			
		||||
          margin-right: 4px;
 | 
			
		||||
          font-style: normal;
 | 
			
		||||
          color: #FF4466;
 | 
			
		||||
          font-size: 32px;
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      &:last-child {
 | 
			
		||||
        .form-item__wrapper {
 | 
			
		||||
          border: none;
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  .form-item__imgs {
 | 
			
		||||
    padding: 32px;
 | 
			
		||||
 | 
			
		||||
    .form-item__title {
 | 
			
		||||
      display: flex;
 | 
			
		||||
      align-items: center;
 | 
			
		||||
      margin-bottom: 34px;
 | 
			
		||||
 | 
			
		||||
      h2 {
 | 
			
		||||
        color: #333333;
 | 
			
		||||
        font-weight: normal;
 | 
			
		||||
        font-size: 32px;
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      i {
 | 
			
		||||
        color: #999999;
 | 
			
		||||
        font-size: 28px;
 | 
			
		||||
        font-style: normal;
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    textarea {
 | 
			
		||||
      width: 100%;
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  .form-type {
 | 
			
		||||
    display: flex;
 | 
			
		||||
    align-items: center;
 | 
			
		||||
    justify-content: space-between;
 | 
			
		||||
    height: 112px;
 | 
			
		||||
    padding: 0 32px;
 | 
			
		||||
 | 
			
		||||
    h2 {
 | 
			
		||||
      font-weight: normal;
 | 
			
		||||
      color: #333333;
 | 
			
		||||
      font-size: 32px;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    span {
 | 
			
		||||
      color: #999999;
 | 
			
		||||
      font-size: 28px;
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  .btn {
 | 
			
		||||
    position: fixed;
 | 
			
		||||
    left: 0;
 | 
			
		||||
    bottom: 0;
 | 
			
		||||
    z-index: 11;
 | 
			
		||||
    width: 100%;
 | 
			
		||||
    height: 112px;
 | 
			
		||||
    line-height: 112px;
 | 
			
		||||
    margin: 0;
 | 
			
		||||
    text-align: center;
 | 
			
		||||
    color: #FFFFFF;
 | 
			
		||||
    font-size: 32px;
 | 
			
		||||
    background: #3192F4;
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
</style>
 | 
			
		||||
@@ -1,274 +0,0 @@
 | 
			
		||||
<template>
 | 
			
		||||
  <div class="add">
 | 
			
		||||
    <div class="form-group">
 | 
			
		||||
      <div class="form-item">
 | 
			
		||||
        <div class="form-item__wrapper">
 | 
			
		||||
          <div class="left">
 | 
			
		||||
            <span>工资收入</span>
 | 
			
		||||
          </div>
 | 
			
		||||
          <div class="right">
 | 
			
		||||
            <input placeholder="请输入" v-model="form.income1" type="number"
 | 
			
		||||
                   placeholder-style="color: #999; font-size: 30rpx;"/>
 | 
			
		||||
          </div>
 | 
			
		||||
        </div>
 | 
			
		||||
      </div>
 | 
			
		||||
      <div class="form-item">
 | 
			
		||||
        <div class="form-item__wrapper">
 | 
			
		||||
          <div class="left">
 | 
			
		||||
            <span>生产经营收入</span>
 | 
			
		||||
          </div>
 | 
			
		||||
          <div class="right">
 | 
			
		||||
            <input placeholder="请输入" v-model="form.income2" type="number"
 | 
			
		||||
                   placeholder-style="color: #999; font-size: 30rpx;"/>
 | 
			
		||||
          </div>
 | 
			
		||||
        </div>
 | 
			
		||||
      </div>
 | 
			
		||||
      <div class="form-item">
 | 
			
		||||
        <div class="form-item__wrapper">
 | 
			
		||||
          <div class="left">
 | 
			
		||||
            <span>财产性收入</span>
 | 
			
		||||
          </div>
 | 
			
		||||
          <div class="right">
 | 
			
		||||
            <input placeholder="请输入" v-model="form.income3" type="number"
 | 
			
		||||
                   placeholder-style="color: #999; font-size: 30rpx;"/>
 | 
			
		||||
          </div>
 | 
			
		||||
        </div>
 | 
			
		||||
      </div>
 | 
			
		||||
      <div class="form-item">
 | 
			
		||||
        <div class="form-item__wrapper">
 | 
			
		||||
          <div class="left">
 | 
			
		||||
            <span>转移性收入</span>
 | 
			
		||||
          </div>
 | 
			
		||||
          <div class="right">
 | 
			
		||||
            <input placeholder="请输入" v-model="form.income4" type="number"
 | 
			
		||||
                   placeholder-style="color: #999; font-size: 30rpx;"/>
 | 
			
		||||
          </div>
 | 
			
		||||
        </div>
 | 
			
		||||
      </div>
 | 
			
		||||
      <div class="form-item">
 | 
			
		||||
        <div class="form-item__wrapper">
 | 
			
		||||
          <div class="left">
 | 
			
		||||
            <span>理赔收入</span>
 | 
			
		||||
          </div>
 | 
			
		||||
          <div class="right">
 | 
			
		||||
            <input placeholder="请输入" v-model="form.income8" type="number"
 | 
			
		||||
                   placeholder-style="color: #999; font-size: 30rpx;"/>
 | 
			
		||||
          </div>
 | 
			
		||||
        </div>
 | 
			
		||||
      </div>
 | 
			
		||||
    </div>
 | 
			
		||||
    <div class="form-group">
 | 
			
		||||
      <div class="form-item">
 | 
			
		||||
        <div class="form-item__wrapper">
 | 
			
		||||
          <div class="left">
 | 
			
		||||
            <span>生产经营支出</span>
 | 
			
		||||
          </div>
 | 
			
		||||
          <div class="right">
 | 
			
		||||
            <input placeholder="请输入" v-model="form.income5" type="number"
 | 
			
		||||
                   placeholder-style="color: #999; font-size: 30rpx;"/>
 | 
			
		||||
          </div>
 | 
			
		||||
        </div>
 | 
			
		||||
      </div>
 | 
			
		||||
      <div class="form-item">
 | 
			
		||||
        <div class="form-item__wrapper">
 | 
			
		||||
          <div class="left">
 | 
			
		||||
            <span>合规自然支出</span>
 | 
			
		||||
          </div>
 | 
			
		||||
          <div class="right">
 | 
			
		||||
            <input placeholder="请输入" v-model="form.income9" type="number"
 | 
			
		||||
                   placeholder-style="color: #999; font-size: 30rpx;"/>
 | 
			
		||||
          </div>
 | 
			
		||||
        </div>
 | 
			
		||||
      </div>
 | 
			
		||||
    </div>
 | 
			
		||||
    <p class="tips">*不填时默认为0元</p>
 | 
			
		||||
    <div class="btn" hover-class="text" @click="submit">保存</div>
 | 
			
		||||
  </div>
 | 
			
		||||
</template>
 | 
			
		||||
 | 
			
		||||
<script>
 | 
			
		||||
export default {
 | 
			
		||||
  data() {
 | 
			
		||||
    return {
 | 
			
		||||
      form: {
 | 
			
		||||
        income1: '',
 | 
			
		||||
        income2: '',
 | 
			
		||||
        income3: '',
 | 
			
		||||
        income4: '',
 | 
			
		||||
        income5: '',
 | 
			
		||||
        income8: '',
 | 
			
		||||
        income9: ''
 | 
			
		||||
      },
 | 
			
		||||
      id: ''
 | 
			
		||||
    }
 | 
			
		||||
  },
 | 
			
		||||
 | 
			
		||||
  onLoad(query) {
 | 
			
		||||
    uni.showLoading()
 | 
			
		||||
    this.id = query.id
 | 
			
		||||
    this.getInfo(query.id)
 | 
			
		||||
  },
 | 
			
		||||
 | 
			
		||||
  methods: {
 | 
			
		||||
    getInfo(id) {
 | 
			
		||||
      this.$http.post(`/app/apppreventionreturntopoverty/queryDetailById?id=${id}`).then(res => {
 | 
			
		||||
        if (res.code === 0) {
 | 
			
		||||
          this.form = {
 | 
			
		||||
            ...this.form,
 | 
			
		||||
            ...res.data
 | 
			
		||||
          }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        uni.hideLoading()
 | 
			
		||||
      })
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    submit() {
 | 
			
		||||
      uni.showLoading()
 | 
			
		||||
      this.$http.post('/app/apppreventionreturntopoverty/addOrUpdate', {
 | 
			
		||||
        ...this.form,
 | 
			
		||||
        id: this.id
 | 
			
		||||
      }).then(res => {
 | 
			
		||||
        if (res.code === 0) {
 | 
			
		||||
          this.$u.toast(this.isEdit ? '保存成功' : '提交成功')
 | 
			
		||||
          uni.$emit('reload')
 | 
			
		||||
          uni.navigateBack({
 | 
			
		||||
            delta: 1
 | 
			
		||||
          })
 | 
			
		||||
        }
 | 
			
		||||
        uni.hideLoading()
 | 
			
		||||
      })
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
</script>
 | 
			
		||||
 | 
			
		||||
<style lang="scss">
 | 
			
		||||
.add {
 | 
			
		||||
  padding-bottom: 120px;
 | 
			
		||||
 | 
			
		||||
  .tips {
 | 
			
		||||
    margin: 32px 0 0 32px;
 | 
			
		||||
    color: #999999;
 | 
			
		||||
    font-size: 26px;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  & > div {
 | 
			
		||||
    margin-bottom: 16px;
 | 
			
		||||
    background: #fff;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  .form-group {
 | 
			
		||||
    .form-item {
 | 
			
		||||
      padding-left: 32px;
 | 
			
		||||
 | 
			
		||||
      .form-item__wrapper {
 | 
			
		||||
        display: flex;
 | 
			
		||||
        align-items: center;
 | 
			
		||||
        justify-content: space-between;
 | 
			
		||||
        height: 112px;
 | 
			
		||||
        border-bottom: 1px solid #E4E5E6;
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      .right {
 | 
			
		||||
        height: 112px;
 | 
			
		||||
        line-height: 112px;
 | 
			
		||||
        padding-right: 32px;
 | 
			
		||||
 | 
			
		||||
        span {
 | 
			
		||||
          font-size: 30px;
 | 
			
		||||
          color: #999999;
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      input {
 | 
			
		||||
        height: 100%;
 | 
			
		||||
        text-align: right;
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      .left {
 | 
			
		||||
        display: flex;
 | 
			
		||||
        align-items: center;
 | 
			
		||||
 | 
			
		||||
        span {
 | 
			
		||||
          color: #333333;
 | 
			
		||||
          font-size: 32px;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        i {
 | 
			
		||||
          margin-right: 4px;
 | 
			
		||||
          font-style: normal;
 | 
			
		||||
          color: #FF4466;
 | 
			
		||||
          font-size: 32px;
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      &:last-child {
 | 
			
		||||
        .form-item__wrapper {
 | 
			
		||||
          border: none;
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  .form-item__imgs {
 | 
			
		||||
    padding: 32px;
 | 
			
		||||
 | 
			
		||||
    .form-item__title {
 | 
			
		||||
      display: flex;
 | 
			
		||||
      align-items: center;
 | 
			
		||||
      margin-bottom: 34px;
 | 
			
		||||
 | 
			
		||||
      h2 {
 | 
			
		||||
        color: #333333;
 | 
			
		||||
        font-weight: normal;
 | 
			
		||||
        font-size: 32px;
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      i {
 | 
			
		||||
        color: #999999;
 | 
			
		||||
        font-size: 28px;
 | 
			
		||||
        font-style: normal;
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    textarea {
 | 
			
		||||
      width: 100%;
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  .form-type {
 | 
			
		||||
    display: flex;
 | 
			
		||||
    align-items: center;
 | 
			
		||||
    justify-content: space-between;
 | 
			
		||||
    height: 112px;
 | 
			
		||||
    padding: 0 32px;
 | 
			
		||||
 | 
			
		||||
    h2 {
 | 
			
		||||
      font-weight: normal;
 | 
			
		||||
      color: #333333;
 | 
			
		||||
      font-size: 32px;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    span {
 | 
			
		||||
      color: #999999;
 | 
			
		||||
      font-size: 28px;
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  .btn {
 | 
			
		||||
    position: fixed;
 | 
			
		||||
    left: 0;
 | 
			
		||||
    bottom: 0;
 | 
			
		||||
    z-index: 11;
 | 
			
		||||
    width: 100%;
 | 
			
		||||
    height: 112px;
 | 
			
		||||
    line-height: 112px;
 | 
			
		||||
    margin: 0;
 | 
			
		||||
    text-align: center;
 | 
			
		||||
    color: #FFFFFF;
 | 
			
		||||
    font-size: 32px;
 | 
			
		||||
    background: #3192F4;
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
</style>
 | 
			
		||||
@@ -1,345 +0,0 @@
 | 
			
		||||
<template>
 | 
			
		||||
  <div class="add">
 | 
			
		||||
    <div class="form-group">
 | 
			
		||||
      <div class="form-item">
 | 
			
		||||
        <div class="form-item__wrapper">
 | 
			
		||||
          <div class="left">
 | 
			
		||||
            <i style="opacity: 0;">*</i>
 | 
			
		||||
            <span>产业帮扶</span>
 | 
			
		||||
          </div>
 | 
			
		||||
          <div class="right">
 | 
			
		||||
            <AiSelect dict="fpIndustrialAssistance" v-model="form.industrialAssistance"></AiSelect>
 | 
			
		||||
          </div>
 | 
			
		||||
        </div>
 | 
			
		||||
      </div>
 | 
			
		||||
      <div class="form-item">
 | 
			
		||||
        <div class="form-item__wrapper">
 | 
			
		||||
          <div class="left">
 | 
			
		||||
            <i style="opacity: 0;">*</i>
 | 
			
		||||
            <span>健康帮扶</span>
 | 
			
		||||
          </div>
 | 
			
		||||
          <div class="right">
 | 
			
		||||
            <AiSelect dict="fpHealthAssistance" v-model="form.healthAssistance"></AiSelect>
 | 
			
		||||
          </div>
 | 
			
		||||
        </div>
 | 
			
		||||
      </div>
 | 
			
		||||
      <div class="form-item">
 | 
			
		||||
        <div class="form-item__wrapper">
 | 
			
		||||
          <div class="left">
 | 
			
		||||
            <i style="opacity: 0;">*</i>
 | 
			
		||||
            <span>就业帮扶</span>
 | 
			
		||||
          </div>
 | 
			
		||||
          <div class="right">
 | 
			
		||||
            <AiSelect dict="fpEmploymentAssistance" v-model="form.employmentAssistance"></AiSelect>
 | 
			
		||||
          </div>
 | 
			
		||||
        </div>
 | 
			
		||||
      </div>
 | 
			
		||||
      <div class="form-item">
 | 
			
		||||
        <div class="form-item__wrapper">
 | 
			
		||||
          <div class="left">
 | 
			
		||||
            <i style="opacity: 0;">*</i>
 | 
			
		||||
            <span>教育帮扶</span>
 | 
			
		||||
          </div>
 | 
			
		||||
          <div class="right">
 | 
			
		||||
            <AiSelect dict="fpEducationalAssistance" v-model="form.educationalAssistance"></AiSelect>
 | 
			
		||||
          </div>
 | 
			
		||||
        </div>
 | 
			
		||||
      </div>
 | 
			
		||||
      <div class="form-item">
 | 
			
		||||
        <div class="form-item__wrapper">
 | 
			
		||||
          <div class="left">
 | 
			
		||||
            <i style="opacity: 0;">*</i>
 | 
			
		||||
            <span>金融帮扶</span>
 | 
			
		||||
          </div>
 | 
			
		||||
          <div class="right">
 | 
			
		||||
            <AiSelect dict="fpFinancialAssistance" v-model="form.financialAssistance"></AiSelect>
 | 
			
		||||
          </div>
 | 
			
		||||
        </div>
 | 
			
		||||
      </div>
 | 
			
		||||
      <div class="form-item">
 | 
			
		||||
        <div class="form-item__wrapper">
 | 
			
		||||
          <div class="left">
 | 
			
		||||
            <i style="opacity: 0;">*</i>
 | 
			
		||||
            <span>社会帮扶</span>
 | 
			
		||||
          </div>
 | 
			
		||||
          <div class="right">
 | 
			
		||||
            <AiSelect dict="fpSocialAssistance" v-model="form.socialAssistance"></AiSelect>
 | 
			
		||||
          </div>
 | 
			
		||||
        </div>
 | 
			
		||||
      </div>
 | 
			
		||||
      <div class="form-item">
 | 
			
		||||
        <div class="form-item__wrapper">
 | 
			
		||||
          <div class="left">
 | 
			
		||||
            <i style="opacity: 0;">*</i>
 | 
			
		||||
            <span>公益岗位帮扶</span>
 | 
			
		||||
          </div>
 | 
			
		||||
          <div class="right">
 | 
			
		||||
            <AiSelect dict="fpPublicWelfarePostAssistance" v-model="form.publicWelfarePostAssistance"></AiSelect>
 | 
			
		||||
          </div>
 | 
			
		||||
        </div>
 | 
			
		||||
      </div>
 | 
			
		||||
      <div class="form-item">
 | 
			
		||||
        <div class="form-item__wrapper">
 | 
			
		||||
          <div class="left">
 | 
			
		||||
            <i>*</i>
 | 
			
		||||
            <span>是否消除风险</span>
 | 
			
		||||
          </div>
 | 
			
		||||
          <div class="right">
 | 
			
		||||
            <u-radio-group v-model="form.isRisk" @change="onRiskChange">
 | 
			
		||||
              <u-radio :name="item.dictValue" v-for="(item, index) in $dict.getDict('fpYesOrNo')" :key="index">
 | 
			
		||||
                {{ item.dictName }}
 | 
			
		||||
              </u-radio>
 | 
			
		||||
            </u-radio-group>
 | 
			
		||||
          </div>
 | 
			
		||||
        </div>
 | 
			
		||||
      </div>
 | 
			
		||||
      <div class="form-item" v-if="form.isRisk === '01'">
 | 
			
		||||
        <div class="form-item__wrapper">
 | 
			
		||||
          <div class="left">
 | 
			
		||||
            <i>*</i>
 | 
			
		||||
            <span>风险消除方式</span>
 | 
			
		||||
          </div>
 | 
			
		||||
          <div class="right">
 | 
			
		||||
            <AiSelect dict="fpRiskEliminationMethod" v-model="form.riskEliminationMethod"></AiSelect>
 | 
			
		||||
          </div>
 | 
			
		||||
        </div>
 | 
			
		||||
      </div>
 | 
			
		||||
      <div class="form-item" v-if="form.isRisk === '01'">
 | 
			
		||||
        <div class="form-item__wrapper">
 | 
			
		||||
          <div class="left">
 | 
			
		||||
            <i>*</i>
 | 
			
		||||
            <span>风险消除时间</span>
 | 
			
		||||
          </div>
 | 
			
		||||
          <div class="right">
 | 
			
		||||
            <AiDate v-model="form.riskEliminationDate"></AiDate>
 | 
			
		||||
          </div>
 | 
			
		||||
        </div>
 | 
			
		||||
      </div>
 | 
			
		||||
    </div>
 | 
			
		||||
    <div class="btn" hover-class="text" @click="submit">保存</div>
 | 
			
		||||
  </div>
 | 
			
		||||
</template>
 | 
			
		||||
 | 
			
		||||
<script>
 | 
			
		||||
 | 
			
		||||
export default {
 | 
			
		||||
  data() {
 | 
			
		||||
    return {
 | 
			
		||||
      result: '',
 | 
			
		||||
      form: {
 | 
			
		||||
        isRisk: '02',
 | 
			
		||||
        riskEliminationMethod: '',
 | 
			
		||||
        riskEliminationDate: '',
 | 
			
		||||
        industrialAssistance: '',
 | 
			
		||||
        healthAssistance: '',
 | 
			
		||||
        employmentAssistance: '',
 | 
			
		||||
        educationalAssistance: '',
 | 
			
		||||
        financialAssistance: '',
 | 
			
		||||
        socialAssistance: '',
 | 
			
		||||
        publicWelfarePostAssistance: ''
 | 
			
		||||
      },
 | 
			
		||||
      id: ''
 | 
			
		||||
    }
 | 
			
		||||
  },
 | 
			
		||||
 | 
			
		||||
  onLoad(query) {
 | 
			
		||||
    uni.showLoading()
 | 
			
		||||
    this.$dict.load(['fpYesOrNo', 'fpRiskEliminationMethod', 'fpIndustrialAssistance', 'fpHealthAssistance', 'fpEmploymentAssistance',
 | 
			
		||||
      'fpEducationalAssistance', 'fpFinancialAssistance', 'fpSocialAssistance', 'fpPublicWelfarePostAssistance']).then(() => {
 | 
			
		||||
      this.getInfo(query.id)
 | 
			
		||||
    })
 | 
			
		||||
    this.id = query.id
 | 
			
		||||
  },
 | 
			
		||||
 | 
			
		||||
  methods: {
 | 
			
		||||
    getInfo(id) {
 | 
			
		||||
      this.$http.post(`/app/apppreventionreturntopoverty/queryDetailById?id=${id}`).then(res => {
 | 
			
		||||
        if (res.code === 0) {
 | 
			
		||||
          this.form = {
 | 
			
		||||
            ...this.form,
 | 
			
		||||
            ...res.data
 | 
			
		||||
          }
 | 
			
		||||
 | 
			
		||||
          if (this.form.riskEliminationMethod) {
 | 
			
		||||
            this.form.isRisk = '01'
 | 
			
		||||
          }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        uni.hideLoading()
 | 
			
		||||
      })
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    onRiskChange(e) {
 | 
			
		||||
      if (e === '02') {
 | 
			
		||||
        this.form.riskEliminationMethod = ''
 | 
			
		||||
        this.form.riskEliminationDate = ''
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    submit() {
 | 
			
		||||
      if (!this.form.isRisk) {
 | 
			
		||||
        return this.$u.toast('请选择是否消除风险')
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      if (this.form.isRisk === '01') {
 | 
			
		||||
        if (!this.form.riskEliminationMethod) {
 | 
			
		||||
          return this.$u.toast('请选择风险消除方式')
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        if (!this.form.riskEliminationDate) {
 | 
			
		||||
          return this.$u.toast('请选择风险消除时间')
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      uni.showLoading()
 | 
			
		||||
      this.$http.post('/app/apppreventionreturntopoverty/addOrUpdate', {
 | 
			
		||||
        ...this.form,
 | 
			
		||||
        riskEliminationMethod: this.form.isRisk ? this.form.riskEliminationMethod : '',
 | 
			
		||||
        id: this.id,
 | 
			
		||||
        status: this.form.isRisk === '01' ? 1 : ''
 | 
			
		||||
      }).then(res => {
 | 
			
		||||
        if (res.code === 0) {
 | 
			
		||||
          this.$u.toast(this.isEdit ? '保存成功' : '提交成功')
 | 
			
		||||
          uni.$emit('reload')
 | 
			
		||||
          uni.navigateBack({
 | 
			
		||||
            delta: 1
 | 
			
		||||
          })
 | 
			
		||||
        }
 | 
			
		||||
        uni.hideLoading()
 | 
			
		||||
      })
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
</script>
 | 
			
		||||
 | 
			
		||||
<style lang="scss">
 | 
			
		||||
.add {
 | 
			
		||||
  padding-bottom: 120px;
 | 
			
		||||
 | 
			
		||||
  & > div {
 | 
			
		||||
    margin-bottom: 16px;
 | 
			
		||||
    background: #fff;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  ::v-deep .u-radio {
 | 
			
		||||
    &:last-child {
 | 
			
		||||
      .u-radio__label {
 | 
			
		||||
        margin-right: 0;
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  .form-group {
 | 
			
		||||
    .form-item {
 | 
			
		||||
      padding-left: 32px;
 | 
			
		||||
 | 
			
		||||
      .form-item__wrapper {
 | 
			
		||||
        display: flex;
 | 
			
		||||
        align-items: center;
 | 
			
		||||
        justify-content: space-between;
 | 
			
		||||
        height: 112px;
 | 
			
		||||
        border-bottom: 1px solid #E4E5E6;
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      .right {
 | 
			
		||||
        height: 112px;
 | 
			
		||||
        line-height: 112px;
 | 
			
		||||
        padding-right: 32px;
 | 
			
		||||
 | 
			
		||||
        span {
 | 
			
		||||
          font-size: 30px;
 | 
			
		||||
          color: #999999;
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      input {
 | 
			
		||||
        height: 100%;
 | 
			
		||||
        text-align: right;
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      .left {
 | 
			
		||||
        display: flex;
 | 
			
		||||
        align-items: center;
 | 
			
		||||
 | 
			
		||||
        span {
 | 
			
		||||
          color: #333333;
 | 
			
		||||
          font-size: 32px;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        i {
 | 
			
		||||
          margin-right: 4px;
 | 
			
		||||
          font-style: normal;
 | 
			
		||||
          color: #FF4466;
 | 
			
		||||
          font-size: 32px;
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      &:last-child {
 | 
			
		||||
        .form-item__wrapper {
 | 
			
		||||
          border: none;
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  .form-item__imgs {
 | 
			
		||||
    padding: 32px;
 | 
			
		||||
 | 
			
		||||
    .form-item__title {
 | 
			
		||||
      display: flex;
 | 
			
		||||
      align-items: center;
 | 
			
		||||
      margin-bottom: 34px;
 | 
			
		||||
 | 
			
		||||
      h2 {
 | 
			
		||||
        color: #333333;
 | 
			
		||||
        font-weight: normal;
 | 
			
		||||
        font-size: 32px;
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      i {
 | 
			
		||||
        color: #999999;
 | 
			
		||||
        font-size: 28px;
 | 
			
		||||
        font-style: normal;
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    textarea {
 | 
			
		||||
      width: 100%;
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  .form-type {
 | 
			
		||||
    display: flex;
 | 
			
		||||
    align-items: center;
 | 
			
		||||
    justify-content: space-between;
 | 
			
		||||
    height: 112px;
 | 
			
		||||
    padding: 0 32px;
 | 
			
		||||
 | 
			
		||||
    h2 {
 | 
			
		||||
      font-weight: normal;
 | 
			
		||||
      color: #333333;
 | 
			
		||||
      font-size: 32px;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    span {
 | 
			
		||||
      color: #999999;
 | 
			
		||||
      font-size: 28px;
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  .btn {
 | 
			
		||||
    position: fixed;
 | 
			
		||||
    left: 0;
 | 
			
		||||
    bottom: 0;
 | 
			
		||||
    z-index: 11;
 | 
			
		||||
    width: 100%;
 | 
			
		||||
    height: 112px;
 | 
			
		||||
    line-height: 112px;
 | 
			
		||||
    margin: 0;
 | 
			
		||||
    text-align: center;
 | 
			
		||||
    color: #FFFFFF;
 | 
			
		||||
    font-size: 32px;
 | 
			
		||||
    background: #3192F4;
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
</style>
 | 
			
		||||
@@ -1,224 +0,0 @@
 | 
			
		||||
<template>
 | 
			
		||||
  <div class="news">
 | 
			
		||||
    <div class="tab">
 | 
			
		||||
      <span
 | 
			
		||||
          @click="changeTab(index, item.dictValue)"
 | 
			
		||||
          v-for="(item, index) in tabList"
 | 
			
		||||
          :key="index"
 | 
			
		||||
          :class="[currIndex === index ? 'active' : '']">
 | 
			
		||||
        {{ item.dictName }}
 | 
			
		||||
      </span>
 | 
			
		||||
    </div>
 | 
			
		||||
    <div class="list">
 | 
			
		||||
      <div class="item" v-for="(item, index) in list" :key="index"
 | 
			
		||||
           @click="linkTo('./NewsDetail?id=' + item.id)">
 | 
			
		||||
        <div class="left">
 | 
			
		||||
          <h2>{{ item.title }}</h2>
 | 
			
		||||
          <div class="item-bottom">
 | 
			
		||||
            <span>{{ $dict.getLabel('newsCenterPolicyType', item.policyType) }}</span>
 | 
			
		||||
            <span>{{ item.createTime }}</span>
 | 
			
		||||
          </div>
 | 
			
		||||
        </div>
 | 
			
		||||
        <image v-if="item.coverFile" :src="item.coverFile ? item.coverFile.url : ''"/>
 | 
			
		||||
      </div>
 | 
			
		||||
      <AiEmpty v-if="!list.length && isMore" style="padding-bottom: 20px;"></AiEmpty>
 | 
			
		||||
    </div>
 | 
			
		||||
  </div>
 | 
			
		||||
</template>
 | 
			
		||||
 | 
			
		||||
<script>
 | 
			
		||||
 | 
			
		||||
export default {
 | 
			
		||||
  data() {
 | 
			
		||||
    return {
 | 
			
		||||
      currIndex: 0,
 | 
			
		||||
      list: [],
 | 
			
		||||
      current: 1,
 | 
			
		||||
      size: 15,
 | 
			
		||||
      type: '',
 | 
			
		||||
      tabList: [],
 | 
			
		||||
      isMore: false
 | 
			
		||||
    }
 | 
			
		||||
  },
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
  onLoad() {
 | 
			
		||||
    uni.showLoading()
 | 
			
		||||
    this.$dict.load(['newsCenterPolicyType']).then(() => {
 | 
			
		||||
      this.tabList = this.$dict.getDict('newsCenterPolicyType')
 | 
			
		||||
      this.type = this.$dict.getDict('newsCenterPolicyType')[0].dictValue
 | 
			
		||||
      this.getList()
 | 
			
		||||
    })
 | 
			
		||||
  },
 | 
			
		||||
 | 
			
		||||
  methods: {
 | 
			
		||||
    changeTab(index, type) {
 | 
			
		||||
      this.type = type
 | 
			
		||||
      this.currIndex = index
 | 
			
		||||
 | 
			
		||||
      this.current = 1
 | 
			
		||||
      this.isMore = false
 | 
			
		||||
 | 
			
		||||
      uni.showLoading()
 | 
			
		||||
      this.$nextTick(() => {
 | 
			
		||||
        this.getList()
 | 
			
		||||
      })
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    linkTo(url) {
 | 
			
		||||
      uni.navigateTo({url})
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    getList() {
 | 
			
		||||
      if (this.isMore) return
 | 
			
		||||
 | 
			
		||||
      this.$http.post(`/app/appnewscenterinfo/listForWx`, null, {
 | 
			
		||||
        params: {
 | 
			
		||||
          current: this.current,
 | 
			
		||||
          size: this.size,
 | 
			
		||||
          status: 1,
 | 
			
		||||
          policyType: this.type
 | 
			
		||||
        }
 | 
			
		||||
      }).then(res => {
 | 
			
		||||
        if (res.code == 0) {
 | 
			
		||||
          if (this.current > 1) {
 | 
			
		||||
            this.list = [...this.list, ...res.data.records]
 | 
			
		||||
          } else {
 | 
			
		||||
            this.list = res.data.records
 | 
			
		||||
          }
 | 
			
		||||
 | 
			
		||||
          uni.hideLoading()
 | 
			
		||||
 | 
			
		||||
          if (res.data.records.length < 10) {
 | 
			
		||||
            this.isMore = true
 | 
			
		||||
 | 
			
		||||
            return false
 | 
			
		||||
          }
 | 
			
		||||
 | 
			
		||||
          this.current = this.current + 1
 | 
			
		||||
        } else {
 | 
			
		||||
          uni.hideLoading()
 | 
			
		||||
        }
 | 
			
		||||
      }).catch(() => {
 | 
			
		||||
        uni.hideLoading()
 | 
			
		||||
      })
 | 
			
		||||
    }
 | 
			
		||||
  },
 | 
			
		||||
 | 
			
		||||
  onReachBottom() {
 | 
			
		||||
    this.getList()
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
</script>
 | 
			
		||||
 | 
			
		||||
<style lang="scss">
 | 
			
		||||
.news {
 | 
			
		||||
  padding: 96px 0 40px;
 | 
			
		||||
 | 
			
		||||
  .list {
 | 
			
		||||
    padding: 0 30px;
 | 
			
		||||
    background: #fff;
 | 
			
		||||
 | 
			
		||||
    .item {
 | 
			
		||||
      display: flex;
 | 
			
		||||
      align-items: center;
 | 
			
		||||
      padding: 32px 0;
 | 
			
		||||
      border-bottom: 1px solid #DDDDDD;
 | 
			
		||||
 | 
			
		||||
      &:active {
 | 
			
		||||
        background: #ddd;
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      &:last-child {
 | 
			
		||||
        border-bottom: none;
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      .left {
 | 
			
		||||
        flex: 1;
 | 
			
		||||
        margin-right: 20px;
 | 
			
		||||
        display: -webkit-box;
 | 
			
		||||
        -webkit-box-orient: vertical;
 | 
			
		||||
        -webkit-line-clamp: 2;
 | 
			
		||||
        overflow: hidden;
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      & > image {
 | 
			
		||||
        width: 200px;
 | 
			
		||||
        height: 140px;
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      h2 {
 | 
			
		||||
        margin-bottom: 32px;
 | 
			
		||||
        color: #333333;
 | 
			
		||||
        font-size: 30px;
 | 
			
		||||
        font-weight: 600;
 | 
			
		||||
        display: -webkit-box;
 | 
			
		||||
        -webkit-box-orient: vertical;
 | 
			
		||||
        -webkit-line-clamp: 2;
 | 
			
		||||
        overflow: hidden;
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      .item-bottom {
 | 
			
		||||
        display: flex;
 | 
			
		||||
        align-items: center;
 | 
			
		||||
 | 
			
		||||
        span {
 | 
			
		||||
          color: #999999;
 | 
			
		||||
          font-size: 24px;
 | 
			
		||||
 | 
			
		||||
          &:first-child {
 | 
			
		||||
            margin-right: 32px;
 | 
			
		||||
          }
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  .tab {
 | 
			
		||||
    display: flex;
 | 
			
		||||
    position: fixed;
 | 
			
		||||
    align-items: center;
 | 
			
		||||
    top: 0;
 | 
			
		||||
    left: 0;
 | 
			
		||||
    z-index: 1;
 | 
			
		||||
    width: 100%;
 | 
			
		||||
    height: 96px;
 | 
			
		||||
    background: #FFFFFF;
 | 
			
		||||
    border-bottom: 1px solid #D4D4D4;
 | 
			
		||||
    box-sizing: border-box;
 | 
			
		||||
 | 
			
		||||
    * {
 | 
			
		||||
      box-sizing: border-box;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    span {
 | 
			
		||||
      position: relative;
 | 
			
		||||
      flex: 1;
 | 
			
		||||
      height: 96px;
 | 
			
		||||
      line-height: 96px;
 | 
			
		||||
      color: #999999;
 | 
			
		||||
      text-align: center;
 | 
			
		||||
      font-size: 28px;
 | 
			
		||||
 | 
			
		||||
      &::after {
 | 
			
		||||
        position: absolute;
 | 
			
		||||
        bottom: 0;
 | 
			
		||||
        left: 50%;
 | 
			
		||||
        width: 88px;
 | 
			
		||||
        height: 6px;
 | 
			
		||||
        background: transparent;
 | 
			
		||||
        transform: translateX(-50%);
 | 
			
		||||
        content: ' ';
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      &.active {
 | 
			
		||||
        color: #1365DD;
 | 
			
		||||
 | 
			
		||||
        &::after {
 | 
			
		||||
          background: #1365DD;
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
</style>
 | 
			
		||||
@@ -1,98 +0,0 @@
 | 
			
		||||
<template>
 | 
			
		||||
  <div class="detail" v-if="pageShow">
 | 
			
		||||
    <h2>{{ info.title }}</h2>
 | 
			
		||||
    <span>发布时间:{{ info.createTime }}</span>
 | 
			
		||||
    <div class="content">
 | 
			
		||||
      <u-parse :html="info.content" v-if="info.type === '0'"></u-parse>
 | 
			
		||||
      <video class="video" v-else :src="info.videoFile.url"></video>
 | 
			
		||||
    </div>
 | 
			
		||||
  </div>
 | 
			
		||||
</template>
 | 
			
		||||
 | 
			
		||||
<script>
 | 
			
		||||
export default {
 | 
			
		||||
  data() {
 | 
			
		||||
    return {
 | 
			
		||||
      pageShow: false,
 | 
			
		||||
      info: {},
 | 
			
		||||
      content: `
 | 
			
		||||
					<p>露从今夜白,月是故乡明</p>
 | 
			
		||||
					<img src="https://cdn.uviewui.com/uview/swiper/2.jpg" />
 | 
			
		||||
				`
 | 
			
		||||
    }
 | 
			
		||||
  },
 | 
			
		||||
 | 
			
		||||
  onLoad(query) {
 | 
			
		||||
    uni.showLoading()
 | 
			
		||||
    this.getInfo(query.id)
 | 
			
		||||
  },
 | 
			
		||||
 | 
			
		||||
  methods: {
 | 
			
		||||
    getInfo(id) {
 | 
			
		||||
      this.$http.post(`/app/appnewscenterinfo/queryDetailById?id=${id}`).then(res => {
 | 
			
		||||
        if (res.code == 0) {
 | 
			
		||||
          this.info = res.data
 | 
			
		||||
 | 
			
		||||
          this.$nextTick(() => {
 | 
			
		||||
            this.pageShow = true
 | 
			
		||||
          })
 | 
			
		||||
        }
 | 
			
		||||
        uni.hideLoading()
 | 
			
		||||
      })
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
</script>
 | 
			
		||||
 | 
			
		||||
<style lang="scss">
 | 
			
		||||
.detail {
 | 
			
		||||
  min-height: 100vh;
 | 
			
		||||
  padding: 40px 32px 40px;
 | 
			
		||||
  box-sizing: border-box;
 | 
			
		||||
  background: #fff;
 | 
			
		||||
 | 
			
		||||
  & > h2 {
 | 
			
		||||
    margin-bottom: 16px;
 | 
			
		||||
    line-height: 1.3;
 | 
			
		||||
    font-size: 40px;
 | 
			
		||||
    color: #333;
 | 
			
		||||
    font-weight: 600;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  & > span {
 | 
			
		||||
    font-size: 28px;
 | 
			
		||||
    color: #999;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  .content {
 | 
			
		||||
    width: 100%;
 | 
			
		||||
    margin-top: 40px;
 | 
			
		||||
 | 
			
		||||
    ::v-deep * {
 | 
			
		||||
      box-sizing: border-box;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    ::v-deep p {
 | 
			
		||||
      margin: 20px 0;
 | 
			
		||||
      line-height: 1.4;
 | 
			
		||||
      color: #666;
 | 
			
		||||
      font-size: 28px;
 | 
			
		||||
      text-align: justify;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    ::v-deep img {
 | 
			
		||||
      width: 100%;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    ::v-deep br {
 | 
			
		||||
      display: block;
 | 
			
		||||
      margin: 20px 0;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    .video {
 | 
			
		||||
      width: 100%;
 | 
			
		||||
      height: 600px;
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
</style>
 | 
			
		||||
@@ -1,89 +0,0 @@
 | 
			
		||||
<template>
 | 
			
		||||
  <div class="povertyMonitor">
 | 
			
		||||
    <div class="form-content">
 | 
			
		||||
      <List ref="list" v-if="currIndex === 0"></List>
 | 
			
		||||
      <Statistics ref="statistics" v-if="currIndex === 1"></Statistics>
 | 
			
		||||
    </div>
 | 
			
		||||
    <div class="footer">
 | 
			
		||||
      <div @click="currIndex = 0" :class="[currIndex === 0 ? 'active' : '']">监控预警</div>
 | 
			
		||||
      <div @click="currIndex = 1" :class="[currIndex === 1 ? 'active' : '']">数据统计</div>
 | 
			
		||||
    </div>
 | 
			
		||||
  </div>
 | 
			
		||||
</template>
 | 
			
		||||
 | 
			
		||||
<script>
 | 
			
		||||
import Statistics from './povertyMonitor/Statistics.vue'
 | 
			
		||||
import List from './povertyMonitor/List.vue'
 | 
			
		||||
 | 
			
		||||
export default {
 | 
			
		||||
  data() {
 | 
			
		||||
    return {
 | 
			
		||||
      currIndex: 0
 | 
			
		||||
    }
 | 
			
		||||
  },
 | 
			
		||||
 | 
			
		||||
  components: {
 | 
			
		||||
    List,
 | 
			
		||||
    Statistics
 | 
			
		||||
  },
 | 
			
		||||
 | 
			
		||||
  computed: {
 | 
			
		||||
    tabBar() {
 | 
			
		||||
      const link = icon => `${this.$cdn}askform/${icon}.png`
 | 
			
		||||
      return [
 | 
			
		||||
        {text: "预警监控", iconPath: "bdlb1", selectedIconPath: "bdlb2"},
 | 
			
		||||
        {text: "数据统计", iconPath: "xjxm1", selectedIconPath: "xjxm2"}
 | 
			
		||||
      ].map(e => ({
 | 
			
		||||
        ...e,
 | 
			
		||||
        iconPath: link(e.iconPath),
 | 
			
		||||
        selectedIconPath: link(e.selectedIconPath)
 | 
			
		||||
      }))
 | 
			
		||||
    }
 | 
			
		||||
  },
 | 
			
		||||
 | 
			
		||||
  onLoad() {
 | 
			
		||||
    uni.$on('reload', () => {
 | 
			
		||||
      if (this.currIndex === 0) {
 | 
			
		||||
        this.$refs.list.reload()
 | 
			
		||||
      } else {
 | 
			
		||||
        this.$refs.addList.getList()
 | 
			
		||||
      }
 | 
			
		||||
    })
 | 
			
		||||
  },
 | 
			
		||||
 | 
			
		||||
  onReachBottom() {
 | 
			
		||||
    if (this.currIndex === 0) {
 | 
			
		||||
      this.$refs.list.getList()
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
</script>
 | 
			
		||||
 | 
			
		||||
<style lang="scss" scoped>
 | 
			
		||||
.povertyMonitor {
 | 
			
		||||
  .footer {
 | 
			
		||||
    display: flex;
 | 
			
		||||
    position: fixed;
 | 
			
		||||
    bottom: 0;
 | 
			
		||||
    left: 0;
 | 
			
		||||
    z-index: 11;
 | 
			
		||||
    width: 100%;
 | 
			
		||||
    height: 98px;
 | 
			
		||||
 | 
			
		||||
    div {
 | 
			
		||||
      flex: 1;
 | 
			
		||||
      height: 98px;
 | 
			
		||||
      line-height: 98px;
 | 
			
		||||
      text-align: center;
 | 
			
		||||
      color: #333333;
 | 
			
		||||
      font-size: 32px;
 | 
			
		||||
      background: #fff;
 | 
			
		||||
 | 
			
		||||
      &.active {
 | 
			
		||||
        color: #fff;
 | 
			
		||||
        background: #3192F4;
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
</style>
 | 
			
		||||
@@ -1,207 +0,0 @@
 | 
			
		||||
<template>
 | 
			
		||||
  <div class="list">
 | 
			
		||||
    <!-- <div class="tab">
 | 
			
		||||
      <span @click="changeTab(0)" :class="[currIndex === 0 ? 'active' : '']">高返贫风险人员</span>
 | 
			
		||||
      <span @click="changeTab(1)" :class="[currIndex === 1 ? 'active' : '']">监测对象风险解除</span>
 | 
			
		||||
    </div> -->
 | 
			
		||||
    <div class="list-wrapper">
 | 
			
		||||
      <div class="item" v-for="(item, index) in list" :key="index" hover-class="bg-hover" @click="toDetail(item.id)">
 | 
			
		||||
        <div class="item-top">
 | 
			
		||||
          <h2>{{ item.name || item.phone }}</h2>
 | 
			
		||||
          <span :style="{color: item.riskEliminationMethod ? '#2EA222' : '#FF4466'}">{{
 | 
			
		||||
              item.riskEliminationMethod ? '已解除' : '未解除'
 | 
			
		||||
            }}</span>
 | 
			
		||||
        </div>
 | 
			
		||||
        <p>{{ item.addressArea }} {{ item.address }}</p>
 | 
			
		||||
        <div class="item-bottom">家庭收入</div>
 | 
			
		||||
      </div>
 | 
			
		||||
      <AiEmpty v-if="!list.length && isMore" style="padding-bottom: 20px;"></AiEmpty>
 | 
			
		||||
    </div>
 | 
			
		||||
  </div>
 | 
			
		||||
</template>
 | 
			
		||||
 | 
			
		||||
<script>
 | 
			
		||||
 | 
			
		||||
export default {
 | 
			
		||||
  name: 'list',
 | 
			
		||||
 | 
			
		||||
  data() {
 | 
			
		||||
    return {
 | 
			
		||||
      list: [],
 | 
			
		||||
      isMore: false,
 | 
			
		||||
      current: 1,
 | 
			
		||||
      currIndex: 0
 | 
			
		||||
    }
 | 
			
		||||
  },
 | 
			
		||||
 | 
			
		||||
  created() {
 | 
			
		||||
    uni.showLoading()
 | 
			
		||||
    this.$nextTick(() => {
 | 
			
		||||
      this.getList()
 | 
			
		||||
    })
 | 
			
		||||
    uni.$on('reload', () => {
 | 
			
		||||
      this.reload()
 | 
			
		||||
    })
 | 
			
		||||
  },
 | 
			
		||||
 | 
			
		||||
  methods: {
 | 
			
		||||
    changeTab(index) {
 | 
			
		||||
      this.currIndex = index
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    toDetail(id) {
 | 
			
		||||
      uni.navigateTo({
 | 
			
		||||
        url: `./MonitorDetail?id=${id}&isFrom=1`
 | 
			
		||||
      })
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    reload() {
 | 
			
		||||
      this.isMore = false
 | 
			
		||||
      this.current = 1
 | 
			
		||||
 | 
			
		||||
      this.getList()
 | 
			
		||||
      uni.showLoading()
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    getList() {
 | 
			
		||||
      if (this.isMore) return
 | 
			
		||||
 | 
			
		||||
      this.$http.post(`/app/apppreventionreturntopoverty/list`, null, {
 | 
			
		||||
        params: {
 | 
			
		||||
          current: this.current,
 | 
			
		||||
          size: 15,
 | 
			
		||||
          status: 2
 | 
			
		||||
        }
 | 
			
		||||
      }).then(res => {
 | 
			
		||||
        if (res.code == 0) {
 | 
			
		||||
          if (this.current > 1) {
 | 
			
		||||
            this.list = [...this.list, ...res.data.records]
 | 
			
		||||
          } else {
 | 
			
		||||
            this.list = res.data.records
 | 
			
		||||
          }
 | 
			
		||||
 | 
			
		||||
          uni.hideLoading()
 | 
			
		||||
 | 
			
		||||
          if (res.data.records.length < 10) {
 | 
			
		||||
            this.isMore = true
 | 
			
		||||
 | 
			
		||||
            return false
 | 
			
		||||
          }
 | 
			
		||||
 | 
			
		||||
          this.current = this.current + 1
 | 
			
		||||
        } else {
 | 
			
		||||
          uni.hideLoading()
 | 
			
		||||
        }
 | 
			
		||||
      }).catch(() => {
 | 
			
		||||
        uni.hideLoading()
 | 
			
		||||
      })
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
</script>
 | 
			
		||||
 | 
			
		||||
<style lang="scss">
 | 
			
		||||
.list {
 | 
			
		||||
  padding: 30px 0 120px;
 | 
			
		||||
 | 
			
		||||
  .tab {
 | 
			
		||||
    display: flex;
 | 
			
		||||
    position: fixed;
 | 
			
		||||
    top: 0;
 | 
			
		||||
    left: 0;
 | 
			
		||||
    z-index: 1;
 | 
			
		||||
    align-items: center;
 | 
			
		||||
    width: 100%;
 | 
			
		||||
    height: 96px;
 | 
			
		||||
    padding: 0 60px;
 | 
			
		||||
    background: #FFFFFF;
 | 
			
		||||
    border-bottom: 1px solid #D4D4D4;
 | 
			
		||||
    box-sizing: border-box;
 | 
			
		||||
 | 
			
		||||
    * {
 | 
			
		||||
      box-sizing: border-box;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    span {
 | 
			
		||||
      position: relative;
 | 
			
		||||
      flex: 1;
 | 
			
		||||
      height: 96px;
 | 
			
		||||
      line-height: 96px;
 | 
			
		||||
      color: #000000;
 | 
			
		||||
      text-align: center;
 | 
			
		||||
      font-size: 32px;
 | 
			
		||||
 | 
			
		||||
      &::after {
 | 
			
		||||
        position: absolute;
 | 
			
		||||
        bottom: 0;
 | 
			
		||||
        left: 50%;
 | 
			
		||||
        width: 192px;
 | 
			
		||||
        height: 6px;
 | 
			
		||||
        background: transparent;
 | 
			
		||||
        transform: translateX(-50%);
 | 
			
		||||
        content: ' ';
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      &.active {
 | 
			
		||||
        color: #1365DD;
 | 
			
		||||
 | 
			
		||||
        &::after {
 | 
			
		||||
          background: #1365DD;
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  .list-wrapper {
 | 
			
		||||
    .item {
 | 
			
		||||
      margin: 0 32px 32px;
 | 
			
		||||
      padding-bottom: 10px;
 | 
			
		||||
      background: #FFFFFF;
 | 
			
		||||
      border-radius: 16px;
 | 
			
		||||
 | 
			
		||||
      .item-bottom {
 | 
			
		||||
        height: 94px;
 | 
			
		||||
        line-height: 94px;
 | 
			
		||||
        padding: 0 32px;
 | 
			
		||||
        border-top: 1px solid #DDDDDD;
 | 
			
		||||
        color: #3975C6;
 | 
			
		||||
        font-size: 26px;
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      .item-top {
 | 
			
		||||
        display: flex;
 | 
			
		||||
        align-items: center;
 | 
			
		||||
        justify-content: space-between;
 | 
			
		||||
        margin-bottom: 16px;
 | 
			
		||||
        padding: 32px 32px 0;
 | 
			
		||||
 | 
			
		||||
        h2 {
 | 
			
		||||
          color: #333333;
 | 
			
		||||
          font-size: 32px;
 | 
			
		||||
          font-weight: 700;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        span {
 | 
			
		||||
          color: #FFBB00;
 | 
			
		||||
 | 
			
		||||
          &.status0 {
 | 
			
		||||
            color: #FF4466;
 | 
			
		||||
          }
 | 
			
		||||
 | 
			
		||||
          &.status1 {
 | 
			
		||||
            color: #3975C6;
 | 
			
		||||
          }
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      p {
 | 
			
		||||
        line-height: 1.4;
 | 
			
		||||
        margin-bottom: 32px;
 | 
			
		||||
        padding: 0 32px;
 | 
			
		||||
        color: #999999;
 | 
			
		||||
        font-size: 26px;
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
</style>
 | 
			
		||||
@@ -1,329 +0,0 @@
 | 
			
		||||
<template>
 | 
			
		||||
  <div class="statistics">
 | 
			
		||||
    <div class="block"></div>
 | 
			
		||||
    <div class="charts-wrapper">
 | 
			
		||||
      <div class="total">
 | 
			
		||||
        <!-- <div class="total-item">
 | 
			
		||||
          <h2>2</h2>
 | 
			
		||||
          <p>高返贫风险人数</p>
 | 
			
		||||
        </div> -->
 | 
			
		||||
        <div class="total-item">
 | 
			
		||||
          <h2>{{ info.fxyjCount }}</h2>
 | 
			
		||||
          <p>监测对象风险预警</p>
 | 
			
		||||
        </div>
 | 
			
		||||
      </div>
 | 
			
		||||
      <div class="charts" v-if="false">
 | 
			
		||||
        <h2>本月高风险预警转换统计</h2>
 | 
			
		||||
        <div id="chart1" style="height: 400rpx"></div>
 | 
			
		||||
      </div>
 | 
			
		||||
      <div class="charts">
 | 
			
		||||
        <h2>本月纳入监测人群属性分析</h2>
 | 
			
		||||
        <div id="chart2" style="height: 400rpx"></div>
 | 
			
		||||
      </div>
 | 
			
		||||
      <div class="charts">
 | 
			
		||||
        <h2>本月风险消除方式统计</h2>
 | 
			
		||||
        <div id="chart3" style="height: 400rpx"></div>
 | 
			
		||||
      </div>
 | 
			
		||||
      <div class="charts">
 | 
			
		||||
        <h2>本月监测对象预警转换统计</h2>
 | 
			
		||||
        <div id="chart4" style="height: 400rpx"></div>
 | 
			
		||||
      </div>
 | 
			
		||||
    </div>
 | 
			
		||||
  </div>
 | 
			
		||||
</template>
 | 
			
		||||
 | 
			
		||||
<script>
 | 
			
		||||
import echarts from 'echarts'
 | 
			
		||||
 | 
			
		||||
export default {
 | 
			
		||||
  name: 'statistics',
 | 
			
		||||
 | 
			
		||||
  data() {
 | 
			
		||||
    return {
 | 
			
		||||
      chart1: null,
 | 
			
		||||
      chart2: null,
 | 
			
		||||
      chart3: null,
 | 
			
		||||
      chart4: null,
 | 
			
		||||
      info: {}
 | 
			
		||||
    }
 | 
			
		||||
  },
 | 
			
		||||
 | 
			
		||||
  mounted() {
 | 
			
		||||
    window.scrollTo(0, 0)
 | 
			
		||||
    // this.chart1 = echarts.init(document.getElementById('chart1'))
 | 
			
		||||
    this.chart4 = echarts.init(document.getElementById('chart4'))
 | 
			
		||||
    this.chart2 = echarts.init(document.getElementById('chart2'))
 | 
			
		||||
    this.chart3 = echarts.init(document.getElementById('chart3'))
 | 
			
		||||
    this.$dict.load(['fpType', 'fpRiskEliminationMethod'])
 | 
			
		||||
    this.getInfo()
 | 
			
		||||
  },
 | 
			
		||||
 | 
			
		||||
  methods: {
 | 
			
		||||
    getInfo() {
 | 
			
		||||
      this.$http.post(`/app/apppreventionreturntopoverty/statistics-h5`).then(res => {
 | 
			
		||||
        if (res.code === 0) {
 | 
			
		||||
          this.info = res.data
 | 
			
		||||
          this.initChart2(res.data.byxzMap)
 | 
			
		||||
          this.initChart3(res.data.byxcMap)
 | 
			
		||||
          this.initChart4(res.data.fxxcCount, res.data.fxyjCount)
 | 
			
		||||
        }
 | 
			
		||||
      })
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    initChart1() {
 | 
			
		||||
      const option = {
 | 
			
		||||
        tooltip: {
 | 
			
		||||
          trigger: 'item',
 | 
			
		||||
          formatter: '{a} <br/>{b} : {c}%'
 | 
			
		||||
        },
 | 
			
		||||
        color: ['#2896FF', '#09DBFE', '#61FDB9', '#FFBB69', '#8429FF', '#ea7ccc'],
 | 
			
		||||
        series: [
 | 
			
		||||
          {
 | 
			
		||||
            name: 'Funnel',
 | 
			
		||||
            type: 'funnel',
 | 
			
		||||
            left: '0%',
 | 
			
		||||
            top: 0,
 | 
			
		||||
            bottom: 0,
 | 
			
		||||
            width: '100%',
 | 
			
		||||
            min: 0,
 | 
			
		||||
            max: 100,
 | 
			
		||||
            minSize: '0%',
 | 
			
		||||
            maxSize: '100%',
 | 
			
		||||
            sort: 'descending',
 | 
			
		||||
            gap: 2,
 | 
			
		||||
            label: {
 | 
			
		||||
              show: true,
 | 
			
		||||
              position: 'inside'
 | 
			
		||||
            },
 | 
			
		||||
            labelLine: {
 | 
			
		||||
              length: 10,
 | 
			
		||||
              lineStyle: {
 | 
			
		||||
                width: 1,
 | 
			
		||||
                type: 'solid'
 | 
			
		||||
              }
 | 
			
		||||
            },
 | 
			
		||||
            itemStyle: {
 | 
			
		||||
              borderColor: '#fff',
 | 
			
		||||
              borderWidth: 1
 | 
			
		||||
            },
 | 
			
		||||
            emphasis: {
 | 
			
		||||
              label: {
 | 
			
		||||
                fontSize: 20
 | 
			
		||||
              }
 | 
			
		||||
            },
 | 
			
		||||
            data: [
 | 
			
		||||
              {value: 60, name: '总上报'},
 | 
			
		||||
              {value: 40, name: '纳入监测'},
 | 
			
		||||
              {value: 20, name: '已处理'}
 | 
			
		||||
            ]
 | 
			
		||||
          }
 | 
			
		||||
        ]
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      this.chart1.setOption(option)
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    initChart2(data) {
 | 
			
		||||
      const values = data.map(item => {
 | 
			
		||||
        return {
 | 
			
		||||
          value: item.typeCount,
 | 
			
		||||
          name: this.$dict.getLabel('fpType', item.type)
 | 
			
		||||
        }
 | 
			
		||||
      })
 | 
			
		||||
      const option = {
 | 
			
		||||
        tooltip: {
 | 
			
		||||
          trigger: 'item'
 | 
			
		||||
        },
 | 
			
		||||
        grid: {
 | 
			
		||||
          left: '0%',
 | 
			
		||||
          right: '0%',
 | 
			
		||||
          bottom: '0%',
 | 
			
		||||
          top: '40px',
 | 
			
		||||
          containLabel: true
 | 
			
		||||
        },
 | 
			
		||||
        color: ['#2896FF', '#09DBFE', '#61FDB9', '#FFBB69', '#8429FF', '#ea7ccc'],
 | 
			
		||||
        series: [
 | 
			
		||||
          {
 | 
			
		||||
            name: '本月纳入监测人群属性分析',
 | 
			
		||||
            type: 'pie',
 | 
			
		||||
            radius: ['40%', '70%'],
 | 
			
		||||
            emphasis: {
 | 
			
		||||
              label: {
 | 
			
		||||
                show: true,
 | 
			
		||||
                fontSize: '40',
 | 
			
		||||
                fontWeight: 'bold'
 | 
			
		||||
              }
 | 
			
		||||
            },
 | 
			
		||||
            data: values
 | 
			
		||||
          }
 | 
			
		||||
        ]
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      this.chart2.setOption(option)
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    initChart3(data) {
 | 
			
		||||
      const values = data.map(item => {
 | 
			
		||||
        return {
 | 
			
		||||
          value: item.typeCount,
 | 
			
		||||
          name: this.$dict.getLabel('fpRiskEliminationMethod', item.risk_elimination_method)
 | 
			
		||||
        }
 | 
			
		||||
      })
 | 
			
		||||
      const option = {
 | 
			
		||||
        tooltip: {
 | 
			
		||||
          trigger: 'item'
 | 
			
		||||
        },
 | 
			
		||||
        grid: {
 | 
			
		||||
          left: '0%',
 | 
			
		||||
          right: '0%',
 | 
			
		||||
          bottom: '0%',
 | 
			
		||||
          top: '40px',
 | 
			
		||||
          containLabel: true
 | 
			
		||||
        },
 | 
			
		||||
        color: ['#2896FF', '#09DBFE', '#61FDB9', '#FFBB69', '#8429FF', '#ea7ccc'],
 | 
			
		||||
        series: [
 | 
			
		||||
          {
 | 
			
		||||
            name: '本月纳入监测人群属性分析',
 | 
			
		||||
            type: 'pie',
 | 
			
		||||
            radius: ['40%', '70%'],
 | 
			
		||||
            emphasis: {
 | 
			
		||||
              label: {
 | 
			
		||||
                show: true,
 | 
			
		||||
                fontSize: '40',
 | 
			
		||||
                fontWeight: 'bold'
 | 
			
		||||
              }
 | 
			
		||||
            },
 | 
			
		||||
            data: values
 | 
			
		||||
          }
 | 
			
		||||
        ]
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      this.chart3.setOption(option)
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    initChart4(x, y) {
 | 
			
		||||
      const option = {
 | 
			
		||||
        tooltip: {
 | 
			
		||||
          trigger: 'item'
 | 
			
		||||
        },
 | 
			
		||||
        color: ['#2896FF', '#09DBFE', '#61FDB9', '#FFBB69', '#8429FF', '#ea7ccc'],
 | 
			
		||||
        series: [
 | 
			
		||||
          {
 | 
			
		||||
            name: '',
 | 
			
		||||
            type: 'funnel',
 | 
			
		||||
            left: '0%',
 | 
			
		||||
            top: 0,
 | 
			
		||||
            bottom: 0,
 | 
			
		||||
            width: '100%',
 | 
			
		||||
            min: 0,
 | 
			
		||||
            max: 100,
 | 
			
		||||
            minSize: '0%',
 | 
			
		||||
            maxSize: '100%',
 | 
			
		||||
            sort: 'descending',
 | 
			
		||||
            gap: 2,
 | 
			
		||||
            label: {
 | 
			
		||||
              show: true,
 | 
			
		||||
              position: 'inside'
 | 
			
		||||
            },
 | 
			
		||||
            labelLine: {
 | 
			
		||||
              length: 10,
 | 
			
		||||
              lineStyle: {
 | 
			
		||||
                width: 1,
 | 
			
		||||
                type: 'solid'
 | 
			
		||||
              }
 | 
			
		||||
            },
 | 
			
		||||
            itemStyle: {
 | 
			
		||||
              borderColor: '#fff',
 | 
			
		||||
              borderWidth: 1
 | 
			
		||||
            },
 | 
			
		||||
            emphasis: {
 | 
			
		||||
              label: {
 | 
			
		||||
                fontSize: 20
 | 
			
		||||
              }
 | 
			
		||||
            },
 | 
			
		||||
            data: [
 | 
			
		||||
              {value: y, name: '纳入监测'},
 | 
			
		||||
              {value: x, name: '消除监测'}
 | 
			
		||||
            ]
 | 
			
		||||
          }
 | 
			
		||||
        ]
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      this.chart4.setOption(option)
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
</script>
 | 
			
		||||
 | 
			
		||||
<style lang="scss">
 | 
			
		||||
.statistics {
 | 
			
		||||
  padding: 40px 0 120px;
 | 
			
		||||
 | 
			
		||||
  .block {
 | 
			
		||||
    position: absolute;
 | 
			
		||||
    top: 0;
 | 
			
		||||
    left: 0;
 | 
			
		||||
    z-index: 1;
 | 
			
		||||
    width: 100%;
 | 
			
		||||
    height: 140px;
 | 
			
		||||
    background: #3975C6;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  .charts-wrapper {
 | 
			
		||||
    position: relative;
 | 
			
		||||
    z-index: 1;
 | 
			
		||||
    padding: 0 32px;
 | 
			
		||||
 | 
			
		||||
    .total {
 | 
			
		||||
      display: flex;
 | 
			
		||||
      align-items: center;
 | 
			
		||||
      height: 200px;
 | 
			
		||||
      background: #FFFFFF;
 | 
			
		||||
      border-radius: 8px;
 | 
			
		||||
 | 
			
		||||
      .total-item {
 | 
			
		||||
        flex: 1;
 | 
			
		||||
        text-align: center;
 | 
			
		||||
 | 
			
		||||
        h2 {
 | 
			
		||||
          font-size: 64px;
 | 
			
		||||
          color: #3192F4;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        p {
 | 
			
		||||
          margin-top: 10px;
 | 
			
		||||
          color: #999999;
 | 
			
		||||
          font-size: 28px;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        &:last-child {
 | 
			
		||||
          h2 {
 | 
			
		||||
            color: #F09535;
 | 
			
		||||
          }
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    .charts {
 | 
			
		||||
      margin-top: 32px;
 | 
			
		||||
      background: #FFFFFF;
 | 
			
		||||
      border-radius: 8px;
 | 
			
		||||
 | 
			
		||||
      & > h2 {
 | 
			
		||||
        height: 96px;
 | 
			
		||||
        line-height: 96px;
 | 
			
		||||
        padding: 0 32px;
 | 
			
		||||
        color: #333333;
 | 
			
		||||
        font-size: 32px;
 | 
			
		||||
        border-bottom: 1px solid #DDDDDD;
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      & > div {
 | 
			
		||||
        width: 686px;
 | 
			
		||||
        margin: 0 auto;
 | 
			
		||||
        padding: 32px 0;
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
</style>
 | 
			
		||||
@@ -1,251 +0,0 @@
 | 
			
		||||
<template>
 | 
			
		||||
  <div class="detail" v-if="pageShow">
 | 
			
		||||
    <div class="info">
 | 
			
		||||
      <div class="info-top">
 | 
			
		||||
        <div class="left">
 | 
			
		||||
          <image src="/static/images/avatar.png"/>
 | 
			
		||||
          <h2>{{ info.name || info.phone }}</h2>
 | 
			
		||||
        </div>
 | 
			
		||||
        <div class="right">
 | 
			
		||||
          <image src="/static/images/phone.png"/>
 | 
			
		||||
          <p>拨打电话</p>
 | 
			
		||||
        </div>
 | 
			
		||||
      </div>
 | 
			
		||||
      <div class="info-item__wrapper">
 | 
			
		||||
        <div class="info-item">
 | 
			
		||||
          <label>风险类型:</label>
 | 
			
		||||
          <span>大额医疗支出</span>
 | 
			
		||||
        </div>
 | 
			
		||||
        <div class="info-item">
 | 
			
		||||
          <label>联系电话:</label>
 | 
			
		||||
          <span>13782909781</span>
 | 
			
		||||
        </div>
 | 
			
		||||
        <div class="info-item">
 | 
			
		||||
          <label>所在地址:</label>
 | 
			
		||||
          <span>{{ info.addressArea }} {{ info.address }}</span>
 | 
			
		||||
        </div>
 | 
			
		||||
        <div class="info-item">
 | 
			
		||||
          <label>情况描述:</label>
 | 
			
		||||
          <span>全身大面积烧伤,预计手术费30万元</span>
 | 
			
		||||
        </div>
 | 
			
		||||
      </div>
 | 
			
		||||
    </div>
 | 
			
		||||
    <div class="result" v-if="false">
 | 
			
		||||
      <div class="result-top">
 | 
			
		||||
        <h2>处理结果</h2>
 | 
			
		||||
        <span>已解除风险</span>
 | 
			
		||||
      </div>
 | 
			
		||||
      <div class="info-item__wrapper">
 | 
			
		||||
        <div class="info-item">
 | 
			
		||||
          <label>受理人:</label>
 | 
			
		||||
          <span>张三</span>
 | 
			
		||||
        </div>
 | 
			
		||||
        <div class="info-item">
 | 
			
		||||
          <label>处理时间:</label>
 | 
			
		||||
          <span>2021-10-10 10:10:10</span>
 | 
			
		||||
        </div>
 | 
			
		||||
        <div class="info-item">
 | 
			
		||||
          <label>联系方式:</label>
 | 
			
		||||
          <span>17964042574</span>
 | 
			
		||||
        </div>
 | 
			
		||||
        <div class="info-item">
 | 
			
		||||
          <label>处理结果:</label>
 | 
			
		||||
          <span>经现场了解,该人员家庭有多出房产,无返贫风险倾向。</span>
 | 
			
		||||
        </div>
 | 
			
		||||
        <div class="info-item">
 | 
			
		||||
          <label>图片:</label>
 | 
			
		||||
          <div class="imgs">
 | 
			
		||||
            <image v-for="(item, index) in 6" :key="index" src="/static/images/avatar.png"/>
 | 
			
		||||
          </div>
 | 
			
		||||
        </div>
 | 
			
		||||
      </div>
 | 
			
		||||
    </div>
 | 
			
		||||
    <div class="footer">
 | 
			
		||||
      <span>纳入监测对象</span>
 | 
			
		||||
      <span @click="linkTo">解除预警</span>
 | 
			
		||||
    </div>
 | 
			
		||||
  </div>
 | 
			
		||||
</template>
 | 
			
		||||
 | 
			
		||||
<script>
 | 
			
		||||
export default {
 | 
			
		||||
  name: 'detail',
 | 
			
		||||
 | 
			
		||||
  data() {
 | 
			
		||||
    return {
 | 
			
		||||
      info: {},
 | 
			
		||||
      id: '',
 | 
			
		||||
      pageShow: false
 | 
			
		||||
    }
 | 
			
		||||
  },
 | 
			
		||||
 | 
			
		||||
  onLoad(query) {
 | 
			
		||||
    uni.showLoading()
 | 
			
		||||
    this.id = query.id
 | 
			
		||||
 | 
			
		||||
    this.getInfo(query.id)
 | 
			
		||||
  },
 | 
			
		||||
 | 
			
		||||
  methods: {
 | 
			
		||||
    linkTo() {
 | 
			
		||||
      uni.navigateTo({
 | 
			
		||||
        url: './povertyMonitorForm'
 | 
			
		||||
      })
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    getInfo(id) {
 | 
			
		||||
      this.$http.post(`/app/apppreventionreturntopoverty/queryDetailById?id=${id}`).then(res => {
 | 
			
		||||
        if (res.code === 0) {
 | 
			
		||||
          this.info = res.data
 | 
			
		||||
 | 
			
		||||
          this.pageShow = true
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        uni.hideLoading()
 | 
			
		||||
      })
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
</script>
 | 
			
		||||
 | 
			
		||||
<style lang="scss">
 | 
			
		||||
.detail {
 | 
			
		||||
  padding-bottom: 122px;
 | 
			
		||||
 | 
			
		||||
  * {
 | 
			
		||||
    box-sizing: border-box;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  .footer {
 | 
			
		||||
    display: flex;
 | 
			
		||||
    position: fixed;
 | 
			
		||||
    left: 0;
 | 
			
		||||
    bottom: 0;
 | 
			
		||||
    z-index: 1;
 | 
			
		||||
    width: 100%;
 | 
			
		||||
    height: 112px;
 | 
			
		||||
 | 
			
		||||
    span {
 | 
			
		||||
      flex: 1;
 | 
			
		||||
      height: 112px;
 | 
			
		||||
      line-height: 112px;
 | 
			
		||||
      text-align: center;
 | 
			
		||||
      color: #FF4466;
 | 
			
		||||
      font-size: 32px;
 | 
			
		||||
      background: #fff;
 | 
			
		||||
 | 
			
		||||
      &:last-child {
 | 
			
		||||
        color: #fff;
 | 
			
		||||
        background: #3192F4;
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  .info {
 | 
			
		||||
    background: #fff;
 | 
			
		||||
 | 
			
		||||
    .info-top {
 | 
			
		||||
      display: flex;
 | 
			
		||||
      align-items: center;
 | 
			
		||||
      justify-content: space-between;
 | 
			
		||||
      height: 136px;
 | 
			
		||||
      padding: 0 32px;
 | 
			
		||||
      background: #FFFFFF;
 | 
			
		||||
      border-bottom: 1px solid #D8DDE6;
 | 
			
		||||
 | 
			
		||||
      .left {
 | 
			
		||||
        display: flex;
 | 
			
		||||
        align-items: center;
 | 
			
		||||
 | 
			
		||||
        image {
 | 
			
		||||
          width: 80px;
 | 
			
		||||
          height: 80px;
 | 
			
		||||
          margin-right: 16px;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        h2 {
 | 
			
		||||
          color: #333333;
 | 
			
		||||
          font-size: 36px;
 | 
			
		||||
          font-weight: 600;
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      .right {
 | 
			
		||||
        text-align: center;
 | 
			
		||||
 | 
			
		||||
        image {
 | 
			
		||||
          width: 64px;
 | 
			
		||||
          height: 64px;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        p {
 | 
			
		||||
          color: #3D94FB;
 | 
			
		||||
          font-size: 24px;
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  .result {
 | 
			
		||||
    margin-top: 20px;
 | 
			
		||||
    background: #fff;
 | 
			
		||||
 | 
			
		||||
    .result-top {
 | 
			
		||||
      display: flex;
 | 
			
		||||
      align-items: center;
 | 
			
		||||
      justify-content: space-between;
 | 
			
		||||
      height: 96px;
 | 
			
		||||
      padding: 0 32px;
 | 
			
		||||
      border-bottom: 1px solid #DDDDDD;
 | 
			
		||||
 | 
			
		||||
      h2 {
 | 
			
		||||
        font-size: 32px;
 | 
			
		||||
        color: #333;
 | 
			
		||||
        font-weight: 600;
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      span {
 | 
			
		||||
        color: #2EA222;
 | 
			
		||||
        font-size: 30px;
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  .info-item__wrapper {
 | 
			
		||||
    padding: 32px;
 | 
			
		||||
 | 
			
		||||
    .info-item {
 | 
			
		||||
      display: flex;
 | 
			
		||||
      margin-bottom: 12px;
 | 
			
		||||
 | 
			
		||||
      label {
 | 
			
		||||
        flex-shrink: 0;
 | 
			
		||||
        width: 150px;
 | 
			
		||||
        line-height: 1.3;
 | 
			
		||||
        text-align: right;
 | 
			
		||||
        color: #999999;
 | 
			
		||||
        font-size: 30px;
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      span {
 | 
			
		||||
        flex: 1;
 | 
			
		||||
        line-height: 1.3;
 | 
			
		||||
        text-align: justify;
 | 
			
		||||
        color: #343D65;
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      .imgs {
 | 
			
		||||
        flex: 1;
 | 
			
		||||
 | 
			
		||||
        image {
 | 
			
		||||
          width: 160px;
 | 
			
		||||
          height: 160px;
 | 
			
		||||
          margin-right: 16px;
 | 
			
		||||
          margin-bottom: 16px;
 | 
			
		||||
          border-radius: 4px;
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
</style>
 | 
			
		||||
@@ -1,107 +0,0 @@
 | 
			
		||||
<template>
 | 
			
		||||
  <div class="form">
 | 
			
		||||
    <div class="form-type">
 | 
			
		||||
      <h2>处理方式</h2>
 | 
			
		||||
      <span>解除风险</span>
 | 
			
		||||
    </div>
 | 
			
		||||
    <div class="form-item form-item__textarea">
 | 
			
		||||
      <div class="form-item__title">
 | 
			
		||||
        <h2>帮扶结果</h2>
 | 
			
		||||
      </div>
 | 
			
		||||
      <textarea :maxlength="-1" v-model="result" placeholder="请详细说明跟进情况"></textarea>
 | 
			
		||||
    </div>
 | 
			
		||||
    <div class="form-item form-item__imgs">
 | 
			
		||||
      <div class="form-item__title">
 | 
			
		||||
        <h2>图片</h2>
 | 
			
		||||
        <i>(最多9张)</i>
 | 
			
		||||
      </div>
 | 
			
		||||
      <div>
 | 
			
		||||
        <AiUploader :limit="9" multiple></AiUploader>
 | 
			
		||||
      </div>
 | 
			
		||||
    </div>
 | 
			
		||||
    <div class="btn">提交</div>
 | 
			
		||||
  </div>
 | 
			
		||||
</template>
 | 
			
		||||
 | 
			
		||||
<script>
 | 
			
		||||
 | 
			
		||||
export default {
 | 
			
		||||
  data() {
 | 
			
		||||
    return {
 | 
			
		||||
      result: '',
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
  },
 | 
			
		||||
}
 | 
			
		||||
</script>
 | 
			
		||||
 | 
			
		||||
<style lang="scss">
 | 
			
		||||
.form {
 | 
			
		||||
  padding-bottom: 120px;
 | 
			
		||||
 | 
			
		||||
  div {
 | 
			
		||||
    margin-bottom: 16px;
 | 
			
		||||
    background: #fff;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  .form-item {
 | 
			
		||||
    padding: 32px;
 | 
			
		||||
 | 
			
		||||
    .form-item__title {
 | 
			
		||||
      display: flex;
 | 
			
		||||
      align-items: center;
 | 
			
		||||
      margin-bottom: 34px;
 | 
			
		||||
 | 
			
		||||
      h2 {
 | 
			
		||||
        color: #333333;
 | 
			
		||||
        font-weight: normal;
 | 
			
		||||
        font-size: 32px;
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      i {
 | 
			
		||||
        color: #999999;
 | 
			
		||||
        font-size: 28px;
 | 
			
		||||
        font-style: normal;
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    textarea {
 | 
			
		||||
      width: 100%;
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  .form-type {
 | 
			
		||||
    display: flex;
 | 
			
		||||
    align-items: center;
 | 
			
		||||
    justify-content: space-between;
 | 
			
		||||
    height: 112px;
 | 
			
		||||
    padding: 0 32px;
 | 
			
		||||
 | 
			
		||||
    h2 {
 | 
			
		||||
      font-weight: normal;
 | 
			
		||||
      color: #333333;
 | 
			
		||||
      font-size: 32px;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    span {
 | 
			
		||||
      color: #999999;
 | 
			
		||||
      font-size: 28px;
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  .btn {
 | 
			
		||||
    position: fixed;
 | 
			
		||||
    left: 0;
 | 
			
		||||
    bottom: 0;
 | 
			
		||||
    z-index: 11;
 | 
			
		||||
    width: 100%;
 | 
			
		||||
    height: 112px;
 | 
			
		||||
    line-height: 112px;
 | 
			
		||||
    margin: 0;
 | 
			
		||||
    text-align: center;
 | 
			
		||||
    color: #FFFFFF;
 | 
			
		||||
    font-size: 32px;
 | 
			
		||||
    background: #3192F4;
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
</style>
 | 
			
		||||
@@ -1,98 +0,0 @@
 | 
			
		||||
<template>
 | 
			
		||||
  <section class="comp">
 | 
			
		||||
    <AiResult v-if="error" status="error" :tips="error"/>
 | 
			
		||||
    <template v-else-if="isNormal">
 | 
			
		||||
      <component ref="currentTab" :is="currentTab.comp" :isNormal="isNormal"/>
 | 
			
		||||
      <AiTabbar :active.sync="active" :list="bottomBar"/>
 | 
			
		||||
    </template>
 | 
			
		||||
    <AiLoading v-else tips="居民管理加载中..."/>
 | 
			
		||||
  </section>
 | 
			
		||||
</template>
 | 
			
		||||
<script>
 | 
			
		||||
import {mapActions} from "vuex";
 | 
			
		||||
import ResidentSta from "./components/residentSta";
 | 
			
		||||
import ResidentList from "./components/residentList";
 | 
			
		||||
import GroupList from "./components/groupList";
 | 
			
		||||
 | 
			
		||||
export default {
 | 
			
		||||
  name: "AppResident",
 | 
			
		||||
  appName: "居民管理",
 | 
			
		||||
  components: {GroupList, ResidentList, ResidentSta},
 | 
			
		||||
  data() {
 | 
			
		||||
    return {
 | 
			
		||||
      error: "",
 | 
			
		||||
      active: 0,
 | 
			
		||||
      isNormal: false
 | 
			
		||||
    }
 | 
			
		||||
  },
 | 
			
		||||
  computed: {
 | 
			
		||||
    bottomBar() {
 | 
			
		||||
      const link = icon => `${this.$cdn}resident/${icon}.png`
 | 
			
		||||
      return [
 | 
			
		||||
        {text: "统计分析", iconPath: "qwhome2", selectedIconPath: "qwhome1", comp: ResidentSta},
 | 
			
		||||
        {text: "居民列表", iconPath: "qwjmda1", selectedIconPath: "qwjmda2", comp: ResidentList},
 | 
			
		||||
        {text: "居民群列表", iconPath: "qwjmq1", selectedIconPath: "qwjmq2", comp: GroupList},
 | 
			
		||||
      ].map(e => ({
 | 
			
		||||
        ...e,
 | 
			
		||||
        iconPath: link(e.iconPath),
 | 
			
		||||
        selectedIconPath: link(e.selectedIconPath)
 | 
			
		||||
      }))
 | 
			
		||||
    },
 | 
			
		||||
    currentTab() {
 | 
			
		||||
      return this.bottomBar?.[this.active] || {}
 | 
			
		||||
    }
 | 
			
		||||
  },
 | 
			
		||||
  methods: {
 | 
			
		||||
    ...mapActions(['injectJWeixin', "wxInvoke"]),
 | 
			
		||||
 | 
			
		||||
  },
 | 
			
		||||
  created() {
 | 
			
		||||
    if (this.$route.hash == "#dev") {
 | 
			
		||||
      this.isNormal = true
 | 
			
		||||
    } else this.injectJWeixin(["getContext", "getCurExternalChat"]).then(() => {
 | 
			
		||||
      this.wxInvoke(['getContext', {}, res => {
 | 
			
		||||
        if (res.err_msg == "getContext:ok") {
 | 
			
		||||
          if (res.entry == 'normal') this.isNormal = true
 | 
			
		||||
          else this.wxInvoke(['getCurExternalChat', {}, res => {
 | 
			
		||||
            if (res?.err_msg == 'getCurExternalChat:ok') {
 | 
			
		||||
              wx.redirectTo({
 | 
			
		||||
                url: "./groupResident"
 | 
			
		||||
              })
 | 
			
		||||
            } else {
 | 
			
		||||
              wx.redirectTo({
 | 
			
		||||
                url: "./resident"
 | 
			
		||||
              })
 | 
			
		||||
            }
 | 
			
		||||
          }])
 | 
			
		||||
        } else {
 | 
			
		||||
          this.error = "wxwork:获取进入场景失败"
 | 
			
		||||
        }
 | 
			
		||||
      }])
 | 
			
		||||
    }).catch(() => {
 | 
			
		||||
      this.error = "应用加载失败"
 | 
			
		||||
    })
 | 
			
		||||
  },
 | 
			
		||||
  onReachBottom() {
 | 
			
		||||
    if (typeof this.$refs?.currentTab?.reachBottom == 'function') this.$refs?.currentTab.reachBottom()
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
</script>
 | 
			
		||||
<style lang="scss" scoped>
 | 
			
		||||
.comp {
 | 
			
		||||
  height: 100%;
 | 
			
		||||
 | 
			
		||||
  ::v-deep .u-tabbar__content__item {
 | 
			
		||||
    padding: 0;
 | 
			
		||||
 | 
			
		||||
    .u-icon__img {
 | 
			
		||||
      height: 44px !important;
 | 
			
		||||
      width: 44px !important;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    .u-tabbar__content__item__text {
 | 
			
		||||
      margin-top: 4px;
 | 
			
		||||
      font-size: 22px;
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
</style>
 | 
			
		||||
@@ -1,129 +0,0 @@
 | 
			
		||||
<template>
 | 
			
		||||
  <section class="document">
 | 
			
		||||
    <div class="card">
 | 
			
		||||
      <div class="info">
 | 
			
		||||
        <u-image border-radius="4" :src="top.detail.avatar" width="118" height="118"/>
 | 
			
		||||
        <div class="fill">
 | 
			
		||||
          <b>{{ top.detail.realName || top.detail.name }}</b>
 | 
			
		||||
          <u-row>
 | 
			
		||||
            <span class="idNumber" v-html="IDObj.id"/>
 | 
			
		||||
            <a @tap="showID=!showID">{{ IDObj.btn }}</a>
 | 
			
		||||
          </u-row>
 | 
			
		||||
        </div>
 | 
			
		||||
      </div>
 | 
			
		||||
      <AiCell label="性别">{{ $dict.getLabel("sex", resident.sex) || "-" }}</AiCell>
 | 
			
		||||
      <AiCell label="出生日期">{{ resident.birthDate }}</AiCell>
 | 
			
		||||
      <AiCell label="年龄">{{ resident.age }}</AiCell>
 | 
			
		||||
      <AiCell label="籍贯">{{ resident.birthplaceAreaName }}</AiCell>
 | 
			
		||||
      <AiCell label="民族">{{ $dict.getLabel("nation", resident.nation) || "-" }}</AiCell>
 | 
			
		||||
      <AiCell label="文化程度">{{ $dict.getLabel("education", resident.education) || "-" }}</AiCell>
 | 
			
		||||
      <AiCell label="兵役状况">{{ $dict.getLabel("militaryStatus", resident.militaryStatus) || "-" }}</AiCell>
 | 
			
		||||
      <AiCell label="政治面貌">{{ $dict.getLabel("politicsStatus", resident.politicsStatus) || "-" }}</AiCell>
 | 
			
		||||
      <AiCell label="职业">{{ $dict.getLabel("job", resident.job) || "-" }}</AiCell>
 | 
			
		||||
      <AiCell label="宗教信仰">{{ $dict.getLabel("faithType", resident.faithType) || "-" }}</AiCell>
 | 
			
		||||
    </div>
 | 
			
		||||
    <div class="card">
 | 
			
		||||
      <AiCell title label="联络信息"/>
 | 
			
		||||
      <AiCell label="联系方式">{{ resident.phone }}</AiCell>
 | 
			
		||||
      <AiCell label="现住址">{{ resident.currentAreaName + resident.currentAddress }}</AiCell>
 | 
			
		||||
    </div>
 | 
			
		||||
    <div class="card">
 | 
			
		||||
      <AiCell title label="家庭信息"/>
 | 
			
		||||
      <AiCell label="是否户主">{{ $dict.getLabel("householdName", resident.householdName) || "-" }}</AiCell>
 | 
			
		||||
      <AiCell label="与户主关系">{{ $dict.getLabel("householdRelation", resident.householdRelation) || "-" }}</AiCell>
 | 
			
		||||
      <AiCell label="现住址">{{ resident.householdAreaName + resident.householdAddress }}</AiCell>
 | 
			
		||||
    </div>
 | 
			
		||||
    <div class="card">
 | 
			
		||||
      <AiCell title label="家庭成员"/>
 | 
			
		||||
      <AiTable :data="family" :colConfigs="colConfigs"/>
 | 
			
		||||
    </div>
 | 
			
		||||
  </section>
 | 
			
		||||
</template>
 | 
			
		||||
 | 
			
		||||
<script>
 | 
			
		||||
 | 
			
		||||
export default {
 | 
			
		||||
  name: "document",
 | 
			
		||||
  inject: ['top'],
 | 
			
		||||
  computed: {
 | 
			
		||||
    IDObj() {
 | 
			
		||||
      return this.showID ? {
 | 
			
		||||
        id: this.resident?.idNumber,
 | 
			
		||||
        btn: '隐藏'
 | 
			
		||||
      } : {
 | 
			
		||||
        id: this.resident?.idNumber?.replace(/(\d{10}).+/g, '$1******'),
 | 
			
		||||
        btn: '显示'
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    colConfigs() {
 | 
			
		||||
      return [
 | 
			
		||||
        {label: "与户主关系", prop: "householdRelation", width: '160rpx', dict: "householdRelation"},
 | 
			
		||||
        {label: "姓名", prop: "name", width: '120rpx'},
 | 
			
		||||
        {label: "性别", prop: "sex", dict: "sex"},
 | 
			
		||||
        {label: "年龄", prop: "age"},
 | 
			
		||||
        {label: "身份证号", prop: "idNumber", width: '320rpx'},
 | 
			
		||||
      ]
 | 
			
		||||
    },
 | 
			
		||||
    resident() {
 | 
			
		||||
      let obj = {}
 | 
			
		||||
      Object.keys(this.top.detail?.residentInfo?.resident || {}).map(e => {
 | 
			
		||||
        obj[e] = this.top.detail?.residentInfo?.resident[e] || ""
 | 
			
		||||
      })
 | 
			
		||||
      return obj
 | 
			
		||||
    },
 | 
			
		||||
    family() {
 | 
			
		||||
      return this.top.detail?.residentInfo?.family?.map(e => ({...e, householdRelation: e.householdRelation || "户主"}))
 | 
			
		||||
    }
 | 
			
		||||
  },
 | 
			
		||||
  data() {
 | 
			
		||||
    return {
 | 
			
		||||
      showID: false,
 | 
			
		||||
      familyList: []
 | 
			
		||||
    }
 | 
			
		||||
  },
 | 
			
		||||
  created() {
 | 
			
		||||
    this.$dict.load("sex", "nation", "education", "job",
 | 
			
		||||
        "faithType", "politicsStatus", "militaryStatus", "householdRelation",
 | 
			
		||||
        "householdName")
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
</script>
 | 
			
		||||
 | 
			
		||||
<style lang="scss" scoped>
 | 
			
		||||
.document {
 | 
			
		||||
  overflow-y: auto;
 | 
			
		||||
  background: #F5F5F5;
 | 
			
		||||
 | 
			
		||||
  .info {
 | 
			
		||||
    height: 186px;
 | 
			
		||||
    width: 100%;
 | 
			
		||||
    display: flex;
 | 
			
		||||
    align-items: center;
 | 
			
		||||
 | 
			
		||||
    .fill {
 | 
			
		||||
      color: #3C7FC8;
 | 
			
		||||
      margin-left: 24px;
 | 
			
		||||
      font-size: 28px;
 | 
			
		||||
      line-height: 40px;
 | 
			
		||||
      display: flex;
 | 
			
		||||
      flex-direction: column;
 | 
			
		||||
 | 
			
		||||
      b {
 | 
			
		||||
        font-size: 36px;
 | 
			
		||||
        color: #333;
 | 
			
		||||
        margin-bottom: 8px;
 | 
			
		||||
        line-height: 50px;
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      a {
 | 
			
		||||
        cursor: pointer;
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      .idNumber {
 | 
			
		||||
        margin-right: 16px;
 | 
			
		||||
        color: #999;
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
</style>
 | 
			
		||||
@@ -1,178 +0,0 @@
 | 
			
		||||
<template>
 | 
			
		||||
  <section class="groupList">
 | 
			
		||||
    <AiTopFixed>
 | 
			
		||||
      <u-search placeholder="请输入群名、群主名" :show-action="false" search-icon-color="#ccc"
 | 
			
		||||
                v-model="search.name" @search="page.current=1,getList()"/>
 | 
			
		||||
      <AiCell>
 | 
			
		||||
        <b slot="label" class="title">共<i v-html="page.total||0"/>个居民群</b>
 | 
			
		||||
      </AiCell>
 | 
			
		||||
    </AiTopFixed>
 | 
			
		||||
    <div class="mainPane">
 | 
			
		||||
      <AiCell v-for="item in list" :key="item.id" @click.native="showResident(item)">
 | 
			
		||||
        <template #label>
 | 
			
		||||
          <AiImage :src="item.avatar" preview/>
 | 
			
		||||
        </template>
 | 
			
		||||
        <div class="card column start" flex>
 | 
			
		||||
          <div flex class="groupName">
 | 
			
		||||
            <b>{{ item.name || "群聊" }}</b>
 | 
			
		||||
            <div class="personCount" v-if="item.personCount">({{ item.personCount }})</div>
 | 
			
		||||
          </div>
 | 
			
		||||
          <div class="owner" v-html="`群主:${item.ownerName}`"/>
 | 
			
		||||
          <div flex class="trends">
 | 
			
		||||
            <div flex v-html="`今日入群:<em>${item.increase||0}</em>`"/>
 | 
			
		||||
            <div flex v-html="`今日退群:<p>${item.decrease||0}</p>`"/>
 | 
			
		||||
          </div>
 | 
			
		||||
        </div>
 | 
			
		||||
      </AiCell>
 | 
			
		||||
    </div>
 | 
			
		||||
  </section>
 | 
			
		||||
</template>
 | 
			
		||||
 | 
			
		||||
<script>
 | 
			
		||||
 | 
			
		||||
export default {
 | 
			
		||||
  name: "groupList",
 | 
			
		||||
  data() {
 | 
			
		||||
    return {
 | 
			
		||||
      page: {current: 1, size: 10, total: 0},
 | 
			
		||||
      search: {name: ""},
 | 
			
		||||
      list: []
 | 
			
		||||
    }
 | 
			
		||||
  },
 | 
			
		||||
  methods: {
 | 
			
		||||
    getList() {
 | 
			
		||||
      this.$http.post("/app/wxcp/wxgroup/list", null, {
 | 
			
		||||
        params: {...this.page, ...this.search}
 | 
			
		||||
      }).then(res => {
 | 
			
		||||
        if (res?.data) {
 | 
			
		||||
          let meta = res.data.records?.map(e => ({
 | 
			
		||||
            ...e,
 | 
			
		||||
            avatar: e?.avatar || this.$cdn + "groupAvatar.png"
 | 
			
		||||
          }))
 | 
			
		||||
          if (this.page.current > 1) {
 | 
			
		||||
            this.list = [...this.list, ...meta]
 | 
			
		||||
          } else this.list = meta
 | 
			
		||||
          this.page.total = res.data.total
 | 
			
		||||
        }
 | 
			
		||||
      })
 | 
			
		||||
    },
 | 
			
		||||
    reachBottom() {
 | 
			
		||||
      if (this.page.total > this.list.length) {
 | 
			
		||||
        this.page.current++
 | 
			
		||||
        this.getList()
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    showResident({id}) {
 | 
			
		||||
      id && uni.navigateTo({
 | 
			
		||||
        url: './groupResident?id=' + id
 | 
			
		||||
      })
 | 
			
		||||
    }
 | 
			
		||||
  },
 | 
			
		||||
  created() {
 | 
			
		||||
    this.getList()
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
</script>
 | 
			
		||||
 | 
			
		||||
<style lang="scss" scoped>
 | 
			
		||||
.groupList {
 | 
			
		||||
  ::v-deep .AiTopFixed {
 | 
			
		||||
    b.title {
 | 
			
		||||
      color: #333;
 | 
			
		||||
      font-size: 32px;
 | 
			
		||||
 | 
			
		||||
      & > i {
 | 
			
		||||
        color: #267FCE;
 | 
			
		||||
        font-style: normal;
 | 
			
		||||
        margin: 0 4px;
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  ::v-deep .mainPane {
 | 
			
		||||
    background: #fff;
 | 
			
		||||
    padding: 0 32px;
 | 
			
		||||
 | 
			
		||||
    .AiCell {
 | 
			
		||||
      align-items: center;
 | 
			
		||||
      height: 230px;
 | 
			
		||||
      justify-content: flex-start;
 | 
			
		||||
 | 
			
		||||
      .content {
 | 
			
		||||
        flex: 1;
 | 
			
		||||
        min-width: 0;
 | 
			
		||||
        height: 100%;
 | 
			
		||||
        max-width: unset;
 | 
			
		||||
        border-bottom: 1px solid rgba(221, 221, 221, 1);
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    .card {
 | 
			
		||||
      height: 100%;
 | 
			
		||||
      justify-content: center;
 | 
			
		||||
 | 
			
		||||
      b {
 | 
			
		||||
        font-size: 36px;
 | 
			
		||||
        white-space: nowrap;
 | 
			
		||||
        overflow: hidden;
 | 
			
		||||
        text-overflow: ellipsis;
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      .tag {
 | 
			
		||||
        justify-content: center;
 | 
			
		||||
        background: #F3F4F7;
 | 
			
		||||
        border-radius: 4px;
 | 
			
		||||
        padding: 0 16px;
 | 
			
		||||
        font-size: 28px;
 | 
			
		||||
        font-weight: 400;
 | 
			
		||||
        color: #333;
 | 
			
		||||
        margin-left: 16px;
 | 
			
		||||
        height: 56px;
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      .groupName {
 | 
			
		||||
        width: 100%;
 | 
			
		||||
        text-align: left;
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      .owner, .trends {
 | 
			
		||||
        margin-top: 8px;
 | 
			
		||||
        font-size: 28px;
 | 
			
		||||
        font-weight: 400;
 | 
			
		||||
        color: #999;
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      .personCount {
 | 
			
		||||
        flex-shrink: 0;
 | 
			
		||||
        font-size: 30px;
 | 
			
		||||
        font-weight: 400;
 | 
			
		||||
        color: #666;
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      .trends {
 | 
			
		||||
        * + * {
 | 
			
		||||
          margin-left: 24px;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        em {
 | 
			
		||||
          font-style: normal;
 | 
			
		||||
          color: #5FBA95;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        p {
 | 
			
		||||
          color: #F09535;
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    .AiImage {
 | 
			
		||||
      margin-right: 24px;
 | 
			
		||||
 | 
			
		||||
      image {
 | 
			
		||||
        width: 112px;
 | 
			
		||||
        height: 112px;
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
</style>
 | 
			
		||||
@@ -1,353 +0,0 @@
 | 
			
		||||
<template>
 | 
			
		||||
  <section class="info">
 | 
			
		||||
    <div class="card">
 | 
			
		||||
      <div class="baseInfo">
 | 
			
		||||
        <u-image border-radius="4" :src="top.detail.avatar" width="118" height="118"/>
 | 
			
		||||
        <div class="fill">
 | 
			
		||||
          <b>{{ top.detail.name }}</b>
 | 
			
		||||
          <div v-if="top.detail.type==1" class="wx">@微信</div>
 | 
			
		||||
          <div v-if="top.detail.type==2">@企业微信</div>
 | 
			
		||||
        </div>
 | 
			
		||||
        <div class="certBtn" @tap="handleCert">{{ !isCert ? "实名认证" : "解绑" }}</div>
 | 
			
		||||
      </div>
 | 
			
		||||
      <u-row>
 | 
			
		||||
        <AiCell class="half" top-label label="来源">{{ $dict.getLabel("wxCustomerAddWay", top.detail.addWay) }}</AiCell>
 | 
			
		||||
        <AiCell class="half" top-label label="添加时间">{{ top.detail.createTime }}</AiCell>
 | 
			
		||||
        <AiCell class="half" top-label label="真实姓名">{{ top.detail.realName }}</AiCell>
 | 
			
		||||
        <AiCell class="half" top-label label="手机号码">{{ resident.phone || "-" }}</AiCell>
 | 
			
		||||
        <AiCell class="half" top-label label="家庭积分">{{ resident.familyIntegral }}</AiCell>
 | 
			
		||||
        <AiCell class="half" top-label label="个人积分">{{ resident.personalIntegral }}</AiCell>
 | 
			
		||||
      </u-row>
 | 
			
		||||
    </div>
 | 
			
		||||
    <div class="card">
 | 
			
		||||
      <AiCell title label="公共标签">
 | 
			
		||||
        <u-icon label="添加" size="38" name="iconAdd" custom-prefix="iconfont" color="#1365DD"
 | 
			
		||||
                label-color="#1365DD" @tap="top.showTagManage=true"/>
 | 
			
		||||
      </AiCell>
 | 
			
		||||
      <AiCell top-label v-for="(op,name) in tagsList" :label="name" :key="name">
 | 
			
		||||
        <u-row>
 | 
			
		||||
          <div class="tag" v-for="(tag,j) in op" :key="j">{{ tag }}</div>
 | 
			
		||||
        </u-row>
 | 
			
		||||
      </AiCell>
 | 
			
		||||
    </div>
 | 
			
		||||
    <div class="card">
 | 
			
		||||
      <AiCell title label="动态"/>
 | 
			
		||||
      <AiCell top-label>
 | 
			
		||||
        <div class="logItem" v-for="item in customLogs" :key="item.id">
 | 
			
		||||
          <div flex class="column" shrink>
 | 
			
		||||
            <div class="dot"/>
 | 
			
		||||
            <div class="line fill"/>
 | 
			
		||||
          </div>
 | 
			
		||||
          <div flex class="start column">
 | 
			
		||||
            <b>{{ $dict.getLabel('wxCustomerLogType', item.type) }}</b>
 | 
			
		||||
            <span>{{ item.createTime }}</span>
 | 
			
		||||
            <div v-html="item.content"/>
 | 
			
		||||
          </div>
 | 
			
		||||
        </div>
 | 
			
		||||
      </AiCell>
 | 
			
		||||
    </div>
 | 
			
		||||
    <u-mask :show="dialog" @tap="dialog=false">
 | 
			
		||||
      <div class="bindCert" @tap.stop>
 | 
			
		||||
        <b class="title">实名认证</b>
 | 
			
		||||
        <u-input class="searchInput" v-model="search" clearable placeholder="请输入姓名或身份证号" @input="handleSearch"/>
 | 
			
		||||
        <div class="residents">
 | 
			
		||||
          <div flex class="spb" v-for="(op,i) in result" :key="i" @tap="bindCert(op.id)">
 | 
			
		||||
            <div v-html="op.name"/>
 | 
			
		||||
            <div v-html="op.idNumber"/>
 | 
			
		||||
          </div>
 | 
			
		||||
        </div>
 | 
			
		||||
      </div>
 | 
			
		||||
    </u-mask>
 | 
			
		||||
    <div bottom>
 | 
			
		||||
      <u-button type="primary" @tap="handleWechat">微信联系</u-button>
 | 
			
		||||
      <u-button v-if="isMobile" :disabled="!resident.phone" @tap="handleTel">电话联系</u-button>
 | 
			
		||||
    </div>
 | 
			
		||||
  </section>
 | 
			
		||||
</template>
 | 
			
		||||
 | 
			
		||||
<script>
 | 
			
		||||
import {mapActions} from "vuex";
 | 
			
		||||
 | 
			
		||||
export default {
 | 
			
		||||
  name: "info",
 | 
			
		||||
  inject: ['top'],
 | 
			
		||||
  computed: {
 | 
			
		||||
    resident() {
 | 
			
		||||
      return this.top.detail?.residentInfo?.resident || {}
 | 
			
		||||
    },
 | 
			
		||||
    tagsList() {
 | 
			
		||||
      let obj = {}
 | 
			
		||||
      this.top.detail?.tags?.map(e => {
 | 
			
		||||
        if (e.type == 1 && e?.groupName) {
 | 
			
		||||
          if (obj?.[e.groupName]) {
 | 
			
		||||
            obj[e.groupName].push(e.tagName)
 | 
			
		||||
          } else {
 | 
			
		||||
            obj[e.groupName] = [e.tagName]
 | 
			
		||||
          }
 | 
			
		||||
        }
 | 
			
		||||
      })
 | 
			
		||||
      return obj
 | 
			
		||||
    },
 | 
			
		||||
    isCert() {
 | 
			
		||||
      return !!this.top?.detail?.residentInfo
 | 
			
		||||
    },
 | 
			
		||||
    isMobile() {
 | 
			
		||||
      return ["Android", "iPhone", "SymbianOS", "Windows Phone", "iPad", "iPod"]
 | 
			
		||||
      .some(e => navigator.userAgent.indexOf(e) > -1)
 | 
			
		||||
    }
 | 
			
		||||
  },
 | 
			
		||||
  data() {
 | 
			
		||||
    return {
 | 
			
		||||
      dialog: false,
 | 
			
		||||
      search: "",
 | 
			
		||||
      result: [],
 | 
			
		||||
      customLogs: []
 | 
			
		||||
    }
 | 
			
		||||
  },
 | 
			
		||||
  methods: {
 | 
			
		||||
    ...mapActions(['injectJWeixin', 'wxInvoke']),
 | 
			
		||||
    searchResident() {
 | 
			
		||||
      this.$http.post("/app/appresident/check-name", null, {
 | 
			
		||||
        params: {name: this.search}
 | 
			
		||||
      }).then(res => {
 | 
			
		||||
        if (res?.data) {
 | 
			
		||||
          let reg = new RegExp(this.search, 'g')
 | 
			
		||||
          this.result = res.data?.map(e => ({
 | 
			
		||||
            ...e,
 | 
			
		||||
            name: e.name.replace(reg, `<b>${this.search}</b>`),
 | 
			
		||||
            idNumber: e.idNumber.replace(reg, `<b>${this.search}</b>`),
 | 
			
		||||
          }))
 | 
			
		||||
        }
 | 
			
		||||
      })
 | 
			
		||||
    },
 | 
			
		||||
    handleSearch() {
 | 
			
		||||
      if (this.search?.length >= 2) {
 | 
			
		||||
        this.searchResident()
 | 
			
		||||
      } else {
 | 
			
		||||
        this.result = []
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    handleCert() {
 | 
			
		||||
      if (this.isCert) {
 | 
			
		||||
        this.$confirm("是否要解绑当前实名认证?").then(() => {
 | 
			
		||||
          this.$http.post("/app/wxcp/wxcustomer/unBindCustomer2Resident", null, {
 | 
			
		||||
            params: {residentId: this.resident.id, customerId: this.top.custom}
 | 
			
		||||
          }).then(res => {
 | 
			
		||||
            if (res?.code == 0) {
 | 
			
		||||
              this.$u.toast("解除绑定成功!")
 | 
			
		||||
              this.top.getContact()
 | 
			
		||||
            }
 | 
			
		||||
          })
 | 
			
		||||
        })
 | 
			
		||||
      } else this.dialog = true
 | 
			
		||||
    },
 | 
			
		||||
    bindCert(residentId) {
 | 
			
		||||
      this.dialog = false
 | 
			
		||||
      this.$confirm("是否要绑定该居民?").then(() => {
 | 
			
		||||
        this.$http.post("/app/wxcp/wxcustomer/bindCustomer2Resident", null, {
 | 
			
		||||
          params: {residentId, customerId: this.top.custom}
 | 
			
		||||
        }).then(res => {
 | 
			
		||||
          if (res?.code == 0) {
 | 
			
		||||
            this.$u.toast("绑定成功!")
 | 
			
		||||
            this.top.getContact()
 | 
			
		||||
          }
 | 
			
		||||
        }).catch(err => {
 | 
			
		||||
          this.$u.toast(err)
 | 
			
		||||
          setTimeout(() => this.dialog = true, 1000)
 | 
			
		||||
        })
 | 
			
		||||
      }).catch(() => this.dialog = true)
 | 
			
		||||
    },
 | 
			
		||||
    getCustomLog(customerId) {
 | 
			
		||||
      customerId && this.$http.post("/app/wxcp/wxcustomerlog/listAll", null, {
 | 
			
		||||
        params: {customerId}
 | 
			
		||||
      }).then(res => {
 | 
			
		||||
        if (res?.data) {
 | 
			
		||||
          this.customLogs = res.data
 | 
			
		||||
        }
 | 
			
		||||
      })
 | 
			
		||||
    },
 | 
			
		||||
    handleTel() {
 | 
			
		||||
      location.href = "tel:" + this.resident.phone
 | 
			
		||||
    },
 | 
			
		||||
    handleWechat() {
 | 
			
		||||
      this.wxInvoke(['openUserProfile', {
 | 
			
		||||
        type: 2,
 | 
			
		||||
        userid: this.top.custom
 | 
			
		||||
      }, () => 0])
 | 
			
		||||
    }
 | 
			
		||||
  },
 | 
			
		||||
  created() {
 | 
			
		||||
    this.$dict.load("wxCustomerAddWay", 'wxCustomerLogType')
 | 
			
		||||
    this.getCustomLog(this.top.custom)
 | 
			
		||||
    this.injectJWeixin('openUserProfile')
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
</script>
 | 
			
		||||
 | 
			
		||||
<style lang="scss" scoped>
 | 
			
		||||
.info {
 | 
			
		||||
  padding-bottom: 130px;
 | 
			
		||||
 | 
			
		||||
  .certBtn {
 | 
			
		||||
    cursor: pointer;
 | 
			
		||||
    background: $uni-color-primary;
 | 
			
		||||
    color: #fff;
 | 
			
		||||
    padding: 8px 16px;
 | 
			
		||||
    border-radius: 4px;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  .baseInfo {
 | 
			
		||||
    height: 186px;
 | 
			
		||||
    width: 100%;
 | 
			
		||||
    display: flex;
 | 
			
		||||
    align-items: center;
 | 
			
		||||
 | 
			
		||||
    .fill {
 | 
			
		||||
      color: #3C7FC8;
 | 
			
		||||
      margin-left: 24px;
 | 
			
		||||
      font-size: 28px;
 | 
			
		||||
      line-height: 40px;
 | 
			
		||||
 | 
			
		||||
      b {
 | 
			
		||||
        font-size: 36px;
 | 
			
		||||
        color: #333;
 | 
			
		||||
        margin-bottom: 8px;
 | 
			
		||||
        line-height: 50px;
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      .wx {
 | 
			
		||||
        color: #2EA222;
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  ::v-deep .AiCell {
 | 
			
		||||
    &.half {
 | 
			
		||||
      width: 50%;
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  ::v-deep .u-form-item {
 | 
			
		||||
    width: 50%;
 | 
			
		||||
    min-height: 124px;
 | 
			
		||||
 | 
			
		||||
    .u-form-item--left {
 | 
			
		||||
      color: #999;
 | 
			
		||||
      min-height: 40px;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    .u-form-item--right {
 | 
			
		||||
      min-height: 0;
 | 
			
		||||
      margin-top: 16px;
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  ::v-deep .u-mask {
 | 
			
		||||
    display: flex;
 | 
			
		||||
    align-items: center;
 | 
			
		||||
    justify-content: center;
 | 
			
		||||
 | 
			
		||||
    .bindCert {
 | 
			
		||||
      width: 600px;
 | 
			
		||||
      padding: 32px;
 | 
			
		||||
      min-height: 400px;
 | 
			
		||||
      background-color: #fff;
 | 
			
		||||
      display: flex;
 | 
			
		||||
      flex-direction: column;
 | 
			
		||||
      color: #333;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    .residents {
 | 
			
		||||
      max-height: 780px;
 | 
			
		||||
      overflow-y: auto;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    .title {
 | 
			
		||||
      text-align: center;
 | 
			
		||||
      font-size: 36px;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    .searchInput {
 | 
			
		||||
      margin: 16px 0;
 | 
			
		||||
      border: 1px solid #D0D4DC;
 | 
			
		||||
      border-radius: 8px;
 | 
			
		||||
      padding: 0 16px !important;
 | 
			
		||||
      flex: 0;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    .spb {
 | 
			
		||||
      height: 60px;
 | 
			
		||||
      cursor: pointer;
 | 
			
		||||
      padding: 0 16px;
 | 
			
		||||
 | 
			
		||||
      b {
 | 
			
		||||
        font-size: 32px;
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      &:nth-of-type(2n) {
 | 
			
		||||
        background: #eee;
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  ::v-deep .logItem {
 | 
			
		||||
    display: flex;
 | 
			
		||||
    min-height: 220px;
 | 
			
		||||
 | 
			
		||||
    &:last-of-type {
 | 
			
		||||
      .line {
 | 
			
		||||
        display: none;
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    & > .column + .column {
 | 
			
		||||
      margin-left: 16px;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    .dot {
 | 
			
		||||
      flex-shrink: 0;
 | 
			
		||||
      width: 16px;
 | 
			
		||||
      height: 16px;
 | 
			
		||||
      background: $uni-color-primary;
 | 
			
		||||
      border: 8px solid #FFFFFF;
 | 
			
		||||
      border-radius: 50%;
 | 
			
		||||
      margin: 8px 0;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    .line {
 | 
			
		||||
      width: 4px;
 | 
			
		||||
      background: #eee;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    .start {
 | 
			
		||||
      font-size: 26px;
 | 
			
		||||
      font-weight: 400;
 | 
			
		||||
      color: #666;
 | 
			
		||||
 | 
			
		||||
      b {
 | 
			
		||||
        color: #333;
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      i {
 | 
			
		||||
        color: $uni-color-primary;
 | 
			
		||||
        font-style: normal;
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      & > b {
 | 
			
		||||
        font-size: 32px;
 | 
			
		||||
        font-weight: bold;
 | 
			
		||||
        margin-bottom: 8px;
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      & > span {
 | 
			
		||||
        color: #999;
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      & > div {
 | 
			
		||||
        margin-top: 16px;
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
</style>
 | 
			
		||||
@@ -1,142 +0,0 @@
 | 
			
		||||
<template>
 | 
			
		||||
  <section class="residentList">
 | 
			
		||||
    <AiTopFixed>
 | 
			
		||||
      <u-search placeholder="请输入昵称、姓名" :show-action="false" search-icon-color="#ccc"
 | 
			
		||||
                v-model="search.name" @search="page.current=1,getList()"/>
 | 
			
		||||
      <AiCell>
 | 
			
		||||
        <b slot="label" class="title">共<i v-html="page.total||0"/>个居民</b>
 | 
			
		||||
      </AiCell>
 | 
			
		||||
    </AiTopFixed>
 | 
			
		||||
    <div class="mainPane">
 | 
			
		||||
      <AiCell v-for="item in list" :key="item.id" @click.native="showResident(item)">
 | 
			
		||||
        <template #label>
 | 
			
		||||
          <AiImage :src="item.avatar" preview/>
 | 
			
		||||
        </template>
 | 
			
		||||
        <div class="card wrap start" flex>
 | 
			
		||||
          <b>{{ item.name }}</b>
 | 
			
		||||
          <div flex class="tag" v-for="(tag,j) in item.tags" :key="j">{{ tag.tagName }}</div>
 | 
			
		||||
          <div class="realName" shrink v-html="`真实姓名:${item.realName||'-'}`"/>
 | 
			
		||||
        </div>
 | 
			
		||||
      </AiCell>
 | 
			
		||||
    </div>
 | 
			
		||||
  </section>
 | 
			
		||||
</template>
 | 
			
		||||
 | 
			
		||||
<script>
 | 
			
		||||
 | 
			
		||||
export default {
 | 
			
		||||
  name: "residentList",
 | 
			
		||||
  data() {
 | 
			
		||||
    return {
 | 
			
		||||
      page: {current: 1, size: 10, total: 0},
 | 
			
		||||
      search: {name: ""},
 | 
			
		||||
      list: []
 | 
			
		||||
    }
 | 
			
		||||
  },
 | 
			
		||||
  methods: {
 | 
			
		||||
    getList() {
 | 
			
		||||
      this.$http.post("/app/wxcp/wxcustomer/list", null, {
 | 
			
		||||
        params: {...this.page, ...this.search, type: 1}
 | 
			
		||||
      }).then(res => {
 | 
			
		||||
        if (res?.data) {
 | 
			
		||||
          if (this.page.current > 1) {
 | 
			
		||||
            this.list = [...this.list, ...res.data.records]
 | 
			
		||||
          } else this.list = res.data.records
 | 
			
		||||
          this.page.total = res.data.total
 | 
			
		||||
        }
 | 
			
		||||
      })
 | 
			
		||||
    },
 | 
			
		||||
    reachBottom() {
 | 
			
		||||
      if (this.page.total > this.list.length) {
 | 
			
		||||
        this.page.current++
 | 
			
		||||
        this.getList()
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    showResident({id}) {
 | 
			
		||||
      id && uni.navigateTo({
 | 
			
		||||
        url: './resident?id=' + id
 | 
			
		||||
      })
 | 
			
		||||
    }
 | 
			
		||||
  },
 | 
			
		||||
  created() {
 | 
			
		||||
    this.getList()
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
</script>
 | 
			
		||||
 | 
			
		||||
<style lang="scss" scoped>
 | 
			
		||||
.residentList {
 | 
			
		||||
  ::v-deep .AiTopFixed {
 | 
			
		||||
    b.title {
 | 
			
		||||
      color: #333;
 | 
			
		||||
      font-size: 32px;
 | 
			
		||||
 | 
			
		||||
      & > i {
 | 
			
		||||
        color: #267FCE;
 | 
			
		||||
        font-style: normal;
 | 
			
		||||
        margin: 0 4px;
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  ::v-deep .mainPane {
 | 
			
		||||
    background: #fff;
 | 
			
		||||
    padding: 0 32px;
 | 
			
		||||
 | 
			
		||||
    .AiCell {
 | 
			
		||||
      flex-shrink: 0;
 | 
			
		||||
      justify-content: flex-start;
 | 
			
		||||
 | 
			
		||||
      .content {
 | 
			
		||||
        flex: 1;
 | 
			
		||||
        min-width: 0;
 | 
			
		||||
        max-width: unset;
 | 
			
		||||
        border-bottom: 1px solid rgba(221, 221, 221, 1);
 | 
			
		||||
        min-height: 160px;
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    .card {
 | 
			
		||||
      text-align: left;
 | 
			
		||||
 | 
			
		||||
      b {
 | 
			
		||||
        max-width: 100%;
 | 
			
		||||
        white-space: nowrap;
 | 
			
		||||
        overflow: hidden;
 | 
			
		||||
        text-overflow: ellipsis;
 | 
			
		||||
        font-size: 36px;
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      .tag {
 | 
			
		||||
        justify-content: center;
 | 
			
		||||
        background: #F3F4F7;
 | 
			
		||||
        border-radius: 4px;
 | 
			
		||||
        padding: 0 16px;
 | 
			
		||||
        font-size: 28px;
 | 
			
		||||
        font-weight: 400;
 | 
			
		||||
        color: #333;
 | 
			
		||||
        margin-left: 16px;
 | 
			
		||||
        margin-bottom: 16px;
 | 
			
		||||
        height: 56px;
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      .realName {
 | 
			
		||||
        width: 100%;
 | 
			
		||||
        margin-top: 8px;
 | 
			
		||||
        font-size: 28px;
 | 
			
		||||
        font-weight: 400;
 | 
			
		||||
        color: #999;
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    .AiImage {
 | 
			
		||||
      margin-right: 24px;
 | 
			
		||||
 | 
			
		||||
      image {
 | 
			
		||||
        width: 112px;
 | 
			
		||||
        height: 112px;
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
</style>
 | 
			
		||||
@@ -1,258 +0,0 @@
 | 
			
		||||
<template>
 | 
			
		||||
  <div class="resident-statistical">
 | 
			
		||||
    <u-tabs :list="tabs" :is-scroll="false" :current="currentType" font-size="32"
 | 
			
		||||
            bar-width="192" height="96" bg-color="#3975C6"
 | 
			
		||||
            active-color="#fff" inactive-color="#fff" @change="handleChange"/>
 | 
			
		||||
    <div class="bg" :style="{backgroundImage:'url(' + $cdn + 'dvcp_bg.png' + ')'}"></div>
 | 
			
		||||
    <div class="card">
 | 
			
		||||
      <u-row justify="between">
 | 
			
		||||
        <div class="item" v-for="(item,index) in cardList" :key="index">
 | 
			
		||||
          <span :style="{color:item.color} ">{{ item.value }}</span>
 | 
			
		||||
          <span>{{ item.label }}</span>
 | 
			
		||||
        </div>
 | 
			
		||||
      </u-row>
 | 
			
		||||
    </div>
 | 
			
		||||
    <div class="chart">
 | 
			
		||||
      <div id="chart"></div>
 | 
			
		||||
    </div>
 | 
			
		||||
  </div>
 | 
			
		||||
</template>
 | 
			
		||||
 | 
			
		||||
<script>
 | 
			
		||||
import echarts from "echarts"
 | 
			
		||||
import {mapActions} from "vuex";
 | 
			
		||||
 | 
			
		||||
export default {
 | 
			
		||||
  name: "residentSta",
 | 
			
		||||
  props: {
 | 
			
		||||
    isNormal: Boolean
 | 
			
		||||
  },
 | 
			
		||||
  data() {
 | 
			
		||||
    return {
 | 
			
		||||
      currentType: 0,
 | 
			
		||||
      groupId: null,
 | 
			
		||||
      chart: null,
 | 
			
		||||
      chartData: null
 | 
			
		||||
    }
 | 
			
		||||
  },
 | 
			
		||||
  methods: {
 | 
			
		||||
    ...mapActions(['injectJWeixin', "wxInvoke"]),
 | 
			
		||||
    handleChange(i) {
 | 
			
		||||
      this.currentType = i
 | 
			
		||||
      this.getChart()
 | 
			
		||||
    },
 | 
			
		||||
    getChart() {
 | 
			
		||||
      this.$http.post(this.currentType == 0 ? "/app/wxcp/wxgroup/groupStatistic" : "/app/wxcp/wxcustomerlog/customerStatistic", null, {
 | 
			
		||||
        params: {
 | 
			
		||||
          id: this.groupId
 | 
			
		||||
        }
 | 
			
		||||
      }).then(res => {
 | 
			
		||||
        if (res.code == 0) {
 | 
			
		||||
          this.chartData = res.data
 | 
			
		||||
          this.initChart()
 | 
			
		||||
        }
 | 
			
		||||
      })
 | 
			
		||||
    },
 | 
			
		||||
    initChart() {
 | 
			
		||||
      this.chart = echarts.init(document.getElementById('chart'))
 | 
			
		||||
      this.setOptions()
 | 
			
		||||
    },
 | 
			
		||||
    setOptions() {
 | 
			
		||||
      const x = Object.keys(this.chartData.list)
 | 
			
		||||
      const y = Object.values(this.chartData.list)
 | 
			
		||||
      this.chart.setOption({
 | 
			
		||||
        backgroundColor: "#F9F9F9",
 | 
			
		||||
        legend: {
 | 
			
		||||
          data: this.currentType == 0 ? ["群成员总数", "入群人数", "退群人数"] : ["居民总数", "新增居民数", "流失居民数"],
 | 
			
		||||
          icon: "rect",
 | 
			
		||||
          itemWidth: 8,
 | 
			
		||||
          itemHeight: 8,
 | 
			
		||||
          itemGap: 10,
 | 
			
		||||
          textStyle: {
 | 
			
		||||
            fontSize: 14,
 | 
			
		||||
            color: "#666666",
 | 
			
		||||
            lineHeight: 20
 | 
			
		||||
          },
 | 
			
		||||
          bottom: 0
 | 
			
		||||
        },
 | 
			
		||||
        grid: {
 | 
			
		||||
          left: 60,
 | 
			
		||||
          top: "10%",
 | 
			
		||||
          bottom: "30%",
 | 
			
		||||
        },
 | 
			
		||||
        xAxis: {
 | 
			
		||||
          axisTick: {
 | 
			
		||||
            show: false
 | 
			
		||||
          },
 | 
			
		||||
          axisLine: {
 | 
			
		||||
            show: false
 | 
			
		||||
          },
 | 
			
		||||
          axisLabel: {
 | 
			
		||||
            marginTop: 10,
 | 
			
		||||
            rotate: 40,
 | 
			
		||||
            textStyle: {
 | 
			
		||||
              fontSize: 12,
 | 
			
		||||
              color: '#666666'
 | 
			
		||||
            }
 | 
			
		||||
          },
 | 
			
		||||
          data: x.map(e => e.slice(5))
 | 
			
		||||
        },
 | 
			
		||||
        yAxis: {
 | 
			
		||||
          axisTick: {
 | 
			
		||||
            show: false
 | 
			
		||||
          },
 | 
			
		||||
          axisLine: {
 | 
			
		||||
            show: false
 | 
			
		||||
          },
 | 
			
		||||
          axisLabel: {
 | 
			
		||||
            textStyle: {
 | 
			
		||||
              fontSize: 12,
 | 
			
		||||
              color: '#666666'
 | 
			
		||||
            }
 | 
			
		||||
          },
 | 
			
		||||
        },
 | 
			
		||||
        series: [
 | 
			
		||||
          {
 | 
			
		||||
            name: this.currentType == 0 ? "群成员总数" : "居民总数",
 | 
			
		||||
            type: "line",
 | 
			
		||||
            itemStyle: {
 | 
			
		||||
              color: "#4B87FE"
 | 
			
		||||
            },
 | 
			
		||||
            data: y.map(e => e.total)
 | 
			
		||||
          },
 | 
			
		||||
          {
 | 
			
		||||
            name: this.currentType == 0 ? "入群人数" : "新增居民数",
 | 
			
		||||
            type: "line",
 | 
			
		||||
            itemStyle: {
 | 
			
		||||
              color: "#32C5FF"
 | 
			
		||||
            },
 | 
			
		||||
            data: y.map(e => e.increase)
 | 
			
		||||
          },
 | 
			
		||||
          {
 | 
			
		||||
            name: this.currentType == 0 ? "退群人数" : "流失居民数",
 | 
			
		||||
            type: "line",
 | 
			
		||||
            itemStyle: {
 | 
			
		||||
              color: "#FFAA44"
 | 
			
		||||
            },
 | 
			
		||||
            data: y.map(e => e.decrease)
 | 
			
		||||
          }
 | 
			
		||||
        ]
 | 
			
		||||
      })
 | 
			
		||||
    }
 | 
			
		||||
  },
 | 
			
		||||
  computed: {
 | 
			
		||||
    tabs() {
 | 
			
		||||
      return [
 | 
			
		||||
        {name: "居民群统计", value: 0},
 | 
			
		||||
        {name: "居民统计", value: 1},
 | 
			
		||||
      ]
 | 
			
		||||
    },
 | 
			
		||||
    currentTab() {
 | 
			
		||||
      return this.tabs.find(e => e.value == this.currentType)
 | 
			
		||||
    },
 | 
			
		||||
    cardList() {
 | 
			
		||||
      return this.currentType == 0 ? [
 | 
			
		||||
        {label: "群聊总数", value: this.chartData?.groupSum || "0", color: "#354FC7"},
 | 
			
		||||
        {label: "群成员总数", value: this.chartData?.today?.total || "0", color: "#868686"},
 | 
			
		||||
        {label: "今日入群", value: this.chartData?.today?.increase || "0", color: "#5FBA95"},
 | 
			
		||||
        {label: "今日退群", value: this.chartData?.today?.decrease || "0", color: "#F09535"},
 | 
			
		||||
      ] : [
 | 
			
		||||
        {label: "居民总数", value: this.chartData?.today?.total || "0", color: "#354FC7"},
 | 
			
		||||
        {label: "今日新增", value: this.chartData?.today?.increase || "0", color: "#5FBA95"},
 | 
			
		||||
        {label: "今日流失", value: this.chartData?.today?.decrease || "0", color: "#F09535"},
 | 
			
		||||
      ]
 | 
			
		||||
    }
 | 
			
		||||
  },
 | 
			
		||||
  watch: {
 | 
			
		||||
    isNormal(v) {
 | 
			
		||||
      v && this.getChart()
 | 
			
		||||
    }
 | 
			
		||||
  },
 | 
			
		||||
  created() {
 | 
			
		||||
    if (this.$route.hash == "#dev") {
 | 
			
		||||
      this.getChart()
 | 
			
		||||
    } else this.injectJWeixin("getCurExternalChat").then(() => {
 | 
			
		||||
      return Promise.resolve()
 | 
			
		||||
    }).then(() => {
 | 
			
		||||
      this.wxInvoke(['getCurExternalChat', {}, res => {
 | 
			
		||||
        if (res?.err_msg == 'getCurExternalChat:ok') {
 | 
			
		||||
          this.groupId = res.chatId
 | 
			
		||||
        }
 | 
			
		||||
        this.getChart()
 | 
			
		||||
      }])
 | 
			
		||||
    })
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
</script>
 | 
			
		||||
 | 
			
		||||
<style lang="scss" scoped>
 | 
			
		||||
.resident-statistical {
 | 
			
		||||
  display: flex;
 | 
			
		||||
  flex-direction: column;
 | 
			
		||||
  background: #F5F5F5;
 | 
			
		||||
  padding-top: 96px;
 | 
			
		||||
 | 
			
		||||
  ::v-deep .u-tabs {
 | 
			
		||||
    position: fixed;
 | 
			
		||||
    top: 0;
 | 
			
		||||
    width: 100%;
 | 
			
		||||
    z-index: 9;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  .bg {
 | 
			
		||||
    height: 340px;
 | 
			
		||||
    background-repeat: no-repeat;
 | 
			
		||||
    background-size: 100% 100%;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  .card {
 | 
			
		||||
    width: 686px;
 | 
			
		||||
    height: 232px;
 | 
			
		||||
    margin: -140px auto 0;
 | 
			
		||||
    background-color: #FFFFFF;
 | 
			
		||||
    border-radius: 8px;
 | 
			
		||||
    display: flex;
 | 
			
		||||
    align-items: center;
 | 
			
		||||
    box-sizing: border-box;
 | 
			
		||||
    padding: 32px;
 | 
			
		||||
 | 
			
		||||
    .u-row {
 | 
			
		||||
      width: 100%;
 | 
			
		||||
 | 
			
		||||
      .item {
 | 
			
		||||
        flex: 1;
 | 
			
		||||
        text-align: center;
 | 
			
		||||
        font-size: 40px;
 | 
			
		||||
        font-weight: bold;
 | 
			
		||||
        color: #354FC7;
 | 
			
		||||
 | 
			
		||||
        & > span {
 | 
			
		||||
          display: block;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        & > span:last-child {
 | 
			
		||||
          font-size: 30px;
 | 
			
		||||
          font-weight: 500;
 | 
			
		||||
          color: #999999;
 | 
			
		||||
          line-height: 42px;
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  .chart {
 | 
			
		||||
    background-color: #FFFFFF;
 | 
			
		||||
    margin: 24px 0;
 | 
			
		||||
    box-sizing: border-box;
 | 
			
		||||
    padding: 32px;
 | 
			
		||||
    display: flex;
 | 
			
		||||
    justify-content: center;
 | 
			
		||||
    align-items: center;
 | 
			
		||||
 | 
			
		||||
    #chart {
 | 
			
		||||
      width: 686px;
 | 
			
		||||
      height: 470px;
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
</style>
 | 
			
		||||
@@ -1,89 +0,0 @@
 | 
			
		||||
<template>
 | 
			
		||||
  <section class="tagManage">
 | 
			
		||||
    <div class="card" v-for="(group,i) in tags" :key="i">
 | 
			
		||||
      <AiCell title :label="group.name"/>
 | 
			
		||||
      <u-row>
 | 
			
		||||
        <div class="tag" v-for="(op,j) in group.tagList" :key="j" :class="{selected:selected.includes(op.id)}"
 | 
			
		||||
             @tap="$u.debounce(handleToggle(op.id))">
 | 
			
		||||
          {{ op.name }}
 | 
			
		||||
        </div>
 | 
			
		||||
      </u-row>
 | 
			
		||||
    </div>
 | 
			
		||||
 | 
			
		||||
  </section>
 | 
			
		||||
</template>
 | 
			
		||||
 | 
			
		||||
<script>
 | 
			
		||||
 | 
			
		||||
export default {
 | 
			
		||||
  name: "tagManage",
 | 
			
		||||
  inject: ['top'],
 | 
			
		||||
  data() {
 | 
			
		||||
    return {
 | 
			
		||||
      tags: []
 | 
			
		||||
    }
 | 
			
		||||
  },
 | 
			
		||||
  computed: {
 | 
			
		||||
    selected() {
 | 
			
		||||
      return this.top.groupId ? this.top.detail?.tagList.map(e => e.tagId) : this.top.detail?.tags.map(e => e.tagId)
 | 
			
		||||
    }
 | 
			
		||||
  },
 | 
			
		||||
  methods: {
 | 
			
		||||
    getTags() {
 | 
			
		||||
      this.$http.post(this.top.groupId ? "/app/wxcp/wxgroupchattag/listAll" : "/app/wxcp/wxcorptag/listAll", null, {
 | 
			
		||||
        params: {size: 9999}
 | 
			
		||||
      }).then(res => {
 | 
			
		||||
        if (res?.data) {
 | 
			
		||||
          this.tags = res.data.records
 | 
			
		||||
        }
 | 
			
		||||
      })
 | 
			
		||||
    },
 | 
			
		||||
    handleToggle(tagId) {
 | 
			
		||||
      uni.showLoading({
 | 
			
		||||
        title: '提交中'
 | 
			
		||||
      });
 | 
			
		||||
 | 
			
		||||
      this.$http.post(this.top.groupId ? "/app/wxcp/wxgroupchattag/markTagForCP" : "/app/wxcp/wxcorptag/markTagForCP", null, {
 | 
			
		||||
        params: this.top.groupId ? {tagId, groupId: this.top.groupId,} : {tagId, customerId: this.top.custom}
 | 
			
		||||
      }).then(res => {
 | 
			
		||||
        uni.hideLoading()
 | 
			
		||||
        if (res?.code == 0) {
 | 
			
		||||
          this.$u.toast("操作成功!")
 | 
			
		||||
          this.getTags()
 | 
			
		||||
          this.top.getContact()
 | 
			
		||||
        }
 | 
			
		||||
      }).catch(err => {
 | 
			
		||||
        uni.hideLoading()
 | 
			
		||||
        this.$u.toast(err)
 | 
			
		||||
      })
 | 
			
		||||
    }
 | 
			
		||||
  },
 | 
			
		||||
  created() {
 | 
			
		||||
    this.getTags()
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
</script>
 | 
			
		||||
 | 
			
		||||
<style lang="scss" scoped>
 | 
			
		||||
.tagManage {
 | 
			
		||||
  padding-top: 16px;
 | 
			
		||||
 | 
			
		||||
  .tag {
 | 
			
		||||
    cursor: pointer !important;
 | 
			
		||||
 | 
			
		||||
    &.selected {
 | 
			
		||||
      background-color: $uni-color-primary !important;
 | 
			
		||||
      color: #fff
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    &.disabled {
 | 
			
		||||
      color: #999;
 | 
			
		||||
      cursor: not-allowed;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    & + .tag {
 | 
			
		||||
      margin-left: 16px;
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
</style>
 | 
			
		||||
@@ -1,302 +0,0 @@
 | 
			
		||||
<template>
 | 
			
		||||
  <div class="group-resident">
 | 
			
		||||
    <template v-if="!showTagManage">
 | 
			
		||||
      <AiTopFixed>
 | 
			
		||||
        <div class="card">
 | 
			
		||||
          <header>
 | 
			
		||||
            <u-avatar mode="square" :src="$cdn + 'groupAvatar.png'" :size="112"></u-avatar>
 | 
			
		||||
            {{ detail.name }}
 | 
			
		||||
          </header>
 | 
			
		||||
          <u-grid :col="2" :border="false">
 | 
			
		||||
            <u-grid-item>
 | 
			
		||||
              <label>建群日期</label>
 | 
			
		||||
              <label v-if="detail.createTime">{{ detail.createTime.split(" ")[0] }}</label>
 | 
			
		||||
            </u-grid-item>
 | 
			
		||||
            <u-grid-item>
 | 
			
		||||
              <label>成员总数</label>
 | 
			
		||||
              <label v-if="isToday">{{ detail.statistic.today.total }}</label>
 | 
			
		||||
            </u-grid-item>
 | 
			
		||||
            <u-grid-item>
 | 
			
		||||
              <label>今日入群</label>
 | 
			
		||||
              <label v-if="isToday">{{ detail.statistic.today.increase }}</label>
 | 
			
		||||
            </u-grid-item>
 | 
			
		||||
            <u-grid-item>
 | 
			
		||||
              <label>今日退群</label>
 | 
			
		||||
              <label v-if="isToday">{{ detail.statistic.today.decrease }}</label>
 | 
			
		||||
            </u-grid-item>
 | 
			
		||||
            <!--          <u-grid-item>-->
 | 
			
		||||
            <!--            <label>今日活跃人数</label>-->
 | 
			
		||||
            <!--            <label>{{item.value}}</label>-->
 | 
			
		||||
            <!--          </u-grid-item>-->
 | 
			
		||||
          </u-grid>
 | 
			
		||||
          <p class="statistics">
 | 
			
		||||
            <span>成员性别:</span>
 | 
			
		||||
            <label>男性</label>
 | 
			
		||||
            <b>{{ detail.man }}</b>
 | 
			
		||||
            <label>女性</label>
 | 
			
		||||
            <b>{{ detail.woman }}</b>
 | 
			
		||||
            <label>未知</label>
 | 
			
		||||
            <b>{{ detail.unknown }}</b>
 | 
			
		||||
          </p>
 | 
			
		||||
        </div>
 | 
			
		||||
      </AiTopFixed>
 | 
			
		||||
      <div class="card">
 | 
			
		||||
        <AiCell title label="群标签">
 | 
			
		||||
          <u-icon label="添加" size="38" name="iconAdd" custom-prefix="iconfont" color="#1365DD"
 | 
			
		||||
                  label-color="#1365DD" @tap="showTagManage=true"/>
 | 
			
		||||
        </AiCell>
 | 
			
		||||
        <AiCell top-label v-for="(op,name) in tagsList" :label="name" :key="name">
 | 
			
		||||
          <u-row>
 | 
			
		||||
            <div class="tag" v-for="(tag,j) in op" :key="j">{{ tag }}</div>
 | 
			
		||||
          </u-row>
 | 
			
		||||
        </AiCell>
 | 
			
		||||
      </div>
 | 
			
		||||
      <div class="card">
 | 
			
		||||
        <AiCell title label="群成员"></AiCell>
 | 
			
		||||
        <div class="wrap">
 | 
			
		||||
          <div class="item" v-for="(item,index) in detail.groupUserList" :key="index" @click="handleWechat(item)">
 | 
			
		||||
            <u-avatar mode="square" :src="item.avatar"></u-avatar>
 | 
			
		||||
            <div class="info">
 | 
			
		||||
              <div class="left">
 | 
			
		||||
                <p>{{ item.memberName }}
 | 
			
		||||
                  <b v-if="item.customerType==2" style="color: #3C7FC8;">@{{ item.corpName }}</b>
 | 
			
		||||
                  <b v-if="item.customerType==1" style="color: #2EA222;">@微信</b>
 | 
			
		||||
                </p>
 | 
			
		||||
                <p>真实姓名:{{ item.realName }}</p>
 | 
			
		||||
              </div>
 | 
			
		||||
              <span v-if="item.userId==detail.owner">群主</span>
 | 
			
		||||
            </div>
 | 
			
		||||
          </div>
 | 
			
		||||
        </div>
 | 
			
		||||
      </div>
 | 
			
		||||
    </template>
 | 
			
		||||
    <tag-manage v-if="showTagManage"/>
 | 
			
		||||
 | 
			
		||||
  </div>
 | 
			
		||||
</template>
 | 
			
		||||
 | 
			
		||||
<script>
 | 
			
		||||
import {mapActions} from "vuex";
 | 
			
		||||
import TagManage from "./components/tagManage";
 | 
			
		||||
 | 
			
		||||
export default {
 | 
			
		||||
  name: "groupResident",
 | 
			
		||||
  components: {TagManage},
 | 
			
		||||
  provide() {
 | 
			
		||||
    return {
 | 
			
		||||
      top: this
 | 
			
		||||
    }
 | 
			
		||||
  },
 | 
			
		||||
  data() {
 | 
			
		||||
    return {
 | 
			
		||||
      detail: {},
 | 
			
		||||
      groupId: null,
 | 
			
		||||
      showTagManage: false,
 | 
			
		||||
    }
 | 
			
		||||
  },
 | 
			
		||||
  computed: {
 | 
			
		||||
    tagsList() {
 | 
			
		||||
      let obj = {}
 | 
			
		||||
      this.detail?.tagList?.map(e => {
 | 
			
		||||
        if (e?.groupName) {
 | 
			
		||||
          if (obj?.[e.groupName]) {
 | 
			
		||||
            obj[e.groupName].push(e.tagName)
 | 
			
		||||
          } else {
 | 
			
		||||
            obj[e.groupName] = [e.tagName]
 | 
			
		||||
          }
 | 
			
		||||
        }
 | 
			
		||||
      })
 | 
			
		||||
      return obj
 | 
			
		||||
    },
 | 
			
		||||
    isToday() {
 | 
			
		||||
      return !!this.detail?.statistic?.today
 | 
			
		||||
    },
 | 
			
		||||
    isNormal() {
 | 
			
		||||
      return !!this.$route.query.id;
 | 
			
		||||
    }
 | 
			
		||||
  },
 | 
			
		||||
  methods: {
 | 
			
		||||
    ...mapActions(['injectJWeixin', "wxInvoke"]),
 | 
			
		||||
    getContact() {
 | 
			
		||||
      if (this.isNormal) {
 | 
			
		||||
        this.groupId = this.$route.query.id
 | 
			
		||||
        this.getGroup(this.$route.query.id)
 | 
			
		||||
      } else this.injectJWeixin("getCurExternalChat").then(() => {
 | 
			
		||||
        this.wxInvoke(['getCurExternalChat', {}, res => {
 | 
			
		||||
          if (res?.err_msg == 'getCurExternalChat:ok') {
 | 
			
		||||
            this.groupId = res.chatId
 | 
			
		||||
            this.getGroup(res.chatId)
 | 
			
		||||
          }
 | 
			
		||||
        }])
 | 
			
		||||
      })
 | 
			
		||||
    },
 | 
			
		||||
    getGroup(id) {
 | 
			
		||||
      this.$http.post("/app/wxcp/wxgroup/getDetail", null, {
 | 
			
		||||
        params: {id}
 | 
			
		||||
      }).then(res => {
 | 
			
		||||
        if (res?.data) {
 | 
			
		||||
          this.detail = res.data
 | 
			
		||||
        }
 | 
			
		||||
      })
 | 
			
		||||
    },
 | 
			
		||||
    handleWechat({userId, type}) {
 | 
			
		||||
      this.injectJWeixin('openUserProfile').then(() => {
 | 
			
		||||
        this.wxInvoke(['openUserProfile', {
 | 
			
		||||
          type,
 | 
			
		||||
          userid: userId
 | 
			
		||||
        }, () => 0])
 | 
			
		||||
      })
 | 
			
		||||
    }
 | 
			
		||||
  },
 | 
			
		||||
  created() {
 | 
			
		||||
    this.getContact()
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
</script>
 | 
			
		||||
 | 
			
		||||
<style lang="scss" scoped>
 | 
			
		||||
.group-resident {
 | 
			
		||||
  width: 100%;
 | 
			
		||||
  min-height: 100%;
 | 
			
		||||
  background-color: #F5F5F5;
 | 
			
		||||
  display: flex;
 | 
			
		||||
  flex-direction: column;
 | 
			
		||||
 | 
			
		||||
  ::v-deep .AiTopFixed {
 | 
			
		||||
    & > .card {
 | 
			
		||||
      margin-top: 0;
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  ::v-deep .card {
 | 
			
		||||
    background-color: #FFFFFF;
 | 
			
		||||
    padding: 16px 32px;
 | 
			
		||||
    box-sizing: border-box;
 | 
			
		||||
    margin-top: 16px;
 | 
			
		||||
 | 
			
		||||
    header {
 | 
			
		||||
      height: 192px;
 | 
			
		||||
      display: flex;
 | 
			
		||||
      align-items: center;
 | 
			
		||||
      font-size: 36px;
 | 
			
		||||
      font-weight: 600;
 | 
			
		||||
      color: #333333;
 | 
			
		||||
 | 
			
		||||
      .u-avatar {
 | 
			
		||||
        margin-right: 24px;
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    ::v-deep .u-grid-item-box {
 | 
			
		||||
      box-sizing: border-box;
 | 
			
		||||
      padding: 16px !important;
 | 
			
		||||
 | 
			
		||||
      .uni-label-pointer {
 | 
			
		||||
        width: 100%;
 | 
			
		||||
        line-height: 40px;
 | 
			
		||||
        color: #999999;
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      uni-label:last-child {
 | 
			
		||||
        margin-top: 16px;
 | 
			
		||||
        font-weight: 600;
 | 
			
		||||
        color: #333333;
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    .statistics {
 | 
			
		||||
      height: 96px;
 | 
			
		||||
      display: flex;
 | 
			
		||||
      align-items: center;
 | 
			
		||||
      border-top: 1px solid #eee;
 | 
			
		||||
      margin-top: 16px;
 | 
			
		||||
 | 
			
		||||
      span {
 | 
			
		||||
        font-size: 28px;
 | 
			
		||||
        color: #999999
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      label + b {
 | 
			
		||||
        font-size: 28px;
 | 
			
		||||
        color: #333333;
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      b {
 | 
			
		||||
        color: #1365DD !important;
 | 
			
		||||
        margin: 0 32px 0 16px;
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    & > section:first-child {
 | 
			
		||||
      height: 90px !important;
 | 
			
		||||
      display: flex;
 | 
			
		||||
      align-items: center;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    .wrap {
 | 
			
		||||
      margin-bottom: 20px;
 | 
			
		||||
 | 
			
		||||
      .item {
 | 
			
		||||
        height: 176px;
 | 
			
		||||
        display: flex;
 | 
			
		||||
        align-items: center;
 | 
			
		||||
 | 
			
		||||
        .info {
 | 
			
		||||
          width: 100%;
 | 
			
		||||
          height: 100%;
 | 
			
		||||
          display: flex;
 | 
			
		||||
          align-items: center;
 | 
			
		||||
          justify-content: space-between;
 | 
			
		||||
          margin-left: 24px;
 | 
			
		||||
          border-bottom: 1px solid #eee;
 | 
			
		||||
 | 
			
		||||
          .left {
 | 
			
		||||
            font-size: 36px;
 | 
			
		||||
            font-weight: 600;
 | 
			
		||||
            color: #333333;
 | 
			
		||||
 | 
			
		||||
            b {
 | 
			
		||||
              font-size: 28px;
 | 
			
		||||
              font-weight: 400;
 | 
			
		||||
              color: #3C7FC8;
 | 
			
		||||
              margin-left: 16px;
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            p:last-child {
 | 
			
		||||
              font-size: 28px;
 | 
			
		||||
              font-weight: 400;
 | 
			
		||||
              color: #999999;
 | 
			
		||||
              margin-top: 8px;
 | 
			
		||||
            }
 | 
			
		||||
          }
 | 
			
		||||
 | 
			
		||||
          span {
 | 
			
		||||
            width: 88px;
 | 
			
		||||
            height: 56px;
 | 
			
		||||
            text-align: center;
 | 
			
		||||
            background: rgba(19, 101, 221, 0.1);
 | 
			
		||||
            box-shadow: 0 8px 16px 0 rgba(0, 0, 0, 0.02);
 | 
			
		||||
            border-radius: 4px;
 | 
			
		||||
            font-size: 28px;
 | 
			
		||||
            font-weight: 400;
 | 
			
		||||
            color: #1365DD;
 | 
			
		||||
            line-height: 56px;
 | 
			
		||||
          }
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  ::v-deep .tag {
 | 
			
		||||
    height: 56px;
 | 
			
		||||
    line-height: 56px;
 | 
			
		||||
    background: #F3F4F7;
 | 
			
		||||
    border-radius: 6px;
 | 
			
		||||
    padding: 8px 16px;
 | 
			
		||||
    margin-right: 16px;
 | 
			
		||||
    margin-bottom: 16px;
 | 
			
		||||
    overflow: hidden;
 | 
			
		||||
    cursor: default;
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
</style>
 | 
			
		||||
@@ -1,145 +0,0 @@
 | 
			
		||||
<template>
 | 
			
		||||
  <section class="resident">
 | 
			
		||||
    <AiLoading v-if="!custom&&!error" tips="获取居民信息中..."/>
 | 
			
		||||
    <AiResult v-else-if="error" status="error" :tips="error"/>
 | 
			
		||||
    <template v-else>
 | 
			
		||||
      <tag-manage v-if="showTagManage"/>
 | 
			
		||||
      <template v-else>
 | 
			
		||||
        <AiTopFixed>
 | 
			
		||||
          <u-tabs :list="tabs" :is-scroll="false" :current="currentType" font-size="32"
 | 
			
		||||
                  bar-width="192" height="96" @change="handleTabClick"/>
 | 
			
		||||
        </AiTopFixed>
 | 
			
		||||
        <component :is="currentTab.comp"/>
 | 
			
		||||
      </template>
 | 
			
		||||
    </template>
 | 
			
		||||
 | 
			
		||||
  </section>
 | 
			
		||||
</template>
 | 
			
		||||
 | 
			
		||||
<script>
 | 
			
		||||
import {mapActions} from "vuex";
 | 
			
		||||
import Info from "./components/info";
 | 
			
		||||
import Document from "./components/document";
 | 
			
		||||
import TagManage from "./components/tagManage";
 | 
			
		||||
 | 
			
		||||
export default {
 | 
			
		||||
  name: "resident",
 | 
			
		||||
  components: {TagManage, Document, Info},
 | 
			
		||||
  provide() {
 | 
			
		||||
    return {
 | 
			
		||||
      top: this
 | 
			
		||||
    }
 | 
			
		||||
  },
 | 
			
		||||
  computed: {
 | 
			
		||||
    tabs() {
 | 
			
		||||
      return [
 | 
			
		||||
        {name: "居民信息", value: 0, comp: Info},
 | 
			
		||||
        {name: "居民档案", value: 1, comp: Document, hide: !this.detail.residentInfo},
 | 
			
		||||
      ].filter(e => !e.hide)
 | 
			
		||||
    },
 | 
			
		||||
    currentTab() {
 | 
			
		||||
      return this.tabs.find(e => e.value == this.currentType)
 | 
			
		||||
    },
 | 
			
		||||
    isNormal() {
 | 
			
		||||
      return !!this.$route.query.id;
 | 
			
		||||
    }
 | 
			
		||||
  },
 | 
			
		||||
  data() {
 | 
			
		||||
    return {
 | 
			
		||||
      currentType: 0,
 | 
			
		||||
      detail: {},
 | 
			
		||||
      showTagManage: false,
 | 
			
		||||
      custom: "",
 | 
			
		||||
      error: ""
 | 
			
		||||
    }
 | 
			
		||||
  },
 | 
			
		||||
  methods: {
 | 
			
		||||
    ...mapActions(['injectJWeixin', 'wxInvoke']),
 | 
			
		||||
    handleTabClick(i) {
 | 
			
		||||
      this.currentType = i
 | 
			
		||||
    },
 | 
			
		||||
    getContact() {
 | 
			
		||||
      if (this.isNormal) {
 | 
			
		||||
        this.getCustom(this.$route.query.id)
 | 
			
		||||
      } else {
 | 
			
		||||
        this.injectJWeixin("getCurExternalContact").then(() => {
 | 
			
		||||
          this.wxInvoke(['getCurExternalContact', {}, res => {
 | 
			
		||||
            if (res?.err_msg == 'getCurExternalContact:ok') {
 | 
			
		||||
              this.getCustom(res.userId)
 | 
			
		||||
            }
 | 
			
		||||
          }])
 | 
			
		||||
        }).catch(({errMsg}) => {
 | 
			
		||||
          this.error = errMsg
 | 
			
		||||
        })
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    getCustom(id) {
 | 
			
		||||
      this.$http.post("/app/wxcp/wxcustomer/queryCustomerById", null, {
 | 
			
		||||
        params: {id}
 | 
			
		||||
      }).then(ret => {
 | 
			
		||||
        if (ret?.data) {
 | 
			
		||||
          this.custom = id
 | 
			
		||||
          this.detail = ret.data
 | 
			
		||||
          if (this.detail.type == 2) {
 | 
			
		||||
            this.error = "只能查看个人微信绑定的居民信息"
 | 
			
		||||
          }
 | 
			
		||||
        }
 | 
			
		||||
      })
 | 
			
		||||
    }
 | 
			
		||||
  },
 | 
			
		||||
  created() {
 | 
			
		||||
    this.getContact()
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
</script>
 | 
			
		||||
 | 
			
		||||
<style lang="scss" scoped>
 | 
			
		||||
.resident {
 | 
			
		||||
  display: flex;
 | 
			
		||||
  flex-direction: column;
 | 
			
		||||
  height: 100%;
 | 
			
		||||
  background: #F5F5F5;
 | 
			
		||||
 | 
			
		||||
  .error {
 | 
			
		||||
    font-size: 32px;
 | 
			
		||||
    color: #666;
 | 
			
		||||
    text-align: center;
 | 
			
		||||
    display: flex;
 | 
			
		||||
    flex-direction: column;
 | 
			
		||||
    align-items: center;
 | 
			
		||||
    justify-content: center;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  ::v-deep .u-scroll-box {
 | 
			
		||||
    border-bottom: 1px solid #D4D4D4;
 | 
			
		||||
 | 
			
		||||
    .u-tab-bar {
 | 
			
		||||
      position: absolute;
 | 
			
		||||
      bottom: -6px;
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  ::v-deep .card {
 | 
			
		||||
    background: #fff;
 | 
			
		||||
    margin-bottom: 16px;
 | 
			
		||||
    padding: 16px 32px;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  .half {
 | 
			
		||||
    width: 50%;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  ::v-deep .tag {
 | 
			
		||||
    height: 56px;
 | 
			
		||||
    line-height: 56px;
 | 
			
		||||
    background: #F3F4F7;
 | 
			
		||||
    border-radius: 6px;
 | 
			
		||||
    padding: 8px 16px;
 | 
			
		||||
    margin-right: 16px;
 | 
			
		||||
    margin-bottom: 16px;
 | 
			
		||||
    overflow: hidden;
 | 
			
		||||
    cursor: default;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
</style>
 | 
			
		||||
@@ -17,7 +17,7 @@
 | 
			
		||||
      <div class="datass" v-for="(item, iindex) in datas" :key="iindex" @click="toDetailCard(item)">
 | 
			
		||||
        <div class="left">
 | 
			
		||||
          <img :src="item.photo" alt="" v-if="item.photo" />
 | 
			
		||||
          <img src="./components/img/4.png" alt="" v-else />
 | 
			
		||||
          <img src="components/img/4.png" alt="" v-else />
 | 
			
		||||
        </div>
 | 
			
		||||
 | 
			
		||||
        <div class="right">
 | 
			
		||||
@@ -70,7 +70,7 @@ export default {
 | 
			
		||||
    this.getList()
 | 
			
		||||
  },
 | 
			
		||||
  onShow() {
 | 
			
		||||
    document.title =  '居民列表' 
 | 
			
		||||
    document.title =  '居民列表'
 | 
			
		||||
  },
 | 
			
		||||
  methods: {
 | 
			
		||||
    getList() {
 | 
			
		||||
 
 | 
			
		||||
@@ -19,7 +19,7 @@
 | 
			
		||||
        <div class="card" v-for="(item, i) in data.family" :key="i" @click="toDetailPeople(item)">
 | 
			
		||||
          <div class="photos">
 | 
			
		||||
            <img :src="item.photo" alt="" v-if="item.photo" />
 | 
			
		||||
            <img src="./components/img/44.png" alt="" v-else />
 | 
			
		||||
            <img src="components/img/44.png" alt="" v-else />
 | 
			
		||||
          </div>
 | 
			
		||||
 | 
			
		||||
          <div class="right">
 | 
			
		||||
 
 | 
			
		||||
@@ -3,7 +3,7 @@
 | 
			
		||||
    <div class="top">
 | 
			
		||||
      <div class="photos">
 | 
			
		||||
        <img :src="data.resident.photo" alt="" v-if="data.resident && data.resident.photo" />
 | 
			
		||||
        <img src="./components/img/44.png" alt="" v-else />
 | 
			
		||||
        <img src="components/img/44.png" alt="" v-else />
 | 
			
		||||
      </div>
 | 
			
		||||
 | 
			
		||||
      <div class="right">
 | 
			
		||||
@@ -127,7 +127,7 @@ export default {
 | 
			
		||||
    })
 | 
			
		||||
  },
 | 
			
		||||
  onShow() {
 | 
			
		||||
    document.title =  '家庭成员信息' 
 | 
			
		||||
    document.title =  '家庭成员信息'
 | 
			
		||||
  },
 | 
			
		||||
  methods: {
 | 
			
		||||
    getDetail() {
 | 
			
		||||
 
 | 
			
		||||
@@ -18,7 +18,7 @@
 | 
			
		||||
        <p>{{ item.content }}</p>
 | 
			
		||||
      </div>
 | 
			
		||||
    </div>
 | 
			
		||||
    <img src="./img/add-icon.png" alt="" class="add-img" @click="add">
 | 
			
		||||
    <img src="img/add-icon.png" alt="" class="add-img" @click="add">
 | 
			
		||||
    <u-popup v-model="isShow" mode="bottom">
 | 
			
		||||
      <div class="audio">
 | 
			
		||||
        <AiVideo :src="url" autoplay></AiVideo>
 | 
			
		||||
 
 | 
			
		||||
@@ -6,7 +6,7 @@
 | 
			
		||||
          <div class="label">音频文件</div>
 | 
			
		||||
          <div class="value" @click="toRecord">
 | 
			
		||||
            <span class="color-999" :style="{ color: file ? '#333' : '' }">{{ file ? '已选择' : '请选择' }}</span>
 | 
			
		||||
            <img src="./img/right-img.png" alt="">
 | 
			
		||||
            <img src="img/right-img.png" alt="">
 | 
			
		||||
          </div>
 | 
			
		||||
        </div>
 | 
			
		||||
      </div>
 | 
			
		||||
 
 | 
			
		||||
@@ -103,7 +103,7 @@
 | 
			
		||||
      </div>
 | 
			
		||||
    </div>
 | 
			
		||||
    <div class="content" v-else>
 | 
			
		||||
      <img src="./img/body.png" alt="">
 | 
			
		||||
      <img src="img/body.png" alt="">
 | 
			
		||||
      <p class="text">点击下方按钮开始录音</p>
 | 
			
		||||
      <p class="text">为了保证效果,请靠近手机讲话哦~</p>
 | 
			
		||||
    </div>
 | 
			
		||||
 
 | 
			
		||||
@@ -33,7 +33,7 @@
 | 
			
		||||
            </span>
 | 
			
		||||
 | 
			
		||||
            <span class="right">
 | 
			
		||||
              <img src="./img/view-icon.png" alt="">
 | 
			
		||||
              <img src="img/view-icon.png" alt="">
 | 
			
		||||
              <span>{{ item.viewCount }}</span>
 | 
			
		||||
            </span>
 | 
			
		||||
          </div>
 | 
			
		||||
 
 | 
			
		||||
@@ -9,7 +9,7 @@
 | 
			
		||||
        </span>
 | 
			
		||||
 | 
			
		||||
        <span class="right">
 | 
			
		||||
          <img src="./img/view-icon.png" alt="">
 | 
			
		||||
          <img src="img/view-icon.png" alt="">
 | 
			
		||||
          <span>{{data.viewCount}}</span>
 | 
			
		||||
        </span>
 | 
			
		||||
      </div>
 | 
			
		||||
@@ -19,8 +19,8 @@
 | 
			
		||||
      <div class="contsnts">
 | 
			
		||||
        <u-parse :html="data.content"></u-parse>
 | 
			
		||||
      </div>
 | 
			
		||||
      
 | 
			
		||||
      
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    </div>
 | 
			
		||||
    <div class="img-list" v-if="data.files && data.files.length && data.contentType != 1">
 | 
			
		||||
      <div class="title">图片</div>
 | 
			
		||||
 
 | 
			
		||||
@@ -7,14 +7,14 @@
 | 
			
		||||
      <div class="select-content">
 | 
			
		||||
        <div class="area-content">
 | 
			
		||||
          <AiAreaPicker :areaId="user.areaId" v-model="areaId" @select="areaSelect">
 | 
			
		||||
            <img src="./img/local-icon.png" alt="">
 | 
			
		||||
            <img src="img/local-icon.png" alt="">
 | 
			
		||||
            <span class="label" v-if="areaName">{{ areaName }}</span>
 | 
			
		||||
            <span v-else>请选择</span>
 | 
			
		||||
            <u-icon name="arrow-down" color="#666" size="24" />
 | 
			
		||||
          </AiAreaPicker>
 | 
			
		||||
        </div>
 | 
			
		||||
        <div class="search-input" v-if="tabIndex">
 | 
			
		||||
          <img src="./img/search-icon.png" alt="">
 | 
			
		||||
          <img src="img/search-icon.png" alt="">
 | 
			
		||||
          <u-input type="text" placeholder="请输入姓名" placeholder-style="color:#999;font-size:13px;" height="18" v-model="name" @confirm="getUserList" :clearable="false" maxlength="6" />
 | 
			
		||||
        </div>
 | 
			
		||||
      </div>
 | 
			
		||||
@@ -45,12 +45,12 @@
 | 
			
		||||
      <div class="item-content" v-for="(item, index) in userList" :key="index">
 | 
			
		||||
        <div class="title" @click="showUserType(index)">
 | 
			
		||||
          <h2>{{item.label}}</h2>
 | 
			
		||||
          <img src="./img/down-icon.png" alt="" :class="item.check ? 'img-active' : ''">
 | 
			
		||||
          <img src="img/down-icon.png" alt="" :class="item.check ? 'img-active' : ''">
 | 
			
		||||
        </div>
 | 
			
		||||
        <div class="user-list" v-if="item.check">
 | 
			
		||||
          <div class="user-item" v-for="(e, indexs) in item.value" :key="indexs" v-if="item.value && item.value.length">
 | 
			
		||||
            <div class="user-img">
 | 
			
		||||
              <img src="./img/user-img.png" alt="">
 | 
			
		||||
              <img src="img/user-img.png" alt="">
 | 
			
		||||
            </div>
 | 
			
		||||
            <div class="user-info">
 | 
			
		||||
              <p class="name">{{e.name}}</p>
 | 
			
		||||
@@ -111,7 +111,7 @@ export default {
 | 
			
		||||
      this.getStatistic()
 | 
			
		||||
      this.getStatisticMon()
 | 
			
		||||
      this.getUserList()
 | 
			
		||||
    },  
 | 
			
		||||
    },
 | 
			
		||||
    tabClick(index) {
 | 
			
		||||
      this.tabIndex = index
 | 
			
		||||
    },
 | 
			
		||||
@@ -181,7 +181,7 @@ export default {
 | 
			
		||||
        })
 | 
			
		||||
        this.userList[index].check = true
 | 
			
		||||
      }
 | 
			
		||||
     
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
@@ -403,4 +403,4 @@ export default {
 | 
			
		||||
    color: #FFF;
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
</style>
 | 
			
		||||
</style>
 | 
			
		||||
 
 | 
			
		||||
@@ -9,7 +9,7 @@
 | 
			
		||||
      </div> -->
 | 
			
		||||
      <div class="area-content">
 | 
			
		||||
        <AiAreaPicker :areaId="user.areaId" v-model="areaId" @select="areaSelect">
 | 
			
		||||
          <img src="./img/local-icon.png" alt="">
 | 
			
		||||
          <img src="img/local-icon.png" alt="">
 | 
			
		||||
          <span class="label" v-if="areaName">{{ areaName }}</span>
 | 
			
		||||
          <span v-else>请选择</span>
 | 
			
		||||
          <u-icon name="arrow-down" color="#666" size="24" />
 | 
			
		||||
@@ -21,7 +21,7 @@
 | 
			
		||||
      <img src="./img/off-icon.png" alt="" class="mar-l40">离线 {{count.sum - count.online || 0}} -->
 | 
			
		||||
      <div class="item">
 | 
			
		||||
        <div id="echarts" style="width:100%;height:100%;"></div>
 | 
			
		||||
        <img src="./img/monitor-icon.png" alt="" class="monitor-icon">
 | 
			
		||||
        <img src="img/monitor-icon.png" alt="" class="monitor-icon">
 | 
			
		||||
      </div>
 | 
			
		||||
      <div class="item">
 | 
			
		||||
        <h3>{{count.online || 0}}</h3>
 | 
			
		||||
@@ -52,10 +52,10 @@
 | 
			
		||||
    <div class="list-content">
 | 
			
		||||
      <div class="item" v-for="(item, index) in list" :key="index" @click="showMonitor(item)">
 | 
			
		||||
        <img class="img" :src="item.indexUrl" alt="" v-if="item.deviceStatus == 1">
 | 
			
		||||
        <img class="img" src="./img/offline.png" alt="" v-else>
 | 
			
		||||
        <img class="img" src="img/offline.png" alt="" v-else>
 | 
			
		||||
        <p>{{item.name}}</p>
 | 
			
		||||
        <img class="icon" src="./img/play-icon.png" alt="" v-if="item.deviceStatus == 1">
 | 
			
		||||
        <img class="icon" src="./img/not-play-icon.png" alt="" v-else>
 | 
			
		||||
        <img class="icon" src="img/play-icon.png" alt="" v-if="item.deviceStatus == 1">
 | 
			
		||||
        <img class="icon" src="img/not-play-icon.png" alt="" v-else>
 | 
			
		||||
      </div>
 | 
			
		||||
      <AiEmpty v-if="!list.length"/>
 | 
			
		||||
    </div>
 | 
			
		||||
@@ -173,7 +173,7 @@ export default {
 | 
			
		||||
    },
 | 
			
		||||
  },
 | 
			
		||||
  created() {
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    this.areaId = this.user.areaId
 | 
			
		||||
    this.areaName = this.user.areaName
 | 
			
		||||
    this.getList()
 | 
			
		||||
@@ -183,7 +183,7 @@ export default {
 | 
			
		||||
    document.title = '视频监控'
 | 
			
		||||
  },
 | 
			
		||||
  mounted() {
 | 
			
		||||
    this.Echart = echarts.init(document.getElementById('echarts'))     
 | 
			
		||||
    this.Echart = echarts.init(document.getElementById('echarts'))
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
</script>
 | 
			
		||||
 
 | 
			
		||||
@@ -44,11 +44,11 @@
 | 
			
		||||
 | 
			
		||||
          <span class="icon">
 | 
			
		||||
            <!-- ing -->
 | 
			
		||||
            <img src="./components/ing.png" alt="" v-if="item.approvalStatus == 0" />
 | 
			
		||||
            <img src="components/ing.png" alt="" v-if="item.approvalStatus == 0" />
 | 
			
		||||
            <!-- end -->
 | 
			
		||||
            <img src="./components/end.png" alt="" v-if="item.approvalStatus == 1" />
 | 
			
		||||
            <img src="components/end.png" alt="" v-if="item.approvalStatus == 1" />
 | 
			
		||||
            <!-- false -->
 | 
			
		||||
            <img src="./components/reject.png" alt="" v-if="item.approvalStatus == 2" />
 | 
			
		||||
            <img src="components/reject.png" alt="" v-if="item.approvalStatus == 2" />
 | 
			
		||||
          </span>
 | 
			
		||||
        </view>
 | 
			
		||||
      </u-card>
 | 
			
		||||
 
 | 
			
		||||
@@ -40,7 +40,7 @@
 | 
			
		||||
 | 
			
		||||
          <!-- 已通过 -->
 | 
			
		||||
          <div class="people_status_agree" v-if="list.approvalStatus == 1">
 | 
			
		||||
            <img src="./components/people_status_agree.png" alt="" />
 | 
			
		||||
            <img src="components/people_status_agree.png" alt="" />
 | 
			
		||||
          </div>
 | 
			
		||||
 | 
			
		||||
          <!-- 被驳回 -->
 | 
			
		||||
@@ -120,7 +120,7 @@
 | 
			
		||||
                </div>
 | 
			
		||||
 | 
			
		||||
                <div class="avatar" v-else-if="item.title == '抄送'">
 | 
			
		||||
                  <img src="./components/Profile_Picture.png" alt="" />
 | 
			
		||||
                  <img src="components/Profile_Picture.png" alt="" />
 | 
			
		||||
                </div>
 | 
			
		||||
 | 
			
		||||
                <div class="avatar" v-else>
 | 
			
		||||
@@ -128,13 +128,13 @@
 | 
			
		||||
                </div>
 | 
			
		||||
 | 
			
		||||
                <div class="icon-yes" v-if="item.stepType == 1 || item.stepType == 0 || item.stepType == 3">
 | 
			
		||||
                  <img src="./components/agree.png" alt="" />
 | 
			
		||||
                  <img src="components/agree.png" alt="" />
 | 
			
		||||
                </div>
 | 
			
		||||
 | 
			
		||||
                <div class="" v-else-if="item.stepType == 2"></div>
 | 
			
		||||
 | 
			
		||||
                <div class="icon-no" v-else>
 | 
			
		||||
                  <img src="./components/clearn.png" />
 | 
			
		||||
                  <img src="components/clearn.png" />
 | 
			
		||||
                </div>
 | 
			
		||||
              </div>
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -1,389 +0,0 @@
 | 
			
		||||
<template>
 | 
			
		||||
  <section class="AppPartyHistory">
 | 
			
		||||
    <div v-if="isShow" style="height: 100%">
 | 
			
		||||
      <!-- 头部搜索样式 -->
 | 
			
		||||
      <div class="fixed-top" style="width:100%;">
 | 
			
		||||
        <div class="search-box">
 | 
			
		||||
          <div class="search-input flex-row" @click="changeSearchBox">
 | 
			
		||||
            <img src="https://cdn.cunwuyun.cn/img/search-red.svg"/>
 | 
			
		||||
            <span class="color-fff">请输入文章标题</span>
 | 
			
		||||
          </div>
 | 
			
		||||
        </div>
 | 
			
		||||
        <!-- 选择时间和类型 -->
 | 
			
		||||
        <div class="slect flex-row">
 | 
			
		||||
          <!-- 类型选择 -->
 | 
			
		||||
          <div class="uni-list type-slect">
 | 
			
		||||
            <div class="uni-list-cell">
 | 
			
		||||
              <div class="uni-list-cell-db">
 | 
			
		||||
                <picker @change="bindPickerChange" :value="index" :range="array" range-key="dictName">
 | 
			
		||||
                  <div class="uni-input">{{ partyType }}</div>
 | 
			
		||||
                  <img src="https://cdn.cunwuyun.cn/img/down.svg"/>
 | 
			
		||||
                </picker>
 | 
			
		||||
              </div>
 | 
			
		||||
            </div>
 | 
			
		||||
          </div>
 | 
			
		||||
          <!-- 时间选择 -->
 | 
			
		||||
          <div class="uni-list type-slect">
 | 
			
		||||
            <div class="uni-list-cell">
 | 
			
		||||
              <div class="uni-list-cell-db">
 | 
			
		||||
                <picker
 | 
			
		||||
                    mode="date"
 | 
			
		||||
                    :value="date"
 | 
			
		||||
                    :start="startDate"
 | 
			
		||||
                    :end="endDate"
 | 
			
		||||
                    @change="bindDateChange"
 | 
			
		||||
                    fields="month"
 | 
			
		||||
                >
 | 
			
		||||
                  <div class="uni-input">{{ day }}</div>
 | 
			
		||||
                  <img src="https://cdn.cunwuyun.cn/img/down.svg"/>
 | 
			
		||||
                </picker>
 | 
			
		||||
              </div>
 | 
			
		||||
            </div>
 | 
			
		||||
          </div>
 | 
			
		||||
        </div>
 | 
			
		||||
      </div>
 | 
			
		||||
 | 
			
		||||
      <!-- 党务公开列表 -->
 | 
			
		||||
      <div class="affairs-list">
 | 
			
		||||
        <div class="affairs" v-if="affairsList.length > 0">
 | 
			
		||||
          <!-- 循环 v-for -->
 | 
			
		||||
          <div v-for="(item, index) in affairsList" :key="index">
 | 
			
		||||
            <div class="affairs-item" @click="getDetail(item.id)">
 | 
			
		||||
              <div class="break-word">
 | 
			
		||||
                <span class="type">{{ $dict.getLabel(`partyHistoryType${style}`, item.type) }}</span>
 | 
			
		||||
                <span class="affirs-title">{{ item.title }}</span>
 | 
			
		||||
              </div>
 | 
			
		||||
              <div class="created-unit flex-row">
 | 
			
		||||
                <span>{{ item.organizationName || "" }}</span>
 | 
			
		||||
                <span>{{ item.createDate }}</span>
 | 
			
		||||
              </div>
 | 
			
		||||
            </div>
 | 
			
		||||
          </div>
 | 
			
		||||
        </div>
 | 
			
		||||
      </div>
 | 
			
		||||
      <AiEmpty v-if="affairsList.length == 0"/>
 | 
			
		||||
    </div>
 | 
			
		||||
    <div v-if="!isShow" class="search-input">
 | 
			
		||||
      <div class="input-box flex-row">
 | 
			
		||||
        <input
 | 
			
		||||
            type="text"
 | 
			
		||||
            class="input"
 | 
			
		||||
            placeholder="请输入文章标题"
 | 
			
		||||
            focus="false"
 | 
			
		||||
            v-model="searchValue"
 | 
			
		||||
            @blur="onBlur"
 | 
			
		||||
        />
 | 
			
		||||
        <img
 | 
			
		||||
            class="sousuo"
 | 
			
		||||
            src="https://cdn.cunwuyun.cn/img/search-active.svg"
 | 
			
		||||
        />
 | 
			
		||||
        <img
 | 
			
		||||
            v-if="searchValue"
 | 
			
		||||
            @tap="clearInput"
 | 
			
		||||
            class="clear"
 | 
			
		||||
            src="https://cdn.cunwuyun.cn/img/empty-Input.svg"
 | 
			
		||||
        />
 | 
			
		||||
        <div class="search-word" @click="search">搜索</div>
 | 
			
		||||
      </div>
 | 
			
		||||
    </div>
 | 
			
		||||
  </section>
 | 
			
		||||
</template>
 | 
			
		||||
<script>
 | 
			
		||||
import {mapState} from "vuex";
 | 
			
		||||
 | 
			
		||||
export default {
 | 
			
		||||
  name: "AppPartyHistory",
 | 
			
		||||
  appName: "党史文章",
 | 
			
		||||
  data() {
 | 
			
		||||
    const currentDate = this.getDate({
 | 
			
		||||
      format: true,
 | 
			
		||||
    });
 | 
			
		||||
    return {
 | 
			
		||||
      inputValue: "请输入文章标题",
 | 
			
		||||
      isShow: true,
 | 
			
		||||
      array: [],
 | 
			
		||||
      index: 0,
 | 
			
		||||
      partyType: "类型",
 | 
			
		||||
      partyTypeIndex: "", //类型index 0:党务公开,1:三会一课
 | 
			
		||||
      date: currentDate,
 | 
			
		||||
      day: "时间",
 | 
			
		||||
      createData: "", //创建时间
 | 
			
		||||
      affairsList: [],
 | 
			
		||||
      searchValue: "", //搜索框输入值
 | 
			
		||||
      pageNum: 1,
 | 
			
		||||
      pageSize: 10,
 | 
			
		||||
      pages: 2,
 | 
			
		||||
      style: '',
 | 
			
		||||
    };
 | 
			
		||||
  },
 | 
			
		||||
  computed: {
 | 
			
		||||
    startDate() {
 | 
			
		||||
      return this.getDate("start");
 | 
			
		||||
    },
 | 
			
		||||
    endDate() {
 | 
			
		||||
      return this.getDate("end");
 | 
			
		||||
    },
 | 
			
		||||
    ...mapState(["user"]),
 | 
			
		||||
  },
 | 
			
		||||
  onLoad(option) {
 | 
			
		||||
    this.style = option.style
 | 
			
		||||
    this.$dict.load("partyHistoryType0", "partyHistoryType1", "partyHistoryType2").then(() => {
 | 
			
		||||
      this.array = this.$dict.getDict(`partyHistoryType${this.style}`)
 | 
			
		||||
      this.array.unshift({dictName: "全部类型", dictValue: ""})
 | 
			
		||||
      this.getPartyList()
 | 
			
		||||
    })
 | 
			
		||||
  },
 | 
			
		||||
  methods: {
 | 
			
		||||
    bindPickerChange(e) {
 | 
			
		||||
      this.partyType = this.array[e.detail.value].dictName;
 | 
			
		||||
      this.partyTypeIndex = this.array[e.detail.value].dictValue;
 | 
			
		||||
      this.pageNum = 1;
 | 
			
		||||
      this.pages = 2;
 | 
			
		||||
      this.pageSize = 10;
 | 
			
		||||
      this.getPartyList();
 | 
			
		||||
    },
 | 
			
		||||
    bindDateChange: function (e) {
 | 
			
		||||
      this.day = e.target.value;
 | 
			
		||||
      this.createData =
 | 
			
		||||
          e.target.value + "-" + "08" + " " + "00" + ":" + "00" + ":" + "00";
 | 
			
		||||
      this.pageNum = 1;
 | 
			
		||||
      this.pages = 2;
 | 
			
		||||
      this.pageSize = 10;
 | 
			
		||||
      this.getPartyList();
 | 
			
		||||
    },
 | 
			
		||||
    getDate(type) {
 | 
			
		||||
      const date = new Date();
 | 
			
		||||
      let year = date.getFullYear();
 | 
			
		||||
      let month = date.getMonth() + 1;
 | 
			
		||||
      let day = date.getDate();
 | 
			
		||||
 | 
			
		||||
      if (type === "start") {
 | 
			
		||||
        year = year - 60;
 | 
			
		||||
      } else if (type === "end") {
 | 
			
		||||
        year = year + 2;
 | 
			
		||||
      }
 | 
			
		||||
      month = month > 9 ? month : "0" + month;
 | 
			
		||||
      day = day > 9 ? day : "0" + day;
 | 
			
		||||
 | 
			
		||||
      return `${year}-${month}-08 00:00:00  `;
 | 
			
		||||
    },
 | 
			
		||||
    changeSearchBox() {
 | 
			
		||||
      this.isShow = false;
 | 
			
		||||
    },
 | 
			
		||||
    onBlur(e) {
 | 
			
		||||
      this.searchValue = e.target.value;
 | 
			
		||||
 | 
			
		||||
      if (this.searchValue) {
 | 
			
		||||
        this.inputValue = this.searchValue;
 | 
			
		||||
      } else {
 | 
			
		||||
        this.inputValue = "请输入文章标题";
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    search() {
 | 
			
		||||
      this.isShow = true;
 | 
			
		||||
      this.pageNum = 1;
 | 
			
		||||
      this.pageSize = 10;
 | 
			
		||||
      this.pages = 2;
 | 
			
		||||
      this.getPartyList();
 | 
			
		||||
    },
 | 
			
		||||
    clearInput() {
 | 
			
		||||
      this.searchValue = "";
 | 
			
		||||
      this.inputValue = "请输入文章标题";
 | 
			
		||||
    },
 | 
			
		||||
    getDetail(id) {
 | 
			
		||||
      uni.navigateTo({
 | 
			
		||||
        url: `./detail?id=${id}`,
 | 
			
		||||
      });
 | 
			
		||||
    },
 | 
			
		||||
    getPartyList() {
 | 
			
		||||
      if (this.pageNum > this.pages) return;
 | 
			
		||||
      this.$http.post(`/app/apppartyhistory/listWechat`, {
 | 
			
		||||
        condition: this.searchValue,
 | 
			
		||||
        style: this.style,
 | 
			
		||||
        type: this.partyTypeIndex,
 | 
			
		||||
        createDate: this.createData,
 | 
			
		||||
        current: this.pageNum,
 | 
			
		||||
        size: this.pageSize,
 | 
			
		||||
        // organizationId: this.user.partyOrgId
 | 
			
		||||
      }).then((res) => {
 | 
			
		||||
        if (res.code == 0) {
 | 
			
		||||
          const affairsList = this.pageNum > 1 ? [...this.affairsList, ...res.data.records] : res.data.records;
 | 
			
		||||
          this.pages = Math.ceil(res.data.total / 10);
 | 
			
		||||
          this.affairsList = affairsList;
 | 
			
		||||
        }
 | 
			
		||||
      });
 | 
			
		||||
    },
 | 
			
		||||
  },
 | 
			
		||||
  onReachBottom() {
 | 
			
		||||
    this.pageNum = this.pageNum + 1;
 | 
			
		||||
    this.getPartyList();
 | 
			
		||||
  },
 | 
			
		||||
};
 | 
			
		||||
</script>
 | 
			
		||||
<style lang="scss" scope>
 | 
			
		||||
@import "../../../common/common.css";
 | 
			
		||||
 | 
			
		||||
.AppPartyHistory {
 | 
			
		||||
  .search-box {
 | 
			
		||||
    width: 100%;
 | 
			
		||||
    height: 112px;
 | 
			
		||||
    background-color: #e60012;
 | 
			
		||||
    padding: 24px 32px;
 | 
			
		||||
    box-sizing: border-box;
 | 
			
		||||
 | 
			
		||||
    .search-input {
 | 
			
		||||
      line-height: 64px;
 | 
			
		||||
      width: 100%;
 | 
			
		||||
      height: 100%;
 | 
			
		||||
      background: #ce0010;
 | 
			
		||||
      //   background:rgba(0,0,0,1);
 | 
			
		||||
      border-radius: 32px;
 | 
			
		||||
      //   opacity: 0.1;
 | 
			
		||||
      color: #f0cbcd;
 | 
			
		||||
      font-size: 26px;
 | 
			
		||||
 | 
			
		||||
      img {
 | 
			
		||||
        width: 40px;
 | 
			
		||||
        height: 40px;
 | 
			
		||||
        margin: 8px 8px 8px 24px;
 | 
			
		||||
        position: relative;
 | 
			
		||||
        top: 6px;
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      .color-fff {
 | 
			
		||||
        color: #fff;
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  .slect {
 | 
			
		||||
    width: 100%;
 | 
			
		||||
    height: 96px;
 | 
			
		||||
    background-color: #fff;
 | 
			
		||||
    color: #666;
 | 
			
		||||
 | 
			
		||||
    .type-slect {
 | 
			
		||||
      width: 50%;
 | 
			
		||||
      border-right: 1px solid #f7f7f7;
 | 
			
		||||
      margin: 30px 0;
 | 
			
		||||
      box-sizing: border-box;
 | 
			
		||||
      text-align: center;
 | 
			
		||||
      font-size: 26px;
 | 
			
		||||
 | 
			
		||||
      .uni-input {
 | 
			
		||||
        display: inline-block;
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      img {
 | 
			
		||||
        width: 32px;
 | 
			
		||||
        height: 32px;
 | 
			
		||||
        display: inline-block;
 | 
			
		||||
        position: relative;
 | 
			
		||||
        top: 6px;
 | 
			
		||||
        margin-left: 8 srpx;
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    .type-slect:nth-child(2) {
 | 
			
		||||
      border: none;
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  .affairs-list {
 | 
			
		||||
    width: 100%;
 | 
			
		||||
    //   height:calc(100% - 210rpx);
 | 
			
		||||
    //   overflow-y: auto;
 | 
			
		||||
    padding-top: 200px;
 | 
			
		||||
 | 
			
		||||
    .affairs {
 | 
			
		||||
      background-color: #fff;
 | 
			
		||||
      margin: 32px;
 | 
			
		||||
 | 
			
		||||
      .affairs-item {
 | 
			
		||||
        padding: 32px;
 | 
			
		||||
        box-sizing: border-box;
 | 
			
		||||
 | 
			
		||||
        .type {
 | 
			
		||||
          padding: 8px;
 | 
			
		||||
          box-sizing: border-box;
 | 
			
		||||
          background-color: #e6edf7;
 | 
			
		||||
          color: #135ab8;
 | 
			
		||||
          font-size: 26px;
 | 
			
		||||
          margin-right: 16px;
 | 
			
		||||
          border-radius: 8px;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        .affirs-title {
 | 
			
		||||
          color: #333333;
 | 
			
		||||
          font-size: 32px;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        .created-unit {
 | 
			
		||||
          font-size: 28px;
 | 
			
		||||
          color: #999;
 | 
			
		||||
          justify-content: space-between;
 | 
			
		||||
          margin-top: 16px;
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  .no-affairs {
 | 
			
		||||
    width: 100%;
 | 
			
		||||
    height: calc(100% - 210rpx);
 | 
			
		||||
    display: flex;
 | 
			
		||||
    justify-content: center;
 | 
			
		||||
    align-items: center;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  .search-input {
 | 
			
		||||
    //   width:100%;
 | 
			
		||||
    //   height:112rpx;
 | 
			
		||||
    .input-box {
 | 
			
		||||
      width: 100%;
 | 
			
		||||
      height: 112px;
 | 
			
		||||
      background-color: #fff;
 | 
			
		||||
      padding: 24px 32px;
 | 
			
		||||
      box-sizing: border-box;
 | 
			
		||||
      position: relative;
 | 
			
		||||
 | 
			
		||||
      .sousuo {
 | 
			
		||||
        position: absolute;
 | 
			
		||||
        top: 35px;
 | 
			
		||||
        left: 60px;
 | 
			
		||||
        width: 40px;
 | 
			
		||||
        height: 40px;
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      .input {
 | 
			
		||||
        background-color: #f3f3f3;
 | 
			
		||||
        width: 598px;
 | 
			
		||||
        height: 64px;
 | 
			
		||||
        color: #999999;
 | 
			
		||||
        font-size: 26px;
 | 
			
		||||
        margin-left: 8px;
 | 
			
		||||
        border-radius: 32px;
 | 
			
		||||
        padding-left: 70px;
 | 
			
		||||
        padding-right: 60px;
 | 
			
		||||
        box-sizing: border-box;
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      .clear {
 | 
			
		||||
        width: 32px;
 | 
			
		||||
        height: 32px;
 | 
			
		||||
        position: absolute;
 | 
			
		||||
        top: 40px;
 | 
			
		||||
        right: 130px;
 | 
			
		||||
        z-index: 10;
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      .search-word {
 | 
			
		||||
        font-size: 28px;
 | 
			
		||||
        color: #135ab8;
 | 
			
		||||
        line-height: 60px;
 | 
			
		||||
        margin-left: 20px;
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
</style>
 | 
			
		||||
@@ -1,145 +0,0 @@
 | 
			
		||||
<template>
 | 
			
		||||
  <div>
 | 
			
		||||
    <scroll-view
 | 
			
		||||
      scroll-y
 | 
			
		||||
      class="commentList"
 | 
			
		||||
      @scrolltolower="page.current++, getComments()"
 | 
			
		||||
    >
 | 
			
		||||
      <div class="comments-list" v-if="commentList.length">
 | 
			
		||||
        <div
 | 
			
		||||
          class="comments-item flex-row"
 | 
			
		||||
          v-for="(item, i) in commentList"
 | 
			
		||||
          :key="i"
 | 
			
		||||
        >
 | 
			
		||||
          <div class="user-avatar">
 | 
			
		||||
            <image v-if="item.avatar" :src="item.avatar"></image>
 | 
			
		||||
            <image v-else src="https://cdn.cunwuyun.cn/img/personal.png"></image>
 | 
			
		||||
          </div>
 | 
			
		||||
          <div class="content flex-column">
 | 
			
		||||
            <div class="flex-row" style="justify-content: space-between">
 | 
			
		||||
              <text>{{ item.createUser }}</text>
 | 
			
		||||
              <text class="commentTime">{{ item.commentTime }}</text>
 | 
			
		||||
            </div>
 | 
			
		||||
            <div>{{ item.content }}</div>
 | 
			
		||||
          </div>
 | 
			
		||||
        </div>
 | 
			
		||||
      </div>
 | 
			
		||||
      <AiEmpty v-else />
 | 
			
		||||
      <view class="tips" v-if="commentList.length"> 已加载全部评论</view>
 | 
			
		||||
    </scroll-view>
 | 
			
		||||
  </div>
 | 
			
		||||
</template>
 | 
			
		||||
 | 
			
		||||
<script>
 | 
			
		||||
export default {
 | 
			
		||||
  name: "commentList",
 | 
			
		||||
  props: {
 | 
			
		||||
    detail: Object,
 | 
			
		||||
  },
 | 
			
		||||
  data() {
 | 
			
		||||
    return {
 | 
			
		||||
      commentList: [],
 | 
			
		||||
      page: {
 | 
			
		||||
        current: 1,
 | 
			
		||||
        size: 10000,
 | 
			
		||||
      },
 | 
			
		||||
    };
 | 
			
		||||
  },
 | 
			
		||||
  methods: {
 | 
			
		||||
    getComments() {
 | 
			
		||||
      this.$http.post(`/app/apppartyhistorycomment/list?partyHistoryId=${this.detail.id}&size=10000`).then((res) => {
 | 
			
		||||
        if (res && res.data) {
 | 
			
		||||
          this.commentList = res.data.records;
 | 
			
		||||
          this.$emit("comments", res.data.total);
 | 
			
		||||
        }
 | 
			
		||||
      });
 | 
			
		||||
    },
 | 
			
		||||
  },
 | 
			
		||||
  mounted() {
 | 
			
		||||
    this.$nextTick(() => this.getComments());
 | 
			
		||||
  },
 | 
			
		||||
};
 | 
			
		||||
</script>
 | 
			
		||||
 | 
			
		||||
<style lang="scss" scoped>
 | 
			
		||||
.commentList {
 | 
			
		||||
  width: 100%;
 | 
			
		||||
  margin-bottom: 135px;
 | 
			
		||||
  overflow-y: auto;
 | 
			
		||||
 | 
			
		||||
  .comments-list {
 | 
			
		||||
    width: 100%;
 | 
			
		||||
    overflow-y: auto;
 | 
			
		||||
    box-sizing: border-box;
 | 
			
		||||
 | 
			
		||||
    .user-avatar {
 | 
			
		||||
      display: inline-block;
 | 
			
		||||
      width: 80rpx;
 | 
			
		||||
      margin: 46rpx 20rpx 0 0;
 | 
			
		||||
      image {
 | 
			
		||||
        width: 80rpx;
 | 
			
		||||
        height: 80rpx;
 | 
			
		||||
        border-radius: 50%;
 | 
			
		||||
      }
 | 
			
		||||
      .user-bg {
 | 
			
		||||
        display: inline-block;
 | 
			
		||||
        width: 80rpx;
 | 
			
		||||
        height: 80rpx;
 | 
			
		||||
        border-radius: 50%;
 | 
			
		||||
        line-height: 80rpx;
 | 
			
		||||
        text-align: center;
 | 
			
		||||
        background-color: #26f;
 | 
			
		||||
        color: #fff;
 | 
			
		||||
        font-size: 28rpx;
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    .comments-item {
 | 
			
		||||
      border-bottom: 1px solid #f7f7f7;
 | 
			
		||||
      padding: 0 32px;
 | 
			
		||||
      color: #333;
 | 
			
		||||
      font-size: 28px;
 | 
			
		||||
      background-color: #fff;
 | 
			
		||||
 | 
			
		||||
      & + .comments-item {
 | 
			
		||||
        border-top: 4px solid #eee;
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      .content {
 | 
			
		||||
        display: inline-block;
 | 
			
		||||
        width: calc(100% - 120rpx);
 | 
			
		||||
        background-color: #fff;
 | 
			
		||||
        padding: 46px 0 32px 0;
 | 
			
		||||
        box-sizing: border-box;
 | 
			
		||||
 | 
			
		||||
        .name {
 | 
			
		||||
          margin-bottom: 10px;
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      .commentTime {
 | 
			
		||||
        color: #999;
 | 
			
		||||
        font-size: 24px;
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  .tips {
 | 
			
		||||
    line-height: 90px;
 | 
			
		||||
    width: 100%;
 | 
			
		||||
    color: #999;
 | 
			
		||||
    font-size: 24px;
 | 
			
		||||
    text-align: center;
 | 
			
		||||
    background-color: #f3f6f9;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  .no-comment-list {
 | 
			
		||||
    width: 100%;
 | 
			
		||||
    height: 100%;
 | 
			
		||||
    display: flex;
 | 
			
		||||
    justify-content: center;
 | 
			
		||||
    align-items: center;
 | 
			
		||||
    font-size: 30px;
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
</style>
 | 
			
		||||
@@ -1,278 +0,0 @@
 | 
			
		||||
<template>
 | 
			
		||||
  <div class="page">
 | 
			
		||||
    <div>
 | 
			
		||||
      <div v-if="!showCommentList" class="detail">
 | 
			
		||||
        <!-- 文章标题 -->
 | 
			
		||||
        <div class="created-unit">
 | 
			
		||||
          <div class="artical-title break-word">{{ affairs.title }}</div>
 | 
			
		||||
          <div class="artical-unit">
 | 
			
		||||
            <span> 发布党组织 :{{ affairs.organizationName || "-" }}</span>
 | 
			
		||||
          </div>
 | 
			
		||||
          <div class="artical-unit">
 | 
			
		||||
            <text>发布时间:{{ affairs.createDate }}</text>
 | 
			
		||||
            <text />
 | 
			
		||||
          </div>
 | 
			
		||||
        </div>
 | 
			
		||||
        <!-- 文章内容 -->
 | 
			
		||||
        <div class="artical-content break-word">
 | 
			
		||||
          <u-parse :html="affairs.content" class="content" v-if="affairs.content"></u-parse>
 | 
			
		||||
        </div>
 | 
			
		||||
        <!-- 语音播报-->
 | 
			
		||||
        <AiTransSpeech :src="affairs.speech" v-if="affairs.speech"/>
 | 
			
		||||
      </div>
 | 
			
		||||
      <commentList v-else :detail="affairs"></commentList>
 | 
			
		||||
      <AiComment
 | 
			
		||||
        :comment-count="commentCount"
 | 
			
		||||
        @submitComment="submitComment"
 | 
			
		||||
        @showCommentList="showCommentList = true"
 | 
			
		||||
      />
 | 
			
		||||
    </div>
 | 
			
		||||
  </div>
 | 
			
		||||
</template>
 | 
			
		||||
<script>
 | 
			
		||||
import { mapState } from "vuex";
 | 
			
		||||
import commentList from './commentList'
 | 
			
		||||
export default {
 | 
			
		||||
  name: "policyDetail",
 | 
			
		||||
  components: {commentList},
 | 
			
		||||
  computed: {
 | 
			
		||||
    ...mapState(["user"]),
 | 
			
		||||
  },
 | 
			
		||||
  data() {
 | 
			
		||||
    return {
 | 
			
		||||
      affairs: {},
 | 
			
		||||
      showCommentList: false,
 | 
			
		||||
      commentCount: 0,
 | 
			
		||||
    };
 | 
			
		||||
  },
 | 
			
		||||
  onLoad(options) {
 | 
			
		||||
    this.$dict.load("policyPromotionType");
 | 
			
		||||
    this.id = options.id;
 | 
			
		||||
    this.getPartyAffairsDetail(this.id);
 | 
			
		||||
    this.getCount();
 | 
			
		||||
  },
 | 
			
		||||
  methods: {
 | 
			
		||||
    getCount() {
 | 
			
		||||
      this.$http.post(`/app/apppartyhistorycomment/list?partyHistoryId=${this.id}`).then((res) => {
 | 
			
		||||
        if (res && res.data) {
 | 
			
		||||
          this.commentCount = res.data.total;
 | 
			
		||||
        }
 | 
			
		||||
      });
 | 
			
		||||
    },
 | 
			
		||||
    getPartyAffairsDetail(id) {
 | 
			
		||||
      this.$http.post(`/app/apppartyhistory/queryDetailByIdWeChat?id=${id}`).then((res) => {
 | 
			
		||||
          if (res && res.data) {
 | 
			
		||||
            res.data.createDate = res.data.createDate.substring(0, 10);
 | 
			
		||||
            const regex = new RegExp("<img", "gi");
 | 
			
		||||
            res.data.content = res.data.content
 | 
			
		||||
              .replace(
 | 
			
		||||
                regex,
 | 
			
		||||
                `<img style="max-width:100%!important;" calss="img"`
 | 
			
		||||
              )
 | 
			
		||||
              .replace(/<p([\s\w"=\/\.:;]+)((?:(class="[^"]+")))/gi, "<p")
 | 
			
		||||
              .replace(/<p>/gi, '<p class="p_class">')
 | 
			
		||||
              .replace(/style=""/g, 'style="max-width:100%!important;"');
 | 
			
		||||
            res.data.content = res.data.content.replace(
 | 
			
		||||
              /<img[^>]*>/gi,
 | 
			
		||||
              function (match) {
 | 
			
		||||
                return match.replace(
 | 
			
		||||
                  /style\s*?=\s*?([‘"])[\s\S]*?\1/gi,
 | 
			
		||||
                  'style="max-width:100%;"'
 | 
			
		||||
                ); // 替换style
 | 
			
		||||
              }
 | 
			
		||||
            );
 | 
			
		||||
 | 
			
		||||
            if (res.data.files && res.data.files.length) {
 | 
			
		||||
              res.data.files.map(item => {
 | 
			
		||||
                var size = item.size / 1024;
 | 
			
		||||
                item.fileSize = size.toFixed(0);
 | 
			
		||||
                return item
 | 
			
		||||
              })
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            this.affairs = { ...res.data };
 | 
			
		||||
          }
 | 
			
		||||
        });
 | 
			
		||||
    },
 | 
			
		||||
    back() {
 | 
			
		||||
      if (getCurrentPages().length === 1) {
 | 
			
		||||
        uni.switchTab({
 | 
			
		||||
          url: "/pages/home/home",
 | 
			
		||||
        });
 | 
			
		||||
        return false;
 | 
			
		||||
      }
 | 
			
		||||
      this.showCommentList
 | 
			
		||||
        ? (this.showCommentList = false)
 | 
			
		||||
        : uni.navigateBack();
 | 
			
		||||
    },
 | 
			
		||||
    submitComment(content) {
 | 
			
		||||
      this.$http
 | 
			
		||||
        .post("/app/apppartyhistorycomment/addOrUpdate", {
 | 
			
		||||
          partyHistoryId: this.affairs.id,
 | 
			
		||||
          content: content,
 | 
			
		||||
          name: this.user.nickName,
 | 
			
		||||
          avatar: this.user.avatarUrl,
 | 
			
		||||
          organizationId: this.affairs.organizationId
 | 
			
		||||
        })
 | 
			
		||||
        .then((res) => {
 | 
			
		||||
          if (res && res.code == 0) {
 | 
			
		||||
            uni.showToast({ icon: "success", title: "评论成功" });
 | 
			
		||||
            this.showCommentList = true
 | 
			
		||||
            this.getCount()
 | 
			
		||||
          } else {
 | 
			
		||||
            uni.showToast({ icon: "none", title: res.msg });
 | 
			
		||||
          }
 | 
			
		||||
        })
 | 
			
		||||
        .catch((err) => {
 | 
			
		||||
          uni.showToast({ icon: "none", title: err });
 | 
			
		||||
        });
 | 
			
		||||
    },
 | 
			
		||||
  },
 | 
			
		||||
};
 | 
			
		||||
</script>
 | 
			
		||||
<style lang="scss" scoped>
 | 
			
		||||
@import "../../../common/common.css";
 | 
			
		||||
 | 
			
		||||
.page {
 | 
			
		||||
  .navHeadBar {
 | 
			
		||||
    display: flex;
 | 
			
		||||
    justify-content: space-between;
 | 
			
		||||
    align-items: center;
 | 
			
		||||
    background: #135ab8;
 | 
			
		||||
    color: #fff;
 | 
			
		||||
    font-size: 13px;
 | 
			
		||||
    height: 40px;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  .detail {
 | 
			
		||||
    width: 100%;
 | 
			
		||||
    overflow-y: auto;
 | 
			
		||||
 | 
			
		||||
    .created-unit {
 | 
			
		||||
      width: 100%;
 | 
			
		||||
      padding: 32px;
 | 
			
		||||
      box-sizing: border-box;
 | 
			
		||||
      background-color: #D40A05;
 | 
			
		||||
      color: #fff;
 | 
			
		||||
 | 
			
		||||
      .artical-title {
 | 
			
		||||
        font-size: 40px;
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      .artical-unit {
 | 
			
		||||
        font-size: 28px;
 | 
			
		||||
        margin-top: 16px;
 | 
			
		||||
        opacity: 0.8;
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    .artical-content {
 | 
			
		||||
      color: #666666;
 | 
			
		||||
      font-size: 32px;
 | 
			
		||||
      padding: 32px 32px 128px 32px;
 | 
			
		||||
      box-sizing: border-box;
 | 
			
		||||
      background-color: #fff;
 | 
			
		||||
 | 
			
		||||
      .p_class {
 | 
			
		||||
        margin-top: 40px;
 | 
			
		||||
        font-size: 32px;
 | 
			
		||||
        color: #333;
 | 
			
		||||
        text-indent: 0;
 | 
			
		||||
        width: 100%;
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      .img {
 | 
			
		||||
        width: 100% !important;
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    .attachment {
 | 
			
		||||
      width: 100%;
 | 
			
		||||
      padding: 32px 32px 96px 32px;
 | 
			
		||||
      box-sizing: border-box;
 | 
			
		||||
      background-color: #ffffff;
 | 
			
		||||
      margin-top: 16px;
 | 
			
		||||
 | 
			
		||||
      .attachment-title {
 | 
			
		||||
        font-size: 32px;
 | 
			
		||||
        color: #333333;
 | 
			
		||||
        font-weight: 500;
 | 
			
		||||
 | 
			
		||||
        image {
 | 
			
		||||
          width: 48px;
 | 
			
		||||
          height: 48px;
 | 
			
		||||
          vertical-align: middle;
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.p_class {
 | 
			
		||||
  margin-top: 40px;
 | 
			
		||||
  font-size: 32px;
 | 
			
		||||
  color: #333;
 | 
			
		||||
  text-indent: 0;
 | 
			
		||||
  width: 100%;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.img {
 | 
			
		||||
  max-width: 100% !important;
 | 
			
		||||
}
 | 
			
		||||
  .attachment {
 | 
			
		||||
    width: 100%;
 | 
			
		||||
    padding: 32px;
 | 
			
		||||
    box-sizing: border-box;
 | 
			
		||||
    background-color: #FFFFFF;
 | 
			
		||||
    margin-top: 16px;
 | 
			
		||||
 | 
			
		||||
    .attachment-title {
 | 
			
		||||
      font-size: 32px;
 | 
			
		||||
      color: #333333;
 | 
			
		||||
      font-weight: 500;
 | 
			
		||||
 | 
			
		||||
      image {
 | 
			
		||||
        width: 48px;
 | 
			
		||||
        height: 48px;
 | 
			
		||||
        vertical-align: middle;
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    .attachment-item {
 | 
			
		||||
      border: 1px solid rgba(204, 204, 204, 1);
 | 
			
		||||
      padding: 16px;
 | 
			
		||||
      box-sizing: border-box;
 | 
			
		||||
      margin-top: 34px;
 | 
			
		||||
      display: flex;
 | 
			
		||||
      flex-direction: row;
 | 
			
		||||
      justify-content: space-between;
 | 
			
		||||
      border-radius: 8px;
 | 
			
		||||
 | 
			
		||||
      .file-name {
 | 
			
		||||
        justify-content: flex-start;
 | 
			
		||||
        align-items: center;
 | 
			
		||||
 | 
			
		||||
        image {
 | 
			
		||||
          width: 96px;
 | 
			
		||||
          height: 96px;
 | 
			
		||||
          vertical-align: middle;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        .title {
 | 
			
		||||
          color: #333333;
 | 
			
		||||
          font-size: 32px;
 | 
			
		||||
          word-break: break-all;
 | 
			
		||||
          flex: 1;
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      .size {
 | 
			
		||||
        color: #999;
 | 
			
		||||
        font-size: 28px;
 | 
			
		||||
        display: flex;
 | 
			
		||||
        justify-content: cemter;
 | 
			
		||||
        align-items: center;
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
</style>
 | 
			
		||||
@@ -1,304 +0,0 @@
 | 
			
		||||
<template>
 | 
			
		||||
  <div class="AppPartyOrganization">
 | 
			
		||||
    <div class="header"></div>
 | 
			
		||||
    <div class="content">
 | 
			
		||||
      <div class="party-org">
 | 
			
		||||
        <div class="title">所在组织</div>
 | 
			
		||||
        <p class="org-select" @click="selectShow = true">{{ detail.name || '请选择' }}<img
 | 
			
		||||
            src="https://cdn.cunwuyun.cn/img/down.svg"/></p>
 | 
			
		||||
      </div>
 | 
			
		||||
      <div class="org-info">
 | 
			
		||||
        <div class="title">组织信息</div>
 | 
			
		||||
        <div class="flex-row">
 | 
			
		||||
          <span class="color-666">组织类型</span>
 | 
			
		||||
          <span class="color-333">{{ $dict.getLabel("orgType", detail.orgType) }}</span>
 | 
			
		||||
        </div>
 | 
			
		||||
        <div class="flex-row">
 | 
			
		||||
          <span class="color-666">组织级别</span>
 | 
			
		||||
          <span class="color-333">{{ $dict.getLabel("orgPartyType", detail.partyType) }}</span>
 | 
			
		||||
        </div>
 | 
			
		||||
        <div class="flex-row">
 | 
			
		||||
          <span class="color-666">党员人数</span>
 | 
			
		||||
          <span class="color-333">{{ count }}人</span>
 | 
			
		||||
        </div>
 | 
			
		||||
      </div>
 | 
			
		||||
      <div class="org-info">
 | 
			
		||||
        <div class="flex-row">
 | 
			
		||||
          <span class="title">报到状态</span>
 | 
			
		||||
          <span :class="userInfo.reportOrgId ? 'status1' : 'status0'">{{ userInfo.reportOrgId ? '已报到' : '未报到' }}</span>
 | 
			
		||||
        </div>
 | 
			
		||||
      </div>
 | 
			
		||||
    </div>
 | 
			
		||||
 | 
			
		||||
    <u-select v-model="selectShow" :list="treeData" @confirm="confirm"></u-select>
 | 
			
		||||
    <u-popup v-model="dialog" mode="center" border-radius="8">
 | 
			
		||||
      <div class="estateNotice">
 | 
			
		||||
        <b>您已加入过党组织,是否变更?</b>
 | 
			
		||||
        <u-gap height="40"/>
 | 
			
		||||
        <div class="curEstate">
 | 
			
		||||
          <div class="flexRow">
 | 
			
		||||
            <b>当前党组织:</b>
 | 
			
		||||
            <span>{{ detail.name }}</span>
 | 
			
		||||
          </div>
 | 
			
		||||
          <div class="flexRow">
 | 
			
		||||
            <b>当前报到状态:</b>
 | 
			
		||||
            <span
 | 
			
		||||
                :class="userInfo.reportOrgId ? 'status1' : 'status0'">{{ userInfo.reportOrgId ? '已报到' : '未报到' }}</span>
 | 
			
		||||
          </div>
 | 
			
		||||
          <div class="flexRow">
 | 
			
		||||
            <b>变更党组织:</b>
 | 
			
		||||
            <span>{{ changeOrgInfo.label }}</span>
 | 
			
		||||
          </div>
 | 
			
		||||
        </div>
 | 
			
		||||
        <u-gap height="34"/>
 | 
			
		||||
        <div class="alert">变更党组织后需尽快前往新党组织报到</div>
 | 
			
		||||
        <u-gap height="62"/>
 | 
			
		||||
        <div class="flexRow footer">
 | 
			
		||||
          <div class="fill"/>
 | 
			
		||||
          <span @click="dialog=false">取消</span>
 | 
			
		||||
          <span @click="dialog=false,bindEstate()">确认</span>
 | 
			
		||||
        </div>
 | 
			
		||||
      </div>
 | 
			
		||||
    </u-popup>
 | 
			
		||||
  </div>
 | 
			
		||||
</template>
 | 
			
		||||
 | 
			
		||||
<script>
 | 
			
		||||
export default {
 | 
			
		||||
  name: "AppPartyOrganization",
 | 
			
		||||
  appName: "党组织",
 | 
			
		||||
  data() {
 | 
			
		||||
    return {
 | 
			
		||||
      dialog: false,
 | 
			
		||||
      detail: {},
 | 
			
		||||
      treeData: [],
 | 
			
		||||
      selectShow: false,
 | 
			
		||||
      reportOrgName: '', //报到党组织名称
 | 
			
		||||
      reportOrgId: '',
 | 
			
		||||
      changeOrgInfo: {},
 | 
			
		||||
      userInfo: {},
 | 
			
		||||
      count: 0
 | 
			
		||||
    }
 | 
			
		||||
  },
 | 
			
		||||
  onLoad() {
 | 
			
		||||
    this.$dict.load("orgType", "orgPartyType").then(() => {
 | 
			
		||||
      this.getUserInfo()
 | 
			
		||||
    })
 | 
			
		||||
 | 
			
		||||
  },
 | 
			
		||||
  methods: {
 | 
			
		||||
    getUserInfo() {
 | 
			
		||||
      this.$http.post("/app/appparty/chanhudetail").then(res => {
 | 
			
		||||
        if (res?.data) {
 | 
			
		||||
          if (res.data.reportOrgId) {
 | 
			
		||||
            this.reportOrgName = res.data.reportOrgName
 | 
			
		||||
            this.reportOrgId = res.data.reportOrgId
 | 
			
		||||
          } else {
 | 
			
		||||
            this.reportOrgName = res.data.partyOrgName
 | 
			
		||||
            this.reportOrgId = res.data.partyOrgId
 | 
			
		||||
          }
 | 
			
		||||
          this.userInfo = res.data
 | 
			
		||||
          this.getDetail()
 | 
			
		||||
          this.getTree()
 | 
			
		||||
        }
 | 
			
		||||
      })
 | 
			
		||||
    },
 | 
			
		||||
    getTree() {
 | 
			
		||||
      this.$http.post(`/admin/partyOrganization/queryAllChildren?id=${this.userInfo.topOrgId}`).then(res => {
 | 
			
		||||
        if (res?.data) {
 | 
			
		||||
          res.data.map((item) => {
 | 
			
		||||
            item.label = item.name
 | 
			
		||||
            item.value = item.id
 | 
			
		||||
          })
 | 
			
		||||
          this.treeData = res.data
 | 
			
		||||
        }
 | 
			
		||||
      })
 | 
			
		||||
    },
 | 
			
		||||
    getDetail() {
 | 
			
		||||
      this.$http.post(`/admin/partyOrganization/detail?id=${this.userInfo.reportOrgId}`).then(res => {
 | 
			
		||||
        if (res?.data) {
 | 
			
		||||
          this.detail = res.data
 | 
			
		||||
          this.count = res.data.memberCount.one || 0
 | 
			
		||||
        }
 | 
			
		||||
      })
 | 
			
		||||
    },
 | 
			
		||||
    confirm(e) {
 | 
			
		||||
      this.treeData.map((item) => {
 | 
			
		||||
        if (item.id == e[0].value) {
 | 
			
		||||
          this.changeOrgInfo = item
 | 
			
		||||
        }
 | 
			
		||||
      })
 | 
			
		||||
      this.dialog = true
 | 
			
		||||
    },
 | 
			
		||||
    bindEstate() {
 | 
			
		||||
      this.$http.post("/app/apppartyreportorgchange/changeReportOrg", {
 | 
			
		||||
        orgId: this.changeOrgInfo.id,
 | 
			
		||||
        orgName: this.changeOrgInfo.name,
 | 
			
		||||
        partyId: this.userInfo.id,
 | 
			
		||||
      }).then(res => {
 | 
			
		||||
        if (res?.code == 0) {
 | 
			
		||||
          this.$toast('党组织变更成功')
 | 
			
		||||
          this.getUserInfo()
 | 
			
		||||
          this.$store.commit("getUserInfo")
 | 
			
		||||
        }
 | 
			
		||||
      })
 | 
			
		||||
    },
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
</script>
 | 
			
		||||
 | 
			
		||||
<style lang="scss" scoped>
 | 
			
		||||
.AppPartyOrganization {
 | 
			
		||||
  height: 100%;
 | 
			
		||||
  padding-bottom: 112px;
 | 
			
		||||
  box-sizing: border-box;
 | 
			
		||||
  position: relative;
 | 
			
		||||
 | 
			
		||||
  .header {
 | 
			
		||||
    height: 160px;
 | 
			
		||||
    background: #E60012;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  .content {
 | 
			
		||||
    width: 686px;
 | 
			
		||||
    position: absolute;
 | 
			
		||||
    top: 50px;
 | 
			
		||||
    left: 32px;
 | 
			
		||||
 | 
			
		||||
    .party-org {
 | 
			
		||||
      padding: 32px;
 | 
			
		||||
      margin-bottom: 16px;
 | 
			
		||||
      background: #FFFFFF;
 | 
			
		||||
 | 
			
		||||
      .title {
 | 
			
		||||
        font-size: 34px;
 | 
			
		||||
        font-family: PingFangSC-Medium, PingFang SC;
 | 
			
		||||
        font-weight: 700;
 | 
			
		||||
        color: #333;
 | 
			
		||||
        line-height: 60px;
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      .org-select {
 | 
			
		||||
        font-size: 30px;
 | 
			
		||||
        font-family: PingFangSC-Regular, PingFang SC;
 | 
			
		||||
        font-weight: 400;
 | 
			
		||||
        color: #666;
 | 
			
		||||
        line-height: 42px;
 | 
			
		||||
 | 
			
		||||
        img {
 | 
			
		||||
          width: 32px;
 | 
			
		||||
          height: 32px;
 | 
			
		||||
          vertical-align: middle;
 | 
			
		||||
          transform: rotate(270deg);
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    .org-info {
 | 
			
		||||
      padding: 0 32px;
 | 
			
		||||
      background: #FFFFFF;
 | 
			
		||||
      margin-bottom: 16px;
 | 
			
		||||
 | 
			
		||||
      div {
 | 
			
		||||
        line-height: 100px;
 | 
			
		||||
        font-size: 30px;
 | 
			
		||||
        border-bottom: 2px solid #eee;
 | 
			
		||||
        box-sizing: content-box;
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      div:nth-last-of-type(1) {
 | 
			
		||||
        border-bottom: 0;
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      .title {
 | 
			
		||||
        font-size: 32px;
 | 
			
		||||
        font-family: PingFangSC-Medium, PingFang SC;
 | 
			
		||||
        font-weight: 700;
 | 
			
		||||
        color: #333;
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      .flex-row {
 | 
			
		||||
        display: flex;
 | 
			
		||||
        justify-content: space-between;
 | 
			
		||||
 | 
			
		||||
        .color-666 {
 | 
			
		||||
          color: #666;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        .color-333 {
 | 
			
		||||
          color: #333;
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      .status0 {
 | 
			
		||||
        color: #FF8822;
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      .status1 {
 | 
			
		||||
        color: #2EA222;
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
  ::v-deep .estateNotice {
 | 
			
		||||
    width: 560px;
 | 
			
		||||
    background: #FFFFFF;
 | 
			
		||||
    padding: 48px;
 | 
			
		||||
    box-sizing: border-box;
 | 
			
		||||
 | 
			
		||||
    .status0 {
 | 
			
		||||
      color: #FF8822;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    .status1 {
 | 
			
		||||
      color: #2EA222;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    .curEstate {
 | 
			
		||||
      color: #666;
 | 
			
		||||
      font-size: 28px;
 | 
			
		||||
 | 
			
		||||
      b {
 | 
			
		||||
        color: #333
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    .alert {
 | 
			
		||||
      font-size: 28px;
 | 
			
		||||
      font-weight: 400;
 | 
			
		||||
      color: #F14242;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    .footer {
 | 
			
		||||
      span {
 | 
			
		||||
        width: 128px;
 | 
			
		||||
        height: 40px;
 | 
			
		||||
        line-height: 40px;
 | 
			
		||||
        text-align: center;
 | 
			
		||||
        color: #1365DD;
 | 
			
		||||
        font-size: 28px;
 | 
			
		||||
        transform: translateX(32px);
 | 
			
		||||
 | 
			
		||||
        & + span {
 | 
			
		||||
          margin-left: 16px;
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  .bottomBtn {
 | 
			
		||||
    position: fixed;
 | 
			
		||||
    width: 100%;
 | 
			
		||||
    bottom: 0;
 | 
			
		||||
    text-align: center;
 | 
			
		||||
    height: 112px;
 | 
			
		||||
    line-height: 112px;
 | 
			
		||||
    background: #E60012;
 | 
			
		||||
    font-size: 32px;
 | 
			
		||||
    font-weight: 500;
 | 
			
		||||
    color: #FFFFFF;
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
</style>
 | 
			
		||||
@@ -1,485 +0,0 @@
 | 
			
		||||
<template>
 | 
			
		||||
  <div class="page">
 | 
			
		||||
    <div v-if="isShow" style="height: 100%">
 | 
			
		||||
      <div class="fixed-top">
 | 
			
		||||
        <!-- 头部搜索样式 -->
 | 
			
		||||
        <div class="search-box">
 | 
			
		||||
          <div class="search-input flex-row" @click="changeSearchBox">
 | 
			
		||||
            <image src="https://cdn.cunwuyun.cn/img/search-red.svg"></image>
 | 
			
		||||
            <span>{{ inputValue }}</span>
 | 
			
		||||
          </div>
 | 
			
		||||
        </div>
 | 
			
		||||
        <!-- 选择时间和类型 -->
 | 
			
		||||
        <div class="slect flex-row">
 | 
			
		||||
          <!-- 类型选择 -->
 | 
			
		||||
          <div class="uni-list type-select">
 | 
			
		||||
            <div class="uni-list-cell">
 | 
			
		||||
              <div class="uni-list-cell-db">
 | 
			
		||||
                <picker
 | 
			
		||||
                    @change="bindPickerChange"
 | 
			
		||||
                    :range="array"
 | 
			
		||||
                    range-key="dictName"
 | 
			
		||||
                >
 | 
			
		||||
                  <div class="uni-input" v-if="partyStudyType === ''">
 | 
			
		||||
                    学习类别
 | 
			
		||||
                  </div>
 | 
			
		||||
                  <div class="uni-input" v-else>
 | 
			
		||||
                    {{ array[partyStudyType + 1].dictName }}
 | 
			
		||||
                  </div>
 | 
			
		||||
                  <image src="https://cdn.cunwuyun.cn/img/down.svg"></image>
 | 
			
		||||
                </picker>
 | 
			
		||||
              </div>
 | 
			
		||||
            </div>
 | 
			
		||||
          </div>
 | 
			
		||||
          <!-- 时间选择 -->
 | 
			
		||||
          <div class="uni-list type-select">
 | 
			
		||||
            <div class="uni-list-cell">
 | 
			
		||||
              <div class="uni-list-cell-db">
 | 
			
		||||
                <picker
 | 
			
		||||
                    mode="date"
 | 
			
		||||
                    :value="date"
 | 
			
		||||
                    :start="startDate"
 | 
			
		||||
                    :end="endDate"
 | 
			
		||||
                    @change="bindDateChange"
 | 
			
		||||
                    fields="month"
 | 
			
		||||
                >
 | 
			
		||||
                  <div class="uni-input">{{ day }}</div>
 | 
			
		||||
                  <image src="https://cdn.cunwuyun.cn/img/down.svg"></image>
 | 
			
		||||
                </picker>
 | 
			
		||||
              </div>
 | 
			
		||||
            </div>
 | 
			
		||||
          </div>
 | 
			
		||||
        </div>
 | 
			
		||||
      </div>
 | 
			
		||||
      <div class="session-list">
 | 
			
		||||
        <div
 | 
			
		||||
            class="session-item"
 | 
			
		||||
            v-for="(item, index) in meetList"
 | 
			
		||||
            :key="index"
 | 
			
		||||
        >
 | 
			
		||||
          <div class="item-top" @click="toDetail(item.id)">
 | 
			
		||||
            <div class="item-title mar-b12">{{ item.title }}</div>
 | 
			
		||||
            <div class="item-info">
 | 
			
		||||
              <span class="info-label">学习类别:</span>
 | 
			
		||||
              <span class="info-value">{{
 | 
			
		||||
                  $dict.getLabel("partyStudyType", item.type)
 | 
			
		||||
                }}</span>
 | 
			
		||||
            </div>
 | 
			
		||||
            <div class="item-info">
 | 
			
		||||
              <span class="info-label">发布时间:</span>
 | 
			
		||||
              <span class="info-value">{{ item.publishTime }}</span>
 | 
			
		||||
            </div>
 | 
			
		||||
            <div class="item-info mar-b12">
 | 
			
		||||
              <span class="info-label">发布人员:</span>
 | 
			
		||||
              <span class="info-value">{{ item.publishUserName }}</span>
 | 
			
		||||
            </div>
 | 
			
		||||
          </div>
 | 
			
		||||
          <div class="item-status" :class="'item-status' + item.studyStatus">
 | 
			
		||||
            {{ $dict.getLabel("partyStudyStatus", item.studyStatus) }}
 | 
			
		||||
          </div>
 | 
			
		||||
        </div>
 | 
			
		||||
      </div>
 | 
			
		||||
      <AiEmpty v-if="meetList.length == 0"/>
 | 
			
		||||
    </div>
 | 
			
		||||
    <div v-if="!isShow" class="search-input">
 | 
			
		||||
      <div class="input-box flex-row">
 | 
			
		||||
        <input
 | 
			
		||||
            type="span"
 | 
			
		||||
            class="input"
 | 
			
		||||
            placeholder="请输入学习标题"
 | 
			
		||||
            focus="false"
 | 
			
		||||
            v-model="searchValue"
 | 
			
		||||
            @blur="onBlur"
 | 
			
		||||
        />
 | 
			
		||||
        <image
 | 
			
		||||
            class="sousuo"
 | 
			
		||||
            src="https://cdn.cunwuyun.cn/img/search-active.svg"
 | 
			
		||||
        ></image>
 | 
			
		||||
        <image
 | 
			
		||||
            v-if="searchValue"
 | 
			
		||||
            @tap="clearInput"
 | 
			
		||||
            class="clear"
 | 
			
		||||
            src="https://cdn.cunwuyun.cn/img/empty-Input.svg"
 | 
			
		||||
        ></image>
 | 
			
		||||
        <div class="search-word" @click="search">搜索</div>
 | 
			
		||||
      </div>
 | 
			
		||||
    </div>
 | 
			
		||||
  </div>
 | 
			
		||||
</template>
 | 
			
		||||
<script>
 | 
			
		||||
export default {
 | 
			
		||||
  appName: "党员学习",
 | 
			
		||||
  data() {
 | 
			
		||||
    const currentDate = this.getDate({
 | 
			
		||||
      format: true,
 | 
			
		||||
    });
 | 
			
		||||
    return {
 | 
			
		||||
      inputValue: "请输入学习标题",
 | 
			
		||||
      isShow: true,
 | 
			
		||||
      array: [],
 | 
			
		||||
      meetType: "",
 | 
			
		||||
      partyStudyType: "",
 | 
			
		||||
      index: 0,
 | 
			
		||||
      date: currentDate,
 | 
			
		||||
      day: "时间",
 | 
			
		||||
      createDate: "", //创建时间
 | 
			
		||||
      meetList: [],
 | 
			
		||||
      searchValue: "", //搜索框输入值
 | 
			
		||||
      pageNum: 1,
 | 
			
		||||
      pageSize: 10,
 | 
			
		||||
      pages: 2,
 | 
			
		||||
      userId: "",
 | 
			
		||||
      partyId: "",
 | 
			
		||||
    };
 | 
			
		||||
  },
 | 
			
		||||
  computed: {
 | 
			
		||||
    startDate() {
 | 
			
		||||
      return this.getDate("start");
 | 
			
		||||
    },
 | 
			
		||||
    endDate() {
 | 
			
		||||
      return this.getDate("end");
 | 
			
		||||
    },
 | 
			
		||||
  },
 | 
			
		||||
  onLoad(options) {
 | 
			
		||||
    this.partyId = options.partyId;
 | 
			
		||||
    this.$dict.load("partyStudyStatus", "partyStudyType").then((res) => {
 | 
			
		||||
      this.array = this.$dict.getDict("partyStudyType");
 | 
			
		||||
      this.array.unshift({dictName: "全部类型", dictValue: ""})
 | 
			
		||||
      this.getList();
 | 
			
		||||
    });
 | 
			
		||||
  },
 | 
			
		||||
  onShow() {
 | 
			
		||||
    this.$dict.load("partyStudyStatus", "partyStudyType");
 | 
			
		||||
    this.getList();
 | 
			
		||||
  },
 | 
			
		||||
  methods: {
 | 
			
		||||
    bindPickerChange(e) {
 | 
			
		||||
      if (e.detail.value - 1 >= 0) {
 | 
			
		||||
        this.partyStudyType = e.detail.value - 1;
 | 
			
		||||
      } else {
 | 
			
		||||
        this.partyStudyType = "";
 | 
			
		||||
      }
 | 
			
		||||
      this.pageNum = 1;
 | 
			
		||||
      this.pages = 2;
 | 
			
		||||
      this.pageSize = 10;
 | 
			
		||||
      this.getList();
 | 
			
		||||
    },
 | 
			
		||||
    bindDateChange: function (e) {
 | 
			
		||||
      this.day = e.target.value;
 | 
			
		||||
      this.createDate = e.target.value;
 | 
			
		||||
      this.pageNum = 1;
 | 
			
		||||
      this.pages = 2;
 | 
			
		||||
      this.pageSize = 10;
 | 
			
		||||
      this.getList();
 | 
			
		||||
    },
 | 
			
		||||
    getDate(type) {
 | 
			
		||||
      const date = new Date();
 | 
			
		||||
      let year = date.getFullYear();
 | 
			
		||||
      let month = date.getMonth() + 1;
 | 
			
		||||
      let day = date.getDate();
 | 
			
		||||
 | 
			
		||||
      if (type === "start") {
 | 
			
		||||
        year = year - 60;
 | 
			
		||||
      } else if (type === "end") {
 | 
			
		||||
        year = year + 2;
 | 
			
		||||
      }
 | 
			
		||||
      month = month > 9 ? month : "0" + month;
 | 
			
		||||
      day = day > 9 ? day : "0" + day;
 | 
			
		||||
 | 
			
		||||
      return `${year}-${month}-08 00:00:00  `;
 | 
			
		||||
    },
 | 
			
		||||
    changeSearchBox() {
 | 
			
		||||
      this.isShow = false;
 | 
			
		||||
    },
 | 
			
		||||
    onBlur(e) {
 | 
			
		||||
      this.searchValue = e.target.value;
 | 
			
		||||
      if (this.searchValue) {
 | 
			
		||||
        this.inputValue = this.searchValue;
 | 
			
		||||
      } else {
 | 
			
		||||
        this.inputValue = "请输入学习标题";
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    search() {
 | 
			
		||||
      this.isShow = true;
 | 
			
		||||
      this.pageNum = 1;
 | 
			
		||||
      this.pageSize = 10;
 | 
			
		||||
      this.pages = 2;
 | 
			
		||||
      this.getList();
 | 
			
		||||
    },
 | 
			
		||||
    clearInput() {
 | 
			
		||||
      this.searchValue = "";
 | 
			
		||||
      this.inputValue = "请输入学习标题";
 | 
			
		||||
    },
 | 
			
		||||
    getList() {
 | 
			
		||||
      if (this.pageNum > this.pages) return;
 | 
			
		||||
 | 
			
		||||
      this.$http.post(`/app/apppartystudy/listWechat`, {
 | 
			
		||||
        title: this.searchValue,
 | 
			
		||||
        type: this.partyStudyType,
 | 
			
		||||
        searchMonth: this.createDate,
 | 
			
		||||
        current: this.pageNum,
 | 
			
		||||
        size: this.pageSize,
 | 
			
		||||
      }).then((res) => {
 | 
			
		||||
        if (res.code == 0) {
 | 
			
		||||
          const meetList = this.pageNum > 1 ? [...this.meetList, ...res.data.records] : res.data.records;
 | 
			
		||||
          this.pages = Math.ceil(res.data.total / 10);
 | 
			
		||||
          this.meetList = meetList;
 | 
			
		||||
        }
 | 
			
		||||
      });
 | 
			
		||||
    },
 | 
			
		||||
    toDetail(id) {
 | 
			
		||||
      uni.navigateTo({
 | 
			
		||||
        url: "./partyStudyDetail?id=" + id,
 | 
			
		||||
      });
 | 
			
		||||
    },
 | 
			
		||||
  },
 | 
			
		||||
  onReachBottom() {
 | 
			
		||||
    this.pageNum = this.pageNum + 1;
 | 
			
		||||
    this.getList();
 | 
			
		||||
  },
 | 
			
		||||
};
 | 
			
		||||
</script>
 | 
			
		||||
<style lang="scss" scope>
 | 
			
		||||
@import "../../../common/common.css";
 | 
			
		||||
 | 
			
		||||
.page {
 | 
			
		||||
  .search-box {
 | 
			
		||||
    width: 100%;
 | 
			
		||||
    height: 112px;
 | 
			
		||||
    background-color: #e60012;
 | 
			
		||||
    padding: 24px 32px;
 | 
			
		||||
    box-sizing: border-box;
 | 
			
		||||
 | 
			
		||||
    .search-input {
 | 
			
		||||
      line-height: 64px;
 | 
			
		||||
      width: 100%;
 | 
			
		||||
      height: 100%;
 | 
			
		||||
      background: #ce0010;
 | 
			
		||||
      border-radius: 32px;
 | 
			
		||||
      color: #f0cbcd;
 | 
			
		||||
      font-size: 26px;
 | 
			
		||||
 | 
			
		||||
      image {
 | 
			
		||||
        width: 34px;
 | 
			
		||||
        height: 34px;
 | 
			
		||||
        margin: 8px 8px 8px 24px;
 | 
			
		||||
        position: relative;
 | 
			
		||||
        top: 6px;
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      span {
 | 
			
		||||
        display: inline-block;
 | 
			
		||||
        overflow: hidden;
 | 
			
		||||
        white-space: nowrap;
 | 
			
		||||
        span-overflow: ellipsis;
 | 
			
		||||
        width: 600px;
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  .slect {
 | 
			
		||||
    width: 100%;
 | 
			
		||||
    height: 96px;
 | 
			
		||||
    background-color: #fff;
 | 
			
		||||
    color: #666;
 | 
			
		||||
 | 
			
		||||
    .type-select {
 | 
			
		||||
      width: 50%;
 | 
			
		||||
      border-right: 1px solid #f7f7f7;
 | 
			
		||||
      margin: 30px 0;
 | 
			
		||||
      box-sizing: border-box;
 | 
			
		||||
      text-align: center;
 | 
			
		||||
      font-size: 26px;
 | 
			
		||||
 | 
			
		||||
      .uni-input {
 | 
			
		||||
        display: inline-block;
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      image {
 | 
			
		||||
        width: 32px;
 | 
			
		||||
        height: 32px;
 | 
			
		||||
        display: inline-block;
 | 
			
		||||
        position: relative;
 | 
			
		||||
        top: 6px;
 | 
			
		||||
        margin-left: 8px;
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    .type-select:nth-child(2) {
 | 
			
		||||
      border: none;
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  .search-input {
 | 
			
		||||
    .input-box {
 | 
			
		||||
      width: 100%;
 | 
			
		||||
      height: 112px;
 | 
			
		||||
      background-color: #fff;
 | 
			
		||||
      padding: 24px 32px;
 | 
			
		||||
      box-sizing: border-box;
 | 
			
		||||
      position: relative;
 | 
			
		||||
 | 
			
		||||
      .sousuo {
 | 
			
		||||
        position: absolute;
 | 
			
		||||
        top: 35px;
 | 
			
		||||
        left: 60px;
 | 
			
		||||
        width: 34px;
 | 
			
		||||
        height: 34px;
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      .input {
 | 
			
		||||
        background-color: #f3f3f3;
 | 
			
		||||
        width: 598px;
 | 
			
		||||
        height: 64px;
 | 
			
		||||
        color: #999999;
 | 
			
		||||
        font-size: 26px;
 | 
			
		||||
        margin-left: 8px;
 | 
			
		||||
        border-radius: 32px;
 | 
			
		||||
        padding-left: 70px;
 | 
			
		||||
        padding-right: 60px;
 | 
			
		||||
        box-sizing: border-box;
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      .clear {
 | 
			
		||||
        width: 32px;
 | 
			
		||||
        height: 32px;
 | 
			
		||||
        position: absolute;
 | 
			
		||||
        top: 40px;
 | 
			
		||||
        right: 130px;
 | 
			
		||||
        z-index: 10;
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      .search-word {
 | 
			
		||||
        font-size: 28px;
 | 
			
		||||
        color: #135ab8;
 | 
			
		||||
        line-height: 60px;
 | 
			
		||||
        margin-left: 20px;
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  .session-list {
 | 
			
		||||
    padding-top: 224px;
 | 
			
		||||
 | 
			
		||||
    .session-item {
 | 
			
		||||
      width: 686px;
 | 
			
		||||
      margin: 0 auto 32px auto;
 | 
			
		||||
      background-color: #fff;
 | 
			
		||||
      position: relative;
 | 
			
		||||
      overflow: hidden;
 | 
			
		||||
 | 
			
		||||
      .item-top {
 | 
			
		||||
        padding: 32px 32px 0 32px;
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      .item-title {
 | 
			
		||||
        font-size: 32px;
 | 
			
		||||
        font-family: PingFangSC-Medium, PingFang SC;
 | 
			
		||||
        font-weight: 500;
 | 
			
		||||
        color: #333;
 | 
			
		||||
        line-height: 44px;
 | 
			
		||||
        word-break: break-all;
 | 
			
		||||
        width: 600px;
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      .item-info {
 | 
			
		||||
        line-height: 42px;
 | 
			
		||||
        font-size: 28px;
 | 
			
		||||
        margin-bottom: 8px;
 | 
			
		||||
 | 
			
		||||
        .info-label {
 | 
			
		||||
          color: #999;
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      .item-bottom {
 | 
			
		||||
        border-top: 2px solid #eee;
 | 
			
		||||
        text-align: right;
 | 
			
		||||
        padding-right: 64px;
 | 
			
		||||
        box-sizing: border-box;
 | 
			
		||||
        line-height: 96px;
 | 
			
		||||
 | 
			
		||||
        .item-btn {
 | 
			
		||||
          display: inline-block;
 | 
			
		||||
          width: 152px;
 | 
			
		||||
          height: 52px;
 | 
			
		||||
          line-height: 52px;
 | 
			
		||||
          border-radius: 28px;
 | 
			
		||||
          text-align: center;
 | 
			
		||||
          font-size: 28px;
 | 
			
		||||
          margin-left: 32px;
 | 
			
		||||
          border: 2px solid #e1e1e1;
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      .info-value {
 | 
			
		||||
        color: #343d65;
 | 
			
		||||
        background-color: #fff !important;
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      .item-status {
 | 
			
		||||
        position: absolute;
 | 
			
		||||
        top: 14px;
 | 
			
		||||
        right: -30px;
 | 
			
		||||
        width: 140px;
 | 
			
		||||
        text-align: center;
 | 
			
		||||
        line-height: 44px;
 | 
			
		||||
        font-size: 24px;
 | 
			
		||||
        transform: rotate(45deg);
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      .item-status1 {
 | 
			
		||||
        color: #5a98f2;
 | 
			
		||||
        background-color: #f1f6ff;
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      .item-status0 {
 | 
			
		||||
        color: #ff9b2b;
 | 
			
		||||
        background-color: #fff3e8;
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      .color-1365DD {
 | 
			
		||||
        color: #1365dd;
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      .color-FF4466 {
 | 
			
		||||
        color: #ff4466;
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      .color-333333 {
 | 
			
		||||
        color: #333;
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      .color-606060 {
 | 
			
		||||
        color: #606060;
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      .border-1365DD {
 | 
			
		||||
        border-color: #1365dd !important;
 | 
			
		||||
        color: #1365dd !important;
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      .border-E1E1E1 {
 | 
			
		||||
        border-color: #e1e1e1 !important;
 | 
			
		||||
        color: #606060;
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      .border-E1E1E1 {
 | 
			
		||||
        border-color: #e1e1e1 !important;
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      .mar-b12 {
 | 
			
		||||
        margin-bottom: 26px !important;
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  .no-affairs {
 | 
			
		||||
    width: 100%;
 | 
			
		||||
    height: calc(100% - 210px);
 | 
			
		||||
    display: flex;
 | 
			
		||||
    justify-content: center;
 | 
			
		||||
    align-items: center;
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
</style>
 | 
			
		||||
@@ -1,220 +0,0 @@
 | 
			
		||||
<template>
 | 
			
		||||
  <div class="page">
 | 
			
		||||
    <header></header>
 | 
			
		||||
    <div class="form">
 | 
			
		||||
      <div class="main">
 | 
			
		||||
        <div class="textarea">
 | 
			
		||||
          <div class="color-333 fs32">
 | 
			
		||||
            <span class="color-red">*</span>学习心得
 | 
			
		||||
          </div>
 | 
			
		||||
          <textarea
 | 
			
		||||
              type="textarea"
 | 
			
		||||
              placeholder="请输入学习心得(200字以内)"
 | 
			
		||||
              v-model="content"
 | 
			
		||||
              adjust-position="false"
 | 
			
		||||
              maxlength="200"
 | 
			
		||||
              class="fs32"
 | 
			
		||||
          ></textarea>
 | 
			
		||||
        </div>
 | 
			
		||||
      </div>
 | 
			
		||||
    </div>
 | 
			
		||||
    <p class="tips-span">说明 : 提交学习心得,意味着完成本次内容的学习。</p>
 | 
			
		||||
    <div class="report" @click="changeStatus()">提交</div>
 | 
			
		||||
  </div>
 | 
			
		||||
</template>
 | 
			
		||||
 | 
			
		||||
<script>
 | 
			
		||||
export default {
 | 
			
		||||
  name: "fillLog",
 | 
			
		||||
  data() {
 | 
			
		||||
    return {
 | 
			
		||||
      id: "",
 | 
			
		||||
      content: "",
 | 
			
		||||
    };
 | 
			
		||||
  },
 | 
			
		||||
  onLoad(options) {
 | 
			
		||||
    this.id = options.id;
 | 
			
		||||
    this.getDetailInfo();
 | 
			
		||||
  },
 | 
			
		||||
  methods: {
 | 
			
		||||
    getDetailInfo() {
 | 
			
		||||
      this.$http
 | 
			
		||||
      .post(`/app/apppartystudylog/queryStudyLog?id=${this.id}`, null, {})
 | 
			
		||||
      .then((res) => {
 | 
			
		||||
        if (res.data) {
 | 
			
		||||
          if (res.data.content != null) {
 | 
			
		||||
            this.content = res.data.content;
 | 
			
		||||
          } else {
 | 
			
		||||
            this.content = "";
 | 
			
		||||
          }
 | 
			
		||||
        }
 | 
			
		||||
      });
 | 
			
		||||
    },
 | 
			
		||||
    changeStatus() {
 | 
			
		||||
      if (!this.content) {
 | 
			
		||||
        this.$toast("请输入学习心得");
 | 
			
		||||
        return;
 | 
			
		||||
      }
 | 
			
		||||
      let params = {
 | 
			
		||||
        studyId: this.id,
 | 
			
		||||
        content: this.content,
 | 
			
		||||
      };
 | 
			
		||||
      this.$http
 | 
			
		||||
      .post(`/app/apppartystudylog/addStudyLog`, params)
 | 
			
		||||
      .then((res) => {
 | 
			
		||||
        if (res.code == 0) {
 | 
			
		||||
          this.$toast("学习心得提交完成");
 | 
			
		||||
          setTimeout(function () {
 | 
			
		||||
            uni.navigateBack({
 | 
			
		||||
              delta: 2,
 | 
			
		||||
            });
 | 
			
		||||
          }, 1000);
 | 
			
		||||
        }
 | 
			
		||||
      });
 | 
			
		||||
    },
 | 
			
		||||
  },
 | 
			
		||||
};
 | 
			
		||||
</script>
 | 
			
		||||
 | 
			
		||||
<style lang="scss" scoped>
 | 
			
		||||
@import "../../../common/common.css";
 | 
			
		||||
 | 
			
		||||
.page {
 | 
			
		||||
  width: 100%;
 | 
			
		||||
  height: 100%;
 | 
			
		||||
 | 
			
		||||
  .tips-span {
 | 
			
		||||
    width: 626px;
 | 
			
		||||
    font-size: 28px;
 | 
			
		||||
    font-family: PingFangSC-Regular, PingFang SC;
 | 
			
		||||
    color: rgba(153, 153, 153, 1);
 | 
			
		||||
    line-height: 40px;
 | 
			
		||||
    margin-top: 20px;
 | 
			
		||||
    padding-left: 32px;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  textarea {
 | 
			
		||||
    width: 100%;
 | 
			
		||||
    height: 688px;
 | 
			
		||||
    margin-top: 16px;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  header {
 | 
			
		||||
    width: 100%;
 | 
			
		||||
    height: 112px;
 | 
			
		||||
    background-color: #e60012;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  .form {
 | 
			
		||||
    width: 100%;
 | 
			
		||||
    padding: 32px;
 | 
			
		||||
    box-sizing: border-box;
 | 
			
		||||
    margin-top: -100px;
 | 
			
		||||
 | 
			
		||||
    .main {
 | 
			
		||||
      background-color: #fff;
 | 
			
		||||
      border-radius: 8px;
 | 
			
		||||
      padding: 16px;
 | 
			
		||||
      box-sizing: border-box;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    .basic-item {
 | 
			
		||||
      font-size: 32px;
 | 
			
		||||
      justify-content: space-between;
 | 
			
		||||
      width: 100%;
 | 
			
		||||
      height: 112px;
 | 
			
		||||
      padding: 32px 32px 32px 12px;
 | 
			
		||||
      box-sizing: border-box;
 | 
			
		||||
      background-color: #fff;
 | 
			
		||||
      border-bottom: 1px solid #eee;
 | 
			
		||||
 | 
			
		||||
      input {
 | 
			
		||||
        text-align: right;
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      .wid-110 {
 | 
			
		||||
        width: 214px;
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      .skill-span {
 | 
			
		||||
        max-width: 432px;
 | 
			
		||||
        text-align: right;
 | 
			
		||||
        display: inline-block;
 | 
			
		||||
        overflow: hidden;
 | 
			
		||||
        span-overflow: ellipsis;
 | 
			
		||||
        white-space: nowrap;
 | 
			
		||||
        font-size: 30px;
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      .picker {
 | 
			
		||||
        justify-content: flex-end;
 | 
			
		||||
        align-items: center;
 | 
			
		||||
        color: #999999;
 | 
			
		||||
        font-size: 32px;
 | 
			
		||||
        background-color: #ffffff;
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      .picker > .AiArea {
 | 
			
		||||
        background-color: #fff !important;
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      .image {
 | 
			
		||||
        width: 32px;
 | 
			
		||||
        height: 32px;
 | 
			
		||||
        vertical-align: middle;
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      .wei-span {
 | 
			
		||||
        width: 40%;
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      .msg-value {
 | 
			
		||||
        width: 60%;
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      .msg-btn {
 | 
			
		||||
        width: 160px;
 | 
			
		||||
        text-align: right;
 | 
			
		||||
        background-color: #fff !important;
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      button {
 | 
			
		||||
        font-size: 28px;
 | 
			
		||||
        background-color: #fff;
 | 
			
		||||
        line-height: 48px;
 | 
			
		||||
        padding: 0;
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      button::after {
 | 
			
		||||
        border: 0;
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      .button-hover {
 | 
			
		||||
        background-color: #fff;
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      button[disabled] {
 | 
			
		||||
        background-color: #fff !important;
 | 
			
		||||
        font-size: 28px;
 | 
			
		||||
        border-radius: 0;
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  .report {
 | 
			
		||||
    position: fixed;
 | 
			
		||||
    left: 0;
 | 
			
		||||
    bottom: 0;
 | 
			
		||||
    height: 112px;
 | 
			
		||||
    line-height: 112px;
 | 
			
		||||
    font-size: 32px;
 | 
			
		||||
    text-align: center;
 | 
			
		||||
    background: rgba(230, 0, 18, 1);
 | 
			
		||||
    color: #fff;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  .fs32 {
 | 
			
		||||
    font-size: 32px;
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
</style>
 | 
			
		||||
@@ -1,350 +0,0 @@
 | 
			
		||||
<template>
 | 
			
		||||
  <div class="page">
 | 
			
		||||
    <div class="detail-content">
 | 
			
		||||
      <div class="detail-info">
 | 
			
		||||
        <div class="info-title">{{ data.title }}</div>
 | 
			
		||||
        <div class="item-info">
 | 
			
		||||
          <span class="info-label">学习类别:</span>
 | 
			
		||||
          <span class="info-value">{{ $dict.getLabel('partyStudyType', data.type) }}</span>
 | 
			
		||||
        </div>
 | 
			
		||||
        <div class="item-info">
 | 
			
		||||
          <span class="info-label">发布人员:</span>
 | 
			
		||||
          <span class="info-value">{{ data.publishUserName }}</span>
 | 
			
		||||
        </div>
 | 
			
		||||
        <div class="item-info">
 | 
			
		||||
          <span class="info-label">发布时间:</span>
 | 
			
		||||
          <span class="info-value">{{ data.publishTime }}</span>
 | 
			
		||||
        </div>
 | 
			
		||||
        <div class="item-info">
 | 
			
		||||
          <span class="info-label">学习时间:</span>
 | 
			
		||||
          <span class="info-value">{{ data.studyBeginDate }}至{{ data.studyEndDate }}</span>
 | 
			
		||||
        </div>
 | 
			
		||||
        <div class="item-info">
 | 
			
		||||
          <span class="info-label">学习状态:</span>
 | 
			
		||||
          <span class="info-value">{{ $dict.getLabel('partyStudyStatus', data.studyStatus) }}</span>
 | 
			
		||||
        </div>
 | 
			
		||||
        <div class="item-info" v-if="data.studyStatus == 1">
 | 
			
		||||
          <span class="info-label">完成时间:</span>
 | 
			
		||||
          <span class="info-value">{{ data.finishDate || '-' }}</span>
 | 
			
		||||
        </div>
 | 
			
		||||
      </div>
 | 
			
		||||
      <!-- <div class="page-title">学习内容</div> -->
 | 
			
		||||
      <u-parse :html="data.content" class="content" v-if="data.content"></u-parse>
 | 
			
		||||
      <AiTransSpeech :src="data.speech"/>
 | 
			
		||||
    </div>
 | 
			
		||||
    <div class="btn-box" @click="toContent()">
 | 
			
		||||
      <span class="active">学习心得</span>
 | 
			
		||||
    </div>
 | 
			
		||||
  </div>
 | 
			
		||||
</template>
 | 
			
		||||
<script>
 | 
			
		||||
 | 
			
		||||
export default {
 | 
			
		||||
  data() {
 | 
			
		||||
    return {
 | 
			
		||||
      id: '',
 | 
			
		||||
      data: {},
 | 
			
		||||
    };
 | 
			
		||||
  },
 | 
			
		||||
  onLoad(options) {
 | 
			
		||||
    this.$dict.load('partyStudyStatus', 'partyStudyType')
 | 
			
		||||
    this.id = options.id
 | 
			
		||||
    this.getDetailInfo()
 | 
			
		||||
  },
 | 
			
		||||
  onShow() {
 | 
			
		||||
    this.getDetailInfo()
 | 
			
		||||
  },
 | 
			
		||||
  methods: {
 | 
			
		||||
    toContent() {
 | 
			
		||||
      uni.navigateTo({url: `./AppPartyStudy?id=${this.id}`})
 | 
			
		||||
    },
 | 
			
		||||
    getDetailInfo() {
 | 
			
		||||
      this.$http.post(`/app/apppartystudy/queryDetailByIdWeChat?id=${this.id}`, null, {}).then(res => {
 | 
			
		||||
        if (res.data) {
 | 
			
		||||
          if (res.data.files && res.data.files.length) {
 | 
			
		||||
            res.data.files.map(item => {
 | 
			
		||||
              var size = item.size / 1024;
 | 
			
		||||
              item.fileSize = size.toFixed(0);
 | 
			
		||||
              return item
 | 
			
		||||
            })
 | 
			
		||||
          }
 | 
			
		||||
          this.data = res.data
 | 
			
		||||
        }
 | 
			
		||||
      })
 | 
			
		||||
    },
 | 
			
		||||
  },
 | 
			
		||||
};
 | 
			
		||||
</script>
 | 
			
		||||
<style lang="scss" scope>
 | 
			
		||||
@import "../../../common/common.css";
 | 
			
		||||
 | 
			
		||||
.page {
 | 
			
		||||
  background-color: #fff;
 | 
			
		||||
 | 
			
		||||
  .detail-content {
 | 
			
		||||
    padding-bottom: 140px;
 | 
			
		||||
  }
 | 
			
		||||
  .content{
 | 
			
		||||
    padding: 20px;
 | 
			
		||||
    background-color: #fff;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  .detail-info {
 | 
			
		||||
    padding: 16px 32px 8px 32px;
 | 
			
		||||
    border-bottom: 2px solid #D8DDE6;
 | 
			
		||||
    background-color: #E60012;
 | 
			
		||||
    padding-bottom: 80px;
 | 
			
		||||
    position: relative;
 | 
			
		||||
 | 
			
		||||
    .info-title {
 | 
			
		||||
      line-height: 64px;
 | 
			
		||||
      font-size: 40px;
 | 
			
		||||
      font-family: PingFangSC-Medium, PingFang SC;
 | 
			
		||||
      font-weight: 500;
 | 
			
		||||
      color: #fff;
 | 
			
		||||
      word-break: break-all;
 | 
			
		||||
      margin-bottom: 16px;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    .item-info {
 | 
			
		||||
      line-height: 48px;
 | 
			
		||||
      font-size: 30px;
 | 
			
		||||
      margin-bottom: 8px;
 | 
			
		||||
 | 
			
		||||
      .info-label {
 | 
			
		||||
        display: inline-block;
 | 
			
		||||
        color: #fff;
 | 
			
		||||
        vertical-align: top;
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      .info-value {
 | 
			
		||||
        display: inline-block;
 | 
			
		||||
        width: 510px;
 | 
			
		||||
        word-break: break-all;
 | 
			
		||||
        color: #FFE8E8;
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      .item-status0 {
 | 
			
		||||
        color: #FF9B2B;
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      .item-status1 {
 | 
			
		||||
        color: #2EA222;
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      .item-status2 {
 | 
			
		||||
        color: #343D65;
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      .item-status3 {
 | 
			
		||||
        color: #5A98F2;
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      .item-status4 {
 | 
			
		||||
        color: #f46;
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    .retract-btn {
 | 
			
		||||
      line-height: 80px;
 | 
			
		||||
      text-align: center;
 | 
			
		||||
      font-size: 28px;
 | 
			
		||||
      color: #fff;
 | 
			
		||||
      position: absolute;
 | 
			
		||||
      bottom: 0;
 | 
			
		||||
      width: 690px;
 | 
			
		||||
 | 
			
		||||
      .down-icon {
 | 
			
		||||
        width: 32px;
 | 
			
		||||
        height: 32px;
 | 
			
		||||
        margin-left: 4px;
 | 
			
		||||
        vertical-align: middle;
 | 
			
		||||
        transition: all .3s ease-in-out;
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      .icon-active {
 | 
			
		||||
        transform: rotate(180deg);
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  .page-title {
 | 
			
		||||
    line-height: 96px;
 | 
			
		||||
    color: #333;
 | 
			
		||||
    font-size: 32px;
 | 
			
		||||
    padding-left: 32px;
 | 
			
		||||
    background-color: #fff;
 | 
			
		||||
 | 
			
		||||
    span {
 | 
			
		||||
      font-size: 28px;
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  .info-content {
 | 
			
		||||
    padding: 16px 32px;
 | 
			
		||||
    background-color: #fff;
 | 
			
		||||
    line-height: 48px;
 | 
			
		||||
    color: #333;
 | 
			
		||||
    font-size: 32px;
 | 
			
		||||
    box-sizing: border-box;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  .user-list {
 | 
			
		||||
    background-color: #fff;
 | 
			
		||||
 | 
			
		||||
    .user-item {
 | 
			
		||||
      height: 112px;
 | 
			
		||||
      padding-top: 16px;
 | 
			
		||||
      box-sizing: border-box;
 | 
			
		||||
 | 
			
		||||
      .user-bg {
 | 
			
		||||
        display: inline-block;
 | 
			
		||||
        width: 80px;
 | 
			
		||||
        height: 80px;
 | 
			
		||||
        background-color: #4E8EEE;
 | 
			
		||||
        color: #fff;
 | 
			
		||||
        text-align: center;
 | 
			
		||||
        line-height: 80px;
 | 
			
		||||
        margin: 0 16px 0 32px;
 | 
			
		||||
        font-size: 28px;
 | 
			
		||||
        border-radius: 50%;
 | 
			
		||||
        vertical-align: top;
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      .user-info {
 | 
			
		||||
        display: inline-block;
 | 
			
		||||
        width: 622px;
 | 
			
		||||
        height: 96px;
 | 
			
		||||
        border-bottom: 2px solid #D8DDE6;
 | 
			
		||||
        box-sizing: border-box;
 | 
			
		||||
 | 
			
		||||
        .user-name {
 | 
			
		||||
          line-height: 44px;
 | 
			
		||||
          color: #333;
 | 
			
		||||
          font-size: 32px;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        .user-unit {
 | 
			
		||||
          line-height: 34px;
 | 
			
		||||
          color: #999;
 | 
			
		||||
          font-size: 24px;
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    .user-item:nth-last-of-type(1) {
 | 
			
		||||
      .user-info {
 | 
			
		||||
        border-bottom: 0;
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  .mar-b8 {
 | 
			
		||||
    margin-bottom: 16px;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  .color-1365DD {
 | 
			
		||||
    color: #1365DD;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  .color-999999 {
 | 
			
		||||
    color: #999999;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  .pad-l7 {
 | 
			
		||||
    padding-left: 14px;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  .attachment {
 | 
			
		||||
    width: 100%;
 | 
			
		||||
    padding: 32px;
 | 
			
		||||
    box-sizing: border-box;
 | 
			
		||||
    background-color: #FFFFFF;
 | 
			
		||||
    margin-top: 16px;
 | 
			
		||||
 | 
			
		||||
    .attachment-title {
 | 
			
		||||
      font-size: 32px;
 | 
			
		||||
      color: #333333;
 | 
			
		||||
      font-weight: 500;
 | 
			
		||||
 | 
			
		||||
      image {
 | 
			
		||||
        width: 48px;
 | 
			
		||||
        height: 48px;
 | 
			
		||||
        vertical-align: middle;
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    .attachment-item {
 | 
			
		||||
      border: 1px solid rgba(204, 204, 204, 1);
 | 
			
		||||
      padding: 16px;
 | 
			
		||||
      box-sizing: border-box;
 | 
			
		||||
      margin-top: 34px;
 | 
			
		||||
      display: flex;
 | 
			
		||||
      flex-direction: row;
 | 
			
		||||
      justify-content: space-between;
 | 
			
		||||
      border-radius: 8px;
 | 
			
		||||
 | 
			
		||||
      .file-name {
 | 
			
		||||
        justify-content: flex-start;
 | 
			
		||||
        align-items: center;
 | 
			
		||||
 | 
			
		||||
        image {
 | 
			
		||||
          width: 96px;
 | 
			
		||||
          height: 96px;
 | 
			
		||||
          vertical-align: middle;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        .title {
 | 
			
		||||
          color: #333333;
 | 
			
		||||
          font-size: 32px;
 | 
			
		||||
          word-break: break-all;
 | 
			
		||||
          flex: 1;
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      .size {
 | 
			
		||||
        color: #999;
 | 
			
		||||
        font-size: 28px;
 | 
			
		||||
        display: flex;
 | 
			
		||||
        justify-content: cemter;
 | 
			
		||||
        align-items: center;
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  .btn-box {
 | 
			
		||||
    position: fixed;
 | 
			
		||||
    display: flex;
 | 
			
		||||
    bottom: 0;
 | 
			
		||||
    height: 112px;
 | 
			
		||||
    line-height: 112px;
 | 
			
		||||
    width: 100%;
 | 
			
		||||
    color: #333;
 | 
			
		||||
    background-color: #fff;
 | 
			
		||||
    font-size: 36px;
 | 
			
		||||
 | 
			
		||||
    span {
 | 
			
		||||
      flex: 1;
 | 
			
		||||
      text-align: center;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    .active {
 | 
			
		||||
      background-color: #E60012;
 | 
			
		||||
      color: #fff;
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
.partyStudyContent {
 | 
			
		||||
  width: 100%;
 | 
			
		||||
  height: calc(100% - 184rpx);
 | 
			
		||||
  padding: 32px;
 | 
			
		||||
  box-sizing: border-box;
 | 
			
		||||
  color: #666;
 | 
			
		||||
  font-size: 32px;
 | 
			
		||||
  background-color: #fff;
 | 
			
		||||
  word-break: break-all;
 | 
			
		||||
}
 | 
			
		||||
</style>
 | 
			
		||||
@@ -1,553 +0,0 @@
 | 
			
		||||
<template>
 | 
			
		||||
  <div class="page">
 | 
			
		||||
    <div v-if="isShow" style="height:100%;">
 | 
			
		||||
      <div class="fixed-top" style="width:100%;">
 | 
			
		||||
        <!-- 头部搜索样式 -->
 | 
			
		||||
        <div class="search-box">
 | 
			
		||||
          <div class="search-input flex-row" @click="changeSearchBox">
 | 
			
		||||
            <image src="https://cdn.cunwuyun.cn/img/search-red.svg"></image>
 | 
			
		||||
            <span>{{ inputValue }}</span>
 | 
			
		||||
          </div>
 | 
			
		||||
        </div>
 | 
			
		||||
        <!-- 选择时间和类型 -->
 | 
			
		||||
        <div class='slect flex-row'>
 | 
			
		||||
          <!-- 类型选择 -->
 | 
			
		||||
          <div class="uni-list type-slect">
 | 
			
		||||
            <div class="uni-list-cell">
 | 
			
		||||
              <div class="uni-list-cell-db">
 | 
			
		||||
                <picker @change="bindPickerChange" :range="array" range-key="dictName">
 | 
			
		||||
                  <div class="uni-input">{{ meetTypespan }}</div>
 | 
			
		||||
                  <image src="https://cdn.cunwuyun.cn/img/down.svg"></image>
 | 
			
		||||
                </picker>
 | 
			
		||||
              </div>
 | 
			
		||||
            </div>
 | 
			
		||||
          </div>
 | 
			
		||||
          <!-- 时间选择 -->
 | 
			
		||||
          <div class="uni-list type-slect">
 | 
			
		||||
            <div class="uni-list-cell">
 | 
			
		||||
              <div class="uni-list-cell-db">
 | 
			
		||||
                <picker mode="date" :value="date" :start="startDate" :end="endDate" @change="bindDateChange"
 | 
			
		||||
                        fields='month'>
 | 
			
		||||
                  <div class="uni-input">{{ day }}</div>
 | 
			
		||||
                  <image src="https://cdn.cunwuyun.cn/img/down.svg"></image>
 | 
			
		||||
                </picker>
 | 
			
		||||
              </div>
 | 
			
		||||
            </div>
 | 
			
		||||
          </div>
 | 
			
		||||
        </div>
 | 
			
		||||
      </div>
 | 
			
		||||
      <div class="session-list">
 | 
			
		||||
        <div class="session-item" v-for="(item, index) in meetList" :key="index">
 | 
			
		||||
          <div class="item-top" @click="toSessionDetail(item.meetingId, item.status)">
 | 
			
		||||
            <div class="item-title mar-b12">{{ item.meetingAgenda }}</div>
 | 
			
		||||
            <div class="item-info">
 | 
			
		||||
              <span class="info-label">会议状态:</span>
 | 
			
		||||
              <span :class="'item-status'+item.postStatus" class="info-value">
 | 
			
		||||
                {{ $dict.getLabel('postStatus', item.postStatus) }}
 | 
			
		||||
              </span>
 | 
			
		||||
            </div>
 | 
			
		||||
            <div class="item-info">
 | 
			
		||||
              <span class="info-label">开始时间:</span>
 | 
			
		||||
              <span class="info-value">{{ item.startTime || '-' }}</span>
 | 
			
		||||
            </div>
 | 
			
		||||
            <div class="item-info">
 | 
			
		||||
              <span class="info-label">会议地点:</span>
 | 
			
		||||
              <span class="info-value">{{ item.meetingAddress || '-' }}</span>
 | 
			
		||||
            </div>
 | 
			
		||||
            <div class="item-info">
 | 
			
		||||
              <span class="info-label">主持人员:</span>
 | 
			
		||||
              <span class="info-value">{{ item.hostName || '-' }}</span>
 | 
			
		||||
            </div>
 | 
			
		||||
            <div class="item-info mar-b12">
 | 
			
		||||
              <span class="info-label">会议类型:</span>
 | 
			
		||||
              <span class="info-value">{{ item.meetingClassification || '-' }}</span>
 | 
			
		||||
            </div>
 | 
			
		||||
          </div>
 | 
			
		||||
          <div class="item-bottom">
 | 
			
		||||
            <span class="item-btn border-E1E1E1" v-if="item.status == 3">已请假</span>
 | 
			
		||||
            <span class="item-btn border-1365DD" v-if="item.status == 0" @click="signMeeting(item.meetingId)">签到</span>
 | 
			
		||||
            <span class="item-btn border-E1E1E1" v-if="item.status == 1">已签到</span>
 | 
			
		||||
            <span class="item-btn border-E1E1E1" v-if="item.status == 4">不签到</span>
 | 
			
		||||
          </div>
 | 
			
		||||
          <div class="item-status" :class="'item-status'+item.postStatus">
 | 
			
		||||
            {{ $dict.getLabel('postStatus', item.postStatus) }}
 | 
			
		||||
          </div>
 | 
			
		||||
        </div>
 | 
			
		||||
      </div>
 | 
			
		||||
      <AiEmpty v-if="meetList.length == 0"/>
 | 
			
		||||
    </div>
 | 
			
		||||
    <div v-if="!isShow" class="search-input">
 | 
			
		||||
      <div class="input-box flex-row">
 | 
			
		||||
        <input class="input" placeholder="请输入会议标题" focus="false" v-model="searchValue" @blur="onBlur"/>
 | 
			
		||||
        <image class="sousuo" src="https://cdn.cunwuyun.cn/img/search-active.svg"></image>
 | 
			
		||||
        <image v-if="searchValue" @tap="clearInput" class="clear"
 | 
			
		||||
               src="https://cdn.cunwuyun.cn/img/empty-Input.svg"></image>
 | 
			
		||||
        <div class="search-word" @click="search">搜索</div>
 | 
			
		||||
      </div>
 | 
			
		||||
    </div>
 | 
			
		||||
  </div>
 | 
			
		||||
</template>
 | 
			
		||||
<script>
 | 
			
		||||
import {mapState} from 'vuex'
 | 
			
		||||
 | 
			
		||||
export default {
 | 
			
		||||
  name:"AppThreeSessions",
 | 
			
		||||
  appName: "三会一课",
 | 
			
		||||
  data() {
 | 
			
		||||
    const currentDate = this.getDate({
 | 
			
		||||
      format: true
 | 
			
		||||
    })
 | 
			
		||||
    return {
 | 
			
		||||
      inputValue: "请输入会议标题",
 | 
			
		||||
      isShow: true,
 | 
			
		||||
      array: [],
 | 
			
		||||
      meetType: "",
 | 
			
		||||
      meetTypespan: "会议类型",
 | 
			
		||||
      index: 0,
 | 
			
		||||
      date: currentDate,
 | 
			
		||||
      day: "会议时间",
 | 
			
		||||
      createDate: "",//创建时间
 | 
			
		||||
      meetList: [],
 | 
			
		||||
      searchValue: "",//搜索框输入值
 | 
			
		||||
      pageNum: 1,
 | 
			
		||||
      pageSize: 10,
 | 
			
		||||
      pages: 2,
 | 
			
		||||
      userId: '',
 | 
			
		||||
      partyId: '',
 | 
			
		||||
      meetTypeIndex: '',
 | 
			
		||||
    };
 | 
			
		||||
  },
 | 
			
		||||
  computed: {
 | 
			
		||||
    startDate() {
 | 
			
		||||
      return this.getDate('start');
 | 
			
		||||
    },
 | 
			
		||||
    endDate() {
 | 
			
		||||
      return this.getDate('end');
 | 
			
		||||
    },
 | 
			
		||||
    ...mapState(['user']),
 | 
			
		||||
  },
 | 
			
		||||
  onLoad() {
 | 
			
		||||
    this.partyId = this.user.id
 | 
			
		||||
    this.$dict.load('postStatus', 'meetingClassification')
 | 
			
		||||
    this.array = this.$dict.getDict('meetingClassification')
 | 
			
		||||
    this.getList()
 | 
			
		||||
  },
 | 
			
		||||
  methods: {
 | 
			
		||||
    signMeeting(id) {
 | 
			
		||||
      this.$http.post(`/app/appthreemeetinguser/signByMeetingIdAndUserIdForWX?meetingId=${id}&userId=${this.user.id}`, null, {}).then(res => {
 | 
			
		||||
        if (res.code == 0) {
 | 
			
		||||
          this.$toast('签到成功')
 | 
			
		||||
          this.pageNum = 1;
 | 
			
		||||
          this.pages = 2;
 | 
			
		||||
          this.getList()
 | 
			
		||||
        }
 | 
			
		||||
      }).catch(err => {
 | 
			
		||||
        uni.showToast({
 | 
			
		||||
          icon: 'none',
 | 
			
		||||
          title: err,
 | 
			
		||||
          duration: 2000
 | 
			
		||||
        });
 | 
			
		||||
      })
 | 
			
		||||
    },
 | 
			
		||||
    btnClick(span) {
 | 
			
		||||
      uni.showToast({
 | 
			
		||||
        icon: 'none',
 | 
			
		||||
        title: span,
 | 
			
		||||
        duration: 2000
 | 
			
		||||
      });
 | 
			
		||||
    },
 | 
			
		||||
    bindPickerChange(e) {
 | 
			
		||||
      this.array.map((item, index) => {
 | 
			
		||||
        if (e.detail.value == item.dictValue) {
 | 
			
		||||
          this.meetTypespan = this.array[index].dictName
 | 
			
		||||
        }
 | 
			
		||||
      })
 | 
			
		||||
      this.meetTypeIndex = e.detail.value
 | 
			
		||||
      this.pageNum = 1;
 | 
			
		||||
      this.pages = 2;
 | 
			
		||||
      this.pageSize = 10;
 | 
			
		||||
      this.getList()
 | 
			
		||||
    },
 | 
			
		||||
    bindDateChange: function (e) {
 | 
			
		||||
      this.day = e.target.value;
 | 
			
		||||
      this.createDate = e.target.value + '-' + "01"
 | 
			
		||||
      this.pageNum = 1;
 | 
			
		||||
      this.pages = 2;
 | 
			
		||||
      this.pageSize = 10;
 | 
			
		||||
      this.getList()
 | 
			
		||||
    },
 | 
			
		||||
    getDate(type) {
 | 
			
		||||
      const date = new Date();
 | 
			
		||||
      let year = date.getFullYear();
 | 
			
		||||
      let month = date.getMonth() + 1;
 | 
			
		||||
      let day = date.getDate();
 | 
			
		||||
 | 
			
		||||
      if (type === 'start') {
 | 
			
		||||
        year = year - 60;
 | 
			
		||||
      } else if (type === 'end') {
 | 
			
		||||
        year = year + 2;
 | 
			
		||||
      }
 | 
			
		||||
      month = month > 9 ? month : '0' + month;
 | 
			
		||||
      day = day > 9 ? day : '0' + day;
 | 
			
		||||
 | 
			
		||||
      return `${year}-${month}-08 00:00:00  `;
 | 
			
		||||
    },
 | 
			
		||||
    changeSearchBox() {
 | 
			
		||||
      this.isShow = false;
 | 
			
		||||
    },
 | 
			
		||||
    onBlur(e) {
 | 
			
		||||
      this.searchValue = e.target.value;
 | 
			
		||||
      if (this.searchValue) {
 | 
			
		||||
        this.inputValue = this.searchValue;
 | 
			
		||||
      } else {
 | 
			
		||||
        this.inputValue = "请输入会议标题";
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    search() {
 | 
			
		||||
      this.isShow = true;
 | 
			
		||||
      this.pageNum = 1;
 | 
			
		||||
      this.pageSize = 10;
 | 
			
		||||
      this.pages = 2;
 | 
			
		||||
      this.getList()
 | 
			
		||||
    },
 | 
			
		||||
    clearInput() {
 | 
			
		||||
      this.searchValue = ''
 | 
			
		||||
      this.inputValue = "请输入会议标题";
 | 
			
		||||
    },
 | 
			
		||||
    getList() {
 | 
			
		||||
      if (this.pageNum > this.pages) return
 | 
			
		||||
      // var searchYMD = ''
 | 
			
		||||
      // if(this.createDate) {
 | 
			
		||||
      //     searchYMD = this.createDate + '-01'
 | 
			
		||||
      // }
 | 
			
		||||
      this.$http.post(`/app/appthreemeetinguser/listForWX?meetingUserId=${this.user.id}&meetingAgenda=${this.searchValue}&meetingClassification=${this.meetTypeIndex}&searchYMD=${this.createDate}¤t=${this.pageNum}&size=${this.pageSize}`
 | 
			
		||||
      ).then(res => {
 | 
			
		||||
        if (res.code == 0) {
 | 
			
		||||
          const meetList = this.pageNum > 1 ? [...this.meetList, ...res.data.records] : res.data.records
 | 
			
		||||
          meetList.map(item => {
 | 
			
		||||
            if (item.meetingClassification.length == 1) {
 | 
			
		||||
              item.meetingClassification = this.$dict.getLabel('meetingClassification', item.meetingClassification)
 | 
			
		||||
            } else {
 | 
			
		||||
              var typeList = item.meetingClassification.split(',')
 | 
			
		||||
              typeList.map((items, index) => {
 | 
			
		||||
                if (index == 0) {
 | 
			
		||||
                  item.meetingClassification = this.$dict.getLabel('meetingClassification', items)
 | 
			
		||||
                } else {
 | 
			
		||||
                  item.meetingClassification = item.meetingClassification + ',' + this.$dict.getLabel('meetingClassification', items)
 | 
			
		||||
                }
 | 
			
		||||
                return item.meetingClassification
 | 
			
		||||
              })
 | 
			
		||||
              return item.meetingClassification
 | 
			
		||||
            }
 | 
			
		||||
            return item
 | 
			
		||||
          })
 | 
			
		||||
          this.pages = Math.ceil(res.data.total / 10)
 | 
			
		||||
          this.meetList = meetList
 | 
			
		||||
        }
 | 
			
		||||
      })
 | 
			
		||||
    },
 | 
			
		||||
    toSessionDetail(id, signStatus) {
 | 
			
		||||
      uni.navigateTo({
 | 
			
		||||
        url: `../threeSessions/threeSessionsDetail?id=${id}&signStatus=${signStatus}&token=${uni.getStorageSync("token")}`
 | 
			
		||||
      })
 | 
			
		||||
    },
 | 
			
		||||
    leave() {
 | 
			
		||||
      uni.showModal({
 | 
			
		||||
        title: '如需请假,请联系签到负责人',
 | 
			
		||||
        confirmspan: "确认",
 | 
			
		||||
        confirmColor: "#135AB8",
 | 
			
		||||
        success: function (res) {
 | 
			
		||||
          if (res.confirm) {
 | 
			
		||||
          } else if (res.cancel) {
 | 
			
		||||
          }
 | 
			
		||||
        }
 | 
			
		||||
      });
 | 
			
		||||
    },
 | 
			
		||||
    changeStatus(id, signStatus, joinStatus, signMethod, absence, meetingUserId, meetingId, successspan) {
 | 
			
		||||
      let signTime = new Date().getFullYear() + '-' + this.isDate(new Date().getMonth() + 1) + '-' + this.isDate(new Date().getDate()) + ' ' + this.isDate(new Date().getHours()) + ':' + this.isDate(new Date().getMinutes()) + ':' + this.isDate(new Date().getSeconds())
 | 
			
		||||
      var params = {
 | 
			
		||||
        id,
 | 
			
		||||
        signStatus,
 | 
			
		||||
        joinStatus,
 | 
			
		||||
        signMethod,
 | 
			
		||||
        absence,
 | 
			
		||||
        signUserId: this.user.id,
 | 
			
		||||
        signUserName: this.user.realName,
 | 
			
		||||
        signTime,
 | 
			
		||||
        meetingUserId,
 | 
			
		||||
        meetingId
 | 
			
		||||
      }
 | 
			
		||||
      this.$http.post(`/app/appthreemeetinguser/addOrUpdate`, null, {
 | 
			
		||||
        data: params
 | 
			
		||||
      }).then(res => {
 | 
			
		||||
        if (res?.code == 0) {
 | 
			
		||||
          uni.showToast({
 | 
			
		||||
            title: successspan + '成功!',
 | 
			
		||||
            duration: 2000
 | 
			
		||||
          });
 | 
			
		||||
          this.pageNum = 1;
 | 
			
		||||
          this.pages = 2;
 | 
			
		||||
          this.getList()
 | 
			
		||||
        }
 | 
			
		||||
      })
 | 
			
		||||
    },
 | 
			
		||||
    isDate(num) {
 | 
			
		||||
      if (num < 10) {
 | 
			
		||||
        num = '0' + num
 | 
			
		||||
      }
 | 
			
		||||
      return num
 | 
			
		||||
    },
 | 
			
		||||
  },
 | 
			
		||||
  onReachBottom() {
 | 
			
		||||
    this.pageNum = this.pageNum + 1
 | 
			
		||||
    this.getList()
 | 
			
		||||
  }
 | 
			
		||||
};
 | 
			
		||||
</script>
 | 
			
		||||
<style lang="scss" scope>
 | 
			
		||||
@import "../../../common/common.css";
 | 
			
		||||
 | 
			
		||||
.page {
 | 
			
		||||
  .search-box {
 | 
			
		||||
    width: 100%;
 | 
			
		||||
    height: 112px;
 | 
			
		||||
    background-color: #e60012;
 | 
			
		||||
    padding: 24px 32px;
 | 
			
		||||
    box-sizing: border-box;
 | 
			
		||||
 | 
			
		||||
    .search-input {
 | 
			
		||||
      line-height: 64px;
 | 
			
		||||
      width: 100%;
 | 
			
		||||
      height: 100%;
 | 
			
		||||
      background: #CE0010;
 | 
			
		||||
      border-radius: 32px;
 | 
			
		||||
      color: #F0CBCD;
 | 
			
		||||
      font-size: 26px;
 | 
			
		||||
 | 
			
		||||
      image {
 | 
			
		||||
        width: 34px;
 | 
			
		||||
        height: 34px;
 | 
			
		||||
        margin: 8px 8px 8px 24px;
 | 
			
		||||
        position: relative;
 | 
			
		||||
        top: 6px;
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  .slect {
 | 
			
		||||
    width: 100%;
 | 
			
		||||
    height: 96px;
 | 
			
		||||
    background-color: #fff;
 | 
			
		||||
    color: #666;
 | 
			
		||||
 | 
			
		||||
    .type-slect {
 | 
			
		||||
      width: 50%;
 | 
			
		||||
      border-right: 1px solid #F7F7F7;
 | 
			
		||||
      margin: 30px 0;
 | 
			
		||||
      box-sizing: border-box;
 | 
			
		||||
      text-align: center;
 | 
			
		||||
      font-size: 26px;
 | 
			
		||||
 | 
			
		||||
      .uni-input {
 | 
			
		||||
        display: inline-block;
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      image {
 | 
			
		||||
        width: 32px;
 | 
			
		||||
        height: 32px;
 | 
			
		||||
        display: inline-block;
 | 
			
		||||
        position: relative;
 | 
			
		||||
        top: 6px;
 | 
			
		||||
        margin-left: 8 srpx;
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    .type-slect:nth-child(2) {
 | 
			
		||||
      border: none;
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  .search-input {
 | 
			
		||||
    .input-box {
 | 
			
		||||
      width: 100%;
 | 
			
		||||
      height: 112px;
 | 
			
		||||
      background-color: #fff;
 | 
			
		||||
      padding: 24px 32px;
 | 
			
		||||
      box-sizing: border-box;
 | 
			
		||||
      position: relative;
 | 
			
		||||
 | 
			
		||||
      .sousuo {
 | 
			
		||||
        position: absolute;
 | 
			
		||||
        top: 35px;
 | 
			
		||||
        left: 60px;
 | 
			
		||||
        width: 34px;
 | 
			
		||||
        height: 34px;
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      .input {
 | 
			
		||||
        background-color: #F3F3F3;
 | 
			
		||||
        width: 598px;
 | 
			
		||||
        height: 64px;
 | 
			
		||||
        color: #999999;
 | 
			
		||||
        font-size: 26px;
 | 
			
		||||
        margin-left: 8px;
 | 
			
		||||
        border-radius: 32px;
 | 
			
		||||
        padding-left: 70px;
 | 
			
		||||
        padding-right: 60px;
 | 
			
		||||
        box-sizing: border-box;
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      .clear {
 | 
			
		||||
        width: 32px;
 | 
			
		||||
        height: 32px;
 | 
			
		||||
        position: absolute;
 | 
			
		||||
        top: 40px;
 | 
			
		||||
        right: 130px;
 | 
			
		||||
        z-index: 10;
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      .search-word {
 | 
			
		||||
        font-size: 28px;
 | 
			
		||||
        color: #135AB8;
 | 
			
		||||
        line-height: 60px;
 | 
			
		||||
        margin-left: 20px;
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  .session-list {
 | 
			
		||||
    padding-top: 224px;
 | 
			
		||||
 | 
			
		||||
    .session-item {
 | 
			
		||||
      width: 686px;
 | 
			
		||||
      margin: 0 auto 32px auto;
 | 
			
		||||
      background-color: #fff;
 | 
			
		||||
      // height: 462rpx;
 | 
			
		||||
      position: relative;
 | 
			
		||||
      overflow: hidden;
 | 
			
		||||
 | 
			
		||||
      .item-top {
 | 
			
		||||
        padding: 32px 32px 0 32px;
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      .item-title {
 | 
			
		||||
        font-size: 32px;
 | 
			
		||||
        font-family: PingFangSC-Medium, PingFang SC;
 | 
			
		||||
        font-weight: 500;
 | 
			
		||||
        color: #333;
 | 
			
		||||
        line-height: 44px;
 | 
			
		||||
        word-break: break-all;
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      .item-info {
 | 
			
		||||
        line-height: 42px;
 | 
			
		||||
        font-size: 28px;
 | 
			
		||||
        margin-bottom: 8px;
 | 
			
		||||
 | 
			
		||||
        .info-label {
 | 
			
		||||
          color: #999;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      .item-bottom {
 | 
			
		||||
        border-top: 2px solid #EEE;
 | 
			
		||||
        text-align: right;
 | 
			
		||||
        padding-right: 64px;
 | 
			
		||||
        box-sizing: border-box;
 | 
			
		||||
        line-height: 96px;
 | 
			
		||||
 | 
			
		||||
        .item-btn {
 | 
			
		||||
          display: inline-block;
 | 
			
		||||
          width: 152px;
 | 
			
		||||
          height: 52px;
 | 
			
		||||
          line-height: 52px;
 | 
			
		||||
          border-radius: 28px;
 | 
			
		||||
          text-align: center;
 | 
			
		||||
          font-size: 28px;
 | 
			
		||||
          margin-left: 32px;
 | 
			
		||||
          border: 2px solid #E1E1E1;
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      .info-value {
 | 
			
		||||
        color: #343D65;
 | 
			
		||||
        background-color: #fff !important;
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      .item-status {
 | 
			
		||||
        position: absolute;
 | 
			
		||||
        top: 14px;
 | 
			
		||||
        right: -36rpx;
 | 
			
		||||
        width: 140px;
 | 
			
		||||
        text-align: center;
 | 
			
		||||
        line-height: 44px;
 | 
			
		||||
        font-size: 24px;
 | 
			
		||||
        transform: rotate(45deg);
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      .item-status1 {
 | 
			
		||||
        color: #FF9B2B;
 | 
			
		||||
        background-color: #FFF3E8;
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      .item-status0 {
 | 
			
		||||
        color: #2EA222;
 | 
			
		||||
        background-color: #EAF5E8;
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      .item-status3 {
 | 
			
		||||
        color: #999;
 | 
			
		||||
        background-color: #F2F2F2;
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      .item-status2 {
 | 
			
		||||
        color: #5A98F2;
 | 
			
		||||
        background-color: #F1F6FF;
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      .color-1365DD {
 | 
			
		||||
        color: #1365DD;
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      .color-FF4466 {
 | 
			
		||||
        color: #FF4466;
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      .color-333333 {
 | 
			
		||||
        color: #333;
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      .color-606060 {
 | 
			
		||||
        color: #606060;
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      .border-1365DD {
 | 
			
		||||
        border-color: #1365DD !important;
 | 
			
		||||
        color: #1365DD !important;
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      .border-E1E1E1 {
 | 
			
		||||
        border-color: #E1E1E1 !important;
 | 
			
		||||
        color: #606060;
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      .border-E1E1E1 {
 | 
			
		||||
        border-color: #E1E1E1 !important;
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      .mar-b12 {
 | 
			
		||||
        margin-bottom: 26px !important;
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  .no-affairs {
 | 
			
		||||
    width: 100%;
 | 
			
		||||
    height: calc(100% - 210rpx);
 | 
			
		||||
    display: flex;
 | 
			
		||||
    justify-content: center;
 | 
			
		||||
    align-items: center;
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
</style>
 | 
			
		||||
@@ -1,209 +0,0 @@
 | 
			
		||||
<template>
 | 
			
		||||
  <div class="page">
 | 
			
		||||
    <!-- <span class="close-img" @click="closePage()">×</span> -->
 | 
			
		||||
    <image src="https://cdn.cunwuyun.cn/img/qrcode-sign-img.png" class="banner-img"></image>
 | 
			
		||||
    <div class="btn" @click="btnClick()">{{ btnspan }}</div>
 | 
			
		||||
    <div class="mask" v-if="showFail">
 | 
			
		||||
      <div class="mask-content">
 | 
			
		||||
        <image src="https://cdn.cunwuyun.cn/img/qrcode-sign-fail.png" class="fail-img"></image>
 | 
			
		||||
        <div class="mask-span">签到失败!请重新签到</div>
 | 
			
		||||
        <div class="mask-btn" @click="btnClick()">确认签到</div>
 | 
			
		||||
      </div>
 | 
			
		||||
    </div>
 | 
			
		||||
  </div>
 | 
			
		||||
</template>
 | 
			
		||||
<script>
 | 
			
		||||
export default {
 | 
			
		||||
  data() {
 | 
			
		||||
    return {
 | 
			
		||||
      showFail: false,
 | 
			
		||||
      meetingId: '',
 | 
			
		||||
      btnspan: '',
 | 
			
		||||
      scene: '',
 | 
			
		||||
      userId: '',
 | 
			
		||||
      isSign: true
 | 
			
		||||
    };
 | 
			
		||||
  },
 | 
			
		||||
  onShow() {
 | 
			
		||||
    if (uni.getStorageSync('token')) {
 | 
			
		||||
      this.meetingId = this.$mp.query.scene
 | 
			
		||||
      // this.meetingId = 'c29aacb54f074c14ab93532e384a6daa'
 | 
			
		||||
      this.getUserInfo()
 | 
			
		||||
    } else {
 | 
			
		||||
      uni.showModal({
 | 
			
		||||
        title: '提示',
 | 
			
		||||
        content: '您还未登录,请先登录!',
 | 
			
		||||
        confirmspan: "去登录",
 | 
			
		||||
        showCancel: false,
 | 
			
		||||
        success(res) {
 | 
			
		||||
          if (res.confirm) {
 | 
			
		||||
            wx.switchTab({
 | 
			
		||||
              url: '../mine/mine',
 | 
			
		||||
            })
 | 
			
		||||
          }
 | 
			
		||||
        }
 | 
			
		||||
      })
 | 
			
		||||
    }
 | 
			
		||||
  },
 | 
			
		||||
  methods: {
 | 
			
		||||
    getUserInfo() {
 | 
			
		||||
      this.$store.commit("getUserInfo", v => {
 | 
			
		||||
        if (v) {
 | 
			
		||||
          this.userId = res.data.id
 | 
			
		||||
          this.getDetailInfo()
 | 
			
		||||
        }
 | 
			
		||||
      })
 | 
			
		||||
    },
 | 
			
		||||
    getDetailInfo() {
 | 
			
		||||
      this.$http.post(`/app/appthreemeetinguser/queryWeathersignByMeetingIdAndUserIdForWX?meetingId=${this.meetingId}&userId=${this.userId}`, null, {}).then(res => {
 | 
			
		||||
        if (res.data) {
 | 
			
		||||
          this.isSign = true
 | 
			
		||||
          // if(res.data.status == 1) { //已签到
 | 
			
		||||
          //     this.btnspan = '已签到'
 | 
			
		||||
          // }
 | 
			
		||||
          if (res.data.status == 0) { //未签
 | 
			
		||||
            this.btnspan = '确认签到'
 | 
			
		||||
          } else {
 | 
			
		||||
            this.btnspan = '已签到'
 | 
			
		||||
          }
 | 
			
		||||
        } else {
 | 
			
		||||
          this.btnspan = '确认签到'
 | 
			
		||||
          this.isSign = false   //不是参会人员
 | 
			
		||||
        }
 | 
			
		||||
      }).catch(err => {
 | 
			
		||||
        uni.showToast({
 | 
			
		||||
          icon: 'none',
 | 
			
		||||
          title: err,
 | 
			
		||||
          duration: 2000
 | 
			
		||||
        });
 | 
			
		||||
        return
 | 
			
		||||
      })
 | 
			
		||||
    },
 | 
			
		||||
    btnClick() {
 | 
			
		||||
      // if(!this.isSign) {
 | 
			
		||||
      //     uni.showToast({
 | 
			
		||||
      //         icon: 'none',
 | 
			
		||||
      //         title: '您不是参会人员',
 | 
			
		||||
      //         duration: 2000
 | 
			
		||||
      //     });
 | 
			
		||||
      //     return
 | 
			
		||||
      // }
 | 
			
		||||
      if (this.btnspan == '已签到') {
 | 
			
		||||
        uni.showToast({
 | 
			
		||||
          icon: 'none',
 | 
			
		||||
          title: '已签到',
 | 
			
		||||
          duration: 2000
 | 
			
		||||
        });
 | 
			
		||||
        return
 | 
			
		||||
      }
 | 
			
		||||
      this.$http.post(`/app/appthreemeetinguser/signByMeetingIdAndUserIdForWX?meetingId=${this.meetingId}&userId=${this.userId}`, null, {}).then(res => {
 | 
			
		||||
        if (res.code == 0) {
 | 
			
		||||
          this.btnspan = '已签到'
 | 
			
		||||
          uni.showToast({
 | 
			
		||||
            title: '签到成功',
 | 
			
		||||
            duration: 2000
 | 
			
		||||
          });
 | 
			
		||||
        } else {
 | 
			
		||||
          this.showFail = true
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
      }).catch(err => {
 | 
			
		||||
        uni.showToast({
 | 
			
		||||
          icon: 'none',
 | 
			
		||||
          title: err,
 | 
			
		||||
          duration: 2000
 | 
			
		||||
        });
 | 
			
		||||
        return
 | 
			
		||||
      })
 | 
			
		||||
    },
 | 
			
		||||
    closePage() {
 | 
			
		||||
      uni.reLaunch({
 | 
			
		||||
        url: "../home/portal"
 | 
			
		||||
      })
 | 
			
		||||
    }
 | 
			
		||||
  },
 | 
			
		||||
};
 | 
			
		||||
</script>
 | 
			
		||||
<style lang="scss" scope>
 | 
			
		||||
@import "../../../common/common.css";
 | 
			
		||||
 | 
			
		||||
.page {
 | 
			
		||||
  background-color: #FFFFFF;
 | 
			
		||||
  position: relative;
 | 
			
		||||
 | 
			
		||||
  .close-img {
 | 
			
		||||
    position: absolute;
 | 
			
		||||
    font-size: 50px;
 | 
			
		||||
    left: 32px;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  .banner-img {
 | 
			
		||||
    width: 514px;
 | 
			
		||||
    height: 340px;
 | 
			
		||||
    margin: 48px 0 118px 96px;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  .btn {
 | 
			
		||||
    width: 622px;
 | 
			
		||||
    line-height: 96px;
 | 
			
		||||
    text-align: center;
 | 
			
		||||
    background: rgba(19, 90, 184, 1);
 | 
			
		||||
    box-shadow: 0 8px 16px 0 rgba(0, 0, 0, 0.02);
 | 
			
		||||
    border-radius: 8px;
 | 
			
		||||
    margin: 0 auto;
 | 
			
		||||
    color: #fff;
 | 
			
		||||
    font-size: 32px;
 | 
			
		||||
    font-family: PingFangSC-Medium, PingFang SC;
 | 
			
		||||
    font-weight: 500;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  .mask {
 | 
			
		||||
    position: absolute;
 | 
			
		||||
    top: 0;
 | 
			
		||||
    left: 0;
 | 
			
		||||
    width: 100%;
 | 
			
		||||
    height: 100%;
 | 
			
		||||
    background: rgba(0, 0, 0, .3);
 | 
			
		||||
 | 
			
		||||
    .mask-content {
 | 
			
		||||
      width: 686px;
 | 
			
		||||
      height: 640px;
 | 
			
		||||
      background: #fff;
 | 
			
		||||
      border-radius: 8px;
 | 
			
		||||
      border: 2px solid rgba(151, 151, 151, 1);
 | 
			
		||||
      margin: 260px auto 0;
 | 
			
		||||
 | 
			
		||||
      .fail-img {
 | 
			
		||||
        width: 160px;
 | 
			
		||||
        height: 160px;
 | 
			
		||||
        margin: 112px 0 32px 264px;
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      .mask-span {
 | 
			
		||||
        width: 100%;
 | 
			
		||||
        line-height: 50px;
 | 
			
		||||
        font-size: 36px;
 | 
			
		||||
        font-family: PingFangSC-Medium, PingFang SC;
 | 
			
		||||
        font-weight: 700;
 | 
			
		||||
        color: rgba(51, 51, 51, 1);
 | 
			
		||||
        text-align: center;
 | 
			
		||||
        margin-bottom: 134px;
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      .mask-btn {
 | 
			
		||||
        width: 560px;
 | 
			
		||||
        line-height: 96px;
 | 
			
		||||
        text-align: center;
 | 
			
		||||
        background: rgba(19, 90, 184, 1);
 | 
			
		||||
        box-shadow: 0 8px 16px 0 rgba(0, 0, 0, 0.02);
 | 
			
		||||
        border-radius: 8px;
 | 
			
		||||
        margin: 0 auto;
 | 
			
		||||
        color: #fff;
 | 
			
		||||
        font-size: 32px;
 | 
			
		||||
        font-family: PingFangSC-Medium, PingFang SC;
 | 
			
		||||
        font-weight: 500;
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
</style>
 | 
			
		||||
@@ -1,460 +0,0 @@
 | 
			
		||||
<template>
 | 
			
		||||
  <div class="page">
 | 
			
		||||
    <header></header>
 | 
			
		||||
    <div class="form">
 | 
			
		||||
      <div class="main">
 | 
			
		||||
        <div class="textarea">
 | 
			
		||||
          <div class="color-666"><span class="color-red">*</span>会议内容</div>
 | 
			
		||||
          <textarea
 | 
			
		||||
              type="textarea"
 | 
			
		||||
              placeholder="请输入会议内容(3000字以内)"
 | 
			
		||||
              v-model="baseInfo.content"
 | 
			
		||||
              adjust-position="false"
 | 
			
		||||
              maxlength="3000"
 | 
			
		||||
          ></textarea>
 | 
			
		||||
        </div>
 | 
			
		||||
        <div class="uni-uploader">
 | 
			
		||||
          <div class="title-box title-box-margin">
 | 
			
		||||
            <span class="title color-666">图片资料(最多9张)</span>
 | 
			
		||||
          </div>
 | 
			
		||||
          <div class="uni-uploader-body">
 | 
			
		||||
            <div class="uni-uploader__files">
 | 
			
		||||
              <block v-for="(image, index) in imageList" :key="index">
 | 
			
		||||
                <div class="uni-uploader__file">
 | 
			
		||||
                  <image
 | 
			
		||||
                      class="uni-uploader__img"
 | 
			
		||||
                      :src="image.accessUrl"
 | 
			
		||||
                      :data-index="index"
 | 
			
		||||
                      @tap="previewImage"
 | 
			
		||||
                  ></image>
 | 
			
		||||
                  <AiUniIcon
 | 
			
		||||
                      type="clear"
 | 
			
		||||
                      class="icon"
 | 
			
		||||
                      color="#8f8f94"
 | 
			
		||||
                      size="26"
 | 
			
		||||
                      @click="deleteImage(index)"
 | 
			
		||||
                  ></AiUniIcon>
 | 
			
		||||
                </div>
 | 
			
		||||
              </block>
 | 
			
		||||
              <div
 | 
			
		||||
                  class="pre-div"
 | 
			
		||||
                  @tap="chooseImageType"
 | 
			
		||||
                  v-if="imageList.length < 9"
 | 
			
		||||
              >
 | 
			
		||||
                <span class="pre-label">+</span>
 | 
			
		||||
                <span class="add-image">添加照片</span>
 | 
			
		||||
              </div>
 | 
			
		||||
            </div>
 | 
			
		||||
          </div>
 | 
			
		||||
        </div>
 | 
			
		||||
      </div>
 | 
			
		||||
    </div>
 | 
			
		||||
    <div class="report" @click="report()">提交</div>
 | 
			
		||||
  </div>
 | 
			
		||||
</template>
 | 
			
		||||
 | 
			
		||||
<script>
 | 
			
		||||
export default {
 | 
			
		||||
  name: "fillLog",
 | 
			
		||||
  data() {
 | 
			
		||||
    return {
 | 
			
		||||
      reportId: "",
 | 
			
		||||
      baseInfo: {
 | 
			
		||||
        content: "",
 | 
			
		||||
        fileIds: [],
 | 
			
		||||
        reportId: "",
 | 
			
		||||
        id: "",
 | 
			
		||||
        images: [],
 | 
			
		||||
        meetingId: "",
 | 
			
		||||
        createUserName: "",
 | 
			
		||||
      },
 | 
			
		||||
      imageList: [],
 | 
			
		||||
      sourceTypeIndex: 2,
 | 
			
		||||
      sourceType: [
 | 
			
		||||
        // 图片来源类型
 | 
			
		||||
        ["camera"],
 | 
			
		||||
        ["album"],
 | 
			
		||||
      ],
 | 
			
		||||
    };
 | 
			
		||||
  },
 | 
			
		||||
  computed: {
 | 
			
		||||
    user() {
 | 
			
		||||
      return uni.getStorageSync("userInfo");
 | 
			
		||||
    },
 | 
			
		||||
  },
 | 
			
		||||
  onLoad(options) {
 | 
			
		||||
    this.baseInfo.meetingId = options.id;
 | 
			
		||||
    this.getDetailInfo();
 | 
			
		||||
  },
 | 
			
		||||
  methods: {
 | 
			
		||||
    getDetailInfo() {
 | 
			
		||||
      this.$http.post(`/app/appthreemeetinginfoexpand/queryDetailById?id=${this.baseInfo.meetingId}`).then((res) => {
 | 
			
		||||
        if (res.data) {
 | 
			
		||||
          if (res.data.images != null) {
 | 
			
		||||
            this.imageList = JSON.parse(res.data.images);
 | 
			
		||||
          }
 | 
			
		||||
          this.baseInfo = {...res.data};
 | 
			
		||||
        }
 | 
			
		||||
      })
 | 
			
		||||
      .catch((err) => {
 | 
			
		||||
      });
 | 
			
		||||
    },
 | 
			
		||||
    // 选择照片类型
 | 
			
		||||
    chooseImageType() {
 | 
			
		||||
      let that = this;
 | 
			
		||||
      uni.showActionSheet({
 | 
			
		||||
        itemList: ["拍照", "从相册选择"],
 | 
			
		||||
        success: function (res) {
 | 
			
		||||
          // console.log(res.tapIndex)
 | 
			
		||||
          that.sourceTypeIndex = res.tapIndex;
 | 
			
		||||
          // console.log(that.sourceTypeIndex)
 | 
			
		||||
          that.chooseImage();
 | 
			
		||||
        },
 | 
			
		||||
      });
 | 
			
		||||
    },
 | 
			
		||||
    showModel(title) {
 | 
			
		||||
      uni.showModal({
 | 
			
		||||
        title: "温馨提示",
 | 
			
		||||
        content: title,
 | 
			
		||||
        showCancel: false,
 | 
			
		||||
        confirmColor: "#135AB8",
 | 
			
		||||
        success(res) {
 | 
			
		||||
          if (res.confirm) {
 | 
			
		||||
          }
 | 
			
		||||
        },
 | 
			
		||||
      });
 | 
			
		||||
    },
 | 
			
		||||
    chooseImage: async function () {
 | 
			
		||||
      let that = this;
 | 
			
		||||
      if (that.imageList.length === 9) {
 | 
			
		||||
        let isContinue = await that.isFullImg();
 | 
			
		||||
        // console.log("是否继续?", isContinue);
 | 
			
		||||
        if (!isContinue) {
 | 
			
		||||
          return;
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
      uni.chooseImage({
 | 
			
		||||
        // 从相册选择或相机拍摄
 | 
			
		||||
        sourceType: that.sourceType[that.sourceTypeIndex],
 | 
			
		||||
        // 最多可以选择的图片数量
 | 
			
		||||
        count: 9,
 | 
			
		||||
        success: (res) => {
 | 
			
		||||
          // 图片的本地文件路径列表
 | 
			
		||||
          that.tempFilePaths = res.tempFilePaths;
 | 
			
		||||
          // console.log(res.tempFilePaths)
 | 
			
		||||
          for (let i = 0; i < that.tempFilePaths.length; i++) {
 | 
			
		||||
            let str = "";
 | 
			
		||||
            let token = uni.getStorageSync("token");
 | 
			
		||||
            // console.log('token',token)
 | 
			
		||||
            let params = {
 | 
			
		||||
              token: token,
 | 
			
		||||
            };
 | 
			
		||||
            // url String 是 开发者服务器 url
 | 
			
		||||
            // files Aarry 否 需要上传的文件列表。使用 files 时,filePath 和 name 不生效。 5+App
 | 
			
		||||
            // filePath String 是 要上传文件资源的路径。
 | 
			
		||||
            // name String 是 文件对应的 key , 开发者在服务器端通过这个 key 可以获取到文件二进制内容
 | 
			
		||||
            // header Object 否 HTTP 请求 Header, header 中不能设置 Referer
 | 
			
		||||
            // formData Object 否 HTTP 请求中其他额外的 form data
 | 
			
		||||
            // success Function 否 接口调用成功的回调函数
 | 
			
		||||
            // fail Function 否 接口调用失败的回调函数
 | 
			
		||||
            // complete Function 否 接口调用结束的回调函数(调用成功、失败都会执行)
 | 
			
		||||
            uni.uploadFile({
 | 
			
		||||
              url: this.$http.baseURL + "/admin/file/add",
 | 
			
		||||
              filePath: that.tempFilePaths[i],
 | 
			
		||||
              name: "file",
 | 
			
		||||
              // formData:params,
 | 
			
		||||
              header: {
 | 
			
		||||
                "Content-Type": "multipart/form-data",
 | 
			
		||||
                access_token: token,
 | 
			
		||||
                Authorization: token,
 | 
			
		||||
              },
 | 
			
		||||
              success(res) {
 | 
			
		||||
                // console.log('uploader',res)
 | 
			
		||||
                str = JSON.stringify(JSON.parse(res.data).data[0]).replace(
 | 
			
		||||
                    /\"/g,
 | 
			
		||||
                    ""
 | 
			
		||||
                );
 | 
			
		||||
                var temp = {
 | 
			
		||||
                  fileId: str.split(";")[1],
 | 
			
		||||
                  accessUrl: str.split(";")[0],
 | 
			
		||||
                };
 | 
			
		||||
                that.imageList = that.imageList.concat(temp);
 | 
			
		||||
                if (that.imageList.length > 9) {
 | 
			
		||||
                  that.imageList = that.imageList.slice(0, 9);
 | 
			
		||||
                  uni.showToast({
 | 
			
		||||
                    title: "图片最多只能上传9张",
 | 
			
		||||
                    icon: "none",
 | 
			
		||||
                  });
 | 
			
		||||
                }
 | 
			
		||||
                that.imgUrl = JSON.stringify(that.imageList);
 | 
			
		||||
 | 
			
		||||
                // console.log('imageList-upload',that.imageList)
 | 
			
		||||
              },
 | 
			
		||||
              fail(res) {
 | 
			
		||||
                console.log("error", res);
 | 
			
		||||
              },
 | 
			
		||||
            });
 | 
			
		||||
          }
 | 
			
		||||
        },
 | 
			
		||||
      });
 | 
			
		||||
    },
 | 
			
		||||
    // 预览图片(大图预览)
 | 
			
		||||
    previewImage: function (e) {
 | 
			
		||||
      let that = this;
 | 
			
		||||
      // console.log('预览',e)
 | 
			
		||||
      var current = e.target.dataset.index;
 | 
			
		||||
      // console.log(current)
 | 
			
		||||
 | 
			
		||||
      var tempList = [];
 | 
			
		||||
      for (var i in that.imageList) {
 | 
			
		||||
        tempList.push(that.imageList[i].accessUrl);
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      uni.previewImage({
 | 
			
		||||
        // 当前图片的索引、链接
 | 
			
		||||
        current: tempList[current],
 | 
			
		||||
        urls: tempList,
 | 
			
		||||
        longPressActions: {
 | 
			
		||||
          itemList: ["发送给朋友", "保存图片", "收藏"],
 | 
			
		||||
          success: function (data) {
 | 
			
		||||
            // console.log('选中了第' + (data.tapIndex + 1) + '个按钮,第' + (data.index + 1) + '张图片');
 | 
			
		||||
          },
 | 
			
		||||
          fail: function (err) {
 | 
			
		||||
            // console.log(err.errMsg);
 | 
			
		||||
          },
 | 
			
		||||
        },
 | 
			
		||||
      });
 | 
			
		||||
    },
 | 
			
		||||
    // 删除照片
 | 
			
		||||
    deleteImage(index) {
 | 
			
		||||
      this.imageList.splice(index, 1);
 | 
			
		||||
    },
 | 
			
		||||
    report() {
 | 
			
		||||
      if (!this.baseInfo.content) {
 | 
			
		||||
        uni.showToast({title: "会议内容不能为空", icon: "none"});
 | 
			
		||||
        return false;
 | 
			
		||||
      }
 | 
			
		||||
      this.baseInfo.fileIds = [];
 | 
			
		||||
      this.imageList.forEach((e) => {
 | 
			
		||||
        this.baseInfo.fileIds.push(e.fileId);
 | 
			
		||||
      });
 | 
			
		||||
      this.baseInfo.images = JSON.stringify(this.imageList);
 | 
			
		||||
      this.baseInfo.createUserName = this.user.realName;
 | 
			
		||||
      this.$http
 | 
			
		||||
      .post(`/app/appthreemeetinginfoexpand/addOrUpdate`, this.baseInfo, null)
 | 
			
		||||
      .then((res) => {
 | 
			
		||||
        if (res.code == 0) {
 | 
			
		||||
          uni.showToast({
 | 
			
		||||
            title: "会议纪要提交成功",
 | 
			
		||||
            icon: "none",
 | 
			
		||||
            duration: 2000,
 | 
			
		||||
          });
 | 
			
		||||
          setTimeout(() => {
 | 
			
		||||
            uni.navigateBack({
 | 
			
		||||
              delta: 2,
 | 
			
		||||
            });
 | 
			
		||||
          }, 2000);
 | 
			
		||||
        }
 | 
			
		||||
      })
 | 
			
		||||
      .catch((err) => {
 | 
			
		||||
        uni.showToast({
 | 
			
		||||
          title: err,
 | 
			
		||||
          icon: "none",
 | 
			
		||||
          duration: 1000,
 | 
			
		||||
        });
 | 
			
		||||
      });
 | 
			
		||||
    },
 | 
			
		||||
  },
 | 
			
		||||
};
 | 
			
		||||
</script>
 | 
			
		||||
 | 
			
		||||
<style lang="scss" scoped>
 | 
			
		||||
@import "../../../common/common.css";
 | 
			
		||||
 | 
			
		||||
.page {
 | 
			
		||||
  width: 100%;
 | 
			
		||||
  height: 100%;
 | 
			
		||||
  font-size: 32 rpx;
 | 
			
		||||
 | 
			
		||||
  header {
 | 
			
		||||
    width: 100%;
 | 
			
		||||
    height: 112 rpx;
 | 
			
		||||
    background-color: #e60012;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  .form {
 | 
			
		||||
    width: 100%;
 | 
			
		||||
    padding: 32 rpx;
 | 
			
		||||
    box-sizing: border-box;
 | 
			
		||||
    margin-top: -100rpx;
 | 
			
		||||
 | 
			
		||||
    .main {
 | 
			
		||||
      background-color: #fff;
 | 
			
		||||
      border-radius: 8 rpx;
 | 
			
		||||
      padding: 16 rpx;
 | 
			
		||||
      box-sizing: border-box;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    .basic-item {
 | 
			
		||||
      font-size: 32 rpx;
 | 
			
		||||
      justify-content: space-between;
 | 
			
		||||
      width: 100%;
 | 
			
		||||
      height: 112 rpx;
 | 
			
		||||
      padding: 32 rpx 32 rpx 32 rpx 12 rpx;
 | 
			
		||||
      box-sizing: border-box;
 | 
			
		||||
      background-color: #fff;
 | 
			
		||||
      border-bottom: 1 rpx solid #eee;
 | 
			
		||||
 | 
			
		||||
      input {
 | 
			
		||||
        text-align: right;
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      .wid-110 {
 | 
			
		||||
        width: 214 rpx;
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      .skill-span {
 | 
			
		||||
        max-width: 432 rpx;
 | 
			
		||||
        text-align: right;
 | 
			
		||||
        display: inline-block;
 | 
			
		||||
        overflow: hidden;
 | 
			
		||||
        span-overflow: ellipsis;
 | 
			
		||||
        white-space: nowrap;
 | 
			
		||||
        font-size: 30 rpx;
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      .picker {
 | 
			
		||||
        justify-content: flex-end;
 | 
			
		||||
        align-items: center;
 | 
			
		||||
        color: #999999;
 | 
			
		||||
        font-size: 32 rpx;
 | 
			
		||||
        background-color: #ffffff;
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      .picker > .AiArea {
 | 
			
		||||
        background-color: #fff !important;
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      .image {
 | 
			
		||||
        width: 32 rpx;
 | 
			
		||||
        height: 32 rpx;
 | 
			
		||||
        vertical-align: middle;
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      .wei-span {
 | 
			
		||||
        width: 40%;
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      .msg-value {
 | 
			
		||||
        width: 60%;
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      .msg-btn {
 | 
			
		||||
        width: 160px;
 | 
			
		||||
        text-align: right;
 | 
			
		||||
        background-color: #fff !important;
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      button {
 | 
			
		||||
        font-size: 28 rpx;
 | 
			
		||||
        background-color: #fff;
 | 
			
		||||
        line-height: 48 rpx;
 | 
			
		||||
        padding: 0;
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      button::after {
 | 
			
		||||
        border: 0;
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      .button-hover {
 | 
			
		||||
        background-color: #fff;
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      button[disabled] {
 | 
			
		||||
        background-color: #fff !important;
 | 
			
		||||
        font-size: 28 rpx;
 | 
			
		||||
        border-radius: 0;
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /* 上传照片 */
 | 
			
		||||
    .uni-uploader {
 | 
			
		||||
      flex: 1;
 | 
			
		||||
      flex-direction: column;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    .uni-uploader-head {
 | 
			
		||||
      display: flex;
 | 
			
		||||
      flex-direction: row;
 | 
			
		||||
      justify-content: space-between;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    .uni-uploader-info {
 | 
			
		||||
      color: #b2b2b2;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    .uni-uploader-body {
 | 
			
		||||
      margin-top: 16 rpx;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    .uni-uploader__files {
 | 
			
		||||
      display: flex;
 | 
			
		||||
      flex-direction: row;
 | 
			
		||||
      flex-wrap: wrap;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    .uni-uploader__file {
 | 
			
		||||
      margin-right: 10 rpx;
 | 
			
		||||
      margin-bottom: 20 rpx;
 | 
			
		||||
      width: 160 rpx;
 | 
			
		||||
      height: 160 rpx;
 | 
			
		||||
      position: relative;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    .uni-uploader__img {
 | 
			
		||||
      display: block;
 | 
			
		||||
      width: 160 rpx;
 | 
			
		||||
      height: 160 rpx;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    .pre-label {
 | 
			
		||||
      font-size: 80 rpx;
 | 
			
		||||
      color: #dddddd;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    .add-image {
 | 
			
		||||
      color: #dddddd;
 | 
			
		||||
      font-size: 24 rpx;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    .pre-div {
 | 
			
		||||
      width: 160 rpx;
 | 
			
		||||
      height: 160 rpx;
 | 
			
		||||
      display: flex;
 | 
			
		||||
      flex-direction: column;
 | 
			
		||||
      justify-content: flex-start;
 | 
			
		||||
      align-items: center;
 | 
			
		||||
      border-radius: 8 rpx;
 | 
			
		||||
      border: 2 rpx solid #dddddd;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    .icon {
 | 
			
		||||
      position: absolute;
 | 
			
		||||
      top: -15rpx;
 | 
			
		||||
      right: -10rpx;
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  .report {
 | 
			
		||||
    position: fixed;
 | 
			
		||||
    left: 0;
 | 
			
		||||
    bottom: 0;
 | 
			
		||||
    height: 112 rpx;
 | 
			
		||||
    line-height: 112 rpx;
 | 
			
		||||
    font-size: 32 rpx;
 | 
			
		||||
    text-align: center;
 | 
			
		||||
    background: rgba(230, 0, 18, 1);
 | 
			
		||||
    color: #fff;
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
</style>
 | 
			
		||||
@@ -1,525 +0,0 @@
 | 
			
		||||
<template>
 | 
			
		||||
  <div class="page">
 | 
			
		||||
    <div class="detail-info">
 | 
			
		||||
      <div class="info-title">{{ data.meetingAgenda }}</div>
 | 
			
		||||
      <div class="item-info">
 | 
			
		||||
        <span class="info-label">会议状态:</span>
 | 
			
		||||
        <span class="info-value">{{ $dict.getLabel('postStatus', data.postStatus) }}</span>
 | 
			
		||||
      </div>
 | 
			
		||||
      <div class="item-info">
 | 
			
		||||
        <span class="info-label">举办方式:</span>
 | 
			
		||||
        <span class="info-value">{{ data.isOnline == 1 ? '线上会议' : '线下会议' }}</span>
 | 
			
		||||
      </div>
 | 
			
		||||
      <div class="item-info">
 | 
			
		||||
        <span class="info-label">会议分类:</span>
 | 
			
		||||
        <span class="info-value" v-if="data.meetingClassification && data.meetingClassification.length">
 | 
			
		||||
          <span v-for="(item, index) in data.meetingClassification" :key="index">
 | 
			
		||||
            {{ $dict.getLabel('meetingClassification', item) }}
 | 
			
		||||
            <span v-if="index < data.meetingClassification.length - 1">,</span>
 | 
			
		||||
          </span>
 | 
			
		||||
        </span>
 | 
			
		||||
        <span class="info-value" v-else>-</span>
 | 
			
		||||
      </div>
 | 
			
		||||
      <div class="item-info" v-if="showAll">
 | 
			
		||||
        <span class="info-label">会议时间:</span>
 | 
			
		||||
        <span class="info-value">{{ data.startTime || '-' }}</span>
 | 
			
		||||
      </div>
 | 
			
		||||
      <div class="item-info" v-if="showAll">
 | 
			
		||||
        <span class="info-label">签到时间:</span>
 | 
			
		||||
        <span class="info-value" v-if="data.signMethod == 1 && signStart">{{ signStart }}</span>
 | 
			
		||||
        <span class="info-value sign-end" v-if="data.signMethod == 1 && signEnd">至 {{ signEnd }}</span>
 | 
			
		||||
        <span class="info-value" v-if="data.signMethod != 1">-</span>
 | 
			
		||||
      </div>
 | 
			
		||||
      <div class="item-info" v-if="showAll">
 | 
			
		||||
        <span class="info-label">会议地点:</span>
 | 
			
		||||
        <span class="info-value">{{ data.meetingAddress || '-' }}</span>
 | 
			
		||||
      </div>
 | 
			
		||||
      <!-- <div class="item-info" v-if="showAll">
 | 
			
		||||
        <span class="info-label">会议主题:</span>
 | 
			
		||||
        <span class="info-value" v-if="data.topicClassification &&  data.topicClassification.length">
 | 
			
		||||
          <span v-for="(item, index) in data.topicClassification" :key="index">
 | 
			
		||||
            {{ $dict.getLabel('topicClassification', item) }}
 | 
			
		||||
            <span v-if="index < data.topicClassification.length - 1">,</span>
 | 
			
		||||
          </span>
 | 
			
		||||
        </span>
 | 
			
		||||
        <span class="info-value" v-else>-</span>
 | 
			
		||||
      </div> -->
 | 
			
		||||
      <div class="item-info" v-if="showAll">
 | 
			
		||||
        <span class="info-label">主持人员:</span>
 | 
			
		||||
        <span class="info-value">{{ data.hostName || '-' }}</span>
 | 
			
		||||
      </div>
 | 
			
		||||
      <div class="item-info" v-if="showAll">
 | 
			
		||||
        <span class="info-label">发布人员:</span>
 | 
			
		||||
        <span class="info-value">{{ data.createUserName || '-' }}</span>
 | 
			
		||||
      </div>
 | 
			
		||||
      <div class="item-info" v-if="showAll">
 | 
			
		||||
        <span class="info-label">签到人员:</span>
 | 
			
		||||
        <span class="info-value" v-if="data.chargeOfSignInList && data.chargeOfSignInList.length">
 | 
			
		||||
          <span v-for="(item, index) in data.chargeOfSignInList" :key="index">
 | 
			
		||||
            {{ item.userName }}
 | 
			
		||||
            <span v-if="index < data.chargeOfSignInList.length - 1">,</span>
 | 
			
		||||
          </span>
 | 
			
		||||
        </span>
 | 
			
		||||
        <span class="info-value" v-else>-</span>
 | 
			
		||||
      </div>
 | 
			
		||||
      <div class="item-info" v-if="showAll">
 | 
			
		||||
        <span class="info-label">记录人员:</span>
 | 
			
		||||
        <span class="info-value">{{ data.recorderName || '-' }}</span>
 | 
			
		||||
      </div>
 | 
			
		||||
      <div class="retract-btn" @click="divAll()">
 | 
			
		||||
        <span>{{ btnspan }}</span>
 | 
			
		||||
        <image src="https://cdn.cunwuyun.cn/img/down-icon-fff.png"
 | 
			
		||||
               :class="btnspan == '收起' ? 'down-icon icon-active' : 'down-icon'"></image>
 | 
			
		||||
      </div>
 | 
			
		||||
    </div>
 | 
			
		||||
    <div class="page-title">会议内容</div>
 | 
			
		||||
    <div class="info-content mar-b8" v-html="data.meetingDescription"></div>
 | 
			
		||||
    <div class="page-title mar-b8" @click="toSessionUser">参会情况
 | 
			
		||||
      <span class="pad-l7" v-for="(item, index) in titleList" :key="index">
 | 
			
		||||
        <span class="color-999999">{{ item.label }}</span>
 | 
			
		||||
        <span class="color-1365DD">({{ item.value }})</span>
 | 
			
		||||
      </span>
 | 
			
		||||
      <img src="https://cdn.cunwuyun.cn/img/down.svg" class="right-icon">
 | 
			
		||||
    </div>
 | 
			
		||||
    <div class="user-list">
 | 
			
		||||
      <div class="user-item" v-for="(item, index) in data.appThreeMeetingUserList" :key="index"
 | 
			
		||||
           v-if="item.meetingUserRole == 0 || item.meetingUserRole == 3">
 | 
			
		||||
        <div class="user-bg">{{ formatName(item.meetingUserName) }}</div>
 | 
			
		||||
        <div class="user-info">
 | 
			
		||||
          <div class="user-name">{{ item.meetingUserName }}</div>
 | 
			
		||||
        </div>
 | 
			
		||||
      </div>
 | 
			
		||||
    </div>
 | 
			
		||||
    <div class="btn-bottom" v-if="signStatus < 1 || data.isOnline == 1">
 | 
			
		||||
      <div class="btn" @click="signMeeting()" v-if="data.isOnline != 1">签到</div>
 | 
			
		||||
      <div class="btn" @click="isWeiXin" v-if="data.isOnline == 1">进入直播间</div>
 | 
			
		||||
    </div>
 | 
			
		||||
    <div class="mask" v-if="showMask" @click="showMask=false">
 | 
			
		||||
      <img src="https://cdn.cunwuyun.cn/guangdong/h5/mask-text.png" alt="" class="text-img">
 | 
			
		||||
    </div>
 | 
			
		||||
    <img src="https://cdn.cunwuyun.cn/guangdong/h5/vote-img.png" alt="" class="vote-img" v-if="data.isVote == 1" @click="toVote">
 | 
			
		||||
  </div>
 | 
			
		||||
</template>
 | 
			
		||||
<script>
 | 
			
		||||
export default {
 | 
			
		||||
  data() {
 | 
			
		||||
    return {
 | 
			
		||||
      titleList: [
 | 
			
		||||
        {label: '参与', value: '0'},
 | 
			
		||||
        {label: '已到', value: '0'},
 | 
			
		||||
        {label: '未到', value: '0'},
 | 
			
		||||
        {label: '请假', value: '0'}
 | 
			
		||||
      ],
 | 
			
		||||
      id: '',
 | 
			
		||||
      data: {},
 | 
			
		||||
      btnspan: '展开',
 | 
			
		||||
      showAll: false,
 | 
			
		||||
      partyId: '',
 | 
			
		||||
      signStart: '',
 | 
			
		||||
      signEnd: '',
 | 
			
		||||
      signStatus: '', //0表示显示签到
 | 
			
		||||
      showMask: false,
 | 
			
		||||
      user: {}
 | 
			
		||||
    };
 | 
			
		||||
  },
 | 
			
		||||
  onLoad(options) {
 | 
			
		||||
    if (!uni.getStorageSync("token")) {
 | 
			
		||||
      uni.setStorageSync("token", options.token)
 | 
			
		||||
    }
 | 
			
		||||
    this.$dict.load('postStatus', 'meetingClassification', 'topicClassification').then(() => {
 | 
			
		||||
      this.id = options.id
 | 
			
		||||
      this.signStatus = options.signStatus
 | 
			
		||||
      this.getUserInfo()
 | 
			
		||||
    })
 | 
			
		||||
  },
 | 
			
		||||
  methods: {
 | 
			
		||||
    getUserInfo() {
 | 
			
		||||
      this.$store.commit("getUserInfo")
 | 
			
		||||
      this.$http.post("/app/appparty/chanhudetail").then(res => {
 | 
			
		||||
        if (res?.data) {
 | 
			
		||||
          this.user = res.data
 | 
			
		||||
          this.partyId = this.user.id
 | 
			
		||||
          this.getDetailInfo()
 | 
			
		||||
        }
 | 
			
		||||
      })
 | 
			
		||||
    },
 | 
			
		||||
    isWeiXin() {
 | 
			
		||||
      uni.navigateTo({url: `./ylinkMeetingRoom?meetingNum=${this.data.onlineNum}&pwd=${this.data.onlinePwd}`})
 | 
			
		||||
    },
 | 
			
		||||
    copy() {
 | 
			
		||||
      var token = uni.getStorageSync('token')
 | 
			
		||||
      uni.setClipboardData({data: `https://gdpartyh5.cunwuyun.cn/pages/party/threeSessions/threeSessionsDetail?id=${this.id}&signStatus=${this.signStatus}&token=${token}`});
 | 
			
		||||
    },
 | 
			
		||||
    signMeeting() {
 | 
			
		||||
      this.$http.post(`/app/appthreemeetinguser/signByMeetingIdAndUserIdForWX?meetingId=${this.data.id}&userId=${this.user.id}`, null, {}).then(res => {
 | 
			
		||||
        if (res.code == 0) {
 | 
			
		||||
          this.$toast('签到成功')
 | 
			
		||||
          this.getDetailInfo()
 | 
			
		||||
        }
 | 
			
		||||
      }).catch(err => {
 | 
			
		||||
        uni.showToast({
 | 
			
		||||
          icon: 'none',
 | 
			
		||||
          title: err,
 | 
			
		||||
          duration: 2000
 | 
			
		||||
        });
 | 
			
		||||
      })
 | 
			
		||||
    },
 | 
			
		||||
    toContent() {
 | 
			
		||||
      uni.navigateTo({
 | 
			
		||||
        url: './threeSessionsContent?id=' + this.id
 | 
			
		||||
      })
 | 
			
		||||
    },
 | 
			
		||||
    toSessionUser() {
 | 
			
		||||
      uni.navigateTo({
 | 
			
		||||
        url: './threeSessionsUser?id=' + this.id
 | 
			
		||||
      })
 | 
			
		||||
    },
 | 
			
		||||
    getDetailInfo() {
 | 
			
		||||
      this.$loading()
 | 
			
		||||
      this.$http.post(`/app/appthreemeetinginfo/queryDetailById?id=${this.id}`, null, {}).then(res => {
 | 
			
		||||
        if (res.data) {
 | 
			
		||||
          var data = res.data
 | 
			
		||||
          if (data.startTime && data.meetingBefore) {
 | 
			
		||||
            var dStart = new Date(data.startTime);
 | 
			
		||||
            var timeStart = dStart.getTime();
 | 
			
		||||
            var minStart = (Number(data.meetingBefore)) * 60000
 | 
			
		||||
            var totalStart = timeStart - minStart;
 | 
			
		||||
            this.signStart = this.countTime(totalStart);
 | 
			
		||||
          }
 | 
			
		||||
          if (data.startTime && data.meetingAfter) {
 | 
			
		||||
            var dEnd = new Date(data.startTime);
 | 
			
		||||
            var timeEnd = dEnd.getTime();
 | 
			
		||||
            var minEnd = (Number(data.meetingAfter)) * 60000
 | 
			
		||||
            var totalEnd = timeEnd + minEnd;
 | 
			
		||||
            this.signEnd = this.countTime(totalEnd);
 | 
			
		||||
          }
 | 
			
		||||
          data.meetingClassification = data.meetingClassification.split(',')
 | 
			
		||||
          this.titleList[0].value = data.participantList.length + 1 || '0'
 | 
			
		||||
          if (data.isArriveLIst) {
 | 
			
		||||
            this.titleList[1].value = data.isArriveLIst.length
 | 
			
		||||
          }
 | 
			
		||||
          if (data.isArriveLIst) {
 | 
			
		||||
            this.titleList[2].value = data.notArriveLIst.length
 | 
			
		||||
          }
 | 
			
		||||
          if (data.isArriveLIst) {
 | 
			
		||||
            this.titleList[3].value = data.leaveLIst.length
 | 
			
		||||
          }
 | 
			
		||||
          this.data = data
 | 
			
		||||
 | 
			
		||||
          // var methodsObj = data.reminderMethod
 | 
			
		||||
          // this.objInit(methodsObj, 'reminderMethod')
 | 
			
		||||
 | 
			
		||||
          // var meetingClassificationObj = data.meetingClassification
 | 
			
		||||
          // this.objInit(meetingClassificationObj, 'meetingClassification')
 | 
			
		||||
 | 
			
		||||
          // var topicClassificationObj = data.topicClassification
 | 
			
		||||
          // this.objInit(topicClassificationObj, 'topicClassification')
 | 
			
		||||
 | 
			
		||||
          this.$hideLoading()
 | 
			
		||||
        }
 | 
			
		||||
      })
 | 
			
		||||
    },
 | 
			
		||||
    objInit(obj, name) {
 | 
			
		||||
      this.data[name] = []
 | 
			
		||||
      for (let i in obj) {
 | 
			
		||||
        if (obj[i] !== '') {
 | 
			
		||||
          this.data[name].push(obj[i])
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    //会议签到时间计算
 | 
			
		||||
    countTime(total) {
 | 
			
		||||
      var now = new Date(total)
 | 
			
		||||
      var y = now.getFullYear();
 | 
			
		||||
      var m = now.getMonth() + 1;
 | 
			
		||||
      m = m < 10 ? ('0' + m) : m;
 | 
			
		||||
      var da = now.getDate();
 | 
			
		||||
      da = da < 10 ? ('0' + da) : da;
 | 
			
		||||
      var h = now.getHours();
 | 
			
		||||
      h = h < 10 ? ('0' + h) : h;
 | 
			
		||||
      var minute = now.getMinutes();
 | 
			
		||||
      minute = minute < 10 ? ('0' + minute) : minute;
 | 
			
		||||
      var seconds = now.getSeconds();
 | 
			
		||||
      seconds = seconds < 10 ? ('0' + seconds) : seconds;
 | 
			
		||||
      var resDate = y + '-' + m + '-' + da + ' ' + h + ':' + minute + ":" + seconds;
 | 
			
		||||
      resDate = resDate.substring(0, 16)
 | 
			
		||||
      return resDate;
 | 
			
		||||
    },
 | 
			
		||||
    formatName(name) {
 | 
			
		||||
      if (name == undefined) {
 | 
			
		||||
        return
 | 
			
		||||
      }
 | 
			
		||||
      return name.substr(name.length - 2, name.length > 2 ? (name.length - 1) : name.length)
 | 
			
		||||
    },
 | 
			
		||||
    divAll() {
 | 
			
		||||
      if (this.btnspan == '展开') {
 | 
			
		||||
        this.btnspan = '收起'
 | 
			
		||||
        this.showAll = true
 | 
			
		||||
      } else {
 | 
			
		||||
        this.btnspan = '展开'
 | 
			
		||||
        this.showAll = false
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    toVote() {
 | 
			
		||||
      var myVote = ''
 | 
			
		||||
      if (this.data.myVote) {
 | 
			
		||||
        myVote = this.data.myVote
 | 
			
		||||
      }
 | 
			
		||||
      uni.navigateTo({
 | 
			
		||||
        url: `./vote?id=${this.id}`
 | 
			
		||||
      })
 | 
			
		||||
    }
 | 
			
		||||
  },
 | 
			
		||||
};
 | 
			
		||||
</script>
 | 
			
		||||
<style lang="scss" scope>
 | 
			
		||||
@import "../../../common/common.css";
 | 
			
		||||
 | 
			
		||||
.page {
 | 
			
		||||
  width: 100%;
 | 
			
		||||
  overflow-x: hidden;
 | 
			
		||||
  background-color: #F4F6F8;
 | 
			
		||||
 | 
			
		||||
  .mask {
 | 
			
		||||
    width: 100%;
 | 
			
		||||
    height: 100%;
 | 
			
		||||
    background-color: rgba(0, 0, 0, .8);
 | 
			
		||||
    position: fixed;
 | 
			
		||||
    top: 0;
 | 
			
		||||
    left: 0;
 | 
			
		||||
    z-index: 999;
 | 
			
		||||
 | 
			
		||||
    .cancel-img {
 | 
			
		||||
      width: 219px;
 | 
			
		||||
      height: 94px;
 | 
			
		||||
      margin: 580px 0 166px 266px;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    .text-img {
 | 
			
		||||
      position: absolute;
 | 
			
		||||
      top: 0;
 | 
			
		||||
      right: 0;
 | 
			
		||||
      width: 90%;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    .btn {
 | 
			
		||||
      width: 50%;
 | 
			
		||||
      line-height: 112px;
 | 
			
		||||
      background: #E60012;
 | 
			
		||||
      color: #fff;
 | 
			
		||||
      font-size: 32px;
 | 
			
		||||
      text-align: center;
 | 
			
		||||
      position: absolute;
 | 
			
		||||
      bottom: 0;
 | 
			
		||||
      right: 0;
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  .right-icon {
 | 
			
		||||
    width: 32px;
 | 
			
		||||
    height: 32px;
 | 
			
		||||
    float: right;
 | 
			
		||||
    vertical-align: middle;
 | 
			
		||||
    transform: rotate(270deg);
 | 
			
		||||
    padding: 0 72px 0 0;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  .vote-img {
 | 
			
		||||
    width: 140px;
 | 
			
		||||
    height: 140px;
 | 
			
		||||
    position: fixed;
 | 
			
		||||
    bottom: 344px;
 | 
			
		||||
    right: 48px;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  .sign-end {
 | 
			
		||||
    padding-left: 150 rpx;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  .btn-bottom {
 | 
			
		||||
    position: fixed;
 | 
			
		||||
    bottom: 0;
 | 
			
		||||
    left: 0;
 | 
			
		||||
    z-index: 9;
 | 
			
		||||
    width: 100%;
 | 
			
		||||
    display: flex;
 | 
			
		||||
 | 
			
		||||
    .btn {
 | 
			
		||||
      flex: 1;
 | 
			
		||||
      line-height: 112px;
 | 
			
		||||
      background: #E60012;
 | 
			
		||||
      color: #fff;
 | 
			
		||||
      font-size: 32px;
 | 
			
		||||
      text-align: center;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    .sign {
 | 
			
		||||
      background-color: #fff;
 | 
			
		||||
      color: #666;
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  .detail-info {
 | 
			
		||||
    padding: 16px 0 8px 32px;
 | 
			
		||||
    border-bottom: 2px solid #D8DDE6;
 | 
			
		||||
    background-color: #D40A05;
 | 
			
		||||
    padding-bottom: 80px;
 | 
			
		||||
    position: relative;
 | 
			
		||||
 | 
			
		||||
    .info-title {
 | 
			
		||||
      line-height: 64px;
 | 
			
		||||
      font-size: 40px;
 | 
			
		||||
      font-family: PingFangSC-Medium, PingFang SC;
 | 
			
		||||
      font-weight: 500;
 | 
			
		||||
      color: #fff;
 | 
			
		||||
      word-break: break-all;
 | 
			
		||||
      margin-bottom: 16px;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    .item-info {
 | 
			
		||||
      line-height: 48px;
 | 
			
		||||
      font-size: 30px;
 | 
			
		||||
      margin-bottom: 8px;
 | 
			
		||||
 | 
			
		||||
      .info-label {
 | 
			
		||||
        display: inline-block;
 | 
			
		||||
        color: #fff;
 | 
			
		||||
        vertical-align: top;
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      .info-value {
 | 
			
		||||
        display: inline-block;
 | 
			
		||||
        width: 550px;
 | 
			
		||||
        word-break: break-all;
 | 
			
		||||
        color: #FFE8E8;
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      .item-status0 {
 | 
			
		||||
        color: #FF9B2B;
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      .item-status1 {
 | 
			
		||||
        color: #2EA222;
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      .item-status2 {
 | 
			
		||||
        color: #343D65;
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      .item-status3 {
 | 
			
		||||
        color: #5A98F2;
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      .item-status4 {
 | 
			
		||||
        color: #f46;
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    .retract-btn {
 | 
			
		||||
      line-height: 80px;
 | 
			
		||||
      text-align: center;
 | 
			
		||||
      font-size: 28px;
 | 
			
		||||
      color: #fff;
 | 
			
		||||
      position: absolute;
 | 
			
		||||
      bottom: 0;
 | 
			
		||||
      width: 690px;
 | 
			
		||||
 | 
			
		||||
      .down-icon {
 | 
			
		||||
        width: 32px;
 | 
			
		||||
        height: 32px;
 | 
			
		||||
        margin-left: 4px;
 | 
			
		||||
        vertical-align: middle;
 | 
			
		||||
        transition: all .3s ease-in-out;
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      .icon-active {
 | 
			
		||||
        transform: rotate(180deg);
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  .page-title {
 | 
			
		||||
    line-height: 96px;
 | 
			
		||||
    color: #333;
 | 
			
		||||
    font-size: 32px;
 | 
			
		||||
    padding-left: 32px;
 | 
			
		||||
    background-color: #fff;
 | 
			
		||||
 | 
			
		||||
    span {
 | 
			
		||||
      font-size: 28px;
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  .info-content {
 | 
			
		||||
    padding: 16px 32px;
 | 
			
		||||
    background-color: #fff;
 | 
			
		||||
    line-height: 48px;
 | 
			
		||||
    color: #333;
 | 
			
		||||
    font-size: 32px;
 | 
			
		||||
    box-sizing: border-box;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  .user-list {
 | 
			
		||||
    padding-bottom: 140px;
 | 
			
		||||
 | 
			
		||||
    .user-item {
 | 
			
		||||
      background-color: #fff;
 | 
			
		||||
      height: 112px;
 | 
			
		||||
      padding-top: 16px;
 | 
			
		||||
      box-sizing: border-box;
 | 
			
		||||
 | 
			
		||||
      .user-bg {
 | 
			
		||||
        display: inline-block;
 | 
			
		||||
        width: 80px;
 | 
			
		||||
        height: 80px;
 | 
			
		||||
        background-color: #4E8EEE;
 | 
			
		||||
        color: #fff;
 | 
			
		||||
        text-align: center;
 | 
			
		||||
        line-height: 80px;
 | 
			
		||||
        margin: 0 16px 0 32px;
 | 
			
		||||
        font-size: 28px;
 | 
			
		||||
        border-radius: 50%;
 | 
			
		||||
        vertical-align: top;
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      .user-info {
 | 
			
		||||
        display: inline-block;
 | 
			
		||||
        width: 622px;
 | 
			
		||||
        height: 96px;
 | 
			
		||||
        border-bottom: 2px solid #D8DDE6;
 | 
			
		||||
        box-sizing: border-box;
 | 
			
		||||
 | 
			
		||||
        .user-name {
 | 
			
		||||
          line-height: 44px;
 | 
			
		||||
          color: #333;
 | 
			
		||||
          font-size: 32px;
 | 
			
		||||
          margin-top: 16px;
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    .user-item:nth-last-of-type(1) {
 | 
			
		||||
      .user-info {
 | 
			
		||||
        border-bottom: 0;
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  .mar-b8 {
 | 
			
		||||
    margin-bottom: 16px;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  .color-1365DD {
 | 
			
		||||
    color: #1365DD;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  .color-999999 {
 | 
			
		||||
    color: #999999;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  .pad-l7 {
 | 
			
		||||
    padding-left: 14px;
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
</style>
 | 
			
		||||
@@ -1,191 +0,0 @@
 | 
			
		||||
<template>
 | 
			
		||||
  <div class="page">
 | 
			
		||||
    <div class="tab-list">
 | 
			
		||||
      <div
 | 
			
		||||
        class="tab-item"
 | 
			
		||||
        v-for="(item, index) in tabList"
 | 
			
		||||
        :key="index"
 | 
			
		||||
        :class="tabIndex == index ? 'tab-active' : ''"
 | 
			
		||||
        @click="tabClick(index)"
 | 
			
		||||
      >
 | 
			
		||||
        {{ item.label }}({{ item.value }})
 | 
			
		||||
        <span class="line"></span>
 | 
			
		||||
      </div>
 | 
			
		||||
    </div>
 | 
			
		||||
    <div
 | 
			
		||||
      class="user-list"
 | 
			
		||||
      v-for="(item, index) in list"
 | 
			
		||||
      :key="index"
 | 
			
		||||
      v-if="tabIndex != 0"
 | 
			
		||||
    >
 | 
			
		||||
      <div class="user-item">
 | 
			
		||||
        <div class="user-bg">{{ formatName(item.meetingUserName) }}</div>
 | 
			
		||||
        <div class="user-info">
 | 
			
		||||
          <div class="user-name">{{ item.meetingUserName }}</div>
 | 
			
		||||
        </div>
 | 
			
		||||
      </div>
 | 
			
		||||
    </div>
 | 
			
		||||
    <div
 | 
			
		||||
      class="user-list"
 | 
			
		||||
      v-for="(item, index) in list"
 | 
			
		||||
      :key="index"
 | 
			
		||||
      v-if="tabIndex == 0"
 | 
			
		||||
    >
 | 
			
		||||
      <div
 | 
			
		||||
        class="user-item"
 | 
			
		||||
        v-if="item.meetingUserRole == 0 || item.meetingUserRole == 3"
 | 
			
		||||
      >
 | 
			
		||||
        <div class="user-bg">{{ formatName(item.meetingUserName) }}</div>
 | 
			
		||||
        <div class="user-info">
 | 
			
		||||
          <div class="user-name">{{ item.meetingUserName }}</div>
 | 
			
		||||
        </div>
 | 
			
		||||
      </div>
 | 
			
		||||
    </div>
 | 
			
		||||
    <AiEmpty v-if="list.length == 0 || list == null" />
 | 
			
		||||
  </div>
 | 
			
		||||
</template>
 | 
			
		||||
<script>
 | 
			
		||||
export default {
 | 
			
		||||
  data() {
 | 
			
		||||
    return {
 | 
			
		||||
      tabList: [
 | 
			
		||||
        { label: "参与", value: "0" },
 | 
			
		||||
        { label: "已到", value: "0" },
 | 
			
		||||
        { label: "未到", value: "0" },
 | 
			
		||||
        { label: "请假", value: "0" },
 | 
			
		||||
      ],
 | 
			
		||||
      tabIndex: 0,
 | 
			
		||||
      id: "",
 | 
			
		||||
      data: {},
 | 
			
		||||
      list: [],
 | 
			
		||||
    };
 | 
			
		||||
  },
 | 
			
		||||
  onLoad(options) {
 | 
			
		||||
    this.id = options.id;
 | 
			
		||||
    this.getDetailInfo();
 | 
			
		||||
  },
 | 
			
		||||
  methods: {
 | 
			
		||||
    tabClick(index) {
 | 
			
		||||
      this.tabIndex = index;
 | 
			
		||||
      if (index == 0) {
 | 
			
		||||
        this.list = this.data.appThreeMeetingUserList;
 | 
			
		||||
      }
 | 
			
		||||
      if (index == 1) {
 | 
			
		||||
        this.list = this.data.isArriveLIst;
 | 
			
		||||
      }
 | 
			
		||||
      if (index == 2) {
 | 
			
		||||
        this.list = this.data.notArriveLIst;
 | 
			
		||||
      }
 | 
			
		||||
      if (index == 3) {
 | 
			
		||||
        this.list = this.data.leaveLIst;
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    getDetailInfo() {
 | 
			
		||||
      this.$http
 | 
			
		||||
        .post(
 | 
			
		||||
          `/app/appthreemeetinginfo/queryDetailById?id=${this.id}`,
 | 
			
		||||
          null,
 | 
			
		||||
          {}
 | 
			
		||||
        )
 | 
			
		||||
        .then((res) => {
 | 
			
		||||
          if (res.data) {
 | 
			
		||||
            var data = res.data;
 | 
			
		||||
            if (data.appThreeMeetingUserList) {
 | 
			
		||||
              this.tabList[0].value = data.participantList.length + 1;
 | 
			
		||||
            }
 | 
			
		||||
            if (data.isArriveLIst) {
 | 
			
		||||
              this.tabList[1].value = data.isArriveLIst.length;
 | 
			
		||||
            }
 | 
			
		||||
            if (data.isArriveLIst) {
 | 
			
		||||
              this.tabList[2].value = data.notArriveLIst.length;
 | 
			
		||||
            }
 | 
			
		||||
            if (data.isArriveLIst) {
 | 
			
		||||
              this.tabList[3].value = data.leaveLIst.length;
 | 
			
		||||
            }
 | 
			
		||||
            this.data = data;
 | 
			
		||||
            this.list = this.data.appThreeMeetingUserList;
 | 
			
		||||
          }
 | 
			
		||||
        });
 | 
			
		||||
    },
 | 
			
		||||
    formatName(name) {
 | 
			
		||||
      if (name == undefined) {
 | 
			
		||||
        return;
 | 
			
		||||
      }
 | 
			
		||||
      return name.substr(
 | 
			
		||||
        name.length - 2,
 | 
			
		||||
        name.length > 2 ? name.length - 1 : name.length
 | 
			
		||||
      );
 | 
			
		||||
    },
 | 
			
		||||
  },
 | 
			
		||||
};
 | 
			
		||||
</script>
 | 
			
		||||
<style lang="scss" scope>
 | 
			
		||||
@import "../../../common/common.css";
 | 
			
		||||
.page {
 | 
			
		||||
  background-color: #f4f6f8;
 | 
			
		||||
  .tab-list {
 | 
			
		||||
    display: flex;
 | 
			
		||||
    background-color: #e60012;
 | 
			
		||||
    line-height: 96rpx;
 | 
			
		||||
    .tab-item {
 | 
			
		||||
      flex: 1;
 | 
			
		||||
      text-align: center;
 | 
			
		||||
      color: #fff;
 | 
			
		||||
      font-size: 28rpx;
 | 
			
		||||
      position: relative;
 | 
			
		||||
    }
 | 
			
		||||
    .tab-active {
 | 
			
		||||
      .line {
 | 
			
		||||
        position: absolute;
 | 
			
		||||
        bottom: 14rpx;
 | 
			
		||||
        left: 50%;
 | 
			
		||||
        margin-left: -20rpx;
 | 
			
		||||
        display: inline-block;
 | 
			
		||||
        width: 40rpx;
 | 
			
		||||
        height: 4rpx;
 | 
			
		||||
        border-radius: 4rpx;
 | 
			
		||||
        background: #fff;
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
  .user-list {
 | 
			
		||||
    background-color: #fff;
 | 
			
		||||
    .user-item {
 | 
			
		||||
      height: 112rpx;
 | 
			
		||||
      padding-top: 16rpx;
 | 
			
		||||
      box-sizing: border-box;
 | 
			
		||||
      .user-bg {
 | 
			
		||||
        display: inline-block;
 | 
			
		||||
        width: 80rpx;
 | 
			
		||||
        height: 80rpx;
 | 
			
		||||
        background-color: #4e8eee;
 | 
			
		||||
        color: #fff;
 | 
			
		||||
        text-align: center;
 | 
			
		||||
        line-height: 80rpx;
 | 
			
		||||
        margin: 0 16rpx 0 32rpx;
 | 
			
		||||
        font-size: 28rpx;
 | 
			
		||||
        border-radius: 50%;
 | 
			
		||||
        vertical-align: top;
 | 
			
		||||
      }
 | 
			
		||||
      .user-info {
 | 
			
		||||
        display: inline-block;
 | 
			
		||||
        width: 622rpx;
 | 
			
		||||
        height: 96rpx;
 | 
			
		||||
        border-bottom: 2rpx solid #d8dde6;
 | 
			
		||||
        box-sizing: border-box;
 | 
			
		||||
        .user-name {
 | 
			
		||||
          line-height: 44rpx;
 | 
			
		||||
          color: #333;
 | 
			
		||||
          font-size: 32rpx;
 | 
			
		||||
          margin-top: 16px;
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
    .user-item:nth-last-of-type(1) {
 | 
			
		||||
      .user-info {
 | 
			
		||||
        border-bottom: 0;
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
</style>
 | 
			
		||||
@@ -1,143 +0,0 @@
 | 
			
		||||
<template>
 | 
			
		||||
  <div class="page">
 | 
			
		||||
    <img src="https://cdn.cunwuyun.cn/guangdong/h5/bg@2x.png" alt="" class="bg-img">
 | 
			
		||||
    <div class="title">会议投票</div>
 | 
			
		||||
    <div class="content">
 | 
			
		||||
      <img src="https://cdn.cunwuyun.cn/guangdong/h5/dh@2x.png" alt="">
 | 
			
		||||
      <div>投票主题</div>
 | 
			
		||||
      <p v-html="info.voteTopic"></p>
 | 
			
		||||
    </div>
 | 
			
		||||
    <div class="footer">
 | 
			
		||||
      <div class="bg-gray" v-if="info.myVote">已投票</div>
 | 
			
		||||
      <div class="bg-pink" @click="voteSubmit(0)" v-if="!info.myVote">不同意</div>
 | 
			
		||||
      <div class="bg-red" @click="voteSubmit(1)"  v-if="!info.myVote">同意观点</div>
 | 
			
		||||
    </div>
 | 
			
		||||
  </div>
 | 
			
		||||
</template>
 | 
			
		||||
<script>
 | 
			
		||||
import {mapState} from 'vuex'
 | 
			
		||||
export default {
 | 
			
		||||
  computed: {
 | 
			
		||||
    ...mapState(['user']),
 | 
			
		||||
  },
 | 
			
		||||
  data() {
 | 
			
		||||
    return {
 | 
			
		||||
      id: '',
 | 
			
		||||
      info: {},
 | 
			
		||||
    };
 | 
			
		||||
  },
 | 
			
		||||
  onLoad(options) {
 | 
			
		||||
    this.id = options.id
 | 
			
		||||
    this.getDetailInfo()
 | 
			
		||||
  },
 | 
			
		||||
  methods: {
 | 
			
		||||
    voteSubmit(myVote) {
 | 
			
		||||
      this.$http.post(`/app/appthreemeetinguser/voteMeetting?meetingId=${this.id}&myVote=${myVote}&userId=${this.user.id}`).then((res) => {
 | 
			
		||||
        if(res.code == 0) {
 | 
			
		||||
          this.$toast('投票成功')
 | 
			
		||||
          this.getDetailInfo()
 | 
			
		||||
        }
 | 
			
		||||
      }).catch((err) => {
 | 
			
		||||
        this.$toast(err)
 | 
			
		||||
      })
 | 
			
		||||
    },
 | 
			
		||||
    getDetailInfo() {
 | 
			
		||||
      this.$http.post(`/app/appthreemeetinginfo/queryDetailById?id=${this.id}`, null, {}).then(res => {
 | 
			
		||||
        if (res.data) {
 | 
			
		||||
          this.info = res.data
 | 
			
		||||
        }
 | 
			
		||||
      })
 | 
			
		||||
    },
 | 
			
		||||
  },
 | 
			
		||||
};
 | 
			
		||||
</script>
 | 
			
		||||
<style lang="scss" scope>
 | 
			
		||||
@import "../../../common/common.css";
 | 
			
		||||
 | 
			
		||||
.page {
 | 
			
		||||
  background-color: #F3F6F9;
 | 
			
		||||
  position: relative;
 | 
			
		||||
  width: 100%;
 | 
			
		||||
  overflow-x: hidden;
 | 
			
		||||
  .bg-img{
 | 
			
		||||
    width: 100%;
 | 
			
		||||
    height: 340px;
 | 
			
		||||
  }
 | 
			
		||||
  .title{
 | 
			
		||||
    width: 100%;
 | 
			
		||||
    height: 60px;
 | 
			
		||||
    font-size: 44px;
 | 
			
		||||
    font-family: PingFangSC-Semibold, PingFang SC;
 | 
			
		||||
    font-weight: 600;
 | 
			
		||||
    color: #FFF;
 | 
			
		||||
    line-height: 60px;
 | 
			
		||||
    position: absolute;
 | 
			
		||||
    top: 50px;
 | 
			
		||||
    left: 290px;
 | 
			
		||||
  }
 | 
			
		||||
  .content{
 | 
			
		||||
    position: absolute;
 | 
			
		||||
    top: 210px;
 | 
			
		||||
    left: 20px;
 | 
			
		||||
    width: 710px;
 | 
			
		||||
    background: #FFF;
 | 
			
		||||
    border-radius: 24px;
 | 
			
		||||
    padding: 100px 32px 172px;
 | 
			
		||||
    box-sizing: border-box;
 | 
			
		||||
    img{
 | 
			
		||||
      position: absolute;
 | 
			
		||||
      top: -60px;
 | 
			
		||||
      left: 310px;
 | 
			
		||||
      width: 120px;
 | 
			
		||||
      height: 120px;
 | 
			
		||||
    }
 | 
			
		||||
    div{
 | 
			
		||||
      font-size: 32px;
 | 
			
		||||
      font-family: PingFangSC-Medium, PingFang SC;
 | 
			
		||||
      font-weight: 500;
 | 
			
		||||
      color: #333;
 | 
			
		||||
      line-height: 44px;
 | 
			
		||||
      margin-bottom: 36px;
 | 
			
		||||
    }
 | 
			
		||||
    p{
 | 
			
		||||
      font-size: 28px;
 | 
			
		||||
      color: #333;
 | 
			
		||||
      line-height: 40px;
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
  .footer{
 | 
			
		||||
    display: flex;
 | 
			
		||||
    width: 100%;
 | 
			
		||||
    position: fixed;
 | 
			
		||||
    bottom: 0;
 | 
			
		||||
    left: 0;
 | 
			
		||||
    div{
 | 
			
		||||
      flex: 1;
 | 
			
		||||
      text-align: center;
 | 
			
		||||
      height: 112px;
 | 
			
		||||
      line-height: 112px;
 | 
			
		||||
    }
 | 
			
		||||
    .bg-gray{
 | 
			
		||||
      font-size: 36px;
 | 
			
		||||
      font-family: PingFangSC-Medium, PingFang SC;
 | 
			
		||||
      font-weight: 500;
 | 
			
		||||
      color: #999;
 | 
			
		||||
      background: #EAE9E9;
 | 
			
		||||
    }
 | 
			
		||||
    .bg-pink{
 | 
			
		||||
      font-size: 32px;
 | 
			
		||||
      font-family: PingFangSC-Regular, PingFang SC;
 | 
			
		||||
      font-weight: 400;
 | 
			
		||||
      color: #D73D3D;
 | 
			
		||||
      background: #FFE4DD;
 | 
			
		||||
    }
 | 
			
		||||
    .bg-red{
 | 
			
		||||
      font-size: 32px;
 | 
			
		||||
      font-family: PingFangSC-Regular, PingFang SC;
 | 
			
		||||
      font-weight: 400;
 | 
			
		||||
      color: #fff;
 | 
			
		||||
      background: #FE5A49;
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
</style>
 | 
			
		||||