come.vue 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584
  1. <template>
  2. <view>
  3. <!-- 顶部选填情况 -->
  4. <step-bar :steps="steps" :datainfo="datainfo" :fixeda="fixedflag" :reservatType="yktypes"></step-bar>
  5. <view class="ytbox" :style="fixedflag?'padding-top: 152rpx;':''">
  6. <uni-forms ref="form" class="ytforms" :rules="rules" :modelValue="datainfo">
  7. <view v-for="(ite,idx) in steps" :key="idx" @click="getInFn(ite.val)">
  8. <!-- <block v-if="showflag"> -->
  9. <view class="yttit" v-if="ite.val!=2&&ite.val!=3">{{ite.tit}}</view>
  10. <view class="ytsbox boxb" v-if="ite.val==0" >
  11. <!-- 日历 -->
  12. <lunc-calendar ref="calendar" :showLunar="false" :configWeek="configWeek" :configHoliday="configHoliday" :firstDayOfWeek="firstDayOfWeek" :showMonthBg="false" :showShrink="true" :signList="signList"
  13. @dayChange="dayChange" weekType="" @monthChange="monthChange" @getIsSelDayFn="getIsSelDayFn" @shrinkClick="shrinkClick">
  14. </lunc-calendar>
  15. <view class="ytime">
  16. <view class="ytimea">
  17. <view class="ytimel">选择时间</view>
  18. <view class="lread" @click="getTimeFn(1)">
  19. <view class="lreadl">
  20. <image :src="choseimg" v-if="timeType==1"></image>
  21. <image :src="nchoseimg" v-else></image>
  22. </view>
  23. <view class="tit">上午</text></view>
  24. </view>
  25. <view class="lread" @click="getTimeFn(2)">
  26. <view class="lreadl">
  27. <image :src="choseimg" v-if="timeType==2"></image>
  28. <image :src="nchoseimg" v-else></image>
  29. </view>
  30. <view class="tit">下午</text></view>
  31. </view>
  32. </view>
  33. <view class="ytimeb">
  34. <view class="list" :class="[ite.reservatConfigStatus=='Y'?'box3':'box1',timeid==ite.reservatConfigTimeId?'box2':'']" v-for="(ite,idx) in timeList" :key="idx" @click="getChose(ite)">
  35. <view class="tit">{{typeFn(ite.reservatConfigTimeBegin)}}-{{typeFn(ite.reservatConfigTimeEnd)}}</view>
  36. <view class="txt">{{ite.reservatConfigStatus=='Y'?'可预约':'已约满'}}</view>
  37. </view>
  38. </view>
  39. </view>
  40. </view>
  41. <view class="ytsbox" v-if="ite.val==1" >
  42. <uni-forms-item label="人员类型" required name="visitName">
  43. <view class="flexc ytchose">
  44. <view class="lread" @click="yktypes=1">
  45. <view class="lreadl">
  46. <image :src="choseimg" v-if="yktypes==1"></image>
  47. <image :src="nchoseimg" v-else></image>
  48. </view>
  49. <view class="tit">团队</text></view>
  50. </view>
  51. <view class="lread" @click="yktypes=2">
  52. <view class="lreadl">
  53. <image :src="choseimg" v-if="yktypes==2"></image>
  54. <image :src="nchoseimg" v-else></image>
  55. </view>
  56. <view class="tit">散客</text></view>
  57. </view>
  58. </view>
  59. </uni-forms-item>
  60. <uni-forms-item label="单位名称" required name="visitUnitName" v-if="yktypes==1">
  61. <uni-easyinput :inputBorder="false" v-model="datainfo.visitUnitName" placeholder="请输入单位名称">
  62. </uni-easyinput>
  63. </uni-forms-item>
  64. <uni-forms-item label="参观人数" required >
  65. <view class=" ytchose">
  66. <view class="flexc">
  67. <image :src="downimg" class="numbtn" @click="_calcValue('minus')"></image>
  68. <input type="number" v-model="inputValue" class="numinp" />
  69. <image :src="upimg" class="numbtn" @click="_calcValue('plus')"></image>
  70. </view>
  71. </view>
  72. </uni-easyinput>
  73. </uni-forms-item>
  74. <uni-forms-item label="联系人" required name="visitName">
  75. <uni-easyinput :inputBorder="false" v-model="datainfo.visitName" placeholder="请输入联系人">
  76. </uni-easyinput>
  77. </uni-forms-item>
  78. <uni-forms-item label="联系电话" required name="visitPhone">
  79. <uni-easyinput :inputBorder="false" type="number" v-model="datainfo.visitPhone" placeholder="请输入正确的手机号码">
  80. </uni-easyinput>
  81. </uni-forms-item>
  82. <uni-forms-item label="是否接待" required name="visitName" v-if="yktypes==1">
  83. <view class="flexc ytchose">
  84. <view class="lread" @click="getisReceptionFn">
  85. <view class="lreadl">
  86. <image :src="choseimg" v-if="isReception=='Y'"></image>
  87. <image :src="nchoseimg" v-else></image>
  88. </view>
  89. <view class="tit">是</text></view>
  90. </view>
  91. <view class="lread" @click="isReception='N'">
  92. <view class="lreadl">
  93. <image :src="choseimg" v-if="isReception=='N'"></image>
  94. <image :src="nchoseimg" v-else></image>
  95. </view>
  96. <view class="tit">否</text></view>
  97. </view>
  98. </view>
  99. </uni-forms-item>
  100. </uni-forms-item>
  101. <uni-forms-item label="备注信息" name="visitRemark">
  102. <textarea placeholder="可补充填写" v-model="datainfo.visitRemark" placeholder-style="color:#aaa;" :auto-height="autoHeight" ></textarea>
  103. </uni-forms-item>
  104. </view>
  105. <!-- </block> -->
  106. </view>
  107. </uni-forms>
  108. <view class="ybtn flexcc" @click="getSubmit">提交预约</view>
  109. <!-- <view class="ybtn btn1 flexcc" v-else>提交预约</view> -->
  110. <!-- 日历 -->
  111. <!-- 来访时间 -->
  112. <!-- 来访者信息 -->
  113. <!-- <picker range-key='dictLabel' :value="xkindex" :range="classval" @change='bindDateChangeb'>
  114. <uni-forms-item label="班级" required name="className">
  115. <view class="f16 flex1 txr" :class="datainfo.className?'co16':'coa'">
  116. {{datainfo.className||"请选择班级"}}
  117. </view>
  118. </uni-forms-item>
  119. </picker> -->
  120. <!-- 被访者信息 -->
  121. </view>
  122. </view>
  123. </template>
  124. <script>
  125. import stepBar from "@/components/order/stepbar.vue"
  126. import luncCalendar from "@/components/lunc-calendar/lunc-calendar.vue"
  127. import {getCalendarList,getReservatAdd,getConfigList} from "@/api/mine/order.js"
  128. export default {
  129. components:{stepBar,luncCalendar},
  130. data(){
  131. return{
  132. choseimg:require("@/static/images/order/comes/chose.png"),
  133. nchoseimg:require("@/static/images/order/comes/nchosec.png"),
  134. downimg:require("@/static/images/order/comes/down.png"),
  135. upimg:require("@/static/images/order/comes/add.png"),
  136. checkflag:false,
  137. yktypes:1,//人员类型 1:团队 2:散客
  138. isReception:'Y',//是否需要接待 N:不需要 Y:需要
  139. //status: 填写状态 0:未填 1:在填 2:填完
  140. steps:[{tit:'预约时间',status:1,val:0},{tit:'信息登记',status:0,val:1},{tit:'等待审核',status:0,val:2},{tit:'审核结果',status:0,val:3}],
  141. fixedflag:true,
  142. rules: {
  143. // visitPhone: {rules: [{required: true,errorMessage: '请输入联系电话'},{pattern:"^(13[0-9]|14[01456879]|15[0-35-9]|16[2567]|17[0-8]|18[0-9]|19[0-35-9])\\d{8}$",errorMessage: '请输入正确的联系方式'}]},
  144. },
  145. autoHeight:true,
  146. disabled:false,
  147. intype:0,
  148. datainfo:{},
  149. inputValue:1,
  150. step:1,
  151. min:1,
  152. signList: [],
  153. configWeek:[],
  154. configHoliday:'Y',
  155. firstDayOfWeek:'sunday',
  156. dayflag:false,
  157. month:'',
  158. year:'',
  159. kaTime:'',
  160. changetime:'',//改变的日期
  161. timeday:'',//选择的日期
  162. visitDate:'',
  163. showflag:false,
  164. id:'',
  165. timeType:1,//1: AM 2: PM",
  166. timeList:[],//时间段
  167. timeid:'',
  168. jdryflag:true,//当前时间段是否能接待
  169. }
  170. },
  171. watch:{
  172. intype(val){
  173. var data=this.datainfo;
  174. if(val!=0){
  175. if(data.visitDate&&data.visitTime) this.steps[0].status=2;
  176. else if(!data.visitDate||!data.visitTime) this.steps[0].status=0;
  177. }
  178. if(val!=1){
  179. if(this.yktypes==1){
  180. if(this.inputValue&&data.visitPhone&&data.visitName&&data.visitUnitName) this.steps[1].status=2;
  181. else if(!this.inputValue||!data.visitPhone||!data.visitName||!data.visitUnitName) this.steps[1].status=0;
  182. }else{
  183. if(this.inputValue&&data.visitPhone&&data.visitName) this.steps[1].status=2;
  184. else if(!this.inputValue||!data.visitPhone) this.steps[1].status=0;
  185. }
  186. }
  187. }
  188. },
  189. onLoad: function(e) {
  190. // this.id=e.id;
  191. this.id='881659';
  192. this.time();
  193. this.getCalendarList();
  194. this.getConfigList()
  195. },
  196. methods:{
  197. _calcValue(type) {
  198. // if (this.disabled) {
  199. // return;
  200. // }
  201. const scale = this._getDecimalScale();
  202. let value = this.inputValue * scale;
  203. let step = this.step * scale;
  204. if (type === "minus") {
  205. value -= step;
  206. if (value < (this.min * scale)) {
  207. return;
  208. }
  209. if (value > (this.max * scale)) {
  210. value = this.max * scale
  211. }
  212. }
  213. if (type === "plus") {
  214. value += step;
  215. if (value > (this.max * scale)) {
  216. return;
  217. }
  218. if (value < (this.min * scale)) {
  219. value = this.min * scale
  220. }
  221. }
  222. this.inputValue = (value / scale).toFixed(String(scale).length - 1);
  223. },
  224. _getDecimalScale() {
  225. let scale = 1;
  226. // 浮点型
  227. if (~~this.step !== this.step) {
  228. scale = Math.pow(10, String(this.step).split(".")[1].length);
  229. }
  230. return scale;
  231. },
  232. typeFn(data){
  233. return data?data.substring(0,5):''
  234. },
  235. getChose(ite){
  236. if(ite.reservatConfigStatus=='Y'){
  237. this.timeid=ite.reservatConfigTimeId;
  238. this.datainfo.visitTime=ite.reservatConfigTimeBegin+'-'+ite.reservatConfigTimeEnd;
  239. this.datainfo.reservatConfigTimeId=ite.reservatConfigTimeId;
  240. // 判断当前时间段是否有接待员
  241. if(ite.receptionPersonnelType=='N'){
  242. this.jdryflag=true
  243. }else{
  244. this.jdryflag=false
  245. this.isReception='N'
  246. }
  247. }
  248. },
  249. getisReceptionFn(){
  250. if(this.jdryflag){
  251. this.isReception='Y'
  252. }else{
  253. this.$toast('当前时间段暂无预约人员')
  254. }
  255. },
  256. getTimeFn(type){
  257. if(type==1){
  258. this.timeType=1;
  259. this.timeList=this.amList;
  260. }else{
  261. this.timeType=2;
  262. this.timeList=this.pmList;
  263. }
  264. },
  265. getConfigList(){
  266. getConfigList().then(res=>{
  267. if(res.code==200){
  268. if(res.rows&&res.rows.length){
  269. var week=res.rows[0].reservatConfigWeek;
  270. var weeka=week.split(',');
  271. var weekarr=[]
  272. weeka.forEach(ite=>{
  273. weekarr.push(Number(ite))
  274. })
  275. this.configWeek=weekarr;
  276. this.configHoliday=res.rows[0].reservatConfigHoliday;
  277. }
  278. }
  279. })
  280. },
  281. getCalendarList(itime){
  282. var time=this.kaTime
  283. if(itime){
  284. time=itime
  285. }
  286. var params={
  287. reservatConfigDate:time
  288. }
  289. getCalendarList(params).then(res=>{
  290. if(res.code==200){
  291. if(res.data&&res.data.signList){
  292. this.signList=res.data.signList;
  293. }
  294. }
  295. })
  296. },
  297. getInFn(idx){
  298. this.intype=idx;
  299. this.steps[idx].status=1
  300. },
  301. time() {
  302. var date = new Date();
  303. var y = date.getFullYear();
  304. var m = date.getMonth() + 1;
  305. var d = date.getDate();
  306. var h = date.getHours();
  307. var min = date.getMinutes();
  308. var s = date.getSeconds();
  309. var week = date.getDay(); //获取当前星期X(0-6,0代表星期天)
  310. var weeks = ["星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六"];
  311. var yearStr = y + '-' + (m < 10 ? ('0' + m) : m) + '-' + (d < 10 ? ('0' + d) : d)
  312. var timeStr = (h < 10 ? ('0' + h) : h) + ':' + (min < 10 ? ('0' + min) : min) + ':' + (s < 10 ? (
  313. '0' + s) : s);
  314. this.kaTime = yearStr;
  315. this.year=y;
  316. this.month=m;
  317. },
  318. clearboth(){
  319. // var time=this.datainfo.visitDate
  320. this.datainfo={};
  321. this.steps[0].status=1;
  322. this.steps[1].status=0;
  323. this.steps[2].status=0;
  324. this.steps[3].status=0;
  325. this.timeid='';
  326. this.inputValue=1;
  327. this.timeType=1;
  328. this.timeday='';
  329. this.timeList=[];
  330. this.jdryflag=true
  331. // this.datainfo.visitDate=time;
  332. // 获取预约时间
  333. this.signList=[];
  334. this.getCalendarList(this.changetime)
  335. },
  336. getSubmit(){
  337. var that=this;
  338. // that.clearboth()
  339. // console.log(this.datainfo)
  340. // return
  341. if(!this.dayflag){
  342. this.$toast('当前日期不可预约')
  343. return
  344. }
  345. if(!this.datainfo.visitDate){
  346. this.$toast('请选择预约日期')
  347. return
  348. }
  349. if(!this.datainfo.visitTime){
  350. this.$toast('请选择时间')
  351. return
  352. }
  353. var str='预约成功'
  354. if(this.yktypes==1){
  355. str='提交成功,请等待审核'
  356. if(!this.datainfo.visitUnitName){
  357. this.$toast('请输入单位名称')
  358. return
  359. }
  360. if(this.inputValue==0){
  361. this.$toast('请输入参观人数')
  362. return
  363. }
  364. }else{
  365. if(this.inputValue==0){
  366. this.$toast('请输入参观人数')
  367. return
  368. }
  369. }
  370. if(this.inputValue<0){
  371. this.$toast('请输入正确的参观人数')
  372. return
  373. }
  374. if(!this.datainfo.visitName){
  375. this.$toast('请输入联系人')
  376. return
  377. }
  378. var phone=this.datainfo.visitPhone
  379. if(!phone){
  380. this.$toast('请输入联系电话')
  381. return
  382. }
  383. let regphone = /^(13[0-9]|14[01456879]|15[0-35-9]|16[2567]|17[0-8]|18[0-9]|19[0-35-9])\d{8}$/
  384. if (phone && !regphone.test(phone)) {
  385. that.$toast("请输入正确的手机号")
  386. return
  387. }
  388. // that.clearboth()
  389. // console.log(this.datainfo)
  390. // return
  391. this.$refs.form.validate().then(res => {
  392. var params={};
  393. params=this.datainfo
  394. if(this.yktypes==1){
  395. params.isReception=this.isReception;
  396. }else{
  397. params.isReception=''
  398. params.visitUnitName=''
  399. }
  400. params.visitNum=this.inputValue;
  401. params.reservatType=this.yktypes;
  402. // console.log(params)
  403. // return
  404. getReservatAdd(params).then(res=>{
  405. if(res.code==200){
  406. this.$toast(str)
  407. setTimeout(function(){
  408. // 团队审核
  409. if(that.yktypes==1){ //团队
  410. that.clearboth()
  411. }else{ //散客
  412. // 个人直接跳详情页
  413. var id=res.data
  414. that.$tab.navigateTo('/a/code?id='+id)
  415. }
  416. },1500)
  417. }else{
  418. this.$toast(res.msg)
  419. }
  420. })
  421. })
  422. },
  423. dayChange(e){
  424. // if(e.daySign&&e.daySign.length){
  425. // var daySign=e.daySign[0];
  426. // this.amList=daySign.amList||[];
  427. // this.pmList=daySign.pmList||[];
  428. // if(this.reservatConfigType==1){
  429. // this.timeList=this.amList;
  430. // }else if(this.reservatConfigType==2){
  431. // this.timeList=this.pmList;
  432. // }
  433. // this.timeid='';
  434. // this.datainfo.visitDate=daySign.date;
  435. // this.datainfo.visitTime='';
  436. // }
  437. },
  438. monthChange(e){
  439. var y=e.year;
  440. var m=e.month;
  441. if(y==this.year&&m==this.month){
  442. this.getCalendarList()
  443. this.changetime='';
  444. }else{
  445. var time=y + '-' + m + '-' + '01'
  446. this.changetime=time
  447. this.getCalendarList(time)
  448. }
  449. },
  450. // 选中的日期
  451. getIsSelDayFn(e){
  452. if(e.sign&&e.sign.length&&this.timeday!=e.date){
  453. this.timeday=e.date;
  454. if(this.configWeek.indexOf(e.week)!=-1 || e.isHoliday&&this.configHoliday=='N'){
  455. this.dayflag=false;
  456. }else{
  457. if(e.sign&&e.sign.length){
  458. var sign=JSON.parse(JSON.stringify(e.sign))
  459. var signes=JSON.parse(JSON.stringify(sign[0]));
  460. var amList=JSON.parse(JSON.stringify(signes.amList))||[];
  461. var pmList=JSON.parse(JSON.stringify(signes.pmList))||[];
  462. this.jdryflag=true;
  463. if(this.timeType==1){
  464. this.timeList=amList;
  465. }else{
  466. this.timeList=pmList;
  467. }
  468. this.amList=amList
  469. this.pmList=pmList
  470. this.timeid='';
  471. var y=e.year;
  472. var m=e.month;
  473. var d=e.day;
  474. this.datainfo.visitDate=y + '-' + (m < 10 ? ('0' + m) : m) + '-' + (d < 10 ? ('0' + d) : d);
  475. this.datainfo.visitTime='';
  476. if(signes.title=='可预约'){
  477. this.dayflag=true;
  478. }else{
  479. this.dayflag=false;
  480. }
  481. }
  482. }
  483. }
  484. },
  485. shrinkClick(e){
  486. console.log(e,3)
  487. },
  488. },
  489. }
  490. </script>
  491. <style lang="scss" scoped>
  492. .ytbox /deep/ .uni-forms .uni-forms-item{padding: 20rpx 16rpx 20rpx;border-bottom: 2rpx solid #E6E6E6;margin-bottom: 0;}
  493. .ytbox /deep/ .uni-forms-item__label{flex: 0 0 auto;width: auto !important;font-size: 30rpx;font-weight: bold;position: relative;color: #343434;}
  494. .ytbox /deep/ .uni-forms-item__label .is-required{position: absolute;right: 0;color: #F10C31;margin-top: 16rpx;}
  495. .ytbox /deep/ uni-textarea{flex: 1;width: auto;text-align: right;}
  496. .ytbox /deep/ .uni-textarea-placeholder{font-size: 28rpx;color: #DDDDDD !important;}
  497. .ytbox /deep/ .uni-easyinput__placeholder-class{font-size: 28rpx;color: #DDDDDD;}
  498. .ytbox /deep/ .uni-forms-item__content{display: flex;align-items: center;flex-direction: row;}
  499. .ytbox /deep/ .uni-easyinput{flex: 1;text-align: right;}
  500. .ytsbox /deep/ .uni-forms-item:last-child{border-bottom: none;}
  501. .ytbox /deep/ .uni-easyinput__content-input{font-size: 30rpx;}
  502. .ytbox /deep/ .uni-forms-item__error{margin-top:20rpx;left: auto;right: 0;}
  503. .ytbox{padding-bottom: 46rpx;}
  504. .ytforms{
  505. .yttit{font-size: 30rpx;font-weight: bold;background-color: #f1f1f1;
  506. color: $com-cd3;min-height: 76rpx;display: flex;align-items: center;padding: 0rpx 60rpx;box-sizing: border-box;position: relative;
  507. &::before{content: '';width: 6rpx;height: 34rpx;background: $com-cd3;border-radius: 4rpx;position: absolute;top: 50%;transform: translateY(-50%);left: 34rpx;}
  508. }
  509. .ytsbox{background-color: #ffffff;padding: 0 32rpx;
  510. &.boxa{padding: 24rpx 48rpx;}
  511. &.boxb{padding-bottom:10rpx;}
  512. .ytime{padding:60rpx 0 0;
  513. .ytimea{display: flex;align-items: center;margin-bottom: 32rpx;
  514. .ytimel{font-size: 30rpx;font-weight: bold;color: #161616;flex:1;}
  515. }
  516. .ytimeb{
  517. display: flex;align-items: center;flex-wrap: wrap;
  518. .list{
  519. width: 216rpx;
  520. height: 120rpx;
  521. display: flex;align-items: center;justify-content: center;flex-direction: column;
  522. border-radius:6rpx;margin-bottom: 30rpx;margin-right: 18rpx;box-sizing: border-box;
  523. &:nth-of-type(3n){margin-right: 0;}
  524. &.box1{background: #F3F3F3;
  525. view{color: #AAAAAA;}
  526. }
  527. &.box2{border: 1px solid $com-cd3 !important;
  528. .tit{color: $com-cd3 !important;}
  529. }
  530. &.box3{border: 1px solid #DADADA;
  531. }
  532. view{font-size: 28rpx;font-weight: 500;color: #161616;font-family: PingFang SC;}
  533. .tit{margin-bottom: 6rpx;}
  534. }
  535. }
  536. }
  537. .ytchose{flex: 1; display: flex;align-items: center;justify-content: flex-end;
  538. .numbtn{width: 32rpx;height: 32rpx;flex: 0 0 auto;}
  539. .numinp{margin: 0 28rpx;width: 124rpx;height: 56rpx;background: #FFFFFF;border: 2rpx solid #D32C26;border-radius: 2rpx;text-align: center;box-sizing: border-box;}
  540. }
  541. }
  542. .lread{
  543. display: flex;align-items: flex-start;justify-content: center;margin-left: 40rpx;
  544. .lreadl{padding-top: 4rpx;
  545. image{width: 28rpx;height: 28rpx;margin-right: 26rpx;}
  546. }
  547. .tit{font-size: 28rpx;font-weight: 500;color: #666666;
  548. }
  549. }
  550. }
  551. // 按钮
  552. .ybtn{width: 684rpx;height: 90rpx;background: $com-cd3;border-radius: 42rpx;margin: 60rpx auto 0;font-size: 32rpx;font-weight: 500;color: #FFFFFF;
  553. &.btn1{background-color: #9a9c9e;}
  554. }
  555. </style>