Lou
2024-01-08 7f1e749f9a60d36edb04e06610fb111567d404bf
走访日志功能更新,修复部分问题
12 files modified
339 ■■■■ changed files
api/house/household.js 13 ●●●●● patch | view | raw | blame | history
api/workLog/workLog.js 2 ●●● patch | view | raw | blame | history
common/setting.js 6 ●●●● patch | view | raw | blame | history
components/myIssue/myIssue.vue 17 ●●●● patch | view | raw | blame | history
subPackage/grid/comment.vue 10 ●●●● patch | view | raw | blame | history
subPackage/grid/tenement.vue 20 ●●●●● patch | view | raw | blame | history
subPackage/workbench/views/cshw.vue 3 ●●●●● patch | view | raw | blame | history
subPackage/workbench/views/csjl.vue 2 ●●● patch | view | raw | blame | history
subPackage/workbench/views/editExamine.vue 5 ●●●● patch | view | raw | blame | history
subPackage/workbench/views/report.vue 2 ●●● patch | view | raw | blame | history
subPackage/workbench/views/reportAudit.vue 19 ●●●● patch | view | raw | blame | history
subPackage/workbench/views/workLog.vue 240 ●●●●● patch | view | raw | blame | history
api/house/household.js
@@ -39,6 +39,17 @@
}
// 查询住户
export const fetchHousehold = (params) => {
    return http.request({
        url: 'blade-household/household/selectHouseholdList',
        method: 'GET',
        params: params
    })
}
// 获取住户列表
export const getHouseholdList = (params) => {
    return http.request({
@@ -56,4 +67,4 @@
        method: 'GET',
        params: params
    })
}
}
api/workLog/workLog.js
@@ -7,4 +7,4 @@
        method: 'POST',
        data
    })
}
}
common/setting.js
@@ -9,9 +9,9 @@
    // 版本号
    version: '2.0.0',
    // 开发环境接口Url
    devUrl: 'http://z4042833u6.wicp.vip',
    // devUrl: 'http://192.168.0.106:9528',
    // devUrl: 'https://srgdjczzxtpt.com:2080/api',
    // devUrl: 'http://z4042833u6.wicp.vip',
    // devUrl: 'http://192.168.0.109:9528',
    devUrl: 'https://srgdjczzxtpt.com:2080/api',
    // devUrl: 'https://kt39592615.goho.co',
    minioBaseUrl: "https://srgdjczzxtpt.com:2080/gminio/jczz/",
    // minioBaseUrl:"http://192.168.0.103:9528/",
components/myIssue/myIssue.vue
@@ -12,7 +12,9 @@
        </view>
        <textarea v-if="textareaShow" @blur="blur" v-model="infoReceive.content" :placeholder="textareaPlaceholder" />
        <view class="issue-btn-box">
            <button v-if="submitShow" class="submit-btn bgc-main c-ff" @click="doSubmit">{{submitText}}</button>
            <button v-if="submitShow" class="submit-btn bgc-main c-ff"
                :disabled="infoReceive.content && infoReceive.score?false:true"
                @click="doSubmit">{{submitText}}</button>
            <slot name="submit"></slot>
        </view>
    </view>
@@ -97,7 +99,8 @@
                infoReceive: {
                    score: 0,
                    content: ""
                }
                },
                canSubmit: false
            }
        },
@@ -136,7 +139,9 @@
             * @name 提交
             */
            doSubmit() {
                this.$emit('submit', this.infoReceive)
            }
        },
        created() {
@@ -151,7 +156,7 @@
    $fontSize: 28upx;
    .issue {
        background-color: $backgroundC;
        /* background-color: $backgroundC; */
        &-head {
            background-color: $white;
@@ -213,6 +218,12 @@
                /* background-color: #3682FF; */
                line-height: 80upx
            }
            button[disabled] {
                color: #fff !important;
                border-color: #999 !important;
                background-color: #999 !important;
            }
        }
    }
