首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >提交 + 编辑回显完整实现(WebBuilder 全套代码)

提交 + 编辑回显完整实现(WebBuilder 全套代码)

原创
作者头像
技术挖掘官
发布2026-08-05 16:58:23
发布2026-08-05 16:58:23
1160
举报
  1. 表单提交 JS 逻辑(获取全部表单值、接口提交)
  2. 编辑模式数据回填(后端接口拉取数据一键赋值)
  3. 按钮组件(新增提交按钮、编辑按钮、重置按钮)
  4. 配套后端交互数据格式说明
  5. 常用场景:新增提交 / 编辑回显 / 表单重置

一、完整表单组件配置(带底部操作按钮)

代码语言:javascript
复制
[
    {
        "cname": "radios",
        "cid": "leave_type",
        "label": "请假类型",
        "required": true,
        "items": [
            {"cname": "check2", "cid": "personal", "label": "事假"},
            {"cname": "check2", "cid": "sick", "label": "病假"},
            {"cname": "check2", "cid": "annual", "label": "年假"},
            {"cname": "check2", "cid": "marry", "label": "婚假"}
        ]
    },
    {
        "cname": "date",
        "cid": "start_date",
        "label": "请假开始日期",
        "required": true
    },
    {
        "cname": "date",
        "cid": "end_date",
        "label": "请假结束日期",
        "required": true
    },
    {
        "cname": "input",
        "cid": "leave_day",
        "label": "请假天数",
        "type": "number",
        "required": true
    },
    {
        "cname": "toggle",
        "cid": "urgent_leave",
        "label": "紧急请假",
        "returnType": "int",
        "events": {
            "change": "if(value === 1) Wb.tip('已标记紧急请假,审批消息将优先推送')"
        }
    },
    {
        "cname": "checks",
        "cid": "copy_user",
        "label": "抄送人员",
        "returnArray": true,
        "items": [
            {"cname": "check6", "cid": "leader", "label": "直属领导"},
            {"cname": "check6", "cid": "hr", "label": "行政人事"},
            {"cname": "check6", "cid": "director", "label": "部门总监"}
        ]
    },
    {
        "cname": "slider",
        "cid": "leave_level",
        "label": "事项重要程度",
        "minValue": 1,
        "maxValue": 10,
        "value": 4
    },
    {
        "cname": "textarea",
        "cid": "leave_reason",
        "label": "请假事由",
        "required": true
    },
    {
        "cname": "button",
        "cid": "btn_submit",
        "label": "提交请假单",
        "theme": "primary",
        "events": {
            "click": "submitLeaveForm()"
        }
    },
    {
        "cname": "button",
        "cid": "btn_reset",
        "label": "重置表单",
        "theme": "default",
        "events": {
            "click": "resetLeaveForm()"
        }
    }
]

二、全局 JS 函数:表单提交 submitLeaveForm()

功能说明

  1. 执行表单必填校验
  2. 一键获取所有表单字段值(适配单选、多选数组、开关 0/1、日期、滑块全部格式)
  3. AJAX 请求提交到后端保存接口
  4. 提交成功弹窗提示、清空表单

代码语言:javascript
复制
// 请假表单提交函数
function submitLeaveForm() {
    // 1.表单整体校验(必填项校验)
    if (!$form.valid()) {
        Wb.tip("请完善带*的必填请假信息", "warning");
        return;
    }

    // 2.获取全部表单数据(直接通过cid取值)
    const formData = {
        leaveType: $form.leave_type.value,
        startDate: $form.start_date.value,
        endDate: $form.end_date.value,
        leaveDay: $form.leave_day.value,
        urgentLeave: $form.urgent_leave.value, // 0=普通 1=紧急
        copyUser: $form.copy_user.value, // 数组格式:["leader","hr"]
        leaveLevel: $form.leave_level.value,
        leaveReason: $form.leave_reason.value,
        id: $form.formId || "" // 编辑时携带主键ID,新增为空
    };

    console.log("提交表单数据:", formData);

    // 3.Ajax提交后端接口
    Wb.ajax({
        url: "/api/leave/save", // 后端保存接口
        method: "POST",
        data: formData,
        success: function (res) {
            if (res.code === 200) {
                Wb.tip("请假单提交成功!");
                resetLeaveForm(); // 提交成功重置表单
                // 可追加:关闭弹窗、刷新列表表格
                // Wb.closeDialog();
                // grid.reload();
            } else {
                Wb.tip(res.msg || "提交失败", "error");
            }
        },
        error: function () {
            Wb.tip("网络异常,提交失败", "error");
        }
    });
}

