1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/cshaptx4869-sku-table

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
Внести вклад в разработку кода
Синхронизировать код
Отмена
Подсказка: Поскольку Git не поддерживает пустые директории, создание директории приведёт к созданию пустого файла .keep.
Loading...
README.md

SkuTable компонент

На основе Layui — SkuTable компонент. Согласно конфигурации динамически генерируется sku таблица.

Версия v1

Соответствующая ветка v1. Данные таблицы проще. Для обработки данных в бэкенде см.: V1 версия PHP обработка пример кода.

Основные функции

— Правила/спецификации значений можно добавлять и удалять. — Строки спецификаций можно перетаскивать для сортировки. — Можно массово присваивать значения таблице SKU. — В таблицу SKU можно загружать изображения. — Если свойства атрибутов совпадают, можно включить объединение строк.

Демонстрация

Онлайн-демонстрация:

JQ22

GitHub (приоритет обновления!)

Примечание: поскольку в примере вызываются локальные данные JSON, необходимо просматривать их в среде сервера. Прямой просмотр локального файла вызовет проблемы с междоменными запросами!

Единая спецификация

https://s3.bmp.ovh/imgs/2022/07/02/31a5953ee78dd406.png

Несколько спецификаций

https://s3.bmp.ovh/imgs/2022/07/02/931ac4327510d58f.png

SQL-ссылка

Таблица товаров

CREATE TABLE `product` (
    `id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
    `name` VARCHAR(255) NOT NULL COMMENT '商品标题' COLLATE 'utf8mb4_unicode_ci',
    `cover` VARCHAR(100) NULL DEFAULT '' COMMENT '封面图' COLLATE 'utf8mb4_unicode_ci',
    `category_id` INT(11) UNSIGNED NOT NULL COMMENT '分类id',
    `sketch` VARCHAR(200) NULL DEFAULT '' COMMENT '简述' COLLATE 'utf8mb4_unicode_ci',
    `intro` TEXT NOT NULL COMMENT '商品描述' COLLATE 'utf8mb4_unicode_ci',
    `keywords` VARCHAR(200) NULL DEFAULT '' COMMENT '商品关键字' COLLATE 'utf8mb4_unicode_ci',
    `tags` VARCHAR(200) NULL DEFAULT '' COMMENT '标签' COLLATE 'utf8mb4_unicode_ci',
    `sales` INT(11) NOT NULL DEFAULT '0' COMMENT '虚拟购买量',
    `real_sales` INT(10) NOT NULL DEFAULT '0' COMMENT '实际销量',
    `total_sales` INT(11) NULL DEFAULT '0' COMMENT '总销量',
    `price` DECIMAL(8,2) NOT NULL COMMENT '商品价格',
    `market_price` DECIMAL(8,2) NULL DEFAULT '0.00' COMMENT '市场价格',
    `cost_price` DECIMAL(19,2) NULL DEFAULT '0.00' COMMENT '成本价',
    `stock` INT(11) NOT NULL DEFAULT '0' COMMENT '库存量',
    `warning_stock` INT(11) NOT NULL DEFAULT '0' COMMENT '库存警告',
    `covers` TEXT NOT NULL COMMENT '幻灯片' COLLATE 'utf8mb4_unicode_ci',
    `is_attribute` ENUM('0','1') NULL DEFAULT '0' COMMENT '启用商品规格' COLLATE 'utf8mb4_unicode_ci',
    `min_buy` INT(11) NOT NULL DEFAULT '1' COMMENT '最少买几件',
    `max_buy` INT(11) NOT NULL DEFAULT '0' COMMENT '限购 0 不限购',
    `view` INT(10) UNSIGNED NOT NULL DEFAULT '0' COMMENT '商品点击数量',
    `star` INT(10) UNSIGNED NOT NULL DEFAULT '5' COMMENT '好评星级',
    `collect_num` INT(10) UNSIGNED NOT NULL DEFAULT '0' COMMENT '收藏数量',
    `comment_num` INT(10) UNSIGNED NOT NULL DEFAULT '0' COMMENT '评价数',
    `transmit_num` INT(11) NOT NULL DEFAULT '0' COMMENT '分享数',
    `is_stock_visible` INT(1) NOT NULL DEFAULT '1' COMMENT '库存显示 0不显示1显示',
    `is_hot` INT(1) NOT NULL DEFAULT '0' COMMENT '是否热销商品',
    `is_recommend` INT(1) NOT NULL DEFAULT '0' COMMENT '是否推荐',
    `is_new` INT(1) NOT NULL DEFAULT '0' COMMENT '是否新品',
    `sale_date` INT(11) NULL DEFAULT '0' COMMENT '上下架时间',
    `unit` VARCHAR(20) NULL DEFAULT '' COMMENT '商品单位' COLLATE 'utf8mb4_unicode_ci',
    `video_url` VARCHAR(100) NULL DEFAULT '' COMMENT '展示视频' COLLATE 'utf8mb4_unicode_ci',
    `supplier_id` INT(11) NULL DEFAULT '0' COMMENT '供货商id',
    `is_open_commission` TINYINT(4) NULL DEFAULT '0' COMMENT '是否支持分销',
    `sort` INT(11) NOT NULL DEFAULT '999' COMMENT '排序',
    `status` TINYINT(4) NULL DEFAULT '1' COMMENT '商品状态 0下架,1正常,10违规(禁售)',
    `state` TINYINT(4) NOT NULL DEFAULT '0' COMMENT '审核状态 -1 审核失败 0 未审核 1 审核成功',
    `create_time` INT(10) UNSIGNED NOT NULL DEFAULT '0' COMMENT '创建时间',
    `update_time` INT(10) UNSIGNED NULL DEFAULT '0' COMMENT '更新时间',
    `delete_time` INT(11) NULL DEFAULT NULL,
    PRIMARY KEY (`id`),
    INDEX `price` (`price`),
    INDEX `cate_id` (`category_id`),
    INDEX `view` (`view`),
    INDEX `star` (`star`),
    INDEX `comment_num` (`comment_num`),
    INDEX `sort` (`sort`)
) COMMENT='商品表' COLLATE='utf8mb4_general_ci' ENGINE=InnoDB;

Спецификации товаров

CREATE TABLE `product_spec` (
    `id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
    `product_id` INT(11) NOT NULL COMMENT '商品id',
    `title` VARCHAR(125) NOT NULL DEFAULT '' COMMENT '规格名称' COLLATE 'utf8mb4_unicode_ci',
    `create_time` INT(10)
``` ### Товарная спецификация

```sql
CREATE TABLE `product_spec` (
    `id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
    `product_id` INT(11) NOT NULL COMMENT 'Идентификатор товара',
    `create_time` INT(10) UNSIGNED NULL DEFAULT '0' COMMENT 'Время создания',
    `update_time` INT(10) UNSIGNED NULL DEFAULT '0' COMMENT 'Время обновления',
    PRIMARY KEY (`id`),
    INDEX `product_id` (`product_id`)
) COMMENT='Таблица товарной спецификации' COLLATE='utf8mb4_general_ci' ENGINE=InnoDB;

Таблица значений товарной спецификации

CREATE TABLE `product_spec_value` (
    `id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
    `product_id` INT(11) NOT NULL COMMENT 'Идентификатор товара',
    `spec_id` INT(11) NOT NULL COMMENT 'Спецификация',
    `title` VARCHAR(125) NOT NULL DEFAULT '' COMMENT 'Заголовок спецификации' COLLATE 'utf8mb4_unicode_ci',
    `is_checked` TINYINT(4) NOT NULL DEFAULT '0' COMMENT 'Проверено',
    `create_time` INT(10) UNSIGNED NULL DEFAULT '0' COMMENT 'Время создания',
    `update_time` INT(10) UNSIGNED NULL DEFAULT '0' COMMENT 'Время обновления',
    PRIMARY KEY (`id`)
) COMMENT='Таблица значений товарной спецификации' COLLATE='utf8mb4_general_ci' ENGINE=InnoDB;

Товарный SKU

CREATE TABLE `product_sku` (
    `id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
    `product_id` INT(11) UNSIGNED NULL DEFAULT '0' COMMENT 'Идентификатор товара',
    `name` VARCHAR(600) NULL DEFAULT '' COMMENT 'Название SKU, например: красный-S-мужской' COLLATE 'utf8mb4_unicode_ci',
    `picture` VARCHAR(200) NULL DEFAULT '' COMMENT 'Основное изображение' COLLATE 'utf8mb4_unicode_ci',
    `price` DECIMAL(8,2) NOT NULL DEFAULT '0.00' COMMENT 'Цена',
    `market_price` DECIMAL(8,2) NOT NULL DEFAULT '0.00' COMMENT 'Рыночная цена',
    `cost_price` DECIMAL(8,2) NOT NULL DEFAULT '0.00' COMMENT 'Себестоимость',
    `wholesale_price` DECIMAL(10,2) UNSIGNED NULL DEFAULT '0.00' COMMENT 'Оптовая цена',
    `stock` INT(11) NOT NULL DEFAULT '0' COMMENT 'Количество на складе',
    `code` VARCHAR(100) NULL DEFAULT '' COMMENT 'Код товара' COLLATE 'utf8mb4_unicode_ci',
    `barcode` VARCHAR(100) NULL DEFAULT '' COMMENT 'Штрих-код товара' COLLATE 'utf8mb4_unicode_ci',
    `product_weight` DECIMAL(8,2) NULL DEFAULT '0.00' COMMENT 'Вес товара',
    `product_volume` DECIMAL(8,2) NULL DEFAULT '0.00' COMMENT 'Объём товара',
    `sort` INT(11) NULL DEFAULT '1999' COMMENT 'Сортировка',
    `data` VARCHAR(300) NULL DEFAULT '' COMMENT 'SKU-строка, например: 1-4-8' COLLATE 'utf8mb4_unicode_ci',
    `status` TINYINT(4) NULL DEFAULT '1' COMMENT 'Статус [-1: удалено; 0: запрещено; 1: разрешено]',
    `create_time` INT(10) UNSIGNED NULL DEFAULT '0' COMMENT 'Время создания',
    `update_time` INT(10) UNSIGNED NULL DEFAULT '0' COMMENT 'Время обновления',
    PRIMARY KEY (`id`),
    INDEX `product_id` (`product_id`)
) COMMENT='Товарный SKU' COLLATE='utf8mb4_general_ci' ENGINE=InnoDB; // Запрос успешно возвращён со статусом
            requestSuccessCode: 200,
            // Адрес интерфейса загрузки
            uploadUrl: './json/upload.json',
            // Конфигурация таблицы с данными по единому артикулу
            singleSkuTableConfig: {
                thead: [
                    {title: 'Цена продажи (юани)', icon: 'layui-icon-cols'},
                    {title: 'Рыночная цена (юани)', icon: 'layui-icon-cols'},
                    {title: 'Себестоимость (юани)', icon: 'layui-icon-cols'},
                    {title: 'Остаток', icon: 'layui-icon-cols'},
                    {title: 'Статус', icon: ''},
                ],
                tbody: [
                    {type: 'input', field: 'price', value: '', verify: 'required|number', reqtext: 'Цена продажи не может быть пустой'},
                    {type: 'input', field: 'market_price', value: '0', verify: 'required|number', reqtext: 'Рыночная цена не может быть пустой'},
                    {type: 'input', field: 'cost_price', value: '0', verify: 'required|number', reqtext: 'Себестоимость не может быть пустой'},
                    {type: 'input', field: 'stock', value: '0', verify: 'required|number', reqtext: 'Остаток не может быть пустым'},
                    {type: 'select', field: 'status', option: [{key: 'Вкл.', value: '1'}, {key: 'Выкл.', value: '0'}], verify: 'required', reqtext: 'Статус не может быть пустым'}
                ]
            },
            // Конфигурация таблицы данных для нескольких артикулов
            multipleSkuTableConfig: {
                thead: [
                    {title: 'Изображение', icon: ''},
                    {title: 'Цена продажи (юани)', icon: 'layui-icon-cols'},
                    {title: 'Рыночная цена (юани)', icon: 'layui-icon-cols'},
                    {title: 'Себестоимость (юани)', icon: 'layui-icon-cols'},
                    {title: 'Остаток', icon: 'layui-icon-cols'},
                    {title: 'Статус', icon: ''}
                ],
                tbody: [
                    {type: 'image', field: 'picture', value: '', verify: '', reqtext: ''},
                    {type: 'input', field: 'price', value: '', verify: 'required|number', reqtext: 'Цена продажи не может быть пустой'},
                    {type: 'input', field: 'market_price', value: '0', verify: 'required|number', reqtext: 'Рыночная цена не может быть пустой'},
                    {type: 'input', field: 'cost_price', value: '0', verify: 'required|number', reqtext: 'Себестоимость не может быть пустой'},
                    {type: 'input', field: 'stock', value: '0', verify: 'required|number', reqtext: 'Остаток не может быть пустым'},
                    {
                        type: 'select',
                        field: 'status',
                        option: [{key: 'Вкл.', value: '1'}, {key: 'Выкл.', value: '0'}],
                        verify: '',
                        reqtext: ''
                    }
                ]
            },
            // Идентификатор товара для использования со specDataUrl и skuDataUrl
            productId: '',
            // Данные о характеристиках товара, обычно получаемые из бэкенда
            specData: [
                {
                    id: "1",
                    title: "Цвет",
                    child: [
                        {id: "1", title: "Красный", checked: true},
                        {id: "2", title: "Жёлтый", checked: false},
                        {id: "3", title: "Синий", checked: false}
                    ]
                }, {
                    id: "2",
                    title: "Размер",
                    child: [
                        {id: "4", title: "S", checked: true},
                        {id: "5", title: "M", checked: true},
                        {id: "6", title: "L", checked: false},
                        {id: "7", title: "XL", checked: false}
                    ]
                }, {
                    id: "3",
                    title: "Стиль",
                    child: [
                        {id: "8", title: "Мужской стиль", checked: true},
                        {id: "9", title: "Женский стиль", checked: true}
                    ]
                }
            ],
            // URL интерфейса для получения данных о характеристиках, если он пуст или не настроен, то используются данные из specData
            // specDataUrl: './json/specData.json',
            // Данные об артикулах
            // При добавлении новых товаров это пустой объект
            // При редактировании можно получить данные из бэкенда, они автоматически заполнят таблицу артикулов, можно удалить комментарии для просмотра эффекта
            // Формат для нескольких артикулов
            // skuData: {
            //     "skus[1-4-8][picture]": "https://www.baidu.com/img/flexible/logo/pc/result.png",
            //     "skus[1-4-8][price]":

*Примечание: в ответе могут быть неточности, так как некоторые фрагменты исходного текста невозможно перевести без контекста.* 100,  
//    "skus[1-4-8][market_price]": "200",  
//    "skus[1-4-8][cost_price]": "50",  
//    "skus[1-4-8][stock]": "18",  
//    "skus[1-4-8][status]": "0",  
//    "skus[1-4-9][picture]": "",  
//    "skus[1-4-9][price]": "0",  
//    "skus[1-4-9][market_price]": "0",  
//    "skus[1-4-9][cost_price]": "0",  
//    "skus[1-4-9][stock]": "0",  
//    "skus[1-4-9][status]": "1",  
//    "skus[1-5-8][picture]": "",  
//    "skus[1-5-8][price]": "0",  
//    "skus[1-5-8][market_price]": "0",  
//    "skus[1-5-8][cost_price]": "0",  
//    "skus[1-5-8][stock]": "0",  
//    "skus[1-5-8][status]": "1",  
//    "skus[1-5-9][picture]": "",  
//    "skus[1-5-9][price]": "0",  
//    "skus[1-5-9][market_price]": "0",  
//    "skus[1-5-9][cost_price]": "0",  
//    "skus[1-5-9][stock]": "0",  
//    "skus[1-5-9][status]": "1"  
//},  
//统一规格格式  
//skuData: {  
//    'price': '80',  
//    'market_price': '100',  
//    'cost_price': '60',  
//    'stock': '999',  
//    'status': '0',  
//}  
//获取SKU数据接口地址,如果为空或者不配置则使用skuData配置  
//接口要求返回格式参考 skuData.json  
//skuDataUrl: './json/skuData.json',  
});  

form.on('submit(submit)', function (data) {  
    //获取表单数据  
    console.log(data.field);  

    if (data.field.is_attribute == 1) {  
        //获取规格数据  
        console.log(obj.getSpecData());  

        var state = Object.keys(data.field).some(function (item, index, array) {  
            return item.startsWith('skus');  
        });  
        state ? layer.alert(JSON.stringify(data.field), {title: '提交的数据'}) : layer.msg('sku表数据不能为空', {icon: 5, anim: 6});  
    } else {  
        layer.alert(JSON.stringify(data.field), {title: '提交的数据'});  
    }  

    return false;  
});  
}); **Таблица «Система спецификаций значений»**

CREATE TABLE shop_base_product_type ( id int(10) unsigned NOT NULL AUTO_INCREMENT, merchant_id int(10) unsigned DEFAULT '0' COMMENT 'Идентификатор продавца', title varchar(50) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '' COMMENT 'Название типа', sort int(11) DEFAULT '999' COMMENT 'Сортировка', spec_ids varchar(200) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '' COMMENT 'Связанные идентификаторы спецификаций', status tinyint(4) NOT NULL DEFAULT '1' COMMENT 'Статус (-1: удалено, 0: запрещено, 1: нормально)', created_at int(10) unsigned DEFAULT '0' COMMENT 'Время создания', updated_at int(10) unsigned DEFAULT '0' COMMENT 'Время обновления', PRIMARY KEY (id) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='Таблица типов товаров системы';


**Таблица «Тип товара системы»**

CREATE TABLE shop_base_product_type_attribute ( id int(11) unsigned NOT NULL AUTO_INCREMENT, merchant_id int(10) unsigned DEFAULT '0' COMMENT 'Идентификатор продавца', product_type_id int(11) NOT NULL COMMENT 'Идентификатор типа товара', title varchar(50) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '' COMMENT 'Значение атрибута', value varchar(1000) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '' COMMENT 'Данные, соответствующие атрибуту', type int(11) NOT NULL DEFAULT '1' COMMENT 'Тип соответствия атрибута (1. текст, 2. один выбор, 3. несколько выборов)', sort int(11) NOT NULL DEFAULT '999' COMMENT 'Номер сортировки', status tinyint(4) NOT NULL DEFAULT '1' COMMENT 'Состояние (-1: удаленное, 0: запрещенное, 1: нормальное)', created_at int(10) unsigned DEFAULT '0' COMMENT 'Время создания', updated_at int(10) unsigned DEFAULT '0' COMMENT 'Время обновления', PRIMARY KEY (id) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='Значения атрибутов типов товаров системы';


**Таблица товаров**

CREATE TABLE shop_product ( id int(10) unsigned NOT NULL AUTO_INCREMENT, merchant_id int(11) NOT NULL DEFAULT '0' COMMENT 'Код продавца', name varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT 'Заголовок товара', picture varchar(100) COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT 'Основное изображение товара', cate_id int(11) unsigned NOT NULL COMMENT 'Идентификатора категории товара', brand_id int(11) unsigned DEFAULT '0' COMMENT 'Бренд товара', sketch varchar(200) COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT 'Краткое описание', intro text COLLATE utf8mb4_unicode_ci NOT NULL COMMENT 'Описание товара', keywords varchar(200) COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT 'Ключевые слова', tags varchar(200) COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT 'Теги', marque varchar(100) COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT 'Модель товара', barcode varchar(100) COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT 'Штрих-код', sales int(11) NOT NULL DEFAULT '0' COMMENT 'Виртуальные покупки', real_sales int(10) NOT NULL DEFAULT '0' COMMENT 'Фактические продажи', total_sales int(11) DEFAULT '0' COMMENT 'Общие продажи', price decimal(8,2) NOT NULL COMMENT 'Цена товара', market_price decimal(8,2) DEFAULT '0.00' COMMENT 'Рыночная цена', cost_price decimal(19,2) DEFAULT '0.00' COMMENT 'Себестоимость', wholesale_price decimal(10,2) unsigned DEFAULT '0.00' COMMENT 'Оптовая цена', stock int(11) NOT NULL DEFAULT '0' COMMENT 'Количество на складе', warning_stock int(11) NOT NULL DEFAULT '0' COMMENT 'Предупреждение о количестве на складе', covers text COLLATE utf8mb4_unicode_ci NOT NULL COMMENT 'Фоны', posters json DEFAULT NULL COMMENT 'Рекламные плакаты', state tinyint(4) NOT NULL DEFAULT '0' COMMENT 'Статус проверки -1 проверка не пройдена 0 не проверено 1 проверка прошла успешно', is_package enum('0','1') COLLATE utf8mb4_unicode_ci DEFAULT '0' COMMENT 'Является ли это пакетом', is_attribute enum('0','1') COLLATE utf8mb4_unicode_ci DEFAULT '0' COMMENT 'Включить атрибут товара', sort int(11) NOT NULL DEFAULT '999' COMMENT 'Порядок сортировки', product_status tinyint(4) DEFAULT '1' COMMENT 'Товарный статус 0 снято с продажи, 1 нормально, 10 нарушение (запрет на продажу)', shipping_type tinyint(2) DEFAULT '1' COMMENT 'Способ доставки 1 бесплатная доставка 2 покупатель оплачивает доставку', shipping_fee decimal(10,2) NOT NULL DEFAULT '0.00' COMMENT 'Стоимость доставки', shipping_fee_id int(11) NOT NULL DEFAULT '0' COMMENT 'ID шаблона доставки', shipping_fee_type int(11) NOT NULL DEFAULT '1' COMMENT 'Метод расчета 1. поштучно 2. по объему 3. по весу', product_weight decimal(8,2) NOT NULL DEFAULT '0.00' COMMENT 'Вес товара', product_volume decimal(8,2) NOT NULL DEFAULT '0.00' COMMENT


| Товарный атрибут | Тип | Описание |
| --- | --- | --- |
| `商品体积` | — | — |
| marketing_type | varchar(50) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '0' COMMENT '促销类型' | Тип промоакции |
| marketing_id | int(11) NOT NULL DEFAULT '0' COMMENT '促销活动ID' | Идентификатор акции |
| marketing_price | decimal(10,2) NOT NULL DEFAULT '0.00' COMMENT '商品促销价格' | Промоцена товара |
| point_exchange_type | tinyint(3) NOT NULL DEFAULT '1' COMMENT '积分兑换类型' | Способ обмена баллов |
| point_exchange | int(11) NOT NULL DEFAULT '0' COMMENT '积分兑换' | Обмен баллов |
| max_use_point | int(11) NOT NULL DEFAULT '0' COMMENT '积分抵现最大可用积分数 0为不可使用' | Максимальное количество баллов для скидки |
| integral_give_type | int(1) NOT NULL DEFAULT '0' COMMENT '积分赠送类型 0固定值 1按比率' | Метод начисления баллов за покупку |
| give_point | int(11) NOT NULL DEFAULT '0' COMMENT '购买商品赠送积分' | Количество баллов за приобретение товара |
| min_buy | int(11) NOT NULL DEFAULT '1' COMMENT '最少买几件' | Минимальное количество покупок |
| max_buy | int(11) NOT NULL DEFAULT '0' COMMENT '限购 0 不限购' | Лимит на количество покупок |
| view | int(10) unsigned NOT NULL DEFAULT '0' COMMENT '商品点击数量' | Число просмотров товара |
| star | int(10) unsigned NOT NULL DEFAULT '5' COMMENT '好评星级' | Рейтинг товара |
| collect_num | int(10) unsigned NOT NULL DEFAULT '0' COMMENT '收藏数量' | Количество сохранений в избранное |
| comment_num | int(10) unsigned NOT NULL DEFAULT '0' COMMENT '评价数' | Количество отзывов |
| transmit_num | int(11) NOT NULL DEFAULT '0' COMMENT '分享数' | Число перепостов |
| province_id | int(10) unsigned DEFAULT '0' COMMENT '一级地区id' | Код региона первого уровня |
| city_id | int(10) unsigned DEFAULT '0' COMMENT '二级地区id' | Код региона второго уровня |
| area_id | int(10) DEFAULT '0' COMMENT '三级地区' | Код района |
| address_name | varchar(200) COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '地址' | Адрес |
| is_stock_visible | int(1) NOT NULL DEFAULT '1' COMMENT '库存显示 0不显示1显示' | Видимость товара на складе |
| is_hot | int(1) NOT NULL DEFAULT '0' COMMENT '是否热销商品' | Популярность товара |
| is_recommend | int(1) NOT NULL DEFAULT '0' COMMENT '是否推荐' | Рекомендованный товар |
| is_new | int(1) NOT NULL DEFAULT '0' COMMENT '是否新品' | Новый товар |
| is_bill | int(1) NOT NULL DEFAULT '0' COMMENT '是否开具增值税发票 1是,0否' | Наличие счёта-фактуры |
| product_type_id | int(11) NOT NULL DEFAULT '0' COMMENT '商品类型' | Вид товара |
| spec_data | text COLLATE utf8mb4_unicode_ci COMMENT '商品规格' | Спецификации товара |
| match_point | float DEFAULT '5' COMMENT '实物与描述相符(根据评价计算)' | Соответствие товара описанию |
| match_ratio | float DEFAULT '100' COMMENT '实物与描述相符(根据评价计算)百分比' | Процент соответствия товара описанию |
| sale_date | int(11) DEFAULT '0' COMMENT '上下架时间' | Дата поступления в продажу |
| is_virtual | tinyint(1) DEFAULT '0' COMMENT '是否虚拟商品' | Виртуальный товар |
| production_date | int(11) DEFAULT '0' COMMENT '生产日期' | Дата производства |
| shelf_life | int(11) DEFAULT '0' COMMENT '保质期' | Срок годности |
| is_open_presell | tinyint(4) DEFAULT '0' COMMENT '是否支持预售' | Возможность предзаказа |
| presell_time | int(11) DEFAULT '0' COMMENT '预售发货时间' | Время доставки предзаказа |
| presell_day | int(11) DEFAULT '0' COMMENT '预售发货天数' | Срок доставки предзаказа |
| presell_delivery_type | int(11) DEFAULT '1' COMMENT '预售发货方式1. 按照预售发货时间 2.按照预售发货天数' | Метод доставки предзаказа |
| presell_price | decimal(10,2) DEFAULT '0.00' COMMENT '预售金额' | Цена предзаказа |
| unit | varchar(20) COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '商品单位' | Единица измерения товара |
| video_url | varchar(100) COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '展示视频' | Ссылка на видео |
| supplier_id | int(11) DEFAULT '0' COMMENT '供货商id' | Поставщик |
| is_open_commission | tinyint(4) DEFAULT '0' COMMENT '是否支持分销' | Возможность участия в партнёрской программе |
| status | tinyint(4) DEFAULT '1' COMMENT '状态' | Статус товара |
| created_at | int(10) unsigned NOT NULL DEFAULT '0' COMMENT '创建时间' | Дата создания |
| updated_at | int(10) unsigned NOT NULL DEFAULT '0' COMMENT '更新时间' | Дата обновления |

**Таблица товарных атрибутов**

| Идентификатор | Торговый идентификатор | Идентификатор товара | Идентификатор типа атрибута | Название атрибута | Значение атрибута | Сортировка | Статус | Дата создания | Дата обновления |
| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- |

*Примечание: в запросе не хватает данных для полного перевода.* **Таблица «Товарный спецификатор»**

AUTO_INCREMENT, merchant_id int(10) unsigned DEFAULT '0' COMMENT 'Идентификатор продавца', product_id int(11) NOT NULL COMMENT 'Идентификатор товара', spec_id int(11) NOT NULL DEFAULT '0' COMMENT 'Идентификатора спецификации системы', title varchar(125) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '' COMMENT 'Название спецификации', sort int(11) NOT NULL DEFAULT '999' COMMENT 'Сортировка', status tinyint(4) NOT NULL DEFAULT '1' COMMENT 'Статус (-1: удалено, 0: запрещено, 1: разрешено)', created_at int(10) unsigned DEFAULT '0' COMMENT 'Время создания', updated_at int(10) unsigned DEFAULT '0' COMMENT 'Дата обновления', PRIMARY KEY (id), KEY product_supplier_attribute_name_product_id_index (title,product_id) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='Таблица товарного спецификатора'


**Таблица «Значения товарных спецификаторов»**

CREATE TABLE shop_product_spec_value ( id int(10) unsigned NOT NULL AUTO_INCREMENT, merchant_id int(10) DEFAULT '0' COMMENT 'Идентификатор продавца', product_id int(11) NOT NULL COMMENT 'Идентификатор товара', spec_id int(11) unsigned NOT NULL DEFAULT '0' COMMENT 'Идентификатора спецификации системы', spec_value_id int(11) unsigned NOT NULL DEFAULT '0' COMMENT 'Идентификатора значения спецификации системы', title varchar(125) COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT 'Заголовок атрибута', data varchar(125) COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT 'Значение атрибута', sort int(11) NOT NULL DEFAULT '999' COMMENT 'Сортировка', status tinyint(4) NOT NULL DEFAULT '1' COMMENT 'Статус (-1: удалено, 0: запрещено, 1: разрешено)', created_at int(10) unsigned DEFAULT '0' COMMENT 'Время создания', updated_at int(10) unsigned DEFAULT '0' COMMENT 'Дата обновления', PRIMARY KEY (id), KEY product_attribute_and_option_sku_id_option_id_attribute_id_index (base_spec_value_id,base_spec_id) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='Таблица значений товарных спецификаторов'


**Таблица «SKU товаров»**

CREATE TABLE shop_product_sku ( id int(10) unsigned NOT NULL AUTO_INCREMENT, merchant_id int(10) unsigned DEFAULT '0' COMMENT 'Идентификатор продавца', product_id int(11) unsigned DEFAULT '0' COMMENT 'Идентификатор товара', name varchar(600) COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT 'Наименование SKU', picture varchar(200) COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT 'Изображение', price decimal(8,2) NOT NULL DEFAULT '0.00' COMMENT 'Цена', market_price decimal(8,2) NOT NULL DEFAULT '0.00' COMMENT 'Рыночная цена', cost_price decimal(8,2) NOT NULL DEFAULT '0.00' COMMENT 'Себестоимость', wholesale_price decimal(10,2) unsigned DEFAULT '0.00' COMMENT 'Оптовая цена', stock int(11) NOT NULL DEFAULT '0' COMMENT 'Количество на складе', code varchar(100) COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT 'Код товара', barcode varchar(100) COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT 'Штрих-код', product_weight decimal(8,2) DEFAULT '0.00' COMMENT 'Вес товара', product_volume decimal(8,2) DEFAULT '0.00' COMMENT 'Объём товара', sort int(11) DEFAULT '1999' COMMENT 'Сортировка', data varchar(300) COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT 'Данные SKU', status tinyint(4) DEFAULT '1' COMMENT 'Состояние (-1: удаление; 0: запрет; 1: разрешение)', created_at int(10) unsigned DEFAULT '0' COMMENT 'Время создания', updated_at int(10) unsigned DEFAULT '0' COMMENT 'Дата обновления', PRIMARY KEY (id), KEY product_id (product_id) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='Таблица SKU товаров' ``` 重置

<script src="./layui/layui.js"></script> <script> layui.config({ base: './lay-module/', // 设定扩展的 layui 模块的所在目录,一般用于外部模块扩展 }).use(['layer', 'form', 'skuTable',], function () { var layer = layui.layer, form = layui.form, skuTable = layui.skuTable;
    var skuTableObj = skuTable.render({
        isAttributeElemId: 'fairy-is-attribute',
        productTypeElemId: 'fairy-product-type',
        attributeTableElemId: 'fairy-attribute-table',
        specTableElemId: 'fairy-spec-table',
        skuTableElemId: 'fairy-sku-table',
        //商品规格模式 0单规格 1多规格
        mode: 0,
        //是否开启sku表行合并
        rowspan: true,
        //图片上传接口
        uploadUrl: './json/upload.json',
        //获取商品类型接口
        productTypeUrl: './json/productTypeData.json',
        //获取商品类型下的规格和属性接口
        attrSpecUrl: './json/attrSpecData.json',
        //创建规格接口
        specCreateUrl: './json/specCreate.json',
        //删除规格接口
        specDeleteUrl: './json/specDelete.json',
        //创建规格值接口
        specValueCreateUrl: './json/specValueCreate.json',
        //删除规格值接口
        specValueDeleteUrl: './json/specValueDelete.json',
        //sku数据接口
        skuDataUrl: './json/skuData.json',
        //单规格SKU表配置
        singleSkuTableConfig: {
            thead: [
                {title: '销售价(元)', icon: 'layui-icon-cols'},
                {title: '市场价(元)', icon: 'layui-icon-cols'},
                {title: '成本价(元)', icon: 'layui-icon-cols'},
                {title: '库存', icon: 'layui-icon-cols'},
                {title: '状态', icon: ''},
            ],
            tbody: [
                {type: 'input', field: 'price', value: '0', verify: 'required|number', reqtext: '销售价不能为空'},
                {type: 'input', field: 'market_price', value: '0', verify: 'required|number', reqtext: '市场价不能为空'},
                {type: 'input', field: 'cost_price', value: '0', verify: 'required|number', reqtext: '成本价不能为空'},
                {type: 'input', field: 'stock', value: '0', verify: 'required|number', reqtext: '库存不能为空'},
                {type: 'select', field: 'status', option: [{key: '启用', value: '1'}, {key: '禁用', value: '0'}], verify: 'required', reqtext: '状态不能为空'},
            ]
        },
        //多规格SKU表配置
        multipleSkuTableConfig: {
            thead: [
                {title: '图片', icon: ''},
                {title: '销售价(元)', icon: 'layui-icon-cols'},
                {title: '市场价(元)', icon: 'layui-icon-cols'},
                {title: '成本价(元)', icon: 'layui-icon-cols'},
                {title: '库存', icon: 'layui-icon-cols'},
                {title: '状态', icon: ''},
            ],
            tbody: [
                {type: 'image', field: 'picture', value: '', verify: '', reqtext: ''},
                {type: 'input', field: 'price', value: '0', verify: 'required|number', reqtext: '销售价不能为空'},
                {type: 'input', field: 'market_price', value: '0', verify: 'required|number', reqtext: '市场价不能为空'},
                {type: 'input', field: 'cost_price', value: '0', verify: 'required|number', reqtext: '成本价不能为空'},
                {type: 'input', field: 'stock', value: '0', verify: 'required|number', reqtext: '库存不能为空'},
                {
                    type: 'select',
                    field: 'status',
                    option: [{key: '启用', value: '1'}, {key: '禁用', value: '0'}],
                    verify: '',
                    reqtext: ''
                },
            ]
        },
    });

    form.on('submit(submit)', function (data) {
        // 获取表单数据
        console.log(data.field);

        if (skuTableObj.getMode() == 0) {
            // 单规格

Это перевод исходного текста на русский язык. ```
layer.alert(JSON.stringify(data.field), {title: '提交的数据'});
        } else {
            //多规格
            var state = Object.keys(data.field).some(function (item, index, array) {
                return item.startsWith('skus');
            });
            state ? layer.alert(JSON.stringify(data.field), {title: '提交的数据'}) : layer.msg('sku表数据不能为空', {icon: 5, anim: 6});
        }

        return false;
    });
});

Комментарии ( 0 )

Вы можете оставить комментарий после Вход в систему

Введение

На основе компонента Layui для спецификации товаров. Поддерживает переключение между одной спецификацией и несколькими. Развернуть Свернуть
MIT
Отмена

Обновления

Пока нет обновлений

Участники

все

Недавние действия

Загрузить больше
Больше нет результатов для загрузки
1
https://api.gitlife.ru/oschina-mirror/cshaptx4869-sku-table.git
git@api.gitlife.ru:oschina-mirror/cshaptx4869-sku-table.git
oschina-mirror
cshaptx4869-sku-table
cshaptx4869-sku-table
master