w-component-vue
Version: 
A simple component for vue(vue2).
284 lines (268 loc) • 7.67 kB
HTML
<html xmlns="http://www.w3.org/1999/xhtml" lang="zh-tw">
<head>
    <meta http-equiv="content-type" content="text/html; charset=UTF-8" />
    <meta
        name="viewport"
        content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no, minimal-ui"
    />
    <meta http-equiv="X-UA-Compatible" content="ie=edge" />
    <title>w-component-vue</title>
    <!-- @babel/polyfill -->
    <script
        nomodule
        src="https://cdn.jsdelivr.net/npm/@babel/polyfill/dist/polyfill.min.js"
    ></script>
    <!-- vue -->
    <script src="https://cdn.jsdelivr.net/npm/vue@2.x/dist/vue.min.js"></script>
    <!-- extractHtml已自動添加@babel/polyfill與vue -->
    <!-- vuetify -->
    <link
        href="https://cdn.jsdelivr.net/npm/vuetify@2.6.14/dist/vuetify.min.css"
        rel="stylesheet"
    />
    <script
        src="https://cdn.jsdelivr.net/npm/vuetify@2.6.14/dist/vuetify.min.js"
    ></script>
    <!-- fontawesome -->
    <link
        href="https://cdn.jsdelivr.net/npm/@fortawesome/fontawesome-free@6.4.2/css/all.min.css"
        rel="stylesheet"
    />
    <!-- mdi, 各組件使用mdi/js會於轉單頁時改為mdi icon, 故需引用mdi/css -->
    <link
        href="https://cdn.jsdelivr.net/npm/@mdi/font@7.4.47/css/materialdesignicons.min.css"
        rel="stylesheet"
    />
    <!-- google, 各組件使用mdi/js故不需引用 -->
    <link
        _href="https://fonts.googleapis.com/css?family=Roboto:100,300,400,500,700,900"
        rel="stylesheet"
    />
    <link
        _href="https://fonts.googleapis.com/css?family=Material+Icons"
        rel="stylesheet"
    />
    <!-- data -->
    <script
        src="https://cdn.jsdelivr.net/npm/w-demores@1.0.27/res/data/dataAAPL.js"
    ></script>
    <script
        src="https://cdn.jsdelivr.net/npm/w-demores@1.0.27/res/data/dataUSD2EUR.js"
    ></script>
    <script
        src="https://cdn.jsdelivr.net/npm/w-demores@1.0.27/res/data/dataTemperature.js"
    ></script>
    <script
        src="https://cdn.jsdelivr.net/npm/w-demores@1.0.27/res/data/dataHousePriceArea.js"
    ></script>
    <script
        src="https://cdn.jsdelivr.net/npm/w-demores@1.0.27/res/data/dataFlare.js"
    ></script>
    <script
        src="https://cdn.jsdelivr.net/npm/w-demores@1.0.27/res/data/dataRain.js"
    ></script>
    <script
        src="https://cdn.jsdelivr.net/npm/w-demores@1.0.27/res/data/dataRainClip.js"
    ></script>
    <script
        src="https://cdn.jsdelivr.net/npm/w-demores@1.0.27/res/data/dataCivilSoilCodeIcon.js"
    ></script>
    <!-- w-component-vue -->
    <script src="https://cdn.jsdelivr.net/npm/w-component-vue@2.4.27/dist/w-component-vue.umd.js"></script>
    <style>
  .v-application--wrap {
    /* width與max-width fix for IE11, 其外不能使用padding或margin避免失效 */
    width: 100svw;
    max-width: 100svw;
    font-family: inherit;
    background: #fff;
  }
  /* 組件所須全域樣式 */
  .item {
    /* 因item位於demolink, 提取各範例html後會刪除demolink, 故得額外補上 */
    border-left: 3px solid #ffba75;
    margin: 5px 5px 8px 0px;
    padding: 3px 3px 5px 10px;
    font-size: 0.9rem;
    display: flex;
    justify-content: flex-start;
    align-items: center;
  }
  .head1 {
    padding: 0px 0px 20px 0px;
    font-size: 2.5rem;
  }
  .bkh {
    /* 寬 */
    padding: 20px;
  }
  @media screen and (max-width: 800px) {
    /* 中 */
    .bkh {
      padding: 10px;
    }
  }
  @media screen and (max-width: 400px) {
    /* 窄 */
    .bkh {
      padding: 5px;
    }
  }
  .bk {
    /* 寬 */
    display: inline-block;
    vertical-align: top;
    padding: 0px 80px 60px 0px;
  }
  @media screen and (max-width: 1000px) {
    /* 中窄 */
    .bk {
      display: block;
      padding: 0px 0px 50px 0px;
    }
  }
  .cpitem {
    transition: all 0.3s;
    padding: 5px 15px;
    cursor: pointer;
  }
  .cpitem-white {
    background: #fff;
  }
  .cpitem-white:hover {
    background: #eee;
  }
  .cpitem-black {
    background: #333;
  }
  .cpitem-black:hover {
    background: #555;
  }
    </style>
