From d16d10d94fddff86bdfd87113e7fd2cebe8b7cd7 Mon Sep 17 00:00:00 2001
From: shuishen <1109946754@qq.com>
Date: Wed, 24 Jan 2024 18:15:06 +0800
Subject: [PATCH] 居民监管样式调整

---
 src/views/userHouse/houseList.vue |  421 +++++++++++++++++++++++++++++++++++++++++++---------
 1 files changed, 345 insertions(+), 76 deletions(-)

diff --git a/src/views/userHouse/houseList.vue b/src/views/userHouse/houseList.vue
index df8ddf2..0ddc5df 100644
--- a/src/views/userHouse/houseList.vue
+++ b/src/views/userHouse/houseList.vue
@@ -8,36 +8,39 @@
                     @search-reset="searchReset" @selection-change="selectionChange" @current-change="currentChange"
                     @size-change="sizeChange" @refresh-change="refreshChange" @on-load="onLoad">
                     <template slot="menuLeft">
-                        <el-button type="danger" size="small" plain icon="el-icon-delete" v-if="permission.user_delete"
+                        <el-button type="danger" size="small" plain icon="el-icon-delete" v-if="permission.house_del"
                             @click="handleDelete">删 除
                         </el-button>
-                        <el-button type="success" size="small" plain v-if="userInfo.role_name.includes('admin')"
+                        <!-- <el-button type="success" size="small" plain v-if="userInfo.role_name.includes('admin')"
                             icon="el-icon-upload2" @click="handleImport">导入
                         </el-button>
                         <el-button type="warning" size="small" plain v-if="userInfo.role_name.includes('admin')"
                             icon="el-icon-download" @click="handleExport">导出
-                        </el-button>
+                        </el-button> -->
+                        <!-- <el-button type="success" size="small" plain v-if="permission.house_import" icon="el-icon-upload2"
+                            @click="handleImport">导入
+                        </el-button> -->
+                        <!-- <el-button type="warning" size="small" plain v-if="permission.house_export" icon="el-icon-download"
+                            @click="handleExport">导出
+                        </el-button> -->
                     </template>
-                    <template slot-scope="scope" slot="menu">
-                        <el-button type="text" icon="el-icon-circle-plus-outline" size="small"
-                            v-if="permission.househould_manager" @click="handleHouseholdManager(scope.row)">住户管理
+                    <template slot-scope="{row}" slot="location">
+                        <span v-text="showLocation(row.location)"></span>
+                    </template>
+
+                    <template slot-scope="{row, size}" slot="menu">
+                        <el-button :size="size" type="text" icon="el-icon-circle-plus-outline"
+                            v-if="permission.house_manager" @click="handleHouseholdManager(row)">住户管理
                         </el-button>
-                        <el-button type="text" icon="el-icon-circle-plus-outline" size="small"
-                            v-if="permission.househould_manager" @click="manageLabel(scope.row)">标签
+                        <el-button :size="size" type="text" icon="el-icon-circle-plus-outline" v-if="permission.house_tag"
+                            @click="manageLabel(row)">标签
                         </el-button>
                     </template>
 
-                    <template slot-scope="{row}" slot="tenantName">
-                        <el-tag>{{ row.tenantName }}</el-tag>
-                    </template>
-                    <template slot-scope="{row}" slot="roleName">
-                        <el-tag>{{ row.roleName }}</el-tag>
-                    </template>
-                    <template slot-scope="{row}" slot="deptName">
-                        <el-tag>{{ row.deptName }}</el-tag>
-                    </template>
-                    <template slot-scope="{row}" slot="userTypeName">
-                        <el-tag>{{ row.userTypeName }}</el-tag>
+                    <template slot-scope="{row, size}" slot="phone">
+                        <el-button :size="size" type="text" @click="showStringDispose(row, 'phoneflag')">
+                            {{ textDispose(row, 'phoneflag', 'phone') }}
+                        </el-button>
                     </template>
 
                     <template slot-scope="{row}" slot="userHouseLabelVOList">
@@ -51,15 +54,15 @@
                     </el-tree>
 
                     <span slot="footer" class="dialog-footer">
-                        <el-button @click="roleBox = false">取 消</el-button>
-                        <el-button type="primary" @click="submitRole">确 定</el-button>
+                        <el-button size="small" @click="roleBox = false">取 消</el-button>
+                        <el-button size="small" type="primary" @click="submitRole">确 定</el-button>
                     </span>
                 </el-dialog>
 
                 <el-dialog title="标签管理" append-to-body :visible.sync="labelFlag" center width="600px">
                     <div id="" class="grid-container2">
-                        <div class="grid-item" :style="{ backgroundColor: item.color }" v-for="(item, index) in labelData "
-                            @click="changLabel(item)">
+                        <div class="grid-item" v-for="(item, index) in labelData" :key="index" @click="changLabel(item)">
+                            {{ item.color }}
                             {{ item.name }}
                         </div>
                     </div>
@@ -74,8 +77,8 @@
                     <avue-form :option="labelOption" v-model="labelForm" :submit="onsubmit">
                     </avue-form>
                     <span slot="footer" class="dialog-footer">
-                        <el-button @click="editLabelFlge = false">取 消</el-button>
-                        <el-button type="primary" @click="onsubmit">确 定</el-button>
+                        <el-button size="small" @click="editLabelFlge = false">取 消</el-button>
+                        <el-button size="small" type="primary" @click="onsubmit">确 定</el-button>
                     </span>
                 </el-dialog>
 
@@ -88,6 +91,7 @@
                         </template>
                     </avue-form>
                 </el-dialog>
+
                 <el-dialog title="住户管理" append-to-body :visible.sync="householdManagerVisible" width="70%" height="60%">
                     <householdManager ref="householdManager" />
                 </el-dialog>
@@ -95,8 +99,10 @@
         </el-col>
     </el-row>
 </template>
-
+ 
 <script>
+import { setLabelColor } from '@/util/util'
+
 import {
     getList,
     remove,
@@ -130,7 +136,6 @@
 } from "@/util/date"
 import NProgress from 'nprogress'
 import 'nprogress/nprogress.css'
-import func from "@/util/func"
 import householdManager from "./components/householdManager"
 import Qs from "qs"
 export default {
@@ -138,6 +143,19 @@
         householdManager
     },
     data () {
+
+        //手机号格式校验
+        let validatorPhone = function (rule, value, callback) {
+            if (value) {
+                if (!/^1[3456789]\d{9}$/.test(value)) {
+                    callback(new Error('手机号格式有误!'))
+                } else {
+                    callback()
+                }
+            }
+            callback()
+        }
+
         return {
             labelData: [],
             labelForm: {},
@@ -154,16 +172,16 @@
                     row: true,
                     dicData: [{
                         label: '撤销',
-                        value: '#EBEDF0'
+                        value: '#999'
                     }, {
                         label: '绿',
-                        value: '#30D17C'
+                        value: 'green'
                     }, {
                         label: '黄',
-                        value: '#FFB42B'
+                        value: 'yellow'
                     }, {
                         label: '红',
-                        value: '#EA1F1F'
+                        value: 'red'
                     }],
                     rules: [{
                         required: true,
@@ -192,34 +210,22 @@
                 total: 0
             },
             option: {
+                labelWidth: 120,
+                searchLabelWidth: 96,
+                searchShow: true,
+                searchMenuSpan: 3,
+                menuWidth: 350,
+
                 height: 'auto',
                 calcHeight: 80,
                 tip: false,
-                searchShow: true,
-                searchMenuSpan: 6,
                 border: true,
                 index: true,
                 selection: true,
                 viewBtn: true,
                 dialogType: 'drawer',
                 dialogClickModal: false,
-                menuWidth: 340,
                 column: [
-                    {
-                        width: 96,
-                        label: "所属街道",
-                        prop: "townStreetName",
-                    },
-                    {
-                        width: 160,
-                        label: "所属社区",
-                        prop: "neiName",
-                    },
-                    {
-                        width: 96,
-                        label: "所属网格",
-                        prop: "gridName",
-                    },
                     {
                         label: "房屋编号",
                         prop: "houseCode",
@@ -228,45 +234,193 @@
                         display: false
                     },
                     {
-                        label: "地址",
+                        // hide: true, 
+                        width: 220,
+                        overHidden: true,
+                        label: '地址',
+                        parent: false,
                         prop: "address",
-                        width: 180,
-                        display: false
-                    },
-                    {
-                        width: 132,
-                        label: "小区",
-                        prop: "districtName",
+                        display: false,
+                        searchLabelWidth: 66,
+                        searchSpan: 4,
                         search: true,
-                        rules: [{
-                            required: true,
-                            message: "请选择小区",
-                            trigger: "blur",
-                        },],
                     },
                     {
-                        label: "手机",
-                        prop: "phone",
+                        overHidden: true,
+                        slot: true,
+                        label: "地址",
+                        prop: "location",
+                        type: 'map',
+                        disabled: false,
+                        dataType: "string",
+                        searchLabelWidth: 66,
+                        hide: true,
+                        value: [117.966460, 28.431002, ""],
+                        rules: [
+                            {
+                                required: true,
+                                message: "请选择巡查地址",
+                                trigger: "blur",
+                            },
+                        ],
+                    },
+
+                    {
+                        hide: true,
+                        parent: false,
+                        label: "小区名称",
+                        prop: "districtCode",
+                        type: 'tree',
+                        dicUrl: `/api/blade-district/district/getDistrictTree`,
+                        props: {
+                            label: "name",
+                            value: "id"
+                        },
+                        defaultExpandedKeys: ["361102003"],
+                        span: 12,
+                        width: 220,
+                        overHidden: true,
+                    },
+
+                    {
+                        width: 220,
+                        overHidden: true,
+                        label: '小区名称',
+                        parent: false,
+                        prop: "districtName",
+                        searchSpan: 4,
+                        display: false,
+                        search: true,
+                    },
+
+                    {
+                        width: 110,
+                        label: "所属街道",
+                        addDisplay: false,
+                        editDisplay: false,
+                        viewDisplay: false,
+                        prop: "townStreetName",
+                        search: true,
+                        searchSpan: 4
+                    },
+
+                    {
+                        width: 156,
+                        overHidden: true,
+                        label: "所属社区",
+                        addDisplay: false,
+                        editDisplay: false,
+                        viewDisplay: false,
+                        prop: "neiName",
+                        search: true,
+                        searchSpan: 4,
                         rules: [{
                             required: true,
-                            message: "请输入绑定手机",
+                            message: "请选择所属社区",
                             trigger: "blur",
-                        },],
+                        }],
                     },
+
+                    {
+                        hide: true,
+                        parent: false,
+                        label: "所属社区",
+                        prop: "neiCode",
+                        search: false,
+                        type: "tree",
+                        dicUrl: "/api/blade-system/region/tree",
+                        props: {
+                            label: "name",
+                            value: "id",
+                        },
+                        cascader: ["gridCode"],
+                        rules: [
+                            {
+                                required: true,
+                                message: "请选择所属社区",
+                                trigger: "blur",
+                            },
+                        ],
+                    },
+
+                    {
+                        width: 110,
+                        overHidden: true,
+                        label: "所属网格",
+                        addDisplay: false,
+                        editDisplay: false,
+                        viewDisplay: false,
+                        prop: "gridName",
+                        rules: [{
+                            required: true,
+                            message: "请选择所属网格",
+                            trigger: "blur",
+                        }],
+                    },
+
+                    {
+                        hide: true,
+                        label: "所属网格",
+                        prop: "gridCode",
+                        type: "tree",
+                        cell: true,
+                        props: {
+                            label: "gridName",
+                            value: "gridCode",
+                        },
+                        dicUrl:
+                            "/api/blade-grid/grid/getGridList?communityCode={{neiCode}}",
+                        rules: [
+                            {
+                                required: true,
+                                message: "请选择所属网格",
+                                trigger: "blur",
+                            },
+                        ],
+                    },
+
+                    {
+                        label: "房屋照片",
+                        prop: "imageUrls",
+                        width: 110,
+                        type: "upload",
+                        listType: "picture-card",
+                        dataType: "string",
+                        multiple: true,
+                        action: "/api/blade-resource/oss/endpoint/put-file",
+                        propsHttp: {
+                            res: "data",
+                            name: 'name',
+                            url: "link",
+                        },
+                        span: 24,
+                    },
+
+
+                    {
+                        width: 120,
+                        label: "电话",
+                        prop: "phone",
+                        slot: true,
+                        rules: [
+                            {
+                                validator: validatorPhone,
+                                trigger: 'blur'
+                            }
+                        ],
+                    },
+
                     {
                         label: "幢",
                         prop: "building",
-                        hide: true
                     },
                     {
                         label: "单元",
                         prop: "unit",
-                        hide: true
                     },
                     {
                         label: "室",
                         prop: "room",
-                        hide: true
                     },
                     {
                         label: "楼层",
@@ -297,6 +451,7 @@
                     },
                     {
                         width: 210,
+                        overHidden: true,
                         label: "标签",
                         prop: "userHouseLabelVOList",
                         display: false
@@ -354,15 +509,56 @@
             }
         }
     },
-    watch: {},
+    watch: {
+        'form.source': {
+            handler (newData) {
+
+                let locationColumn = this.findObject(
+                    this.option.column,
+                    'location'
+                )
+
+                if (newData == 1) {
+                    locationColumn.disabled = true
+                } else {
+                    locationColumn.disabled = false
+                }
+            },
+        },
+    },
     computed: {
         ...mapGetters(["userInfo", "permission"]),
         permissionList () {
             return {
                 addBtn: this.vaildData(this.permission.house_add, true),
                 viewBtn: this.vaildData(this.permission.house_view, true),
-                delBtn: this.vaildData(this.permission.house_delete, true),
+                delBtn: this.vaildData(this.permission.house_del, true),
                 editBtn: this.vaildData(this.permission.house_edit, true)
+            }
+        },
+
+        textDispose () {
+            return (row, flag, type) => {
+                if (row[flag] || row[type] == null) {
+                    return row[type]
+                } else {
+                    if (type == 'idCard') {
+                        return row[type].replace(/^(.{6})(?:\d+)(.{4})$/, "$1******$2")
+                    } else {
+                        return row[type].replace(/^(.{3})(?:\d+)(.{4})$/, "$1****$2")
+                    }
+                }
+            }
+        },
+        showLocation () {
+            return (data) => {
+                if (data != null && data.indexOf(',') != -1) {
+                    data = data.split(',')
+
+                    return data[2]
+                } else {
+                    return data || ''
+                }
             }
         },
 
@@ -370,10 +566,25 @@
             return (list) => {
                 return list.map(item => item.labelName).join(',')
             }
+        },
+
+        getColor () {
+            return (data) => {
+                return setLabelColor(data)
+            }
         }
     },
     mounted () { },
     methods: {
+        locationDispose (data) {
+            data = data.split(',')
+
+            return {
+                lng: data[0],
+                lat: data[1],
+                address: data[2]
+            }
+        },
 
         onsubmit () {
             if (this.labelForm.color === '#EBEDF0') {
@@ -414,6 +625,7 @@
             this.labelForm.remark = item.remark
         },
         manageLabel (item) {
+            this.loading = true
             this.currentRow = item
             this.labelFlag = true
             let params = {
@@ -422,7 +634,6 @@
             // 查询标签
             getLabelList(Object.assign(params)).then(res => {
                 const data = res.data.data
-                this.loading = false
                 // 查询详情
                 getDetatils({
                     houseCode: item.houseCode
@@ -443,6 +654,7 @@
                         })
                     }
                     this.labelData = data
+                    this.loading = false
                 })
             })
         },