subPackage/grid/comment.vue
@@ -27,14 +27,14 @@
            return {
                content: "",
                id: "",
                title: "",
                title: "评分",
                isEdit: false,
                score: 0
            }
        },
        onLoad(option) {
            this.id = option.id;
            this.title = option.title;
            // this.title = option.title;
            if (option.data) {
                let data = JSON.parse(option.data);
                this.score = data.score;
@@ -45,7 +45,7 @@
        methods: {
            submitInfo(val) {
                let data = val;
                data.propertyCompanyid = this.id;
                data.propertyCompanyId = this.id;
                data.createUser = uni.getStorageSync("userInfo").user_id;
                if (this.isEdit) {
                    delete data.content;
@@ -67,6 +67,10 @@
</script>
<style>
    page {
        background-color: #f5f5f5;
    }
    .container {
        padding: 30rpx 30rpx 0;
    }
subPackage/grid/tenement.vue
@@ -40,7 +40,7 @@
        <view class="comment" v-if="commentList.length">
            <caption-row title="留言" />
            <view class="comment-list bgc-ff mt-20">
                <view class="comment-item flex " v-for="(item,index) in commentList" :key="index">
                <view class="comment-item flex " v-for="(item,index) in commentList" :key="index" v-if="item.content">
                    <u-avatar size="45" src="/static/icon/user-01.png"></u-avatar>
                    <view class="comment-item-content">
                        <view class="flex j-c-s-b a-i-c mb-20">
@@ -55,11 +55,11 @@
            </view>
        </view>
        <view class="footer" v-if="!scoreInfo.score">
        <view class="footer" v-if="!scoreInfo.id">
            <u-search searchIcon='edit-pen' :animation="true" placeholder="写留言" disabled
                @click="navToComment"></u-search>
        </view>
        <footer-btn v-if="scoreInfo.score" text="修改评分" @submit="navToScore" />
        <!-- <footer-btn v-if="!scoreInfo.score"  text="修改评分" @click="navToScore" /> -->
    </view>
@@ -146,11 +146,15 @@
                    url: `comment?id=${this.detailInfo.id}&title=${this.detailInfo.name}`
                })
            },
            // navToScore() {
            //     uni.navigateTo({
            //         url: `comment?id=${this.detailInfo.id}&title=${this.detailInfo.name}&data=${JSON.stringify(this.scroeInfo)}`
            //     })
            // }
            navToScore() {
                console.log(11111)
                uni.navigateTo({
                    url: `comment?id=${this.detailInfo.id}&title=${this.detailInfo.name}&data=${JSON.stringify(this.scoreInfo)}`,
                    complete: (res) => {
                        console.log("res=>", res)
                    }
                })
            }
        }
    }
</script>
subPackage/workbench/views/cshw.vue
@@ -109,6 +109,9 @@
                this.tabIndex = 1;
                this.tabStatus = 1;
            }
            if (option.placeId) {
                this.pagingParams.placeId = option.placeId
            }
        },
        onShow() {
subPackage/workbench/views/csjl.vue
@@ -29,7 +29,7 @@
                <view class="info">
                    <view class="charge-man">
                        <text>场所负责人:</text>
                        <text>{{ records.username || '未完善' }}</text>
                        <text>{{ records.principal || '未完善' }}</text>
                    </view>
                    <view class="phone">
                        <text>手机号:</text>
subPackage/workbench/views/editExamine.vue
@@ -275,8 +275,9 @@
                this.form.placePractitioner = placePractitioner
                this.updatePlaceExt(this.form)
            },
            pushPage() {
                this.$u.func.globalNavigator('/subPackage/workbench/views/cshw')
                this.$u.func.globalNavigator(`/subPackage/workbench/views/cshw?placeId=${this.form.placeId}`)
            }
        }
    }
@@ -344,6 +345,8 @@
            position: fixed;
            left: 0;
            bottom: 0;
            padding-bottom: calc(env(safe-area-inset-bottom) + 20rpx);
            z-index: 999;
        }
    }
