Front-end практика в 2020 | Элегантная реализация full-stack проекта (1)

Vue.js

vweb_visual - простой проект управления фоном. Я написал его дома, чтобы не скучать во время эпидемии. Мой гитхаб немного пуст. Думая, что я вошел в общество, я не могу чувствовать, что у меня достаточно времени в моем студенческие дни. Так что примите решение сделать долгосрочный проект с полным стеком, а не только для собственного роста.

Технический отбор

  • Фреймворк пользовательского интерфейса: iview
  • Внешний фрейм: Vue.js + Typescript.js
  • Библиотека запросов: Axios
  • подборка стилей: sass
  • Макетная библиотека: easymock
  • Диаграмма: AntVG2
  • Иконка: иконка шрифта
  • Выбор раскладки: flex + rem layout

Установка проекта

1. Клонируйте проект локально

git clone https://github.com/wangly19/bweb_visual_vue.git

2. Установка зависит

npm install
yarn install

3. Запуск предметов

npm run serve

предисловие

Текущие данные имитируются макетом для отображения, чтобы страница не выглядела навязчивой. Таким образом, данные нерегулярны и трудно читаемы. Интерфейс также отделен и не размещен со слоем представления. Унифицировано в файле API. Соответствуйте спокойному API (я сделал только грубое в управлении устройствами) и продолжу улучшать его в nest.js.

освободить экземпляр запроса

import service from '@/api/axios.config'

// get & post 请求 => 资源统一用parmas
export function tradDevice<T>(params: T, type: string): Promise<any> {
  return service({
    url: `/device`,
    method: type,
    params
  })
}

// put & delete 需要带上数据的id
export function alterDevice<T>(id: number, params: T, type: string): Promise<any> {
  return service({
    url: `/device/${id}`,
    method: type,
    params
  })
}

Я видел много проектов больших парней, в основном слой запроса независим, на самом деле он мне нравится больше, когда запрос API неправильный, мне нужно только найти слой запроса и изменить код запроса. Нет необходимости изменять ряд кодов, таких как this.$axios(xxxx) в Wan Jun Cong, чтобы убедиться, что async/await используется на уровне представления для обработки. Структура понятна и читабельна.

Сброс стиля

В проекте представлен normalize.css v8.0.1, который является очень полезным CSS, который может удовлетворить потребности большинства проектов с некоторыми общими сбросами стилей. это очень хороший проект.

рем-адаптация

Вот личная схема адаптации rem. План не значит лучший, но им удобно пользоваться. Если вы сочтете это полезным, вы можете продолжить улучшать его в своем проекте.

resetPageSize.ts

/**
 * @author: wangly
 * 页面fontsize重置
 */
(function (window: Window): void {
  window.addEventListener('resize', function () {
    document.documentElement.style.fontSize = `${getWindowSize() / 10}px` // 按照设计图
  })
  document.documentElement.style.fontSize = `${getWindowSize() / 10}px` // 按照设计图
  console.warn('当前的设计图rem: ', getWindowSize())
})(window)

/**
 * 获取字体大小
 * @return 获取当前页面的宽度
 */
function getWindowSize (): number {
  const __width: number = document.documentElement.clientWidth
  return __width > 1920 ? 1920 : __width
}

main.ts

// 引入rem根字体大小
import '@/tools/resetPageSize'

метод преобразования scss

@function rem($px){
  $remSize: $px / 192px;
  @return $remSize * 1rem;
}

Как использовать

html{
  height: rem(192px); // => 1rem
}

flex & position и другие примеси

Когда вам необходимо многократно написать флажок Flex, расположение положения, попробуйте Sass Mixins, это поможет вам сгенерировать необходимые стили и упростить.

// flex布局
@mixin flex($justify: flex-start, $align: flex-start, $direction: row) {
  display: flex;
  justify-content: $justify;
  align-items: $align;
  flex-direction: $direction;
}

// position定位
@mixin position($position: relative, $top: initial, $right: initial, $bottom: initial, $left: initial) {
  position: $position;
  left: $left;
  right: $right;
  bottom: $bottom;
  top: $top,
}

Конечно, я тоже буду держать руку на закруглениях и зинде

