vue+elementui 一周排班

<template>
  <div class="scheduling">
        <el-container>
            <el-main class="scheduling-main">
               <div class="scheduling-cont1">
                    <el-table  :span-method="objectSpanMethod" :data="gridData" size="mini"  :header-cell-style="{background:'#F5F7FA',color:'#606266'}"  :border="true">
                        <el-table-column property="num" align="center" label="工号"></el-table-column>
                        <el-table-column property="name" align="center" label="名称"></el-table-column>
                        <el-table-column property="name" align="center" label="日期" class="scheduling-table-column">
                            <el-table-column property="time" align="center" label="时间" ></el-table-column>
                        </el-table-column>
                        <el-table-column property="result1" align="center" :label="'星期一 \n 2021/04/07'" show-overflow-tooltip></el-table-column>
                        <el-table-column property="result2" align="center" :label="'星期二 \n 2021/04/08'" show-overflow-tooltip></el-table-column>
                        <el-table-column property="result3" align="center" :label="'星期三 \n 2021/04/08'"></el-table-column>
                        <el-table-column property="result4" align="center" :label="'星期四 \n 2021/04/08'"></el-table-column>
                        <el-table-column property="result5" align="center" :label="'星期五 \n 2021/04/08'"></el-table-column>
                        <el-table-column property="result6" align="center" :label="'星期六 \n 2021/04/08'"></el-table-column>
                        <el-table-column property="result7" align="center" :label="'星期日 \n 2021/04/08'"></el-table-column>
                    </el-table>
                </div>
                <div class="scheduling-position-btn">
                   <img src="../../../images/svgLogo/preview2.svg" alt="" @click="centerDialogVisible = true"> <br/><br/>
                </div>
                  <el-dialog title="护士排班"  :visible.sync="centerDialogVisible" width="80%">
                       <el-table  :span-method="objectSpanMethod" :data="gridData" size="mini"  :header-cell-style="{background:'#F5F7FA',color:'#606266'}"  :border="true">
                         <el-table-column property="checked" align="center" label="选择" >
                             <template slot-scope="scope">
                                 <el-checkbox v-model="scope.row.checked"></el-checkbox>
                             </template>
                         </el-table-column>  
                        <el-table-column property="num" align="center" label="工号"></el-table-column>
                        <el-table-column property="name" align="center" label="名称"></el-table-column>
                        <el-table-column property="name" align="center" label="日期" class="scheduling-table-column">
                            <el-table-column property="time" align="center" label="时间" ></el-table-column>
                        </el-table-column>
                        <el-table-column property="result1" align="center" :label="'星期一 \n 2021/04/07'" show-overflow-tooltip></el-table-column>
                        <el-table-column property="result2" align="center" :label="'星期二 \n 2021/04/08'" show-overflow-tooltip></el-table-column>
                        <el-table-column property="result3" align="center" :label="'星期三 \n 2021/04/08'"></el-table-column>
                        <el-table-column property="result4" align="center" :label="'星期四 \n 2021/04/08'"></el-table-column>
                        <el-table-column property="result5" align="center" :label="'星期五 \n 2021/04/08'"></el-table-column>
                        <el-table-column property="result6" align="center" :label="'星期六 \n 2021/04/08'"></el-table-column>
                        <el-table-column property="result7" align="center" :label="'星期日 \n 2021/04/08'"></el-table-column>
                    </el-table>
                        <span slot="footer" class="dialog-footer">
                            <el-button @click="centerDialogVisible = false">取 消</el-button>
                            <el-button type="primary" @click="centerDialogVisible = false">确 定</el-button>
                        </span>
                  </el-dialog>
            </el-main>
        </el-container>
    </div> 
