Skip to content

现代代码片段

现代代码片段功能提供了一些封装好的高级代码示例,可以直接引用和复用。

什么是代码片段

代码片段是平台预置的常用功能代码模板,开发者可以直接插入使用,无需从零编写。

可用代码片段

数据操作类

片段名说明
批量删除选中多条数据执行批量删除
批量导入从 Excel 批量导入数据
数据复制复制一条现有数据作为新数据
数据归档将历史数据归档到历史表

表单操作类

片段名说明
表单校验常用的表单校验逻辑
自动填充根据编码自动填充其他字段
级联选择多级联动下拉选择
动态增行明细行动态添加删除

业务逻辑类

片段名说明
审批流提交提交数据到审批流程
编号生成自动生成业务单据编号
消息通知发送系统消息给指定用户
数据锁定/解锁锁定和解锁数据

使用方法

方式1:在编程界面插入

  1. 打开在线编程环境
  2. 点击工具栏的"代码片段"按钮
  3. 选择需要的代码片段
  4. 点击"插入",代码自动插入到光标位置

方式2:手动引用

javascript
// 引用内置代码片段
var snippet = getSnippet('batch-delete');
eval(snippet.code);

常用代码片段示例

批量删除

javascript
// 批量删除选中的数据
function batchDelete() {
  var selectedIds = getTableSelectedIds('table1');
  if (selectedIds.length === 0) {
    showMessage('warning', '请选择要删除的数据');
    return;
  }
  
  showConfirm(
    '确认删除',
    '确定要删除选中的 ' + selectedIds.length + ' 条数据吗?',
    function(result) {
      if (result) {
        executeSQL(
          'DELETE FROM t_customer WHERE id IN (' + selectedIds.join(',') + ')',
          function(res) {
            showMessage('success', '删除成功');
            refreshTable('table1');
          },
          function(err) {
            showMessage('error', '删除失败:' + err.message);
          }
        );
      }
    }
  );
}

自动生成编号

javascript
// 自动生成业务单据编号
function generateBillNo(prefix) {
  var date = formatDate(new Date(), 'yyyyMMdd');
  var sql = "SELECT ISNULL(MAX(RIGHT(bill_no, 4)), 0) + 1 AS next_num " +
            "FROM t_order WHERE bill_no LIKE '" + prefix + date + "%'";
  
  var result = executeQuery(sql);
  var nextNum = result[0].next_num;
  var seq = ('0000' + nextNum).slice(-4);
  
  return prefix + date + seq;
}

// 使用示例
var billNo = generateBillNo('SO');
// 返回:SO202607220001

表单校验

javascript
// 表单校验
function validateForm() {
  var errors = [];
  
  // 非空校验
  if (!getValue('text_name')) {
    errors.push('请输入名称');
  }
  
  // 手机号格式校验
  var phone = getValue('text_phone');
  if (phone && !/^1[3-9]\d{9}$/.test(phone)) {
    errors.push('手机号格式不正确');
  }
  
  // 邮箱格式校验
  var email = getValue('text_email');
  if (email && !/^[\w.-]+@[\w.-]+\.\w+$/.test(email)) {
    errors.push('邮箱格式不正确');
  }
  
  // 数字范围校验
  var amount = getValue('num_amount');
  if (amount <= 0) {
    errors.push('金额必须大于0');
  }
  
  if (errors.length > 0) {
    showMessage('error', errors.join('<br>'));
    return false;
  }
  
  return true;
}

级联选择

javascript
// 省市级联选择
function initCascade() {
  // 省份选择变化时加载城市
  onControlChange('select_province', function(value) {
    var cities = executeQuery(
      "SELECT id, name FROM t_city WHERE province_id = " + value
    );
    setSelectorOptions('select_city', cities);
    setValue('select_city', '');
  });
  
  // 城市选择变化时加载区县
  onControlChange('select_city', function(value) {
    var districts = executeQuery(
      "SELECT id, name FROM t_district WHERE city_id = " + value
    );
    setSelectorOptions('select_district', districts);
    setValue('select_district', '');
  });
}

发送消息通知

javascript
// 发送系统消息
function sendNotification(receiverIds, title, content, type) {
  var sql = "INSERT INTO t_message (receiver_id, title, content, type, create_time) VALUES ";
  var values = receiverIds.map(function(id) {
    return "(" + id + ", '" + title + "', '" + content + "', '" + (type || 'info') + "', GETDATE())";
  });
  
  executeSQL(sql + values.join(','), function() {
    showMessage('success', '消息发送成功');
  });
}

// 使用示例
sendNotification(
  [1001, 1002, 1003],
  '新订单提醒',
  '您有一个新的订单待处理,订单号:SO202607220001',
  'notice'
);

明细行动态增删

javascript
// 新增明细行
function addDetailRow() {
  var newRow = {
    id: '',
    product_id: '',
    product_name: '',
    quantity: 1,
    unit_price: 0,
    amount: 0
  };
  addTableRow('table_detail', newRow);
  calculateDetailTotal();
}

// 删除选中的明细行
function deleteDetailRow() {
  var selected = getTableSelectedRows('table_detail');
  if (selected.length === 0) {
    showMessage('warning', '请选择要删除的行');
    return;
  }
  removeTableRows('table_detail', selected);
  calculateDetailTotal();
}

// 计算明细总金额
function calculateDetailTotal() {
  var rows = getTableData('table_detail');
  var total = 0;
  rows.forEach(function(row) {
    total += Number(row.amount) || 0;
  });
  setValue('num_total', total);
}

// 单元格变化时自动计算金额
onTableCellChange('table_detail', function(rowIndex, field, value) {
  var row = getTableRow('table_detail', rowIndex);
  if (field === 'quantity' || field === 'unit_price') {
    var qty = Number(row.quantity) || 0;
    var price = Number(row.unit_price) || 0;
    setTableCellValue('table_detail', rowIndex, 'amount', qty * price);
    calculateDetailTotal();
  }
});

数据复制

javascript
// 复制选中的数据作为新记录
function copyData() {
  var selected = getTableSelectedRow('table1');
  if (!selected) {
    showMessage('warning', '请选择要复制的数据');
    return;
  }
  
  // 打开新增页面并填充数据
  openPage('customer_edit', {
    mode: 'copy',
    data: {
      name: selected.name + '(副本)',
      phone: selected.phone,
      address: selected.address
    }
  });
}

创建自定义代码片段

开发者可以将常用的代码保存为自定义片段:

javascript
// 保存代码片段
saveSnippet({
  name: '我的自定义片段',
  category: '自定义',
  code: `
    // 自定义代码
    function myFunction() {
      console.log('Hello');
    }
  `,
  description: '我的自定义功能代码'
});

// 获取自定义片段列表
var mySnippets = getCustomSnippets();

注意事项

  1. 插入代码片段后,建议根据实际业务场景调整参数
  2. 代码片段中的表名、字段名需要与实际数据结构对应
  3. 建议先在测试环境验证代码片段的正确性
  4. 复杂的业务逻辑不建议使用代码片段,应独立开发

基于 MIT 许可发布