| api/grid/grid.js | ●●●●● patch | view | raw | blame | history | |
| api/tenement/tenement.js | ●●●●● patch | view | raw | blame | history | |
| common/setting.js | ●●●●● patch | view | raw | blame | history | |
| components/caption/caption.vue | ●●●●● patch | view | raw | blame | history | |
| components/noticeList/noticeList.vue | ●●●●● patch | view | raw | blame | history | |
| components/noticeList/tagCell.vue | ●●●●● patch | view | raw | blame | history | |
| pages/home/index.vue | ●●●●● patch | view | raw | blame | history | |
| pages/home/index3.vue | ●●●●● patch | view | raw | blame | history | |
| pages/user/center4.vue | ●●●●● patch | view | raw | blame | history | |
| static/img/center-bg.png | patch | view | raw | blame | history | |
| subPackage/grid/comprehensive.vue | ●●●●● patch | view | raw | blame | history | |
| subPackage/grid/publicSecurity.vue | ●●●●● patch | view | raw | blame | history | |
| subPackage/grid/tenement.vue | ●●●●● patch | view | raw | blame | history | |
| subPackage/house/family/index.vue | ●●●●● 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;