Commit d9ed1b47 authored by 覃振观's avatar 覃振观 👶

23-12-16: 下班前提交

parent 08074efd
...@@ -6,16 +6,16 @@ ...@@ -6,16 +6,16 @@
*/ */
function mapping(dataMapping, rawData) { function mapping(dataMapping, rawData) {
window.dataSet = {}; window.dataSet = {};
window.dataSet.tempId = 950366;
if(!rawData) { if(!rawData) {
window.dataSet.isInsert = true; window.dataSet.isInsert = true;
var rawData = {}; var rawData = {};
}else { }else {
window.dataSet.isInsert = false; window.dataSet.isInsert = false;
} }
let mapper = {}; let mapper = {}, returnData = {};
delete dataMapping.Mapper; delete dataMapping.mapper;
let entitySet = Object.entries(dataMapping); let entitySet = Object.entries(dataMapping);
let returnData = {};
tryForEach(entitySet,(entity) => { tryForEach(entitySet,(entity) => {
let beanName = entity[0], propertyNames = entity[1], entityData = rawData[beanName]; let beanName = entity[0], propertyNames = entity[1], entityData = rawData[beanName];
if(!isExist(rawData, beanName)) { throw {}; } if(!isExist(rawData, beanName)) { throw {}; }
...@@ -39,21 +39,28 @@ function mapping(dataMapping, rawData) { ...@@ -39,21 +39,28 @@ function mapping(dataMapping, rawData) {
}); });
} else if(propertyNames instanceof Object) { } else if(propertyNames instanceof Object) {
// Grid 时执行此逻辑 // Grid 时执行此逻辑
let listMap = {}, ids = []; let listMap = {}, ids = [], rowId = ''; //tryForEach 变量作用域注意
entityData.forEach(rowData => { entityData.forEach(rowData => {
let id = rowData[propertyNames.id]; debugger;
listMap.id = rowData; rowId = rowData[propertyNames.id];
ids.push(id); listMap[rowId] = rowData;
ids.push(rowId);
tryForEach(propertyNames.columns, (property) => { tryForEach(propertyNames.columns, (property) => {
mapper[property] = {}; mapper[property] = [];
mapper[property][id] = beanName; let data = {};
data[rowId] = beanName;
mapper[property].push(data)
}); });
}) })
rawData[beanName] = {};
rawData[beanName].raw = entityData;
rawData[beanName].compares = listMap;
rawData[beanName].ids = ids;
debugger;
return; return;
} }
}); });
dataMapping.Mapper = mapper; dataMapping.mapper = mapper;
// ---------------- 暂不处理无法执行到此处的情况 ---------------- // ---------------- 暂不处理无法执行到此处的情况 ----------------
// 这里写死 映射对象为:‘dataMapping’ // 这里写死 映射对象为:‘dataMapping’
window.dataMapping = dataMapping; window.dataMapping = dataMapping;
...@@ -115,6 +122,92 @@ function isExist(obj, property, objName) { ...@@ -115,6 +122,92 @@ function isExist(obj, property, objName) {
return true; return true;
} }
/**
* 若需要监听 Grid 数据,必须在此调用组件初始化,此处获取元素 ID
* @param elId
* @param options
* @returns {*}
*/
function listeningGrid(elId, options) {
let dataMapping = window.dataMapping;
let mappingEntry = Object.entries(dataMapping);
tryForEach(mappingEntry, entry => {
let beanName = entry[0], property = entry[1];
if(!(property instanceof Array) && elId.indexOf(beanName) > 0) {
let gridId = property.id;
if(!gridId) {
console.error("若需要监听 GridData ,必须在映射配置指定 ID !请检查。");
throw {};
}
options.columns.unshift({ name: gridId, hide: true });
}
});
let data = {};
if(!options.data){
console.error('listeningGrid 必须传入 Data !请检查');
data.Rows = '';
} else { data.Rows = options.data.raw; }
options.data = data;
const originalOnBeforeEdit = options.onBeforeEdit;
options.onBeforeEdit = function(editParm){
originalOnBeforeEdit.call(this, editParm);
let domIds = editParm.column.__domid.split('|'), recordId = editParm.record.__id;
let parentDomId = domIds[0]+'|'+2+'|'+recordId; // +'|'+domIds[2];
let rowDOM;
if(!(rowDOM = document.getElementById(domIds[0]+'|'+2+'|'+recordId))) {
rowDOM = document.getElementById(domIds[0]+'|'+1+'|'+recordId)
}
debugger;
let rowId = rowDOM.childNodes[0].childNodes[0].innerText;
}
const toolbar = options.toolbar;
if(toolbar) {
toolbar.items
tryForEach(toolbar.items, but => {
if(but.id === "menuAdd") {
const originalOnClick = but.click;
but.click = function() {
originalOnClick.call(this);
let mappingEntry = Object.entries(window.dataMapping);
tryForEach(mappingEntry, entry => {
let beanName = entry[0];
if(elId.indexOf(beanName) > 0) {
let idProperty = entry[1].id;
if(!idProperty) {
console.error("若需要监听 GridData ,必须在映射配置指定 ID !请检查。");
throw {};
}
let mapper = window.dataMapping.mapper;
let rowId = window.dataSet.tempId += 1
let data = {}, mapperData = {};
mapperData[rowId] = beanName;
mapper[idProperty].push(mapperData);
window.dataSet.newData[beanName].ids.push(rowId);
tryForEach(entry[1].columns, property => {
data[property] = '';
});
data[idProperty] = rowId;
window.dataSet.newData[beanName].compares[rowId] = data;
debugger;
UICtrl.addGridRow(gridManager, data);
}
})
}
}
})
debugger;
}
addObserver(elId);
var gridManager = UICtrl.grid(elId, options);
return gridManager;
}
/** /**
* 监听 input 管理页面显示的 Data。 * 监听 input 管理页面显示的 Data。
*/ */
...@@ -132,24 +225,23 @@ function inputEventListener() { ...@@ -132,24 +225,23 @@ function inputEventListener() {
* @param event * @param event
*/ */
function listenerContent(event) { function listenerContent(event) {
let mapper = window.dataMapping.Mapper; const property = event.target.getAttribute('name');
let property = event.target.getAttribute('name'); const beanMapping = window.dataMapping.mapper[property];
let beanMapping = mapper[property];
if(!beanMapping) { if(!beanMapping) {
console.error("The configuration was not found in the 'dataMapping' : '"+property+"'") console.error("The configuration was not found in the 'dataMapping' : '"+property+"'")
} }
let newData = window.dataSet.newData; let newData = window.dataSet.newData;
// Grid 时执行此逻辑 此处根据页面 editor 元素 Id 匹配。出现异常请检查该元素 Id 生成规则是否发生变化 // Grid 时执行此逻辑
if(typeof beanMapping === "string") { if(beanMapping instanceof Array) {
let eleId = event.currentTarget.id; tryForEach(beanMapping, row => {
let labels = eleId.split('_'); let rowEntry = Object.entries(row);
if(labels[0].indexOf(beanMapping) < 0) { debugger;
console.error('页面配置的gridId "'+labels[0]+'" 与映射配置中的 "'+beanMapping+'" 不匹配! 注意匹配规则为: elementId.indexOf(' + tryForEach(rowEntry, entry => {
' Mapping.ArrayKey )'); let rowNum = entry[0], beanName = entry[1];
} else { newData[beanName].compares[rowNum][event.target.getAttribute('name')] = event.target.value;
newData[beanMapping][labels[2]][labels[1]] = event.target.value;
console.log('Input value changed:', event.target.value); console.log('Input value changed:', event.target.value);
} })
})
return; return;
} }
// Form 时执行此逻辑 // Form 时执行此逻辑
...@@ -205,50 +297,49 @@ const gridEditor = function(event) { ...@@ -205,50 +297,49 @@ const gridEditor = function(event) {
const mutationConfig = { attributes: true, childList: true, subtree: true} const mutationConfig = { attributes: true, childList: true, subtree: true}
function checkUpdata() { function checkUpdata() {
let rawData = window.dataSet.rawData; let dataSet = window.dataSet;
let newData = window.dataSet.newData; let rawData = dataSet.rawData, newData = dataSet.newData;
window.dataSet.upData = {}; window.dataSet.upData = {};
let rawEntry = Object.entries(rawData); let rawEntry = Object.entries(rawData);
tryForEach(rawEntry, entry => { tryForEach(rawEntry, entry => {
let beanName = entry[0]; let beanName = entry[0];
debugger; let mapping = window.dataMapping[beanName], raw = rawData[beanName], now = newData[beanName];
let raw = rawData[beanName]; if(mapping instanceof Array) {
let now = newData[beanName]; // Form 时 执行此逻辑
if(raw instanceof Array) { if(!(getHashCode(JSON.stringify(raw)) === getHashCode(JSON.stringify(now)))) {
debugger; dataSet.upData[beanName] = newData[beanName];
}
return; return;
} else if (raw instanceof Object) { } else if (mapping instanceof Object) {
let rawHash = getHashCode(JSON.stringify(raw)); // Grid 时 执行此逻辑
let newHash = getHashCode(JSON.stringify(now)); let rawCompares = raw.compares, nowCompares = now.compares;
if(!(rawHash === newHash)) { if(!(getHashCode(JSON.stringify(rawCompares)) === getHashCode(JSON.stringify(nowCompares)))) {
window.dataSet.upData[beanName] = newData[beanName]; let rawIds = raw.ids, nowIds = now.ids;
dataSet.upData[beanName] = {};
dataSet.upData[beanName].del = [];
let delIds = rawIds.filter(x => !nowIds.includes(x));
tryForEach(delIds, id => {
dataSet.upData[beanName].del.push(rawCompares[id]);
});
dataSet.upData[beanName].add = []
let addIds = nowIds.filter(x => !rawIds.includes(x));
tryForEach(addIds, id => {
dataSet.upData[beanName].add.push(nowCompares[id]);
});
dataSet.upData[beanName].up = []
let nowEntry = Object.entries(nowCompares);
tryForEach(nowEntry, row => {
let key = row[0], rowNow = row[1];
if(rawCompares[key]) {
if(!(getHashCode(JSON.stringify(rawCompares[key])) === getHashCode(JSON.stringify(rowNow)))) {
dataSet.upData[beanName].up.push(rowNow);
} }
} }
});
}) }
}
/**
* 若需要监听 Grid 数据,必须在此调用组件初始化,此处获取元素 ID
* @param elId
* @param options
* @returns {*}
*/
function listeningGrid(elId, options) {
let dataMapping = window.dataMapping;
debugger;
const originalOnBeforeEdit = options.onBeforeEdit;
options.onBeforeEdit = function(editParm){
originalOnBeforeEdit.call(this, editParm);
let domIds = editParm.column.__domid.split('|');
let columnindex = editParm.column.columnindex;
let recordId = editParm.record.__id;
let rowId = domIds[0]+'|'+columnindex+'|'+recordId+'|'+domIds[2];
debugger;
} }
addObserver(elId);
return UICtrl.grid(elId, options);
})
} }
/** /**
......
...@@ -26,19 +26,25 @@ function initializeUI() { ...@@ -26,19 +26,25 @@ function initializeUI() {
}); });
} }
function deleteHandler(){
DataUtil.del({
gridManager:gridManager,idFieldName:'id',
onSuccess:function(){
}
});
}
function faceGrid(elId, data) { function faceGrid(elId, data) {
var toolbarOptions = UICtrl.getDefaultToolbarOptions({ var toolbarOptions = UICtrl.getDefaultToolbarOptions({
addHandler: function(){ addHandler: function(){
UICtrl.addGridRow(gridManager);
}, },
updateHandler: function(){ updateHandler: function(){
updateHandler(); updateHandler();
}, },
aaHandler: { id: 'ccAA', text: 'Hello', img: 'fa-music', className: 'btn-gray', deleteHandler: () => {
click: function () { gridManager.deleteSelectedRow();
alert('hello~!'); },
}
}
}); });
var gridManager = listeningGrid(elId, { var gridManager = listeningGrid(elId, {
columns: [ columns: [
...@@ -46,9 +52,7 @@ function faceGrid(elId, data) { ...@@ -46,9 +52,7 @@ function faceGrid(elId, data) {
type: 'text', type: 'text',
required: true required: true
}}, }},
{ display: "油墨覆盖率(%)", name: "coverageRate", width: 120, minWidth: 60, type: "string", align: "left", editor: { type: 'text', required: true } }, { display: "油墨覆盖率(%)", name: "coverageRate", width: 120, minWidth: 60, type: "string", align: "left", editor: { type: 'text', required: true } }
{ name: "colorId", hide: true },
{ name: "colorId" }
], ],
toolbar: toolbarOptions, toolbar: toolbarOptions,
dataType: "local", dataType: "local",
...@@ -107,13 +111,10 @@ function loadDataTest() { ...@@ -107,13 +111,10 @@ function loadDataTest() {
data: params.get("data") data: params.get("data")
}, function (data) { }, function (data) {
var showData = mapping(dataMapping, data.rawData); var showData = mapping(dataMapping, data.rawData);
debugger;
$('#submitForm').formSet(showData); $('#submitForm').formSet(showData);
var fronData = {}; var fronData = {};
fronData.Rows = data.rawData.fronColors; faceGrid("#fronColorsGrid", data.rawData.fronColors);
faceGrid("#fronColorsGrid", fronData); faceGrid("#backColorsGrid", data.rawData.backColors);
fronData.Rows = data.backColors;
faceGrid("#backColorsGrid", fronData);
inputEventListener(); inputEventListener();
}); });
} }
...@@ -122,8 +123,6 @@ function loadDataTest() { ...@@ -122,8 +123,6 @@ function loadDataTest() {
// alias必须唯一.这里不再要求所有对象的属性名唯一 { property : alias } // alias必须唯一.这里不再要求所有对象的属性名唯一 { property : alias }
// 未设 alias 情况同 { property : property } // 未设 alias 情况同 { property : property }
// Grid: 需要监听 Grid Data 时,必须设置 唯一 id 列。 // Grid: 需要监听 Grid Data 时,必须设置 唯一 id 列。
// 匹配规则 elementId.indexOf( dataMapping.ArrayKey )
// 即当前页面 ‘fronColorsGrid’.indexOf('fronColors')
var dataMapping = { var dataMapping = {
Product: [ Product: [
"productId" "productId"
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment