Lou
2023-12-14 cc8fa259ce39e3daebb8a5f7a8cddfc52323662c
首页样式调整,综治网格、公安网格数据渲染,楼盘列表演示调整
9 files modified
4 files added
1 files deleted
1476 ■■■■■ changed files
api/grid/grid.js 34 ●●●●● patch | view | raw | blame | history
api/tenement/tenement.js 12 ●●●●● patch | view | raw | blame | history
common/setting.js 4 ●●●● patch | view | raw | blame | history
components/caption/caption.vue 14 ●●●● patch | view | raw | blame | history
components/noticeList/noticeList.vue 4 ●●●● patch | view | raw | blame | history
components/noticeList/tagCell.vue 4 ●●●● patch | view | raw | blame | history
pages/home/index.vue 133 ●●●● patch | view | raw | blame | history
pages/home/index3.vue 861 ●●●●● patch | view | raw | blame | history
pages/user/center4.vue 306 ●●●●● patch | view | raw | blame | history
static/img/center-bg.png patch | view | raw | blame | history
subPackage/grid/comprehensive.vue 58 ●●●● patch | view | raw | blame | history
subPackage/grid/publicSecurity.vue 29 ●●●● patch | view | raw | blame | history
subPackage/grid/tenement.vue 13 ●●●●● patch | view | raw | blame | history
subPackage/house/family/index.vue 4 ●●●● patch | view | raw | blame | history
api/grid/grid.js
New file
@@ -0,0 +1,34 @@
import http from '@/http/api.js'
//获取物业详情
export const getTenementDetail = (params) => {
    return http.request({
        url: 'blade-propertyCompany/propertyCompany/getDetail',
        method: 'GET',
        params: {
            ...params
        }
    })
}
//获取网格详情
export const getGridDetail = (params) => {
    return http.request({
        url: 'blade-grid/grid/gridInfoByHouseCode',
        method: 'GET',
        params: {
            ...params
        }
    })
}
//获取公安详情
export const getPublicSecurityDetail = (params) => {
    return http.request({
        url: 'blade-doorplateAddress/doorplateAddress/detail',
        method: 'GET',
        params: {
            ...params
        }
    })
}
api/tenement/tenement.js
File was deleted
common/setting.js
@@ -14,8 +14,8 @@
    // devUrl:'http://192.168.1.50:9528',
    // devUrl: 'http://192.168.0.102:9528',
    // devUrl:'https://srgdjczzxtpt.com:2080/api',
    // devUrl: 'http://192.168.0.102:9528',
    devUrl: 'https://srgdjczzxtpt.com:2080/api',
    devUrl: 'http://192.168.0.106:9528',
    // devUrl: 'https://srgdjczzxtpt.com:2080/api',
    minioBaseUrl: "https://srgdjczzxtpt.com:2080/gminio/jczz/",
    // minioBaseUrl:"http://192.168.0.103:9528/",
    // minioBaseUrl: 'https://srgdjczzxtpt.com:2080/',
components/caption/caption.vue
@@ -1,10 +1,14 @@
<template>
    <view class="caption flex a-i-c j-c-s-b" @click="navTo()">
    <view class="caption flex a-i-c j-c-s-b">
        <view class="flex a-i-c">
            <view class="line"></view>
            <text class="f-32 fw">{{title}}</text>
        </view>
        <u-icon name="arrow-right"  v-if="isLink"></u-icon>
        <view class="caption-right"  v-if="isLink"    @click="navTo()">
            <text class="f-26 c-99">更多</text>
            <u-icon name="arrow-right" color="#999"  size="14" ></u-icon>
        </view>
    </view>
</template>
@@ -40,5 +44,11 @@
            background-color: #017BFC;
            margin-right: 14rpx;
        }
        .caption-right{
            width:120rpx;
            display: flex;
            justify-content: flex-end;
            align-items: center;
        }
    }
</style>
components/noticeList/noticeList.vue
@@ -3,7 +3,7 @@
        <view class="notice-list" @click="navToDetail(item.id,item.eventType,item.pdId)" v-for="(item,index) in data" :key="index">
            <view v-if="item.url" class="notice-inner flex j-c-s-b">
                <view class="notice-list-left flex f-d-c j-c-s-b">
                    <text class="notice-title f-28 fw">{{item.title}}</text>
                    <text class="notice-title f-28">{{item.title}}</text>
                    <view class="flex j-c-s-b a-i-c">
                        <view class="flex a-i-c">
                            <tag-cell :text="item.dictValue" />
@@ -18,7 +18,7 @@
                <u-image :src="setUrl(item.url)" width="200rpx" height="140rpx"></u-image>
            </view>
            <view v-else class="notice-inner flex f-d-c j-c-s-b">
                <text class="notice-title f-28 fw">{{item.title}}</text>
                <text class="notice-title f-28">{{item.title}}</text>
                <view class="flex j-c-s-b a-i-c">
                    <view class="flex a-i-c">
                        <tag-cell :text="item.dictValue" />
components/noticeList/tagCell.vue
@@ -1,6 +1,6 @@
<template>
    <view class="">
        <view class="tag-cell f-24 c-main">
        <view class="tag-cell f-20 c-main">
            {{text}}
        </view>
    </view>
