Commit 23677c39 authored by 何远江's avatar 何远江

添加区域标记修改

parent 8131d776
...@@ -171,6 +171,9 @@ export const apiClearMark = (fileId: any) => { ...@@ -171,6 +171,9 @@ export const apiClearMark = (fileId: any) => {
export const addExcelArea = (data: any) => { export const addExcelArea = (data: any) => {
return axios.post('/api/excelMark/addExcelArea', data) return axios.post('/api/excelMark/addExcelArea', data)
} }
export const editExcelArea = (data: any) => {
return axios.post('/api/excelMark/editExcelArea', data)
}
export const getExcelAreaByFileId = (orderFileId: string) => { export const getExcelAreaByFileId = (orderFileId: string) => {
return axios.get('/api/excelMark/getExcelAreaByFileID', { return axios.get('/api/excelMark/getExcelAreaByFileID', {
......
...@@ -30,20 +30,20 @@ ...@@ -30,20 +30,20 @@
<p class="text-slate-600"> <p class="text-slate-600">
选择区域:{{ 选择区域:{{
getRangetxt( getRangetxt(
cachAreaMark.beginRow, currentAreaMark.beginRow,
cachAreaMark.endRow, currentAreaMark.endRow,
cachAreaMark.beginColum, currentAreaMark.beginColum,
cachAreaMark.endColum currentAreaMark.endColum
) )
}} }}
</p> </p>
<p class="text-slate-600">区域类型:{{ cachAreaMark.excelAreaType || '--' }}</p> <p class="text-slate-600">区域类型:{{ currentAreaMark.excelAreaType || '--' }}</p>
<p class="text-slate-600">区域别称:{{ cachAreaMark.excelAreaNicname || '--' }}</p> <p class="text-slate-600">区域别称:{{ currentAreaMark.excelAreaNicname || '--' }}</p>
<vxe-table <vxe-table
class="mb-2" class="mb-2"
:row-config="{ isCurrent: true }" :row-config="{ isCurrent: true }"
border border
:data="cachHeadAreaData" :data="currentHeadAreaData"
size="mini" size="mini"
height="200" height="200"
> >
...@@ -55,8 +55,17 @@ ...@@ -55,8 +55,17 @@
</vxe-column> </vxe-column>
</vxe-table> </vxe-table>
<el-button type="primary" size="small" @click="saveAreaMark">保存</el-button> <el-button type="primary" size="small" @click="saveAreaMark">保存</el-button>
<el-button type="default" size="small" @click="resetCachArea()">重置选区</el-button> <el-button
<el-button type="default" size="small" @click="resetCachHeadArea">重置标题区</el-button> v-if="currentAreaMark.excelAreaId"
type="default"
size="small"
@click="resetCurrentAreaState(true)"
>取消修改</el-button
>
<el-button type="default" size="small" @click="resetCurrentArea()">重置选区</el-button>
<el-button type="default" size="small" @click="resetCurrentHeadArea"
>重置标题区</el-button
>
</div> </div>
<div class="mt-6 pl-2 pr-2 pb-2 text-sm border-b-2"> <div class="mt-6 pl-2 pr-2 pb-2 text-sm border-b-2">
...@@ -71,12 +80,12 @@ ...@@ -71,12 +80,12 @@
> >
<vxe-column title="sheet" field="sheetNum" width="60"></vxe-column> <vxe-column title="sheet" field="sheetNum" width="60"></vxe-column>
<vxe-column title="别称" field="excelAreaNicname"></vxe-column> <vxe-column title="别称" field="excelAreaNicname"></vxe-column>
<vxe-column title="区域" field="area" width="90"> <vxe-column title="区域" field="area" width="80">
<template #default="{ row }"> <template #default="{ row }">
{{ getRangetxt(row.beginRow, row.endRow, row.beginColum, row.endColum) }} {{ getRangetxt(row.beginRow, row.endRow, row.beginColum, row.endColum) }}
</template> </template>
</vxe-column> </vxe-column>
<vxe-column title="操作" field="action" width="90"> <vxe-column title="操作" field="action" width="110">
<template #default="{ row }"> <template #default="{ row }">
<el-link <el-link
class="mr-1" class="mr-1"
...@@ -85,6 +94,9 @@ ...@@ -85,6 +94,9 @@
@click.stop="chooseConnect(row)" @click.stop="chooseConnect(row)"
>关联</el-link >关联</el-link
> >
<el-link class="mr-1" style="font-size: 12px" type="primary" @click="toModify(row)"
>修改</el-link
>
<el-link style="font-size: 12px" type="danger" @click="delAreaMark(row)" <el-link style="font-size: 12px" type="danger" @click="delAreaMark(row)"
>删除</el-link >删除</el-link
> >
...@@ -98,8 +110,9 @@ ...@@ -98,8 +110,9 @@
<vxe-table border :data="connectList" size="mini" height="200"> <vxe-table border :data="connectList" size="mini" height="200">
<vxe-column title="关联名称" field="excelAreaId_dictText"></vxe-column> <vxe-column title="关联名称" field="excelAreaId_dictText"></vxe-column>
<vxe-column title="别关联名称" field="excelAreaBeId_dictText"></vxe-column> <vxe-column title="别关联名称" field="excelAreaBeId_dictText"></vxe-column>
<vxe-column title="操作" field="action" width="60"> <vxe-column title="操作" field="action" width="80">
<template #default="{ row, $rowIndex }"> <template #default="{ row, $rowIndex }">
<el-link style="font-size: 12px" type="primary">修改</el-link>
<el-link style="font-size: 12px" type="danger" @click="delConnect(row, $rowIndex)" <el-link style="font-size: 12px" type="danger" @click="delConnect(row, $rowIndex)"
>删除</el-link >删除</el-link
> >
...@@ -177,7 +190,7 @@ import { ...@@ -177,7 +190,7 @@ import {
showsheetbarConfig, showsheetbarConfig,
showstatisticBarConfig showstatisticBarConfig
} from '@/constants/excelConfig' } from '@/constants/excelConfig'
import { flatten } from 'lodash-es' import { flatten, cloneDeep } from 'lodash-es'
import { useCommentExcel } from '@/stores/commentExcel' import { useCommentExcel } from '@/stores/commentExcel'
import { storeToRefs } from 'pinia' import { storeToRefs } from 'pinia'
import { isFunction } from '@/utils/is' import { isFunction } from '@/utils/is'
...@@ -185,6 +198,7 @@ import { ElMessage, ElMessageBox } from 'element-plus' ...@@ -185,6 +198,7 @@ import { ElMessage, ElMessageBox } from 'element-plus'
import { import {
addExcelArea, addExcelArea,
addExcelAreaConnect, addExcelAreaConnect,
editExcelArea,
excelMarkRun, excelMarkRun,
getExcelAreaByFileId, getExcelAreaByFileId,
getExcelConnectByFileId, getExcelConnectByFileId,
...@@ -215,7 +229,7 @@ const beConnectData = computed(() => ...@@ -215,7 +229,7 @@ const beConnectData = computed(() =>
areaList.value.filter((v: any) => v.excelAreaId != currentConnectInfo.excelAreaId) areaList.value.filter((v: any) => v.excelAreaId != currentConnectInfo.excelAreaId)
) )
const formState = reactive({ const formState = reactive({
excelAreaId: '', // excelAreaId: '',
fileId: '', fileId: '',
sheetNum: 0, sheetNum: 0,
beginRow: '', beginRow: '',
...@@ -275,20 +289,20 @@ const cellClick = ({ row }) => { ...@@ -275,20 +289,20 @@ const cellClick = ({ row }) => {
}, 100) }, 100)
} }
const cachAreaMark = reactive<Recordable>({}) const currentAreaMark = reactive<Recordable>({})
const cachHeadAreaData = computed(() => cachAreaMark?.excelAreaTitle || []) const currentHeadAreaData = computed(() => currentAreaMark?.excelAreaTitle || [])
const setAreaMark = async (type: 'data' | 'head' = 'data') => { const setAreaMark = async (type: 'data' | 'head' = 'data') => {
if (type === 'data') { if (type === 'data') {
/** /**
* 判断是否有未保存的区域 * 判断是否有未保存的区域
* 如果有未保存的标记 -> 提示用户,是否覆盖 * 如果有未保存的标记 -> 提示用户,是否覆盖
*/ */
if (cachAreaMark.beginRow !== '' && cachAreaMark.beginRow !== undefined) { if (currentAreaMark.beginRow !== '' && currentAreaMark.beginRow !== undefined) {
await ElMessageBox.confirm('检测到未保存的标记,是否在覆盖当前标记区域?', '提示消息', { await ElMessageBox.confirm('检测到未保存的标记,是否在覆盖当前标记区域?', '提示消息', {
confirmButtonText: '覆盖', confirmButtonText: '覆盖',
cancelButtonText: '取消' cancelButtonText: '取消'
}) })
resetCachArea(() => { resetCurrentArea(() => {
// 设置当前选区 // 设置当前选区
luckysheet.setRangeShow({ luckysheet.setRangeShow({
row: [formState.beginRow, formState.endRow], row: [formState.beginRow, formState.endRow],
...@@ -297,7 +311,7 @@ const setAreaMark = async (type: 'data' | 'head' = 'data') => { ...@@ -297,7 +311,7 @@ const setAreaMark = async (type: 'data' | 'head' = 'data') => {
}) })
} }
Object.assign(cachAreaMark, unref(formState)) Object.assign(currentAreaMark, unref(formState))
// 设置完成之后重置表单 // 设置完成之后重置表单
Object.assign(formState, { Object.assign(formState, {
excelAreaType: '', excelAreaType: '',
...@@ -305,7 +319,7 @@ const setAreaMark = async (type: 'data' | 'head' = 'data') => { ...@@ -305,7 +319,7 @@ const setAreaMark = async (type: 'data' | 'head' = 'data') => {
}) })
} else { } else {
// 判断是否在同一sheet // 判断是否在同一sheet
if (formState.sheetNum !== cachAreaMark.sheetNum) { if (formState.sheetNum !== currentAreaMark.sheetNum) {
return ElMessage.error('请在同一sheet页中选择数据!') return ElMessage.error('请在同一sheet页中选择数据!')
} }
...@@ -332,9 +346,9 @@ const setAreaMark = async (type: 'data' | 'head' = 'data') => { ...@@ -332,9 +346,9 @@ const setAreaMark = async (type: 'data' | 'head' = 'data') => {
} }
// 合并组装的表头区域数据 // 合并组装的表头区域数据
cachAreaMark.excelAreaTitle currentAreaMark.excelAreaTitle
? cachAreaMark.excelAreaTitle.push(...result) ? currentAreaMark.excelAreaTitle.push(...result)
: (cachAreaMark.excelAreaTitle = result) : (currentAreaMark.excelAreaTitle = result)
} }
setTimeout(() => { setTimeout(() => {
...@@ -342,13 +356,11 @@ const setAreaMark = async (type: 'data' | 'head' = 'data') => { ...@@ -342,13 +356,11 @@ const setAreaMark = async (type: 'data' | 'head' = 'data') => {
luckysheet.setRangeFormat('bg', areaMarksColor[type]) luckysheet.setRangeFormat('bg', areaMarksColor[type])
}, 100) }, 100)
} }
const resetCachAreaState = () => { const resetCurrentAreaState = (isedit: boolean = false) => {
// 删除 excelAreaTitle 属性 // 删除 excelAreaTitle 属性
delete cachAreaMark.excelAreaTitle delete currentAreaMark.excelAreaTitle
// 重置 其他属性 // 重置 其他属性
Object.assign(cachAreaMark, { const tmp: Recordable = {
excelAreaId: '',
fileId: '',
sheetNum: 0, sheetNum: 0,
beginRow: '', beginRow: '',
beginColum: '', beginColum: '',
...@@ -356,51 +368,65 @@ const resetCachAreaState = () => { ...@@ -356,51 +368,65 @@ const resetCachAreaState = () => {
endColum: '', endColum: '',
excelAreaType: '', excelAreaType: '',
excelAreaNicname: '' excelAreaNicname: ''
}) }
isedit && (tmp.excelAreaId = '')
Object.assign(currentAreaMark, tmp)
} }
const resetCachArea = (fn?: Function) => { const resetCurrentArea = (fn?: Function) => {
// 清除区域颜色 // 清除区域颜色
luckysheet.setRangeShow( luckysheet.setRangeShow(
{ {
row: [cachAreaMark.beginRow, cachAreaMark.endRow], row: [currentAreaMark.beginRow, currentAreaMark.endRow],
column: [cachAreaMark.beginColum, cachAreaMark.endColum] column: [currentAreaMark.beginColum, currentAreaMark.endColum]
}, },
{ {
show: false, show: false,
success: () => { success: () => {
luckysheet.setRangeFormat('bg', areaMarksColor['default']) luckysheet.setRangeFormat('bg', areaMarksColor['default'])
resetCachAreaState() resetCurrentAreaState()
fn && fn() fn && fn()
} }
} }
) )
} }
const resetCachHeadArea = () => { const resetCurrentHeadArea = () => {
// 清除标题区域颜色 -> 设置成数据区域颜色 // 清除标题区域颜色 -> 设置成数据区域颜色
luckysheet.setRangeShow( luckysheet.setRangeShow(
{ {
row: [cachAreaMark.beginRow, cachAreaMark.endRow], row: [currentAreaMark.beginRow, currentAreaMark.endRow],
column: [cachAreaMark.beginColum, cachAreaMark.endColum] column: [currentAreaMark.beginColum, currentAreaMark.endColum]
}, },
{ {
show: false, show: false,
success: () => { success: () => {
luckysheet.setRangeFormat('bg', areaMarksColor['data']) luckysheet.setRangeFormat('bg', areaMarksColor['data'])
// 删除 excelAreaTitle 属性 // 删除 excelAreaTitle 属性
delete cachAreaMark.excelAreaTitle delete currentAreaMark.excelAreaTitle
} }
} }
) )
} }
const saveAreaMark = async () => { const saveAreaMark = async () => {
cachAreaMark.fileId = getFileInfo.value.orderFileId currentAreaMark.fileId = getFileInfo.value.orderFileId
const { data } = await addExcelArea(cachAreaMark) // 如果有id 调用修改,否则调用新增
// 接口保存成功之后,保存一份在本地 locaExcelAreaMarks const isEdit = !!currentAreaMark.excelAreaId
locaExcelAreaMarks[cachAreaMark.sheetNum].push(data.result) const { data } = isEdit
resetCachAreaState() ? await editExcelArea(currentAreaMark)
: await addExcelArea(currentAreaMark)
// 接口保存成功之后,保存/更新 locaExcelAreaMarks
if (isEdit) {
const idx = locaExcelAreaMarks[cachAreaMark.sheetNum].findIndex(
(v) => v.excelAreaId == cachAreaMark.excelAreaId
)
locaExcelAreaMarks[cachAreaMark.sheetNum].splice(idx, 1, cloneDeep(currentAreaMark))
} else {
locaExcelAreaMarks[currentAreaMark.sheetNum].push(data.result)
}
resetCurrentAreaState(true)
} }
const cachAreaMark = reactive<Recordable>({})
const cachDelOtherSheetArea = reactive<Recordable>({}) const cachDelOtherSheetArea = reactive<Recordable>({})
const delAreaMark = async (row: any) => { const delAreaMark = async (row: any) => {
// 调用接口删除 // 调用接口删除
...@@ -433,7 +459,19 @@ const delAreaMark = async (row: any) => { ...@@ -433,7 +459,19 @@ const delAreaMark = async (row: any) => {
) )
locaExcelAreaMarks[row.sheetNum].splice(index, 1) locaExcelAreaMarks[row.sheetNum].splice(index, 1)
} }
const toModify = (row) => {
// 判断当前区域是否关联了其他区域
if (
connectList.value.find(
(v) => row.excelAreaId == v.excelAreaId || row.excelAreaId == v.excelAreaBeId
)
) {
return ElMessage.warning('当前区域绑定与其他区域绑定了关联信息,请先删除关联信息之后再做修改!')
}
Object.assign(cachAreaMark, cloneDeep(row))
Object.assign(currentAreaMark, row)
}
const queryArea = async () => { const queryArea = async () => {
const { data } = await getExcelAreaByFileId(getFileInfo.value.orderFileId) const { data } = await getExcelAreaByFileId(getFileInfo.value.orderFileId)
data.result.forEach((item: any) => locaExcelAreaMarks[item.sheetNum || 0].push(item)) data.result.forEach((item: any) => locaExcelAreaMarks[item.sheetNum || 0].push(item))
...@@ -464,7 +502,6 @@ const confirmConnect = () => { ...@@ -464,7 +502,6 @@ const confirmConnect = () => {
addConnect(list) addConnect(list)
} }
const addConnect = async (list: any) => { const addConnect = async (list: any) => {
list.forEach((item: any) => { list.forEach((item: any) => {
currentConnectInfo.connectFiled.push({ currentConnectInfo.connectFiled.push({
title: item.title, title: item.title,
...@@ -547,7 +584,7 @@ const chooseConnectOnHide = () => { ...@@ -547,7 +584,7 @@ const chooseConnectOnHide = () => {
// excelAreaId: '', // excelAreaId: '',
// excelAreaBeId: '', // excelAreaBeId: '',
connectFiled: [], connectFiled: [],
beConnectFiled: [], beConnectFiled: []
// fileId: '' // fileId: ''
}) })
} }
......
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