Vue が価格カレンダー効果を実現

Vue が価格カレンダー効果を実現

この記事では、価格カレンダー効果を実現するためのVueの具体的なコードを例として紹介します。具体的な内容は次のとおりです。

1. レンダリング

2. ダウンロードしてグローバルにインストールします: npm install ele-calendar

3. コンポーネントの下に、次の内容の新しいファイル calendar.vue を作成します。

<テンプレート>
  <div スタイル="width:600px">
    <ele-calendar
      :render-content="レンダリングコンテンツ"
      :data="日付定義"
      :prop="プロパティ"
      :disabledDate="無効日付"
      :effectiveTimeLimit="実効時間制限"
      :defaultValue="デフォルト値"
    >
    </ele-calendar>
  </div>
</テンプレート>

<スクリプト>
'ele-calendar' から eleCalendar をインポートします
'ele-calendar/dist/vue-calendar.css' をインポートします。
エクスポートデフォルト{
  小道具: {
    日付定義: {
      タイプ: 配列、
      デフォルト: () => {
        戻る []
      }
    },
    デフォルト価格: {
      タイプ: 文字列、
      デフォルト: () => {
        戻る ''
      }
    },
    有効時間制限:
      タイプ: 文字列、
      デフォルト: () => {
        戻る ''
      }
    },
    デフォルト値: {
      タイプ: 日付、
      デフォルト: () => {
        新しい日付を返す()
      }
    }
  },
  データ () {
    const 自己 = これ
    戻る {
      prop: 'date', // 対応する日付フィールド名 disabledDate: date => {
        戻る (
          date.valueOf() < 新しい Date().valueOf() - 1 * 24 * 60 * 60 * 1000 ||
          date.valueOf() > 新しい Date(self.effectiveTimeLimit).valueOf()
        )
      }
    }
  },
  コンポーネント:
    eleCalendar
  },
  メソッド: {
    //JSX構文 renderContent (h, parmas) {
      const 自己 = これ
      定数ループ = データ => {
        戻る (
          <div class={data.defvalue.value ? 'active' : ''}>
            <div>{data.defvalue.text}</div>
            <div>
              ¥
            <i入力
              値={
                データ.defvalue.value.content
                  ? データ.defvalue.value.content
                  : 自己デフォルト価格
              }
              on-on-blur={イベント =>
                自己.handleChange()
                  イベント、
                  データ.defvalue.value
                    ? データ.defvalue.value.date
                    : self.handleDate(data.defdate)
                )
              }
              無効={
                データ.defvalue.value
                  ? 新しい Date(data.defvalue.value.date).valueOf() <
                        新しい Date().valueOf() - 1 * 24 * 60 * 60 * 1000 ||
                      新しい Date(data.defvalue.value.date).valueOf() >
                        新しい日付(self.effectiveTimeLimit).valueOf()
                  : data.defdate.valueOf() <
                        新しい Date().valueOf() - 1 * 24 * 60 * 60 * 1000 ||
                      データ.defdate.valueOf() >
                        新しい日付(self.effectiveTimeLimit).valueOf()
              }
              キー={
                データ.defvalue.value
                  ? データ.defvalue.value.date
                  : self.handleDate(data.defdate)
              }
            />
            </div>
          </div>
        )
      }
      戻り値 <div style='min-height:60px;'>{loop(parmas)}</div>
    },
    handleChange (イベント、日付) {
      console.log(イベント、日付、'dddddd')
      const 自己 = これ
      定数インデックス = self.datedef.findIndex(item => {
        戻り値 item.date === date
      })
      if (isNaN(イベント.ターゲット.値)) {
        self.$Message.error('正しい価格を入力してください')
        イベント.ターゲット.値 = self.defaultPrice
        戻る
      }
      if (event.target.value && index === -1) {
        イベントターゲット値 === self.defaultPrice の場合 {
          戻る
        }
        自己.datedef.push({
          日付、
          コンテンツ: イベント.ターゲット.値、
          cid: ヌル
        })
        コンソールにログ出力します。
        this.$emit('aaa', self.datedef)
      } そうでない場合 (event.target.value && index !== -1) {
        イベントターゲット値 === self.defaultPrice の場合 {
          self.datedef.splice(インデックス、1)
          戻る
        }
        const selectItem = self.datedef[インデックス]
        selectItem.content = イベントターゲット値
        self.datedef.splice(インデックス、1、選択項目)
      } そうでない場合 (!event.target.value && index !== -1) {
        self.datedef.splice(インデックス、1)
      } それ以外 {
        イベント.ターゲット.値 = self.defaultPrice
      }
    },
    handleDate (日付) {
      定数年 = date.getFullYear()
      月 = date.getMonth() + 1 とします。
      月 = 月 >= 10 ? 月 : '0' + 月
      idate = date.getDate() とします。
      idate = idate >= 10 ? idate : '0' + idate
      `${year}-${month}-${idate}` を返します
    }
  }
}
</スクリプト>

