diff --git a/application/admin/command/Crud/stubs/javascript.stub b/application/admin/command/Crud/stubs/javascript.stub index 8c013cf8..d633d786 100644 --- a/application/admin/command/Crud/stubs/javascript.stub +++ b/application/admin/command/Crud/stubs/javascript.stub @@ -39,7 +39,15 @@ define(['jquery', 'bootstrap', 'backend', 'table', 'form'], function ($, undefin [ {%javascriptList%} ] - ] + ], + //禁用默认搜索 + search: false, + //启用普通表单搜索 + commonSearch: true, + //可以控制是否默认显示搜索单表,false则隐藏,默认为false + searchFormVisible: false, + showColumns: false, + showToggle: false, }); // 为表格绑定事件 diff --git a/application/admin/lang/zh-cn.php b/application/admin/lang/zh-cn.php index 1174f021..ae647d0b 100755 --- a/application/admin/lang/zh-cn.php +++ b/application/admin/lang/zh-cn.php @@ -112,6 +112,7 @@ return [ '%d year%s ago' => '%d年前', 'Set to normal' => '设为正常', 'Set to hidden' => '设为隐藏', + 'Set to recommend' => '设为推荐', //提示 'Go back' => '返回首页', 'Jump now' => '立即跳转', @@ -169,5 +170,5 @@ return [ 'Admin log tips' => '管理员可以查看自己所拥有的权限的管理员日志', 'Group tips' => '角色组可以有多个,角色有上下级层级关系,如果子角色有角色组和管理员的权限则可以派生属于自己组别的下级角色组或管理员', 'Rule tips' => '规则通常对应一个控制器的方法,同时左侧的菜单栏数据也从规则中体现,通常建议通过命令行进行生成规则节点', - 'Set to recommend' => '设为推荐', + 'Test' => '测试', ]; diff --git a/public/assets/js/require-form.js b/public/assets/js/require-form.js index cab6cc20..890e3c48 100755 --- a/public/assets/js/require-form.js +++ b/public/assets/js/require-form.js @@ -16,6 +16,240 @@ define(['jquery', 'bootstrap', 'upload', 'validator'], function ($, undefined, U msgClass: 'n-top', theme: 'yellow_top', stopOnError: true, + rules: { + mobile: [/^1[3-9]\d{9}$/, "请填写有效的手机号"], + email: [/^[0-9A-Za-z][\.-_0-9A-Za-z]*@[0-9A-Za-z]+(\.[0-9A-Za-z]+)+$/, "请填写有效的邮箱地址"], + chinese: [/^[\u0391-\uFFE5]+$/, "请填写中文字符"], + money: [/^(?:0|[1-9]\d*)(?:\.\d{1,2})?$/, "请填写有效的金额"], + ip: [/^((25[0-5]|2[0-4][0-9]|1[0-9]{2}|[0-9]{1,2})\.){3}(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[0-9]{1,2})$/i, '请填写有效的 IP 地址'], + // 身份证 + idcard: function (element) { + var value = element.value, + isValid = true; + var cityCode = {11: "北京", 12: "天津", 13: "河北", 14: "山西", 15: "内蒙古", 21: "辽宁", 22: "吉林", 23: "黑龙江 ", 31: "上海", 32: "江苏", 33: "浙江", 34: "安徽", 35: "福建", 36: "江西", 37: "山东", 41: "河南", 42: "湖北 ", 43: "湖南", 44: "广东", 45: "广西", 46: "海南", 50: "重庆", 51: "四川", 52: "贵州", 53: "云南", 54: "西藏 ", 61: "陕西", 62: "甘肃", 63: "青海", 64: "宁夏", 65: "新疆", 71: "台湾", 81: "香港", 82: "澳门", 91: "国外 "}; + + /* 15位校验规则: (dddddd yymmdd xx g) g奇数为男,偶数为女 + * 18位校验规则: (dddddd yyyymmdd xxx p) xxx奇数为男,偶数为女,p校验位 + + 校验位公式:C17 = C[ MOD( ∑(Ci*Wi), 11) ] + i----表示号码字符从由至左包括校验码在内的位置序号 + Wi 7 9 10 5 8 4 2 1 6 3 7 9 10 5 8 4 2 1 + Ci 1 0 X 9 8 7 6 5 4 3 2 + */ + var rFormat = /^\d{6}(19|20)\d{2}(0[1-9]|1[012])(0[1-9]|[12]\d|3[01])\d{3}(\d|X)$|^\d{6}\d{2}(0[1-9]|1[012])(0[1-9]|[12]\d|3[01])\d{3}$/; // 格式验证 + + if (!rFormat.test(value) || !cityCode[value.substr(0, 2)]) { + isValid = false; + } + // 18位身份证需要验证最后一位校验位 + else if (value.length === 18) { + var Wi = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2, 1]; // 加权因子 + var Ci = "10X98765432"; // 校验字符 + // 加权求和 + var sum = 0; + for (var i = 0; i < 17; i++) { + sum += value.charAt(i) * Wi[i]; + } + // 计算校验值 + var C17 = Ci.charAt(sum % 11); + // 与校验位比对 + if (C17 !== value.charAt(17)) { + isValid = false; + } + } + return isValid || "请填写正确的身份证号码"; + }, + // 银行卡(借记卡、贷记卡) + bankcard: function (element) { + var value = element.value.replace(/\s/g, ''), + isValid = true, + rFormat = /^[\d]{12,19}$/; + + if (!rFormat.test(value)) { + isValid = false; + } else { + var arr = value.split('').reverse(), + i = arr.length, + temp, + sum = 0; + + while (i--) { + if (i % 2 === 0) { + sum += +arr[i]; + } else { + temp = +arr[i] * 2; + sum += temp % 10; + if (temp > 9) sum += 1; + } + } + if (sum % 10 !== 0) { + isValid = false; + } + } + return isValid || "请填写有效的银行卡号"; + }, + // 信用卡 + creditcard: function (element, params) { + var value = element.value, + validTypes = 0x0000, + types = { + mastercard: 0x0001, + visa: 0x0002, + amex: 0x0004, + dinersclub: 0x0008, + enroute: 0x0010, + discover: 0x0020, + jcb: 0x0040, + unknown: 0x0080 + }; + + if (/[^0-9\-]+/.test(value)) { + return false; + } + value = value.replace(/\D/g, ""); + + if (!params) { + validTypes = 0x0001 | 0x0002 | 0x0004 | 0x0008 | 0x0010 | 0x0020 | 0x0040 | 0x0080; + } else { + for (var i = 0; i < parmas.length; i++) { + validTypes |= types[params[i]]; + } + } + + if (validTypes & 0x0001 && /^(5[12345])/.test(value)) { //mastercard + return value.length === 16; + } + if (validTypes & 0x0002 && /^(4)/.test(value)) { //visa + return value.length === 16; + } + if (validTypes & 0x0004 && /^(3[47])/.test(value)) { //amex + return value.length === 15; + } + if (validTypes & 0x0008 && /^(3(0[012345]|[68]))/.test(value)) { //dinersclub + return value.length === 14; + } + if (validTypes & 0x0010 && /^(2(014|149))/.test(value)) { //enroute + return value.length === 15; + } + if (validTypes & 0x0020 && /^(6011)/.test(value)) { //discover + return value.length === 16; + } + if (validTypes & 0x0040 && /^(3)/.test(value)) { //jcb + return value.length === 16; + } + if (validTypes & 0x0040 && /^(2131|1800)/.test(value)) { //jcb + return value.length === 15; + } + if (validTypes & 0x0080) { //unknown + return true; + } + return "请填写有效的信用卡号"; + }, + // 组织机构代码证 + orgcode: function (element) { + var value = element.value, + isValid = true, + rFormat = /^[A-Z\d]{8}-[X\d]/; + + if (!rFormat.test(value)) { + isValid = false; + } else { + var Wi = [3, 7, 9, 10, 5, 8, 4, 2]; + var Ci = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"; + // 加权求和 + var sum = 0; + for (var i = 0; i < 8; i++) { + sum += Ci.indexOf(value.charAt(i)) * Wi[i]; + } + // 计算校验值: C9 = 11 - MOD ( ∑(Ci*Wi), 11 ) + var C9 = 11 - (sum % 11); + if (C9 === 10) C9 = 'X'; + else if (C9 === 11) C9 = 0; + C9 = '' + C9; + // 与校验位比对 + if (C9 !== value.charAt(9)) { + isValid = false; + } + } + + return isValid || "请填写正确的组织机构代码"; + }, + // 营业执照号 + bizcode: function (element) { + var value = element.value, + isValid = true, + rFormat = /^[1-6]\d{14}$/; + + // 共15位:6位首次登记机关代码 + 8位顺序码 + 校验位 + if (!rFormat.test(value)) { + isValid = false; + } else { + var s = [], + p = [10]; + + for (var i = 0; i < 15; i++) { + s[i] = (p[i] % 11) + (+value.charAt(i)); + p[i + 1] = (s[i] % 10 || 10) * 2; + } + if (1 !== s[14] % 10) { + isValid = false; + } + } + return isValid || "请填写正确的营业执照号"; + }, + // 统一社会信用代码 + unicode: function (element) { + var value = element.value.replace(/^\s*|\s*$/g, ''), + isValid = true, + rFormat = /^[1-9A-GV][1239][1-9]\d{5}[A-Z\d]{8}[X\d][Y\d]/; + + if (!rFormat.test(value)) { + isValid = false; + } else { + var code, Wi, Ci, sum, C9, C18; + + // 计算组织机构代码校验位:C9 = 11 - MOD ( ∑(Ci*Wi), 11 ) + code = value.slice(9, 17); + Wi = [3, 7, 9, 10, 5, 8, 4, 2]; + Ci = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"; + // 加权求和 + sum = 0; + for (var i = 0; i < Wi.length; i++) { + sum += Ci.indexOf(code.charAt(i)) * Wi[i]; + } + C9 = 11 - (sum % 11); + if (C9 === 10) C9 = 'X'; + else if (C9 === 11) C9 = 0; + C9 = '' + C9; + // 与校验位比对 + if (C9 !== code.charAt(9)) { + isValid = false; + } + + if (isValid) { + // 计算最后校验位:C18 = 31 - MOD ( ∑(Ci*Wi), 31 ) + code = value.slice(0, 17); + Wi = [1, 3, 9, 27, 19, 26, 16, 17, 20, 29, 25, 13, 8, 24, 10, 30, 28]; + Ci = "0123456789ABCDEFGHJKLMNPQRTUWXY"; + // 加权求和 + sum = 0; + for (var i = 0; i < Wi.length; i++) { + sum += Ci.indexOf(code.charAt(i)) * Wi[i]; + } + C18 = 31 - (sum % 31); + if (C18 === 30) C18 = 'Y'; + else if (C18 === 31) C18 = 0; + C18 = '' + C18; + // 与校验位比对 + if (C18 !== code.charAt(18)) { + isValid = false; + } + } + } + + return isValid || "请填写正确的统一社会信用代码"; + } + }, display: function (elem) { return $(elem).closest('.form-group').find(".control-label").text().replace(/\:/, ''); },