| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258 |
- var ns = window.ns_url;
- /**
- * 解析URL
- * @param {string} url 被解析的URL
- * @return {object} 解析后的数据
- */
- ns.parse_url = function (url) {
- var parse = url.match(/^(?:([0-9a-zA-Z]+):\/\/)?([\w-]+(?:\.[\w-]+)+)?(?::(\d+))?([\w-\/]+)?(?:\?((?:\w+=[^#&=\/]*)?(?:&\w+=[^#&=\/]*)*))?(?:#([\w-]+))?$/i);
- parse || $.error("url格式不正确!");
- return {
- "scheme": parse[1],
- "host": parse[2],
- "port": parse[3],
- "path": parse[4],
- "query": parse[5],
- "fragment": parse[6]
- };
- };
- ns.parse_str = function (str) {
- var value = str.split("&"), vars = {}, param;
- for (var i = 0; i < value.length; i++) {
- param = value[i].split("=");
- vars[param[0]] = param[1];
- }
- return vars;
- };
- ns.parse_name = function (name, type) {
- if (type) {
- /* 下划线转驼峰 */
- name = name.replace(/_([a-z])/g, function ($0, $1) {
- return $1.toUpperCase();
- });
- /* 首字母大写 */
- name = name.replace(/[a-z]/, function ($0) {
- return $0.toUpperCase();
- });
- } else {
- /* 大写字母转小写 */
- name = name.replace(/[A-Z]/g, function ($0) {
- return "_" + $0.toLowerCase();
- });
- /* 去掉首字符的下划线 */
- if (0 === name.indexOf("_")) {
- name = name.substr(1);
- }
- }
- return name;
- };
- //scheme://host:port/path?query#fragment
- ns.url = function (url, vars, suffix) {
- if (url.indexOf('http://') != -1 || url.indexOf('https://') != -1) {
- return url;
- }
- var info = this.parse_url(url), path = [], param = {}, reg;
- /* 验证info */
- info.path || alert("url格式错误!");
- url = info.path;
- /* 解析URL */
- path = url.split("/");
- path = [path.pop(), path.pop(), path.pop()].reverse();
- path[1] = path[1] || this.route[1];
- path[0] = path[0] || this.route[0];
- param[this.route[1]] = path[0];
- param[this.route[2]] = path[1];
- param[this.route[3]] = path[2].toLowerCase();
- url = param[this.route[1]] + '/' + param[this.route[2]] + '/' + param[this.route[3]];
- /* 解析参数 */
- if (typeof vars === "string") {
- vars = this.parse_str(vars);
- } else if (!$.isPlainObject(vars)) {
- vars = {};
- }
- /* 添加伪静态后缀 */
- if (false !== suffix) {
- suffix = suffix || 'html';
- if (suffix) {
- url += "." + suffix;
- }
- }
- /* 解析URL自带的参数 */
- info.query && $.extend(vars, this.parse_str(info.query));
- var addon = '';
- if (info.scheme != '' && info.scheme != undefined) {
- addon = info.scheme + '/';
- }
- url = addon + url;
- if (vars) {
- var param_str = $.param(vars);
- if ('' !== param_str) {
- url += ((this.baseUrl + url).indexOf('?') !== -1 ? '&' : '?') + param_str;
- }
- }
- // url = url.replace("shop", this.appModule);
- url = this.baseUrl + url;
- return url;
- };
- /**
- * 验证手机号
- * @param {string} mobile 被验证的mobile
- * @return {object} 验证后的结果
- **/
- ns.parse_mobile = function (mobile) {
- // var parse = /^1(3|4|5|6|7|8|9)\d{9}$/.test(mobile);
- var parse = /^\d{11}$/.test(mobile);
- return parse;
- };
- /**
- * 验证固定电话
- * @param {string} phone 被验证的mobile
- * @return {object} 验证后的结果
- **/
- ns.parse_telephone = function (phone) {
- var parse = /^(\(\d{3,4}\)|\d{3,4}-|\s)?\d{7,14}$/.test(phone);
- return parse;
- };
- /**
- * 处理图片路径
- * path 路径地址
- * type 类型 big、mid、small
- */
- ns.img = function (path, type = '') {
- if (path.indexOf(",") != -1) {
- path = path.split(',')[0];
- }
- var start = path.lastIndexOf('.');
- type = type ? '_' + type.toUpperCase() : '';
- var suffix = path.substring(start);
- path = path.substring(0, start);
- var first = path.split("/");
- path += type + suffix;
- if (path.indexOf("http://") == -1 && path.indexOf("https://") == -1) {
- var base_url = this.baseUrl.replace('/?s=', '');
- var base_url = base_url.replace('/index.php', '');
- if (isNaN(first[0])) {
- var true_path = base_url + path;
- } else {
- var true_path = base_url + 'attachment/' + path;
- }
- } else {
- var true_path = path;
- }
- return true_path;
- };
- /**
- * 时间戳转时间
- *
- */
- var default_time_format = 'YYYY-MM-DD h:m:s';
- ns.time_to_date = function (timeStamp, time_format = '') {
- time_format = time_format == '' ? default_time_format : time_format;
- if (timeStamp > 0) {
- var date = new Date();
- date.setTime(timeStamp * 1000);
- var y = date.getFullYear();
- var m = date.getMonth() + 1;
- m = m < 10 ? ('0' + m) : m;
- var d = date.getDate();
- d = d < 10 ? ('0' + d) : d;
- var h = date.getHours();
- h = h < 10 ? ('0' + h) : h;
- var minute = date.getMinutes();
- var second = date.getSeconds();
- minute = minute < 10 ? ('0' + minute) : minute;
- second = second < 10 ? ('0' + second) : second;
- var time = '';
- time += time_format.indexOf('Y') > -1 ? y : '';
- time += time_format.indexOf('M') > -1 ? '-' + m : '';
- time += time_format.indexOf('D') > -1 ? '-' + d : '';
- time += time_format.indexOf('h') > -1 ? ' ' + h : '';
- time += time_format.indexOf('m') > -1 ? ':' + minute : '';
- time += time_format.indexOf('s') > -1 ? ':' + second : '';
- return time;
- } else {
- return "";
- }
- };
- /**
- * 时间戳转时间(毫秒)
- */
- ns.millisecond_to_date = function (timeStamp) {
- if (timeStamp > 0) {
- var date = new Date();
- date.setTime(timeStamp);
- var y = date.getFullYear();
- var m = date.getMonth() + 1;
- m = m < 10 ? ('0' + m) : m;
- var d = date.getDate();
- d = d < 10 ? ('0' + d) : d;
- var h = date.getHours();
- h = h < 10 ? ('0' + h) : h;
- var minute = date.getMinutes();
- var second = date.getSeconds();
- minute = minute < 10 ? ('0' + minute) : minute;
- second = second < 10 ? ('0' + second) : second;
- return y + '-' + m + '-' + d + ' ' + h + ':' + minute + ':' + second;
- } else {
- return "";
- }
- };
- /**
- * 日期 转换为 Unix时间戳
- * @param <string> 2014-01-01 20:20:20 日期格式
- * @return <int> unix时间戳(秒)
- */
- ns.date_to_time = function (string) {
- var f = string.split(' ', 2);
- var d = (f[0] ? f[0] : '').split('-', 3);
- var t = (f[1] ? f[1] : '').split(':', 3);
- return (new Date(
- parseInt(d[0], 10) || null,
- (parseInt(d[1], 10) || 1) - 1,
- parseInt(d[2], 10) || null,
- parseInt(t[0], 10) || null,
- parseInt(t[1], 10) || null,
- parseInt(t[2], 10) || null
- )).getTime() / 1000;
- };
- /**
- * url 反转义
- * @param url
- */
- ns.urlReplace = function (url) {
- url = decodeURIComponent(url);
- var new_url = url.replace(/%2B/g, "+");//"+"转义
- new_url = new_url.replace(/%26/g, "&");//"&"
- new_url = new_url.replace(/%23/g, "#");//"#"
- new_url = new_url.replace(/%20/g, " ");//" "
- new_url = new_url.replace(/%3F/g, "?");//"#"
- new_url = new_url.replace(/%25/g, "%");//"#"
- new_url = new_url.replace(/&3D/g, "=");//"#"
- new_url = new_url.replace(/%2F/g, "/");//"#"
- return new_url;
- };
- /**
- * 需要定义APP_KEY,API_URL
- * method 插件名.控制器.方法
- * data json对象
- * async 是否异步,默认true 异步,false 同步
- */
- ns.api = function (method, param, callback, async) {
- // async true为异步请求 false为同步请求
- async = async != undefined ? async : true;
- param = param || {};
- param.port = 'platform';
- $.ajax({
- type: 'get',
- url: ns_url.baseUrl + '' + method + '?site_id=' + ns_url.siteId,
- data: param,
- dataType: "JSON",
- async: async,
- success: function (res) {
- if (callback) callback(eval("(" + res + ")"));
- }
- });
- };
- /**
- * url 反转义
- * @param url
- */
- ns.append_url_params = function (url, params) {
- if (params != undefined) {
- var url_params = '';
- for (var k in params) {
- url_params += "&" + k + "=" + params[k];
- }
- url += url_params;
- }
- return url;
- };
- /**
- * 生成随机不重复字符串
- * @param len
- * @returns {string}
- */
- ns.gen_non_duplicate = function (len) {
- return Number(Math.random().toString().substr(3, len) + Date.now()).toString(36);
- };
- /**
- * 获取分页参数
- * @param param 参数
- * @returns {{layout: string[]}}
- */
- ns.get_page_param = function (param) {
- var obj = {
- layout: ['count', 'limit', 'prev', 'page', 'next']
- };
- if (param != undefined) {
- if (param.limit != undefined) {
- obj.limit = param.limit;
- }
- }
- return obj;
- };
- /**
- * 弹出框,暂时没有使用
- * @param options 参数,参考layui:https://www.layui.com/doc/modules/layer.html
- */
- ns.open = function (options) {
- if (!options) options = {};
- options.type = options.type || 1;
- //宽高,小、中、大
- // options.size
- options.area = options.area || ['500px'];
- layer.open(options);
- };
- /**
- * 上传
- * @param id
- * @param method
- * @param param
- * @param callback
- * @param async
- */
- ns.upload_api = function (id, method, param, callback, async) {
- // async true为异步请求 false为同步请求
- async = async != undefined ? async : true;
- param.app_key = APP_KEY;
- var file = document.getElementById(id).files[0];
- var formData = new FormData();
- formData.append("file", file);
- formData.append("method", method);
- formData.append("param", JSON.stringify(param));
- $.ajax({
- url: API_URL + '?s=/api/index/get/method/' + method + '/version/1.0',
- type: "post",
- data: formData,
- dataType: "JSON",
- contentType: false,
- processData: false,
- async: async,
- mimeType: "multipart/form-data",
- success: function (res) {
- if (callback) callback(eval("(" + res + ")"));
- },
- // error: function (data) {
- // console.log(data);
- // }
- });
- };
- /**
- * 复制
- * @param dom
- * @param callback
- */
- ns.copy = function JScopy(dom, callback) {
- var url = document.getElementById(dom);
- var o = {
- url: url.value
- };
-
- var inputText = document.createElement('input');
- inputText.value = o.url;
- document.body.appendChild(inputText);
- inputText.select();
-
- document.execCommand("Copy");
-
- if (callback) callback.call(this, o);
- inputText.type = 'hidden';
- layer.msg('复制成功');
- };
- ns.int_to_float = function (val) {
- return new Number(val).toFixed(2);
- };
- var show_link_box_flag = true;
- /**
- * 弹出框-->选择链接
- * @param link
- * @param callback
- */
- ns.select_link = function (link, callback) {
- if (show_link_box_flag) {
- show_link_box_flag = false;
- $.post(ns.url("shop/diy/link"), {
- link: JSON.stringify(link),
- site_id:ns_url.siteId,
- app_module: ns_url.appModule,
- }, function (str) {
- window.linkIndex = layer.open({
- type: 1,
- title: "选择链接",
- content: str,
- btn: [],
- area: ['850px'], //宽高
- maxWidth: 1920,
- cancel: function (index, layero) {
- show_link_box_flag = true;
- },
- end: function () {
- if (window.linkData) {
- if (callback) callback(window.linkData);
- delete window.linkData;// 清空本次选择
- }
- show_link_box_flag = true;
- }
- });
- });
- }
- };
- /**
- * 打开iframe弹框
- * @param param
- */
- ns.open_iframe = function (param) {
- layui.use(['layer'], function () {
- var url = param.url || '';
- var success = param.success || null;
- var title = param.title || '弹框';
- var area = param.area || ['80%', '80%'];
- //iframe层-父子操作
- layer.open({
- title: title,
- type: 2,
- area: area,
- fixed: false, //不固定
- btn: ['保存', '返回'],
- content: url,
- yes: function (index, layero) {
- var iframeWin = window[layero.find('iframe')[0]['name']];//得到iframe页的窗口对象,执行iframe页的方法:
- iframeWin['getIframeRes'](function (obj) {
- if (typeof success == "string") {
- try {
- eval(success + '(obj)');
- layer.close(index);
- } catch (e) {
- console.error('回调函数' + success + '未定义');
- }
- } else if (typeof success == "function") {
- success(obj);
- layer.close(index);
- }
- });
- }
- });
- });
- }
- ns.compare = function (property) {
- return function (a, b) {
- var value1 = a[property];
- var value2 = b[property];
- return value1 - value2;
- }
- };
- //存储单元单位转换
- ns.sizeformat = function (limit) {
- if (limit == null || limit == "") {
- return "0KB"
- }
- var index = 0;
- var limit = limit.toUpperCase();//转换为小写
- if (limit.indexOf('B') == -1) { //如果无单位,加单位递归转换
- limit = limit + "B";
- //unitConver(limit);
- }
- var reCat = /[0-9]*[A-Z]B/;
- if (!reCat.test(limit) && limit.indexOf('B') != -1) { //如果单位是b,转换为kb加单位递归
- limit = limit.substring(0, limit.indexOf('B')); //去除单位,转换为数字格式
- limit = (limit / 1024) + 'KB'; //换算舍入加单位
- //unitConver(limit);
- }
- var array = new Array('KB', 'MB', 'GB', 'TB', 'PT');
- for (var i = 0; i < array.length; i++) { //记录所在的位置
- if (limit.indexOf(array[i]) != -1) {
- index = i;
- break;
- }
- }
- var limit = parseFloat(limit.substring(0, (limit.length - 2))); //得到纯数字
- while (limit >= 1024) {//数字部分1到1024之间
- limit /= 1024;
- index += 1;
- }
- limit = limit.toFixed(2) + array[index];
- return limit;
- };
- /**
- * 对象深度拷贝
- * @param options
- * @constructor
- */
- ns.deepclone = function (obj) {
- const isObject = function (obj) {
- return typeof obj == 'object';
- }
- if (!isObject(obj)) {
- throw new Error('obj 不是一个对象!')
- }
- //判断传进来的是对象还是数组
- let isArray = Array.isArray(obj)
- let cloneObj = isArray ? [] : {}
- //通过for...in来拷贝
- for (let key in obj) {
- cloneObj[key] = isObject(obj[key]) ? ns.deepclone(obj[key]) : obj[key]
- }
- return cloneObj
- }
- /**
- * 检测输入
- * @param dom
- * @param type
- */
- ns.checkInput = function (dom) {
- let new_val = $(dom).val();
- let reg = /^(0|[1-9][0-9]*)(.\d{0,2})?$/;
- let old_val = $(dom).attr('data-value');
- if (new_val === '' || reg.test(new_val)) {
- $(dom).attr('data-value', new_val);
- } else {
- $(dom).val(old_val);
- }
- }
- /**
- * 数据表格
- * layui官方文档:https://www.layui.com/doc/modules/table.html
- * @param options
- * @constructor
- */
- function Table(options) {
- if (!options) return;
- var _self = this;
- var fields = [];
- for (var i = 0; i < options.cols[0].length; i++) {
- if (options.cols[0][i].sort == true) {
- fields.push(options.cols[0][i].field);
- }
- }
- options.parseData = options.parseData || function (data) {
- $.each(data.data.list, function (index, item) {
- $.each(item, function (key, value) {
- if ($.inArray(key, fields) >= 0) {
- data.data.list[index][key] = Number(value);
- }
- });
- });
- return {
- "code": data.code,
- "msg": data.message,
- "count": data.data.count,
- "data": data.data.list
- };
- };
- options.request = options.request || {
- limitName: 'page_size' //每页数据量的参数名,默认:limit
- };
- var post_url = options.url || 0;
- var post_where = options.where;
- var domain = window.location.href + '/s' + (window.ns_url.siteid ? window.ns_url.siteid : 0)+post_url + JSON.stringify(post_where);
- if (options.page == undefined) {
- options.page = {
- layout: ['count', 'limit', 'prev', 'page', 'next'],
- limit: $.cookie('pageSize' + domain) || 10,
- curr: $.cookie('currPage' + domain) || 1
- };
- }
- options.defaultToolbar = options.defaultToolbar || [];//'filter', 'print', 'exports'
- options.toolbar = options.toolbar || "";//头工具栏事件
- options.skin = options.skin || 'line';
- options.size = options.size || 'lg';
- options.async = (options.async != undefined) ? options.async : true;
- options.done = function (res, curr, count) {
- //加载图片放大
- loadImgMagnify();
- $.cookie('currPage' + domain, curr, {path: window.location.pathname});
- $.cookie('pageSize' + domain, $('.layui-laypage-limits select[lay-ignore]').val(), {path: window.location.pathname});
- if (options.callback) options.callback(res, curr, count);
- };
- layui.use('table', function () {
- _self._table = layui.table;
- _self._table.render(options);
- });
- this.filter = options.filter || options.elem.replace(/#/g, "");
- this.elem = options.elem;
- //获取当前选中的数据
- this.checkStatus = function () {
- return this._table.checkStatus(_self.elem.replace(/#/g, ""));
- };
- }
- /**
- * 监听头工具栏事件
- * @param callback 回调
- */
- Table.prototype.toolbar = function (callback) {
- var _self = this;
- var interval = setInterval(function () {
- if (_self._table) {
- _self._table.on('toolbar(' + _self.filter + ')', function (obj) {
- var checkStatus = _self._table.checkStatus(obj.config.id);
- obj.data = checkStatus.data;
- obj.isAll = checkStatus.isAll;
- if (callback) callback.call(this, obj);
- });
- clearInterval(interval);
- }
- }, 50);
- };
- /**
- * 监听底部工具栏事件
- * @param callback 回调
- */
- Table.prototype.bottomToolbar = function (callback) {
- var _self = this;
- var interval = setInterval(function () {
- if (_self._table) {
- _self._table.on('bottomToolbar(' + _self.filter + ')', function (obj) {
- var checkStatus = _self._table.checkStatus(obj.config.id);
- obj.data = checkStatus.data;
- obj.isAll = checkStatus.isAll;
- if (callback) callback.call(this, obj);
- });
- clearInterval(interval);
- }
- }, 50);
- };
- /**
- * 绑定layui的on事件
- * @param name
- * @param callback
- */
- Table.prototype.on = function (name, callback) {
- var _self = this;
- var interval = setInterval(function () {
- if (_self._table) {
- _self._table.on(name + '(' + _self.filter + ')', function (obj) {
- if (callback) callback.call(this, obj);
- });
- clearInterval(interval);
- }
- }, 50);
- };
- /**
- * 表格重绘事件
- * @param {Object} callback
- */
- Table.prototype.resize = function (callback) {
- var _self = this;
- if (_self._table) {
- _self._table.resize(_self.filter);
- }
- };
- /**
- * //监听行工具事件
- * @param callback 回调
- */
- Table.prototype.tool = function (callback) {
- var _self = this;
- var interval = setInterval(function () {
- if (_self._table) {
- _self._table.on('tool(' + _self.filter + ')', function (obj) {
- if (callback) callback.call(this, obj);
- });
- clearInterval(interval);
- }
- }, 50);
- };
- /**
- * 刷新数据
- * @param options 参数,参考layui数据表格参数
- * @param callback 回调
- */
- Table.prototype.reload = function (options, callback) {
- var page = 1;
- if (options && options.page) {
- page = options.page.curr || 1;
- }
- options = options || {
- page: {
- curr: page
- }
- };
- var _self = this;
- var interval = setInterval(function () {
- if (_self._table) {
- _self._table.reload(_self.elem.replace(/#/g, ""), options);
- clearInterval(interval);
- }
- }, 50);
- if (callback) setTimeout(function () {
- callback()
- }, 500)
- };
- var layedit;
- /**
- * 富文本编辑器
- * https://www.layui.com/v1/doc/modules/layedit.html
- * @param id
- * @param options 参数,参考layui
- * @param callback 监听输入回调
- * @constructor
- */
- function Editor(id, options, callback) {
- options = options || {};
- this.id = id;
- var _self = this;
- layui.use(['layedit'], function () {
- layedit = layui.layedit;
- layedit.set({
- uploadImage: {
- url: ns.url("file://common/File/image")
- },
- callback: callback
- });
- _self.index = layedit.build(id, options);
- });
- }
- /**
- * 设置内容
- * @param content 内容
- * @param append 是否追加
- */
- Editor.prototype.setContent = function (content, append) {
- var _self = this;
- var time = setInterval(function () {
- layedit.setContent(_self.index, content, append);
- clearInterval(time);
- }, 150);
- };
- Editor.prototype.getContent = function () {
- return layedit.getContent(this.index);
- };
- Editor.prototype.getText = function () {
- return layedit.getText(this.index);
- };
- $(function () {
- loadImgMagnify();
- /* 处理日历图片点击问题 */
- $(function () {
- $(".calendar").parents(".layui-form-item").find("input").css({
- "background": 'transparent',
- 'z-index': 2,
- 'position': 'relative'
- });
- });
- });
- //图片最大递归次数
- var IMG_MAX_RECURSIVE_COUNT = 3;
- var count = 0;
- /**
- * 加载图片放大
- */
- function loadImgMagnify() {
- setTimeout(function () {
- try {
- if (layer) {
- $("img[src!=''][layer-src]").each(function () {
- var id = getId($(this).parent());
- layer.photos({
- photos: "#" + id,
- anim: 5
- });
- count = 0;
- });
- }
- } catch (e) {
- }
- }, 200);
- }
- function getId(o) {
- count++;
- var id = o.attr("id");
- // console.log("递归次数:", count,id);
- if (id == undefined && count < IMG_MAX_RECURSIVE_COUNT) {
- id = getId(o.parent());
- }
- if (id == undefined) {
- id = ns.gen_non_duplicate(10);
- o.attr("id", id);
- }
- return id;
- }
- // 返回(关闭弹窗)
- function back() {
- layer.closeAll('page');
- }
- /**
- * 自定义分页
- * @param options
- * @constructor
- */
- function Page(options) {
- if (!options) return;
- var _self = this;
- options.elem = options.elem.replace(/#/g, "");// 注意:这里不能加 # 号
- options.count = options.count || 0;// 数据总数。一般通过服务端得到
- options.limit = options.limit || 10;// 每页显示的条数。laypage将会借助 count 和 limit 计算出分页数。
- options.limits = options.limits || [10,20,30,40,50,60,70,80,90];// 每页条数的选择项。如果 layout 参数开启了 limit,则会出现每页条数的select选择框
- options.curr = options.curr || location.hash.replace('#!page=', '');// 起始页。一般用于刷新类型的跳页以及HASH跳页
- // options.hash = options.hash || 'page';// 开启location.hash,并自定义 hash 值。如果开启,在触发分页时,会自动对url追加:#!hash值={curr} 利用这个,可以在页面载入时就定位到指定页
- options.groups = options.groups || 5;// 连续出现的页码个数
- options.prev = options.prev || '<i class="layui-icon layui-icon-left"></i>';// 自定义“上一页”的内容,支持传入普通文本和HTML
- options.next = options.next || '<i class="layui-icon layui-icon-right"></i>';// 自定义“下一页”的内容,同上
- options.first = options.first || 1;// 自定义“首页”的内容,同上
- options.request = options.request || {
- limitName: 'page_size' //每页数据量的参数名,默认:limit
- };
- // 自定义排版。可选值有:count(总条目输区域)、prev(上一页区域)、page(分页区域)、next(下一页区域)、limit(条目选项区域)、refresh(页面刷新区域。注意:layui 2.3.0 新增) 、skip(快捷跳页区域)
- options.layout = options.layout || ['count', 'limit','prev', 'page', 'next'];
- options.jump = function (obj, first) {
- //首次不执行,一定要加此判断,否则初始时会无限刷新
- if (!first) {
- obj.page = obj.curr;
- if (options.callback) options.callback.call(this, obj);
- }
- };
- layui.use('laypage', function () {
- _self._page = layui.laypage;
- _self._page.render(options);
- });
- }
- /**
- * 表单验证
- * @value options
- * @item
- */
- layui.use('form', function () {
- var form = layui.form;
- $(".layui-input").blur(function () {
- var val = $(this).val().trim();
- $(this).val(val);
- })
- $(".layui-textarea").blur(function () {
- var val = $(this).val().trim();
- $(this).val(val);
- })
- form.verify({
- required: function (value, item) {
- var str = $(item).parents(".layui-form-item").find("label").text().split("*").join("");
- str = str.substring(0, str.length - 1);
- if (value == null || value.trim() == "" || value == undefined || value == null) return str + "不能为空";
- }
- });
- });
- /**
- * 面板折叠
- * @value options
- * @item
- */
- layui.use('element', function () {
- var element = layui.element;
- element.on('collapse(selection_panel)', function (data) {
- if (data.show) {
- $(data.title).find("i").removeClass("layui-icon-up").addClass("layui-icon-down");
- } else {
- $(data.title).find("i").removeClass("layui-icon-down").addClass("layui-icon-up");
- }
- $(data.title).find("i").text('');
- });
- });
- /**
- * 上传
- * layui官方文档:https://www.layui.com/doc/modules/upload.html
- * @param options
- * @constructor
- */
- function Upload(options) {
- if (!options) return;
- if (!options.size) {
- options.size = ns.upload_max_filesize;
- }
- var elemChildImg = $(options.elem).children('.preview_img')
- var _self = this;
- var $parent = $(options.elem).parent();
- options.post = options.post || "shop";
- if (options.post == 'store') options.post += '://store';
- this.post = options.post;
- options.url = options.url || ns.url(options.post + "/upload/image");
- options.accept = options.accept || "images";
- options.before = function (obj) {
- // console.log("before", obj)
- };
- //预览
- if (options.auto === false && options.bindAction) {
- options.choose = function (res) {
- var elemChildImg = $(options.elem).children('.preview_img');
- var $parent = $(options.elem).parent();
- res.preview(function (index, file, result) {
- $parent.find("input[type='hidden']").val(result);
- $parent.find(".del").addClass("show");
- $parent.addClass('hover');
- if (elemChildImg.length) {
- var tempId = $(options.elem).children('.preview_img').attr('id');
- var tempHtml = "<div id='" + tempId + "' class='preview_img'><img layer-src title='点击放大图片' src=" + result + " class='img_prev' data-prev='1' data-action-id='" + options.bindAction + "'></div>";
- $parent.children('.upload-default').html(tempHtml);
- } else {
- var tempId = $(options.elem).attr('id');
- var tempHtml = "<div id='preview_" + tempId + "' class='preview_img'><img layer-src title='点击放大图片' src=" + result + " class='img_prev' data-prev='1' data-action-id='" + options.bindAction + "'></div>";
- $parent.children('.upload-default').html(tempHtml);
- }
- });
- }
- }
- options.done = function (res, index, upload) {
- try {
- if (res.code >= 0) {
- $parent.find("input[type='hidden']").val(res.data.pic_path);
- $parent.find(".del").addClass("show");
- $parent.addClass('hover');
- if (res.data.pic_info) {
- res.data.pic_path = res.data.pic_info.pic_path;
- }
- if (options.accept == 'images') {
- if (elemChildImg.length) {
- var tempId = $(options.elem).children('.preview_img').attr('id');
- var tempHtml = "<div id='" + tempId + "' class='preview_img'><img layer-src title='点击放大图片' src=" + ns.img(res.data.pic_path) + " class='img_prev'></div>";
- $parent.children('.upload-default').html(tempHtml);
- } else {
- var tempId = $(options.elem).attr('id');
- var tempHtml = "<div id='preview_" + tempId + "' class='preview_img'><img layer-src title='点击放大图片' src=" + ns.img(res.data.pic_path) + " class='img_prev'></div>";
- $parent.children('.upload-default').html(tempHtml);
- }
- // var tempHtml = "<div id='imgId' class='preview_img'><img layer-src title='点击放大图片' src=" + ns.img(res.data.pic_path) + " class='img_prev'></div>";
- // $parent.children('.upload-default').html(tempHtml);
- }
- // $(options.elem).addClass("replace").removeClass("no-replace");
- typeof options.callback == "function" ? options.callback(res) : "";
- }
- } catch (e) {
- } finally {
- //加载图片放大
- if (options.accept == 'images') loadImgMagnify();
- // if (options.callback) options.callback(res, index, upload);
- }
- if (!options.callback) {
- return layer.msg(res.message);
- }
- };
- layui.use('upload', function () {
- _self._upload = layui.upload;
- _self._upload.render(options);
- });
- // this.elem = options.elem;
- this.parent = $parent;
- $parent.find(".js-delete").click(function () {
- var path = $parent.children('.operation').siblings("input[type='hidden']").val();
- if (!path) return;
- _self.path = path;
- $parent.children('.operation').siblings("input[type='hidden']").val("");
- $parent.removeClass("hover");
- $parent.find(".upload-default").html(`
- <div class="upload"><i class="iconfont iconshangchuan"></i>
- <p>点击上传</p></div>
- `);
- if (options.deleteCallback) options.deleteCallback();
- $(options.elem).removeClass("hover");
- });
- // 预览
- $parent.find(".js-preview").click(function (e) {
- var id = $parent.find('.preview_img').attr('id');
- $parent.find('.img_prev').click()
- return false;
- });
- // 替换
- $parent.find(".js-replace").click(function (e) {
- var id = $parent.find('.upload-default').attr('id')
- $parent.find('#' + id).click()
- });
- }
- // 删除物理文件
- Upload.prototype.delete = function () {
- var _self = this;
- $.ajax({
- url: ns.url(_self.post + "/upload/deleteFile"),
- data: {path: _self.path},
- dataType: 'JSON',
- type: 'POST',
- success: function (res) {
- $(_self).removeClass("show");
- }
- });
- };
- // 关闭组件编辑模块内容
- function closeBox(obj) {
- var elem = $(obj).parents(".template-edit-title").next();
- if ($(elem).hasClass("layui-hide")) {
- $(elem).removeClass("layui-hide");
- $(obj).removeClass("closed-right");
- } else {
- $(elem).addClass("layui-hide");
- $(obj).addClass("closed-right");
- }
- }
- /**
- * 日期时间选择
- * @param options
- * @constructor
- */
- function LayDate(options, judge) {
- // judge 判断是默认时间是否是当前~下月当天,还是上月上天~当前{nextmonth 下月 ;beformonth 上月}
- if (!options) return;
- var _self = this;
- options.type = options.type || 'datetime';
- if (options.type == "datetime") {
- options.range = options.range == false ? false : true;
- options.format = options.format || "yyyy-MM-dd HH:mm:ss";
- if (options.range) {
- var myDate = new Date();
- var startData = myDate.getFullYear() + "-" + (myDate.getMonth() + 1) + "-" + myDate.getDate() + " 00:00:00",
- endData = myDate.getFullYear() + "-" + (myDate.getMonth() + 1) + "-" + myDate.getDate() + " 23:59:59",
- time = startData + " - " + endData;
- options.value = options.value || time;
- }
- } else {
- options.format = options.format || "yyyy-MM-dd";
- }
- //获取当前时间 yy-MM-dd HH:mm:ss格式
- var myDate = new Date();
- let currentDate = myDate.toLocaleString('chinese', {hour12: false}).split('/').join('-');
- let nextmonth = '';//获取下月当天时间
- let beformonth = ''; //获取下月当天时间
- let defaultTime = '';//默认时间
- let dateTime = [];
- currentDate.split(' ')[0].split('-').forEach((item, index) => {
- if (item < 10) {
- dateTime.push('0' + item)
- } else {
- dateTime.push(item)
- }
- })
- //当天时间
- currentDate = dateTime.join('-') + ' ' + currentDate.split(' ')[1]
- // 下月当天时间
- nextmonth = nextmonthTime() + ' ' + '23:59:59'
- // 上月当天时间
- beformonth = beformonthTime() + ' ' + '00:00:00'
- if (judge == 'nextmonth') {
- defaultTime = currentDate + ' - ' + nextmonth
- } else if (judge == 'beformonth') {
- defaultTime = beformonth + ' - ' + currentDate
- } else {
- defaultTime = options.value
- }
- options.min = options.min || '1900-1-1';
- options.max = options.max || options.max == 0 ? options.max : '2099-12-31';
- options.trigger = options.trigger || 'focus';
- options.position = options.position || "absolute";
- options.zIndex = options.zIndex || 66666666;
- options.value = defaultTime;
- layui.use('laydate', function () {
- _self._laydate = layui.laydate;
- _self._laydate.render(options);
- });
- }
- // 获取下月时间
- function nextmonthTime() {
- var now = new Date();
- var year = now.getFullYear();
- var month = now.getMonth() + 1;
- var day = now.getDate();
- if (parseInt(month) < 10) {
- month = "0" + month;
- }
- if (parseInt(day) < 10) {
- day = "0" + day;
- }
- now = year + '-' + month + '-' + day;
- // // 下月信息
- let lastMonth = parseInt(month) + 1
- if (parseInt(lastMonth) > 12) {
- lastMonth = '01'
- }
- var lastSize = new Date(year, parseInt(lastMonth), 0).getDate();//下月总天数
- // //十二月份取下年一月份
- if (parseInt(month) == 12) {
- return (parseInt(year) + 1) + '-01-' + day;
- }
- if (parseInt(lastSize) < parseInt(day)) {
- return year + '-' + lastMonth + '-' + lastSize;
- } else {
- return year + '-' + lastMonth + '-' + day;
- }
- }
- // 获取上月时间
- function beformonthTime() {
- var now = new Date();
- var year = now.getFullYear();
- var month = now.getMonth() + 1;
- var day = now.getDate();
- if (parseInt(month) < 10) {
- month = "0" + month;
- }
- if (parseInt(day) < 10) {
- day = "0" + day;
- }
- let preMonth = parseInt(month) - 1
- if (parseInt(preMonth) < 1) {
- preMonth = '12'
- }
- var preSize = new Date(year, parseInt(preMonth), 0).getDate();//上月总天数
- // 1月份取上一年的12月,年份退一年
- if (parseInt(month) == 1) {
- return (parseInt(year) - 1) + '-12-' + day;
- }
- // 获取上月天数
- if (parseInt(preSize) < parseInt(day)) {
- return year + '-' + preMonth + '-' + preSize;
- } else {
- //没有特殊情况的话,就选择个
- return year + '-' + preMonth + '-' + day;
- }
- }
- /**
- * 金额格式化输入
- * @param money
- */
- function moneyFormat(money) {
- if (isNaN(money)) return money;
- return parseFloat(money).toFixed(2);
- }
- /**
- * 颜色混合
- * @param c1
- * @param c2
- * @param ratio
- * @returns {string}
- */
- function colourBlend(c1, c2, ratio) {
- ratio = Math.max(Math.min(Number(ratio), 1), 0)
- let r1 = parseInt(c1.substring(1, 3), 16)
- let g1 = parseInt(c1.substring(3, 5), 16)
- let b1 = parseInt(c1.substring(5, 7), 16)
- let r2 = parseInt(c2.substring(1, 3), 16)
- let g2 = parseInt(c2.substring(3, 5), 16)
- let b2 = parseInt(c2.substring(5, 7), 16)
- let r = Math.round(r1 * (1 - ratio) + r2 * ratio)
- let g = Math.round(g1 * (1 - ratio) + g2 * ratio)
- let b = Math.round(b1 * (1 - ratio) + b2 * ratio)
- r = ('0' + (r || 0).toString(16)).slice(-2)
- g = ('0' + (g || 0).toString(16)).slice(-2)
- b = ('0' + (b || 0).toString(16)).slice(-2)
- return '#' + r + g + b
- }
- //判空函数
- ns.checkIsNotNull = function (param) {
- if (param) {
- if (typeof (param) == 'object') {
- if (Array.isArray(param)) {
- if (param.length > 0) return true
- } else {
- if (JSON.stringify(param) != '{}') return true
- }
- } else {
- return true;
- }
- }
- return false;
- }
|