国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

VUE 好看的登錄頁面-動態(tài)視頻背景

這篇具有很好參考價值的文章主要介紹了VUE 好看的登錄頁面-動態(tài)視頻背景。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

vue好看的界面,VUE,css,html,javascript

vue好看的界面,VUE,css,html,javascript?

?文章來源地址http://www.zghlxwxcb.cn/news/detail-742991.html

<template>
  <div class="loginLayout">
    <div class="vidbg-container"
      style="z-index: -1;inset: 0px;overflow: hidden;background-size: cover;background-repeat: no-repeat;background-position: 50% 50%;background-image: none;">
      <video id="video" muted="muted" class="video" :src="videoUrl" type="video/mp4" autoplay="autoplay"
        controls="controls" loop="-1">

      </video>
      <div class="vidbg-overlay" style="position: absolute; inset: 0px; background: rgba(0, 0, 0, 0.1);"></div>
    </div>

    <center style="width:100vw;height:100vh;">
      <div style="width:100%;position: absolute;bottom:30px;z-index:99;text-align: center;color: #fff;">

        <div>

          {{ $t("globalLang.Copyright") }}

        </div>
      </div>
      <div class="" style="width: 1024px;height:100%;">
        <div style="position: absolute;top:30px;z-index:99">
          <!-- logo -->
          <!-- <img src="../assets/logo/logo.png" style="width:100px;object-fit: contain;"> -->

        </div>
        <div class="div_center" style="height:100%;width:100%;flex-direction: row;justify-content: flex-start;">
          <div style="width:50%;display: flex;justify-content: flex-start;">
            <!-- 左邊的圖片背景 -->
            <img src="/static/loginRes/wz.png" style="width:400px;object-fit: contain;">
          </div>

          <div style="width:50%;position:relative;top:-85px;">
            <div id="main"
              style="float: right; display: flex; flex-direction: column; justify-content: center; width: 350px; background-color: rgb(255, 255, 255); border-radius: 2px; opacity: 0.9;">

              <div style="display: block; padding: 20px 30px;">
                <div style="height:10px;"></div>
                <div class="layout">
                  <div class="top">
                    <!-- <div class="header">
          <span class="title">{{ $t("globalLang.AppName") }}</span>
        </div>
        <div class="desc">{{ $t("globalLang.AppDesc") }}</div> -->
                    <div class="header">
                      <span class="title">{{ $t("globalLang.LoginTitle") }}</span>
                    </div>
                  </div>
                  <div style="height:10px;"></div>
                  <div class="login">
                    <a-form @submit="onSubmit" :form="form">
                      <a-tabs v-model="curTab" size="large" :tabBarStyle="{ textAlign: 'center' }" style="padding: 0 2px">
                        <a-tab-pane :tab="this.$t('globalLang.UserLogin')" key="AccountLogin">
                          <a-form-item>
                            <a-input autocomplete="off" size="large" :placeholder="this.$t('globalLang.UserAccount')"
                              v-decorator="[
                                'name',
                                {
                                  rules: [
                                    {
                                      required: true,
                                      message: this.$t('globalLang.PleaseEnterUserAccount'),
                                      whitespace: true,
                                    },
                                  ],
                                },
                              ]">
                              <a-icon slot="prefix" type="user" />
                            </a-input>
                          </a-form-item>
                          <a-form-item>
                            <a-input size="large" :placeholder="this.$t('globalLang.UserPassword')" autocomplete="off"
                              type="password" v-decorator="[
                                'password',
                                {
                                  rules: [
                                    {
                                      required: true,
                                      message: this.$t('globalLang.PleaseEnterUserPassword'),
                                      whitespace: true,
                                    },
                                  ],
                                },
                              ]">
                              <a-icon slot="prefix" type="lock" />
                            </a-input>
                          </a-form-item>
                        </a-tab-pane>
                        <!-- <a-tab-pane :tab="this.$t('globalLang.MobileLogin')" key="MobileLogin" :forceRender="true">
            <a-form-item>
              <a-input size="large" :placeholder="this.$t('globalLang.PhoneNumber')" autocomplete="off" v-decorator="[
                  'phoneNumber',
                  {
                    rules: [
                      {
                        required: true,
                        message: this.$t('globalLang.PleaseEnterPhoneNumber'),
                        whitespace: true,
                      },
                    ],
                  },
                ]">
                <a-icon slot="prefix" type="mobile" />
              </a-input>
            </a-form-item>
            <a-form-item>
              <a-row :gutter="8" style="margin: 0 -4px">
                <a-col :span="16">
                  <a-input size="large" autocomplete="off" v-decorator="[
                      'verificationCode',
                      {
                        rules: [
                          {
                            required: true,
                            message: this.$t(
                              'globalLang.PleaseEnterVerificationCode'
                            ),
                            whitespace: true,
                          },
                        ],
                      },
                    ]" :placeholder="this.$t('globalLang.VerificationCode')">
                    <a-icon slot="prefix" type="mail" />
                  </a-input>
                </a-col>
                <a-col :span="8" style="padding-left: 4px">
                  <a-button style="width: 100%" class="captcha-button" size="large">{{ $t("globalLang.GetVerificationCode") }}</a-button>
                </a-col>
              </a-row>
            </a-form-item>
          </a-tab-pane> -->
                      </a-tabs>
                      <a-form-item style="margin-bottom: 0px;margin-left: 5px; text-align:left;">
                        <a-checkbox v-decorator="[
                          'isSavePassword',
                          {
                            valuePropName: 'checked',
                            initialValue: false,
                          },
                        ]">{{ $t("globalLang.SavePassword") }}</a-checkbox>
                        <!-- <a style="float: right">{{ $t("globalLang.ForgetPassword") }}</a> -->
                      </a-form-item>
                      <a-form-item>
                        <a-button :loading="logging" style="width: 100%; margin-top: 16px;background-color:#4093F8;"
                          size="large" htmlType="submit" type="primary">{{ $t("globalLang.Login") }}</a-button>
                      </a-form-item>
                      <!-- <div>
          {{ $t("globalLang.OtherLogin") }}
          <a-icon class="icon" type="alipay-circle" />
          <a-icon class="icon" type="taobao-circle" />
          <a-icon class="icon" type="weibo-circle" />
          <router-link style="float: right" to="/login">{{
            $t("globalLang.Register")
          }}</router-link>
        </div> -->
                      <div style="padding-top: 0px; text-align: center;">
                        <a v-for="item in Langs" :key="item.Key" @click="changeLang(item.Key)" :style="AntVue.$store.state.setting.lang == item.Key
                            ? ''
                            : 'color:#545456'
                          ">
                          {{ item.Name }}
                        </a>
                      </div>
                    </a-form>
                  </div>
                </div>
              </div>

            </div>
          </div>
        </div>
      </div>
    </center>

  </div>