@@ -454,7 +666,18 @@
             })
         },
         rowSave (row, done, loading) {
-            add(row).then(() => {
+            if (row.imageUrls.length > 0) {
+                var urls = []
+                var split = row.imageUrls.split(",")
+                split.forEach(url => {
+                    var names = url.split("jczz/")
+                    urls.push(names[1])
+                })
+                row.imageUrls = urls.join(",")
+            }
+
+            add({ ...row, ...this.locationDispose(row.location) }
+            ).then(() => {
                 this.initFlag = false
                 this.onLoad(this.page)
                 this.$message({
@@ -468,7 +691,17 @@
             })
         },
         rowUpdate (row, index, done, loading) {
-            update(row).then(() => {
+            if (row.imageUrls.length > 0) {
+                var urls = []
+                var split = row.imageUrls.split(",")
+                split.forEach(url => {
+                    var names = url.split("jczz/")
+                    urls.push(names[1])
+                })
+                row.imageUrls = urls.join(",")
+            }
+
+            update({ ...row, ...this.locationDispose(row.location) }).then(() => {
                 this.initFlag = false
                 this.onLoad(this.page)
                 this.$message({
@@ -577,6 +810,19 @@
                     id: this.form.id
                 }).then(res => {
                     this.form = res.data.data
+
+                    this.form.location = [this.form.lng, this.form.lat, this.form.address].join(',')
+
+                    if (this.form.imageUrls) {
+                        if (this.form.imageUrls.length > 0) {
+                            var urls = []
+                            var names = this.form.imageUrls.split(",")
+                            names.forEach(name => {
+                                urls.push(website.minioUrl + name)
+                            })
+                            this.form.imageUrls = urls.join(",")
+                        }
+                    }
                 })
             }
             this.initFlag = true
@@ -593,18 +839,41 @@
         },
         onLoad (page, params = {}) {
             this.loading = true
+
             getList(page.currentPage, page.pageSize, Object.assign(params, this.query)).then(res => {
-                const data = res.data.data
+                const data = {
+                    ...res.data.data,
+                    records: res.data.data.records.map(item => {
+                        if (item.imageUrls) {
+                            if (item.imageUrls.length > 0) {
+                                var urls = []
+                                var names = item.imageUrls.split(",")
+                                names.forEach(name => {
+                                    urls.push(website.minioUrl + name)
+                                })
+                                item.imageUrls = urls.join(",")
+                            }
+                        }
+
+                        return {
+                            ...item,
+                            'phoneflag': false,
+                        }
+                    })
+                }
                 this.page.total = data.total
                 this.data = data.records
                 this.loading = false
                 this.selectionClear()
             })
+        },
+        showStringDispose (row, type) {
+            row[type] = !row[type]
         }
     }
 }
 </script>
-
+ 
 <style>
 .box {
     height: 800px;

--
Gitblit v1.9.3