linwe
2024-06-05 c730ebc8db71ecf8eb3afe90bf9eaec93fe90070
人口采集一次可采集多个人
2 files modified
1 files added
1745 ■■■■ changed files
api/house/household.js 9 ●●●●● patch | view | raw | blame | history
subPackage/house/components/userInfo.vue 1308 ●●●●● patch | view | raw | blame | history
subPackage/house/member/add.vue 428 ●●●● patch | view | raw | blame | history
api/house/household.js
@@ -27,6 +27,15 @@
    })
}
// 住户新增修改
export const saveOrUpdateHouseholdBatch = (data) => {
    return http.request({
        url: 'blade-household/household/saveOrUpdateHouseholdBatch',
        method: 'POST',
        data
    })
}
// 住户删除
export const removeHousehold = (ids) => {
    return http.request({
subPackage/house/components/userInfo.vue
New file
@@ -0,0 +1,1308 @@
<template>
    <view class="container">
        <view class="main">
            <view class="content">
                <u-form labelWidth="70" :model="form" :rules="rules" ref="form">
                    <view class="event-info">
                        <u-form-item class="form-item" labelWidth="110" label="姓名" required prop="name">
                            <u--input border="none" v-model="form.name" placeholder="请输入姓名">
                            </u--input>
                        </u-form-item>
                        <u-form-item @click="showSelectBus('性别','gender')" class="form-item" labelWidth="110" label="性别"
                            prop="gender">
                            <u--input border="none" v-model="selectDefaultName.gender" disabled disabledColor="#ffffff"
                                placeholder="请选择性别">
                            </u--input>
                            <u-icon slot="right" name="arrow-right"></u-icon>
                        </u-form-item>
                        <u-form-item @click="showSelectBus('证件类型','cardType')" class="form-item" labelWidth="110"
                            label="证件类型" prop="gender">
                            <u--input border="none" v-model="selectDefaultName.cardType" disabled
                                disabledColor="#ffffff" placeholder="请选择证件类型">
                            </u--input>
                            <u-icon slot="right" name="arrow-right"></u-icon>
                        </u-form-item>
                        <u-form-item v-if="form.cardType == 111" class="form-item" labelWidth="110" label="身份证号码"
                            prop="idCard">
                            <u--input border="none" type="idcard " v-model="form.idCard" placeholder="请输入身份证号码">
                            </u--input>
                        </u-form-item>
                        <u-form-item v-if="form.cardType && form.cardType != 111" class="form-item" labelWidth="110"
                            label="证件号码" prop="cardNo">
                            <u--input border="none" v-model="form.cardNo" placeholder="请输入证件号码">
                            </u--input>
                        </u-form-item>
                        <u-form-item class="form-item" labelWidth="110" label="手机号码" prop="phoneNumber" required>
                            <u--input border="none" type="number" v-model="form.phoneNumber" placeholder="请输入手机号码">
                            </u--input>
                        </u-form-item>
                        <u-form-item class="form-item" labelWidth="110" label="户籍地区" prop="residentAdcode">
                            <view class="region">
                                <picker mode="region" :value="residentadDefault" @change="changeHouseholdRegion">
                                    <view class="region-picker c-c0" v-if="!residentad">
                                        请选择户籍地区
                                    </view>
                                    <view class="region-picker c-30" v-if="residentad">
                                        {{residentad}}
                                    </view>
                                </picker>
                            </view>
                            <u-icon slot="right" name="arrow-right"></u-icon>
                        </u-form-item>
                        <u-form-item @click="showSelectBus('民族','ethnicity')" class="form-item" labelWidth="110"
                            label="民族" prop="ethnicity">
                            <u--input border="none" v-model="selectDefaultName.ethnicity" disabled
                                disabledColor="#ffffff" placeholder="请选择民族">
                            </u--input>
                            <u-icon slot="right" name="arrow-right"></u-icon>
                        </u-form-item>
                        <u-form-item @click="showSelectBus('是否党员','partyEmber')" class="form-item" labelWidth="110"
                            label="是否党员" prop="partyEmber">
                            <u--input border="none" v-model="selectDefaultName.partyEmber" disabled
                                disabledColor="#ffffff" placeholder="请选择是否党员">
                            </u--input>
                            <u-icon slot="right" name="arrow-right"></u-icon>
                        </u-form-item>
                        <u-form-item class="form-item" labelWidth="110" label="职业类别" prop="occupation ">
                            <u--input border="none" v-model="form.occupation " placeholder="请输入职业类别">
                            </u--input>
                        </u-form-item>
                        <u-form-item @click="showSelectBus('婚姻状态','maritalStatus')" class="form-item" labelWidth="110"
                            label="婚姻状态" prop="maritalStatus">
                            <u--input border="none" v-model="selectDefaultName.maritalStatus" disabled
                                disabledColor="#ffffff" placeholder="请选择婚姻状态">
                            </u--input>
                            <u-icon slot="right" name="arrow-right"></u-icon>
                        </u-form-item>
                        <u-form-item class="form-item" labelWidth="110" label="标签" @click="navTo">
                            <view class="">
                                <text style="color: #c0c4cc;"
                                    v-if="!form.householdLabelList || !form.householdLabelList.length">请选择标签</text>
                                <text class="f-28" v-else>{{showLabel()}}</text>
                            </view>
                            <u-icon slot="right" name="arrow-right"></u-icon>
                        </u-form-item>
                        <u-form-item class="form-item" @click="showVolunteerOrg = true" labelWidth="120" label="志愿者组织"
                            prop="volunteerOrg">
                            <u--input border="none" v-model="volunteerOrg" disabled disabledColor="#ffffff"
                                placeholder="请选择志愿者组织">
                            </u--input>
                            <u-icon slot="right" name="arrow-right"></u-icon>
                        </u-form-item>
                        <u-form-item v-if="volunteerOrg == '其他'" required class="form-item" labelWidth="120"
                            label="其他志愿者组织" prop="volunteerOrg">
                            <u--input border="none" v-model="form.volunteerOrg" placeholder="请输入其他志愿者组织">
                            </u--input>
                        </u-form-item>
                        <u-form-item @click="showSelectBus('与业主关系','relationship')" class="form-item" labelWidth="120"
                            label="与业主关系" required prop="relationship">
                            <u--input border="none" v-model="selectDefaultName.relationship" disabled
                                disabledColor="#ffffff" placeholder="请选择与业主关系">
                            </u--input>
                            <u-icon slot="right" name="arrow-right"></u-icon>
                        </u-form-item>
                        <u-form-item v-if="form.cardType && form.cardType != 111" class="form-item" labelWidth="120"
                            label="出生日期" prop="birthday" @click="showSelectBirthday = true">
                            <u--input border="none" v-model="form.birthday" disabled disabledColor="#ffffff"
                                placeholder="请选择出生日期">
                            </u--input>
                            <u-icon slot="right" name="arrow-right"></u-icon>
                        </u-form-item>
                        <u-form-item class="form-item" labelWidth="110" label="其它联系方式" prop="otherContact">
                            <u--input border="none" v-model="form.otherContact" placeholder="请输入其它联系方式">
                            </u--input>
                        </u-form-item>
                        <u-form-item @click="showSelectBus('是否主要联系人','isPrimaryContact')" class="form-item"
                            labelWidth="110" label="是否主要联系人" prop="isPrimaryContact">
                            <u--input border="none" v-model="selectDefaultName.isPrimaryContact" disabled
                                disabledColor="#ffffff" placeholder="请选择是否主要联系人">
                            </u--input>
                            <u-icon slot="right" name="arrow-right"></u-icon>
                        </u-form-item>
                        <u-form-item @click="showSelectBus('居住情况','residentialStatus')" class="form-item"
                            labelWidth="100" label="居住情况" prop="residentialStatus">
                            <u--input border="none" v-model="selectDefaultName.residentialStatus" disabled
                                disabledColor="#ffffff" placeholder="请选择居住情况">
                            </u--input>
                            <u-icon slot="right" name="arrow-right"></u-icon>
                        </u-form-item>
                        <!-- <u-form-item class="form-item" labelWidth="110" label="港澳台通行证" prop="hkmtPass">
                            <u--input border="none" v-model="form.hkmtPass" placeholder="请输入">
                            </u--input>
                        </u-form-item>
                        <u-form-item class="form-item" labelWidth="110" label="护照" prop="passport">
                            <u--input border="none" v-model="form.passport" placeholder="请输入">
                            </u--input>
                        </u-form-item> -->
                        <u-form-item class="form-item" labelWidth="110" label="居住地区" prop="homeAdcode"
                            @click="showRegion = true">
                            <u--input border="none" v-model="homeRegion" disabled disabledColor="#ffffff"
                                placeholder="请选择居住地区">
                            </u--input>
                            <u-icon slot="right" name="arrow-right"></u-icon>
                        </u-form-item>
                        <!-- <u-form-item class="form-item  address-row" labelWidth="110" label="现居住地" prop="currentAddress">
                            <u-textarea border="none" :disabled="form.source ==1?true:false" disabledColor="#ffffff"
                                v-model="form.currentAddress" placeholder="请输入现居住地">
                            </u-textarea>
                        </u-form-item> -->
                        <u-form-item class="form-item" labelWidth="110" label="籍贯地区" prop="nativePlaceAdcode">
                            <view class="region">
                                <picker mode="region" :value="navtivePlaceDefault" @change="changeNativeRegion">
                                    <view class="region-picker c-c0" v-if="!nativePlace">
                                        请选择籍贯地区
                                    </view>
                                    <view class="region-picker c-30" v-if="nativePlace">
                                        {{nativePlace}}
                                    </view>
                                </picker>
                            </view>
                            <u-icon slot="right" name="arrow-right"></u-icon>
                        </u-form-item>
                        <u-form-item @click="showSelectBus('户籍类型','residentType')" class="form-item" labelWidth="110"
                            label="户籍类型" prop="residentType">
                            <u--input border="none" v-model="selectDefaultName.residentType" disabled
                                disabledColor="#ffffff" placeholder="请选择户籍类型">
                            </u--input>
                            <u-icon slot="right" name="arrow-right"></u-icon>
                        </u-form-item>
                        <u-form-item class="form-item" labelWidth="110" label="户籍地址" prop="hukouRegistration">
                            <u-textarea border="none" v-model="form.hukouRegistration" placeholder="请输入户籍地址">
                            </u-textarea>
                        </u-form-item>
                        <u-form-item @click="showSelectBus('学历','education')" class="form-item" labelWidth="110"
                            label="学历" prop="education">
                            <u--input border="none" v-model="selectDefaultName.education" disabled
                                disabledColor="#ffffff" placeholder="请选择学历">
                            </u--input>
                            <u-icon slot="right" name="arrow-right"></u-icon>
                        </u-form-item>
                        <u-form-item class="form-item" labelWidth="110" label="工作单位" prop="employer">
                            <u--input border="none" v-model="form.employer" placeholder="请输入工作单位">
                            </u--input>
                        </u-form-item>
                        <u-form-item class="form-item" labelWidth="110" label="工作单位地址" prop="cmpyRegAddr">
                            <u-textarea border="none" v-model="form.cmpyRegAddr" placeholder="请输入工作单位地址">
                            </u-textarea>
                        </u-form-item>
                        <u-form-item @click="showSelectBus('工作状态','workStatus')" class="form-item" labelWidth="110"
                            label="工作状态" prop="workStatus">
                            <u--input border="none" v-model="selectDefaultName.workStatus" disabled
                                disabledColor="#ffffff" placeholder="请选择工作状态">
                            </u--input>
                            <u-icon slot="right" name="arrow-right"></u-icon>
                        </u-form-item>
                        <u-form-item class="form-item" labelWidth="110" label="宗教信仰" prop="religiousBelief ">
                            <u--input border="none" v-model="form.religiousBelief" placeholder="请输入宗教信仰">
                            </u--input>
                        </u-form-item>
                        <u-form-item @click="showSelectBus('健康状态','healthStatus')" class="form-item" labelWidth="110"
                            label="健康状态" prop="healthStatus">
                            <u--input border="none" v-model="selectDefaultName.healthStatus" disabled
                                disabledColor="#ffffff" placeholder="请选择健康状态">
                            </u--input>
                            <u-icon slot="right" name="arrow-right"></u-icon>
                        </u-form-item>
                        <u-form-item v-if="selectDefaultIndex.healthStatus == 2" class="form-item" labelWidth="110"
                            label="疾病名称" prop="diseaseName">
                            <u--input border="none" v-model="form.diseaseName" placeholder="请输入疾病名称">
                            </u--input>
                        </u-form-item>
                        <u-form-item class="form-item" labelWidth="110" label="外出详址" prop="goOutAddr">
                            <u-textarea border="none" v-model="form.goOutAddr" placeholder="请输入外出详址">
                            </u-textarea>
                        </u-form-item>
                        <u-form-item class="form-item" labelWidth="110" label="外出原因" prop="goOutReason  ">
                            <u--input border="none" v-model="form.goOutReason" placeholder="请输入外出原因">
                            </u--input>
                        </u-form-item>
                        <u-form-item class="form-item" labelWidth="110" label="外出时间" prop="goOutTime"
                            @click="showSelectDate = true">
                            <u--input border="none" v-model="form.goOutTime  " disabled disabledColor="#ffffff"
                                placeholder="请选择外出时间">
                            </u--input>
                            <u-icon slot="right" name="arrow-right"></u-icon>
                        </u-form-item>
                        <u-form-item class="form-item" labelWidth="110" label="外出去向" prop="goOutWhere">
                            <u--input border="none" v-model="form.goOutWhere" placeholder="请输入外出去向">
                            </u--input>
                        </u-form-item>
                        <u-form-item class="form-item" labelWidth="110" label="车牌号" prop="cardNumber">
                            <u--input border="none" v-model="form.cardNumber" placeholder="多个用中划线(-)隔开">
                            </u--input>
                        </u-form-item>
                        <u-form-item class="form-item" labelWidth="110" label="备注" prop="remark">
                            <u--input border="none" v-model="form.remark" placeholder="补充说明">
                            </u--input>
                        </u-form-item>
                    </view>
                </u-form>
            </view>
        </view>
        <u-picker :defaultIndex="[selectDefaultIndex[selectBusKey]]" :closeOnClickOverlay="true" v-if="typeShow"
            :show="typeShow" :columns="[selectBusList]" @close="typeShow = false" @cancel="typeShow = false"
            keyName="name" @confirm="typeSelect"></u-picker>
        <u-datetime-picker :show="showSelectDate" v-model="currentTime" mode="date" :formatter="formatter"
            @confirm="confirmDate" @cancel="showSelectDate = false" :minDate="goOutMinDate"></u-datetime-picker>
        <u-datetime-picker :show="showSelectBirthday" v-model="currentTime" mode="date" @confirm="confirmBirthday"
            @cancel="showSelectBirthday = false" :minDate="minDate"></u-datetime-picker>
        <u-picker :defaultIndex="[homeIndex]" :closeOnClickOverlay="true" :show="showRegion" :columns="[regionList]"
            @close="showRegion = false" @cancel="showRegion = false" keyName="name" @confirm="regionSelect"></u-picker>
        <u-picker :defaultIndex="[volunteerOrgTypeIndex]" :closeOnClickOverlay="true" :show="showVolunteerOrg"
            :columns="[volunteerOrgTypeList]" @close="showRegion = false" @cancel="showVolunteerOrg = false"
            @confirm="confirmVolunteerOrg"></u-picker>
        <u-popup :show="isShowPopup" mode="bottom" :round="12" closeable="true" @close="isShowPopup = false">
            <view class="popup-content">
                <z-paging ref="paging" v-model="houseList" @query="queryHouseList" @onRefresh="refreshList"
                    :fixed="false">
                    <view class="" slot="top">
                        <view class="popup-title f-30">选择房屋</view>
                        <u-search placeholder="请输入房屋地址" :showAction="true" actionText="搜索" :animation="true"
                            v-model="addressName" @search="searchAddress" @custom="searchAddress"
                            @clear="clearKeyword"></u-search>
                    </view>
                    <view class="popup-list">
                        <view class="popup-list-item" v-for="(i,k) in houseList" :key="k" @click="selectHouse(i)">
                            <view class="address-name f-28">
                                {{i.address}}
                            </view>
                            <view class="check-icon" v-if="i.houseCode == form.houseCode">
                                <u-icon name="checkbox-mark" color="#017BFC" size="30"></u-icon>
                            </view>
                        </view>
                    </view>
                </z-paging>
            </view>
        </u-popup>
    </view>
</template>
<script>
    import {
        getQrCodeDetail
    } from "@/api/system/index"
    import selectBus from "@/components/my-components/selectBus.vue"
    import uploadMixin from "@/mixin/uploadMixin";
    import {
        getHouseholdDetail,
        saveOrUpdateHousehold,
        removeHousehold
    } from '@/api/house/household.js'
    import {
        bizDictionary
    } from '@/api/system/dict.js'
    import {
        select,
        regionTree
    } from "@/api/system/region.js"
    import {
        getHouseList
    } from "@/api/house/house.js"
    import boxTitle from '../components/boxTitle/index2.vue'
    export default {
        components: {
            selectBus,
            boxTitle
        },
        mixins: [uploadMixin],
        data() {
            return {
                addOrUpdateTitle: "添加",
                houseCode: "",
                form: {
                    // roleName: "",
                    // relationName: '',
                    // location: "",
                    // title: "",
                    // roleType:null,
                    // description: "",
                },
                rules: {
                    'selectDefaultName.relationship': {
                        required: true,
                        message: '请选择与业主关系',
                        trigger: ['change', 'blur'],
                    },
                    'name': {
                        type: 'string',
                        required: true,
                        message: '请填写姓名',
                        trigger: ['change', 'blur'],
                    },
                    'volunteerOrgTemp': {
                        type: 'string',
                        required: true,
                        message: '请输入其他志愿者组织',
                        trigger: ['change', 'blur'],
                    },
                    // 'idCard': [{
                    //         type: 'string',
                    //         required: false,
                    //         message: '请输入身份证号码',
                    //         trigger: ['change', 'blur']
                    //     },
                    //     {
                    //         validator: (rule, value, callback) => {
                    //             const idCardRegex =
                    //                 /(^\d{15}$)|(^\d{18}$)|(^\d{17}(\d|X|x)$)/
                    //             return idCardRegex.test(value)
                    //         },
                    //         message: '身份证号码有误',
                    //         trigger: ['change', 'blur']
                    //     }
                    // ],
                    'phoneNumber': [{
                            required: true,
                            message: '请输入手机号码',
                            trigger: ['change', 'blur']
                        },
                        {
                            validator: (rule, value, callback) => {
                                return uni.$u.test.mobile(value);
                            },
                            message: '手机号码不正确',
                            trigger: ['change', 'blur']
                        }
                    ]
                },
                typeShow: false,
                roleName: "",
                dataList: {
                    roleType: [],
                    relationship: [],
                    gender: [{
                            value: 1,
                            name: '男',
                        },
                        {
                            value: 0,
                            name: '女',
                        },
                        {
                            value: 2,
                            name: '未知',
                        }
                    ],
                    isPrimaryContact: [{
                            value: 1,
                            name: '是',
                        },
                        {
                            value: 0,
                            name: '否',
                        }
                    ],
                    residentialStatus: [{
                            value: 1,
                            name: '是',
                        },
                        {
                            value: 0,
                            name: '否',
                        }
                    ],
                    ethnicity: [],
                    education: [],
                    partyEmber: [{
                            value: 1,
                            name: '是',
                        },
                        {
                            value: 2,
                            name: '否',
                        }
                    ],
                    workStatus: [],
                    maritalStatus: [],
                    residentType: [],
                    healthStatus: [],
                    cardType: []
                },
                // 下拉变量
                selectBusList: [],
                selectBusVal: '',
                selectBusTitle: '',
                selectBusModel: '',
                selectBusKey: "",
                selectDefaultIndex: {
                    roleType: 0,
                    relationship: 0,
                    gender: 0,
                    isPrimaryContact: 0,
                    ethnicity: 0,
                    education: 0,
                    partyEmber: 0,
                    workStatus: 0,
                    maritalStatus: 0,
                    cardType: 0,
                    healthStatus: 0,
                    residentType: 0,
                    residentialStatus: 0
                },
                selectDefaultName: {
                    roleType: "",
                    relationship: "",
                    gender: "",
                    isPrimaryContact: "",
                    ethnicity: "",
                    education: "",
                    partyEmber: "",
                    workStatus: "",
                    maritalStatus: "",
                    cardType: "",
                    healthStatus: "",
                    residentType: "",
                    residentialStatus: ""
                },
                showSelectDate: false,
                regionList: [],
                nativePlace: "", //籍贯
                residentad: "", //户籍
                homeRegion: "", //居住地
                homeIndex: 0,
                showRegion: false,
                navtivePlaceDefault: [],
                residentadDefault: [],
                isEdit: false,
                from: "",
                type: "",
                id: "",
                showSelectBirthday: false,
                currentTime: Number(new Date()),
                minDate: "",
                goOutMinDate: "",
                isShowPopup: false,
                addressName: "",
                houseList: [],
                volunteerOrgTypeList: ["信州义警", "蓝天救援", "其他"],
                volunteerOrgTypeIndex: [0],
                volunteerOrg: "",
                showVolunteerOrg: false,
                houseTag: "" //房屋标签
            }
        },
        created() {
            this.getHeader()
            this.getAllBizDict()
            this.setCardTypeDefault()
        },
        onReady() {
            this.$refs.form.setRules(this.rules)
        },
        async onShow(option) {
            this.minDate = Number(new Date('1900-01-01')); //设置出生日期选择器最小值
            this.goOutMinDate = Number(new Date('1970-01-01')); //设置外出时间选择器最小值
            await this.getRegionList()
            await this.getAllBizDict()
            this.homeRegion = uni.getStorageSync("curStreet")
            this.form.homeAdcode = this.getHouseRegion(uni.getStorageSync("curStreet")).code;
            this.homeIndex = this.getHouseRegion(uni.getStorageSync("curStreet")).index;
            if (option.from) {
                this.from = option.from;
                if (data.type == 1) {
                    this.houseCode = uni.getStorageSync("siteInfo").houseCode
                }
            }
            this.form.roleName = uni.getStorageSync("activeRole").roleName;
        },
        // onShow() {
        //     console.log(this.form);
        //     if (this.id) {
        //         // this.getHouseholdInfo()
        //         this.getHoldLabel();
        //     }
        // },
        methods: {
            getHouseDetail(code, type) {
                getQrCodeDetail({
                    roleName: uni.getStorageSync("activeRole").roleName,
                    addressCode: code || uni.getStorageSync("siteInfo").houseCode,
                }).then(res => {
                    console.log(res);
                    if (type) {
                        if (res.data.isJur = 1) {
                            this.houseCode = code;
                            this.homeRegion = res.data.townStreetName;
                            this.form.currentAddress = res.data.addressName;
                            console.log("===>", this.getHouseRegion(res.data.townStreetName));
                            this.form.homeAdcode = this.getHouseRegion(res.data.townStreetName).code;
                            this.homeIndex = this.getHouseRegion(res.data.townStreetName).index;
                            if (res.data.userHouseLabelVOList.length) {
                                this.houseTag = res.data.userHouseLabelVOList[0].labelName
                            }
                        } else {
                            uni.showModal({
                                title: "提示!",
                                content: "该区域不是您管辖范围",
                                showCancel: false
                            })
                        }
                    } else {
                        this.houseCode = code;
                        this.homeRegion = res.data.townStreetName;
                        this.form.currentAddress = res.data.addressName;
                        console.log("===>", this.getHouseRegion(res.data.townStreetName));
                        this.form.homeAdcode = this.getHouseRegion(res.data.townStreetName).code;
                        this.homeIndex = this.getHouseRegion(res.data.townStreetName).index;
                        if (res.data.userHouseLabelVOList.length) {
                            this.houseTag = res.data.userHouseLabelVOList[0].labelName
                        }
                    }
                })
            },
            setRegionDefault() {
                getQrCodeDetail({
                    roleName: uni.getStorageSync("activeRole").roleName,
                    addressCode: this.houseCode || uni.getStorageSync("siteInfo").houseCode,
                }).then(res => {
                    this.homeRegion = res.townStreetName;
                    this.form.homeAdcode = this.getHouseRegion(res.townStreetName).code;
                    this.homeIndex = this.getHouseRegion(res.townStreetName).index;
                })
            },
            getHouseRegion(name) {
                for (let i = 0, ii = this.regionList.length; i < ii; i++) {
                    if (this.regionList[i].name == name) {
                        return {
                            index: i,
                            code: this.regionList[i].code
                        }
                    }
                }
            },
            showLabel() {
                let arr = []
                for (let i of this.form.householdLabelList) {
                    arr.push(i.labelName)
                }
                return arr.join(",")
            },
            //选择籍贯
            changeNativeRegion(e) {
                let {
                    code,
                    value
                } = e.detail;
                this.nativePlace = `${value[0]}-${value[1]}-${value[2]}`
                this.form.nativePlaceAdcode = code[2];
            },
            //选择户籍
            changeHouseholdRegion(e) {
                let {
                    code,
                    value
                } = e.detail;
                this.residentad = `${value[0]}-${value[1]}-${value[2]}`
                this.form.residentAdcode = code[2];
            },
            getRegionList() {
                select(361102).then(res => {
                    console.log(res);
                    if (res.code == 200) {
                        this.regionList = res.data;
                    }
                })
            },
            getRegionTree(callback) {
                regionTree().then(res => {
                    console.log("region ==>", res.data)
                    callback(res.data);
                })
            },
            regionSelect(e) {
                console.log(e);
                const [result] = e.value;
                this.homeIndex = e.indexs[0];
                this.homeRegion = result.name;
                this.form.homeAdcode = result.code;
                this.showRegion = false;
            },
            //选择志愿者类型
            confirmVolunteerOrg(e) {
                this.form.volunteerOrg = ''
                const [result] = e.value;
                this.volunteerOrgTypeIndex = e.indexs[0];
                this.volunteerOrg = result;
                if (result != "其他") {
                    this.form.volunteerOrg = result;
                } else {
                    this.form.volunteerOrg = "";
                }
                this.showVolunteerOrg = false;
            },
            setCardTypeDefault() {
                this.$set(this.form, "cardType", 111)
                this.$set(this.selectDefaultIndex, "cardType", 0)
                this.$set(this.selectDefaultName, "cardType", "居民身份证")
            },
            //获取身份证中的出生日期
            getBirthday(idCard) {
                // 提取出生年月日的部分
                let birthday = idCard.substring(6, 14);
                // 将八位数字转换为年月日格式
                let year = birthday.substring(0, 4);
                let month = birthday.substring(4, 6);
                let day = birthday.substring(6);
                // 返回出生日期
                return `${year}-${month}-${day}`;
            },
            async getAllBizDict() {
                // 获取角色关系字典
                await this.getBizDict('roleRelation', this.dataList.relationship)
                // 获取角色字典
                await this.getBizDict('roleType', this.dataList.roleType)
                // 获取民族字典
                await this.getBizDict('nationType', this.dataList.ethnicity)
                // 获取学历字典
                await this.getBizDict('educationType', this.dataList.education)
                // 获取工作状态字典
                await this.getBizDict('workStatusType', this.dataList.workStatus)
                // 获取婚姻状态字典
                await this.getBizDict('marriageStatusType', this.dataList.maritalStatus)
                // 户籍类别的字典
                await this.getBizDict('residentType', this.dataList.residentType)
                // 健康状况的字典
                await this.getBizDict('healthStatus', this.dataList.healthStatus)
                //证件类型字典
                await this.getBizDict('cardType', this.dataList.cardType)
            },
            // 获取业务字典
            async getBizDict(code, list) {
                const param = {
                    code: code
                }
                const res = await bizDictionary(param)
                res.data.forEach(e => {
                    list.push({
                        name: e.dictValue,
                        value: Number(e.dictKey)
                    })
                })
            },
            // 获取住户信息
            async getHouseholdInfo() {
                // 获取所有字典
                await this.getAllBizDict()
                // this.form = data
                getHouseholdDetail({
                    id: this.id
                }).then(res => {
                    if (res.code == 200) {
                        this.form = res.data;
                        let data = res.data;
                        for (let i in this.selectDefaultIndex) {
                            let {
                                index,
                                name
                            } = this.findObjValue(data[i], this.dataList[i])
                            this.selectDefaultIndex[i] = index || 0;
                            this.selectDefaultName[i] = name;
                        }
                        if ((data.idCard && !data.cardType) || (!data.idCard && !data.cardType)) {
                            this.setCardTypeDefault()
                        }
                        if (data.idCard && !data.birthday) {
                            this.form.birthday = this.getBirthday(data.idCard)
                        }
                        if (data.nativePlaceAdName) {
                            this.nativePlace =
                                `${data.nativePlaceProvinceAdName}-${data.nativePlaceCityAdName}-${data.nativePlaceAdName}`
                            this.navtivePlaceDefault = [data.nativePlaceProvinceAdName, data
                                .nativePlaceCityAdName, data.nativePlaceAdName
                            ]
                        }
                        if (data.residentAdName) {
                            this.residentad =
                                `${data.residentProvinceAdName}-${data.residentCityAdName}-${data.residentAdName}`
                            this.residentadDefault = [data.residentProvinceAdName, data
                                .residentCityAdName,
                                data.residentAdName
                            ]
                        }
                        if (data.homeAdcode) {
                            let {
                                index,
                                name
                            } = this.findObjValue(data.homeAdcode, this.regionList, "code")
                            this.homeIndex = index;
                            this.homeRegion = name;
                        } else {
                            this.setRegionDefault();
                        }
                    }
                })
            },
            getHoldLabel() {
                getHouseholdDetail({
                    id: this.id
                }).then(res => {
                    if (res.code == 200) {
                        this.$set(this.form, "householdLabelList", res.data.householdLabelList)
                    }
                })
            },
            // 显示选择弹框
            showSelectBus(title, key) {
                console.log("************" + JSON.stringify(this.dataList))
                this.selectBusList = this.dataList[key]
                console.log("************" + JSON.stringify(this.selectBusList))
                this.selectBusTitle = title
                // this.selectBusModel = model
                this.selectBusKey = key
                this.typeShow = true
            },
            //类型选择确认
            typeSelect(item) {
                const [result] = item.value
                // this[this.selectBusModel] = result.name
                this.form[this.selectBusKey] = result.value
                this.selectDefaultName[this.selectBusKey] = result.name;
                this.selectDefaultIndex[this.selectBusKey] = item.indexs[0];
                this.typeShow = !this.typeShow
            },
            //表单提交
            checks() {
                // console.log("************************************")
                this.$refs.form.validate().then(res => {
                    console.log("*****1111**" + res)
                    // 调用回调函数并返回结果
                    this.$emit('getDataCallback', res);
                })
            },
            // 新增更新操作
            async saveOrUpdate() {
                this.form['houseCode'] = this.houseCode
                this.form.roleName = uni.getStorageSync("activeRole").roleName;
                if (this.form.cardType) {
                    if (this.form.cardType == 111) {
                        if (!this.form.idCard) {
                            // uni.showToast({
                            //     title: "请输入身份证号",
                            //     icon: "none"
                            // })
                            // return;
                        } else {
                            if (this.form.cardNo) {
                                this.form.cardNo = "";
                            }
                            const idCardRegex =
                                /(^\d{15}$)|(^\d{18}$)|(^\d{17}(\d|X|x)$)/
                            if (!idCardRegex.test(this.form.idCard)) {
                                this.$showTips("身份证号有误")
                                return
                            }
                        }
                        if (this.form.idCard && !this.form.birthday) {
                            this.form.birthday = this.getBirthday(this.form.idCard)
                        }
                    } else {
                        if (!this.form.cardNo) {
                            uni.showToast({
                                title: "请输入证件号",
                                icon: "none"
                            })
                            return;
                        } else {
                            if (this.form.idCard) {
                                this.form.idCard = "";
                            }
                        }
                    }
                }
                //  重新赋值
                if (this.form.volunteerOrgTemp) {
                    this.form.volunteerOrg = this.form.volunteerOrgTemp
                }
                const res = await saveOrUpdateHousehold(this.form)
                if (res.code !== 200) {
                    uni.showToast({
                        title: "保存失败",
                        icon: "error",
                        duration: 1500
                    })
                    return
                }
                uni.showToast({
                    title: "保存成功",
                    icon: "success",
                    duration: 1500,
                    success: () => {
                        setTimeout(() => {
                            uni.navigateBack()
                        }, 1500)
                    }
                })
            },
            confirmDate(e) {
                this.form.goOutTime = uni.$u.timeFormat(e.value, 'yyyy-mm-dd')
                this.showSelectDate = false;
            },
            confirmBirthday(e) {
                this.form.birthday = uni.$u.timeFormat(e.value, 'yyyy-mm-dd')
                this.showSelectBirthday = false;
            },
            findObjValue(value, obj, key = "value") {
                let data = {
                    index: "",
                    name: ""
                }
                for (let i = 0, ii = obj.length; i < ii; i++) {
                    if (value == obj[i][key]) {
                        data.index = i;
                        data.name = obj[i].name;
                    }
                }
                return data;
            },
            navTo() {
                let data = JSON.parse(JSON.stringify(this.form));
                // this.$u.func.globalNavigator(
                //     `householdLabel?data=${JSON.stringify(data)}&from=add`)
                if (!this.isEdit) {
                    this.$u.func.globalNavigator(
                        `householdLabel?data=${JSON.stringify(data)}&from=add`)
                } else {
                    this.$u.func.globalNavigator(
                        `householdLabel?data=${JSON.stringify(data)}`)
                }
            },
            delAction() {
                uni.showModal({
                    title: "提示!",
                    content: "是否要删除该家人信息?",
                    success: (res) => {
                        if (res.confirm) {
                            this.ddelActionRequest()
                        }
                    }
                })
            },
            ddelActionRequest() {
                removeHousehold(this.form.id).then(res => {
                    if (res.code == 200) {
                        setTimeout(() => {
                            uni.navigateBack();
                        }, 1000)
                    } else {
                        uni.showToast({
                            title: "删除失败",
                            icon: "error",
                            duration: 1500
                        })
                    }
                })
            },
            queryHouseList(pageNo, pageSize) {
                getHouseList({
                    current: pageNo,
                    size: pageSize,
                    // townStreetName: uni.getStorageSync("curStreet"),
                    address: this.addressName
                }).then(res => {
                    this.$refs.paging.complete(res.data.records);
                })
            },
            refreshList() {
                this.$refs.paging.reload();
            },
            searchAddress() {
                this.$refs.paging.reload();
            },
            clearKeyword() {
                this.addressName = ""
                this.$refs.paging.reload();
            },
            //选择房屋
            selectHouse(i) {
                this.houseCode = i.houseCode;
                this.form.houseCode = i.houseCode;
                this.form.currentAddress = i.address;
                if (i.userHouseLabelVOList.length) {
                    this.houseTag = i.userHouseLabelVOList[0].labelName;
                }
                this.isShowPopup = false;
            },
            onScan() {
                uni.scanCode({
                    success: (res) => {
                        let obj = this.getUrlParams(res.result);
                        this.getHouseDetail(obj.stdId, 1);
                    }
                })
            },
            getUrlParams(url) {
                let urlStr = url.split('?')[1]
                let obj = {};
                let paramsArr = urlStr.split('&')
                for (let i = 0, len = paramsArr.length; i < len; i++) {
                    let arr = paramsArr[i].split('=')
                    obj[arr[0]] = arr[1];
                }
                return obj
            },
            navToHouseTag() {
                uni.navigateTo({
                    url: `/subPackage/house/roomControl/index?code=${this.houseCode}&from=home`
                })
            },
            //识别身份证信息
            recognizeSuccess(e, index) {
                let {
                    detail: {
                        name,
                        id,
                        address,
                        gender,
                        nationality
                    }
                } = e;
                this.$set(this.form, "name", name.text);
                this.$set(this.form, "idCard", id.text);
                this.selectDefaultName.gender = gender.text; //性别
                this.selectDefaultName.ethnicity = `${nationality.text}族`; //民族
                this.form.gender = this.getValue(this.dataList.gender, gender.text).value;
                this.form.ethnicity = this.getValue(this.dataList.ethnicity, `${nationality.text}族`)
                    .value;
                this.selectDefaultIndex.gender = [this.getValue(this.dataList.gender, gender.text).index];
                this.selectDefaultIndex.ethnicity = [this.getValue(this.dataList.ethnicity, `${nationality.text}族`)
                    .index
                ];
                let {
                    province,
                    city,
                    district
                } = this.extractAddressComponents(address.text);
                // this.residentadDefault = [province, city, district]; //户籍地区
                // this.residentad = `${province}-${city}-${district}`;
                this.$set(this.form, "hukouRegistration", address.text);
                // this.getRegionTree(data => {
                //     for (let i = 0, ii = data.length; i < ii; i++) {
                //         if (data[i].name == province) {
                //             for (let j = 0, jj = data[i].children.length; j < jj; j++) {
                //                 for (let k = 0, kk = data[i].children[j].children.length; k < kk; k++) {
                //                     if (data[i].children[j].children[k].name == district) {
                //                         this.$set(this.form, "residentAdcode", data[i].children[j].children[k].id);
                //                         break;
                //                     }
                //                 }
                //             }
                //         }
                //     }
                // })
            },
            getValue(arr, name) {
                for (let i = 0, ii = arr.length; i < ii; i++) {
                    if (arr[i].name == name) {
                        return {
                            index: i,
                            value: arr[i].value
                        }
                    }
                }
            },
            extractAddressComponents(address) {
                const provinceRegex = /(?<province>[^省]+省|[^自治区]+自治区|[^市]+市)/;
                const cityRegex = /(?<city>[^市]+市|[^县]+县)/;
                const districtRegex = /(?<district>[^区]+区|[^县]+县|[^乡]+乡|[^镇]+镇|[^街]+街)/;
                let province, city, district;
                const provinceMatch = address.match(provinceRegex);
                if (provinceMatch && provinceMatch.groups.province) {
                    province = provinceMatch.groups.province;
                    const cityMatch = address.substring(address.indexOf(province) + province.length).match(cityRegex);
                    if (cityMatch && cityMatch.groups.city) {
                        city = cityMatch.groups.city;
                        const districtMatch = address.substring(address.indexOf(city) + city.length).match(districtRegex);
                        if (districtMatch && districtMatch.groups.district) {
                            district = districtMatch.groups.district;
                        }
                    }
                }
                return {
                    province,
                    city,
                    district
                };
            }
        }
    }
</script>
<style scoped lang="scss">
    .container {
        position: relative;
        width: 100%;
        height: 100%;
        display: flex;
        flex-direction: column;
        background: #F5F5F5;
        .main {
            // position: relative;
            // flex: 1;
            display: flex;
            flex-direction: column;
            .content {
                // height: 0;
                // flex: 1;
                // overflow-y: auto;
                // padding: 20rpx 0 0;
                // padding-bottom: 160rpx;
                // padding-bottom: 36rpx;
            }
            .btn-group {
                display: flex;
                justify-content: space-around;
                align-items: center;
                height: 116rpx;
                position: fixed;
                left: 0;
                bottom: 0;
                width: 100%;
            }
        }
        // .box-title {
        //     padding: 10rpx 10rpx;
        // }
        .event-info {
            background-color: #ffffff;
            margin: 20rpx 30rpx;
            padding: 30rpx;
            border-radius: 8rpx;
            /deep/ .u-form-item {
                background-color: #ffffff;
                padding: 5px 20px;
                border-bottom: 1rpx solid #eff1f3;
            }
            /deep/ .u-input__content__field-wrapper__field {
                height: auto;
                white-space: pre-wrap;
            }
        }
        .event-pic {
            background-color: #ffffff;
            padding: 40rpx 30rpx;
        }
    }
    .region {
        width: 100%;
        height: 100%;
        .region-picker {
            width: 100%;
            heght: 100%;
        }
        .c-c0 {
            color: #c0c4cc
        }
        .c-30 {
            color: #303133;
        }
    }
    .footer {
        width: 100%;
        padding: 20rpx 30rpx;
        box-sizing: border-box;
        z-index: 999;
        position: fixed;
        bottom: 0;
        left: 0;
        backgroun-color: #fff;
        padding-bottom: calc(env(safe-area-inset-bottom) + 20rpx);
        box-shadow: 0rpx 0rpx 10rpx 1rpx rgba(0, 0, 0, 0.1);
        .footer-btn {
            width: 48%;
            height: 78rpx;
            line-height: 78rpx;
            border-radius: 8rpx 8rpx 8rpx 8rpx;
            font-size: 32rpx;
            // color: #fff;
        }
        .add-btn {
            width: 100%;
            background: linear-gradient(163deg, #01BDFC 0%, #017BFC 100%);
        }
        .del-btn {
            // background: linear-gradient(163deg, #FE6C5C 0%, #EA1F1F 99%);
            background-color: transparent;
            border: 1px solid currentColor;
        }
        .save-btn {
            background: linear-gradient(163deg, #01BDFC 0%, #017BFC 100%);
        }
    }
    .popup-content {
        width: 100%;
        padding: 0 30rpx 30rpx;
        box-sizing: border-box;
        background-color: #fff;
        height: 800rpx;
        .popup-title {
            padding: 30rpx 0;
            text-align: center;
            font-weight: bold;
        }
        .popup-list {
            // height: 500rpx;
            margin-top: 20rpx;
        }
        .popup-list-item {
            padding: 20rpx 0;
            border-bottom: 1px solid #f1f1f1;
            position: relative;
        }
        .address-name {
            width: 90%;
        }
        .check-icon {
            position: absolute;
            right: 20rpx;
            top: 20rpx;
        }
    }
    .top {
        padding: 0 30rpx;
        marign: 20rpx 0;
        border-radius: 8rpx;
    }
    .top-item {
        width: 48%;
        padding: 20rpx;
        border-radius: 8rpx;
        box-sizing: border-box;
    }
</style>
subPackage/house/member/add.vue
@@ -24,7 +24,6 @@
                <u-form labelWidth="70" :model="form" :rules="rules" ref="form">
                    <view class="event-info">
                        <view class="box-title">
                            <box-title title="基础信息"></box-title>
                        </view>
@@ -46,304 +45,26 @@
                            </u--input>
                            <u-icon slot="right" name="arrow-right"></u-icon>
                        </u-form-item>
                        <u-form-item class="form-item" labelWidth="110" label="姓名" required prop="name">
                            <u--input border="none" v-model="form.name" placeholder="请输入姓名">
                            </u--input>
                        </u-form-item>
                        <u-form-item @click="showSelectBus('性别','gender')" class="form-item" labelWidth="110" label="性别"
                            prop="gender">
                            <u--input border="none" v-model="selectDefaultName.gender" disabled disabledColor="#ffffff"
                                placeholder="请选择性别">
                            </u--input>
                            <u-icon slot="right" name="arrow-right"></u-icon>
                        </u-form-item>
                        <u-form-item @click="showSelectBus('证件类型','cardType')" class="form-item" labelWidth="110"
                            label="证件类型" prop="gender">
                            <u--input border="none" v-model="selectDefaultName.cardType" disabled
                                disabledColor="#ffffff" placeholder="请选择证件类型">
                            </u--input>
                            <u-icon slot="right" name="arrow-right"></u-icon>
                        </u-form-item>
                        <u-form-item v-if="form.cardType == 111" class="form-item" labelWidth="110" label="身份证号码"
                            prop="idCard">
                            <u--input border="none" type="idcard " v-model="form.idCard" placeholder="请输入身份证号码">
                            </u--input>
                        </u-form-item>
                        <u-form-item v-if="form.cardType && form.cardType != 111" class="form-item" labelWidth="110"
                            label="证件号码" prop="cardNo">
                            <u--input border="none" v-model="form.cardNo" placeholder="请输入证件号码">
                            </u--input>
                        </u-form-item>
                        <u-form-item class="form-item" labelWidth="110" label="手机号码" prop="phoneNumber" required>
                            <u--input border="none" type="number" v-model="form.phoneNumber" placeholder="请输入手机号码">
                            </u--input>
                        </u-form-item>
                        <u-form-item class="form-item" labelWidth="110" label="户籍地区" prop="residentAdcode">
                            <view class="region">
                                <picker mode="region" :value="residentadDefault" @change="changeHouseholdRegion">
                                    <view class="region-picker c-c0" v-if="!residentad">
                                        请选择户籍地区
                                    </view>
                                    <view class="region-picker c-30" v-if="residentad">
                                        {{residentad}}
                                    </view>
                                </picker>
                            </view>
                            <u-icon slot="right" name="arrow-right"></u-icon>
                        </u-form-item>
                        <u-form-item @click="showSelectBus('民族','ethnicity')" class="form-item" labelWidth="110"
                            label="民族" prop="ethnicity">
                            <u--input border="none" v-model="selectDefaultName.ethnicity" disabled
                                disabledColor="#ffffff" placeholder="请选择民族">
                            </u--input>
                            <u-icon slot="right" name="arrow-right"></u-icon>
                        </u-form-item>
                        <u-form-item @click="showSelectBus('是否党员','partyEmber')" class="form-item" labelWidth="110"
                            label="是否党员" prop="partyEmber">
                            <u--input border="none" v-model="selectDefaultName.partyEmber" disabled
                                disabledColor="#ffffff" placeholder="请选择是否党员">
                            </u--input>
                            <u-icon slot="right" name="arrow-right"></u-icon>
                        </u-form-item>
                        <u-form-item class="form-item" labelWidth="110" label="职业类别" prop="occupation ">
                            <u--input border="none" v-model="form.occupation " placeholder="请输入职业类别">
                            </u--input>
                        </u-form-item>
                        <u-form-item @click="showSelectBus('婚姻状态','maritalStatus')" class="form-item" labelWidth="110"
                            label="婚姻状态" prop="maritalStatus">
                            <u--input border="none" v-model="selectDefaultName.maritalStatus" disabled
                                disabledColor="#ffffff" placeholder="请选择婚姻状态">
                            </u--input>
                            <u-icon slot="right" name="arrow-right"></u-icon>
                        </u-form-item>
                        <u-form-item class="form-item" labelWidth="110" label="标签" @click="navTo">
                            <view class="">
                                <text style="color: #c0c4cc;"
                                    v-if="!form.householdLabelList || !form.householdLabelList.length">请选择标签</text>
                                <text class="f-28" v-else>{{showLabel()}}</text>
                            </view>
                            <u-icon slot="right" name="arrow-right"></u-icon>
                        </u-form-item>
                        <u-form-item class="form-item" @click="showVolunteerOrg = true" labelWidth="120" label="志愿者组织"
                            prop="volunteerOrg">
                            <u--input border="none" v-model="volunteerOrg" disabled disabledColor="#ffffff"
                                placeholder="请选择志愿者组织">
                            </u--input>
                            <u-icon slot="right" name="arrow-right"></u-icon>
                        </u-form-item>
                        <u-form-item v-if="volunteerOrg == '其他'" required class="form-item" labelWidth="120"
                            label="其他志愿者组织" prop="volunteerOrg">
                            <u--input border="none" v-model="form.volunteerOrg" placeholder="请输入其他志愿者组织">
                            </u--input>
                        </u-form-item>
                        <u-form-item @click="showSelectBus('与业主关系','relationship')" class="form-item" labelWidth="120"
                            label="与业主关系" required prop="relationship">
                            <u--input border="none" v-model="selectDefaultName.relationship" disabled
                                disabledColor="#ffffff" placeholder="请选择与业主关系">
                            </u--input>
                            <u-icon slot="right" name="arrow-right"></u-icon>
                        </u-form-item>
                        <u-form-item v-if="form.cardType && form.cardType != 111" class="form-item" labelWidth="120"
                            label="出生日期" prop="birthday" @click="showSelectBirthday = true">
                            <u--input border="none" v-model="form.birthday" disabled disabledColor="#ffffff"
                                placeholder="请选择出生日期">
                            </u--input>
                            <u-icon slot="right" name="arrow-right"></u-icon>
                        </u-form-item>
                        <u-form-item class="form-item" labelWidth="110" label="其它联系方式" prop="otherContact">
                            <u--input border="none" v-model="form.otherContact" placeholder="请输入其它联系方式">
                            </u--input>
                        </u-form-item>
                        <u-form-item @click="showSelectBus('是否主要联系人','isPrimaryContact')" class="form-item"
                            labelWidth="110" label="是否主要联系人" prop="isPrimaryContact">
                            <u--input border="none" v-model="selectDefaultName.isPrimaryContact" disabled
                                disabledColor="#ffffff" placeholder="请选择是否主要联系人">
                            </u--input>
                            <u-icon slot="right" name="arrow-right"></u-icon>
                        </u-form-item>
                        <u-form-item @click="showSelectBus('居住情况','residentialStatus')" class="form-item"
                            labelWidth="100" label="居住情况" prop="residentialStatus">
                            <u--input border="none" v-model="selectDefaultName.residentialStatus" disabled
                                disabledColor="#ffffff" placeholder="请选择居住情况">
                            </u--input>
                            <u-icon slot="right" name="arrow-right"></u-icon>
                        </u-form-item>
                        <!-- <u-form-item class="form-item" labelWidth="110" label="港澳台通行证" prop="hkmtPass">
                            <u--input border="none" v-model="form.hkmtPass" placeholder="请输入">
                            </u--input>
                        </u-form-item>
                        <u-form-item class="form-item" labelWidth="110" label="护照" prop="passport">
                            <u--input border="none" v-model="form.passport" placeholder="请输入">
                            </u--input>
                        </u-form-item> -->
                        <u-form-item class="form-item" labelWidth="110" label="居住地区" prop="homeAdcode"
                            @click="showRegion = true">
                            <u--input border="none" v-model="homeRegion" disabled disabledColor="#ffffff"
                                placeholder="请选择居住地区">
                            </u--input>
                            <u-icon slot="right" name="arrow-right"></u-icon>
                        </u-form-item>
                        <!-- <u-form-item class="form-item  address-row" labelWidth="110" label="现居住地" prop="currentAddress">
                            <u-textarea border="none" :disabled="form.source ==1?true:false" disabledColor="#ffffff"
                                v-model="form.currentAddress" placeholder="请输入现居住地">
                            </u-textarea>
                        </u-form-item> -->
                        <u-form-item class="form-item" labelWidth="110" label="籍贯地区" prop="nativePlaceAdcode">
                            <view class="region">
                                <picker mode="region" :value="navtivePlaceDefault" @change="changeNativeRegion">
                                    <view class="region-picker c-c0" v-if="!nativePlace">
                                        请选择籍贯地区
                                    </view>
                                    <view class="region-picker c-30" v-if="nativePlace">
                                        {{nativePlace}}
                                    </view>
                                </picker>
                            </view>
                            <u-icon slot="right" name="arrow-right"></u-icon>
                        </u-form-item>
                        <u-form-item @click="showSelectBus('户籍类型','residentType')" class="form-item" labelWidth="110"
                            label="户籍类型" prop="residentType">
                            <u--input border="none" v-model="selectDefaultName.residentType" disabled
                                disabledColor="#ffffff" placeholder="请选择户籍类型">
                            </u--input>
                            <u-icon slot="right" name="arrow-right"></u-icon>
                        </u-form-item>
                        <u-form-item class="form-item" labelWidth="110" label="户籍地址" prop="hukouRegistration">
                            <u-textarea border="none" v-model="form.hukouRegistration" placeholder="请输入户籍地址">
                            </u-textarea>
                        </u-form-item>
                        <u-form-item @click="showSelectBus('学历','education')" class="form-item" labelWidth="110"
                            label="学历" prop="education">
                            <u--input border="none" v-model="selectDefaultName.education" disabled
                                disabledColor="#ffffff" placeholder="请选择学历">
                            </u--input>
                            <u-icon slot="right" name="arrow-right"></u-icon>
                        </u-form-item>
                        <u-form-item class="form-item" labelWidth="110" label="工作单位" prop="employer">
                            <u--input border="none" v-model="form.employer" placeholder="请输入工作单位">
                            </u--input>
                        </u-form-item>
                        <u-form-item class="form-item" labelWidth="110" label="工作单位地址" prop="cmpyRegAddr">
                            <u-textarea border="none" v-model="form.cmpyRegAddr" placeholder="请输入工作单位地址">
                            </u-textarea>
                        </u-form-item>
                        <u-form-item @click="showSelectBus('工作状态','workStatus')" class="form-item" labelWidth="110"
                            label="工作状态" prop="workStatus">
                            <u--input border="none" v-model="selectDefaultName.workStatus" disabled
                                disabledColor="#ffffff" placeholder="请选择工作状态">
                            </u--input>
                            <u-icon slot="right" name="arrow-right"></u-icon>
                        </u-form-item>
                        <u-form-item class="form-item" labelWidth="110" label="宗教信仰" prop="religiousBelief ">
                            <u--input border="none" v-model="form.religiousBelief" placeholder="请输入宗教信仰">
                            </u--input>
                        </u-form-item>
                        <u-form-item @click="showSelectBus('健康状态','healthStatus')" class="form-item" labelWidth="110"
                            label="健康状态" prop="healthStatus">
                            <u--input border="none" v-model="selectDefaultName.healthStatus" disabled
                                disabledColor="#ffffff" placeholder="请选择健康状态">
                            </u--input>
                            <u-icon slot="right" name="arrow-right"></u-icon>
                        </u-form-item>
                        <u-form-item v-if="selectDefaultIndex.healthStatus == 2" class="form-item" labelWidth="110"
                            label="疾病名称" prop="diseaseName">
                            <u--input border="none" v-model="form.diseaseName" placeholder="请输入疾病名称">
                            </u--input>
                        </u-form-item>
                        <u-form-item class="form-item" labelWidth="110" label="外出详址" prop="goOutAddr">
                            <u-textarea border="none" v-model="form.goOutAddr" placeholder="请输入外出详址">
                            </u-textarea>
                        </u-form-item>
                        <u-form-item class="form-item" labelWidth="110" label="外出原因" prop="goOutReason  ">
                            <u--input border="none" v-model="form.goOutReason" placeholder="请输入外出原因">
                            </u--input>
                        </u-form-item>
                        <u-form-item class="form-item" labelWidth="110" label="外出时间" prop="goOutTime"
                            @click="showSelectDate = true">
                            <u--input border="none" v-model="form.goOutTime  " disabled disabledColor="#ffffff"
                                placeholder="请选择外出时间">
                            </u--input>
                            <u-icon slot="right" name="arrow-right"></u-icon>
                        </u-form-item>
                        <u-form-item class="form-item" labelWidth="110" label="外出去向" prop="goOutWhere">
                            <u--input border="none" v-model="form.goOutWhere" placeholder="请输入外出去向">
                            </u--input>
                        </u-form-item>
                        <u-form-item class="form-item" labelWidth="110" label="车牌号" prop="cardNumber">
                            <u--input border="none" v-model="form.cardNumber" placeholder="多个用中划线(-)隔开">
                            </u--input>
                        </u-form-item>
                        <u-form-item class="form-item" labelWidth="110" label="备注" prop="remark">
                            <u--input border="none" v-model="form.remark" placeholder="补充说明">
                            </u--input>
                        </u-form-item>
                    </view>
                </u-form>
                <view class="info" v-for="(item, index) in personNumArr" :key="index">
                    <view class="">
                        <userInfo @getDataCallback="handleData" id="formRef" ref="formRef"></userInfo>
                    </view>
                </view>
                <view class="add-person" style="padding:20rpx 30rpx;" v-if="!currentId">
                    <u-button type="success" plain @click="addPerson">再加一人</u-button>
                </view>
            </view>
            <!-- <view class="footer flex j-c-s-b a-i-c bgc-ff" v-if="(type == 1 && from == 'family')  || !from">
                <ocr-navigator @onSuccess="recognizeSuccess()" certificateType="idCard" :opposite="false"
                    style="width:48%;">
                    <view class="del-btn c-main footer-btn flex j-c-c a-i-c" style="width:100%;">
                        <u-icon name="scan" color="#017BFC" size="24"></u-icon>
                        <text class="f-26 " style="margin-left: 10rpx;">身份证信息识别</text>
                    </view>
                </ocr-navigator>
                <button class="save-btn footer-btn c-ff" @click="submit">保存</button>
            </view> -->
            <footer-btn v-if="(type == 1 && from == 'family')  || !from" :text="addOrUpdateTitle" @click="submit" />
        </view>
        <!-- 事件类型下拉框 -->
        <!--     <select-bus v-if="typeShow" :show="typeShow" v-model="form[selectBusModel]" type="radio"
            :popupTitle="selectBusTitle" :dataLists="selectBusList" @cancel="typeShow = false" @submit="typeSelect">
        </select-bus> -->
        <u-picker :defaultIndex="[selectDefaultIndex[selectBusKey]]" :closeOnClickOverlay="true" v-if="typeShow"
            :show="typeShow" :columns="[selectBusList]" @close="typeShow = false" @cancel="typeShow = false"
            keyName="name" @confirm="typeSelect"></u-picker>
        <u-datetime-picker :show="showSelectDate" v-model="currentTime" mode="date" :formatter="formatter"
            @confirm="confirmDate" @cancel="showSelectDate = false" :minDate="goOutMinDate"></u-datetime-picker>
        <u-datetime-picker :show="showSelectBirthday" v-model="currentTime" mode="date" @confirm="confirmBirthday"
            @cancel="showSelectBirthday = false" :minDate="minDate"></u-datetime-picker>
        <u-picker :defaultIndex="[homeIndex]" :closeOnClickOverlay="true" :show="showRegion" :columns="[regionList]"
            @close="showRegion = false" @cancel="showRegion = false" keyName="name" @confirm="regionSelect"></u-picker>
        <u-picker :defaultIndex="[volunteerOrgTypeIndex]" :closeOnClickOverlay="true" :show="showVolunteerOrg"
            :columns="[volunteerOrgTypeList]" @close="showRegion = false" @cancel="showVolunteerOrg = false"
            @confirm="confirmVolunteerOrg"></u-picker>
        <u-popup :show="isShowPopup" mode="bottom" :round="12" closeable="true" @close="isShowPopup = false">
            <view class="popup-content">
@@ -382,7 +103,8 @@
    import {
        getHouseholdDetail,
        saveOrUpdateHousehold,
        removeHousehold
        removeHousehold,
        saveOrUpdateHouseholdBatch
    } from '@/api/house/household.js'
    import {
        bizDictionary
@@ -399,10 +121,12 @@
    } from "@/api/house/house.js"
    import boxTitle from '../components/boxTitle/index2.vue'
    import userInfo from '../components/userInfo.vue'
    export default {
        components: {
            selectBus,
            boxTitle
            boxTitle,
            userInfo
        },
        mixins: [uploadMixin],
        data() {
@@ -427,6 +151,12 @@
                        type: 'string',
                        required: true,
                        message: '请填写姓名',
                        trigger: ['change', 'blur'],
                    },
                    'currentAddress': {
                        type: 'string',
                        required: true,
                        message: '请填写房屋',
                        trigger: ['change', 'blur'],
                    },
                    'volunteerOrgTemp': {
@@ -581,7 +311,10 @@
                volunteerOrgTypeIndex: [0],
                volunteerOrg: "",
                showVolunteerOrg: false,
                houseTag: "" //房屋标签
                houseTag: "", //房屋标签
                personNumArr: [{}],
                personNum: 0
            }
        },
        created() {
@@ -591,16 +324,18 @@
            this.$refs.form.setRules(this.rules)
        },
        async onLoad(option) {
            this.personNum++;
            // this.personNumArr.push(1);
            this.minDate = Number(new Date('1900-01-01')); //设置出生日期选择器最小值
            this.goOutMinDate = Number(new Date('1970-01-01')); //设置外出时间选择器最小值
            // const data = JSON.parse(option.data)
            // this.houseCode = data.houseCode;
            await this.getRegionList()
            await this.getAllBizDict()
            // await this.getAllBizDict()
            this.setCardTypeDefault()
            this.homeRegion = uni.getStorageSync("curStreet")
            this.form.homeAdcode = this.getHouseRegion(uni.getStorageSync("curStreet")).code;
            this.homeIndex = this.getHouseRegion(uni.getStorageSync("curStreet")).index;
            // this.form.homeAdcode = this.getHouseRegion(uni.getStorageSync("curStreet")).code;
            // this.homeIndex = this.getHouseRegion(uni.getStorageSync("curStreet")).index;
            // this.getHouseDetail();
            // this.type = data.type;
            // if (data.id) {
@@ -642,6 +377,17 @@
        },
        methods: {
            addPerson() {
                this.personNum++
                this.personNumArr.push(1)
                // let that = this
                // that.selectComponent('#formRef').$vm.checks()
            },
            deletePerson(index) {
                this.personNum--;
                this.personNumArr.splice(index, 1)
            },
            getHouseDetail(code, type) {
                getQrCodeDetail({
@@ -922,59 +668,69 @@
            },
            //表单提交
            submit() {
                this.$refs.form.validate().then(res => {
                    this.saveOrUpdate();
                let that = this
                // that.$refs.formRef.checks()
                that.$refs.form.validate().then(res => {
                    that.selectComponent('#formRef').$vm.checks()
                })
            },
            handleData(res) {
                console.log("-----------" + res)
                if (res) {
                    this.saveOrUpdate();
                }
            },
            // 新增更新操作
            async saveOrUpdate() {
                this.form['houseCode'] = this.houseCode
                this.form.roleName = uni.getStorageSync("activeRole").roleName;
                if (this.form.cardType) {
                    if (this.form.cardType == 111) {
                        if (!this.form.idCard) {
                            // uni.showToast({
                            //     title: "请输入身份证号",
                            //     icon: "none"
                            // })
                            // return;
                        } else {
                const placePractitioner = []
                this.$refs.formRef.forEach(item => {
                    item.form['houseCode'] = this.houseCode
                    item.form.roleName = uni.getStorageSync("activeRole").roleName;
                    if (!item.form.relationship) {
                        item.form.relationship = 19
                    }
                    if (item.form.cardType) {
                        if (item.form.cardType == 111) {
                            if (!item.form.idCard) {} else {
                                if (item.form.cardNo) {
                                    item.form.cardNo = "";
                                }
                                const idCardRegex =
                                    /(^\d{15}$)|(^\d{18}$)|(^\d{17}(\d|X|x)$)/
                            if (this.form.cardNo) {
                                this.form.cardNo = "";
                                if (!idCardRegex.test(item.form.idCard)) {
                                    this.$showTips("身份证号有误")
                                    return
                                }
                            }
                            const idCardRegex =
                                /(^\d{15}$)|(^\d{18}$)|(^\d{17}(\d|X|x)$)/
                            if (!idCardRegex.test(this.form.idCard)) {
                                this.$showTips("身份证号有误")
                                return
                            if (item.form.idCard && !item.form.birthday) {
                                item.form.birthday = this.getBirthday(item.form.idCard)
                            }
                        }
                        if (this.form.idCard && !this.form.birthday) {
                            this.form.birthday = this.getBirthday(this.form.idCard)
                        }
                    } else {
                        if (!this.form.cardNo) {
                            uni.showToast({
                                title: "请输入证件号",
                                icon: "none"
                            })
                            return;
                        } else {
                            if (this.form.idCard) {
                                this.form.idCard = "";
                            if (!item.form.cardNo) {
                                uni.showToast({
                                    title: "请输入证件号",
                                    icon: "none"
                                })
                                return;
                            } else {
                                if (item.form.idCard) {
                                    item.form.idCard = "";
                                }
                            }
                        }
                    }
                    //  重新赋值
                    // if (item.form.volunteerOrgTemp) {
                    //     item.form.volunteerOrg = item.form.volunteerOrgTemp
                    // }
                    placePractitioner.push(item.form)
                })
                this.personNumArr = placePractitioner
                let datas = {
                    householdVOList: this.personNumArr
                }
                //  重新赋值
                if (this.form.volunteerOrgTemp) {
                    this.form.volunteerOrg = this.form.volunteerOrgTemp
                }
                const res = await saveOrUpdateHousehold(this.form)
                const res = await saveOrUpdateHouseholdBatch(datas)
                if (res.code !== 200) {
                    uni.showToast({
                        title: "保存失败",