Vue-Element中结合后台的特定的数据给实现考勤表格

2 篇文章 0 订阅

Vue-Element中结合后台的特定的数据给实现考勤表格

思路

  • 草图设计
  • 结果页面

实现中 卡住 的地方

  • 动态列增加
  • 单元格动态增加新的表格
  • 动态增加的列与对应的数据显示

解决方案

  • 动态增加
    • 固定列的数据重新赋值,动态列的数据push进去
  • 单元格动态增加新的表格
    • 单元格templete化,新增:data和是否有数据和在特定的列位置添加新的表格
  • 动态增加的列与对应的数据显示
    • 数据结构的选择
      1. pojo反射进行添加【可以尝试使用,但不建议
      2. 采用Map<String,List<Object>>数据结构【建议使用这种方式

具体代码片段或数据格式【这个只是思路;具体的细节不用太在意--如$t这个(这个是国际化用的)】

  • 表格
      <el-table
        border
        :data="checkData"
        style="width: 100%;">
        <el-table-column
          v-for="(item, index) in tableLabel"
          :key="index"
          :fixed="item.fixed"
          :prop="item.prop"
          :width="item.width"
          :label="item.label">
          <template slot-scope="scope">
            {{getDataName(scope.row,item.prop)}}
            <el-table :data="scope.row.day_datas[item.prop]"
                      v-if="scope.row.day_datas!=null&&index>6&&scope.row.day_datas[item.prop]!=null">
              <el-table-column
                prop="start_time"
                width="110"
                :label="$t('check_work.sign_start_time')">
              </el-table-column>
              <el-table-column
                prop="end_time"
                width="110"
                :label="$t('check_work.sign_end_time')">
              </el-table-column>
              <el-table-column
                prop="is_sign"
                width="80"
                :label="$t('check_work.is_sign')">
              </el-table-column>
            </el-table>
          </template>
        </el-table-column>
      </el-table>
    
  • 固定列数据
    tableLabel: [{
      prop: 'face_name',
      width: 120,
      fixed: true,
      label: this.$t("check_work.name"),
    }, {
      prop: 'face_tag',
      width: 120,
      fixed: true,
      label: this.$t("check_work.face_tag"),
    }, {
      prop: 'identity_name',
      width: 120,
      fixed: true,
      label: this.$t("face.dialog_person_info_type"),
    }, {
      prop: 'work_days',
      width: 100,
      label: this.$t("check_work.work_days"),
    }, {
      prop: 'work_off_days',
      width: 100,
      label: this.$t("check_work.work_off_days"),
    }, {
      prop: 'out_time_nums',
      width: 100,
      label: this.$t("check_work.out_time_nums"),
    }, {
      prop: 'early_time_nums',
      width: 100,
      label: this.$t("check_work.early_time_nums"),
    },],
    
  • 动态列数据【在异步请求完成之后进行操作】
        if (data.model.push_dates != null && data.model.push_dates.length > 0) {
          for (let i = 0; i < data.model.push_dates.length; i++) {
            self.tableLabel.push(data.model.push_dates[i]);
          }
        }
    

整个表格的数据结构

