Lou
2023-11-13 3062b6cdec246445a8102b61c8a28de6dc707de1
校园安全页面编写与数据交互
10 files modified
3 files added
1034 ■■■■■ changed files
api/reporting/reporting.js 37 ●●●●● patch | view | raw | blame | history
common/setting.js 4 ●●●● patch | view | raw | blame | history
manifest.json 4 ●●●● patch | view | raw | blame | history
pages.json 29 ●●●●● patch | view | raw | blame | history
subPackage/label/bail.vue 51 ●●●●● patch | view | raw | blame | history
subPackage/label/form.vue 52 ●●●● patch | view | raw | blame | history
subPackage/label/formList.vue 2 ●●● patch | view | raw | blame | history
subPackage/label/hotel.vue 54 ●●●●● patch | view | raw | blame | history
subPackage/label/index.vue 8 ●●●● patch | view | raw | blame | history
subPackage/label/school.vue 592 ●●●●● patch | view | raw | blame | history
subPackage/label/schoolList.vue 96 ●●●●● patch | view | raw | blame | history
subPackage/workbench/views/labelReportDetail.vue 97 ●●●● patch | view | raw | blame | history
subPackage/workbench/views/schoolReportDetail.vue 8 ●●●●● patch | view | raw | blame | history
api/reporting/reporting.js
@@ -141,3 +141,40 @@
    })
}
//添加校园安全报事
export const setSchoolReporting = (data) => {
    return http.request({
        url: '/blade-taskCampusReportingEvent/taskCampusReportingEvent/save',
        method: 'POST',
        data: data
    })
}
//获取校园安全报事列表
export const getSchoolReportingList = (params) => {
    return http.request({
        url: '/blade-taskCampusReportingEvent/taskCampusReportingEvent/page',
        method: 'get',
        params: {
            ...params
        }
    })
}
//获取校园安全报事详情
export const getSchoolReportingDetail = (params) => {
    return http.request({
        url: '/blade-taskCampusReportingEvent/taskCampusReportingEvent/detail',
        method: 'get',
        params: {
            ...params
        }
    })
}
//修改校园安全报事
export const saveSchoolReporting = (data) => {
    return http.request({
        url: '/blade-taskCampusReportingEvent/taskCampusReportingEvent/update',
        method: 'POST',
        data: data
    })
}
common/setting.js
@@ -12,8 +12,8 @@
    // devUrl: 'https://sk.hubeishuiyi.cn',
    // devUrl: 'http://192.168.1.156:9528',
    // devUrl:'http://192.168.1.50:9528',
    // devUrl: 'http://192.168.0.102:9528',
    devUrl: 'https://srgdjczzxtpt.com:2080/api',
    devUrl: 'http://192.168.0.102:9528',
    // devUrl: 'https://srgdjczzxtpt.com:2080/api',
    minioBaseUrl: "http://60.220.177.113:9000/jczz/",
    // 数据中台接口url
    // dataCenterUrl: 'http://10.10.2.192/services',
manifest.json
@@ -1,5 +1,5 @@
{
    "name" : "基层自治",
    "name" : "饶城格格通",
    "appid" : "__UNI__EE88272",
    "description" : "",
    "versionName" : "1.0.10",
@@ -142,7 +142,7 @@
    "quickapp" : {},
    /* 小程序特有相关 */
    "mp-weixin" : {
        "appid" : "wxdc5675f4df850da6",
        "appid" : "wx41aa8a5d2e565a05",
        "setting" : {
            "urlCheck" : false,
            "minified" : true,
pages.json
@@ -171,6 +171,24 @@
                        "navigationBarBackgroundColor": "#fff",
                        "navigationBarTextStyle": "black"
                    }
                },
                {
                    "path": "school",
                    "style": {
                        "navigationBarTitleText": "校园安全",
                        "enablePullDownRefresh": false,
                        "navigationBarBackgroundColor": "#fff",
                        "navigationBarTextStyle": "black"
                    }
                },
                {
                    "path": "schoolList",
                    "style": {
                        "navigationBarTitleText": "报事列表",
                        "enablePullDownRefresh": false,
                        "navigationBarBackgroundColor": "#fff",
                        "navigationBarTextStyle": "black"
                    }
                }
            ]
        },
