【修改】 试卷软件环境根据试卷方案中试题自动获取

This commit is contained in:
dlaren
2025-08-07 15:11:31 +08:00
committed by 陆光LG
parent 65b24f01d7
commit d318f21838
9 changed files with 85 additions and 119 deletions

View File

@@ -17,3 +17,6 @@ export const getAppCheck = async (taskId: string) => {
export const deleteAppCheck = async (id: string) => { export const deleteAppCheck = async (id: string) => {
return await request.get({ url: '/exam/app/delete/' + id }) return await request.get({ url: '/exam/app/delete/' + id })
} }
export const createAppCheckList = async (taskId: string) => {
return await request.get({ url: '/exam/app/getAppCheckListByTaskId/' + taskId })
}

View File

@@ -1,34 +1,6 @@
<template> <template>
<!-- 搜索工作栏 --> <!-- 搜索工作栏 -->
<el-dialog v-model="ruleDialogVisible" title="规则设置" width="600px">
<!-- 弹窗内容 -->
<el-form-item label="判分规则" prop="roles">
<el-select
v-model="formData.roles"
placeholder="请选择判分规则"
clearable
class="!w-240px"
>
<el-option
v-for="dict in getIntDictOptions(DICT_TYPE.SCORE_ROLES)"
:key="dict.value"
:label="dict.label"
:value="dict.value"
/>
</el-select>
</el-form-item>
<!-- 弹窗底部按钮 -->
<template #footer>
<span class="dialog-footer">
<el-button @click="ruleDialogVisible = false">取消</el-button>
<el-button type="primary" @click="handleRuleSave">保存</el-button>
</span>
</template>
</el-dialog>
<ContentWrap> <ContentWrap>
<el-form <el-form
class="-mb-15px" class="-mb-15px"
@@ -64,11 +36,7 @@
<el-form-item> <el-form-item>
<el-button @click="handleQuery"><Icon icon="ep:search" class="mr-5px" /> 搜索</el-button> <el-button @click="handleQuery"><Icon icon="ep:search" class="mr-5px" /> 搜索</el-button>
<el-button @click="resetQuery"><Icon icon="ep:refresh" class="mr-5px" /> 重置</el-button> <el-button @click="resetQuery"><Icon icon="ep:refresh" class="mr-5px" /> 重置</el-button>
<el-button <el-button type="primary" plain @click="openForm('create')">
type="primary"
plain
@click="openForm('create')"
>
<Icon icon="ep:plus" class="mr-5px" /> 新增 <Icon icon="ep:plus" class="mr-5px" /> 新增
</el-button> </el-button>
<el-button type="danger" plain @click="toggleExpandAll"> <el-button type="danger" plain @click="toggleExpandAll">
@@ -88,11 +56,7 @@
v-if="refreshTable" v-if="refreshTable"
> >
<el-table-column prop="name" label="专业名称" /> <el-table-column prop="name" label="专业名称" />
<el-table-column prop="status" label="判分规则"> <el-table-column prop="roles" label="软件环境" />
<template #default="scope">
<dict-tag :type="DICT_TYPE.SCORE_ROLES" :value="scope.row.roles" />
</template>
</el-table-column>
<el-table-column prop="status" label="状态"> <el-table-column prop="status" label="状态">
<template #default="scope"> <template #default="scope">
<dict-tag :type="DICT_TYPE.COMMON_STATUS" :value="scope.row.status" /> <dict-tag :type="DICT_TYPE.COMMON_STATUS" :value="scope.row.status" />
@@ -107,20 +71,10 @@
/> />
<el-table-column label="操作" align="center"> <el-table-column label="操作" align="center">
<template #default="scope"> <template #default="scope">
<el-button <el-button link type="primary" @click="openForm('update', scope.row.id)">
link
type="primary"
@click="openForm('update', scope.row.id)"
>
修改 修改
</el-button> </el-button>
<el-button <el-button link type="danger" @click="handleDelete(scope.row.id)"> 删除 </el-button>
link
type="danger"
@click="handleDelete(scope.row.id)"
>
删除
</el-button>
<!-- 第三级才显示规则按钮 --> <!-- 第三级才显示规则按钮 -->
<el-button <el-button
v-if="scope.row.level === 3" v-if="scope.row.level === 3"
@@ -128,13 +82,26 @@
type="warning" type="warning"
@click="handleRule(scope.row)" @click="handleRule(scope.row)"
> >
规则 软件环境
</el-button> </el-button>
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
</ContentWrap> </ContentWrap>
<el-dialog v-model="ruleDialogVisible" title="软件环境" width="600px">
<!-- 弹窗内容 -->
<el-form-item label="软件环境" prop="roles">
<el-input v-model="formData.roles" style="width: 240px" placeholder="输入对应需要软件名称" />
</el-form-item>
<!-- 弹窗底部按钮 -->
<template #footer>
<span class="dialog-footer">
<el-button @click="ruleDialogVisible = false">取消</el-button>
<el-button type="primary" @click="handleRuleSave">保存</el-button>
</span>
</template>
</el-dialog>
<!-- 表单弹窗添加/修改 --> <!-- 表单弹窗添加/修改 -->
<SpecialtyForm ref="formRef" @success="getList" /> <SpecialtyForm ref="formRef" @success="getList" />
</template> </template>
@@ -170,23 +137,20 @@ const formData = ref({
id: '' id: ''
}) })
const handleRule = async (row: any) => { const handleRule = async (row: any) => {
currentRuleRow.value = row.id currentRuleRow.value = row.id
const res = await SpecialtyApi.getSpecialtyRole(currentRuleRow.value) const res = await SpecialtyApi.getSpecialtyRole(currentRuleRow.value)
console.log(res) console.log(res)
formData.value.roles=res; formData.value.roles = res
ruleDialogVisible.value = true ruleDialogVisible.value = true
} }
const handleRuleSave = async () => { const handleRuleSave = async () => {
formData.value.id=currentRuleRow.value; formData.value.id = currentRuleRow.value
const data = formData.value const data = formData.value
const res = await SpecialtyApi.setSpecialtyRole(data) const res = await SpecialtyApi.setSpecialtyRole(data)
message.success(t(res)) message.success(t(res))
handleQuery() handleQuery()
ruleDialogVisible.value = false ruleDialogVisible.value = false
} }
/** 查询部门列表 */ /** 查询部门列表 */
const getList = async () => { const getList = async () => {
@@ -210,7 +174,6 @@ const toggleExpandAll = () => {
}) })
} }
/** 搜索按钮操作 */ /** 搜索按钮操作 */
const handleQuery = () => { const handleQuery = () => {
getList() getList()
@@ -243,7 +206,7 @@ const handleDelete = async (id: number) => {
} }
// 递归添加 level 字段 // 递归添加 level 字段
const addLevelToTree = (nodes, level = 1) => { const addLevelToTree = (nodes, level = 1) => {
return nodes.map(node => { return nodes.map((node) => {
const newNode = { ...node, level } const newNode = { ...node, level }
if (newNode.children && newNode.children.length > 0) { if (newNode.children && newNode.children.length > 0) {
newNode.children = addLevelToTree(newNode.children, level + 1) newNode.children = addLevelToTree(newNode.children, level + 1)

View File

@@ -335,7 +335,7 @@
</el-tab-pane> </el-tab-pane>
<el-tab-pane label="考试环境配置" name="tab5"> <el-tab-pane label="考试环境配置" name="tab5">
<div class="block" @blur.capture="handleFormChange"> <div class="block" @blur.capture="handleFormChange">
<el-button @click="openAddForm">新增</el-button> <el-button @click="asyncApp">同步软件环境</el-button>
<el-table v-if="isAppTrue" :data="tableData" style="width: 100%"> <el-table v-if="isAppTrue" :data="tableData" style="width: 100%">
<el-table-column prop="appName" label="名称" align="center" /> <el-table-column prop="appName" label="名称" align="center" />
<el-table-column label="操作" align="center" width="100px"> <el-table-column label="操作" align="center" width="100px">
@@ -398,13 +398,14 @@ const showAdd = ref(false)
const taskAddRef = ref() const taskAddRef = ref()
const message = useMessage() // 消息弹窗 const message = useMessage() // 消息弹窗
const isAppTrue = ref(true) const isAppTrue = ref(true)
// 打开新增表单
const openAddForm = () => { // 同步软件环境
showAdd.value = true const asyncApp = () => {
nextTick(() => { AppApi.createAppCheckList(props.taskId).then(() => {
taskAddRef.value?.open() getList()
}) })
} }
const reload = () => { const reload = () => {
getList() getList()
} }
@@ -427,7 +428,6 @@ const openAppForm = async () => {
setTimeout(() => { setTimeout(() => {
isAppTrue.value = true isAppTrue.value = true
}, 0) }, 0)
} }
} }

View File

@@ -335,7 +335,7 @@
</el-tab-pane> </el-tab-pane>
<el-tab-pane label="考试环境配置" name="tab5"> <el-tab-pane label="考试环境配置" name="tab5">
<div class="block" @blur.capture="handleFormChange"> <div class="block" @blur.capture="handleFormChange">
<el-button @click="openAddForm">新增</el-button> <el-button @click="asyncApp">同步软件环境</el-button>
<el-table v-if="isAppTrue" :data="tableData" style="width: 100%"> <el-table v-if="isAppTrue" :data="tableData" style="width: 100%">
<el-table-column prop="appName" label="名称" align="center" /> <el-table-column prop="appName" label="名称" align="center" />
<el-table-column label="操作" align="center" width="100px"> <el-table-column label="操作" align="center" width="100px">
@@ -398,13 +398,14 @@ const showAdd = ref(false)
const taskAddRef = ref() const taskAddRef = ref()
const message = useMessage() // 消息弹窗 const message = useMessage() // 消息弹窗
const isAppTrue = ref(true) const isAppTrue = ref(true)
// 打开新增表单
const openAddForm = () => { // 同步软件环境
showAdd.value = true const asyncApp = () => {
nextTick(() => { AppApi.createAppCheckList(props.taskId).then(() => {
taskAddRef.value?.open() getList()
}) })
} }
const reload = () => { const reload = () => {
getList() getList()
} }
@@ -427,7 +428,6 @@ const openAppForm = async () => {
setTimeout(() => { setTimeout(() => {
isAppTrue.value = true isAppTrue.value = true
}, 0) }, 0)
} }
} }

View File

@@ -335,7 +335,7 @@
</el-tab-pane> </el-tab-pane>
<el-tab-pane label="考试环境配置" name="tab5"> <el-tab-pane label="考试环境配置" name="tab5">
<div class="block" @blur.capture="handleFormChange"> <div class="block" @blur.capture="handleFormChange">
<el-button @click="openAddForm">新增</el-button> <el-button @click="asyncApp">同步软件环境</el-button>
<el-table v-if="isAppTrue" :data="tableData" style="width: 100%"> <el-table v-if="isAppTrue" :data="tableData" style="width: 100%">
<el-table-column prop="appName" label="名称" align="center" /> <el-table-column prop="appName" label="名称" align="center" />
<el-table-column label="操作" align="center" width="100px"> <el-table-column label="操作" align="center" width="100px">
@@ -398,13 +398,14 @@ const showAdd = ref(false)
const taskAddRef = ref() const taskAddRef = ref()
const message = useMessage() // 消息弹窗 const message = useMessage() // 消息弹窗
const isAppTrue = ref(true) const isAppTrue = ref(true)
// 打开新增表单
const openAddForm = () => { // 同步软件环境
showAdd.value = true const asyncApp = () => {
nextTick(() => { AppApi.createAppCheckList(props.taskId).then(() => {
taskAddRef.value?.open() getList()
}) })
} }
const reload = () => { const reload = () => {
getList() getList()
} }
@@ -427,7 +428,6 @@ const openAppForm = async () => {
setTimeout(() => { setTimeout(() => {
isAppTrue.value = true isAppTrue.value = true
}, 0) }, 0)
} }
} }