{
    "code": 200,
    "model": {
        "total": 4,
        "push_dates": [{
            "prop": "day_datas.2019-12-09",
            "width": 150,
            "label": "2019-12-09"
        }, {
            "prop": "day_datas.2019-12-10",
            "width": 150,
            "label": "2019-12-10"
        }],
        "datas": [{
            "face_name": "白鹏2",
            "face_tag": "test002",
            "identity_name": "管理",
            "work_days": 0,
            "work_off_days": 0,
            "work_times": 0,
            "out_time_nums": 0,
            "early_time_nums": 0,
            "day_datas": {
                "2019-12-09": [{
                    "start_time": "08:00",
                    "end_time": "09:00",
                    "is_sign": 1
                }]
            }
        }, {
            "face_name": "白鹏1",
            "face_tag": "test001",
            "identity_name": "管理",
            "work_days": 0,
            "work_off_days": 0,
            "work_times": 0,
            "out_time_nums": 0,
            "early_time_nums": 0,
            "day_datas": {
                "2019-12-09": [{
                    "start_time": "08:00",
                    "end_time": "09:00",
                    "is_sign": 1
                }]
            }
        }, {
            "face_name": "白鹏",
            "face_tag": "11",
            "identity_name": "员工",
            "work_days": 0,
            "work_off_days": 0,
            "work_times": 0,
            "out_time_nums": 0,
            "early_time_nums": 0,
            "day_datas": null
        }, {
            "face_name": "白鹏",
            "face_tag": "001",
            "identity_name": "员工",
            "work_days": 0,
            "work_off_days": 0,
            "work_times": 0,
            "out_time_nums": 0,
            "early_time_nums": 0,
            "day_datas": null
        }]
    },
    "message": "操作成功!"
}
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
### 回答1: 将 Vue-element-admin 与 Django 后台对接需要进行以下步骤: 1. 编写 Django 后台 API 接口,提供数据交互服务; 2. 在 Vue-element-admin 安装 Axios,用于向后台发送请求; 3. 在 Vue-element-admin 编写与后台 API 对接的代码; 4. 在 Vue-element-admin 使用前端路由(vue-router)跳转到对应页面。 具体操作步骤如下: 1. 编写 Django 后台 API 接口 在 Django 编写后台 API 接口,提供数据交互服务。可以使用 Django REST framework 来快速构建 RESTful API。 2. 安装 Axios 在 Vue-element-admin 安装 Axios,可以使用以下命令: ``` npm install axios ``` 3. 编写与后台 API 对接的代码 在 Vue-element-admin 编写与后台 API 对接的代码,可以使用 Axios 发送请求,例如: ``` import axios from 'axios' export default { // 获取用户列表 getUsers() { return axios.get('/api/user/') }, // 创建用户 createUser(user) { return axios.post('/api/user/', user) }, // 删除用户 deleteUser(id) { return axios.delete(`/api/user/${id}/`) } } ``` 4. 使用前端路由跳转到对应页面 在 Vue-element-admin 使用前端路由(vue-router)跳转到对应页面,例如: ``` import Vue from 'vue' import Router from 'vue-router' Vue.use(Router) export default new Router({ routes: [ { path: '/', name: 'Dashboard', component: () => import('@/views/dashboard/index') }, { path: '/user', name: 'User', component: () => import('@/views/user/index') }, { path: '/user/create', name: 'CreateUser', component: () => import('@/views/user/create') }, { path: '/user/:id/edit', name: 'EditUser', component: () => import('@/views/user/edit') } ] }) ``` 以上就是将 Vue-element-admin 与 Django 后台对接的基本步骤,具体实现还需要根据具体需求进行调整。 ### 回答2: Vue-element-admin是一个基于Vue.js和Element UI开发的后台管理系统框架,而Django是一个基于Python的Web开发框架。对接Vue-element-admin和Django后台,需要以下几个步骤: 1. 了解Vue-element-admin的架构和功能:首先需要熟悉Vue-element-admin的组件和页面结构,了解其提供的基本功能和接口。 2. 安装Django并配置数据库:在Django创建一个新的项目,并配置好数据库信息,确保Django与数据库的连接正常。 3. 创建Django的URL和路由:根据Vue-element-admin的路由规则,在Django创建对应的URL和路由,用于响应前端请求。 4. 编写Django的视图函数:编写Django的视图函数,处理前端请求并返回相应的数据。可以根据需要,操作数据库、调用其他后台服务等。 5. 前后端数据交互:根据Vue-element-admin的接口规范,与Django进行数据交互。可以使用axios库发送请求,同时使用Django的序列化器将数据转化为JSON格式返回给前端。 6. 数据权限控制:在Vue-element-admin,可以根据用户权限动态显示菜单和路由。可以在Django实现相应的权限控制逻辑,根据用户角色或权限限制相应的数据访问。 7. 进行前后端联调和测试:在前后端对接完成后,通过联调和测试确保系统的正常运行。可以使用开发者工具进行调试,在两端之间传递数据并检查返回结果。 总结起来,对接Vue-element-admin和Django后台,需要根据Vue-element-admin的组件和路由规则,在Django进行相应的配置和编码,实现前后端的数据交互和权限控制。通过以上步骤,可以构建一个完整的Vue-element-admin后台管理系统,使用Django作为后台支持。 ### 回答3: vue-element-admin 是一个基于 Vue.js 和 Element UI 的后台管理系统模板。而 Django 是一个使用 Python 编写的高级 Web 开发框架。 对接 vue-element-admin 和 Django 后台的过程,需要进行以下几个步骤: 1. 安装和配置 vue-element-admin 和 Django 工程。 - 首先,在本地搭建好 Django 工程,确保能够正常运行。 - 然后,在 vue-element-admin 的基础上建立 Vue.js 工程,配置好相关依赖。 - 将 Django 与 vue-element-admin 的工程整合在一起,确保两者可以同时运行。 2. 定义接口和数据交互方式。 - 在 Django 的工程,根据需求定义后台接口,用于前后台数据的交互。 - 在 vue-element-admin 的工程,使用 axios 等ajax库,通过 HTTP 请求与 Django 后台进行数据交互。 3. 配置路由和权限控制。 - 在 Django 的工程,配置好路由,将前端请求映射到对应的后端视图函数。 - 在 vue-element-admin 的工程,配置好前端路由,确保前端页面可以正确访问,并实现权限控制策略。 4. 前后台数据的处理和展示。 - 在 vue-element-admin 的工程,通过获取 Django 后台数据,对数据进行处理和展示。 - 可以使用 vue.js 的组件化开发思想,将数据展示和页面交互的逻辑进行拆分和重复利用。 通过以上步骤的对接,vue-element-admin 和 Django 后台可以实现后台数据交互、权限控制和页面展示。以此来构建一个完整的后台管理系统。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

乘风御浪云帆之上

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值