@@ -281,6 +299,15 @@
                },
                {
                    "path": "views/labelReportDetail",
                    "style": {
                        "navigationBarTitleText": "审核",
                        "enablePullDownRefresh": false,
                        "navigationBarBackgroundColor": "#fff",
                        "navigationBarTextStyle": "black"
                    }
                },
                {
                    "path": "views/schoolReportDetail",
                    "style": {
                        "navigationBarTitleText": "审核",
                        "enablePullDownRefresh": false,
@@ -439,7 +466,7 @@
    ],
    "globalStyle": {
        "navigationBarTextStyle": "black",
        "navigationBarTitleText": "",
        "navigationBarTitleText": "饶城格格通",
        "navigationBarBackgroundColor": "#fff",
        "backgroundColor": "#4586FE"
    },
subPackage/label/bail.vue
@@ -22,8 +22,24 @@
                    <u-icon slot="right" name="arrow-right"></u-icon>
                </u-form-item>
                <u-form-item label="申请位置" prop="location" borderBottom ref="location" required>
                    <u-input v-model="info.location"  border="none" placeholder="请输入" placeholderClass="f-28 c-99"
                        inputAlign="right"></u-input>
                    <!-- <u-input v-model="info.location"  disabled disabledColor="#ffffff" border="none" placeholder="请选择地址" placeholderClass="f-28 c-99"
                        inputAlign="right">
                    <template slot="suffix">
                        <button class="location-btn c-main f-24"   @click="getLocation()">获取地址</button>
                    </template>
                    </u-input> -->
                    <view class="address-row flex">
                        <view class="address-content f-28" v-if="info.location">
                            {{info.location}}
                        </view>
                        <view class="address-content f-28 c-99" v-if="!info.location">
                            请选择位置
                        </view>
                        <view class="location-btn c-main f-24"  @click="getLocation()">
                            获取地址
                        </view>
                    </view>
                </u-form-item>
            </view>
@@ -106,6 +122,8 @@
            let userInfo = uni.getStorageSync("userInfo");
            this.$set(this.info, "houseCode", siteInfo.id);
            this.$set(this.info, "districtName", siteInfo.name);
            this.$set(this.info,"checkUserName",userInfo.real_name);
            this.$set(this.info,"checkTelephone",userInfo.phone);
            this.$set(this.info, "checkUserId", userInfo.user_id);
        },
@@ -115,6 +133,15 @@
        },
        methods: {
            getLocation(){
                uni.chooseLocation({
                    success:(res)=>{
                        this.$set(this.info,"location",res.address);
                    }
                })
            },
            formatter(type, value) {
                if (type === 'year') {
@@ -236,4 +263,24 @@
        color: #fff;
        margin-top: 50rpx;
    }
    .address-row{
        flex:1;
        justify-content: flex-end;
        align-items:center;
    }
    .address-content{
        width:calc(100% - 116rpx - 20rpx);
        margin-right:20rpx;
        text-align: right;
    }
    .location-btn{
        width:116rpx;
        height:46rpx;
        line-height: 46rpx;
        border-radius: 4rpx;
        border:1px solid currentColor;
        padding:0;
        background-color: #fff;
        text-align: center;
    }
</style>
subPackage/label/form.vue
@@ -16,9 +16,20 @@
                    <u-input v-model="info.goodsNums" type="number" border="none" placeholder="请输入"
                        placeholderClass="f-28 c-99" inputAlign="right"></u-input>
                </u-form-item>
                <u-form-item label="交易位置" prop="location" borderBottom ref="location" required>
                    <u-input v-model="info.location" border="none" placeholder="请输入" placeholderClass="f-28 c-99"
                        inputAlign="right"></u-input>
                <u-form-item label="交易位置" prop="localtion" borderBottom ref="localtion" required>
                    <!-- <u-input v-model="info.location" border="none" placeholder="请输入" placeholderClass="f-28 c-99"
                        inputAlign="right"></u-input> -->
                        <view class="address-row flex">
                            <view class="address-content f-28" v-if="info.localtion">
                                {{info.localtion}}
                            </view>
                            <view class="address-content f-28 c-99" v-if="!info.localtion">
                                请选择位置
                            </view>
                            <view class="location-btn c-main f-24"  @click="getLocation()">
                                获取地址
                            </view>
                        </view>
                </u-form-item>
                <u-form-item label="交易过程" prop="transactionProcess" borderBottom>
                    <u-input v-model="info.transactionProcess" border="none" placeholder="请输入"
@@ -56,7 +67,7 @@
        </u-form>
        <button class="submit-btn" @click="sumitInfo">提交</button>
        <button class="list-btn" @click="navigatorPage">我上报的事件</button>
        <button class="list-btn mb-20" @click="navigatorPage">我上报的事件</button>
    </view>
</template>
@@ -74,7 +85,7 @@
                    transactionObjectTel: "",
                    transactionMoney: "",
                    goodsNums: "",
                    location: "",
                    localtion: "",
                    transactionProcess: "",
                    houseCode: "",
                    districtName: "",
@@ -94,7 +105,7 @@
                        message: '请输入交易金额',
                        trigger: ['blur', 'change']
                    },
                    'location': {
                    'localtion': {
                        type: 'string',
                        required: true,
                        message: '请输入交易位置',
@@ -134,6 +145,15 @@
                    return "二手车交易"
                }
            },
            getLocation(){
                uni.chooseLocation({
                    success:(res)=>{
                        this.$set(this.info,"localtion",res.address);
                    }
                })
            },
            confirmDate(e) {
                console.log(e);
@@ -269,4 +289,24 @@
        color: #fff;
        margin-top: 50rpx;
    }
    .address-row{
        flex:1;
        justify-content: flex-end;
        align-items:center;
    }
    .address-content{
        width:calc(100% - 116rpx - 20rpx);
        margin-right:20rpx;
        text-align: right;
    }
    .location-btn{
        width:116rpx;
        height:46rpx;
        line-height: 46rpx;
        border-radius: 4rpx;
        border:1px solid currentColor;
        padding:0;
        background-color: #fff;
        text-align: center;
    }
</style>
subPackage/label/formList.vue
@@ -63,7 +63,7 @@
            },
            navTo(id) {
                uni.navigateTo({
                    url: `/subPackage/workbench/views/bailReportDetail?id=${id}`
                    url: `/subPackage/workbench/views/labelReportDetail?id=${id}`
                })
            }
        }
