2024-07-12 10:30:05 +08:00
var _ _defProp = Object . defineProperty ;
var _ _defNormalProp = ( obj , key , value ) => key in obj ? _ _defProp ( obj , key , { enumerable : ! 0 , configurable : ! 0 , writable : ! 0 , value } ) : obj [ key ] = value ;
var _ _publicField = ( obj , key , value ) => ( _ _defNormalProp ( obj , typeof key != "symbol" ? key + "" : key , value ) , value ) , _ _accessCheck = ( obj , member , msg ) => {
if ( ! member . has ( obj ) )
throw TypeError ( "Cannot " + msg ) ;
} ;
var _ _privateGet = ( obj , member , getter ) => ( _ _accessCheck ( obj , member , "read from private field" ) , getter ? getter . call ( obj ) : member . get ( obj ) ) , _ _privateAdd = ( obj , member , value ) => {
if ( member . has ( obj ) )
throw TypeError ( "Cannot add the same private member more than once" ) ;
member instanceof WeakSet ? member . add ( obj ) : member . set ( obj , value ) ;
} , _ _privateSet = ( obj , member , value , setter ) => ( _ _accessCheck ( obj , member , "write to private field" ) , setter ? setter . call ( obj , value ) : member . set ( obj , value ) , value ) ;
var _ _privateWrapper = ( obj , member , setter , getter ) => ( {
set _ ( value ) {
_ _privateSet ( obj , member , value , setter ) ;
} ,
get _ ( ) {
return _ _privateGet ( obj , member , getter ) ;
}
} ) ;
import _ from "lodash" ;
import axios from "axios" ;
import React , { useMemo , useEffect , useRef , useState , useCallback , useContext , useLayoutEffect , useId as useId$1 } from "react" ;
import Request from "ff-request" ;
2024-07-19 13:08:18 +08:00
import SparkMD5 from "spark-md5" ;
2024-07-12 10:30:05 +08:00
import { jsx , jsxs , Fragment } from "react/jsx-runtime" ;
import { QuestionOutlined , LoadingOutlined , createFromIconfontCN } from "@ant-design/icons" ;
import cx from "classnames" ;
import { P as PropTypes , N as NProgress } from "./vender-CMS8SASe.js" ;
import Form , { Field , FieldContext } from "rc-field-form" ;
import { notification as notification$1 , Drawer as Drawer$1 , Modal as Modal$1 , Form as Form$1 , ConfigProvider , Input , Button as Button$1 , Breadcrumb , Tree , Pagination , Table , Empty as Empty$1 , Popconfirm , Tooltip , Popover as Popover$1 } from "antd" ;
import update from "immutability-helper" ;
2024-07-19 13:08:18 +08:00
import { useMergedState } from "rc-util" ;
2024-07-12 10:30:05 +08:00
import { useParams , generatePath , Navigate , createBrowserRouter } from "react-router-dom" ;
const Iconfont = ( { type , className , ... props } ) => {
if ( ! ( type != null && type . startsWith ( "icon-" ) ) )
return /* @__PURE__ */ jsx ( QuestionOutlined , { } ) ;
if ( type === "icon-loading" )
return /* @__PURE__ */ jsx ( LoadingOutlined , { className , ... props } ) ;
const Icon = useMemo ( ( ) => createFromIconfontCN ( { scriptUrl : configure . get ( "Common.ICONFONT" , [ ] ) } ) , [ configure . get ( "Common.ICONFONT" ) ] ) ;
return /* @__PURE__ */ jsx ( Icon , { type , className : cx ( "iconfont" , className ) , ... props } ) ;
} , Notification = ( { className , title , content , icon , $close , category , duration = 4.5 } ) => {
const [ api , contextHolder ] = notification$1 . useNotification ( ) ;
return useEffect ( ( ) => {
api [ category || "open" ] ( {
className ,
message : title ,
description : content ,
icon ,
duration ,
onClose : ( ) => $close ( ! 1 )
} ) ;
} , [ title , content , icon ] ) , contextHolder ;
} , Confirm = ( { className , title , content , okText , $close , duration = 5e3 } ) => {
var _a ;
const timeRef = useRef ( ) , [ time , setTime ] = useState ( ) ;
return useEffect ( ( ) => ( time > 0 && ( timeRef . current = setTimeout ( ( ) => {
time <= 1 ? $close ( ) : setTime ( ( time2 ) => time2 - 1 ) ;
} , 1e3 ) ) , ( ) => clearTimeout ( timeRef . current ) ) , [ time ] ) , useEffect ( ( ) => {
setTime ( Math . max ( Math . ceil ( duration / 1e3 ) , 0 ) ) ;
} , [ duration ] ) , /* @__PURE__ */ jsx ( "div" , { className : cx ( "ff-confirm" , className ) , onClick : ( e ) => e . mpEvent . currentTarget . id === e . mpEvent . target . id && $close ( ) , children : /* @__PURE__ */ jsxs ( "div" , { className : "ff-confirm-container" , children : [
/* @__PURE__ */ jsx ( "div" , { className : "ff-confirm-title" , children : title } ) ,
/* @__PURE__ */ jsx ( "div" , { className : "ff-confirm-content" , children : content } ) ,
/* @__PURE__ */ jsxs ( "div" , { className : "ff-confirm-operations" , children : [
/* @__PURE__ */ jsxs ( "div" , { className : "ff-confirm-cancel" , onClick : ( ) => $close ( ! 1 ) , children : [
"取消 (" ,
time ,
")"
] } ) ,
React . isValidElement ( okText ) ? React . cloneElement ( okText , {
onClick : ( ) => $close ( ! 0 ) ,
className : cx ( "ff-confirm-ok" , ( _a = okText . props ) == null ? void 0 : _a . className )
} ) : /* @__PURE__ */ jsx ( "div" , { className : "ff-confirm-ok" , onClick : ( ) => $close ( ! 0 ) , children : okText || "确定" } )
] } )
] } ) } ) ;
} , SlotContext = React . createContext ( {
ele : { } ,
mount : ( ) => {
} ,
unmount : ( ) => {
}
} ) , FFContainer = ( { className , children , actions , title , subTitle , extras , style } ) => ( actions && FFContainer . Action ( { children : actions } ) , title && FFContainer . Title ( { children : title } ) , subTitle && FFContainer . SubTitle ( { children : subTitle } ) , extras && FFContainer . Extra ( { children : extras } ) , /* @__PURE__ */ jsx ( "div" , { className : cx ( "ff-container" , className ) , style , children } ) ) , slot = ( name ) => ( { children , className } ) => {
const { mount , unmount } = React . useContext ( SlotContext ) ;
return useEffect ( ( ) => ( mount ( name , React . createElement ( "div" , {
key : ` ff- ${ name } ` ,
className : cx ( ` ff-popup- ${ name } ` , className )
} , children ) ) , ( ) => unmount ( name ) ) , [ className , children ] ) , null ;
} ;
FFContainer . Action = slot ( "actions" ) ;
FFContainer . Title = slot ( "title" ) ;
FFContainer . SubTitle = slot ( "sub-title" ) ;
FFContainer . Extra = slot ( "extras" ) ;
const SlotRender = ( { name } ) => {
const { ele } = React . useContext ( SlotContext ) ;
return ele == null ? void 0 : ele [ name ] ;
} ;
FFContainer . propTypes = {
// 容器 className
className : PropTypes . string ,
// 容器样式
style : PropTypes . object ,
// 标题占位符
title : PropTypes . any ,
// 副标题占位符
subTitle : PropTypes . any ,
// 操作按钮占位符
actions : PropTypes . any ,
// 扩展安装占位符
extras : PropTypes . any
} ;
FFContainer . defaultProps = {
style : { }
} ;
const Drawer = React . forwardRef ( ( { $close , children , className , title , ... props } , ref ) => {
const closeCarryRef = useRef ( ) , [ open , setOpen ] = useState ( ! 0 ) , [ ele , setEle ] = useState ( { } ) , onMount = useCallback ( ( solt , ele2 ) => setEle ( ( state ) => ( { ... state , [ solt ] : ele2 } ) ) , [ ] ) , onUnmount = useCallback ( ( solt ) => setEle ( ( state ) => ( { ... state , [ solt ] : void 0 } ) ) , [ ] ) ;
return React . useImperativeHandle ( ref , ( ) => ( {
handleClose : ( result ) => {
closeCarryRef . current = result , setOpen ( ! 1 ) ;
}
} ) ) , /* @__PURE__ */ jsx ( SlotContext . Provider , { value : { ele , mount : onMount , unmount : onUnmount } , children : /* @__PURE__ */ jsx (
Drawer$1 ,
{
... props ,
title : title || ( ele == null ? void 0 : ele . title ) ,
open ,
onClose : ( ) => {
closeCarryRef . current = ! 1 , setOpen ( ! 1 ) ;
} ,
afterOpenChange : ( open2 ) => ! open2 && $close ( closeCarryRef . current ) ,
className : cx ( "ff-popup ff-drawer" , className , ele == null ? void 0 : ele . className ) ,
extra : ele == null ? void 0 : ele [ "sub-title" ] ,
classNames : { header : "ff-popup-header" , footer : "ff-popup-footer" } ,
footer : ele != null && ele . extras || ele != null && ele . actions ? /* @__PURE__ */ jsxs ( React . Fragment , { children : [
( ele == null ? void 0 : ele . extras ) || /* @__PURE__ */ jsx ( "div" , { className : "ff-popup-extras" } ) ,
( ele == null ? void 0 : ele . actions ) || /* @__PURE__ */ jsx ( "div" , { className : "ff-popup-actions" } )
] } ) : void 0 ,
children
}
) } ) ;
} ) , Modal = React . forwardRef ( ( { $close , children , className , title , ... props } , ref ) => {
const closeCarryRef = useRef ( ) , [ open , setOpen ] = useState ( ! 0 ) , [ ele , setEle ] = useState ( { } ) , onMount = useCallback ( ( solt , ele2 ) => setEle ( ( state ) => ( { ... state , [ solt ] : ele2 } ) ) , [ ] ) , onUnmount = useCallback ( ( solt ) => setEle ( ( state ) => ( { ... state , [ solt ] : void 0 } ) ) , [ ] ) ;
return React . useImperativeHandle ( ref , ( ) => ( {
handleClose : ( result ) => {
closeCarryRef . current = result , setOpen ( ! 1 ) ;
}
} ) ) , /* @__PURE__ */ jsx ( SlotContext . Provider , { value : { ele , mount : onMount , unmount : onUnmount } , children : /* @__PURE__ */ jsx (
Modal$1 ,
{
... props ,
title : /* @__PURE__ */ jsxs ( Fragment , { children : [
title || ( ele == null ? void 0 : ele . title ) ,
ele == null ? void 0 : ele [ "sub-title" ]
] } ) ,
open ,
onCancel : ( ) => {
closeCarryRef . current = ! 1 , setOpen ( ! 1 ) ;
} ,
afterOpenChange : ( open2 ) => ! open2 && $close ( closeCarryRef . current ) ,
className : cx ( "ff-popup ff-modal" , className , ele == null ? void 0 : ele . className ) ,
keyboard : ! 0 ,
classNames : { header : "ff-popup-header" , footer : "ff-popup-footer" } ,
footer : ele != null && ele . extras || ele != null && ele . actions ? /* @__PURE__ */ jsxs ( React . Fragment , { children : [
( ele == null ? void 0 : ele . extras ) || /* @__PURE__ */ jsx ( "div" , { className : "ff-popup-extras" } ) ,
( ele == null ? void 0 : ele . actions ) || /* @__PURE__ */ jsx ( "div" , { className : "ff-popup-actions" } )
] } ) : null ,
children
}
) } ) ;
} ) ;
var _instance , _oWorker , _topic , _initWorker ;
const _ResWs = class _ResWs {
constructor ( ) {
_ _privateAdd ( this , _oWorker , null ) ;
_ _privateAdd ( this , _topic , /* @__PURE__ */ new Map ( ) ) ;
_ _privateAdd ( this , _initWorker , ( ) => {
if ( _ _privateGet ( this , _oWorker ) )
return _ _privateGet ( this , _oWorker ) . port . postMessage ( { command : "status" , data : [ ] } ) ;
_ _privateSet ( this , _oWorker , new SharedWorker ( new URL ( "data:text/plain;base64,Y29uc3QgcG9ydHMgPSBbXQpsZXQgd3MgPSBudWxsCgpmdW5jdGlvbiBpbml0V3ModXJsKSB7CiAgd3MgPSBuZXcgV2ViU29ja2V0KHVybCkKICB3cy5vbmNsb3NlID0gKGUpID0+IGNvbnNvbGUubG9nKCd3cyBjbG9zZWQnLCBlKQogIHdzLm9uZXJyb3IgPSAoZSkgPT4gY29uc29sZS5sb2coJ3dzIGVycm9yJywgZSkKICB3cy5vbm1lc3NhZ2UgPSAoeyBkYXRhIH0pID0+IHsKICAgIGNvbnN0IHZhbHVlID0gSlNPTi5wYXJzZShkYXRhKQogICAgcG9ydHMuZm9yRWFjaChwb3J0ID0+IHBvcnQucG9zdE1lc3NhZ2UodmFsdWUpKQogIH0KfQoKZnVuY3Rpb24gY2xvc2VXcygpIHsKICBpZiAoIXdzIHx8IHdzLnJlYWR5U3RhdGUgPT0gV2ViU29ja2V0Lk9QRU4pIHsKICAgIHdzLmNsb3NlKCkKICB9Cn0KCmZ1bmN0aW9uIHN0YXR1cygpIHsKICB0aGlzLnBvc3RNZXNzYWdlKHsgcmVhZHlTdGF0ZTogd3MgPyB3cy5yZWFkeVN0YXRlIDogV2ViU29ja2V0LkNMT1NFRCB9KQp9CgpzZWxmLm9uY29ubmVjdCA9IChlKSA9PiB7CiAgY29uc3QgcG9ydCA9IGUucG9ydHNbMF07CgogIHBvcnQub25tZXNzYWdlID0gKHsgZGF0YTogeyBjb21tYW5kLCBkYXRhIH0gfSkgPT4gewogICAgaWYgKGNvbW1hbmQgJiYgWydpbml0V3MnLCAnY2xvc2VXcycsICdzdGF0dXMnXS5pbmNsdWRlcyhjb21tYW5kKSkgUmVmbGVjdC5hcHBseShzZWxmPy5bY29tbWFuZF0sIHBvcnQsIGRhdGEgfHwgW10pCiAgfQoKICBwb3J0cy5wdXNoKHBvcnQpCn0K" , self . location ) ) ) , _ _privateGet ( this , _oWorker ) . port . onmessage = ( e ) => {
var _a , _b ;
( _a = e . data ) != null && _a . uuid ? _ _privateGet ( this , _topic ) . forEach ( ( flag , fn2 ) => {
var _a2 ;
( flag == "*" || ( _a2 = flag == null ? void 0 : flag . includes ) != null && _a2 . call ( flag , e . data . uuid ) ) && fn2 ( e . data ) ;
} ) : ( ( _b = e . data ) == null ? void 0 : _b . readyState ) == WebSocket . CLOSED && http . get ( "/api/user-api-token" ) . then ( ( { token , expire _at } ) => {
_ _privateGet ( this , _oWorker ) . port . postMessage ( { command : "initWs" , data : [ ` ws ${ _ . trimStart ( AppUrl , "http" ) } api/user-resource-status-ws?token= ${ token } ` ] } ) ;
} ) ;
} , _ _privateGet ( this , _oWorker ) . port . postMessage ( { command : "status" , data : [ ] } ) ;
} ) ;
_ _publicField ( this , "subscribe" , ( cb , res = [ ] ) => ( res ? Array . isArray ( res ) && res . length == 0 ? res = "*" : Array . isArray ( res ) || ( res = [ res ] . flat ( ) ) : res = "*" , _ _privateGet ( this , _topic ) . set ( cb , res ) , _ _privateGet ( this , _topic ) . size == 1 && _ _privateGet ( this , _initWorker ) . call ( this ) , ( ) => this . unsubscribe ( cb ) ) ) ;
_ _publicField ( this , "unsubscribe" , ( cb ) => _ _privateGet ( this , _topic ) . delete ( cb ) ) ;
if ( _ _privateGet ( _ResWs , _instance ) )
return _ _privateGet ( _ResWs , _instance ) ;
}
} ;
_instance = new WeakMap ( ) , _oWorker = new WeakMap ( ) , _topic = new WeakMap ( ) , _initWorker = new WeakMap ( ) , _ _privateAdd ( _ResWs , _instance , null ) , _ _publicField ( _ResWs , "getInstance" , ( ) => ( _ _privateGet ( _ResWs , _instance ) || _ _privateSet ( _ResWs , _instance , new _ResWs ( ) ) , _ _privateGet ( _ResWs , _instance ) ) ) ;
let ResWs = _ResWs ;
const ResWs$1 = ResWs . getInstance ( ) , useUpdate = ( ) => {
2024-07-19 13:08:18 +08:00
const isMouned = useRef ( ! 0 ) , [ , forceUpdate ] = React . useReducer ( ( x ) => x + 1 , 0 ) ;
return useEffect ( ( ) => ( ) => isMouned . current = ! 1 , [ ] ) , ( ) => isMouned . current && forceUpdate ( ) ;
2024-07-12 10:30:05 +08:00
} , usePrevious = ( state ) => {
const ref = useRef ( ) ;
return useEffect ( ( ) => {
ref . current = state ;
2024-07-19 13:08:18 +08:00
} , [ state ] ) , ref . current ;
} , useStateWithCallback = ( initialState ) => {
const [ state , setState ] = useState ( initialState ) , callbackRef = useRef ( null ) , setStateWithCallback = useCallback ( ( newState , callback ) => {
callbackRef . current = callback , setState ( newState ) ;
} , [ ] ) ;
2024-07-12 10:30:05 +08:00
return useEffect ( ( ) => {
2024-07-19 13:08:18 +08:00
callbackRef . current && ( callbackRef . current ( state ) , callbackRef . current = null ) ;
} , [ state ] ) , [ state , setStateWithCallback ] ;
} , useDeepEqualEffect = ( callback = ( prevDeps ) => {
} , deps , compare = _ . isEqual ) => {
2024-07-12 10:30:05 +08:00
const oldDeps = React . useRef ( deps ) ;
2024-07-19 13:08:18 +08:00
compare ( deps , oldDeps . current ) || ( oldDeps . current = deps ) , React . useEffect ( callback , [ oldDeps . current ] ) ;
2024-07-12 10:30:05 +08:00
} , transformOptions = ( arr , type = "string" ) => {
var _a ;
if ( ! Array . isArray ( arr ) )
return arr ;
for ( let i = 0 ; i < arr . length ; i ++ )
arr [ i ] . value = _ . toPrimitive ( ( _a = arr [ i ] ) == null ? void 0 : _a . value , type ) , arr [ i ] && Reflect . has ( arr [ i ] , "children" ) && ( arr [ i ] . children = transformOptions ( arr [ i ] . children , type ) ) ;
return arr ;
} , useOptions = ( options , language = "json" , type = "string" , form , basicForm = null ) => {
const [ rcform ] = Form . useForm ( form ) , [ data2 , setData ] = useState ( [ { label : "无" , value : "" , disabled : ! 0 } ] ) , dependenciesFieldsRef = useRef ( [ ] ) , dependenciesValue = Form . useWatch ( ( data3 ) => dependenciesFieldsRef . current . length === 0 ? null : _ . pick ( data3 , dependenciesFieldsRef . current ) , rcform ) || null ;
return useEffect ( ( ) => {
Array . isArray ( options ) ? setData ( options ) : language === "javascript" && options ? fn . exec ( options , { } , {
getFieldValue : ( namePath ) => ( dependenciesFieldsRef . current . includes ( namePath ) || dependenciesFieldsRef . current . push ( namePath ) , rcform . getFieldValue ( namePath ) ) ,
getFieldValueForBasicForm : ( namePath ) => ( dependenciesFieldsRef . current . includes ( namePath ) || dependenciesFieldsRef . current . push ( namePath ) , basicForm ? basicForm . getFieldValue ( namePath ) : rcform . getFieldValue ( namePath ) )
} ) . then ( ( data3 ) => {
setData ( _ . toPrimitive ( data3 , "array" ) ) ;
} ) : options && setData ( _ . toPrimitive ( options , "array" ) ) ;
} , [ options , language , dependenciesValue ] ) , transformOptions ( data2 , type ) ;
} , useSubscribeRequest = ( param ) => {
const [ data2 , setData ] = useState ( ) , opts = { type : "GET" } ;
if ( typeof param == "string" ? opts . url = param : _ . isPlainObject ( param ) && Object . assign ( opts , param ) , ! ( opts != null && opts . url ) )
throw "url is required" ;
const initData = ( e ) => http . request ( opts , ! 1 ) . resp ( ( resp ) => ( console . log ( "useSubscribeRequest" , e ) , setData ( resp ) , resp ) ) ;
return useDeepEqualEffect ( ( ) => {
let unsubscribe = null ;
return initData ( ) . then ( ( resp ) => {
unsubscribe = ResWs$1 . subscribe ( _ . throttle ( initData , 180 , { leading : ! 1 , trailing : ! 0 } ) , resp . res ) ;
} ) , ( ) => unsubscribe == null ? void 0 : unsubscribe ( ) ;
} , opts ) , data2 ;
} , useConfigure = ( code ) => {
const [ data2 , setData ] = React . useState ( { gridItems : [ ] , hideItems : [ ] } ) ;
return React . useEffect ( ( ) => {
code && http . get ( ` /api/_/ ${ code } ` ) . then ( ( {
pk ,
uuid ,
code : code2 ,
resource ,
align ,
cols ,
rowHeight ,
marginX ,
marginY ,
listenChangeFields ,
listenChangeFieldsFunc ,
fields
} ) => ( {
pk ,
uuid ,
code : code2 ,
resource ,
align ,
cols ,
rowHeight ,
marginX ,
marginY ,
listenChangeFields ,
listenChangeFieldsFunc ,
... fields . reduce ( ( carry , item ) => {
var _a ;
return ( _a = item == null ? void 0 : item . field ) != null && _a . hidden ? carry . hides . push ( item == null ? void 0 : item . field ) : carry . items . push ( item ) , carry ;
} , { items : [ ] , hides : [ ] } )
} ) ) . then ( setData ) ;
} , [ code ] ) , data2 ;
} , useRules = ( {
max = 0 ,
min = 0 ,
type = "" ,
message ,
pattern ,
required = ! 1 ,
validator
} = { } , fieldName , fieldType ) => {
const [ rules , setRules ] = useState ( [ ] ) ;
return useEffect ( ( ) => {
const initRules = [ ] ;
if ( required ) {
let requiredFieldType = fieldType ;
switch ( fieldType ) {
case "number" :
case "string" :
case "array" :
break ;
case "bool" :
requiredFieldType = "boolean" ;
break ;
case "json" :
requiredFieldType = "object" ;
break ;
}
initRules . push ( { type : requiredFieldType , required : ! 0 , whitespace : ! 0 , message : "该项必填" } ) ;
}
switch ( type ) {
case "string" :
initRules . push ( {
type ,
max ,
min ,
message : message || ( min && max ? ` 字符必须在 ${ min } ~ ${ max } 之间 ` : ` ${ max ? "最多能有" : "最少要有" } ${ min || max } 个字符 ` )
} ) ;
break ;
case "pattern" :
initRules . push ( { type : "string" , pattern , message } ) ;
break ;
case "validator" :
validator && initRules . push ( ( { getFieldValue } ) => ( {
validator : async ( _ _ , value ) => {
const msg = await fn . exec ( validator , { value , fieldName } , { getFieldValue } ) ;
return _ . isString ( msg ) && msg ? Promise . reject ( msg ) : _ . isBoolean ( msg ) && ! msg ? Promise . reject ( message ) : Promise . resolve ( ) ;
}
} ) ) ;
break ;
}
setRules ( initRules ) ;
} , [ max , min , type , message , pattern , required , validator ] ) , rules ;
} , useFormData = ( code , primaryKey , formSetting ) => {
const [ formData , setFormData ] = useState ( null ) ;
return useEffect ( ( ) => {
const {
initDataUri = ` /api/ ${ code } ` ,
initDataMethod = "GET"
} = formSetting || { } ;
primaryKey && http . request ( {
method : initDataMethod ,
url : _ . trimEnd ( ` ${ initDataUri } / ${ primaryKey } ` , "/" )
} ) . then ( ( data2 ) => {
setFormData ( data2 ) ;
} ) ;
} , [ code , primaryKey , formSetting ] ) , formData ;
} , useFnRun = ( fn$1 , form , initialValue , props = { } ) => {
const forceUpdate = useUpdate ( ) , isMountedRef = useRef ( ! 0 ) , dependenciesRef = useRef ( [ ] ) , [ result , setResult ] = useState ( initialValue ) , flag = Form . useWatch ( ( values ) => JSON . stringify ( _ . pick ( values , dependenciesRef . current ) ) , form ) || "{}" ;
return useEffect ( ( ) => {
fn$1 && fn . exec ( fn$1 , props , {
getFieldValue : _ . wrap ( form . getFieldValue , ( cb , namePath ) => ( dependenciesRef . current . some ( ( item ) => _ . isEqual ( item , namePath ) ) || ( dependenciesRef . current . push ( namePath ) , forceUpdate ( ) ) , cb ( namePath ) ) ) ,
isFieldTouched : form . isFieldTouched ,
isFieldsTouched : form . isFieldsTouched
} ) . then ( ( v ) => isMountedRef . current && setResult ( v ) ) ;
} , [ fn$1 , flag , form , props ] ) , useEffect ( ( ) => ( ) => isMountedRef . current = ! 1 , [ ] ) , result ;
} , GridLayoutFormHoc = ( WrapComponent ) => ( {
code ,
layout ,
name ,
primaryKey = 0 ,
style = { } ,
formProps = { } ,
form : initForm ,
isPreview = ! 1 ,
className ,
onFinish ,
onValuesChange = ( ) => {
} ,
... props
} ) => {
const {
align ,
autoComplete ,
resource ,
items ,
hides ,
rowHeight ,
marginX ,
marginY ,
cols ,
listenChangeFields ,
listenChangeFieldsFunc ,
pk ,
uuid
} = useConfigure ( code ) , [ form ] = Form$1 . useForm ( initForm ) , onFormValuesChange = ( {
changedValues ,
allValues ,
listenChangeFields : listenChangeFields2 ,
listenChangeFieldsFunc : listenChangeFieldsFunc2 ,
onValuesChange : onValuesChange2 ,
code : code2
} ) => {
onValuesChange2 ( changedValues , allValues ) , listenChangeFieldsFunc2 && Array . isArray ( listenChangeFields2 ) && fn . exec (
listenChangeFieldsFunc2 ,
{ changedValues , allValues } ,
{
getFieldValue : form . getFieldValue ,
setFieldsValue : form . setFieldsValue ,
isFieldTouched : form . isFieldTouched ,
isFieldsTouched : form . isFieldsTouched
}
) ;
} , formPropsFields = useMemo ( ( ) => [
{ name : "__PK__" , value : pk } ,
{ name : "__PROPS__" , value : formProps } ,
{ name : "__RESOURCE__" , value : resource } ,
{ name : "__LAYOUT_KEY__" , value : code } ,
{ name : "__LAYOUT_UUID__" , value : uuid } ,
{ name : "__PRIMARY_KEY__" , value : primaryKey }
] , [ pk , code , uuid , resource , primaryKey , formProps ] ) ;
return /* @__PURE__ */ jsxs (
Form$1 ,
{
className ,
requiredMark : ! 0 ,
name : name || code ,
layout : layout || align ,
fields : formPropsFields ,
form ,
autoComplete ,
style : { ... style , position : "relative" } ,
onFinish ,
onValuesChange : ( changedValues , allValues ) => onFormValuesChange (
{
changedValues ,
allValues ,
listenChangeFields ,
listenChangeFieldsFunc ,
onValuesChange ,
code
}
) ,
children : [
/* @__PURE__ */ jsx (
WrapComponent ,
{
... props ,
form ,
code ,
fields : items ,
cols ,
rowHeight ,
itemMargin : [ marginX , marginY ]
}
) ,
hides == null ? void 0 : hides . map ( ( item ) => {
var _a ;
return /* @__PURE__ */ jsx ( Field , { name : item . code , children : /* @__PURE__ */ jsx (
HideField ,
{
form ,
name : item . code ,
type : item . type ,
initialValue : item . initialValue ,
initialValueLanguage : ( _a = item . extras ) == null ? void 0 : _a . initialValueLanguage
}
) } , JSON . stringify ( item . code ) ) ;
} )
]
}
) ;
} , HideField = ( { type , initialValue , initialValueLanguage , onChange , form } ) => {
const value = useFnRun (
initialValueLanguage == "javascript" && initialValue ,
form ,
initialValueLanguage == "javascript" ? void 0 : initialValue ,
{ }
) ;
return useEffect ( ( ) => {
initialValueLanguage == "javascript" ? onChange ( _ . toPrimitive ( value , type ) ) : onChange ( _ . toPrimitive ( initialValue , type ) ) ;
} , [ type , initialValue , value ] ) , null ;
} , GridLayoutHoc = ( Component2 ) => function ( { code , data : data2 , ... props } ) {
const [ layout , setLayout ] = useState ( {
resource : null ,
cols : 12 ,
rowHeight : 21 ,
fields : [ ]
} ) ;
return useEffect ( ( ) => {
code && http . get ( ` /api/_/ ${ code } ` ) . then ( ( resp ) => setLayout ( _ . pick ( resp , [ "resource" , "cols" , "rowHeight" , "fields" ] ) ) ) ;
} , [ code ] ) , ( layout == null ? void 0 : layout . resource ) && /* @__PURE__ */ jsx (
Component2 ,
{
... props ,
rowHeight : layout . rowHeight ,
cols : layout . cols ,
fields : layout . fields ,
data : layout != null && layout . resource ? { [ layout == null ? void 0 : layout . resource ] : data2 } : { }
}
) ;
} , HOOK _MARK = "RC_FORM_INTERNAL_HOOKS" , useField = ( name , {
initialValue ,
initialValueLanguage ,
convertJs ,
convertJsSetting ,
type = "string"
} , pContext = null ) => {
const isMountedRef = useRef ( ! 1 ) , form = useContext ( FieldContext ) , [ newValue , setNewValue ] = useState ( ) , [ value , setValue ] = useState ( initialValueLanguage == "javascript" || ! name ? void 0 : form . getFieldValue ( name ) ) , { registerWatch } = form . getInternalHooks ( HOOK _MARK ) || { } ;
return useEffect ( ( ) => registerWatch == null ? void 0 : registerWatch ( ( _values , allValues , _namePath ) => {
if ( ! isMountedRef . current )
return ;
const watchValue = _ . get ( allValues , name ) ;
_ . isEqual ( watchValue , value ) || setValue ( _ . toPrimitive ( watchValue , type ) ) ;
} ) , [ value ] ) , useEffect ( ( ) => {
initialValueLanguage == "javascript" && initialValue ? fn . exec ( initialValue , { } , {
getFieldValueForBasicForm : ( name2 ) => pContext ? pContext . getFieldValue ( name2 ) : form . getFieldValue ( name2 ) ,
getFieldValue : ( name2 ) => form . getFieldValue ( name2 )
} ) . then ( ( data2 ) => setValue ( _ . toPrimitive ( data2 , type ) ) ) . catch ( ( e ) => notification . error ( { message : ` 布局数据错误: ${ JSON . stringify ( e ) } ` } ) ) . finally ( ( ) => isMountedRef . current = ! 0 ) : ( initialValue && setValue ( _ . toPrimitive ( initialValue ? ? form . getFieldValue ( name ) , type ) ) , isMountedRef . current = ! 0 ) ;
} , [ initialValue , initialValueLanguage ] ) , useDeepEqualEffect ( ( ) => {
isMountedRef . current && convertJs && core . getWidgetComponent ( convertJs ) . then ( ( { default : fn2 } ) => fn2 ( { value , record : form . getFieldsValue ( ! 0 ) , $setting : convertJsSetting } ) ) . then ( setNewValue ) . catch ( ( e ) => console . error ( "布局数据转换错误: " , e , convertJs ) ) ;
} , [ value , convertJs , convertJsSetting ] ) , [ newValue || value , value ] ;
} , getBoxStyle = ( x , y , w , h , boxStyle = { } , height = 0 ) => {
const style = {
"--grid-layout-h" : ` ${ h } ` ,
"--grid-layout-w" : ` ${ w } ` ,
"--grid-layout-x" : ` ${ x } ` ,
"--grid-layout-y" : ` ${ y } ` ,
"--grid-layout-row-height-offset" : "0px"
} ;
return boxStyle != null && boxStyle . autoHeight ? style . height = "fit-content" : style [ "--grid-layout-row" ] = ` ${ h } ` , style [ "--grid-layout-box-margin" ] = getBoxMargin ( boxStyle == null ? void 0 : boxStyle . marginTop , boxStyle == null ? void 0 : boxStyle . marginRight , boxStyle == null ? void 0 : boxStyle . marginBottom , boxStyle == null ? void 0 : boxStyle . marginLeft ) , style [ "--grid-layout-box-padding" ] = getBoxMargin ( boxStyle == null ? void 0 : boxStyle . paddingTop , boxStyle == null ? void 0 : boxStyle . paddingRight , boxStyle == null ? void 0 : boxStyle . paddingBottom , boxStyle == null ? void 0 : boxStyle . paddingLeft ) , height && ( style . height = ` ${ height } px ` ) , style ;
} , getBoxMargin = ( top , right , bottom , left ) => ` ${ top || 0 } px ${ right || 0 } px ${ bottom || 0 } px ${ left || 0 } px ` , GridLayout = ( { cols , rowHeight , fields , data : data2 , containerPadding = [ 0 , 0 ] , itemMargin = [ 4 , 0 ] , formProps = { } , className , ... props } ) => {
const [ form ] = Form . useForm ( ) , items = useGridLayoutFields ( fields , itemWidgetRender$2 , "@pkg/grid-layouts" ) , formPropsFields = useMemo ( ( ) => [
{ name : "__PROPS__" , value : formProps }
] , [ formProps ] ) ;
return useDeepEqualEffect ( ( ) => {
form . setFieldsValue ( data2 ) ;
} , [ data2 ] ) , /* @__PURE__ */ jsx ( Form , { fields : formPropsFields , form , component : ! 1 , children : /* @__PURE__ */ jsx (
"div" ,
{
... props ,
className : cx ( "ff-grid-layout" , className ) ,
style : {
"--grid-layout-item-margin-y" : ` ${ ( itemMargin == null ? void 0 : itemMargin [ 0 ] ) || 0 } px ` ,
"--grid-layout-item-margin-x" : ` ${ ( itemMargin == null ? void 0 : itemMargin [ 1 ] ) || 0 } px ` ,
"--grid-layout-container-padding-y" : ` ${ ( containerPadding == null ? void 0 : containerPadding [ 0 ] ) || 0 } px ` ,
"--grid-layout-container-padding-x" : ` ${ ( containerPadding == null ? void 0 : containerPadding [ 1 ] ) || 0 } px ` ,
"--grid-layout-cols" : cols || 12 ,
"--grid-layout-row-height" : ` ${ rowHeight || 21 } px `
} ,
children : items
}
) } ) ;
} , useGridLayoutFields = ( fields , itemWidgetRender2 , prefix = "@pkg/grid-layouts" , basicForm = null ) => useMemo ( ( ) => {
var _a ;
return ( _a = _ . sortBy ( fields , [ "y" , "x" ] ) ) == null ? void 0 : _a . map (
( { i , x , y , w , h , field : { boxStyle , widgetPrefix = prefix , widget , ... field } } , index2 ) => /* @__PURE__ */ jsx (
"div" ,
{
className : "grid-layout-item" ,
style : getBoxStyle ( x , y , w , h , boxStyle , widget === "Height" && ( field == null ? void 0 : field . initialValue ) ) ,
children : /* @__PURE__ */ jsx (
ItemWidget ,
{
... field ,
basicForm ,
itemWidget : widget != null && widget . startsWith ( "@" ) ? widget : ` ${ widgetPrefix } / ${ widget } ` ,
itemWidgetRender : itemWidgetRender2
}
)
} ,
i || index2
)
) ;
} , [ fields ] ) , ItemWidget = ( { itemWidget , itemWidgetRender : itemWidgetRender2 , basicForm , ... props } ) => {
const [ children , setChildren ] = useState ( ) ;
return useEffect ( ( ) => {
core . getWidgetComponent ( itemWidget ) . then ( ( { defaultProps , default : ItemWidget2 } ) => {
setChildren ( React . createElement ( itemWidgetRender2 ( ItemWidget2 , defaultProps , basicForm ) , props ) ) ;
} ) . catch ( ( e ) => setChildren ( itemWidget ) ) ;
} , [ itemWidget ] ) , children ;
} , itemWidgetRender$2 = ( ItemWidget2 , defaultProps , basicForm = null ) => ( props ) => {
const {
code ,
label ,
extras ,
isVirtual ,
initialValue ,
initialValueLanguage ,
convertJs ,
convertJsSetting ,
... itemWidgetProps
} = _ . merge ( { } , defaultProps , props ) , [ value , rawValue ] = useField ( isVirtual ? null : code , {
initialValue ,
initialValueLanguage ,
convertJs ,
convertJsSetting ,
type : ( itemWidgetProps == null ? void 0 : itemWidgetProps . type ) || "string"
} , basicForm ) ;
return /* @__PURE__ */ jsx ( ItemWidget2 , { ... itemWidgetProps , value , rawValue , $setting : extras || { } } ) ;
} , GridLayout$1 = GridLayoutHoc ( GridLayout ) , GridLayoutFormWidget = ( { widget , widgetPrefix , widgetDecorator , subWidgets , basicForm , ... props } ) => {
const itemWidget = widget != null && widget . startsWith ( "@" ) ? widget : ` ${ widgetPrefix } / ${ widget } ` , [ ItemWidget2 , setItemWidget ] = useState ( ) ;
return useEffect ( ( ) => {
itemWidget && core . getWidgetComponent ( itemWidget ) . then ( ( { defaultProps , default : ItemWidget22 } ) => ( {
default : itemWidgetRender$1 ( ItemWidget22 , defaultProps , basicForm )
} ) ) . catch ( ( e ) => ( { default : ( ) => ` ${ e } ` } ) ) . then ( ( res ) => setItemWidget ( React . createElement ( res . default , props ) ) ) ;
} , [ itemWidget ] ) , ItemWidget2 && React . cloneElement ( ItemWidget2 , props ) ;
} ;
GridLayoutFormWidget . defaultProps = {
widgetPrefix : "@pkg/grid-layout-forms" ,
widget : "Input"
} ;
const itemWidgetRender$1 = ( ItemWidget2 , defaultProps , basicForm = null ) => ( props ) => {
const {
type ,
code ,
label ,
noStyle ,
placeholder ,
extras ,
validators ,
help ,
isVirtual ,
$isReserved ,
initialValue ,
initialValueLanguage ,
convertJs ,
convertJsSetting ,
widgetPerfix : _widgetPerfix ,
boxStyle : _boxStyle ,
widgetDecorator ,
subWidgets ,
... itemWidgetProps
} = { ... defaultProps , ... props } , rules = useRules ( validators || { } , code , type ) , itemProps = {
label ,
noStyle ,
colon : ! 1
} , fieldProps = {
placeholder ,
... itemWidgetProps
} , normalize = useCallback ( ( value ) => value == null ? void 0 : _ . toPrimitive ( value , type ) , [ type ] ) ;
return /* @__PURE__ */ jsx (
Field ,
{
name : code ,
rules ,
initialValue : normalize ( initialValue ) ,
normalize ,
children : ( control , meta , rcform ) => {
var _a ;
return /* @__PURE__ */ jsx (
ItemWidget2 ,
{
type ,
rcform ,
itemProps : {
validateStatus : meta . errors . length > 0 ? "error" : "success" ,
tooltip : help ,
help : meta . errors . length > 0 ? meta . errors . join ( "、" ) : null ,
required : ( ( _a = rules == null ? void 0 : rules [ 0 ] ) == null ? void 0 : _a . required ) || ! 1 ,
... itemProps
} ,
fieldProps : { ... fieldProps , ... control } ,
$setting : extras || { }
}
) ;
}
}
) ;
} , GridLayoutForm = ( { cols , rowHeight , itemMargin , containerPadding , fields , children } ) => {
const items = useGridLayoutFields ( fields , itemWidgetRender$1 , "@pkg/grid-layout-forms" ) ;
return /* @__PURE__ */ jsx ( ConfigProvider , { theme : { components : { Form : { itemMarginBottom : 0 } } } , children : /* @__PURE__ */ jsxs ( "div" , { className : "ff-grid-layout-form" , style : {
"--grid-layout-item-margin-x" : ` ${ ( itemMargin == null ? void 0 : itemMargin [ 0 ] ) ? ? 8 } px ` ,
"--grid-layout-item-margin-y" : ` ${ ( itemMargin == null ? void 0 : itemMargin [ 1 ] ) ? ? 16 } px ` ,
"--grid-layout-container-padding-y" : ` ${ ( containerPadding == null ? void 0 : containerPadding [ 0 ] ) || 0 } px ` ,
"--grid-layout-container-padding-x" : ` ${ ( containerPadding == null ? void 0 : containerPadding [ 1 ] ) || 0 } px ` ,
"--grid-layout-cols" : cols || 24 ,
"--grid-layout-row-height" : ` ${ rowHeight || 16 } px `
} , children : [
items ,
children && React . cloneElement ( children , { cols , rowHeight , itemMargin , containerPadding , fields } )
] } ) } ) ;
} ;
GridLayoutForm . propTypes = {
fields : PropTypes . array . isRequired
} ;
GridLayoutForm . defaultProps = {
fields : [ ] ,
itemMargin : [ 8 , 16 ] ,
containerPadding : [ 0 , 0 ]
} ;
const GridLayoutForm$1 = GridLayoutFormHoc ( GridLayoutForm ) , FFPageRender = ( { children } ) => {
const [ ele , setEle ] = useState ( { } ) , onMount = useCallback ( ( solt , ele2 ) => setEle ( ( state ) => ( { ... state , [ solt ] : ele2 } ) ) , [ ] ) , onUnmount = useCallback ( ( solt ) => setEle ( ( state ) => ( { ... state , [ solt ] : void 0 } ) ) , [ ] ) ;
return /* @__PURE__ */ jsx ( SlotContext . Provider , { value : { ele , mount : onMount , unmount : onUnmount } , children } ) ;
} ;
FFPageRender . defaultProps = {
isDrawerRender : ! 1
} ;
FFPageRender . propTypes = {
isDrawerRender : PropTypes . bool
} ;
const getWidgetPropsData = ( registerProps = { } , data2 = { } , fns2 = { } , defaultValue = "" ) => _ . deepSome ( registerProps , ( value , key ) => key === "type" && value === "code" ) ? getWidgetPropsDataAsync ( registerProps , data2 , fns2 , defaultValue ) : getWidgetPropsDataSync ( registerProps , data2 , defaultValue ) , getWidgetPropsDataAsync = async ( registerProps = { } , data2 = { } , fns2 = { } , defaultValue = "" ) => {
let res = /* @__PURE__ */ Object . create ( null ) ;
for ( let key in registerProps ) {
let newValue ;
if ( Reflect . has ( registerProps [ key ] , "type" ) && [ "code" , "field" , "router" , "query" , "string" ] . includes ( registerProps [ key ] . type ) ) {
const { type : fieldType , value : fieldData = "" , default : fieldDefault = defaultValue } = registerProps [ key ] ;
switch ( fieldType ) {
case "code" :
newValue = await fn . exec ( fieldData , data2 , fns2 ) ;
break ;
case "field" :
newValue = _ . get ( data2 , fieldData ) ? ? _ . get ( data2 , fieldData . substring ( fieldData . indexOf ( "." ) + 1 ) ) ;
break ;
case "router" :
case "query" :
newValue = route . getPageParams ( fieldData ) ;
break ;
case "string" :
newValue = fieldData ;
}
newValue ? ? ( newValue = fieldDefault ) ;
} else
newValue = await getWidgetPropsDataAsync ( registerProps [ key ] , data2 , fns2 , defaultValue ) ;
_ . set ( res , key , newValue ) ;
}
return res ;
} , getWidgetPropsDataSync = ( registerProps = { } , data2 = { } , defaultValue = "" ) => Object . keys ( registerProps || { } ) . reduce ( ( res , key ) => {
if ( _ . isPlainObject ( registerProps [ key ] ) ) {
let newValue ;
if ( Reflect . has ( registerProps [ key ] , "type" ) && [ "field" , "router" , "query" , "string" ] . includes ( registerProps [ key ] . type ) ) {
const { type : fieldType , value : fieldData = "" , default : fieldDefault = defaultValue } = registerProps [ key ] ;
switch ( fieldType ) {
case "field" :
newValue = _ . get ( data2 , fieldData ) ? ? _ . get ( data2 , fieldData . substring ( fieldData . indexOf ( "." ) + 1 ) ) ;
break ;
case "router" :
case "query" :
newValue = route . getPageParams ( fieldData ) ;
break ;
case "string" :
newValue = fieldData ;
break ;
}
newValue ? ? ( newValue = fieldDefault ) ;
} else
newValue = getWidgetPropsDataSync ( registerProps [ key ] , data2 , defaultValue ) ;
_ . set ( res , key , newValue ) ;
}
return res ;
} , { } ) , DataListFramework = ( {
className ,
itemClassName ,
classNames ,
dataSource ,
isPaginate ,
pageSize ,
isItemOperations ,
isBatchOperations ,
batchOperations ,
itemOperations ,
itemOperationsAccess ,
resource ,
primaryKey ,
title ,
itemGridLayout ,
$setting ,
tabs ,
2024-07-19 13:08:18 +08:00
isConditionFormLayout ,
2024-07-12 10:30:05 +08:00
isTreeSider ,
treeSiderConfig
} ) => {
const { getBase62params , onClickCallback , onTabChange } = useContext ( DataListContext ) , { total , page , tab } = getBase62params ( ) || { } , itemRender = useCallback ( ( children , data2 , index2 ) => /* @__PURE__ */ jsx (
ItemOperations ,
{
className : cx ( "ff-data-list-framework-item" , itemClassName ) ,
operations : isItemOperations && data2 ? itemOperations == null ? void 0 : itemOperations . filter ( ( oper ) => ! primaryKey || ! oper . uuid || ! itemOperationsAccess . has ( oper . uuid ) ? ! 0 : itemOperationsAccess . get ( oper . uuid ) . includes ( data2 == null ? void 0 : data2 [ primaryKey ] ) ) : [ ] ,
data : resource ? { [ resource ] : data2 } : data2 ,
children ,
onClickCallback
}
) , [ resource , primaryKey , isItemOperations , onClickCallback , itemOperations , itemOperationsAccess ] ) ;
return /* @__PURE__ */ jsxs ( "div" , { className : cx ( "ff-data-list-framework" , className ) , children : [
/* @__PURE__ */ jsx ( DataListSider , { className : classNames == null ? void 0 : classNames . sider , isTreeSider , ... treeSiderConfig } ) ,
/* @__PURE__ */ jsxs ( "div" , { className : cx ( "ff-data-list-container" , classNames == null ? void 0 : classNames . container ) , children : [
2024-07-19 13:08:18 +08:00
/* @__PURE__ */ jsx ( DataListFilter , { className : classNames == null ? void 0 : classNames . filter , isConditionFormLayout } ) ,
2024-07-12 10:30:05 +08:00
/* @__PURE__ */ jsx (
DataListToolbar ,
{
title ,
className : classNames == null ? void 0 : classNames . toolbar ,
tabs ,
tab ,
onTabChange
}
) ,
/* @__PURE__ */ jsx (
DataListContent ,
{
... itemGridLayout ,
className : classNames == null ? void 0 : classNames . content ,
style : { "--col-num" : ( $setting == null ? void 0 : $setting . colNum ) || 1 } ,
primaryKey ,
itemRender ,
dataSource
}
) ,
/* @__PURE__ */ jsx (
DataListFooter ,
{
className : classNames == null ? void 0 : classNames . footer ,
isPaginate ,
isOperations : isBatchOperations ,
operations : batchOperations ,
total ,
page ,
pageSize
}
)
] } )
] } ) ;
} , ItemOperations = ( { className , operations , children , data : data2 , onClickCallback } ) => /* @__PURE__ */ jsxs ( "div" , { className : cx ( "data-list-grid-layout-item-container" , className ) , children : [
children ,
! ! ( operations != null && operations . length ) && /* @__PURE__ */ jsx ( "div" , { className : "data-list-grid-layout-item-actions" , children : operations . map ( ( item ) => /* @__PURE__ */ jsx ( "span" , { className : "data-list-grid-layout-item-action" , children : /* @__PURE__ */ jsx (
Button . Link ,
{
uuid : item . uuid ,
type : item . type ,
name : item . name ,
widget : item . widget ,
widgetType : item . widgetType ,
widgetProps : item . widgetProps ,
widgetSetting : item . widgetSetting ,
widgetContainerProps : item . widgetContainerSetting ,
data : data2 ,
onAfterClick : ( e ) => e !== ! 1 && ( onClickCallback == null ? void 0 : onClickCallback ( item . isRefresh , data2 ) )
} ,
item . uuid || useId ( )
) } , ( item == null ? void 0 : item . uuid ) || useId ( ) ) ) } )
] } ) , DataTableFramework = ( {
listCode ,
className ,
itemClassName ,
dataSource ,
columns ,
isItemOperations ,
isBatchOperations ,
batchOperations ,
itemOperations ,
itemOperationsAccess ,
resource ,
primaryKey ,
title ,
isPaginate ,
pageSize ,
isTreeSider ,
treeSiderConfig ,
2024-07-19 13:08:18 +08:00
isConditionFormLayout ,
2024-07-12 10:30:05 +08:00
... props
} ) => {
const { getBase62params , onClickCallback } = useContext ( DataListContext ) , { total , page } = getBase62params ( ) || { } ;
return /* @__PURE__ */ jsxs ( "div" , { className : cx ( "ff-data-table-framework" , className ) , children : [
/* @__PURE__ */ jsx ( DataListSider , { isTreeSider , ... treeSiderConfig } ) ,
/* @__PURE__ */ jsxs ( "div" , { className : "ff-data-table-container" , children : [
2024-07-19 13:08:18 +08:00
/* @__PURE__ */ jsx ( DataListFilter , { listCode , isConditionFormLayout } ) ,
2024-07-12 10:30:05 +08:00
/* @__PURE__ */ jsx ( DataListToolbar , { title } ) ,
/* @__PURE__ */ jsx (
DataListTable ,
{
... props ,
className : "ff-data-table-content" ,
columns ,
dataSource ,
operationRender : ( record ) => /* @__PURE__ */ jsx ( "div" , { className : "ff-data-table-actions" , children : itemOperations == null ? void 0 : itemOperations . reduce ( ( carry , item , i ) => [
... carry ,
/* @__PURE__ */ jsx (
Button . Link ,
{
size : "small" ,
uuid : item . uuid ,
type : item . type ,
name : item . name ,
widget : item . widget ,
widgetType : item . widgetType ,
widgetProps : item . widgetProps ,
widgetSetting : item . widgetSetting ,
widgetContainerProps : item . widgetContainerSetting ,
data : record ,
onAfterClick : ( e ) => e !== ! 1 && ( onClickCallback == null ? void 0 : onClickCallback ( item . isRefresh , data ) )
} ,
item . uuid || i
)
] , [ ] ) } )
}
) ,
/* @__PURE__ */ jsx (
DataListFooter ,
{
isPaginate ,
isOperations : isBatchOperations ,
operations : batchOperations ,
total ,
page ,
pageSize
}
)
] } )
] } ) ;
} , DataListContext = React . createContext ( {
listCode : "" ,
getBase62params : ( k , defaultValue ) => {
} ,
onReload : ( ) => {
} ,
onClickCallback : ( ) => {
} ,
onConditonChange : ( ) => {
} ,
onTabChange : ( ) => {
} ,
onSiderChange : ( ) => {
} ,
onKeywordChange : ( ) => {
} ,
onPageChange : ( ) => {
} ,
onPageSizeChange : ( ) => {
}
} ) , DataList$1 = ( {
isItemGridLayout ,
theme ,
themeProps ,
onClickCallback ,
onReload ,
getBase62params ,
listCode ,
onPageChange ,
onPageSizeChange ,
onTabChange ,
onSiderChange ,
onKeywordChange ,
onConditonChange ,
... props
} ) => {
const [ framework , setFramework ] = useState ( ) ;
return useEffect ( ( ) => {
theme ? core . getWidgetComponent ( theme ) . then ( ( resp ) => {
if ( ! resp )
throw ` ${ theme } not found ` ;
return resp ;
} ) . catch ( ( e ) => ( { default : ( ) => ` ${ e } ` } ) ) . then ( ( resp ) => setFramework ( React . createElement ( resp . default , { ... props , $setting : themeProps } ) ) ) : framework || setFramework ( null ) ;
} , [ theme , themeProps ] ) , /* @__PURE__ */ jsx ( DataListContext . Provider , { value : {
listCode ,
onClickCallback ,
onReload ,
getBase62params ,
onPageChange ,
onPageSizeChange ,
onTabChange ,
onSiderChange ,
onKeywordChange ,
onConditonChange
} , children : framework ? React . cloneElement ( framework , { ... props , $setting : themeProps } ) : isItemGridLayout ? /* @__PURE__ */ jsx ( DataListFramework , { ... props , $setting : themeProps } ) : /* @__PURE__ */ jsx ( DataTableFramework , { ... props , $setting : themeProps } ) } ) ;
} ;
DataList$1 . defaultProps = {
onReload : ( ) => {
} ,
getBase62params : ( ) => {
}
} ;
const loadDataListFieldWidget = ( widget , value , record , widgetSetting , base62params ) => {
const Widget = React . lazy ( ( ) => core . getWidgetComponent ( widget ) . catch ( ( e ) => ( { default : ( ) => ` ${ e } ` } ) ) ) ;
return /* @__PURE__ */ jsx ( React . Suspense , { children : /* @__PURE__ */ jsx (
Widget ,
{
value ,
record ,
$setting : widgetSetting ,
base62params
}
) } , widget ) ;
} , useColumnsRender = ( columns , base62params = { } ) => ( usePrevious ( columns ) , usePrevious ( base62params ) , useMemo ( ( ) => columns == null ? void 0 : columns . map ( ( { widgetByJs , widgetByJsSetting , ... item } , i ) => widgetByJs && ! widgetByJs . endsWith ( "/BasicShowFieldData" ) ? {
... item ,
render : ( value , record ) => {
const widgetByJsRender = loadDataListFieldWidget ( widgetByJs , value , record , widgetByJsSetting , base62params ) ;
return _ . isFunction ( item == null ? void 0 : item . render ) ? item . render ( widgetByJsRender , value , record ) : widgetByJsRender ;
}
} : item ) , [ columns , base62params ] ) ) , useStructure = ( listCode ) => {
const [ option , setOption ] = useState ( { } ) ;
return useEffect ( ( ) => {
let flag = ! 1 ;
return listCode && http . get ( ` /api/_/ ${ listCode } ` ) . then ( ( data2 ) => _ . pick ( data2 , [
"uuid" ,
"name" ,
"code" ,
"resource" ,
"marginX" ,
"marginY" ,
"cols" ,
"rowHeight" ,
"primaryKey" ,
"columns" ,
"itemOperations" ,
"batchOperations" ,
"isConditionFormLayout" ,
"layout" ,
"tabs" ,
"pageSize" ,
"layoutConfig"
] ) ) . then ( ( data2 ) => ! flag && setOption ( data2 ) ) , ( ) => flag = ! 0 ;
} , [ listCode ] ) , option ;
} , useDataSource = ( listCode , base62params = { } ) => {
const [ option , setOption ] = useState ( { dataSource : [ ] } ) ;
return useDeepEqualEffect ( ( ) => {
let flag = ! 1 ;
return listCode && http . get ( ` /api/ ${ listCode } / ${ http . encode ( { page : 1 , ... base62params } )} ` ) . then ( ( data2 ) => ! flag && setOption ( data2 ) ) , ( ) => flag = ! 0 ;
} , [ listCode , base62params ] ) , option ;
} , useHasOperationColumn = ( operations , dataSource = null , itemOperationsAccess = null , pk = "id" ) => useMemo ( ( ) => {
if ( _ . isEmpty ( operations ) || ! operations . every ( ( { uuid } ) => auth . check ( uuid ) ) )
return ! 1 ;
if ( _ . isEmpty ( itemOperationsAccess ) || _ . isEmpty ( dataSource ) )
return ! 0 ;
const ids = dataSource . map ( ( item ) => item == null ? void 0 : item [ pk ] ) ;
return operations . some ( ( { uuid } ) => ! uuid || ! itemOperationsAccess . has ( uuid ) ? ! 0 : itemOperationsAccess . get ( uuid ) . some ( ( oper ) => ids . includes ( oper ) ) ) ;
} , [ operations , dataSource , itemOperationsAccess , pk ] ) , DataListHelper = React . forwardRef ( ( { listCode , base62params , className , itemClassName , theme : _theme , themeProps , classNames } , ref ) => {
2024-07-19 13:08:18 +08:00
const [ { tab , page , total , condition , sider , keyword , dataSource , itemOperationsAccess , pageSize } , setData ] = useState ( base62params ) , [ {
2024-07-12 10:30:05 +08:00
resource ,
primaryKey ,
batchOperations = [ ] ,
itemOperations = [ ] ,
columns = [ ] ,
themeConfig ,
theme ,
2024-07-19 13:08:18 +08:00
isConditionFormLayout = ! 1 ,
2024-07-12 10:30:05 +08:00
isTreeSider ,
treeSiderConfig ,
isItemGridLayout ,
itemGridLayout ,
title ,
isPaginate ,
tabs
} , setStructure ] = useState ( { isItemGridLayout : ! 1 , itemGridLayout : { } } ) , initData = ( params ) => http . list ( listCode , { tab , page , total , condition , sider , keyword , ... params } ) . then ( ( {
2024-07-19 13:08:18 +08:00
keyword : keyword2 ,
2024-07-12 10:30:05 +08:00
condition : condition2 ,
total : total2 ,
tab : tab2 ,
page : page2 ,
pageSize : pageSize2 ,
operationsAccess ,
dataSource : dataSource2
} ) => {
setData ( {
dataSource : dataSource2 ,
pageSize : pageSize2 ,
total : total2 ,
page : page2 ,
tab : tab2 ,
condition : condition2 ,
sider ,
2024-07-19 13:08:18 +08:00
keyword : keyword2 ,
2024-07-12 10:30:05 +08:00
itemOperationsAccess : new Map ( operationsAccess )
} ) ;
} ) , isItemOperations = useHasOperationColumn ( itemOperations , dataSource , itemOperationsAccess , primaryKey ) , isBatchOperations = useHasOperationColumn ( batchOperations ) ;
useEffect ( ( ) => {
let unsubscribe = null ;
return listCode && http . get ( ` /api/_/ ${ listCode } ` ) . resp ( ( { data : data2 , res } ) => {
data2 != null && data2 . isDynamicRefresh && ( unsubscribe = ResWs$1 . subscribe ( ( ) => initData ( ) , res ) ) , setStructure ( data2 ) ;
} ) . catch ( ( ) => setStructure ( { } ) ) , setData ( ( data2 ) => ( { ... data2 , dataSource : [ ] } ) ) , ( ) => unsubscribe == null ? void 0 : unsubscribe ( ) ;
} , [ listCode ] ) , useEffect ( ( ) => {
listCode && initData ( base62params ) ;
} , [ JSON . stringify ( base62params ) ] ) ;
const onConditonChange = ( value , keyword2 ) => initData ( { keyword : keyword2 , condition : update ( condition || { } , { $merge : value || { } } ) , page : 1 } ) , onTabChange = ( tab2 ) => initData ( { tab : tab2 , page : 1 } ) , onSiderChange = ( sider2 ) => initData ( { sider : sider2 , page : 1 } ) , onKeywordChange = ( keyword2 ) => initData ( { keyword : keyword2 , page : 1 } ) , onPageChange = ( page2 , pageSize2 ) => initData ( { page : page2 , pageSize : pageSize2 } ) , onPageSizeChange = ( pageSize2 ) => initData ( { pageSize : pageSize2 , page : 1 } ) , getBase62params = ( k , defaultValue , isInit = ! 1 ) => {
if ( k == "init" )
return base62params ;
const params = { tab , sider , keyword , page , pageSize , condition , total } ;
return k ? _ . get ( params , k , defaultValue ) : params ;
} , onReload = ( ) => {
initData ( ) ;
} , onClickCallback = ( isRefresh = 0 , item = null ) => {
if ( isRefresh === 2 ) {
const parentPk = _ . get ( item , "__PARENT_ID__" , "" ) , pk = _ . get ( item , primaryKey , _ . get ( item , [ resource , primaryKey ] , "" ) ) , pIndex = _ . findIndex ( dataSource , [ "__PARENT_ID__" , parentPk ] ) , index2 = _ . findIndex ( pIndex > - 1 ? _ . get ( dataSource , [ pIndex , "children" ] ) : dataSource , [ primaryKey , pk ] ) ;
index2 > - 1 ? ( http . get ( ` /api/ ${ listCode } /detail/ ${ pk } ` ) . then ( ( resp ) => {
setData ( ( data2 ) => {
const children = _ . get ( data2 . dataSource , pIndex > - 1 ? [ pIndex , "children" , index2 , "children" ] : [ index2 , "children" ] ) ;
return {
... data2 ,
dataSource : pIndex > - 1 ? update ( data2 . dataSource , { [ pIndex ] : { children : { $splice : [ [ index2 , 1 , { ... resp , children } ] ] } } } ) : update ( data2 . dataSource , { $splice : [ [ index2 , 1 , { ... resp , children } ] ] } )
} ;
} ) ;
} ) , http . post ( ` /api/ ${ listCode } /list-operations-access ` , { ids : pk } ) . then ( ( data2 ) => new Map ( data2 ) ) . then ( ( detailAccess ) => {
setData ( ( data2 ) => ( data2 . itemOperationsAccess . forEach ( ( ids , uuid ) => {
var _a ;
( _a = detailAccess . get ( uuid ) ) != null && _a . some ( ( item2 ) => item2 == pk ) || data2 . itemOperationsAccess . set ( uuid , ids . filter ( ( id ) => id !== pk ) ) ;
} ) , detailAccess . forEach ( ( ids , uuid ) => {
data2 . itemOperationsAccess . has ( uuid ) ? data2 . itemOperationsAccess . set ( uuid , _ . uniq ( [ ... data2 . itemOperationsAccess . get ( uuid ) || [ ] , ... ids ] ) ) : data2 . itemOperationsAccess . set ( uuid , ids ) ;
} ) , { ... data2 } ) ) ;
} ) ) : onReload ( ) ;
} else
isRefresh === 1 && onReload ( ) ;
} ;
return React . useImperativeHandle ( ref , ( ) => ( {
onReload ,
onClickCallback
} ) ) , /* @__PURE__ */ jsx (
DataList$1 ,
{
... {
listCode ,
title ,
itemClassName ,
classNames ,
resource ,
primaryKey ,
theme : _theme || theme ,
themeProps : themeProps || themeConfig ,
isPaginate ,
pageSize ,
page ,
isTreeSider ,
treeSiderConfig ,
tabs ,
isItemOperations ,
isBatchOperations ,
batchOperations ,
itemOperations ,
itemOperationsAccess ,
dataSource ,
isItemGridLayout ,
columns ,
2024-07-19 13:08:18 +08:00
itemGridLayout ,
isConditionFormLayout
2024-07-12 10:30:05 +08:00
} ,
className : cx ( "ff-data-list-helper" , className ) ,
getBase62params ,
onReload ,
onClickCallback ,
onConditonChange ,
onTabChange ,
onSiderChange ,
onKeywordChange ,
onPageChange ,
onPageSizeChange
}
) ;
2024-07-19 13:08:18 +08:00
} ) , DataListFilter = ( { className , isConditionFormLayout } ) => {
2024-07-12 10:30:05 +08:00
var _a , _b ;
const [ structure , setStructure ] = useState ( { } ) , { listCode , onKeywordChange , onConditonChange , getBase62params } = React . useContext ( DataListContext ) , { keyword , condition } = getBase62params ( ) || { } , [ form ] = Form$1 . useForm ( ) ;
useEffect ( ( ) => {
2024-07-19 13:08:18 +08:00
listCode && isConditionFormLayout && http . get ( ` /api/_/ ${ listCode } /list-condition-form-layout ` ) . then ( ( { resource , marginX , marginY , rowHeight , cols , fields } ) => {
2024-07-12 10:30:05 +08:00
setStructure ( { resource , itemMargin : [ marginX , marginY ] , rowHeight , cols , fields } ) ;
} ) . catch ( ( ) => setStructure ( { } ) ) ;
2024-07-19 13:08:18 +08:00
} , [ listCode , isConditionFormLayout ] ) , useEffect ( ( ) => {
2024-07-12 10:30:05 +08:00
form . setFieldsValue ( { keyword , ... condition } ) ;
} , [ JSON . stringify ( [ keyword , condition ] ) ] ) ;
const onReset = ( ) => {
const { keyword : keyword2 , condition : condition2 } = getBase62params ( "init" ) || { } ;
form . setFieldsValue ( { keyword : keyword2 , ... condition2 } ) ;
2024-07-19 13:08:18 +08:00
} , onSubmit = ( value ) => onConditonChange ( {
[ structure . resource ] : value [ structure . resource ]
} , value . keyword ) , onKeywordSearch = ( value ) => onKeywordChange ( value ) ;
2024-07-12 10:30:05 +08:00
return /* @__PURE__ */ jsx ( "div" , { className : cx ( "ff-data-list-filter" , className ) , children : /* @__PURE__ */ jsx (
Form$1 ,
{
form ,
layout : "vertical" ,
autoComplete : "off" ,
onFinish : ( ( _a = structure . fields ) == null ? void 0 : _a . length ) > 1 ? onSubmit : ( ) => {
} ,
children : ( ( _b = structure . fields ) == null ? void 0 : _b . length ) > 1 ? /* @__PURE__ */ jsx ( GridLayoutForm , { ... structure , children : /* @__PURE__ */ jsx ( DataListFilterAction , { onReset } ) } ) : /* @__PURE__ */ jsx ( "div" , { className : "ff-data-list-filter-default-form ff-grid-layout-form" , children : /* @__PURE__ */ jsx ( "div" , { className : "grid-layout-item" , style : getBoxStyle ( 20 , 0 , 5 , 2 ) , children : /* @__PURE__ */ jsx ( Form$1 . Item , { name : [ "keyword" ] , children : /* @__PURE__ */ jsx ( Input . Search , { allowClear : ! 0 , enterButton : "搜索" , placeholder : "多关键字 | 分割" , onSearch : onKeywordSearch } ) } ) } ) } )
}
) } ) ;
} , DataListFilterAction = ( { cols , fields , onReset } ) => {
const [ expanded , setExpanded ] = useState ( ! 1 ) , isMore = useMemo ( ( ) => fields == null ? void 0 : fields . toReversed ( ) . some ( ( item ) => item . y > 1 || item . x + item . w >= cols - 5 ) , [ cols , fields ] ) ;
return /* @__PURE__ */ jsxs ( Form$1 . Item , { label : " " , style : { "--item-span" : 5 } , className : cx ( "ff-data-list-filter-actions" , { expanded } ) , children : [
/* @__PURE__ */ jsx ( Button$1 , { onClick : onReset , children : "重置" } ) ,
/* @__PURE__ */ jsx ( Button$1 , { type : "primary" , htmlType : "submit" , children : "查询" } ) ,
isMore && /* @__PURE__ */ jsx (
Button . Link ,
{
className : "ff-data-list-filter-expanded-button" ,
widget : ( ) => setExpanded ( ( flag ) => ! flag ) ,
type : "primary" ,
name : expanded ? "关闭" : "展开" ,
icon : expanded ? "icon-up" : "icon-down" ,
iconPosition : "end"
}
)
] } ) ;
} ;
DataListFilter . reservedFields = [
{
x : 0 ,
y : 0 ,
h : 3 ,
w : 5 ,
field : {
isVirtual : ! 0 ,
widgetPrefix : "@pkg/grid-layout-forms" ,
widget : "Input" ,
code : "keyword" ,
label : "关键字" ,
placeholder : "多关键字 | 分割" ,
extras : { prefix : "icon-search" }
}
}
] ;
const DataListToolbar = ( { className , title , tabs , tab , onTabChange } ) => {
2024-07-19 13:08:18 +08:00
const [ tabValue , setTabValue ] = useMergedState ( tabs == null ? void 0 : tabs [ 0 ] . value , { value : tab , onChange : onTabChange } ) ;
2024-07-12 10:30:05 +08:00
return /* @__PURE__ */ jsxs ( "div" , { className : cx ( "ff-data-list-toolbar" , className ) , children : [
/* @__PURE__ */ jsx ( "div" , { className : "ff-data-list-title" , children : title } ) ,
/* @__PURE__ */ jsx (
Breadcrumb ,
{
className : "ff-data-list-tabs" ,
itemRender : ( { label , code : value } ) => /* @__PURE__ */ jsx ( "span" , { onClick : ( ) => setTabValue ( value ) , className : cx ( "ff-data-list-tab" , { active : value == tabValue } ) , children : label } ) ,
items : tabs
}
) ,
/* @__PURE__ */ jsxs ( "div" , { className : "ff-data-list-actions" , children : [
/* @__PURE__ */ jsx ( Button . Link , { icon : "icon-reload" } ) ,
/* @__PURE__ */ jsx ( Button . Link , { icon : "icon-setting" } )
] } )
] } ) ;
} , treeData = [
{
title : "parent 1" ,
key : "0-0" ,
children : [
{
title : "parent 1-0" ,
key : "0-0-0" ,
disabled : ! 0 ,
children : [
{
title : "leaf" ,
key : "0-0-0-0" ,
disableCheckbox : ! 0
} ,
{
title : "leaf" ,
key : "0-0-0-1"
}
]
} ,
{
title : "parent 1-1" ,
key : "0-0-1" ,
children : [
{
title : /* @__PURE__ */ jsx (
"span" ,
{
style : {
color : "#1677ff"
} ,
children : "sss"
}
) ,
key : "0-0-1-0"
}
]
}
]
}
] , DataListSider = ( { className , width , isTreeSider } ) => isTreeSider ? /* @__PURE__ */ jsx (
Tree . DirectoryTree ,
{
className : cx ( "ff-data-list-sider" , className ) ,
style : { "--sider-width" : width } ,
showLine : ! 0 ,
showIcon : ! 1 ,
treeData
}
) : null ;
DataListSider . defaultProps = {
width : 280
} ;
const DataListFooter = ( { className , operations , isOperations , isPaginate , total , page , pageSize } ) => {
const { onPageChange , onPageSizeChange , onClickCallback } = React . useContext ( DataListContext ) ;
return isOperations && ! _ . isEmpty ( operations ) || isPaginate ? /* @__PURE__ */ jsxs ( "div" , { className : cx ( "ff-data-list-footer" , className ) , children : [
/* @__PURE__ */ jsx ( "div" , { className : "ff-data-list-actions" , children : operations == null ? void 0 : operations . map ( ( item , i ) => /* @__PURE__ */ jsx (
Button ,
{
uuid : item . uuid ,
type : item . type ,
name : item . name ,
widget : item . widget ,
widgetType : item . widgetType ,
widgetProps : item . widgetProps ,
widgetSetting : item . widgetSetting ,
widgetContainerProps : item . widgetContainerSetting ,
onAfterClick : ( e ) => e !== ! 1 && ( onClickCallback == null ? void 0 : onClickCallback ( item . isRefresh , null ) )
} ,
item . uuid || i
) ) } ) ,
isPaginate && /* @__PURE__ */ jsx (
Pagination ,
{
size : "small" ,
total ,
pageSize ,
showSizeChanger : ! 1 ,
showTotal : ( total2 ) => ` 第 ${ page } 页 / 总共 ${ total2 } 条 ` ,
onChange : onPageChange ,
onShowSizeChange : onPageSizeChange
}
)
] } ) : null ;
} , getDefaultExpandRowKeys = ( data2 , key , depth = ! 0 ) => depth !== ! 0 && depth -- <= 0 ? [ ] : _ . isArray ( data2 ) && ! _ . isEmpty ( data2 ) ? data2 . reduce ( ( res , item ) => ( Reflect . has ( item , key ) && Reflect . has ( item , "children" ) && res . push ( item [ key ] ) , Reflect . has ( item , "children" ) && ! _ . isEmpty ( item . children ) ? res . concat ( getDefaultExpandRowKeys ( item . children , key , depth ) ) : res ) , [ ] ) : [ ] , DataListTable = ( {
className ,
primaryKey ,
columns ,
dataSource ,
operationRender ,
operationWidth ,
... props
} ) => {
const tableRef = useRef ( null ) , divRef = useRef ( null ) , [ expandedRowKeys , setExpandedRowKeys ] = useState ( [ ] ) , [ divSize , setDivSize ] = useState ( { width : 0 , height : 0 } ) ;
useEffect ( ( ) => {
setExpandedRowKeys ( getDefaultExpandRowKeys ( dataSource , primaryKey ) ) ;
} , [ dataSource , primaryKey ] ) , useLayoutEffect ( ( ) => {
const resizeObserver = new ResizeObserver ( ( ) => {
var _a ;
setDivSize ( {
width : ( ( _a = tableRef . current ) == null ? void 0 : _a . nativeElement . querySelector ( ".ant-table-body" ) . scrollWidth ) || divRef . current . offsetWidth ,
height : divRef . current . offsetHeight
} ) ;
} ) ;
return divRef . current && resizeObserver . observe ( divRef . current ) , ( ) => {
divRef . current && resizeObserver . unobserve ( divRef . current ) ;
} ;
} , [ ] ) ;
const newColumns = useColumnsRender ( columns ) ;
return /* @__PURE__ */ jsx ( "div" , { ref : divRef , className : cx ( "ff-data-list-table" , className ) , children : divSize . height ? /* @__PURE__ */ jsx (
Table ,
{
... props ,
ref : tableRef ,
rowKey : ( v , index2 ) => ( v == null ? void 0 : v [ primaryKey ] ) ? ? index2 ,
columns : newColumns == null ? void 0 : newColumns . concat ( operationRender ? [ {
title : "操作" ,
align : "center" ,
fixed : "right" ,
width : ` ${ Math . ceil ( operationWidth / divSize . width * 100 ) . toFixed ( 2 ) } % ` ,
render : ( _text , record , index2 ) => operationRender ( record , index2 )
} ] : [ ] ) ,
dataSource ,
size : "middle" ,
2024-07-19 13:08:18 +08:00
scroll : { x : "max-content" , y : divSize . height - 50 } ,
2024-07-12 10:30:05 +08:00
pagination : ! 1 ,
expandable : {
defaultExpandAllRows : ! 0 ,
expandRowByClick : ! 0 ,
onExpandedRowsChange : setExpandedRowKeys ,
expandedRowKeys
}
}
) : null } ) ;
} ;
DataListTable . defaultProps = {
operationWidth : 180 ,
columns : [ ] ,
dataSource : [ ]
} ;
const GridLayoutWidget = ( { widget , widgetPrefix , basicForm , ... props } ) => {
const itemWidget = widget != null && widget . startsWith ( "@" ) ? widget : ` ${ widgetPrefix } / ${ widget } ` , [ ItemWidget2 , setItemWidget ] = useState ( ) ;
return useEffect ( ( ) => {
itemWidget && core . getWidgetComponent ( itemWidget ) . then ( ( { defaultProps , default : ItemWidget22 } ) => ( {
default : itemWidgetRender ( ItemWidget22 , defaultProps , basicForm )
} ) ) . catch ( ( e ) => ( { default : ( ) => ` ${ e } ` } ) ) . then ( ( res ) => setItemWidget ( React . createElement ( res . default , props ) ) ) ;
} , [ itemWidget ] ) , ItemWidget2 ;
} , itemWidgetRender = ( ItemWidget2 , defaultProps , basicForm = null ) => ( props ) => {
const {
code ,
label ,
extras ,
isVirtual ,
initialValue ,
initialValueLanguage ,
convertJs ,
convertJsSetting ,
value : _value ,
... itemWidgetProps
} = _ . merge ( { } , defaultProps , props ) , [ value , rawValue ] = useField ( isVirtual ? null : code , {
initialValue ,
initialValueLanguage ,
convertJs ,
convertJsSetting ,
type : ( itemWidgetProps == null ? void 0 : itemWidgetProps . type ) || "string"
} , basicForm ) ;
return /* @__PURE__ */ jsx ( ItemWidget2 , { ... itemWidgetProps , value , rawValue , $setting : extras || { } } ) ;
} ;
GridLayoutWidget . defaultProps = {
widgetPrefix : "@pkg/grid-layouts"
} ;
const DataListContent = ( {
cols ,
rowHeight ,
itemMargin ,
fields ,
primaryKey ,
itemRender ,
dataSource ,
itemClassName ,
empty ,
className ,
style
} ) => {
const id = useId$1 ( ) , GridLayoutElement = useMemo ( ( ) => /* @__PURE__ */ jsx (
GridLayout ,
{
cols ,
rowHeight ,
itemMargin ,
fields ,
className : itemClassName
}
) , [ fields , cols , rowHeight , itemMargin ] ) ;
return /* @__PURE__ */ jsx ( "div" , { className : cx ( "ff-data-list-content" , className ) , style , children : _ . isEmpty ( dataSource ) ? empty : dataSource == null ? void 0 : dataSource . map ( ( item , i ) => /* @__PURE__ */ jsx ( React . Fragment , { children : itemRender ( React . cloneElement ( GridLayoutElement , { data : item } ) , item , i ) } , ` ${ id } - ${ ( item == null ? void 0 : item [ primaryKey ] ) || i } ` ) ) } ) ;
} ;
DataListContent . defaultProps = {
itemRender : ( children , data2 , index2 ) => children ,
empty : /* @__PURE__ */ jsx ( Empty$1 , { description : null } ) ,
style : { }
} ;
const redirect = ( params , widget , { isReplaceRouteHistory = ! 1 } = { } ) => route . redirect ( widget , params , { replace : isReplaceRouteHistory } ) , func = ( params , widget , { status : { loading , disabled } , setStatus } ) => {
const extras = {
loading : ( flag ) => flag === void 0 ? loading : setStatus ( ( data2 ) => ( { ... data2 , loading : flag } ) ) ,
disabled : ( flag ) => flag === void 0 ? disabled : setStatus ( ( data2 ) => ( { ... data2 , disabled : flag } ) )
} ;
return _ . isFunction ( widget ) ? widget . call ( null , { ... params , ... extras } ) : _ . isString ( widget ) && widget ? fn . exec ( widget , params , extras ) : null ;
} , component = ( data2 , widget , widgetSetting , widgetContainerProps ) => _ . isString ( widget ) && widget ? core . getWidgetComponent ( widget ) . then ( ( { default : WidgetComponent } ) => FFPopupRender . modal (
WidgetComponent ,
{ ... data2 , $setting : widgetSetting } ,
widgetContainerProps
) ) . catch ( ( e ) => {
FFPopupRender . error ( widget , { content : e . toString ( ) } ) ;
} ) : FFPopupRender . modal (
widget ,
{ ... data2 , $setting : widgetSetting } ,
widgetContainerProps
) , gridLayoutForm = ( data2 , widget , widgetSetting , widgetContainerProps ) => FFPopupRender . modal (
GridLayoutFormHelper ,
{ ... data2 , $setting : widgetSetting , code : widget } ,
widgetContainerProps
) , list = ( data2 , widget , widgetSetting , widgetContainerProps ) => FFPopupRender . modal (
DataListHelper ,
{ base62params : data2 , $setting : widgetSetting , listCode : widget } ,
widgetContainerProps
) , useButton = ( {
widget ,
widgetType ,
widgetData ,
widgetProps ,
widgetSetting ,
widgetContainerProps
} , { onAfterClick , onBeforeClick } ) => {
const listFn = useContext ( DataListContext ) ;
useContext ( AppGlobalParamsContext ) ;
const [ status , setStatus ] = useState ( { leading : ! 0 , trailing : ! 1 } ) , fn2 = useMemo ( ( ) => {
switch ( widgetType ) {
case "redirect" :
return _ . partialRight ( redirect , widget , widgetSetting ) ;
case "func" :
return _ . partialRight ( func , ( widgetSetting == null ? void 0 : widgetSetting . code ) ? ? widget , { status , setStatus } ) ;
case "fsdpf-component" :
return _ . partialRight ( component , widget , widgetSetting , widgetContainerProps ) ;
case "grid-layout-form" :
return _ . partialRight ( gridLayoutForm , widget , widgetSetting , widgetContainerProps ) ;
case "data-list" :
return _ . partialRight ( list , widget , widgetSetting , widgetContainerProps ) ;
default :
if ( isReactComponent ( widget ) || React . isValidElement ( widget ) )
return _ . partialRight ( component , widget , widgetSetting , widgetContainerProps ) ;
if ( _ . isFunction ( widget ) )
return _ . partialRight ( func , ( widgetSetting == null ? void 0 : widgetSetting . code ) || widget , { status , setStatus } ) ;
}
return ( ... args ) => console . error ( "useButton unknown widgetType" , widgetType , ... args ) ;
} , [ widget , widgetType ] ) ;
return [ _ . debounce ( ( data2 ) => ( onBeforeClick == null || onBeforeClick ( data2 ) , Promise . resolve ( getWidgetPropsData ( widgetProps , data2 , { list : listFn } ) ) . then ( ( data22 ) => fn2 ( { ... widgetData , ... data22 } ) ) . then ( ( result ) => onAfterClick == null ? void 0 : onAfterClick ( result ) ) . catch ( console . error ) ) , 300 , { leading : ! 0 , trailing : ! 1 } ) , status ] ;
} ;
var _instance2 , _data ;
const _OperationAuth = class _OperationAuth {
constructor ( ) {
_ _privateAdd ( this , _data , null ) ;
_ _publicField ( this , "init" , ( data2 ) => _ _privateSet ( this , _data , new Map ( data2 ) ) ) ;
_ _publicField ( this , "check" , ( uuid ) => ! _ _privateGet ( this , _data ) . has ( uuid ) || _ _privateGet ( this , _data ) . get ( uuid ) ) ;
if ( _ _privateGet ( _OperationAuth , _instance2 ) )
return _ _privateGet ( _OperationAuth , _instance2 ) ;
}
} ;
_instance2 = new WeakMap ( ) , _data = new WeakMap ( ) , _ _privateAdd ( _OperationAuth , _instance2 , null ) , _ _publicField ( _OperationAuth , "getInstance" , ( ) => ( _ _privateGet ( _OperationAuth , _instance2 ) || _ _privateSet ( _OperationAuth , _instance2 , new _OperationAuth ( ) ) , _ _privateGet ( _OperationAuth , _instance2 ) ) ) ;
let OperationAuth = _OperationAuth ;
const auth = OperationAuth . getInstance ( ) , entry = ( cate ) => function ( {
className ,
children ,
name ,
icon ,
type ,
data : data2 ,
noAuthType ,
onAfterClick ,
onBeforeClick ,
loading : customLoading ,
disabled : customDisabled ,
tooltip ,
popConfirm ,
widget ,
widgetType ,
widgetData ,
widgetProps ,
widgetSetting ,
widgetContainerProps ,
... props
} ) {
const btnProps = {
type : "primary" ,
className : cx ( "ff-button" , className )
} ;
type === "danger" ? btnProps . danger = ! 0 : type === "default" && ( btnProps . type = type ) , cate === "link" || cate === "dashed" ? ( btnProps . type = cate , type === "default" && ( btnProps . className = cx ( btnProps . className , "ff-default" ) ) ) : ( cate === "circle" || cate === "round" ) && ( btnProps . shape = cate ) , icon && ( btnProps . icon = /* @__PURE__ */ jsx ( Iconfont , { type : icon } ) ) ;
const [ confirmOpen , setConfirmOpen ] = useState ( ! 1 ) , [ onClick , { disabled , loading } ] = useButton ( { widget , widgetType , widgetData , widgetProps , widgetSetting , widgetContainerProps } , { onAfterClick , onBeforeClick } ) ;
return /* @__PURE__ */ jsx (
Popconfirm ,
{
okText : "确定" ,
cancelText : "取消" ,
... popConfirm || { } ,
disabled : disabled || customDisabled ,
open : confirmOpen ,
onOpenChange : ( flag ) => {
if ( ! flag )
return setConfirmOpen ( flag ) ;
popConfirm ? setConfirmOpen ( flag ) : onClick ( data2 ) ;
} ,
onConfirm : ( ) => {
onClick ( data2 ) ;
} ,
onClick : ( e ) => {
e . stopPropagation ( ) ;
} ,
children : /* @__PURE__ */ jsx ( Tooltip , { ... tooltip , title : confirmOpen ? null : tooltip == null ? void 0 : tooltip . title , trigger : [ "hover" , "click" ] , children : /* @__PURE__ */ jsx (
Button$1 ,
{
loading : loading || customLoading ,
disabled : disabled || customDisabled ,
... btnProps ,
... props ,
children : children || name
}
) } )
}
) ;
} , Button = entry ( "default" ) , Link = entry ( "link" ) , Circle = entry ( "circle" ) , Round = entry ( "round" ) , Dashed = entry ( "dashed" ) , Popover = ( { data : data2 , widget , widgetType , children , widgetData , widgetProps , widgetSetting , widgetContainerProps } ) => {
const listFn = useContext ( DataListContext ) , [ open , setOpen ] = useState ( ! 1 ) , [ trigger , setTrigger ] = useState ( "hover" ) , [ componentData , setComponentData ] = useState ( { } ) , [ component2 , setComponent ] = useState ( ) ;
useEffect ( ( ) => {
widgetType == "grid-layout-form" ? setComponent ( React . createElement ( GridLayoutFormHelper , { ... widgetData , $setting : widgetSetting , code : widget } ) ) : widgetType == "data-list" ? setComponent ( React . createElement ( DataListHelper , { base62params : data2 , $setting : widgetSetting , listCode : widget } ) ) : _ . isString ( widget ) ? core . getWidgetComponent ( widget ) . then ( ( { default : WidgetComponent } ) => {
setComponent ( React . createElement ( WidgetComponent , { ... widgetData , $setting : widgetSetting } ) ) ;
} ) . catch ( ( e ) => setComponent ( e . toString ( ) ) ) : isReactComponent ( widget ) ? setComponent ( React . createElement ( widget , { ... widgetData , $setting : widgetSetting } ) ) : React . isValidElement ( widget ) && setComponent ( React . cloneElement ( widget , { ... widgetData , $setting : widgetSetting } ) ) ;
} , [ widget , widgetType , widgetData ] ) , useEffect ( ( ) => {
Promise . resolve ( getWidgetPropsData ( widgetProps , data2 , { list : listFn } ) ) . then ( setComponentData ) ;
} , [ widgetProps , data2 ] ) ;
const onOpenChange = ( flag ) => {
setOpen ( flag ) , ! flag && setTrigger ( "hover" ) ;
} , onClick = ( ) => {
setOpen ( ! 0 ) , setTrigger ( "click" ) ;
} ;
return /* @__PURE__ */ jsx (
Popover$1 ,
{
zIndex : 1e3 ,
... widgetContainerProps ,
onPopupClick : onClick ,
onClick ,
open ,
trigger ,
content : /* @__PURE__ */ jsx ( PopoverContent , { children : component2 && React . cloneElement ( component2 , { ... componentData , $close : ( ) => onOpenChange ( ! 1 ) } ) } ) ,
children ,
onOpenChange ,
overlayClassName : "ff-popup ff-popover"
}
) ;
} , PopoverContent = ( { children } ) => {
const [ ele , setEle ] = useState ( { } ) , onMount = useCallback ( ( solt , ele2 ) => setEle ( ( state ) => ( { ... state , [ solt ] : ele2 } ) ) , [ ] ) , onUnmount = useCallback ( ( solt ) => setEle ( ( state ) => ( { ... state , [ solt ] : void 0 } ) ) , [ ] ) ;
return /* @__PURE__ */ jsxs ( SlotContext . Provider , { value : { ele , mount : onMount , unmount : onUnmount } , children : [
ele != null && ele . title || ele != null && ele [ "sub-title" ] ? /* @__PURE__ */ jsxs ( "div" , { className : "ff-popup-header" , children : [
( ele == null ? void 0 : ele . title ) || /* @__PURE__ */ jsx ( "div" , { className : "ff-popup-title" } ) ,
( ele == null ? void 0 : ele [ "sub-title" ] ) || /* @__PURE__ */ jsx ( "div" , { className : "ff-popup-sub-title" } )
] } ) : null ,
children ,
ele != null && ele . extras || ele != null && ele . actions ? /* @__PURE__ */ jsxs ( "div" , { className : "ff-popup-footer" , children : [
( ele == null ? void 0 : ele . extras ) || /* @__PURE__ */ jsx ( "div" , { className : "ff-popup-extras" } ) ,
( ele == null ? void 0 : ele . actions ) || /* @__PURE__ */ jsx ( "div" , { className : "ff-popup-actions" } )
] } ) : null
] } ) ;
} ;
Popover . defaultProps = {
widgetType : "fsdpf-component"
} ;
Popover . propTypes = {
widgetType : PropTypes . oneOf ( [ "fsdpf-component" , "grid-layout-form" , "data-list" ] )
} ;
Button . defaultProps = {
type : "default" ,
iconPosition : "start"
} ;
Button . propTypes = {
type : PropTypes . oneOf ( [ "primary" , "default" , "danger" , "" ] ) ,
name : PropTypes . string ,
// 按钮名称
icon : PropTypes . string ,
// 图标
iconPosition : PropTypes . oneOf ( [ "start" , "end" ] ) ,
// 图标位置
data : PropTypes . any ,
// onClick 数据源, 会受到 widgetProps 数据结构影响
widget : PropTypes . any ,
// 组件
widgetType : PropTypes . oneOf ( [ "destroy" , "redirect" , "func" , "fsdpf-component" , "grid-layout-form" , "grid-layout" , "data-list" ] ) ,
// 组件类型
widgetData : PropTypes . object ,
// onClick缺省数据
widgetProps : PropTypes . object ,
// data 数据结构
widgetSetting : PropTypes . object ,
// $setting
widgetContainerProps : PropTypes . object
// 容器配置
} ;
Button . Link = Link ;
Button . Link . defaultProps = Button . defaultProps ;
Button . Link . propTypes = Button . propTypes ;
Button . Circle = Circle ;
Button . Circle . defaultProps = Button . defaultProps ;
Button . Circle . propTypes = Button . propTypes ;
Button . Round = Round ;
Button . Round . defaultProps = Button . defaultProps ;
Button . Round . propTypes = Button . propTypes ;
Button . Dashed = Dashed ;
Button . Dashed . defaultProps = Button . defaultProps ;
Button . Dashed . propTypes = Button . propTypes ;
Button . Popover = Popover ;
const GridLayoutFormHelper = ( { $setting , $close , extras , code , primaryKey , ... props } ) => {
const [ form ] = Form$1 . useForm ( ) , data2 = useFormData ( code , primaryKey , $setting ) ;
useEffect ( ( ) => {
data2 && form . setFieldsValue ( data2 ) ;
} , [ data2 ] ) ;
const onSubmit = ( ) => {
const key = form . getFieldValue ( "__RESOURCE__" ) , {
initDataUri = ` /api/ ${ code } `
} = $setting || { } ;
form . validateFields ( ! 0 ) . then ( ( data22 ) => key ? _ . pick ( data22 , [ key ] ) : data22 ) . then ( ( data22 ) => http . post ( primaryKey ? ` ${ initDataUri } / ${ primaryKey } ` : ` ${ initDataUri } ` , data22 ) . msg ( $close ) ) . catch ( ( ) => FFPopupRender . error ( "请先完善表单信息" , { duration : 2e3 } ) ) ;
} ;
return /* @__PURE__ */ jsx (
FFContainer ,
{
actions : /* @__PURE__ */ jsxs ( React . Fragment , { children : [
/* @__PURE__ */ jsx ( Button , { name : "保存" , type : "primary" , widget : onSubmit } ) ,
/* @__PURE__ */ jsx ( Button , { name : "取消" , widget : ( ) => $close ( ! 1 ) } )
] } ) ,
extras ,
children : /* @__PURE__ */ jsx ( GridLayoutForm$1 , { form , code , primaryKey , ... props } )
}
) ;
} , getOptionItemByValue = ( items , value , depthKey = "children" ) => {
if ( _ . isEmpty ( items ) )
return { } ;
const item = _ . find ( items , [ "value" , value ] ) ;
if ( ! _ . isEmpty ( item ) )
return item ;
const len = items . length ;
for ( let i = 0 ; i < len ; i ++ ) {
const { [ depthKey ] : children } = items [ i ] , result = getOptionItemByValue ( children , value , depthKey ) ;
if ( ! _ . isEmpty ( result ) )
return result ;
}
return { } ;
} , FormModalContainer = ( { fields , formProps , $close } ) => {
const [ form ] = Form$1 . useForm ( ) , onSubmit = ( ) => form . validateFields ( ! 0 ) . then ( $close ) , formPropsFields = useMemo ( ( ) => [
{ name : "__PROPS__" , value : formProps }
] , [ formProps ] ) ;
return /* @__PURE__ */ jsx ( FFContainer , { actions : /* @__PURE__ */ jsxs ( React . Fragment , { children : [
/* @__PURE__ */ jsx ( Button , { name : "取消" , widget : ( ) => $close ( ! 1 ) } ) ,
/* @__PURE__ */ jsx ( Button , { name : "确定" , type : "primary" , widget : ( ) => onSubmit ( ) } )
] } ) , children : /* @__PURE__ */ jsx ( ConfigProvider , { theme : { components : { Form : { itemMarginBottom : 6 } } } , children : /* @__PURE__ */ jsx ( Form$1 , { fields : formPropsFields , layout : "vertical" , form , children : fields == null ? void 0 : fields . map ( ( { code , ... props } ) => /* @__PURE__ */ jsx ( GridLayoutFormWidget , { code , ... props } , code ) ) } ) } ) } ) ;
} ;
var _pending , _index , _renders , _onNotificationClick , _onConfirmClick , _onModalClick , _onFormClick , _onModalClose ;
const _FFPopupRender = class _FFPopupRender extends React . Component {
constructor ( props ) {
super ( props ) ;
_ _privateAdd ( this , _pending , null ) ;
_ _privateAdd ( this , _index , 0 ) ;
_ _privateAdd ( this , _renders , /* @__PURE__ */ new Map ( ) ) ;
_ _privateAdd ( this , _onNotificationClick , ( opts ) => new Promise ( ( resolve ) => {
const index2 = _ _privateWrapper ( this , _index ) . _ ++ ;
_ _privateGet ( this , _renders ) . set ( index2 , React . createElement ( Notification , {
... opts ,
key : index2 ,
$close : ( flag ) => _ _privateGet ( this , _onModalClose ) . call ( this , index2 , ( ) => resolve ( flag ) )
} ) ) , this . forceUpdate ( ) ;
} ) ) ;
_ _privateAdd ( this , _onConfirmClick , ( content , opts ) => new Promise ( ( resolve ) => {
const index2 = _ _privateWrapper ( this , _index ) . _ ++ ;
_ _privateGet ( this , _renders ) . set ( index2 , React . createElement ( Confirm , {
... opts ,
content ,
key : index2 ,
$close : ( flag ) => _ _privateGet ( this , _onModalClose ) . call ( this , index2 , ( ) => resolve ( flag ) )
} ) ) , this . forceUpdate ( ) ;
} ) ) ;
_ _privateAdd ( this , _onModalClick , ( widget , widgetProps , { mode , ... widgetContainerProps } = { } ) => new Promise ( ( resolve ) => {
const index2 = _ _privateWrapper ( this , _index ) . _ ++ , ref = { current : null } ;
_ _privateGet ( this , _renders ) . set ( index2 , React . createElement (
mode == "drawer" ? Drawer : Modal ,
{
ref ,
key : index2 ,
maskClosable : ! 1 ,
... widgetContainerProps ,
$close : ( flag ) => _ _privateGet ( this , _onModalClose ) . call ( this , index2 , ( ) => resolve ( flag ) )
} ,
React . createElement ( widget , {
... widgetProps ,
$close : ( flag ) => ref . current . handleClose ( flag )
} )
) ) , this . forceUpdate ( ) ;
} ) ) ;
_ _privateAdd ( this , _onFormClick , ( fields , widgetContainerProps = { } , formProps = { } ) => _ _privateGet ( this , _onModalClick ) . call ( this , FormModalContainer , { formProps , fields } , widgetContainerProps ) . then ( ( resp ) => {
if ( resp === ! 1 )
throw ! 1 ;
return resp ;
} ) ) ;
_ _privateAdd ( this , _onModalClose , ( index2 , cb ) => {
_ _privateGet ( this , _renders ) . delete ( index2 ) , this . forceUpdate ( cb ) ;
} ) ;
_FFPopupRender . modal = _ _privateGet ( this , _onModalClick ) , _FFPopupRender . notification = _ _privateGet ( this , _onNotificationClick ) , _FFPopupRender . confirm = _ _privateGet ( this , _onConfirmClick ) , _FFPopupRender . form = _ _privateGet ( this , _onFormClick ) ;
}
componentWillUnmount ( ) {
var _a , _b ;
( _b = ( _a = _ _privateGet ( this , _pending ) ) == null ? void 0 : _a [ 1 ] ) == null || _b . call ( _a ) ;
}
render ( ) {
const renders = Array . from ( _ _privateGet ( this , _renders ) ) ;
return /* @__PURE__ */ jsx ( React . Fragment , { children : renders . map ( ( [ i , item ] ) => item ) } ) ;
}
} ;
_pending = new WeakMap ( ) , _index = new WeakMap ( ) , _renders = new WeakMap ( ) , _onNotificationClick = new WeakMap ( ) , _onConfirmClick = new WeakMap ( ) , _onModalClick = new WeakMap ( ) , _onFormClick = new WeakMap ( ) , _onModalClose = new WeakMap ( ) ;
let FFPopupRender = _FFPopupRender ;
FFPopupRender . notification = ( { title , content , icon , category , ... opts } ) => Promise . resolve ( notification$1 [ category || "open" ] ( {
... opts ,
icon : icon ? /* @__PURE__ */ jsx ( Iconfont , { type : icon || "" } ) : void 0 ,
message : title ,
description : content
} ) ) ;
FFPopupRender . success = ( title , opts = { } ) => FFPopupRender . notification ( { title , category : "success" , ... opts } ) ;
FFPopupRender . error = ( title , opts = { } ) => FFPopupRender . notification ( { title , category : "error" , ... opts } ) ;
FFPopupRender . confirm = ( content , opts = { } ) => FFPopupRender . notification ( { content , ... opts } ) ;
FFPopupRender . form = ( title , opts = { } ) => FFPopupRender . notification ( { title , ... opts } ) ;
FFPopupRender . modal = ( opts = { } ) => FFPopupRender . notification ( opts ) ;
const USER _MINE = "mine" , USER _TOKEN = "token" , USER _PLATFORM = "web" , USER _TOKEN _EXPIRE = 60 * 60 * 24 * 30 , getUserToken = ( ) => {
const token = window . localStorage . getItem ( USER _TOKEN ) ;
if ( ! token )
return "" ;
const jwt = token . split ( "." ) ;
if ( ! Array . isArray ( jwt ) || jwt . length !== 3 )
throw "登录令牌无效!" ;
const { iat } = JSON . parse ( window . atob ( jwt [ 1 ] ) ) ;
if ( Math . floor ( ( /* @__PURE__ */ new Date ( ) ) . getTime ( ) / 1e3 ) - iat > USER _TOKEN _EXPIRE )
throw "登录令牌已过期, 请重新登录!" ;
return token ;
} , checkUserToken = ( ) => {
try {
return ! ! getUserToken ( ) ;
} catch {
return ! 1 ;
}
} , getUserInfo = ( isAutoLogout = ! 0 ) => {
var _a ;
try {
const token = getUserToken ( ) ;
if ( ! token )
return Promise . resolve ( null ) ;
const { iat : t _iat } = JSON . parse ( window . atob ( ( _a = token == null ? void 0 : token . split ( "." ) ) == null ? void 0 : _a [ 1 ] ) ) , { iat : u _iat , ... User } = http . decode ( window . localStorage . getItem ( USER _MINE ) || "" , { } ) ;
return u _iat === t _iat ? Promise . resolve ( User ) : http . get ( "/api/mine-info" ) . then ( ( { User : User2 = null } ) => ( window . localStorage . setItem ( USER _MINE , http . encode ( { ... User2 , iat : t _iat } ) ) , User2 ) ) ;
} catch ( e ) {
console . error ( e ) , isAutoLogout && FFPopupRender . error ( "请登录" ) . then ( logout ) ;
}
return Promise . resolve ( null ) ;
} , login = ( username , passwd , opts = { } ) => http . post ( "/api/user-token" , {
username ,
passwd : SparkMD5 . hash ( passwd ) ,
platform : USER _PLATFORM ,
... opts
} ) . then ( ( { token } ) => ( window . localStorage . setItem ( USER _TOKEN , token ) , token ) ) , logout = ( ) => {
window . localStorage . removeItem ( USER _MINE ) , window . localStorage . removeItem ( USER _TOKEN ) ;
} ;
NProgress . configure ( { showSpinner : ! 1 } ) ;
axios . interceptors . request . use ( ( config ) => {
config . headers . Platform = "web" , config . headers . SaaS = window . localStorage . getItem ( "SaaS" ) ;
try {
const token = getUserToken ( ) ;
config . headers . Authorization = token ? ` Bearer ${ token } ` : void 0 ;
} catch {
}
return NProgress . inc ( ) , config ;
} , ( errMsg ) => ( NProgress . done ( ) , Promise . reject ( { code : - 1 , msg : errMsg } ) ) ) ;
axios . interceptors . response . use ( ( { data : data2 , headers } ) => ( NProgress . done ( ) , { ... data2 , res : headers == null ? void 0 : headers . res } ) , function ( e ) {
return NProgress . done ( ) , Promise . reject ( e . message ) ;
} ) ;
window . addEventListener ( "unhandledrejection" , Request . onUnhandledRejection ) ;
Request . onMsg = ( code , msg ) => FFPopupRender [ [ 0 , 1 ] . includes ( code ) ? "success" : "error" ] ( msg ) . then ( ( ) => code === 20300 && route . redirect ( configure . get ( "Common.WEBSITE_LOGIN_PAGE" ) ) ) ;
const AppContext = React . createContext ( {
user : { } ,
initUser : ( ) => {
} ,
initUserComplete : ! 1
} ) , AppGlobalParamsContext = React . createContext ( {
set : ( ) => {
} ,
get : ( ) => {
} ,
assign : ( ) => {
} ,
currentRoute : ( ) => {
}
} ) ;
var _cache , _loading , _pending2 , _pResult , _target , _get ;
class Cache {
constructor ( target , fn2 ) {
_ _privateAdd ( this , _cache , /* @__PURE__ */ new Map ( ) ) ;
_ _privateAdd ( this , _loading , ! 0 ) ;
_ _privateAdd ( this , _pending2 , [ ] ) ;
_ _privateAdd ( this , _pResult , void 0 ) ;
_ _privateAdd ( this , _target , ( ) => _ _privateGet ( this , _pResult ) ) ;
_ _privateAdd ( this , _get , ( ) => Promise . resolve ( ) ) ;
_ _publicField ( this , "get" , ( ... args ) => new Promise ( ( resolve , reject ) => {
const key = JSON . stringify ( args ) ;
if ( _ _privateGet ( this , _cache ) . has ( key ) )
return resolve ( _ _privateGet ( this , _get ) . call ( this , _ _privateGet ( this , _pResult ) , ... args ) ) ;
if ( _ _privateGet ( this , _pResult ) === void 0 )
_ _privateGet ( this , _pending2 ) . push ( [ args , resolve , reject ] ) , _ _privateGet ( this , _loading ) && ( _ _privateSet ( this , _loading , ! 1 ) , Promise . resolve ( typeof _ _privateGet ( this , _target ) == "function" ? _ _privateGet ( this , _target ) . call ( this ) : _ _privateGet ( this , _target ) ) . then ( ( data2 ) => _ _privateSet ( this , _pResult , data2 || null ) ) . finally ( ( ) => {
_ _privateGet ( this , _pending2 ) . forEach ( ( [ args2 , resolve2 , reject2 ] ) => {
try {
const result = _ _privateGet ( this , _get ) . call ( this , _ _privateGet ( this , _pResult ) , ... args2 ) ;
_ _privateGet ( this , _cache ) . set ( JSON . stringify ( args2 ) , result ) , resolve2 ( result ) ;
} catch ( e ) {
reject2 ( e ) ;
}
} ) , _ _privateGet ( this , _pending2 ) . length = 0 ;
} ) ) ;
else {
const result = _ _privateGet ( this , _get ) . call ( this , _ _privateGet ( this , _pResult ) , ... args ) ;
_ _privateGet ( this , _cache ) . set ( key , result ) , resolve ( result ) ;
}
} ) ) ;
_ _privateSet ( this , _get , fn2 ) , _ _privateSet ( this , _target , target ) ;
}
}
_cache = new WeakMap ( ) , _loading = new WeakMap ( ) , _pending2 = new WeakMap ( ) , _pResult = new WeakMap ( ) , _target = new WeakMap ( ) , _get = new WeakMap ( ) ;
var _instance3 , _data2 ;
const _Configure = class _Configure {
constructor ( ) {
_ _privateAdd ( this , _data2 , null ) ;
_ _publicField ( this , "init" , ( data2 ) => _ _privateSet ( this , _data2 , data2 ) ) ;
_ _publicField ( this , "get" , ( key , _default ) => _ . get ( _ _privateGet ( this , _data2 ) , key , _default ) ) ;
if ( _ _privateGet ( _Configure , _instance3 ) )
return _ _privateGet ( _Configure , _instance3 ) ;
}
} ;
_instance3 = new WeakMap ( ) , _data2 = new WeakMap ( ) , _ _privateAdd ( _Configure , _instance3 , null ) , _ _publicField ( _Configure , "getInstance" , ( ) => ( _ _privateGet ( _Configure , _instance3 ) || _ _privateSet ( _Configure , _instance3 , new _Configure ( ) ) , _ _privateGet ( _Configure , _instance3 ) ) ) ;
let Configure = _Configure ;
const configure = Configure . getInstance ( ) , DataList = ( { component : component2 } ) => {
const { base62params } = useParams ( ) ;
return /* @__PURE__ */ jsx ( FFContainer , { children : /* @__PURE__ */ jsx (
DataListHelper ,
{
listCode : component2 ,
base62params : http . decode ( base62params )
}
) } ) ;
} , Component = ( { component : component2 , $setting } ) => {
const [ children , setChildren ] = useState ( ) ;
useEffect ( ( ) => {
if ( ! component2 )
return setChildren ( /* @__PURE__ */ jsx ( Empty , { description : null } ) ) ;
core . getWidgetComponent ( component2 ) . catch ( ( e ) => ( { default : ( ) => ` ${ e } ` } ) ) . then ( ( pkg ) => React . createElement ( pkg . default , { $setting } ) ) . then ( setChildren ) ;
} , [ component2 ] ) ;
const props = { } ;
return children ? React . cloneElement ( children , props ) : null ;
} ;
var _instance4 , _data3 , _menus , _router , _findPathById , _getMenuItems ;
const _Route = class _Route {
constructor ( ) {
_ _privateAdd ( this , _data3 , /* @__PURE__ */ new Map ( ) ) ;
_ _privateAdd ( this , _menus , { } ) ;
_ _privateAdd ( this , _router , null ) ;
_ _publicField ( this , "init" , ( data2 , menus ) => {
_ _privateSet ( this , _data3 , data2 ) , _ _privateSet ( this , _menus , menus ) ;
} ) ;
_ _publicField ( this , "get" , ( uuid ) => ( _ _privateGet ( this , _data3 ) . has ( uuid ) || ( uuid = Array . from ( _ _privateGet ( this , _data3 ) . keys ( ) ) . find ( ( k ) => _ _privateGet ( this , _data3 ) . get ( k ) . uri === uuid ) ) , _ _privateGet ( this , _data3 ) . get ( uuid ) || { } ) ) ;
_ _publicField ( this , "redirect" , ( uuid , params , opt = { } ) => {
const { uri , type , widgetProps } = this . get ( uuid ) || { } ;
let url = generatePath ( uri || uuid , type != "list" ? params : _ . mapValues ( params , ( item ) => http . encode ( item ) ) ) ;
const oUrlParam = new URLSearchParams ( ) ;
for ( const key in widgetProps || { } )
( widgetProps == null ? void 0 : widgetProps . type ) == "query" && oUrlParam . append ( key , params [ key ] ) ;
return oUrlParam . size > 0 && ( url = ` ${ url } ? ${ oUrlParam . toString ( ) } ` ) , _ _privateGet ( this , _router ) . navigate ( url , opt ) ;
} ) ;
/ * *
*
* @ param { * } category // user, system, navigator
* @ returns
* /
_ _publicField ( this , "getMenus" , ( category ) => {
var _a ;
return ( ( _a = _ _privateGet ( this , _menus ) ) == null ? void 0 : _a [ category ] ) || [ ] ;
} ) ;
_ _publicField ( this , "findMenuPathByUuid" , ( uuid ) => {
let result = [ ] ;
for ( const key in _ _privateGet ( this , _menus ) )
if ( result = _ _privateGet ( this , _findPathById ) . call ( this , _ _privateGet ( this , _menus ) [ key ] , uuid , [ key ] ) , result . length > 1 )
return result ;
return result ;
} ) ;
_ _publicField ( this , "getMenusByRouteUuid" , ( key ) => _ _privateGet ( this , _getMenuItems ) . call ( this , key , Object . values ( _ _privateGet ( this , _menus ) ) . flat ( ) ) ) ;
_ _privateAdd ( this , _findPathById , ( items , target , path = [ ] ) => {
if ( _ . isEmpty ( items ) )
return path ;
for ( const { uuid , children } of items ) {
if ( uuid == target )
return path . concat ( uuid ) ;
if ( ! _ . isEmpty ( children ) )
return path . concat ( uuid , _ _privateGet ( this , _findPathById ) . call ( this , children , target ) ) ;
}
return path ;
} ) ;
_ _privateAdd ( this , _getMenuItems , ( key , items ) => {
var _a ;
let result = [ ] ;
for ( const item of items )
item . widgetType == "redirect" && ( item . uuid == key || item . widget == key ? result . push ( item ) : ( _a = item . children ) != null && _a . length && ( result = result . concat ( _ _privateGet ( this , _getMenuItems ) . call ( this , key , item . children ) ) ) ) ;
return result ;
} ) ;
_ _publicField ( this , "getCurrentMenu" , ( ) => {
const { uuid } = this . getCurrentRoute ( ) || { } ;
if ( ! uuid )
return ;
const items = this . getMenusByRouteUuid ( uuid ) ;
if ( ! _ . isEmpty ( items ) )
return items [ 0 ] ;
} ) ;
_ _publicField ( this , "getCurrentRoute" , ( delta = 0 ) => {
var _a ;
const route2 = ( _a = _ _privateGet ( this , _router ) . state . matches [ _ _privateGet ( this , _router ) . state . matches . length - 1 - delta ] ) == null ? void 0 : _a . route ;
if ( ! route2 )
return null ;
for ( let [ _key , item ] of _ _privateGet ( this , _data3 ) )
if ( item . uri === route2 . path )
return item ;
return null ;
} ) ;
_ _publicField ( this , "getPageParams" , ( key ) => {
var _a ;
const { location , matches } = _ _privateGet ( this , _router ) . state , params = ( ( _a = matches [ matches . length - 1 ] ) == null ? void 0 : _a . params ) || { } ;
return location . search && new URLSearchParams ( location . search ) . forEach ( ( value , key2 ) => {
params [ key2 ] = value ;
} ) , key ? _ . get ( params , key ) : params ;
} ) ;
_ _publicField ( this , "createBrowserRouter" , ( opt = { } ) => {
if ( _ _privateGet ( this , _data3 ) . size == 0 )
return null ;
const theme = configure . get ( "Common.WEBSITE_DEFAULT_THEME" , "@pkg/frameworks/BasicLayout" ) , index2 = configure . get ( checkUserToken ( ) ? "Common.WEBSITE_LOGIN_REDIRECT" : "Common.WEBSITE_DEFAULT" , "/index" ) , themeMap = { [ theme ] : 0 } , routes = Array . from ( _ _privateGet ( this , _data3 ) . values ( ) ) . reduce ( ( carry , { uuid , uri , name , type , component : component2 , widgetSetting , isLogin , isLayout , extra } ) => {
let item = { } , themeIndex = 0 ;
switch ( type ) {
case "list" :
item . element = React . createElement ( DataList , { component : component2 } ) ;
break ;
case "fsdpf-component" :
item . element = React . createElement ( Component , { key : component2 , component : component2 , $setting : widgetSetting } ) ;
break ;
}
if ( extra != null && extra . layout )
if ( themeMap [ extra == null ? void 0 : extra . layout ] )
themeIndex = themeMap [ extra == null ? void 0 : extra . layout ] ;
else
return themeMap [ extra == null ? void 0 : extra . layout ] = carry . length , [ ... carry , {
path : "/" ,
lazy : ( ) => core . getWidgetComponent ( extra == null ? void 0 : extra . layout ) . then ( ( resp ) => ( { Component : resp . default } ) ) ,
children : [ { path : uri , ... item } ]
} ] ;
return isLayout && themeIndex > - 1 ? ( carry [ themeIndex ] . children . push ( { path : uri , ... item } ) , carry ) : [ ... carry , { path : uri , ... item } ] ;
} , [
{
path : "/" ,
lazy : ( ) => core . getWidgetComponent ( theme ) . then ( ( resp ) => ( { Component : resp . default } ) ) ,
children : [ ]
}
] ) ;
return routes . push ( { index : ! 0 , element : React . createElement ( Navigate , { to : index2 , replace : ! 0 } ) } ) , _ _privateSet ( this , _router , createBrowserRouter ( routes , opt ) ) ;
} ) ;
if ( _ _privateGet ( _Route , _instance4 ) )
return _ _privateGet ( _Route , _instance4 ) ;
}
} ;
_instance4 = new WeakMap ( ) , _data3 = new WeakMap ( ) , _menus = new WeakMap ( ) , _router = new WeakMap ( ) , _findPathById = new WeakMap ( ) , _getMenuItems = new WeakMap ( ) , _ _privateAdd ( _Route , _instance4 , null ) , _ _publicField ( _Route , "getInstance" , ( ) => ( _ _privateGet ( _Route , _instance4 ) || _ _privateSet ( _Route , _instance4 , new _Route ( ) ) , _ _privateGet ( _Route , _instance4 ) ) ) ;
let Route = _Route ;
const route = Route . getInstance ( ) , oWorker = new Worker ( new URL ( "data:text/plain;base64,KGZ1bmN0aW9uKCl7InVzZSBzdHJpY3QiO2ltcG9ydFNjcmlwdHMoImh0dHBzOi8vYXNzZXRzLmZzZHBmLm5ldC9qcy91bWQvbG9kYXNoQDRfMTdfMjEubWluLmpzIiwiaHR0cHM6Ly9hc3NldHMuZnNkcGYubmV0L2pzL3VtZC9sb2Rhc2gubWl4aW4uanMiKSxpbXBvcnRTY3JpcHRzKCJodHRwczovL2Fzc2V0cy5mc2RwZi5uZXQvanMvdW1kL21vbWVudEAyXzI5XzQubWluLmpzIiwiaHR0cHM6Ly9hc3NldHMuZnNkcGYubmV0L2pzL3VtZC9tb21lbnQubG9jYWxlLnpoLWNuLmpzIiksbW9tZW50LmxvY2FsZSgiemgtY24iKTtjb25zdCBVdGlsPShlLHMpPT57Y29uc3QgdD1VdGlsLm1zZ19pZCsrO3JldHVybiBuZXcgUHJveHkoKCk9Pnt9LHtnZXQoe3Jvb3Q6YX0sbil7Y29uc3Qgbz1hP2Ake2F9LyR7bn1gOm47cmV0dXJuIGZ1bmN0aW9uKC4uLmkpe3JldHVybiBuZXcgUHJvbWlzZSgocixsKT0+e1V0aWwubVF1ZXVlLnNldCh0LFtyLGxdKSxzZWxmLnBvc3RNZXNzYWdlKHtpZDp0LHRhc2tfaWQ6ZSxzZXNzaW9uOnMsY2F0ZWdvcnk6InV0aWwiLG1ldGhvZDpvLGFyZ3M6aX0pfSl9fSxhcHBseShhLG4sbyl7cmV0dXJuIG5ldyBQcm94eShPYmplY3QuY3JlYXRlKHtyb290Om9bMF18fG51bGx9KSx7Z2V0OnRoaXMuZ2V0fSl9fSl9O1V0aWwubXNnX2lkPTAsVXRpbC5tUXVldWU9bmV3IE1hcCxVdGlsLm1NZXRob2RXb3Jrc3BhY2U9bmV3IE1hcCxzZWxmLmFkZEV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLGZ1bmN0aW9uKHtkYXRhOntpZDplLGRhdGE6cyxlcnJvcjp0LGNhdGVnb3J5OmF9fSl7YT09PSJ1dGlsIiYmKHQhPT1udWxsP1V0aWwubVF1ZXVlLmdldChlKVsxXSh0KTpVdGlsLm1RdWV1ZS5nZXQoZSlbMF0ocyksVXRpbC5tUXVldWUuZ2V0KGUpLFV0aWwubVF1ZXVlLmRlbGV0ZShlKSl9LCExKSxzZWxmLmFkZEV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLCh7ZGF0YTp7aWQsbWV0aG9kLGFyZ3MsY2F0ZWdvcnksc2Vzc2lvbixzb3VyY2VVUkx9fSk9PntpZihjYXRlZ29yeSE9PSJldmFsIilyZXR1cm47c2Vzc2lvbiYmIVV0aWwubU1ldGhvZFdvcmtzcGFjZS5oYXMoc2Vzc2lvbikmJlV0aWwubU1ldGhvZFdvcmtzcGFjZS5zZXQoc2Vzc2lvbix7fSk7Y29uc3QgZXZhbERhdGFTb3VyY2VVUkw9c291cmNlVVJMP2AKLy8jIHNvdXJjZVVSTD1mZjovLy8uLyR7c291cmNlVVJMfWA6IiIsZXZhbERhdGE9ZXZhbChgKGFzeW5jIGZ1bmN0aW9uKHske09iamVjdC5rZXlzKGFyZ3MpLmpvaW4oIiwgIil9fSwgVXRpbCl7JHttZXRob2R9Cn0pJHtldmFsRGF0YVNvdXJjZVVSTH1gKS5jYWxsKHNlc3Npb24/VXRpbC5tTWV0aG9kV29ya3NwYWNlLmdldChzZXNzaW9uKTp7fSxhcmdzLFV0aWwoaWQsc2Vzc2lvbikpO3JldHVybiBQcm9taXNlLnJlc29sdmUoZXZhbERhdGEpLnRoZW4oZT0+e3NlbGYucG9zdE1lc3NhZ2Uoe2lkLHNlc3Npb24sY2F0ZWdvcnksZGF0YTplLGVycm9yOm51bGx9KX0pLmNhdGNoKGU9PntzZWxmLnBvc3RNZXNzYWdlKHtpZCxzZXNzaW9uLGNhdGVnb3J5LGRhdGE6bnVsbCxlcnJvcjplIGluc3RhbmNlb2YgRE9NRXhjZXB0aW9uJiZlLm5hbWU9PT0iRGF0YUNsb25lRXJyb3IiPyJEYXRhQ2xvbmVFcnJvciDov5Tlm57nu5Pmnpzlj6rog73kuLrnroDljZXmlbDmja7moLzlvI8iOmV9KX0pfSksc2VsZi5hZGRFdmVudExpc3RlbmVyKCJtZXNzYWdlIiwoe2RhdGE6e2NhdGVnb3J5OmUsc2Vzc2lvbjpzfX0pPT57ZT09PSJjbGVhciImJlV0aWwubU1ldGhvZFdvcmtzcGFjZS5kZWxldGUocyl9LCExKX0pKCk7Cg==" , self . location ) ) , fns = {
getConfigure : ( key ) => configure . get ( key ) ,
route : {
redirect : ( ... args ) => route . redirect ( ... args ) ,
getPageParams : ( ... args ) => route . getPageParams ( ... args ) ,
getCurrentRoute : ( ) => route . getCurrentRoute ( )
} ,
modal : {
notification : ( ... args ) => FFPopupRender . notification ( ... args ) ,
success : ( ... args ) => FFPopupRender . success ( ... args ) ,
error : ( ... args ) => FFPopupRender . error ( ... args ) ,
form : ( ... args ) => FFPopupRender . form ( ... args )
} ,
popup : {
notification : ( ... args ) => FFPopupRender . notification ( ... args ) ,
success : ( ... args ) => FFPopupRender . success ( ... args ) ,
error : ( ... args ) => FFPopupRender . error ( ... args ) ,
form : ( ... args ) => FFPopupRender . form ( ... args )
}
} ;
var _msg _id , _fns , _instance5 ;
const _Func = class _Func {
constructor ( ) {
_ _publicField ( this , "exec" , ( source , args = { } , fns2 = { } , session = "" ) => new Promise ( ( resolve , reject ) => {
const id = _ _privateWrapper ( _Func , _msg _id ) . _ ++ ;
_ _privateGet ( _Func , _fns ) . set ( id , fns2 ) , _Func . mQueue . set ( id , [ resolve , reject ] ) , oWorker . postMessage ( { id , session , category : "eval" , method : source , args } ) ;
} ) ) ;
_ _publicField ( this , "clear" , ( session ) => oWorker . postMessage ( { session , category : "clear" } ) ) ;
if ( _ _privateGet ( _Func , _instance5 ) )
return _ _privateGet ( _Func , _instance5 ) ;
Promise . resolve ( ) . then ( ( ) => index ) . then ( ( m ) => {
fns . http = m . http ;
} ) , oWorker . addEventListener ( "message" , ( { data : { id , task _id , method , args , category , data : data2 , error , session } } ) => {
if ( category === "eval" && _Func . mQueue . has ( id ) )
error !== null ? _Func . mQueue . get ( id ) [ 1 ] ( error ) : _Func . mQueue . get ( id ) [ 0 ] ( data2 ) , _ _privateGet ( _Func , _fns ) . delete ( id ) , _Func . mQueue . delete ( id ) ;
else if ( category === "util" )
try {
const func2 = _ . get ( fns , method . split ( "/" ) ) || _ . get ( _ _privateGet ( _Func , _fns ) . get ( task _id ) , method . split ( "/" ) ) ;
if ( ! _ . isFunction ( func2 ) )
throw ` ${ method } not found ` ;
Promise . resolve ( Reflect . apply ( func2 , void 0 , args ) ) . then ( ( data3 ) => {
oWorker . postMessage ( { id , task _id , category , method , args , session , data : data3 , error : null } ) ;
} ) . catch ( ( e ) => {
oWorker . postMessage ( { id , task _id , category , method , args , session , data : null , error : e } ) ;
} ) ;
} catch ( e ) {
oWorker . postMessage ( { id , task _id , category , method , args , session , data : null , error : e } ) ;
}
} , ! 1 ) ;
}
} ;
_msg _id = new WeakMap ( ) , _fns = new WeakMap ( ) , _instance5 = new WeakMap ( ) , _ _publicField ( _Func , "mQueue" , /* @__PURE__ */ new Map ( ) ) , _ _privateAdd ( _Func , _msg _id , 0 ) , _ _privateAdd ( _Func , _fns , /* @__PURE__ */ new Map ( ) ) , _ _privateAdd ( _Func , _instance5 , null ) , _ _publicField ( _Func , "getInstance" , ( ) => ( _ _privateGet ( _Func , _instance5 ) || _ _privateSet ( _Func , _instance5 , new _Func ( ) ) , _ _privateGet ( _Func , _instance5 ) ) ) ;
let Func = _Func ;
const fn = Func . getInstance ( ) ;
var _instance6 , _cache2 ;
const _Core = class _Core {
constructor ( ) {
_ _privateAdd ( this , _cache2 , /* @__PURE__ */ new Map ( ) ) ;
_ _publicField ( this , "setVendor" , ( key , vendor ) => _ _privateGet ( this , _cache2 ) . set ( key , new Cache ( vendor , ( self2 , pkg ) => self2 . dynamicRequireFsdpfComponent ( pkg ) ) ) ) ;
_ _publicField ( this , "getWidgetComponent" , async ( w ) => {
if ( ! w )
throw "getWidgetComponent widget is required" ;
const [ , ff ] = w == null ? void 0 : w . split ( "@ff/" ) , [ , app ] = w == null ? void 0 : w . split ( "@app/" ) , [ , pkg ] = w == null ? void 0 : w . split ( "@pkg/" ) , [ , fsdpf ] = w == null ? void 0 : w . split ( "@fsdpf/" ) ;
try {
switch ( ! 0 ) {
case ( ! ! ff && _ _privateGet ( this , _cache2 ) . has ( "pkg" ) ) :
return await _ _privateGet ( this , _cache2 ) . get ( "pkg" ) . get ( ff ) ;
case ( ! ! app && _ _privateGet ( this , _cache2 ) . has ( "pkg" ) ) :
return await _ _privateGet ( this , _cache2 ) . get ( "pkg" ) . get ( app ) ;
case ( ! ! pkg && _ _privateGet ( this , _cache2 ) . has ( "pkg" ) ) :
return await _ _privateGet ( this , _cache2 ) . get ( "pkg" ) . get ( pkg ) ;
case ( ! ! fsdpf && _ _privateGet ( this , _cache2 ) . has ( "pkg" ) ) :
return await _ _privateGet ( this , _cache2 ) . get ( "pkg" ) . get ( fsdpf ) ;
}
} catch ( e ) {
throw e ;
}
} ) ;
if ( _ _privateGet ( _Core , _instance6 ) )
return _ _privateGet ( _Core , _instance6 ) ;
}
} ;
_instance6 = new WeakMap ( ) , _cache2 = new WeakMap ( ) , _ _privateAdd ( _Core , _instance6 , null ) , _ _publicField ( _Core , "getInstance" , ( ) => ( _ _privateGet ( _Core , _instance6 ) || _ _privateSet ( _Core , _instance6 , new _Core ( ) ) , _ _privateGet ( _Core , _instance6 ) ) ) ;
let Core = _Core ;
const core = Core . getInstance ( ) , convertFns = {
null2json : ( data2 ) => null ,
null2array : ( data2 ) => null ,
null2number : ( data2 ) => null ,
null2bool : ( data2 ) => null ,
null2string : ( data2 ) => null ,
null2integer : ( data2 ) => null ,
null2float : ( data2 ) => null ,
// null2json: (data) => ({}),
// null2array: (data) => ([]),
// null2number: (data) => 0,
// null2bool: (data) => false,
// null2string: (data) => '',
string2json : ( data2 ) => data2 ? JSON . parse ( data2 ) : "{}" ,
string2array : ( data2 ) => data2 . substr ( 0 , 1 ) === "[" && data2 . substr ( - 1 ) === "]" ? JSON . parse ( data2 ) : data2 . split ( "," ) ,
string2number : ( data2 ) => data2 == "" ? null : + data2 ,
string2integer : ( data2 ) => data2 == "" ? null : + data2 ,
string2float : ( data2 ) => data2 == "" ? null : + data2 ,
string2bool : ( data2 ) => {
switch ( ` ${ data2 } ` . toLowerCase ( ) ) {
case "0" :
case "false" :
case "[]" :
case "{}" :
return ! 1 ;
}
return ! ! data2 ;
} ,
string2string : ( data2 ) => data2 ,
json2json : ( data2 ) => data2 ,
json2array : ( data2 ) => data2 ? Object . values ( data2 ) : [ ] ,
json2number : ( data2 ) => Object . keys ( data2 ) . length ,
json2integer : ( data2 ) => Object . keys ( data2 ) . length ,
json2float : ( data2 ) => Object . keys ( data2 ) . length ,
json2bool : ( data2 ) => Object . keys ( data2 ) . length > 0 ,
json2string : ( data2 ) => data2 ? JSON . stringify ( data2 ) : "" ,
array2json : ( data2 ) => ( { ... data2 } ) ,
array2array : ( data2 ) => data2 ,
array2number : ( data2 ) => data2 . length ,
array2integer : ( data2 ) => data2 . length ,
array2float : ( data2 ) => data2 . length ,
array2bool : ( data2 ) => data2 . length > 0 ,
array2string : ( data2 ) => JSON . stringify ( data2 ) ,
number2json : ( data2 ) => ( { } ) ,
number2array : ( data2 ) => [ data2 ] ,
number2number : ( data2 ) => data2 ,
number2integer : ( data2 ) => data2 ,
number2float : ( data2 ) => data2 ,
number2bool : ( data2 ) => ! ! data2 ,
number2string : ( data2 ) => data2 . toString ( ) ,
boolean2json : ( data2 ) => ( { } ) ,
boolean2array : ( data2 ) => [ ] ,
boolean2number : ( data2 ) => + data2 ,
boolean2integer : ( data2 ) => + data2 ,
boolean2float : ( data2 ) => + data2 ,
boolean2bool : ( data2 ) => data2 ,
boolean2string : ( data2 ) => data2 ? "true" : "false"
} ;
_ . mixin ( {
toPairsDeep : ( obj , i ) => _ . flatMap (
_ . toPairs ( obj ) ,
( [ k , v ] ) => _ . isObjectLike ( v ) ? _ . toPairsDeep ( v , k ) : [ [ ` ${ _ . isUndefined ( i ) ? "" : i + "." } ${ k } ` , v ] ]
) ,
deepSome : ( items , func2 = ( ) => ! 1 ) => _ . some ( items , ( item ) => {
if ( _ . some ( item , func2 ) )
return ! 0 ;
if ( ! _ . isEmpty ( item ) && ( _ . isPlainObject ( item ) || _ . isArray ( item ) ) )
return _ . deepSome ( item , func2 ) ;
} ) ,
toPrimitive : ( data2 , type ) => {
let sourceType = "string" ;
Array . isArray ( data2 ) ? sourceType = "array" : sourceType = typeof data2 , _ . isObject ( data2 ) && ( sourceType = "json" ) ;
const fn2 = ` ${ sourceType } 2 ${ type } ` ;
return Reflect . has ( convertFns , fn2 ) ? convertFns [ fn2 ] ( data2 ) : data2 ;
} ,
replaceKeys : ( obj , keyMap ) => ! obj || typeof obj != "object" ? obj : Array . isArray ( obj ) ? obj . map ( ( item ) => _ . replaceKeys ( item , keyMap ) ) : Object . keys ( obj ) . reduce ( ( acc , key ) => ( keyMap [ key ] ? acc [ keyMap [ key ] ] = _ . replaceKeys ( obj [ key ] , keyMap ) : acc [ key ] = _ . replaceKeys ( obj [ key ] , keyMap ) , acc ) , { } )
} ) ;
let AppUrl = "" ;
const http = {
init : ( appKey , appSecret , appUrl ) => {
axios . defaults . baseURL = AppUrl = appUrl , axios . defaults . timeout = 15e3 , Object . assign ( http , new Request ( appKey , appSecret , axios ) ) ;
}
} , isReactComponent = ( component2 ) => component2 != null && component2 . name ? component2 . prototype instanceof React . Component ? ! 0 : /^[A-Z]/ . test ( component2 . name ) : ! 1 , index = /* @__PURE__ */ Object . freeze ( /* @__PURE__ */ Object . defineProperty ( {
_ _proto _ _ : null ,
AppGlobalParamsContext ,
get AppUrl ( ) {
return AppUrl ;
} ,
cache : Cache ,
configure ,
core ,
default : AppContext ,
func : fn ,
http ,
isReactComponent ,
route
} , Symbol . toStringTag , { value : "Module" } ) ) , getRoutes = ( ) => http . get ( "/api/my-router" ) . then ( ( resp ) => [
... resp ,
{ uuid : "data-list-setting" , isLayout : ! 0 , uri : "/data-list-setting/:category/:categoryUuid" , type : "fsdpf-component" , component : "@pkg/components/ff-design/DataListSetting" , extra : { layout : "@pkg/frameworks/DesignTheme" } } ,
{ uuid : "grid-layout-setting" , isLayout : ! 0 , uri : "/grid-layout-setting/:category/:categoryUuid" , type : "fsdpf-component" , component : "@pkg/components/ff-design/GridLayoutSetting" , extra : { layout : "@pkg/frameworks/DesignTheme" } } ,
{ uuid : "grid-layout-form-setting" , isLayout : ! 0 , uri : "/grid-layout-form-setting/:category/:categoryUuid" , type : "fsdpf-component" , component : "@pkg/components/ff-design/GridLayoutFormSetting" , extra : { layout : "@pkg/frameworks/DesignTheme" } } ,
{ uuid : "resource-api-setting" , isLayout : ! 0 , uri : "/resource-api-setting/:category/:categoryUuid" , type : "fsdpf-component" , component : "@pkg/components/ff-design/ResourceApiSetting" , extra : { layout : "@pkg/frameworks/DesignTheme" } } ,
{ uuid : "charts-setting" , isLayout : ! 0 , uri : "/resource-api-setting/:category/:categoryUuid" , type : "fsdpf-component" , component : "@pkg/components/ff-design/ChartsSetting" , extra : { layout : "@pkg/frameworks/DesignTheme" } } ,
{ uuid : "fsm-setting" , isLayout : ! 0 , uri : "/fsm-setting/:category/:categoryUuid" , type : "fsdpf-component" , component : "@pkg/components/ff-design/FsmSetting" , extra : { layout : "@pkg/frameworks/DesignTheme" } } ,
{ uuid : "component-setting" , isLayout : ! 0 , uri : "/component-setting/:category/:categoryUuid" , type : "fsdpf-component" , component : "@pkg/components/ff-design/ComponentSetting" , extra : { layout : "@pkg/frameworks/DesignTheme" } } ,
{ uuid : "login" , uri : "/login" , name : "登录" , type : "fsdpf-component" , isLogin : ! 1 , component : "@pkg/components/ff/Login" } ,
{ uuid : "not-found" , uri : "*" , name : "Not Found" , type : "fsdpf-component" , isLogin : ! 1 , component : "@pkg/components/ff/NotFound" }
] . map ( ( { uuid , ... item } ) => [ uuid , { uuid , ... item } ] ) ) . then ( ( data2 ) => new Map ( data2 ) ) , getMenus = ( ) => http . get ( "/api/my-menu" ) , getConfigure = ( ) => http . get ( "api/init-configure" ) , getWidgetOperationAuth = ( ) => http . get ( "/api/init-widget-operation-auth" ) . then ( ( resp ) => resp . reduce ( ( carry , { uuid , auth : auth2 } ) => [ ... carry , [ uuid , auth2 ] ] , [ ] ) ) , getPhoneNumber = ( code ) => http . get ( ` /api/user-wx-phone-number/ ${ code } ` ) ;
export {
configure as $ ,
useHasOperationColumn as A ,
Button as B ,
useButton as C ,
DataList$1 as D ,
auth as E ,
FFContainer as F ,
GridLayout$1 as G ,
GridLayoutForm$1 as H ,
GridLayoutForm as I ,
GridLayoutFormWidget as J ,
GridLayoutFormHelper as K ,
useFnRun as L ,
getOptionItemByValue as M ,
Iconfont as N ,
getUserToken as O ,
checkUserToken as P ,
getUserInfo as Q ,
ResWs$1 as R ,
SlotContext as S ,
login as T ,
logout as U ,
AppUrl as V ,
http as W ,
isReactComponent as X ,
AppContext as Y ,
AppGlobalParamsContext as Z ,
Cache as _ ,
2024-07-19 13:08:18 +08:00
usePrevious as a ,
2024-07-12 10:30:05 +08:00
fn as a0 ,
core as a1 ,
route as a2 ,
getRoutes as a3 ,
getMenus as a4 ,
getConfigure as a5 ,
getWidgetOperationAuth as a6 ,
getPhoneNumber as a7 ,
2024-07-19 13:08:18 +08:00
useStateWithCallback as b ,
useDeepEqualEffect as c ,
useOptions as d ,
useSubscribeRequest as e ,
SlotRender as f ,
FFPageRender as g ,
FFPopupRender as h ,
getDefaultExpandRowKeys as i ,
GridLayout as j ,
GridLayoutWidget as k ,
DataListFilter as l ,
DataListToolbar as m ,
DataListSider as n ,
DataListFooter as o ,
DataListHelper as p ,
DataListContext as q ,
DataListTable as r ,
DataListContent as s ,
DataListFramework as t ,
2024-07-12 10:30:05 +08:00
useUpdate as u ,
2024-07-19 13:08:18 +08:00
DataTableFramework as v ,
2024-07-12 10:30:05 +08:00
loadDataListFieldWidget as w ,
useColumnsRender as x ,
useStructure as y ,
useDataSource as z
} ;