refactor(superManagement): 提取合并单元格计算逻辑
- 将 ckProjectDetail 和 deductedDetail 函数中的合并单元格计算逻辑提取到单独的函数 calculationMergeSpan 中- 在 assessmentRecord/index.tsx 中添加 calculationMergeSpan 函数实现合并单元格计算 - 通过提取公共逻辑,提高代码复用性和可维护性
This commit is contained in:
parent
0604beef06
commit
28bbc32efb
|
@ -7,6 +7,7 @@ import {deleteDataModal, submitSimpleFormModal} from "@/components/tsx/ModalPro.
|
||||||
import api from "@/axios";
|
import api from "@/axios";
|
||||||
import {message} from "ant-design-vue";
|
import {message} from "ant-design-vue";
|
||||||
import {dictSelectNodes} from "@/config/dict.ts";
|
import {dictSelectNodes} from "@/config/dict.ts";
|
||||||
|
import {calculationMergeSpan} from "@/views/unitManage/police/assessmentRecord";
|
||||||
|
|
||||||
export const saveOrUpdateCkProject = (params: SaveOrUpdateCkProjectParams = {
|
export const saveOrUpdateCkProject = (params: SaveOrUpdateCkProjectParams = {
|
||||||
name: '',
|
name: '',
|
||||||
|
@ -62,35 +63,7 @@ export const deleteCkProjectById = (name: string, ckProjectId: string, callback:
|
||||||
|
|
||||||
export const ckProjectDetail = async (ckProjectId: string): Promise<CkProjectDetailRes[]> => {
|
export const ckProjectDetail = async (ckProjectId: string): Promise<CkProjectDetailRes[]> => {
|
||||||
const {data} = await api.get<CkProjectDetailRes[]>('/assessmentCriteria/ckProjectDetail', {ckProjectId})
|
const {data} = await api.get<CkProjectDetailRes[]>('/assessmentCriteria/ckProjectDetail', {ckProjectId})
|
||||||
|
calculationMergeSpan(data)
|
||||||
const groupRowSpan: Record<string, { firstIndex: number, count: number }> = {}
|
|
||||||
const itemRowSpan: Record<string, { firstIndex: number, count: number }> = {}
|
|
||||||
|
|
||||||
data.forEach((item, index) => {
|
|
||||||
//如果第一次没有值
|
|
||||||
if (item.ckGroupId) {
|
|
||||||
if (!groupRowSpan[item.ckGroupId]) {
|
|
||||||
groupRowSpan[item.ckGroupId] = {count: 1, firstIndex: index}
|
|
||||||
} else {
|
|
||||||
groupRowSpan[item.ckGroupId].count++;
|
|
||||||
data[index].groupRowSpan = 0
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (item.ckItemId) {
|
|
||||||
if (!itemRowSpan[item.ckItemId]) {
|
|
||||||
itemRowSpan[item.ckItemId] = {count: 1, firstIndex: index}
|
|
||||||
} else {
|
|
||||||
itemRowSpan[item.ckItemId].count++;
|
|
||||||
data[index].itemRowSpan = 0
|
|
||||||
}
|
|
||||||
}
|
|
||||||
})
|
|
||||||
|
|
||||||
Object.values(groupRowSpan).forEach(({count, firstIndex}) => data[firstIndex].groupRowSpan = count)
|
|
||||||
|
|
||||||
Object.values(itemRowSpan).forEach(({count, firstIndex}) => data[firstIndex].itemRowSpan = count)
|
|
||||||
|
|
||||||
return data
|
return data
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -5,37 +5,8 @@ import {Modal, Table} from "ant-design-vue";
|
||||||
|
|
||||||
export const deductedDetail = async (assessmentRecord: AssessmentRecordPagerVo) => {
|
export const deductedDetail = async (assessmentRecord: AssessmentRecordPagerVo) => {
|
||||||
const {data} = await api.get<DeductedDetailRes[]>('/assessmentRecord/deductedDetail', {assessmentRecordId: assessmentRecord.snowFlakeId})
|
const {data} = await api.get<DeductedDetailRes[]>('/assessmentRecord/deductedDetail', {assessmentRecordId: assessmentRecord.snowFlakeId})
|
||||||
const groupRowSpan: Record<string, { firstIndex: number, count: number }> = {}
|
|
||||||
const itemRowSpan: Record<string, { firstIndex: number, count: number }> = {}
|
|
||||||
|
|
||||||
data.forEach((item, index) => {
|
calculationMergeSpan(data)
|
||||||
//如果第一次没有值
|
|
||||||
if (item.ckGroupId) {
|
|
||||||
if (!groupRowSpan[item.ckGroupId]) {
|
|
||||||
groupRowSpan[item.ckGroupId] = {count: 1, firstIndex: index}
|
|
||||||
} else {
|
|
||||||
groupRowSpan[item.ckGroupId].count++;
|
|
||||||
data[index].groupRowSpan = 0
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (item.ckItemId) {
|
|
||||||
if (!itemRowSpan[item.ckItemId]) {
|
|
||||||
itemRowSpan[item.ckItemId] = {count: 1, firstIndex: index}
|
|
||||||
} else {
|
|
||||||
itemRowSpan[item.ckItemId].count++;
|
|
||||||
data[index].itemRowSpan = 0
|
|
||||||
}
|
|
||||||
}
|
|
||||||
})
|
|
||||||
|
|
||||||
Object.values(groupRowSpan).forEach(({count, firstIndex}) => {
|
|
||||||
data[firstIndex].groupRowSpan = count;
|
|
||||||
})
|
|
||||||
|
|
||||||
Object.values(itemRowSpan).forEach(({count, firstIndex}) => {
|
|
||||||
data[firstIndex].itemRowSpan = count;
|
|
||||||
})
|
|
||||||
|
|
||||||
const ckProjectDetailTableColumns: ColumnsType<DeductedDetailRes> = [
|
const ckProjectDetailTableColumns: ColumnsType<DeductedDetailRes> = [
|
||||||
{
|
{
|
||||||
|
@ -99,5 +70,37 @@ export const deductedDetail = async (assessmentRecord: AssessmentRecordPagerVo)
|
||||||
></Table>
|
></Table>
|
||||||
</div>
|
</div>
|
||||||
})
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 计算合并数值
|
||||||
|
* @param data
|
||||||
|
*/
|
||||||
|
export const calculationMergeSpan = (data: Record<string, any>[]) => {
|
||||||
|
const groupRowSpan: Record<string, { firstIndex: number, count: number }> = {}
|
||||||
|
const itemRowSpan: Record<string, { firstIndex: number, count: number }> = {}
|
||||||
|
|
||||||
|
data.forEach((item, index) => {
|
||||||
|
//如果第一次没有值
|
||||||
|
if (item.ckGroupId) {
|
||||||
|
if (!groupRowSpan[item.ckGroupId]) {
|
||||||
|
groupRowSpan[item.ckGroupId] = {count: 1, firstIndex: index}
|
||||||
|
} else {
|
||||||
|
groupRowSpan[item.ckGroupId].count++;
|
||||||
|
data[index].groupRowSpan = 0
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (item.ckItemId) {
|
||||||
|
if (!itemRowSpan[item.ckItemId]) {
|
||||||
|
itemRowSpan[item.ckItemId] = {count: 1, firstIndex: index}
|
||||||
|
} else {
|
||||||
|
itemRowSpan[item.ckItemId].count++;
|
||||||
|
data[index].itemRowSpan = 0
|
||||||
|
}
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
Object.values(groupRowSpan).forEach(({count, firstIndex}) => data[firstIndex].groupRowSpan = count)
|
||||||
|
Object.values(itemRowSpan).forEach(({count, firstIndex}) => data[firstIndex].itemRowSpan = count)
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue