Lou
2024-01-30 e0c780a058a97fcee0bc1987943981719a9079cd
场所检查功能完善
7 files modified
459 ■■■■ changed files
api/place/place.js 9 ●●●●● patch | view | raw | blame | history
common/setting.js 2 ●●● patch | view | raw | blame | history
subPackage/house/houseNumber/index.vue 77 ●●●● patch | view | raw | blame | history
subPackage/house/houseNumber/siteInspect.vue 239 ●●●● patch | view | raw | blame | history
subPackage/workbench/views/auditList.vue 13 ●●●● patch | view | raw | blame | history
subPackage/workbench/views/checkDetail.vue 117 ●●●●● patch | view | raw | blame | history
subPackage/workbench/views/cscj.vue 2 ●●● patch | view | raw | blame | history
api/place/place.js
@@ -42,6 +42,15 @@
    })
}
export const addPlaceCheckTwo = (data) => {
    return http.request({
        url: '/blade-placeCheck/placeCheck/saveTwo',
        method: 'POST',
        data: data
    })
}
export const getPlaceCheckDetail = (params) => {
    return http.request({
        url: '/blade-placeCheck/placeCheck/detail',
common/setting.js
@@ -13,7 +13,7 @@
    devUrl: 'http://192.168.0.101:9528',
    // devUrl: 'https://srgdjczzxtpt.com:2080/api',
    // devUrl: 'https://kt39592615.goho.co',
    // minioBaseUrl: "https://srgdjczzxtpt.com:2080/gminio/jczz/",
    minioBaseUrl: "https://srgdjczzxtpt.com:2080/gminio/jczz/",
    // minioBaseUrl: "http://192.168.0.101:9528/",
    // 数据中台接口url
    dataCenterUrl: 'https://sk.hubeishuiyi.cn/services',
subPackage/house/houseNumber/index.vue
@@ -76,7 +76,7 @@
                <u-icon name="/static/icon/menu-02.png" size="30"></u-icon>
                <text>场所采集</text>
            </view>
            <view class="sl-box" @close="showPopup=false" v-if="isPolice">
            <view class="sl-box" @click="navToInspect" v-if="isPolice">
                <u-icon name="/static/icon/menu-02.png" size="30"></u-icon>
                <text>场所检查</text>
            </view>
@@ -145,7 +145,9 @@
        addPlaceCheck
    } from "@/api/place/place.js"
    import uploadMixin from "@/mixin/uploadMixin";
    import {
        bizDictionary
    } from '@/api/system/dict.js'
    export default {
        mixins: [uploadMixin],
        components: {
@@ -156,15 +158,36 @@
            return {
                stdId: '',
                houseNumberData: [{
                        title: '场所名称',
                        name: 'placeName',
                        value: '未完善'
                    },
                    {
                        title: '场所标签',
                        name: 'label',
                        value: '未完善'
                    },
                    {
                        title: '场所名称',
                        name: 'placeName',
                        title: '九小场所',
                        name: 'isNine',
                        value: '未完善'
                    },
                    {
                        title: '九小场所类型',
                        name: 'nineType',
                        value: '未完善'
                    },
                    {
                        title: '阵地',
                        name: 'isFrontType',
                        value: '未完善'
                    },
                    {
                        title: '阵地类型',
                        name: 'frontType',
                        value: '未完善'
                    },
                    {
                        title: '场所负责人',
                        name: 'principal',
@@ -314,14 +337,13 @@
                signatureUrl: ""
            }
        },
        onLoad(option) {
        async onLoad(option) {
            console.log("oload=>", option)
            this.stdId = option.stdId
            if (uni.getStorageSync("activeRole").roleName == "民警") {
                this.isPolice = true;
            }
            if (option.addressType) {
                this.addressType = option.addressType
            }
@@ -341,6 +363,19 @@
        },
        methods: {
            // 获取业务字典
            getBizDict(code, callback) {
                bizDictionary({
                    code
                }).then(res => {
                    if (res.code == 200) {
                        callback(res.data)
                    }
                })
            },
            async getBuildingDetail() {
                // this.$nextTick(() => {
                //     this.$refs.uToast.show({
@@ -369,10 +404,8 @@
                    this.placeName = data.placeName;
                    const doorplateAddressEntity = data?.doorplateAddressEntity || {}
                    const placePoiLabelVOList = data?.placePoiLabelVOList || {}
                    this.neiName = doorplateAddressEntity.neiName || '未完善'
                    this.houseNumberData.forEach(item => {
                    this.houseNumberData.forEach((item, index) => {
                        if (!data[item.name]) {
                            item.value = data.doorplateAddressEntity[item.name] || '未完善'
                        } else {
@@ -387,6 +420,28 @@
                            // item.value = labelArr.join('、')
                            item.value = data.placePoiLabelVOList[data.placePoiLabelVOList.length - 1]
                                .labelName;
                        }
                        if (item.name == 'isNine') {
                            item.value = data.isNine == 1 ? "是" : "否"
                        }
                        // if(data.isNine != 1 && item.name == "nineType"){
                        //     this.houseNumberData.splice(index,1)
                        // }
                        if (data.isNine == 1 && item.name == "nineType") {
                            this.getBizDict('nineType', (list) => {
                                item.value = this.$getIndex(list, data.nineType, 'dictKey',
                                    'dictValue').name
                            })
                        }
                        if (item.name == 'isFront') {
                            item.value = data.isFront == 1 ? "是" : "否"
                        }
                        if (data.isFront == 1 && item.name == "frontType") {
                            this.getBizDict('frontType', (list) => {
                                item.value = this.$getIndex(list, data.frontType, 'dictKey',
                                    'dictValue').name
                            })
                        }
                    })
@@ -521,7 +576,9 @@
            },
            navToInspect() {
                this.$u.func.globalNavigator(`siteInspect?code=${this.stdId}`)
                uni.navigateTo({
                    url: `siteInspect?code=${this.stdId}`
                })
            }
        },
subPackage/house/houseNumber/siteInspect.vue
@@ -1,41 +1,48 @@
<template>
    <view class="wrap">
        <u-collapse :value="itemIndex">
        <u-collapse :value="itemIndex" ref="collapse">
            <u-collapse-item :title="item.title" :name="index" v-for="(item,index)  in questionList">
                <u-form :model="info" :rules="rules" ref="form">
                    <u-form-item labelWidth="170" :label="i.title" prop="gateStatus" v-for="(i,k) in item.children">
                        <view class="btn-group flex" style="margin-left:20rpx;">
                            <view class="value-item" @click="changeStatus(1,index,k)">
                                存在
                            </view>
                            <view class="value-item" @click="changeStatus(2,index,k)">
                                不存在
                            </view>
                <u-form :model="info" ref="form">
                    <block v-for="(i,k) in item.children">
                        <view class="f-30 c-33">
                            {{i.title}}
                        </view>
                    </u-form-item>
                    <!-- <u-form-item labelWidth="120" label="整改内容" prop="gateStatus">
                        <u-textarea v-model="info.remark" placeholder="请输入内容" placeholderClass="c-99 f-26"></u-textarea>
                    </u-form-item>
                    <u-form-item labelWidth="120" label="图片" prop="gateStatus">
                        <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">
                                <u-icon name="/static/icon/upload.png" width="60rpx" height="60rpx"></u-icon>
                        <u-form-item labelWidth="90" label="隐患" prop="gateStatus">
                            <view class="btn-group flex">
                                <view class="value-item" :class="i.state == 0?'active bgc-main c-ff':''"
                                    @click="changeStatus(0,i,index,k)">
                                    存在
                                </view>
                                <view class="value-item" :class="i.state == 1?'active bgc-main c-ff':''"
                                    @click="changeStatus(1,i,index,k)">
                                    不存在
                                </view>
                            </view>
                        </u-upload>
                    </u-form-item> -->
                        </u-form-item>
                        <view class="" v-if="i.state == 0">
                            <u-form-item labelWidth="100" label="隐患照片" prop="gateStatus">
                                <u-upload :fileList="i.urls" :previewFullImage="uploadConfig.previewFullImage"
                                    :accept="uploadConfig.acceptImg" :multiple="uploadConfig.multiple"
                                    :maxCount="uploadConfig.maxCount" :capture="uploadConfig.capture"
                                    @afterRead="afterReadImgs($event,i,index,k)" @delete="deleteImages($event,index,k)">
                                    <view class="upload-item upload-icon flex_base">
                                        <u-icon name="/static/icon/upload.png" width="60rpx" height="60rpx"></u-icon>
                                    </view>
                                </u-upload>
                            </u-form-item>
                            <u-form-item labelWidth="100" label="隐患描述" prop="gateStatus">
                                <u-textarea v-model="i.remark" placeholder="请输入隐患描述"
                                    placeholderClass="c-99 f-26"></u-textarea>
                            </u-form-item>
                        </view>
                    </block>
                </u-form>
            </u-collapse-item>
        </u-collapse>
        <view class="content bgc-ff" v-if="false">
        <view class="content">
            <view class="upload ">
                <view class="f-28 mb-20">整改内容</view>
                <view class="f-28 mb-20">其它隐患问题</view>
                <u-textarea v-model="info.remark" placeholder="请输入内容" placeholderClass="c-99 f-26"></u-textarea>
                <view class="mt-20">
                    <view class="f-28 mb-20">图片</view>
@@ -49,7 +56,6 @@
                    </u-upload>
                </view>
            </view>
        </view>
        <!-- <view class="sign bgc-ff mt-20">
            <view class="flex j-c-s-b a-i-c " @click="showSignature = true">
@@ -61,12 +67,7 @@
            </view>
        </view> -->
        <footer-btn @click="sumitInfo"></footer-btn>
        <footer-btn @click="showSignPopup"></footer-btn>
        <u-popup mode="bottom" :show="showSignature" round="10" :closeable="true" @close="showSignature=false">
            <view class="signture-popup">
@@ -80,7 +81,7 @@
<script>
    import uploadMixin from "@/mixin/uploadMixin";
    import {
        addPlaceCheck,
        addPlaceCheckTwo,
        getPlaceCheckItem
    } from "@/api/place/place.js"
    export default {
@@ -93,7 +94,7 @@
                info: {
                    remark: "",
                    imageUrls: "",
                    signaturePath: ""
                    signaturePath: "",
                },
                desc: "",
@@ -109,7 +110,7 @@
                },
                statusOption: [{
                        text: "存在",
                        value: 2
                        value: 0
                    },
                    {
                        text: "不存在",
@@ -118,12 +119,14 @@
                ],
                questionList: [],
                itenIndex: []
                itemIndex: [],
                patrolRecordVOList: [],
                count: 0
            }
        },
        onLoad(option) {
            // this.info.houseCode = option.code;
            this.info.houseCode = option.code;
            this.getItem();
        },
@@ -135,24 +138,127 @@
                    let data = res.data;
                    this.questionList = res.data;
                    let arr = []
                    let obj = {
                        itemId: "",
                        state: "",
                        imagesUrl: "",
                        remark: ""
                    }
                    let count = 0;
                    for (let i = 0, ii = data.length; i < ii; i++) {
                        arr.push(i);
                        for (let k = 0, kk = data[i].children.length; k < kk; k++) {
                            // this.info.patrolRecordVOList.push(obj);
                            count += 1;
                        }
                    }
                    this.count = count;
                    this.itemIndex = arr;
                })
            },
            changeStatus(value, fIndex, cIndex) {
                this.info.status = value;
            changeStatus(value, item, fIndex, cIndex) {
                let children = this.questionList[fIndex];
                children.children[cIndex].state = value;
                this.$set(this.questionList, fIndex, children)
                if (value == 0 && !item.urls) {
                    children.children[cIndex].urls = [];
                    this.$set(this.questionList, fIndex, children)
                }
                this.$nextTick(() => {
                    this.$refs.collapse.init();
                })
                this.getSelected()
            },
            getSelected() {
                let arr = []
                for (let i = 0, ii = this.questionList.length; i < ii; i++) {
                    for (let k = 0, kk = this.questionList[i].children.length; k < kk; k++) {
                        if (this.questionList[i].children[k].state != null) {
                            arr.push({
                                itemId: this.questionList[i].children[k].id,
                                state: this.questionList[i].children[k].state,
                                imageUrls: this.setImages(this.questionList[i].children[k].urls),
                                remark: this.questionList[i].children[k].remark || ""
                            })
                        }
                    }
                }
                return arr;
            },
            setImages(key) {
                if (!key) {
                    return ""
                } else {
                    let urls = [];
                    for (let i of key) {
                        urls.push(i.name);
                    }
                    return urls.join(",")
                }
            },
            async afterReadImgs(event, item, fIndex, cIndex) {
                this.showLoading()
                let children = this.questionList[fIndex];
                let lists = [].concat(event.file)
                let fileListLen = item.urls.length;
                lists.map((item) => {
                    children.children[cIndex].urls.push({
                        ...item,
                        status: 'uploading',
                        message: '上传中'
                    })
                    this.$set(this.questionList, fIndex, children)
                })
                for (let i = 0; i < lists.length; i++) {
                    const result = await this.uploadFilePromise(lists[i].url)
                    children.children[cIndex].urls.splice(fileListLen, 1, Object.assign({}, {
                        url: result.data.link,
                        name: result.data.name
                    }))
                    this.$set(this.questionList, fIndex, children)
                    fileListLen++
                }
                this.loadingClose()
                this.getSelected()
            },
            deleteImages(event, fIndex, cIndex) {
                let children = this.questionList[fIndex];
                children.children[cIndex].urls.splice(event.index, 1);
                this.$set(this.questionList, fIndex, children);
                this.getSelected()
            },
            signatureChange(e) {
                // this.signatureUrl = e;
                this.uploadSignImg(e)
            },
            showSignPopup() {
                // if (this.getSelected().length < this.count) {
                //     this.$showTips("还有内容还未完善");
                //     return;
                // }
                let data = this.getSelected();
                for (let i of data) {
                    if (i.state == 1) {
                        if (i.imageUrls || i.remark) {
                            i.imageUrls = "";
                            i.remark = "";
                        }
                    } else {
                        if (!i.imageUrls && !i.remark) {
                            this.$showTips("请上传隐患照片或填写隐患描述");
                            return;
                        }
                    }
                }
                this.showSignature = true;
            },
            uploadSignImg(url) {
@@ -169,13 +275,16 @@
                            this.showSignature = false;
                            this.signatureUrl = data.data.link;
                            this.info.signaturePath = data.data.name;
                            this.sumitInfo()
                        }
                    }
                })
            },
            sumitInfo() {
                uni.showLoading({
                    title: "加载中..."
                })
                if (this.form.images.length > 0) {
                    let urls = []
                    this.form.images.forEach(e => {
@@ -183,7 +292,11 @@
                    })
                    this.info.imageUrls = urls.join(",")
                }
                addPlaceCheck(this.info).then(res => {
                this.info.patrolRecordVOList = this.getSelected()
                addPlaceCheckTwo(this.info).then(res => {
                    uni.hideLoading();
                    uni.showToast({
                        icon: 'success',
                        title: '提交成功',
@@ -217,8 +330,8 @@
    }
    .content {
        margin: 20rpx 30rpx;
        padding: 0 30rpx;
        margin: 20rpx 0;
        padding: 0 30rpx 100rpx;
    }
    .site-box {
@@ -245,8 +358,6 @@
    .upload {
        // margin: 0 30rpx;
        padding: 30rpx 0;
    }
    .submit-btn {
@@ -294,9 +405,6 @@
        text-align: center;
    }
    .content {
        padding: 0 20rpx;
    }
    .signture-popup {
        padding-bottom: 20rpx;
@@ -308,11 +416,30 @@
    }
    .value-item {
        padding: 0 40rpx;
        flex: 1;
        // background-color: #ffffff;
        border: 2rpx solid #333333;
        // width: 120rpx;
        border: 2rpx solid #f5f5f5;
        height: 70rpx;
        line-height: 70rpx;
        box-sizing: border-box;
        text-align: center;
    }
    .active {
        border: 2rpx solid currentColor;
    }
    .btn-group {
        flex: 1;
    }
    /deep/ .u-cell__title-text {
        font-weight: bold;
        font-size: 30rpx;
    }
    /deep/ .u-form-item__body__left__content {
        font-size: 26rpx;
    }
</style>
subPackage/workbench/views/auditList.vue
@@ -30,16 +30,17 @@
                    <u-tag v-if="i.status == 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" v-if="tabIndex == 0">时间</text>
                    <text class="f-28" v-if="tabIndex == 1">检查时间</text>
                    <text class="f-28 c-66">{{i.createTime}}</text>
                </view>
                <view class="item-row flex a-i-c j-c-s-b" v-if="ftabIndex == 0">
                <view class="item-row flex a-i-c j-c-s-b" v-if="tabIndex == 0">
                    <text class="f-28">地址</text>
                    <text class="address f-28 c-66">{{i.addressName || ""}}</text>
                </view>
                <view class="item-row flex a-i-c j-c-s-b" v-if="tabIndex == 1">
                    <text class="f-28">整改内容</text>
                    <text class="address f-28 c-66">{{i.remark}}</text>
                    <text class="f-28">隐患数量</text>
                    <text class="address f-28 c-66">{{i.number}}</text>
                </view>
            </view>
        </view>
@@ -132,7 +133,7 @@
            },
            changeTab(e) {
                this.tabIndex = e.index;
                this.currentStatus = e.status;
                // this.currentStatus = e.status;
                this.resetParams();
                if (e.index == 0) {
                    this.getList()
@@ -156,7 +157,7 @@
                let params = {
                    page: this.currentPage,
                    size: 20,
                    status: this.currentStatus,
                    status: 2,
                    frequency: this.frequency
                }
                if (this.selectDate.length) {
subPackage/workbench/views/checkDetail.vue
@@ -1,22 +1,49 @@
<template>
    <view class="">
        <view class="item-row flex j-c-s-b a-i-c">
            <text>整改内容</text>
            <text>{{info.remark}}</text>
            <text>场所名称</text>
            <text class="item-content">{{info.placeName}}</text>
        </view>
        <view class="item-row flex j-c-s-b a-i-c">
            <text>时间</text>
            <text>标签</text>
            <text>{{label || "未完善"}}</text>
        </view>
        <view class="item-row flex j-c-s-b a-i-c">
            <text>场所负责人</text>
            <text>{{info.principal || "未完善"}}</text>
        </view>
        <view class="item-row flex j-c-s-b a-i-c">
            <text>场所负责人电话</text>
            <text>{{info.principalPhone || "未完善"}}</text>
        </view>
        <view class="item-row flex j-c-s-b a-i-c">
            <text>检查人</text>
            <text>{{info.name}}</text>
        </view>
        <view class="item-row flex j-c-s-b a-i-c">
            <text>检查时间</text>
            <text>{{info.createTime}}</text>
        </view>
        <view class="item-row flex j-c-s-b a-i-c">
            <text>地址</text>
            <text class="item-content">{{info.location}}</text>
        </view>
        <view class="item-row flex j-c-s-b a-i-c" v-if="inof.remark">
            <text>其它隐患问题</text>
            <text class="item-content">{{info.remark}}</text>
        </view>
        <view class="image-wrap bgc-ff" v-if="images.length">
            <view class="mb-20">
                图片
            </view>
            <view class="image-item" v-for="(i,k) in images" @click="previewImage(images,i)">
                <u-image :src="i" width="100rpx" height="100rpx"></u-image>
            <view class="flex flex-wrap">
                <view class="image-item" v-for="(i,k) in images" @click="previewImage(images,i)">
                    <u-image :src="i" width="100rpx" height="100rpx"></u-image>
                </view>
            </view>
        </view>
        <view class="image-wrap bgc-ff" v-if="signatureUrl.length">
@@ -27,24 +54,60 @@
                <u-image :src="i" width="100rpx" height="100rpx"></u-image>
            </view>
        </view>
        <view class="mt-20 bgc-ff">
            <block v-for="(item,index) in itemList">
                <block v-for="(i,k) in item.children">
                    <block v-for="(n,m) in info.patrolRecordVOList">
                        <view class="item-row flex j-c-s-b a-i-c" v-if="i.id == n.itemId && n.state == 1">
                            <text class="item-left">{{i.title}}</text>
                            <text>不存在</text>
                        </view>
                        <u-collapse ref="collapse" v-if="i.id == n.itemId && n.state == 0">
                            <u-collapse-item :name="index" :title="i.title" value="存在">
                                <view class="mb-20" v-if="n.remark">
                                    <view class="f-26 mb-10" style="color:#000">隐患描述</view>
                                    <view class="f-28" style="color:#000">
                                        {{n.remark}}
                                    </view>
                                </view>
                                <view class="" v-if="n.imageUrls">
                                    <view class="f-26 mb-10" style="color:#000">隐患照片</view>
                                    <view class="flex flex-wrap">
                                        <view class="mr-20" v-for="r in ($setImageUrl(n.imageUrls))">
                                            <u-image :src="r" width="100rpx" height="100rpx"
                                                @click="previewImage($setImageUrl(n.imageUrls),i)"></u-image>
                                        </view>
                                    </view>
                                </view>
                            </u-collapse-item>
                        </u-collapse>
                    </block>
                </block>
            </block>
        </view>
    </view>
</template>
<script>
    import {
        getPlaceCheckItem,
        getPlaceCheckDetail
    } from '@/api/place/place.js'
    export default {
        data() {
            return {
                info: {},
                images: [],
                signatureUrl: []
                signatureUrl: [],
                label: "",
                itemList: []
            }
        },
        onLoad(option) {
        async onLoad(option) {
            await this.getItem();
            this.getDetail(option.id);
        },
        methods: {
@@ -55,11 +118,28 @@
                    this.info = res.data;
                    this.images = this.$setImageUrl(res.data.imageUrls);
                    this.signatureUrl = this.$setImageUrl(res.data.signaturePath);
                    if (res.data.placePoiLabelVOList.length) {
                        this.label = res.data.placePoiLabelVOList[res.data.placePoiLabelVOList.length - 1]
                            .labelName;
                    }
                    // this.label = res.data.
                })
            },
            getItem() {
                getPlaceCheckItem().then(res => {
                    if (res.code == 200) {
                        this.itemList = res.data;
                    }
                })
            },
            setUrl(src) {
                return this.$setImageUrl(url)
            },
            previewImage(urls, current) {
                uni.previewImage({
@@ -89,6 +169,10 @@
            width: 70%;
            text-align: right;
        }
        .item-left {
            width: 70%;
        }
    }
    .image-wrap {
@@ -99,4 +183,19 @@
            margin-right: 20rpx;
        }
    }
    /deep/.u-cell__title-text {
        color: #000 !important;
        width: 70%;
        font-size: 28rpx !important;
    }
    /deep/ .u-cell__value {
        color: #000 !important;
        font-size: 28rpx !important;
    }
    .mr-20 {
        margin-right: 20rpx;
    }
</style>
subPackage/workbench/views/cscj.vue
@@ -21,7 +21,7 @@
                        </view>
                    </u-form-item>
                    <u-form-item @click="popup" class="form-item" labelWidth="100" label="标签:" :required="isRequired"
                    <u-form-item @click="popup" class="form-item" labelWidth="100" label="标签:" :required="true"
                        :disabled="isDisabled" prop="label">
                        <u-input border="none" v-model="categoryValue" disabled disabledColor="#ffffff"
                            placeholder="请选择">