shuishen
2023-10-31 d6001eac15349a55a01b5ff781b1fcf285b32efe
Merge branch 'master' of http://s16s652780.51mypc.cn:49896/r/jczz_app
6 files modified
1767 ■■■■ changed files
api/doorplateAddress/doorplateAddress.js 32 ●●●●● patch | view | raw | blame | history
pages/home/index.vue 868 ●●●● patch | view | raw | blame | history
subPackage/bs/views/rentDetail.vue 116 ●●●● patch | view | raw | blame | history
subPackage/house/family/index.vue 475 ●●●●● patch | view | raw | blame | history
subPackage/house/list/index.vue 187 ●●●●● patch | view | raw | blame | history
subPackage/house/roomDetails/index.vue 89 ●●●● patch | view | raw | blame | history
api/doorplateAddress/doorplateAddress.js
@@ -10,4 +10,36 @@
            roleName
        }
    })
}
export const getHouseList = (type, name) => {
    return http.request({
        url: '/blade-doorplateAddress/doorplateAddress/getHousesList',
        method: 'GET',
        params: {
            type,
            name
        }
    })
}
export const getHouseInfoList = (type, code) => {
    return http.request({
        url: '/blade-doorplateAddress/doorplateAddress/getHousesList',
        method: 'GET',
        params: {
            type,
            code
        }
    })
}
export const getHouseRentInfo = (code) => {
    return http.request({
        url: '/blade-doorplateAddress/doorplateAddress/getHouseRentInfo',
        method: 'GET',
        params: {
            code
        }
    })
}
pages/home/index.vue
@@ -1,430 +1,440 @@
<template>
    <view class="container">
        <u-navbar height="48" bgColor="#5887f9" :autoBack="false" safeAreaInsetTop placeholder>
            <view slot="left">
                <u--text color="#ffffff" text="基层智治" size="18" />
            </view>
        </u-navbar>
        <view class="main">
            <view class="main-bg">
            </view>
            <view class="main-select" @click="selectBoxShow = !selectBoxShow">
                <u-icon name="map" color="#fff"></u-icon>
                <view>
                    当前场所:{{curSelectSite.name?curSelectSite.name:'暂无绑定场所信息'}}
                </view>
                <u-picker title="场所" :show="selectBoxShow" keyName="name" ref="uPicker" :columns="siteColumns"
                    @confirm="confirm" @change="changeHandler"></u-picker>
            </view>
            <view class="main-btn">
                <menu-list :menuData="btnList"></menu-list>
            </view>
            <view class="main-phone-house">
                <view v-if="gridDataList.length>0" class="phone-box">
                    <grid-menu :gridData='item' v-for="(item, index) in gridDataList" :key='index'></grid-menu>
                </view>
                <view v-if="hasMenu('楼盘表').length>0" class="house-box">
                    <box-title :title="'楼盘表'"></box-title>
                    <view class="content">
                        <grid-menu :gridData='item' v-for="(item, index) in houseDataList" :key='index'></grid-menu>
                    </view>
                </view>
            </view>
            <view class="main-bt pb-40">
                <view v-if="liveList.length>0" class="mt-20">
                    <box-title :title="'生活'">
                        <template slot="titleMore">
                            <view style="color: red;">titleMore</view>
                        </template>
                    </box-title>
                    <view class="mt-20">
                        <view class="mt-20 b-c-w">
                            <menu-list :menuData="liveList"></menu-list>
                        </view>
                    </view>
                </view>
                <view v-if="jobList.length>0" class="mt-20">
                    <box-title :title="'工作台'"></box-title>
                    <view class="mt-20 b-c-w">
                        <menu-list :border='true' :menuData="jobList"></menu-list>
                    </view>
                </view>
                <view class="mt-20 main-taska">
                    <box-title :title="'我的任务'"></box-title>
                    <view class="mt-20 b-c-w">
                        <view class="flex">
                            <view class="flex-1" v-for="(item, index) in taskTypeList" :key='index'>
                                <cur-menu class='boder-f7f8f9-1 p-all-16' :curMenu="item" :imgShow="false"
                                    :textShow="true"></cur-menu>
                            </view>
                        </view>
                        <u-cell-group :border='false'>
                            <u-cell class="boder-f7f8f9-1" :border='false' :title="item.title"
                                v-for="(item, index) in taskList" :key="index">
                                <view slot="right-icon">待处理 {{item.num}}</view>
                            </u-cell>
                        </u-cell-group>
                    </view>
                </view>
            </view>
        </view>
        <tabBar @change='change' :currentTab="0"></tabBar>
    </view>
