useDwLayout.tsx 22 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604
  1. import { Layout } from "./interface";
  2. import { computed, reactive, toRefs } from "vue";
  3. // import { useRoute } from "vue-router";
  4. // import { useAuthStore } from "@/stores/modules/auth";
  5. import { useLayoutStore } from "@/stores/modules/layout";
  6. import { ColumnProps } from "@/components/LjVxeTable/interface";
  7. import { isFunction, isObject, isString } from "@/utils/is";
  8. import { cloneDeep, pick, has, get, set, defaultsDeep } from "lodash-es";
  9. import { streamlineFunc, parseFormatType } from "@/utils";
  10. import { defineColumnStyle } from "@/config/columnStyle";
  11. import tableJson from "@/languages/modules/zh-cn/table.json";
  12. import { TABLE_TYPE_FILTER } from "@/config/index";
  13. /**
  14. * @description 表格布局信息
  15. * @param {string} type 布局类型
  16. * @param {Object} t i18n
  17. * @param {Array} columns 初始化布局数据
  18. * @param {Array} layoutAttr 布局读取/保存时,赋值的属性名称
  19. * @param {Object} layoutAttrDefine 布局默认设置,保存时移除,默认的属性
  20. * @param {boolean} autoLoadLayout 自动获取布局
  21. * @param {String} dwname 布局名称
  22. * @param {Function} loadLayoutCallBack 加载布局时,返回的数据进行处理的方法
  23. * @param {Function} flatColumnsCallBack 扁平化布局时,返回的数据进行处理的方法
  24. * */
  25. export const useDwLayout = (
  26. dwtype: "table" | "detail",
  27. t: any,
  28. columns: ColumnProps<any>[],
  29. layoutAttr: string[] = [],
  30. layoutAttrDefine: any = {},
  31. autoLoadLayout: boolean = false,
  32. dwname?: string,
  33. loadLayoutCallBack?: (data: any) => any,
  34. flatColumnsCallBack?: (data: any) => any,
  35. editable?: boolean
  36. ) => {
  37. // 布局暂存数据
  38. const layoutStore = useLayoutStore();
  39. /**
  40. * @description 额外由后台决定的columns属性
  41. */
  42. const onlyReadAttr = ["datatype", "enum", "pbformat", "tabsequence"];
  43. /**
  44. * @description 别名字段集合(field),由后台定义title值
  45. */
  46. const aliasAttr = ["status", "woodcode", "pcode", "mtrlsectype", "zxmtrlmode", "usermtrlmode", "otheramt", "excolumn"];
  47. const state = reactive<Layout.LayoutStateProps>({
  48. tableColumns: cloneDeep(columns),
  49. dwLayout: [],
  50. flatColumns: []
  51. });
  52. const dwFieldMap = new Map();
  53. const loadLayoutFunc = async () => {
  54. if (dwname) {
  55. console.log("BF 数行化BF,还原个性设置 state.tableColumns.value :>> ", state.tableColumns);
  56. // console.log("await layoutStore.getDwLayout(dwname) :>> ", await layoutStore.getDwLayout(dwname, autoLoadLayout));
  57. let layout = await layoutStore.getDwLayout(dwname, autoLoadLayout);
  58. console.log("BF loadLayoutFunc layout :>> ", layout);
  59. if (layout?.hasOwnProperty("itemvalue") && layout.itemvalue) {
  60. // 表格结构: {tableprop: string, columns: string}
  61. typeof layout.itemvalue == "string" && (layout.itemvalue = JSON.parse(layout.itemvalue.replace(/'/g, '"')));
  62. // 兼容部分结构直接记录行数据
  63. if (layout.itemvalue.hasOwnProperty("columns") && layout.itemvalue.columns) {
  64. state.dwLayout = layout.itemvalue.columns;
  65. } else {
  66. state.dwLayout = layout.itemvalue;
  67. }
  68. loadLayoutCallBack && loadLayoutCallBack(layout.itemvalue);
  69. }
  70. console.log("onMounted state.dwLayout :>> ", state.dwLayout);
  71. loadDwLayoutFunc(state.dwLayout);
  72. console.log("数行化BF,还原个性设置 state.tableColumns.value :>> ", state.tableColumns);
  73. // 扁平化,并读取个性设置
  74. // state.flatColumns = flatColumnsFunc(state.tableColumns, dwFieldMap);
  75. // console.log("读取个性设置 state.flatColumns :>> ", state.flatColumns);
  76. // 数行化,还原个性设置
  77. // tableColumns.value = restoreColumnsFunc(state.flatColumns);
  78. // console.log("数行化,还原个性设置 tableColumns.value :>> ", tableColumns.value);
  79. }
  80. state.flatColumns = flatColumnsFunc(state.tableColumns, dwFieldMap);
  81. console.log("state.flatColumns :>> ", state.flatColumns);
  82. };
  83. /**
  84. * @description 读取个性布局,用Map()储存
  85. * @param loadLayout 读取的布局数据
  86. */
  87. const loadDwLayoutFunc = (loadLayout: ColumnProps[] = [], sort: boolean = true) => {
  88. console.log("loadLayout.value :>> ", loadLayout);
  89. if (!loadLayout || !loadLayout.length) return false;
  90. if (sort) {
  91. // 个性布局加顺序号
  92. for (const i in loadLayout) {
  93. loadLayout[i].colorder = Number(i);
  94. }
  95. }
  96. // 个性布局构建键值Map()
  97. dwFieldMap.clear();
  98. for (const item of loadLayout) {
  99. dwFieldMap.set(item.field, item);
  100. }
  101. console.log("dwFieldMap :>> ", dwFieldMap);
  102. };
  103. // /**
  104. // * @description 默认值赋值,
  105. // * @param {Object} item 数据项
  106. // * @param {Object/Array} defineValue 默认数据
  107. // */
  108. // const setDefineVal = (item: any, defineValue: any) => {
  109. // for (const key in defineValue) {
  110. // if (key == "visible") {
  111. // item[key] = item[key] === false ? false : defineValue[key];
  112. // } else {
  113. // if (isObject(item[key])) {
  114. // setDefineVal(item[key], defineValue[key]);
  115. // } else if (isArray(item[key])) {
  116. // item[key].forEach((itm: any) => {
  117. // setDefineVal(itm, defineValue[key][0]);
  118. // });
  119. // } else {
  120. // item[key] = item[key] ?? defineValue[key];
  121. // }
  122. // item[key] = item[key] ?? defineValue[key];
  123. // }
  124. // }
  125. // };
  126. let _checkAttr = [...layoutAttr, ...onlyReadAttr];
  127. /**
  128. * 读取个性化布局
  129. * @param {object} item 原始column数据
  130. * @param {object} userStyle 个性化布局
  131. * @returns {object} 返回完成恢复默认值的个性布局数据
  132. */
  133. const loadUserStyle = (item: any, userStyle: any) => {
  134. // let _item = cloneDeep(item);
  135. // 只有部分列的title值,取自后台数据
  136. let attr = cloneDeep(_checkAttr);
  137. if (item.field && item.title && (!aliasAttr.includes(item.field) || (item.field == "status" && item.enum))) {
  138. attr = attr.filter((item: string) => item != "title");
  139. }
  140. // if (item.field == "status") {
  141. // console.log("bf loadUserStyle attr :>> ", attr);
  142. // console.log("bf userStyle attr :>> ", userStyle);
  143. // }
  144. // 只读授权的字段
  145. let _load = pick(userStyle, attr);
  146. // 先赋值datatype,处理并获取,默认赋值
  147. _load.datatype && (item.datatype = _load.datatype);
  148. _load.enum && (item.enum = _load.enum);
  149. let _define = getDefineAttr(item, layoutAttrDefine);
  150. // 强→弱
  151. defaultsDeep(_load, _define, item);
  152. // console.log("_load :>> ", item.field, _load);
  153. // console.log("item :>> ", item);
  154. // console.log("_define :>> ", _define);
  155. _load.colorder = userStyle.colorder;
  156. userStyle.table && (_load.table = userStyle.table);
  157. if (!userStyle?.basicinfo?.group && item?.basicinfo?.group) {
  158. delete _load.basicinfo.group;
  159. }
  160. // if (!userStyle?.basicinfo?.ishidden && item?.basicinfo?.ishidden) {
  161. // delete _load.basicinfo.ishidden;
  162. // }
  163. // console.log("loadUserStyle _load :>> ", _load);
  164. // if (item.field == "status") {
  165. // console.log("loadUserStyle _load :>> ", _load);
  166. // }
  167. return _load;
  168. };
  169. /**
  170. * 默认值:补充具有指定特征的属性
  171. * @param item column, 列
  172. * @param layoutAttrDefine 默认值对象
  173. * @returns 组合默认特征后的默认值对象
  174. */
  175. const getDefineAttr = (item: any, defineColumn: any) => {
  176. let _define: any = {};
  177. if (item.hasOwnProperty("datatype")) {
  178. _define = cloneDeep(defineColumnStyle[item.datatype]);
  179. } else {
  180. let matched = false;
  181. for (const key in defineColumnStyle) {
  182. if (key.indexOf("$") > -1 || key.indexOf("^") > -1) {
  183. // 正则表达式
  184. let reg = new RegExp(key);
  185. if (reg.test(item.field)) {
  186. _define = cloneDeep(defineColumnStyle[key]);
  187. matched = true;
  188. // if (key.indexOf("date") > -1) {
  189. // console.log("getDefineAttr item :>> ", item);
  190. // if (item.title.indexOf("日期") > -1) {
  191. // _define.format = "yyyy-MM-dd";
  192. // } else if (item.title.indexOf("时间") > -1) {
  193. // _define.format = "yyyy-MM-dd HH:mm";
  194. // _define.width = 160;
  195. // }
  196. // }
  197. break;
  198. }
  199. }
  200. }
  201. if (!matched && !item.datatype && !item.enum) {
  202. _define.align = "left";
  203. }
  204. }
  205. // 弱→强 : 组件默认 + 特征默认 + 原始自定义
  206. // return { ...defineColumn, ..._define, ...item };
  207. return defaultsDeep(item, _define, defineColumn);
  208. };
  209. const _tableJson = tableJson as any;
  210. /**
  211. * @description 扁平化 初始化 columns
  212. * @param argColumns
  213. * @param dwMap
  214. * @param flatArr
  215. * @returns
  216. */
  217. const flatColumnsFunc = (argColumns: ColumnProps[], dwMap: Map<KeyType, any> = new Map(), flatArr: ColumnProps[] = []) => {
  218. argColumns.forEach(async (col: any) => {
  219. if (col._children?.length) flatArr.push(...flatColumnsFunc(col._children, dwMap));
  220. if (dwMap.size) {
  221. // 读取个性设置属性
  222. if (!dwMap.has(col.field)) {
  223. dwMap.set(col.field, {});
  224. }
  225. let userStyle = dwMap.get(col.field) ?? undefined;
  226. if (userStyle && !userStyle?.limited) {
  227. col = loadUserStyle(col, userStyle);
  228. // console.log("col _define :>> ", col, userStyle);
  229. flatColumnsCallBack && (col = flatColumnsCallBack(col));
  230. let _define = getDefineAttr(col, layoutAttrDefine);
  231. flatArr.push(_define);
  232. }
  233. /**补充:后台数据,没有输出的数据列 */
  234. if (!userStyle) {
  235. if (TABLE_TYPE_FILTER.includes(col.type) || col.field == "pid") {
  236. flatArr.push(col);
  237. }
  238. }
  239. } else {
  240. /**当个性布局为空时,读取默认 */
  241. let _define = getDefineAttr(col, layoutAttrDefine);
  242. let _limited = isFunction(_define?.limited) ? _define.limited() : _define?.limited ?? false;
  243. // console.log(
  244. // "当个性布局为空时,读取默认 isFunction(userStyle?.limited) :>>",
  245. // col.field,
  246. // _define,
  247. // isFunction(_define?.limited),
  248. // _limited
  249. // );
  250. if (!_limited) {
  251. // 给每一项 column 添加默认属性
  252. // setDefineVal(col, _define);
  253. defaultsDeep(col, _define);
  254. flatColumnsCallBack && (col = flatColumnsCallBack(col));
  255. flatArr.push(col);
  256. }
  257. }
  258. if (TABLE_TYPE_FILTER.includes(col.type)) {
  259. } else if (col.field == "pid") {
  260. col.title = t(`table.${col.field}`);
  261. } else if (col.field == "operation") {
  262. col.title = t(`table.${col.field}`);
  263. } else {
  264. if (!["status", "woodcode", "pcode"].includes(col.field)) {
  265. if (col.table) {
  266. Object.keys(_tableJson).includes(col.table) &&
  267. Object.keys(_tableJson[col.table]).includes(col.field) &&
  268. (col.title = t(`table.${col.table}.${col.field}`));
  269. } else {
  270. Object.keys(tableJson).includes(col.field) && (col.title = t(`table.${col.field}`));
  271. }
  272. }
  273. }
  274. // col.title.indexOf("table") > -1 && (col.title = undefined);
  275. });
  276. console.log("dwMap :>> ", dwMap, flatArr);
  277. /**补充前端没有,但后台有返回的数据列 */
  278. dwMap.forEach((item, key) => {
  279. // console.log("补充前端没有,但后台有返回的数据列 item :>> ", item);
  280. if (item.limited) return;
  281. let index = flatArr.findIndex(item => item.field === key);
  282. if (index == -1) {
  283. let _define = getDefineAttr(item, layoutAttrDefine);
  284. let data = loadUserStyle({}, _define);
  285. flatColumnsCallBack && (data = flatColumnsCallBack(data));
  286. flatArr.push(data);
  287. }
  288. });
  289. // 读取个性设置后,排序,
  290. if (dwMap.size) {
  291. flatArr.sort((a, b) => {
  292. return a.colorder! - b.colorder!;
  293. });
  294. }
  295. console.log("flatArr", flatArr);
  296. return flatArr.filter(item => !item._children?.length);
  297. };
  298. /**
  299. * 补充数据列中,具有枚举的数据列,自动补充render
  300. * @param columns 数据列
  301. * @returns
  302. */
  303. const loadRenderAttr = (argColumns: any) => {
  304. argColumns.forEach((item: any) => {
  305. if (!item.render) {
  306. /** 复选框 */
  307. if (item?.datatype == "checkbox") {
  308. item.render = (scope: any) => {
  309. let _keys = Object.keys(scope);
  310. let _data = _keys.includes("row") ? scope.row : _keys.includes("searchParam") ? scope.searchParam : scope;
  311. let _field = scope?.column.field ?? "";
  312. // switch (Number(_data[_field])) {
  313. // case 1:
  314. // return <el-checkbox class={"el-checkbox__disabled-checked"} checked={true} disabled={true} label="111" />;
  315. // default: // 0
  316. // let bool = false;
  317. // return <el-checkbox v-model={bool} disabled={true} label="44" />;
  318. // }
  319. return (
  320. <>
  321. <el-checkbox
  322. v-model={_data[_field]}
  323. class={{ "el-checkbox__disabled-checked": Number(_data[_field]) }}
  324. true-value={1}
  325. false-value={0}
  326. disabled={!editable}
  327. />
  328. </>
  329. );
  330. };
  331. } else if (item.enum && item.enum.length) {
  332. /**普通:enum,数值转文本 */
  333. item.render = (scope: any) => {
  334. let _keys = Object.keys(scope);
  335. let _data: any = _keys.includes("row") ? scope.row : _keys.includes("searchParam") ? scope.searchParam : scope;
  336. let _field = scope?.column.field ?? "";
  337. let _item: any = {};
  338. scope.enum && (_item = scope.enum.find((item: any) => item.value == Number(_data[_field])));
  339. if (dwtype == "detail") {
  340. return <el-input value={_item?.label} disabled={true} {...item.basicinfo.props} />;
  341. } else {
  342. return _item?.label ?? "";
  343. }
  344. };
  345. item.exportMethod = ({ cellValue, row, column }) => {
  346. let _val = cellValue;
  347. let _item: any = {};
  348. item.enum && (_item = item.enum.find((item: any) => item.value == Number(row[column.field])));
  349. return _item?.label ?? _val;
  350. };
  351. } else if (item?.datatype == "html") {
  352. item.render = (scope: any) => {
  353. let _keys = Object.keys(scope);
  354. let _data = _keys.includes("row") ? scope.row : _keys.includes("searchParam") ? scope.searchParam : scope;
  355. let _field = scope?.column.field ?? "";
  356. let html_data = _data[_field];
  357. if (html_data) {
  358. // 空格替换为&nbsp;
  359. html_data = html_data.replace(/ /g, "&nbsp;");
  360. }
  361. return <div v-html={html_data} />;
  362. };
  363. }
  364. }
  365. if (!item.editRender && !item.editColRender && item.tabsequence) {
  366. console.log("item.enum :>> ", item.field, item.enum);
  367. if (item.enum) {
  368. item.editRender = { name: "$select", options: item.enum };
  369. } else if (item.datatype == "checkbox") {
  370. item.editRender = {};
  371. item.editColRender = (scope: any) => {
  372. const { column, row, status } = scope;
  373. let _keys = Object.keys(scope);
  374. let _data: any = _keys.includes("row") ? scope.row : scope;
  375. let _field = scope?.column.field ?? "";
  376. // if (Number(_data[_field]) == 0) {
  377. // row[_field] = 0;
  378. // }
  379. return (
  380. <>
  381. <el-checkbox v-model={_data[_field]} true-value={1} false-value={0} class="vxe-edit-col-middle"></el-checkbox>
  382. </>
  383. );
  384. };
  385. } else if (item.datatype == "date") {
  386. item.editRender = { name: "$input", props: { type: "date" } };
  387. } else if (item.datatype == "datetime") {
  388. item.editRender = { name: "$input", props: { type: "datetime" } };
  389. } else if (item.datatype == "integer") {
  390. item.editRender = { name: "$input", props: { type: "number" } };
  391. } else if (item.datatype == "number") {
  392. const { digits } = parseFormatType(item.format);
  393. item.editRender = {
  394. name: "$input",
  395. props: { type: "float", controls: false, digits }
  396. };
  397. } else if (item.datatype == "input") {
  398. item.editRender = { name: "$input", props: {} };
  399. }
  400. }
  401. if (item.hasOwnProperty("editRender")) {
  402. item.editRender.autoFocus = true;
  403. item.editRender.autoSelect = true;
  404. }
  405. });
  406. return argColumns;
  407. };
  408. /**
  409. * 获取对象属性,或属性路径
  410. * @param {Object} define 对象
  411. * @param {string} pre 前缀
  412. * @returns {Array} 默认值字段集合
  413. */
  414. const getKeys = (define: any, pre = "") => {
  415. let keys: string[] = [];
  416. for (const key in define) {
  417. if (Object.prototype.toString.call(define[key]) === `[object Object]`) {
  418. let _pre = pre ? pre + "." : "";
  419. keys = keys.concat(getKeys(define[key], _pre + key));
  420. } else {
  421. let _keys: string[] = [key];
  422. pre && _keys.unshift(pre);
  423. let strKeys = _keys.join(".");
  424. keys.push(strKeys);
  425. }
  426. }
  427. return keys;
  428. };
  429. /**
  430. * @description 去除默认值,保存个性化数据
  431. * @param column 需要保存的数据列原型
  432. * @param params 主表其他参数 {basicinfo: ..., tableprop: {scrollY: ..., search: ..., ... }}
  433. * @returns {Object} 主表保存数据模型 {tableprop:..., columns: ...}
  434. */
  435. const columnStreamlineFunc = (column: any, params?: any, oColumns?: any) => {
  436. // 入参的columns被污染???
  437. let _oriColumns = oColumns ?? cloneDeep(columns);
  438. // let _oriColumns = cloneDeep(columns);
  439. console.log("column :>> ", column);
  440. console.log("oriColumns :>> ", JSON.stringify(_oriColumns));
  441. // 默认值字段集合
  442. let defineAttr = getKeys(layoutAttrDefine);
  443. defineAttr.unshift("field");
  444. // 取默认值 + 自定义业务columns = 动态默认值属性
  445. let oriDedine = _oriColumns
  446. .filter((item: any) => item.field)
  447. .map((item: any) => {
  448. item.basicinfo && delete item.basicinfo.visible;
  449. item.basicinfo && delete item.basicinfo.ishidden;
  450. let _define = getDefineAttr(item, layoutAttrDefine);
  451. return pick(defaultsDeep(item, _define), defineAttr);
  452. });
  453. console.log("streamlineFunc column :>> ", column);
  454. console.log("streamlineFunc props.layoutAttr :>> ", layoutAttr);
  455. console.log("streamlineFunc oriDedine :>> ", oriDedine);
  456. let _columns = column.filter((item: any) => item.field);
  457. // let saveCol: any = {
  458. // columns: streamlineFunc(_columns, layoutAttr, oriDedine)
  459. // };
  460. let saveCol: any = {};
  461. isObject(params) && (saveCol.tableprop = params);
  462. saveCol.columns = streamlineFunc(_columns, layoutAttr, oriDedine);
  463. console.log("columnStreamlineFunc settingConfirm saveCol :>> ", saveCol);
  464. return saveCol;
  465. };
  466. /**
  467. * @description 获取最新的表格布局
  468. * @param {boolean} keepBasicinfo 是否保留线上basicinfo部分
  469. * @param {boolean} online 是否获取线上版本
  470. * @param {number} empid 员工id
  471. * @param {Map} enumMap 各属性enum集合,还原记录
  472. * @returns {Array} Columns
  473. */
  474. const getOriColumns = async (
  475. keepBasicinfo: boolean,
  476. online: boolean = false,
  477. empid?: number,
  478. enumMap?: any,
  479. oColumns?: any
  480. ) => {
  481. if (!dwname) return [];
  482. // 入参的columns被污染???
  483. let _curCol = oColumns ?? columns;
  484. // console.log("layout _curCol :>> ", JSON.stringify(_curCol));
  485. // console.log("layout oColumns :>> ", JSON.stringify(oColumns));
  486. // console.log("layout columns :>> ", JSON.stringify(columns));
  487. console.log("keepBasicinfo, online, empid :>> ", keepBasicinfo, online, empid);
  488. let layout: any;
  489. if (online) {
  490. layout = await layoutStore.getDwLayout_online(empid!, dwname, 1);
  491. } else {
  492. // 获取缓存中最新的表格布局
  493. layout = await layoutStore.getDwLayout(dwname);
  494. }
  495. let oriColumns = [];
  496. console.log("getOriColumns layout :>> ", JSON.stringify(layout));
  497. if (layout?.hasOwnProperty("itemvalue") && layout.itemvalue) {
  498. typeof layout.itemvalue == "string" && (layout.itemvalue = JSON.parse(layout.itemvalue.replace(/'/g, '"')));
  499. // 兼容部分结构直接记录行数据
  500. if (layout.itemvalue.hasOwnProperty("columns") && layout.itemvalue.columns) {
  501. oriColumns = layout.itemvalue.columns;
  502. } else {
  503. oriColumns = layout.itemvalue;
  504. }
  505. } else {
  506. return {
  507. columns: []
  508. };
  509. }
  510. console.log("layout oriColumns :>> ", JSON.stringify(oriColumns));
  511. let prototype: any = [];
  512. if (keepBasicinfo) {
  513. // 读取默认属性
  514. loadDwLayoutFunc(_curCol, false);
  515. console.log("keepBasicinfo dwFieldMap :>> ", keepBasicinfo, dwFieldMap);
  516. // 仅仅读取详情页的basicinfo部分,其他读取原有
  517. let loadMaps = new Map();
  518. for (const sitm of oriColumns) {
  519. let oriMap = dwFieldMap.get(sitm.field);
  520. console.log("sitm :>> ", oriMap, sitm);
  521. if (oriMap) {
  522. oriMap.basicinfo = defaultsDeep(sitm.basicinfo, oriMap.basicinfo);
  523. } else {
  524. oriMap = sitm;
  525. }
  526. if (enumMap.has(sitm.field)) {
  527. oriMap.enum = enumMap.get(sitm.field);
  528. }
  529. loadMaps.set(sitm.field, oriMap);
  530. }
  531. console.log("loadMaps :>> ", loadMaps);
  532. prototype = flatColumnsFunc(oriColumns, loadMaps);
  533. } else {
  534. // 读取默认属性
  535. loadDwLayoutFunc(_curCol, false);
  536. prototype = flatColumnsFunc(oriColumns, dwFieldMap);
  537. }
  538. /**备用(重置):原始数据列 */
  539. let _ori = prototype.filter((item: any) => !TABLE_TYPE_FILTER.includes(item.type!) && item.field !== "operation");
  540. console.log("getOriColumns oriColumns _ori:>> ", _ori);
  541. // return _ori;
  542. return {
  543. ...layout.itemvalue,
  544. columns: _ori
  545. };
  546. };
  547. return {
  548. ...toRefs(state),
  549. dwFieldMap,
  550. loadLayoutFunc,
  551. loadDwLayoutFunc,
  552. flatColumnsFunc,
  553. getDefineAttr,
  554. loadRenderAttr,
  555. columnStreamlineFunc,
  556. getOriColumns
  557. };
  558. };