<スタイル lang="scss">
.el-picker-panel-calendar.el-date-picker-calendar.el-popper {
  ボックスシャドウ: なし;
}
.el-date-table-calendar td > div > div {
  境界線: 1px実線 #aaa;
  色: #fff;
  マージン: 5px;
  & > div:最初の子 {
    背景色: #aaa;
  }
  & > div:n番目の子(2) {
    パディング: 5px;
    色: #000;
    .ivu-入力ラッパー{
      幅: 80%;
    }
  }
  &。アクティブ {
    境界線: 1px 実線 #2ab561;
    & > div:最初の子 {
      背景色: #2ab561;
    }
    & > div:n番目の子(2) {
      パディング: 5px;
      色: #000;
      .ivu-入力ラッパー{
        幅: 80%;
      }
    }
  }
}
// このセクションが解放されると、現在の日付より前のすべてのボックスがグレー表示されます // .el-date-table-calendar td.disabled > div > div {
// 境界線: 1px 実線 #aaa;
//色: #fff;
// マージン: 5px;
// & > div:最初の子 {
// 背景色: #aaa;
// }
// & > div:n番目の子(2) {
// パディング: 5px;
//色: #000;
// .ivu 入力ラッパー {
// 幅: 80%;
// }
// }
// }
.el-date-table-calendar td.available:hover {
  色: #000;
}
.el-date-table-calendar td.available.today {
  色: #000;
  フォントの太さ: 標準;
}
.el-date-table-calendar tr td.current.available:not(.disabled) {
  背景色: #fff;
}
</スタイル>

4. ページ紹介登録

<スクリプト>
 '../../components/calendar' からカレンダーをインポートします
 エクスポートデフォルト{
    コンポーネント: { カレンダー }
  }
  データ() {
    戻る {
      有効時間制限: ''、
      ルールフォーム: {
        価格: ''、
        config価格リスト: []
      }
      },
      ルール:
      }
 }
    }
</スクリプト>

5.html

ダイアログに書きました

<el-form-item label="価格設定" prop="calendarPrice">
 <カレンダー
 :datedef="ruleForm.config価格リスト"
 :default-price="ruleForm.price"
 :effectiveTimeLimit="実効時間制限"
 </カレンダー>
</el-form-item>

以上がこの記事の全内容です。皆様の勉強のお役に立てれば幸いです。また、123WORDPRESS.COM を応援していただければ幸いです。

以下もご興味があるかもしれません:
  • 価格表示付きのWeChatアプレットカスタムカレンダーエフェクト
  • jQuery カレンダーの価格、在庫など。
  • jQuery Web コンポーネントの背景カレンダーの価格、在庫設定コード

<<:  Mysqlは隣接リスト(隣接リスト)を通じてツリー構造を保存します。

>>:  Linux で SpringBoot jar プログラム デプロイメント シェル スクリプトを起動および停止する方法

推薦する

Vueは2つのルーティング許可制御メソッドを実装しています

目次方法 1: ルーティング メタ情報 (meta)方法 2: ルーティング テーブルを動的に生成す...

Prometheus を使用して、MySQL の自動増分主キーの残りの使用可能パーセンテージをカウントします。

最近、本番環境のデータベースがログデータを狂ったように書き込み、主キー値のオーバーフローを引き起こし...

Javascript の奇妙な点をご存知ですか?

私たちのベテランの先人たちは、数え切れないほどのコードを書き、数え切れないほどの落とし穴に陥ってきま...

ネットワークセグメント内の IP アドレスに対する Nginx の接続制限設定の詳細な説明

Nginx におけるいわゆる接続制限は、実際には TCP 接続、つまり 3 ウェイ ハンドシェイク後...

MySQL ステートメントコメントの紹介

MySQL は次の 3 種類のコメントをサポートしています。 1. 行末の「#」文字から。 2. 「...

Windows で削除された MySQL 8.0.17 のルート アカウントとパスワードを回復する方法

少し前にSQLの独学を終え、MySQL 8.0.17をダウンロードしました。インストールして設定した...

MySQL 5.7.27 のインストールと設定方法のグラフィックチュートリアル

MySQL 5.7.27のインストールチュートリアルは以下のように記録され、皆さんと共有されています...

JavaScriptエンジンV8の実行プロセスの詳細な説明

目次1. V8ソース2. V8サービスターゲット3. V8の初期アーキテクチャIV. V8の初期アー...

InnoDB テーブルの BLOB 列と TEXT 列のストレージ効率を最適化します。

まず、MySQL InnoDB エンジンのストレージ形式に関する重要なポイントをいくつか紹介します。...

表示しているページのスナップショットを Baidu が保存できないように設定する方法

今日、Baidu でページを検索したところ、ページが削除されていたため、当然 Baidu スナップシ...

MySQL では UTF-8 が推奨されないのはなぜですか?

最近、Rails 経由で「utf8」でエンコードされた UTF-8 文字列を MariaDB に保存...

Dockerコンテナのホスト間通信におけるダイレクトルーティングの詳細な説明

概要Docker 自体の現在のデフォルト ネットワークについては、単一ホスト上の異なる Docker...

Docker+daocloudはフロントエンドプロジェクトの自動構築とデプロイを実現します

自動プロジェクト展開は大企業やユニコーン企業でよく使用され、手動でプロジェクトを展開するよりも効率的...

プロジェクトに必須の 8 つの JavaScript コード スニペット

目次1. ファイル拡張子を取得する2. コンテンツをクリップボードにコピーする3. スリープ時間は何...

JavaScript 構造化代入の詳細な説明

目次コンセプト配列の分割値を個別に宣言して割り当てるデフォルト値の構造化解除変数値の交換関数によって...