vue3中使用ant表单合并

方法一
将对象中属性一致的存储为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
 }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值