index.ts 20 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754
  1. import { VNode, ComponentPublicInstance } from "vue";
  2. import { BreakPoint, Responsive } from "@/components/Grid/interface";
  3. // import { TableColumnCtx } from "element-plus/es/components/table/src/table-column/defaults";
  4. import LjVxeTable from "@/components/LjVxeTable/index.vue";
  5. import type { VxeColumnProps, VxeTablePropTypes } from "vxe-table";
  6. import { cloneDeep } from "lodash-es";
  7. import dayjs from "dayjs";
  8. export interface EnumProps {
  9. label?: string; // 选项框显示的文字
  10. value?: string | number | boolean | any[]; // 选项框值
  11. disabled?: boolean; // 是否禁用此选项
  12. tagType?: string; // 当 tag 为 true 时,此选择会指定 tag 显示类型
  13. children?: EnumProps[]; // 为树形选择时,可以通过 children 属性指定子选项
  14. [key: string]: any;
  15. }
  16. export type TypeProps = "index" | "checkbox" | "expand";
  17. export type TypeFormat =
  18. | "yyyy-MM-dd"
  19. | "yyyy-MM-dd HH:mm:ss"
  20. | "yyyy-MM-dd HH:mm"
  21. | "MM/dd/yyyy"
  22. | "MM/dd"
  23. | "dd/MM/yyyy"
  24. | "yyyy/MM/dd"
  25. | "intNumber"
  26. | "cutNumber"
  27. | "cutNumber3"
  28. | "amountNumber"
  29. | "fixedNumber"
  30. | "percent";
  31. export type SearchType =
  32. | "text"
  33. | "input"
  34. | "input-number"
  35. | "select"
  36. | "select-v2"
  37. | "tree-select"
  38. | "cascader"
  39. | "date-picker"
  40. | "time-picker"
  41. | "time-select"
  42. | "switch"
  43. | "slider"
  44. | "checkbox"
  45. | "checkbox-group"
  46. | "radio-group"
  47. | "autocomplete";
  48. export type SearchRenderScope = {
  49. searchParam: { [key: string]: any };
  50. placeholder: string;
  51. clearable: boolean;
  52. options: EnumProps[];
  53. data: EnumProps[];
  54. status?: any;
  55. };
  56. /**
  57. * @description 数据模型:搜索模块
  58. */
  59. export type SearchProps = {
  60. /**
  61. * @argument SearchType 当前项搜索框的类型
  62. */
  63. el?: SearchType;
  64. /**
  65. * @argument 搜索项参数,根据 element plus 官方文档来传递,该属性所有值会透传到组件,包括事件
  66. */
  67. props?: any;
  68. key?: string; // 当搜索项 key 不为 prop 属性时,可通过 key 指定
  69. order?: number; // 搜索项排序(从大到小)
  70. /**
  71. * @argument number 所占用的列数,默认为1列
  72. */
  73. span?: number;
  74. /**
  75. * @argument number 搜索字段左侧偏移列数
  76. */
  77. offset?: number;
  78. /**
  79. * @argument 搜索项默认值
  80. */
  81. defaultValue?: string | number | boolean | any[];
  82. /**
  83. * @argument 自定义搜索内容渲染(tsx语法)用于渲染搜索,或basicinfoProps详情页编辑
  84. */
  85. render?: (scope: SearchRenderScope) => VNode;
  86. /**
  87. * @argument string 表单域标签的位置
  88. */
  89. labelPosition?: "left" | "right" | "top";
  90. /**
  91. * @argument string 标签宽度
  92. */
  93. labelWidth?: string | number;
  94. /**
  95. * @description 是否隐藏标签,默认:false
  96. */
  97. labelHidden?: boolean;
  98. /**
  99. * @description 是否可视, 默认:true, false:禁止渲染详情页模式中的单元格
  100. */
  101. visible?: boolean;
  102. /**
  103. * 搜索列标题field
  104. */
  105. titleKey?: string;
  106. [key: string]: any;
  107. } & Partial<Record<BreakPoint, Responsive>>;
  108. /**
  109. * @description 数据模型:基础信息模块
  110. */
  111. export interface basicinfoProps extends SearchProps {
  112. /**
  113. * @description 是否可编辑, 默认不限制,new:新建,edit:修改
  114. */
  115. editable?: string[] | undefined | ((params?: any) => boolean);
  116. /**
  117. * @description 编辑时,按需显隐
  118. */
  119. editvisible?: (params?: any) => boolean;
  120. /**
  121. * @argument string 分组名称
  122. */
  123. group?: string;
  124. /**
  125. * @description 扩展显示字段, 待开发
  126. */
  127. extendsField?: string[];
  128. /**
  129. * @description 是否隐藏字段, 默认:false
  130. */
  131. ishidden?: boolean;
  132. disabledTextCallBack?: (data: any) => string; // 禁用按钮文字回调
  133. /**
  134. * @argument boolean 编辑时form item验证规则
  135. */
  136. rules?: any;
  137. /**
  138. * @argument number 占用的行数,默认为1列
  139. */
  140. row?: number;
  141. }
  142. export type FieldNamesProps = {
  143. label: string;
  144. value: string;
  145. children?: string;
  146. };
  147. export type RenderScope<T> = {
  148. row: T;
  149. $index: number;
  150. column: VxeColumnProps<T>;
  151. [key: string]: any;
  152. };
  153. export type HeaderRenderScope<T> = {
  154. $index: number;
  155. column: VxeColumnProps<T>;
  156. [key: string]: any;
  157. };
  158. export interface ColumnProps<T = any> extends Partial<Omit<VxeColumnProps<T>, "children" | "renderCell" | "renderHeader">> {
  159. /**
  160. * @argument boolean 是否是标签展示
  161. */
  162. tag?: boolean;
  163. // /**
  164. // * @argument boolean 是否隐藏在表格当中
  165. // */
  166. // invisible?: boolean;
  167. /**
  168. * @argument object 列表页:搜索栏
  169. */
  170. search?: SearchProps | undefined;
  171. /**
  172. * @argument object 详情页:基础信息
  173. */
  174. basicinfo?: basicinfoProps | undefined;
  175. /**
  176. * @description search,筛选时,枚举类型(字典)
  177. */
  178. enum?: EnumProps[] | ((params?: any) => Promise<any>);
  179. /**
  180. * @description 过滤枚举
  181. */
  182. enumFilter?: (params: any, enumdata?: any, field?: string, orderStatus?: string) => EnumProps[];
  183. isFilterEnum?: boolean; // 当前单元格值是否根据 enum 格式化(示例:enum 只作为搜索项数据)
  184. fieldNames?: FieldNamesProps; // enum 指定 label && value && children 的 key 值
  185. headerRender?: (scope: HeaderRenderScope<T>) => VNode; // 自定义表头内容渲染(tsx语法)
  186. /**
  187. * @description 自定义单元格内容渲染(tsx语法)- 用于表格展示/详情页浏览
  188. */
  189. render?: (scope: RenderScope<T>, enumdata?: any, field?: string) => VNode | string;
  190. _children?: ColumnProps<T>[]; // 多级表头
  191. /**
  192. * @argument string[] 父级列表
  193. */
  194. parents?: string[];
  195. /**
  196. * @argument boolean 是否隐藏父级表头
  197. */
  198. parentHidden?: boolean;
  199. /**
  200. * @argument number 排序
  201. */
  202. order?: VxeTablePropTypes.SortOrder;
  203. /**
  204. * @argument number 排序时间,比较先后顺序
  205. */
  206. sortTime?: number;
  207. /**
  208. * @argument number 列顺序
  209. */
  210. colorder?: number;
  211. /**
  212. * @argument 所属表格,通过i18n引导的标题title
  213. */
  214. table?: string;
  215. // /**
  216. // * @argument string 字段类型, number, date, string,默认string,可根据field名称取值”date"
  217. // */
  218. // fieldType?: string;
  219. /**
  220. * @argument string 辅助信息:数据来源,备注信息
  221. */
  222. dataSources?: string;
  223. /**
  224. * @argument TypeFormat 辅助信息:格式函数名
  225. * | "yyyy-MM-dd"
  226. * | "yyyy-MM-dd HH:mm:ss"
  227. * | "yyyy-MM-dd HH:mm"
  228. * | "MM/dd/yyyy"
  229. * | "MM/dd"
  230. * | "dd/MM/yyyy"
  231. * | "yyyy/MM/dd"
  232. * | "cutNumber" 向下舍入,默认两位数
  233. * | "amountNumber" 四舍五入金额,每隔3位逗号分隔,默认2位数
  234. * | "fixedNumber" 四舍五入,默认两位数
  235. *
  236. */
  237. format?: TypeFormat;
  238. /**
  239. * @argument string 辅助信息:格式化,枚举类型(字典)
  240. */
  241. formatEnum?: selectOption[] | ((params?: any) => Promise<any>);
  242. /**
  243. * @argument boolean form item验证规则
  244. */
  245. rules?: any;
  246. /**
  247. * @augments boolean 是否限制显示
  248. */
  249. limited?: boolean | ((params?: any) => boolean);
  250. /**
  251. * @augments string 数据类型,用于赋值特殊字段的属性特征
  252. */
  253. datatype?: string;
  254. /**
  255. * @description 只对 tree-config 配置时有效,指定为树节点
  256. */
  257. treeNode?: boolean;
  258. /**
  259. * @description 自定义单元格内容渲染(tsx语法)- 用于表格编辑
  260. */
  261. editColRender?: (scope: RenderScope<T>, enumdata?: any, field?: string) => VNode | string;
  262. [key: string]: any;
  263. }
  264. /**
  265. * @description vxeTable组件api
  266. */
  267. export type aboutVxetableApiProps = {
  268. /**
  269. * @argument ColumnProps[] 列配置项 ==> 必传
  270. */
  271. columns?: ColumnProps[];
  272. /**
  273. * @argument any 静态 table data 数据,若存在则不会使用 requestApi 返回的 data ==> 非必传
  274. */
  275. data?: any[];
  276. /**
  277. * @argument string 请求表格数据的 api ==> 非必传
  278. */
  279. requestApi?: (params: any) => Promise<any>;
  280. /**
  281. * @argument boolean 是否自动执行请求 api ==> 非必传(默认为true)
  282. */
  283. requestAuto?: boolean;
  284. /**
  285. * @argument function 表格 api 请求错误监听 ==> 非必传
  286. */
  287. requestError?: (params: any) => void;
  288. /**
  289. * @argument function 返回数据的回调函数,可以对数据进行处理 ==> 非必传
  290. */
  291. dataCallback?: (data: any) => any;
  292. /**
  293. * @argument boolean 是否需要分页组件 ==> 非必传(默认为true)
  294. */
  295. pagination?: boolean;
  296. pageSizes?: number[] | undefined;
  297. /**
  298. * @argument any 初始化请求参数 ==> 非必传(默认为{})
  299. */
  300. initParam?: any;
  301. /**
  302. * @argument string 布局窗口名称
  303. */
  304. dwname?: string;
  305. /**
  306. * @argument string[] 布局读取/保存时,赋值的属性名称; 支持单属名称、属性路径: ["search", "search.order"]
  307. */
  308. layoutAttr?: string[];
  309. /**
  310. * @argument Object 布局默认设置,保存时移除,默认的属性;包含search、basicinfo属性的默认值
  311. */
  312. layoutAttrDefine?: any;
  313. /**
  314. * @augments boolean 是否自动加载布局, 默认true;决定是否读取通用接口返回的布局
  315. */
  316. autoLoadLayout?: boolean;
  317. /**
  318. * @argument Array 打印前,事件检查
  319. */
  320. beforePrintCallback?: (data: any) => any;
  321. /**
  322. * @argument Array 打印前,获取打印数据
  323. */
  324. printDataCallback?: (data: any) => any;
  325. importApi?: (params: any) => Promise<any>;
  326. /**
  327. * @description 表格/详情页,是否可编辑
  328. */
  329. editable?: boolean;
  330. };
  331. /**
  332. * @description 表格组件props
  333. */
  334. export interface LjVxetableProps extends aboutVxetableApiProps {
  335. // /**
  336. // * @argument ColumnProps[] 列配置项 ==> 必传
  337. // */
  338. // columns: ColumnProps[];
  339. // /**
  340. // * @argument any 静态 table data 数据,若存在则不会使用 requestApi 返回的 data ==> 非必传
  341. // */
  342. // data?: any[];
  343. // /**
  344. // * @argument string 请求表格数据的 api ==> 非必传
  345. // */
  346. // requestApi?: (params: any) => Promise<any>;
  347. // /**
  348. // * @argument boolean 是否自动执行请求 api ==> 非必传(默认为true)
  349. // */
  350. // requestAuto?: boolean;
  351. // /**
  352. // * @argument function 表格 api 请求错误监听 ==> 非必传
  353. // */
  354. // requestError?: (params: any) => void;
  355. // /**
  356. // * @argument function 返回数据的回调函数,可以对数据进行处理 ==> 非必传
  357. // */
  358. // dataCallback?: (data: any) => any;
  359. // /**
  360. // * @argument boolean 是否需要分页组件 ==> 非必传(默认为true)
  361. // */
  362. // pagination?: boolean;
  363. // pageSizes?: number[] | undefined;
  364. // /**
  365. // * @argument any 初始化请求参数 ==> 非必传(默认为{})
  366. // */
  367. // initParam?: any;
  368. /**
  369. * @argument string 表格标题,目前只在打印的时候用到 ==> 非必传
  370. */
  371. title?: string; //
  372. /**
  373. * @argument boolean 是否带有纵向边框 ==> 非必传(默认为true) default(默认), full(完整边框), outer(外边框), inner(内边框), none(无边框)
  374. */
  375. border?: VxeTablePropTypes.Border;
  376. // /**
  377. // * @argument boolean 是否显示表格功能按钮 ==> 非必传(默认为true)
  378. // */
  379. // toolButton?: boolean;
  380. /**
  381. * @argument string 行数据的 Key,用来优化 Table 的渲染,当表格数据多选时,所指定的 id ==> 非必传(默认为 id)
  382. */
  383. rowKey?: string;
  384. /**
  385. * @argument number | Record<BreakPoint, number> 表格搜索项 每列占比配置 ==> 非必传 { xs: 1, sm: 2, md: 2, lg: 3, xl: 4 }
  386. */
  387. searchCol?: number | Record<BreakPoint, number>;
  388. // /**
  389. // * @argument number | Record<BreakPoint, number> 表格设置项 每列占比配置 ==> 非必传 { xs: 1, sm: 2, md: 2, lg: 3, xl: 4 }
  390. // */
  391. // settingCol?: number | Record<BreakPoint, number>;
  392. // /**
  393. // * @argument string 布局窗口名称
  394. // */
  395. // dwname?: string;
  396. // /**
  397. // * @argument string[] 布局读取/保存时,赋值的属性名称; 支持单属名称、属性路径: ["search", "search.order"]
  398. // */
  399. // layoutAttr?: string[];
  400. // /**
  401. // * @argument Object 布局默认设置,保存时移除,默认的属性;包含search、basicinfo属性的默认值
  402. // */
  403. // layoutAttrDefine?: any;
  404. // /**
  405. // * @argument string[] 搜索布局读取/保存时,赋值的属性名称
  406. // */
  407. // searchLayoutAttr?: string[];
  408. // /**
  409. // * @argument Object 搜索默认设置,保存时移除,默认的属性
  410. // */
  411. // searchLayoutAttrDefine?: any;
  412. /**
  413. * 表尾
  414. * @argument data
  415. */
  416. footerMethod?: (data: any) => any | boolean;
  417. tableCls?: string;
  418. /**
  419. * @argument 继承 vxetable props: https://vxetable.cn/#/table/api
  420. */
  421. tableProps?: any;
  422. /**
  423. * @argument 外置loading
  424. */
  425. extraLoading?: boolean | undefined;
  426. /**
  427. * 给表头的单元格附加 className https://vxetable.cn/#/table/api?filterName=header-cell-class-name
  428. * @argument params column
  429. */
  430. headerCellClassName?: (params: any) => any;
  431. /**
  432. * 给表头的单元格附加 className https://vxetable.cn/#/table/api?filterName=header-cell-class-name
  433. * @argument params column
  434. */
  435. cellClassName?: (params: any, editable: boolean) => any;
  436. /**
  437. * @argument Object 表格绑定的事件
  438. */
  439. tableEvents?: any;
  440. /**
  441. * @argument Array 表格按钮
  442. * @enum "refresh": 刷新, "setting": 设置, "search": 搜索栏, "location": 定位, "guide": 指导
  443. */
  444. toolButton?: string[];
  445. /**
  446. * @argument Array 表格按钮权限
  447. * @attention 按钮权限,需要与按钮位置对应,若无/0,则默认显示
  448. */
  449. toolButtonPower?: number[];
  450. // /**
  451. // * @argument Array 打印前,事件检查
  452. // */
  453. // beforePrintCallback?: (data: any) => any;
  454. // /**
  455. // * @argument Array 打印前,获取打印数据
  456. // */
  457. // printDataCallback?: (data: any) => any;
  458. /**
  459. * @argument boolean 折叠表格菜单按钮
  460. */
  461. collapseButtons?: boolean;
  462. /**
  463. * @description 表格搜索栏是否开启mini模式,即嵌套在slots[tableHeader]里面
  464. */
  465. miniSearchbar?: boolean;
  466. /**
  467. * @description 翻页后回调函数
  468. */
  469. pageChangeCallBack?: () => void;
  470. /**
  471. * @description 底部合计字段
  472. */
  473. footerSumAttrs?: string[];
  474. /**
  475. * @description 搜索栏按钮需要缩小尺寸的屏幕尺寸,eg: ["xs", "sm"]
  476. */
  477. searchBtnSizeExtent?: string[];
  478. /**
  479. * @description 绑定多选的列名
  480. */
  481. multiSelect?: string;
  482. /**
  483. * @description 列表是否显示搜索栏
  484. */
  485. ifSearch?: boolean;
  486. /**
  487. * @description 列表刷新后,自动选中第一行
  488. */
  489. autoSelectFirstAfterRefresh?: boolean;
  490. /**
  491. * @description 是否需要加载查询习惯
  492. */
  493. ifLoadQueryHabit?: boolean;
  494. /**
  495. * @description 当前行是否禁止点击
  496. */
  497. lockRow?: boolean | ((params: any) => boolean);
  498. }
  499. export type LjVxeTableInstance = Omit<InstanceType<typeof LjVxeTable>, keyof ComponentPublicInstance | keyof LjVxetableProps>;
  500. /**
  501. * @description ElementPlus selecet option interface
  502. */
  503. export interface selectOption {
  504. /**
  505. * @argument string 名称
  506. */
  507. label?: string;
  508. /**
  509. * @argument string 值
  510. */
  511. value: string;
  512. /**
  513. * @argument boolean 是否禁用该选项
  514. */
  515. disabled?: boolean;
  516. }
  517. /**
  518. * @description 表格过滤器条件枚举
  519. */
  520. enum fModeEnum {
  521. /**
  522. * @description 包含
  523. */
  524. LIKE = "like",
  525. /**
  526. * @description 不包含
  527. */
  528. NOTLIKE = "notlike",
  529. /**
  530. * @description 等于
  531. */
  532. EQUAL = "equal",
  533. /**
  534. * @description 不等于
  535. */
  536. NE = "ne",
  537. /**
  538. * @description 大于
  539. */
  540. GREATER = "greater",
  541. /**
  542. * @description 大于等于
  543. */
  544. GE = "ge",
  545. /**
  546. * @description 小于
  547. */
  548. LESS = "less",
  549. /**
  550. * @description 小于等于
  551. */
  552. LE = "le"
  553. }
  554. export const hasValFunc = (target: any, val: any, fMode: string) => {
  555. let _t = Number(target);
  556. let _v = Number(val);
  557. let _target = isNaN(_t) ? target.toLowerCase() : target.toString();
  558. let _val = isNaN(_t) ? val.toLowerCase() : val.toString();
  559. switch (fMode) {
  560. case fModeEnum.LIKE: // 包含
  561. // console.log("_target :>> ", _target);
  562. // console.log("_val :>> ", _val);
  563. // console.log("_target.indexOf(_val) :>> ", _target.indexOf(_val));
  564. return _target.indexOf(_val) > -1;
  565. case fModeEnum.NOTLIKE: // 不包含
  566. return _target.indexOf(_val) == -1;
  567. case fModeEnum.EQUAL: // 等于
  568. return _target == _val;
  569. case fModeEnum.NE: // 不等于
  570. return _target != _val;
  571. case fModeEnum.GREATER: // 大于
  572. if (isNaN(_t) || isNaN(_v)) {
  573. return _target > _val;
  574. } else {
  575. return _t > _v;
  576. }
  577. case fModeEnum.GE: // 大于等于
  578. if (isNaN(_t) || isNaN(_v)) {
  579. return _target >= _val;
  580. } else {
  581. return _t >= _v;
  582. }
  583. case fModeEnum.LESS: // 小于
  584. if (isNaN(_t) || isNaN(_v)) {
  585. return _target < _val;
  586. } else {
  587. return _t < _v;
  588. }
  589. case fModeEnum.LE: // 小于等于
  590. if (isNaN(_t) || isNaN(_v)) {
  591. return _target <= _val;
  592. } else {
  593. return _t <= _v;
  594. }
  595. }
  596. return _target.indexOf(_val) > -1;
  597. };
  598. export const compareInputFunc = (target: any, val: any, fMode: string) => {
  599. let _val = val.replace(",", ",");
  600. if (_val.toString().indexOf(",") > -1) {
  601. let arr = _val.split(",");
  602. return arr.some((v: any) => hasValFunc(target, v, fMode));
  603. } else {
  604. return hasValFunc(target, _val, fMode);
  605. }
  606. };
  607. /**
  608. * @description 时间比较
  609. * @param format 日期格式
  610. * @param fMode 过滤器条件
  611. * @param val 值
  612. */
  613. export const dataCompareFunc = (target: any, val: any, fMode: string, format: string) => {
  614. let _val = dayjs(dayjs(val).format(format));
  615. let _target = dayjs(dayjs(target).format(format));
  616. let diffType: any = "day";
  617. if (format == "YYYY-MM-DD HH:mm") {
  618. diffType = "minute";
  619. }
  620. switch (fMode) {
  621. case fModeEnum.EQUAL: // 等于
  622. return _target.diff(_val, diffType) == 0;
  623. case fModeEnum.NE: // 不等于
  624. return _target.diff(_val, diffType) != 0;
  625. case fModeEnum.GREATER: // 大于
  626. return _target.diff(_val, diffType) > 0;
  627. case fModeEnum.GE: // 大于等于
  628. return _target.diff(_val, diffType) >= 0;
  629. case fModeEnum.LESS: // 小于
  630. return _target.diff(_val, diffType) < 0;
  631. case fModeEnum.LE: // 小于等于
  632. return _target.diff(_val, diffType) <= 0;
  633. }
  634. };
  635. // filter default
  636. const defaultFilter = [{ data: { vals: [], sVal: "", fMenu: "", f1Type: "", f1Val: "", fMode: "like", f2Type: "", f2Val: "" } }];
  637. /**
  638. * @description 赋予特殊原始默认值
  639. * 正则表达式匹配,特征"$"和”^“
  640. * @param $ 以...结尾
  641. * @param ^ 以...开头
  642. */
  643. const defineColumnStyle: any = {
  644. date: {
  645. fMode: fModeEnum.EQUAL
  646. },
  647. datetime: {
  648. fMode: fModeEnum.EQUAL
  649. },
  650. checkbox: {
  651. // width: 80
  652. },
  653. number: {
  654. fMode: fModeEnum.EQUAL
  655. },
  656. date$: {
  657. fMode: fModeEnum.EQUAL
  658. },
  659. time$: {
  660. fMode: fModeEnum.EQUAL
  661. },
  662. amt$: {
  663. fMode: fModeEnum.GE
  664. },
  665. qty$: {
  666. fMode: fModeEnum.GE
  667. },
  668. "^qty": {
  669. fMode: fModeEnum.GE
  670. },
  671. price$: {
  672. fMode: fModeEnum.GE
  673. }
  674. };
  675. export const getDefaultFilter = (item: any) => {
  676. let _define: any = {};
  677. let _defaultFilter = cloneDeep(defaultFilter);
  678. if (item.hasOwnProperty("datatype")) {
  679. _define = cloneDeep(defineColumnStyle[item.datatype]);
  680. } else {
  681. for (const key in defineColumnStyle) {
  682. if (key.indexOf("$") > -1 || key.indexOf("^") > -1) {
  683. // 正则表达式
  684. let reg = new RegExp(key);
  685. if (reg.test(item.field)) {
  686. _define = cloneDeep(defineColumnStyle[key]);
  687. break;
  688. }
  689. }
  690. }
  691. }
  692. _define && _define.hasOwnProperty("fMode") && (_defaultFilter[0].data.fMode = _define.fMode);
  693. return _defaultFilter;
  694. };
  695. /**
  696. * @description 搜索方案
  697. */
  698. export interface searchProjectItem {
  699. /**
  700. * @description 名称
  701. */
  702. name: string;
  703. value: { [key: string]: any };
  704. }
  705. /**
  706. * @description 保存布局,额外的属性
  707. */
  708. export interface dwnameSaveLayoutAttr {
  709. /**
  710. * @description vxetable属性
  711. */
  712. scrollY?: any;
  713. /**
  714. * @description 搜索栏相关属性
  715. */
  716. search?: any;
  717. /**
  718. * @description 详情页相关参数
  719. */
  720. basicinfo?: any;
  721. /**
  722. * @description 搜索方案
  723. */
  724. searchProject?: searchProjectItem[];
  725. }