lin
2024-03-01 f37ea219d986a7c785a4132cd281ebccb0ff2903
Merge remote-tracking branch 'origin/master'
4 files modified
2 files added
730 ■■■■■ changed files
src/api/doorplateAddress/doorplateAddress.js 8 ●●●●● patch | view | raw | blame | history
src/views/message/components/DeptUserTable.vue 242 ●●●●● patch | view | raw | blame | history
src/views/message/sysMessage.vue 27 ●●●●● patch | view | raw | blame | history
src/views/message/userMessage.vue 357 ●●●●● patch | view | raw | blame | history
src/views/place/components/baseAllInfo.vue 80 ●●●● patch | view | raw | blame | history
src/views/place/index.vue 16 ●●●●● patch | view | raw | blame | history
src/api/doorplateAddress/doorplateAddress.js
@@ -19,3 +19,11 @@
    params: params
  })
}
export const getPlaceList = (params) => {
  return request({
    url: '/api/blade-doorplateAddress/doorplateAddress/getPlaceList',
    method: 'get',
    params: params
  })
}
src/views/message/components/DeptUserTable.vue
New file
@@ -0,0 +1,242 @@
<template>
  <el-dialog class="dept-user-table-dialog" width="70%" title="选择接收人" modal-append-to-body="false"
             append-to-body="true"
             :close-on-click-model="true" :visible.sync="showDialog" @close="showDialog = false">
    <div class="left">
      <el-scrollbar>
        <basic-container>
          <avue-tree :option="treeOption" :data="treeData" @node-click="nodeClick"/>
        </basic-container>
      </el-scrollbar>
    </div>
    <div class="right">
      <avue-crud :option="option" :search.sync="search" :table-loading="loading" :data="data" ref="crud"
                 v-model="form"
                 :page.sync="page" @search-change="searchChange"
                 @search-reset="searchReset" @selection-change="selectionChange" @current-change="currentChange"
                 @size-change="sizeChange" @refresh-change="refreshChange" @on-load="onLoad"></avue-crud>
    </div>
    <div slot="footer" class="dialog-footer">
      <el-button @click="showDialog = false">取 消</el-button>
      <el-button type="primary" @click="submit">确 定</el-button>
    </div>
  </el-dialog>
