popup.vue 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570
  1. <template>
  2. <view>
  3. <!-- 弹窗 -->
  4. <view class="bgbox" @click="getClose" v-if="type&&type!=2"></view>
  5. <view class="bgbox" v-if="type&&type==2"></view>
  6. <!-- 录入 -->
  7. <block v-if="type==1">
  8. <view class="importbox sfixed" :class="type==1?'imp_bot':''">
  9. <view class="list flexc btn1" @click="getEnter(1)">
  10. <image :src="importimg" class="imgl"></image>
  11. <view class="flex1">
  12. <view class="f16 fw5 c16 mb4">导入{{titsta}}</view>
  13. <view class="f14 coa">已有{{titsta}}单表格,一键导入</view>
  14. </view>
  15. <image :src="rimg" class="imgr"></image>
  16. </view>
  17. <view class="list flexc btn2" @click="getEnter(2)">
  18. <image :src="enterimg" class="imgl"></image>
  19. <view class="flex1">
  20. <view class="f16 fw5 c16 mb4">录入{{titsta}}</view>
  21. <view class="f14 coa">在线录入{{titsta}}</view>
  22. </view>
  23. <image :src="rimg" class="imgr"></image>
  24. </view>
  25. </view>
  26. </block>
  27. <!-- 科目选择 -->
  28. <view class="subject sfixed" v-if="type==2">
  29. <view class="chose_top flexc">
  30. <!-- <view class="topbtn topl" @click="getClose">取消</view> -->
  31. <view class="topc">选择科目(可多选)</view>
  32. <view class="topbtn topr" @click="getsubConfirm">确定</view>
  33. </view>
  34. <!-- <view class="chose_box">
  35. <view class="pr list" v-for="(ite,idx) in subjectlist" :key="idx">
  36. <view class="lista flexcc" :class="ite.check ?'act':''" @click="getCheck(idx)" >{{ite.tit}} </view>
  37. <view class="listp" @click.stop="btns" v-if="ite.check">
  38. <input placeholder="总分" maxlength="6" v-model="ite.manfen" type="digit"/>
  39. </view>
  40. </view>
  41. </view> -->
  42. <!-- 新样式 -->
  43. <view class="chose_nbox">
  44. <view class="list" v-for="(ite,idx) in subjectlist" :key="idx">
  45. <view class="listl over" :class="ite.check ?'act':''" @click="getCheck(idx)">{{ite.tit}}</view>
  46. <view class="listr flexc">
  47. <view class="ltrtit">总分</view>
  48. <input placeholder="请输入总分" :disabled="!ite.check" maxlength="6" v-model="ite.manfen" type="digit" />
  49. </view>
  50. </view>
  51. <view class="txt"><text>*</text>请先选择科目,再输入总分</view>
  52. </view>
  53. </view>
  54. <!-- 录入成绩 -->
  55. <view class="subject sfixed" v-if="type==3">
  56. <view class="chose_top flexc">
  57. <view class="topbtn topl" @click="getClose">取消</view>
  58. <view class="topc">添加学生成绩</view>
  59. <view class="topbtn topr" @click="getScore">完成</view>
  60. </view>
  61. <view class="chose_box">
  62. <!-- <view class="lrlist">
  63. <view class="label">学生姓名</view>
  64. <input placeholder="请输入学生姓名" v-model='studentinfo.scoreDataName'/>
  65. </view> -->
  66. <view style="width: 100%;">
  67. <picker range-key="dictLabel" :range="studenlist" :value="stuidx" @change="bindDateChange">
  68. <view class="lrlist">
  69. <view class="label">学生姓名</view>
  70. <view class="flex1 f15" :class="studentinfo.scoreDataName?'co16':'coa'">{{studentinfo.scoreDataName||'请选择学生姓名'}}</view>
  71. <!-- <input placeholder="请输入学生姓名" v-model='studentinfo.scoreDataName'/> -->
  72. <image :src="rimg" class="ilrmgr"></image>
  73. </view>
  74. </picker>
  75. </view>
  76. <view class="lrlist" v-for="(ite,idx) in subList" :key="idx">
  77. <view class="label">{{ite.xueke}}成绩</view>
  78. <!-- 选择各个科目成绩 -->
  79. <block><input type="digit" maxlength="6" placeholder="请输入分数" v-model="ite.score"/></block>
  80. <!-- <block><input placeholder="请输入分数" v-model="studentinfo[ite.val]"/></block> -->
  81. </view>
  82. <!-- params['params[role]'] -->
  83. <!-- <view class="lrlist">
  84. <view class="label">成绩总分</view>
  85. <input placeholder="请输入分数" v-model="studentinfo.zongfen"/>
  86. <textarea auto-height="true" v-module='studentinfo.zongfen' placeholder="请输入点评成绩(选填)" class="input"></textarea>
  87. </view> -->
  88. </view>
  89. </view>
  90. <!-- 删除 -->
  91. <view class="delbox" v-if="type==4">
  92. <view class="tit">修改信息</view>
  93. <view class="tit">删除学生</view>
  94. <view class="zhan"></view>
  95. <view class="tit close" @click="getClose">取消</view>
  96. </view>
  97. <!-- 有成绩之后 -->
  98. <view class="delbox" v-if="type==6">
  99. <view class="tit" @click="getLook">查看{{titsta}}</view>
  100. <view class="tit" @click="getDel">删除{{titsta}}</view>
  101. <view class="zhan"></view>
  102. <view class="tit close" @click="getClose">取消</view>
  103. </view>
  104. <!-- 档案 -->
  105. <!-- 隐私提示 -->
  106. <view class="confirmbox flexdc" v-if="type==5">
  107. <view class="tit flex0">隐私提示</view>
  108. <view class="txt">根据学生一对一隐私协议,只能查看自己的成绩</view>
  109. <view class="cfbtn flex ">
  110. <view class="cbtn btn2" @click="getClose">我知道了</view>
  111. <!-- <view class="cbtn btn2" @click="getConfirm">{{confdat.suretxt}}</view> -->
  112. </view>
  113. </view>
  114. <!-- 孩子 -->
  115. <view class="delbox" v-if="type==7">
  116. <view class="tit" @click="getChose(ite)" v-for="(ite,idx) in childrens" :key="idx">{{ite.schoolName}}/{{ite.className}}/{{ite.studentName}}</view>
  117. <view class="zhan"></view>
  118. <view class="tit close" @click="getClose">取消</view>
  119. </view>
  120. <!-- 防溺水计划 -->
  121. <view class="fnsbox" v-if="type==8">
  122. <view class="fns_top">
  123. <image :src="fziconc" @click="getClose"></image>
  124. <view>加入防溺水计划</view>
  125. </view>
  126. <view class="fns_ma">
  127. <picker range-key="className" :range="classlist" :value="classidx" @change="bindDateChangea">
  128. <view class="flexc mibox mb16">
  129. <view class="tit" style="margin-bottom: 0;">选择班级</view>
  130. <view class="f15 flex1 txr co16" v-if="classname" >{{classname}}</view>
  131. <view class="f15 flex1 txr coa" v-else>请选择班级</view>
  132. <image :src="rimg" class="rimg"></image>
  133. </view>
  134. </picker>
  135. <view class="fns_mab">
  136. <image :src="fzicond"></image>
  137. <view class="tip">提示:本防溺水计划仅作为辅助提示作用,我们 将做到尽力推送,请确保学生照片信息清晰准确 无误!确认提交前,请先阅读完安全协议信息!</view>
  138. </view>
  139. <view class="rebtn mb16" style="height: 80rpx;" @click="getJoin">确认</view>
  140. <view class="lread" @click="checkflag=!checkflag">
  141. <view class="lreadl">
  142. <image :src="checkimg" v-if="checkflag"></image>
  143. <image :src="ncheckimg" v-else></image>
  144. </view>
  145. <view class="tit">我已阅读并知晓<text @click.stop="handlePrivacy">安全协议</text>信息,选择即为自愿同意</view>
  146. </view>
  147. </view>
  148. </view>
  149. <!-- 老师新增班级 -->
  150. <view class="subject sfixed" v-if="type==9">
  151. <view class="chose_top flexc">
  152. <view class="topbtn topl" @click="getClose">取消</view>
  153. <view class="topc">添加班级</view>
  154. <view class="topbtn topr" @click="getClassSure">完成</view>
  155. </view>
  156. <view class="chose_box">
  157. <view style="width: 100%;">
  158. <picker range-key="className" :range="classlist" :value="classvalidx" @change="bindDateChangeb">
  159. <view class="lrlist">
  160. <view class="label">班级</view>
  161. <view class="flex1 f15" :class="classinfo.className?'co16':'coa'">{{classinfo.className||'请选择班级'}}</view>
  162. <image :src="rimg" class="ilrmgr"></image>
  163. </view>
  164. </picker>
  165. </view>
  166. <view style="width: 100%;">
  167. <picker range-key="dictLabel" :range="subjects" :value="cstuidx" @change="bindDateChangec">
  168. <view class="lrlist">
  169. <view class="label">学科</view>
  170. <view class="flex1 f15" :class="classinfo.discipline?'co16':'coa'">{{classinfo.discipline||'请选择学科'}}</view>
  171. <image :src="rimg" class="ilrmgr"></image>
  172. </view>
  173. </picker>
  174. </view>
  175. </view>
  176. </view>
  177. </view>
  178. </template>
  179. <script>
  180. //subLists 选择的科目
  181. //subjectlist 字典值 成绩表科目
  182. //nostudenlist 学生信息表
  183. export default{
  184. props:{
  185. type: {
  186. type: Number,
  187. default () {
  188. return 0
  189. }
  190. },
  191. studentinfos:{
  192. type: Object,
  193. default () {
  194. return {}
  195. }
  196. },
  197. subLists:{},
  198. subjectlists:{
  199. type: Array,
  200. default () {
  201. return []
  202. }
  203. },
  204. titsta:{
  205. type: String,
  206. default () {
  207. return '成绩'
  208. }
  209. },
  210. nostudenlist:{
  211. type: Array,
  212. default () {
  213. return []
  214. }
  215. },
  216. childrens:{
  217. type: Array,
  218. default () {
  219. return []
  220. }
  221. },
  222. classlist:{
  223. type: Array,
  224. default () {
  225. return []
  226. }
  227. },
  228. subjects:{
  229. type: Array,
  230. default () {
  231. return []
  232. }
  233. },
  234. classinfos:{
  235. type: Object,
  236. default () {
  237. return {}
  238. }
  239. }
  240. },
  241. watch:{
  242. subLists(val){
  243. if(val&&val.length>0){
  244. this.subList=val
  245. }
  246. },
  247. nostudenlist(val){
  248. this.studenlist=val
  249. },
  250. subjectlists(val){
  251. this.subjectlist=val
  252. },
  253. studentinfos(val){
  254. this.studentinfo=JSON.parse(JSON.stringify(val))
  255. },
  256. classinfos(val){
  257. this.classinfo=JSON.parse(JSON.stringify(val))
  258. },
  259. type(val){
  260. if(val==0){
  261. var newobj={
  262. scoreDataName:'',//姓名
  263. scoreDataNameId:'',//姓名id
  264. studentNumber:''
  265. }
  266. this.studentinfo=JSON.parse(JSON.stringify(newobj))
  267. var classinfo={className:'',classId:'',discipline:''};
  268. this.classinfo=JSON.parse(JSON.stringify(classinfo))
  269. this.subList=[]
  270. }else{
  271. if(this.studentinfos){
  272. this.studentinfo=JSON.parse(JSON.stringify(this.studentinfos))
  273. }
  274. if(this.subLists){
  275. this.subList=JSON.parse(JSON.stringify(this.subLists))
  276. }
  277. }
  278. }
  279. },
  280. data(){
  281. return{
  282. importimg:require("@/mine/static/score/import.png"),
  283. enterimg:require("@/mine/static/score/enter.png"),
  284. rimg:require("@/mine/static/score/rimg.png"),
  285. fziconc:require("@/mine/static/score/fziconc.png"),
  286. fzicond:require("@/mine/static/score/fzicond.png"),
  287. checkimg:require('@/mine/static/score/check.png'),
  288. ncheckimg:require('@/mine/static/score/ncheck.png'),
  289. checkval:[],
  290. subList:[],//选中的课表
  291. stuidx:0,
  292. classidx:0,
  293. checkflag:false,
  294. classname:'',
  295. classId:'',
  296. stuname:'',
  297. studenlist:[],
  298. scoreDataName:'',
  299. subjectlist:[],
  300. studentinfo:{},
  301. classinfo:{
  302. className:'',
  303. classId:'',
  304. discipline:'',
  305. },
  306. classvalidx:0,
  307. cstuidx:0,
  308. }
  309. },
  310. mounted() {
  311. this.subjectlist=this.subjectlists
  312. },
  313. methods:{
  314. inputChange(e){
  315. var that = this
  316. e.target.value = (e.target.value.match(/^\d*(\.?\d{0,2})/g)[0]) || null
  317. this.$nextTick(() => {
  318. that.rechargeMoney= e.target.value
  319. })
  320. },
  321. btns(){
  322. },
  323. getClose(){
  324. this.$emit("getClose")
  325. },
  326. getEnter(e){
  327. this.$emit("getEnter",e)
  328. },
  329. getConfirm(){
  330. this.$emit("getConfirm")
  331. },
  332. getLook(){
  333. this.$emit("getLook")
  334. },
  335. getDel(){
  336. this.$emit("getDel")
  337. },
  338. getChose(e){
  339. this.$emit("getChose",e)
  340. },
  341. getJoin(){
  342. this.$emit("getJoin")
  343. },
  344. getClassSure(){
  345. this.$emit("getClassSure",this.classinfo)
  346. },
  347. bindDateChange(e){
  348. var idx=e.detail.value;
  349. // this.scoreDataName=this.studenlist[idx].dictLabel
  350. this.studentinfo.scoreDataName=this.studenlist[idx].dictLabel
  351. this.studentinfo.scoreDataNameId=this.studenlist[idx].dictValue
  352. this.studentinfo.studentNumber=this.studenlist[idx].studentNumber
  353. },
  354. bindDateChangea(e){
  355. var idx=e.detail.value;
  356. this.classname=this.classlist[idx].className
  357. this.classId=this.classlist[idx].classId
  358. },
  359. bindDateChangeb(e){
  360. var idx=e.detail.value;
  361. this.classinfo.className=this.classlist[idx].className
  362. this.classinfo.classId=this.classlist[idx].classId
  363. },
  364. bindDateChangec(e){
  365. var idx=e.detail.value;
  366. this.classinfo.discipline=this.subjects[idx].dictLabel
  367. },
  368. getScore(){
  369. var info=JSON.parse(JSON.stringify(this.subList));
  370. var a=0
  371. Object.keys(info).some((key) => {
  372. info[key].score=Number(info[key].score).toFixed(2)
  373. if (info[key].score.trim()== '') {
  374. a=1;
  375. this.$toast("请输入"+info[key].xueke+"成绩")
  376. return
  377. }
  378. })
  379. // console.log(params)
  380. if(a==1){
  381. return
  382. }
  383. this.studentinfo.scoreDataDetailBoList=info;
  384. this.$emit('getScore',this.studentinfo)
  385. },
  386. getCheck(idx){
  387. var newArr=this.subjectlist;
  388. newArr[idx].check=!newArr[idx].check;
  389. this.subjectlist=JSON.parse(JSON.stringify(newArr))
  390. },
  391. getsubConfirm(){
  392. var newArr=this.subjectlist;
  393. var narr=[];
  394. var mfboList=[];
  395. var column1=[{ type:'index', fixed:true,width:80,align:'center', },{ name: 'scoreDataName', label: '姓名',fixed:true,width:140,emptyString:'--',align:'center' },];
  396. var s={ name: 'operation', type:'operation',label: '操作',
  397. renders:[
  398. {name:'编辑',func:'edit'}, // func 代表子元素点击的事件 父元素接收的事件 父元素 @edit
  399. {name:'删除',type:'warn',func:"dele"},
  400. ]}
  401. var num=0
  402. Object.keys(newArr).some((key) => {
  403. if (newArr[key].check) {
  404. if(newArr[key].manfen){
  405. var obj={};
  406. // obj.name=newArr[key].val;
  407. obj.name=newArr[key].tit;
  408. obj.label=newArr[key].tit;
  409. obj.manfen=Number(newArr[key].manfen).toFixed(2);
  410. obj.sorter=true
  411. obj.align='center'
  412. obj.width=190
  413. column1.push(obj)
  414. var xobj={};
  415. xobj.xueke=newArr[key].tit;
  416. xobj.score='';
  417. narr.push(xobj)
  418. var nobj={}
  419. nobj.xueke=newArr[key].tit;
  420. nobj.manfen=Number(newArr[key].manfen).toFixed(2);
  421. mfboList.push(nobj)
  422. return ;
  423. }else{
  424. num=1
  425. var str='请填写'+newArr[key].tit+'总分'
  426. this.$toast(str)
  427. return true;
  428. }
  429. }
  430. })
  431. // 判断是否填写总分
  432. if(num==1){
  433. return
  434. }
  435. if(narr.length<1){
  436. this.$toast("请至少选中一门科目")
  437. return
  438. }
  439. column1.push(s)
  440. this.subList=JSON.parse(JSON.stringify(narr))
  441. var newobj={
  442. narr:narr,
  443. column1:column1,
  444. mfboList:mfboList
  445. }
  446. this.$emit('getsubConfirm',newobj)
  447. }
  448. }
  449. }
  450. </script>
  451. <style lang="scss" scoped>
  452. //录入
  453. .sfixed{position: fixed;bottom: 0;left: 0;right: 0;background: #fff;z-index: 5;}
  454. .importbox{transition: all linear 0.3s;transform: translateY(100%);padding:32rpx 32rpx 20rpx;box-sizing: border-box;
  455. &.imp_bot{transform: translateY(0);}
  456. .list{width: 100%;border-radius: 22rpx;padding: 24rpx 48rpx;margin-bottom: 24rpx;position: relative;
  457. &.btn1{background: #EFF4FF;}
  458. &.btn2{background: #E7FFF4;}
  459. .imgl{width: 74rpx;height: 74rpx;flex: 0 0 auto;margin-right: 24rpx;}
  460. .imgr{width: 18rpx;height: 32rpx;flex: 0 0 auto;margin-left: 24rpx;}
  461. }
  462. }
  463. .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;
  464. .label{font-size: 28rpx;font-weight: bold;color: #161616;flex: 0 0 auto;margin-right: 48rpx;}
  465. input{font-size: 30rpx;color: #161616;}
  466. .input{font-size: 30rpx;color: #161616;}
  467. .ilrmgr{width: 12rpx;height: 22rpx;}
  468. }
  469. // 删除
  470. .delbox{position: fixed;left:0;right: 0;bottom: 0;z-index: 5;background: #ffffff;
  471. .tit{font-size: 32rpx;font-weight: 500;color: #000000;height: 100rpx;display: flex;align-items: center;justify-content: center;}
  472. .zhan{height: 24rpx;background: #f5f5f5;width: 100%;}
  473. .close{color: #4775EA;}
  474. }
  475. // 科目
  476. .subject{padding: 20rpx 0;max-height: calc(100vh - 200rpx);display: flex;flex-direction: column;
  477. .chose_top{margin-bottom: 20rpx;flex: 0 0 auto;
  478. .topbtn{font-weight: 500;font-size: 30rpx;color: #666666;width: 108rpx;height: 88rpx;display: flex;align-items: center;justify-content: center;
  479. &.topr{color: #4775EA;}
  480. }
  481. .topc{font-weight: 500;font-size: 30rpx;color: #161616;flex: 1;margin: 0 24rpx;text-align: center;}
  482. }
  483. .chose_box{padding: 16rpx 32rpx 2rpx;display: flex;flex-wrap: wrap;flex: 1;overflow: auto;
  484. .list{margin:0 52rpx 40rpx 0;position: relative;
  485. &:nth-child(3n){margin-right: 0;}
  486. .lista{
  487. width: 190rpx;height:76rpx;background: #F2F2F2;border-radius: 38rpx;font-size: 30rpx;font-weight: 500;
  488. color: #666666;
  489. &.act{background: #1f57e6;color: #ffffff;}
  490. }
  491. .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;
  492. &::before{content: '';position: absolute;bottom: 100%;left: 50%;margin-left: -10rpx;border-width: 6rpx;border-style: solid;border-color: transparent transparent #d8e4ff transparent; }
  493. input{font-size: 26rpx;line-height: 40rpx;color: #161616;}
  494. }
  495. }
  496. }
  497. // 新样式
  498. .chose_nbox{
  499. padding: 16rpx 32rpx 2rpx;display: flex;flex-wrap: wrap;flex: 1;overflow: auto;
  500. .list{display: flex;align-items: center;width: 100%;margin-bottom: 24rpx;
  501. .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;
  502. &.act{background: #1f57e6;color: #ffffff;}
  503. }
  504. .listr{height: 76rpx;width: 280rpx;background: #F2F2F2;border-radius: 10rpx;padding: 0 24rpx;box-sizing: border-box;flex: 1;
  505. .ltrtit{flex: 0 0 auto;font-size: 28rpx;font-weight: bold;color: #161616;margin-right: 24rpx;}
  506. input{font-size: 30rpx;line-height: 76rpx;color: #161616;}
  507. }
  508. }
  509. .txt{font-size: 26rpx;color: #AAAAAA;display: flex;align-items: flex-start;line-height: 40rpx;
  510. text{color: #F7082E;flex: 0 0 auto;}
  511. }
  512. }
  513. }
  514. // 隐私
  515. .confirmbox{
  516. 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;
  517. .tit{font-size: 34rpx;font-weight: bold;
  518. color: #161616;line-height: 48rpx;}
  519. .txt{font-size: 32rpx;color: #161616;flex: 1;padding: 28rpx;display: flex;align-items: center;justify-content: center;line-height: 48rpx;}
  520. .cfbtn{border-top: 2rpx solid #DDDDDD;flex: 0 0 auto;
  521. .cbtn{width: 100%;height: 88rpx;line-height: 88rpx;
  522. &.btn1{font-size: 32rpx;font-weight: 500;
  523. color: #AAAAAA;position: relative;
  524. &::after{position: absolute;right: 1rpx;top: 0;bottom: 0;content: "";width: 2rpx;background-color: #DDDDDD;}
  525. }
  526. &.btn2{font-size: 32rpx;font-weight: 500;color: #4775EA;}
  527. }
  528. }
  529. }
  530. // 防溺水
  531. .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;
  532. image{flex: 0 0 auto;}
  533. .fns_top{font-size: 30rpx;font-weight: bold;color: #161616;text-align: center;margin-bottom: 28rpx;
  534. image{width: 28rpx;height: 28rpx;position: absolute;left: 48rpx;top: 32rpx;}
  535. }
  536. .fns_ma{
  537. .mibox{padding: 12rpx 0;
  538. .tit{font-size: 30rpx;font-weight: 500;color: #161616;flex: 0 0 auto;}
  539. .rimg{width: 14rpx;height: 26rpx;margin-left:18rpx;}
  540. }
  541. .fns_mab{display: flex;flex-wrap: wrap;margin-bottom: 52rpx;
  542. image{width: 30rpx;height: 30rpx;margin-right: 14rpx;flex: 0 0 auto;}
  543. .tip{flex: 1;font-size: 28rpx;font-weight: 500;color: #161616;}
  544. }
  545. }
  546. .lread{display: flex;align-items: flex-start;justify-content: center;
  547. .lreadl{padding-top: 4rpx;
  548. image{width: 28rpx;height: 28rpx;margin-right: 14rpx;}
  549. }
  550. .tit{font-size: 26rpx;font-weight: 500;color: #666666;line-height: 40rpx;
  551. text{color: #4775EA;text-decoration: underline;padding: 0 6rpx;}
  552. }
  553. }
  554. }
  555. </style>