|
@@ -7,6 +7,9 @@
|
|
|
* @version
|
|
|
*/
|
|
|
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
const billsGuidance = (function () {
|
|
|
|
|
|
|
|
@@ -2260,6 +2263,26 @@ const billsGuidance = (function () {
|
|
|
//初始化dom时间
|
|
|
//@return {void}
|
|
|
function initDomEvents() {
|
|
|
+
|
|
|
+ // $('#autoSetMaterialBtn').on("click",()=>{
|
|
|
+ // console.log(libID);
|
|
|
+ // console.log(bills.cache);
|
|
|
+ // const billIDList=[];
|
|
|
+ // for(let i=0;i<20;i++){
|
|
|
+ // billIDList.push(bills.cache[i].ID);
|
|
|
+ // }
|
|
|
+ // const rationItems = await billsGuideItemsModel.find({ libID, billsID: { $in: billIDList }, rationID: { $ne: null } }, '-_id rationID billsID').lean();
|
|
|
+ // // bills.cache.forEach((item,index)=>{
|
|
|
+
|
|
|
+ // // })
|
|
|
+ // const aa= {
|
|
|
+ // grid:'std_billsGuidance_materials',
|
|
|
+ // libID: 'cf851660-3534-11ec-9641-2da8021b8e4e',
|
|
|
+ // billID: '1d2fc566-0a9b-11ea-a33d-5388f9783b09'
|
|
|
+ // }
|
|
|
+ // })
|
|
|
+
|
|
|
+
|
|
|
// 清单材料窗口
|
|
|
$("#bill-material-modal").on('hidden.bs.modal', function () {
|
|
|
billMaterial.cache = [];
|
|
@@ -2673,13 +2696,26 @@ const billsGuidance = (function () {
|
|
|
return list;
|
|
|
}
|
|
|
|
|
|
+ // 获取必填项下的ID和name的键值对
|
|
|
+ function getClassCodeStrData(nodes,data={classGroups:{},keyGroup:{}}){
|
|
|
+ nodes.forEach(node=>{
|
|
|
+ if (isProcessNode(node)&&node.data.required) {
|
|
|
+ node.children.forEach(subNode=>{
|
|
|
+ data.classGroups[subNode.data.ID]=subNode.data.name;
|
|
|
+ data.keyGroup[subNode.data.ID]=`${subNode.parent.data.name}:${subNode.data.name}`;
|
|
|
+ })
|
|
|
+ }
|
|
|
+ getClassCodeStrData(node.children,data);
|
|
|
+ })
|
|
|
+ return data;
|
|
|
+ }
|
|
|
|
|
|
//获取定额数据
|
|
|
// requireRationData必套定额对象
|
|
|
// optionalRationData 选逃定额对象
|
|
|
// classGroups classCode文字和id键值对
|
|
|
// classCodeList 各个classCode的pID和ID的关系
|
|
|
- function getItemData(nodes, requireRationData={}, optionalRationData={}, classGroups={}, prefixID = '', prefixSonID = '',IDData={}) {
|
|
|
+ function getItemData(nodes, requireRationData = {}, optionalRationData = {}, classGroups = {}, prefixID = '', prefixSonID = '', IDData = {},keyGroup={}) {
|
|
|
const processNodes = nodes.filter(node => isProcessNode(node));
|
|
|
// const classGroups = []; // 同层必填选项的数组(二维数组)
|
|
|
processNodes.forEach(processNode => {
|
|
@@ -2703,15 +2739,24 @@ const billsGuidance = (function () {
|
|
|
const kV = {};
|
|
|
kV[optionNode.data.ID] = optionNode.data.name;
|
|
|
Object.assign(classGroups, kV);
|
|
|
+
|
|
|
+ const keyData={};
|
|
|
+ keyData[optionNode.data.ID] = `${optionNode.parent.data.name}:${optionNode.data.name}`;
|
|
|
+ Object.assign(keyGroup,keyData);
|
|
|
} else {
|
|
|
const kV = {};
|
|
|
kV[optionNode.data.ID] = optionNode.data.name;
|
|
|
Object.assign(classGroups, kV);
|
|
|
+
|
|
|
+ const keyData={};
|
|
|
+ keyData[optionNode.data.ID] = `${optionNode.parent.data.name}:${optionNode.data.name}`;
|
|
|
+ Object.assign(keyGroup,keyData);
|
|
|
+
|
|
|
// 后代项是否有必填
|
|
|
if (hasRequireData(optionNode)) {
|
|
|
//后代项有必填
|
|
|
- prefixSonID='';
|
|
|
- getItemData(optionNode.children, requireRationData, optionalRationData, classGroups, optionNode.data.ID,prefixSonID,IDData);
|
|
|
+ prefixSonID = '';
|
|
|
+ getItemData(optionNode.children, requireRationData, optionalRationData, classGroups, optionNode.data.ID, prefixSonID, IDData,keyGroup);
|
|
|
} else {
|
|
|
//后代项无必填
|
|
|
optionNode.children.forEach(subOptionNode => {
|
|
@@ -2720,7 +2765,7 @@ const billsGuidance = (function () {
|
|
|
if (!requireRationData[subOptionNode.parent.data.ID]) requireRationData[subOptionNode.parent.data.ID] = [];
|
|
|
requireRationData[subOptionNode.parent.data.ID].push(getOptionalData(subOptionNode));
|
|
|
} else {
|
|
|
- if (!optionalRationData[subOptionNode.parent.data.ID]) optionalRationData[subOptionNode.data.ID] = [];
|
|
|
+ if (!optionalRationData[subOptionNode.parent.data.ID]) optionalRationData[subOptionNode.parent.data.ID] = [];
|
|
|
optionalRationData[subOptionNode.parent.data.ID].push(...getOptionalData(subOptionNode));
|
|
|
}
|
|
|
})
|
|
@@ -2730,27 +2775,44 @@ const billsGuidance = (function () {
|
|
|
} else {
|
|
|
// 蓝色节点,非必填
|
|
|
if (hasRequireData(processNode)) {
|
|
|
- //后代项有必填
|
|
|
- if(isProcessNode(processNode)){
|
|
|
+ //后代项有必填
|
|
|
+ if (isProcessNode(processNode)) {
|
|
|
//蓝色
|
|
|
- processNode.children.forEach((subProcessNode)=>{
|
|
|
- subProcessNode.children.forEach((sSubProcessNode)=>{
|
|
|
- //这里是特殊处理,因为原来的逻辑是直接把定额绑到必填白色选项中下面的,每个蓝色的一组,但是这样是不对的,需要绑定在必填白色选项下的蓝色节点,所以这里就需要传入蓝色节点的id
|
|
|
- const requireChildrenID=sSubProcessNode.parent.data.required?prefixSonID:sSubProcessNode.data.ID;
|
|
|
- IDData[sSubProcessNode.data.ID]=prefixID;
|
|
|
- getItemData(
|
|
|
- [sSubProcessNode],
|
|
|
- requireRationData,
|
|
|
- optionalRationData,
|
|
|
- classGroups,
|
|
|
- prefixID,
|
|
|
- requireChildrenID,
|
|
|
- IDData
|
|
|
-
|
|
|
- )
|
|
|
+ // 是否必套定额
|
|
|
+ if (isAllRationData(processNode)) {
|
|
|
+ processNode.children.forEach((subProcessNode) => {
|
|
|
+ subProcessNode.children.forEach((sSubProcessNode) => {
|
|
|
+ //这里是特殊处理,因为原来的逻辑是直接把定额绑到必填白色选项中下面的,每个蓝色的一组,但是这样是不对的,需要绑定在必填白色选项下的蓝色节点,所以这里就需要传入蓝色节点的id
|
|
|
+ const requireChildrenID = sSubProcessNode.parent.data.required ? prefixSonID : sSubProcessNode.data.ID;
|
|
|
+ IDData[sSubProcessNode.data.ID] = prefixID;
|
|
|
+ getItemData(
|
|
|
+ [sSubProcessNode],
|
|
|
+ requireRationData,
|
|
|
+ optionalRationData,
|
|
|
+ classGroups,
|
|
|
+ prefixID,
|
|
|
+ requireChildrenID,
|
|
|
+ IDData,
|
|
|
+ keyGroup
|
|
|
+ )
|
|
|
+ })
|
|
|
})
|
|
|
- })
|
|
|
- }
|
|
|
+ }else{
|
|
|
+ // 全部选套就不用走循环了,直接按照选套执行
|
|
|
+ let key = processNode.data.ID;
|
|
|
+ if (prefixID) key = prefixID;
|
|
|
+ if (prefixSonID) key = prefixSonID;
|
|
|
+ if (!optionalRationData[key]) optionalRationData[key] = [];
|
|
|
+ optionalRationData[key].push(...getOptionalData(processNode));
|
|
|
+ // 因为这里没有按照走整个流程,所以文字和ID的关系需要获取补充
|
|
|
+ if(hasRequireData(processNode)) {
|
|
|
+ const result =getClassCodeStrData(processNode.children)
|
|
|
+ Object.assign(classGroups,result.classGroups);
|
|
|
+ Object.assign(keyGroup,result.keyGroup);
|
|
|
+ } ;
|
|
|
+
|
|
|
+ }
|
|
|
+ }
|
|
|
} else {
|
|
|
let key = processNode.data.ID;
|
|
|
if (prefixID) key = prefixID;
|
|
@@ -2766,14 +2828,14 @@ const billsGuidance = (function () {
|
|
|
}
|
|
|
}
|
|
|
})
|
|
|
- return { requireRationData, optionalRationData, classGroups,IDData}
|
|
|
+ return { requireRationData, optionalRationData, classGroups, IDData, keyGroup }
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/* 生成特征分类: 前端测试使用,想要前端测试,需要在zhiyin.html中,将id=generate-classa的按钮放开 */
|
|
|
- function getItemCharacterData(nodes, prefix ,prefixID) {
|
|
|
+ function getItemCharacterData(nodes, prefix, prefixID) {
|
|
|
const processNodes = nodes.filter(node => isProcessNode(node));
|
|
|
const classGroups = []; // 同层必填选项的数组(二维数组)
|
|
|
processNodes.forEach(processNode => {
|
|
@@ -2792,8 +2854,8 @@ const billsGuidance = (function () {
|
|
|
} else {
|
|
|
// classItems.push(...getItemCharacterData(optionNode.children, optionNode.parent && optionNode.parent.data.required ? optionNode.data.name : ''));
|
|
|
const childrenClassItem = getItemCharacterData(
|
|
|
- optionNode.children,
|
|
|
- optionNode.parent && optionNode.parent.data.required ? optionNode.data.name : '' ,
|
|
|
+ optionNode.children,
|
|
|
+ optionNode.parent && optionNode.parent.data.required ? optionNode.data.name : '',
|
|
|
optionNode.parent && optionNode.parent.data.required ? optionNode.data.ID : ''
|
|
|
);
|
|
|
|
|
@@ -2803,9 +2865,9 @@ const billsGuidance = (function () {
|
|
|
&& optionNode.parent.data.required
|
|
|
&& childrenClassItem.length === 0
|
|
|
) {
|
|
|
- classItems.push({ name: optionNode.data.name,ID: optionNode.data.ID });
|
|
|
+ classItems.push({ name: optionNode.data.name, ID: optionNode.data.ID });
|
|
|
} else {
|
|
|
-
|
|
|
+
|
|
|
classItems.push(...childrenClassItem);
|
|
|
}
|
|
|
}
|
|
@@ -2835,7 +2897,7 @@ const billsGuidance = (function () {
|
|
|
// 拼接文本
|
|
|
const mergedName = `${prevClassItems[i].name}@${nextClassItems[j].name}`;
|
|
|
const mergedID = `${prevClassItems[i].ID}@${nextClassItems[j].ID}`;
|
|
|
- mergedClassItems.push({ name: mergedName,ID:mergedID});
|
|
|
+ mergedClassItems.push({ name: mergedName, ID: mergedID });
|
|
|
}
|
|
|
}
|
|
|
classGroups.splice(0, 2, mergedClassItems);
|
|
@@ -2855,17 +2917,17 @@ const billsGuidance = (function () {
|
|
|
|
|
|
// 获取选套定额:把所有分类数据的必套定额确定好了先。选套定额就是清单下所有定额除了必套的
|
|
|
function getOptionalRationIDs(optionalRationData) {
|
|
|
- const optionalRationIDs=[];
|
|
|
- Object.values(optionalRationData).forEach(optionalRation=>{
|
|
|
- if(optionalRation.length) optionalRationIDs.push(...optionalRation);
|
|
|
+ const optionalRationIDs = [];
|
|
|
+ Object.values(optionalRationData).forEach(optionalRation => {
|
|
|
+ if (optionalRation.length) optionalRationIDs.push(...optionalRation);
|
|
|
})
|
|
|
return [...new Set(optionalRationIDs)];
|
|
|
}
|
|
|
|
|
|
// 获取错套定额:清单下所有定额,除了分类对应的必套、选套定额
|
|
|
function getErrorRationIDs(requiredRationIDList, optionalRationIDs, guideNodes) {
|
|
|
- const finRequireData=[];
|
|
|
- requiredRationIDList.forEach(requiredRationIDs=>{
|
|
|
+ const finRequireData = [];
|
|
|
+ requiredRationIDList.forEach(requiredRationIDs => {
|
|
|
finRequireData.push(...requiredRationIDs);
|
|
|
})
|
|
|
const errorRationIDs = [];
|
|
@@ -2878,75 +2940,145 @@ const billsGuidance = (function () {
|
|
|
}
|
|
|
|
|
|
//把classcode和必套选套定额结合在一起
|
|
|
- function combineData(codeData,requireRationData,classGroups,IDData){
|
|
|
+ function combineData(codeData, requireRationData, optionalRationData, classGroups, IDData,keyGroup) {
|
|
|
+ // 这里要记录下已经被绑定的选套定额,因为没有被用的定额需要绑定到各个classcode下
|
|
|
+ const matchRationList = [];
|
|
|
//这里需要把绑定在子节点的定额更新到必填的白色选项中(classcode的值)
|
|
|
- const requireCombineData={};
|
|
|
- Object.keys(IDData).forEach(key=>{
|
|
|
- if(!requireCombineData[IDData[key]])requireCombineData[IDData[key]]=new Set();
|
|
|
- if(requireRationData[key]){
|
|
|
- requireRationData[key].forEach(subData=>{
|
|
|
- subData.forEach(subItem=>{
|
|
|
- requireCombineData[IDData[key]].add(subItem);
|
|
|
- })
|
|
|
- })
|
|
|
+ const requireCombineData = {};
|
|
|
+ const optionCombineData = {};
|
|
|
+ Object.keys(IDData).forEach(key => {
|
|
|
+ if (!requireCombineData[IDData[key]]) requireCombineData[IDData[key]] = new Set();
|
|
|
+ if (!optionCombineData[IDData[key]]) optionCombineData[IDData[key]] = new Set();
|
|
|
+ if (requireRationData[key]) {
|
|
|
+ requireRationData[key].forEach(subData => {
|
|
|
+ subData.forEach(subItem => {
|
|
|
+ requireCombineData[IDData[key]].add(subItem);
|
|
|
+ })
|
|
|
+ })
|
|
|
+ }
|
|
|
+ if (optionalRationData[key]) {
|
|
|
+ optionalRationData[key].forEach(subData => {
|
|
|
+ optionCombineData[IDData[key]].add(subData);
|
|
|
+ })
|
|
|
}
|
|
|
- })
|
|
|
|
|
|
- return codeData.map(classCodeData=>{
|
|
|
- const errorRationIDs=[];
|
|
|
- const optionalRationIDs=[];
|
|
|
- const requiredRationIDs=[];
|
|
|
- let name='';
|
|
|
- const classCodeIDs=classCodeData.ID;
|
|
|
- if(/@/.test(classCodeIDs)){
|
|
|
- classCodeIDs.split('@').forEach((classCodeID)=>{
|
|
|
- if(name){
|
|
|
- name=name+'@'+classGroups[classCodeID]
|
|
|
- }else{
|
|
|
- name=classGroups[classCodeID]
|
|
|
+ })
|
|
|
+ const finData = codeData.map(classCodeData => {
|
|
|
+ const errorRationIDs = [];
|
|
|
+ const optionalRationIDs = [];
|
|
|
+ const requiredRationIDs = [];
|
|
|
+ let name = '';
|
|
|
+ let key = '';
|
|
|
+ const classCodeIDs = classCodeData.ID;
|
|
|
+ if (/@/.test(classCodeIDs)) {
|
|
|
+ classCodeIDs.split('@').forEach((classCodeID) => {
|
|
|
+ if (name) {
|
|
|
+ name = name + '@' + classGroups[classCodeID];
|
|
|
+ key += keyGroup[classCodeID];
|
|
|
+ } else {
|
|
|
+ name = classGroups[classCodeID];
|
|
|
+ key = keyGroup[classCodeID];
|
|
|
};
|
|
|
- const unitRation=[];
|
|
|
- requireRationData[classCodeID].forEach(subItem=>{
|
|
|
- unitRation.push(...new Set(subItem));
|
|
|
- })
|
|
|
- if(requireRationData[classCodeID]&&requireRationData[classCodeID].length) {
|
|
|
+ // 一组的必套定额,先去重
|
|
|
+ const unitRation = [];
|
|
|
+
|
|
|
+ // 这里是必填选项下绑定必套定额
|
|
|
+ if (requireRationData[classCodeID] && requireRationData[classCodeID].length) {
|
|
|
+ requireRationData[classCodeID].forEach(subItem => {
|
|
|
+ unitRation.push(...new Set(subItem));
|
|
|
+ })
|
|
|
requiredRationIDs.push(unitRation);
|
|
|
+ // 这里也要把用过的必套定额先存起来
|
|
|
+ matchRationList.push(...unitRation);
|
|
|
}
|
|
|
- if(requireCombineData[classCodeID]&&requireCombineData[classCodeID].size){
|
|
|
+ //这里是必填选项下绑定在蓝色节点下的必套定额
|
|
|
+ if (requireCombineData[classCodeID] && requireCombineData[classCodeID].size) {
|
|
|
requiredRationIDs.push([...requireCombineData[classCodeID]]);
|
|
|
+ // 这里也要把用过的必套定额先存起来
|
|
|
+ matchRationList.push(...requireCombineData[classCodeID]);
|
|
|
}
|
|
|
+
|
|
|
+ // 这里是必填选项下绑定选套定额
|
|
|
+ if (optionalRationData[classCodeID] && optionalRationData[classCodeID].length) {
|
|
|
+ optionalRationIDs.push(...optionalRationData[classCodeID]);
|
|
|
+ matchRationList.push(...optionalRationData[classCodeID]);
|
|
|
+ }
|
|
|
+ //这里是必填选项下绑定在蓝色节点下的选套定额,下同
|
|
|
+ if (optionCombineData[classCodeID] && optionCombineData[classCodeID].size) {
|
|
|
+ optionalRationIDs.push(...optionCombineData[classCodeID]);
|
|
|
+ matchRationList.push(...optionCombineData[classCodeID]);
|
|
|
+ }
|
|
|
+
|
|
|
})
|
|
|
- return {name,requiredRationIDs,optionalRationIDs,errorRationIDs}
|
|
|
- }else{
|
|
|
- const unitRation=[];
|
|
|
- requireRationData[classCodeIDs].forEach(subItem=>{
|
|
|
- unitRation.push(...new Set(subItem));
|
|
|
- })
|
|
|
- name=classGroups[classCodeIDs];
|
|
|
- if(requireRationData[classCodeIDs]&&requireRationData[classCodeIDs].length) requiredRationIDs.push(unitRation);
|
|
|
- if(requireCombineData[classCodeIDs]&&requireCombineData[classCodeIDs].size) requiredRationIDs.push([...requireCombineData[classCodeIDs]]);
|
|
|
- return {name,requiredRationIDs,optionalRationIDs,errorRationIDs}
|
|
|
+ return { name,key, requiredRationIDs, optionalRationIDs: [...new Set(optionalRationIDs)], errorRationIDs }
|
|
|
+ } else {
|
|
|
+ const unitRation = [];
|
|
|
+ name = classGroups[classCodeIDs];
|
|
|
+ key = keyGroup[classCodeIDs];
|
|
|
+ if (requireRationData[classCodeIDs] && requireRationData[classCodeIDs].length){
|
|
|
+ requireRationData[classCodeIDs].forEach(subItem => {
|
|
|
+ unitRation.push(...new Set(subItem));
|
|
|
+ })
|
|
|
+ requiredRationIDs.push(unitRation);
|
|
|
+ // 这里也要把用过的必套定额先存起来
|
|
|
+ matchRationList.push(...unitRation);
|
|
|
+ }
|
|
|
+
|
|
|
+ if (requireCombineData[classCodeIDs] && requireCombineData[classCodeIDs].size) {
|
|
|
+ requiredRationIDs.push([...requireCombineData[classCodeIDs]])
|
|
|
+ // 这里也要把用过的必套定额先存起来
|
|
|
+ matchRationList.push(...requireCombineData[classCodeIDs]);
|
|
|
+ };
|
|
|
+
|
|
|
+ if (optionalRationData[classCodeIDs] && optionalRationData[classCodeIDs].length) {
|
|
|
+ optionalRationIDs.push(...optionalRationData[classCodeIDs]);
|
|
|
+ matchRationList.push(...optionalRationData[classCodeIDs]);
|
|
|
+ }
|
|
|
+ if (optionCombineData[classCodeIDs] && optionCombineData[classCodeIDs].size) {
|
|
|
+ optionalRationIDs.push(...optionCombineData[classCodeIDs]);
|
|
|
+ matchRationList.push(...optionalRationData[classCodeIDs]);
|
|
|
+ }
|
|
|
+ return { name,key, requiredRationIDs, optionalRationIDs: [...new Set(optionalRationIDs)], errorRationIDs }
|
|
|
}
|
|
|
})
|
|
|
+ const unMatchRation = [];
|
|
|
+ Object.values(optionalRationData).forEach(data => {
|
|
|
+ data.forEach((rationID) => {
|
|
|
+ if (!matchRationList.includes(rationID)) {
|
|
|
+ unMatchRation.push(rationID);
|
|
|
+ }
|
|
|
+ })
|
|
|
+ })
|
|
|
+ // 这里把没有使用过的必套定额也丢到了选套里面
|
|
|
+ Object.values(requireRationData).forEach(data => {
|
|
|
+ data.forEach((rationData) => {
|
|
|
+ rationData.forEach(rationID=>{
|
|
|
+ if (!matchRationList.includes(rationID)) {
|
|
|
+ unMatchRation.push(rationID);
|
|
|
+ }
|
|
|
+ })
|
|
|
+ })
|
|
|
+ })
|
|
|
+ return { classData: finData, unMatchRation };
|
|
|
}
|
|
|
|
|
|
$('#generate-class').click(() => {
|
|
|
if (bills.tree.selected && bills.tree.selected.guidance.tree) {
|
|
|
- const classCodeData = getItemCharacterData(bills.tree.selected.guidance.tree.roots);
|
|
|
- const {requireRationData,optionalRationData,classGroups,IDData} = getItemData(bills.tree.selected.guidance.tree.roots);
|
|
|
- const classData= combineData(classCodeData,requireRationData,classGroups,IDData);
|
|
|
- //因为所有的选套都是一样的,所以这里就直接赋值了
|
|
|
+ const classCodeData = getItemCharacterData(bills.tree.selected.guidance.tree.roots);
|
|
|
+ const { requireRationData, optionalRationData, classGroups, IDData, keyGroup } = getItemData(bills.tree.selected.guidance.tree.roots);
|
|
|
+ // const noMatchOptionRation=[];
|
|
|
+ const { classData, unMatchRation } = combineData(classCodeData, requireRationData, optionalRationData, classGroups, IDData,keyGroup);
|
|
|
+ //因为所有的选套都是一样的,所以这里就直接赋值了
|
|
|
const optionalRationIDs = getOptionalRationIDs(optionalRationData);
|
|
|
classData.forEach(item => {
|
|
|
- item.optionalRationIDs=optionalRationIDs
|
|
|
- item.errorRationIDs = getErrorRationIDs(item.requiredRationIDs, optionalRationIDs, bills.tree.selected.guidance.tree.items);
|
|
|
+ // 不在必填项下的选套都要绑定在每个classcode下
|
|
|
+ item.optionalRationIDs.push(...unMatchRation);
|
|
|
+ item.errorRationIDs = getErrorRationIDs(item.requiredRationIDs, item.optionalRationIDs, bills.tree.selected.guidance.tree.items);
|
|
|
})
|
|
|
- // console.log(optionalRationIDs);
|
|
|
+ console.log(optionalRationIDs);
|
|
|
console.log(classData);
|
|
|
}
|
|
|
});
|
|
|
-
|
|
|
-
|
|
|
return { initViews, initSlideSize };
|
|
|
})();
|
|
|
|