w_picker.vue 22 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750
  1. <template>
  2. <!-- 文档链接:https://ext.dcloud.net.cn/plugin?id=273 -->
  3. <view class="w-picker">
  4. <view
  5. class="mask"
  6. :class="{ show: showPicker }"
  7. @tap="maskTap"
  8. @touchmove.stop.prevent
  9. catchtouchmove="true"
  10. ></view>
  11. <view class="w-picker-cnt" :class="{ show: showPicker }">
  12. <view class="w-picker-hd" @touchmove.stop.prevent catchtouchmove="true">
  13. <view class="w-picker-btn" @tap="pickerCancel">取消</view>
  14. <view class="w-picker-title">{{title}}</view>
  15. <view
  16. class="w-picker-btn"
  17. :style="{ color: themeColor }"
  18. @tap="pickerConfirm"
  19. >确定</view
  20. >
  21. </view>
  22. <view
  23. class="w-picker-view"
  24. v-if="mode == 'date' || mode == 'dateTime' || mode == 'yearMonth'"
  25. >
  26. <picker-view
  27. :indicator-style="itemHeight"
  28. :value="pickVal"
  29. @change="bindChange"
  30. >
  31. <picker-view-column>
  32. <view class="item" v-for="(item, index) in data.years" :key="index"
  33. >{{ item }}年</view
  34. >
  35. </picker-view-column>
  36. <picker-view-column>
  37. <view class="item" v-for="(item, index) in data.months" :key="index"
  38. >{{ item }}月</view
  39. >
  40. </picker-view-column>
  41. <picker-view-column v-if="mode != 'yearMonth'">
  42. <view class="item" v-for="(item, index) in data.days" :key="index"
  43. >{{ item }}日</view
  44. >
  45. </picker-view-column>
  46. <picker-view-column v-if="mode == 'dateTime'">
  47. <view class="item" v-for="(item, index) in data.hours" :key="index"
  48. >{{ item }}时</view
  49. >
  50. </picker-view-column>
  51. <picker-view-column v-if="mode == 'dateTime'">
  52. <view
  53. class="item"
  54. v-for="(item, index) in data.minutes"
  55. :key="index"
  56. >{{ item }}分</view
  57. >
  58. </picker-view-column>
  59. <picker-view-column v-if="mode == 'dateTime'">
  60. <view
  61. class="item"
  62. v-for="(item, index) in data.seconds"
  63. :key="index"
  64. >{{ item }}秒</view
  65. >
  66. </picker-view-column>
  67. </picker-view>
  68. </view>
  69. <view class="w-picker-view" v-if="mode == 'range'">
  70. <picker-view
  71. :indicator-style="itemHeight"
  72. :value="pickVal"
  73. @change="bindChange"
  74. >
  75. <picker-view-column>
  76. <view
  77. class="item"
  78. v-for="(item, index) in data.fyears"
  79. :key="index"
  80. >{{ item }}</view
  81. >
  82. </picker-view-column>
  83. <picker-view-column>
  84. <view
  85. class="item"
  86. v-for="(item, index) in data.fmonths"
  87. :key="index"
  88. >{{ item }}</view
  89. >
  90. </picker-view-column>
  91. <picker-view-column>
  92. <view
  93. class="item"
  94. v-for="(item, index) in data.fdays"
  95. :key="index"
  96. >{{ item }}</view
  97. >
  98. </picker-view-column>
  99. <view>--</view>
  100. <picker-view-column>
  101. <view class="item">-</view>
  102. </picker-view-column>
  103. <picker-view-column>
  104. <view
  105. class="item"
  106. v-for="(item, index) in data.tyears"
  107. :key="index"
  108. >{{ item }}</view
  109. >
  110. </picker-view-column>
  111. <picker-view-column>
  112. <view
  113. class="item"
  114. v-for="(item, index) in data.tmonths"
  115. :key="index"
  116. >{{ item }}</view
  117. >
  118. </picker-view-column>
  119. <picker-view-column>
  120. <view
  121. class="item"
  122. v-for="(item, index) in data.tdays"
  123. :key="index"
  124. >{{ item }}</view
  125. >
  126. </picker-view-column>
  127. </picker-view>
  128. </view>
  129. <view class="w-picker-view" v-if="mode == 'time'">
  130. <picker-view
  131. :indicator-style="itemHeight"
  132. :value="pickVal"
  133. @change="bindChange"
  134. >
  135. <picker-view-column>
  136. <view class="item" v-for="(item, index) in data.hours" :key="index"
  137. >{{ item }}时</view
  138. >
  139. </picker-view-column>
  140. <picker-view-column>
  141. <view
  142. class="item"
  143. v-for="(item, index) in data.minutes"
  144. :key="index"
  145. >{{ item }}分</view
  146. >
  147. </picker-view-column>
  148. <picker-view-column>
  149. <view
  150. class="item"
  151. v-for="(item, index) in data.seconds"
  152. :key="index"
  153. >{{ item }}秒</view
  154. >
  155. </picker-view-column>
  156. </picker-view>
  157. </view>
  158. <view class="w-picker-view" v-if="mode == 'hourMinute'">
  159. <picker-view
  160. :indicator-style="itemHeight"
  161. :value="pickVal"
  162. @change="bindChange"
  163. >
  164. <picker-view-column>
  165. <view class="item" v-for="(item, index) in data.hours" :key="index"
  166. >{{ item }}时</view
  167. >
  168. </picker-view-column>
  169. <picker-view-column>
  170. <view
  171. class="item"
  172. v-for="(item, index) in data.minutes"
  173. :key="index"
  174. >{{ item }}分</view
  175. >
  176. </picker-view-column>
  177. </picker-view>
  178. </view>
  179. <view class="w-picker-view" v-if="mode == 'region'">
  180. <picker-view
  181. :indicator-style="itemHeight"
  182. :value="pickVal"
  183. @change="bindChange"
  184. >
  185. <picker-view-column>
  186. <view
  187. class="item"
  188. v-for="(item, index) in data.provinces"
  189. :key="index"
  190. >{{ item.label }}</view
  191. >
  192. </picker-view-column>
  193. <picker-view-column>
  194. <view
  195. class="item"
  196. v-for="(item, index) in data.citys"
  197. :key="index"
  198. >{{ item.label }}</view
  199. >
  200. </picker-view-column>
  201. <picker-view-column>
  202. <view
  203. class="item"
  204. v-for="(item, index) in data.areas"
  205. :key="index"
  206. >{{ item.label }}</view
  207. >
  208. </picker-view-column>
  209. </picker-view>
  210. </view>
  211. <view class="w-picker-view" v-if="mode == 'selector'">
  212. <picker-view
  213. :indicator-style="itemHeight"
  214. :value="pickVal"
  215. @change="bindChange"
  216. >
  217. <picker-view-column>
  218. <view class="item" v-for="(item, index) in data" :key="index">{{
  219. item.label
  220. }}</view>
  221. </picker-view-column>
  222. </picker-view>
  223. </view>
  224. <view class="w-picker-view" v-if="mode == 'limit'">
  225. <picker-view
  226. :indicator-style="itemHeight"
  227. :value="pickVal"
  228. @change="bindChange"
  229. >
  230. <picker-view-column>
  231. <view
  232. class="item"
  233. v-for="(item, index) in data.date"
  234. :key="index"
  235. >{{ item.label }}</view
  236. >
  237. </picker-view-column>
  238. <picker-view-column>
  239. <view class="item" v-for="(item, index) in data.hours" :key="index"
  240. >{{ item.label }}时</view
  241. >
  242. </picker-view-column>
  243. <picker-view-column>
  244. <view
  245. class="item"
  246. v-for="(item, index) in data.minutes"
  247. :key="index"
  248. >{{ item.label }}分</view
  249. >
  250. </picker-view-column>
  251. </picker-view>
  252. </view>
  253. </view>
  254. </view>
  255. </template>
  256. <script>
  257. import { initPicker, initDays } from "./js/util.js";
  258. import { initRange, initRangeDays } from "./js/range.js";
  259. import { initBefore, initHours, initMinutes } from "./js/before.js";
  260. import provinces from './js/province.js';
  261. import citys from './js/city.js';
  262. import areas from './js/area.js';
  263. export default {
  264. data() {
  265. return {
  266. result: [],
  267. data: {},
  268. checkArr: [],
  269. checkValue: [],
  270. pickVal: [],
  271. showPicker: false,
  272. resultStr: "",
  273. itemHeight: `height: ${uni.upx2px(88)}px;`
  274. };
  275. },
  276. computed: {
  277. },
  278. props: {
  279. mode: {
  280. type: String,
  281. default() {
  282. return "date"
  283. }
  284. },
  285. themeColor: {
  286. type: String,
  287. default() {
  288. return "#f00"
  289. }
  290. },
  291. startYear: {
  292. type: String,
  293. default() {
  294. return "1970"
  295. }
  296. },
  297. endYear: {
  298. type: String,
  299. default() {
  300. return new Date().getFullYear() + ''
  301. }
  302. },
  303. defaultVal: {
  304. type: Array,
  305. default() {
  306. return [0, 0, 0, 0, 0, 0, 0]
  307. }
  308. },
  309. step: {
  310. type: [String, Number],
  311. default: 1
  312. },
  313. current: {
  314. type: Boolean,
  315. default: false
  316. },
  317. selectList: {
  318. type: Array,
  319. default() {
  320. return [];
  321. }
  322. },
  323. //以下参数仅对mode==disabledBefore有效
  324. dayStep: {
  325. type: [String, Number],
  326. default: 7
  327. },
  328. startHour: {
  329. type: [String, Number],
  330. default: 8
  331. },
  332. endHour: {
  333. type: [String, Number],
  334. default: 20
  335. },
  336. minuteStep: {
  337. type: [String, Number],
  338. default: 10
  339. },
  340. afterStep: {
  341. type: [String, Number],
  342. default: 30
  343. },
  344. title: {
  345. type: String,
  346. default() {
  347. return ''
  348. }
  349. }
  350. },
  351. watch: {
  352. mode() {
  353. this.initData();
  354. }
  355. },
  356. methods: {
  357. useCurrent() {
  358. let aToday = new Date();
  359. let tYear = aToday.getFullYear().toString();
  360. let tMonth = this.formatNum(aToday.getMonth() + 1).toString();
  361. let tDay = this.formatNum(aToday.getDate()).toString();
  362. let tHours = this.formatNum(aToday.getHours()).toString();
  363. let tMinutes = this.formatNum(aToday.getMinutes()).toString();
  364. let tSeconds = this.formatNum(aToday.getSeconds()).toString();
  365. if (this.current) {
  366. return [tYear, tMonth, tDay, tHours, tMinutes, tSeconds];
  367. } else {
  368. return this.defaultVal;
  369. }
  370. },
  371. formatNum(num) {
  372. return num < 10 ? '0' + num : num + '';
  373. },
  374. maskTap() {
  375. this.showPicker = false;
  376. },
  377. show() {
  378. this.showPicker = true;
  379. },
  380. hide() {
  381. this.showPicker = false;
  382. },
  383. pickerCancel() {
  384. this.$emit("cancel", {
  385. checkArr: this.checkArr,
  386. defaultVal: this.pickVal
  387. });
  388. this.showPicker = false;
  389. },
  390. pickerConfirm(e) {
  391. if (this.mode == "range") {
  392. let checkArr = this.checkArr;
  393. let fDateTime = new Date(checkArr[0], checkArr[1], checkArr[2]);
  394. let tDateTime = new Date(checkArr[3], checkArr[4], checkArr[5]);
  395. if (fDateTime > tDateTime) {
  396. uni.showModal({
  397. title: "提示",
  398. content: "结束日期不能小于开始时间",
  399. confirmColor: this.themeColor
  400. });
  401. return;
  402. }
  403. this.$emit("confirm", {
  404. checkArr: this.checkArr,
  405. from: checkArr[0] + "-" + checkArr[1] + "-" + checkArr[2],
  406. to: checkArr[3] + "-" + checkArr[4] + "-" + checkArr[5],
  407. defaultVal: this.pickVal,
  408. result: this.resultStr
  409. });
  410. } else {
  411. this.$emit("confirm", {
  412. checkArr: this.checkArr,
  413. defaultVal: this.pickVal,
  414. result: this.resultStr
  415. });
  416. }
  417. this.showPicker = false;
  418. },
  419. bindChange(val) {
  420. let _this = this;
  421. let arr = val.detail.value;
  422. let year = "", month = "", day = "", hour = "", minute = "", second = "", province, city, area;
  423. let checkArr = _this.checkArr;
  424. let days = [];
  425. let mode = _this.mode;
  426. switch (mode) {
  427. case "limit":
  428. let col1, col2;
  429. col1 = _this.data.date[arr[0]];
  430. //col2=_this.data.hours[arr[1]];
  431. if (col1.flag) {
  432. _this.data = initBefore(_this.dayStep, _this.starHour, _this.endHour, _this.minuteStep, _this.afterStep);
  433. col2 = _this.data.hours[arr[1]];
  434. if (!col2.flag) {
  435. let minutes = initMinutes(_this.minuteStep);
  436. _this.data.minutes = minutes;
  437. } else {
  438. _this.data = initBefore(_this.dayStep, _this.starHour, _this.endHour, _this.minuteStep, _this.afterStep);
  439. };
  440. } else {
  441. let hours = initHours(_this.startHour, _this.endHour);
  442. let minutes = initMinutes(_this.minuteStep);
  443. _this.data.hours = hours;
  444. _this.data.minutes = minutes;
  445. }
  446. let d = _this.data.date[arr[0]];
  447. let h = _this.data.hours[arr[1]];
  448. let m = _this.data.minutes[arr[2]];
  449. _this.checkArr = [d, h, m];
  450. _this.resultStr = `${d.value + ' ' + ((h && h.value) || '') + ':' + ((m && m.value) || '') + ":" + "00"}`;
  451. break;
  452. case "range":
  453. let fyear = _this.data.fyears[arr[0]];
  454. let fmonth = _this.data.fmonths[arr[1]];
  455. let fday = _this.data.fdays[arr[2]];
  456. let tyear = _this.data.tyears[arr[4]];
  457. let tmonth = _this.data.tmonths[arr[5]];
  458. let tday = _this.data.tdays[arr[6]];
  459. if (fyear != checkArr[0]) {
  460. days = initRangeDays(fyear, fmonth);
  461. _this.data.fdays = days;
  462. };
  463. if (fmonth != checkArr[1]) {
  464. days = initRangeDays(fyear, fmonth);
  465. _this.data.fdays = days;
  466. };
  467. if (tyear != checkArr[3]) {
  468. days = initRangeDays(tyear, tmonth);
  469. _this.data.tdays = days;
  470. };
  471. if (tmonth != checkArr[4]) {
  472. days = initRangeDays(tyear, tmonth);
  473. _this.data.tdays = days;
  474. };
  475. _this.checkArr = [fyear, fmonth, fday, tyear, tmonth, tday];
  476. _this.resultStr = `${fyear + '-' + fmonth + '-' + fday + '至' + tyear + '-' + tmonth + '-' + tday}`;
  477. break;
  478. case "date":
  479. year = _this.data.years[arr[0]];
  480. month = _this.data.months[arr[1]];
  481. day = _this.data.days[arr[2]];
  482. if (year != checkArr[0]) {
  483. days = initDays(year, month);
  484. _this.data.days = days;
  485. };
  486. if (month != checkArr[1]) {
  487. days = initDays(year, month);
  488. _this.data.days = days;
  489. };
  490. _this.checkArr = [year, month, day];
  491. _this.resultStr = `${year + '-' + month + '-' + day}`;
  492. break;
  493. case "yearMonth":
  494. year = _this.data.years[arr[0]];
  495. month = _this.data.months[arr[1]];
  496. _this.checkArr = [year, month];
  497. _this.resultStr = `${year + '-' + month}`;
  498. break;
  499. case "dateTime":
  500. year = _this.data.years[arr[0]];
  501. month = _this.data.months[arr[1]];
  502. day = _this.data.days[arr[2]];
  503. hour = _this.data.hours[arr[3]];
  504. minute = _this.data.minutes[arr[4]];
  505. second = _this.data.seconds[arr[5]];
  506. if (year != checkArr[0]) {
  507. days = initDays(year, month);
  508. _this.data.days = days;
  509. };
  510. if (month != checkArr[1]) {
  511. days = initDays(year, month);
  512. _this.data.days = days;
  513. };
  514. _this.checkArr = [year, month, day, hour, minute, second];
  515. _this.resultStr = `${year + '-' + month + '-' + day + ' ' + hour + ':' + minute + ':' + second}`;
  516. break;
  517. case "time":
  518. hour = _this.data.hours[arr[0]];
  519. minute = _this.data.minutes[arr[1]];
  520. second = _this.data.seconds[arr[2]];
  521. _this.checkArr = [hour, minute, second];
  522. _this.resultStr = `${hour + ':' + minute + ':' + second}`;
  523. break;
  524. case "hourMinute":
  525. hour = _this.data.hours[arr[0]];
  526. minute = _this.data.minutes[arr[1]];
  527. _this.checkArr = [hour, minute, second];
  528. _this.resultStr = `${hour + ':' + minute}`;
  529. break;
  530. case "region":
  531. province = _this.data.provinces[arr[0]].label;
  532. city = _this.data.citys[arr[1]].label;
  533. area = _this.data.areas[arr[2]].label;
  534. if (province != checkArr[0]) {
  535. _this.data.citys = citys[arr[0]];
  536. _this.data.areas = areas[arr[0]][0];
  537. arr[1] = 0;
  538. arr[2] = 0;
  539. city = _this.data.citys[arr[1]].label;
  540. area = _this.data.areas[arr[2]].label;
  541. };
  542. if (city != checkArr[1]) {
  543. _this.data.areas = areas[arr[0]][arr[1]];
  544. arr[2] = 0;
  545. area = _this.data.areas[arr[2]].label;
  546. };
  547. _this.checkArr = [province, city, area];
  548. _this.checkValue = [_this.data.provinces[arr[0]].value, _this.data.provinces[arr[0]].value, _this.data.areas[arr[2]].value];
  549. _this.resultStr = province + city + area;
  550. break;
  551. case "selector":
  552. _this.checkArr = _this.data[arr[0]];
  553. _this.resultStr = _this.data[arr[0]].label;
  554. break;
  555. }
  556. _this.$nextTick(() => {
  557. //_this.pickVal=arr;
  558. })
  559. },
  560. initData() {
  561. let _this = this;
  562. let data = {};
  563. let mode = _this.mode;
  564. let year, month, day, hour, minute, second, province, city, area;
  565. if (mode == "region") {
  566. data = {
  567. provinces: provinces,
  568. citys: citys[_this.defaultVal[0]],
  569. areas: areas[_this.defaultVal[0]][_this.defaultVal[1]]
  570. };
  571. } else if (mode == "selector") {
  572. data = _this.selectList;
  573. } else if (mode == "limit") {
  574. data = initBefore(_this.dayStep, _this.starHour, _this.endHour, _this.minuteStep, _this.afterStep);
  575. } else if (mode == "range") {
  576. data = initRange(_this.startYear, _this.endYear, _this.useCurrent(), _this.current);
  577. } else {
  578. data = initPicker(_this.startYear, _this.endYear, _this.mode, _this.step, _this.useCurrent(), _this.current);
  579. };
  580. _this.data = data;
  581. let dVal = (data.defaultVal && _this.current) ? data.defaultVal : _this.defaultVal;
  582. switch (mode) {
  583. case "limit":
  584. let col1, col2, col3;
  585. col1 = data.date[dVal[0]];
  586. col2 = data.hours[dVal[1]];
  587. col3 = data.minutes[dVal[2]];
  588. _this.checkArr = [col1, col2, col3];
  589. _this.resultStr = `${col1.value + ' ' + col2.value + ':' + col3.value + ":" + "00"}`;
  590. break;
  591. case "range":
  592. let fYear = data.fyears[dVal[0]];
  593. let fmonth = data.fmonths[dVal[1]];
  594. let fday = data.fdays[dVal[2]];
  595. let tYear = data.tyears[dVal[4]];
  596. let tmonth = data.tmonths[dVal[5]];
  597. let tday = data.tdays[dVal[6]];
  598. _this.checkArr = [fYear, fmonth, fday, tYear, tmonth, tday];
  599. _this.resultStr = `${fYear + '-' + fmonth + '-' + fday + '至' + tYear + '-' + tmonth + '-' + tday}`;
  600. break;
  601. case "date":
  602. year = data.years[dVal[0]];
  603. month = data.months[dVal[1]];
  604. day = data.days[dVal[2]];
  605. _this.checkArr = [year, month, day];
  606. _this.resultStr = `${year + '-' + month + '-' + day}`;
  607. break;
  608. case "yearMonth":
  609. year = data.years[dVal[0]];
  610. month = data.months[dVal[1]];
  611. _this.checkArr = [year, month];
  612. _this.resultStr = `${year + '-' + month}`;
  613. break;
  614. case "dateTime":
  615. year = data.years[dVal[0]];
  616. month = data.months[dVal[1]];
  617. day = data.days[dVal[2]];
  618. hour = data.hours[dVal[3]];
  619. minute = data.minutes[dVal[4]];
  620. second = data.seconds[dVal[5]];
  621. _this.resultStr = `${year + '-' + month + '-' + day + ' ' + hour + ':' + minute + ':' + second}`;
  622. _this.checkArr = [year, month, day, hour, minute];
  623. break;
  624. case "time":
  625. hour = data.hours[dVal[0]];
  626. minute = data.minutes[dVal[1]];
  627. second = data.seconds[dVal[2]];
  628. _this.checkArr = [hour, minute, second];
  629. _this.resultStr = `${hour + ':' + minute + ':' + second}`;
  630. break;
  631. case "hourMinute":
  632. hour = data.hours[dVal[0]];
  633. minute = data.minutes[dVal[1]];
  634. _this.checkArr = [hour, minute, second];
  635. _this.resultStr = `${hour + ':' + minute}`;
  636. break;
  637. case "region":
  638. province = data.provinces[dVal[0]];
  639. city = data.citys[dVal[1]];
  640. area = data.areas[dVal[2]];
  641. _this.checkArr = [province.label, city.label, area.label];
  642. _this.checkValue = [province.value, city.value, area.value];
  643. _this.resultStr = province.label + city.label + area.label;
  644. break;
  645. case "selector":
  646. _this.checkArr = data[dVal[0]];
  647. _this.resultStr = data[dVal[0]].label;
  648. break;
  649. }
  650. _this.$nextTick(() => {
  651. if (data.defaultVal && _this.current) {
  652. _this.pickVal = data.defaultVal;
  653. } else {
  654. _this.pickVal = _this.defaultVal;
  655. }
  656. })
  657. }
  658. },
  659. mounted() {
  660. this.initData();
  661. }
  662. }
  663. </script>
  664. <style lang="scss">
  665. .w-picker {
  666. position: relative;
  667. z-index: 888;
  668. .mask {
  669. position: fixed;
  670. z-index: 1000;
  671. top: 0;
  672. right: 0;
  673. left: 0;
  674. bottom: 0;
  675. background: rgba(0, 0, 0, 0.6);
  676. visibility: hidden;
  677. opacity: 0;
  678. transition: all 0.3s ease;
  679. }
  680. .mask.show {
  681. visibility: visible;
  682. opacity: 1;
  683. }
  684. .w-picker-cnt {
  685. position: fixed;
  686. bottom: 0;
  687. left: 0;
  688. width: 100%;
  689. transition: all 0.3s ease;
  690. transform: translateY(100%);
  691. z-index: 3000;
  692. }
  693. .w-picker-cnt.show {
  694. transform: translateY(0);
  695. }
  696. .w-picker-hd {
  697. display: flex;
  698. align-items: center;
  699. padding: 0 30upx;
  700. height: 88upx;
  701. background-color: #fff;
  702. position: relative;
  703. text-align: center;
  704. font-size: 32upx;
  705. justify-content: space-between;
  706. .w-picker-btn {
  707. font-size: 30upx;
  708. }
  709. .w-picker-title{
  710. font-size: 32upx;
  711. }
  712. }
  713. .w-picker-hd:after {
  714. content: " ";
  715. position: absolute;
  716. left: 0;
  717. bottom: 0;
  718. right: 0;
  719. height: 1px;
  720. border-bottom: 1px solid #e5e5e5;
  721. color: #e5e5e5;
  722. transform-origin: 0 100%;
  723. transform: scaleY(0.5);
  724. }
  725. .item {
  726. text-align: center;
  727. width: 100%;
  728. height: 88upx;
  729. line-height: 88upx;
  730. text-overflow: ellipsis;
  731. white-space: nowrap;
  732. font-size: 30upx;
  733. }
  734. .w-picker-view {
  735. width: 100%;
  736. height: 476upx;
  737. overflow: hidden;
  738. background-color: rgba(255, 255, 255, 1);
  739. z-index: 666;
  740. }
  741. picker-view {
  742. height: 100%;
  743. }
  744. }
  745. </style>