方法一
将对象中属性一致的存储为children
const arrTeaching = [
{
"sort": 0,
"classDisplayName": "暗示法ppp",
"courseName": "测试2239",
"classCourseId": "216214089134186496",
"eduCourseId": "186360853233221632",
"courseArrangingClassId": "216214088656035840",
"orgClassId": "191403001049776128",
"courseNum": 0,
"continuousCourseTime": 0,
"singleDoubleType": 0,
"lessonCategoryId": "0",
"placeId": "0",
"placeNameEn": "",
"placeName": "",
"courseShortName": "测试2239",
"uniqueKey": "4b094ee1-ff1f-4fb8-947a-1f6dcc497ead"
},
{
"sort": 1,
"classDisplayName": "物理化学走班",
"courseName": "物理",
"classCourseId": "216123637957599232",
"eduCourseId": "197618192263254016",
"courseArrangingClassId": "215382954413654021",
"orgClassId": "197618307019636736",
"courseNum": 0,
"continuousCourseTime": 0,
"singleDoubleType": 0,
"lessonCategoryId": "0",
"placeId": "0",
"placeNameEn": "",
"placeName": "",
"courseShortName": "物理",
"uniqueKey": "16320430872970"
},
{
"sort": 1,
"classDisplayName": "物理化学走班",
"courseName": "测试2240",
"classCourseId": "216123637961793537",
"eduCourseId": "186361181198434304",
"courseArrangingClassId": "215382954413654021",
"orgClassId": "197618307019636736",
"courseNum": 0,
"continuousCourseTime": 0,
"singleDoubleType": 0,
"lessonCategoryId": "0",
"placeId": "0",
"placeNameEn": "",
"placeName": "",
"courseShortName": "测试2240",
"uniqueKey": "16320430872970"
},
{
"sort": 1,
"classDisplayName": "物理化学走班",
"courseName": "测试2239",
"classCourseId": "216145267240935424",
"eduCourseId": "186360853233221632",
"courseArrangingClassId": "215382954413654021",
"orgClassId": "197618307019636736",
"courseNum": 0,
"continuousCourseTime": 0,
"singleDoubleType": 0,
"lessonCategoryId": "0",
"placeId": "0",
"placeNameEn": "",
"placeName": "",
"courseShortName": "测试2239",
"uniqueKey": "16320482156940"
},
{
"sort": 1,
"classDisplayName": "物理化学走班",
"courseName": "测试2238",
"classCourseId": "216145267240935425",
"eduCourseId": "186360882584961024",
"courseArrangingClassId": "215382954413654021",
"orgClassId": "197618307019636736",
"courseNum": 0,
"continuousCourseTime": 0,
"singleDoubleType": 0,
"lessonCategoryId": "0",
"placeId": "0",
"placeNameEn": "",
"placeName": "",
"courseShortName": "测试2238",
"uniqueKey": "16320482156940"
},
{
"sort": 1,
"classDisplayName": "物理化学走班",
"courseName": "测试2240",
"classCourseId": "216145267240935426",
"eduCourseId": "186361181198434304",
"courseArrangingClassId": "215382954413654021",
"orgClassId": "197618307019636736",
"courseNum": 0,
"continuousCourseTime": 0,
"singleDoubleType": 0,
"lessonCategoryId": "0",
"placeId": "0",
"placeNameEn": "",
"placeName": "",
"courseShortName": "测试2240",
"uniqueKey": "16320482156940"
},
{
"sort": 1,
"classDisplayName": "物理化学走班",
"courseName": "语文",
"classCourseId": "216145267240935427",
"eduCourseId": "188532761169059840",
"courseArrangingClassId": "215382954413654021",
"orgClassId": "197618307019636736",
"courseNum": 0,
"continuousCourseTime": 0,
"singleDoubleType": 0,
"lessonCategoryId": "0",
"placeId": "0",
"placeNameEn": "",
"placeName": "",
"courseShortName": "语文",
"uniqueKey": "16320482156940"
},
{
"sort": 2,
"classDisplayName": "一年级kkk",
"courseName": "信息技术",
"classCourseId": "216144946821275648",
"eduCourseId": "188532761185837063",
"courseArrangingClassId": "216144946334736386",
"orgClassId": "191403001062359040",
"courseNum": 0,
"continuousCourseTime": 0,
"singleDoubleType": 0,
"lessonCategoryId": "0",
"placeId": "0",
"placeNameEn": "",
"placeName": "",
"courseShortName": "信息技术",
"uniqueKey": "bec6aff8-6019-425c-b7be-767a9c2e19a5"
},
{
"sort": 3,
"classDisplayName": "一年级llll",
"courseName": "数学",
"classCourseId": "216214089134186497",
"eduCourseId": "188532761185837056",
"courseArrangingClassId": "216214088656035841",
"orgClassId": "191403001062359041",
"courseNum": 0,
"continuousCourseTime": 0,
"singleDoubleType": 0,
"lessonCategoryId": "0",
"placeId": "0",
"placeNameEn": "",
"placeName": "",
"courseShortName": "数学",
"uniqueKey": "4d0718fe-7c3d-45a5-8262-130cd212035b"
}
]
export const changeTeachingArr = (arrTeaching: any) => {
console.log(arrTeaching, 'arrTeaching')
// 将班级一致的存放在对象中
const resObj: any = {}
for (const item of arrTeaching) {
if (resObj[item.orgClassId]) {
resObj[item.orgClassId].push(item)
} else {
resObj[item.orgClassId] = [item]
}
}
console.log(resObj, 'resObj>>>')
// 数据的处理 为了将子集存放在child中
const res = []
for (const key in resObj) {
if (resObj[key].length > 1) {
const child: any = resObj[key].map((item: any) => ({
...item,
}))
res.push({
at: key,
child,
})
} else {
res.push(resObj[key][0])
}
}
console.log(res, 'res>>>')
// 将child长度存放到第一个要合并的对象中 如果后端已经处理好了下面有children那么直接使用下面的方法即可
let arr: any = []
res.map((responseDataItem) => {
if (responseDataItem.child) {
const len = responseDataItem.child.length
responseDataItem.child.map((timeDataItem: any, index: number) => {
arr = [
...arr,
{
...timeDataItem,
span: index === 0 ? len : 0,
},
]
return arr
})
} else {
arr.push({
...responseDataItem,
span: 1,
})
}
return arr
})
return arr
}
column = {
title: '班级',
width: 243,
noRender: true,
customRender: ({ text, record, index }: any) => {
console.log(record.span)
const obj = {
children: (
<div
xb-title
style="overflow: hidden;white-space: nowrap;text-overflow: ellipsis;"
>
{record.classDisplayName}
</div>
),
props: { rowSpan: record.span } as any,
}
return obj
},
},
{
title: '课程',
dataIndex: 'courseName',
width: 200,
},
{
key: 'courseShortName',
width: 100,
slots: {
customRender: 'courseShortName',
title: 'courseShortNameTitle',
},
},
{
title: '周课时',
key: 'courseNum',
width: 120,
slots: { customRender: 'courseNum' },
},
{
// title: '连堂次数',
key: 'continuousCourseTime',
width: 120,
slots: {
customRender: 'continuousCourseTime',
title: 'courseTimeTitle',
},
},
{
title: '单双周',
key: 'singleDoubleType',
width: 150,
slots: { customRender: 'singleDoubleType' },
},
{
key: 'lessonCategoryId',
width: 160,
slots: {
customRender: 'lessonCategoryId',
title: 'courseCategoryTitle',
},
},
{
key: 'placeId',
width: 150,
title: '场地',
slots: {
customRender: 'placeId',
title: 'placeTitle',
},
},
{
title: '操作',
width: 100,
noRender: true,
slots: { customRender: 'action' },
},
方法2:给定一个标记,跟当前的index做对比
//表格头
const teachingColumns: any = reactive({
list: [],
})
teachingColumns.list = assembleColumns()
const assembleColumns = () => {
let aIndex = 0
const columnsList = [
{
title: '班级',
dataIndex: 'displayName',
key: 'displayName',
width: 240,
noRender: true,
customRender: ({ text, record, index }: any) => {
const obj = {
children: text,
props: {} as any,
}
if (index == aIndex) {
obj.props.rowSpan = record.courseNum > 0 ? record.courseNum : 1
aIndex = (record.courseNum > 0 ? record.courseNum : 1) + aIndex
} else {
if (record.courseNum) {
obj.props.rowSpan = 0
} else {
obj.props.rowSpan = 1
}
}
obj.children = (
<span class="table-td-clamp uniline" v-t-tooltip>
{record.displayName}
</span>
)
return obj
},
},
{
title: '课程',
dataIndex: 'arrangeCourse',
width: 240,
noRender: true,
customRender: ({ text, record, index }: any) => {
const obj = {
children: text,
props: {} as any,
}
let singleDoubleName = ''
if (
record.arrangeCourse.singleDoubleType === ESingleDoubleType.Single
) {
singleDoubleName = '单-'
} else if (
record.arrangeCourse.singleDoubleType === ESingleDoubleType.Double
) {
singleDoubleName = '双-'
}
const courseName = record.arrangeCourse.shortName
? record.arrangeCourse.shortName
: record.arrangeCourse.name
const showName = `${singleDoubleName}${courseName}`
if (record.arrangeCourse.name) {
obj.children = (
<div>
<span class="table-td-clamp">{showName}</span>
</div>
)
} else {
obj.children = <span class="empty-td uniline" v-t-tooltip></span>
}
return obj
},
},
{
title: '任课老师',
dataIndex: 'courseTeacher',
width: 240,
noRender: true,
customRender: ({ text, record, index }: any) => {
const obj = {
children: text,
props: {} as any,
}
const currentCourse = record.arrangeCourse
if (currentCourse.name) {
let teacherStr = currentCourse.teacherList
.map((t) => {
return t.name
})
.join(',')
teacherStr = teacherStr !== '' ? teacherStr : '选择老师点击这里'
obj.children = (
<a
onClick={() => {
editCourseTeacherByItem(currentCourse)
}}
class="table-td-clamp"
>
{/* {teacherStr} */}
<span
v-t-tooltip
class={[
currentCourse.teacherList.length > 0
? 'arranged'
: 'noArrange',
'uniline',
]}
>
{teacherStr}
</span>
<span
v-show={currentCourse.teacherList.length > 0}
onClick={(e) => {
e.stopPropagation()
clearSelectedTeacher(currentCourse)
}}
class="del-icon"
>
<CloseSquareFilled style="font-size: 16px; color: #FF4D4F" />
</span>
</a>
)
} else {
obj.children = <span class="empty-td uniline" v-t-tooltip></span>
}
return obj
},
},
]
return columnsList
}
return {
teachingColumns
}