yitisheng-mini-app/pages/zyb/score/edit.vue

434 lines
17 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<script>
import graceChecker from "@/common/graceChecker";
import StaticConstant from "@/common/StaticConstant";
import ApiConstant from "@/common/ApiConstant";
import Request from '@/common/request'
import {arrayIsNotEmpty, stringIsNotEmpty} from "@/common/util";
let request = new Request()
export default {
name: "socre-edit",
computed: {
StaticConstant() {
return StaticConstant
}
},
data() {
return {
saveScoreInfo: {},
scoreInfo: {
id: '',
province: '河南',//省份
cognitioPolyclinic: '理科',//科类
professionalCategory: '',//报考方向
culturalScore: '',//文化分
professionalScore: '',//统考分
chineseScore: '',
englishScore: ''
},
provinceArray: [{name: "河南"}],//
cognitioPolyclinicArray: StaticConstant.categoryList,//文理分科
//===========================================================
professionalCategoryArray: StaticConstant.professionalCategoryList,//专业类别大类array
professionalCategoryVisible: false,//专业类别 是否显示
professionalCategoryIndex: null,
pCategoryChildrenList: [],//子级选择
professionalCategoryScoreMax: '',//选择的专业最高分
contentHeight: 600
}
},
onShow() {
this.getUserScore()
},
methods: {
//获取用户的分数信息
getUserScore() {
request.get(ApiConstant.Score.getScore, {}).then(res => {
if (res.success) {
this.scoreInfo = res.result
//设置 报考方向 选择
let professionalCategory = this.scoreInfo.professionalCategory
for (let i = 0; i < this.professionalCategoryArray.length; i++) {
if (this.professionalCategoryArray[i].value === professionalCategory) {
this.professionalCategoryScoreMax = this.professionalCategoryArray[i].scoreMax
this.professionalCategoryIndex = i
}
}
let professionalCategoryChildren = this.scoreInfo.professionalCategoryChildren
if (professionalCategoryChildren !== undefined && professionalCategoryChildren !== '') {
this.pCategoryChildrenList = professionalCategoryChildren.split(',')
}
}
}).catch(err => {
}).finally(() => {
});
},
//保存用户的分数信息
saveScore() {
//调整参数
this.saveScoreInfo = {...this.scoreInfo}
if (arrayIsNotEmpty(this.pCategoryChildrenList)) {
this.saveScoreInfo.professionalCategoryChildren = this.pCategoryChildrenList.join(",")
} else {
this.saveScoreInfo.professionalCategoryChildren = ''
}
this.saveScoreInfo.professionalCategory = this.professionalCategoryArray[this.professionalCategoryIndex].value
//==
request.post(ApiConstant.Score.scoreSave, {
...this.saveScoreInfo
}).then(res => {
if (res.success) {
uni.setStorageSync('scoreInfo', this.saveScoreInfo)
uni.removeStorageSync('fillVolunteer')//清除可报志愿数量
this.getRecommendMajorCount()
}
}).catch(err => {
}).finally(() => {
});
},
getRecommendMajorCount() {
request.get(ApiConstant.Major.recommendMajorCount, {}).then(res => {
if (res.success) {
let result = res.result
//将数据存入 缓存
let fillVolunteer = {
all: result.allNumber,
kcj: result.kcj,
jwt: result.jwt,
nlq: result.nan,
kbd: result.kbd
}
uni.setStorageSync('fillVolunteer', fillVolunteer)
}
}).catch(err => {
}).finally(() => {
setTimeout(function () {
uni.showToast({title: '保存成功', icon: "none"});
//回到首页
uni.switchTab({
url: '/pages/zyb/home'
});
}, 500)
});
},
//选择考区
bindPicker_provinceChange: function (e) {
console.log('考区picker发送选择改变携带值为' + e)
this.scoreInfo.province = this.provinceArray[e.detail.value].name
},
//选择科目
bindPicker_cognitioPolyclinicChange: function (e) {
console.log('科目picker发送选择改变携带值为' + e.detail.value)
this.scoreInfo.cognitioPolyclinic = this.cognitioPolyclinicArray[e.detail.value].name
},
//选择报考方向
bindPicker_professionalCategoryChange: function (e) {
console.log('报考方向picker发送选择改变携带值为' + e.detail.value)
this.scoreInfo.professionalCategory = this.professionalCategoryArray[e.detail.value].value
},
formSubmit: function (e) {
let that = this
console.log('form发生了submit事件携带数据为' + JSON.stringify(e.detail.value))
//判断 输入分数
// 子级专业类别
if (arrayIsNotEmpty(this.pCategoryChildrenList)) {
for (let i = 0; i < this.pCategoryChildrenList.length; i++) {
let name = this.pCategoryChildrenList[i]
//获取字节专业的属性,判断参数是否合格
let key = this.checkChildrenNameToKey(name)
let value = this.scoreInfo[key]
if (value === undefined || value === '') {
uni.showToast({title: '请输入' + name, icon: "none"});
return
}
let score = parseInt(value)
if (typeof (score) !== 'number') {
uni.showToast({title: name + '输入参数有误', icon: "none"});
return
}
if (parseInt(score) > this.professionalCategoryScoreMax) {
uni.showToast({title: name + '请输入0~' + this.professionalCategoryScoreMax + "之间", icon: "none"});
return
}
this.scoreInfo[key] = score
}
} else {
this.scoreInfo.yybysy = 0
this.scoreInfo.yybyqy = 0
this.scoreInfo.yyjy = 0
this.scoreInfo.fzby = 0
this.scoreInfo.xjysdy = 0
this.scoreInfo.xjysby = 0
}
//判断统考成绩
let professionalScore = parseInt(this.scoreInfo.professionalScore)
console.log('professionalScore:' + professionalScore)
if (isNaN(professionalScore) || professionalScore < 0 || professionalScore > this.professionalCategoryScoreMax) {
if (this.professionalCategoryArray[this.professionalCategoryIndex].label === '音乐类') {
uni.showToast({title: '请输入主项成绩', icon: "none"});
} else {
uni.showToast({title: '统考成绩请输入0~' + this.professionalCategoryScoreMax + '之间', icon: "none"});
}
return;
}
//文化成绩
let culturalScore = parseInt(this.scoreInfo.culturalScore)
if (isNaN(professionalScore) || culturalScore < 0 || culturalScore > 750) {
uni.showToast({title: '文化分请输入0~750之间', icon: "none"});
return;
}
this.scoreInfo.professionalScore = parseInt(this.scoreInfo.professionalScore)
this.scoreInfo.culturalScore = culturalScore
uni.showModal({
title: '确认高考成绩',
content: '文化成绩:' + this.scoreInfo.culturalScore + " " + (this.scoreInfo.professionalScore ? (this.pCategoryChildrenList && this.pCategoryChildrenList.length > 0 ? '主项成绩:' : '统考成绩:') + this.scoreInfo.professionalScore : ""),
confirmText: '确定',
cancelText: '取消',
success: function (res) {
if (res.confirm) {
that.saveScore()
}
}
});
},
formReset: function (e) {
console.log('清空数据')
},
onProfessionalCategory() {
this.professionalCategoryVisible = true;
},
onProfessionalCategoryClose() {
//如果 当前选择的包括方向 有子级
if (this.professionalCategoryIndex && this.professionalCategoryArray[this.professionalCategoryIndex].children) {
if (this.pCategoryChildrenList.length === 0) {
//没有选择子级,提示选择
uni.showToast({title: '请选择类别', icon: "none"});
return
}
}
console.log('关闭')
this.professionalCategoryVisible = false
},
onProfessionalCategoryOpen() {
console.log('打开')
},
onProfessionalCategoryBottom() {
console.log('触底');
},
/*选择 大类*/
clickprofessionalCategoryItem(e, index) {
console.log(e)
this.professionalCategoryIndex = index
this.professionalCategoryScoreMax = this.professionalCategoryArray[this.professionalCategoryIndex].scoreMax
if (!e.children) {
this.professionalCategoryVisible = false
}
this.pCategoryChildrenList = []
},
/*选择 子类*/
professionalCategoryChildrenChange(e) {
console.log(e)
this.pCategoryChildrenList = e.detail.value
},
checkChildrenNameToKey(e) {
if (e === '音乐表演声乐') {
return 'yybysy';
} else if (e === '音乐表演器乐') {
return 'yybyqy';
} else if (e === '音乐教育') {
return 'yyjy';
} else if (e === '服装表演') {
return 'fzby';
} else if (e === '戏剧影视导演') {
return 'xjysdy';
} else if (e === '戏剧影视表演') {
return 'xjysby';
}
}
}
}
</script>
<template>
<view>
<!-- <page-head title=""></page-head>-->
<view class="uni-padding-wrap">
<view class="uni-title uni-common-mt">
统考/省联考成绩
<text>\n暂仅支持统考及省组织的联考科类成绩评估</text>
</view>
</view>
<view class="uni-padding-wrap uni-common-mt">
<form class="form" @submit="formSubmit" @reset="formReset">
<view class="uni-form-item uni-column">
<view class="title">考区<span class="red">*</span></view>
<view class="uni-list">
<view class="uni-list-cell">
<view class="uni-list-cell-left">
当前选择
</view>
<view class="uni-list-cell-db">
<picker @change="bindPicker_provinceChange" :value="scoreInfo.province" :range="provinceArray"
range-key="name">
<view class="uni-input">{{ scoreInfo.province }}</view>
</picker>
</view>
</view>
</view>
</view>
<view class="uni-form-item uni-column">
<view class="title">科目<span class="red">*</span></view>
<view class="uni-list">
<view class="uni-list-cell">
<view class="uni-list-cell-left">
当前选择
</view>
<view class="uni-list-cell-db">
<picker @change="bindPicker_cognitioPolyclinicChange" :value="scoreInfo.cognitioPolyclinic"
:range="cognitioPolyclinicArray" range-key="name">
<view class="uni-input">{{ scoreInfo.cognitioPolyclinic }}</view>
</picker>
</view>
</view>
</view>
</view>
<view class="uni-form-item uni-column">
<view class="title">报考方向<span class="red">*</span></view>
<view class="uni-list" @click="onProfessionalCategory">
<view class="uni-list-cell">
<view class="uni-list-cell-left">
当前选择
</view>
<view class="uni-list-cell-db uni-input" style="height: auto !important;">
<!--选择了-->
<text style="line-height: 50rpx;"
v-if="professionalCategoryIndex!==null &&professionalCategoryArray && (!pCategoryChildrenList || pCategoryChildrenList.length===0)">
{{ professionalCategoryArray[professionalCategoryIndex].label }}
</text>
<view style="line-height: 35rpx;"
v-if="professionalCategoryIndex!==undefined && pCategoryChildrenList &&pCategoryChildrenList.length>0">
<text class="flex" v-for="(item,index) in pCategoryChildrenList" :key="index">
{{ item }}
</text>
</view>
</view>
</view>
</view>
</view>
<view class="uni-form-item uni-column" v-if="professionalCategoryIndex!==undefined"
v-for="(item,index) in pCategoryChildrenList" :key="index">
<view class="title">{{ item }}成绩<span class="red">*</span></view>
<input class="uni-input" type="number" v-model="scoreInfo[checkChildrenNameToKey(item)]" name="culturalScore"
:placeholder="'请输入专业分(满分'+professionalCategoryScoreMax+''"/>
</view>
<view class="uni-form-item uni-column">
<view class="title" v-if="professionalCategoryArray &&professionalCategoryIndex!==undefined">
{{
professionalCategoryArray[professionalCategoryIndex] && professionalCategoryArray[professionalCategoryIndex].label === '音乐类' ? '主项成绩' : '统考成绩'
}}<span
class="red">*</span></view>
<input class="uni-input" type="number" v-model="scoreInfo.professionalScore" name="professionalScore"
v-if="professionalCategoryArray[professionalCategoryIndex] && professionalCategoryArray[professionalCategoryIndex].label==='音乐类'"
:placeholder="'请输入主项成绩'"/>
<input class="uni-input" type="number" v-model="scoreInfo.professionalScore" name="professionalScore" v-else
:placeholder="'请输入统考分('+professionalCategoryScoreMax+''"/>
</view>
<view class="uni-form-item uni-column">
<view class="title">文化成绩<span class="red">*</span></view>
<input class="uni-input" type="number" v-model="scoreInfo.culturalScore" name="culturalScore"
placeholder="请输入文化分(满分750)"/>
</view>
<view class="uni-form-item uni-column">
<view class="title">英语成绩</view>
<input class="uni-input" type="number" v-model="scoreInfo.englishScore" name="englishScore"
placeholder="请输入英语成绩(选填)"/>
</view>
<view class="uni-form-item uni-column">
<view class="title">语文成绩</view>
<input class="uni-input" type="number" v-model="scoreInfo.chineseScore" name="chineseScore"
placeholder="请输入语文成绩(选填)"/>
</view>
<view class="uni-btn-v">
<button form-type="submit">可修改2次</button>
</view>
</form>
</view>
</view>
<!-- 每次弹出重新计算内容高度适用动态数据加载 -->
<px-popup-bottom :visible.sync="professionalCategoryVisible" title="请选择专业类别"
@reachBottom="onProfessionalCategoryBottom"
maxHeight="800" radius="40" @close="onProfessionalCategoryClose" @open="onProfessionalCategoryOpen">
<view class="flex">
<scroll-view scroll-y="true" class="professionalCategoryPopup" style="height: 500rpx;"
:class="professionalCategoryIndex&&professionalCategoryArray[professionalCategoryIndex].children?'flex-item-5':'flex-item-10'">
<view>
<view class="flex professionalCategoryItem" :class="professionalCategoryIndex===index?'active':''"
@click="clickprofessionalCategoryItem(item,index)" v-for="(item,index) in professionalCategoryArray"
:key="index">
<text class="text">{{ item.label }}</text>
</view>
</view>
</scroll-view>
<view class="professionalCategoryChildren flex-item-5"
v-if="professionalCategoryIndex&&professionalCategoryArray[professionalCategoryIndex].children">
<checkbox-group @change="professionalCategoryChildrenChange">
<view class="childrenItem"
v-for="(item,index) in professionalCategoryArray[professionalCategoryIndex].children" :key="index">
<label>
<checkbox :checked="pCategoryChildrenList.length>0 && pCategoryChildrenList.includes(item.value)"
:disabled="pCategoryChildrenList.length>0 && pCategoryChildrenList.includes(professionalCategoryArray[professionalCategoryIndex].children[index].exclude)"
:value="item.value">{{ item.label }}
</checkbox>
</label>
</view>
</checkbox-group>
</view>
</view>
</px-popup-bottom>
</template>
<style scoped lang="scss">
.uni-form-item .title {
padding: 20rpx 0;
}
.uni-picker-tips {
font-size: 12px;
color: #666;
margin-bottom: 15px;
padding: 0 15px;
/* text-align: right; */
}
/*底部抽屉 报考方向内容 start*/
.professionalCategoryPopup .professionalCategoryItem {
margin: 20rpx;
padding: 20rpx;
text-align: center;
border: 1rpx solid #f1f2f3;
.text {
margin: 0 auto;
}
}
.active {
background-color: #3e89fe;
color: white;
border-radius: 15rpx;
}
.professionalCategoryChildren .childrenItem {
margin: 20rpx;
}
/*底部抽屉 报考方向内容 end*/
</style>