// 表单重置函数
function resetLeaveForm() {
    $form.reset();
    $form.formId = null; // 清空编辑主键标识
}

提交后后端接收数据格式示例

代码语言:javascript
复制
{
    "leaveType": "sick",
    "startDate": "2026-08-05",
    "endDate": "2026-08-07",
    "leaveDay": 3,
    "urgentLeave": 1,
    "copyUser": ["leader", "hr"],
    "leaveLevel": 7,
    "leaveReason": "急性肠胃炎就医休养",
    "id": ""
}

三、编辑回显核心函数(根据主键回填表单)

场景:请假列表点击「编辑」按钮,根据请假 ID 请求后端详情接口,一键回填所有组件数据,包含单选、多选复选框、开关、滑块、日期全部适配。

代码语言:javascript
复制
/**
 * 编辑回显加载表单数据
 * @param leaveId 请假单主键ID
 */
function loadLeaveEditData(leaveId) {
    Wb.ajax({
        url: "/api/leave/detail",
        method: "GET",
        data: { id: leaveId },
        success: function (res) {
            if (res.code !== 200 || !res.data) {
                Wb.tip("未查询到请假单据", "warning");
                return;
            }
            const data = res.data;
            // 标记当前为编辑模式,提交时携带ID更新
            $form.formId = data.id;

            // 逐个组件赋值回显(WebBuilder统一 setValue 方法)
            $form.leave_type.setValue(data.leaveType);
            $form.start_date.setValue(data.startDate);
            $form.end_date.setValue(data.endDate);
            $form.leave_day.setValue(data.leaveDay);
            $form.urgent_leave.setValue(data.urgentLeave);
            $form.copy_user.setValue(data.copyUser); // 直接传入数组即可选中多选框
            $form.leave_level.setValue(data.leaveLevel);
            $form.leave_reason.setValue(data.leaveReason);

            Wb.tip("单据数据加载完成,可直接修改提交", "success");
        }
    });
}

后端详情接口返回示例(用于回显)

代码语言:javascript
复制
{
    "code": 200,
    "data": {
        "id": 1001,
        "leaveType": "annual",
        "startDate": "2026-08-10",
        "endDate": "2026-08-15",
        "leaveDay": 6,
        "urgentLeave": 0,
        "copyUser": ["leader", "director"],
        "leaveLevel": 5,
        "leaveReason": "家庭出游年假申请"
    }
}

四、列表编辑按钮调用示例(表格行编辑)

在表格 Grid 的操作列绑定编辑事件,点击直接加载回显弹窗表单:

代码语言:javascript
复制
// 表格编辑按钮事件
function gridEdit(row) {
    // 打开表单弹窗
    Wb.openDialog({
        title: "编辑请假申请",
        url: "leaveForm.html",
        width: 700,
        height: 600,
        onOpen: function (dialogWin) {
            // 弹窗打开后,执行数据回填
            dialogWin.loadLeaveEditData(row.id);
        }
    });
}

五、关键适配说明(不同组件回显规则)

组件类型

赋值回显规则

数据格式

radios 单选框

setValue 传入 cid 值

字符串 personal/sick

checks 多选框

setValue 传入字符串数组

["leader","hr"]

toggle 开关

setValue 传入 0/1

数字 0/1

slider 滑块

setValue 传入数字

1~10 数字

date 日期

setValue 传入日期字符串

2026-08-05

input/textarea

直接文本赋值

字符串

六、新增 & 编辑区分逻辑

  1. 新增打开表单:$form.formId = null,后端执行 INSERT 新增;
  2. 编辑打开表单:$form.formId = 单据ID,后端执行 UPDATE 根据 ID 更新;
  3. 共用一套表单、一套提交函数,无需分开写新增 / 编辑两套页面。

七、扩展优化方案

  1. 日期联动计算天数:选择起止日期自动计算请假天数,绑定日期 change 事件自动赋值leave_day
  2. 附件回显:如果增加图片上传组件,编辑时赋值图片地址数组,实现凭证图片回填;
  3. 审批状态只读:已审批单据打开表单设置readonly:true禁止编辑。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

目录
  • 一、完整表单组件配置(带底部操作按钮)
  • 二、全局 JS 函数:表单提交 submitLeaveForm()
    • 功能说明
    • 提交后后端接收数据格式示例
  • 三、编辑回显核心函数(根据主键回填表单)
    • 后端详情接口返回示例(用于回显)
  • 四、列表编辑按钮调用示例(表格行编辑)
  • 五、关键适配说明(不同组件回显规则)
  • 六、新增 & 编辑区分逻辑
  • 七、扩展优化方案
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档