03-API-接口文档.md 9.35 KB

API 接口文档

基础配置

请求基础配置

所有请求默认携带参数:

{
  f: 'custom_form'  // 固定参数
}

响应格式

interface APIResponse<T = any> {
  code: number     // 1=成功,其他=失败
  msg: string      // 响应消息
  data: T          // 响应数据
  show?: boolean   // 是否显示错误提示(code !== 1 时)
}

请求封装

import { fn, fetch } from '@/api/fn';

// GET 请求
fn(fetch.get('/srv/?a=xxx', params))

// POST 请求
fn(fetch.post('/srv/?a=xxx', params))

表单管理接口

1. 新增表单

接口: /srv/?a=add_form 方法: POST 参数:

{
  client_id: string,    // 主体客户id
  name: string,         // 表单名称
  note: string          // 表单描述
}

2. 查询表单配置(字段和规则)

接口: /srv/?a=query_form_all_field 方法: GET 参数:

{
  f: "custom_form",     // 固定参数
  form_code: string,    // 表单唯一标识(必填)
  page_type: string,    // 页面类型:add/edit/view(可选)
  data_id: string,      // 数据ID(编辑时使用)
  flow_node_code: string // 流程节点代码(可选)
}

返回:

{
  code: 1,
  msg: "OK",
  data: {
    id: 835950,
    code: "nxqkbf",
    name: "表单名称",
    table_name: "customize_35697_nxqkbf",
    max_field_num: 3,
    field_list: [
      {
        tag: "input",           // 组件类型
        field_name: "field_1",  // 字段名
        label: "姓名",          // 显示标签
        required: true,         // 是否必填
        data_type: "text",      // 数据类型
        placeholder: "请输入",
        disabled: false,
        readonly: false
      }
    ],
    rule_list: [           // 字段显示/隐藏规则
      {
        field_names: ["field_2"],
        mode: "SHOW",
        logical_op: "OR",
        expr_list: [...]
      }
    ],
    flow_process_list: null  // 工作流流程列表
  }
}

调用示例:

curl "https://oa-dev.onwall.cn/srv/?a=query_form_all_field&f=custom_form&form_code=nxqkbf"

2.1. 查询表单设置(表单级配置)

接口: /srv/?a=query_form_setting 方法: GET 参数:

{
  f: "custom_form",     // 固定参数
  form_code: string     // 表单唯一标识(必填)
}

返回:

{
  code: 1,
  msg: "OK",
  data: [{
    id: 835950,
    code: "nxqkbf",
    name: "表单名称",
    max_field_num: 3,         // 最大字段数
    data_count: 7,            // 已提交数据条数
    extend: {
      server_time: "2026-03-16 17:15:40",
      is_back_user: false      // 是否后台用户
    },
    property_list: {
      sjsj_enable: 1,          // 是否启用数据收集
      commit_action: "text",   // 提交动作类型
      commit_text_type: "default",
      commit_text_template: "提交成功",  // 提交文本模板
      edit_commit_action: "text",
      edit_commit_text_type: "default",
      edit_commit_text_template: "提交成功"
    }
  }]
}

调用示例:

curl "https://oa-dev.onwall.cn/srv/?a=query_form_setting&f=custom_form&form_code=nxqkbf"

2.2. 两个接口的区别

接口 获取内容 用途
query_form_all_field 字段列表、规则列表 渲染表单结构
query_form_setting 表单配置、提交设置 获取表单级属性

3. 添加表单字段

接口: /srv/?a=add_form_field 方法: POST 参数:

{
  form_code: string,       // 表单唯一标识
  component_code: string   // 组件标识
}

4. 添加表单字段属性设置

接口: /srv/?a=add_form_setting 方法: POST 参数:

{
  form_code: string,         // 表单唯一标识
  field_name: string,        // 表单字段名(表单级属性可为空)
  component_code: string,    // 组件标识
  property_code: string,     // 属性标识
  setting_value: string      // 属性值(JSON数组字符串)
}

5. 查询表单设置

接口: /srv/?a=query_form_setting 方法: GET 参数:

{
  form_code: string  // 表单唯一标识
}

返回:

{
  enable: number,        // 0=停止表单,1=开启表单
  is_time_range: number,  // 0=不设定,1=设定
  is_count_down: number,  // 0=不显示,1=显示
  begin_time: string,     // 开启时间
  end_time: string        // 停止时间
}

6. 验证便当密码

接口: /srv/?a=verify_password 方法: POST 参数:

