|
@@ -522,7 +522,12 @@ export default {
|
|
|
selectedNoDisabledList: [], // 不包含disabled的被选中子项
|
|
|
selectedDisabledList: [], // 仅包含被禁用且未被选中的子项
|
|
|
}
|
|
|
+ if (!Array.isArray(serviceList) || serviceList.length === 0) {
|
|
|
+ console.warn('serviceList is empty or invalid');
|
|
|
+ return map;
|
|
|
+ }
|
|
|
serviceList.forEach(service => {
|
|
|
+ if(!Array.isArray(service.children)) return;
|
|
|
service.children.forEach(serve => {
|
|
|
if (serve.checked) {
|
|
|
// 被选中
|
|
@@ -539,16 +544,30 @@ export default {
|
|
|
return map
|
|
|
},
|
|
|
calcAlreadyBuyServiceNamesArr(ids = []) {
|
|
|
- if (ids.length <= 0) return []
|
|
|
+ if (ids.length <= 0) {
|
|
|
+ console.warn('IDs are empty');
|
|
|
+ return [];
|
|
|
+ }
|
|
|
const shadowServiceList = cloneDeep(this.serviceList)
|
|
|
+ if (!shadowServiceList || shadowServiceList.length === 0) {
|
|
|
+ console.error('Shadow service list is empty or invalid');
|
|
|
+ return [];
|
|
|
+ }
|
|
|
this.setState(ids, shadowServiceList)
|
|
|
const { selectedInfoList } = this.getSelected(shadowServiceList)
|
|
|
const { nameArr } = this.calcSelectedArrIdNames(selectedInfoList)
|
|
|
+ if (nameArr.length === 0) {
|
|
|
+ console.warn('No names were generated from the given IDs', ids, selectedInfoList);
|
|
|
+ }
|
|
|
return nameArr
|
|
|
},
|
|
|
// 计算选中列表的id数组(用来传参)和name数组(用来展示)
|
|
|
calcSelectedArrIdNames(selectedInfoList) {
|
|
|
const selectedInfoArr = []
|
|
|
+ if (!Array.isArray(selectedInfoList) || selectedInfoList.length === 0) {
|
|
|
+ console.warn('No selected info list provided');
|
|
|
+ return { idArr: [], nameArr: [] };
|
|
|
+ }
|
|
|
// 默认选中 [1,3]
|
|
|
selectedInfoList.forEach(s => {
|
|
|
const selectedId = s.selected
|
|
@@ -654,19 +673,19 @@ export default {
|
|
|
},
|
|
|
setState(selectedIds = this.defaultSelectedIds, serviceList = this.serviceList) {
|
|
|
const target = selectedIds
|
|
|
- if (!Array.isArray(target)) return
|
|
|
+ if (!Array.isArray(target) || target.length === 0) return
|
|
|
serviceList.forEach(service => {
|
|
|
const childrenValue = []
|
|
|
service.children.forEach(serve => {
|
|
|
// 倒着找,同时有2种options中的权限时候,优先选中(展示)比较大的那个
|
|
|
- const t = serve.options.findLast(item => target.includes(item.id))
|
|
|
+ const t = serve.options?.findLast(item => target.includes(item.id))
|
|
|
if (t) {
|
|
|
childrenValue.push(serve.value)
|
|
|
serve.checked = true
|
|
|
serve.selected = t.value
|
|
|
} else {
|
|
|
// 自定义备选项找不到,找原始list列表。因为有可能是套餐特有的id需要选中回显
|
|
|
- const t2 = serve.list.findLast(item => target.includes(item.id))
|
|
|
+ const t2 = serve.list?.findLast(item => target.includes(item.id))
|
|
|
if (t2) {
|
|
|
childrenValue.push(serve.value)
|
|
|
serve.checked = true
|