subPackage/workbench/views/report.vue
@@ -83,7 +83,7 @@
                    {
                        name: "已处理",
                        status: 3,
                        type: 'error'
                        type: 'success'
                    },
                ],
                typeList: [{
subPackage/workbench/views/reportAudit.vue
@@ -28,11 +28,7 @@
                <view class="text">审核信息</view>
            </view> -->
            <caption-row title="审核信息" />
            <view class="step">
                <view class="step-list " v-for="i in defaultData.taskRepairStepList"
                    v-if="defaultData.taskRepairStepList.length">
@@ -79,7 +75,7 @@
            <view class="f-28">视频</view>
            <view class="mt-20">
                <u-upload :fileList="form.videoList" :previewFullImage="uploadConfig.previewFullImage"
                    :accept="uploadConfig.acceptImg" :multiple="uploadConfig.multiple"
                    :accept="uploadConfig.acceptVideo" :multiple="uploadConfig.multiple"
                    :maxCount="confirmFlag == 3 && form.videoList.length?form.videoList.length:uploadConfig.maxCount"
                    :capture="uploadConfig.capture" :deletable="confirmFlag == 3 && form.videoList.length?false:true"
                    @afterRead="afterReadImg($event,'videoList')" @delete="deletePics($event,'videoList')">
@@ -106,7 +102,7 @@
            @confirm="handleConfirm"></u-picker>
        <u-picker :defaultIndex="peopleIndex" :closeOnClickOverlay="true" @close="isShowPeoplePicker = false"
            :show="isShowPeoplePicker" ref="pPicker" :columns="peopleList" keyName="distictName"
            :show="isShowPeoplePicker" ref="pPicker" :columns="peopleList" keyName="name"
            @cancel="isShowPeoplePicker = false" @confirm="handlePeopleConfirm" @change="changePeople"></u-picker>
@@ -158,6 +154,11 @@
                    {
                        label: '事件描述',
                        name: 'remark',
                        value: '未完善'
                    },
                    {
                        label: '提交时间',
                        name: 'createTime',
                        value: '未完善'
                    }
                ],
@@ -214,11 +215,11 @@
                from: "list",
                peopleList: [
                    [{
                            distictName: "网格员",
                            name: "网格员",
                            type: 0
                        },
                        {
                            distictName: "物业人员",
                            name: "物业人员",
                            type: 2
                        }
                    ],
@@ -433,7 +434,7 @@
                let data = {
                    addressCode: this.defaultData.addressCode,
                    confirmFlag: 1,
                    content: `事件已移交至${value[0].distictName}${value[1].distictName}`,
                    content: `事件已移交至${value[0].name}${value[1].name}`,
                    peopleType: 1,
                    repairId: this.defaultData.id,
                    transferUserId: value[1].id
subPackage/workbench/views/workLog.vue
@@ -3,17 +3,45 @@
        <view class="content bgc-ff">
            <u-form labelPosition="left" :model="info" :rules="rules" ref="form" labelWidth="90"
                :labelStyle="{fontSize:'28rpx'}">
                <u-form-item label="姓名" prop="info.name" borderBottom required>
                <u-form-item label="走访类型" prop="type" :borderBottom="false" required @click="isShowTypePicker = true">
                    <u-input v-model="typeName" 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>
                <u-form-item label="重点人群类型" prop="peopleType" :borderBottom="false" required
                    @click="isShowLabelPicker = true" v-if="info.type == 2">
                    <u-input v-model="labelName" 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>
                <u-form-item label="被访人姓名" prop="name" :borderBottom="false" required @click="isShowPopup = true">
                    <u-input v-model="selectedHousehold.name" 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>
                <u-form-item label="手机号" borderBottom required v-if="info.householdId">
                    <u-input v-model="selectedHousehold.phoneNumber" border="none" disabled disabledColor="#f5f5f5"
                        placeholderClass="f-28 c-99" inputAlign="right"></u-input>
                </u-form-item>
                <u-form-item label="走访地址" borderBottom required v-if="info.householdId">
                    <!-- <u-input v-model="address" border="none" disabled disabledColor="#f5f5f5"
                        placeholderClass="f-28 c-99" inputAlign="right"></u-input> -->
                    <view class="address-content">
                        {{address}}
                    </view>
                </u-form-item>
                <!-- <u-form-item label="姓名" prop="info.name" borderBottom required>
                    <u-input v-model="info.name" border="none" placeholder="请输入" placeholderClass="f-28 c-99"
                        inputAlign="right"></u-input>
                </u-form-item>
                <u-form-item label="手机号" prop="phone" borderBottom  required>
                    <u-input v-model="info.phone" border="none" placeholder="请输入手机号"   placeholderClass="f-28 c-99"
                <u-form-item label="手机号" prop="phone" borderBottom required>
                    <u-input v-model="info.phone" border="none" placeholder="请输入手机号" placeholderClass="f-28 c-99"
                        inputAlign="right"></u-input>
                </u-form-item>
                <u-form-item label="内容" borderBottom  required>
                    <u-input type="textarea" v-model="info.context" border="none"  placeholderClass="f-28 c-99"
                        inputAlign="right"  placeholder="请输入内容">
                </u-form-item> -->
                <u-form-item label="内容" borderBottom required>
                    <u-input type="textarea" v-model="info.context" border="none" placeholderClass="f-28 c-99"
                        inputAlign="right" placeholder="请输入内容">
                    </u-input>
                </u-form-item>
                <u-form-item label="走访时间" prop="workTime" :borderBottom="false" required @click="showSelectDate = true">
@@ -43,11 +71,42 @@
        </view>
        <u-datetime-picker ref="datetimePicker" :show="showSelectDate" v-model="workTime" mode="datetime"
            :formatter="formatter" @confirm="confirmDate" @cancel="isShowPicker = false"></u-datetime-picker>
        <!-- <u-picker :show="isShowPicker" :columns="scStatus" :defaultIndex="houseIndex" @cancel="isShowPicker = false"
            @confirm="confirmHouse()"></u-picker> -->
         <footer-btn  @click="submitInfo"   />
            :formatter="formatter" @confirm="confirmDate" @cancel="showSelectDate = false"></u-datetime-picker>
        <u-picker :show="isShowTypePicker" :columns="typeList" :defaultIndex="typeIndex"
            @cancel="isShowTypePicker = false" @confirm="confirmType()" keyName="dictValue"></u-picker>
        <u-picker :show="isShowLabelPicker" :columns="labelList" :defaultIndex="labelIndex"
            @cancel="isShowLabelPicker = false" @confirm="confirmLabelType()" keyName="name"></u-picker>
        <footer-btn @click="submitInfo" />
        <u-popup :show="isShowPopup" mode="bottom" :round="10" closeable="true" @close="isShowPopup = false">
            <view class="popup-content">
                <view class="popup-title f-30">
                    选择居民
                </view>
                <u-search placeholder="请输入要搜索的内容(姓名 手机号)" :showAction="true" actionText="搜索" :animation="true"
                    v-model="keyword" @search="searchHousehold" @custom="searchHousehold"
                    @clear="clearKeyword"></u-search>
                <scroll-view class="popup-list" :scroll-y="true">
                    <view class="popup-list-item" v-for="(i,k) in houseHoldList" :key="k" @click="selectHousehold(i)">
                        <view class="flex a-i-c mb-10">
                            <text class="f-28 fw mr-20">{{i.name}}</text>
                            <text class="f-26" v-if="i.phoneNumber">{{i.phoneNumber}}</text>
                        </view>
                        <view class="f-28">
                            {{i.townStreetName}}{{i.neiName}}{{i.aoiName}}{{i.address || ""}}
                        </view>
                        <view class="check-icon" v-if="i.id == info.householdId">
                            <u-icon name="checkbox-mark" color="#017BFC" size="30"></u-icon>
                        </view>
                    </view>
                </scroll-view>
            </view>
        </u-popup>
    </view>
</template>
@@ -57,6 +116,15 @@
        addWorkLog
    } from "@/api/workLog/workLog.js"
    import uploadMixin from "@/mixin/uploadMixin";
    import {
        bizDictionary
    } from '@/api/system/dict.js'
    import {
        getLabelListByParentId
    } from "@/api/label/label.js";
    import {
        fetchHousehold
    } from "@/api/house/household.js"
    export default {
        mixins: [uploadMixin],
        data() {
@@ -70,16 +138,29 @@
                    context: ""
                },
                rules: {
                    'name': {
                    // 'name': {
                    //     type: 'string',
                    //     required: true,
                    //     message: '请输入姓名',
                    //     trigger: ['blur', 'change']
                    // },
                    // 'phone': {
                    //     type: 'string',
                    //     required: true,
                    //     message: '请输入手机号',
                    //     trigger: ['blur', 'change']
                    // },
                    'type': {
                        type: 'string',
                        required: true,
                        message: '请输入姓名',
                        message: '请选择走访类型',
                        trigger: ['blur', 'change']
                    },
                    'phone': {
                    'householdId': {
                        type: 'string',
                        required: true,
                        message: '请输入手机号',
                        message: '请选择被访问人',
                        trigger: ['blur', 'change']
                    },
                    'context': {
@@ -92,7 +173,20 @@
                showSelectDate: false,
                workTime: Number(new Date()),
                isShowPicker: false,
                houseIndex: [0]
                houseIndex: [0],
                typeList: [],
                typeName: "",
                typeIndex: [0],
                isShowTypePicker: false,
                isShowLabelPicker: false,
                labelList: [],
                labelIndex: [0],
                labelName: "",
                keyword: "",
                houseHoldList: [],
                selectedHousehold: {},
                isShowPopup: false,
                address: ""
            }
        },
        // onLoad() {
@@ -100,7 +194,42 @@
        //     this.$set(this.info, "name", userInfo.real_name);
        //     this.$set(this.info, "phone", userInfo.phone);
        // },
        onLoad() {
            this.getTypeList();
            this.getLabelLit();
        },
        methods: {
            getTypeList() {
                bizDictionary({
                    code: "haveType"
                }).then(res => {
                    console.log(res)
                    this.typeList = [res.data];
                })
            },
            getLabelLit() {
                getLabelListByParentId({
                    parentId: 100
                }).then(res => {
                    this.labelList = [res.data];
                })
            },
            getHouseholdList() {
                fetchHousehold({
                    labelId: this.info.personType,
                    searchKey: this.keyword,
                    limit: 20
                }).then(res => {
                    this.houseHoldList = res.data;
                })
            },
            confirmDate(e) {
                this.showSelectDate = false;
@@ -111,6 +240,48 @@
                this.houseIndex = e.indexs;
                this.info.houseCode = e.value[0];
                this.isShowPicker = false;
            },
            //选择走访类型
            confirmType(e) {
                console.log("type==>", e);
                this.typeIndex = e.indexs;
                this.info.type = e.value[0].dictKey;
                this.typeName = e.value[0].dictValue;
                if (e.value[0].dictKey == 1) {
                    this.info.personType = "";
                    this.keyword = "";
                    this.getHouseholdList();
                }
                this.isShowTypePicker = false;
            },
            //选择重点人群类型
            confirmLabelType(e) {
                this.labelIndex = e.indexs;
                this.info.personType = e.value[0].id;
                this.labelName = e.value[0].name;
                this.isShowLabelPicker = false;
                this.getHouseholdList();
            },
            //搜索住户
            searchHousehold() {
                this.getHouseholdList()
            },
            clearKeyword() {
                this.keyword = "";
                this.getHouseholdList()
            },
            //选择住户
            selectHousehold(item) {
                this.selectedHousehold = item;
                this.info.householdId = item.id;
                this.address = `${item.townStreetName}${item.neiName}${item.aoiName}${item.address || ""}`
                this.isShowPopup = false;
            },
            checkImages() {
@@ -203,4 +374,39 @@
            font-size: 32rpx;
        }
    }
    .popup-content {
        width: 100%;
        padding: 0 30rpx 30rpx;
        box-sizing: border-box;
        .popup-title {
            padding: 30rpx 0;
            text-align: center;
            font-weight: bold;
        }
        .popup-list {
            height: 650rpx;
        }
        .popup-list-item {
            padding: 20rpx 0;
            border-bottom: 1px solid #f1f1f1;
            position: relative;
        }
        .check-icon {
            position: absolute;
            right: 20rpx;
            top: 20rpx;
        }
    }
    .address-content {
        flex: 1;
        background-color: #F5F5F5;
        font-size: 28rpx;
        padding: 2rpx 10rpx;
    }
</style>