ソースを参照

Merge branch 'v2' of https://github.com/jdf2e/nutui into v2

Frans 6 年 前
コミット
8e645fefe5

+ 23 - 7
src/packages/countdown/countdown.vue

@@ -85,11 +85,19 @@ const countdownTimer = {
     startTime: {
     startTime: {
       // 可以是服务器当前时间
       // 可以是服务器当前时间
       default: Date.now(),
       default: Date.now(),
-      type: [Number, String]
+      type: [Number, String],
+      validator(v) {
+        const dateStr = (new Date(v)).toString().toLowerCase();
+        return dateStr !== 'invalid date';
+      }
     },
     },
     endTime: {
     endTime: {
       default: Date.now(),
       default: Date.now(),
-      type: [Number, String]
+      type: [Number, String],
+      validator(v) {
+        const dateStr = (new Date(v)).toString().toLowerCase();
+        return dateStr !== 'invalid date';
+      }
     }
     }
   },
   },
   computed: {
   computed: {
@@ -111,24 +119,32 @@ const countdownTimer = {
   watch: {
   watch: {
     paused(v, ov) {
     paused(v, ov) {
       if(!ov) {
       if(!ov) {
-        this._curr = Date.now();
+        this._curr = this.getTimeStamp();
       }else{
       }else{
-        this.p += (Date.now() - this._curr);
+        this.p += (this.getTimeStamp() - this._curr);
       }
       }
     }
     }
   },
   },
+  methods: {
+    getTimeStamp(timeStr) {
+      if(!timeStr) return Date.now();
+      let t = timeStr;
+      t = t > 0? +t: t.toString().replace(/\-/g, '/');
+      return new Date(t).getTime();
+    }
+  },
   created() {
   created() {
     if(this.interval > 0) {
     if(this.interval > 0) {
       let _start = 0;
       let _start = 0;
       const curr = Date.now();
       const curr = Date.now();
-      const start = new Date(+this.startTime).getTime();
-      const end = new Date(+this.endTime).getTime();
+      const start = this.getTimeStamp(this.startTime);
+      const end = this.getTimeStamp(this.endTime);
       const diffTime = curr - start;
       const diffTime = curr - start;
       
       
       this.restTime = end - (start + diffTime);
       this.restTime = end - (start + diffTime);
       this.timer = setInterval(() => {
       this.timer = setInterval(() => {
         if(!this.paused) {
         if(!this.paused) {
-          let restTime = end - (new Date().getTime() - this.p + diffTime);
+          let restTime = end - (this.getTimeStamp() - this.p + diffTime);
           restTime -= 1000;
           restTime -= 1000;
           this.restTime = restTime;
           this.restTime = restTime;
           if(restTime < 0) {
           if(restTime < 0) {

+ 2 - 2
src/packages/countdown/demo.vue

@@ -48,8 +48,8 @@
 export default {
 export default {
   data() {
   data() {
     return {
     return {
-      serverTime: 1551943874069,
-      end: 1559334689373,
+      serverTime: Date.now() - 30 * 1000,
+      end: Date.now() + 2 * 60 * 60 * 1000,
       paused: false
       paused: false
     };
     };
   },
   },

+ 1 - 1
src/packages/scroller/horizontal-scroll.vue

@@ -89,7 +89,7 @@ export default {
         },
         },
 	
 	
 	    touchStart(event) {
 	    touchStart(event) {
-            event.preventDefault();
+            // event.preventDefault();
 
 
             let changedTouches = event.changedTouches[0];
             let changedTouches = event.changedTouches[0];
             this.touchParams.startX = changedTouches.pageX;
             this.touchParams.startX = changedTouches.pageX;

+ 3 - 2
src/packages/scroller/vertical-scroll.vue

@@ -158,7 +158,7 @@ export default {
         },
         },
 	
 	
 	    touchStart(event) {
 	    touchStart(event) {
-            event.preventDefault();
+            // event.preventDefault();
 
 
             let changedTouches = event.changedTouches[0];
             let changedTouches = event.changedTouches[0];
             this.touchParams.startY = changedTouches.pageY;
             this.touchParams.startY = changedTouches.pageY;
@@ -167,6 +167,7 @@ export default {
         },
         },
 
 
         touchMove(event) {
         touchMove(event) {
+            event.preventDefault();
 
 
             let changedTouches = event.changedTouches[0];
             let changedTouches = event.changedTouches[0];
             this.touchParams.lastY = changedTouches.pageY;
             this.touchParams.lastY = changedTouches.pageY;
@@ -179,7 +180,7 @@ export default {
         },
         },
 
 
         touchEnd(event) {
         touchEnd(event) {
-            event.preventDefault();
+            // event.preventDefault();
 
 
             let changedTouches = event.changedTouches[0];
             let changedTouches = event.changedTouches[0];
             this.touchParams.lastY = changedTouches.pageY;
             this.touchParams.lastY = changedTouches.pageY;

+ 3 - 3
src/packages/stepper/demo.vue

@@ -4,7 +4,7 @@
     <div>
     <div>
       <nut-cell>
       <nut-cell>
         <span slot="title">
         <span slot="title">
-          <nut-stepper @focus="focus" :blur="blur" :value.sync="val1" :max="12"></nut-stepper>
+          <nut-stepper @focus="focus" :blur="blur" :value.sync="val1" :max="12" :step="0.1" :decimalPlaces="1" @add="add"></nut-stepper>
         </span>
         </span>
         <span slot="desc">
         <span slot="desc">
           value: {{val1}} <button @click="reduce" class="demo-btn">-</button> <button @click="add" class="demo-btn">+</button> 
           value: {{val1}} <button @click="reduce" class="demo-btn">-</button> <button @click="add" class="demo-btn">+</button> 
@@ -59,7 +59,7 @@
 export default {
 export default {
   data() {
   data() {
     return {
     return {
-      val1: 0,
+      val1: 1,
       val2: 12,
       val2: 12,
       val3: 5,
       val3: 5,
       val4: 0,
       val4: 0,
@@ -76,7 +76,7 @@ export default {
     },
     },
     add(v) {
     add(v) {
       console.log(v)
       console.log(v)
-      this.val1 = Number(this.val1) + 1;
+      // this.val1 = Number(this.val1) + 1;
     },
     },
     reduce() {
     reduce() {
       this.val1 = Math.max(Number(this.val1) - 1, 0);
       this.val1 = Math.max(Number(this.val1) - 1, 0);

+ 1 - 0
src/packages/stepper/doc.md

@@ -65,6 +65,7 @@
 | readonly | 是否只读 | Boolean | false
 | readonly | 是否只读 | Boolean | false
 | transition | 是否需要过渡效果 | Boolean | true
 | transition | 是否需要过渡效果 | Boolean | true
 | simple | 是否显示简单版 | Boolean | true
 | simple | 是否显示简单版 | Boolean | true
+| decimalPlaces | 设置保留的小数位 | Number | 0
 
 
 ## Event
 ## Event
 
 

+ 21 - 10
src/packages/stepper/stepper.vue

@@ -80,7 +80,11 @@ export default {
         value: {
         value: {
             type: [String, Number],
             type: [String, Number],
             required: true
             required: true
-        }
+        },
+        decimalPlaces: {
+            type: Number,
+            default: 0
+        } 
     },
     },
     data() {
     data() {
         return {
         return {
@@ -105,11 +109,14 @@ export default {
         }
         }
     },
     },
     watch: {
     watch: {
-        value(v, ov) {
-            if(v > this.max) v = this.max;
-            if(v < this.minNum) v = this.minNum;
-            this.num = v;
-            this.$emit('change', this.num);
+        value: {
+            handler(v, ov) {
+                if(v > this.max) v = this.max;
+                if(v < this.minNum) v = this.minNum;
+                this.num = v > 0? this.fixedDecimalPlaces(v): v;
+                this.$emit('change', this.num);
+            },
+            immediate: true
         }
         }
     },
     },
     computed: {
     computed: {
@@ -161,12 +168,16 @@ export default {
             this.$emit('update:value', this.num);
             this.$emit('update:value', this.num);
             this.$emit('change', this.num);
             this.$emit('change', this.num);
         },
         },
+        fixedDecimalPlaces(v) {
+            return Number(v).toFixed(this.decimalPlaces);
+            // .replace(/(\d+\.[^0]*)0+$/, '$1').replace(/\.$/, '')
+        },
         add() {
         add() {
             this.num = Number(this.num);
             this.num = Number(this.num);
             if(this.num <= this.max - this.step && this.max > this.minNum) {
             if(this.num <= this.max - this.step && this.max > this.minNum) {
-                let [n1, n2] = this.num.toString().split('.');
+                let [n1, n2] = this.fixedDecimalPlaces(this.num + Number(this.step)).split('.');
                 let fixedLen = n2? n2.length: 0;
                 let fixedLen = n2? n2.length: 0;
-                this.num = parseFloat((Number(n1) + Number(this.step)) + (n2? '.'+n2: '')).toFixed(fixedLen);
+                this.num = parseFloat(n1 + (n2? '.'+n2: '')).toFixed(fixedLen);
                 if(this.transition) {
                 if(this.transition) {
                     this.showNum = false;
                     this.showNum = false;
                     this.showAddAnim = true;
                     this.showAddAnim = true;
@@ -192,9 +203,9 @@ export default {
         },
         },
         reduce(){
         reduce(){
             if(this.num - this.step >= this.minNum) {
             if(this.num - this.step >= this.minNum) {
-                let [n1, n2] = this.num.toString().split('.');
+                let [n1, n2] = this.fixedDecimalPlaces(this.num - Number(this.step)).split('.');
                 let fixedLen = n2? n2.length: 0;
                 let fixedLen = n2? n2.length: 0;
-                this.num = parseFloat((Number(n1) - this.step) + (n2? '.'+n2: '')).toFixed(fixedLen);
+                this.num = parseFloat(n1 + (n2? '.'+n2: '')).toFixed(fixedLen);
                 if(this.transition) {
                 if(this.transition) {
                     this.showNum = false;
                     this.showNum = false;
                     this.showAddAnim = false;
                     this.showAddAnim = false;