3.43.4 • Published 5 months ago

cms3-shop-module-ts v3.43.4

Weekly downloads
-
License
UNLICENSED
Repository
-
Last release
5 months ago

cms3-shop-module

Модуль магазина для  CMS3 Frontend (Nuxt)

Модуль cms3-shop-module предназначен для работы с товарами, с их фильтрами и категориями, а так же с корзиной и избранными. Он включает в себя хранилища (далее stores), миксины (далее mixins) и плагины (далее plugins)

Установка и запуск

# Клонируем проект
$ git@gitlab.com:involta-cms/ts-shop.git

# Установка рабочей версии ноды для проекта
$ nvm use

# Устанавливаем путь до репозитория
$ npm config set registry http://5.9.95.92:54873
$ npm login

# Либо создаём .npmrc конфиг в корне проекта, где указываем адрес приватного репозиторий и ВАШ ключ авторизации (~/.npmrc)Либо создаём .npmrc конфиг в корне проекта, где указываем адрес приватного репозиторий и ВАШ ключ авторизации (~/.npmrc)
registry=http://5.9.95.92:54873/
//5.9.95.92:54873/:_authToken="ВАШ ТОКЕН"
$ npm install cms3-shop-module-ts

# В nuxt.config.js или nuxt.config.ts добавить модуль в раздел modules
modules: {
    // ...Ваши модули
    'cms3-shop-module-ts'
}

# Наслаждаемся

Использование

Плагины

Модуль предоставляет набор плагинов, которые скрывают от вас работу с stores(хотя можно работать и напрямую). Так же выполняют чтение куков пользователя с целью идентификации корзины. Каждый плагин добавляет свою точку вхождения в прототип Vue.

  • Плагин товаров - $products
  • Плагин фильтров - $filters
  • Плагин каталога - $catalog
  • Плагин категорий - $categories
  • Плагин избранных - $favorites (Внимание! Скорее всего, избранные будут вынесены в отдельный репозиторий!)
  • Плагин заявок - $blank
  • Плагин заказов - $order
  • Плагин корзины - $cart
  • Плагин seo данных - $seo

$products

/**
 * * Плагин товаров
 */
export interface ProductsPlugin {
  /**
   * * Все товары
   */
  readonly get: Record<string, ProductsData>
  /**
   * * Получить данные о товарах по их хешу
   * @param hash - хеш
   */
  getByHash(hash: string): ProductsData
  /**
   * * Получить данные о товаре по его id и хешу
   * @param hash - хеш
   * @param id - id хешу
   */
  getById(hash: string, id: number): Product | undefined
  /**
   * * Получить товары с сервера
   */
  fetchProducts(): Promise<ProductsRecord>
  /**
   * * Получить товр по его id
   * @param id - id товара
   */
  fetchProduct(id: number): Promise<Product>
  /**
   * * Очистить кеш
   */
  clearCache(): void
  /**
   * * Заменить данные о товаре в кеше
   * @param product - товар для замены
   */
  replaceCached (product: Product): void
}

$filters

/**
 * * Плагин фильтров
 */
export interface FiltersPlugin {
  all: Record<number, Array<Filter>>
  /**
   * * Получить фильтры по id категории
   */
  getById: (categoryId: number) => Array<Filter>
  /**
   * * Получить ids фильтры по их code
   */
  getIdsByCodes: (categoryId: number, codes: Array<string>) => Array<number>
  /**
   * * Получить фильтры для запроса
   */
  getQueryFilters: (categoryId: number, filters: Array<number>) => Record<number, Array<number>>
  /**
   * * Получить фильтры для запроса
   */
  getFullQueryFilters: (categoryId: number, filters: Array<number>) => PageFilters
  /**
   * * Установить фильтр для категории
   */
  set: ({ categoryId, filters }: { categoryId: number, filters: Array<Filter> }) => void
  /**
   * * Получить список фильтров для определенной категории
   */
  fetch: (categoryId: number) => Promise<{ categoryId: number, filters: Array<Filter>}>
}

$blank

/**
 * * Плагин заявок
 */
export interface BlankPlugin {
  /**
   * * Создать заявку
   * @param offerId id торогового предложения
   */
   create: (offerId: number) => Promise<BlankCreateResponse>;

   /**
    * * Получить список заявок
    */
   list: () => Promise<Array<Blank>>;

   /**
    * * Отменить заявку
     * @param id id торогового предложения
    */
   close: (id: number) => Promise<BlankCloseResponse>;
}

$order

/**
  * * Плагин заказов
  */
export interface OrderPlugin {
   /**
    * * Получить список заказов
    * @param limit Лимит колличества вывода заказов на одну страницу
    */
  list: (limit: number) => Promise<Array<Orders>>;

   /**
    * * Получить детали заказа
     * @param orderId id заказа
    */
  detail: (orderId: number) => Promise<Array<Order>>;
}

$catalog

/**
 * * Плагин корзины
 */
export interface CatalogPlugin {
  /**
   * * Установить номер страницы
   * @param page - номер страницы
   */
  setPage(page: number): void
  /**
   * * Getter & Setter номера страницы в хранилище
   */
  page: number
  /**
   * * Установить фильтры пользователя
   * @param filters - список id фильтров
   */
  setFilters (filters: Array<number>): void
  /**
   * * Getter & Setter
   */
  filters: Array<number>
  toggleFilter (filterId: number): void
  /**
   * * Установить фильтр цены
   * @param priceFilter - фильтр цен
   */
  setPriceFilter(priceFilter: PricesFilter): void
  /**
   * * Getter & Setter фильтра цен
   */
  priceFilter: PricesFilter
  /**
   * * Установить сортировку
   * @param sorting - сортировка
   */
  setSort(sorting: Sorting): void
  /**
   * * Getter & Setter сортировки
   */
  sorting: Sorting
  /**
   * * Получить полную информацию о текущей категории
   */
  readonly category: Category | undefined
  /**
   * * Установить данные каталога
   * @param data - данные каталога
   */
  setData(data: PageData): void
  readonly requestData: CatalogData
  /**
   * * Получить список товаров
   */
  fetchAll (): Promise<ProductsData>
  /**
   * * Получить товар
   * @param productId - id товара
   */
  fetch (productId: number): Promise<Product>
  /**
   * * Получить сопутствующие товары
   * @param productId - id товара
   */
  related (productId: number): Promise<Array<Product>>
}