View File

@@ -335,7 +335,7 @@
</el-tab-pane> </el-tab-pane>
<el-tab-pane label="考试环境配置" name="tab5"> <el-tab-pane label="考试环境配置" name="tab5">
<div class="block" @blur.capture="handleFormChange"> <div class="block" @blur.capture="handleFormChange">
<el-button @click="openAddForm">新增</el-button> <el-button @click="asyncApp">同步软件环境</el-button>
<el-table v-if="isAppTrue" :data="tableData" style="width: 100%"> <el-table v-if="isAppTrue" :data="tableData" style="width: 100%">
<el-table-column prop="appName" label="名称" align="center" /> <el-table-column prop="appName" label="名称" align="center" />
<el-table-column label="操作" align="center" width="100px"> <el-table-column label="操作" align="center" width="100px">
@@ -398,13 +398,14 @@ const showAdd = ref(false)
const taskAddRef = ref() const taskAddRef = ref()
const message = useMessage() // 消息弹窗 const message = useMessage() // 消息弹窗
const isAppTrue = ref(true) const isAppTrue = ref(true)
// 打开新增表单
const openAddForm = () => { // 同步软件环境
showAdd.value = true const asyncApp = () => {
nextTick(() => { AppApi.createAppCheckList(props.taskId).then(() => {
taskAddRef.value?.open() getList()
}) })
} }
const reload = () => { const reload = () => {
getList() getList()
} }
@@ -427,7 +428,6 @@ const openAppForm = async () => {
setTimeout(() => { setTimeout(() => {
isAppTrue.value = true isAppTrue.value = true
}, 0) }, 0)
} }
} }

View File

@@ -335,7 +335,7 @@
</el-tab-pane> </el-tab-pane>
<el-tab-pane label="考试环境配置" name="tab5"> <el-tab-pane label="考试环境配置" name="tab5">
<div class="block" @blur.capture="handleFormChange"> <div class="block" @blur.capture="handleFormChange">
<el-button @click="openAddForm">新增</el-button> <el-button @click="asyncApp">同步软件环境</el-button>
<el-table v-if="isAppTrue" :data="tableData" style="width: 100%"> <el-table v-if="isAppTrue" :data="tableData" style="width: 100%">
<el-table-column prop="appName" label="名称" align="center" /> <el-table-column prop="appName" label="名称" align="center" />
<el-table-column label="操作" align="center" width="100px"> <el-table-column label="操作" align="center" width="100px">
@@ -398,13 +398,14 @@ const showAdd = ref(false)
const taskAddRef = ref() const taskAddRef = ref()
const message = useMessage() // 消息弹窗 const message = useMessage() // 消息弹窗
const isAppTrue = ref(true) const isAppTrue = ref(true)
// 打开新增表单
const openAddForm = () => { // 同步软件环境
showAdd.value = true const asyncApp = () => {
nextTick(() => { AppApi.createAppCheckList(props.taskId).then(() => {
taskAddRef.value?.open() getList()
}) })
} }
const reload = () => { const reload = () => {
getList() getList()
} }
@@ -427,7 +428,6 @@ const openAppForm = async () => {
setTimeout(() => { setTimeout(() => {
isAppTrue.value = true isAppTrue.value = true
}, 0) }, 0)
} }
} }

View File

@@ -335,7 +335,7 @@
</el-tab-pane> </el-tab-pane>
<el-tab-pane label="考试环境配置" name="tab5"> <el-tab-pane label="考试环境配置" name="tab5">
<div class="block" @blur.capture="handleFormChange"> <div class="block" @blur.capture="handleFormChange">
<el-button @click="openAddForm">新增</el-button> <el-button @click="asyncApp">同步软件环境</el-button>
<el-table v-if="isAppTrue" :data="tableData" style="width: 100%"> <el-table v-if="isAppTrue" :data="tableData" style="width: 100%">
<el-table-column prop="appName" label="名称" align="center" /> <el-table-column prop="appName" label="名称" align="center" />
<el-table-column label="操作" align="center" width="100px"> <el-table-column label="操作" align="center" width="100px">
@@ -398,13 +398,14 @@ const showAdd = ref(false)
const taskAddRef = ref() const taskAddRef = ref()
const message = useMessage() // 消息弹窗 const message = useMessage() // 消息弹窗
const isAppTrue = ref(true) const isAppTrue = ref(true)
// 打开新增表单
const openAddForm = () => { // 同步软件环境
showAdd.value = true const asyncApp = () => {
nextTick(() => { AppApi.createAppCheckList(props.taskId).then(() => {
taskAddRef.value?.open() getList()
}) })
} }
const reload = () => { const reload = () => {
getList() getList()
} }
@@ -427,7 +428,6 @@ const openAppForm = async () => {
setTimeout(() => { setTimeout(() => {
isAppTrue.value = true isAppTrue.value = true
}, 0) }, 0)
} }
} }

View File

@@ -335,7 +335,7 @@
</el-tab-pane> </el-tab-pane>
<el-tab-pane label="考试环境配置" name="tab5"> <el-tab-pane label="考试环境配置" name="tab5">
<div class="block" @blur.capture="handleFormChange"> <div class="block" @blur.capture="handleFormChange">
<el-button @click="openAddForm">新增</el-button> <el-button @click="asyncApp">同步软件环境</el-button>
<el-table v-if="isAppTrue" :data="tableData" style="width: 100%"> <el-table v-if="isAppTrue" :data="tableData" style="width: 100%">
<el-table-column prop="appName" label="名称" align="center" /> <el-table-column prop="appName" label="名称" align="center" />
<el-table-column label="操作" align="center" width="100px"> <el-table-column label="操作" align="center" width="100px">
@@ -398,13 +398,14 @@ const showAdd = ref(false)
const taskAddRef = ref() const taskAddRef = ref()
const message = useMessage() // 消息弹窗 const message = useMessage() // 消息弹窗
const isAppTrue = ref(true) const isAppTrue = ref(true)
// 打开新增表单
const openAddForm = () => { // 同步软件环境
showAdd.value = true const asyncApp = () => {
nextTick(() => { AppApi.createAppCheckList(props.taskId).then(() => {
taskAddRef.value?.open() getList()
}) })
} }
const reload = () => { const reload = () => {
getList() getList()
} }
@@ -427,7 +428,6 @@ const openAppForm = async () => {
setTimeout(() => { setTimeout(() => {
isAppTrue.value = true isAppTrue.value = true
}, 0) }, 0)
} }
} }