</template>
<script>
import {getDeptLazyTree} from "@/api/system/dept";
import {getList} from "@/api/system/user";
import {mapGetters} from "vuex";
export default {
  name: "DeptUserTable",
  data() {
    return {
      showDialog: false,
      form: {},
      search: {},
      selectionList: [],
      query: {},
      loading: true,
      platformLoading: false,
      page: {
        pageSize: 10,
        currentPage: 1,
        total: 0
      },
      treeDeptId: '',
      treeData: [],
      treeOption: {
        nodeKey: 'id',
        lazy: true,
        treeLoad: function (node, resolve) {
          const parentId = (node.level === 0) ? 0 : node.data.id
          getDeptLazyTree(parentId).then(res => {
            resolve(res.data.data.map(item => {
              return {
                ...item,
                leaf: !item.hasChildren
              }
            }))
          })
        },
        addBtn: false,
        menu: false,
        size: 'small',
        props: {
          labelText: '标题',
          label: 'title',
          value: 'value',
          children: 'children'
        }
      },
      option: {
        height: 'auto',
        calcHeight: 120,
        tip: false,
        searchShow: true,
        searchMenuSpan: 6,
        border: true,
        index: true,
        selection: true,
        viewBtn: true,
        dialogType: 'drawer',
        dialogClickModal: false,
        menu: false,
        addBtn: false,
        rowKey: "id",
        reserveSelection: true,
        column: [
          {
            label: "登录账号",
            prop: "account",
            search: true,
            searchLabelWidth: 76,
            display: false
          },
          {
            label: "用户姓名",
            prop: "realName",
            search: true,
            display: false
          },
          {
            label: "所属角色",
            prop: "roleName",
            slot: true,
            display: false
          },
          {
            label: "电话",
            prop: "phone",
            slot: true,
            display: false
          },
          {
            label: "邮箱",
            prop: "email",
            slot: true,
            display: false
          },
        ],
      },
      data: [],
    }
  },
  computed: {
    ...mapGetters(["userInfo", "permission"]),
    ids() {
      let ids = []
      this.selectionList.forEach(ele => {
        console.log(ele, "---------")
        ids.push(ele.id)
      })
      return ids.join(",")
    },
    idsList() {
      let ids = []
      this.selectionList.forEach(ele => {
        ids.push({
          id: ele.id,
          name: ele.name
        })
      })
      return ids
    }
  },
  methods: {
    submit() {
      this.$emit("selectPersonList", this.idsList)
      this.showDialog = false
    },
    show() {
      this.showDialog = true
    },
    nodeClick(data) {
      this.treeDeptId = data.id
      this.page.currentPage = 1
      this.onLoad(this.page)
    },
    searchReset() {
      this.query = {}
      this.treeDeptId = ''
      this.onLoad(this.page)
    },
    searchChange(params, done) {
      this.query = params
      this.page.currentPage = 1
      this.onLoad(this.page, params)
      done()
    },
    selectionChange(list) {
      console.log(list, "list")
      this.selectionList = list
    },
    selectionClear() {
      this.selectionList = []
      this.$refs.crud.toggleSelection()
    },
    currentChange(currentPage) {
      this.page.currentPage = currentPage
    },
    sizeChange(pageSize) {
      this.page.pageSize = pageSize
    },
    refreshChange() {
      this.onLoad(this.page, this.query)
    },
    onLoad(page, params = {}) {
      this.loading = true
      getList(page.currentPage, page.pageSize, Object.assign(params, this.query), this.treeDeptId).then(res => {
        const data = res.data.data
        this.page.total = data.total
        this.data = data.records
        this.loading = false
        // this.selectionClear()
      })
    },
  }
}
</script>
<style lang="scss">
.dept-user-table-dialog {
  margin: 0 !important;
  .el-dialog {
    display: flex;
    flex-direction: column;
    margin: auto !important;
    position: absolute;
    top: 0 !important;
    left: 0 !important;
    right: 0 !important;
    bottom: 0 !important;
    //width: 1000px !important;
    height: 800px !important;
    .el-dialog__body {
      height: 0 !important;
      flex: 1;
      display: flex;
      .left {
        width: 0;
        flex: 2;
      }
      .right {
        margin-left: 10px;
        flex: 9;
      }
    }
  }
}
</style>
src/views/message/sysMessage.vue
@@ -62,15 +62,16 @@
        editBtn: false,
        addBtnText: "消息发送",
        saveBtnText: "发送",
        delBtn:false,
        delBtn: false,
        column: [
          {
            label: "消息类型",
            prop: "type",
            type: "checkbox",
            search:true,
            dataType: "string",
            search: true,
            searchSpan: 4,
            searchLabelWidth:96,
            searchLabelWidth: 96,
            row: true,
            dicUrl: "/api/blade-system/dict-biz/dictionary?code=messageType",
            props: {
@@ -91,6 +92,7 @@
            multiple: true,
            dicUrl: `/api/blade-system/dept/lazy-list`,
            dicData: [],
            dataType: "string",
            props: {
              label: 'name',
              value: 'id'
@@ -129,7 +131,7 @@
            label: "发送时间",
            prop: "createTime",
            span: 24,
            display:false
            display: false
          },
          {
            label: "发送时间",
@@ -141,7 +143,7 @@
            hide: true,
            display: false,
            search: true,
            searchLabelWidth:96,
            searchLabelWidth: 96,
          },
        ]
      },
@@ -192,19 +194,8 @@
    },
    rowSave(row, done, loading) {
      console.log(typeof row.type,"+++++++++++")
      if (typeof  row.type == 'object'){
        row.type = row.type.sort((a,b)=>a-b).join(",")
      }else{
        row.type = row.type.split(",").sort((a,b)=>a-b).join(",")
      }
      if (typeof  row.receiver == 'object'){
        row.receiver = row.receiver.join(",")
      }
      // row.receiver = row.receiver.join(",")
      // row.type = row.type.join(",")
      console.log(row)
      row.type = row.type.split(",").sort((a, b) => a - b).join(",")
      row['messageResource'] = 1
      customizeSave(row).then(() => {
        this.onLoad(this.page);
src/views/message/userMessage.vue
New file
@@ -0,0 +1,357 @@
<template>
  <basic-container>
    <avue-crud :option="option"
               :table-loading="loading"
               :data="data"
               :page.sync="page"
               :permission="permissionList"
               :before-open="beforeOpen"
               v-model="form"
               ref="crud"
               @row-update="rowUpdate"
               @row-save="rowSave"
               @row-del="rowDel"
               @search-change="searchChange"
               @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"
                   icon="el-icon-delete"
                   plain
                   v-if="permission.messageRecord_delete"
                   @click="handleDelete">删 除
        </el-button>
      </template>
      <template slot-scope="{disabled,size}" slot="receiverForm">
        <div style="display: flex">
            <el-input :disabled="disabled" :size="size" v-model="form.receiver" placeholder="请选择接收人"></el-input>
          <div style="margin-left: 10px">
            <el-button type="primary" size="small" @click="showDialog">选择</el-button>
          </div>
        </div>
      </template>
    </avue-crud>
    <DeptUserTable ref="deptUserTable" @selectPersonList="selectPersonList"></DeptUserTable>
  </basic-container>
</template>
<script>
import {getList, getDetail, add, update, remove, customizeSave} from "@/api/messageRecord/messageRecord";
import {mapGetters} from "vuex";
import {getDeptLazyTree, getDeptUserTree, getLazyList} from "@/api/system/dept";
import DeptUserTable from "@/views/message/components/DeptUserTable.vue";
export default {
  components: {DeptUserTable},
  data() {
    return {
      form: {},
      query: {},
      loading: true,
      page: {
        pageSize: 10,
        currentPage: 1,
        total: 0
      },
      selectionList: [],
      option: {
        dialogDirection:'rtl',
        dialogType:'drawer',
        height: 'auto',
        calcHeight: 30,
        tip: false,
        searchShow: true,
        searchMenuSpan: 6,
        border: true,
        index: true,
        viewBtn: true,
        dialogClickModal: false,
        editBtn: false,
        addBtnText: "消息发送",
        saveBtnText: "发送",
        delBtn: false,
        selection: true,
        column: [
          {
            label: "消息类型",
            prop: "type",
            type: "checkbox",
            dataType: "string",
            search: true,
            searchSpan: 4,
            searchLabelWidth: 96,
            row: true,
            dicUrl: "/api/blade-system/dict-biz/dictionary?code=messageType",
            props: {
              label: "dictValue",
              value: "dictKey",
            },
            rules: [{
              required: true,
              message: "请选择消息类型",
              trigger: "blur"
            }]
          },
          {
            label: "接收人",
            prop: "receiver",
            type:"select",
            formslot:true,
            disabled:true,
            hide:true,
            span: 24,
            viewDisplay:false,
            rules: [{
              required: true,
              message: "请选择接收人",
              trigger: "blur"
            }]
          },
          {
            label: "接收人",
            prop: "userName",
            addDisplay: false,
          },
          {
            label: "标题",
            prop: "title",
            type: "input",
            span: 24,
            rules: [{
              required: true,
              message: "请输入标题",
              trigger: "blur"
            }]
          },
          {
            label: "内容",
            prop: "content",
            type: "textarea",
            minRow: 5,
            span: 24,
            rules: [{
              required: true,
              message: "请输入内容",
              trigger: "blur"
            }]
          },
          {
            label: "发送时间",
            prop: "createTime",
            span: 24,
            display: false
          },
          {
            label: "发送时间",
            prop: "dateTime",
            type: "daterange",
            format: "yyyy-MM-dd",
            valueFormat: "yyyy-MM-dd",
            searchRange: true,
            hide: true,
            display: false,
            search: true,
            searchLabelWidth: 96,
          },
        ]
      },
      data: [],
      personList:[],
    };
  },
  computed: {
    ...mapGetters(["permission", "userInfo"]),
    permissionList() {
      return {
        addBtn: this.vaildData(this.permission.messageRecord_add, false),
        viewBtn: this.vaildData(this.permission.messageRecord_view, false),
        delBtn: this.vaildData(this.permission.messageRecord_delete, false),
        editBtn: this.vaildData(this.permission.messageRecord_edit, false)
      };
    },
    ids() {
      let ids = [];
      this.selectionList.forEach(ele => {
        ids.push(ele.id);
      });
      return ids.join(",");
    }
  },
  created() {
    // this.getTreeData()
  },
  methods: {
    selectPersonList(personList){
      console.log(personList,"++++++++++++")
      this.personList = personList
     let nameList = personList.map(e=>{
       return e.name
     })
      this.form.receiver = nameList.join(",")
    },
    showDialog(){
      this.$refs.deptUserTable.show()
    },
    getTreeData() {
      getDeptUserTree({id: this.userInfo.dept_id}).then(res => {
        console.log(res, "+++++++++++")
        let data = res.data.data
        let receiver = this.findObject(this.option.column, 'receiver')
        receiver.dicData = data
      })
    },
    rowSave(row, done, loading) {
      console.log(row)
      row.type = row.type.split(",").sort((a, b) => a - b).join(",")
      row['messageResource'] = 2
      row.receiver = this.personList.map(e=>e.id).join(",")
      customizeSave(row).then(() => {
        this.onLoad(this.page);
        this.$message({
          type: "success",
          message: "操作成功!"
        });
        done();
      }, error => {
        loading();
        window.console.log(error);
      });
    },
    rowUpdate(row, index, done, loading) {
      update(row).then(() => {
        this.onLoad(this.page);
        this.$message({
          type: "success",
          message: "操作成功!"
        });
        done();
      }, error => {
        loading();
        console.log(error);
      });
    },
    rowDel(row) {
      this.$confirm("确定将选择数据删除?", {
        confirmButtonText: "确定",
        cancelButtonText: "取消",
        type: "warning"
      })
        .then(() => {
          return remove(row.id);
        })
        .then(() => {
          this.onLoad(this.page);
          this.$message({
            type: "success",
            message: "操作成功!"
          });
        });
    },
    handleDelete() {
      if (this.selectionList.length === 0) {
        this.$message.warning("请选择至少一条数据");
        return;
      }
      this.$confirm("确定将选择数据删除?", {
        confirmButtonText: "确定",
        cancelButtonText: "取消",
        type: "warning"
      })
        .then(() => {
          return remove(this.ids);
        })
        .then(() => {
          this.onLoad(this.page);
          this.$message({
            type: "success",
            message: "操作成功!"
          });
          this.$refs.crud.toggleSelection();
        });
    },
    beforeOpen(done, type) {
      if (["edit", "view"].includes(type)) {
        getDetail(this.form.id).then(res => {
          this.form = res.data.data;
        });
      }
      done();
    },
    searchReset() {
      this.query = {};
      this.onLoad(this.page);
    },
    searchChange(params, done) {
      this.query = params;
      this.page.currentPage = 1;
      this.onLoad(this.page, params);
      done();
    },
    selectionChange(list) {
      console.log('selectionChange', list)
      this.selectionList = list;
    },
    selectionClear() {
      this.selectionList = [];
      this.$refs.crud.toggleSelection();
    },
    currentChange(currentPage) {
      this.page.currentPage = currentPage;
    },
    sizeChange(pageSize) {
      this.page.pageSize = pageSize;
    },
    refreshChange() {
      this.onLoad(this.page, this.query);
    },
    onLoad(page, params = {}) {
      this.loading = true;
      //系统消息
      params.messageResource = '2'
      params.createUser = this.userInfo.user_id
      const {dateTime} = this.query
      let values = {...params,}
      if (dateTime) {
        values = {
          ...params,
          startTime: dateTime[0],
          endTime: dateTime[1],
          ...this.query,
        }
        values.dateTime = null
      }
      getList(page.currentPage, page.pageSize, values).then(res => {
        const data = res.data.data;
        this.page.total = data.total;
        this.data = data.records;
        this.loading = false;
        this.selectionClear();
      });
    }
  }
};
</script>
<style>
</style>
src/views/place/components/baseAllInfo.vue
@@ -3,7 +3,8 @@
        <div class="cur-container-box">
            <div class="content-box">
                <box-title class="m10" :classVal="9" :title="'基本信息'"></box-title>
                <avue-form v-if="baseShow" ref="baseForm" :option="option" v-model="form"></avue-form>
                <avue-form v-if="baseShow" ref="baseForm" :option="option" v-model="form">
                </avue-form>
                <box-title class="m10" :classVal="9" :title="'其他信息'"></box-title>
                <avue-form v-if="restShow" ref="restForm" :option="optionDetail" v-model="placeForm"></avue-form>
@@ -37,7 +38,7 @@
    update,
    updatePlaceExt,
} from "@/api/place/place"
import { getPlaceList } from "@/api/doorplateAddress/doorplateAddress"
import website from "@/config/website"
import boxTitle from "./boxTitle"
@@ -82,7 +83,7 @@
                        ],
                    },
                    {
                        label: "负责人",
@@ -251,6 +252,13 @@
                                value: 2,
                            }
                        ],
                        rules: [
                            {
                                required: true,
                                message: "请选择九小分类",
                                trigger: "blur",
                            },
                        ],
                        hide: true,
                    },
                    {
@@ -258,7 +266,7 @@
                        label: "九小分类",
                        prop: "nineType",
                        type: "select",
                        display:false,
                        display: false,
                        dicUrl: "/api/blade-system/dict-biz/dictionary?code=nineType",
                        dataType: "number",
                        hide: true,
@@ -283,13 +291,20 @@
                            }
                        ],
                        hide: true,
                        rules: [
                            {
                                required: true,
                                message: "请选择阵地",
                                trigger: "blur",
                            },
                        ],
                    },
                    {
                        span: 12,
                        label: "阵地类型",
                        prop: "frontType",
                        type: "select",
                        display:false,
                        display: false,
                        row: true,
                        dicUrl: "/api/blade-system/dict-biz/dictionary?code=frontType",
                        dataType: "number",
@@ -298,6 +313,7 @@
                            label: "dictValue",
                            value: "dictKey",
                        },
                    },
                    {
                        label: "场所照片",
@@ -333,15 +349,41 @@
                            },
                        ],
                    },
                    // {
                    //     width: 160,
                    //     overHidden: true,
                    //     slot: true,
                    //     label: "标准地址",
                    //     prop: "houseCodeBinds",
                    //     span: 24,
                    //     type: 'select',
                    //     dataType:"string",
                    //     remote: true,
                    //     multiple: true,
                    //     hide: true,
                    //     dicUrl: `/api/blade-doorplateAddress/doorplateAddress/getPlaceList?addressName={{key}}`,
                    //     props: {
                    //         label: 'addressName',
                    //         value: 'addressCode',
                    //     },
                    //     dicData: [],
                    //     rules: [
                    //         {
                    //             required: true,
                    //             message: "请选择地址",
                    //             trigger: "blur",
                    //         },
                    //     ],
                    // },
                    {
                        label: "备注",
                        prop: "remark",
                        type: 'textarea',
                        hide:true,
                        hide: true,
                        span: 24,
                        rules: [
                            {
                                required: true,
                                required: false,
                                message: "请输入场所备注",
                                trigger: "blur",
                            },
@@ -503,7 +545,7 @@
                    }
                }
            },
        },
        }
    },
    methods: {
        initOpen(newData) {
@@ -517,7 +559,7 @@
            const that = this
            that.$axios
                .all([getPlace(newData["id"]), getPlaceExt({ placeId: newData["id"] })])
                .all([getPlace(newData["id"]), getPlaceExt({ placeId: newData["id"] }), getPlaceList()])
                .then(
                    that.$axios.spread(function (baseInfo, restInfo) {
                        that.form = baseInfo.data.data
@@ -554,7 +596,6 @@
                        }
                        that.baseShow = true
                        const data = restInfo.data.data
                        if (data) {
@@ -696,16 +737,17 @@
        },
        desposeImage(data) {
            if (data.length > 0) {
                var urls = []
                var split = data.split(",").filter((item) => item != "")
                split.forEach((url) => {
                    var names = url.split("jczz/")
                    urls.push(names[1])
                })
                data = urls.join(",")
            if (data) {
                if (data.length > 0) {
                    var urls = []
                    var split = data.split(",").filter((item) => item != "")
                    split.forEach((url) => {
                        var names = url.split("jczz/")
                        urls.push(names[1])
                    })
                    data = urls.join(",")
                }
            }
            return data
        },
src/views/place/index.vue
@@ -345,6 +345,13 @@
                            }
                        ],
                        hide: true,
                        rules: [
                            {
                                required: true,
                                message: "请选择九小场所",
                                trigger: "blur",
                            },
                        ],
                    },
                    {
                        span: 12,
@@ -376,6 +383,13 @@
                            }
                        ],
                        hide: true,
                        rules: [
                            {
                                required: true,
                                message: "请选择阵地",
                                trigger: "blur",
                            },
                        ],
                    },
                    {
                        span: 12,
@@ -435,7 +449,7 @@
                        span: 24,
                        rules: [
                            {
                                required: true,
                                required: false,
                                message: "请输入场所备注",
                                trigger: "blur",
                            },