Commit 10f577e1 authored by 何远江's avatar 何远江

优化设置是否拆分操作,优化显示数据类型

parent 69108bc2
......@@ -245,3 +245,8 @@ export function filterRunData(data: any) {
configs
}
}
/**比较两个单元格是否是同一个 */
export function compareSameCell(c1, c2) {
return c1.sheet == c2.sheet && c1.row == c2.row && c1.colum == c2.colum
}
......@@ -139,7 +139,7 @@
></el-checkbox>
</template>
</vxe-column>
<vxe-column title="核心" field="numTitle" width="120">
<vxe-column title="特性" field="numTitle" width="120">
<template #default="{ row }">
<el-input v-model="row.numTitle" size="small"></el-input>
</template>
......@@ -225,7 +225,7 @@
></el-checkbox>
</template>
</vxe-column>
<vxe-column title="核心" field="numTitle" width="90">
<vxe-column title="特性" field="numTitle" width="90">
<template #default="{ row }">
<el-input v-model="row.numTitle" size="small"></el-input>
</template>
......
......@@ -5,7 +5,7 @@
<el-scrollbar height="100%">
<div class="w-[420px] h-full bg-white">
<p class="pl-2 text-lg font-bold leading-[40px] bg-slate-200">标注配置</p>
<SetArea @success="onSaveSuccess" />
<SetArea @success="onSaveSuccess" :areaTypeLen="areaTypeLen" />
<div class="pt-2 pl-2 pr-2 pb-2 text-sm border-t-2 border-b-2">
<p class="font-bold">标记区域</p>
......@@ -259,6 +259,16 @@ const initIsSetSheetMark = (length: number) => {
*/
const locaExcelAreaMarks: Recordable = reactive({})
const areaList = computed(() => flatten(Object.values(locaExcelAreaMarks)))
const areaTypeLen = computed(() => {
return areaList.value.reduce((pre, cur) => {
pre[cur.excelAreaType] += 1
return pre
}, {
data_area: 0,
public_area: 0,
attach_area: 0
})
})
const initExcelAreaMarksKey = (len: number) => {
Array.from({ length: len }).forEach((item, index) => {
Reflect.set(locaExcelAreaMarks, index, [])
......
......@@ -6,7 +6,7 @@
<el-step title="附加信息" />
</el-steps>
<SetDataArea v-show="activeStep == 0" ref="setDataAreaRef" @next="nextStep" />
<SetDataArea v-show="activeStep == 0" :areaTypeLen="areaTypeLen" ref="setDataAreaRef" @next="nextStep" />
<SetDataAreaTitle
ref="setDataAreaTitleRef"
v-show="activeStep == 1"
......@@ -33,6 +33,7 @@ import { ElMessage } from 'element-plus'
import { storeToRefs } from 'pinia'
import { useCommentExcel } from '@/stores/commentExcel'
const props = defineProps(['areaTypeLen'])
const commentExcelStore = useCommentExcel()
const { getFileInfo } = storeToRefs(commentExcelStore)
const emits = defineEmits(['success'])
......@@ -42,7 +43,7 @@ const setDataAreaRef = ref()
const setDataAreaTitleRef = ref()
const currentAreaMark = reactive<Recordable>({})
const nextStep = (index = 1, data: any) => {
const nextStep = async (index = 1, data: any) => {
switch (activeStep.value) {
case 0:
Object.assign(currentAreaMark, unref(data))
......@@ -54,6 +55,12 @@ const nextStep = (index = 1, data: any) => {
excelAreaTitle: data.excelAreaTitle
})
}
if (index == -2) {
currentAreaMark.desGroups = []
// 保存
await saveArea()
index = -1
}
break
case 2:
if (index != -1) {
......
<template>
<div class="set-attch-table">
<el-button size="small" @click="back">上一步</el-button>
<p style="font-size: 12px">
附加区域:<el-tag>{{
getRangetxt(formState.beginRow, formState.endRow, formState.beginColum, formState.endColum)
......@@ -55,12 +57,18 @@
</vxe-column>
<vxe-column title="是否拆分" field="numFlag" width="70">
<template #default="{ row }">
<el-checkbox size="small" true-label="Y" false-label="N" v-model="row.numFlag" @change="(e) => numFlagChange(e, row)"></el-checkbox>
<el-checkbox
size="small"
true-label="Y"
false-label="N"
v-model="row.numFlag"
@change="(e) => numFlagChange(e, row)"
></el-checkbox>
</template>
</vxe-column>
<vxe-column title="核心" field="numTitle" width="90">
<vxe-column title="特性" field="numTitle" width="90">
<template #default="{ row }">
<el-input v-model="row.numTitle" size="small"></el-input>
<el-input :disabled="row.numFlag == 'N'" v-model="row.numTitle" size="small"></el-input>
</template>
</vxe-column>
<vxe-column title="操作" field="action" width="50">
......@@ -71,17 +79,19 @@
</template>
</vxe-column>
</vxe-table>
<el-button size="small" @click="back">上一步</el-button>
<el-button type="primary" size="small" @click="setAttch">设置附加信息</el-button>
<el-button type="primary" size="small" @click="setNickName">设置别称</el-button>
<el-button type="primary" size="small" @click="setAttchTitle">设置标题</el-button>
<el-button type="success" size="small" @click="save">保存</el-button>
<el-button-group class="mt-2">
<el-button type="primary" size="small" @click="setAttch">设置附加信息</el-button>
<el-button type="primary" size="small" @click="setNickName">设置别称</el-button>
<el-button type="primary" size="small" @click="setAttchTitle">设置标题</el-button>
<el-button type="primary" size="small" @click="setNumFlag">设置拆分</el-button>
<el-button type="success" size="small" @click="save">保存</el-button>
</el-button-group>
</div>
</template>
<script lang="ts" setup>
import { reactive, ref, unref } from 'vue'
import { getRangePosition, getRangetxt, handleRangeTitle } from '@/utils/excel'
import { compareSameCell, getRangePosition, getRangetxt, handleRangeTitle } from '@/utils/excel'
import type { Recordable } from '@/types/global'
import { areaMarksColor } from '@/constants/excelConfig'
import { ElMessage } from 'element-plus'
......@@ -164,6 +174,25 @@ const setAttchTitle = () => {
luckysheet.setRangeFormat('bg', areaMarksColor['attch_title'])
}
const setNumFlag = () => {
if (!areaTitles.value.length) return
const rangeData = luckysheet.getRangeValue()
const titles = handleRangeTitle(rangeData)
// 匹配到的第一个单元格下标
const idx = areaTitles.value.findIndex((item) => {
return compareSameCell(item, titles[0])
})
if (idx == -1) return
for (let i = 0; i <= titles.length - 1; i++) {
const cell = areaTitles.value[i + idx]
if (!cell) return
Reflect.set(cell, 'numFlag', 'Y')
!cell.numTitle && Reflect.set(cell, 'numTitle', '尺码')
}
}
/**
* 设置附加信息别称
* @param row
......
......@@ -136,6 +136,8 @@ import { getRangePosition, getRangetxt, setRangeBackground } from '@/utils/excel
import { ElMessage, type FormInstance } from 'element-plus'
import { onMounted, reactive, ref, unref, watch } from 'vue'
const props = defineProps(['areaTypeLen'])
const luckysheet = (window as any).luckysheet
const emits = defineEmits(['next'])
const areaTypeSelectOption = ref<Recordable>([])
......@@ -156,7 +158,7 @@ watch(
() => formState.excelAreaType,
(val) => {
if (val) {
formState.excelAreaNicname = areaTypeSelectOption.value.find((v: any) => v.value == val).label
formState.excelAreaNicname = areaTypeSelectOption.value.find((v: any) => v.value == val).label + (props.areaTypeLen[val] || '')
}
}
)
......
<template>
<div class="excel-title-table">
<el-button size="small" @click="nextStep(-1)">上一步</el-button>
<vxe-table
:row-config="{ isCurrent: true }"
border
......@@ -29,9 +30,9 @@
></el-checkbox>
</template>
</vxe-column>
<vxe-column title="核心" field="numTitle" width="90">
<vxe-column title="特性" field="numTitle" width="90">
<template #default="{ row }">
<el-input v-model="row.numTitle" size="small"></el-input>
<el-input :disabled="row.numFlag == 'N'" v-model="row.numTitle" size="small"></el-input>
</template>
</vxe-column>
<vxe-column title="操作" field="action" width="50">
......@@ -42,16 +43,17 @@
</template>
</vxe-column>
</vxe-table>
<el-button size="small" @click="nextStep(-1)">上一步</el-button>
<el-button size="small" type="primary" @click="setAreaTitle">标记标题</el-button>
<el-button size="small" type="primary" @click="setNumFlag">设置拆分</el-button>
<el-button size="small" type="primary" @click="resetAreaTitle">重置</el-button>
<el-button size="small" type="success" @click="nextStep()">下一步</el-button>
<el-button size="small" type="success" @click="save">保存</el-button>
</div>
</template>
<script lang="ts" setup>
import { ref, reactive, unref } from 'vue'
import { getRangetxt, handleRangeTitle } from '@/utils/excel'
import { compareSameCell, getRangetxt, handleRangeTitle } from '@/utils/excel'
import { areaMarksColor } from '@/constants/excelConfig'
import { ElMessage } from 'element-plus'
import type { Recordable } from '@/types/global'
......@@ -67,6 +69,25 @@ const emits = defineEmits(['next'])
const excelAreaTitle = ref<Recordable[]>([])
const titleArea = ref<Recordable[]>([])
/**设置拆分 */
const setNumFlag = () => {
if (!excelAreaTitle.value.length) return
const rangeData = luckysheet.getRangeValue()
const titles = handleRangeTitle(rangeData)
// 匹配到的第一个单元格下标
const idx = excelAreaTitle.value.findIndex((item) => {
return compareSameCell(item, titles[0])
})
if (idx == -1) return
for (let i = 0; i <= titles.length - 1; i++) {
const cell = excelAreaTitle.value[i + idx]
if (!cell) return
Reflect.set(cell, 'numFlag', 'Y')
!cell.numTitle && Reflect.set(cell, 'numTitle', '尺码')
}
}
const setAreaTitle = () => {
const sheet = luckysheet.getSheet()
// 判断是否在同一sheet
......@@ -127,6 +148,13 @@ const numFlagChange = ([val], row: any) => {
}
}
const save = () => {
emits('next', -2, {
excelAreaTitle: unref(excelAreaTitle),
titleArea: unref(titleArea)
})
}
const delAreaTitle = (index: number, row: Recordable) => {
excelAreaTitle.value.splice(index, 1)
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment