@materialui-reactjs/admin 2.0.0 → 2.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +30 -0
- package/README.md +4 -1
- package/dist/Common-DFahMuQE.cjs +11 -0
- package/dist/{Common-1GAoFU4L.js → Common-_PK8HLKN.js} +22 -16
- package/dist/HeaderUpdate-Dirxjmxs.cjs +1 -0
- package/dist/{HeaderUpdate-UXncZcAD.js → HeaderUpdate-drlnuHI8.js} +24 -25
- package/dist/{UDragFile-BqGt1-gK.js → UDragFile-D8wOZ1Ut.js} +2 -2
- package/dist/UDragFile-Db0sK4M7.cjs +1 -0
- package/dist/{Validator-aKlMgoxl.js → Validator-D2zwZeov.js} +73 -50
- package/dist/Validator-DBxl8wtE.cjs +1 -0
- package/dist/ckeditor/ckeditor.d.ts +3 -0
- package/dist/ckeditor/plugins/elfinder.d.ts +11 -0
- package/dist/ckeditor/plugins/fullscreen.d.ts +15 -0
- package/dist/ckeditor/plugins/pdffinder.d.ts +18 -0
- package/dist/ckeditor/types.d.ts +37 -0
- package/dist/{common-DVWX6AUQ.js → common-CEZp8xpQ.js} +14 -3
- package/dist/common-ivDX6gGq.cjs +1 -0
- package/dist/components/echarts/index.cjs +1 -1
- package/dist/components/echarts/index.js +1 -1
- package/dist/components/form/AsxhUImages.d.ts +2 -1
- package/dist/components/form/BoxAddRow.d.ts +2 -1
- package/dist/components/form/CusForm.d.ts +19 -6
- package/dist/components/form/Editor.d.ts +2 -1
- package/dist/components/form/EfImage.d.ts +2 -1
- package/dist/components/form/EfImages.d.ts +2 -1
- package/dist/components/form/PImage.d.ts +2 -1
- package/dist/components/form/SelectAddRowBoxAdvanced.d.ts +13 -4
- package/dist/components/form/SelectBox.d.ts +20 -7
- package/dist/components/form/UDragFile.d.ts +2 -1
- package/dist/components/form/UFile.d.ts +2 -1
- package/dist/components/form/UFiles.d.ts +9 -2
- package/dist/components/form/UImages.d.ts +2 -1
- package/dist/components/form/index.cjs +1 -1
- package/dist/components/form/index.js +2 -2
- package/dist/components/meta/CardTable.d.ts +4 -2
- package/dist/components/meta/CardTable.types.d.ts +11 -5
- package/dist/components/meta/CusTooltip.d.ts +7 -1
- package/dist/components/meta/Head.d.ts +10 -1
- package/dist/components/meta/HeaderDetail.d.ts +2 -1
- package/dist/components/meta/ScrollTable.d.ts +7 -3
- package/dist/components/meta/SearchBox.d.ts +2 -1
- package/dist/components/meta/SortableItem.d.ts +11 -1
- package/dist/components/meta/index.cjs +1 -1
- package/dist/components/meta/index.js +2 -2
- package/dist/components/sidebar/index.cjs +1 -1
- package/dist/components/sidebar/index.js +1 -1
- package/dist/components/single/List.d.ts +15 -4
- package/dist/components/single/Update.d.ts +2 -1
- package/dist/components/single/UpdateTableDetail.d.ts +2 -1
- package/dist/components/single/index.cjs +1 -1
- package/dist/components/single/index.js +1 -1
- package/dist/components/top-navbar/index.cjs +1 -1
- package/dist/components/top-navbar/index.js +28 -28
- package/dist/echarts-Bi3uwLbg.cjs +1 -0
- package/dist/{echarts-CRmndsxC.js → echarts-CTzMqeR5.js} +4 -4
- package/dist/form-heyswTRq.js +3897 -0
- package/dist/form-sgtop6li.cjs +49 -0
- package/dist/hook/common.d.ts +22 -0
- package/dist/hook/detail.cjs +1 -1
- package/dist/hook/detail.js +1 -1
- package/dist/hook/fields.cjs +1 -1
- package/dist/hook/fields.js +1 -1
- package/dist/hook/index.cjs +1 -1
- package/dist/hook/index.d.ts +4 -3
- package/dist/hook/index.js +10 -10
- package/dist/hook/update.cjs +1 -1
- package/dist/hook/update.d.ts +2 -2
- package/dist/hook/update.js +10 -7
- package/dist/index.cjs +1 -1
- package/dist/index.js +11 -11
- package/dist/meta-BANk9kHW.cjs +1 -0
- package/dist/meta-CheDAmMh.js +745 -0
- package/dist/sidebar-CfQAYWi-.cjs +1 -0
- package/dist/{sidebar-CVORMKBY.js → sidebar-CzRmfvhi.js} +3 -3
- package/dist/{single-CqD5cgNi.js → single-BsJ7TYJi.js} +240 -252
- package/dist/single-C2WPEjhk.cjs +1 -0
- package/dist/utils/Common.d.ts +100 -27
- package/dist/utils/Env.d.ts +1 -1
- package/dist/utils/index.cjs +1 -1
- package/dist/utils/index.js +49 -40
- package/package.json +1 -1
- package/dist/Common-BBYXssMH.cjs +0 -11
- package/dist/HeaderUpdate-DIwc8EAA.cjs +0 -1
- package/dist/UDragFile-oJ05zNLR.cjs +0 -1
- package/dist/Validator-BcydBvOg.cjs +0 -1
- package/dist/common-CHDJQ2Ca.cjs +0 -1
- package/dist/echarts-Dla22xas.cjs +0 -1
- package/dist/form-BNAbGCXe.js +0 -45955
- package/dist/form-DUL_O4IY.cjs +0 -65
- package/dist/meta-CXHXSPbq.cjs +0 -1
- package/dist/meta-Dhll5zt9.js +0 -764
- package/dist/sidebar-G5Ody16K.cjs +0 -1
- package/dist/single-CsUaxEjQ.cjs +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
const e=require("./rolldown-runtime-BocRIvOZ.cjs"),t=require("./Env-DoS-iQjs.cjs"),n=require("./Common-DFahMuQE.cjs"),r=require("./Validator-DBxl8wtE.cjs"),i=require("./UDragFile-Db0sK4M7.cjs"),a=require("./SpinnerLoader-BujLjvC3.cjs"),o=require("./HeaderUpdate-Dirxjmxs.cjs"),s=require("./common-ivDX6gGq.cjs");let c=require("react");c=e.t(c,1);let l=require("react/jsx-runtime"),u=require("react-router-dom"),d=require("react-helmet-async");var f=(e,t,n,r,i,a)=>{if(!a)return!1;if(a===1)return!0;if(!Array.isArray(e))return!1;for(let o of e)if(o){if(o.module===t&&o.controller===n&&o.action===r&&Number(o.code)===Number(i))return o.status!==0&&!!o.isPer;if(Array.isArray(o.subs)&&o.subs.length>0&&f(o.subs,t,n,r,i,a))return!0}return!1},p=class extends c.default.Component{effectRan=!1;module=`admins`;controller=``;state={data:{filter:{}},formValue:{},item:void 0,isDetail:void 0};title=``;cUri=``;_envOverride={};_cLinkOverride;get API_URL(){return this._envOverride.API_URL??t.t().API_URL??``}set API_URL(e){this._envOverride.API_URL=e}get ADMIN_URI(){return this._envOverride.ADMIN_URI??t.t().ADMIN_URI??``}set ADMIN_URI(e){this._envOverride.ADMIN_URI=e}get cLink(){return this._cLinkOverride??this.ADMIN_URI+this.cUri}set cLink(e){this._cLinkOverride=e}getDataUrl=``;ctype=`application/json`;fluid=!1;isBackUri=!0;debug=!1;renderForm=()=>(0,l.jsx)(l.Fragment,{});syncPermissionsAndState=async()=>{let{menuData:e,user:t}=this.props,r={isDetail:f(e,this.module,this.controller,`detail`,0,t.groupId)};this.setState(r,async()=>{let e=n.d();if(e&&r.isDetail){let t=await n.n(this.getDataUrl+`/`+e,{},`GET`,`application/json`,!1),r=t?t.data:void 0;this.setState({item:r||!1,formValue:r?JSON.parse(JSON.stringify(r)):{}},async()=>{await this.componentDidMountAfter()})}})};async initDidMount(){try{if(this.effectRan)return;this.effectRan=!0,this.props.user?.groupId&&await this.syncPermissionsAndState()}catch(e){n.s(e)===`invalid_404`&&this.props.navigate(this.cUri),n.x(n.s(e))}}componentDidMount(){this.initDidMount()}componentDidMountAfter=async()=>{};renderHeaderDetail(){return(0,l.jsx)(o.r,{adminUri:this.ADMIN_URI,title:this.title,cUri:this.cUri})}handleChange=async e=>{e.preventDefault();let t=s.r(e);this.debug&&console.log(`handleChange:`,e.target.name,e.target.value),this.setState(e=>({formValue:{...e.formValue,...t}}))};render(){let{isDetail:e,item:t}=this.state;return e?t===!1?(0,l.jsx)(o.i,{cUriTitle:this.title,cUri:this.cUri,title:this.title+` | Chi tiết`}):(0,l.jsxs)(l.Fragment,{children:[(0,l.jsx)(d.Helmet,{children:(0,l.jsx)(`title`,{children:this.title})}),(0,l.jsxs)(`div`,{className:`mb-3 ${this.fluid?`container-fluid`:`container`}`,children:[this.renderHeaderDetail(),(0,l.jsx)(`div`,{className:`position-relative`,children:(0,l.jsx)(a.t,{loading:!t,style:{minHeight:200,marginTop:20},children:this.renderForm()})})]})]}):(0,l.jsx)(o.a,{cUriTitle:this.title,cUri:this.cUri,title:this.title+` | Chi tiết`,fluid:this.fluid})}},m=class extends c.default.Component{effectRan=!1;module=`admins`;controller=``;table=``;state={formValue:{},item:void 0,isField:!1,isDetail:!1};title=``;cUri=``;_envOverride={};_cLinkOverride;get API_URL(){return this._envOverride.API_URL??t.t().API_URL??``}set API_URL(e){this._envOverride.API_URL=e}get ADMIN_URI(){return this._envOverride.ADMIN_URI??t.t().ADMIN_URI??``}set ADMIN_URI(e){this._envOverride.ADMIN_URI=e}get cLink(){return this._cLinkOverride??this.ADMIN_URI+this.cUri}set cLink(e){this._cLinkOverride=e}getDataUrl=``;editUrl=``;createUrl=``;ctype=`application/json`;fluid=!1;isBackUri=!1;debug=!1;renderForm=()=>(0,l.jsx)(l.Fragment,{});renderAfterForm=()=>(0,l.jsx)(l.Fragment,{});handleChange=async e=>{e.preventDefault();let t=s.r(e);this.debug&&console.log(`handleChange:`,e.target.name,e.target.value),this.setState(e=>({formValue:{...e.formValue,...t}}))};syncPermissionsAndState=async()=>{let{menuData:e,user:t}=this.props,i={isDetail:f(e,this.module,this.controller,`detail`,0,t.groupId)};this.setState(i,async()=>{try{let e=await n.n(this.getDataUrl,{table:this.table},`GET`,`application/json`,!1),t=e?e.data:void 0;this.setState({item:t||!1,formValue:t?{...t}:{}}),new r.t(`#fieldUpdate`).run()}catch(e){n.s(e)===`invalid_404`&&this.props.navigate(this.cUri),n.x(n.s(e))}})};async initDidMount(){try{if(this.effectRan)return;this.effectRan=!0,this.props.user?.groupId&&(await this.syncPermissionsAndState(),await this.componentDidMountAfter())}catch(e){n.s(e)===`invalid_404`&&this.props.navigate(this.cUri),n.x(n.s(e))}}componentDidMount(){this.initDidMount()}componentDidMountAfter=async()=>{};handleSubmit=async e=>{e.preventDefault();let{formValue:t}=this.state,i=new r.t(`#fieldUpdate`);if(!i.hasErrors()&&!i.isIncomplete()){n.C(`#fieldUpdate`,!0);try{t.table||=this.table;let e=await n.n(this.editUrl,t,`POST`,this.ctype);if(n.S(`Cập nhật thành công`,`top-end`,!0),e.data.id){if(this.isBackUri)return this.props.navigate(this.cUri);this.props.navigate(this.cUri+`/fields`),this.setState({item:{...e.data},formValue:{...e.data}},async()=>{await this.afterSubmit(e.data)})}}catch(e){n.x(n.s(e))}finally{n.C(`#fieldUpdate`,!1)}}};afterSubmit=async e=>{};renderHeaderUpdate(){return(0,l.jsx)(o.t,{adminUri:this.ADMIN_URI,title:this.title,cUri:this.cUri,itemId:r.o(this.state.item)})}render(){let{isDetail:e,item:t}=this.state;return e===!1?(0,l.jsx)(o.a,{cUriTitle:this.title,cUri:this.cUri,title:this.title,fluid:this.fluid}):(0,l.jsxs)(l.Fragment,{children:[(0,l.jsx)(d.Helmet,{children:(0,l.jsxs)(`title`,{children:[this.title,` | Tùy chỉnh dữ liệu`]})}),(0,l.jsx)(`div`,{className:`position-relative mb-3 ${this.fluid?`container-fluid`:`container`}`,children:(0,l.jsx)(u.Form,{id:`fieldUpdate`,className:`position-relative`,method:`post`,encType:`multipart/form-data`,"data-toggle":`validator`,role:`form`,onSubmit:this.handleSubmit,children:(0,l.jsxs)(a.t,{loading:!t,style:{minHeight:200,marginTop:20},children:[this.renderHeaderUpdate(),this.renderForm()]})})}),this.renderAfterForm()]})}},h=class extends c.default.Component{module=`admins`;controller=``;state={formValue:{},error:{},isCre:!1,isEdit:!1};title=``;cUri=``;_envOverride={};_cLinkOverride;get API_URL(){return this._envOverride.API_URL??t.t().API_URL??``}set API_URL(e){this._envOverride.API_URL=e}get ADMIN_URI(){return this._envOverride.ADMIN_URI??t.t().ADMIN_URI??``}set ADMIN_URI(e){this._envOverride.ADMIN_URI=e}get cLink(){return this._cLinkOverride??this.ADMIN_URI+this.cUri}set cLink(e){this._cLinkOverride=e}importUrl=``;importFile=`assetorigin.xlsx`;ctype=`multipart/form-data`;fluid=!1;handleChange=async e=>{e.preventDefault();let{name:t,type:n,value:r}=e.target;if(n===`file`){let n=e.target.files;this.setState(e=>({formValue:{...e.formValue,[t]:n?n[0]:null}}))}else this.setState(e=>({formValue:{...e.formValue,[t]:r}}))};syncPermissionsAndState=()=>{let{menuData:e,user:t}=this.props,n={isCre:f(e,this.module,this.controller,`update`,0,t.groupId),isEdit:f(e,this.module,this.controller,`update`,1,t.groupId)};this.setState(n,async()=>{new r.t(`#itemImport`).run()})};async initDidMount(){try{this.props.user?.groupId&&(this.syncPermissionsAndState(),this.componentDidMountAfter())}catch(e){n.s(e)===`invalid_404`&&this.props.navigate(this.cUri),n.x(n.s(e))}}componentDidMount(){this.initDidMount()}componentDidMountAfter=async()=>{};handleSubmit=async e=>{e.preventDefault();let{formValue:t}=this.state,i=new r.t(`#itemImport`);if(!i.hasErrors()&&!i.isIncomplete()){n.C(`#itemImport`,!0);try{let e=await n.n(this.importUrl,t,`POST`,this.ctype);e.data?.error?.length?Array.isArray(e.data?.error)&&e.data.error.length&&this.setState({error:Object.fromEntries(e.data.error.map((e,t)=>[t,e]))}):(this.props.navigate(this.cUri),n.S(`Import thành công`,`top-end`,!0))}catch(e){n.x(n.s(e))}finally{n.C(`#itemImport`,!1)}}};renderForm=()=>(0,l.jsx)(l.Fragment,{children:(0,l.jsx)(i.t,{onChange:this.handleChange,label:`Import excel`,name:`importfile`,ext:`.xlsx,.xls`})});render(){let{isCre:e,isEdit:t}=this.state;return e===!1&&t===!1?(0,l.jsx)(o.a,{cUriTitle:this.title,cUri:this.cUri,title:this.title+` | Import`,fluid:this.fluid}):(0,l.jsxs)(l.Fragment,{children:[(0,l.jsx)(d.Helmet,{children:(0,l.jsxs)(`title`,{children:[this.title,` | `,`Import`]})}),(0,l.jsx)(`div`,{className:`mb-3 ${this.fluid?`container-fluid`:`container`}`,children:(0,l.jsxs)(u.Form,{id:`itemImport`,className:`position-relative`,action:this.importUrl,method:`post`,encType:`multipart/form-data`,"data-toggle":`validator`,role:`form`,onSubmit:this.handleSubmit,children:[(0,l.jsxs)(`div`,{className:`navbar navbar-main navbar-expand-lg px-0 shadow-none border-radius-xl py-3`,children:[(0,l.jsx)(`nav`,{"aria-label":`breadcrumb`,children:(0,l.jsxs)(`ol`,{className:`breadcrumb bg-transparent m-0 p-0`,children:[(0,l.jsx)(`li`,{className:`breadcrumb-item`,children:(0,l.jsx)(u.Link,{className:`text-white`,to:this.ADMIN_URI||`/`,children:(0,l.jsx)(`i`,{className:`fal fa-home`})})}),(0,l.jsx)(`li`,{className:`breadcrumb-item`,children:(0,l.jsx)(u.Link,{className:`text-white`,to:this.cUri,children:this.title})}),(0,l.jsx)(`li`,{className:`breadcrumb-item text-white active`,"aria-current":`page`,children:`Import`})]})}),(0,l.jsxs)(`div`,{className:`ms-auto`,children:[(0,l.jsx)(u.Link,{target:`_blank`,to:this.API_URL+`/importfile/`+this.importFile,className:`btn btn-sm btn-icon btn-info me-2`,title:`Tải xuống biểu mẫu`,children:(0,l.jsx)(`i`,{className:`material-icons text-white position-relative text-lg`,children:`file_download`})}),(0,l.jsx)(u.Link,{to:this.cUri,className:`btn btn-sm btn-icon btn-secondary`,title:`Trở lại`,children:(0,l.jsx)(`i`,{className:`material-icons text-white position-relative text-lg`,children:`reply`})})]})]}),(0,l.jsx)(`div`,{className:`card`,children:(0,l.jsx)(`div`,{className:`card-body pb-0`,children:(0,l.jsx)(`div`,{className:`row justify-content-center`,children:(0,l.jsxs)(`div`,{className:`col-md-8 pt-5 pb-4`,children:[(0,l.jsx)(`div`,{dangerouslySetInnerHTML:{__html:n.y(this.state.error)}}),this.renderForm(),(0,l.jsx)(`div`,{className:`w-100 d-flex`,children:(0,l.jsx)(`button`,{title:`Import`,type:`submit`,className:`btn btn-success mb-4 mx-auto`,children:`Import`})})]})})})})]})})]})}},g=class extends c.default.Component{effectRan=!1;fluid=!1;module=`admins`;controller=``;table=``;hasField=!1;state={loading:!0,data:{items:[],page:1,filter:{},length:10,pageTotal:0,recordTotal:0},isDel:void 0,isCre:void 0,isEdit:void 0,isDelOne:void 0,isDetail:void 0,isIndex:void 0,isImport:void 0,isExport:void 0,isCopy:void 0,selectedIds:[],ftfield:[],tbfield:[]};activeMethod=[`ind`,`det`,`cre`,`edit`,`delone`,`del`];cUri=``;_envOverride={};_cLinkOverride;get API_URL(){return this._envOverride.API_URL??t.t().API_URL??``}set API_URL(e){this._envOverride.API_URL=e}get ADMIN_URI(){return this._envOverride.ADMIN_URI??t.t().ADMIN_URI??``}set ADMIN_URI(e){this._envOverride.ADMIN_URI=e}get cLink(){return this._cLinkOverride??this.ADMIN_URI+this.cUri}set cLink(e){this._cLinkOverride=e}getDataUrl=``;deleteUrl=``;copyUrl=``;exportUrl=``;title=``;handleChange=async e=>{try{e.preventDefault();let{name:t}=e.target,r=await o.l(e,this.state.data.filter||{});if(t===`pageLen`){await this.setFilter(r);let e=r?n.a(r):``;this.props.navigate(`${this.cUri}?${e}`,{replace:!0}),await this.fetchData()}else this.setState(e=>({data:{...e.data,filter:r}}))}catch(e){console.log(e)}};handleSearchForm=async e=>{try{e.preventDefault();let t=await o.c(this.state.data.filter||{},this.cUri,this.props.navigate);await this.setFilter(t),await this.fetchData()}catch(e){console.log(e)}};handleClickPage=async e=>{try{e.preventDefault();let t=await o.s(e,this.state.data.filter||{},this.cUri,this.props.navigate);await this.setFilter(t),await this.fetchData()}catch(e){n.x(n.s(e))}};handleDeleteOne=async e=>{n.b().then(async()=>{try{await n.n(`${this.deleteUrl}/${e}`,{},`DELETE`),n.S(`Xoá thành công!`,`top-end`,!0),await this.fetchData()}catch(e){n.x(n.s(e))}})};handleDelete=async()=>{this.state.selectedIds.length?n.b().then(async()=>{try{await n.n(this.deleteUrl,{selected:this.state.selectedIds},`POST`),n.S(`Xoá thành công!`,`top-end`,!0),await this.fetchData()}catch(e){n.x(n.s(e))}}):n.x(`Vui lòng chọn thông tin`)};handleCopy=async()=>{this.state.selectedIds.length?n.b().then(async()=>{try{await n.n(this.copyUrl,{selected:this.state.selectedIds},`POST`),n.S(`Sao chép thành công!`,`top-end`,!0),await this.fetchData()}catch(e){n.x(n.s(e))}}):n.x(`Vui lòng chọn thông tin`)};handleExport=async()=>{try{let{data:e}=this.state,t=n.a(e.filter||{});this.exportUrl&&(window.location.href=this.exportUrl+`?${t}`)}catch(e){n.x(n.s(e))}};handleSelectOne=(e,t)=>{this.setState(n=>({selectedIds:t?[...new Set([...Array.isArray(n.selectedIds)?n.selectedIds:[],e])]:(n.selectedIds??[]).filter(t=>t!==e)}))};handleSelectAll=(e,t=[])=>{this.setState({selectedIds:e?(this.state.data?.items??[]).map(e=>e.id).filter(e=>typeof e==`number`).filter(e=>!t.includes(e)):[]})};setFilter(e){return new Promise(t=>{this.setState(t=>({data:{...t.data,filter:e}}),t)})}fetchData=async()=>{try{let e=await o.o(this.state.data.filter||{},this.getDataUrl);if(!e||!(`items`in e))return;this.setState({data:{...e,filter:e.filter??this.state.data.filter},selectedIds:[]})}catch(e){console.error(n.s(e))}};syncGetField=async()=>({userfield:{},tablefield:{}});syncPermissionsAndState=async()=>{let{menuData:e,user:t}=this.props,n={isCre:this.activeMethod.includes(`cre`)?f(e,this.module,this.controller,`update`,0,t.groupId):!1,isEdit:this.activeMethod.includes(`edit`)?f(e,this.module,this.controller,`update`,1,t.groupId):!1,isDel:this.activeMethod.includes(`del`)?f(e,this.module,this.controller,`delete`,0,t.groupId):!1,isDelOne:this.activeMethod.includes(`delone`)?f(e,this.module,this.controller,`delete`,1,t.groupId):!1,isIndex:this.activeMethod.includes(`ind`)?f(e,this.module,this.controller,`index`,0,t.groupId):!1,isDetail:this.activeMethod.includes(`det`)?f(e,this.module,this.controller,`detail`,0,t.groupId):!1,isImport:!!this.activeMethod.includes(`imp`),isExport:!!this.activeMethod.includes(`exp`),isCopy:!!this.activeMethod.includes(`cpy`)};this.setState(n,async()=>{if(n.isIndex){if(this.hasField){let{userfield:e,tablefield:t}=await this.syncGetField(),n=e?.data?.ftfield||t?.data?.deft||[],r=e?.data?.tbfield||t?.data?.detb||[];this.setState(e=>({...e,ftfield:n,tbfield:r}))}await this.fetchData(),this.setState({loading:!1}),await this.componentDidMountAfter()}})};async initDidMount(){try{if(this.effectRan)return;this.effectRan=!0;let e=new URLSearchParams(window.location.search),t=Object.fromEntries(e.entries()),n={...this.state.data.filter||{},page:1,...t};await this.setFilter(n),this.props.user?.groupId&&await this.syncPermissionsAndState()}catch(e){n.x(n.s(e))}}componentDidMount(){this.initDidMount()}componentDidMountAfter=async()=>{};renderHeaderIndex(){return(0,l.jsx)(o.n,{adminUri:this.ADMIN_URI,title:this.title,cUri:this.cUri,isExp:this.state.isExport,isImp:this.state.isImport,isCre:this.state.isCre,isDel:this.state.isDel,isCpy:this.state.isCopy,isField:this.hasField,onExport:this.handleExport,onCopy:this.handleCopy,onDelete:this.handleDelete})}renderTable=()=>(0,l.jsx)(l.Fragment,{});renderSearch=()=>(0,l.jsx)(l.Fragment,{});render(){let{isIndex:e,data:t,loading:n}=this.state;return e===!1?(0,l.jsx)(o.a,{cUriTitle:this.title,cUri:this.cUri,title:this.title,fluid:this.fluid}):(0,l.jsxs)(l.Fragment,{children:[(0,l.jsx)(d.Helmet,{children:(0,l.jsx)(`title`,{children:this.title})}),(0,l.jsx)(a.t,{loading:n,children:e&&(0,l.jsxs)(`div`,{className:`mb-3 ${this.fluid?`container-fluid`:`container`}`,children:[this.renderHeaderIndex(),(0,l.jsx)(`div`,{className:`card position-relative`,children:(0,l.jsx)(`div`,{className:`card-body`,style:{minHeight:`200px`},children:(0,l.jsxs)(`div`,{className:`searchForm`,children:[(0,l.jsx)(`form`,{onSubmit:this.handleSearchForm,children:this.renderSearch()}),t?.items?.length?(0,l.jsx)(o.u,{data:t,onChange:this.handleChange,onClickPage:this.handleClickPage}):``,(0,l.jsx)(`div`,{className:`table-responsive mt-2`,children:this.renderTable()}),t?.items?.length?(0,l.jsx)(o.u,{data:t,onChange:this.handleChange,onClickPage:this.handleClickPage}):``]})})})]})})]})}},_=({adminUri:e,cUri:t,title:n,itemId:r,isSave:i=!0,titleAction:a})=>(0,l.jsxs)(`div`,{className:`navbar navbar-main navbar-expand-lg px-0 shadow-none border-radius-xl py-3`,children:[(0,l.jsx)(`nav`,{"aria-label":`breadcrumb`,children:(0,l.jsxs)(`ol`,{className:`breadcrumb bg-transparent m-0 p-0`,children:[(0,l.jsx)(`li`,{className:`breadcrumb-item`,children:(0,l.jsx)(u.Link,{className:`text-white`,to:e||`/`,children:(0,l.jsx)(`i`,{className:`fal fa-home`})})}),(0,l.jsx)(`li`,{className:`breadcrumb-item`,children:(0,l.jsx)(u.Link,{className:`text-white`,to:t,children:n})}),(0,l.jsx)(`li`,{className:`breadcrumb-item text-white active`,"aria-current":`page`,children:a??(r?`Chỉnh sửa`:`Thêm mới`)})]})}),(0,l.jsxs)(`div`,{className:`ms-auto`,children:[i&&(0,l.jsx)(o.d,{title:`Lưu lại`,children:(0,l.jsx)(`button`,{type:`submit`,className:`btn btn-sm btn-icon btn-success me-1`,children:(0,l.jsx)(`i`,{className:`material-icons text-white position-relative text-lg`,children:`save`})})}),(0,l.jsx)(o.d,{title:`Trở lại`,children:(0,l.jsx)(u.Link,{to:t,className:`btn btn-sm btn-icon btn-secondary`,children:(0,l.jsx)(`i`,{className:`material-icons text-white position-relative text-lg`,children:`reply`})})})]})]}),v=({title:e=``,cUri:t=``,fluid:n=!1,cUriTitle:r=``})=>(0,l.jsxs)(l.Fragment,{children:[(0,l.jsx)(d.Helmet,{children:(0,l.jsx)(`title`,{children:e||`Truy cập không được phép`})}),(0,l.jsxs)(`div`,{className:`${n?`container-fluid`:`container`}`,children:[(0,l.jsx)(`div`,{className:`navbar navbar-main navbar-expand-lg px-0 shadow-none border-radius-xl py-3`,children:(0,l.jsx)(`nav`,{"aria-label":`breadcrumb`,children:(0,l.jsxs)(`ol`,{className:`breadcrumb bg-transparent m-0 p-0`,children:[(0,l.jsx)(`li`,{className:`breadcrumb-item`,children:(0,l.jsx)(u.Link,{className:`text-white`,to:`/`,children:(0,l.jsx)(`i`,{className:`fal fa-home`})})}),(0,l.jsx)(`li`,{className:`breadcrumb-item`,children:(0,l.jsx)(u.Link,{className:`text-white`,to:t,children:r})})]})})}),(0,l.jsx)(`div`,{style:{minHeight:`50vh`},className:`d-flex align-items-center`,children:(0,l.jsxs)(`div`,{className:`m-auto text-center`,children:[(0,l.jsx)(`h1`,{className:`display-1 text-bolder text-white`,children:`403`}),(0,l.jsx)(`h2`,{className:`text-white`,children:`Truy cập không được phép`}),(0,l.jsx)(`p`,{className:`lead text-white`,children:`Xin lỗi, bạn không có quyền truy cập vào trang này.`}),(0,l.jsx)(u.Link,{to:`/`,className:`btn btn-outline-white mt-4`,children:`trang chủ`})]})})]})]}),y=({title:e=``,cUri:t=``,fluid:n=!1,cUriTitle:r=``})=>(0,l.jsxs)(l.Fragment,{children:[(0,l.jsx)(d.Helmet,{children:(0,l.jsx)(`title`,{children:e||`Không tìm thấy dữ liệu`})}),(0,l.jsxs)(`div`,{className:`${n?`container-fluid`:`container`}`,children:[(0,l.jsx)(`div`,{className:`navbar navbar-main navbar-expand-lg px-0 shadow-none border-radius-xl py-3`,children:(0,l.jsx)(`nav`,{"aria-label":`breadcrumb`,children:(0,l.jsxs)(`ol`,{className:`breadcrumb bg-transparent m-0 p-0`,children:[(0,l.jsx)(`li`,{className:`breadcrumb-item`,children:(0,l.jsx)(u.Link,{className:`text-white`,to:`/`,children:(0,l.jsx)(`i`,{className:`fal fa-home`})})}),(0,l.jsx)(`li`,{className:`breadcrumb-item`,children:(0,l.jsx)(u.Link,{className:`text-white`,to:t,children:r})})]})})}),(0,l.jsx)(`div`,{style:{minHeight:`50vh`},className:`d-flex align-items-center`,children:(0,l.jsxs)(`div`,{className:`m-auto text-center`,children:[(0,l.jsx)(`h1`,{className:`display-1 text-bolder text-white`,children:`404`}),(0,l.jsx)(`h2`,{className:`text-white`,children:`Không tìm thấy dữ liệu`}),(0,l.jsx)(`p`,{className:`lead text-white`,children:`Xin lỗi, dữ liệu của bạn không được tìm thấy`}),(0,l.jsx)(u.Link,{to:`/`,className:`btn btn-outline-white mt-4`,children:`trang chủ`})]})})]})]}),b=class extends c.default.Component{effectRan=!1;module=`admins`;controller=``;state={formValue:{},error:{},loading:!0,item:void 0,isCre:void 0,isEdit:void 0,isDetail:void 0};title=``;cUri=``;_envOverride={};_cLinkOverride;get API_URL(){return this._envOverride.API_URL??t.t().API_URL??``}set API_URL(e){this._envOverride.API_URL=e}get ADMIN_URI(){return this._envOverride.ADMIN_URI??t.t().ADMIN_URI??``}set ADMIN_URI(e){this._envOverride.ADMIN_URI=e}get cLink(){return this._cLinkOverride??this.ADMIN_URI+this.cUri}set cLink(e){this._cLinkOverride=e}getDataUrl=``;editUrl=``;createUrl=``;ctype=`application/json`;formRef;fluid=!1;isBackUri=!0;debug=!1;constructor(e){super(e),this.formRef=c.default.createRef()}renderForm=()=>(0,l.jsx)(l.Fragment,{});renderAfterForm=()=>(0,l.jsx)(l.Fragment,{});handleChange=e=>{e.preventDefault();let t=r.r(e);this.setState(e=>({formValue:r.n(e.formValue,t)}))};syncPermissionsAndState=async()=>{let{menuData:e,user:t}=this.props,i={isCre:f(e,this.module,this.controller,`update`,0,t.groupId),isEdit:f(e,this.module,this.controller,`update`,1,t.groupId),isDetail:f(e,this.module,this.controller,`detail`,0,t.groupId)};this.setState(i,async()=>{let e=n.d();if(e&&i.isEdit){let t=await n.n(this.getDataUrl+`/`+e,{},`GET`,`application/json`,!1),i=t?t.data:void 0;this.setState({item:i||!1,formValue:i?JSON.parse(JSON.stringify(i)):{}},async()=>{this.setState({loading:!1}),await this.componentDidMountAfter(),this.formRef.current&&new r.t(this.formRef.current).run()})}else{if(this.setState({loading:!1}),await this.componentDidMountAfter(),!this.formRef.current)return;new r.t(this.formRef.current).run()}})};async initDidMount(){try{if(this.effectRan)return;this.effectRan=!0,this.props.user?.groupId&&await this.syncPermissionsAndState()}catch(e){n.s(e)===`invalid_404`&&this.props.navigate(this.cUri),n.x(n.s(e))}}componentDidMount=()=>{this.initDidMount()};componentDidMountAfter=async()=>{};beforeSubmit=()=>new Promise(e=>{e(!0)});handleSubmit=async e=>{e.preventDefault();let{item:t,formValue:i}=this.state,a=r.o(t),o=new r.t(this.formRef.current);!o.hasErrors()&&!o.isIncomplete()&&this.formRef.current&&this.beforeSubmit().then(async()=>{this.setState({loading:!0});try{let e=a?this.editUrl+`/`+a:this.createUrl,t=await n.n(e,i,`POST`,this.ctype);if(a?n.S(`Cập nhật thành công`,`top-end`,!0):n.S(`Thêm mới thành công`,`top-end`,!0),t?.data?.id){if(this.isBackUri)return this.props.navigate(this.cUri);this.props.navigate(this.cUri+`/edit/`+Number(t.data.id)),this.setState({item:{...t.data},formValue:{...t.data}},async()=>{await this.afterSubmit(t.data)})}}catch(e){n.x(n.s(e))}finally{this.setState({loading:!1})}})};afterSubmit=async e=>{};renderHeaderUpdate(){return(0,l.jsx)(_,{adminUri:this.ADMIN_URI,title:this.title,cUri:this.cUri,itemId:r.o(this.state.item)})}render(){let e=n.d(),{isCre:t,isEdit:i,isDetail:o,item:s}=this.state;return t===!1&&i===!1&&o===!1||t===!1&&e==null||(i===!1||o===!1)&&e?(0,l.jsx)(v,{cUriTitle:this.title,cUri:this.cUri,title:this.title+` | `+(e?`Chỉnh sửa`:`Thêm mới`),fluid:this.fluid}):e&&s===!1?(0,l.jsx)(y,{cUriTitle:this.title,cUri:this.cUri,title:this.title+` | `+(e?`Chỉnh sửa`:`Thêm mới`)}):(0,l.jsxs)(l.Fragment,{children:[(0,l.jsx)(d.Helmet,{children:(0,l.jsxs)(`title`,{children:[this.title,` | `,r.o(s)?`Chỉnh sửa`:`Thêm mới`]})}),(0,l.jsxs)(`div`,{className:`mb-3 ${this.fluid?`container-fluid`:`container`}`,children:[(0,l.jsx)(`div`,{dangerouslySetInnerHTML:{__html:n.y(this.state.error)}}),(0,l.jsx)(u.Form,{ref:this.formRef,className:`position-relative`,method:`post`,encType:`multipart/form-data`,"data-toggle":`validator`,role:`form`,onSubmit:this.handleSubmit,children:(0,l.jsxs)(a.t,{loading:!!this.state.loading,style:{minHeight:200,marginTop:20},children:[this.renderHeaderUpdate(),this.renderForm()]})}),this.renderAfterForm()]})]})}},x=class extends b{urlUpdateDetail=``;render(){let e=n.d(),{isCre:t,isEdit:i,isDetail:o,item:s}=this.state;if(t===!1&&i===!1&&o===!1||t===!1&&e==null||(i===!1||o===!1)&&e)return(0,l.jsx)(v,{cUriTitle:this.title,cUri:this.cUri,title:this.title+` | `+(e?`Chỉnh sửa`:`Thêm mới`),fluid:this.fluid});if(e&&s===!1)return(0,l.jsx)(y,{cUriTitle:this.title,cUri:this.cUri,title:this.title+` | `+(e?`Chỉnh sửa`:`Thêm mới`)});let c=r.o(s);return(0,l.jsxs)(l.Fragment,{children:[(0,l.jsx)(d.Helmet,{children:(0,l.jsxs)(`title`,{children:[this.title,` | `,c?`Chỉnh sửa`:`Thêm mới`]})}),(0,l.jsxs)(`div`,{className:`mb-3 ${this.fluid?`container-fluid`:`container`}`,children:[(0,l.jsx)(_,{adminUri:this.ADMIN_URI,title:this.title,cUri:this.cUri,isSave:!1,itemId:c}),(0,l.jsx)(`div`,{dangerouslySetInnerHTML:{__html:n.y(this.state.error)}}),(0,l.jsx)(`div`,{className:`position-relative`,children:(0,l.jsx)(a.t,{loading:!!this.state.loading,style:{minHeight:200,marginTop:0},children:this.renderForm()})})]})]})}handleDetailSubmit=async(e,t)=>{try{let i=r.o(this.state.item);i&&e?.length&&(n.C(t,!0),await n.n(this.urlUpdateDetail,{itemid:i,details:e}),n.C(t,!1),n.S(`Thêm tài sản thành công`,`top-end`,!0),await this.editDetailAfter(i),this.props.navigate(this.cUri+`/edit/`+i))}catch(e){n.x(n.s(e)),n.C(t,!1)}};editDetailAfter=async e=>{}},S=class extends b{urlGetDeTableList=``;urlGetDeTable=``;urlCreDeTable=``;urlEditDeTable=``;urlDelDeTable=``;modalRef;isBackUri=!1;constructor(e){super(e),this.modalRef=(0,c.createRef)()}async fetchDataDetails(){return{}}render(){let e=n.d(),{isCre:t,isEdit:i,isDetail:a,item:o}=this.state;if(t===!1&&i===!1&&a===!1||t===!1&&e==null||(i===!1||a===!1)&&e)return(0,l.jsx)(v,{cUriTitle:this.title,cUri:this.cUri,title:this.title+` | `+(e?`Chỉnh sửa`:`Thêm mới`),fluid:this.fluid});if(e&&o===!1)return(0,l.jsx)(y,{cUriTitle:this.title,cUri:this.cUri,title:this.title+` | `+(e?`Chỉnh sửa`:`Thêm mới`)});let s=r.o(o);return(0,l.jsxs)(l.Fragment,{children:[(0,l.jsx)(d.Helmet,{children:(0,l.jsxs)(`title`,{children:[this.title,` | `,s?`Chỉnh sửa`:`Thêm mới`]})}),(0,l.jsxs)(`div`,{className:`mb-3 ${this.fluid?`container-fluid`:`container`}`,children:[(0,l.jsx)(_,{adminUri:this.ADMIN_URI,title:this.title,cUri:this.cUri,isSave:!1,itemId:s}),o?this.renderDeTable():null,this.renderForm()]})]})}renderDeTable(){return(0,l.jsx)(l.Fragment,{})}renderModalDeBody=(e,t)=>(0,l.jsx)(l.Fragment,{});handleDetailSubmit=async e=>{e.preventDefault()};editDetailAfter=async e=>{}};Object.defineProperty(exports,"a",{enumerable:!0,get:function(){return h}}),Object.defineProperty(exports,"i",{enumerable:!0,get:function(){return g}}),Object.defineProperty(exports,"n",{enumerable:!0,get:function(){return x}}),Object.defineProperty(exports,"o",{enumerable:!0,get:function(){return m}}),Object.defineProperty(exports,"r",{enumerable:!0,get:function(){return b}}),Object.defineProperty(exports,"s",{enumerable:!0,get:function(){return p}}),Object.defineProperty(exports,"t",{enumerable:!0,get:function(){return S}});
|
package/dist/utils/Common.d.ts
CHANGED
|
@@ -1,9 +1,11 @@
|
|
|
1
|
+
import { SweetAlertPosition } from 'sweetalert2';
|
|
2
|
+
import { Modal } from 'bootstrap';
|
|
1
3
|
import { default as Decimal } from 'decimal.js';
|
|
2
4
|
import { CrudItem, FormValue } from '../hook/common';
|
|
3
5
|
export declare const loadScript: (src: string) => Promise<void>;
|
|
4
6
|
export declare const loadScripts: (scripts: string[]) => Promise<void>;
|
|
5
7
|
export declare const spinnerLoader: (box: string | Element, action?: boolean) => void;
|
|
6
|
-
export declare const buildFormData: (data: Record<string,
|
|
8
|
+
export declare const buildFormData: (data: Record<string, unknown>) => FormData;
|
|
7
9
|
export declare class ApiError extends Error {
|
|
8
10
|
errorCode: string;
|
|
9
11
|
constructor(message: string, errorCode: string);
|
|
@@ -35,7 +37,7 @@ export declare const callFetchApi: <T = Record<string, unknown>>(url: string, da
|
|
|
35
37
|
export declare function callFetchApiToken<T = Record<string, unknown>>(url: string, data?: FormValue, type?: string, ctype?: string, isTry?: true): Promise<ApiResponse<T>>;
|
|
36
38
|
export declare function callFetchApiToken<T = Record<string, unknown>>(url: string, data: FormValue | undefined, type: string | undefined, ctype: string | undefined, isTry: false): Promise<ApiResponse<T> | false>;
|
|
37
39
|
export declare const showSweetAlert: (text?: string, confirmText?: string) => Promise<import('sweetalert2').SweetAlertResult<any>>;
|
|
38
|
-
export declare const showSweetAlertOk: (title: string, pos?:
|
|
40
|
+
export declare const showSweetAlertOk: (title: string, pos?: SweetAlertPosition, toast?: boolean) => void;
|
|
39
41
|
export declare const showSweetAlertWarning: (title: string) => void;
|
|
40
42
|
export declare const showSweetAlertError: (title: string) => void;
|
|
41
43
|
/**
|
|
@@ -86,7 +88,7 @@ export declare const formatDateSql: (date: DateInput) => string;
|
|
|
86
88
|
*/
|
|
87
89
|
export declare const getParams: (name?: string | string[] | null) => string | Record<string, string | null> | null;
|
|
88
90
|
export declare const setParams: (newParams: Record<string, string | null>) => string;
|
|
89
|
-
export declare const createQueryString: (params: Record<string,
|
|
91
|
+
export declare const createQueryString: (params: Record<string, unknown>) => string;
|
|
90
92
|
/**
|
|
91
93
|
* Lấy `:id` từ URL hiện tại.
|
|
92
94
|
*
|
|
@@ -148,23 +150,79 @@ export declare const showMessage: (errors?: {
|
|
|
148
150
|
raw?: boolean;
|
|
149
151
|
}) => string;
|
|
150
152
|
export declare const resetForm: (form: HTMLFormElement) => HTMLFormElement;
|
|
151
|
-
export declare const mapDataForm: (form: HTMLFormElement, data: Record<string,
|
|
152
|
-
export declare const elFinderPopup: (el: string, options?: Record<string,
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
153
|
+
export declare const mapDataForm: (form: HTMLFormElement, data: Record<string, unknown>, hidden?: boolean) => Promise<Record<string, unknown>>;
|
|
154
|
+
export declare const elFinderPopup: (el: string, options?: Record<string, unknown>) => Promise<unknown>;
|
|
155
|
+
/**
|
|
156
|
+
* Lấy message từ giá trị trong `catch`.
|
|
157
|
+
*
|
|
158
|
+
* `catch` nhận `unknown` (`useUnknownInCatchVariables` bật cùng `strict`) vì
|
|
159
|
+
* JavaScript cho `throw` BẤT KỲ thứ gì — kể cả chuỗi. Trong codebase này
|
|
160
|
+
* `Promise.reject("invalid_404")` là mẫu rất hay dùng, và các call site so sánh
|
|
161
|
+
* `error.message == "invalid_404"`. Nếu ép `catch (error: any)` chỉ để đọc
|
|
162
|
+
* `.message` thì với các giá trị đó runtime sẽ ra `undefined` và so sánh luôn
|
|
163
|
+
* sai — tức là mất luôn cả nhánh xử lý 404.
|
|
164
|
+
*
|
|
165
|
+
* Vì vậy: `Error` thì lấy `.message`, chuỗi thì trả chính nó, còn lại thử
|
|
166
|
+
* `JSON.stringify`. `JSON.stringify` có thể ném với `BigInt`/vòng lặp nên bọc
|
|
167
|
+
* trong `try`.
|
|
168
|
+
*/
|
|
169
|
+
export declare const errorMessage: (error: unknown) => string;
|
|
170
|
+
/**
|
|
171
|
+
* Mở modal Bootstrap và trả về instance để điều khiển (`show`/`hide`).
|
|
172
|
+
*
|
|
173
|
+
* Khai báo rõ kiểu của `Promise` vì `new Promise((resolve) => ...)` không có
|
|
174
|
+
* type argument sẽ suy ra là `Promise<unknown>` — mọi call site phải ép `any`
|
|
175
|
+
* mới destructure được `{ md, modalEl }`. `Modal` lấy từ `bootstrap` nên có kiểu
|
|
176
|
+
* đầy đủ (`hide`/`show`/`dispose`), không phải tự định nghĩa.
|
|
177
|
+
*/
|
|
178
|
+
export declare const createModal: (modalCls: string | HTMLElement) => Promise<{
|
|
179
|
+
md: Modal;
|
|
180
|
+
modalEl: HTMLElement;
|
|
181
|
+
}>;
|
|
182
|
+
/**
|
|
183
|
+
* Payload mà `showFinderModal`/`showFinderFileModal` đưa cho callback của
|
|
184
|
+
* consumer.
|
|
185
|
+
*
|
|
186
|
+
* `data` là kết quả từ elFinder nên để `unknown` — tuỳ chế độ chọn nó là 1 file
|
|
187
|
+
* hoặc mảng file, và `ElFinderFile` đã mô tả đúng một file. `md` là instance
|
|
188
|
+
* `Modal` của bootstrap, `btnEl` là phần tử đã bấm.
|
|
189
|
+
*/
|
|
190
|
+
export interface FinderModalItem {
|
|
191
|
+
data: unknown;
|
|
162
192
|
modalEl?: HTMLElement;
|
|
163
|
-
btnEl?:
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
193
|
+
btnEl?: HTMLDivElement;
|
|
194
|
+
/**
|
|
195
|
+
* Instance modal để điều khiển.
|
|
196
|
+
*
|
|
197
|
+
* Đánh dấu OPTIONAL vì consumer có thể tự dựng object này khi test; nhưng hai
|
|
198
|
+
* hàm `showFinderModal`/`showFinderFileModal` LUÔN truyền kèm `md` nên
|
|
199
|
+
* call site thật dùng callback `FinderModalItem` sẽ không phải kiểm tra lại.
|
|
200
|
+
*/
|
|
201
|
+
md?: Modal;
|
|
202
|
+
}
|
|
203
|
+
export declare const showFinderModal: (btnEl: HTMLDivElement, modalCls: string, fnShow?: ((item: FinderModalItem) => void) | false, fnHide?: (() => void) | false) => void;
|
|
204
|
+
export declare const showFinderFileModal: (btnEl: HTMLDivElement, modalCls: string, fnShow?: ((item: FinderModalItem) => void) | false, fnHide?: (() => void) | false) => void;
|
|
205
|
+
/**
|
|
206
|
+
* Giá trị đọc được từ `stringToJson` khi `type` không phải `"ids"`.
|
|
207
|
+
*
|
|
208
|
+
* Hàm xử lý cả mảng lẫn object tuỳ input nên kiểu trả về là `unknown` — bắt
|
|
209
|
+
* buộc call site tự kiểm tra trước khi dùng, thay vì `any` khiến mọi thứ biến
|
|
210
|
+
* thành `any[]` ngay từ đầu.
|
|
211
|
+
*/
|
|
212
|
+
export type ParsedJson = unknown;
|
|
213
|
+
/**
|
|
214
|
+
* Ép một mảng bất kỳ thành `number[]`, bỏ `NaN` và trùng lặp.
|
|
215
|
+
*
|
|
216
|
+
* Input đến từ query string / JSON nên có thể là chuỗi số, số, hoặc rỗng.
|
|
217
|
+
*/
|
|
218
|
+
export declare const filterIds: (input: ParsedJson | string) => number[];
|
|
219
|
+
/**
|
|
220
|
+
* Đọc JSON từ chuỗi (query string, hidden field...) với giá trị mặc định.
|
|
221
|
+
*
|
|
222
|
+
* Trả về `unknown` vì kết quả có thể là mảng hoặc object tuỳ nội dung JSON —
|
|
223
|
+
* người gọi phải tự kiểm tra. `type = "ids"` thì lọc thành `number[]`.
|
|
224
|
+
*/
|
|
225
|
+
export declare function stringToJson(input: unknown, df?: unknown, type?: string): ParsedJson;
|
|
168
226
|
/** Luôn trả về chuỗi đã format (0 -> "0", null -> "0") để không lệch return type. */
|
|
169
227
|
export declare const formatNumber: (number: number, options?: Intl.NumberFormatOptions, type?: string) => string;
|
|
170
228
|
export declare const decimalNumber: (value: string | number) => Decimal;
|
|
@@ -187,7 +245,7 @@ export declare const decimalNumber: (value: string | number) => Decimal;
|
|
|
187
245
|
* const ids = mapArrFields(data, 'id');
|
|
188
246
|
* // Kết quả: [1, 2, 3]
|
|
189
247
|
*/
|
|
190
|
-
export declare const mapArrFields: (data:
|
|
248
|
+
export declare const mapArrFields: (data: readonly CrudItem[], field: string) => unknown[];
|
|
191
249
|
/**
|
|
192
250
|
* Gộp (merge) các object trong mảng thành một object duy nhất
|
|
193
251
|
* Các key trùng nhau sẽ bị ghi đè bởi object xuất hiện sau
|
|
@@ -204,10 +262,7 @@ export declare const mapArrFields: (data: any[], field: any) => any[];
|
|
|
204
262
|
* const result = mergeArrObject(data);
|
|
205
263
|
* // Kết quả: { a: 1, b: 3, c: 4, d: 5 }
|
|
206
264
|
*/
|
|
207
|
-
export declare const mergeArrObject: (array1:
|
|
208
|
-
id: number;
|
|
209
|
-
name: string;
|
|
210
|
-
}[];
|
|
265
|
+
export declare const mergeArrObject: (array1: readonly unknown[], array2: readonly CrudItem[], field1: string, field2: string, field2S: string) => Record<string, unknown>[];
|
|
211
266
|
/**
|
|
212
267
|
* Map lại dữ liệu của mảng object theo rule chỉ định
|
|
213
268
|
*
|
|
@@ -238,11 +293,29 @@ export declare const mergeArrObject: (array1: any[], array2: any[], field1: stri
|
|
|
238
293
|
* // { userId: 2, fullName: 'Bình', isAdult: true }
|
|
239
294
|
* // ]
|
|
240
295
|
*/
|
|
241
|
-
|
|
296
|
+
/**
|
|
297
|
+
* Quy tắc ánh xạ cho `mapArrData`: hoặc tên field cần lấy, hoặc hàm tự tính.
|
|
298
|
+
*
|
|
299
|
+
* Về callback: dùng `(...args: never[]) => unknown` chứ không phải
|
|
300
|
+
* `(item: CrudItem) => unknown`. `never` ở vị trí tham số khiến mọi callback có
|
|
301
|
+
* tham số kiểu cụ thể hơn đều gán được (contravariance) — nếu khai báo
|
|
302
|
+
* `(item: CrudItem)` thì consumer viết `(item: { age: number }) => ...` sẽ bị
|
|
303
|
+
* báo lỗi dù hoàn toàn hợp lệ. Thân hàm thì vẫn gọi với `item` thật.
|
|
304
|
+
*/
|
|
305
|
+
export type MapArrDataRule = Record<string, string | ((...args: never[]) => unknown)>;
|
|
306
|
+
export declare const mapArrData: (arr: readonly CrudItem[], rule: MapArrDataRule) => CrudItem[];
|
|
242
307
|
export declare const isStsNum: (status: number, type: string, tryThrow?: boolean) => boolean;
|
|
243
308
|
export declare function sumArrCol<T extends Record<string, number>>(items: T[], col: keyof T): number;
|
|
244
309
|
export declare const getFilterType: (type: number) => string;
|
|
245
|
-
|
|
310
|
+
/** Một ngôn ngữ trong danh sách `getLangs`. */
|
|
311
|
+
export interface Lang {
|
|
246
312
|
id: number;
|
|
247
313
|
name: string;
|
|
248
|
-
}
|
|
314
|
+
}
|
|
315
|
+
/**
|
|
316
|
+
* Danh sách ngôn ngữ, hoặc tên ngôn ngữ khi truyền `key`.
|
|
317
|
+
*
|
|
318
|
+
* Trả về `Lang[] | string` nên call site phải biết mình đang ở nhánh nào —
|
|
319
|
+
* trước đây kiểu `any` khiến `BoxAddRow` phải ép `as Array<{id;name}>`.
|
|
320
|
+
*/
|
|
321
|
+
export declare const getLangs: (key?: number | false) => Lang[] | string;
|
package/dist/utils/Env.d.ts
CHANGED
package/dist/utils/index.cjs
CHANGED
|
@@ -8,4 +8,4 @@ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=requi
|
|
|
8
8
|
<div class="rect6"></div>
|
|
9
9
|
<div class="rect7"></div>
|
|
10
10
|
</div>
|
|
11
|
-
</div>`);else{let e=n.querySelector(`.boxSpinner`);e&&e.remove()}}},u=e=>{let t=new FormData;return Object.entries(e).forEach(([e,n])=>{if(n!=null){if(n instanceof FileList){Array.from(n).forEach(n=>t.append(e,n));return}if(n instanceof File){t.append(e,n);return}if(Array.isArray(n)&&n.every(e=>e instanceof File)){n.forEach(n=>t.append(e,n));return}if(Array.isArray(n)&&n.every(e=>[`string`,`number`,`boolean`].includes(typeof e))){n.forEach(n=>t.append(e,n.toString()));return}if(typeof n==`object`){t.append(e,JSON.stringify(n));return}t.append(e,n)}}),t},d=class extends Error{errorCode;constructor(e,t){super(e),this.name=`ApiError`,this.errorCode=t}},te=async(e,t={},n=`POST`,r=`application/json`)=>{let i={method:n,headers:{"Content-Type":r,"Secret-Key":s(`SECRET_KEY`)},credentials:`include`};n==`POST`&&(i.body=JSON.stringify(t));let a=await(await fetch(e,i)).json();if(a.status==200)return a;throw a.msg?new d(a.msg,a.errorCode??`unknown`):Error(`invalid_response`)};async function f(e,t={},n=`POST`,r=`application/json`,i=!0){let a={"Secret-Key":s(`SECRET_KEY`)};r!==`multipart/form-data`&&(a[`Content-Type`]=r);let o={method:n,headers:a,credentials:`include`};if(n==`POST`&&(o.body=r===`multipart/form-data`?u(t):JSON.stringify(t)),n===`GET`&&Object.keys(t).length>0){let n=new URLSearchParams;Object.entries(t).forEach(([e,t])=>{Array.isArray(t)?t.forEach(t=>n.append(e,String(t))):n.append(e,String(t))});let r=n.toString();e+=(e.includes(`?`)?`&`:`?`)+r}let c=await(await fetch(e,o)).text(),l=null;if(c)try{l=JSON.parse(c)}catch{l=c}if(l&&typeof l!=`string`&&l.status==200)return l;if(l&&typeof l!=`string`&&l.msg&&i)throw new d(l.msg,l.errorCode??`unknown`);if(i)throw Error(`invalid_response`);return!1}var p=(e=`Bạn có chắc muốn thực hiện thao tác này ?`,t=`Đồng ý`)=>(0,r.default)(n.default).fire({title:`Xác nhận`,text:e,icon:`warning`,showCancelButton:!0,confirmButtonColor:`#4CAF50`,cancelButtonColor:`#F44336`,confirmButtonText:t,cancelButtonText:`Hủy`,position:`top`}),m=(e,t=`top`,i=!1)=>{(0,r.default)(n.default).fire({toast:i,icon:`success`,position:t,title:e,showConfirmButton:!1,timer:1500})},ne=e=>{(0,r.default)(n.default).fire({icon:`warning`,title:e,showConfirmButton:!1,timer:1500})},h=e=>{(0,r.default)(n.default).fire({icon:`error`,position:`top`,title:e,showConfirmButton:!1})},re=(e,t,n=`name`)=>{let r=t?.find(t=>t.id===e);return r?r[n]??null:null},ie=(e,t,n=`name`)=>e.map(e=>{let r=t.find(t=>t.id===e);return r?r[n]:null}).filter(Boolean).join(`, `),ae=e=>Array.isArray(e)?e.map((e,t)=>`<p class="mb-0"><a class="text-info" target="_blank" rel="noopener noreferrer" href="${V(F(e,`#`))}">Tập tin ${t+1}</a></p>`).filter(Boolean).join(``):``,g=(e,t,n=!1)=>{if(e===!1)return t;let r=t.find(t=>t.id===Number(e));return r?n?`<span class="badge badge-sm bg-gradient-${r.color}">${r.name}</span>`:r.name:``},oe=[{id:1,name:`Kích hoạt`,color:`success`},{id:0,name:`Khóa`,color:`danger`}],se=[{id:1,name:`Xuất bản`,color:`success`},{id:0,name:`Nháp`,color:`danger`}],ce=[{id:1,name:`Có`,color:`success`},{id:0,name:`Không`,color:`secondary`}],_=(e,t=!1)=>g(e,oe,t),v=(e,t=!1)=>g(e,se,t),y=(e,t=!1)=>g(e,ce,t);function b(e){let t=e instanceof Date?e:new Date(e);if(isNaN(t.getTime()))throw Error(`Ngày không hợp lệ: `+e);return t}function x(e){if(!e)return new Date;if(e instanceof Date)return new Date(e);let t=e.trim().toLowerCase();if(t===`now`)return new Date;let n=new Date,r=t.match(/^([+-]?\d+)\s*(year|years|month|months|week|weeks|day|days|hour|hours|minute|minutes|min|mins|second|seconds|sec|secs)$/);if(r){let e=Number(r[1]);switch(r[2]){case`year`:case`years`:n.setFullYear(n.getFullYear()+e);break;case`month`:case`months`:n.setMonth(n.getMonth()+e);break;case`week`:case`weeks`:n.setDate(n.getDate()+e*7);break;case`day`:case`days`:n.setDate(n.getDate()+e);break;case`hour`:case`hours`:n.setHours(n.getHours()+e);break;case`minute`:case`minutes`:case`min`:case`mins`:n.setMinutes(n.getMinutes()+e);break;case`second`:case`seconds`:case`sec`:case`secs`:n.setSeconds(n.getSeconds()+e)}return n}let i=new Date(t);if(!isNaN(i.getTime()))return i;throw Error(`Invalid date expression: ${e}`)}var S=e=>{if(!e)return null;let t=new Date(e);return isNaN(t.getTime())?null:{dd:String(t.getDate()).padStart(2,`0`),MM:String(t.getMonth()+1).padStart(2,`0`),yyyy:t.getFullYear(),hh:String(t.getHours()).padStart(2,`0`),mm:String(t.getMinutes()).padStart(2,`0`),ss:String(t.getSeconds()).padStart(2,`0`)}},C=e=>{let t=S(e);return t?`${t.dd}/${t.MM}/${t.yyyy} ${t.hh}:${t.mm}:${t.ss}`:e?`Invalid Date`:``},w=e=>{let t=S(e);return t?`${t.dd}/${t.MM}/${t.yyyy}`:e?`Invalid Date`:``},T=e=>{let t=S(e);return t?`${t.yyyy}`:e?`Invalid Date`:``},E=e=>{let t=S(e);return t?`${t.yyyy}-${t.MM}-${t.dd}`:e?`Invalid Date`:``},D=e=>{let t=new URLSearchParams(window.location.search);return e?Array.isArray(e)?e.reduce((e,n)=>(e[n]=t.get(n),e),{}):t.get(e):Object.fromEntries(t.entries())},O=e=>{let t=new URLSearchParams(window.location.search);return Object.entries(e).forEach(([e,n])=>{n===null?t.delete(e):t.set(e,n)}),t.toString()},k=e=>{let t=new URLSearchParams;return Object.entries(e).forEach(([e,n])=>{Array.isArray(n)?n.forEach(n=>{n!=null&&t.append(e,String(n))}):n!=null&&t.set(e,String(n))}),t.toString()},A=(e=typeof window<`u`?window.location.pathname:``,t=/\/(?:edit|detail|update)\/(\d+)(?=\/|$)/i)=>{let n=new RegExp(t.source,t.flags.includes(`g`)?t.flags:t.flags+`g`),r=null,i;for(;(i=n.exec(e))!==null;)r=i;if(!r)return null;let a=Number(r[1]);return Number.isFinite(a)?a:null},j=(e,t=`/styles/default.jpg`)=>e?s(`STATIC_URL`)+(`/`+e).replaceAll(`//`,`/`):t,M=e=>e?s(`STATIC_URL`)+(`/`+e).replaceAll(`//`,`/`):``,N=(e,t=`/styles/default.jpg`)=>e?s(`API_URL`)+(`/`+e).replaceAll(`//`,`/`):t,P=(e,t=`/styles/default.jpg`)=>e?s(`UPLOADS_URL`)+`/`+e:t,F=(e,t=`/styles/default.jpg`)=>e?s(`UPLOADS_URL`)+`/`+e:t;function I(e){let t=``;for(let n=0;n<e;n++){let e=Math.floor(Math.random()*62);t+=`ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789`[e]}return t}function L(e){return new DOMParser().parseFromString(e,`text/html`).body.textContent||``}var R=/\.(jpg|jpeg|png|jfif|doc|docx|xls|xlsx|pdf)$/i,z=(e,t)=>{if(!e)return t;let n=e.split(`,`).map(e=>{let t=e.trim();return(t.includes(`/`)?t.slice(t.indexOf(`/`)+1):t).replace(/^\./,``)}).filter(Boolean);if(n.length===0)return t;let r=n.map(e=>e.replace(/[.*+?^${}()|[\]\\]/g,`\\$&`));return RegExp(`\\.(${r.join(`|`)})$`,`i`)},B=(e,t=20,n=R)=>new Promise((r,i)=>{let a=Array.from(e??[]);if(a.length===0)return i(Error(`Tập tin không tồn tại`));for(let e of a){if(!n.test(e.name))return h(`Tập tin không hợp lệ`),i(Error(`Tập tin không hợp lệ`));if(e.size>t*1024*1024)return h(`Tập tin tải lên không quá ${t}M`),i(Error(`Tập tin tải lên không quá ${t}M`))}r()}),le={"&":`&`,"<":`<`,">":`>`,'"':`"`,"'":`'`},V=e=>String(e??``).replace(/[&<>"']/g,e=>le[e]),H=new Set([`danger`,`success`,`warning`,`info`,`primary`,`secondary`,`light`,`dark`]),U=(e=``,t=`danger`,n={})=>{let r=H.has(t)?t:`danger`,i=e=>n.raw?e:V(e);return typeof e==`string`?e.trim()===``?``:`<div class="alert alert-${r}">${i(e)}</div>`:!e||typeof e!=`object`?``:Object.values(e).filter(e=>e!=null&&String(e).trim()!==``).map(e=>`<div class="alert alert-${r}">${i(String(e))}</div>`).join(``)},W=e=>(e.querySelectorAll(`input:not([type="hidden"]):not([type="checkbox"]):not([type="radio"]):not(.noReset), textarea`).forEach(e=>{e.value=``,e.dispatchEvent(new Event(`change`,{bubbles:!0}))}),e.querySelectorAll(`select:not(.noReset)`).forEach(e=>{let t=e.querySelector(`option[value=""]`);t?t.selected=!0:e.options.length>0&&(e.selectedIndex=0),e.dispatchEvent(new Event(`change`,{bubbles:!0}))}),e.querySelectorAll(`input[type="checkbox"]:not(.noReset)`).forEach(e=>{e.checked=!1,e.dispatchEvent(new Event(`change`,{bubbles:!0}))}),e.querySelectorAll(`input[type="radio"]:not(.noReset)`).forEach(e=>{e.checked=!1,e.dispatchEvent(new Event(`change`,{bubbles:!0}))}),e),ue=async(e,t,n=!1)=>{try{for(let r in t){let i=`[name="${r}"]:not([type="file"])`,o=e.querySelector(i);if(!o)continue;let s=o.type;if(t[r]&&![`checkbox`,`radio`].includes(s)){let e=(0,a.parse)(t[r],`yyyy-MM-dd`,new Date),n=(0,a.parse)(t[r],`yyyy-MM-dd HH:mm:ss`,new Date);o.value=(0,a.isValid)(e)&&t[r].length===10?(0,a.format)(e,`dd/MM/yyyy`):(0,a.isValid)(n)&&t[r].length===19?(0,a.format)(n,`dd/MM/yyyy HH:mm`):t[r],o.dispatchEvent(new Event(`change`,{bubbles:!0}))}else if(s===`checkbox`)o.checked=!!parseInt(t[r]),o.dispatchEvent(new Event(`change`,{bubbles:!0}));else if(s===`radio`){let n=e.querySelectorAll(`input[type="radio"][name="${r}"]`);n.forEach(e=>{e.checked=e.value===String(parseInt(t[r]))}),n.forEach(e=>e.dispatchEvent(new Event(`change`,{bubbles:!0})))}else if(n){let e=o.closest(`.form-group`);e&&e.classList.add(`hidden`)}}return t}catch(e){return Promise.reject(e)}},G=(e,t={})=>new Promise((n,r)=>{try{let r=window.jQuery,i=r(e);if(!i.length)throw Error(`invalid_elfinder`);let a={url:s(`API_URL`)+`/elfinder/connector`,height:500,resizable:!0,baseUrl:`/assets/plugins/elFinder/`,defaultView:`list`,useBrowserHistory:!1,getFileCallback:e=>{n(e)}};i.elfinder(`destroy`).elfinder({...a,...t})}catch(e){r(e)}}),K=e=>new Promise((t,n)=>{try{let n=typeof e==`string`?document.querySelector(e):e;if(!n)throw Error(`invalid_modalEl_btnEl`);n.querySelectorAll(`.btn-md-close`)?.forEach(e=>{e?.addEventListener(`click`,()=>{r.hide()})});let r=i.Modal.getOrCreateInstance(n,{backdrop:`static`,keyboard:!1});t({md:r,modalEl:n})}catch(e){console.log(e),n(e)}}),de=(e,t,n=!1,r=!1)=>{if(!e)throw Error(`invalid_btnEl`);e.addEventListener(`click`,i=>{i.preventDefault(),K(t).then(t=>{let{modalEl:i,md:a}=t;G(`#elfinderStatic`).then(t=>{n&&n({data:t,btnEl:e,md:a})}),i.addEventListener(`hidden.bs.modal`,()=>{r&&r()}),a.show()})})},fe=(e,t,n=!1,r=!1)=>{if(!e)throw Error(`invalid_btnEl`);e.addEventListener(`click`,i=>{i.preventDefault(),K(t).then(t=>{let{modalEl:i,md:a}=t;G(`#elfinderStatic`,{url:s(`API_URL`)+`/elfinder/connectorFiles`}).then(t=>{n&&n({data:t,btnEl:e,md:a})}),i.addEventListener(`hidden.bs.modal`,()=>{r&&r()}),a.show()})})},q=e=>{if(typeof e==`string`&&(e=J(e,[])),!Array.isArray(e))return[];let t=e.map(e=>Number(e));return t=t.filter(e=>!Number.isNaN(e)),[...new Set(t)]};function J(e,t={},n=`ids`){let r=t;if(Array.isArray(e)&&(r=e),typeof e==`object`&&e&&(r=e),typeof e==`number`)return t;if(typeof e==`string`)try{let t=JSON.parse(e);Array.isArray(t)&&(r=t),typeof t==`object`&&t&&(r=t)}catch{return t}return n===`ids`&&(r=q(r)),r}var pe=(e,t={},n=`vi-VN`)=>e==null||Number.isNaN(e)?`0`:e.toLocaleString(n,t),me=e=>{if(!e)return new o.default(0);let t=String(e).replace(/[^\d.]/g,``);return t?new o.default(t):new o.default(0)},he=(e,t)=>[...new Set(e.map(e=>e[t]))],ge=(e,t,n,r,i)=>{let a=e.length,o=[];for(let s=0;s<a;s++){let a=t.find(t=>t[r]===e[s]);a&&o.push({[n]:e[s],[i]:a[i]})}return o},_e=(e,t)=>e.map(e=>{let n={};for(let r in t){let i=t[r];typeof i==`string`?n[r]=e[i]:typeof i==`function`&&(n[r]=i(e))}return n}),Y=(e,t,n=!1)=>{if(t.split(`-`).map(Number).includes(e))return!0;if(n)throw Error(`invalid_status`);return!1};function ve(e,t){return e?.reduce((e,n)=>e+(n[t]??0),0)||0}var ye=e=>{switch(e){case 3:return`tháng `+(new Date().getMonth()+1);case 4:return`năm `+new Date().getFullYear()}return``},be=(e=!1)=>{let t=[{id:1,name:`Tiếng Việt`}];return e===!1?t:t.find(t=>t.id===e)?.name||``},xe=class{routes=[];async addGS(e,t,n,r=!1,i=!1,a=!1,o=!1){let s={path:e,element:t,children:[{index:!0,element:n},{path:`page/:page`,element:n}]};i&&s.children.push({path:`detail/:id`,element:i}),r&&s.children.push({path:`create`,element:r}),r&&s.children.push({path:`edit/:id`,element:r}),a&&s.children.push({path:`import`,element:a}),o&&s.children.push({path:`fields`,element:o}),this.routes.push(s)}addRoute(e=[]){this.routes=[...this.routes,...e]}getRouter(){return this.routes}},X=(e,t,n,r,i,a)=>{if(!a)return!1;if(a===1)return!0;if(!Array.isArray(e))return!1;for(let o of e)if(o){if(o.module===t&&o.controller===n&&o.action===r&&Number(o.code)===Number(i))return o.status!==0&&!!o.isPer;if(Array.isArray(o.subs)&&o.subs.length>0&&X(o.subs,t,n,r,i,a))return!0}return!1},Z=null,Q=()=>{if(Z)return Z;let e=typeof window<`u`?window.jQuery??window.$:void 0;if(typeof e!=`function`)throw Error(`[@materialui-reactjs/admin] Validator cần jQuery. Hãy thêm "jquery" vào dependencies và nạp nó TRƯỚC khi dùng Validator.`);return Z=e,Z},$=new Proxy((()=>{}),{apply:(e,t,n)=>Q()(...n),get:(e,t)=>Q()[t]}),Se=class e{options;validators;$element;$btn;$inputs;static VERSION=`0.11.9`;static INPUT_SELECTOR=`:input:not(.nvali,[type="hidden"], [type="submit"], [type="reset"], button)`;static FOCUS_OFFSET=20;static DEFAULTS={delay:500,html:!1,disable:!0,focus:!0,custom:{},errors:{match:`Does not match`,minlength:`Too short`,maxlength:`Too long`},feedback:{success:`glyphicon-ok`,error:`glyphicon-remove`}};static VALIDATORS={native:function(e){let t=e[0];if(t.checkValidity)return!t.checkValidity()&&!t.validity.valid&&(t.validationMessage||`error!`)},match:function(t){let n=t.attr(`data-match`);return n&&t.val()!==$(n).val()&&e.DEFAULTS.errors.match},minlength:function(t){let n=Number(t.attr(`data-minlength`));return String(t.val()??``).length<n&&e.DEFAULTS.errors.minlength},maxlength:function(t){let n=Number(t.attr(`data-maxlength`));return String(t.val()??``).length>n&&e.DEFAULTS.errors.maxlength},filesize:function(e){let t=Number(e.data(`filesize`)),n=e[0];return n?.files?.length?n.files[0].size>t*1024*1024:!1},accept:function(e){let t=e.attr(`data-accept`);if(!t)return!1;let n=e[0];if(!n?.files?.length)return!1;let r=n.files[0];return!new RegExp(t).test(r.name)},pattern:function(e){let t=e.attr(`data-pattern`);return t?!new RegExp(t).test(String(e.val()??``)):!1}};constructor(t,n=!1){this.options=n||e.DEFAULTS,this.validators=$.extend({},e.VALIDATORS),this.$element=$(t),this.$btn=this.$element.find(`button[type="submit"], input[type="submit"], .submitAjax`),this.$inputs=this.$element.find(e.INPUT_SELECTOR).add(this.$element.find(`[data-validate="true"]`)).not(this.$element.find(`[data-validate="false"]`).each((e,t)=>{this.clearErrors($(t))}))}static getValue(e){return e.is(`[type="checkbox"]`)?!!e.prop(`checked`):e.is(`[type="radio"]`)?$(`[name="${e.attr(`name`)}"]:checked`).length>0:e.is(`select[multiple]`)?(e.val()??[]).length:e.val()??``}update=()=>{let t=this;return this.$inputs=this.$element.find(e.INPUT_SELECTOR).add(this.$element.find(`[data-validate="true"]`)).not(this.$element.find(`[data-validate="false"]`).each((e,n)=>{t.clearErrors($(n))})),this.toggleSubmit(),this};onInput=e=>{let t=this,n=$(e.target),r=e.type!==`focusout`;this.$inputs.is(n)&&this.validateInput(n,r)?.done(function(){t.toggleSubmit()})};validateInput=(e,t)=>{let n=e.data(`bs.validator.errors`);e.is(`[type="radio"]`)&&(e=this.$element.find(`input[name="`+e.attr(`name`)+`"]`));let r=$.Event(`validate.bs.validator`,{relatedTarget:e[0]});if(this.$element.trigger(r),r.isDefaultPrevented())return;let i=this;return this.runValidators(e).done(function(a){e.data(`bs.validator.errors`,a),a.length?t?i.defer(e,i.showErrors):i.showErrors(e):i.clearErrors(e),(!n||a.toString()!==n.toString())&&(r=a.length?$.Event(`invalid.bs.validator`,{relatedTarget:e[0],detail:a}):$.Event(`valid.bs.validator`,{relatedTarget:e[0],detail:n}),i.$element.trigger(r)),i.toggleSubmit(),i.$element.trigger($.Event(`validated.bs.validator`,{relatedTarget:e[0]}))})};runValidators=t=>{let n=[],r=$.Deferred(),i=t.data(`bs.validator.deferred`);i&&i.reject(),t.data(`bs.validator.deferred`,r);function a(e){return t.attr(`data-`+e+`-error`)}function o(){let e=t[0];if(!(e instanceof HTMLInputElement)&&!(e instanceof HTMLSelectElement)&&!(e instanceof HTMLTextAreaElement))return null;let n=e.validity;return n.typeMismatch?t.attr(`data-type-error`)??null:n.patternMismatch?t.attr(`data-pattern-error`)??null:n.stepMismatch?t.attr(`data-step-error`)??null:n.rangeOverflow?t.attr(`data-max-error`)??null:n.rangeUnderflow?t.attr(`data-min-error`)??null:n.valueMissing?t.attr(`data-required-error`)??null:null}function s(){return t.attr(`data-error`)}function c(e){return a(e)||o()||s()}return $.each(this.validators,$.proxy(function(r,i){let a;(e.getValue(t)||t.attr(`required`))&&(t.attr(`data-`+r)!==void 0||r==`native`)&&(a=i.call(this,t))&&(a=c(r)||a,n.indexOf(a)===-1&&n.push(a))},this)),r.resolve(n),r.promise()};validate=()=>{let e=this;return $.when(this.$inputs.map((t,n)=>e.validateInput($(n),!1))).then(function(){e.toggleSubmit(),e.focusError()}),this};focusError=()=>{if(!this.options.focus)return;let t=this.$element.find(`.has-error:first :input`);t.length!==0&&($(`html, body`).animate({scrollTop:t.offset().top-e.FOCUS_OFFSET},250),t.focus())};showErrors=e=>{this.options.html;let t=e.data(`bs.validator.errors`),n=e.closest(`.form-group`),r=n.find(`.form-control-feedback`);t.length&&(t=$(`<ul/>`).addClass(`list-unstyled`).append($.map(t,e=>{let t=$(`<li/>`);return this.options.html?t.html(e):t.text(e)})),n.addClass(`has-error has-danger`),n.find(`.invalid-tooltip, .invalid-feedback`).remove(),n.find(`.select2,.form-control`).removeClass(`is-valid`).addClass(`is-invalid`),n.append(`<div class="invalid-feedback"><ul class="list-unstyled">${t.html()}<ul/></div>`),n.removeClass(`has-success`),n.hasClass(`has-feedback`),r.removeClass(this.options.feedback?.success),r.addClass(this.options.feedback?.error))};clearErrors=e=>{let t=e.closest(`.form-group`),n=t.find(`.form-control-feedback`);t.removeClass(`has-error has-danger has-success`),t.find(`.invalid-tooltip, .invalid-feedback`).remove(),t.find(`.select2,.form-control`).addClass(`is-valid`).removeClass(`is-invalid`),t.addClass(`has-success`),t.hasClass(`has-feedback`),n.removeClass(this.options.feedback?.error),n.removeClass(this.options.feedback?.success),n.addClass(this.options.feedback?.success)};hasErrors=()=>!!this.$inputs.filter(function(){return!!($(this).data(`bs.validator.errors`)||[]).length}).length;isIncomplete=()=>!!this.$inputs.filter(`[required]`).filter((t,n)=>{let r=e.getValue($(n));return!(typeof r==`string`?r.trim():r)}).length;onSubmit=e=>{this.validate(),(this.isIncomplete()||this.hasErrors())&&e.preventDefault()};toggleSubmit=()=>{this.options.disable};defer=(e,t)=>{if(t=t.bind(this,e),!this.options.delay)return t();window.clearTimeout(e.data(`bs.validator.timeout`)),e.data(`bs.validator.timeout`,window.setTimeout(t,this.options.delay))};reset=()=>(this.$element.find(`.form-control-feedback`).removeClass(this.options?.feedback.error).removeClass(this.options.feedback.success),this.$inputs.removeData([`bs.validator.errors`,`bs.validator.deferred`]).each(()=>{let e=$(this),t=e.data(`bs.validator.timeout`);window.clearTimeout(t),e.removeData(`bs.validator.timeout`)}),this.$element.find(`.invalid-tooltip, .invalid-feedback`).each(()=>{let e=$(this),t=e.data(`bs.validator.originalContent`);e.removeData(`bs.validator.originalContent`).html(t)}),this.$btn.removeClass(`disabled`),this.$element.find(`.has-error, .has-danger, .has-success, .is-invalid, .is-valid`).removeClass(`has-error has-danger has-success is-invalid is-valid`),this);destroy=()=>(this.reset(),this.$element.removeAttr(`novalidate`).removeData(`bs.validator`).off(`.bs.validator`),this.$inputs.off(`.bs.validator`),this.options=null,this.validators=null,this.$element=null,this.$btn=null,this.$inputs=null,this);run=()=>{this.update(),this.$element.on(`input.bs.validator change.bs.validator focusout.bs.validator`,this.onInput.bind(this)),this.$element.on(`submit.bs.validator`,this.onSubmit.bind(this)),this.$element.on(`reset.bs.validator`,this.reset.bind(this)),this.$element.find(`[data-match]`).each(function(){let t=$(this),n=t.attr(`data-match`);n&&$(n).on(`input.bs.validator`,function(){e.getValue(t)&&t.trigger(`input.bs.validator`)})}),this.$inputs.filter((t,n)=>e.getValue($(n))&&!$(this).closest(`.has-error`).length).trigger(`focusout`),this.$element.attr(`novalidate`,!0)}};exports.ApiError=d,exports.CusRoute=xe,exports.Validator=Se,exports.buildAcceptRegExp=z,exports.buildFormData=u,exports.callFetchApi=te,exports.callFetchApiToken=f,exports.checkPermission=X,exports.checkUploadFile=B,exports.createModal=K,exports.createQueryString=k,exports.decimalNumber=me,exports.elFinderPopup=G,exports.escapeHtml=V,exports.filterIds=q,exports.formatDate=w,exports.formatDateSql=E,exports.formatDateTime=C,exports.formatNumber=pe,exports.formatYear=T,exports.getActiveStatus=_,exports.getEnv=t.t,exports.getFile=M,exports.getFilterType=ye,exports.getIdParams=A,exports.getImage=j,exports.getLangs=be,exports.getLinkFiles=ae,exports.getName=re,exports.getNames=ie,exports.getParams=D,exports.getPubImage=N,exports.getPublishStatus=v,exports.getStatus=g,exports.getTrueFlaseStatus=y,exports.getUploadFile=F,exports.getUploadImage=P,exports.htmlToText=L,exports.isStsNum=Y,exports.loadEnv=t.n,exports.loadScript=c,exports.loadScripts=l,exports.mapArrData=_e,exports.mapArrFields=he,exports.mapDataForm=ue,exports.mergeArrObject=ge,exports.parseDate=b,exports.randomString=I,exports.reloadEnv=t.r,exports.resetForm=W,exports.setParams=O,exports.showFinderFileModal=fe,exports.showFinderModal=de,exports.showMessage=U,exports.showSweetAlert=p,exports.showSweetAlertError=h,exports.showSweetAlertOk=m,exports.showSweetAlertWarning=ne,exports.spinnerLoader=ee,exports.strToDate=x,exports.stringToJson=J,exports.sumArrCol=ve;
|
|
11
|
+
</div>`);else{let e=n.querySelector(`.boxSpinner`);e&&e.remove()}}},u=e=>{let t=new FormData;return Object.entries(e).forEach(([e,n])=>{if(n!=null){if(n instanceof FileList){Array.from(n).forEach(n=>t.append(e,n));return}if(n instanceof File){t.append(e,n);return}if(Array.isArray(n)&&n.every(e=>e instanceof File)){n.forEach(n=>t.append(e,n));return}if(Array.isArray(n)&&n.every(e=>[`string`,`number`,`boolean`].includes(typeof e))){n.forEach(n=>t.append(e,n.toString()));return}if(typeof n==`object`){t.append(e,JSON.stringify(n));return}n!=null&&typeof n!=`function`&&typeof n!=`object`&&t.append(e,String(n))}}),t},d=class extends Error{errorCode;constructor(e,t){super(e),this.name=`ApiError`,this.errorCode=t}},te=async(e,t={},n=`POST`,r=`application/json`)=>{let i={method:n,headers:{"Content-Type":r,"Secret-Key":s(`SECRET_KEY`)},credentials:`include`};n==`POST`&&(i.body=JSON.stringify(t));let a=await(await fetch(e,i)).json();if(a.status==200)return a;throw a.msg?new d(a.msg,a.errorCode??`unknown`):Error(`invalid_response`)};async function f(e,t={},n=`POST`,r=`application/json`,i=!0){let a={"Secret-Key":s(`SECRET_KEY`)};r!==`multipart/form-data`&&(a[`Content-Type`]=r);let o={method:n,headers:a,credentials:`include`};if(n==`POST`&&(o.body=r===`multipart/form-data`?u(t):JSON.stringify(t)),n===`GET`&&Object.keys(t).length>0){let n=new URLSearchParams;Object.entries(t).forEach(([e,t])=>{Array.isArray(t)?t.forEach(t=>n.append(e,String(t))):n.append(e,String(t))});let r=n.toString();e+=(e.includes(`?`)?`&`:`?`)+r}let c=await(await fetch(e,o)).text(),l=null;if(c)try{l=JSON.parse(c)}catch{l=c}if(l&&typeof l!=`string`&&l.status==200)return l;if(l&&typeof l!=`string`&&l.msg&&i)throw new d(l.msg,l.errorCode??`unknown`);if(i)throw Error(`invalid_response`);return!1}var p=(e=`Bạn có chắc muốn thực hiện thao tác này ?`,t=`Đồng ý`)=>(0,r.default)(n.default).fire({title:`Xác nhận`,text:e,icon:`warning`,showCancelButton:!0,confirmButtonColor:`#4CAF50`,cancelButtonColor:`#F44336`,confirmButtonText:t,cancelButtonText:`Hủy`,position:`top`}),m=(e,t=`top`,i=!1)=>{(0,r.default)(n.default).fire({toast:i,icon:`success`,position:t,title:e,showConfirmButton:!1,timer:1500})},ne=e=>{(0,r.default)(n.default).fire({icon:`warning`,title:e,showConfirmButton:!1,timer:1500})},h=e=>{(0,r.default)(n.default).fire({icon:`error`,position:`top`,title:e,showConfirmButton:!1})},re=(e,t,n=`name`)=>{let r=t?.find(t=>t.id===e);return r?r[n]??null:null},ie=(e,t,n=`name`)=>{let r=Array.isArray(e)?e:[],i=Array.isArray(t)?t:[];return r.map(e=>{let t=i.find(t=>t.id===e);return t?t[n]:null}).filter(Boolean).join(`, `)},ae=e=>Array.isArray(e)?e.map((e,t)=>`<p class="mb-0"><a class="text-info" target="_blank" rel="noopener noreferrer" href="${V(F(e,`#`))}">Tập tin ${t+1}</a></p>`).filter(Boolean).join(``):``,g=(e,t,n=!1)=>{if(e===!1)return t;let r=t.find(t=>t.id===Number(e));return r?n?`<span class="badge badge-sm bg-gradient-${r.color}">${r.name}</span>`:r.name:``},oe=[{id:1,name:`Kích hoạt`,color:`success`},{id:0,name:`Khóa`,color:`danger`}],se=[{id:1,name:`Xuất bản`,color:`success`},{id:0,name:`Nháp`,color:`danger`}],ce=[{id:1,name:`Có`,color:`success`},{id:0,name:`Không`,color:`secondary`}],_=(e,t=!1)=>g(e,oe,t),v=(e,t=!1)=>g(e,se,t),y=(e,t=!1)=>g(e,ce,t);function b(e){let t=e instanceof Date?e:new Date(e);if(isNaN(t.getTime()))throw Error(`Ngày không hợp lệ: `+e);return t}function x(e){if(!e)return new Date;if(e instanceof Date)return new Date(e);let t=e.trim().toLowerCase();if(t===`now`)return new Date;let n=new Date,r=t.match(/^([+-]?\d+)\s*(year|years|month|months|week|weeks|day|days|hour|hours|minute|minutes|min|mins|second|seconds|sec|secs)$/);if(r){let e=Number(r[1]);switch(r[2]){case`year`:case`years`:n.setFullYear(n.getFullYear()+e);break;case`month`:case`months`:n.setMonth(n.getMonth()+e);break;case`week`:case`weeks`:n.setDate(n.getDate()+e*7);break;case`day`:case`days`:n.setDate(n.getDate()+e);break;case`hour`:case`hours`:n.setHours(n.getHours()+e);break;case`minute`:case`minutes`:case`min`:case`mins`:n.setMinutes(n.getMinutes()+e);break;case`second`:case`seconds`:case`sec`:case`secs`:n.setSeconds(n.getSeconds()+e)}return n}let i=new Date(t);if(!isNaN(i.getTime()))return i;throw Error(`Invalid date expression: ${e}`)}var S=e=>{if(!e)return null;let t=new Date(e);return isNaN(t.getTime())?null:{dd:String(t.getDate()).padStart(2,`0`),MM:String(t.getMonth()+1).padStart(2,`0`),yyyy:t.getFullYear(),hh:String(t.getHours()).padStart(2,`0`),mm:String(t.getMinutes()).padStart(2,`0`),ss:String(t.getSeconds()).padStart(2,`0`)}},C=e=>{let t=S(e);return t?`${t.dd}/${t.MM}/${t.yyyy} ${t.hh}:${t.mm}:${t.ss}`:e?`Invalid Date`:``},w=e=>{let t=S(e);return t?`${t.dd}/${t.MM}/${t.yyyy}`:e?`Invalid Date`:``},T=e=>{let t=S(e);return t?`${t.yyyy}`:e?`Invalid Date`:``},E=e=>{let t=S(e);return t?`${t.yyyy}-${t.MM}-${t.dd}`:e?`Invalid Date`:``},D=e=>{let t=new URLSearchParams(window.location.search);return e?Array.isArray(e)?e.reduce((e,n)=>(e[n]=t.get(n),e),{}):t.get(e):Object.fromEntries(t.entries())},O=e=>{let t=new URLSearchParams(window.location.search);return Object.entries(e).forEach(([e,n])=>{n===null?t.delete(e):t.set(e,n)}),t.toString()},k=e=>{let t=new URLSearchParams;return Object.entries(e).forEach(([e,n])=>{Array.isArray(n)?n.forEach(n=>{n!=null&&t.append(e,String(n))}):n!=null&&t.set(e,String(n))}),t.toString()},A=(e=typeof window<`u`?window.location.pathname:``,t=/\/(?:edit|detail|update)\/(\d+)(?=\/|$)/i)=>{let n=new RegExp(t.source,t.flags.includes(`g`)?t.flags:t.flags+`g`),r=null,i;for(;(i=n.exec(e))!==null;)r=i;if(!r)return null;let a=Number(r[1]);return Number.isFinite(a)?a:null},j=(e,t=`/styles/default.jpg`)=>e?s(`STATIC_URL`)+(`/`+e).replaceAll(`//`,`/`):t,M=e=>e?s(`STATIC_URL`)+(`/`+e).replaceAll(`//`,`/`):``,N=(e,t=`/styles/default.jpg`)=>e?s(`API_URL`)+(`/`+e).replaceAll(`//`,`/`):t,P=(e,t=`/styles/default.jpg`)=>e?s(`UPLOADS_URL`)+`/`+e:t,F=(e,t=`/styles/default.jpg`)=>e?s(`UPLOADS_URL`)+`/`+e:t;function I(e){let t=``;for(let n=0;n<e;n++){let e=Math.floor(Math.random()*62);t+=`ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789`[e]}return t}function L(e){return new DOMParser().parseFromString(e,`text/html`).body.textContent||``}var R=/\.(jpg|jpeg|png|jfif|doc|docx|xls|xlsx|pdf)$/i,z=(e,t)=>{if(!e)return t;let n=e.split(`,`).map(e=>{let t=e.trim();return(t.includes(`/`)?t.slice(t.indexOf(`/`)+1):t).replace(/^\./,``)}).filter(Boolean);if(n.length===0)return t;let r=n.map(e=>e.replace(/[.*+?^${}()|[\]\\]/g,`\\$&`));return RegExp(`\\.(${r.join(`|`)})$`,`i`)},B=(e,t=20,n=R)=>new Promise((r,i)=>{let a=Array.from(e??[]);if(a.length===0)return i(Error(`Tập tin không tồn tại`));for(let e of a){if(!n.test(e.name))return h(`Tập tin không hợp lệ`),i(Error(`Tập tin không hợp lệ`));if(e.size>t*1024*1024)return h(`Tập tin tải lên không quá ${t}M`),i(Error(`Tập tin tải lên không quá ${t}M`))}r()}),le={"&":`&`,"<":`<`,">":`>`,'"':`"`,"'":`'`},V=e=>String(e??``).replace(/[&<>"']/g,e=>le[e]),H=new Set([`danger`,`success`,`warning`,`info`,`primary`,`secondary`,`light`,`dark`]),U=(e=``,t=`danger`,n={})=>{let r=H.has(t)?t:`danger`,i=e=>n.raw?e:V(e);return typeof e==`string`?e.trim()===``?``:`<div class="alert alert-${r}">${i(e)}</div>`:!e||typeof e!=`object`?``:Object.values(e).filter(e=>e!=null&&String(e).trim()!==``).map(e=>`<div class="alert alert-${r}">${i(String(e))}</div>`).join(``)},W=e=>(e.querySelectorAll(`input:not([type="hidden"]):not([type="checkbox"]):not([type="radio"]):not(.noReset), textarea`).forEach(e=>{e.value=``,e.dispatchEvent(new Event(`change`,{bubbles:!0}))}),e.querySelectorAll(`select:not(.noReset)`).forEach(e=>{let t=e.querySelector(`option[value=""]`);t?t.selected=!0:e.options.length>0&&(e.selectedIndex=0),e.dispatchEvent(new Event(`change`,{bubbles:!0}))}),e.querySelectorAll(`input[type="checkbox"]:not(.noReset)`).forEach(e=>{e.checked=!1,e.dispatchEvent(new Event(`change`,{bubbles:!0}))}),e.querySelectorAll(`input[type="radio"]:not(.noReset)`).forEach(e=>{e.checked=!1,e.dispatchEvent(new Event(`change`,{bubbles:!0}))}),e),ue=async(e,t,n=!1)=>{try{for(let r in t){let i=`[name="${r}"]:not([type="file"])`,o=e.querySelector(i);if(!o)continue;let s=o.type,c=t[r];if(c&&![`checkbox`,`radio`].includes(s)){let e=String(c),t=(0,a.parse)(e,`yyyy-MM-dd`,new Date),n=(0,a.parse)(e,`yyyy-MM-dd HH:mm:ss`,new Date);o.value=(0,a.isValid)(t)&&e.length===10?(0,a.format)(t,`dd/MM/yyyy`):(0,a.isValid)(n)&&e.length===19?(0,a.format)(n,`dd/MM/yyyy HH:mm`):e,o.dispatchEvent(new Event(`change`,{bubbles:!0}))}else if(s===`checkbox`)o.checked=!!parseInt(String(c)),o.dispatchEvent(new Event(`change`,{bubbles:!0}));else if(s===`radio`){let t=e.querySelectorAll(`input[type="radio"][name="${r}"]`);t.forEach(e=>{e.checked=e.value===String(parseInt(String(c)))}),t.forEach(e=>e.dispatchEvent(new Event(`change`,{bubbles:!0})))}else if(n){let e=o.closest(`.form-group`);e&&e.classList.add(`hidden`)}}return t}catch(e){return Promise.reject(e)}},G=(e,t={})=>new Promise((n,r)=>{try{let r=window.jQuery,i=r(e);if(!i.length)throw Error(`invalid_elfinder`);let a={url:s(`API_URL`)+`/elfinder/connector`,height:500,resizable:!0,baseUrl:`/assets/plugins/elFinder/`,defaultView:`list`,useBrowserHistory:!1,getFileCallback:e=>{n(e)}};i.elfinder(`destroy`).elfinder({...a,...t})}catch(e){r(e)}}),de=e=>{if(e instanceof Error)return e.message;if(typeof e==`string`)return e;try{return JSON.stringify(e)??String(e)}catch{return String(e)}},K=e=>new Promise((t,n)=>{try{let n=typeof e==`string`?document.querySelector(e):e;if(!n)throw Error(`invalid_modalEl_btnEl`);n.querySelectorAll(`.btn-md-close`)?.forEach(e=>{e?.addEventListener(`click`,()=>{r.hide()})});let r=i.Modal.getOrCreateInstance(n,{backdrop:`static`,keyboard:!1});t({md:r,modalEl:n})}catch(e){console.log(e),n(e)}}),fe=(e,t,n=!1,r=!1)=>{if(!e)throw Error(`invalid_btnEl`);e.addEventListener(`click`,i=>{i.preventDefault(),K(t).then(({modalEl:t,md:i})=>{G(`#elfinderStatic`).then(t=>{n&&n({data:t,btnEl:e,md:i})}),t.addEventListener(`hidden.bs.modal`,()=>{r&&r()}),i.show()})})},pe=(e,t,n=!1,r=!1)=>{if(!e)throw Error(`invalid_btnEl`);e.addEventListener(`click`,i=>{i.preventDefault(),K(t).then(({modalEl:t,md:i})=>{G(`#elfinderStatic`,{url:s(`API_URL`)+`/elfinder/connectorFiles`}).then(t=>{n&&n({data:t,btnEl:e,md:i})}),t.addEventListener(`hidden.bs.modal`,()=>{r&&r()}),i.show()})})},q=e=>{if(typeof e==`string`&&(e=J(e,[])),!Array.isArray(e))return[];let t=e.map(e=>Number(e)).filter(e=>!Number.isNaN(e));return[...new Set(t)]};function J(e,t={},n=`ids`){let r=t;if(Array.isArray(e)&&(r=e),typeof e==`object`&&e&&(r=e),typeof e==`number`)return t;if(typeof e==`string`)try{let t=JSON.parse(e);Array.isArray(t)&&(r=t),typeof t==`object`&&t&&(r=t)}catch{return t}return n===`ids`&&(r=q(r)),r}var me=(e,t={},n=`vi-VN`)=>e==null||Number.isNaN(e)?`0`:e.toLocaleString(n,t),he=e=>{if(!e)return new o.default(0);let t=String(e).replace(/[^\d.]/g,``);return t?new o.default(t):new o.default(0)},ge=(e,t)=>[...new Set((Array.isArray(e)?e:[]).map(e=>e[t]))],_e=(e,t,n,r,i)=>{let a=e.length,o=[];for(let s=0;s<a;s++){let a=t.find(t=>t[r]===e[s]);a&&o.push({[n]:e[s],[i]:a[i]})}return o},Y=(e,t)=>(Array.isArray(e)?e:[]).map(e=>{let n={};for(let r in t){let i=t[r];typeof i==`string`?n[r]=e[i]:typeof i==`function`&&(n[r]=i(e))}return n}),ve=(e,t,n=!1)=>{if((t??``).split(`-`).map(Number).includes(e))return!0;if(n)throw Error(`invalid_status`);return!1};function ye(e,t){return e?.reduce((e,n)=>e+(n[t]??0),0)||0}var be=e=>{switch(e){case 3:return`tháng `+(new Date().getMonth()+1);case 4:return`năm `+new Date().getFullYear()}return``},xe=(e=!1)=>{let t=[{id:1,name:`Tiếng Việt`}];return e===!1?t:t.find(t=>t.id===e)?.name||``},Se=class{routes=[];async addGS(e,t,n,r=!1,i=!1,a=!1,o=!1){let s={path:e,element:t,children:[{index:!0,element:n},{path:`page/:page`,element:n}]};i&&s.children.push({path:`detail/:id`,element:i}),r&&s.children.push({path:`create`,element:r}),r&&s.children.push({path:`edit/:id`,element:r}),a&&s.children.push({path:`import`,element:a}),o&&s.children.push({path:`fields`,element:o}),this.routes.push(s)}addRoute(e=[]){this.routes=[...this.routes,...e]}getRouter(){return this.routes}},X=(e,t,n,r,i,a)=>{if(!a)return!1;if(a===1)return!0;if(!Array.isArray(e))return!1;for(let o of e)if(o){if(o.module===t&&o.controller===n&&o.action===r&&Number(o.code)===Number(i))return o.status!==0&&!!o.isPer;if(Array.isArray(o.subs)&&o.subs.length>0&&X(o.subs,t,n,r,i,a))return!0}return!1},Z=null,Q=()=>{if(Z)return Z;let e=typeof window<`u`?window.jQuery??window.$:void 0;if(typeof e!=`function`)throw Error(`[@materialui-reactjs/admin] Validator cần jQuery. Hãy thêm "jquery" vào dependencies và nạp nó TRƯỚC khi dùng Validator.`);return Z=e,Z},$=new Proxy((()=>{}),{apply:(e,t,n)=>Q()(...n),get:(e,t)=>Q()[t]}),Ce=class e{options;validators;$element;$btn;$inputs;static VERSION=`0.11.9`;static INPUT_SELECTOR=`:input:not(.nvali,[type="hidden"], [type="submit"], [type="reset"], button)`;static FOCUS_OFFSET=20;static DEFAULTS={delay:500,html:!1,disable:!0,focus:!0,custom:{},errors:{match:`Does not match`,minlength:`Too short`,maxlength:`Too long`},feedback:{success:`glyphicon-ok`,error:`glyphicon-remove`}};static VALIDATORS={native:function(e){let t=e[0];if(t.checkValidity)return!t.checkValidity()&&!t.validity.valid&&(t.validationMessage||`error!`)},match:function(t){let n=t.attr(`data-match`);return n&&t.val()!==$(n).val()&&e.DEFAULTS.errors.match},minlength:function(t){let n=Number(t.attr(`data-minlength`));return String(t.val()??``).length<n&&e.DEFAULTS.errors.minlength},maxlength:function(t){let n=Number(t.attr(`data-maxlength`));return String(t.val()??``).length>n&&e.DEFAULTS.errors.maxlength},filesize:function(e){let t=Number(e.data(`filesize`)),n=e[0];return n?.files?.length?n.files[0].size>t*1024*1024:!1},accept:function(e){let t=e.attr(`data-accept`);if(!t)return!1;let n=e[0];if(!n?.files?.length)return!1;let r=n.files[0];return!new RegExp(t).test(r.name)},pattern:function(e){let t=e.attr(`data-pattern`);return t?!new RegExp(t).test(String(e.val()??``)):!1}};constructor(t,n=!1){this.options=n||e.DEFAULTS,this.validators=$.extend({},e.VALIDATORS),this.$element=$(t),this.$btn=this.$element.find(`button[type="submit"], input[type="submit"], .submitAjax`),this.$inputs=this.$element.find(e.INPUT_SELECTOR).add(this.$element.find(`[data-validate="true"]`)).not(this.$element.find(`[data-validate="false"]`).each((e,t)=>{this.clearErrors($(t))}))}static getValue(e){return e.is(`[type="checkbox"]`)?!!e.prop(`checked`):e.is(`[type="radio"]`)?$(`[name="${e.attr(`name`)}"]:checked`).length>0:e.is(`select[multiple]`)?(e.val()??[]).length:e.val()??``}update=()=>{let t=this;return this.$inputs=this.$element.find(e.INPUT_SELECTOR).add(this.$element.find(`[data-validate="true"]`)).not(this.$element.find(`[data-validate="false"]`).each((e,n)=>{t.clearErrors($(n))})),this.toggleSubmit(),this};onInput=e=>{let t=this,n=$(e.target),r=e.type!==`focusout`;this.$inputs.is(n)&&this.validateInput(n,r)?.done(function(){t.toggleSubmit()})};validateInput=(e,t)=>{let n=e.data(`bs.validator.errors`);e.is(`[type="radio"]`)&&(e=this.$element.find(`input[name="`+e.attr(`name`)+`"]`));let r=$.Event(`validate.bs.validator`,{relatedTarget:e[0]});if(this.$element.trigger(r),r.isDefaultPrevented())return;let i=this;return this.runValidators(e).done(function(a){e.data(`bs.validator.errors`,a),a.length?t?i.defer(e,i.showErrors):i.showErrors(e):i.clearErrors(e),(!n||a.toString()!==n.toString())&&(r=a.length?$.Event(`invalid.bs.validator`,{relatedTarget:e[0],detail:a}):$.Event(`valid.bs.validator`,{relatedTarget:e[0],detail:n}),i.$element.trigger(r)),i.toggleSubmit(),i.$element.trigger($.Event(`validated.bs.validator`,{relatedTarget:e[0]}))})};runValidators=t=>{let n=[],r=$.Deferred(),i=t.data(`bs.validator.deferred`);i&&i.reject(),t.data(`bs.validator.deferred`,r);function a(e){return t.attr(`data-`+e+`-error`)}function o(){let e=t[0];if(!(e instanceof HTMLInputElement)&&!(e instanceof HTMLSelectElement)&&!(e instanceof HTMLTextAreaElement))return null;let n=e.validity;return n.typeMismatch?t.attr(`data-type-error`)??null:n.patternMismatch?t.attr(`data-pattern-error`)??null:n.stepMismatch?t.attr(`data-step-error`)??null:n.rangeOverflow?t.attr(`data-max-error`)??null:n.rangeUnderflow?t.attr(`data-min-error`)??null:n.valueMissing?t.attr(`data-required-error`)??null:null}function s(){return t.attr(`data-error`)}function c(e){return a(e)||o()||s()}return $.each(this.validators,$.proxy(function(r,i){let a;(e.getValue(t)||t.attr(`required`))&&(t.attr(`data-`+r)!==void 0||r==`native`)&&(a=i.call(this,t))&&(a=c(r)||a,n.indexOf(a)===-1&&n.push(a))},this)),r.resolve(n),r.promise()};validate=()=>{let e=this;return $.when(this.$inputs.map((t,n)=>e.validateInput($(n),!1))).then(function(){e.toggleSubmit(),e.focusError()}),this};focusError=()=>{if(!this.options.focus)return;let t=this.$element.find(`.has-error:first :input`);t.length!==0&&($(`html, body`).animate({scrollTop:t.offset().top-e.FOCUS_OFFSET},250),t.focus())};showErrors=e=>{this.options.html;let t=e.data(`bs.validator.errors`),n=e.closest(`.form-group`),r=n.find(`.form-control-feedback`);t.length&&(t=$(`<ul/>`).addClass(`list-unstyled`).append($.map(t,e=>{let t=$(`<li/>`);return this.options.html?t.html(e):t.text(e)})),n.addClass(`has-error has-danger`),n.find(`.invalid-tooltip, .invalid-feedback`).remove(),n.find(`.select2,.form-control`).removeClass(`is-valid`).addClass(`is-invalid`),n.append(`<div class="invalid-feedback"><ul class="list-unstyled">${t.html()}<ul/></div>`),n.removeClass(`has-success`),n.hasClass(`has-feedback`),r.removeClass(this.options.feedback?.success),r.addClass(this.options.feedback?.error))};clearErrors=e=>{let t=e.closest(`.form-group`),n=t.find(`.form-control-feedback`);t.removeClass(`has-error has-danger has-success`),t.find(`.invalid-tooltip, .invalid-feedback`).remove(),t.find(`.select2,.form-control`).addClass(`is-valid`).removeClass(`is-invalid`),t.addClass(`has-success`),t.hasClass(`has-feedback`),n.removeClass(this.options.feedback?.error),n.removeClass(this.options.feedback?.success),n.addClass(this.options.feedback?.success)};hasErrors=()=>!!this.$inputs.filter(function(){return!!($(this).data(`bs.validator.errors`)||[]).length}).length;isIncomplete=()=>!!this.$inputs.filter(`[required]`).filter((t,n)=>{let r=e.getValue($(n));return!(typeof r==`string`?r.trim():r)}).length;onSubmit=e=>{this.validate(),(this.isIncomplete()||this.hasErrors())&&e.preventDefault()};toggleSubmit=()=>{this.options.disable};defer=(e,t)=>{if(t=t.bind(this,e),!this.options.delay)return t();window.clearTimeout(e.data(`bs.validator.timeout`)),e.data(`bs.validator.timeout`,window.setTimeout(t,this.options.delay))};reset=()=>(this.$element.find(`.form-control-feedback`).removeClass(this.options?.feedback.error).removeClass(this.options.feedback.success),this.$inputs.removeData([`bs.validator.errors`,`bs.validator.deferred`]).each(()=>{let e=$(this),t=e.data(`bs.validator.timeout`);window.clearTimeout(t),e.removeData(`bs.validator.timeout`)}),this.$element.find(`.invalid-tooltip, .invalid-feedback`).each(()=>{let e=$(this),t=e.data(`bs.validator.originalContent`);e.removeData(`bs.validator.originalContent`).html(t)}),this.$btn.removeClass(`disabled`),this.$element.find(`.has-error, .has-danger, .has-success, .is-invalid, .is-valid`).removeClass(`has-error has-danger has-success is-invalid is-valid`),this);destroy=()=>(this.reset(),this.$element.removeAttr(`novalidate`).removeData(`bs.validator`).off(`.bs.validator`),this.$inputs.off(`.bs.validator`),this.options=null,this.validators=null,this.$element=null,this.$btn=null,this.$inputs=null,this);run=()=>{this.update(),this.$element.on(`input.bs.validator change.bs.validator focusout.bs.validator`,this.onInput.bind(this)),this.$element.on(`submit.bs.validator`,this.onSubmit.bind(this)),this.$element.on(`reset.bs.validator`,this.reset.bind(this)),this.$element.find(`[data-match]`).each(function(){let t=$(this),n=t.attr(`data-match`);n&&$(n).on(`input.bs.validator`,function(){e.getValue(t)&&t.trigger(`input.bs.validator`)})}),this.$inputs.filter((t,n)=>e.getValue($(n))&&!$(this).closest(`.has-error`).length).trigger(`focusout`),this.$element.attr(`novalidate`,!0)}};exports.ApiError=d,exports.CusRoute=Se,exports.Validator=Ce,exports.buildAcceptRegExp=z,exports.buildFormData=u,exports.callFetchApi=te,exports.callFetchApiToken=f,exports.checkPermission=X,exports.checkUploadFile=B,exports.createModal=K,exports.createQueryString=k,exports.decimalNumber=he,exports.elFinderPopup=G,exports.errorMessage=de,exports.escapeHtml=V,exports.filterIds=q,exports.formatDate=w,exports.formatDateSql=E,exports.formatDateTime=C,exports.formatNumber=me,exports.formatYear=T,exports.getActiveStatus=_,exports.getEnv=t.t,exports.getFile=M,exports.getFilterType=be,exports.getIdParams=A,exports.getImage=j,exports.getLangs=xe,exports.getLinkFiles=ae,exports.getName=re,exports.getNames=ie,exports.getParams=D,exports.getPubImage=N,exports.getPublishStatus=v,exports.getStatus=g,exports.getTrueFlaseStatus=y,exports.getUploadFile=F,exports.getUploadImage=P,exports.htmlToText=L,exports.isStsNum=ve,exports.loadEnv=t.n,exports.loadScript=c,exports.loadScripts=l,exports.mapArrData=Y,exports.mapArrFields=ge,exports.mapDataForm=ue,exports.mergeArrObject=_e,exports.parseDate=b,exports.randomString=I,exports.reloadEnv=t.r,exports.resetForm=W,exports.setParams=O,exports.showFinderFileModal=pe,exports.showFinderModal=fe,exports.showMessage=U,exports.showSweetAlert=p,exports.showSweetAlertError=h,exports.showSweetAlertOk=m,exports.showSweetAlertWarning=ne,exports.spinnerLoader=ee,exports.strToDate=x,exports.stringToJson=J,exports.sumArrCol=ye;
|
package/dist/utils/index.js
CHANGED
|
@@ -52,7 +52,7 @@ var u = (e) => n()[e] ?? "", d = (e) => new Promise((t, n) => {
|
|
|
52
52
|
t.append(e, JSON.stringify(n));
|
|
53
53
|
return;
|
|
54
54
|
}
|
|
55
|
-
t.append(e, n);
|
|
55
|
+
n != null && typeof n != "function" && typeof n != "object" && t.append(e, String(n));
|
|
56
56
|
}
|
|
57
57
|
}), t;
|
|
58
58
|
}, p = class extends Error {
|
|
@@ -137,10 +137,13 @@ var g = (e = "Bạn có chắc muốn thực hiện thao tác này ?", t = "Đ
|
|
|
137
137
|
}, ie = (e, t, n = "name") => {
|
|
138
138
|
let r = t?.find((t) => t.id === e);
|
|
139
139
|
return r ? r[n] ?? null : null;
|
|
140
|
-
}, ae = (e, t, n = "name") =>
|
|
141
|
-
let r =
|
|
142
|
-
return r
|
|
143
|
-
|
|
140
|
+
}, ae = (e, t, n = "name") => {
|
|
141
|
+
let r = Array.isArray(e) ? e : [], i = Array.isArray(t) ? t : [];
|
|
142
|
+
return r.map((e) => {
|
|
143
|
+
let t = i.find((t) => t.id === e);
|
|
144
|
+
return t ? t[n] : null;
|
|
145
|
+
}).filter(Boolean).join(", ");
|
|
146
|
+
}, oe = (e) => Array.isArray(e) ? e.map((e, t) => `<p class="mb-0"><a class="text-info" target="_blank" rel="noopener noreferrer" href="${W(R(e, "#"))}">Tập tin ${t + 1}</a></p>`).filter(Boolean).join("") : "", v = (e, t, n = !1) => {
|
|
144
147
|
if (e === !1) return t;
|
|
145
148
|
let r = t.find((t) => t.id === Number(e));
|
|
146
149
|
return r ? n ? `<span class="badge badge-sm bg-gradient-${r.color}">${r.name}</span>` : r.name : "";
|
|
@@ -325,16 +328,16 @@ var V = /\.(jpg|jpeg|png|jfif|doc|docx|xls|xlsx|pdf)$/i, H = (e, t) => {
|
|
|
325
328
|
for (let r in t) {
|
|
326
329
|
let i = `[name="${r}"]:not([type="file"])`, a = e.querySelector(i);
|
|
327
330
|
if (!a) continue;
|
|
328
|
-
let l = a.type;
|
|
329
|
-
if (
|
|
330
|
-
let e = c(
|
|
331
|
-
a.value = s(
|
|
332
|
-
} else if (l === "checkbox") a.checked = !!parseInt(
|
|
331
|
+
let l = a.type, u = t[r];
|
|
332
|
+
if (u && !["checkbox", "radio"].includes(l)) {
|
|
333
|
+
let e = String(u), t = c(e, "yyyy-MM-dd", /* @__PURE__ */ new Date()), n = c(e, "yyyy-MM-dd HH:mm:ss", /* @__PURE__ */ new Date());
|
|
334
|
+
a.value = s(t) && e.length === 10 ? o(t, "dd/MM/yyyy") : s(n) && e.length === 19 ? o(n, "dd/MM/yyyy HH:mm") : e, a.dispatchEvent(new Event("change", { bubbles: !0 }));
|
|
335
|
+
} else if (l === "checkbox") a.checked = !!parseInt(String(u)), a.dispatchEvent(new Event("change", { bubbles: !0 }));
|
|
333
336
|
else if (l === "radio") {
|
|
334
|
-
let
|
|
335
|
-
|
|
336
|
-
e.checked = e.value === String(parseInt(
|
|
337
|
-
}),
|
|
337
|
+
let t = e.querySelectorAll(`input[type="radio"][name="${r}"]`);
|
|
338
|
+
t.forEach((e) => {
|
|
339
|
+
e.checked = e.value === String(parseInt(String(u)));
|
|
340
|
+
}), t.forEach((e) => e.dispatchEvent(new Event("change", { bubbles: !0 })));
|
|
338
341
|
} else if (n) {
|
|
339
342
|
let e = a.closest(".form-group");
|
|
340
343
|
e && e.classList.add("hidden");
|
|
@@ -366,7 +369,15 @@ var V = /\.(jpg|jpeg|png|jfif|doc|docx|xls|xlsx|pdf)$/i, H = (e, t) => {
|
|
|
366
369
|
} catch (e) {
|
|
367
370
|
r(e);
|
|
368
371
|
}
|
|
369
|
-
}),
|
|
372
|
+
}), me = (e) => {
|
|
373
|
+
if (e instanceof Error) return e.message;
|
|
374
|
+
if (typeof e == "string") return e;
|
|
375
|
+
try {
|
|
376
|
+
return JSON.stringify(e) ?? String(e);
|
|
377
|
+
} catch {
|
|
378
|
+
return String(e);
|
|
379
|
+
}
|
|
380
|
+
}, K = (e) => new Promise((t, n) => {
|
|
370
381
|
try {
|
|
371
382
|
let n = typeof e == "string" ? document.querySelector(e) : e;
|
|
372
383
|
if (!n) throw Error("invalid_modalEl_btnEl");
|
|
@@ -386,42 +397,40 @@ var V = /\.(jpg|jpeg|png|jfif|doc|docx|xls|xlsx|pdf)$/i, H = (e, t) => {
|
|
|
386
397
|
} catch (e) {
|
|
387
398
|
console.log(e), n(e);
|
|
388
399
|
}
|
|
389
|
-
}),
|
|
400
|
+
}), he = (e, t, n = !1, r = !1) => {
|
|
390
401
|
if (!e) throw Error("invalid_btnEl");
|
|
391
402
|
e.addEventListener("click", (i) => {
|
|
392
|
-
i.preventDefault(), K(t).then((t) => {
|
|
393
|
-
let { modalEl: i, md: a } = t;
|
|
403
|
+
i.preventDefault(), K(t).then(({ modalEl: t, md: i }) => {
|
|
394
404
|
G("#elfinderStatic").then((t) => {
|
|
395
405
|
n && n({
|
|
396
406
|
data: t,
|
|
397
407
|
btnEl: e,
|
|
398
|
-
md:
|
|
408
|
+
md: i
|
|
399
409
|
});
|
|
400
|
-
}),
|
|
410
|
+
}), t.addEventListener("hidden.bs.modal", () => {
|
|
401
411
|
r && r();
|
|
402
|
-
}),
|
|
412
|
+
}), i.show();
|
|
403
413
|
});
|
|
404
414
|
});
|
|
405
|
-
},
|
|
415
|
+
}, ge = (e, t, n = !1, r = !1) => {
|
|
406
416
|
if (!e) throw Error("invalid_btnEl");
|
|
407
417
|
e.addEventListener("click", (i) => {
|
|
408
|
-
i.preventDefault(), K(t).then((t) => {
|
|
409
|
-
let { modalEl: i, md: a } = t;
|
|
418
|
+
i.preventDefault(), K(t).then(({ modalEl: t, md: i }) => {
|
|
410
419
|
G("#elfinderStatic", { url: u("API_URL") + "/elfinder/connectorFiles" }).then((t) => {
|
|
411
420
|
n && n({
|
|
412
421
|
data: t,
|
|
413
422
|
btnEl: e,
|
|
414
|
-
md:
|
|
423
|
+
md: i
|
|
415
424
|
});
|
|
416
|
-
}),
|
|
425
|
+
}), t.addEventListener("hidden.bs.modal", () => {
|
|
417
426
|
r && r();
|
|
418
|
-
}),
|
|
427
|
+
}), i.show();
|
|
419
428
|
});
|
|
420
429
|
});
|
|
421
430
|
}, q = (e) => {
|
|
422
431
|
if (typeof e == "string" && (e = J(e, [])), !Array.isArray(e)) return [];
|
|
423
|
-
let t = e.map((e) => Number(e));
|
|
424
|
-
return
|
|
432
|
+
let t = e.map((e) => Number(e)).filter((e) => !Number.isNaN(e));
|
|
433
|
+
return [...new Set(t)];
|
|
425
434
|
};
|
|
426
435
|
function J(e, t = {}, n = "ids") {
|
|
427
436
|
let r = t;
|
|
@@ -434,11 +443,11 @@ function J(e, t = {}, n = "ids") {
|
|
|
434
443
|
}
|
|
435
444
|
return n === "ids" && (r = q(r)), r;
|
|
436
445
|
}
|
|
437
|
-
var
|
|
446
|
+
var _e = (e, t = {}, n = "vi-VN") => e == null || Number.isNaN(e) ? "0" : e.toLocaleString(n, t), ve = (e) => {
|
|
438
447
|
if (!e) return new l(0);
|
|
439
448
|
let t = String(e).replace(/[^\d.]/g, "");
|
|
440
449
|
return t ? new l(t) : new l(0);
|
|
441
|
-
},
|
|
450
|
+
}, ye = (e, t) => [...new Set((Array.isArray(e) ? e : []).map((e) => e[t]))], be = (e, t, n, r, i) => {
|
|
442
451
|
let a = e.length, o = [];
|
|
443
452
|
for (let s = 0; s < a; s++) {
|
|
444
453
|
let a = t.find((t) => t[r] === e[s]);
|
|
@@ -448,34 +457,34 @@ var ge = (e, t = {}, n = "vi-VN") => e == null || Number.isNaN(e) ? "0" : e.toLo
|
|
|
448
457
|
});
|
|
449
458
|
}
|
|
450
459
|
return o;
|
|
451
|
-
},
|
|
460
|
+
}, xe = (e, t) => (Array.isArray(e) ? e : []).map((e) => {
|
|
452
461
|
let n = {};
|
|
453
462
|
for (let r in t) {
|
|
454
463
|
let i = t[r];
|
|
455
464
|
typeof i == "string" ? n[r] = e[i] : typeof i == "function" && (n[r] = i(e));
|
|
456
465
|
}
|
|
457
466
|
return n;
|
|
458
|
-
}),
|
|
459
|
-
if (t.split("-").map(Number).includes(e)) return !0;
|
|
467
|
+
}), Se = (e, t, n = !1) => {
|
|
468
|
+
if ((t ?? "").split("-").map(Number).includes(e)) return !0;
|
|
460
469
|
if (n) throw Error("invalid_status");
|
|
461
470
|
return !1;
|
|
462
471
|
};
|
|
463
|
-
function
|
|
472
|
+
function Ce(e, t) {
|
|
464
473
|
return e?.reduce((e, n) => e + (n[t] ?? 0), 0) || 0;
|
|
465
474
|
}
|
|
466
|
-
var
|
|
475
|
+
var we = (e) => {
|
|
467
476
|
switch (e) {
|
|
468
477
|
case 3: return "tháng " + ((/* @__PURE__ */ new Date()).getMonth() + 1);
|
|
469
478
|
case 4: return "năm " + (/* @__PURE__ */ new Date()).getFullYear();
|
|
470
479
|
}
|
|
471
480
|
return "";
|
|
472
|
-
},
|
|
481
|
+
}, Y = (e = !1) => {
|
|
473
482
|
let t = [{
|
|
474
483
|
id: 1,
|
|
475
484
|
name: "Tiếng Việt"
|
|
476
485
|
}];
|
|
477
486
|
return e === !1 ? t : t.find((t) => t.id === e)?.name || "";
|
|
478
|
-
},
|
|
487
|
+
}, Te = class {
|
|
479
488
|
routes = [];
|
|
480
489
|
async addGS(e, t, n, r = !1, i = !1, a = !1, o = !1) {
|
|
481
490
|
let s = {
|
|
@@ -529,7 +538,7 @@ var Ce = (e) => {
|
|
|
529
538
|
}, $ = new Proxy((() => {}), {
|
|
530
539
|
apply: (e, t, n) => Q()(...n),
|
|
531
540
|
get: (e, t) => Q()[t]
|
|
532
|
-
}),
|
|
541
|
+
}), Ee = class e {
|
|
533
542
|
options;
|
|
534
543
|
validators;
|
|
535
544
|
$element;
|
|
@@ -705,4 +714,4 @@ var Ce = (e) => {
|
|
|
705
714
|
};
|
|
706
715
|
};
|
|
707
716
|
//#endregion
|
|
708
|
-
export { p as ApiError,
|
|
717
|
+
export { p as ApiError, Te as CusRoute, Ee as Validator, H as buildAcceptRegExp, f as buildFormData, m as callFetchApi, h as callFetchApiToken, X as checkPermission, le as checkUploadFile, K as createModal, M as createQueryString, ve as decimalNumber, G as elFinderPopup, me as errorMessage, W as escapeHtml, q as filterIds, D as formatDate, k as formatDateSql, E as formatDateTime, _e as formatNumber, O as formatYear, b as getActiveStatus, n as getEnv, F as getFile, we as getFilterType, N as getIdParams, P as getImage, Y as getLangs, oe as getLinkFiles, ie as getName, ae as getNames, A as getParams, I as getPubImage, x as getPublishStatus, v as getStatus, S as getTrueFlaseStatus, R as getUploadFile, L as getUploadImage, B as htmlToText, Se as isStsNum, e as loadEnv, d as loadScript, ee as loadScripts, xe as mapArrData, ye as mapArrFields, pe as mapDataForm, be as mergeArrObject, C as parseDate, z as randomString, t as reloadEnv, fe as resetForm, j as setParams, ge as showFinderFileModal, he as showFinderModal, de as showMessage, g as showSweetAlert, _ as showSweetAlertError, ne as showSweetAlertOk, re as showSweetAlertWarning, te as spinnerLoader, w as strToDate, J as stringToJson, Ce as sumArrCol };
|
package/package.json
CHANGED
package/dist/Common-BBYXssMH.cjs
DELETED
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
const e=require("./rolldown-runtime-BocRIvOZ.cjs"),t=require("./Env-DoS-iQjs.cjs");let n=require("sweetalert2");n=e.t(n,1);let r=require("sweetalert2-react-content");r=e.t(r,1);let i=require("bootstrap");require("date-fns");let a=require("decimal.js");a=e.t(a,1),t.n();var o=e=>t.t()[e]??``,s=(e,t=!0)=>{let n=typeof e==`string`?document.querySelector(e):e;if(n){if(t)n.querySelector(`.boxSpinner`)||n.insertAdjacentHTML(`afterbegin`,`<div class="boxSpinner rounded">
|
|
2
|
-
<div class="spinner">
|
|
3
|
-
<div class="rect1"></div>
|
|
4
|
-
<div class="rect2"></div>
|
|
5
|
-
<div class="rect3"></div>
|
|
6
|
-
<div class="rect4"></div>
|
|
7
|
-
<div class="rect5"></div>
|
|
8
|
-
<div class="rect6"></div>
|
|
9
|
-
<div class="rect7"></div>
|
|
10
|
-
</div>
|
|
11
|
-
</div>`);else{let e=n.querySelector(`.boxSpinner`);e&&e.remove()}}},c=e=>{let t=new FormData;return Object.entries(e).forEach(([e,n])=>{if(n!=null){if(n instanceof FileList){Array.from(n).forEach(n=>t.append(e,n));return}if(n instanceof File){t.append(e,n);return}if(Array.isArray(n)&&n.every(e=>e instanceof File)){n.forEach(n=>t.append(e,n));return}if(Array.isArray(n)&&n.every(e=>[`string`,`number`,`boolean`].includes(typeof e))){n.forEach(n=>t.append(e,n.toString()));return}if(typeof n==`object`){t.append(e,JSON.stringify(n));return}t.append(e,n)}}),t},l=class extends Error{errorCode;constructor(e,t){super(e),this.name=`ApiError`,this.errorCode=t}};async function u(e,t={},n=`POST`,r=`application/json`,i=!0){let a={"Secret-Key":o(`SECRET_KEY`)};r!==`multipart/form-data`&&(a[`Content-Type`]=r);let s={method:n,headers:a,credentials:`include`};if(n==`POST`&&(s.body=r===`multipart/form-data`?c(t):JSON.stringify(t)),n===`GET`&&Object.keys(t).length>0){let n=new URLSearchParams;Object.entries(t).forEach(([e,t])=>{Array.isArray(t)?t.forEach(t=>n.append(e,String(t))):n.append(e,String(t))});let r=n.toString();e+=(e.includes(`?`)?`&`:`?`)+r}let u=await(await fetch(e,s)).text(),d=null;if(u)try{d=JSON.parse(u)}catch{d=u}if(d&&typeof d!=`string`&&d.status==200)return d;if(d&&typeof d!=`string`&&d.msg&&i)throw new l(d.msg,d.errorCode??`unknown`);if(i)throw Error(`invalid_response`);return!1}var d=(e=`Bạn có chắc muốn thực hiện thao tác này ?`,t=`Đồng ý`)=>(0,r.default)(n.default).fire({title:`Xác nhận`,text:e,icon:`warning`,showCancelButton:!0,confirmButtonColor:`#4CAF50`,cancelButtonColor:`#F44336`,confirmButtonText:t,cancelButtonText:`Hủy`,position:`top`}),f=(e,t=`top`,i=!1)=>{(0,r.default)(n.default).fire({toast:i,icon:`success`,position:t,title:e,showConfirmButton:!1,timer:1500})},p=e=>{(0,r.default)(n.default).fire({icon:`error`,position:`top`,title:e,showConfirmButton:!1})},m=e=>{if(!e)return null;let t=new Date(e);return isNaN(t.getTime())?null:{dd:String(t.getDate()).padStart(2,`0`),MM:String(t.getMonth()+1).padStart(2,`0`),yyyy:t.getFullYear(),hh:String(t.getHours()).padStart(2,`0`),mm:String(t.getMinutes()).padStart(2,`0`),ss:String(t.getSeconds()).padStart(2,`0`)}},h=e=>{let t=m(e);return t?`${t.dd}/${t.MM}/${t.yyyy}`:e?`Invalid Date`:``},g=e=>{let t=new URLSearchParams;return Object.entries(e).forEach(([e,n])=>{Array.isArray(n)?n.forEach(n=>{n!=null&&t.append(e,String(n))}):n!=null&&t.set(e,String(n))}),t.toString()},_=(e=typeof window<`u`?window.location.pathname:``,t=/\/(?:edit|detail|update)\/(\d+)(?=\/|$)/i)=>{let n=new RegExp(t.source,t.flags.includes(`g`)?t.flags:t.flags+`g`),r=null,i;for(;(i=n.exec(e))!==null;)r=i;if(!r)return null;let a=Number(r[1]);return Number.isFinite(a)?a:null},v=(e,t=`/styles/default.jpg`)=>e?o(`STATIC_URL`)+(`/`+e).replaceAll(`//`,`/`):t,y=e=>e?o(`STATIC_URL`)+(`/`+e).replaceAll(`//`,`/`):``,b=(e,t=`/styles/default.jpg`)=>e?o(`API_URL`)+(`/`+e).replaceAll(`//`,`/`):t,x=(e,t=`/styles/default.jpg`)=>e?o(`UPLOADS_URL`)+`/`+e:t;function S(e){let t=``;for(let n=0;n<e;n++){let e=Math.floor(Math.random()*62);t+=`ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789`[e]}return t}var C=/\.(jpg|jpeg|png|jfif|doc|docx|xls|xlsx|pdf)$/i,w=(e,t)=>{if(!e)return t;let n=e.split(`,`).map(e=>{let t=e.trim();return(t.includes(`/`)?t.slice(t.indexOf(`/`)+1):t).replace(/^\./,``)}).filter(Boolean);if(n.length===0)return t;let r=n.map(e=>e.replace(/[.*+?^${}()|[\]\\]/g,`\\$&`));return RegExp(`\\.(${r.join(`|`)})$`,`i`)},T=(e,t=20,n=C)=>new Promise((r,i)=>{let a=Array.from(e??[]);if(a.length===0)return i(Error(`Tập tin không tồn tại`));for(let e of a){if(!n.test(e.name))return p(`Tập tin không hợp lệ`),i(Error(`Tập tin không hợp lệ`));if(e.size>t*1024*1024)return p(`Tập tin tải lên không quá ${t}M`),i(Error(`Tập tin tải lên không quá ${t}M`))}r()}),E={"&":`&`,"<":`<`,">":`>`,'"':`"`,"'":`'`},D=e=>String(e??``).replace(/[&<>"']/g,e=>E[e]),O=new Set([`danger`,`success`,`warning`,`info`,`primary`,`secondary`,`light`,`dark`]),k=(e=``,t=`danger`,n={})=>{let r=O.has(t)?t:`danger`,i=e=>n.raw?e:D(e);return typeof e==`string`?e.trim()===``?``:`<div class="alert alert-${r}">${i(e)}</div>`:!e||typeof e!=`object`?``:Object.values(e).filter(e=>e!=null&&String(e).trim()!==``).map(e=>`<div class="alert alert-${r}">${i(String(e))}</div>`).join(``)},A=(e,t={})=>new Promise((n,r)=>{try{let r=window.jQuery,i=r(e);if(!i.length)throw Error(`invalid_elfinder`);let a={url:o(`API_URL`)+`/elfinder/connector`,height:500,resizable:!0,baseUrl:`/assets/plugins/elFinder/`,defaultView:`list`,useBrowserHistory:!1,getFileCallback:e=>{n(e)}};i.elfinder(`destroy`).elfinder({...a,...t})}catch(e){r(e)}}),j=e=>new Promise((t,n)=>{try{let n=typeof e==`string`?document.querySelector(e):e;if(!n)throw Error(`invalid_modalEl_btnEl`);n.querySelectorAll(`.btn-md-close`)?.forEach(e=>{e?.addEventListener(`click`,()=>{r.hide()})});let r=i.Modal.getOrCreateInstance(n,{backdrop:`static`,keyboard:!1});t({md:r,modalEl:n})}catch(e){console.log(e),n(e)}}),M=(e,t,n=!1,r=!1)=>{if(!e)throw Error(`invalid_btnEl`);e.addEventListener(`click`,i=>{i.preventDefault(),j(t).then(t=>{let{modalEl:i,md:a}=t;A(`#elfinderStatic`).then(t=>{n&&n({data:t,btnEl:e,md:a})}),i.addEventListener(`hidden.bs.modal`,()=>{r&&r()}),a.show()})})},N=(e,t,n=!1,r=!1)=>{if(!e)throw Error(`invalid_btnEl`);e.addEventListener(`click`,i=>{i.preventDefault(),j(t).then(t=>{let{modalEl:i,md:a}=t;A(`#elfinderStatic`,{url:o(`API_URL`)+`/elfinder/connectorFiles`}).then(t=>{n&&n({data:t,btnEl:e,md:a})}),i.addEventListener(`hidden.bs.modal`,()=>{r&&r()}),a.show()})})},P=(e=!1)=>{let t=[{id:1,name:`Tiếng Việt`}];return e===!1?t:t.find(t=>t.id===e)?.name||``};Object.defineProperty(exports,"_",{enumerable:!0,get:function(){return k}}),Object.defineProperty(exports,"a",{enumerable:!0,get:function(){return g}}),Object.defineProperty(exports,"b",{enumerable:!0,get:function(){return f}}),Object.defineProperty(exports,"c",{enumerable:!0,get:function(){return y}}),Object.defineProperty(exports,"d",{enumerable:!0,get:function(){return P}}),Object.defineProperty(exports,"f",{enumerable:!0,get:function(){return b}}),Object.defineProperty(exports,"g",{enumerable:!0,get:function(){return M}}),Object.defineProperty(exports,"h",{enumerable:!0,get:function(){return N}}),Object.defineProperty(exports,"i",{enumerable:!0,get:function(){return j}}),Object.defineProperty(exports,"l",{enumerable:!0,get:function(){return _}}),Object.defineProperty(exports,"m",{enumerable:!0,get:function(){return S}}),Object.defineProperty(exports,"n",{enumerable:!0,get:function(){return u}}),Object.defineProperty(exports,"o",{enumerable:!0,get:function(){return A}}),Object.defineProperty(exports,"p",{enumerable:!0,get:function(){return x}}),Object.defineProperty(exports,"r",{enumerable:!0,get:function(){return T}}),Object.defineProperty(exports,"s",{enumerable:!0,get:function(){return h}}),Object.defineProperty(exports,"t",{enumerable:!0,get:function(){return w}}),Object.defineProperty(exports,"u",{enumerable:!0,get:function(){return v}}),Object.defineProperty(exports,"v",{enumerable:!0,get:function(){return d}}),Object.defineProperty(exports,"x",{enumerable:!0,get:function(){return s}}),Object.defineProperty(exports,"y",{enumerable:!0,get:function(){return p}});
|