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

chore: update

上级 010d6187
import { getProjectList } from '@/api/base' import { getProjectList } from '@/api/base'
export function useProjectList(id?: string, projectId?: string) { import { useUserStore } from '@/stores/user'
const list = ref([])
const members = ref([]) // 部门信息
const departmentList = ref([]) interface DepartmentType {
getProjectList({ organization_id: id, project_id: projectId }).then((res: any) => { id: string
list.value = res.data.departments name: string
organizations: OrganizationType[]
}
// 机构信息
interface OrganizationType {
id: string
name: string
}
// 成员信息
interface MemberType {
id: string
name: string
}
const store = useUserStore()
export function useGetProjectList() {
const members = ref<MemberType[]>([])
const departments = ref<DepartmentType[]>([])
const organizations = ref<OrganizationType[]>([])
getProjectList({ organization_id: store.organization?.id, project_id: store.project?.id }).then((res: any) => {
members.value = res.data.members members.value = res.data.members
departmentList.value = res.data.departments.reduce((a: any, b:any) => { departments.value = res.data.departments
if (b.organizations.length) { organizations.value = res.data.departments.reduce((result: OrganizationType[], item: DepartmentType) => {
a.push(b.organizations) return result.concat(item.organizations)
}
return a.flat(Infinity)
}, []) }, [])
}) })
return { list, members, departmentList }
return { members, departments, organizations }
} }
...@@ -16,6 +16,8 @@ import modules from './modules' ...@@ -16,6 +16,8 @@ import modules from './modules'
import { permissionDirective } from '@/utils/permission' import { permissionDirective } from '@/utils/permission'
import { useMapStore } from '@/stores/map'
const app = createApp(App) const app = createApp(App)
// 注册公共组件 // 注册公共组件
app.component('AppCard', AppCard).component('AppList', AppList).component('AppUpload', AppUpload) app.component('AppCard', AppCard).component('AppList', AppList).component('AppUpload', AppUpload)
...@@ -29,4 +31,4 @@ app.use(ElementPlus, { locale: zhCn }) ...@@ -29,4 +31,4 @@ app.use(ElementPlus, { locale: zhCn })
app.mount('#app') app.mount('#app')
document.domain = 'ezijing.com' useMapStore().getMapList()
import httpRequest from '@/utils/axios' import httpRequest from '@/utils/axios'
import type { ExperimentCreateItem } from './types'
// 获取实验列表 // 获取实验列表
export function getExperimentList(params?: { name?: string; lab_id?: string; page?: number; page_size?: number }) { export function getExperimentList(params?: { name?: string; page?: number; 'per-page'?: number }) {
return httpRequest.get('/api/lab/backend/book/index', { params }) return httpRequest.get('/api/resource/v1/backend/experiment/list', { params })
}
// 创建实验
export function createExperiment(data: ExperimentCreateItem) {
return httpRequest.post('/api/resource//v1/backend/experiment/create', data)
}
// 获取实验课程列表
export function getExperimentCourseList(params: { organ_id?: string }) {
return httpRequest.get('/api/resource/v1/backend/experiment/courses', { params })
}
// 获取实验指导老师列表
export function getExperimentTeacherList(params: { organ_id?: string }) {
return httpRequest.get('/api/resource/v1/backend/experiment/teachers', { params })
} }
<script setup lang="ts"> <script setup lang="ts">
import type { FormInstance, FormRules } from 'element-plus' import type { FormInstance, FormRules } from 'element-plus'
// import { ElMessage } from 'element-plus' import type { ExperimentCreateItem } from '../types'
import { ElMessage } from 'element-plus'
import { createExperiment } from '../api'
import { useGetProjectList } from '@/composables/useGetProjectList'
import { useGetCourseList } from '../composables/useGetCourseList'
import { useGetTeacherList } from '../composables/useGetTeacherList'
import { useMapStore } from '@/stores/map'
interface Props { interface Props {
data?: any data?: any
...@@ -8,23 +16,43 @@ interface Props { ...@@ -8,23 +16,43 @@ interface Props {
const props = defineProps<Props>() const props = defineProps<Props>()
defineEmits<{ const emit = defineEmits<{
(e: 'update'): void (e: 'update'): void
(e: 'update:modelValue', visible: boolean): void (e: 'update:modelValue', visible: boolean): void
}>() }>()
// 机构列表
const { organizations } = useGetProjectList()
// 课程列表
const { courses } = useGetCourseList()
// 指导教师列表
const { teachers } = useGetTeacherList()
// 实验类型
const types = useMapStore().getMapValuesByKey('experiment_type')
const status = useMapStore().getMapValuesByKey('system_status')
const title = $computed(() => { const title = $computed(() => {
return '新增实验' return '新增实验'
}) })
const formRef = $ref<FormInstance>() const formRef = $ref<FormInstance>()
const form = reactive({ title: '', status: 1 }) const form = reactive<ExperimentCreateItem>({
organ_id: '',
status: '1',
course_id: '',
name: '',
length: '',
type: '',
score: '',
teachers_id: '',
teachers_ids: []
})
watchEffect(() => { watchEffect(() => {
Object.assign(form, props.data) Object.assign(form, props.data)
}) })
const rules = ref<FormRules>({ const rules = ref<FormRules>({
title: [{ required: true, message: '请输入问题描述', trigger: 'blur' }], organ_id: [{ required: true, message: '请选择实验所属部门/学校', trigger: 'blur' }],
content: [{ required: true, message: '请输入问题详情', trigger: 'blur' }] course_id: [{ required: true, message: '请选择实验课程', trigger: 'blur' }]
}) })
// 提交 // 提交
function handleSubmit() { function handleSubmit() {
...@@ -32,42 +60,50 @@ function handleSubmit() { ...@@ -32,42 +60,50 @@ function handleSubmit() {
} }
// 修改 // 修改
const update = () => { const update = () => {
// submitSuggestion(form).then(() => { createExperiment(form).then(() => {
// ElMessage({ message: '提交成功', type: 'success' }) ElMessage({ message: '创建成功', type: 'success' })
// emit('update') emit('update')
// formRef?.resetFields() emit('update:modelValue', false)
// }) formRef?.resetFields()
})
} }
</script> </script>
<template> <template>
<el-dialog :title="title" :close-on-click-modal="false" width="600px"> <el-dialog :title="title" :close-on-click-modal="false" width="600px" @update:modelValue="$emit('update:modelValue')">
<el-form ref="formRef" :model="form" :rules="rules" label-width="150px"> <el-form ref="formRef" :model="form" :rules="rules" label-width="150px">
<el-form-item label="实验所属部门/学校" prop="title"> <el-form-item label="实验所属部门/学校" prop="organ_id">
<el-select v-model="form.title"></el-select> <el-select v-model="form.organ_id" style="width: 100%">
<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>
<el-form-item label="实验课程" prop="content"> <el-form-item label="实验课程" prop="course_id">
<el-select v-model="form.title"></el-select> <el-select v-model="form.course_id" style="width: 100%">
<el-option v-for="item in courses" :key="item.id" :label="item.name" :value="item.id"></el-option>
</el-select>
</el-form-item> </el-form-item>
<el-form-item label="实验名称" prop="files"> <el-form-item label="实验名称" prop="name">
<el-input v-model="form.title" /> <el-input v-model="form.name" />
</el-form-item> </el-form-item>
<el-form-item label="实验学时" prop="files"> <el-form-item label="实验学时" prop="length">
<el-input v-model="form.title" /> <el-input v-model="form.length" />
</el-form-item> </el-form-item>
<el-form-item label="指导教师" prop="files"> <el-form-item label="指导教师" prop="teachers_ids">
<el-input v-model="form.title" /> <el-select v-model="form.teachers_id" style="width: 100%">
<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-item>
<el-form-item label="实验类型" prop="files"> <el-form-item label="实验类型" prop="type">
<el-select v-model="form.title"></el-select> <el-select v-model="form.type" style="width: 100%">
<el-option v-for="item in types" :key="item.id" :label="item.label" :value="item.value"></el-option>
</el-select>
</el-form-item> </el-form-item>
<el-form-item label="实验总成绩" prop="files"> <el-form-item label="实验总成绩" prop="score">
<el-input v-model="form.title" /> <el-input v-model="form.score" />
</el-form-item> </el-form-item>
<el-form-item label="有效状态" prop="files"> <el-form-item label="有效状态" prop="files">
<el-radio-group v-model="form.status" class="ml-4"> <el-radio-group v-model="form.status">
<el-radio label="1">有效</el-radio> <el-radio v-for="item in status" :key="item.id" :label="item.value">{{ item.label }}</el-radio>
<el-radio label="2">失效</el-radio>
</el-radio-group> </el-radio-group>
</el-form-item> </el-form-item>
<el-row justify="center"> <el-row justify="center">
......
import { getExperimentCourseList } from '../api'
import { useUserStore } from '@/stores/user'
interface CourseType {
id: string
name: string
}
const store = useUserStore()
export function useGetCourseList() {
const courses = ref<CourseType[]>([])
getExperimentCourseList({ organ_id: store.organization?.id }).then((res: any) => {
courses.value = res.data
})
return { courses }
}
import { getExperimentTeacherList } from '../api'
import { useUserStore } from '@/stores/user'
interface TeacherType {
id: string
name: string
}
const store = useUserStore()
export function useGetTeacherList() {
const teachers = ref<TeacherType[]>([])
getExperimentTeacherList({ organ_id: store.organization?.id }).then((res: any) => {
teachers.value = res.data
})
return { teachers }
}
export interface ExperimentItemTeacher {
id: string
name: string
}
export interface ExperimentItem {
course_id: string
course_name: string
created_operator: string
created_operator_name: string
created_time: string
delete_time: string
id: string
length: string
name: string
organ_id: string
organ_id_name: string
project_id: string
project_id_name: string
score: string
status: string
status_name: string
teacher: ExperimentItemTeacher[]
type: string
type_name: string
updated_operator: string
updated_operator_name: string
updated_time: string
}
export interface ExperimentCreateItem {
organ_id: string
status: string
course_id: string
name: string
length: string
type: string
score: string
teachers_id: string
teachers_ids?: string[]
}
<script setup lang="ts"> <script setup lang="ts">
import { CirclePlusFilled } from '@element-plus/icons-vue' import { CirclePlusFilled } from '@element-plus/icons-vue'
import type { ExperimentItem } from '../types'
import FormDialog from '../components/FormDialog.vue' import FormDialog from '../components/FormDialog.vue'
// import { getExperimentList } from '../api' import { getExperimentList } from '../api'
// 列表配置 // 列表配置
const listOptions = { const listOptions = {
// remote: { remote: {
// httpRequest: getExperimentList, httpRequest: getExperimentList,
// params: { name: '' } params: { name: '' },
// }, callback(data: { total: number; list: ExperimentItem[] }) {
const { list, total } = data
const dataList = list.map(item => {
const teacher_names = item.teacher.map(teacher => teacher.name).join('、')
return { ...item, teacher_names }
})
return { list: dataList, total }
}
},
filters: [{ type: 'input', prop: 'name', label: '实验名称', placeholder: '请输入实验名称' }], filters: [{ type: 'input', prop: 'name', label: '实验名称', placeholder: '请输入实验名称' }],
columns: [ columns: [
{ label: '序号', type: 'index', width: 60 }, { label: '序号', type: 'index', width: 60 },
{ label: '实验课程名称', prop: 'name' }, { label: '实验课程名称', prop: 'course_name' },
{ label: '实验名称', prop: 'name' }, { label: '实验名称', prop: 'name' },
{ label: '实验学时', prop: 'name' }, { label: '实验学时', prop: 'length' },
{ label: '指导教师', prop: 'name' }, { label: '指导教师', prop: 'teacher_names' },
{ label: '实验类型', prop: 'name' }, { label: '实验类型', prop: 'type_name' },
{ label: '实验总成绩', prop: 'name' }, { label: '实验总成绩', prop: 'score' },
{ label: '更新人', prop: 'name' }, { label: '更新人', prop: 'updated_operator_name' },
{ label: '更新时间', prop: 'name' }, { label: '更新时间', prop: 'updated_time' },
{ label: '操作', slots: 'table-x', width: 300 } { label: '操作', slots: 'table-x', width: 300 }
], ]
data: [{}]
} }
let dialogVisible = $ref(false) let dialogVisible = $ref(false)
...@@ -41,12 +49,13 @@ function handleUpdate() { ...@@ -41,12 +49,13 @@ function handleUpdate() {
<template #header-buttons> <template #header-buttons>
<el-button type="primary" round :icon="CirclePlusFilled" @click="handleAdd">新增实验</el-button> <el-button type="primary" round :icon="CirclePlusFilled" @click="handleAdd">新增实验</el-button>
</template> </template>
<template #table-x>
<template #table-x="{ row }: { row: ExperimentItem }">
<el-button type="primary" round> <el-button type="primary" round>
<router-link to="/admin/system/experiment/123" target="_blank">查看</router-link> <router-link :to="`/admin/system/experiment/${row.id}`" target="_blank">查看</router-link>
</el-button> </el-button>
<el-button type="primary" round> <el-button type="primary" round>
<router-link to="/admin/system/experiment/123" target="_blank">关联班级与分组</router-link> <router-link :to="`/admin/system/experiment/${row.id}`" target="_blank">关联班级与分组</router-link>
</el-button> </el-button>
<el-button type="primary" round @click="handleUpdate">编辑</el-button> <el-button type="primary" round @click="handleUpdate">编辑</el-button>
</template> </template>
......
...@@ -40,5 +40,3 @@ export const useMapStore = defineStore({ ...@@ -40,5 +40,3 @@ export const useMapStore = defineStore({
} }
} }
}) })
useMapStore().getMapList()
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论