</template>

<script>
import ThemeUtil from "@/theme/js/util";
import MenuUtil from "@/layouts/menu/util";
import { login } from "@/api/login";
import { getUserMenuList } from "@/api/system/sys_menu";
import { setAuthorization, removeAuthorization } from "@/utils/request";
import { setLoginUser } from "@/utils/util";
import langs from "@/lang/i18n.js";
export default {
  name: "Login",
  created() {
    //初始化樣式
    ThemeUtil.initTheme();
  },
  mounted() {
    //初始化菜單數(shù)據(jù)
    MenuUtil.clearData();
    //清除登錄信息
    removeAuthorization();
    this.loadFormData();
  },
  data() {
    var videos = ["beach.mp4", "Finland.mp4", "hohy.mp4", "hua.mp4", "leaf.mp4", "lotus.mp4", "mountains.mp4", "palm.mp4", "sky2.mp4", "turtle.mp4"];
    return {
      videoUrl: "/static/loginRes/" + videos[Math.floor(Math.random() * videos.length)],
      form: this.$form.createForm(this),
      //登錄按鈕處理中
      logging: false,
      //當前的登錄方式
      curTab: "AccountLogin",
      //登陸中,提示消息的Key
      loadingKey: "LoadingKey",
      //記住密碼的localstroeKey
      loginKey: "LoginKey",
      Langs: langs.getLangs(),
      AntVue: this,
    };
  },
  methods: {
    changeLang(lang) {
      this.$store.commit("setting/setLanguage", lang);
    },
    //加載本地我記住的密碼
    loadFormData() {
      var formData = localStorage.getItem(this.loginKey);
      if (formData != null) {
        this.form.setFieldsValue(JSON.parse(formData));
      }
    },
    //記錄表單值
    saveFormData(formData) {
      if (formData.isSavePassword == false) {
        localStorage.removeItem(this.loginKey);
      } else {
        localStorage.setItem(this.loginKey, JSON.stringify(formData));
      }
    },
    //獲取登錄用戶的菜單
    getMenuList() {
      this.logging = true;
      //數(shù)據(jù)獲取中
      var hide = this.$message.loading({
        content: this.$t("globalLang.DataLoading"),
        key: this.loadingKey,
        duration: 0,
      });
      this.NProgress.start();
      getUserMenuList()
        .then((data) => {
          if (data.code != 200) {
            this.$message.warning({
              content: this.$t("globalLang.Messages.M000009"), //接口異常,請稍后再試
              duration: 2,
            });
            return;
          }

          //初始化菜單數(shù)據(jù)
          MenuUtil.clearData();

          //驗證菜單數(shù)據(jù)是否正常
          var checkMenuData = false;
          //菜單數(shù)據(jù)
          var menuList = [];
          for (var menu of data.data) {
            //菜單的PID需要有=0的數(shù)據(jù),否則會報錯
            if (menu.parent_id == 1) {
              menu.parent_id = 0;
            }
            if (menu.parent_id == 0) {
              checkMenuData = true;
            }
            //console.log(JSON.stringify(menu));
            menuList.push({
              title_en: menu.menu_name_en,
              title: menu.menu_name,

              component_name: menu.component_name,
              component_path: menu.component_path,
              key: menu.menu_id,
              pkey: menu.parent_id,
              icon: menu.icon,
              url: menu.url,
              params: menu.url_params == null ? "" : menu.url_params,
            });
          }

          if (checkMenuData == false) {
            this.$notification["error"]({
              message: this.$t("globalLang.Messages.M000012"),
              description: this.$t("globalLang.Messages.M000013"),
            }); //后臺菜單數(shù)據(jù)格式不對

            return;
          }

          this.$message.success({
            content: this.$t("globalLang.Messages.M000001"), //您好,歡迎回來
            duration: 2,
          });
          //設置菜單顯示的狀態(tài)
          MenuUtil.initMenus(menuList);
          //綁定動態(tài)路由
          this.$router.initRouter(menuList);
          //默認跳轉首頁
          this.$router.push(MenuUtil.getHomeUrl());
        })
        .finally(() => {
          this.NProgress.done();
          this.logging = false;
          hide();
        });
    },
    //登錄
    onSubmit(e) {
      e.preventDefault();
      this.form.validateFields((err, values) => {
        //一般賬號登錄
        if (this.curTab == "AccountLogin") {
          if (err == null || (!err.name && !err.password)) {
            this.logging = true;
            //系統(tǒng)登錄中
            var hide = this.$message.loading({
              content: this.$t("globalLang.LoginLoading"),
              key: this.loadingKey,
              duration: 0,
            });
            this.saveFormData(values);
            removeAuthorization();
            this.NProgress.start();
            login(values.name, values.password)
              .then((data) => {
                if (data.code != 200) {
                  this.$message.warning({
                    content: this.$t("globalLang.Messages.M000002"), //登錄失敗,賬號或密碼不正確
                    duration: 2,
                  });
                  return;
                }
                //當前登錄人的信息
                setLoginUser(data.data.principal);
                //設置登錄信息
                setAuthorization(data.data.token);

                //獲取登錄用戶的菜單
                this.getMenuList();
              })
              .finally(() => {
                this.NProgress.done();
                this.logging = false;
                hide();
              });
          }
        }
        //手機號登錄
        if (this.curTab == "MobileLogin") {
          if (err == null || (!err.phoneNumber && !err.verificationCode)) {
            this.logging = true;
            this.$message.loading({
              content: this.$t("globalLang.LoginLoading"),
              key: this.loadingKey,
              duration: 0,
            });
            this.saveFormData(values);
            //values.phoneNumber values.verificationCode values.isSavePassword
            //login(name, password).then(this.afterLogin)
            setTimeout(() => {
              this.logging = false;
              this.$message.error({
                content: this.$t("globalLang.Messages.M000003"),
                key: this.loadingKey,
                duration: 2,
              });
            }, 1000);
          }
        }
      });
    },
  },
};
</script>

