index.ts 19 KB

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