【修改】 word出题页面

This commit is contained in:
dlaren
2025-07-29 19:56:47 +08:00
committed by 陆光LG
parent d56d084a4f
commit cdeed046cb
4 changed files with 99 additions and 190 deletions

View File

@@ -1,6 +1,6 @@
import request from '@/config/axios'
export interface DocxVO {
export interface WordVO {
id?: number
parentId: number
status: number
@@ -9,49 +9,53 @@ export interface DocxVO {
}
// 查询Docx节点精简)列表
export const getSimpleDocxList = async (): Promise<DocxVO[]> => {
export const getSimpleWordList = async (): Promise<WordVO[]> => {
return await request.get({ url: '/exam/docx/simple-list' })
}
// 查询Docx节点列表
export const getDocxPage = async (params: PageParam) => {
export const getWordPage = async (params: PageParam) => {
return await request.get({ url: '/exam/docx/list', params })
}
// 查询Docx节点详情
export const getDocx = async (id: number) => {
export const getWord = async (id: number) => {
return await request.get({ url: '/exam/docx/get?id=' + id })
}
// 新增Docx节点
export const createDocx = async (data: DocxVO) => {
export const createWord = async (data: WordVO) => {
return await request.post({ url: '/exam/docx/create', data: data })
}
// 修改Docx节点
export const updateDocx = async (params: DocxVO) => {
export const updateWord = async (params: WordVO) => {
return await request.put({ url: '/exam/docx/update', data: params })
}
// 删除Docx节点
export const deleteDocx = async (id: number) => {
export const deleteWord = async (id: number) => {
return await request.delete({ url: '/exam/docx/delete?id=' + id })
}
// 查询Word节点列表(小类) 根据title查询出来下面所有的数据
export const getDocxInfos = async (title: string) => {
export const getDocxByNameList = async (title: string) => {
console.log(title)
return await request.get({ url: '/exam/docx/getByNameList?title=' + title })
}
// 2025-07-04 word统一获取考点
export const getDocxMaster = async (path: String) => {
export const getWordMaster = async (path: String) => {
return await request.get({ url: '/auto/wps/docxMaster?path=' + path })
}
// 上传文件
export const getDocxDataInfo = (data: any) => {
export const getWordDataInfo = (data: any) => {
return request.upload({ url: '/auto/wps/docxDataInfo', data })
}
export const getdocxMaster = (data: any) => {
return request.upload({ url: '/auto/wps/docxMaster', data })
}

View File

@@ -356,7 +356,6 @@ const { t } = useI18n() // 国际化
const message = useMessage() // 消息弹窗
const loading = ref(false) // 列表的加载中
const dialogVisible = ref(false) // 弹窗的是否展示
const isLoading = ref(false)
const dialogTitle = ref('') // 弹窗的标题
const formLoading = ref(false) // 表单的加载中1修改时的数据加载2提交的按钮禁用
const formType = ref('') // 表单的类型create - 新增update - 修改
@@ -404,21 +403,7 @@ const formData = ref({
}
]
})
const wordPointsFun = ref({
chineseName: '',
function: ''
})
const wordPoints = ref({
name: '',
englishName: '',
filePath: '',
type: '',
belongTo: '',
isboo: '',
function: '',
unit: '',
isExam: ''
})
let wordPointsInfosList: (typeof wordPoints)[] = []
const removePoint = (index: number) => {
list.value.splice(index, 1)
@@ -451,55 +436,36 @@ const documentList = ref([
])
const dialogFormVisibleWordInfo = ref(false)
const dialogFormVisibleWordInfos = ref(false)
const nodeFunction = ref('')
const titles = ref('')
const englishName = ref('')
const filePath = ref('')
const upFilePath = ref('')
const functionList = ref<string[]>([])
const wordData = reactive({
chineseName: '',
englishName: '',
filePath: '',
function: [] as string[]
})
const handleCheckChange = (data: Tree, checked: boolean, indeterminate: boolean) => {
// if (checked || indeterminate) {
// wordPoints.value.belongTo = data.belongTo
// wordPoints.value.parameter = data.isboo
// wordPoints.value.type = data.type
// wordPointsFun.value = {
// chineseName: '',
// function: ''
// }
// wordPointsFun.value.chineseName = data.toChinese
// wordPointsFun.value.function = data.nodeFunction
// wordPoints.value.function.push(cloneDeep(wordPointsFun.value))
// console.log(wordPoints)
// }
if (data.titleType == '2') {
wordPoints.value.name = chineseName.value + data.toChinese
wordPoints.value.filePath = filePath.value
wordPoints.value.function = englishNames.value + data.nodeFunction
wordPoints.value.englishName = englishNames.value
wordPoints.value.belongTo = data.belongTo
wordPoints.value.isboo = data.isboo
wordPoints.value.type = data.type
wordPoints.value.unit = data.unit
wordPoints.value.isExam = '0'
wordPointsInfosList.push(cloneDeep(wordPoints.value))
console.log(data)
const wordPoints = {
firstName: '',
index: '',
function: '',
examName: '',
examCode: '',
filePath: ''
}
if (data.functions != null && data.functions != "") {
wordPoints.firstName = chineseName.value
wordPoints.index = textIndex.value
wordPoints.function = data.functions
wordPoints.examName = data.chineseName
wordPoints.examCode = '111'
wordPoints.method = data.parameter
wordPointsInfosList.push(cloneDeep(wordPoints))
}
console.log(data, checked, indeterminate)
}
const file = ref()
// 获取docx文件并使用文件流进行解析
const getDocxDataInfo = async () => {
const fileInput = document.getElementById('docxFile') as HTMLInputElement
if (fileInput != null) {
const file = fileInput.files[0]
const res = await WordApi.getDocxDataInfo({ file: file })
file.value = fileInput.files[0]
const res = await WordApi.getWordDataInfo({ file: file.value })
wordPointsList.value = []
wordPointsList.value.push(...handleTree(res.data))
}
@@ -514,28 +480,18 @@ const queryParams = reactive({
nodeFunction: undefined
})
const chineseName = ref('')
const nodeFunctions = ref('')
const englishNames = ref('')
const textIndex = ref()
// 打开
const handleNodelClick = async (row: any) => {
queryParams.nodeFunction = row.selectName
console.log(row)
// 获取名称
chineseName.value = '【' + row.name + '】'
filePath.value = row.filePath
nodeFunctions.value = row.selectName
englishNames.value = row.englishName
const res = await WordApi.getWordInfos(queryParams)
textIndex.value = row.index
const res = await WordApi.getDocxByNameList(row.type)
wordPointsInfoList.value = []
wordPointsInfoList.value.push(...handleTree(res))
dialogFormVisibleWordInfos.value = true
}
const handleDelete = (row) => {
console.log(row)
@@ -547,33 +503,52 @@ const handleDelete = (row) => {
}
const submitWordPoints = async () => {
const res = await WordApi.getWordListInfos(wordPointsInfosList)
wordPoints.value = {
name: '',
englishName: '',
filePath: '',
type: '',
belongTo: '',
isboo: '',
function: '',
unit: '',
isExam: ''
}
console.log(wordPointsInfosList)
const res = await WordApi.getdocxMaster({
data: JSON.stringify(wordPointsInfosList),
file: file.value
})
wordPointsInfosList = []
for (let i = 0; i < res.length; i++) {
console.log(res)
for (let i = 0; i < res.data.length; i++) {
var indexFlag = false
for (let x = 0; x < list.value.length; x++) {
if (res[i].content == list.value[x].content) {
if (res.data[i].content == list.value[x].content) {
// 如果存在相同的数据话 不进入
indexFlag = true
}
}
if (!indexFlag) {
res[i].sort = list.value.length + 1
list.value.push(res[i])
res.data[i].sort = list.value.length + 1
list.value.push(res.data[i])
}
}
// dialogFormVisibleWordInfo.value = false
// wordPoints.value = {
// name: '',
// englishName: '',
// filePath: '',
// type: '',
// belongTo: '',
// isboo: '',
// function: '',
// unit: '',
// isExam: ''
// }
// wordPointsInfosList = []
// for (let i = 0; i < res.length; i++) {
// var indexFlag = false
// for (let x = 0; x < list.value.length; x++) {
// if (res[i].content == list.value[x].content) {
// // 如果存在相同的数据话 不进入
// indexFlag = true
// }
// }
// if (!indexFlag) {
// res[i].sort = list.value.length + 1
// list.value.push(res[i])
// }
// }
// // dialogFormVisibleWordInfo.value = false
dialogFormVisibleWordInfos.value = false
// wordPointsList.value = []
}

View File

@@ -23,11 +23,17 @@
<el-form-item label="显示排序" prop="sort">
<el-input-number v-model="formData.sort" :min="0" controls-position="right" />
</el-form-item>
<el-form-item label="节点方法" prop="nodeFunction">
<el-input v-model="formData.nodeFunction" placeholder="请输入节点方法" />
<el-form-item label="节点方法" prop="functions">
<el-input v-model="formData.functions" placeholder="请输入节点方法" />
</el-form-item>
<el-form-item label="转中文" prop="toChinese">
<el-input v-model="formData.toChinese" maxlength="50" placeholder="请输入转中文" />
<el-form-item label="方法参数" prop="parameter">
<el-input v-model="formData.parameter" placeholder="请输入节点方法" />
</el-form-item>
<el-form-item label="中文描述" prop="chineseName">
<el-input v-model="formData.chineseName" maxlength="50" placeholder="请输入中文描述" />
</el-form-item>
<el-form-item label="标签名称" prop="title">
<el-input v-model="formData.title" maxlength="50" placeholder="请输入标签名称" />
</el-form-item>
<el-form-item label="状态" prop="status">
<el-select v-model="formData.status" clearable placeholder="请选择状态">
@@ -39,56 +45,6 @@
/>
</el-select>
</el-form-item>
<el-form-item label="类型" prop="type">
<el-select v-model="formData.type" clearable placeholder="请选择状态">
<el-option
v-for="dict in getIntDictOptions(DICT_TYPE.WPS_WORD)"
:key="dict.value"
:label="dict.label"
:value="dict.value"
/>
</el-select>
</el-form-item>
<el-form-item label="归属" prop="belongTo">
<el-select v-model="formData.belongTo" clearable placeholder="请选择归属">
<el-option
v-for="dict in getIntDictOptions(DICT_TYPE.WORD_BELONG_TO)"
:key="dict.value"
:label="dict.label"
:value="dict.value"
/>
</el-select>
</el-form-item>
<el-form-item label="值类型" prop="isboo">
<el-select v-model="formData.isboo" clearable placeholder="请选择值类型">
<el-option
v-for="dict in getIntDictOptions(DICT_TYPE.WORD_ISBOO)"
:key="dict.value"
:label="dict.label"
:value="dict.value"
/>
</el-select>
</el-form-item>
<el-form-item label="级别" prop="titleType">
<el-select v-model="formData.titleType" clearable placeholder="请选择级别">
<el-option
v-for="dict in getIntDictOptions(DICT_TYPE.PPTX_TITLE_TYPE)"
:key="dict.value"
:label="dict.label"
:value="dict.value"
/>
</el-select>
</el-form-item>
<el-form-item label="数据类型" prop="unit">
<el-select v-model="formData.unit" clearable placeholder="请选择数据类型">
<el-option
v-for="dict in getStrDictOptions(DICT_TYPE.WPS_UNIT)"
:key="dict.value"
:label="dict.label"
:value="dict.value"
/>
</el-select>
</el-form-item>
</el-form>
<template #footer>
<el-button type="primary" @click="submitForm"> </el-button>
@@ -118,14 +74,10 @@ const formData = ref({
parentId: undefined,
name: undefined,
sort: undefined,
nodeFunction: undefined,
toChinese: undefined,
status: CommonStatusEnum.ENABLE,
type: CommonStatusEnum.ENABLE,
belongTo: CommonStatusEnum.ENABLE,
isboo: CommonStatusEnum.ENABLE,
titleType: CommonStatusEnum.ENABLE,
unit: CommonStatusEnum.ENABLE
functions: undefined,
parameter: undefined,
chineseName: undefined,
status: CommonStatusEnum.ENABLE
})
const formRules = reactive<FormRules>({
parentId: [{ required: true, message: '上级Word节点不能为空', trigger: 'blur' }],
@@ -190,14 +142,10 @@ const resetForm = () => {
parentId: undefined,
name: undefined,
sort: undefined,
nodeFunction: undefined,
toChinese: undefined,
status: CommonStatusEnum.ENABLE,
type: CommonStatusEnum.ENABLE,
belongTo: CommonStatusEnum.ENABLE,
isboo: CommonStatusEnum.ENABLE,
titleType: CommonStatusEnum.ENABLE,
unit: CommonStatusEnum.ENABLE
functions: undefined,
parameter: undefined,
chineseName: undefined,
status: CommonStatusEnum.ENABLE
}
formRef.value?.resetFields()
}

View File

@@ -34,27 +34,9 @@
>
<el-table-column prop="name" label="名称" />
<el-table-column prop="title" label="标签名称" />
<el-table-column prop="valueList" label="值参数(多值判断#分隔)" />
<!-- <el-table-column prop="isText" label="查询数据类型">
<template #default="scope">
<dict-tag :type="DICT_TYPE.Word_ISTEXT" :value="scope.row.isText" />
</template>
</el-table-column>
<el-table-column prop="isTrue" label="返回数据类型">
<template #default="scope">
<dict-tag :type="DICT_TYPE.Word_ISTRUE" :value="scope.row.isTrue" />
</template>
</el-table-column>
<el-table-column prop="dataType" label="值转换类型">
<template #default="scope">
<dict-tag :type="DICT_TYPE.Word_DATATYPE" :value="scope.row.dataType" />
</template>
</el-table-column>
<el-table-column prop="isParameter" label="参数归属">
<template #default="scope">
<dict-tag :type="DICT_TYPE.Word_ISPARAMETER" :value="scope.row.isParameter" />
</template>
</el-table-column> -->
<el-table-column prop="functions" label="方法名称" />
<el-table-column prop="parameter" label="方法参数" />
<el-table-column prop="chineseName" label="中文描述" />
<el-table-column label="操作" align="center" width="150">
<template #default="scope">
<el-button
@@ -109,7 +91,7 @@ const refreshTable = ref(true) // 重新渲染表格状态
const getList = async () => {
loading.value = true
try {
const data = await WordApi.getDocxPage(queryParams)
const data = await WordApi.getWordPage(queryParams)
list.value = handleTree(data)
} finally {
loading.value = false
@@ -149,7 +131,7 @@ const handleDelete = async (id: number) => {
// 删除的二次确认
await message.delConfirm()
// 发起删除
await WordApi.deleteDocx(id)
await WordApi.deleteWord(id)
message.success(t('common.delSuccess'))
// 刷新列表
await getList()