123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253 |
- <template>
- <div class="DeviceType">
- <el-button size="mini" type="primary" @click="isShowDialog=true">新建分类</el-button>
- <el-tree
- class="filter-tree"
- :data="typeDataTree"
- :props="defaultProps"
- @node-click="handleNodeClick"
- ref="tree"
- ></el-tree>
- <el-dialog title="新建分类" :visible.sync="isShowDialog" append-to-body>
- <el-form :model="formData" label-width="100px">
- <el-form-item label="父分类:">
- <el-select
- :disabled="isRoot"
- v-for="(arrItem,key) in selectList"
- :key="key"
- v-model="selectArr[key]"
- filterable
- placeholder="请选择"
- value-key="id"
- @change="selectedEvt"
- @focus="position=key"
- >
- <el-option
- v-for="item in arrItem"
- :key="item.id"
- :value="item.id"
- :label="item.name"
- ></el-option>
- </el-select>
- <el-checkbox v-model="isRoot" style="margin-left: 10px">根目录</el-checkbox>
- </el-form-item>
- <el-form-item label="分类名称:">
- <el-input v-model="formData.name" placeholder="请输入名称"></el-input>
- </el-form-item>
- <el-form-item label="配置数据:">
- <el-input type="textarea" v-model="formData.meta" placeholder="请输入内容,JSON格式"></el-input>
- </el-form-item>
- </el-form>
- <div slot="footer">
- <el-button @click="isShowDialog=false">取 消</el-button>
- <el-button type="primary" @click="handleSave">保 存</el-button>
- </div>
- </el-dialog>
- <div>
- <p>d</p>
- <p>d</p>
- <p>d</p>
- <p>d</p>
- <p>d</p>
- <p>d</p>
- <p>d</p>
- <p>d</p>
- <p>d</p>
- <p>d</p>
- <p>d</p>
- <p>d</p>
- <p>d</p>
- <p>d</p>
- <p>d</p>
- <p>d</p>
- <p>1</p>
- <p>d</p>
- <p>d</p>
- <p>d</p>
- <p>d</p>
- <p>d</p>
- <p>d</p>
- <p>d</p>
- <p>d</p>
- <p>d</p>
- <p>d</p>
- <p>d</p>
- <p>d</p>
- <p>d</p>
- <p>d</p>
- <p>d</p>
- <p>d</p>
- <p>d</p>
- <p>d</p>
- <p>d</p>
- <p>d</p>
- <p>d</p>
- <p>d</p>
- <p>d</p>
- <p>d</p>
- <p>d</p>
- <p>d</p>
- <p>22</p>
- </div>
- </div>
- </template>
- <script>
- import { mapActions } from "vuex";
- // tree配置选项
- const defaultProps = { children: "children", label: "name" };
- export default {
- name: "DeviceType",
- data() {
- return {
- isShowDialog: false,
- isRoot: false,
- position: null,
- selectArr: [],
- selectList: [],
- formData: {
- name: "",
- meta: ""
- },
- typeDataTree: [], // tree 数据
- selectedItem: null,
- // tree配置选项
- defaultProps
- };
- },
- mounted() {
- this.loadTypes(-1); //根级别分类
- },
- watch: {
- filterText(val) {
- this.$refs.tree.filter(val);
- },
- selectArr(ov, nv) {
- console.log("selectArr", ov, nv);
- },
- isRoot(ov, nv) {
- console.log("isRoot", ov, nv);
- if (ov) {
- //清理所有选择
- this.selectList.splice(1, this.selectList.length);
- this.selectArr.splice(0, this.selectArr.length);
- }
- }
- },
- methods: {
- ...mapActions(["fetch"]),
- loadTypes(pid) {
- this.fetch({
- api: "/device/device-type/list-parent",
- method: "GET",
- data: { parentId: pid },
- success: res => {
- console.log(res);
- if (pid > 0) {
- let p = this.findTypesByid(
- { id: -1, children: this.typeDataTree },
- pid
- );
- if (p) this.$set(p, "children", res);
- //这里的切入点很特别,需要等待截取数据后再加入
- let arr = [];
- for (let i = 0; i < res.length; i++) {
- arr.push({ id: res[i].id, name: res[i].name });
- }
- if (arr.length > 0)
- this.selectList.splice(
- this.position + 1,
- this.selectList.length,
- arr
- );
- else
- this.selectList.splice(
- this.position + 1,
- this.selectList.length
- );
- this.selectArr.splice(
- this.position + 1,
- this.selectArr.length
- );
- } else {
- this.typeDataTree = res;
- // 初始化第一级
- let arr = [];
- for (let i = 0; i < res.length; i++) {
- arr.push({ id: res[i].id, name: res[i].name });
- }
- this.selectList.push(arr);
- }
- },
- fail: err => {
- console.log("loadTypes");
- console.log(err);
- if (err.errMsg) this.$message.error(err.errMsg);
- else this.$message.error("服务器发生异常");
- }
- });
- },
- findTypesByid(root, id) {
- if (!root) return null;
- else if (root.id === id) return root;
- else if (root.children) {
- for (let i = 0; i < root.children.length; i++) {
- let ret = this.findTypesByid(root.children[i], id);
- if (ret) return ret;
- }
- return null;
- } else return null;
- },
- // 节点被点击时的回调
- handleNodeClick(e) {
- console.log(e);
- // 获取下一级列表
- this.loadTypes(e.id);
- setTimeout(() => {
- // this.handleNodeClick(e)
- }, 1000);
- // let count = 0
- // if(count++ == 0) {
- // this.handleNodeClick()
- // }else return
- },
- selectedEvt(item) {
- console.log("看看啥", item, this.position);
- // 获取下一级列表
- this.loadTypes(item);
- },
- handleSave(e) {
- console.log(e);
- let data = { name: this.formData.name, meta: this.formData.meta };
- if (!this.isRoot)
- data.parentId = this.selectArr[this.selectArr.length - 1];
- this.fetch({
- api: "/device/device-type/add",
- data,
- success: res => {
- console.log(res);
- this.$message.info("添加成功!");
- this.isShowDialog = false; //关闭
- //页面所有数据初始化
- this.init();
- },
- fail: err => {
- console.log(err);
- if (err.errMsg) this.$message.error(err.errMsg);
- else this.$message.error("服务器发生异常");
- }
- });
- },
- init() {
- this.selectArr.splice(0, this.selectArr.length);
- this.selectList.splice(0, this.selectList.length);
- this.position = null;
- this.loadTypes(-1); //加载根
- }
- }
- };
- </script>
- <style lang="scss" scoped>
- </style>
|