</template>
<script>
    import tabBar from "@/components/tabBar/tabBar.vue";
    import curMenu from "@/components/curMenu/index.vue";
    import menuList from "@/components/menuList/index.vue";
    import gridMenu from "@/components/gridMenu/index.vue";
    import {
        getFuncList
    } from "@/api/doorplateAddress/doorplateAddress";
    export default {
        components: {
            tabBar,
            curMenu,
            menuList,
            gridMenu
        },
        data() {
            return {
                menuList: [],
                selectRole: {},
                selectBoxShow: false,
                siteColumns: [],
                curSelectSite: {},
                columnData: [],
                btnList: [{
                        imgUrl: '/static/img/sys.png',
                        title: '扫一扫',
                        imgWidth: 54,
                        imgHeight: 54
                    },
                    {
                        imgUrl: '/static/img/bs.png',
                        title: '报事',
                        imgWidth: 54,
                        imgHeight: 54
                    }
                ],
                gridDataList: [],
                houseDataList: [{
                        title: '万达广场',
                        useSlot: true
                    },
                    {
                        title: '万达晶座',
                        useSlot: true
                    },
                    {
                        title: '万达华府',
                        useSlot: true
                    },
                    {
                        title: '万达华府',
                        useSlot: true
                    }
                ],
                liveList: [],
                jobList: [],
                taskTypeList: [{
                        title: '一次性',
                        num: 1,
                    },
                    {
                        title: '周期性',
                        num: 0,
                    }
                ],
                taskList: [{
                        title: '综治任务',
                        num: 0
                    },
                    {
                        title: '住建任务',
                        num: 0
                    },
                    {
                        title: '公安任务',
                        num: 0
                    },
                ],
            }
        },
        onShow() {
            this.init()
        },
        computed: {
            hasMenu() {
                return (name) => {
                    let resultArr = []
                    resultArr = this.getMenu(name, this.menuList, resultArr)
                    if (resultArr.length > 0) {
                        return resultArr
                    } else {
                        return []
                    }
                }
            }
        },
        methods: {
            //初始化
            init() {
                this.curSelectSite = {}
                this.menuList = uni.getStorageSync("menu")
                this.selectRole = uni.getStorageSync("activeRole")
                this.getMenuList()
                this.getSiteList()
                uni.hideTabBar()
            },
            //获取场所列表
            async getSiteList() {
                console.log(this.selectRole)
                let type = null
                let roleName = this.selectRole.roleName
                console.log("roleName", roleName)
                if (roleName == '网格员' || roleName == '系统管理员') {
                    type = 1
                } else if (roleName == '场所负责人') {
                    type = 2
                } else if (roleName == '居民') {
                    type = 3
                }
                const res = await getFuncList(type, roleName)
                console.log(res, "-----------")
                let data = res.data
                this.siteColumns = []
                this.buildSiteColumn(data, 0)
                console.log(this.siteColumns)
            },
            buildSiteColumn(dataList, index) {
                if (dataList.length > 0) {
                    this.siteColumns[index] = dataList
                    if (dataList[0].children && dataList[0].children.length > 0) {
                        this.buildSiteColumn(dataList[0].children, index + 1)
                    }
                }
            },
            //获取首页菜单
            getMenuList() {
                console.log("当前角色菜单", this.menuList)
                this.getPhoneList()
                this.getLiveList()
                this.getWorkbenchList()
            },
            getPhoneList() {
                this.gridDataList = []
                const resultArr = this.hasMenu('快捷拨号')
                if (resultArr.length == 0) {
                    return
                }
                const topMenu = resultArr[0]
                topMenu.children.forEach(menu => {
                    this.gridDataList.push({
                        title: menu.name,
                        data: "无数据",
                        phone: "无"
                    })
                })
            },
            //获取生活菜单
            getLiveList() {
                this.liveList = []
                const resultArr = this.hasMenu('生活')
                if (resultArr.length == 0) {
                    return
                }
                const topMenu = resultArr[0]
                topMenu.children.forEach(menu => {
                    this.liveList.push({
                        imgUrl: menu.source,
                        title: menu.name,
                    })
                })
            },
            //获取工作台菜单
            getWorkbenchList() {
                this.jobList = []
                const resultArr = this.hasMenu('工作台')
                if (resultArr.length == 0) {
                    return
                }
                const topMenu = resultArr[0]
                topMenu.children.forEach(menu => {
                    this.jobList.push({
                        imgUrl: menu.source,
                        title: menu.name,
                    })
                })
            },
            getMenu(menuName, menuList, resultArr) {
                // console.log(menuList, menuName)
                for (var i = 0; i < menuList.length; i++) {
                    if (menuList[i].name == menuName) {
                        resultArr.push(menuList[i])
                    } else {
                        if (menuList[i].children && menuList[i].children.length) {
                            this.getMenu(menuName, menuList[i].children, resultArr);
                        }
                    }
                }
                return resultArr
            },
            change(index) {
                let url = index
                this.$u.func.globalNavigator(url, "switchTab")
            },
            changeHandler(e) {
                const {
                    columnIndex,
                    value,
                    values, // values为当前变化列的数组内容
                    index,
                    // 微信小程序无法将picker实例传出来,只能通过ref操作
                    picker = this.$refs.uPicker
                } = e
                // 当第一列值发生变化时,变化第二列(后一列)对应的选项
                if (columnIndex === 0 && this.columnData.length > 0) {
                    // picker为选择器this实例,变化第二列对应的选项
                    picker.setColumnValues(1, this.columnData[index])
                }
            },
            // 回调参数为包含columnIndex、value、values
            confirm(e) {
                console.log('confirm', e)
                this.curSelectSite = e.value[e.value.length - 1]
                this.selectBoxShow = false
            }
        }
    }