</template>
<script>
import headers from '../../commons/header.vue'
import getdata from "../../utils/getdata.js";
export default {
components:{headers},
data(){
    return {
        titles:"排班总览",
        centerDialogVisible:false,
        isCollapse:true,
        checkList:'',
         gridData:[{
            id:'1',
            num:'2313',
            time:'上午',
            name:'庐山',
            result1:'101-106',
            result2:'101-106',
            result3:'101-106',
            result4:'休',
            result5:'101-106',
            result6:'101-106',
            result7:'101-106',
            checked:false
        },{
            id:'2',
            num:'2313',
            time:'下午',
            name:'庐山',
            result1:'101-106',
            result2:'101-106',
            result3:'101-106',
            result4:'101-106',
            result5:'101-106',
            result6:'101-106',
            result7:'休',
            checked:false
        },{
            id:'3',
            num:'2313',
            time:'晚上',
            name:'庐山',
            result1:'101-106',
            result2:'101-106',
            result3:'休',
            result4:'101-106',
            result5:'101-106',
            result6:'101-106',
            result7:'101-106',
            checked:false
        },{
            id:'4',
            num:'3256',
            time:'上午',
            name:'张三',
            result1:'101-106',
            result2:'101-106',
            result3:'休',
            result4:'101-106',
            result5:'101-106',
            result6:'101-106',
            result7:'101-106',
            checked:false
        },]

    }
},
mounted() {
    this.init()
    this.associaterotas()
  },
methods:{
  associaterotas(){
      var data = {
            doctorId: 0,
            nurseId: 0,
            scheduleDate: '',
            scheduleWeek: '第一周',
            states: '',
            timeSlot: '',
        }
      getdata.associaterotas(data).then(res =>{
        console.log(res)
      })
    },
    /**
      element-table合并单元格的函数
      columnIndex 值表示要合并的列的下标,当前示例是合并前4列。
      如果你是要合并多列,需要添加对应的列号进行判断,并且添加对应的计算方法,
        和对应的计算合并列的方法。
    */
    objectSpanMethod({ row, column, rowIndex, columnIndex }) {
        // console.log(row,columnIndex)
      if (columnIndex === 0) {
        return this.ret(row, 'firstSpan')
      } else if (columnIndex === 1) {
        return this.ret(row, 'secondSpan')
      }
    },
    ret(row, obj) {

      if (row && row[obj] != 0) {
        console.log(row[obj])
        return {
          rowspan: row[obj],
          colspan: 1
        }
      } else {
        return {
          rowspan: 0,
          colspan: 0
        }
      }
    },
   init(){
       this.buildMerge(this.gridData)
   },
    /**
     *  构建合并列数据
     *  思路:遍历所有数据,将需要合并的列的内容作为key,数据id作为value,然后依次遍历获取对应的合并列的行数
     */
    buildMerge(dataList) {
      let firstObj = {},
        secondObj = {}
      let firstObjKey = '',
        secondObjKey = ''
        // 本示例合并的前四列,对应的字段分别:class、sex、age、hobby
        // 如果你需要合并其他的字段,需修改此处字段名称
      for (let i = 0, len = dataList.length; i < len; i++) {
        firstObjKey = dataList[i].num
        secondObjKey = dataList[i].name

        if (!firstObj[firstObjKey])
          firstObj[firstObjKey] = new Array(dataList[i].id)
        else {
          firstObj[firstObjKey].push(dataList[i].id)
        }
        if (!secondObj[secondObjKey])
          secondObj[secondObjKey] = new Array(dataList[i].id)
        else {
          secondObj[secondObjKey].push(dataList[i].id)
        }
      }
      this.computeFirstSpan(firstObj, secondObj)
    },
     // 计算第一列合并总数
    computeFirstSpan(firstObj, secondObj ) {
      // 遍历计算第一列合并行数
      for (let obj in firstObj) {
        // console.log(firstObj, firstObj[obj], "shhhhhhh")
        let fristData = this.gridData.filter(d => d.id === firstObj[obj][0])[0] 
        // 获取第一条数据,对其添加 'firstSpan' 属性,并设置值
        if (fristData) fristData['firstSpan'] = firstObj[obj].length
        this.computeSecondSpan(firstObj[obj], secondObj)
      }
    },
    // 计算第二列合并总数
    computeSecondSpan(classList, secondObj) {
      // 遍历计算第二列合并行数
      for (let obj in secondObj) {
        // 判断两个id数组,取其并集,并集的长度就是合并列的行数
        let secondIds = secondObj[obj].filter(val => {
          return classList.indexOf(val) > -1
        })
        let fristData = this.gridData.filter(d => d.id === secondIds[0])[0]
        // 获取第一条数据,对其添加 'secondSpan' 属性,并设置值
        if (fristData) fristData['secondSpan'] = secondIds.length
      }
    },
}
}

</script>

