Lou
2023-11-06 38b8100402772bf1b55502ae8ebf7a903c18e47b
merge
9 files modified
4 files added
1068 ■■■■ changed files
api/task/taskReportForRepairs.js 32 ●●●●● patch | view | raw | blame | history
pages.json 36 ●●●● patch | view | raw | blame | history
subPackage/bs/components/form/rentForm.vue 11 ●●●● patch | view | raw | blame | history
subPackage/bs/components/list/rentList.vue 79 ●●●●● patch | view | raw | blame | history
subPackage/bs/views/addRepair.vue 75 ●●●● patch | view | raw | blame | history
subPackage/bs/views/rentDetail.vue 7 ●●●●● patch | view | raw | blame | history
subPackage/bs/views/repair.vue 246 ●●●●● patch | view | raw | blame | history
subPackage/bs/views/repairList.vue 137 ●●●●● patch | view | raw | blame | history
subPackage/bs/views/zhsb.vue 5 ●●●●● patch | view | raw | blame | history
subPackage/house/family/index.vue 2 ●●● patch | view | raw | blame | history
subPackage/house/houseNumber/index.vue 179 ●●●●● patch | view | raw | blame | history
subPackage/house/roomControl/index.vue 103 ●●●●● patch | view | raw | blame | history
subPackage/workbench/views/csjl.vue 156 ●●●●● patch | view | raw | blame | history
api/task/taskReportForRepairs.js
New file
@@ -0,0 +1,32 @@
import http from '@/http/api.js'
//获取报事统计数据
export const getStatistics = (params) => {
    return http.request({
        url: '/blade-taskReportForRepairs/taskReportForRepairs/getStatisticsCount',
        method: 'GET',
        params: {
            ...params
        }
    })
}
export const getPage = (params) => {
    return http.request({
        url: '/blade-taskReportForRepairs/taskReportForRepairs/page',
        method: 'GET',
        params: {
            ...params
        }
    })
}
//添加
export const save = (data) => {
    return http.request({
        url: '/blade-taskReportForRepairs/taskReportForRepairs/save',
        method: 'POST',
        data: data
    })
}
pages.json
@@ -66,7 +66,7 @@
                }
            ]
        },
        //公告
        {
            "root": "subPackage/notice",
@@ -121,7 +121,16 @@
                    }
                },
                {
                    "path":"views/rental",
                    "path": "views/csjl",
                    "style": {
                        "navigationBarTitleText": "场所记录",
                        "enablePullDownRefresh": false,
                        "navigationBarBackgroundColor": "#fff",
                        "navigationBarTextStyle": "black"
                    }
                },
                {
                    "path": "views/rental",
                    "style": {
                        "navigationBarTitleText": "出租房管理",
                        "enablePullDownRefresh": false,
@@ -197,7 +206,16 @@
                    }
                },
                {
                    "path":"views/addRepair",
                    "path": "views/addRepair",
                    "style": {
                        "navigationBarTitleText": "公共维修",
                        "enablePullDownRefresh": false,
                        "navigationBarBackgroundColor": "#fff",
                        "navigationBarTextStyle": "black"
                    }
                },
                {
                    "path": "views/repairList",
                    "style": {
                        "navigationBarTitleText": "公共维修",
                        "enablePullDownRefresh": false,
@@ -263,8 +281,16 @@
                        "navigationBarTextStyle": "white",
                        "enablePullDownRefresh": false
                    }
                },
                {
                    "path": "houseNumber/index",
                    "style": {
                        "navigationBarTitleText": "门牌码信息",
                        "enablePullDownRefresh": false,
                        "navigationBarBackgroundColor": "#fff",
                        "navigationBarTextStyle": "black"
                    }
                }
            ]
        }