subPackage/label/hotel.vue
@@ -5,7 +5,7 @@
            :labelStyle="{fontSize:'28rpx'}">
            <view class="content">
                <u-form-item label="社区名称" prop="districtName" borderBottom required>
                    <view>
                    <view class="content-name f-28">
                        {{info.districtName}}
                    </view>
                    <!-- <u-input v-model="info.districtName" disabled disabledColor="#fff" border="none" placeholder="请输入"
@@ -28,9 +28,20 @@
                    <u-input v-model="info.checkTelephone" border="none" placeholder="请输入" placeholderClass="f-28 c-99"
                        inputAlign="right"></u-input>
                </u-form-item>
                <u-form-item label="自查位置" prop="phone" borderBottom ref="location" required>
                    <u-input v-model="info.location" border="none" placeholder="请输入" placeholderClass="f-28 c-99"
                        inputAlign="right"></u-input>
                <u-form-item label="自查位置" prop="location" borderBottom ref="location" required>
                    <!-- <u-input v-model="info.location" border="none" placeholder="请输入" placeholderClass="f-28 c-99"
                        inputAlign="right"></u-input> -->
                        <view class="address-row flex">
                            <view class="address-content f-28" v-if="info.location">
                                {{info.location}}
                            </view>
                            <view class="address-content f-28 c-99" v-if="!info.location">
                                请选择位置
                            </view>
                            <view class="location-btn c-main f-24"  @click="getLocation()">
                                获取地址
                            </view>
                        </view>
                </u-form-item>
                <u-form-item label="灭火器数量" prop="fireNums" borderBottom>
                    <u-input type="number" v-model="info.fireNums" border="none" placeholder="请输入"
@@ -318,6 +329,8 @@
            let userInfo = uni.getStorageSync("userInfo");
            this.$set(this.info, "houseCode", siteInfo.id);
            this.$set(this.info, "districtName", siteInfo.neiName);
            this.$set(this.info,"checkUserName",userInfo.real_name);
            this.$set(this.info,"checkTelephone",userInfo.phone);
            this.$set(this.info, "checkUserId", userInfo.user_id);
        },
@@ -327,6 +340,15 @@
        },
        methods: {
            getLocation(){
                uni.chooseLocation({
                    success:(res)=>{
                        this.$set(this.info,"location",res.address);
                    }
                })
            },
            formatter(type, value) {
                if (type === 'year') {
                    return `${value}年`
@@ -435,6 +457,10 @@
        padding: 0 30rpx;
        background-color: #fff;
    }
    .content-name{
        flex:1;
        text-align: right;
    }
    /deep/.u-radio-group--row {
        justify-content: flex-end;
@@ -497,4 +523,24 @@
    .mt-30{
        margin-top:30rpx;
    }
    .address-row{
        flex:1;
        justify-content: flex-end;
        align-items:center;
    }
    .address-content{
        width:calc(100% - 116rpx - 20rpx);
        margin-right:20rpx;
        text-align: right;
    }
    .location-btn{
        width:116rpx;
        height:46rpx;
        line-height: 46rpx;
        border-radius: 4rpx;
        border:1px solid currentColor;
        padding:0;
        background-color: #fff;
        text-align: center;
    }
</style>
subPackage/label/index.vue
@@ -90,7 +90,13 @@
                        bgImg:"/static/icon/nav-bg-14.png",
                        path:"form",
                        background:"#13C6C7"
                    }
                    },
                    // {
                    //     title:"校园安全",
                    //     bgImg:"/static/icon/nav-bg-11.png",
                    //     path:"school",
                    //     background:"#4D98E2"
                    // }
                ],
                siteInfo:{},
                count:{}
