Explorar el Código

fix: 修改场景数据类型为公司车间工位数据类型

wyf hace 1 año
padre
commit
755ddf7a8d

+ 83 - 29
src/api/scene/scene.ts

@@ -121,10 +121,13 @@ export const delCompanyLayout = (params: number) => {
 
 /**
  * @description: 添加公司
+ * @modifications
+ *  - 2025-01-13: Yunfeng
+ *  - V4-平台权限重构
  */
 export const addCompany = (data: SceneTypes.ComAddDatas): Promise<number> => {
   return http.request({
-    url: '/scene/saveCompany',
+    url: '/admin/workshop/saveCompany',
     method: 'post',
     data,
   });
@@ -132,10 +135,13 @@ export const addCompany = (data: SceneTypes.ComAddDatas): Promise<number> => {
 
 /**
  * @description: 编辑公司
+ * @modifications
+ *  - 2025-01-13: Yunfeng
+ *  - V4-平台权限重构
  */
 export const editCompany = (data: SceneTypes.ComAddDatas): Promise<number> => {
   return http.request({
-    url: '/scene/updateCompany',
+    url: '/admin/workshop/updateCompany',
     method: 'put',
     data,
   });
@@ -143,20 +149,26 @@ export const editCompany = (data: SceneTypes.ComAddDatas): Promise<number> => {
 
 /**
  * @description: 删除公司
+ * @modifications
+ *  - 2025-01-13: Yunfeng
+ *  - V4-平台权限重构
  */
 export const delCompany = (companyId: number) => {
   return http.request({
-    url: `/scene/deleteCompany?companyId=${companyId}`,
+    url: `/admin/workshop/deleteCompany?companyId=${companyId}`,
     method: 'DELETE',
   });
 };
 
 /**
  * @description: 添加车间
+ * @modifications
+ *  - 2025-01-13: Yunfeng
+ *  - V4-平台权限重构
  */
 export const addWorkshop = (data: SceneTypes.WorkshopAddDatas): Promise<number> => {
   return http.request({
-    url: '/scene/saveWorkshop',
+    url: '/admin/workshop/saveWorkshop',
     method: 'post',
     data,
   });
@@ -164,10 +176,13 @@ export const addWorkshop = (data: SceneTypes.WorkshopAddDatas): Promise<number>
 
 /**
  * @description: 编辑车间
+ * @modifications
+ *  - 2025-01-13: Yunfeng
+ *  - V4-平台权限重构
  */
 export const editWorkshop = (data: SceneTypes.WorkshopAddDatas): Promise<number> => {
   return http.request({
-    url: '/scene/updateWorkshop',
+    url: '/admin/workshop/updateWorkshop',
     method: 'put',
     data,
   });
@@ -175,20 +190,26 @@ export const editWorkshop = (data: SceneTypes.WorkshopAddDatas): Promise<number>
 
 /**
  * @description: 删除车间
+ * @modifications
+ *  - 2025-01-13: Yunfeng
+ *  - V4-平台权限重构
  */
 export const delWorkshop = (workshopId: number) => {
   return http.request({
-    url: `/scene/deleteWorkshop?workshopId=${workshopId}`,
+    url: `/admin/workshop/deleteWorkshop?workshopId=${workshopId}`,
     method: 'DELETE',
   });
 };
 
 /**
  * @description: 添加工位
+ * @modifications
+ *  - 2025-01-13: Yunfeng
+ *  - V4-平台权限重构
  */
 export const addWorkspace = (data: SceneTypes.WorkspaceAddDatas): Promise<number> => {
   return http.request({
-    url: '/scene/saveWorkspace',
+    url: '/admin/workshop/saveWorkspace',
     method: 'post',
     data,
   });
@@ -196,10 +217,13 @@ export const addWorkspace = (data: SceneTypes.WorkspaceAddDatas): Promise<number
 
 /**
  * @description: 编辑工位
+ * @modifications
+ *  - 2025-01-13: Yunfeng
+ *  - V4-平台权限重构
  */
 export const editWorkspace = (data: SceneTypes.WorkspaceAddDatas): Promise<number> => {
   return http.request({
-    url: '/scene/updateWorkspace',
+    url: '/admin/workshop/updateWorkspace',
     method: 'put',
     data,
   });
@@ -207,47 +231,77 @@ export const editWorkspace = (data: SceneTypes.WorkspaceAddDatas): Promise<numbe
 
 /**
  * @description: 删除工位
+ * @modifications
+ *  - 2025-01-13: Yunfeng
+ *  - V4-平台权限重构
  */
 export const delWorkspace = (workspaceId: number) => {
   return http.request({
-    url: `/scene/deleteWorkspace?workspaceId=${workspaceId}`,
+    url: `/admin/workshop/deleteWorkspace?workspaceId=${workspaceId}`,
     method: 'DELETE',
   });
 };
 
-/** ??? */
-export const getSceneList = (
-  skipPerm: boolean = true,
-): Promise<
-  SceneTypes.SceneListType<
-    SceneTypes.GetListWorkshop<SceneTypes.WorkspaceAddDatas, SceneTypes.WorkShopTempleteType>,
-    SceneTypes.LabelModuleListType
-  >[]
-> => {
+/** ??? Deprecated in V4 */
+// export const getSceneList = (
+//   skipPerm: boolean = true,
+// ): Promise<
+//   SceneTypes.SceneListType<
+//     SceneTypes.GetListWorkshop<SceneTypes.WorkspaceAddDatas, SceneTypes.WorkShopTempleteType>,
+//     SceneTypes.LabelModuleListType
+//   >[]
+// > => {
+//   return http.request({
+//     url: `/scene/getList?skipPerm=${skipPerm}`,
+//     method: 'get',
+//   });
+// };
+
+/**
+ * @description 获取场景管理-车间管理表格的所有数据
+ * @version V4
+ * @author Yunfeng
+ * @date 2025-1-10
+ */
+export const getComShopSpaceTree = (): Promise<SceneTypes.ComTreeType[]> => {
   return http.request({
-    url: `/scene/getList?skipPerm=${skipPerm}`,
+    url: '/admin/workshop/queryCompanyShopSpaceList',
     method: 'get',
   });
 };
 
-//排序列表
-export const sortSceneList = (
-  data: SceneTypes.SceneListType<
-    SceneTypes.GetListWorkshop<SceneTypes.WorkspaceAddDatas, SceneTypes.WorkShopTempleteType>,
-    SceneTypes.LabelModuleListType
-  >[],
-) => {
+/**
+ * @description 场景管理-车间管理表格的更新排序
+ * @version V4
+ * @author Yunfeng
+ * @date 2025-1-10
+ */
+export const updateComShopSpaceTreeSort = (data: SceneTypes.ComTreeType) => {
   return http.request({
-    url: '/scene/updateSort',
-    method: 'put',
+    url: '/admin/workshop/updateWorkshopSort',
+    method: 'post',
     data,
   });
 };
 
+//排序列表 Deprecated in V4
+// export const sortSceneList = (
+//   data: SceneTypes.SceneListType<
+//     SceneTypes.GetListWorkshop<SceneTypes.WorkspaceAddDatas, SceneTypes.WorkShopTempleteType>,
+//     SceneTypes.LabelModuleListType
+//   >[],
+// ) => {
+//   return http.request({
+//     url: '/scene/updateSort',
+//     method: 'put',
+//     data,
+//   });
+// };
+
 /** ??? */
 export const getCompanyList = (): Promise<SceneTypes.CompanyType[]> => {
   return http.request({
-    url: '/relationship/getEnterpriseList',
+    url: '/admin/relationship/getEnterpriseList',
     method: 'get',
   });
 };

+ 15 - 0
src/types/scene/constant.ts

@@ -19,3 +19,18 @@ export enum ViewType {
   safety = 1,
   minMap = 2,
 }
+
+export const OPTIONS = [
+  {
+    value: 'industry',
+    label: '工业企业',
+  },
+  {
+    value: 'gas',
+    label: '燃气企业',
+  },
+  {
+    value: 'other',
+    label: '其他企业',
+  },
+];

+ 74 - 1
src/types/scene/type.ts

@@ -222,7 +222,6 @@ export interface WorkspaceAddDatas {
   // tag?: string; //场景标签
 }
 
-//获取列表
 // 传入参数类型
 export interface SceneListType<T, S> {
   code?: string;
@@ -363,3 +362,77 @@ export interface WorkShopTempleteType {
   isDeleted?: number;
   updatedAt?: string;
 }
+
+/** ---------------------------------------------------------------------------------
+ * V4版 接口定义修改说明
+ * date: 2025-01-09
+ * 修改了原场景相关的接口定义
+ * 获取公司数据的结构整合为一个树
+ * 公司-车间-工位单独的结构用于增改查的接口参数
+ * 原传入参数类型不变
+ * 区分公司-车间-工位类型的原因为目前树节点结构趋同但不保证以后相同
+------------------------------------------------------------------------------------ */
+
+/** 带指向父节点的公司-车间-工位树结构 */
+export interface ComTreeType extends UseComType<UseWorkshopType<UseWorkspaceType>> {}
+
+/** 公司信息类型,注释的属性会返回但不用,下同 */
+export interface UseComType<T> {
+  uniqueCode?: string;
+  // createdAt: string;
+  // createdBy: number;
+  id: number;
+  // isDeleted: number;
+  isDisabled: number;
+  latitude?: number;
+  longitude?: number;
+  name: string;
+  orderNum: number;
+  parentId: number;
+  regionCode: string;
+  remark: string;
+  tenantId: number;
+  thumbnail: string;
+  // updatedAt:string;
+  // updatedBy:number;
+  children?: T[];
+}
+
+/** 车间信息类型 */
+export interface UseWorkshopType<T> {
+  uniqueCode?: string;
+  companyId: number;
+  // createdAt: string;
+  // createdBy: number;
+  id: number;
+  // isDeleted: number;
+  isDisabled: number;
+  name: string;
+  orderNum: number;
+  remark: string;
+  tenantId: number;
+  // updatedAt: string;
+  // updatedBy: number;
+  children?: T[];
+}
+
+/** 工位信息类型 */
+export interface UseWorkspaceType {
+  uniqueCode?: string;
+  workshopId: number;
+  companyId: number;
+  // createdAt: string;
+  // createdBy: number;
+  id: number;
+  isDeleted: number;
+  isDisabled: number;
+  name: string;
+  orderNum: number;
+  principalId: number;
+  principalName: string;
+  remark: string;
+  tenantId: number;
+  // updatedAt: string;
+  // updatedBy: number;
+}
+/** --------------------------------------------------------------------------------- */

+ 8 - 8
src/views/message/systemNotifications/components/WorkShopTree.vue

@@ -37,7 +37,7 @@
             color: rgba(0, 0, 0, 0.45);
             line-height: 22px;
           "
-          >/&nbsp;{{ total }})</span
+          >/&nbsp;{{ total }}</span
         >
       </div>
       <div class="selected">
@@ -64,20 +64,20 @@
   import { ElTree } from 'element-plus';
   import { countLeafNodes } from '@/views/message/persongroup/utils/index';
   import { getList } from '@/api/message/system-notifications';
-  import useScene from '@/views/system-config/scene-manage/hook/use-scene';
+  import useComTree from '@/views/system-config/scene-manage/store/use-com-tree';
   import { storeToRefs } from 'pinia';
   import { cloneDeep } from 'lodash-es';
   import { TreeKey } from 'element-plus/es/components/tree/src/tree.type';
-  const sceneInfos = useScene();
-  const { tableData } = storeToRefs(sceneInfos);
+  const comTree = useComTree();
+  const { comTreeData } = storeToRefs(comTree);
   const loading = ref(true);
   const queryStr = ref<string>('');
   const defaultProps = { label: 'name' };
   const nodeData = computed(() => {
     const newList: any[] = [];
-    if (tableData.value && tableData.value.length) {
-      for (let i = 0; i < tableData.value.length; i++) {
-        const data = tableData.value[i];
+    if (comTreeData.value && comTreeData.value.length) {
+      for (let i = 0; i < comTreeData.value.length; i++) {
+        const data = comTreeData.value[i];
         if (data.children && data.children.length) {
           const treeItem = {
             id: data.id,
@@ -175,7 +175,7 @@
     }
     selected.value = selectedPeople.value.length;
     getList().then((res) => {
-      tableData.value = res;
+      comTreeData.value = res;
       total.value = countLeafNodes(nodeData.value);
       const selectedIds: TreeKey[] = selectedPeople.value.map((item) => item.code);
       treeRef.value!.setCheckedKeys(selectedIds);

+ 281 - 251
src/views/system-config/scene-manage/SceneManage.vue

@@ -1,13 +1,13 @@
 <template>
   <page-wrapper>
     <el-card :bordered="false" class="proCard">
+      <!-- row-key 属性,用于设置树形表格的行键,默认为id,这里设置为code,保证唯一性 不能为空字符串 -->
       <BasicTable
         :columns="colomns"
-        :data-source="showTableData"
-        :row-key="(row) => row.code"
+        :data-source="comTreeData"
+        :row-key="(row) => row.uniqueCode"
         :action-column="actionColumn"
         :expend-row="expendRowKeys"
-        :pagination="{ total: total, pageSize: size, hideOnSinglePage: false }"
         :tableSetting="{
           width: 200,
           size: false,
@@ -19,8 +19,6 @@
         ref="tableRef"
         @checked-row-change="onCheckedRow"
         @order-change="orderByItem"
-        @page-num-change="handlePageNumChange"
-        @page-size-change="handlePageSizeChange"
       >
         <template #tableTitle>
           <div>
@@ -30,14 +28,14 @@
                   <Plus />
                 </el-icon>
               </template>
-              添加
+              添加公司
             </el-button>
           </div>
         </template>
         <template #empty>
           <div class="empty-content flex flex-col items-center">
             <img src="@/assets/icons/no-content.png" class="empty-img" />
-            <span class="empty-text">目前无内容,请先添加场景</span>
+            <span class="empty-text">目前无内容,请先添加公司</span>
           </div>
         </template>
       </BasicTable>
@@ -52,7 +50,6 @@
         :sceneList="sceneList"
         :templateList="templateList"
         :detail="detail"
-        :allCodes="allCodes"
         @on-ok="subCompany"
         @on-close="handleUpdateTableCom"
       />
@@ -61,14 +58,12 @@
         v-if="showDrawer === DrawerType.workshop"
         :workshopTemplateList="workshopTemplateList"
         :detail="detail"
-        :allCodes="allCodes"
         @on-close="handleUpdataWorkshopTab"
         @on-ok="subWorkshop"
       />
       <!-- 工位 -->
       <WorkspaceDrawer_shangfei
         v-if="showDrawer === DrawerType.workspace"
-        :allCodes="allCodes"
         :detail="detail"
         @on-close="handleUpdataWorkspaceTab"
         @on-ok="subWorkspace"
@@ -76,13 +71,13 @@
     </div>
     <div v-else>
       <!-- 其他项目的抽屉表单 -->
+      <!-- 公司 -->
       <CompanyDrawer
         v-if="showDrawer === DrawerType.company"
         :comEdit="comEdit"
         :sceneList="sceneList"
         :templateList="templateList"
         :detail="detail"
-        :allCodes="allCodes"
         @on-ok="subCompany"
         @on-close="handleUpdateTableCom" />
       <!-- 车间 -->
@@ -90,24 +85,24 @@
         v-if="showDrawer === DrawerType.workshop"
         :workshopTemplateList="workshopTemplateList"
         :detail="detail"
-        :allCodes="allCodes"
         @on-close="handleUpdataWorkshopTab"
         @on-ok="subWorkshop" />
 
       <!-- 工位 -->
       <WorkspaceDrawer
         v-if="showDrawer === DrawerType.workspace"
-        :allCodes="allCodes"
         :detail="detail"
         @on-close="handleUpdataWorkspaceTab"
         @on-ok="subWorkspace"
     /></div>
+
+    <!-- 用于渝北项目政府租户绑定企业 -->
     <SceneDialog v-if="dialogVisible" @close-dialog="closeDialog" />
   </page-wrapper>
 </template>
 
 <script setup lang="ts">
-  import { ref, onMounted, reactive, h, computed } from 'vue';
+  import { ref, onMounted, reactive, h, computed, Ref } from 'vue';
   import { Plus } from '@element-plus/icons-vue';
   import { BasicTable, BasicColumn } from '@/components/Table';
   import ActionColomn from './components/ActionColomns.vue';
@@ -121,91 +116,92 @@
   import SceneDialog from './components/SceneDialog.vue';
   import {
     colomns,
-    updateSerials,
-    findItemLevel,
-    removeParent,
-    flattenCodes,
-    getParent,
-  } from './hook/use-method';
-  import { delCompany, delWorkshop, delWorkspace, sortSceneList } from '@/api/scene/scene';
-  import { ComAddDatas, WorkshopAddDatas, WorkspaceAddDatas } from '@/types/scene/type.ts';
-  import useScene from './hook/use-scene';
+    // updateSerials,
+    // findItemLevel,
+    // removeParent,
+    // flattenCodes,
+    // getParent,
+  } from './hook/use-table-method';
+  // import {
+  //   delCompany,
+  //   delWorkshop,
+  //   delWorkspace,
+  //   updateComShopSpaceTreeSort,
+  // } from '@/api/scene/scene';
+  import {
+    // ComAddDatas,
+    // WorkshopAddDatas,
+    // WorkspaceAddDatas,
+    UseComType,
+    UseWorkshopType,
+    UseWorkspaceType,
+  } from '@/types/scene/type.ts';
+  import useComTree from './store/use-com-tree';
   import useSceneTemplete from './hook/use-sence-templete';
-  import { useRouter } from 'vue-router';
   import { storeToRefs } from 'pinia';
-  import { cloneDeep } from 'lodash-es';
-  import { ElMessageBox } from 'element-plus';
+  // import { ElMessageBox } from 'element-plus';
   import { useGlobSetting } from '@/hooks/setting';
 
+  // 此处获取了全局变量,关系到用不用sf定制的组件
   const globSetting = useGlobSetting();
   const disableDepartmentEdit = globSetting.disableDepartmentEdit;
 
-  const router = useRouter();
+  // 公司车间工位数据
+  const comTree = useComTree();
+  const { comTreeData } = storeToRefs(comTree);
 
-  const useSceneList = useScene();
-  const { tableData } = storeToRefs(useSceneList);
-  const { getSceneDetail } = useSceneList;
+  const { getComTreeDetail } = comTree;
   const useSceneTempleteDetail = useSceneTemplete();
   const { sceneList, templateList, workshopTemplateList } = useSceneTempleteDetail;
   const expendRowKeys = ref(['']);
 
   const showDrawer = ref<DrawerType | null>(null);
-  const showTableData = computed(() => {
-    const temp = cloneDeep(tableData.value);
-    return temp.splice((page.value - 1) * size.value, page.value * size.value);
-  });
 
-  const page = ref(1);
-  const size = ref(10);
-  const total = computed(() => tableData.value.length);
   const dialogVisible = ref<boolean>(false);
 
   const closeDialog = () => {
     dialogVisible.value = false;
   };
 
-  //改变el-drawer公司的状态
+  // 改变el-drawer公司的状态
   const handleUpdateTableCom = () => {
     showDrawer.value = null;
   };
 
-  //改变el-drawer车间的状态
+  // 改变el-drawer车间的状态
   const handleUpdataWorkshopTab = () => {
     showDrawer.value = null;
   };
 
-  //改变el-drawer工位的状态
+  // 改变el-drawer工位的状态
   const handleUpdataWorkspaceTab = () => {
     showDrawer.value = null;
   };
 
-  //是否公司编辑
+  // 判断是否公司编辑
   const comEdit = ref<boolean>(false);
 
-  const level = ref<number>();
+  // const level = ref<number>();
 
   onMounted(() => {
-    //添加父级,主要用于排序功能
-    //dataSourceWithParent(tableData.value, null);
-    //获取tableData数据
-    getSceneDetail();
-    // getCompanyList().then((res) => {
-    //   companyList.value = res;
-    // });
+    //获取公司树数据
+    getComTreeDetail();
   });
 
   function onCheckedRow(rowKeys) {
     console.log(rowKeys);
   }
 
-  const orderByItem = () => {};
-  const handlePageNumChange = (pageNum) => {
-    page.value = pageNum;
-  };
-  const handlePageSizeChange = (pageSize) => {
-    size.value = pageSize;
+  const orderByItem = (rowKeys) => {
+    console.log(rowKeys);
   };
 
+  /**
+   * 新建公司时的表单初始化
+   * @modifications
+   *  - 2025-01-09: Yunfeng
+   *  - V4-平台权限重构
+   */
   const companyAdd = () => {
     showDrawer.value = DrawerType.company;
     detail.value = {
@@ -218,21 +214,20 @@
     comEdit.value = false;
   };
 
-  //用于新增场景
-  const selectItems = ref([{ tag: '', template: '' }] as { tag: string; template: string }[]);
-
-  const allCodes = computed(() => {
-    return flattenCodes(tableData.value);
-  });
+  // 用于新增场景
+  // const selectItems = ref([{ tag: '', template: '' }] as { tag: string; template: string }[]);
+  // const allCodes = computed(() => {
+  //   return flattenCodes(comTreeData.value);
+  // });
 
   //新增车间
   const subWorkshop = () => {
-    getSceneDetail();
+    getComTreeDetail();
     showDrawer.value = null;
   };
 
   const subWorkspace = () => {
-    getSceneDetail();
+    getComTreeDetail();
     showDrawer.value = null;
   };
 
@@ -249,7 +244,7 @@
         // rowDownDisable:
         subItem: record.row,
         handleRelate: handleRelate,
-        handleConig: handleConfig,
+        // handleConfig: handleConfig,
         handleAdd: handleAdd,
         handleEdit: handleEdit,
         handleDelete: handleDelete,
@@ -261,212 +256,248 @@
 
   //绑定
   const handleRelate = (row) => {
-    console.log('row', row);
+    console.log(row);
     dialogVisible.value = true;
   };
 
-  //页面设置函数
-  const handleConfig = (row) => {
-    router.push({
-      path: '/page-config/config',
-      query: { companyId: row.id },
-    });
-  };
+  //公司,车间,工位的模板数据
+  // const editedItem: Ref<(ComAddDatas & WorkshopAddDatas & WorkspaceAddDatas) | undefined> = ref();
+  const editedItem: Ref<
+    (UseComType<undefined> & UseWorkshopType<undefined> & UseWorkspaceType) | undefined
+  > = ref();
+
+  //点击所有添加和编辑时显示的数据内容
+  const detail = ref({});
 
+  // 点击添加时
   const handleAdd = (row) => {
-    editedItem.value = { ...row }; // 将当前行的内容拷贝到 editedItem 中,以便编辑
-    //得出当前的数据的层级
-    level.value = findItemLevel(tableData.value, row.id, row.name);
-    if ((expendRowKeys.value[0] = row.name)) {
-      expendRowKeys.value[0] = '';
-    }
-    expendRowKeys.value[0] = row.name;
-    if (level.value === DATA_LEVEL.company) {
-      showDrawer.value = DrawerType.workshop;
-      detail.value = {
-        id: editedItem.value?.id,
-        seniorScene: editedItem.value?.name,
-        tagList: row?.labelList,
-        addEnable: ENABLED.TRUE,
-        name: '',
-        code: '',
-        tagWorkshop: null,
-        templateWorkshop: null,
-      };
-    } else if (level.value === DATA_LEVEL.workshop) {
-      detail.value = {
-        id: editedItem.value?.id,
-        seniorScene: editedItem.value?.name,
-        addEnable: ENABLED.TRUE,
-        name: '',
-        code: '',
-        principal: '',
-      };
-      if (disableDepartmentEdit) detail.value['workshopCode'] = editedItem.value?.code;
-      showDrawer.value = DrawerType.workspace;
-    }
+    console.log(row);
   };
 
-  //公司,车间,工位的模板数据
-  const editedItem = ref<ComAddDatas | WorkshopAddDatas | WorkspaceAddDatas | null>(null);
+  // 点击编辑时
+  const handleEdit = (row) => {
+    editedItem.value = { ...row }; // 将当前行的内容拷贝到 editedItem 中,以便编辑
+    console.log(row);
+  };
 
-  //点击编辑时显示的数据内容
-  const detail = ref({});
+  // 点击删除时
+  const handleDelete = (row) => {
+    console.log(row);
+  };
 
-  // 在这里实现删除行的函数
-  const handleDelete = (row: Recordable) => {
-    level.value = findItemLevel(tableData.value, row.id, row.name);
-    if (row.children?.length > 0) {
-      ElMessageBox.confirm('存在下级场景,无法删除该场景', '无法删除该条信息', {
-        confirmButtonText: '确认',
-        cancelButtonText: '取消',
-        type: 'error',
-      })
-        .then(() => {
-          console.log('存在子集');
-        })
-        .catch(() => {
-          console.log('取消删除物件');
-        });
-    } else {
-      ElMessageBox.confirm('确认要删除该场景吗', {
-        confirmButtonText: '确认',
-        cancelButtonText: '取消',
-        type: 'warning',
-      })
-        .then(() => {
-          //删除接口的调用
-          if (level.value === DATA_LEVEL.company) {
-            return delCompany(row.id);
-          } else if (level.value === DATA_LEVEL.workshop) {
-            return delWorkshop(row.id);
-          } else {
-            return delWorkspace(row.id);
-          }
-        })
-        .catch(() => {
-          console.log('取消删除物件');
-        })
-        .finally(() => {
-          getSceneDetail();
-        });
-    }
+  // 点击上移时
+  const rowUp = (row) => {
+    console.log(row);
   };
 
-  const handleEdit = (row) => {
-    editedItem.value = { ...row } as ComAddDatas; // 将当前行的内容拷贝到 editedItem 中,以便编辑
-    level.value = findItemLevel(tableData.value, row.id, row.name);
-    if (level.value === DATA_LEVEL.company) {
-      showDrawer.value = DrawerType.company;
-      comEdit.value = true;
-      //复原公司选择的场景集合
-      if (row.labelList && Array.isArray(row.labelList)) {
-        selectItems.value = row.labelList.map((item, index) => ({
-          tag: item.id,
-          template: row.moduleList[index]?.id,
-        }));
-      }
-      detail.value = {
-        id: editedItem.value?.id,
-        name: editedItem.value!.name,
-        code: editedItem.value!.code,
-        seniorScene: '顶级场景',
-        addEnable: editedItem.value!.status,
-        selectItems: selectItems.value,
-        remark: editedItem.value?.remark,
-        longitude: editedItem.value?.longitude!,
-        latitude: editedItem.value?.latitude!,
-        regionCode: editedItem.value?.regionCode,
-        thumbnail: editedItem.value?.thumbnail,
-      };
-    } else if (level.value === DATA_LEVEL.workshop && 'companyId' in editedItem.value!) {
-      showDrawer.value = DrawerType.workshop;
-
-      detail.value = {
-        id: editedItem.value.id,
-        name: editedItem.value.name,
-        code: editedItem.value.code,
-        seniorScene: editedItem.value.parent?.name || '',
-        tagWorkshop: editedItem.value.sceneLabelId,
-        templateWorkshop: editedItem.value.workshopModule?.id,
-        addEnable: editedItem.value.status,
-        tagList: editedItem.value.parent?.labelList || [],
-        companyId: editedItem.value.companyId,
-      };
-    } else if (level.value === DATA_LEVEL.workspace && 'workshopId' in editedItem.value!) {
-      detail.value = {
-        id: editedItem.value.id,
-        name: editedItem.value.name,
-        code: editedItem.value.code,
-        seniorScene: editedItem.value.parent?.name || '',
-        principal: editedItem.value.principal,
-        addEnable: editedItem.value.status,
-      };
-
-      showDrawer.value = DrawerType.workspace;
-    }
+  // 点击下移时
+  const rowDown = (row) => {
+    console.log(row);
   };
 
+  //页面设置函数 Deprecated in V4
+  // const handleConfig = (row) => {
+  //   router.push({
+  //     path: '/page-config/config',
+  //     query: { companyId: row.id },
+  //   });
+  // };
+
+  // TODO 处理添加
+  // const handleAdd = (row) => {
+  //   editedItem.value = { ...row }; // 将当前行的内容拷贝到 editedItem 中,以便编辑
+  //   //得出当前的数据的层级
+  //   level.value = findItemLevel(comTreeData.value, row.id, row.name);
+  //   if ((expendRowKeys.value[0] = row.name)) {
+  //     expendRowKeys.value[0] = '';
+  //   }
+  //   expendRowKeys.value[0] = row.name;
+  //   if (level.value === DATA_LEVEL.company) {
+  //     showDrawer.value = DrawerType.workshop;
+  //     detail.value = {
+  //       id: editedItem.value?.id,
+  //       seniorScene: editedItem.value?.name,
+  //       tagList: row?.labelList,
+  //       addEnable: ENABLED.TRUE,
+  //       name: '',
+  //       code: '',
+  //       tagWorkshop: null,
+  //       templateWorkshop: null,
+  //     };
+  //   } else if (level.value === DATA_LEVEL.workshop) {
+  //     detail.value = {
+  //       id: editedItem.value?.id,
+  //       seniorScene: editedItem.value?.name,
+  //       addEnable: ENABLED.TRUE,
+  //       name: '',
+  //       code: '',
+  //       principal: '',
+  //     };
+  //     if (disableDepartmentEdit) detail.value['workshopCode'] = editedItem.value?.code;
+  //     showDrawer.value = DrawerType.workspace;
+  //   }
+  // };
+
+  // TODO 在这里实现删除行的函数
+  // const handleDelete = (row: Recordable) => {
+  //   level.value = findItemLevel(comTreeData.value, row.id, row.name);
+  //   if (row.children?.length > 0) {
+  //     ElMessageBox.confirm('存在下级场景,无法删除该场景', '无法删除该条信息', {
+  //       confirmButtonText: '确认',
+  //       cancelButtonText: '取消',
+  //       type: 'error',
+  //     })
+  //       .then(() => {
+  //         console.log('存在子集');
+  //       })
+  //       .catch(() => {
+  //         console.log('取消删除物件');
+  //       });
+  //   } else {
+  //     ElMessageBox.confirm('确认要删除该场景吗', {
+  //       confirmButtonText: '确认',
+  //       cancelButtonText: '取消',
+  //       type: 'warning',
+  //     })
+  //       .then(() => {
+  //         //删除接口的调用
+  //         if (level.value === DATA_LEVEL.company) {
+  //           return delCompany(row.id);
+  //         } else if (level.value === DATA_LEVEL.workshop) {
+  //           return delWorkshop(row.id);
+  //         } else {
+  //           return delWorkspace(row.id);
+  //         }
+  //       })
+  //       .catch(() => {
+  //         console.log('取消删除物件');
+  //       })
+  //       .finally(() => {
+  //         getComTreeDetail();
+  //       });
+  //   }
+  // };
+
+  /**
+   * TODO
+   * 处理公司/车间/工位编辑表单数据的初始化
+   * @modifications
+   *  - 2025-01-09: Yunfeng
+   *  - V4-平台权限重构
+   */
+  // const handleEdit = (row) => {
+  //   editedItem.value = { ...row }; // 将当前行的内容拷贝到 editedItem 中,以便编辑
+  //   level.value = findItemLevel(comTreeData.value, row.id, row.name);
+  //   if (level.value === DATA_LEVEL.company) {
+  //     showDrawer.value = DrawerType.company;
+  //     comEdit.value = true;
+  //     //复原公司选择的场景集合
+  //     if (row.labelList && Array.isArray(row.labelList)) {
+  //       selectItems.value = row.labelList.map((item, index) => ({
+  //         tag: item.id,
+  //         template: row.moduleList[index]?.id,
+  //       }));
+  //     }
+  //     detail.value = {
+  //       id: editedItem.value?.id,
+  //       name: editedItem.value!.name,
+  //       code: editedItem.value!.code,
+  //       seniorScene: '顶级场景',
+  //       addEnable: editedItem.value!.status,
+  //       selectItems: selectItems.value,
+  //       remark: editedItem.value?.remark,
+  //       longitude: editedItem.value?.longitude!,
+  //       latitude: editedItem.value?.latitude!,
+  //       regionCode: editedItem.value?.regionCode,
+  //       thumbnail: editedItem.value?.thumbnail,
+  //     };
+  //   } else if (level.value === DATA_LEVEL.workshop && 'companyId' in editedItem.value!) {
+  //     showDrawer.value = DrawerType.workshop;
+  //     detail.value = {
+  //       id: editedItem.value.id,
+  //       name: editedItem.value.name,
+  //       code: editedItem.value.code,
+  //       seniorScene: editedItem.value.parent?.name || '',
+  //       tagWorkshop: editedItem.value.sceneLabelId,
+  //       templateWorkshop: editedItem.value.workshopModule?.id,
+  //       addEnable: editedItem.value.status,
+  //       tagList: editedItem.value.parent?.labelList || [],
+  //       companyId: editedItem.value.companyId,
+  //     };
+  //   } else if (level.value === DATA_LEVEL.workspace && 'workshopId' in editedItem.value!) {
+  //     detail.value = {
+  //       id: editedItem.value.id,
+  //       name: editedItem.value.name,
+  //       code: editedItem.value.code,
+  //       seniorScene: editedItem.value.parent?.name || '',
+  //       principal: editedItem.value.principal,
+  //       addEnable: editedItem.value.status,
+  //     };
+
+  //     showDrawer.value = DrawerType.workspace;
+  //   }
+  // };
+
   //编辑时的提交按钮功能
 
   //编辑公司的提交按钮
   const subCompany = () => {
-    getSceneDetail();
+    getComTreeDetail();
     showDrawer.value = null;
   };
 
-  //向上排序
-  const rowUp = (row) => {
-    if (row.parent) {
-      const parentIndex = row.parent.children!.findIndex((item) => item.id === row.id);
-      if (parentIndex > 0) {
-        const previousRow = row.parent.children![parentIndex - 1];
-        const targetParent = getParent(tableData.value, previousRow.parent.code);
-        // 进行交换位置
-        targetParent.children!.splice(parentIndex - 1, 2, row, previousRow);
-      }
-    } else {
-      const index = tableData.value.findIndex((item) => item.id === row.id);
-      if (index > 0) {
-        tableData.value.splice(index - 1, 2, row, tableData.value[index - 1]);
-      }
-    }
-    tableData.value = updateSerials(tableData.value);
-    sortSceneList(removeParent(tableData.value))
-      .then(() => {
-        getSceneDetail();
-      })
-      .catch((...e) => {
-        console.error('catch error', ...e);
-      });
-  };
-
-  //向下排序
-  const rowDown = (row) => {
-    if (row.parent) {
-      const parentIndex = row.parent.children!.findIndex((item) => item.id === row.id);
-      if (parentIndex < row.parent.children?.length - 1) {
-        const behindRow = row.parent.children![parentIndex + 1];
-        const targetParent = getParent(tableData.value, behindRow.parent.code);
-        // 进行交换位置
-        targetParent.children!.splice(parentIndex, 2, behindRow, row);
-      }
-    } else {
-      const index = tableData.value.findIndex((item) => item.id === row.id);
-      if (index < tableData.value.length - 1) {
-        tableData.value.splice(index, 2, tableData.value[index + 1], row);
-      }
-    }
-    tableData.value = updateSerials(tableData.value);
-
-    sortSceneList(removeParent(tableData.value))
-      .then(() => {
-        getSceneDetail();
-      })
-      .catch((...e) => {
-        console.error('catch error', ...e);
-      });
-  };
+  // TODO 向上排序
+  // const rowUp = (row) => {
+  //   if (row.parent) {
+  //     const parentIndex = row.parent.children!.findIndex((item) => item.id === row.id);
+  //     if (parentIndex > 0) {
+  //       const previousRow = row.parent.children![parentIndex - 1];
+  //       const targetParent = getParent(comTreeData.value, previousRow.parent.code);
+  //       // 进行交换位置
+  //       targetParent.children!.splice(parentIndex - 1, 2, row, previousRow);
+  //     }
+  //   } else {
+  //     const index = comTreeData.value.findIndex((item) => item.id === row.id);
+  //     if (index > 0) {
+  //       comTreeData.value.splice(index - 1, 2, row, comTreeData.value[index - 1]);
+  //     }
+  //   }
+  //   comTreeData.value = updateSerials(comTreeData.value);
+  //   updateComShopSpaceTreeSort(removeParent(comTreeData.value))
+  //     .then(() => {
+  //       getComTreeDetail();
+  //     })
+  //     .catch((...e) => {
+  //       console.error('catch error', ...e);
+  //     });
+  // };
+
+  // TODO 向下排序
+  // const rowDown = (row) => {
+  //   if (row.parent) {
+  //     const parentIndex = row.parent.children!.findIndex((item) => item.id === row.id);
+  //     if (parentIndex < row.parent.children?.length - 1) {
+  //       const behindRow = row.parent.children![parentIndex + 1];
+  //       const targetParent = getParent(comTreeData.value, behindRow.parent.code);
+  //       // 进行交换位置
+  //       targetParent.children!.splice(parentIndex, 2, behindRow, row);
+  //     }
+  //   } else {
+  //     const index = comTreeData.value.findIndex((item) => item.id === row.id);
+  //     if (index < comTreeData.value.length - 1) {
+  //       comTreeData.value.splice(index, 2, comTreeData.value[index + 1], row);
+  //     }
+  //   }
+  //   comTreeData.value = updateSerials(comTreeData.value);
+
+  //   updateComShopSpaceTreeSort(removeParent(comTreeData.value))
+  //     .then(() => {
+  //       getComTreeDetail();
+  //     })
+  //     .catch((...e) => {
+  //       console.error('catch error', ...e);
+  //     });
+  // };
 </script>
 
 <style scoped>
@@ -484,7 +515,6 @@
 
   .relate-select {
     display: flex;
-
     align-items: center;
     margin-bottom: 20px;
   }

+ 15 - 14
src/views/system-config/scene-manage/components/ActionColomns.vue

@@ -2,20 +2,21 @@
   <div style="display: flex">
     <div style="display: flex; margin-right: 7px">
       <div
-        v-if="userStore?.info?.tenantCode === 'gov'"
+        v-if="userStore?.info?.tenantCode === 'gov' && (props.subItem as ComAddDatas).parentId !== undefined"
         @click="changeRelate"
         class="wordStyle"
         style="margin-right: 10px"
-        >绑定企业</div
+        >绑定</div
       >
-      <div
+      <div v-else style="margin-right: 10px; width: 27px"></div>
+      <!-- <div
         v-if="(props.subItem as ComAddDatas).parentId !== undefined"
         @click="changeConig"
         class="wordStyle"
         style="margin-right: 10px; width: 122px"
         >页面设置</div
-      >
-      <div v-else style="margin-right: 10px; width: 122px"></div>
+      > -->
+      <!-- <div v-else style="margin-right: 10px; width: 122px"></div> -->
       <div v-if="!isWorkshop" @click="changeAdd" class="wordStyle">添加下一级</div>
       <div v-else style="margin-right: 10px; width: 67px"></div
     ></div>
@@ -40,19 +41,18 @@
 <script setup lang="ts">
   import { computed } from 'vue';
   import { ComAddDatas, WorkshopAddDatas, WorkspaceAddDatas } from '@/types/scene/type.ts';
-  import useScene from '../hook/use-scene';
+  import useComTree from '../store/use-com-tree';
   import { storeToRefs } from 'pinia';
   import { useUserStore } from '@/store/modules/user';
 
-  // '
   const userStore = useUserStore();
-  const useSceneList = useScene();
-  const { tableData } = storeToRefs(useSceneList);
+  const comTree = useComTree();
+  const { comTreeData } = storeToRefs(comTree);
 
   const props = defineProps<{
     subItem: ComAddDatas | WorkshopAddDatas | WorkspaceAddDatas;
     handleRelate: (row) => unknown;
-    handleConig: (row) => unknown;
+    // handleConig: (row) => unknown; //Deprecated in V4
     handleAdd: (row) => unknown;
     handleEdit: (row) => unknown;
     handleDelete: (row) => unknown;
@@ -64,13 +64,14 @@
     return (props.subItem as any).workshopId ? true : false;
   });
 
+  // TODO serial 改为 orderNum
   const isFirst = computed(() => {
     return (props.subItem as any).serial === 0 ? true : false;
   });
 
   const isLast = computed(() => {
     if ((props.subItem as any).parentId === 0) {
-      return (props.subItem as any).serial === tableData.value.length - 1 ? true : false;
+      return (props.subItem as any).serial === comTreeData.value.length - 1 ? true : false;
     } else {
       return (props.subItem as any).serial === (props.subItem as any).parent?.children.length - 1
         ? true
@@ -82,9 +83,9 @@
     props.handleRelate(props.subItem);
   };
 
-  const changeConig = () => {
-    props.handleConig(props.subItem);
-  };
+  // const changeConig = () => { //Deprecated in V4
+  //   props.handleConig(props.subItem);
+  // };
 
   const changeAdd = () => {
     props.handleAdd(props.subItem);

+ 2 - 2
src/views/system-config/scene-manage/components/AddCompanyInfo.vue

@@ -6,7 +6,7 @@
         <div class="select-title">企业分类</div>
         <el-select v-model="companyType" placeholder="请选择企业类型" style="width: 180px">
           <el-option
-            v-for="item in options"
+            v-for="item in OPTIONS"
             :key="item.value"
             :label="item.label"
             :value="item.value"
@@ -45,7 +45,7 @@
 
 <script setup lang="ts">
   import { onMounted, ref } from 'vue';
-  import { options } from '../hook/use-method';
+  import { OPTIONS } from '@/types/scene/constant.ts';
   import { getCompanyList, changeRelate } from '@/api/scene/scene.ts';
   import { CompanyType } from '@/types/scene/type.ts';
   import { ElMessage } from 'element-plus';

+ 1 - 1
src/views/system-config/scene-manage/components/CompanyDrawer-shangfei.vue

@@ -144,7 +144,7 @@
   const props = defineProps<{
     sceneList: SceneLabelType[];
     templateList: TemplateType[];
-    allCodes: string[];
+    // allCodes: string[];
     comEdit: boolean;
     detail: {
       id?: number;

+ 99 - 98
src/views/system-config/scene-manage/components/CompanyDrawer.vue

@@ -24,13 +24,14 @@
         <el-form-item label="公司名称" prop="name">
           <el-input v-model="ruleForm.name" style="width: 200px" />
         </el-form-item>
+        <!-- 上级场景改为固定 0 -->
         <el-form-item label="上级场景" prop="seniorScene">
           <el-input v-model="ruleForm.seniorScene" style="width: 200px" disabled />
         </el-form-item>
         <el-form-item v-if="!props.comEdit" label="公司代码" prop="code">
           <el-input v-model="ruleForm.code" style="width: 200px" />
         </el-form-item>
-        <el-form-item label="标签&模板" required>
+        <!-- <el-form-item label="标签&模板" required>
           <div style="display: flex; flex-direction: column; align-items: flex-start">
             <div
               v-for="(item, index) in ruleForm.selectItems"
@@ -74,7 +75,7 @@
                 ><CirclePlus /></el-icon
             ></div>
           </div>
-        </el-form-item>
+        </el-form-item> -->
         <el-form-item label="所在省市" prop="regionCode" required>
           <el-select v-model="ruleForm.regionCode" placeholder="请选择省市" style="width: 200px">
             <el-option
@@ -152,8 +153,8 @@
 
   import { ENABLED } from '@/types/scene/constant.ts';
   import type { FormInstance, FormRules } from 'element-plus';
-  import { ElMessage, ElMessageBox } from 'element-plus';
-  import { CirclePlus } from '@element-plus/icons-vue';
+  import { ElMessage } from 'element-plus';
+  // import { CirclePlus } from '@element-plus/icons-vue';
   import { getProvinceList } from '@/api/system/region';
   import { useRequest } from 'vue-hooks-plus';
   import { Plus } from '@element-plus/icons-vue';
@@ -170,7 +171,7 @@
   const props = defineProps<{
     sceneList: SceneLabelType[];
     templateList: TemplateType[];
-    allCodes: string[];
+    // allCodes: string[];
     comEdit: boolean;
     detail: {
       id?: number;
@@ -302,12 +303,12 @@
   const { data: provinceList } = useRequest(getProvinceList);
 
   //增加空的场景&模板
-  const addChange = () => {
-    ruleForm.selectItems!.push({
-      tag: '',
-      template: '',
-    });
-  };
+  // const addChange = () => {
+  //   ruleForm.selectItems!.push({
+  //     tag: '',
+  //     template: '',
+  //   });
+  // };
 
   //编辑时需要传入子组件的数据
   watch(
@@ -328,25 +329,25 @@
   );
 
   //删除场景&模板
-  const deleScene = (index) => {
-    if (ruleForm.selectItems!.length > 1) {
-      ElMessageBox.confirm('请确认是否关闭该场景?', '状态关闭', {
-        confirmButtonText: '确认',
-        cancelButtonText: '取消',
-        type: 'warning',
-      })
-        .then(() => {
-          ruleForm.selectItems!.splice(index, 1);
-        })
-        .catch(() => {
-          console.log('取消删除物件');
-        });
-    } else {
-      ElMessage.warning({
-        message: '无法删除',
-      });
-    }
-  };
+  // const deleScene = (index) => {
+  //   if (ruleForm.selectItems!.length > 1) {
+  //     ElMessageBox.confirm('请确认是否关闭该场景?', '状态关闭', {
+  //       confirmButtonText: '确认',
+  //       cancelButtonText: '取消',
+  //       type: 'warning',
+  //     })
+  //       .then(() => {
+  //         ruleForm.selectItems!.splice(index, 1);
+  //       })
+  //       .catch(() => {
+  //         console.log('取消删除物件');
+  //       });
+  //   } else {
+  //     ElMessage.warning({
+  //       message: '无法删除',
+  //     });
+  //   }
+  // };
   //添加新公司的提交
   const newCompanyAdd = () => {
     if (!ruleFormRef.value) return;
@@ -367,60 +368,60 @@
         return;
       }
 
-      if (props.allCodes.indexOf(ruleForm.code) > -1) {
-        ElMessageBox.confirm('场景代码重复,请重新填写', '代码重复', {
-          confirmButtonText: '确认',
-          cancelButtonText: '取消',
-          type: 'error',
-        })
-          .then(() => {
-            // ruleFormCom.code = '';
-            console.log('场景代码重复,请重新填写');
-          })
-          .catch(() => {
-            console.log('取消删除物件');
+      // if (props.allCodes.indexOf(ruleForm.code) > -1) {
+      //   ElMessageBox.confirm('场景代码重复,请重新填写', '代码重复', {
+      //     confirmButtonText: '确认',
+      //     cancelButtonText: '取消',
+      //     type: 'error',
+      //   })
+      //     .then(() => {
+      //       // ruleFormCom.code = '';
+      //       console.log('场景代码重复,请重新填写');
+      //     })
+      //     .catch(() => {
+      //       console.log('取消删除物件');
+      //     });
+      // } else {
+      const newComData = {
+        name: ruleForm.name,
+        code: ruleForm.code,
+        status: Number(ruleForm.addEnable),
+        isDeleted: 0,
+        parentId: 0,
+        serial: 0,
+        remark: ruleForm.remark,
+        longitude: ruleForm.longitude,
+        latitude: ruleForm.latitude,
+        regionCode: ruleForm.regionCode,
+        thumbnail: ruleForm.thumbnail,
+      };
+      //提交数据并重置关闭el-draw
+      addCompany(newComData)
+        .then((res) => {
+          //选出不为空字符串的数据
+          ruleForm.selectItems = ruleForm.selectItems!.filter((item) => {
+            return item.tag && item.template;
           });
-      } else {
-        const newComData = {
-          name: ruleForm.name,
-          code: ruleForm.code,
-          status: Number(ruleForm.addEnable),
-          isDeleted: 0,
-          parentId: 0,
-          serial: 0,
-          remark: ruleForm.remark,
-          longitude: ruleForm.longitude,
-          latitude: ruleForm.latitude,
-          regionCode: ruleForm.regionCode,
-          thumbnail: ruleForm.thumbnail,
-        };
-        //提交数据并重置关闭el-draw
-        addCompany(newComData)
-          .then((res) => {
-            //选出不为空字符串的数据
-            ruleForm.selectItems = ruleForm.selectItems!.filter((item) => {
-              return item.tag && item.template;
-            });
-            //将selectItems加工成保存公司-模板的数据类型
-            const newModuleLabel = ruleForm.selectItems!.map((item) => {
-              return {
-                companyId: res,
-                isDeleted: 0,
-                sceneLabelId: Number(item.tag), //item.tag
-                sceneModuleId: Number(item.template), ///item.template
-              };
-            });
-
-            //保存公司-场景标签-场景模板关系
-            return addCompanyModuleLabel(newModuleLabel);
-          })
-          .catch((err) => {
-            console.log(err);
-          })
-          .finally(() => {
-            emit('onOk');
+          //将selectItems加工成保存公司-模板的数据类型
+          const newModuleLabel = ruleForm.selectItems!.map((item) => {
+            return {
+              companyId: res,
+              isDeleted: 0,
+              sceneLabelId: Number(item.tag), //item.tag
+              sceneModuleId: Number(item.template), ///item.template
+            };
           });
-      }
+
+          //保存公司-场景标签-场景模板关系
+          return addCompanyModuleLabel(newModuleLabel);
+        })
+        .catch((err) => {
+          console.log(err);
+        })
+        .finally(() => {
+          emit('onOk');
+        });
+      // }
     });
   };
 
@@ -432,22 +433,22 @@
         return;
       }
 
-      if (props.allCodes.indexOf(ruleForm.code) > -1) {
-        if (props.detail.code !== ruleForm.code) {
-          ElMessageBox.confirm('场景代码重复,请重新填写', '代码重复', {
-            confirmButtonText: '确认',
-            cancelButtonText: '取消',
-            type: 'error',
-          })
-            .then(() => {
-              console.log('代码重复');
-            })
-            .catch(() => {
-              console.log('取消删除物件');
-            });
-          return;
-        }
-      }
+      // if (props.allCodes.indexOf(ruleForm.code) > -1) {
+      //   if (props.detail.code !== ruleForm.code) {
+      //     ElMessageBox.confirm('场景代码重复,请重新填写', '代码重复', {
+      //       confirmButtonText: '确认',
+      //       cancelButtonText: '取消',
+      //       type: 'error',
+      //     })
+      //       .then(() => {
+      //         console.log('代码重复');
+      //       })
+      //       .catch(() => {
+      //         console.log('取消删除物件');
+      //       });
+      //     return;
+      //   }
+      // }
 
       ruleForm.selectItems = ruleForm.selectItems!.filter((item) => {
         return item.tag && item.template;

+ 2 - 2
src/views/system-config/scene-manage/components/SceneDialog.vue

@@ -12,7 +12,7 @@
           <div class="select-title">企业分类</div>
           <el-select v-model="companyType" placeholder="请选择企业类型" style="width: 180px">
             <el-option
-              v-for="item in options"
+              v-for="item in OPTIONS"
               :key="item.value"
               :label="item.label"
               :value="item.value"
@@ -53,7 +53,7 @@
 <script setup lang="ts">
   import { ref, onMounted } from 'vue';
   import { ElMessage } from 'element-plus';
-  import { options } from '../hook/use-method.tsx';
+  import { OPTIONS } from '@/types/scene/constant.ts';
   import { getCompanyList, changeRelate } from '@/api/scene/scene.ts';
   import { CompanyType } from '@/types/scene/type.ts';
 

+ 30 - 30
src/views/system-config/scene-manage/components/WorkshopDrawer-shangfei.vue

@@ -94,7 +94,7 @@
 <script setup lang="ts">
   import { computed, reactive, ref, defineProps, defineEmits, watch } from 'vue';
   import { ENABLED } from '@/types/scene/constant.ts';
-  import { ElMessageBox, type FormInstance, type FormRules } from 'element-plus';
+  import { type FormInstance, type FormRules } from 'element-plus';
   import {
     addWorkshop,
     editWorkshop,
@@ -121,7 +121,7 @@
   };
 
   const props = defineProps<{
-    allCodes: string[];
+    // allCodes: string[];
     workshopTemplateList: WorkshopModuleType[];
     detail: {
       id?: number;
@@ -217,35 +217,35 @@
         serial: 0,
       };
 
-      if (props.allCodes.includes(ruleForm.code)) {
-        ElMessageBox.confirm('场景代码重复,请重新填写', '代码重复', {
-          confirmButtonText: '确认',
-          cancelButtonText: '取消',
-          type: 'error',
+      // if (props.allCodes.includes(ruleForm.code)) {
+      //   ElMessageBox.confirm('场景代码重复,请重新填写', '代码重复', {
+      //     confirmButtonText: '确认',
+      //     cancelButtonText: '取消',
+      //     type: 'error',
+      //   })
+      //     .then(() => {
+      //       console.log('场景代码重复,请重新填写');
+      //     })
+      //     .catch(() => {
+      //       console.log('取消删除物件');
+      //     });
+      // } else {
+      addWorkshop(newAddData)
+        .then((res) => {
+          const newWorkshopModule = {
+            workshopId: res,
+            isDeleted: 0,
+            workshopModuleId: ruleForm.templateWorkshop!,
+          };
+          return addWorkshopModuleLabel(newWorkshopModule);
         })
-          .then(() => {
-            console.log('场景代码重复,请重新填写');
-          })
-          .catch(() => {
-            console.log('取消删除物件');
-          });
-      } else {
-        addWorkshop(newAddData)
-          .then((res) => {
-            const newWorkshopModule = {
-              workshopId: res,
-              isDeleted: 0,
-              workshopModuleId: ruleForm.templateWorkshop!,
-            };
-            return addWorkshopModuleLabel(newWorkshopModule);
-          })
-          .catch((err) => {
-            console.log(err);
-          })
-          .finally(() => {
-            emit('onOk');
-          });
-      }
+        .catch((err) => {
+          console.log(err);
+        })
+        .finally(() => {
+          emit('onOk');
+        });
+      // }
     });
   };
 

+ 46 - 46
src/views/system-config/scene-manage/components/WorkshopDrawer.vue

@@ -84,7 +84,7 @@
 <script setup lang="ts">
   import { computed, reactive, ref, defineProps, defineEmits, watch } from 'vue';
   import { ENABLED } from '@/types/scene/constant.ts';
-  import { ElMessageBox, type FormInstance, type FormRules } from 'element-plus';
+  import { type FormInstance, type FormRules } from 'element-plus';
   import {
     addWorkshopModuleLabel,
     editWorkshopModuleLabel,
@@ -94,7 +94,7 @@
   import { LabelModuleListType, WorkshopModuleType } from '@/types/scene/type.ts';
 
   const props = defineProps<{
-    allCodes: string[];
+    // allCodes: string[];
     workshopTemplateList: WorkshopModuleType[];
     detail: {
       id?: number;
@@ -190,35 +190,35 @@
         serial: 0,
       };
 
-      if (props.allCodes.includes(ruleForm.code)) {
-        ElMessageBox.confirm('场景代码重复,请重新填写', '代码重复', {
-          confirmButtonText: '确认',
-          cancelButtonText: '取消',
-          type: 'error',
+      // if (props.allCodes.includes(ruleForm.code)) {
+      //   ElMessageBox.confirm('场景代码重复,请重新填写', '代码重复', {
+      //     confirmButtonText: '确认',
+      //     cancelButtonText: '取消',
+      //     type: 'error',
+      //   })
+      //     .then(() => {
+      //       console.log('场景代码重复,请重新填写');
+      //     })
+      //     .catch(() => {
+      //       console.log('取消删除物件');
+      //     });
+      // } else {
+      addWorkshop(newAddData)
+        .then((res) => {
+          const newWorkshopModule = {
+            workshopId: res,
+            isDeleted: 0,
+            workshopModuleId: ruleForm.templateWorkshop!,
+          };
+          return addWorkshopModuleLabel(newWorkshopModule);
         })
-          .then(() => {
-            console.log('场景代码重复,请重新填写');
-          })
-          .catch(() => {
-            console.log('取消删除物件');
-          });
-      } else {
-        addWorkshop(newAddData)
-          .then((res) => {
-            const newWorkshopModule = {
-              workshopId: res,
-              isDeleted: 0,
-              workshopModuleId: ruleForm.templateWorkshop!,
-            };
-            return addWorkshopModuleLabel(newWorkshopModule);
-          })
-          .catch((err) => {
-            console.log(err);
-          })
-          .finally(() => {
-            emit('onOk');
-          });
-      }
+        .catch((err) => {
+          console.log(err);
+        })
+        .finally(() => {
+          emit('onOk');
+        });
+      // }
     });
   };
 
@@ -229,22 +229,22 @@
       if (!valid) {
         return;
       }
-      if (props.allCodes.includes(ruleForm.code)) {
-        if (props.detail.code !== ruleForm.code) {
-          ElMessageBox.confirm('场景代码重复,请重新填写', '代码重复', {
-            confirmButtonText: '确认',
-            cancelButtonText: '取消',
-            type: 'error',
-          })
-            .then(() => {
-              console.log('代码重复');
-            })
-            .catch(() => {
-              console.log('取消删除物件');
-            });
-          return;
-        }
-      }
+      // if (props.allCodes.includes(ruleForm.code)) {
+      //   if (props.detail.code !== ruleForm.code) {
+      //     ElMessageBox.confirm('场景代码重复,请重新填写', '代码重复', {
+      //       confirmButtonText: '确认',
+      //       cancelButtonText: '取消',
+      //       type: 'error',
+      //     })
+      //       .then(() => {
+      //         console.log('代码重复');
+      //       })
+      //       .catch(() => {
+      //         console.log('取消删除物件');
+      //       });
+      //     return;
+      //   }
+      // }
 
       const editNewWorkshopData = {
         code: ruleForm.code,

+ 1 - 1
src/views/system-config/scene-manage/components/WorkspaceDrawer-shangfei.vue

@@ -71,7 +71,7 @@
   import { getWorkSpaceInfoList } from '@/api/workShopData';
 
   const props = defineProps<{
-    allCodes: string[];
+    // allCodes: string[];
     detail: {
       id?: number;
       name?: string;

+ 50 - 50
src/views/system-config/scene-manage/components/WorkspaceDrawer.vue

@@ -56,11 +56,11 @@
 <script setup lang="ts">
   import { computed, reactive, ref, defineProps, defineEmits, watch } from 'vue';
   import { ENABLED } from '@/types/scene/constant.ts';
-  import { ElMessageBox, type FormInstance, type FormRules } from 'element-plus';
+  import { type FormInstance, type FormRules } from 'element-plus';
   import { addWorkspace, editWorkspace } from '@/api/scene/scene.ts';
 
   const props = defineProps<{
-    allCodes: string[];
+    // allCodes: string[];
     detail: {
       id?: number;
       name?: string;
@@ -139,39 +139,39 @@
       if (!valid) {
         return;
       }
-      if (props.allCodes.indexOf(ruleForm.code) > -1) {
-        ElMessageBox.confirm('场景代码重复,请重新填写', '代码重复', {
-          confirmButtonText: '确认',
-          cancelButtonText: '取消',
-          type: 'error',
+      // if (props.allCodes.indexOf(ruleForm.code) > -1) {
+      //   ElMessageBox.confirm('场景代码重复,请重新填写', '代码重复', {
+      //     confirmButtonText: '确认',
+      //     cancelButtonText: '取消',
+      //     type: 'error',
+      //   })
+      //     .then(() => {
+      //       console.log('场景代码重复,请重新填写');
+      //     })
+      //     .catch(() => {
+      //       console.log('取消删除物件');
+      //     });
+      // } else {
+      const newAddData = {
+        code: ruleForm.code,
+        workshopId: props.detail.id,
+        isDeleted: 0,
+        name: ruleForm.name,
+        principal: ruleForm.principal,
+        status: Number(ruleForm.addEnable),
+        serial: 0,
+      };
+      addWorkspace(newAddData)
+        .catch((err) => {
+          console.log(err);
         })
-          .then(() => {
-            console.log('场景代码重复,请重新填写');
-          })
-          .catch(() => {
-            console.log('取消删除物件');
-          });
-      } else {
-        const newAddData = {
-          code: ruleForm.code,
-          workshopId: props.detail.id,
-          isDeleted: 0,
-          name: ruleForm.name,
-          principal: ruleForm.principal,
-          status: Number(ruleForm.addEnable),
-          serial: 0,
-        };
-        addWorkspace(newAddData)
-          .catch((err) => {
-            console.log(err);
-          })
-          .catch((err) => {
-            console.log(err);
-          })
-          .finally(() => {
-            emit('onOk');
-          });
-      }
+        .catch((err) => {
+          console.log(err);
+        })
+        .finally(() => {
+          emit('onOk');
+        });
+      // }
     });
   };
 
@@ -183,22 +183,22 @@
       if (!valid) {
         return;
       }
-      if (props.allCodes.indexOf(ruleForm.code) > -1) {
-        if (props.detail.code !== ruleForm.code) {
-          ElMessageBox.confirm('场景代码重复,请重新填写', '代码重复', {
-            confirmButtonText: '确认',
-            cancelButtonText: '取消',
-            type: 'error',
-          })
-            .then(() => {
-              console.log('代码重复');
-            })
-            .catch(() => {
-              console.log('取消删除物件');
-            });
-          return;
-        }
-      }
+      // if (props.allCodes.indexOf(ruleForm.code) > -1) {
+      //   if (props.detail.code !== ruleForm.code) {
+      //     ElMessageBox.confirm('场景代码重复,请重新填写', '代码重复', {
+      //       confirmButtonText: '确认',
+      //       cancelButtonText: '取消',
+      //       type: 'error',
+      //     })
+      //       .then(() => {
+      //         console.log('代码重复');
+      //       })
+      //       .catch(() => {
+      //         console.log('取消删除物件');
+      //       });
+      //     return;
+      //   }
+      // }
 
       const editNewWorkspaceData = {
         code: ruleForm.code,

+ 0 - 240
src/views/system-config/scene-manage/hook/use-method.tsx

@@ -1,240 +0,0 @@
-import {
-  SceneListType,
-  GetListWorkshop,
-  WorkspaceAddDatas,
-  LabelModuleListType,
-} from '@/api/scene/sceneOperate';
-import { WorkShopTempleteType } from '@/api/scene/secene-templet';
-import { useGlobSetting } from '@/hooks/setting';
-
-const { appPCUrl } = useGlobSetting()
-
-export const colomns = [
-  { label: '场景名称', prop: 'name', minWidth: 300 },
-  { label: '场景标签', prop: 'labelName', minWidth: 300 },
-  // { label: '代码', prop: 'code' },
-  {
-    label: '预览',
-    prop: 'preview',
-    minWidth: 300,
-    render: ({ row, column }) => {
-      if (!row.parent && row.labelList?.[0]?.id) {
-        return (
-          <a
-            href={`${appPCUrl}#/company?companyId=${row.id}&labelId=${row.labelList[0]?.id}`}
-            target="_blank"
-          >
-            公司预览
-          </a>
-        );
-      } else if (row.parent && !row.parent.parent) {
-        return (
-          <a href={`${appPCUrl}#/shop?id=${row.id}`} target="_blank">
-            车间预览
-          </a>
-        );
-      }
-    },
-  },
-];
-
-interface DataSourceUser
-  extends SceneListType<
-  GetListWorkshop<WorkspaceAddDatas, WorkShopTempleteType>,
-  LabelModuleListType
-  > {
-  parent?: SceneListType<
-    GetListWorkshop<WorkspaceAddDatas, WorkShopTempleteType>,
-    LabelModuleListType
-  > | null;
-}
-
-export const dataSourceWithParent = (d: DataSourceUser[], parent: DataSourceUser | null) => {
-  d.forEach((item, _index) => {
-    item.parent = parent;
-
-    if (item.children && item.children?.length > 0) {
-      dataSourceWithParent(item.children, item);
-    }
-  });
-
-  return d;
-};
-
-export const options = [
-  {
-    value: 'industry',
-    label: '工业企业',
-  },
-  {
-    value: 'gas',
-    label: '燃气企业',
-  },
-  {
-    value: 'other',
-    label: '其他企业',
-  },
-];
-
-export function removeParent(data) {
-  return data.map((item) => {
-    // 删除 tag 属性
-    delete item.parent;
-
-    // 递归处理子项
-    if (item.children && item.children.length > 0) {
-      item.children = removeParent(item.children);
-    }
-
-    return item;
-  });
-}
-
-//找到各个层级
-// export function findIndexByItem(data, targetItem, path = []) {
-//   for (let i = 0; i < data.length; i++) {
-//     const currentPath = path.concat(i);
-//     if (data[i].id === targetItem.id && data[i].name === targetItem.name) {
-//       return currentPath;
-//     }
-//     if (data[i].children && data[i].children.length > 0) {
-//       const childResult = findIndexByItem(data[i].children, targetItem, currentPath);
-//       if (childResult.length > 0) {
-//         return childResult;
-//       }
-//     }
-//   }
-//   return [];
-// }
-
-//用于重新修改serial
-export const updateSerials = (data) => {
-  for (let i = 0; i < data.length; i++) {
-    data[i].serial = i;
-
-    // 如果有子项,递归查找
-    if (data[i].children && data[i].children.length > 0) {
-      updateSerials(data[i].children);
-    }
-  }
-  return data;
-  // return false; // 表示未找到目标项
-};
-
-//用于新增数据
-export const updateData = (data, targetId, newAdd) => {
-  for (let i = 0; i < data.length; i++) {
-    const currentItem = data[i];
-
-    if (currentItem.id === targetId) {
-      if (!currentItem.children) {
-        currentItem.children = [];
-      }
-      currentItem.children.push(newAdd);
-      return true; // 表示已经找到并修改
-    }
-
-    // 如果有子项,递归查找
-    if (currentItem.children && currentItem.children.length > 0) {
-      const found = updateData(currentItem.children, targetId, newAdd);
-
-      if (found) {
-        return true; // 如果在子项中找到目标项,停止继续查找
-      }
-    }
-  }
-
-  return false; // 表示未找到目标项
-};
-
-//判断该条数据的层级
-export const findItemLevel = (data, targetId, targetName, currentLevel = 0) => {
-  for (let i = 0; i < data.length; i++) {
-    const item = data[i];
-
-    if (item.id === targetId && item.name === targetName) {
-      return currentLevel;
-    }
-
-    if (item.children && item.children.length > 0) {
-      const childLevel = findItemLevel(item.children, targetId, targetName, currentLevel + 1);
-      if (childLevel !== -1) {
-        return childLevel;
-      }
-    }
-  }
-
-  return -1;
-};
-
-
-//得到parent
-export const getParent = (data: DataSourceUser[], targetCode: string) => {
-
-
-  //let parentNode = {} as DataSourceUser
-  for (let i = 0; i < data.length; i++) {
-    const item = data[i];
-
-    if (item.code === targetCode) {
-      // parentNode = item
-      return item
-    }
-
-    if (item.children && item.children.length > 0) {
-      const foundItem = getParent(item.children, targetCode);
-      if (foundItem) {
-        return foundItem
-      }
-    }
-  }
-
-  return null;
-};
-
-//删除行
-export const deleteTableRow = (dataSource, targetId) => {
-  const deleteRecursive = (data) => {
-    for (let i = 0; i < data.length; i++) {
-      const currentItem = data[i];
-
-      if (currentItem.id === targetId) {
-        // 删除当前项
-        data.splice(i, 1);
-        return true;
-      }
-
-      // 如果有子项,递归查找
-      if (currentItem.children && currentItem.children.length > 0) {
-        const found = deleteRecursive(currentItem.children);
-
-        if (found) {
-          return true; // 如果在子项中找到目标项,停止继续查找
-        }
-      }
-    }
-
-    return false; // 表示未找到目标项
-  };
-
-  // 从顶层开始递归删除
-  deleteRecursive(dataSource);
-};
-
-//找出数据中的全部code
-export const flattenCodes = (data) => {
-  const codes: string[] = [];
-  const traverse = (node: { code: string; children: any[] }) => {
-    codes.push(node.code);
-    if (node.children && node.children.length > 0) {
-      node.children.forEach(traverse);
-    }
-  };
-  data.forEach(traverse);
-  return codes;
-};
-
-// export enum ENABLED {
-//   FALSE = 1,
-//   TRUE = 0,
-// }

+ 0 - 30
src/views/system-config/scene-manage/hook/use-scene.ts

@@ -1,30 +0,0 @@
-import { getSceneList } from '@/api/scene/scene.ts';
-import {
-  WorkShopTempleteType,
-  WorkspaceAddDatas,
-  LabelModuleListType,
-  SceneListType,
-  GetListWorkshop,
-} from '@/types/scene/type.ts';
-import { defineStore } from 'pinia';
-import { ref } from 'vue';
-import { dataSourceWithParent } from './use-method';
-
-export const useScene = defineStore('scene-data', () => {
-  //场景数据
-  const tableData = ref<
-    SceneListType<GetListWorkshop<WorkspaceAddDatas, WorkShopTempleteType>, LabelModuleListType>[]
-  >([]);
-
-  const getSceneDetail = () => {
-    getSceneList().then((res) => {
-      tableData.value = res;
-      //添加父级,主要用于排序功能
-      tableData.value = dataSourceWithParent(tableData.value, null);
-    });
-  };
-
-  return { tableData, getSceneDetail };
-});
-
-export default useScene;

+ 239 - 0
src/views/system-config/scene-manage/hook/use-table-method.tsx

@@ -0,0 +1,239 @@
+import {
+  // SceneListType,
+  // GetListWorkshop,
+  // WorkspaceAddDatas,
+  // LabelModuleListType,WorkShopTempleteType
+  
+} from '@/types/scene/type.ts';
+import { useGlobSetting } from '@/hooks/setting';
+
+const { appPCUrl } = useGlobSetting()
+
+export const colomns = [
+  { label: '名称', prop: 'name', minWidth: 300 },
+  { label: '设置', prop: 'labelName', minWidth: 300,
+      render: ({ row }) => {
+        if(!row.parent && row.labelList?.[0]?.id) {
+          return (
+            <a
+              href={`/#/page-config/config?companyId=${row.id}`}
+            >
+              布局设置
+            </a>
+          );  
+        } else if (row.parent && !row.parent.parent) {
+          return (
+            <a href={`/#/map-config/layout?id=${row.id}`}>
+              相机导航设置
+            </a>
+          );
+        }
+      }, 
+    },
+  // { label: '场景标签', prop: 'labelName', minWidth: 300 },
+  // { label: '代码', prop: 'code' },
+  {
+    label: '预览',
+    prop: 'preview',
+    minWidth: 300,
+    render: ({ row, column }) => {
+      if (!row.parent && row.labelList?.[0]?.id) {
+        return (
+          <a
+            href={`${appPCUrl}#/company?companyId=${row.id}&labelId=${row.labelList[0]?.id}`}
+            target="_blank"
+          >
+            公司预览
+          </a>
+        );
+      } else if (row.parent && !row.parent.parent) {
+        return (
+          <a href={`${appPCUrl}#/shop?id=${row.id}`} target="_blank">
+            车间预览
+          </a>
+        );
+      }
+    },
+  },
+];
+
+// interface DataSourceUser
+//   extends UseComType<UseWorkshopType<UseWorkspaceType>> {
+//   parent?: UseComType<UseWorkshopType<UseWorkspaceType>> | null;
+// }
+// 修改: 现在排序车间或工位时按上一级id找 找到公司id为止
+
+// export const dataSourceWithParent = (d: DataSourceUser[], parent: DataSourceUser | null) => {
+//   d.forEach((item, _index) => {
+//     item.parent = parent;
+
+//     if (item.children && item.children?.length > 0) {
+//       dataSourceWithParent(item.children as DataSourceUser[], item);
+//     }
+//   });
+
+//   return d;
+// };
+
+// export function removeParent(data) {
+//   return data.map((item) => {
+//     // 删除 tag 属性
+//     delete item.parent;
+
+//     // 递归处理子项
+//     if (item.children && item.children.length > 0) {
+//       item.children = removeParent(item.children);
+//     }
+
+//     return item;
+//   });
+// }
+
+//找到各个层级
+// export function findIndexByItem(data, targetItem, path = []) {
+//   for (let i = 0; i < data.length; i++) {
+//     const currentPath = path.concat(i);
+//     if (data[i].id === targetItem.id && data[i].name === targetItem.name) {
+//       return currentPath;
+//     }
+//     if (data[i].children && data[i].children.length > 0) {
+//       const childResult = findIndexByItem(data[i].children, targetItem, currentPath);
+//       if (childResult.length > 0) {
+//         return childResult;
+//       }
+//     }
+//   }
+//   return [];
+// }
+
+//用于重新修改serial
+// export const updateSerials = (data) => {
+//   for (let i = 0; i < data.length; i++) {
+//     data[i].serial = i;
+
+//     // 如果有子项,递归查找
+//     if (data[i].children && data[i].children.length > 0) {
+//       updateSerials(data[i].children);
+//     }
+//   }
+//   return data;
+//   // return false; // 表示未找到目标项
+// };
+
+//用于新增数据
+// export const updateData = (data, targetId, newAdd) => {
+//   for (let i = 0; i < data.length; i++) {
+//     const currentItem = data[i];
+
+//     if (currentItem.id === targetId) {
+//       if (!currentItem.children) {
+//         currentItem.children = [];
+//       }
+//       currentItem.children.push(newAdd);
+//       return true; // 表示已经找到并修改
+//     }
+
+//     // 如果有子项,递归查找
+//     if (currentItem.children && currentItem.children.length > 0) {
+//       const found = updateData(currentItem.children, targetId, newAdd);
+
+//       if (found) {
+//         return true; // 如果在子项中找到目标项,停止继续查找
+//       }
+//     }
+//   }
+
+//   return false; // 表示未找到目标项
+// };
+
+//判断该条数据的层级
+// export const findItemLevel = (data, targetId, targetName, currentLevel = 0) => {
+//   for (let i = 0; i < data.length; i++) {
+//     const item = data[i];
+
+//     if (item.id === targetId && item.name === targetName) {
+//       return currentLevel;
+//     }
+
+//     if (item.children && item.children.length > 0) {
+//       const childLevel = findItemLevel(item.children, targetId, targetName, currentLevel + 1);
+//       if (childLevel !== -1) {
+//         return childLevel;
+//       }
+//     }
+//   }
+
+//   return -1;
+// };
+
+
+//得到parent
+// export const getParent = (data: DataSourceUser[], targetCode: string) => {
+
+
+//   //let parentNode = {} as DataSourceUser
+//   for (let i = 0; i < data.length; i++) {
+//     const item = data[i];
+
+//     if (item.code === targetCode) {
+//       // parentNode = item
+//       return item
+//     }
+
+//     if (item.children && item.children.length > 0) {
+//       const foundItem = getParent(item.children as DataSourceUser[], targetCode);
+//       if (foundItem) {
+//         return foundItem
+//       }
+//     }
+//   }
+
+//   return null;
+// };
+
+//删除行
+// export const deleteTableRow = (dataSource, targetId) => {
+//   const deleteRecursive = (data) => {
+//     for (let i = 0; i < data.length; i++) {
+//       const currentItem = data[i];
+
+//       if (currentItem.id === targetId) {
+//         // 删除当前项
+//         data.splice(i, 1);
+//         return true;
+//       }
+
+//       // 如果有子项,递归查找
+//       if (currentItem.children && currentItem.children.length > 0) {
+//         const found = deleteRecursive(currentItem.children);
+
+//         if (found) {
+//           return true; // 如果在子项中找到目标项,停止继续查找
+//         }
+//       }
+//     }
+
+//     return false; // 表示未找到目标项
+//   };
+
+//   // 从顶层开始递归删除
+//   deleteRecursive(dataSource);
+// };
+
+//找出数据中的全部code
+// export const flattenCodes = (data) => {
+//   const codes: string[] = [];
+//   const traverse = (node: { code: string; children: any[] }) => {
+//     codes.push(node.code);
+//     if (node.children && node.children.length > 0) {
+//       node.children.forEach(traverse);
+//     }
+//   };
+//   data.forEach(traverse);
+//   return codes;
+// };
+
+// export enum ENABLED {
+//   FALSE = 1,
+//   TRUE = 0,
+// }

+ 48 - 0
src/views/system-config/scene-manage/store/use-com-tree.ts

@@ -0,0 +1,48 @@
+import { getComShopSpaceTree } from '@/api/scene/scene.ts';
+import { ComTreeType } from '@/types/scene/type.ts';
+import { defineStore } from 'pinia';
+import { ref } from 'vue';
+// import { dataSourceWithParent } from './use-table-method';
+
+export const useComTree = defineStore('scene-data', () => {
+  //场景数据
+  const comTreeData = ref<ComTreeType[]>([]);
+
+  /**
+   * @description 获取公司树结构数据并预处理
+   * @version V4
+   * @author Yunfeng
+   * @date 2025-01-13
+   */
+  const getComTreeDetail = () => {
+    getComShopSpaceTree().then((res) => {
+      comTreeData.value = comTreeWithUniqueCode(res);
+    });
+  };
+
+  /**
+   * @description 为公司树中每个节点添加唯一性标识UniqueCode,用于表格树结构的row-key
+   * @version V4
+   * @author Yunfeng
+   * @date 2025-01-13
+   */
+  const comTreeWithUniqueCode = (tree: ComTreeType[]) => {
+    tree.forEach((item) => {
+      item.uniqueCode = `${item.id}`;
+      item.children &&
+        item.children.forEach((item) => {
+          item.uniqueCode = `${item.uniqueCode}-${item.id}`;
+          if (item.children) {
+            item.children.forEach((child) => {
+              child.uniqueCode = `${item.uniqueCode}-${child.id}`;
+            });
+          }
+        });
+    });
+    return tree;
+  };
+
+  return { comTreeData, getComTreeDetail };
+});
+
+export default useComTree;

+ 9 - 9
src/views/system/role/CreateUserDrawer.vue

@@ -90,7 +90,7 @@
   import { ElMessage } from 'element-plus';
   import type { userFormParamsType } from './types';
   import { addRole, getFeaturePermissions, roleUserInfo, updateRole } from '@/api/system/role';
-  import useScene from '@/views/system-config/scene-manage/hook/use-scene';
+  import useComTree from '@/views/system-config/scene-manage/store/use-com-tree';
   import { storeToRefs } from 'pinia';
   import { useGlobSetting } from '@/hooks/setting';
   import { uid } from 'uid';
@@ -98,13 +98,13 @@
   const globSetting = useGlobSetting();
   const disableDepartmentEdit = globSetting.disableDepartmentEdit;
 
-  const sceneInfos = useScene();
-  const { tableData } = storeToRefs(sceneInfos);
-  const { getSceneDetail } = sceneInfos;
+  const comTree = useComTree();
+  const { comTreeData } = storeToRefs(comTree);
+  const { getComTreeDetail } = comTree;
 
   const workshopFuncPermissionMap = computed(() => {
     const tempMap = {};
-    tableData.value.forEach((company) => {
+    comTreeData.value.forEach((company) => {
       const shops = company.children;
       if (shops && shops.length) {
         shops.forEach((shop) => {
@@ -140,9 +140,9 @@
 
   const treeData = computed(() => {
     const newList: any[] = [];
-    if (tableData.value && tableData.value.length) {
-      for (let i = 0; i < tableData.value.length; i++) {
-        const data = tableData.value[i];
+    if (comTreeData.value && comTreeData.value.length) {
+      for (let i = 0; i < comTreeData.value.length; i++) {
+        const data = comTreeData.value[i];
         if (data.children && data.children.length) {
           const treeItem = {
             id: data.id,
@@ -461,7 +461,7 @@
   }
 
   onMounted(() => {
-    getSceneDetail();
+    getComTreeDetail();
     getFeaturePermissions().then((res) => {
       if (res[0]?.children) {
         modeList.value = res[0].children;