$categories

/**
 * * Плагин категорий
 */
export interface CategoriesPlugin {
  /**
   * * Список категорий
   */
  readonly list: Array<Category>
  /**
   * * Получить категорию по id
   */
  getById: (id: number) => Category | undefined
  /**
   * * Получить категорию по ее коду
   */
  getByCode: (code: string) => Category | undefined
  /**
   * * Получить список категорий по их кодам
   */
  getByCodes: (codes: Array<string>) => Array<Category>
  /**
   * * Присвоить категории
   */
  set: (categories: Array<Category>) => void
  /**
   * * Получить список категорий
   */
  fetch: () => Promise<Array<Category>>
}

$cart

/**
 * * Плагин корзины
 */
export interface CartPlugin {
  /**
   * * Токен корзины
   */
  token: string
  /**
   * * Список торговых предложений
   */
  readonly offers: Array<CartOffer>
  /**
   * * Список торговых предложений под заказ
   */
  readonly underOffers: Array<CartOffer>
  /**
   * * Можно ли добавлять под заказ
   */
  ignoreUnderTheOffer: boolean
  /**
   * * Итоговая цена товаров в корзине и их кол-во
   */
  readonly totalInfo: TotalInfo
  /**
   * * Изменить кол-во единиц торговых предложений
   */
  change: (offers: Array<OfferChange>, change?: boolean) => Promise<Array<CartOffer>>
  /**
   * * Получить список торговых предложений в корзине
   */
  fetch: () => Promise<Array<CartOffer>>
}

$catalog

/**
 * * Плагин корзины
 */
export interface CatalogPlugin {
  /**
   * * Установить номер страницы
   * @param page - номер страницы
   */
  setPage(page: number): void
  /**
   * * Getter & Setter номера страницы в хранилище
   */
  page: number
  /**
   * * Установить фильтры пользователя
   * @param filters - список id фильтров
   */
  setFilters (filters: Array<number>): void
  /**
   * * Getter & Setter
   */
  filters: Array<number>
  toggleFilter (filterId: number): void
  /**
   * * Установить фильтр цены
   * @param priceFilter - фильтр цен
   */
  setPriceFilter(priceFilter: PricesFilter): void
  /**
   * * Getter & Setter фильтра цен
   */
  priceFilter: PricesFilter
  /**
   * * Установить сортировку
   * @param sorting - сортировка
   */
  setSort(sorting: Sorting): void
  /**
   * * Getter & Setter сортировки
   */
  sorting: Sorting
  /**
   * * Получить полную информацию о текущей категории
   */
  readonly category: Category | undefined
  /**
   * * Установить данные каталога
   * @param data - данные каталога
   */
  setData(data: PageData): void
  readonly requestData: CatalogData
  /**
   * * Получить список товаров
   */
  fetchAll (): Promise<ProductsData>
  /**
   * * Получить товар
   * @param productId - id товара
   */
  fetch (productId: number): Promise<Product>
  /**
   * * Получить сопутствующие товары
   * @param productId - id товара
   */
  related (productId: number): Promise<Array<Product>>
}

$favorites

/**
 * * Плагин избранных
 */
export interface FavoritesPlugin {
  /**
   * * Список избранных товаров
   */
  favorites: Array<Product>
  /**
   * * Toggle для избранных товаров
   * @param productId - id товаров
   */
  toggle(productId: number): Promise<ToggleResponse>
}

$seo

/**
 * * Плагин seo данных
 */
export interface SeoPlugin {
  /**
   * * Получить seo данные с сервера
   */
  fetch(requestData: string): Promise<SeoMeta>
}

Примеры использования

// В коде
export default {
    getters: {
        // Getter списка категорий
        categories () {
            return this.$categories.list
        }
    }
}

В вёрстке
<template>
    <div>
        <p
          v-for="(category, index) in $categories.list"
          :key="category.id"
        >
          {{ category.title}}
    </div>
</template>

Mixins

Элемент каталога (товар) Каталог

// TODO написать документацию по mixins

3.40.0

6 months ago

3.41.0

6 months ago

3.42.0

6 months ago

3.41.1

6 months ago

3.43.0

5 months ago

3.42.1

5 months ago

3.42.2

5 months ago

3.37.14

6 months ago

3.37.12

6 months ago

3.37.13

6 months ago

3.33.10

7 months ago

3.39.0

6 months ago

3.39.1

6 months ago

3.33.8

7 months ago

3.33.9

7 months ago

3.43.4

5 months ago

2.13.5

1 year ago

2.13.4

1 year ago

2.13.3

1 year ago

2.13.2

1 year ago

2.13.1

1 year ago

2.14.0

1 year ago

2.11.1

1 year ago

2.13.0

1 year ago

2.12.0

1 year ago

2.11.2

1 year ago

2.10.8

1 year ago

2.10.7

1 year ago

2.10.6

1 year ago

2.10.5

1 year ago

2.10.4

1 year ago

2.10.3

1 year ago

2.10.2

1 year ago

2.8.3

1 year ago