form generator 表格编辑下拉选择功能

我们之前在form generator中扩展了表格的CRUD功能,此时的缺陷在于有些内容需要用户下拉选择而非输入,所以新增el-select功能。使用流程如下

  • 设置数据字典
  • 设置字典数据(静态、get、post)
  • 使用表格列的自定义列功能实现el-select

疑问

  • 为什么不设置成特殊列,直接选择使用不是更简单吗
  • 如果直接将 el-select 标签写死会发现,
  1. 这个标签的属性很多,全部控制很复杂,即使能写好灵活性也不够,
  2. 因为 option 中可能有复杂的判断逻辑
    如果是单选还好说,单涉及到多选、禁用、数据过滤配置就会很复杂。所以还是通过渲染函数的形式,更多的保证灵活性。

相关链接

本地预览

  • 拉取仓库 https://gitee.com/starlight_day/form-generator.git
  • npm i
  • npm run dev
    ps:如果node版本太高需要在运行前运行 $env:NODE_OPTIONS=“–openssl-legacy-provider”
  • http://127.0.0.1:8080/#/qjt 请假条例子
  • http://127.0.0.1:8080/#/cat 动态数据例子
  • http://127.0.0.1:8080/#/select 静态下拉例子
  • http://127.0.0.1:8080/#/selectDynamic 动态下拉例子

下面以三个下拉案例演示改功能的使用

静态数据

1. 新增表格

在这里插入图片描述

2. 添加字典

字典名称为英文
在这里插入图片描述
字典数据为json格式字符串

'[{"value":"1","label":"用户1"},{"value":"2","label":"用户2"},{"value":"3","label":"用户3"}]'

点击编辑按钮,将数据复制到输入框中

3. 列设置

找到列属性设置,数据类型选择自定义列,同时编辑格式选择禁止编辑
在这里插入图片描述
将下面的render函数拷贝到输入框中,此时我们将usersDirect字典column1字段关联在了一起


/*
渲染函数
  params:
    h: 渲染函数 createElement
    data: 当前单元格数据
    row: 当前行数据
    directs: 全局字典数据
    changeCallback: 触发更新函数
*/
function render(h, data, row, directs, cb) {
  // 获取字典数据,这里取usersDirect
  const direct = directs.find((item) => item.name == "usersDirect");
  if (!direct) return;
  const options = direct.arrData;

  // 创建option,这里可以进行数据映射和筛选
  const optionVNodes = options.map((option) =>
    h("el-option", {
      props: {
        value: option.value,
        label: option.label,
      },
    })
  );

  return h(
    "el-select",
    {
      // el-select 属性
      props: {
        placeholder: "请选择",
        value: row.column1, // 这里将v-model绑定为column1
        size: "small", // 设置尺寸为最小
      },
      on: {
        input: (value) => {
          // 更新值
          row.column1 = value;
          // 主动触发更新 -- 这里必须主动触发更新
          cb();
        },
      },
    },
    optionVNodes
  );
}

在这里插入图片描述
点击后可以看到数据
在这里插入图片描述

4. 测试按钮

下面解释下这两个按钮的含义
在这里插入图片描述

  1. 字典数据的调用是在表格mounted的时候才触发的,获取测试数据按钮本质上就是手动触发mounted生命周期,这个按钮只在测试时使用
  2. 假如你获取了数据数据内部会被保存到arrData变量上,但是在存储表单的时候并不需要保存改数据,因为该数据会在mounted的时候获取,所以建议在测试无误后点击清空测试数据

5. 解析案例

点击保存为json后的解析测试地址如下

http://127.0.0.1:8080/#/select

get请求数据

1. 数据准备

这里我是拿本地express模拟的get请求接口

// 导入express模块
const express = require("express");
const app = express();
const port = 3000;

// 添加允许跨域请求的中间件
app.use((req, res, next) => {
  res.header("Access-Control-Allow-Origin", "*");
  res.header(
    "Access-Control-Allow-Headers",
    "Origin, X-Requested-With, Content-Type, Accept"
  );
  res.header("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE, OPTIONS");
  next();
});

// 模拟姓名和学号数据
function generateFakeData(len) {
  const data = [];
  for (let i = 1; i <= len; i++) {
    data.push({
      name: `学生${i}`,
      studentId: `S${String(i).padStart(3, "0")}`,
    });
  }
  return data;
}

// get接口
app.get("/students", (req, res) => {
  const len = parseInt(req.query.len, 10) || 10; // 默认长度为10,如果len不是数字则默认
  const studentsList = generateFakeData(len);
  res.json(studentsList);
});

// post接口
app.post("/students", express.json(), (req, res) => {
  const len = parseInt(req.body.len, 10); // 从请求体中获取len参数
  const studentsList = generateFakeData(len);
  res.json(studentsList);
});

// 启动服务器
app.listen(port, () => {
  console.log(`Test server is running at http://localhost:${port}`);
});