<style lang="less" scoped>
.animation-fade {
  -webkit-animation-name: fade;
  animation-name: fade;
  -webkit-animation-duration: 0.8s;
  animation-duration: 0.8s;
  -webkit-animation-timing-function: linear;
  animation-timing-function: linear;
}

.active {
  color: #3c91fc;
  border-bottom: 2px solid #3c91fc;
}

.alert-warning {
  color: #eb6709;
  background-color: #ffffff;
  border-color: #ffffff;
}

.alert {
  padding-left: 10px;
  padding: 0px 10px;
}

.checkbox-primary input[type="radio"]:checked+input[type="hidden"]+label::before,
.checkbox-primary input[type="radio"]:checked+label::before,
.checkbox-primary input[type="checkbox"]:checked+input[type="hidden"]+label::before,
.checkbox-primary input[type="checkbox"]:checked+label::before {
  background-color: #3c91fc;
  border-color: #3c91fc;
}

.page-login .page-copyright {
  position: absolute;
  bottom: 10px;
  left: 0;
  right: 0;

}

.checkbox-custom label::after,
.checkbox-custom label::before {
  position: absolute;
  margin-left: -20px;
  width: 18px;
  height: 18px;
  display: inline-block;
  left: 0;
}

.checkbox-custom label {
  position: relative;
  display: inline-block;
  padding-left: 5px;
  vertical-align: middle;
}

