index.d.ts 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655
  1. declare type fn = () => void;
  2. declare type obj = {
  3. [key: string]: any;
  4. };
  5. declare type DeepPartial<T> = T extends Function
  6. ? T
  7. : T extends object
  8. ? { [P in keyof T]?: DeepPartial<T[P]> }
  9. : T;
  10. declare namespace Vue {
  11. interface Ref<T = any> {
  12. value: T;
  13. }
  14. type Emit = (name: string, data: any) => void;
  15. }
  16. declare type Merge<A, B> = Omit<A, keyof B> & B;
  17. declare type RemoveIndex<T> = {
  18. [P in keyof T as string extends P ? never : number extends P ? never : P]: T[P];
  19. };
  20. declare type List<T> = Array<DeepPartial<T> | (() => DeepPartial<T>)>;
  21. // element-plus
  22. declare namespace ElementPlus {
  23. type Size = "large" | "default" | "small";
  24. interface FormProps {
  25. inline?: boolean;
  26. labelPosition?: "left" | "right" | "top";
  27. labelWidth?: string | number;
  28. labelSuffix?: string;
  29. hideRequiredAsterisk?: boolean;
  30. showMessage?: boolean;
  31. inlineMessage?: boolean;
  32. statusIcon?: boolean;
  33. validateOnRuleChange?: boolean;
  34. size?: Size;
  35. disabled?: boolean;
  36. [key: string]: any;
  37. }
  38. }
  39. // emitter
  40. declare interface EmitterItem {
  41. name: string;
  42. callback(data: any, events: { refresh(params: any): void; crudList: ClCrud.Ref[] }): void;
  43. }
  44. declare interface Emitter {
  45. list: EmitterItem[];
  46. init(events: any): void;
  47. emit(name: string, data?: any): void;
  48. on(name: string, callback: (data: any) => void): void;
  49. }
  50. // browser
  51. declare type Browser = {
  52. screen: string;
  53. isMini: boolean;
  54. };
  55. // hook
  56. declare namespace Hook {
  57. interface Options {
  58. form: obj;
  59. prop: string;
  60. method: "submit" | "bind";
  61. }
  62. type fn = (value: any, options: Options) => any;
  63. type FormPipe =
  64. | "number"
  65. | "string"
  66. | "split"
  67. | "join"
  68. | "boolean"
  69. | "booleanNumber"
  70. | "datetimeRange"
  71. | "splitJoin"
  72. | "json"
  73. | "empty"
  74. | fn;
  75. type FormPipes = FormPipe | FormPipe[];
  76. type Form =
  77. | string
  78. | {
  79. bind?: FormPipes;
  80. submit?: FormPipes;
  81. };
  82. }
  83. // render
  84. declare namespace Render {
  85. type OpButton =
  86. | `slot-${string}`
  87. | {
  88. label: string;
  89. type?: string;
  90. hidden?: boolean;
  91. onClick(options: { scope: obj }): void;
  92. [key: string]: any;
  93. };
  94. type Options = Array<{ label: string; value?: any; [key: string]: any }>;
  95. interface Props {
  96. onChange?(value: any): void;
  97. [key: string]: any;
  98. }
  99. interface Component {
  100. name?: string;
  101. options?: Options | Vue.Ref<Options>;
  102. props?: Props | Vue.Ref<Props>;
  103. style?: obj;
  104. functionSlot?: boolean;
  105. vm?: any;
  106. [key: string]: any;
  107. }
  108. }
  109. declare namespace ClCrud {
  110. type Pagination = {
  111. total: number;
  112. page: number;
  113. size: number;
  114. [key: string]: any;
  115. };
  116. interface Dict {
  117. primaryId: string;
  118. api: {
  119. list: string;
  120. add: string;
  121. update: string;
  122. delete: string;
  123. info: string;
  124. page: string;
  125. };
  126. pagination: {
  127. page: string;
  128. size: string;
  129. };
  130. search: {
  131. keyWord: string;
  132. query: string;
  133. };
  134. sort: {
  135. order: string;
  136. prop: string;
  137. };
  138. label: {
  139. op: string;
  140. add: string;
  141. delete: string;
  142. multiDelete: string;
  143. update: string;
  144. refresh: string;
  145. info: string;
  146. search: string;
  147. reset: string;
  148. clear: string;
  149. save: string;
  150. close: string;
  151. confirm: string;
  152. advSearch: string;
  153. searchKey: string;
  154. placeholder: string;
  155. tips: string;
  156. saveSuccess: string;
  157. deleteSuccess: string;
  158. deleteConfirm: string;
  159. empty: String;
  160. };
  161. }
  162. interface Permission {
  163. page?: boolean;
  164. list?: boolean;
  165. add?: boolean;
  166. delete?: boolean;
  167. update?: boolean;
  168. info?: boolean;
  169. [key: string]: any;
  170. }
  171. interface Service {
  172. api: {
  173. page(
  174. params?: obj
  175. ): Promise<{ list: any[]; pagination: Pagination; [key: string]: any }>;
  176. list(params?: obj): Promise<any[]>;
  177. add(params?: obj): Promise<any>;
  178. update(params?: obj): Promise<any>;
  179. info(params?: obj): Promise<obj>;
  180. delete(params?: obj): Promise<any>;
  181. [key: string]: (params?: any) => Promise<any>;
  182. };
  183. }
  184. interface Config {
  185. name: string;
  186. service: Service["api"];
  187. permission: Permission;
  188. dict: Dict;
  189. onRefresh(
  190. params: obj,
  191. event: {
  192. done: fn;
  193. next: Service["api"]["page"];
  194. render: (list: any[], pagination?: Pagination) => void;
  195. }
  196. ): void;
  197. onDelete(
  198. selection: obj[],
  199. event: {
  200. next: Service["api"]["delete"];
  201. }
  202. ): void;
  203. }
  204. interface Options extends Config {
  205. service: "test" | any;
  206. }
  207. interface Ref {
  208. "cl-table": ClTable.Ref;
  209. "cl-upsert": ClUpsert.Ref;
  210. name: string;
  211. routePath: string;
  212. permission: Permission;
  213. dict: Dict;
  214. service: Service["api"];
  215. loading: boolean;
  216. params: obj;
  217. selection: obj[];
  218. set(key: "dict" | "style" | "service" | "permission", value: any): void;
  219. done(): void;
  220. getParams(): obj;
  221. getPermission(key?: string): boolean;
  222. rowInfo(data: obj): void;
  223. rowAdd(): void;
  224. rowEdit(data: obj): void;
  225. rowAppend(data?: obj): void;
  226. rowClose(): void;
  227. rowDelete(...selection: obj[]): void;
  228. proxy(name: string, data?: any[]): any;
  229. paramsReplace(params: obj): obj;
  230. refresh: Service["api"]["page"];
  231. [key: string]: any;
  232. }
  233. interface Provide extends Ref {}
  234. }
  235. declare namespace ClTable {
  236. type DictOptions = {
  237. label: string;
  238. value: any;
  239. color?: string;
  240. [key: string]: any;
  241. }[];
  242. type Dict =
  243. | {
  244. text?: boolean;
  245. separator?: string;
  246. options: DictOptions;
  247. }
  248. | DictOptions;
  249. type OpButton = Array<"info" | "edit" | "delete" | Render.OpButton>;
  250. type OpButtonHandler = (options: { scope: obj }) => OpButton;
  251. interface Column {
  252. type: "index" | "selection" | "expand" | "op";
  253. hidden: boolean | Vue.Ref<boolean>;
  254. component: Render.Component;
  255. dict: Dict | Vue.Ref<Dict>;
  256. buttons: OpButton | OpButtonHandler;
  257. align: "left" | "center" | "right";
  258. label: string | Vue.Ref<string>;
  259. className: string;
  260. prop: string;
  261. orderNum: number;
  262. width: number;
  263. minWidth: number | string;
  264. renderHeader: (options: { column: any; $index: number }) => any;
  265. sortable: boolean | "desc" | "descending" | "ascending" | "asc" | "custom";
  266. sortMethod: fn;
  267. sortBy: string | ((row: any, index: number) => any) | any[];
  268. resizable: {
  269. type: boolean;
  270. default: true;
  271. };
  272. columnKey: string;
  273. headerAlign: string;
  274. showOverflowTooltip: boolean;
  275. fixed: boolean | string;
  276. formatter: (row: any, column: any, value: any, index: number) => any;
  277. selectable: (row: any, index: number) => boolean;
  278. reserveSelection: boolean;
  279. filterMethod: fn;
  280. filteredValue: unknown[];
  281. filters: unknown[];
  282. filterPlacement: string;
  283. filterMultiple: {
  284. type: boolean;
  285. default: true;
  286. };
  287. index: ((index: number) => number) | number;
  288. sortOrders: unknown[];
  289. children: Column[];
  290. [key: string]: any;
  291. }
  292. interface Config {
  293. columns: Column[];
  294. autoHeight: boolean;
  295. height: string | number;
  296. contextMenu:
  297. | boolean
  298. | Array<
  299. | ClContextMenu.Item
  300. | ((row: obj) => ClContextMenu.Item)
  301. | "refresh"
  302. | "check"
  303. | "update"
  304. | "edit"
  305. | "delete"
  306. | "info"
  307. | "order-desc"
  308. | "order-asc"
  309. >;
  310. defaultSort: {
  311. prop: string;
  312. order: "descending" | "ascending";
  313. };
  314. sortRefresh: boolean;
  315. emptyText: string;
  316. rowKey: string;
  317. onRowContextmenu?(row: any, column: any, event: any): void;
  318. }
  319. interface Ref {
  320. Table: any;
  321. config: obj;
  322. selection: obj[];
  323. data: obj[];
  324. columns: Column[];
  325. reBuild(cb?: fn): void;
  326. calcMaxHeight(): void;
  327. setData(data: any[]): void;
  328. setColumns(columns: Column[]): void;
  329. showColumn(props: string | string[], status?: boolean): void;
  330. hideColumn(props: string | string[]): void;
  331. changeSort(prop: string, order: string): void;
  332. clearSelection(): void;
  333. getSelectionRows(): any[];
  334. toggleRowSelection(row: any, selected?: boolean): void;
  335. toggleAllSelection(): void;
  336. toggleRowExpansion(row: any, expanded?: boolean): void;
  337. setCurrentRow(row: any): void;
  338. clearSort(): void;
  339. clearFilter(columnKeys: string[]): void;
  340. doLayout(): void;
  341. sort(prop: string, order: string): void;
  342. scrollTo(position: { top?: number; left?: number }): void;
  343. setScrollTop(top: number): void;
  344. setScrollLeft(left: number): void;
  345. }
  346. interface Options extends Config {
  347. columns: List<ClTable.Column>;
  348. }
  349. }
  350. declare namespace ClForm {
  351. type CloseAction = "close" | "save";
  352. interface Rule {
  353. type?:
  354. | "string"
  355. | "number"
  356. | "boolean"
  357. | "method"
  358. | "regexp"
  359. | "integer"
  360. | "float"
  361. | "array"
  362. | "object"
  363. | "enum"
  364. | "date"
  365. | "url"
  366. | "hex"
  367. | "email"
  368. | "any";
  369. required?: boolean;
  370. message?: string;
  371. min?: number;
  372. max?: number;
  373. trigger?: any;
  374. validator?(rule: any, value: any, callback: (error?: Error) => void): void;
  375. [key: string]: any;
  376. }
  377. interface Item {
  378. type?: "tabs";
  379. prop?: string;
  380. props?: {
  381. labels?: Array<{ label: string; value: string; name?: string; icon?: any }>;
  382. justify?: "left" | "center" | "right";
  383. color?: string;
  384. mergeProp?: boolean;
  385. labelWidth?: string;
  386. error?: string;
  387. showMessage?: boolean;
  388. inlineMessage?: boolean;
  389. size?: "medium" | "default" | "small";
  390. [key: string]: any;
  391. };
  392. col?: {
  393. span: number;
  394. offset: number;
  395. push: number;
  396. pull: number;
  397. xs: any;
  398. sm: any;
  399. md: any;
  400. lg: any;
  401. xl: any;
  402. tag: string;
  403. };
  404. hook?: Hook.Form;
  405. group?: string;
  406. collapse?: boolean;
  407. value?: any;
  408. label?: string;
  409. renderLabel?: any;
  410. span?: number;
  411. flex?: boolean;
  412. hidden?: boolean | Vue.Ref<boolean> | ((options: { scope: obj }) => boolean);
  413. prepend?: Render.Component;
  414. component?: Render.Component;
  415. append?: Render.Component;
  416. rules?: Rule | Rule[];
  417. required?: boolean;
  418. children?: Item[];
  419. [key: string]: any;
  420. }
  421. type Plugin = (options: {
  422. exposed: Ref;
  423. onOpen(cb: () => void): void;
  424. onClose(cb: () => void): void;
  425. onSubmit(cb: (data: obj) => obj): void;
  426. }) => void;
  427. interface Config {
  428. title?: any;
  429. width?: string;
  430. props: ElementPlus.FormProps;
  431. items: Item[];
  432. form: obj;
  433. isReset?: boolean;
  434. on?: {
  435. open?(data: obj): void;
  436. close?(action: CloseAction, done: fn): void;
  437. submit?(data: obj, event: { close: fn; done: fn }): void;
  438. };
  439. op: {
  440. hidden?: boolean;
  441. saveButtonText?: string;
  442. closeButtonText?: string;
  443. justify?: "flex-start" | "center" | "flex-end";
  444. buttons?: Array<CloseAction | Render.OpButton>;
  445. };
  446. dialog: {
  447. title?: any;
  448. width?: string;
  449. hideHeader?: boolean;
  450. controls?: Array<"fullscreen" | "close">;
  451. [key: string]: any;
  452. };
  453. [key: string]: any;
  454. }
  455. type Items = List<Item>;
  456. interface Options extends Config {
  457. items: Items;
  458. }
  459. interface Ref {
  460. Form: any;
  461. form: obj;
  462. config: {
  463. items: Item[];
  464. [key: string]: any;
  465. };
  466. open(options: DeepPartial<Options>, plugins?: Plugin[]): void;
  467. close(action?: CloseAction): void;
  468. done(): void;
  469. clear(): void;
  470. reset(): void;
  471. showLoading(): void;
  472. hideLoading(): void;
  473. setData(prop: string, value: any): void;
  474. bindForm(data: obj): void;
  475. getForm(prop?: string): any;
  476. setForm(prop: string, value: any): void;
  477. setOptions(prop: string, list: { label: string; value?: any; [key: string]: any }[]): void;
  478. setProps(prop: string, value: any): void;
  479. setConfig(path: string, value: any): void;
  480. showItem(props: string[] | string): void;
  481. hideItem(props: string[] | string): void;
  482. toggleItem(prop: string, flag?: boolean): void;
  483. resetFields(): void;
  484. clearValidate(props?: string[] | string): void;
  485. validateField(
  486. props?: string[] | string,
  487. callback?: (isValid: boolean, invalidFields: any[]) => void
  488. ): Promise<void>;
  489. validate(callback: (isValid: boolean, invalidFields: any[]) => void): Promise<void>;
  490. changeTab(value: any, valid?: boolean): Promise<any>;
  491. setTitle(value: string): void;
  492. submit(cb?: (data: obj) => void): void;
  493. [key: string]: any;
  494. }
  495. }
  496. declare namespace ClUpsert {
  497. interface Config {
  498. items: ClForm.Item[];
  499. props: ClForm.Config["props"];
  500. sync: boolean;
  501. op: ClForm.Config["op"];
  502. dialog: ClForm.Config["dialog"];
  503. onOpen?(data: obj): void;
  504. onOpened?(data: obj): void;
  505. onClose?(action: ClForm.CloseAction, done: fn): void;
  506. onClosed?(): void;
  507. onInfo?(
  508. data: obj,
  509. event: { close: fn; done(data: obj): void; next: ClCrud.Service["api"]["info"] }
  510. ): void;
  511. onSubmit?(
  512. data: obj,
  513. event: { close: fn; done: fn; next: ClCrud.Service["api"]["update"] }
  514. ): void;
  515. plugins?: ClForm.Plugin[];
  516. }
  517. interface Ref extends ClForm.Ref {
  518. mode: "add" | "update" | "info";
  519. }
  520. interface Options extends Config {
  521. items: List<ClForm.Item>;
  522. }
  523. }
  524. declare namespace ClAdvSearch {
  525. interface Config {
  526. items?: ClForm.Item[];
  527. title?: string;
  528. size?: string | number;
  529. op?: Array<"clear" | "reset" | "close" | "search">;
  530. onSearch?(data: obj, options: { next: ClCrud.Service["api"]["page"]; close(): void }): void;
  531. }
  532. interface Options extends Config {
  533. items: ClForm.Items;
  534. }
  535. interface Ref extends ClForm.Ref {}
  536. }
  537. declare namespace ClContextMenu {
  538. interface Item {
  539. label: string;
  540. icon?: string;
  541. prefixIcon?: string;
  542. suffixIcon?: string;
  543. ellipsis?: boolean;
  544. disabled?: boolean;
  545. hidden?: boolean;
  546. children?: Item[];
  547. showChildren?: boolean;
  548. callback?(done: fn): void;
  549. [key: string]: any;
  550. }
  551. interface Event {
  552. pageX: number;
  553. pageY: number;
  554. [key: string]: any;
  555. }
  556. interface Options {
  557. hover?:
  558. | boolean
  559. | {
  560. target?: string;
  561. className?: string;
  562. };
  563. list: Item[];
  564. }
  565. interface Ref {
  566. open(event: Event, options: Options): Ref;
  567. close(): void;
  568. }
  569. }
  570. declare namespace ClDialog {
  571. interface Provide {
  572. visible: Vue.Ref<boolean>;
  573. fullscreen: Vue.Ref<boolean>;
  574. }
  575. }
  576. declare interface GlobalOptions {
  577. dict: ClCrud.Dict;
  578. permission: ClCrud.Permission;
  579. style: {
  580. size: ElementPlus.Size;
  581. };
  582. events: {
  583. [key: string]: (...args: any[]) => any;
  584. };
  585. render: {
  586. autoHeight: boolean;
  587. functionSlots: {
  588. exclude: string[];
  589. };
  590. };
  591. crud: any;
  592. }
  593. declare type Options = DeepPartial<GlobalOptions>;
  594. declare interface CrudOptions {
  595. options: Options;
  596. }