@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 +3 -3
- package/lib/index.js +1 -1
- package/package.json +19 -39
- package/src/common/global-props-context.ts +11 -0
- package/src/components/Upload/README.md +41 -0
- package/src/components/Upload/common/checkFileType.ts +39 -0
- package/src/components/Upload/common/ossUpload.js +155 -0
- package/src/components/Upload/common/utils.js +177 -0
- package/src/components/Upload/components/Image/index.less +16 -0
- package/src/components/Upload/components/Image/index.tsx +33 -0
- package/src/components/Upload/components/ItemList/ItemRender.tsx +22 -0
- package/src/components/Upload/components/ItemList/index.tsx +53 -0
- package/src/components/Upload/components/video/index.jsx +39 -0
- package/src/components/Upload/components/video/index.less +14 -0
- package/src/components/Upload/index.tsx +38 -0
- package/src/components/Upload/uploader-input.jsx +151 -0
- package/src/components/Upload/uploader.jsx +200 -0
- package/src/components/Upload/uploader.less +3 -0
- package/src/components/index.tsx +2 -0
- package/src/index.tsx +33 -14
- package/CHANGELOG +0 -2
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
|
-
```
|
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.
|
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
|
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
|
-
"@
|
19
|
-
"@
|
20
|
-
"@
|
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
|
-
"
|
42
|
-
"
|
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
|
-
"
|
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": "
|
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": "
|
62
|
-
"@formily/core": "
|
63
|
-
"@formily/react": "
|
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,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;
|
package/src/components/index.tsx
CHANGED
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
|
-
<
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
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