人员组件完成
This commit is contained in:
		
							
								
								
									
										168
									
								
								src/apps/AppComponent/selectResident.vue
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										168
									
								
								src/apps/AppComponent/selectResident.vue
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,168 @@
 | 
			
		||||
<template>
 | 
			
		||||
  <div class="selectResident">
 | 
			
		||||
    <AiTopFixed>
 | 
			
		||||
      <u-search placeholder="搜索" v-model="name" :show-action="false"></u-search>
 | 
			
		||||
    </AiTopFixed>
 | 
			
		||||
    <div class="user-list">
 | 
			
		||||
      <div class="item" v-for="(item, index) in list" :key="index">
 | 
			
		||||
        <div class="select-img" @click="checkClick(index)">
 | 
			
		||||
          <img :src="item.isCheck ? checkIcon : cirIcon" alt="">
 | 
			
		||||
        </div>
 | 
			
		||||
        <div class="user-info">
 | 
			
		||||
          <img :src="item.photo" alt="" v-if="item.photo">
 | 
			
		||||
          <img src="../AppBuilding/components/img/user-img.png" alt="" v-else>{{ item.name }}
 | 
			
		||||
        </div>
 | 
			
		||||
      </div>
 | 
			
		||||
    </div>
 | 
			
		||||
    <div class="pad-b118"></div>
 | 
			
		||||
    <div class="footer">
 | 
			
		||||
      <div class="btn" @click="confirm">确定选择</div>
 | 
			
		||||
    </div>
 | 
			
		||||
  </div>
 | 
			
		||||
</template>
 | 
			
		||||
 | 
			
		||||
<script>
 | 
			
		||||
import {mapState} from 'vuex'
 | 
			
		||||
 | 
			
		||||
