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 プログラム デプロイメント シェル スクリプトを起動および停止する方法

推薦する

CSSは半透明の境界と複数の境界のシーン分析を実現します

シナリオ 1:半透明の境界線を実現するには: CSS スタイルのデフォルトの動作により、背景色はコン...

CSS3 テキストシャドウ text-shadow プロパティの詳細な説明

テキストシャドウ text-shadow プロパティの効果: 1. 右下隅の影、左下隅の影、左上隅の...

MySQL テーブル作成外部キー エラーの解決方法

データベーステーブルA: テーブル task_desc_tab を作成します ( id INT(11...

Linux自動ログイン例の説明

インターネット上には、expect を使用して自動ログインを実現するスクリプトが多数存在しますが、明...

MySQL 8.0.13 のインストールと設定方法のグラフィックチュートリアル (Win10 の場合)

MySQL 8.0.13 のインストールと設定方法を皆さんと共有したいと思います。お役に立てれば幸...

MySQLでデータベースのインストールパスを表示する方法

mysql コマンドを使用して、mysql のインストール パスを表示できます。 # 次の 2 つの...

Apache ソースコードのインストールと仮想ホストの設定に関する詳細なチュートリアル

ソースからApacheをインストールする1. Apacheソースコードをアップロードして必要なソフト...

WeChatアプレット開発の共通機能と使用方法のまとめ

ここでは、主に小さなプログラムの開発プロセスでよく使われる、非常に実用的な機能ポイントをいくつか整理...

Dockerボリュームのファイルマッピング方法

背景ブロックチェーン ログ モジュールで作業しているときに、コンテナーが実行されている場合は、ログ ...

Linuxカーネルの浮動小数点演算のサポートに関する簡単な説明

現在、ほとんどの CPU は浮動小数点ユニット (FPU) をサポートしています。FPU は、プロセ...

Linuxターミナルでファイルを作成する2つの一般的な方法を簡単に理解する

mkdir コマンドを使用して新しいディレクトリを作成できることは誰もが知っていますが、多くの場合、...

MySQL 8.0 のインストール中に発生した 3 つの小さなエラーの概要

序文これまで当社ではMySQLの5.7シリーズを使用していましたが、バージョン8.0のリリースに合わ...

mysql ワイルドカード (sql 高度なフィルタリング)

目次まず、値の一部と一致させるために使用される特殊文字であるワイルドカードについて簡単に紹介します。...

React Router 5.1.0 はページジャンプナビゲーションを実装するために useHistory を使用します

目次1. withRouterコンポーネントを使用する2. ルートタグを使用するReactRoute...