@flatbiz/antd 4.5.45 → 4.5.46

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.
@@ -9,5 +9,5 @@ import './../dialog-confirm/index.css';
9
9
  import './../dialog-modal/index.css';
10
10
  import './index.css';
11
11
  /*! @flatjs/forge MIT @flatbiz/antd */
12
- import i from"@ant-design/icons/es/icons/MoreOutlined";import{_ as r,a as e}from"../_rollupPluginBabelHelpers-c0dbec57.js";import{isUndefined as o}from"@dimjs/lang/cjs/is-undefined";import{classNames as n}from"@dimjs/utils/cjs/class-names";import{isPlainObject as t}from"@dimjs/lang/cjs/is-plain-object";import{isString as s}from"@dimjs/lang/cjs/is-string";import{isPromise as p}from"@dimjs/lang/cjs/is-promise";import{hooks as a}from"@wove/react/cjs/hooks";import{Popover as l,Tooltip as c,Space as d,Divider as m,Popconfirm as u,Button as f}from"antd";import{isValidElement as v,Fragment as j,useState as g,useMemo as h,createElement as y}from"react";import{ButtonWrapper as k}from"../button-wrapper/index.js";import{DropdownMenuWrapper as x}from"../dropdown-menu-wrapper/index.js";import{fbaUtils as T}from"../fba-utils/index.js";import{jsx as C,jsxs as P}from"react/jsx-runtime";import"@ant-design/icons/es/icons/LoadingOutlined";import"@flatbiz/utils";import"../index-83bede1b.js";import"antd/es/locale/en_US";import"antd/es/locale/zh_CN";import"dayjs";import"dayjs/locale/en";import"dayjs/locale/zh-cn";import"dayjs/plugin/advancedFormat";import"dayjs/plugin/customParseFormat";import"dayjs/plugin/localeData";import"dayjs/plugin/utc";import"dayjs/plugin/weekday";import"dayjs/plugin/weekOfYear";import"dayjs/plugin/weekYear";import"../fba-hooks/index.js";import"@dimjs/lang/cjs/is-array";import"../use-responsive-point-21b8c601.js";import"@dimjs/utils/cjs/extend";import"@ant-design/icons/es/icons/ExclamationCircleFilled";import"../dialog-confirm/index.js";import"../dialog-modal/index.js";import"ahooks";import"react-dom/client";import"../flex-layout/index.js";import"@wove/react/cjs/create-ctx";import"@dimjs/model";var w=["text","onClick","needConfirm","confirmMessage","popconfirmProps","hoverTips","color","tipsType","type","isFold"];var b=function i(r){if(r.hoverTips){if(r.tipsType==="popover"){return C(l,{content:r.hoverTips,zIndex:1e3,children:C("span",{children:r.content})})}return C(c,{title:r.hoverTips,zIndex:1e3,children:C("span",{children:r.content})})}if(v(r.content)){return C(j,{children:r.content})}return C("span",{children:r.content})};var F=function l(c){var j=g(false),F=j[0],z=j[1];var O=a.useCallbackRef((function(i,r){var e=i.onClick==null?void 0:i.onClick(r);if(e&&p(e)){z(true);return e.finally((function(){z(false)}))}return}));var I=c.operateList.filter((function(i){if(!i)return false;if(v(i)){var r,e,o;if(((r=i.props)==null?void 0:r["hidden"])===true)return false;if(((e=i.props)==null?void 0:e["v-hidden"])===true)return false;var n=(o=i.props)==null?void 0:o["v-permission"];if(s(n)){return T.hasPermission(n)}return true}if(t(i)){if(!T.hasPermission(i["permission"])){return false}return!i["hidden"]}return false}));var M=h((function(){return I.filter((function(i){if(v(i)){return true}return!i["isFold"]}))}),[I]);var N=h((function(){var i=I.filter((function(i){if(v(i)){return false}return i["isFold"]}));var e=[];i.forEach((function(i){var o=r({},i);delete o.isFold;e.push(o)}));return e}),[I]);var _=c.gap===undefined?10:c.gap;var L=!c.split?_:0;return C("div",{className:n("table-operate",c.className),style:c.style,children:P(d,r({split:c.split?C(m,{type:"vertical"}):null,size:L,wrap:o(c.wrap)?true:c.wrap},c.spaceProps,{children:[M.map((function(i,o){if(i&&v(i)){return C(b,{content:i,hoverTips:i.hoverTips,tipsType:i.tipsType},o)}var n=i.text,t=i.onClick,s=i.needConfirm,p=i.confirmMessage,a=i.popconfirmProps,l=i.hoverTips,c=i.color,d=i.tipsType,m=i.type;i.isFold;var f=e(i,w);var j=m||"link";if(s&&!f.disabled){var g=c?false:true;return y(u,r({okText:"确定",cancelText:"取消",trigger:["click"],placement:"topRight",arrow:true,destroyTooltipOnHide:true},a,{title:p,onConfirm:O.bind(null,i),key:o,okButtonProps:{loading:F},onOpenChange:function i(r){if(!r){z(false)}},onCancel:function i(r){r==null||r.stopPropagation()}}),C(k,r({danger:g},f,{onClick:function i(r){r.stopPropagation()},type:j,children:C(b,{content:n,hoverTips:l,tipsType:d},o)})))}return y(k,r({loadingPosition:"center"},f,{type:j,onClick:function i(r){r.stopPropagation();return t==null?void 0:t(r)},key:o}),C(b,{content:n,hoverTips:l,tipsType:i.tipsType}))})),N.length>0?C(x,r({menuList:N,placement:"bottom"},c.dropdownMenuProps,{children:C(f,{type:"link",className:"fold-more-button",onClick:function i(r){r.stopPropagation()},children:c.foldIcon?c.foldIcon:C(i,{})})})):null]}))})};F.defaultProps={split:true};export{F as ButtonOperate,b as ButtonOperateItemContent};
12
+ import r from"@ant-design/icons/es/icons/MoreOutlined";import{_ as e,a as i}from"../_rollupPluginBabelHelpers-c0dbec57.js";import{isUndefined as o}from"@dimjs/lang/cjs/is-undefined";import{classNames as t}from"@dimjs/utils/cjs/class-names";import{isPlainObject as n}from"@dimjs/lang/cjs/is-plain-object";import{isString as s}from"@dimjs/lang/cjs/is-string";import{isPromise as p}from"@dimjs/lang/cjs/is-promise";import{hooks as a}from"@wove/react/cjs/hooks";import{Popover as l,Tooltip as c,Space as d,Divider as m,Popconfirm as u,Button as f}from"antd";import{isValidElement as v,Fragment as j,useState as h,useMemo as y,createElement as g}from"react";import{ButtonWrapper as k}from"../button-wrapper/index.js";import{DropdownMenuWrapper as x}from"../dropdown-menu-wrapper/index.js";import{fbaUtils as T}from"../fba-utils/index.js";import{jsx as w,jsxs as P}from"react/jsx-runtime";import"@ant-design/icons/es/icons/LoadingOutlined";import"@flatbiz/utils";import"../index-83bede1b.js";import"antd/es/locale/en_US";import"antd/es/locale/zh_CN";import"dayjs";import"dayjs/locale/en";import"dayjs/locale/zh-cn";import"dayjs/plugin/advancedFormat";import"dayjs/plugin/customParseFormat";import"dayjs/plugin/localeData";import"dayjs/plugin/utc";import"dayjs/plugin/weekday";import"dayjs/plugin/weekOfYear";import"dayjs/plugin/weekYear";import"../fba-hooks/index.js";import"@dimjs/lang/cjs/is-array";import"../use-responsive-point-21b8c601.js";import"@dimjs/utils/cjs/extend";import"@ant-design/icons/es/icons/ExclamationCircleFilled";import"../dialog-confirm/index.js";import"../dialog-modal/index.js";import"ahooks";import"react-dom/client";import"../flex-layout/index.js";import"@wove/react/cjs/create-ctx";import"@dimjs/model";var C=["text","onClick","needConfirm","confirmMessage","popconfirmProps","hoverTips","color","tipsType","type","isFold"];var b=function r(e){if(e.hoverTips){if(e.tipsType==="popover"){return w(l,{content:e.hoverTips,zIndex:1e3,children:w("span",{children:e.content})})}return w(c,{title:e.hoverTips,zIndex:1e3,children:w("span",{children:e.content})})}if(v(e.content)){return w(j,{children:e.content})}return w("span",{children:e.content})};var O=function l(c){var j=h(false),O=j[0],F=j[1];var z=a.useCallbackRef((function(r,e){var i=r.onClick==null?void 0:r.onClick(e);if(i&&p(i)){F(true);return i.finally((function(){F(false)}))}return}));var I=c.operateList.filter((function(r){if(!r)return false;if(v(r)){var e,i,o;if(((e=r.props)==null?void 0:e["hidden"])===true)return false;if(((i=r.props)==null?void 0:i["v-hidden"])===true)return false;var t=(o=r.props)==null?void 0:o["v-permission"];if(s(t)){return T.hasPermission(t)}return true}if(n(r)){if(!T.hasPermission(r["permission"])){return false}if(Object.prototype.hasOwnProperty.call(r,"show")){return r["show"]}else if(Object.prototype.hasOwnProperty.call(r,"hidden")){return!r["hidden"]}return true}return false}));var M=y((function(){return I.filter((function(r){if(v(r)){return true}return!r["isFold"]}))}),[I]);var N=y((function(){var r=I.filter((function(r){if(v(r)){return false}return r["isFold"]}));var i=[];r.forEach((function(r){var o=e({},r);delete o.isFold;i.push(o)}));return i}),[I]);var _=c.gap===undefined?10:c.gap;var L=!c.split?_:0;return w("div",{className:t("table-operate",c.className),style:c.style,children:P(d,e({split:c.split?w(m,{type:"vertical"}):null,size:L,wrap:o(c.wrap)?true:c.wrap},c.spaceProps,{children:[M.map((function(r,o){if(r&&v(r)){return w(b,{content:r,hoverTips:r.hoverTips,tipsType:r.tipsType},o)}var t=r.text,n=r.onClick,s=r.needConfirm,p=r.confirmMessage,a=r.popconfirmProps,l=r.hoverTips,c=r.color,d=r.tipsType,m=r.type;r.isFold;var f=i(r,C);var j=m||"link";if(s&&!f.disabled){var h=c?false:true;return g(u,e({okText:"确定",cancelText:"取消",trigger:["click"],placement:"topRight",arrow:true,destroyTooltipOnHide:true},a,{title:p,onConfirm:z.bind(null,r),key:o,okButtonProps:{loading:O},onOpenChange:function r(e){if(!e){F(false)}},onCancel:function r(e){e==null||e.stopPropagation()}}),w(k,e({danger:h},f,{onClick:function r(e){e.stopPropagation()},type:j,children:w(b,{content:t,hoverTips:l,tipsType:d},o)})))}return g(k,e({loadingPosition:"center"},f,{type:j,onClick:function r(e){e.stopPropagation();return n==null?void 0:n(e)},key:o}),w(b,{content:t,hoverTips:l,tipsType:r.tipsType}))})),N.length>0?w(x,e({menuList:N,placement:"bottom"},c.dropdownMenuProps,{children:w(f,{type:"link",className:"fold-more-button",onClick:function r(e){e.stopPropagation()},children:c.foldIcon?c.foldIcon:w(r,{})})})):null]}))})};O.defaultProps={split:true};export{O as ButtonOperate,b as ButtonOperateItemContent};
13
13
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["@flatbiz/antd/src/button-operate/button-operate.tsx"],"sourcesContent":["import { MoreOutlined } from '@ant-design/icons';\nimport { isPlainObject, isPromise, isString, isUndefined } from '@dimjs/lang';\nimport { classNames } from '@dimjs/utils';\nimport { hooks } from '@wove/react';\nimport type { PopconfirmProps, SpaceProps } from 'antd';\nimport { Button, Divider, Popconfirm, Popover, Space, Tooltip } from 'antd';\nimport type { CSSProperties, FC, ReactElement, ReactNode } from 'react';\nimport { Fragment, isValidElement, useMemo, useState } from 'react';\nimport type { ButtonWrapperProps } from '../button-wrapper/button-wrapper.jsx';\nimport { ButtonWrapper } from '../button-wrapper/button-wrapper.jsx';\nimport type { DialogModalProps } from '../dialog-modal/dialog-modal.jsx';\nimport type { DropdownMenuWrapperProps } from '../dropdown-menu-wrapper/dropdown-menu-wrapper.jsx';\nimport { DropdownMenuWrapper } from '../dropdown-menu-wrapper/dropdown-menu-wrapper.jsx';\nimport { fbaUtils } from '../fba-utils/index.js';\nimport './style.less';\n\nexport interface ButtonOperateItem extends ButtonWrapperProps {\n /** hover 提示文字,isFold=true无效 */\n hoverTips?: string | React.ReactElement;\n /** hover 提示类型 默认:'tooltip' */\n tipsType?: 'popover' | 'tooltip';\n /** 按钮文案 */\n text?: string | ReactElement;\n /** 自定义按钮颜色 */\n color?: string;\n /** 是否需要二次弹框确认 */\n needConfirm?: boolean;\n /** 二次弹框确认文案 */\n confirmMessage?: ReactNode;\n /* isFold=false & needConfirm=true 有效 */\n popconfirmProps?: Pick<PopconfirmProps, 'placement' | 'okText' | 'cancelText' | 'trigger'>;\n /** 是否折叠合拢 */\n isFold?: boolean;\n /* isFold=true & needConfirm=true 有效 */\n confirmModalProps?: DialogModalProps;\n}\n\nexport interface ButtonOperateProps {\n className?: string;\n style?: CSSProperties;\n /**\n * 如果数组中元素为ReactElement类型\n * 1. 一般为antd Button组件,如果组件存在属性hidden=true、v-hidden=true,则会隐藏\n * 2. 可配置 v-permission 权限值,例如 v-permission=\"add\"\n * 3. 任何confirm、disabled等状态在外部控制\n * 3. 不支持fold效果\n */\n operateList: Array<ButtonOperateItem | null | ReactElement>;\n /** 是否换行,默认true */\n wrap?: boolean;\n /** 隐藏图标Icon */\n foldIcon?: ReactElement;\n /** 按钮之间是否添加分隔符 */\n split?: boolean;\n /** 多个按钮的包装组件Space属性 */\n spaceProps?: SpaceProps;\n /** 间距,默认:10;split=true配置下无效(可通过spaceProps设置间距) */\n gap?: number;\n /** 折叠合拢属性 */\n dropdownMenuProps?: Omit<DropdownMenuWrapperProps, 'menuList'>;\n}\n\nexport const ButtonOperateItemContent = (\n props: Pick<ButtonOperateItem, 'hoverTips' | 'tipsType'> & {\n content: ReactNode;\n },\n) => {\n if (props.hoverTips) {\n if (props.tipsType === 'popover') {\n return (\n <Popover content={props.hoverTips} zIndex={1000}>\n <span>{props.content}</span>\n </Popover>\n );\n }\n return (\n <Tooltip title={props.hoverTips} zIndex={1000}>\n <span>{props.content}</span>\n </Tooltip>\n );\n }\n if (isValidElement(props.content)) {\n return <Fragment>{props.content}</Fragment>;\n }\n // ButtonOperate item 内部 span 包文案会有动态效果\n return <span>{props.content}</span>;\n};\n\n/**\n * 按钮组合处理组件\n * ```\n * 1. operateList中存在ReactElement类型的元素,可通过配置 v-permission 属性来设置权限,例如 v-permission=\"add\"\n * 2. operateList中存在ReactElement类型的元素,如果有hidden、v-hidden属性,值为true会隐藏\n *\n *\n * flatbiz/antd@4.2.49\n * 1. 替换 Fold 中 needConfirm交互,有 Popconfirm 改为 dialogConfirm组件实现二次弹框确认功能\n * 2. 修改原因:升级 antd 5.5.1 后,Dropdown 中 Popconfirm弹框组合使用存在问题\n * ```\n */\nexport const ButtonOperate: FC<ButtonOperateProps> = (props) => {\n const [loading, setLoading] = useState(false);\n\n const onConfirm = hooks.useCallbackRef((item: ButtonOperateItem, event) => {\n const result = item.onClick?.(event);\n if (result && isPromise(result)) {\n setLoading(true);\n return result.finally(() => {\n setLoading(false);\n });\n }\n return;\n });\n\n const operateList = props.operateList.filter((item) => {\n if (!item) return false;\n if (isValidElement(item)) {\n if (item.props?.['hidden'] === true) return false;\n if (item.props?.['v-hidden'] === true) return false;\n const permission = item.props?.['v-permission'];\n if (isString(permission)) {\n return fbaUtils.hasPermission(permission);\n }\n return true;\n }\n if (isPlainObject(item)) {\n if (!fbaUtils.hasPermission(item['permission'])) {\n return false;\n }\n return !item['hidden'];\n }\n return false;\n }) as Array<ButtonOperateItem | ReactElement>;\n\n const viewList = useMemo(() => {\n return operateList.filter((item) => {\n if (isValidElement(item)) {\n return true;\n }\n return !item['isFold'];\n }) as ButtonOperateItem[];\n }, [operateList]);\n\n const foldList = useMemo(() => {\n const filterList = operateList.filter((item) => {\n if (isValidElement(item)) {\n return false;\n }\n return item['isFold'];\n }) as ButtonOperateItem[];\n const result = [] as ButtonOperateItem[];\n filterList.forEach((item) => {\n const target = { ...item };\n // 多余字段渲染到react dom上,出现警告\n delete target.isFold;\n result.push(target);\n });\n return result;\n }, [operateList]);\n\n const gap = props.gap === undefined ? 10 : props.gap;\n const size = !props.split ? gap : 0;\n\n return (\n <div className={classNames('table-operate', props.className)} style={props.style}>\n <Space\n split={props.split ? <Divider type=\"vertical\" /> : null}\n size={size}\n wrap={isUndefined(props.wrap) ? true : props.wrap}\n {...props.spaceProps}\n >\n {viewList.map((item, index) => {\n if (item && isValidElement(item)) {\n return (\n <ButtonOperateItemContent\n content={item}\n hoverTips={item.hoverTips}\n tipsType={item.tipsType}\n key={index}\n />\n );\n }\n const {\n text,\n onClick,\n needConfirm,\n confirmMessage,\n popconfirmProps,\n hoverTips,\n color,\n tipsType,\n type,\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n isFold: _isFold,\n ...otherProps\n } = item;\n const typeFt = type || 'link';\n if (needConfirm && !otherProps.disabled) {\n const danger = color ? false : true;\n return (\n <Popconfirm\n okText=\"确定\"\n cancelText=\"取消\"\n trigger={['click']}\n placement=\"topRight\"\n arrow={true}\n destroyTooltipOnHide={true}\n {...popconfirmProps}\n title={confirmMessage}\n onConfirm={onConfirm.bind(null, item)}\n key={index}\n okButtonProps={{\n loading,\n }}\n onOpenChange={(_open) => {\n if (!_open) {\n setLoading(false);\n }\n }}\n onCancel={(event) => {\n event?.stopPropagation();\n }}\n >\n <ButtonWrapper\n danger={danger}\n {...otherProps}\n onClick={(event) => {\n event.stopPropagation();\n }}\n type={typeFt}\n >\n <ButtonOperateItemContent\n content={text}\n hoverTips={hoverTips}\n tipsType={tipsType}\n key={index}\n />\n </ButtonWrapper>\n </Popconfirm>\n );\n }\n return (\n <ButtonWrapper\n loadingPosition=\"center\"\n {...otherProps}\n type={typeFt}\n onClick={(event) => {\n event.stopPropagation();\n return onClick?.(event);\n }}\n key={index}\n >\n <ButtonOperateItemContent content={text} hoverTips={hoverTips} tipsType={item.tipsType} />\n </ButtonWrapper>\n );\n })}\n {foldList.length > 0 ? (\n <DropdownMenuWrapper menuList={foldList} placement=\"bottom\" {...props.dropdownMenuProps}>\n <Button\n type=\"link\"\n className=\"fold-more-button\"\n onClick={(event) => {\n event.stopPropagation();\n }}\n >\n {props.foldIcon ? props.foldIcon : <MoreOutlined />}\n </Button>\n </DropdownMenuWrapper>\n ) : null}\n </Space>\n </div>\n );\n};\n\nButtonOperate.defaultProps = {\n split: true,\n};\n"],"names":["ButtonOperateItemContent","props","hoverTips","tipsType","_jsx","Popover","content","zIndex","children","Tooltip","title","isValidElement","Fragment","ButtonOperate","_useState","useState","loading","setLoading","onConfirm","_hooks","useCallbackRef","item","event","result","onClick","_isPromise","finally","operateList","filter","_item$props","_item$props2","_item$props3","permission","_isString","fbaUtils","hasPermission","_isPlainObject","viewList","useMemo","foldList","filterList","forEach","target","_extends","isFold","push","gap","undefined","size","split","className","_classNames","style","_jsxs","Space","Divider","type","wrap","_isUndefined","spaceProps","map","index","text","needConfirm","confirmMessage","popconfirmProps","color","otherProps","_objectWithoutPropertiesLoose","_excluded","typeFt","disabled","danger","_createElement","Popconfirm","okText","cancelText","trigger","placement","arrow","destroyTooltipOnHide","bind","key","okButtonProps","onOpenChange","_open","onCancel","stopPropagation","ButtonWrapper","loadingPosition","length","DropdownMenuWrapper","menuList","dropdownMenuProps","Button","foldIcon","_MoreOutlined","defaultProps"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["@flatbiz/antd/src/button-operate/button-operate.tsx"],"sourcesContent":["import { MoreOutlined } from '@ant-design/icons';\nimport { isPlainObject, isPromise, isString, isUndefined } from '@dimjs/lang';\nimport { classNames } from '@dimjs/utils';\nimport { hooks } from '@wove/react';\nimport type { PopconfirmProps, SpaceProps } from 'antd';\nimport { Button, Divider, Popconfirm, Popover, Space, Tooltip } from 'antd';\nimport type { CSSProperties, FC, ReactElement, ReactNode } from 'react';\nimport { Fragment, isValidElement, useMemo, useState } from 'react';\nimport type { ButtonWrapperProps } from '../button-wrapper/button-wrapper.jsx';\nimport { ButtonWrapper } from '../button-wrapper/button-wrapper.jsx';\nimport type { DialogModalProps } from '../dialog-modal/dialog-modal.jsx';\nimport type { DropdownMenuWrapperProps } from '../dropdown-menu-wrapper/dropdown-menu-wrapper.jsx';\nimport { DropdownMenuWrapper } from '../dropdown-menu-wrapper/dropdown-menu-wrapper.jsx';\nimport { fbaUtils } from '../fba-utils/index.js';\nimport './style.less';\n\nexport interface ButtonOperateItem extends ButtonWrapperProps {\n /** hover 提示文字,isFold=true无效 */\n hoverTips?: string | React.ReactElement;\n /** hover 提示类型 默认:'tooltip' */\n tipsType?: 'popover' | 'tooltip';\n /** 按钮文案 */\n text?: string | ReactElement;\n /** 自定义按钮颜色 */\n color?: string;\n /** 是否需要二次弹框确认 */\n needConfirm?: boolean;\n /** 二次弹框确认文案 */\n confirmMessage?: ReactNode;\n /* isFold=false & needConfirm=true 有效 */\n popconfirmProps?: Pick<PopconfirmProps, 'placement' | 'okText' | 'cancelText' | 'trigger'>;\n /** 是否折叠合拢 */\n isFold?: boolean;\n /* isFold=true & needConfirm=true 有效 */\n confirmModalProps?: DialogModalProps;\n /** 是否显示按钮,优先级高于 hidden */\n show?: boolean;\n}\n\nexport interface ButtonOperateProps {\n className?: string;\n style?: CSSProperties;\n /**\n * 如果数组中元素为ReactElement类型\n * 1. 一般为antd Button组件,如果组件存在属性hidden=true、v-hidden=true,则会隐藏\n * 2. 可配置 v-permission 权限值,例如 v-permission=\"add\"\n * 3. 任何confirm、disabled等状态在外部控制\n * 3. 不支持fold效果\n */\n operateList: Array<ButtonOperateItem | null | ReactElement>;\n /** 是否换行,默认true */\n wrap?: boolean;\n /** 隐藏图标Icon */\n foldIcon?: ReactElement;\n /** 按钮之间是否添加分隔符 */\n split?: boolean;\n /** 多个按钮的包装组件Space属性 */\n spaceProps?: SpaceProps;\n /** 间距,默认:10;split=true配置下无效(可通过spaceProps设置间距) */\n gap?: number;\n /** 折叠合拢属性 */\n dropdownMenuProps?: Omit<DropdownMenuWrapperProps, 'menuList'>;\n}\n\nexport const ButtonOperateItemContent = (\n props: Pick<ButtonOperateItem, 'hoverTips' | 'tipsType'> & {\n content: ReactNode;\n },\n) => {\n if (props.hoverTips) {\n if (props.tipsType === 'popover') {\n return (\n <Popover content={props.hoverTips} zIndex={1000}>\n <span>{props.content}</span>\n </Popover>\n );\n }\n return (\n <Tooltip title={props.hoverTips} zIndex={1000}>\n <span>{props.content}</span>\n </Tooltip>\n );\n }\n if (isValidElement(props.content)) {\n return <Fragment>{props.content}</Fragment>;\n }\n // ButtonOperate item 内部 span 包文案会有动态效果\n return <span>{props.content}</span>;\n};\n\n/**\n * 按钮组合处理组件\n * ```\n * 1. operateList中存在ReactElement类型的元素,可通过配置 v-permission 属性来设置权限,例如 v-permission=\"add\"\n * 2. operateList中存在ReactElement类型的元素,如果有hidden、v-hidden属性,值为true会隐藏\n *\n *\n * flatbiz/antd@4.2.49\n * 1. 替换 Fold 中 needConfirm交互,有 Popconfirm 改为 dialogConfirm组件实现二次弹框确认功能\n * 2. 修改原因:升级 antd 5.5.1 后,Dropdown 中 Popconfirm弹框组合使用存在问题\n * ```\n */\nexport const ButtonOperate: FC<ButtonOperateProps> = (props) => {\n const [loading, setLoading] = useState(false);\n\n const onConfirm = hooks.useCallbackRef((item: ButtonOperateItem, event) => {\n const result = item.onClick?.(event);\n if (result && isPromise(result)) {\n setLoading(true);\n return result.finally(() => {\n setLoading(false);\n });\n }\n return;\n });\n\n const operateList = props.operateList.filter((item) => {\n if (!item) return false;\n if (isValidElement(item)) {\n if (item.props?.['hidden'] === true) return false;\n if (item.props?.['v-hidden'] === true) return false;\n const permission = item.props?.['v-permission'];\n if (isString(permission)) {\n return fbaUtils.hasPermission(permission);\n }\n return true;\n }\n if (isPlainObject(item)) {\n if (!fbaUtils.hasPermission(item['permission'])) {\n return false;\n }\n if (Object.prototype.hasOwnProperty.call(item, 'show')) {\n return item['show'];\n } else if (Object.prototype.hasOwnProperty.call(item, 'hidden')) {\n return !item['hidden'];\n }\n return true;\n }\n return false;\n }) as Array<ButtonOperateItem | ReactElement>;\n\n const viewList = useMemo(() => {\n return operateList.filter((item) => {\n if (isValidElement(item)) {\n return true;\n }\n return !item['isFold'];\n }) as ButtonOperateItem[];\n }, [operateList]);\n\n const foldList = useMemo(() => {\n const filterList = operateList.filter((item) => {\n if (isValidElement(item)) {\n return false;\n }\n return item['isFold'];\n }) as ButtonOperateItem[];\n const result = [] as ButtonOperateItem[];\n filterList.forEach((item) => {\n const target = { ...item };\n // 多余字段渲染到react dom上,出现警告\n delete target.isFold;\n result.push(target);\n });\n return result;\n }, [operateList]);\n\n const gap = props.gap === undefined ? 10 : props.gap;\n const size = !props.split ? gap : 0;\n\n return (\n <div className={classNames('table-operate', props.className)} style={props.style}>\n <Space\n split={props.split ? <Divider type=\"vertical\" /> : null}\n size={size}\n wrap={isUndefined(props.wrap) ? true : props.wrap}\n {...props.spaceProps}\n >\n {viewList.map((item, index) => {\n if (item && isValidElement(item)) {\n return (\n <ButtonOperateItemContent\n content={item}\n hoverTips={item.hoverTips}\n tipsType={item.tipsType}\n key={index}\n />\n );\n }\n const {\n text,\n onClick,\n needConfirm,\n confirmMessage,\n popconfirmProps,\n hoverTips,\n color,\n tipsType,\n type,\n // 多余字段渲染到react dom上,出现警告\n isFold: _isFold,\n ...otherProps\n } = item;\n const typeFt = type || 'link';\n if (needConfirm && !otherProps.disabled) {\n const danger = color ? false : true;\n return (\n <Popconfirm\n okText=\"确定\"\n cancelText=\"取消\"\n trigger={['click']}\n placement=\"topRight\"\n arrow={true}\n destroyTooltipOnHide={true}\n {...popconfirmProps}\n title={confirmMessage}\n onConfirm={onConfirm.bind(null, item)}\n key={index}\n okButtonProps={{\n loading,\n }}\n onOpenChange={(_open) => {\n if (!_open) {\n setLoading(false);\n }\n }}\n onCancel={(event) => {\n event?.stopPropagation();\n }}\n >\n <ButtonWrapper\n danger={danger}\n {...otherProps}\n onClick={(event) => {\n event.stopPropagation();\n }}\n type={typeFt}\n >\n <ButtonOperateItemContent\n content={text}\n hoverTips={hoverTips}\n tipsType={tipsType}\n key={index}\n />\n </ButtonWrapper>\n </Popconfirm>\n );\n }\n return (\n <ButtonWrapper\n loadingPosition=\"center\"\n {...otherProps}\n type={typeFt}\n onClick={(event) => {\n event.stopPropagation();\n return onClick?.(event);\n }}\n key={index}\n >\n <ButtonOperateItemContent content={text} hoverTips={hoverTips} tipsType={item.tipsType} />\n </ButtonWrapper>\n );\n })}\n {foldList.length > 0 ? (\n <DropdownMenuWrapper menuList={foldList} placement=\"bottom\" {...props.dropdownMenuProps}>\n <Button\n type=\"link\"\n className=\"fold-more-button\"\n onClick={(event) => {\n event.stopPropagation();\n }}\n >\n {props.foldIcon ? props.foldIcon : <MoreOutlined />}\n </Button>\n </DropdownMenuWrapper>\n ) : null}\n </Space>\n </div>\n );\n};\n\nButtonOperate.defaultProps = {\n split: true,\n};\n"],"names":["ButtonOperateItemContent","props","hoverTips","tipsType","_jsx","Popover","content","zIndex","children","Tooltip","title","isValidElement","Fragment","ButtonOperate","_useState","useState","loading","setLoading","onConfirm","_hooks","useCallbackRef","item","event","result","onClick","_isPromise","finally","operateList","filter","_item$props","_item$props2","_item$props3","permission","_isString","fbaUtils","hasPermission","_isPlainObject","Object","prototype","hasOwnProperty","call","viewList","useMemo","foldList","filterList","forEach","target","_extends","isFold","push","gap","undefined","size","split","className","_classNames","style","_jsxs","Space","Divider","type","wrap","_isUndefined","spaceProps","map","index","text","needConfirm","confirmMessage","popconfirmProps","color","otherProps","_objectWithoutPropertiesLoose","_excluded","typeFt","disabled","danger","_createElement","Popconfirm","okText","cancelText","trigger","placement","arrow","destroyTooltipOnHide","bind","key","okButtonProps","onOpenChange","_open","onCancel","stopPropagation","ButtonWrapper","loadingPosition","length","DropdownMenuWrapper","menuList","dropdownMenuProps","Button","foldIcon","_MoreOutlined","defaultProps"],"mappings":";2zDAgEaA,EAA2B,SAA3BA,EACXC,GAIA,GAAIA,EAAMC,UAAW,CACnB,GAAID,EAAME,WAAa,UAAW,CAChC,OACEC,EAACC,EAAO,CAACC,QAASL,EAAMC,UAAWK,OAAQ,IAAKC,SAC9CJ,EAAA,OAAA,CAAAI,SAAOP,EAAMK,WAGnB,CACA,OACEF,EAACK,EAAO,CAACC,MAAOT,EAAMC,UAAWK,OAAQ,IAAKC,SAC5CJ,EAAA,OAAA,CAAAI,SAAOP,EAAMK,WAGnB,CACA,GAAIK,EAAeV,EAAMK,SAAU,CACjC,OAAOF,EAACQ,EAAQ,CAAAJ,SAAEP,EAAMK,SAC1B,CAEA,OAAOF,EAAA,OAAA,CAAAI,SAAOP,EAAMK,SACtB,MAcaO,EAAwC,SAAxCA,EAAyCZ,GACpD,IAAAa,EAA8BC,EAAS,OAAhCC,EAAOF,EAAA,GAAEG,EAAUH,EAAA,GAE1B,IAAMI,EAAYC,EAAMC,gBAAe,SAACC,EAAyBC,GAC/D,IAAMC,EAASF,EAAKG,SAALH,UAAAA,EAAAA,EAAKG,QAAUF,GAC9B,GAAIC,GAAUE,EAAUF,GAAS,CAC/BN,EAAW,MACX,OAAOM,EAAOG,SAAQ,WACpBT,EAAW,MACb,GACF,CACA,MACF,IAEA,IAAMU,EAAc1B,EAAM0B,YAAYC,QAAO,SAACP,GAC5C,IAAKA,EAAM,OAAO,MAClB,GAAIV,EAAeU,GAAO,CAAA,IAAAQ,EAAAC,EAAAC,EACxB,KAAIF,EAAAR,EAAKpB,QAAK,UAAA,EAAV4B,EAAa,aAAc,KAAM,OAAO,MAC5C,KAAIC,EAAAT,EAAKpB,QAAK,UAAA,EAAV6B,EAAa,eAAgB,KAAM,OAAO,MAC9C,IAAME,GAAUD,EAAGV,EAAKpB,QAAL8B,UAAAA,EAAAA,EAAa,gBAChC,GAAIE,EAASD,GAAa,CACxB,OAAOE,EAASC,cAAcH,EAChC,CACA,OAAO,IACT,CACA,GAAII,EAAcf,GAAO,CACvB,IAAKa,EAASC,cAAcd,EAAK,eAAgB,CAC/C,OAAO,KACT,CACA,GAAIgB,OAAOC,UAAUC,eAAeC,KAAKnB,EAAM,QAAS,CACtD,OAAOA,EAAK,OACd,MAAO,GAAIgB,OAAOC,UAAUC,eAAeC,KAAKnB,EAAM,UAAW,CAC/D,OAAQA,EAAK,SACf,CACA,OAAO,IACT,CACA,OAAO,KACT,IAEA,IAAMoB,EAAWC,GAAQ,WACvB,OAAOf,EAAYC,QAAO,SAACP,GACzB,GAAIV,EAAeU,GAAO,CACxB,OAAO,IACT,CACA,OAAQA,EAAK,SACf,GACF,GAAG,CAACM,IAEJ,IAAMgB,EAAWD,GAAQ,WACvB,IAAME,EAAajB,EAAYC,QAAO,SAACP,GACrC,GAAIV,EAAeU,GAAO,CACxB,OAAO,KACT,CACA,OAAOA,EAAK,SACd,IACA,IAAME,EAAS,GACfqB,EAAWC,SAAQ,SAACxB,GAClB,IAAMyB,EAAMC,EAAA,CAAA,EAAQ1B,UAEbyB,EAAOE,OACdzB,EAAO0B,KAAKH,EACd,IACA,OAAOvB,CACT,GAAG,CAACI,IAEJ,IAAMuB,EAAMjD,EAAMiD,MAAQC,UAAY,GAAKlD,EAAMiD,IACjD,IAAME,GAAQnD,EAAMoD,MAAQH,EAAM,EAElC,OACE9C,EAAA,MAAA,CAAKkD,UAAWC,EAAW,gBAAiBtD,EAAMqD,WAAYE,MAAOvD,EAAMuD,MAAMhD,SAC/EiD,EAACC,EAAKX,EAAA,CACJM,MAAOpD,EAAMoD,MAAQjD,EAACuD,EAAO,CAACC,KAAK,aAAgB,KACnDR,KAAMA,EACNS,KAAMC,EAAY7D,EAAM4D,MAAQ,KAAO5D,EAAM4D,MACzC5D,EAAM8D,WAAU,CAAAvD,SAAA,CAEnBiC,EAASuB,KAAI,SAAC3C,EAAM4C,GACnB,GAAI5C,GAAQV,EAAeU,GAAO,CAChC,OACEjB,EAACJ,EAAwB,CACvBM,QAASe,EACTnB,UAAWmB,EAAKnB,UAChBC,SAAUkB,EAAKlB,UACV8D,EAGX,CACA,IACEC,EAYE7C,EAZF6C,KACA1C,EAWEH,EAXFG,QACA2C,EAUE9C,EAVF8C,YACAC,EASE/C,EATF+C,eACAC,EAQEhD,EARFgD,gBACAnE,EAOEmB,EAPFnB,UACAoE,EAMEjD,EANFiD,MACAnE,EAKEkB,EALFlB,SACAyD,EAIEvC,EAJFuC,KAIEvC,EAFF2B,OACGuB,IAAAA,EAAUC,EACXnD,EAAIoD,GACR,IAAMC,EAASd,GAAQ,OACvB,GAAIO,IAAgBI,EAAWI,SAAU,CACvC,IAAMC,EAASN,EAAQ,MAAQ,KAC/B,OACEO,EAACC,EAAU/B,EAAA,CACTgC,OAAO,KACPC,WAAW,KACXC,QAAS,CAAC,SACVC,UAAU,WACVC,MAAO,KACPC,qBAAsB,MAClBf,EAAe,CACnB3D,MAAO0D,EACPlD,UAAWA,EAAUmE,KAAK,KAAMhE,GAChCiE,IAAKrB,EACLsB,cAAe,CACbvE,QAAAA,GAEFwE,aAAc,SAAdA,EAAeC,GACb,IAAKA,EAAO,CACVxE,EAAW,MACb,CACA,EACFyE,SAAU,SAAVA,EAAWpE,GACTA,GAAAA,MAAAA,EAAOqE,iBACT,IAEAvF,EAACwF,EAAa7C,EAAA,CACZ6B,OAAQA,GACJL,EAAU,CACd/C,QAAS,SAATA,EAAUF,GACRA,EAAMqE,iBACN,EACF/B,KAAMc,EAAOlE,SAEbJ,EAACJ,EAAwB,CACvBM,QAAS4D,EACThE,UAAWA,EACXC,SAAUA,GACL8D,MAKf,CACA,OACEY,EAACe,EAAa7C,EAAA,CACZ8C,gBAAgB,UACZtB,EAAU,CACdX,KAAMc,EACNlD,QAAS,SAATA,EAAUF,GACRA,EAAMqE,kBACN,OAAOnE,GAAO,UAAA,EAAPA,EAAUF,EACjB,EACFgE,IAAKrB,IAEL7D,EAACJ,EAAwB,CAACM,QAAS4D,EAAMhE,UAAWA,EAAWC,SAAUkB,EAAKlB,WAGpF,IACCwC,EAASmD,OAAS,EACjB1F,EAAC2F,EAAmBhD,EAAA,CAACiD,SAAUrD,EAAUuC,UAAU,UAAajF,EAAMgG,kBAAiB,CAAAzF,SACrFJ,EAAC8F,EAAM,CACLtC,KAAK,OACLN,UAAU,mBACV9B,QAAS,SAATA,EAAUF,GACRA,EAAMqE,iBACN,EAAAnF,SAEDP,EAAMkG,SAAWlG,EAAMkG,SAAW/F,EAAAgG,EAAe,SAGpD,UAIZ,EAEAvF,EAAcwF,aAAe,CAC3BhD,MAAO"}
@@ -18,5 +18,5 @@ import './../dropdown-menu-wrapper/index.css';
18
18
  import './../input-search-wrapper/index.css';