<style lang="less">
/*实现表格头数据换行*/
.el-table .cell {
    /*text-align: center;*/
    white-space: pre-line !important;/*保留换行符*/
}
.scheduling{
}
.el-header{
    padding: 0;
}
.scheduling-main{
    border: 1px solid 797979;
    flex: 1;
    .scheduling-cont1{
        padding-bottom: 15px;
        .scheduling-cont1-img{
            width: 50px;
            height: 50px;
            display: inline-block;
            float: right;
            margin-top: -9px;
        }
    }
}
// 编辑
.scheduling-position-btn{
    position: fixed;
    right: 35px;
    bottom: 90px;
    img{width: 40px;height: 40px;}
}
// 表头添加斜线
//css
// 不要设置 scope 
.el-table thead.is-group th {
  background: none;
  padding: 0px;
}
.el-table thead.is-group tr:first-of-type th:first-of-type,
.el-table thead.is-group tr:last-of-type th:first-of-type {
//   background: #ffffff !important;
}
.el-table thead.is-group tr:first-of-type th:nth-of-type(3) {
  border-bottom: none;
}
.el-table thead.is-group tr:first-of-type th:nth-of-type(3) div.cell {
  text-align: right;
}
.el-table thead.is-group tr:last-of-type th:first-of-type div.cell {
  text-align: left;
}
.el-table thead.is-group tr:first-of-type th:nth-of-type(3):before {
  content: "";
  position: absolute;
  width: 1px;
  // height: 55px;
  height: 70px;  //自行调整
  top: 0;
  left: 0;
  background-color: grey;
  opacity: 0.2;
  display: block;
  transform: rotate(-68deg);
//   transform: rotate(-56deg);  //自行调整
  -webkit-transform-origin: top;
  transform-origin: top;
}
.el-table thead.is-group tr:last-of-type th:first-of-type:before {
  content: "";
  position: absolute;
  width: 1px;
//   height: 60px;
  height: 80px;  //自行调整
  bottom: 0;
  right: 0;
  background-color: grey;
  opacity: 0.2;
  display: block;
  // transform: rotate(-45deg);  //自行调整
  transform: rotate(-70deg);
  -webkit-transform-origin: bottom;
  transform-origin: bottom;
}
</style>

  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: springboot+vue+elementui 是一种常见的前后端分离开发框架组合,其中 springboot 作为后端框架,提供了丰富的开发工具和便捷的配置方式;vue 作为前端框架,提供了组件化开发和响应式数据绑定等特性;elementui 则是一套基于 vueUI 组件库,提供了丰富的 UI 组件和样式,可以快速搭建出美观的前端界面。这种组合方式可以提高开发效率,降低开发成本,是现代化 Web 应用开发的主流选择之一。 ### 回答2: Spring Boot、VueElementUI 三者都是现代企业级的 Web 开发框架,各自拥有特色和优势,同时也有着协同工作的潜力。 Spring Boot 是一款基于 Java 编写并运行的轻量级 Web 框架,其主要目标是简化 Spring 应用的搭建和设计。它提供了一个快速开发应用的高效率方式,使得开发者可以专注于业务逻辑的实现,而无需关注底层设施和配置文件细节。 Vue 是一个流行的 JavaScript 前端框架,它可以帮助开发者构建可复用和可扩展的网络应用程序。特别是其数据绑定和组件化系统,在开发高度交互的 UI 应用时具有很大的优势。 ElementUI 是一套基于 Vue 的前端 UI 组件库,它提供了多种常用的 UI 元素和样式。ElementUI 的组件样式比较简洁美观,同时还提供了灵活和自定义的主题功能,开发者可以根据自己的需求轻松实现不同的组件样式。 Spring Boot 和 Vue 配合使用时,前端使用 Vue 展示,后端使用 Spring Boot 导出数据和服务。Vue 支持使用 Axios、Fetch 等方式进行异步请求,从而获取后端数据,以响应前端的操作。ElementUI 可以帮助开发者快速搭建整个 Web 应用程序的前端界面,减轻前端开发的工作量。 综上所述,Spring Boot、VueElementUI 三者共同使用,可以在开发 Web 应用时提高开发效率,更快地构建出高质量的应用程序。同时,该组合也能够帮助开发者在后端和前端之间良好地维持数据的交互和一致性。 ### 回答3: SpringBoot是一款开源的Java开发框架,它主要用于快速构建企业级应用程序。SpringBoot通过减少XML配置来简化Spring应用程序的开发过程,并且内嵌了Tomcat、Jetty和Undertow等常用的Web容器,从而大大简化了Web应用程序的部署步骤。 Vue是一款前端框架,它可以帮助开发人员更加轻松地构建复杂的单页面应用程序。Vue的主要特点是组件化和响应式编程。Vue提供了强大的模板和数据绑定功能,使得开发人员可以很方便地实现一些复杂的应用程序。 ElementUI是一款基于Vue.jsUI框架。它提供了一系列高质量的组件,如表格、日期选择器、对话框、按钮等等,可以大大加速Web应用程序的开发过程。ElementUI提供了丰富的主题和设计语言,可以满足不同应用场景的需要。 SpringBoot与VueElementUI的结合,可以帮助开发人员更快地构建现代化的Web应用程序。SpringBoot提供了强大的后端支持,包括数据访问层、事务管理等等,可以快速构建可靠的后端服务。VueElementUI则提供了丰富的前端组件和模板,可以帮助开发人员更快地搭建出漂亮的界面。同时,Vue的响应式编程和ElementUI的组件化设计可以帮助开发人员更快地实现复杂的前端逻辑。 总之,SpringBoot、VueElementUI的结合可以帮助开发人员更快地构建高质量的Web应用程序,提供了丰富的工具和组件,可以满足不同应用场景的需要。它们的协作和衔接,展示了强大的开发效率和组件之间的友好结合。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值