micro-app/packages/icpx-workflow/public/form/index.html
2023-05-30 19:27:03 +08:00

327 lines
9.9 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta http-equiv="X-UA-Compatible" content="ie=edge" />
<title>formbuilder</title>
<link rel="stylesheet" href="./lib/dragula/dragula.css" />
<link rel="stylesheet" href="./lib/colpick/colpick.css" />
<link rel="stylesheet" href="./lib/datetime/jquery.datetimepicker.min.css" />
<link rel="stylesheet" href="./build/formbuilder.min.css" />
<link rel="stylesheet" href="../../src/theme/app.less" />
<link rel="stylesheet" href="../../src/app.less" />
<style>
html,
body {
height: 100%;
margin: 0;
}
</style>
</head>
<body>
<div id="formbuilder"></div>
</body>
<script type="text/javascript" src="./lib/lodash-4.17.5.js"></script>
<script type="text/javascript" src="./lib/jquery-1.8.2.js"></script>
<script type="text/javascript" src="./lib/jquery-ui.js"></script>
<script type="text/javascript" src="./lib/dragula/dragula.js"></script>
<script type="text/javascript" src="./lib/jquery.fileupload.js"></script>
<script type="text/javascript" src="./lib/viewer.js"></script>
<script type="text/javascript" src="./lib/colpick/colpick.js"></script>
<script type="text/javascript" src="./lib/dayjs/dayjs.min.js"></script>
<script type="text/javascript" src="./lib/dayjs/plugin/utc.js"></script>
<script type="text/javascript" src="./lib/dayjs/plugin/timezone.js"></script>
<script>
dayjs.extend(window.dayjs_plugin_utc);
dayjs.extend(window.dayjs_plugin_timezone);
</script>
<script type="text/javascript" src="./lib/datetime/jquery.datetimepicker.js"></script>
<script type="text/javascript" src="./build/formbuilder.min.js"></script>
<script type="text/javascript" src="./build/platform.min.js"></script>
<!-- 测试数据记得删除 -->
<script type="text/javascript" src="./data/datasets.js"></script>
<script type="text/javascript" src="./data/data.js"></script>
<script type="text/javascript" src="./data/events.js"></script>
<script>
$(function () {
'use strict';
});
const urls = {
batchGetFileUrl: '/api/file/applicationFile/batchGetFile',
uploadUrl: `/api/file/applicationFile/template/uploadUrl`,
uploadFinishedUrl: `/api/file/applicationFile/template/uploadFinished`,
batchRollbackUrl: `/api/file/applicationFile/batchRollback`,
downloadUrl: `/api/file/applicationFile/download?`,
};
// 是否是文件上传类型
const fileUploadTypes = ['FileUploadValue', 'ImageUploadValue', 'fileupload'];
const isFileUpload = type => {
return fileUploadTypes.includes(type);
};
// 枚举下拉类型
const enumTypes = [
'EnumValue',
'MultiEnumValue',
'LanuageSelValue',
'VersionValue',
'StateValue',
'SingleUserAutoComboxValue',
'SingleRoleAutoComboxValue',
'SingleGroupAutoComboxValue',
'EnumValue',
'MultiEnumValue',
'MultiLovListValue',
'ObjectEnumValue',
'MultiObjectEnumValue',
'BoolValue',
'LovListRadio',
'LovValue',
'LovListRadio',
'EnumRadioValue',
'ExhaustionLovListValue',
'ExhaustionObjectEnumValue',
'ObjectTypeListValue',
'CheckBoxListValue',
'Sql',
];
//动态数据源类型
const DynamicSelectTypes = ['HBDynamicSelect'];
// 获取token
let access_token = localStorage.getItem('access_token') || '';
let companyId = localStorage.getItem('companyId') || '';
let connect = localStorage.getItem('connect') || '';
access_token = access_token.replace(/"/g, '');
const token = `Bearer ${access_token}`;
$.formbuilder.icpx.setComponentConfig(fileUploadTypes, {
source: {
token,
uploadUrl: urls.uploadUrl,
uploadFinishedUrl: urls.uploadFinishedUrl,
batchRollbackUrl: urls.batchRollbackUrl,
downloadUrl: urls.downloadUrl,
appCode: 'DEFAULT-APP',
filePath: 'platform',
volumeCode: 'DEFAULT-VOLUME',
},
});
$.formbuilder.icpx.setComponentConfig(enumTypes, {
source: {
url: '/api/system/modelForm/getModelEnumList',
method: 'post',
token: token,
},
sourceParams: function () {
return {
objectType: this.options.tag?.ObjTypeName || '',
fieldName: this.options.tag?.InfoType || '',
};
},
});
$.formbuilder.icpx.setComponentConfig(DynamicSelectTypes, {
source: {
url: '/api/system/modelForm/getDynamicList',
method: 'post',
token: token,
},
sourceParams: function () {
return {
objectType: this.options.tag?.ObjTypeName || '',
fieldName: this.options.tag?.InfoType || '',
companyId: companyId,
connect: connect,
};
},
});
let formOptions = null;
// 处理文件类型单元格的数据
const loadFileCellValue = cell => {
// 如果是个数组,直接返回
if (cell.value instanceof Array) {
return Promise.resolve();
}
// 如果是其他类型,设置为空数组
if (typeof cell.value !== 'string') {
cell.value = [];
return Promise.resolve();
}
// 空字符串直接返回空数组
if (cell.value === '') {
cell.value = [];
return Promise.resolve();
}
const promise = fetch(urls.batchGetFileUrl, {
method: 'POST',
headers: {
'Content-Type': 'application/json;charset=UTF-8',
Authorization: token,
},
body: JSON.stringify({
eidstr: cell.value.split(';'),
}),
})
.then(res => res.json())
.then(data1 => {
data1.data.map(file => (file.fileId = file.eid));
cell.value = data1.data;
});
return promise;
};
// 获取文件对应的信息
const loadFileData = data => {
const promises = [];
if (!data.controls && !data.datasets?.data) {
return Promise.resolve([]);
}
if (data.controls) {
data.controls
.filter(control => !!control.tag)
.filter(
(control, index) => isFileUpload(control.type) || isFileUpload(control.tag.DisposeType),
)
.map(control => promises.push(loadFileCellValue(control)));
}
if (data.datasets?.data && data.datasets?.template) {
Object.keys(data.datasets.template).map(key => {
const templateCells = data.datasets.template[key];
const rows = data.datasets.data?.find(item => item.id === key)?.rows;
templateCells
.filter(templateCell => {
return !!templateCell.tag;
})
.map((templateCell, templateCellInx) => {
if (isFileUpload(templateCell.type) || isFileUpload(templateCell.tag?.DisposeType)) {
rows?.map(row => {
row?.map(cells => {
const cell = cells[templateCellInx];
promises.push(loadFileCellValue(cell));
});
});
}
});
});
}
return Promise.all(promises);
};
// 初始化方法, 创建(设计、填报、浏览)
const init = options => {
formOptions = options;
const buildOption = $.formbuilder.icpx.buildOption;
loadFileData(options.data).then(() => {
$('#formbuilder').formbuilder(buildOption(options));
});
};
// 加载数据
const loadData = data => {
loadFileData(data).then(() => {
$('#formbuilder').formbuilder('data', data);
});
};
// 获取设计数据
const getData = () => {
const _data = $('#formbuilder').formbuilder('data');
// 新增表单后未设计controls为空
if (_data) {
// 主表附件上传数据处理
if (_data.controls) {
_data.controls.map(control => {
if (isFileUpload(control.type) || isFileUpload(control?.tag?.DisposeType)) {
control.value = control.value.map(item => item.fileId).join(';');
}
});
}
// 从表附件上传数据处理
if (_data.datasets?.data) {
_data.datasets?.data.map(dataVal => {
dataVal?.rows.map(rowItem => {
rowItem.map(val1 => {
val1.map(val2 => {
if (isFileUpload(val2.type) || isFileUpload(val2?.tag?.DisposeType)) {
val2.value = val2.value.map(item => item.fileId).join(';');
}
});
});
});
});
}
}
return _data;
};
// 校验
const check = () => {
return $('#formbuilder').formbuilder('check');
};
/**
* 获取设计模式工具方法
*/
const getDesignUtils = () => {
return $.formbuilder.icpx.design;
};
/**
* 获取填报模式工具方法
*/
const getApplyUtils = () => {
return $.formbuilder.icpx.applying;
};
/**
* 导出数据方法
*/
const getExport = () => {
return $('#formbuilder').formbuilder('export');
};
// 获取填报数据
// 更新
// 导出
// 重置大小
// 销毁
window.methods = {
init,
loadData,
getData,
loadFileData,
check,
getDesignUtils,
getApplyUtils,
getExport,
};
setTimeout(() => {
if (
formOptions &&
formOptions.events &&
typeof formOptions.events.handelPopup == 'function'
) {
formOptions.events
.handelPopup('select', {
valueType: 'string',
componentType: 'user',
dataQueryType: 'company',
width: '368px',
})
.then(value => {
console.log(value);
})
.catch(err => {
console.log(err);
});
}
}, 1000);
</script>
</html>