@flatbiz/antd 2.3.22 → 2.3.24
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/esm/index.js +1 -1
- package/esm/index.js.map +1 -1
- package/index.d.ts +2 -0
- package/package.json +3 -3
package/esm/index.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/* eslint-disable */
|
|
2
2
|
require('./index.css')
|
|
3
3
|
/*! @flatjs/forge MIT https://github.com/flatjs */
|
|
4
|
-
import{noop as e,getGlobalData as r,flatbizDate as n,isUndefinedOrNull as t,arrayField2LabelValue as a,valueIsEqual as i,treeToTiledArray as l,treeLeafParentsArray as o}from"@flatbiz/utils";import{isUndefined as u}from"@dimjs/lang/cjs/is-undefined";import{Space as s,Divider as c,Popconfirm as d,Button as f,DatePicker as v,Drawer as m,Form as p,Checkbox as h,Tag as g,Input as b,InputNumber as y,Radio as C,message as w,Select as N,Empty as L,Upload as x,Table as k,Tooltip as S,Modal as R,TreeSelect as q,Tree as T,Spin as I}from"antd";import{isArray as P}from"@dimjs/lang/cjs/is-array";import{Fragment as D,createElement as O,useMemo as _,useEffect as A,forwardRef as E,useRef as M,useState as B,useImperativeHandle as F,cloneElement as W,Children as K}from"react";import{jsx as j,jsxs as z,Fragment as Y}from"react/jsx-runtime";import{hooks as U}from"@wove/react/cjs/hooks";import G from"moment";import{Model as V}from"@dimjs/model-react";import{classNames as H}from"@dimjs/utils/cjs/class-names";import J from"@ant-design/icons/es/icons/SaveOutlined";import Q from"@ant-design/icons/es/icons/PlusOutlined";import{extend as X}from"@dimjs/utils/cjs/extend";import Z from"@ant-design/icons/es/icons/RedoOutlined";import{useEffectCustom as $}from"@flatbiz/antd";import{isBoolean as ee}from"@dimjs/lang/cjs/is-boolean";import{isNumber as re}from"@dimjs/lang/cjs/is-number";import{isString as ne}from"@dimjs/lang/cjs/is-string";import te from"@ant-design/icons/es/icons/DeleteOutlined";var ae=e;function ie(){ie=Object.assign||function(e){for(var r=1;r<arguments.length;r++){var n=arguments[r];for(var t in n){if(Object.prototype.hasOwnProperty.call(n,t)){e[t]=n[t]}}}return e};return ie.apply(this,arguments)}function le(e,r){if(e==null)return{};var n={};var t=Object.keys(e);var a,i;for(i=0;i<t.length;i++){a=t[i];if(r.indexOf(a)>=0)continue;n[a]=e[a]}return n}var oe=function e(){var n=r(),t=n.elemAclLimits;var a=P(t)?t:[];return a};var ue=function e(r){var n=oe();if(n.includes(r)){return true}return false};var se=function e(r){var n=oe();if(n.includes(r.name)){return j(D,{children:r.children})}return null};var ce=["text","color","onClick","permission","needConfirm","confirmMessage","hidden","style"];var de=function e(r){return j("div",{className:"table-operate",children:j(s,{split:j(c,{type:"vertical"}),size:r.size,wrap:u(r.wrap)?true:r.wrap,children:r.operateList.map((function(e,r){if(!e)return null;var n=e.text,t=e.color,a=e.onClick,i=e.permission,l=e.needConfirm,o=e.confirmMessage,u=e.hidden,s=e.style,c=le(e,ce);if(u)return null;if(i&&!ue(i))return null;var v=t?ie({color:t},s):s;var m=e.type||"link";if(l){return j(d,{title:o,okText:"确定",cancelText:"取消",onConfirm:a,arrowPointAtCenter:true,children:j(f,ie({},c,{onClick:undefined,type:m,danger:true,style:v,children:n}))},r)}return O(f,ie({},c,{type:m,style:v,key:r,onClick:a}),n)}))})})};de.defaultProps={size:0};var fe=["value","onChange","style"];var ve=function e(r){var t=r.value,a=r.onChange,i=r.style,l=le(r,fe);var o=_((function(){if(r.format)return r.format;if(r.showTime)return"YYYY-MM-DD HH:mm:ss";return"YYYY-MM-DD"}),[r.showTime,r.format]);var u=U.useCallbackRef((function(e){if(e){a==null?void 0:a(G(e).format(o))}else{a==null?void 0:a(undefined)}}));var s=t&&n.isDate(t)?G(new Date(t)):undefined;return j(v,ie({},l,{style:ie({width:"100%"},i),value:s,onChange:u}))};var me=["value","onChange","style"];var pe=function e(r){var t=r.value,a=r.onChange,i=r.style,l=le(r,me);var o=_((function(){if(r.format)return r.format;if(r.showTime===true)return"YYYY-MM-DD HH:mm:ss";return"YYYY-MM-DD"}),[r.showTime,r.format]);var u=U.useCallbackRef((function(e){if(e){var r=e||[],n=r[0],t=r[1];a==null?void 0:a([G(n).format(o),G(t).format(o)])}else{a==null?void 0:a(undefined)}}));var s=t||[],c=s[0],d=s[1];var f=c&&d&&n.isDate(c)&&n.isDate(d)?[G(new Date(c)),G(new Date(d))]:undefined;return j(v.RangePicker,ie({},l,{style:ie({width:"100%"},i),value:f,onChange:u}))};var he={actions:{openDrawerForm:function e(r){var n=r.itemData,t=r.title,a=r.operateType,i=r.pageLoading;return function(e){e.itemData=n;e.title=t;e.operateType=a;e.pageLoading=i;e.visible=true}},closeDrawer:function e(){return function(e){e.visible=false}},setDrawerItemData:function e(r){return function(e){e.pageLoading=false;e.itemData=r}}},state:{visible:false,title:"",operateType:null}};var ge=function e(r){return j("div",{className:"fixed-bottom-block",children:z(s,{size:"middle",children:[j(f,ie({},r.cancelButtonProps,{className:"cancel-btn",onClick:r.onCancel,children:r.cancelText||"取消"})),r.hideOkBtn!=true&&j(f,ie({type:"primary",icon:j(J,{})},r.okButtonProps,{className:"ok-btn",onClick:r.onOk,loading:r.loading,children:r.okText||"提交"}))]})})};var be=["pageLoading","className","width","children","footer","operationProps"];var ye=function e(){return j("div",{className:"drawer-wraper-loader",children:z("div",{className:"loader-wrapper",children:[j("div",{className:"loader-inner"}),j("div",{className:"loader-text",children:"LOADING"})]})})};var Ce=function e(r){var n=r.pageLoading,t=r.className,a=r.width,i=a===void 0?600:a,l=r.children,o=r.footer,u=r.operationProps,s=le(r,be);A((function(){console.error("@flatbiz/antd库【DrawerWraper】组件已经过期,请使用DrawerWrapper替换包括DrawerWraper=>DrawerWrapper、createDrawerWraperModel=>createDrawerWrapperModel,如果使用DrawerWrapper组件原用法需要调整")}),[]);return z(m,ie({className:H("drawer-wraper",t),keyboard:false,forceRender:false,destroyOnClose:true,width:"80%",contentWrapperStyle:{maxWidth:i},size:"default"},s,{footer:o||o===null?o:j(ge,ie({},u)),children:[j("div",{className:"drawer-wraper-content",children:l}),n&&j(ye,{})]}))};var we={};var Ne=function e(r){if(!we[r]){we[r]=V(he)}return we[r]};var Le={actions:{openDrawerForm:function e(r){var n=r.itemData,t=r.title,a=r.operateType,i=r.pageLoading;return function(e){e.itemData=n;e.title=t;e.operateType=a;e.pageLoading=i;e.visible=true}},closeDrawer:function e(){return function(e){e.visible=false}},setDrawerItemData:function e(r){return function(e){e.pageLoading=false;e.itemData=r}}},state:{visible:false,title:"",operateType:null}};var xe=function e(r,n){return A(r,n)};var ke=function e(r,n){A((function(){function e(){return new Promise((function(e,n){return Promise.resolve(r()).then((function(r){try{return e()}catch(e){return n(e)}}),n)}))}void e()}),n)};var Se=function e(r){return j("div",{className:"fixed-bottom-block",children:z(s,{size:"middle",children:[j(f,ie({},r.cancelButtonProps,{className:"cancel-btn",onClick:r.onCancel,children:r.cancelText||"取消"})),r.hideOkBtn!=true&&j(f,ie({type:"primary",icon:j(J,{})},r.okButtonProps,{className:"ok-btn",onClick:r.onOk,loading:r.loading,children:r.okText||"提交"}))]})})};var Re=["pageLoading","className","width","children"];var qe=function e(){return j("div",{className:"drawer-wrapper-loader",children:z("div",{className:"loader-wrapper",children:[j("div",{className:"loader-inner"}),j("div",{className:"loader-text",children:"LOADING"})]})})};var Te=function e(r){return z(D,{children:[j("div",{className:"drawer-wrapper-content",children:r.children}),r.operationProps?j(Ie,{children:j(Se,ie({},r.operationProps))}):null]})};var Ie=function e(r){return j("div",{className:"drawer-wrapper-footer",children:r.children})};var Pe=function e(r){var n=r.pageLoading,t=r.className,a=r.width,i=a===void 0?600:a,l=r.children,o=le(r,Re);xe((function(){if(r["operationProps"]){throw new Error("DrawerWrapper组件升级,参数operationProps用法变更,请及时更新")}}),[]);return z(m,ie({className:H("drawer-wrapper",t),keyboard:false,forceRender:false,destroyOnClose:true,width:"80%",contentWrapperStyle:{maxWidth:i},size:"default"},o,{footer:null,children:[n&&j(qe,{}),l]}))};Pe.Content=Te;Pe.Footer=Ie;var De={};var Oe=function e(r){if(!De[r]){De[r]=V(Le)}return De[r]};var _e=function e(r,n){return typeof r==="boolean"?r:r==null?void 0:r({tableRowIndex:n})};var Ae=function e(r){var n=r.fieldConfig,t=n.editableConfig,a=n.editable,i=n.render;var l=t.editableComptProps;var o=_((function(){if(a)return[];var e=P(r.value)?r.value:[];var n=l.options||[];if(!P(n)||n.length===0){return e.map((function(e){return{label:e,value:e}}))}var t=[];e.forEach((function(e){var r=n.find((function(r){return r.value===e}));t.push(r?r:{label:e,value:e})}));return t}),[a,l.options,r.value]);if(a){return j(h.Group,ie({},l,{value:r.value,onChange:r.onChange}))}return j("span",{className:"editable-checkbox-group-view",children:i?i(r.value):o.map((function(e,r){return j(g,{color:"#1890ff",children:e.label},r)}))})};var Ee=function e(r){var n=r.fieldConfig.formItemProps;return j(p.Item,ie({},n,{name:r.name,className:H("editable-checkbox-group-form-item",n==null?void 0:n.className),children:j(Ae,ie({},r))}))};var Me=function e(r){var n=r.fieldConfig,t=n.formItemProps,a=n.editableConfig;return j(p.Item,ie({},t,{name:r.name,className:H("editable-date-picker-wraper-form-item",t==null?void 0:t.className),children:j(ve,ie({},a.editableComptProps))}))};var Be=function e(r){var n=r.fieldConfig,t=n.editableConfig,a=n.editable,i=n.render;var l=t.editableComptProps;var o=_((function(){var e=P(r.value)?r.value:[];if(a)return undefined;return e.join("~")}),[a,r.value]);if(a){return j(pe,ie({},l,{value:r.value,onChange:r.onChange}))}return j("span",{className:"editable-date-range-picker-view",children:i?i(r.value):o})};var Fe=function e(r){var n=r.fieldConfig.formItemProps;return j(p.Item,ie({},n,{name:r.name,className:H("editable-date-range-picker-wraper-form-item",n==null?void 0:n.className),children:j(Be,ie({},r))}))};var We=function e(r){var n=r.fieldConfig,t=n.formItemProps,a=n.editableConfig;return j(p.Item,ie({},t,{name:r.name,children:j(b,ie({},a.editableComptProps))}))};var Ke=function e(r){var n=r.fieldConfig,t=n.formItemProps,a=n.editableConfig;return j(p.Item,ie({},t,{name:r.name,className:H("editable-input-number-form-item",t==null?void 0:t.className),children:j(y,ie({},a.editableComptProps))}))};var je=function e(r){var n=r.fieldConfig,t=n.editableConfig,a=n.editable,i=n.render;var l=t.editableComptProps;var o=_((function(){if(a)return[];var e=r.value;var n=l.options||[];if(!P(n)||n.length===0){return e}var t=n.find((function(r){return r.value===e}));return(t==null?void 0:t.label)||e}),[a,l.options,r.value]);var u=U.useCallbackRef((function(e){r.onChange==null?void 0:r.onChange(e.target.value)}));if(a){return j(C.Group,ie({},l,{value:r.value,onChange:u}))}return j("span",{className:"editable-radio-group-view",children:i?i(r.value):o?j(g,{color:"#1890ff",children:o}):null})};var ze=function e(r){var n=r.fieldConfig.formItemProps;return j(p.Item,ie({},n,{name:r.name,className:H("editable-radio-group-form-item",n==null?void 0:n.className),children:j(je,ie({},r))}))};var Ye={selectorList:[],queryIsEmpty:false,requestStatus:"init"};var Ue={actions:{setSelectBoxList:function e(r){return function(e){e.selectorList=r||[];e.requestStatus="request-success"}},resetSelectBoxList:function e(){return function(e){e.selectorList=[]}},changeRequestStatus:function e(r){return function(e){e.requestStatus=r}}},state:Ye};var Ge={};var Ve=function e(r){if(!Ge[r]){Ge[r]=V(Ue)}return Ge[r]};var He=["serviceConfig","showAllOption","effectDependencyList","onSelectorListChange","operateType","searchFieldName","selectorList","modelKey","fieldNames"];var Je=E((function(e,r){var n=e.serviceConfig,l=e.showAllOption,o=e.effectDependencyList,u=e.onSelectorListChange,s=e.operateType,c=e.searchFieldName,d=e.selectorList,f=e.modelKey,v=e.fieldNames,m=le(e,He);var p=s==="search"&&d===undefined;var h=n||{};var g=o||[];var b=M();var y=B(false),C=y[0],L=y[1];var x=Ve(f).useStore(),k=x[0],S=x[1];var R=function e(r){return r===""||t(r)};var q=function e(r){var n=h.onRequestResultAdapter?h.onRequestResultAdapter(r):r;return a(n||[],v)};var T=U.useCallbackRef((function(e,r){return new Promise((function(n,a){var i,l,o,s,d,f;var v=function(){try{return n()}catch(e){return a(e)}};var m=function(e){try{L(false);void w.error(e.message||"数据查询异常...");return v()}catch(e){return a(e)}};try{if(!h.onRequest){throw new Error("onRequest 调用接口服务不能为空")}i=h.requiredParamsKeys;l=X({},h.params);if(i){o=i.find((function(e){return R(l[e])}));if(o){console.warn("SelectorWrapper组件:参数:"+i.join("、")+"不能为空");return n()}}var g=function(){try{return v()}catch(e){return m(e)}};var b=function(e){try{console.error(e);L(false);void S.changeRequestStatus("request-error");void w.error(e.message||"获取数据异常");return g()}catch(e){return m(e)}};try{L(true);void S.changeRequestStatus("request-pre");if((!t(e)||!t(r))&&p){s=c||"keyword";l[s]=e;l["id"]=r}return Promise.resolve(h.onRequest==null?void 0:h.onRequest(l)).then((function(e){try{d=e;f=q(d);L(false);u==null?void 0:u(f);void S.setSelectBoxList(f);return g()}catch(e){return b(e)}}),b)}catch(e){b(e)}}catch(e){m(e)}}))}));$((function(){if(d){void S.setSelectBoxList(a(d||[],v));return}if(p)return;var e=Ve(f).getState();if(g.length>0||i(e.requestStatus,["request-error","init"])){void T()}}),g);$((function(){if(p){if(R(e.value)){u==null?void 0:u([]);void S.resetSelectBoxList()}else{if(e.value!==b.current){void T(undefined,e.value)}}}}),g.concat([e.value]));F(r,(function(){return{onClearSelectorList:function e(){void S.resetSelectBoxList()},getSelectorList:function e(){return k.selectorList}}}));var I=U.useCallbackRef((function(e,r){return(r==null?void 0:r.children).toLowerCase().indexOf(e.toLowerCase())>=0}));var P=U.useDebounceCallback((function(e){if(e){void T(e)}else{void S.resetSelectBoxList()}}),300);var D=U.useCallbackRef((function(r){b.current=r;for(var n=arguments.length,t=new Array(n>1?n-1:0),a=1;a<n;a++){t[a-1]=arguments[a]}e.onChange==null?void 0:e.onChange(r,t)}));var O=U.useCallbackRef((function(){void T()}));var _=j(N.Option,{value:"",children:"全部"});return z(N,ie({showSearch:true,allowClear:true},m,{value:t(e.value)?undefined:e.value,notFoundContent:j(Qe,{requestStatus:k.requestStatus,onAgainRequest:O}),loading:C,onSearch:p?P:undefined,filterOption:p?false:I,onChange:D,fieldNames:undefined,suffixIcon:k.requestStatus==="request-error"?j(Z,{spin:C,onClick:O}):undefined,children:[l===true?_:l,k.selectorList.map((function(e){return j(N.Option,{value:e.value,label:e.label,children:e.label},e.value)}))]}))}));var Qe=function e(r){var n=_((function(){if(r.requestStatus==="request-error"){return"数据查询异常"}else if(r.requestStatus==="request-success"){return"暂无数据"}return"数据查询中"}),[r.requestStatus]);return j(L,{image:L.PRESENTED_IMAGE_SIMPLE,description:n,className:"tree-selector-wrapper-empty",children:r.requestStatus==="request-error"&&j(f,{type:"primary",onClick:r.onAgainRequest,children:"重新获取数据"})})};var Xe=function e(r){var n=r.fieldConfig,t=n.editableConfig,i=n.editable,l=n.render;var o=t.editableComptProps;var u=_((function(){var e=P(r.value)?r.value:[];if(i)return[];var n=a(o.selectorList||[],o.fieldNames);if(n.length===0){return e.map((function(e){return{label:e,value:e}}))}var t=[];e.forEach((function(e){var r=n.find((function(r){return r.value===e}));t.push(r?r:{label:e,value:e})}));return t}),[i,o.fieldNames,o.selectorList,r.value]);if(i){return j(Je,ie({},o,{value:r.value,onChange:r.onChange}))}return j("span",{className:"editable-selector-view",children:l?l(r.value):u.map((function(e,r){return j(g,{color:"#1890ff",children:e.label},r)}))})};var Ze=function e(r){var n=r.fieldConfig.formItemProps;return j(p.Item,ie({},n,{name:r.name,className:H("editable-selector-wrapper-form-item",n==null?void 0:n.className),children:j(Xe,ie({},r))}))};var $e=function e(r){var n,t;var a=_((function(){var e;if((e=r.fieldConfig)!=null&&e.render)return undefined;var n=ne(r.value)||re(r.value)||ee(r.value)||!r.value;if(!n){console.warn("Form.List name:【"+r.name+"】数据【"+JSON.stringify(r.value)+"】不能渲染在页面中")}return n?r.value:undefined}),[(n=r.fieldConfig)==null?void 0:n.render,r.name,r.value]);return j("span",{className:"editable-text-view",children:((t=r.fieldConfig)==null?void 0:t.render==null?void 0:t.render(r.value))||a})};var er=function e(r){return j(p.Item,{noStyle:true,name:r.name,children:j($e,{name:r.name,fieldConfig:r.fieldConfig})})};var rr=function e(r){var n=r.fieldConfig,t=n.formItemProps,a=n.editableConfig;return j(p.Item,ie({},t,{name:r.name,children:j(b.TextArea,ie({},a.editableComptProps))}))};var nr=["onChange","onUploadError","value"];var tr=function e(r){var n=r.onChange,t=r.onUploadError,a=r.value,i=le(r,nr);var l=B(),o=l[0],u=l[1];var s=X({uid:"uid",name:"name",url:"url"},r.fieldNames);xe((function(){u(a==null?void 0:a.map((function(e){return{uid:e[s.uid],name:e[s.name],url:e[s.url]}})))}),[s.name,s.uid,s.url,a]);var c=U.useCallbackRef((function(e){var i=e.fileList;if(e.file.status==="done"){var l=e.file.response;if(l.code==="0000"){var o=r.onRequestResultAdapter?r.onRequestResultAdapter(l.data):l.data;o[s.uid]=o[s.uid]||e.file.uid;o[s.name]=o[s.name]||e.file.name;if(r.maxCount===1){n==null?void 0:n([o])}else{n==null?void 0:n((a||[]).concat(o))}}else{if(t){t(l.message)}else{void w.error(l.message||"上传操作失败...")}i[i.length-1]=ie({},i[i.length-1],{status:"error"})}}else if(e.file.status==="removed"){var c=e.file.uid;var d=a!==undefined?[].concat(a):[];var f=d.findIndex((function(e){var r=e[s.uid];return r===c}));if(f>=0){d.splice(f,1)}n==null?void 0:n(d)}else if(e.file.status==="error"){if(t){t()}else{void w.error("上传操作失败...")}}u([].concat(i));r.onUploadChange==null?void 0:r.onUploadChange(e)}));return j(x,ie({},i,{onChange:c,fileList:o,className:H("v-upload-wrapper",i.className),children:i.disabled?null:j(ar,{listType:i.listType,children:r.children})}))};var ar=function e(r){if(r.children)return j(D,{children:r.children});if(r.listType==="picture-card"){return z("div",{children:[j(Q,{}),j("div",{style:{marginTop:8},children:"上传图片"})]})}if(r.listType==="picture"){return j(f,{type:"primary",ghost:true,children:"选择图片上传"})}return j(f,{type:"primary",ghost:true,children:"选择文件上传"})};var ir=["children"];var lr=function e(r){var n=r.fieldConfig,t=n.editableConfig,a=n.render,i=n.editable;var l=t.editableComptProps,o=l.children,u=le(l,ir);if(i){return j(tr,ie({listType:"text"},u,{value:r.value,onChange:r.onChange,children:o}))}return j("div",{className:"upload-wrapper-selector-view",children:a?a(r.value):j(tr,ie({listType:"text"},u,{value:r.value,disabled:true}))})};var or=function e(r){var n=r.fieldConfig.formItemProps;return j(p.Item,ie({},n,{name:r.name,className:H("editable-upload-wrapper-form-item",n==null?void 0:n.className),children:j(lr,ie({},r))}))};var ur=function e(r){var n=r.fieldConfig,t=n.editableConfig,a=n.editable;var i=_e(a,r.tableRowIndex);var l=X({},r.fieldConfig,{editable:i});var o={name:r.name,fieldConfig:l};if((t==null?void 0:t.type)==="input"&&i){return j(We,ie({},o))}else if((t==null?void 0:t.type)==="inputNumber"&&i){return j(Ke,ie({},o))}else if((t==null?void 0:t.type)==="textArea"&&i){return j(rr,ie({},o))}else if((t==null?void 0:t.type)==="datePickerWrapper"&&i){return j(Me,ie({},o))}else if((t==null?void 0:t.type)==="dateRangePickerWrapper"){return j(Fe,ie({},o))}else if((t==null?void 0:t.type)==="selectorWrapper"){return j(Ze,ie({},o))}else if((t==null?void 0:t.type)==="checkboxGroup"){return j(Ee,ie({},o))}else if((t==null?void 0:t.type)==="radioGroup"){return j(ze,ie({},o))}else if((t==null?void 0:t.type)==="uploadWrapper"){return j(or,ie({},o))}else if((t==null?void 0:t.type)==="custom"){return t.editableComptProps({name:r.name,editable:i,completeName:r.completeName})}return j(er,ie({},o))};var sr=function e(r){var n=p.useFormInstance();var t=r.formListConfig,a=t.onFormListBeforeRender,i=t.editableConfigList,l=t.onFormListAfterRender,o=t.onFormListItemBeforeRender,u=t.onFormListItemAfterRender,c=t.deleteOperateRender;return j(p.List,{name:r.name,children:function e(t,d){var f=d.add,v=d.remove;return z(Y,{children:[a?a({tableRowIndex:r.tableRowIndex,add:f,get value(){return n.getFieldValue(r.completeName)}}):null,t.map((function(e,t){var a=i.find((function(e){return _e(e.editable,r.tableRowIndex)}));var l=H("editable-inner-formlist-item","editable-inner-formlist-item-"+r.name[1],{"editable-inner-formlist-item_preview":!a});return z("div",{className:l,children:[o?o({add:f,remove:function e(){v(t)},formListItemIndex:t,tableRowIndex:r.tableRowIndex,get value(){return n.getFieldValue([].concat(r.completeName,[e.name]))}}):null,z(s,{children:[i.map((function(n,t){return j(ur,{name:[e.name,n.fieldName],fieldConfig:n,tableRowIndex:r.tableRowIndex,completeName:[].concat(r.completeName,[e.name])},t)})),a?j(cr,{deleteOperateRender:c,remove:function e(){v(t)},index:t}):null]}),u?u({add:f,formListItemIndex:t,tableRowIndex:r.tableRowIndex,remove:function e(){v(t)},get value(){return n.getFieldValue([].concat(r.completeName,[e.name]))}}):null]},t)})),l?l({tableRowIndex:r.tableRowIndex,add:f,get value(){return n.getFieldValue(r.completeName)}}):null]})}})};var cr=function e(r){return j(p.Item,{children:r.deleteOperateRender?r.deleteOperateRender({remove:r.remove,formListItemIndex:r.index}):j(f,{type:"link",danger:true,icon:j(te,{}),onClick:r.remove,children:"删除"})})};var dr=function e(r){if(r.fieldConfig){if(P(r.fieldConfig["editableConfigList"])){var n=r.fieldConfig;return j(sr,{name:r.name,completeName:r.completeName,formListConfig:n,tableRowIndex:r.tableRowIndex})}else{return j(ur,{name:r.name,fieldConfig:r.fieldConfig,tableRowIndex:r.tableRowIndex,completeName:r.completeName})}}return j(er,{name:r.name})};var fr=["fieldConfig","operateRender"];var vr=function e(r){var n;var t=_((function(){if(!r.columns)return[];return r.columns.map((function(e){var n=e.fieldConfig,t=e.operateRender,a=le(e,fr);return ie({onCell:function e(){var n;return{valign:((n=r.tableProps)==null?void 0:n.cellVerticalAlign)||"middle"}}},a,{render:function a(i,l){if(t){return t({name:[].concat(r.name,[l.name]),tableRowIndex:l.name,operation:l.operation})||""}return j(dr,{name:e.dataIndex?[l.name,e.dataIndex]:[l.name],completeName:e.dataIndex?[].concat(r.name,[l.name,e.dataIndex]):[].concat(r.name,[l.name]),fieldConfig:n,tableRowIndex:l.name})}})}))}),[r.columns,r.name,(n=r.tableProps)==null?void 0:n.cellVerticalAlign]);return j("div",{className:"editable-table",children:j(p.List,{name:r.name,rules:r.rules,children:function e(n,a){return z(D,{children:[r.onTableBeforeRender?r.onTableBeforeRender(a,n.length):null,j(k,ie({scroll:{x:"max-content"},pagination:false},r.tableProps,{dataSource:n.map((function(e){return ie({},e,{operation:a})})),columns:t,rowKey:"key"})),r.onTableAfterRender?r.onTableAfterRender(a,n.length):j(f,{type:"dashed",onClick:function e(){return a.add()},block:true,icon:j(Q,{}),style:{marginTop:15},children:"新增"})]})}})})};var mr=["onImportFinish"];var pr=function e(r){var n=r.onImportFinish,t=le(r,mr);var a=B(false),i=a[0],l=a[1];var o=U.useCallbackRef((function(e){if(e.file.status==="uploading"){l(true)}else if(e.file.status==="done"){l(false);var r=e.file.response;if(r.code==="0000"){n(r.data)}else{void w.error(r.message||"文件导入异常...")}}}));return j(x,ie({showUploadList:false,maxCount:1},t,{onChange:o,children:r.children?r.children:j(f,{type:"primary",ghost:true,loading:i,children:"选择文件"})}))};pr.defaultProps={name:"file",accept:".xlsx,.xls"};var hr=["onChange","onUploadError","onPreview","value"];var gr=function e(r){xe((function(){console.error("@flatbiz/antd库【FileUpload】组件已经过期,请使用【UploadWrapper】组件替换")}),[]);var n=r.onChange,t=r.onUploadError,a=r.onPreview,i=r.value,l=le(r,hr);var o=B([]),u=o[0],s=o[1];var c=X({fileKey:"fileKey",fileName:"fileName"},r.fieldNames);A((function(){if(i&&P(i)){s(i.map((function(e){return{uid:e["uid"]||e[c.fileKey],name:e[c.fileName],fileKey:e[c.fileKey],url:e[c.fileKey],thumbUrl:e[c.fileKey]}})))}}),[c.fileKey,c.fileName,i]);var d=U.useCallbackRef((function(e){if(e.file.status==="done"){var a=e.file.response;if(a.code==="0000"){var l=a.data||{};var o={uid:e.file.uid,fileName:l[c.fileName]||e.file.name,fileKey:l[c.fileKey]};var u=(i||[]).concat(o);n==null?void 0:n(u)}else{t==null?void 0:t(a.message)}}else if(e.file.status==="removed"){var d=e.file.uid;var f=i!==undefined?[].concat(i):[];var v=f.findIndex((function(e){var r=e["uid"]||e[c.fileKey];return r===d}));if(v>=0){f.splice(v,1)}n==null?void 0:n(f)}else if(e.file.status==="error"){t==null?void 0:t()}s([].concat(e.fileList));r.onUploadChange==null?void 0:r.onUploadChange(e)}));var f=U.useCallbackRef((function(e){a==null?void 0:a({fileKey:e[c.fileKey],fileName:e[c.fileName]})}));return j(x,ie({},l,{onChange:d,onPreview:f,fileList:u,className:H("v-file-upload",l.className),children:r.children}))};var br=function e(r){var n=P(r.children)?r.children:[r.children];var a=r.direction||"vertical";var i=r.gap?r.gap:0;var l=!t(r.fullIndex)?P(r.fullIndex)?r.fullIndex:[r.fullIndex]:[];return j("div",{className:H("v-flex-layout","v-flex-"+a,r.className),style:r.style,onClick:r.onClick,children:n.map((function(e,r){var t=e.props.style||{};var o=l.includes(r)?ie({flex:1},t):t;if(r<n.length-1&&i>0){if(a==="horizontal"){o.marginRight=i}else{o.marginBottom=i}}return W(e,{style:o,key:r})}))})};var yr=function e(r){return j("div",{style:ie({height:r.height},r.style),className:r.className})};var Cr=function e(r){return j(S,{title:r.hoverTips,children:z("div",{className:H("icon-wrapper","icon-wrapper-"+(r.size||"middle"),r.className),style:r.style,children:[r.icon,r.text?j("span",{className:"icon-wrapper-text",children:r.text}):null]})})};var wr={actions:{openModalForm:function e(r){var n=r.itemData,t=r.title,a=r.operateType,i=r.pageLoading;return function(e){e.itemData=n;e.title=t;e.operateType=a;e.pageLoading=i;e.visible=true}},closeModal:function e(){return function(e){e.visible=false}},setModalItemData:function e(r){return function(e){e.pageLoading=false;e.itemData=r}}},state:{visible:false,title:"",operateType:"view"}};var Nr=["loading","okText","cancelText","onCancel","onOk","hideOkBtn"];var Lr=function e(r){var n=r.loading,t=r.okText,a=t===void 0?"保存":t,i=r.cancelText,l=i===void 0?"取消":i,o=r.onCancel,u=r.onOk,c=r.hideOkBtn,d=le(r,Nr);return j(D,{children:z(s,{size:"middle",children:[j(f,ie({},d.cancelButtonProps,{className:"cancel-btn",onClick:o,children:l})),c!=true&&j(f,ie({type:"primary"},d.okButtonProps,{className:"ok-btn",onClick:u,loading:n,children:a}))]})})};var xr=["pageLoading","className","width","children","footer","operationProps"];var kr=function e(){return j("div",{className:"modal-wraper-loader",children:z("div",{className:"loader-wrapper",children:[j("div",{className:"loader-inner"}),j("div",{className:"loader-text",children:"LOADING"})]})})};var Sr=function e(r){var n=r.pageLoading,t=r.className,a=r.width,i=r.children,l=r.footer,o=r.operationProps,u=le(r,xr);A((function(){console.error("@flatbiz/antd库【ModalWraper】组件已经过期,请使用ModalWrapper替换包括ModalWraper=>ModalWrapper、createModalWraperModel=>createModalWrapperModel,如果使用ModalWrapper组件原用法需要调整")}),[]);return z(R,ie({className:H("modal-wraper",t),keyboard:false,forceRender:false,destroyOnClose:true},u,{width:a||600,footer:null,children:[z("div",{className:"modal-wraper-content",children:[i,n&&j(kr,{})]}),l!==null&&j("div",{className:"modal-wraper-content-footer",children:l?l:j(Lr,ie({},o))})]}))};var Rr={};var qr=function e(r){if(!Rr[r]){Rr[r]=V(wr)}return Rr[r]};var Tr={actions:{openModalForm:function e(r){var n=r.itemData,t=r.title,a=r.operateType,i=r.pageLoading;return function(e){e.itemData=n;e.title=t;e.operateType=a;e.pageLoading=i;e.visible=true}},closeModal:function e(){return function(e){e.visible=false}},setModalItemData:function e(r){return function(e){e.pageLoading=false;e.itemData=r}}},state:{visible:false,title:"",operateType:"view"}};var Ir=["loading","okText","cancelText","onCancel","onOk","hideOkBtn"];var Pr=function e(r){var n=r.loading,t=r.okText,a=t===void 0?"保存":t,i=r.cancelText,l=i===void 0?"取消":i,o=r.onCancel,u=r.onOk,c=r.hideOkBtn,d=le(r,Ir);return j(D,{children:z(s,{size:"middle",children:[j(f,ie({},d.cancelButtonProps,{className:"cancel-btn",onClick:o,children:l})),c!=true&&j(f,ie({type:"primary"},d.okButtonProps,{className:"ok-btn",onClick:u,loading:n,children:a}))]})})};var Dr=["pageLoading","className","width","children"];var Or=function e(){return j("div",{className:"modal-wrapper-loader",children:z("div",{className:"loader-wrapper",children:[j("div",{className:"loader-inner"}),j("div",{className:"loader-text",children:"LOADING"})]})})};var _r=function e(r){return z(D,{children:[j("div",{className:"modal-wrapper-content",children:r.children}),r.operationProps?j(Ar,{children:j(Pr,ie({},r.operationProps))}):null]})};var Ar=function e(r){return j("div",{className:"modal-wrapper-footer",children:r.children})};var Er=function e(r){var n=r.pageLoading,t=r.className,a=r.width,i=r.children,l=le(r,Dr);xe((function(){if(r["operationProps"]){throw new Error("ModalWrapper组件升级,参数operationProps用法变更,请及时更新")}}),[]);return z(R,ie({className:H("modal-wrapper",t),keyboard:false,forceRender:true,destroyOnClose:true},l,{width:a||600,footer:null,children:[i,n&&j(Or,{})]}))};Er.Content=_r;Er.Footer=Ar;var Mr={};var Br=function e(r){if(!Mr[r]){Mr[r]=V(Tr)}return Mr[r]};var Fr=function e(r){return j("div",{className:H("page-fixed-footer",r.className),style:r.style,children:r.children})};var Wr=function e(){return j("div",{className:"v-404",children:"404"})};var Kr={label_width_70:"form-label-70",label_width_80:"form-label-80",label_width_90:"form-label-90",label_width_100:"form-label-100",label_width_110:"form-label-110",label_width_120:"form-label-120",label_width_130:"form-label-130",label_width_auto:"form-label-auto"};var jr={label_width_70:"form-item-label-70",label_width_80:"form-item-label-80",label_width_90:"form-item-label-90",label_width_100:"form-item-label-100",label_width_110:"form-item-label-110",label_width_120:"form-item-label-120",label_width_130:"form-item-label-130",label_width_auto:"form-item-label-auto"};var zr={form:Kr,formItem:jr};var Yr=function e(r){var n=r.formLabelAlign||"right";var t=H("simple-layout",{"simple-layout-tight":r.layoutType==="tight","simple-layout-formlabel-left":n==="left"},r.className);return z("div",{className:t,style:r.style,children:[r.title?j("div",{className:"simple-layout-title",children:r.title}):null,r.desc?j("div",{className:"simple-layout-desc",children:r.desc}):null,r.children?j("div",{className:"simple-layout-content",children:r.children}):null]})};var Ur=function e(r){var n=B(),t=n[0],a=n[1];var i=B(false),l=i[0],o=i[1];var u=B(false),s=u[0],c=u[1];var d=_((function(){return{sendTxt:r.sendTxt,sentTxt:r.sentTxt,processingTxt:r.processingTxt,format:r.format,autoStart:r.autoStart,totalTicks:r.totalTicks,duration:r.duration}}),[]);var f=d.format;var v=d.totalTicks;var m=d.duration;var p=U.useCountdownCallback((function(e){var n=e/1e3;if(e>0){if(!l){o(true)}a(f.replace("{t}",String(n)));r.onTick==null?void 0:r.onTick(n)}else if(e===0){o(false);c(false);r.onTick==null?void 0:r.onTick(n);a(d.sentTxt)}}),v*1e3,{intervalTime:m});A((function(){if(!d.autoStart){a(d.sendTxt)}else{p();c(true);o(true)}}),[p,d]);var h=U.useCallbackRef((function(){if(l||s)return;c(true);a(d.processingTxt);void r.onSendRequest().then((function(){o(true);p()})).catch((function(){a(d.sendTxt);c(false)}))}));var g=H("v-count-down",r.className,{running:l,starting:s});return j("div",{className:g,onClick:h,children:t})};Ur.defaultProps={totalTicks:60,duration:1e3,autoStart:false,format:"{t}s",sendTxt:"获取验证码",sentTxt:"重新获取",processingTxt:"发送中..."};var Gr=function e(){console.error("@flatbiz/antd库【TableFilterLayout】组件已经过期,请使用【SimpleLayout】组件替代")};var Vr=function e(r){xe((function(){Gr()}),[]);return j("div",{className:H("table-filter-layout",{"table-filter-layout-flex":r.isFixed},r.className),children:K.map(r.children,(function(e,n){if(r.isFixed&&n===r.fullIndex){return W(e,{className:"table-filter-layout-flex-full"})}return e}))})};var Hr=function e(r){return j("div",{className:H("table-filter-layout-condition",r.className),children:r.children})};var Jr=function e(r){return j("div",{className:H("table-filter-layout-operate",r.className),children:r.children})};var Qr=function e(r){return j("div",{className:H("table-filter-layout-table",r.className),children:r.children})};var Xr=function e(r){return j("div",{className:H("table-filter-layout-footer",r.className),children:r.children})};Vr.Condition=Hr;Vr.Operate=Jr;Vr.Table=Qr;Vr.Footer=Xr;var Zr={treeSelectorList:[],queryIsEmpty:false};var $r={actions:{setSelectBoxList:function e(r){return function(e){e.treeSelectorList=r||[];e.requestStatus="request-success"}},resetSelectBoxList:function e(){return function(e){e.treeSelectorList=[]}},changeRequestStatus:function e(r){return function(e){e.requestStatus=r}}},state:Zr};var en={};var rn=function e(r){if(!en[r]){en[r]=V($r)}return en[r]};var nn=function e(r,n,t){if(!P(n)||n.length===0)return[];var a=l(n,t);return o(r,a)};var tn=["serviceConfig","effectDependencyList","onTreeSelectorListChange","treeSelectorList","modelKey"];var an=E((function(e,r){var n=e.serviceConfig,a=e.effectDependencyList,i=e.onTreeSelectorListChange,l=e.treeSelectorList,o=e.modelKey,u=le(e,tn);var s=n||{};var c=a||[];var d=B(false),f=d[0],v=d[1];var m=B(),p=m[0],h=m[1];var g=rn(o).useStore(),b=g[0],y=g[1];var C=function e(r){return r===""||t(r)};var N=function e(r){var n=s.onRequestResultAdapter?s.onRequestResultAdapter(r):r;return n};var L=U.useCallbackRef((function(){return new Promise((function(e,r){var n,t,a,l,o;var u=function(){try{return e()}catch(e){return r(e)}};var c=function(e){try{v(false);void w.error(e.message||"数据查询异常...");return u()}catch(e){return r(e)}};try{if(!s.onRequest){throw new Error("onRequest 调用接口服务不能为空")}n=s.requiredParamsKeys;t=X({},s.params);if(n){a=n.find((function(e){return C(t[e])}));if(a){console.warn("TreeSelectorWrapper组件:参数:"+n.join("、")+"不能为空");return e()}}var d=function(){try{return u()}catch(e){return c(e)}};var f=function(e){try{v(false);void y.changeRequestStatus("request-error");return d()}catch(e){return c(e)}};try{v(true);void y.changeRequestStatus("request-pre");return Promise.resolve(s.onRequest==null?void 0:s.onRequest(t)).then((function(e){try{l=e;o=N(l);v(false);i==null?void 0:i(o);void y.setSelectBoxList(o||[]);return d()}catch(e){return f(e)}}),f)}catch(e){f(e)}}catch(e){c(e)}}))}));$((function(){if(l){void y.setSelectBoxList(l);return}var e=rn(o).getState();console.log("realTimeState",e.requestStatus);if(c.length>0||!e.requestStatus||e.requestStatus==="request-error"){void L()}}),c);A((function(){if(!t(e.value)){var r=P(e.value)?e.value:[e.value];if(r.length>0&&b.treeSelectorList.length>0){var n=[];r.forEach((function(r){var t=nn(r,b.treeSelectorList,e.fieldNames);n=n.concat(t.map((function(e){return e.value})))}));h((function(e){var r=n.concat(e||[]);return Array.from(new Set(r))}))}}}),[b.treeSelectorList,e.fieldNames,e.value]);F(r,(function(){return{onClearSelectorList:function e(){void y.setSelectBoxList([])},getTreeSelectorList:function e(){return b.treeSelectorList}}}));var x=U.useCallbackRef((function(e){h(e)}));var k=U.useCallbackRef((function(){void L()}));return j(q,ie({dropdownStyle:{maxHeight:400,overflow:"auto"},showSearch:true,treeLine:true},u,{value:t(e.value)?undefined:e.value,treeExpandedKeys:p,treeData:b.treeSelectorList,loading:f,onTreeExpand:x,style:ie({width:"100%"},u.style),suffixIcon:b.requestStatus==="request-error"?j(Z,{spin:f,onClick:k}):undefined,notFoundContent:j(ln,{requestStatus:b.requestStatus,onAgainRequest:k})}))}));var ln=function e(r){var n=_((function(){if(r.requestStatus==="request-error"){return"数据查询异常"}else if(r.requestStatus==="request-success"){return"暂无数据"}return"数据查询中"}),[r.requestStatus]);return j(L,{image:L.PRESENTED_IMAGE_SIMPLE,description:n,className:"tree-selector-wrapper-empty",children:r.requestStatus==="request-error"&&j(f,{type:"primary",onClick:r.onAgainRequest,children:"重新获取数据"})})};var on={treeList:[],queryIsEmpty:false};var un={actions:{setTreeList:function e(r){return function(e){e.treeList=r||[];e.requestStatus="request-success"}},resetTreeList:function e(){return function(e){e.treeList=[]}},changeRequestStatus:function e(r){return function(e){e.requestStatus=r}}},state:on};var sn={};var cn=function e(r){if(!sn[r]){sn[r]=V(un)}return sn[r]};var dn=function e(r,n,t){var a=l(n,t);return o(r,a)};var fn=["serviceConfig","effectDependencyList","selectorTreeList","value","onChange","fieldNames","modelKey"];var vn=E((function(e,r){var n=e.serviceConfig,a=e.effectDependencyList,i=e.selectorTreeList,o=e.value,u=e.onChange,s=e.fieldNames,c=e.modelKey,d=le(e,fn);var f=n||{};var v=a||[];var m=B(),p=m[0],h=m[1];var g=cn(c).useStore(),b=g[0],y=g[1];var C=B(false),N=C[0],L=C[1];var x=_((function(){if(t(e.value))return undefined;return P(e.value)?e.value:[e.value]}),[e.value]);var k=function e(r){return r===""||t(r)};var S=function e(r){var n=f.onRequestResultAdapter?f.onRequestResultAdapter(r):r;return n};var R=U.useCallbackRef((function(){return new Promise((function(e,r){var n,t,a,i,l;var o=function(){try{return e()}catch(e){return r(e)}};var u=function(e){try{L(false);void w.error(e.message||"数据查询异常...");return o()}catch(e){return r(e)}};try{if(!f.onRequest){throw new Error("onRequest 调用接口服务不能为空")}n=f.requiredParamsKeys;t=X({},f.params);if(n){a=n.find((function(e){return k(t[e])}));if(a){console.warn("TreeWrapper组件:参数:"+n.join("、")+"不能为空");return e()}}var s=function(){try{return o()}catch(e){return u(e)}};var c=function(e){try{L(false);void y.changeRequestStatus("request-error");return s()}catch(e){return u(e)}};try{L(true);void y.changeRequestStatus("request-pre");return Promise.resolve(f.onRequest==null?void 0:f.onRequest(t)).then((function(e){try{i=e;l=S(i);void y.setTreeList(l||[]);L(false);return s()}catch(e){return c(e)}}),c)}catch(e){c(e)}}catch(e){u(e)}}))}));$((function(){if(i){void y.setTreeList(i);return}var e=cn(c).getState();if(v.length>0||!e.requestStatus||e.requestStatus==="request-error"){void R()}}),v);$((function(){if(x&&x.length>0&&b.treeList.length>0&&!p){var r=[];x.forEach((function(n){var t=dn(n,b.treeList,e.fieldNames);r=r.concat(t.map((function(e){return e.value})))}));h((function(e){var n=r.concat(e||[]);return Array.from(new Set(n))}))}}),[b.treeList,e.fieldNames,o]);U.useUpdateEffect((function(){if(e.filterLabel){var r=l(b.treeList||[],e.fieldNames);var n=r.filter((function(r){var n;return(n=r.label)==null?void 0:n.includes(e.filterLabel||"")}));var t=[];n.map((function(r){var n=dn(r.value,b.treeList||[],e.fieldNames);var a=n.map((function(e){return e.value}));t=t.concat(a)}));h(Array.from(new Set(t)))}else{h([])}}),[e.filterLabel]);F(r,(function(){return{onClearSelectorList:function e(){void y.resetTreeList()},getTreeDataList:function e(){return b.treeList}}}));var q=U.useCallbackRef((function(e){h(e)}));var I=U.useCallbackRef((function(e){u==null?void 0:u(e)}));var D=U.useCallbackRef((function(r){if(e.multiple){u==null?void 0:u(r)}else{u==null?void 0:u(r[0])}}));var O=_((function(){var e=X({label:"label",value:"value",children:"children"},s);return{title:e.label,key:e.value,children:e.children}}),[s]);if(b.treeList.length>0){return j(T,ie({showLine:d.checkable?false:{showLeafIcon:false}},d,{fieldNames:O,expandedKeys:p,treeData:b.treeList,onExpand:q,selectedKeys:d.checkable?undefined:x,checkedKeys:d.checkable?x:undefined,onCheck:d.checkable?I:undefined,onSelect:d.checkable?undefined:D,style:ie({width:"100%"},d.style)}))}return j(mn,{requestStatus:b.requestStatus,loading:N,onAgainRequest:R})}));var mn=function e(r){var n=_((function(){if(r.requestStatus==="request-error"){return"数据查询异常"}else if(r.requestStatus==="request-success"){return"暂无数据"}return"数据查询中"}),[r.requestStatus]);return z("div",{className:"tree-wrapper-empty",children:[j(I,{spinning:r.loading}),j(L,{image:L.PRESENTED_IMAGE_SIMPLE,description:n,children:r.requestStatus==="request-error"&&j(f,{type:"primary",onClick:r.onAgainRequest,children:"重新获取数据"})})]})};export{de as ButtonOperate,ve as DatePickerWrapper,pe as DateRangePickerWrapper,Ce as DrawerWraper,Pe as DrawerWrapper,vr as EditableTable,pr as FileImport,gr as FileUpload,br as FlexLayout,yr as Gap,Cr as IconWrapper,Sr as ModalWraper,Er as ModalWrapper,Wr as Page404,Fr as PageFixedFooter,se as Permission,Je as SelectorWrapper,Yr as SimpleLayout,Ur as SmsCountDown,Vr as TableFilterLayout,an as TreeSelectorWrapper,vn as TreeWrapper,tr as UploadWrapper,Ne as createDrawerWraperModel,Oe as createDrawerWrapperModel,qr as createModalWraperModel,Br as createModalWrapperModel,oe as getPermissionList,ue as hasPermission,zr as preDefinedClassName,ae as styles,xe as useEffectCustom,ke as useEffectCustomAsync};
|
|
4
|
+
import{noop as e,getGlobalData as r,flatbizDate as n,isUndefinedOrNull as t,arrayField2LabelValue as a,valueIsEqual as i,treeToTiledArray as l,treeLeafParentsArray as o}from"@flatbiz/utils";import{isUndefined as u}from"@dimjs/lang/cjs/is-undefined";import{Space as s,Divider as c,Popconfirm as d,Button as f,DatePicker as v,Drawer as m,Form as p,Checkbox as h,Tag as g,Input as b,InputNumber as y,Radio as C,message as w,Select as N,Empty as L,Upload as x,Table as k,Tooltip as R,Modal as S,TreeSelect as q,Tree as T,Spin as I}from"antd";import{isArray as P}from"@dimjs/lang/cjs/is-array";import{Fragment as D,createElement as O,useMemo as A,useEffect as _,forwardRef as E,useRef as M,useState as B,useImperativeHandle as F,cloneElement as W,Children as K}from"react";import{jsx as j,jsxs as z,Fragment as Y}from"react/jsx-runtime";import{hooks as U}from"@wove/react/cjs/hooks";import G from"moment";import{Model as V}from"@dimjs/model-react";import{classNames as H}from"@dimjs/utils/cjs/class-names";import J from"@ant-design/icons/es/icons/SaveOutlined";import Q from"@ant-design/icons/es/icons/PlusOutlined";import{extend as X}from"@dimjs/utils/cjs/extend";import Z from"@ant-design/icons/es/icons/RedoOutlined";import{useEffectCustom as $}from"@flatbiz/antd";import{isBoolean as ee}from"@dimjs/lang/cjs/is-boolean";import{isNumber as re}from"@dimjs/lang/cjs/is-number";import{isString as ne}from"@dimjs/lang/cjs/is-string";import te from"@ant-design/icons/es/icons/DeleteOutlined";var ae=e;function ie(){ie=Object.assign||function(e){for(var r=1;r<arguments.length;r++){var n=arguments[r];for(var t in n){if(Object.prototype.hasOwnProperty.call(n,t)){e[t]=n[t]}}}return e};return ie.apply(this,arguments)}function le(e,r){if(e==null)return{};var n={};var t=Object.keys(e);var a,i;for(i=0;i<t.length;i++){a=t[i];if(r.indexOf(a)>=0)continue;n[a]=e[a]}return n}var oe=function e(){var n=r(),t=n.elemAclLimits;var a=P(t)?t:[];return a};var ue=function e(r){var n=oe();if(n.includes(r)){return true}return false};var se=function e(r){var n=oe();if(n.includes(r.name)){return j(D,{children:r.children})}return null};var ce=["text","color","onClick","permission","needConfirm","confirmMessage","hidden","style"];var de=function e(r){return j("div",{className:"table-operate",children:j(s,{split:j(c,{type:"vertical"}),size:r.size,wrap:u(r.wrap)?true:r.wrap,children:r.operateList.map((function(e,r){if(!e)return null;var n=e.text,t=e.color,a=e.onClick,i=e.permission,l=e.needConfirm,o=e.confirmMessage,u=e.hidden,s=e.style,c=le(e,ce);if(u)return null;if(i&&!ue(i))return null;var v=t?ie({color:t},s):s;var m=e.type||"link";if(l){return j(d,{title:o,okText:"确定",cancelText:"取消",onConfirm:a,arrowPointAtCenter:true,children:j(f,ie({},c,{onClick:undefined,type:m,danger:true,style:v,children:n}))},r)}return O(f,ie({},c,{type:m,style:v,key:r,onClick:a}),n)}))})})};de.defaultProps={size:0};var fe=["value","onChange","style"];var ve=function e(r){var t=r.value,a=r.onChange,i=r.style,l=le(r,fe);var o=A((function(){if(r.format)return r.format;if(r.showTime)return"YYYY-MM-DD HH:mm:ss";return"YYYY-MM-DD"}),[r.showTime,r.format]);var u=U.useCallbackRef((function(e){if(e){a==null?void 0:a(G(e).format(o))}else{a==null?void 0:a(undefined)}}));var s=t&&n.isDate(t)?G(new Date(t)):undefined;return j(v,ie({},l,{style:ie({width:"100%"},i),value:s,onChange:u}))};var me=["value","onChange","style"];var pe=function e(r){var t=r.value,a=r.onChange,i=r.style,l=le(r,me);var o=A((function(){if(r.format)return r.format;if(r.showTime===true)return"YYYY-MM-DD HH:mm:ss";return"YYYY-MM-DD"}),[r.showTime,r.format]);var u=U.useCallbackRef((function(e){if(e){var r=e||[],n=r[0],t=r[1];a==null?void 0:a([G(n).format(o),G(t).format(o)])}else{a==null?void 0:a(undefined)}}));var s=t||[],c=s[0],d=s[1];var f=c&&d&&n.isDate(c)&&n.isDate(d)?[G(new Date(c)),G(new Date(d))]:undefined;return j(v.RangePicker,ie({},l,{style:ie({width:"100%"},i),value:f,onChange:u}))};var he={actions:{openDrawerForm:function e(r){var n=r.itemData,t=r.title,a=r.operateType,i=r.pageLoading;return function(e){e.itemData=n;e.title=t;e.operateType=a;e.pageLoading=i;e.visible=true}},closeDrawer:function e(){return function(e){e.visible=false}},setDrawerItemData:function e(r){return function(e){e.pageLoading=false;e.itemData=r}}},state:{visible:false,title:"",operateType:null}};var ge=function e(r){return j("div",{className:"fixed-bottom-block",children:z(s,{size:"middle",children:[j(f,ie({},r.cancelButtonProps,{className:"cancel-btn",onClick:r.onCancel,children:r.cancelText||"取消"})),r.hideOkBtn!=true&&j(f,ie({type:"primary",icon:j(J,{})},r.okButtonProps,{className:"ok-btn",onClick:r.onOk,loading:r.loading,children:r.okText||"提交"}))]})})};var be=["pageLoading","className","width","children","footer","operationProps"];var ye=function e(){return j("div",{className:"drawer-wraper-loader",children:z("div",{className:"loader-wrapper",children:[j("div",{className:"loader-inner"}),j("div",{className:"loader-text",children:"LOADING"})]})})};var Ce=function e(r){var n=r.pageLoading,t=r.className,a=r.width,i=a===void 0?600:a,l=r.children,o=r.footer,u=r.operationProps,s=le(r,be);_((function(){console.error("@flatbiz/antd库【DrawerWraper】组件已经过期,请使用DrawerWrapper替换包括DrawerWraper=>DrawerWrapper、createDrawerWraperModel=>createDrawerWrapperModel,如果使用DrawerWrapper组件原用法需要调整")}),[]);return z(m,ie({className:H("drawer-wraper",t),keyboard:false,forceRender:false,destroyOnClose:true,width:"80%",contentWrapperStyle:{maxWidth:i},size:"default"},s,{footer:o||o===null?o:j(ge,ie({},u)),children:[j("div",{className:"drawer-wraper-content",children:l}),n&&j(ye,{})]}))};var we={};var Ne=function e(r){if(!we[r]){we[r]=V(he)}return we[r]};var Le={actions:{openDrawerForm:function e(r){var n=r.itemData,t=r.title,a=r.operateType,i=r.pageLoading;return function(e){e.itemData=n;e.title=t;e.operateType=a;e.pageLoading=i;e.visible=true}},closeDrawer:function e(){return function(e){e.visible=false}},setDrawerItemData:function e(r){return function(e){e.pageLoading=false;e.itemData=r}}},state:{visible:false,title:"",operateType:null}};var xe=function e(r,n){return _(r,n)};var ke=function e(r,n){_((function(){function e(){return new Promise((function(e,n){return Promise.resolve(r()).then((function(r){try{return e()}catch(e){return n(e)}}),n)}))}void e()}),n)};var Re=function e(r){return j("div",{className:"fixed-bottom-block",children:z(s,{size:"middle",children:[j(f,ie({},r.cancelButtonProps,{className:"cancel-btn",onClick:r.onCancel,children:r.cancelText||"取消"})),r.hideOkBtn!=true&&j(f,ie({type:"primary",icon:j(J,{})},r.okButtonProps,{className:"ok-btn",onClick:r.onOk,loading:r.loading,children:r.okText||"提交"}))]})})};var Se=["pageLoading","className","width","children"];var qe=function e(){return j("div",{className:"drawer-wrapper-loader",children:z("div",{className:"loader-wrapper",children:[j("div",{className:"loader-inner"}),j("div",{className:"loader-text",children:"LOADING"})]})})};var Te=function e(r){return z(D,{children:[j("div",{className:"drawer-wrapper-content",children:r.children}),r.operationProps?j(Ie,{children:j(Re,ie({},r.operationProps))}):null]})};var Ie=function e(r){return j("div",{className:"drawer-wrapper-footer",children:r.children})};var Pe=function e(r){var n=r.pageLoading,t=r.className,a=r.width,i=a===void 0?600:a,l=r.children,o=le(r,Se);xe((function(){if(r["operationProps"]){throw new Error("DrawerWrapper组件升级,参数operationProps用法变更,请及时更新")}}),[]);return z(m,ie({className:H("drawer-wrapper",t),keyboard:false,forceRender:false,destroyOnClose:true,width:"80%",contentWrapperStyle:{maxWidth:i},size:"default"},o,{footer:null,children:[n&&j(qe,{}),l]}))};Pe.Content=Te;Pe.Footer=Ie;var De={};var Oe=function e(r){if(!De[r]){De[r]=V(Le)}return De[r]};var Ae=function e(r,n){return typeof r==="boolean"?r:r==null?void 0:r({tableRowIndex:n})};var _e=function e(r){var n=r.fieldConfig,t=n.editableConfig,a=n.editable,i=n.render;var l=t.editableComptProps;var o=A((function(){if(a)return[];var e=P(r.value)?r.value:[];var n=l.options||[];if(!P(n)||n.length===0){return e.map((function(e){return{label:e,value:e}}))}var t=[];e.forEach((function(e){var r=n.find((function(r){return r.value===e}));t.push(r?r:{label:e,value:e})}));return t}),[a,l.options,r.value]);if(a){return j(h.Group,ie({},l,{value:r.value,onChange:r.onChange}))}return j("span",{className:"editable-checkbox-group-view",children:i?i(r.value):o.map((function(e,r){return j(g,{color:"#1890ff",children:e.label},r)}))})};var Ee=function e(r){var n=r.fieldConfig.formItemProps;return j(p.Item,ie({},n,{name:r.name,className:H("editable-checkbox-group-form-item",n==null?void 0:n.className),children:j(_e,ie({},r))}))};var Me=function e(r){var n=r.fieldConfig,t=n.formItemProps,a=n.editableConfig;return j(p.Item,ie({},t,{name:r.name,className:H("editable-date-picker-wraper-form-item",t==null?void 0:t.className),children:j(ve,ie({},a.editableComptProps))}))};var Be=function e(r){var n=r.fieldConfig,t=n.editableConfig,a=n.editable,i=n.render;var l=t.editableComptProps;var o=A((function(){var e=P(r.value)?r.value:[];if(a)return undefined;return e.join("~")}),[a,r.value]);if(a){return j(pe,ie({},l,{value:r.value,onChange:r.onChange}))}return j("span",{className:"editable-date-range-picker-view",children:i?i(r.value):o})};var Fe=function e(r){var n=r.fieldConfig.formItemProps;return j(p.Item,ie({},n,{name:r.name,className:H("editable-date-range-picker-wraper-form-item",n==null?void 0:n.className),children:j(Be,ie({},r))}))};var We=function e(r){var n=r.fieldConfig,t=n.formItemProps,a=n.editableConfig;return j(p.Item,ie({},t,{name:r.name,children:j(b,ie({},a.editableComptProps))}))};var Ke=function e(r){var n=r.fieldConfig,t=n.formItemProps,a=n.editableConfig;return j(p.Item,ie({},t,{name:r.name,className:H("editable-input-number-form-item",t==null?void 0:t.className),children:j(y,ie({},a.editableComptProps))}))};var je=function e(r){var n=r.fieldConfig,t=n.editableConfig,a=n.editable,i=n.render;var l=t.editableComptProps;var o=A((function(){if(a)return[];var e=r.value;var n=l.options||[];if(!P(n)||n.length===0){return e}var t=n.find((function(r){return r.value===e}));return(t==null?void 0:t.label)||e}),[a,l.options,r.value]);var u=U.useCallbackRef((function(e){r.onChange==null?void 0:r.onChange(e.target.value)}));if(a){return j(C.Group,ie({},l,{value:r.value,onChange:u}))}return j("span",{className:"editable-radio-group-view",children:i?i(r.value):o?j(g,{color:"#1890ff",children:o}):null})};var ze=function e(r){var n=r.fieldConfig.formItemProps;return j(p.Item,ie({},n,{name:r.name,className:H("editable-radio-group-form-item",n==null?void 0:n.className),children:j(je,ie({},r))}))};var Ye={selectorList:[],queryIsEmpty:false,requestStatus:"init"};var Ue={actions:{setSelectBoxList:function e(r){return function(e){e.selectorList=r||[];e.requestStatus="request-success"}},resetSelectBoxList:function e(){return function(e){e.selectorList=[]}},changeRequestStatus:function e(r){return function(e){e.requestStatus=r}}},state:Ye};var Ge={};var Ve=function e(r){if(!Ge[r]){Ge[r]=V(Ue)}return Ge[r]};var He=["serviceConfig","showAllOption","effectDependencyList","onSelectorListChange","operateType","searchFieldName","selectorList","modelKey","fieldNames"];var Je=E((function(e,r){var n=e.serviceConfig,l=e.showAllOption,o=e.effectDependencyList,u=e.onSelectorListChange,s=e.operateType,c=e.searchFieldName,d=e.selectorList,f=e.modelKey,v=e.fieldNames,m=le(e,He);var p=s==="search"&&d===undefined;var h=n||{};var g=o||[];var b=M();var y=B(false),C=y[0],L=y[1];var x=Ve(f).useStore(),k=x[0],R=x[1];var S=function e(r){return r===""||t(r)};var q=function e(r){var n=h.onRequestResultAdapter?h.onRequestResultAdapter(r):r;return a(n||[],v)};var T=U.useCallbackRef((function(e,r){return new Promise((function(n,a){var i,l,o,s,d,f;var v=function(){try{return n()}catch(e){return a(e)}};var m=function(e){try{L(false);void w.error(e.message||"数据查询异常...");return v()}catch(e){return a(e)}};try{if(!h.onRequest){throw new Error("onRequest 调用接口服务不能为空")}i=h.requiredParamsKeys;l=X({},h.params);if(i){o=i.find((function(e){return S(l[e])}));if(o){console.warn("SelectorWrapper组件:参数:"+i.join("、")+"不能为空");return n()}}var g=function(){try{return v()}catch(e){return m(e)}};var b=function(e){try{console.error(e);L(false);void R.changeRequestStatus("request-error");void w.error(e.message||"获取数据异常");return g()}catch(e){return m(e)}};try{L(true);void R.changeRequestStatus("request-pre");if((!t(e)||!t(r))&&p){s=c||"keyword";l[s]=e;l["id"]=r}return Promise.resolve(h.onRequest==null?void 0:h.onRequest(l)).then((function(e){try{d=e;f=q(d);L(false);u==null?void 0:u(f);void R.setSelectBoxList(f);return g()}catch(e){return b(e)}}),b)}catch(e){b(e)}}catch(e){m(e)}}))}));$((function(){if(d){void R.setSelectBoxList(a(d||[],v));return}if(p)return;var e=Ve(f).getState();if(g.length>0||i(e.requestStatus,["request-error","init"])){void T()}}),g);$((function(){if(p){if(S(e.value)){u==null?void 0:u([]);void R.resetSelectBoxList()}else{if(e.value!==b.current){void T(undefined,e.value)}}}}),g.concat([e.value]));F(r,(function(){return{onClearSelectorList:function e(){void R.resetSelectBoxList()},getSelectorList:function e(){return k.selectorList}}}));var I=U.useCallbackRef((function(e,r){return(r==null?void 0:r.children).toLowerCase().indexOf(e.toLowerCase())>=0}));var P=U.useDebounceCallback((function(e){if(e){void T(e)}else{void R.resetSelectBoxList()}}),300);var D=U.useCallbackRef((function(r){b.current=r;for(var n=arguments.length,t=new Array(n>1?n-1:0),a=1;a<n;a++){t[a-1]=arguments[a]}e.onChange==null?void 0:e.onChange(r,t)}));var O=U.useCallbackRef((function(){void T()}));var A=j(N.Option,{value:"",children:"全部"});return z(N,ie({showSearch:true,allowClear:true},m,{value:t(e.value)?undefined:e.value,notFoundContent:j(Qe,{requestStatus:k.requestStatus,onAgainRequest:O}),loading:C,onSearch:p?P:undefined,filterOption:p?false:I,onChange:D,fieldNames:undefined,suffixIcon:k.requestStatus==="request-error"?j(Z,{spin:C,onClick:O}):undefined,children:[l===true?A:l,k.selectorList.map((function(r){return j(N.Option,{value:r.value,label:r.label,children:e.onLabelRenderAdapter?e.onLabelRenderAdapter(r):r.label},r.value)}))]}))}));var Qe=function e(r){var n=A((function(){if(r.requestStatus==="request-error"){return"数据查询异常"}else if(r.requestStatus==="request-success"){return"暂无数据"}return"数据查询中"}),[r.requestStatus]);return j(L,{image:L.PRESENTED_IMAGE_SIMPLE,description:n,className:"tree-selector-wrapper-empty",children:r.requestStatus==="request-error"&&j(f,{type:"primary",onClick:r.onAgainRequest,children:"重新获取数据"})})};var Xe=function e(r){var n=r.fieldConfig,t=n.editableConfig,i=n.editable,l=n.render;var o=t.editableComptProps;var u=A((function(){var e=P(r.value)?r.value:[];if(i)return[];var n=a(o.selectorList||[],o.fieldNames);if(n.length===0){return e.map((function(e){return{label:e,value:e}}))}var t=[];e.forEach((function(e){var r=n.find((function(r){return r.value===e}));t.push(r?r:{label:e,value:e})}));return t}),[i,o.fieldNames,o.selectorList,r.value]);if(i){return j(Je,ie({},o,{value:r.value,onChange:r.onChange}))}return j("span",{className:"editable-selector-view",children:l?l(r.value):u.map((function(e,r){return j(g,{color:"#1890ff",children:e.label},r)}))})};var Ze=function e(r){var n=r.fieldConfig.formItemProps;return j(p.Item,ie({},n,{name:r.name,className:H("editable-selector-wrapper-form-item",n==null?void 0:n.className),children:j(Xe,ie({},r))}))};var $e=function e(r){var n,t;var a=A((function(){var e;if((e=r.fieldConfig)!=null&&e.render)return undefined;var n=ne(r.value)||re(r.value)||ee(r.value)||!r.value;if(!n){console.warn("Form.List name:【"+r.name+"】数据【"+JSON.stringify(r.value)+"】不能渲染在页面中")}return n?r.value:undefined}),[(n=r.fieldConfig)==null?void 0:n.render,r.name,r.value]);return j("span",{className:"editable-text-view",children:((t=r.fieldConfig)==null?void 0:t.render==null?void 0:t.render(r.value))||a})};var er=function e(r){return j(p.Item,{noStyle:true,name:r.name,children:j($e,{name:r.name,fieldConfig:r.fieldConfig})})};var rr=function e(r){var n=r.fieldConfig,t=n.formItemProps,a=n.editableConfig;return j(p.Item,ie({},t,{name:r.name,children:j(b.TextArea,ie({},a.editableComptProps))}))};var nr=["onChange","onUploadError","value"];var tr=function e(r){var n=r.onChange,t=r.onUploadError,a=r.value,i=le(r,nr);var l=B(),o=l[0],u=l[1];var s=X({uid:"uid",name:"name",url:"url"},r.fieldNames);xe((function(){u(a==null?void 0:a.map((function(e){return{uid:e[s.uid],name:e[s.name],url:e[s.url]}})))}),[s.name,s.uid,s.url,a]);var c=U.useCallbackRef((function(e){var i=e.fileList;if(e.file.status==="done"){var l=e.file.response;if(l.code==="0000"){var o=r.onRequestResultAdapter?r.onRequestResultAdapter(l.data):l.data;o[s.uid]=o[s.uid]||e.file.uid;o[s.name]=o[s.name]||e.file.name;if(r.maxCount===1){n==null?void 0:n([o])}else{n==null?void 0:n((a||[]).concat(o))}}else{if(t){t(l.message)}else{void w.error(l.message||"上传操作失败...")}i[i.length-1]=ie({},i[i.length-1],{status:"error"})}}else if(e.file.status==="removed"){var c=e.file.uid;var d=a!==undefined?[].concat(a):[];var f=d.findIndex((function(e){var r=e[s.uid];return r===c}));if(f>=0){d.splice(f,1)}n==null?void 0:n(d)}else if(e.file.status==="error"){if(t){t()}else{void w.error("上传操作失败...")}}u([].concat(i));r.onUploadChange==null?void 0:r.onUploadChange(e)}));return j(x,ie({},i,{onChange:c,fileList:o,className:H("v-upload-wrapper",i.className),children:i.disabled?null:j(ar,{listType:i.listType,children:r.children})}))};var ar=function e(r){if(r.children)return j(D,{children:r.children});if(r.listType==="picture-card"){return z("div",{children:[j(Q,{}),j("div",{style:{marginTop:8},children:"上传图片"})]})}if(r.listType==="picture"){return j(f,{type:"primary",ghost:true,children:"选择图片上传"})}return j(f,{type:"primary",ghost:true,children:"选择文件上传"})};var ir=["children"];var lr=function e(r){var n=r.fieldConfig,t=n.editableConfig,a=n.render,i=n.editable;var l=t.editableComptProps,o=l.children,u=le(l,ir);if(i){return j(tr,ie({listType:"text"},u,{value:r.value,onChange:r.onChange,children:o}))}return j("div",{className:"upload-wrapper-selector-view",children:a?a(r.value):j(tr,ie({listType:"text"},u,{value:r.value,disabled:true}))})};var or=function e(r){var n=r.fieldConfig.formItemProps;return j(p.Item,ie({},n,{name:r.name,className:H("editable-upload-wrapper-form-item",n==null?void 0:n.className),children:j(lr,ie({},r))}))};var ur=function e(r){var n=r.fieldConfig,t=n.editableConfig,a=n.editable;var i=Ae(a,r.tableRowIndex);var l=X({},r.fieldConfig,{editable:i});var o={name:r.name,fieldConfig:l};if((t==null?void 0:t.type)==="input"&&i){return j(We,ie({},o))}else if((t==null?void 0:t.type)==="inputNumber"&&i){return j(Ke,ie({},o))}else if((t==null?void 0:t.type)==="textArea"&&i){return j(rr,ie({},o))}else if((t==null?void 0:t.type)==="datePickerWrapper"&&i){return j(Me,ie({},o))}else if((t==null?void 0:t.type)==="dateRangePickerWrapper"){return j(Fe,ie({},o))}else if((t==null?void 0:t.type)==="selectorWrapper"){return j(Ze,ie({},o))}else if((t==null?void 0:t.type)==="checkboxGroup"){return j(Ee,ie({},o))}else if((t==null?void 0:t.type)==="radioGroup"){return j(ze,ie({},o))}else if((t==null?void 0:t.type)==="uploadWrapper"){return j(or,ie({},o))}else if((t==null?void 0:t.type)==="custom"){return t.editableComptProps({name:r.name,editable:i,completeName:r.completeName})}return j(er,ie({},o))};var sr=function e(r){var n=p.useFormInstance();var t=r.formListConfig,a=t.onFormListBeforeRender,i=t.editableConfigList,l=t.onFormListAfterRender,o=t.onFormListItemBeforeRender,u=t.onFormListItemAfterRender,c=t.deleteOperateRender;return j(p.List,{name:r.name,children:function e(t,d){var f=d.add,v=d.remove;return z(Y,{children:[a?a({tableRowIndex:r.tableRowIndex,add:f,get value(){return n.getFieldValue(r.completeName)}}):null,t.map((function(e,t){var a=i.find((function(e){return Ae(e.editable,r.tableRowIndex)}));var l=H("editable-inner-formlist-item","editable-inner-formlist-item-"+r.name[1],{"editable-inner-formlist-item_preview":!a});return z("div",{className:l,children:[o?o({add:f,remove:function e(){v(t)},formListItemIndex:t,tableRowIndex:r.tableRowIndex,get value(){return n.getFieldValue([].concat(r.completeName,[e.name]))}}):null,z(s,{children:[i.map((function(n,t){return j(ur,{name:[e.name,n.fieldName],fieldConfig:n,tableRowIndex:r.tableRowIndex,completeName:[].concat(r.completeName,[e.name])},t)})),a?j(cr,{deleteOperateRender:c,remove:function e(){v(t)},index:t}):null]}),u?u({add:f,formListItemIndex:t,tableRowIndex:r.tableRowIndex,remove:function e(){v(t)},get value(){return n.getFieldValue([].concat(r.completeName,[e.name]))}}):null]},t)})),l?l({tableRowIndex:r.tableRowIndex,add:f,get value(){return n.getFieldValue(r.completeName)}}):null]})}})};var cr=function e(r){return j(p.Item,{children:r.deleteOperateRender?r.deleteOperateRender({remove:r.remove,formListItemIndex:r.index}):j(f,{type:"link",danger:true,icon:j(te,{}),onClick:r.remove,children:"删除"})})};var dr=function e(r){if(r.fieldConfig){if(P(r.fieldConfig["editableConfigList"])){var n=r.fieldConfig;return j(sr,{name:r.name,completeName:r.completeName,formListConfig:n,tableRowIndex:r.tableRowIndex})}else{return j(ur,{name:r.name,fieldConfig:r.fieldConfig,tableRowIndex:r.tableRowIndex,completeName:r.completeName})}}return j(er,{name:r.name})};var fr=["fieldConfig","operateRender"];var vr=function e(r){var n;var t=A((function(){if(!r.columns)return[];return r.columns.map((function(e){var n=e.fieldConfig,t=e.operateRender,a=le(e,fr);return ie({onCell:function e(){var n;return{valign:((n=r.tableProps)==null?void 0:n.cellVerticalAlign)||"middle"}}},a,{render:function a(i,l){if(t){return t({name:[].concat(r.name,[l.name]),tableRowIndex:l.name,operation:l.operation})||""}return j(dr,{name:e.dataIndex?[l.name,e.dataIndex]:[l.name],completeName:e.dataIndex?[].concat(r.name,[l.name,e.dataIndex]):[].concat(r.name,[l.name]),fieldConfig:n,tableRowIndex:l.name})}})}))}),[r.columns,r.name,(n=r.tableProps)==null?void 0:n.cellVerticalAlign]);return j("div",{className:"editable-table",children:j(p.List,{name:r.name,rules:r.rules,children:function e(n,a){return z(D,{children:[r.onTableBeforeRender?r.onTableBeforeRender(a,n.length):null,j(k,ie({scroll:{x:"max-content"},pagination:false},r.tableProps,{dataSource:n.map((function(e){return ie({},e,{operation:a})})),columns:t,rowKey:"key"})),r.onTableAfterRender?r.onTableAfterRender(a,n.length):j(f,{type:"dashed",onClick:function e(){return a.add()},block:true,icon:j(Q,{}),style:{marginTop:15},children:"新增"})]})}})})};var mr=["onImportFinish"];var pr=function e(r){var n=r.onImportFinish,t=le(r,mr);var a=B(false),i=a[0],l=a[1];var o=U.useCallbackRef((function(e){if(e.file.status==="uploading"){l(true)}else if(e.file.status==="done"){l(false);var r=e.file.response;if(r.code==="0000"){n(r.data)}else{void w.error(r.message||"文件导入异常...")}}}));return j(x,ie({showUploadList:false,maxCount:1},t,{onChange:o,children:r.children?r.children:j(f,{type:"primary",ghost:true,loading:i,children:"选择文件"})}))};pr.defaultProps={name:"file",accept:".xlsx,.xls"};var hr=["onChange","onUploadError","onPreview","value"];var gr=function e(r){xe((function(){console.error("@flatbiz/antd库【FileUpload】组件已经过期,请使用【UploadWrapper】组件替换")}),[]);var n=r.onChange,t=r.onUploadError,a=r.onPreview,i=r.value,l=le(r,hr);var o=B([]),u=o[0],s=o[1];var c=X({fileKey:"fileKey",fileName:"fileName"},r.fieldNames);_((function(){if(i&&P(i)){s(i.map((function(e){return{uid:e["uid"]||e[c.fileKey],name:e[c.fileName],fileKey:e[c.fileKey],url:e[c.fileKey],thumbUrl:e[c.fileKey]}})))}}),[c.fileKey,c.fileName,i]);var d=U.useCallbackRef((function(e){if(e.file.status==="done"){var a=e.file.response;if(a.code==="0000"){var l=a.data||{};var o={uid:e.file.uid,fileName:l[c.fileName]||e.file.name,fileKey:l[c.fileKey]};var u=(i||[]).concat(o);n==null?void 0:n(u)}else{t==null?void 0:t(a.message)}}else if(e.file.status==="removed"){var d=e.file.uid;var f=i!==undefined?[].concat(i):[];var v=f.findIndex((function(e){var r=e["uid"]||e[c.fileKey];return r===d}));if(v>=0){f.splice(v,1)}n==null?void 0:n(f)}else if(e.file.status==="error"){t==null?void 0:t()}s([].concat(e.fileList));r.onUploadChange==null?void 0:r.onUploadChange(e)}));var f=U.useCallbackRef((function(e){a==null?void 0:a({fileKey:e[c.fileKey],fileName:e[c.fileName]})}));return j(x,ie({},l,{onChange:d,onPreview:f,fileList:u,className:H("v-file-upload",l.className),children:r.children}))};var br=function e(r){var n=P(r.children)?r.children:[r.children];var a=r.direction||"vertical";var i=r.gap?r.gap:0;var l=!t(r.fullIndex)?P(r.fullIndex)?r.fullIndex:[r.fullIndex]:[];return j("div",{className:H("v-flex-layout","v-flex-"+a,r.className),style:r.style,onClick:r.onClick,children:n.map((function(e,r){var t=e.props.style||{};var o=l.includes(r)?ie({flex:1},t):t;if(r<n.length-1&&i>0){if(a==="horizontal"){o.marginRight=i}else{o.marginBottom=i}}return W(e,{style:o,key:r})}))})};var yr=function e(r){return j("div",{style:ie({height:r.height},r.style),className:r.className})};var Cr=function e(r){return j(R,{title:r.hoverTips,children:z("div",{className:H("icon-wrapper","icon-wrapper-"+(r.size||"middle"),r.className),style:r.style,children:[r.icon,r.text?j("span",{className:"icon-wrapper-text",children:r.text}):null]})})};var wr={actions:{openModalForm:function e(r){var n=r.itemData,t=r.title,a=r.operateType,i=r.pageLoading;return function(e){e.itemData=n;e.title=t;e.operateType=a;e.pageLoading=i;e.visible=true}},closeModal:function e(){return function(e){e.visible=false}},setModalItemData:function e(r){return function(e){e.pageLoading=false;e.itemData=r}}},state:{visible:false,title:"",operateType:"view"}};var Nr=["loading","okText","cancelText","onCancel","onOk","hideOkBtn"];var Lr=function e(r){var n=r.loading,t=r.okText,a=t===void 0?"保存":t,i=r.cancelText,l=i===void 0?"取消":i,o=r.onCancel,u=r.onOk,c=r.hideOkBtn,d=le(r,Nr);return j(D,{children:z(s,{size:"middle",children:[j(f,ie({},d.cancelButtonProps,{className:"cancel-btn",onClick:o,children:l})),c!=true&&j(f,ie({type:"primary"},d.okButtonProps,{className:"ok-btn",onClick:u,loading:n,children:a}))]})})};var xr=["pageLoading","className","width","children","footer","operationProps"];var kr=function e(){return j("div",{className:"modal-wraper-loader",children:z("div",{className:"loader-wrapper",children:[j("div",{className:"loader-inner"}),j("div",{className:"loader-text",children:"LOADING"})]})})};var Rr=function e(r){var n=r.pageLoading,t=r.className,a=r.width,i=r.children,l=r.footer,o=r.operationProps,u=le(r,xr);_((function(){console.error("@flatbiz/antd库【ModalWraper】组件已经过期,请使用ModalWrapper替换包括ModalWraper=>ModalWrapper、createModalWraperModel=>createModalWrapperModel,如果使用ModalWrapper组件原用法需要调整")}),[]);return z(S,ie({className:H("modal-wraper",t),keyboard:false,forceRender:false,destroyOnClose:true},u,{width:a||600,footer:null,children:[z("div",{className:"modal-wraper-content",children:[i,n&&j(kr,{})]}),l!==null&&j("div",{className:"modal-wraper-content-footer",children:l?l:j(Lr,ie({},o))})]}))};var Sr={};var qr=function e(r){if(!Sr[r]){Sr[r]=V(wr)}return Sr[r]};var Tr={actions:{openModalForm:function e(r){var n=r.itemData,t=r.title,a=r.operateType,i=r.pageLoading;return function(e){e.itemData=n;e.title=t;e.operateType=a;e.pageLoading=i;e.visible=true}},closeModal:function e(){return function(e){e.visible=false}},setModalItemData:function e(r){return function(e){e.pageLoading=false;e.itemData=r}}},state:{visible:false,title:"",operateType:"view"}};var Ir=["loading","okText","cancelText","onCancel","onOk","hideOkBtn"];var Pr=function e(r){var n=r.loading,t=r.okText,a=t===void 0?"保存":t,i=r.cancelText,l=i===void 0?"取消":i,o=r.onCancel,u=r.onOk,c=r.hideOkBtn,d=le(r,Ir);return j(D,{children:z(s,{size:"middle",children:[j(f,ie({},d.cancelButtonProps,{className:"cancel-btn",onClick:o,children:l})),c!=true&&j(f,ie({type:"primary"},d.okButtonProps,{className:"ok-btn",onClick:u,loading:n,children:a}))]})})};var Dr=["pageLoading","className","width","children"];var Or=function e(){return j("div",{className:"modal-wrapper-loader",children:z("div",{className:"loader-wrapper",children:[j("div",{className:"loader-inner"}),j("div",{className:"loader-text",children:"LOADING"})]})})};var Ar=function e(r){return z(D,{children:[j("div",{className:"modal-wrapper-content",children:r.children}),r.operationProps?j(_r,{children:j(Pr,ie({},r.operationProps))}):null]})};var _r=function e(r){return j("div",{className:"modal-wrapper-footer",children:r.children})};var Er=function e(r){var n=r.pageLoading,t=r.className,a=r.width,i=r.children,l=le(r,Dr);xe((function(){if(r["operationProps"]){throw new Error("ModalWrapper组件升级,参数operationProps用法变更,请及时更新")}}),[]);return z(S,ie({className:H("modal-wrapper",t),keyboard:false,forceRender:true,destroyOnClose:true},l,{width:a||600,footer:null,children:[i,n&&j(Or,{})]}))};Er.Content=Ar;Er.Footer=_r;var Mr={};var Br=function e(r){if(!Mr[r]){Mr[r]=V(Tr)}return Mr[r]};var Fr=function e(r){return j("div",{className:H("page-fixed-footer",r.className),style:r.style,children:r.children})};var Wr=function e(){return j("div",{className:"v-404",children:"404"})};var Kr={label_width_70:"form-label-70",label_width_80:"form-label-80",label_width_90:"form-label-90",label_width_100:"form-label-100",label_width_110:"form-label-110",label_width_120:"form-label-120",label_width_130:"form-label-130",label_width_auto:"form-label-auto"};var jr={label_width_70:"form-item-label-70",label_width_80:"form-item-label-80",label_width_90:"form-item-label-90",label_width_100:"form-item-label-100",label_width_110:"form-item-label-110",label_width_120:"form-item-label-120",label_width_130:"form-item-label-130",label_width_auto:"form-item-label-auto"};var zr={form:Kr,formItem:jr};var Yr=function e(r){var n=r.formLabelAlign||"right";var t=H("simple-layout",{"simple-layout-tight":r.layoutType==="tight","simple-layout-formlabel-left":n==="left"},r.className);return z("div",{className:t,style:r.style,children:[r.title?j("div",{className:"simple-layout-title",children:r.title}):null,r.desc?j("div",{className:"simple-layout-desc",children:r.desc}):null,r.children?j("div",{className:"simple-layout-content",children:r.children}):null]})};var Ur=function e(r){var n=B(),t=n[0],a=n[1];var i=B(false),l=i[0],o=i[1];var u=B(false),s=u[0],c=u[1];var d=A((function(){return{sendTxt:r.sendTxt,sentTxt:r.sentTxt,processingTxt:r.processingTxt,format:r.format,autoStart:r.autoStart,totalTicks:r.totalTicks,duration:r.duration}}),[]);var f=d.format;var v=d.totalTicks;var m=d.duration;var p=U.useCountdownCallback((function(e){var n=e/1e3;if(e>0){if(!l){o(true)}a(f.replace("{t}",String(n)));r.onTick==null?void 0:r.onTick(n)}else if(e===0){o(false);c(false);r.onTick==null?void 0:r.onTick(n);a(d.sentTxt)}}),v*1e3,{intervalTime:m});_((function(){if(!d.autoStart){a(d.sendTxt)}else{p();c(true);o(true)}}),[p,d]);var h=U.useCallbackRef((function(){if(l||s)return;c(true);a(d.processingTxt);void r.onSendRequest().then((function(){o(true);p()})).catch((function(){a(d.sendTxt);c(false)}))}));var g=H("v-count-down",r.className,{running:l,starting:s});return j("div",{className:g,onClick:h,children:t})};Ur.defaultProps={totalTicks:60,duration:1e3,autoStart:false,format:"{t}s",sendTxt:"获取验证码",sentTxt:"重新获取",processingTxt:"发送中..."};var Gr=function e(){console.error("@flatbiz/antd库【TableFilterLayout】组件已经过期,请使用【SimpleLayout】组件替代")};var Vr=function e(r){xe((function(){Gr()}),[]);return j("div",{className:H("table-filter-layout",{"table-filter-layout-flex":r.isFixed},r.className),children:K.map(r.children,(function(e,n){if(r.isFixed&&n===r.fullIndex){return W(e,{className:"table-filter-layout-flex-full"})}return e}))})};var Hr=function e(r){return j("div",{className:H("table-filter-layout-condition",r.className),children:r.children})};var Jr=function e(r){return j("div",{className:H("table-filter-layout-operate",r.className),children:r.children})};var Qr=function e(r){return j("div",{className:H("table-filter-layout-table",r.className),children:r.children})};var Xr=function e(r){return j("div",{className:H("table-filter-layout-footer",r.className),children:r.children})};Vr.Condition=Hr;Vr.Operate=Jr;Vr.Table=Qr;Vr.Footer=Xr;var Zr={treeSelectorList:[],queryIsEmpty:false};var $r={actions:{setSelectBoxList:function e(r){return function(e){e.treeSelectorList=r||[];e.requestStatus="request-success"}},resetSelectBoxList:function e(){return function(e){e.treeSelectorList=[]}},changeRequestStatus:function e(r){return function(e){e.requestStatus=r}}},state:Zr};var en={};var rn=function e(r){if(!en[r]){en[r]=V($r)}return en[r]};var nn=function e(r,n,t){if(!P(n)||n.length===0)return[];var a=l(n,t);return o(r,a)};var tn=["serviceConfig","effectDependencyList","onTreeSelectorListChange","treeSelectorList","modelKey"];var an=E((function(e,r){var n=e.serviceConfig,a=e.effectDependencyList,i=e.onTreeSelectorListChange,l=e.treeSelectorList,o=e.modelKey,u=le(e,tn);var s=n||{};var c=a||[];var d=B(false),f=d[0],v=d[1];var m=B(),p=m[0],h=m[1];var g=rn(o).useStore(),b=g[0],y=g[1];var C=function e(r){return r===""||t(r)};var N=function e(r){var n=s.onRequestResultAdapter?s.onRequestResultAdapter(r):r;return n};var L=U.useCallbackRef((function(){return new Promise((function(e,r){var n,t,a,l,o;var u=function(){try{return e()}catch(e){return r(e)}};var c=function(e){try{v(false);void w.error(e.message||"数据查询异常...");return u()}catch(e){return r(e)}};try{if(!s.onRequest){throw new Error("onRequest 调用接口服务不能为空")}n=s.requiredParamsKeys;t=X({},s.params);if(n){a=n.find((function(e){return C(t[e])}));if(a){console.warn("TreeSelectorWrapper组件:参数:"+n.join("、")+"不能为空");return e()}}var d=function(){try{return u()}catch(e){return c(e)}};var f=function(e){try{v(false);void y.changeRequestStatus("request-error");return d()}catch(e){return c(e)}};try{v(true);void y.changeRequestStatus("request-pre");return Promise.resolve(s.onRequest==null?void 0:s.onRequest(t)).then((function(e){try{l=e;o=N(l);v(false);i==null?void 0:i(o);void y.setSelectBoxList(o||[]);return d()}catch(e){return f(e)}}),f)}catch(e){f(e)}}catch(e){c(e)}}))}));$((function(){if(l){void y.setSelectBoxList(l);return}var e=rn(o).getState();console.log("realTimeState",e.requestStatus);if(c.length>0||!e.requestStatus||e.requestStatus==="request-error"){void L()}}),c);_((function(){if(!t(e.value)){var r=P(e.value)?e.value:[e.value];if(r.length>0&&b.treeSelectorList.length>0){var n=[];r.forEach((function(r){var t=nn(r,b.treeSelectorList,e.fieldNames);n=n.concat(t.map((function(e){return e.value})))}));h((function(e){var r=n.concat(e||[]);return Array.from(new Set(r))}))}}}),[b.treeSelectorList,e.fieldNames,e.value]);F(r,(function(){return{onClearSelectorList:function e(){void y.setSelectBoxList([])},getTreeSelectorList:function e(){return b.treeSelectorList}}}));var x=U.useCallbackRef((function(e){h(e)}));var k=U.useCallbackRef((function(){void L()}));return j(q,ie({dropdownStyle:{maxHeight:400,overflow:"auto"},showSearch:true,treeLine:true},u,{value:t(e.value)?undefined:e.value,treeExpandedKeys:p,treeData:b.treeSelectorList,loading:f,onTreeExpand:x,style:ie({width:"100%"},u.style),suffixIcon:b.requestStatus==="request-error"?j(Z,{spin:f,onClick:k}):undefined,notFoundContent:j(ln,{requestStatus:b.requestStatus,onAgainRequest:k})}))}));var ln=function e(r){var n=A((function(){if(r.requestStatus==="request-error"){return"数据查询异常"}else if(r.requestStatus==="request-success"){return"暂无数据"}return"数据查询中"}),[r.requestStatus]);return j(L,{image:L.PRESENTED_IMAGE_SIMPLE,description:n,className:"tree-selector-wrapper-empty",children:r.requestStatus==="request-error"&&j(f,{type:"primary",onClick:r.onAgainRequest,children:"重新获取数据"})})};var on={treeList:[],queryIsEmpty:false};var un={actions:{setTreeList:function e(r){return function(e){e.treeList=r||[];e.requestStatus="request-success"}},resetTreeList:function e(){return function(e){e.treeList=[]}},changeRequestStatus:function e(r){return function(e){e.requestStatus=r}}},state:on};var sn={};var cn=function e(r){if(!sn[r]){sn[r]=V(un)}return sn[r]};var dn=function e(r,n,t){var a=l(n,t);return o(r,a)};var fn=["serviceConfig","effectDependencyList","selectorTreeList","value","onChange","fieldNames","modelKey"];var vn=E((function(e,r){var n=e.serviceConfig,a=e.effectDependencyList,i=e.selectorTreeList,o=e.value,u=e.onChange,s=e.fieldNames,c=e.modelKey,d=le(e,fn);var f=n||{};var v=a||[];var m=B(),p=m[0],h=m[1];var g=cn(c).useStore(),b=g[0],y=g[1];var C=B(false),N=C[0],L=C[1];var x=A((function(){if(t(e.value))return undefined;return P(e.value)?e.value:[e.value]}),[e.value]);var k=function e(r){return r===""||t(r)};var R=function e(r){var n=f.onRequestResultAdapter?f.onRequestResultAdapter(r):r;return n};var S=U.useCallbackRef((function(){return new Promise((function(e,r){var n,t,a,i,l;var o=function(){try{return e()}catch(e){return r(e)}};var u=function(e){try{L(false);void w.error(e.message||"数据查询异常...");return o()}catch(e){return r(e)}};try{if(!f.onRequest){throw new Error("onRequest 调用接口服务不能为空")}n=f.requiredParamsKeys;t=X({},f.params);if(n){a=n.find((function(e){return k(t[e])}));if(a){console.warn("TreeWrapper组件:参数:"+n.join("、")+"不能为空");return e()}}var s=function(){try{return o()}catch(e){return u(e)}};var c=function(e){try{L(false);void y.changeRequestStatus("request-error");return s()}catch(e){return u(e)}};try{L(true);void y.changeRequestStatus("request-pre");return Promise.resolve(f.onRequest==null?void 0:f.onRequest(t)).then((function(e){try{i=e;l=R(i);void y.setTreeList(l||[]);L(false);return s()}catch(e){return c(e)}}),c)}catch(e){c(e)}}catch(e){u(e)}}))}));$((function(){if(i){void y.setTreeList(i);return}var e=cn(c).getState();if(v.length>0||!e.requestStatus||e.requestStatus==="request-error"){void S()}}),v);$((function(){if(x&&x.length>0&&b.treeList.length>0&&!p){var r=[];x.forEach((function(n){var t=dn(n,b.treeList,e.fieldNames);r=r.concat(t.map((function(e){return e.value})))}));h((function(e){var n=r.concat(e||[]);return Array.from(new Set(n))}))}}),[b.treeList,e.fieldNames,o]);U.useUpdateEffect((function(){if(e.filterLabel){var r=l(b.treeList||[],e.fieldNames);var n=r.filter((function(r){var n;return(n=r.label)==null?void 0:n.includes(e.filterLabel||"")}));var t=[];n.map((function(r){var n=dn(r.value,b.treeList||[],e.fieldNames);var a=n.map((function(e){return e.value}));t=t.concat(a)}));h(Array.from(new Set(t)))}else{h([])}}),[e.filterLabel]);F(r,(function(){return{onClearSelectorList:function e(){void y.resetTreeList()},getTreeDataList:function e(){return b.treeList}}}));var q=U.useCallbackRef((function(e){h(e)}));var I=U.useCallbackRef((function(e){u==null?void 0:u(e)}));var D=U.useCallbackRef((function(r){if(e.multiple){u==null?void 0:u(r)}else{u==null?void 0:u(r[0])}}));var O=A((function(){var e=X({label:"label",value:"value",children:"children"},s);return{title:e.label,key:e.value,children:e.children}}),[s]);if(b.treeList.length>0){return j(T,ie({showLine:d.checkable?false:{showLeafIcon:false}},d,{fieldNames:O,expandedKeys:p,treeData:b.treeList,onExpand:q,selectedKeys:d.checkable?undefined:x,checkedKeys:d.checkable?x:undefined,onCheck:d.checkable?I:undefined,onSelect:d.checkable?undefined:D,style:ie({width:"100%"},d.style)}))}return j(mn,{requestStatus:b.requestStatus,loading:N,onAgainRequest:S})}));var mn=function e(r){var n=A((function(){if(r.requestStatus==="request-error"){return"数据查询异常"}else if(r.requestStatus==="request-success"){return"暂无数据"}return"数据查询中"}),[r.requestStatus]);return z("div",{className:"tree-wrapper-empty",children:[j(I,{spinning:r.loading}),j(L,{image:L.PRESENTED_IMAGE_SIMPLE,description:n,children:r.requestStatus==="request-error"&&j(f,{type:"primary",onClick:r.onAgainRequest,children:"重新获取数据"})})]})};export{de as ButtonOperate,ve as DatePickerWrapper,pe as DateRangePickerWrapper,Ce as DrawerWraper,Pe as DrawerWrapper,vr as EditableTable,pr as FileImport,gr as FileUpload,br as FlexLayout,yr as Gap,Cr as IconWrapper,Rr as ModalWraper,Er as ModalWrapper,Wr as Page404,Fr as PageFixedFooter,se as Permission,Je as SelectorWrapper,Yr as SimpleLayout,Ur as SmsCountDown,Vr as TableFilterLayout,an as TreeSelectorWrapper,vn as TreeWrapper,tr as UploadWrapper,Ne as createDrawerWraperModel,Oe as createDrawerWrapperModel,qr as createModalWraperModel,Br as createModalWrapperModel,oe as getPermissionList,ue as hasPermission,zr as preDefinedClassName,ae as styles,xe as useEffectCustom,ke as useEffectCustomAsync};
|
|
5
5
|
//# sourceMappingURL=index.js.map
|
package/esm/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["@flatbiz/antd/src/01-styles/index.ts","@flatbiz/antd/src/permission/index.tsx","@flatbiz/antd/src/button-operate/index.tsx","@flatbiz/antd/src/date-picker-wrapper/index.tsx","@flatbiz/antd/src/date-range-picker-wrapper/index.tsx","@flatbiz/antd/src/drawer-wraper/drawer.model.ts","@flatbiz/antd/src/drawer-wraper/drawer-operation.tsx","@flatbiz/antd/src/drawer-wraper/drawer-wraper.tsx","@flatbiz/antd/src/drawer-wraper/index.ts","@flatbiz/antd/src/drawer-wrapper/drawer.model.ts","@flatbiz/antd/src/hooks/use-effect-custom.ts","@flatbiz/antd/src/hooks/use-effect-custom-async.ts","@flatbiz/antd/src/drawer-wrapper/drawer-operation.tsx","@flatbiz/antd/src/drawer-wrapper/drawer-wrapper.tsx","@flatbiz/antd/src/drawer-wrapper/index.ts","@flatbiz/antd/src/editable-table/utils.ts","@flatbiz/antd/src/editable-table/form-item/checkbox-group.tsx","@flatbiz/antd/src/editable-table/form-item/date-picker-wrapper.tsx","@flatbiz/antd/src/editable-table/form-item/date-range-picker-wrapper.tsx","@flatbiz/antd/src/editable-table/form-item/input.tsx","@flatbiz/antd/src/editable-table/form-item/input-number.tsx","@flatbiz/antd/src/editable-table/form-item/radio-group.tsx","@flatbiz/antd/src/selector-wrapper/model.ts","@flatbiz/antd/src/selector-wrapper/index.tsx","@flatbiz/antd/src/editable-table/form-item/selector-wrapper.tsx","@flatbiz/antd/src/editable-table/form-item/text.tsx","@flatbiz/antd/src/editable-table/form-item/textarea.tsx","@flatbiz/antd/src/upload-wrapper/index.tsx","@flatbiz/antd/src/editable-table/form-item/upload-wrapper.tsx","@flatbiz/antd/src/editable-table/form-item/index.tsx","@flatbiz/antd/src/editable-table/form-list-item/form-list.tsx","@flatbiz/antd/src/editable-table/form-list-item/index.tsx","@flatbiz/antd/src/editable-table/index.tsx","@flatbiz/antd/src/file-import/index.tsx","@flatbiz/antd/src/file-upload/index.tsx","@flatbiz/antd/src/flex-layout/index.tsx","@flatbiz/antd/src/gap/index.tsx","@flatbiz/antd/src/icon-wrapper/index.tsx","@flatbiz/antd/src/modal-wraper/modal.model.ts","@flatbiz/antd/src/modal-wraper/modal-operation.tsx","@flatbiz/antd/src/modal-wraper/modal-wraper.tsx","@flatbiz/antd/src/modal-wraper/index.ts","@flatbiz/antd/src/modal-wrapper/modal.model.ts","@flatbiz/antd/src/modal-wrapper/modal-operation.tsx","@flatbiz/antd/src/modal-wrapper/modal-wrapper.tsx","@flatbiz/antd/src/modal-wrapper/index.ts","@flatbiz/antd/src/page-fixed-footer/index.tsx","@flatbiz/antd/src/page404/index.tsx","@flatbiz/antd/src/pre-defined-classname/form/index.tsx","@flatbiz/antd/src/pre-defined-classname/index.ts","@flatbiz/antd/src/simple-layout/index.tsx","@flatbiz/antd/src/sms-count-down/index.tsx","@flatbiz/antd/src/table-filter-layout/index.tsx","@flatbiz/antd/src/tree-selector-wrapper/model.ts","@flatbiz/antd/src/tree-selector-wrapper/utils.ts","@flatbiz/antd/src/tree-selector-wrapper/index.tsx","@flatbiz/antd/src/tree-wrapper/model.ts","@flatbiz/antd/src/tree-wrapper/utils.ts","@flatbiz/antd/src/tree-wrapper/index.tsx"],"sourcesContent":["import { noop } from '@flatbiz/utils';\nimport './1_root.less';\nimport './2_base.less';\n\nexport const styles = noop;\n","import { isArray } from '@dimjs/lang';\nimport { getGlobalData } from '@flatbiz/utils';\nimport { FC, Fragment } from 'react';\n\nexport const getPermissionList = () => {\n const { elemAclLimits } = getGlobalData();\n const permissionList: string[] = isArray(elemAclLimits) ? elemAclLimits : [];\n return permissionList;\n};\n\nexport const hasPermission = (name: string) => {\n const permissionList = getPermissionList();\n if (permissionList.includes(name)) {\n return true;\n }\n return false;\n};\n\nexport interface PermissionProps {\n name: string;\n}\nexport const Permission: FC<PermissionProps> = (props) => {\n const permissionList = getPermissionList();\n if (permissionList.includes(props.name)) {\n return <Fragment>{props.children}</Fragment>;\n }\n return null;\n};\n","import { isUndefined } from '@dimjs/lang';\nimport { Button, ButtonProps, Divider, Popconfirm, Space, SpaceProps } from 'antd';\nimport { VFC } from 'react';\nimport { hasPermission } from '../permission';\nimport './style.less';\n\nexport interface ButtonOperateItem extends ButtonProps {\n text: string;\n color?: string;\n onClick: () => void;\n permission?: string;\n needConfirm?: boolean;\n confirmMessage?: string;\n hidden?: boolean;\n}\n\nexport interface ButtonOperateProps {\n operateList: Array<ButtonOperateItem | null>;\n wrap?: boolean;\n size?: SpaceProps['size'];\n}\n\nexport const ButtonOperate: VFC<ButtonOperateProps> = (props) => {\n return (\n <div className=\"table-operate\">\n <Space\n split={<Divider type=\"vertical\" />}\n size={props.size}\n wrap={isUndefined(props.wrap) ? true : props.wrap}\n >\n {props.operateList.map((item, index) => {\n if (!item) return null;\n const {\n text,\n color,\n onClick,\n permission,\n needConfirm,\n confirmMessage,\n hidden,\n style,\n ...otherProps\n } = item;\n if (hidden) return null;\n if (permission && !hasPermission(permission)) return null;\n const newStyle = color ? { color, ...style } : style;\n const type = item.type || 'link';\n if (needConfirm) {\n return (\n <Popconfirm\n title={confirmMessage}\n okText=\"确定\"\n cancelText=\"取消\"\n onConfirm={onClick}\n arrowPointAtCenter={true}\n key={index}\n >\n <Button {...otherProps} onClick={undefined} type={type} danger style={newStyle}>\n {text}\n </Button>\n </Popconfirm>\n );\n }\n return (\n <Button {...otherProps} type={type} style={newStyle} key={index} onClick={onClick}>\n {text}\n </Button>\n );\n })}\n </Space>\n </div>\n );\n};\n\nButtonOperate.defaultProps = {\n size: 0,\n};\n","import { flatbizDate } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { DatePicker } from 'antd';\nimport { PickerDateProps } from 'antd/lib/date-picker/generatePicker';\nimport moment from 'moment';\nimport { useMemo, VFC } from 'react';\n\nexport type DatePickerWrapperProps = {\n value?: string;\n onChange?: (value?: string) => void;\n} & Omit<PickerDateProps<moment.Moment>, 'value' | 'onChange'>;\n\n/**\n * DatePicker包装组件\n * ```\n * 1. value类型为 string\n * 2. onChange返回类型 string\n * 3. 默认格式化类型 YYYY-MM-DD; 当showTime===true时,默认格式化类型YYYY-MM-DD HH:mm:ss\n * 4. 其他格式化类型自定义format\n * ```\n */\nexport const DatePickerWrapper: VFC<DatePickerWrapperProps> = (props) => {\n const { value, onChange, style, ...otherProps } = props;\n const format = useMemo(() => {\n if (props.format) return props.format as string;\n if (props.showTime) return 'YYYY-MM-DD HH:mm:ss';\n return 'YYYY-MM-DD';\n }, [props.showTime, props.format]);\n\n const onChangeDate = hooks.useCallbackRef((value) => {\n if (value) {\n onChange?.(moment(value).format(format));\n } else {\n onChange?.(undefined);\n }\n });\n\n const datePickerValue = value && flatbizDate.isDate(value) ? moment(new Date(value)) : undefined;\n\n return (\n <DatePicker\n {...otherProps}\n style={{ width: '100%', ...style }}\n value={datePickerValue}\n onChange={onChangeDate}\n />\n );\n};\n","import { flatbizDate } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { DatePicker } from 'antd';\nimport { RangePickerDateProps } from 'antd/lib/date-picker/generatePicker';\nimport moment from 'moment';\nimport { useMemo, VFC } from 'react';\n\nexport type DateRangePickerWrapperProps = {\n value?: [string, string];\n onChange?: (value?: [string, string]) => void;\n} & Omit<RangePickerDateProps<moment.Moment>, 'value' | 'onChange'>;\n\n/**\n * DatePicker.RangePicker包装组件\n * ```\n * TODO: 引用DatePicker.RangePicker TS有问题,待解决\n * 1. value类型为 [string, string]\n * 2. onChange返回类型 [string, string]\n * 3. 默认格式化类型 YYYY-MM-DD; 当showTime===true时,默认格式化类型YYYY-MM-DD HH:mm:ss\n * 4. 其他格式化类型自定义format\n * ```\n */\nexport const DateRangePickerWrapper: VFC<DateRangePickerWrapperProps> = (props) => {\n const { value, onChange, style, ...otherProps } = props;\n\n const format = useMemo(() => {\n if (props.format) return props.format as string;\n if (props.showTime === true) return 'YYYY-MM-DD HH:mm:ss';\n return 'YYYY-MM-DD';\n }, [props.showTime, props.format]);\n\n const onChangeDate = hooks.useCallbackRef((values) => {\n if (values) {\n const [value1, value2] = values || [];\n onChange?.([moment(value1).format(format), moment(value2).format(format)]);\n } else {\n onChange?.(undefined);\n }\n });\n\n const [date1, date2] = value || [];\n\n const rangePickerValue =\n date1 && date2 && flatbizDate.isDate(date1) && flatbizDate.isDate(date2)\n ? [moment(new Date(date1)), moment(new Date(date2))]\n : undefined;\n\n return (\n <DatePicker.RangePicker\n {...otherProps}\n style={{ width: '100%', ...style }}\n value={rangePickerValue as [moment.Moment, moment.Moment]}\n onChange={onChangeDate}\n />\n );\n};\n","import { ModelType } from '@dimjs/model';\n\nexport interface DrawerStateType {\n title: string;\n /**\n * 显示drawer\n */\n visible: boolean;\n /**\n * 用来处理form, `更新`的时候的传递当前item列表行的数据, 当`创建`的时候强制设置为 `undefined`\n */\n itemData?: Record<string, any>;\n operateType: 'create' | 'update' | 'view' | null;\n pageLoading?: boolean;\n}\n\nexport interface DrawerActionsParamType {\n openDrawerForm: Pick<DrawerStateType, 'title' | 'itemData' | 'operateType' | 'pageLoading'>;\n closeDrawer: void;\n setDrawerItemData: Record<string, any>;\n}\n\n/**\n * @shared\n * 提供公共的drawer处理, 通常用来表单编辑, 弹窗抽屉模式.\n * 注意全部理论上只允许一个drawer实例存在,如需处理多个, 请自行实例话模型.\n */\nexport const DrawerModel: ModelType<DrawerStateType, DrawerActionsParamType> = {\n actions: {\n openDrawerForm({ itemData, title, operateType, pageLoading }) {\n return (state) => {\n state.itemData = itemData;\n state.title = title;\n state.operateType = operateType;\n state.pageLoading = pageLoading;\n state.visible = true;\n };\n },\n closeDrawer() {\n return (state) => {\n state.visible = false;\n };\n },\n setDrawerItemData(params) {\n return (state) => {\n state.pageLoading = false;\n state.itemData = params;\n };\n },\n },\n state: {\n visible: false,\n title: '',\n operateType: null,\n },\n};\n","import { SaveOutlined } from '@ant-design/icons';\nimport { Button, ButtonProps, Space } from 'antd';\n\nexport interface DrawerOperationOldProps {\n loading?: boolean;\n okText?: string;\n cancelText?: string;\n onOk?: () => void;\n onCancel?: () => void;\n hideOkBtn?: boolean;\n okButtonProps?: Omit<ButtonProps, 'onClick' | 'loading' | 'className'>;\n cancelButtonProps?: Omit<ButtonProps, 'onClick' | 'loading' | 'className'>;\n}\n\nexport const DrawerOperation = (props: DrawerOperationOldProps) => {\n return (\n <div className=\"fixed-bottom-block\">\n <Space size=\"middle\">\n <Button {...props.cancelButtonProps} className=\"cancel-btn\" onClick={props.onCancel}>\n {props.cancelText || '取消'}\n </Button>\n {props.hideOkBtn != true && (\n <Button\n type=\"primary\"\n icon={<SaveOutlined />}\n {...props.okButtonProps}\n className=\"ok-btn\"\n onClick={props.onOk}\n loading={props.loading}\n >\n {props.okText || '提交'}\n </Button>\n )}\n </Space>\n </div>\n );\n};\n","import { classNames } from '@dimjs/utils';\nimport { Drawer, DrawerProps } from 'antd';\nimport { FC, useEffect } from 'react';\nimport { DrawerOperation, DrawerOperationOldProps } from './drawer-operation';\nimport './style.less';\n\nexport type DrawerFormProps = {\n className?: string;\n /**\n * 整个drawer页面级的spinning <Page loading />\n */\n pageLoading?: boolean;\n // 设置了 DrawerProps footer属性后,operationProps配置将失效\n operationProps?: DrawerOperationOldProps;\n} & DrawerProps;\n\nconst PageLoader = () => {\n return (\n <div className=\"drawer-wraper-loader\">\n <div className=\"loader-wrapper\">\n <div className=\"loader-inner\" />\n <div className=\"loader-text\">LOADING</div>\n </div>\n </div>\n );\n};\n\n/**\n * 弹窗机制\n * ```\n * 1. 默认 destroyOnClose = true\n * 2. 默认 forceRender = false\n * ```\n */\nexport const DrawerWraper: FC<DrawerFormProps> = (props) => {\n const { pageLoading, className, width = 600, children, footer, operationProps, ...otherProps } = props;\n useEffect(() => {\n console.error(\n '@flatbiz/antd库【DrawerWraper】组件已经过期,请使用DrawerWrapper替换包括DrawerWraper=>DrawerWrapper、createDrawerWraperModel=>createDrawerWrapperModel,如果使用DrawerWrapper组件原用法需要调整',\n );\n }, []);\n return (\n <Drawer\n className={classNames('drawer-wraper', className)}\n keyboard={false}\n forceRender={false}\n destroyOnClose={true}\n width={'80%'}\n contentWrapperStyle={{ maxWidth: width }}\n size=\"default\"\n {...otherProps}\n footer={footer || footer === null ? footer : <DrawerOperation {...operationProps} />}\n >\n <div className=\"drawer-wraper-content\">{children}</div>\n {pageLoading && <PageLoader />}\n </Drawer>\n );\n};\n","import { API, ModelType } from '@dimjs/model';\nimport { Model } from '@dimjs/model-react';\nimport { DrawerActionsParamType, DrawerModel, DrawerStateType } from './drawer.model';\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nconst drawerModels: Record<string, API<ModelType<DrawerStateType, DrawerActionsParamType, any>>> = {};\n\n/**\n * drawer弹窗模型\n * @param key 唯一值必传\n * @returns\n *\n * ```\n * 使用方式\n * const [drawerState, drawerActions] = createDrawerWraperModel('key值').useStore();\n * ```\n */\nexport const createDrawerWraperModel = (key: string) => {\n if (!drawerModels[key]) {\n drawerModels[key] = Model(DrawerModel);\n }\n return drawerModels[key];\n};\n\nexport * from './drawer-wraper';\n","import { ModelType } from '@dimjs/model';\n\nexport interface DrawerStateType {\n title: string;\n /**\n * 显示drawer\n */\n visible: boolean;\n /**\n * 用来处理form, `更新`的时候的传递当前item列表行的数据, 当`创建`的时候强制设置为 `undefined`\n */\n itemData?: Record<string, any>;\n operateType: 'create' | 'update' | 'view' | null;\n pageLoading?: boolean;\n}\n\nexport interface DrawerActionsParamType {\n openDrawerForm: Pick<DrawerStateType, 'title' | 'itemData' | 'operateType' | 'pageLoading'>;\n closeDrawer: void;\n setDrawerItemData: Record<string, any>;\n}\n\n/**\n * @shared\n * 提供公共的drawer处理, 通常用来表单编辑, 弹窗抽屉模式.\n * 注意全部理论上只允许一个drawer实例存在,如需处理多个, 请自行实例话模型.\n */\nexport const DrawerModel: ModelType<DrawerStateType, DrawerActionsParamType> = {\n actions: {\n openDrawerForm({ itemData, title, operateType, pageLoading }) {\n return (state) => {\n state.itemData = itemData;\n state.title = title;\n state.operateType = operateType;\n state.pageLoading = pageLoading;\n state.visible = true;\n };\n },\n closeDrawer() {\n return (state) => {\n state.visible = false;\n };\n },\n setDrawerItemData(params) {\n return (state) => {\n state.pageLoading = false;\n state.itemData = params;\n };\n },\n },\n state: {\n visible: false,\n title: '',\n operateType: null,\n },\n};\n","import { DependencyList, EffectCallback, useEffect } from 'react';\n\nexport const useEffectCustom = (fn: EffectCallback, deps: DependencyList) => {\n // eslint-disable-next-line react-hooks/exhaustive-deps\n return useEffect(fn, deps);\n};\n","import { DependencyList, useEffect } from 'react';\n\nexport const useEffectCustomAsync = (fn: () => Promise<void>, deps: DependencyList) => {\n useEffect(() => {\n async function asyncFunction() {\n await fn();\n }\n void asyncFunction();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, deps);\n};\n","import { SaveOutlined } from '@ant-design/icons';\nimport { Button, ButtonProps, Space } from 'antd';\n\nexport interface DrawerOperationProps {\n loading?: boolean;\n okText?: string;\n cancelText?: string;\n onOk?: () => void;\n onCancel?: () => void;\n hideOkBtn?: boolean;\n okButtonProps?: Omit<ButtonProps, 'onClick' | 'loading' | 'className'>;\n cancelButtonProps?: Omit<ButtonProps, 'onClick' | 'loading' | 'className'>;\n}\n\nexport const DrawerOperation = (props: DrawerOperationProps) => {\n return (\n <div className=\"fixed-bottom-block\">\n <Space size=\"middle\">\n <Button {...props.cancelButtonProps} className=\"cancel-btn\" onClick={props.onCancel}>\n {props.cancelText || '取消'}\n </Button>\n {props.hideOkBtn != true && (\n <Button\n type=\"primary\"\n icon={<SaveOutlined />}\n {...props.okButtonProps}\n className=\"ok-btn\"\n onClick={props.onOk}\n loading={props.loading}\n >\n {props.okText || '提交'}\n </Button>\n )}\n </Space>\n </div>\n );\n};\n","import { classNames } from '@dimjs/utils';\nimport { Drawer, DrawerProps } from 'antd';\nimport { FC, Fragment } from 'react';\nimport { useEffectCustom } from '../hooks';\nimport { DrawerOperation, DrawerOperationProps } from './drawer-operation';\nimport './style.less';\n\ntype DrawerWrapperStaticMethods = {\n Content: typeof DrawerWrapperContent;\n Footer: typeof DrawerWrapperFooter;\n};\n\nexport type DrawerWrapperProps = {\n className?: string;\n /**\n * 整个drawer页面级的spinning <Page loading />\n */\n pageLoading?: boolean;\n} & Omit<DrawerProps, 'footer'>;\n\nconst PageLoader = () => {\n return (\n <div className=\"drawer-wrapper-loader\">\n <div className=\"loader-wrapper\">\n <div className=\"loader-inner\" />\n <div className=\"loader-text\">LOADING</div>\n </div>\n </div>\n );\n};\n\nconst DrawerWrapperContent: FC<{ operationProps?: DrawerOperationProps }> = (props) => {\n return (\n <Fragment>\n <div className=\"drawer-wrapper-content\">{props.children}</div>\n {props.operationProps ? (\n <DrawerWrapperFooter>\n <DrawerOperation {...props.operationProps} />\n </DrawerWrapperFooter>\n ) : null}\n </Fragment>\n );\n};\n\nconst DrawerWrapperFooter = (props) => {\n return <div className=\"drawer-wrapper-footer\">{props.children}</div>;\n};\n\n/**\n * 弹窗机制\n * ```\n * 1. 默认 destroyOnClose = true\n * 2. 默认 forceRender = false\n * ```\n */\nexport const DrawerWrapper: FC<DrawerWrapperProps> & DrawerWrapperStaticMethods = (props) => {\n const { pageLoading, className, width = 600, children, ...otherProps } = props;\n\n useEffectCustom(() => {\n if (props['operationProps']) {\n throw new Error('DrawerWrapper组件升级,参数operationProps用法变更,请及时更新');\n }\n }, []);\n\n return (\n <Drawer\n className={classNames('drawer-wrapper', className)}\n keyboard={false}\n forceRender={false}\n destroyOnClose={true}\n width={'80%'}\n contentWrapperStyle={{ maxWidth: width }}\n size=\"default\"\n {...otherProps}\n footer={null}\n >\n {pageLoading && <PageLoader />}\n {children}\n </Drawer>\n );\n};\n\nDrawerWrapper.Content = DrawerWrapperContent;\nDrawerWrapper.Footer = DrawerWrapperFooter;\n","import { API, ModelType } from '@dimjs/model';\nimport { Model } from '@dimjs/model-react';\nimport { DrawerActionsParamType, DrawerModel, DrawerStateType } from './drawer.model';\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nconst drawerModels: Record<string, API<ModelType<DrawerStateType, DrawerActionsParamType, any>>> = {};\n\n/**\n * drawer弹窗模型\n * @param key 唯一值必传\n * @returns\n *\n * ```\n * 使用方式\n * const [drawerState, drawerActions] = createDrawerWrapperModel('key值').useStore();\n * ```\n */\nexport const createDrawerWrapperModel = (key: string) => {\n if (!drawerModels[key]) {\n drawerModels[key] = Model(DrawerModel);\n }\n return drawerModels[key];\n};\n\nexport * from './drawer-wrapper';\n","import { FieldSingleConfig } from './type';\n\nexport const getEditable = (editable: FieldSingleConfig['editable'], tableRowIndex: number) => {\n return typeof editable === 'boolean' ? editable : editable?.({ tableRowIndex });\n};\n","import { isArray } from '@dimjs/lang';\nimport { classNames } from '@dimjs/utils';\nimport { LabelValueItem } from '@flatbiz/utils';\nimport { Checkbox, Form, Tag } from 'antd';\nimport { useMemo } from 'react';\nimport { EditableCheckboxGroupConfig, EditableFormItemProps } from '../type';\n\ntype CheckboxGroupFormItemContent = Omit<EditableFormItemProps, 'formItemProps'> & {\n value?: Array<string | number>;\n onChange?: (value: any) => void;\n};\n\nconst CheckboxGroupFormItemContent = (props: CheckboxGroupFormItemContent) => {\n const { editableConfig, editable, render } = props.fieldConfig;\n const editableComptProps = (editableConfig as EditableCheckboxGroupConfig).editableComptProps;\n\n const viewLabelList = useMemo(() => {\n if (editable) return [];\n const value = isArray(props.value) ? props.value : ([] as any[]);\n const options = (editableComptProps.options || []) as LabelValueItem[];\n if (!isArray(options) || options.length === 0) {\n return value.map((item) => ({ label: item, value: item }));\n }\n const returnList = [] as LabelValueItem[];\n value.forEach((item) => {\n const target = options.find((temp) => temp.value === item);\n returnList.push(target ? target : { label: item, value: item });\n });\n return returnList;\n }, [editable, editableComptProps.options, props.value]);\n\n if (editable) {\n return <Checkbox.Group {...editableComptProps} value={props.value} onChange={props.onChange} />;\n }\n return (\n <span className=\"editable-checkbox-group-view\">\n {render\n ? render(props.value)\n : viewLabelList.map((tag, index) => (\n <Tag key={index} color=\"#1890ff\">\n {tag.label}\n </Tag>\n ))}\n </span>\n );\n};\n\nexport const CheckboxGroupFormItem = (props: EditableFormItemProps) => {\n const { formItemProps } = props.fieldConfig;\n\n return (\n <Form.Item\n {...formItemProps}\n name={props.name}\n className={classNames('editable-checkbox-group-form-item', formItemProps?.className)}\n >\n <CheckboxGroupFormItemContent {...props} />\n </Form.Item>\n );\n};\n","import { classNames } from '@dimjs/utils';\nimport { Form } from 'antd';\nimport { DatePickerWrapper } from '../../date-picker-wrapper';\nimport { EditableDatePickerWrapperConfig, EditableFormItemProps } from '../type';\n\nexport const DatePickerWrapperFormItem = (props: EditableFormItemProps) => {\n const { formItemProps, editableConfig } = props.fieldConfig;\n return (\n <Form.Item\n {...formItemProps}\n name={props.name}\n className={classNames('editable-date-picker-wraper-form-item', formItemProps?.className)}\n >\n <DatePickerWrapper {...(editableConfig as EditableDatePickerWrapperConfig).editableComptProps} />\n </Form.Item>\n );\n};\n","import { isArray } from '@dimjs/lang';\nimport { classNames } from '@dimjs/utils';\nimport { Form } from 'antd';\nimport { useMemo } from 'react';\nimport { DateRangePickerWrapper } from '../../date-range-picker-wrapper';\nimport { EditableDateRangePickerWrapperConfig, EditableFormItemProps } from '../type';\n\ntype FormItemContentProps = Omit<EditableFormItemProps, 'formItemProps'> & {\n value?: [string, string];\n onChange?: (value?: [string, string]) => void;\n};\n\nconst FormItemContent = (props: FormItemContentProps) => {\n const { editableConfig, editable, render } = props.fieldConfig;\n const editableComptProps = (editableConfig as EditableDateRangePickerWrapperConfig).editableComptProps;\n\n const viewLabel = useMemo(() => {\n const value = isArray(props.value) ? props.value : ([] as any[]);\n if (editable) return undefined;\n return value.join('~');\n }, [editable, props.value]);\n\n if (editable) {\n return <DateRangePickerWrapper {...editableComptProps} value={props.value} onChange={props.onChange} />;\n }\n return <span className=\"editable-date-range-picker-view\">{render ? render(props.value) : viewLabel}</span>;\n};\n\nexport const DateRangePickerWrapperFormItem = (props: EditableFormItemProps) => {\n const { formItemProps } = props.fieldConfig;\n return (\n <Form.Item\n {...formItemProps}\n name={props.name}\n className={classNames('editable-date-range-picker-wraper-form-item', formItemProps?.className)}\n >\n <FormItemContent {...props} />\n </Form.Item>\n );\n};\n","import { Form, Input } from 'antd';\nimport { EditableFormItemProps, EditableInputConfig } from '../type';\n\nexport const InputFormItem = (props: EditableFormItemProps) => {\n const { formItemProps, editableConfig } = props.fieldConfig;\n return (\n <Form.Item {...formItemProps} name={props.name}>\n <Input {...(editableConfig as EditableInputConfig).editableComptProps} />\n </Form.Item>\n );\n};\n","import { classNames } from '@dimjs/utils';\nimport { Form, InputNumber } from 'antd';\nimport { EditableFormItemProps, EditableInputNumberConfig } from '../type';\n\nexport const InputNumberFormItem = (props: EditableFormItemProps) => {\n const { formItemProps, editableConfig } = props.fieldConfig;\n return (\n <Form.Item\n {...formItemProps}\n name={props.name}\n className={classNames('editable-input-number-form-item', formItemProps?.className)}\n >\n <InputNumber {...(editableConfig as EditableInputNumberConfig).editableComptProps} />\n </Form.Item>\n );\n};\n","import { isArray } from '@dimjs/lang';\nimport { classNames } from '@dimjs/utils';\nimport { LabelValueItem } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { Form, Radio, Tag } from 'antd';\nimport { useMemo } from 'react';\nimport { EditableFormItemProps, EditableRadioGroupConfig } from '../type';\n\ntype RadioGroupFormItemContent = Omit<EditableFormItemProps, 'formItemProps'> & {\n value?: string | number;\n onChange?: (value: string | number) => void;\n};\n\nconst RadioGroupFormItemContent = (props: RadioGroupFormItemContent) => {\n const { editableConfig, editable, render } = props.fieldConfig;\n const editableComptProps = (editableConfig as EditableRadioGroupConfig).editableComptProps;\n\n const viewLabel = useMemo(() => {\n if (editable) return [];\n const value = props.value;\n const options = (editableComptProps.options || []) as LabelValueItem<string | number>[];\n if (!isArray(options) || options.length === 0) {\n return value;\n }\n const target = options.find((item) => item.value === value);\n return target?.label || value;\n }, [editable, editableComptProps.options, props.value]);\n\n const onChange = hooks.useCallbackRef((e) => {\n props.onChange?.(e.target.value as string | number);\n });\n\n if (editable) {\n return <Radio.Group {...editableComptProps} value={props.value} onChange={onChange} />;\n }\n return (\n <span className=\"editable-radio-group-view\">\n {render ? render(props.value) : viewLabel ? <Tag color=\"#1890ff\">{viewLabel}</Tag> : null}\n </span>\n );\n};\n\nexport const RadioGroupFormItem = (props: EditableFormItemProps) => {\n const { formItemProps } = props.fieldConfig;\n\n return (\n <Form.Item\n {...formItemProps}\n name={props.name}\n className={classNames('editable-radio-group-form-item', formItemProps?.className)}\n >\n <RadioGroupFormItemContent {...props} />\n </Form.Item>\n );\n};\n","import { API, ModelType } from '@dimjs/model';\nimport { Model } from '@dimjs/model-react';\nimport { LabelValueItem } from '@flatbiz/utils';\n\nexport type ModelState = {\n selectorList: LabelValueItem[];\n queryIsEmpty: boolean;\n requestStatus: 'init' | 'request-pre' | 'request-success' | 'request-error';\n};\n\ntype ModelActionParams = {\n setSelectBoxList: ModelState['selectorList'];\n resetSelectBoxList: void;\n changeRequestStatus: ModelState['requestStatus'];\n};\n\nconst defaultState: ModelState = {\n selectorList: [],\n queryIsEmpty: false,\n requestStatus: 'init',\n};\n\nconst _SelectorWrapperModel: ModelType<ModelState, ModelActionParams> = {\n actions: {\n setSelectBoxList: (params) => {\n return (state) => {\n state.selectorList = params || [];\n state.requestStatus = 'request-success';\n };\n },\n resetSelectBoxList: () => {\n return (state) => {\n state.selectorList = [];\n };\n },\n changeRequestStatus: (params) => {\n return (state) => {\n state.requestStatus = params;\n };\n },\n },\n state: defaultState,\n};\n\nconst selectorWrapperModels: Record<string, API<ModelType<ModelState, ModelActionParams, any>>> = {};\n\n/**\n * ```\n * 使用方式\n * const [state, actions] = selectorWrapperModel('key值').useStore();\n * ```\n */\nexport const selectorWrapperModel = (key: string) => {\n if (!selectorWrapperModels[key]) {\n selectorWrapperModels[key] = Model(_SelectorWrapperModel);\n }\n return selectorWrapperModels[key];\n};\n","import { RedoOutlined } from '@ant-design/icons';\nimport { extend } from '@dimjs/utils';\nimport { useEffectCustom } from '@flatbiz/antd';\nimport {\n arrayField2LabelValue,\n isUndefinedOrNull,\n LabelValueItem,\n TPlainObject,\n valueIsEqual,\n} from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { Button, Empty, message, Select, SelectProps } from 'antd';\nimport { DependencyList, forwardRef, useImperativeHandle, useMemo, useRef, useState } from 'react';\nimport { ModelState, selectorWrapperModel } from './model';\n\ntype SelectorServiceConfig = {\n params?: TPlainObject;\n requiredParamsKeys?: string[];\n onRequest?: (params?: any) => any;\n /**\n * 响应数据适配器\n */\n onRequestResultAdapter?: (respData: any) => TPlainObject[];\n};\n\nexport type SelectorWrapperProps = Omit<\n SelectProps,\n 'filterOption' | 'onSearch' | 'loading' | 'notFoundContent' | 'options' | 'fieldNames'\n> & {\n // 模型唯一值\n modelKey: string;\n fieldNames?: { label: string; value: string };\n /**\n * useEffect依赖性数组\n */\n effectDependencyList?: DependencyList;\n /**\n * 请求服务需求的数据,当设置`selectorList`后无效果\n */\n serviceConfig?: SelectorServiceConfig;\n /**\n * 同步设置选择器选项列表\n * ```\n * 1. 当设置selectorList后,serviceConfig、operateType=search、onSelectorListChange将失效\n * 2. 不支持异步数据,异步使用serviceConfig方式\n * 3. 如果配置fieldNames,会转换后使用\n * ```\n */\n selectorList?: TPlainObject[];\n /**\n * 通过服务获取数据后回调,当设置`selectorList`后无效果\n */\n onSelectorListChange?: (dataList: LabelValueItem[]) => void;\n /**\n * 添加全部选项\n * ```\n * 1. showAllOption = true,添加默认全部选项(value值为空字符串)\n * 2. 可自定义全部选项\n * ```\n */\n showAllOption?: true | JSX.Element;\n /**\n * 输入操作类型,默认值:filter\n * ```\n * 1. search:根据输入项去服务端查询\n * 2. filter:初始化已查询数据,根据输入内容筛选\n * 3. 在设置`selectorList`后,operateType=search将失效\n * ```\n */\n operateType?: 'search' | 'filter';\n // 搜索调接口字段名称,默认值:keyword\n searchFieldName?: string;\n};\n\nexport type SelectorWrapperRefApi = {\n onClearSelectorList: () => void;\n getSelectorList: () => LabelValueItem<string | number>[];\n};\n\n/**\n * 选择器包装组件\n * @param props\n * @returns\n * ```\n * 1. modelKey的配置是为了缓存数据;\n * 1.1: 当有effectDependencyList依赖项时,依赖项的发生变化后,每次都会去调用接口获取数据\n * 1.2: 当无effectDependencyList依赖项时,第一次调用接口成功后会有标记,下次访问存在标记,就不在调用接口,使用缓存数据;如果想强制刷新数据,可通过随便配置依赖项完成\n * 2. selectorList属性\n * 2.1 当设置selectorList属性后,serviceConfig、operateType=search、onSelectorListChange将失效\n * 2.2 不支持异步数据,异步使用serviceConfig方式\n * 3. operateType=search状态下,回填数据查询接口时,会在接口中默认添加id字段(id的值为回填的值)\n * ```\n */\nexport const SelectorWrapper = forwardRef<SelectorWrapperRefApi, SelectorWrapperProps>((props, ref) => {\n const {\n serviceConfig,\n showAllOption,\n effectDependencyList,\n onSelectorListChange,\n operateType,\n searchFieldName,\n selectorList,\n modelKey,\n fieldNames,\n ...otherProps\n } = props;\n\n const isSearch = operateType === 'search' && selectorList === undefined;\n const newServiceConfig = serviceConfig || {};\n const newEffectDependencyList = effectDependencyList || [];\n const changeOperateValueRef = useRef<string | number>();\n const [loading, setLoading] = useState(false);\n const [state, actions] = selectorWrapperModel(modelKey).useStore();\n\n const valueIsEmpty = (value: string | number) => {\n return value === '' || isUndefinedOrNull(value);\n };\n\n const serviceRespDataTranslation = (respData) => {\n const respDataList = newServiceConfig.onRequestResultAdapter\n ? newServiceConfig.onRequestResultAdapter(respData as unknown as TPlainObject)\n : respData;\n return arrayField2LabelValue(respDataList || [], fieldNames);\n };\n\n const startDataSourceRequest = hooks.useCallbackRef(\n async (inputValue?: string, searchId?: string | number) => {\n try {\n if (!newServiceConfig.onRequest) {\n throw new Error('onRequest 调用接口服务不能为空');\n }\n const requiredParamsKeys = newServiceConfig.requiredParamsKeys;\n const params = extend({}, newServiceConfig.params);\n if (requiredParamsKeys) {\n const isEmpty = requiredParamsKeys.find((key) => {\n return valueIsEmpty(params[key] as string | number);\n });\n if (isEmpty) {\n console.warn(`SelectorWrapper组件:参数:${requiredParamsKeys.join('、')}不能为空`);\n return;\n }\n }\n try {\n setLoading(true);\n void actions.changeRequestStatus('request-pre');\n if ((!isUndefinedOrNull(inputValue) || !isUndefinedOrNull(searchId)) && isSearch) {\n const keyword = searchFieldName || 'keyword';\n params[keyword] = inputValue;\n params['id'] = searchId;\n }\n const respData = await newServiceConfig.onRequest?.(params);\n const respDataTranslation = serviceRespDataTranslation(respData);\n setLoading(false);\n onSelectorListChange?.(respDataTranslation);\n void actions.setSelectBoxList(respDataTranslation);\n } catch (error) {\n console.error(error);\n setLoading(false);\n void actions.changeRequestStatus('request-error');\n void message.error(error.message || '获取数据异常');\n }\n } catch (error) {\n setLoading(false);\n void message.error((error.message as string) || '数据查询异常...');\n }\n },\n );\n\n useEffectCustom(() => {\n if (selectorList) {\n void actions.setSelectBoxList(arrayField2LabelValue(selectorList || [], fieldNames));\n return;\n }\n if (isSearch) return;\n // 当无依赖项时,如果存在缓存数据,就不在调用接口\n const realTimeState = selectorWrapperModel(modelKey).getState();\n\n if (\n newEffectDependencyList.length > 0 ||\n valueIsEqual(realTimeState.requestStatus, ['request-error', 'init'])\n ) {\n void startDataSourceRequest();\n }\n }, newEffectDependencyList);\n\n useEffectCustom(() => {\n if (isSearch) {\n if (valueIsEmpty(props.value as string | number)) {\n onSelectorListChange?.([]);\n void actions.resetSelectBoxList();\n } else {\n // 判断是否由外部回填value数据\n if (props.value !== changeOperateValueRef.current) {\n void startDataSourceRequest(undefined, props.value as string | number);\n }\n }\n }\n }, newEffectDependencyList.concat([props.value]));\n\n useImperativeHandle(ref, () => {\n return {\n onClearSelectorList: () => {\n void actions.resetSelectBoxList();\n },\n getSelectorList: () => {\n return state.selectorList;\n },\n };\n });\n\n const filterOption = hooks.useCallbackRef((input: string, option) => {\n return (option?.children as unknown as string).toLowerCase().indexOf(input.toLowerCase()) >= 0;\n });\n\n const onSearch = hooks.useDebounceCallback((value: string) => {\n if (value) {\n void startDataSourceRequest(value);\n } else {\n void actions.resetSelectBoxList();\n }\n }, 300);\n\n const onChange = hooks.useCallbackRef((value: string | number, ...otherParams) => {\n changeOperateValueRef.current = value;\n props.onChange?.(value, otherParams);\n });\n const onAgainRequest = hooks.useCallbackRef(() => {\n void startDataSourceRequest();\n });\n\n const selectOptionsAll = <Select.Option value=\"\">全部</Select.Option>;\n return (\n <Select\n showSearch={true}\n allowClear={true}\n {...otherProps}\n value={isUndefinedOrNull(props.value) ? undefined : props.value}\n notFoundContent={\n <NotFoundContent requestStatus={state.requestStatus} onAgainRequest={onAgainRequest} />\n }\n loading={loading}\n onSearch={isSearch ? onSearch : undefined}\n filterOption={isSearch ? false : filterOption}\n onChange={onChange}\n fieldNames={undefined}\n suffixIcon={\n state.requestStatus === 'request-error' ? (\n <RedoOutlined spin={loading} onClick={onAgainRequest} />\n ) : undefined\n }\n >\n {showAllOption === true ? selectOptionsAll : showAllOption}\n {state.selectorList.map((item) => {\n return (\n <Select.Option value={item.value} label={item.label} key={item.value}>\n {item.label}\n </Select.Option>\n );\n })}\n </Select>\n );\n});\n\nconst NotFoundContent = (props: {\n requestStatus?: ModelState['requestStatus'];\n onAgainRequest: () => void;\n}) => {\n const description = useMemo(() => {\n if (props.requestStatus === 'request-error') {\n return '数据查询异常';\n } else if (props.requestStatus === 'request-success') {\n return '暂无数据';\n }\n return '数据查询中';\n }, [props.requestStatus]);\n return (\n <Empty\n image={Empty.PRESENTED_IMAGE_SIMPLE}\n description={description}\n className={'tree-selector-wrapper-empty'}\n >\n {props.requestStatus === 'request-error' && (\n <Button type=\"primary\" onClick={props.onAgainRequest}>\n 重新获取数据\n </Button>\n )}\n </Empty>\n );\n};\n","import { isArray } from '@dimjs/lang';\nimport { classNames } from '@dimjs/utils';\nimport { arrayField2LabelValue, LabelValueItem } from '@flatbiz/utils';\nimport { Form, Tag } from 'antd';\nimport { useMemo } from 'react';\nimport { SelectorWrapper } from '../../selector-wrapper';\nimport { EditableFormItemProps, EditableSelectWrapperConfig } from '../type';\n\ntype FormItemContentProps = Omit<EditableFormItemProps, 'formItemProps'> & {\n value?: string | number | Array<string | number>;\n onChange?: (value: any) => void;\n};\n\nconst FormItemContent = (props: FormItemContentProps) => {\n const { editableConfig, editable, render } = props.fieldConfig;\n const editableComptProps = (editableConfig as EditableSelectWrapperConfig).editableComptProps;\n\n const viewLabelList = useMemo(() => {\n const value = isArray(props.value) ? props.value : ([] as any[]);\n if (editable) return [];\n const selectorList = arrayField2LabelValue(\n editableComptProps.selectorList || [],\n editableComptProps.fieldNames,\n );\n if (selectorList.length === 0) {\n return value.map((item) => ({ label: item, value: item }));\n }\n const returnList = [] as LabelValueItem[];\n value.forEach((item) => {\n const target = selectorList.find((temp) => temp.value === item);\n returnList.push(target ? target : { label: item, value: item });\n });\n return returnList;\n }, [editable, editableComptProps.fieldNames, editableComptProps.selectorList, props.value]);\n\n if (editable) {\n return <SelectorWrapper {...editableComptProps} value={props.value} onChange={props.onChange} />;\n }\n return (\n <span className=\"editable-selector-view\">\n {render\n ? render(props.value)\n : viewLabelList.map((tag, index) => (\n <Tag key={index} color=\"#1890ff\">\n {tag.label}\n </Tag>\n ))}\n </span>\n );\n};\n\nexport const SelectorWrapperFormItem = (props: EditableFormItemProps) => {\n const { formItemProps } = props.fieldConfig;\n\n return (\n <Form.Item\n {...formItemProps}\n name={props.name}\n className={classNames('editable-selector-wrapper-form-item', formItemProps?.className)}\n >\n <FormItemContent {...props} />\n </Form.Item>\n );\n};\n","import { isBoolean, isNumber, isString } from '@dimjs/lang';\nimport { Form } from 'antd';\nimport { useMemo } from 'react';\nimport { EditableFormItemProps, FieldSingleConfig } from '../type';\n\nconst FormItemTextContent = (props: {\n value?: string | number;\n name: EditableFormItemProps['name'];\n fieldConfig?: FieldSingleConfig;\n}) => {\n const value = useMemo(() => {\n if (props.fieldConfig?.render) return undefined;\n const isBaseData =\n isString(props.value) || isNumber(props.value) || isBoolean(props.value) || !props.value;\n if (!isBaseData) {\n console.warn(`Form.List name:【${props.name}】数据【${JSON.stringify(props.value)}】不能渲染在页面中`);\n }\n return isBaseData ? props.value : undefined;\n }, [props.fieldConfig?.render, props.name, props.value]);\n\n return <span className=\"editable-text-view\">{props.fieldConfig?.render?.(props.value) || value}</span>;\n};\n\nexport const TextFormItem = (props: { name: Array<number | string>; fieldConfig?: FieldSingleConfig }) => {\n return (\n <Form.Item noStyle name={props.name}>\n <FormItemTextContent name={props.name} fieldConfig={props.fieldConfig} />\n </Form.Item>\n );\n};\n","import { Form, Input } from 'antd';\nimport { EditableFormItemProps, EditableTextareaConfig } from '../type';\n\nexport const TextAreaFormItem = (props: EditableFormItemProps) => {\n const { formItemProps, editableConfig } = props.fieldConfig;\n return (\n <Form.Item {...formItemProps} name={props.name}>\n <Input.TextArea {...(editableConfig as EditableTextareaConfig).editableComptProps} />\n </Form.Item>\n );\n};\n","import { PlusOutlined } from '@ant-design/icons';\nimport { classNames, extend } from '@dimjs/utils';\nimport { TPlainObject } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { Button, message, Upload, UploadProps } from 'antd';\nimport { UploadChangeParam } from 'antd/lib/upload';\nimport { UploadFile, UploadListType } from 'antd/lib/upload/interface';\nimport { FC, Fragment, useState } from 'react';\nimport { useEffectCustom } from '../hooks';\nimport './style.less';\n\nexport type UploadWrapperFileItem = {\n uid: string;\n name: string;\n url?: string;\n};\n\nexport type UploadWrapperProps<T extends TPlainObject = TPlainObject> = {\n value?: T[];\n onChange?: (value?: T[]) => void;\n onUploadError?: (message?: string) => void;\n onUploadChange?: (info: UploadChangeParam<UploadFile>) => void;\n /**\n * 属性映射\n */\n fieldNames?: {\n uid?: string;\n name?: string;\n url?: string;\n };\n /**\n * 接口响应数据适配器,如果配置了fieldNames,适配器返回值会再进过fieldNames转换\n */\n onRequestResultAdapter?: (respData: any) => TPlainObject;\n} & Omit<UploadProps, 'onChange' | 'fileList'>;\n\n/**\n * 文件上传\n * ```\n * 1. 可通过配置children替换默认上传触发布局\n * 2. 接口返回结构:\n * formData上传接口返回值\n * {\n * code: '0000',\n * data: {\n * uid: '唯一值,可使用fileKey值'\n * name: '文件名称'\n * url: '预览地址'\n * }\n * }\n * 3. 如果接口返回的不是上面的字段名称,可通过fieldNames配置接口返回字段名称映射\n *\n * 4. 最佳使用方式,与Form结合使用\n * <Form.Item name=\"attachmentList\" label=\"附件\">\n * <UploadWrapper action={uploadUrl} />\n * </Form.Item>\n * ```\n *\n */\nexport const UploadWrapper: FC<UploadWrapperProps> = (props) => {\n const { onChange, onUploadError, value, ...otherProps } = props;\n const [uploadList, setUploadList] = useState<UploadWrapperFileItem[]>();\n const fieldNames = extend(\n {\n uid: 'uid',\n name: 'name',\n url: 'url',\n },\n props.fieldNames,\n ) as Required<UploadWrapperFileItem>;\n\n useEffectCustom(() => {\n setUploadList(\n value?.map((item) => {\n return {\n uid: item[fieldNames.uid],\n name: item[fieldNames.name],\n url: item[fieldNames.url],\n };\n }),\n );\n }, [fieldNames.name, fieldNames.uid, fieldNames.url, value]);\n\n const onUploadChange = hooks.useCallbackRef((info) => {\n const fileList = info.fileList as TPlainObject[];\n if (info.file.status === 'done') {\n const respData = info.file.response;\n if (respData.code === '0000') {\n const result = (\n props.onRequestResultAdapter ? props.onRequestResultAdapter(respData.data) : respData.data\n ) as TPlainObject;\n result[fieldNames.uid] = result[fieldNames.uid] || info.file.uid;\n result[fieldNames.name] = result[fieldNames.name] || info.file.name;\n if (props.maxCount === 1) {\n onChange?.([result]);\n } else {\n onChange?.((value || []).concat(result));\n }\n } else {\n if (onUploadError) {\n onUploadError(respData.message as string);\n } else {\n void message.error((respData.message as string) || '上传操作失败...');\n }\n fileList[fileList.length - 1] = {\n ...fileList[fileList.length - 1],\n status: 'error',\n };\n }\n } else if (info.file.status === 'removed') {\n const uid = info.file.uid;\n const targetList = value !== undefined ? [...value] : [];\n const targetIndex = targetList.findIndex((item) => {\n const tempUid = item[fieldNames.uid];\n return tempUid === uid;\n });\n if (targetIndex >= 0) {\n targetList.splice(targetIndex, 1);\n }\n onChange?.(targetList);\n } else if (info.file.status === 'error') {\n if (onUploadError) {\n onUploadError();\n } else {\n void message.error('上传操作失败...');\n }\n }\n // https://github.com/ant-design/ant-design/issues/2423\n setUploadList([...fileList] as UploadWrapperFileItem[]);\n props.onUploadChange?.(info);\n });\n\n return (\n <Upload\n {...otherProps}\n onChange={onUploadChange}\n fileList={uploadList}\n className={classNames('v-upload-wrapper', otherProps.className)}\n >\n {otherProps.disabled ? null : (\n <UploadTrigger listType={otherProps.listType}>{props.children}</UploadTrigger>\n )}\n </Upload>\n );\n};\n\nconst UploadTrigger: FC<{ listType?: UploadListType }> = (props) => {\n if (props.children) return <Fragment>{props.children}</Fragment>;\n if (props.listType === 'picture-card') {\n return (\n <div>\n <PlusOutlined />\n <div style={{ marginTop: 8 }}>上传图片</div>\n </div>\n );\n }\n if (props.listType === 'picture') {\n return (\n <Button type=\"primary\" ghost>\n 选择图片上传\n </Button>\n );\n }\n return (\n <Button type=\"primary\" ghost>\n 选择文件上传\n </Button>\n );\n};\n","import { classNames } from '@dimjs/utils';\nimport { Form } from 'antd';\nimport { UploadWrapper } from '../../upload-wrapper';\nimport { EditableFileUploadConfig, EditableFormItemProps } from '../type';\n\nconst UploadWrapperFormItemContent = (\n props: EditableFormItemProps & { value?: any; onChange?: (value?: any) => void },\n) => {\n const { editableConfig, render, editable } = props.fieldConfig;\n const { children, ...otherProps } = (editableConfig as EditableFileUploadConfig).editableComptProps;\n if (editable) {\n return (\n <UploadWrapper listType=\"text\" {...otherProps} value={props.value} onChange={props.onChange}>\n {children}\n </UploadWrapper>\n );\n }\n return (\n <div className=\"upload-wrapper-selector-view\">\n {render ? (\n render(props.value)\n ) : (\n <UploadWrapper listType=\"text\" {...otherProps} value={props.value} disabled={true} />\n )}\n </div>\n );\n};\n\nexport const UploadWrapperFormItem = (props: EditableFormItemProps) => {\n const { formItemProps } = props.fieldConfig;\n return (\n <Form.Item\n {...formItemProps}\n name={props.name}\n className={classNames('editable-upload-wrapper-form-item', formItemProps?.className)}\n >\n <UploadWrapperFormItemContent {...props} />\n </Form.Item>\n );\n};\n","import { extend } from '@dimjs/utils';\nimport { FieldSingleConfig } from '../type';\nimport { getEditable } from '../utils';\nimport { CheckboxGroupFormItem } from './checkbox-group';\nimport { DatePickerWrapperFormItem } from './date-picker-wrapper';\nimport { DateRangePickerWrapperFormItem } from './date-range-picker-wrapper';\nimport { InputFormItem } from './input';\nimport { InputNumberFormItem } from './input-number';\nimport { RadioGroupFormItem } from './radio-group';\nimport { SelectorWrapperFormItem } from './selector-wrapper';\nimport { TextFormItem } from './text';\nimport { TextAreaFormItem } from './textarea';\nimport { UploadWrapperFormItem } from './upload-wrapper';\n\nexport type FormItemAdapterProps = {\n name: Array<number | string>;\n completeName: Array<number | string>;\n fieldConfig: FieldSingleConfig;\n tableRowIndex: number;\n};\n\nexport const FormItemAdapter = (props: FormItemAdapterProps) => {\n const { editableConfig, editable } = props.fieldConfig;\n const newEditable = getEditable(editable, props.tableRowIndex);\n const fieldConfig = extend({}, props.fieldConfig, { editable: newEditable });\n\n const commomProps = {\n name: props.name,\n fieldConfig,\n };\n\n if (editableConfig?.type === 'input' && newEditable) {\n return <InputFormItem {...commomProps} />;\n } else if (editableConfig?.type === 'inputNumber' && newEditable) {\n return <InputNumberFormItem {...commomProps} />;\n } else if (editableConfig?.type === 'textArea' && newEditable) {\n return <TextAreaFormItem {...commomProps} />;\n } else if (editableConfig?.type === 'datePickerWrapper' && newEditable) {\n return <DatePickerWrapperFormItem {...commomProps} />;\n } else if (editableConfig?.type === 'dateRangePickerWrapper') {\n return <DateRangePickerWrapperFormItem {...commomProps} />;\n } else if (editableConfig?.type === 'selectorWrapper') {\n return <SelectorWrapperFormItem {...commomProps} />;\n } else if (editableConfig?.type === 'checkboxGroup') {\n return <CheckboxGroupFormItem {...commomProps} />;\n } else if (editableConfig?.type === 'radioGroup') {\n return <RadioGroupFormItem {...commomProps} />;\n } else if (editableConfig?.type === 'uploadWrapper') {\n return <UploadWrapperFormItem {...commomProps} />;\n } else if (editableConfig?.type === 'custom') {\n return editableConfig.editableComptProps({\n name: props.name,\n editable: newEditable,\n completeName: props.completeName,\n });\n }\n return <TextFormItem {...commomProps} />;\n};\n","import { DeleteOutlined } from '@ant-design/icons';\nimport { classNames } from '@dimjs/utils';\nimport { Button, Form, Space } from 'antd';\nimport { FormItemAdapter } from '../form-item';\nimport { FormListConfig } from '../type';\nimport { getEditable } from '../utils';\n\nexport type FormListProps = {\n name: Array<number | string>;\n formListConfig: FormListConfig;\n tableRowIndex: number;\n completeName: (string | number)[];\n};\n\nexport const FormList = (props: FormListProps) => {\n const from = Form.useFormInstance();\n const {\n onFormListBeforeRender,\n editableConfigList,\n onFormListAfterRender,\n onFormListItemBeforeRender,\n onFormListItemAfterRender,\n deleteOperateRender,\n } = props.formListConfig;\n return (\n <Form.List name={props.name}>\n {(fields, { add, remove }) => (\n <>\n {onFormListBeforeRender\n ? onFormListBeforeRender({\n tableRowIndex: props.tableRowIndex,\n add,\n get value() {\n return from.getFieldValue(props.completeName);\n },\n })\n : null}\n {fields.map((fieldChild, index) => {\n const hasEditable = editableConfigList.find((item) =>\n getEditable(item.editable, props.tableRowIndex),\n );\n const className = classNames(\n 'editable-inner-formlist-item',\n `editable-inner-formlist-item-${props.name[1]}`,\n { 'editable-inner-formlist-item_preview': !hasEditable },\n );\n return (\n <div key={index} className={className}>\n {onFormListItemBeforeRender\n ? onFormListItemBeforeRender({\n add,\n remove: () => {\n remove(index);\n },\n formListItemIndex: index,\n tableRowIndex: props.tableRowIndex,\n get value() {\n return from.getFieldValue([...props.completeName, fieldChild.name]);\n },\n })\n : null}\n <Space>\n {editableConfigList.map((fieldItem, index) => {\n return (\n <FormItemAdapter\n name={[fieldChild.name, fieldItem.fieldName]}\n fieldConfig={fieldItem}\n key={index}\n tableRowIndex={props.tableRowIndex}\n completeName={[...props.completeName, fieldChild.name]}\n />\n );\n })}\n {hasEditable ? (\n <DeleteFormListItem\n deleteOperateRender={deleteOperateRender}\n remove={() => {\n remove(index);\n }}\n index={index}\n />\n ) : null}\n </Space>\n {onFormListItemAfterRender\n ? onFormListItemAfterRender({\n add,\n formListItemIndex: index,\n tableRowIndex: props.tableRowIndex,\n remove: () => {\n remove(index);\n },\n get value() {\n return from.getFieldValue([...props.completeName, fieldChild.name]);\n },\n })\n : null}\n </div>\n );\n })}\n {onFormListAfterRender\n ? onFormListAfterRender({\n tableRowIndex: props.tableRowIndex,\n add,\n get value() {\n return from.getFieldValue(props.completeName);\n },\n })\n : null}\n </>\n )}\n </Form.List>\n );\n};\n\nconst DeleteFormListItem = (props: {\n deleteOperateRender: FormListConfig['deleteOperateRender'];\n remove: () => void;\n index: number;\n}) => {\n return (\n <Form.Item>\n {props.deleteOperateRender ? (\n props.deleteOperateRender({ remove: props.remove, formListItemIndex: props.index })\n ) : (\n <Button type=\"link\" danger icon={<DeleteOutlined />} onClick={props.remove}>\n 删除\n </Button>\n )}\n </Form.Item>\n );\n};\n","import { isArray } from '@dimjs/lang';\nimport { FormItemAdapter } from '../form-item';\nimport { TextFormItem } from '../form-item/text';\nimport { FieldSingleConfig, FormListConfig } from '../type';\nimport { FormList } from './form-list';\n\nexport type FormListItemProps = {\n name: Array<number | string>;\n fieldConfig?: FieldSingleConfig | FormListConfig;\n tableRowIndex: number;\n completeName: (string | number)[];\n};\n\nexport const FormListItem = (props: FormListItemProps) => {\n if (props.fieldConfig) {\n if (isArray(props.fieldConfig['editableConfigList'])) {\n const formListConfig = props.fieldConfig as FormListConfig;\n return (\n <FormList\n name={props.name}\n completeName={props.completeName}\n formListConfig={formListConfig}\n tableRowIndex={props.tableRowIndex}\n />\n );\n } else {\n return (\n <FormItemAdapter\n name={props.name}\n fieldConfig={props.fieldConfig as FieldSingleConfig}\n tableRowIndex={props.tableRowIndex}\n completeName={props.completeName}\n />\n );\n }\n }\n return <TextFormItem name={props.name} />;\n};\n","import { PlusOutlined } from '@ant-design/icons';\nimport { Button, Form, Table, TableProps } from 'antd';\nimport { FormListOperation, FormListProps } from 'antd/lib/form/FormList';\nimport { ColumnsType } from 'antd/lib/table';\nimport { Fragment, ReactElement, useMemo } from 'react';\nimport { FormListItem } from './form-list-item';\nimport './style.less';\nimport { EditableTableRecordType, FieldSingleConfig, FormListConfig } from './type';\n\n// export type EditableTableDataSourceItem = FormListFieldData & { operation: FormListOperation };\n\n/**\n * antd 默认render功能此处不能使用\n */\nexport type EditableTableColumn = Omit<ColumnsType['0'], 'render'> & {\n dataIndex?: string;\n fieldConfig?: FieldSingleConfig | FormListConfig;\n /**\n * 配置操作功能处理后,fieldConfig配置将失效\n * ```\n * 1. tableRowIndex:当前row的索引值\n * 1. name:当前row的form.item的name值\n * ```\n */\n operateRender?: (item: {\n tableRowIndex: number;\n name: Array<string | number>;\n operation: FormListOperation;\n }) => ReactElement;\n};\n\nexport type EditableTableProps = {\n name: string;\n /**\n * ```\n * antd table属性\n * 1. 新增cellVerticalAlign,单元格竖直方向对齐方式,设置table column onCell属性后失效\n * ```\n */\n tableProps?: Omit<TableProps<EditableTableRecordType>, 'dataSource' | 'columns' | 'rowKey'> & {\n cellVerticalAlign?: 'baseline' | 'middle' | 'top' | 'bottom';\n };\n columns: EditableTableColumn[];\n onTableBeforeRender?: (formListOperation: FormListOperation, nextRowIndex: number) => ReactElement | null;\n /**\n * 设置后,将覆盖底部`新增`按钮\n */\n onTableAfterRender?: (formListOperation: FormListOperation, nextRowIndex: number) => ReactElement | null;\n rules?: FormListProps['rules'];\n};\n\nexport const EditableTable = (props: EditableTableProps) => {\n const columns = useMemo(() => {\n if (!props.columns) return [];\n return props.columns.map((columnItem) => {\n const { fieldConfig, operateRender, ...otherColumnItem } = columnItem;\n return {\n onCell: () => {\n return {\n valign: props.tableProps?.cellVerticalAlign || 'middle',\n };\n },\n ...otherColumnItem,\n render: (_value, record) => {\n if (operateRender) {\n return (\n operateRender({\n name: [...props.name, record.name],\n tableRowIndex: record.name,\n operation: record.operation,\n }) || ''\n );\n }\n return (\n <FormListItem\n name={columnItem.dataIndex ? [record.name, columnItem.dataIndex] : [record.name]}\n completeName={\n columnItem.dataIndex\n ? [...props.name, record.name, columnItem.dataIndex]\n : [...props.name, record.name]\n }\n fieldConfig={fieldConfig}\n tableRowIndex={record.name}\n />\n );\n },\n };\n }) as ColumnsType<EditableTableRecordType>;\n }, [props.columns, props.name, props.tableProps?.cellVerticalAlign]);\n\n return (\n <div className=\"editable-table\">\n <Form.List name={props.name} rules={props.rules}>\n {(fields, formListOperation) => {\n return (\n <Fragment>\n {props.onTableBeforeRender ? props.onTableBeforeRender(formListOperation, fields.length) : null}\n <Table\n scroll={{ x: 'max-content' }}\n pagination={false}\n {...props.tableProps}\n dataSource={fields.map((item) => ({ ...item, operation: formListOperation }))}\n columns={columns}\n rowKey=\"key\"\n />\n {props.onTableAfterRender ? (\n props.onTableAfterRender(formListOperation, fields.length)\n ) : (\n <Button\n type=\"dashed\"\n onClick={() => formListOperation.add()}\n block\n icon={<PlusOutlined />}\n style={{ marginTop: 15 }}\n >\n 新增\n </Button>\n )}\n </Fragment>\n );\n }}\n </Form.List>\n </div>\n );\n};\n","import { hooks } from '@wove/react';\nimport { Button, message, Upload, UploadProps } from 'antd';\nimport { FC, useState } from 'react';\n\nexport type FileImportProps = {\n onImportFinish: (data?: any) => void;\n} & Omit<\n UploadProps,\n | 'fileList'\n | 'showUploadList'\n | 'itemRender'\n | 'listType'\n | 'multiple'\n | 'previewFile'\n | 'progress'\n | 'onChange'\n | 'onDownload'\n | 'onRemove'\n | 'onPreview'\n | 'directory'\n | 'customRequest'\n | 'defaultFileList'\n | 'iconRender'\n>;\n\n/**\n * 文件导入\n * ```\n * 默认值:\n * name: 'file',\n * accept: '.xlsx,.xls',\n * ```\n */\nexport const FileImport: FC<FileImportProps> = (props) => {\n const { onImportFinish, ...otherProps } = props;\n\n const [loading, setLoading] = useState(false);\n\n const onChange = hooks.useCallbackRef((info) => {\n if (info.file.status === 'uploading') {\n setLoading(true);\n } else if (info.file.status === 'done') {\n setLoading(false);\n const respData = info.file.response;\n if (respData.code === '0000') {\n onImportFinish(respData.data);\n } else {\n void message.error((respData.message as string) || '文件导入异常...');\n }\n }\n });\n\n return (\n <Upload showUploadList={false} maxCount={1} {...otherProps} onChange={onChange}>\n {props.children ? (\n props.children\n ) : (\n <Button type=\"primary\" ghost loading={loading}>\n 选择文件\n </Button>\n )}\n </Upload>\n );\n};\n\nFileImport.defaultProps = {\n name: 'file',\n accept: '.xlsx,.xls',\n};\n","import { isArray } from '@dimjs/lang';\nimport { classNames, extend } from '@dimjs/utils';\nimport { hooks } from '@wove/react';\nimport { Upload, UploadProps } from 'antd';\nimport { UploadChangeParam } from 'antd/lib/upload';\nimport { UploadFile } from 'antd/lib/upload/interface';\nimport { FC, useEffect, useState } from 'react';\nimport { useEffectCustom } from '../hooks';\nimport './style.less';\n\nexport type FileUploadItem = {\n fileKey: string;\n fileName: string;\n};\n\ntype AntdFileUploadItem = {\n uid: string;\n name: string;\n fileKey: string;\n};\n\nexport type FileUploadProps = {\n onChange?: (value?: FileUploadItem[]) => void;\n onUploadError?: (message?: string) => void;\n value?: FileUploadItem[];\n onPreview?: (item: FileUploadItem) => void;\n onUploadChange?: (info: UploadChangeParam<UploadFile>) => void;\n /**\n * 属性映射\n */\n fieldNames?: {\n fileKey?: string;\n fileName?: string;\n };\n} & Omit<UploadProps, 'onChange' | 'fileList' | 'onPreview'>;\n\n/**\n * 文件上传,结合Form使用最佳\n * ```\n * 接口返回结构:\n * formData上传接口必须返回fileKey值\n * {\n * code: '0000',\n * data: {\n * fileKey: '预览文件对应的fileKey'\n * }\n * }\n * 可通过fieldNames配置接口返回值属性名称映射\n * ```\n * ```\n * 最佳使用方式:\n * <Form.Item name=\"attachmentList\" label=\"附件\">\n * <FileUpload action={uploadUrl} onPreview={onPreviewFile}>\n * <Button type=\"primary\">选择文件导入</Button>\n * </FileUpload>\n * </Form.Item>\n * ```\n *\n */\nexport const FileUpload: FC<FileUploadProps> = (props) => {\n useEffectCustom(() => {\n console.error('@flatbiz/antd库【FileUpload】组件已经过期,请使用【UploadWrapper】组件替换');\n }, []);\n\n const { onChange, onUploadError, onPreview, value, ...otherProps } = props;\n const [uploadValue, setUploadValue] = useState<AntdFileUploadItem[]>([]);\n const fieldNames = extend(\n {\n fileKey: 'fileKey',\n fileName: 'fileName',\n },\n props.fieldNames,\n ) as FileUploadItem;\n\n useEffect(() => {\n if (value && isArray(value)) {\n setUploadValue(\n value.map((item) => {\n return {\n uid: item['uid'] || item[fieldNames.fileKey],\n name: item[fieldNames.fileName],\n fileKey: item[fieldNames.fileKey],\n url: item[fieldNames.fileKey],\n thumbUrl: item[fieldNames.fileKey],\n };\n }),\n );\n }\n }, [fieldNames.fileKey, fieldNames.fileName, value]);\n\n const onUploadChange = hooks.useCallbackRef((info) => {\n if (info.file.status === 'done') {\n const respData = info.file.response;\n if (respData.code === '0000') {\n const result = respData.data || {};\n const uploadItem = {\n uid: info.file.uid,\n fileName: result[fieldNames.fileName] || (info.file.name as string),\n fileKey: result[fieldNames.fileKey],\n } as FileUploadItem;\n const respValue = (value || []).concat(uploadItem);\n onChange?.(respValue as unknown as FileUploadItem[]);\n } else {\n onUploadError?.(respData.message as string);\n }\n } else if (info.file.status === 'removed') {\n const uid = info.file.uid;\n const targetList = value !== undefined ? [...value] : [];\n const targetIndex = targetList.findIndex((item) => {\n const tempUid = item['uid'] || item[fieldNames.fileKey];\n return tempUid === uid;\n });\n if (targetIndex >= 0) {\n targetList.splice(targetIndex, 1);\n }\n onChange?.(targetList);\n } else if (info.file.status === 'error') {\n onUploadError?.();\n }\n // https://github.com/ant-design/ant-design/issues/2423\n setUploadValue([...info.fileList]);\n props.onUploadChange?.(info);\n });\n\n const onUploadPreview = hooks.useCallbackRef((file) => {\n onPreview?.({\n fileKey: file[fieldNames.fileKey],\n fileName: file[fieldNames.fileName],\n });\n });\n\n return (\n <Upload\n {...otherProps}\n onChange={onUploadChange}\n onPreview={onUploadPreview}\n fileList={uploadValue}\n className={classNames('v-file-upload', otherProps.className)}\n >\n {props.children}\n </Upload>\n );\n};\n","import { isArray } from '@dimjs/lang';\nimport { classNames } from '@dimjs/utils';\nimport { isUndefinedOrNull } from '@flatbiz/utils';\nimport { cloneElement, CSSProperties, FC } from 'react';\nimport './style.less';\n\nexport type FlexLayoutProps = {\n className?: string;\n fullIndex?: number | number[];\n direction?: 'vertical' | 'horizontal';\n onClick?: () => void;\n style?: CSSProperties;\n gap?: number;\n};\n/**\n * flex布局\n * 1. direction:默认值vertical\n * 2. gap间隙距离\n * 3. fullIndex:指定children数组索引值对象flex=1\n * 4. children添加key熟悉\n * @param props\n * @returns\n */\nexport const FlexLayout: FC<FlexLayoutProps> = (props) => {\n const childrens = (isArray(props.children) ? props.children : [props.children]) as JSX.Element[];\n const direction = props.direction || 'vertical';\n const gap = props.gap ? props.gap : 0;\n const fullIndexList = !isUndefinedOrNull(props.fullIndex)\n ? isArray(props.fullIndex)\n ? props.fullIndex\n : [props.fullIndex as number]\n : [];\n return (\n <div\n className={classNames('v-flex-layout', `v-flex-${direction}`, props.className)}\n style={props.style}\n onClick={props.onClick}\n >\n {childrens.map((children, index) => {\n const childrenStyle = children.props.style || {};\n const style = fullIndexList.includes(index) ? { flex: 1, ...childrenStyle } : childrenStyle;\n if (index < childrens.length - 1 && gap > 0) {\n if (direction === 'horizontal') {\n style.marginRight = gap;\n } else {\n style.marginBottom = gap;\n }\n }\n return cloneElement(children, { style, key: index });\n })}\n </div>\n );\n};\n","import { CSSProperties, VFC } from 'react';\n\nexport type GapProps = {\n height?: number;\n className?: string;\n style?: CSSProperties;\n};\n\n/**\n * 间隙组件\n * @param props\n * @returns\n */\nexport const Gap: VFC<GapProps> = (props) => {\n return <div style={{ height: props.height, ...props.style }} className={props.className} />;\n};\n","import { classNames } from '@dimjs/utils';\nimport { Tooltip } from 'antd';\nimport { CSSProperties, VFC } from 'react';\nimport './style.less';\n\nexport type IconWrapperProps = {\n hoverTips?: string;\n icon?: React.ReactNode;\n style?: CSSProperties;\n text?: string | React.ReactElement;\n className?: string;\n size?: 'small' | 'middle' | 'large';\n};\nexport const IconWrapper: VFC<IconWrapperProps> = (props) => {\n return (\n <Tooltip title={props.hoverTips}>\n <div\n className={classNames('icon-wrapper', `icon-wrapper-${props.size || 'middle'}`, props.className)}\n style={props.style}\n >\n {props.icon}\n {props.text ? <span className=\"icon-wrapper-text\">{props.text}</span> : null}\n </div>\n </Tooltip>\n );\n};\n","import { ModelType } from '@dimjs/model';\n\nexport interface ModalStateType {\n title?: string;\n /**\n * 显示modal\n */\n visible: boolean;\n /**\n * 用来处理form, `更新`的时候的传递当前item列表行的数据, 当`创建`的时候强制设置为 `undefined`\n */\n itemData?: Record<string, unknown> | null;\n operateType: 'create' | 'update' | 'view';\n pageLoading?: boolean;\n}\n\nexport interface ModalActionsParamType {\n openModalForm: Pick<ModalStateType, 'title' | 'itemData' | 'operateType' | 'pageLoading'>;\n closeModal: void;\n setModalItemData: Record<string, unknown>;\n}\n\n/**\n * @shared\n * 提供公共的modal处理, 通常用来表单编辑, 弹窗抽屉模式.\n * 注意全部理论上只允许一个modal实例存在,如需处理多个, 请自行实例话模型.\n */\nexport const ModalModel: ModelType<ModalStateType, ModalActionsParamType> = {\n actions: {\n openModalForm({ itemData, title, operateType, pageLoading }) {\n return (state) => {\n state.itemData = itemData;\n state.title = title;\n state.operateType = operateType;\n state.pageLoading = pageLoading;\n state.visible = true;\n };\n },\n closeModal() {\n return (state) => {\n state.visible = false;\n };\n },\n setModalItemData(params) {\n return (state) => {\n state.pageLoading = false;\n state.itemData = params;\n };\n },\n },\n state: {\n visible: false,\n title: '',\n operateType: 'view',\n },\n};\n","import { Button, ButtonProps, Space } from 'antd';\nimport { Fragment } from 'react';\n\nexport interface ModalOperationProps {\n loading?: boolean;\n okText?: string;\n cancelText?: string;\n onOk?: () => void;\n onCancel?: () => void;\n hideOkBtn?: boolean;\n okButtonProps?: Omit<ButtonProps, 'onClick' | 'loading' | 'className'>;\n cancelButtonProps?: Omit<ButtonProps, 'onClick' | 'loading' | 'className'>;\n}\n\nexport const ModalOperation = ({\n loading,\n okText = '保存',\n cancelText = '取消',\n onCancel,\n onOk,\n hideOkBtn,\n ...otherProps\n}: ModalOperationProps) => {\n return (\n <Fragment>\n <Space size=\"middle\">\n <Button {...otherProps.cancelButtonProps} className=\"cancel-btn\" onClick={onCancel}>\n {cancelText}\n </Button>\n {hideOkBtn != true && (\n <Button\n type=\"primary\"\n {...otherProps.okButtonProps}\n className=\"ok-btn\"\n onClick={onOk}\n loading={loading}\n >\n {okText}\n </Button>\n )}\n </Space>\n </Fragment>\n );\n};\n","import { classNames } from '@dimjs/utils';\nimport { Modal, ModalProps } from 'antd';\nimport { FC, useEffect } from 'react';\nimport { ModalOperation, ModalOperationProps } from './modal-operation';\nimport './style.less';\n\nexport type ModalFormProps = {\n className?: string;\n // 整个modal页面级的spinning <Page loading />\n pageLoading?: boolean;\n // 设置了 ModalProps footer属性后,operationProps配置将失效\n operationProps?: ModalOperationProps;\n footer?: null | React.ReactNode;\n} & Omit<\n ModalProps,\n | 'footer'\n | 'onOk'\n | 'okText'\n | 'cancelText'\n | 'okButtonProps'\n | 'cancelButtonProps'\n | 'okType'\n | 'confirmLoading'\n>;\n\nconst PageLoader = () => {\n return (\n <div className=\"modal-wraper-loader\">\n <div className=\"loader-wrapper\">\n <div className=\"loader-inner\" />\n <div className=\"loader-text\">LOADING</div>\n </div>\n </div>\n );\n};\n\n/**\n * 弹窗机制\n * ```\n * 1. 默认 destroyOnClose = true\n * 2. 默认 forceRender = false\n * ```\n */\nexport const ModalWraper: FC<ModalFormProps> = (props) => {\n const { pageLoading, className, width, children, footer, operationProps, ...otherProps } = props;\n\n useEffect(() => {\n console.error(\n '@flatbiz/antd库【ModalWraper】组件已经过期,请使用ModalWrapper替换包括ModalWraper=>ModalWrapper、createModalWraperModel=>createModalWrapperModel,如果使用ModalWrapper组件原用法需要调整',\n );\n }, []);\n\n return (\n <Modal\n className={classNames('modal-wraper', className)}\n keyboard={false}\n forceRender={false}\n destroyOnClose={true}\n {...otherProps}\n width={width || 600}\n footer={null}\n >\n <div className=\"modal-wraper-content\">\n {children}\n {pageLoading && <PageLoader />}\n </div>\n {footer !== null && (\n <div className=\"modal-wraper-content-footer\">\n {footer ? footer : <ModalOperation {...operationProps} />}\n </div>\n )}\n </Modal>\n );\n};\n","import { API, ModelType } from '@dimjs/model';\nimport { Model } from '@dimjs/model-react';\nimport { ModalActionsParamType, ModalModel, ModalStateType } from './modal.model';\n\n/**\n * 组件单词写错,请输入\n */\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nconst modalModels: Record<string, API<ModelType<ModalStateType, ModalActionsParamType, any>>> = {};\n\n/**\n * modal弹窗模型\n * @param key 唯一值必传\n * @returns\n *\n * ```\n * 使用方式\n * const [modalState, modalActions] = createModalWraperModel('key值').useStore();\n * ```\n */\nexport const createModalWraperModel = (key: string) => {\n if (!modalModels[key]) {\n modalModels[key] = Model(ModalModel);\n }\n return modalModels[key];\n};\n\nexport * from './modal-wraper';\n","import { ModelType } from '@dimjs/model';\n\nexport interface ModalStateType {\n title?: string;\n /**\n * 显示modal\n */\n visible: boolean;\n /**\n * 用来处理form, `更新`的时候的传递当前item列表行的数据, 当`创建`的时候强制设置为 `undefined`\n */\n itemData?: Record<string, unknown> | null;\n operateType: 'create' | 'update' | 'view';\n pageLoading?: boolean;\n}\n\nexport interface ModalActionsParamType {\n openModalForm: Pick<ModalStateType, 'title' | 'itemData' | 'operateType' | 'pageLoading'>;\n closeModal: void;\n setModalItemData: Record<string, unknown>;\n}\n\n/**\n * @shared\n * 提供公共的modal处理, 通常用来表单编辑, 弹窗抽屉模式.\n * 注意全部理论上只允许一个modal实例存在,如需处理多个, 请自行实例话模型.\n */\nexport const ModalModel: ModelType<ModalStateType, ModalActionsParamType> = {\n actions: {\n openModalForm({ itemData, title, operateType, pageLoading }) {\n return (state) => {\n state.itemData = itemData;\n state.title = title;\n state.operateType = operateType;\n state.pageLoading = pageLoading;\n state.visible = true;\n };\n },\n closeModal() {\n return (state) => {\n state.visible = false;\n };\n },\n setModalItemData(params) {\n return (state) => {\n state.pageLoading = false;\n state.itemData = params;\n };\n },\n },\n state: {\n visible: false,\n title: '',\n operateType: 'view',\n },\n};\n","import { Button, ButtonProps, Space } from 'antd';\nimport { Fragment } from 'react';\n\nexport interface ModalOperationOldProps {\n loading?: boolean;\n okText?: string;\n cancelText?: string;\n onOk?: () => void;\n onCancel?: () => void;\n hideOkBtn?: boolean;\n okButtonProps?: Omit<ButtonProps, 'onClick' | 'loading' | 'className'>;\n cancelButtonProps?: Omit<ButtonProps, 'onClick' | 'loading' | 'className'>;\n}\n\nexport const ModalOperation = ({\n loading,\n okText = '保存',\n cancelText = '取消',\n onCancel,\n onOk,\n hideOkBtn,\n ...otherProps\n}: ModalOperationOldProps) => {\n return (\n <Fragment>\n <Space size=\"middle\">\n <Button {...otherProps.cancelButtonProps} className=\"cancel-btn\" onClick={onCancel}>\n {cancelText}\n </Button>\n {hideOkBtn != true && (\n <Button\n type=\"primary\"\n {...otherProps.okButtonProps}\n className=\"ok-btn\"\n onClick={onOk}\n loading={loading}\n >\n {okText}\n </Button>\n )}\n </Space>\n </Fragment>\n );\n};\n","import { classNames } from '@dimjs/utils';\nimport { Modal, ModalProps } from 'antd';\nimport { FC, Fragment } from 'react';\nimport { useEffectCustom } from '../hooks/use-effect-custom';\nimport { ModalOperation, ModalOperationOldProps } from './modal-operation';\nimport './style.less';\n\ntype ModalWrapperStaticMethods = {\n Content: typeof ModalWrapperContent;\n Footer: typeof ModalWrapperFooter;\n};\n\nexport type ModalWrapperProps = {\n className?: string;\n // 整个modal页面级的spinning <Page loading />\n pageLoading?: boolean;\n} & Omit<\n ModalProps,\n | 'footer'\n | 'onOk'\n | 'okText'\n | 'cancelText'\n | 'okButtonProps'\n | 'cancelButtonProps'\n | 'okType'\n | 'confirmLoading'\n>;\n\nconst PageLoader = () => {\n return (\n <div className=\"modal-wrapper-loader\">\n <div className=\"loader-wrapper\">\n <div className=\"loader-inner\" />\n <div className=\"loader-text\">LOADING</div>\n </div>\n </div>\n );\n};\n\nconst ModalWrapperContent: FC<{ operationProps?: ModalOperationOldProps }> = (props) => {\n return (\n <Fragment>\n <div className=\"modal-wrapper-content\">{props.children}</div>\n {props.operationProps ? (\n <ModalWrapperFooter>\n <ModalOperation {...props.operationProps} />\n </ModalWrapperFooter>\n ) : null}\n </Fragment>\n );\n};\n\nconst ModalWrapperFooter = (props) => {\n return <div className=\"modal-wrapper-footer\">{props.children}</div>;\n};\n\n/**\n * 弹窗机制\n * ```\n * 1. 默认 destroyOnClose = true\n * 2. 默认 forceRender = false\n * ```\n */\nexport const ModalWrapper: FC<ModalWrapperProps> & ModalWrapperStaticMethods = (props) => {\n const { pageLoading, className, width, children, ...otherProps } = props;\n\n useEffectCustom(() => {\n if (props['operationProps']) {\n throw new Error('ModalWrapper组件升级,参数operationProps用法变更,请及时更新');\n }\n }, []);\n\n return (\n <Modal\n className={classNames('modal-wrapper', className)}\n keyboard={false}\n forceRender={true}\n destroyOnClose={true}\n {...otherProps}\n width={width || 600}\n footer={null}\n >\n {children}\n {pageLoading && <PageLoader />}\n </Modal>\n );\n};\n\nModalWrapper.Content = ModalWrapperContent;\nModalWrapper.Footer = ModalWrapperFooter;\n","import { API, ModelType } from '@dimjs/model';\nimport { Model } from '@dimjs/model-react';\nimport { ModalActionsParamType, ModalModel, ModalStateType } from './modal.model';\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nconst modalModels: Record<string, API<ModelType<ModalStateType, ModalActionsParamType, any>>> = {};\n\n/**\n * modal弹窗模型\n * @param key 唯一值必传\n * @returns\n *\n * ```\n * 使用方式\n * const [modalState, modalActions] = createModalWrapperModel('key值').useStore();\n * ```\n */\nexport const createModalWrapperModel = (key: string) => {\n if (!modalModels[key]) {\n modalModels[key] = Model(ModalModel);\n }\n return modalModels[key];\n};\n\nexport * from './modal-wrapper';\n","import { classNames } from '@dimjs/utils';\nimport { CSSProperties, FC } from 'react';\nimport './style.less';\n\nexport type PageFixedFooterProps = {\n className?: string;\n style?: CSSProperties;\n};\n\nexport const PageFixedFooter: FC<PageFixedFooterProps> = (props) => {\n return (\n <div className={classNames('page-fixed-footer', props.className)} style={props.style}>\n {props.children}\n </div>\n );\n};\n","export const Page404 = () => {\n return <div className=\"v-404\">404</div>;\n};\n","import './style.less';\n/**\n * 使用在Form组件上,预定义form-item label宽度\n */\nexport const formClassName = {\n label_width_70: 'form-label-70',\n label_width_80: 'form-label-80',\n label_width_90: 'form-label-90',\n label_width_100: 'form-label-100',\n label_width_110: 'form-label-110',\n label_width_120: 'form-label-120',\n label_width_130: 'form-label-130',\n label_width_auto: 'form-label-auto',\n};\n\n/**\n * 使用在Form.Item组件上,预定义form-item label宽度\n */\nexport const formItemClassName = {\n label_width_70: 'form-item-label-70',\n label_width_80: 'form-item-label-80',\n label_width_90: 'form-item-label-90',\n label_width_100: 'form-item-label-100',\n label_width_110: 'form-item-label-110',\n label_width_120: 'form-item-label-120',\n label_width_130: 'form-item-label-130',\n label_width_auto: 'form-item-label-auto',\n};\n","import { formClassName, formItemClassName } from './form';\n\n/**\n * 预定义className\n * ```\n * form: 使用在Form组件上,设置form-item label宽度\n * formItem: 使用在Form.Item组件上,设置form-item label宽度\n * ```\n */\nexport const preDefinedClassName = {\n form: formClassName,\n formItem: formItemClassName,\n};\n","import { classNames } from '@dimjs/utils';\nimport { CSSProperties, FC, ReactElement } from 'react';\nimport './style.less';\n\nexport type SimpleLayoutProps = {\n className?: string;\n style?: CSSProperties;\n title?: string | ReactElement;\n desc?: string | ReactElement;\n formLabelAlign?: 'left' | 'right';\n layoutType?: 'layer' | 'tight';\n};\n\nexport const SimpleLayout: FC<SimpleLayoutProps> = (props) => {\n const labelAlign = props.formLabelAlign || 'right';\n const className = classNames(\n 'simple-layout',\n {\n 'simple-layout-tight': props.layoutType === 'tight',\n 'simple-layout-formlabel-left': labelAlign === 'left',\n },\n props.className,\n );\n\n return (\n <div className={className} style={props.style}>\n {props.title ? <div className=\"simple-layout-title\">{props.title}</div> : null}\n {props.desc ? <div className=\"simple-layout-desc\">{props.desc}</div> : null}\n {props.children ? <div className=\"simple-layout-content\">{props.children}</div> : null}\n </div>\n );\n};\n","import { classNames } from '@dimjs/utils';\nimport { hooks } from '@wove/react';\nimport { FC, useEffect, useMemo, useState } from 'react';\n\nexport interface SmsCountDownProps {\n onSendRequest: () => Promise<void>; // 验证码请求函数\n totalTicks?: number; // 总倒计时,默认:60(s)\n duration?: number; // 倒计时间隔,默认:1000ms(1s)\n autoStart?: boolean; // 是否自动开始倒计时,默认:fasle,注意:不会自动调用 onSendRequest\n format?: string; // 倒计时格式化,默认:'{t}s'\n sendTxt?: string; // 文案,默认:'获取验证码'\n sentTxt?: string; // 倒计时完成文案,默认:'重新获取'\n processingTxt?: string; // 倒计时中文案,默认:'发送中...'\n onTick?: (time: number) => void; // 倒计时回调\n className?: string;\n}\nexport const SmsCountDown: FC<SmsCountDownProps> = (props) => {\n const [showMessage, setShowMessage] = useState<string>();\n\n const [running, setRunning] = useState(false);\n const [starting, setStarting] = useState(false);\n\n // 初始化设置有效\n const initConfig = useMemo<Omit<SmsCountDownProps, 'onSendRequest' | 'onTick' | 'className'>>(() => {\n return {\n sendTxt: props.sendTxt,\n sentTxt: props.sentTxt,\n processingTxt: props.processingTxt,\n format: props.format,\n autoStart: props.autoStart,\n totalTicks: props.totalTicks,\n duration: props.duration,\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n const format = initConfig.format as string;\n const totalTicks = initConfig.totalTicks as number;\n const duration = initConfig.duration as number;\n\n const countdownFnc = hooks.useCountdownCallback(\n (num) => {\n const second = num / 1000;\n if (num > 0) {\n if (!running) {\n setRunning(true);\n }\n setShowMessage(format.replace('{t}', String(second)));\n props.onTick?.(second);\n } else if (num === 0) {\n setRunning(false);\n setStarting(false);\n props.onTick?.(second);\n setShowMessage(initConfig.sentTxt);\n }\n },\n totalTicks * 1000,\n { intervalTime: duration },\n );\n\n useEffect(() => {\n if (!initConfig.autoStart) {\n setShowMessage(initConfig.sendTxt);\n } else {\n countdownFnc();\n setStarting(true);\n setRunning(true);\n }\n }, [countdownFnc, initConfig]);\n\n const onStart = hooks.useCallbackRef(() => {\n if (running || starting) return;\n setStarting(true);\n setShowMessage(initConfig.processingTxt);\n void props\n .onSendRequest()\n .then(() => {\n setRunning(true);\n countdownFnc();\n })\n .catch(() => {\n setShowMessage(initConfig.sendTxt);\n setStarting(false);\n });\n });\n\n const className = classNames('v-count-down', props.className, {\n running,\n starting,\n });\n\n return (\n <div className={className} onClick={onStart}>\n {showMessage}\n </div>\n );\n};\n\nSmsCountDown.defaultProps = {\n totalTicks: 60,\n duration: 1000,\n autoStart: false,\n format: '{t}s',\n sendTxt: '获取验证码',\n sentTxt: '重新获取',\n processingTxt: '发送中...',\n};\n","import { classNames } from '@dimjs/utils';\nimport { Children, cloneElement, FC } from 'react';\nimport { useEffectCustom } from '../hooks';\nimport './style.less';\n\ntype StaticMethods = {\n Condition: typeof Condition;\n Operate: typeof Operate;\n Table: typeof Table;\n Footer: typeof Footer;\n};\n\nconst overdueConsole = () => {\n console.error('@flatbiz/antd库【TableFilterLayout】组件已经过期,请使用【SimpleLayout】组件替代');\n};\n\nexport type TableFilterLayoutProps = {\n className?: string;\n isFixed?: boolean;\n fullIndex?: number;\n};\n\nexport const TableFilterLayout: FC<TableFilterLayoutProps> & StaticMethods = (props) => {\n useEffectCustom(() => {\n overdueConsole();\n }, []);\n\n return (\n <div\n className={classNames(\n 'table-filter-layout',\n { 'table-filter-layout-flex': props.isFixed },\n props.className,\n )}\n >\n {Children.map(props.children, (item, index) => {\n if (props.isFixed && index === props.fullIndex) {\n return cloneElement(item as JSX.Element, { className: 'table-filter-layout-flex-full' });\n }\n return item;\n })}\n </div>\n );\n};\n\nconst Condition: FC<{ className?: string }> = (props) => {\n return <div className={classNames('table-filter-layout-condition', props.className)}>{props.children}</div>;\n};\n\nconst Operate: FC<{ className?: string }> = (props) => {\n return <div className={classNames('table-filter-layout-operate', props.className)}>{props.children}</div>;\n};\n\nconst Table: FC<{ className?: string }> = (props) => {\n return <div className={classNames('table-filter-layout-table', props.className)}>{props.children}</div>;\n};\nconst Footer: FC<{ className?: string }> = (props) => {\n return <div className={classNames('table-filter-layout-footer', props.className)}>{props.children}</div>;\n};\n\nTableFilterLayout.Condition = Condition;\nTableFilterLayout.Operate = Operate;\nTableFilterLayout.Table = Table;\nTableFilterLayout.Footer = Footer;\n","import { API, ModelType } from '@dimjs/model';\nimport { Model } from '@dimjs/model-react';\nimport { TSetDefaultDefined } from '@flatbiz/utils';\nimport { TreeSelectProps } from 'antd';\n\nexport type ModelState = {\n treeSelectorList: TSetDefaultDefined<TreeSelectProps['treeData'], []>;\n queryIsEmpty: boolean;\n requestStatus?: 'request-pre' | 'request-success' | 'request-error';\n};\n\ntype ModelActionParams = {\n setSelectBoxList: ModelState['treeSelectorList'];\n resetSelectBoxList: void;\n changeRequestStatus: ModelState['requestStatus'];\n};\n\nconst defaultState: ModelState = {\n treeSelectorList: [],\n queryIsEmpty: false,\n};\n\nconst TreeSelectorWrapperModel: ModelType<ModelState, ModelActionParams> = {\n actions: {\n setSelectBoxList: (params) => {\n return (state) => {\n state.treeSelectorList = params || [];\n state.requestStatus = 'request-success';\n };\n },\n resetSelectBoxList: () => {\n return (state) => {\n state.treeSelectorList = [];\n };\n },\n changeRequestStatus: (params) => {\n return (state) => {\n state.requestStatus = params;\n };\n },\n },\n state: defaultState,\n};\n\nconst treeSelectorWrapperModels: Record<string, API<ModelType<ModelState, ModelActionParams, any>>> = {};\n\n/**\n * ```\n * 使用方式\n * const [state, actions] = useTreeSelectorWrapperModel('key值').useStore();\n * ```\n */\nexport const treeSelectorWrapperModel = (key: string) => {\n if (!treeSelectorWrapperModels[key]) {\n treeSelectorWrapperModels[key] = Model(TreeSelectorWrapperModel);\n }\n return treeSelectorWrapperModels[key];\n};\n","import { isArray } from '@dimjs/lang';\nimport { TPlainObject, treeLeafParentsArray, treeToTiledArray } from '@flatbiz/utils';\nimport { TreeSelectProps } from 'antd';\n\nexport const getExpandedKeys = (\n value: string | number,\n treeList: TPlainObject[],\n fieldNames?: TreeSelectProps['fieldNames'],\n) => {\n if (!isArray(treeList) || treeList.length === 0) return [];\n const tiledArray = treeToTiledArray(treeList, fieldNames);\n return treeLeafParentsArray(value, tiledArray);\n};\n","import { RedoOutlined } from '@ant-design/icons';\nimport { isArray } from '@dimjs/lang';\nimport { extend } from '@dimjs/utils';\nimport { useEffectCustom } from '@flatbiz/antd';\nimport { isUndefinedOrNull, TPlainObject } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { Button, Empty, message, TreeSelect, TreeSelectProps } from 'antd';\nimport { DependencyList, forwardRef, useEffect, useImperativeHandle, useMemo, useState } from 'react';\nimport { ModelState, treeSelectorWrapperModel } from './model';\nimport './style.less';\nimport { getExpandedKeys } from './utils';\ntype TreeSelectorServiceConfig = {\n params?: TPlainObject;\n requiredParamsKeys?: string[];\n onRequest?: (params?: any) => any;\n /**\n * 响应数据适配器\n */\n onRequestResultAdapter?: (respData: any) => TPlainObject[];\n};\n\nexport type TreeSelectorWrapperProps = Omit<\n TreeSelectProps,\n 'treeExpandedKeys' | 'treeData' | 'loading' | 'onTreeExpand'\n> & {\n modelKey: string;\n effectDependencyList?: DependencyList;\n /**\n * 请求服务需求的数据,当设置`treeSelectorList`后无效果\n */\n serviceConfig?: TreeSelectorServiceConfig;\n /**\n * 当设置treeSelectorList后,serviceConfig、onTreeSelectorListChange将失效\n * ```\n * 1. 不支持异步数据,异步使用serviceConfig方式\n * ```\n */\n treeSelectorList?: TreeSelectProps['treeData'];\n /**\n * 通过服务获取数据后回调,当设置`treeSelectorList`后无效果\n */\n onTreeSelectorListChange?: (treeSelectorList?: TreeSelectProps['treeData']) => void;\n};\n\nexport type TreeSelectorWrapperRefApi = {\n onClearSelectorList: () => void;\n getTreeSelectorList: () => TreeSelectProps['treeData'];\n};\n\n/**\n * 树选择器包装组件\n * @param props\n * @returns\n * ```\n * 1. 当设置treeSelectorList属性后,serviceConfig、onTreeSelectorListChange将失效\n * ```\n */\nexport const TreeSelectorWrapper = forwardRef<TreeSelectorWrapperRefApi, TreeSelectorWrapperProps>(\n (props, ref) => {\n const {\n serviceConfig,\n effectDependencyList,\n onTreeSelectorListChange,\n treeSelectorList,\n modelKey,\n ...otherProps\n } = props;\n const newServiceConfig = serviceConfig || {};\n const newEffectDependencyList = effectDependencyList || [];\n const [loading, setLoading] = useState(false);\n const [treeExpandedKeys, setTreeExpandedKeys] = useState<React.Key[]>();\n const [state, actions] = treeSelectorWrapperModel(modelKey).useStore();\n const valueIsEmpty = (value: string | number) => {\n return value === '' || isUndefinedOrNull(value);\n };\n\n const serviceResponseHandle = (respData) => {\n const respDataList = (\n newServiceConfig.onRequestResultAdapter\n ? newServiceConfig.onRequestResultAdapter(respData as unknown as TPlainObject)\n : respData\n ) as TPlainObject[];\n return respDataList;\n };\n\n const startDataSourceRequest = hooks.useCallbackRef(async () => {\n try {\n if (!newServiceConfig.onRequest) {\n throw new Error('onRequest 调用接口服务不能为空');\n }\n const requiredParamsKeys = newServiceConfig.requiredParamsKeys;\n const params = extend({}, newServiceConfig.params);\n if (requiredParamsKeys) {\n const isEmpty = requiredParamsKeys.find((key) => {\n return valueIsEmpty(params[key] as string | number);\n });\n if (isEmpty) {\n console.warn(`TreeSelectorWrapper组件:参数:${requiredParamsKeys.join('、')}不能为空`);\n return;\n }\n }\n try {\n setLoading(true);\n void actions.changeRequestStatus('request-pre');\n const _respData = await newServiceConfig.onRequest?.(params);\n const respData = serviceResponseHandle(_respData) as TreeSelectProps['treeData'];\n setLoading(false);\n onTreeSelectorListChange?.(respData);\n void actions.setSelectBoxList(respData || []);\n } catch (error) {\n setLoading(false);\n void actions.changeRequestStatus('request-error');\n }\n } catch (error) {\n setLoading(false);\n void message.error((error.message as string) || '数据查询异常...');\n }\n });\n\n useEffectCustom(() => {\n if (treeSelectorList) {\n void actions.setSelectBoxList(treeSelectorList);\n return;\n }\n // 当无依赖项时,如果存在缓存数据,就不在调用接口\n const realTimeState = treeSelectorWrapperModel(modelKey).getState();\n console.log('realTimeState', realTimeState.requestStatus);\n if (\n newEffectDependencyList.length > 0 ||\n !realTimeState.requestStatus ||\n realTimeState.requestStatus === 'request-error'\n ) {\n void startDataSourceRequest();\n }\n }, newEffectDependencyList);\n\n useEffect(() => {\n if (!isUndefinedOrNull(props.value)) {\n const valueList = isArray(props.value) ? props.value : [props.value];\n if (valueList.length > 0 && state.treeSelectorList.length > 0) {\n let expandedKeys = [] as Array<string | number>;\n valueList.forEach((tempValue) => {\n const targetList = getExpandedKeys(\n tempValue as string | number,\n state.treeSelectorList,\n props.fieldNames,\n );\n expandedKeys = expandedKeys.concat(targetList.map((item) => item.value));\n });\n setTreeExpandedKeys((prev) => {\n const mergeList = expandedKeys.concat(prev || []);\n return Array.from(new Set(mergeList));\n });\n }\n }\n }, [state.treeSelectorList, props.fieldNames, props.value]);\n\n useImperativeHandle(ref, () => {\n return {\n onClearSelectorList: () => {\n void actions.setSelectBoxList([]);\n },\n getTreeSelectorList: () => {\n return state.treeSelectorList;\n },\n };\n });\n\n const onTreeExpand = hooks.useCallbackRef((expandedKeys) => {\n setTreeExpandedKeys(expandedKeys as string[]);\n });\n\n const onAgainRequest = hooks.useCallbackRef(() => {\n void startDataSourceRequest();\n });\n\n return (\n <TreeSelect\n dropdownStyle={{ maxHeight: 400, overflow: 'auto' }}\n showSearch={true}\n treeLine={true}\n {...otherProps}\n value={isUndefinedOrNull(props.value) ? undefined : props.value}\n treeExpandedKeys={treeExpandedKeys}\n treeData={state.treeSelectorList}\n loading={loading}\n onTreeExpand={onTreeExpand}\n style={{ width: '100%', ...otherProps.style }}\n suffixIcon={\n state.requestStatus === 'request-error' ? (\n <RedoOutlined spin={loading} onClick={onAgainRequest} />\n ) : undefined\n }\n notFoundContent={\n <NotFoundContent requestStatus={state.requestStatus} onAgainRequest={onAgainRequest} />\n }\n />\n );\n },\n);\n\nconst NotFoundContent = (props: {\n requestStatus?: ModelState['requestStatus'];\n onAgainRequest: () => void;\n}) => {\n const description = useMemo(() => {\n if (props.requestStatus === 'request-error') {\n return '数据查询异常';\n } else if (props.requestStatus === 'request-success') {\n return '暂无数据';\n }\n return '数据查询中';\n }, [props.requestStatus]);\n return (\n <Empty\n image={Empty.PRESENTED_IMAGE_SIMPLE}\n description={description}\n className={'tree-selector-wrapper-empty'}\n >\n {props.requestStatus === 'request-error' && (\n <Button type=\"primary\" onClick={props.onAgainRequest}>\n 重新获取数据\n </Button>\n )}\n </Empty>\n );\n};\n","import { API, ModelType } from '@dimjs/model';\nimport { Model } from '@dimjs/model-react';\nimport { TSetDefaultDefined } from '@flatbiz/utils';\nimport { TreeProps } from 'antd';\n\nexport type ModelState = {\n treeList: TSetDefaultDefined<TreeProps['treeData'], []>;\n queryIsEmpty: boolean;\n requestStatus?: 'request-pre' | 'request-success' | 'request-error';\n};\n\ntype ModelActionParams = {\n setTreeList: ModelState['treeList'];\n resetTreeList: void;\n changeRequestStatus: ModelState['requestStatus'];\n};\n\nconst defaultState: ModelState = {\n treeList: [],\n queryIsEmpty: false,\n};\n\nconst TreeWrapperModel: ModelType<ModelState, ModelActionParams> = {\n actions: {\n setTreeList: (params) => {\n return (state) => {\n state.treeList = params || [];\n state.requestStatus = 'request-success';\n };\n },\n resetTreeList: () => {\n return (state) => {\n state.treeList = [];\n };\n },\n changeRequestStatus: (params) => {\n return (state) => {\n state.requestStatus = params;\n };\n },\n },\n state: defaultState,\n};\n\nconst treeWrapperModels: Record<string, API<ModelType<ModelState, ModelActionParams, any>>> = {};\n\n/**\n * ```\n * 使用方式\n * const [state, actions] = useTreeWrapperModel('key值').useStore();\n * ```\n */\nexport const treeWrapperModel = (key: string) => {\n if (!treeWrapperModels[key]) {\n treeWrapperModels[key] = Model(TreeWrapperModel);\n }\n return treeWrapperModels[key];\n};\n","import { TPlainObject, treeLeafParentsArray, treeToTiledArray } from '@flatbiz/utils';\n\nexport const getExpandedKeys = (\n value: string | number,\n treeList: TPlainObject[],\n fieldNames?: { label?: string; value?: string; children?: string },\n) => {\n const tiledArray = treeToTiledArray(treeList, fieldNames);\n return treeLeafParentsArray(value, tiledArray);\n};\n","import { isArray } from '@dimjs/lang';\nimport { extend } from '@dimjs/utils';\nimport { useEffectCustom } from '@flatbiz/antd';\nimport { isUndefinedOrNull, TPlainObject, treeToTiledArray } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { Button, Empty, message, Spin, Tree, TreeProps } from 'antd';\nimport { DependencyList, forwardRef, useImperativeHandle, useMemo, useState } from 'react';\nimport { ModelState, treeWrapperModel } from './model';\nimport './style.less';\nimport { getExpandedKeys } from './utils';\n\ntype TreeServiceConfig = {\n params?: TPlainObject;\n requiredParamsKeys?: string[];\n onRequest?: (params?: any) => any;\n /**\n * 响应数据适配器\n */\n onRequestResultAdapter?: (respData: any) => TPlainObject[];\n};\n\nexport type TreeWrapperProps = Omit<\n TreeProps,\n | 'expandedKeys'\n | 'treeData'\n | 'onExpand'\n | 'selectedKeys'\n | 'checkedKeys'\n | 'onCheck'\n | 'onSelect'\n | 'defaultCheckedKeys'\n | 'defaultSelectedKeys'\n | 'fieldNames'\n> & {\n modelKey: string;\n effectDependencyList?: DependencyList;\n /**\n * 请求服务需求的数据,当设置`selectorTreeList`后无效果\n */\n serviceConfig?: TreeServiceConfig;\n /**\n * 当设置selectorTreeList后,serviceConfig将失效\n * ```\n * 1. 不支持异步数据,异步使用serviceConfig方式\n * ```\n */\n selectorTreeList?: TreeProps['treeData'];\n value?: string | number | Array<string | number>;\n onChange?: (selectedKey: string | number | Array<string | number>) => void;\n fieldNames?: { label?: string; value?: string; children?: string };\n /**\n * 打开tree折叠过滤关键字\n */\n filterLabel?: string;\n};\n\nexport type TreeWrapperRefApi = {\n onClearSelectorList: () => void;\n getTreeDataList: () => TreeProps['treeData'];\n};\n\n/**\n * 树包装组件\n * @param props\n * @returns\n * ```\n * 1. 当设置selectorTreeList属性后,serviceConfig、onSelectorListChange将失效\n * ```\n */\nexport const TreeWrapper = forwardRef<TreeWrapperRefApi, TreeWrapperProps>((props, ref) => {\n const {\n serviceConfig,\n effectDependencyList,\n selectorTreeList,\n value,\n onChange,\n fieldNames,\n modelKey,\n ...otherProps\n } = props;\n const newServiceConfig = serviceConfig || {};\n const newEffectDependencyList = effectDependencyList || [];\n const [treeExpandedKeys, setTreeExpandedKeys] = useState<React.Key[]>();\n const [state, actions] = treeWrapperModel(modelKey).useStore();\n const [loading, setLoading] = useState(false);\n\n const valueList = useMemo(() => {\n if (isUndefinedOrNull(props.value)) return undefined;\n return (isArray(props.value) ? props.value : [props.value]) as Array<string | number>;\n }, [props.value]);\n\n const valueIsEmpty = (value: string | number) => {\n return value === '' || isUndefinedOrNull(value);\n };\n\n const serviceResponseHandle = (respData) => {\n const respDataList = (\n newServiceConfig.onRequestResultAdapter\n ? newServiceConfig.onRequestResultAdapter(respData as unknown as TPlainObject)\n : respData\n ) as TPlainObject[];\n return respDataList;\n };\n\n const startDataSourceRequest = hooks.useCallbackRef(async () => {\n try {\n if (!newServiceConfig.onRequest) {\n throw new Error('onRequest 调用接口服务不能为空');\n }\n const requiredParamsKeys = newServiceConfig.requiredParamsKeys;\n const params = extend({}, newServiceConfig.params);\n if (requiredParamsKeys) {\n const isEmpty = requiredParamsKeys.find((key) => {\n return valueIsEmpty(params[key] as string | number);\n });\n if (isEmpty) {\n console.warn(`TreeWrapper组件:参数:${requiredParamsKeys.join('、')}不能为空`);\n return;\n }\n }\n try {\n setLoading(true);\n void actions.changeRequestStatus('request-pre');\n const _respData = await newServiceConfig.onRequest?.(params);\n const respData = serviceResponseHandle(_respData) as TreeProps['treeData'];\n void actions.setTreeList(respData || []);\n setLoading(false);\n } catch (error) {\n setLoading(false);\n void actions.changeRequestStatus('request-error');\n }\n } catch (error) {\n setLoading(false);\n void message.error((error.message as string) || '数据查询异常...');\n }\n });\n\n useEffectCustom(() => {\n if (selectorTreeList) {\n void actions.setTreeList(selectorTreeList);\n return;\n }\n // 当无依赖项时,如果存在缓存数据,就不在调用接口\n const realTimeState = treeWrapperModel(modelKey).getState();\n if (\n newEffectDependencyList.length > 0 ||\n !realTimeState.requestStatus ||\n realTimeState.requestStatus === 'request-error'\n ) {\n void startDataSourceRequest();\n }\n }, newEffectDependencyList);\n\n useEffectCustom(() => {\n if (valueList && valueList.length > 0 && state.treeList.length > 0 && !treeExpandedKeys) {\n let expandedKeys = [] as Array<string | number>;\n valueList.forEach((tempValue) => {\n const targetList = getExpandedKeys(tempValue, state.treeList, props.fieldNames);\n expandedKeys = expandedKeys.concat(targetList.map((item) => item.value));\n });\n setTreeExpandedKeys((prev) => {\n const mergeList = expandedKeys.concat(prev || []);\n return Array.from(new Set(mergeList));\n });\n }\n }, [state.treeList, props.fieldNames, value]);\n\n hooks.useUpdateEffect(() => {\n if (props.filterLabel) {\n const tiledArray = treeToTiledArray(state.treeList || [], props.fieldNames);\n const targetList = tiledArray.filter((item) => item.label?.includes(props.filterLabel || ''));\n let expandedKeys = [] as Array<string | number>;\n targetList.map((tempItem) => {\n const targetValues = getExpandedKeys(\n tempItem.value as string,\n state.treeList || [],\n props.fieldNames,\n );\n const valueList = targetValues.map((item) => item.value);\n expandedKeys = expandedKeys.concat(valueList);\n });\n setTreeExpandedKeys(Array.from(new Set(expandedKeys)));\n } else {\n setTreeExpandedKeys([]);\n }\n }, [props.filterLabel]);\n\n useImperativeHandle(ref, () => {\n return {\n onClearSelectorList: () => {\n void actions.resetTreeList();\n },\n getTreeDataList: () => {\n return state.treeList;\n },\n };\n });\n\n const onExpand = hooks.useCallbackRef((expandedKeys) => {\n setTreeExpandedKeys(expandedKeys as string[]);\n });\n const onCheck = hooks.useCallbackRef((checkedKeys) => {\n onChange?.(checkedKeys as Array<string | number>);\n });\n const onSelect = hooks.useCallbackRef((checkedKeys) => {\n if (props.multiple) {\n onChange?.(checkedKeys as Array<string | number>);\n } else {\n onChange?.(checkedKeys[0] as string | number);\n }\n });\n\n const treeFieldNames = useMemo(() => {\n const newFieldNames = extend({ label: 'label', value: 'value', children: 'children' }, fieldNames);\n return { title: newFieldNames.label, key: newFieldNames.value, children: newFieldNames.children };\n }, [fieldNames]);\n\n if (state.treeList.length > 0) {\n return (\n <Tree\n showLine={otherProps.checkable ? false : { showLeafIcon: false }}\n {...otherProps}\n fieldNames={treeFieldNames}\n expandedKeys={treeExpandedKeys}\n treeData={state.treeList}\n onExpand={onExpand}\n selectedKeys={otherProps.checkable ? undefined : valueList}\n checkedKeys={otherProps.checkable ? valueList : undefined}\n onCheck={otherProps.checkable ? onCheck : undefined}\n onSelect={otherProps.checkable ? undefined : onSelect}\n style={{ width: '100%', ...otherProps.style }}\n />\n );\n }\n\n return (\n <NotFoundContent\n requestStatus={state.requestStatus}\n loading={loading}\n onAgainRequest={startDataSourceRequest}\n />\n );\n});\n\nconst NotFoundContent = (props: {\n requestStatus?: ModelState['requestStatus'];\n onAgainRequest: () => void;\n loading: boolean;\n}) => {\n const description = useMemo(() => {\n if (props.requestStatus === 'request-error') {\n return '数据查询异常';\n } else if (props.requestStatus === 'request-success') {\n return '暂无数据';\n }\n return '数据查询中';\n }, [props.requestStatus]);\n return (\n <div className=\"tree-wrapper-empty\">\n <Spin spinning={props.loading}></Spin>\n <Empty image={Empty.PRESENTED_IMAGE_SIMPLE} description={description}>\n {props.requestStatus === 'request-error' && (\n <Button type=\"primary\" onClick={props.onAgainRequest}>\n 重新获取数据\n </Button>\n )}\n </Empty>\n </div>\n );\n};\n"],"names":["styles","noop","getPermissionList","_getGlobalData","getGlobalData","elemAclLimits","permissionList","_isArray","hasPermission","name","includes","Permission","props","_jsx","Fragment","children","ButtonOperate","className","Space","split","Divider","type","size","wrap","_isUndefined","operateList","map","item","index","text","color","onClick","permission","needConfirm","confirmMessage","hidden","style","otherProps","_excluded","newStyle","_extends","Popconfirm","title","okText","cancelText","onConfirm","arrowPointAtCenter","Button","undefined","danger","_createElement","key","defaultProps","DatePickerWrapper","value","onChange","format","useMemo","showTime","onChangeDate","_hooks","useCallbackRef","moment","datePickerValue","flatbizDate","isDate","Date","DatePicker","width","DateRangePickerWrapper","values","value1","_ref","value2","date1","_ref2","date2","rangePickerValue","RangePicker","DrawerModel","actions","openDrawerForm","itemData","operateType","pageLoading","state","visible","closeDrawer","setDrawerItemData","params","DrawerOperation","_jsxs","cancelButtonProps","onCancel","hideOkBtn","icon","_SaveOutlined","okButtonProps","onOk","loading","PageLoader","DrawerWraper","_props$width","footer","operationProps","useEffect","console","error","Drawer","_classNames","keyboard","forceRender","destroyOnClose","contentWrapperStyle","maxWidth","drawerModels","createDrawerWraperModel","Model","useEffectCustom","fn","deps","useEffectCustomAsync","asyncFunction","Promise","$return","$error","then","$await_1","$boundEx","DrawerWrapperContent","DrawerWrapperFooter","DrawerWrapper","Error","Content","Footer","createDrawerWrapperModel","getEditable","editable","tableRowIndex","CheckboxGroupFormItemContent","fieldConfig","editableConfig","render","editableComptProps","viewLabelList","options","length","label","returnList","forEach","target","find","temp","push","Checkbox","Group","tag","Tag","CheckboxGroupFormItem","formItemProps","Form","Item","DatePickerWrapperFormItem","FormItemContent","viewLabel","join","DateRangePickerWrapperFormItem","InputFormItem","Input","InputNumberFormItem","InputNumber","RadioGroupFormItemContent","e","Radio","RadioGroupFormItem","defaultState","selectorList","queryIsEmpty","requestStatus","_SelectorWrapperModel","setSelectBoxList","resetSelectBoxList","changeRequestStatus","selectorWrapperModels","selectorWrapperModel","SelectorWrapper","forwardRef","ref","serviceConfig","showAllOption","effectDependencyList","onSelectorListChange","searchFieldName","modelKey","fieldNames","isSearch","newServiceConfig","newEffectDependencyList","changeOperateValueRef","useRef","useState","_useState","setLoading","_selectorWrapperModel","useStore","valueIsEmpty","isUndefinedOrNull","serviceRespDataTranslation","respData","respDataList","onRequestResultAdapter","arrayField2LabelValue","startDataSourceRequest","inputValue","searchId","requiredParamsKeys","_params","isEmpty","keyword","_respData","respDataTranslation","$Try_1_Post","$Try_1_Catch","message","onRequest","_extend","warn","$Try_2_Post","$Try_2_Catch","$await_3","realTimeState","getState","valueIsEqual","current","concat","useImperativeHandle","onClearSelectorList","getSelectorList","filterOption","input","option","toLowerCase","indexOf","onSearch","useDebounceCallback","_len","arguments","otherParams","Array","_key","onAgainRequest","selectOptionsAll","Select","Option","showSearch","allowClear","notFoundContent","NotFoundContent","suffixIcon","_RedoOutlined","spin","description","Empty","image","PRESENTED_IMAGE_SIMPLE","SelectorWrapperFormItem","FormItemTextContent","_props$fieldConfig2","_props$fieldConfig3","_props$fieldConfig","isBaseData","_isString","_isNumber","_isBoolean","JSON","stringify","TextFormItem","noStyle","TextAreaFormItem","TextArea","UploadWrapper","onUploadError","uploadList","setUploadList","uid","url","onUploadChange","info","fileList","file","status","response","code","result","data","maxCount","targetList","targetIndex","findIndex","tempUid","splice","Upload","disabled","UploadTrigger","listType","marginTop","ghost","UploadWrapperFormItemContent","_objectWithoutPropertiesLoose","_editableComptProps","UploadWrapperFormItem","FormItemAdapter","newEditable","commomProps","completeName","FormList","from","useFormInstance","formListConfig","onFormListBeforeRender","editableConfigList","onFormListAfterRender","onFormListItemBeforeRender","onFormListItemAfterRender","deleteOperateRender","List","fields","add","remove","_Fragment","getFieldValue","fieldChild","hasEditable","formListItemIndex","fieldItem","fieldName","DeleteFormListItem","_DeleteOutlined","FormListItem","EditableTable","_props$tableProps2","columns","columnItem","operateRender","otherColumnItem","onCell","_props$tableProps","valign","tableProps","cellVerticalAlign","_value","record","operation","dataIndex","rules","formListOperation","onTableBeforeRender","Table","scroll","x","pagination","dataSource","rowKey","onTableAfterRender","block","_PlusOutlined","FileImport","onImportFinish","showUploadList","accept","FileUpload","onPreview","uploadValue","setUploadValue","fileKey","fileName","thumbUrl","uploadItem","respValue","onUploadPreview","FlexLayout","childrens","direction","gap","fullIndexList","fullIndex","childrenStyle","flex","marginRight","marginBottom","cloneElement","Gap","height","IconWrapper","Tooltip","hoverTips","ModalModel","openModalForm","closeModal","setModalItemData","ModalOperation","_ref$okText","_ref$cancelText","ModalWraper","Modal","modalModels","createModalWraperModel","ModalWrapperContent","ModalWrapperFooter","ModalWrapper","createModalWrapperModel","PageFixedFooter","Page404","formClassName","label_width_70","label_width_80","label_width_90","label_width_100","label_width_110","label_width_120","label_width_130","label_width_auto","formItemClassName","preDefinedClassName","form","formItem","SimpleLayout","labelAlign","formLabelAlign","layoutType","desc","SmsCountDown","showMessage","setShowMessage","running","_useState2","setRunning","starting","_useState3","setStarting","initConfig","sendTxt","sentTxt","processingTxt","autoStart","totalTicks","duration","countdownFnc","useCountdownCallback","num","second","replace","String","onTick","intervalTime","onStart","onSendRequest","catch","overdueConsole","TableFilterLayout","isFixed","Children","Condition","Operate","treeSelectorList","TreeSelectorWrapperModel","treeSelectorWrapperModels","treeSelectorWrapperModel","getExpandedKeys","treeList","tiledArray","treeToTiledArray","treeLeafParentsArray","TreeSelectorWrapper","onTreeSelectorListChange","treeExpandedKeys","setTreeExpandedKeys","_treeSelectorWrapperM","serviceResponseHandle","_respData2","log","valueList","expandedKeys","tempValue","prev","mergeList","Set","getTreeSelectorList","onTreeExpand","TreeSelect","dropdownStyle","maxHeight","overflow","treeLine","treeData","TreeWrapperModel","setTreeList","resetTreeList","treeWrapperModels","treeWrapperModel","TreeWrapper","selectorTreeList","_treeWrapperModel$use","useUpdateEffect","filterLabel","filter","_item$label","tempItem","targetValues","getTreeDataList","onExpand","onCheck","checkedKeys","onSelect","multiple","treeFieldNames","newFieldNames","Tree","showLine","checkable","showLeafIcon","selectedKeys","Spin","spinning"],"mappings":";68CAIO,IAAMA,GAASC,kXCATC,IAAAA,GAAoB,SAApBA,IACX,IAAAC,EAA0BC,IAAlBC,IAAAA,cACR,IAAMC,EAA2BC,EAAQF,GAAiBA,EAAgB,GAC1E,OAAOC,OAGIE,GAAgB,SAAhBA,EAAiBC,GAC5B,IAAMH,EAAiBJ,KACvB,GAAII,EAAeI,SAASD,GAAO,CACjC,OAAO,KAET,OAAO,WAMIE,GAAkC,SAAlCA,EAAmCC,GAC9C,IAAMN,EAAiBJ,KACvB,GAAII,EAAeI,SAASE,EAAMH,MAAO,CACvC,OAAOI,EAACC,EAAD,CAAAC,SAAWH,EAAMG,WAE1B,OAAO,yGCJIC,GAAyC,SAAzCA,EAA0CJ,GACrD,OACEC,EAAA,MAAA,CAAKI,UAAU,gBAAfF,SACEF,EAACK,EAAD,CACEC,MAAON,EAACO,EAAD,CAASC,KAAK,aACrBC,KAAMV,EAAMU,KACZC,KAAMC,EAAYZ,EAAMW,MAAQ,KAAOX,EAAMW,KAH/CR,SAKGH,EAAMa,YAAYC,KAAI,SAACC,EAAMC,GAC5B,IAAKD,EAAM,OAAO,KAClB,IACEE,EASEF,EATFE,KACAC,EAQEH,EARFG,MACAC,EAOEJ,EAPFI,QACAC,EAMEL,EANFK,WACAC,EAKEN,EALFM,YACAC,EAIEP,EAJFO,eACAC,EAGER,EAHFQ,OACAC,EAEET,EAFFS,MACGC,KACDV,EAVJW,IAWA,GAAIH,EAAQ,OAAO,KACnB,GAAIH,IAAexB,GAAcwB,GAAa,OAAO,KACrD,IAAMO,EAAWT,EAAKU,GAAA,CAAKV,MAAAA,GAAUM,GAAUA,EAC/C,IAAMf,EAAOM,EAAKN,MAAQ,OAC1B,GAAIY,EAAa,CACf,OACEpB,EAAC4B,EAAD,CACEC,MAAOR,EACPS,OAAO,KACPC,WAAW,KACXC,UAAWd,EACXe,mBAAoB,KALtB/B,SAQEF,EAACkC,EAADP,GAAA,GAAYH,EAAZ,CAAwBN,QAASiB,UAAW3B,KAAMA,EAAM4B,OAAxD,KAA+Db,MAAOG,EAAtExB,SACGc,MAHED,GAQX,OACEsB,EAACH,EAADP,GAAA,GAAYH,EAAZ,CAAwBhB,KAAMA,EAAMe,MAAOG,EAAUY,IAAKvB,EAAOG,QAASA,IACvEF,WASfb,GAAcoC,aAAe,CAC3B9B,KAAM,2CCtDK+B,GAAiD,SAAjDA,EAAkDzC,GAC7D,IAAQ0C,EAA0C1C,EAA1C0C,MAAOC,EAAmC3C,EAAnC2C,SAAUnB,EAAyBxB,EAAzBwB,MAAUC,KAAezB,EAAlD0B,IACA,IAAMkB,EAASC,GAAQ,WACrB,GAAI7C,EAAM4C,OAAQ,OAAO5C,EAAM4C,OAC/B,GAAI5C,EAAM8C,SAAU,MAAO,sBAC3B,MAAO,eACN,CAAC9C,EAAM8C,SAAU9C,EAAM4C,SAE1B,IAAMG,EAAeC,EAAMC,gBAAe,SAACP,GACzC,GAAIA,EAAO,CACTC,GAAA,UAAA,EAAAA,EAAWO,EAAOR,GAAOE,OAAOA,QAC3B,CACLD,GAAA,UAAA,EAAAA,EAAWP,eAIf,IAAMe,EAAkBT,GAASU,EAAYC,OAAOX,GAASQ,EAAO,IAAII,KAAKZ,IAAUN,UAEvF,OACEnC,EAACsD,EAAD3B,GAAA,GACMH,EADN,CAEED,MAAKI,GAAA,CAAI4B,MAAO,QAAWhC,GAC3BkB,MAAOS,EACPR,SAAUI,8CCtBHU,GAA2D,SAA3DA,EAA4DzD,GACvE,IAAQ0C,EAA0C1C,EAA1C0C,MAAOC,EAAmC3C,EAAnC2C,SAAUnB,EAAyBxB,EAAzBwB,MAAUC,KAAezB,EAAlD0B,IAEA,IAAMkB,EAASC,GAAQ,WACrB,GAAI7C,EAAM4C,OAAQ,OAAO5C,EAAM4C,OAC/B,GAAI5C,EAAM8C,WAAa,KAAM,MAAO,sBACpC,MAAO,eACN,CAAC9C,EAAM8C,SAAU9C,EAAM4C,SAE1B,IAAMG,EAAeC,EAAMC,gBAAe,SAACS,GACzC,GAAIA,EAAQ,CACV,IAAyBA,EAAAA,GAAU,GAA5BC,EAAPC,EAAA,GAAeC,EAAfD,EAAA,GACAjB,GAAQ,UAARA,EAAAA,EAAW,CAACO,EAAOS,GAAQf,OAAOA,GAASM,EAAOW,GAAQjB,OAAOA,SAC5D,CACLD,GAAA,UAAA,EAAAA,EAAWP,eAIf,IAAuBM,EAAAA,GAAS,GAAzBoB,EAAPC,EAAA,GAAcC,EAAdD,EAAA,GAEA,IAAME,EACJH,GAASE,GAASZ,EAAYC,OAAOS,IAAUV,EAAYC,OAAOW,GAC9D,CAACd,EAAO,IAAII,KAAKQ,IAASZ,EAAO,IAAII,KAAKU,KAC1C5B,UAEN,OACEnC,EAACsD,EAAWW,kBACNzC,EADN,CAEED,MAAKI,GAAA,CAAI4B,MAAO,QAAWhC,GAC3BkB,MAAOuB,EACPtB,SAAUI,MCzBT,IAAMoB,GAAkE,CAC7EC,QAAS,CACPC,eAA8D,SAAAA,EAAAT,GAAA,IAA7CU,IAAAA,SAAUxC,IAAAA,MAAOyC,IAAAA,YAAaC,IAAAA,YAC7C,OAAO,SAACC,GACNA,EAAMH,SAAWA,EACjBG,EAAM3C,MAAQA,EACd2C,EAAMF,YAAcA,EACpBE,EAAMD,YAAcA,EACpBC,EAAMC,QAAU,OAGpBC,YAAc,SAAAA,IACZ,OAAO,SAACF,GACNA,EAAMC,QAAU,QAGpBE,kBAfO,SAAAA,EAeWC,GAChB,OAAO,SAACJ,GACNA,EAAMD,YAAc,MACpBC,EAAMH,SAAWO,KAIvBJ,MAAO,CACLC,QAAS,MACT5C,MAAO,GACPyC,YAAa,OCvCV,IAAMO,GAAkB,SAAlBA,EAAmB9E,GAC9B,OACEC,EAAA,MAAA,CAAKI,UAAU,qBAAfF,SACE4E,EAACzE,EAAD,CAAOI,KAAK,SAAZP,SAAA,CACEF,EAACkC,EAAWnC,GAAAA,GAAAA,EAAMgF,kBAAlB,CAAqC3E,UAAU,aAAac,QAASnB,EAAMiF,SAA3E9E,SACGH,EAAMgC,YAAc,QAEtBhC,EAAMkF,WAAa,MAClBjF,EAACkC,EAADP,GAAA,CACEnB,KAAK,UACL0E,KAAMlF,EAAAmF,EAAA,KACFpF,EAAMqF,cAHZ,CAIEhF,UAAU,SACVc,QAASnB,EAAMsF,KACfC,QAASvF,EAAMuF,QANjBpF,SAQGH,EAAM+B,QAAU,8FCd7B,IAAMyD,GAAa,SAAbA,IACJ,OACEvF,EAAA,MAAA,CAAKI,UAAU,uBAAfF,SACE4E,EAAA,MAAA,CAAK1E,UAAU,iBAAfF,SACE,CAAAF,EAAA,MAAA,CAAKI,UAAU,iBACfJ,EAAA,MAAA,CAAKI,UAAU,cAAfF,SAAA,sBAaKsF,GAAoC,SAApCA,EAAqCzF,GAChD,IAAQwE,EAAyFxE,EAAzFwE,YAAanE,EAA4EL,EAA5EK,UAA4EL,EAAAA,EAAjEwD,MAAAA,aAAQ,IAAxCkC,EAA6CvF,EAAoDH,EAApDG,SAAUwF,EAA0C3F,EAA1C2F,OAAQC,EAAkC5F,EAAlC4F,eAAmBnE,KAAezB,EAAjG0B,IACAmE,GAAU,WACRC,QAAQC,MACN,qKAED,IACH,OACEhB,EAACiB,EAADpE,GAAA,CACEvB,UAAW4F,EAAW,gBAAiB5F,GACvC6F,SAAU,MACVC,YAAa,MACbC,eAAgB,KAChB5C,MAAO,MACP6C,oBAAqB,CAAEC,SAAU9C,GACjC9C,KAAK,WACDe,EARN,CASEkE,OAAQA,GAAUA,IAAW,KAAOA,EAAS1F,EAAC6E,GAADlD,GAAA,GAAqBgE,IATpEzF,SAWE,CAAAF,EAAA,MAAA,CAAKI,UAAU,wBAAfF,SAAwCA,IACvCqE,GAAevE,EAACuF,GAZnB,SCrCJ,IAAMe,GAA6F,OAYtFC,GAA0B,SAA1BA,EAA2BjE,GACtC,IAAKgE,GAAahE,GAAM,CACtBgE,GAAahE,GAAOkE,EAAMtC,IAE5B,OAAOoC,GAAahE,ICMf,IAAM4B,GAAkE,CAC7EC,QAAS,CACPC,eAA8D,SAAAA,EAAAT,GAAA,IAA7CU,IAAAA,SAAUxC,IAAAA,MAAOyC,IAAAA,YAAaC,IAAAA,YAC7C,OAAO,SAACC,GACNA,EAAMH,SAAWA,EACjBG,EAAM3C,MAAQA,EACd2C,EAAMF,YAAcA,EACpBE,EAAMD,YAAcA,EACpBC,EAAMC,QAAU,OAGpBC,YAAc,SAAAA,IACZ,OAAO,SAACF,GACNA,EAAMC,QAAU,QAGpBE,kBAfO,SAAAA,EAeWC,GAChB,OAAO,SAACJ,GACNA,EAAMD,YAAc,MACpBC,EAAMH,SAAWO,KAIvBJ,MAAO,CACLC,QAAS,MACT5C,MAAO,GACPyC,YAAa,OCnDV,IAAMmC,GAAkB,SAAlBA,EAAmBC,EAAoBC,GAElD,OAAOf,EAAUc,EAAIC,ICFhB,IAAMC,GAAuB,SAAvBA,EAAwBF,EAAyBC,GAC5Df,GAAU,WACR,SAAeiB,IAAf,OAAA,IAAAC,SAAA,SAAAC,EAAAC,GACE,OAAMN,QAAAA,QAAAA,KAAIO,MAAA,SAAAC,GALhB,IAAI,OAAAH,IAAM,MAAUI,GAAC,OAAOH,EAAPG,MAKfH,WAEGH,MAEJF,ICKE,IAAM9B,GAAkB,SAAlBA,EAAmB9E,GAC9B,OACEC,EAAA,MAAA,CAAKI,UAAU,qBAAfF,SACE4E,EAACzE,EAAD,CAAOI,KAAK,SAAZP,SAAA,CACEF,EAACkC,EAAWnC,GAAAA,GAAAA,EAAMgF,kBAAlB,CAAqC3E,UAAU,aAAac,QAASnB,EAAMiF,SAA3E9E,SACGH,EAAMgC,YAAc,QAEtBhC,EAAMkF,WAAa,MAClBjF,EAACkC,EAADP,GAAA,CACEnB,KAAK,UACL0E,KAAMlF,EAAAmF,EAAA,KACFpF,EAAMqF,cAHZ,CAIEhF,UAAU,SACVc,QAASnB,EAAMsF,KACfC,QAASvF,EAAMuF,QANjBpF,SAQGH,EAAM+B,QAAU,oECV7B,IAAMyD,GAAa,SAAbA,IACJ,OACEvF,EAAA,MAAA,CAAKI,UAAU,wBAAfF,SACE4E,EAAA,MAAA,CAAK1E,UAAU,iBAAfF,SACE,CAAAF,EAAA,MAAA,CAAKI,UAAU,iBACfJ,EAAA,MAAA,CAAKI,UAAU,cAAfF,SAAA,kBAMR,IAAMkH,GAAsE,SAAtEA,EAAuErH,GAC3E,OACE+E,EAAC7E,EAAD,CAAAC,SACE,CAAAF,EAAA,MAAA,CAAKI,UAAU,yBAAfF,SAAyCH,EAAMG,WAC9CH,EAAM4F,eACL3F,EAACqH,GAAD,CAAAnH,SACEF,EAAC6E,GAAoB9E,GAAAA,GAAAA,EAAM4F,mBAE3B,SAKV,IAAM0B,GAAsB,SAAtBA,EAAuBtH,GAC3B,OAAOC,EAAA,MAAA,CAAKI,UAAU,wBAAfF,SAAwCH,EAAMG,gBAU1CoH,GAAqE,SAArEA,EAAsEvH,GACjF,IAAQwE,EAAiExE,EAAjEwE,YAAanE,EAAoDL,EAApDK,UAAoDL,EAAAA,EAAzCwD,MAAAA,aAAQ,IAAxCkC,EAA6CvF,EAA4BH,EAA5BG,SAAasB,KAAezB,EAAzE0B,IAEAgF,IAAgB,WACd,GAAI1G,EAAM,kBAAmB,CAC3B,MAAM,IAAIwH,MAAM,mDAEjB,IAEH,OACEzC,EAACiB,EAADpE,GAAA,CACEvB,UAAW4F,EAAW,iBAAkB5F,GACxC6F,SAAU,MACVC,YAAa,MACbC,eAAgB,KAChB5C,MAAO,MACP6C,oBAAqB,CAAEC,SAAU9C,GACjC9C,KAAK,WACDe,EARN,CASEkE,OAAQ,KATVxF,SAAA,CAWGqE,GAAevE,EAACuF,GAAD,IACfrF,OAKPoH,GAAcE,QAAUJ,GACxBE,GAAcG,OAASJ,GC9EvB,IAAMf,GAA6F,OAYtFoB,GAA2B,SAA3BA,EAA4BpF,GACvC,IAAKgE,GAAahE,GAAM,CACtBgE,GAAahE,GAAOkE,EAAMtC,IAE5B,OAAOoC,GAAahE,ICnBf,IAAMqF,GAAc,SAAdA,EAAeC,EAAyCC,GACnE,cAAcD,IAAa,UAAYA,EAAWA,GAAAA,UAAAA,EAAAA,EAAW,CAAEC,cAAAA,KCSjE,IAAMC,GAA+B,SAA/BA,EAAgC/H,GACpC,IAA6CA,EAAAA,EAAMgI,YAA3CC,IAAAA,eAAgBJ,IAAAA,SAAUK,IAAAA,OAClC,IAAMC,EAAsBF,EAA+CE,mBAE3E,IAAMC,EAAgBvF,GAAQ,WAC5B,GAAIgF,EAAU,MAAO,GACrB,IAAMnF,EAAQ/C,EAAQK,EAAM0C,OAAS1C,EAAM0C,MAAS,GACpD,IAAM2F,EAAWF,EAAmBE,SAAW,GAC/C,IAAK1I,EAAQ0I,IAAYA,EAAQC,SAAW,EAAG,CAC7C,OAAO5F,EAAM5B,KAAI,SAACC,GAAD,MAAW,CAAEwH,MAAOxH,EAAM2B,MAAO3B,MAEpD,IAAMyH,EAAa,GACnB9F,EAAM+F,SAAQ,SAAC1H,GACb,IAAM2H,EAASL,EAAQM,MAAK,SAACC,GAAD,OAAUA,EAAKlG,QAAU3B,KACrDyH,EAAWK,KAAKH,EAASA,EAAS,CAAEH,MAAOxH,EAAM2B,MAAO3B,OAE1D,OAAOyH,IACN,CAACX,EAAUM,EAAmBE,QAASrI,EAAM0C,QAEhD,GAAImF,EAAU,CACZ,OAAO5H,EAAC6I,EAASC,YAAUZ,EAApB,CAAwCzF,MAAO1C,EAAM0C,MAAOC,SAAU3C,EAAM2C,YAErF,OACE1C,EAAA,OAAA,CAAMI,UAAU,+BAAhBF,SACG+H,EACGA,EAAOlI,EAAM0C,OACb0F,EAActH,KAAI,SAACkI,EAAKhI,GAAN,OAChBf,EAACgJ,EAAD,CAAiB/H,MAAM,UAAvBf,SACG6I,EAAIT,OADGvH,SAQf,IAAMkI,GAAwB,SAAxBA,EAAyBlJ,GACpC,IAAQmJ,EAAkBnJ,EAAMgI,YAAxBmB,cAER,OACElJ,EAACmJ,EAAKC,WACAF,EADN,CAEEtJ,KAAMG,EAAMH,KACZQ,UAAW4F,EAAW,oCAAqCkD,GAAAA,UAAAA,EAAAA,EAAe9I,WAH5EF,SAKEF,EAAC8H,GAADnG,GAAA,GAAkC5B,QCnDjC,IAAMsJ,GAA4B,SAA5BA,EAA6BtJ,GACxC,IAA0CA,EAAAA,EAAMgI,YAAxCmB,IAAAA,cAAelB,IAAAA,eACvB,OACEhI,EAACmJ,EAAKC,WACAF,EADN,CAEEtJ,KAAMG,EAAMH,KACZQ,UAAW4F,EAAW,wCAAyCkD,GAAAA,UAAAA,EAAAA,EAAe9I,WAHhFF,SAKEF,EAACwC,GAAuBwF,GAAAA,GAAAA,EAAmDE,yBCDjF,IAAMoB,GAAkB,SAAlBA,EAAmBvJ,GACvB,IAA6CA,EAAAA,EAAMgI,YAA3CC,IAAAA,eAAgBJ,IAAAA,SAAUK,IAAAA,OAClC,IAAMC,EAAsBF,EAAwDE,mBAEpF,IAAMqB,EAAY3G,GAAQ,WACxB,IAAMH,EAAQ/C,EAAQK,EAAM0C,OAAS1C,EAAM0C,MAAS,GACpD,GAAImF,EAAU,OAAOzF,UACrB,OAAOM,EAAM+G,KAAK,OACjB,CAAC5B,EAAU7H,EAAM0C,QAEpB,GAAImF,EAAU,CACZ,OAAO5H,EAACwD,GAAD7B,GAAA,GAA4BuG,EAA5B,CAAgDzF,MAAO1C,EAAM0C,MAAOC,SAAU3C,EAAM2C,YAE7F,OAAO1C,EAAA,OAAA,CAAMI,UAAU,kCAAhBF,SAAmD+H,EAASA,EAAOlI,EAAM0C,OAAS8G,KAGpF,IAAME,GAAiC,SAAjCA,EAAkC1J,GAC7C,IAAQmJ,EAAkBnJ,EAAMgI,YAAxBmB,cACR,OACElJ,EAACmJ,EAAKC,WACAF,EADN,CAEEtJ,KAAMG,EAAMH,KACZQ,UAAW4F,EAAW,8CAA+CkD,GAAAA,UAAAA,EAAAA,EAAe9I,WAHtFF,SAKEF,EAACsJ,GAAD3H,GAAA,GAAqB5B,QCjCpB,IAAM2J,GAAgB,SAAhBA,EAAiB3J,GAC5B,IAA0CA,EAAAA,EAAMgI,YAAxCmB,IAAAA,cAAelB,IAAAA,eACvB,OACEhI,EAACmJ,EAAKC,WAASF,EAAf,CAA8BtJ,KAAMG,EAAMH,KAA1CM,SACEF,EAAC2J,EAAW3B,GAAAA,GAAAA,EAAuCE,yBCHlD,IAAM0B,GAAsB,SAAtBA,EAAuB7J,GAClC,IAA0CA,EAAAA,EAAMgI,YAAxCmB,IAAAA,cAAelB,IAAAA,eACvB,OACEhI,EAACmJ,EAAKC,WACAF,EADN,CAEEtJ,KAAMG,EAAMH,KACZQ,UAAW4F,EAAW,kCAAmCkD,GAAAA,UAAAA,EAAAA,EAAe9I,WAH1EF,SAKEF,EAAC6J,EAAiB7B,GAAAA,GAAAA,EAA6CE,yBCCrE,IAAM4B,GAA4B,SAA5BA,EAA6B/J,GACjC,IAA6CA,EAAAA,EAAMgI,YAA3CC,IAAAA,eAAgBJ,IAAAA,SAAUK,IAAAA,OAClC,IAAMC,EAAsBF,EAA4CE,mBAExE,IAAMqB,EAAY3G,GAAQ,WACxB,GAAIgF,EAAU,MAAO,GACrB,IAAMnF,EAAQ1C,EAAM0C,MACpB,IAAM2F,EAAWF,EAAmBE,SAAW,GAC/C,IAAK1I,EAAQ0I,IAAYA,EAAQC,SAAW,EAAG,CAC7C,OAAO5F,EAET,IAAMgG,EAASL,EAAQM,MAAK,SAAC5H,GAAD,OAAUA,EAAK2B,QAAUA,KACrD,OAAOgG,GAAA,UAAA,EAAAA,EAAQH,QAAS7F,IACvB,CAACmF,EAAUM,EAAmBE,QAASrI,EAAM0C,QAEhD,IAAMC,EAAWK,EAAMC,gBAAe,SAAC+G,GACrChK,EAAM2C,UAAN,UAAA,EAAA3C,EAAM2C,SAAWqH,EAAEtB,OAAOhG,UAG5B,GAAImF,EAAU,CACZ,OAAO5H,EAACgK,EAAMlB,YAAUZ,EAAjB,CAAqCzF,MAAO1C,EAAM0C,MAAOC,SAAUA,KAE5E,OACE1C,EAAA,OAAA,CAAMI,UAAU,4BAAhBF,SACG+H,EAASA,EAAOlI,EAAM0C,OAAS8G,EAAYvJ,EAACgJ,EAAD,CAAK/H,MAAM,UAAXf,SAAsBqJ,IAAmB,QAKpF,IAAMU,GAAqB,SAArBA,EAAsBlK,GACjC,IAAQmJ,EAAkBnJ,EAAMgI,YAAxBmB,cAER,OACElJ,EAACmJ,EAAKC,WACAF,EADN,CAEEtJ,KAAMG,EAAMH,KACZQ,UAAW4F,EAAW,iCAAkCkD,GAAAA,UAAAA,EAAAA,EAAe9I,WAHzEF,SAKEF,EAAC8J,GAADnI,GAAA,GAA+B5B,QCnCrC,IAAMmK,GAA2B,CAC/BC,aAAc,GACdC,aAAc,MACdC,cAAe,QAGjB,IAAMC,GAAkE,CACtEnG,QAAS,CACPoG,iBAAkB,SAAC3F,EAAAA,GACjB,OAAO,SAACJ,GACNA,EAAM2F,aAAevF,GAAU,GAC/BJ,EAAM6F,cAAgB,oBAG1BG,mBAAoB,SAAMA,IACxB,OAAO,SAAChG,GACNA,EAAM2F,aAAe,KAGzBM,oBAAqB,SAAC7F,EAAAA,GACpB,OAAO,SAACJ,GACNA,EAAM6F,cAAgBzF,KAI5BJ,MAAO0F,IAGT,IAAMQ,GAA4F,GAQ3F,IAAMC,GAAuB,SAAvBA,EAAwBrI,GACnC,IAAKoI,GAAsBpI,GAAM,CAC/BoI,GAAsBpI,GAAOkE,EAAM8D,IAErC,OAAOI,GAAsBpI,kKCqCxB,IAAMsI,GAAkBC,GAAwD,SAAC9K,EAAO+K,GAC7F,IACEC,EAUEhL,EAVFgL,cACAC,EASEjL,EATFiL,cACAC,EAQElL,EARFkL,qBACAC,EAOEnL,EAPFmL,qBACA5G,EAMEvE,EANFuE,YACA6G,EAKEpL,EALFoL,gBACAhB,EAIEpK,EAJFoK,aACAiB,EAGErL,EAHFqL,SACAC,EAEEtL,EAFFsL,WACG7J,KACDzB,EAXJ0B,IAaA,IAAM6J,EAAWhH,IAAgB,UAAY6F,IAAiBhI,UAC9D,IAAMoJ,EAAmBR,GAAiB,GAC1C,IAAMS,EAA0BP,GAAwB,GACxD,IAAMQ,EAAwBC,IAC9B,IAA8BC,EAAAA,EAAS,OAAhCrG,EAAPsG,EAAA,GAAgBC,EAAhBD,EAAA,GACA,IAAAE,EAAyBnB,GAAqBS,GAAUW,WAAjDvH,EAAPsH,EAAA,GAAc3H,EAAd2H,EAAA,GAEA,IAAME,EAAe,SAAfA,EAAgBvJ,GACpB,OAAOA,IAAU,IAAMwJ,EAAkBxJ,IAG3C,IAAMyJ,EAA6B,SAA7BA,EAA8BC,GAClC,IAAMC,EAAeb,EAAiBc,uBAClCd,EAAiBc,uBAAuBF,GACxCA,EACJ,OAAOG,EAAsBF,GAAgB,GAAIf,IAGnD,IAAMkB,EAAyBxJ,EAAMC,gBACnC,SAAOwJ,EAAqBC,GAA5B,OAAA,IAAA3F,SAAA,SAAAC,EAAAC,GAAA,IAKU0F,EACAC,EAEEC,EAYEC,EAIFC,EACAC,EAvJhB,IAAIC,EAAA,WAAJ,IAAI,OAAAjG,IAAM,MAAUI,GAAC,OAAOH,EAAPG,KAArB,IAAI8F,EAAA,SAiKWnH,GAjKf,IAkKQ+F,EAAW,YACNqB,EAAQpH,MAAOA,EAAMoH,SAAsB,aAnKxD,OAAOF,IAAG,MAAU7F,GAAC,OAAOH,EAAPG,KA+Hf,IACE,IAAKoE,EAAiB4B,UAAW,CAC/B,MAAM,IAAI5F,MAAM,wBAEZmF,EAAqBnB,EAAiBmB,mBACtC9H,EAASwI,EAAO,GAAI7B,EAAiB3G,QAC3C,GAAI8H,EAAoB,CAChBE,EAAUF,EAAmBhE,MAAK,SAACpG,GACvC,OAAO0J,EAAapH,EAAOtC,OAE7B,GAAIsK,EAAS,CACX/G,QAAQwH,KAA6BX,wBAAAA,EAAmBlD,KAAK,KAA7D,QACA,OAAAzC,KA3IZ,IAAIuG,EAAA,WAAJ,IAAA,OAAON,IAAG,MAAU7F,GAAC,OAAO8F,EAAP9F,KAArB,IAAIoG,EAAA,SA2JazH,GA3JjB,IA4JUD,QAAQC,MAAMA,GACd+F,EAAW,YACN1H,EAAQsG,oBAAoB,sBAC5ByC,EAAQpH,MAAMA,EAAMoH,SAAW,UA/J9C,OAAOI,IAAG,MAAUnG,GAAC,OAAO8F,EAAP9F,KA8Ib,IACE0E,EAAW,WACN1H,EAAQsG,oBAAoB,eACjC,KAAMwB,EAAkBO,KAAgBP,EAAkBQ,KAAcnB,EAAU,CAC1EuB,EAAU1B,GAAmB,UACnCvG,EAAOiI,GAAWL,EAClB5H,EAAO,MAAQ6H,EAEA,OAAMlB,QAAAA,QAAAA,EAAiB4B,WAAjB5B,UAAAA,EAAAA,EAAiB4B,UAAYvI,IAAOqC,MAAA,SAAAuG,GAtJrE,IAsJgBrB,EAAWqB,EACXT,EAAsBb,EAA2BC,GACvDN,EAAW,OACXX,GAAA,UAAA,EAAAA,EAAuB6B,QAClB5I,EAAQoG,iBAAiBwC,GA1JxC,OAAOO,IAAG,MAAUnG,GAAC,OAAOoG,EAAPpG,MAsJMoG,GAKjB,MAAOzH,GAAOyH,EAAPzH,IAMT,MAAOA,GAAOmH,EAAPnH,UAObW,GAAgB,WACd,GAAI0D,EAAc,MACXhG,EAAQoG,iBAAiB+B,EAAsBnC,GAAgB,GAAIkB,IACxE,OAEF,GAAIC,EAAU,OAEd,IAAMmC,EAAgB9C,GAAqBS,GAAUsC,WAErD,GACElC,EAAwBnD,OAAS,GACjCsF,EAAaF,EAAcpD,cAAe,CAAC,gBAAiB,SAC5D,MACKkC,OAENf,GAEH/E,GAAgB,WACd,GAAI6E,EAAU,CACZ,GAAIU,EAAajM,EAAM0C,OAA2B,CAChDyI,GAAA,UAAA,EAAAA,EAAuB,SAClB/G,EAAQqG,yBACR,CAEL,GAAIzK,EAAM0C,QAAUgJ,EAAsBmC,QAAS,MAC5CrB,EAAuBpK,UAAWpC,EAAM0C,YAIlD+I,EAAwBqC,OAAO,CAAC9N,EAAM0C,SAEzCqL,EAAoBhD,GAAK,WACvB,MAAO,CACLiD,oBAAqB,SAAMA,SACpB5J,EAAQqG,sBAEfwD,gBAAiB,SAAMA,IACrB,OAAOxJ,EAAM2F,kBAKnB,IAAM8D,EAAelL,EAAMC,gBAAe,SAACkL,EAAeC,GACxD,OAAQA,GAAD,UAAA,EAACA,EAAQjO,UAA+BkO,cAAcC,QAAQH,EAAME,gBAAkB,KAG/F,IAAME,EAAWvL,EAAMwL,qBAAoB,SAAC9L,GAC1C,GAAIA,EAAO,MACJ8J,EAAuB9J,OACvB,MACA0B,EAAQqG,wBAEd,KAEH,IAAM9H,EAAWK,EAAMC,gBAAe,SAACP,GACrCgJ,EAAsBmC,QAAUnL,EADgD,IAAA,IAAA+L,EAAAC,UAAApG,OAAhBqG,EAAgB,IAAAC,MAAAH,EAAA,EAAAA,EAAA,EAAA,GAAAI,EAAA,EAAAA,EAAAJ,EAAAI,IAAA,CAAhBF,EAAgBE,EAAA,GAAAH,UAAAG,GAEhF7O,EAAM2C,UAAN3C,UAAAA,EAAAA,EAAM2C,SAAWD,EAAOiM,MAE1B,IAAMG,EAAiB9L,EAAMC,gBAAe,gBACrCuJ,OAGP,IAAMuC,EAAmB9O,EAAC+O,EAAOC,OAAR,CAAevM,MAAM,GAArBvC,SAAA,OACzB,OACE4E,EAACiK,EAADpN,GAAA,CACEsN,WAAY,KACZC,WAAY,MACR1N,EAHN,CAIEiB,MAAOwJ,EAAkBlM,EAAM0C,OAASN,UAAYpC,EAAM0C,MAC1D0M,gBACEnP,EAACoP,GAAD,CAAiB/E,cAAe7F,EAAM6F,cAAewE,eAAgBA,IAEvEvJ,QAASA,EACTgJ,SAAUhD,EAAWgD,EAAWnM,UAChC8L,aAAc3C,EAAW,MAAQ2C,EACjCvL,SAAUA,EACV2I,WAAYlJ,UACZkN,WACE7K,EAAM6F,gBAAkB,gBACtBrK,EAAAsP,EAAA,CAAcC,KAAMjK,EAASpE,QAAS2N,IACpC1M,UAhBRjC,SAAA,CAmBG8K,IAAkB,KAAO8D,EAAmB9D,EAC5CxG,EAAM2F,aAAatJ,KAAI,SAACC,GACvB,OACEd,EAAC+O,EAAOC,OAAR,CAAevM,MAAO3B,EAAK2B,MAAO6F,MAAOxH,EAAKwH,MAA9CpI,SACGY,EAAKwH,OADkDxH,EAAK2B,iBASzE,IAAM2M,GAAkB,SAAlBA,EAAmBrP,GAIvB,IAAMyP,EAAc5M,GAAQ,WAC1B,GAAI7C,EAAMsK,gBAAkB,gBAAiB,CAC3C,MAAO,cACF,GAAItK,EAAMsK,gBAAkB,kBAAmB,CACpD,MAAO,OAET,MAAO,UACN,CAACtK,EAAMsK,gBACV,OACErK,EAACyP,EAAD,CACEC,MAAOD,EAAME,uBACbH,YAAaA,EACbpP,UAAW,8BAHbF,SAKGH,EAAMsK,gBAAkB,iBACvBrK,EAACkC,EAAD,CAAQ1B,KAAK,UAAUU,QAASnB,EAAM8O,eAAtC3O,SAAA,cC7QR,IAAMoJ,GAAkB,SAAlBA,EAAmBvJ,GACvB,IAA6CA,EAAAA,EAAMgI,YAA3CC,IAAAA,eAAgBJ,IAAAA,SAAUK,IAAAA,OAClC,IAAMC,EAAsBF,EAA+CE,mBAE3E,IAAMC,EAAgBvF,GAAQ,WAC5B,IAAMH,EAAQ/C,EAAQK,EAAM0C,OAAS1C,EAAM0C,MAAS,GACpD,GAAImF,EAAU,MAAO,GACrB,IAAMuC,EAAemC,EACnBpE,EAAmBiC,cAAgB,GACnCjC,EAAmBmD,YAErB,GAAIlB,EAAa9B,SAAW,EAAG,CAC7B,OAAO5F,EAAM5B,KAAI,SAACC,GAAD,MAAW,CAAEwH,MAAOxH,EAAM2B,MAAO3B,MAEpD,IAAMyH,EAAa,GACnB9F,EAAM+F,SAAQ,SAAC1H,GACb,IAAM2H,EAAS0B,EAAazB,MAAK,SAACC,GAAD,OAAUA,EAAKlG,QAAU3B,KAC1DyH,EAAWK,KAAKH,EAASA,EAAS,CAAEH,MAAOxH,EAAM2B,MAAO3B,OAE1D,OAAOyH,IACN,CAACX,EAAUM,EAAmBmD,WAAYnD,EAAmBiC,aAAcpK,EAAM0C,QAEpF,GAAImF,EAAU,CACZ,OAAO5H,EAAC4K,GAADjJ,GAAA,GAAqBuG,EAArB,CAAyCzF,MAAO1C,EAAM0C,MAAOC,SAAU3C,EAAM2C,YAEtF,OACE1C,EAAA,OAAA,CAAMI,UAAU,yBAAhBF,SACG+H,EACGA,EAAOlI,EAAM0C,OACb0F,EAActH,KAAI,SAACkI,EAAKhI,GAAN,OAChBf,EAACgJ,EAAD,CAAiB/H,MAAM,UAAvBf,SACG6I,EAAIT,OADGvH,SAQf,IAAM6O,GAA0B,SAA1BA,EAA2B7P,GACtC,IAAQmJ,EAAkBnJ,EAAMgI,YAAxBmB,cAER,OACElJ,EAACmJ,EAAKC,WACAF,EADN,CAEEtJ,KAAMG,EAAMH,KACZQ,UAAW4F,EAAW,sCAAuCkD,GAAAA,UAAAA,EAAAA,EAAe9I,WAH9EF,SAKEF,EAACsJ,GAAD3H,GAAA,GAAqB5B,QCvD3B,IAAM8P,GAAsB,SAAtBA,EAAuB9P,GAIvB,IAAA+P,EAAAC,EACJ,IAAMtN,EAAQG,GAAQ,WAAM,IAAAoN,EAC1B,IAAIjQ,EAAAA,EAAMgI,cAAV,MAAIiI,EAAmB/H,OAAQ,OAAO9F,UACtC,IAAM8N,EACJC,GAASnQ,EAAM0C,QAAU0N,GAASpQ,EAAM0C,QAAU2N,GAAUrQ,EAAM0C,SAAW1C,EAAM0C,MACrF,IAAKwN,EAAY,CACfpK,QAAQwH,KAAwBtN,mBAAAA,EAAMH,KAAtC,OAAiDyQ,KAAKC,UAAUvQ,EAAM0C,OAAtE,aAEF,OAAOwN,EAAalQ,EAAM0C,MAAQN,YACjC,EAACpC,EAAAA,EAAMgI,0BAAN+H,EAAmB7H,OAAQlI,EAAMH,KAAMG,EAAM0C,QAEjD,OAAOzC,EAAA,OAAA,CAAMI,UAAU,qBAAhBF,WAAsCH,EAAAA,EAAMgI,cAAaE,UAAAA,EAAAA,EAAAA,QAAAA,UAAAA,EAAAA,EAAAA,OAASlI,EAAM0C,SAAUA,KAGpF,IAAM8N,GAAe,SAAfA,EAAgBxQ,GAC3B,OACEC,EAACmJ,EAAKC,KAAN,CAAWoH,QAAX,KAAmB5Q,KAAMG,EAAMH,KAA/BM,SACEF,EAAC6P,GAAD,CAAqBjQ,KAAMG,EAAMH,KAAMmI,YAAahI,EAAMgI,iBCvBzD,IAAM0I,GAAmB,SAAnBA,EAAoB1Q,GAC/B,IAA0CA,EAAAA,EAAMgI,YAAxCmB,IAAAA,cAAelB,IAAAA,eACvB,OACEhI,EAACmJ,EAAKC,WAASF,EAAf,CAA8BtJ,KAAMG,EAAMH,KAA1CM,SACEF,EAAC2J,EAAM+G,SAAc1I,GAAAA,GAAAA,EAA0CE,yECoDxDyI,GAAwC,SAAxCA,EAAyC5Q,GACpD,IAAQ2C,EAAkD3C,EAAlD2C,SAAUkO,EAAwC7Q,EAAxC6Q,cAAenO,EAAyB1C,EAAzB0C,MAAUjB,KAAezB,EAA1D0B,IACA,IAAAmK,EAAoCD,IAA7BkF,EAAPjF,EAAA,GAAmBkF,EAAnBlF,EAAA,GACA,IAAMP,EAAa+B,EACjB,CACE2D,IAAK,MACLnR,KAAM,OACNoR,IAAK,OAEPjR,EAAMsL,YAGR5E,IAAgB,WACdqK,EACErO,GAAAA,UAAAA,EAAAA,EAAO5B,KAAI,SAACC,GACV,MAAO,CACLiQ,IAAKjQ,EAAKuK,EAAW0F,KACrBnR,KAAMkB,EAAKuK,EAAWzL,MACtBoR,IAAKlQ,EAAKuK,EAAW2F,YAI1B,CAAC3F,EAAWzL,KAAMyL,EAAW0F,IAAK1F,EAAW2F,IAAKvO,IAErD,IAAMwO,EAAiBlO,EAAMC,gBAAe,SAACkO,GAC3C,IAAMC,EAAWD,EAAKC,SACtB,GAAID,EAAKE,KAAKC,SAAW,OAAQ,CAC/B,IAAMlF,EAAW+E,EAAKE,KAAKE,SAC3B,GAAInF,EAASoF,OAAS,OAAQ,CAC5B,IAAMC,EACJzR,EAAMsM,uBAAyBtM,EAAMsM,uBAAuBF,EAASsF,MAAQtF,EAASsF,KAExFD,EAAOnG,EAAW0F,KAAOS,EAAOnG,EAAW0F,MAAQG,EAAKE,KAAKL,IAC7DS,EAAOnG,EAAWzL,MAAQ4R,EAAOnG,EAAWzL,OAASsR,EAAKE,KAAKxR,KAC/D,GAAIG,EAAM2R,WAAa,EAAG,CACxBhP,aAAAA,EAAAA,EAAW,CAAC8O,QACP,CACL9O,GAAA,UAAA,EAAAA,GAAYD,GAAS,IAAIoL,OAAO2D,SAE7B,CACL,GAAIZ,EAAe,CACjBA,EAAczE,EAASe,aAClB,MACAA,EAAQpH,MAAOqG,EAASe,SAAsB,aAErDiE,EAASA,EAAS9I,OAAS,GACtB8I,GAAAA,GAAAA,EAASA,EAAS9I,OAAS,GADhC,CAEEgJ,OAAQ,gBAGP,GAAIH,EAAKE,KAAKC,SAAW,UAAW,CACzC,IAAMN,EAAMG,EAAKE,KAAKL,IACtB,IAAMY,EAAalP,IAAUN,UAAgBM,GAAAA,OAAAA,GAAS,GACtD,IAAMmP,EAAcD,EAAWE,WAAU,SAAC/Q,GACxC,IAAMgR,EAAUhR,EAAKuK,EAAW0F,KAChC,OAAOe,IAAYf,KAErB,GAAIa,GAAe,EAAG,CACpBD,EAAWI,OAAOH,EAAa,GAEjClP,GAAA,UAAA,EAAAA,EAAWiP,QACN,GAAIT,EAAKE,KAAKC,SAAW,QAAS,CACvC,GAAIT,EAAe,CACjBA,QACK,MACA1D,EAAQpH,MAAM,cAIvBgL,EAAa,GAAAjD,OAAKsD,IAClBpR,EAAMkR,gBAAN,UAAA,EAAAlR,EAAMkR,eAAiBC,MAGzB,OACElR,EAACgS,EAADrQ,GAAA,GACMH,EADN,CAEEkB,SAAUuO,EACVE,SAAUN,EACVzQ,UAAW4F,EAAW,mBAAoBxE,EAAWpB,WAJvDF,SAMGsB,EAAWyQ,SAAW,KACrBjS,EAACkS,GAAD,CAAeC,SAAU3Q,EAAW2Q,SAApCjS,SAA+CH,EAAMG,eAM7D,IAAMgS,GAAmD,SAAnDA,EAAoDnS,GACxD,GAAIA,EAAMG,SAAU,OAAOF,EAACC,EAAD,CAAAC,SAAWH,EAAMG,WAC5C,GAAIH,EAAMoS,WAAa,eAAgB,CACrC,OACErN,EAAA,MAAA,CAAA5E,SAAA,CACEF,QACAA,EAAA,MAAA,CAAKuB,MAAO,CAAE6Q,UAAW,GAAzBlS,SAAA,YAIN,GAAIH,EAAMoS,WAAa,UAAW,CAChC,OACEnS,EAACkC,EAAD,CAAQ1B,KAAK,UAAU6R,MAAvB,KAAAnS,SAAA,WAKJ,OACEF,EAACkC,EAAD,CAAQ1B,KAAK,UAAU6R,MAAvB,KAAAnS,SAAA,gCC/JJ,IAAMoS,GAA+B,SAA/BA,EACJvS,GAEA,IAA6CA,EAAAA,EAAMgI,YAA3CC,IAAAA,eAAgBC,IAAAA,OAAQL,IAAAA,SAChC,IAAqCI,EAAAA,EAA4CE,mBAAzEhI,IAAAA,SAAasB,EAArB+Q,GAAAC,EAAA/Q,IACA,GAAImG,EAAU,CACZ,OACE5H,EAAC2Q,GAADhP,GAAA,CAAewQ,SAAS,QAAW3Q,EAAnC,CAA+CiB,MAAO1C,EAAM0C,MAAOC,SAAU3C,EAAM2C,SAAnFxC,SACGA,KAIP,OACEF,EAAA,MAAA,CAAKI,UAAU,+BAAfF,SACG+H,EACCA,EAAOlI,EAAM0C,OAEbzC,EAAC2Q,GAADhP,GAAA,CAAewQ,SAAS,QAAW3Q,EAAnC,CAA+CiB,MAAO1C,EAAM0C,MAAOwP,SAAU,WAM9E,IAAMQ,GAAwB,SAAxBA,EAAyB1S,GACpC,IAAQmJ,EAAkBnJ,EAAMgI,YAAxBmB,cACR,OACElJ,EAACmJ,EAAKC,WACAF,EADN,CAEEtJ,KAAMG,EAAMH,KACZQ,UAAW4F,EAAW,oCAAqCkD,GAAAA,UAAAA,EAAAA,EAAe9I,WAH5EF,SAKEF,EAACsS,GAAD3Q,GAAA,GAAkC5B,QCfjC,IAAM2S,GAAkB,SAAlBA,EAAmB3S,GAC9B,IAAqCA,EAAAA,EAAMgI,YAAnCC,IAAAA,eAAgBJ,IAAAA,SACxB,IAAM+K,EAAchL,GAAYC,EAAU7H,EAAM8H,eAChD,IAAME,EAAcqF,EAAO,GAAIrN,EAAMgI,YAAa,CAAEH,SAAU+K,IAE9D,IAAMC,EAAc,CAClBhT,KAAMG,EAAMH,KACZmI,YAAAA,GAGF,IAAIC,GAAc,UAAdA,EAAAA,EAAgBxH,QAAS,SAAWmS,EAAa,CACnD,OAAO3S,EAAC0J,GAAkBkJ,GAAAA,GAAAA,SACrB,IAAI5K,GAAA,UAAA,EAAAA,EAAgBxH,QAAS,eAAiBmS,EAAa,CAChE,OAAO3S,EAAC4J,GAAwBgJ,GAAAA,GAAAA,SAC3B,IAAI5K,GAAA,UAAA,EAAAA,EAAgBxH,QAAS,YAAcmS,EAAa,CAC7D,OAAO3S,EAACyQ,GAAqBmC,GAAAA,GAAAA,SACxB,IAAI5K,GAAA,UAAA,EAAAA,EAAgBxH,QAAS,qBAAuBmS,EAAa,CACtE,OAAO3S,EAACqJ,GAA8BuJ,GAAAA,GAAAA,SACjC,IAAI5K,GAAc,UAAdA,EAAAA,EAAgBxH,QAAS,yBAA0B,CAC5D,OAAOR,EAACyJ,GAAmCmJ,GAAAA,GAAAA,SACtC,IAAI5K,GAAc,UAAdA,EAAAA,EAAgBxH,QAAS,kBAAmB,CACrD,OAAOR,EAAC4P,GAA4BgD,GAAAA,GAAAA,SAC/B,IAAI5K,GAAc,UAAdA,EAAAA,EAAgBxH,QAAS,gBAAiB,CACnD,OAAOR,EAACiJ,GAA0B2J,GAAAA,GAAAA,SAC7B,IAAI5K,GAAc,UAAdA,EAAAA,EAAgBxH,QAAS,aAAc,CAChD,OAAOR,EAACiK,GAAuB2I,GAAAA,GAAAA,SAC1B,IAAI5K,GAAc,UAAdA,EAAAA,EAAgBxH,QAAS,gBAAiB,CACnD,OAAOR,EAACyS,GAA0BG,GAAAA,GAAAA,SAC7B,IAAI5K,GAAc,UAAdA,EAAAA,EAAgBxH,QAAS,SAAU,CAC5C,OAAOwH,EAAeE,mBAAmB,CACvCtI,KAAMG,EAAMH,KACZgI,SAAU+K,EACVE,aAAc9S,EAAM8S,eAGxB,OAAO7S,EAACuQ,GAAiBqC,GAAAA,GAAAA,KC1CpB,IAAME,GAAW,SAAXA,EAAY/S,GACvB,IAAMgT,EAAO5J,EAAK6J,kBAClB,IAOIjT,EAAAA,EAAMkT,eANRC,IAAAA,uBACAC,IAAAA,mBACAC,IAAAA,sBACAC,IAAAA,2BACAC,IAAAA,0BACAC,IAAAA,oBAEF,OACEvT,EAACmJ,EAAKqK,KAAN,CAAW5T,KAAMG,EAAMH,KAAvBM,SACG,WAACuT,EAAD9P,GAAA,IAAW+P,IAAAA,IAAKC,IAAAA,OAAhB,OACC7O,EAAA8O,EAAA,CAAA1T,SACGgT,CAAAA,EACGA,EAAuB,CACrBrL,cAAe9H,EAAM8H,cACrB6L,IAAAA,EACIjR,YACF,OAAOsQ,EAAKc,cAAc9T,EAAM8S,iBAGpC,KACHY,EAAO5S,KAAI,SAACiT,EAAY/S,GACvB,IAAMgT,EAAcZ,EAAmBzK,MAAK,SAAC5H,GAAD,OAC1C6G,GAAY7G,EAAK8G,SAAU7H,EAAM8H,kBAEnC,IAAMzH,EAAY4F,EAChB,+BADgB,gCAEgBjG,EAAMH,KAAK,GAC3C,CAAE,wCAAyCmU,IAE7C,OACEjP,EAAA,MAAA,CAAiB1E,UAAWA,EAA5BF,SACGmT,CAAAA,EACGA,EAA2B,CACzBK,IAAAA,EACAC,OAAQ,SAAMA,IACZA,EAAO5S,IAETiT,kBAAmBjT,EACnB8G,cAAe9H,EAAM8H,cACjBpF,YACF,OAAOsQ,EAAKc,cAAkB9T,GAAAA,OAAAA,EAAM8S,aAAciB,CAAAA,EAAWlU,WAGjE,KACJkF,EAACzE,EAAD,CAAAH,SACGiT,CAAAA,EAAmBtS,KAAI,SAACoT,EAAWlT,GAClC,OACEf,EAAC0S,GAAD,CACE9S,KAAM,CAACkU,EAAWlU,KAAMqU,EAAUC,WAClCnM,YAAakM,EAEbpM,cAAe9H,EAAM8H,cACrBgL,uBAAkB9S,EAAM8S,aAAciB,CAAAA,EAAWlU,QAF5CmB,MAMVgT,EACC/T,EAACmU,GAAD,CACEZ,oBAAqBA,EACrBI,OAAQ,SAAMA,IACZA,EAAO5S,IAETA,MAAOA,IAEP,QAELuS,EACGA,EAA0B,CACxBI,IAAAA,EACAM,kBAAmBjT,EACnB8G,cAAe9H,EAAM8H,cACrB8L,OAAQ,SAAMA,IACZA,EAAO5S,IAEL0B,YACF,OAAOsQ,EAAKc,cAAkB9T,GAAAA,OAAAA,EAAM8S,aAAciB,CAAAA,EAAWlU,WAGjE,OAhDImB,MAoDbqS,EACGA,EAAsB,CACpBvL,cAAe9H,EAAM8H,cACrB6L,IAAAA,EACIjR,YACF,OAAOsQ,EAAKc,cAAc9T,EAAM8S,iBAGpC,YAOd,IAAMsB,GAAqB,SAArBA,EAAsBpU,GAK1B,OACEC,EAACmJ,EAAKC,KAAN,CAAAlJ,SACGH,EAAMwT,oBACLxT,EAAMwT,oBAAoB,CAAEI,OAAQ5T,EAAM4T,OAAQK,kBAAmBjU,EAAMgB,QAE3Ef,EAACkC,EAAD,CAAQ1B,KAAK,OAAO4B,OAApB,KAA2B8C,KAAMlF,EAAjCoU,GAAA,IAAqDlT,QAASnB,EAAM4T,OAApEzT,SAAA,UC/GD,IAAMmU,GAAe,SAAfA,EAAgBtU,GAC3B,GAAIA,EAAMgI,YAAa,CACrB,GAAIrI,EAAQK,EAAMgI,YAAY,uBAAwB,CACpD,IAAMkL,EAAiBlT,EAAMgI,YAC7B,OACE/H,EAAC8S,GAAD,CACElT,KAAMG,EAAMH,KACZiT,aAAc9S,EAAM8S,aACpBI,eAAgBA,EAChBpL,cAAe9H,EAAM8H,oBAGpB,CACL,OACE7H,EAAC0S,GAAD,CACE9S,KAAMG,EAAMH,KACZmI,YAAahI,EAAMgI,YACnBF,cAAe9H,EAAM8H,cACrBgL,aAAc9S,EAAM8S,gBAK5B,OAAO7S,EAACuQ,GAAD,CAAc3Q,KAAMG,EAAMH,mDCetB0U,GAAgB,SAAhBA,EAAiBvU,GAA8B,IAAAwU,EAC1D,IAAMC,EAAU5R,GAAQ,WACtB,IAAK7C,EAAMyU,QAAS,MAAO,GAC3B,OAAOzU,EAAMyU,QAAQ3T,KAAI,SAAC4T,GACxB,IAAQ1M,EAAmD0M,EAAnD1M,YAAa2M,EAAsCD,EAAtCC,cAAkBC,KAAoBF,EAA3DhT,IACA,OAAAE,GAAA,CACEiT,OAAQ,SAAMA,IAAA,IAAAC,EACZ,MAAO,CACLC,SAAQ/U,EAAAA,EAAMgV,aAAN,UAAA,EAAAF,EAAkBG,oBAAqB,YAGhDL,EANL,CAOE1M,OAAQ,SAAAA,EAACgN,EAAQC,GACf,GAAIR,EAAe,CACjB,OACEA,EAAc,CACZ9U,KAAI,GAAAiO,OAAM9N,EAAMH,MAAMsV,EAAOtV,OAC7BiI,cAAeqN,EAAOtV,KACtBuV,UAAWD,EAAOC,aACd,GAGV,OACEnV,EAACqU,GAAD,CACEzU,KAAM6U,EAAWW,UAAY,CAACF,EAAOtV,KAAM6U,EAAWW,WAAa,CAACF,EAAOtV,MAC3EiT,aACE4B,EAAWW,UAAX,GAAAvH,OACQ9N,EAAMH,KAAMsV,CAAAA,EAAOtV,KAAM6U,EAAWW,YAD5C,GAAAvH,OAEQ9N,EAAMH,KAAMsV,CAAAA,EAAOtV,OAE7BmI,YAAaA,EACbF,cAAeqN,EAAOtV,eAM/B,CAACG,EAAMyU,QAASzU,EAAMH,MAAtB2U,EAA4BxU,EAAMgV,yBAANR,EAAkBS,oBAEjD,OACEhV,EAAA,MAAA,CAAKI,UAAU,iBAAfF,SACEF,EAACmJ,EAAKqK,KAAN,CAAW5T,KAAMG,EAAMH,KAAMyV,MAAOtV,EAAMsV,MAA1CnV,SACG,SAACuT,EAAAA,EAAQ6B,GACR,OACExQ,EAAC7E,EAAD,CAAAC,SAAA,CACGH,EAAMwV,oBAAsBxV,EAAMwV,oBAAoBD,EAAmB7B,EAAOpL,QAAU,KAC3FrI,EAACwV,EAAD7T,GAAA,CACE8T,OAAQ,CAAEC,EAAG,eACbC,WAAY,OACR5V,EAAMgV,WAHZ,CAIEa,WAAYnC,EAAO5S,KAAI,SAACC,GAAD,OAAAa,GAAA,GAAgBb,EAAhB,CAAsBqU,UAAWG,OACxDd,QAASA,EACTqB,OAAO,SAER9V,EAAM+V,mBACL/V,EAAM+V,mBAAmBR,EAAmB7B,EAAOpL,QAEnDrI,EAACkC,EAAD,CACE1B,KAAK,SACLU,QAAS,SAAAA,IAAA,OAAMoU,EAAkB5B,OACjCqC,MAHF,KAIE7Q,KAAMlF,EAJRgW,EAAA,IAKEzU,MAAO,CAAE6Q,UAAW,IALtBlS,SAAA,8CC3EH+V,GAAkC,SAAlCA,EAAmClW,GAC9C,IAAQmW,EAAkCnW,EAAlCmW,eAAmB1U,KAAezB,EAA1C0B,IAEA,IAA8BkK,EAAAA,EAAS,OAAhCrG,EAAPsG,EAAA,GAAgBC,EAAhBD,EAAA,GAEA,IAAMlJ,EAAWK,EAAMC,gBAAe,SAACkO,GACrC,GAAIA,EAAKE,KAAKC,SAAW,YAAa,CACpCxF,EAAW,WACN,GAAIqF,EAAKE,KAAKC,SAAW,OAAQ,CACtCxF,EAAW,OACX,IAAMM,EAAW+E,EAAKE,KAAKE,SAC3B,GAAInF,EAASoF,OAAS,OAAQ,CAC5B2E,EAAe/J,EAASsF,UACnB,MACAvE,EAAQpH,MAAOqG,EAASe,SAAsB,kBAKzD,OACElN,EAACgS,EAADrQ,GAAA,CAAQwU,eAAgB,MAAOzE,SAAU,GAAOlQ,EAAhD,CAA4DkB,SAAUA,EAAtExC,SACGH,EAAMG,SACLH,EAAMG,SAENF,EAACkC,EAAD,CAAQ1B,KAAK,UAAU6R,MAAvB,KAA6B/M,QAASA,EAAtCpF,SAAA,aAQR+V,GAAW1T,aAAe,CACxB3C,KAAM,OACNwW,OAAQ,0ECRGC,GAAkC,SAAlCA,EAAmCtW,GAC9C0G,IAAgB,WACdZ,QAAQC,MAAM,6DACb,IAEH,IAAQpD,EAA6D3C,EAA7D2C,SAAUkO,EAAmD7Q,EAAnD6Q,cAAe0F,EAAoCvW,EAApCuW,UAAW7T,EAAyB1C,EAAzB0C,MAAUjB,KAAezB,EAArE0B,IACA,IAAsCkK,EAAAA,EAA+B,IAA9D4K,EAAP3K,EAAA,GAAoB4K,EAApB5K,EAAA,GACA,IAAMP,EAAa+B,EACjB,CACEqJ,QAAS,UACTC,SAAU,YAEZ3W,EAAMsL,YAGRzF,GAAU,WACR,GAAInD,GAAS/C,EAAQ+C,GAAQ,CAC3B+T,EACE/T,EAAM5B,KAAI,SAACC,GACT,MAAO,CACLiQ,IAAKjQ,EAAK,QAAUA,EAAKuK,EAAWoL,SACpC7W,KAAMkB,EAAKuK,EAAWqL,UACtBD,QAAS3V,EAAKuK,EAAWoL,SACzBzF,IAAKlQ,EAAKuK,EAAWoL,SACrBE,SAAU7V,EAAKuK,EAAWoL,iBAKjC,CAACpL,EAAWoL,QAASpL,EAAWqL,SAAUjU,IAE7C,IAAMwO,EAAiBlO,EAAMC,gBAAe,SAACkO,GAC3C,GAAIA,EAAKE,KAAKC,SAAW,OAAQ,CAC/B,IAAMlF,EAAW+E,EAAKE,KAAKE,SAC3B,GAAInF,EAASoF,OAAS,OAAQ,CAC5B,IAAMC,EAASrF,EAASsF,MAAQ,GAChC,IAAMmF,EAAa,CACjB7F,IAAKG,EAAKE,KAAKL,IACf2F,SAAUlF,EAAOnG,EAAWqL,WAAcxF,EAAKE,KAAKxR,KACpD6W,QAASjF,EAAOnG,EAAWoL,UAE7B,IAAMI,GAAapU,GAAS,IAAIoL,OAAO+I,GACvClU,GAAA,UAAA,EAAAA,EAAWmU,OACN,CACLjG,aAAAA,EAAAA,EAAgBzE,EAASe,eAEtB,GAAIgE,EAAKE,KAAKC,SAAW,UAAW,CACzC,IAAMN,EAAMG,EAAKE,KAAKL,IACtB,IAAMY,EAAalP,IAAUN,UAAgBM,GAAAA,OAAAA,GAAS,GACtD,IAAMmP,EAAcD,EAAWE,WAAU,SAAC/Q,GACxC,IAAMgR,EAAUhR,EAAK,QAAUA,EAAKuK,EAAWoL,SAC/C,OAAO3E,IAAYf,KAErB,GAAIa,GAAe,EAAG,CACpBD,EAAWI,OAAOH,EAAa,GAEjClP,GAAA,UAAA,EAAAA,EAAWiP,QACN,GAAIT,EAAKE,KAAKC,SAAW,QAAS,CACvCT,GAAa,YAAbA,IAGF4F,EAAmBtF,GAAAA,OAAAA,EAAKC,WACxBpR,EAAMkR,gBAAN,UAAA,EAAAlR,EAAMkR,eAAiBC,MAGzB,IAAM4F,EAAkB/T,EAAMC,gBAAe,SAACoO,GAC5CkF,GAAS,UAATA,EAAAA,EAAY,CACVG,QAASrF,EAAK/F,EAAWoL,SACzBC,SAAUtF,EAAK/F,EAAWqL,eAI9B,OACE1W,EAACgS,EAADrQ,GAAA,GACMH,EADN,CAEEkB,SAAUuO,EACVqF,UAAWQ,EACX3F,SAAUoF,EACVnW,UAAW4F,EAAW,gBAAiBxE,EAAWpB,WALpDF,SAOGH,EAAMG,iBCpHA6W,GAAkC,SAAlCA,EAAmChX,GAC9C,IAAMiX,EAAatX,EAAQK,EAAMG,UAAYH,EAAMG,SAAW,CAACH,EAAMG,UACrE,IAAM+W,EAAYlX,EAAMkX,WAAa,WACrC,IAAMC,EAAMnX,EAAMmX,IAAMnX,EAAMmX,IAAM,EACpC,IAAMC,GAAiBlL,EAAkBlM,EAAMqX,WAC3C1X,EAAQK,EAAMqX,WACZrX,EAAMqX,UACN,CAACrX,EAAMqX,WACT,GACJ,OACEpX,EAAA,MAAA,CACEI,UAAW4F,EAAW,gBAAX,UAAsCiR,EAAalX,EAAMK,WACpEmB,MAAOxB,EAAMwB,MACbL,QAASnB,EAAMmB,QAHjBhB,SAKG8W,EAAUnW,KAAI,SAACX,EAAUa,GACxB,IAAMsW,EAAgBnX,EAASH,MAAMwB,OAAS,GAC9C,IAAMA,EAAQ4V,EAActX,SAASkB,GAAvBY,GAAA,CAAkC2V,KAAM,GAAMD,GAAkBA,EAC9E,GAAItW,EAAQiW,EAAU3O,OAAS,GAAK6O,EAAM,EAAG,CAC3C,GAAID,IAAc,aAAc,CAC9B1V,EAAMgW,YAAcL,MACf,CACL3V,EAAMiW,aAAeN,GAGzB,OAAOO,EAAavX,EAAU,CAAEqB,MAAAA,EAAOe,IAAKvB,cCnCvC2W,GAAqB,SAArBA,EAAsB3X,GACjC,OAAOC,EAAA,MAAA,CAAKuB,MAAKI,GAAA,CAAIgW,OAAQ5X,EAAM4X,QAAW5X,EAAMwB,OAASnB,UAAWL,EAAMK,iBCDnEwX,GAAqC,SAArCA,EAAsC7X,GACjD,OACEC,EAAC6X,EAAD,CAAShW,MAAO9B,EAAM+X,UAAtB5X,SACE4E,EAAA,MAAA,CACE1E,UAAW4F,EAAW,eAAX,iBAA2CjG,EAAMU,MAAQ,UAAYV,EAAMK,WACtFmB,MAAOxB,EAAMwB,MAFfrB,SAAA,CAIGH,EAAMmF,KACNnF,EAAMiB,KAAOhB,EAAA,OAAA,CAAMI,UAAU,oBAAhBF,SAAqCH,EAAMiB,OAAe,WCMzE,IAAM+W,GAA+D,CAC1E5T,QAAS,CACP6T,cAA6D,SAAAA,EAAArU,GAAA,IAA7CU,IAAAA,SAAUxC,IAAAA,MAAOyC,IAAAA,YAAaC,IAAAA,YAC5C,OAAO,SAACC,GACNA,EAAMH,SAAWA,EACjBG,EAAM3C,MAAQA,EACd2C,EAAMF,YAAcA,EACpBE,EAAMD,YAAcA,EACpBC,EAAMC,QAAU,OAGpBwT,WAAa,SAAAA,IACX,OAAO,SAACzT,GACNA,EAAMC,QAAU,QAGpByT,iBAfO,SAAAA,EAeUtT,GACf,OAAO,SAACJ,GACNA,EAAMD,YAAc,MACpBC,EAAMH,SAAWO,KAIvBJ,MAAO,CACLC,QAAS,MACT5C,MAAO,GACPyC,YAAa,gFCvCV,IAAM6T,GAAiB,SAAjBA,EAQcxU,GAAA,IAPzB2B,IAAAA,QAOyB8S,EAAAzU,EANzB7B,OAAAA,aAAS,KAMgBsW,EAAAC,EAAA1U,EALzB5B,WAAAA,aAAa,KAKYsW,EAJzBrT,IAAAA,SACAK,IAAAA,KACAJ,IAAAA,UACGzD,EACsB+Q,GAAA5O,EAAAlC,IACzB,OACEzB,EAACC,EAAD,CAAAC,SACE4E,EAACzE,EAAD,CAAOI,KAAK,SAAZP,SAAA,CACEF,EAACkC,EAAWV,GAAAA,GAAAA,EAAWuD,kBAAvB,CAA0C3E,UAAU,aAAac,QAAS8D,EAA1E9E,SACG6B,KAEFkD,GAAa,MACZjF,EAACkC,EAADP,GAAA,CACEnB,KAAK,WACDgB,EAAW4D,cAFjB,CAGEhF,UAAU,SACVc,QAASmE,EACTC,QAASA,EALXpF,SAOG4B,2FCZb,IAAMyD,GAAa,SAAbA,IACJ,OACEvF,EAAA,MAAA,CAAKI,UAAU,sBAAfF,SACE4E,EAAA,MAAA,CAAK1E,UAAU,iBAAfF,SACE,CAAAF,EAAA,MAAA,CAAKI,UAAU,iBACfJ,EAAA,MAAA,CAAKI,UAAU,cAAfF,SAAA,sBAaKoY,GAAkC,SAAlCA,EAAmCvY,GAC9C,IAAQwE,EAAmFxE,EAAnFwE,YAAanE,EAAsEL,EAAtEK,UAAWmD,EAA2DxD,EAA3DwD,MAAOrD,EAAoDH,EAApDG,SAAUwF,EAA0C3F,EAA1C2F,OAAQC,EAAkC5F,EAAlC4F,eAAmBnE,KAAezB,EAA3F0B,IAEAmE,GAAU,WACRC,QAAQC,MACN,8JAED,IAEH,OACEhB,EAACyT,EAAD5W,GAAA,CACEvB,UAAW4F,EAAW,eAAgB5F,GACtC6F,SAAU,MACVC,YAAa,MACbC,eAAgB,MACZ3E,EALN,CAME+B,MAAOA,GAAS,IAChBmC,OAAQ,KAPVxF,SASE,CAAA4E,EAAA,MAAA,CAAK1E,UAAU,uBAAfF,SAAA,CACGA,EACAqE,GAAevE,EAACuF,GAFnB,OAICG,IAAW,MACV1F,EAAA,MAAA,CAAKI,UAAU,8BAAfF,SACGwF,EAASA,EAAS1F,EAACmY,SAAmBxS,WC3DjD,IAAM6S,GAA0F,OAYnFC,GAAyB,SAAzBA,EAA0BnW,GACrC,IAAKkW,GAAYlW,GAAM,CACrBkW,GAAYlW,GAAOkE,EAAMuR,IAE3B,OAAOS,GAAYlW,ICEd,IAAMyV,GAA+D,CAC1E5T,QAAS,CACP6T,cAA6D,SAAAA,EAAArU,GAAA,IAA7CU,IAAAA,SAAUxC,IAAAA,MAAOyC,IAAAA,YAAaC,IAAAA,YAC5C,OAAO,SAACC,GACNA,EAAMH,SAAWA,EACjBG,EAAM3C,MAAQA,EACd2C,EAAMF,YAAcA,EACpBE,EAAMD,YAAcA,EACpBC,EAAMC,QAAU,OAGpBwT,WAAa,SAAAA,IACX,OAAO,SAACzT,GACNA,EAAMC,QAAU,QAGpByT,iBAfO,SAAAA,EAeUtT,GACf,OAAO,SAACJ,GACNA,EAAMD,YAAc,MACpBC,EAAMH,SAAWO,KAIvBJ,MAAO,CACLC,QAAS,MACT5C,MAAO,GACPyC,YAAa,gFCvCV,IAAM6T,GAAiB,SAAjBA,EAQiBxU,GAAA,IAP5B2B,IAAAA,QAO4B8S,EAAAzU,EAN5B7B,OAAAA,aAAS,KAMmBsW,EAAAC,EAAA1U,EAL5B5B,WAAAA,aAAa,KAKesW,EAJ5BrT,IAAAA,SACAK,IAAAA,KACAJ,IAAAA,UACGzD,EACyB+Q,GAAA5O,EAAAlC,IAC5B,OACEzB,EAACC,EAAD,CAAAC,SACE4E,EAACzE,EAAD,CAAOI,KAAK,SAAZP,SAAA,CACEF,EAACkC,EAAWV,GAAAA,GAAAA,EAAWuD,kBAAvB,CAA0C3E,UAAU,aAAac,QAAS8D,EAA1E9E,SACG6B,KAEFkD,GAAa,MACZjF,EAACkC,EAADP,GAAA,CACEnB,KAAK,WACDgB,EAAW4D,cAFjB,CAGEhF,UAAU,SACVc,QAASmE,EACTC,QAASA,EALXpF,SAOG4B,iECTb,IAAMyD,GAAa,SAAbA,IACJ,OACEvF,EAAA,MAAA,CAAKI,UAAU,uBAAfF,SACE4E,EAAA,MAAA,CAAK1E,UAAU,iBAAfF,SACE,CAAAF,EAAA,MAAA,CAAKI,UAAU,iBACfJ,EAAA,MAAA,CAAKI,UAAU,cAAfF,SAAA,kBAMR,IAAMwY,GAAuE,SAAvEA,EAAwE3Y,GAC5E,OACE+E,EAAC7E,EAAD,CAAAC,SACE,CAAAF,EAAA,MAAA,CAAKI,UAAU,wBAAfF,SAAwCH,EAAMG,WAC7CH,EAAM4F,eACL3F,EAAC2Y,GAAD,CAAAzY,SACEF,EAACmY,GAAmBpY,GAAAA,GAAAA,EAAM4F,mBAE1B,SAKV,IAAMgT,GAAqB,SAArBA,EAAsB5Y,GAC1B,OAAOC,EAAA,MAAA,CAAKI,UAAU,uBAAfF,SAAuCH,EAAMG,gBAUzC0Y,GAAkE,SAAlEA,EAAmE7Y,GAC9E,IAAQwE,EAA2DxE,EAA3DwE,YAAanE,EAA8CL,EAA9CK,UAAWmD,EAAmCxD,EAAnCwD,MAAOrD,EAA4BH,EAA5BG,SAAasB,KAAezB,EAAnE0B,IAEAgF,IAAgB,WACd,GAAI1G,EAAM,kBAAmB,CAC3B,MAAM,IAAIwH,MAAM,kDAEjB,IAEH,OACEzC,EAACyT,EAAD5W,GAAA,CACEvB,UAAW4F,EAAW,gBAAiB5F,GACvC6F,SAAU,MACVC,YAAa,KACbC,eAAgB,MACZ3E,EALN,CAME+B,MAAOA,GAAS,IAChBmC,OAAQ,KAPVxF,SAAA,CASGA,EACAqE,GAAevE,EAACuF,GAVnB,SAeJqT,GAAapR,QAAUkR,GACvBE,GAAanR,OAASkR,GCpFtB,IAAMH,GAA0F,OAYnFK,GAA0B,SAA1BA,EAA2BvW,GACtC,IAAKkW,GAAYlW,GAAM,CACrBkW,GAAYlW,GAAOkE,EAAMuR,IAE3B,OAAOS,GAAYlW,QCZRwW,GAA4C,SAA5CA,EAA6C/Y,GACxD,OACEC,EAAA,MAAA,CAAKI,UAAW4F,EAAW,oBAAqBjG,EAAMK,WAAYmB,MAAOxB,EAAMwB,MAA/ErB,SACGH,EAAMG,YCZA6Y,IAAAA,GAAU,SAAVA,IACX,OAAO/Y,EAAA,MAAA,CAAKI,UAAU,QAAfF,SAAA,SCGF,IAAM8Y,GAAgB,CAC3BC,eAAgB,gBAChBC,eAAgB,gBAChBC,eAAgB,gBAChBC,gBAAiB,iBACjBC,gBAAiB,iBACjBC,gBAAiB,iBACjBC,gBAAiB,iBACjBC,iBAAkB,mBAMb,IAAMC,GAAoB,CAC/BR,eAAgB,qBAChBC,eAAgB,qBAChBC,eAAgB,qBAChBC,gBAAiB,sBACjBC,gBAAiB,sBACjBC,gBAAiB,sBACjBC,gBAAiB,sBACjBC,iBAAkB,wBCjBb,IAAME,GAAsB,CACjCC,KAAMX,GACNY,SAAUH,QCECI,GAAsC,SAAtCA,EAAuC9Z,GAClD,IAAM+Z,EAAa/Z,EAAMga,gBAAkB,QAC3C,IAAM3Z,EAAY4F,EAChB,gBACA,CACE,sBAAuBjG,EAAMia,aAAe,QAC5C,+BAAgCF,IAAe,QAEjD/Z,EAAMK,WAGR,OACE0E,EAAA,MAAA,CAAK1E,UAAWA,EAAWmB,MAAOxB,EAAMwB,MAAxCrB,SACGH,CAAAA,EAAM8B,MAAQ7B,EAAA,MAAA,CAAKI,UAAU,sBAAfF,SAAsCH,EAAM8B,QAAe,KACzE9B,EAAMka,KAAOja,EAAA,MAAA,CAAKI,UAAU,qBAAfF,SAAqCH,EAAMka,OAAc,KACtEla,EAAMG,SAAWF,EAAA,MAAA,CAAKI,UAAU,wBAAfF,SAAwCH,EAAMG,WAAkB,aCZ3Ega,GAAsC,SAAtCA,EAAuCna,GAClD,IAAA6L,EAAsCD,IAA/BwO,EAAPvO,EAAA,GAAoBwO,EAApBxO,EAAA,GAEA,IAA8BD,EAAAA,EAAS,OAAhC0O,EAAPC,EAAA,GAAgBC,EAAhBD,EAAA,GACA,IAAgC3O,EAAAA,EAAS,OAAlC6O,EAAPC,EAAA,GAAiBC,OAGjB,IAAMC,EAAa/X,GAA2E,WAC5F,MAAO,CACLgY,QAAS7a,EAAM6a,QACfC,QAAS9a,EAAM8a,QACfC,cAAe/a,EAAM+a,cACrBnY,OAAQ5C,EAAM4C,OACdoY,UAAWhb,EAAMgb,UACjBC,WAAYjb,EAAMib,WAClBC,SAAUlb,EAAMkb,YAGjB,IAEH,IAAMtY,EAASgY,EAAWhY,OAC1B,IAAMqY,EAAaL,EAAWK,WAC9B,IAAMC,EAAWN,EAAWM,SAE5B,IAAMC,EAAenY,EAAMoY,sBACzB,SAACC,GACC,IAAMC,EAASD,EAAM,IACrB,GAAIA,EAAM,EAAG,CACX,IAAKf,EAAS,CACZE,EAAW,MAEbH,EAAezX,EAAO2Y,QAAQ,MAAOC,OAAOF,KAC5Ctb,EAAMyb,QAAN,UAAA,EAAAzb,EAAMyb,OAASH,QACV,GAAID,IAAQ,EAAG,CACpBb,EAAW,OACXG,EAAY,OACZ3a,EAAMyb,QAAN,UAAA,EAAAzb,EAAMyb,OAASH,GACfjB,EAAeO,EAAWE,YAG9BG,EAAa,IACb,CAAES,aAAcR,IAGlBrV,GAAU,WACR,IAAK+U,EAAWI,UAAW,CACzBX,EAAeO,EAAWC,aACrB,CACLM,IACAR,EAAY,MACZH,EAAW,SAEZ,CAACW,EAAcP,IAElB,IAAMe,EAAU3Y,EAAMC,gBAAe,WACnC,GAAIqX,GAAWG,EAAU,OACzBE,EAAY,MACZN,EAAeO,EAAWG,oBACrB/a,EACF4b,gBACA1U,MAAK,WACJsT,EAAW,MACXW,OAEDU,OAAM,WACLxB,EAAeO,EAAWC,SAC1BF,EAAY,aAIlB,IAAMta,EAAY4F,EAAW,eAAgBjG,EAAMK,UAAW,CAC5Dia,QAAAA,EACAG,SAAAA,IAGF,OACExa,EAAA,MAAA,CAAKI,UAAWA,EAAWc,QAASwa,EAApCxb,SACGia,KAKPD,GAAa3X,aAAe,CAC1ByY,WAAY,GACZC,SAAU,IACVF,UAAW,MACXpY,OAAQ,OACRiY,QAAS,QACTC,QAAS,OACTC,cAAe,UC7FjB,IAAMe,GAAiB,SAAjBA,IACJhW,QAAQC,MAAM,sEASHgW,GAAgE,SAAhEA,EAAiE/b,GAC5E0G,IAAgB,WACdoV,OACC,IAEH,OACE7b,EAAA,MAAA,CACEI,UAAW4F,EACT,sBACA,CAAE,2BAA4BjG,EAAMgc,SACpChc,EAAMK,WAJVF,SAOG8b,EAASnb,IAAId,EAAMG,UAAU,SAACY,EAAMC,GACnC,GAAIhB,EAAMgc,SAAWhb,IAAUhB,EAAMqX,UAAW,CAC9C,OAAOK,EAAa3W,EAAqB,CAAEV,UAAW,kCAExD,OAAOU,QAMf,IAAMmb,GAAwC,SAAxCA,EAAyClc,GAC7C,OAAOC,EAAA,MAAA,CAAKI,UAAW4F,EAAW,gCAAiCjG,EAAMK,WAAlEF,SAA+EH,EAAMG,YAG9F,IAAMgc,GAAsC,SAAtCA,EAAuCnc,GAC3C,OAAOC,EAAA,MAAA,CAAKI,UAAW4F,EAAW,8BAA+BjG,EAAMK,WAAhEF,SAA6EH,EAAMG,YAG5F,IAAMsV,GAAoC,SAApCA,EAAqCzV,GACzC,OAAOC,EAAA,MAAA,CAAKI,UAAW4F,EAAW,4BAA6BjG,EAAMK,WAA9DF,SAA2EH,EAAMG,YAE1F,IAAMuH,GAAqC,SAArCA,EAAsC1H,GAC1C,OAAOC,EAAA,MAAA,CAAKI,UAAW4F,EAAW,6BAA8BjG,EAAMK,WAA/DF,SAA4EH,EAAMG,YAG3F4b,GAAkBG,UAAYA,GAC9BH,GAAkBI,QAAUA,GAC5BJ,GAAkBtG,MAAQA,GAC1BsG,GAAkBrU,OAASA,GC9C3B,IAAMyC,GAA2B,CAC/BiS,iBAAkB,GAClB/R,aAAc,OAGhB,IAAMgS,GAAqE,CACzEjY,QAAS,CACPoG,iBAAkB,SAAC3F,EAAAA,GACjB,OAAO,SAACJ,GACNA,EAAM2X,iBAAmBvX,GAAU,GACnCJ,EAAM6F,cAAgB,oBAG1BG,mBAAoB,SAAMA,IACxB,OAAO,SAAChG,GACNA,EAAM2X,iBAAmB,KAG7B1R,oBAAqB,SAAC7F,EAAAA,GACpB,OAAO,SAACJ,GACNA,EAAM6F,cAAgBzF,KAI5BJ,MAAO0F,IAGT,IAAMmS,GAAgG,GAQ/F,IAAMC,GAA2B,SAA3BA,EAA4Bha,GACvC,IAAK+Z,GAA0B/Z,GAAM,CACnC+Z,GAA0B/Z,GAAOkE,EAAM4V,IAEzC,OAAOC,GAA0B/Z,ICpD5B,IAAMia,GAAkB,SAAlBA,EACX9Z,EACA+Z,EACAnR,GAEA,IAAK3L,EAAQ8c,IAAaA,EAASnU,SAAW,EAAG,MAAO,GACxD,IAAMoU,EAAaC,EAAiBF,EAAUnR,GAC9C,OAAOsR,EAAqBla,EAAOga,6GC8C9B,IAAMG,GAAsB/R,GACjC,SAAC9K,EAAO+K,GACN,IACEC,EAMEhL,EANFgL,cACAE,EAKElL,EALFkL,qBACA4R,EAIE9c,EAJF8c,yBACAV,EAGEpc,EAHFoc,iBACA/Q,EAEErL,EAFFqL,SACG5J,KACDzB,EAPJ0B,IAQA,IAAM8J,EAAmBR,GAAiB,GAC1C,IAAMS,EAA0BP,GAAwB,GACxD,IAA8BU,EAAAA,EAAS,OAAhCrG,EAAPsG,EAAA,GAAgBC,EAAhBD,EAAA,GACA,IAAA0O,EAAgD3O,IAAzCmR,EAAPxC,EAAA,GAAyByC,EAAzBzC,EAAA,GACA,IAAA0C,EAAyBV,GAAyBlR,GAAUW,WAArDvH,EAAPwY,EAAA,GAAc7Y,EAAd6Y,EAAA,GACA,IAAMhR,EAAe,SAAfA,EAAgBvJ,GACpB,OAAOA,IAAU,IAAMwJ,EAAkBxJ,IAG3C,IAAMwa,EAAwB,SAAxBA,EAAyB9Q,GAC7B,IAAMC,EACJb,EAAiBc,uBACbd,EAAiBc,uBAAuBF,GACxCA,EAEN,OAAOC,GAGT,IAAMG,EAAyBxJ,EAAMC,gBAAe,WAAA,OAAA,IAAA8D,SAAA,SAAAC,EAAAC,GAAA,IAK1C0F,EACAC,EAEEC,EAWAE,EACAoQ,EAzGhB,IAAIlQ,EAAA,WAAJ,IAAI,OAAAjG,IAAM,MAAUI,GAAC,OAAOH,EAAPG,KAArB,IAAI8F,EAAA,SAiHWnH,GAjHf,IAkHQ+F,EAAW,YACNqB,EAAQpH,MAAOA,EAAMoH,SAAsB,aAnHxD,OAAOF,IAAG,MAAU7F,GAAC,OAAOH,EAAPG,KAsFf,IACE,IAAKoE,EAAiB4B,UAAW,CAC/B,MAAM,IAAI5F,MAAM,wBAEZmF,EAAqBnB,EAAiBmB,mBACtC9H,EAASwI,EAAO,GAAI7B,EAAiB3G,QAC3C,GAAI8H,EAAoB,CAChBE,EAAUF,EAAmBhE,MAAK,SAACpG,GACvC,OAAO0J,EAAapH,EAAOtC,OAE7B,GAAIsK,EAAS,CACX/G,QAAQwH,KAAiCX,4BAAAA,EAAmBlD,KAAK,KAAjE,QACA,OAAAzC,KAlGZ,IAAIuG,EAAA,WAAJ,IAAA,OAAON,IAAG,MAAU7F,GAAC,OAAO8F,EAAP9F,KAArB,IAAIoG,EAAA,SA6GazH,GA7GjB,IA8GU+F,EAAW,YACN1H,EAAQsG,oBAAoB,iBA/G3C,OAAO6C,IAAG,MAAUnG,GAAC,OAAO8F,EAAP9F,KAqGb,IACE0E,EAAW,WACN1H,EAAQsG,oBAAoB,eACf,OAAMc,QAAAA,QAAAA,EAAiB4B,WAAjB5B,UAAAA,EAAAA,EAAiB4B,UAAYvI,IAAOqC,MAAA,SAAAuG,GAxGtE,IAwGgBV,EAAYU,EACZrB,EAAW8Q,EAAsBnQ,GACvCjB,EAAW,OACXgR,GAAA,UAAA,EAAAA,EAA2B1Q,QACtBhI,EAAQoG,iBAAiB4B,GAAY,IA5GpD,OAAOmB,IAAG,MAAUnG,GAAC,OAAOoG,EAAPpG,MAwGOoG,GAKlB,MAAOzH,GAAOyH,EAAPzH,IAIT,MAAOA,GAAOmH,EAAPnH,UAMXW,GAAgB,WACd,GAAI0V,EAAkB,MACfhY,EAAQoG,iBAAiB4R,GAC9B,OAGF,IAAM1O,EAAgB6O,GAAyBlR,GAAUsC,WACzD7H,QAAQsX,IAAI,gBAAiB1P,EAAcpD,eAC3C,GACEmB,EAAwBnD,OAAS,IAChCoF,EAAcpD,eACfoD,EAAcpD,gBAAkB,gBAChC,MACKkC,OAENf,GAEH5F,GAAU,WACR,IAAKqG,EAAkBlM,EAAM0C,OAAQ,CACnC,IAAM2a,EAAY1d,EAAQK,EAAM0C,OAAS1C,EAAM0C,MAAQ,CAAC1C,EAAM0C,OAC9D,GAAI2a,EAAU/U,OAAS,GAAK7D,EAAM2X,iBAAiB9T,OAAS,EAAG,CAC7D,IAAIgV,EAAe,GACnBD,EAAU5U,SAAQ,SAAC8U,GACjB,IAAM3L,EAAa4K,GACjBe,EACA9Y,EAAM2X,iBACNpc,EAAMsL,YAERgS,EAAeA,EAAaxP,OAAO8D,EAAW9Q,KAAI,SAACC,GAAD,OAAUA,EAAK2B,aAEnEsa,GAAoB,SAACQ,GACnB,IAAMC,EAAYH,EAAaxP,OAAO0P,GAAQ,IAC9C,OAAO5O,MAAMoE,KAAK,IAAI0K,IAAID,WAI/B,CAAChZ,EAAM2X,iBAAkBpc,EAAMsL,WAAYtL,EAAM0C,QAEpDqL,EAAoBhD,GAAK,WACvB,MAAO,CACLiD,oBAAqB,SAAMA,SACpB5J,EAAQoG,iBAAiB,KAEhCmT,oBAAqB,SAAMA,IACzB,OAAOlZ,EAAM2X,sBAKnB,IAAMwB,EAAe5a,EAAMC,gBAAe,SAACqa,GACzCN,EAAoBM,MAGtB,IAAMxO,EAAiB9L,EAAMC,gBAAe,gBACrCuJ,OAGP,OACEvM,EAAC4d,EAADjc,GAAA,CACEkc,cAAe,CAAEC,UAAW,IAAKC,SAAU,QAC3C9O,WAAY,KACZ+O,SAAU,MACNxc,EAJN,CAKEiB,MAAOwJ,EAAkBlM,EAAM0C,OAASN,UAAYpC,EAAM0C,MAC1Dqa,iBAAkBA,EAClBmB,SAAUzZ,EAAM2X,iBAChB7W,QAASA,EACTqY,aAAcA,EACdpc,MAAKI,GAAA,CAAI4B,MAAO,QAAW/B,EAAWD,OACtC8N,WACE7K,EAAM6F,gBAAkB,gBACtBrK,EAAAsP,EAAA,CAAcC,KAAMjK,EAASpE,QAAS2N,IACpC1M,UAENgN,gBACEnP,EAACoP,GAAD,CAAiB/E,cAAe7F,EAAM6F,cAAewE,eAAgBA,UAO/E,IAAMO,GAAkB,SAAlBA,EAAmBrP,GAIvB,IAAMyP,EAAc5M,GAAQ,WAC1B,GAAI7C,EAAMsK,gBAAkB,gBAAiB,CAC3C,MAAO,cACF,GAAItK,EAAMsK,gBAAkB,kBAAmB,CACpD,MAAO,OAET,MAAO,UACN,CAACtK,EAAMsK,gBACV,OACErK,EAACyP,EAAD,CACEC,MAAOD,EAAME,uBACbH,YAAaA,EACbpP,UAAW,8BAHbF,SAKGH,EAAMsK,gBAAkB,iBACvBrK,EAACkC,EAAD,CAAQ1B,KAAK,UAAUU,QAASnB,EAAM8O,eAAtC3O,SAAA,cC3MR,IAAMgK,GAA2B,CAC/BsS,SAAU,GACVpS,aAAc,OAGhB,IAAM8T,GAA6D,CACjE/Z,QAAS,CACPga,YAAa,SAACvZ,EAAAA,GACZ,OAAO,SAACJ,GACNA,EAAMgY,SAAW5X,GAAU,GAC3BJ,EAAM6F,cAAgB,oBAG1B+T,cAAe,SAAMA,IACnB,OAAO,SAAC5Z,GACNA,EAAMgY,SAAW,KAGrB/R,oBAAqB,SAAC7F,EAAAA,GACpB,OAAO,SAACJ,GACNA,EAAM6F,cAAgBzF,KAI5BJ,MAAO0F,IAGT,IAAMmU,GAAwF,GAQvF,IAAMC,GAAmB,SAAnBA,EAAoBhc,GAC/B,IAAK+b,GAAkB/b,GAAM,CAC3B+b,GAAkB/b,GAAOkE,EAAM0X,IAEjC,OAAOG,GAAkB/b,ICtDpB,IAAMia,GAAkB,SAAlBA,EACX9Z,EACA+Z,EACAnR,GAEA,IAAMoR,EAAaC,EAAiBF,EAAUnR,GAC9C,OAAOsR,EAAqBla,EAAOga,kHC6D9B,IAAM8B,GAAc1T,GAAgD,SAAC9K,EAAO+K,GACjF,IACEC,EAQEhL,EARFgL,cACAE,EAOElL,EAPFkL,qBACAuT,EAMEze,EANFye,iBACA/b,EAKE1C,EALF0C,MACAC,EAIE3C,EAJF2C,SACA2I,EAGEtL,EAHFsL,WACAD,EAEErL,EAFFqL,SACG5J,KACDzB,EATJ0B,IAUA,IAAM8J,EAAmBR,GAAiB,GAC1C,IAAMS,EAA0BP,GAAwB,GACxD,IAAAW,EAAgDD,IAAzCmR,EAAPlR,EAAA,GAAyBmR,EAAzBnR,EAAA,GACA,IAAA6S,EAAyBH,GAAiBlT,GAAUW,WAA7CvH,EAAPia,EAAA,GAActa,EAAdsa,EAAA,GACA,IAA8B9S,EAAAA,EAAS,OAAhCrG,EAAPgV,EAAA,GAAgBzO,EAAhByO,EAAA,GAEA,IAAM8C,EAAYxa,GAAQ,WACxB,GAAIqJ,EAAkBlM,EAAM0C,OAAQ,OAAON,UAC3C,OAAQzC,EAAQK,EAAM0C,OAAS1C,EAAM0C,MAAQ,CAAC1C,EAAM0C,SACnD,CAAC1C,EAAM0C,QAEV,IAAMuJ,EAAe,SAAfA,EAAgBvJ,GACpB,OAAOA,IAAU,IAAMwJ,EAAkBxJ,IAG3C,IAAMwa,EAAwB,SAAxBA,EAAyB9Q,GAC7B,IAAMC,EACJb,EAAiBc,uBACbd,EAAiBc,uBAAuBF,GACxCA,EAEN,OAAOC,GAGT,IAAMG,EAAyBxJ,EAAMC,gBAAe,WAAA,OAAA,IAAA8D,SAAA,SAAAC,EAAAC,GAAA,IAK1C0F,EACAC,EAEEC,EAWAE,EACAoQ,EA5Hd,IAAIlQ,EAAA,WAAJ,IAAI,OAAAjG,IAAM,MAAUI,GAAC,OAAOH,EAAPG,KAArB,IAAI8F,EAAA,SAmISnH,GAnIb,IAoIM+F,EAAW,YACNqB,EAAQpH,MAAOA,EAAMoH,SAAsB,aArItD,OAAOF,IAAG,MAAU7F,GAAC,OAAOH,EAAPG,KAyGjB,IACE,IAAKoE,EAAiB4B,UAAW,CAC/B,MAAM,IAAI5F,MAAM,wBAEZmF,EAAqBnB,EAAiBmB,mBACtC9H,EAASwI,EAAO,GAAI7B,EAAiB3G,QAC3C,GAAI8H,EAAoB,CAChBE,EAAUF,EAAmBhE,MAAK,SAACpG,GACvC,OAAO0J,EAAapH,EAAOtC,OAE7B,GAAIsK,EAAS,CACX/G,QAAQwH,KAAyBX,oBAAAA,EAAmBlD,KAAK,KAAzD,QACA,OAAAzC,KArHV,IAAIuG,EAAA,WAAJ,IAAA,OAAON,IAAG,MAAU7F,GAAC,OAAO8F,EAAP9F,KAArB,IAAIoG,EAAA,SA+HWzH,GA/Hf,IAgIQ+F,EAAW,YACN1H,EAAQsG,oBAAoB,iBAjIzC,OAAO6C,IAAG,MAAUnG,GAAC,OAAO8F,EAAP9F,KAwHf,IACE0E,EAAW,WACN1H,EAAQsG,oBAAoB,eACf,OAAMc,QAAAA,QAAAA,EAAiB4B,WAAjB5B,UAAAA,EAAAA,EAAiB4B,UAAYvI,IAAOqC,MAAA,SAAAuG,GA3HpE,IA2HcV,EAAYU,EACZrB,EAAW8Q,EAAsBnQ,QAClC3I,EAAQga,YAAYhS,GAAY,IACrCN,EAAW,OA9HnB,OAAOyB,IAAG,MAAUnG,GAAC,OAAOoG,EAAPpG,MA2HKoG,GAIlB,MAAOzH,GAAOyH,EAAPzH,IAIT,MAAOA,GAAOmH,EAAPnH,UAMXW,GAAgB,WACd,GAAI+X,EAAkB,MACfra,EAAQga,YAAYK,GACzB,OAGF,IAAM/Q,EAAgB6Q,GAAiBlT,GAAUsC,WACjD,GACElC,EAAwBnD,OAAS,IAChCoF,EAAcpD,eACfoD,EAAcpD,gBAAkB,gBAChC,MACKkC,OAENf,GAEH/E,GAAgB,WACd,GAAI2W,GAAaA,EAAU/U,OAAS,GAAK7D,EAAMgY,SAASnU,OAAS,IAAMyU,EAAkB,CACvF,IAAIO,EAAe,GACnBD,EAAU5U,SAAQ,SAAC8U,GACjB,IAAM3L,EAAa4K,GAAgBe,EAAW9Y,EAAMgY,SAAUzc,EAAMsL,YACpEgS,EAAeA,EAAaxP,OAAO8D,EAAW9Q,KAAI,SAACC,GAAD,OAAUA,EAAK2B,aAEnEsa,GAAoB,SAACQ,GACnB,IAAMC,EAAYH,EAAaxP,OAAO0P,GAAQ,IAC9C,OAAO5O,MAAMoE,KAAK,IAAI0K,IAAID,UAG7B,CAAChZ,EAAMgY,SAAUzc,EAAMsL,WAAY5I,IAEtCM,EAAM2b,iBAAgB,WACpB,GAAI3e,EAAM4e,YAAa,CACrB,IAAMlC,EAAaC,EAAiBlY,EAAMgY,UAAY,GAAIzc,EAAMsL,YAChE,IAAMsG,EAAa8K,EAAWmC,QAAO,SAAC9d,GAAD,IAAA+d,EAAA,OAAAA,EAAU/d,EAAKwH,QAAf,UAAA,EAAUuW,EAAYhf,SAASE,EAAM4e,aAAe,OACzF,IAAItB,EAAe,GACnB1L,EAAW9Q,KAAI,SAACie,GACd,IAAMC,EAAexC,GACnBuC,EAASrc,MACT+B,EAAMgY,UAAY,GAClBzc,EAAMsL,YAER,IAAM+R,EAAY2B,EAAale,KAAI,SAACC,GAAD,OAAUA,EAAK2B,SAClD4a,EAAeA,EAAaxP,OAAOuP,MAErCL,EAAoBpO,MAAMoE,KAAK,IAAI0K,IAAIJ,SAClC,CACLN,EAAoB,OAErB,CAAChd,EAAM4e,cAEV7Q,EAAoBhD,GAAK,WACvB,MAAO,CACLiD,oBAAqB,SAAMA,SACpB5J,EAAQia,iBAEfY,gBAAiB,SAAMA,IACrB,OAAOxa,EAAMgY,cAKnB,IAAMyC,EAAWlc,EAAMC,gBAAe,SAACqa,GACrCN,EAAoBM,MAEtB,IAAM6B,EAAUnc,EAAMC,gBAAe,SAACmc,GACpCzc,GAAA,UAAA,EAAAA,EAAWyc,MAEb,IAAMC,EAAWrc,EAAMC,gBAAe,SAACmc,GACrC,GAAIpf,EAAMsf,SAAU,CAClB3c,GAAA,UAAA,EAAAA,EAAWyc,OACN,CACLzc,GAAQ,YAARA,EAAWyc,EAAY,QAI3B,IAAMG,EAAiB1c,GAAQ,WAC7B,IAAM2c,EAAgBnS,EAAO,CAAE9E,MAAO,QAAS7F,MAAO,QAASvC,SAAU,YAAcmL,GACvF,MAAO,CAAExJ,MAAO0d,EAAcjX,MAAOhG,IAAKid,EAAc9c,MAAOvC,SAAUqf,EAAcrf,YACtF,CAACmL,IAEJ,GAAI7G,EAAMgY,SAASnU,OAAS,EAAG,CAC7B,OACErI,EAACwf,EAAD7d,GAAA,CACE8d,SAAUje,EAAWke,UAAY,MAAQ,CAAEC,aAAc,QACrDne,EAFN,CAGE6J,WAAYiU,EACZjC,aAAcP,EACdmB,SAAUzZ,EAAMgY,SAChByC,SAAUA,EACVW,aAAcpe,EAAWke,UAAYvd,UAAYib,EACjD+B,YAAa3d,EAAWke,UAAYtC,EAAYjb,UAChD+c,QAAS1d,EAAWke,UAAYR,EAAU/c,UAC1Cid,SAAU5d,EAAWke,UAAYvd,UAAYid,EAC7C7d,MAAKI,GAAA,CAAI4B,MAAO,QAAW/B,EAAWD,UAK5C,OACEvB,EAACoP,GAAD,CACE/E,cAAe7F,EAAM6F,cACrB/E,QAASA,EACTuJ,eAAgBtC,OAKtB,IAAM6C,GAAkB,SAAlBA,EAAmBrP,GAKvB,IAAMyP,EAAc5M,GAAQ,WAC1B,GAAI7C,EAAMsK,gBAAkB,gBAAiB,CAC3C,MAAO,cACF,GAAItK,EAAMsK,gBAAkB,kBAAmB,CACpD,MAAO,OAET,MAAO,UACN,CAACtK,EAAMsK,gBACV,OACEvF,EAAA,MAAA,CAAK1E,UAAU,qBAAfF,SAAA,CACEF,EAAC6f,EAAD,CAAMC,SAAU/f,EAAMuF,UACtBtF,EAACyP,EAAD,CAAOC,MAAOD,EAAME,uBAAwBH,YAAaA,EAAzDtP,SACGH,EAAMsK,gBAAkB,iBACvBrK,EAACkC,EAAD,CAAQ1B,KAAK,UAAUU,QAASnB,EAAM8O,eAAtC3O,SAAA"}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["@flatbiz/antd/src/01-styles/index.ts","@flatbiz/antd/src/permission/index.tsx","@flatbiz/antd/src/button-operate/index.tsx","@flatbiz/antd/src/date-picker-wrapper/index.tsx","@flatbiz/antd/src/date-range-picker-wrapper/index.tsx","@flatbiz/antd/src/drawer-wraper/drawer.model.ts","@flatbiz/antd/src/drawer-wraper/drawer-operation.tsx","@flatbiz/antd/src/drawer-wraper/drawer-wraper.tsx","@flatbiz/antd/src/drawer-wraper/index.ts","@flatbiz/antd/src/drawer-wrapper/drawer.model.ts","@flatbiz/antd/src/hooks/use-effect-custom.ts","@flatbiz/antd/src/hooks/use-effect-custom-async.ts","@flatbiz/antd/src/drawer-wrapper/drawer-operation.tsx","@flatbiz/antd/src/drawer-wrapper/drawer-wrapper.tsx","@flatbiz/antd/src/drawer-wrapper/index.ts","@flatbiz/antd/src/editable-table/utils.ts","@flatbiz/antd/src/editable-table/form-item/checkbox-group.tsx","@flatbiz/antd/src/editable-table/form-item/date-picker-wrapper.tsx","@flatbiz/antd/src/editable-table/form-item/date-range-picker-wrapper.tsx","@flatbiz/antd/src/editable-table/form-item/input.tsx","@flatbiz/antd/src/editable-table/form-item/input-number.tsx","@flatbiz/antd/src/editable-table/form-item/radio-group.tsx","@flatbiz/antd/src/selector-wrapper/model.ts","@flatbiz/antd/src/selector-wrapper/index.tsx","@flatbiz/antd/src/editable-table/form-item/selector-wrapper.tsx","@flatbiz/antd/src/editable-table/form-item/text.tsx","@flatbiz/antd/src/editable-table/form-item/textarea.tsx","@flatbiz/antd/src/upload-wrapper/index.tsx","@flatbiz/antd/src/editable-table/form-item/upload-wrapper.tsx","@flatbiz/antd/src/editable-table/form-item/index.tsx","@flatbiz/antd/src/editable-table/form-list-item/form-list.tsx","@flatbiz/antd/src/editable-table/form-list-item/index.tsx","@flatbiz/antd/src/editable-table/index.tsx","@flatbiz/antd/src/file-import/index.tsx","@flatbiz/antd/src/file-upload/index.tsx","@flatbiz/antd/src/flex-layout/index.tsx","@flatbiz/antd/src/gap/index.tsx","@flatbiz/antd/src/icon-wrapper/index.tsx","@flatbiz/antd/src/modal-wraper/modal.model.ts","@flatbiz/antd/src/modal-wraper/modal-operation.tsx","@flatbiz/antd/src/modal-wraper/modal-wraper.tsx","@flatbiz/antd/src/modal-wraper/index.ts","@flatbiz/antd/src/modal-wrapper/modal.model.ts","@flatbiz/antd/src/modal-wrapper/modal-operation.tsx","@flatbiz/antd/src/modal-wrapper/modal-wrapper.tsx","@flatbiz/antd/src/modal-wrapper/index.ts","@flatbiz/antd/src/page-fixed-footer/index.tsx","@flatbiz/antd/src/page404/index.tsx","@flatbiz/antd/src/pre-defined-classname/form/index.tsx","@flatbiz/antd/src/pre-defined-classname/index.ts","@flatbiz/antd/src/simple-layout/index.tsx","@flatbiz/antd/src/sms-count-down/index.tsx","@flatbiz/antd/src/table-filter-layout/index.tsx","@flatbiz/antd/src/tree-selector-wrapper/model.ts","@flatbiz/antd/src/tree-selector-wrapper/utils.ts","@flatbiz/antd/src/tree-selector-wrapper/index.tsx","@flatbiz/antd/src/tree-wrapper/model.ts","@flatbiz/antd/src/tree-wrapper/utils.ts","@flatbiz/antd/src/tree-wrapper/index.tsx"],"sourcesContent":["import { noop } from '@flatbiz/utils';\nimport './1_root.less';\nimport './2_base.less';\n\nexport const styles = noop;\n","import { isArray } from '@dimjs/lang';\nimport { getGlobalData } from '@flatbiz/utils';\nimport { FC, Fragment } from 'react';\n\nexport const getPermissionList = () => {\n const { elemAclLimits } = getGlobalData();\n const permissionList: string[] = isArray(elemAclLimits) ? elemAclLimits : [];\n return permissionList;\n};\n\nexport const hasPermission = (name: string) => {\n const permissionList = getPermissionList();\n if (permissionList.includes(name)) {\n return true;\n }\n return false;\n};\n\nexport interface PermissionProps {\n name: string;\n}\nexport const Permission: FC<PermissionProps> = (props) => {\n const permissionList = getPermissionList();\n if (permissionList.includes(props.name)) {\n return <Fragment>{props.children}</Fragment>;\n }\n return null;\n};\n","import { isUndefined } from '@dimjs/lang';\nimport { Button, ButtonProps, Divider, Popconfirm, Space, SpaceProps } from 'antd';\nimport { VFC } from 'react';\nimport { hasPermission } from '../permission';\nimport './style.less';\n\nexport interface ButtonOperateItem extends ButtonProps {\n text: string;\n color?: string;\n onClick: () => void;\n permission?: string;\n needConfirm?: boolean;\n confirmMessage?: string;\n hidden?: boolean;\n}\n\nexport interface ButtonOperateProps {\n operateList: Array<ButtonOperateItem | null>;\n wrap?: boolean;\n size?: SpaceProps['size'];\n}\n\nexport const ButtonOperate: VFC<ButtonOperateProps> = (props) => {\n return (\n <div className=\"table-operate\">\n <Space\n split={<Divider type=\"vertical\" />}\n size={props.size}\n wrap={isUndefined(props.wrap) ? true : props.wrap}\n >\n {props.operateList.map((item, index) => {\n if (!item) return null;\n const {\n text,\n color,\n onClick,\n permission,\n needConfirm,\n confirmMessage,\n hidden,\n style,\n ...otherProps\n } = item;\n if (hidden) return null;\n if (permission && !hasPermission(permission)) return null;\n const newStyle = color ? { color, ...style } : style;\n const type = item.type || 'link';\n if (needConfirm) {\n return (\n <Popconfirm\n title={confirmMessage}\n okText=\"确定\"\n cancelText=\"取消\"\n onConfirm={onClick}\n arrowPointAtCenter={true}\n key={index}\n >\n <Button {...otherProps} onClick={undefined} type={type} danger style={newStyle}>\n {text}\n </Button>\n </Popconfirm>\n );\n }\n return (\n <Button {...otherProps} type={type} style={newStyle} key={index} onClick={onClick}>\n {text}\n </Button>\n );\n })}\n </Space>\n </div>\n );\n};\n\nButtonOperate.defaultProps = {\n size: 0,\n};\n","import { flatbizDate } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { DatePicker } from 'antd';\nimport { PickerDateProps } from 'antd/lib/date-picker/generatePicker';\nimport moment from 'moment';\nimport { useMemo, VFC } from 'react';\n\nexport type DatePickerWrapperProps = {\n value?: string;\n onChange?: (value?: string) => void;\n} & Omit<PickerDateProps<moment.Moment>, 'value' | 'onChange'>;\n\n/**\n * DatePicker包装组件\n * ```\n * 1. value类型为 string\n * 2. onChange返回类型 string\n * 3. 默认格式化类型 YYYY-MM-DD; 当showTime===true时,默认格式化类型YYYY-MM-DD HH:mm:ss\n * 4. 其他格式化类型自定义format\n * ```\n */\nexport const DatePickerWrapper: VFC<DatePickerWrapperProps> = (props) => {\n const { value, onChange, style, ...otherProps } = props;\n const format = useMemo(() => {\n if (props.format) return props.format as string;\n if (props.showTime) return 'YYYY-MM-DD HH:mm:ss';\n return 'YYYY-MM-DD';\n }, [props.showTime, props.format]);\n\n const onChangeDate = hooks.useCallbackRef((value) => {\n if (value) {\n onChange?.(moment(value).format(format));\n } else {\n onChange?.(undefined);\n }\n });\n\n const datePickerValue = value && flatbizDate.isDate(value) ? moment(new Date(value)) : undefined;\n\n return (\n <DatePicker\n {...otherProps}\n style={{ width: '100%', ...style }}\n value={datePickerValue}\n onChange={onChangeDate}\n />\n );\n};\n","import { flatbizDate } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { DatePicker } from 'antd';\nimport { RangePickerDateProps } from 'antd/lib/date-picker/generatePicker';\nimport moment from 'moment';\nimport { useMemo, VFC } from 'react';\n\nexport type DateRangePickerWrapperProps = {\n value?: [string, string];\n onChange?: (value?: [string, string]) => void;\n} & Omit<RangePickerDateProps<moment.Moment>, 'value' | 'onChange'>;\n\n/**\n * DatePicker.RangePicker包装组件\n * ```\n * TODO: 引用DatePicker.RangePicker TS有问题,待解决\n * 1. value类型为 [string, string]\n * 2. onChange返回类型 [string, string]\n * 3. 默认格式化类型 YYYY-MM-DD; 当showTime===true时,默认格式化类型YYYY-MM-DD HH:mm:ss\n * 4. 其他格式化类型自定义format\n * ```\n */\nexport const DateRangePickerWrapper: VFC<DateRangePickerWrapperProps> = (props) => {\n const { value, onChange, style, ...otherProps } = props;\n\n const format = useMemo(() => {\n if (props.format) return props.format as string;\n if (props.showTime === true) return 'YYYY-MM-DD HH:mm:ss';\n return 'YYYY-MM-DD';\n }, [props.showTime, props.format]);\n\n const onChangeDate = hooks.useCallbackRef((values) => {\n if (values) {\n const [value1, value2] = values || [];\n onChange?.([moment(value1).format(format), moment(value2).format(format)]);\n } else {\n onChange?.(undefined);\n }\n });\n\n const [date1, date2] = value || [];\n\n const rangePickerValue =\n date1 && date2 && flatbizDate.isDate(date1) && flatbizDate.isDate(date2)\n ? [moment(new Date(date1)), moment(new Date(date2))]\n : undefined;\n\n return (\n <DatePicker.RangePicker\n {...otherProps}\n style={{ width: '100%', ...style }}\n value={rangePickerValue as [moment.Moment, moment.Moment]}\n onChange={onChangeDate}\n />\n );\n};\n","import { ModelType } from '@dimjs/model';\n\nexport interface DrawerStateType {\n title: string;\n /**\n * 显示drawer\n */\n visible: boolean;\n /**\n * 用来处理form, `更新`的时候的传递当前item列表行的数据, 当`创建`的时候强制设置为 `undefined`\n */\n itemData?: Record<string, any>;\n operateType: 'create' | 'update' | 'view' | null;\n pageLoading?: boolean;\n}\n\nexport interface DrawerActionsParamType {\n openDrawerForm: Pick<DrawerStateType, 'title' | 'itemData' | 'operateType' | 'pageLoading'>;\n closeDrawer: void;\n setDrawerItemData: Record<string, any>;\n}\n\n/**\n * @shared\n * 提供公共的drawer处理, 通常用来表单编辑, 弹窗抽屉模式.\n * 注意全部理论上只允许一个drawer实例存在,如需处理多个, 请自行实例话模型.\n */\nexport const DrawerModel: ModelType<DrawerStateType, DrawerActionsParamType> = {\n actions: {\n openDrawerForm({ itemData, title, operateType, pageLoading }) {\n return (state) => {\n state.itemData = itemData;\n state.title = title;\n state.operateType = operateType;\n state.pageLoading = pageLoading;\n state.visible = true;\n };\n },\n closeDrawer() {\n return (state) => {\n state.visible = false;\n };\n },\n setDrawerItemData(params) {\n return (state) => {\n state.pageLoading = false;\n state.itemData = params;\n };\n },\n },\n state: {\n visible: false,\n title: '',\n operateType: null,\n },\n};\n","import { SaveOutlined } from '@ant-design/icons';\nimport { Button, ButtonProps, Space } from 'antd';\n\nexport interface DrawerOperationOldProps {\n loading?: boolean;\n okText?: string;\n cancelText?: string;\n onOk?: () => void;\n onCancel?: () => void;\n hideOkBtn?: boolean;\n okButtonProps?: Omit<ButtonProps, 'onClick' | 'loading' | 'className'>;\n cancelButtonProps?: Omit<ButtonProps, 'onClick' | 'loading' | 'className'>;\n}\n\nexport const DrawerOperation = (props: DrawerOperationOldProps) => {\n return (\n <div className=\"fixed-bottom-block\">\n <Space size=\"middle\">\n <Button {...props.cancelButtonProps} className=\"cancel-btn\" onClick={props.onCancel}>\n {props.cancelText || '取消'}\n </Button>\n {props.hideOkBtn != true && (\n <Button\n type=\"primary\"\n icon={<SaveOutlined />}\n {...props.okButtonProps}\n className=\"ok-btn\"\n onClick={props.onOk}\n loading={props.loading}\n >\n {props.okText || '提交'}\n </Button>\n )}\n </Space>\n </div>\n );\n};\n","import { classNames } from '@dimjs/utils';\nimport { Drawer, DrawerProps } from 'antd';\nimport { FC, useEffect } from 'react';\nimport { DrawerOperation, DrawerOperationOldProps } from './drawer-operation';\nimport './style.less';\n\nexport type DrawerFormProps = {\n className?: string;\n /**\n * 整个drawer页面级的spinning <Page loading />\n */\n pageLoading?: boolean;\n // 设置了 DrawerProps footer属性后,operationProps配置将失效\n operationProps?: DrawerOperationOldProps;\n} & DrawerProps;\n\nconst PageLoader = () => {\n return (\n <div className=\"drawer-wraper-loader\">\n <div className=\"loader-wrapper\">\n <div className=\"loader-inner\" />\n <div className=\"loader-text\">LOADING</div>\n </div>\n </div>\n );\n};\n\n/**\n * 弹窗机制\n * ```\n * 1. 默认 destroyOnClose = true\n * 2. 默认 forceRender = false\n * ```\n */\nexport const DrawerWraper: FC<DrawerFormProps> = (props) => {\n const { pageLoading, className, width = 600, children, footer, operationProps, ...otherProps } = props;\n useEffect(() => {\n console.error(\n '@flatbiz/antd库【DrawerWraper】组件已经过期,请使用DrawerWrapper替换包括DrawerWraper=>DrawerWrapper、createDrawerWraperModel=>createDrawerWrapperModel,如果使用DrawerWrapper组件原用法需要调整',\n );\n }, []);\n return (\n <Drawer\n className={classNames('drawer-wraper', className)}\n keyboard={false}\n forceRender={false}\n destroyOnClose={true}\n width={'80%'}\n contentWrapperStyle={{ maxWidth: width }}\n size=\"default\"\n {...otherProps}\n footer={footer || footer === null ? footer : <DrawerOperation {...operationProps} />}\n >\n <div className=\"drawer-wraper-content\">{children}</div>\n {pageLoading && <PageLoader />}\n </Drawer>\n );\n};\n","import { API, ModelType } from '@dimjs/model';\nimport { Model } from '@dimjs/model-react';\nimport { DrawerActionsParamType, DrawerModel, DrawerStateType } from './drawer.model';\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nconst drawerModels: Record<string, API<ModelType<DrawerStateType, DrawerActionsParamType, any>>> = {};\n\n/**\n * drawer弹窗模型\n * @param key 唯一值必传\n * @returns\n *\n * ```\n * 使用方式\n * const [drawerState, drawerActions] = createDrawerWraperModel('key值').useStore();\n * ```\n */\nexport const createDrawerWraperModel = (key: string) => {\n if (!drawerModels[key]) {\n drawerModels[key] = Model(DrawerModel);\n }\n return drawerModels[key];\n};\n\nexport * from './drawer-wraper';\n","import { ModelType } from '@dimjs/model';\n\nexport interface DrawerStateType {\n title: string;\n /**\n * 显示drawer\n */\n visible: boolean;\n /**\n * 用来处理form, `更新`的时候的传递当前item列表行的数据, 当`创建`的时候强制设置为 `undefined`\n */\n itemData?: Record<string, any>;\n operateType: 'create' | 'update' | 'view' | null;\n pageLoading?: boolean;\n}\n\nexport interface DrawerActionsParamType {\n openDrawerForm: Pick<DrawerStateType, 'title' | 'itemData' | 'operateType' | 'pageLoading'>;\n closeDrawer: void;\n setDrawerItemData: Record<string, any>;\n}\n\n/**\n * @shared\n * 提供公共的drawer处理, 通常用来表单编辑, 弹窗抽屉模式.\n * 注意全部理论上只允许一个drawer实例存在,如需处理多个, 请自行实例话模型.\n */\nexport const DrawerModel: ModelType<DrawerStateType, DrawerActionsParamType> = {\n actions: {\n openDrawerForm({ itemData, title, operateType, pageLoading }) {\n return (state) => {\n state.itemData = itemData;\n state.title = title;\n state.operateType = operateType;\n state.pageLoading = pageLoading;\n state.visible = true;\n };\n },\n closeDrawer() {\n return (state) => {\n state.visible = false;\n };\n },\n setDrawerItemData(params) {\n return (state) => {\n state.pageLoading = false;\n state.itemData = params;\n };\n },\n },\n state: {\n visible: false,\n title: '',\n operateType: null,\n },\n};\n","import { DependencyList, EffectCallback, useEffect } from 'react';\n\nexport const useEffectCustom = (fn: EffectCallback, deps: DependencyList) => {\n // eslint-disable-next-line react-hooks/exhaustive-deps\n return useEffect(fn, deps);\n};\n","import { DependencyList, useEffect } from 'react';\n\nexport const useEffectCustomAsync = (fn: () => Promise<void>, deps: DependencyList) => {\n useEffect(() => {\n async function asyncFunction() {\n await fn();\n }\n void asyncFunction();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, deps);\n};\n","import { SaveOutlined } from '@ant-design/icons';\nimport { Button, ButtonProps, Space } from 'antd';\n\nexport interface DrawerOperationProps {\n loading?: boolean;\n okText?: string;\n cancelText?: string;\n onOk?: () => void;\n onCancel?: () => void;\n hideOkBtn?: boolean;\n okButtonProps?: Omit<ButtonProps, 'onClick' | 'loading' | 'className'>;\n cancelButtonProps?: Omit<ButtonProps, 'onClick' | 'loading' | 'className'>;\n}\n\nexport const DrawerOperation = (props: DrawerOperationProps) => {\n return (\n <div className=\"fixed-bottom-block\">\n <Space size=\"middle\">\n <Button {...props.cancelButtonProps} className=\"cancel-btn\" onClick={props.onCancel}>\n {props.cancelText || '取消'}\n </Button>\n {props.hideOkBtn != true && (\n <Button\n type=\"primary\"\n icon={<SaveOutlined />}\n {...props.okButtonProps}\n className=\"ok-btn\"\n onClick={props.onOk}\n loading={props.loading}\n >\n {props.okText || '提交'}\n </Button>\n )}\n </Space>\n </div>\n );\n};\n","import { classNames } from '@dimjs/utils';\nimport { Drawer, DrawerProps } from 'antd';\nimport { FC, Fragment } from 'react';\nimport { useEffectCustom } from '../hooks';\nimport { DrawerOperation, DrawerOperationProps } from './drawer-operation';\nimport './style.less';\n\ntype DrawerWrapperStaticMethods = {\n Content: typeof DrawerWrapperContent;\n Footer: typeof DrawerWrapperFooter;\n};\n\nexport type DrawerWrapperProps = {\n className?: string;\n /**\n * 整个drawer页面级的spinning <Page loading />\n */\n pageLoading?: boolean;\n} & Omit<DrawerProps, 'footer'>;\n\nconst PageLoader = () => {\n return (\n <div className=\"drawer-wrapper-loader\">\n <div className=\"loader-wrapper\">\n <div className=\"loader-inner\" />\n <div className=\"loader-text\">LOADING</div>\n </div>\n </div>\n );\n};\n\nconst DrawerWrapperContent: FC<{ operationProps?: DrawerOperationProps }> = (props) => {\n return (\n <Fragment>\n <div className=\"drawer-wrapper-content\">{props.children}</div>\n {props.operationProps ? (\n <DrawerWrapperFooter>\n <DrawerOperation {...props.operationProps} />\n </DrawerWrapperFooter>\n ) : null}\n </Fragment>\n );\n};\n\nconst DrawerWrapperFooter = (props) => {\n return <div className=\"drawer-wrapper-footer\">{props.children}</div>;\n};\n\n/**\n * 弹窗机制\n * ```\n * 1. 默认 destroyOnClose = true\n * 2. 默认 forceRender = false\n * ```\n */\nexport const DrawerWrapper: FC<DrawerWrapperProps> & DrawerWrapperStaticMethods = (props) => {\n const { pageLoading, className, width = 600, children, ...otherProps } = props;\n\n useEffectCustom(() => {\n if (props['operationProps']) {\n throw new Error('DrawerWrapper组件升级,参数operationProps用法变更,请及时更新');\n }\n }, []);\n\n return (\n <Drawer\n className={classNames('drawer-wrapper', className)}\n keyboard={false}\n forceRender={false}\n destroyOnClose={true}\n width={'80%'}\n contentWrapperStyle={{ maxWidth: width }}\n size=\"default\"\n {...otherProps}\n footer={null}\n >\n {pageLoading && <PageLoader />}\n {children}\n </Drawer>\n );\n};\n\nDrawerWrapper.Content = DrawerWrapperContent;\nDrawerWrapper.Footer = DrawerWrapperFooter;\n","import { API, ModelType } from '@dimjs/model';\nimport { Model } from '@dimjs/model-react';\nimport { DrawerActionsParamType, DrawerModel, DrawerStateType } from './drawer.model';\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nconst drawerModels: Record<string, API<ModelType<DrawerStateType, DrawerActionsParamType, any>>> = {};\n\n/**\n * drawer弹窗模型\n * @param key 唯一值必传\n * @returns\n *\n * ```\n * 使用方式\n * const [drawerState, drawerActions] = createDrawerWrapperModel('key值').useStore();\n * ```\n */\nexport const createDrawerWrapperModel = (key: string) => {\n if (!drawerModels[key]) {\n drawerModels[key] = Model(DrawerModel);\n }\n return drawerModels[key];\n};\n\nexport * from './drawer-wrapper';\n","import { FieldSingleConfig } from './type';\n\nexport const getEditable = (editable: FieldSingleConfig['editable'], tableRowIndex: number) => {\n return typeof editable === 'boolean' ? editable : editable?.({ tableRowIndex });\n};\n","import { isArray } from '@dimjs/lang';\nimport { classNames } from '@dimjs/utils';\nimport { LabelValueItem } from '@flatbiz/utils';\nimport { Checkbox, Form, Tag } from 'antd';\nimport { useMemo } from 'react';\nimport { EditableCheckboxGroupConfig, EditableFormItemProps } from '../type';\n\ntype CheckboxGroupFormItemContent = Omit<EditableFormItemProps, 'formItemProps'> & {\n value?: Array<string | number>;\n onChange?: (value: any) => void;\n};\n\nconst CheckboxGroupFormItemContent = (props: CheckboxGroupFormItemContent) => {\n const { editableConfig, editable, render } = props.fieldConfig;\n const editableComptProps = (editableConfig as EditableCheckboxGroupConfig).editableComptProps;\n\n const viewLabelList = useMemo(() => {\n if (editable) return [];\n const value = isArray(props.value) ? props.value : ([] as any[]);\n const options = (editableComptProps.options || []) as LabelValueItem[];\n if (!isArray(options) || options.length === 0) {\n return value.map((item) => ({ label: item, value: item }));\n }\n const returnList = [] as LabelValueItem[];\n value.forEach((item) => {\n const target = options.find((temp) => temp.value === item);\n returnList.push(target ? target : { label: item, value: item });\n });\n return returnList;\n }, [editable, editableComptProps.options, props.value]);\n\n if (editable) {\n return <Checkbox.Group {...editableComptProps} value={props.value} onChange={props.onChange} />;\n }\n return (\n <span className=\"editable-checkbox-group-view\">\n {render\n ? render(props.value)\n : viewLabelList.map((tag, index) => (\n <Tag key={index} color=\"#1890ff\">\n {tag.label}\n </Tag>\n ))}\n </span>\n );\n};\n\nexport const CheckboxGroupFormItem = (props: EditableFormItemProps) => {\n const { formItemProps } = props.fieldConfig;\n\n return (\n <Form.Item\n {...formItemProps}\n name={props.name}\n className={classNames('editable-checkbox-group-form-item', formItemProps?.className)}\n >\n <CheckboxGroupFormItemContent {...props} />\n </Form.Item>\n );\n};\n","import { classNames } from '@dimjs/utils';\nimport { Form } from 'antd';\nimport { DatePickerWrapper } from '../../date-picker-wrapper';\nimport { EditableDatePickerWrapperConfig, EditableFormItemProps } from '../type';\n\nexport const DatePickerWrapperFormItem = (props: EditableFormItemProps) => {\n const { formItemProps, editableConfig } = props.fieldConfig;\n return (\n <Form.Item\n {...formItemProps}\n name={props.name}\n className={classNames('editable-date-picker-wraper-form-item', formItemProps?.className)}\n >\n <DatePickerWrapper {...(editableConfig as EditableDatePickerWrapperConfig).editableComptProps} />\n </Form.Item>\n );\n};\n","import { isArray } from '@dimjs/lang';\nimport { classNames } from '@dimjs/utils';\nimport { Form } from 'antd';\nimport { useMemo } from 'react';\nimport { DateRangePickerWrapper } from '../../date-range-picker-wrapper';\nimport { EditableDateRangePickerWrapperConfig, EditableFormItemProps } from '../type';\n\ntype FormItemContentProps = Omit<EditableFormItemProps, 'formItemProps'> & {\n value?: [string, string];\n onChange?: (value?: [string, string]) => void;\n};\n\nconst FormItemContent = (props: FormItemContentProps) => {\n const { editableConfig, editable, render } = props.fieldConfig;\n const editableComptProps = (editableConfig as EditableDateRangePickerWrapperConfig).editableComptProps;\n\n const viewLabel = useMemo(() => {\n const value = isArray(props.value) ? props.value : ([] as any[]);\n if (editable) return undefined;\n return value.join('~');\n }, [editable, props.value]);\n\n if (editable) {\n return <DateRangePickerWrapper {...editableComptProps} value={props.value} onChange={props.onChange} />;\n }\n return <span className=\"editable-date-range-picker-view\">{render ? render(props.value) : viewLabel}</span>;\n};\n\nexport const DateRangePickerWrapperFormItem = (props: EditableFormItemProps) => {\n const { formItemProps } = props.fieldConfig;\n return (\n <Form.Item\n {...formItemProps}\n name={props.name}\n className={classNames('editable-date-range-picker-wraper-form-item', formItemProps?.className)}\n >\n <FormItemContent {...props} />\n </Form.Item>\n );\n};\n","import { Form, Input } from 'antd';\nimport { EditableFormItemProps, EditableInputConfig } from '../type';\n\nexport const InputFormItem = (props: EditableFormItemProps) => {\n const { formItemProps, editableConfig } = props.fieldConfig;\n return (\n <Form.Item {...formItemProps} name={props.name}>\n <Input {...(editableConfig as EditableInputConfig).editableComptProps} />\n </Form.Item>\n );\n};\n","import { classNames } from '@dimjs/utils';\nimport { Form, InputNumber } from 'antd';\nimport { EditableFormItemProps, EditableInputNumberConfig } from '../type';\n\nexport const InputNumberFormItem = (props: EditableFormItemProps) => {\n const { formItemProps, editableConfig } = props.fieldConfig;\n return (\n <Form.Item\n {...formItemProps}\n name={props.name}\n className={classNames('editable-input-number-form-item', formItemProps?.className)}\n >\n <InputNumber {...(editableConfig as EditableInputNumberConfig).editableComptProps} />\n </Form.Item>\n );\n};\n","import { isArray } from '@dimjs/lang';\nimport { classNames } from '@dimjs/utils';\nimport { LabelValueItem } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { Form, Radio, Tag } from 'antd';\nimport { useMemo } from 'react';\nimport { EditableFormItemProps, EditableRadioGroupConfig } from '../type';\n\ntype RadioGroupFormItemContent = Omit<EditableFormItemProps, 'formItemProps'> & {\n value?: string | number;\n onChange?: (value: string | number) => void;\n};\n\nconst RadioGroupFormItemContent = (props: RadioGroupFormItemContent) => {\n const { editableConfig, editable, render } = props.fieldConfig;\n const editableComptProps = (editableConfig as EditableRadioGroupConfig).editableComptProps;\n\n const viewLabel = useMemo(() => {\n if (editable) return [];\n const value = props.value;\n const options = (editableComptProps.options || []) as LabelValueItem<string | number>[];\n if (!isArray(options) || options.length === 0) {\n return value;\n }\n const target = options.find((item) => item.value === value);\n return target?.label || value;\n }, [editable, editableComptProps.options, props.value]);\n\n const onChange = hooks.useCallbackRef((e) => {\n props.onChange?.(e.target.value as string | number);\n });\n\n if (editable) {\n return <Radio.Group {...editableComptProps} value={props.value} onChange={onChange} />;\n }\n return (\n <span className=\"editable-radio-group-view\">\n {render ? render(props.value) : viewLabel ? <Tag color=\"#1890ff\">{viewLabel}</Tag> : null}\n </span>\n );\n};\n\nexport const RadioGroupFormItem = (props: EditableFormItemProps) => {\n const { formItemProps } = props.fieldConfig;\n\n return (\n <Form.Item\n {...formItemProps}\n name={props.name}\n className={classNames('editable-radio-group-form-item', formItemProps?.className)}\n >\n <RadioGroupFormItemContent {...props} />\n </Form.Item>\n );\n};\n","import { API, ModelType } from '@dimjs/model';\nimport { Model } from '@dimjs/model-react';\nimport { LabelValueItem } from '@flatbiz/utils';\n\nexport type ModelState = {\n selectorList: LabelValueItem[];\n queryIsEmpty: boolean;\n requestStatus: 'init' | 'request-pre' | 'request-success' | 'request-error';\n};\n\ntype ModelActionParams = {\n setSelectBoxList: ModelState['selectorList'];\n resetSelectBoxList: void;\n changeRequestStatus: ModelState['requestStatus'];\n};\n\nconst defaultState: ModelState = {\n selectorList: [],\n queryIsEmpty: false,\n requestStatus: 'init',\n};\n\nconst _SelectorWrapperModel: ModelType<ModelState, ModelActionParams> = {\n actions: {\n setSelectBoxList: (params) => {\n return (state) => {\n state.selectorList = params || [];\n state.requestStatus = 'request-success';\n };\n },\n resetSelectBoxList: () => {\n return (state) => {\n state.selectorList = [];\n };\n },\n changeRequestStatus: (params) => {\n return (state) => {\n state.requestStatus = params;\n };\n },\n },\n state: defaultState,\n};\n\nconst selectorWrapperModels: Record<string, API<ModelType<ModelState, ModelActionParams, any>>> = {};\n\n/**\n * ```\n * 使用方式\n * const [state, actions] = selectorWrapperModel('key值').useStore();\n * ```\n */\nexport const selectorWrapperModel = (key: string) => {\n if (!selectorWrapperModels[key]) {\n selectorWrapperModels[key] = Model(_SelectorWrapperModel);\n }\n return selectorWrapperModels[key];\n};\n","import { RedoOutlined } from '@ant-design/icons';\nimport { extend } from '@dimjs/utils';\nimport { useEffectCustom } from '@flatbiz/antd';\nimport {\n arrayField2LabelValue,\n isUndefinedOrNull,\n LabelValueItem,\n TPlainObject,\n valueIsEqual,\n} from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { Button, Empty, message, Select, SelectProps } from 'antd';\nimport {\n DependencyList,\n forwardRef,\n ReactElement,\n useImperativeHandle,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport { ModelState, selectorWrapperModel } from './model';\n\ntype SelectorServiceConfig = {\n params?: TPlainObject;\n requiredParamsKeys?: string[];\n onRequest?: (params?: any) => any;\n /**\n * 响应数据适配器\n */\n onRequestResultAdapter?: (respData: any) => TPlainObject[];\n};\n\nexport type SelectorWrapperProps = Omit<\n SelectProps,\n 'filterOption' | 'onSearch' | 'loading' | 'notFoundContent' | 'options' | 'fieldNames'\n> & {\n // 模型唯一值\n modelKey: string;\n fieldNames?: { label: string; value: string };\n /**\n * useEffect依赖性数组\n */\n effectDependencyList?: DependencyList;\n /**\n * 请求服务需求的数据,当设置`selectorList`后无效果\n */\n serviceConfig?: SelectorServiceConfig;\n /**\n * 同步设置选择器选项列表\n * ```\n * 1. 当设置selectorList后,serviceConfig、operateType=search、onSelectorListChange将失效\n * 2. 不支持异步数据,异步使用serviceConfig方式\n * 3. 如果配置fieldNames,会转换后使用\n * ```\n */\n selectorList?: TPlainObject[];\n /**\n * 通过服务获取数据后回调,当设置`selectorList`后无效果\n */\n onSelectorListChange?: (dataList: LabelValueItem[]) => void;\n /**\n * 添加全部选项\n * ```\n * 1. showAllOption = true,添加默认全部选项(value值为空字符串)\n * 2. 可自定义全部选项\n * ```\n */\n showAllOption?: true | JSX.Element;\n /**\n * 输入操作类型,默认值:filter\n * ```\n * 1. search:根据输入项去服务端查询\n * 2. filter:初始化已查询数据,根据输入内容筛选\n * 3. 在设置`selectorList`后,operateType=search将失效\n * ```\n */\n operateType?: 'search' | 'filter';\n // 搜索调接口字段名称,默认值:keyword\n searchFieldName?: string;\n // label渲染适配器\n onLabelRenderAdapter?: (dataItem: LabelValueItem) => string | ReactElement;\n};\n\nexport type SelectorWrapperRefApi = {\n onClearSelectorList: () => void;\n getSelectorList: () => LabelValueItem<string | number>[];\n};\n\n/**\n * 选择器包装组件\n * @param props\n * @returns\n * ```\n * 1. modelKey的配置是为了缓存数据;\n * 1.1: 当有effectDependencyList依赖项时,依赖项的发生变化后,每次都会去调用接口获取数据\n * 1.2: 当无effectDependencyList依赖项时,第一次调用接口成功后会有标记,下次访问存在标记,就不在调用接口,使用缓存数据;如果想强制刷新数据,可通过随便配置依赖项完成\n * 2. selectorList属性\n * 2.1 当设置selectorList属性后,serviceConfig、operateType=search、onSelectorListChange将失效\n * 2.2 不支持异步数据,异步使用serviceConfig方式\n * 3. operateType=search状态下,回填数据查询接口时,会在接口中默认添加id字段(id的值为回填的值)\n * ```\n */\nexport const SelectorWrapper = forwardRef<SelectorWrapperRefApi, SelectorWrapperProps>((props, ref) => {\n const {\n serviceConfig,\n showAllOption,\n effectDependencyList,\n onSelectorListChange,\n operateType,\n searchFieldName,\n selectorList,\n modelKey,\n fieldNames,\n ...otherProps\n } = props;\n\n const isSearch = operateType === 'search' && selectorList === undefined;\n const newServiceConfig = serviceConfig || {};\n const newEffectDependencyList = effectDependencyList || [];\n const changeOperateValueRef = useRef<string | number>();\n const [loading, setLoading] = useState(false);\n const [state, actions] = selectorWrapperModel(modelKey).useStore();\n\n const valueIsEmpty = (value: string | number) => {\n return value === '' || isUndefinedOrNull(value);\n };\n\n const serviceRespDataTranslation = (respData) => {\n const respDataList = newServiceConfig.onRequestResultAdapter\n ? newServiceConfig.onRequestResultAdapter(respData as unknown as TPlainObject)\n : respData;\n return arrayField2LabelValue(respDataList || [], fieldNames);\n };\n\n const startDataSourceRequest = hooks.useCallbackRef(\n async (inputValue?: string, searchId?: string | number) => {\n try {\n if (!newServiceConfig.onRequest) {\n throw new Error('onRequest 调用接口服务不能为空');\n }\n const requiredParamsKeys = newServiceConfig.requiredParamsKeys;\n const params = extend({}, newServiceConfig.params);\n if (requiredParamsKeys) {\n const isEmpty = requiredParamsKeys.find((key) => {\n return valueIsEmpty(params[key] as string | number);\n });\n if (isEmpty) {\n console.warn(`SelectorWrapper组件:参数:${requiredParamsKeys.join('、')}不能为空`);\n return;\n }\n }\n try {\n setLoading(true);\n void actions.changeRequestStatus('request-pre');\n if ((!isUndefinedOrNull(inputValue) || !isUndefinedOrNull(searchId)) && isSearch) {\n const keyword = searchFieldName || 'keyword';\n params[keyword] = inputValue;\n params['id'] = searchId;\n }\n const respData = await newServiceConfig.onRequest?.(params);\n const respDataTranslation = serviceRespDataTranslation(respData);\n setLoading(false);\n onSelectorListChange?.(respDataTranslation);\n void actions.setSelectBoxList(respDataTranslation);\n } catch (error) {\n console.error(error);\n setLoading(false);\n void actions.changeRequestStatus('request-error');\n void message.error(error.message || '获取数据异常');\n }\n } catch (error) {\n setLoading(false);\n void message.error((error.message as string) || '数据查询异常...');\n }\n },\n );\n\n useEffectCustom(() => {\n if (selectorList) {\n void actions.setSelectBoxList(arrayField2LabelValue(selectorList || [], fieldNames));\n return;\n }\n if (isSearch) return;\n // 当无依赖项时,如果存在缓存数据,就不在调用接口\n const realTimeState = selectorWrapperModel(modelKey).getState();\n\n if (\n newEffectDependencyList.length > 0 ||\n valueIsEqual(realTimeState.requestStatus, ['request-error', 'init'])\n ) {\n void startDataSourceRequest();\n }\n }, newEffectDependencyList);\n\n useEffectCustom(() => {\n if (isSearch) {\n if (valueIsEmpty(props.value as string | number)) {\n onSelectorListChange?.([]);\n void actions.resetSelectBoxList();\n } else {\n // 判断是否由外部回填value数据\n if (props.value !== changeOperateValueRef.current) {\n void startDataSourceRequest(undefined, props.value as string | number);\n }\n }\n }\n }, newEffectDependencyList.concat([props.value]));\n\n useImperativeHandle(ref, () => {\n return {\n onClearSelectorList: () => {\n void actions.resetSelectBoxList();\n },\n getSelectorList: () => {\n return state.selectorList;\n },\n };\n });\n\n const filterOption = hooks.useCallbackRef((input: string, option) => {\n return (option?.children as unknown as string).toLowerCase().indexOf(input.toLowerCase()) >= 0;\n });\n\n const onSearch = hooks.useDebounceCallback((value: string) => {\n if (value) {\n void startDataSourceRequest(value);\n } else {\n void actions.resetSelectBoxList();\n }\n }, 300);\n\n const onChange = hooks.useCallbackRef((value: string | number, ...otherParams) => {\n changeOperateValueRef.current = value;\n props.onChange?.(value, otherParams);\n });\n const onAgainRequest = hooks.useCallbackRef(() => {\n void startDataSourceRequest();\n });\n\n const selectOptionsAll = <Select.Option value=\"\">全部</Select.Option>;\n return (\n <Select\n showSearch={true}\n allowClear={true}\n {...otherProps}\n value={isUndefinedOrNull(props.value) ? undefined : props.value}\n notFoundContent={\n <NotFoundContent requestStatus={state.requestStatus} onAgainRequest={onAgainRequest} />\n }\n loading={loading}\n onSearch={isSearch ? onSearch : undefined}\n filterOption={isSearch ? false : filterOption}\n onChange={onChange}\n fieldNames={undefined}\n suffixIcon={\n state.requestStatus === 'request-error' ? (\n <RedoOutlined spin={loading} onClick={onAgainRequest} />\n ) : undefined\n }\n >\n {showAllOption === true ? selectOptionsAll : showAllOption}\n {state.selectorList.map((item) => {\n return (\n <Select.Option value={item.value} label={item.label} key={item.value}>\n {props.onLabelRenderAdapter ? props.onLabelRenderAdapter(item) : item.label}\n </Select.Option>\n );\n })}\n </Select>\n );\n});\n\nconst NotFoundContent = (props: {\n requestStatus?: ModelState['requestStatus'];\n onAgainRequest: () => void;\n}) => {\n const description = useMemo(() => {\n if (props.requestStatus === 'request-error') {\n return '数据查询异常';\n } else if (props.requestStatus === 'request-success') {\n return '暂无数据';\n }\n return '数据查询中';\n }, [props.requestStatus]);\n return (\n <Empty\n image={Empty.PRESENTED_IMAGE_SIMPLE}\n description={description}\n className={'tree-selector-wrapper-empty'}\n >\n {props.requestStatus === 'request-error' && (\n <Button type=\"primary\" onClick={props.onAgainRequest}>\n 重新获取数据\n </Button>\n )}\n </Empty>\n );\n};\n","import { isArray } from '@dimjs/lang';\nimport { classNames } from '@dimjs/utils';\nimport { arrayField2LabelValue, LabelValueItem } from '@flatbiz/utils';\nimport { Form, Tag } from 'antd';\nimport { useMemo } from 'react';\nimport { SelectorWrapper } from '../../selector-wrapper';\nimport { EditableFormItemProps, EditableSelectWrapperConfig } from '../type';\n\ntype FormItemContentProps = Omit<EditableFormItemProps, 'formItemProps'> & {\n value?: string | number | Array<string | number>;\n onChange?: (value: any) => void;\n};\n\nconst FormItemContent = (props: FormItemContentProps) => {\n const { editableConfig, editable, render } = props.fieldConfig;\n const editableComptProps = (editableConfig as EditableSelectWrapperConfig).editableComptProps;\n\n const viewLabelList = useMemo(() => {\n const value = isArray(props.value) ? props.value : ([] as any[]);\n if (editable) return [];\n const selectorList = arrayField2LabelValue(\n editableComptProps.selectorList || [],\n editableComptProps.fieldNames,\n );\n if (selectorList.length === 0) {\n return value.map((item) => ({ label: item, value: item }));\n }\n const returnList = [] as LabelValueItem[];\n value.forEach((item) => {\n const target = selectorList.find((temp) => temp.value === item);\n returnList.push(target ? target : { label: item, value: item });\n });\n return returnList;\n }, [editable, editableComptProps.fieldNames, editableComptProps.selectorList, props.value]);\n\n if (editable) {\n return <SelectorWrapper {...editableComptProps} value={props.value} onChange={props.onChange} />;\n }\n return (\n <span className=\"editable-selector-view\">\n {render\n ? render(props.value)\n : viewLabelList.map((tag, index) => (\n <Tag key={index} color=\"#1890ff\">\n {tag.label}\n </Tag>\n ))}\n </span>\n );\n};\n\nexport const SelectorWrapperFormItem = (props: EditableFormItemProps) => {\n const { formItemProps } = props.fieldConfig;\n\n return (\n <Form.Item\n {...formItemProps}\n name={props.name}\n className={classNames('editable-selector-wrapper-form-item', formItemProps?.className)}\n >\n <FormItemContent {...props} />\n </Form.Item>\n );\n};\n","import { isBoolean, isNumber, isString } from '@dimjs/lang';\nimport { Form } from 'antd';\nimport { useMemo } from 'react';\nimport { EditableFormItemProps, FieldSingleConfig } from '../type';\n\nconst FormItemTextContent = (props: {\n value?: string | number;\n name: EditableFormItemProps['name'];\n fieldConfig?: FieldSingleConfig;\n}) => {\n const value = useMemo(() => {\n if (props.fieldConfig?.render) return undefined;\n const isBaseData =\n isString(props.value) || isNumber(props.value) || isBoolean(props.value) || !props.value;\n if (!isBaseData) {\n console.warn(`Form.List name:【${props.name}】数据【${JSON.stringify(props.value)}】不能渲染在页面中`);\n }\n return isBaseData ? props.value : undefined;\n }, [props.fieldConfig?.render, props.name, props.value]);\n\n return <span className=\"editable-text-view\">{props.fieldConfig?.render?.(props.value) || value}</span>;\n};\n\nexport const TextFormItem = (props: { name: Array<number | string>; fieldConfig?: FieldSingleConfig }) => {\n return (\n <Form.Item noStyle name={props.name}>\n <FormItemTextContent name={props.name} fieldConfig={props.fieldConfig} />\n </Form.Item>\n );\n};\n","import { Form, Input } from 'antd';\nimport { EditableFormItemProps, EditableTextareaConfig } from '../type';\n\nexport const TextAreaFormItem = (props: EditableFormItemProps) => {\n const { formItemProps, editableConfig } = props.fieldConfig;\n return (\n <Form.Item {...formItemProps} name={props.name}>\n <Input.TextArea {...(editableConfig as EditableTextareaConfig).editableComptProps} />\n </Form.Item>\n );\n};\n","import { PlusOutlined } from '@ant-design/icons';\nimport { classNames, extend } from '@dimjs/utils';\nimport { TPlainObject } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { Button, message, Upload, UploadProps } from 'antd';\nimport { UploadChangeParam } from 'antd/lib/upload';\nimport { UploadFile, UploadListType } from 'antd/lib/upload/interface';\nimport { FC, Fragment, useState } from 'react';\nimport { useEffectCustom } from '../hooks';\nimport './style.less';\n\nexport type UploadWrapperFileItem = {\n uid: string;\n name: string;\n url?: string;\n};\n\nexport type UploadWrapperProps<T extends TPlainObject = TPlainObject> = {\n value?: T[];\n onChange?: (value?: T[]) => void;\n onUploadError?: (message?: string) => void;\n onUploadChange?: (info: UploadChangeParam<UploadFile>) => void;\n /**\n * 属性映射\n */\n fieldNames?: {\n uid?: string;\n name?: string;\n url?: string;\n };\n /**\n * 接口响应数据适配器,如果配置了fieldNames,适配器返回值会再进过fieldNames转换\n */\n onRequestResultAdapter?: (respData: any) => TPlainObject;\n} & Omit<UploadProps, 'onChange' | 'fileList'>;\n\n/**\n * 文件上传\n * ```\n * 1. 可通过配置children替换默认上传触发布局\n * 2. 接口返回结构:\n * formData上传接口返回值\n * {\n * code: '0000',\n * data: {\n * uid: '唯一值,可使用fileKey值'\n * name: '文件名称'\n * url: '预览地址'\n * }\n * }\n * 3. 如果接口返回的不是上面的字段名称,可通过fieldNames配置接口返回字段名称映射\n *\n * 4. 最佳使用方式,与Form结合使用\n * <Form.Item name=\"attachmentList\" label=\"附件\">\n * <UploadWrapper action={uploadUrl} />\n * </Form.Item>\n * ```\n *\n */\nexport const UploadWrapper: FC<UploadWrapperProps> = (props) => {\n const { onChange, onUploadError, value, ...otherProps } = props;\n const [uploadList, setUploadList] = useState<UploadWrapperFileItem[]>();\n const fieldNames = extend(\n {\n uid: 'uid',\n name: 'name',\n url: 'url',\n },\n props.fieldNames,\n ) as Required<UploadWrapperFileItem>;\n\n useEffectCustom(() => {\n setUploadList(\n value?.map((item) => {\n return {\n uid: item[fieldNames.uid],\n name: item[fieldNames.name],\n url: item[fieldNames.url],\n };\n }),\n );\n }, [fieldNames.name, fieldNames.uid, fieldNames.url, value]);\n\n const onUploadChange = hooks.useCallbackRef((info) => {\n const fileList = info.fileList as TPlainObject[];\n if (info.file.status === 'done') {\n const respData = info.file.response;\n if (respData.code === '0000') {\n const result = (\n props.onRequestResultAdapter ? props.onRequestResultAdapter(respData.data) : respData.data\n ) as TPlainObject;\n result[fieldNames.uid] = result[fieldNames.uid] || info.file.uid;\n result[fieldNames.name] = result[fieldNames.name] || info.file.name;\n if (props.maxCount === 1) {\n onChange?.([result]);\n } else {\n onChange?.((value || []).concat(result));\n }\n } else {\n if (onUploadError) {\n onUploadError(respData.message as string);\n } else {\n void message.error((respData.message as string) || '上传操作失败...');\n }\n fileList[fileList.length - 1] = {\n ...fileList[fileList.length - 1],\n status: 'error',\n };\n }\n } else if (info.file.status === 'removed') {\n const uid = info.file.uid;\n const targetList = value !== undefined ? [...value] : [];\n const targetIndex = targetList.findIndex((item) => {\n const tempUid = item[fieldNames.uid];\n return tempUid === uid;\n });\n if (targetIndex >= 0) {\n targetList.splice(targetIndex, 1);\n }\n onChange?.(targetList);\n } else if (info.file.status === 'error') {\n if (onUploadError) {\n onUploadError();\n } else {\n void message.error('上传操作失败...');\n }\n }\n // https://github.com/ant-design/ant-design/issues/2423\n setUploadList([...fileList] as UploadWrapperFileItem[]);\n props.onUploadChange?.(info);\n });\n\n return (\n <Upload\n {...otherProps}\n onChange={onUploadChange}\n fileList={uploadList}\n className={classNames('v-upload-wrapper', otherProps.className)}\n >\n {otherProps.disabled ? null : (\n <UploadTrigger listType={otherProps.listType}>{props.children}</UploadTrigger>\n )}\n </Upload>\n );\n};\n\nconst UploadTrigger: FC<{ listType?: UploadListType }> = (props) => {\n if (props.children) return <Fragment>{props.children}</Fragment>;\n if (props.listType === 'picture-card') {\n return (\n <div>\n <PlusOutlined />\n <div style={{ marginTop: 8 }}>上传图片</div>\n </div>\n );\n }\n if (props.listType === 'picture') {\n return (\n <Button type=\"primary\" ghost>\n 选择图片上传\n </Button>\n );\n }\n return (\n <Button type=\"primary\" ghost>\n 选择文件上传\n </Button>\n );\n};\n","import { classNames } from '@dimjs/utils';\nimport { Form } from 'antd';\nimport { UploadWrapper } from '../../upload-wrapper';\nimport { EditableFileUploadConfig, EditableFormItemProps } from '../type';\n\nconst UploadWrapperFormItemContent = (\n props: EditableFormItemProps & { value?: any; onChange?: (value?: any) => void },\n) => {\n const { editableConfig, render, editable } = props.fieldConfig;\n const { children, ...otherProps } = (editableConfig as EditableFileUploadConfig).editableComptProps;\n if (editable) {\n return (\n <UploadWrapper listType=\"text\" {...otherProps} value={props.value} onChange={props.onChange}>\n {children}\n </UploadWrapper>\n );\n }\n return (\n <div className=\"upload-wrapper-selector-view\">\n {render ? (\n render(props.value)\n ) : (\n <UploadWrapper listType=\"text\" {...otherProps} value={props.value} disabled={true} />\n )}\n </div>\n );\n};\n\nexport const UploadWrapperFormItem = (props: EditableFormItemProps) => {\n const { formItemProps } = props.fieldConfig;\n return (\n <Form.Item\n {...formItemProps}\n name={props.name}\n className={classNames('editable-upload-wrapper-form-item', formItemProps?.className)}\n >\n <UploadWrapperFormItemContent {...props} />\n </Form.Item>\n );\n};\n","import { extend } from '@dimjs/utils';\nimport { FieldSingleConfig } from '../type';\nimport { getEditable } from '../utils';\nimport { CheckboxGroupFormItem } from './checkbox-group';\nimport { DatePickerWrapperFormItem } from './date-picker-wrapper';\nimport { DateRangePickerWrapperFormItem } from './date-range-picker-wrapper';\nimport { InputFormItem } from './input';\nimport { InputNumberFormItem } from './input-number';\nimport { RadioGroupFormItem } from './radio-group';\nimport { SelectorWrapperFormItem } from './selector-wrapper';\nimport { TextFormItem } from './text';\nimport { TextAreaFormItem } from './textarea';\nimport { UploadWrapperFormItem } from './upload-wrapper';\n\nexport type FormItemAdapterProps = {\n name: Array<number | string>;\n completeName: Array<number | string>;\n fieldConfig: FieldSingleConfig;\n tableRowIndex: number;\n};\n\nexport const FormItemAdapter = (props: FormItemAdapterProps) => {\n const { editableConfig, editable } = props.fieldConfig;\n const newEditable = getEditable(editable, props.tableRowIndex);\n const fieldConfig = extend({}, props.fieldConfig, { editable: newEditable });\n\n const commomProps = {\n name: props.name,\n fieldConfig,\n };\n\n if (editableConfig?.type === 'input' && newEditable) {\n return <InputFormItem {...commomProps} />;\n } else if (editableConfig?.type === 'inputNumber' && newEditable) {\n return <InputNumberFormItem {...commomProps} />;\n } else if (editableConfig?.type === 'textArea' && newEditable) {\n return <TextAreaFormItem {...commomProps} />;\n } else if (editableConfig?.type === 'datePickerWrapper' && newEditable) {\n return <DatePickerWrapperFormItem {...commomProps} />;\n } else if (editableConfig?.type === 'dateRangePickerWrapper') {\n return <DateRangePickerWrapperFormItem {...commomProps} />;\n } else if (editableConfig?.type === 'selectorWrapper') {\n return <SelectorWrapperFormItem {...commomProps} />;\n } else if (editableConfig?.type === 'checkboxGroup') {\n return <CheckboxGroupFormItem {...commomProps} />;\n } else if (editableConfig?.type === 'radioGroup') {\n return <RadioGroupFormItem {...commomProps} />;\n } else if (editableConfig?.type === 'uploadWrapper') {\n return <UploadWrapperFormItem {...commomProps} />;\n } else if (editableConfig?.type === 'custom') {\n return editableConfig.editableComptProps({\n name: props.name,\n editable: newEditable,\n completeName: props.completeName,\n });\n }\n return <TextFormItem {...commomProps} />;\n};\n","import { DeleteOutlined } from '@ant-design/icons';\nimport { classNames } from '@dimjs/utils';\nimport { Button, Form, Space } from 'antd';\nimport { FormItemAdapter } from '../form-item';\nimport { FormListConfig } from '../type';\nimport { getEditable } from '../utils';\n\nexport type FormListProps = {\n name: Array<number | string>;\n formListConfig: FormListConfig;\n tableRowIndex: number;\n completeName: (string | number)[];\n};\n\nexport const FormList = (props: FormListProps) => {\n const from = Form.useFormInstance();\n const {\n onFormListBeforeRender,\n editableConfigList,\n onFormListAfterRender,\n onFormListItemBeforeRender,\n onFormListItemAfterRender,\n deleteOperateRender,\n } = props.formListConfig;\n return (\n <Form.List name={props.name}>\n {(fields, { add, remove }) => (\n <>\n {onFormListBeforeRender\n ? onFormListBeforeRender({\n tableRowIndex: props.tableRowIndex,\n add,\n get value() {\n return from.getFieldValue(props.completeName);\n },\n })\n : null}\n {fields.map((fieldChild, index) => {\n const hasEditable = editableConfigList.find((item) =>\n getEditable(item.editable, props.tableRowIndex),\n );\n const className = classNames(\n 'editable-inner-formlist-item',\n `editable-inner-formlist-item-${props.name[1]}`,\n { 'editable-inner-formlist-item_preview': !hasEditable },\n );\n return (\n <div key={index} className={className}>\n {onFormListItemBeforeRender\n ? onFormListItemBeforeRender({\n add,\n remove: () => {\n remove(index);\n },\n formListItemIndex: index,\n tableRowIndex: props.tableRowIndex,\n get value() {\n return from.getFieldValue([...props.completeName, fieldChild.name]);\n },\n })\n : null}\n <Space>\n {editableConfigList.map((fieldItem, index) => {\n return (\n <FormItemAdapter\n name={[fieldChild.name, fieldItem.fieldName]}\n fieldConfig={fieldItem}\n key={index}\n tableRowIndex={props.tableRowIndex}\n completeName={[...props.completeName, fieldChild.name]}\n />\n );\n })}\n {hasEditable ? (\n <DeleteFormListItem\n deleteOperateRender={deleteOperateRender}\n remove={() => {\n remove(index);\n }}\n index={index}\n />\n ) : null}\n </Space>\n {onFormListItemAfterRender\n ? onFormListItemAfterRender({\n add,\n formListItemIndex: index,\n tableRowIndex: props.tableRowIndex,\n remove: () => {\n remove(index);\n },\n get value() {\n return from.getFieldValue([...props.completeName, fieldChild.name]);\n },\n })\n : null}\n </div>\n );\n })}\n {onFormListAfterRender\n ? onFormListAfterRender({\n tableRowIndex: props.tableRowIndex,\n add,\n get value() {\n return from.getFieldValue(props.completeName);\n },\n })\n : null}\n </>\n )}\n </Form.List>\n );\n};\n\nconst DeleteFormListItem = (props: {\n deleteOperateRender: FormListConfig['deleteOperateRender'];\n remove: () => void;\n index: number;\n}) => {\n return (\n <Form.Item>\n {props.deleteOperateRender ? (\n props.deleteOperateRender({ remove: props.remove, formListItemIndex: props.index })\n ) : (\n <Button type=\"link\" danger icon={<DeleteOutlined />} onClick={props.remove}>\n 删除\n </Button>\n )}\n </Form.Item>\n );\n};\n","import { isArray } from '@dimjs/lang';\nimport { FormItemAdapter } from '../form-item';\nimport { TextFormItem } from '../form-item/text';\nimport { FieldSingleConfig, FormListConfig } from '../type';\nimport { FormList } from './form-list';\n\nexport type FormListItemProps = {\n name: Array<number | string>;\n fieldConfig?: FieldSingleConfig | FormListConfig;\n tableRowIndex: number;\n completeName: (string | number)[];\n};\n\nexport const FormListItem = (props: FormListItemProps) => {\n if (props.fieldConfig) {\n if (isArray(props.fieldConfig['editableConfigList'])) {\n const formListConfig = props.fieldConfig as FormListConfig;\n return (\n <FormList\n name={props.name}\n completeName={props.completeName}\n formListConfig={formListConfig}\n tableRowIndex={props.tableRowIndex}\n />\n );\n } else {\n return (\n <FormItemAdapter\n name={props.name}\n fieldConfig={props.fieldConfig as FieldSingleConfig}\n tableRowIndex={props.tableRowIndex}\n completeName={props.completeName}\n />\n );\n }\n }\n return <TextFormItem name={props.name} />;\n};\n","import { PlusOutlined } from '@ant-design/icons';\nimport { Button, Form, Table, TableProps } from 'antd';\nimport { FormListOperation, FormListProps } from 'antd/lib/form/FormList';\nimport { ColumnsType } from 'antd/lib/table';\nimport { Fragment, ReactElement, useMemo } from 'react';\nimport { FormListItem } from './form-list-item';\nimport './style.less';\nimport { EditableTableRecordType, FieldSingleConfig, FormListConfig } from './type';\n\n// export type EditableTableDataSourceItem = FormListFieldData & { operation: FormListOperation };\n\n/**\n * antd 默认render功能此处不能使用\n */\nexport type EditableTableColumn = Omit<ColumnsType['0'], 'render'> & {\n dataIndex?: string;\n fieldConfig?: FieldSingleConfig | FormListConfig;\n /**\n * 配置操作功能处理后,fieldConfig配置将失效\n * ```\n * 1. tableRowIndex:当前row的索引值\n * 1. name:当前row的form.item的name值\n * ```\n */\n operateRender?: (item: {\n tableRowIndex: number;\n name: Array<string | number>;\n operation: FormListOperation;\n }) => ReactElement;\n};\n\nexport type EditableTableProps = {\n name: string;\n /**\n * ```\n * antd table属性\n * 1. 新增cellVerticalAlign,单元格竖直方向对齐方式,设置table column onCell属性后失效\n * ```\n */\n tableProps?: Omit<TableProps<EditableTableRecordType>, 'dataSource' | 'columns' | 'rowKey'> & {\n cellVerticalAlign?: 'baseline' | 'middle' | 'top' | 'bottom';\n };\n columns: EditableTableColumn[];\n onTableBeforeRender?: (formListOperation: FormListOperation, nextRowIndex: number) => ReactElement | null;\n /**\n * 设置后,将覆盖底部`新增`按钮\n */\n onTableAfterRender?: (formListOperation: FormListOperation, nextRowIndex: number) => ReactElement | null;\n rules?: FormListProps['rules'];\n};\n\nexport const EditableTable = (props: EditableTableProps) => {\n const columns = useMemo(() => {\n if (!props.columns) return [];\n return props.columns.map((columnItem) => {\n const { fieldConfig, operateRender, ...otherColumnItem } = columnItem;\n return {\n onCell: () => {\n return {\n valign: props.tableProps?.cellVerticalAlign || 'middle',\n };\n },\n ...otherColumnItem,\n render: (_value, record) => {\n if (operateRender) {\n return (\n operateRender({\n name: [...props.name, record.name],\n tableRowIndex: record.name,\n operation: record.operation,\n }) || ''\n );\n }\n return (\n <FormListItem\n name={columnItem.dataIndex ? [record.name, columnItem.dataIndex] : [record.name]}\n completeName={\n columnItem.dataIndex\n ? [...props.name, record.name, columnItem.dataIndex]\n : [...props.name, record.name]\n }\n fieldConfig={fieldConfig}\n tableRowIndex={record.name}\n />\n );\n },\n };\n }) as ColumnsType<EditableTableRecordType>;\n }, [props.columns, props.name, props.tableProps?.cellVerticalAlign]);\n\n return (\n <div className=\"editable-table\">\n <Form.List name={props.name} rules={props.rules}>\n {(fields, formListOperation) => {\n return (\n <Fragment>\n {props.onTableBeforeRender ? props.onTableBeforeRender(formListOperation, fields.length) : null}\n <Table\n scroll={{ x: 'max-content' }}\n pagination={false}\n {...props.tableProps}\n dataSource={fields.map((item) => ({ ...item, operation: formListOperation }))}\n columns={columns}\n rowKey=\"key\"\n />\n {props.onTableAfterRender ? (\n props.onTableAfterRender(formListOperation, fields.length)\n ) : (\n <Button\n type=\"dashed\"\n onClick={() => formListOperation.add()}\n block\n icon={<PlusOutlined />}\n style={{ marginTop: 15 }}\n >\n 新增\n </Button>\n )}\n </Fragment>\n );\n }}\n </Form.List>\n </div>\n );\n};\n","import { hooks } from '@wove/react';\nimport { Button, message, Upload, UploadProps } from 'antd';\nimport { FC, useState } from 'react';\n\nexport type FileImportProps = {\n onImportFinish: (data?: any) => void;\n} & Omit<\n UploadProps,\n | 'fileList'\n | 'showUploadList'\n | 'itemRender'\n | 'listType'\n | 'multiple'\n | 'previewFile'\n | 'progress'\n | 'onChange'\n | 'onDownload'\n | 'onRemove'\n | 'onPreview'\n | 'directory'\n | 'customRequest'\n | 'defaultFileList'\n | 'iconRender'\n>;\n\n/**\n * 文件导入\n * ```\n * 默认值:\n * name: 'file',\n * accept: '.xlsx,.xls',\n * ```\n */\nexport const FileImport: FC<FileImportProps> = (props) => {\n const { onImportFinish, ...otherProps } = props;\n\n const [loading, setLoading] = useState(false);\n\n const onChange = hooks.useCallbackRef((info) => {\n if (info.file.status === 'uploading') {\n setLoading(true);\n } else if (info.file.status === 'done') {\n setLoading(false);\n const respData = info.file.response;\n if (respData.code === '0000') {\n onImportFinish(respData.data);\n } else {\n void message.error((respData.message as string) || '文件导入异常...');\n }\n }\n });\n\n return (\n <Upload showUploadList={false} maxCount={1} {...otherProps} onChange={onChange}>\n {props.children ? (\n props.children\n ) : (\n <Button type=\"primary\" ghost loading={loading}>\n 选择文件\n </Button>\n )}\n </Upload>\n );\n};\n\nFileImport.defaultProps = {\n name: 'file',\n accept: '.xlsx,.xls',\n};\n","import { isArray } from '@dimjs/lang';\nimport { classNames, extend } from '@dimjs/utils';\nimport { hooks } from '@wove/react';\nimport { Upload, UploadProps } from 'antd';\nimport { UploadChangeParam } from 'antd/lib/upload';\nimport { UploadFile } from 'antd/lib/upload/interface';\nimport { FC, useEffect, useState } from 'react';\nimport { useEffectCustom } from '../hooks';\nimport './style.less';\n\nexport type FileUploadItem = {\n fileKey: string;\n fileName: string;\n};\n\ntype AntdFileUploadItem = {\n uid: string;\n name: string;\n fileKey: string;\n};\n\nexport type FileUploadProps = {\n onChange?: (value?: FileUploadItem[]) => void;\n onUploadError?: (message?: string) => void;\n value?: FileUploadItem[];\n onPreview?: (item: FileUploadItem) => void;\n onUploadChange?: (info: UploadChangeParam<UploadFile>) => void;\n /**\n * 属性映射\n */\n fieldNames?: {\n fileKey?: string;\n fileName?: string;\n };\n} & Omit<UploadProps, 'onChange' | 'fileList' | 'onPreview'>;\n\n/**\n * 文件上传,结合Form使用最佳\n * ```\n * 接口返回结构:\n * formData上传接口必须返回fileKey值\n * {\n * code: '0000',\n * data: {\n * fileKey: '预览文件对应的fileKey'\n * }\n * }\n * 可通过fieldNames配置接口返回值属性名称映射\n * ```\n * ```\n * 最佳使用方式:\n * <Form.Item name=\"attachmentList\" label=\"附件\">\n * <FileUpload action={uploadUrl} onPreview={onPreviewFile}>\n * <Button type=\"primary\">选择文件导入</Button>\n * </FileUpload>\n * </Form.Item>\n * ```\n *\n */\nexport const FileUpload: FC<FileUploadProps> = (props) => {\n useEffectCustom(() => {\n console.error('@flatbiz/antd库【FileUpload】组件已经过期,请使用【UploadWrapper】组件替换');\n }, []);\n\n const { onChange, onUploadError, onPreview, value, ...otherProps } = props;\n const [uploadValue, setUploadValue] = useState<AntdFileUploadItem[]>([]);\n const fieldNames = extend(\n {\n fileKey: 'fileKey',\n fileName: 'fileName',\n },\n props.fieldNames,\n ) as FileUploadItem;\n\n useEffect(() => {\n if (value && isArray(value)) {\n setUploadValue(\n value.map((item) => {\n return {\n uid: item['uid'] || item[fieldNames.fileKey],\n name: item[fieldNames.fileName],\n fileKey: item[fieldNames.fileKey],\n url: item[fieldNames.fileKey],\n thumbUrl: item[fieldNames.fileKey],\n };\n }),\n );\n }\n }, [fieldNames.fileKey, fieldNames.fileName, value]);\n\n const onUploadChange = hooks.useCallbackRef((info) => {\n if (info.file.status === 'done') {\n const respData = info.file.response;\n if (respData.code === '0000') {\n const result = respData.data || {};\n const uploadItem = {\n uid: info.file.uid,\n fileName: result[fieldNames.fileName] || (info.file.name as string),\n fileKey: result[fieldNames.fileKey],\n } as FileUploadItem;\n const respValue = (value || []).concat(uploadItem);\n onChange?.(respValue as unknown as FileUploadItem[]);\n } else {\n onUploadError?.(respData.message as string);\n }\n } else if (info.file.status === 'removed') {\n const uid = info.file.uid;\n const targetList = value !== undefined ? [...value] : [];\n const targetIndex = targetList.findIndex((item) => {\n const tempUid = item['uid'] || item[fieldNames.fileKey];\n return tempUid === uid;\n });\n if (targetIndex >= 0) {\n targetList.splice(targetIndex, 1);\n }\n onChange?.(targetList);\n } else if (info.file.status === 'error') {\n onUploadError?.();\n }\n // https://github.com/ant-design/ant-design/issues/2423\n setUploadValue([...info.fileList]);\n props.onUploadChange?.(info);\n });\n\n const onUploadPreview = hooks.useCallbackRef((file) => {\n onPreview?.({\n fileKey: file[fieldNames.fileKey],\n fileName: file[fieldNames.fileName],\n });\n });\n\n return (\n <Upload\n {...otherProps}\n onChange={onUploadChange}\n onPreview={onUploadPreview}\n fileList={uploadValue}\n className={classNames('v-file-upload', otherProps.className)}\n >\n {props.children}\n </Upload>\n );\n};\n","import { isArray } from '@dimjs/lang';\nimport { classNames } from '@dimjs/utils';\nimport { isUndefinedOrNull } from '@flatbiz/utils';\nimport { cloneElement, CSSProperties, FC } from 'react';\nimport './style.less';\n\nexport type FlexLayoutProps = {\n className?: string;\n fullIndex?: number | number[];\n direction?: 'vertical' | 'horizontal';\n onClick?: () => void;\n style?: CSSProperties;\n gap?: number;\n};\n/**\n * flex布局\n * 1. direction:默认值vertical\n * 2. gap间隙距离\n * 3. fullIndex:指定children数组索引值对象flex=1\n * 4. children添加key熟悉\n * @param props\n * @returns\n */\nexport const FlexLayout: FC<FlexLayoutProps> = (props) => {\n const childrens = (isArray(props.children) ? props.children : [props.children]) as JSX.Element[];\n const direction = props.direction || 'vertical';\n const gap = props.gap ? props.gap : 0;\n const fullIndexList = !isUndefinedOrNull(props.fullIndex)\n ? isArray(props.fullIndex)\n ? props.fullIndex\n : [props.fullIndex as number]\n : [];\n return (\n <div\n className={classNames('v-flex-layout', `v-flex-${direction}`, props.className)}\n style={props.style}\n onClick={props.onClick}\n >\n {childrens.map((children, index) => {\n const childrenStyle = children.props.style || {};\n const style = fullIndexList.includes(index) ? { flex: 1, ...childrenStyle } : childrenStyle;\n if (index < childrens.length - 1 && gap > 0) {\n if (direction === 'horizontal') {\n style.marginRight = gap;\n } else {\n style.marginBottom = gap;\n }\n }\n return cloneElement(children, { style, key: index });\n })}\n </div>\n );\n};\n","import { CSSProperties, VFC } from 'react';\n\nexport type GapProps = {\n height?: number;\n className?: string;\n style?: CSSProperties;\n};\n\n/**\n * 间隙组件\n * @param props\n * @returns\n */\nexport const Gap: VFC<GapProps> = (props) => {\n return <div style={{ height: props.height, ...props.style }} className={props.className} />;\n};\n","import { classNames } from '@dimjs/utils';\nimport { Tooltip } from 'antd';\nimport { CSSProperties, VFC } from 'react';\nimport './style.less';\n\nexport type IconWrapperProps = {\n hoverTips?: string;\n icon?: React.ReactNode;\n style?: CSSProperties;\n text?: string | React.ReactElement;\n className?: string;\n size?: 'small' | 'middle' | 'large';\n};\nexport const IconWrapper: VFC<IconWrapperProps> = (props) => {\n return (\n <Tooltip title={props.hoverTips}>\n <div\n className={classNames('icon-wrapper', `icon-wrapper-${props.size || 'middle'}`, props.className)}\n style={props.style}\n >\n {props.icon}\n {props.text ? <span className=\"icon-wrapper-text\">{props.text}</span> : null}\n </div>\n </Tooltip>\n );\n};\n","import { ModelType } from '@dimjs/model';\n\nexport interface ModalStateType {\n title?: string;\n /**\n * 显示modal\n */\n visible: boolean;\n /**\n * 用来处理form, `更新`的时候的传递当前item列表行的数据, 当`创建`的时候强制设置为 `undefined`\n */\n itemData?: Record<string, unknown> | null;\n operateType: 'create' | 'update' | 'view';\n pageLoading?: boolean;\n}\n\nexport interface ModalActionsParamType {\n openModalForm: Pick<ModalStateType, 'title' | 'itemData' | 'operateType' | 'pageLoading'>;\n closeModal: void;\n setModalItemData: Record<string, unknown>;\n}\n\n/**\n * @shared\n * 提供公共的modal处理, 通常用来表单编辑, 弹窗抽屉模式.\n * 注意全部理论上只允许一个modal实例存在,如需处理多个, 请自行实例话模型.\n */\nexport const ModalModel: ModelType<ModalStateType, ModalActionsParamType> = {\n actions: {\n openModalForm({ itemData, title, operateType, pageLoading }) {\n return (state) => {\n state.itemData = itemData;\n state.title = title;\n state.operateType = operateType;\n state.pageLoading = pageLoading;\n state.visible = true;\n };\n },\n closeModal() {\n return (state) => {\n state.visible = false;\n };\n },\n setModalItemData(params) {\n return (state) => {\n state.pageLoading = false;\n state.itemData = params;\n };\n },\n },\n state: {\n visible: false,\n title: '',\n operateType: 'view',\n },\n};\n","import { Button, ButtonProps, Space } from 'antd';\nimport { Fragment } from 'react';\n\nexport interface ModalOperationProps {\n loading?: boolean;\n okText?: string;\n cancelText?: string;\n onOk?: () => void;\n onCancel?: () => void;\n hideOkBtn?: boolean;\n okButtonProps?: Omit<ButtonProps, 'onClick' | 'loading' | 'className'>;\n cancelButtonProps?: Omit<ButtonProps, 'onClick' | 'loading' | 'className'>;\n}\n\nexport const ModalOperation = ({\n loading,\n okText = '保存',\n cancelText = '取消',\n onCancel,\n onOk,\n hideOkBtn,\n ...otherProps\n}: ModalOperationProps) => {\n return (\n <Fragment>\n <Space size=\"middle\">\n <Button {...otherProps.cancelButtonProps} className=\"cancel-btn\" onClick={onCancel}>\n {cancelText}\n </Button>\n {hideOkBtn != true && (\n <Button\n type=\"primary\"\n {...otherProps.okButtonProps}\n className=\"ok-btn\"\n onClick={onOk}\n loading={loading}\n >\n {okText}\n </Button>\n )}\n </Space>\n </Fragment>\n );\n};\n","import { classNames } from '@dimjs/utils';\nimport { Modal, ModalProps } from 'antd';\nimport { FC, useEffect } from 'react';\nimport { ModalOperation, ModalOperationProps } from './modal-operation';\nimport './style.less';\n\nexport type ModalFormProps = {\n className?: string;\n // 整个modal页面级的spinning <Page loading />\n pageLoading?: boolean;\n // 设置了 ModalProps footer属性后,operationProps配置将失效\n operationProps?: ModalOperationProps;\n footer?: null | React.ReactNode;\n} & Omit<\n ModalProps,\n | 'footer'\n | 'onOk'\n | 'okText'\n | 'cancelText'\n | 'okButtonProps'\n | 'cancelButtonProps'\n | 'okType'\n | 'confirmLoading'\n>;\n\nconst PageLoader = () => {\n return (\n <div className=\"modal-wraper-loader\">\n <div className=\"loader-wrapper\">\n <div className=\"loader-inner\" />\n <div className=\"loader-text\">LOADING</div>\n </div>\n </div>\n );\n};\n\n/**\n * 弹窗机制\n * ```\n * 1. 默认 destroyOnClose = true\n * 2. 默认 forceRender = false\n * ```\n */\nexport const ModalWraper: FC<ModalFormProps> = (props) => {\n const { pageLoading, className, width, children, footer, operationProps, ...otherProps } = props;\n\n useEffect(() => {\n console.error(\n '@flatbiz/antd库【ModalWraper】组件已经过期,请使用ModalWrapper替换包括ModalWraper=>ModalWrapper、createModalWraperModel=>createModalWrapperModel,如果使用ModalWrapper组件原用法需要调整',\n );\n }, []);\n\n return (\n <Modal\n className={classNames('modal-wraper', className)}\n keyboard={false}\n forceRender={false}\n destroyOnClose={true}\n {...otherProps}\n width={width || 600}\n footer={null}\n >\n <div className=\"modal-wraper-content\">\n {children}\n {pageLoading && <PageLoader />}\n </div>\n {footer !== null && (\n <div className=\"modal-wraper-content-footer\">\n {footer ? footer : <ModalOperation {...operationProps} />}\n </div>\n )}\n </Modal>\n );\n};\n","import { API, ModelType } from '@dimjs/model';\nimport { Model } from '@dimjs/model-react';\nimport { ModalActionsParamType, ModalModel, ModalStateType } from './modal.model';\n\n/**\n * 组件单词写错,请输入\n */\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nconst modalModels: Record<string, API<ModelType<ModalStateType, ModalActionsParamType, any>>> = {};\n\n/**\n * modal弹窗模型\n * @param key 唯一值必传\n * @returns\n *\n * ```\n * 使用方式\n * const [modalState, modalActions] = createModalWraperModel('key值').useStore();\n * ```\n */\nexport const createModalWraperModel = (key: string) => {\n if (!modalModels[key]) {\n modalModels[key] = Model(ModalModel);\n }\n return modalModels[key];\n};\n\nexport * from './modal-wraper';\n","import { ModelType } from '@dimjs/model';\n\nexport interface ModalStateType {\n title?: string;\n /**\n * 显示modal\n */\n visible: boolean;\n /**\n * 用来处理form, `更新`的时候的传递当前item列表行的数据, 当`创建`的时候强制设置为 `undefined`\n */\n itemData?: Record<string, unknown> | null;\n operateType: 'create' | 'update' | 'view';\n pageLoading?: boolean;\n}\n\nexport interface ModalActionsParamType {\n openModalForm: Pick<ModalStateType, 'title' | 'itemData' | 'operateType' | 'pageLoading'>;\n closeModal: void;\n setModalItemData: Record<string, unknown>;\n}\n\n/**\n * @shared\n * 提供公共的modal处理, 通常用来表单编辑, 弹窗抽屉模式.\n * 注意全部理论上只允许一个modal实例存在,如需处理多个, 请自行实例话模型.\n */\nexport const ModalModel: ModelType<ModalStateType, ModalActionsParamType> = {\n actions: {\n openModalForm({ itemData, title, operateType, pageLoading }) {\n return (state) => {\n state.itemData = itemData;\n state.title = title;\n state.operateType = operateType;\n state.pageLoading = pageLoading;\n state.visible = true;\n };\n },\n closeModal() {\n return (state) => {\n state.visible = false;\n };\n },\n setModalItemData(params) {\n return (state) => {\n state.pageLoading = false;\n state.itemData = params;\n };\n },\n },\n state: {\n visible: false,\n title: '',\n operateType: 'view',\n },\n};\n","import { Button, ButtonProps, Space } from 'antd';\nimport { Fragment } from 'react';\n\nexport interface ModalOperationOldProps {\n loading?: boolean;\n okText?: string;\n cancelText?: string;\n onOk?: () => void;\n onCancel?: () => void;\n hideOkBtn?: boolean;\n okButtonProps?: Omit<ButtonProps, 'onClick' | 'loading' | 'className'>;\n cancelButtonProps?: Omit<ButtonProps, 'onClick' | 'loading' | 'className'>;\n}\n\nexport const ModalOperation = ({\n loading,\n okText = '保存',\n cancelText = '取消',\n onCancel,\n onOk,\n hideOkBtn,\n ...otherProps\n}: ModalOperationOldProps) => {\n return (\n <Fragment>\n <Space size=\"middle\">\n <Button {...otherProps.cancelButtonProps} className=\"cancel-btn\" onClick={onCancel}>\n {cancelText}\n </Button>\n {hideOkBtn != true && (\n <Button\n type=\"primary\"\n {...otherProps.okButtonProps}\n className=\"ok-btn\"\n onClick={onOk}\n loading={loading}\n >\n {okText}\n </Button>\n )}\n </Space>\n </Fragment>\n );\n};\n","import { classNames } from '@dimjs/utils';\nimport { Modal, ModalProps } from 'antd';\nimport { FC, Fragment } from 'react';\nimport { useEffectCustom } from '../hooks/use-effect-custom';\nimport { ModalOperation, ModalOperationOldProps } from './modal-operation';\nimport './style.less';\n\ntype ModalWrapperStaticMethods = {\n Content: typeof ModalWrapperContent;\n Footer: typeof ModalWrapperFooter;\n};\n\nexport type ModalWrapperProps = {\n className?: string;\n // 整个modal页面级的spinning <Page loading />\n pageLoading?: boolean;\n} & Omit<\n ModalProps,\n | 'footer'\n | 'onOk'\n | 'okText'\n | 'cancelText'\n | 'okButtonProps'\n | 'cancelButtonProps'\n | 'okType'\n | 'confirmLoading'\n>;\n\nconst PageLoader = () => {\n return (\n <div className=\"modal-wrapper-loader\">\n <div className=\"loader-wrapper\">\n <div className=\"loader-inner\" />\n <div className=\"loader-text\">LOADING</div>\n </div>\n </div>\n );\n};\n\nconst ModalWrapperContent: FC<{ operationProps?: ModalOperationOldProps }> = (props) => {\n return (\n <Fragment>\n <div className=\"modal-wrapper-content\">{props.children}</div>\n {props.operationProps ? (\n <ModalWrapperFooter>\n <ModalOperation {...props.operationProps} />\n </ModalWrapperFooter>\n ) : null}\n </Fragment>\n );\n};\n\nconst ModalWrapperFooter = (props) => {\n return <div className=\"modal-wrapper-footer\">{props.children}</div>;\n};\n\n/**\n * 弹窗机制\n * ```\n * 1. 默认 destroyOnClose = true\n * 2. 默认 forceRender = false\n * ```\n */\nexport const ModalWrapper: FC<ModalWrapperProps> & ModalWrapperStaticMethods = (props) => {\n const { pageLoading, className, width, children, ...otherProps } = props;\n\n useEffectCustom(() => {\n if (props['operationProps']) {\n throw new Error('ModalWrapper组件升级,参数operationProps用法变更,请及时更新');\n }\n }, []);\n\n return (\n <Modal\n className={classNames('modal-wrapper', className)}\n keyboard={false}\n forceRender={true}\n destroyOnClose={true}\n {...otherProps}\n width={width || 600}\n footer={null}\n >\n {children}\n {pageLoading && <PageLoader />}\n </Modal>\n );\n};\n\nModalWrapper.Content = ModalWrapperContent;\nModalWrapper.Footer = ModalWrapperFooter;\n","import { API, ModelType } from '@dimjs/model';\nimport { Model } from '@dimjs/model-react';\nimport { ModalActionsParamType, ModalModel, ModalStateType } from './modal.model';\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nconst modalModels: Record<string, API<ModelType<ModalStateType, ModalActionsParamType, any>>> = {};\n\n/**\n * modal弹窗模型\n * @param key 唯一值必传\n * @returns\n *\n * ```\n * 使用方式\n * const [modalState, modalActions] = createModalWrapperModel('key值').useStore();\n * ```\n */\nexport const createModalWrapperModel = (key: string) => {\n if (!modalModels[key]) {\n modalModels[key] = Model(ModalModel);\n }\n return modalModels[key];\n};\n\nexport * from './modal-wrapper';\n","import { classNames } from '@dimjs/utils';\nimport { CSSProperties, FC } from 'react';\nimport './style.less';\n\nexport type PageFixedFooterProps = {\n className?: string;\n style?: CSSProperties;\n};\n\nexport const PageFixedFooter: FC<PageFixedFooterProps> = (props) => {\n return (\n <div className={classNames('page-fixed-footer', props.className)} style={props.style}>\n {props.children}\n </div>\n );\n};\n","export const Page404 = () => {\n return <div className=\"v-404\">404</div>;\n};\n","import './style.less';\n/**\n * 使用在Form组件上,预定义form-item label宽度\n */\nexport const formClassName = {\n label_width_70: 'form-label-70',\n label_width_80: 'form-label-80',\n label_width_90: 'form-label-90',\n label_width_100: 'form-label-100',\n label_width_110: 'form-label-110',\n label_width_120: 'form-label-120',\n label_width_130: 'form-label-130',\n label_width_auto: 'form-label-auto',\n};\n\n/**\n * 使用在Form.Item组件上,预定义form-item label宽度\n */\nexport const formItemClassName = {\n label_width_70: 'form-item-label-70',\n label_width_80: 'form-item-label-80',\n label_width_90: 'form-item-label-90',\n label_width_100: 'form-item-label-100',\n label_width_110: 'form-item-label-110',\n label_width_120: 'form-item-label-120',\n label_width_130: 'form-item-label-130',\n label_width_auto: 'form-item-label-auto',\n};\n","import { formClassName, formItemClassName } from './form';\n\n/**\n * 预定义className\n * ```\n * form: 使用在Form组件上,设置form-item label宽度\n * formItem: 使用在Form.Item组件上,设置form-item label宽度\n * ```\n */\nexport const preDefinedClassName = {\n form: formClassName,\n formItem: formItemClassName,\n};\n","import { classNames } from '@dimjs/utils';\nimport { CSSProperties, FC, ReactElement } from 'react';\nimport './style.less';\n\nexport type SimpleLayoutProps = {\n className?: string;\n style?: CSSProperties;\n title?: string | ReactElement;\n desc?: string | ReactElement;\n formLabelAlign?: 'left' | 'right';\n layoutType?: 'layer' | 'tight';\n};\n\nexport const SimpleLayout: FC<SimpleLayoutProps> = (props) => {\n const labelAlign = props.formLabelAlign || 'right';\n const className = classNames(\n 'simple-layout',\n {\n 'simple-layout-tight': props.layoutType === 'tight',\n 'simple-layout-formlabel-left': labelAlign === 'left',\n },\n props.className,\n );\n\n return (\n <div className={className} style={props.style}>\n {props.title ? <div className=\"simple-layout-title\">{props.title}</div> : null}\n {props.desc ? <div className=\"simple-layout-desc\">{props.desc}</div> : null}\n {props.children ? <div className=\"simple-layout-content\">{props.children}</div> : null}\n </div>\n );\n};\n","import { classNames } from '@dimjs/utils';\nimport { hooks } from '@wove/react';\nimport { FC, useEffect, useMemo, useState } from 'react';\n\nexport interface SmsCountDownProps {\n onSendRequest: () => Promise<void>; // 验证码请求函数\n totalTicks?: number; // 总倒计时,默认:60(s)\n duration?: number; // 倒计时间隔,默认:1000ms(1s)\n autoStart?: boolean; // 是否自动开始倒计时,默认:fasle,注意:不会自动调用 onSendRequest\n format?: string; // 倒计时格式化,默认:'{t}s'\n sendTxt?: string; // 文案,默认:'获取验证码'\n sentTxt?: string; // 倒计时完成文案,默认:'重新获取'\n processingTxt?: string; // 倒计时中文案,默认:'发送中...'\n onTick?: (time: number) => void; // 倒计时回调\n className?: string;\n}\nexport const SmsCountDown: FC<SmsCountDownProps> = (props) => {\n const [showMessage, setShowMessage] = useState<string>();\n\n const [running, setRunning] = useState(false);\n const [starting, setStarting] = useState(false);\n\n // 初始化设置有效\n const initConfig = useMemo<Omit<SmsCountDownProps, 'onSendRequest' | 'onTick' | 'className'>>(() => {\n return {\n sendTxt: props.sendTxt,\n sentTxt: props.sentTxt,\n processingTxt: props.processingTxt,\n format: props.format,\n autoStart: props.autoStart,\n totalTicks: props.totalTicks,\n duration: props.duration,\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n const format = initConfig.format as string;\n const totalTicks = initConfig.totalTicks as number;\n const duration = initConfig.duration as number;\n\n const countdownFnc = hooks.useCountdownCallback(\n (num) => {\n const second = num / 1000;\n if (num > 0) {\n if (!running) {\n setRunning(true);\n }\n setShowMessage(format.replace('{t}', String(second)));\n props.onTick?.(second);\n } else if (num === 0) {\n setRunning(false);\n setStarting(false);\n props.onTick?.(second);\n setShowMessage(initConfig.sentTxt);\n }\n },\n totalTicks * 1000,\n { intervalTime: duration },\n );\n\n useEffect(() => {\n if (!initConfig.autoStart) {\n setShowMessage(initConfig.sendTxt);\n } else {\n countdownFnc();\n setStarting(true);\n setRunning(true);\n }\n }, [countdownFnc, initConfig]);\n\n const onStart = hooks.useCallbackRef(() => {\n if (running || starting) return;\n setStarting(true);\n setShowMessage(initConfig.processingTxt);\n void props\n .onSendRequest()\n .then(() => {\n setRunning(true);\n countdownFnc();\n })\n .catch(() => {\n setShowMessage(initConfig.sendTxt);\n setStarting(false);\n });\n });\n\n const className = classNames('v-count-down', props.className, {\n running,\n starting,\n });\n\n return (\n <div className={className} onClick={onStart}>\n {showMessage}\n </div>\n );\n};\n\nSmsCountDown.defaultProps = {\n totalTicks: 60,\n duration: 1000,\n autoStart: false,\n format: '{t}s',\n sendTxt: '获取验证码',\n sentTxt: '重新获取',\n processingTxt: '发送中...',\n};\n","import { classNames } from '@dimjs/utils';\nimport { Children, cloneElement, FC } from 'react';\nimport { useEffectCustom } from '../hooks';\nimport './style.less';\n\ntype StaticMethods = {\n Condition: typeof Condition;\n Operate: typeof Operate;\n Table: typeof Table;\n Footer: typeof Footer;\n};\n\nconst overdueConsole = () => {\n console.error('@flatbiz/antd库【TableFilterLayout】组件已经过期,请使用【SimpleLayout】组件替代');\n};\n\nexport type TableFilterLayoutProps = {\n className?: string;\n isFixed?: boolean;\n fullIndex?: number;\n};\n\nexport const TableFilterLayout: FC<TableFilterLayoutProps> & StaticMethods = (props) => {\n useEffectCustom(() => {\n overdueConsole();\n }, []);\n\n return (\n <div\n className={classNames(\n 'table-filter-layout',\n { 'table-filter-layout-flex': props.isFixed },\n props.className,\n )}\n >\n {Children.map(props.children, (item, index) => {\n if (props.isFixed && index === props.fullIndex) {\n return cloneElement(item as JSX.Element, { className: 'table-filter-layout-flex-full' });\n }\n return item;\n })}\n </div>\n );\n};\n\nconst Condition: FC<{ className?: string }> = (props) => {\n return <div className={classNames('table-filter-layout-condition', props.className)}>{props.children}</div>;\n};\n\nconst Operate: FC<{ className?: string }> = (props) => {\n return <div className={classNames('table-filter-layout-operate', props.className)}>{props.children}</div>;\n};\n\nconst Table: FC<{ className?: string }> = (props) => {\n return <div className={classNames('table-filter-layout-table', props.className)}>{props.children}</div>;\n};\nconst Footer: FC<{ className?: string }> = (props) => {\n return <div className={classNames('table-filter-layout-footer', props.className)}>{props.children}</div>;\n};\n\nTableFilterLayout.Condition = Condition;\nTableFilterLayout.Operate = Operate;\nTableFilterLayout.Table = Table;\nTableFilterLayout.Footer = Footer;\n","import { API, ModelType } from '@dimjs/model';\nimport { Model } from '@dimjs/model-react';\nimport { TSetDefaultDefined } from '@flatbiz/utils';\nimport { TreeSelectProps } from 'antd';\n\nexport type ModelState = {\n treeSelectorList: TSetDefaultDefined<TreeSelectProps['treeData'], []>;\n queryIsEmpty: boolean;\n requestStatus?: 'request-pre' | 'request-success' | 'request-error';\n};\n\ntype ModelActionParams = {\n setSelectBoxList: ModelState['treeSelectorList'];\n resetSelectBoxList: void;\n changeRequestStatus: ModelState['requestStatus'];\n};\n\nconst defaultState: ModelState = {\n treeSelectorList: [],\n queryIsEmpty: false,\n};\n\nconst TreeSelectorWrapperModel: ModelType<ModelState, ModelActionParams> = {\n actions: {\n setSelectBoxList: (params) => {\n return (state) => {\n state.treeSelectorList = params || [];\n state.requestStatus = 'request-success';\n };\n },\n resetSelectBoxList: () => {\n return (state) => {\n state.treeSelectorList = [];\n };\n },\n changeRequestStatus: (params) => {\n return (state) => {\n state.requestStatus = params;\n };\n },\n },\n state: defaultState,\n};\n\nconst treeSelectorWrapperModels: Record<string, API<ModelType<ModelState, ModelActionParams, any>>> = {};\n\n/**\n * ```\n * 使用方式\n * const [state, actions] = useTreeSelectorWrapperModel('key值').useStore();\n * ```\n */\nexport const treeSelectorWrapperModel = (key: string) => {\n if (!treeSelectorWrapperModels[key]) {\n treeSelectorWrapperModels[key] = Model(TreeSelectorWrapperModel);\n }\n return treeSelectorWrapperModels[key];\n};\n","import { isArray } from '@dimjs/lang';\nimport { TPlainObject, treeLeafParentsArray, treeToTiledArray } from '@flatbiz/utils';\nimport { TreeSelectProps } from 'antd';\n\nexport const getExpandedKeys = (\n value: string | number,\n treeList: TPlainObject[],\n fieldNames?: TreeSelectProps['fieldNames'],\n) => {\n if (!isArray(treeList) || treeList.length === 0) return [];\n const tiledArray = treeToTiledArray(treeList, fieldNames);\n return treeLeafParentsArray(value, tiledArray);\n};\n","import { RedoOutlined } from '@ant-design/icons';\nimport { isArray } from '@dimjs/lang';\nimport { extend } from '@dimjs/utils';\nimport { useEffectCustom } from '@flatbiz/antd';\nimport { isUndefinedOrNull, TPlainObject } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { Button, Empty, message, TreeSelect, TreeSelectProps } from 'antd';\nimport { DependencyList, forwardRef, useEffect, useImperativeHandle, useMemo, useState } from 'react';\nimport { ModelState, treeSelectorWrapperModel } from './model';\nimport './style.less';\nimport { getExpandedKeys } from './utils';\ntype TreeSelectorServiceConfig = {\n params?: TPlainObject;\n requiredParamsKeys?: string[];\n onRequest?: (params?: any) => any;\n /**\n * 响应数据适配器\n */\n onRequestResultAdapter?: (respData: any) => TPlainObject[];\n};\n\nexport type TreeSelectorWrapperProps = Omit<\n TreeSelectProps,\n 'treeExpandedKeys' | 'treeData' | 'loading' | 'onTreeExpand'\n> & {\n modelKey: string;\n effectDependencyList?: DependencyList;\n /**\n * 请求服务需求的数据,当设置`treeSelectorList`后无效果\n */\n serviceConfig?: TreeSelectorServiceConfig;\n /**\n * 当设置treeSelectorList后,serviceConfig、onTreeSelectorListChange将失效\n * ```\n * 1. 不支持异步数据,异步使用serviceConfig方式\n * ```\n */\n treeSelectorList?: TreeSelectProps['treeData'];\n /**\n * 通过服务获取数据后回调,当设置`treeSelectorList`后无效果\n */\n onTreeSelectorListChange?: (treeSelectorList?: TreeSelectProps['treeData']) => void;\n};\n\nexport type TreeSelectorWrapperRefApi = {\n onClearSelectorList: () => void;\n getTreeSelectorList: () => TreeSelectProps['treeData'];\n};\n\n/**\n * 树选择器包装组件\n * @param props\n * @returns\n * ```\n * 1. 当设置treeSelectorList属性后,serviceConfig、onTreeSelectorListChange将失效\n * ```\n */\nexport const TreeSelectorWrapper = forwardRef<TreeSelectorWrapperRefApi, TreeSelectorWrapperProps>(\n (props, ref) => {\n const {\n serviceConfig,\n effectDependencyList,\n onTreeSelectorListChange,\n treeSelectorList,\n modelKey,\n ...otherProps\n } = props;\n const newServiceConfig = serviceConfig || {};\n const newEffectDependencyList = effectDependencyList || [];\n const [loading, setLoading] = useState(false);\n const [treeExpandedKeys, setTreeExpandedKeys] = useState<React.Key[]>();\n const [state, actions] = treeSelectorWrapperModel(modelKey).useStore();\n const valueIsEmpty = (value: string | number) => {\n return value === '' || isUndefinedOrNull(value);\n };\n\n const serviceResponseHandle = (respData) => {\n const respDataList = (\n newServiceConfig.onRequestResultAdapter\n ? newServiceConfig.onRequestResultAdapter(respData as unknown as TPlainObject)\n : respData\n ) as TPlainObject[];\n return respDataList;\n };\n\n const startDataSourceRequest = hooks.useCallbackRef(async () => {\n try {\n if (!newServiceConfig.onRequest) {\n throw new Error('onRequest 调用接口服务不能为空');\n }\n const requiredParamsKeys = newServiceConfig.requiredParamsKeys;\n const params = extend({}, newServiceConfig.params);\n if (requiredParamsKeys) {\n const isEmpty = requiredParamsKeys.find((key) => {\n return valueIsEmpty(params[key] as string | number);\n });\n if (isEmpty) {\n console.warn(`TreeSelectorWrapper组件:参数:${requiredParamsKeys.join('、')}不能为空`);\n return;\n }\n }\n try {\n setLoading(true);\n void actions.changeRequestStatus('request-pre');\n const _respData = await newServiceConfig.onRequest?.(params);\n const respData = serviceResponseHandle(_respData) as TreeSelectProps['treeData'];\n setLoading(false);\n onTreeSelectorListChange?.(respData);\n void actions.setSelectBoxList(respData || []);\n } catch (error) {\n setLoading(false);\n void actions.changeRequestStatus('request-error');\n }\n } catch (error) {\n setLoading(false);\n void message.error((error.message as string) || '数据查询异常...');\n }\n });\n\n useEffectCustom(() => {\n if (treeSelectorList) {\n void actions.setSelectBoxList(treeSelectorList);\n return;\n }\n // 当无依赖项时,如果存在缓存数据,就不在调用接口\n const realTimeState = treeSelectorWrapperModel(modelKey).getState();\n console.log('realTimeState', realTimeState.requestStatus);\n if (\n newEffectDependencyList.length > 0 ||\n !realTimeState.requestStatus ||\n realTimeState.requestStatus === 'request-error'\n ) {\n void startDataSourceRequest();\n }\n }, newEffectDependencyList);\n\n useEffect(() => {\n if (!isUndefinedOrNull(props.value)) {\n const valueList = isArray(props.value) ? props.value : [props.value];\n if (valueList.length > 0 && state.treeSelectorList.length > 0) {\n let expandedKeys = [] as Array<string | number>;\n valueList.forEach((tempValue) => {\n const targetList = getExpandedKeys(\n tempValue as string | number,\n state.treeSelectorList,\n props.fieldNames,\n );\n expandedKeys = expandedKeys.concat(targetList.map((item) => item.value));\n });\n setTreeExpandedKeys((prev) => {\n const mergeList = expandedKeys.concat(prev || []);\n return Array.from(new Set(mergeList));\n });\n }\n }\n }, [state.treeSelectorList, props.fieldNames, props.value]);\n\n useImperativeHandle(ref, () => {\n return {\n onClearSelectorList: () => {\n void actions.setSelectBoxList([]);\n },\n getTreeSelectorList: () => {\n return state.treeSelectorList;\n },\n };\n });\n\n const onTreeExpand = hooks.useCallbackRef((expandedKeys) => {\n setTreeExpandedKeys(expandedKeys as string[]);\n });\n\n const onAgainRequest = hooks.useCallbackRef(() => {\n void startDataSourceRequest();\n });\n\n return (\n <TreeSelect\n dropdownStyle={{ maxHeight: 400, overflow: 'auto' }}\n showSearch={true}\n treeLine={true}\n {...otherProps}\n value={isUndefinedOrNull(props.value) ? undefined : props.value}\n treeExpandedKeys={treeExpandedKeys}\n treeData={state.treeSelectorList}\n loading={loading}\n onTreeExpand={onTreeExpand}\n style={{ width: '100%', ...otherProps.style }}\n suffixIcon={\n state.requestStatus === 'request-error' ? (\n <RedoOutlined spin={loading} onClick={onAgainRequest} />\n ) : undefined\n }\n notFoundContent={\n <NotFoundContent requestStatus={state.requestStatus} onAgainRequest={onAgainRequest} />\n }\n />\n );\n },\n);\n\nconst NotFoundContent = (props: {\n requestStatus?: ModelState['requestStatus'];\n onAgainRequest: () => void;\n}) => {\n const description = useMemo(() => {\n if (props.requestStatus === 'request-error') {\n return '数据查询异常';\n } else if (props.requestStatus === 'request-success') {\n return '暂无数据';\n }\n return '数据查询中';\n }, [props.requestStatus]);\n return (\n <Empty\n image={Empty.PRESENTED_IMAGE_SIMPLE}\n description={description}\n className={'tree-selector-wrapper-empty'}\n >\n {props.requestStatus === 'request-error' && (\n <Button type=\"primary\" onClick={props.onAgainRequest}>\n 重新获取数据\n </Button>\n )}\n </Empty>\n );\n};\n","import { API, ModelType } from '@dimjs/model';\nimport { Model } from '@dimjs/model-react';\nimport { TSetDefaultDefined } from '@flatbiz/utils';\nimport { TreeProps } from 'antd';\n\nexport type ModelState = {\n treeList: TSetDefaultDefined<TreeProps['treeData'], []>;\n queryIsEmpty: boolean;\n requestStatus?: 'request-pre' | 'request-success' | 'request-error';\n};\n\ntype ModelActionParams = {\n setTreeList: ModelState['treeList'];\n resetTreeList: void;\n changeRequestStatus: ModelState['requestStatus'];\n};\n\nconst defaultState: ModelState = {\n treeList: [],\n queryIsEmpty: false,\n};\n\nconst TreeWrapperModel: ModelType<ModelState, ModelActionParams> = {\n actions: {\n setTreeList: (params) => {\n return (state) => {\n state.treeList = params || [];\n state.requestStatus = 'request-success';\n };\n },\n resetTreeList: () => {\n return (state) => {\n state.treeList = [];\n };\n },\n changeRequestStatus: (params) => {\n return (state) => {\n state.requestStatus = params;\n };\n },\n },\n state: defaultState,\n};\n\nconst treeWrapperModels: Record<string, API<ModelType<ModelState, ModelActionParams, any>>> = {};\n\n/**\n * ```\n * 使用方式\n * const [state, actions] = useTreeWrapperModel('key值').useStore();\n * ```\n */\nexport const treeWrapperModel = (key: string) => {\n if (!treeWrapperModels[key]) {\n treeWrapperModels[key] = Model(TreeWrapperModel);\n }\n return treeWrapperModels[key];\n};\n","import { TPlainObject, treeLeafParentsArray, treeToTiledArray } from '@flatbiz/utils';\n\nexport const getExpandedKeys = (\n value: string | number,\n treeList: TPlainObject[],\n fieldNames?: { label?: string; value?: string; children?: string },\n) => {\n const tiledArray = treeToTiledArray(treeList, fieldNames);\n return treeLeafParentsArray(value, tiledArray);\n};\n","import { isArray } from '@dimjs/lang';\nimport { extend } from '@dimjs/utils';\nimport { useEffectCustom } from '@flatbiz/antd';\nimport { isUndefinedOrNull, TPlainObject, treeToTiledArray } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { Button, Empty, message, Spin, Tree, TreeProps } from 'antd';\nimport { DependencyList, forwardRef, useImperativeHandle, useMemo, useState } from 'react';\nimport { ModelState, treeWrapperModel } from './model';\nimport './style.less';\nimport { getExpandedKeys } from './utils';\n\ntype TreeServiceConfig = {\n params?: TPlainObject;\n requiredParamsKeys?: string[];\n onRequest?: (params?: any) => any;\n /**\n * 响应数据适配器\n */\n onRequestResultAdapter?: (respData: any) => TPlainObject[];\n};\n\nexport type TreeWrapperProps = Omit<\n TreeProps,\n | 'expandedKeys'\n | 'treeData'\n | 'onExpand'\n | 'selectedKeys'\n | 'checkedKeys'\n | 'onCheck'\n | 'onSelect'\n | 'defaultCheckedKeys'\n | 'defaultSelectedKeys'\n | 'fieldNames'\n> & {\n modelKey: string;\n effectDependencyList?: DependencyList;\n /**\n * 请求服务需求的数据,当设置`selectorTreeList`后无效果\n */\n serviceConfig?: TreeServiceConfig;\n /**\n * 当设置selectorTreeList后,serviceConfig将失效\n * ```\n * 1. 不支持异步数据,异步使用serviceConfig方式\n * ```\n */\n selectorTreeList?: TreeProps['treeData'];\n value?: string | number | Array<string | number>;\n onChange?: (selectedKey: string | number | Array<string | number>) => void;\n fieldNames?: { label?: string; value?: string; children?: string };\n /**\n * 打开tree折叠过滤关键字\n */\n filterLabel?: string;\n};\n\nexport type TreeWrapperRefApi = {\n onClearSelectorList: () => void;\n getTreeDataList: () => TreeProps['treeData'];\n};\n\n/**\n * 树包装组件\n * @param props\n * @returns\n * ```\n * 1. 当设置selectorTreeList属性后,serviceConfig、onSelectorListChange将失效\n * ```\n */\nexport const TreeWrapper = forwardRef<TreeWrapperRefApi, TreeWrapperProps>((props, ref) => {\n const {\n serviceConfig,\n effectDependencyList,\n selectorTreeList,\n value,\n onChange,\n fieldNames,\n modelKey,\n ...otherProps\n } = props;\n const newServiceConfig = serviceConfig || {};\n const newEffectDependencyList = effectDependencyList || [];\n const [treeExpandedKeys, setTreeExpandedKeys] = useState<React.Key[]>();\n const [state, actions] = treeWrapperModel(modelKey).useStore();\n const [loading, setLoading] = useState(false);\n\n const valueList = useMemo(() => {\n if (isUndefinedOrNull(props.value)) return undefined;\n return (isArray(props.value) ? props.value : [props.value]) as Array<string | number>;\n }, [props.value]);\n\n const valueIsEmpty = (value: string | number) => {\n return value === '' || isUndefinedOrNull(value);\n };\n\n const serviceResponseHandle = (respData) => {\n const respDataList = (\n newServiceConfig.onRequestResultAdapter\n ? newServiceConfig.onRequestResultAdapter(respData as unknown as TPlainObject)\n : respData\n ) as TPlainObject[];\n return respDataList;\n };\n\n const startDataSourceRequest = hooks.useCallbackRef(async () => {\n try {\n if (!newServiceConfig.onRequest) {\n throw new Error('onRequest 调用接口服务不能为空');\n }\n const requiredParamsKeys = newServiceConfig.requiredParamsKeys;\n const params = extend({}, newServiceConfig.params);\n if (requiredParamsKeys) {\n const isEmpty = requiredParamsKeys.find((key) => {\n return valueIsEmpty(params[key] as string | number);\n });\n if (isEmpty) {\n console.warn(`TreeWrapper组件:参数:${requiredParamsKeys.join('、')}不能为空`);\n return;\n }\n }\n try {\n setLoading(true);\n void actions.changeRequestStatus('request-pre');\n const _respData = await newServiceConfig.onRequest?.(params);\n const respData = serviceResponseHandle(_respData) as TreeProps['treeData'];\n void actions.setTreeList(respData || []);\n setLoading(false);\n } catch (error) {\n setLoading(false);\n void actions.changeRequestStatus('request-error');\n }\n } catch (error) {\n setLoading(false);\n void message.error((error.message as string) || '数据查询异常...');\n }\n });\n\n useEffectCustom(() => {\n if (selectorTreeList) {\n void actions.setTreeList(selectorTreeList);\n return;\n }\n // 当无依赖项时,如果存在缓存数据,就不在调用接口\n const realTimeState = treeWrapperModel(modelKey).getState();\n if (\n newEffectDependencyList.length > 0 ||\n !realTimeState.requestStatus ||\n realTimeState.requestStatus === 'request-error'\n ) {\n void startDataSourceRequest();\n }\n }, newEffectDependencyList);\n\n useEffectCustom(() => {\n if (valueList && valueList.length > 0 && state.treeList.length > 0 && !treeExpandedKeys) {\n let expandedKeys = [] as Array<string | number>;\n valueList.forEach((tempValue) => {\n const targetList = getExpandedKeys(tempValue, state.treeList, props.fieldNames);\n expandedKeys = expandedKeys.concat(targetList.map((item) => item.value));\n });\n setTreeExpandedKeys((prev) => {\n const mergeList = expandedKeys.concat(prev || []);\n return Array.from(new Set(mergeList));\n });\n }\n }, [state.treeList, props.fieldNames, value]);\n\n hooks.useUpdateEffect(() => {\n if (props.filterLabel) {\n const tiledArray = treeToTiledArray(state.treeList || [], props.fieldNames);\n const targetList = tiledArray.filter((item) => item.label?.includes(props.filterLabel || ''));\n let expandedKeys = [] as Array<string | number>;\n targetList.map((tempItem) => {\n const targetValues = getExpandedKeys(\n tempItem.value as string,\n state.treeList || [],\n props.fieldNames,\n );\n const valueList = targetValues.map((item) => item.value);\n expandedKeys = expandedKeys.concat(valueList);\n });\n setTreeExpandedKeys(Array.from(new Set(expandedKeys)));\n } else {\n setTreeExpandedKeys([]);\n }\n }, [props.filterLabel]);\n\n useImperativeHandle(ref, () => {\n return {\n onClearSelectorList: () => {\n void actions.resetTreeList();\n },\n getTreeDataList: () => {\n return state.treeList;\n },\n };\n });\n\n const onExpand = hooks.useCallbackRef((expandedKeys) => {\n setTreeExpandedKeys(expandedKeys as string[]);\n });\n const onCheck = hooks.useCallbackRef((checkedKeys) => {\n onChange?.(checkedKeys as Array<string | number>);\n });\n const onSelect = hooks.useCallbackRef((checkedKeys) => {\n if (props.multiple) {\n onChange?.(checkedKeys as Array<string | number>);\n } else {\n onChange?.(checkedKeys[0] as string | number);\n }\n });\n\n const treeFieldNames = useMemo(() => {\n const newFieldNames = extend({ label: 'label', value: 'value', children: 'children' }, fieldNames);\n return { title: newFieldNames.label, key: newFieldNames.value, children: newFieldNames.children };\n }, [fieldNames]);\n\n if (state.treeList.length > 0) {\n return (\n <Tree\n showLine={otherProps.checkable ? false : { showLeafIcon: false }}\n {...otherProps}\n fieldNames={treeFieldNames}\n expandedKeys={treeExpandedKeys}\n treeData={state.treeList}\n onExpand={onExpand}\n selectedKeys={otherProps.checkable ? undefined : valueList}\n checkedKeys={otherProps.checkable ? valueList : undefined}\n onCheck={otherProps.checkable ? onCheck : undefined}\n onSelect={otherProps.checkable ? undefined : onSelect}\n style={{ width: '100%', ...otherProps.style }}\n />\n );\n }\n\n return (\n <NotFoundContent\n requestStatus={state.requestStatus}\n loading={loading}\n onAgainRequest={startDataSourceRequest}\n />\n );\n});\n\nconst NotFoundContent = (props: {\n requestStatus?: ModelState['requestStatus'];\n onAgainRequest: () => void;\n loading: boolean;\n}) => {\n const description = useMemo(() => {\n if (props.requestStatus === 'request-error') {\n return '数据查询异常';\n } else if (props.requestStatus === 'request-success') {\n return '暂无数据';\n }\n return '数据查询中';\n }, [props.requestStatus]);\n return (\n <div className=\"tree-wrapper-empty\">\n <Spin spinning={props.loading}></Spin>\n <Empty image={Empty.PRESENTED_IMAGE_SIMPLE} description={description}>\n {props.requestStatus === 'request-error' && (\n <Button type=\"primary\" onClick={props.onAgainRequest}>\n 重新获取数据\n </Button>\n )}\n </Empty>\n </div>\n );\n};\n"],"names":["styles","noop","getPermissionList","_getGlobalData","getGlobalData","elemAclLimits","permissionList","_isArray","hasPermission","name","includes","Permission","props","_jsx","Fragment","children","ButtonOperate","className","Space","split","Divider","type","size","wrap","_isUndefined","operateList","map","item","index","text","color","onClick","permission","needConfirm","confirmMessage","hidden","style","otherProps","_excluded","newStyle","_extends","Popconfirm","title","okText","cancelText","onConfirm","arrowPointAtCenter","Button","undefined","danger","_createElement","key","defaultProps","DatePickerWrapper","value","onChange","format","useMemo","showTime","onChangeDate","_hooks","useCallbackRef","moment","datePickerValue","flatbizDate","isDate","Date","DatePicker","width","DateRangePickerWrapper","values","value1","_ref","value2","date1","_ref2","date2","rangePickerValue","RangePicker","DrawerModel","actions","openDrawerForm","itemData","operateType","pageLoading","state","visible","closeDrawer","setDrawerItemData","params","DrawerOperation","_jsxs","cancelButtonProps","onCancel","hideOkBtn","icon","_SaveOutlined","okButtonProps","onOk","loading","PageLoader","DrawerWraper","_props$width","footer","operationProps","useEffect","console","error","Drawer","_classNames","keyboard","forceRender","destroyOnClose","contentWrapperStyle","maxWidth","drawerModels","createDrawerWraperModel","Model","useEffectCustom","fn","deps","useEffectCustomAsync","asyncFunction","Promise","$return","$error","then","$await_1","$boundEx","DrawerWrapperContent","DrawerWrapperFooter","DrawerWrapper","Error","Content","Footer","createDrawerWrapperModel","getEditable","editable","tableRowIndex","CheckboxGroupFormItemContent","fieldConfig","editableConfig","render","editableComptProps","viewLabelList","options","length","label","returnList","forEach","target","find","temp","push","Checkbox","Group","tag","Tag","CheckboxGroupFormItem","formItemProps","Form","Item","DatePickerWrapperFormItem","FormItemContent","viewLabel","join","DateRangePickerWrapperFormItem","InputFormItem","Input","InputNumberFormItem","InputNumber","RadioGroupFormItemContent","e","Radio","RadioGroupFormItem","defaultState","selectorList","queryIsEmpty","requestStatus","_SelectorWrapperModel","setSelectBoxList","resetSelectBoxList","changeRequestStatus","selectorWrapperModels","selectorWrapperModel","SelectorWrapper","forwardRef","ref","serviceConfig","showAllOption","effectDependencyList","onSelectorListChange","searchFieldName","modelKey","fieldNames","isSearch","newServiceConfig","newEffectDependencyList","changeOperateValueRef","useRef","useState","_useState","setLoading","_selectorWrapperModel","useStore","valueIsEmpty","isUndefinedOrNull","serviceRespDataTranslation","respData","respDataList","onRequestResultAdapter","arrayField2LabelValue","startDataSourceRequest","inputValue","searchId","requiredParamsKeys","_params","isEmpty","keyword","_respData","respDataTranslation","$Try_1_Post","$Try_1_Catch","message","onRequest","_extend","warn","$Try_2_Post","$Try_2_Catch","$await_3","realTimeState","getState","valueIsEqual","current","concat","useImperativeHandle","onClearSelectorList","getSelectorList","filterOption","input","option","toLowerCase","indexOf","onSearch","useDebounceCallback","_len","arguments","otherParams","Array","_key","onAgainRequest","selectOptionsAll","Select","Option","showSearch","allowClear","notFoundContent","NotFoundContent","suffixIcon","_RedoOutlined","spin","onLabelRenderAdapter","description","Empty","image","PRESENTED_IMAGE_SIMPLE","SelectorWrapperFormItem","FormItemTextContent","_props$fieldConfig2","_props$fieldConfig3","_props$fieldConfig","isBaseData","_isString","_isNumber","_isBoolean","JSON","stringify","TextFormItem","noStyle","TextAreaFormItem","TextArea","UploadWrapper","onUploadError","uploadList","setUploadList","uid","url","onUploadChange","info","fileList","file","status","response","code","result","data","maxCount","targetList","targetIndex","findIndex","tempUid","splice","Upload","disabled","UploadTrigger","listType","marginTop","ghost","UploadWrapperFormItemContent","_objectWithoutPropertiesLoose","_editableComptProps","UploadWrapperFormItem","FormItemAdapter","newEditable","commomProps","completeName","FormList","from","useFormInstance","formListConfig","onFormListBeforeRender","editableConfigList","onFormListAfterRender","onFormListItemBeforeRender","onFormListItemAfterRender","deleteOperateRender","List","fields","add","remove","_Fragment","getFieldValue","fieldChild","hasEditable","formListItemIndex","fieldItem","fieldName","DeleteFormListItem","_DeleteOutlined","FormListItem","EditableTable","_props$tableProps2","columns","columnItem","operateRender","otherColumnItem","onCell","_props$tableProps","valign","tableProps","cellVerticalAlign","_value","record","operation","dataIndex","rules","formListOperation","onTableBeforeRender","Table","scroll","x","pagination","dataSource","rowKey","onTableAfterRender","block","_PlusOutlined","FileImport","onImportFinish","showUploadList","accept","FileUpload","onPreview","uploadValue","setUploadValue","fileKey","fileName","thumbUrl","uploadItem","respValue","onUploadPreview","FlexLayout","childrens","direction","gap","fullIndexList","fullIndex","childrenStyle","flex","marginRight","marginBottom","cloneElement","Gap","height","IconWrapper","Tooltip","hoverTips","ModalModel","openModalForm","closeModal","setModalItemData","ModalOperation","_ref$okText","_ref$cancelText","ModalWraper","Modal","modalModels","createModalWraperModel","ModalWrapperContent","ModalWrapperFooter","ModalWrapper","createModalWrapperModel","PageFixedFooter","Page404","formClassName","label_width_70","label_width_80","label_width_90","label_width_100","label_width_110","label_width_120","label_width_130","label_width_auto","formItemClassName","preDefinedClassName","form","formItem","SimpleLayout","labelAlign","formLabelAlign","layoutType","desc","SmsCountDown","showMessage","setShowMessage","running","_useState2","setRunning","starting","_useState3","setStarting","initConfig","sendTxt","sentTxt","processingTxt","autoStart","totalTicks","duration","countdownFnc","useCountdownCallback","num","second","replace","String","onTick","intervalTime","onStart","onSendRequest","catch","overdueConsole","TableFilterLayout","isFixed","Children","Condition","Operate","treeSelectorList","TreeSelectorWrapperModel","treeSelectorWrapperModels","treeSelectorWrapperModel","getExpandedKeys","treeList","tiledArray","treeToTiledArray","treeLeafParentsArray","TreeSelectorWrapper","onTreeSelectorListChange","treeExpandedKeys","setTreeExpandedKeys","_treeSelectorWrapperM","serviceResponseHandle","_respData2","log","valueList","expandedKeys","tempValue","prev","mergeList","Set","getTreeSelectorList","onTreeExpand","TreeSelect","dropdownStyle","maxHeight","overflow","treeLine","treeData","TreeWrapperModel","setTreeList","resetTreeList","treeWrapperModels","treeWrapperModel","TreeWrapper","selectorTreeList","_treeWrapperModel$use","useUpdateEffect","filterLabel","filter","_item$label","tempItem","targetValues","getTreeDataList","onExpand","onCheck","checkedKeys","onSelect","multiple","treeFieldNames","newFieldNames","Tree","showLine","checkable","showLeafIcon","selectedKeys","Spin","spinning"],"mappings":"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"}
|
package/index.d.ts
CHANGED
|
@@ -239,6 +239,7 @@ export declare type SelectorWrapperProps = Omit<SelectProps, "filterOption" | "o
|
|
|
239
239
|
*/
|
|
240
240
|
operateType?: "search" | "filter";
|
|
241
241
|
searchFieldName?: string;
|
|
242
|
+
onLabelRenderAdapter?: (dataItem: LabelValueItem) => string | ReactElement;
|
|
242
243
|
};
|
|
243
244
|
export declare type SelectorWrapperRefApi = {
|
|
244
245
|
onClearSelectorList: () => void;
|
|
@@ -303,6 +304,7 @@ export declare const SelectorWrapper: import("react").ForwardRefExoticComponent<
|
|
|
303
304
|
*/
|
|
304
305
|
operateType?: "search" | "filter" | undefined;
|
|
305
306
|
searchFieldName?: string | undefined;
|
|
307
|
+
onLabelRenderAdapter?: ((dataItem: LabelValueItem) => string | ReactElement) | undefined;
|
|
306
308
|
} & import("react").RefAttributes<SelectorWrapperRefApi>>;
|
|
307
309
|
export declare type UploadWrapperFileItem = {
|
|
308
310
|
uid: string;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@flatbiz/antd",
|
|
3
|
-
"version": "2.3.
|
|
3
|
+
"version": "2.3.24",
|
|
4
4
|
"description": "flat-biz oss ui components",
|
|
5
5
|
"main": "index.js",
|
|
6
6
|
"typings": "index.d.ts",
|
|
@@ -40,7 +40,7 @@
|
|
|
40
40
|
"@dimjs/model": "^1.1.3",
|
|
41
41
|
"@dimjs/model-react": "^1.1.4",
|
|
42
42
|
"@dimjs/utils": "^1.2.9",
|
|
43
|
-
"@flatbiz/utils": "^2.3.
|
|
43
|
+
"@flatbiz/utils": "^2.3.24",
|
|
44
44
|
"@wove/react": "^1.2.10",
|
|
45
45
|
"antd": "^4.20.0",
|
|
46
46
|
"moment": "^2.29.3",
|
|
@@ -49,5 +49,5 @@
|
|
|
49
49
|
"react-router": "^6.3.0",
|
|
50
50
|
"react-router-dom": "^6.3.0"
|
|
51
51
|
},
|
|
52
|
-
"gitHead": "
|
|
52
|
+
"gitHead": "2ea3674d26cab8907bb0bbc22db84600af6b758e"
|
|
53
53
|
}
|