Merge branch 'dev' of http://git.sinoecare.com/sinoecare/digital_village_v2/dvcp_v2_wechat_app into dev
This commit is contained in:
		@@ -49,7 +49,7 @@
 | 
			
		||||
            </div>
 | 
			
		||||
          </div>
 | 
			
		||||
        </div>
 | 
			
		||||
        <div class="form-item">
 | 
			
		||||
        <!-- <div class="form-item">
 | 
			
		||||
          <div class="form-item__wrapper">
 | 
			
		||||
            <div class="form-item__title">
 | 
			
		||||
              <i>*</i>
 | 
			
		||||
@@ -70,7 +70,7 @@
 | 
			
		||||
              <AiSelect v-model="form.highRiskIndustries" dict="EP_highRiskIndustries" class="select"></AiSelect>
 | 
			
		||||
            </div>
 | 
			
		||||
          </div>
 | 
			
		||||
        </div>
 | 
			
		||||
        </div> -->
 | 
			
		||||
      </div>
 | 
			
		||||
 | 
			
		||||
      <!-- 行程信息 -->
 | 
			
		||||
@@ -311,6 +311,7 @@
 | 
			
		||||
<script>
 | 
			
		||||
import { mapState, mapActions } from 'vuex'
 | 
			
		||||
import NamePhone from './components/namePhone.vue'
 | 
			
		||||
import dayjs from 'dayjs'
 | 
			
		||||
