linwe
2023-12-13 061def3606b5c9bd269729de0a85b475ccb3b355
住户标签+场所管理
4 files modified
346 ■■■■ changed files
src/api/label/label.js 9 ●●●●● patch | view | raw | blame | history
src/api/place/place.js 17 ●●●●● patch | view | raw | blame | history
src/views/place/index.vue 198 ●●●● patch | view | raw | blame | history
src/views/userHouse/houseHoldList.vue 122 ●●●● patch | view | raw | blame | history
src/api/label/label.js
@@ -7,6 +7,15 @@
    params: {}
  })
}
export const getLabelList = (params) => {
  return request({
    url: '/api/blade-label/label/getLabelList',
    method: 'get',
    params: {
       ...params
    }
  })
}
export const getList = (current, size, params) => {
  return request({
    url: '/api/blade-label/label/list',
src/api/place/place.js
@@ -47,3 +47,20 @@
    }
  })
}
export const getPlaceExt = (params) => {
  return request({
    url: '/api/blade-placeExt/placeExt/getDetail',
    method: 'get',
    params: {
      ...params
    }
  })
}
export const updatePlaceExt = (row) => {
  return request({
    url: '/api/blade-placeExt/placeExt/update',
    method: 'post',
    data: row
  })
}
src/views/place/index.vue
@@ -16,12 +16,36 @@
      </template>
    </avue-crud>
    
    <el-dialog title="场所维护" append-to-body :visible.sync="roleBox" center>
      <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="currentChange" @size-change="sizeChange">
      </avue-crud>
      <avue-form :option="optionDetail" v-model="placeForm"></avue-form>
      <span slot="footer" class="dialog-footer">
        <el-button @click="roleBox = false">取 消</el-button>
        <el-button type="primary" @click="submitRole">确 定</el-button>
      </span>
    </el-dialog>
  </basic-container>
</template>
<script>
import { getList, remove, update, add, getPlace } from "@/api/place/place";
import { mapGetters } from "vuex";
  import {
    getList,
    remove,
    update,
    add,
    getPlace,
    getPlaceExt,
    updatePlaceExt
  } from "@/api/place/place";
  import {
    mapGetters
  } from "vuex";
