Среда, 22 апреля 2020 г.

Создание промокодов в RageMP сервер

Урок по разработки функционала промокодов на сервере RAGE MP в GTA 5. Это первая часть урока, где показывается верстка формы добавления и просмотра промокодов.

Добрый день, сегодня будем создавать промокоды в RageMP. Должно получиться у нас такое:

 

Первым делом верстаем шаблон на vue:

 В router.js добавляем

import Promo from "./views/Promo/Promos";


Vue.use(VueRouter);

let router = new VueRouter({

  mode: "history",

  routes: [

    { path: "/promo", component: Promo },

  ],

});

export default router;

У меня есть другие страницы, поэтому выглядит так:


 

Верстаем

<template>
  <div class="promos-container" id="app">
    <div class="promos">
      <div class="promo">
        <div class="promo-element">
          <div class="promo-element-container">
            <a href="#" class="close"></a>
            <div class="promo-element-title title">Управление промокодами</div>
            <ul class="nav nav-tabs nav-justified">
              <li class="nav-item">
                <a
                  class="nav-link"
                  @click.prevent="setActive('codes')"
                  :class="{ active: isActive('codes') }"
                  href="#codes"
                >Промокоды</a>
              </li>
              <li class="nav-item">
                <a
                  class="nav-link"
                  @click.prevent="setActive('addnew')"
                  :class="{ active: isActive('addnew') }"
                  href="#addnew"
                >Добавить новый</a>
              </li>
            </ul>
            <div class="tab-content py-3" id="myTabContent">
              <div class="tab-pane fade" :class="{ 'active show': isActive('codes') }" id="codes">
                <div class="podtexter">
                  <table class="tg" width="100%">
                    <tr>
                      <th class="tg-header">Название промокода</th>
                      <th class="tg-header">Создатель промокода</th>
                    </tr>
                    <tr>
                      <td class="tg-0lax">#test</td>
                      <td class="tg-0lax">Full Name</td>
                    </tr>
                    <tr>
                      <td class="tg-0lax">#test</td>
                      <td class="tg-0lax">Full Name</td>
                    </tr>
                    <tr>
                      <td class="tg-0lax">#test</td>
                      <td class="tg-0lax">Full Name</td>
                    </tr>
                    <tr>
                      <td class="tg-0lax">#test</td>
                      <td class="tg-0lax">Full Name</td>
                    </tr>
                    <tr>
                      <td class="tg-0lax">#test</td>
                      <td class="tg-0lax">Full Name</td>
                    </tr>
                  </table>
                </div>
              </div>

              <div class="tab-pane fade" :class="{ 'active show': isActive('addnew') }" id="addnew">
                <div class="addpromocode">
                  <label for="name">Название промокода</label>
                  <input type="text" id="name" class="form-control" />
                  <br />
                  <label for="money">Деньги</label>
                  <input type="text" id="money" class="form-control" />
                  <br />
                  <label for="exp">Exp</label>
                  <input type="text" id="exp" class="form-control" />
                  <br />
                  <div class="md-form">
                    <div class="left-block w50">
                      <label for="premium">Премиум</label>
                      <input type="text" id="premium" class="form-control" />
                    </div>
                    <div class="right-block w50">
                      <label for="premium">Срок Премиум</label>
                      <input type="text" id="srokpremium" class="form-control" />
                    </div>
                  </div>
                  <br />
                  <div class="footer-button">
                    <a class="first-promo-element" href="#">Добавить</a>
                  </div>
                </div>
              </div>
            </div>
          </div>
        </div>
      </div>
    </div>
  </div>
</template>
<script>
export default {
  created() {
    document.body.classList.add("promoback");
  },
  destroyed() {
    document.body.classList.remove("promoback");
  },
  data() {
    return { activeItem: "codes" };
  },
  methods: {
    isActive(menuItem) {
      return this.activeItem === menuItem;
    },
    setActive(menuItem) {
      this.activeItem = menuItem;
    }
  }
};
</script>
<style>
.promoback {
  background-imageurl(../../assets/2.jpg);
}
</style>
<style scoped>
.first-promo-element {
  border-radius100px;
  padding15px 50px;
  positionrelative;
  margin0 auto;
  colorwhite;
  font-size14px;
  text-decorationunset;
  backgroundlinear-gradient(90deg#9e1c1b 0%#ca302e 100%);
  box-shadow0px 8px 35px rgba(0000.65);
  border-radius100px;
}

.promo-element-title {
  padding20px 0;
  font-size25px;
  text-aligncenter;
}
.promo-element-title:after {
  content"";
  width24px;
  height2px;

  backgroundradial-gradient(50% 50% at 50% 50%#d03231 0%#981919 100%);
  displayblock;

  margin15px auto;
}

.promos-container {
  positionabsolute;
  left50%;
  top50%;
  transformtranslate(-50%-50%);
  z-index1;
  opacity0.9;
}
</style>

<style lang="scss" scoped>
.promo-element {
  background#080808;
  border1px solid #000000;
  border-radius12px;
  color#fff;
  width100%;
  height100%;
  displayflex;
  flex-directioncolumn;
  justify-contentspace-between;
  positionrelative;

  &-container {
    z-index2;
    padding-top15px;
  }

  &-title {
    margin-left10px;
  }
}

.podtexter {
  font-size19px;
  margin-bottom20px;
  text-alignleft;
  padding35px;
}
.promos {
  displayflex;
  align-itemscenter;
  justify-contentspace-between;
  padding-top40px;

  .promo {
    width1000px;

    margin-right15px;

    &-last {
      margin-right0;
    }

    &-bottom {
      margin-top25px;
      height245px;
    }
  }
}

.tg {
  border-collapsecollapse;
  border-spacing0;
}
.tg td {
  padding10px 25px;
  border-stylesolid;
  border-width1px;
  overflowhidden;
  word-breaknormal;
  border-colorrgb(255255255);
}
.tg th {
  font-weightnormal;
  padding10px 5px;
  border-stylesolid;
  border-width1px;
  overflowhidden;
  word-breaknormal;
  text-aligncenter;
  border-colorrgb(255255255);
}
.tg .tg-0lax {
  text-alignleft;
  vertical-aligntop;
}
.close {
  positionabsolute;
  right22px;
  top22px;
  width32px;
  height32px;
  opacity0.3;
}
.close:hover {
  opacity1;
}
.close:before,
.close:after {
  positionabsolute;
  left15px;
  content" ";
  height33px;
  width2px;
  background-colorrgb(255255255);
}
.close:before {
  transformrotate(45deg);
}
.close:after {
  transformrotate(-45deg);
}
.tab-pane {
  displaynone;
}
.show {
  displayblock;
}
ul li {
  list-stylenone;
}
.nav {
  displayflex;
  justify-contentspace-evenly;
}
.nav-link {
  color#fff;
  text-decorationunset;
  border1px;
  border-stylesolid;
  padding15px 25px;
}
.form-control {
  displayblock;
  width40%;
  heightcalc(1.5em + 0.75rem + 2px);
  padding0.375rem 0.75rem;
  font-size1rem;
  font-weight400;
  line-height1.5;
  color#495057;
  background-color#fff;
  background-clippadding-box;
  border1px solid #ced4da;
  border-radius0.25rem;
  transitionborder-color 0.15s ease-in-outbox-shadow 0.15s ease-in-out;
}
label {
  displayinline-block;
  margin-bottom0.5rem;
}
.addpromocode {
  padding25px;
}
.md-form {
  displayflex;
  align-contentspace-between;
  padding-bottom20px;
}
.w50 {
  width50%;
}
.md-form .form-control {
  width90%;
}
.footer-button {
  margin0 auto;
  width200px;
  padding-bottom20px;
}
</style>



Краткое видео урока можете посмотреть ниже: