ABGrid Engine

Details panels

Код (кликните для просмотра или скрытия)
       
            if (needABGrid(container)) return;

            function clearPanels(host){
                for (var i = 1; i <= 5; i++) {
                    const el = host.querySelector('[data-panel="category"]');
                    if (el) {
                        el.textContent = '';
                    }
                    const key = 'spec' + (i + 1);
                    const b = host.querySelector('#' + key + ' b');
                    if (b) {
                        b.textContent = '';
                    }
                    const span = host.querySelector('[data-panel="' + key + '"]');
                    if (span) {
                        span.textContent = '-';
                    }
                }
            }

            const productCfg = {
                readOnly: true,
                autoload: true,
                data: {
                    dataKey: 'gridDetailPanels',
                    url: '/api/demo/detailsPanels'
                },
                // ===== SCHEMA =====
                schema: {
                    fields: {
                        id: {type: 'int', ui: {label: 'id', grid: {visible: false}}},
                        categoryId: {type: 'int', ui: {label: 'categoryId', grid: {visible: false}}},
                        category: {type: 'string', ui: {label: 'Категория', grid: {visible: false}}},
                        name: {type: 'string', ui: {label: 'Наименование', grid: {visible: true, width: '60%'}}},
                        price: {type: 'number', ui: {label: 'Цена', grid: {visible: true, width: '15%'}}},
                        imageName: {
                            type: 'string',
                            ui: {label: 'Фото', grid: {visible: true, width: 160, colType: 'image'}}
                        },
                        extData: {type: 'string', ui: {grid: {visible: false}}},
                        specs:{type: 'string', ui: {grid: {visible:false}}},
                    }
                },

                // ===== VIEW =====
                view: {
                    checkbox: false,
                    height: 415,
                    tableTitle: {
                        enabled: true,
                        caption: 'Продукция',
                        hint: 'Продукция нашего магазина',
                        toggle: true
                    },
                    pager: {
                        enabled: true,
                        rpp: [5, 10]
                    },
                },
                detailsPanels: [
                    {
                        id: "requestDetailsPanels",
                        host: "#demoRequestDetailsHost",
                        emptyHint: "Выберите запись…",
                        onShow(ctx) {
                            let host = ctx.host;
                            if (typeof host === 'string') {
                                host = document.querySelector(host);
                            }
                            if (!ctx.masterRow) {
                                clearPanels(host)
                                return;
                            }

                            const category = ctx.masterRow.category ?? '—';
                            const el = host.querySelector('[data-panel="category"]');
                            if (el) {
                                el.textContent = category;
                            }

                            const specs = ctx.masterRow?.specs ?? [];
                            specs.forEach((spec, i) => {
                                const key = `spec${i + 1}`;
                                const b = host.querySelector(`#${key} b`);
                                if (b){
                                    b.textContent = (spec.specName ?? '') +': ';
                                }

                                const span = host.querySelector(`[data-panel="${key}"]`);
                                if (span) {
                                    span.textContent = spec.specValue ?? '—';
                                }
                            });

                            const categoryExtDataMap = {
                                1: "Гарантия,мес",
                                2: "Энергетический класс",
                                3: "Операционная система"
                            };
                            const extDataMap = {
                                1: "warrantyMonths",
                                2: "energyClass",
                                3: "os"
                            };
                            const categoryId = ctx.masterRow.categoryId;
                            const extDataName = categoryExtDataMap[categoryId];
                            const extData = ctx.masterRow.extData ?? '';
                            let b = host.querySelector(`#spec4 b`);
                            if (b) { b.textContent = 'Артикул: '; }
                            let span = host.querySelector(`[data-panel="spec4"]`);
                            if (span) { span.textContent = extData.sku ?? '—'; }
                            b = host.querySelector(`#spec5 b`);
                            if (b) { b.textContent = extDataName+': ';}
                            span = host.querySelector(`[data-panel="spec5"]`);
                            if (span) { span.textContent = extData[extDataMap[categoryId]] ?? '—'; }

                        }
                    }
                ]
            }
            const gridProduct = new ABGrid(container, productCfg);
       
    

Товары и их характеристики. Панель справа отображает характеристики товара текущей записи. Панель заполняется пользовательским кодом(код для демо устарел), в финальной версии компонента это может быть сделано автоматически.

Категория:
Артикул: