linwe
2023-11-20 e5c21244bd817fc2dd62ef38facc9b959bde9ee3
标签代码优化
5 files modified
446 ■■■■■ changed files
src/api/label/label.js 2 ●●● patch | view | raw | blame | history
src/views/system/menu.vue 4 ●●●● patch | view | raw | blame | history
src/views/userHouse/lable/household.vue 165 ●●●●● patch | view | raw | blame | history
src/views/userHouse/lable/list.vue 177 ●●●●● patch | view | raw | blame | history
src/views/userHouse/lable/statistics.vue 98 ●●●●● patch | view | raw | blame | history
src/api/label/label.js
@@ -9,7 +9,7 @@
}
export const getList = (current, size, params) => {
  return request({
    url: '/api/blade-label/label/page',
    url: '/api/blade-label/label/list',
    method: 'get',
    params: {
      ...params,
src/views/system/menu.vue
@@ -98,7 +98,7 @@
              prop: "parentId",
              type: "tree",
              dicData: [],
              hide: true,
              // hide: true,
              addDisabled: false,
              props: {
                label: "title",
@@ -228,7 +228,7 @@
                value: 'id'
              },
              multiple: true,
              hide: true
              // hide: true
            }
          ]
        },
src/views/userHouse/lable/household.vue
@@ -1,11 +1,164 @@
<template>
  <div id="">
    222222222222
  <div style="width:400px">
    <el-row>
      <el-col style="color: red;" :span="24">
        注意:仅导入未添加过标签的住户
        EXCEL格式:小区id,姓名,手机,身份证,标签id,
        颜色(1-绿 2-黄 3-红),备注
      </el-col>
    </el-row>
    <basicContainer>
      <el-dialog title="标签住户导入" append-to-body :visible.sync="excelBox" width="555px">
        <avue-form :option="excelOption" v-model="excelForm" :upload-after="uploadAfter">
          <template slot="excelTemplate">
            <el-button type="primary" @click="handleTemplate">
              点击下载<i class="el-icon-download el-icon--right"></i>
            </el-button>
          </template>
        </avue-form>
      </el-dialog>
      <el-button type="primary" @click="handleExcel">标签住户导入 excel</el-button>
    </basicContainer>
  </div>
</template>
<script>
</script>
  import {
    exportBlob
  } from "@/api/common";
  import {
    getToken
  } from '@/util/auth';
  import {
    downloadXls
  } from "@/util/util";
  export default {
    data() {
      return {
        excelBox: false,
        excelForm: {},
        excelOption: {
          submitBtn: false,
          emptyBtn: false,
          column: [{
              label: '模板上传',
              prop: 'excelFile',
              type: 'upload',
              drag: true,
              loadText: '模板上传中,请稍等',
              span: 24,
              propsHttp: {
                res: 'data'
              },
              tip: '请上传 .xls,.xlsx 标准格式文件',
              action: "/api/blade-householdLabel/householdLabel/import-userHouseLabel"
            },
            // {
            //   label: "数据覆盖",
            //   prop: "isCovered",
            //   type: "switch",
            //   align: "center",
            //   width: 80,
            //   dicData: [{
            //       label: "否",
            //       value: 0
            //     },
            //     {
            //       label: "是",
            //       value: 1
            //     }
            //   ],
            //   value: 0,
            //   slot: true,
            //   rules: [{
            //     required: true,
            //     message: "请选择是否覆盖",
            //     trigger: "blur"
            //   }]
            // },
            {
              label: '模板下载',
              prop: 'excelTemplate',
              formslot: true,
              span: 24,
            }
          ]
        }
      }
    },
    methods: {
      handleExcel() {
        this.excelBox = true;
<style>
</style>
        // let opt = {
        //   title: '标签住户导入',
        //   column: [{
        //     label: '门牌地址编码',
        //     prop: 'title'
        //   }, {
        //     label: '标签ID',
        //     prop: 'title'
        //   }, {
        //     label: '标签名称',
        //     prop: 'title'
        //   }, {
        //     label: '颜色',
        //     prop: 'title'
        //   }, {
        //     label: '备注',
        //     prop: 'title'
        //   }, {
        //     label: '用户id',
        //     prop: 'title'
        //   }, {
        //     label: '住户id',
        //     prop: 'title'
        //   }],
        //   data: []
        // }
        // this.$Export.excel({
        //   title: opt.title,
        //   columns: opt.column,
        //   data: opt.data
        // });
      },
      handleExcel1() {
        let opt = {
          title: '文档标题',
          column: [{
            label: '多级表头',
            prop: 'header',
            children: [{
              label: '标题1',
              prop: 'title1'
            }, {
              label: '标题2',
              prop: 'title2'
            }]
          }],
          data: [{
            title1: "测试数据1",
            title2: "测试数据2"
          }, {
            title1: "测试数据2",
            title2: "测试数据2"
          }]
        }
        this.$Export.excel({
          title: opt.title,
          columns: opt.column,
          data: opt.data
        });
      },
      handleTemplate() {
        exportBlob(`/api/blade-householdLabel/householdLabel/export-userHouseLabel?${this.website.tokenHeader}=${getToken()}`).then(res => {
          downloadXls(res.data, "标签住户数据模板.xlsx");
        })
      },
    }
  }
</script>
src/views/userHouse/lable/list.vue
@@ -1,11 +1,180 @@
<template>
  <div id="">
    111111111111111111
  </div>
</template>
 <el-row>
   <el-col :span="24">
     <basicContainer>
       <avue-crud ref="crud" :option="option" :before-open="beforeOpen" :before-close="beforeClose" :data="data"
         @tree-load="treeLoad" @row-save="rowSave" @row-del="rowDel" @refresh-change="refreshChange" @row-update="rowUpdate"
         @on-load="onLoad">
         <template #menu="{row,size}">
           <el-button :size="size" type="text" icon="el-icon-circle-plus-outline" size="small" @click="handleAdd(row)">新增子级
           </el-button>
         </template>
       </avue-crud>
     </basicContainer>
   </el-col>
 </el-row>
</template>
<script>
  import {
    getTreeList,
    add,
    update,
    remove
  } from '@/api/label/label'
  export default {
    data() {
      return {
        query: {
          parentId: 0
        },
        data: [],
        loading: true,
        page: {
          pageSize: 10,
          currentPage: 1,
          total: 0
        },
        parentId: undefined,
        option: {
          lazy: true,
          rowKey: 'id',
          defaultExpandAll:true,
          column: [{
            label: '名称',
            prop: 'name'
          }, {
            label: 'ID',
            prop: 'id',
            display: false
          }, {
            label: '排序',
            prop: 'sort',
          }, {
            label: '父级id',
            prop: 'parentId',
            type: "tree",
            dicData: [],
            hide: true,
            addDisabled: false,
            props: {
              label: "name",
              value: 'id'
            },
          }]
        },
        data1: [],
        selectionList: [],
      }
    },
    methods: {
      refreshChange() {
        this.onLoad();
      },
      beforeOpen(done, type) {
        if (["add", "edit"].includes(type)) {
          this.initData();
        }
        done();
      },
      beforeClose(done) {
        this.parentId = "";
        const column = this.findObject(this.option.column, "parentId");
        column.value = "";
        column.addDisabled = false;
        done();
      },
      initData() {
        const column = this.findObject(this.option.column, "parentId");
        column.dicData = this.data;
      },
      selectionClear() {
        this.selectionList = [];
      },
      onLoad(page, params = {}) {
        this.loading = true;
        getTreeList().then(res => {
          const data = res.data.data;
          this.data = data;
          this.loading = false;
          this.selectionClear();
        });
      },
      rowDel(row, index, done) {
        console.log("*************")
        this.$confirm("确定将选择数据删除?", {
            confirmButtonText: "确定",
            cancelButtonText: "取消",
            type: "warning"
          })
          .then(() => {
            return remove(row.id);
          })
          .then(() => {
            this.$message({
              type: "success",
              message: "操作成功!"
            });
            done(row);
          });
      },
      rowSave(row, done) {
        row.parentId = this.parentId;
        row.labelName = row.name
        add(row).then(() => {
          this.initFlag = false;
          this.onLoad(this.page);
          this.$message({
            type: "success",
            message: "操作成功!"
          });
          done();
        }, error => {
          window.console.log(error);
          loading();
        });
      },
      rowUpdate(row, index, done) {
        const column = this.findObject(this.option.column, "parentId");
        column.value = row.id;
        done(row)
      },
      handleAdd(row) {
        const column = this.findObject(this.option.column, "parentId");
        column.value = row.id;
        column.addDisabled = true;
        this.parentId = row.id
        this.$refs.crud.rowAdd()
      },
      treeLoad(tree, treeNode, resolve) {
        setTimeout(() => {
          resolve([{
            id: new Date().getTime(),
            date: '2016-05-01',
            name: '王小虎',
            address: '上海市普陀区金沙江路 1519 弄',
            hasChildren: true
          }])
        }, 1000)
      }
    }
  }
</script>
<style>
</style>
src/views/userHouse/lable/statistics.vue
@@ -1,11 +1,101 @@
<template>
  <div id="">
    333333333333
  </div>
</template>
  <!-- <avue-data-box :option="option"></avue-data-box> -->
  <!-- <div v-for="item in items" :key="item.id"> -->
  <div id="">
    <div id="" v-for="(item,index) in 10">
      <el-row>
        <el-col :span="24">
          <div class="grid-content bg-purple-dark">
            <el-tag type="danger">标签五</el-tag>
          </div>
        </el-col>
      </el-row>
      <el-row>
        <el-col :span="24">
          <div class="grid-content bg-purple-dark">
            <el-divider content-position="left">少年包青天</el-divider>
          </div>
        </el-col>
      </el-row>
     <!-- <el-row :gutter="20">
        <el-col :span="6">
          <div class="grid-content bg-purple"></div>
        </el-col>
        <el-col :span="6">
          <div class="grid-content bg-purple"></div>
        </el-col>
        <el-col :span="6">
          <div class="grid-content bg-purple"></div>
        </el-col>
        <el-col :span="6">
          <div class="grid-content bg-purple"></div>
        </el-col>
      </el-row> -->
      <div id="" v-for="(item,index) in 10" style="display: flex;">
        <div id="">
          {{index}}
        </div>
      </div>
    </div>
  </div>
  <!-- </div> -->
</template>
<script>
  export default {
    data() {
      return {
        items: [],
        option: {
          span: 4,
          data: []
        },
      }
    }
  }
</script>
<style>
 /* .el-row {
    margin-bottom: 20px;
    &:last-child {
      margin-bottom: 0;
    }
  }
  .el-col {
    border-radius: 4px;
  }
  .bg-purple-dark {
    background: #99a9bf;
  }
  .bg-purple {
    background: #d3dce6;
  }
  .bg-purple-light {
    background: #e5e9f2;
  }
  .grid-content {
    border-radius: 4px;
    min-height: 36px;
  }
  .row-bg {
    padding: 10px 0;
    background-color: #f9fafc;
  } */
</style>