export default {
 | 
			
		||||
  appName: "添加卡口记录",
 | 
			
		||||
  data() {
 | 
			
		||||
@@ -322,8 +323,8 @@ export default {
 | 
			
		||||
        phone: '',  
 | 
			
		||||
        name: '',
 | 
			
		||||
        idNumber: '',
 | 
			
		||||
        type: '', // 人员类别
 | 
			
		||||
        highRiskIndustries: '',
 | 
			
		||||
        // type: '', // 人员类别
 | 
			
		||||
        // highRiskIndustries: '',
 | 
			
		||||
        startTime: '',
 | 
			
		||||
        startAreaId: '',
 | 
			
		||||
        startAreaName: '',
 | 
			
		||||
@@ -335,11 +336,11 @@ export default {
 | 
			
		||||
        arriveAreaId: '',
 | 
			
		||||
        arriveAreaName: '',
 | 
			
		||||
        arriveAddress: '',
 | 
			
		||||
        fromHighRiskArea: '',
 | 
			
		||||
        fromHighRiskArea: '0',
 | 
			
		||||
        highRiskAreaId: '',
 | 
			
		||||
        highRiskAreaName: '',
 | 
			
		||||
        contactPatients: '',
 | 
			
		||||
        abnormalHealth: '',
 | 
			
		||||
        contactPatients: '0',
 | 
			
		||||
        abnormalHealth: '0',
 | 
			
		||||
        abnormalType: '',
 | 
			
		||||
        companionCount: '',  // 同行人数量
 | 
			
		||||
        companionList: [],  // 同行人集合
 | 
			
		||||
@@ -388,6 +389,8 @@ export default {
 | 
			
		||||
    if(decodeURIComponent(o.scene) != 'undefined') {
 | 
			
		||||
      this.scene = decodeURIComponent(o.scene)
 | 
			
		||||
    }
 | 
			
		||||
    let timeNow = dayjs(new Date()).format("YYYY-MM-DD HH:mm:ss");
 | 
			
		||||
    this.form.arriveTime = timeNow.substr(0,timeNow.length - 3)
 | 
			
		||||
  },
 | 
			
		||||
  onShow() {
 | 
			
		||||
    this.$dict.load(['EP_travelType']).then(()=> {
 | 
			
		||||
@@ -422,19 +425,16 @@ export default {
 | 
			
		||||
    ...mapActions(['getUserInfo']),
 | 
			
		||||
    // 授权登录
 | 
			
		||||
    getAuth() {
 | 
			
		||||
      
 | 
			
		||||
      this.$nextTick(() => {
 | 
			
		||||
        // if(this.token) {
 | 
			
		||||
          this.token && this.getUserInfo()
 | 
			
		||||
          this.form.gatewayId = this.scene
 | 
			
		||||
          this.getewayList()
 | 
			
		||||
          this.$forceUpdate()
 | 
			
		||||
          setTimeout(()=>{
 | 
			
		||||
            let item = this.getewayData.filter(item=> item.value == this.scene)
 | 
			
		||||
            this.form.gatewayName = item?.[0].label
 | 
			
		||||
          },400)
 | 
			
		||||
          this.pageShow = true
 | 
			
		||||
        // } 
 | 
			
		||||
        this.token && this.getUserInfo()
 | 
			
		||||
        this.form.gatewayId = this.scene
 | 
			
		||||
        this.getewayList()
 | 
			
		||||
        this.$forceUpdate()
 | 
			
		||||
        setTimeout(()=>{
 | 
			
		||||
          let item = this.getewayData.filter(item=> item.value == this.scene)
 | 
			
		||||
          this.form.gatewayName = item?.[0].label
 | 
			
		||||
        },400)
 | 
			
		||||
        this.pageShow = true
 | 
			
		||||
      })
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
@@ -475,7 +475,7 @@ export default {
 | 
			
		||||
          this.form.startTime = res.data.startTime.substr(0, res.data.startTime.length - 3)
 | 
			
		||||
          this.form.arriveTime = res.data.arriveTime.substr(0, res.data.arriveTime.length - 3)
 | 
			
		||||
          this.startAreaId = res.data.startAreaId
 | 
			
		||||
          this.arriveAreaName = res.data.startAreaName
 | 
			
		||||
          this.startAreaName = res.data.startAreaName
 | 
			
		||||
        }
 | 
			
		||||
        this.$hideLoading()
 | 
			
		||||
      })
 | 
			
		||||
@@ -523,6 +523,11 @@ export default {
 | 
			
		||||
        if(res?.data) {
 | 
			
		||||
          this.form.name = res.data.name || ''
 | 
			
		||||
          this.form.phone = res.data.phone || ''
 | 
			
		||||
          this.startAreaId = res.data.startAreaId
 | 
			
		||||
          this.startAreaName = res.data.startAreaName
 | 
			
		||||
          this.form.description = res.data.description || ''
 | 
			
		||||
          this.form.arriveAreaId = res.data.arriveAreaId
 | 
			
		||||
          this.form.arriveAreaName = res.data.arriveAreaName
 | 
			
		||||
        }
 | 
			
		||||
      })
 | 
			
		||||
    },
 | 
			
		||||
@@ -549,13 +554,13 @@ export default {
 | 
			
		||||
        return this.$toast('请输入姓名')
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      if (!this.form.highRiskIndustries) {
 | 
			
		||||
        return this.$toast('请选择高危行业')
 | 
			
		||||
      }
 | 
			
		||||
      // if (!this.form.highRiskIndustries) {
 | 
			
		||||
      //   return this.$toast('请选择高危行业')
 | 
			
		||||
      // }
 | 
			
		||||
 | 
			
		||||
      if (!this.form.type) {
 | 
			
		||||
        return this.$toast('请选择人员类别')
 | 
			
		||||
      }
 | 
			
		||||
      // if (!this.form.type) {
 | 
			
		||||
      //   return this.$toast('请选择人员类别')
 | 
			
		||||
      // }
 | 
			
		||||
      
 | 
			
		||||
      if (!this.form.startTime) {
 | 
			
		||||
        return this.$toast('请选择出发时间')
 | 
			
		||||
 
 | 
			
		||||
@@ -48,22 +48,22 @@
 | 
			
		||||
          <span style="color: #4181FF">{{ info.phone }}</span>
 | 
			
		||||
        </div>
 | 
			
		||||
      </div>
 | 
			
		||||
      <div class="detail-info__item">
 | 
			
		||||
      <!-- <div class="detail-info__item">
 | 
			
		||||
        <div class="left">
 | 
			
		||||
          <label>人员类别</label>
 | 
			
		||||
        </div>
 | 
			
		||||
        <div class="right">
 | 
			
		||||
          <span>{{ $dict.getLabel('EP_registerPersonType', info.type) }}</span>
 | 
			
		||||
        </div>
 | 
			
		||||
      </div>
 | 
			
		||||
      <div class="detail-info__item">
 | 
			
		||||
      </div> -->
 | 
			
		||||
      <!-- <div class="detail-info__item">
 | 
			
		||||
        <div class="left">
 | 
			
		||||
          <label>高危行业</label>
 | 
			
		||||
        </div>
 | 
			
		||||
        <div class="right">
 | 
			
		||||
          <span>{{ $dict.getLabel('EP_highRiskIndustries', info.highRiskIndustries) }}</span>
 | 
			
		||||
        </div>
 | 
			
		||||
      </div>
 | 
			
		||||
      </div> -->
 | 
			
		||||
    </div>
 | 
			
		||||
    <div class="detail-info">
 | 
			
		||||
      <h2>行程信息</h2>
 | 
			
		||||
 
 | 
			
		||||
@@ -11,7 +11,6 @@
 | 
			
		||||
               :custom-style="{height:'72px'}" v-model="idNumber" maxlength="18"/>
 | 
			
		||||
    </div>
 | 
			
		||||
    <div class="btn" @click="confirm()">提交</div>
 | 
			
		||||
    <!-- <div class="promise">以上信息将为你严格保密</div> -->
 | 
			
		||||
    <div class="bottom-text">
 | 
			
		||||
      <u-checkbox v-model="isChecked"></u-checkbox>
 | 
			
		||||
      <span @click="isChecked=!isChecked">阅读并同意</span>
 | 
			
		||||
@@ -35,15 +34,15 @@ export default {
 | 
			
		||||
      isChecked: false,
 | 
			
		||||
    };
 | 
			
		||||
  },
 | 
			
		||||
  onLoad() {
 | 
			
		||||
    // 0未认证 1认证中 2已认证 3认证失败
 | 
			
		||||
    let {partyStatusForWX} = this.user
 | 
			
		||||
    if (partyStatusForWX == 2) {
 | 
			
		||||
      uni.redirectTo({url: "./partyAuthInfo"})
 | 
			
		||||
    } else if (partyStatusForWX == 0) {
 | 
			
		||||
  onShow() {
 | 
			
		||||
    // 0未认证  1认证中  2已认证  3认证失败
 | 
			
		||||
    let { partyStatusForWX } = this.user
 | 
			
		||||
    if (partyStatusForWX == 0) {
 | 
			
		||||
      // 停留此页
 | 
			
		||||
    } else if(partyStatusForWX == 1) {
 | 
			
		||||
      uni.redirectTo({url: "./partyAuthSuccess"})
 | 
			
		||||
    } else if (partyStatusForWX == 2) {
 | 
			
		||||
      uni.redirectTo({url: "./partyAuthInfo"})
 | 
			
		||||
    } else if(partyStatusForWX == 3) {
 | 
			
		||||
      uni.redirectTo({url: "./partyAuthSuccess"})
 | 
			
		||||
    }
 | 
			
		||||
@@ -60,26 +59,19 @@ export default {
 | 
			
		||||
      if (!idNumber) {
 | 
			
		||||
        return this.$u.toast('请填写身份证号码')
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      if (!this.$idCardNoUtil.checkIdCardNo(idNumber)) {
 | 
			
		||||
        return this.$u.toast('请输入正确的身份证号码')
 | 
			
		||||
      }
 | 
			
		||||
      if(!this.isChecked) {
 | 
			
		||||
        return this.$u.toast('请勾选用户服务及隐私协议')
 | 
			
		||||
      }
 | 
			
		||||
      this.$instance.post(`/app/appwechatuser/idNumberAttestation`, {
 | 
			
		||||
      this.$instance.post(`/app/appwechatuser/partyIdentification`, {
 | 
			
		||||
        idNumber, name
 | 
			
		||||
      }).then(res => {
 | 
			
		||||
        if (res.code == 0) {
 | 
			
		||||
          this.$store.dispatch('getUserInfo')
 | 
			
		||||
          if (res.data == 2 || res.data == 0) {
 | 
			
		||||
            this.$store.dispatch('getUserInfo')
 | 
			
		||||
            uni.redirectTo({
 | 
			
		||||
              url: `./partyAuthSuccess?status=${res.data}`, success: () => {
 | 
			
		||||
                if (res.data == 0) {
 | 
			
		||||
                  uni.setStorageSync("authForm", {idNumber, name})
 | 
			
		||||
                }
 | 
			
		||||
              }
 | 
			
		||||
            })
 | 
			
		||||
            uni.redirectTo({url: `./partyAuthApply`})
 | 
			
		||||
          } else {
 | 
			
		||||
            uni.redirectTo({url: "./partyAuthSuccess"})
 | 
			
		||||
          }
 | 
			
		||||
 
 | 
			
		||||
@@ -31,7 +31,7 @@
 | 
			
		||||
            <h2>手机号码</h2>
 | 
			
		||||
          </div>
 | 
			
		||||
          <div class="form-item__right">
 | 
			
		||||
            <input placeholder="请输入" v-model="form.idNumber" :maxlength="11"/>
 | 
			
		||||
            <input placeholder="请输入" v-model="form.phone" :maxlength="11"/>
 | 
			
		||||
          </div>
 | 
			
		||||
        </div>
 | 
			
		||||
      </div>
 | 
			
		||||
@@ -42,7 +42,9 @@
 | 
			
		||||
            <h2>党组织</h2>
 | 
			
		||||
          </div>
 | 
			
		||||
          <div class="form-item__right">
 | 
			
		||||
            <input placeholder="请输入" v-model="form.idNumber" :maxlength="50"/>
 | 
			
		||||
            <AiPagePicker type="custom" @select="handleSelectParty" :ops="{url:`./selectPartyOrg?id=${form.partyOrgId}`,label:'name',}">
 | 
			
		||||
              <AiMore v-model="form.partyOrgName"/>
 | 
			
		||||
            </AiPagePicker>
 | 
			
		||||
          </div>
 | 
			
		||||
        </div>
 | 
			
		||||
      </div>
 | 
			
		||||
@@ -55,7 +57,7 @@
 | 
			
		||||
          <div class="form-item__right">
 | 
			
		||||
            <div class="ai-area" @click="isShowDate = true">
 | 
			
		||||
              <div class="ai-area__wrapper">
 | 
			
		||||
                <span class="label" v-if="form.nucleicAcidDate">{{ form.nucleicAcidDate }}</span>
 | 
			
		||||
                <span class="label" v-if="form.joinPartyTime">{{ form.joinPartyTime }}</span>
 | 
			
		||||
                <i v-else>请选择</i>
 | 
			
		||||
                <u-icon name="arrow-right" color="#ddd"/>
 | 
			
		||||
              </div>
 | 
			
		||||
@@ -70,7 +72,7 @@
 | 
			
		||||
            <h2>党员类型</h2>
 | 
			
		||||
          </div>
 | 
			
		||||
          <div class="form-item__right">
 | 
			
		||||
            <input placeholder="请输入" v-model="form.idNumber" disabled :maxlength="20"/>
 | 
			
		||||
            <AiSelect dict="partyType" v-model="form.partyType"></AiSelect>
 | 
			
		||||
          </div>
 | 
			
		||||
        </div>
 | 
			
		||||
      </div>
 | 
			
		||||
@@ -100,6 +102,12 @@ export default {
 | 
			
		||||
      form: {
 | 
			
		||||
        name: '',
 | 
			
		||||
        idNumber: '',
 | 
			
		||||
        phone: '',
 | 
			
		||||
        partyOrgId: '',
 | 
			
		||||
        partyOrgName: '',
 | 
			
		||||
        joinPartyTime: '',
 | 
			
		||||
        partyType: '',
 | 
			
		||||
        partyStatus: '0',
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  },
 | 
			
		||||
@@ -109,73 +117,71 @@ export default {
 | 
			
		||||
    ...mapState(['user'])
 | 
			
		||||
  },
 | 
			
		||||
 | 
			
		||||
  onLoad(query) {
 | 
			
		||||
    this.$dict.load(['epidemicTouchInFourteen','EP_healthType','EP_nucleicAcidResult','EP_jkmType','EP_vaccinationCount']).then(()=> {
 | 
			
		||||
      this.form.reportUserId = query.id
 | 
			
		||||
      this.form.name = query.name
 | 
			
		||||
      this.form.idNumber = query.idNumber
 | 
			
		||||
    })
 | 
			
		||||
  onLoad() {
 | 
			
		||||
    uni.setNavigationBarTitle({
 | 
			
		||||
      title: '申请党员'
 | 
			
		||||
    });
 | 
			
		||||
    if(this.user.partyId.length > 0) {
 | 
			
		||||
      this.getDetail()
 | 
			
		||||
    }
 | 
			
		||||
  },
 | 
			
		||||
 | 
			
		||||
  methods: {
 | 
			
		||||
    onDateChange(e) {
 | 
			
		||||
      this.form.nucleicAcidDate = `${e.year}-${e.month}-${e.day}`
 | 
			
		||||
      this.form.joinPartyTime = `${e.year}-${e.month}-${e.day}`
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    handleSelectParty(v) {
 | 
			
		||||
      this.form.partyOrgId = v.id
 | 
			
		||||
      this.form.partyOrgName = v.name
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    getDetail() {
 | 
			
		||||
      this.$instance.post(`/app/appparty/detail?id=${this.user.partyId}`).then(res=> {
 | 
			
		||||
        if(res?.data) {
 | 
			
		||||
          this.form = {...res.data}
 | 
			
		||||
        }
 | 
			
		||||
      })
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    submit() {
 | 
			
		||||
 | 
			
		||||
      if (!this.form.temperature) {
 | 
			
		||||
        return this.$toast('请输入当前体温')
 | 
			
		||||
      if (!this.form.name) {
 | 
			
		||||
        return this.$toast('请输入党员姓名')
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      if (!this.form.contactPatients) {
 | 
			
		||||
        return this.$toast('请选择14天内是否接触新冠确诊或疑似患者')
 | 
			
		||||
      if (!this.form.idNumber) {
 | 
			
		||||
        return this.$toast('身份证号')
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      if (!this.form.healthList.length) {
 | 
			
		||||
        return this.$toast('请选择当前健康状况')
 | 
			
		||||
      } else {
 | 
			
		||||
        this.form.health = this.form.healthList.toString()
 | 
			
		||||
      if (!this.form.phone.length) {
 | 
			
		||||
        return this.$toast('请输入手机号')
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      if(!this.form.nucleicAcidDate) {
 | 
			
		||||
        return this.$toast('请选择核酸检测日期')
 | 
			
		||||
      if(!this.form.partyOrgId) {
 | 
			
		||||
        return this.$toast('请选择党组织')
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      if (!this.form.nucleicAcidResult) {
 | 
			
		||||
        return this.$toast('请选择核酸检测结果')
 | 
			
		||||
      if(!this.form.joinPartyTime) {
 | 
			
		||||
        return this.$toast('请选择入党时间')
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      if (!this.form.jkmType) {
 | 
			
		||||
        return this.$toast('请选择健康码类型')
 | 
			
		||||
      if(!this.form.partyType) {
 | 
			
		||||
        return this.$toast('请选择党员类型')
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      if (!this.form.vaccinationCount) {
 | 
			
		||||
        return this.$toast('请选择已接种疫苗次数')
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      if (!this.form.jkmUrlArr.length) {
 | 
			
		||||
        return this.$toast('请上传健康码截图')
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      if (!this.form.nucleicAcidUrlArr.length) {
 | 
			
		||||
        return this.$toast('请上核酸检测结果截图')
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
      this.$loading()
 | 
			
		||||
      this.$instance.post(`/app/appepidemicpreventionhealthreportinfo/addReportInfo`, {
 | 
			
		||||
      this.$instance.post(`/app/appparty/addOrUpdateForWX`, {
 | 
			
		||||
        ...this.form,
 | 
			
		||||
        jkmUrl: this.form.jkmUrlArr[0].url,
 | 
			
		||||
        nucleicAcidUrl: this.form.nucleicAcidUrlArr[0].url,
 | 
			
		||||
        nucleicAcidDate: this.form.nucleicAcidDate + ' 00:00:00'
 | 
			
		||||
      }).then(res => {
 | 
			
		||||
        if (res.code == 0) {
 | 
			
		||||
          uni.$emit('update')
 | 
			
		||||
          this.$toast('提交成功')
 | 
			
		||||
          this.$store.dispatch('getUserInfo')
 | 
			
		||||
          uni.clearStorageSync('lastSelectedParty');
 | 
			
		||||
          setTimeout(() => {
 | 
			
		||||
            uni.navigateBack()
 | 
			
		||||
          }, 400)
 | 
			
		||||
            uni.redirectTo({url: "./partyAuthSuccess"})
 | 
			
		||||
          }, 500)
 | 
			
		||||
        }
 | 
			
		||||
        this.$hideLoading()
 | 
			
		||||
      })
 | 
			
		||||
 
 | 
			
		||||
@@ -7,9 +7,9 @@
 | 
			
		||||
      <div class="flex fill">
 | 
			
		||||
        <div class="fill">
 | 
			
		||||
          <b v-text="user.realName"/>
 | 
			
		||||
          <div class="color-999" v-text="sexAge"/>
 | 
			
		||||
          <div class="color-999">{{ $dict.getLabel('sex', detail.sex) }} {{detail.age}}</div>
 | 
			
		||||
        </div>
 | 
			
		||||
        <div class="blue" v-if="isOwner">户主</div>
 | 
			
		||||
        <!-- <div class="blue" v-if="isOwner">户主</div> -->
 | 
			
		||||
      </div>
 | 
			
		||||
    </div>
 | 
			
		||||
    <div class="card">
 | 
			
		||||
@@ -20,18 +20,18 @@
 | 
			
		||||
        <div v-else v-text="detail[row.prop]||'-'"/>
 | 
			
		||||
      </view>
 | 
			
		||||
    </div>
 | 
			
		||||
    <div class="card">
 | 
			
		||||
    <!-- <div class="card">
 | 
			
		||||
      <b class="title" v-text="`联络方式`"/>
 | 
			
		||||
      <view class="item" :class="{spb:!row.topLabel,flex:!row.topLabel}" v-for="row in contract" :key="row.prop">
 | 
			
		||||
        <span class="color-999" v-text="row.label"/>
 | 
			
		||||
        <div v-text="detail[row.prop]||'-'"/>
 | 
			
		||||
      </view>
 | 
			
		||||
    </div>
 | 
			
		||||
    <div class="fixed-bottom">
 | 
			
		||||
    </div> -->
 | 
			
		||||
    <!-- <div class="fixed-bottom">
 | 
			
		||||
      <u-button type="primary" @click="apply">
 | 
			
		||||
        <text style="font-size: 16px" v-text="`申请修改`"/>
 | 
			
		||||
      </u-button>
 | 
			
		||||
    </div>
 | 
			
		||||
    </div> -->
 | 
			
		||||
  </section>
 | 
			
		||||
</template>
 | 
			
		||||
 | 
			
		||||
@@ -44,45 +44,41 @@ export default {
 | 
			
		||||
    return {
 | 
			
		||||
      detail: {},
 | 
			
		||||
      baseInfo: [
 | 
			
		||||
        // {label: "年龄", prop: "age"},
 | 
			
		||||
        {label: "身份证号", prop: "idNumber"},
 | 
			
		||||
        {label: "籍贯", prop: "birthplaceAreaName"},
 | 
			
		||||
        {label: "民族", prop: "nation", dict: "nation"},
 | 
			
		||||
        {label: "文化程度", prop: "education", dict: "education"},
 | 
			
		||||
        {label: "政治面貌", prop: "politicsStatus", dict: "politicsStatus"},
 | 
			
		||||
        {label: "兵役状况", prop: "militaryStatus", dict: "militaryStatus"},
 | 
			
		||||
        {label: "宗教信仰", prop: "faithType", dict: "faithType"},
 | 
			
		||||
        {label: "职业", prop: "job", dict: "job"},
 | 
			
		||||
      ],
 | 
			
		||||
      contract: [
 | 
			
		||||
        {label: "联系方式", prop: "phone"},
 | 
			
		||||
        {label: "现住址", prop: "currentAreaName"},
 | 
			
		||||
        {label: "详细住址", prop: "currentAddress", topLabel: true},
 | 
			
		||||
        {label: "户籍地址", prop: "householdAreaName"},
 | 
			
		||||
        {label: "详细地址", prop: "householdAddress", topLabel: true},
 | 
			
		||||
      ]
 | 
			
		||||
        {label: "党组织", prop: "partyOrgName"},
 | 
			
		||||
        {label: "入党时间", prop: "joinPartyTime"},
 | 
			
		||||
        {label: "党员类型", prop: "partyType", dict: "partyType"},
 | 
			
		||||
      ],
 | 
			
		||||
      // contract: [
 | 
			
		||||
      //   {label: "联系方式", prop: "phone"},
 | 
			
		||||
      //   {label: "现住址", prop: "currentAreaName"},
 | 
			
		||||
      //   {label: "详细住址", prop: "currentAddress", topLabel: true},
 | 
			
		||||
      //   {label: "户籍地址", prop: "householdAreaName"},
 | 
			
		||||
      //   {label: "详细地址", prop: "householdAddress", topLabel: true},
 | 
			
		||||
      // ]
 | 
			
		||||
    }
 | 
			
		||||
  },
 | 
			
		||||
  computed: {
 | 
			
		||||
    ...mapState(['user']),
 | 
			
		||||
    sexAge() {
 | 
			
		||||
      let {idNumber, gender} = this.$idCardNoUtil.getIdCardInfo(this.user.idNumber), age = this.$calcAge(idNumber)
 | 
			
		||||
      return `${this.$dict.getLabel("sex", gender) || ""} ${age ? age + "岁" : ""}`
 | 
			
		||||
    },
 | 
			
		||||
    isOwner() {
 | 
			
		||||
      return this.detail.householdName == 1
 | 
			
		||||
    }
 | 
			
		||||
    // sexAge() {
 | 
			
		||||
    //   let {idNumber, gender} = this.$idCardNoUtil.getIdCardInfo(this.user.idNumber), age = this.$calcAge(idNumber)
 | 
			
		||||
    //   return `${this.$dict.getLabel("sex", gender) || ""} ${age ? age + "岁" : ""}`
 | 
			
		||||
    // },
 | 
			
		||||
    // isOwner() {
 | 
			
		||||
    //   return this.detail.householdName == 1
 | 
			
		||||
    // }
 | 
			
		||||
  },
 | 
			
		||||
  onLoad() {
 | 
			
		||||
    this.$dict.load("sex", "nation", "education", "politicsStatus", "militaryStatus", "faithType", "job")
 | 
			
		||||
    this.getResident()
 | 
			
		||||
    this.$dict.load('partyType','sex')
 | 
			
		||||
    this.getDetail()
 | 
			
		||||
  },
 | 
			
		||||
  methods: {
 | 
			
		||||
    getResident() {
 | 
			
		||||
      this.$instance.post("/app/appresident/detailForWx", null, {
 | 
			
		||||
        params: {id: this.user.residentId}
 | 
			
		||||
      }).then(res => {
 | 
			
		||||
        if (res?.data) {
 | 
			
		||||
          this.detail = res.data.resident
 | 
			
		||||
    getDetail() {
 | 
			
		||||
      this.$instance.post(`/app/appparty/detail?id=${this.user.partyId}`).then(res=> {
 | 
			
		||||
        if(res?.data) {
 | 
			
		||||
          this.detail = res.data
 | 
			
		||||
        }
 | 
			
		||||
      })
 | 
			
		||||
    },
 | 
			
		||||
@@ -97,7 +93,6 @@ export default {
 | 
			
		||||
.partyAuthInfo {
 | 
			
		||||
  background: #F3F6F9;
 | 
			
		||||
  min-height: 100vh;
 | 
			
		||||
  padding-bottom: 280px;
 | 
			
		||||
 | 
			
		||||
  .avatar {
 | 
			
		||||
    display: inline-block;
 | 
			
		||||
 
 | 
			
		||||
@@ -9,7 +9,7 @@
 | 
			
		||||
      <image src="https://cdn.cunwuyun.cn/pingchang/fail.png"/>
 | 
			
		||||
      <h2 v-text="`党员认证审核未通过!`"/>
 | 
			
		||||
      <div class="feedback">
 | 
			
		||||
        审核意见:{{}}
 | 
			
		||||
        审核意见:{{details.auditOpinion}}
 | 
			
		||||
      </div>
 | 
			
		||||
      <div class="btn" @click="rewrite">重新提交</div>
 | 
			
		||||
    </template>
 | 
			
		||||
@@ -26,7 +26,7 @@ import {mapState} from "vuex";
 | 
			
		||||
export default {
 | 
			
		||||
  data() {
 | 
			
		||||
    return {
 | 
			
		||||
      info: {}
 | 
			
		||||
      details: {}
 | 
			
		||||
    }
 | 
			
		||||
  },
 | 
			
		||||
  computed: {
 | 
			
		||||
@@ -39,34 +39,16 @@ export default {
 | 
			
		||||
      return this.user.partyStatusForWX == 3
 | 
			
		||||
    },
 | 
			
		||||
    isReview() {
 | 
			
		||||
      return this.user.partyStatusForWX == 0
 | 
			
		||||
      return this.user.partyStatusForWX == 1
 | 
			
		||||
    },
 | 
			
		||||
  },
 | 
			
		||||
  onShow() {
 | 
			
		||||
    // let titles = ''
 | 
			
		||||
    // if(this.user.partyStatusForWX == 1){
 | 
			
		||||
    //   titles = '认证中'
 | 
			
		||||
    // } else if(this.user.partyStatusForWX == 2) {
 | 
			
		||||
    //   titles = '认证成功'
 | 
			
		||||
    // } else if(this.user.partyStatusForWX == 3) {
 | 
			
		||||
    //   titles = '认证失败'
 | 
			
		||||
    // }
 | 
			
		||||
    uni.setNavigationBarTitle({
 | 
			
		||||
      title: '党员认证'
 | 
			
		||||
    });
 | 
			
		||||
  },
 | 
			
		||||
  onLoad() {
 | 
			
		||||
    let title = ''
 | 
			
		||||
    if(this.user.partyStatusForWX == 1){
 | 
			
		||||
      title = '认证中'
 | 
			
		||||
    } else if(this.user.partyStatusForWX == 2) {
 | 
			
		||||
      title = '认证成功'
 | 
			
		||||
    } else if(this.user.partyStatusForWX == 3) {
 | 
			
		||||
      title = '认证失败'
 | 
			
		||||
    if(this.user.partyStatusForWX == 3) {
 | 
			
		||||
      this.getDetail()
 | 
			
		||||
    }
 | 
			
		||||
    uni.setNavigationBarTitle({
 | 
			
		||||
      title: title
 | 
			
		||||
    });
 | 
			
		||||
  },
 | 
			
		||||
  methods: {
 | 
			
		||||
    rewrite() {
 | 
			
		||||
@@ -75,15 +57,13 @@ export default {
 | 
			
		||||
    goBack() {
 | 
			
		||||
      uni.navigateBack({})
 | 
			
		||||
    },
 | 
			
		||||
    getAuthResult() {
 | 
			
		||||
      this.$instance.post(`/app/appresident/detailForWx`, null, {
 | 
			
		||||
        params: {id: this.user.residentId}
 | 
			
		||||
      }).then(res => {
 | 
			
		||||
        if (res?.data) {
 | 
			
		||||
          this.info = res.data
 | 
			
		||||
    getDetail() {
 | 
			
		||||
      this.$instance.post(`/app/appparty/detail?id=${this.user.partyId}`).then(res=> {
 | 
			
		||||
        if(res?.data) {
 | 
			
		||||
          this.details = res.data
 | 
			
		||||
        }
 | 
			
		||||
      })
 | 
			
		||||
    }
 | 
			
		||||
    },
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
</script>
 | 
			
		||||
@@ -113,8 +93,10 @@ export default {
 | 
			
		||||
 | 
			
		||||
  .feedback {
 | 
			
		||||
    width: 80vw;
 | 
			
		||||
    margin-left: 10vw;
 | 
			
		||||
    margin: 0 auto;
 | 
			
		||||
    min-height: 192px;
 | 
			
		||||
    max-height: 600px;
 | 
			
		||||
    overflow-y: scroll;
 | 
			
		||||
    background: #EFF5FA;
 | 
			
		||||
    border-radius: 0 8px 8px 0;
 | 
			
		||||
    text-align: left;
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										234
									
								
								src/project/pingchang/AppPartyAuth/selectPartyOrg.vue
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										234
									
								
								src/project/pingchang/AppPartyAuth/selectPartyOrg.vue
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,234 @@
 | 
			
		||||
<template>
 | 
			
		||||
  <div class="selectPartyOrg">
 | 
			
		||||
    <div class="header-middle">
 | 
			
		||||
      <div class="hint">
 | 
			
		||||
        <span v-for="(item, index) in slectList" :key="index">
 | 
			
		||||
          <span v-if="index" style="margin:0 4px;" v-text="`/`"/>
 | 
			
		||||
          <span style="color:#3F8DF5" @click="partyNameClick(item, index)" v-text="item.name"/>
 | 
			
		||||
        </span>
 | 
			
		||||
      </div>
 | 
			
		||||
      <div class="showTypes">
 | 
			
		||||
        <div>
 | 
			
		||||
          <div class="cards" v-for="(item, index) in treeList" :key="index" @click="itemClick(item)">
 | 
			
		||||
            <div class="imges">
 | 
			
		||||
              <img src="https://cdn.cunwuyun.cn/pingchang/xzh.png" alt="" class="imgselect" v-if="item.isChecked"
 | 
			
		||||
                   @click.stop="partyClick(item, index)"/>
 | 
			
		||||
              <img src="https://cdn.cunwuyun.cn/pingchang/xz.png" alt="" class="imgselect" v-else @click.stop="partyClick(item, index)"/>
 | 
			
		||||
            </div>
 | 
			
		||||
            <div class="rightes fill">
 | 
			
		||||
              <div class="applicationNames fill">{{ item.name }}</div>
 | 
			
		||||
              <u-icon v-if="item.hasChildren" @click="itemClick(item)" name="arrow-right" color="#ddd"/>
 | 
			
		||||
            </div>
 | 
			
		||||
          </div>
 | 
			
		||||
        </div>
 | 
			
		||||
      </div>
 | 
			
		||||
    </div>
 | 
			
		||||
    <div class="subBtn" @click="submit">
 | 
			
		||||
      <div>确定选择</div>
 | 
			
		||||
    </div>
 | 
			
		||||
  </div>
 | 
			
		||||
</template>
 | 
			
		||||
 | 
			
		||||
<script>
 | 
			
		||||
  export default {
 | 
			
		||||
    name: 'selectPartyOrg',
 | 
			
		||||
    data() {
 | 
			
		||||
      return {
 | 
			
		||||
        SelectParty: {},
 | 
			
		||||
        allData: null,
 | 
			
		||||
        treeList: [],
 | 
			
		||||
        slectList: [],
 | 
			
		||||
        userList: [],
 | 
			
		||||
        parentId: '',
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    onLoad(o) {
 | 
			
		||||
      this.getPartyOrg()
 | 
			
		||||
      if (o.id) {
 | 
			
		||||
        this.SelectParty.id = o.id
 | 
			
		||||
      } else {
 | 
			
		||||
        this.SelectParty = uni.getStorageSync("lastSelectedParty") || {}
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    methods: {
 | 
			
		||||
      getPartyOrg() {
 | 
			
		||||
        this.$instance.post(`/app/partyOrganization/queryPartyOrganizationServiceList`).then((res) => {
 | 
			
		||||
          if (res?.data) {
 | 
			
		||||
            let parents = res.data.map(e => e.parentId)
 | 
			
		||||
            this.allData = res.data.map(e => ({...e, hasChildren: parents.includes(e.id)}))
 | 
			
		||||
            this.treeInit()
 | 
			
		||||
          }
 | 
			
		||||
        })
 | 
			
		||||
      },
 | 
			
		||||
      treeInit() {
 | 
			
		||||
        let last = uni.getStorageSync("lastSelectedParty")
 | 
			
		||||
        if (last) {
 | 
			
		||||
          console.log(last);
 | 
			
		||||
          this.allData.map((item) => {
 | 
			
		||||
            if(item.id == last.id) {
 | 
			
		||||
              item.isChecked = true
 | 
			
		||||
            } else {
 | 
			
		||||
              item.isChecked = false
 | 
			
		||||
            }
 | 
			
		||||
          })
 | 
			
		||||
        } else {
 | 
			
		||||
          this.allData.map((item) => item.isChecked = false)
 | 
			
		||||
        }
 | 
			
		||||
        this.treeList = this.allData.filter(e => !e.parentId)
 | 
			
		||||
        let obj = {name: '可选范围', id: ''}
 | 
			
		||||
        this.slectList.push(obj)
 | 
			
		||||
      },
 | 
			
		||||
      itemClick(row) {
 | 
			
		||||
        if (row.hasChildren) {
 | 
			
		||||
          let obj = {
 | 
			
		||||
            name: row.name,
 | 
			
		||||
            id: row.id,
 | 
			
		||||
          }
 | 
			
		||||
          this.slectList.push(obj)
 | 
			
		||||
          this.getPartyAndParent(row)
 | 
			
		||||
        }
 | 
			
		||||
      },
 | 
			
		||||
      getPartyAndParent(row) {
 | 
			
		||||
        let {id: parentId} = row
 | 
			
		||||
        this.treeList = this.allData.filter(e => e.parentId == parentId)
 | 
			
		||||
      },
 | 
			
		||||
      partyNameClick(row, index) {
 | 
			
		||||
        this.userList = []
 | 
			
		||||
        if (!index) { //第一级别
 | 
			
		||||
          this.slectList = []
 | 
			
		||||
          uni.setStorageSync("lastSelectedParty", '')
 | 
			
		||||
          this.treeInit()
 | 
			
		||||
        } else {
 | 
			
		||||
          var list = []
 | 
			
		||||
          this.slectList.map((item, i) => {
 | 
			
		||||
            if (i <= index) {
 | 
			
		||||
              list.push(item)
 | 
			
		||||
            }
 | 
			
		||||
          })
 | 
			
		||||
          this.slectList = list
 | 
			
		||||
          this.getPartyAndParent(row)
 | 
			
		||||
        }
 | 
			
		||||
      },
 | 
			
		||||
      partyClick(row, index) {
 | 
			
		||||
        if (this.treeList[index].isChecked) {//取消
 | 
			
		||||
          this.treeList[index].isChecked = false
 | 
			
		||||
          this.SelectParty = {}
 | 
			
		||||
        } else {
 | 
			
		||||
          this.treeList.map((item) => {
 | 
			
		||||
            item.isChecked = false
 | 
			
		||||
          })
 | 
			
		||||
          this.treeList[index].isChecked = true
 | 
			
		||||
          this.SelectParty = row
 | 
			
		||||
        }
 | 
			
		||||
        this.$forceUpdate()
 | 
			
		||||
      },
 | 
			
		||||
      submit() {
 | 
			
		||||
        console.log(this.SelectParty);
 | 
			
		||||
        if (this.SelectParty.id) {
 | 
			
		||||
          uni.setStorageSync("lastSelectedParty", this.SelectParty)
 | 
			
		||||
          uni.navigateBack({
 | 
			
		||||
            success: () => {
 | 
			
		||||
              uni.$emit("pagePicker:custom", this.SelectParty)
 | 
			
		||||
            }
 | 
			
		||||
          })
 | 
			
		||||
        } else {
 | 
			
		||||
          return this.$u.toast('请选择党组织')
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
</script>
 | 
			
		||||
 | 
			
		||||
<style scoped lang="scss">
 | 
			
		||||
  .selectPartyOrg {
 | 
			
		||||
    min-height: 100vh;
 | 
			
		||||
    background: #fff;
 | 
			
		||||
    padding-bottom: 140px;
 | 
			
		||||
    box-sizing: border-box;
 | 
			
		||||
 | 
			
		||||
    .header-middle {
 | 
			
		||||
      .hint {
 | 
			
		||||
        padding: 28px 20px 28px 32px;
 | 
			
		||||
        line-height: 56px;
 | 
			
		||||
        box-shadow: 0px 1px 0px 0px #e4e5e6;
 | 
			
		||||
        font-size: 30px;
 | 
			
		||||
        font-weight: 500;
 | 
			
		||||
        word-break: break-all;
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      .showTypes {
 | 
			
		||||
        .cards {
 | 
			
		||||
          display: flex;
 | 
			
		||||
          align-items: center;
 | 
			
		||||
          height: 120px;
 | 
			
		||||
          line-height: 120px;
 | 
			
		||||
          padding: 0 0 0 32px;
 | 
			
		||||
 | 
			
		||||
          .imges {
 | 
			
		||||
            display: flex;
 | 
			
		||||
            align-items: center;
 | 
			
		||||
            .imgselect {
 | 
			
		||||
              width: 48px;
 | 
			
		||||
              height: 48px;
 | 
			
		||||
              vertical-align: middle;
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            .avatras {
 | 
			
		||||
              width: 74px;
 | 
			
		||||
              height: 74px;
 | 
			
		||||
              border-radius: 8px;
 | 
			
		||||
              margin-left: 36px;
 | 
			
		||||
            }
 | 
			
		||||
          }
 | 
			
		||||
 | 
			
		||||
          img {
 | 
			
		||||
            width: 74px;
 | 
			
		||||
            height: 74px;
 | 
			
		||||
            border-radius: 8px;
 | 
			
		||||
          }
 | 
			
		||||
 | 
			
		||||
          .rightes {
 | 
			
		||||
            display: flex;
 | 
			
		||||
            border-bottom: 1px solid #e4e5e6;
 | 
			
		||||
            padding: 0 16px;
 | 
			
		||||
 | 
			
		||||
            .applicationNames {
 | 
			
		||||
              display: inline-block;
 | 
			
		||||
              font-size: 36px;
 | 
			
		||||
              font-weight: 500;
 | 
			
		||||
              color: #333333;
 | 
			
		||||
              overflow: hidden;
 | 
			
		||||
              text-overflow: ellipsis;
 | 
			
		||||
              white-space: nowrap;
 | 
			
		||||
              vertical-align: bottom;
 | 
			
		||||
            }
 | 
			
		||||
          }
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    .subBtn {
 | 
			
		||||
      position: fixed;
 | 
			
		||||
      bottom: 0;
 | 
			
		||||
      left: 0;
 | 
			
		||||
      width: 100%;
 | 
			
		||||
      height: 118px;
 | 
			
		||||
      background: #f4f8fb;
 | 
			
		||||
 | 
			
		||||
      div {
 | 
			
		||||
        width: 192px;
 | 
			
		||||
        height: 80px;
 | 
			
		||||
        line-height: 80px;
 | 
			
		||||
        text-align: center;
 | 
			
		||||
        background: #1365dd;
 | 
			
		||||
        border-radius: 4px;
 | 
			
		||||
        font-size: 32px;
 | 
			
		||||
        color: #fff;
 | 
			
		||||
        margin: 20px 34px 0 0;
 | 
			
		||||
        float: right;
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
  }
 | 
			
		||||
</style>
 | 
			
		||||
							
								
								
									
										249
									
								
								src/project/pingchang/AppPhotoReport/AppPhotoReport.vue
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										249
									
								
								src/project/pingchang/AppPhotoReport/AppPhotoReport.vue
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,249 @@
 | 
			
		||||
<template>
 | 
			
		||||
  <div class="photo-list">
 | 
			
		||||
    <div class="photo-list__wrapper">
 | 
			
		||||
 | 
			
		||||
      <div class="photo-item" v-for="(item, index) in list" :key="index">
 | 
			
		||||
        <u-swipe-action @content-click="$linkTo('./PhotoDetail?id=' + item.id)" :index="item.id"
 | 
			
		||||
                        :options="itemOptions" @click="handleDelete">
 | 
			
		||||
          <div class="photo-item__top">
 | 
			
		||||
            <h2>{{ item.content }}</h2>
 | 
			
		||||
            <div class="photo-item__top--info">
 | 
			
		||||
              <div class="photo-item__top--info-item">
 | 
			
		||||
                <label>事件类型</label>
 | 
			
		||||
                <span>{{ item.groupName }}</span>
 | 
			
		||||
              </div>
 | 
			
		||||
              <div class="photo-item__top--info-item">
 | 
			
		||||
                <label>所属网格</label>
 | 
			
		||||
                <span>{{ item.girdName }}</span>
 | 
			
		||||
              </div>
 | 
			
		||||
            </div>
 | 
			
		||||
          </div>
 | 
			
		||||
          <div class="photo-item__bottom flex">
 | 
			
		||||
            <div class="flex fill">
 | 
			
		||||
              <i :class="'status-' + item.eventStatus"></i>
 | 
			
		||||
              <span :class="'status-' + item.eventStatus">{{ item.statusName }}</span>
 | 
			
		||||
            </div>
 | 
			
		||||
            <AiEvaluation :bid="item.id" v-if="item.eventStatus>1">
 | 
			
		||||
              <div class="itemBtn">去评价</div>
 | 
			
		||||
              <div slot="finish" class="finish">已评价</div>
 | 
			
		||||
            </AiEvaluation>
 | 
			
		||||
          </div>
 | 
			
		||||
        </u-swipe-action>
 | 
			
		||||
      </div>
 | 
			
		||||
      <AiEmpty v-if="!list.length"/>
 | 
			
		||||
    </div>
 | 
			
		||||
    <div class="btn-wrapper">
 | 
			
		||||
      <div class="btn" @click="toReport" hover-class="text-hover">我要上报</div>
 | 
			
		||||
    </div>
 | 
			
		||||
  </div>
 | 
			
		||||
</template>
 | 
			
		||||
 | 
			
		||||
<script>
 | 
			
		||||
import {mapState} from 'vuex'
 | 
			
		||||
 | 
			
		||||
export default {
 | 
			
		||||
  name: "AppPhotoReport",
 | 
			
		||||
  appName: "微心愿",
 | 
			
		||||
  data() {
 | 
			
		||||
    return {
 | 
			
		||||
      list: [],
 | 
			
		||||
      pageShow: false,
 | 
			
		||||
      current: 1,
 | 
			
		||||
      total: 0,
 | 
			
		||||
      isMore: false,
 | 
			
		||||
      itemOptions: [
 | 
			
		||||
        {text: '删除', style: {backgroundColor: '#f46'}}
 | 
			
		||||
      ]
 | 
			
		||||
    }
 | 
			
		||||
  },
 | 
			
		||||
 | 
			
		||||
  computed: {
 | 
			
		||||
    ...mapState(['user'])
 | 
			
		||||
  },
 | 
			
		||||
 | 
			
		||||
  onLoad() {
 | 
			
		||||
    this.$loading()
 | 
			
		||||
    this.$dict.load(['clapEventStatus']).then(() => {
 | 
			
		||||
      this.getList()
 | 
			
		||||
    })
 | 
			
		||||
 | 
			
		||||
    uni.$on('update', () => {
 | 
			
		||||
      this.current = 1
 | 
			
		||||
      this.isMore = false
 | 
			
		||||
 | 
			
		||||
      this.getList()
 | 
			
		||||
    })
 | 
			
		||||
  },
 | 
			
		||||
 | 
			
		||||
  methods: {
 | 
			
		||||
    toReport() {
 | 
			
		||||
      this.$linkTo('./PhotoForm')
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    getList() {
 | 
			
		||||
      if (this.isMore) return
 | 
			
		||||
 | 
			
		||||
      this.$instance.post(`/app/appclapeventinfo/listByWxApplet`, null, {
 | 
			
		||||
        params: {
 | 
			
		||||
          current: this.current,
 | 
			
		||||
          size: 15
 | 
			
		||||
        }
 | 
			
		||||
      }).then(res => {
 | 
			
		||||
        if (res.code == 0) {
 | 
			
		||||
          this.total = res.data.total
 | 
			
		||||
          if (this.current > 1) {
 | 
			
		||||
            this.list = [...this.list, ...res.data.records].map(v => {
 | 
			
		||||
              return {
 | 
			
		||||
                ...v,
 | 
			
		||||
                statusName: this.$dict.getLabel('clapEventStatus', v.eventStatus)
 | 
			
		||||
              }
 | 
			
		||||
            })
 | 
			
		||||
          } else {
 | 
			
		||||
            this.list = res.data.records.map(v => {
 | 
			
		||||
              return {
 | 
			
		||||
                ...v,
 | 
			
		||||
                statusName: this.$dict.getLabel('clapEventStatus', v.eventStatus)
 | 
			
		||||
              }
 | 
			
		||||
            })
 | 
			
		||||
          }
 | 
			
		||||
          uni.hideLoading()
 | 
			
		||||
          this.pageShow = true
 | 
			
		||||
          if (res.data.records.length < 15) {
 | 
			
		||||
            this.isMore = true
 | 
			
		||||
 | 
			
		||||
            return false
 | 
			
		||||
          }
 | 
			
		||||
 | 
			
		||||
          this.current = this.current + 1
 | 
			
		||||
        } else {
 | 
			
		||||
          uni.hideLoading()
 | 
			
		||||
        }
 | 
			
		||||
      }).catch(() => {
 | 
			
		||||
        uni.hideLoading()
 | 
			
		||||
      })
 | 
			
		||||
    },
 | 
			
		||||
    handleDelete(ids) {
 | 
			
		||||
      this.$dialog.confirm({content: "是否要进行删除?"}).then(() => {
 | 
			
		||||
        this.$instance.post("/app/appclapeventinfo/delete", null, {
 | 
			
		||||
          params: {ids}
 | 
			
		||||
        }).then(res => {
 | 
			
		||||
          if (res?.code == 0) {
 | 
			
		||||
            this.$u.toast("删除成功!")
 | 
			
		||||
            this.current = 1
 | 
			
		||||
            this.isMore = false
 | 
			
		||||
            this.getList()
 | 
			
		||||
          }
 | 
			
		||||
        })
 | 
			
		||||
      }).catch(() => 0)
 | 
			
		||||
    }
 | 
			
		||||
  },
 | 
			
		||||
 | 
			
		||||
  onReachBottom() {
 | 
			
		||||
    this.getList()
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
</script>
 | 
			
		||||
 | 
			
		||||
<style lang="scss">
 | 
			
		||||
.photo-list {
 | 
			
		||||
  padding: 24px 0 150px 0;
 | 
			
		||||
 | 
			
		||||
  .photo-item {
 | 
			
		||||
    width: 686px;
 | 
			
		||||
    margin: 0 32px 24px;
 | 
			
		||||
    background: #FFFFFF;
 | 
			
		||||
    box-shadow: 0 0 8px 0 rgba(0, 0, 0, 0.02);
 | 
			
		||||
    border-radius: 16px;
 | 
			
		||||
    overflow: hidden;
 | 
			
		||||
 | 
			
		||||
    .photo-item__top {
 | 
			
		||||
      padding: 32px;
 | 
			
		||||
      text-align: justify;
 | 
			
		||||
 | 
			
		||||
      h2 {
 | 
			
		||||
        margin-bottom: 32px;
 | 
			
		||||
        line-height: 1.4;
 | 
			
		||||
        color: #333333;
 | 
			
		||||
        font-size: 32px;
 | 
			
		||||
        font-weight: 600;
 | 
			
		||||
        overflow: hidden;
 | 
			
		||||
        text-overflow: ellipsis;
 | 
			
		||||
        display: -webkit-box;
 | 
			
		||||
        -webkit-line-clamp: 2;
 | 
			
		||||
        -webkit-box-orient: vertical;
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      .photo-item__top--info-item {
 | 
			
		||||
        display: flex;
 | 
			
		||||
        align-items: center;
 | 
			
		||||
 | 
			
		||||
        &:last-child {
 | 
			
		||||
          margin-bottom: 8px;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        label {
 | 
			
		||||
          margin-right: 32px;
 | 
			
		||||
          color: #999999;
 | 
			
		||||
          font-size: 26px;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        span {
 | 
			
		||||
          color: #333333;
 | 
			
		||||
          font-size: 26px;
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    .photo-item__bottom {
 | 
			
		||||
      display: flex;
 | 
			
		||||
      align-items: center;
 | 
			
		||||
      height: 104px;
 | 
			
		||||
      padding: 0 32px;
 | 
			
		||||
      border-top: 1px solid #DDDDDD;
 | 
			
		||||
 | 
			
		||||
      i {
 | 
			
		||||
        width: 8px;
 | 
			
		||||
        height: 8px;
 | 
			
		||||
        margin-right: 8px;
 | 
			
		||||
        border-radius: 50%;
 | 
			
		||||
        background: #FF883C;
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      .itemBtn {
 | 
			
		||||
        border: 1px solid #4181FF;
 | 
			
		||||
        border-radius: 8px;
 | 
			
		||||
        color: #4181FF;
 | 
			
		||||
        padding: 8px 22px;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      .finish {
 | 
			
		||||
        color: #42D784;
 | 
			
		||||
        font-size: 28px;
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      span {
 | 
			
		||||
        color: #FF883C;
 | 
			
		||||
        font-size: 28px;
 | 
			
		||||
        background: transparent !important;
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      .status-1 {
 | 
			
		||||
        color: #1AAAFF;
 | 
			
		||||
        background: #1AAAFF;
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      .status-2 {
 | 
			
		||||
        color: #42D784;
 | 
			
		||||
        background: #42D784;
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      .status-3 {
 | 
			
		||||
        color: #FF4466;
 | 
			
		||||
        background: #FF4466;
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
</style>
 | 
			
		||||
							
								
								
									
										167
									
								
								src/project/pingchang/AppPhotoReport/PhotoDetail.vue
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										167
									
								
								src/project/pingchang/AppPhotoReport/PhotoDetail.vue
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,167 @@
 | 
			
		||||
<template>
 | 
			
		||||
  <div class="photo-detail" v-if="pageShow">
 | 
			
		||||
    <AiGroup noBorder>
 | 
			
		||||
      <h2>{{ info.content }}</h2>
 | 
			
		||||
      <div class="status-name" :class="detailStatus.cls" v-text="detailStatus.label"/>
 | 
			
		||||
    </AiGroup>
 | 
			
		||||
    <AiGroup description noBorder labelColor="#999">
 | 
			
		||||
      <AiItem label="事件类型" :value="info.groupName"/>
 | 
			
		||||
      <AiItem label="所属网格" :value="info.girdName"/>
 | 
			
		||||
      <AiItem label="上报时间" :value="info.createTime"/>
 | 
			
		||||
      <AiItem label="照片" top-label>
 | 
			
		||||
        <image v-for="(item, index) in info.files" @click="preview(item.url)" :key="index" :src="item.url"/>
 | 
			
		||||
        <span v-if="!info.files.length">暂无照片</span>
 | 
			
		||||
      </AiItem>
 | 
			
		||||
    </AiGroup>
 | 
			
		||||
    <u-gap height="24"/>
 | 
			
		||||
    <AiGroup title="处理详情" v-if="info.eventStatus > 1" description noBorder labelColor="#999">
 | 
			
		||||
      <AiItem label="处理结果" top-label :value="result.doExplain"/>
 | 
			
		||||
      <AiItem label="照片" top-label>
 | 
			
		||||
        <image v-for="(item, index) in result.files" @click="preview(item.url)" :key="index" :src="item.url"/>
 | 
			
		||||
        <span v-if="!result.files.length">暂无照片</span>
 | 
			
		||||
      </AiItem>
 | 
			
		||||
    </AiGroup>
 | 
			
		||||
    <u-gap height="24"/>
 | 
			
		||||
    <u-tabs :list="[{name:'办理进度'},{name:'我的评价'}]" :current="currentTab" @change="v=>currentTab=v"/>
 | 
			
		||||
    <u-gap height="24"/>
 | 
			
		||||
    <AiGroup noBorder v-if="currentTab=='0'">
 | 
			
		||||
      <AiStep v-for="(item,i) in process" :key="item.id" :index="i">
 | 
			
		||||
        <div class="flex start">
 | 
			
		||||
          <div class="fill stepTitle" v-text="item.systemExplain"/>
 | 
			
		||||
          <div class="color-999 mar-r32 stepTime" v-text="item.doTime"/>
 | 
			
		||||
        </div>
 | 
			
		||||
        <div v-if="item.doExplain" class="stepContent mar-t8" v-text="item.doExplain"/>
 | 
			
		||||
        <u-gap height="48"/>
 | 
			
		||||
      </AiStep>
 | 
			
		||||
    </AiGroup>
 | 
			
		||||
    <AiEvaluation v-if="currentTab=='1'" :bid="info.id" type="show"/>
 | 
			
		||||
    <AiEvaluation v-if="info.eventStatus > 1" v-model="evaluation" class="fixed-bottom bg-fff" :bid="info.id">
 | 
			
		||||
      <div class="bottomBtn">去评价</div>
 | 
			
		||||
    </AiEvaluation>
 | 
			
		||||
  </div>
 | 
			
		||||
</template>
 | 
			
		||||
 | 
			
		||||
<script>
 | 
			
		||||
export default {
 | 
			
		||||
  appName: "随手拍详情",
 | 
			
		||||
  data() {
 | 
			
		||||
    return {
 | 
			
		||||
      pageShow: false,
 | 
			
		||||
      info: {},
 | 
			
		||||
      result: {},
 | 
			
		||||
      currentTab: 0,
 | 
			
		||||
      evaluation: {}
 | 
			
		||||
    }
 | 
			
		||||
  },
 | 
			
		||||
  computed: {
 | 
			
		||||
    detailStatus: v => {
 | 
			
		||||
      const status = !v.evaluation.id ? v.info.eventStatus : 'evaluation'
 | 
			
		||||
      return {
 | 
			
		||||
        cls: 'status-' + status,
 | 
			
		||||
        label: !v.evaluation.id ? v.$dict.getLabel('clapEventStatus', v.info.eventStatus) : "已评价"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    process() {
 | 
			
		||||
      const list = this.info.processList
 | 
			
		||||
      if (this.evaluation.id) {
 | 
			
		||||
        const {id, createUserName, score, createTime: doTime, rateText: doExplain} = this.evaluation
 | 
			
		||||
        list.splice(0, 0, {
 | 
			
		||||
          id, doTime, doExplain,
 | 
			
		||||
          systemExplain: `${createUserName}完成评价 (${score}星评价)`
 | 
			
		||||
        })
 | 
			
		||||
      }
 | 
			
		||||
      return list
 | 
			
		||||
    }
 | 
			
		||||
  },
 | 
			
		||||
  onLoad(query) {
 | 
			
		||||
    this.$loading()
 | 
			
		||||
    this.$dict.load(['clapEventStatus']).then(() => {
 | 
			
		||||
      this.getInfo(query.id)
 | 
			
		||||
    })
 | 
			
		||||
  },
 | 
			
		||||
  methods: {
 | 
			
		||||
    getInfo(id) {
 | 
			
		||||
      this.$instance.post(`/app/appclapeventinfo/queryDetailById?id=${id}`).then(res => {
 | 
			
		||||
        if (res.code === 0) {
 | 
			
		||||
          this.info = res.data
 | 
			
		||||
          if (res.data.eventStatus > 1) {
 | 
			
		||||
            this.result = res.data.processList[0]
 | 
			
		||||
          }
 | 
			
		||||
          this.$nextTick(() => {
 | 
			
		||||
            this.pageShow = true
 | 
			
		||||
          })
 | 
			
		||||
        }
 | 
			
		||||
      }).finally(() => this.$hideLoading())
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    previewResult(url) {
 | 
			
		||||
      uni.previewImage({
 | 
			
		||||
        urls: this.result.files.map(v => v.url),
 | 
			
		||||
        current: url
 | 
			
		||||
      })
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    preview(url) {
 | 
			
		||||
      uni.previewImage({
 | 
			
		||||
        urls: this.info.files.map(v => v.url),
 | 
			
		||||
        current: url
 | 
			
		||||
      })
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
</script>
 | 
			
		||||
 | 
			
		||||
<style lang="scss">
 | 
			
		||||
.photo-detail {
 | 
			
		||||
  padding: 32px 0 160px;
 | 
			
		||||
  margin-bottom: 60px;
 | 
			
		||||
  background: #fff;
 | 
			
		||||
 | 
			
		||||
  h2 {
 | 
			
		||||
    line-height: 1.3;
 | 
			
		||||
    margin-bottom: 26px;
 | 
			
		||||
    color: #333333;
 | 
			
		||||
    text-align: justify;
 | 
			
		||||
    font-size: 40px;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  ::v-deep.stepTitle {
 | 
			
		||||
    min-height: 44px;
 | 
			
		||||
    font-family: PingFangSC-Regular;
 | 
			
		||||
    font-weight: 400;
 | 
			
		||||
    font-size: 32px;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  .stepTime {
 | 
			
		||||
    line-height: 44px;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  .stepContent {
 | 
			
		||||
    color: #343D65;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  .status-name {
 | 
			
		||||
    width: 96px;
 | 
			
		||||
    height: 44px;
 | 
			
		||||
    line-height: 44px;
 | 
			
		||||
    margin-bottom: 20px;
 | 
			
		||||
    text-align: center;
 | 
			
		||||
    background: #FF883C;
 | 
			
		||||
    color: #fff;
 | 
			
		||||
    font-size: 26px;
 | 
			
		||||
    border-radius: 8px;
 | 
			
		||||
 | 
			
		||||
    &.status-1, &.status-evaluation {
 | 
			
		||||
      background: #1AAAFF;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    &.status-2 {
 | 
			
		||||
      background: #42D784;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    &.status-3 {
 | 
			
		||||
      background: #FF4466;
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
</style>
 | 
			
		||||
							
								
								
									
										331
									
								
								src/project/pingchang/AppPhotoReport/PhotoForm.vue
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										331
									
								
								src/project/pingchang/AppPhotoReport/PhotoForm.vue
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,331 @@
 | 
			
		||||
<template>
 | 
			
		||||
  <div class="album">
 | 
			
		||||
    <div class="form-item__group">
 | 
			
		||||
      <div class="form-item">
 | 
			
		||||
        <div class="form-item__wrapper">
 | 
			
		||||
          <div class="form-item__title">
 | 
			
		||||
            <i>*</i>
 | 
			
		||||
            <h2>事件类型</h2>
 | 
			
		||||
          </div>
 | 
			
		||||
          <div class="form-item__right">
 | 
			
		||||
            <AiSelect :list="dictList" v-model="form.groupId" placeholder="请选择"></AiSelect>
 | 
			
		||||
          </div>
 | 
			
		||||
        </div>
 | 
			
		||||
      </div>
 | 
			
		||||
      <div class="form-item form-item__textarea">
 | 
			
		||||
        <div class="form-item__wrapper">
 | 
			
		||||
          <div class="form-item__title">
 | 
			
		||||
            <i>*</i>
 | 
			
		||||
            <h2>事件描述</h2>
 | 
			
		||||
          </div>
 | 
			
		||||
          <div class="form-item__right">
 | 
			
		||||
            <textarea v-model="form.content" :maxlength="500" placeholder="请简要描述事件…"></textarea>
 | 
			
		||||
            <!-- <u-input style="width: 100%;" :height="200" v-model="value" type="textarea" :maxlength="500" :border="border" placeholder="请简要描述事件…" /> -->
 | 
			
		||||
          </div>
 | 
			
		||||
        </div>
 | 
			
		||||
      </div>
 | 
			
		||||
    </div>
 | 
			
		||||
    <div class="form-item__group">
 | 
			
		||||
      <div class="form-item">
 | 
			
		||||
        <div class="form-item__wrapper">
 | 
			
		||||
          <div class="form-item__title">
 | 
			
		||||
            <i>*</i>
 | 
			
		||||
            <h2>上报位置</h2>
 | 
			
		||||
          </div>
 | 
			
		||||
          <div class="form-item__right" @click="chooseAddress">
 | 
			
		||||
            <span v-if="form.address">{{ form.address }}</span>
 | 
			
		||||
            <i v-else>请选择</i>
 | 
			
		||||
            <u-icon name="arrow-right" color="#ddd"/>
 | 
			
		||||
          </div>
 | 
			
		||||
        </div>
 | 
			
		||||
      </div>
 | 
			
		||||
      <div class="form-item">
 | 
			
		||||
        <div class="form-item__wrapper">
 | 
			
		||||
          <div class="form-item__title">
 | 
			
		||||
            <i>*</i>
 | 
			
		||||
            <h2>所属地区</h2>
 | 
			
		||||
          </div>
 | 
			
		||||
          <div class="form-item__right">
 | 
			
		||||
            <!-- <AiPagePicker type="gird" v-model="form.girdId" :params="{formType:2}" @select="handleSelectGrid" nodeKey="id">
 | 
			
		||||
              <AiMore v-model="form.girdName"/>
 | 
			
		||||
            </AiPagePicker> -->
 | 
			
		||||
            
 | 
			
		||||
          </div>
 | 
			
		||||
        </div>
 | 
			
		||||
      </div>
 | 
			
		||||
    </div>
 | 
			
		||||
    <div class="form-item__group">
 | 
			
		||||
      <div class="form-item form-item__imgs">
 | 
			
		||||
        <div class="form-item__wrapper">
 | 
			
		||||
          <div class="form-item__title">
 | 
			
		||||
            <i style="opacity: 0;">*</i>
 | 
			
		||||
            <h2>图片上传</h2>
 | 
			
		||||
            <span>(最多9张)</span>
 | 
			
		||||
          </div>
 | 
			
		||||
          <AiUploader v-model="form.files" :limit="9"></AiUploader>
 | 
			
		||||
        </div>
 | 
			
		||||
      </div>
 | 
			
		||||
    </div>
 | 
			
		||||
    <div class="form-item__group">
 | 
			
		||||
      <div class="form-item">
 | 
			
		||||
        <div class="form-item__wrapper">
 | 
			
		||||
          <div class="form-item__title">
 | 
			
		||||
            <i>*</i>
 | 
			
		||||
            <h2>姓名</h2>
 | 
			
		||||
          </div>
 | 
			
		||||
          <div class="form-item__right">
 | 
			
		||||
            <input placeholder="请输入" v-model="form.name" :maxlength="20"/>
 | 
			
		||||
          </div>
 | 
			
		||||
        </div>
 | 
			
		||||
      </div>
 | 
			
		||||
      <div class="form-item">
 | 
			
		||||
        <div class="form-item__wrapper">
 | 
			
		||||
          <div class="form-item__title">
 | 
			
		||||
            <i>*</i>
 | 
			
		||||
            <h2>联系方式</h2>
 | 
			
		||||
          </div>
 | 
			
		||||
          <div class="form-item__right">
 | 
			
		||||
            <input placeholder="请输入" v-model="form.phone" :maxlength="11"/>
 | 
			
		||||
          </div>
 | 
			
		||||
        </div>
 | 
			
		||||
      </div>
 | 
			
		||||
    </div>
 | 
			
		||||
    <div class="btn-wrapper">
 | 
			
		||||
      <div class="btn" hover-class="text-hover" @click="submit">提交</div>
 | 
			
		||||
    </div>
 | 
			
		||||
  </div>
 | 
			
		||||
</template>
 | 
			
		||||
 | 
			
		||||
<script>
 | 
			
		||||
import {mapState} from 'vuex'
 | 
			
		||||
 | 
			
		||||
export default {
 | 
			
		||||
  appName: "上报随手拍",
 | 
			
		||||
  data() {
 | 
			
		||||
    return {
 | 
			
		||||
      form: {
 | 
			
		||||
        content: '',
 | 
			
		||||
        lat: '',
 | 
			
		||||
        lng: '',
 | 
			
		||||
        address: '',
 | 
			
		||||
        name: '',
 | 
			
		||||
        phone: '',
 | 
			
		||||
        groupId: '',
 | 
			
		||||
        groupName: '',
 | 
			
		||||
        girdName: '',
 | 
			
		||||
        girdId: '',
 | 
			
		||||
        files: []
 | 
			
		||||
      },
 | 
			
		||||
      dictList: [],
 | 
			
		||||
      flag: false
 | 
			
		||||
    }
 | 
			
		||||
  },
 | 
			
		||||
 | 
			
		||||
  computed: {
 | 
			
		||||
    ...mapState(['user'])
 | 
			
		||||
  },
 | 
			
		||||
 | 
			
		||||
  onLoad() {
 | 
			
		||||
    this.getDict()
 | 
			
		||||
    this.form.phone = this.user.phone
 | 
			
		||||
    this.form.name = this.user.realName || ''
 | 
			
		||||
  },
 | 
			
		||||
 | 
			
		||||
  methods: {
 | 
			
		||||
    chooseAddress() {
 | 
			
		||||
      uni.authorize({
 | 
			
		||||
        scope: 'scope.userLocation',
 | 
			
		||||
        success: () => {
 | 
			
		||||
          uni.chooseLocation({
 | 
			
		||||
            success: res => {
 | 
			
		||||
              this.form.address = res.address
 | 
			
		||||
              this.form.lat = res.latitude
 | 
			
		||||
              this.form.lng = res.longitude
 | 
			
		||||
            }
 | 
			
		||||
          })
 | 
			
		||||
        },
 | 
			
		||||
        fail: () => {
 | 
			
		||||
          this.$dialog.confirm({
 | 
			
		||||
            content: '您未授权定位权限,无法选择位置'
 | 
			
		||||
          }).then(() => {
 | 
			
		||||
            wx.openSetting({
 | 
			
		||||
              success: res => {
 | 
			
		||||
                if (!res.authSetting['scope.userLocation']) {
 | 
			
		||||
                  this.$dialog.alert({
 | 
			
		||||
                    content: '您未授权定位权限,无法选择位置'
 | 
			
		||||
                  }).then(() => {
 | 
			
		||||
                  })
 | 
			
		||||
                } else {
 | 
			
		||||
                  console.log('设置定位权限')
 | 
			
		||||
                }
 | 
			
		||||
              }
 | 
			
		||||
            })
 | 
			
		||||
          })
 | 
			
		||||
        }
 | 
			
		||||
      })
 | 
			
		||||
    },
 | 
			
		||||
    getDict() {
 | 
			
		||||
      this.$instance.post(`/app/appclapeventgroup/list?current=1&size=100000`).then(res => {
 | 
			
		||||
        if (res.code == 0) {
 | 
			
		||||
          this.dictList = res.data.records.map(v => {
 | 
			
		||||
            return {
 | 
			
		||||
              value: v.id,
 | 
			
		||||
              label: v.groupName
 | 
			
		||||
            }
 | 
			
		||||
          })
 | 
			
		||||
        }
 | 
			
		||||
      })
 | 
			
		||||
    },
 | 
			
		||||
    submit() {
 | 
			
		||||
      if (!this.form.groupId) {
 | 
			
		||||
        return this.$toast('请选择事件类型')
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      if (!this.form.content) {
 | 
			
		||||
        return this.$toast('请输入事件描述')
 | 
			
		||||
      }
 | 
			
		||||
      if (!this.form.address) {
 | 
			
		||||
        return this.$toast('请选择上报位置')
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      if (!this.form.name) {
 | 
			
		||||
        return this.$toast('请输入上报人姓名')
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      if (!this.form.phone) {
 | 
			
		||||
        return this.$toast('请输入上报人联系方式')
 | 
			
		||||
      }
 | 
			
		||||
      if (!this.form.girdId) {
 | 
			
		||||
        return this.$toast('请选择所属网格')
 | 
			
		||||
      }
 | 
			
		||||
      if (this.flag) return
 | 
			
		||||
      this.flag = true
 | 
			
		||||
 | 
			
		||||
      this.$loading()
 | 
			
		||||
      this.$instance.post(`/app/appclapeventinfo/addOrUpdate`, {
 | 
			
		||||
        ...this.form,
 | 
			
		||||
        openid: this.user.openid,
 | 
			
		||||
        portrait: this.user.avatarUrl,
 | 
			
		||||
        files: this.form.files,
 | 
			
		||||
        groupName: this.dictList.filter(v => v.value === this.form.groupId)[0].label
 | 
			
		||||
      }).then(res => {
 | 
			
		||||
        this.$hideLoading()
 | 
			
		||||
        this.flag = false
 | 
			
		||||
        if (res.code == 0) {
 | 
			
		||||
          uni.$emit('update')
 | 
			
		||||
          setTimeout(() => {
 | 
			
		||||
            uni.redirectTo({
 | 
			
		||||
              url: './PhotoResult?id=' + res.data.id
 | 
			
		||||
            })
 | 
			
		||||
          }, 400)
 | 
			
		||||
        }
 | 
			
		||||
        this.$hideLoading()
 | 
			
		||||
      })
 | 
			
		||||
    },
 | 
			
		||||
    handleSelectGrid(v) {
 | 
			
		||||
      this.form.girdName = v.girdName
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
</script>
 | 
			
		||||
 | 
			
		||||
<style lang="scss">
 | 
			
		||||
.album {
 | 
			
		||||
  padding-bottom: 140px;
 | 
			
		||||
 | 
			
		||||
  .form-item__group {
 | 
			
		||||
    margin-bottom: 24px;
 | 
			
		||||
    background: #fff;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  .form-item {
 | 
			
		||||
    padding-left: 32px;
 | 
			
		||||
 | 
			
		||||
    .form-item__wrapper {
 | 
			
		||||
      display: flex;
 | 
			
		||||
      align-items: center;
 | 
			
		||||
      justify-content: space-between;
 | 
			
		||||
      height: 128px;
 | 
			
		||||
      padding-right: 28px;
 | 
			
		||||
      border-bottom: 1px solid #DDDDDD;
 | 
			
		||||
 | 
			
		||||
      input {
 | 
			
		||||
        flex: 1;
 | 
			
		||||
        height: 100%;
 | 
			
		||||
        text-align: right;
 | 
			
		||||
        padding-right: 10px;
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      .form-item__right {
 | 
			
		||||
        display: flex;
 | 
			
		||||
        align-items: center;
 | 
			
		||||
        font-size: 32px;
 | 
			
		||||
 | 
			
		||||
        span {
 | 
			
		||||
          max-width: 400px;
 | 
			
		||||
          margin-right: 8px;
 | 
			
		||||
          color: #333333;
 | 
			
		||||
          overflow: hidden;
 | 
			
		||||
          white-space: nowrap;
 | 
			
		||||
          text-overflow: ellipsis;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        i {
 | 
			
		||||
          margin-right: 8px;
 | 
			
		||||
          color: #999999;
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    &:last-child {
 | 
			
		||||
      .form-item__wrapper {
 | 
			
		||||
        border-bottom: none;
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    .form-item__title {
 | 
			
		||||
      display: flex;
 | 
			
		||||
      align-items: center;
 | 
			
		||||
 | 
			
		||||
      i {
 | 
			
		||||
        font-size: 32px;
 | 
			
		||||
        color: #FF4466;
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      span {
 | 
			
		||||
        font-size: 28px;
 | 
			
		||||
        color: #999999;
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      h2 {
 | 
			
		||||
        padding: 0 4px;
 | 
			
		||||
        font-weight: 600;
 | 
			
		||||
        font-size: 32px;
 | 
			
		||||
        color: #333333;
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    &.form-item__imgs, &.form-item__textarea {
 | 
			
		||||
      .form-item__wrapper {
 | 
			
		||||
        display: block;
 | 
			
		||||
        height: auto;
 | 
			
		||||
        padding-bottom: 32px;
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      textarea {
 | 
			
		||||
        width: 100%;
 | 
			
		||||
        height: 160px;
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      .form-item__title {
 | 
			
		||||
        padding: 32px 0;
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      .form-item__right {
 | 
			
		||||
        padding-left: 18px;
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
</style>
 | 
			
		||||
							
								
								
									
										64
									
								
								src/project/pingchang/AppPhotoReport/PhotoResult.vue
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										64
									
								
								src/project/pingchang/AppPhotoReport/PhotoResult.vue
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,64 @@
 | 
			
		||||
<template>
 | 
			
		||||
  <div class="result">
 | 
			
		||||
    <!-- <image src="/static/img/result.png" /> -->
 | 
			
		||||
    <h2>上报成功!</h2>
 | 
			
		||||
    <div class="result-btn" hover-class="text-hover" @click="back">前往查看</div>
 | 
			
		||||
  </div>
 | 
			
		||||
</template>
 | 
			
		||||
 | 
			
		||||
<script>
 | 
			
		||||
  export default {
 | 
			
		||||
    appName:"上报随手拍",
 | 
			
		||||
    data () {
 | 
			
		||||
      return {
 | 
			
		||||
        id: ''
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    onLoad (query) {
 | 
			
		||||
      this.id = query.id
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    methods: {
 | 
			
		||||
      back () {
 | 
			
		||||
        uni.redirectTo({
 | 
			
		||||
          url: './PhotoDetail?id=' + this.id
 | 
			
		||||
        })
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
</script>
 | 
			
		||||
 | 
			
		||||
<style lang="scss">
 | 
			
		||||
  .result {
 | 
			
		||||
    min-height: 100vh;
 | 
			
		||||
    padding-top: 160px;
 | 
			
		||||
    box-sizing: border-box;
 | 
			
		||||
    text-align: center;
 | 
			
		||||
    background: #fff;
 | 
			
		||||
 | 
			
		||||
    image {
 | 
			
		||||
      width: 220px;
 | 
			
		||||
      height: 220px;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    h2 {
 | 
			
		||||
      margin: 32px 0 80px;
 | 
			
		||||
      font-weight: 600;
 | 
			
		||||
      font-size: 40px;
 | 
			
		||||
      color: #333;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    .result-btn {
 | 
			
		||||
      width: 320px;
 | 
			
		||||
      height: 88px;
 | 
			
		||||
      line-height: 88px;
 | 
			
		||||
      margin: 0 auto;
 | 
			
		||||
      text-align: center;
 | 
			
		||||
      background: #4181FF;
 | 
			
		||||
      color: #fff;
 | 
			
		||||
      font-size: 34px;
 | 
			
		||||
      border-radius: 16px;
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
</style>
 | 
			
		||||
@@ -37,7 +37,7 @@
 | 
			
		||||
          </div>
 | 
			
		||||
        </div>
 | 
			
		||||
      </div>
 | 
			
		||||
      <div class="form-item">
 | 
			
		||||
      <!-- <div class="form-item">
 | 
			
		||||
        <div class="form-item__wrapper">
 | 
			
		||||
          <div class="form-item__title">
 | 
			
		||||
            <i>*</i>
 | 
			
		||||
@@ -58,7 +58,7 @@
 | 
			
		||||
            <AiSelect v-model="form.highRiskIndustries" dict="EP_highRiskIndustries" class="select"></AiSelect>
 | 
			
		||||
          </div>
 | 
			
		||||
        </div>
 | 
			
		||||
      </div>
 | 
			
		||||
      </div> -->
 | 
			
		||||
    </div>
 | 
			
		||||
 | 
			
		||||
    <div class="title">行程信息</div>
 | 
			
		||||
@@ -280,6 +280,7 @@
 | 
			
		||||
 | 
			
		||||
<script>
 | 
			
		||||
import {mapState} from 'vuex'
 | 
			
		||||
import dayjs from 'dayjs'
 | 
			
		||||
 | 
			
		||||
export default {
 | 
			
		||||
  appName: "添加返乡记录",
 | 
			
		||||
@@ -307,8 +308,8 @@ export default {
 | 
			
		||||
        idNumber: '',
 | 
			
		||||
        name: '',
 | 
			
		||||
        phone: '',
 | 
			
		||||
        type: '',
 | 
			
		||||
        highRiskIndustries: '',  // 高危行业
 | 
			
		||||
        // type: '',
 | 
			
		||||
        // highRiskIndustries: '',  // 高危行业
 | 
			
		||||
        startTime: '',
 | 
			
		||||
        startAreaId: '',
 | 
			
		||||
        startAreaName: '',
 | 
			
		||||
@@ -323,11 +324,11 @@ export default {
 | 
			
		||||
        arriveAreaId: '',
 | 
			
		||||
        arriveAreaName: '',
 | 
			
		||||
        arriveAddress: '',
 | 
			
		||||
        fromHighRiskArea: '',
 | 
			
		||||
        fromHighRiskArea: '0',
 | 
			
		||||
        highRiskAreaId: '',
 | 
			
		||||
        highRiskAreaName: '',
 | 
			
		||||
        contactPatients: '',
 | 
			
		||||
        abnormalHealth: '',
 | 
			
		||||
        contactPatients: '0',
 | 
			
		||||
        abnormalHealth: '0',
 | 
			
		||||
        abnormalType: '',
 | 
			
		||||
        companionList: [],
 | 
			
		||||
      },
 | 
			
		||||
@@ -367,6 +368,8 @@ export default {
 | 
			
		||||
      this.travelTypeDict = this.$dict.getDict('EP_travelType')
 | 
			
		||||
      this.getewayList()
 | 
			
		||||
    })
 | 
			
		||||
    let timeNow = dayjs(new Date()).format("YYYY-MM-DD HH:mm:ss");
 | 
			
		||||
    this.form.arriveTime = timeNow.substr(0,timeNow.length - 3)
 | 
			
		||||
  },
 | 
			
		||||
 | 
			
		||||
  methods: {
 | 
			
		||||
@@ -428,6 +431,10 @@ export default {
 | 
			
		||||
        if(res?.data) {
 | 
			
		||||
          this.form.name = res.data.records?.[0]?.name || ''
 | 
			
		||||
          this.form.phone = res.data.records?.[0]?.phone || ''
 | 
			
		||||
          this.startAreaId = res.data.records?.[0]?.startAreaId
 | 
			
		||||
          this.startAreaName = res.data.records?.[0]?.startAreaName
 | 
			
		||||
          this.form.arriveAreaId = res.data.records?.[0]?.arriveAreaId
 | 
			
		||||
          this.form.arriveAreaName = res.data.records?.[0]?.arriveAreaName
 | 
			
		||||
        }
 | 
			
		||||
      })
 | 
			
		||||
    },
 | 
			
		||||
@@ -466,13 +473,13 @@ export default {
 | 
			
		||||
        return this.$toast('请输入手机号码')
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      if (!this.form.type) {
 | 
			
		||||
        return this.$toast('请选择人员类别')
 | 
			
		||||
      }
 | 
			
		||||
      // if (!this.form.type) {
 | 
			
		||||
      //   return this.$toast('请选择人员类别')
 | 
			
		||||
      // }
 | 
			
		||||
 | 
			
		||||
      if (!this.form.highRiskIndustries) {
 | 
			
		||||
        return this.$toast('请选择高危行业')
 | 
			
		||||
      }
 | 
			
		||||
      // if (!this.form.highRiskIndustries) {
 | 
			
		||||
      //   return this.$toast('请选择高危行业')
 | 
			
		||||
      // }
 | 
			
		||||
 | 
			
		||||
      if (!this.form.startTime) {
 | 
			
		||||
        return this.$toast('请选择出发时间')
 | 
			
		||||
@@ -710,7 +717,7 @@ export default {
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        span {
 | 
			
		||||
          max-width: 400px;
 | 
			
		||||
          max-width: 336px;
 | 
			
		||||
          margin-right: 8px;
 | 
			
		||||
          color: #333333;
 | 
			
		||||
          overflow: hidden;
 | 
			
		||||
 
 | 
			
		||||
@@ -49,12 +49,11 @@
 | 
			
		||||
          <span style="color: #4181FF">{{ info.phone }}</span>
 | 
			
		||||
        </div>
 | 
			
		||||
      </div>
 | 
			
		||||
      <div class="detail-info__item">
 | 
			
		||||
      <!-- <div class="detail-info__item">
 | 
			
		||||
        <div class="left">
 | 
			
		||||
          <label>人员类别</label>
 | 
			
		||||
        </div>
 | 
			
		||||
        <div class="right">
 | 
			
		||||
          <!-- :style="{color: /[03]/.test(info.type) ? '#42D784' : '#FF4466'}" -->
 | 
			
		||||
          <span>{{ $dict.getLabel('EP_registerPersonType', info.type) }}</span>
 | 
			
		||||
        </div>
 | 
			
		||||
      </div>
 | 
			
		||||
@@ -65,7 +64,7 @@
 | 
			
		||||
        <div class="right">
 | 
			
		||||
          <span>{{ $dict.getLabel('EP_highRiskIndustries', info.highRiskIndustries) }}</span>
 | 
			
		||||
        </div>
 | 
			
		||||
      </div>
 | 
			
		||||
      </div> -->
 | 
			
		||||
    </div>
 | 
			
		||||
 | 
			
		||||
    <div class="detail-info">
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user