@@ -18,7 +18,7 @@
<style scoped>
    .tag-cell{
        padding:3rpx 10rpx;
        padding:2rpx 5rpx;
        border-radius:30rpx;
        background-color: rgb(236,244,255);
        border:1px solid currentColor;
pages/home/index.vue
@@ -1,20 +1,21 @@
<template>
    <view class="layout">
        <u-navbar height="48" :autoBack="false" safeAreaInsetTop placeholder
            @leftClick="selectBoxShow = !selectBoxShow">
        <u-navbar height="48" :autoBack="false" safeAreaInsetTop placeholder @leftClick="selectBoxShow = !selectBoxShow"
            bgColor="#017BFC">
            <view slot="left" class="top flex">
                <view class="top-text f-30 fw">{{curSelectSite.name?curSelectSite.name:'暂无绑定' +roleTypeName+'信息'}}
                <view class="top-text f-30 fw c-ff">{{curSelectSite.name?curSelectSite.name:'暂无绑定' +roleTypeName+'信息'}}
                </view>
                <u-icon name="/static/icon/change-icon.png"></u-icon>
                <u-icon name="arrow-down" color="#fff"></u-icon>
            </view>
        </u-navbar>
        <view class="swiper">
            <u-swiper :list="bannerList" height="320rpx" radius="10"></u-swiper>
        </view>
        <view class="content">
            <view class="swiper mb-30">
                <u-swiper :list="bannerList" height="260rpx"></u-swiper>
            </view>
            <view class="">
                <view class="section flex j-c-s-a a-i-c mt-40" v-if="isShowContact && curSelectSite.addressType == 1">
                    <view class="section-item" v-for="(i,k) in contactList" :key="k" v-if="i.name">
                <view class="section flex j-c-s-a a-i-c mb-20" v-if="isShowContact && curSelectSite.addressType == 1">
                    <view class="section-item" v-for="(i,k) in contactList" :key="k" v-if="i.name"   @click="navigatorPage(`${i.path}?id=${i.id}`)">
                        <image class="section-item-bg" :src="i.bgImg" mode="aspectFill"></image>
                        <view class="item-box">
                            <view class="f-28">{{i.title}}</view>
@@ -26,7 +27,7 @@
                    </view>
                </view>
                <view class="block flex a-i-c j-c-s-b" v-if="roleType == 1">
                <view class="block flex a-i-c j-c-s-b mb-20" v-if="roleType == 1">
                    <view @click="scan" class="block-item">
                        <image class="block-item-bg" src="/static/icon/nav-bg-04.png" mode="aspectFill" />
                        <view class="block-item-box flex a-i-c ">
@@ -52,27 +53,37 @@
                        <view class="block-item-box flex a-i-c">
                            <u-icon name="/static/icon/nav-12.png" width="65rpx" height="65rpx"></u-icon>
                            <view class="item-text flex f-d-c j-c-s-b">
                                <text class="f-24 fw">数据驾驶舱</text>
                                <text class="f-24 fw">驾驶舱</text>
                                <text class="f-22 opacity">数据统计</text>
                            </view>
                        </view>
                    </view>
                </view>
                <view class="" v-if="liveList.length">
                    <caption-row title="生活" />
                    <view class="grid">
                        <u-grid :border="false" :col="liveList.length">
                <view class="nav bgc-ff" v-if="liveList.length || roleType == 2">
                    <!-- <caption-row title="生活" /> -->
                    <u-grid :border="false" col="4">
                        <block v-if="liveList.length">
                            <u-grid-item @click.native="navigatorPage(i.path)" v-for="(i,k) in liveList" :key="k">
                                <u-icon :name="i.pictureImg" width="90rpx" height="90rpx"></u-icon>
                                <text class="f-26 mt-20">{{i.name}}</text>
                                <view class="nav-item flex f-d-c a-i-c">
                                    <u-icon :name="i.pictureImg" width="80rpx" height="80rpx"></u-icon>
                                    <text class="nav-item-text f-26 mt-20">{{i.name}}</text>
                                </view>
                            </u-grid-item>
                        </u-grid>
                    </view>
                        </block>
                        <block v-if="roleType == 2">
                            <u-grid-item @click="navigatorPage(i.path)" v-for="(i,k) in communityList" :key="k">
                                <view class="nav-item flex f-d-c a-i-c">
                                    <u-icon :name="i.icon" width="80rpx" height="80rpx"></u-icon>
                                    <text class="nav-item-text f-26  mt-10">{{i.title}}</text>
                                </view>
                            </u-grid-item>
                        </block>
                    </u-grid>
                </view>
            </view>
            <view class="" v-if="isShowHouse">
            <view class="bgc-ff p-20 mb-20 pb-20" v-if="isShowHouse">
                <caption-row title="楼盘表" />
                <view class="flex flex-wrap">
                    <view class="cell bgc-main flex a-i-c" v-for="(item, index) in houseDataList.slice(0, 6)"
@@ -83,7 +94,7 @@
                </view>
            </view>
            <view class="mb-20" v-if="roleType == 2">
            <!-- <view class="mb-20 p-20" v-if="roleType == 2">
                <caption-row title="社区" />
                <view class="mt-20">
                    <u-grid :border="false" col="3">
@@ -101,9 +112,9 @@
                        </u-grid-item>
                    </u-grid>
                </view>
            </view>
            </view> -->
            <view class="" v-if="jobList.length && roleType == 1">
            <view class="bgc-ff mb-20 p-20 pb-20" v-if="jobList.length && roleType == 1">
                <caption-row title="工作台" />
                <u-grid :border="false" col="4">
                    <u-grid-item @click="navigatorPage(item.path)" v-for="(item, index) in jobList" :index="index"
@@ -115,7 +126,7 @@
                    </u-grid-item>
                </u-grid>
            </view>
            <view class="" v-if="roleType == 2 && curSelectSite.addressType == 2">
            <view class="bgc-ff mb-20 p-20 pb-20" v-if="roleType == 2 && curSelectSite.addressType == 2">
                <caption-row title="工作台" />
                <u-grid :border="false" col="4">
                    <u-grid-item @click="navigatorPage('/subPackage/workbench/views/editExamine')"
@@ -135,7 +146,7 @@
                    </u-grid-item>
                </u-grid>
            </view>
            <view class="notic" v-if="isShowNotice">
            <view class="p-20 bgc-ff mb-20" v-if="isShowNotice">
                <caption-row title="通知公告" :is-link="true" url="/subPackage/article/list" />
                <notice-list :data="notice" />
            </view>
@@ -290,6 +301,25 @@
                        phone: ""
                    },
                ],
                communityList: [{
                        title: "选举调查",
                        icon: "/static/icon/nav-14.png",
                        path: "/subPackage/article/communityList?type=1"
                    },
                    {
                        title: "公益报名",
                        icon: "/static/icon/nav-13.png",
                        path: "/subPackage/article/communityList?type=0"
                    },
                    {
                        title: "公共收益",
                        icon: "/static/icon/nav-15.png",
                        path: ""
                    }
                ]
            }
        },
@@ -311,6 +341,10 @@
            //         url: "/pages/login/login-account"
            //     })
            // }
        },
        onShareAppMessage() {
        },
        computed: {
@@ -392,7 +426,7 @@
                    if (data.wg) {
                        this.contactList[1].name = data.wg.name;
                        this.contactList[1].phone = data.wg.phone
                        this.contactList[1].path = "";
                        this.contactList[1].path = "/subPackage/grid/comprehensive";
                        this.contactList[1].id = data.wg.code;
                    }
                    if (data.wy) {
@@ -404,7 +438,7 @@
                    if (data.ga) {
                        this.contactList[2].name = data.ga.name;
                        this.contactList[2].phone = data.ga.phone;
                        this.contactList[2].path = "";
                        this.contactList[2].path = "/subPackage/grid/publicSecurity";
                        this.contactList[2].id = data.ga.code;
                    }
                })
