| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675 |
- import SearchFieldService from './SearchFieldService.js';
- import CurdWindowResource from '../api/dic/CurdWindowResource.js';
- import ProcessReportResource from '../api/dic/ProcessReportResource.js';
- import FieldResource from '../api/dic/FieldResource.js';
- import SelectFieldService from './SelectFieldService.js';
- import EnumSelectFieldService from './EnumSelectFieldService.js';
- import Common from '../common/Common.js';
- import { Uuid } from 'pc-component-v3';
- import { Notify } from 'pc-component-v3';
- /**
- * CURD 窗口服务类
- */
- export default {
- /**
- * 初始化CURD窗口编号
- * @param {CURD窗口编号} windowNo
- */
- initCurdWindow: function (windowNo) {
- var _self = this;
- var tabIndex = 0;
- // 从后台加载CURD窗口的定义
- return new Promise((resolve, reject) => {
- CurdWindowResource.uniqueByNo(windowNo).then(curdWindowDto => {
- if (curdWindowDto != null && curdWindowDto.tabs != null) {
- _self.initGridColumns(curdWindowDto, tabIndex).then(successData => {
- successData.curdWindowDto = curdWindowDto;
- successData.tabDto = curdWindowDto.tabs[tabIndex];
- resolve(successData);
- }, errorData => {
- reject();
- });
- } else {
- reject();
- }
- }, errorData => {
- reject(errorData);
- });
- });
- },
- /**
- * 初始化表格列
- */
- initGridColumns: function (curdWindowDto, tabIndex) {
- var _self = this;
- var tab = curdWindowDto.tabs[tabIndex];
- var tabGridFields = tab.tabGridView.tabGridFields;
- var promises = [];
- // 表格列标题
- var colHeaders = [];
- // 表格列定义
- var columns = [];
- for (var columnIndex = 0; columnIndex < tabGridFields.length; columnIndex++) {
- var tabGridField = tabGridFields[columnIndex];
- // 冗余字段,用于afterChange
- tabGridField.windowNo = curdWindowDto.no;
- tabGridField.tabIndex = tabIndex;
- // 创建列名的集合
- var columName = tabGridField.displayName;
- colHeaders.push(columName);
- // 创建列定义
- var displayType = tabGridField.displayType;
- var fieldName = tabGridField.fieldName;
- var column = null;
- if (displayType == 'TextBoxEditor'
- || displayType == 'TextAreaEditor'
- || displayType == '') {
- column = {
- type: 'text',
- };
- } else if (displayType == 'DoubleBoxEditor'
- || displayType == 'IntegerBoxEditor'
- || displayType == 'LongBoxEditor'
- || displayType == 'FloatBoxEditor'
- || displayType == 'BigDecimal') {
- column = {
- type: 'numeric',
- };
- } else if (displayType == 'PasswordTextBoxEditor') {
- column = {
- type: 'password',
- };
- } else if (displayType == 'CheckBoxEditor') {
- column = {
- type: 'checkbox',
- };
- } else if (displayType == 'DateBoxEditor') {
- column = {
- type: 'date',
- dateFormat: 'YYYY-MM-DD',
- correctFormat: true,
- };
- } else if (displayType == 'TimeBoxEditor') {
- column = {
- type: 'time',
- timeFormat: 'hh:mm:ss',
- correctFormat: true,
- };
- } else if (displayType == 'DateTimeBoxEditor') {
- column = {
- type: 'date',
- dateFormat: 'YYYY-MM-DD',
- correctFormat: true,
- };
- } else if (displayType == 'RichTextAreaEditor') {
- column = {
- type: 'html',
- };
- } else if (displayType == 'ListBoxEditor') {
- column = {
- type: 'handsontable',
- autoColumnSize: true,
- observeChanges: true,
- };
- let promise = SelectFieldService.loadSelectData(column, infoWindowNo, tabGridField);
- promises.push(promise);
- } else if (displayType == 'SearchBoxEditor') {
- column = {
- type: 'handsontable',
- autoColumnSize: true,
- observeChanges: true,
- };
- var infoWindowNo = tabGridField.infoWindowNo;
- let promise = SearchFieldService.loadInfoWindowData(column, infoWindowNo, tabGridField);
- promises.push(promise);
- } else if (displayType == 'ButtonEditor') {
- column = {
- type: 'text',
- };
- } else if (displayType == 'ListBoxEnumEditor') {
- column = {
- type: 'handsontable',
- autoColumnSize: true,
- observeChanges: true,
- };
- let promise = EnumSelectFieldService.loadSelectData(column, infoWindowNo, tabGridField);
- promises.push(promise);
- } else if (displayType == 'ImageEditor') {
- column = {
- type: 'text',
- };
- } else if (displayType == 'ImageListEditor') {
- column = {
- type: 'text',
- };
- } else if (displayType == 'RadioButtonGroupEditor') {
- column = {
- type: 'select',
- };
- } else if (displayType == 'Label') {
- column = {
- type: 'text',
- };
- } else if (displayType == 'Video') {
- column = {
- type: 'text',
- };
- } else if (displayType == 'File') {
- column = {
- type: 'text',
- };
- } else if (displayType == 'EnumMultiSelect') {
- column = {
- type: 'text',
- };
- } else if (displayType == 'ManyToManySetBoxEditor') {
- column = {
- type: 'text',
- };
- } else if (displayType == 'RedGreenEditor') {
- column = {
- type: 'text',
- };
- } else if (displayType == 'YearEditor') {
- column = {
- type: 'text',
- };
- } else if (displayType == 'YearMonthEditor') {
- column = {
- type: 'text',
- };
- }
- column.data = _self.curdWindowFieldValue(fieldName, tabGridField);
- column.readOnly = tabGridField.readOnly;
- column.readOnlyCellClassName = 'handsontable-cell-readonly';
- if (tabGridField.mandatory) {
- column.validator = _self.mandatoryValidator;
- }
- // bug fixed by jack,允许删除
- // column.allowInvalid = false;
- column.allowInvalid = true;
- column.required = tabGridField.mandatory;
- columns.push(column);
- }
- let data = {
- colHeaders: colHeaders,
- columns: columns,
- };
- if (promises.length > 0) {
- return new Promise((resolve, reject) => {
- Promise.all(promises).then(successData => {
- resolve(data);
- }, errorData => {
- reject();
- });
- });
- } else {
- return new Promise((resolve, reject) => {
- resolve(data);
- });
- }
- },
- /**
- * 强制字段验证
- * @param {*} value
- * @param {*} callback
- */
- mandatoryValidator: function (value, callback) {
- if (value == null || value.length == 0) {
- callback(false);
- } else {
- callback(true);
- }
- },
- /**
- * CURD窗口 HandsonTable 获取列的显示内容
- */
- curdWindowFieldValue: function (attr, tabGridField) {
- return function (row, value) {
- if (row == '##getColumnDef##' && value == row) {
- return tabGridField;
- }
- if (attr == 'id') {
- return row.id;
- } else {
- if (row.data == null || row.data[attr] == null) {
- return null;
- } else {
- // TODO
- if (row.data[attr].displayValue.length > tabGridField.entityFieldIndex) {
- var key = row.data[attr].displayValue[tabGridField.entityFieldIndex];
- if (tabGridField.displayType == 'ListBoxEnumEditor') {
- if (tabGridField.keyValues == null || tabGridField.keyValues.length == 0) {
- return null;
- } else {
- let value1 = null;
- tabGridField.keyValues.forEach(keyValue => {
- if (keyValue.keyStr == key) {
- value1 = keyValue.value;
- }
- });
- return value1;
- }
- } else {
- return key;
- }
- } else {
- return '';
- }
- }
- }
- };
- },
- /**
- * 表格中单元格的数据发生改变
- * @param {*} changes 单元格和变化前后的数值
- * @param {*} source 数据变化的种类
- */
- afterChange: function (hot, changes, source) {
- if (source === 'loadData') {
- return; //don't save this change
- }
- if (changes == null || changes.length == 0) {
- return;
- }
- var _self = this;
- function toString(fieldValue) {
- if (fieldValue == null) {
- return null;
- } else {
- return fieldValue.id + ',' + fieldValue.displayName + ',' + fieldValue.fieldType;
- }
- }
- function isFieldValue(fieldValue) {
- if (fieldValue == null) {
- return false;
- } else {
- if (fieldValue.fieldType == 'String' || fieldValue.fieldType == 'Key' || fieldValue.fieldType == 'ManyToManyKey') {
- return true;
- } else {
- return false;
- }
- }
- }
- changes.forEach(([row, prop, oldValue, newValue]) => {
- if (oldValue == newValue) {
- return;
- }
- var tabGridField = prop('##getColumnDef##', '##getColumnDef##');
- if (tabGridField.entityFieldIndex >= 1) {
- return;
- }
- var newFieldValue = {
- id: '',
- displayValue: [],
- fieldType: 'Key',
- };
- var displayType = tabGridField.displayType;
- switch (displayType) {
- case 'ID':
- case 'TextBoxEditor':
- case 'DoubleBoxEditor':
- case 'IntegerBoxEditor':
- case 'LongBoxEditor':
- case 'FloatBoxEditor':
- case 'PasswordTextBoxEditor':
- case 'TextAreaEditor':
- case 'RichTextAreaEditor':
- case 'CheckBoxEditor':
- case 'TimeBoxEditor':
- case 'DateTimeBoxEditor':
- case 'ButtonEditor':
- case 'ImageEditor':
- case 'ImageListEditor':
- case 'Canvas':
- case 'RadioButtonGroupEditor':
- case 'Label':
- case 'Video':
- case 'File':
- case 'BigDecimalEditor':
- case 'EnumMultiSelect':
- case 'ManyToManySetBoxEditor':
- case 'RedGreenEditor':
- case 'YearEditor':
- case 'YearMonthEditor': {
- newFieldValue.fieldType = 'String';
- newFieldValue.displayValue[0] = newValue;
- break;
- }
- case 'DateBoxEditor': {
- newFieldValue.fieldType = 'String';
- var newValueFormat = moment(newValue).format('YYYY-MM-DD');
- if (newValueFormat == 'Invalid date') {
- Notify.error('错误', '当前时间格式不正确,请重新输入。', 3000);
- newFieldValue.displayValue[0] = newValue;
- } else {
- newFieldValue.displayValue[0] = newValueFormat;
- }
- break;
- }
- case 'ListBoxEnumEditor': {
- if (newValue == null || newValue == '') {
- newFieldValue.fieldType = 'String';
- newFieldValue.displayValue = [];
- } else {
- newFieldValue.fieldType = 'String';
- newFieldValue.displayValue = [newValue];
- }
- break;
- }
- case 'ListBoxEditor':
- if (newValue == null || newValue == '') {
- newFieldValue.fieldType = 'Key';
- newFieldValue.id = newValue;
- newFieldValue.displayValue = [];
- } else {
- newFieldValue.fieldType = 'Key';
- var newValueNumber = Number(newValue);
- newFieldValue.id = newValueNumber;
- if (tabGridField.keyValues == null || tabGridField.keyValues.length == 0) {
- newFieldValue.displayValue = [];
- } else {
- tabGridField.keyValues.forEach(keyValue => {
- if (keyValue.key == newValueNumber) {
- newFieldValue.displayValue = [keyValue.value];
- }
- });
- }
- }
- break;
- case 'SearchBoxEditor': {
- if (newValue == null || newValue == '') {
- newFieldValue.fieldType = 'Key';
- newFieldValue.id = newValue;
- } else {
- newFieldValue.fieldType = 'Key';
- newFieldValue.id = newValue;
- var requestUrl = 'FieldResource/getFieldValue1?';
- requestUrl += ('&windowNo=' + tabGridField.windowNo);
- requestUrl += ('&tabIndex=' + tabGridField.tabIndex);
- requestUrl += ('&fieldName=' + tabGridField.fieldName);
- requestUrl += ('&recordId=' + newValue);
- $.ajax({
- url: Common.getApiURL(requestUrl),
- type: 'get',
- dataType: 'json',
- async: false, // 设置成同步
- beforeSend: function (request) {
- Common.addTokenToRequest(request);
- },
- success: function (data) {
- newFieldValue.displayValue = data;
- },
- error: function (XMLHttpRequest, textStatus, errorThrown) {
- console.log(XMLHttpRequest);
- // Common.processException(XMLHttpRequest);
- },
- });
- }
- break;
- }
- }
- var rowData = hot.getSourceDataAtRow(row);
- if (rowData.data == null) {
- rowData.data = {};
- rowData.id = -1;
- }
- if (row.id == null) {
- rowData.id = -1;
- }
- rowData.data[tabGridField.fieldName] = newFieldValue;
- // 执行callout
- if (tabGridField.calloutProcessReportNo != undefined && tabGridField.calloutProcessReportNo != null) {
- _self.callout(hot, tabGridField.calloutProcessReportNo, rowData);
- }
- });
- },
- /**
- * 运行Callout
- * @param {流程报表编号} calloutProcessReportNo
- * @param {数据} modelData
- * @param {编号} index
- */
- callout: function (hot, calloutProcessReportNo, rowData) {
- var _self = this;
- // 查询流程和报表的定义
- ProcessReportResource.uniqueByNo(calloutProcessReportNo).then(successData => {
- if (successData == null) {
- return;
- }
- var modelData = {};
- modelData.id = rowData.id;
- modelData.data = rowData.data;
- modelData.changed = true;
- // 执行服务端的脚本
- ProcessReportResource.runCallout(calloutProcessReportNo, modelData).then(successData => {
- if (successData && successData.modelData) {
- var newModelData = successData.modelData;
- var newModelDataData = newModelData.data;
- for (let [key, value] of Object.entries(newModelDataData)) {
- rowData.data[key] = value;
- }
- hot.render();
- }
- }, errorData => {
- Common.processException(errorData);
- });
- }, errorData => {
- Common.processException(errorData);
- });
- },
- /**
- * 复制之前完成
- * @param {WEB表格} hot
- * @param {数据} data
- * @param {位置} coords
- */
- beforeCopy: function (hot, tabDto, data, coords) {
- // data -> [[1, 2, 3], [4, 5, 6]]
- // coords -> [{startRow: 0, startCol: 0, endRow: 1, endCol: 2}]
- var coord = coords[0];
- for (var row = coord.startRow; row <= coord.endRow; row++) {
- // 取出该行的数据
- var rowData = hot.getSourceDataAtRow(row);
- for (var col = coord.startCol; col <= coord.endCol; col++) {
- if (col < tabDto.tabGridView.tabGridFields.length) {
- var tabGridField = tabDto.tabGridView.tabGridFields[col];
- var displayType = tabGridField.displayType;
- // 对下拉框和搜索框类型的数据进行替换。
- switch (displayType) {
- //TODO
- case 'ListBoxEnumEditor': {
- let tempData = rowData.data[tabGridField.fieldName];
- if (tabGridField.keyValues != null
- && tempData != null
- && tempData.displayValue != null
- && tempData.displayValue.length > 0) {
- var value = tempData.displayValue[0];
- data[row - coord.startRow][col - coord.startCol] = value;
- } else {
- data[row - coord.startRow][col - coord.startCol] = null;
- }
- break;
- }
- case 'ListBoxEditor':
- case 'SearchBoxEditor': {
- let tempData = rowData.data[tabGridField.fieldName];
- if (tempData != null) {
- data[row - coord.startRow][col - coord.startCol] = tempData.id;
- } else {
- data[row - coord.startRow][col - coord.startCol] = null;
- }
- break;
- }
- }
- }
- }
- }
- },
- /**
- * 获取右击菜单
- */
- getContextMenu: function (hot, tabDto) {
- var contextMenu = {
- items: {
- 'removeRow': {
- name: '删除行',
- },
- 'openLinkWindow': {
- name: '新建数据',
- },
- 'viewInLinkWindow': {
- name: '查看数据',
- },
- 'editInLinkWindow': {
- name: '编辑数据',
- },
- 'refreshDropDown': {
- name: '刷新',
- },
- },
- callback: function (key, options) {
- var selected = hot.getSelected();
- function sortId(a, b) {
- return a.start.row - b.start.row;//由低到高
- }
- if (selected != null && selected.length > 0) {
- var row = selected[0][0];
- var col = selected[0][1];
- // 删除行
- if (key === 'removeRow') {
- let row1 = options;
- var num = 0;
- var aa = hot.getDataAtRow(0);
- if (row1.length > 0) {
-
- //将选中的值按照行号排序
- row1.sort(sortId);
- for (var i = 0; i < row1.length; i++) {
- var item = row1[i];
- var start = item.start.row - num;
- var end = item.end.row - num - start + 1;
- hot.alter('remove_row', start, end);
- num += end;
- }
- }
- } else if (key == 'openLinkWindow') {
- // 获取列的定义
- let tabGridField = tabDto.tabGridView.tabGridFields[col];
- // 进行界面的跳转
- let linkCurdWindowNo = tabGridField.linkCurdWindowNo;
- if (linkCurdWindowNo != null) {
- window.open(Common.getRedirectUrl('#/desktop/window/window-edit/create/'
- + linkCurdWindowNo
- + '/0?currPage=1&totalCount=4&saveClose=true&uuid='
- + Uuid.createUUID()));
- }
- } else if (key == 'viewInLinkWindow') {
- let data = hot.getSourceDataAtRow(row);
- if (data == null || data.id == null) {
- return;
- }
- // 编辑链接列
- // 获取列的定义
- let tabGridField = tabDto.tabGridView.tabGridFields[col];
- let fieldName = tabGridField.fieldName;
- if (data.data[fieldName] == null || data.data[fieldName].id == null) {
- return;
- }
- // 进行界面的跳转
- let linkCurdWindowNo = tabGridField.linkCurdWindowNo;
- if (linkCurdWindowNo != null) {
- window.open(Common.getRedirectUrl('#/desktop/window/window-read/view/'
- + linkCurdWindowNo
- + '/0/'
- + data.data[fieldName].id
- + '?currIndex=1&totalCount=1&saveClose=true&uuid=' + Uuid.createUUID()));
- }
- } else if (key == 'editInLinkWindow') {
- let data = hot.getSourceDataAtRow(row);
- if (data == null || data.id == null) {
- return;
- }
- // 编辑链接列
- // 获取列的定义
- let tabGridField = tabDto.tabGridView.tabGridFields[col];
- let fieldName = tabGridField.fieldName;
- if (data.data[fieldName] == null || data.data[fieldName].id == null) {
- return;
- }
- // 进行界面的跳转
- var linkCurdWindowNo = tabGridField.linkCurdWindowNo;
- if (linkCurdWindowNo != null) {
- window.open(Common.getRedirectUrl('#/desktop/window/window-edit/edit/'
- + linkCurdWindowNo
- + '/0/'
- + data.data[fieldName].id
- + '?currIndex=1&currIndex=1&totalCount=1&saveClose=true&uuid='
- + Uuid.createUUID()));
- }
- } else if (key == 'refreshDropDown') {
- let data = hot.getSourceDataAtRow(row);
- // 获取列的定义
- let tabGridField = tabDto.tabGridView.tabGridFields[col];
- if (tabGridField.displayType == 'ListBoxEditor') {
- var modelData = {};
- modelData.id = data.id;
- modelData.data = data.data;
- modelData.changed = true;
- modelData.windowNo = tabGridField.windowNo;
- modelData.tabIndex = 0;
- SelectFieldService.refreshField(tabGridField, tabGridField.windowNo, 0, modelData);
- }
- }
- }
- },
- };
- return contextMenu;
- },
- };
|