subPackage/label/school.vue
New file
@@ -0,0 +1,592 @@
<template>
    <view class="">
        <u-form labelPosition="left" :model="info" :rules="rules" ref="form" labelWidth="100"
            :labelStyle="{fontSize:'28rpx'}">
            <view class="content">
                <u-form-item label="社区名称" prop="districtName" borderBottom required>
                    <view class="content-name f-28">
                        {{info.districtName}}
                    </view>
                </u-form-item>
                <u-form-item label="校园名称" prop="campusName" borderBottom required>
                    <u-input v-model="info.campusName" border="none" placeholder="请输入" placeholderClass="f-28 c-99"
                        inputAlign="right"></u-input>
                </u-form-item>
                <u-form-item label="自查时间" prop="checkTime" borderBottom required @click="showSelectDate = true">
                    <u-input v-model="info.checkTime" disabled disabledColor="#ffffff" border="none" placeholder="请输入"
                        placeholderClass="f-28 c-99" inputAlign="right"></u-input>
                    <u-icon slot="right" name="arrow-right"></u-icon>
                </u-form-item>
                <u-form-item label="自查人姓名" prop="checkUserName" borderBottom required>
                    <u-input v-model="info.checkUserName" border="none" placeholder="请输入" placeholderClass="f-28 c-99"
                        inputAlign="right"></u-input>
                </u-form-item>
                <u-form-item label="自查人手机" prop="checkTelephone" borderBottom required>
                    <u-input v-model="info.checkTelephone" border="none" placeholder="请输入" placeholderClass="f-28 c-99"
                        inputAlign="right"></u-input>
                </u-form-item>
                <u-form-item label="自查位置" prop="location" borderBottom ref="location" required>
                    <view class="address-row flex">
                        <view class="address-content f-28" v-if="info.location">
                            {{info.location}}
                        </view>
                        <view class="address-content f-28 c-99" v-if="!info.location">
                            请选择位置
                        </view>
                        <view class="location-btn c-main f-24" @click="getLocation()">
                            获取地址
                        </view>
                    </view>
                </u-form-item>
            </view>
            <view class="content">
                <u-form-item label="四个一工程" prop="fourOne" labelWidth="300" :borderBottom="false" required
                    labelPosition="top">
                    <view class="mt-30">
                        <u-radio-group v-model="info.fourOne" placement="column">
                            <u-radio :customStyle="{marginBottom: '10px'}" v-for="(item, index) in fourOneList"
                                :key="index" :label="item.name" :name="item.name" labelSize="14" iconSize="20">
                            </u-radio>
                        </u-radio-group>
                    </view>
                </u-form-item>
            </view>
            <view class="upload bgc-ff">
                <view class="f-28 mb-20">四个一工程照片</view>
                <view class="mt-20">
                    <u-upload :fileList="foImageUrls" :previewFullImage="uploadConfig.previewFullImage"
                        :accept="uploadConfig.acceptImg" :multiple="uploadConfig.multiple"
                        :maxCount="uploadConfig.maxCount" :capture="uploadConfig.capture"
                        @afterRead="afterReadImgs($event,'foImageUrls')" @delete="deletePic">
                        <view class="upload-item upload-icon flex_base">
                            <u-icon name="/static/icon/upload.png" width="60rpx" height="60rpx"></u-icon>
                        </view>
                    </u-upload>
                </view>
            </view>
            <view class="content">
                <u-form-item label="消防设施种类" prop="fireFacsType" borderBottom required>
                    <u-input v-model="info.fireFacsType" border="none" placeholder="请输入" placeholderClass="f-28 c-99"
                        inputAlign="right"></u-input>
                </u-form-item>
                <u-form-item label="消防器材数量" prop="fireFacsNums" :borderBottom="false" required>
                    <u-input type="number" v-model="info.fireFacsNums" border="none" placeholder="请输入"
                        placeholderClass="f-28 c-99" inputAlign="right"></u-input>
                </u-form-item>
            </view>
            <view class="upload bgc-ff">
                <view class="f-28 mb-20">消防器材照片(需拍到灭火器有效期)</view>
                <view class="mt-20">
                    <u-upload :fileList="fireFacsImageUrls" :previewFullImage="uploadConfig.previewFullImage"
                        :accept="uploadConfig.acceptImg" :multiple="uploadConfig.multiple"
                        :maxCount="uploadConfig.maxCount" :capture="uploadConfig.capture"
                        @afterRead="afterReadImgs($event,'fireFacsImageUrls')" @delete="deletePic">
                        <view class="upload-item upload-icon flex_base">
                            <u-icon name="/static/icon/upload.png" width="60rpx" height="60rpx"></u-icon>
                        </view>
                    </u-upload>
                </view>
            </view>
            <view class="content">
                <u-form-item label="安全通道状态" prop="scStatus" :borderBottom="false" ref="scFlag" required
                    @click="isShowScStatus = true">
                    <u-input v-model="info.scStatus" disabled disabledColor="#fff" border="none" placeholder="请选择"
                        placeholderClass="f-28 c-99" inputAlign="right"></u-input>
                    <u-icon slot="right" name="arrow-right"></u-icon>
                </u-form-item>
            </view>
            <view class="upload bgc-ff mb-20">
                <view class="f-28 mb-20">安全通道图片(需拍到门和指示箭头)</view>
                <view class="mt-20">
                    <u-upload :fileList="scImageUrls" :previewFullImage="uploadConfig.previewFullImage"
                        :accept="uploadConfig.acceptImg" :multiple="uploadConfig.multiple"
                        :maxCount="uploadConfig.maxCount" :capture="uploadConfig.capture"
                        @afterRead="afterReadImgs($event,'scImageUrls')" @delete="deletePic">
                        <view class="upload-item upload-icon flex_base">
                            <u-icon name="/static/icon/upload.png" width="60rpx" height="60rpx"></u-icon>
                        </view>
                    </u-upload>
                </view>
            </view>
            <view class="upload bgc-ff">
                <view class="f-28 mb-20">校园周边安全巡查照片</view>
                <view class="mt-20">
                    <u-upload :fileList="patrolImageUrls" :previewFullImage="uploadConfig.previewFullImage"
                        :accept="uploadConfig.acceptImg" :multiple="uploadConfig.multiple"
                        :maxCount="uploadConfig.maxCount" :capture="uploadConfig.capture"
                        @afterRead="afterReadImgs($event,'patrolImageUrls')" @delete="deletePic">
                        <view class="upload-item upload-icon flex_base">
                            <u-icon name="/static/icon/upload.png" width="60rpx" height="60rpx"></u-icon>
                        </view>
                    </u-upload>
                </view>
            </view>
            <view class="content">
                <u-form-item label="大门是否装备防撞装置" prop="antiCollision" :borderBottom="false" ref="scFlag" required
                    @click="isShowScStatus = true">
                    <u-radio-group v-model="info.antiCollision">
                        <u-radio :customStyle="{marginBottom: '8px'}" v-for="(item, index) in statusList" :key="index"
                            :label="item" :name="item">
                        </u-radio>
                    </u-radio-group>
                </u-form-item>
            </view>
            <view class="upload bgc-ff mb-20">
                <view class="f-28 mb-20">校园防撞装置照片</view>
                <view class="mt-20">
                    <u-upload :fileList="antiCollisionImageUrls" :previewFullImage="uploadConfig.previewFullImage"
                        :accept="uploadConfig.acceptImg" :multiple="uploadConfig.multiple"
                        :maxCount="uploadConfig.maxCount" :capture="uploadConfig.capture"
                        @afterRead="afterReadImgs($event,'antiCollisionImageUrls')" @delete="deletePic">
                        <view class="upload-item upload-icon flex_base">
                            <u-icon name="/static/icon/upload.png" width="60rpx" height="60rpx"></u-icon>
                        </view>
                    </u-upload>
                </view>
            </view>
            <view class="content">
                <u-form-item label="专职保安人数" prop="fullSoNums" borderBottom required>
                    <u-input type="number" v-model="info.fullSoNums" border="none" placeholder="请输入"
                        placeholderClass="f-28 c-99" inputAlign="right"></u-input>
                </u-form-item>
                <u-form-item label="兼职保安人数" prop="partSoNums" borderBottom required >
                    <u-input type="number" v-model="info.partSoNums" border="none" placeholder="请输入"
                        placeholderClass="f-28 c-99" inputAlign="right"></u-input>
                </u-form-item>
                <u-form-item label="学校监控总数" prop="monitorNums" borderBottom required>
                    <u-input type="number" v-model="info.monitorNums" border="none" placeholder="请输入"
                        placeholderClass="f-28 c-99" inputAlign="right"></u-input>
                </u-form-item>
                <u-form-item label="监控是否全覆盖" prop="monitorOver" borderBottom required>
                    <u-radio-group v-model="info.monitorOver">
                        <u-radio :customStyle="{marginBottom: '8px'}" v-for="(item, index) in statusList" :key="index"
                            :label="item" :name="item">
                        </u-radio>
                    </u-radio-group>
                </u-form-item>
                <u-form-item label="高空抛物监控" prop="highAltitudeMonitor" :borderBottom="false" ref="scFlag" required
                    @click="isShowScStatus = true">
                    <u-input v-model="info.highAltitudeMonitor" border="none" placeholder="请输入"
                        placeholderClass="f-28 c-99" inputAlign="right"></u-input>
                </u-form-item>
            </view>
            <view class="upload bgc-ff mb-20">
                <view class="f-28 mb-20">高空抛物监控(一是监控照片,一是此监控拍摄到的图像)</view>
                <view class="mt-20">
                    <u-upload :fileList="uanImageUrls" :previewFullImage="uploadConfig.previewFullImage"
                        :accept="uploadConfig.acceptImg" :multiple="uploadConfig.multiple"
                        :maxCount="uploadConfig.maxCount" :capture="uploadConfig.capture"
                        @afterRead="afterReadImgs($event,'uanImageUrls')" @delete="deletePic">
                        <view class="upload-item upload-icon flex_base">
                            <u-icon name="/static/icon/upload.png" width="60rpx" height="60rpx"></u-icon>
                        </view>
                    </u-upload>
                </view>
            </view>
        </u-form>
        <button class="submit-btn" @click="sumitInfo">提交</button>
        <button class="list-btn" @click="navigatorPage">我上报的事件</button>
        <u-datetime-picker ref="datetimePicker" :show="showSelectDate" v-model="checkTime" mode="datetime"
            :formatter="formatter" @confirm="confirmDate" @cancel="showSelectDate = false"></u-datetime-picker>
        <u-picker :show="isShowScStatus" :columns="scStatus" :defaultIndex="scStatusIndex"
            @cancel="isShowScStatus = false" @confirm="confirmScStatus"></u-picker>
    </view>
