linwe
2023-12-28 eca403e764d507646c7a3bac530b6b5fb6c75308
Merge remote-tracking branch 'origin/master'
17 files modified
2 files added
1708 ■■■■ changed files
src/api/place/place.js 2 ●●● patch | view | raw | blame | history
src/api/userHouse/list/houseHold.js 4 ●●●● patch | view | raw | blame | history
src/main.js 1 ●●●● patch | view | raw | blame | history
src/styles/avue-ui.scss 34 ●●●●● patch | view | raw | blame | history
src/views/article/rotation.vue 52 ●●●●● patch | view | raw | blame | history
src/views/base/region.vue 4 ●●●● patch | view | raw | blame | history
src/views/cGovernance/taskECall.vue 24 ●●●● patch | view | raw | blame | history
src/views/community/index.vue 21 ●●●● patch | view | raw | blame | history
src/views/district/index.vue 11 ●●●●● patch | view | raw | blame | history
src/views/grid/gridman.vue 63 ●●●● patch | view | raw | blame | history
src/views/grid/index.vue 23 ●●●● patch | view | raw | blame | history
src/views/place/components/baseAllInfo.vue 516 ●●●●● patch | view | raw | blame | history
src/views/place/components/boxTitle.vue 474 ●●●●● patch | view | raw | blame | history
src/views/place/index.vue 387 ●●●● patch | view | raw | blame | history
src/views/property/propertyCapitalApply.vue 30 ●●●● patch | view | raw | blame | history
src/views/property/propertyCompanyDistrict.vue 47 ●●●● patch | view | raw | blame | history
src/views/system/dept.vue 2 ●●● patch | view | raw | blame | history
src/views/system/user.vue 7 ●●●●● patch | view | raw | blame | history
src/views/userHouse/houseList.vue 6 ●●●●● patch | view | raw | blame | history
src/api/place/place.js
@@ -62,7 +62,7 @@
export const update = (row) => {
  return request({
    url: "/api/blade-place/place/add",
    url: "/api/blade-place/place/addOrUpdate",
    method: "post",
    data: row,
  });
src/api/userHouse/list/houseHold.js
@@ -36,7 +36,7 @@
export const add = (row) => {
  return request({
    url: '/api/blade-household/household/submit',
    url: '/api/blade-household/household/saveOrUpdateHousehold',
    method: 'post',
    data: row
  })
@@ -44,7 +44,7 @@
export const update = (row) => {
  return request({
    url: '/api/blade-household/household/update',
    url: '/api/blade-household/household/saveOrUpdateHousehold',
    method: 'post',
    data: row
  })
src/main.js
@@ -52,6 +52,7 @@
Vue.use(window.WfDesignBase);
// 加载website
Vue.prototype.website = website;
Vue.prototype.$axios = axios;
iconData.forEach((item) => {
  loadStyle(item.url.replace("$key", item.icon));
src/styles/avue-ui.scss
@@ -3,4 +3,38 @@
        color: #777 !important;
        cursor: not-allowed;
    }
}
.place-info-box {
    .el-dialog {
        display: flex;
        flex-direction: column;
        height: 72% !important;
        .el-dialog__header {
            padding-top: 10px !important;
            padding-bottom: 10px !important;
            .el-dialog__headerbtn {
                top: 10px !important;
            }
        }
        .el-dialog__body {
            padding: 0px !important;
            padding-bottom: 10px !important;
            height: 0 !important;
            flex: 1;
            .el-tabs {
                display: flex;
                flex-direction: column;
                height: 100% !important;
                .el-tabs__content {
                    flex: 1;
                }
            }
        }
    }
}
src/views/article/rotation.vue
@@ -57,11 +57,49 @@
                        search: true,
                    },
                    {
                        label: "跳转地址",
                        prop: "junpUrl",
                        label: "类型",
                        prop: "type",
                        span: 12,
                        searchSpan: 4,
                        search: true,
                        type:"select",
                        dicData:[
                            {
                                label:"系统",
                                value:"1"
                            },
                            {
                                label:"社区",
                                value:"2"
                            }
                        ]
                    },
                    {
                        parent: false,
                        label: "所属社区",
                        prop: "communityCode",
                        search: true,
                        searchSpan: 4,
                        searchType: 'input',
                        width: 150,
                        type: "tree",
                        dicUrl: "/api/blade-system/region/tree",
                        props: {
                            label: "name",
                            value: "id"
                        },
                        rules: [
                            {
                                required: true,
                                message: "请选择所属社区",
                                trigger: "blur",
                            },
                        ],
                    },
                    {
                        label: "跳转地址",
                        prop: "junpUrl",
                        span: 12,
                    },
                    {
                        label: "图片",
@@ -246,7 +284,7 @@
            this.onLoad(this.page, this.query)
        },
        onLoad (page, params = {}) {
            const { dateTime } = this.query
            const { dateTime, communityCode } = this.query
            let values = {
                ...params,
            }
@@ -259,6 +297,14 @@
                }
                values.dateTime = null
            }
            if (communityCode) {
                values = {
                    ...values,
                    communityName: communityCode
                }
                delete values.communityCode
            }
            this.loading = true
            getList(page.currentPage, page.pageSize, values).then((res) => {
                const data = res.data.data
src/views/base/region.vue
@@ -64,7 +64,7 @@
  export default {
    data() {
      return {
        topCode: '36',
        topCode: '361102',
        treeCode: '',
        treeParentCode: '',
        treeData: [],
@@ -72,7 +72,7 @@
          nodeKey: 'id',
          lazy: true,
          treeLoad: function (node, resolve) {
            const parentCode = (node.level === 0) ? "36" : node.data.id;
            const parentCode = (node.level === 0) ? "361102" : node.data.id;
            getLazyTree(parentCode).then(res => {
              resolve(res.data.data.map(item => {
                return {
src/views/cGovernance/taskECall.vue
@@ -93,18 +93,35 @@
                    },],
                    // search: true,
                },
                {
                    addDisplay: false,
                    editDisplay: false,
                    viewDisplay: false,
                    width: 160,
                    label: "所属社区",
                    prop: "communityName",
                    search: true,
                    searchSpan: 4,
                    rules: [{
                        required: true,
                        message: "请选择所属社区",
                        trigger: "blur",
                    }],
                },
                {
                    hide: true,
                    parent: false,
                    label: "所属社区",
                    prop: "communityCode",
                    search: true,
                    searchSpan: 4,
                    search: false,
                    width: 150,
                    type: "tree",
                    dicUrl: "/api/blade-system/region/tree",
                    props: {
                        label: "name",
                        value: "id"
                        value: "id",
                    },
                    rules: [
                        {
@@ -114,6 +131,7 @@
                        },
                    ],
                },
                {
                    label: "数据来源",
                    prop: "source",
src/views/community/index.vue
@@ -80,13 +80,25 @@
                            },
                        ],
                    },
                    {
                        parent: false,
                        addDisplay: false,
                        editDisplay: false,
                        viewDisplay: false,
                        width: 96,
                        label: "所属街道",
                        prop: "townName",
                        search: true,
                        searchSpan: 4
                    },
                    {
                        hide: true,
                        parent: false,
                        label: "所属街道",
                        prop: "streetCode",
                        search: true,
                        searchSpan: 4,
                        width: 150,
                        labelWidth: 120,
                        type: "tree",
                        dicUrl: "/api/blade-system/region/getTownTree",
                        props: {
@@ -101,6 +113,7 @@
                            },
                        ],
                    },
                    {
                        label: "社区民警",
                        prop: "resPoliceUserId",
@@ -163,7 +176,7 @@
                        minRows: 6,
                        span: 24,
                    },
                ],
            },
            data: [],
src/views/district/index.vue
@@ -47,26 +47,17 @@
                dialogClickModal: false,
                column: [
                    {
                        parent: false,
                        label: "小区名称",
                        prop: "name",
                        searchSpan: 4,
                        search: true,
                        type: 'tree',
                        dicUrl: `/api/blade-district/district/getDistrictTree`,
                        props: {
                            label: "name",
                            value: "id"
                        },
                        defaultExpandedKeys: ["361102003"],
                        span: 12,
                        labelWidth: 120,
                        width: 220,
                        overHidden: true,
                        rules: [
                            {
                                required: true,
                                message: "请选择小区",
                                message: "请输入小区名称",
                                trigger: "blur",
                            },
                        ],
src/views/grid/gridman.vue
@@ -47,12 +47,41 @@
                dialogClickModal: false,
                column: [
                    {
                        label: "网格员",
                        prop: "gridmanName",
                        searchSpan: 4,
                        search: true,
                        rules: [
                            {
                                required: true,
                                message: "请输入网格员",
                                trigger: "blur",
                            },
                        ],
                    },
                    {
                        addDisplay: false,
                        editDisplay: false,
                        viewDisplay: false,
                        label: "所属社区",
                        prop: "communityName",
                        search: true,
                        searchSpan: 4,
                        rules: [{
                            required: true,
                            message: "请选择所属社区",
                            trigger: "blur",
                        }],
                    },
                    {
                        hide: true,
                        parent: false,
                        label: "所属社区",
                        prop: "communityCode",
                        search: true,
                        searchSpan: 4,
                        width: 150,
                        search: false,
                        type: "tree",
                        dicUrl: "/api/blade-system/region/tree",
                        props: {
@@ -70,7 +99,20 @@
                    },
                    {
                        label: "网格名称",
                        addDisplay: false,
                        editDisplay: false,
                        viewDisplay: false,
                        label: "所属网格",
                        prop: "gridName",
                        rules: [{
                            required: true,
                            message: "请选择所属网格",
                            trigger: "blur",
                        }],
                    },
                    {
                        label: "所属网格",
                        prop: "gridId",
                        hide: true,
                        type: "tree",
@@ -90,19 +132,6 @@
                        ],
                    },
                    {
                        label: "网格员",
                        prop: "gridmanName",
                        searchSpan: 4,
                        search: true,
                        rules: [
                            {
                                required: true,
                                message: "请输入网格员",
                                trigger: "blur",
                            },
                        ],
                    },
                    {
                        label: "联系电话",
                        prop: "mobile",
src/views/grid/index.vue
@@ -46,17 +46,33 @@
                dialogClickModal: false,
                column: [
                    {
                        addDisplay: false,
                        editDisplay: false,
                        viewDisplay: false,
                        width: 160,
                        label: "所属社区",
                        prop: "communityName",
                        search: true,
                        searchSpan: 4,
                        rules: [{
                            required: true,
                            message: "请选择所属社区",
                            trigger: "blur",
                        }],
                    },
                    {
                        hide: true,
                        parent: false,
                        label: "所属社区",
                        prop: "communityCode",
                        search: true,
                        searchSpan: 4,
                        search: false,
                        width: 150,
                        type: "tree",
                        dicUrl: "/api/blade-system/region/tree",
                        props: {
                            label: "name",
                            value: "id"
                            value: "id",
                        },
                        rules: [
                            {
@@ -66,6 +82,7 @@
                            },
                        ],
                    },
                    {
                        label: "网格名称",
                        prop: "gridName",
src/views/place/components/baseAllInfo.vue
New file
@@ -0,0 +1,516 @@
<template>
    <div class="cur-container-box">
        <div class="content-box">
            <box-title class="m10" :classVal="9" :title="'基本信息'"></box-title>
            <avue-form ref="baseForm" :option="option" v-model="form"></avue-form>
            <box-title class="m10" :classVal="9" :title="'其他信息'"></box-title>
            <avue-form ref="restForm" :option="optionDetail" v-model="placeForm"></avue-form>
            <box-title class="m10" :classVal="9" :title="'从业人员'"></box-title>
            <avue-crud :option="placeOption" :table-loading="loading" :data="placeExt" ref="crud" v-model="houseHoldForm"
                :permission="permissionList" @row-del="houseHoldRowDel" @row-update="houseHoldRowUpdate"
                @row-save="houseHoldRowSave" :page.sync="holdPage" @current-change="holdCurrentChange"
                @size-change="holdSizeChange" @refresh-change="refreshHoldChange" @on-load="holdOnLoad">
            </avue-crud>
        </div>
        <div class="footer-btn-box">
            <el-button size="small" type="primary" @click="dataUpdate">保 存</el-button>
            <el-button size="small" @click="closeRowDetails">关 闭</el-button>
        </div>
    </div>
</template>
<script>
import {
    getPlace,
    getPlaceExt,
    holdRemove,
    holdAdd,
    holdUpdate,
    getHoldList,
    update,
    updatePlaceExt,
} from "@/api/place/place"
import website from '@/config/website'
import boxTitle from './boxTitle'
export default {
    data () {
        return {
            placeExt: [],
            form: {},
            option: {
                submitBtn: false,
                emptyBtn: false,
                column: [
                    {
                        span: 8,
                        label: "场所名称",
                        prop: "placeName",
                        rules: [{
                            required: true,
                            message: "请输入场所名称",
                            trigger: "blur",
                        }],
                    },
                    {
                        span: 9,
                        label: "场所标签",
                        prop: "label",
                        type: "cascader",
                        dicUrl: "/api/blade-category/category/getCategory?level=2",
                        cascader: ["smallLabel"],
                        props: {
                            label: "categoryName",
                            value: "categoryNo"
                        },
                        dataType: "string",
                        hide: true,
                        rules: [{
                            required: true,
                            message: "请输入场所标签",
                            trigger: "blur",
                        },],
                    },
                    {
                        span: 7,
                        label: "",
                        labelWidth: 0,
                        prop: "smallLabel",
                        type: "cascader",
                        dicUrl: "/api/blade-category/category/getCategory?parentNo={{label}}",
                        props: {
                            label: "categoryName",
                            value: "categoryNo"
                        },
                        dataType: "string",
                        hide: true,
                    },
                    {
                        label: "负责人",
                        prop: "principal",
                        rules: [{
                            required: false,
                            message: "请输入负责人",
                            trigger: "blur",
                        }],
                    },
                    {
                        width: 110,
                        label: "电话",
                        prop: "principalPhone",
                        search: true,
                        searchSpan: 4,
                        slot: true,
                    },
                    {
                        hide: true,
                        parent: false,
                        label: "所属社区",
                        prop: "neiCode",
                        search: false,
                        width: 150,
                        type: "tree",
                        dicUrl: "/api/blade-system/region/tree",
                        props: {
                            label: "name",
                            value: "id",
                        },
                        cascader: ["gridId"],
                        rules: [
                            {
                                required: true,
                                message: "请选择所属社区",
                                trigger: "blur",
                            },
                        ],
                    },
                    {
                        hide: true,
                        label: "所属网格",
                        prop: "gridId",
                        type: "tree",
                        cell: true,
                        props: {
                            label: "gridName",
                            value: "id",
                        },
                        dicUrl:
                            "/api/blade-grid/grid/getGridList?communityCode={{neiCode}}",
                        rules: [
                            {
                                required: true,
                                message: "请选择所属网格",
                                trigger: "blur",
                            },
                        ],
                    },
                    {
                        label: "场所照片",
                        prop: "imageUrls",
                        width: 80,
                        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,
                    },
                    {
                        label: "场所位置",
                        prop: "localtion",
                        span: 24,
                        minWidth: 220,
                        overHidden: true,
                        // rules: [{
                        //     required: true,
                        //     message: "请输入区域",
                        //     trigger: "blur",
                        // },],
                    }
                ]
            },
            placeForm: {},
            optionDetail: {
                submitBtn: false,
                emptyBtn: false,
                column: [
                    {
                        label: '法人信息',
                        prop: 'legalPerson'
                    },
                    {
                        label: '法人电话',
                        prop: 'legalTel'
                    },
                    {
                        label: "营业执照",
                        prop: "imageUrls",
                        width: 80,
                        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,
                    },
                    {
                        label: "场所平面图",
                        prop: "planImageUrls",
                        width: 80,
                        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,
                    },
                ]
            },
            loading: true,
            placeOption: {
                menu: true,
                height: 300,
                calcHeight: 54,
                dialogWidth: 950,
                tip: false,
                searchShow: false,
                addBtn: true,
                delBtn: true,
                editBtn: true,
                border: true,
                index: true,
                dialogClickModal: false,
                column: [{
                    label: "名称",
                    prop: "name",
                    searchSpan: 4,
                    search: true,
                }, {
                    label: "电话",
                    prop: "telephone",
                    searchSpan: 4,
                    search: true,
                }, {
                    label: "暂住地",
                    prop: "tempAddress",
                    searchSpan: 4,
                    search: true,
                },]
            },
            holdPage: {
                pageSize: 20,
                currentPage: 1,
                total: 0,
            },
            houseHoldForm: {},
        }
    },
    components: { boxTitle },
    inject: ["placeElement"],
    watch: {
        'placeElement.curRow': {
            handler (newData) {
                const that = this
                if (newData && 'id' in newData && newData['id'] != null && newData['id'] != '') {
                    that.$axios.all([
                        getPlace(newData['id']),
                        getPlaceExt({ placeId: newData['id'] }),
                    ]).then(that.$axios.spread(function (baseInfo, restInfo) {
                        that.form = baseInfo.data.data
                        if (that.form.imageUrls && that.form.imageUrls.length) {
                            that.form.imageUrls = that.form.imageUrls.split(",").filter(item => item != '').map(item => website.minioUrl + item).join(',')
                        }
                        if (that.form.placePoiLabelVOList && that.form.placePoiLabelVOList.length) {
                            let lebelTwo = that.form.placePoiLabelVOList.find(item => {
                                return item.type == 2
                            })
                            if (lebelTwo) that.form.label = String(lebelTwo.poiCode)
                            let lebelThree = that.form.placePoiLabelVOList.find(item => {
                                return item.type == 3
                            })
                            if (lebelThree) that.form.smallLabel = String(lebelThree.poiCode)
                        }
                        const data = restInfo.data.data
                        if (data) {
                            let imageUrls = data.imageUrls
                            let planImageUrls = data.planImageUrls
                            if (imageUrls && imageUrls.length) {
                                imageUrls = imageUrls.split(',').filter(item => item != '').map(item => website.minioUrl + item).join(",")
                            }
                            if (planImageUrls && planImageUrls.length) {
                                planImageUrls = planImageUrls.split(',').filter(item => item != '').map(item => website.minioUrl + item).join(",")
                            }
                            that.placeForm = {
                                ...data,
                                imageUrls,
                                planImageUrls
                            }
                        }
                    }))
                    that.holdOnLoad(this.holdPage)
                }
            },
            immediate: true
        }
    },
    methods: {
        selectionClear () {
            this.$nextTick(() => {
                this.$refs.crud && this.$refs.crud.toggleSelection()
            })
        },
        houseHoldRowUpdate (row, index, done, loading) {
            holdUpdate(row).then(
                () => {
                    this.holdOnLoad(this.holdPage)
                    this.$message({
                        type: "success",
                        message: "操作成功!",
                    })
                    done()
                },
                (error) => {
                    window.console.log(error)
                    loading()
                }
            )
        },
        houseHoldRowDel (row) {
            this.$confirm("确定将选择数据删除?", {
                confirmButtonText: "确定",
                cancelButtonText: "取消",
                type: "warning",
            })
                .then(() => {
                    return holdRemove(row.id)
                })
                .then(() => {
                    this.holdOnLoad(this.holdPage)
                    this.$message({
                        type: "success",
                        message: "操作成功!",
                    })
                })
        },
        houseHoldRowSave (row, done, loading) {
            holdAdd({
                ...row,
                placeId: this.placeElement.curRow.id
            }).then(
                () => {
                    this.holdOnLoad(this.holdPage)
                    this.$message({
                        type: "success",
                        message: "操作成功!",
                    })
                    done()
                },
                (error) => {
                    window.console.log(error)
                    loading()
                }
            )
        },
        refreshHoldChange () {
            this.holdOnLoad(this.holdPage)
        },
        holdOnLoad (holdPage, params = {}) {
            if (!this.placeElement.curRow.id) return
            let values = {
                ...params,
                placeId: this.placeElement.curRow.id
            }
            getHoldList(holdPage.currentPage, holdPage.pageSize, values).then((res) => {
                const data = res.data.data
                this.holdPage.total = data.total
                this.placeExt = data.records
                this.loading = false
                this.selectionClear()
            })
        },
        holdCurrentChange (currentPage) {
            this.holdPage.currentPage = currentPage
        },
        holdSizeChange (pageSize) {
            this.holdPage.pageSize = pageSize
        },
        dataUpdate () {
            const that = this
            let imageUrls = this.form.imageUrls
            if (imageUrls.length > 0) {
                var urls = []
                var split = imageUrls.split(",").filter(item => item != '')
                split.forEach(url => {
                    var names = url.split("jczz/")
                    urls.push(names[1])
                })
                imageUrls = urls.join(",")
            }
            this.$refs.baseForm.validate((valid, done, msg) => {
                if (valid) {
                    that.$axios.all([
                        update({
                            // ...this.placeElement.curRow,
                            ...this.form,
                            imageUrls
                        }),
                        updatePlaceExt(this.placeForm)
                    ]).then(that.$axios.spread(function () {
                        that.$message({
                            type: "success",
                            message: "操作成功!",
                        })
                        that.closeRowDetails()
                        that.placeElement.onLoad(that.placeElement.page, that.placeElement.query)
                        done()
                    }))
                } else {
                    console.log('error submit!!')
                    return false
                }
            })
        },
        closeRowDetails () {
            this.placeElement.roleBox = false
        }
    },
}
</script>
<style lang="scss" scoped>
.cur-container-box {
    display: flex;
    flex-direction: column;
    width: 100%;
    height: 100%;
    overflow: hidden;
    .content-box {
        margin: 0 4px;
        padding: 0 10px;
        height: 0;
        flex: 1;
        overflow: hidden;
        overflow-y: auto;
    }
    .footer-btn-box {
        margin-top: 10px;
        display: flex;
        justify-content: center;
    }
}
</style>
src/views/place/components/boxTitle.vue
New file
@@ -0,0 +1,474 @@
<!--
 * @name: name
 * @description: Description
 * @lastEditors: Francis
 * @date: Do not edit
 * @lastEditTime: Do not edit
 * @filePath: Do not edit
-->
<template>
    <div class="titleContent">
        <!-- <div class="title1" data-color="red"></div> -->
        <div :class="'title title' + classVal">
            {{ title }}</div>
    </div>
</template>
<script>
export default {
    name: 'boxTitle',
    props: {
        title: {
            type: String,
            default: ''
        },
        classVal: {
            type: Number,
        }
    }
}
</script>
<style lang="scss" scoped>
.titleContent {
    >div {
        margin: 10px 0;
    }
}
.title {
    height: 32px;
    font-size: 20px;
    font-weight: 600;
    line-height: 32px;
    margin-left: 5px;
    padding-left: 5px;
    position: relative;
    color: #000;
    z-index: 0;
}
.title1 {
    padding-left: 15px;
    &:after {
        content: " ";
        width: 4px;
        height: 20px;
        background: #12a3f5;
        position: absolute;
        left: 0;
        top: 6px;
        border-radius: 2px;
    }
}
.title2 {
    padding-left: 15px;
    &:after {
        content: " ";
        width: 8px;
        height: 8px;
        border-radius: 50%;
        background: #12a3f5;
        position: absolute;
        left: 0;
        top: 12px;
    }
}
.title3 {
    &:after {
        content: " ";
        position: absolute;
        bottom: 0;
        left: 0;
        position: absolute;
        height: 2px;
        width: 100%;
        background: linear-gradient(to right, #01DFE3, rgba(255, 255, 255, 0));
    }
}
.title4 {
    &:after {
        content: attr(data-text);
        position: absolute;
        display: inline-block;
        bottom: -8px;
        left: 5px;
        opacity: 0.2;
        z-index: 0;
        text-align: right;
        transform: rotateY(30deg);
        transform: scaleY(30deg);
    }
}
.title5 {
    color: #10faf8;
    padding-left: 80px;
    line-height: 22px;
    position: relative;
    border-bottom: 2px solid linear-gradient(to right, #01DFE3, rgba(255, 255, 255, 0));
    &:after {
        content: "";
        position: absolute;
        bottom: 0;
        top: 0;
        left: 18px;
        width: 50px;
        height: 18px;
        transform: skewX(35deg);
        background: linear-gradient(to right,
                #2d83fa,
                #10faf8);
    }
    &:before {
        content: "|||";
        display: inline-block;
        font-weight: 900;
        color: #FFF;
        line-height: 30px;
        font-size: 18px;
        position: absolute;
        position: absolute;
        top: -8px;
        left: 0;
        color: #2d83fa;
        transform: skewX(35deg);
    }
}
.title6 {
    color: #C6D039;
    padding-left: 80px;
    line-height: 22px;
    position: relative;
    border-bottom: 2px solid linear-gradient(to right, #01DFE3, rgba(255, 255, 255, 0));
    &:after {
        content: "";
        position: absolute;
        bottom: 0;
        top: 0;
        left: 18px;
        width: 50px;
        height: 18px;
        transform: skewX(35deg);
        background: linear-gradient(to right,
                #4BF15A,
                #C6D039);
    }
    &:before {
        content: "|||";
        display: inline-block;
        font-weight: 900;
        color: #FFF;
        line-height: 30px;
        font-size: 18px;
        position: absolute;
        position: absolute;
        top: -8px;
        left: 0;
        color: #4BF15A;
        transform: skewX(35deg);
    }
}
.title7 {
    &:after {
        content: "";
        position: absolute;
        bottom: 0;
        top: 0;
        left: 0;
        width: 180px;
        height: 100%;
        opacity: 0.3;
        background: linear-gradient(to right,
                #4BF15A,
                #4bf15900);
    }
    &:before {
        content: " ";
        position: absolute;
        bottom: 0;
        left: 0;
        position: absolute;
        height: 2px;
        width: 100%;
        background: linear-gradient(to right, #4BF15A, rgba(255, 255, 255, 0));
    }
}
.title8 {
    border-radius: 16px;
    border: 1px solid #e8e9fb;
    box-shadow: 0 0 10px #e8e9fb;
    text-align: center;
    width: 160px;
    color: #12a3f5;
    &:before {
        content: "";
        width: 300%;
        height: 2px;
        background: #e8e9fb;
        position: absolute;
        top: 15px;
        left: 100%;
        background: linear-gradient(to right, #e8e9fb, rgba(255, 255, 255, 0));
    }
}
.title9 {
    background: #ECF8FF;
    border-top-left-radius: 5px;
    padding-left: 20px;
    &:before {
        content: "";
        border-top-left-radius: 5px;
        border-bottom-left-radius: 5px;
        width: 4px;
        height: 100%;
        background: #50BFFF;
        position: absolute;
        top: 0;
        left: 0;
    }
}
.title10 {
    background: #FFF6F7;
    border-top-left-radius: 5px;
    padding-left: 20px;
    &:before {
        content: "";
        border-top-left-radius: 5px;
        border-bottom-left-radius: 5px;
        width: 4px;
        height: 100%;
        background: #FE6C6F;
        position: absolute;
        top: 0;
        left: 0;
    }
}
.title11 {
    display: inline-block;
    position: relative;
    width: 150px;
    height: 32px;
    line-height: 32px;
    padding-left: 15px;
    background: #50BFFF;
    left: -8px;
    color: #FFF;
    &:before {
        content: "";
        position: absolute;
        height: 0;
        width: 0;
        border-bottom: 8px solid #4396c5;
        border-left: 8px solid transparent;
        top: -8px;
        left: 0;
    }
    &:after {
        content: "";
        position: absolute;
        height: 0;
        width: 0;
        border-top: 15px solid transparent;
        border-bottom: 15px solid transparent;
        border-left: 8px solid #50BFFF;
        right: -8px;
    }
}
.title12 {
    position: relative;
    width: 160px;
    padding-left: 10px;
    // top: 15px;
    // padding: 8px 10px;
    background: #00B3ED;
    box-shadow: -1px 2px 4px rgba(0, 0, 0, 0.5);
    color: #FFF;
    // height: 40px;
    &:before {
        position: absolute;
        content: "";
        display: block;
        width: 7px;
        height: 100%;
        padding: 0 0 7px;
        top: 0;
        left: -7px;
        background: inherit;
        border-radius: 5px 0 0 5px;
    }
    &:before {
        position: absolute;
        content: "";
        display: block;
        width: 5px;
        height: 5px;
        background: rgba(0, 0, 0, 0.35);
        bottom: -5px;
        left: -5px;
        border-radius: 5px 0 0 5px;
    }
}
.title13 {
    border-left: 2px solid #FE6C6F;
    &:after {
        content: " ";
        position: absolute;
        bottom: 0;
        left: 0;
        position: absolute;
        height: 2px;
        width: 60%;
        background: linear-gradient(to right, #FE6C6F, rgba(255, 255, 255, 0));
    }
    &::before {
        content: " ";
        position: absolute;
        top: 0;
        left: 0;
        position: absolute;
        height: 2px;
        width: 30%;
        background: linear-gradient(to right, #FE6C6F, rgba(255, 255, 255, 0));
    }
}
.title14 {
    border-left: 2px solid #01DFE3;
    &:after {
        content: " ";
        position: absolute;
        bottom: 0;
        left: 0;
        position: absolute;
        height: 2px;
        width: 60%;
        background: linear-gradient(to right, #01DFE3, rgba(255, 255, 255, 0));
    }
    &::before {
        content: " ";
        position: absolute;
        top: 0;
        left: 0;
        position: absolute;
        height: 2px;
        width: 30%;
        background: linear-gradient(to right, #01DFE3, rgba(255, 255, 255, 0));
    }
}
.title15 {
    color: #FFF;
    padding-left: 50px;
    background: linear-gradient(-210deg, transparent 1.5em, #01DFE3 0);
    &::before {
        content: '';
        display: block;
        width: 1.73em;
        height: 3em;
        position: absolute;
        background: linear-gradient(-60deg, #577b98 50%, transparent 0);
        left: -3px;
        top: 0;
        border-bottom-left-radius: inherit;
        transform: translateY(-0.5em) rotate(30deg);
        transform-origin: bottom right;
        box-shadow: .2em .2em .3em -.1em rgba(0, 0, 0, .15);
    }
}
.title16 {
    color: #FFF;
    padding-left: 50px;
    background: linear-gradient(-210deg, transparent 1.5em, #FE6C6F 0);
    &::before {
        content: '';
        display: block;
        width: 1.73em;
        height: 3em;
        position: absolute;
        background: linear-gradient(-60deg, #f18384 50%, transparent 0);
        left: -3px;
        top: 0;
        border-bottom-left-radius: inherit;
        transform: translateY(-0.5em) rotate(30deg);
        transform-origin: bottom right;
        box-shadow: .2em .2em .3em -.1em rgba(0, 0, 0, .15);
    }
}
.title17 {
    &:after {
        content: " ";
        position: absolute;
        bottom: 0;
        left: 0;
        position: absolute;
        height: 100%;
        width: 100%;
        animation: animation3 1s linear infinite;
        background: linear-gradient(135deg, #01DFE3 0.25em, transparent 0.25em) -0.5em 0, linear-gradient(225deg, #01DFE3 0.25em, transparent 0.25em) -0.5em 0, linear-gradient(315deg, rgba(238, 161, 99, 0.25) 0.25em, transparent 0.25em) 0 0, linear-gradient(45deg, rgba(238, 161, 99, 0.25) 0.25em, transparent 0.25em) 0 0;
        background-size: 0.75em 0.75em;
        opacity: 0.3;
    }
}
.title18 {
    &:after {
        content: " ";
        position: absolute;
        bottom: 0;
        left: 0;
        position: absolute;
        height: 100%;
        width: 100%;
        opacity: 0.3;
        animation: animation2 1s linear infinite;
        background: repeating-linear-gradient(45deg, #01DFE3 0, #01DFE3 0.25em, transparent 0.25em, transparent 0.5em);
        background-size: 0.75em 0.75em;
    }
}
</style>
src/views/place/index.vue
@@ -11,30 +11,15 @@
            </template>
            <template slot-scope="scope" slot="menu">
                <el-button type="text" icon="el-icon-circle-plus-outline" size="small" v-if="permission.househould_manager"
                <el-button type="text" icon="el-icon-edit" size="small" v-if="permission.househould_manager"
                    @click="ManageTenants(scope.row)">场所维护
                </el-button>
            </template>
        </avue-crud>
        <el-dialog title="场所维护" append-to-body :visible.sync="roleBox" center>
            <h3>基本信息:</h3>
            <avue-form :option="optionDetail" v-model="placeForm"></avue-form>
            <div style="display: flex; justify-content: center;">
                <el-button size="small" @click="roleBox = false">取 消</el-button>
                <el-button size="small" type="primary" @click="submitRole">提 交</el-button>
            </div>
            <h3>从业人员:</h3>
            <avue-crud :option="placeOption" :search.sync="search" :table-loading="loading" :data="placeExt" ref="crud"
                v-model="houseHoldForm" :permission="permissionList" @row-del="houseHoldRowDel"
                @row-update="houseHoldRowUpdate" @row-save="houseHoldRowSave" :page.sync="holdPage"
                @current-change="holdCurrentChange" @size-change="holdSizeChange" @refresh-change="refreshHoldChange"
                @on-load="holdOnLoad">
            </avue-crud>
        <el-dialog class="place-info-box" title="场所维护" append-to-body :visible.sync="roleBox" center @close="roleBoxClose">
            <baseAllInfo></baseAllInfo>
        </el-dialog>
    </basic-container>
</template>
@@ -46,121 +31,25 @@
    add,
    getPlace,
    getPlaceExt,
    updatePlaceExt,
    holdRemove,
    holdAdd,
    holdUpdate,
    getHoldList
} from "@/api/place/place"
import {
    mapGetters
} from "vuex"
import website from '@/config/website'
import baseAllInfo from './components/baseAllInfo'
export default {
    data () {
        return {
            curRow: {},
            roleBox: false,
            form: {},
            query: {},
            loading: true,
            roleBox: false,
            placeForm: {},
            optionDetail: {
                submitBtn: false,
                emptyBtn: false,
                column: [
                    {
                        label: '场所名称',
                        prop: 'placeName',
                    },
                    {
                        label: '法人信息',
                        prop: 'legalPerson'
                    },
                    {
                        label: '法人电话',
                        prop: 'legalTel'
                    },
                    {
                        label: '场所位置',
                        prop: 'localtion'
                    },
                    {
                        label: "营业执照",
                        prop: "imageUrls",
                        width: 80,
                        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,
                    },
                    {
                        label: "场所平面图",
                        prop: "planImageUrls",
                        width: 80,
                        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,
                    },
                ]
            },
            rowPlace: {},
            placeExt: [],
            houseHoldForm: {},
            placeOption: {
                menu: true,
                height: 300,
                calcHeight: 54,
                dialogWidth: 950,
                tip: false,
                searchShow: false,
                addBtn: true,
                delBtn: true,
                editBtn: true,
                border: true,
                index: true,
                dialogClickModal: false,
                column: [{
                    label: "名称",
                    prop: "name",
                    searchSpan: 4,
                    search: true,
                }, {
                    label: "电话",
                    prop: "telephone",
                    searchSpan: 4,
                    search: true,
                }, {
                    label: "暂住地",
                    prop: "tempAddress",
                    searchSpan: 4,
                    search: true,
                },]
            },
            holdPage: {
                pageSize: 20,
                currentPage: 1,
                total: 0,
            },
            page: {
                pageSize: 10,
@@ -176,15 +65,17 @@
                tip: false,
                searchShow: true,
                searchMenuSpan: 3,
                menuWidth: 280,
                menuWidth: 240,
                border: true,
                //stripe:true,
                index: true,
                viewBtn: true,
                editBtn: false,
                selection: true,
                dialogClickModal: false,
                column: [
                    {
                        span: 8,
                        label: "场所名称",
                        prop: "placeName",
                        searchSpan: 4,
@@ -195,6 +86,42 @@
                            trigger: "blur",
                        },],
                    },
                    {
                        span: 9,
                        label: "场所标签",
                        prop: "label",
                        type: "cascader",
                        dicUrl: "/api/blade-category/category/getCategory?level=2",
                        cascader: ["smallLabel"],
                        props: {
                            label: "categoryName",
                            value: "categoryNo"
                        },
                        dataType: "string",
                        hide: true,
                        rules: [{
                            required: true,
                            message: "请输入场所标签",
                            trigger: "blur",
                        },],
                    },
                    {
                        span: 7,
                        label: "",
                        labelWidth: 0,
                        prop: "smallLabel",
                        type: "cascader",
                        dicUrl: "/api/blade-category/category/getCategory?parentNo={{label}}",
                        props: {
                            label: "categoryName",
                            value: "categoryNo"
                        },
                        dataType: "string",
                        hide: true,
                    },
                    {
                        label: "负责人",
                        prop: "principal",
@@ -206,6 +133,16 @@
                            trigger: "blur",
                        },],
                    },
                    {
                        width: 110,
                        label: "电话",
                        prop: "principalPhone",
                        search: true,
                        searchSpan: 4,
                        slot: true,
                    },
                    {
                        addDisplay: false,
                        editDisplay: false,
@@ -293,46 +230,9 @@
                        ],
                    },
                    {
                        label: "场所标签",
                        prop: "label",
                        type: "cascader",
                        dicUrl: "/api/blade-category/category/getCategory?level=2",
                        cascader: ["smallLabel"],
                        props: {
                            label: "categoryName",
                            value: "categoryNo"
                        },
                        dataType: "string",
                        hide: true,
                        rules: [{
                            required: true,
                            message: "请输入场所标签",
                            trigger: "blur",
                        },],
                    },
                    {
                        label: "",
                        prop: "smallLabel",
                        type: "cascader",
                        dicUrl: "/api/blade-category/category/getCategory?parentNo={{label}}",
                        props: {
                            label: "categoryName",
                            value: "categoryNo"
                        },
                        dataType: "string",
                        hide: true,
                    },
                    {
                        width: 110,
                        label: "电话",
                        prop: "principalPhone",
                        search: true,
                        searchSpan: 4,
                        slot: true,
                    },
                    {
                        label: "场所照片",
@@ -386,7 +286,17 @@
            data: [],
        }
    },
    provide () {
        return {
            placeElement: this,
        }
    },
    components: { baseAllInfo },
    watch: {},
    computed: {
        ...mapGetters(["permission", "userInfo"]),
        permissionList () {
@@ -406,130 +316,24 @@
        },
    },
    methods: {
        houseHoldRowUpdate (row, index, done, loading) {
            holdUpdate(row).then(
                () => {
                    this.holdOnLoad(this.holdPage)
                    this.$message({
                        type: "success",
                        message: "操作成功!",
                    })
                    done()
                },
                (error) => {
                    window.console.log(error)
                    loading()
                }
            )
        roleBoxClose () {
            this.curRow = {}
        },
        houseHoldRowDel (row) {
            this.$confirm("确定将选择数据删除?", {
                confirmButtonText: "确定",
                cancelButtonText: "取消",
                type: "warning",
            })
                .then(() => {
                    return holdRemove(row.id)
                })
                .then(() => {
                    this.holdOnLoad(this.holdPage)
        handleClick () {
                    this.$message({
                        type: "success",
                        message: "操作成功!",
                    })
                })
        },
        houseHoldRowSave (row, done, loading) {
            holdAdd({
                ...row,
                placeId: this.placeForm.placeId
            }).then(
                () => {
                    this.holdOnLoad(this.holdPage)
                    this.$message({
                        type: "success",
                        message: "操作成功!",
                    })
                    done()
                },
                (error) => {
                    window.console.log(error)
                    loading()
                }
            )
        },
        refreshChange () {
            this.holdOnLoad(this.holdPage)
        },
        holdOnLoad (holdPage, params = {}) {
            if (!this.placeForm.placeId) return
            let values = {
                ...params,
                placeId: this.placeForm.placeId
            }
            getHoldList(holdPage.currentPage, holdPage.pageSize, values).then((res) => {
                const data = res.data.data
                this.page.total = data.total
                this.placeExt = data.records
                this.loading = false
            })
        },
        holdCurrentChange (currentPage) {
            this.page.currentPage = currentPage
        },
        holdSizeChange (pageSize) {
            this.page.pageSize = pageSize
        },
        ManageTenants (item) {
            this.curRow = item
            this.roleBox = true
            this.rowPlace = item
            this.placeForm = {
                placeName: '',
                legalPerson: '',
                legalTel: '',
                localtion: '',
                confirmFlag: '',
                imageUrls: '',
                planImageUrls: ''
            }
            this.placeExt = []
            this.onLoadPlaceExt()
            // this.onLoadPlaceExt(item.id)
        },
        submitRole () {
            updatePlaceExt(this.placeForm).then(
                () => {
                    this.$message({
                        type: "success",
                        message: "操作成功!",
                    })
                    this.roleBox = false
                },
                (error) => {
                    window.console.log(error)
                    loading()
                }
            )
        },
        onLoadPlaceExt () {
            let params = {
                placeId: this.rowPlace.id,
            }
            getPlaceExt(Object.assign(params)).then(res => {
        onLoadPlaceExt (placeId) {
            getPlaceExt({ placeId }).then(res => {
                const data = res.data.data
                if (data) {
                    let imageUrls = data.imageUrls
                    let planImageUrls = data.planImageUrls
@@ -629,6 +433,7 @@
                })
                .then(() => {
                    this.onLoad(this.page)
                    this.$message({
                        type: "success",
                        message: "操作成功!",
@@ -650,7 +455,9 @@
        },
        selectionClear () {
            this.selectionList = []
            this.$refs.crud.toggleSelection()
            this.$nextTick(() => {
                this.$refs.crud && this.$refs.crud.toggleSelection()
            })
        },
        handleDelete () {
            if (this.selectionList.length === 0) {
@@ -703,8 +510,8 @@
            } else {
                done()
            }
        },
        currentChange (currentPage) {
            this.page.currentPage = currentPage
        },
@@ -715,9 +522,7 @@
            this.onLoad(this.page, this.query)
        },
        onLoad (page, params = {}) {
            const {
                dateTime
            } = this.query
            const { dateTime } = this.query
            let values = {
                ...params,
            }
@@ -730,23 +535,27 @@
                }
                values.dateTime = null
            }
            this.loading = true
            getList(page.currentPage, page.pageSize, values).then((res) => {
                const data = res.data.data
                this.page.total = data.total
                this.data = data.records
                this.data.forEach(item => {
                    if (item.imageUrls) {
                        if (item.imageUrls.length > 0) {
                            var urls = []
                            var names = item.imageUrls.split(",").filter(item => item != '')
                            names.forEach(name => {
                                urls.push(website.minioUrl + name)
                            })
                            item.imageUrls = urls.join(",")
                        }
                    if (item.imageUrls && item.imageUrls != '' && item.imageUrls != null && item.imageUrls.length) {
                        var urls = []
                        var names = item.imageUrls.split(",").filter(item => item != '')
                        names.forEach(name => {
                            urls.push(website.minioUrl + name)
                        })
                        item.imageUrls = urls.join(",")
                    }
                })
                this.loading = false
                this.selectionClear()
            })
src/views/property/propertyCapitalApply.vue
@@ -73,11 +73,27 @@
                dialogClickModal: false,
                column: [
                    {
                        parent: false,
                        label: "小区",
                        prop: "districtId",
                        searchSpan: 5,
                        addDisplay: false,
                        editDisplay: false,
                        viewDisplay: false,
                        width: 160,
                        label: "小区名称",
                        prop: "districtName",
                        search: true,
                        searchSpan: 4,
                        rules: [{
                            required: true,
                            message: "请输入小区名称",
                            trigger: "blur",
                        }],
                    },
                    {
                        hide: true,
                        parent: false,
                        label: "小区名称",
                        prop: "districtId",
                        search: false,
                        type: 'tree',
                        dicUrl: `/api/blade-district/district/getDistrictTree`,
                        props: {
@@ -87,14 +103,14 @@
                        defaultExpandedKeys: ["361102003"],
                        span: 12,
                        labelWidth: 120,
                        width: 220,
                        overHidden: true,
                        width: 260,
                        rules: [{
                            required: true,
                            message: "请选择小区",
                            message: "请选择小区名称",
                            trigger: "blur",
                        },],
                    },
                    {
                        label: '维修项目名称',
                        prop: 'name',
src/views/property/propertyCompanyDistrict.vue
@@ -57,11 +57,27 @@
                dialogClickModal: false,
                column: [
                    {
                        parent: false,
                        label: "小区",
                        prop: "districtId",
                        searchSpan: 5,
                        addDisplay: false,
                        editDisplay: false,
                        viewDisplay: false,
                        width: 160,
                        label: "小区名称",
                        prop: "districtName",
                        search: true,
                        searchSpan: 4,
                        rules: [{
                            required: true,
                            message: "请输入小区名称",
                            trigger: "blur",
                        }],
                    },
                    {
                        hide: true,
                        parent: false,
                        label: "小区名称",
                        prop: "districtId",
                        search: false,
                        type: 'tree',
                        dicUrl: `/api/blade-district/district/getDistrictTree`,
                        props: {
@@ -74,17 +90,32 @@
                        width: 260,
                        rules: [{
                            required: true,
                            message: "请选择小区",
                            message: "请选择小区名称",
                            trigger: "blur",
                        },],
                    },
                    {
                        addDisplay: false,
                        editDisplay: false,
                        viewDisplay: false,
                        width: 160,
                        label: "物业公司",
                        prop: "propertyCompanyName",
                        search: true,
                        searchSpan: 4,
                        rules: [{
                            required: true,
                            message: "请输入物业公司",
                            trigger: "blur",
                        }],
                    },
                    {
                        hide: true,
                        label: '物业公司',
                        prop: 'propertyCompanyId',
                        type: 'tree',
                        hide: true,
                        searchSpan: 5,
                        search: true,
                        span: 12,
                        labelWidth: 120,
                        dicUrl: `/api/blade-propertyCompany/propertyCompany/getPropertyCompanyList`,
src/views/system/dept.vue
@@ -147,7 +147,7 @@
            },
            defaultExpandedKeys: ["361102003"],
            rules: [{
              required: true,
              required: false,
              message: "请选择管辖区域",
              trigger: "blur"
            }]
src/views/system/user.vue
@@ -456,10 +456,11 @@
                                type: "tree",
                                // multiple: true,
                                dicData: [],
                                dataType:"string",
                                props: {
                                    label: "title"
                                },
                                checkStrictly: true,
                                // checkStrictly: true,
                                slot: true,
                                span: 12,
                                rules: [{
@@ -698,7 +699,7 @@
            row['userType'] = 1
            row.deptId = func.join(row.deptId)
            row.roleId = func.join(row.roleId)
            // row.postId = func.join(row.postId);
            row.postId = func.join(row.postId);
            add(row).then(() => {
                this.initFlag = false
                this.onLoad(this.page)
@@ -717,7 +718,7 @@
            row['userType'] = 1
            row.deptId = func.join(row.deptId)
            row.roleId = func.join(row.roleId)
            // row.postId = func.join(row.postId);
            row.postId = func.join(row.postId);
            update(row).then(() => {
                this.initFlag = false
                this.onLoad(this.page)
src/views/userHouse/houseList.vue
@@ -226,11 +226,10 @@
                    },
                    {
                        hide: true,
                        parent: false,
                        label: "小区名称",
                        prop: "districtCode",
                        searchSpan: 4,
                        search: true,
                        type: 'tree',
                        dicUrl: `/api/blade-district/district/getDistrictTree`,
                        props: {
@@ -240,7 +239,6 @@
                        defaultExpandedKeys: ["361102003"],
                        span: 12,
                        width: 220,
                        hide:true,
                        overHidden: true,
                    },
@@ -249,7 +247,7 @@
                        label: "小区名称",
                        prop: "districtName",
                        searchSpan: 4,
                        display:false,
                        display: false,
                        search: true,
                        overHidden: true,
                    },