</script>
<style lang="scss" scoped>
    .container {
        width: 100%;
        height: 100%;
        display: flex;
        flex-direction: column;
        background: #F9F9FA;
        color: #fff;
        font-size: 32rpx;
        .main {
            position: relative;
            height: 0;
            flex: 1;
            overflow-y: auto;
            .main-bg {
                height: 36%;
                background: royalblue;
            }
            .main-select {
                margin: 0 6%;
                position: absolute;
                bottom: 74%;
                display: flex;
                align-items: center;
            }
            .main-btn {
                margin: 0 6%;
                position: absolute;
                top: 28%;
                width: 88%;
                height: 20%;
                background: #fff;
                border-radius: 10rpx;
                color: #000;
            }
            .main-phone-house {
                margin-top: 180rpx;
                width: 100%;
                .phone-box {
                    display: flex;
                    &>view {
                        margin: 0 16rpx;
                        height: 116rpx;
                        flex: 1;
                        background: linear-gradient(to right, #407BE9, #73A2F9);
                        border-radius: 10rpx;
                    }
                }
                .house-box {
                    .content {
                        display: flex;
                        flex-wrap: wrap;
                        &>view {
                            margin: 0 16rpx;
                            margin-top: 20rpx;
                            min-width: calc((100% - 16rpx * 6) / 3);
                            height: 66rpx;
                            background: linear-gradient(to right, #407BE9, #73A2F9);
                            border-radius: 33rpx;
                        }
                    }
                }
            }
            .main-bt {
                margin-top: 2%;
                width: 100%;
                color: #000;
            }
        }
    }
<template>
    <view class="container">
        <u-navbar height="48" bgColor="#5887f9" :autoBack="false" safeAreaInsetTop placeholder>
            <view slot="left">
                <u--text color="#ffffff" text="基层智治" size="18" />
            </view>
        </u-navbar>
        <view class="main">
            <view class="main-bg">
            </view>
            <view class="main-select" @click="selectBoxShow = !selectBoxShow">
                <u-icon name="map" color="#fff"></u-icon>
                <view>
                    当前场所:{{curSelectSite.name?curSelectSite.name:'暂无绑定场所信息'}}
                </view>
                <u-picker title="场所" :show="selectBoxShow" keyName="name" ref="uPicker" :columns="siteColumns"
                    @confirm="confirm" @change="changeHandler"></u-picker>
            </view>
            <view class="main-btn">
                <menu-list :menuData="btnList"></menu-list>
            </view>
            <view class="main-phone-house">
                <view v-if="gridDataList.length>0" class="phone-box">
                    <grid-menu :gridData='item' v-for="(item, index) in gridDataList" :key='index'></grid-menu>
                </view>
                <view v-if="hasMenu('楼盘表').length>0" class="house-box">
                    <box-title :title="'楼盘表'"></box-title>
                    <view class="content">
                        <grid-menu :gridData='item' v-for="(item, index) in houseDataList.slice(0, 6)" :key='index'
                            @click.native="pushPage(item)"></grid-menu>
                    </view>
                </view>
            </view>
            <view class="main-bt pb-40">
                <view v-if="liveList.length>0" class="mt-20">
                    <box-title :title="'生活'">
                        <template slot="titleMore">
                            <view style="color: red;">titleMore</view>
                        </template>
                    </box-title>
                    <view class="mt-20">
                        <view class="mt-20 b-c-w">
                            <menu-list :menuData="liveList"></menu-list>
                        </view>
                    </view>
                </view>
                <view v-if="jobList.length>0" class="mt-20">
                    <box-title :title="'工作台'"></box-title>
                    <view class="mt-20 b-c-w">
                        <menu-list :border='true' :menuData="jobList"></menu-list>
                    </view>
                </view>
                <view class="mt-20 main-taska">
                    <box-title :title="'我的任务'"></box-title>
                    <view class="mt-20 b-c-w">
                        <view class="flex">
                            <view class="flex-1" v-for="(item, index) in taskTypeList" :key='index'>
                                <cur-menu class='boder-f7f8f9-1 p-all-16' :curMenu="item" :imgShow="false"
                                    :textShow="true"></cur-menu>
                            </view>
                        </view>
                        <u-cell-group :border='false'>
                            <u-cell class="boder-f7f8f9-1" :border='false' :title="item.title"
                                v-for="(item, index) in taskList" :key="index">
                                <view slot="right-icon">待处理 {{item.num}}</view>
                            </u-cell>
                        </u-cell-group>
                    </view>
                </view>
            </view>
        </view>
        <tabBar @change='change' :currentTab="0"></tabBar>
    </view>
</template>
<script>
    import tabBar from "@/components/tabBar/tabBar.vue";
    import curMenu from "@/components/curMenu/index.vue";
    import menuList from "@/components/menuList/index.vue";
    import gridMenu from "@/components/gridMenu/index.vue";
    import {
        getFuncList,
        getHouseList
    } from "@/api/doorplateAddress/doorplateAddress";
    export default {
        components: {
            tabBar,
            curMenu,
            menuList,
            gridMenu
        },
        data() {
            return {
                menuList: [],
                selectRole: {},
                selectBoxShow: false,
                siteColumns: [],
                curSelectSite: {},
                columnData: [],
                btnList: [{
                        imgUrl: '/static/img/sys.png',
                        title: '扫一扫',
                        imgWidth: 54,
                        imgHeight: 54
                    },
                    {
                        imgUrl: '/static/img/bs.png',
                        title: '报事',
                        imgWidth: 54,
                        imgHeight: 54
                    }
                ],
                gridDataList: [],
                houseDataList: [{
                    title: '-',
                    useSlot: true
                }],
                liveList: [],
                jobList: [],
                taskTypeList: [{
                        title: '一次性',
                        num: 1,
                    },
                    {
                        title: '周期性',
                        num: 0,
                    }
                ],
                taskList: [{
                        title: '综治任务',
                        num: 0
                    },
                    {
                        title: '住建任务',
                        num: 0
                    },
                    {
                        title: '公安任务',
                        num: 0
                    },
                ],
            }
        },
        onShow() {
            this.init()
        },
        computed: {
            hasMenu() {
                return (name) => {
                    let resultArr = []
                    resultArr = this.getMenu(name, this.menuList, resultArr)
                    if (resultArr.length > 0) {
                        return resultArr
                    } else {
                        return []
                    }
                }
            }
        },
        methods: {
            //初始化
            init() {
                this.curSelectSite = {}
                this.menuList = uni.getStorageSync("menu")
                this.selectRole = uni.getStorageSync("activeRole")
                this.getMenuList()
                this.getSiteList()
                uni.hideTabBar()
            },
            //获取场所列表
            async getSiteList() {
                console.log(this.selectRole)
                let type = null
                let roleName = this.selectRole.roleName
                console.log("roleName", roleName)
                if (roleName == '网格员' || roleName == '系统管理员') {
                    type = 1
                } else if (roleName == '场所负责人') {
                    type = 2
                } else if (roleName == '居民') {
                    type = 3
                }
                const res = await getFuncList(type, roleName)
                console.log(res, "-----------")
                let data = res.data
                this.siteColumns = []
                this.buildSiteColumn(data, 0)
                console.log(this.siteColumns)
            },
            buildSiteColumn(dataList, index) {
                if (dataList.length > 0) {
                    this.siteColumns[index] = dataList
                    if (dataList[0].children && dataList[0].children.length > 0) {
                        this.buildSiteColumn(dataList[0].children, index + 1)
                    }
                }
            },
            //获取首页菜单
            getMenuList() {
                console.log("当前角色菜单", this.menuList)
                this.getPhoneList()
                this.getLiveList()
                this.getWorkbenchList()
            },
            getPhoneList() {
                this.gridDataList = []
                const resultArr = this.hasMenu('快捷拨号')
                if (resultArr.length == 0) {
                    return
                }
                const topMenu = resultArr[0]
                topMenu.children.forEach(menu => {
                    this.gridDataList.push({
                        title: menu.name,
                        data: "无数据",
                        phone: "无"
                    })
                })
            },
            //获取生活菜单
            getLiveList() {
                this.liveList = []
                const resultArr = this.hasMenu('生活')
                if (resultArr.length == 0) {
                    return
                }
                const topMenu = resultArr[0]
                topMenu.children.forEach(menu => {
                    this.liveList.push({
                        imgUrl: menu.source,
                        title: menu.name,
                    })
                })
            },
            //获取工作台菜单
            getWorkbenchList() {
                this.jobList = []
                const resultArr = this.hasMenu('工作台')
                if (resultArr.length == 0) {
                    return
                }
                const topMenu = resultArr[0]
                topMenu.children.forEach(menu => {
                    this.jobList.push({
                        imgUrl: menu.source,
                        title: menu.name,
                    })
                })
            },
            // 获取楼盘表
            async getHouseDataList(name) {
                const res = await getHouseList(1, name)
                // 数据处理
                res.data.forEach(item => {
                    item.title = item.name
                    item.useSlot = true
                    delete item.name
                })
                this.houseDataList = res.data || [{
                    title: '-',
                    useSlot: true
                }]
            },
            getMenu(menuName, menuList, resultArr) {
                // console.log(menuList, menuName)
                for (var i = 0; i < menuList.length; i++) {
                    if (menuList[i].name == menuName) {
                        resultArr.push(menuList[i])
                    } else {
                        if (menuList[i].children && menuList[i].children.length) {
                            this.getMenu(menuName, menuList[i].children, resultArr);
                        }
                    }
                }
                return resultArr
            },
            change(index) {
                let url = index
                this.$u.func.globalNavigator(url, "switchTab")
            },
            changeHandler(e) {
                const {
                    columnIndex,
                    value,
                    values, // values为当前变化列的数组内容
                    index,
                    // 微信小程序无法将picker实例传出来,只能通过ref操作
                    picker = this.$refs.uPicker
                } = e
                // 当第一列值发生变化时,变化第二列(后一列)对应的选项
                if (columnIndex === 0 && this.columnData.length > 0) {
                    // picker为选择器this实例,变化第二列对应的选项
                    picker.setColumnValues(1, this.columnData[index])
                }
            },
            // 回调参数为包含columnIndex、value、values
            confirm(e) {
                console.log('confirm', e)
                this.curSelectSite = e.value[e.value.length - 1]
                this.selectBoxShow = false
                this.getHouseDataList(e.value[1].name)
            },
            // 页面跳转
            pushPage({id, title}) {
                if (id !== void 0) {
                    let url = `/subPackage/house/list/index?id=${id}&title=${title}`
                    this.$u.func.globalNavigator(url, "navTo")
                }
            }
        }
    }
</script>
<style lang="scss" scoped>
    .container {
        width: 100%;
        height: 100%;
        display: flex;
        flex-direction: column;
        background: #F9F9FA;
        color: #fff;
        font-size: 32rpx;
        .main {
            position: relative;
            height: 0;
            flex: 1;
            overflow-y: auto;
            .main-bg {
                height: 36%;
                background: royalblue;
            }
            .main-select {
                margin: 0 6%;
                position: absolute;
                bottom: 74%;
                display: flex;
                align-items: center;
            }
            .main-btn {
                margin: 0 6%;
                position: absolute;
                top: 28%;
                width: 88%;
                height: 20%;
                background: #fff;
                border-radius: 10rpx;
                color: #000;
            }
            .main-phone-house {
                margin-top: 180rpx;
                width: 100%;
                .phone-box {
                    display: flex;
                    &>view {
                        margin: 0 16rpx;
                        height: 116rpx;
                        flex: 1;
                        background: linear-gradient(to right, #407BE9, #73A2F9);
                        border-radius: 10rpx;
                    }
                }
                .house-box {
                    .content {
                        display: flex;
                        flex-wrap: wrap;
                        &>view {
                            margin: 0 16rpx;
                            margin-top: 20rpx;
                            min-width: calc((100% - 16rpx * 6) / 3);
                            height: 66rpx;
                            background: linear-gradient(to right, #407BE9, #73A2F9);
                            border-radius: 33rpx;
                        }
                    }
                }
            }
            .main-bt {
                margin-top: 2%;
                width: 100%;
                color: #000;
            }
        }
    }
</style>
subPackage/bs/views/rentDetail.vue
@@ -6,17 +6,33 @@
            </view>
            <view class="basic-info">
                <u-form-item @click="showList.relation = true" class="form-item" labelWidth="100" label="租客关系:" required
                    prop="type">
                    <u--input border="none" v-model="nameList.relation" disabled disabledColor="#ffffff"
                        placeholder="请选择租客关系">
                <u-form-item @click="showSelectBus(dataList.relation, '租客关系', 'relationName','relation')"
                    class="form-item" labelWidth="100" label="租客关系" required prop="type">
                    <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 @click="typeShow = true" class="form-item" labelWidth="100" label="事件类型:" required
                <u-form-item @click="showSelectBus(dataList.houseType, '房屋状态', 'houseTypeName','houseType')"
                    class="form-item" labelWidth="100" label="房屋状态:" required prop="type">
                    <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 @click="showSelectBus(dataList.rentalUse, '租房用途', 'rentalUseName','rentalUse')"
                    class="form-item" labelWidth="100" label="租房用途:" required prop="type">
                    <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 @click="rentTimeShow = true" class="form-item" labelWidth="100" label="租房时间:" required
                    prop="type">
                    <u--input border="none" v-model="typeName" disabled disabledColor="#ffffff" placeholder="请选择事件类型">
                    <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>
@@ -48,11 +64,12 @@
        </u-form>
        <!-- 租客关系下拉框 -->
        <my-select v-if="showList.relation" :show="showList.relation" v-model="form.relation" type="radio"
            popupTitle="请选择租客关系" :dataLists="dataList.relation" @cancel="showList.relation = false">
        </my-select>
        <!-- 事件类型下拉框 -->
        <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-datetime-picker :show="rentTimeShow" v-model="form.rentTime" mode="date"></u-datetime-picker>
@@ -62,23 +79,68 @@
</template>
<script>
    import selectBus from "@/components/my-components/selectBus.vue"
    import uploadMixin from "@/mixin/uploadMixin";
    export default {
        mixins: [uploadMixin],
        components: {
            selectBus
        },
        data() {
            return {
                form: {
                    relation: ""
                    relation: "",
                    houseTyep: "",
                    rentTime: "",
                },
                showList: {
                    relation: false
                },
                nameList: {
                    relation: ""
                },
                rules: {},
                rentTimeShow: false,
                relationName: "",
                houseTypeName: "",
                rentalUseName: "",
                dataList: {
                    relation: []
                }
                    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"
                        }
                    ]
                },
                selectBusList: [],
                selectBusTitle: '',
                selectBusModel: '',
                selectBusKey: '',
                typeShow: false
            }
@@ -96,7 +158,19 @@
        },
        methods: {
            showSelectBus(data, title, model, key) {
                this.selectBusList = data
                this.selectBusTitle = title
                this.selectBusModel = model
                this.selectBusKey = key
                this.typeShow = true
            },
            //类型选择确认
            typeSelect(item) {
                this[this.selectBusModel] = item.name
                this.form[this.selectBusKey] = item.value
                this.typeShow = !this.typeShow
            },
        }
    }
</script>
subPackage/house/family/index.vue
@@ -1,310 +1,171 @@
<template>
    <view class="container">
        <view class="flex f-d-c main">
            <view class="cur-header">
                <u-icon name="home" color="#fff"></u-icon>
                {{housingName}}/{{buildingName}}栋
            </view>
            <view class="h0 flex-1 build-list-box">
                <u-collapse :border="false">
                    <u-collapse-item style="border: none;" :title="item.unitName" :name="index"
                        v-for="(item, index) in buildingList" :key="index">
                        <view class="flex floor-content" v-for="(floor, floorIndex) in item.floorList"
                            :key="floorIndex">
                            <view class="floor-num-box flex a-i-c j-c-c">
                                {{floor.floorName}}
                            </view>
                            <view class="room-content">
                                <u-grid class="flex flex-wrap" col="2" :border="true">
                                    <u-grid-item v-for="(family, familyIndex) in floor.familyList" :key="familyIndex">
                                        <view class="room-box flex f-d-c">
                                            <view class="flex a-i-c j-c-s-b" v-show="family.resideStatus">
                                                <view class="l">{{family.houseHoldName}}</view>
                                                <view class="r flex">
                                                    <view v-show="family.resideStatus">
                                                        <u-icon name="photo"></u-icon>
                                                    </view>
                                                    <view v-show="family.isOwner">
                                                        <u-icon name="photo"></u-icon>
                                                    </view>
                                                </view>
                                            </view>
                                            <view class="flex">
                                                <view class="l flex">
                                                    <u-icon name="home" color="blue"></u-icon>
                                                    {{family.roomNumber}}
                                                </view>
                                                <view class="r">
                                                </view>
                                            </view>
                                        </view>
                                    </u-grid-item>
                                </u-grid>
                            </view>
                        </view>
                    </u-collapse-item>
                </u-collapse>
                <u-divider text="已经到底了"></u-divider>
            </view>
        </view>
    </view>
</template>
<template>
    <view class="container">
        <view class="flex f-d-c main">
            <view class="cur-header">
                <u-icon name="home" color="#fff"></u-icon>
                {{housingName}}/{{buildingName}}栋
            </view>
            <view class="h0 flex-1 build-list-box">
                <u-collapse :border="false">
                    <u-collapse-item style="border: none;" :title="item.unitName" :name="index"
                        v-for="(item, index) in buildingList" :key="index">
                        <view class="flex floor-content" v-for="(cItem, cIndex) in item.children"
                            :key="cIndex">
                            <view class="floor-num-box flex a-i-c j-c-c">
                                {{cItem.floor}}
                            </view>
                            <view class="room-content">
                                <u-grid class="flex flex-wrap" col="2" :border="true">
                                    <u-grid-item v-for="(scItem, scIndex) in cItem.children" :key="scItem.id"  @click.native="pushPage(scItem)">
                                        <view class="room-box flex f-d-c">
                                            <view class="flex a-i-c j-c-s-b" v-show="scItem.resideStatus">
                                                <view class="l">{{scItem.realName}}</view>
                                                <view class="r flex">
                                                    <view v-show="scItem.resideStatus">
                                                        <u-icon name="photo"></u-icon>
                                                    </view>
                                                    <view v-show="!!scItem.roleType === '业主'">
                                                        <u-icon name="photo"></u-icon>
                                                    </view>
                                                </view>
                                            </view>
                                            <view class="flex">
                                                <view class="l flex">
                                                    <u-icon name="home" color="blue"></u-icon>
                                                    {{scItem.houseNo}}
                                                </view>
                                                <view class="r">
                                                </view>
                                            </view>
                                        </view>
                                    </u-grid-item>
                                </u-grid>
                            </view>
                        </view>
                    </u-collapse-item>
                </u-collapse>
                <u-divider text="已经到底了"></u-divider>
            </view>
        </view>
    </view>
</template>
<script>
    export default {
        components: {},
        data() {
    import {
        getHouseInfoList
    } from "@/api/doorplateAddress/doorplateAddress";
    export default {
        components: {},
        data() {
            return {
                housingName: '万达晶座',
                buildingName: 11,
                buildingList: [{
                        unitName: '一单元',
                        floorList: [{
                                floorName: '1层',
                                familyList: [{
                                        houseHoldName: '王子豪1',
                                        resideStatus: 1, // 1居住,0未居住
                                        isOwner: 1, // 1业主, 0不是业主
                                        roomNumber: 301
                                    },
                                    {
                                        houseHoldName: '王子豪2',
                                        resideStatus: 1, // 1居住,0未居住
                                        isOwner: 1, // 1业主, 0不是业主
                                        roomNumber: 301
                                    },
                                    {
                                        houseHoldName: '王子豪3',
                                        resideStatus: 0, // 1居住,0未居住
                                        isOwner: 0, // 1业主, 0不是业主
                                        roomNumber: 301
                                    },
                                    {
                                        houseHoldName: '王子豪4',
                                        resideStatus: 1, // 1居住,0未居住
                                        isOwner: 1, // 1业主, 0不是业主
                                        roomNumber: 301
                                    },
                                    {
                                        houseHoldName: '王子豪5',
                                        resideStatus: 1, // 1居住,0未居住
                                        isOwner: 1, // 1业主, 0不是业主
                                        roomNumber: 301
                                    },
                                    {
                                        houseHoldName: '王子豪6',
                                        resideStatus: 1, // 1居住,0未居住
                                        isOwner: 1, // 1业主, 0不是业主
                                        roomNumber: 301
                                    },
                                    {
                                        houseHoldName: '王子豪',
                                        resideStatus: 1, // 1居住,0未居住
                                        isOwner: 1, // 1业主, 0不是业主
                                        roomNumber: 301
                                    }
                                ]
                            },
                            {
                                floorName: '2层',
                                familyList: [{
                                        houseHoldName: '王子豪1',
                                        resideStatus: 1, // 1居住,0未居住
                                        isOwner: 1, // 1业主, 0不是业主
                                        roomNumber: 301
                                    },
                                    {
                                        houseHoldName: '王子豪2',
                                        resideStatus: 1, // 1居住,0未居住
                                        isOwner: 1, // 1业主, 0不是业主
                                        roomNumber: 301
                                    },
                                    {
                                        houseHoldName: '王子豪3',
                                        resideStatus: 1, // 1居住,0未居住
                                        isOwner: 1, // 1业主, 0不是业主
                                        roomNumber: 301
                                    },
                                    {
                                        houseHoldName: '王子豪4',
                                        resideStatus: 1, // 1居住,0未居住
                                        isOwner: 1, // 1业主, 0不是业主
                                        roomNumber: 301
                                    },
                                    {
                                        houseHoldName: '王子豪5',
                                        resideStatus: 1, // 1居住,0未居住
                                        isOwner: 1, // 1业主, 0不是业主
                                        roomNumber: 301
                                    },
                                    {
                                        houseHoldName: '王子豪6',
                                        resideStatus: 1, // 1居住,0未居住
                                        isOwner: 1, // 1业主, 0不是业主
                                        roomNumber: 301
                                    },
                                    {
                                        houseHoldName: '王子豪',
                                        resideStatus: 1, // 1居住,0未居住
                                        isOwner: 1, // 1业主, 0不是业主
                                        roomNumber: 301
                                    }
                                ]
                            }
                        ]
                    },
                    {
                        unitName: '二单元',
                        floorList: [{
                                floorName: '1层',
                                familyList: [{
                                    houseHoldName: '王子豪1',
                                    resideStatus: 0, // 1居住,0未居住
                                    isOwner: 0, // 1业主, 0不是业主
                                    roomNumber: 301
                                }]
                            },
                            {
                                floorName: '2层',
                                familyList: [{
                                        houseHoldName: '王子豪1',
                                        resideStatus: 1, // 1居住,0未居住
                                        isOwner: 1, // 1业主, 0不是业主
                                        roomNumber: 301
                                    },
                                    {
                                        houseHoldName: '王子豪2',
                                        resideStatus: 1, // 1居住,0未居住
                                        isOwner: 1, // 1业主, 0不是业主
                                        roomNumber: 301
                                    },
                                    {
                                        houseHoldName: '王子豪3',
                                        resideStatus: 1, // 1居住,0未居住
                                        isOwner: 1, // 1业主, 0不是业主
                                        roomNumber: 301
                                    },
                                    {
                                        houseHoldName: '王子豪4',
                                        resideStatus: 1, // 1居住,0未居住
                                        isOwner: 1, // 1业主, 0不是业主
                                        roomNumber: 301
                                    },
                                    {
                                        houseHoldName: '王子豪5',
                                        resideStatus: 1, // 1居住,0未居住
                                        isOwner: 1, // 1业主, 0不是业主
                                        roomNumber: 301
                                    },
                                    {
                                        houseHoldName: '王子豪6',
                                        resideStatus: 1, // 1居住,0未居住
                                        isOwner: 1, // 1业主, 0不是业主
                                        roomNumber: 301
                                    },
                                    {
                                        houseHoldName: '王子豪',
                                        resideStatus: 1, // 1居住,0未居住
                                        isOwner: 1, // 1业主, 0不是业主
                                        roomNumber: 301
                                    },
                                    {
                                        houseHoldName: '王子豪',
                                        resideStatus: 1, // 1居住,0未居住
                                        isOwner: 1, // 1业主, 0不是业主
                                        roomNumber: 301
                                    }
                                ]
                            }
                        ]
                    }
                ]
            }
        },
        onShow() {},
        methods: {
        }
    }
</script>
<style lang="scss" scoped>
    .container {
        width: 100%;
        height: 100%;
        display: flex;
        flex-direction: column;
        background: #F9F9FA;
        font-size: 26rpx;
        .main {
            position: relative;
            height: 0;
            flex: 1;
            overflow-y: auto;
            .cur-header {
                padding-left: 16rpx;
                display: flex;
                align-items: center;
                min-height: 96rpx;
                color: #fff;
                background: #6A9DFD;
            }
            .build-list-box {
                /deep/ .u-cell {
                    background: #A0C0FC !important;
                }
                /deep/ .u-collapse-item__content__text {
                    padding: 0 !important;
                }
            }
            /deep/ .floor-content {
                border-bottom: 1rpx solid #ccc;
                .floor-num-box {
                    padding: 0 20rpx !important;
                    background: #EAECF0;
                }
                .room-content {
                    width: 0;
                    flex: 1;
                    background: #FEFEFF;
                    .room-box {
                        padding: 8rpx;
                        justify-content: center;
                        align-items: center;
                        width: 100%;
                        min-height: 116rpx;
                        box-sizing: border-box;
                        &>view {
                            margin: auto;
                            width: 100%;
                        }
                    }
                    .u-grid-item:nth-child(2n-1) {
                        border-right: 1rpx solid #dadbde !important;
                    }
                }
            }
        }
    }
                currentId: '',
                housingName: '',
                buildingName: 0,
                buildingList: []
            }
        },
        onLoad(e) {
            const { id, housingName, buildingName } = e
            this.currentId = id
            this.housingName = housingName
            this.buildingName = buildingName
        },
        onShow() {
            this.getBuildingList()
        },
        methods: {
            async getBuildingList() {
                const res = await getHouseInfoList(3, '9cedfffba380fc19f88ede2323aca651')
                res.data.forEach(item => {
                    item.children && item.children.sort((a, b) => a.floor - b.floor)
                })
                console.log(res.data)
                this.buildingList = res.data || []
            },
            pushPage(value) {
                const { addressCode } = value
                let url = `/subPackage/house/roomDetails/index?id=${addressCode}`
                this.$u.func.globalNavigator(url, "navTo")
            }
        }
    }
