Browse Source

auto commit

gcz 3 years ago
parent
commit
44f7199164
3 changed files with 392 additions and 5 deletions
  1. 1 1
      package.json
  2. 386 0
      src/components/address.vue
  3. 5 4
      src/components/header.vue

+ 1 - 1
package.json

@@ -28,4 +28,4 @@
     "sass-loader": "^8.0.2",
     "vue-template-compiler": "^2.6.11"
   }
-}
+}

+ 386 - 0
src/components/address.vue

@@ -0,0 +1,386 @@
+
+<template>
+  <div>
+    <el-tooltip
+      effect="dark"
+      :content="addressName"
+      placement="top"
+      :enterable="false"
+      :disabled="disabled"
+    >
+      <el-cascader
+        :disabled="casDisabled"
+        :clearable="clearable"
+        ref="areaSelect"
+        v-model="areaCodeList"
+        :props="belongRegoinProps"
+        :options="belongRegoinOptions"
+        placeholder="请选择"
+        @change="belongRegionChange"
+        @visible-change="visibleChange"
+        style="width: 100%"
+      >
+      </el-cascader>
+    </el-tooltip>
+  </div>
+</template>
+
+
+<script>
+// https://gitee.com/xiong_chencheng_1127/areaSelect/tree/master
+// import AreaCascader from "../../components/areaCascader.vue";
+// components: {
+//     AreaCascader,
+//   },
+//   <Area-cascader
+//               @selectedAreaList="selectedAreaList"
+//               :isCurrentOrgDefaultArea="false"
+//               :clearable="true"
+//             ></Area-cascader>
+// 这里是我项目中自己封装的get请求 各位可自己封装
+// import { get } from "@/apis/apicommon";
+var Mock = require("mockjs");
+let dataList = Mock.mock({
+  // 属性 list 的值是一个数组,其中含有 1 到 10 个元素
+  "data|1-10": [
+    {
+      // 属性 id 是一个自增数,起始值为 1,每次增 1
+      "id|1-10000": 1,
+      "name|+1": "@city(true)",
+    },
+  ],
+});
+export default {
+  name: "areaCascader",
+  components: {},
+  // 注意:isCurrentOrgDefaultArea与isPortDefaultArea不能同时为true
+  props: {
+    setLevel: {
+      type: Number,
+      default: 5,
+    },
+    // true开启默认回显当前账号所属区划地址,为false时关闭回显并且可选择任意区划
+    isCurrentOrgDefaultArea: {
+      type: Boolean,
+      default: true,
+    },
+    // 回显指定区划地址的对象数据,必须为以下指定格式字段,切且注意该对象传入时间必须在该组件初始化之前
+    defaultAddressInfos: {
+      type: Object,
+      // default:{
+      //   addressName:"",
+      //   provinceCode:"",
+      //   cityCode:"",
+      //   countyCode:"",
+      //   streetCode:"",
+      //   communityCode:"",
+      //   level:""
+      // }
+    },
+    // true开启默认回显指定区划地址,需必传对象defaultAddressInfos,且与isCurrentOrgDefaultArea不能同时为true
+    isPortDefaultArea: {
+      type: Boolean,
+      default: false,
+    },
+    // 是否可清空已选,默认不可清空
+    clearable: {
+      type: Boolean,
+      default: false,
+    },
+    casDisabled: {
+      type: Boolean,
+      default: false,
+    },
+  },
+  watch: {},
+  data() {
+    const self = this;
+    return {
+      disabled: true,
+      addressName: "",
+      defaultHosuse: {
+        province: "",
+        city: "",
+        area: "",
+        town: "",
+        vill: "",
+      },
+      CurrentOrg: {},
+      currentLastLevelCode: "",
+      CurrentLevel: Number,
+      areaCodeList: [],
+      currentOrgLevel: "",
+      belongRegoinOptions: [],
+      belongRegoinProps: {
+        checkStrictly: true,
+        lazy: true,
+        lazyLoad(node, resolve) {
+          setTimeout(() => {
+            self.getAreaForLazyLoad(node, resolve);
+          }, 100);
+        },
+      },
+    };
+  },
+  created() {
+    // console.log(data);
+    if (this.isCurrentOrgDefaultArea) {
+      // 通过当前账号所在区划回显
+      this.getCurrentOrg();
+    }
+    if (this.isPortDefaultArea) {
+      // 通过指定区划回显
+      this.getDefaultArea();
+    }
+  },
+  methods: {
+    visibleChange(val) {
+      console.log(val);
+      if (val) {
+        this.disabled = true;
+      } else if (!val && this.addressName) {
+        this.disabled = false;
+      }
+    },
+    belongRegionChange(val) {
+      let res = this.$refs.areaSelect.getCheckedNodes();
+      console.log(res);
+      if (res && res.length > 0) {
+        this.addressName =
+          res[0].pathLabels[0] +
+          (res[0].pathLabels[1] || "") +
+          (res[0].pathLabels[2] || "") +
+          (res[0].pathLabels[3] || "") +
+          (res[0].pathLabels[4] || "");
+        let areaNameObject = {
+          provinceName: res[0].pathLabels[0],
+          cityName: res[0].pathLabels[1],
+          countyName: res[0].pathLabels[2],
+          streetName: res[0].pathLabels[3],
+          communityName: res[0].pathLabels[4],
+        };
+        let areaCodeObject = {
+          provinceCode: res[0].path[0],
+          cityCode: res[0].path[1],
+          countyCode: res[0].path[2],
+          streetCode: res[0].path[3],
+          communityCode: res[0].path[4],
+        };
+        let data = {
+          areaNameObject,
+          areaCodeObject,
+        };
+        this.$emit("selectedAreaList", data);
+      } else {
+        this.addressName = "";
+        let areaNameObject = {
+          provinceName: "",
+          cityName: "",
+          countyName: "",
+          streetName: "",
+          communityName: "",
+        };
+        let areaCodeObject = {
+          provinceCode: "",
+          cityCode: "",
+          countyCode: "",
+          streetCode: "",
+          communityCode: "",
+        };
+        let data = {
+          areaNameObject,
+          areaCodeObject,
+        };
+        this.$emit("selectedAreaList", data);
+        this.disabled = true;
+      }
+    },
+
+    getAreaForLazyLoad(node, resolve) {
+      const { level } = node;
+      let data = {};
+      if (level == 0) {
+        data = {
+          areaCode: "000000",
+        };
+      } else if (
+        level == 1 ||
+        level == 2 ||
+        level == 3 ||
+        level == 4 ||
+        level == 5
+      ) {
+        data = {
+          areaCode: node.value,
+        };
+      } else {
+        return false;
+      } // 这里是接口
+      // get("/area/getNextAreaInfoByCode", data)
+      //   .then((res) => {
+      // mock.js模拟接口
+      let res = Mock.mock({
+        // 属性 list 的值是一个数组,其中含有 1 到 10 个元素
+        "data|1-10": [
+          {
+            // 属性 id 是一个自增数,起始值为 1,每次增 1
+            "id|1-10000": "1",
+            "name|+1": "@city(true)",
+          },
+        ],
+      });
+      console.log(data);
+      if (res.data) {
+        let isContain = data.areaCode.search(this.currentLastLevelCode);
+        let oData = [];
+        // let oData = this.formatAreaData(res.data, level);
+        if (this.isCurrentOrgDefaultArea || this.isPortDefaultArea) {
+          let arrList = this.formatAreaData(res.data, level);
+          arrList.map((item, index) => {
+            if (
+              (item.level <= this.CurrentLevel &&
+                this.isCurrentOrgDefaultArea) ||
+              (data.areaCode !== this.currentLastLevelCode &&
+                this.CurrentLevel >= level) ||
+              isContain != 0
+            ) {
+              oData.push(Object.assign({}, item, { disabled: true }));
+            } else {
+              oData.push(Object.assign({}, item, { disabled: false }));
+            }
+          });
+        } else {
+          oData = this.formatAreaData(res.data, level);
+        }
+        // this.belongRegoinOptions = oData
+        if (oData.length == 0) {
+          //   // console.log('子节点数据为空', node)
+          //   node.syncCheckState(node.value);
+          //   const checkedNode = this.$refs.areaSelect.getCheckedNodes();
+          //   // console.log('获得刚才选中的节点', checkedNode)
+          //   node.syncCheckState(node.value)
+          //   node.doCheck(true)
+          //   this.$set(node, 'leaf', true)
+          //   oData = undefined;
+          //   resolve(oData);
+          //   return;
+        }
+        resolve(oData);
+      }
+      // })
+      // .catch((err) => {
+      //   console.log(err);
+      //   this.$message.error(err);
+      // });
+    },
+    formatAreaData(data, level) {
+      return data.map((item) => {
+        item.names = item.name;
+        item.value = item.id;
+        item.label = item.name;
+        item.leaf = level >= this.setLevel - 1;
+        return item;
+      });
+    },
+    handleAreaCode() {
+      let areaCodeList = [];
+      if (this.defaultHosuse.province) {
+        areaCodeList.push(this.defaultHosuse.province);
+        this.currentLastLevelCode = this.defaultHosuse.province;
+      }
+      if (this.defaultHosuse.city) {
+        areaCodeList.push(this.defaultHosuse.city);
+        this.currentLastLevelCode = this.defaultHosuse.city;
+      }
+      if (this.defaultHosuse.area) {
+        areaCodeList.push(this.defaultHosuse.area);
+        this.currentLastLevelCode = this.defaultHosuse.area;
+      }
+      if (this.defaultHosuse.town) {
+        areaCodeList.push(this.defaultHosuse.town);
+        this.currentLastLevelCode = this.defaultHosuse.town;
+      }
+      if (this.defaultHosuse.vill) {
+        areaCodeList.push(this.defaultHosuse.vill);
+        this.currentLastLevelCode = this.defaultHosuse.vill;
+      }
+
+      this.areaCodeList = areaCodeList;
+      console.log(areaCodeList);
+      if (this.addressName == "") {
+        this.disabled = true;
+      } else {
+        this.disabled = false;
+      }
+    },
+    getDefaultArea() {
+      console.log(this.defaultAddressInfos);
+      this.addressName = this.defaultAddressInfos.addressName;
+      this.defaultHosuse.province = this.defaultAddressInfos.provinceCode || "";
+      this.defaultHosuse.city = this.defaultAddressInfos.cityCode || "";
+      this.defaultHosuse.area = this.defaultAddressInfos.countyCode || "";
+      this.defaultHosuse.town = this.defaultAddressInfos.streetCode || "";
+      this.defaultHosuse.vill = this.defaultAddressInfos.communityCode || "";
+      this.CurrentLevel = this.defaultAddressInfos.level;
+      this.handleAreaCode();
+    },
+    getCurrentOrg() {
+      console.log(dataList);
+      // get("/organization/getCurrentOrg", {}).then((res) => {
+      let res = Mock.mock({
+        // 属性 list 的值是一个数组,其中含有 1 到 10 个元素
+        "data|1-10": [
+          {
+            // 属性 id 是一个自增数,起始值为 1,每次增 1
+            "id|1-10000": "1",
+            "name|+1": "@city(true)",
+          },
+        ],
+      });
+      if (res) {
+        let data = res.data;
+        this.addressName =
+          (data.provinceName || "") +
+          (data.cityName || "") +
+          (data.countyName || "") +
+          (data.streetName || "") +
+          (data.communityName || "");
+        // this.currentOrgLevel = data.level;
+        // this.CurrentOrg = data;
+        // let {province='provinceCode',city='cityCode',area='countyCode',town='streetCode',vill='communityCode'} = data
+        // this.defaultHosuse = {province='provinceCode',city='cityCode',area='countyCode',town='streetCode',vill='communityCode'}
+        this.defaultHosuse.province = data.provinceCode;
+        this.defaultHosuse.city = data.cityCode;
+        this.defaultHosuse.area = data.countyCode;
+        this.defaultHosuse.town = data.streetCode;
+        this.defaultHosuse.vill = data.communityCode;
+        this.CurrentLevel = data.level;
+        this.handleAreaCode();
+
+        let areaNameObject = {
+          provinceName: data.provinceName,
+          cityName: data.cityName,
+          countyName: data.countyName,
+          streetName: data.streetName,
+          communityName: data.communityName,
+        };
+        let areaCodeObject = {
+          provinceCode: data.provinceCode,
+          cityCode: data.cityCode,
+          countyCode: data.countyCode,
+          streetCode: data.streetCode,
+          communityCode: data.communityCode,
+        };
+        let val = {
+          areaNameObject,
+          areaCodeObject,
+        };
+        this.$emit("selectedAreaList", val);
+      }
+      // });
+    },
+  },
+};
+</script>
+<style scoped>
+</style>

+ 5 - 4
src/components/header.vue

@@ -6,10 +6,10 @@
       </div>
       <div class="header-right">
         <ul>
-          <li><a class="link" href="#">消息</a></li>
-          <li><span>|</span></li>
-          <li><a class="link" href="#">收藏夹</a></li>
-          <li><span>|</span></li>
+          <!-- <li><a class="link" href="#">消息</a></li>
+          <li><span>|</span></li> -->
+          <!-- <li><a class="link" href="#">收藏夹</a></li>
+          <li><span>|</span></li> -->
           <li>
             <a class="link" href="#">
               王二<i class="name-icon el-icon-caret-bottom"></i>
@@ -27,6 +27,7 @@ export default {
   props: {
     msg: String,
   },
+  created() {},
 };
 </script>