mirror of
https://gitee.com/bookshelfplus/bookshelfplus
synced 2025-09-22 01:30:40 +08:00
后台表单控件渲染功能初步完成;关于从导航栏挪到页脚;分类首页和分类详情后台分离
This commit is contained in:
@@ -0,0 +1,130 @@
|
||||
function getControlsProfile() {
|
||||
return [
|
||||
{
|
||||
// 必填
|
||||
"tag": "input",
|
||||
"attr": {
|
||||
// 可选
|
||||
"id": "",
|
||||
"name": "", // 用于 POST 提交
|
||||
"class": "",
|
||||
"style": "",
|
||||
"placeholder": "电子书的名称",
|
||||
},
|
||||
"label": {
|
||||
"value": "书本名称",
|
||||
},
|
||||
"required": true, // 是否必填
|
||||
|
||||
// 可选
|
||||
innerHTML: "",
|
||||
|
||||
"validate": function (value) {
|
||||
var result = true, msg = "";
|
||||
if (validateUtils.isEmpty(value)) {
|
||||
result = false;
|
||||
msg = "不能为空";
|
||||
}
|
||||
return { result: result, msg: msg };
|
||||
}
|
||||
},
|
||||
{
|
||||
// 必填
|
||||
"tag": "input",
|
||||
"attr": {
|
||||
// 可选
|
||||
"id": "",
|
||||
"name": "", // 用于 POST 提交
|
||||
"class": "",
|
||||
"style": "",
|
||||
"placeholder": "电子书的作者",
|
||||
},
|
||||
"label": {
|
||||
"value": "作者姓名",
|
||||
},
|
||||
"required": true, // 是否必填
|
||||
|
||||
// 可选
|
||||
innerHTML: "",
|
||||
|
||||
"validate": function (value) {
|
||||
var result = true, msg = "";
|
||||
if (validateUtils.isEmpty(value)) {
|
||||
result = false;
|
||||
msg = "不能为空";
|
||||
}
|
||||
return { result: result, msg: msg };
|
||||
}
|
||||
},
|
||||
{
|
||||
// 必填
|
||||
"tag": "textarea",
|
||||
"attr": {
|
||||
// 可选
|
||||
"id": "",
|
||||
"name": "", // 用于 POST 提交
|
||||
"class": "",
|
||||
"style": "height:100px;",
|
||||
"placeholder": "电子书的简介",
|
||||
},
|
||||
"label": {
|
||||
"value": "书籍简介",
|
||||
},
|
||||
"required": false, // 是否必填
|
||||
|
||||
// 可选
|
||||
innerHTML: "",
|
||||
|
||||
"validate": function (value) {
|
||||
var result = true, msg = "";
|
||||
if (validateUtils.isEmpty(value)) {
|
||||
result = false;
|
||||
msg = "不能为空";
|
||||
}
|
||||
return { result: result, msg: msg };
|
||||
}
|
||||
},
|
||||
{
|
||||
// 必填
|
||||
"tag": "select",
|
||||
"attr": {
|
||||
// 可选
|
||||
"id": "",
|
||||
"name": "", // 用于 POST 提交
|
||||
"class": "",
|
||||
"style": "",
|
||||
},
|
||||
"label": {
|
||||
"value": "书籍简介",
|
||||
},
|
||||
"required": true, // 是否必填
|
||||
|
||||
// 可选
|
||||
"children": [
|
||||
{
|
||||
"tag": "option",
|
||||
"attr": { "value": "1" },
|
||||
"innerHTML": "选项1",
|
||||
},
|
||||
{
|
||||
"tag": "option",
|
||||
"attr": { "value": "2" },
|
||||
"innerHTML": "选项2",
|
||||
},
|
||||
],
|
||||
|
||||
"validate": function (value) {
|
||||
var result = true, msg = "";
|
||||
if (validateUtils.isEmpty(value)) {
|
||||
result = false;
|
||||
msg = "不能为空";
|
||||
}
|
||||
return { result: result, msg: msg };
|
||||
}
|
||||
},
|
||||
];
|
||||
}
|
||||
|
||||
function getSubmitButtonValue() {
|
||||
return "提交";
|
||||
}
|
@@ -0,0 +1,49 @@
|
||||
// 表单验证基本函数
|
||||
function getValidateUtils() {
|
||||
var validateUtils = {
|
||||
// 验证是否为空
|
||||
isEmpty: function (value) {
|
||||
return value === undefined || value === null || value === '';
|
||||
},
|
||||
// 验证是否为数字
|
||||
isNumber: function (value) {
|
||||
return !isNaN(value);
|
||||
},
|
||||
// 验证是否为整数
|
||||
isInteger: function (value) {
|
||||
return this.isNumber(value) && parseInt(value) === value;
|
||||
},
|
||||
// 验证是否为正整数
|
||||
isPositiveInteger: function (value) {
|
||||
return this.isInteger(value) && value > 0;
|
||||
},
|
||||
// 验证是否为对象
|
||||
isObject: function (value) {
|
||||
return typeof value === 'object';
|
||||
},
|
||||
// 验证是否为数组
|
||||
isArray: function (value) {
|
||||
return Array.isArray(value);
|
||||
},
|
||||
// 验证是否为字符串
|
||||
isString: function (value) {
|
||||
return typeof value === 'string';
|
||||
},
|
||||
// 验证是否为布尔值
|
||||
isBoolean: function (value) {
|
||||
return typeof value === 'boolean';
|
||||
},
|
||||
// 验证是否为函数
|
||||
isFunction: function (value) {
|
||||
return typeof value === 'function';
|
||||
},
|
||||
// 验证是否为日期
|
||||
isDate: function (value) {
|
||||
return value instanceof Date;
|
||||
},
|
||||
// 验证是否为正则表达式
|
||||
isRegExp: function (value) {
|
||||
return value instanceof RegExp;
|
||||
},
|
||||
};
|
||||
}
|
@@ -0,0 +1,93 @@
|
||||
// 需要先引入 ./utils/getValidateUtils.js
|
||||
var validateUtils = getValidateUtils();
|
||||
|
||||
// #######################################################
|
||||
// 渲染元素
|
||||
// #######################################################
|
||||
function renderElements(control) {
|
||||
var element = document.createElement(control.tag);
|
||||
|
||||
// 为元素添加属性
|
||||
Object.keys(control.attr).forEach((key, index) => {
|
||||
var value = control.attr[key];
|
||||
element.setAttribute(key, value);
|
||||
});
|
||||
|
||||
// 如果设置了 innerHTML 属性,则添加 innerHTML 属性
|
||||
if (Object.keys(control).indexOf('innerHTML') > -1) {
|
||||
element.innerHTML = control.innerHTML;
|
||||
}
|
||||
|
||||
// 如果有 children 属性,则递归渲染 children
|
||||
if (Object.keys(control).indexOf('children') > -1) {
|
||||
control.children.forEach(function (child) {
|
||||
var childElement = renderElements(child);
|
||||
element.appendChild(childElement);
|
||||
});
|
||||
}
|
||||
return element;
|
||||
}
|
||||
|
||||
// #######################################################
|
||||
// 渲染表单对象
|
||||
// #######################################################
|
||||
function renderFormControls({ Controls = [] }) {
|
||||
console.log(Controls);
|
||||
|
||||
var controlList = [];
|
||||
Controls.forEach(function (control) {
|
||||
if (Object.keys(control).indexOf('tag') === -1 || Object.keys(control).indexOf('attr') === -1) {
|
||||
console.log("元素渲染出错");
|
||||
return;
|
||||
}
|
||||
|
||||
// #########################################
|
||||
// 创建元素对象
|
||||
// #########################################
|
||||
var element = renderElements(control);
|
||||
|
||||
// 为 element 添加 "form-elements" class,以便点击提交时可以获取到表单元素,进行批量处理
|
||||
element.classList.add("form-elements");
|
||||
|
||||
// #########################################
|
||||
// 创建元素label
|
||||
// #########################################
|
||||
var label = document.createElement("label");
|
||||
label.innerHTML = control.label.value;
|
||||
label.setAttribute("for", control.attr.id);
|
||||
|
||||
label.innerHTML += `<span style='color: red; user-select: none;'> ${control.required ? '*' : ' '}</span>`
|
||||
|
||||
// 为 element 添加 "form-elements" class,以便点击提交时可以获取到表单元素,进行批量处理
|
||||
label.classList.add("form-labels");
|
||||
|
||||
// #########################################
|
||||
// 返回结果
|
||||
// #########################################
|
||||
controlList.push({
|
||||
label: label,
|
||||
control: element
|
||||
});
|
||||
});
|
||||
// console.log(controlList);
|
||||
return controlList;
|
||||
}
|
||||
|
||||
// #######################################################
|
||||
// 提交表单
|
||||
// #######################################################
|
||||
function formSubmit({
|
||||
type = 'POST',
|
||||
url = '',
|
||||
data = {},
|
||||
success = (response) => { console.log(response) },
|
||||
error = (error) => { console.log(error) }
|
||||
}) {
|
||||
$.ajax({
|
||||
type: type,
|
||||
url: url,
|
||||
data: data,
|
||||
success: success,
|
||||
error: error
|
||||
});
|
||||
}
|
Reference in New Issue
Block a user