</script>
<style lang="scss" scoped>
    .container {
        width: 100%;
        height: 100%;
        display: flex;
        flex-direction: column;
        background: #F9F9FA;
        font-size: 26rpx;
        .main {
            position: relative;
            height: 0;
            flex: 1;
            overflow-y: auto;
            .cur-header {
                padding-left: 16rpx;
                display: flex;
                align-items: center;
                min-height: 96rpx;
                color: #fff;
                background: #6A9DFD;
            }
            .build-list-box {
                /deep/ .u-cell {
                    background: #A0C0FC !important;
                }
                /deep/ .u-collapse-item__content__text {
                    padding: 0 !important;
                }
            }
            /deep/ .floor-content {
                border-bottom: 1rpx solid #ccc;
                .floor-num-box {
                    padding: 0 20rpx !important;
                    background: #EAECF0;
                }
                .room-content {
                    width: 0;
                    flex: 1;
                    background: #FEFEFF;
                    .room-box {
                        padding: 8rpx;
                        justify-content: center;
                        align-items: center;
                        width: 100%;
                        min-height: 116rpx;
                        box-sizing: border-box;
                        &>view {
                            margin: auto;
                            width: 100%;
                        }
                    }
                    .u-grid-item:nth-child(2n-1) {
                        border-right: 1rpx solid #dadbde !important;
                    }
                }
            }
        }
    }
