Lou
2024-03-20 e697d545706a3d95f4f9c02d112901d5afac3bf0
更新
4 files modified
8 files added
1783 ■■■■■ changed files
api/houseRental/houseRental.js 26 ●●●●● patch | view | raw | blame | history
api/reside/reside.js 55 ●●●●● patch | view | raw | blame | history
components/btn/actionBtn.vue 118 ●●●●● patch | view | raw | blame | history
pages.json 50 ●●●●● patch | view | raw | blame | history
pages/home/index.vue 14 ●●●● patch | view | raw | blame | history
subPackage/reside/detail.vue 122 ●●●●● patch | view | raw | blame | history
subPackage/reside/edit.vue 216 ●●●●● patch | view | raw | blame | history
subPackage/reside/list.vue 287 ●●●●● patch | view | raw | blame | history
subPackage/reside/record.vue 109 ●●●●● patch | view | raw | blame | history
subPackage/workbench/components/rentForm.vue 82 ●●●●● patch | view | raw | blame | history
subPackage/workbench/views/auditRental.vue 691 ●●●●● patch | view | raw | blame | history
subPackage/workbench/views/rental.vue 13 ●●●● patch | view | raw | blame | history
api/houseRental/houseRental.js
@@ -75,12 +75,22 @@
        method: 'GET',
        params
    })
}
export const confirmHouseRental = (data) => {
    return http.request({
        url: 'blade-houseRental/houseRental/confirmHouseRental',
        method: 'POST',
        data
    })
}
//出租房审核
export const confirmHouseRental = (data) => {
    return http.request({
        url: 'blade-houseRental/houseRental/confirmHouseRental',
        method: 'POST',
        data
    })
}
//出租房审核
export const getRentalDetail = (params) => {
    return http.request({
        url: 'blade-houseTenant/houseTenant/detail',
        method: 'GET',
        params
    })
}
api/reside/reside.js
New file
@@ -0,0 +1,55 @@
import http from '@/http/api.js'
//获取居住证申请列表
export const getResideApplyList = (params) => {
    return http.request({
        url: '/blade-taskResidencePermitApply/taskResidencePermitApply/page',
        method: 'get',
        params: {
            ...params
        }
    })
}
//添加居住证申请
export const saveResideApply = (data) => {
    return http.request({
        url: '/blade-taskResidencePermitApply/taskResidencePermitApply/save',
        method: 'POST',
        data: data
    })
}
//获取居住证申请详情
export const getResideApplyDetail = (params) => {
    return http.request({
        url: '/blade-taskResidencePermitApply/taskResidencePermitApply/detail',
        method: 'get',
        params: {
            ...params
        }
    })
}
//审核居住证申请
export const auditResideApply = (data) => {
    return http.request({
        url: '/blade-taskResidencePermitApply/taskResidencePermitApply/auditing',
        method: 'POST',
        data: data
    })
}
//获取居住证申请提交记录列表
export const getResideApplyRecord = (params) => {
    return http.request({
        url: '/blade-taskResidencePermitApply/taskResidencePermitApply/list',
        method: 'get',
        params: {
            ...params
        }
    })
}
components/btn/actionBtn.vue
New file
@@ -0,0 +1,118 @@
<template>
    <view class="">
        <view class="footer flex a-i-c j-c-s-b">
            <button class="footer-btn" @click="submit(2)">通过</button>
            <button class="footer-btn" @click="open()">驳回</button>
        </view>
        <u-modal :show="isShowModal" title="备注" :showConfirmButton="false">
            <view class="modal-content">
                <u-textarea v-model="remark" placeholder="请输入驳回原因"></u-textarea>
                <view class="modal-btn flex j-c-s-b a-i-c" slot="confirmButton">
                    <button class="modal-btn-item c-main f-30" @click="isShowModal = false">取消</button>
                    <button class="modal-btn-item bgc-main f-30 c-ff" @click="submit(3)">确定</button>
                </view>
            </view>
        </u-modal>
    </view>
</template>
<script>
    export default {
        name: "auditAction",
        data() {
            return {
                isShowModal: false,
                remark: ""
            }
        },
        methods: {
            open() {
                this.isShowModal = true;
            },
            close() {
                this.isShowModal = false;
            },
            submit(type) {
                let data = {
                    type,
                    remark: this.remark
                }
                if (type == 3 && !this.remark) {
                    uni.showToast({
                        title: "请输入驳回原因",
                        icon: "none"
                    })
                    return
                }
                this.$emit("handle", data)
                if (type == 3) {
                    this.close()
                }
            }
        }
    }
</script>
<style lang="scss" scoped>
    .footer {
        width: 100%;
        padding: 20rpx 30rpx;
        box-sizing: border-box;
        position: fixed;
        bottom: 0;
        left: 0;
        background-color: #fff;
        z-index: 10;
        padding-bottom: calc(env(safe-area-inset-bottom) + 20rpx);
        z-index: 999;
        background-color: #fff;
        box-shadow: 0rpx 0rpx 10rpx 1rpx rgba(0, 0, 0, 0.1);
        .footer-btn {
            width: 300rpx;
            height: 78rpx;
            border-radius: 8rpx;
            font-size: 32rpx;
            color: #fff;
            border: none;
            background: linear-gradient(163deg, #01BDFC 0%, #017BFC 100%);
        }
        .footer-btn:after {
            border: none;
        }
    }
    .modal-content {
        width: 100%;
        .modal-btn {
            width: 100%;
            padding: 40rpx 0 0;
            .modal-btn-item {
                width: 240rpx;
                height: 74rpx;
                line-height: 74rpx;
                border-radius: 35rpx;
                border: none;
                padding: 0;
                margin: 0;
            }
            .modal-btn-item:first-child {
                border: 1px solid currentColor;
                background: transparent;
            }
        }
    }
    /deep/ .u-modal__content {
        padding-bottom: 20rpx !important;
    }
</style>
pages.json
@@ -686,6 +686,15 @@
                        "navigationBarBackgroundColor": "#fff",
                        "navigationBarTextStyle": "black"
                    }
                },
                {
                    "path": "views/auditRental",
                    "style": {
                        "navigationBarTitleText": "出租屋详情",
                        "enablePullDownRefresh": false,
                        "navigationBarBackgroundColor": "#fff",
                        "navigationBarTextStyle": "black"
                    }
                }
            ]
        },
