use-method.ts 7.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284
  1. import { ref } from 'vue';
  2. import {
  3. sceneListType,
  4. getListWorkshop,
  5. workspaceAddDatas,
  6. labelModuleListType,
  7. } from '@/api/scene/sceneOperate';
  8. import { workShopTempleteType } from '@/api/scene/secene-templet';
  9. export const colomns = [
  10. { label: '场景名称', prop: 'name', width: 300 },
  11. { label: '场景标签', prop: 'labelName', width: 300 },
  12. { label: '代码', prop: 'code' },
  13. ];
  14. interface DataSourceUser
  15. extends sceneListType<
  16. getListWorkshop<workspaceAddDatas, workShopTempleteType>,
  17. labelModuleListType
  18. > {
  19. parent?: sceneListType<
  20. getListWorkshop<workspaceAddDatas, workShopTempleteType>,
  21. labelModuleListType
  22. > | null;
  23. }
  24. export const dataSourceWithParent = (d: DataSourceUser[], parent: DataSourceUser | null) => {
  25. d.forEach((item, _index) => {
  26. item.parent = parent;
  27. if (item.children && item.children?.length > 0) {
  28. dataSourceWithParent(item.children, item);
  29. }
  30. });
  31. return d;
  32. };
  33. export function removeParent(data) {
  34. return data.map((item) => {
  35. // 删除 tag 属性
  36. delete item.parent;
  37. // 递归处理子项
  38. if (item.children && item.children.length > 0) {
  39. item.children = removeParent(item.children);
  40. }
  41. return item;
  42. });
  43. }
  44. //找到各个层级
  45. export function findIndexByItem(data, targetItem, path = []) {
  46. for (let i = 0; i < data.length; i++) {
  47. const currentPath = path.concat(i);
  48. if (data[i].id === targetItem.id && data[i].name === targetItem.name) {
  49. return currentPath;
  50. }
  51. if (data[i].children && data[i].children.length > 0) {
  52. const childResult = findIndexByItem(data[i].children, targetItem, currentPath);
  53. if (childResult.length > 0) {
  54. return childResult;
  55. }
  56. }
  57. }
  58. return [];
  59. }
  60. //用于重新修改serial
  61. export const updateSerials = (data) => {
  62. for (let i = 0; i < data.length; i++) {
  63. data[i].serial = i;
  64. // if (currentItem.id === targetId) {
  65. // if (!currentItem.children) {
  66. // currentItem.children = [];
  67. // }
  68. // currentItem.children.push(newAdd);
  69. // return true; // 表示已经找到并修改
  70. // }
  71. // 如果有子项,递归查找
  72. if (data[i].children && data[i].children.length > 0) {
  73. updateSerials(data[i].children);
  74. // if (found) {
  75. // return true; // 如果在子项中找到目标项,停止继续查找
  76. // }
  77. }
  78. }
  79. return data;
  80. // return false; // 表示未找到目标项
  81. };
  82. //用于新增数据
  83. export const updateData = (data, targetId, newAdd) => {
  84. for (let i = 0; i < data.length; i++) {
  85. const currentItem = data[i];
  86. if (currentItem.id === targetId) {
  87. if (!currentItem.children) {
  88. currentItem.children = [];
  89. }
  90. currentItem.children.push(newAdd);
  91. return true; // 表示已经找到并修改
  92. }
  93. // 如果有子项,递归查找
  94. if (currentItem.children && currentItem.children.length > 0) {
  95. const found = updateData(currentItem.children, targetId, newAdd);
  96. if (found) {
  97. return true; // 如果在子项中找到目标项,停止继续查找
  98. }
  99. }
  100. }
  101. return false; // 表示未找到目标项
  102. };
  103. //判断该条数据的层级
  104. export const findItemLevel = (data, targetId, targetName, currentLevel = 0) => {
  105. for (let i = 0; i < data.length; i++) {
  106. const item = data[i];
  107. if (item.id === targetId && item.name === targetName) {
  108. return currentLevel;
  109. }
  110. if (item.children && item.children.length > 0) {
  111. const childLevel = findItemLevel(item.children, targetId, targetName, currentLevel + 1);
  112. if (childLevel !== -1) {
  113. return childLevel;
  114. }
  115. }
  116. }
  117. return -1;
  118. };
  119. //查询该数据在各个层级的索引
  120. export const findItemEachLevel = (
  121. data,
  122. targetId,
  123. targetName,
  124. currentLevel = 0,
  125. level1 = -1,
  126. level2 = -1,
  127. level3 = -1,
  128. ) => {
  129. // const level1 = ref<number>(-1);
  130. // const level2 = ref<number>(-1);
  131. // const level3 = ref<number>(-1);
  132. for (let i = 0; i < data.length; i++) {
  133. const item = data[i];
  134. if (item.id === targetId && item.name === targetName) {
  135. // return currentLevel;
  136. if (currentLevel === 0) {
  137. level1 = i;
  138. return { level1: level1, level2: level2, level3: level3 };
  139. } else if (currentLevel === 1) {
  140. level2 = i;
  141. return { level1: level1, level2: level2, level3: level3 };
  142. } else if (currentLevel === 2) {
  143. level3 = i;
  144. return { level1: level1, level2: level2, level3: level3 };
  145. }
  146. }
  147. if (item.children && item.children.length > 0) {
  148. const childLevel = findItemLevel(item.children, targetId, targetName, currentLevel + 1, i);
  149. if (childLevel !== -1) {
  150. return childLevel;
  151. }
  152. }
  153. }
  154. return { level1: level1.value, level2: level2.value, level3: level3.value };
  155. };
  156. export function findIndexById(data, targetId, targetName, level = 1) {
  157. for (let i = 0; i < data.length; i++) {
  158. if (data[i].id === targetId && data[i].name === targetName) {
  159. return { level1: level, level2: -1, level3: -1 };
  160. }
  161. if (data[i].children && data[i].children.length > 0) {
  162. const childResult = findIndexById(data[i].children, targetId, targetName, level + 1);
  163. if (childResult.level1 !== -1) {
  164. if (childResult.level2 === -1 && childResult.level3 === -1) {
  165. return { level1: level, level2: childResult.level1, level3: -1 };
  166. }
  167. return childResult;
  168. }
  169. }
  170. }
  171. return { level1: -1, level2: -1, level3: -1 };
  172. }
  173. //删除行
  174. export const deleteTableRow = (dataSource, targetId) => {
  175. const deleteRecursive = (data) => {
  176. for (let i = 0; i < data.length; i++) {
  177. const currentItem = data[i];
  178. if (currentItem.id === targetId) {
  179. // 删除当前项
  180. data.splice(i, 1);
  181. return true;
  182. }
  183. // 如果有子项,递归查找
  184. if (currentItem.children && currentItem.children.length > 0) {
  185. const found = deleteRecursive(currentItem.children);
  186. if (found) {
  187. return true; // 如果在子项中找到目标项,停止继续查找
  188. }
  189. }
  190. }
  191. return false; // 表示未找到目标项
  192. };
  193. // 从顶层开始递归删除
  194. deleteRecursive(dataSource);
  195. };
  196. //行的编辑提交功能
  197. export const editTableRow = (
  198. dataSource,
  199. targetId,
  200. level,
  201. name,
  202. newName,
  203. newCode,
  204. newStatus,
  205. newLeader = '',
  206. newTemplete = '',
  207. newTag = 0,
  208. newToptag = [] as unknown as string[],
  209. ) => {
  210. const editTRecursive = (data) => {
  211. for (let i = 0; i < data.length; i++) {
  212. const currentItem = data[i];
  213. if (currentItem.id === targetId) {
  214. // 修改
  215. currentItem.name = newName;
  216. currentItem.code = newCode;
  217. currentItem.status = newStatus;
  218. if (level === 0) {
  219. currentItem.Toptag = newToptag;
  220. } else if (level === 1) {
  221. currentItem.companyLabelId = newTag;
  222. currentItem.templete = newTemplete;
  223. } else if (level === 2) {
  224. currentItem.leader = newLeader;
  225. }
  226. return true;
  227. }
  228. // 如果有子项,递归查找
  229. if (currentItem.children && currentItem.children.length > 0) {
  230. const found = editTRecursive(currentItem.children);
  231. if (found) {
  232. return true; // 如果在子项中找到目标项,停止继续查找
  233. }
  234. }
  235. }
  236. return false; // 表示未找到目标项
  237. };
  238. editTRecursive(dataSource);
  239. };
  240. export enum ENABLED {
  241. FALSE = 1,
  242. TRUE = 0,
  243. }