暂无描述
您最多选择25个主题 主题必须以字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符

yznForm.js 42KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812
  1. //封装表单操作 部分参考EasyAdmin
  2. layui.define(['layer', 'form', 'yzn', 'table', 'notice', 'element','yznUpload'], function(exports) {
  3. var MOD_NAME = 'yznForm',
  4. $ = layui.$,
  5. layer = layui.layer,
  6. yzn = layui.yzn,
  7. table = layui.table,
  8. form = layui.form,
  9. element = layui.element,
  10. yznUpload = layui.yznUpload,
  11. notice = layui.notice;
  12. var init = {
  13. table_elem: '#currentTable',
  14. table_render_id: 'currentTable',
  15. };
  16. var yznForm = {
  17. api: {
  18. form: function(url, data, success, error, refresh, type, pop) {
  19. var that = this;
  20. var submitBtn = $(".layer-footer button[lay-submit]");
  21. submitBtn.addClass("layui-btn-disabled").prop('disabled', true);
  22. if (refresh === undefined) {
  23. refresh = true;
  24. }
  25. yzn.request.post({
  26. url: url,
  27. data: data,
  28. }, function(data,res) {
  29. setTimeout(function() {
  30. submitBtn.removeClass("layui-btn-disabled").prop('disabled', false);
  31. }, 3000);
  32. if (false === $('.layui-form').triggerHandler("success.form")) {
  33. return false;
  34. }
  35. if (typeof success === 'function') {
  36. if (false === success.call($(this), data,res)) {
  37. return false;
  38. }
  39. }
  40. if (type === 'layui-form') {
  41. res.msg = res.msg || '';
  42. yzn.msg.success(res.msg);
  43. setTimeout(function() {
  44. if (pop === true) {
  45. if (refresh == true) {
  46. parent.location.reload();
  47. } else if (typeof(res.url) != 'undefined' && res.url != null && res.url != '') {
  48. parent.location.href = res.url;
  49. }
  50. parent.layui.layer.closeAll();
  51. } else if (refresh == true) {
  52. if (typeof(res.url) != 'undefined' && res.url != null && res.url != '') {
  53. location.href = res.url;
  54. } else {
  55. //history.back(-1);
  56. location.reload();
  57. }
  58. }
  59. }, 3000);
  60. return false;
  61. } else {
  62. res.msg = res.msg || '';
  63. yzn.msg.success(res.msg, function() {
  64. yznForm.api.closeCurrentOpen({
  65. refreshTable: refresh
  66. });
  67. });
  68. return false;
  69. }
  70. }, function(data,res) {
  71. submitBtn.removeClass("layui-btn-disabled").prop('disabled', false);
  72. if (false === $('.layui-form').triggerHandler("error.form")) {
  73. return false;
  74. }
  75. if (typeof error === 'function') {
  76. if (false === error.call($(this), data,res)) {
  77. return false;
  78. }
  79. }
  80. var msg = res.msg == undefined ? '返回数据格式有误' : res.msg;
  81. yzn.msg.error(msg);
  82. return false;
  83. });
  84. return false;
  85. },
  86. closeCurrentOpen: function(option) {
  87. option = option || {};
  88. option.refreshTable = option.refreshTable || false;
  89. option.refreshFrame = option.refreshFrame || false;
  90. if (option.refreshTable === true) {
  91. option.refreshTable = init.table_render_id;
  92. }
  93. var index = parent.layer.getFrameIndex(window.name);
  94. parent.layer.close(index);
  95. if (option.refreshTable !== false) {
  96. parent.layui.table.reload(option.refreshTable);
  97. }
  98. if (option.refreshFrame) {
  99. parent.location.reload();
  100. }
  101. return false;
  102. },
  103. refreshFrame: function() {
  104. parent.location.reload();
  105. return false;
  106. },
  107. refreshTable: function(tableName) {
  108. tableName = tableName | 'currentTable';
  109. table.reload(tableName);
  110. },
  111. },
  112. events: {
  113. formSubmit: function(layform,submit, success, error) {
  114. var formList = $("[lay-submit]", layform);
  115. // 表单提交自动处理
  116. if (formList.length > 0) {
  117. $.each(formList, function(i, v) {
  118. var filter = $(this).attr('lay-filter'),
  119. type = $(this).attr('data-type'),
  120. refresh = $(this).attr('data-refresh'),
  121. pop = $(this).attr('data-pop'),
  122. url = $(this).attr('lay-submit');
  123. // 表格搜索不做自动提交
  124. if (type === 'tableSearch') {
  125. return false;
  126. }
  127. // 判断是否需要刷新表格
  128. if (refresh === 'false') {
  129. refresh = false;
  130. } else {
  131. refresh = true;
  132. }
  133. if (pop === 'true') {
  134. pop = true;
  135. } else {
  136. pop = false;
  137. }
  138. // 自动添加layui事件过滤器
  139. if (filter === undefined || filter === '') {
  140. filter = 'save_form_' + (i + 1);
  141. $(this).attr('lay-filter', filter)
  142. }
  143. if (url === undefined || url === '' || url === null) {
  144. url = window.location.href;
  145. }
  146. form.on('submit(' + filter + ')', function(data) {
  147. if (typeof submit === 'function') {
  148. if (false === submit.call(layform, success, error)) {
  149. return false;
  150. }
  151. }
  152. var dataField = $(data.form).serializeArray();
  153. yznForm.api.form(url, dataField, success, error, refresh, type, pop);
  154. return false;
  155. });
  156. });
  157. }
  158. },
  159. faselect: function (layform) {
  160. //绑定fachoose选择附件事件
  161. if ($(".faselect,.fachoose", layform).length > 0) {
  162. $(".faselect,.fachoose", layform).off('click').on('click', function () {
  163. var that = this;
  164. var multiple = $(this).data("multiple") ? $(this).data("multiple") : false;
  165. var mimetype = $(this).data("mimetype") ? $(this).data("mimetype") : '';
  166. var admin_id = $(this).data("admin-id") ? $(this).data("admin-id") : '';
  167. var user_id = $(this).data("user-id") ? $(this).data("user-id") : '';
  168. var url = $(this).data("url") ? $(this).data("url") : GV.attachment_select_url;
  169. yzn.open('选择',url + "?element_id=" + $(this).attr("id") + "&multiple=" + multiple + "&mimetype=" + mimetype + "&admin_id=" + admin_id + "&user_id=" + user_id,
  170. '800','650',{
  171. callback: function (data) {
  172. var button = $("#" + $(that).attr("id"));
  173. var maxcount = $(button).data("maxcount");
  174. var input_id = $(button).data("input-id") ? $(button).data("input-id") : "";
  175. maxcount = typeof maxcount !== "undefined" ? maxcount : 0;
  176. if (input_id && data.multiple) {
  177. var urlArr = [];
  178. var inputObj = $("#" + input_id);
  179. var value = $.trim(inputObj.val());
  180. if (value !== "") {
  181. urlArr.push(inputObj.val());
  182. }
  183. urlArr.push(data.url)
  184. var result = urlArr.join(",");
  185. if (maxcount > 0) {
  186. var nums = value === '' ? 0 : value.split(/\,/).length;
  187. var files = data.url !== "" ? data.url.split(/\,/) : [];
  188. var remains = maxcount - nums;
  189. if (files.length > remains) {
  190. layer.msg('你最多选择'+ remains +'个文件', { icon: 2 });
  191. return false;
  192. }
  193. }
  194. inputObj.val(result).trigger("change");
  195. } else {
  196. $("#" + input_id).val(data.url).trigger("change");
  197. }
  198. }
  199. });
  200. return false;
  201. });
  202. }
  203. },
  204. //favisible前端组件来源https://gitee.com/karson/fastadmin
  205. favisible: function(layform) {
  206. if ($("[data-favisible]", layform).length == 0) {
  207. return;
  208. }
  209. var checkCondition = function(condition) {
  210. var conditionArr = condition.split(/&&/);
  211. var success = 0;
  212. var baseregex = /^([a-z0-9\_]+)([>|<|=|\!]=?)(.*)$/i,
  213. strregex = /^('|")(.*)('|")$/,
  214. regregex = /^regex:(.*)$/;
  215. var operator_result = {
  216. '>': function(a, b) { return a > b; },
  217. '>=': function(a, b) { return a >= b; },
  218. '<': function(a, b) { return a < b; },
  219. '<=': function(a, b) { return a <= b; },
  220. '==': function(a, b) { return a == b; },
  221. '!=': function(a, b) { return a != b; },
  222. 'in': function(a, b) { return b.split(/\,/).indexOf(a) > -1; },
  223. 'regex': function(a, b) {
  224. var regParts = b.match(/^\/(.*?)\/([gim]*)$/);
  225. var regexp = regParts ? new RegExp(regParts[1], regParts[2]) : new RegExp(b);
  226. return regexp.test(a);
  227. }
  228. };
  229. var dataArr = layform.serializeArray(),
  230. dataObj = {},
  231. fieldName, fieldValue;
  232. var field = layform.attr('data-field') || 'row';
  233. console.log(field);
  234. $(dataArr).each(function(i, field) {
  235. fieldName = field.name;
  236. fieldValue = field.value;
  237. fieldName = fieldName.substr(-2) === '[]' ? fieldName.substr(0, fieldName.length - 2) : fieldName;
  238. dataObj[fieldName] = typeof dataObj[fieldName] !== 'undefined' ? [dataObj[fieldName], fieldValue].join(',') : fieldValue;
  239. });
  240. $.each(conditionArr, function(i, item) {
  241. var basematches = baseregex.exec(item);
  242. if (basematches) {
  243. var name = basematches[1],
  244. operator = basematches[2],
  245. value = basematches[3].toString();
  246. if (operator === '=') {
  247. var strmatches = strregex.exec(value);
  248. operator = strmatches ? '==' : 'in';
  249. value = strmatches ? strmatches[2] : value;
  250. }
  251. var regmatches = regregex.exec(value);
  252. if (regmatches) {
  253. operator = 'regex';
  254. value = regmatches[1];
  255. }
  256. var chkname = field+"[" + name + "]";
  257. if (typeof dataObj[chkname] === 'undefined') {
  258. return false;
  259. }
  260. var objvalue = dataObj[chkname];
  261. if ($.isArray(objvalue)) {
  262. objvalue = dataObj[chkname].join(",");
  263. }
  264. if (['>', '>=', '<', '<='].indexOf(operator) > -1) {
  265. objvalue = parseFloat(objvalue);
  266. value = parseFloat(value);
  267. }
  268. var result = operator_result[operator](objvalue, value);
  269. success += (result ? 1 : 0);
  270. }
  271. });
  272. return success === conditionArr.length;
  273. };
  274. var formEach = function(){
  275. $("[data-favisible][data-favisible!='']", layform).each(function() {
  276. var visible = $(this).data("favisible");
  277. var groupArr = visible.split(/\|\|/);
  278. var success = 0;
  279. $.each(groupArr, function(i, j) {
  280. if (checkCondition(j)) {
  281. success++;
  282. }
  283. });
  284. if (success > 0) {
  285. $(this).removeClass("layui-hide");
  286. } else {
  287. $(this).addClass("layui-hide");
  288. }
  289. });
  290. }
  291. layform.on("keyup change click configchange", "input,select", function() {
  292. formEach();
  293. });
  294. form.on('select', function(data){
  295. formEach();
  296. });
  297. form.on('checkbox', function(data){
  298. formEach();
  299. });
  300. form.on('switch', function(data){
  301. formEach();
  302. });
  303. form.on('radio', function(data){
  304. formEach();
  305. });
  306. //追加上忽略元素
  307. setTimeout(function() {
  308. layform.find('.layui-hide,[data-favisible]').find('[lay-verify]').removeAttr('lay-verify');
  309. }, 0);
  310. $("input,select", layform).trigger("configchange");
  311. },
  312. //fieldlist前端组件来源https://gitee.com/karson/fastadmin
  313. fieldlist: function(layform) {
  314. // 绑定fieldlist组件
  315. if ($(".fieldlist",layform).length > 0) {
  316. layui.define(['laytpl','dragsort'], function(exports) {
  317. var dragsort = layui.dragsort,
  318. laytpl = layui.laytpl;
  319. //刷新隐藏textarea的值
  320. var refresh = function (container, obj) {
  321. var data = {};
  322. var name = container.data("name");
  323. var textarea = $("textarea[name='" + name + "']",layform);
  324. var template = container.data("template");
  325. $.each($("input,select,textarea", container).serializeArray(), function (i, j) {
  326. var reg = /\[(\w+)\]\[(\w+)\]$/g;
  327. var match = reg.exec(j.name);
  328. if (!match)
  329. return true;
  330. match[1] = "x" + parseInt(match[1]);
  331. if (typeof data[match[1]] == 'undefined') {
  332. data[match[1]] = {};
  333. }
  334. if (typeof obj != 'undefined' && $(obj.elem).attr('name') == j.name) {
  335. data[match[1]][match[2]] = obj.value;
  336. } else {
  337. data[match[1]][match[2]] = j.value;
  338. }
  339. //data[match[1]][match[2]] = j.value;
  340. });
  341. var result = template ? [] : {};
  342. $.each(data, function (i, j) {
  343. if (j) {
  344. if (!template) {
  345. if (j.key != '') {
  346. result[j.key] = j.value;
  347. }
  348. } else {
  349. result.push(j);
  350. }
  351. }
  352. });
  353. textarea.val(JSON.stringify(result));
  354. };
  355. //追加一行数据
  356. var append = function (container, row, initial) {
  357. var tagName = container.data("tag") || (container.is("table") ? "tr" : "dd");
  358. var index = container.data("index");
  359. var name = container.data("name");
  360. var template = container.data("template");
  361. var data = container.data();
  362. var id = container.data("id");
  363. index = index ? parseInt(index) : 0;
  364. container.data("index", index + 1);
  365. row = row ? row : {};
  366. row = typeof row.key === 'undefined' || typeof row.value === 'undefined' ? {key: '', value: ''} : row;
  367. var options = container.data("fieldlist-options") || {};
  368. var vars = {
  369. lists: [{ 'index': index, 'name': name, 'data': data,'options': options,'key': row.key,'value': row.value,'row': row.value }]
  370. };
  371. var html = laytpl($("#" + id + "Tpl").html()).render(vars);
  372. var obj = $(html);
  373. if ((options.deleteBtn === false || options.removeBtn === false) && initial)
  374. obj.find(".btn-remove").remove();
  375. if (options.dragsortBtn === false && initial)
  376. obj.find(".btn-dragsort").remove();
  377. if ((options.readonlyKey === true || options.disableKey === true) && initial) {
  378. obj.find("input[name$='[key]']").prop("readonly", true);
  379. }
  380. obj.attr("fieldlist-item", true);
  381. obj.insertAfter($(tagName + "[fieldlist-item]", container).length > 0 ? $(tagName + "[fieldlist-item]:last", container) : $(tagName + ":first", container));
  382. form.render();
  383. if ($(".btn-append,.append", container).length > 0) {
  384. //兼容旧版本事件
  385. $(".btn-append,.append", container).trigger("fa.event.appendfieldlist", obj);
  386. } else {
  387. //新版本事件
  388. container.trigger("fa.event.appendfieldlist", obj);
  389. }
  390. return obj;
  391. };
  392. var fieldlist = $(".fieldlist", layform);
  393. //监听文本框改变事件
  394. $(document).on('change keyup changed', ".fieldlist input,.fieldlist textarea,.fieldlist select", function () {
  395. var container = $(this).closest(".fieldlist");
  396. refresh(container);
  397. });
  398. //追加控制(点击按钮)
  399. fieldlist.on("click", ".btn-append,.append", function (e, row) {
  400. var container = $(this).closest(".fieldlist");
  401. append(container, row);
  402. // refresh(container);
  403. });
  404. //移除控制(点击按钮)
  405. fieldlist.on("click", ".btn-remove", function () {
  406. var container = $(this).closest(".fieldlist");
  407. var tagName = container.data("tag") || (container.is("table") ? "tr" : "dd");
  408. $(this).closest(tagName).remove();
  409. refresh(container);
  410. });
  411. //追加控制(通过事件)
  412. fieldlist.on("fa.event.appendtofieldlist", function (e, row) {
  413. var container = $(this);
  414. append(container, row);
  415. refresh(container);
  416. });
  417. form.on('radio(fieldlist)', function(data) {
  418. var container = $(this).closest(".fieldlist");
  419. refresh(container, data);
  420. });
  421. form.on('select(fieldlist)', function(data) {
  422. var container = $(this).closest(".fieldlist");
  423. refresh(container, data);
  424. });
  425. //根据textarea内容重新渲染
  426. fieldlist.on("fa.event.refreshfieldlist", function () {
  427. var container = $(this);
  428. var textarea = $("textarea[name='" + container.data("name") + "']", layform);
  429. //先清空已有的数据
  430. $("[fieldlist-item]", container).remove();
  431. var json = {};
  432. try {
  433. json = JSON.parse(textarea.val());
  434. } catch (e) {
  435. }
  436. $.each(json, function (i, j) {
  437. append(container, {key: i, value: j}, true);
  438. });
  439. });
  440. //拖拽排序
  441. fieldlist.each(function () {
  442. var container = $(this);
  443. var tagName = container.data("tag") || (container.is("table") ? "tr" : "dd");
  444. container.dragsort({
  445. itemSelector: tagName,
  446. dragSelector: ".btn-dragsort",
  447. dragEnd: function () {
  448. refresh(container);
  449. },
  450. placeHolderTemplate: $("<" + tagName + "/>")
  451. });
  452. if (typeof container.data("options") === 'object' && container.data("options").appendBtn === false) {
  453. $(".btn-append,.append", container).hide();
  454. }
  455. $("textarea[name='" + container.data("name") + "']", layform).on("fa.event.refreshfieldlist", function () {
  456. //兼容旧版本事件
  457. $(this).closest(".fieldlist").trigger("fa.event.refreshfieldlist");
  458. });
  459. });
  460. fieldlist.trigger("fa.event.refreshfieldlist");
  461. })
  462. }
  463. },
  464. selectpage: function(layform) {
  465. // 绑定selectpage组件
  466. if ($(".selectpage",layform).length > 0) {
  467. layui.define('selectPage', function(exports) {
  468. var selectPage = layui.selectPage;
  469. $('.selectpage',layform).selectPage({
  470. eAjaxSuccess: function(data) {
  471. //console.log(data);
  472. data.list = typeof data.data !== 'undefined' ? data.data : [];
  473. data.totalRow = typeof data.count !== 'undefined' ? data.count : data.data.length;
  474. return data;
  475. }
  476. })
  477. })
  478. }
  479. },
  480. cxselect: function (layform) {
  481. //绑定cxselect元素事件
  482. if ($("[data-toggle='cxselect']", layform).length > 0) {
  483. layui.define('cxselect', function (exports) {
  484. $.cxSelect.defaults.jsonName = 'name';
  485. $.cxSelect.defaults.jsonValue = 'value';
  486. $.cxSelect.defaults.jsonSpace = 'data';
  487. $("[data-toggle='cxselect']", layform).cxSelect();
  488. });
  489. }
  490. },
  491. citypicker: function(layform) {
  492. // 绑定城市选择组件
  493. if ($("[data-toggle='city-picker']", layform).length > 0) {
  494. layui.define('citypicker', function(exports) {
  495. var citypicker = layui.citypicker;
  496. })
  497. }
  498. },
  499. datetimepicker: function(layform) {
  500. // 绑定时间组件
  501. if ($(".datetime",layform).length > 0) {
  502. layui.define('laydate', function(exports) {
  503. var laydate = layui.laydate;
  504. $(".datetime",layform).each(function() {
  505. var format = $(this).attr('data-date'),
  506. type = $(this).attr('data-date-type'),
  507. range = $(this).attr('data-date-range');
  508. if (type === undefined || type === '' || type === null) {
  509. type = 'datetime';
  510. }
  511. var options = {
  512. elem: this,
  513. type: type,
  514. trigger: 'click',
  515. };
  516. if (format !== undefined && format !== '' && format !== null) {
  517. options['format'] = format;
  518. }
  519. if (range !== undefined) {
  520. if (range === null || range === '') {
  521. range = '-';
  522. }
  523. options['range'] = range;
  524. options['shortcuts']=[
  525. {
  526. text: "今天",
  527. value: function() {
  528. var today = new Date();
  529. return [
  530. new Date(today.getFullYear(), today.getMonth(), today.getDate()),
  531. new Date(today.getFullYear(), today.getMonth(), today.getDate(), 23, 59, 59)
  532. ];
  533. }
  534. },
  535. {
  536. text: "昨天",
  537. value: function() {
  538. var yesterday = new Date();
  539. yesterday.setDate(yesterday.getDate() - 1);
  540. return [
  541. new Date(yesterday.getFullYear(), yesterday.getMonth(), yesterday.getDate()),
  542. new Date(yesterday.getFullYear(), yesterday.getMonth(), yesterday.getDate(), 23, 59, 59)
  543. ];
  544. }
  545. },
  546. {
  547. text: "7天前",
  548. value: function() {
  549. var today = new Date();
  550. var sevenDaysAgo = new Date();
  551. sevenDaysAgo.setDate(today.getDate() - 7);
  552. return [
  553. new Date(sevenDaysAgo.getFullYear(), sevenDaysAgo.getMonth(), sevenDaysAgo.getDate()),
  554. new Date(today.getFullYear(), today.getMonth(), today.getDate(), 23, 59, 59)
  555. ];
  556. }
  557. },
  558. {
  559. text: "本月",
  560. value: function() {
  561. var date = new Date();
  562. var year = date.getFullYear();
  563. var month = date.getMonth();
  564. return [
  565. new Date(year, month, 1),
  566. new Date(year, month + 1, 0, 23, 59, 59)
  567. ];
  568. }
  569. },
  570. {
  571. text: "上个月",
  572. value: function() {
  573. var date = new Date();
  574. var year = date.getFullYear();
  575. var month = date.getMonth();
  576. return [
  577. new Date(year, month - 1, 1),
  578. new Date(year, month, 0, 23, 59, 59)
  579. ];
  580. }
  581. }
  582. ]
  583. }
  584. laydate.render(options);
  585. });
  586. })
  587. }
  588. },
  589. tagsinput: function(layform) {
  590. // 绑定tags标签组件
  591. if ($(".form-tags",layform).length > 0) {
  592. layui.define('tagsinput', function(exports) {
  593. var tagsinput = layui.tagsinput;
  594. $('.form-tags',layform).each(function() {
  595. $(this).tagsInput({
  596. width: 'auto',
  597. defaultText: $(this).data('remark') || '关键词回车确认',
  598. height: '26px',
  599. })
  600. })
  601. })
  602. }
  603. },
  604. colorpicker: function(layform) {
  605. // 绑定颜色组件
  606. if ($('.colorpicker',layform).length > 0) {
  607. layui.define('colorpicker', function(exports) {
  608. var colorpicker = layui.colorpicker;
  609. $('.colorpicker',layform).each(function() {
  610. var input_id = $(this).data("input-id");
  611. var inputObj = $("#" + input_id);
  612. colorpicker.render({
  613. elem: $(this),
  614. color: inputObj.val(),
  615. done: function(color) {
  616. inputObj.val(color);
  617. }
  618. });
  619. });
  620. })
  621. }
  622. },
  623. ueditor: function(layform) {
  624. // ueditor编辑器集合
  625. var ueditors = {};
  626. // 绑定ueditor编辑器组件
  627. if ($(".js-ueditor",layform).length > 0) {
  628. layui.define('ueditor', function(exports) {
  629. var ueditor = layui.ueditor;
  630. $('.js-ueditor',layform).each(function() {
  631. var ueditor_name = $(this).attr('id');
  632. var simple_mode = yzn.parame($(this).data('simple-mode'), false);
  633. var config = {
  634. allowDivTransToP: false, //转换p标签
  635. initialFrameWidth: '100%',
  636. initialFrameHeight: 400, //初始化编辑器高度,默认320
  637. maximumWords: 50000, //允许的最大字符数
  638. serverUrl: GV.image_upload_url+'?from=ueditor',
  639. }
  640. if (simple_mode) {
  641. // 如果是精简模式,设置精简的工具栏按钮
  642. config.toolbars = [
  643. ['fullscreen', 'source', '|', 'undo', 'redo', '|','bold', 'italic', 'underline', 'pasteplain', '|',
  644. 'forecolor', 'backcolor', 'insertorderedlist', 'insertunorderedlist', '|','paragraph', 'fontfamily', 'fontsize', '|',
  645. 'indent', '|','justifyleft', 'justifycenter', 'justifyright','|','link','|','simpleupload', 'insertimage', 'insertvideo',
  646. 'attachment', 'insertframe', 'pagebreak', '|','horizontal','inserttable', '|', 'preview']
  647. ];
  648. }
  649. ueditors[ueditor_name] = UE.getEditor(ueditor_name, config);
  650. $('#' + ueditor_name + 'grabimg',layform).click(function() {
  651. var con = ueditors[ueditor_name].getContent();
  652. $.post('/admin/general.attachments/getUrlFile', { 'content': con, 'type': 'images' },
  653. function(data) {
  654. ueditors[ueditor_name].setContent(data);
  655. layer.msg("图片本地化完成", { icon: 1 });
  656. }, 'html');
  657. });
  658. //打开图片管理
  659. ueditors[ueditor_name].addListener("upload.online", function (e, editor, dialog) {
  660. dialog.close(false);
  661. yzn.open('选择',GV.attachment_select_url + "?element_id=&multiple=true&mimetype=image/*", '800','650',{
  662. callback: function (data) {
  663. var urlArr = data.url.split(/\,/);
  664. urlArr.forEach(function (url, index) {
  665. editor.execCommand('insertimage', {
  666. src: url
  667. });
  668. });
  669. }
  670. });
  671. });
  672. //打开附件管理
  673. ueditors[ueditor_name].addListener("file.online", function (e, editor, dialog) {
  674. dialog.close(false);
  675. yzn.open('选择',GV.attachment_select_url + "?element_id=&multiple=true&mimetype=application/*", '800','650',{
  676. callback: function (data) {
  677. var urlArr = data.url.split(/\,/);
  678. urlArr.forEach(function (url, index) {
  679. editor.execCommand('insertfile', {
  680. url: url
  681. });
  682. });
  683. }
  684. });
  685. });
  686. //分词检测
  687. if (ueditor_name == 'content') {
  688. $('#getwords').click(function() {
  689. var con = ueditors['content'].getContentTxt();
  690. $.post(GV.ueditor_getwords_url, { 'content': con },
  691. function(data) {
  692. if (data.code == 0) {
  693. $(".tags-keywords").importTags(data.arr);
  694. //$(".tags-keywords").val(data.arr);
  695. } else {
  696. layer.msg(data.msg, { icon: 2 });
  697. }
  698. });
  699. });
  700. }
  701. //过滤敏感字
  702. $('#' + ueditor_name + 'filterword',layform).click(function() {
  703. var con = ueditors[ueditor_name].getContent();
  704. yzn.request.post({
  705. url: 'admin/ajax/filterWord',
  706. data: { 'content': con },
  707. }, function(data,res) {
  708. if (res.code == 0) {
  709. if ($.isArray(res.data)) {
  710. layer.msg("违禁词:" + res.data.join(","), { icon: 2 });
  711. }
  712. } else {
  713. layer.msg("内容没有违禁词!", { icon: 1 });
  714. }
  715. });
  716. })
  717. });
  718. })
  719. }
  720. },
  721. cropper: function() {
  722. //裁剪图片
  723. $(document).on('click', '.cropper', function() {
  724. var inputId = $(this).attr("data-input-id");
  725. var image = $(this).parent('.file-panel').prev('img').data('original');
  726. var index = layer.open({
  727. type: 2,
  728. shadeClose: true,
  729. shade: false,
  730. area: [$(window).width() > 880 ? '880px' : '95%', $(window).height() > 600 ? '600px' : '95%'],
  731. title: '图片裁剪',
  732. content: '/admin/general.attachments/cropper?url=' + image,
  733. success: function(layero, index) {
  734. $(layero).data("arr", [inputId, image]);
  735. }
  736. });
  737. });
  738. },
  739. xmSelect: function() {
  740. // 绑定下拉框多选组件
  741. if ($('.layui-form .form-selects').length > 0) {
  742. layui.define('xmSelect', function(exports) {
  743. var xmselect = layui.xmSelect;
  744. $('.layui-form .form-selects').each(function() {
  745. var name = $(this).data("name");
  746. var list = Array.isArray($(this).data("list")) || typeof $(this).data("list") === "object" ? $(this).data("list") : [];
  747. var value = $(this).data("value");
  748. var newArr = [];
  749. $.each(list, function(i, j) {
  750. var vote = {};
  751. vote.value = i;
  752. vote.name = j;
  753. newArr.push(vote);
  754. })
  755. if (typeof value != 'object' && value) {
  756. value = typeof value === "number" ? [value] : value.split(',')
  757. }
  758. xmSelect.render({
  759. el: document.querySelector('.form-selects'),
  760. initValue: value,
  761. name: name,
  762. data: newArr
  763. })
  764. })
  765. })
  766. }
  767. },
  768. plupload: function (layform) {
  769. yznForm.events.faupload(layform);
  770. },
  771. faupload: function (layform) {
  772. //绑定上传元素事件
  773. if ($(".plupload,.faupload", layform).length > 0) {
  774. yznUpload.api.upload($(".plupload,.faupload", layform));
  775. }
  776. },
  777. },
  778. bindevent: function(form,submit, success, error) {
  779. form = typeof form === 'object' ? form : $(form);
  780. var events = yznForm.events;
  781. events.formSubmit(form,submit, success, error);
  782. events.selectpage(form);
  783. events.faselect(form);
  784. events.fieldlist(form);
  785. events.cxselect(form);
  786. events.citypicker(form);
  787. events.datetimepicker(form);
  788. events.tagsinput(form);
  789. events.colorpicker(form);
  790. events.ueditor(form);
  791. events.favisible(form);
  792. events.cropper();
  793. events.xmSelect();
  794. events.faupload(form);
  795. }
  796. }
  797. exports(MOD_NAME, yznForm);
  798. });