@@ -296,4 +322,4 @@
            }
        ]
    }
}
}
subPackage/bs/components/form/rentForm.vue
@@ -44,11 +44,12 @@
                    }, {
                        // 自定义验证函数,见上说明
                        validator: (rule, value, callback) => {
                            const reg = /^\d{6}((((((19|20)\d{2})(0[13-9]|1[012])(0[1-9]|[12]\d|30))|(((19|20)\d{2})(0[13578]|1[02])31)|((19|20)\d{2})02(0[1-9]|1\d|2[0-8])|((((19|20)([13579][26]|[2468][048]|0[48]))|(2000))0229))\d{3})|((((\d{2})(0[13-9]|1[012])(0[1-9]|[12]\d|30))|((\d{2})(0[13578]|1[02])31)|((\d{2})02(0[1-9]|1\d|2[0-8]))|(([13579][26]|[2468][048]|0[048])0229))\d{2}))(\d|X|x)$/
                            if (reg.test(value)) {
                                return true
                            }
                            return false
                            const reg =
                                /^\d{6}((((((19|20)\d{2})(0[13-9]|1[012])(0[1-9]|[12]\d|30))|(((19|20)\d{2})(0[13578]|1[02])31)|((19|20)\d{2})02(0[1-9]|1\d|2[0-8])|((((19|20)([13579][26]|[2468][048]|0[48]))|(2000))0229))\d{3})|((((\d{2})(0[13-9]|1[012])(0[1-9]|[12]\d|30))|((\d{2})(0[13578]|1[02])31)|((\d{2})02(0[1-9]|1\d|2[0-8]))|(([13579][26]|[2468][048]|0[048])0229))\d{2}))(\d|X|x)$/
                            if (reg.test(value)) {
                                return true
                            }
                            return false
                        },
                        message: '请输入正确的身份证号',
                        // 触发器可以同时用blur和change
subPackage/bs/components/list/rentList.vue
@@ -18,10 +18,8 @@
            <view class="list-btn">
                <u-button icon="edit-pen" class="btn-item" type="primary" plain text="修改"
                :disabled="item.status == 1 || item.status == 2"
                    @click="pushPage(item)"></u-button>
                <u-button icon="calendar" class="btn-item" type="primary" plain text="续租"
                :disabled="item.status == 2"
                    :disabled="item.status == 1 || item.status == 2" @click="pushPage(item)"></u-button>
                <u-button icon="calendar" class="btn-item" type="primary" plain text="续租" :disabled="item.status == 2"
                    @click="xzHandleClick(item)"></u-button>
                <u-button icon="order" class="btn-item" type="primary" plain text="终止"
                    :disabled="item.status == 1 || item.status == 2" @click="terminate(item)"></u-button>
@@ -33,12 +31,13 @@
            <u-divider text="已经到底了"></u-divider>
        </view>
        <u-datetime-picker :show="isPickerShow" @cancel="isPickerShow = false" mode="date"
        <u-datetime-picker v-model="currentTime" :closeOnClickOverlay="true" @close="isPickerShow = false" :show="isPickerShow" @cancel="isPickerShow = false" mode="date"
            @confirm="dueTimeConfirm"></u-datetime-picker>
        <u-datetime-picker :show="istPickerShow" @cancel="istPickerShow = false" mode="date"
        <u-datetime-picker v-model="currentTime" :closeOnClickOverlay="true" @close="istPickerShow = false" :show="istPickerShow" @cancel="istPickerShow = false" mode="date"
            @confirm="terminateTimeConfirm"></u-datetime-picker>
        <u-modal :show="isModelShow" width="auto" :showCancelButton="true" title="提示" content="请确认是否删除当前租户信息"
            @cancel="isModelShow = false" @confirm="deleteRentalConfirm"></u-modal>
        <u-toast ref="uToast"></u-toast>
    </view>
</template>
@@ -72,7 +71,9 @@
                        name: '已终止',
                        value: 2
                    },
                ]
                ],
                currentTime: Number(new Date()),
                currentRentInfo: {}
            }
        },
        methods: {
@@ -90,14 +91,14 @@
                const {
                    code,
                    data
                } = await deleteRentalInfo(this.currentRentalId)
                if (code !== 200) {
                    uni.showToast({
                        title: "删除失败",
                        icon: "error",
                        duration: 1500
                    })
                    return
                } = await deleteRentalInfo(this.currentRentalId)
                if (code !== 200) {
                    uni.showToast({
                        title: "删除失败",
                        icon: "error",
                        duration: 1500
                    })
                    return
                }
                this.isModelShow = false
                this.$emit('refreshData')
@@ -114,9 +115,24 @@
            },
            xzHandleClick(item) {
                this.currentRentalId = item.housingRentalId
                this.currentRentInfo = item
                this.isPickerShow = true
            },
            async dueTimeConfirm(e) {
                // 判断当前选中的时间是否小于租房时间
                const {
                    rentalTime
                } = this.currentRentInfo
                const rentDate = new Date(rentalTime).getTime()
                if (rentDate > e.value) {
                    this.$refs.uToast.show({
                        type: 'warning',
                        message: "续租时间不可小于租房时间",
                        position: 'top',
                        iconUrl: 'https://cdn.uviewui.com/uview/demo/toast/success.png'
                    })
                    return
                }
                const time = uni.$u.timeFormat(e.value, 'yyyy-mm-dd')
                const res = await updateDueTime({
                    id: this.currentRentalId,
@@ -127,7 +143,7 @@
                        title: "续租失败",
                        icon: "error",
                        duration: 1500
                    })
                    })
                    return
                }
                this.isPickerShow = false