19
19
  import './index.css';
20
20
  /*! @flatjs/forge MIT @flatbiz/antd */
21
- import{a as e,_ as i}from"../_rollupPluginBabelHelpers-c0dbec57.js";import{hooks as r}from"@wove/react/cjs/hooks";import{isObject as o}from"@dimjs/lang/cjs/is-object";import{isUndefinedOrNull as a,toArray as n}from"@flatbiz/utils";import{Select as t,message as l}from"antd";import{useRef as s,useState as m,useEffect as d}from"react";import{TreeModal as u}from"../tree-modal/index.js";import{jsx as p}from"react/jsx-runtime";import"ahooks";import"../fba-hooks/index.js";import"@dimjs/lang/cjs/is-array";import"../use-responsive-point-21b8c601.js";import"../flex-layout/index.js";import"@dimjs/utils/cjs/class-names";import"@ant-design/icons/es/icons/CloseOutlined";import"../css-node-hover/index.js";import"../icon-wrapper/index.js";import"@dimjs/lang/cjs/is-undefined";import"../text-overflow/index.js";import"@dimjs/lang/cjs/is-string";import"../tree-wrapper/index.js";import"@dimjs/model-react";import"@dimjs/utils/cjs/array";import"@ant-design/icons/es/icons/CaretDownFilled";import"@ant-design/icons/es/icons/MoreOutlined";import"@dimjs/utils/cjs/extend";import"@dimjs/utils/cjs/get";import"@dimjs/model";import"../button-operate/index.js";import"@dimjs/lang/cjs/is-plain-object";import"@dimjs/lang/cjs/is-promise";import"../button-wrapper/index.js";import"@ant-design/icons/es/icons/LoadingOutlined";import"../index-83bede1b.js";import"antd/es/locale/en_US";import"antd/es/locale/zh_CN";import"dayjs";import"dayjs/locale/en";import"dayjs/locale/zh-cn";import"dayjs/plugin/advancedFormat";import"dayjs/plugin/customParseFormat";import"dayjs/plugin/localeData";import"dayjs/plugin/utc";import"dayjs/plugin/weekday";import"dayjs/plugin/weekOfYear";import"dayjs/plugin/weekYear";import"../fba-utils/index.js";import"../dropdown-menu-wrapper/index.js";import"@ant-design/icons/es/icons/ExclamationCircleFilled";import"../dialog-confirm/index.js";import"../dialog-modal/index.js";import"react-dom/client";import"@wove/react/cjs/create-ctx";import"../input-search-wrapper/index.js";import"../request-status/index.js";import"@dimjs/utils/cjs/tree";import"dequal";var c=["placeholder","maxTagCount","labelInValue","maxCount","overMaxCountMsg","disabled","allowClear"];var j=function j(v){var f,g;var x=v.placeholder,C=v.maxTagCount,b=v.labelInValue,h=v.maxCount,w=v.overMaxCountMsg,y=v.disabled,k=v.allowClear,M=e(v,c);var F=a(x)?"请选择":x;var O=a(k)?true:k;var _=s({});var z=((f=M.fieldNames)==null?void 0:f.label)||"label";var D=((g=M.fieldNames)==null?void 0:g.value)||"value";var I=m(),N=I[0],T=I[1];d((function(){var e;var i=((e=n(v.value))==null?void 0:e.map((function(e){var i;var r=o(e)?e:{label:e,value:e};return{value:r.value,label:((i=_.current[r.value])==null?void 0:i[z])||r.value}})))||[];T(i)}),[z,v.value]);var V=function e(i){var r=n(i).length?i:undefined;if(M.isMultiple==false){v.onChange==null||v.onChange(r==null?void 0:r[0])}else{if(r&&h!==undefined&&r.length>h){void l.error(w?w:"最多选择"+h+"项");return}v.onChange==null||v.onChange(r)}};var q=function e(i){T(i);if(b){V(i);return}V(i==null?void 0:i.map((function(e){return e.value})))};var B=function e(i){T(i);if(b){V(i);return}V(i==null?void 0:i.map((function(e){return e.value})))};var P=r.useCallbackRef((function(e,i){_.current=i;var r=N==null?void 0:N.map((function(e){var r=i[e.value];return r?{label:r[z],value:r[D]}:undefined})).filter(Boolean);T(r)}));return p(u,i({},M,{value:N,forceRender:true,onChange:B,onDataSourceChange:P,disabled:y,children:p(t,{labelInValue:true,style:{width:"100%"},placeholder:F,maxTagCount:C,mode:M.isMultiple?"multiple":undefined,open:false,value:N,onChange:q,disabled:y,allowClear:O})}))};export{j as TreeModalSelector};
21
+ import{a as e,_ as i}from"../_rollupPluginBabelHelpers-c0dbec57.js";import{hooks as r}from"@wove/react/cjs/hooks";import{isObject as a}from"@dimjs/lang/cjs/is-object";import{isUndefinedOrNull as o,toArray as n}from"@flatbiz/utils";import{Select as t,message as l}from"antd";import{forwardRef as s,useRef as u,useState as d,useEffect as m,useImperativeHandle as p}from"react";import{TreeModal as c}from"../tree-modal/index.js";import{jsx as j}from"react/jsx-runtime";import"ahooks";import"../fba-hooks/index.js";import"@dimjs/lang/cjs/is-array";import"../use-responsive-point-21b8c601.js";import"../flex-layout/index.js";import"@dimjs/utils/cjs/class-names";import"@ant-design/icons/es/icons/CloseOutlined";import"../css-node-hover/index.js";import"../icon-wrapper/index.js";import"@dimjs/lang/cjs/is-undefined";import"../text-overflow/index.js";import"@dimjs/lang/cjs/is-string";import"../tree-wrapper/index.js";import"@dimjs/model-react";import"@dimjs/utils/cjs/array";import"@ant-design/icons/es/icons/CaretDownFilled";import"@ant-design/icons/es/icons/MoreOutlined";import"@dimjs/utils/cjs/extend";import"@dimjs/utils/cjs/get";import"@dimjs/model";import"../button-operate/index.js";import"@dimjs/lang/cjs/is-plain-object";import"@dimjs/lang/cjs/is-promise";import"../button-wrapper/index.js";import"@ant-design/icons/es/icons/LoadingOutlined";import"../index-83bede1b.js";import"antd/es/locale/en_US";import"antd/es/locale/zh_CN";import"dayjs";import"dayjs/locale/en";import"dayjs/locale/zh-cn";import"dayjs/plugin/advancedFormat";import"dayjs/plugin/customParseFormat";import"dayjs/plugin/localeData";import"dayjs/plugin/utc";import"dayjs/plugin/weekday";import"dayjs/plugin/weekOfYear";import"dayjs/plugin/weekYear";import"../fba-utils/index.js";import"../dropdown-menu-wrapper/index.js";import"@ant-design/icons/es/icons/ExclamationCircleFilled";import"../dialog-confirm/index.js";import"../dialog-modal/index.js";import"react-dom/client";import"@wove/react/cjs/create-ctx";import"../input-search-wrapper/index.js";import"../request-status/index.js";import"@dimjs/utils/cjs/tree";import"dequal";var v=["placeholder","maxTagCount","labelInValue","maxCount","overMaxCountMsg","disabled","allowClear"];var f=s((function(s,f){var g,x;var C=s.placeholder,b=s.maxTagCount,h=s.labelInValue,w=s.maxCount,y=s.overMaxCountMsg,M=s.disabled,k=s.allowClear,D=e(s,v);var F=o(C)?"请选择":C;var O=o(k)?true:k;var S=u({});var _=u([]);var z=((g=D.fieldNames)==null?void 0:g.label)||"label";var I=((x=D.fieldNames)==null?void 0:x.value)||"value";var N=d(),T=N[0],V=N[1];m((function(){var e;var i=((e=n(s.value))==null?void 0:e.map((function(e){var i;var r=a(e)?e:{label:e,value:e};return{value:r.value,label:((i=S.current[r.value])==null?void 0:i[z])||r.value}})))||[];V(i)}),[z,s.value]);var q=function e(i){var r=n(i).length?i:undefined;if(D.isMultiple==false){s.onChange==null||s.onChange(r==null?void 0:r[0])}else{if(r&&w!==undefined&&r.length>w){void l.error(y?y:"最多选择"+w+"项");return}s.onChange==null||s.onChange(r)}};var B=function e(i){V(i);if(h){q(i);return}q(i==null?void 0:i.map((function(e){return e.value})))};var L=function e(i){V(i);if(h){q(i);return}q(i==null?void 0:i.map((function(e){return e.value})))};var P=r.useCallbackRef((function(e,i){S.current=i;_.current=e||[];var r=T==null?void 0:T.map((function(e){var r=i[e.value];return r?{label:r[z],value:r[I]}:undefined})).filter(Boolean);V(r)}));p(f,(function(){return{getDataSourceMap:function e(){return{treeDataList:_.current,dataSourceMap:S.current}}}}));return j(c,i({},D,{value:T,forceRender:true,onChange:L,onDataSourceChange:P,disabled:M,children:j(t,{labelInValue:true,style:{width:"100%"},placeholder:F,maxTagCount:b,mode:D.isMultiple?"multiple":undefined,open:false,value:T,onChange:B,disabled:M,allowClear:O})}))}));export{f as TreeModalSelector};
22
22
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["@flatbiz/antd/src/tree-modal-selector/selector.tsx"],"sourcesContent":["import { isObject } from '@dimjs/lang';\nimport { isUndefinedOrNull, toArray, type TPlainObject } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { message, Select } from 'antd';\nimport { useEffect, useRef, useState } from 'react';\nimport { TreeModal } from '../tree-modal';\nimport type { TreeModalProps, TreeModelSelectItem } from '../tree-modal/types';\nexport type TreeModalSelectorProps = Omit<TreeModalProps, 'children' | 'forceRender' | 'onChange'> & {\n placeholder?: string;\n /**\n * 1. 可指定数量\n * 2. 可设置 responsive,一行自适应显示\n */\n maxTagCount?: number | 'responsive';\n /** 是否返回label+value模式 */\n labelInValue?: boolean;\n onChange?: (values?: TreeModelSelectItem[] | TreeModelSelectItem) => void;\n\n /** 最大选择数量 */\n maxCount?: number;\n /** 超过最大选择数量提示文本 */\n overMaxCountMsg?: string;\n disabled?: boolean;\n allowClear?: boolean;\n};\n\n/**\n * 树弹框选择器\n * ```\n * 1. 可通过 treeProps.checkableType 配置多选节点模式(包括返回所有节点、只返回叶子节点、叶子节点&父节点全选只返回父节点),默认只返回叶子节点\n * 2. demo: https://fex.qa.tcshuke.com/docs/admin/main/selector/tree\n * ```\n */\nexport const TreeModalSelector = (props: TreeModalSelectorProps) => {\n const {\n placeholder,\n maxTagCount,\n labelInValue,\n maxCount,\n overMaxCountMsg,\n disabled,\n allowClear,\n ...otherProps\n } = props;\n const placeholderFt = isUndefinedOrNull(placeholder) ? '请选择' : placeholder;\n const allowClearFt = isUndefinedOrNull(allowClear) ? true : allowClear;\n\n const dataSourceMapRef = useRef<TPlainObject>({});\n\n const labelKey = otherProps.fieldNames?.label || 'label';\n const valueKey = otherProps.fieldNames?.value || 'value';\n\n const [showValues, setShowValues] = useState<TreeModelSelectItem[]>();\n\n useEffect(() => {\n const dataList =\n toArray(props.value)?.map((item) => {\n const objItems = (isObject(item) ? item : { label: item, value: item }) as TreeModelSelectItem;\n return {\n value: objItems.value,\n label: dataSourceMapRef.current[objItems.value]?.[labelKey] || objItems.value,\n } as TreeModelSelectItem;\n }) || [];\n setShowValues(dataList);\n }, [labelKey, props.value]);\n\n const onInnerChange = (value: TreeModelSelectItem[]) => {\n const valueFt = toArray(value).length ? value : undefined;\n if (otherProps.isMultiple == false) {\n props.onChange?.(valueFt?.[0]);\n } else {\n if (valueFt && maxCount !== undefined && valueFt.length > maxCount) {\n void message.error(overMaxCountMsg ? overMaxCountMsg : `最多选择${maxCount}项`);\n return;\n }\n\n props.onChange?.(valueFt);\n }\n };\n\n const onSelectChange = (value) => {\n setShowValues(value);\n if (labelInValue) {\n onInnerChange(value);\n return;\n }\n\n onInnerChange(value?.map((item) => item.value));\n };\n const treeModalChange = (value) => {\n setShowValues(value);\n if (labelInValue) {\n onInnerChange(value);\n return;\n }\n onInnerChange(value?.map((item) => item.value));\n };\n\n const onDataSourceChange = hooks.useCallbackRef((_treeDataList: TPlainObject[], mapData: TPlainObject) => {\n dataSourceMapRef.current = mapData;\n const result = showValues\n ?.map((item) => {\n const target = mapData[item.value];\n return target ? { label: target[labelKey], value: target[valueKey] } : undefined;\n })\n .filter(Boolean) as TreeModelSelectItem[];\n setShowValues(result);\n });\n\n return (\n <TreeModal\n {...otherProps}\n value={showValues}\n forceRender={true}\n onChange={treeModalChange}\n onDataSourceChange={onDataSourceChange}\n disabled={disabled}\n >\n <Select\n labelInValue\n style={{ width: '100%' }}\n placeholder={placeholderFt}\n maxTagCount={maxTagCount}\n mode={otherProps.isMultiple ? 'multiple' : undefined}\n open={false}\n value={showValues}\n onChange={onSelectChange}\n disabled={disabled}\n allowClear={allowClearFt}\n />\n </TreeModal>\n );\n};\n"],"names":["TreeModalSelector","props","_otherProps$fieldName","_otherProps$fieldName2","placeholder","maxTagCount","labelInValue","maxCount","overMaxCountMsg","disabled","allowClear","otherProps","_objectWithoutPropertiesLoose","_excluded","placeholderFt","isUndefinedOrNull","allowClearFt","dataSourceMapRef","useRef","labelKey","fieldNames","label","valueKey","value","_useState","useState","showValues","setShowValues","useEffect","_toArray","dataList","toArray","map","item","_dataSourceMapRef$cur","objItems","_isObject","current","onInnerChange","valueFt","length","undefined","isMultiple","onChange","message","error","onSelectChange","treeModalChange","onDataSourceChange","_hooks","useCallbackRef","_treeDataList","mapData","result","target","filter","Boolean","_jsx","TreeModal","_extends","forceRender","children","Select","style","width","mode","open"],"mappings":";ynEAiCaA,EAAoB,SAApBA,EAAqBC,GAAkC,IAAAC,EAAAC,EAClE,IACEC,EAQEH,EARFG,YACAC,EAOEJ,EAPFI,YACAC,EAMEL,EANFK,aACAC,EAKEN,EALFM,SACAC,EAIEP,EAJFO,gBACAC,EAGER,EAHFQ,SACAC,EAEET,EAFFS,WACGC,EAAUC,EACXX,EAAKY,GACT,IAAMC,EAAgBC,EAAkBX,GAAe,MAAQA,EAC/D,IAAMY,EAAeD,EAAkBL,GAAc,KAAOA,EAE5D,IAAMO,EAAmBC,EAAqB,CAAA,GAE9C,IAAMC,IAAWjB,EAAAS,EAAWS,aAAXlB,UAAAA,EAAAA,EAAuBmB,QAAS,QACjD,IAAMC,IAAWnB,EAAAQ,EAAWS,aAAXjB,UAAAA,EAAAA,EAAuBoB,QAAS,QAEjD,IAAAC,EAAoCC,IAA7BC,EAAUF,EAAA,GAAEG,EAAaH,EAAA,GAEhCI,GAAU,WAAM,IAAAC,EACd,IAAMC,IACJD,EAAAE,EAAQ9B,EAAMsB,qBAAdM,EAAsBG,KAAI,SAACC,GAAS,IAAAC,EAClC,IAAMC,EAAYC,EAASH,GAAQA,EAAO,CAAEZ,MAAOY,EAAMV,MAAOU,GAChE,MAAO,CACLV,MAAOY,EAASZ,MAChBF,QAAOa,EAAAjB,EAAiBoB,QAAQF,EAASZ,qBAAlCW,EAA2Cf,KAAagB,EAASZ,MAE3E,MAAK,GACRI,EAAcG,EACf,GAAE,CAACX,EAAUlB,EAAMsB,QAEpB,IAAMe,EAAgB,SAAhBA,EAAiBf,GACrB,IAAMgB,EAAUR,EAAQR,GAAOiB,OAASjB,EAAQkB,UAChD,GAAI9B,EAAW+B,YAAc,MAAO,CAClCzC,EAAM0C,UAAN1C,MAAAA,EAAM0C,SAAWJ,GAAAA,UAAAA,EAAAA,EAAU,GAC7B,KAAO,CACL,GAAIA,GAAWhC,IAAakC,WAAaF,EAAQC,OAASjC,EAAU,MAC7DqC,EAAQC,MAAMrC,EAAkBA,EAAe,OAAUD,EAAQ,KACtE,MACF,CAEAN,EAAM0C,UAAN1C,MAAAA,EAAM0C,SAAWJ,EACnB,GAGF,IAAMO,EAAiB,SAAjBA,EAAkBvB,GACtBI,EAAcJ,GACd,GAAIjB,EAAc,CAChBgC,EAAcf,GACd,MACF,CAEAe,EAAcf,GAAAA,UAAAA,EAAAA,EAAOS,KAAI,SAACC,GAAI,OAAKA,EAAKV,KAAK,MAE/C,IAAMwB,EAAkB,SAAlBA,EAAmBxB,GACvBI,EAAcJ,GACd,GAAIjB,EAAc,CAChBgC,EAAcf,GACd,MACF,CACAe,EAAcf,GAAAA,UAAAA,EAAAA,EAAOS,KAAI,SAACC,GAAI,OAAKA,EAAKV,KAAK,MAG/C,IAAMyB,EAAqBC,EAAMC,gBAAe,SAACC,EAA+BC,GAC9EnC,EAAiBoB,QAAUe,EAC3B,IAAMC,EAAS3B,GAAAA,UAAAA,EAAAA,EACXM,KAAI,SAACC,GACL,IAAMqB,EAASF,EAAQnB,EAAKV,OAC5B,OAAO+B,EAAS,CAAEjC,MAAOiC,EAAOnC,GAAWI,MAAO+B,EAAOhC,IAAcmB,SACzE,IACCc,OAAOC,SACV7B,EAAc0B,EAChB,IAEA,OACEI,EAACC,EAASC,KACJhD,EAAU,CACdY,MAAOG,EACPkC,YAAa,KACbjB,SAAUI,EACVC,mBAAoBA,EACpBvC,SAAUA,EAASoD,SAEnBJ,EAACK,EAAM,CACLxD,aAAY,KACZyD,MAAO,CAAEC,MAAO,QAChB5D,YAAaU,EACbT,YAAaA,EACb4D,KAAMtD,EAAW+B,WAAa,WAAaD,UAC3CyB,KAAM,MACN3C,MAAOG,EACPiB,SAAUG,EACVrC,SAAUA,EACVC,WAAYM,MAIpB"}
1
+ {"version":3,"file":"index.js","sources":["@flatbiz/antd/src/tree-modal-selector/selector.tsx"],"sourcesContent":["import { isObject } from '@dimjs/lang';\nimport { isUndefinedOrNull, toArray, type TPlainObject } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { message, Select } from 'antd';\nimport { forwardRef, useEffect, useImperativeHandle, useRef, useState } from 'react';\nimport { TreeModal } from '../tree-modal';\nimport type { TreeModalProps, TreeModelSelectItem } from '../tree-modal/types';\nexport type TreeModalSelectorProps = Omit<TreeModalProps, 'children' | 'forceRender' | 'onChange'> & {\n placeholder?: string;\n /**\n * 1. 可指定数量\n * 2. 可设置 responsive,一行自适应显示\n */\n maxTagCount?: number | 'responsive';\n /** 是否返回label+value模式 */\n labelInValue?: boolean;\n onChange?: (values?: TreeModelSelectItem[] | TreeModelSelectItem) => void;\n\n /** 最大选择数量 */\n maxCount?: number;\n /** 超过最大选择数量提示文本 */\n overMaxCountMsg?: string;\n disabled?: boolean;\n allowClear?: boolean;\n};\n\nexport type TreeModalSelectorApi = {\n getDataSourceMap: () => {\n treeDataList: TPlainObject[];\n dataSourceMap: TPlainObject;\n };\n};\n\n/**\n * 树弹框选择器\n * ```\n * 1. 可通过 treeProps.checkableType 配置多选节点模式(包括返回所有节点、只返回叶子节点、叶子节点&父节点全选只返回父节点),默认只返回叶子节点\n * 2. demo: https://fex.qa.tcshuke.com/docs/admin/main/selector/tree\n * ```\n */\nexport const TreeModalSelector = forwardRef<TreeModalSelectorApi, TreeModalSelectorProps>((props, ref) => {\n const {\n placeholder,\n maxTagCount,\n labelInValue,\n maxCount,\n overMaxCountMsg,\n disabled,\n allowClear,\n ...otherProps\n } = props;\n const placeholderFt = isUndefinedOrNull(placeholder) ? '请选择' : placeholder;\n const allowClearFt = isUndefinedOrNull(allowClear) ? true : allowClear;\n\n const dataSourceMapRef = useRef<TPlainObject>({});\n const treeDataListRef = useRef<TPlainObject[]>([]);\n\n const labelKey = otherProps.fieldNames?.label || 'label';\n const valueKey = otherProps.fieldNames?.value || 'value';\n\n const [showValues, setShowValues] = useState<TreeModelSelectItem[]>();\n\n useEffect(() => {\n const dataList =\n toArray(props.value)?.map((item) => {\n const objItems = (isObject(item) ? item : { label: item, value: item }) as TreeModelSelectItem;\n return {\n value: objItems.value,\n label: dataSourceMapRef.current[objItems.value]?.[labelKey] || objItems.value,\n } as TreeModelSelectItem;\n }) || [];\n setShowValues(dataList);\n }, [labelKey, props.value]);\n\n const onInnerChange = (value: TreeModelSelectItem[]) => {\n const valueFt = toArray(value).length ? value : undefined;\n if (otherProps.isMultiple == false) {\n props.onChange?.(valueFt?.[0]);\n } else {\n if (valueFt && maxCount !== undefined && valueFt.length > maxCount) {\n void message.error(overMaxCountMsg ? overMaxCountMsg : `最多选择${maxCount}项`);\n return;\n }\n\n props.onChange?.(valueFt);\n }\n };\n\n const onSelectChange = (value) => {\n setShowValues(value);\n if (labelInValue) {\n onInnerChange(value);\n return;\n }\n\n onInnerChange(value?.map((item) => item.value));\n };\n const treeModalChange = (value) => {\n setShowValues(value);\n if (labelInValue) {\n onInnerChange(value);\n return;\n }\n onInnerChange(value?.map((item) => item.value));\n };\n\n const onDataSourceChange = hooks.useCallbackRef((treeDataList: TPlainObject[], mapData: TPlainObject) => {\n dataSourceMapRef.current = mapData;\n treeDataListRef.current = treeDataList || [];\n const result = showValues\n ?.map((item) => {\n const target = mapData[item.value];\n return target ? { label: target[labelKey], value: target[valueKey] } : undefined;\n })\n .filter(Boolean) as TreeModelSelectItem[];\n setShowValues(result);\n });\n\n useImperativeHandle(ref, () => {\n return {\n getDataSourceMap: () => {\n return {\n treeDataList: treeDataListRef.current,\n dataSourceMap: dataSourceMapRef.current,\n };\n },\n };\n });\n\n return (\n <TreeModal\n {...otherProps}\n value={showValues}\n forceRender={true}\n onChange={treeModalChange}\n onDataSourceChange={onDataSourceChange}\n disabled={disabled}\n >\n <Select\n labelInValue\n style={{ width: '100%' }}\n placeholder={placeholderFt}\n maxTagCount={maxTagCount}\n mode={otherProps.isMultiple ? 'multiple' : undefined}\n open={false}\n value={showValues}\n onChange={onSelectChange}\n disabled={disabled}\n allowClear={allowClearFt}\n />\n </TreeModal>\n );\n});\n"],"names":["TreeModalSelector","forwardRef","props","ref","_otherProps$fieldName","_otherProps$fieldName2","placeholder","maxTagCount","labelInValue","maxCount","overMaxCountMsg","disabled","allowClear","otherProps","_objectWithoutPropertiesLoose","_excluded","placeholderFt","isUndefinedOrNull","allowClearFt","dataSourceMapRef","useRef","treeDataListRef","labelKey","fieldNames","label","valueKey","value","_useState","useState","showValues","setShowValues","useEffect","_toArray","dataList","toArray","map","item","_dataSourceMapRef$cur","objItems","_isObject","current","onInnerChange","valueFt","length","undefined","isMultiple","onChange","message","error","onSelectChange","treeModalChange","onDataSourceChange","_hooks","useCallbackRef","treeDataList","mapData","result","target","filter","Boolean","useImperativeHandle","getDataSourceMap","dataSourceMap","_jsx","TreeModal","_extends","forceRender","children","Select","style","width","mode","open"],"mappings":"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"}
@@ -6,5 +6,5 @@ import './../types/index.css';
6
6
  import './../fba-utils/index.css';
