From 1374d1938afc0c86b38e1dc722d7beec9cd76393 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=B5=85=E5=BF=B5?= Date: Fri, 20 Jun 2025 17:05:56 +0800 Subject: [PATCH] sku --- api/init.json | 23 +++ assets/css/public.css | 1 + assets/js/attribute.js | 247 +++++++++++++++++++++++++++++++++ assets/js/categories.js | 191 +++++++++++++++++++++++++ assets/js/lang/en.json | 156 +++++++++++---------- assets/js/lang/ru.json | 156 +++++++++++---------- assets/js/lang/zh.json | 12 +- assets/js/newcarlist.js | 18 ++- assets/js/sku.js | 225 ++++++++++++++++++++++++++++++ assets/js/tablei18n.js | 18 ++- assets/main.js | 86 +++++++++++- assets/public.js | 138 +++++++++++++++--- index.html | 4 +- page/attribute.html | 73 ++++++++++ page/categories.html | 62 +++++++++ page/newcarlist.html | 2 + page/sku.html | 73 ++++++++++ page/table/attributeadd.html | 152 ++++++++++++++++++++ page/table/attributeedit.html | 195 ++++++++++++++++++++++++++ page/table/categoriesadd.html | 68 +++++++++ page/table/categoriesedit.html | 90 ++++++++++++ page/table/skuadd.html | 195 ++++++++++++++++++++++++++ page/table/skuedit.html | 243 ++++++++++++++++++++++++++++++++ 23 files changed, 2248 insertions(+), 180 deletions(-) create mode 100644 assets/js/attribute.js create mode 100644 assets/js/categories.js create mode 100644 assets/js/sku.js create mode 100644 page/attribute.html create mode 100644 page/categories.html create mode 100644 page/sku.html create mode 100644 page/table/attributeadd.html create mode 100644 page/table/attributeedit.html create mode 100644 page/table/categoriesadd.html create mode 100644 page/table/categoriesedit.html create mode 100644 page/table/skuadd.html create mode 100644 page/table/skuedit.html diff --git a/api/init.json b/api/init.json index 890be1c..d8ef060 100755 --- a/api/init.json +++ b/api/init.json @@ -101,6 +101,29 @@ "href": "page/email.html", "icon": "fa fa-info-circle", "target": "_self" + }, + { + "title": "属性管理", + "name": "attribute", + "href": "", + "icon": "fa fa-calendar", + "target": "_self", + "child": [ + { + "title": "属性分类", + "name":"categories", + "href": "page/categories.html", + "icon": "fa fa-calendar", + "target": "_self" + }, + { + "title": "属性列表", + "name":"attributes", + "href": "page/attribute.html", + "icon": "fa fa-calendar", + "target": "_self" + } + ] } ] } diff --git a/assets/css/public.css b/assets/css/public.css index 3973964..12f8e40 100755 --- a/assets/css/public.css +++ b/assets/css/public.css @@ -89,6 +89,7 @@ body { } .check, .show, +.sku, .edit { margin-right: 10px; } diff --git a/assets/js/attribute.js b/assets/js/attribute.js new file mode 100644 index 0000000..b746725 --- /dev/null +++ b/assets/js/attribute.js @@ -0,0 +1,247 @@ +layui.use(['form', 'table'], function () { + var $ = layui.jquery, + form = layui.form, + table = layui.table; + // 获取当前语言 + var currentLang = localStorage.getItem('language') || 'zh'; + var lang = langConfig[currentLang]; + var operationBar = $('#currentTableBar').html(); + if (operationBar) { + var newHtml = operationBar + .replace(/编辑/g, lang.carlist.operations.edit) + .replace(/删除/g, lang.carlist.operations.delete) + $('#currentTableBar').html(newHtml); + } + var toolbarDemo = $('#toolbarDemo').html(); + if (toolbarDemo) { + var newHtmlt = toolbarDemo + .replace(/添加/g, lang.userlist.add) + $('#toolbarDemo').html(newHtmlt); + } + var tableInitb = table.render({ + elem: '#currentTableId', + url: lang.baseUrl+'console/vehicle/new/attributes/list', + headers: { + Authorization: 'Bearer ' + sessionStorage.tokencar, + lang:localStorage.getItem('language')?localStorage.getItem('language'):"zh" + }, + toolbar: '#toolbarDemo', + defaultToolbar: ['filter', 'exports', 'print', { + title: '提示', + layEvent: 'LAYTABLE_TIPS', + icon: 'layui-icon-tips' + }], + parseData: function(res) { //res 即为原始返回的数据 + console.log(res) + return { + "code": 0, //解析接口状态 + "msg": 'message', //解析提示文本 + "count": res.data.meta.total, //解析数据长度 + "data": res.data.list //解析数据列表 + }; + }, + cols: [[ + {type: "checkbox"}, + {field: 'id', title: 'ID', sort: true}, + {field: 'attribute_name', title: lang.alllist.name}, + {field: 'status',title:lang.alllist.status, + // templet: function(d){ + // var img= '' + // return img; + // }, + templet: function (d) { + form.on("switch(status)", function (data) { + let load = layer.load(); + let postData = {}; + postData.status = data.elem.checked ? 1 : 0; + postData.id = d.id; + postData.name = d.name; + self.brandupdate({ + type:'post', + data: postData, + successCallBack: function (result) { + layer.msg(result.message) + layer.close(load); + }, + failCallBack: function (result) { + layer.msg(result.message) + layer.closeAll('loading'); + tableInitb.reload() + } + }) + }); + let checked = d['status'] === 1 ? "checked" : ""; + return ''; + } + }, + {field: 'created_at',title: lang.alllist.create_time}, + {field: 'updated_at',title: lang.alllist.update_time}, + {title: lang.alllist.operation, minWidth: 150, toolbar: '#currentTableBar', align: "center"} + ]], + limits: [10, 15, 20, 25, 50, 100], + limit: 10, + page: true, + skin: 'line', + done: function(res, curr, count){ + window.i18n.updatePageContent(); + } + }); + // 监听搜索操作 + form.on('submit(data-search-btn)', function (data) { + var result = JSON.stringify(data.field); + + table.reload('currentTableId', { + page: { + curr: 1 + } + , where: { + name: data.field.name, + status: data.field.status, + } + }, 'data'); + + return false; + }); + + /** + * toolbar监听事件 + */ + table.on('toolbar(currentTableFilter)', function (obj) { + if (obj.event === 'add') { // 监听添加操作 + var index = layer.open({ + title: lang.userlist.add, + type: 2, + shade: 0.2, + maxmin:true, + shadeClose: true, + area: ['70%', '80%'], + btn: [lang.audit.confirm, lang.audit.cancel], + content: '../page/table/attributeadd.html', + yes: function (index, layero) { + var iframeWindow = window['layui-layer-iframe' + index] + , submitID = 'saveBtn' + , submit = layero.find('iframe').contents().find('#' + submitID); + //监听提交 + iframeWindow.layui.form.on('submit(' + submitID + ')', function (data) { + var field = data.field; //获取提交的字段 + const result = {}; + if(field.input_type=='color'){ + result.value = objentries(field,'color_code','value_name','color_code','value_name') + }else{ + result.value = objentries1(field,'value_name','value_name') + } + + for (const key in field) { + if (!key.includes('[') && !key.includes(']')) { + result[key] = field[key]; + } + } + self.attributesadd({ + type: 'post', + data: result, + successCallBack: function (res) { + layer.msg(res.message) + layer.close(index); //关闭弹层 + tableInitb.reload() + }, + failCallBack: function (res) { + alert(res.message); + } + }) + + + }); + submit.trigger('click'); + } + }); + $(window).on("resize", function () { + layer.full(index); + }); + } else if (obj.event === 'delete') { // 监听删除操作 + var checkStatus = table.checkStatus('currentTableId') + , data = checkStatus.data; + layer.alert(JSON.stringify(data)); + } + }); + + //监听表格复选框选择 + table.on('checkbox(currentTableFilter)', function (obj) { + console.log(obj) + }); + + table.on('tool(currentTableFilter)', function (obj) { + var data = obj.data; + if (obj.event === 'edit') { + + var index = layer.open({ + title:lang.audit.edit_title, + type: 2, + shade: 0.2, + maxmin:true, + shadeClose: true, + area: ['70%', '80%'], + btn: [lang.audit.confirm, lang.audit.cancel], + content: '../page/table/attributeedit.html?id='+data.id, + yes: function(index, layero){ + var iframeWindow = window['layui-layer-iframe'+ index] + ,submitID = 'saveBtn' + ,submit = layero.find('iframe').contents().find('#'+ submitID); + //监听提交 + iframeWindow.layui.form.on('submit('+ submitID +')', function(data){ + var field = data.field; //获取提交的字段 + const result = {}; + if(field.input_type=='color'){ + result.value = objentriesedt(field,'color_code','value_name','idp','color_code','value_name','id') + }else{ + result.value = objentriesedt1(field,'value_name','value_name','idp') + } + + for (const key in field) { + if (!key.includes('[') && !key.includes(']')) { + result[key] = field[key]; + } + } + self.attributesupdate({ + type: 'post', + data: result, + successCallBack: function (res) { + layer.msg(res.message) + layer.close(index); //关闭弹层 + tableInitb.reload() + }, + failCallBack: function (res) { + alert(res.message); + } + }) + // console.log(field) + }); + submit.trigger('click'); + } + }); + $(window).on("resize", function () { + layer.full(index); + }); + return false; + }else if (obj.event === 'delete') { + layer.confirm(lang.audit.confirm_delete, function(index) { + self.attributesdelete({ + type:'post', + data:{id:data.id}, + successCallBack: function(result){ + layer.msg(result.message, { + icon: 1, + time: 1000 + }); + tableInitb.reload() + }, + failCallBack: function(result){ + alert(result.message); + window.location.reload() + } + }) + + }); + } + }); + + }); \ No newline at end of file diff --git a/assets/js/categories.js b/assets/js/categories.js new file mode 100644 index 0000000..c84cc1d --- /dev/null +++ b/assets/js/categories.js @@ -0,0 +1,191 @@ +layui.use(['form', 'table'], function () { + var $ = layui.jquery, + form = layui.form, + table = layui.table; + // 获取当前语言 + var currentLang = localStorage.getItem('language') || 'zh'; + var lang = langConfig[currentLang]; + var operationBar = $('#currentTableBar').html(); + if (operationBar) { + var newHtml = operationBar + .replace(/编辑/g, lang.carlist.operations.edit) + .replace(/删除/g, lang.carlist.operations.delete) + $('#currentTableBar').html(newHtml); + } + var toolbarDemo = $('#toolbarDemo').html(); + if (toolbarDemo) { + var newHtmlt = toolbarDemo + .replace(/添加/g, lang.userlist.add) + $('#toolbarDemo').html(newHtmlt); + } + var tableInitb = table.render({ + elem: '#currentTableId', + url: lang.baseUrl+'console/vehicle/new/categories/list', + headers: { + Authorization: 'Bearer ' + sessionStorage.tokencar, + lang:localStorage.getItem('language')?localStorage.getItem('language'):"zh" + }, + toolbar: '#toolbarDemo', + defaultToolbar: ['filter', 'exports', 'print', { + title: '提示', + layEvent: 'LAYTABLE_TIPS', + icon: 'layui-icon-tips' + }], + parseData: function(res) { //res 即为原始返回的数据 + console.log(res) + return { + "code": 0, //解析接口状态 + "msg": 'message', //解析提示文本 + "count": res.data.meta.total, //解析数据长度 + "data": res.data.list //解析数据列表 + }; + }, + cols: [[ + {type: "checkbox"}, + {field: 'id', title: 'ID', sort: true}, + {field: 'category_name', title: lang.alllist.name}, + {field: 'sort_order', title: lang.alllist.sort}, + {field: 'created_at',title: lang.alllist.create_time}, + {field: 'updated_at',title: lang.alllist.update_time}, + {title: lang.alllist.operation, minWidth: 150, toolbar: '#currentTableBar', align: "center"} + ]], + limits: [10, 15, 20, 25, 50, 100], + limit: 10, + page: true, + skin: 'line', + done: function(res, curr, count){ + window.i18n.updatePageContent(); + } + }); + // 监听搜索操作 + form.on('submit(data-search-btn)', function (data) { + var result = JSON.stringify(data.field); + + table.reload('currentTableId', { + page: { + curr: 1 + } + , where: { + category_name: data.field.category_name + } + }, 'data'); + + return false; + }); + + /** + * toolbar监听事件 + */ + table.on('toolbar(currentTableFilter)', function (obj) { + if (obj.event === 'add') { // 监听添加操作 + var index = layer.open({ + title: lang.userlist.add, + type: 2, + shade: 0.2, + maxmin:true, + shadeClose: true, + area: ['70%', '80%'], + btn: [lang.audit.confirm, lang.audit.cancel], + content: '../page/table/categoriesadd.html', + yes: function (index, layero) { + var iframeWindow = window['layui-layer-iframe' + index] + , submitID = 'saveBtn' + , submit = layero.find('iframe').contents().find('#' + submitID); + //监听提交 + iframeWindow.layui.form.on('submit(' + submitID + ')', function (data) { + var field = data.field; //获取提交的字段 + self.categoriesadd({ + type: 'post', + data: data.field, + successCallBack: function (result) { + layer.msg(result.message) + layer.close(index); //关闭弹层 + tableInitb.reload() + }, + failCallBack: function (result) { + alert(result.message); + } + }) + console.log(field) + + }); + submit.trigger('click'); + } + }); + $(window).on("resize", function () { + layer.full(index); + }); + } else if (obj.event === 'delete') { // 监听删除操作 + var checkStatus = table.checkStatus('currentTableId') + , data = checkStatus.data; + layer.alert(JSON.stringify(data)); + } + }); + + //监听表格复选框选择 + table.on('checkbox(currentTableFilter)', function (obj) { + console.log(obj) + }); + + table.on('tool(currentTableFilter)', function (obj) { + var data = obj.data; + if (obj.event === 'edit') { + + var index = layer.open({ + title:lang.audit.edit_title, + type: 2, + shade: 0.2, + maxmin:true, + shadeClose: true, + area: ['70%', '80%'], + btn: [lang.audit.confirm, lang.audit.cancel], + content: '../page/table/categoriesedit.html?id='+data.id, + yes: function(index, layero){ + var iframeWindow = window['layui-layer-iframe'+ index] + ,submitID = 'saveBtn' + ,submit = layero.find('iframe').contents().find('#'+ submitID); + //监听提交 + iframeWindow.layui.form.on('submit('+ submitID +')', function(data){ + var field = data.field; //获取提交的字段 + self.categoriesupdate({ + type:'post', + data:data.field, + successCallBack: function(result){ + layer.msg(result.message) + layer.close(index); //关闭弹层 + tableInitb.reload() + }, + failCallBack: function(result){ + alert(result.message); + } + }) + }); + submit.trigger('click'); + } + }); + $(window).on("resize", function () { + layer.full(index); + }); + return false; + }else if (obj.event === 'delete') { + layer.confirm(lang.audit.confirm_delete, function(index) { + self.categoriesdelete({ + type:'post', + data:{id:data.id}, + successCallBack: function(result){ + layer.msg(result.message, { + icon: 1, + time: 1000 + }); + tableInitb.reload() + }, + failCallBack: function(result){ + alert(result.message); + window.location.reload() + } + }) + + }); + } + }); + }); \ No newline at end of file diff --git a/assets/js/lang/en.json b/assets/js/lang/en.json index 1b3fdb0..9e487c2 100755 --- a/assets/js/lang/en.json +++ b/assets/js/lang/en.json @@ -24,21 +24,24 @@ "type": "Type", "agreement": "Agreement", "general": "General Settings", - "dictionary": "Dictionary Settings", - "newcar":"New Car", - "usedcar":"Used Car", - "seo":"SEO", - "email":"Email" + "dictionary": "Dictionary Settings", + "newcar":"New Car", + "usedcar":"Used Car", + "seo":"SEO", + "email":"Email", + "attribute":"Attribute", + "attributes":"Attribute List", + "categories":"Attribute Categories" }, - "homE": { - "welcome": "Welcome to our website", - "more": "Learn more", - "title": "Data Statistics", - "realtime": "Real-time", - "brandCounts": "Number of Brands", - "inOrderCounts": "Orders in Process", - "inTransitCounts": "In Transit", - "vehicleCounts": "Vehicle Count" + "homE": { + "welcome": "Welcome to our website", + "more": "Learn more", + "title": "Data Statistics", + "realtime": "Real-time", + "brandCounts": "Number of Brands", + "inOrderCounts": "Orders in Process", + "inTransitCounts": "In Transit", + "vehicleCounts": "Vehicle Count" }, "btn": { "submit": "Submit", @@ -150,10 +153,10 @@ "audit": { "all": "All", "applied": "Reviewed", - "not_applied": "Not Reviewed", - "pass": "Pass", - "refuse": "Refuse", - "desc": "Description", + "not_applied": "Not Reviewed", + "pass": "Pass", + "refuse": "Refuse", + "desc": "Description", "editcarbtn": "Edit vehicle" }, "seach": { @@ -168,65 +171,72 @@ "user": "User Agreement", "status1": "Active", "status2": "Disabled" - }, - "seo": { - "title": "Page Title", - "description": "Page Description", - "canonical": "", - "og_type": "Website Type", - "og_title": "Share Title", - "og_description": "Share Description", - "og_image": "Share Thumbnail", - "og_url": "Share URL", - "og_site_name": "Site Name", - "page": "Current Page" - }, - "brand": { - "name": "Brand Name", - "logo": "Brand Logo", - "logoalt": "Logo Description", - "status": "Status", - "banner": "Banner Image", - "banneralt": "Banner Description", - "desc": "Brand Description", - "thumbnail": "Thumbnail", - "thumbnailalt": "Thumbnail Description", - "detailsimg": "Brand Carousel Images", - "advantage": "Brand Advantages", - "advantage-title": "Advantage Title", - "advantage-desc": "Advantage Description", - "album": "Brand Album", - "is_hot": "Is Hot" - }, - "newcar": { - "memo": "Vehicle Description", - "introduce": "Vehicle Introduction", - "desc": "Vehicle Description", - "characteristic": "Vehicle Features", - "video": "Vehicle Video", - "problem": "FAQ", - "imgalt": "Image Description", - "coveralt": "Cover Image Description" - }, - "alls": { - "title": "Title", - "title_placeholder": "Please enter title", - "content": "Content", - "content_placeholder": "Please enter content", - "introduce_placeholder": "Please enter introduction", - "image_desc": "Please enter image description", - "problem": "Question", - "answer": "Answer", - "answer_placeholder": "Please enter answer", - "problem_placeholder": "Please enter question", - "yes": "Yes", - "no": "No" + }, + "seo": { + "title": "Page Title", + "description": "Page Description", + "canonical": "", + "og_type": "Website Type", + "og_title": "Share Title", + "og_description": "Share Description", + "og_image": "Share Thumbnail", + "og_url": "Share URL", + "og_site_name": "Site Name", + "page": "Current Page" + }, + "brand": { + "name": "Brand Name", + "logo": "Brand Logo", + "logoalt": "Logo Description", + "status": "Status", + "banner": "Banner Image", + "banneralt": "Banner Description", + "desc": "Brand Description", + "thumbnail": "Thumbnail", + "thumbnailalt": "Thumbnail Description", + "detailsimg": "Brand Carousel Images", + "advantage": "Brand Advantages", + "advantage-title": "Advantage Title", + "advantage-desc": "Advantage Description", + "album": "Brand Album", + "is_hot": "Is Hot" + }, + "newcar": { + "memo": "Vehicle Description", + "introduce": "Vehicle Introduction", + "desc": "Vehicle Description", + "characteristic": "Vehicle Features", + "video": "Vehicle Video", + "problem": "FAQ", + "imgalt": "Image Description", + "coveralt": "Cover Image Description" + }, + "sku": { + "name": "Attribute name", + "value": "Attribute value", + "desc": "Attribute" + }, + "alls": { + "title": "Title", + "title_placeholder": "Please enter title", + "content": "Content", + "content_placeholder": "Please enter content", + "introduce_placeholder": "Please enter introduction", + "image_desc": "Please enter image description", + "problem": "Question", + "answer": "Answer", + "answer_placeholder": "Please enter answer", + "problem_placeholder": "Please enter question", + "yes": "Yes", + "no": "No" }, "sort": "Sort", "pleaseenter": "Please enter", "Belongingbrand": "Belonging Brand", - "typeimg": "Type Image", - "Imageratio":"Aspect ratio", + "Belongingtype": "Category", + "Images": "Images", + "typeimg": "Type Image", + "Imageratio":"Aspect ratio", "Imagesize":"Image size", "select": "Please select", "logout": "Logout", diff --git a/assets/js/lang/ru.json b/assets/js/lang/ru.json index 340d1de..cceb8ff 100755 --- a/assets/js/lang/ru.json +++ b/assets/js/lang/ru.json @@ -24,21 +24,24 @@ "type": "типами", "agreement": "соглашениями", "general": "Общие настройки", - "dictionary": "Настройки словарей", - "newcar":"Новые автомобили", - "usedcar":"Б/у автомобили", - "seo":"SEO", - "email":"Эл. почта" + "dictionary": "Настройки словарей", + "newcar":"Новые автомобили", + "usedcar":"Б/у автомобили", + "seo":"SEO", + "email":"Эл. почта", + "attribute":"Свойства", + "attributes":"Список атрибутов", + "categories":"Категории атрибутов" }, - "home": { - "welcome": "Добро пожаловать на наш сайт", - "more": "Узнать больше", - "title": "Статистика данных", - "realtime": "В реальном времени", - "brandCounts": "Количество брендов", - "inOrderCounts": "Заказы в обработке", - "inTransitCounts": "В пути", - "vehicleCounts": "Количество автомобилей" + "home": { + "welcome": "Добро пожаловать на наш сайт", + "more": "Узнать больше", + "title": "Статистика данных", + "realtime": "В реальном времени", + "brandCounts": "Количество брендов", + "inOrderCounts": "Заказы в обработке", + "inTransitCounts": "В пути", + "vehicleCounts": "Количество автомобилей" }, "btn": { "submit": "Отправить", @@ -150,10 +153,10 @@ "audit": { "all": "Все", "applied": "Проверено", - "not_applied": "Не проверено", - "pass": "Пропустить", - "refuse": "Отказать", - "desc": "Описание", + "not_applied": "Не проверено", + "pass": "Пропустить", + "refuse": "Отказать", + "desc": "Описание", "editcarbtn": "Изменить авто" }, "seach": { @@ -168,65 +171,72 @@ "user": "Пользовательское соглашение", "status1": "Активно", "status2": "Отключено" - }, - "seo": { - "title": "Заголовок страницы", - "description": "Описание страницы", - "canonical": "", - "og_type": "Тип веб-страницы", - "og_title": "Заголовок для публикации", - "og_description": "Описание для публикации", - "og_image": "Миниатюра для публикации", - "og_url": "Ссылка для публикации", - "og_site_name": "Название сайта", - "page": "Текущая страница" - }, - "brand": { - "name": "Название бренда", - "logo": "Логотип бренда", - "logoalt": "Описание логотипа", - "status": "Статус", - "banner": "Баннер", - "banneralt": "Описание баннера", - "desc": "Описание бренда", - "thumbnail": "Миниатюра", - "thumbnailalt": "Описание миниатюры", - "detailsimg": "Карусель изображений бренда", - "advantage": "Преимущества бренда", - "advantage-title": "Заголовок преимущества", - "advantage-desc": "Описание преимущества", - "album": "Альбом бренда", - "is_hot": "Популярный" - }, - "newcar": { - "memo": "Описание автомобиля", - "introduce": "Описание автомобиля", - "desc": "Описание автомобиля", - "characteristic": "Характеристики автомобиля", - "video": "Видео автомобиля", - "problem": "Частые вопросы", - "imgalt": "Описание изображения", - "coveralt": "Описание обложки" - }, - "alls": { - "title": "Заголовок", - "title_placeholder": "Введите заголовок", - "content": "Содержание", - "content_placeholder": "Введите содержание", - "introduce_placeholder": "Введите описание", - "image_desc": "Введите описание изображения", - "problem": "Вопрос", - "answer": "Ответ", - "answer_placeholder": "Введите ответ", - "problem_placeholder": "Введите вопрос", - "yes": "Да", - "no": "Нет" + }, + "seo": { + "title": "Заголовок страницы", + "description": "Описание страницы", + "canonical": "", + "og_type": "Тип веб-страницы", + "og_title": "Заголовок для публикации", + "og_description": "Описание для публикации", + "og_image": "Миниатюра для публикации", + "og_url": "Ссылка для публикации", + "og_site_name": "Название сайта", + "page": "Текущая страница" + }, + "brand": { + "name": "Название бренда", + "logo": "Логотип бренда", + "logoalt": "Описание логотипа", + "status": "Статус", + "banner": "Баннер", + "banneralt": "Описание баннера", + "desc": "Описание бренда", + "thumbnail": "Миниатюра", + "thumbnailalt": "Описание миниатюры", + "detailsimg": "Карусель изображений бренда", + "advantage": "Преимущества бренда", + "advantage-title": "Заголовок преимущества", + "advantage-desc": "Описание преимущества", + "album": "Альбом бренда", + "is_hot": "Популярный" + }, + "newcar": { + "memo": "Описание автомобиля", + "introduce": "Описание автомобиля", + "desc": "Описание автомобиля", + "characteristic": "Характеристики автомобиля", + "video": "Видео автомобиля", + "problem": "Частые вопросы", + "imgalt": "Описание изображения", + "coveralt": "Описание обложки" + }, + "sku": { + "name": "Название атрибута", + "value": "Значение атрибута", + "desc": "Атрибут" + }, + "alls": { + "title": "Заголовок", + "title_placeholder": "Введите заголовок", + "content": "Содержание", + "content_placeholder": "Введите содержание", + "introduce_placeholder": "Введите описание", + "image_desc": "Введите описание изображения", + "problem": "Вопрос", + "answer": "Ответ", + "answer_placeholder": "Введите ответ", + "problem_placeholder": "Введите вопрос", + "yes": "Да", + "no": "Нет" }, "sort": "Сортировка", "pleaseenter": "Пожалуйста, введите", "Belongingbrand": "Принадлежащий бренд", - "typeimg": "Изображение типа", - "Imageratio":"Соотношение сторон", + "Belongingtype": "Категория", + "Images": "Изображения", + "typeimg": "Изображение типа", + "Imageratio":"Соотношение сторон", "Imagesize":"Размер изображения", "select": "Пожалуйста, выберите", "logout": "Выйти", diff --git a/assets/js/lang/zh.json b/assets/js/lang/zh.json index 7e249cb..986b473 100755 --- a/assets/js/lang/zh.json +++ b/assets/js/lang/zh.json @@ -28,7 +28,10 @@ "newcar":"新车管理", "usedcar":"二手车", "seo":"SEO管理", - "email":"邮箱管理" + "email":"邮箱管理", + "attribute":"属性管理", + "attributes":"属性列表", + "categories":"属性分类" }, "home": { "welcome": "欢迎访问我们的网站", @@ -208,6 +211,11 @@ "imgalt":"图片描述", "coveralt":"封面图描述" }, + "sku":{ + "name":"属性名称", + "value":"属性值", + "desc":"属性" + }, "alls":{ "title": "标题", "title_placeholder": "请输入标题", @@ -225,6 +233,8 @@ "sort": "排序", "pleaseenter":"请输入", "Belongingbrand":"所属品牌", + "Belongingtype":"所属分类", + "Images":"图片", "typeimg":"类型图", "Imageratio":"图片比例", "Imagesize":"图片尺寸", diff --git a/assets/js/newcarlist.js b/assets/js/newcarlist.js index c80068a..8be020e 100755 --- a/assets/js/newcarlist.js +++ b/assets/js/newcarlist.js @@ -16,10 +16,12 @@ layui.use(['form', 'table'], function () { .replace(/删除/g, lang.carlist.operations.delete) .replace(/审核/g, lang.carlist.operations.check) .replace(/详情/g, lang.carlist.operations.show) + .replace(/属性/g, lang.carlist.operations.sku) .replace(/Edit/g, lang.carlist.operations.edit) .replace(/Delete/g, lang.carlist.operations.delete) .replace(/Check/g, lang.carlist.operations.check) - .replace(/Details/g, lang.carlist.operations.show); + .replace(/Details/g, lang.carlist.operations.show) + .replace(/Sku/g, lang.carlist.operations.sku); $('#currentTableBar').html(newHtml); } var toolbarDemo = $('#toolbarDemo').html(); @@ -156,8 +158,8 @@ layui.use(['form', 'table'], function () { alert(result.message); } }) - console.log(datas) - console.log(field) + // console.log(datas) + // console.log(field) }); submit.trigger('click'); @@ -250,6 +252,16 @@ layui.use(['form', 'table'], function () { area: ['60%', '85%'], content: '../page/table/newcarlistshow.html?id='+data.id }); + }else if (obj.event === 'sku') { // 监听删除操作 + var index = layer.open({ + title: lang.carlist.operations.sku, + type: 2, + shade: 0.2, + maxmin: true, + shadeClose: false, + area: ['80%', '90%'], + content: '../page/sku.html?id='+data.id + }); } }); diff --git a/assets/js/sku.js b/assets/js/sku.js new file mode 100644 index 0000000..b40d72b --- /dev/null +++ b/assets/js/sku.js @@ -0,0 +1,225 @@ +layui.use(['form', 'table'], function () { + var $ = layui.jquery, + form = layui.form, + table = layui.table; + // 获取当前语言 + var currentLang = localStorage.getItem('language') || 'zh'; + var lang = langConfig[currentLang]; + var operationBar = $('#currentTableBar').html(); + if (operationBar) { + var newHtml = operationBar + .replace(/编辑/g, lang.carlist.operations.edit) + .replace(/删除/g, lang.carlist.operations.delete) + $('#currentTableBar').html(newHtml); + } + var toolbarDemo = $('#toolbarDemo').html(); + if (toolbarDemo) { + var newHtmlt = toolbarDemo + .replace(/添加/g, lang.userlist.add) + $('#toolbarDemo').html(newHtmlt); + } + var tableInitb = table.render({ + elem: '#currentTableId', + url: lang.baseUrl+'console/vehicle/new/sku/list?id='+getQueryString('id'), + headers: { + Authorization: 'Bearer ' + sessionStorage.tokencar, + lang:localStorage.getItem('language')?localStorage.getItem('language'):"zh" + }, + toolbar: '#toolbarDemo', + defaultToolbar: ['filter', 'exports', 'print', { + title: '提示', + layEvent: 'LAYTABLE_TIPS', + icon: 'layui-icon-tips' + }], + parseData: function(res) { //res 即为原始返回的数据 + console.log(res) + return { + "code": 0, //解析接口状态 + "msg": 'message', //解析提示文本 + "count": res.data.meta.total, //解析数据长度 + "data": res.data.list //解析数据列表 + }; + }, + cols: [[ + {type: "checkbox"}, + {field: 'id', title: 'ID', sort: true}, + {field: 'name', title: lang.alllist.name}, + {field: 'status',title:lang.alllist.status, + // templet: function(d){ + // var img= '' + // return img; + // }, + templet: function (d) { + form.on("switch(status)", function (data) { + let load = layer.load(); + let postData = {}; + postData.status = data.elem.checked ? 1 : 0; + postData.id = d.id; + postData.name = d.name; + self.brandupdate({ + type:'post', + data: postData, + successCallBack: function (result) { + layer.msg(result.message) + layer.close(load); + }, + failCallBack: function (result) { + layer.msg(result.message) + layer.closeAll('loading'); + tableInitb.reload() + } + }) + }); + let checked = d['status'] === 1 ? "checked" : ""; + return ''; + } + }, + {title: lang.alllist.operation, minWidth: 150, toolbar: '#currentTableBar', align: "center"} + ]], + limits: [10, 15, 20, 25, 50, 100], + limit: 10, + page: true, + skin: 'line', + done: function(res, curr, count){ + window.i18n.updatePageContent(); + } + }); + // 监听搜索操作 + form.on('submit(data-search-btn)', function (data) { + var result = JSON.stringify(data.field); + + table.reload('currentTableId', { + page: { + curr: 1 + } + , where: { + name: data.field.name, + status: data.field.status, + } + }, 'data'); + + return false; + }); + + /** + * toolbar监听事件 + */ + table.on('toolbar(currentTableFilter)', function (obj) { + if (obj.event === 'add') { // 监听添加操作 + var index = layer.open({ + title: 'SKU '+lang.userlist.add, + type: 2, + shade: 0.2, + maxmin:true, + shadeClose: true, + area: ['80%', '90%'], + btn: [lang.audit.confirm, lang.audit.cancel], + content: '../page/table/skuadd.html?vehicle_id='+getQueryString('id'), + yes: function (index, layero) { + var iframeWindow = window['layui-layer-iframe' + index] + , submitID = 'saveBtn' + , submit = layero.find('iframe').contents().find('#' + submitID); + //监听提交 + iframeWindow.layui.form.on('submit(' + submitID + ')', function (data) { + var field = data.field; //获取提交的字段 + const result = regroupIndexedFields(field,'skuAttributes'); + self.skuadd({ + type: 'post', + data: result, + successCallBack: function (result) { + layer.msg(result.message) + layer.close(index); //关闭弹层 + tableInitb.reload() + }, + failCallBack: function (result) { + alert(result.message); + } + }) + // console.log(result); + // console.log(field) + + }); + submit.trigger('click'); + } + }); + $(window).on("resize", function () { + layer.full(index); + }); + } else if (obj.event === 'delete') { // 监听删除操作 + var checkStatus = table.checkStatus('currentTableId') + , data = checkStatus.data; + layer.alert(JSON.stringify(data)); + } + }); + + //监听表格复选框选择 + table.on('checkbox(currentTableFilter)', function (obj) { + console.log(obj) + }); + + table.on('tool(currentTableFilter)', function (obj) { + var data = obj.data; + if (obj.event === 'edit') { + + var index = layer.open({ + title:'SKU '+lang.audit.edit_title, + type: 2, + shade: 0.2, + maxmin:true, + shadeClose: true, + area: ['80%', '90%'], + btn: [lang.audit.confirm, lang.audit.cancel], + content: '../page/table/skuedit.html?id='+data.id+'&vehicle_id='+getQueryString('id'), + yes: function(index, layero){ + var iframeWindow = window['layui-layer-iframe'+ index] + ,submitID = 'saveBtn' + ,submit = layero.find('iframe').contents().find('#'+ submitID); + //监听提交 + iframeWindow.layui.form.on('submit('+ submitID +')', function(data){ + var field = data.field; //获取提交的字段 + const result = regroupIndexedFields(field,'skuAttributes'); + // console.log(result) + // console.log(field) + self.skuupdate({ + type:'post', + data:result, + successCallBack: function(result){ + layer.msg(result.message) + layer.close(index); //关闭弹层 + tableInitb.reload() + }, + failCallBack: function(result){ + alert(result.message); + } + }) + }); + submit.trigger('click'); + } + }); + $(window).on("resize", function () { + layer.full(index); + }); + return false; + }else if (obj.event === 'delete') { + layer.confirm(lang.audit.confirm_delete, function(index) { + self.skudelete({ + type:'post', + data:{id:data.id}, + successCallBack: function(result){ + layer.msg(result.message, { + icon: 1, + time: 1000 + }); + tableInitb.reload() + }, + failCallBack: function(result){ + alert(result.message); + window.location.reload() + } + }) + + }); + } + }); + + }); \ No newline at end of file diff --git a/assets/js/tablei18n.js b/assets/js/tablei18n.js index 94ac099..c576033 100755 --- a/assets/js/tablei18n.js +++ b/assets/js/tablei18n.js @@ -1,8 +1,9 @@ // 多语言配置 - +// var baseUrl = 'https://server.orzar.shop/' +var baseUrllang = "https://usedcar.server.hnxinyouhe.com/"; var langConfig = { 'zh': { - 'baseUrl':"https://server.orzar.shop/", + 'baseUrl':baseUrllang, 'select_placeholder': '请选择', userlist:{ 'search_info': '搜索信息', @@ -60,7 +61,8 @@ var langConfig = { 'edit': '编辑', 'delete': '删除', 'check': '审核', - 'show': '详情' + 'show': '详情', + 'sku':"属性" } }, audit:{ @@ -138,7 +140,7 @@ var langConfig = { } }, 'en': { - 'baseUrl':"https://server.orzar.shop/", + 'baseUrl':baseUrllang, 'select_placeholder': 'Please Select', userlist:{ 'search_info': 'Search Information', @@ -196,7 +198,8 @@ var langConfig = { 'edit': 'Edit', 'delete': 'Delete', 'check': 'Check', - 'show': 'Details' + 'show': 'Details', + 'sku':'Attribute' }, }, audit:{ @@ -262,7 +265,7 @@ var langConfig = { } }, 'ru':{ - "baseUrl": "https://server.orzar.shop/", + "baseUrl": baseUrllang, "select_placeholder": "Выберите", "userlist": { "search_info": "Поиск информации", @@ -320,7 +323,8 @@ var langConfig = { "edit": "Редактировать", "delete": "Удалить", "check": "Проверить", - "show": "Подробности" + "show": "Подробности", + 'sku':'Свойства' } }, "audit": { diff --git a/assets/main.js b/assets/main.js index bb12baa..4122937 100755 --- a/assets/main.js +++ b/assets/main.js @@ -3,8 +3,8 @@ var ajax = null,queue = []; var isAjaxLock=false; var Utils={} var userinfowifi=''; -var baseUrl = "https://server.orzar.shop/"; -// var baseUrl = "https://usedcar.server.hnxinyouhe.com/"; +// var baseUrl = "https://server.orzar.shop/"; +var baseUrl = "https://usedcar.server.hnxinyouhe.com/"; // var baseUrl = "http://192.168.50.6:8787/"; if(sessionStorage.wifiuserinfo){ userinfowifi=JSON.parse(sessionStorage.wifiuserinfo) @@ -454,4 +454,84 @@ self.vehiclenewdelete = function(options){ options.url = baseUrl+"console/vehicle/new/"+options.data.id+"/delete" return ajax(options); }; -//邮箱管理 \ No newline at end of file +//邮箱管理 + +//属性管理 +//属性分类 +self.categoriesadd = function(options){ + options = options ? options : {}; + options.url = baseUrl+"console/vehicle/new/categories/add"; + return ajax(options); +}; +self.categoriesdetail = function(options){ + options = options ? options : {}; + options.url = baseUrl+"console/vehicle/new/categories/"+options.data.id+"/detail" + return ajax(options); +}; +self.categoriesupdate = function(options){ + options = options ? options : {}; + options.url = baseUrl+"console/vehicle/new/categories/"+options.data.id+"/update" + return ajax(options); +}; +self.categoriesdelete = function(options){ + options = options ? options : {}; + options.url = baseUrl+"console/vehicle/new/categories/"+options.data.id+"/delete" + return ajax(options); +}; +self.categoriespreset = function(options){ + options = options ? options : {}; + options.url = baseUrl+"console/vehicle/new/categories/preset"; + return ajax(options); +}; +//属性列表 +self.attributesadd = function(options){ + options = options ? options : {}; + options.url = baseUrl+"console/vehicle/new/attributes/add"; + return ajax(options); +}; +self.attributesdetail = function(options){ + options = options ? options : {}; + options.url = baseUrl+"console/vehicle/new/attributes/"+options.data.id+"/detail" + return ajax(options); +}; +self.attributesupdate = function(options){ + options = options ? options : {}; + options.url = baseUrl+"console/vehicle/new/attributes/"+options.data.id+"/update" + return ajax(options); +}; +self.attributesdelete = function(options){ + options = options ? options : {}; + options.url = baseUrl+"console/vehicle/new/attributes/"+options.data.id+"/delete" + return ajax(options); +}; +self.attributespreset = function(options){ + options = options ? options : {}; + options.url = baseUrl+"console/vehicle/new/attributes/preset"; + return ajax(options); +}; +self.valuespreset = function(options){ + options = options ? options : {}; + options.url = baseUrl+"console/vehicle/new/values/preset"; + return ajax(options); +}; +//sku +self.skuadd = function(options){ + options = options ? options : {}; + options.url = baseUrl+"console/vehicle/new/sku/add"; + return ajax(options); +}; +self.skudetail = function(options){ + options = options ? options : {}; + options.url = baseUrl+"console/vehicle/new/sku/"+options.data.id+"/detail" + return ajax(options); +}; +self.skuupdate = function(options){ + options = options ? options : {}; + options.url = baseUrl+"console/vehicle/new/sku/"+options.data.id+"/update" + return ajax(options); +}; +self.skudelete = function(options){ + options = options ? options : {}; + options.url = baseUrl+"console/vehicle/new/sku/"+options.data.id+"/delete" + return ajax(options); +}; \ No newline at end of file diff --git a/assets/public.js b/assets/public.js index 8407b03..3b459f9 100755 --- a/assets/public.js +++ b/assets/public.js @@ -8,6 +8,11 @@ $(".more-btn").click(function () { } return false; }) +function getQueryString(name) { + var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)", "i"); + var r = window.location.search.substr(1).match(reg); + if (r != null) return unescape(r[2]); return null; +} /** * 浏览页面顶部搜索框展开收回控制 */ @@ -178,6 +183,85 @@ function seoselectfn(form,istrue){ } }) } +//属性分类 +function categoriespresetfn(form,istrue){ + self.categoriespreset({ + type:'get', + successCallBack: function(result){ + $("#category_id").empty(); + if(istrue){ + + }else{ + $("#category_id").append("") + } + $.each(result.data,function(){ + $("#category_id").append("") + }); + window.i18n.updatePageContent(); + form.render(); + }, + failCallBack: function(result){ + alert(result.message); + } + }) +} +//属性 +function attributespresetfn(form,istrue,context){ + var $attributeSelect; + if (context) { + $attributeSelect = context.find(".attribute_id"); + } else { + $attributeSelect = $(".attribute_id"); + } + self.attributespreset({ + type:'get', + successCallBack: function(result){ + $attributeSelect.empty(); + if(istrue){ + + }else{ + $attributeSelect.append("") + } + $.each(result.data,function(){ + $attributeSelect.append("") + }); + window.i18n.updatePageContent(); + form.render('select'); + }, + failCallBack: function(result){ + alert(result.message); + } + }) +} +function valuespresetfn(form,istrue,id,context){ + var $valueSelect; + if (context) { + $valueSelect = context.find(".value_id"); + } else { + $valueSelect = $(".value_id"); + } + self.valuespreset({ + type:'get', + data:{id:id}, + successCallBack: function(result){ + $valueSelect.empty(); + if(istrue){ + + }else{ + $valueSelect.append("") + } + $.each(result.data,function(){ + $valueSelect.append("") + }); + window.i18n.updatePageContent(); + form.render('select'); + }, + failCallBack: function(result){ + alert(result.message); + } + }) +} + // 添加 function addFeature(id,form,title,content,titlevalue1,contentvalue1,contentid) { var index = $('#'+id+' .feature-item').length; @@ -189,7 +273,7 @@ function addFeature(id,form,title,content,titlevalue1,contentvalue1,contentid) {
- +
@@ -213,13 +297,13 @@ function addFeature(id,form,title,content,titlevalue1,contentvalue1,contentid) { function addFeature1(id,form,title,content,titlevalue1,contentvalue1,contentid) { var index = $('#'+id+' .feature-item1').length; var titlevalue=titlevalue1?titlevalue1:'' - var contentvalue=contentvalue1?contentvalue1:'' + var contentvalue=contentvalue1?contentvalue1:'' var contentids=contentid?contentid:'' var html = `
-
+
@@ -248,7 +332,7 @@ function addIntro(id,form,content,contentvalue,contentid) { var html = `
-
+
@@ -264,7 +348,25 @@ function addIntro(id,form,content,contentvalue,contentid) { window.i18n.updatePageContent(); form.render(); } +function regroupIndexedFields(obj,arrKeyName = 'value') { + const value = []; + const rest = {}; + Object.keys(obj).forEach(key => { + const match = key.match(/^(.+)\[(\d+)\]$/); + if (match) { + const field = match[1]; + const idx = parseInt(match[2]); + if (!value[idx]) value[idx] = {}; + value[idx][field] = obj[key]; + } else { + rest[key] = obj[key]; + } + }); + // 动态设置 key + rest[arrKeyName] = value.filter(item => item !== undefined); + return rest; +} function objentries(field,id,id2,name,value){ const banners = []; let i = 0; @@ -276,7 +378,7 @@ function objentries(field,id,id2,name,value){ i++; } return banners; -} +} function objentriesedt(field,id,id2,id3,name,value,idc){ const banners = []; let i = 0; @@ -295,9 +397,9 @@ function objentries1(field,id,name,cid){ let i = 0; while (field[`${id}[${i}]`] !== undefined) { var obj={}; - obj[name] = field[`${id}[${i}]`] - if(cid){ - obj['id'] = field[`${cid}[${i}]`] + obj[name] = field[`${id}[${i}]`] + if(cid){ + obj['id'] = field[`${cid}[${i}]`] } banners.push(obj); i++; @@ -316,22 +418,22 @@ function transformDataall(obj){ result['album'] = objentries(obj,'pic',"alt",'pic',"alt") result['content'] = objentries1(obj,'intro',"content") return result; -} +} function transformDataalledt(obj,brand){ const result = {}; for (const key in obj) { if (!key.includes('[') && !key.includes(']')) { result[key] = obj[key]; } - } - if(brand){ - result['traits'] = objentriesedt(obj,'title',"content","idt",'title',"content",'id') - result['banners'] = objentriesedt(obj,'pic',"alt","idimg",'pic',"alt",'id') - }else{ - result['trait'] = objentriesedt(obj,'title',"content","idt",'title',"content",'id') - result['asked'] = objentriesedt(obj,'titlep',"contentp","idp",'title',"content",'id') - result['album'] = objentriesedt(obj,'pic',"alt","idimg",'pic',"alt",'id') - result['content'] = objentries1(obj,'intro',"content",'idc') + } + if(brand){ + result['traits'] = objentriesedt(obj,'title',"content","idt",'title',"content",'id') + result['banners'] = objentriesedt(obj,'pic',"alt","idimg",'pic',"alt",'id') + }else{ + result['trait'] = objentriesedt(obj,'title',"content","idt",'title',"content",'id') + result['asked'] = objentriesedt(obj,'titlep',"contentp","idp",'title',"content",'id') + result['album'] = objentriesedt(obj,'pic',"alt","idimg",'pic',"alt",'id') + result['content'] = objentries1(obj,'intro',"content",'idc') } return result; } diff --git a/index.html b/index.html index f64ce31..4b0f02d 100644 --- a/index.html +++ b/index.html @@ -157,8 +157,8 @@ $(this).addClass('icon-check'); } }); - var baseUrl = "https://server.orzar.shop/"; - // var baseUrl = "https://usedcar.server.hnxinyouhe.com/"; + // var baseUrl = "https://server.orzar.shop/"; + var baseUrl = "https://usedcar.server.hnxinyouhe.com/"; // 进行登录操作 form.on('submit(login)', function (data) { data = data.field; diff --git a/page/attribute.html b/page/attribute.html new file mode 100644 index 0000000..e98d9da --- /dev/null +++ b/page/attribute.html @@ -0,0 +1,73 @@ + + + + + USED CAR + + + + + + + +
+
+ +
+ +
+
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+
+
+
+
+ + + +
+ + + +
+
+ + + + + + + + + + + \ No newline at end of file diff --git a/page/categories.html b/page/categories.html new file mode 100644 index 0000000..e3964cb --- /dev/null +++ b/page/categories.html @@ -0,0 +1,62 @@ + + + + + USED CAR + + + + + + + +
+
+ +
+ +
+
+
+
+ +
+ +
+
+
+ +
+
+
+
+
+ + + +
+ + + +
+
+ + + + + + + + + + \ No newline at end of file diff --git a/page/newcarlist.html b/page/newcarlist.html index f24832f..8b044df 100755 --- a/page/newcarlist.html +++ b/page/newcarlist.html @@ -74,9 +74,11 @@ diff --git a/page/sku.html b/page/sku.html new file mode 100644 index 0000000..2868f58 --- /dev/null +++ b/page/sku.html @@ -0,0 +1,73 @@ + + + + + USED CAR + + + + + + + +
+
+ +
+ +
+
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+
+
+
+
+ + + +
+ + + +
+
+ + + + + + + + + + + \ No newline at end of file diff --git a/page/table/attributeadd.html b/page/table/attributeadd.html new file mode 100644 index 0000000..d425a65 --- /dev/null +++ b/page/table/attributeadd.html @@ -0,0 +1,152 @@ + + + + + layui + + + + + + + + +
+
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+
+ +
+
+ +
+
+
+ +
+
+ +
+
+
+ + + + + + + + \ No newline at end of file diff --git a/page/table/attributeedit.html b/page/table/attributeedit.html new file mode 100644 index 0000000..382acaa --- /dev/null +++ b/page/table/attributeedit.html @@ -0,0 +1,195 @@ + + + + + layui + + + + + + + + +
+
+ +
+ + +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+
+ +
+
+ +
+
+
+ +
+
+ +
+
+
+ + + + + + + + \ No newline at end of file diff --git a/page/table/categoriesadd.html b/page/table/categoriesadd.html new file mode 100644 index 0000000..248a4bb --- /dev/null +++ b/page/table/categoriesadd.html @@ -0,0 +1,68 @@ + + + + + layui + + + + + + + + +
+
+ +
+ +
+
+
+ +
+ +
+
+ +
+
+ +
+
+
+ + + + + + + + \ No newline at end of file diff --git a/page/table/categoriesedit.html b/page/table/categoriesedit.html new file mode 100644 index 0000000..c05586c --- /dev/null +++ b/page/table/categoriesedit.html @@ -0,0 +1,90 @@ + + + + + layui + + + + + + + + +
+
+ +
+ + +
+
+
+ +
+ +
+
+ +
+
+ +
+
+
+
+ + + + + + + + \ No newline at end of file diff --git a/page/table/skuadd.html b/page/table/skuadd.html new file mode 100644 index 0000000..b42dae0 --- /dev/null +++ b/page/table/skuadd.html @@ -0,0 +1,195 @@ + + + + + layui + + + + + + + + +
+
+ +
+ + +
+
+
+ +
+ + +
+
+
+ +
+
+
+
+ +
+
+
+
+
+ +
+
+
+ + + + + + + + \ No newline at end of file diff --git a/page/table/skuedit.html b/page/table/skuedit.html new file mode 100644 index 0000000..d4d6088 --- /dev/null +++ b/page/table/skuedit.html @@ -0,0 +1,243 @@ + + + + + layui + + + + + + + + +
+
+ +
+ + + +
+
+
+ +
+ + +
+
+
+ +
+
+
+ +
+
+
+ +
+
+ +
+
+
+
+ + + + + + + + \ No newline at end of file