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

feature: 新增成绩单功能

上级 63b8ad96
...@@ -3,7 +3,7 @@ ...@@ -3,7 +3,7 @@
"version": "0.1.0", "version": "0.1.0",
"private": true, "private": true,
"scripts": { "scripts": {
"serve": "vue-cli-service serve", "serve": "vue-cli-service serve --open",
"build": "vue-cli-service build", "build": "vue-cli-service build",
"lint": "vue-cli-service lint", "lint": "vue-cli-service lint",
"dev-build": "vue-cli-service build --mode dev" "dev-build": "vue-cli-service build --mode dev"
......
...@@ -72,3 +72,11 @@ export function getCourses(data) { ...@@ -72,3 +72,11 @@ export function getCourses(data) {
method: 'get' method: 'get'
}) })
} }
// 获取成绩单
export function getTranscript(params) {
return httpRequest({
url: `/api/ehall/v2/lobby/havereport`,
method: 'get',
params
})
}
...@@ -44,6 +44,7 @@ ...@@ -44,6 +44,7 @@
<!-- 文本框 --> <!-- 文本框 -->
<van-field <van-field
:border="false" :border="false"
:disabled="disabled"
v-bind="item" v-bind="item"
v-model="ruleForm[item.name]" v-model="ruleForm[item.name]"
v-else v-else
...@@ -78,6 +79,7 @@ export default { ...@@ -78,6 +79,7 @@ export default {
name: 'VForm', name: 'VForm',
components: { Upload }, components: { Upload },
props: { props: {
disabled: { type: Boolean, default: false },
model: { model: {
type: Object, type: Object,
default() { default() {
......
...@@ -9,7 +9,7 @@ ...@@ -9,7 +9,7 @@
<ul class="menu-list"> <ul class="menu-list">
<li @click="toPage({ name: 'index' })">首页</li> <li @click="toPage({ name: 'index' })">首页</li>
<li <li
v-for="item in affairTypes" v-for="item in menus"
:key="item.id" :key="item.id"
@click=" @click="
toPage({ toPage({
...@@ -20,6 +20,7 @@ ...@@ -20,6 +20,7 @@
> >
{{ item.affair_name }} {{ item.affair_name }}
</li> </li>
<li @click="toPage({ name: 'transcriptIndex' })">成绩单</li>
<li @click="$router.back()">返回上一页</li> <li @click="$router.back()">返回上一页</li>
</ul> </ul>
</div> </div>
...@@ -42,6 +43,11 @@ export default { ...@@ -42,6 +43,11 @@ export default {
computed: { computed: {
affairTypes() { affairTypes() {
return this.$store.state.affairTypes return this.$store.state.affairTypes
},
menus() {
return this.affairTypes.filter(
item => !['pareport', 'elreport'].includes(item.form_name)
)
} }
}, },
methods: { methods: {
......
...@@ -43,6 +43,22 @@ const routes = [ ...@@ -43,6 +43,22 @@ const routes = [
children: [ children: [
{ name: 'view', path: '', component: () => import('@/views/View.vue') } { name: 'view', path: '', component: () => import('@/views/View.vue') }
] ]
},
{
path: '/transcript',
component: Layout,
children: [
{
name: 'transcriptIndex',
path: '',
component: () => import('@/views/transcript/Index.vue')
},
{
name: 'transcriptCreate',
path: 'create',
component: () => import('@/views/transcript/Create.vue')
}
]
} }
] ]
......
...@@ -3,7 +3,7 @@ ...@@ -3,7 +3,7 @@
<h2 class="choose-title">请选择事务</h2> <h2 class="choose-title">请选择事务</h2>
<div class="choose-list"> <div class="choose-list">
<van-radio-group v-model="radio"> <van-radio-group v-model="radio">
<div class="choose-item" v-for="item in affairTypes" :key="item.value"> <div class="choose-item" v-for="item in chooseList" :key="item.value">
<van-radio :name="item.id">{{ item.affair_name }}</van-radio> <van-radio :name="item.id">{{ item.affair_name }}</van-radio>
</div> </div>
</van-radio-group> </van-radio-group>
...@@ -28,6 +28,23 @@ export default { ...@@ -28,6 +28,23 @@ export default {
}, },
currentItem() { currentItem() {
return this.affairTypes.find(item => item.id === this.radio) return this.affairTypes.find(item => item.id === this.radio)
},
// 成绩单列表
transcriptList() {
return this.affairTypes.filter(item =>
['pareport', 'elreport'].includes(item.form_name)
)
},
chooseList() {
let list = this.affairTypes.filter(
item => !['pareport', 'elreport'].includes(item.form_name)
)
list.push({
id: 'transcript',
affair_name: '成绩单',
children: this.transcriptList
})
return list
} }
}, },
methods: { methods: {
...@@ -36,6 +53,11 @@ export default { ...@@ -36,6 +53,11 @@ export default {
this.$toast('请选择事务') this.$toast('请选择事务')
return return
} }
// 成绩单
if (this.radio === 'transcript') {
this.$router.push({ name: 'transcriptIndex' })
return
}
this.$router.push({ this.$router.push({
name: 'list', name: 'list',
query: Object.assign(this.$route.query, { query: Object.assign(this.$route.query, {
......
<template>
<div class="main">
<v-form
ref="form"
:model="formModel"
:fields="page.form.fields"
:disabled="isSubmited"
@submit="onSubmit"
></v-form>
<div class="fixed-box">
<div class="fixed-inner">
<div class="fixed-button" v-if="isSubmited">已提交</div>
<div class="fixed-button" @click="handleSubmit" v-else>提交</div>
</div>
</div>
</div>
</template>
<script>
import VForm from '@/components/Form'
import * as api from '@/api/index'
const pages = {
pareport: {
title: '纸质成绩单',
form: {
fields: [
{
name: 'personal_name',
label: '姓名',
required: true,
placeholder: '请输入姓名',
rules: [{ required: true, message: '请输入姓名' }]
},
{
name: 'class_name',
label: '班级',
required: true,
placeholder: '请输入班级',
rules: [{ required: true, message: '请输入班级' }]
},
{
type: 'digit',
name: 'sofia_id',
label: 'Sofia ID',
required: true,
placeholder: '请输入班级',
rules: [{ required: true, message: '请输入Sofia ID' }]
},
{
type: 'tel',
name: 'telephone',
label: '电话',
required: true,
placeholder: '请输入班级',
rules: [{ required: true, message: '请输入电话' }]
},
{
name: 'email',
label: '邮寄地址',
required: true,
placeholder: '请输入邮寄地址',
rules: [{ required: true, message: '请输入邮寄地址' }]
},
{
type: 'digit',
name: 'number',
label: '需打印的份数',
required: true,
placeholder: '请输入需打印的份数',
rules: [{ required: true, message: '请输入需打印的份数' }]
}
]
}
},
elreport: {
title: '电子成绩单',
form: {
fields: [
{
name: 'personal_name',
label: '姓名',
required: true,
placeholder: '请输入姓名',
rules: [{ required: true, message: '请输入姓名' }]
},
{
name: 'class_name',
label: '班级',
required: true,
placeholder: '请输入班级',
rules: [{ required: true, message: '请输入班级' }]
},
{
type: 'digit',
name: 'sofia_id',
label: 'Sofia ID',
required: true,
placeholder: '请输入班级',
rules: [{ required: true, message: '请输入Sofia ID' }]
},
{
name: 'email',
label: '邮箱',
required: true,
placeholder: '请输入邮箱',
rules: [{ required: true, message: '请输入邮箱' }]
}
]
}
}
}
export default {
name: 'Create',
components: { VForm },
metaInfo() {
return {
title: this.page.title
}
},
data() {
return {
formModel: {}
}
},
watch: {
$route: {
immediate: true,
deep: true,
handler(route) {
if (!route.query.channel) {
this.$dialog
.alert({
message: '请选择事务'
})
.then(() => {
this.$router.replace({
name: 'index',
query: this.$route.query
})
})
}
}
}
},
computed: {
// 页面配置
page() {
return pages[this.channel] ? pages[this.channel] : {}
},
channel() {
return this.$route.query.channel
},
channelId() {
return this.$route.query.channel_id
},
isSubmited() {
return this.formModel.submit === 1
}
},
methods: {
handleSubmit() {
this.$refs.form.submit()
},
onSubmit(data) {
data.affair_id = this.channelId
api.createAffair(data).then(response => {
if (response.success) {
this.$dialog
.alert({ confirmButtonText: '确定', message: '提交成功' })
.then(() => {
this.getDetail()
})
} else {
this.$toast(response.message)
}
})
},
// 获取详情
getDetail() {
api.getTranscript({ type: this.channel }).then(response => {
this.formModel = response
})
}
},
beforeMount() {
this.getDetail()
}
}
</script>
<template>
<div class="choose">
<div class="choose-list">
<van-radio-group v-model="radio">
<div
class="choose-item"
v-for="item in transcriptList"
:key="item.value"
>
<van-radio :name="item.id">{{ item.affair_name }}</van-radio>
</div>
</van-radio-group>
</div>
<div class="fixed-box">
<div class="fixed-inner">
<div class="fixed-button" @click="toListPage">下一步</div>
</div>
</div>
</div>
</template>
<script>
export default {
metaInfo: { title: '成绩单' },
data() {
return {
radio: ''
}
},
computed: {
// 所有类型
affairTypes() {
return this.$store.state.affairTypes
},
currentItem() {
return this.affairTypes.find(item => item.id === this.radio)
},
// 成绩单列表
transcriptList() {
return this.affairTypes.filter(item =>
['pareport', 'elreport'].includes(item.form_name)
)
}
},
methods: {
toListPage() {
if (!this.radio) {
this.$toast('请选择成绩单类型')
return
}
this.$router.push({
name: 'transcriptCreate',
query: Object.assign(this.$route.query, {
channel: this.currentItem.form_name,
channel_id: this.radio
})
})
},
getList() {
if (this.affairTypes.length) {
const [first] = this.affairTypes
this.radio = first.id
} else {
this.$store.dispatch('getAffairTypes')
}
}
},
beforeMount() {
this.getList()
}
}
</script>
<style lang="scss" scoped>
.choose {
padding: 0 30px;
}
.choose-title {
font-size: 19px;
font-weight: normal;
}
.choose-list {
margin-top: 46px;
}
.choose-item {
margin-bottom: 50px;
}
</style>
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论