This commit is contained in:
浅念
2025-06-20 17:05:56 +08:00
parent b2a1d5e84e
commit 1374d1938a
23 changed files with 2248 additions and 180 deletions
+23
View File
@@ -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"
}
]
}
]
}
+1
View File
@@ -89,6 +89,7 @@ body {
}
.check,
.show,
.sku,
.edit {
margin-right: 10px;
}
+247
View File
@@ -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= '<input type="checkbox" checked="" name="open" lay-skin="switch" lay-filter="switchTest" lay-text="ON|OFF">'
// 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 '<input type="checkbox" value="'+d.status+'" lay-filter="status" lay-skin="switch" lay-text="" '+checked+'/>';
}
},
{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()
}
})
});
}
});
});
+191
View File
@@ -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()
}
})
});
}
});
});
+83 -73
View File
@@ -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",
+83 -73
View File
@@ -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": "Выйти",
+11 -1
View File
@@ -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":"图片尺寸",
+15 -3
View File
@@ -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
});
}
});
+225
View File
@@ -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= '<input type="checkbox" checked="" name="open" lay-skin="switch" lay-filter="switchTest" lay-text="ON|OFF">'
// 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 '<input type="checkbox" value="'+d.status+'" lay-filter="status" lay-skin="switch" lay-text="" '+checked+'/>';
}
},
{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()
}
})
});
}
});
});
+11 -7
View File
@@ -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": {
+83 -3
View File
@@ -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);
};
//邮箱管理
//邮箱管理
//属性管理
//属性分类
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);
};
+120 -18
View File
@@ -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("<option value='' data-i18n='select'></option>")
}
$.each(result.data,function(){
$("#category_id").append("<option value='"+this.id+"'>"+this.category_name+"</option>")
});
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("<option data-img='' value='' data-i18n='select'></option>")
}
$.each(result.data,function(){
$attributeSelect.append("<option data-img='"+this.is_img+"' value='"+this.id+"'>"+this.attribute_name+"</option>")
});
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("<option value='' data-i18n='select'></option>")
}
$.each(result.data,function(){
$valueSelect.append("<option value='"+this.id+"'>"+this.value_name+"</option>")
});
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) {
<div class="layui-form-item">
<label class="layui-form-label" data-i18n="alls.title"></label>
<div class="layui-input-block">
<input type="text" name="title[${index}]" data-i18n-placeholder="alls.title_placeholder" value="${titlevalue}" class="layui-input">
<input type="text" name="title[${index}]" data-i18n-placeholder="alls.title_placeholder" value="${titlevalue}" class="layui-input">
<input type="hidden" name="idt[${index}]" value="${contentids}" />
</div>
</div>
@@ -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 = `
<div class="feature-item1" style="margin-bottom: 15px; padding: 15px; border: 1px solid #e6e6e6; border-radius: 4px;">
<div class="layui-form-item">
<label class="layui-form-label" data-i18n="alls.problem"></label>
<div class="layui-input-block">
<div class="layui-input-block">
<input type="hidden" name="idp[${index}]" value="${contentids}" />
<input type="text" name="titlep[${index}]" data-i18n-placeholder="alls.problem_placeholder" value="${titlevalue}" class="layui-input">
</div>
@@ -248,7 +332,7 @@ function addIntro(id,form,content,contentvalue,contentid) {
var html = `
<div class="intro-item" style="margin-bottom: 15px; padding: 15px; border: 1px solid #e6e6e6; border-radius: 4px;">
<div class="layui-form-item">
<div class="layui-input-block" style="margin-left: 0;">
<div class="layui-input-block" style="margin-left: 0;">
<input type="hidden" name="idc[${index}]" value="${contentids}" />
<textarea name="intro[${index}]" data-i18n-placeholder="alls.introduce_placeholder" class="layui-textarea" style="min-height: 100px;">${contentvalues}</textarea>
</div>
@@ -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;
}
+2 -2
View File
@@ -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;
+73
View File
@@ -0,0 +1,73 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>USED CAR</title>
<meta name="renderer" content="webkit">
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
<link rel="stylesheet" href="../lib/layui-v2.6.3/css/layui.css" media="all">
<link rel="stylesheet" href="../assets/css/public.css" media="all">
</head>
<body>
<div class="layuimini-container">
<div class="layuimini-main">
<fieldset class="table-search-fieldset">
<legend data-i18n="search_info"></legend>
<div style="margin: 10px 10px 10px 10px">
<form class="layui-form layui-form-pane" action="">
<div class="layui-form-item">
<div class="layui-inline">
<label class="layui-form-label" data-i18n="seach.name"></label>
<div class="layui-input-inline">
<input type="text" name="name" autocomplete="off" class="layui-input">
</div>
</div>
<div class="layui-inline">
<label class="layui-form-label" data-i18n="seach.status"></label>
<div class="layui-input-inline">
<select name="status" class="layui-input">
<option value="" data-i18n="select"></option>
<option value="1" data-i18n="selectlist.status1"></option>
<option value="0" data-i18n="selectlist.status2"></option>
</select>
</div>
</div>
<div class="layui-inline">
<button type="submit" class="layui-btn layui-btn-normal" lay-submit lay-filter="data-search-btn"><i class="layui-icon"></i> <span data-i18n="btn.search"></span></button>
</div>
</div>
</form>
</div>
</fieldset>
<script type="text/html" id="toolbarDemo">
<div class="layui-btn-container">
<button class="layui-btn layui-btn-normal layui-btn-sm data-add-btn" lay-event="add"> 添加 </button>
<!-- <button class="layui-btn layui-btn-sm layui-btn-danger data-delete-btn" lay-event="delete"> 删除 </button> -->
</div>
</script>
<table class="layui-hide" id="currentTableId" lay-filter="currentTableFilter"></table>
<script type="text/html" id="currentTableBar">
<a class="edit" lay-event="edit">编辑</a>
<a class="delete" lay-event="delete">删除</a>
</script>
</div>
</div>
<script src="../lib/layui-v2.6.3/layui.js" charset="utf-8"></script>
<script src="../lib/jquery-3.4.1/jquery-3.4.1.min.js" charset="utf-8"></script>
<script src="../../assets/main.js" charset="utf-8"></script>
<script src="../assets/js/tablei18n.js"></script>
<script src="../assets/js/i18n2.js"></script>
<script src="../assets/public.js"></script>
<script src="../assets/js/attribute.js" type="text/javascript" charset="utf-8"></script>
<script>
</script>
</body>
</html>
+62
View File
@@ -0,0 +1,62 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>USED CAR</title>
<meta name="renderer" content="webkit">
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
<link rel="stylesheet" href="../lib/layui-v2.6.3/css/layui.css" media="all">
<link rel="stylesheet" href="../assets/css/public.css" media="all">
</head>
<body>
<div class="layuimini-container">
<div class="layuimini-main">
<fieldset class="table-search-fieldset">
<legend data-i18n="search_info"></legend>
<div style="margin: 10px 10px 10px 10px">
<form class="layui-form layui-form-pane" action="">
<div class="layui-form-item">
<div class="layui-inline">
<label class="layui-form-label" data-i18n="seach.name"></label>
<div class="layui-input-inline">
<input type="text" name="category_name" autocomplete="off" class="layui-input">
</div>
</div>
<div class="layui-inline">
<button type="submit" class="layui-btn layui-btn-normal" lay-submit lay-filter="data-search-btn"><i class="layui-icon"></i> <span data-i18n="btn.search"></span></button>
</div>
</div>
</form>
</div>
</fieldset>
<script type="text/html" id="toolbarDemo">
<div class="layui-btn-container">
<button class="layui-btn layui-btn-normal layui-btn-sm data-add-btn" lay-event="add"> 添加 </button>
<!-- <button class="layui-btn layui-btn-sm layui-btn-danger data-delete-btn" lay-event="delete"> 删除 </button> -->
</div>
</script>
<table class="layui-hide" id="currentTableId" lay-filter="currentTableFilter"></table>
<script type="text/html" id="currentTableBar">
<a class="edit" lay-event="edit">编辑</a>
<a class="delete" lay-event="delete">删除</a>
</script>
</div>
</div>
<script src="../lib/layui-v2.6.3/layui.js" charset="utf-8"></script>
<script src="../lib/jquery-3.4.1/jquery-3.4.1.min.js" charset="utf-8"></script>
<script src="../../assets/main.js" charset="utf-8"></script>
<script src="../assets/js/tablei18n.js"></script>
<script src="../assets/js/i18n2.js"></script>
<script src="../assets/js/categories.js" type="text/javascript" charset="utf-8"></script>
<script>
</script>
</body>
</html>
+2
View File
@@ -74,9 +74,11 @@
<script type="text/html" id="currentTableBar">
<a class="show" lay-event="show">详情</a>
<a class="sku" lay-event="sku">属性</a>
{{# if(d.info_status==0){ }}
<a class="check" lay-event="check">审核</a>
{{# } }}
<a class="edit" lay-event="edit">编辑</a>
<a class="delete" lay-event="delete">删除</a>
</script>
+73
View File
@@ -0,0 +1,73 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>USED CAR</title>
<meta name="renderer" content="webkit">
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
<link rel="stylesheet" href="../lib/layui-v2.6.3/css/layui.css" media="all">
<link rel="stylesheet" href="../assets/css/public.css" media="all">
</head>
<body>
<div class="layuimini-container">
<div class="layuimini-main">
<fieldset class="table-search-fieldset">
<legend data-i18n="search_info"></legend>
<div style="margin: 10px 10px 10px 10px">
<form class="layui-form layui-form-pane" action="">
<div class="layui-form-item">
<div class="layui-inline">
<label class="layui-form-label" data-i18n="seach.name"></label>
<div class="layui-input-inline">
<input type="text" name="name" autocomplete="off" class="layui-input">
</div>
</div>
<div class="layui-inline">
<label class="layui-form-label" data-i18n="seach.status"></label>
<div class="layui-input-inline">
<select name="status" class="layui-input">
<option value="" data-i18n="select"></option>
<option value="1" data-i18n="selectlist.status1"></option>
<option value="0" data-i18n="selectlist.status2"></option>
</select>
</div>
</div>
<div class="layui-inline">
<button type="submit" class="layui-btn layui-btn-normal" lay-submit lay-filter="data-search-btn"><i class="layui-icon"></i> <span data-i18n="btn.search"></span></button>
</div>
</div>
</form>
</div>
</fieldset>
<script type="text/html" id="toolbarDemo">
<div class="layui-btn-container">
<button class="layui-btn layui-btn-normal layui-btn-sm data-add-btn" lay-event="add"> 添加 </button>
<!-- <button class="layui-btn layui-btn-sm layui-btn-danger data-delete-btn" lay-event="delete"> 删除 </button> -->
</div>
</script>
<table class="layui-hide" id="currentTableId" lay-filter="currentTableFilter"></table>
<script type="text/html" id="currentTableBar">
<a class="edit" lay-event="edit">编辑</a>
<a class="delete" lay-event="delete">删除</a>
</script>
</div>
</div>
<script src="../lib/layui-v2.6.3/layui.js" charset="utf-8"></script>
<script src="../lib/jquery-3.4.1/jquery-3.4.1.min.js" charset="utf-8"></script>
<script src="../../assets/main.js" charset="utf-8"></script>
<script src="../assets/js/tablei18n.js"></script>
<script src="../assets/js/i18n2.js"></script>
<script src="../assets/public.js"></script>
<script src="../assets/js/sku.js" type="text/javascript" charset="utf-8"></script>
<script>
</script>
</body>
</html>
+152
View File
@@ -0,0 +1,152 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>layui</title>
<meta name="renderer" content="webkit">
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
<link rel="stylesheet" href="../../lib/layui-v2.6.3/css/layui.css" media="all">
<link rel="stylesheet" href="../../assets/css/public.css" media="all">
<style>
body {
background-color: #ffffff;
}
.feature-item{
border: 1px solid #ccc;
padding: 10px;
margin-bottom: 10px;
}
</style>
</head>
<body>
<div class="layui-form layuimini-form">
<div class="layui-form-item">
<label class="layui-form-label required" data-i18n="seach.name"></label>
<div class="layui-input-block">
<input type="text" name="attribute_name" lay-verify="required" lay-reqtext="名称不能为空" data-i18n-placeholder="pleaseenter" value="" class="layui-input">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label required" data-i18n="Belongingtype"></label>
<div class="layui-input-block">
<select id="category_id" name="category_id" class="layui-input">
</select>
</div>
</div>
<div class="layui-form-item layui-form-text">
<label class="layui-form-label">是否必传图片</label>
<div class="layui-input-block">
<select name="is_img" class="layui-input">
<option value="0">无图</option>
<option value="1">必传</option>
<option value="2">可选</option>
</select>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">类型</label>
<div class="layui-input-block">
<select name="input_type" lay-filter="input_type" class="layui-input">
<option value="color">color</option>
<option value="text">text</option>
</select>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">属性值</label>
<div class="layui-input-block">
<div class="feature-list" id="featureList" >
</div>
<div style="margin-top: 10px;">
<button type="button" class="layui-btn layui-btn-normal" id="addFeature">
<i class="layui-icon">&#xe654;</i><span data-i18n="btn.add"></span>
</button>
</div>
</div>
</div>
<div class="layui-form-item layui-hide">
<div class="layui-input-block bootm">
<input type="button" lay-submit lay-filter="saveBtn" id="saveBtn" value="确认">
</div>
</div>
</div>
<script src="../../lib/layui-v2.6.3/layui.js" charset="utf-8"></script>
<script src="../../lib/jquery-3.4.1/jquery-3.4.1.min.js" charset="utf-8"></script>
<script src="../../assets/main.js" charset="utf-8"></script>
<script src="../../assets/public.js" type="text/javascript" charset="utf-8"></script>
<script src="../../assets/js/i18n1.js"></script>
<script>
layui.use(['form'], function () {
var form = layui.form,
layer = layui.layer,
$ = layui.$;
categoriespresetfn(form,true)
// 监听类型选择变化
form.on('select(input_type)', function(data){
var type = data.value;
// 清空之前的内容
$('#featureList').empty();
// 重新渲染表单
form.render();
});
// 添加属性值
$('#addFeature').on('click', function(){
var type = $('select[name="input_type"]').val();
var index = $('#featureList .feature-item').length;
var html = `<div class="feature-item">
<div class="layui-form-item">
<label class="layui-form-label required" data-i18n="seach.name"></label>
<div class="layui-input-block">
<input type="text" name="value_name[${index}]" data-i18n-placeholder="pleaseenter" value="" class="layui-input">
</div></div>`
if(type === 'color') {
html += `<div class="layui-form-item color-value">
<label class="layui-form-label required">颜色值</label>
<div class="layui-input-block">
<input type="text" name="color_code[${index}]" lay-verify="required" lay-reqtext="名称不能为空" data-i18n-placeholder="pleaseenter" value="" class="layui-input">
</div></div>`
}
html+= `<div class="layui-input-block" style="margin-left: 0; text-align: right;">
<button type="button" class="layui-btn layui-btn-danger layui-btn-sm delete-feature">
<i class="layui-icon">&#xe640;</i><span data-i18n="btn.delete"></span>
</button>
</div>`
html += '</div>';
$('#featureList').append(html);
window.i18n.updatePageContent();
form.render();
});
// 删除属性值按钮点击事件
$(document).on('click', '.delete-feature', function() {
var type = $('select[name="input_type"]').val();
$(this).closest('.feature-item').remove();
// 重新排序索引
$('#featureList .feature-item').each(function(index) {
$(this).find('input[name^="value_name"]').attr('name', 'value_name[' + index + ']');
if(type === 'color') {
$(this).find('input[name^="color_code"]').attr('name', 'color_code[' + index + ']');
}
});
});
//监听提交
form.on('submit(saveBtn)', function (data) {
var index = layer.alert(JSON.stringify(data.field), {
title: '最终的提交信息'
}, function () {
// 关闭弹出层
layer.close(index);
var iframeIndex = parent.layer.getFrameIndex(window.name);
parent.layer.close(iframeIndex);
});
return false;
});
});
</script>
</body>
</html>
+195
View File
@@ -0,0 +1,195 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>layui</title>
<meta name="renderer" content="webkit">
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
<link rel="stylesheet" href="../../lib/layui-v2.6.3/css/layui.css" media="all">
<link rel="stylesheet" href="../../assets/css/public.css" media="all">
<style>
body {
background-color: #ffffff;
}
.feature-item{
border: 1px solid #ccc;
padding: 10px;
margin-bottom: 10px;
}
</style>
</head>
<body>
<div class="layui-form layuimini-form" lay-filter="edit">
<div class="layui-form-item">
<label class="layui-form-label required" data-i18n="seach.name"></label>
<div class="layui-input-block">
<input type="hidden" name="id" id="idedt" value="" />
<input type="text" name="attribute_name" lay-verify="required" lay-reqtext="名称不能为空" data-i18n-placeholder="pleaseenter" value="" class="layui-input">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label required" data-i18n="Belongingtype"></label>
<div class="layui-input-block">
<select id="category_id" name="category_id" class="layui-input">
</select>
</div>
</div>
<div class="layui-form-item layui-form-text">
<label class="layui-form-label">是否必传图片</label>
<div class="layui-input-block">
<select name="is_img" class="layui-input">
<option value="0">无图</option>
<option value="1">必传</option>
<option value="2">可选</option>
</select>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">类型</label>
<div class="layui-input-block">
<select name="input_type" lay-filter="input_type" class="layui-input">
<option value="color">color</option>
<option value="text">text</option>
</select>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">属性值</label>
<div class="layui-input-block">
<div class="feature-list" id="featureList" >
</div>
<div style="margin-top: 10px;">
<button type="button" class="layui-btn layui-btn-normal" id="addFeature">
<i class="layui-icon">&#xe654;</i><span data-i18n="btn.add"></span>
</button>
</div>
</div>
</div>
<div class="layui-form-item layui-hide">
<div class="layui-input-block bootm">
<input type="button" lay-submit lay-filter="saveBtn" id="saveBtn" value="确认">
</div>
</div>
</div>
<script src="../../lib/layui-v2.6.3/layui.js" charset="utf-8"></script>
<script src="../../lib/jquery-3.4.1/jquery-3.4.1.min.js" charset="utf-8"></script>
<script src="../../assets/main.js" charset="utf-8"></script>
<script src="../../assets/public.js" type="text/javascript" charset="utf-8"></script>
<script src="../../assets/js/i18n1.js"></script>
<script>
layui.use(['form'], function () {
var form = layui.form,
layer = layui.layer,
$ = layui.$;
categoriespresetfn(form,true)
$("#idedt").val(getQueryString('id'))
self.attributesdetail({
type:'get',
data:{id:getQueryString('id')},
successCallBack: function(result){
if (result.code == 0) {
form.val('edit', result.data)
// 回显属性值
if(result.data.value && result.data.value.length > 0) {
result.data.value.forEach(function(item) {
var type = $('select[name="input_type"]').val();
var index = $('#featureList .feature-item').length;
var html = `<div class="feature-item">
<div class="layui-form-item">
<label class="layui-form-label required" data-i18n="seach.name"></label>
<div class="layui-input-block">
<input type="hidden" name="idp[${index}]" value="${item.id}" />
<input type="text" name="value_name[${index}]" data-i18n-placeholder="pleaseenter" value="${item.value_name}" class="layui-input">
</div></div>`
if(type === 'color') {
html += `<div class="layui-form-item color-value">
<label class="layui-form-label required">颜色值</label>
<div class="layui-input-block">
<input type="text" name="color_code[${index}]" lay-verify="required" lay-reqtext="名称不能为空" data-i18n-placeholder="pleaseenter" value="${item.color_code}" class="layui-input">
</div></div>`
}
html+= `<div class="layui-input-block" style="margin-left: 0; text-align: right;">
<button type="button" class="layui-btn layui-btn-danger layui-btn-sm delete-feature">
<i class="layui-icon">&#xe640;</i><span data-i18n="btn.delete"></span>
</button>
</div>`
html += '</div>';
$('#featureList').append(html);
});
}
form.render();
};
},
failCallBack: function(result){
alert(result.message);
}
})
// 监听类型选择变化
form.on('select(input_type)', function(data){
var type = data.value;
// 清空之前的内容
$('#featureList').empty();
// 重新渲染表单
form.render();
});
// 添加属性值
$('#addFeature').on('click', function(){
var type = $('select[name="input_type"]').val();
var index = $('#featureList .feature-item').length;
var html = `<div class="feature-item">
<div class="layui-form-item">
<label class="layui-form-label required" data-i18n="seach.name"></label>
<div class="layui-input-block">
<input type="text" name="value_name[${index}]" data-i18n-placeholder="pleaseenter" value="" class="layui-input">
</div></div>`
if(type === 'color') {
html += `<div class="layui-form-item color-value">
<label class="layui-form-label required">颜色值</label>
<div class="layui-input-block">
<input type="text" name="color_code[${index}]" lay-verify="required" lay-reqtext="名称不能为空" data-i18n-placeholder="pleaseenter" value="" class="layui-input">
</div></div>`
}
html+= `<div class="layui-input-block" style="margin-left: 0; text-align: right;">
<button type="button" class="layui-btn layui-btn-danger layui-btn-sm delete-feature">
<i class="layui-icon">&#xe640;</i><span data-i18n="btn.delete"></span>
</button>
</div>`
html += '</div>';
$('#featureList').append(html);
window.i18n.updatePageContent();
form.render();
});
// 删除属性值按钮点击事件
$(document).on('click', '.delete-feature', function() {
var type = $('select[name="input_type"]').val();
$(this).closest('.feature-item').remove();
// 重新排序索引
$('#featureList .feature-item').each(function(index) {
$(this).find('input[name^="value_name"]').attr('name', 'value_name[' + index + ']');
if(type === 'color') {
$(this).find('input[name^="color_code"]').attr('name', 'color_code[' + index + ']');
}
});
});
//监听提交
form.on('submit(saveBtn)', function (data) {
var index = layer.alert(JSON.stringify(data.field), {
title: '最终的提交信息'
}, function () {
// 关闭弹出层
layer.close(index);
var iframeIndex = parent.layer.getFrameIndex(window.name);
parent.layer.close(iframeIndex);
});
return false;
});
});
</script>
</body>
</html>
+68
View File
@@ -0,0 +1,68 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>layui</title>
<meta name="renderer" content="webkit">
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
<link rel="stylesheet" href="../../lib/layui-v2.6.3/css/layui.css" media="all">
<link rel="stylesheet" href="../../assets/css/public.css" media="all">
<style>
body {
background-color: #ffffff;
}
</style>
</head>
<body>
<div class="layui-form layuimini-form">
<div class="layui-form-item">
<label class="layui-form-label required" data-i18n="seach.name"></label>
<div class="layui-input-block">
<input type="text" name="category_name" lay-verify="required" lay-reqtext="名称不能为空" data-i18n-placeholder="pleaseenter" value="" class="layui-input">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label" data-i18n="sort"></label>
<div class="layui-input-block">
<input type="number" name="sort_order" value="0" data-i18n-placeholder="pleaseenter" class="layui-input">
</div>
</div>
<div class="layui-form-item layui-hide">
<div class="layui-input-block bootm">
<input type="button" lay-submit lay-filter="saveBtn" id="saveBtn" value="确认">
</div>
</div>
</div>
<script src="../../lib/layui-v2.6.3/layui.js" charset="utf-8"></script>
<script src="../../lib/jquery-3.4.1/jquery-3.4.1.min.js" charset="utf-8"></script>
<script src="../../assets/main.js" charset="utf-8"></script>
<script src="../../assets/public.js" type="text/javascript" charset="utf-8"></script>
<script src="../../assets/js/i18n1.js"></script>
<script>
layui.use(['form'], function () {
var form = layui.form,
layer = layui.layer,
$ = layui.$;
//监听提交
form.on('submit(saveBtn)', function (data) {
var index = layer.alert(JSON.stringify(data.field), {
title: '最终的提交信息'
}, function () {
// 关闭弹出层
layer.close(index);
var iframeIndex = parent.layer.getFrameIndex(window.name);
parent.layer.close(iframeIndex);
});
return false;
});
});
</script>
</body>
</html>
+90
View File
@@ -0,0 +1,90 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>layui</title>
<meta name="renderer" content="webkit">
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
<link rel="stylesheet" href="../../lib/layui-v2.6.3/css/layui.css" media="all">
<link rel="stylesheet" href="../../assets/css/public.css" media="all">
<style>
body {
background-color: #ffffff;
}
</style>
</head>
<body>
<div class="layui-form layuimini-form" lay-filter="edit">
<div class="layui-form-item">
<label class="layui-form-label required" data-i18n="seach.name"></label>
<div class="layui-input-block">
<input type="hidden" name="id" id="idedt" value="" />
<input type="text" name="name" lay-verify="required" lay-reqtext="名称不能为空" data-i18n-placeholder="pleaseenter" value="" class="layui-input">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label" data-i18n="sort"></label>
<div class="layui-input-block">
<input type="number" name="sort" value="" data-i18n-placeholder="pleaseenter" class="layui-input">
</div>
</div>
<div class="layui-form-item layui-hide">
<div class="layui-input-block bootm">
<input type="button" lay-submit lay-filter="saveBtn" id="saveBtn" value="确认">
</div>
</div>
</div>
</div>
<script src="../../lib/layui-v2.6.3/layui.js" charset="utf-8"></script>
<script src="../../lib/jquery-3.4.1/jquery-3.4.1.min.js" charset="utf-8"></script>
<script src="../../assets/main.js" charset="utf-8"></script>
<script src="../../assets/public.js" type="text/javascript" charset="utf-8"></script>
<script src="../../assets/js/i18n1.js"></script>
<script>
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;
}
layui.use(['form'], function () {
var form = layui.form,
layer = layui.layer,
$ = layui.$;
form.render();
$("#idedt").val(getQueryString('id'))
self.categoriesdetail({
type:'get',
data:{id:getQueryString('id')},
successCallBack: function(result){
if (result.code == 0) {
form.val('edit', result.data)
form.render();
};
},
failCallBack: function(result){
alert(result.message);
}
})
//监听提交
form.on('submit(saveBtn)', function (data) {
var index = layer.alert(JSON.stringify(data.field), {
title: '最终的提交信息'
}, function () {
// 关闭弹出层
layer.close(index);
var iframeIndex = parent.layer.getFrameIndex(window.name);
parent.layer.close(iframeIndex);
});
return false;
});
});
</script>
</body>
</html>
+195
View File
@@ -0,0 +1,195 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>layui</title>
<meta name="renderer" content="webkit">
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
<link rel="stylesheet" href="../../lib/layui-v2.6.3/css/layui.css" media="all">
<link rel="stylesheet" href="../../assets/css/public.css" media="all">
<style>
body {
background-color: #ffffff;
}
.img-3 {
max-width: 36px;
max-height: 36px;
border-radius: 6px;
}
.upload-item img{
height: 40px;
}
.feature-item{
border: 1px solid #e6e6e6;
padding: 10px;
margin-bottom: 10px;
}
</style>
</head>
<body>
<div class="layui-form layuimini-form">
<div class="layui-form-item">
<label class="layui-form-label required" data-i18n="seach.name"></label>
<div class="layui-input-block">
<input type="hidden" name="vehicle_id" id="vehicle_id">
<input type="text" name="name" lay-verify="required" data-i18n-placeholder="pleaseenter" value="" class="layui-input">
</div>
</div>
<div class="layui-form-item layui-form-text">
<label class="layui-form-label" data-i18n="seach.status"></label>
<div class="layui-input-block">
<input type="checkbox" id="status" lay-filter="status" lay-skin="switch" lay-text="">
<input type="text" style="display:none" name="status" value="1" />
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label" data-i18n="sku.desc"></label>
<div class="layui-input-block">
<div class="feature-list" id="attributelist">
</div>
<div style="margin-top: 10px;">
<button type="button" class="layui-btn layui-btn-normal" id="addAttribute">
<i class="layui-icon">&#xe654;</i><span data-i18n="btn.add"></span>
</button>
</div>
</div>
</div>
<div class="layui-form-item layui-hide">
<div class="layui-input-block bootm">
<input type="button" lay-submit lay-filter="saveBtn" id="saveBtn" value="确认">
</div>
</div>
</div>
<script src="../../lib/layui-v2.6.3/layui.js" charset="utf-8"></script>
<script src="../../lib/jquery-3.4.1/jquery-3.4.1.min.js" charset="utf-8"></script>
<script src="../../assets/main.js" charset="utf-8"></script>
<script src="../../assets/public.js" type="text/javascript" charset="utf-8"></script>
<script src="../../assets/js/i18n1.js"></script>
<script>
layui.use(['form','upload'], function () {
var form = layui.form,
layer = layui.layer,
upload = layui.upload,
$ = layui.$;
layui.$("#status").attr("checked", layui.$('input[name="status"]').val() != 0);
layui.form.render();
layui.form.on("switch(status)", function(data) {
layui.$('input[name="status"]').val(this.checked ? 1 : 0);
});
$("#vehicle_id").val(getQueryString('vehicle_id'))
// 添加属性按钮点击事件
$('#addAttribute').on('click', function() {
var index = $('#attributelist .feature-item').length;
var html = `<div class="feature-item">
<div class="layui-form-item">
<label class="layui-form-label" data-i18n="sku.name"></label>
<div class="layui-input-block">
<select name="attribute_id[${index}]" class="attribute_id layui-input" lay-filter="attributeSelect">
</select>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label" data-i18n="sku.value"></label>
<div class="layui-input-block">
<select name="value_id[${index}]" class="layui-input value_id" >
</select>
</div>
</div>
<div class="layui-form-item upload-image-item">
<label class="layui-form-label required" data-i18n="Images"></label>
<div class="layui-input-block upload-item">
<img class="img-3" src="../../assets/images/noimg.png" alt="" />
<input type="text" style="display:none" name="img[${index}]" value="" />
<button type="button" class="layui-btn btnup"><i class="layui-icon">&#xe67c;</i><span data-i18n="userlist.uploadig"></span></button>
</div>
</div>
<div class="layui-input-block" style="margin-left: 0; text-align: right;">
<button type="button" class="layui-btn layui-btn-danger layui-btn-sm delete-attribute">
<i class="layui-icon">&#xe640;</i><span data-i18n="btn.delete"></span>
</button>
</div>
</div>`;
var $newAttribute = $(html);
$('#attributelist').append($newAttribute);
// 重新初始化上传按钮
$newAttribute.find('.btnup').each(function(index, item){
var $item = $(item).closest('.upload-item');
upload.render({
elem: item,
url: baseUrl + 'console/upload/image',
accept: 'images',
field: 'image',
done: function(res){
if(res.code == 0){
$item.find('img').attr('src',res.data.image_url);
$item.find('input').val(res.data.image_name);
}
}
});
});
window.i18n.updatePageContent();
attributespresetfn(form, false, $newAttribute);
form.render();
// 默认隐藏图片上传模块
$newAttribute.find('.upload-image-item').hide();
});
// 监听属性名称下拉框变化,attribute_id=1时显示图片上传模块,否则隐藏
form.on('select(attributeSelect)', function(data){
var $featureItem = $(data.elem).closest('.feature-item');
var selectedValue = data.value;
// 获取当前选中option的data-img属性
var $selectedOption = $(data.elem).find('option:selected');
var dataImg = $selectedOption.attr('data-img');
valuespresetfn(form, true, selectedValue, $featureItem);
// 清空图片上传内容
var $uploadItem = $featureItem.find('.upload-image-item .upload-item');
$uploadItem.find('img').attr('src', '../../assets/images/noimg.png');
$uploadItem.find('input[type="text"]').val('');
if (dataImg == '1'||dataImg == '2') {
$featureItem.find('.upload-image-item').show();
} else {
$featureItem.find('.upload-image-item').hide();
}
});
// 删除属性按钮点击事件
$(document).on('click', '.delete-attribute', function() {
$(this).closest('.feature-item').remove();
// 重新排序索引
$('#attributelist .feature-item').each(function(index) {
$(this).find('select[name^="attribute_id"]').attr('name', 'attribute_id[' + index + ']');
$(this).find('select[name^="value_id"]').attr('name', 'value_id[' + index + ']');
$(this).find('input[name^="img"]').attr('name', 'img[' + index + ']');
});
});
//监听提交
form.on('submit(saveBtn)', function (data) {
var index = layer.alert(JSON.stringify(data.field), {
title: '最终的提交信息'
}, function () {
// 关闭弹出层
layer.close(index);
var iframeIndex = parent.layer.getFrameIndex(window.name);
parent.layer.close(iframeIndex);
});
return false;
});
});
</script>
</body>
</html>
+243
View File
@@ -0,0 +1,243 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>layui</title>
<meta name="renderer" content="webkit">
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
<link rel="stylesheet" href="../../lib/layui-v2.6.3/css/layui.css" media="all">
<link rel="stylesheet" href="../../assets/css/public.css" media="all">
<style>
body {
background-color: #ffffff;
}
.img-3 {
max-width: 36px;
max-height: 36px;
border-radius: 6px;
}
.upload-item img{
height: 40px;
}
.feature-item{
border: 1px solid #e6e6e6;
padding: 10px;
margin-bottom: 10px;
}
</style>
</head>
<body>
<div class="layui-form layuimini-form" lay-filter="edit">
<div class="layui-form-item">
<label class="layui-form-label required" data-i18n="seach.name"></label>
<div class="layui-input-block">
<input type="hidden" name="id" id="idedt" value="" />
<input type="hidden" name="vehicle_id" id="vehicle_id" value="" />
<input type="text" name="name" lay-verify="required" data-i18n-placeholder="pleaseenter" value="" class="layui-input">
</div>
</div>
<div class="layui-form-item layui-form-text">
<label class="layui-form-label" data-i18n="seach.status"></label>
<div class="layui-input-block">
<input type="checkbox" id="status" lay-filter="status" lay-skin="switch" lay-text="">
<input type="text" style="display:none" name="status" value="1" />
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label" data-i18n="sku.desc"></label>
<div class="layui-input-block">
<div class="feature-list" id="attributelist"></div>
<div style="margin-top: 10px;">
<button type="button" class="layui-btn layui-btn-normal" id="addAttribute">
<i class="layui-icon">&#xe654;</i><span data-i18n="btn.add"></span>
</button>
</div>
</div>
</div>
<div class="layui-form-item layui-hide">
<div class="layui-input-block bootm">
<input type="button" lay-submit lay-filter="saveBtn" id="saveBtn" value="确认">
</div>
</div>
</div>
</div>
<script src="../../lib/layui-v2.6.3/layui.js" charset="utf-8"></script>
<script src="../../lib/jquery-3.4.1/jquery-3.4.1.min.js" charset="utf-8"></script>
<script src="../../assets/main.js" charset="utf-8"></script>
<script src="../../assets/public.js" type="text/javascript" charset="utf-8"></script>
<script src="../../assets/js/i18n1.js"></script>
<script>
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;
}
layui.use(['form','upload'], function () {
var form = layui.form,
layer = layui.layer,
upload = layui.upload,
$ = layui.$;
form.render();
$("#idedt").val(getQueryString('id'))
$("#vehicle_id").val(getQueryString('vehicle_id'))
self.skudetail({
type:'get',
data:{id:getQueryString('id')},
successCallBack: function(result){
if (result.code == 0) {
var data = result.data;
form.val('edit', result.data)
form.render();
// 字段 状态 status
layui.use(["form"], function() {
layui.$("#status").attr("checked", layui.$('input[name="status"]').val() != 0);
layui.form.render();
layui.form.on("switch(status)", function(data) {
layui.$('input[name="status"]').val(this.checked ? 1 : 0);
});
})
// 属性列表
$('#attributelist').empty();
(data.skuAttributes || []).forEach(function(item, idx){
renderAttributeItem(item, idx);
});
};
},
failCallBack: function(result){
alert(result.message);
}
})
// 动态添加属性项
function renderAttributeItem(data, index) {
var html = `<div class="feature-item">
<div class="layui-form-item">
<label class="layui-form-label" data-i18n="sku.name"></label>
<div class="layui-input-block">
<input type="hidden" name="id[]" value="${data.id}">
<select name="attribute_id[${index}]" class="attribute_id layui-input" lay-filter="attributeSelect"></select>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label" data-i18n="sku.value"></label>
<div class="layui-input-block">
<select name="value_id[${index}]" class="layui-input value_id"></select>
</div>
</div>
<div class="layui-form-item upload-image-item">
<label class="layui-form-label required" data-i18n="Images"></label>
<div class="layui-input-block upload-item">
<img class="img-3" src="${data && data.img_full ? data.img_full : '../../assets/images/noimg.png'}" alt="" />
<input type="text" style="display:none" name="img[${index}]" value="${data && data.img ? data.img : ''}" />
<button type="button" class="layui-btn btnup"><i class="layui-icon">&#xe67c;</i><span data-i18n="userlist.uploadig"></span></button>
</div>
</div>
<div class="layui-input-block" style="margin-left: 0; text-align: right;">
<button type="button" class="layui-btn layui-btn-danger layui-btn-sm delete-attribute">
<i class="layui-icon">&#xe640;</i><span data-i18n="btn.delete"></span>
</button>
</div>
</div>`;
var $newAttribute = $(html);
$('#attributelist').append($newAttribute);
// 上传按钮
$newAttribute.find('.btnup').each(function(idx, item){
var $item = $(item).closest('.upload-item');
upload.render({
elem: item,
url: baseUrl + 'console/upload/image',
accept: 'images',
field: 'image',
done: function(res){
if(res.code == 0){
$item.find('img').attr('src',res.data.image_url);
$item.find('input').val(res.data.image_name);
}
}
});
});
window.i18n.updatePageContent();
attributespresetfn(form, false, $newAttribute);
form.render();
// 默认隐藏图片上传模块
$newAttribute.find('.upload-image-item').hide();
// 属性名称和属性值回显
setTimeout(function() {
if(data && data.attribute_id){
$newAttribute.find('select[name^="attribute_id"]').val(data.attribute_id);
valuespresetfn(form, true, data.attribute_id, $newAttribute);
setTimeout(function(){
$newAttribute.find('select[name^="value_id"]').val(data.value_id);
form.render('select');
}, 200);
// 如果需要显示图片上传
if(data.img){
$newAttribute.find('.upload-image-item').show();
}
}
}, 1000);
}
// 添加属性按钮
$('#addAttribute').on('click', function() {
var index = $('#attributelist .feature-item').length;
renderAttributeItem({}, index);
});
// 监听属性名称下拉框变化
form.on('select(attributeSelect)', function(data){
var $featureItem = $(data.elem).closest('.feature-item');
var selectedValue = data.value;
var $selectedOption = $(data.elem).find('option:selected');
var dataImg = $selectedOption.attr('data-img');
valuespresetfn(form, true, selectedValue, $featureItem);
// 清空图片上传内容
var $uploadItem = $featureItem.find('.upload-image-item .upload-item');
$uploadItem.find('img').attr('src', '../../assets/images/noimg.png');
$uploadItem.find('input[type="text"]').val('');
if (dataImg == '1'||dataImg == '2') {
$featureItem.find('.upload-image-item').show();
} else {
$featureItem.find('.upload-image-item').hide();
}
});
// 删除属性按钮
$(document).on('click', '.delete-attribute', function() {
$(this).closest('.feature-item').remove();
// 重新排序索引
$('#attributelist .feature-item').each(function(index) {
$(this).find('select[name^="attribute_id"]').attr('name', 'attribute_id[' + index + ']');
$(this).find('select[name^="value_id"]').attr('name', 'value_id[' + index + ']');
$(this).find('input[name^="img"]').attr('name', 'img[' + index + ']');
});
});
//监听提交
form.on('submit(saveBtn)', function (data) {
var index = layer.alert(JSON.stringify(data.field), {
title: '最终的提交信息'
}, function () {
// 关闭弹出层
layer.close(index);
var iframeIndex = parent.layer.getFrameIndex(window.name);
parent.layer.close(iframeIndex);
});
return false;
});
});
</script>
</body>
</html>