export default {
 | 
			
		||||
  name: "selectResident",
 | 
			
		||||
  appName: "人员选择器(居民档案)",
 | 
			
		||||
  data() {
 | 
			
		||||
    return {
 | 
			
		||||
      current: 1,
 | 
			
		||||
      name: '',
 | 
			
		||||
      list: [],
 | 
			
		||||
      cirIcon: require('../AppBuilding/components/img/cir-icon.png'),
 | 
			
		||||
      checkIcon: require('../AppBuilding/components/img/check-icon.png'),
 | 
			
		||||
      selected: []
 | 
			
		||||
    }
 | 
			
		||||
  },
 | 
			
		||||
  computed: {...mapState(['user'])},
 | 
			
		||||
  onLoad(query) {
 | 
			
		||||
    if (query.selected) {
 | 
			
		||||
      this.selected = query.selected?.split(",") || []
 | 
			
		||||
    }
 | 
			
		||||
    this.getList()
 | 
			
		||||
  },
 | 
			
		||||
  methods: {
 | 
			
		||||
    getList() {
 | 
			
		||||
      this.$http.post(`/app/appresident/list`, null, {
 | 
			
		||||
        params: {
 | 
			
		||||
          current: this.current,
 | 
			
		||||
          size: 20,
 | 
			
		||||
          areaId: this.user.areaId,
 | 
			
		||||
          con: this.name
 | 
			
		||||
        }
 | 
			
		||||
      }).then(res => {
 | 
			
		||||
        if (res?.data) {
 | 
			
		||||
          res.data.records.forEach(e => {
 | 
			
		||||
            e.isCheck = this.selected.includes(e.id)
 | 
			
		||||
          })
 | 
			
		||||
          if (this.current > 1 && this.current > res.data.pages) {
 | 
			
		||||
            return
 | 
			
		||||
          }
 | 
			
		||||
          this.list = this.current > 1 ? [...this.list, ...res.data.records] : res.data.records
 | 
			
		||||
        }
 | 
			
		||||
      })
 | 
			
		||||
    },
 | 
			
		||||
    checkClick(index) {
 | 
			
		||||
      this.list[index].isCheck = !this.list[index].isCheck
 | 
			
		||||
    },
 | 
			
		||||
    confirm() {
 | 
			
		||||
      let checkList = []
 | 
			
		||||
      this.list.map((item) => {
 | 
			
		||||
        if (item.isCheck) {
 | 
			
		||||
          checkList.push(item)
 | 
			
		||||
        }
 | 
			
		||||
      })
 | 
			
		||||
      if (!checkList.length) {
 | 
			
		||||
        return this.$u.toast('请先选择人员')
 | 
			
		||||
      } else {
 | 
			
		||||
        uni.navigateBack({
 | 
			
		||||
          success: () => {
 | 
			
		||||
            uni.$emit("pagePicker", checkList)
 | 
			
		||||
          }
 | 
			
		||||
        })
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  },
 | 
			
		||||
  onReachBottom() {
 | 
			
		||||
    this.current++
 | 
			
		||||
    this.getList()
 | 
			
		||||
  },
 | 
			
		||||
}
 | 
			
		||||
</script>
 | 
			
		||||
 | 
			
		||||
<style lang="scss" scoped>
 | 
			
		||||
.selectResident {
 | 
			
		||||
  ::v-deep .AiTopFixed .u-search {
 | 
			
		||||
    margin-bottom: 0 !important;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  .pad-b118 {
 | 
			
		||||
    padding-bottom: 118px;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  .user-list {
 | 
			
		||||
    background-color: #fff;
 | 
			
		||||
 | 
			
		||||
    .item {
 | 
			
		||||
      .select-img {
 | 
			
		||||
        display: inline-block;
 | 
			
		||||
 | 
			
		||||
        img {
 | 
			
		||||
          width: 48px;
 | 
			
		||||
          height: 48px;
 | 
			
		||||
          margin: 12px 36px 12px 30px;
 | 
			
		||||
          vertical-align: middle;
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      .user-info {
 | 
			
		||||
        display: inline-block;
 | 
			
		||||
        padding: 20px 0 20px 0;
 | 
			
		||||
        width: calc(100% - 114px);
 | 
			
		||||
        height: 100%;
 | 
			
		||||
        border-bottom: 1px solid #E4E5E6;
 | 
			
		||||
        font-size: 36px;
 | 
			
		||||
        font-family: PingFangSC-Medium, PingFang SC;
 | 
			
		||||
        font-weight: 500;
 | 
			
		||||
        color: #333;
 | 
			
		||||
        line-height: 74px;
 | 
			
		||||
 | 
			
		||||
        img {
 | 
			
		||||
          width: 74px;
 | 
			
		||||
          height: 74px;
 | 
			
		||||
          border-radius: 8px;
 | 
			
		||||
          margin-right: 34px;
 | 
			
		||||
          vertical-align: bottom;
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  .footer {
 | 
			
		||||
    width: 100%;
 | 
			
		||||
    height: 118px;
 | 
			
		||||
    background: #F4F8FB;
 | 
			
		||||
    position: fixed;
 | 
			
		||||
    left: 0;
 | 
			
		||||
    bottom: 0;
 | 
			
		||||
    text-align: right;
 | 
			
		||||
 | 
			
		||||
    .btn {
 | 
			
		||||
      display: inline-block;
 | 
			
		||||
      width: 192px;
 | 
			
		||||
      height: 80px;
 | 
			
		||||
      line-height: 80px;
 | 
			
		||||
      background: #1365DD;
 | 
			
		||||
      border-radius: 4px;
 | 
			
		||||
      text-align: center;
 | 
			
		||||
      font-size: 32px;
 | 
			
		||||
      font-family: PingFangSC-Regular, PingFang SC;
 | 
			
		||||
      color: #FFF;
 | 
			
		||||
      margin: 20px 34px 0 0;
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
</style>
 | 
			
		||||
		Reference in New Issue
	
	Block a user