@@ -732,13 +766,12 @@
        color: #333;
        width: 100%;
        height: 100%;
        background-color: #fff;
        background-color: #f5f5f5;
    }
    .layout {
        width: 100%;
        height: 100%;
        background-color: #fff;
    }
    .top {
@@ -755,17 +788,35 @@
    .swiper {
        width: 100%;
        height: 260rpx;
        height: 340rpx;
        background: linear-gradient(180deg, #017BFC 0%, rgba(1, 123, 252, 0) 100%);
        padding: 0 30rpx;
        box-sizing: border-box;
    }
    .content {
        padding: 0 30rpx;
    }
    .grid {
        margin-top: 20rpx;
        margin-bottom: 10rpx;
    // .grid {
    //     margin-top: 20rpx;
    //     margin-bottom: 10rpx;
    // }
    .nav {
        padding: 10rpx 0;
        margin-bottom: 20rpx;
        border-radius: 10rpx;
        .nav-item {
            padding: 10rpx 0;
        }
        .nav-item-text{
            font-family: PingFang SC;
            font-weight: 500;
            color: #585b61;
        }
    }
    .section {
        .section-item {
@@ -790,9 +841,7 @@
        }
    }
    .notic {
        width: 100%;
    }
    .block {
        .block-item {
@@ -803,9 +852,9 @@
        .block-item,
        .block-item-bg,
        .block-item-box {
            width: 226rpx;
            width: 220rpx;
            height: 150rpx;
            border-radius: 12rpx;
            border-radius: 10rpx;
        }
        .block-item-box {
@@ -858,4 +907,12 @@
            border-radius: 16rpx 16rpx 16rpx 16rpx;
        }
    }
    .p-20 {
        padding: 0 20rpx;
        border-radius: 10rpx;
    }
    .pb-20{
        padding-bottom:20rpx;
    }
</style>
pages/home/index3.vue
New file
@@ -0,0 +1,861 @@
<template>
    <view class="layout">
        <u-navbar height="48" :autoBack="false" safeAreaInsetTop placeholder
            @leftClick="selectBoxShow = !selectBoxShow">
            <view slot="left" class="top flex">
                <view class="top-text f-30 fw">{{curSelectSite.name?curSelectSite.name:'暂无绑定' +roleTypeName+'信息'}}
                </view>
                <u-icon name="/static/icon/change-icon.png"></u-icon>
            </view>
        </u-navbar>
        <view class="content">
            <view class="swiper mb-30">
                <u-swiper :list="bannerList" height="260rpx"></u-swiper>
            </view>
            <view class="">
                <view class="section flex j-c-s-a a-i-c mt-40" v-if="isShowContact && curSelectSite.addressType == 1">
                    <view class="section-item" v-for="(i,k) in contactList" :key="k" v-if="i.name">
                        <image class="section-item-bg" :src="i.bgImg" mode="aspectFill"></image>
                        <view class="item-box">
                            <view class="f-28">{{i.title}}</view>
                            <view class="flex j-c-s-b">
                                <text class="f-22">{{i.name}}</text>
                                <u-icon :name="i.icon" @click.stop="callPhone(i.phone)"></u-icon>
                            </view>
                        </view>
                    </view>
                </view>
                <view class="block flex a-i-c j-c-s-b" v-if="roleType == 1">
                    <view @click="scan" class="block-item">
                        <image class="block-item-bg" src="/static/icon/nav-bg-04.png" mode="aspectFill" />
                        <view class="block-item-box flex a-i-c ">
                            <u-icon name="/static/icon/nav-05.png" width="65rpx" height="65rpx"></u-icon>
                            <view class="item-text flex f-d-c j-c-s-b">
                                <text class="f-24 fw">扫一扫</text>
                                <text class="f-22 opacity">场所采集</text>
                            </view>
                        </view>
                    </view>
                    <view class="block-item" @click="navigatorPage('/subPackage/user/clockIn/index')">
                        <image class="block-item-bg" src="/static/icon/nav-bg-05.png" mode="aspectFill" />
                        <view class="block-item-box flex a-i-c">
                            <u-icon name="/static/icon/nav-06.png" width="65rpx" height="65rpx"></u-icon>
                            <view class="item-text flex f-d-c j-c-s-b">
                                <text class="f-24 fw">打卡登记</text>
                                <text class="f-22 opacity">在线打卡</text>
                            </view>
                        </view>
                    </view>
                    <view class="block-item" @click="navigatorPage('/subPackage/statistics/index')">
                        <image class="block-item-bg" src="/static/icon/nav-bg-04.png" mode="aspectFill" />
                        <view class="block-item-box flex a-i-c">
                            <u-icon name="/static/icon/nav-12.png" width="65rpx" height="65rpx"></u-icon>
                            <view class="item-text flex f-d-c j-c-s-b">
                                <text class="f-24 fw">数据驾驶舱</text>
                                <text class="f-22 opacity">数据统计</text>
                            </view>
                        </view>
                    </view>
                </view>
                <view class="" v-if="liveList.length">
                    <caption-row title="生活" />
                    <view class="grid">
                        <u-grid :border="false" :col="liveList.length">
                            <u-grid-item @click.native="navigatorPage(i.path)" v-for="(i,k) in liveList" :key="k">
                                <u-icon :name="i.pictureImg" width="90rpx" height="90rpx"></u-icon>
                                <text class="f-26 mt-20">{{i.name}}</text>
                            </u-grid-item>
                        </u-grid>
                    </view>
                </view>
            </view>
            <view class="" v-if="isShowHouse">
                <caption-row title="楼盘表" />
                <view class="flex flex-wrap">
                    <view class="cell bgc-main flex a-i-c" v-for="(item, index) in houseDataList.slice(0, 6)"
                        @click.native="pushPage(item)" :key="index">
                        <u-icon name="/static/icon/floor.png" width="32rpx" height="32rpx"></u-icon>
                        <text class="cell-text f-26 c-ff">{{item.title}}</text>
                    </view>
                </view>
            </view>
            <view class="mb-20" v-if="roleType == 2">
                <caption-row title="社区" />
                <view class="mt-20">
                    <u-grid :border="false" col="3">
                        <u-grid-item @click="navigatorPage(`/subPackage/article/communityList?type=1`)">
                            <u-icon name="/static/icon/nav-14.png" width="90rpx" height="90rpx"></u-icon>
                            <text class="f-26  mt-10">选举调查</text>
                        </u-grid-item>
                        <u-grid-item @click="navigatorPage(`/subPackage/article/communityList?type=0`)">
                            <u-icon name="/static/icon/nav-13.png" width="90rpx" height="90rpx"></u-icon>
                            <text class="f-26  mt-10">公益报名</text>
                        </u-grid-item>
                        <u-grid-item @click="navigatorPage('')">
                            <u-icon name="/static/icon/nav-15.png" width="90rpx" height="90rpx"></u-icon>
                            <text class="f-26  mt-10">公共收益</text>
                        </u-grid-item>
                    </u-grid>
                </view>
            </view>
            <view class="" v-if="jobList.length && roleType == 1">
                <caption-row title="工作台" />
                <u-grid :border="false" col="4">
                    <u-grid-item @click="navigatorPage(item.path)" v-for="(item, index) in jobList" :index="index"
                        :key="index" :customStyle="{paddingTop:20+'rpx'}">
                        <view class="grid-item flex f-d-c a-i-c" :style="{background:item.background}">
                            <u-icon :name="item.pictureImg" width="60rpx" height="60rpx"></u-icon>
                            <text class="grid-text f-24 fw mt-10">{{item.name}}</text>
                        </view>
                    </u-grid-item>
                </u-grid>
            </view>
            <view class="" v-if="roleType == 2 && curSelectSite.addressType == 2">
                <caption-row title="工作台" />
                <u-grid :border="false" col="4">
                    <u-grid-item @click="navigatorPage('/subPackage/workbench/views/editExamine')"
                        :customStyle="{paddingTop:20+'rpx'}">
                        <view class="grid-item flex f-d-c a-i-c"
                            style="background:linear-gradient(133deg, #F9FAFE 0%, rgba(249,250,254,0) 100%)">
                            <u-icon name="/static/icon/menu-05.png" width="60rpx" height="60rpx"></u-icon>
                            <text class="grid-text f-24 fw mt-10">场所维护</text>
                        </view>
                    </u-grid-item>
                    <u-grid-item @click="navigatorPage('')" :customStyle="{paddingTop:20+'rpx'}">
                        <view class="grid-item flex f-d-c a-i-c"
                            style="background:linear-gradient(133deg, #F9FAFE 0%, rgba(249,250,254,0) 100%)">
                            <u-icon name="/static/icon/menu-02.png" width="60rpx" height="60rpx"></u-icon>
                            <text class="grid-text f-24 fw mt-10">场所任务</text>
                        </view>
                    </u-grid-item>
                </u-grid>
            </view>
            <view class="notic" v-if="isShowNotice">
                <caption-row title="通知公告" :is-link="true" url="/subPackage/article/list" />
                <notice-list :data="notice" />
            </view>
            <u-picker :title="roleTypeName" :defaultIndex="selectSiteIndex" :closeOnClickOverlay="true"
                @close="selectBoxShow = false" :show="selectBoxShow" keyName="name" ref="uPicker" :columns="siteColumns"
                @confirm="confirmSite" @change="changeSite" @cancel="selectBoxShow = false"></u-picker>
        </view>
    </view>
</template>
<script>
    import {
        getFuncList,
        getHouseList
    } from "@/api/doorplateAddress/doorplateAddress";
    import {
        getPage
    } from "@/api/article/article";
    import {
        getBannerList,
        getContact
    } from "@/api/system/index"
    import {
        minioBaseUrl
    } from "@/common/setting"
    import noticeList from "@/components/noticeList/noticeList";
    import captionRow from "@/components/caption/caption.vue"
    export default {
        components: {
            noticeList,
            captionRow
        },
        data() {
            return {
                jobList: [{
                        icon: "/static/icon/menu-01.png",
                        text: "场所记录",
                        style: {
                            background: 'linear-gradient(133deg, #FFFCF9 0%, rgba(255,252,249,0) 100%)',
                        },
                        path: "/subPackage/workbench/views/csjl"
                    },
                    {
                        icon: "/static/icon/menu-02.png",
                        text: "场所采集",
                        style: {
                            background: 'linear-gradient(133deg, #F9FAFE 0%, rgba(249,250,254,0) 100%)',
                        },
                        path: "/subPackage/workbench/views/cscj"
                    },
                    {
                        icon: "/static/icon/menu-03.png",
                        text: "出租房管理",
                        style: {
                            background: 'linear-gradient(131deg, #FCF8FF 0%, rgba(252,248,255,0) 100%)',
                        },
                        path: "/subPackage/workbench/views/rental"
                    },
                    {
                        icon: "/static/icon/menu-04.png",
                        text: "标签事件",
                        style: {
                            background: 'linear-gradient(133deg, #F9FAFE 0%, rgba(249,250,254,0) 100%)',
                        },
                        path: "/subPackage/workbench/views/audit"
                    },
                    {
                        icon: "/static/icon/menu-05.png",
                        text: "场所维护",
                        style: {
                            background: 'linear-gradient(133deg, #F9FAFE 0%, rgba(249,250,254,0) 100%)',
                        },
                        path: "/subPackage/workbench/views/cshw"
                    },
                    {
                        icon: "/static/icon/menu-06.png",
                        text: "报事审核",
                        style: {
                            background: 'linear-gradient(137deg, #FFF4F3 0%, rgba(255,244,243,0) 100%)',
                        },
                        path: "/subPackage/workbench/views/report"
                    },
                    {
                        icon: "/static/icon/menu-10.png",
                        text: "我的任务",
                        style: {
                            background: 'linear-gradient(133deg, #F9FAFE 0%, rgba(249,250,254,0) 100%)'
                        },
                        path: "/subPackage/task/index"
                    },
                    {
                        icon: "/static/icon/menu-02.png",
                        text: "工作日志",
                        style: {
                            background: 'linear-gradient(131deg, #FCF8FF 0%, rgba(252,248,255,0) 100%)'
                        },
                        path: "/subPackage/workbench/views/workLog"
                    },
                    {
                        icon: "/static/icon/menu-02.png",
                        text: "网格巡查",
                        style: {
                            background: 'linear-gradient(133deg, #F9FAFE 0%, rgba(249,250,254,0) 100%)'
                        },
                        path: "/subPackage/workbench/views/patrol"
                    }
                ],
                roleType: 2, // 1网格员/系统管理员 、  2居民
                roleTypeName: "街道社区网格",
                selectBoxShow: false,
                siteColumns: [],
                curSelectSite: {
                    addressType: 1
                },
                columnData: [],
                houseDataList: [{
                    title: '-',
                    useSlot: true
                }],
                menuList: [],
                curHouseCode: '',
                notice: [],
                selectSiteIndex: [0, 0],
                liveList: [], //生活菜单
                contactList: [], //便民服务联系方式
                isShowHouse: false, //显示楼盘表
                isShowNotice: true, //显示通知公告
                isShowContact: false,
                bannerList: [],
                navList: [{
                        title: "物业",
                        name: "",
                        icon: "/static/icon/tel-green.png",
                        bgImg: "/static/icon/nav-bg-01.png",
                        phone: ""
                    },
                    {
                        title: "综治网格",
                        name: "",
                        icon: "/static/icon/tel-orange.png",
                        bgImg: "/static/icon/nav-bg-02.png",
                        phone: ""
                    },
                    {
                        title: "公安网格",
                        name: "",
                        icon: "/static/icon/tel-blue.png",
                        bgImg: "/static/icon/nav-bg-03.png",
                        phone: ""
                    },
                ],
            }
        },
        onLoad() {
            this.getBanner();
            this.init()
            uni.$on('refresh', () => {
                this.selectSiteIndex = [0, 0]
                this.curSelectSite = {
                    addressType: 1
                }
                this.init()
            })
        },
        onReady() {
            // if (!uni.getStorageSync("userInfo")) {
            //     uni.redirectTo({
            //         url: "/pages/login/login-account"
            //     })
            // }
        },
        computed: {
            hasMenu() {
                return (name) => {
                    let resultArr = this.getMenu(name, this.menuList)
                    if (resultArr.length) {
                        return resultArr
                    } else {
                        return []
                    }
                }
            }
        },
        watch: {
            'curSelectSite.id': {
                handler(newVal, oldVal) {
                    if (newVal) {
                        this.$store.commit("setSiteInfo", this.curSelectSite)
                    }
                },
                deep: true,
                immediate: true
            },
            'curSelectSite.addressType': {
                handler(newVal, oldVal) {
                    if (newVal) {
                        this.$store.dispatch("getMenuList").then(res => {
                            this.getMenuList()
                        });
                    }
                },
                deep: true,
                // immediate: true
            }
        },
        onPullDownRefresh() {
            this.$store.dispatch("getMenuList").then(res => {
                this.getMenuList()
            });
            setTimeout(() => {
                uni.stopPullDownRefresh();
            }, 300)
        },
        methods: {
            //初始化
            init() {
                this.selectRole = uni.getStorageSync("activeRole")
                this.getMenuList()
                this.getSiteList()
                this.getNoticeList()
            },
            getBanner() {
                getBannerList({
                    current: 1,
                    size: 5
                }).then(res => {
                    let data = res.data.records;
                    if (data.length) {
                        for (let i of data) {
                            i.url = `${minioBaseUrl}${i.url}`
                        }
                        this.bannerList = data;
                    }
                })
            },
            getContactList() {
                getContact({
                    houseCode: this.curHouseCode
                }).then(res => {
                    let data = res.data;
                    this.contactList = this.navList;
                    if (data.wg) {
                        this.contactList[1].name = data.wg.name;
                        this.contactList[1].phone = data.wg.phone
                        this.contactList[1].path = "";
                        this.contactList[1].id = data.wg.code;
                    }
                    if (data.wy) {
                        this.contactList[0].name = data.wy.name;
                        this.contactList[0].phone = data.wy.phone;
                        this.contactList[0].path = "/subPackage/grid/tenement";
                        this.contactList[0].id = data.wy.code;
                    }
                    if (data.ga) {
                        this.contactList[2].name = data.ga.name;
                        this.contactList[2].phone = data.ga.phone;
                        this.contactList[2].path = "";
                        this.contactList[2].id = data.ga.code;
                    }
                })
            },
            callPhone(phone) {
                uni.makePhoneCall({
                    phoneNumber: phone
                })
            },
            async getNoticeList() {
                const param = {
                    size: 10,
                    current: 1,
                    houseCode: uni.getStorageSync("siteInfo").houseCode
                }
                const res = await getPage(param)
                this.notice = res.data.records
            },
            //获取场所列表
            async getSiteList() {
                let type = null
                let roleName = this.selectRole.roleName
                if (roleName == '网格员' || roleName == '系统管理员') {
                    type = 1
                    this.roleType = 1;
                    this.roleTypeName = "街道社区网格"
                } else if (roleName == '居民') {
                    type = 2
                    this.roleType = 2
                    this.roleTypeName = "居民"
                }
                const res = await getFuncList(type, roleName)
                this.columnData = res.data;
                let data = res.data
                this.siteColumns = []
                this.buildSiteColumn(data, 0)
            },
            buildSiteColumn(dataList, index) {
                if (dataList.length > 0) {
                    this.siteColumns[index] = dataList
                    if (dataList[0].children && dataList[0].children.length > 0) {
                        this.curSelectSite = dataList[0].children[0];
                        this.getHouseDataList(dataList[0].children[0].id)
                        this.buildSiteColumn(dataList[0].children, index + 1)
                    } else {
                        this.curSelectSite = dataList[0];
                    }
                    this.curHouseCode = this.curSelectSite.id
                }
            },
            // 获取楼盘
            async getHouseDataList(code) {
                const param = {
                    type: 1,
                    code: code,
                    roleName: uni.getStorageSync('activeRole').roleName
                }
                const res = await getHouseList(param)
                res.data.forEach(item => {
                    item.title = item.name
                    item.useSlot = true
                    delete item.name
                })
                this.houseDataList = res.data || [{
                    title: '-',
                    useSlot: true
                }]
            },
            changeSite(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])
                    // this.siteColumns[1] = this.columnData[index].children
                    this.$set(this.siteColumns, 1, this.columnData[index].children)
                };
            },
            // 回调参数为包含columnIndex、value、values
            confirmSite(e) {
                console.log('confirm', e)
                this.selectSiteIndex = e.indexs;
                this.curSelectSite = e.value[e.value.length - 1]
                this.selectBoxShow = false
                this.getHouseDataList(e.value[1]?.id)
                this.curHouseCode = e.value[0].id
                console.log("curSite=>", this.curSelectSite);
            },
            getMenu(menuName) {
                let list = [];
                for (let i of this.menuList) {
                    if (i.name == menuName) {
                        if (i.children && i.children.length) {
                            list = i.children;
                            break;
                        }
                    }
                }
                return list;
            },
            //获取首页菜单
            getMenuList() {
                this.menuList = uni.getStorageSync("menu")
                this.liveList = this.setLiveMenu(this.hasMenu('生活'));
                // this.contactList = this.hasMenu('快捷拨号');
                this.jobList = this.hasMenu('工作台')
                if (this.menuList.length) {
                    this.getContactMenu();
                    this.getHouseMenu();
                    this.getNoticeMenu();
                }
                setTimeout(() => {
                    if (this.jobList.length) {
                        let taskList = this.jobList.filter(item => item.name == "我的任务")
                        if (taskList.length) {
                            uni.setStorageSync("taskMenu", taskList[0].children);
                        } else {
                            uni.setStorageSync("taskMenu", []);
                        }
                    } else {
                        uni.setStorageSync("taskMenu", []);
                    }
                }, 200)
            },
            getContactMenu() {
                let list = [];
                list = this.menuList.filter(item => item.name == "快捷拨号")
                this.isShowContact = list.length ? true : false;
                if (list.length) {
                    this.getContactList()
                }
            },
            getHouseMenu() {
                let list = [];
                list = this.menuList.filter(item => item.name == "楼盘表")
                this.isShowHouse = list.length ? true : false;
            },
            getNoticeMenu() {
                let list = [];
                list = this.menuList.filter(item => item.name == "通知公告")
                this.isShowNotice = list.length ? true : false;
                if (list.length) {
                    this.getNoticeList()
                }
            },
            setLiveMenu(arr) {
                if (arr.length) {
                    let index = this.getLiveMenuItem(arr, 1)
                    let index2 = this.getLiveMenuItem(arr, 2)
                    if (this.curSelectSite.addressType == 1) {
                        if (index != -1) {
                            arr.splice(index, 1)
                            index = this.getLiveMenuItem(arr, 1)
                            index2 = this.getLiveMenuItem(arr, 2)
                        }
                        if (index2 == -1) {
                            arr.push({
                                name: "租客上报",
                                path: "/subPackage/bs/views/zhsb",
                                pictureImg: "/static/icon/nav-04.png"
                            })
                            index = this.getLiveMenuItem(arr, 1)
                            index2 = this.getLiveMenuItem(arr, 2)
                        }
                    } else {
                        if (index == -1) {
                            arr.unshift({
                                name: "标签报事",
                                path: "/subPackage/label/index",
                                pictureImg: "/static/icon/nav-11.png"
                            })
                            index = this.getLiveMenuItem(arr, 1)
                            index2 = this.getLiveMenuItem(arr, 2)
                        }
                        if (index2 != -1) {
                            arr.splice(index2, 1)
                            index = this.getLiveMenuItem(arr, 1)
                            index2 = this.getLiveMenuItem(arr, 2)
                        }
                    }
                }
                return arr;
            },
            getLiveMenuItem(arr, type) {
                if (type == 1) {
                    let index = arr.findIndex(item => item.name == "标签报事")
                    return index;
                } else {
                    let index2 = arr.findIndex(item => item.name == "租户上报")
                    return index2
                }
            },
            // 页面跳转
            pushPage(item) {
                const {
                    id,
                    title,
                    addressType
                } = item;
                if (id !== void 0) {
                    let url = `/subPackage/house/list/index?id=${id}&title=${title}&addressType=${addressType}`
                    this.$u.func.globalNavigator(url, "navTo")
                }
            },
            navTo() {
                if (this.curHouseCode === '') {
                    uni.showToast({
                        title: "请选择地址",
                        icon: "error"
                    })
                    return
                }
                this.$u.func.globalNavigator(`/subPackage/bs/views/zhsb?houseCode=${this.curHouseCode}`, "navTo")
            },
            navigatorPage(path) {
                if (path) {
                    if ((path == '/subPackage/bs/views/zhsb' || path == '/subPackage/bs/views/repair') && this
                        .curHouseCode === '') {
                        uni.showToast({
                            title: "尚无绑定房屋信息",
                            icon: "error"
                        })
                    }
                    // else if (path == "/subPackage/statistics/index") {
                    //     uni.showToast({
                    //         title: "功能开发中~",
                    //         icon: "none"
                    //     })
                    // }
                    else {
                        this.$u.func.globalNavigator(`${path}?houseCode=${this.curHouseCode}`, "navTo")
                    }
                } else {
                    uni.showToast({
                        title: "功能开发中~",
                        icon: "none"
                    })
                }
            },
            //扫一扫
            scan() {
                const that = this
                uni.scanCode({
                    success: function(res) {
                        console.log(res)
                        console.log('条码类型:' + res.scanType);
                        console.log('条码内容:' + res.result);
                        let eventType = 0;
                        let obj = that.getUrlParams(res.result)
                        console.log(obj)
                        if (obj.stdId == "3C77B40EFC5F4C899AA74BEE747D9DF1") {
                            eventType = 1;
                        }
                        if (obj.stdId == "CDF5528D617342228F3C84EF5C3C8780") {
                            eventType = 2;
                        }
                        if (eventType) {
                            that.$u.func.globalNavigator(
                                `/subPackage/house/houseNumber/index?stdId=${obj.stdId}&eventType=${eventType}`,
                                "navTo")
                        } else {
                            that.$u.func.globalNavigator(
                                `/subPackage/house/houseNumber/index?stdId=${obj.stdId}`, "navTo")
                        }
                        //"3C77B40EFC5F4C899AA74BEE747D9DF1"
                        // let url = "/subPackage/workbench/views/cscj?stdId=" + obj.stdId
                        // let url = "/subPackage/workbench/views/cscj?houseCode=" + obj.stdId
                        // let url = `/subPackage/house/houseNumber/index?stdId=${obj.stdId}`
                        // that.$u.func.globalNavigator(url, "navTo")
                    }
                });
            },
            getUrlParams(url) {
                // 通过 ? 分割获取后面的参数字符串
                let urlStr = url.split('?')[1]
                // 创建空对象存储参数
                let obj = {};
                // 再通过 & 将每一个参数单独分割出来
                let paramsArr = urlStr.split('&')
                for (let i = 0, len = paramsArr.length; i < len; i++) {
                    // 再通过 = 将每一个参数分割为 key:value 的形式
                    let arr = paramsArr[i].split('=')
                    obj[arr[0]] = arr[1];
                }
                return obj
            },
        }
    }
</script>
<style lang="scss">
    page {
        color: #333;
        width: 100%;
        height: 100%;
        background-color: #fff;
    }
    .layout {
        width: 100%;
        height: 100%;
        background-color: #fff;
    }
    .top {
        width: 530rpx;
        .top-text {
            max-width: 85%;
            margin-right: 20rpx;
            white-space: nowrap;
            overflow: hidden;
            text-overflow: ellipsis;
        }
    }
    .swiper {
        width: 100%;
        height: 260rpx;
    }
    .content {
        padding: 0 30rpx;
    }
    .grid {
        margin-top: 20rpx;
        margin-bottom: 10rpx;
    }
    .section {
        .section-item {
            width: 216rpx;
            height: 120rpx;
            position: relative;
        }
        .section-item-bg {
            width: 216rpx;
            height: 120rpx;
        }
        .item-box {
            width: 216rpx;
            height: 120rpx;
            position: absolute;
            top: 0;
            left: 0;
            padding: 20rpx 20rpx 0;
            box-sizing: border-box;
        }
    }
    .notic {
        width: 100%;
    }
    .block {
        .block-item {
            position: relative;
        }
        .block-item,
        .block-item-bg,
        .block-item-box {
            width: 226rpx;
            height: 150rpx;
            border-radius: 12rpx;
        }
        .block-item-box {
            padding: 0 12rpx;
            box-sizing: border-box;
            position: absolute;
            top: 0;
            left: 0;
        }
        .item-text {
            height: 65rpx;
            margin-left: 20rpx;
            color: #fff;
        }
        .opacity {
            opacity: .4;
        }
    }
    .cell {
        padding: 0 16rpx;
        height: 64rpx;
        border-radius: 8rpx;
        margin-right: 20rpx;
        margin-top: 30rpx;
        .cell-text {
            margin-left: 16rpx;
        }
    }
    .grid-item {
        width: 153rpx;
        height: 153rpx;
        border-radius: 16rpx 16rpx 16rpx 16rpx;
        justify-content: center;
    }
    .row {
        width: 100%;
        margin: 30rpx 0;
        .row-item {
            width: 330rpx;
            height: 134rpx;
            box-shadow: 0rpx 10rpx 10rpx 0rpx rgba(0, 0, 0, 0.02);
            border-radius: 16rpx 16rpx 16rpx 16rpx;
        }
    }
</style>
pages/user/center4.vue
New file
@@ -0,0 +1,306 @@
<template>
    <view class="container">
        <view class="head" :style="{height: `${headHeight}rpx`}">
            <u-navbar :is-fixed="false" :border-bottom="false"  title="个人中心" :background="{ background: 'transprent' }" title-color="#FFFFFF">
                <view @click="$u.func.route('/pages/system/setting')" slot="right">
                    <image src="/static/images/user/setting.png" class="set-icon" mode="widthFix"></image>
                </view>
            </u-navbar>
            <image src="/static/img/center-bg.png" class="head-bg" :style="{height: `${headHeight}rpx`}" />
            <!-- 用户信息 -->
            <view class="user-box">
                <view class="left">
                    <image :src="userInfo.avatar" class="avatar" mode=""></image>
                    <view class="user-name">{{ userInfo.nick_name }}</view>
                    <view class="tag">{{ userInfo.tenant_id }}</view>
                </view>
                <view @click="$u.func.route('/pages/user/profile')" class="edit-btn">编辑资料</view>
            </view>
            <!-- 操作按钮 -->
            <view class="nav"  v-if="roleType == 1">
                <navigator url="" hover-class="none" class="nav-item">
                    <image src="/static/images/user/n1.png" class="icon" mode=""></image>
                    <view class="name">我的家人</view>
                </navigator>
                <navigator url="" hover-class="none" class="nav-item">
                    <image src="/static/images/user/n2.png" class="icon" mode=""></image>
                    <view class="name">我的房屋</view>
                </navigator>
                <navigator url="" hover-class="none" class="nav-item">
                    <image src="/static/images/user/n3.png" class="icon" mode=""></image>
                    <view class="name">我的小区</view>
                </navigator>
                <navigator url="" hover-class="none" class="nav-item">
                    <image src="/static/images/user/n4.png" class="icon" mode=""></image>
                    <view class="name">出租信息</view>
                </navigator>
            </view>
        </view>
        <!-- 功能列表 -->
        <!-- <view class="cell-box">
            <u-cell-group :border="false">
                <u-cell-item title="我的评价">
                    <image slot="icon" src="/static/images/user/c1.png" class="icon" mode=""></image>
                </u-cell-item>
                <u-cell-item title="常见问题">
                    <image slot="icon" src="/static/images/user/c2.png" class="icon" mode=""></image>
                </u-cell-item>
                <u-cell-item title="客服中心" :border-bottom="false">
                    <image slot="icon" src="/static/images/user/c3.png" class="icon" mode=""></image>
                </u-cell-item>
            </u-cell-group>
        </view> -->
        <view class="cell-box">
            <u-cell-group :border="false">
                <u-cell title="切换角色"   isLink  url="/subPackage/user/role/index">
                    <image slot="icon" src="/static/images/user/c4.png" class="icon" mode=""></image>
                </u-cell>
                <u-cell title="修改密码" :border="false"   isLink  url="/subPackage/user/password/index">
                    <image slot="icon" src="/static/images/user/c4.png" class="icon" mode=""></image>
                </u-cell>
                <!-- <u-cell-item title="评分">
                    <image slot="icon" src="/static/images/user/c5.png" class="icon" mode=""></image>
                </u-cell-item>
                <u-cell-item title="反馈">
                    <image slot="icon" src="/static/images/user/c6.png" class="icon" mode=""></image>
                </u-cell-item>
                <u-cell-item title="关于" :border-bottom="false">
                    <image slot="icon" src="/static/images/user/c7.png" class="icon" mode=""></image>
                </u-cell-item> -->
            </u-cell-group>
        </view>
        <view class="cell-box">
            <u-cell-group :border="false">
                <u-cell title="退出登录" :border="false" @click="logOut"  isLink>
                    <image slot="icon" src="/static/images/user/c8.png" class="icon" mode=""></image>
                </u-cell>
            </u-cell-group>
        </view>
    </view>
</template>
<script>
    export default {
        data() {
            return {
                headHeight: 582,
                menuList: [{
                        icon: "/static/icon/menu-center-02.png",
                        title: "切换角色",
                        url: "/subPackage/user/role/index"
                    },
                    {
                        icon: "/static/icon/menu-center-03.png",
                        title: "修改密码",
                        url: "/subPackage/user/password/index"
                    }
                ],
                roleType: 1
            };
        },
        onShow() {
            let role = uni.getStorageSync('activeRole')
            if (role.roleAlias == "inhabitant") {
                this.roleType = 1
            } else {
                this.roleType = 2;
            }
        },
        mounted() {
            this.setHeadHeight()
        },
        methods: {
            setHeadHeight() {
                const that = this
                uni.getSystemInfo({
                    success: function(res) {
                        that.headHeight = Number(res.statusBarHeight) + Number(res.platform == 'ios' ? 44 : 48) + 582
                    }
                });
            },
            navigator(url) {
                this.$u.func.globalNavigator(url)
            },
            navToLogin() {
                uni.redirectTo({
                    url: "/pages/login/login-account"
                })
            },
            logOut() {
                uni.showModal({
                    title: "提示",
                    content: "是否要退出该账号?",
                    success: (res) => {
                        if (res.confirm) {
                            uni.setStorageSync("responIndex", 0)
                            uni.clearStorageSync()
                            uni.reLaunch({
                                url: "/pages/login/login-account"
                            })
                        }
                    }
                })
            },
        }
    };
</script>
<style lang="scss">
    .container {
        background-color: #f7f7f7;
        min-height: 100vh;
        overflow: hidden;
    }
    .head {
        position: relative;
        top: 0;
        left: 0;
        z-index: 1;
        min-height: 582rpx;
        overflow: hidden;
        background: #55A2F9;
        .set-icon {
            vertical-align: middle;
            width: 41rpx;
            height: auto;
            margin-right: 35rpx;
        }
        .head-bg {
            position: absolute;
            left: 0px;
            top: 0px;
            z-index: -1;
            width: 750rpx;
            height: 582rpx;
            background: #55A2F9;
        }
    }
    .user-box {
        display: flex;
        justify-content: space-between;
        padding: 0 20rpx 0 64rpx;
        margin-top: 36rpx;
        .left {
            display: flex;
            flex-direction: column;
            align-items: center;
            .avatar {
                width: 128rpx;
                height: 128rpx;
                background: #ffffff;
                border-radius: 50%;
            }
            .user-name {
                margin-top: 20rpx;
                font-size: 36rpx;
                font-family: Source Han Sans CN;
                font-weight: 500;
                color: #ffffff;
            }
            .tag {
                margin-top: 20rpx;
                display: flex;
                justify-content: center;
                align-items: center;
                padding: 5rpx 16rpx;
                border: 1px solid #f5f5f5;
                border-radius: 7rpx;
                font-size: 19rpx;
                font-family: Source Han Sans CN;
                font-weight: 300;
                color: #ffffff;
            }
        }
        .edit-btn {
            margin-top: 20rpx;
            flex-shrink: 0;
            display: flex;
            justify-content: center;
            align-items: center;
            width: 165rpx;
            height: 54rpx;
            border: 2rpx solid #f5f5f5;
            border-radius: 11rpx;
            font-size: 27rpx;
            font-family: Source Han Sans CN;
            font-weight: 400;
            color: #ffffff;
        }
    }
    .nav {
        display: flex;
        //border-top: 2rpx solid #7dcdd6;
        margin: 36rpx 38rpx 0;
        padding: 36rpx 0 42rpx;
        .nav-item {
            width: calc(100% / 4);
            display: flex;
            flex-direction: column;
            align-items: center;
            justify-content: space-between;
            font-size: 25rpx;
            font-family: Source Han Sans CN;
            font-weight: 400;
            color: #ffffff;
            &:not(:last-of-type) {
                position: relative;
                &::after {
                    position: absolute;
                    right: 0;
                    top: 50%;
                    transform: translateY(-50%);
                    content: '';
                    display: block;
                    width: 2rpx;
                    background-color: #fff;
                    height: 30rpx;
                }
            }
            .icon {
                width: 48rpx;
                height: 48rpx;
                margin-bottom: 6rpx;
            }
        }
    }
    .cell-box {
        background: #ffffff;
        margin: 18rpx;
        .icon {
            width: 32rpx;
            height: 32rpx;
            margin-right: 22rpx;
        }
    }
</style>
static/img/center-bg.png
subPackage/grid/comprehensive.vue
@@ -1,28 +1,29 @@
<template>
    <view class="">
        <view class="tab">
        <!-- <view class="tab">
            <u-tabs :list="tabList" :current="tabIndex" @click="changeTab" :inactiveStyle="{color:'#999999'}"
                :activeStyle="{color:'#017BFC'}"></u-tabs>
        </view>
        </view> -->
        
        <view class="grid flex flex-wrap">
            <view class="grid-item flex f-d-c a-i-c j-c-c">
                <text class="mb-20 f-28"></text>
                <u-image  width="150"  height="100"></u-image>
                <text class="mt-20"></text>
                <text class="c-99 f-26"></text>
        <view class="grid flex flex-wrap bgc-ff">
            <view class="grid-item flex f-d-c a-i-c j-c-c"  v-for="i in gridList">
                <!-- <text class="mb-20 f-28"></text> -->
                <u-image v-if="i.picUrl" :src="i.picUrl"  width="100"  height="100"></u-image>
                <u-image v-else src="/static/icon/user-01.png"  width="100"  height="100"></u-image>
                <text class="mt-20">{{i.gridmanName}}</text>
                <text class="c-99 f-26">{{i.mobile}}</text>
            </view>
        </view>
        
        <view class="detail bgc-ff">
            <caption-row  text="网格基本情况" />
            <view class="detail-content">
            <caption-row  title="网格基本情况" />
            <view class="detail-content f-28">
                <text v-for="i in houseList">{{i.aoiName}}{{i.buildingName}}</text>
            </view>
        </view>
        
        <view class="comment">
            <caption-row  text="留言" />
        <view class="comment"  v-if="false">
            <caption-row  title="留言" />
            <view class="comment-list ">
                <view class="comment-item flex " v-for="(item,index) in commentList" :key="index">
                    <u-avatar size="45" src="/static/icon/user-01.png"></u-avatar>
@@ -38,25 +39,44 @@
                </view>
            </view>
        </view>
        <view class="footer">
        <!-- <view class="footer">
            <u-search searchIcon='edit-pen' :animation="true" placeholder="写评论" disabled
                @click="navToComment"></u-search>
        </view>
        </view> -->
    </view>
</template>
<script>
    import captionRow from "@/components/caption/caption.vue"
    import { getGridDetail } from "@/api/grid/grid.js"
    export default {
        components:{
            captionRow
        },
        data(){
            return {
                gridList:[],
                houseList:[],
                commentList:[]
            }
        },
        onLoad(option) {
            this.getDetailInfo()
        },
        methods:{
            getDetailInfo() {
                getGridDetail({
                    houseCode:uni.getStorageSync("siteInfo").houseCode
                }).then(res => {
                    console.log(res)
                    this.houseList = res.data.doorplateAddress;
                    this.gridList = res.data.grid;
                })
            },
            navToComment() {
                uni.navigateTo({
                    url: `comment?id=${this.params.id}`
@@ -93,17 +113,21 @@
    }
    .grid{
        width:100%;
        padding:20rpx;
        box-sizing: border-box;
        .grid-item{
            width:150rpx;
            width:32.8%;
            padding:20rpx 0;
            // border:1px solid #333;
        }    
    }
    
    .detail{
        padding: 0 30rpx;
        margin:20rpx 0;
        margin:40rpx 0 20rpx;
        .detail-content{
            padding:20rpx 0;
            text-indent: 2em;
        }
    }
    .comment {
subPackage/grid/publicSecurity.vue
@@ -2,24 +2,45 @@
    <view class="bgc-ff">
        <view class="item-row flex j-c-s-b a-i-c">
            <text>公安局</text>
            <text></text>
            <text>{{detailInfo.branchName}}</text>
        </view>
        <view class="item-row flex j-c-s-b a-i-c">
            <text>派出所</text>
            <text></text>
            <text>{{detailInfo.localPoliceStationName}}</text>
        </view>
        <view class="item-row flex j-c-s-b a-i-c">
            <text>社区民警</text>
            <text></text>
            <text>{{detailInfo.policeman}}</text>
        </view>
        <view class="item-row flex j-c-s-b a-i-c">
            <text>联系方式</text>
            <text></text>
            <text>{{detailInfo.policemanPhone}}</text>
        </view>
    </view>
</template>
<script>
    import { getPublicSecurityDetail } from "@/api/grid/grid.js"
    export default {
        data(){
            return {
                detailInfo:{}
            }
        },
        onLoad() {
            this.getDetail()
        },
        methods:{
            getDetail(){
                getPublicSecurityDetail({
                    addressCode:uni.getStorageSync("siteInfo").houseCode
                }).then(res=>{
                    console.log(res)
                    this.detailInfo = res.data;
                })
            }
        }
    }
</script>
<style>
subPackage/grid/tenement.vue
@@ -1,7 +1,7 @@
<template>
    <view class="container">
        <view class="hander flex ">
            <u-avatar size="70"></u-avatar>
            <u-avatar size="70"  src="/static/icon/blue_floor.png"></u-avatar>
            <view class="flex f-d-c ml-20">
                <text class="f-30 fw mb-30">{{detailInfo.name}}</text>
                <view class="flex a-i-c">
@@ -37,7 +37,7 @@
                </view>
            </view>
        </view>
        <view class="">
        <view class=""  v-if="false">
            <caption-row title="留言" />
            <view class="comment-list bgc-ff mt-20">
                <view class="comment-item flex " v-for="(item,index) in commentList" :key="index">
@@ -64,8 +64,8 @@
<script>
    import captionRow from "@/components/caption/caption.vue"
    import {
        getDetail
    } from "@/api/tenement/tenement.js"
        getTenementDetail
    } from "@/api/grid/grid.js"
    export default {
        components: {
            captionRow
@@ -84,11 +84,14 @@
        methods: {
            getDetailInfo(id) {
                getDetail({
                getTenementDetail({
                    id
                }).then(res => {
                    console.log(res)
                    this.detailInfo = res.data;
                    this.$nextTick(() => {
                                        this.$refs.uReadMore.init();
                                    })
                })
            },
            
subPackage/house/family/index.vue
@@ -314,14 +314,14 @@
                .room-content {
                    flex: 1;
                    padding: 12rpx;
                    padding: 6rpx;
                    .room-box {
                        padding: 10rpx;
                        justify-content: center;
                        align-items: center;
                        // width: calc(100% - 30rpx);
                        width: calc(50% - 20rpx);
                        width: calc(50% - 12rpx);
                        min-height: 110rpx;
                        box-sizing: border-box;
                        // background-color: #FAFBFE;