Lou
2023-11-06 38b8100402772bf1b55502ae8ebf7a903c18e47b
merge
9 files modified
4 files added
796 ■■■■■ changed files
api/task/taskReportForRepairs.js 32 ●●●●● patch | view | raw | blame | history
pages.json 28 ●●●●● patch | view | raw | blame | history
subPackage/bs/components/form/rentForm.vue 3 ●●●● patch | view | raw | blame | history
subPackage/bs/components/list/rentList.vue 43 ●●●● patch | view | raw | blame | history
subPackage/bs/views/addRepair.vue 73 ●●●● patch | view | raw | blame | history
subPackage/bs/views/rentDetail.vue 7 ●●●●● patch | view | raw | blame | history
subPackage/bs/views/repair.vue 76 ●●●● 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 55 ●●●● 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
@@ -121,6 +121,15 @@
                    }
                },
                {
                    "path": "views/csjl",
                    "style": {
                        "navigationBarTitleText": "场所记录",
                        "enablePullDownRefresh": false,
                        "navigationBarBackgroundColor": "#fff",
                        "navigationBarTextStyle": "black"
                    }
                },
                {
                    "path":"views/rental",
                    "style": {
                        "navigationBarTitleText": "出租房管理",
@@ -204,6 +213,15 @@
                        "navigationBarBackgroundColor": "#fff",
                        "navigationBarTextStyle": "black"
                    }
                },
                {
                    "path": "views/repairList",
                    "style": {
                        "navigationBarTitleText": "公共维修",
                        "enablePullDownRefresh": false,
                        "navigationBarBackgroundColor": "#fff",
                        "navigationBarTextStyle": "black"
                    }
                }
            ]
        },
@@ -263,8 +281,16 @@
                        "navigationBarTextStyle": "white",
                        "enablePullDownRefresh": false
                    }
                },
                {
                    "path": "houseNumber/index",
                    "style": {
                        "navigationBarTitleText": "门牌码信息",
                        "enablePullDownRefresh": false,
                        "navigationBarBackgroundColor": "#fff",
                        "navigationBarTextStyle": "black"
                }
                }
            ]
        }
subPackage/bs/components/form/rentForm.vue
@@ -44,7 +44,8 @@
                    }, {
                        // 自定义验证函数,见上说明
                        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)$/
                            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
                            }
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: {
@@ -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,
@@ -138,6 +154,19 @@
                this.istPickerShow = true
            },
            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,
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")
            }
        }
    }
@@ -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
@@ -14,7 +14,7 @@
                    <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>
@@ -24,7 +24,7 @@
                    <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>
@@ -42,7 +42,7 @@
            
            <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>
@@ -59,45 +59,77 @@
</template>
<script>
    import {
        getStatistics
    } from '@/api/task/taskReportForRepairs'
    export default {
        data(){
            return {
                navList:[
                    {
                statistic: {
                    total: 0,
                    handle: 0,
                },
                navList: [{
                        title:"公共维修",
                        type: 1,
                        bgImg:"/static/icon/nav-bg-06.png",
                        path:"addRepair",
                        background:"#63C875"
                    },
                    {
                        title:"居家维修",
                        type: 2,
                        bgImg:"/static/icon/nav-bg-07.png",
                        path:"",
                        path: "addRepair",
                        background:"#4D98E2"
                    },
                    {
                        title:"矛盾纠纷",
                        type: 3,
                        bgImg:"/static/icon/nav-bg-08.png",
                        path:"",
                        path: "addRepair",
                        background:"#EC7E51"
                    },
                    {
                        title:"投诉举报",
                        type: 4,
                        bgImg:"/static/icon/nav-bg-09.png",
                        path:"",
                        path: "addRepair",
                        background: "#F4B862"
                    },
                    {
                        title: "企业商户上报",
                        type: 5,
                        bgImg: "/static/icon/nav-bg-09.png",
                        path: "addRepair",
                        background:"#F4B862"
                    },
                    
                ]
            }
        },
        computed: {
        },
        onShow() {
            this.getStatistics()
        },
        methods:{
            navTo(path){
                if(path){
                    this.$u.func.globalNavigator(path, "navTo")
            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>
@@ -107,6 +139,7 @@
        width:100%;
        height:100%;
    }
    .top{
        width:100%;
        height:659rpx;
@@ -114,11 +147,13 @@
        position: fixed;
        top:0;
        left:0;
        .top-img{
            width:100%;
            height:659rpx;
        }
    }
    .container{
        width:100%;
        padding: 0 30rpx;
@@ -127,6 +162,7 @@
        top:130rpx;
        left:0;
        z-index: 100;
        .serve-box{
            width:100%;
            height:213rpx;
@@ -135,42 +171,55 @@
            padding: 0 60rpx 0 40rpx;
            box-sizing: border-box;
        }
        .f-48{
            font-size:48rpx;
        }
        .c-blue{
            color:#677CF8;
            
        }
        .c-green{
            color:#30D17C;
        }
        .ml-40{
            margin-left:40rpx;
        }
        .site-box{
            width:100%;
            padding:30rpx;
            box-sizing: border-box;
            border-radius: 4rpx;
            .c-aa{
                color:#aaa;
            }
            .address{
                width:60%;
                margin-left:25rpx;
            }
        }
        .nav{
            width:100%;
            .nav-item,.nav-item-bg,.nav-item-inner{
            .nav-item,
            .nav-item-bg,
            .nav-item-inner {
                width:330rpx;
                height:167rpx;
            }
            .nav-item{
                position: relative;
                margin-top:30rpx;
            }
            .nav-item-inner{
                padding:30rpx 30rpx 0;
                position: absolute;
@@ -178,6 +227,7 @@
                left:0;
                
            }
            .item-btn{
                width:125rpx;
                height:42rpx;
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,11 +2,11 @@
    <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>
@@ -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
@@ -262,7 +288,7 @@
                    duration: 1500,
                    success: () => {
                        setTimeout(() => {
                            // uni.navigateBack()
                            uni.navigateBack()
                        }, 1500)
                    }
                })
@@ -334,8 +360,11 @@
                    })
                    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
            },
            
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>