</style>
subPackage/house/list/index.vue
@@ -1,83 +1,106 @@
<template>
    <view class="container">
        <view class="flex f-d-c main">
            <view class="flex house-container">
                <view class="house-list-box" v-for="(item, index) in houseList">
                    <view class="l">
                        <u-icon name="home" color="#fff"></u-icon>
                    </view>
                    <view class="r">
                        {{item.title}}栋
                    </view>
                </view>
            </view>
            <u-divider text="已经到底了"></u-divider>
        </view>
    </view>
</template>
<script>
    export default {
        components: {},
        data() {
            return {
                houseList: [{
                        title: 11
                    },
                    {
                        title: 12
                    },
                    {
                        title: 13
                    }
                ]
            }
        },
        onShow() {},
        methods: {
        }
    }
</script>
<style lang="scss" scoped>
    .container {
        width: 100%;
        height: 100%;
        display: flex;
        flex-direction: column;
        background: #F9F9FA;
        font-size: 26rpx;
        .main {
            position: relative;
            height: 0;
            flex: 1;
            overflow-y: auto;
            .house-container {
                flex-wrap: wrap;
                .house-list-box {
                    margin: 16rpx;
                    padding: 0 16rpx;
                    display: flex;
                    justify-content: space-between;
                    align-items: center;
                    width: calc((100% - 96rpx) / 3);
                    height: 68rpx;
                    border-radius: 34rpx;
                    color: #fff;
                        background: linear-gradient(to right, #417BE9, #6D9FFB);
                    box-sizing: border-box;
                }
            }
        }
    }
<template>
    <view class="container">
        <view class="flex f-d-c main">
            <view class="flex house-container">
                <view class="house-list-box" v-for="(item, index) in houseList" @click="pushPage(item)">
                    <view class="l">
                        <u-icon name="home" color="#fff"></u-icon>
                    </view>
                    <view class="r">
                        {{item.title}}栋
                    </view>
                </view>
            </view>
            <u-divider text="已经到底了"></u-divider>
        </view>
    </view>
</template>
<script>
    import {
        getHouseInfoList
    } from "@/api/doorplateAddress/doorplateAddress";
    export default {
        components: {},
        data() {
            return {
                currentId: '',
                curHouseTitle: '',
                houseList: [{
                    title: '-'
                }]
            }
        },
        onLoad(e) {
            const { id, title } = e
            this.currentId = id
            this.curHouseTitle = title
        },
        onShow() {
            this.getHouseInfo()
        },
        methods: {
            async getHouseInfo() {
                const res = await getHouseInfoList(2, this.currentId)
                // 删除栋字
                const reg = new RegExp('栋', 'g')
                res.data.forEach(item => {
                    item.title = item['name'].replace(reg, '')
                    delete item.name
                })
                this.houseList = res.data || [{
                    title: '-'
                }]
            },
            pushPage(value) {
                const { id, title } = value
                if (id !== void 0) {
                    let url = `/subPackage/house/family/index?id=${id}&housingName=${this.curHouseTitle}&buildingName=${title}`
                    this.$u.func.globalNavigator(url, "navTo")
                }
            }
        }
    }
</script>
<style lang="scss" scoped>
    .container {
        width: 100%;
        height: 100%;
        display: flex;
        flex-direction: column;
        background: #F9F9FA;
        font-size: 26rpx;
        .main {
            position: relative;
            height: 0;
            flex: 1;
            overflow-y: auto;
            .house-container {
                flex-wrap: wrap;
                .house-list-box {
                    margin: 16rpx;
                    padding: 0 16rpx;
                    display: flex;
                    justify-content: space-between;
                    align-items: center;
                    width: calc((100% - 96rpx) / 3);
                    height: 68rpx;
                    border-radius: 34rpx;
                    color: #fff;
                    background: linear-gradient(to right, #417BE9, #6D9FFB);
                    box-sizing: border-box;
                }
            }
        }
    }
</style>
subPackage/house/roomDetails/index.vue
@@ -4,11 +4,12 @@
            <view class="content">
                <view class="base b-c-w">
                    <view class="flex a-i-c">
                        <u-icon name="photo"></u-icon> 万达晶座:11栋
                        <u-icon name="photo"></u-icon> {{ houseTitle }}
                    </view>
                    <view class="flex j-c-s-b">
                        <view>
                            一单元单元 2901室(共2人)
                            {{ unitName }}单元 {{ houseName }}室
                            <!-- (共2人) -->
                        </view>
                        <view class="flex a-i-c">
                            <u-button size='small' shape="circle" type="primary" :plain="true" text="房屋管理"></u-button>
@@ -28,13 +29,13 @@
                            <view class="info">
                                <view>姓名:{{item.name}}</view>
                                <view class="flex">
                                    手机:{{item.phone}} <u-icon name="phone-fill" color="#4586FE"></u-icon>
                                    手机:{{item.phoneNumber}} <u-icon name="phone-fill" color="#4586FE"></u-icon>
                                </view>
                                <view class="flex">
                                    关系:
                                    <view class="flex a-i-c">
                                        <u-tag :text="item.relation" size="mini"
                                            :bgColor="item.relationType == 1 ? '#07C160' : '#1989FA'"></u-tag>
                                        <u-tag :text="item.relationship" size="mini"
                                            :bgColor="item.residentialStatus == 1 ? '#07C160' : '#1989FA'"></u-tag>
                                    </view>
                                </view>
                            </view>
@@ -65,7 +66,7 @@
                    <view class="mt-40 rent-out-list b-c-w" v-for="(item, index) in rentOutList" :key="index">
                        <view class="t flex j-c-s-b a-i-c">
                            <view class="l">
                                租客:{{item.name}}(共{{item.allNum}}人)
                                租客:{{item.tenant}}(共{{item.allNum}}人)
                            </view>
                            <view class="r">
                                <u-icon name="trash-fill" color="red"></u-icon>
@@ -73,7 +74,7 @@
                        </view>
                        <view class="t flex j-c-s-b a-i-c">
                            <view class="l">
                                {{item.startTime}} - {{item.endTime}}
                                {{item.rentalTime}} - {{item.dueTime}}
                            </view>
                            <view class="r">
                                {{item.status == 1 ? '已到期' : '未到期'}}
@@ -91,9 +92,9 @@
            </view>
            <view class="edit-btn">
                <veiw>
                <view>
                    <u-button type="primary" text="添加成员"></u-button>
                </veiw>
                </view>
                <view>
                    <u-button type="primary" :plain="true" text="添加租赁信息"></u-button>
@@ -104,50 +105,52 @@
</template>
<script>
    import {
        getHouseRentInfo
    } from "@/api/doorplateAddress/doorplateAddress";
    export default {
        components: {},
        data() {
            return {
                ownerInfoList: [{
                        src: 'https://cdn.uviewui.com/uview/album/1.jpg',
                        name: '郑洪峰',
                        phone: 13566687549,
                        relationType: 1,
                        relation: '业主'
                    },
                    {
                        src: 'https://cdn.uviewui.com/uview/album/1.jpg',
                        name: '郑小峰',
                        phone: 13547687549,
                        relationType: 3,
                        relation: '儿子'
                    }
                ],
                rentOutList: [
                    {
                        name: '皇阿玛',
                        startTime: '2023-01-01',
                        endTime: '2024-01-01',
                        status: 0, // 0 未到期,1已到期
                        allNum: 1
                    },
                    {
                        name: '皇阿玛two',
                        startTime: '2023-01-01',
                        endTime: '2024-01-01',
                        status: 0, // 0 未到期,1已到期
                        allNum: 2
                    }
                ]
                houseTitle: '',
                currentId: '',
                houseName: '',
                unitName: '',
                ownerInfoList: [],
                rentOutList: []
            }
        },
        onShow() {},
        onLoad(e) {
            const { id } = e
            this.currentId = id
        },
        onShow() {
            this.getHouseRentInfoList()
        },
        methods: {
            async getHouseRentInfoList() {
                const res = await getHouseRentInfo(this.currentId)
                const { districtName, doorplateName, buildingName, houseName, unitName, houseRentalList, householdList } = res.data
                this.houseTitle = districtName + ':' + buildingName
                this.rentOutList = houseRentalList
                this.ownerInfoList = householdList
                this.houseName = houseName
                this.unitName = unitName
                // 判断当前租客有没有过期
                this.rentOutList.forEach(item => {
                    // 事件格式处理
                    item.rentalTime = item.rentalTime.split(' ')[0]
                    item.dueTime = item.dueTime.split(' ')[0]
                    // 当前房间租客数量
                    item.allNum = item.houseTenantVOList.length
                    // 多人个租客将第一个作为显示
                    item.tenant = item.houseTenantVOList.length > 0 ? item.houseTenantVOList[0].name : ''
                })
            }
        }
    }
</script>