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

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

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