vue+element components的简单应用

vue+element components的简单应用

父页面

<template>
  <div class="ddblMainClass">
    <el-row style="margin-top:10px">
      <el-col :span="18">
        <el-radio-group v-model="search.ddblRadio" @change="ddblRadioChangeAction">
          <el-radio :label="0">校内调动</el-radio>
          <el-radio :label="1">调入</el-radio>
          <el-radio :label="2">调出</el-radio>
        </el-radio-group>
      </el-col>
      <el-col :span="6">
        <div style="float:right;">
          <el-button type="primary" @click="transferSearchAction">检索</el-button>
        </div>
      </el-col>
    </el-row>
    <el-divider class="optHeadTopDivider"></el-divider>
    <el-row :gutter="5" style="margin-top:10px" ref="searchTopBox">
      <el-col :span="7">
        <el-col :span="6" class="text-l-ht">所属部门</el-col>
        <el-col :span="18">
          <el-select v-model="search.ssbmName" clearable @clear="ssbmClear" placeholder="请选择">
            <el-option :value="search.ssbmName" style="height: auto">
              <el-tree
                :data="jgTreedata"
                node-key="jgTree.id"
                ref="jgTreeRef"
                highlight-current
                :props="jgTree"
                @node-click="handleSsbmTreeNodeClick"
              ></el-tree>
            </el-option>
          </el-select>
        </el-col>
      </el-col>
      <el-col :span="6">
        <el-col :span="8" class="text-l-ht">工号</el-col>
        <el-col :span="16">
          <el-input v-model="search.gh" placeholder="请录入工号"></el-input>
        </el-col>
      </el-col>
      <el-col :span="6">
        <el-col :span="8" class="text-l-ht">姓名</el-col>
        <el-col :span="16">
          <el-input v-model="search.xm" placeholder="请录入姓名"></el-input>
        </el-col>
      </el-col>
    </el-row>
    <el-row style="margin-top:10px;">
      <el-col :span="24">
        <component :is="comName" ref="myChild" :transferManageParam="transferManageParam"></component>
      </el-col>
    </el-row>
  </div>
</template>
<script>
import transferManageXndd from "./component/transferManageXndd.vue";
import transferManageDR from "./component/transferManageDR.vue";
import transferManageDC from "./component/transferManageDC.vue";
export default {
  data() {
    return {
      BoxH: document.body.clientHeight - 80,
      comName: "transferManageXndd",
      search: {
        ddblRadio: 0,
        ssbmValue: "",
        ssbmName: "",
      },
      jgTree: {
        id: "id",
        label: "name",
        children: "children",
      },
      jgTreedata: [],
      transferManageParam: {},
    };
  },
  components: {
    transferManageXndd: transferManageXndd,
    transferManageDR: transferManageDR,
    transferManageDC: transferManageDC,
  },
  methods: {
    transferSearchAction() {
      let rtp = this.search.ddblRadio;
      this.transferManageParam = {
        ssbmM: this.search.ssbmValue,
        gh: this.search.gh,
        xm: this.search.xm,
      };
      if (rtp == 0) {
        this.$refs.myChild.getXnddData();
      } else if (rtp == 1) {
        this.$refs.myChild.getDrData();
      }
      if (rtp == 2) {
        this.$refs.myChild.getDcData();
      }
    },
    ddblRadioChangeAction() {
      let rtp = this.search.ddblRadio;
      if (rtp == 0) {
        this.comName = "transferManageXndd";
      } else if (rtp == 1) {
        this.comName = "transferManageDR";
      }
      if (rtp == 2) {
        this.comName = "transferManageDC";
      }
      this.resizeTableHeight();
    },
    ssbmClear() {
      this.search.ssbmValue = "";
    },
    handleSsbmTreeNodeClick(data) {
      this.search.ssbmValue = data.id;
      this.search.ssbmName = data.name;
    },
    async getjgTreeData() {
      const param = {
        flagCX: "0",
        sfxsxxhead: "1",
      };
      return this.$httpGet("getDepartmentTreeData", param).then((res) => {
        if (res.SUCCESS === "1") {
          this.$set(this, "jgTreedata", res.DATA);
        }
      });
    },
    handle() {
      this.BoxH = document.body.clientHeight - 80;
      this.resizeTableHeight();
    },
    debounce(fn, wait) {
      let timeout = null;
      return function () {
        if (timeout !== null) clearTimeout(timeout);
        timeout = setTimeout(fn, wait);
      };
    },
    resize() {
      this.debounce(this.handle, 500)();
    },
    resizeTableHeight() {
      let rtp = this.search.ddblRadio;
      if (rtp == 0) {
        this.$refs.myChild.resizeTableHeight();
        this.$refs.myChild.setHeight(this.BoxH);
      } else if (rtp == 1) {
        this.$refs.myChild.resizeTableHeight();
        this.$refs.myChild.setHeight(this.BoxH);
      }
      if (rtp == 2) {
        this.$refs.myChild.resizeTableHeight();
        this.$refs.myChild.setHeight(this.BoxH);
      }
    },
  },
  async created() {
    await this.getjgTreeData();
    this.$refs.myChild.getXnddData();
    this.$refs.myChild.setHeight(this.BoxH);
  },
  mounted() {
    this.resize();
    window.addEventListener("resize", this.resize);
  },
  beforeDestroy() {
    window.removeEventListener("resize", this.resize);
  },
};
</script>
<style scoped>
.ctn-box-shadow {
  box-shadow: 0 2px 4px rgba(0, 0, 0, 0.12), 0 0 6px rgba(0, 0, 0, 0.04);
}
.text-l-ht {
  line-height: 32px;
  text-align: right;
}
.optHeadTopDivider {
  margin: 5px 0 20px 0 !important;
}
</style>

子页面

<template>
  <div class="xnddClass">
    <el-row>
      <el-col :span="16" style="padding:10px 10px 10px 0px;">
        <el-table
          fixed
          stripe
          :data="xnddTopLeftDataTable?xnddTopLeftDataTable:null"
          ref="xnddTopLeftTable"
          style="width: 100%;margin-bottom: 0px;"
          highlight-current-row
          :header-cell-style="{'text-align':'center'}"
          :height="xnddTopLeftHeight"
          @current-change="handleXnddTopLeftHeightRowChange"
        >
          <af-table-column prop="rowId" label="序号" type="index" width="50" align="center"></af-table-column>
          <af-table-column prop="htmc" label="工号" align="center" show-overflow-tooltip></af-table-column>
          <af-table-column prop="htqsrq" label="姓名" show-overflow-tooltip></af-table-column>
          <af-table-column prop="htjsrq" label="性别" align="center" show-overflow-tooltip></af-table-column>
          <af-table-column prop="htqdrq" label="所属部门" align="center" show-overflow-tooltip></af-table-column>
          <af-table-column prop="htlx" label="岗位" show-overflow-tooltip></af-table-column>
        </el-table>
      </el-col>
      <el-col :span="8" style="padding:10px 0px 10px 0px;" ref="topRightBox">
        <el-form ref="xnddTopRightFrom" :model="xnddTopRightFrom" label-width="100px">
          <el-form-item class="el-form-item-1" label="调动文号">
            <el-input v-model="xnddTopRightFrom.name"></el-input>
          </el-form-item>
          <el-form-item class="el-form-item-1" label="现部门">
            <el-input v-model="xnddTopRightFrom.name"></el-input>
          </el-form-item>
          <el-form-item class="el-form-item-1" label="现岗位">
            <el-select v-model="xnddTopRightFrom.region" placeholder="请选择活动区域">
              <el-option label="区域一" value="shanghai"></el-option>
              <el-option label="区域二" value="beijing"></el-option>
            </el-select>
          </el-form-item>
          <el-form-item class="el-form-item-1" label="现编制">
            <el-input v-model="xnddTopRightFrom.name"></el-input>
          </el-form-item>
          <el-form-item class="el-form-item-1" label="调动类别">
            <el-select v-model="xnddTopRightFrom.region" placeholder="请选择活动区域">
              <el-option label="区域一" value="shanghai"></el-option>
              <el-option label="区域二" value="beijing"></el-option>
            </el-select>
          </el-form-item>
          <el-form-item class="el-form-item-1" label="异动日期">
            <el-date-picker v-model="xnddTopRightFrom.value1" type="date" placeholder="选择日期"></el-date-picker>
          </el-form-item>
          <el-form-item class="el-form-item-1" label="工资转移日期">
            <el-date-picker v-model="xnddTopRightFrom.value1" type="date" placeholder="选择日期"></el-date-picker>
          </el-form-item>
          <el-form-item class="el-form-item-1" label="异动原因">
            <el-input v-model="xnddTopRightFrom.name"></el-input>
          </el-form-item>
        </el-form>
        <div style="float:right;">
          <el-button type="primary" plain>主要按钮</el-button>
          <el-button plain>朴素按钮</el-button>
          <el-button plain>朴素按钮</el-button>
        </div>
      </el-col>
    </el-row>
    <el-row>
      <el-col :span="24" style="padding:10px 0px;">
        <el-table
          fixed
          stripe
          :data="xnddButtomDataTable?xnddButtomDataTable:null"
          ref="xnddButtomTable"
          style="width: 100%;margin-bottom: 0px;"
          highlight-current-row
          :header-cell-style="{'text-align':'center'}"
          :height="xnddButtomHeight"
          @current-change="handleXnddButtomHeightRowChange"
        >
          <af-table-column prop="rowId" label="序号" type="index" width="50" align="center"></af-table-column>
          <af-table-column prop="htmc" label="工号" align="center" show-overflow-tooltip></af-table-column>
          <af-table-column prop="htqsrq" label="姓名" show-overflow-tooltip></af-table-column>
          <af-table-column prop="htjsrq" label="原部门" show-overflow-tooltip></af-table-column>
          <af-table-column prop="htqdrq" label="原岗位" show-overflow-tooltip></af-table-column>
          <af-table-column prop="htqdrq" label="现部门" show-overflow-tooltip></af-table-column>
          <af-table-column prop="htlx" label="现岗位" show-overflow-tooltip></af-table-column>
          <af-table-column prop="htlx" label="异动类别" show-overflow-tooltip></af-table-column>
          <af-table-column prop="htlx" label="异动日期" show-overflow-tooltip></af-table-column>
        </el-table>
      </el-col>
    </el-row>
  </div>
</template>
<script>
export default {
  data() {
    return {
      ctnHeight: null,
      xnddTopLeftDataTable: [],
      xnddTopLeftHeight: null,
      xnddTopLeftCurrent: null,
      xnddButtomDataTable: [],
      xnddButtomHeight: null,
      xnddButtomCurrent: null,
      xnddTopRightFrom: {},
    };
  },
  props: {
    transferManageParam: {},
  },
  methods: {
    getXnddData() {
      console.log("d=" + this.transferManageParam.gh);
    },
    handleXnddButtomHeightRowChange(row) {
      if (row) {
        this.xnddButtomCurrent = row;
      }
    },
    handleXnddTopLeftHeightRowChange(row) {
      if (row) {
        this.xnddTopLeftCurrent = row;
      }
    },
    setHeight(ctnheight) {
      this.ctnHeight = ctnheight;
    },
    resizeTableHeight() {
      let heighttp = 0;
      heighttp = this.$refs.topRightBox.$el.offsetHeight;
      console.log("heighttp=" + heighttp);
      this.xnddTopLeftHeight = heighttp > 435 ? heighttp : 435;
      let buttomTableHeight = 0;
      buttomTableHeight = this.ctnHeight - heighttp;
      this.xnddButtomHeight = buttomTableHeight > 400 ? buttomTableHeight : 400;
    },
  },
};
</script>
<style scoped>
.ctn-box-shadow {
  box-shadow: 0 2px 4px rgba(0, 0, 0, 0.12), 0 0 6px rgba(0, 0, 0, 0.04);
}
.xnddClass >>> .el-form-item-1,
.el-select--small,
.el-date-editor--date {
  width: 100%;
}
.xnddClass >>> .el-form-item__content {
  width: calc(100% - 100px);
}
</style>
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
VueElement UI是非常常用的前端开发工具,可以帮助我们快速构建漂亮且功能强大的导航页。 首先,你需要确保已经安装了VueElement UI。可以通过npm或yarn来安装它们: ``` npm install vue npm install element-ui ``` 或者 ``` yarn add vue yarn add element-ui ``` 接下来,你可以创建一个Vue组件来实现导航页。假设你的导航页需要有多个菜单项,你可以使用Element UI的Menu组件来实现。 在你的Vue组件中,首先导入所需的Element UI组件: ```vue <template> <div> <el-menu :default-active="activeIndex" mode="horizontal"> <el-menu-item index="1">菜单项1</el-menu-item> <el-menu-item index="2">菜单项2</el-menu-item> <el-menu-item index="3">菜单项3</el-menu-item> </el-menu> </div> </template> <script> import { Menu, MenuItem } from 'element-ui'; export default { components: { 'el-menu': Menu, 'el-menu-item': MenuItem, }, data() { return { activeIndex: '1', // 默认选中的菜单项 }; }, }; </script> <style> /* 样式可以根据需要自行调整 */ </style> ``` 以上代码中,我们使用了`el-menu`和`el-menu-item`来创建菜单和菜单项。`default-active`属性用于设置默认选中的菜单项,你可以根据需要进行调整。 最后,在你的主Vue实例中引入该组件,并将其挂载到一个HTML元素上: ```vue <template> <div id="app"> <my-navigation></my-navigation> </div> </template> <script> import MyNavigation from './MyNavigation.vue'; export default { components: { 'my-navigation': MyNavigation, }, }; </script> ``` 这样,你就可以在你的Vue应用中使用这个导航页组件了。记得在入口文件中引入Element UI样式文件: ```javascript import 'element-ui/lib/theme-chalk/index.css'; ``` 希望对你有所帮助!如有更多问题,请随时提问。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值