@@ -137,19 +153,32 @@
                this.currentRentalId = item.housingRentalId
                this.istPickerShow = true
            },
            async terminateTimeConfirm(e) {
            async terminateTimeConfirm(e) {
                const {
                    rentalTime
                } = this.currentRentInfo
                const rentDate = new Date(rentalTime).getTime()
                if (rentDate > e.value) {
                    this.$refs.uToast.show({
                        type: 'warning',
                        message: "终止时间不可小于租房时间",
                        position: 'top',
                        iconUrl: 'https://cdn.uviewui.com/uview/demo/toast/success.png'
                    })
                    return
                }
                const time = uni.$u.timeFormat(e.value, 'yyyy-mm-dd')
                const res = await updateDueTime({
                    id: this.currentRentalId,
                    terminationTime: time
                })
                if (res.code !== 200) {
                    uni.showToast({
                        title: "终止失败",
                        icon: "error",
                        duration: 1500
                    })
                    return
                })
                if (res.code !== 200) {
                    uni.showToast({
                        title: "终止失败",
                        icon: "error",
                        duration: 1500
                    })
                    return
                }
                this.istPickerShow = false
                this.$emit('refreshData')
subPackage/bs/views/addRepair.vue
@@ -9,13 +9,13 @@
            <text class="address f-28">万达华府26栋1903室 万达华府26栋1903室</text>
        </view>
        <view class="content bgc-ff">
            <u-form labelPosition="left" :model="info" :rules="rules" ref="uForm" labelWidth="90"
            <u-form labelPosition="left" :model="info" :rules="rules" ref="form" labelWidth="90"
                :labelStyle="{fontSize:'28rpx'}">
                <u-form-item label="姓名" prop="info.name" borderBottom ref="item1">
                    <u-input v-model="info.title" border="none" placeholder="请输入" placeholderClass="f-28 c-99"
                <u-form-item label="姓名" prop="realName" borderBottom ref="realName">
                    <u-input v-model="info.realName" border="none" placeholder="请输入" placeholderClass="f-28 c-99"
                        inputAlign="right"></u-input>
                </u-form-item>
                <u-form-item label="手机" prop="info.phone" :borderBottom="false" ref="item1">
                <u-form-item label="手机" prop="phone" :borderBottom="false" ref="phone">
                    <u-input v-model="info.phone" border="none" placeholder="请输入" placeholderClass="f-28 c-99"
                        inputAlign="right"></u-input>
                </u-form-item>
@@ -24,9 +24,10 @@
        <view class="upload bgc-ff">
            <view class="f-28 mb-20">描述</view>
            <u-textarea v-model="desc" placeholder="请输入内容" border="none" placeholderClass="c-99 f-26"></u-textarea>
            <u-textarea v-model="info.remark" placeholder="请输入内容" border="none"
                placeholderClass="c-99 f-26"></u-textarea>
            <view class="mt-20">
                <u-upload :fileList="images" :previewFullImage="uploadConfig.previewFullImage"
                <u-upload :fileList="form.images" :previewFullImage="uploadConfig.previewFullImage"
                    :accept="uploadConfig.acceptImg" :multiple="uploadConfig.multiple" :maxCount="uploadConfig.maxCount"
                    :capture="uploadConfig.capture" @afterRead="afterReadImg" @delete="deletePic">
                    <view class="upload-item upload-icon flex_base">
@@ -38,28 +39,34 @@
        <button class="submit-btn" @click="sumitInfo">提交</button>
        <button class="list-btn" @click="navigatorPage">我上报的事件</button>
    </view>
</template>
<script>
    import uploadMixin from "@/mixin/uploadMixin";
    import {
        save
    } from "@/api/task/taskReportForRepairs";
    export default {
        mixins: [uploadMixin],
        data() {
            return {
                info: {
                    title: "",
                    content: ""
                    realName: "",
                    phone: "",
                    remark: "",
                    type: -1,
                },
                rules: {
                    'title': {
                    'realName': {
                        type: 'string',
                        required: true,
                        message: '请输入姓名',
                        trigger: ['blur', 'change']
                    },
                    'content': {
                    'phone': {
                        type: 'string',
                        required: true,
                        message: '请输入手机号',
@@ -67,12 +74,43 @@
                    },
                },
                desc: "",
                images: []
                title: "",
            }
        },
        onLoad(option) {
            this.title = option.title
            uni.setNavigationBarTitle({
                title: this.title
            })
            this.info.type = option.type
        },
        methods: {
            sumitInfo() {
                const that = this
                this.$refs.form.validate().then(valid => {
                    if (this.form.images.length > 0) {
                        let urls = []
                        this.form.images.forEach(e => {
                            urls.push(e.name)
                        })
                        this.info.imageUrls = urls.join(",")
                    }
                    save(that.info).then(res => {
                        uni.showToast({
                            icon: 'success',
                            title: '提交成功',
                            success() {
                                setTimeout(() => {
                                    that.$u.func.globalNavigator("", "navBack")
                                }, 1000)
                            }
                        })
                    })
                })
            },
            navigatorPage() {
                let url = "/subPackage/bs/views/repairList" + "?title=" + this.title + "&type=" + this.info.type
                this.$u.func.globalNavigator(url, "navTo")
            }
        }
    }
@@ -113,7 +151,7 @@
        margin: 0 30rpx;
        padding: 30rpx;
    }
    .submit-btn {
@@ -126,4 +164,15 @@
        color: #fff;
        margin-top: 50rpx;
    }
    .list-btn {
        width: 690rpx;
        height: 78rpx;
        line-height: 78rpx;
        background: linear-gradient(163deg, #c7d7dc 0%, #c3cdd8 100%);
        border-radius: 8rpx 8rpx 8rpx 8rpx;
        font-size: 32rpx;
        color: #fff;
        margin-top: 50rpx;
    }
</style>
subPackage/bs/views/rentDetail.vue
@@ -61,9 +61,9 @@
            :popupTitle="selectBusTitle" :dataLists="selectBusList" @cancel="typeShow = false" @submit="typeSelect">
        </select-bus>
        <!--出租时间选择-->
        <u-datetime-picker :closeOnClickOverlay="true" @close="rentTimeShow = false" :show="rentTimeShow" mode="date" @confirm="rentTimeConfirm"
        <u-datetime-picker v-model="currentTime" :closeOnClickOverlay="true" @close="rentTimeShow = false" :show="rentTimeShow" mode="date" @confirm="rentTimeConfirm"
            @cancel="rentTimeShow = false"></u-datetime-picker>
        <u-datetime-picker :closeOnClickOverlay="true" @close="dueTimeShow = false" :show="dueTimeShow" mode="date" @confirm="dueTimeConfirm"
        <u-datetime-picker v-model="currentTime" :closeOnClickOverlay="true" @close="dueTimeShow = false" :show="dueTimeShow" mode="date" @confirm="dueTimeConfirm"
            @cancel="dueTimeShow = false"></u-datetime-picker>
        <view class="bottom-tools">
@@ -184,7 +184,8 @@
                selectBusKey: '',
                typeShow: false,
                houseCode: '',
                rentId: ''
                rentId: '',
                currentTime: Number(new Date())
            }
        },
        onLoad(option) {
subPackage/bs/views/repair.vue
@@ -1,194 +1,244 @@
<template>
    <view class="">
        <u-navbar height="48" :autoBack="true"  safeAreaInsetTop placeholder  bgColor="transparent"  leftIconColor="#fff">
        <u-navbar height="48" :autoBack="true" safeAreaInsetTop placeholder bgColor="transparent" leftIconColor="#fff">
        </u-navbar>
        <view class="top">
            <image class="top-img" src="/static/img/repair-bg.png" mode="aspectFill"></image>
        </view>
        <view class="container">
            <view class="c-ff f-36">请选择您需要的服务</view>
            <view class="serve-box bgc-ff mb-20 flex j-c-s-b a-i-c">
                <view class="flex a-i-c">
                    <u-icon name="/static/icon/nav-09.png"  width="91rpx"  height="70rpx"></u-icon>
                    <u-icon name="/static/icon/nav-09.png" width="91rpx" height="70rpx"></u-icon>
                    <view class="flex f-d-c ml-40">
                        <text class="f-36">总申请</text>
                        <view class="flex a-i-c">
                            <text class="f-48 c-blue fw mr-6">50</text>
                            <text class="f-48 c-blue fw mr-6">{{statistic.total}}</text>
                            <text class="f-24 c-99">件</text>
                        </view>
                    </view>
                </view>
                <view class="flex a-i-c">
                    <u-icon name="/static/icon/nav-10.png"  width="91rpx"  height="70rpx"></u-icon>
                    <u-icon name="/static/icon/nav-10.png" width="91rpx" height="70rpx"></u-icon>
                    <view class="flex f-d-c ml-40">
                        <text class="f-36">已处理</text>
                        <view class="flex a-i-c">
                            <text class="f-48 c-green fw mr-6">50</text>
                            <text class="f-48 c-green fw mr-6">{{statistic.handle}}</text>
                            <text class="f-24 c-99">件</text>
                        </view>
                    </view>
                </view>
            </view>
            <view class="site-box bgc-ff flex">
                <view class="flex a-i-c">
                    <u-icon name="map-fill" color="#AAAAAA"></u-icon>
                    <text class="f-28 c-aa ml-20">当前小区:</text>
                </view>
                <text class="address f-28">万达华府26栋1903室 万达华府26栋1903室</text>
            </view>
            <view class="nav flex flex-wrap j-c-s-b">
                <view class="nav-item"  v-for="(i,k) in navList"  :key="k"   @click="navTo(i.path)">
                <view class="nav-item" v-for="(i,k) in navList" :key="k" @click="navTo(i)">
                    <image class="nav-item-bg" :src="i.bgImg" mode="aspectFill"></image>
                    <view class="nav-item-inner flex f-d-c">
                        <text class="f-32 mb-30">{{i.title}}</text>
                        <button class="item-btn"   :style="{backgroundColor:i.background}"  >立即上报</button>
                        <button class="item-btn" :style="{backgroundColor:i.background}">立即上报</button>
                    </view>
                </view>
            </view>
        </view>
    </view>
</template>
<script>
    import {
        getStatistics
    } from '@/api/task/taskReportForRepairs'
    export default {
        data(){
        data() {
            return {
                navList:[
                    {
                        title:"公共维修",
                        bgImg:"/static/icon/nav-bg-06.png",
                        path:"addRepair",
                        background:"#63C875"
                statistic: {
                    total: 0,
                    handle: 0,
                },
                navList: [{
                        title: "公共维修",
                        type: 1,
                        bgImg: "/static/icon/nav-bg-06.png",
                        path: "addRepair",
                        background: "#63C875"
                    },
                    {
                        title:"居家维修",
                        bgImg:"/static/icon/nav-bg-07.png",
                        path:"",
                        background:"#4D98E2"
                        title: "居家维修",
                        type: 2,
                        bgImg: "/static/icon/nav-bg-07.png",
                        path: "addRepair",
                        background: "#4D98E2"
                    },
                    {
                        title:"矛盾纠纷",
                        bgImg:"/static/icon/nav-bg-08.png",
                        path:"",
                        background:"#EC7E51"
                        title: "矛盾纠纷",
                        type: 3,
                        bgImg: "/static/icon/nav-bg-08.png",
                        path: "addRepair",
                        background: "#EC7E51"
                    },
                    {
                        title:"投诉举报",
                        bgImg:"/static/icon/nav-bg-09.png",
                        path:"",
                        background:"#F4B862"
                        title: "投诉举报",
                        type: 4,
                        bgImg: "/static/icon/nav-bg-09.png",
                        path: "addRepair",
                        background: "#F4B862"
                    },
                    {
                        title: "企业商户上报",
                        type: 5,
                        bgImg: "/static/icon/nav-bg-09.png",
                        path: "addRepair",
                        background: "#F4B862"
                    },
                ]
            }
        },
        methods:{
            navTo(path){
                if(path){
                    this.$u.func.globalNavigator(path, "navTo")
        computed: {
        },
        onShow() {
            this.getStatistics()
        },
        methods: {
            navTo(item) {
                if (item.path) {
                    let url = item.path + "?title=" + item.title + "&type=" + item.type
                    this.$u.func.globalNavigator(url, "navTo")
                }
            },
            getStatistics() {
                getStatistics().then(res => {
                    this.statistic = res.data
                })
            }
        }
    }
</script>
<style lang="scss">
    page{
        width:100%;
        height:100%;
    page {
        width: 100%;
        height: 100%;
    }
    .top{
        width:100%;
        height:659rpx;
        background: linear-gradient(180deg, #017BFC 0%, rgba(1,123,252,0) 100%);
    .top {
        width: 100%;
        height: 659rpx;
        background: linear-gradient(180deg, #017BFC 0%, rgba(1, 123, 252, 0) 100%);
        position: fixed;
        top:0;
        left:0;
        .top-img{
            width:100%;
            height:659rpx;
        top: 0;
        left: 0;
        .top-img {
            width: 100%;
            height: 659rpx;
        }
    }
    .container{
        width:100%;
    .container {
        width: 100%;
        padding: 0 30rpx;
        position: fixed;
        box-sizing: border-box;
        top:130rpx;
        left:0;
        top: 130rpx;
        left: 0;
        z-index: 100;
        .serve-box{
            width:100%;
            height:213rpx;
        .serve-box {
            width: 100%;
            height: 213rpx;
            border-radius: 8rpx;
            margin-top:30rpx;
            margin-top: 30rpx;
            padding: 0 60rpx 0 40rpx;
            box-sizing: border-box;
        }
        .f-48{
            font-size:48rpx;
        .f-48 {
            font-size: 48rpx;
        }
        .c-blue{
            color:#677CF8;
        .c-blue {
            color: #677CF8;
        }
        .c-green{
            color:#30D17C;
        .c-green {
            color: #30D17C;
        }
        .ml-40{
            margin-left:40rpx;
        .ml-40 {
            margin-left: 40rpx;
        }
        .site-box{
            width:100%;
            padding:30rpx;
        .site-box {
            width: 100%;
            padding: 30rpx;
            box-sizing: border-box;
            border-radius: 4rpx;
            .c-aa{
                color:#aaa;
            .c-aa {
                color: #aaa;
            }
            .address{
                width:60%;
                margin-left:25rpx;
            .address {
                width: 60%;
                margin-left: 25rpx;
            }
        }
        .nav{
            width:100%;
            .nav-item,.nav-item-bg,.nav-item-inner{
                width:330rpx;
                height:167rpx;
        .nav {
            width: 100%;
            .nav-item,
            .nav-item-bg,
            .nav-item-inner {
                width: 330rpx;
                height: 167rpx;
            }
            .nav-item{
            .nav-item {
                position: relative;
                margin-top:30rpx;
                margin-top: 30rpx;
            }
            .nav-item-inner{
                padding:30rpx 30rpx 0;
            .nav-item-inner {
                padding: 30rpx 30rpx 0;
                position: absolute;
                top:0;
                left:0;
                top: 0;
                left: 0;
            }
            .item-btn{
                width:125rpx;
                height:42rpx;
            .item-btn {
                width: 125rpx;
                height: 42rpx;
                line-height: 42rpx;
                border-radius: 20rpx;
                color:#fff;
                font-size:22rpx;
                padding:0;
                margin:0;
                color: #fff;
                font-size: 22rpx;
                padding: 0;
                margin: 0;
            }
        }
    }
</style>
subPackage/bs/views/repairList.vue
New file
@@ -0,0 +1,137 @@
<template>
    <view class="container">
        <view v-if="dataList.length>0" class="list">
            <view class="item" v-for="(item,index) in dataList" :key="item.id">
                <view class="line">
                    <view class="label">上报时间</view>
                    <view class="value">{{item.createTime}}</view>
                </view>
                <view class="line">
                    <view class="label">上报状态</view>
                    <view class="value">{{formatStatus(item.status)}}</view>
                </view>
                <view class="line">
                    <view class="label">问题描述</view>
                    <view class="value">{{item.remark}}</view>
                </view>
            </view>
        </view>
        <view v-else>
            <u-empty marginTop="50%" mode="list"></u-empty>
        </view>
        <u-loading-page :loading="loadingPage"></u-loading-page>
        <u-loading-icon :show="loadingIcon"></u-loading-icon>
    </view>
</template>
<script>
    import {
        getPage
    } from '@/api/task/taskReportForRepairs'
    export default {
        data() {
            return {
                dataList: [],
                page: {
                    current: 1,
                    size: 10
                },
                loadingPage: false,
                loadingIcon: false,
                query: {
                    createUser: uni.getStorageSync("userInfo").user_id,
                    type: "",
                },
            }
        },
        computed: {
            formatStatus() {
                return (val => {
                    if (val == 1) {
                        return "待处理"
                    } else if (val == 10) {
                        return "已处理"
                    }
                })
            }
        },
        created() {
        },
        mounted() {
        },
        onLoad(option) {
            uni.setNavigationBarTitle({
                title: option.title
            })
            this.query.type = option.type
            this.getList()
        },
        onShow() {
        },
        onReachBottom() {
            this.page.current += 1
            this.getList()
        },
        methods: {
            getList() {
                this.page.current == 1 ? this.loadingPage = true : this.loadingIcon = true
                console.log(this.userInfo)
                let param = {}
                getPage(Object.assign(param, this.query, this.page)).then(res => {
                    let data = res.data.records
                    this.dataList = this.dataList.concat(data)
                    this.page.current == 1 ? this.loadingPage = false : this.loadingIcon = false
                })
            }
        }
    }
</script>
<style scoped lang="scss">
    page {
        width: 100%;
        height: 100%;
    }
    .container {
        position: relative;
        width: 100%;
        height: 100%;
        display: flex;
        flex-direction: column;
        background: #F9F9FA;
        .list {
            .item {
                background-color: #ffffff;
                padding: 40rpx 20rpx;
                margin-top: 20rpx;
                .line {
                    display: flex;
                    font-size: 28rpx;
                    padding: 6rpx;
                    .label {
                        color: #a4a4a4;
                        width: 25%;
                    }
                    .value {}
                }
            }
        }
    }
</style>
subPackage/bs/views/zhsb.vue
@@ -9,11 +9,6 @@
                        {{ location }}{{ room }}{{ `(共${num}人)` }}
                    </view>
                </view>
                <!-- <view class="item statistics">
                    <view class="room">{{ room }}</view>
                    <view class="num">{{ `(共${num}人)` }}</view>
                </view> -->
            </view>
subPackage/house/family/index.vue
@@ -132,7 +132,7 @@
            pushShopPage(e){
                console.log(e,8888)
                const { addressCode } = e
                let url = `/subPackage/workbench/views/cscj?stdId=${addressCode}`
                let url = `/subPackage/house/houseNumber/index?stdId=${addressCode}`
                this.$u.func.globalNavigator(url, "navTo")
            }
        }
subPackage/house/houseNumber/index.vue
New file
@@ -0,0 +1,179 @@
<template>
    <view class="container">
        <view class="info-box">
            <view class="policeman-box">
                <view class="line-box">
                    <view class="title">公安局</view>
                    <view class="value">{{ policeData.branchName }}</view>
                </view>
                <view class="line-box">
                    <view class="title">派出所</view>
                    <view class="value">{{ policeData.localPoliceStationName }}</view>
                </view>
                <view class="line-box">
                    <view class="title">辖区民警</view>
                    <view class="value">{{ policeData.policeman }}</view>
                </view>
                <view class="line-box">
                    <view class="title">联系电话</view>
                    <view class="value">{{ policeData.policemanPhone }}</view>
                </view>
            </view>
            <view class="fireman-box">
                <view class="line-box">
                    <view class="title">消防照片</view>
                    <view class="value">未完善</view>
                </view>
                <view class="line-box">
                    <view class="title">采集人</view>
                    <view class="value">未完善</view>
                </view>
                <view class="line-box">
                    <view class="title">消防责任人</view>
                    <view class="value">未完善</view>
                </view>
                <view class="line-box">
                    <view class="title">采集时间</view>
                    <view class="value">未完善</view>
                </view>
                <view class="line-box">
                    <view class="title">历史事件</view>
                    <view class="value">未完善</view>
                </view>
            </view>
        </view>
        <view class="btn-box">
            <view class="sl-box" @click="csjlClick">
                <u-icon name="/static/icon/menu-01.png" size="30"></u-icon>
                <text>场所记录</text>
            </view>
            <view class="sl-box" @click="cscjClick">
                <u-icon name="/static/icon/menu-02.png" size="30"></u-icon>
                <text>场所采集</text>
            </view>
        </view>
    </view>
</template>
<script>
    import {
        getDoorplateAddressDetail
    } from "@/api/doorplateAddress/doorplateAddress";
    export default {
        data() {
            return {
                stdId: '',
                policeData: {
                    branchName: '未完善',
                    localPoliceStationName: '未完善',
                    policeman: '未完善',
                    policemanPhone: '未完善'
                },
                firemanData: {
                }
            }
        },
        onLoad(option) {
            this.stdId = option.stdId
            this.getBuildingDetail()
        },
        methods: {
            async getBuildingDetail() {
                const {
                    code,
                    data
                } = await getDoorplateAddressDetail({
                    stdId: this.stdId
                })
                if (code !== 200) {
                    uni.showToast({
                        title: "数据请求失败",
                        icon: "error",
                        duration: 1500
                    })
                    return
                }
                const {
                    branchName,
                    localPoliceStationName,
                    policeman,
                    policemanPhone
                } = data
                console.log(data);
                this.policeData = {
                    branchName: branchName || '未完善',
                    localPoliceStationName: localPoliceStationName || '未完善',
                    policeman: policeman || '未完善',
                    policemanPhone: policemanPhone || '未完善'
                }
            },
            cscjClick() {
                this.$u.func.globalNavigator('/subPackage/workbench/views/cscj?stdId='+this.stdId)
            },
            csjlClick() {
                this.$u.func.globalNavigator('/subPackage/workbench/views/csjl?stdId='+this.stdId)
            }
        },
    }
</script>
<style lang="scss" scoped>
    .container {
        background-color: #f6f6f6;
        height: 100%;
        .info-box {
            height: calc(100% - 110rpx);
            padding-bottom: 20rpx;
            overflow: auto;
            .policeman-box,
            .fireman-box {
                background-color: #fff;
                margin-top: 20rpx;
                padding: 0 20rpx;
                .line-box {
                    display: flex;
                    justify-content: space-between;
                    border-bottom: 1rpx solid #f6f6f6;
                    padding: 25rpx 0;
                    font-size: 32rpx;
                    .title {
                        flex-shrink: 0;
                    }
                    .value {
                        color: #989898;
                        width: 50%;
                        word-wrap: break-word;
                        margin-left: 20rpx;
                        text-align: right;
                    }
                    &:last-child {
                        border: 0;
                    }
                }
            }
        }
        .btn-box {
            width: 100%;
            height: 90rpx;
            background-color: #fff;
            display: flex;
            box-shadow: 0 2rpx 12rpx 0 rgba(0, 0, 0, .1);
            .sl-box {
                flex: 1;
                display: flex;
                justify-content: center;
                text {
                    margin-left: 15rpx;
                    font-size: 27rpx;
                    line-height: 90rpx;
                }
            }
        }
    }
</style>
subPackage/house/roomControl/index.vue
@@ -2,26 +2,26 @@
    <view class="container">
        <view class="main">
            <view class="content">
                <u-form labelWidth="70" :model="form" ref="form">
                <u-form labelWidth="70" :model="form" ref="form" :rules="rules">
                    <box-title title=""></box-title>
                    <view class="basic-info mt-20">
                        <u-form-item class="form-item" labelWidth="100" label="绑定手机" required>
                        <u-form-item class="form-item" labelWidth="100" label="绑定手机" required prop="phone">
                            <u--input border="none" v-model="form.phone" placeholder="请输入">
                            </u--input>
                        </u-form-item>
                        <u-form-item class="form-item" labelWidth="100" label="地址" >
                        <u-form-item class="form-item" labelWidth="100" label="地址">
                            <u--input border="none" v-model="form.address" disabled>
                            </u--input>
                        </u-form-item>
                        <u-form-item class="form-item" labelWidth="100" label="物业月费" >
                        <u-form-item class="form-item" labelWidth="100" label="物业月费">
                            <u--input border="none" v-model="form.propertyPrice" disabled>
                            </u--input>
                        </u-form-item>
                        <u-form-item class="form-item" labelWidth="100" label="到期时间" >
                        <u-form-item class="form-item" labelWidth="100" label="到期时间">
                            <u--input border="none" v-model="form.serviceDue" disabled>
                            </u--input>
                        </u-form-item>
@@ -30,18 +30,17 @@
                    <box-title class="mt-20" title="房屋外观"></box-title>
                    <view class="pic mt-20">
                        <u-upload :fileList="form.images" :previewFullImage="uploadConfig.previewFullImage"
                            :accept="uploadConfig.acceptImg" :multiple="uploadConfig.multiple" :maxCount="uploadConfig.maxCount"
                            :capture="uploadConfig.capture" @afterRead="afterReadImg" @delete="deletePic">
                            :accept="uploadConfig.acceptImg" :multiple="uploadConfig.multiple"
                            :maxCount="uploadConfig.maxCount" :capture="uploadConfig.capture" @afterRead="afterReadImg"
                            @delete="deletePic">
                        </u-upload>
                    </view>
                    <box-title title="房屋标签"></box-title>
                    <view class="mt-20 flex label-btn-box b-c-w">
                        <view v-for="(item, index) in labelBtnList" :key="index">
                            <u-button color="#000" size="mini" type="primary"
                            :style="{background: item.color}"
                            :plain="true" :text="item.name"
                                @click="showLabelPopup(item)"></u-button>
                            <u-button color="#000" size="mini" type="primary" :style="{background: item.color}"
                                :plain="true" :text="item.name" @click="showLabelPopup(item)"></u-button>
                        </view>
                    </view>
                </u-form>
@@ -90,12 +89,15 @@
        removeHouseLabel
    } from "@/api/house/houseLabel.js";
    import {
        getHouseDetail,saveOrUpdateHouse
        getHouseDetail,
        saveOrUpdateHouse
    } from "@/api/house/house.js";
    import {
        minioBaseUrl
    } from '@/common/setting'
import { number } from "echarts";
    import {
        number
    } from "echarts";
    export default {
        mixins: [uploadMixin],
        data() {
@@ -107,6 +109,30 @@
                    propertyPrice: "",
                    serviceDue: "",
                    imageUrls: "",
                },
                rules: {
                    phone: [{
                            required: true,
                            message: '请输入手机号',
                            // 可以单个或者同时写两个触发验证方式
                            trigger: ['change', 'blur'],
                        },
                        {
                            // 自定义验证函数,见上说明
                            validator: (rule, value, callback) => {
                                const reg =
                                    /^(?:(?:\+|00)86)?1(?:(?:3[\d])|(?:4[5-79])|(?:5[0-35-9])|(?:6[5-7])|(?:7[0-8])|(?:8[\d])|(?:9[1589]))\d{8}$/
                                if (reg.test(value)) {
                                    return true
                                }
                                return false
                            },
                            message: '请输入正确的手机号',
                            // 触发器可以同时用blur和change
                            trigger: ['change', 'blur'],
                        }
                    ]
                },
                showList: {
                    relation: false
@@ -152,7 +178,7 @@
                labelValue: '',
                remark: '',
                // 标记
                number:0
                number: 0
            }
        },
        created() {
@@ -176,16 +202,16 @@
            async getHouseDetailInfo() {
                var that = this;
                const param = {
                    houseCode : this.houseCode
                    houseCode: this.houseCode
                }
                const res = await getHouseDetail(param)
                // 房屋标签处理
                const paramLabel = {
                    parentId:1001
                    parentId: 1001
                }
                const resLabel = await getLabelListByParentId(paramLabel)
                this.labelBtnList = resLabel.data
                if(null != res.data){
                if (null != res.data) {
                    const images = []
                    const {
                        phone,
@@ -195,21 +221,21 @@
                        imageUrls,
                        houseLabelVOList
                    } = res.data
                    if(imageUrls.length>0){
                    if (imageUrls.length > 0) {
                        const urls = imageUrls.split(',')
                        // 遍历
                        urls.forEach(e=>{
                        urls.forEach(e => {
                            images.push({
                                url:minioBaseUrl + e,
                                url: minioBaseUrl + e,
                                name: e
                            })
                        })
                    }
                    if(houseLabelVOList.length>0){
                        that.labelBtnList.forEach(e=>{
                            houseLabelVOList.forEach(f=>{
                                if(Number(e.id) == f.labelId){
                    if (houseLabelVOList.length > 0) {
                        that.labelBtnList.forEach(e => {
                            houseLabelVOList.forEach(f => {
                                if (Number(e.id) == f.labelId) {
                                    e['color'] = f.color
                                    e['remark'] = f.remark
                                }
@@ -229,13 +255,13 @@
            // 获取房屋标签信息
            async getLabelList() {
                const param = {
                    parentId:1001
                    parentId: 1001
                }
                const res = await getLabelListByParentId(param)
                this.labelBtnList = res.data
            },
            // 更新房屋数据
            async updateHouseInfo(){
            async updateHouseInfo() {
                this.form['houseCode'] = this.houseCode
                if (this.form.images.length > 0) {
                    let urls = []
@@ -262,7 +288,7 @@
                    duration: 1500,
                    success: () => {
                        setTimeout(() => {
                            // uni.navigateBack()
                            uni.navigateBack()
                        }, 1500)
                    }
                })
@@ -277,8 +303,8 @@
                this.labelModelInfo.title = item.name
                this.currentLabelInfo = item
                // 遍历标签集合
                this.labelList.forEach(e=>{
                    if(e.color == item.color){
                this.labelList.forEach(e => {
                    if (e.color == item.color) {
                        this.labelValue = e.name
                        this.remark = item.remark
                        this.number = 1
@@ -304,13 +330,13 @@
                } = this.currentColorInfo
                let res = null
                if (name === '撤销') {
                    if(this.number==1){
                    if (this.number == 1) {
                        const data = {
                            labelId:id,
                            labelId: id,
                            houseCode: this.houseCode
                        }
                        res = await removeHouseLabel(data)
                    }else{
                    } else {
                        uni.showToast({
                            title: "无可撤销项",
                            icon: "error",
@@ -322,7 +348,7 @@
                    res = await updateHouseLabel({
                        houseCode: this.houseCode,
                        labelId: id,
                        remark:this.remark,
                        remark: this.remark,
                        color
                    })
                }
@@ -334,11 +360,14 @@
                    })
                    return
                }
                // 刷新页面
                this.getHouseDetailInfo()
                // 刷新页面 (直接刷新页面上传但没提交的图片会直接没了)
                // this.getHouseDetailInfo()
                const labelIndex = this.labelBtnList.findIndex(item => item.id === id)
                console.log(id);
                this.labelBtnList[labelIndex].color = color
                this.popupShow = false
            },
        }
    }
</script>
subPackage/workbench/views/csjl.vue
New file
@@ -0,0 +1,156 @@
<template>
    <view class="container">
        <view class="tabsAndSearch">
            <view class="tabs">
                <u-tabs :list="tabsList" @click="tabClick" :scrollable="false"></u-tabs>
            </view>
            <view class="search">
                <u--input placeholder="请输入场所名称" prefixIcon="search" class="search-ipt"
                    prefixIconStyle="font-size: 22px;color: #909399"></u--input>
            </view>
        </view>
        <view class="info-box">
            <view class="records-card" v-for="records in recordsData" :key="records.id">
                <view class="title">
                    <text>{{ records.title }}</text>
                    <text>{{ records.time }}</text>
                </view>
                <view class="info">
                    <view class="charge-man">
                        <text>场所负责人:</text>
                        <text>{{ records.chargeMan }}</text>
                    </view>
                    <view class="phone">
                        <text>手机号:</text>
                        <text>{{ records.phone }}</text>
                    </view>
                </view>
            </view>
        </view>
    </view>
</template>
<script>
    export default {
        data() {
            return {
                tabsList: [{
                        id: 1,
                        name: '全部'
                    },
                    {
                        id: 2,
                        name: '待完善'
                    },
                    {
                        id: 3,
                        name: '已完善'
                    }
                ],
                recordsData: [{
                        id: 1,
                        title: '科创4栋',
                        time: new Date().toLocaleString(),
                        chargeMan: '铃铃铃',
                        phone: '17678654431'
                    },
                    {
                        id: 2,
                        title: '科创4栋',
                        time: new Date().toLocaleString(),
                        chargeMan: '铃铃铃',
                        phone: '17678654431'
                    },
                    {
                        id: 3,
                        title: '科创4栋',
                        time: new Date().toLocaleString(),
                        chargeMan: '铃铃铃',
                        phone: '17678654431'
                    },
                    {
                        id: 4,
                        title: '科创4栋',
                        time: new Date().toLocaleString(),
                        chargeMan: '铃铃铃',
                        phone: '17678654431'
                    }
                ]
            }
        },
        methods: {
            tabClick() {
            }
        }
    }
</script>
<style lang="scss" scoped>
    .container {
        height: 100%;
        overflow-y: auto;
        background-color: #f6f6f6;
        .tabsAndSearch {
            background-color: #fff;
            .tabs {
            }
            .search {
                padding: 20rpx 70rpx;
                .search-ipt {
                    border: 0;
                    border-radius: 9999rpx;
                    background-color: #f6f6f6;
                }
            }
        }
        .info-box {
            .records-card {
                margin: 20rpx 30rpx 0 30rpx;
                background-color: #fff;
                padding: 30rpx;
                border-radius: 10rpx;
                .title {
                    line-height: 70rpx;
                    display: flex;
                    font-size: 35rpx;
                    display: flex;
                    justify-content: space-between;
                    border-bottom: 1rpx solid #f6f6f6;
                    text {
                        &:nth-child(1) {
                            font-weight: 700;
                        }
                        &:nth-child(2) {
                            font-size: 27rpx;
                            color: #999999;
                        }
                    }
                }
                .charge-man,
                .phone {
                    display: flex;
                    justify-content: space-between;
                    font-weight: 30rpx;
                    color: #717171;
                    margin-top: 25rpx;
                    font-size: 30rpx;
                }
                &:last-child {
                    margin-bottom: 20rpx;
                }
            }
        }
    }
</style>