提交 1b996464 authored 作者: 王鹏飞's avatar 王鹏飞

chore: 修改复制实验

上级 10eba904
<script setup lang="ts">
import type { FormInstance } from 'element-plus'
import type { ExperimentItem } from '../types'
import { ElMessage } from 'element-plus'
import { copyExperiment } from '../api'
import { useGetProjectList } from '@/composables/useGetProjectList'
import { useGetTeacherList } from '../composables/useGetTeacherList'
import { pickBy } from 'lodash-es'
const props = defineProps<{
data: ExperimentItem
}>()
const emit = defineEmits<{
(e: 'update'): void
(e: 'update:modelValue', visible: boolean): void
}>()
const formRef = ref<FormInstance>()
const form = reactive({
experiment_name: '',
organ_id: '',
sso_id: ''
})
onMounted(() => {
form.organ_id = props.data.organ_id
form.experiment_name = props.data.name + '(copy)'
const [teacher] = props.data.teacher
form.sso_id = teacher.id
})
// 机构列表
const { organizations } = useGetProjectList()
// 指导教师列表
const { teachers, updateTeachers } = useGetTeacherList()
watchEffect(() => {
updateTeachers(form.organ_id)
})
function handleOrgChange() {
form.sso_id = ''
}
async function handleSubmit() {
formRef.value?.validate().then(async () => {
const params = { ...pickBy(form, item => item !== ''), experiment_id: props.data.id }
await copyExperiment(params)
ElMessage.success('复制成功')
emit('update')
emit('update:modelValue', false)
})
}
</script>
<template>
<el-dialog title="复制实验" width="600px" @update:modelValue="value => $emit('update:modelValue', value)">
<el-form ref="formRef" :model="form" label-width="130px">
<el-form-item label="实验名称" prop="experiment_name">
<el-input v-model="form.experiment_name" />
</el-form-item>
<el-form-item label="实验所属部门/学校" prop="organ_id">
<el-select v-model="form.organ_id" style="width: 100%" @change="handleOrgChange" clearable>
<el-option v-for="item in organizations" :key="item.id" :label="item.name" :value="item.id"></el-option>
</el-select>
</el-form-item>
<el-form-item label="指导老师" prop="sso_id">
<el-select v-model="form.sso_id" style="width: 100%" clearable>
<el-option v-for="item in teachers" :key="item.id" :label="item.name" :value="item.id"></el-option>
</el-select>
</el-form-item>
</el-form>
<template #footer>
<el-row justify="center">
<el-button round auto-insert-space @click="$emit('update:modelValue', false)">关闭</el-button>
<el-button type="primary" round auto-insert-space @click="handleSubmit">复制</el-button>
</el-row>
</template></el-dialog
>
</template>
......@@ -2,7 +2,7 @@
import type { ExperimentItem } from '../types'
import { CirclePlus, MoreFilled, CopyDocument, Delete, Setting, Edit, EditPen } from '@element-plus/icons-vue'
import AppList from '@/components/base/AppList.vue'
import { getExperimentList, copyExperiment, deleteExperiment } from '../api'
import { getExperimentList, deleteExperiment } from '../api'
import { useGetCourseList } from '../composables/useGetCourseList'
import { useGetCourseExperimentList } from '../composables/useGetCourseExperimentList'
import { useMapStore } from '@/stores/map'
......@@ -11,6 +11,7 @@ import { ElMessage, ElMessageBox } from 'element-plus'
const FormDialog = defineAsyncComponent(() => import('../components/FormDialog.vue'))
const GradeRulesDialog = defineAsyncComponent(() => import('../components/GradeRulesDialog.vue'))
const DMLFormDialog = defineAsyncComponent(() => import('../components/DMLFormDialog.vue'))
const CopyDialog = defineAsyncComponent(() => import('../components/CopyDialog.vue'))
// 数据状态
const status = useMapStore().getMapValuesByKey('system_status')
......@@ -130,10 +131,10 @@ function handleUpdateDML(row: ExperimentItem) {
dmlDialogVisible = true
}
// 复制
let copyDialogVisible = $ref(false)
async function handleCopy(row: ExperimentItem) {
await copyExperiment({ experiment_id: row.id })
ElMessage.success('复制成功')
appList?.refetch()
rowData.value = row
copyDialogVisible = true
}
// 删除
async function handleDelete(row: ExperimentItem) {
......@@ -168,7 +169,7 @@ async function handleDelete(row: ExperimentItem) {
<el-dropdown-item @click="handleUpdate(row)">编辑</el-dropdown-item> -->
<el-dropdown-item :icon="Setting" @click="handleUpdateDML(row)" v-if="row.type === '4'">配置数字营销</el-dropdown-item>
<template v-if="!row.stu_commit_count">
<el-dropdown-item :icon="Edit" @click="handleUpdateGradeRules(row)"> 编辑成绩规则</el-dropdown-item>
<el-dropdown-item :icon="Edit" @click="handleUpdateGradeRules(row)">编辑成绩规则</el-dropdown-item>
<el-dropdown-item :icon="EditPen">
<router-link :to="`/admin/lab/experiment/report/${row.id}`" target="_blank">编辑报告规则</router-link>
</el-dropdown-item>
......@@ -218,4 +219,5 @@ async function handleDelete(row: ExperimentItem) {
<GradeRulesDialog v-model="gradeRulesDialogVisible" :data="rowData" @update="onUpdateSuccess" v-if="gradeRulesDialogVisible && rowData"></GradeRulesDialog>
<!-- 配置数字营销实验 -->
<DMLFormDialog v-model="dmlDialogVisible" :data="rowData" v-if="dmlDialogVisible && rowData"></DMLFormDialog>
<CopyDialog v-model="copyDialogVisible" :data="rowData" @update="onUpdateSuccess" v-if="copyDialogVisible && rowData"></CopyDialog>
</template>
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论