Appearance
代码模板
代码模板功能用于快速生成常用的业务代码结构,提高开发效率。
什么是代码模板
代码模板是平台预置的标准代码结构,开发者可以基于模板快速生成程序框架,只需填充业务逻辑。
模板分类
| 分类 | 说明 | 适用场景 |
|---|---|---|
| 单表增删改查 | 标准 CRUD 代码 | 基础数据管理功能 |
| 主从表增删改查 | 主表 + 明细表代码 | 订单、采购等单据 |
| 审批流 | 带审批的业务代码 | 请假、报销等审批单 |
| 报表查询 | 数据查询统计代码 | 统计报表、数据分析 |
| 数据导入 | Excel 导入代码 | 批量数据导入 |
使用代码模板
方式1:快速向导生成
- 进入在线编程环境
- 点击"快速向导" → "单表功能"(或其他类型)
- 选择数据表
- 设置功能名称、菜单等信息
- 点击"生成"
- 系统自动生成完整的代码模板
方式2:手动选择模板
- 在编程界面点击"代码模板"
- 选择需要的模板类型
- 填写参数(表名、字段名等)
- 点击"生成"
- 将生成的代码复制到程序中
单表增删改查模板
生成的文件结构
功能名称/
├── 列表页.js # 列表页面逻辑
├── 编辑页.js # 新增/编辑页面逻辑
├── 查询指令.sql # 数据查询SQL
├── 保存指令.sql # 数据保存SQL
└── 删除指令.sql # 数据删除SQL列表页模板
javascript
// ========== 列表页模板 ==========
var PAGE_CONFIG = {
tableName: 't_customer',
tableAlias: 'c',
defaultOrderBy: 'c.create_time DESC'
};
// 页面初始化
onPageLoad(function() {
initSearchForm();
loadTableData();
});
// 初始化查询表单
function initSearchForm() {
// 设置日期范围默认值
setValue('date_start', formatDate(addMonth(new Date(), -1), 'yyyy-MM-dd'));
setValue('date_end', formatDate(new Date(), 'yyyy-MM-dd'));
}
// 查询按钮
onClick('btn_search', function() {
loadTableData();
});
// 重置按钮
onClick('btn_reset', function() {
resetForm('form_search');
initSearchForm();
loadTableData();
});
// 加载表格数据
function loadTableData() {
var params = getFormData('form_search');
loadTable('table1', 'customer_query', params);
}
// 新增按钮
onClick('btn_add', function() {
openPage('customer_edit', { mode: 'add' });
});
// 编辑按钮
onClick('btn_edit', function() {
var row = getTableSelectedRow('table1');
if (!row) {
showMessage('warning', '请选择要编辑的数据');
return;
}
openPage('customer_edit', { mode: 'edit', id: row.id });
});
// 查看按钮
onClick('btn_view', function() {
var row = getTableSelectedRow('table1');
if (!row) {
showMessage('warning', '请选择要查看的数据');
return;
}
openPage('customer_edit', { mode: 'view', id: row.id });
});
// 删除按钮
onClick('btn_delete', function() {
var rows = getTableSelectedRows('table1');
if (rows.length === 0) {
showMessage('warning', '请选择要删除的数据');
return;
}
showConfirm(
'确认删除',
'确定要删除选中的 ' + rows.length + ' 条数据吗?',
function(result) {
if (result) {
var ids = rows.map(function(r) { return r.id; });
execute('customer_delete', { ids: ids }, function() {
showMessage('success', '删除成功');
loadTableData();
});
}
}
);
});
// 导出按钮
onClick('btn_export', function() {
var params = getFormData('form_search');
exportData('customer_query', params, '客户列表');
});
// 行双击编辑
onTableRowDblClick('table1', function(row) {
openPage('customer_edit', { mode: 'view', id: row.id });
});编辑页模板
javascript
// ========== 编辑页模板 ==========
var PAGE_MODE = 'view'; // view / edit / add
var CURRENT_ID = null;
// 页面初始化
onPageLoad(function() {
PAGE_MODE = getParam('mode') || 'view';
CURRENT_ID = getParam('id');
setPageState(PAGE_MODE);
if (PAGE_MODE === 'add') {
initNewData();
} else {
loadData(CURRENT_ID);
}
});
// 初始化新增数据
function initNewData() {
setValue('text_code', generateCode('CUS'));
setValue('date_create', formatDate(new Date(), 'yyyy-MM-dd HH:mm:ss'));
setValue('text_create_user', getCurrentUserName());
}
// 加载数据
function loadData(id) {
execute('customer_get', { id: id }, function(result) {
if (result.data) {
setFormData('form_main', result.data);
}
});
}
// 保存按钮
onClick('btn_save', function() {
if (!validateForm()) return;
var data = getFormData('form_main');
data.id = CURRENT_ID;
data.mode = PAGE_MODE;
execute('customer_save', data, function(result) {
showMessage('success', '保存成功');
CURRENT_ID = result.id;
PAGE_MODE = 'edit';
setPageState('edit');
emit('refresh-list');
});
});
// 保存并新增
onClick('btn_save_new', function() {
if (!validateForm()) return;
var data = getFormData('form_main');
data.mode = PAGE_MODE;
execute('customer_save', data, function() {
showMessage('success', '保存成功');
resetForm('form_main');
initNewData();
PAGE_MODE = 'add';
CURRENT_ID = null;
setPageState('add');
});
});
// 取消按钮
onClick('btn_cancel', function() {
closePage();
});
// 表单校验
function validateForm() {
var errors = [];
if (!getValue('text_name')) {
errors.push('请输入客户名称');
}
if (!getValue('text_phone')) {
errors.push('请输入联系电话');
}
if (errors.length > 0) {
showMessage('error', errors.join('<br>'));
return false;
}
return true;
}查询指令模板(SQL)
sql
-- ========== 查询指令模板 ==========
-- 指令名:customer_query
SELECT
c.id,
c.code,
c.name,
c.phone,
c.email,
c.address,
c.level,
c.is_active,
c.create_time,
c.create_user
FROM t_customer c
WHERE 1=1
AND (@keyword IS NULL OR c.name LIKE '%' + @keyword + '%' OR c.code LIKE '%' + @keyword + '%')
AND (@phone IS NULL OR c.phone LIKE '%' + @phone + '%')
AND (@level IS NULL OR c.level = @level)
AND (@is_active IS NULL OR c.is_active = @is_active)
AND (@start_date IS NULL OR c.create_time >= @start_date)
AND (@end_date IS NULL OR c.create_time <= DATEADD(DAY, 1, @end_date))
ORDER BY c.create_time DESC保存指令模板(SQL)
sql
-- ========== 保存指令模板 ==========
-- 指令名:customer_save
IF @mode = 'add'
BEGIN
-- 新增
INSERT INTO t_customer (
code, name, phone, email, address, level, is_active,
create_time, create_user
) VALUES (
@code, @name, @phone, @email, @address, @level, @is_active,
GETDATE(), @currentUser
)
SELECT SCOPE_IDENTITY() AS id
END
ELSE
BEGIN
-- 更新
UPDATE t_customer SET
name = @name,
phone = @phone,
email = @email,
address = @address,
level = @level,
is_active = @is_active,
update_time = GETDATE(),
update_user = @currentUser
WHERE id = @id
SELECT @id AS id
END删除指令模板(SQL)
sql
-- ========== 删除指令模板 ==========
-- 指令名:customer_delete
-- 逻辑删除
UPDATE t_customer SET
is_deleted = 1,
update_time = GETDATE(),
update_user = @currentUser
WHERE id IN (SELECT value FROM dbo.split(@ids, ','))
-- 或者物理删除
-- DELETE FROM t_customer WHERE id IN (SELECT value FROM dbo.split(@ids, ','))主从表模板
编辑页核心代码
javascript
// 加载主表数据
function loadMasterData(id) {
execute('order_get', { id: id }, function(result) {
if (result.data) {
setFormData('form_main', result.data);
loadDetailData(id);
}
});
}
// 加载明细数据
function loadDetailData(orderId) {
execute('order_detail_query', { order_id: orderId }, function(result) {
setTableData('table_detail', result.data);
calculateTotal();
});
}
// 新增明细行
onClick('btn_add_detail', function() {
addTableRow('table_detail', {
id: '',
product_id: '',
product_name: '',
quantity: 1,
unit_price: 0,
amount: 0
});
});
// 删除明细行
onClick('btn_delete_detail', function() {
var rows = getTableSelectedRows('table_detail');
if (rows.length === 0) {
showMessage('warning', '请选择要删除的明细');
return;
}
removeTableRows('table_detail', rows);
calculateTotal();
});
// 计算总金额
function calculateTotal() {
var rows = getTableData('table_detail');
var total = 0;
rows.forEach(function(row) {
total += Number(row.amount) || 0;
});
setValue('num_total', total);
}
// 保存
onClick('btn_save', function() {
if (!validateForm()) return;
var master = getFormData('form_main');
var details = getTableData('table_detail');
execute('order_save', {
master: master,
details: details,
mode: PAGE_MODE
}, function(result) {
showMessage('success', '保存成功');
CURRENT_ID = result.id;
PAGE_MODE = 'edit';
});
});报表查询模板
javascript
// 查询
onClick('btn_search', function() {
var params = getFormData('form_search');
execute('report_sales_query', params, function(result) {
setTableData('table_report', result.data);
renderChart(result.data);
calculateSummary(result.data);
});
});
// 计算汇总
function calculateSummary(data) {
var totalAmount = 0;
var totalQty = 0;
data.forEach(function(row) {
totalAmount += Number(row.amount) || 0;
totalQty += Number(row.quantity) || 0;
});
setValue('text_summary', '销售总额:' + formatAmount(totalAmount) + ' 元,总数量:' + totalQty);
}
// 导出
onClick('btn_export', function() {
var params = getFormData('form_search');
exportData('report_sales_query', params, '销售报表');
});
// 打印
onClick('btn_print', function() {
printTable('table_report', '销售报表');
});自定义模板
开发者可以保存自己的代码作为模板:
javascript
// 保存自定义模板
saveCodeTemplate({
name: '我的单据模板',
category: '自定义',
files: [
{ name: '列表页.js', content: '...' },
{ name: '编辑页.js', content: '...' }
],
description: '我常用的业务单据模板'
});
// 获取自定义模板列表
var myTemplates = getCodeTemplates();注意事项
- 使用模板前建议先了解模板的结构和约定
- 模板中的表名、字段名需要根据实际业务修改
- 复杂业务建议在模板基础上进行修改,而不是完全依赖模板
- 建议定期备份自定义的代码模板
- 模板生成后建议先在测试环境验证功能