2. 添加字典

  • 新增usersGet字典
    在这里插入图片描述
  • 点击字典设置以下数据
// 请求地址 http://127.0.0.1:3000/students?len=5

// 数据转换函数 -- 将请求数据转换成[ { value,label } ]格式的数据
function map(response){ return response.map(item=>{
      return {
        value:item.studentId,
        label:item.name
      }
}) }

如下图所示
在这里插入图片描述

3. 列设置

找到列属性设置,数据类型选择自定义列,同时编辑格式选择禁止编辑

在这里插入图片描述

将下面的render函数拷贝到输入框中,此时我们将usersGet字典column2字段关联在了一起

function render(h, data, row, directs, cb) {
  // 获取字典数据,这里取usersGet
  const direct = directs.find((item) => item.name == "usersGet");
  if (!direct) return;
  const options = direct.arrData;

  // 创建option,这里可以进行数据映射和筛选
  const optionVNodes = options.map((option) =>
    h("el-option", {
      props: {
        value: option.value,
        label: option.label,
      },
    })
  );

  return h(
    "el-select",
    {
      // el-select 属性
      props: {
        placeholder: "请选择",
        value: row.column2, // 这里将v-model绑定为column2
        size: "small", // 设置尺寸为最小
      },
      on: {
        input: (value) => {
          // 更新值
          row.column2 = value;
          // 主动触发更新 -- 这里必须主动触发更新
          cb();
        },
      },
    },
    optionVNodes
  );
}

在这里插入图片描述

4. 测试按钮

通静态数据

5. 解析案例

http://127.0.0.1:8080/#/selectDynamic

注意selectDynamic.vue该文件格式未调整…,会有EsLint报错提示不影响使用

post请求

这里只展示字典和列设置其他个get请求一样

2. 添加字典

点击字典设置以下数据

// 字典名称 usersPost
// 请求地址 http://127.0.0.1:3000/students
// 请求体   {"len":5}
// 数据转换函数
function map(response){ return response.map(item=>{
      return {
        value:item.studentId,
        label:item.name
      }
}) }

在这里插入图片描述

3. 列设置

找到列属性设置,数据类型选择自定义列,同时编辑格式选择禁止编辑

在这里插入图片描述

将下面的render函数拷贝到输入框中,此时我们将usersPost字典column3字段关联在了一起

function render(h, data, row, directs, cb) {
  // 获取字典数据,这里取usersPost
  const direct = directs.find((item) => item.name == "usersPost");
  if (!direct) return;
  const options = direct.arrData;

  // 创建option,这里可以进行数据映射和筛选
  const optionVNodes = options.map((option) =>
    h("el-option", {
      props: {
        value: option.value,
        label: option.label,
      },
    })
  );

  return h(
    "el-select",
    {
      // el-select 属性
      props: {
        placeholder: "请选择",
        value: row.column3, // 这里将v-model绑定为column3
        size: "small", // 设置尺寸为最小
      },
      on: {
        input: (value) => {
          // 更新值
          row.column3 = value;
          // 主动触发更新 -- 这里必须主动触发更新
          cb();
        },
      },
    },
    optionVNodes
  );
}

在这里插入图片描述

5. 解析案例

http://127.0.0.1:8080/#/selectDynamic

注意selectDynamic.vue该文件格式未调整…,会有EsLint报错提示不影响使用

关于token

系统接口的token需要在render.js文件中设置

catchDirectData()和catchData()函数中设置

在这里插入图片描述

  • 16
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
表单引擎是一种软件工具,用于生成数据表格。它能够帮助用户轻松地创建和定制数据表格,而无需编写任何代码。通过使用表单引擎,用户可以在几分钟内生成一个完全可用的数据表格。 表单引擎具有简单易用的界面,用户可以通过拖拽和放置的方式来添加和排列不同的字段。用户可以选择不同的字段类型,例如文本框、选择框、日期选择器等等,以满足他们的数据记录需求。此外,用户还可以自定义字段的验证规则,以确保输入的数据符合预期。表单引擎还提供了一些预定义的模板和样式,以便用户根据自己的品牌和风格进行个性化定制。 一旦用户完成了表单的设计,表单引擎将自动生成相应的HTML和CSS代码。用户只需简单地将生成的代码嵌入到自己的网页中,就能够将数据表格展示给用户,并且可以进行数据的录入和编辑。表单引擎还可以与各类数据库进行集成,使用户能够方便地将数据存储和提取。 表单引擎的使用简单高效,适用于各类网站和应用程序。它可以帮助用户快速建立数据表格,而无需编写复杂的前端代码。通过表单引擎,用户可以更加专注于数据的管理和分析,而不需要花费太多时间和精力在表格的设计和实现上。总之,表单引擎是一个强大的工具,可以让数据表格的创建变得更加便捷和灵活。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值