327 lines
9.9 KiB
HTML
Raw Normal View History

2023-05-30 19:27:03 +08:00
<!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>