{
  form_code: string,       // 表单唯一标识
  mmtx_password: string    // 用户输入的密码
}

7. 义工组长查询义工信息

接口: /srv/?a=volunteer_source_leader 方法: GET 参数:

{
  form_code: string,           // 表单唯一标识
  page_type: string,           // 页面类型
  force_back: string,          // 是否强制后台账号模式检查
  volunteer_source: string,    // 报名渠道:self/leader
  volunteer_phone: string      // 义工手机号
}

数据管理接口

1. 添加表单数据

接口: /srv/?a=add_formdata 方法: POST 参数:

{
  form_code: string,    // 表单唯一标识
  data: object          // 待添加的数据(JSON对象)
}

示例:

{
  form_code: "form_001",
  data: {
    field_1: "张三",
    field_2: "13800138000",
    field_3: ["选项1", "选项2"]
  }
}

2. 查询表单数据

接口: /srv/?a=query_formdata 方法: GET 参数:

{
  form_code: string,  // 表单唯一标识
  id: string          // 数据ID
}

3. 修改表单数据

接口: /srv/?a=modi_formdata 方法: POST 参数:

{
  form_code: string,    // 表单唯一标识
  id: string,           // 数据ID
  data: object          // 待修改的数据(JSON对象)
}

4. 流程表单数据

接口: /srv/?a=flow_formdata 方法: POST 参数:

{
  form_code: string,            // 表单唯一标识
  data_id: string,              // 数据ID
  data: object,                 // 表单数据
  flow_node_code: string,       // 流程节点
  flow_node_action_id: string,  // 流程节点按钮ID
  flow_content: string          // 流程审批意见
}

组件接口

1. 查询组件

接口: /srv/?a=query_component 方法: GET 参数:

{
  group_code: string,      // 分组标识
  component_code: string,  // 组件标识
  name: string             // 组件名称(模糊查询)
}

2. 查询部门列表

接口: /srv/?a=flow_setting&t=flow_dept_list 方法: GET 参数:

{
  form_code: string  // 表单code
}

请求头建议:

{
  headers: {
    "only-data": true,   // 去重
    "keep-data": true    // 缓存
  }
}

3. 查询角色列表

接口: /srv/?a=flow_setting&t=flow_role_list 方法: GET 参数:

{
  form_code: string  // 表单code
}

4. 搜索用户部门角色

接口: /srv/?a=flow_setting&t=search_user_dept_role 方法: GET 参数:

{
  form_code: string,  // 表单code
  word: string        // 搜索内容
}

通用接口

1. 发送验证码

接口: /srv/?a=sms 方法: POST 参数:

{
  phone: string  // 手机号码
}

2. 获取七牛上传 Token

接口: /srv/?a=upload 方法: POST 参数:

qs.stringify({
  name: string,  // 文件名
  hash: string   // 文件哈希(ETag)
})

3. 保存文件

接口: /srv/?a=upload&t=save_file 方法: POST 参数:

qs.stringify({
  format: string,   // 图片格式
  hash: string,     // 文件哈希
  height: number,   // 图片高度
  width: number,    // 图片宽度
  filekey: string  // 七牛返回的文件key
})

周期接口

1. 获取周期列表

接口: /srv/?a=cycle_list 方法: GET 参数:

{
  form_code: string  // 表单唯一标识
}

返回:

{
  is_cycle: boolean,      // 是否需要周期选择
  cycle_list: [           // 周期列表
    {
      cycle_id: string,
      cycle_name: string,
      start_date: string,
      end_date: string
    }
  ]
}

HTTP 请求缓存控制

请求去重(only-data)

避免短时间内重复请求:

fn(fetch.get('/api/xxx', params, {
  headers: { "only-data": true }
}))

持久化缓存(keep-data)

缓存请求结果(30秒,最多50条):

fn(fetch.get('/api/xxx', params, {
  headers: { "keep-data": true }
}))

同时使用

fn(fetch.get('/api/xxx', params, {
  headers: {
    "only-data": true,
    "keep-data": true
  }
}))

错误处理

特殊错误码

错误码 说明 处理
402 未授权/登录失效 跳转登录页,show=false
其他 业务错误 显示错误提示

402 处理示例

if (response.data.code === 402) {
  response.data.show = false;  // 不显示默认错误
  showToast({
    message: '登录失效!将跳转到登录页面',
    duration: 1500,
    onClose: () => {
      window.location.href = location.origin + '/admin/';
    }
  })
}