</template>
<script>
    import uploadMixin from "@/mixin/uploadMixin";
    import {
        saveSchoolReporting
    } from "@/api/reporting/reporting";
    export default {
        mixins: [uploadMixin],
        data() {
            return {
                info: {
                    districtName: "",
                    campusName: "",
                    checkUserName: "",
                    checkTelephone: "",
                    checkTime: '',
                    location: '',
                    fourOne: '',
                    fireFacsType: '',
                    fireFacsNums: '',
                    scStatus: '',
                    antiCollision: '',
                    fullSoNums: '',
                    partSoNums: '',
                    monitorNums: '',
                    monitorOver: '',
                    highAltitudeMonitor: '',
                    houseCode: "",
                    checkUserId: "",
                },
                rules: {
                    'districtName': {
                        type: 'string',
                        required: true,
                        message: '请输入社区名称',
                        trigger: ['blur', 'change']
                    },
                    'campusName': {
                        type: 'string',
                        required: true,
                        message: '请输入学校名称',
                        trigger: ['blur', 'change']
                    },
                    'checkTime': {
                        type: 'string',
                        required: true,
                        message: '请选择自查时间',
                        trigger: ['blur', 'change']
                    },
                    'checkName': {
                        type: 'string',
                        required: true,
                        message: '请输入自查人姓名',
                        trigger: ['blur', 'change']
                    },
                    'checkTelephone': {
                        type: 'number',
                        required: true,
                        message: '请输入自查人手机',
                        trigger: ['blur', 'change']
                    },
                    'location': {
                        type: 'string',
                        required: true,
                        message: '请输入自查位置',
                        trigger: ['blur', 'change']
                    },
                    'fourOne': {
                        type: 'string',
                        required: false,
                        message: '请选择四个一工程',
                        trigger: ['blur', 'change']
                    },
                    'fireFacsType': {
                        type: 'string',
                        required: false,
                        message: '请选择消防器材种类',
                        trigger: ['blur', 'change']
                    },
                    'fireFacsNums': {
                        type: 'string',
                        required: true,
                        message: '请选择消防器材数量',
                        trigger: ['blur', 'change']
                    },
                    'scStatus': {
                        type: 'string',
                        required: true,
                        message: '请选择安全通道状态',
                        trigger: ['blur', 'change']
                    },
                    'antiCollision': {
                        type: 'string',
                        required: true,
                        message: '请选择是否配备防撞装置',
                        trigger: ['blur', 'change']
                    },
                    'fullSoNums': {
                        type: 'string',
                        required: true,
                        message: '请输入全职保安数量',
                        trigger: ['blur', 'change']
                    },
                    'partSoNums': {
                        type: 'string',
                        required: true,
                        message: '请输入兼职保安数量',
                        trigger: ['blur', 'change']
                    },
                    'monitorNums': {
                        type: 'string',
                        required: true,
                        message: '请输入监控总数',
                        trigger: ['blur', 'change']
                    },
                    'monitorOver': {
                        type: 'string',
                        required: true,
                        message: '请选择监控是否全覆盖',
                        trigger: ['blur', 'change']
                    },
                    'highAltitudeMonitor': {
                        type: 'string',
                        required: true,
                        message: '请输入高空抛物监控',
                        trigger: ['blur', 'change']
                    },
                },
                showSelectDate: false,
                foImageUrls: [], //四个一工程照片
                fireFacsImageUrls: [], //灭火器图片
                scImageUrls: [], // 安全通道图片
                patrolImageUrls: [], //周边巡查照片
                antiCollisionImageUrls: [], //防撞装置照片
                haImageUrls: [], //高空抛物监控照片
                statusList: ["有", "无"],
                scStatus: [
                    ["开启", "关闭"]
                ], //安全通道状态
                scStatusIndex: [0],
                isShowScStatus: false,
                checkTime: Number(new Date()),
                fourOneList: [{
                        name: "已配备一个安检门",
                        value: 1
                    },
                    {
                        name: "已配备一键报警器",
                        value: 2
                    },
                    {
                        name: "已配备一组存储柜",
                        value: 3
                    },
                    {
                        name: "已配备一间会客室",
                        value: 4
                    },
                    {
                        name: "以上皆未配备",
                        value: 5
                    }
                ]
            }
        },
        onLoad(option) {
            let siteInfo = uni.getStorageSync("siteInfo");
            let userInfo = uni.getStorageSync("userInfo");
            this.$set(this.info, "houseCode", siteInfo.id);
            this.$set(this.info, "districtName", siteInfo.neiName);
            this.$set(this.info, "checkUserName", userInfo.real_name);
            this.$set(this.info, "checkTelephone", userInfo.phone);
            this.$set(this.info, "checkUserId", userInfo.user_id);
        },
        onReady() {
            // 微信小程序需要用此写法
            this.$refs.datetimePicker.setFormatter(this.formatter)
        },
        methods: {
            getLocation(){
                uni.chooseLocation({
                    success:(res)=>{
                        this.$set(this.info,"location",res.address);
                    }
                })
            },
            formatter(type, value) {
                if (type === 'year') {
                    return `${value}年`
                }
                if (type === 'month') {
                    return `${value}月`
                }
                if (type === 'day') {
                    return `${value}日`
                }
                return value
            },
            confirmDate(e) {
                this.showSelectDate = false;
                this.info.checkTime = uni.$u.timeFormat(e.value, 'yyyy-mm-dd hh:MM:ss')
            },
            confirmScStatus(e) {
                this.scStatusIndex = e.indexs;
                this.info.scStatus = e.value[0];
                this.isShowScStatus = false;
            },
            async afterReadImgs(event, key) {
                this.showLoading()
                let lists = [].concat(event.file)
                let fileListLen = this[key].length
                lists.map((item) => {
                    this[key].push({
                        ...item,
                        status: 'uploading',
                        message: '上传中'
                    })
                })
                for (let i = 0; i < lists.length; i++) {
                    const result = await this.uploadFilePromise(lists[i].url)
                    this[key].splice(fileListLen, 1, Object.assign({}, {
                        url: result.data.link,
                        name: result.data.name
                    }))
                    fileListLen++
                }
                this.loadingClose()
            },
            checkImages() {
                if (this.foImageUrls.length) {
                    this.$set(this.info, "foImageUrls", this.setImages(this.foImageUrls))
                }
                if (this.fireFacsImageUrls.length) {
                    this.$set(this.info, "fireFacsImageUrls", this.setImages(this.fireFacsImageUrls))
                }
                if (this.patrolImageUrls.length) {
                    this.$set(this.info, "patrolImageUrls", this.setImages(this.patrolImageUrls))
                }
                if (this.antiCollisionImageUrls.length) {
                    this.$set(this.info, "antiCollisionImageUrls", this.setImages(this.antiCollisionImageUrls))
                }
                if (this.haImageUrls.length) {
                    this.$set(this.info, "haImageUrls", this.setImages(this.haImageUrls))
                }
            },
            setImages(key) {
                let urls = [];
                for (let i of key) {
                    urls.push(i.url);
                }
                return urls.join(",")
            },
            sumitInfo() {
                this.$refs.form.validate().then(valid => {
                    this.checkImages()
                    saveSchoolReporting(this.info).then(res => {
                        uni.showToast({
                            icon: 'success',
                            title: '提交成功',
                            success() {
                                setTimeout(() => {
                                    uni.navigateBack()
                                }, 1000)
                            }
                        })
                    })
                })
            },
            navigatorPage() {
                this.$u.func.globalNavigator('schoolList', "navTo")
            }
        }
    }
