createScript.php 3.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  1. (function () {
  2. var isType = function (data, type) {
  3. return Object.prototype.toString.call(data) === ('[object ' + type + ']');
  4. };
  5. var parseRule = function (rule) {
  6. if (!rule) return [];
  7. rule.forEach(function (c) {
  8. var type = c.type ? ('' + c.type).toLocaleLowerCase() : '',
  9. children = isType(rule.children, 'Array') ? rule.children : [];
  10. if ((type === 'cascader' || type === 'tree') && c.props) {
  11. if (c.props.data && isType(c.props.data, 'String') && c.props.data.indexOf('js.') === 0) {
  12. c.props.data = window[c.props.data.substr(3)];
  13. } else if (c.props.options && isType(c.props.options, 'String') && c.props.options.indexOf('js.') === 0) {
  14. c.props.options = window[c.props.options.substr(3)];
  15. }
  16. } else if (type === 'group') {
  17. if (c.props.rules) parseRule(c.props.rules);
  18. if (c.props.rule) parseRule([c.props.rule]);
  19. } else if (c.control && c.control.length) {
  20. c.control.forEach(function(r) {
  21. parseRule(r.rule);
  22. });
  23. }
  24. if (children.length) parseRule(children);
  25. });
  26. return rule;
  27. };
  28. var ajax = function (url, type, formData, callback){
  29. $.ajax({
  30. url: url,
  31. type: ('' + type).toLocaleUpperCase(),
  32. dataType: 'json',
  33. headers: headers,
  34. contentType: contentType,
  35. data: formData,
  36. success: function (res) {
  37. callback(1, res);
  38. },
  39. error: function () {
  40. callback(0, {});
  41. }
  42. });
  43. }
  44. var rule = parseRule(<?=$form->parseFormRule()?>), headers = <?=$form->parseHeaders()?>, config = <?=$form->parseFormConfig()?>, contentType = "<?=$form->getFormContentType()?>", action = "<?=$form->getAction()?>", method = "<?=$form->getMethod()?>", vm = new Vue();
  45. if (!vm.$Message && vm.$message) {
  46. Vue.prototype.$Message = vm.$message
  47. }
  48. return function (option) {
  49. if (!option) option = {};
  50. if (option.el) config.el = option.el;
  51. config.onSubmit = function (formData, $f) {
  52. $f.submitBtnProps({loading: true, disabled: true});
  53. ajax(action, method, formData, function (status, res) {
  54. if (option.callback) return option.callback(status, res, $f);
  55. $f.submitBtnProps({loading: false, disabled: false});
  56. if (status && res.code === 200) {
  57. vm.$Message.success(res.msg || '表单提交成功');
  58. } else {
  59. vm.$Message.error(res.msg || '表单提交失败');
  60. }
  61. });
  62. };
  63. if(!config.global) config.global = {};
  64. if(!config.global.upload) config.global.upload = {};
  65. if(!config.global.upload.props) config.global.upload.props = {};
  66. var uploadProps = config.global.upload.props;
  67. uploadProps.onExceededSize = function (file) {
  68. vm.$Message.error(file.name + '超出指定大小限制');
  69. };
  70. uploadProps.onFormatError = function (file) {
  71. vm.$Message.error(file.name + '格式验证失败');
  72. };
  73. uploadProps.onError = function (error, file) {
  74. vm.$Message.error(file.name + '上传失败,(' + error + ')');
  75. };
  76. uploadProps.onSuccess = function (res, file) {
  77. if (res.code === 200) {
  78. file.url = res.data.filePath;
  79. } else {
  80. vm.$Message.error(res.msg);
  81. }
  82. };
  83. var _create = function(){return formCreate.create(rule, config);}
  84. return option.filter ? option.filter(_create) : _create() ;
  85. };
  86. })();