// 设置层级
@mixin zIndex($zindex: 0) {
  z-index: $zindex;
}

// 圆角
@mixin radius($px: 0) {
  border-radius: $px;
}

библиотека методов ts

Продолжение будет объединено в одну главу, вытащите ее заранее. Потому что ты можешь сказать слишком много. У каждого есть что-то свое показать. Разве это не QAQ.

export function cssExpand<T>(css: T, id: string) {
  let style: HTMLStyleElement = document.createElement('style')
  style.type = "text/css"
  style.innerHTML = `@charset "UTF-8"; ${css}`
  if (id) {
    let $style: HTMLElement | null = document.getElementById(id)
    if ($style != null) $style.outerHTML = ''
    style.id = id
  }
  // 应用新样式
  document.head.appendChild(style)
}

Дизайн макета

Авторизоваться

image.png

панель приборов

Приборная панель здесь основана на AntV G2.Viser, почему бы не использовать echarts, потому что эквивалент echarts, дизайн antV больше соответствует iviw, а соответствие цветов мне нравится. Я должен сказать, что дизайн большой фабрики действительно хорош. И когда производительность G6 реконструируется TS, это означает, что корзина семейства antV с поддержкой TS не за горами.

image.png

Управление устройствами

Макет более позднего дизайна страницы формы похож на него, как единство стиля, так и ограничения макета. Форма слева и строка поиска справа. Формы могут быть прокручиваемыми или разбитыми на страницы.

image.png

управление предупреждениями

Предупреждение в реальном времени

Тот же макет, что и выше, типичный интерфейс CURD, последние на самом деле похожи. Фоновый интерфейс предназначен для отображения большого количества данных, а дисплей указывает на операцию. Беспомощный, больше творога - это нормально.

image.png
image.png

Историческое предупреждение

То же, что и выше, страницы похожи на 99%

image.png

Предупреждение об оборудовании

Прогнозируется, что устройство будет судить о достижении порога по текущей динамике. Он был очищен Row + col. Я знал, что сам напишу Grid.

image.png

карта

В основном, чтобы сделать фиксированную точку оборудования или что-то в этом роде. Прототип пока не придумал. Просто сначала нарисуйте демо. Контент, который приходит на ум, можно улучшить позже. Карта использует систему High German, а система Baidu смотрит на старую версию резервной ветки.

image.png

Кадровый менеджмент

Управление аккаунтом

Детали - мой любимый дисплей ящика. Вы не можете часто использовать диалоговые окна. Ха-ха.

image.png

Управление декларациями

image.png

Настройки системы

Это все та же форма, и, наконец, выяснил, как это сделать. Разрешения делятся в соответствии с уровнем сайта. Привет. Волосы почти ушли

image.png

Настройки администратора

image.png

Настройки темы

Наша семья только думает об этих устанавливает общий стиль темы, и иметь равномерное наименование

серый

image.png

чирок зеленый

image.png

виноградно-голубой

image.png

Гей фиолетовый парень

image.png

Уиллоу Грин СОБАКА

image.png

Личный фаворит, милая фанатка

image.png
Задумывается реализация темы. Теперь просто настройте параметры заголовка с помощью Vuex. Некоторые глобальные элементы должны быть скомпилированы. Думая о лучшем, более элегантном решении.

Эпилог

Если вам это нравится и вы считаете, что это хорошо, вы можете поставить лайк статье или дать проекту звезду. На самом деле, этот проект откладывался 40 раз. Просто рефакторинг со слезами, дома эпидемия, а гитхаб так и не открыли. Так что нет коммитов каждый день. Последующие обновления будут более тщательными. Не знаю, когда работать. Может быть, я просто стажер, ожидающий дома, пока в деревне уберут цемент.

Пуш-ин можно потерять...

адрес предварительного просмотра

Я только что получил сервер Alibaba Cloud и тем самым подключил nginx. Братья, пожалуйста, не работайте незаконно, я боюсь. jpg.....

Онлайн версия:Неизвестная система управления фоном

Github: Исходный код проекта + ежедневное обновление

Юк Адрес:Шепот Бриза

image.png