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

chore: update

上级 c34bd07b
......@@ -5,6 +5,7 @@
<link rel="icon" href="https://zws-imgs-pub.ezijing.com/pc/base/favicon.ico" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title></title>
<script src="https://webapp-pub.ezijing.com/plugins/tinymce@6/tinymce.min.js"></script>
</head>
<body>
<div id="app"></div>
......
......@@ -6,7 +6,7 @@ import { getSignature, uploadFile } from '@/api/base'
const props = defineProps({
height: {
type: Number,
default: 600
default: 400
}
})
......@@ -63,3 +63,9 @@ const init = {
<template>
<editor :init="init" v-bind="$attrs" style="width: 100%" />
</template>
<style lang="scss">
.tox-tinymce-aux {
z-index: 3000 !important;
}
</style>
......@@ -5,6 +5,11 @@ export function getCourseList() {
return httpRequest.get('/api/lab/v1/student/course/all')
}
// 获取实验详情
export function getExperiment(params: { experiment_id: string }) {
return httpRequest.get('/api/lab/v1/student/experiment/detail', { params })
}
// 获取实验指导书
export function getExperimentBook(params: { experiment_id: string }) {
return httpRequest.get('/api/lab/v1/student/experiment-book/detail', { params })
......@@ -56,3 +61,21 @@ export function uploadExperimentReport(data: { experiment_id: string; file: stri
export function submitExperimentRecord(data: { experiment_id: string }) {
return httpRequest.post('/api/lab/v1/student/experiment-record/submit', data)
}
// 获取实验准备详情
export function getExperimentPrepare(params: { experiment_id: string }) {
return httpRequest.get('/api/lab/v1/student/experiment/pre-detail', { params })
}
// 更新实验准备
export function updateExperimentPrepare(data: { experiment_id: string; detail: string }) {
return httpRequest.post('/api/lab/v1/student/experiment/pre-save', data)
}
// 获取实验结果详情
export function getExperimentResult(params: { experiment_id: string }) {
return httpRequest.get('/api/lab/v1/student/experiment/result-detail', { params })
}
// 更新实验结果
export function updateExperimentResult(data: { experiment_id: string; detail: string }) {
return httpRequest.post('/api/lab/v1/student/experiment/result-save', data)
}
<script setup lang="ts">
import type { ExperimentRecord } from '../types'
interface Props {
experiment_id?: string
}
<script setup>
import { getExperiment } from '../api'
const props = defineProps({ experiment_id: String })
defineProps<Props>()
let detail = $ref()
const detail = $ref(inject<ExperimentRecord>('detail'))
const teacherText = $computed(() => {
if (!detail) return ''
return detail.teachers.map(item => item.name).join('、')
})
function fetchInfo() {
if (!props.experiment_id) return
getExperiment({ experiment_id: props.experiment_id }).then(res => {
detail = res.data.detail
})
}
watchEffect(() => {
fetchInfo()
})
</script>
<template>
<template v-if="detail && experiment_id"> </template>
<template v-if="detail && experiment_id">
<el-form label-suffix=":" label-width="120px" label-position="right">
<el-form-item label="实验名称">{{ detail.name }}</el-form-item>
<el-form-item label="实验课程名称">{{ detail.course.name }}</el-form-item>
<el-form-item label="所属机构/学校">{{ detail.organization.name }}</el-form-item>
<el-form-item label="实验类型">{{ detail.type_level }}</el-form-item>
<el-form-item label="指导教师">{{ teacherText }}</el-form-item>
<el-form-item label="实验学时">{{ detail.length }}学时</el-form-item>
<el-form-item label="实验总成绩">{{ detail.score }}</el-form-item>
</el-form>
<el-divider />
<el-form label-suffix=":" label-position="top">
<el-form-item label="实验目的">{{ detail.purpose }}</el-form-item>
<el-form-item label="实验要求">{{ detail.requirements }}</el-form-item>
<el-form-item label="实验内容及原理">{{ detail.content }}</el-form-item>
<el-form-item label="实验步骤及过程">{{ detail.procedure }}</el-form-item>
</el-form>
</template>
<el-empty description="暂无数据" v-else />
</template>
<script setup lang="ts">
import type { FormInstance, FormRules } from 'element-plus'
import { ElMessage } from 'element-plus'
import AppEditor from '@/components/base/AppEditor.vue'
import { getExperimentPrepare, updateExperimentPrepare } from '../api'
interface Props {
experiment_id: string
}
const props = defineProps<Props>()
const emit = defineEmits<{
(e: 'update'): void
(e: 'update:modelValue', visible: boolean): void
}>()
const formRef = $ref<FormInstance>()
const form = reactive({
experiment_id: props.experiment_id,
detail: ''
})
const rules = ref<FormRules>({
detail: [{ required: true, message: '请输入', trigger: 'blur' }]
})
function fetchInfo() {
getExperimentPrepare({ experiment_id: props.experiment_id }).then(res => {
Object.assign(form, res.data.detail)
})
}
onMounted(() => {
fetchInfo()
})
// 提交
function handleSubmit() {
formRef?.validate().then(update)
}
// 修改
const update = () => {
updateExperimentPrepare(form).then(() => {
ElMessage({ message: '保存成功', type: 'success' })
emit('update:modelValue', false)
})
}
</script>
<template>
<el-dialog
append-to-body
title="实验准备"
:close-on-click-modal="false"
width="800px"
@update:modelValue="$emit('update:modelValue')">
<el-form ref="formRef" :model="form" :rules="rules">
<el-form-item prop="detail">
<AppEditor v-model="form.detail"></AppEditor>
</el-form-item>
<el-row justify="center">
<el-button type="primary" round auto-insert-space @click="handleSubmit">保存</el-button>
<el-button round auto-insert-space @click="$emit('update:modelValue', false)">取消</el-button>
</el-row>
</el-form>
</el-dialog>
</template>
<script setup lang="ts">
import type { FormInstance, FormRules } from 'element-plus'
import { ElMessage } from 'element-plus'
import AppEditor from '@/components/base/AppEditor.vue'
import { getExperimentResult, updateExperimentResult } from '../api'
interface Props {
experiment_id: string
}
const props = defineProps<Props>()
const emit = defineEmits<{
(e: 'update'): void
(e: 'update:modelValue', visible: boolean): void
}>()
const formRef = $ref<FormInstance>()
const form = reactive({
experiment_id: props.experiment_id,
detail: ''
})
const rules = ref<FormRules>({
detail: [{ required: true, message: '请输入', trigger: 'blur' }]
})
function fetchInfo() {
getExperimentResult({ experiment_id: props.experiment_id }).then(res => {
Object.assign(form, res.data.detail)
})
}
onMounted(() => {
fetchInfo()
})
// 提交
function handleSubmit() {
formRef?.validate().then(update)
}
// 修改
const update = () => {
updateExperimentResult(form).then(() => {
ElMessage({ message: '保存成功', type: 'success' })
emit('update:modelValue', false)
})
}
</script>
<template>
<el-dialog
append-to-body
title="实验结果"
:close-on-click-modal="false"
width="800px"
@update:modelValue="$emit('update:modelValue')">
<el-form ref="formRef" :model="form" :rules="rules">
<el-form-item prop="detail">
<AppEditor v-model="form.detail"></AppEditor>
</el-form-item>
<el-row justify="center">
<el-button type="primary" round auto-insert-space @click="handleSubmit">保存</el-button>
<el-button round auto-insert-space @click="$emit('update:modelValue', false)">取消</el-button>
</el-row>
</el-form>
</el-dialog>
</template>
......@@ -14,6 +14,8 @@ const Video = defineAsyncComponent(() => import('../components/Video.vue'))
const Discuss = defineAsyncComponent(() => import('../components/Discuss.vue'))
const Result = defineAsyncComponent(() => import('../components/Result.vue'))
const ReportDialog = defineAsyncComponent(() => import('../components/ReportDialog.vue'))
const PrepareDialog = defineAsyncComponent(() => import('../components/PrepareDialog.vue'))
const ResultDialog = defineAsyncComponent(() => import('../components/ResultDialog.vue'))
const route = useRoute()
......@@ -146,6 +148,11 @@ let resizeKey = $ref(0)
function handleResize() {
resizeKey = Date.now()
}
// 实验准备
const prepareDialogVisible = $ref(false)
// 实验结果
const resultDialogVisible = $ref(false)
</script>
<template>
......@@ -186,15 +193,22 @@ function handleResize() {
<template #right>
<AppCard>
<el-row justify="space-between">
<el-button type="primary" :icon="HomeFilled" :disabled="submitted" @click="handleBackHome"
>返回首页</el-button
>
<div>
<el-button type="primary" :disabled="disabled" @click="handleSubmit">提交</el-button>
<el-button type="primary" :disabled="disabled" @click="reportDialogVisible = true">上传报告</el-button>
<el-button type="primary" :icon="HomeFilled" :disabled="submitted" @click="handleBackHome"
>返回首页</el-button
>
<el-button type="primary" :disabled="disabled" @click="handleSubmit">提交实验</el-button>
</div>
<div>
<el-button type="primary" :disabled="disabled" :loading="screenshotLoading" @click="handleCapture"
>截图</el-button
>
<el-button type="primary" :disabled="disabled" @click="prepareDialogVisible = true">实验准备</el-button>
<el-button type="primary" :disabled="disabled" @click="resultDialogVisible = true">实验结果</el-button>
<el-button type="primary" :disabled="disabled" @click="reportDialogVisible = true">在线实验报告</el-button>
<el-button type="primary" :disabled="disabled" @click="reportDialogVisible = true">上传实验报告</el-button>
<el-button type="primary" :disabled="disabled" @click="reportDialogVisible = true">查看实验报告</el-button>
<el-button type="primary" :disabled="disabled" @click="reportDialogVisible = true">导出实验报告</el-button>
</div>
</el-row>
</AppCard>
......@@ -211,6 +225,18 @@ function handleResize() {
:experiment_id="form.experiment_id"
@update="fetchInfo"
v-if="reportDialogVisible && form.experiment_id"></ReportDialog>
<!-- 实验准备 -->
<PrepareDialog
v-model="prepareDialogVisible"
:experiment_id="form.experiment_id"
v-if="prepareDialogVisible && form.experiment_id"></PrepareDialog>
<!-- 实验结果 -->
<ResultDialog
v-model="resultDialogVisible"
:experiment_id="form.experiment_id"
v-if="resultDialogVisible && form.experiment_id"></ResultDialog>
</template>
<style lang="scss" scoped>
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论