createScript.php 3.4 KB

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