@hzab/form-render 0.0.2 → 0.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -117,9 +117,9 @@ import FormRender from "@hzab/form-render";
117
117
  ### InfoPanel Attributes
118
118
 
119
119
  | 参数 | 类型 | 必填 | 默认值 | 说明 |
120
- | ------------- | ------- | ---- | ---------- | -------------------------------------- | --- |
120
+ | ------------- | ------- | ---- | ---------- | -------------------------------------- |
121
121
  | schema | Object | 是 | - | 数据信息的 schema |
122
- | schemaScope | Object | 否 | - | 全局作用域,用于实现协议表达式变量注入 | |
122
+ | schemaScope | Object | 否 | - | 全局作用域,用于实现协议表达式变量注入 |
123
123
  | layout | Object | 否 | horizontal | 表单布局,horizontal vertical \ inline |
124
124
  | initialValues | Object | 否 | - | form 初始值 |
125
125
  | components | Object | 否 | - | 自定义组件 |
@@ -137,7 +137,7 @@ import FormRender from "@hzab/form-render";
137
137
 
138
138
  - 使用 表单编辑器生成:https://designable-antd.formilyjs.org/
139
139
 
140
- ```json
140
+ ```js
141
141
  {
142
142
  "form": {
143
143
  "labelCol": 6,
package/lib/index.js CHANGED
@@ -1 +1 @@
1
- !function(e,r){"object"==typeof exports&&"object"==typeof module?module.exports=r(require("@formily/antd"),require("@formily/core"),require("@formily/react"),require("antd"),require("react")):"function"==typeof define&&define.amd?define(["@formily/antd","@formily/core","@formily/react","antd","react"],r):"object"==typeof exports?exports["form-render"]=r(require("@formily/antd"),require("@formily/core"),require("@formily/react"),require("antd"),require("react")):e["form-render"]=r(e["@formily/antd"],e["@formily/core"],e["@formily/react"],e.antd,e.react)}(self,((e,r,t,n,o)=>(()=>{"use strict";var a={45:(e,r,t)=>{t.d(r,{Z:()=>c});var n=t(81),o=t.n(n),a=t(645),i=t.n(a)()(o());i.push([e.id,"",""]);const c=i},645:e=>{e.exports=function(e){var r=[];return r.toString=function(){return this.map((function(r){var t="",n=void 0!==r[5];return r[4]&&(t+="@supports (".concat(r[4],") {")),r[2]&&(t+="@media ".concat(r[2]," {")),n&&(t+="@layer".concat(r[5].length>0?" ".concat(r[5]):""," {")),t+=e(r),n&&(t+="}"),r[2]&&(t+="}"),r[4]&&(t+="}"),t})).join("")},r.i=function(e,t,n,o,a){"string"==typeof e&&(e=[[null,e,void 0]]);var i={};if(n)for(var c=0;c<this.length;c++){var u=this[c][0];null!=u&&(i[u]=!0)}for(var l=0;l<e.length;l++){var s=[].concat(e[l]);n&&i[s[0]]||(void 0!==a&&(void 0===s[5]||(s[1]="@layer".concat(s[5].length>0?" ".concat(s[5]):""," {").concat(s[1],"}")),s[5]=a),t&&(s[2]?(s[1]="@media ".concat(s[2]," {").concat(s[1],"}"),s[2]=t):s[2]=t),o&&(s[4]?(s[1]="@supports (".concat(s[4],") {").concat(s[1],"}"),s[4]=o):s[4]="".concat(o)),r.push(s))}},r}},81:e=>{e.exports=function(e){return e[1]}},379:e=>{var r=[];function t(e){for(var t=-1,n=0;n<r.length;n++)if(r[n].identifier===e){t=n;break}return t}function n(e,n){for(var a={},i=[],c=0;c<e.length;c++){var u=e[c],l=n.base?u[0]+n.base:u[0],s=a[l]||0,f="".concat(l," ").concat(s);a[l]=s+1;var p=t(f),m={css:u[1],media:u[2],sourceMap:u[3],supports:u[4],layer:u[5]};if(-1!==p)r[p].references++,r[p].updater(m);else{var d=o(m,n);n.byIndex=c,r.splice(c,0,{identifier:f,updater:d,references:1})}i.push(f)}return i}function o(e,r){var t=r.domAPI(r);t.update(e);return function(r){if(r){if(r.css===e.css&&r.media===e.media&&r.sourceMap===e.sourceMap&&r.supports===e.supports&&r.layer===e.layer)return;t.update(e=r)}else t.remove()}}e.exports=function(e,o){var a=n(e=e||[],o=o||{});return function(e){e=e||[];for(var i=0;i<a.length;i++){var c=t(a[i]);r[c].references--}for(var u=n(e,o),l=0;l<a.length;l++){var s=t(a[l]);0===r[s].references&&(r[s].updater(),r.splice(s,1))}a=u}}},569:e=>{var r={};e.exports=function(e,t){var n=function(e){if(void 0===r[e]){var t=document.querySelector(e);if(window.HTMLIFrameElement&&t instanceof window.HTMLIFrameElement)try{t=t.contentDocument.head}catch(e){t=null}r[e]=t}return r[e]}(e);if(!n)throw new Error("Couldn't find a style target. This probably means that the value for the 'insert' parameter is invalid.");n.appendChild(t)}},216:e=>{e.exports=function(e){var r=document.createElement("style");return e.setAttributes(r,e.attributes),e.insert(r,e.options),r}},565:(e,r,t)=>{e.exports=function(e){var r=t.nc;r&&e.setAttribute("nonce",r)}},795:e=>{e.exports=function(e){if("undefined"==typeof document)return{update:function(){},remove:function(){}};var r=e.insertStyleElement(e);return{update:function(t){!function(e,r,t){var n="";t.supports&&(n+="@supports (".concat(t.supports,") {")),t.media&&(n+="@media ".concat(t.media," {"));var o=void 0!==t.layer;o&&(n+="@layer".concat(t.layer.length>0?" ".concat(t.layer):""," {")),n+=t.css,o&&(n+="}"),t.media&&(n+="}"),t.supports&&(n+="}");var a=t.sourceMap;a&&"undefined"!=typeof btoa&&(n+="\n/*# sourceMappingURL=data:application/json;base64,".concat(btoa(unescape(encodeURIComponent(JSON.stringify(a))))," */")),r.styleTagTransform(n,e,r.options)}(r,e,t)},remove:function(){!function(e){if(null===e.parentNode)return!1;e.parentNode.removeChild(e)}(r)}}}},589:e=>{e.exports=function(e,r){if(r.styleSheet)r.styleSheet.cssText=e;else{for(;r.firstChild;)r.removeChild(r.firstChild);r.appendChild(document.createTextNode(e))}}},54:r=>{r.exports=e},563:e=>{e.exports=r},505:e=>{e.exports=t},721:e=>{e.exports=n},156:e=>{e.exports=o}},i={};function c(e){var r=i[e];if(void 0!==r)return r.exports;var t=i[e]={id:e,exports:{}};return a[e](t,t.exports,c),t.exports}c.n=e=>{var r=e&&e.__esModule?()=>e.default:()=>e;return c.d(r,{a:r}),r},c.d=(e,r)=>{for(var t in r)c.o(r,t)&&!c.o(e,t)&&Object.defineProperty(e,t,{enumerable:!0,get:r[t]})},c.o=(e,r)=>Object.prototype.hasOwnProperty.call(e,r),c.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},c.nc=void 0;var u={};return(()=>{c.r(u),c.d(u,{default:()=>q});var e={};function r(e){return r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},r(e)}function t(e){var t=function(e,t){if("object"!==r(e)||null===e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var o=n.call(e,t||"default");if("object"!==r(o))return o;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"===r(t)?t:String(t)}function n(e,r,n){return(r=t(r))in e?Object.defineProperty(e,r,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[r]=n,e}c.r(e),c.d(e,{Text:()=>b});var o=c(156),a=c.n(o),i=c(563),l=c(505),s=c(54),f=c(721);function p(e,r){if(null==e)return{};var t,n,o=function(e,r){if(null==e)return{};var t,n,o={},a=Object.keys(e);for(n=0;n<a.length;n++)t=a[n],r.indexOf(t)>=0||(o[t]=e[t]);return o}(e,r);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n<a.length;n++)t=a[n],r.indexOf(t)>=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(o[t]=e[t])}return o}var m=["value","mode","content","className"];function d(e,r){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);r&&(n=n.filter((function(r){return Object.getOwnPropertyDescriptor(e,r).enumerable}))),t.push.apply(t,n)}return t}function y(e){for(var r=1;r<arguments.length;r++){var t=null!=arguments[r]?arguments[r]:{};r%2?d(Object(t),!0).forEach((function(r){n(e,r,t[r])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):d(Object(t)).forEach((function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))}))}return e}const b=(0,l.connect)((function(e){var r=e.value,t=e.mode,n=e.content,o=e.className,i=p(e,m),c="normal"!==t&&t?t:"div";return console.log("props",i.readOnly),a().createElement(c,y({className:"formily-text ".concat(o)},i),r||n)}),(0,l.mapProps)((function(e,r){return y(y({},e),{},{form:r.form,field:r})})));var v=c(379),h=c.n(v),O=c(795),S=c.n(O),g=c(569),j=c.n(g),P=c(565),x=c.n(P),w=c(216),T=c.n(w),C=c(589),E=c.n(C),F=c(45),k={};k.styleTagTransform=E(),k.setAttributes=x(),k.insert=j().bind(null,"head"),k.domAPI=S(),k.insertStyleElement=T();h()(F.Z,k);F.Z&&F.Z.locals&&F.Z.locals;function N(e,r){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);r&&(n=n.filter((function(r){return Object.getOwnPropertyDescriptor(e,r).enumerable}))),t.push.apply(t,n)}return t}function I(e){for(var r=1;r<arguments.length;r++){var t=null!=arguments[r]?arguments[r]:{};r%2?N(Object(t),!0).forEach((function(r){n(e,r,t[r])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):N(Object(t)).forEach((function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))}))}return e}const q=(0,o.forwardRef)((function(r,t){var n=(0,o.useCallback)((0,l.createSchemaField)({components:I(I({Space:s.Space,FormGrid:s.FormGrid,FormLayout:s.FormLayout,FormTab:s.FormTab,FormCollapse:s.FormCollapse,ArrayTable:s.ArrayTable,ArrayCards:s.ArrayCards,FormItem:s.FormItem,DatePicker:s.DatePicker,Checkbox:s.Checkbox,Cascader:s.Cascader,Editable:s.Editable,Input:s.Input,NumberPicker:s.NumberPicker,Switch:s.Switch,Password:s.Password,PreviewText:s.PreviewText,Radio:s.Radio,Reset:s.Reset,Select:s.Select,Submit:s.Submit,TimePicker:s.TimePicker,Transfer:s.Transfer,TreeSelect:s.TreeSelect,Upload:s.Upload,Card:f.Card,Slider:f.Slider,Rate:f.Rate},e),r.components),scope:I({},r.schemaScope)}),[]),c=(0,o.useMemo)((function(){return(0,i.createForm)(I({initialValues:r.initialValues,readOnly:r.readOnly,disabled:r.disabled},r.formOptions||{}))}),[]);return(0,o.useImperativeHandle)(t,(function(){return{formRender:c}})),(0,o.useEffect)((function(){r.init&&r.init(c)}),[]),a().createElement(s.Form,{className:"form-render ".concat(r.className),layout:r.layout,form:c,labelCol:r.schema.form.labelCol,wrapperCol:r.schema.form.wrapperCol,onAutoSubmit:function(e){r.onSubmit(e)},onAutoSubmitFailed:function(e){r.onSubmitFailed(e)}},a().createElement(n,{schema:r.schema.schema}),a().createElement("div",{className:"form-render-footer xxm"},r.Slots&&a().createElement(r.Slots,null)))}))})(),u})()));
1
+ !function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t(require("@ant-design/icons"),require("@formily/antd"),require("@formily/core"),require("@formily/react"),require("@hzab/data-model"),require("antd"),require("nanoid"),require("react")):"function"==typeof define&&define.amd?define(["@ant-design/icons","@formily/antd","@formily/core","@formily/react","@hzab/data-model","antd","nanoid","react"],t):"object"==typeof exports?exports.form_render=t(require("@ant-design/icons"),require("@formily/antd"),require("@formily/core"),require("@formily/react"),require("@hzab/data-model"),require("antd"),require("nanoid"),require("react")):e.form_render=t(e["@ant-design/icons"],e["@formily/antd"],e["@formily/core"],e["@formily/react"],e["@hzab/data-model"],e.antd,e.nanoid,e.react)}(self,((e,t,r,n,o,i,a,c)=>(()=>{var s={497:(e,t,r)=>{"use strict";r.d(t,{Z:()=>c});var n=r(81),o=r.n(n),i=r(645),a=r.n(i)()(o());a.push([e.id,".uploader-template-download-btn {\n color: #1890ff;\n}\n",""]);const c=a},479:(e,t,r)=>{"use strict";r.d(t,{Z:()=>c});var n=r(81),o=r.n(n),i=r(645),a=r.n(i)()(o());a.push([e.id,"",""]);const c=a},645:e=>{"use strict";e.exports=function(e){var t=[];return t.toString=function(){return this.map((function(t){var r="",n=void 0!==t[5];return t[4]&&(r+="@supports (".concat(t[4],") {")),t[2]&&(r+="@media ".concat(t[2]," {")),n&&(r+="@layer".concat(t[5].length>0?" ".concat(t[5]):""," {")),r+=e(t),n&&(r+="}"),t[2]&&(r+="}"),t[4]&&(r+="}"),r})).join("")},t.i=function(e,r,n,o,i){"string"==typeof e&&(e=[[null,e,void 0]]);var a={};if(n)for(var c=0;c<this.length;c++){var s=this[c][0];null!=s&&(a[s]=!0)}for(var u=0;u<e.length;u++){var l=[].concat(e[u]);n&&a[l[0]]||(void 0!==i&&(void 0===l[5]||(l[1]="@layer".concat(l[5].length>0?" ".concat(l[5]):""," {").concat(l[1],"}")),l[5]=i),r&&(l[2]?(l[1]="@media ".concat(l[2]," {").concat(l[1],"}"),l[2]=r):l[2]=r),o&&(l[4]?(l[1]="@supports (".concat(l[4],") {").concat(l[1],"}"),l[4]=o):l[4]="".concat(o)),t.push(l))}},t}},81:e=>{"use strict";e.exports=function(e){return e[1]}},379:e=>{"use strict";var t=[];function r(e){for(var r=-1,n=0;n<t.length;n++)if(t[n].identifier===e){r=n;break}return r}function n(e,n){for(var i={},a=[],c=0;c<e.length;c++){var s=e[c],u=n.base?s[0]+n.base:s[0],l=i[u]||0,f="".concat(u," ").concat(l);i[u]=l+1;var p=r(f),d={css:s[1],media:s[2],sourceMap:s[3],supports:s[4],layer:s[5]};if(-1!==p)t[p].references++,t[p].updater(d);else{var v=o(d,n);n.byIndex=c,t.splice(c,0,{identifier:f,updater:v,references:1})}a.push(f)}return a}function o(e,t){var r=t.domAPI(t);r.update(e);return function(t){if(t){if(t.css===e.css&&t.media===e.media&&t.sourceMap===e.sourceMap&&t.supports===e.supports&&t.layer===e.layer)return;r.update(e=t)}else r.remove()}}e.exports=function(e,o){var i=n(e=e||[],o=o||{});return function(e){e=e||[];for(var a=0;a<i.length;a++){var c=r(i[a]);t[c].references--}for(var s=n(e,o),u=0;u<i.length;u++){var l=r(i[u]);0===t[l].references&&(t[l].updater(),t.splice(l,1))}i=s}}},569:e=>{"use strict";var t={};e.exports=function(e,r){var n=function(e){if(void 0===t[e]){var r=document.querySelector(e);if(window.HTMLIFrameElement&&r instanceof window.HTMLIFrameElement)try{r=r.contentDocument.head}catch(e){r=null}t[e]=r}return t[e]}(e);if(!n)throw new Error("Couldn't find a style target. This probably means that the value for the 'insert' parameter is invalid.");n.appendChild(r)}},216:e=>{"use strict";e.exports=function(e){var t=document.createElement("style");return e.setAttributes(t,e.attributes),e.insert(t,e.options),t}},565:(e,t,r)=>{"use strict";e.exports=function(e){var t=r.nc;t&&e.setAttribute("nonce",t)}},795:e=>{"use strict";e.exports=function(e){if("undefined"==typeof document)return{update:function(){},remove:function(){}};var t=e.insertStyleElement(e);return{update:function(r){!function(e,t,r){var n="";r.supports&&(n+="@supports (".concat(r.supports,") {")),r.media&&(n+="@media ".concat(r.media," {"));var o=void 0!==r.layer;o&&(n+="@layer".concat(r.layer.length>0?" ".concat(r.layer):""," {")),n+=r.css,o&&(n+="}"),r.media&&(n+="}"),r.supports&&(n+="}");var i=r.sourceMap;i&&"undefined"!=typeof btoa&&(n+="\n/*# sourceMappingURL=data:application/json;base64,".concat(btoa(unescape(encodeURIComponent(JSON.stringify(i))))," */")),t.styleTagTransform(n,e,t.options)}(t,e,r)},remove:function(){!function(e){if(null===e.parentNode)return!1;e.parentNode.removeChild(e)}(t)}}}},589:e=>{"use strict";e.exports=function(e,t){if(t.styleSheet)t.styleSheet.cssText=e;else{for(;t.firstChild;)t.removeChild(t.firstChild);t.appendChild(document.createTextNode(e))}}},482:t=>{"use strict";t.exports=e},54:e=>{"use strict";e.exports=t},563:e=>{"use strict";e.exports=r},505:e=>{"use strict";e.exports=n},907:e=>{"use strict";e.exports=o},721:e=>{"use strict";e.exports=i},634:e=>{"use strict";e.exports=a},156:e=>{"use strict";e.exports=c},61:(e,t,r)=>{var n=r(698).default;function o(){"use strict";e.exports=o=function(){return t},e.exports.__esModule=!0,e.exports.default=e.exports;var t={},r=Object.prototype,i=r.hasOwnProperty,a=Object.defineProperty||function(e,t,r){e[t]=r.value},c="function"==typeof Symbol?Symbol:{},s=c.iterator||"@@iterator",u=c.asyncIterator||"@@asyncIterator",l=c.toStringTag||"@@toStringTag";function f(e,t,r){return Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}),e[t]}try{f({},"")}catch(e){f=function(e,t,r){return e[t]=r}}function p(e,t,r,n){var o=t&&t.prototype instanceof m?t:m,i=Object.create(o.prototype),c=new _(n||[]);return a(i,"_invoke",{value:S(e,r,c)}),i}function d(e,t,r){try{return{type:"normal",arg:e.call(t,r)}}catch(e){return{type:"throw",arg:e}}}t.wrap=p;var v={};function m(){}function y(){}function h(){}var b={};f(b,s,(function(){return this}));var g=Object.getPrototypeOf,w=g&&g(g(T([])));w&&w!==r&&i.call(w,s)&&(b=w);var O=h.prototype=m.prototype=Object.create(b);function x(e){["next","throw","return"].forEach((function(t){f(e,t,(function(e){return this._invoke(t,e)}))}))}function j(e,t){function r(o,a,c,s){var u=d(e[o],e,a);if("throw"!==u.type){var l=u.arg,f=l.value;return f&&"object"==n(f)&&i.call(f,"__await")?t.resolve(f.__await).then((function(e){r("next",e,c,s)}),(function(e){r("throw",e,c,s)})):t.resolve(f).then((function(e){l.value=e,c(l)}),(function(e){return r("throw",e,c,s)}))}s(u.arg)}var o;a(this,"_invoke",{value:function(e,n){function i(){return new t((function(t,o){r(e,n,t,o)}))}return o=o?o.then(i,i):i()}})}function S(e,t,r){var n="suspendedStart";return function(o,i){if("executing"===n)throw new Error("Generator is already running");if("completed"===n){if("throw"===o)throw i;return k()}for(r.method=o,r.arg=i;;){var a=r.delegate;if(a){var c=P(a,r);if(c){if(c===v)continue;return c}}if("next"===r.method)r.sent=r._sent=r.arg;else if("throw"===r.method){if("suspendedStart"===n)throw n="completed",r.arg;r.dispatchException(r.arg)}else"return"===r.method&&r.abrupt("return",r.arg);n="executing";var s=d(e,t,r);if("normal"===s.type){if(n=r.done?"completed":"suspendedYield",s.arg===v)continue;return{value:s.arg,done:r.done}}"throw"===s.type&&(n="completed",r.method="throw",r.arg=s.arg)}}}function P(e,t){var r=t.method,n=e.iterator[r];if(void 0===n)return t.delegate=null,"throw"===r&&e.iterator.return&&(t.method="return",t.arg=void 0,P(e,t),"throw"===t.method)||"return"!==r&&(t.method="throw",t.arg=new TypeError("The iterator does not provide a '"+r+"' method")),v;var o=d(n,e.iterator,t.arg);if("throw"===o.type)return t.method="throw",t.arg=o.arg,t.delegate=null,v;var i=o.arg;return i?i.done?(t[e.resultName]=i.value,t.next=e.nextLoc,"return"!==t.method&&(t.method="next",t.arg=void 0),t.delegate=null,v):i:(t.method="throw",t.arg=new TypeError("iterator result is not an object"),t.delegate=null,v)}function E(e){var t={tryLoc:e[0]};1 in e&&(t.catchLoc=e[1]),2 in e&&(t.finallyLoc=e[2],t.afterLoc=e[3]),this.tryEntries.push(t)}function C(e){var t=e.completion||{};t.type="normal",delete t.arg,e.completion=t}function _(e){this.tryEntries=[{tryLoc:"root"}],e.forEach(E,this),this.reset(!0)}function T(e){if(e){var t=e[s];if(t)return t.call(e);if("function"==typeof e.next)return e;if(!isNaN(e.length)){var r=-1,n=function t(){for(;++r<e.length;)if(i.call(e,r))return t.value=e[r],t.done=!1,t;return t.value=void 0,t.done=!0,t};return n.next=n}}return{next:k}}function k(){return{value:void 0,done:!0}}return y.prototype=h,a(O,"constructor",{value:h,configurable:!0}),a(h,"constructor",{value:y,configurable:!0}),y.displayName=f(h,l,"GeneratorFunction"),t.isGeneratorFunction=function(e){var t="function"==typeof e&&e.constructor;return!!t&&(t===y||"GeneratorFunction"===(t.displayName||t.name))},t.mark=function(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,h):(e.__proto__=h,f(e,l,"GeneratorFunction")),e.prototype=Object.create(O),e},t.awrap=function(e){return{__await:e}},x(j.prototype),f(j.prototype,u,(function(){return this})),t.AsyncIterator=j,t.async=function(e,r,n,o,i){void 0===i&&(i=Promise);var a=new j(p(e,r,n,o),i);return t.isGeneratorFunction(r)?a:a.next().then((function(e){return e.done?e.value:a.next()}))},x(O),f(O,l,"Generator"),f(O,s,(function(){return this})),f(O,"toString",(function(){return"[object Generator]"})),t.keys=function(e){var t=Object(e),r=[];for(var n in t)r.push(n);return r.reverse(),function e(){for(;r.length;){var n=r.pop();if(n in t)return e.value=n,e.done=!1,e}return e.done=!0,e}},t.values=T,_.prototype={constructor:_,reset:function(e){if(this.prev=0,this.next=0,this.sent=this._sent=void 0,this.done=!1,this.delegate=null,this.method="next",this.arg=void 0,this.tryEntries.forEach(C),!e)for(var t in this)"t"===t.charAt(0)&&i.call(this,t)&&!isNaN(+t.slice(1))&&(this[t]=void 0)},stop:function(){this.done=!0;var e=this.tryEntries[0].completion;if("throw"===e.type)throw e.arg;return this.rval},dispatchException:function(e){if(this.done)throw e;var t=this;function r(r,n){return a.type="throw",a.arg=e,t.next=r,n&&(t.method="next",t.arg=void 0),!!n}for(var n=this.tryEntries.length-1;n>=0;--n){var o=this.tryEntries[n],a=o.completion;if("root"===o.tryLoc)return r("end");if(o.tryLoc<=this.prev){var c=i.call(o,"catchLoc"),s=i.call(o,"finallyLoc");if(c&&s){if(this.prev<o.catchLoc)return r(o.catchLoc,!0);if(this.prev<o.finallyLoc)return r(o.finallyLoc)}else if(c){if(this.prev<o.catchLoc)return r(o.catchLoc,!0)}else{if(!s)throw new Error("try statement without catch or finally");if(this.prev<o.finallyLoc)return r(o.finallyLoc)}}}},abrupt:function(e,t){for(var r=this.tryEntries.length-1;r>=0;--r){var n=this.tryEntries[r];if(n.tryLoc<=this.prev&&i.call(n,"finallyLoc")&&this.prev<n.finallyLoc){var o=n;break}}o&&("break"===e||"continue"===e)&&o.tryLoc<=t&&t<=o.finallyLoc&&(o=null);var a=o?o.completion:{};return a.type=e,a.arg=t,o?(this.method="next",this.next=o.finallyLoc,v):this.complete(a)},complete:function(e,t){if("throw"===e.type)throw e.arg;return"break"===e.type||"continue"===e.type?this.next=e.arg:"return"===e.type?(this.rval=this.arg=e.arg,this.method="return",this.next="end"):"normal"===e.type&&t&&(this.next=t),v},finish:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var r=this.tryEntries[t];if(r.finallyLoc===e)return this.complete(r.completion,r.afterLoc),C(r),v}},catch:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var r=this.tryEntries[t];if(r.tryLoc===e){var n=r.completion;if("throw"===n.type){var o=n.arg;C(r)}return o}}throw new Error("illegal catch attempt")},delegateYield:function(e,t,r){return this.delegate={iterator:T(e),resultName:t,nextLoc:r},"next"===this.method&&(this.arg=void 0),v}},t}e.exports=o,e.exports.__esModule=!0,e.exports.default=e.exports},698:e=>{function t(r){return e.exports=t="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},e.exports.__esModule=!0,e.exports.default=e.exports,t(r)}e.exports=t,e.exports.__esModule=!0,e.exports.default=e.exports},687:(e,t,r)=>{var n=r(61)();e.exports=n;try{regeneratorRuntime=n}catch(e){"object"==typeof globalThis?globalThis.regeneratorRuntime=n:Function("r","regeneratorRuntime = r")(n)}}},u={};function l(e){var t=u[e];if(void 0!==t)return t.exports;var r=u[e]={id:e,exports:{}};return s[e](r,r.exports,l),r.exports}l.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return l.d(t,{a:t}),t},l.d=(e,t)=>{for(var r in t)l.o(t,r)&&!l.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:t[r]})},l.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),l.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},l.nc=void 0;var f={};return(()=>{"use strict";l.r(f),l.d(f,{default:()=>pe});var e={};function t(e){return t="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},t(e)}function r(e){var r=function(e,r){if("object"!==t(e)||null===e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var o=n.call(e,r||"default");if("object"!==t(o))return o;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===r?String:Number)(e)}(e,"string");return"symbol"===t(r)?r:String(r)}function n(e,t,n){return(t=r(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}l.r(e),l.d(e,{Text:()=>y,Upload:()=>ce});var o=l(156),i=l.n(o),a=l(563),c=l(505),s=l(54),u=l(721);function p(e,t){if(null==e)return{};var r,n,o=function(e,t){if(null==e)return{};var r,n,o={},i=Object.keys(e);for(n=0;n<i.length;n++)r=i[n],t.indexOf(r)>=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(n=0;n<i.length;n++)r=i[n],t.indexOf(r)>=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var d=["value","mode","content","className"];function v(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function m(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?v(Object(r),!0).forEach((function(t){n(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):v(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}const y=(0,c.connect)((function(e){var t=e.value,r=e.mode,n=e.content,o=e.className,a=p(e,d),c="normal"!==r&&r?r:"div";return console.log("props",a.readOnly),i().createElement(c,m({className:"formily-text ".concat(o)},a),t||n)}),(0,c.mapProps)((function(e,t){return m(m({},e),{},{form:t.form,field:t})})));function h(){return h=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var r=arguments[t];for(var n in r)Object.prototype.hasOwnProperty.call(r,n)&&(e[n]=r[n])}return e},h.apply(this,arguments)}function b(e,t,r,n,o,i,a){try{var c=e[i](a),s=c.value}catch(e){return void r(e)}c.done?t(s):Promise.resolve(s).then(n,o)}function g(e){return function(){var t=this,r=arguments;return new Promise((function(n,o){var i=e.apply(t,r);function a(e){b(i,n,o,a,c,"next",e)}function c(e){b(i,n,o,a,c,"throw",e)}a(void 0)}))}}var w=l(687),O=l.n(w);function x(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=new Array(t);r<t;r++)n[r]=e[r];return n}function j(e,t){if(e){if("string"==typeof e)return x(e,t);var r=Object.prototype.toString.call(e).slice(8,-1);return"Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r?Array.from(e):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?x(e,t):void 0}}function S(e){return function(e){if(Array.isArray(e))return x(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||j(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function P(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var r=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=r){var n,o,i,a,c=[],s=!0,u=!1;try{if(i=(r=r.call(e)).next,0===t){if(Object(r)!==r)return;s=!1}else for(;!(s=(n=i.call(r)).done)&&(c.push(n.value),c.length!==t);s=!0);}catch(e){u=!0,o=e}finally{try{if(!s&&null!=r.return&&(a=r.return(),Object(a)!==a))return}finally{if(u)throw o}}return c}}(e,t)||j(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}var E=l(482),C=l(634);function _(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[],r=arguments.length>2?arguments[2]:void 0;if(!e)return!1;var n=null==e?void 0:e.replace(/\?.+/,"");return!!new RegExp(".(".concat(t.join("|"),")$"),r?void 0:"i").test(n)||void 0}function T(e){var t=null==e?void 0:e.match(/[^\/]+?\.[^\/]+$/);return t&&t.length>0?t[0]:e}function k(e){if("object"===t(e)&&null!=e&&e.type)return null==e?void 0:e.type;if("string"==typeof e){var r=null;return _(e,["3gp","mpg","mpeg","mp4","m4v","m4p","ogv","ogg","mov","webm"])?r="video/mp4":!function(e){return _(e,["apng","avif","bmp","gif","ico","cur","jpg","jpeg","jfif","pjpeg","pjp","png","svg","tif","tiff","webp"])}(e)?!function(e){return _(e,["3gp","adts","mpeg","mp3","mp4","ogg","mov","webm","rtp","amr","wav"])}(e)?_(e,["pdf"])||_(e,["pdf"])?r="application/pdf":_(e,["xlsx","xls","csv","xlsm","xlsb"])?r="application/vnd.ms-excel":_(e,["doc","docx"])?r="application/msword":_(e,["ppt","pptx"])&&(r="application/vnd.ms-powerpoint"):r="audio/3gpp":r="image/jpeg",r}}function L(e){return Array.isArray(e)?e:e&&[e]||[]}function F(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:1,r=function(e,t){var r=L(e);return t>0&&r.length>t&&(r=r.slice(0,t)),r}(L(e),t);if(0===r.length)return r;var n=r;return Array.isArray(n)||(n=[n]),n=r.map((function(e,t){if("string"==typeof e){var r=(0,C.nanoid)();return{name:r,uid:r,ossUrl:e,url:e}}return e&&!e.uid&&(e.uid=(0,C.nanoid)()),e&&!e.name&&(e.name=e.uid),e}))}function A(e,t){for(var n=0;n<t.length;n++){var o=t[n];o.enumerable=o.enumerable||!1,o.configurable=!0,"value"in o&&(o.writable=!0),Object.defineProperty(e,r(o.key),o)}}var D=l(907);function R(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function U(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?R(Object(r),!0).forEach((function(t){n(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):R(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}var I=function(){function e(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this.axios=t.axios||D.axios,this.axiosConf=t.axiosConf||{},this.serverUrl=t.serverUrl||"/api/v1/user/oss/getWebOssConfig",this.signatureParams=t.signatureParams||{}}var t,r,n;return t=e,r=[{key:"getSignature",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:this.serverUrl,t=arguments.length>1?arguments[1]:void 0;return function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=e.serverUrl,r=void 0===t?"/api/v1/user/oss/getWebOssConfig":t;if(window.__ossSignatureRes&&r===window.__ossSignatureRes.serverUrl&&Date.now()-window.__ossSignatureRes.__saveTime<window.__ossSignatureRes.expireTimeMillis-1e4)return Promise.resolve(window.__ossSignatureRes);var n=e.axios,o=void 0===n?D.axios:n,i=e.params,a=void 0===i?{}:i,c=e.axiosConf;return o.get(r,U(U({},c),{},{params:U({isPublic:1},a)})).then((function(e){var t;return window.__ossSignatureRes=null==e||null===(t=e.data)||void 0===t?void 0:t.data,window.__ossSignatureRes&&(window.__ossSignatureRes.__saveTime=Date.now(),window.__ossSignatureRes.serverUrl=r),window.__ossSignatureRes}))}(U(U({},t),{},{serverUrl:e,axios:(null==t?void 0:t.axios)||this.axios,axiosConf:U(U({},this.axiosConf),null==t?void 0:t.axiosConf)}))}},{key:"upload",value:function(e){var t=this,r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return new Promise(function(){var n=g(O().mark((function n(o,i){var a,c,s,u,l,f,p,d,v;return O().wrap((function(n){for(;;)switch(n.prev=n.next){case 0:return n.next=2,t.getSignature(r.serverUrl||t.serverUrl,U(U({},r),{},{params:U(U({},t.signatureParams),r.signatureParams)}));case 2:if(a=n.sent,c=(r||{}).ossParams,s=new FormData,u=null==e?void 0:e.name,null!=e&&e.name&&(l=null==e?void 0:e.name.match(/^(.+)\.(.+)$/))&&l.length>2&&(u="".concat(l[1],"_").concat(Date.now(),"_").concat((0,C.nanoid)(),".").concat(l[2])),u||(u="".concat(Date.now(),"_").concat((0,C.nanoid)(),".").concat(null===(f=e.type)||void 0===f?void 0:f.replace(/\w+\/, ''/))),p="".concat(null==a?void 0:a.dir).concat(u),s.set("key",p),s.set("OSSAccessKeyId",a.accessid),s.set("policy",a.policy),s.set("Signature",a.signature),a.callback&&s.set("callback",a.callback),s.set("success_action_status",200),s.set("file",e),c)for(d in c)Object.hasOwnProperty.call(c,d)&&s.set(d,c[d]);return v=(null==r?void 0:r.axios)||t.axios,n.abrupt("return",v.post(a.host,s,U(U({},t.axiosConf),null==r?void 0:r.axiosConf)).then((function(e){return o(e),e})).catch((function(e){return console.error("oss upload err",e),i(e),Promise.reject(e)})));case 19:case"end":return n.stop()}}),n)})));return function(e,t){return n.apply(this,arguments)}}())}}],r&&A(t.prototype,r),n&&A(t,n),Object.defineProperty(t,"prototype",{writable:!1}),e}();const N=I;var q=l(379),M=l.n(q),G=l(795),Z=l.n(G),z=l(569),W=l.n(z),$=l(565),B=l.n($),H=l(216),V=l.n(H),Y=l(589),J=l.n(Y),K=l(497),Q={};Q.styleTagTransform=J(),Q.setAttributes=B(),Q.insert=W().bind(null,"head"),Q.domAPI=Z(),Q.insertStyleElement=V();M()(K.Z,Q);K.Z&&K.Z.locals&&K.Z.locals;var X=["onChange"];function ee(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function te(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?ee(Object(r),!0).forEach((function(t){n(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):ee(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}const re=function(e){var t=e.onChange,r=p(e,X),n=r.name,a=void 0===n?"file":n,c=r.multiple,s=void 0!==c&&c,l=r.accept,f=r.value,d=r.maxCount,v=void 0===d?1:d,m=r.maxSize,y=r.listType,b=void 0===y?"text":y,w=r.disabled,x=void 0!==w&&w,j=r.readOnly,_=void 0!==j&&j,L=r.ossUrl,A=void 0===L?"/api/v1/user/oss/getWebOssConfig":L,D=r.isOssUpload,R=r.isStrRes,U=r.isResRemoveArr,I=void 0===U||U,q=r.ossOpt,M=r.onCountExceed,G=r.templateUrl,Z=r.templateDownloadText,z=void 0===Z?"模板下载":Z,W=P((0,o.useState)([]),2),$=W[0],B=W[1],H=function(){var e=g(O().mark((function e(r){var n,o,i,a,c,s,u;return O().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(n=r.fileList,B(n),o=S(n),!D||!R){e.next=24;break}i=0;case 5:if(!(i<o.length)){e.next=24;break}return c=o[i],null!==(a=c)&&void 0!==a&&a.originFileObj&&(c=null===(s=c)||void 0===s?void 0:s.originFileObj),e.next=10,c.ossPromise;case 10:if(e.t2=e.sent,e.t2){e.next=13;break}e.t2=c.url;case 13:if(e.t1=e.t2,e.t1){e.next=16;break}e.t1=c.ossUrl;case 16:if(e.t0=e.t1,e.t0){e.next=19;break}e.t0=c;case 19:u=e.t0,o[i]=u;case 21:i++,e.next=5;break;case 24:!o||o.length<=0?o=void 0:I&&1===v&&(o=o[0]),t&&(null==t||t(o));case 26:case"end":return e.stop()}}),e)})));return function(t){return e.apply(this,arguments)}}();(0,o.useEffect)((function(){if(f){var e=f;"string"==typeof e&&(e=f.split(",")),Array.isArray(e)&&(e=e.map((function(e){return"string"==typeof e?{name:T(e),status:"done",uid:"rc-upload-".concat(Date.now(),"-").concat((0,C.nanoid)()),url:e,type:k(e)}:e}))),B(F(e,v))}}),[f]);var V=te({iconRender:function(e){var t;return"application/pdf"==(null==e?void 0:e.type)?i().createElement(E.FilePdfTwoTone,{twoToneColor:"#DD4B43"}):null!=e&&null!==(t=e.type)&&void 0!==t&&t.startsWith("video/")?i().createElement(E.VideoCameraTwoTone,{twoToneColor:"#3C87F7"}):"application/vnd.ms-excel"==(null==e?void 0:e.type)||"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"==(null==e?void 0:e.type)?i().createElement(E.FileExcelTwoTone,{twoToneColor:"#68B27C"}):"application/vnd.openxmlformats-officedocument.wordprocessingml.document"==(null==e?void 0:e.type)||"application/msword"==(null==e?void 0:e.type)?i().createElement(E.FileWordTwoTone,{twoToneColor:"#88CCF5"}):i().createElement(E.PaperClipOutlined,null)},name:a,accept:l,multiple:s,listType:b,maxCount:v,fileList:$,onChange:H,disabled:x,readOnly:_,onRemove:function(e){var r=($||[]).filter((function(t){return t.url!==e.url}));t&&t(r)},beforeUpload:function(e,t){var r=!1;return t.forEach((function(e){m&&e.size>m&&(u.message.error("".concat(e.name," 文件大小超出限制:").concat(e.size)),"".concat(e.name," 文件大小超出限制:").concat(e.size,"; "),r=!0)})),r?u.Upload.LIST_IGNORE:!(v>0&&$.length>=v)||(M&&M($.length-v),$.length=v,u.message.error("文件个数超出限制"),u.Upload.LIST_IGNORE)},customRequest:D?function(e){e.action,e.data;var t=e.file,n=(e.filename,e.headers,e.method,e.onSuccess),o=(e.onProgress,e.onError),i=new N(te({serverUrl:A},q));t.ossPromise=i.upload(t,{params:te({isPublic:1},r.params||{})}).then((function(e){var r;return t.url=null==e||null===(r=e.data)||void 0===r||null===(r=r.data)||void 0===r?void 0:r.fileUrl,t.ossUrl=t.url,n(t),t.ossUrl})).catch(o)}:null},r||{});return i().createElement(i().Fragment,null,i().createElement(u.Upload,h({className:"oss-uploader"},V),v&&v>$.length?"picture-card"===b?r.btnText||"上传":i().createElement(u.Button,{icon:i().createElement(E.UploadOutlined,null)},r.btnText||"上传"):null),G?i().createElement("a",{className:"uploader-template-download-btn",href:G},z):null)};var ne=(0,o.createContext)(null),oe=l(156);function ie(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function ae(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?ie(Object(r),!0).forEach((function(t){n(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):ie(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}var ce=function(e){var t=(0,o.useContext)(ne)||{},r=e.field,n=void 0===r?{}:r,i=e.onChange,a=e.value,c=n.name,s=n.mode,u=n.componentProps,l=void 0===u?{}:u,f=l.multiple;function p(){return(p=g(O().mark((function t(r){var o,a,s;return O().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:if(a=r,null==n||!n.autoUpload||null===(o=e.fieldsConf[c])||void 0===o||!o.onUpload){t.next=7;break}return t.next=4,null===(s=e.fieldsConf[c])||void 0===s?void 0:s.onUpload(r);case 4:if(a=t.sent){t.next=7;break}return t.abrupt("return");case 7:!f&&a&&1===a.length&&(a=a[0]),i&&i(a);case 9:case"end":return t.stop()}}),t)})))).apply(this,arguments)}var d=ae(ae({mode:s},e),{},{value:"string"==typeof a?[a]:a,axios:null==t?void 0:t.axios,axiosConf:null==t?void 0:t.axiosConf},l);return oe.createElement(re,h({},d,{onChange:function(e){return p.apply(this,arguments)}}))};var se=l(479),ue={};ue.styleTagTransform=J(),ue.setAttributes=B(),ue.insert=W().bind(null,"head"),ue.domAPI=Z(),ue.insertStyleElement=V();M()(se.Z,ue);se.Z&&se.Z.locals&&se.Z.locals;function le(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function fe(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?le(Object(r),!0).forEach((function(t){n(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):le(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}const pe=(0,o.forwardRef)((function(t,r){var n,l=(0,o.useCallback)((0,c.createSchemaField)({components:fe(fe({Space:s.Space,FormGrid:s.FormGrid,FormLayout:s.FormLayout,FormTab:s.FormTab,FormCollapse:s.FormCollapse,ArrayTable:s.ArrayTable,ArrayCards:s.ArrayCards,FormItem:s.FormItem,DatePicker:s.DatePicker,Checkbox:s.Checkbox,Cascader:s.Cascader,Editable:s.Editable,Input:s.Input,NumberPicker:s.NumberPicker,Switch:s.Switch,Password:s.Password,PreviewText:s.PreviewText,Radio:s.Radio,Reset:s.Reset,Select:s.Select,Submit:s.Submit,TimePicker:s.TimePicker,Transfer:s.Transfer,TreeSelect:s.TreeSelect,Card:u.Card,Slider:u.Slider,Rate:u.Rate},e),t.components),scope:fe({},t.schemaScope)}),[]),f=(0,o.useMemo)((function(){return(0,a.createForm)(fe({initialValues:t.initialValues,readOnly:t.readOnly,disabled:t.disabled},t.formOptions||{}))}),[]);(0,o.useImperativeHandle)(r,(function(){return{formRender:f}})),(0,o.useEffect)((function(){t.init&&t.init(f)}),[]);var p=(0,o.useMemo)((function(){var e=t.Slots;return"function"==typeof e?i().createElement(e,null):"function"==typeof(null==e?void 0:e.footer)?i().createElement(e.footer,null):void 0}),[t.Slots]),d=fe({},null===(n=t.schema)||void 0===n?void 0:n.form);return i().createElement(ne.Provider,{value:t},i().createElement(s.Form,{className:"form-render ".concat(t.className),layout:t.layout,form:f,labelCol:t.schema.form.labelCol,wrapperCol:t.schema.form.wrapperCol,onAutoSubmit:function(e){t.onSubmit(e)},onAutoSubmitFailed:function(e){t.onSubmitFailed(e)}},i().createElement(s.FormLayout,d,i().createElement(l,{schema:t.schema.schema}),i().createElement("div",{className:"form-render-footer xxm"},p))))}))})(),f})()));
package/package.json CHANGED
@@ -1,11 +1,14 @@
1
1
  {
2
2
  "name": "@hzab/form-render",
3
- "version": "0.0.2",
3
+ "version": "0.1.1",
4
4
  "description": "",
5
5
  "main": "lib",
6
6
  "scripts": {
7
- "dev": "webpack serve -c ./config/webpack.config.js --env development",
8
- "build": "webpack -c ./config/webpack.config.js --env production"
7
+ "dev": "webpack serve -c ./config/webpack.config.js --env local",
8
+ "build": "webpack -c ./config/webpack.config.js --env production",
9
+ "publish-patch": "npm run build && git add . && git commit -m \"build: patch\" && npm version patch && npm publish --access public",
10
+ "publish-minor": "npm run build && git add . && git commit -m \"build: minor\" && npm version minor && npm publish --access public",
11
+ "publish-major": "npm run build && git add . && git commit -m \"build: major\" && npm version major && npm publish --access public"
9
12
  },
10
13
  "files": [
11
14
  "lib",
@@ -15,52 +18,29 @@
15
18
  "author": "CaiYansong",
16
19
  "license": "ISC",
17
20
  "devDependencies": {
18
- "@babel/core": "^7.20.5",
19
- "@babel/plugin-proposal-class-properties": "^7.18.6",
20
- "@babel/plugin-proposal-decorators": "^7.20.7",
21
- "@babel/plugin-transform-runtime": "^7.19.6",
22
- "@babel/preset-env": "^7.20.2",
23
- "@babel/preset-react": "^7.18.6",
24
- "@babel/preset-typescript": "^7.18.6",
25
- "@babel/runtime": "^7.20.6",
26
- "@types/react": "^18.0.26",
27
- "@types/react-dom": "^18.0.9",
21
+ "@hzab/webpack-config": "0.0.12",
22
+ "@types/react": "^17.0.62",
23
+ "@types/react-dom": "^17.0.20",
28
24
  "antd": "^4.14.0",
29
- "autoprefixer": "^10.4.13",
30
- "babel-loader": "^9.1.0",
31
- "clean-webpack-plugin": "^4.0.0",
32
- "copy-webpack-plugin": "^11.0.0",
33
- "css-loader": "^6.7.3",
34
- "css-minimizer-webpack-plugin": "^4.2.2",
35
25
  "eslint": "^8.30.0",
36
- "eslint-webpack-plugin": "^3.2.0",
37
- "file-loader": "^6.2.0",
38
- "fork-ts-checker-webpack-plugin": "^7.2.14",
39
- "html-webpack-plugin": "^5.5.0",
40
26
  "less": "^4.1.3",
41
- "less-loader": "^11.1.0",
42
- "mini-css-extract-plugin": "^2.7.2",
43
- "postcss-loader": "^7.0.2",
44
- "react": "^18.2.0",
45
- "react-dom": "^18.2.0",
27
+ "react": "^17.0.2",
28
+ "react-dom": "^17.0.2",
46
29
  "react-router-dom": "^6.8.1",
47
- "style-loader": "^3.3.1",
48
- "terser-webpack-plugin": "^5.3.6",
49
- "typescript": "^4.9.4",
50
- "webpack": "^5.75.0",
51
- "webpack-cli": "^5.0.1",
52
- "webpack-dev-server": "^4.11.1",
53
- "webpackbar": "^5.0.2"
30
+ "typescript": "^4.9.4"
54
31
  },
55
32
  "peerDependencies": {
56
- "antd": "<=4.22.8",
33
+ "antd": "4.22.8",
57
34
  "react": ">=16.8.0",
58
35
  "react-dom": ">=16.8.0"
59
36
  },
60
37
  "dependencies": {
61
- "@formily/antd": "^2.2.20",
62
- "@formily/core": "^2.2.20",
63
- "@formily/react": "^2.2.20"
38
+ "@formily/antd": "2.2.20",
39
+ "@formily/core": "2.2.20",
40
+ "@formily/react": "2.2.20",
41
+ "@hzab/data-model": "^0.0.3",
42
+ "ajv": "^8.12.0",
43
+ "axios": "^1.6.2"
64
44
  },
65
45
  "directories": {
66
46
  "lib": "lib"
@@ -0,0 +1,11 @@
1
+ import { createContext, useContext } from "react";
2
+
3
+ /**
4
+ * 组件外部传入的 props context
5
+ */
6
+ export const GlobalPropsContext = createContext(null);
7
+
8
+ /**
9
+ * 组件外部传入的 props
10
+ */
11
+ export const useGlobalPropsContext = () => useContext(GlobalPropsContext);
@@ -0,0 +1,41 @@
1
+ # Uploader
2
+
3
+ 上传组件——使用 antd upload 组件封装而成
4
+
5
+ - 支持 oss 上传
6
+ - 支持限制文件大小
7
+ - 支持预览
8
+ - 支持配置下载模板
9
+
10
+ ### InfoPanel Attributes
11
+
12
+ - 参数参考 antd upload 组件
13
+
14
+ | 参数 | 类型 | 必填 | 默认值 | 说明 |
15
+ | -------------------- | -------- | ---- | -------- | ------------------------------------------------------------------ |
16
+ | name | string | 否 | file | 文件名 |
17
+ | accept | string | 否 | - | 接受上传的文件类型, 详见 input accept Attribute |
18
+ | listType | string | 否 | text | 上传列表的内建样式,支持三种基本样式 text, picture 和 picture-card |
19
+ | maxCount | number | 否 | 1 | 限制上传数量。当为 1 时,始终用最新上传的文件代替当前文件 |
20
+ | maxSize | number | 否 | 1 | 限制上传的文件大小。 |
21
+ | multiple | boolean | 否 | - | 是否支持多选文件,ie10+ 支持。开启后按住 ctrl 可选择多个文件 |
22
+ | disabled | boolean | 否 | false | 禁用状态 |
23
+ | readOnly | boolean | 否 | false | 只读状态 |
24
+ | isResRemoveArr | boolean | 否 | false | maxCount === 1 时,结果是否自动去除数组嵌套 |
25
+ | isOssUpload | boolean | 否 | false | 是否使用 oss 上传 |
26
+ | ossUrl | string | 否 | - | 获取 oss 参数的接口,默认 /api/v1/user/oss/getWebOssConfig |
27
+ | ossOpt | Object | 否 | - | oss 上传的配置参数 |
28
+ | isStrRes | boolean | 否 | false | 是否使用字符串结果(表单中得到的一直是 oss URl 字符串) |
29
+ | onCountExceed | Function | 否 | - | 数量超出 maxCount 时的回调 |
30
+ | uploadProps | Object | 否 | - | antd upload 组件的 props 参数,可覆盖组件已有配置项 |
31
+ | templateUrl | string | 否 | - | 模板下载的地址 |
32
+ | templateDownloadText | string | 否 | 模板下载 | 模板下载按钮的文案 |
33
+
34
+ ### ossOpt
35
+
36
+ | 参数 | 类型 | 必填 | 默认值 | 说明 |
37
+ | --------------- | ------ | ---- | ------ | -------------------------------------------------------------- |
38
+ | axios | Object | 否 | - | 发起请求的 axios |
39
+ | axiosConf | Object | 否 | - | axios 配置 |
40
+ | signatureParams | Object | 否 | - | 请求 oss 上传地址接口的入参 |
41
+ | serverUrl | string | 否 | - | 请求 oss 上传地址的接口,默认 /api/v1/user/oss/getWebOssConfig |
@@ -0,0 +1,39 @@
1
+ import { checkImageUrl, checkVideoUrl, checkAudioUrl } from "./utils";
2
+
3
+ export const TYPE_VIDEO = "video";
4
+ export const TYPE_IMG = "img";
5
+ export const TYPE_AUDIO = "audio";
6
+
7
+ export function checkFileType(file) {
8
+ const { type, url = file?.ossUrl } = file || {};
9
+ let fileType = "";
10
+ // 判断文件类型,获取对应展示的数据
11
+ if (url) {
12
+ // 图片
13
+ if (url.startsWith("data:image/") || checkImageUrl(url)) {
14
+ fileType = TYPE_IMG;
15
+ } else if (checkVideoUrl(url)) {
16
+ // 视频
17
+ fileType = TYPE_VIDEO;
18
+ } else if (checkAudioUrl(url)) {
19
+ // 音频
20
+ fileType = TYPE_AUDIO;
21
+ }
22
+ } else if (type) {
23
+ // 图片
24
+ if (type?.startsWith("image/")) {
25
+ fileType = TYPE_IMG;
26
+ }
27
+
28
+ // 视频
29
+ if (type?.startsWith("video/")) {
30
+ fileType = TYPE_VIDEO;
31
+ }
32
+
33
+ // 音频
34
+ if (type?.startsWith("audio/")) {
35
+ fileType = TYPE_AUDIO;
36
+ }
37
+ }
38
+ return fileType;
39
+ }
@@ -0,0 +1,155 @@
1
+ import { axios } from "@hzab/data-model";
2
+ import { nanoid } from "nanoid";
3
+
4
+ export function getSignature(opt = {}) {
5
+ const { serverUrl = "/api/v1/user/oss/getWebOssConfig" } = opt;
6
+ // 减 10 秒,避免发起请求时 刚好过期的情况
7
+ if (
8
+ window.__ossSignatureRes &&
9
+ serverUrl === window.__ossSignatureRes.serverUrl &&
10
+ Date.now() - window.__ossSignatureRes.__saveTime < window.__ossSignatureRes.expireTimeMillis - 10000
11
+ ) {
12
+ return Promise.resolve(window.__ossSignatureRes);
13
+ }
14
+ const { axios: _ax = axios, params = {}, axiosConf } = opt;
15
+ return _ax
16
+ .get(serverUrl, {
17
+ ...axiosConf,
18
+ params: {
19
+ isPublic: 1,
20
+ ...params,
21
+ },
22
+ })
23
+ .then((res) => {
24
+ window.__ossSignatureRes = res?.data?.data;
25
+ if (window.__ossSignatureRes) {
26
+ window.__ossSignatureRes.__saveTime = Date.now();
27
+ window.__ossSignatureRes.serverUrl = serverUrl;
28
+ }
29
+ return window.__ossSignatureRes;
30
+ });
31
+ }
32
+
33
+ class OssUpload {
34
+ constructor(props = {}) {
35
+ this.axios = props.axios || axios;
36
+ this.axiosConf = props.axiosConf || {};
37
+ this.serverUrl = props.serverUrl || "/api/v1/user/oss/getWebOssConfig";
38
+ this.signatureParams = props.signatureParams || {};
39
+ }
40
+
41
+ getSignature(serverUrl = this.serverUrl, opt) {
42
+ return getSignature({
43
+ ...opt,
44
+ serverUrl,
45
+ axios: opt?.axios || this.axios,
46
+ axiosConf: { ...this.axiosConf, ...opt?.axiosConf },
47
+ });
48
+ }
49
+
50
+ upload(file, opt = {}) {
51
+ return new Promise(async (resolve, reject) => {
52
+ const ossParams = await this.getSignature(opt.serverUrl || this.serverUrl, {
53
+ ...opt,
54
+ params: { ...this.signatureParams, ...opt.signatureParams },
55
+ });
56
+
57
+ const { ossParams: propOssParams } = opt || {};
58
+ const formData = new FormData();
59
+ // key 表示上传到 Bucket 内的 Object 的完整路径,例如 exampledir/exampleobject.txtObject,完整路径中不能包含 Bucket 名称。
60
+ // filename 表示待上传的本地文件名称。
61
+ let filename = file?.name;
62
+ if (file?.name) {
63
+ const nameArr = file?.name.match(/^(.+)\.(.+)$/);
64
+ if (nameArr && nameArr.length > 2) {
65
+ filename = `${nameArr[1]}_${Date.now()}_${nanoid()}.${nameArr[2]}`;
66
+ }
67
+ }
68
+ if (!filename) {
69
+ filename = `${Date.now()}_${nanoid()}.${file.type?.replace(/\w+\/, ''/)}`;
70
+ }
71
+ const key = `${ossParams?.dir}${filename}`;
72
+ formData.set("key", key);
73
+ formData.set("OSSAccessKeyId", ossParams.accessid);
74
+ formData.set("policy", ossParams.policy);
75
+ formData.set("Signature", ossParams.signature);
76
+ if (ossParams.callback) {
77
+ formData.set("callback", ossParams.callback);
78
+ }
79
+ formData.set("success_action_status", 200);
80
+ formData.set("file", file);
81
+
82
+ if (propOssParams) {
83
+ for (const key in propOssParams) {
84
+ if (Object.hasOwnProperty.call(propOssParams, key)) {
85
+ formData.set(key, propOssParams[key]);
86
+ }
87
+ }
88
+ }
89
+
90
+ const _axios = opt?.axios || this.axios;
91
+
92
+ return _axios
93
+ .post(ossParams.host, formData, { ...this.axiosConf, ...opt?.axiosConf })
94
+ .then((res) => {
95
+ resolve(res);
96
+ return res;
97
+ })
98
+ .catch((err) => {
99
+ console.error("oss upload err", err);
100
+ reject(err);
101
+ return Promise.reject(err);
102
+ });
103
+ });
104
+ }
105
+ }
106
+
107
+ /**
108
+ * 处理文件上传逻辑
109
+ * @param {Array} files
110
+ * @param {Object} opt
111
+ * @returns
112
+ */
113
+ export async function handleOssUpload(files, opt) {
114
+ const _files = files;
115
+ const { ossUrl, signatureParams, ossParams, axiosConf } = opt || {};
116
+ const ossUpload = new OssUpload({
117
+ axios: opt.axios,
118
+ axiosConf: axiosConf,
119
+ serverUrl: ossUrl || "/api/v1/user/oss/getWebOssConfig",
120
+ });
121
+
122
+ const promise = [];
123
+ _files?.forEach((file) => {
124
+ // 数据已经是 url 的情况
125
+ if (typeof file === "string" || file.ossUrl) {
126
+ promise.push(Promise.resolve(file));
127
+ } else {
128
+ promise.push(
129
+ ossUpload
130
+ .upload(file, {
131
+ signatureParams: {
132
+ isPublic: 1,
133
+ ...(signatureParams || {}),
134
+ },
135
+ ossParams,
136
+ axiosConf,
137
+ })
138
+ .then((res) => {
139
+ return Promise.resolve(res?.data?.data?.fileUrl);
140
+ }),
141
+ );
142
+ }
143
+ });
144
+
145
+ return Promise.all(promise).then((filePromises) => {
146
+ filePromises?.forEach((fileUrl, idx) => {
147
+ _files[idx].ossUrl = fileUrl;
148
+ });
149
+ return Promise.resolve(_files);
150
+ });
151
+ }
152
+
153
+ export { axios };
154
+
155
+ export default OssUpload;
@@ -0,0 +1,177 @@
1
+ import { nanoid } from "nanoid";
2
+
3
+ /**
4
+ * 建立一个可以存取该 file 的 url
5
+ * @param {Object} file 文件
6
+ * @returns {string} url
7
+ * blob:http://localhost:8000/c9950644-5118-4231-9be7-8183bde1fdc7
8
+ */
9
+ export function getFileURL(file) {
10
+ let url = file.url || null;
11
+
12
+ try {
13
+ // 下面函数执行的效果是一样的,只是需要针对不同的浏览器执行不同的 js 函数而已
14
+ if (window.createObjectURL != undefined) {
15
+ // basic
16
+ url = window.createObjectURL(file);
17
+ } else if (window.URL != undefined) {
18
+ // mozilla(firefox)
19
+ url = window.URL.createObjectURL(file);
20
+ } else if (window.webkitURL != undefined) {
21
+ // webkit or chrome
22
+ url = window.webkitURL.createObjectURL(file);
23
+ }
24
+ } catch (error) {
25
+ console.warn("getFileURL Error: ", error);
26
+ }
27
+
28
+ return url;
29
+ }
30
+
31
+ /**
32
+ * 判断 url 是否带有指定图片后缀
33
+ * @param {string} url
34
+ * @returns
35
+ */
36
+ export function checkImageUrl(url) {
37
+ const imgTypes = [
38
+ "apng",
39
+ "avif",
40
+ "bmp",
41
+ "gif",
42
+ "ico",
43
+ "cur",
44
+ "jpg",
45
+ "jpeg",
46
+ "jfif",
47
+ "pjpeg",
48
+ "pjp",
49
+ "png",
50
+ "svg",
51
+ "tif",
52
+ "tiff",
53
+ "webp",
54
+ ];
55
+ return checkUrlSuffix(url, imgTypes);
56
+ }
57
+
58
+ /**
59
+ * 判断 url 是否带有指定视频后缀
60
+ * @param {string} url
61
+ * @returns
62
+ */
63
+ export function checkVideoUrl(url) {
64
+ const imgTypes = ["3gp", "mpg", "mpeg", "mp4", "m4v", "m4p", "ogv", "ogg", "mov", "webm"];
65
+ return checkUrlSuffix(url, imgTypes);
66
+ }
67
+
68
+ /**
69
+ * 判断 url 是否带有指定音频后缀
70
+ * @param {string} url
71
+ * @returns
72
+ */
73
+ export function checkAudioUrl(url) {
74
+ const imgTypes = ["3gp", "adts", "mpeg", "mp3", "mp4", "ogg", "mov", "webm", "rtp", "amr", "wav"];
75
+ return checkUrlSuffix(url, imgTypes);
76
+ }
77
+
78
+ /**
79
+ * 检查 url 是否带有指定后缀
80
+ * @param {string} url url 地址
81
+ * @param {Array} types 后缀数组
82
+ * @returns
83
+ */
84
+ export function checkUrlSuffix(url, types = [], caseSensitive) {
85
+ if (!url) {
86
+ return false;
87
+ }
88
+ let _url = url?.replace(/\?.+/, "");
89
+ const reg = new RegExp(`\.(${types.join("|")})$`, caseSensitive ? undefined : "i");
90
+ if (reg.test(_url)) {
91
+ return true;
92
+ }
93
+ }
94
+
95
+ export function getFileName(fileUrl) {
96
+ const res = fileUrl?.match(/[^\/]+?\.[^\/]+$/);
97
+ if (res && res.length > 0) {
98
+ return res[0];
99
+ }
100
+ return fileUrl;
101
+ }
102
+
103
+ export function getFileType(file) {
104
+ if (typeof file === "object" && file?.type) {
105
+ return file?.type;
106
+ }
107
+ if (typeof file === "string") {
108
+ let type = null;
109
+ if (checkVideoUrl(file)) {
110
+ type = "video/mp4";
111
+ } else if (checkImageUrl(file)) {
112
+ type = "image/jpeg";
113
+ } else if (checkAudioUrl(file)) {
114
+ type = "audio/3gpp";
115
+ } else if (checkUrlSuffix(file, ["pdf"])) {
116
+ type = "application/pdf";
117
+ } else if (checkUrlSuffix(file, ["pdf"])) {
118
+ type = "application/pdf";
119
+ } else if (checkUrlSuffix(file, ["xlsx", "xls", "csv", "xlsm", "xlsb"])) {
120
+ type = "application/vnd.ms-excel";
121
+ } else if (checkUrlSuffix(file, ["doc", "docx"])) {
122
+ type = "application/msword";
123
+ } else if (checkUrlSuffix(file, ["ppt", "pptx"])) {
124
+ type = "application/vnd.ms-powerpoint";
125
+ }
126
+ return type;
127
+ }
128
+ }
129
+
130
+ function getArr(value) {
131
+ return Array.isArray(value) ? value : (value && [value]) || [];
132
+ }
133
+
134
+ export function handleMaxCount(fileList, maxCount) {
135
+ let list = getArr(fileList);
136
+ if (maxCount > 0 && list.length > maxCount) {
137
+ list = list.slice(0, maxCount);
138
+ }
139
+ return list;
140
+ }
141
+
142
+ /**
143
+ * 处理传入的数据,数据格式统一转成 Array<fileObject>
144
+ * @param {Array} fileList Array<fileObject|string>
145
+ * @param {number} maxCount
146
+ * @returns Array<fileObject>
147
+ */
148
+ export function handleInputFileList(_fileList, maxCount = 1) {
149
+ const fileList = handleMaxCount(getArr(_fileList), maxCount);
150
+ if (fileList.length === 0) {
151
+ return fileList;
152
+ }
153
+ let resList = fileList;
154
+ if (!Array.isArray(resList)) {
155
+ resList = [resList];
156
+ }
157
+ resList = fileList.map((file, i) => {
158
+ if (typeof file === "string") {
159
+ const uid = nanoid();
160
+ return {
161
+ name: uid,
162
+ uid: uid,
163
+ ossUrl: file,
164
+ url: file,
165
+ // size: Infinity,
166
+ };
167
+ }
168
+ if (file && !file.uid) {
169
+ file.uid = nanoid();
170
+ }
171
+ if (file && !file.name) {
172
+ file.name = file.uid;
173
+ }
174
+ return file;
175
+ });
176
+ return resList;
177
+ }
@@ -0,0 +1,16 @@
1
+ .uploader-image-previewer {
2
+ display: flex;
3
+ justify-content: center;
4
+ align-items: center;
5
+ width: 100%;
6
+ height: 100%;
7
+ border: 1px solid #eee;
8
+ color: #fff;
9
+ border-radius: 4px;
10
+ cursor: pointer;
11
+
12
+ .uploader-image-previewer-img {
13
+ max-width: 100%;
14
+ max-height: 100%;
15
+ }
16
+ }
@@ -0,0 +1,33 @@
1
+ import { useState } from "react";
2
+ import { Modal } from "antd";
3
+
4
+ import "./index.less";
5
+
6
+ function ImagePreviewer(props) {
7
+ const [modalVisible, setMaskVisible] = useState(false);
8
+
9
+ function onPreview() {
10
+ setMaskVisible(true);
11
+ }
12
+
13
+ return (
14
+ <>
15
+ <div className={`uploader-image-previewer ${props.className || ""}`} onClick={onPreview}>
16
+ <img className="uploader-image-previewer-img" src={props.src} alt={props.alt} />
17
+ </div>
18
+ <Modal
19
+ className="formily-uploader-previewer-modal"
20
+ title="预览"
21
+ width={800}
22
+ visible={modalVisible}
23
+ destroyOnClose
24
+ onCancel={(e) => setMaskVisible(false)}
25
+ footer={null}
26
+ >
27
+ <img className="previewer-content" src={props.src} alt={props.alt} />
28
+ </Modal>
29
+ </>
30
+ );
31
+ }
32
+
33
+ export default ImagePreviewer;
@@ -0,0 +1,22 @@
1
+ import { CloseCircleOutlined } from "@ant-design/icons";
2
+
3
+ export const ItemRender = (props) => {
4
+ const { index, disabled, readOnly, onItemDel } = props;
5
+ return (
6
+ <div className="file-item">
7
+ {props.children}
8
+ {disabled || readOnly ? null : (
9
+ <div
10
+ className="file-item-del"
11
+ onClick={() => {
12
+ onItemDel(index);
13
+ }}
14
+ >
15
+ <CloseCircleOutlined />
16
+ </div>
17
+ )}
18
+ </div>
19
+ );
20
+ };
21
+
22
+ export default ItemRender;
@@ -0,0 +1,53 @@
1
+ import { getFileURL } from "../../common/utils";
2
+
3
+ import { TYPE_VIDEO, TYPE_IMG, TYPE_AUDIO, checkFileType } from "../../common/checkFileType";
4
+
5
+ import Video from "../video";
6
+ import Image from "../Image";
7
+ import ItemRender from "./ItemRender";
8
+
9
+ export const ItemList = (props) => {
10
+ const { fileList, baseUrl, disabled, readOnly, onItemDel } = props || {};
11
+
12
+ return (
13
+ <>
14
+ {fileList.map((it, idx) => {
15
+ if (!it) {
16
+ return null;
17
+ }
18
+ const { name, url = it?.ossUrl } = it || {};
19
+
20
+ let src = url || getFileURL(it);
21
+
22
+ if (baseUrl) {
23
+ src = baseUrl + src;
24
+ }
25
+
26
+ let content = (
27
+ <div className="file-item-view" title={it?.name}>
28
+ {it?.name}
29
+ </div>
30
+ );
31
+
32
+ const fileType = checkFileType(it);
33
+ if (fileType === TYPE_IMG) {
34
+ content = <Image src={src} alt={name} />;
35
+ }
36
+ if (fileType === TYPE_VIDEO) {
37
+ content = <Video src={src} href={src} />;
38
+ }
39
+ if (fileType === TYPE_AUDIO) {
40
+ content = <audio src={src} controls></audio>;
41
+ }
42
+
43
+ return (
44
+ <ItemRender index={idx} key={name + "_" + idx} disabled={disabled} readOnly={readOnly} onItemDel={onItemDel}>
45
+ {content}
46
+ </ItemRender>
47
+ );
48
+ })}
49
+ </>
50
+ );
51
+ };
52
+
53
+ export default ItemList;
@@ -0,0 +1,39 @@
1
+ import { useState } from "react";
2
+ import { Modal } from "antd";
3
+ import { PlayCircleOutlined } from "@ant-design/icons";
4
+
5
+ import "./index.less";
6
+
7
+ function Video({ src, href }) {
8
+ const [modalVisible, setMaskVisible] = useState(false);
9
+
10
+ function onPreview() {
11
+ setMaskVisible(true);
12
+ }
13
+
14
+ return (
15
+ <>
16
+ <div className="uploader-video-wrap" onClick={onPreview}>
17
+ <PlayCircleOutlined className="uploader-video-play-icon" />
18
+ </div>
19
+
20
+ <Modal
21
+ className="formily-uploader-previewer-modal"
22
+ title="预览"
23
+ width={800}
24
+ visible={modalVisible}
25
+ destroyOnClose
26
+ onCancel={() => setMaskVisible(false)}
27
+ footer={null}
28
+ >
29
+ <video className="previewer-content" src={src} controls>
30
+ 抱歉,您的浏览器不支持内嵌视频,不过不用担心,你可以
31
+ <a href={href || src}>下载</a>
32
+ 并用你喜欢的播放器观看!
33
+ </video>
34
+ </Modal>
35
+ </>
36
+ );
37
+ }
38
+
39
+ export default Video;
@@ -0,0 +1,14 @@
1
+ .uploader-video-wrap {
2
+ display: flex;
3
+ justify-content: center;
4
+ align-items: center;
5
+ width: 100%;
6
+ height: 100%;
7
+ border: 1px solid #eee;
8
+ color: #999;
9
+ border-radius: 4px;
10
+ cursor: pointer;
11
+ .uploader-video-play-icon {
12
+ font-size: 30px;
13
+ }
14
+ }
@@ -0,0 +1,38 @@
1
+ import UploaderCom from "./uploader";
2
+ import { useGlobalPropsContext } from "../../common/global-props-context";
3
+
4
+ export const Upload = (props) => {
5
+ // 组件外部传入的 props
6
+ const globalProps = useGlobalPropsContext() || {};
7
+ const { field = {}, onChange, value } = props;
8
+ const { name, mode, componentProps = {} } = field;
9
+ const { multiple } = componentProps;
10
+
11
+ async function onUploadChange(files) {
12
+ let _files = files;
13
+ if (field?.autoUpload && props.fieldsConf[name]?.onUpload) {
14
+ _files = await props.fieldsConf[name]?.onUpload(files);
15
+ if (!_files) {
16
+ return;
17
+ }
18
+ }
19
+ // 若单选模式,默认只返回对应数据,而非嵌套一层数组
20
+ if (!multiple && _files && _files.length === 1) {
21
+ _files = _files[0];
22
+ }
23
+ onChange && onChange(_files);
24
+ }
25
+
26
+ const _props = {
27
+ mode: mode,
28
+ ...props,
29
+ value: typeof value === "string" ? [value] : value,
30
+ axios: globalProps?.axios,
31
+ axiosConf: globalProps?.axiosConf,
32
+ ...componentProps,
33
+ };
34
+
35
+ return <UploaderCom {..._props} onChange={onUploadChange} />;
36
+ };
37
+
38
+ export default Upload;
@@ -0,0 +1,151 @@
1
+ import { useState, useRef, useEffect, useMemo } from "react";
2
+ import { Button, Modal, message } from "antd";
3
+
4
+ import ItemList from "./components/ItemList";
5
+
6
+ import { handleMaxCount, handleInputFileList } from "./common/utils";
7
+ import { handleOssUpload } from "./common/ossUpload";
8
+
9
+ import "./uploader.less";
10
+
11
+ const _ = require("lodash");
12
+
13
+ function Uploader(props) {
14
+ const {
15
+ name,
16
+ multiple,
17
+ // 模式字符串: all | select | image | video 或 数组 select | image | video 组合:如:['select', 'image']
18
+ mode = "select",
19
+ onChange,
20
+ accept,
21
+ disabled,
22
+ readOnly,
23
+ value,
24
+ baseUrl = "",
25
+ // 文件大小限制
26
+ maxSize,
27
+ maxCount = 1,
28
+ // 是否使用 oss 上传文件
29
+ isOssUpload,
30
+ // 是否使用字符串结果
31
+ isStrRes,
32
+ // maxCount === 1 时,结果是否自动去除数组嵌套
33
+ isResRemoveArr = true,
34
+ ossUrl,
35
+ ossOpt,
36
+ onCountExceed,
37
+ } = props;
38
+ const [loading, setLoading] = useState(false);
39
+ const [fileList, setFileList] = useState(handleInputFileList(value, maxCount));
40
+ useEffect(() => {
41
+ setFileList(handleInputFileList(value, maxCount));
42
+ }, [value]);
43
+
44
+ async function onFileChange(e) {
45
+ e.persist();
46
+ const { files: rawFiles } = e.target;
47
+ let files = [...fileList, ...[].slice.call(rawFiles)];
48
+ // 超出个数限制只保留前面的 maxCount 个
49
+ if (maxCount > 0 && files.length > maxCount) {
50
+ onCountExceed && onCountExceed(files.length - maxCount);
51
+ files.length = maxCount;
52
+ message.error("文件个数超出限制");
53
+ }
54
+ files = files.filter((it) => {
55
+ if (maxSize && it.size > maxSize) {
56
+ message.error("文件大小超出限制:" + it.size);
57
+ return false;
58
+ }
59
+ return it;
60
+ });
61
+ // 处理 oss 逻辑
62
+ if (isOssUpload) {
63
+ setLoading(true);
64
+ files = await handleOssUpload(files, {
65
+ axios: props.axios,
66
+ axiosConf: props?.axiosConf,
67
+ ...ossOpt,
68
+ ossUrl,
69
+ });
70
+ setLoading(false);
71
+ }
72
+
73
+ e.target.value = ""; // HACK: fix the same file doesn't trigger onChange
74
+ handleChange(files);
75
+ }
76
+
77
+ function handleChange(files, optType) {
78
+ let _files = files;
79
+ if (optType !== "del" && maxCount > 1) {
80
+ _files = [...fileList, ..._files];
81
+ }
82
+ _files = handleMaxCount(files, maxCount);
83
+ setFileList(_files);
84
+ if (isOssUpload && isStrRes) {
85
+ _files = _files?.map((file) => {
86
+ return file.url || file.ossUrl;
87
+ });
88
+ }
89
+ if (!_files || _files.length <= 0) {
90
+ _files = undefined;
91
+ } else if (isResRemoveArr && maxCount === 1) {
92
+ // maxCount 为1的时候返回结果去除数组
93
+ _files = _files[0];
94
+ }
95
+ onChange && onChange(_files);
96
+ }
97
+
98
+ const uploaderRef = useRef();
99
+
100
+ function onItemDel(idx) {
101
+ Modal.confirm({
102
+ content: "确认删除?",
103
+ onOk: () => {
104
+ const middleValue = _.cloneDeep(fileList);
105
+ middleValue.splice(idx, 1);
106
+ handleChange(middleValue, "del");
107
+ setFileList(middleValue);
108
+ },
109
+ });
110
+ }
111
+
112
+ const inputProps = {
113
+ className: "aria-hidden",
114
+ style: { display: "none" },
115
+ id: name,
116
+ onChange: onFileChange,
117
+ type: "file",
118
+ name: name,
119
+ multiple: multiple,
120
+ accept: accept,
121
+ capture: props.capture,
122
+ };
123
+
124
+ return (
125
+ <div className="uploader">
126
+ <input {...inputProps} ref={uploaderRef}></input>
127
+ <ItemList
128
+ fileList={fileList}
129
+ baseUrl={isOssUpload ? baseUrl : ""}
130
+ disabled={disabled}
131
+ readOnly={readOnly}
132
+ onItemDel={onItemDel}
133
+ />
134
+ {disabled || readOnly || (maxCount > 0 && fileList.length >= maxCount) ? null : (
135
+ <>
136
+ <Button
137
+ className="uploader-add-btn"
138
+ onClick={() => {
139
+ uploaderRef.current.click();
140
+ }}
141
+ loading={loading}
142
+ >
143
+ {loading ? "" : "+"}
144
+ </Button>
145
+ </>
146
+ )}
147
+ </div>
148
+ );
149
+ }
150
+
151
+ export default Uploader;
@@ -0,0 +1,200 @@
1
+ import {
2
+ UploadOutlined,
3
+ PaperClipOutlined,
4
+ FilePdfTwoTone,
5
+ VideoCameraTwoTone,
6
+ FileExcelTwoTone,
7
+ FileWordTwoTone,
8
+ } from "@ant-design/icons";
9
+ import { Button, Upload as AUpload, message } from "antd";
10
+ import React, { useEffect, useState } from "react";
11
+ import { nanoid } from "nanoid";
12
+
13
+ import { handleInputFileList, getFileName, getFileType } from "./common/utils";
14
+ import UploadOss from "./common/ossUpload";
15
+
16
+ import "./uploader.less";
17
+
18
+ export function Uploader({ onChange, ...props }) {
19
+ const {
20
+ name = "file",
21
+ multiple = false,
22
+ accept,
23
+ value,
24
+ maxCount = 1,
25
+ // 文件大小限制
26
+ maxSize,
27
+ listType = "text",
28
+ disabled = false,
29
+ readOnly = false,
30
+ ossUrl = "/api/v1/user/oss/getWebOssConfig",
31
+ // 是否使用 oss 上传文件
32
+ isOssUpload,
33
+ // 是否使用字符串结果
34
+ isStrRes,
35
+ // maxCount === 1 时,结果是否自动去除数组嵌套
36
+ isResRemoveArr = true,
37
+ ossOpt,
38
+ onCountExceed,
39
+ templateUrl,
40
+ templateDownloadText = "模板下载",
41
+ } = props;
42
+
43
+ const [fileList, setFileList] = useState([]);
44
+
45
+ const handleChange = async ({ fileList }) => {
46
+ setFileList(fileList);
47
+ let _files = [...fileList];
48
+ // 处理提交结果为字符串的情况
49
+ if (isOssUpload && isStrRes) {
50
+ for (let i = 0; i < _files.length; i++) {
51
+ let _file = _files[i];
52
+ if (_file?.originFileObj) {
53
+ _file = _file?.originFileObj;
54
+ }
55
+ // 从文件对象中获取 url,ossPromise 为上传中的文件,兼容 file 为字符串的情况
56
+ let str = (await _file.ossPromise) || _file.url || _file.ossUrl || _file;
57
+ _files[i] = str;
58
+ }
59
+ }
60
+ // 处理空数据情况
61
+ if (!_files || _files.length <= 0) {
62
+ _files = undefined;
63
+ } else if (isResRemoveArr && maxCount === 1) {
64
+ // maxCount 为 1 的时候返回结果去除数组
65
+ _files = _files[0];
66
+ }
67
+ onChange && onChange?.(_files);
68
+ };
69
+
70
+ useEffect(() => {
71
+ if (!value) {
72
+ return;
73
+ }
74
+ let _list = value;
75
+ if (typeof _list === "string") {
76
+ _list = value.split(",");
77
+ }
78
+ if (Array.isArray(_list)) {
79
+ _list = _list.map((res) => {
80
+ if (typeof res === "string") {
81
+ return {
82
+ name: getFileName(res),
83
+ status: "done",
84
+ uid: `rc-upload-${Date.now()}-${nanoid()}`,
85
+ url: res,
86
+ type: getFileType(res),
87
+ };
88
+ }
89
+ return res;
90
+ });
91
+ }
92
+ setFileList(handleInputFileList(_list, maxCount));
93
+ }, [value]);
94
+
95
+ const onRemove = (file) => {
96
+ const files = (fileList || []).filter((v) => v.url !== file.url);
97
+ onChange && onChange(files);
98
+ };
99
+
100
+ const _uploadProps = {
101
+ iconRender: (e) => {
102
+ if (e?.type == "application/pdf") {
103
+ return <FilePdfTwoTone twoToneColor={"#DD4B43"} />;
104
+ } else if (e?.type?.startsWith("video/")) {
105
+ return <VideoCameraTwoTone twoToneColor={"#3C87F7"} />;
106
+ } else if (
107
+ e?.type == "application/vnd.ms-excel" ||
108
+ e?.type == "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"
109
+ ) {
110
+ return <FileExcelTwoTone twoToneColor={"#68B27C"} />;
111
+ } else if (
112
+ e?.type == "application/vnd.openxmlformats-officedocument.wordprocessingml.document" ||
113
+ e?.type == "application/msword"
114
+ ) {
115
+ return <FileWordTwoTone twoToneColor={"#88CCF5"} />;
116
+ } else {
117
+ return <PaperClipOutlined />;
118
+ }
119
+ },
120
+ name: name,
121
+ accept: accept,
122
+ multiple: multiple,
123
+ listType: listType,
124
+ maxCount: maxCount,
125
+ fileList: fileList,
126
+ onChange: handleChange,
127
+ disabled,
128
+ readOnly,
129
+ onRemove,
130
+ beforeUpload(file, _fileList) {
131
+ // 文件大小限制
132
+ let hasOverSize = false;
133
+ let overSizeTips = "";
134
+ _fileList.forEach((it) => {
135
+ if (maxSize && it.size > maxSize) {
136
+ message.error(`${it.name} 文件大小超出限制:${it.size}`);
137
+ overSizeTips += `${it.name} 文件大小超出限制:${it.size}; `;
138
+ hasOverSize = true;
139
+ }
140
+ });
141
+ if (hasOverSize) {
142
+ return AUpload.LIST_IGNORE;
143
+ }
144
+
145
+ // 超出个数限制只保留前面的 maxCount 个
146
+ if (maxCount > 0 && fileList.length >= maxCount) {
147
+ onCountExceed && onCountExceed(fileList.length - maxCount);
148
+ fileList.length = maxCount;
149
+ message.error("文件个数超出限制");
150
+ return AUpload.LIST_IGNORE;
151
+ }
152
+ return true;
153
+ },
154
+ customRequest: isOssUpload
155
+ ? function customRequest({ action, data, file, filename, headers, method, onSuccess, onProgress, onError }) {
156
+ const ossUpload = new UploadOss({
157
+ serverUrl: ossUrl,
158
+ ...ossOpt,
159
+ });
160
+ file.ossPromise = ossUpload
161
+ .upload(file, {
162
+ params: {
163
+ isPublic: 1,
164
+ ...(props.params || {}),
165
+ },
166
+ })
167
+ .then((res) => {
168
+ file.url = res?.data?.data?.fileUrl;
169
+ file.ossUrl = file.url;
170
+ onSuccess(file);
171
+ return file.ossUrl;
172
+ })
173
+ .catch(onError);
174
+ return;
175
+ }
176
+ : null,
177
+ ...(props || {}),
178
+ };
179
+
180
+ return (
181
+ <>
182
+ <AUpload className="oss-uploader" {..._uploadProps}>
183
+ {maxCount && maxCount > fileList.length ? (
184
+ listType === "picture-card" ? (
185
+ props.btnText || "上传"
186
+ ) : (
187
+ <Button icon={<UploadOutlined />}>{props.btnText || "上传"}</Button>
188
+ )
189
+ ) : null}
190
+ </AUpload>
191
+ {templateUrl ? (
192
+ <a className="uploader-template-download-btn" href={templateUrl}>
193
+ {templateDownloadText}
194
+ </a>
195
+ ) : null}
196
+ </>
197
+ );
198
+ }
199
+
200
+ export default Uploader;
@@ -0,0 +1,3 @@
1
+ .uploader-template-download-btn {
2
+ color: #1890ff;
3
+ }
@@ -1,3 +1,5 @@
1
1
  import Text from "./Text";
2
2
 
3
+ export * from "./Upload";
4
+
3
5
  export { Text };
package/src/index.tsx CHANGED
@@ -21,7 +21,7 @@ import {
21
21
  TimePicker,
22
22
  Transfer,
23
23
  TreeSelect,
24
- Upload,
24
+ // Upload,
25
25
  FormGrid,
26
26
  FormLayout,
27
27
  FormTab,
@@ -32,6 +32,7 @@ import {
32
32
  import { Card, Slider, Rate } from "antd";
33
33
  // 自定义组件
34
34
  import * as customComponents from "./components/index";
35
+ import { GlobalPropsContext } from "./common/global-props-context";
35
36
 
36
37
  import "./index.less";
37
38
 
@@ -63,7 +64,7 @@ const FormRender = forwardRef((props: any, parentRef) => {
63
64
  TimePicker,
64
65
  Transfer,
65
66
  TreeSelect,
66
- Upload,
67
+ // Upload,
67
68
  Card,
68
69
  Slider,
69
70
  Rate,
@@ -102,19 +103,37 @@ const FormRender = forwardRef((props: any, parentRef) => {
102
103
  props.init && props.init(formRender);
103
104
  }, []);
104
105
 
106
+ const footer = useMemo(() => {
107
+ const { Slots } = props;
108
+ if (typeof Slots === "function") {
109
+ return <Slots />;
110
+ }
111
+ if (typeof Slots?.footer === "function") {
112
+ return <Slots.footer />;
113
+ }
114
+ }, [props.Slots]);
115
+
116
+ const formLayoutProps = {
117
+ ...props.schema?.form,
118
+ };
119
+
105
120
  return (
106
- <Form
107
- className={`form-render ${props.className}`}
108
- layout={props.layout}
109
- form={formRender}
110
- labelCol={props.schema.form.labelCol}
111
- wrapperCol={props.schema.form.wrapperCol}
112
- onAutoSubmit={autoSubmit}
113
- onAutoSubmitFailed={autoSubmitFailed}
114
- >
115
- <SchemaField schema={props.schema.schema}></SchemaField>
116
- <div className="form-render-footer xxm">{props.Slots && <props.Slots />}</div>
117
- </Form>
121
+ <GlobalPropsContext.Provider value={props}>
122
+ <Form
123
+ className={`form-render ${props.className}`}
124
+ layout={props.layout}
125
+ form={formRender}
126
+ labelCol={props.schema.form.labelCol}
127
+ wrapperCol={props.schema.form.wrapperCol}
128
+ onAutoSubmit={autoSubmit}
129
+ onAutoSubmitFailed={autoSubmitFailed}
130
+ >
131
+ <FormLayout {...formLayoutProps}>
132
+ <SchemaField schema={props.schema.schema}></SchemaField>
133
+ <div className="form-render-footer xxm">{footer}</div>
134
+ </FormLayout>
135
+ </Form>
136
+ </GlobalPropsContext.Provider>
118
137
  );
119
138
  });
120
139
 
package/CHANGELOG DELETED
@@ -1,2 +0,0 @@
1
- # @hzab/form-render0.0.1
2
- 组件初始化