import website from '@/config/website';
export default {
  data() {
@@ -29,6 +53,75 @@
      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: 'confirmFlag',
              type: 'radio',
              dicData: [{
                label: '待审核',
                value: 0
              }, {
                label: '审核通过',
                value: 1
              }, {
                label: '审核不通过',
                value: 2
              }]
            }
          ]
        },
        rowPlace: {},
        placeExt: [],
        placeOption: {
          menu: false,
          height: 300,
          calcHeight: 54,
          dialogWidth: 950,
          tip: false,
          searchShow: false,
          addBtn: false,
          delBtn: false,
          editBtn: false,
          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,
          }, ]
        },
      page: {
        pageSize: 10,
        currentPage: 1,
@@ -50,19 +143,16 @@
        viewBtn: true,
        selection: true,
        dialogClickModal: false,
        column: [
          {
          column: [{
            label: "场所名称",
            prop: "placeName",
            searchSpan: 4,
            search: true,
            rules: [
              {
              rules: [{
                required: true,
                message: "请输入场所名称",
                trigger: "blur",
              },
            ],
              }, ],
          },
          {
            label: "场所标签",
@@ -76,39 +166,48 @@
            multiple:true,
            dataType:"string",
            hide:true,
            rules: [
              {
              rules: [{
                required: true,
                message: "请输入场所标签",
                trigger: "blur",
              },
            ],
              }, ],
          },
          {
            label: "负责人",
            prop: "principal",
            searchSpan: 4,
            search: true,
            rules: [
              {
              rules: [{
                required: false,
                message: "请输入负责人",
                trigger: "blur",
              },
            ],
              }, ],
          },
          {
            label: "联系电话",
            prop: "principalPhone",
            searchSpan: 4,
            search: true,
            rules: [
              {
              rules: [{
                required: false,
                message: "请输入联系电话",
                trigger: "blur",
              },
            ],
              }, ],
            }, {
              label: "审核状态",
              prop: "confirmFlag",
              searchSpan: 4,
              search: true,
              dicData: [{
                label: '待审核',
                value: 0,
              }, {
                label: '审核通过',
                value: 1,
              }, {
                label: '审核不通过',
                value: 2,
              }],
          },
          {
            label: "场所照片",
@@ -132,21 +231,18 @@
            span:24,
            minWidth:220,
            overHidden:true,
            rules: [
              {
              rules: [{
                required: true,
                message: "请输入区域",
                trigger: "blur",
              },
            ],
              }, ],
          }
        ],
      },
      data: [],
    };
  },
  watch: {
  },
    watch: {},
  computed: {
    ...mapGetters(["permission", "userInfo"]),
    permissionList() {
@@ -166,6 +262,52 @@
    },
  },
  methods: {
      ManageTenants(item) {
        this.roleBox = true
        this.rowPlace = item
        this.placeForm = {
          placeName: '',
          legalPerson: '',
          legalTel: '',
          localtion: '',
          confirmFlag: '',
        };
        this.placeExt = []
        this.onLoadPlaceExt()
      },
      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 => {
          const data = res.data.data;
          if (data) {
            this.placeForm = data;
            this.placeExt = data.placePractitioner;
            this.loading = false;
            this.selectionClear();
          }
        });
      },
    rowSave(row, done, loading) {
      if (row.imageUrls.length > 0) {
        var urls = []
@@ -309,7 +451,9 @@
      this.onLoad(this.page, this.query);
    },
    onLoad(page, params = {}) {
      const { dateTime } = this.query;
        const {
          dateTime
        } = this.query;
      let values = {
        ...params,
      };
src/views/userHouse/houseHoldList.vue
@@ -2,8 +2,8 @@
  <el-row>
    <el-col :span="24">
      <basic-container>
        <avue-crud :option="option" :search.sync="search" :table-loading="loading" :data="data" ref="crud" v-model="form"
          :permission="permissionList" @row-del="rowDel" @row-update="rowUpdate" @row-save="rowSave"
        <avue-crud :option="option" :search.sync="search" :table-loading="loading" :data="data" ref="crud"
          v-model="form" :permission="permissionList" @row-del="rowDel" @row-update="rowUpdate" @row-save="rowSave"
          :before-open="beforeOpen" :page.sync="page" @search-change="searchChange" @search-reset="searchReset"
          @selection-change="selectionChange" @current-change="currentChange" @size-change="sizeChange"
          @refresh-change="refreshChange" @on-load="onLoad">
@@ -11,12 +11,21 @@
            <el-button type="danger" size="small" plain icon="el-icon-delete" v-if="permission.household_delete"
              @click="handleDelete">删 除
            </el-button>
            <el-button type="success" size="small" plain v-if="this.permission.household_import"
              icon="el-icon-upload2" @click="handleImport">导入
            <el-button type="success" size="small" plain v-if="this.permission.household_import" icon="el-icon-upload2"
              @click="handleImport">导入
            </el-button>
            <el-button type="warning" size="small" plain v-if="this.permission.household_export"
              icon="el-icon-download" @click="handleExport">导出
            <el-button type="warning" size="small" plain v-if="this.permission.household_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="manageLabel(scope.row)">标签
            </el-button>
            <!--  <el-button type="success" size="small" plain icon="el-icon-upload2" @click="handleImport">导入
            </el-button>
            <el-button type="warning" size="small" plain icon="el-icon-download" @click="handleExport">导出
            </el-button> -->
          </template>
          <template slot-scope="{row}" slot="tenantName">
            <el-tag>{{ row.tenantName }}</el-tag>
@@ -31,7 +40,7 @@
            <el-tag>{{ row.userTypeName }}</el-tag>
          </template>
        </avue-crud>
        <el-dialog title="用户角色配置" append-to-body :visible.sync="roleBox" width="345px">
        <el-dialog title="用户角色配置" append-to-body :visible.sync="roleBox" width="345px" center>
          <el-tree :data="roleGrantList" show-checkbox check-strictly default-expand-all node-key="id" ref="treeRole"
            :default-checked-keys="roleTreeObj" :props="props">
@@ -42,6 +51,42 @@
            <el-button type="primary" @click="submitRole">确 定</el-button>
          </span>
        </el-dialog>
        <el-dialog title="标签管理" append-to-body :visible.sync="labelFlag" center>
          <div id="" v-for="(item1,index1) in labelData">
            <el-row>
              <el-col :span="24">
                <div>
                  <el-divider content-position="left">{{item1.name}}</el-divider>
                </div>
              </el-col>
            </el-row>
            <div id="" class="grid-container2" v-if="item1.children">
              <div id="" v-for="(item2,index2) in item1.children ">
                <div id="" @click="changLabel(item2)">
                  {{item2.name}}
                </div>
              </div>
            </div>
          </div>
          <span slot="footer" class="dialog-footer">
            <el-button @click="roleBox = false">取 消</el-button>
            <el-button type="primary" @click="submitRole">确 定</el-button>
          </span>
        </el-dialog>
        <el-dialog title="编辑标签" append-to-body :visible.sync="editLabelFlge" width="655px">
          <avue-form :option="labelOption" v-model="excelForm">
            <template slot="excelTemplate">
            </template>
          </avue-form>
        </el-dialog>
        <el-dialog title="用户数据导入" append-to-body :visible.sync="excelBox" width="555px">
          <avue-form :option="excelOption" v-model="excelForm" :upload-after="uploadAfter">
            <template slot="excelTemplate">
@@ -65,6 +110,9 @@
  getDetatil
} from "@/api/userHouse/list/houseHold.js";
import {
    getLabelList,
  } from '@/api/label/label'
  import {
  exportBlob
} from "@/api/common";
import {
@@ -86,10 +134,13 @@
export default {
  data() {
    return {
        labelData: [],
      form: {},
      search: {},
      excelBox: false,
      selectionList: [],
        labelFlag: false,
        editLabelFlge: false,
      query: {},
      loading: true,
      page: {
@@ -132,8 +183,7 @@
          label: "性别",
          prop: "gender",
          type: "select",
          dicData: [
            {
              dicData: [{
              label: "男",
              value: 1
            },
@@ -174,6 +224,33 @@
      data: [],
      excelForm: {},
        labelOption: {
          column: [{
            label: '级别',
            prop: 'radio',
            type: 'radio',
            button: true,
            row: true,
            dicData: [{
              label: '撤销',
              value: -1
            }, {
              label: '绿',
              value: 0
            }, {
              label: '黄',
              value: 1
            }, {
              label: '红',
              value: ''
            }]
          }, {
            row: true,
            label: '备注',
            prop: 'input',
            type: 'input'
          }]
        },
      excelOption: {
        submitBtn: false,
        emptyBtn: false,
@@ -223,8 +300,7 @@
      }
    };
  },
  watch: {
  },
    watch: {},
  computed: {
    ...mapGetters(["userInfo", "permission"]),
    permissionList() {
@@ -236,9 +312,23 @@
      };
    }
  },
  mounted() {
  },
    mounted() {},
  methods: {
      changLabel(item) {
        this.editLabelFlge = true
      },
      manageLabel() {
        this.labelFlag = true
        let params = {
          parentId: 1000
        }
        getLabelList(Object.assign(params)).then(res => {
          const data = res.data.data;
          this.labelData = data;
          this.loading = false;
        });
      },
    rowSave(row, done, loading) {
      add(row).then(() => {
        this.initFlag = false;
@@ -394,6 +484,12 @@
  height: 800px;
}
  .grid-container2 {
    display: grid;
    grid-template-columns: auto auto auto auto;
    grid-gap: 10px;
  }
.el-scrollbar {
  height: 100%;
}