.opacity {
  opacity: 0.1;
}

.div_center {
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
}

.form-control {
  border: 1px solid #cccccc;
}

body {
  margin: 0;
}

video {
  position: absolute;
  top: 0;
  left: 0;
  width: 100vw;
  height: 100vh;
  z-index: -9999;
  opacity: 1;
  object-fit: fill;
  visibility: visible;
}

.img-size {
  width: 220px;
}

.remarks_cell {
  display: flex;
  flex-direction: column;
  justify-content: center;
  align-items: center;
  cursor: pointer;
}

.app-download {
  /*width: 110px;
		    height: 110px;*/
  border: 1px solid #f5f5f6;
  cursor: pointer;
}


/deep/ .ant-tabs-nav-wrap {
  display: none;
}

.loginLayout {

  /deep/ .ant-form-item-control {
    line-height: 30px;
  }

  /deep/ .ant-tabs-bar {
    border: none;
  }

  padding-top: 5%;

  .ant-tabs-tabpane {
    padding-top: 10px;
  }

  .title {
    font-size: 17px;
    color: rgba(0, 0, 0, 0.85);
    font-family: "Myriad Pro", "Helvetica Neue", Arial, Helvetica, sans-serif;
    font-weight: 600;
    position: relative;
  }

  .top {
    text-align: left;

    .header {
      display: flex;
      align-items: flex-end;
      height: 44px;
      line-height: 44px;

      a {
        text-decoration: none;
      }
    }

    .desc {
      font-size: 14px;
      color: rgba(0, 0, 0, 0.45);
      margin-top: 12px;
      margin-bottom: 12px;
    }
  }

  .login {
    margin: 0 auto;

    @media screen and (max-width: 576px) {
      width: 95%;
    }

    @media screen and (max-width: 320px) {
      .captcha-button {
        font-size: 14px;
      }
    }

    .icon {
      font-size: 24px;
      margin-left: 16px;
      vertical-align: middle;
      cursor: pointer;
      transition: color 0.3s;
    }
  }
}</style>

