123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570 |
- <template>
- <view>
- <!-- 弹窗 -->
- <view class="bgbox" @click="getClose" v-if="type&&type!=2"></view>
- <view class="bgbox" v-if="type&&type==2"></view>
- <!-- 录入 -->
- <block v-if="type==1">
- <view class="importbox sfixed" :class="type==1?'imp_bot':''">
- <view class="list flexc btn1" @click="getEnter(1)">
- <image :src="importimg" class="imgl"></image>
- <view class="flex1">
- <view class="f16 fw5 c16 mb4">导入{{titsta}}</view>
- <view class="f14 coa">已有{{titsta}}单表格,一键导入</view>
- </view>
- <image :src="rimg" class="imgr"></image>
- </view>
- <view class="list flexc btn2" @click="getEnter(2)">
- <image :src="enterimg" class="imgl"></image>
- <view class="flex1">
- <view class="f16 fw5 c16 mb4">录入{{titsta}}</view>
- <view class="f14 coa">在线录入{{titsta}}</view>
- </view>
- <image :src="rimg" class="imgr"></image>
- </view>
- </view>
- </block>
-
- <!-- 科目选择 -->
- <view class="subject sfixed" v-if="type==2">
- <view class="chose_top flexc">
- <!-- <view class="topbtn topl" @click="getClose">取消</view> -->
- <view class="topc">选择科目(可多选)</view>
- <view class="topbtn topr" @click="getsubConfirm">确定</view>
- </view>
- <!-- <view class="chose_box">
- <view class="pr list" v-for="(ite,idx) in subjectlist" :key="idx">
- <view class="lista flexcc" :class="ite.check ?'act':''" @click="getCheck(idx)" >{{ite.tit}} </view>
- <view class="listp" @click.stop="btns" v-if="ite.check">
- <input placeholder="总分" maxlength="6" v-model="ite.manfen" type="digit"/>
- </view>
- </view>
- </view> -->
- <!-- 新样式 -->
- <view class="chose_nbox">
- <view class="list" v-for="(ite,idx) in subjectlist" :key="idx">
- <view class="listl over" :class="ite.check ?'act':''" @click="getCheck(idx)">{{ite.tit}}</view>
- <view class="listr flexc">
- <view class="ltrtit">总分</view>
- <input placeholder="请输入总分" :disabled="!ite.check" maxlength="6" v-model="ite.manfen" type="digit" />
- </view>
- </view>
- <view class="txt"><text>*</text>请先选择科目,再输入总分</view>
- </view>
- </view>
- <!-- 录入成绩 -->
- <view class="subject sfixed" v-if="type==3">
- <view class="chose_top flexc">
- <view class="topbtn topl" @click="getClose">取消</view>
- <view class="topc">添加学生成绩</view>
- <view class="topbtn topr" @click="getScore">完成</view>
- </view>
- <view class="chose_box">
- <!-- <view class="lrlist">
- <view class="label">学生姓名</view>
- <input placeholder="请输入学生姓名" v-model='studentinfo.scoreDataName'/>
- </view> -->
- <view style="width: 100%;">
- <picker range-key="dictLabel" :range="studenlist" :value="stuidx" @change="bindDateChange">
- <view class="lrlist">
- <view class="label">学生姓名</view>
- <view class="flex1 f15" :class="studentinfo.scoreDataName?'co16':'coa'">{{studentinfo.scoreDataName||'请选择学生姓名'}}</view>
- <!-- <input placeholder="请输入学生姓名" v-model='studentinfo.scoreDataName'/> -->
- <image :src="rimg" class="ilrmgr"></image>
- </view>
- </picker>
- </view>
-
- <view class="lrlist" v-for="(ite,idx) in subList" :key="idx">
- <view class="label">{{ite.xueke}}成绩</view>
- <!-- 选择各个科目成绩 -->
- <block><input type="digit" maxlength="6" placeholder="请输入分数" v-model="ite.score"/></block>
- <!-- <block><input placeholder="请输入分数" v-model="studentinfo[ite.val]"/></block> -->
- </view>
- <!-- params['params[role]'] -->
- <!-- <view class="lrlist">
- <view class="label">成绩总分</view>
- <input placeholder="请输入分数" v-model="studentinfo.zongfen"/>
- <textarea auto-height="true" v-module='studentinfo.zongfen' placeholder="请输入点评成绩(选填)" class="input"></textarea>
- </view> -->
- </view>
- </view>
- <!-- 删除 -->
- <view class="delbox" v-if="type==4">
- <view class="tit">修改信息</view>
- <view class="tit">删除学生</view>
- <view class="zhan"></view>
- <view class="tit close" @click="getClose">取消</view>
- </view>
- <!-- 有成绩之后 -->
- <view class="delbox" v-if="type==6">
- <view class="tit" @click="getLook">查看{{titsta}}</view>
- <view class="tit" @click="getDel">删除{{titsta}}</view>
- <view class="zhan"></view>
- <view class="tit close" @click="getClose">取消</view>
- </view>
- <!-- 档案 -->
- <!-- 隐私提示 -->
- <view class="confirmbox flexdc" v-if="type==5">
- <view class="tit flex0">隐私提示</view>
- <view class="txt">根据学生一对一隐私协议,只能查看自己的成绩</view>
- <view class="cfbtn flex ">
- <view class="cbtn btn2" @click="getClose">我知道了</view>
- <!-- <view class="cbtn btn2" @click="getConfirm">{{confdat.suretxt}}</view> -->
- </view>
- </view>
- <!-- 孩子 -->
- <view class="delbox" v-if="type==7">
- <view class="tit" @click="getChose(ite)" v-for="(ite,idx) in childrens" :key="idx">{{ite.schoolName}}/{{ite.className}}/{{ite.studentName}}</view>
- <view class="zhan"></view>
- <view class="tit close" @click="getClose">取消</view>
- </view>
- <!-- 防溺水计划 -->
- <view class="fnsbox" v-if="type==8">
- <view class="fns_top">
- <image :src="fziconc" @click="getClose"></image>
- <view>加入防溺水计划</view>
- </view>
- <view class="fns_ma">
- <picker range-key="className" :range="classlist" :value="classidx" @change="bindDateChangea">
- <view class="flexc mibox mb16">
- <view class="tit" style="margin-bottom: 0;">选择班级</view>
- <view class="f15 flex1 txr co16" v-if="classname" >{{classname}}</view>
- <view class="f15 flex1 txr coa" v-else>请选择班级</view>
- <image :src="rimg" class="rimg"></image>
- </view>
- </picker>
- <view class="fns_mab">
- <image :src="fzicond"></image>
- <view class="tip">提示:本防溺水计划仅作为辅助提示作用,我们 将做到尽力推送,请确保学生照片信息清晰准确 无误!确认提交前,请先阅读完安全协议信息!</view>
- </view>
- <view class="rebtn mb16" style="height: 80rpx;" @click="getJoin">确认</view>
- <view class="lread" @click="checkflag=!checkflag">
- <view class="lreadl">
- <image :src="checkimg" v-if="checkflag"></image>
- <image :src="ncheckimg" v-else></image>
- </view>
- <view class="tit">我已阅读并知晓<text @click.stop="handlePrivacy">安全协议</text>信息,选择即为自愿同意</view>
- </view>
- </view>
- </view>
- <!-- 老师新增班级 -->
- <view class="subject sfixed" v-if="type==9">
- <view class="chose_top flexc">
- <view class="topbtn topl" @click="getClose">取消</view>
- <view class="topc">添加班级</view>
- <view class="topbtn topr" @click="getClassSure">完成</view>
- </view>
- <view class="chose_box">
- <view style="width: 100%;">
- <picker range-key="className" :range="classlist" :value="classvalidx" @change="bindDateChangeb">
- <view class="lrlist">
- <view class="label">班级</view>
- <view class="flex1 f15" :class="classinfo.className?'co16':'coa'">{{classinfo.className||'请选择班级'}}</view>
- <image :src="rimg" class="ilrmgr"></image>
- </view>
- </picker>
- </view>
- <view style="width: 100%;">
- <picker range-key="dictLabel" :range="subjects" :value="cstuidx" @change="bindDateChangec">
- <view class="lrlist">
- <view class="label">学科</view>
- <view class="flex1 f15" :class="classinfo.discipline?'co16':'coa'">{{classinfo.discipline||'请选择学科'}}</view>
- <image :src="rimg" class="ilrmgr"></image>
- </view>
- </picker>
- </view>
- </view>
- </view>
- </view>
- </template>
- <script>
- //subLists 选择的科目
- //subjectlist 字典值 成绩表科目
- //nostudenlist 学生信息表
- export default{
- props:{
- type: {
- type: Number,
- default () {
- return 0
- }
- },
- studentinfos:{
- type: Object,
- default () {
- return {}
- }
- },
- subLists:{},
- subjectlists:{
- type: Array,
- default () {
- return []
- }
- },
- titsta:{
- type: String,
- default () {
- return '成绩'
- }
- },
- nostudenlist:{
- type: Array,
- default () {
- return []
- }
- },
- childrens:{
- type: Array,
- default () {
- return []
- }
- },
- classlist:{
- type: Array,
- default () {
- return []
- }
- },
- subjects:{
- type: Array,
- default () {
- return []
- }
- },
- classinfos:{
- type: Object,
- default () {
- return {}
- }
- }
- },
- watch:{
- subLists(val){
- if(val&&val.length>0){
- this.subList=val
- }
- },
- nostudenlist(val){
- this.studenlist=val
- },
- subjectlists(val){
- this.subjectlist=val
- },
- studentinfos(val){
- this.studentinfo=JSON.parse(JSON.stringify(val))
- },
- classinfos(val){
- this.classinfo=JSON.parse(JSON.stringify(val))
- },
- type(val){
- if(val==0){
- var newobj={
- scoreDataName:'',//姓名
- scoreDataNameId:'',//姓名id
- studentNumber:''
- }
- this.studentinfo=JSON.parse(JSON.stringify(newobj))
- var classinfo={className:'',classId:'',discipline:''};
- this.classinfo=JSON.parse(JSON.stringify(classinfo))
- this.subList=[]
- }else{
- if(this.studentinfos){
- this.studentinfo=JSON.parse(JSON.stringify(this.studentinfos))
- }
- if(this.subLists){
- this.subList=JSON.parse(JSON.stringify(this.subLists))
- }
-
- }
- }
- },
- data(){
- return{
- importimg:require("@/mine/static/score/import.png"),
- enterimg:require("@/mine/static/score/enter.png"),
- rimg:require("@/mine/static/score/rimg.png"),
- fziconc:require("@/mine/static/score/fziconc.png"),
- fzicond:require("@/mine/static/score/fzicond.png"),
- checkimg:require('@/mine/static/score/check.png'),
- ncheckimg:require('@/mine/static/score/ncheck.png'),
- checkval:[],
- subList:[],//选中的课表
- stuidx:0,
- classidx:0,
- checkflag:false,
- classname:'',
- classId:'',
- stuname:'',
- studenlist:[],
- scoreDataName:'',
- subjectlist:[],
- studentinfo:{},
- classinfo:{
- className:'',
- classId:'',
- discipline:'',
- },
- classvalidx:0,
- cstuidx:0,
- }
- },
- mounted() {
- this.subjectlist=this.subjectlists
- },
- methods:{
- inputChange(e){
- var that = this
- e.target.value = (e.target.value.match(/^\d*(\.?\d{0,2})/g)[0]) || null
- this.$nextTick(() => {
- that.rechargeMoney= e.target.value
- })
- },
- btns(){
-
- },
- getClose(){
- this.$emit("getClose")
- },
- getEnter(e){
- this.$emit("getEnter",e)
- },
- getConfirm(){
- this.$emit("getConfirm")
- },
- getLook(){
- this.$emit("getLook")
- },
- getDel(){
- this.$emit("getDel")
- },
- getChose(e){
- this.$emit("getChose",e)
- },
- getJoin(){
- this.$emit("getJoin")
- },
- getClassSure(){
- this.$emit("getClassSure",this.classinfo)
- },
- bindDateChange(e){
- var idx=e.detail.value;
- // this.scoreDataName=this.studenlist[idx].dictLabel
- this.studentinfo.scoreDataName=this.studenlist[idx].dictLabel
- this.studentinfo.scoreDataNameId=this.studenlist[idx].dictValue
- this.studentinfo.studentNumber=this.studenlist[idx].studentNumber
- },
- bindDateChangea(e){
- var idx=e.detail.value;
- this.classname=this.classlist[idx].className
- this.classId=this.classlist[idx].classId
- },
- bindDateChangeb(e){
- var idx=e.detail.value;
- this.classinfo.className=this.classlist[idx].className
- this.classinfo.classId=this.classlist[idx].classId
- },
- bindDateChangec(e){
- var idx=e.detail.value;
- this.classinfo.discipline=this.subjects[idx].dictLabel
- },
- getScore(){
- var info=JSON.parse(JSON.stringify(this.subList));
- var a=0
- Object.keys(info).some((key) => {
- info[key].score=Number(info[key].score).toFixed(2)
- if (info[key].score.trim()== '') {
- a=1;
- this.$toast("请输入"+info[key].xueke+"成绩")
- return
- }
- })
- // console.log(params)
- if(a==1){
- return
- }
- this.studentinfo.scoreDataDetailBoList=info;
- this.$emit('getScore',this.studentinfo)
- },
- getCheck(idx){
- var newArr=this.subjectlist;
- newArr[idx].check=!newArr[idx].check;
- this.subjectlist=JSON.parse(JSON.stringify(newArr))
- },
- getsubConfirm(){
- var newArr=this.subjectlist;
- var narr=[];
- var mfboList=[];
- var column1=[{ type:'index', fixed:true,width:80,align:'center', },{ name: 'scoreDataName', label: '姓名',fixed:true,width:140,emptyString:'--',align:'center' },];
- var s={ name: 'operation', type:'operation',label: '操作',
- renders:[
- {name:'编辑',func:'edit'}, // func 代表子元素点击的事件 父元素接收的事件 父元素 @edit
- {name:'删除',type:'warn',func:"dele"},
- ]}
- var num=0
- Object.keys(newArr).some((key) => {
- if (newArr[key].check) {
- if(newArr[key].manfen){
- var obj={};
- // obj.name=newArr[key].val;
- obj.name=newArr[key].tit;
- obj.label=newArr[key].tit;
- obj.manfen=Number(newArr[key].manfen).toFixed(2);
- obj.sorter=true
- obj.align='center'
- obj.width=190
- column1.push(obj)
-
- var xobj={};
- xobj.xueke=newArr[key].tit;
- xobj.score='';
- narr.push(xobj)
-
- var nobj={}
- nobj.xueke=newArr[key].tit;
- nobj.manfen=Number(newArr[key].manfen).toFixed(2);
- mfboList.push(nobj)
- return ;
- }else{
- num=1
- var str='请填写'+newArr[key].tit+'总分'
- this.$toast(str)
- return true;
- }
-
- }
- })
- // 判断是否填写总分
- if(num==1){
- return
- }
- if(narr.length<1){
- this.$toast("请至少选中一门科目")
- return
- }
- column1.push(s)
- this.subList=JSON.parse(JSON.stringify(narr))
- var newobj={
- narr:narr,
- column1:column1,
- mfboList:mfboList
- }
- this.$emit('getsubConfirm',newobj)
- }
- }
- }
- </script>
- <style lang="scss" scoped>
- //录入
- .sfixed{position: fixed;bottom: 0;left: 0;right: 0;background: #fff;z-index: 5;}
- .importbox{transition: all linear 0.3s;transform: translateY(100%);padding:32rpx 32rpx 20rpx;box-sizing: border-box;
- &.imp_bot{transform: translateY(0);}
- .list{width: 100%;border-radius: 22rpx;padding: 24rpx 48rpx;margin-bottom: 24rpx;position: relative;
- &.btn1{background: #EFF4FF;}
- &.btn2{background: #E7FFF4;}
- .imgl{width: 74rpx;height: 74rpx;flex: 0 0 auto;margin-right: 24rpx;}
- .imgr{width: 18rpx;height: 32rpx;flex: 0 0 auto;margin-left: 24rpx;}
- }
- }
- .lrlist{width: 100%;min-height: 100rpx;background: #F2F2F2;border-radius: 10rpx;box-sizing: border-box;display: flex;align-items: center;padding: 0 48rpx;margin-bottom: 20rpx;
- .label{font-size: 28rpx;font-weight: bold;color: #161616;flex: 0 0 auto;margin-right: 48rpx;}
- input{font-size: 30rpx;color: #161616;}
- .input{font-size: 30rpx;color: #161616;}
- .ilrmgr{width: 12rpx;height: 22rpx;}
- }
- // 删除
- .delbox{position: fixed;left:0;right: 0;bottom: 0;z-index: 5;background: #ffffff;
- .tit{font-size: 32rpx;font-weight: 500;color: #000000;height: 100rpx;display: flex;align-items: center;justify-content: center;}
- .zhan{height: 24rpx;background: #f5f5f5;width: 100%;}
- .close{color: #4775EA;}
- }
- // 科目
- .subject{padding: 20rpx 0;max-height: calc(100vh - 200rpx);display: flex;flex-direction: column;
- .chose_top{margin-bottom: 20rpx;flex: 0 0 auto;
- .topbtn{font-weight: 500;font-size: 30rpx;color: #666666;width: 108rpx;height: 88rpx;display: flex;align-items: center;justify-content: center;
- &.topr{color: #4775EA;}
- }
- .topc{font-weight: 500;font-size: 30rpx;color: #161616;flex: 1;margin: 0 24rpx;text-align: center;}
-
- }
- .chose_box{padding: 16rpx 32rpx 2rpx;display: flex;flex-wrap: wrap;flex: 1;overflow: auto;
- .list{margin:0 52rpx 40rpx 0;position: relative;
- &:nth-child(3n){margin-right: 0;}
- .lista{
- width: 190rpx;height:76rpx;background: #F2F2F2;border-radius: 38rpx;font-size: 30rpx;font-weight: 500;
- color: #666666;
- &.act{background: #1f57e6;color: #ffffff;}
- }
-
- .listp{position: absolute;left: 0;top: 90%;padding: 2rpx 2rpx;border-radius: 5px;background-color: #d8e4ff;color: #fff;font-size: 24rpx;height: 50rpx;width: 110rpx;box-sizing: border-box;text-align: center;margin-top: -4rpx;
- &::before{content: '';position: absolute;bottom: 100%;left: 50%;margin-left: -10rpx;border-width: 6rpx;border-style: solid;border-color: transparent transparent #d8e4ff transparent; }
- input{font-size: 26rpx;line-height: 40rpx;color: #161616;}
- }
- }
- }
- // 新样式
- .chose_nbox{
- padding: 16rpx 32rpx 2rpx;display: flex;flex-wrap: wrap;flex: 1;overflow: auto;
- .list{display: flex;align-items: center;width: 100%;margin-bottom: 24rpx;
- .listl{width: 240rpx; height: 76rpx;background: #F2F2F2;border-radius: 10rpx;font-size: 30rpx;font-weight: 500;color: #666666;flex: 0 0 auto;margin-right: 32rpx;text-align: center;line-height: 76rpx;padding: 0 10rpx;box-sizing: border-box;
- &.act{background: #1f57e6;color: #ffffff;}
- }
- .listr{height: 76rpx;width: 280rpx;background: #F2F2F2;border-radius: 10rpx;padding: 0 24rpx;box-sizing: border-box;flex: 1;
- .ltrtit{flex: 0 0 auto;font-size: 28rpx;font-weight: bold;color: #161616;margin-right: 24rpx;}
- input{font-size: 30rpx;line-height: 76rpx;color: #161616;}
- }
- }
- .txt{font-size: 26rpx;color: #AAAAAA;display: flex;align-items: flex-start;line-height: 40rpx;
- text{color: #F7082E;flex: 0 0 auto;}
- }
- }
- }
- // 隐私
- .confirmbox{
- position: fixed;left: 82rpx;right: 82rpx;min-height: 300rpx;top: 50%;margin-top: -30%;border-radius: 24rpx;z-index: 10;background-color: #ffffff;padding-top: 30rpx;box-sizing: border-box;text-align: center;
- .tit{font-size: 34rpx;font-weight: bold;
- color: #161616;line-height: 48rpx;}
- .txt{font-size: 32rpx;color: #161616;flex: 1;padding: 28rpx;display: flex;align-items: center;justify-content: center;line-height: 48rpx;}
- .cfbtn{border-top: 2rpx solid #DDDDDD;flex: 0 0 auto;
- .cbtn{width: 100%;height: 88rpx;line-height: 88rpx;
- &.btn1{font-size: 32rpx;font-weight: 500;
- color: #AAAAAA;position: relative;
- &::after{position: absolute;right: 1rpx;top: 0;bottom: 0;content: "";width: 2rpx;background-color: #DDDDDD;}
- }
- &.btn2{font-size: 32rpx;font-weight: 500;color: #4775EA;}
- }
- }
- }
- // 防溺水
- .fnsbox{position: fixed;left:56rpx;right: 56rpx;min-height: 600rpx;box-sizing: border-box;padding: 32rpx 48rpx;background-color: #ffffff;border-radius: 10rpx;z-index: 10;top:0;top: 50%;transform: translateY(-50%);max-height: calc(100vh - 100rpx);overflow: auto;
- image{flex: 0 0 auto;}
- .fns_top{font-size: 30rpx;font-weight: bold;color: #161616;text-align: center;margin-bottom: 28rpx;
- image{width: 28rpx;height: 28rpx;position: absolute;left: 48rpx;top: 32rpx;}
- }
- .fns_ma{
- .mibox{padding: 12rpx 0;
- .tit{font-size: 30rpx;font-weight: 500;color: #161616;flex: 0 0 auto;}
- .rimg{width: 14rpx;height: 26rpx;margin-left:18rpx;}
- }
-
- .fns_mab{display: flex;flex-wrap: wrap;margin-bottom: 52rpx;
- image{width: 30rpx;height: 30rpx;margin-right: 14rpx;flex: 0 0 auto;}
- .tip{flex: 1;font-size: 28rpx;font-weight: 500;color: #161616;}
- }
- }
- .lread{display: flex;align-items: flex-start;justify-content: center;
- .lreadl{padding-top: 4rpx;
- image{width: 28rpx;height: 28rpx;margin-right: 14rpx;}
- }
- .tit{font-size: 26rpx;font-weight: 500;color: #666666;line-height: 40rpx;
- text{color: #4775EA;text-decoration: underline;padding: 0 6rpx;}
- }
- }
- }
- </style>
|