自定义页面表格实现数据管理页功能
1. 使用场景
在用户方收集了一批用户信息表,填写表单后,希望可以直观的对数据进行管理,以往我们可以使用创建数据管理页来实现,然而数据管理页会稍微有一些局限性,不能直接对数据进行修改新增等操作,那么这时,我们可以使用自定义页面中的表格组件来实现,将数据进行展示后,可以对其操作列进行编辑,从而实现增删改查的效果。
2. 实现功能
若实现更复杂的业务场景,可按需配置(高级版)功能。
本示例功能清单:
- 配置数据展示到表格中
- 图片上传自定义展示
- 表格分页
- 表格排序
- 搜索(高级版)
- 创建活动(高级版)
- 刷新
- 查看详情
- 修改活动(高级版)
- 删除活动(高级版)
- 批量删除活动(高级版)
- 图片下载(高级版)
2.1. 配置【活动信息表】表单
![](https://yida-support.oss-cn-shanghai.aliyuncs.com/static/png/1699866154409-88d77382-1369-436b-8c5a-78e65fc991ee.png)
2.2. 获取数据展示到表格中
2.2.1. 添加远程数据源
参考文档:根据条件搜索表单实例详情列表
接口配置如图:
![](https://yida-support.oss-cn-shanghai.aliyuncs.com/static/png/1699865166739-361da82c-e489-4c79-8a8f-24e762adc093.png)
![](https://yida-support.oss-cn-shanghai.aliyuncs.com/static/png/1699865264277-d94d3cce-f142-4dd5-a0f0-9c96cf169ecc.png)
`/${window.pageConfig.appType}/v1/form/searchFormDatas.json`
2.2.2. 添加变量
2.2.2.1. 每页实例数
![](https://yida-support.oss-cn-shanghai.aliyuncs.com/static/png/1699865406199-9b7d13f0-7dd9-4649-93df-b1970904e1a5.png)
2.2.2.2. 当前页码
![](https://yida-support.oss-cn-shanghai.aliyuncs.com/static/png/1699865416380-28120c97-e506-4d37-b57e-b77ceca78981.png)
2.2.2.3. 查询条件(高级版)
![](https://yida-support.oss-cn-shanghai.aliyuncs.com/static/png/1699865427886-ccdfa265-91ee-482a-9e4d-53567641d71f.png)
2.2.2.4. 排序条件
![](https://yida-support.oss-cn-shanghai.aliyuncs.com/static/png/1699865438722-914d776d-109d-4ba5-8452-699ec75cbff0.png)
2.2.2.5. 表格加载状态
![](https://yida-support.oss-cn-shanghai.aliyuncs.com/static/png/1699865474842-7fa0865e-f901-415f-9c1d-5180d519e0b3.png)
2.2.2.6. 表格数据
![](https://yida-support.oss-cn-shanghai.aliyuncs.com/static/png/1699865486962-eeafc21f-8fd8-4c62-8c14-4058105c1421.png)
2.2.2.7. 当前选中的表格数据实例id(高级版)
用于一些批量操作。
![](https://yida-support.oss-cn-shanghai.aliyuncs.com/static/png/1701242197928-de23600e-4fa0-4012-b840-22904f34b14f.png)
2.2.3. 将下述 JS 代码拷贝至页面 JS 中并在 didMount 中调用
2.2.3.1. 高级版
![](https://yida-support.oss-cn-shanghai.aliyuncs.com/static/png/1699865846912-652ce45b-abbb-4dbe-8173-9136a58008cb.png)
export function didMount() {
this.getData(); // 获取数据
}
// 获取数据 - 高级版
export function getData() {
const { pageSize, currentPage, searchFieldData = {}, dynamicOrderData = {} } = this.state;
this.dataSourceMap.getData.load({
formUuid: 'FORM-KW766OD1AGUFQQHJ80EG66IGJ6S13GIUKYROL2',
pageSize,
currentPage,
searchFieldJson: JSON.stringify(searchFieldData),
dynamicOrder: JSON.stringify(dynamicOrderData),
}).then((res) => {
const { totalCount, data = [] } = res;
const result = data.map((item) => {
const { formInstId, formUuid, formData = {} } = item;
return {
formInstId,
formUuid,
...formData,
};
});
this.setState({
tableData: {
currentPage,
data: result,
totalCount,
},
tableIsLoading: false,
});
}).catch(({ message }) => {
this.utils.toast({
title: message,
type: 'error',
});
this.setState({
tableIsLoading: false,
});
});
}
2.2.3.2. 基础版
![](https://yida-support.oss-cn-shanghai.aliyuncs.com/static/png/1699865875498-ab1ad38d-055d-4ee8-986a-8837b0586871.png)
export function didMount() {
this.getData(); // 获取数据
}
// 获取数据 - 基础版
export function getData() {
const { pageSize, currentPage, dynamicOrderData = {} } = this.state;
this.dataSourceMap.getData.load({
formUuid: 'FORM-KW766OD1AGUFQQHJ80EG66IGJ6S13GIUKYROL2',
pageSize,
currentPage,
dynamicOrder: JSON.stringify(dynamicOrderData),
}).then((res) => {
const { totalCount, data = [] } = res;
const result = data.map((item) => {
const { formInstId, formUuid, formData = {} } = item;
return {
formInstId,
formUuid,
...formData,
};
});
this.setState({
tableData: {
currentPage,
data: result,
totalCount,
},
tableIsLoading: false,
});
}).catch(({ message }) => {
this.utils.toast({
title: message,
type: 'error',
});
this.setState({
tableIsLoading: false,
});
});
}
![](https://yida-support.oss-cn-shanghai.aliyuncs.com/static/png/1675044269075-b8dfefd3-8b61-4715-95a4-57f241609ea5.png)
![](https://yida-support.oss-cn-shanghai.aliyuncs.com/static/png/1675044336921-76f69c2a-ee91-4ef2-aaab-f989e14d29b8.png)
2.2.4. 表格配置
2.2.4.1. 数据列
数据字段直接填入【活动信息表】中的组件标识即可。
![](https://yida-support.oss-cn-shanghai.aliyuncs.com/static/png/1699866075744-3280b654-d7da-4829-9bad-1f7240cfff6c.png)
活动图片自定义渲染:
![](https://yida-support.oss-cn-shanghai.aliyuncs.com/static/png/1699866439521-f3ff51ae-9053-4513-90d3-1d5cbd938bd7.png)
// 活动图片表格列自定义渲染
export function renderImageCell(value, index, rowData) {
const imgList = value ? JSON.parse(value) : [];
const imgUrls = imgList.map((item) => { return item.url; });
return <div class='imgContainer' style={{
display: 'flex',
width: '170px',
paddingBottom: '12px',
overflowX: 'auto',
userSelect: 'none'
}}>{imgList.map((item, index) => {
return (
<img
src={item.previewUrl}
onClick={() => {
this.utils.previewImage({
urls: imgUrls,
current: item.url,
});
}}
style={{
display: 'block',
width: '48px',
height: '48px',
borderRadius: '6px',
cursor: 'pointer',
marginRight: (index + 1) !== imgList.length ? '12px' : '0px'
}}
/>
)
})}</div>;
}
2.2.4.2. 数据源
![](https://yida-support.oss-cn-shanghai.aliyuncs.com/static/png/1699866213693-e0347242-191c-41b3-87f3-3c6b9d30386a.png)
2.2.4.3. 数据主键
formInstId
2.2.4.4. 加载状态
![](https://yida-support.oss-cn-shanghai.aliyuncs.com/static/png/1699866254135-e069910c-a0dc-4c51-adf9-a189bdfa1fb2.png)
2.2.4.5. 分页设置
![](https://yida-support.oss-cn-shanghai.aliyuncs.com/static/png/1711607860348-f6c89e84-1be3-483e-924c-447676de54b9.png)
![](https://yida-support.oss-cn-shanghai.aliyuncs.com/static/png/1711607773715-08cbd81a-7f64-412d-bde2-fcaedcdfcd12.png)
// 分页
export function onFetchData(params) {
const { pageSize } = this.state;
if (params.from === 'search' || params.pageSize !== pageSize) {
params.currentPage = 1;
}
const orderTypeText = {
'desc': '-', // 降序
'asc': '+', // 升序
};
let dynamicOrderData = {};
dynamicOrderData[params.orderColumn] = orderTypeText[params.orderType];
this.setState({
currentPage: params.currentPage,
pageSize: params.pageSize,
dynamicOrderData,
tableIsLoading: true,
});
this.getData();
}
2.2.4.6. 行选择器(高级版)
![](https://yida-support.oss-cn-shanghai.aliyuncs.com/static/png/1701242441160-46a4930c-f916-4ed1-8199-2dc4383a2f8c.png)
![](https://yida-support.oss-cn-shanghai.aliyuncs.com/static/png/1701242472954-67a86a02-6899-49b5-b947-b42076294959.png)
![](https://yida-support.oss-cn-shanghai.aliyuncs.com/static/png/1701242491113-897484a2-4e3f-4fb7-b8c7-bf714ceec8d9.png)
// 表格数据选择变动回调
export function onTableDataSelectChange(selectedRowKeys, records) {
this.setState({
selectedTableDataRowKeys: selectedRowKeys,
});
}
2.3. 页面 JS 中 添加工具函数(高级版)
无需做任何修改。
// 判断是否是钉钉容器
export function isDingTalkEnv(win) {
win = win || window;
return win.navigator && /dingtalk/i.test(win.navigator.userAgent) //true false
}
// 获取成员字段的 value
export function formatEmployeeFieldValue(userData) {
if (Array.isArray(userData)) {
return userData.length ? userData.map((item) => { return item.value; }) : '';
} else {
return userData ? [userData.value] : '';
}
}
// fieldList:Array,需要校验组件的唯一标识集合
export async function fieldsValidate(fieldList = []) {
const result = [];
for (let i = 0; i < fieldList.length; i++) {
await this.$(fieldList[i]).validate((errors, values) => {
if (!errors) { return };
result.push({
fieldId: fieldList[i], // 组件标识
errors: this.utils.isMobile() ? errors.errors[fieldList[i]].errors : errors[fieldList[i]].errors // 校验错误信息
});
});
};
return result;
}
2.4. 搜索配置(高级版)
若需要使用更多操作符的高级搜索,可参考下述案例对搜索活动功能进行升级。
FaaS 连接器 - 钉钉开放平台 - 通过高级查询条件获取表单实例数据(包括子表单组件数据)
2.4.1. 添加查询组件
![](https://yida-support.oss-cn-shanghai.aliyuncs.com/static/png/1699866705518-ebce0b92-2744-4dba-b836-14665fc1d904.png)
2.4.2. 绑定搜索事件
根据实际情况修改字段映射。
![](https://yida-support.oss-cn-shanghai.aliyuncs.com/static/png/1699866737529-b7a1fc8a-b7b2-48f2-914e-bd2b53bfc1e9.png)
// 搜索
export function onSearch(values) {
this.setState({
currentPage: 1,
searchFieldData: {
textField_l9m5jvma: values.textField_lorywk26, // 活动名称
radioField_l9m5jvmc: values.selectField_los2eeiz, // 活动类型
radioField_l9m5jvmg: values.selectField_l9xx3dnz, // 所属组织
radioField_l9m5jvmn: values.selectField_lorywk27, // 活动进度
dateField_l9m5jvmi: values.cascadeDateField_l9njsj95 ? [values.cascadeDateField_l9njsj95.start, new Date(values.cascadeDateField_l9njsj95.end).setHours(23, 59, 59, 999)] : '', // 开始时间
employeeField_l9m5jvmp: this.formatEmployeeFieldValue(values.employeeField_l9njsj96), // 发起人
},
tableIsLoading: true,
});
this.getData(); // 获取数据
}
2.4.3. 绑定重置事件
![](https://yida-support.oss-cn-shanghai.aliyuncs.com/static/png/1699867021051-eae095f1-fcd5-4eba-9791-97c476bb36a6.png)
// 重置
export function onReset(values) {
this.setState({
currentPage: 1,
searchFieldData: {},
tableIsLoading: true,
});
this.getData(); // 获取数据
}
2.5. 创建活动(高级版)
若需要批量创建活动,可参考下述案例对创建活动功能进行升级。
2.5.1. 添加远程数据源
参考文档: 新增表单实例
接口配置如图:
![](https://yida-support.oss-cn-shanghai.aliyuncs.com/static/png/1699867144238-470afc91-bcb2-4f84-a4a3-89a2290d1676.png)
![](https://yida-support.oss-cn-shanghai.aliyuncs.com/static/png/1675045257087-27a4e7e7-5e5d-4ca5-a94c-f7a5d454db68.png)
`/${window.pageConfig.appType}/v1/form/saveFormData.json`
2.5.2. 添加创建活动对话框
配置如图:
![](https://yida-support.oss-cn-shanghai.aliyuncs.com/static/png/1699867480269-41e82870-690f-4b65-aaea-2b78b7099ea7.png)
2.5.3. 配置顶部操作并绑定下述函数
![](https://yida-support.oss-cn-shanghai.aliyuncs.com/static/png/1699867611070-9661f71d-24bb-4b98-8eae-449eee4f945e.png)
// 创建活动弹窗
export function onCreateActivityDialog() {
this.$('dialog_lowmwcke').show(() => {
this.$('textField_l9njsj8u').reset();
this.$('selectField_l9njsj8w').reset();
this.$('selectField_l9njsj8v').reset();
this.$('dateField_l9njsj8y').reset();
this.$('dateField_l9njsj8z').reset();
this.$('selectField_los2eej0').reset();
this.$('employeeField_l9njsj90').reset();
this.$('imageField_l9njsj94').reset();
});
}
2.5.4. 创建活动对话框绑定下述函数
![](https://yida-support.oss-cn-shanghai.aliyuncs.com/static/png/1699867667983-f474996c-5c6b-440a-92a3-b6265fcff176.png)
// 确认创建活动
export function onCreateActivityOk() {
// 需要校验组件的唯一标识集合
const createFieldList = [
'textField_l9njsj8u',
'selectField_l9njsj8w',
'selectField_l9njsj8v',
'dateField_l9njsj8y',
'dateField_l9njsj8z',
'selectField_los2eej0',
'employeeField_l9njsj90',
];
// 调用表单校验函数
this.fieldsValidate(createFieldList).then((errorList) => {
setTimeout(() => {
if (errorList.length > 0) {
// 表单校验未通过
return;
};
this.$('dialog_lowmwcke').set('confirmState', 'LOADING'); // 开启对话框加载状态
// 新增表单数据
this.dataSourceMap.saveData.load({
formUuid: 'FORM-KW766OD1AGUFQQHJ80EG66IGJ6S13GIUKYROL2',
appType: pageConfig.appType,
formDataJson: JSON.stringify({
textField_l9m5jvma: this.$('textField_l9njsj8u').getValue(), // 活动名称
radioField_l9m5jvmc: this.$('selectField_l9njsj8w').getValue(), // 活动类型
radioField_l9m5jvmg: this.$('selectField_l9njsj8v').getValue(), // 所属组织
dateField_l9m5jvmi: this.$('dateField_l9njsj8y').getValue(), // 开始时间
dateField_l9m5jvmj: this.$('dateField_l9njsj8z').getValue(), // 结束时间
radioField_l9m5jvmn: this.$('selectField_los2eej0').getValue(), // 活动进度
employeeField_l9m5jvmp: this.formatEmployeeFieldValue(this.$('employeeField_l9njsj90').getValue()), // 发起人
imageField_l9nvelqm: (this.$('imageField_l9njsj94').getValue() || []).map((item) => {
return {
downloadUrl: item.downloadURL || item.downloadUrl,
name: item.name,
previewUrl: item.imgURL || item.imgUrl,
url: item.url,
};
}), // 将上传图片的参数修改为符合接口传参的格式,否则数据无法写入
}),
}).then(() => {
this.$('dialog_lowmwcke').set('confirmState', 'NORMAL'); // 关闭对话框加载状态
this.$('dialog_lowmwcke').hide();
this.utils.toast({
title: '创建成功',
type: 'success',
});
setTimeout(() => {
this.setState({
tableIsLoading: true,
});
this.getData(); // 获取数据
}, 1000);
}).catch(({ message }) => {
this.utils.toast({
title: message,
type: 'error',
});
this.$('dialog_lowmwcke').set('confirmState', 'NORMAL'); // 关闭对话框加载状态
});
});
}, 0);
}
2.6. 刷新
2.6.1. 配置顶部操作并绑定下述函数
![](https://yida-support.oss-cn-shanghai.aliyuncs.com/static/png/1699867788569-5dc5447c-e016-4ec2-878a-ceb32488928a.png)
// 刷新
export function onRefresh() {
this.setState({
tableIsLoading: true,
});
this.getData(); // 获取数据
}
2.7. 查看详情
2.7.1. 配置操作列并绑定下述函数
![](https://yida-support.oss-cn-shanghai.aliyuncs.com/static/png/1702351868316-5f534f74-07d9-471a-9887-765736ca1938.png)
// 详情
export function onDetailClick(rowData) {
this.utils.router.push(
`/${pageConfig.appType}/formDetail/${rowData.formUuid}`,
{
formInstId: rowData.formInstId,
},
true,
true,
);
}
2.8. 修改活动(高级版)
2.8.1. 添加远程数据源
参考文档: 更新表单中指定组件值
接口配置如图:
![](https://yida-support.oss-cn-shanghai.aliyuncs.com/static/png/1699867983131-c4dcc0fe-0407-43b6-b958-bdcacc81766a.png)
![](https://yida-support.oss-cn-shanghai.aliyuncs.com/static/png/1699867995990-3e511bd3-3b8f-4e6e-9c02-f0822df5e6d6.png)
`/${window.pageConfig.appType}/v1/form/updateFormData.json`
2.8.2. 添加修改活动对话框
配置如图:
![](https://yida-support.oss-cn-shanghai.aliyuncs.com/static/png/1699868045410-abc0dd9d-d5a1-4c2b-aef5-02f41183357b.png)
2.8.3. 配置操作列并绑定下述函数
![](https://yida-support.oss-cn-shanghai.aliyuncs.com/static/png/1699868095756-8fc2bbca-ff12-4cbc-8e06-32ce2751b22d.png)
// 修改活动弹窗
export function onEditActivityDialog(rowData) {
this.$('dialog_lowmwckf').show(() => {
this.$('textField_los2eeja').setValue(rowData.formInstId);
this.$('textField_los2eej1').setValue(rowData.textField_l9m5jvma);
this.$('selectField_los2eej2').setValue(rowData.radioField_l9m5jvmc_id);
this.$('selectField_los2eej3').setValue(rowData.radioField_l9m5jvmg_id);
this.$('dateField_los2eej4').setValue(rowData.dateField_l9m5jvmi);
this.$('dateField_los2eej5').setValue(rowData.dateField_l9m5jvmj);
this.$('selectField_los2eej6').setValue(rowData.radioField_l9m5jvmn_id);
this.$('employeeField_los2eej7').setValue((rowData.employeeField_l9m5jvmp || []).map((item, index) => {
return {
label: item,
value: rowData.employeeField_l9m5jvmp_id[index],
};
}));
this.$('imageField_los2eej8').setValue(rowData.imageField_l9nvelqm ? JSON.parse(rowData.imageField_l9nvelqm) : '');
});
}
2.8.4. 修改活动对话框绑定下述函数
![](https://yida-support.oss-cn-shanghai.aliyuncs.com/static/png/1699868140093-055a353a-2c1b-4255-9c00-2da34ee1bac6.png)
// 确认修改活动
export function onEditActivityOk() {
// 需要校验组件的唯一标识集合
const editFieldList = [
'textField_los2eej1',
'selectField_los2eej2',
'selectField_los2eej3',
'dateField_los2eej4',
'dateField_los2eej5',
'selectField_los2eej6',
'employeeField_los2eej7',
];
// 调用表单校验函数
this.fieldsValidate(editFieldList).then((errorList) => {
setTimeout(() => {
if (errorList.length > 0) {
// 表单校验未通过
return;
};
this.$('dialog_lowmwckf').set('confirmState', 'LOADING'); // 开启对话框加载状态
// 修改表单数据
this.dataSourceMap.editData.load({
formInstId: this.$('textField_los2eeja').getValue(), // 实例 id
updateFormDataJson: JSON.stringify({
textField_l9m5jvma: this.$('textField_los2eej1').getValue(), // 活动名称
radioField_l9m5jvmc: this.$('selectField_los2eej2').getValue(), // 活动类型
radioField_l9m5jvmg: this.$('selectField_los2eej3').getValue(), // 所属组织
dateField_l9m5jvmi: this.$('dateField_los2eej4').getValue(), // 开始时间
dateField_l9m5jvmj: this.$('dateField_los2eej5').getValue(), // 结束时间
radioField_l9m5jvmn: this.$('selectField_los2eej6').getValue(), // 活动进度
employeeField_l9m5jvmp: this.formatEmployeeFieldValue(this.$('employeeField_los2eej7').getValue()), // 发起人
imageField_l9nvelqm: (this.$('imageField_los2eej8').getValue() || []).map((item) => {
return {
downloadUrl: item.downloadURL || item.downloadUrl,
name: item.name,
previewUrl: item.imgURL || item.imgUrl,
url: item.url,
};
}), // 将上传图片的参数修改为符合接口传参的格式,否则数据无法修改
}),
}).then(() => {
this.$('dialog_lowmwckf').set('confirmState', 'NORMAL'); // 关闭对话框加载状态
this.$('dialog_lowmwckf').hide();
this.utils.toast({
title: '修改成功',
type: 'success',
});
setTimeout(() => {
this.setState({
tableIsLoading: true,
});
this.getData(); // 获取数据
}, 1000);
}).catch(({ message }) => {
this.utils.toast({
title: message,
type: 'error',
});
this.$('dialog_lowmwckf').set('confirmState', 'NORMAL'); // 关闭对话框加载状态
});
});
}, 0);
}
2.9. 删除活动(高级版)
2.9.1. 添加远程数据源
参考文档: 删除表单实例
接口配置如图:
![](https://yida-support.oss-cn-shanghai.aliyuncs.com/static/png/1699868197624-58f06645-76ff-465f-8b6d-6f1a51a1a20c.png)
![](https://yida-support.oss-cn-shanghai.aliyuncs.com/static/png/1675049383702-82f52660-02fc-4ce8-a1b9-b60f308565c6.png)
`/${window.pageConfig.appType}/v1/form/deleteFormData.json`
2.9.2. 添加删除活动对话框
配置如图:
![](https://yida-support.oss-cn-shanghai.aliyuncs.com/static/png/1699868244992-e5908f9d-d451-4469-a720-cad41248db24.png)
2.9.3. 配置操作列并绑定下述函数
![](https://yida-support.oss-cn-shanghai.aliyuncs.com/static/png/1699868287558-5c4fb6ca-56c2-45bb-8cb1-ca630b448dfc.png)
// 删除活动弹窗
export function onDeleteActivityDialog(rowData) {
this.$('dialog_l9njsj8t').show(() => {
this.$('textField_los2eejb').setValue(rowData.formInstId);
});
}
2.9.4. 删除活动对话框绑定下述函数
![](https://yida-support.oss-cn-shanghai.aliyuncs.com/static/png/1699868339030-e13675e1-c234-4b89-80ec-f5ac25aba6b9.png)
// 确认删除活动
export function onDeleteActivityOk() {
this.$('dialog_l9njsj8t').set('confirmState', 'LOADING'); // 开启对话框加载状态
// 删除表单数据
this.dataSourceMap.deleteData.load({
formInstId: this.$('textField_los2eejb').getValue(), // 实例 id
}).then(() => {
this.$('dialog_l9njsj8t').set('confirmState', 'NORMAL'); // 关闭对话框加载状态
this.$('dialog_l9njsj8t').hide();
this.utils.toast({
title: '删除成功',
type: 'success',
});
setTimeout(() => {
this.setState({
tableIsLoading: true,
});
this.getData(); // 获取数据
}, 1000);
}).catch(({ message }) => {
this.utils.toast({
title: message,
type: 'error',
});
this.$('dialog_l9njsj8t').set('confirmState', 'NORMAL'); // 关闭对话框加载状态
});
}
2.10. 批量删除活动(高级版)
2.10.1. 配置 FaaS 连接器
可参考下述文档配置连接器:
FaaS 连接器 - 批量删除表单实例 | 钉钉宜搭·帮助中心
2.10.2. 添加变量并配置行选择器
参考上述 2.2.2.7 和 2.2.4.6。
2.10.3. 添加远程数据源
![](https://yida-support.oss-cn-shanghai.aliyuncs.com/static/png/1701242843464-73b76903-b22d-4a39-bd91-e39098ca088a.png)
2.10.4. 添加批量删除活动对话框
配置如图:
![](https://yida-support.oss-cn-shanghai.aliyuncs.com/static/png/1701243335120-73eb3abb-721b-47da-9272-02873fbb10ec.png)
2.10.5. 配置顶部操作并绑定下述函数
![](https://yida-support.oss-cn-shanghai.aliyuncs.com/static/png/1701243400881-a083fa17-fd71-4c74-844d-0f60722329ae.png)
// 批量删除活动弹窗
export function onBatchDeleteActivityDialog(rowData) {
const { selectedTableDataRowKey = [] } = this.state;
if (!selectedTableDataRowKey.length) {
this.utils.toast({
title: '当前未选中任何活动',
type: 'warning',
});
return;
}
this.$('dialog_lpjg5aha').show(() => {
this.$('numberField_lpjg8ky1').setValue(selectedTableDataRowKey.length);
});
}
2.10.6. 批量删除活动对话框绑定下述函数
![](https://yida-support.oss-cn-shanghai.aliyuncs.com/static/png/1701244234604-6e935f13-4a2f-488c-babf-0abc7fafcfda.png)
// 确认批量删除活动
export function onBatchDeleteActivityOk() {
const { selectedTableDataRowKeys = [] } = this.state;
this.$('dialog_lpjg5aha').set('confirmState', 'LOADING'); // 开启对话框加载状态
// 批量删除表单数据
this.dataSourceMap.batchDeleteData.load({
inputs: JSON.stringify({
body: {
formUuid: 'FORM-4C833A663C8F4FC7A265CB075A82ED962L0T', // 活动信息表formUuid
appType: pageConfig.appType, // 应用 appType
formInstanceIdList: selectedTableDataRowKeys, // 需要删除的数据实例id列表
asynchronousExecution: true, // 是否需要异步执行该任务
executeExpression: false, // 是否需要触发表单绑定的校验规则、关联业务规则和第三方服务回调
},
}),
}).then((res) => {
this.$('dialog_lpjg5aha').set('confirmState', 'NORMAL'); // 关闭对话框加载状态
const { success, error } = res;
if (success) {
this.$('dialog_lpjg5aha').hide();
this.utils.toast({
title: '批量删除成功',
type: 'success',
});
setTimeout(() => {
this.setState({
tableIsLoading: true,
selectedTableDataRowKeys: [],
});
this.getData(); // 获取数据
}, 1000);
} else {
this.utils.toast({
title: error,
type: 'success',
});
}
}).catch(({ message }) => {
this.utils.toast({
title: message,
type: 'error',
});
this.$('dialog_lpjg5aha').set('confirmState', 'NORMAL'); // 关闭对话框加载状态
});
}
2.11. 图片下载(高级版)
不支持钉钉工作台或移动端中使用。
2.11.1. 引入图片下载所需的三方 JS 资源
![](https://yida-support.oss-cn-shanghai.aliyuncs.com/static/png/1699868423976-e8867837-c073-4bd2-a223-fe3d0d1527a6.png)
export async function didMount() {
if (!this.utils.isMobile() || !this.isDingTalkEnv()) {
// 不支持在钉钉工作台或移动端中下载
try {
await this.utils.loadScript('https://g.alicdn.com/code/lib/jszip/3.9.1/jszip.min.js');
await this.utils.loadScript('https://g.alicdn.com/code/lib/FileSaver.js/2.0.5/FileSaver.min.js');
console.log('DownloadImage Load Success');
} catch (e) {
this.utils.toast({
title: '图片下载加载失败',
type: 'error'
});
};
};
this.getData(); // 获取数据
}
2.11.2. 添加图片下载对话框
配置如下:
![](https://yida-support.oss-cn-shanghai.aliyuncs.com/static/png/1699868508784-2c4f6419-9884-4386-9872-aef9501931c9.png)
2.11.3. 添加变量
2.11.3.1. 当前选中的图片 id
![](https://yida-support.oss-cn-shanghai.aliyuncs.com/static/png/1699868558746-5b14c7e2-dbc8-4430-b5b5-a8dfc7f29958.png)
2.11.3.2. 当前选中的图片详情
![](https://yida-support.oss-cn-shanghai.aliyuncs.com/static/png/1699868605816-7489f843-1ce6-466b-bebf-772ca96ecfbb.png)
2.11.4. 配置图片下载对话框中的表格
2.11.4.1. 数据列
![](https://yida-support.oss-cn-shanghai.aliyuncs.com/static/png/1699868654261-8af5522c-62d3-446c-936a-37c770cb25d3.png)
2.11.4.2. 数据主键
previewUrl
2.11.4.3. 行选择器
![](https://yida-support.oss-cn-shanghai.aliyuncs.com/static/png/1699868724148-44acbc83-5ebe-4147-abf8-ecfa059a8020.png)
// 图片选择变动回调
export function onImageSelect(selectedRowKeys, records) {
this.setState({
selectedImageRowKeys: selectedRowKeys,
selectedImageDetail: records,
});
}
2.11.5. 配置操作列并绑定下述函数
![](https://yida-support.oss-cn-shanghai.aliyuncs.com/static/png/1699868852365-c12e4609-05db-4802-8229-847fba72c09f.png)
// 图片下载弹窗
export function onDownloadImageDialog(rowData) {
const { imageField_l9nvelqm } = rowData;
if (this.utils.isMobile() || this.isDingTalkEnv()) {
this.utils.toast({
title: '不支持在钉钉工作台或移动端中下载',
type: 'warning',
});
return;
};
if (!imageField_l9nvelqm) {
this.utils.toast({
title: '暂无图片需要下载',
type: 'warning',
});
return;
}
this.$('dialog_legisiyq').show(() => {
this.$('textField_legtgpx9').setValue(`批量下载文件_${this.utils.formatter('date', Date.now(), 'YYYYMMDDhhmmss')}`);
this.$('tablePc_legpq38q').set('data', JSON.parse(imageField_l9nvelqm));
this.setState({
selectedImageRowKeys: [],
selectedImageDetail: [],
});
});
}
2.11.6. 页面 JS 中添加工具函数
无需做任何修改。
// 单张图片下载
export function downloadFile(downloadUrl) {
const link = document.createElement('a');
link.href = downloadUrl;
document.body.appendChild(link);
link.click();
document.body.removeChild(link);
}
// 多张图片打包下载
export function downloadFiles(downloadfiles, fileName) {
const zip = new JSZip();
const result = downloadfiles.map(item => {
let promise = getFileBlob(item.downloadUrl).then((res) => {
zip.file(item.name, res, { binary: true });
});
return promise;
});
Promise.all(result).then(() => {
zip.generateAsync({ type: "blob" }).then((res) => {
saveAs(res, `${fileName}.zip`);
})
})
}
// 通过请求获取文件blob格式
function getFileBlob(url) {
return new Promise((resolve, reject) => {
let request = new XMLHttpRequest()
request.open("GET", url, true)
request.responseType = "blob"
request.onload = (res) => {
if (res.target.status == 200) {
resolve(res.target.response)
} else {
reject(res)
}
}
request.send()
})
}
2.11.7. 图片下载对话框绑定下述函数
![](https://yida-support.oss-cn-shanghai.aliyuncs.com/static/png/1699868969992-decaddb2-66ec-4b1d-824c-130d9ddd0660.png)
// 确定下载图片
export function onDownloadImageOk() {
const { selectedImageDetail = [] } = this.state;
if (!selectedImageDetail.length) {
this.utils.toast({
title: '尚未选择任何图片',
type: 'warning'
});
return;
};
if (selectedImageDetail.length > 1) {
// 批量下载
this.$('textField_legtgpx9').validate();
const fileName = this.$('textField_legtgpx9').getValue();
if (!fileName) { return; };
this.downloadFiles(selectedImageDetail, fileName);
this.$('dialog_legisiyq').hide();
} else {
// 单张下载
this.downloadFile(selectedImageDetail[0].downloadUrl);
this.$('dialog_legisiyq').hide();
};
}
3. 实现效果
3.1. 高级版
![](https://yida-support.oss-cn-shanghai.aliyuncs.com/static/png/1701244443850-99d8a4a2-d1ba-4ec2-9e49-12575e963721.png)
3.2. 基础版
![](https://yida-support.oss-cn-shanghai.aliyuncs.com/static/png/1701244451999-7152efa4-103a-4637-8b97-4515d3d42322.png)
4. 在线试玩
本文档对您是否有帮助?