到了這里,關于VUE 好看的登錄頁面-動態(tài)視頻背景的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如若轉載,請注明出處: 如若內(nèi)容造成侵權/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

  • vue3+vite+ts視頻背景酷炫登錄模板【英雄聯(lián)盟主題】

    vue3+vite+ts視頻背景酷炫登錄模板【英雄聯(lián)盟主題】

    最近我準備在自己的網(wǎng)站上開發(fā)一個博客系統(tǒng),首先要實現(xiàn)后臺登錄界面。我選擇使用Vue 3 + Vite + TypeScript框架來構建,下面是針對該主題的詳細說明: 在網(wǎng)頁中使用視頻作為背景圖已經(jīng)相當常見了,而且網(wǎng)上也有很多相關的插件可供使用。我選擇使用\\\"vue-responsive-video-backgr

    2024年02月15日
    瀏覽(20)
  • vue3中【html+css】背景設置為視頻并鋪滿整個頁面

    Tip: video標簽默認不是鋪滿的,手動設置寬高100%也不會生效,當需要video鋪滿div時,加上一個css樣式 object-fit: fill object-fit 屬性指定元素的內(nèi)容應該如何去適應指定容器的高度與寬度。 object-fit 一般用于 img 和 video 標簽,一般可以對這些元素進行保留原始比例的剪切、縮放或

    2024年02月11日
    瀏覽(25)
  • 小白系列Vite-Vue3-TypeScript:011-登錄界面搭建及動態(tài)路由配置

    小白系列Vite-Vue3-TypeScript:011-登錄界面搭建及動態(tài)路由配置

    前面幾篇文章我們介紹的都是Vite+Vue3+TypeScript項目中環(huán)境相關的配置,接下來我們開始進入系統(tǒng)搭建部分。本篇我們來介紹登錄界面搭建及動態(tài)路由配置,大家一起擼起來...... 項目登陸接口是通過mockjs前端來模擬的 模擬服務接口LoginApi 首先在src/mock文件夾下新建login.ts文件,

    2024年02月04日
    瀏覽(40)
  • vue+element實現(xiàn)非常好看的鮮花網(wǎng)站商城,頁面完整,樣式美觀

    vue+element實現(xiàn)非常好看的鮮花網(wǎng)站商城,頁面完整,樣式美觀

    本項目在線預覽:點擊訪問 對應管理后臺在線預覽:點擊訪問 對應管理后臺博客:《vue+elementui+springboot前后端分離實現(xiàn)通用商城管理后臺,左右頂布局,含歷史導航欄》 與正常vue項目一樣,安裝node js npm install 安裝項目依賴,即package.json文件的依賴 npm run dev 啟動項目 若npm

    2024年02月09日
    瀏覽(35)
  • 好看的html登錄界面,

    好看的html登錄界面,

    界面效果: 代碼:

    2023年04月09日
    瀏覽(20)
  • OA系統(tǒng)登錄界面(比較好看)
  • vue設置頁面背景及背景圖片

    vue設置頁面背景及背景圖片

    本地靜態(tài)圖片? cdn圖片 設置背景色 實戰(zhàn)-PC web登錄頁 實戰(zhàn)-小程序登錄頁

    2024年02月12日
    瀏覽(28)
  • HTML 實現(xiàn)好看的登錄注冊界面(一)
  • 一個好看美觀的登錄注冊界面的實現(xiàn)

    一個好看美觀的登錄注冊界面的實現(xiàn)

    序言:之前介紹那個博客,然后自己搞了這個界面。最近有人和我要,把代碼給大家貼出來,提供參考。 首先是這個界面哈 然后呢,有那個javascript,就是綁定的登錄注冊時寫在外部文件中的。我給大家貼上。 注意啊上面一個登錄一個注冊。 這里同樣給出后端代碼,就是我們

    2024年02月11日
    瀏覽(26)
  • uniapp好看的登錄頁面

    uniapp好看的登錄頁面

    uniapp好看的登錄頁面 本登錄方式有兩種 1.賬號和密碼登錄 2.賬號和驗證碼登錄 1.登錄頁面的代碼 2.注冊頁面

    2024年02月03日
    瀏覽(17)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包