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 プロジェクトで Baidu Map API を使用する方法

目次1. Baidu Map Open Platformにアカウントを登録してログインする2. 必要...

MySQL B-Tree インデックスの簡単な分析

Bツリーインデックス異なるストレージ エンジンでは、異なるストレージ構造を使用する場合もあります。た...

https暗号化アクセス用にnginxを設定するための詳細なチュートリアル

環境: 1 CentOS Linux リリース 7.5.1804 (コア)ファイアウォールと sel...

MYSQL 左結合の最適化 (10 秒から 20 ミリ秒)

目次【機能背景】 [生のSQL] 【独自SQL解析】 【分析手順】 [最適化されたSQL] 【最適化...

Dockerでパラメータ変数を外部から指定する方法

この記事は主にDockerでパラメータ変数を外部から指定する方法を紹介します。この記事のサンプルコー...

MySQL のデータ削除とデータ テーブル メソッドの例

MySQL でデータやテーブルを削除するのは非常に簡単ですが、削除するとすべてのデータが消えてしまう...

Celery と Docker を使用して Django で定期的なタスクを処理する方法

Django アプリケーションを構築して拡張していくと、必然的に特定のタスクをバックグラウンドで自動...

CSS コンテンツ属性を使用して、マウスホバープロンプト (ツールチップ) 効果を実現します。

なぜこのような効果を実現するのでしょうか。実は、この効果もタイトルプロンプトから派生したものですが、...

Centos6.5 で MySQL 5.7.19 をインストールして設定する方法

Centos6.5にmysql5.7.19をインストールするための詳細な手順は次のとおりです。 1....

IE で UTF8 エンコードされたページで行が理由もなく空白のままになり、UTF8 ページが表示されない問題の解決方法

理由は、すべてのファイルが utf8 でエンコードされているためです。ファイルがインクルードされると...

MySQLでカンマ区切り値の列を列に変換する方法

序文場合によっては、第 1 正規形設計パターンに従わないビジネス テーブルに遭遇することがあります。...

Vue で動的に追加されたルーティング ページの更新時に失敗する理由と解決策

目次問題の説明シナリオインターフェースリターンフロントエンドメニューの定義vuex のメソッド問題原...

Ubuntu 16.04 に Docker と nvidia-docker をインストールするための詳細なチュートリアル

目次DockerのインストールNvidia-docker のインストールDockerのインストール1...

1つの記事でNavicat for MySQLの基本を理解する

目次1. データベース操作2. データ型3. バックアップとリカバリ3. 操作4. 上級5. 知識補...

HTML の表の行と列を結合する問題の解決策の詳細な説明

私たちが構築しようとしていたウェブサイトには、長い文章だけでなく、多数の表も含まれており、表のレイア...