• uniapp余额银行卡支付密码界面实现(直接复制)


    示例:

    插件地址:自定义数字/身份证/密码输入框,键盘密码框可分离使 - DCloud 插件市场

    1.下载插件并导入HBuilderX,找到文件夹,copy number-keyboard.vue一份为number-keyboard2.vue(number-keyboard.vue是键盘,password-input.vue是密码输入框)

    2.修改插件键盘和密码框样式,已写好,直接copy下面代码

    password-input.vue

    1. <script>
    2. export default {
    3. props: {
    4. //是否明文 默认密文
    5. plaintext: {
    6. type: Boolean,
    7. default: true
    8. },
    9. //键盘输入的val
    10. numLng: {
    11. type: [String, Number],
    12. default: ''
    13. },
    14. //密码框的个数
    15. psdIptNum: {
    16. type: [String, Number],
    17. default: 6
    18. }
    19. },
    20. data() {
    21. return {}
    22. },
    23. created() {},
    24. methods: {
    25. }
    26. }
    27. script>
    28. <style scoped>
    29. .psdIptBx {
    30. display: flex;
    31. justify-content: space-between;
    32. width: 100%;
    33. text-align: center;
    34. box-sizing: border-box;
    35. }
    36. .psdTtem {
    37. width: 86rpx;
    38. height: 86rpx;
    39. background: #F2F2F2;
    40. border-radius: 20rpx 20rpx 20rpx 20rpx;
    41. }
    42. .psdTtemTxt {
    43. text-align: center;
    44. line-height: 80rpx;
    45. font-size: 30rpx;
    46. }
    47. .focus_move {
    48. /* color: #E6240F; */
    49. font-size: 30rpx;
    50. line-height: 80rpx;
    51. animation: focus 0.8s infinite;
    52. }
    53. @keyframes focus {
    54. from {
    55. opacity: 1;
    56. }
    57. to {
    58. opacity: 0;
    59. }
    60. }
    61. style>

    number-keyboard.vue

    1. <script>
    2. export default {
    3. props: {
    4. //限制输入框的长度 空值不限制
    5. psdLength: {
    6. type: [Number, String],
    7. default: ''
    8. },
    9. //键盘码
    10. keyboardNum: {
    11. type: [Array, Object],
    12. default: () => {
    13. return [1, 2, 3, 4, 5, 6, 7, 8, 9]
    14. }
    15. },
    16. //特殊键盘码 .或者X 默空
    17. otherNum: {
    18. type: String,
    19. default: ''
    20. },
    21. //是否显示完成按钮
    22. confirmBtn:{
    23. type: Boolean,
    24. default: false
    25. },
    26. //是否在需要打开键盘时隐藏底部tabBar关闭键盘展示tabBar功能
    27. tabBar: {
    28. type: Boolean,
    29. default: false
    30. },
    31. value: {
    32. type: String,
    33. default: ''
    34. }
    35. },
    36. data() {
    37. return {
    38. bodMove: '',
    39. password: '', //要返回的结果
    40. iptNum: [], //输入的内容
    41. KeyboarHid: false, //键盘影藏和显示
    42. }
    43. },
    44. watch: {
    45. iptNum(newVal, oldVal) {
    46. this.$emit('input', newVal.join(''))
    47. },
    48. value(newVal, oldVal) {
    49. this.iptNum = newVal.split('')
    50. }
    51. },
    52. created() {
    53. },
    54. methods: {
    55. open() {
    56. this.KeyboarHid = true;
    57. if (this.tabBar) {
    58. uni.hideTabBar()
    59. }
    60. this.$nextTick(() => {
    61. setTimeout(() => {
    62. this.bodMove = 'moveShow'
    63. }, 30)
    64. })
    65. },
    66. close() {
    67. if (this.tabBar) {
    68. uni.showTabBar()
    69. }
    70. this.bodMove = '';
    71. this.$nextTick(() => {
    72. setTimeout(() => {
    73. this.KeyboarHid = false
    74. }, 300)
    75. })
    76. },
    77. // 密码框
    78. clickBoard(num) {
    79. if (num == '') return;
    80. let iptNum = this.iptNum.filter(item => item != '');
    81. //判断是否限制长度
    82. if (this.psdLength != '') {
    83. if (iptNum.length >= this.psdLength) {
    84. return
    85. };
    86. this.iptNum.push(num);
    87. } else {
    88. this.iptNum.push(num);
    89. }
    90. },
    91. //完成
    92. complete(){
    93. this.$emit('confirm', this.iptNum.join(''))
    94. },
    95. //重置 清空
    96. reset() {
    97. this.iptNum = [];
    98. },
    99. //删除
    100. deleteKeyboar() {
    101. this.iptNum.pop();
    102. }
    103. }
    104. }
    105. script>
    106. <style scoped>
    107. .bodMove {
    108. transition: all .3s
    109. }
    110. .bottomMove {
    111. bottom: 0;
    112. left: 0;
    113. width: 100%;
    114. transform: translateY(100%)
    115. }
    116. .moveShow {
    117. transform: translateY(0)
    118. }
    119. .KeyboarBody {
    120. position: fixed;
    121. bottom: 0;
    122. left: 0;
    123. right: 0;
    124. z-index: 99;
    125. background-color: #FFFFFF;
    126. }
    127. .KeyboarBx {
    128. display: flex;
    129. flex-wrap: wrap;
    130. text-align: center;
    131. background-color: rgba(3, 3, 3, 0.1);
    132. padding: 10rpx 6rpx 0rpx 6rpx;
    133. margin-left: -12rpx;
    134. }
    135. .keyboar {
    136. width: 20%;
    137. flex-grow: 1;
    138. padding: 3%;
    139. font-size: 40rpx;
    140. background-color: #FFFFFF;
    141. border-radius: 10rpx;
    142. margin-left: 12rpx;
    143. margin-bottom: 10rpx;
    144. }
    145. .dian {
    146. margin-top: -10rpx;
    147. }
    148. .keyboarBtn {
    149. background: linear-gradient(45deg, rgba(242, 131, 9, 1) 0%, rgba(230, 36, 15, 1) 100%);
    150. color: #fff;
    151. }
    152. .hover {
    153. background: #ebedf0;
    154. }
    155. .bot {
    156. bottom: 0;
    157. }
    158. .empty {
    159. background-color: #EEEEEE;
    160. }
    161. .dowmImgBx {
    162. display: flex;
    163. justify-content: center;
    164. align-items: center;
    165. width: 100%;
    166. position: relative;
    167. }
    168. .complete {
    169. position: absolute;
    170. right: 0rpx;
    171. bottom: 5rpx;
    172. font-size: 28rpx;
    173. padding-right: 30rpx;
    174. padding-left: 20rpx;
    175. }
    176. .dowmImg {
    177. width: 35rpx;
    178. height: 35rpx;
    179. margin-bottom: 10rpx;
    180. background: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAACT0lEQVRYR+2UPWgTYRjH/8/dpdZCpVhU/BoEB8FBEBFt7tJe7i5CbAXhrg6CQ8HBQXAQHBzq5CA4CA4OgoNgr0GQIhQTUkJqCPEDBEEQBAdBQSoVlIakXvLIofmopMnlizjkxuN9nt/v/b/v+xB6/FGP+egL9BPoJ/D/JLC8/Hp33sl9AXDOCMqRbsyH6NLzGwLR7BapuDMQCKy4jHICi5nMNinrpAk4DOC8EZQfdVKiBGemxyHNb5V6bziCaDRxSPT5bAaOCAJd0Cb8DzshUYIT4cnqit+anqZCTQH357NE+qDIhXmAjoJpxtD8D9qRqOwcT538DyscDuer+9W8hNFo8oDok2wGHxcIFzVVvt+KRAkOYDG3NmhNTR3L/ttn01eQTL7cv+6sz4NwkhmXQpp8rxmJ8s6B2NAATFmWf9aqr/sMY7HUHsEHmxkKGJcNTb7rRaKyc1rKZ4vW5KTyfbO6hnMgHo/vYmHQBjBBxFd0VblTT6IC56REjqmq6rd66xsKuMXx+ItRFn/ZYOhMfDWkKrdrNa068xQVJVPXT3xtlJgnAbdJIpEYcViyATpFoGt60H+runkVPCOwYGra2OdG8A2DyMvihYXU8NAwzQF8moDrelC+6daV4YRXcNg0DOWTl35NC7gF6XR661qu6N6JMwzMMrPgjlcw3hCzqevKR6/wlgTcokjk3cDI6KpNRGf/wt6yWDBD4+MfmoG3LPBHIiJu37F3jsH7JAgzqjr2vll4WwKtwJoeRJ2CtD0HuinieQ50S6Iv0E+g5wn8Bo+vyyFXaYw2AAAAAElFTkSuQmCC');
    181. background-repeat: no-repeat;
    182. background-position: center center;
    183. background-size: 100%;
    184. }
    185. .keyboarDel {
    186. width: 50rpx;
    187. height: 36rpx;
    188. margin-bottom: 10rpx;
    189. background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAABqUlEQVRYR+2WPUvEQBCGZze1/8DKUnsrEcVaLhvwCgULCy1sLGzFE8RKC0EsBLGwEBRuhmChlTb+hCu0vU4Ff4H3SkKCOS4fezHnNUkXQuZ58s7sbhSN+VJj5lMtUCdglYDrurNKqSMiWqpoaD+IaI6Z3woFjDErRHRJRBMVweMyz8y8mCsQwW8rBtsJjBgeSGQn8A/wbAFbOIBHpdQnEa2ltKijlHoBsJnTvsEEbOFR0SYz37mu21JK7SdAnV6v1wzutdYda4Eh4XHdDWa+Skgk4cHwzlgJlISHtQHsiMhpIAEgXDFa6yL47wx4njcJoPuXpQZgT0QOG43GtCW8fwiNMYFxsOGUucLYAXz7vv+aMhNZNfuHsKRECHcc5wvAAxFdM/OxpUTqKhgmifjLu47j3BPRfDQTWyJyYSGRvhHZJgHgQERanuf5AJaTOQNYFZEbY8wTES1k9CB3JxwmiTJzk78VB09tkyhLzz0L4qIjlig+jkechJ1AJHFGRNt/iHvgVQC7InJS+EeUaMc6gKkqJLTW7+12+zyoZS1QBTitRi1QJzD2BH4AtrHfITKVMwgAAAAASUVORK5CYII=');
    190. background-repeat: no-repeat;
    191. background-position: center center;
    192. background-size: 100%;
    193. margin-top: 11rpx;
    194. }
    195. .keyboarflex {
    196. display: flex;
    197. justify-content: center;
    198. align-items: center;
    199. }
    200. style>

    number-keyboard2.vue

    1. <script>
    2. export default {
    3. props: {
    4. //限制输入框的长度 空值不限制
    5. psdLength: {
    6. type: [Number, String],
    7. default: ''
    8. },
    9. //键盘码
    10. keyboardNum: {
    11. type: [Array, Object],
    12. default: () => {
    13. return [1, 2, 3, 4, 5, 6, 7, 8, 9]
    14. }
    15. },
    16. //特殊键盘码 .或者X 默空
    17. otherNum: {
    18. type: String,
    19. default: ''
    20. },
    21. //是否显示完成按钮
    22. confirmBtn:{
    23. type: Boolean,
    24. default: false
    25. },
    26. //是否在需要打开键盘时隐藏底部tabBar关闭键盘展示tabBar功能
    27. tabBar: {
    28. type: Boolean,
    29. default: false
    30. },
    31. value: {
    32. type: String,
    33. default: ''
    34. }
    35. },
    36. data() {
    37. return {
    38. bodMove: '',
    39. password: '', //要返回的结果
    40. iptNum: [], //输入的内容
    41. KeyboarHid: false, //键盘影藏和显示
    42. }
    43. },
    44. watch: {
    45. iptNum(newVal, oldVal) {
    46. this.$emit('input', newVal.join(''))
    47. },
    48. value(newVal, oldVal) {
    49. this.iptNum = newVal.split('')
    50. }
    51. },
    52. created() {
    53. },
    54. methods: {
    55. open() {
    56. this.KeyboarHid = true;
    57. if (this.tabBar) {
    58. uni.hideTabBar()
    59. }
    60. this.$nextTick(() => {
    61. setTimeout(() => {
    62. this.bodMove = 'moveShow'
    63. }, 30)
    64. })
    65. },
    66. close() {
    67. if (this.tabBar) {
    68. uni.showTabBar()
    69. }
    70. this.bodMove = '';
    71. this.$nextTick(() => {
    72. setTimeout(() => {
    73. this.KeyboarHid = false
    74. }, 300)
    75. })
    76. },
    77. // 密码框
    78. clickBoard(num) {
    79. if (num == '') return;
    80. let iptNum = this.iptNum.filter(item => item != '');
    81. //判断是否限制长度
    82. if (this.psdLength != '') {
    83. if (iptNum.length >= this.psdLength) {
    84. return
    85. };
    86. this.iptNum.push(num);
    87. } else {
    88. this.iptNum.push(num);
    89. }
    90. },
    91. //完成
    92. complete(){
    93. this.$emit('confirm', this.iptNum.join(''))
    94. },
    95. //重置 清空
    96. reset() {
    97. this.iptNum = [];
    98. },
    99. //删除
    100. deleteKeyboar() {
    101. this.iptNum.pop();
    102. }
    103. }
    104. }
    105. script>
    106. <style scoped>
    107. .bodMove {
    108. transition: all .3s
    109. }
    110. .bottomMove {
    111. bottom: 0;
    112. left: 0;
    113. width: 100%;
    114. transform: translateY(100%)
    115. }
    116. .moveShow {
    117. transform: translateY(0)
    118. }
    119. .KeyboarBody {
    120. background-color: #FFFFFF;
    121. }
    122. .KeyboarBx {
    123. display: flex;
    124. flex-wrap: wrap;
    125. text-align: center;
    126. background-color: rgba(3, 3, 3, 0.1);
    127. padding: 10rpx 6rpx 0rpx 6rpx;
    128. margin-left: -12rpx;
    129. }
    130. .keyboar {
    131. width: 20%;
    132. flex-grow: 1;
    133. padding: 3%;
    134. font-size: 40rpx;
    135. background-color: #FFFFFF;
    136. border-radius: 10rpx;
    137. margin-left: 12rpx;
    138. margin-bottom: 10rpx;
    139. }
    140. .dian {
    141. margin-top: -10rpx;
    142. }
    143. .keyboarBtn {
    144. background: linear-gradient(45deg, rgba(242, 131, 9, 1) 0%, rgba(230, 36, 15, 1) 100%);
    145. color: #fff;
    146. }
    147. .hover {
    148. background: #ebedf0;
    149. }
    150. .bot {
    151. bottom: 0;
    152. }
    153. .empty {
    154. background-color: #EEEEEE;
    155. }
    156. .dowmImgBx {
    157. display: flex;
    158. justify-content: center;
    159. align-items: center;
    160. width: 100%;
    161. position: relative;
    162. }
    163. .complete {
    164. position: absolute;
    165. right: 0rpx;
    166. bottom: 5rpx;
    167. font-size: 28rpx;
    168. padding-right: 30rpx;
    169. padding-left: 20rpx;
    170. }
    171. .dowmImg {
    172. width: 35rpx;
    173. height: 35rpx;
    174. margin-bottom: 10rpx;
    175. background: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAACT0lEQVRYR+2UPWgTYRjH/8/dpdZCpVhU/BoEB8FBEBFt7tJe7i5CbAXhrg6CQ8HBQXAQHBzq5CA4CA4OgoNgr0GQIhQTUkJqCPEDBEEQBAdBQSoVlIakXvLIofmopMnlizjkxuN9nt/v/b/v+xB6/FGP+egL9BPoJ/D/JLC8/Hp33sl9AXDOCMqRbsyH6NLzGwLR7BapuDMQCKy4jHICi5nMNinrpAk4DOC8EZQfdVKiBGemxyHNb5V6bziCaDRxSPT5bAaOCAJd0Cb8DzshUYIT4cnqit+anqZCTQH357NE+qDIhXmAjoJpxtD8D9qRqOwcT538DyscDuer+9W8hNFo8oDok2wGHxcIFzVVvt+KRAkOYDG3NmhNTR3L/ttn01eQTL7cv+6sz4NwkhmXQpp8rxmJ8s6B2NAATFmWf9aqr/sMY7HUHsEHmxkKGJcNTb7rRaKyc1rKZ4vW5KTyfbO6hnMgHo/vYmHQBjBBxFd0VblTT6IC56REjqmq6rd66xsKuMXx+ItRFn/ZYOhMfDWkKrdrNa068xQVJVPXT3xtlJgnAbdJIpEYcViyATpFoGt60H+runkVPCOwYGra2OdG8A2DyMvihYXU8NAwzQF8moDrelC+6daV4YRXcNg0DOWTl35NC7gF6XR661qu6N6JMwzMMrPgjlcw3hCzqevKR6/wlgTcokjk3cDI6KpNRGf/wt6yWDBD4+MfmoG3LPBHIiJu37F3jsH7JAgzqjr2vll4WwKtwJoeRJ2CtD0HuinieQ50S6Iv0E+g5wn8Bo+vyyFXaYw2AAAAAElFTkSuQmCC');
    176. background-repeat: no-repeat;
    177. background-position: center center;
    178. background-size: 100%;
    179. }
    180. .keyboarDel {
    181. width: 50rpx;
    182. height: 36rpx;
    183. margin-bottom: 10rpx;
    184. background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAABqUlEQVRYR+2WPUvEQBCGZze1/8DKUnsrEcVaLhvwCgULCy1sLGzFE8RKC0EsBLGwEBRuhmChlTb+hCu0vU4Ff4H3SkKCOS4fezHnNUkXQuZ58s7sbhSN+VJj5lMtUCdglYDrurNKqSMiWqpoaD+IaI6Z3woFjDErRHRJRBMVweMyz8y8mCsQwW8rBtsJjBgeSGQn8A/wbAFbOIBHpdQnEa2ltKijlHoBsJnTvsEEbOFR0SYz37mu21JK7SdAnV6v1wzutdYda4Eh4XHdDWa+Skgk4cHwzlgJlISHtQHsiMhpIAEgXDFa6yL47wx4njcJoPuXpQZgT0QOG43GtCW8fwiNMYFxsOGUucLYAXz7vv+aMhNZNfuHsKRECHcc5wvAAxFdM/OxpUTqKhgmifjLu47j3BPRfDQTWyJyYSGRvhHZJgHgQERanuf5AJaTOQNYFZEbY8wTES1k9CB3JxwmiTJzk78VB09tkyhLzz0L4qIjlig+jkechJ1AJHFGRNt/iHvgVQC7InJS+EeUaMc6gKkqJLTW7+12+zyoZS1QBTitRi1QJzD2BH4AtrHfITKVMwgAAAAASUVORK5CYII=');
    185. background-repeat: no-repeat;
    186. background-position: center center;
    187. background-size: 100%;
    188. margin-top: 11rpx;
    189. }
    190. .keyboarflex {
    191. display: flex;
    192. justify-content: center;
    193. align-items: center;
    194. }
    195. style>

    3.这里我用uview 2.0中的Popup弹出层写的弹窗,没用过的小伙伴,先安装uview
    Popup 弹出层 | uView 2.0 - 全面兼容 nvue 的 uni-app 生态框架 - uni-app UI 框架

    4.写一个弹出层,按钮demo

    1. <script>
    2. import numberKeyboard from '@/components/number-keyboard/number-keyboard2.vue';
    3. import passwordInput from '@/components/password-input/password-input.vue';
    4. export default {
    5. data () {
    6. return {
    7. money: '10',
    8. show: false,
    9. password: '',
    10. errMsg: '', //错误提示
    11. selectObj: {
    12. bank_logo_img: '', //银行图片路径,自己写
    13. bank_name: '' //银行名称,自己写
    14. },
    15. }
    16. },
    17. components: {
    18. numberKeyboard,
    19. passwordInput,
    20. },
    21. async onLoad(){
    22. },
    23. async onShow(){
    24. this.selectObj = {}
    25. },
    26. watch:{
    27. errMsg(newVal,oldVal){
    28. if(newVal){
    29. setTimeout(()=>{
    30. this.errMsg = ''
    31. },2000)
    32. }
    33. },
    34. },
    35. methods:{
    36. KeyboarOpen(e) {
    37. this.$refs.KeyboarHid.open();
    38. },
    39. //输入的值
    40. async onInput(val) {
    41. this.password = val;
    42. if(this.password.length == 6){
    43. // this.errMsg = '支付密码错误,请重新输入'
    44. console.log('当前输入的密码是',this.password);
    45. try{
    46. //这里写输入完正确密码后,调接口逻辑
    47. }catch(err){
    48. console.log('err',err);
    49. this.errMsg = err.msg // 错误提示可以根据接口返回的,也可以自己写 '密码错误等...'
    50. this.password = ''
    51. this.show = false
    52. }
    53. }
    54. },
    55. submitTX(){
    56. this.show = true
    57. setTimeout(()=>{
    58. this.$refs.KeyboarHid.open();
    59. },50)
    60. },
    61. close(){
    62. this.show = false
    63. this.password = ''
    64. },
    65. open(){
    66. },
    67. closeWindow(){
    68. this.show = false
    69. this.password = ''
    70. this.errMsg = ''
    71. },
    72. }
    73. }
    74. script>
    75. <style lang='scss' scoped>
    76. .withdrawal{
    77. min-height: 100vh;
    78. background-color: #f7f7f7;
    79. .foot{
    80. position: fixed;
    81. left: 0;
    82. bottom: 0;
    83. padding: 8rpx 26rpx 74rpx;
    84. box-sizing: border-box;
    85. background-color: #ffffff;
    86. .submit{
    87. width: 698rpx;
    88. height: 86rpx;
    89. line-height: 86rpx;
    90. text-align: center;
    91. background: #FF843E;
    92. border-radius: 44rpx 44rpx 44rpx 44rpx;
    93. font-weight: 500;
    94. font-size: 30rpx;
    95. color: #FFFFFF;
    96. }
    97. }
    98. }
    99. .windowBox{
    100. position: relative;
    101. background-color: #fff;
    102. border-radius: 24rpx 24rpx 0rpx 0rpx;
    103. z-index: 200000000000;
    104. // padding: 50rpx 46rpx;
    105. .closeIcon{
    106. position: absolute;
    107. left: 46rpx;
    108. top: 50rpx;
    109. width: 30rpx;
    110. height: 30rpx;
    111. }
    112. .windowtitle{
    113. font-weight: normal;
    114. font-size: 28rpx;
    115. color: #111111;
    116. text-align: center;
    117. margin-top: 42rpx
    118. }
    119. .txmoney{
    120. margin-top: 56rpx;
    121. text-align: center;
    122. font-weight: normal;
    123. font-size: 32rpx;
    124. color: #707070;
    125. }
    126. .pricesss{
    127. display: flex;
    128. align-items: center;
    129. justify-content: center;
    130. margin-bottom: 36rpx;
    131. font-weight: 400;
    132. font-size: 76rpx;
    133. color: #111111;
    134. .rmb{
    135. font-weight: normal;
    136. font-size: 46rpx;
    137. color: #111111;
    138. margin-right: 10rpx;
    139. }
    140. }
    141. .windowLine{
    142. width: 658rpx;
    143. height: 2rpx;
    144. background: #EEEEEE;
    145. margin: 0 auto;
    146. margin-bottom: 32rpx;
    147. }
    148. .windowWX{
    149. display: flex;
    150. align-items: center;
    151. justify-content: space-between;
    152. padding: 0 46rpx;
    153. box-sizing: border-box;
    154. margin-bottom: 46rpx;
    155. .xtz{
    156. font-weight: normal;
    157. font-size: 26rpx;
    158. color: #707070;
    159. }
    160. .bankNameBox{
    161. display: flex;
    162. align-items: center;
    163. .bankLogo{
    164. width: 36rpx;
    165. height: 36rpx;
    166. border-radius: 50%;
    167. margin-right: 10rpx;
    168. }
    169. .bankName{
    170. font-weight: normal;
    171. font-size: 26rpx;
    172. color: #707070;
    173. }
    174. }
    175. }
    176. }
    177. .main {
    178. padding: 0rpx 40rpx;
    179. }
    180. .ipt {
    181. border-bottom: 1rpx solid #CCCCCC;
    182. }
    183. .item {
    184. position: relative;
    185. padding: 10rpx 78rpx;
    186. margin-bottom: 60rpx;
    187. .errMsg{
    188. position: absolute;
    189. left: 50%;
    190. bottom: -40rpx;
    191. transform: translate(-50%,0);
    192. font-weight: normal;
    193. font-size: 22rpx;
    194. color: #F72323;
    195. }
    196. }
    197. .title {
    198. margin: 30rpx 0;
    199. }
    200. style>

  • 相关阅读:
    农村电力供应,这件事必须重视!
    自动驾驶中的决策规划
    毕业设计opencv 图像识别 指纹识别 - python
    5.RabbitMQ高级特性
    【趣味实践】自动化抠图工具——XMem的使用
    [蓝桥杯 2019 省 A] 填空问题 E
    spring boot 自定义 starter
    tvm交叉编译android opencl
    利用R语言进行聚类分析实战(数据+代码+可视化+详细分析)
    java计算机毕业设计ssm高校工资管理系统
  • 原文地址:https://blog.csdn.net/Rio_Gaven/article/details/139341853