tm-quickCity.vue 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622
  1. <template>
  2. <view class="tm-quickCity fulled">
  3. <view @click="qiehuan"><slot ></slot></view>
  4. <view @click.stop="qiehuan" v-if="showbgOpen" class="tm-quickCity-fullbg fulled fixed b-0 l-0" :style="{height:sysHeight+'px'}">
  5. <view :style="{height:(height+250+content_jian_height)+'rpx'}" @click.stop="" :class="[black_tmeme?'grey-darken-5 bk':'white']" class=" tm-quickCity-wk absolute fulled round-t-10" >
  6. <view class="tm-quickCity-title px-32 pt-32 shadow-4 relative">
  7. <view class="text-size-g text-weight-b mb-32 relative">
  8. <view>
  9. 请选择城市位置
  10. </view>
  11. <view @click.stop="qiehuan" class="tm-calendar-close rounded flex-center" :class="black_tmeme?'grey-darken-3':'grey-lighten-3'">
  12. <tm-icons dense name="icon-times" size="24" :color="black_tmeme?'white':'grey'"></tm-icons>
  13. </view>
  14. </view>
  15. <view class="flex-start pb-24">
  16. <view :class="[pageIndex==0?`outlined ${color_tmeme} text-weight-b`:'outlined grey',black_tmeme?'bk':'']" @click="indexChange(0)" class=" px-12 py-6 round-10 flex-center text-size-s mr-24 flex-shrink">
  17. <text>{{childrenIndx[0]!==null?childrenIndx[0].title:'请选择省'}}</text>
  18. </view>
  19. <view v-if="childrenIndx[0]!==null" class="flex-center pr-24">
  20. <tm-icons :color="black_tmeme?'white':'grey'" :size="24" dense name="icon-angle-right"></tm-icons>
  21. </view>
  22. <view style="max-width: 120rpx;" :class="[pageIndex==1?`outlined ${color_tmeme} text-weight-b`:'outlined grey',black_tmeme?'bk':'']" @click="indexChange(1)" v-if="childrenIndx[0]!==null" class="px-12 py-6 round-10 flex-center text-size-s mr-24 pb-10 ">
  23. <text class="text-overflow">{{childrenIndx[1]!==null?childrenIndx[1].title:'请选择市'}}</text>
  24. </view>
  25. <view v-if="childrenIndx[1]!==null" class="flex-center pr-24">
  26. <tm-icons :color="black_tmeme?'white':'grey'" :size="24" dense name="icon-angle-right"></tm-icons>
  27. </view>
  28. <view style="max-width: 220rpx;" :class="[pageIndex==2?`outlined ${color_tmeme} text-weight-b`:'outlined grey',black_tmeme?'bk':'']" @click="indexChange(2)" v-if="childrenIndx[1]!==null" class="px-12 py-6 round-10 flex-center text-size-s mr-24 pb-10 ">
  29. <text class="text-overflow">{{childrenIndx[2]!==null?childrenIndx[2].title:'请选择县/区'}}</text>
  30. </view>
  31. </view>
  32. </view>
  33. <view v-if="hotCity_chuli.length>0" class="tm-quickCity-jg py-24">
  34. <view :class="[black_tmeme?'grey-darken-5':'grey-lighten-4 text']" class="text-size-s text-weight-b py-12 px-32">热门城市</view>
  35. <view class="px-20 pt-12">
  36. <tm-tags model="text" rounded :black="black_tmeme" @click="selectedDefaultHot(index)" v-for="(item,index) in hotCity_chuli" :key="index" color="white" :fllowTheme="fllowTheme">
  37. {{item[1]?item[1]:item[0]}}
  38. </tm-tags>
  39. </view>
  40. </view>
  41. <view v-show="pageIndex==0">
  42. <tm-quickIndex :black="black_tmeme" :fllowTheme="false" :color="color_tmeme" key="ref_k_1" v-model="active" :height="content_height" :list="list">
  43. <template v-slot:cell="{data}">
  44. <view @click="cityClick_pr(data,0)" :class="[data.black?'bk':'',data.children!==data.total-1?'border-grey-lighten-4-b-1':'']" class="py-24 mx-32 flex-between">
  45. <view class="text-size-n flex-start" >
  46. <view v-if="data.item['checked']" class="mr-24">
  47. <tm-icons :color="data.color" dense name="icon-check"></tm-icons>
  48. </view>
  49. <text :class="[data.item['checked']?'text-'+data.color+' text-weight-b':'']" class="text-size-n">
  50. {{data.title}}
  51. </text>
  52. </view>
  53. </view>
  54. </template>
  55. </tm-quickIndex>
  56. </view>
  57. <view v-if="pageIndex==1">
  58. <tm-quickIndex :black="black_tmeme" :fllowTheme="false" :color="color_tmeme" key="ref_k_2" v-model="active_2" v-if="childrenIndx[0]" :height="content_height" :list="childrenIndx[0].children">
  59. <template #cell="{data}">
  60. <view @click="cityClick_pr(data,1)" :class="[data.black?'bk':'',data.children!==data.total-1?'border-grey-lighten-4-b-1':'']" class="py-24 mx-32 border-grey-lighten-4-b-1 flex-between">
  61. <view class="text-size-n flex-start" >
  62. <view v-if="data.item['checked']" class="mr-24">
  63. <tm-icons :color="data.color" dense name="icon-check"></tm-icons>
  64. </view>
  65. <text :class="[data.item['checked']?'text-'+data.color+' text-weight-b':'']" class="text-size-n">
  66. {{data.title}}
  67. </text>
  68. </view>
  69. </view>
  70. </template>
  71. </tm-quickIndex>
  72. </view>
  73. <view v-if="pageIndex==2">
  74. <tm-quickIndex :black="black_tmeme" :fllowTheme="false" :color="color_tmeme" key="ref_k_3" v-model="active_3" v-if="childrenIndx[1]" :height="content_height" :list="childrenIndx[1].children">
  75. <template #cell="{data}">
  76. <view @click="cityClick_pr(data,2)" :class="[data.black?'bk':'',data.children!==data.total-1?'border-grey-lighten-4-b-1':'']" class="py-24 mx-32 border-grey-lighten-4-b-1 flex-between">
  77. <view class="text-size-n flex-start" >
  78. <view v-if="data.item['checked']" class="mr-24">
  79. <tm-icons :color="data.color" dense name="icon-check"></tm-icons>
  80. </view>
  81. <text :class="[data.item['checked']?'text-'+data.color+' text-weight-b':'']" class="text-size-n">
  82. {{data.title}}
  83. </text>
  84. </view>
  85. </view>
  86. </template>
  87. </tm-quickIndex>
  88. </view>
  89. </view>
  90. </view>
  91. </view>
  92. </template>
  93. <script>
  94. /**
  95. * 城区索引选择
  96. * @property {Boolean} value = [true|false] 显示和隐藏组件,请使用v-model或者value.sync你也可以不提供些参数,使用默认插槽也可打开,请见示例。
  97. * @property {Array} default-value = [] 默认选择的地址:[],字符串数组,如["江西省","南昌市"]。使用.sync双向绑定。
  98. * @property {Array} hot-city = [] 默认选择的地址:[],格式同default-value
  99. * @property {String} color = [] 默认:primary,主题色
  100. * @property {Number} height = [] 默认:1000,组件高度,单位rpx
  101. * @property {Boolean} black = [true|false] 默认:false,是否深色模式
  102. * @property {Function} change 选中地址时触发,返回当前选中的地区数组。
  103. */
  104. import provinceData from '@/tm-vuetify/tool/util/province.js';
  105. import cityData from '@/tm-vuetify/tool/util/city.js';
  106. import areaData from '@/tm-vuetify/tool/util/area.js';
  107. import queryCnChart from "@/tm-vuetify/tool/function/findCnChart.js";
  108. import tmQuickIndex from "@/tm-vuetify/components/tm-quickIndex/tm-quickIndex.vue"
  109. import tmListitem from "@/tm-vuetify/components/tm-listitem/tm-listitem.vue"
  110. import tmGrouplist from "@/tm-vuetify/components/tm-grouplist/tm-grouplist.vue"
  111. import tmIcons from "@/tm-vuetify/components/tm-icons/tm-icons.vue"
  112. import tmTags from "@/tm-vuetify/components/tm-tags/tm-tags.vue"
  113. export default {
  114. components:{tmQuickIndex,tmListitem,tmGrouplist,tmIcons,tmTags
  115. },
  116. name:"tm-quickCity",
  117. model:{
  118. event:'input',
  119. prop:'value'
  120. },
  121. props:{
  122. defaultValue:{
  123. type:Array,
  124. default:()=>{
  125. return [];
  126. }
  127. },
  128. hotCity:{
  129. type:Array,
  130. default:()=>[["江西省","南昌市"],["北京市"],["广东省","广州市"],["浙江省","杭州市"],["重庆市"],["湖南省","长沙市"],["湖北省","武汉市"],["四川省","成都市"]]
  131. },
  132. color:{
  133. type:String,
  134. default:"primary"
  135. },
  136. height:{
  137. type:String|Number,
  138. default:900
  139. },
  140. value:{
  141. type:Boolean,
  142. default:false
  143. },
  144. black:{
  145. type:Boolean,
  146. default:null
  147. },
  148. // 跟随主题色的改变而改变。
  149. fllowTheme:{
  150. type:Boolean|String,
  151. default:true
  152. }
  153. },
  154. data() {
  155. return {
  156. remen:[["江西省","南昌市"],["北京市"],["广东省","广州市"],["浙江省","杭州市"],["重庆市"],["湖南省","长沙市"],["湖北省","武汉市"],["四川省","成都市"]],
  157. list:[],
  158. active:0,
  159. active_2:0,
  160. active_3:0,
  161. childrenIndx:[null,null,null],
  162. indexobj:{
  163. pr:null,
  164. ar:null,
  165. co:null
  166. },
  167. pageIndex:0,
  168. sysHeight:0,
  169. showbgOpen:false,
  170. content_height:0,
  171. content_jian_height:0,
  172. hotCity_chuli:[]
  173. };
  174. },
  175. watch:{
  176. value:function(val){
  177. this.show = val;
  178. }
  179. },
  180. destroyed() {
  181. this.list=[];
  182. this.childrenIndx=[];
  183. },
  184. computed:{
  185. black_tmeme: function() {
  186. if (this.black !== null) return this.black;
  187. return this.$tm.vx.state().tmVuetify.black;
  188. },
  189. color_tmeme:function(){
  190. if(this.$tm.vx.state().tmVuetify.color!==null&&this.$tm.vx.state().tmVuetify.color && this.fllowTheme){
  191. return this.$tm.vx.state().tmVuetify.color;
  192. }
  193. return this.color;
  194. },
  195. show:{
  196. get:function(){
  197. return this.showbgOpen;
  198. },
  199. set:function(val){
  200. this.showbgOpen = val;
  201. this.$emit('input',val);
  202. this.$emit('update:value',val);
  203. }
  204. }
  205. },
  206. async mounted() {
  207. this.sysHeight = uni.getSystemInfoSync().windowHeight;
  208. this.show = this.value;
  209. this.content_height = this.height;
  210. this.hotCity_chuli_fun();
  211. await this.chiliFormatCity_area()
  212. await this.setDefaultValue();
  213. await this.content_heightToh();
  214. },
  215. methods: {
  216. hotCity_chuli_fun(){
  217. let hot = uni.$tm.deepClone(this.hotCity);
  218. let hostar = [];
  219. hot.forEach(item=>{
  220. if(item.length==1) hostar.push([item[0],null,null])
  221. if(item.length==2) hostar.push([item[0],item[1],null])
  222. if(item.length==3) hostar.push([item[0],item[1],item[2]])
  223. })
  224. this.hotCity_chuli = [...hostar];
  225. },
  226. async qiehuan(){
  227. this.show = !this.showbgOpen
  228. await this.content_heightToh();
  229. },
  230. async content_heightToh(){
  231. // if(!this.showbgOpen) return;
  232. if(this.hotCity_chuli.length==0){
  233. return this.height;
  234. }
  235. this.$nextTick(async function(){
  236. let h = await this.$Querey(".tm-quickCity-jg",this).catch(e=>{});
  237. if(!h[0]) return;
  238. h = h[0].height;
  239. let blv = uni.upx2px(4) / 4;
  240. this.content_jian_height = (h+h*blv)
  241. this.content_height = parseInt(this.height - this.content_jian_height);
  242. })
  243. },
  244. async selectedDefaultHot(index){
  245. var a=[["江西省","南昌市"],["北京市"],["广东省","广州市"],["浙江省","杭州市"],["重庆市"],["湖南省","长沙市"],["湖北省","武汉市"],["四川省","成都市"]];
  246. this.$emit('update:defaultValue',a[index]);
  247. let chl = this.childrenIndx[0];
  248. if(chl){
  249. this.$set(this.list[chl.index].children[chl.childrenIndex],'checked',false)
  250. }
  251. this.childrenIndx=[null,null,null];
  252. this.$nextTick(async function(){
  253. await this.setDefaultValue()
  254. this.cityClick_pr(this.list[this.childrenIndx[0]],this.childrenIndx[0])
  255. })
  256. },
  257. async setDefaultValue(){
  258. let t = this;
  259. function chuili(ix){
  260. let pitem = null;
  261. let chilIndex=-1;
  262. let pdindex = -1;
  263. if(ix==0&&t.defaultValue[ix]){
  264. pdindex = t.list.findIndex((item)=>{
  265. let citem = item.children
  266. let index = citem.findIndex(ditem=>{
  267. if(ditem.title == t.defaultValue[ix]){
  268. pitem = ditem;
  269. }
  270. return ditem.title == t.defaultValue[ix]
  271. })
  272. if(index>-1){
  273. chilIndex = index;
  274. }
  275. return index>-1;
  276. })
  277. }else if(t.defaultValue[ix]){
  278. let dsst = t.childrenIndx[ix-1].children
  279. pdindex = dsst.findIndex((item)=>{
  280. let citem = item.children
  281. let index = citem.findIndex(ditem=>{
  282. if(ditem.title == t.defaultValue[ix]){
  283. pitem = ditem;
  284. }
  285. return ditem.title == t.defaultValue[ix]
  286. })
  287. if(index>-1){
  288. chilIndex = index;
  289. }
  290. return index>-1;
  291. })
  292. }
  293. return {prevent:pdindex,chileIndex:chilIndex,item:pitem};
  294. }
  295. let d = chuili(0)
  296. if(d.prevent>-1){
  297. let chl = this.childrenIndx[0];
  298. if(chl){
  299. this.$set(this.list[chl.index].children[chl.childrenIndex],'checked',false)
  300. }
  301. t.childrenIndx.splice(0,1,{
  302. index:d.prevent,
  303. childrenIndex:d.chileIndex,
  304. title:d.item.title,
  305. children:t.chuliKey(d.item.children)
  306. })
  307. t.active = d.prevent;
  308. this.$set(this.list[d.prevent].children[d.chileIndex],'checked',true)
  309. }
  310. if(t.defaultValue[1]){
  311. let d = chuili(1)
  312. let chl = this.childrenIndx[1];
  313. if(chl){
  314. this.$set(this.childrenIndx[0].children[chl.index].children[chl.childrenIndex],'checked',false)
  315. }
  316. t.childrenIndx.splice(1,1,{
  317. index:d.prevent,
  318. childrenIndex:d.chileIndex,
  319. title:d.item.title,
  320. children:t.chuliKey(d.item.children)
  321. })
  322. this.$set(this.childrenIndx[0].children[d.prevent].children[d.chileIndex],'checked',true)
  323. }else{
  324. }
  325. await uni.$tm.sleep(50)
  326. if(t.defaultValue[2]){
  327. let d = chuili(2)
  328. let chl = this.childrenIndx[2];
  329. if(chl){
  330. this.$set(this.childrenIndx[1].children[chl.index].children[chl.childrenIndex],'checked',false)
  331. }
  332. t.childrenIndx.splice(2,1,{
  333. index:d.prevent,
  334. childrenIndex:d.chileIndex,
  335. title:d.item.title,
  336. children:[]
  337. })
  338. this.$set(this.childrenIndx[1].children[d.prevent].children[d.chileIndex],'checked',true)
  339. }
  340. },
  341. indexChange(index){
  342. let t= this;
  343. this.pageIndex = index;
  344. this.childrenIndx.forEach((item,idx)=>{
  345. if(idx===index && item!==null){
  346. if(t.defaultValue[idx]==item.title){
  347. if(idx==0){
  348. t.active = item.index;
  349. }else if(idx==1){
  350. t.active_2 = item.index;
  351. }else if(idx==2){
  352. t.active_3 = item.index;
  353. }
  354. }
  355. }
  356. })
  357. },
  358. cityClick_pr(data_item,tindex){
  359. if(tindex===0){
  360. let chl = this.childrenIndx[0];
  361. if(chl){
  362. this.$set(this.list[chl.index].children[chl.childrenIndex],'checked',false)
  363. }
  364. this.childrenIndx=[{
  365. index:data_item.prevent,
  366. childrenIndex:data_item.children,
  367. title:data_item.title,
  368. children:this.chuliKey(data_item.item.children)
  369. },null,null]
  370. this.$set(this.indexobj,'pr',data_item.prevent)
  371. this.$set(this.indexobj,'ar',null)
  372. this.$set(this.indexobj,'co',null)
  373. this.pageIndex=1;
  374. this.$set(this.list[data_item.prevent].children[data_item.children],'checked',true)
  375. }else if(tindex===1){
  376. let chl = this.childrenIndx[1]
  377. if(chl){
  378. this.$set(this.childrenIndx[0].children[chl.index].children[chl.childrenIndex],'checked',false)
  379. }
  380. this.childrenIndx.splice(1,1,{
  381. index:data_item.prevent,
  382. childrenIndex:data_item.children,
  383. title:data_item.title,
  384. children:this.chuliKey(data_item.item.children)
  385. })
  386. this.childrenIndx.splice(2,1,null)
  387. this.$set(this.indexobj,'pr',data_item.prevent)
  388. this.$set(this.indexobj,'ar',data_item.prevent)
  389. this.$set(this.indexobj,'co',null)
  390. this.pageIndex=2;
  391. this.$set(this.childrenIndx[0].children[data_item.prevent].children[data_item.children],'checked',true)
  392. }else if(tindex===2){
  393. let chl = this.childrenIndx[2]
  394. if(chl){
  395. this.$set(this.childrenIndx[1].children[chl.index].children[chl.childrenIndex],'checked',false)
  396. }
  397. this.childrenIndx.splice(2,1,{
  398. index:data_item.prevent,
  399. childrenIndex:data_item.children,
  400. title:data_item.title,
  401. children:[]
  402. })
  403. this.$set(this.indexobj,'pr',data_item.prevent)
  404. this.$set(this.indexobj,'ar',data_item.prevent)
  405. this.$set(this.indexobj,'co',data_item.prevent)
  406. this.$set(this.childrenIndx[1].children[data_item.prevent].children[data_item.children],'checked',true)
  407. }
  408. let cdite = this.defaultValue;
  409. this.childrenIndx.forEach((item,index)=>{
  410. if(item){
  411. cdite.splice(index,1,item.title)
  412. }else{
  413. cdite.splice(index,1,null)
  414. }
  415. })
  416. this.$emit("update:defaultValue",cdite)
  417. this.$emit("change",cdite)
  418. },
  419. //处理地区数据以便符合规范。
  420. async chiliFormatCity_area() {
  421. let list = [];
  422. let list_index_Str = []
  423. provinceData.forEach((item,index)=>{
  424. let quick = queryCnChart(item.label[0])["0"];
  425. if(item.label=='重庆市'){
  426. quick = 'C'
  427. }
  428. list.push({
  429. id:item.value,
  430. text:item.label,
  431. quick:quick,
  432. children:[]
  433. })
  434. })
  435. cityData.forEach((item,index)=>{
  436. item.forEach((citem,cindex)=>{
  437. list[index].children.push({
  438. id:citem.value,
  439. text:citem.label,
  440. quick:queryCnChart(citem.label[0])["0"],
  441. children:[]
  442. })
  443. })
  444. })
  445. list.forEach((item,index)=>{
  446. item.children.forEach((citem,cindex)=>{
  447. areaData[index][cindex].forEach(jitem=>{
  448. list[index].children[cindex].children.push({
  449. id:jitem.value,
  450. quick:queryCnChart(jitem.label[0])["0"],
  451. text:jitem.label
  452. })
  453. })
  454. })
  455. })
  456. function sortFun(a,b){
  457. var nameA = a.quick.toUpperCase(); // ignore upper and lowercase
  458. var nameB = b.quick.toUpperCase(); // ignore upper and lowercase
  459. if (nameA < nameB) {
  460. return -1;
  461. }
  462. if (nameA > nameB) {
  463. return 1;
  464. }
  465. // names must be equal
  466. return 0;
  467. }
  468. function sort(itemArray){
  469. if(typeof itemArray === 'object' && Array.isArray(itemArray)){
  470. itemArray.sort(sortFun)
  471. }else{
  472. return itemArray;
  473. }
  474. for(let i=0;i<itemArray.length;i++){
  475. let cl = itemArray[i]['children'];
  476. if(typeof cl === 'object' && Array.isArray(cl)){
  477. itemArray[i]['children'] = sort(cl);
  478. }
  479. }
  480. return itemArray;
  481. }
  482. let plst = sort(list);
  483. function fenzu(ar){
  484. let jg = {};
  485. for(let i=0;i<ar.length;i++){
  486. let cl = ar[i]['children'];
  487. if(typeof cl === 'object' && Array.isArray(cl)){
  488. if(typeof jg[ar[i].quick] !=='undefined'){
  489. jg[ar[i].quick].push({
  490. title:ar[i].text,
  491. index:ar[i].quick,
  492. children:fenzu(cl)
  493. })
  494. }else{
  495. jg[ar[i].quick] = [];
  496. jg[ar[i].quick].push({
  497. title:ar[i].text,
  498. index:ar[i].quick,
  499. children:fenzu(cl)
  500. })
  501. }
  502. }else{
  503. if(typeof jg[ar[i].quick] !=='undefined'){
  504. jg[ar[i].quick].push({
  505. title:ar[i].text,
  506. index:ar[i].quick,
  507. children:ar[i]
  508. })
  509. }else{
  510. jg[ar[i].quick] = [];
  511. jg[ar[i].quick].push({
  512. title:ar[i].text,
  513. index:ar[i].quick,
  514. children:ar[i]
  515. })
  516. }
  517. }
  518. }
  519. return jg;
  520. }
  521. let ruslt = fenzu(plst);
  522. let tddd = this.chuliKey(ruslt);
  523. this.list = tddd;
  524. return tddd;
  525. },
  526. chuliKey(arritem){
  527. let ruslt = arritem;
  528. let zuihojg = [];
  529. let keyarray = Object.keys(arritem);
  530. for(let i=0;i<keyarray.length;i++){
  531. zuihojg.push({
  532. title:keyarray[i],
  533. index:keyarray[i],
  534. children:ruslt[keyarray[i]]
  535. })
  536. }
  537. return zuihojg;
  538. }
  539. },
  540. }
  541. </script>
  542. <style lang="scss" scoped>
  543. .tm-quickCity{
  544. .tm-quickCity-fullbg{
  545. background-color: rgba(0,0,0,0.3);
  546. z-index: 501;
  547. .tm-quickCity-wk{
  548. bottom: 0;
  549. left: 0;
  550. .tm-quickCity-title{
  551. z-index: 10;
  552. .tm-calendar-close {
  553. position: absolute;
  554. top: 0rpx;
  555. right: 0rpx;
  556. height: 50rpx;
  557. line-height: 50rpx;
  558. width: 50rpx;
  559. }
  560. }
  561. }
  562. }
  563. }
  564. </style>