</head>
<body
    style="font-family:'Microsoft JhengHei','Avenir','Helvetica'; padding:0px; margin:0px;"
>
    <v-app id="app" class="bkh" style="font-family:inherit;">
        <div class="head1">
            <span
                style="cursor:pointer;"
                title="open for copy link to view component"
                onclick="window.open('//yuda-lyu.github.io/w-component-vue/examples/app.html?cmp='+this.innerText,'_blank')"
            >w-button-chip</span>
        </div>
        <div class="bk">
            <div class="item">active & backgroundColorActive</div>
            <w-button-chip
                :text="WButtonChip.text"
                :icon="'mdi-check-underline-circle'"
                :active="true"
                :background-color-active="'light-blue darken-2'"
            ></w-button-chip>
        </div>
    </v-app>
    <script>
  //install
  Vue.use(window["w-component-vue"]);
  //initialize
  new Vue({
    el: "#app",
    vuetify: new Vuetify(),
    data: function() {
      return {
        WButtonChip: {
          text: "aBc數字123",
          prog: null,
          loading: false
        },
        actions: [
          {
            mode: "elemove",
            selector: 'button[type="button"]'
          }
        ]
      };
    },
    mounted: function() {
      return {};
    },
    computed: {},
    methods: {
      ckBtn: function() {
        console.log("ckBtn");
      },
      ckBtnClose: function() {
        console.log("ckBtnClose");
      },
      ckBtnItem1: function() {
        console.log("ckBtnItem1");
      },
      ckBtnItem2: function() {
        console.log("ckBtnItem2");
      },
      ckBtnProg: function() {
        console.log("ckBtnProg");
        let vo = this;
        let n = 0;
        let t = setInterval(function() {
          n += 0.5;
          vo.WButtonChip.prog = n;
          if (n >= 100) {
            vo.WButtonChip.prog = null;
            clearInterval(t);
          }
        }, 10);
      },
      ckBtnModProg: function(msg) {
        //console.log('ckBtnModProg', msg)
        //lock
        msg.setProg(0); //先設定prog為0使按鈕自動上鎖禁止高頻觸發
        try {
          // if (Math.random() < 0.5) { //隨機添加出錯
          //     throw new Error('Whoops!')
          // }
          setTimeout(function() {
            //模擬呼叫api時至少等1s才有反應能setProg, 若沒先設定prog為0按鈕不會上鎖
            let n = 0;
            let t = setInterval(function() {
              n += 0.5;
              msg.setProg(n);
              if (n >= 100) {
                //vo.WButtonChip.prog = null //當prog>=100時會由內部自動設定為null
                clearInterval(t);
              }
            }, 10);
          }, 1000);
        } catch (err) {
          //unlock
          msg.setProg(null);
        }
      },
      ckBtnLoading: function() {
        console.log("ckBtnLoading");
        let vo = this;
        vo.WButtonChip.loading = true;
        setTimeout(function() {
          vo.WButtonChip.loading = false;
        }, 2000);
      },
      ckBtnModLoading: function(msg) {
        console.log("ckBtnModLoading", msg);
        msg.setLoading(true);
        setTimeout(function() {
          msg.setLoading(false);
        }, 2000);
      },
      ckBtnPmUnlock: function(msg) {
        console.log("ckBtnPmUnlock", msg);
        setTimeout(function() {
          console.log("finish");
          msg.pm.resolve();
        }, 2000);
      }
    }
  });
    </script>
</body>
</html>