7
7
  import './index.css';
8
8
  /*! @flatjs/forge MIT @flatbiz/antd */
9
- import e from"@ant-design/icons/es/icons/PlusOutlined";import{classNames as r}from"@dimjs/utils/cjs/class-names";import{hooks as i}from"@wove/react/cjs/hooks";import{a as n,_ as t}from"../_rollupPluginBabelHelpers-c0dbec57.js";import{isPlainObject as a}from"@dimjs/lang/cjs/is-plain-object";import{extend as o}from"@dimjs/utils/cjs/extend";import{isUndefinedOrNull as s,toArray as l,openNewWindow as u}from"@flatbiz/utils";import{message as d,Upload as c,Image as p,Button as f}from"antd";import{useState as m,useMemo as v,Fragment as g,cloneElement as h}from"react";import{flushSync as j}from"react-dom";import{ButtonWrapper as x}from"../button-wrapper/index.js";import{fbaHooks as y}from"../fba-hooks/index.js";import{jsxs as w,jsx as C}from"react/jsx-runtime";import"@ant-design/icons/es/icons/LoadingOutlined";import"@dimjs/lang/cjs/is-promise";import"../index-83bede1b.js";import"antd/es/locale/en_US";import"antd/es/locale/zh_CN";import"dayjs";import"dayjs/locale/en";import"dayjs/locale/zh-cn";import"dayjs/plugin/advancedFormat";import"dayjs/plugin/customParseFormat";import"dayjs/plugin/localeData";import"dayjs/plugin/utc";import"dayjs/plugin/weekday";import"dayjs/plugin/weekOfYear";import"dayjs/plugin/weekYear";import"../fba-utils/index.js";import"@dimjs/lang/cjs/is-array";import"@dimjs/model";import"../use-responsive-point-21b8c601.js";var b=function e(r){return new Promise((function(e,i){var n=new FileReader;n.readAsDataURL(r);n.onload=function(){return e(n.result)};n.onerror=function(e){return i(e)}}))};var z=["onChange","onUploadError","value","triggerText","limitHidden","autoSubmit","imagePreviewSwitch","imagePreviewAccept","extraOperate"];var O=function e(f){var O=f.onChange,T=f.onUploadError,L=f.value,k=f.triggerText,D=f.limitHidden,R=f.autoSubmit,U=f.imagePreviewSwitch,N=f.imagePreviewAccept,S=f.extraOperate,A=n(f,z);var E=s(N)?["png","jpg","jpeg","gif"]:N;var F=m(),_=F[0],H=F[1];var q=m(),B=q[0],I=q[1];var Y=o({uid:"uid",name:"name",url:"url",size:"size"},f.fieldNames);var M=v((function(){return s(L)?undefined:l(L)}),[L]);y.useEffectCustom((function(){var e=(B==null?void 0:B.filter((function(e){return e["status"]==="error"})))||[];var r=[];M==null||M.forEach((function(e){if(e["lastModified"]){r.push(e)}else{r.push({uid:e[Y.uid],name:e[Y.name],url:e[Y.url],size:e[Y.size],responseData:e["responseData"],status:"done",isOriginal:true})}}));if(e.length>0){var i=e.map((function(e){return{uid:e.uid,name:e.name,status:"error",isOriginal:true,response:e["response"]}}));r=r.concat(i)}I(r)}),[Y.name,Y.uid,Y.url,M]);var V=function e(r){var i=[];var n=false;r.forEach((function(e){if(e["isOriginal"]){if(e["status"]!=="error"){var r;var o=(r={},r[Y.uid]=e.uid,r[Y.name]=e.name,r[Y.url]=e.url,r);if(!s(e.size)){o[Y.size]=e.size}if(e["responseData"]){o.responseData=e["responseData"]}i.push(o)}}else if(a(e.response)){if(e.response.code==="0000"){var l;var u=e.response.data;var c=(f.onRequestResultAdapter==null?void 0:f.onRequestResultAdapter(u))||u;var p=(l={},l[Y.uid]=c[Y.uid]||e.uid,l[Y.name]=c[Y.name]||e.name,l[Y.url]=c[Y.url],l);if(!s(c[Y.size])){p[Y.size]=c[Y.size]}i.push(t({},p,{responseData:u}))}else{var m=e.response.message||"上传失败";n=true;e.status="error";e.response=e.response.message||"上传失败";if(T){T==null||T(m)}else{void d.error("上传操作失败...")}}}}));if(n){I([].concat(r))}O==null||O(i)};var G=i.useCallbackRef((function(e){var r=e.fileList;if(e.file.status==="done"){var i=[].concat(e.fileList);var n=i.filter((function(e){return e.status==="done"||e["isOriginal"]}));var t=n.length===i.length;if(t){V(i)}j((function(){return I(i)}));return}else if(e.file.status==="removed"){var a=e.file.uid;var o=M!==undefined?[].concat(M):[];var s=o.findIndex((function(e){var r=e[Y.uid]||e.uid;return r===a}));if(s>=0){o.splice(s,1)}O==null||O(o)}else if(e.file.status==="error"){if(T){T()}else{void d.error("上传操作失败...")}}I([].concat(r));f.onUploadChange==null||f.onUploadChange(e)}));var J=v((function(){if(A.maxCount===undefined||!D)return false;if(A.maxCount===0)return true;if(B&&B.length>=A.maxCount)return true;return false}),[D,A.maxCount,B]);var K=function e(r,i){if(R===false){var n=A.maxCount;var t=[].concat(M||[],i);var a=[].concat(B||[],i);if(n!==undefined&&n!==null){if(t.length>n){t=t.slice(t.length-n);a=a.slice(a.length-n)}}I(a);f.onChange==null||f.onChange(t);return false}return true};var Q=function e(r){return new Promise((function(e,i){var n,t,a;n=r.name||"";t=n.slice(n.lastIndexOf(".")+1);a=E==null?void 0:E.find((function(e){return e.toLocaleLowerCase()===t.toLocaleLowerCase()}));if(a){if(!r.url&&!r.preview){return Promise.resolve(b(r.originFileObj)).then(function(e){try{r.preview=e;return s.call(this)}catch(e){return i(e)}}.bind(this),i)}function s(){H(r.url||r.preview);return o.call(this)}return s.call(this)}else{u(r.url);return o.call(this)}function o(){return e()}}))};return w(g,{children:[C(c,t({beforeUpload:K,onPreview:U?Q:undefined,showUploadList:true,itemRender:function e(i,n,t){if(!S||!S.length)return i;var a=(A.disabled?1:2)+"-"+S.length;return C("div",{className:r("v-upload-list-item-actions-wrapper","v-upload-list-item-extra-actions-"+a),style:{height:"100%"},children:h(i,{children:[i.props.children,C("div",{className:"v-upload-list-item-extra-actions",children:S.map((function(e,r){return C(x,{size:"small",type:"text",icon:e.icon,onClick:e.onClick.bind(null,n,t)},r)}))},"extra-actions")].filter(Boolean)})})}},A,{onChange:G,fileList:B,className:r("v-upload-wrapper",A.className),children:A.disabled||J?null:C(P,{triggerText:k,listType:A.listType,children:f.children})})),_?C(p,{wrapperStyle:{display:"none"},preview:{visible:!!_,onVisibleChange:function e(){return H(undefined)},afterOpenChange:function e(r){return!r&&H("")}},src:_}):null]})};var P=function r(i){if(i.children)return C(g,{children:i.children});if(i.listType==="picture-card"){return w("div",{children:[C(e,{}),C("div",{style:{marginTop:8},children:i.triggerText||"上传图片"})]})}if(i.listType==="picture"){return C(f,{type:"primary",ghost:true,children:i.triggerText||"选择图片上传"})}return C(f,{type:"primary",ghost:true,children:i.triggerText||"选择文件上传"})};export{O as UploadWrapper};
9
+ import e from"@ant-design/icons/es/icons/PlusOutlined";import{classNames as r}from"@dimjs/utils/cjs/class-names";import{hooks as i}from"@wove/react/cjs/hooks";import{a as n,_ as t}from"../_rollupPluginBabelHelpers-c0dbec57.js";import{isPlainObject as a}from"@dimjs/lang/cjs/is-plain-object";import{extend as o}from"@dimjs/utils/cjs/extend";import{isUndefinedOrNull as s,toArray as l,openNewWindow as u}from"@flatbiz/utils";import{message as d,Upload as c,Image as p,Button as f}from"antd";import{useState as m,useMemo as v,Fragment as g,cloneElement as h}from"react";import{flushSync as j}from"react-dom";import{ButtonWrapper as x}from"../button-wrapper/index.js";import{fbaHooks as y}from"../fba-hooks/index.js";import{jsxs as w,jsx as C}from"react/jsx-runtime";import"@ant-design/icons/es/icons/LoadingOutlined";import"@dimjs/lang/cjs/is-promise";import"../index-83bede1b.js";import"antd/es/locale/en_US";import"antd/es/locale/zh_CN";import"dayjs";import"dayjs/locale/en";import"dayjs/locale/zh-cn";import"dayjs/plugin/advancedFormat";import"dayjs/plugin/customParseFormat";import"dayjs/plugin/localeData";import"dayjs/plugin/utc";import"dayjs/plugin/weekday";import"dayjs/plugin/weekOfYear";import"dayjs/plugin/weekYear";import"../fba-utils/index.js";import"@dimjs/lang/cjs/is-array";import"@dimjs/model";import"../use-responsive-point-21b8c601.js";var b=function e(r){return new Promise((function(e,i){var n=new FileReader;n.readAsDataURL(r);n.onload=function(){return e(n.result)};n.onerror=function(e){return i(e)}}))};var z=["onChange","onUploadError","value","triggerText","limitHidden","autoSubmit","imagePreviewSwitch","imagePreviewAccept","extraOperate"];var O=function e(f){var O=f.onChange,T=f.onUploadError,L=f.value,k=f.triggerText,D=f.limitHidden,R=f.autoSubmit,U=f.imagePreviewSwitch,N=f.imagePreviewAccept,S=f.extraOperate,A=n(f,z);var E=s(N)?["png","jpg","jpeg","gif","heic","heif"]:N;var F=m(),_=F[0],H=F[1];var q=m(),B=q[0],I=q[1];var Y=o({uid:"uid",name:"name",url:"url",size:"size"},f.fieldNames);var M=v((function(){return s(L)?undefined:l(L)}),[L]);y.useEffectCustom((function(){var e=(B==null?void 0:B.filter((function(e){return e["status"]==="error"})))||[];var r=[];M==null||M.forEach((function(e){if(e["lastModified"]){r.push(e)}else{r.push({uid:e[Y.uid],name:e[Y.name],url:e[Y.url],size:e[Y.size],responseData:e["responseData"],status:"done",isOriginal:true})}}));if(e.length>0){var i=e.map((function(e){return{uid:e.uid,name:e.name,status:"error",isOriginal:true,response:e["response"]}}));r=r.concat(i)}I(r)}),[Y.name,Y.uid,Y.url,M]);var V=function e(r){var i=[];var n=false;r.forEach((function(e){if(e["isOriginal"]){if(e["status"]!=="error"){var r;var o=(r={},r[Y.uid]=e.uid,r[Y.name]=e.name,r[Y.url]=e.url,r);if(!s(e.size)){o[Y.size]=e.size}if(e["responseData"]){o.responseData=e["responseData"]}i.push(o)}}else if(a(e.response)){if(e.response.code==="0000"){var l;var u=e.response.data;var c=(f.onRequestResultAdapter==null?void 0:f.onRequestResultAdapter(u))||u;var p=(l={},l[Y.uid]=c[Y.uid]||e.uid,l[Y.name]=c[Y.name]||e.name,l[Y.url]=c[Y.url],l);if(!s(c[Y.size])){p[Y.size]=c[Y.size]}i.push(t({},p,{responseData:u}))}else{var m=e.response.message||"上传失败";n=true;e.status="error";e.response=e.response.message||"上传失败";if(T){T==null||T(m)}else{void d.error("上传操作失败...")}}}}));if(n){I([].concat(r))}O==null||O(i)};var G=i.useCallbackRef((function(e){var r=e.fileList;if(e.file.status==="done"){var i=[].concat(e.fileList);var n=i.filter((function(e){return e.status==="done"||e["isOriginal"]}));var t=n.length===i.length;if(t){V(i)}j((function(){return I(i)}));return}else if(e.file.status==="removed"){var a=e.file.uid;var o=M!==undefined?[].concat(M):[];var s=o.findIndex((function(e){var r=e[Y.uid]||e.uid;return r===a}));if(s>=0){o.splice(s,1)}O==null||O(o)}else if(e.file.status==="error"){if(T){T()}else{void d.error("上传操作失败...")}}I([].concat(r));f.onUploadChange==null||f.onUploadChange(e)}));var J=v((function(){if(A.maxCount===undefined||!D)return false;if(A.maxCount===0)return true;if(B&&B.length>=A.maxCount)return true;return false}),[D,A.maxCount,B]);var K=function e(r,i){if(R===false){var n=A.maxCount;var t=[].concat(M||[],i);var a=[].concat(B||[],i);if(n!==undefined&&n!==null){if(t.length>n){t=t.slice(t.length-n);a=a.slice(a.length-n)}}I(a);f.onChange==null||f.onChange(t);return false}return true};var Q=function e(r){return new Promise((function(e,i){var n,t,a;n=r.name||"";t=n.slice(n.lastIndexOf(".")+1);a=E==null?void 0:E.find((function(e){return e.toLocaleLowerCase()===t.toLocaleLowerCase()}));if(a){if(!r.url&&!r.preview){return Promise.resolve(b(r.originFileObj)).then(function(e){try{r.preview=e;return s.call(this)}catch(e){return i(e)}}.bind(this),i)}function s(){H(r.url||r.preview);return o.call(this)}return s.call(this)}else{u(r.url);return o.call(this)}function o(){return e()}}))};return w(g,{children:[C(c,t({beforeUpload:K,onPreview:U?Q:undefined,showUploadList:true,itemRender:function e(i,n,t){if(!S||!S.length)return i;var a=(A.disabled?1:2)+"-"+S.length;return C("div",{className:r("v-upload-list-item-actions-wrapper","v-upload-list-item-extra-actions-"+a),style:{height:"100%"},children:h(i,{children:[i.props.children,C("div",{className:"v-upload-list-item-extra-actions",children:S.map((function(e,r){return C(x,{size:"small",type:"text",icon:e.icon,onClick:e.onClick.bind(null,n,t)},r)}))},"extra-actions")].filter(Boolean)})})}},A,{onChange:G,fileList:B,className:r("v-upload-wrapper",A.className),children:A.disabled||J?null:C(P,{triggerText:k,listType:A.listType,children:f.children})})),_?C(p,{wrapperStyle:{display:"none"},preview:{visible:!!_,onVisibleChange:function e(){return H(undefined)},afterOpenChange:function e(r){return!r&&H("")}},src:_}):null]})};var P=function r(i){if(i.children)return C(g,{children:i.children});if(i.listType==="picture-card"){return w("div",{children:[C(e,{}),C("div",{style:{marginTop:8},children:i.triggerText||"上传图片"})]})}if(i.listType==="picture"){return C(f,{type:"primary",ghost:true,children:i.triggerText||"选择图片上传"})}return C(f,{type:"primary",ghost:true,children:i.triggerText||"选择文件上传"})};export{O as UploadWrapper};
10
10
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["@flatbiz/antd/src/upload-wrapper/utils.ts","@flatbiz/antd/src/upload-wrapper/upload-wrapper.tsx"],"sourcesContent":["export const getBase64 = (file): Promise<string> =>\n new Promise((resolve, reject) => {\n const reader = new FileReader();\n reader.readAsDataURL(file);\n reader.onload = () => resolve(reader.result as string);\n reader.onerror = (error) => reject(error);\n });\n","import { PlusOutlined } from '@ant-design/icons';\nimport { isPlainObject } from '@dimjs/lang';\nimport { classNames, extend } from '@dimjs/utils';\nimport type { TAny, TPlainObject } from '@flatbiz/utils';\nimport { isUndefinedOrNull, openNewWindow, toArray } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport type { UploadProps } from 'antd';\nimport { Button, Image, message, Upload } from 'antd';\nimport type { UploadChangeParam } from 'antd/lib/upload';\nimport type { UploadFile, UploadListType } from 'antd/lib/upload/interface';\nimport type { ReactElement, ReactNode } from 'react';\nimport { cloneElement, Fragment, useMemo, useState } from 'react';\nimport { flushSync } from 'react-dom';\nimport { ButtonWrapper } from '../button-wrapper';\nimport { fbaHooks } from '../fba-hooks';\nimport './style.less';\nimport { getBase64 } from './utils';\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[] | 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 size?: string | number;\n };\n /**\n * 接口响应数据适配器,如果配置了fieldNames,适配器返回值会再进过fieldNames转换\n */\n onRequestResultAdapter?: (respData: TAny) => TPlainObject;\n /** 操作触发显示文本 */\n triggerText?: string;\n /** 超过maxCount 隐藏上传入口 */\n limitHidden?: boolean;\n /**\n * 自动提交,默认:true\n * ```\n * 1. 自定义beforeUpload配置后 autoSubmit 失效\n * ```\n */\n autoSubmit?: boolean;\n /** 图片预览开关, 重写 onPreview 方法后失效 */\n imagePreviewSwitch?: boolean;\n /** 图片预览文件类型,默认:['png', 'jpg', 'jpeg', 'gif'] */\n imagePreviewAccept?: string[];\n /**\n * 配置文件额外操作\n * ```\n * 额外操作超过两项后,listType为 picture-card、picture-circle 时会出现显示异常,需要自行修改覆盖样式\n * ```\n */\n extraOperate?: {\n icon: ReactElement;\n onClick: (file: UploadFile, fileList: UploadFile[], e) => void;\n }[];\n} & Omit<UploadProps, 'onChange' | 'fileList'>;\n\n/**\n * 文件上传\n * ```\n * demo: https://fex.qa.tcshuke.com/docs/admin/main/file/upload\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 * 5. 回填数据结构\n * [{\n * uid: '唯一值',\n * name(非必填): 'image.png',\n * url: 'https://zos.alipayobjects.com/rmsportal/jkjgkEfvpUPVyRjUImniVslZfWPnJuuZ.png',\n * }]\n * 1. 其中 uid、name、url 可为其他命名,通过 fieldNames 进行映射即可,\n * 2. 其他需要的字段可在对象中添加 responseData 对象\n * 例如:\n * [{\n * uid: '唯一值',\n * name(非必填): 'image.png',\n * url: 'https://zos.alipayobjects.com/rmsportal/jkjgkEfvpUPVyRjUImniVslZfWPnJuuZ.png',\n * responseData: { 'xx':'xxx' }\n * }]\n * ```\n *\n */\nexport const UploadWrapper = (props: UploadWrapperProps) => {\n const {\n onChange,\n onUploadError,\n value,\n triggerText,\n limitHidden,\n autoSubmit,\n imagePreviewSwitch,\n imagePreviewAccept,\n extraOperate,\n ...otherProps\n } = props;\n const imagePreviewAcceptFt = isUndefinedOrNull(imagePreviewAccept)\n ? ['png', 'jpg', 'jpeg', 'gif']\n : imagePreviewAccept;\n const [previewImage, setPreviewImage] = useState<string>();\n const [uploadList, setUploadList] = useState<UploadWrapperFileItem[]>();\n const fieldNames = extend(\n {\n uid: 'uid',\n name: 'name',\n url: 'url',\n size: 'size',\n },\n props.fieldNames,\n );\n\n const valueList = useMemo(\n () => (isUndefinedOrNull(value) ? undefined : toArray<TPlainObject>(value)),\n [value],\n );\n\n fbaHooks.useEffectCustom(() => {\n const errorList = uploadList?.filter((item) => item['status'] === 'error') || [];\n let newList = [] as TAny[];\n valueList?.forEach((item) => {\n // 判断item 为 File类型\n if (item['lastModified']) {\n newList.push(item);\n } else {\n newList.push({\n uid: item[fieldNames.uid],\n name: item[fieldNames.name],\n url: item[fieldNames.url],\n size: item[fieldNames.size],\n responseData: item['responseData'],\n status: 'done',\n isOriginal: true,\n });\n }\n });\n if (errorList.length > 0) {\n const newErrorList = errorList.map((item) => {\n return {\n uid: item.uid,\n name: item.name,\n status: 'error',\n isOriginal: true,\n response: item['response'],\n };\n }) as TAny[];\n newList = newList.concat(newErrorList);\n }\n setUploadList(newList);\n }, [fieldNames.name, fieldNames.uid, fieldNames.url, valueList]);\n\n const handleResponse = (fileList: UploadFile<TAny>[]) => {\n const newFileList: TAny[] = [];\n let hasError = false;\n fileList.forEach((item) => {\n if (item['isOriginal']) {\n if (item['status'] !== 'error') {\n const target: TPlainObject = {\n [fieldNames.uid]: item.uid,\n [fieldNames.name]: item.name,\n [fieldNames.url]: item.url,\n };\n if (!isUndefinedOrNull(item.size)) {\n target[fieldNames.size] = item.size;\n }\n if (item['responseData']) {\n target.responseData = item['responseData'];\n }\n newFileList.push(target);\n }\n } else if (isPlainObject(item.response)) {\n if (item.response.code === '0000') {\n const respData = item.response.data;\n const result = (props.onRequestResultAdapter?.(respData) || respData) as TPlainObject;\n const target: TPlainObject = {\n [fieldNames.uid]: result[fieldNames.uid] || item.uid,\n [fieldNames.name]: result[fieldNames.name] || item.name,\n [fieldNames.url]: result[fieldNames.url],\n };\n if (!isUndefinedOrNull(result[fieldNames.size])) {\n target[fieldNames.size] = result[fieldNames.size];\n }\n newFileList.push({\n ...target,\n responseData: respData,\n });\n } else {\n const errorMsg = item.response.message || '上传失败';\n hasError = true;\n item.status = 'error';\n item.response = item.response.message || '上传失败';\n if (onUploadError) {\n onUploadError?.(errorMsg);\n } else {\n void message.error('上传操作失败...');\n }\n }\n }\n });\n if (hasError) {\n setUploadList([...fileList] as UploadWrapperFileItem[]);\n }\n onChange?.(newFileList);\n };\n\n const onUploadChange = hooks.useCallbackRef((info) => {\n const fileList = info.fileList as TPlainObject[];\n if (info.file.status === 'done') {\n const newFileList = [...info.fileList];\n const donwList = newFileList.filter((item) => item.status === 'done' || item['isOriginal']);\n\n const allDone = donwList.length === newFileList.length;\n if (allDone) {\n handleResponse(newFileList);\n }\n flushSync(() => setUploadList(newFileList));\n return;\n } else if (info.file.status === 'removed') {\n const uid = info.file.uid;\n const targetList = valueList !== undefined ? [...valueList] : [];\n const targetIndex = targetList.findIndex((item) => {\n const tempUid = item[fieldNames.uid] || item.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 const hiddenEmtry = useMemo(() => {\n if (otherProps.maxCount === undefined || !limitHidden) return false;\n if (otherProps.maxCount === 0) return true;\n if (uploadList && uploadList.length >= otherProps.maxCount) return true;\n return false;\n }, [limitHidden, otherProps.maxCount, uploadList]);\n\n const beforeUpload = (_file, fileList) => {\n if (autoSubmit === false) {\n const maxCount = otherProps.maxCount;\n let mergeList = [...(valueList || []), ...fileList];\n let uploadListMerge = [...(uploadList || []), ...fileList];\n if (maxCount !== undefined && maxCount !== null) {\n if (mergeList.length > maxCount) {\n mergeList = mergeList.slice(mergeList.length - maxCount);\n uploadListMerge = uploadListMerge.slice(uploadListMerge.length - maxCount);\n }\n }\n setUploadList(uploadListMerge);\n props.onChange?.(mergeList);\n return false;\n }\n return true;\n };\n\n const handlePreview = async (file: UploadFile) => {\n const name = file.name || '';\n const extension = name.slice(name.lastIndexOf('.') + 1);\n const acceptTarget = imagePreviewAcceptFt?.find((item) => {\n return item.toLocaleLowerCase() === extension.toLocaleLowerCase();\n });\n if (acceptTarget) {\n if (!file.url && !file.preview) {\n file.preview = await getBase64(file.originFileObj);\n }\n setPreviewImage(file.url || (file.preview as string));\n } else {\n openNewWindow(file.url as string);\n }\n };\n\n return (\n <Fragment>\n <Upload\n beforeUpload={beforeUpload}\n onPreview={imagePreviewSwitch ? handlePreview : undefined}\n showUploadList\n itemRender={(originNode, file, fileList) => {\n if (!extraOperate || !extraOperate.length) return originNode;\n const countSign = `${otherProps.disabled ? 1 : 2}-${extraOperate.length}`;\n return (\n <div\n className={classNames(\n 'v-upload-list-item-actions-wrapper',\n `v-upload-list-item-extra-actions-${countSign}`,\n )}\n style={{ height: '100%' }}\n >\n {cloneElement(originNode, {\n children: [\n originNode.props.children,\n <div key=\"extra-actions\" className=\"v-upload-list-item-extra-actions\">\n {extraOperate.map((item, index) => {\n return (\n <ButtonWrapper\n key={index}\n size=\"small\"\n type=\"text\"\n icon={item.icon}\n onClick={item.onClick.bind(null, file, fileList)}\n />\n );\n })}\n </div>,\n ].filter(Boolean),\n })}\n </div>\n );\n }}\n {...otherProps}\n onChange={onUploadChange}\n fileList={uploadList}\n className={classNames('v-upload-wrapper', otherProps.className)}\n >\n {otherProps.disabled || hiddenEmtry ? null : (\n <UploadTrigger triggerText={triggerText} listType={otherProps.listType}>\n {props.children}\n </UploadTrigger>\n )}\n </Upload>\n {previewImage ? (\n <Image\n wrapperStyle={{ display: 'none' }}\n preview={{\n visible: !!previewImage,\n onVisibleChange: () => setPreviewImage(undefined),\n afterOpenChange: (visible) => !visible && setPreviewImage(''),\n }}\n src={previewImage}\n />\n ) : null}\n </Fragment>\n );\n};\n\nconst UploadTrigger = (props: {\n listType?: UploadListType;\n children?: ReactNode | ReactNode[];\n triggerText?: string;\n}) => {\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 }}>{props.triggerText || '上传图片'}</div>\n </div>\n );\n }\n if (props.listType === 'picture') {\n return (\n <Button type=\"primary\" ghost>\n {props.triggerText || '选择图片上传'}\n </Button>\n );\n }\n return (\n <Button type=\"primary\" ghost>\n {props.triggerText || '选择文件上传'}\n </Button>\n );\n};\n"],"names":["getBase64","file","Promise","resolve","reject","reader","FileReader","readAsDataURL","onload","result","onerror","error","UploadWrapper","props","onChange","onUploadError","value","triggerText","limitHidden","autoSubmit","imagePreviewSwitch","imagePreviewAccept","extraOperate","otherProps","_objectWithoutPropertiesLoose","_excluded","imagePreviewAcceptFt","isUndefinedOrNull","_useState","useState","previewImage","setPreviewImage","_useState2","uploadList","setUploadList","fieldNames","_extend","uid","name","url","size","valueList","useMemo","undefined","toArray","fbaHooks","useEffectCustom","errorList","filter","item","newList","forEach","push","responseData","status","isOriginal","length","newErrorList","map","response","concat","handleResponse","fileList","newFileList","hasError","_target","target","_isPlainObject","code","_target3","respData","data","onRequestResultAdapter","_extends","errorMsg","message","onUploadChange","_hooks","useCallbackRef","info","donwList","allDone","flushSync","targetList","targetIndex","findIndex","tempUid","splice","hiddenEmtry","maxCount","beforeUpload","_file","mergeList","uploadListMerge","slice","handlePreview","$return","$error","extension","acceptTarget","lastIndexOf","find","toLocaleLowerCase","preview","originFileObj","then","$await_3","$If_2","call","this","$boundEx","bind","$If_1","openNewWindow","_jsxs","Fragment","children","_jsx","Upload","onPreview","showUploadList","itemRender","originNode","countSign","disabled","className","_classNames","style","height","cloneElement","index","ButtonWrapper","type","icon","onClick","Boolean","UploadTrigger","listType","Image","wrapperStyle","display","visible","onVisibleChange","afterOpenChange","src","_PlusOutlined","marginTop","Button","ghost"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["@flatbiz/antd/src/upload-wrapper/utils.ts","@flatbiz/antd/src/upload-wrapper/upload-wrapper.tsx"],"sourcesContent":["export const getBase64 = (file): Promise<string> =>\n new Promise((resolve, reject) => {\n const reader = new FileReader();\n reader.readAsDataURL(file);\n reader.onload = () => resolve(reader.result as string);\n reader.onerror = (error) => reject(error);\n });\n","import { PlusOutlined } from '@ant-design/icons';\nimport { isPlainObject } from '@dimjs/lang';\nimport { classNames, extend } from '@dimjs/utils';\nimport type { TAny, TPlainObject } from '@flatbiz/utils';\nimport { isUndefinedOrNull, openNewWindow, toArray } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport type { UploadProps } from 'antd';\nimport { Button, Image, message, Upload } from 'antd';\nimport type { UploadChangeParam } from 'antd/lib/upload';\nimport type { UploadFile, UploadListType } from 'antd/lib/upload/interface';\nimport type { ReactElement, ReactNode } from 'react';\nimport { cloneElement, Fragment, useMemo, useState } from 'react';\nimport { flushSync } from 'react-dom';\nimport { ButtonWrapper } from '../button-wrapper';\nimport { fbaHooks } from '../fba-hooks';\nimport './style.less';\nimport { getBase64 } from './utils';\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[] | 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 size?: string | number;\n };\n /**\n * 接口响应数据适配器,如果配置了fieldNames,适配器返回值会再进过fieldNames转换\n */\n onRequestResultAdapter?: (respData: TAny) => TPlainObject;\n /** 操作触发显示文本 */\n triggerText?: string;\n /** 超过maxCount 隐藏上传入口 */\n limitHidden?: boolean;\n /**\n * 自动提交,默认:true\n * ```\n * 1. 自定义beforeUpload配置后 autoSubmit 失效\n * ```\n */\n autoSubmit?: boolean;\n /** 图片预览开关, 重写 onPreview 方法后失效 */\n imagePreviewSwitch?: boolean;\n /** 图片预览文件类型,默认:['png', 'jpg', 'jpeg', 'gif', 'heic', 'heif'] */\n imagePreviewAccept?: string[];\n /**\n * 配置文件额外操作\n * ```\n * 额外操作超过两项后,listType为 picture-card、picture-circle 时会出现显示异常,需要自行修改覆盖样式\n * ```\n */\n extraOperate?: {\n icon: ReactElement;\n onClick: (file: UploadFile, fileList: UploadFile[], e) => void;\n }[];\n} & Omit<UploadProps, 'onChange' | 'fileList'>;\n\n/**\n * 文件上传\n * ```\n * demo: https://fex.qa.tcshuke.com/docs/admin/main/file/upload\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 * 5. 回填数据结构\n * [{\n * uid: '唯一值',\n * name(非必填): 'image.png',\n * url: 'https://zos.alipayobjects.com/rmsportal/jkjgkEfvpUPVyRjUImniVslZfWPnJuuZ.png',\n * }]\n * 1. 其中 uid、name、url 可为其他命名,通过 fieldNames 进行映射即可,\n * 2. 其他需要的字段可在对象中添加 responseData 对象\n * 例如:\n * [{\n * uid: '唯一值',\n * name(非必填): 'image.png',\n * url: 'https://zos.alipayobjects.com/rmsportal/jkjgkEfvpUPVyRjUImniVslZfWPnJuuZ.png',\n * responseData: { 'xx':'xxx' }\n * }]\n * ```\n *\n */\nexport const UploadWrapper = (props: UploadWrapperProps) => {\n const {\n onChange,\n onUploadError,\n value,\n triggerText,\n limitHidden,\n autoSubmit,\n imagePreviewSwitch,\n imagePreviewAccept,\n extraOperate,\n ...otherProps\n } = props;\n const imagePreviewAcceptFt = isUndefinedOrNull(imagePreviewAccept)\n ? ['png', 'jpg', 'jpeg', 'gif', 'heic', 'heif']\n : imagePreviewAccept;\n const [previewImage, setPreviewImage] = useState<string>();\n const [uploadList, setUploadList] = useState<UploadWrapperFileItem[]>();\n const fieldNames = extend(\n {\n uid: 'uid',\n name: 'name',\n url: 'url',\n size: 'size',\n },\n props.fieldNames,\n );\n\n const valueList = useMemo(\n () => (isUndefinedOrNull(value) ? undefined : toArray<TPlainObject>(value)),\n [value],\n );\n\n fbaHooks.useEffectCustom(() => {\n const errorList = uploadList?.filter((item) => item['status'] === 'error') || [];\n let newList = [] as TAny[];\n valueList?.forEach((item) => {\n // 判断item 为 File类型\n if (item['lastModified']) {\n newList.push(item);\n } else {\n newList.push({\n uid: item[fieldNames.uid],\n name: item[fieldNames.name],\n url: item[fieldNames.url],\n size: item[fieldNames.size],\n responseData: item['responseData'],\n status: 'done',\n isOriginal: true,\n });\n }\n });\n if (errorList.length > 0) {\n const newErrorList = errorList.map((item) => {\n return {\n uid: item.uid,\n name: item.name,\n status: 'error',\n isOriginal: true,\n response: item['response'],\n };\n }) as TAny[];\n newList = newList.concat(newErrorList);\n }\n setUploadList(newList);\n }, [fieldNames.name, fieldNames.uid, fieldNames.url, valueList]);\n\n const handleResponse = (fileList: UploadFile<TAny>[]) => {\n const newFileList: TAny[] = [];\n let hasError = false;\n fileList.forEach((item) => {\n if (item['isOriginal']) {\n if (item['status'] !== 'error') {\n const target: TPlainObject = {\n [fieldNames.uid]: item.uid,\n [fieldNames.name]: item.name,\n [fieldNames.url]: item.url,\n };\n if (!isUndefinedOrNull(item.size)) {\n target[fieldNames.size] = item.size;\n }\n if (item['responseData']) {\n target.responseData = item['responseData'];\n }\n newFileList.push(target);\n }\n } else if (isPlainObject(item.response)) {\n if (item.response.code === '0000') {\n const respData = item.response.data;\n const result = (props.onRequestResultAdapter?.(respData) || respData) as TPlainObject;\n const target: TPlainObject = {\n [fieldNames.uid]: result[fieldNames.uid] || item.uid,\n [fieldNames.name]: result[fieldNames.name] || item.name,\n [fieldNames.url]: result[fieldNames.url],\n };\n if (!isUndefinedOrNull(result[fieldNames.size])) {\n target[fieldNames.size] = result[fieldNames.size];\n }\n newFileList.push({\n ...target,\n responseData: respData,\n });\n } else {\n const errorMsg = item.response.message || '上传失败';\n hasError = true;\n item.status = 'error';\n item.response = item.response.message || '上传失败';\n if (onUploadError) {\n onUploadError?.(errorMsg);\n } else {\n void message.error('上传操作失败...');\n }\n }\n }\n });\n if (hasError) {\n setUploadList([...fileList] as UploadWrapperFileItem[]);\n }\n onChange?.(newFileList);\n };\n\n const onUploadChange = hooks.useCallbackRef((info) => {\n const fileList = info.fileList as TPlainObject[];\n if (info.file.status === 'done') {\n const newFileList = [...info.fileList];\n const donwList = newFileList.filter((item) => item.status === 'done' || item['isOriginal']);\n\n const allDone = donwList.length === newFileList.length;\n if (allDone) {\n handleResponse(newFileList);\n }\n flushSync(() => setUploadList(newFileList));\n return;\n } else if (info.file.status === 'removed') {\n const uid = info.file.uid;\n const targetList = valueList !== undefined ? [...valueList] : [];\n const targetIndex = targetList.findIndex((item) => {\n const tempUid = item[fieldNames.uid] || item.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 const hiddenEmtry = useMemo(() => {\n if (otherProps.maxCount === undefined || !limitHidden) return false;\n if (otherProps.maxCount === 0) return true;\n if (uploadList && uploadList.length >= otherProps.maxCount) return true;\n return false;\n }, [limitHidden, otherProps.maxCount, uploadList]);\n\n const beforeUpload = (_file, fileList) => {\n if (autoSubmit === false) {\n const maxCount = otherProps.maxCount;\n let mergeList = [...(valueList || []), ...fileList];\n let uploadListMerge = [...(uploadList || []), ...fileList];\n if (maxCount !== undefined && maxCount !== null) {\n if (mergeList.length > maxCount) {\n mergeList = mergeList.slice(mergeList.length - maxCount);\n uploadListMerge = uploadListMerge.slice(uploadListMerge.length - maxCount);\n }\n }\n setUploadList(uploadListMerge);\n props.onChange?.(mergeList);\n return false;\n }\n return true;\n };\n\n const handlePreview = async (file: UploadFile) => {\n const name = file.name || '';\n const extension = name.slice(name.lastIndexOf('.') + 1);\n const acceptTarget = imagePreviewAcceptFt?.find((item) => {\n return item.toLocaleLowerCase() === extension.toLocaleLowerCase();\n });\n if (acceptTarget) {\n if (!file.url && !file.preview) {\n file.preview = await getBase64(file.originFileObj);\n }\n setPreviewImage(file.url || (file.preview as string));\n } else {\n openNewWindow(file.url as string);\n }\n };\n\n return (\n <Fragment>\n <Upload\n beforeUpload={beforeUpload}\n onPreview={imagePreviewSwitch ? handlePreview : undefined}\n showUploadList\n itemRender={(originNode, file, fileList) => {\n if (!extraOperate || !extraOperate.length) return originNode;\n const countSign = `${otherProps.disabled ? 1 : 2}-${extraOperate.length}`;\n return (\n <div\n className={classNames(\n 'v-upload-list-item-actions-wrapper',\n `v-upload-list-item-extra-actions-${countSign}`,\n )}\n style={{ height: '100%' }}\n >\n {cloneElement(originNode, {\n children: [\n originNode.props.children,\n <div key=\"extra-actions\" className=\"v-upload-list-item-extra-actions\">\n {extraOperate.map((item, index) => {\n return (\n <ButtonWrapper\n key={index}\n size=\"small\"\n type=\"text\"\n icon={item.icon}\n onClick={item.onClick.bind(null, file, fileList)}\n />\n );\n })}\n </div>,\n ].filter(Boolean),\n })}\n </div>\n );\n }}\n {...otherProps}\n onChange={onUploadChange}\n fileList={uploadList}\n className={classNames('v-upload-wrapper', otherProps.className)}\n >\n {otherProps.disabled || hiddenEmtry ? null : (\n <UploadTrigger triggerText={triggerText} listType={otherProps.listType}>\n {props.children}\n </UploadTrigger>\n )}\n </Upload>\n {previewImage ? (\n <Image\n wrapperStyle={{ display: 'none' }}\n preview={{\n visible: !!previewImage,\n onVisibleChange: () => setPreviewImage(undefined),\n afterOpenChange: (visible) => !visible && setPreviewImage(''),\n }}\n src={previewImage}\n />\n ) : null}\n </Fragment>\n );\n};\n\nconst UploadTrigger = (props: {\n listType?: UploadListType;\n children?: ReactNode | ReactNode[];\n triggerText?: string;\n}) => {\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 }}>{props.triggerText || '上传图片'}</div>\n </div>\n );\n }\n if (props.listType === 'picture') {\n return (\n <Button type=\"primary\" ghost>\n {props.triggerText || '选择图片上传'}\n </Button>\n );\n }\n return (\n <Button type=\"primary\" ghost>\n {props.triggerText || '选择文件上传'}\n </Button>\n );\n};\n"],"names":["getBase64","file","Promise","resolve","reject","reader","FileReader","readAsDataURL","onload","result","onerror","error","UploadWrapper","props","onChange","onUploadError","value","triggerText","limitHidden","autoSubmit","imagePreviewSwitch","imagePreviewAccept","extraOperate","otherProps","_objectWithoutPropertiesLoose","_excluded","imagePreviewAcceptFt","isUndefinedOrNull","_useState","useState","previewImage","setPreviewImage","_useState2","uploadList","setUploadList","fieldNames","_extend","uid","name","url","size","valueList","useMemo","undefined","toArray","fbaHooks","useEffectCustom","errorList","filter","item","newList","forEach","push","responseData","status","isOriginal","length","newErrorList","map","response","concat","handleResponse","fileList","newFileList","hasError","_target","target","_isPlainObject","code","_target3","respData","data","onRequestResultAdapter","_extends","errorMsg","message","onUploadChange","_hooks","useCallbackRef","info","donwList","allDone","flushSync","targetList","targetIndex","findIndex","tempUid","splice","hiddenEmtry","maxCount","beforeUpload","_file","mergeList","uploadListMerge","slice","handlePreview","$return","$error","extension","acceptTarget","lastIndexOf","find","toLocaleLowerCase","preview","originFileObj","then","$await_3","$If_2","call","this","$boundEx","bind","$If_1","openNewWindow","_jsxs","Fragment","children","_jsx","Upload","onPreview","showUploadList","itemRender","originNode","countSign","disabled","className","_classNames","style","height","cloneElement","index","ButtonWrapper","type","icon","onClick","Boolean","UploadTrigger","listType","Image","wrapperStyle","display","visible","onVisibleChange","afterOpenChange","src","_PlusOutlined","marginTop","Button","ghost"],"mappings":"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"}
package/index.d.ts CHANGED
@@ -556,6 +556,8 @@ export interface ButtonOperateItem extends ButtonWrapperProps {
556
556
  /** 是否折叠合拢 */
557
557
  isFold?: boolean;
558
558
  confirmModalProps?: DialogModalProps;
559
+ /** 是否显示按钮,优先级高于 hidden */
560
+ show?: boolean;
559
561
  }