</script>
<style lang="less">
    page {
        background-color: #F5F5F5;
    }
    .content {
        margin: 20rpx 30rpx;
        padding: 0 30rpx;
        background-color: #fff;
    }
    .content-name {
        flex: 1;
        text-align: right;
    }
    /deep/.u-radio-group--row {
        justify-content: flex-end;
    }
    .site-box {
        padding: 30rpx;
        margin: 20rpx 30rpx;
        border-radius: 4rpx;
        .c-aa {
            color: #aaa;
        }
        .address {
            width: 60%;
            margin-left: 25rpx;
        }
    }
    .upload-item {
        width: 140rpx;
        height: 140rpx;
        border: 1px solid #EEEEEE;
    }
    .upload {
        margin: 0 30rpx;
        padding: 30rpx;
    }
    .submit-btn {
        width: 690rpx;
        height: 78rpx;
        line-height: 78rpx;
        background: linear-gradient(163deg, #01BDFC 0%, #017BFC 100%);
        border-radius: 8rpx 8rpx 8rpx 8rpx;
        font-size: 32rpx;
        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;
        margin-bottom: 20rpx;
    }
    .mb-20 {
        margin-bottom: 20rpx;
    }
    .mt-30 {
        margin-top: 30rpx;
    }
    .address-row {
        flex: 1;
        justify-content: flex-end;
        align-items: center;
    }
    .address-content {
        width: calc(100% - 116rpx - 20rpx);
        margin-right: 20rpx;
        text-align: right;
    }
    .location-btn {
        width: 116rpx;
        height: 46rpx;
        line-height: 46rpx;
        border-radius: 4rpx;
        border: 1px solid currentColor;
        padding: 0;
        background-color: #fff;
        text-align: center;
    }
</style>
subPackage/label/schoolList.vue
New file
@@ -0,0 +1,96 @@
<template>
    <view class="">
        <view class="list">
            <view class="list-item bgc-ff mb-20" v-for="(i,k) in list" :key="k" @click="navTo(i.taskId)">
                <view class="item-title flex a-i-c j-c-s-b mb-20">
                    <text class="f-32 fw">{{i.campusName}}</text>
                    <u-tag v-if="i.confirmFlag == 1" text="待审批" type="warning" plain plainFill></u-tag>
                    <u-tag v-if="i.confirmFlag == 2" text="审核通过" type="success" plain plainFill></u-tag>
                    <u-tag v-if="i.confirmFlag == 3" text="审核拒绝" type="error" plain plainFill></u-tag>
                </view>
                <view class="item-row flex a-i-c j-c-s-b">
                    <text class="f-28">时间</text>
                    <text class="f-28 c-66">{{i.applyTime}}</text>
                </view>
            </view>
        </view>
        <u-loadmore :status="loadingStatus" loadmoreText="开始加载" loadingText="数据加载中" nomoreText="没有更多了" line />
    </view>
</template>
<script>
    import {
     getSchoolReportingList
    } from "@/api/reporting/reporting.js"
    export default {
        data() {
            return {
                list: [],
                currentPage: 1,
                loadingStatus: 'nomore',
            }
        },
        onLoad() {
            this.getList()
        },
        onReachBottom() {
            this.currentPage++
            this.getList()
        },
        methods: {
            getList() {
                getSchoolReportingList({
                    checkUserId: uni.getStorageSync("userInfo").user_id,
                    page: this.currentPage,
                    size: 10
                }).then(res => {
                    if (res.code != 200) {
                        uni.showToast({
                            title: '数据请求失败',
                            icon: 'error'
                        })
                        return
                    }
                    let records = res.data.records;
                    this.list = [...this.list, ...records]
                    this.loadingStatus = 'nomore'
                })
            },
            navTo(id) {
                uni.navigateTo({
                    url: `/subPackage/workbench/views/hotelReportDetail?id=${id}`
                })
            }
        }
    }
</script>
<style lang="scss">
    page {
        background-color: #F5F5F5;
    }
    .list {
        margin: 20rpx 30rpx 0;
    }
    .list-item {
        padding: 0 30rpx 20rpx;
        border-radius: 8rpx;
        .item-title {
            padding: 30rpx 0;
            border-bottom: 1px solid #F5F5F5;
        }
        .item-row {
            padding: 10rpx 0;
            .address {
                width: 65%;
            }
        }
    }
</style>
subPackage/workbench/views/labelReportDetail.vue
@@ -49,8 +49,8 @@
    import boxTitle from "@/subPackage/workbench/components/boxTitle/index.vue"
    import lineItem from '../components/lineItem.vue'
    import {
        getLabelReportingDetail,
        setLabelReporting
        getSchoolReportingDetail,
        setShoolReporting
    } from '@/api/reporting/reporting'
    export default {
        components: {
@@ -60,30 +60,80 @@
        data() {
            return {
                basicData: [{
                        label: '对象电话',
                        name: "transactionObjectTel",
                        label: '社区名称',
                        name: "districtName",
                        value: '未完善'
                    },
                    {
                        label: '交易金额',
                        name: 'transactionMoney',
                        label: '校园名称',
                        name: 'campusName',
                        value: '未完善'
                    },
                    {
                        label: '物品数量',
                        name: 'goodsNums',
                        label: '自查时间',
                        name: 'checkTime',
                        value: '未完善'
                    },
                    {
                        label: '交易位置',
                        name: 'location',
                        label: '自查人姓名',
                        name: 'checkUserName',
                        value: '未完善'
                    },
                    {
                        label: '交易过程',
                        name: 'transactionProcess',
                        label: '自查位置',
                        name: 'localtion',
                        value: '未完善'
                    }
                    },
                    {
                        label: '四个一工程',
                        name: 'fourOne',
                        value: '未完善'
                    },
                    {
                        label: '消防设施种类',
                        name: 'fireFacsType',
                        value: '未完善'
                    },
                    {
                        label: '消防器材数量',
                        name: 'fireFacsNums',
                        value: '未完善'
                    },
                    {
                        label: '安全通道状态',
                        name: 'scStatus',
                        value: '未完善'
                    },
                    {
                        label: '大门是否装备防撞装置',
                        name: 'antiCollision',
                        value: '未完善'
                    },
                    {
                        label: '专职保安人员',
                        name: 'fullSoNums',
                        value: '未完善'
                    },
                    {
                        label: '兼职保安人员',
                        name: 'partSoNums',
                        value: '未完善'
                    },
                    {
                        label: '学校监控总数',
                        name: 'monitorNums',
                        value: '未完善'
                    },
                    {
                        label: '监控是否全覆盖',
                        name: 'monitorOver',
                        value: '未完善'
                    },
                    {
                        label: '高空抛物监控',
                        name: 'highAltitudeMonitor',
                        value: '未完善'
                    },
                ],
                form: {
                    confirmFlag: '待审核',
@@ -108,8 +158,12 @@
                currentId: '',
                currentData: {},
                id: "",
                imageUrls: [],
                goodsImageUrls: [],
                foImageUrls: [], //四个一工程照片
                fireFacsImageUrls: [], //灭火器图片
                scImageUrls: [], // 安全通道图片
                patrolImageUrls: [], //周边巡查照片
                antiCollisionImageUrls: [], //防撞装置照片
                haImageUrls: [], //高空抛物监控照片
                selectStatus: "",
                remark: ""
            }
@@ -121,16 +175,19 @@
        methods: {
            getDetailInfo(id) {
                getLabelReportingDetail({
                getSchoolReportingDetail({
                    taskId: id
                }).then(res => {
                    console.log(res);
                    let data = res.data;
                    this.basicData.forEach(item => {
                        item.value = data[item.name]
                        item.value = data[item.name] || "未完善"
                    })
                    this.imageUrls = this.setImages(data.imageUrls);
                    this.goodsImageUrls = this.setImages(data.goodsImageUrls);
                    this.foImageUrls = this.setImages(data.foImageUrls);
                    this.fireFacsImageUrls = this.setImages(data.fireFacsImageUrls);
                    this.patrolImageUrls = this.setImages(data.patrolImageUrls);
                    this.antiCollisionImageUrls = this.setImages(data.antiCollisionImageUrls);
                    this.haImageUrls = this.setImages(data.haImageUrls);
                })
            },
            setImages(str) {
@@ -159,7 +216,7 @@
                    })
                    return;
                }
                setLabelReporting(data).then(res => {
                setSchoolReporting(data).then(res => {
                    if (res.code !== 200) {
                        uni.showToast({
                            title: '更新失败',
subPackage/workbench/views/schoolReportDetail.vue
New file
@@ -0,0 +1,8 @@
<template>
</template>
<script>
</script>
<style>
</style>