@@ -947,7 +956,48 @@
            ]
        },
        {
            "root": "subPackage/reside",
            "pages": [{
                    "path": "list",
                    "style": {
                        "navigationBarTitleText": "居住证管理",
                        "navigationBarBackgroundColor": "#fff",
                        "navigationBarTextStyle": "black",
                        "enablePullDownRefresh": false
                    }
                },
                {
                    "path": "edit",
                    "style": {
                        "navigationBarTitleText": "居住证申请",
                        "navigationBarBackgroundColor": "#fff",
                        "navigationBarTextStyle": "black",
                        "enablePullDownRefresh": false
                    }
                },
                {
                    "path": "detail",
                    "style": {
                        "navigationBarTitleText": "居住证详情",
                        "navigationBarBackgroundColor": "#fff",
                        "navigationBarTextStyle": "black",
                        "enablePullDownRefresh": false
                    }
                },
                {
                    "path": "record",
                    "style": {
                        "navigationBarTitleText": "居住证列表",
                        "navigationBarBackgroundColor": "#fff",
                        "navigationBarTextStyle": "black",
                        "enablePullDownRefresh": false
                    }
                }
            ]
        },
        {
            "root": "subPackage/people",
pages/home/index.vue
@@ -418,10 +418,16 @@
                    {
                        name: '生活服务',
                        list: [{
                            text: "租客上报",
                            path: "/subPackage/bs/views/zhsb",
                            icon: "/static/icon/nav-04.png"
                        }]
                                text: "租客上报",
                                path: "/subPackage/bs/views/zhsb",
                                icon: "/static/icon/nav-04.png"
                            },
                            {
                                text: "居住证申请",
                                path: "/subPackage/reside/edit",
                                icon: "/static/icon/nav-04.png"
                            }
                        ]
                    },
                    {
                        name: '社区服务',
subPackage/reside/detail.vue
New file
@@ -0,0 +1,122 @@
<template>
    <view class="">
        <view class="item-row flex j-c-s-b a-i-c">
            <text>姓名</text>
            <text>{{info.name}}</text>
        </view>
        <view class="item-row flex j-c-s-b a-i-c">
            <text>电话号码</text>
            <text>{{info.phone}}</text>
        </view>
        <view class="item-row flex j-c-s-b a-i-c">
            <text>身份证号码</text>
            <text>{{info.idCard}}</text>
        </view>
        <view class="item-row flex j-c-s-b a-i-c">
            <text>地址</text>
            <text class="item-content">{{info.address}}</text>
        </view>
        <view class="item-row flex j-c-s-b a-i-c">
            <text>申请事由</text>
            <text class="item-content">{{info.remark}}</text>
        </view>
        <view class="item-row flex j-c-s-b a-i-c" v-if="info.confirmFlag == 4">
            <text>驳回原因</text>
            <text>{{info.confirmNotion}}</text>
        </view>
        <view class="item-row flex j-c-s-b a-i-c">
            <text>申请时间</text>
            <text>{{info.createTime}}</text>
        </view>
        <audit-action @handle="submit" v-if="roleType == 2 && info.confirmFlag == 1"></audit-action>
    </view>
</template>
<script>
    import auditAction from '@/components/btn/actionBtn.vue'
    import {
        getResideApplyDetail,
        auditResideApply
    } from "@/api/reside/reside.js"
    export default {
        components: {
            auditAction
        },
        data() {
            return {
                info: {},
                roleType: 1
            }
        },
        onLoad(option) {
            if (uni.getStorageSync("activeRole").roleName == "民警") {
                this.roleType = 2;
            } else {
                this.roleType = 1;
            }
            this.getDetail(option.id)
        },
        methods: {
            getDetail(id) {
                getResideApplyDetail({
                    id
                }).then(res => {
                    this.info = res.data;
                })
            },
            submit(val) {
                let data = {
                    confirmFlag: val.type == 2 ? 3 : 4,
                }
                if (val.type == 3) {
                    data.confirmNotion = val.remark;
                }
                auditResideApply(val).then(res => {
                    if (res.code == 200) {
                        this.$showTips("操作成功", "success");
                        setTimeout(() => {
                            uni.navigateBack();
                        }, 300)
                    }
                })
            }
        }
    }
</script>
<style lang="scss">
    page {
        background-color: #f5f5f5;
    }
    .item-row {
        width: 100%;
        padding: 30rpx;
        box-sizing: border-box;
        border-bottom: 1px solid #f5f5f5;
        font-size: 28rpx;
        background-color: #fff;
        .item-content {
            width: 70%;
            text-align: right;
        }
        .item-left {
            width: 70%;
        }
    }
</style>
subPackage/reside/edit.vue
New file
@@ -0,0 +1,216 @@
<template>
    <view>
        <view class="content bgc-ff">
            <u-form labelPosition="left" :model="info" :rules="rules" ref="form" labelWidth="90"
                :labelStyle="{fontSize:'28rpx'}">
                <u-form-item label="姓名" prop="info.name" borderBottom>
                    <u-input v-model="info.name" border="none" placeholder="请输入姓名" placeholderClass="f-28 c-99"
                        inputAlign="right"></u-input>
                </u-form-item>
                <u-form-item label="电话" prop="info.phone" borderBottom>
                    <u-input v-model="info.phone" type="number" border="none" placeholder="请输入电话"
                        placeholderClass="f-28 c-99" inputAlign="right"></u-input>
                </u-form-item>
                <u-form-item label="身份证号码" prop="info.name" borderBottom>
                    <u-input v-model="info.idCard" type="idcard" border="none" placeholder="请输入身份证号码"
                        placeholderClass="f-28 c-99" inputAlign="right"></u-input>
                </u-form-item>
                <u-form-item label="地址" prop="info.address" borderBottom>
                    <u-textarea v-model="info.address" border="none" placeholder="请输入地址" placeholderClass="f-28 c-99"
                        inputAlign="right"></u-textarea>
                </u-form-item>
                <u-form-item label="申请事由" prop="info.workContent" :borderBottom="false" ref="item1">
                    <u-textarea v-model="info.remark" border="none" placeholder="请输入申请事由" placeholderClass="f-28 c-99"
                        inputAlign="right"></u-textarea>
                </u-form-item>
            </u-form>
        </view>
        <button class="submit-btn" @click="sumitInfo">提交</button>
        <button class="list-btn" @click="navigatorPage">我申请的记录</button>
    </view>
</template>
<script>
    import uploadMixin from "@/mixin/uploadMixin";
    import {
        saveResideApply
    } from "@/api/reside/reside.js"
    export default {
        mixins: [uploadMixin],
        data() {
            return {
                info: {
                    name: "",
                    phone: "",
                    idCard: "",
                    address: ""
                },
                form: {
                    images: []
                },
                rules: {
                    'name': {
                        type: 'string',
                        required: true,
                        message: '请输入姓名',
                        trigger: ['blur', 'change']
                    },
                    'phone': [{
                            type: 'string',
                            required: true,
                            message: '请输入手机号',
                            trigger: ['blur', 'change']
                        },
                        {
                            validator: (rule, value, callback) => {
                                return uni.$u.test.mobile(value);
                            },
                            message: '手机号码不正确',
                            trigger: ['change', 'blur']
                        }
                    ],
                    'address': {
                        type: 'string',
                        required: true,
                        message: '请选择地址',
                        trigger: ['blur', 'change']
                    },
                },
            }
        },
        methods: {
            getLocation() {
                uni.chooseLocation({
                    success: (res) => {
                        this.$set(this.info, "address", res.address);
                        this.$set(this.info, "lat", res.latitude);
                        this.$set(this.info, "lng", res.longitude)
                    }
                })
            },
            sumitInfo() {
                this.$refs.form.validate().then(valid => {
                    let data = this.info;
                    data.houseCode = uni.getStorageSync("siteInfo").houseCode
                    saveResideApply(data).then(res => {
                        if (res.code == 200) {
                            this.$showTips("提交成功", "success")
                            setTimeout(() => {
                                uni.navigateBack();
                            }, 300)
                        }
                    })
                })
            },
            navigatorPage() {
                uni.navigateTo({
                    url: "record"
                })
            }
        }
    }
</script>
<style lang="less">
    page {
        background-color: #F5F5F5;
    }
    .content {
        margin: 20rpx 30rpx;
        padding: 0 30rpx;
    }
    .row {
        padding: 20rpx 0;
        border-bottom: 1px solid
    }
    .location-btn {
        width: 116rpx;
        height: 46rpx;
        line-height: 46rpx;
        border-radius: 4rpx;
        border: 1px solid currentColor;
        padding: 0;
        background-color: #fff;
    }
    .upload {
        margin: 0 30rpx;
        padding: 30rpx;
        .upload-item {
            width: 140rpx;
            height: 140rpx;
            border: 1px solid #EEEEEE;
        }
    }
    .address-row {
        flex: 1;
        justify-content: flex-end;
        align-items: center;
    }
    .address-content {
        width: calc(100% - 116rpx - 20rpx);
        margin-right: 20rpx;
        text-align: right;
    }
    .location-btn {
        width: 116rpx;
        height: 46rpx;
        line-height: 46rpx;
        border-radius: 4rpx;
        border: 1px solid currentColor;
        padding: 0;
        background-color: #fff;
        text-align: center;
    }
    .submit-btn {
        width: 690rpx;
        height: 78rpx;
        line-height: 78rpx;
        background: linear-gradient(163deg, #01BDFC 0%, #017BFC 100%);
        border-radius: 8rpx 8rpx 8rpx 8rpx;
        font-size: 32rpx;
        color: #fff;
        margin-top: 50rpx;
    }
    .list-btn {
        width: 690rpx;
        height: 78rpx;
        line-height: 78rpx;
        background: linear-gradient(163deg, #c7d7dc 0%, #c3cdd8 100%);
        border-radius: 8rpx 8rpx 8rpx 8rpx;
        font-size: 32rpx;
        color: #fff;
        margin-top: 50rpx;
    }
</style>
subPackage/reside/list.vue
New file
@@ -0,0 +1,287 @@
<template>
    <view>
        <u-sticky>
            <view class="hander">
                <view class="tab">
                    <u-tabs :list="tabList" :current="tabIndex" @click="changeTab" :inactiveStyle="{color:'#999999'}"
                        :activeStyle="{color:'#017BFC'}" :scrollable="false">
                    </u-tabs>
                </view>
                <view class="search flex j-c-s-b a-i-c">
                    <view class="tab-filter flex j-c-c a-i-c" slot="right" @click="showDateModal">
                        <text class="f-28">时间筛选</text>
                        <u-icon name="arrow-down"></u-icon>
                    </view>
                    <u-search placeholder="请输入姓名" v-model="keyWord" :clearabled="true" :showAction="true"
                        :animation="true" @search="searchConfirm" @clear="clearConfirm"
                        @custom="searchConfirm"></u-search>
                </view>
            </view>
        </u-sticky>
        <view class="list">
            <view class="list-item bgc-ff mb-20" v-for="item in siteList" :key="item.id" @click="pushPage(item.id)">
                <view class="item-title flex a-i-c j-c-s-b mb-20">
                    <text class="f-32 fw">{{ item.name}}</text>
                    <!-- <u-tag text="待审批" type="warning" plain plainFill></u-tag> -->
                    <u-tag class="u_tag" size="mini" :text="findObjValue(item.confirmFlag, tabList).name"
                        :type="findObjValue(item.confirmFlag, tabList).type" plain plainFill></u-tag>
                    <!-- <u-tag text="审核拒绝" type="error" plain plainFill></u-tag> -->
                </view>
                <view class="item-row flex a-i-c j-c-s-b">
                    <text class="f-28">电话号码</text>
                    <text class="address f-28 c-66">{{ item.phone}}</text>
                </view>
                <view class="item-row flex a-i-c j-c-s-b">
                    <text class="f-28">地址</text>
                    <text class="address f-28 c-66">{{ item.address}}</text>
                </view>
                <!-- <view class="item-row flex a-i-c j-c-s-b">
                    <text class="f-28">法人信息</text>
                    <text class="f-28 c-66">{{ item.legalPerson  ? item.legalPerson : '未完善'}}</text>
                </view> -->
                <view class="item-row flex a-i-c j-c-s-b f-28">
                    <text>时间</text>
                    <text class="c-66">{{item.createTime}}</text>
                </view>
            </view>
        </view>
        <u-toast ref="uToast"></u-toast>
        <u-loadmore :status="loadingStatus" loadmoreText="开始加载" loadingText="数据加载中" nomoreText="没有更多了" line />
        <date-range-modal ref="dateRane" @comfirm="handleComfirmDate" @rest="handleRestDate" />
    </view>
</template>
<script>
    import dateRangeModal from '@/components/dateRangeModal/modal.vue';
    import {
        getResideApplyList
    } from '@/api/reside/reside.js'
    export default {
        components: {
            dateRangeModal
        },
        data() {
            return {
                siteList: [],
                pagingParams: {
                    current: 1,
                    size: 10
                },
                tabList: [{
                        name: "全部",
                        status: "",
                    },
                    {
                        name: "待审核",
                        status: 1,
                        type: 'warning'
                    },
                    {
                        name: "审核通过",
                        status: 3,
                        type: 'success'
                    },
                    {
                        name: "已拒绝",
                        status: 4,
                        type: 'error'
                    },
                ],
                tabIndex: 0,
                tabStatus: "",
                keyWord: '',
                loadingStatus: 'nomore',
                clickInfo: {},
                currentRole: {},
                selectDate: [],
            }
        },
        onLoad(option) {
            if (option.from) {
                this.tabIndex = 1;
                this.tabStatus = 1;
            }
            if (option.placeId) {
                this.pagingParams.placeId = option.placeId
            }
        },
        onShow() {
            this.currentRole = uni.getStorageSync("activeRole")
            this.resetParams()
            this.getSiteList()
        },
        onReachBottom() {
            this.pagingParams.current++
            this.getSiteList()
        },
        methods: {
            async getSiteList() {
                this.$nextTick(() => {
                    this.$refs.uToast.show({
                        type: 'loading',
                        message: '正在加载',
                        duration: 9999999
                    })
                    this.loadingStatus = 'loadingmore'
                })
                const params = {
                    name: this.keyWord,
                    confirmFlag: this.tabStatus
                }
                if (this.selectDate.length) {
                    params.startTime = this.selectDate[0],
                        params.endTime = this.selectDate[1]
                }
                const {
                    roleName
                } = this.currentRole
                const res = await getResideApplyList({
                    ...params,
                    roleName,
                    ...this.pagingParams
                })
                console.log(res);
                const {
                    code,
                    data: {
                        records
                    }
                } = res
                if (code !== 200) {
                    uni.showToast({
                        title: '数据请求失败',
                        icon: 'error'
                    })
                    return
                }
                this.siteList = [...this.siteList, ...records]
                this.$nextTick(() => {
                    this.$refs.uToast.isShow = false
                })
                this.loadingStatus = 'nomore'
            },
            changeTab(e) {
                this.tabStatus = e.status;
                this.resetParams()
                this.getSiteList()
            },
            searchConfirm() {
                this.resetParams()
                this.getSiteList()
            },
            clearConfirm() {
                this.keyWord = ''
                this.resetParams()
                this.searchConfirm()
            },
            showDateModal() {
                this.$refs.dateRane.open();
            },
            resetParams() {
                this.siteList = []
                this.pagingParams.current = 1
            },
            findObjValue(value, obj) {
                const res = obj.find(item => {
                    return item.status == value
                })
                return res
            },
            pushPage(id) {
                const {
                    roleAlias
                } = this.currentRole
                if (roleAlias === "inhabitant") {
                    return
                }
                uni.navigateTo({
                    url: `detail?id=${id}`
                })
                // this.$u.func.globalNavigator(`/subPackage/workbench/views/examine?id=${id}&placeId=${placeId}`)
            },
            handleRestDate() {
                this.selectDate = [];
                this.resetParams();
                this.getSiteList()
            },
            handleComfirmDate(val) {
                this.selectDate = val;
                this.resetParams();
                this.getSiteList()
            }
        }
    }
</script>
<style lang="scss">
    page {
        background-color: #F5F5F5;
    }
    .hander {
        background-color: #fff;
        .tab {
            width: 100%;
        }
        .tab-filter {
            padding: 0 20rpx;
        }
        .search {
            padding: 20rpx 30rpx;
        }
    }
    .list {
        margin: 20rpx 30rpx 0;
    }
    .list-item {
        padding: 0 30rpx 20rpx;
        border-radius: 8rpx;
        .item-title {
            padding: 30rpx 0;
            border-bottom: 1px solid #F5F5F5;
        }
        .item-row {
            padding: 10rpx 0;
            .address {
                width: 65%;
                text-align: right;
            }
        }
    }
</style>
subPackage/reside/record.vue
New file
@@ -0,0 +1,109 @@
<template>
    <view class="">
        <view class="list">
            <view class="list-item bgc-ff mb-20" v-for="(i,k) in list" :key="k" @click="navTo(i.taskId)">
                <view class="item-title flex a-i-c j-c-s-b mb-20">
                    <!-- <text class="f-32 fw" v-if="i.type == 7">消防检查</text> -->
                    <text class="f-32 fw">{{i.name}}</text>
                    <u-tag v-if="i.confirmFlag == 1" text="待审批" type="warning" plain plainFill></u-tag>
                    <u-tag v-if="i.confirmFlag == 3" text="审核通过" type="success" plain plainFill></u-tag>
                    <u-tag v-if="i.confirmFlag == 4" text="审核拒绝" type="error" plain plainFill></u-tag>
                </view>
                <view class="item-row flex a-i-c j-c-s-b">
                    <text class="f-28">时间</text>
                    <text class="f-28 c-66">{{i.createTime}}</text>
                </view>
            </view>
        </view>
        <u-loadmore :status="loadingStatus" loadmoreText="开始加载" loadingText="数据加载中" nomoreText="没有更多了" line />
        <u-toast ref="uToast"></u-toast>
    </view>
</template>
<script>
    import {
        getResideApplyRecord
    } from "@/api/reside/reside.js"
    export default {
        data() {
            return {
                list: [],
                currentPage: 1,
                loadingStatus: 'nomore',
            }
        },
        onLoad() {
            this.getList()
        },
        onReachBottom() {
            this.currentPage++
            this.getList()
        },
        methods: {
            getList() {
                this.$nextTick(() => {
                    this.loadingStatus = 'loadmore'
                    this.$refs.uToast.show({
                        type: 'loading',
                        message: '正在加载',
                        duration: 9999999
                    })
                })
                getResideApplyRecord({
                    // checkUserId: uni.getStorageSync("userInfo").user_id,
                    page: this.currentPage,
                    size: 10
                }).then(res => {
                    if (res.code != 200) {
                        uni.showToast({
                            title: '数据请求失败',
                            icon: 'error'
                        })
                        return
                    }
                    let records = res.data.records;
                    this.list = [...this.list, ...records]
                    this.$nextTick(() => {
                        this.$refs.uToast.isShow = false
                    })
                    this.loadingStatus = 'nomore'
                })
            },
            navTo(id) {
                uni.navigateTo({
                    url: `detail?id=${id}`
                })
            }
        }
    }
</script>
<style lang="scss">
    page {
        background-color: #F5F5F5;
    }
    .list {
        margin: 20rpx 30rpx 0;
    }
    .list-item {
        padding: 0 30rpx 20rpx;
        border-radius: 8rpx;
        .item-title {
            padding: 30rpx 0;
            border-bottom: 1px solid #F5F5F5;
        }
        .item-row {
            padding: 10rpx 0;
            .address {
                width: 65%;
            }
        }
    }
</style>
subPackage/workbench/components/rentForm.vue
New file
@@ -0,0 +1,82 @@
<template>
    <u-form :model="form" class="form-box" :rules="rules" ref="refForm">
        <u-form-item class="form-item" label="姓名" required prop="name" labelWidth="80">
            <u-input v-model="form.name" border="none" placeholder="姓名" />
        </u-form-item>
        <u-form-item class="form-item" label="联系方式" required prop="phoneNumber" labelWidth="80">
            <u-input type="number" v-model="form.phoneNumber" border="none" placeholder="联系方式" />
        </u-form-item>
        <u-form-item class="form-item" label="身份证号码" required prop="idCard" labelWidth="80">
            <u-input type="idcard" v-model="form.idCard" border="none" placeholder="身份证号码" />
        </u-form-item>
        <u-form-item class="form-item" label="户籍地址" labelWidth="80">
            <u-input v-model="form.hukouRegistration" border="none" placeholder="选填" />
        </u-form-item>
        <u-form-item class="form-item" label="工作单位" labelWidth="80">
            <u-input v-model="form.employer" border="none" placeholder="选填" />
        </u-form-item>
    </u-form>
</template>
<script>
    export default {
        data() {
            return {
                form: {
                    name: '',
                    phoneNumber: '',
                    idCard: '',
                    hukouRegistration: '',
                    employer: ''
                },
                rules: {
                    name: [{
                        required: true,
                        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']
                        }
                    ],
                    idCard: [{
                        required: true,
                        message: '请输入身份证号',
                        // 可以单个或者同时写两个触发验证方式
                        trigger: ['change', 'blur'],
                    }, {
                        // 自定义验证函数,见上说明
                        validator: (rule, value, callback) => {
                            const reg =
                                /^\d{6}((((((19|20)\d{2})(0[13-9]|1[012])(0[1-9]|[12]\d|30))|(((19|20)\d{2})(0[13578]|1[02])31)|((19|20)\d{2})02(0[1-9]|1\d|2[0-8])|((((19|20)([13579][26]|[2468][048]|0[48]))|(2000))0229))\d{3})|((((\d{2})(0[13-9]|1[012])(0[1-9]|[12]\d|30))|((\d{2})(0[13578]|1[02])31)|((\d{2})02(0[1-9]|1\d|2[0-8]))|(([13579][26]|[2468][048]|0[048])0229))\d{2}))(\d|X|x)$/
                            if (reg.test(value)) {
                                return true
                            }
                            return false
                        },
                        message: '请输入正确的身份证号',
                        // 触发器可以同时用blur和change
                        trigger: ['change', 'blur'],
                    }]
                }
            }
        }
    }
</script>
<style lang="scss" scoped>
    .form-box {
        background: #fff;
    }
</style>
subPackage/workbench/views/auditRental.vue
New file
@@ -0,0 +1,691 @@
<template>
    <view class="container">
        <u-form labelWidth="70" :model="form" :rules="rules" ref="form">
            <view class="basic-info">
                <u-form-item class="form-item" labelWidth="100" label="租客关系" required prop="relation">
                    <u--input border="none" v-model="relationName" 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="100" label="房屋状态:" required prop="houseTypeName">
                    <u--input border="none" v-model="houseTypeName" 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="100" label="租房用途:" required prop="rentalUseName">
                    <u--input border="none" v-model="rentalUseName" 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="100" label="租房时间:" required prop="rentTime">
                    <u--input border="none" v-model="form.rentTime" 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="100" label="到期时间:" required prop="dueTime">
                    <u--input border="none" v-model="form.dueTime" disabled disabledColor="#ffffff" placeholder="请选择">
                    </u--input>
                    <!-- <u-icon slot="right" name="arrow-right"></u-icon> -->
                </u-form-item>
                <view class="pic">
                    <view class="title">合同上传</view>
                    <u-upload :fileList="form.images" :previewFullImage="uploadConfig.previewFullImage"
                        :accept="uploadConfig.acceptImg" :multiple="uploadConfig.multiple"
                        uploadIcon="/static/icon/upload.png" :maxCount="uploadConfig.maxCount"
                        :capture="uploadConfig.capture" @afterRead="afterReadImg" @delete="deletePic">
                    </u-upload>
                </view>
            </view>
            <view class="rent-info">
                <view v-for="(item, index) in rentFormNum" :key="item" class="rent-box">
                    <view class="box-title">
                        <view class="l">
                            <view class="line"></view>
                            <view class="title">{{ '租客信息-#' + (index + 1)  }}</view>
                        </view>
                        <view class="r" v-if="(index+1) > 1">
                            <u-icon name="trash-fill" color="#ff0000" size="20" @click="decRentForm(index)"></u-icon>
                        </view>
                    </view>
                    <rentForm ref="rentform" />
                </view>
                <!-- <view class="addPerson-box">
                    <u-button class="btn-item" color="#2CD5C0" plain style="width: 300rpx;"
                        @click="addRentForm">再加一人</u-button>
                </view> -->
            </view>
        </u-form>
        <!-- 事件类型下拉框 -->
        <!-- <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 v-model="currentTime" v-if="rentTimeShow" :closeOnClickOverlay="true"
            @close="rentTimeShow = false" :show="rentTimeShow" mode="date" @confirm="rentTimeConfirm"
            @cancel="rentTimeShow = false"></u-datetime-picker>
        <u-datetime-picker v-model="currentTime" v-if="dueTimeShow" :closeOnClickOverlay="true"
            @close="dueTimeShow = false" :show="dueTimeShow" mode="date" @confirm="dueTimeConfirm"
            @cancel="dueTimeShow = false"></u-datetime-picker>
        <!-- <view class="bottom-tools">
            <u-button class="btn-item" color="#2CD5C0" plain style="width: 300rpx;" @click="addRentForm">再加一人</u-button>
            <u-button class="btn-item" type="error" @click="isModelShow = true" v-if="btnControls.deleteBtn">删除
            </u-button>
            <u-button class="btn-item" type="success" @click="verifyConfirm" v-if="btnControls.verifyBtn">确认</u-button>
            <u-button class="btn-item" color="linear-gradient(to right, #06B0FD, #027BFE)" @click="saveOrUpdate">
                {{ rentId === '' ? "保存" : "确认修改" }}</u-button>
        </view> -->
        <footer-btn text="审核" @click="verifyConfirm" v-if="btnControls.verifyBtn" />
        <u-modal :show="isModelShow" width="auto" :showCancelButton="true" title="提示" content="请确认是否删除当前租户信息"
            @cancel="isModelShow = false" @confirm="deleteRent"></u-modal>
        <u-picker v-if="isAuditShow" :closeOnClickOverlay="true" @close="isAuditShow = false" :columns="auditColumns"
            :show="isAuditShow" @confirm="verifyConfirm" keyName="name" @cancel="isAuditShow = false"></u-picker>
    </view>
</template>
<script>
    import selectBus from "@/components/my-components/selectBus.vue"
    import rentForm from '../components/rentForm.vue'
    import uploadMixin from "@/mixin/uploadMixin";
    import {
        uploadFile,
        getHouseRentInfo,
    } from "@/api/doorplateAddress/doorplateAddress";
    import {
        addHouseRental,
        updateRetalInfo,
        deleteRentalInfo,
        confirmHouseRental
    } from '@/api/houseRental/houseRental.js'
    import {
        data
    } from "uview-ui/libs/mixin/mixin";
    import {
        update
    } from "../../../api/system/role";
    import {
        minioBaseUrl
    } from '@/common/setting'
    export default {
        mixins: [uploadMixin],
        components: {
            selectBus,
            rentForm
        },
        data() {
            return {
                currentRole: '',
                form: {
                    relation: "",
                    rentTime: "",
                    houseTypeName: "",
                    rentalUseName: "",
                    dueTime: "",
                    fileUrls: "",
                    images: []
                },
                imagesList: [],
                rules: {
                    relation: [{
                        required: true,
                        message: '请选择租客关系'
                    }],
                    houseTypeName: [{
                        required: true,
                        message: '请选择房屋状态'
                    }],
                    rentalUseName: [{
                        required: true,
                        message: '请选择房屋用途'
                    }],
                    rentTime: [{
                        required: true,
                        message: '请选择租房时间'
                    }],
                    dueTime: [{
                        required: true,
                        message: '请选择到期时间'
                    }]
                },
                rentTimeShow: false,
                dueTimeShow: false,
                rentFormNum: 1,
                relationName: "",
                houseTypeName: "",
                rentalUseName: "",
                dataList: {
                    relation: [{
                            name: "同一户",
                            value: "1"
                        },
                        {
                            name: "不同户",
                            value: "2"
                        }
                    ],
                    houseType: [{
                            name: "部分出租",
                            value: "1"
                        },
                        {
                            name: "全部出租",
                            value: "2"
                        }
                    ],
                    rentalUse: [{
                            name: "仓库",
                            value: "1"
                        },
                        {
                            name: "办公",
                            value: "2"
                        },
                        {
                            name: "商用",
                            value: "3"
                        },
                        {
                            name: "居住",
                            value: "4"
                        }
                    ]
                },
                isAuditShow: false,
                auditColumns: [
                    [{
                            name: "待确认",
                            status: 0
                        },
                        {
                            name: "已确认",
                            status: 1
                        },
                    ]
                ],
                selectBusList: [],
                selectBusTitle: '',
                selectBusModel: '',
                selectBusKey: '',
                typeShow: false,
                houseCode: '',
                rentId: '',
                auditStatus: null,
                currentTime: Number(new Date()),
                isModelShow: false,
                btnControls: {
                    deleteBtn: false,
                    verifyBtn: false
                },
                selectDefaultIndex: {
                    rentalUse: 0,
                    relation: 0,
                    houseType: 0
                }
            }
        },
        onLoad(option) {
            const {
                id,
                houseCode
            } = option
            this.houseCode = houseCode
            this.currentRole = uni.getStorageSync("activeRole")
            // 使用id来判断是不是修改
            if (id !== void 0) {
                this.rentId = id
                this.getCurrentRentInfo()
            }
        },
        methods: {
            showSelectBus(data, title, model, key) {
                this.selectBusList = data
                this.selectBusTitle = title
                this.selectBusModel = model
                this.selectBusKey = key
                this.typeShow = true
            },
            //类型选择确认
            typeSelect(e) {
                const [result] = e.value;
                this[this.selectBusModel] = result.name
                this.form[this.selectBusKey] = result.value
                this.selectDefaultIndex[this.selectBusKey] = e.indexs[0];
                this.typeShow = !this.typeShow
            },
            rentTimeClick() {
                this.currentTime = Number(new Date(this.form.rentTime)) || Number(new Date())
                this.rentTimeShow = true
            },
            rentTimeConfirm(e) {
                const time = uni.$u.timeFormat(e.value, 'yyyy-mm-dd')
                this.form.rentTime = time
                this.rentTimeShow = false
            },
            dueTimeClick() {
                this.currentTime = Number(new Date(this.form.dueTime)) || Number(new Date())
                this.dueTimeShow = true
            },
            dueTimeConfirm(e) {
                const time = uni.$u.timeFormat(e.value, 'yyyy-mm-dd')
                this.form.dueTime = time
                this.dueTimeShow = false
            },
            addRentForm() {
                this.rentFormNum++
            },
            decRentForm(i) {
                try {
                    let formData = []
                    this.$refs.rentform.forEach(vc => {
                        formData.push(vc.form)
                    })
                    formData.splice(i, 1)
                    formData.forEach((sform, i) => {
                        this.$refs.rentform[i].form = sform
                    })
                    this.rentFormNum > 1 && this.rentFormNum--
                    uni.showToast({
                        title: "删除成功",
                        icon: "success",
                        duration: 1500
                    })
                } catch (e) {
                    uni.showToast({
                        title: "删除失败",
                        icon: "error",
                        duration: 1500
                    })
                }
            },
            saveOrUpdate() {
                this.form.houseTypeName = this.houseTypeName
                this.form.rentalUseName = this.rentalUseName
                this.$refs.form.validate().then(res => {
                    let rentFormValidGroup = []
                    this.$refs.rentform.forEach(item => {
                        rentFormValidGroup.push(item.$refs.refForm.validate());
                    })
                    Promise.all(rentFormValidGroup).then(result => {
                        if (this.rentId === '') {
                            this.save()
                            return
                        }
                        this.update()
                    })
                })
            },
            // 新增操作
            async save() {
                let householdVOList = []
                this.$refs.rentform.forEach(item => {
                    householdVOList.push(item.form)
                })
                if (this.form.images.length > 0) {
                    let urls = []
                    this.form.images.forEach(e => {
                        urls.push(e.name)
                    })
                    this.form.fileUrls = urls.join(",")
                }
                const relationIndex = this.dataList.relation.findIndex(item => item.name === this.relationName)
                const statusIndex = this.dataList.houseType.findIndex(item => item.name === this.houseTypeName)
                const rentalIndex = this.dataList.rentalUse.findIndex(item => item.name === this.rentalUseName)
                let params = {
                    audit_status: this.currentRole.roleAlias === 'inhabitant' ? 0 : 1,
                    houseCode: this.houseCode,
                    tenantRelationship: this.dataList.relation[relationIndex].value,
                    rentalTime: this.form.rentTime,
                    dueTime: this.form.dueTime,
                    houseStatus: this.dataList.houseType[statusIndex].value,
                    rentalUse: this.dataList.rentalUse[rentalIndex].value,
                    fileUrls: this.form.fileUrls,
                    householdVOList,
                    roleName: uni.getStorageSync("activeRole").roleName
                }
                const {
                    code,
                    data
                } = await addHouseRental(params)
                if (code !== 200) {
                    uni.showToast({
                        title: "添加租户信息失败",
                        icon: "error",
                        duration: 1500
                    })
                    return
                }
                uni.showToast({
                    title: "添加租户信息成功",
                    icon: "success",
                    duration: 1500,
                    success: () => {
                        setTimeout(() => {
                            uni.navigateBack()
                        }, 1500)
                    }
                })
            },
            // 确认操作
            verify() {
                this.isAuditShow = true
            },
            verifyConfirm() {
                // const auditStatus = e.value[0].status
                uni.showModal({
                    title: "提示",
                    content: "是否确认该租户?",
                    success: (res) => {
                        if (res.confirm) {
                            this.confirmRequest();
                        }
                    }
                })
            },
            confirmRequest() {
                confirmHouseRental({
                    id: this.rentId,
                    auditStatus: 1
                }).then(res => {
                    const {
                        code,
                        data
                    } = res
                    if (code !== 200) {
                        this.$showTips("确认失败", 'error')
                        return
                    }
                    this.$showTips("确认成功", 'success')
                    // this.isAuditShow = false
                    this.getCurrentRentInfo()
                })
            },
            // 更新操作
            async update() {
                let householdVOList = []
                this.$refs.rentform.forEach(item => {
                    householdVOList.push(item.form)
                })
                if (this.form.images.length > 0) {
                    let urls = []
                    this.form.images.forEach(e => {
                        urls.push(e.name)
                    })
                    this.form.fileUrls = urls.join(",")
                }
                const relationIndex = this.dataList.relation.findIndex(item => item.name === this.relationName)
                const statusIndex = this.dataList.houseType.findIndex(item => item.name === this.houseTypeName)
                const rentalIndex = this.dataList.rentalUse.findIndex(item => item.name === this.rentalUseName)
                let data = {
                    id: this.rentId,
                    houseCode: this.houseCode,
                    tenantRelationship: this.dataList.relation[relationIndex].value,
                    rentalTime: this.form.rentTime,
                    dueTime: this.form.dueTime,
                    houseStatus: this.dataList.houseType[statusIndex].value,
                    rentalUse: this.dataList.rentalUse[rentalIndex].value,
                    fileUrls: this.form.fileUrls,
                    householdVOList
                }
                const res = await updateRetalInfo(data)
                if (res.code !== 200) {
                    uni.showToast({
                        title: "修改租户信息失败",
                        icon: "error",
                        duration: 1500
                    })
                    return
                }
                uni.showToast({
                    title: "修改租户信息成功",
                    icon: "success",
                    duration: 1500,
                    success: () => {
                        setTimeout(() => {
                            uni.navigateBack()
                        }, 1500)
                    }
                })
            },
            findObjValue(value, obj) {
                // const res = obj.find(item => {
                //     return item.value == value
                // })
                // return res.name
                let data = {
                    index: "",
                    name: ""
                }
                for (let i = 0, ii = obj.length; i < ii; i++) {
                    if (value == obj[i].value) {
                        data.index = i;
                        data.name = obj[i].name;
                    }
                }
                return data;
            },
            // 获取租赁相关信息
            async getCurrentRentInfo() {
                const {
                    code,
                    data: {
                        houseRentalList
                    }
                } = await getHouseRentInfo(this.houseCode)
                this.auditStatus = houseRentalList[0].auditStatus
                console.log(this.auditStatus);
                const images = []
                const {
                    houseStatus,
                    tenantRelationship,
                    rentalUse,
                    rentalTime,
                    dueTime,
                    householdVOList,
                    fileUrls
                } = houseRentalList.find(item => item.id === this.rentId)
                // 合同展示处理
                if (fileUrls != null && fileUrls.length > 0) {
                    const urls = fileUrls.split(',')
                    // 遍历
                    urls.forEach(e => {
                        images.push({
                            url: minioBaseUrl + e,
                            name: e
                        })
                    })
                }
                this.form = {
                    relation: tenantRelationship,
                    rentTime: rentalTime,
                    dueTime: dueTime,
                    houseTypeName: houseStatus,
                    rentalUseName: rentalUse,
                    images: images
                }
                // this.rentalUseName = this.findObjValue(rentalUse, this.dataList.rentalUse)
                // this.relationName = this.findObjValue(tenantRelationship, this.dataList.relation)
                // this.houseTypeName = this.findObjValue(houseStatus, this.dataList.houseType)
                this.rentalUseName = this.findObjValue(rentalUse, this.dataList.rentalUse).name
                this.selectDefaultIndex.rentalUse = this.findObjValue(rentalUse, this.dataList.rentalUse).index;
                this.relationName = this.findObjValue(tenantRelationship, this.dataList.relation).name
                this.selectDefaultIndex.relation = this.findObjValue(tenantRelationship, this.dataList.relation).index;
                this.houseTypeName = this.findObjValue(houseStatus, this.dataList.houseType).name
                this.selectDefaultIndex.houseType = this.findObjValue(houseStatus, this.dataList.houseType).index
                this.rentFormNum = householdVOList.length
                this.$nextTick(() => {
                    householdVOList.forEach((item, index) => {
                        this.$refs.rentform[index].form = item
                    })
                })
                this.btnControls = {
                    deleteBtn: this.rentId !== '',
                    verifyBtn: !this.auditStatus && !!this.rentId && this.currentRole.roleAlias === 'wgy'
                }
            },
            async deleteRent() {
                const {
                    code,
                    data
                } = await deleteRentalInfo(this.rentId)
                if (code !== 200) {
                    uni.showToast({
                        title: "删除失败",
                        icon: "error",
                        duration: 1500
                    })
                    return
                }
                this.isModelShow = false
                uni.showToast({
                    title: '删除成功',
                    icon: 'success',
                    duration: 1000,
                    complete: () => {
                        setTimeout(() => {
                            uni.navigateBack()
                        }, 1000)
                    }
                })
            },
            auditInfo() {
            }
        }
    }
</script>
<style>
    page {
        background: #F5F5F5;
    }
</style>
<style scoped lang="scss">
    .container {
        position: relative;
        display: flex;
        flex-direction: column;
        padding: 20rpx 30rpx;
        padding-bottom: 200rpx;
        .basic-info {
            background-color: #ffffff;
            padding: 30rpx;
            border-radius: 8rpx;
            .pic {
                // padding: 40rpx 30rpx;
                .title {
                    font-size: 30rpx;
                    margin: 20rpx 0;
                }
                /deep/ .u-upload__button {
                    border: 1rpx solid #EEEEEE;
                    background-color: #fff;
                }
            }
        }
        .rent-info {
            .addPerson-box {
                margin-top: 30rpx;
            }
            .rent-box {
                padding: 30rpx;
                background-color: #ffffff;
                margin-top: 30rpx;
                border-radius: 8rpx;
                .box-title {
                    display: flex;
                    justify-content: space-between;
                    .l {
                        display: flex;
                        align-items: center;
                        .line {
                            width: 6rpx;
                            height: 60%;
                            margin-right: 10rpx;
                            background-color: #017BFC;
                        }
                        .title {
                            font-size: 30rpx;
                            font-weight: 700;
                        }
                    }
                }
            }
        }
        .btn-group {
            padding: 30rpx;
            position: absolute;
            bottom: 28rpx;
            width: calc(100% - 60rpx);
            .btn {
                margin-bottom: 30rpx;
            }
        }
        .bottom-tools {
            display: flex;
            background-color: #ffffff;
            position: fixed;
            bottom: 0;
            left: 0;
            width: calc(100% - 40rpx);
            // border-top: 1rpx solid #e4e4e4;
            z-index: 999;
            padding: 20rpx;
            padding-bottom: calc(env(safe-area-inset-bottom) + 20rpx);
            /deep/ .u-button {
                color: #ffffff;
                font-weight: 700;
                border: 0;
                margin-left: 30rpx;
                &:first-child {
                    margin-left: 0rpx;
                }
            }
        }
    }
    /deep/ .u-form-item {
        padding: 5rpx 20rpx;
        border-bottom: 1px solid #eff1f3;
    }
</style>
subPackage/workbench/views/rental.vue
@@ -43,10 +43,10 @@
                </view>
            </view>
            <view class="list bgc-ff" v-for="(records,index) in tenantList" :key="index">
            <view class="list bgc-ff" v-for="(records,index) in tenantList" :key="index" @click="navTo(records)">
                <view class="flex j-c-s-b a-i-c">
                    <view class="flex a-i-c">
                        <text class="f-32 mr-50">{{ records.tenantName }}</text>
                        <text class="f-32 mr-50">{{ records.tenantName || "" }}</text>
                        <view class="flex a-i-c">
                            <u-icon name="phone-fill" color="#017BFC"></u-icon>
                            <text class="f-28 ml-10">{{ records.phone || '未填写' }}</text>
@@ -371,6 +371,15 @@
                uni.navigateTo({
                    url: `/subPackage/task/workLogList?code=${code}`
                })
            },
            navTo({
                houseCode,
                id
            }) {
                uni.navigateTo({
                    url: `auditRental?houseCode=${houseCode}&id=${id}`
                })
            }
        }
    }