560
562
  export interface ButtonOperateProps {
561
563
  className?: string;
@@ -2031,7 +2033,7 @@ export type UploadWrapperProps<T extends TPlainObject = TPlainObject> = {
2031
2033
  autoSubmit?: boolean;
2032
2034
  /** 图片预览开关, 重写 onPreview 方法后失效 */
2033
2035
  imagePreviewSwitch?: boolean;
2034
- /** 图片预览文件类型,默认:['png', 'jpg', 'jpeg', 'gif'] */
2036
+ /** 图片预览文件类型,默认:['png', 'jpg', 'jpeg', 'gif', 'heic', 'heif'] */
2035
2037
  imagePreviewAccept?: string[];
2036
2038
  /**
2037
2039
  * 配置文件额外操作
@@ -6348,6 +6350,12 @@ export type TreeModalSelectorProps = Omit<TreeModalProps, "children" | "forceRen
6348
6350
  disabled?: boolean;
6349
6351
  allowClear?: boolean;
6350
6352
  };
6353
+ export type TreeModalSelectorApi = {
6354
+ getDataSourceMap: () => {
6355
+ treeDataList: TPlainObject[];
6356
+ dataSourceMap: TPlainObject;
6357
+ };
6358
+ };
6351
6359
  /**
6352
6360
  * 树弹框选择器
6353
6361
  * ```
@@ -6355,7 +6363,23 @@ export type TreeModalSelectorProps = Omit<TreeModalProps, "children" | "forceRen
6355
6363
  * 2. demo: https://fex.qa.tcshuke.com/docs/admin/main/selector/tree
6356
6364
  * ```
6357
6365
  */
6358
- export declare const TreeModalSelector: (props: TreeModalSelectorProps) => import("react/jsx-runtime").JSX.Element;
6366
+ export declare const TreeModalSelector: import("react").ForwardRefExoticComponent<Omit<TreeModalProps, "children" | "onChange" | "forceRender"> & {
6367
+ placeholder?: string;
6368
+ /**
6369
+ * 1. 可指定数量
6370
+ * 2. 可设置 responsive,一行自适应显示
6371
+ */
6372
+ maxTagCount?: number | "responsive";
6373
+ /** 是否返回label+value模式 */
6374
+ labelInValue?: boolean;
6375
+ onChange?: (values?: TreeModelSelectItem[] | TreeModelSelectItem) => void;
6376
+ /** 最大选择数量 */
6377
+ maxCount?: number;
6378
+ /** 超过最大选择数量提示文本 */
6379
+ overMaxCountMsg?: string;
6380
+ disabled?: boolean;
6381
+ allowClear?: boolean;
6382
+ } & import("react").RefAttributes<TreeModalSelectorApi>>;
6359
6383
  export type TreeSelectorWrapperValue = string | number | Array<string | number> | TPlainObject<string | number> | Array<TPlainObject<string | number>>;
6360
6384
  export type TreeSelectorServiceConfig = {
6361
6385
  params?: TPlainObject;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@flatbiz/antd",
3
- "version": "4.5.45",
3
+ "version": "4.5.46",
4
4
  "description": "flat-biz ui components",
5
5
  "main": "index.js",
6
6
  "typings": "index.d.ts",