瀏覽代碼

模型替换

hrx 2 年之前
父節點
當前提交
a58cc819d4
共有 69 個文件被更改,包括 644 次插入933 次删除
  1. 2 1
      .env.development
  2. 2 2
      .env.production
  3. 1 1
      build/constant.ts
  4. 2 2
      index.html
  5. 二進制
      public/model/glft/cf/lmcf.glb
  6. 二進制
      public/model/glft/fc/ddFc.glb
  7. 二進制
      public/model/glft/fc/sdFc.glb
  8. 8 0
      src/App.vue
  9. 3 2
      src/components/Container/src/Adaptive.vue
  10. 2 1
      src/components/Form/src/components/ApiTreeSelect.vue
  11. 6 8
      src/components/Form/src/components/FormItem.vue
  12. 3 4
      src/components/Form/src/jeecg/components/JTreeSelect.vue
  13. 29 161
      src/components/Form/src/jeecg/components/MTreeSelect.vue
  14. 2 2
      src/components/Form/src/jeecg/components/modal/PositionSelectModal.vue
  15. 1 1
      src/components/Form/src/jeecg/components/modal/RoleSelectModal.vue
  16. 32 31
      src/components/jeecg/OnLine/SearchFormItem.vue
  17. 2 2
      src/design/var/index.less
  18. 69 0
      src/design/vent/antCss.less
  19. 1 1
      src/design/vent/comment.less
  20. 4 3
      src/design/vent/index.less
  21. 28 11
      src/hooks/core/threejs/useThree.ts
  22. 17 2
      src/layouts/default/content/index.vue
  23. 2 2
      src/layouts/default/header/MultipleHeader.vue
  24. 1 0
      src/layouts/default/header/index.less
  25. 1 1
      src/layouts/default/index.vue
  26. 2 2
      src/layouts/default/sider/bottomSideder.vue
  27. 1 1
      src/layouts/default/sider/bottomSideder1.vue
  28. 2 0
      src/qiankun/apps.ts
  29. 7 3
      src/qiankun/index.ts
  30. 4 4
      src/views/dashboard/Analysis/homePage/IndexTask.vue
  31. 6 9
      src/views/dashboard/Analysis/index.vue
  32. 2 2
      src/views/demo/jeecg/JVxeTableDemo/JVxeDemo4.vue
  33. 5 5
      src/views/demo/jeecg/Native/one/OneNativeList.vue
  34. 2 2
      src/views/system/role/role.api.ts
  35. 2 1
      src/views/vent/comment/EditRowTable.vue
  36. 34 7
      src/views/vent/deviceManager/comment/DeviceModal.vue
  37. 1 1
      src/views/vent/deviceManager/comment/FormModal.vue
  38. 28 6
      src/views/vent/deviceManager/comment/NormalTable.vue
  39. 39 1
      src/views/vent/deviceManager/comment/pointTabel/point.api.ts
  40. 50 27
      src/views/vent/deviceManager/comment/pointTabel/point.data.ts
  41. 7 0
      src/views/vent/deviceManager/damperTabel/damper.api.ts
  42. 26 17
      src/views/vent/deviceManager/damperTabel/damper.data.ts
  43. 3 2
      src/views/vent/deviceManager/damperTabel/index.vue
  44. 1 1
      src/views/vent/deviceManager/deviceColumns/index.vue
  45. 1 1
      src/views/vent/deviceManager/fanTabel/index.vue
  46. 1 1
      src/views/vent/deviceManager/ledTabel/index.vue
  47. 1 1
      src/views/vent/deviceManager/pointTabel/index.vue
  48. 7 0
      src/views/vent/deviceManager/pointTabel/point.api.ts
  49. 8 467
      src/views/vent/deviceManager/pointTabel/point.data.ts
  50. 1 1
      src/views/vent/deviceManager/sensorTabel/index.vue
  51. 1 1
      src/views/vent/deviceManager/substationTabel/index.vue
  52. 1 1
      src/views/vent/deviceManager/windWindowTabel/index.vue
  53. 1 1
      src/views/vent/deviceManager/windfindingTabel/index.vue
  54. 2 1
      src/views/vent/monitorManager/comment/GroupMonitorTable.vue
  55. 1 2
      src/views/vent/monitorManager/comment/MonitorTable.vue
  56. 13 5
      src/views/vent/monitorManager/fanLocalMonitor/index.vue
  57. 45 22
      src/views/vent/monitorManager/gateMonitor/gate.threejs.ts
  58. 1 1
      src/views/vent/monitorManager/gateMonitor/index.vue
  59. 74 53
      src/views/vent/monitorManager/mainFanMonitor/index.vue
  60. 1 1
      src/views/vent/monitorManager/mainFanMonitor/mainWind.threejs.ts
  61. 5 1
      src/views/vent/monitorManager/mainFanMonitor/zhedie.threejs.ts
  62. 2 2
      src/views/vent/monitorManager/windowMonitor/dandaoFc.threejs.ts
  63. 1 1
      src/views/vent/monitorManager/windowMonitor/index.vue
  64. 3 10
      src/views/vent/monitorManager/windowMonitor/shuangdaoFc.threejs.ts
  65. 6 4
      src/views/vent/monitorManager/windowMonitor/window.threejs.ts
  66. 6 6
      src/views/vent/monitorManager/windrectMonitor/duishe.threejs.ts
  67. 13 12
      src/views/vent/monitorManager/windrectMonitor/longmen.threejs.ts
  68. 7 7
      src/views/vent/monitorManager/windrectMonitor/windrect.threejs.ts
  69. 2 2
      src/views/vent/monitorManager/windrectMonitor/zhedie.threejs.ts

+ 2 - 1
.env.development

@@ -24,6 +24,7 @@ VITE_GLOB_DOMAIN_URL=http://47.94.222.6:9999
 VITE_GLOB_API_URL_PREFIX=
 
 #微前端qiankun应用,命名必须以VITE_APP_SUB_开头,jeecg-app-1为子应用的项目名称,也是子应用的路由父路径
-VITE_APP_SUB_micro-need-air = '//localhost:8099/'
+VITE_APP_SUB_micro-need-air = '//182.92.126.35:8099/'
 VITE_APP_SUB_micro-vent-3dModal = '//localhost:8091/'
+VITE_APP_SUB_micro-fire-front = '//localhost:8090/'
 

+ 2 - 2
.env.production

@@ -39,5 +39,5 @@ VITE_LEGACY = false
 VITE_3D_MODAL_ARR = fm/amendakai.glb,fm/fm-4.glb,9f/9f-processed
 
 #微前端qiankun应用,命名必须以VITE_APP_SUB_开头,jeecg-app-1为子应用的项目名称,也是子应用的路由父路径
-VITE_APP_SUB_micro-need-air = '//192.168.10.109:4173/'
-VITE_APP_SUB_micro-vent-3dModal = '//192.168.10.109:8091/'
+VITE_APP_SUB_micro-need-air = '//182.92.126.35:8099/'
+VITE_APP_SUB_micro-vent-3dModal = '//47.94.222.6:7121/'

+ 1 - 1
build/constant.ts

@@ -1,6 +1,6 @@
 /**
  * The name of the configuration file entered in the production environment
  */
-export const GLOB_CONFIG_FILE_NAME = '_app.config.js';
+export const GLOB_CONFIG_FILE_NAME = 'app.config.js';
 
 export const OUTPUT_DIR = 'dist';

+ 2 - 2
index.html

@@ -33,9 +33,9 @@
         html[data-theme='dark'] .app-loading .app-loading-title {
           color: rgba(255, 255, 255, 0.85);
         }
-        .style-styleTwo {
+        /* .style-styleTwo {
           overflow: hidden !important;
-        }
+        } */
 
         .app-loading {
           display: flex;

二進制
public/model/glft/cf/lmcf.glb


二進制
public/model/glft/fc/ddFc.glb


二進制
public/model/glft/fc/sdFc.glb


+ 8 - 0
src/App.vue

@@ -18,6 +18,14 @@
 
   // 解决日期时间国际化问题
   import 'dayjs/locale/zh-cn';
+
+  ConfigProvider.config({
+    prefixCls: 'vent-base',
+    theme: {
+      primaryColor: '#1890ff',
+    },
+  });
+
   // support Multi-language
   const { getAntdLocale } = useLocale();
   const width = ref(document.body.clientWidth);

+ 3 - 2
src/components/Container/src/Adaptive.vue

@@ -100,6 +100,7 @@
 
       //重置缩放比例
       const onResize = async () => {
+        // debugger;
         await initSize();
         updateScale();
         setRem();
@@ -152,8 +153,8 @@
   });
 </script>
 
-<style lang="less">
-  #well-container {
+<style lang="less" scoped>
+  #adaptive-container {
     position: fixed;
     top: 0;
     left: 0;

+ 2 - 1
src/components/Form/src/components/ApiTreeSelect.vue

@@ -1,5 +1,5 @@
 <template>
-  <a-tree-select v-bind="getAttrs" @change="handleChange">
+  <a-tree-select v-bind="getAttrs" :field-names="fieldNames" @change="handleChange">
     <template #[item]="data" v-for="item in Object.keys($slots)">
       <slot :name="item" v-bind="data || {}"></slot>
     </template>
@@ -21,6 +21,7 @@
     components: { ATreeSelect: TreeSelect, LoadingOutlined },
     props: {
       api: { type: Function as PropType<(arg?: Recordable) => Promise<Recordable>> },
+      fieldNames: { type: Object },
       params: { type: Object },
       immediate: { type: Boolean, default: true },
       resultField: propTypes.string.def(''),

+ 6 - 8
src/components/Form/src/components/FormItem.vue

@@ -267,21 +267,19 @@
         //update-begin-author:taoyan date:2022-9-7 for: VUEN-2061【样式】online表单超出4个 .. 省略显示
         //label宽度支持自定义
         const { label, helpMessage, helpComponentProps, subLabel, labelLength } = props.schema;
-        let showLabel:string = (label+'')
-        if(labelLength && showLabel.length>4){
+        let showLabel: string = label + '';
+        if (labelLength && showLabel.length > 4) {
           showLabel = showLabel.substr(0, labelLength);
         }
-        const titleObj = {title: label}
+        const titleObj = { title: label };
         const renderLabel = subLabel ? (
           <span>
             {label} <span class="text-secondary">{subLabel}</span>
           </span>
+        ) : labelLength ? (
+          <label {...titleObj}>{showLabel}</label>
         ) : (
-          labelLength ? (
-            <label {...titleObj}>{showLabel}</label>
-          ) : (
-            label
-          ) 
+          label
         );
         //update-end-author:taoyan date:2022-9-7 for: VUEN-2061【样式】online表单超出4个 .. 省略显示
         const getHelpMessage = isFunction(helpMessage) ? helpMessage(unref(getValues)) : helpMessage;

+ 3 - 4
src/components/Form/src/jeecg/components/JTreeSelect.vue

@@ -13,8 +13,7 @@
     v-bind="attrs"
     @change="onChange"
     @search="onSearch"
-  >
-  </a-tree-select>
+  />
 </template>
 <script lang="ts" setup>
   /*
@@ -97,9 +96,9 @@
    */
   async function loadItemByCode() {
     if (!props.value || props.value == '0') {
-      if(props.multiple){
+      if (props.multiple) {
         treeValue.value = [];
-      }else{
+      } else {
         treeValue.value = null;
       }
     } else {

+ 29 - 161
src/components/Form/src/jeecg/components/MTreeSelect.vue

@@ -3,12 +3,14 @@
     allowClear
     style="width: 100%"
     :getPopupContainer="(node) => node.parentNode"
-    :dropdownStyle="{ maxHeight: '400px', overflow: 'auto' }"
+    :dropdownStyle="{ maxHeight: '400px', overflow: 'auto', zIndex: 99999 }"
     :placeholder="placeholder"
-    :value="treeValue"
     :treeData="treeData"
-    :field-names="fieldNames"
-    v-bind="attrs"
+    :field-names="{
+      children: 'children',
+      label: 'itemText',
+      value: 'itemValue',
+    }"
     @change="onChange"
     @search="onSearch"
   />
@@ -18,186 +20,55 @@
    * 异步树加载组件 通过传入表名 显示字段 存储字段 加载一个树控件
    * <j-tree-select dict="aa_tree_test,aad,id" pid-field="pid" ></j-tree-select>
    * */
-  import { ref, watch, unref } from 'vue';
+  import { ref, watch, unref, onMounted } from 'vue';
   import { defHttp } from '/@/utils/http/axios';
   import { propTypes } from '/@/utils/propTypes';
   import { useAttrs } from '/@/hooks/core/useAttrs';
   import { useMessage } from '/@/hooks/web/useMessage';
+  import { async } from 'rxjs';
 
   enum Api {
     url = '/sys/dict/DeviceKind/query',
-    // view = '/sys/dict/loadDictItem/',
   }
 
   const props = defineProps({
     value: propTypes.string.def(''),
     placeholder: propTypes.string.def('请选择'),
-    fieldNames: propTypes.object.def({}),
-    // dict: propTypes.string.def('id'),
-    // parentCode: propTypes.string.def(''),
-    // pidField: propTypes.string.def('pid'),
-    // //update-begin---author:wangshuai ---date:20220620  for:JTreeSelect组件pidValue还原成空,否则会影响自定义组件树示例------------
-    // pidValue: propTypes.string.def(''),
-    // //update-end---author:wangshuai ---date:20220620  for:JTreeSelect组件pidValue还原成空,否则会影响自定义组件树示例--------------
-    // hasChildField: propTypes.string.def(''),
-    // condition: propTypes.string.def(''),
     multiple: propTypes.bool.def(false),
     loadTriggleChange: propTypes.bool.def(false),
     reload: propTypes.number.def(1),
   });
-  const attrs = useAttrs();
   const emit = defineEmits(['change', 'update:value']);
   const { createMessage } = useMessage();
   //树形下拉数据
   const treeData = ref<any[]>([]);
   //选择数据
   const treeValue = ref<any>(null);
-  const tableName = ref<any>('');
-  const text = ref<any>('');
-  const code = ref<any>('');
-  // /**
-  //  * 监听value数据并初始化
-  //  */
-  // watch(
-  //   () => props.value,
-  //   () => loadItemByCode(),
-  //   { deep: true, immediate: true }
-  // );
-  // /**
-  //  * 监听dict变化
-  //  */
-  // watch(
-  //   () => props.dict,
-  //   () => {
-  //     initDictInfo();
-  //     loadRoot();
-  //   },
-  //   { deep: true, immediate: true }
-  // );
-
-  // //update-begin-author:taoyan date:2022-5-25 for: VUEN-1056 15、严重——online树表单,添加的时候,父亲节点是空的
-  // watch(
-  //   () => props.reload,
-  //   async () => {
-  //     treeData.value = [];
-  //     await loadRoot();
-  //   },
-  //   {
-  //     immediate: false,
-  //   }
-  // );
-  //update-end-author:taoyan date:2022-5-25 for: VUEN-1056 15、严重——online树表单,添加的时候,父亲节点是空的
 
   /**
    * 根据code获取下拉数据并回显
    */
   async function loadItemByCode() {
-    if (!props.value || props.value == '0') {
-      treeValue.value = null;
-    } else {
-      let params = { key: props.value };
-      let result = await defHttp.get({ url: `${Api.view}${props.dict}`, params }, { isTransformResponse: false });
-      if (result.success) {
-        let values = props.value.split(',');
-        treeValue.value = result.result.map((item, index) => ({
-          key: values[index],
-          value: values[index],
-          label: item,
-        }));
-        onLoadTriggleChange(result.result[0]);
-      }
-    }
-  }
-
-  function onLoadTriggleChange(text) {
-    //只有单选才会触发
-    if (!props.multiple && props.loadTriggleChange) {
-      emit('change', props.value, text);
-    }
-  }
-
-  /**
-   * 初始化数据
-   */
-  function initDictInfo() {
-    let arr = props.dict?.split(',');
-    tableName.value = arr[0];
-    text.value = arr[1];
-    code.value = arr[2];
-  }
-
-  /**
-   * 加载下拉树形数据
-   */
-  async function loadRoot() {
-    let params = {
-      // pid: props.pidValue,
-      // pidField: props.pidField,
-      // hasChildField: props.hasChildField,
-      // condition: props.condition,
-      // tableName: unref(tableName),
-      // text: unref(text),
-      // code: unref(code),
-    };
-    let res = await defHttp.get({ url: Api.url, params }, { isTransformResponse: false });
-    if (res.success && res.result) {
-      for (let i of res.result) {
-        i.value = i.key;
-        i.isLeaf = !!i.leaf;
-      }
-      treeData.value = [...res.result];
-    } else {
-      console.log('数根节点查询结果异常', res);
-    }
-  }
-
-  /**
-   * 异步加载数据
-   */
-  async function asyncLoadTreeData(treeNode) {
-    if (treeNode.dataRef.children) {
-      return Promise.resolve();
-    }
-    let pid = treeNode.dataRef.key;
-    let params = {
-      pid: pid,
-      pidField: props.pidField,
-      hasChildField: props.hasChildField,
-      condition: props.condition,
-      tableName: unref(tableName),
-      text: unref(text),
-      code: unref(code),
-    };
-    let res = await defHttp.get({ url: Api.url, params }, { isTransformResponse: false });
-    if (res.success) {
-      for (let i of res.result) {
-        i.value = i.key;
-        i.isLeaf = !!i.leaf;
-      }
-      //添加子节点
-      addChildren(pid, res.result, treeData.value);
-      treeData.value = [...treeData.value];
-    }
-    return Promise.resolve();
-  }
+    treeData.value = [];
+    let params = { key: props.value };
+    let result = await defHttp.get({ url: Api.url, params }, { isTransformResponse: false });
+    if (result.success) {
+      console.log(999, result.result);
 
-  /**
-   * 加载子节点
-   */
-  function addChildren(pid, children, treeArray) {
-    if (treeArray && treeArray.length > 0) {
-      for (let item of treeArray) {
-        if (item.key == pid) {
-          if (!children || children.length == 0) {
-            item.isLeaf = true;
-          } else {
-            item.children = children;
-          }
-          break;
+      result.result.forEach((item, index) => {
+        if (item.children && item.children.length > 0) {
+          treeData.value.push({
+            children: item.children,
+            itemText: item.itemText,
+            itemValue: item.itemValue,
+          });
         } else {
-          addChildren(pid, children, item.children);
+          treeData.value.push({
+            itemText: item.itemText,
+            itemValue: item.itemValue,
+          });
         }
-      }
+      });
     }
   }
 
@@ -210,7 +81,7 @@
     } else if (value instanceof Array) {
       emitValue(value.map((item) => item.value).join(','));
     } else {
-      emitValue(value.value);
+      emitValue(value);
     }
     treeValue.value = value;
     console.log(treeValue.value);
@@ -253,13 +124,10 @@
     });
   }
 
-  loadRoot();
   // // onCreated
-  // validateProp().then(() => {
-  //   initDictInfo();
-  //   loadRoot();
-  //   loadItemByCode();
-  // });
+  validateProp().then(async () => {
+    await loadItemByCode();
+  });
 </script>
 
 <style lang="less"></style>

+ 2 - 2
src/components/Form/src/jeecg/components/modal/PositionSelectModal.vue

@@ -23,7 +23,7 @@
             :rowSelection="rowSelection"
             :indexColumnProps="indexColumnProps"
             v-bind="getBindValue"
-          ></BasicTable>
+          />
         </a-col>
         <a-col :span="showSelected ? 6 : 0">
           <BasicTable
@@ -34,7 +34,7 @@
           >
             <!--操作栏-->
             <template #action="{ record }">
-              <a href="javascript:void(0)" @click="handleDeleteSelected(record)"><Icon icon="ant-design:delete-outlined"></Icon></a>
+              <a href="javascript:void(0)" @click="handleDeleteSelected(record)"><Icon icon="ant-design:delete-outlined" /></a>
             </template>
           </BasicTable>
         </a-col>

+ 1 - 1
src/components/Form/src/jeecg/components/modal/RoleSelectModal.vue

@@ -11,7 +11,7 @@
         :searchInfo="searchInfo"
         :rowSelection="rowSelection"
         :indexColumnProps="indexColumnProps"
-      ></BasicTable>
+      />
     </BasicModal>
   </div>
 </template>

+ 32 - 31
src/components/jeecg/OnLine/SearchFormItem.vue

@@ -4,12 +4,7 @@
       <span :title="item.label" class="label-text">{{ item.label }}</span>
     </template>
     <template v-if="single_mode === item.mode">
-      <a-date-picker
-        :showTime="false"
-        valueFormat="YYYY-MM-DD"
-        :placeholder="'请选择' + item.label"
-        v-model:value="queryParam[item.field]"
-      ></a-date-picker>
+      <a-date-picker :showTime="false" valueFormat="YYYY-MM-DD" :placeholder="'请选择' + item.label" v-model:value="queryParam[item.field]" />
     </template>
     <template v-else>
       <a-date-picker
@@ -18,7 +13,7 @@
         placeholder="开始日期"
         v-model:value="queryParam[item.field + '_begin']"
         style="width: calc(50% - 15px)"
-      ></a-date-picker>
+      />
       <span class="group-query-strig">~</span>
       <a-date-picker
         :showTime="false"
@@ -26,7 +21,7 @@
         placeholder="结束日期"
         v-model:value="queryParam[item.field + '_end']"
         style="width: calc(50% - 15px)"
-      ></a-date-picker>
+      />
     </template>
   </a-form-item>
 
@@ -40,7 +35,7 @@
         :show-time="true"
         valueFormat="YYYY-MM-DD HH:mm:ss"
         v-model:value="queryParam[item.field]"
-      ></a-date-picker>
+      />
     </template>
     <template v-else>
       <a-date-picker
@@ -49,7 +44,7 @@
         valueFormat="YYYY-MM-DD HH:mm:ss"
         v-model:value="queryParam[item.field + '_begin']"
         style="width: calc(50% - 9px); min-width: 60px"
-      ></a-date-picker>
+      />
       <span class="group-query-strig" style="width: auto; padding: 0 4px">~</span>
       <a-date-picker
         placeholder="2选择结束时间"
@@ -57,7 +52,7 @@
         valueFormat="YYYY-MM-DD HH:mm:ss"
         v-model:value="queryParam[item.field + '_end']"
         style="width: calc(50% - 9px); min-width: 60px"
-      ></a-date-picker>
+      />
     </template>
   </a-form-item>
 
@@ -66,7 +61,7 @@
       <span :title="item.label" class="label-text">{{ item.label }}</span>
     </template>
     <template v-if="single_mode === item.mode">
-      <a-date-picker :placeholder="'请选择' + item.label" mode="time" valueFormat="HH:mm:ss" v-model:value="queryParam[item.field]"></a-date-picker>
+      <a-date-picker :placeholder="'请选择' + item.label" mode="time" valueFormat="HH:mm:ss" v-model:value="queryParam[item.field]" />
     </template>
     <template v-else>
       <a-date-picker
@@ -75,7 +70,7 @@
         valueFormat="HH:mm:ss"
         v-model:value="queryParam[item.field + '_begin']"
         style="width: calc(50% - 15px)"
-      ></a-date-picker>
+      />
       <span class="group-query-strig">~</span>
       <a-date-picker
         placeholder="请选择结束时间"
@@ -83,7 +78,7 @@
         valueFormat="HH:mm:ss"
         v-model:value="queryParam[item.field + '_end']"
         style="width: calc(50% - 15px)"
-      ></a-date-picker>
+      />
     </template>
   </a-form-item>
 
@@ -95,8 +90,7 @@
     <template #label>
       <span :title="item.label" class="label-text">{{ item.label }}</span>
     </template>
-    <JDictSelectTag v-if="item.config === '1'" :placeholder="'请选择' + item.label" v-model="queryParam[item.field]" :dictCode="getDictCode(item)">
-    </JDictSelectTag>
+    <JDictSelectTag v-if="item.config === '1'" :placeholder="'请选择' + item.label" v-model="queryParam[item.field]" :dictCode="getDictCode(item)" />
     <a-select v-else :placeholder="'请选择' + item.label" v-model:value="queryParam[item.field]">
       <template v-for="(obj, index) in dictOptions[getDictOptionKey(item)]" :key="index">
         <a-select-option :value="obj.value"> {{ obj.text }}</a-select-option>
@@ -116,14 +110,8 @@
       :pidValue="item.pidValue"
       :hasChildField="item.hasChildField"
       load-triggle-change
-    >
-    </JTreeSelect>
-    <MTreeSelect
-      :placeholder="'请选择' + item.label"
-      v-model:value="queryParam[item.field]"
-      load-triggle-change
-    >
-    </MTreeSelect>
+    />
+    <MTreeSelect :placeholder="'请选择' + item.label" v-model:value="queryParam[item.field]" load-triggle-change />
   </a-form-item>
 
   <a-form-item v-else-if="item.view === CompTypeEnum.CatTree" :labelCol="labelCol" :class="'jeecg-online-search'">
@@ -137,8 +125,12 @@
     <template #label>
       <span :title="item.label" class="label-text">{{ item.label }}</span>
     </template>
-    <JDictSelectTag v-if="item.config === '1'" v-model:value="queryParam[item.field]" :placeholder="'请选择' + item.label" :dict="getDictCode(item)">
-    </JDictSelectTag>
+    <JDictSelectTag
+      v-if="item.config === '1'"
+      v-model:value="queryParam[item.field]"
+      :placeholder="'请选择' + item.label"
+      :dict="getDictCode(item)"
+    />
     <!--TODO 新需要的组件-->
     <!-- <j-online-search-select
                 v-else
@@ -153,7 +145,7 @@
     <template #label>
       <span :title="item.label" class="label-text">{{ item.label }}</span>
     </template>
-    <JSelectUserByDept v-model:value="queryParam[item.field]" :placeholder="'请选择' + item.label"></JSelectUserByDept>
+    <JSelectUserByDept v-model:value="queryParam[item.field]" :placeholder="'请选择' + item.label" />
   </a-form-item>
 
   <a-form-item v-else-if="item.view == CompTypeEnum.SelDepart" :labelCol="labelCol" :class="'jeecg-online-search'">
@@ -209,12 +201,12 @@
       <span :title="item.label" class="label-text">{{ item.label }}</span>
     </template>
     <template v-if="single_mode === item.mode">
-      <a-input :placeholder="'请输入' + item.label" v-model:value="queryParam[item.field]"></a-input>
+      <a-input :placeholder="'请输入' + item.label" v-model:value="queryParam[item.field]" />
     </template>
     <template v-else>
-      <a-input :placeholder="'请输入开始' + item.label" v-model:value="queryParam[item.field + '_begin']" style="width: calc(50% - 15px)"></a-input>
+      <a-input :placeholder="'请输入开始' + item.label" v-model:value="queryParam[item.field + '_begin']" style="width: calc(50% - 15px)" />
       <span class="group-query-strig">~</span>
-      <a-input :placeholder="'请输入结束' + item.label" v-model:value="queryParam[item.field + '_end']" style="width: calc(50% - 15px)"></a-input>
+      <a-input :placeholder="'请输入结束' + item.label" v-model:value="queryParam[item.field + '_end']" style="width: calc(50% - 15px)" />
     </template>
   </a-form-item>
 </template>
@@ -224,7 +216,16 @@
   import { defineComponent, ref } from 'vue';
   import { DateTypeEnum } from '/@/enums/DateTypeEnum.ts';
   import { CompTypeEnum } from '/@/enums/CompTypeEnum.ts';
-  import { JDictSelectTag, JTreeSelect, MTreeSelect, JCategorySelect, JSelectUserByDept, JSelectDept, JPopup, JAreaLinkage } from '/@/components/Form';
+  import {
+    JDictSelectTag,
+    JTreeSelect,
+    MTreeSelect,
+    JCategorySelect,
+    JSelectUserByDept,
+    JSelectDept,
+    JPopup,
+    JAreaLinkage,
+  } from '/@/components/Form';
   export default defineComponent({
     name: 'JPopupOnlReport',
     components: {

+ 2 - 2
src/design/var/index.less

@@ -11,8 +11,8 @@
 @multiple-smooth-height: 50px;
 
 // headers
-// @header-height: 48px;
-@header-height: 120px;
+@header-height: 48px;
+// @header-height: 120px;
 
 // logo width
 @logo-width: 32px;

+ 69 - 0
src/design/vent/antCss.less

@@ -156,6 +156,34 @@ tr.ant-table-expanded-row:hover > td {
     color: #39e9fe !important;
   }
 }
+.ant-modal-body {
+  .j-box-bottom-button-float {
+    background-color: #ffffff00 !important;
+  }
+  .ant-form {
+    label {
+      color: #fff;
+    }
+    .anticon.ant-input-clear-icon,
+    .anticon {
+      color: #fff !important;
+    }
+    .ant-select-selector {
+      color: #fff;
+      background-color: #ffffff00 !important;
+    }
+    .ant-form-item-control-input-content {
+      .ant-input-affix-wrapper {
+        background-color: #ffffff00 !important;
+      }
+      .ant-input {
+        color: #fff;
+        background-color: #ffffff00 !important;
+      }
+    }
+  }
+}
+
 .ant-modal-close {
   color: #ffffff !important;
 }
@@ -170,3 +198,44 @@ ant-spin-container:hover {
 .ant-pagination {
   color: @vent-font-color !important;
 }
+.vent-form {
+  .ant-form {
+    label {
+      color: #fff;
+    }
+    .anticon.ant-input-clear-icon,
+    .anticon {
+      color: #fff !important;
+    }
+    .ant-select-selector {
+      color: #fff;
+      background-color: #ffffff00 !important;
+    }
+    .ant-form-item-control-input-content {
+      .ant-input-affix-wrapper {
+        background-color: #ffffff00 !important;
+      }
+      .ant-input {
+        color: #fff;
+        background-color: #ffffff00 !important;
+      }
+    }
+    .ant-input-number {
+      width: 100% !important;
+      background: #ffffff00;
+      color: #fff;
+    }
+    .ant-form-item {
+      margin-right: 20px;
+    }
+  }
+}
+
+.ant-drawer {
+  background: #080a2c11 !important;
+  .ant-drawer-body,
+  .ant-drawer-header,
+  .jeecg-basic-drawer-footer {
+    background: #080a2c11 !important;
+  }
+}

+ 1 - 1
src/design/vent/comment.less

@@ -3,7 +3,7 @@
   display: flex;
   align-items: center;
 }
-.vent-vent-flex-row-between {
+.vent-flex-row-between {
   display: flex;
   align-items: center;
   justify-content: space-between;

+ 4 - 3
src/design/vent/index.less

@@ -15,7 +15,8 @@
   }
 }
 
-.jeecg-layout-content {
-  height: calc(100vh - 48px);
-  overflow-y: auto;
+.jeecg-basic-table {
+  .ant-table-wrapper {
+    padding: 0 !important;
+  }
 }

+ 28 - 11
src/hooks/core/threejs/useThree.ts

@@ -13,6 +13,9 @@ import { ShaderPass } from 'three/examples/jsm/postprocessing/ShaderPass.js';
 import { setModalCenter } from '/@/utils/threejs/util';
 import Stats from 'three/examples/jsm/libs/stats.module.js';
 import { useModelStore } from '/@/store/modules/threejs';
+// import * as dat from 'dat.gui';
+// const gui = new dat.GUI();
+// gui.domElement.style = 'position:absolute;top:10px;left:10px;z-index:99999999999999';
 
 class UseThree {
   stats: Stats | null = null; // 帧
@@ -33,7 +36,7 @@ class UseThree {
   rayCaster: THREE.Raycaster | null = null;
   animations: THREE.AnimationClip[] = [];
   mixers: THREE.AnimationMixer[] = [];
-  FPS = 40;
+  renderT = 1 / 60;
   timeS = 0;
   resourceTracker: ResourceTracker | null = null;
   track: any = null;
@@ -49,6 +52,8 @@ class UseThree {
     window.addEventListener('resize', this.resizeRenderer.bind(this));
     // 添加滚动事件,鼠标滚动模型执行动画
     // window.addEventListener('wheel', this.wheelRenderer.bind(this));
+
+    // this.canvasContainer?.appendChild(gui.domElement);
   }
   init(cssCanvas?) {
     // 初始化场景
@@ -66,17 +71,15 @@ class UseThree {
     }
     // this.setTestPlane();
     this.rayCaster = new THREE.Raycaster();
-    // this.createStats();
+    this.createStats();
     // this.removeSawtooth();
   }
 
   createStats() {
     this.stats = Stats();
     this.stats?.setMode(0);
-    this.stats.domElement.style.position = 'absolute';
-    this.stats.domElement.style.right = '0px';
-    this.stats.domElement.style.bottom = '10px';
-    document.body.appendChild(this.stats.domElement);
+    this.stats.domElement.style = 'position: absolute; top: 300px';
+    this.canvasContainer?.appendChild(this.stats.domElement);
   }
 
   initScene() {
@@ -96,10 +99,16 @@ class UseThree {
   }
 
   initCamera() {
-    this.camera = new THREE.PerspectiveCamera(50, this.canvasContainer.clientWidth / this.canvasContainer.clientHeight, 0.0000001, 10000);
+    this.camera = new THREE.PerspectiveCamera(50, this.canvasContainer.clientWidth / this.canvasContainer.clientHeight, 0.0000001, 1000);
     //
     // const helper = new THREE.CameraHelper(this.camera);
     // this.scene?.add(helper);
+    // gui.add(this.camera.position, 'x', 0.00001, 10000);
+    // gui.add(this.camera.position, 'y', 0.00001, 10000);
+    // gui.add(this.camera.position, 'z', 0.00001, 10000);
+    // gui.add(this.camera, 'near', 0.01, 1).step(0.01);
+    // gui.add(this.camera, 'far', 10, 100000);
+    // gui.add(this.camera, 'fov', 0, 180);
   }
 
   initRenderer() {
@@ -265,11 +274,19 @@ class UseThree {
 
   animate() {
     if (this.animationId != -1) {
-      setTimeout(() => {
-        this.animationId = requestAnimationFrame(this.animate.bind(this));
-      }, 1000 / 30);
+      this.animationId = requestAnimationFrame(this.animate.bind(this));
+      // const T = this.clock?.getDelta() || 0;
+      // this.timeS = this.timeS + T;
+      // if (this.timeS > this.renderT) {
+      //   this.stats?.update();
+      //   // this.renderAnimationScene();
+      //   if (this.renderEnabled) {
+      //     this.render();
+      //   }
+      //   this.timeS = 0;
+      // }
       this.stats?.update();
-      this.renderAnimationScene();
+      // this.renderAnimationScene();
       if (this.renderEnabled) {
         this.render();
       }

+ 17 - 2
src/layouts/default/content/index.vue

@@ -1,5 +1,5 @@
 <template>
-  <div :class="[prefixCls, getLayoutContentMode]" v-loading="getOpenPageLoading && getPageLoading">
+  <div :class="[prefixCls, getLayoutContentMode, { 'layout-content-full': getShowFullHeader }]" v-loading="getOpenPageLoading && getPageLoading">
     <PageLayout />
     <!-- update-begin-author:zyf date:20211129 for:qiankun 挂载子应用盒子 -->
     <div id="content" class="app-view-box" v-if="openQianKun == 'true'"></div>
@@ -7,12 +7,14 @@
   </div>
 </template>
 <script lang="ts">
-  import { defineComponent, onMounted, ref, nextTick } from 'vue';
+  import { defineComponent, onMounted, unref, computed } from 'vue';
   import PageLayout from '/@/layouts/page/index.vue';
   import { useDesign } from '/@/hooks/web/useDesign';
   import { useRootSetting } from '/@/hooks/setting/useRootSetting';
   import { useTransitionSetting } from '/@/hooks/setting/useTransitionSetting';
   import { useContentViewHeight } from './useContentViewHeight';
+  import { useHeaderSetting } from '/@/hooks/setting/useHeaderSetting';
+  import { useRouter } from 'vue-router';
   import { start } from 'qiankun';
   import registerApps from '/@/qiankun';
   import { useGlobSetting } from '/@/hooks/setting';
@@ -23,9 +25,16 @@
       const { prefixCls } = useDesign('layout-content');
       const { getOpenPageLoading } = useTransitionSetting();
       const { getLayoutContentMode, getPageLoading } = useRootSetting();
+      const { getShowFullHeaderRef } = useHeaderSetting();
+      const router = useRouter();
+      const { currentRoute } = router;
       const globSetting = useGlobSetting();
       const openQianKun = globSetting.openQianKun;
       useContentViewHeight();
+      const getShowFullHeader = computed(() => {
+        const route = unref(currentRoute);
+        return getShowFullHeaderRef && !route.path.startsWith('/micro-');
+      });
       onMounted(() => {
         //注册openQianKun
         // console.log('window.qiankunStarted------>', window.qiankunStarted);
@@ -42,6 +51,7 @@
         getOpenPageLoading,
         getLayoutContentMode,
         getPageLoading,
+        getShowFullHeader,
       };
     },
   });
@@ -65,4 +75,9 @@
       z-index: @page-loading-z-index;
     }
   }
+  .layout-content-full {
+    height: calc(100vh - 48px);
+    margin-top: 48px;
+    overflow-y: auto;
+  }
 </style>

+ 2 - 2
src/layouts/default/header/MultipleHeader.vue

@@ -1,7 +1,7 @@
 <template>
   <!-- <div :style="getPlaceholderDomStyle" v-if="getIsShowPlaceholderDom"></div> -->
-  <div style="height: 18px; margin-bottom: 30px" v-if="getIsShowPlaceholderDom"></div>
-  <div :style="getWrapStyle" style="height: 18px; margin-bottom: 30px" :class="getClass">
+  <div v-if="getIsShowPlaceholderDom"></div>
+  <div :style="getWrapStyle" :class="getClass">
     <LayoutHeader v-if="getShowInsetHeaderRef" />
     <!--    <MultipleTabs v-if="getShowTabs" />-->
   </div>

+ 1 - 0
src/layouts/default/header/index.less

@@ -255,5 +255,6 @@
 }
 
 .vent-header {
+  height: 120px !important;
   background: url('/src/assets/images/vent/header-bg.png') no-repeat !important;
 }

+ 1 - 1
src/layouts/default/index.vue

@@ -1,5 +1,5 @@
 <template>
-  <Layout :class="prefixCls" v-bind="lockEvents">
+  <Layout :class="prefixCls" v-bind="lockEvents" style="height: 100%">
     <LayoutFeatures />
     <LayoutHeader fixed v-if="getShowFullHeader" />
     <Layout :class="[layoutClass]">

+ 2 - 2
src/layouts/default/sider/bottomSideder.vue

@@ -13,7 +13,7 @@
           </div>
         </div>
       </FourBorderBg>
-      <div class="vent-vent-flex-row-between menu-button-group">
+      <div class="vent-flex-row-between menu-button-group">
         <div class="vent-flex-row program-group">
           <template v-for="(programMenu, key) in menuModules" :key="key">
             <div
@@ -65,13 +65,13 @@
       function selectMenu(programMenu) {
         currentParentRoute.value = programMenu;
       }
+
       function handleMenuClick(path: Menu) {
         if (route.path.startsWith('/micro-')) {
           history.pushState({}, '', path.path);
         } else {
           go(path.path);
         }
-        // go(path.path);
         isShowMenu.value = 0;
       }
       const closeMenu = () => {

+ 1 - 1
src/layouts/default/sider/bottomSideder1.vue

@@ -12,7 +12,7 @@
         </div>
       </div>
     </FourBorderBg>
-    <div class="vent-vent-flex-row-between menu-button-group">
+    <div class="vent-flex-row-between menu-button-group">
       <div class="vent-flex-row program-group">
         <div v-for="(programMenu, index) in programMenus" class="program-menu" :key="index">{{ programMenu.title }}</div>
       </div>

+ 2 - 0
src/qiankun/apps.ts

@@ -8,6 +8,7 @@
 //子应用列表
 const _apps: object[] = [];
 for (const key in import.meta.env) {
+  // debugger;
   if (key.includes('VITE_APP_SUB_')) {
     const name = key.split('VITE_APP_SUB_')[1];
     const obj = {
@@ -28,4 +29,5 @@ for (const key in import.meta.env) {
     _apps.push(obj);
   }
 }
+console.log('子应用路由匹配规则', _apps);
 export const apps = _apps;

+ 7 - 3
src/qiankun/index.ts

@@ -68,9 +68,13 @@ function registerApps() {
   initGlState();
   //启动qiankun
   start({
-    sandbox: {
-      experimentalStyleIsolation: true,
-    },
+    // fetch: async (url: RequestInfo | URL, ...args: any) => {
+    //   console.log(url);
+    // },
+    // sandbox: {
+    //   experimentalStyleIsolation: true,
+    // },
+    sandbox: false,
   });
 }
 

+ 4 - 4
src/views/dashboard/Analysis/homePage/IndexTask.vue

@@ -27,7 +27,7 @@
             :pagination="false"
           >
             <template #ellipsisText="{ text }">
-              <JEllipsis :value="text" :length="textMaxLength"></JEllipsis>
+              <JEllipsis :value="text" :length="textMaxLength" />
             </template>
 
             <template #dayWarnning="{ text, record }">
@@ -67,7 +67,7 @@
             :pagination="false"
           >
             <template #ellipsisText="{ text }">
-              <JEllipsis :value="text" :length="textMaxLength"></JEllipsis>
+              <JEllipsis :value="text" :length="textMaxLength" />
             </template>
 
             <template #dayWarnning="{ text, record }">
@@ -104,7 +104,7 @@
             :pagination="false"
           >
             <template #ellipsisText="{ text }">
-              <JEllipsis :value="text" :length="textMaxLength"></JEllipsis>
+              <JEllipsis :value="text" :length="textMaxLength" />
             </template>
 
             <template #dayWarnning="{ text, record }">
@@ -137,7 +137,7 @@
             :pagination="false"
           >
             <template #ellipsisText="{ text }">
-              <JEllipsis :value="text" :length="textMaxLength"></JEllipsis>
+              <JEllipsis :value="text" :length="textMaxLength" />
             </template>
 
             <template #dayWarnning="{ text, record }">

+ 6 - 9
src/views/dashboard/Analysis/index.vue

@@ -1,10 +1,7 @@
 <template>
   <div class="vent-home">
     <div class="vent-home-header"></div>
-    <div class="home-container">
-      <div class="l-r-box left-box"> 111</div>
-      <div class="l-r-box right-box"> 222</div>
-    </div>
+    <div class="home-container"> </div>
   </div>
 </template>
 <script lang="ts" setup>
@@ -26,11 +23,11 @@
     height: calc(100vh);
     position: fixed;
     .vent-home-header {
-      width: 100%;
-      height: 110px;
-      position: fixed;
-      background: url('/@/assets/images/vent/home/home-header-bg.png') no-repeat;
-      background-position-y: -26px;
+      // width: 100%;
+      // height: 110px;
+      // position: fixed;
+      // background: url('/@/assets/images/vent/home/home-header-bg.png') no-repeat;
+      // background-position-y: -26px;
     }
     .home-container {
       width: 100%;

+ 2 - 2
src/views/demo/jeecg/JVxeTableDemo/JVxeDemo4.vue

@@ -138,12 +138,12 @@
     // 如果parent为空,则查询第一级菜单
     if (parent === '') {
       result = await defHttp.get({
-        url: '/sys/permissionNew/getSystemMenuList',
+        url: '/sys/permission/getSystemMenuList',
         params: {},
       });
     } else {
       result = await defHttp.get({
-        url: '/sys/permissionNew/getSystemSubmenu',
+        url: '/sys/permission/getSystemSubmenu',
         params: { parentId: parent },
       });
     }

+ 5 - 5
src/views/demo/jeecg/Native/one/OneNativeList.vue

@@ -9,14 +9,14 @@
         <template #overlay>
           <a-menu>
             <a-menu-item key="1" @click="batchDel">
-              <Icon icon="ant-design:delete-outlined"></Icon>
+              <Icon icon="ant-design:delete-outlined" />
               删除
             </a-menu-item>
           </a-menu>
         </template>
         <a-button
           >批量操作
-          <Icon icon="mdi:chevron-down"></Icon>
+          <Icon icon="mdi:chevron-down" />
         </a-button>
       </a-dropdown>
     </div>
@@ -43,7 +43,7 @@
         :rowSelection="{ selectedRowKeys: selectedRowKeys, onChange: onSelectChange }"
         @change="handleTableChange"
       >
-        <template slot="htmlSlot" slot-scope="text">
+        <template #htmlSlot="text">
           <div v-html="text"></div>
         </template>
         <template #imgSlot="{ text, record }">
@@ -79,7 +79,7 @@
         </template>
       </a-table>
     </div>
-    <OneNativeModal ref="oneProtogenesisModal" @ok="handleSuccess"></OneNativeModal>
+    <OneNativeModal ref="oneProtogenesisModal" @ok="handleSuccess" />
   </a-card>
 </template>
 
@@ -263,7 +263,7 @@
   function handleExportExcel(title) {
     let paramsForm = getQueryParams();
     if (selectedRowKeys.value && selectedRowKeys.value.length > 0) {
-      paramsForm['selections'] = selectedRowKeys.join(',');
+      paramsForm['selections'] = selectedRowKeys.value.join(',');
     }
     handleExportXls(title, Api.exportXls, filterObj(paramsForm));
   }

+ 2 - 2
src/views/system/role/role.api.ts

@@ -69,7 +69,7 @@ export const batchDeleteRole = (params, handleSuccess) => {
  * @param params
  */
 export const saveOrUpdateRole = (params, isUpdate) => {
-  let url = isUpdate ? Api.edit : Api.save;
+  const url = isUpdate ? Api.edit : Api.save;
   return defHttp.post({ url: url, params });
 };
 /**
@@ -156,7 +156,7 @@ export const addUserRole = (params, handleSuccess) => {
  * @param isUpdate 是否是更新数据
  */
 export const saveOrUpdateRoleIndex = (params, isUpdate) => {
-  let url = isUpdate ? Api.editRoleIndex : Api.saveRoleIndex;
+  const url = isUpdate ? Api.editRoleIndex : Api.saveRoleIndex;
   return defHttp.post({ url: url, params });
 };
 /**

+ 2 - 1
src/views/vent/comment/EditRowTable.vue

@@ -34,9 +34,10 @@
       const deviceType = inject('deviceType');
       const { createMessage: msg } = useMessage();
       const currentEditKeyRef = ref('');
+
       const [registerTable, { insertTableDataRecord, reload }] = useTable({
         title: '',
-        api: props.list?.bind(null, { devicetype: deviceType }),
+        api: props.list?.bind(null, { devicetype: deviceType, valuetype: '9' }),
         columns: props.columns as BasicColumn[],
         showIndexColumn: false,
         showTableSetting: false,

+ 34 - 7
src/views/vent/deviceManager/comment/DeviceModal.vue

@@ -1,10 +1,33 @@
 <template>
-  <BasicModal v-bind="$attrs" @register="registerModal" :title="title" width="900px" :showCancelBtn="false" :showOkBtn="false" :footer="null" destroyOnClose>
-    <a-tabs v-if="props.showtTab">
-      <a-tab-pane key="1" tab="基本信息" force-render> <FormModal :record="record" @saveOrUpdate="(values) => emit('saveOrUpdate', values)" /> </a-tab-pane>
-      <a-tab-pane key="2" tab="点表配置"><EditRowTable :columns="pointColumns" :list="pointList" @saveOrUpdate="savePointData" @deleteById="deletePointById" /></a-tab-pane>
+  <BasicModal
+    v-bind="$attrs"
+    @register="registerModal"
+    :title="title"
+    width="900px"
+    :showCancelBtn="false"
+    :showOkBtn="false"
+    :footer="null"
+    destroyOnClose
+  >
+    <a-tabs v-if="props.showTab">
+      <a-tab-pane key="1" tab="基本信息" force-render>
+        <FormModal :record="record" @saveOrUpdate="(values) => emit('saveOrUpdate', values)" />
+      </a-tab-pane>
+      <a-tab-pane key="2" tab="点表设备关联">
+        <template v-if="deviceType == 'managesys'">
+          <WorkFacePointTable :columns="pointColumns" :deviceId="deviceData.id" @save="savePointData" @delete="deletePointById" />
+        </template>
+        <template v-else>
+          <PointTable :columns="pointColumns" :deviceId="deviceData.id" @save="savePointData" @delete="deletePointById" />
+        </template>
+      </a-tab-pane>
       <a-tab-pane key="3" tab="摄像头配置"
-        ><EditRowTable :columns="cameraColumns" :list="cameraList.bind(null, { deviceId: deviceData.id })" @saveOrUpdate="saveCameraData" @deleteById="deleteCameraById" :isAdd="true"
+        ><EditRowTable
+          :columns="cameraColumns"
+          :list="cameraList.bind(null, { deviceId: deviceData.id })"
+          @saveOrUpdate="saveCameraData"
+          @deleteById="deleteCameraById"
+          :isAdd="true"
       /></a-tab-pane>
     </a-tabs>
     <FormModal v-else :record="record" @saveOrUpdate="(values) => emit('saveOrUpdate', values)" />
@@ -14,15 +37,18 @@
   import { computed, unref, inject, reactive } from 'vue';
   import { BasicModal, useModalInner } from '/@/components/Modal';
   import EditRowTable from '../../comment/EditRowTable.vue';
+  import PointTable from './pointTabel/PointTable.vue';
+  import WorkFacePointTable from './pointTabel/WorkFacePointTable.vue';
   import FormModal from './FormModal.vue';
   import { cloneDeep } from 'lodash-es';
   import { columns as pointColumns } from './pointTabel/point.data';
-  import { list as pointList, saveOrUpdate as pointSaveOrUpdate, deleteById as pointDeleteById } from './pointTabel/point.api';
+  import { saveOrUpdate as pointSaveOrUpdate, deleteById as pointDeleteById } from './pointTabel/point.api';
   import { columns as cameraColumns } from './cameraTabel/camera.data';
   import { list as cameraList, saveOrUpdate as cameraSaveOrUpdate, deleteById as cameraDeleteById } from './cameraTabel/camera.api';
 
   const props = defineProps({
-    showtTab: { type: Boolean, required: true },
+    showTab: { type: Boolean, required: true },
+    deviceType: { type: String },
   });
   // 声明Emits
   const emit = defineEmits(['saveOrUpdate', 'register']);
@@ -41,6 +67,7 @@
   const title = computed(() => (!unref(isUpdate) ? '新增' : '编辑'));
 
   const savePointData = (data) => {
+    debugger;
     const record = cloneDeep(data.editValueRefs);
     pointSaveOrUpdate(Object.assign(record, { id: data.id, deviceId: deviceData.id }), data.id);
   };

+ 1 - 1
src/views/vent/deviceManager/comment/FormModal.vue

@@ -1,5 +1,5 @@
 <template>
-  <div>
+  <div class="vent-form">
     <BasicForm @register="registerForm" />
     <div class="j-box-bottom-button offset-20" style="margin-top: 30px">
       <div class="j-box-bottom-button-float">

+ 28 - 6
src/views/vent/deviceManager/comment/NormalTable.vue

@@ -24,7 +24,7 @@
         <TableAction :actions="getActions(record)" :dropDownActions="getDropDownAction(record)" />
       </template>
     </BasicTable>
-    <DeviceModal @register="registerModal" @saveOrUpdate="saveOrUpdateHandler" :showtTab="showtTab" />
+    <DeviceModal @register="registerModal" @saveOrUpdate="saveOrUpdateHandler" :showTab="showTab" :deviceType="deviceType" />
   </div>
 </template>
 
@@ -34,15 +34,21 @@
   import { BasicTable, TableAction } from '/@/components/Table';
   import { useModal } from '/@/components/Modal';
   import DeviceModal from './DeviceModal.vue';
+  import DeviceModalTable from './pointTabel/DeviceModalTabel.vue';
   // import { getToken } from '/@/utils/auth';
   // import { useGlobSetting } from '/@/hooks/setting';
+  import { getTableHeaderColumns } from '/@/hooks/web/useWebColumns';
   import { useListPage } from '/@/hooks/system/useListPage';
   import { useMessage } from '/@/hooks/web/useMessage';
   const $message = useMessage();
   const props = defineProps({
+    columnsType: {
+      type: String,
+      // required: true,
+    },
     columns: {
       type: Array,
-      required: true,
+      // required: true,
       default: () => [],
     },
     searchFormSchema: {
@@ -78,7 +84,11 @@
       type: Function,
       required: true,
     },
-    showtTab: {
+    pointList: {
+      type: Function,
+      // required: true,
+    },
+    showTab: {
       type: Boolean,
       default: false,
     },
@@ -103,16 +113,28 @@
   // const glob = useGlobSetting();
   const [registerModal, { openModal, closeModal }] = useModal();
 
+  const columnList = getTableHeaderColumns(props.columnsType);
+  console.log('aaa', columnList);
+
   // 列表页面公共参数、方法
   const { prefixCls, tableContext, onExportXls, onImportXls, doRequest } = useListPage({
     designScope: props.designScope,
     tableProps: {
       title: props.title,
       api: props.list,
-      columns: props.columns as any[],
+      columns: props.columns.length > 0 ? (props.columns as any[]) : columnList,
       size: 'small',
       formConfig: {
-        labelWidth: 200,
+        // labelWidth: 100,
+        labelAlign: 'left',
+        labelCol: {
+          xs: 24,
+          sm: 24,
+          md: 24,
+          lg: 9,
+          xl: 7,
+          xxl: 5,
+        },
         schemas: props.searchFormSchema as any[],
       },
       actionColumn: {
@@ -137,7 +159,7 @@
   const saveOrUpdateHandler = async (params) => {
     try {
       await props.saveOrUpdate(params, isUpdate.value);
-      !props.showtTab ? closeModal() : '';
+      !props.showTab ? closeModal() : '';
       await doRequest(props.list, { confirm: false });
     } catch (error) {
       $message.createMessage.error('保存失败,请联系管理员');

+ 39 - 1
src/views/vent/deviceManager/comment/pointTabel/point.api.ts

@@ -3,12 +3,18 @@ import { Modal } from 'ant-design-vue';
 
 enum Api {
   list = '/ventanaly-device/safety/ventanalyMonitorParams/list',
+  deviceList = '/sys/dict/DeviceKind/query',
+  getDeviceId = '/safety/ventanalyMonitorParams/getdevices',
+  deviceId = '/safety/ventanalyMonitorParams/getByDeviceid',
   save = '/ventanaly-device/safety/ventanalyMonitorParams/add',
-  edit = '/ventanaly-device/safety/ventanalyMonitorParams/edit',
+  edit = '/ventanaly-device/safety/ventanalyMonitorParams/editlinkInfo',
   deleteById = '/ventanaly-device/safety/ventanalyMonitorParams/delete',
   deleteBatch = '/sys/user/deleteBatch',
   importExcel = '/sys/user/importExcel',
   exportXls = '/sys/user/exportXls',
+
+  workDeviceList = '/ventanaly-device/safety/managesysDevice/list',
+  workDeviceEdit = '/ventanaly-device/safety/managesysDevice/editlist',
 }
 /**
  * 导出api
@@ -26,6 +32,38 @@ export const getImportUrl = Api.importExcel;
 export const list = (params) => defHttp.get({ url: Api.list, params });
 
 /**
+ * 列表接口
+ * @param params
+ */
+export const edit = (params) => defHttp.put({ url: Api.edit, params });
+
+/**
+ * 设备类型列表接口
+ * @param params
+ */
+export const deviceList = (params) => defHttp.get({ url: Api.deviceList, params });
+
+/**
+ * 设备类型列表接口
+ * @param params
+ */
+export const getDeviceId = (params) => defHttp.get({ url: Api.getDeviceId, params });
+
+/**
+ * 获取设备id接口
+ * @param params
+ */
+export const deviceId = (params) => defHttp.get({ url: Api.deviceId, params });
+
+/**
+ * 获取设备id接口
+ * @param params
+ */
+export const workDeviceList = (params) => defHttp.get({ url: Api.workDeviceList, params });
+
+export const workDeviceEdit = (params) => defHttp.post({ url: Api.workDeviceEdit, params });
+
+/**
  * 删除用户
  */
 export const deleteById = (params, handleSuccess) => {

+ 50 - 27
src/views/vent/deviceManager/comment/pointTabel/point.data.ts

@@ -1,50 +1,73 @@
 import { BasicColumn } from '/@/components/Table';
+import { deviceList, deviceId, getDeviceId } from './point.api';
+
 export const columns: BasicColumn[] = [
   {
-    title: 'plc地址',
-    dataIndex: 'plcaddr',
-    width: 100,
-  },
-  {
     title: '值名称',
     dataIndex: 'valuename',
     width: 100,
   },
   {
-    title: '值类型',
+    title: '值code',
     width: 100,
-    dataIndex: 'valuetype',
+    dataIndex: 'valuecode',
   },
   {
-    title: '最小值',
-    dataIndex: 'fmin',
-    width: 120,
+    title: '关联设备类型',
+    dataIndex: 'link_devicetype',
     editRow: true,
-    editRule: true,
-    editComponent: 'InputNumber',
+    width: 100,
   },
   {
-    title: '最大值',
-    dataIndex: 'fmax',
-    width: 120,
+    title: '关联设备',
+    dataIndex: 'link_id',
     editRow: true,
-    editRule: true,
-    editComponent: 'InputNumber',
+    width: 100,
   },
   {
-    title: '模拟最小值',
-    dataIndex: 'testlow',
-    width: 120,
+    title: '关联字段',
+    width: 180,
     editRow: true,
-    editRule: true,
-    editComponent: 'InputNumber',
+    dataIndex: 'link_code',
   },
+];
+
+export const deviceColumns: BasicColumn[] = [
   {
-    title: '模拟最大值',
-    dataIndex: 'testup',
+    title: '名称',
+    dataIndex: 'deviceName',
+    align: 'center',
     width: 120,
-    editRow: true,
-    editRule: true,
-    editComponent: 'InputNumber',
+  },
+  {
+    title: '安装位置',
+    dataIndex: 'devicePos',
+    align: 'center',
+    width: 100,
+  },
+  {
+    title: '设备类型',
+    dataIndex: 'deviceType',
+    align: 'center',
+    width: 100,
+  },
+  {
+    title: '所属分站',
+    width: 150,
+    align: 'center',
+    dataIndex: 'subStationName',
+  },
+];
+
+export const workFaceColumns: BasicColumn[] = [
+  {
+    title: '安装位置',
+    dataIndex: 'valuename',
+    width: 100,
+  },
+  {
+    title: '序号',
+    width: 100,
+    dataIndex: 'valuecode',
   },
 ];

+ 7 - 0
src/views/vent/deviceManager/damperTabel/damper.api.ts

@@ -5,6 +5,7 @@ enum Api {
   list = '/ventanaly-device/safety/ventanalyGate/list',
   save = '/ventanaly-device/safety/ventanalyGate/add',
   edit = '/ventanaly-device/safety/ventanalyGate/edit',
+  pointList = '/ventanaly-device/safety/ventanalyMonitorParams/list',
   deleteById = '/ventanaly-device/safety/ventanalyGate/delete',
   deleteBatch = '/sys/user/deleteBatch',
   importExcel = '/sys/user/importExcel',
@@ -26,6 +27,12 @@ export const getImportUrl = Api.importExcel;
 export const list = (params) => defHttp.get({ url: Api.list, params });
 
 /**
+ * 点表列表接口
+ * @param params
+ */
+export const pointList = (params) => defHttp.get({ url: Api.pointList, params });
+
+/**
  * 删除用户
  */
 export const deleteById = (params, handleSuccess) => {

+ 26 - 17
src/views/vent/deviceManager/damperTabel/damper.data.ts

@@ -115,6 +115,15 @@ export const formSchema: FormSchema[] = [
     component: 'Input',
   },
   {
+    label: '设备类型',
+    field: 'devicetype',
+    component: 'JDictSelectTag',
+    componentProps: {
+      dictCode: 'ndoortype',
+      placeholder: '请选择状态',
+    },
+  },
+  {
     label: '是否为常闭型',
     field: 'bnormalclose',
     component: 'RadioGroup',
@@ -158,33 +167,33 @@ export const formSchema: FormSchema[] = [
     field: 'strtype',
     component: 'JDictSelectTag',
     componentProps: {
-      dictCode: 'strtype',
+      dictCode: 'gatekind',
       placeholder: '请选择状态',
     },
   },
   {
     label: '监测类型',
-    field: 'monitorflag',
+    field: 'monitorflag_dictText',
     component: 'JDictSelectTag',
     componentProps: {
-      dictCode: 'devicekind',
+      dictCode: 'monitorflag',
       placeholder: '请选择状态',
     },
   },
-  {
-    label: '是否开启监测',
-    field: 'monitorflag',
-    component: 'RadioGroup',
-    defaultValue: 1,
-    componentProps: () => {
-      return {
-        options: [
-          { label: '是', value: 1, key: '1' },
-          { label: '否', value: 0, key: '2' },
-        ],
-      };
-    },
-  },
+  // {
+  //   label: '是否开启监测',
+  //   field: 'monitorflag',
+  //   component: 'RadioGroup',
+  //   defaultValue: 1,
+  //   componentProps: () => {
+  //     return {
+  //       options: [
+  //         { label: '是', value: 1, key: '1' },
+  //         { label: '否', value: 0, key: '2' },
+  //       ],
+  //     };
+  //   },
+  // },
   {
     label: '是否模拟数据',
     field: 'testflag',

+ 3 - 2
src/views/vent/deviceManager/damperTabel/index.vue

@@ -9,9 +9,10 @@
     :deleteById="deleteById"
     :batchDelete="batchDeleteById"
     :saveOrUpdate="saveOrUpdate"
+    :pointList="pointList"
     designScope="damper-tabel"
     title="风门列表"
-    :showtTab="true"
+    :showTab="true"
     deviceType="gate_normal"
   />
 </template>
@@ -20,7 +21,7 @@
   //ts语法
   import NormalTable from '../comment/NormalTable.vue';
   import { columns, searchFormSchema, formSchema } from './damper.data';
-  import { list, getImportUrl, getExportUrl, deleteById, batchDeleteById, saveOrUpdate } from './damper.api';
+  import { list, getImportUrl, getExportUrl, deleteById, batchDeleteById, saveOrUpdate, pointList } from './damper.api';
 </script>
 
 <style scoped></style>

+ 1 - 1
src/views/vent/deviceManager/deviceColumns/index.vue

@@ -11,7 +11,7 @@
     :saveOrUpdate="saveOrUpdate"
     designScope="damper-tabel"
     title="风门列表"
-    :showtTab="true"
+    :showTab="true"
   />
 </template>
 

+ 1 - 1
src/views/vent/deviceManager/fanTabel/index.vue

@@ -11,7 +11,7 @@
     :saveOrUpdate="saveOrUpdate"
     designScope="fan-tabel"
     title="风机列表"
-    :showtTab="true"
+    :showTab="true"
   />
 </template>
 

+ 1 - 1
src/views/vent/deviceManager/ledTabel/index.vue

@@ -11,7 +11,7 @@
     :saveOrUpdate="saveOrUpdate"
     designScope="led-tabel"
     title="LED屏列表"
-    :showtTab="true"
+    :showTab="true"
   />
 </template>
 

+ 1 - 1
src/views/vent/deviceManager/pointTabel/index.vue

@@ -11,7 +11,7 @@
     :saveOrUpdate="saveOrUpdate"
     designScope="point-tabel"
     title="点表列表"
-    :showtTab="false"
+    :showTab="false"
   />
 </template>
 

+ 7 - 0
src/views/vent/deviceManager/pointTabel/point.api.ts

@@ -5,6 +5,7 @@ enum Api {
   list = '/ventanaly-device/safety/ventanalyMonitorParams/list',
   save = '/ventanaly-device/safety/ventanalyMonitorParams/add',
   edit = '/ventanaly-device/safety/ventanalyMonitorParams/edit',
+  selectDevice = '/jeecg-system/sys/dict/DeviceKind/query',
   deleteById = '/ventanaly-device/safety/ventanalyMonitorParams/delete',
   deleteBatch = '/sys/user/deleteBatch',
   importExcel = '/sys/user/importExcel',
@@ -26,6 +27,12 @@ export const getImportUrl = Api.importExcel;
 export const list = (params) => defHttp.get({ url: Api.list, params });
 
 /**
+ * 设备类型查询接口
+ * @param params
+ */
+export const selectDevice = (params) => defHttp.get({ url: Api.selectDevice, params });
+
+/**
  * 删除用户
  */
 export const deleteById = (params, handleSuccess) => {

+ 8 - 467
src/views/vent/deviceManager/pointTabel/point.data.ts

@@ -1,6 +1,6 @@
 import { BasicColumn } from '/@/components/Table';
 import { FormSchema } from '/@/components/Table';
-import { getAllRolesList, getAllTenantList } from './point.api';
+import { selectDevice } from './point.api';
 import { rules } from '/@/utils/helper/validator';
 import { render } from '/@/utils/common/renderUtils';
 export const columns: BasicColumn[] = [
@@ -10,8 +10,13 @@ export const columns: BasicColumn[] = [
     width: 120,
   },
   {
+    title: '设备类型code',
+    dataIndex: 'devicekind',
+    width: 120,
+  },
+  {
     title: 'plc地址',
-    dataIndex: 'plcaddr', 
+    dataIndex: 'plcaddr',
     width: 100,
   },
   {
@@ -76,84 +81,14 @@ export const columns: BasicColumn[] = [
   },
 ];
 
-export const recycleColumns: BasicColumn[] = [
-  {
-    title: '用户账号',
-    dataIndex: 'username',
-    width: 100,
-  },
-  {
-    title: '用户姓名',
-    dataIndex: 'realname',
-    width: 100,
-  },
-  {
-    title: '头像',
-    dataIndex: 'avatar',
-    width: 80,
-    customRender: render.renderAvatar,
-  },
-  {
-    title: '性别',
-    dataIndex: 'sex',
-    width: 80,
-    sorter: true,
-    customRender: ({ text }) => {
-      return render.renderDict(text, 'sex');
-    },
-  },
-];
-
 export const searchFormSchema: FormSchema[] = [
-  // {
-  //   field: 'devicekind',
-  //   component: 'JTreeSelect',
-  //   label: '下拉树选择',
-  //   helpMessage: ['component模式'],
-  //   componentProps: {
-  //     dict: 'sys_permission,name,id',
-  //     pidField: 'parent_id',
-  //   },
-  //   colProps: {
-  //     span: 12,
-  //   },
-  // },
   {
     label: '设备类型',
     field: 'devicekind',
     component: 'MTreeSelect',
-    componentProps: {
-      fieldNames: {
-        children: 'children',
-        label: 'itemText',
-        value: 'id',
-      },
-    },
-    colProps: { span: 6 },
-  },
-  {
-    label: 'plc地址',
-    field: 'plcaddr',
-    component: 'Input',
-    colProps: { span: 6 },
-  },
-  {
-    label: 'plc读写位数',
-    field: 'floatnum',
-    component: 'Input',
-    colProps: { span: 6 },
-  },
-  {
-    label: '读写类型',
-    field: 'datakind',
-    component: 'JDictSelectTag',
-    componentProps: {
-      dictCode: 'datakind',
-      placeholder: '请选择读写类型',
-      stringToNumber: true,
-    },
     colProps: { span: 6 },
   },
+
   {
     label: '值名称',
     field: 'valuename',
@@ -166,57 +101,6 @@ export const searchFormSchema: FormSchema[] = [
     component: 'Input',
     colProps: { span: 6 },
   },
-  {
-    label: '值类型',
-    field: 'valuetype',
-    component: 'Input',
-    colProps: { span: 6 },
-  },
-  {
-    label: '最小值',
-    field: 'fmin',
-    component: 'Input',
-    colProps: { span: 6 },
-  },
-  {
-    label: '最大值',
-    field: 'fmax',
-    component: 'Input',
-    colProps: { span: 6 },
-  },
-  {
-    label: '模拟最大值',
-    field: 'testup',
-    component: 'Input',
-    colProps: { span: 6 },
-  },
-  {
-    label: '模拟最小值',
-    field: 'testlow',
-    component: 'Input',
-    colProps: { span: 6 },
-  },
-  {
-    label: '小数位数',
-    field: 'floatnum',
-    component: 'Input',
-    colProps: { span: 6 },
-  },
-  {
-    label: '是否保存',
-    field: 'saveflag',
-    component: 'RadioGroup',
-    defaultValue: 1,
-    componentProps: () => {
-      return {
-        options: [
-          { label: '是', value: 1, key: '1' },
-          { label: '否', value: 0, key: '2' },
-        ],
-      };
-    },
-    colProps: { span: 6 },
-  },
 ];
 
 export const formSchema: FormSchema[] = [
@@ -226,214 +110,10 @@ export const formSchema: FormSchema[] = [
     component: 'Input',
     show: false,
   },
-  // {
-  //   label: '用户账号',
-  //   field: 'username',
-  //   component: 'Input',
-  //   dynamicDisabled: ({ values }) => {
-  //     return !!values.id;
-  //   },
-  //   dynamicRules: ({ model, schema }) => rules.duplicateCheckRule('sys_user', 'username', model, schema, true),
-  // },
-  // {
-  //   label: '登录密码',
-  //   field: 'password',
-  //   component: 'StrengthMeter',
-  //   rules: [
-  //     {
-  //       required: true,
-  //       message: '请输入登录密码',
-  //     },
-  //   ],
-  // },
-  // {
-  //   label: '确认密码',
-  //   field: 'confirmPassword',
-  //   component: 'InputPassword',
-  //   dynamicRules: ({ values }) => rules.confirmPassword(values, true),
-  // },
-  // {
-  //   label: '用户姓名',
-  //   field: 'realname',
-  //   required: true,
-  //   component: 'Input',
-  // },
-  // {
-  //   label: '工号',
-  //   field: 'workNo',
-  //   required: true,
-  //   component: 'Input',
-  //   dynamicRules: ({ model, schema }) => rules.duplicateCheckRule('sys_user', 'work_no', model, schema, true),
-  // },
-  // {
-  //   label: '职务',
-  //   field: 'post',
-  //   required: false,
-  //   component: 'JSelectPosition',
-  //   componentProps: {
-  //     rowKey: 'code',
-  //     labelKey: 'name',
-  //   },
-  // },
-  // {
-  //   label: '角色',
-  //   field: 'selectedroles',
-  //   component: 'ApiSelect',
-  //   componentProps: {
-  //     mode: 'multiple',
-  //     api: getAllRolesList,
-  //     labelField: 'roleName',
-  //     valueField: 'id',
-  //   },
-  // },
-  // {
-  //   label: '所属部门',
-  //   field: 'selecteddeparts',
-  //   component: 'JSelectDept',
-  //   componentProps: ({ formActionType, formModel }) => {
-  //     return {
-  //       sync: false,
-  //       checkStrictly: true,
-  //       defaultExpandLevel: 2,
-
-  //       onSelect: (options, values) => {
-  //         const { updateSchema } = formActionType;
-  //         //所属部门修改后更新负责部门下拉框数据
-  //         updateSchema([
-  //           {
-  //             field: 'departIds',
-  //             componentProps: { options },
-  //           },
-  //         ]);
-  //         //所属部门修改后更新负责部门数据
-  //         formModel.departIds && (formModel.departIds = formModel.departIds.filter((item) => values.value.indexOf(item) > -1));
-  //       },
-  //     };
-  //   },
-  // },
-  // {
-  //   label: '租户',
-  //   field: 'relTenantIds',
-  //   component: 'ApiSelect',
-  //   componentProps: {
-  //     mode: 'multiple',
-  //     api: getAllTenantList,
-  //     numberToString: true,
-  //     labelField: 'name',
-  //     valueField: 'id',
-  //   },
-  // },
-  // {
-  //   label: '身份',
-  //   field: 'userIdentity',
-  //   component: 'RadioGroup',
-  //   defaultValue: 1,
-  //   componentProps: ({ formModel }) => {
-  //     return {
-  //       options: [
-  //         { label: '普通用户', value: 1, key: '1' },
-  //         { label: '上级', value: 2, key: '2' },
-  //       ],
-  //       onChange: () => {
-  //         formModel.userIdentity == 1 && (formModel.departIds = []);
-  //       },
-  //     };
-  //   },
-  // },
-  // {
-  //   label: '负责部门',
-  //   field: 'departIds',
-  //   component: 'Select',
-  //   componentProps: {
-  //     mode: 'multiple',
-  //   },
-  //   ifShow: ({ values }) => values.userIdentity == 2,
-  // },
-  // {
-  //   label: '头像',
-  //   field: 'avatar',
-  //   component: 'JImageUpload',
-  //   componentProps: {
-  //     fileMax: 1,
-  //   },
-  // },
-  // {
-  //   label: '生日',
-  //   field: 'birthday',
-  //   component: 'DatePicker',
-  // },
-  // {
-  //   label: '性别',
-  //   field: 'sex',
-  //   component: 'JDictSelectTag',
-  //   componentProps: {
-  //     dictCode: 'sex',
-  //     placeholder: '请选择性别',
-  //     stringToNumber: true,
-  //   },
-  // },
-  // {
-  //   label: '邮箱',
-  //   field: 'email',
-  //   component: 'Input',
-  //   rules: rules.rule('email', false),
-  // },
-  // {
-  //   label: '手机号码',
-  //   field: 'phone',
-  //   component: 'Input',
-  //   dynamicRules: ({ model, schema }) => {
-  //     return [{ ...rules.duplicateCheckRule('sys_user', 'phone', model, schema, true)[0] }, { pattern: /^1[3|4|5|7|8|9][0-9]\d{8}$/, message: '手机号码格式有误' }];
-  //   },
-  // },
-  // {
-  //   label: '座机',
-  //   field: 'telephone',
-  //   component: 'Input',
-  //   rules: [{ pattern: /^0\d{2,3}-[1-9]\d{6,7}$/, message: '请输入正确的座机号码' }],
-  // },
-  // {
-  //   label: '工作流引擎',
-  //   field: 'activitiSync',
-  //   defaultValue: 1,
-  //   component: 'JDictSelectTag',
-  //   componentProps: {
-  //     dictCode: 'activiti_sync',
-  //     type: 'radio',
-  //     stringToNumber: true,
-  //   },
-  // },
   {
     label: '设备类型',
     field: 'devicekind',
     component: 'MTreeSelect',
-    componentProps: {
-      fieldNames: {
-        children: 'children',
-        label: 'itemText',
-        value: 'id',
-      },
-    },
-  },
-  {
-    label: 'plc地址',
-    field: 'plcaddr',
-    component: 'Input',
-  },
-  {
-    label: 'plc读写位数',
-    field: 'floatnum',
-    component: 'Input',
-  },
-  {
-    label: '读写类型',
-    field: 'datakind',
-    component: 'JDictSelectTag',
-    componentProps: {
-      dictCode: 'datakind',
-      placeholder: '请选择读写类型',
-      stringToNumber: true,
-    },
   },
   {
     label: '值名称',
@@ -445,143 +125,4 @@ export const formSchema: FormSchema[] = [
     field: 'valuecode',
     component: 'Input',
   },
-  {
-    label: '值类型',
-    field: 'valuetype',
-    component: 'JDictSelectTag',
-    componentProps: {
-      dictCode: 'valuetype',
-      placeholder: '请选择读写类型',
-      stringToNumber: true,
-    },
-  },
-  {
-    label: '最小值',
-    field: 'fmin',
-    component: 'Input',
-  },
-  {
-    label: '最大值',
-    field: 'fmax',
-    component: 'Input',
-  },
-  {
-    label: '模拟最大值',
-    field: 'testup',
-    component: 'Input',
-  },
-  {
-    label: '模拟最小值',
-    field: 'testlow',
-    component: 'Input',
-  },
-  {
-    label: '小数位数',
-    field: 'floatnum',
-    component: 'Input',
-  },
-  {
-    label: '是否保存',
-    field: 'saveflag',
-    component: 'RadioGroup',
-    defaultValue: 1,
-    componentProps: () => {
-      return {
-        options: [
-          { label: '是', value: 1, key: '1' },
-          { label: '否', value: 0, key: '2' },
-        ],
-      };
-    },
-  },
-];
-
-export const formPasswordSchema: FormSchema[] = [
-  {
-    label: '用户账号',
-    field: 'username',
-    component: 'Input',
-    componentProps: { readOnly: true },
-  },
-  {
-    label: '登录密码',
-    field: 'password',
-    component: 'StrengthMeter',
-    componentProps: {
-      placeholder: '请输入登录密码',
-    },
-    rules: [
-      {
-        required: true,
-        message: '请输入登录密码',
-      },
-    ],
-  },
-  {
-    label: '确认密码',
-    field: 'confirmPassword',
-    component: 'InputPassword',
-    dynamicRules: ({ values }) => rules.confirmPassword(values, true),
-  },
-];
-
-export const formAgentSchema: FormSchema[] = [
-  {
-    label: '',
-    field: 'id',
-    component: 'Input',
-    show: false,
-  },
-  {
-    field: 'userName',
-    label: '用户名',
-    component: 'Input',
-    componentProps: {
-      readOnly: true,
-      allowClear: false,
-    },
-  },
-  {
-    field: 'agentUserName',
-    label: '代理人用户名',
-    required: true,
-    component: 'JSelectUser',
-    componentProps: {
-      rowKey: 'username',
-      labelKey: 'realname',
-      maxSelectCount: 10,
-    },
-  },
-  {
-    field: 'startTime',
-    label: '代理开始时间',
-    component: 'DatePicker',
-    required: true,
-    componentProps: {
-      showTime: true,
-      valueFormat: 'YYYY-MM-DD HH:mm:ss',
-      placeholder: '请选择代理开始时间',
-    },
-  },
-  {
-    field: 'endTime',
-    label: '代理结束时间',
-    component: 'DatePicker',
-    required: true,
-    componentProps: {
-      showTime: true,
-      valueFormat: 'YYYY-MM-DD HH:mm:ss',
-      placeholder: '请选择代理结束时间',
-    },
-  },
-  {
-    field: 'status',
-    label: '状态',
-    component: 'JDictSelectTag',
-    defaultValue: '1',
-    componentProps: {
-      dictCode: 'valid_status',
-      type: 'radioButton',
-    },
-  },
 ];

+ 1 - 1
src/views/vent/deviceManager/sensorTabel/index.vue

@@ -11,7 +11,7 @@
     :saveOrUpdate="saveOrUpdate"
     designScope="sensor-tabel"
     title="传感器列表"
-    :showtTab="true"
+    :showTab="true"
   />
 </template>
 

+ 1 - 1
src/views/vent/deviceManager/substationTabel/index.vue

@@ -12,7 +12,7 @@
     :saveOrUpdate="saveOrUpdate"
     designScope="substation-tabel"
     title="分站列表"
-    :showtTab="false"
+    :showTab="false"
   />
 </template>
 

+ 1 - 1
src/views/vent/deviceManager/windWindowTabel/index.vue

@@ -11,7 +11,7 @@
     :saveOrUpdate="saveOrUpdate"
     designScope="ventanalyWindow-tabel"
     title="风窗列表"
-    :showtTab="true"
+    :showTab="true"
     deviceType="window_normal"
   />
 </template>

+ 1 - 1
src/views/vent/deviceManager/windfindingTabel/index.vue

@@ -11,7 +11,7 @@
     :saveOrUpdate="saveOrUpdate"
     designScope="windfinding-tabel"
     title="测风装置列表"
-    :showtTab="true"
+    :showTab="true"
   />
 </template>
 

+ 2 - 1
src/views/vent/monitorManager/comment/GroupMonitorTable.vue

@@ -132,8 +132,9 @@
       align: 'center',
     };
     let columns: any[] = getTableHeaderColumns(props.columnsType);
+    debugger;
     const strinstallpos = columns.find((item) => {
-      return item.dataIndex === 'strinstallpos';
+      return item.dataIndex === 'strinstallpos' || item.dataIndex === 'strname';
     });
     if (strinstallpos) {
       strinstallpos.customCell = (_, index) => {

+ 1 - 2
src/views/vent/monitorManager/comment/MonitorTable.vue

@@ -16,8 +16,7 @@
 
 <script lang="ts" setup>
   //ts语法
-  import { computed } from '@vue/reactivity';
-  import { defineExpose, toRaw, watch, ref, onMounted, onUnmounted, unref } from 'vue';
+  import { defineExpose, toRaw, watch, ref, onMounted, onUnmounted } from 'vue';
   import { BasicTable } from '/@/components/Table';
   import { useListPage } from '/@/hooks/system/useListPage';
   import { list, deleteUser, batchDeleteUser, getImportUrl, getExportUrl, frozenBatch, syncUser } from '../../../system/user/user.api';

+ 13 - 5
src/views/vent/monitorManager/fanLocalMonitor/index.vue

@@ -163,7 +163,6 @@
   import { ExclamationCircleFilled } from '@ant-design/icons-vue';
   import { onBeforeMount, ref, onMounted, nextTick, toRaw, reactive, onUnmounted } from 'vue';
   import Bar from '/@/components/chart/Bar.vue';
-  import MonitorTable from '../comment/MonitorTable.vue';
   import GroupMonitorTable from '../comment/GroupMonitorTable.vue';
   import { initWebSocket, getRecordList } from '/@/hooks/web/useVentWebSocket';
   import { mountedThree, setModelType, destroy, addCssText, addText, playSmoke } from './fanLocal.three';
@@ -283,11 +282,20 @@
 
   const getDataSource = async () => {
     const res = await list({ devicetype: 'fan', pagetype: 'normal' });
-    dataSource.value = res.msgTxt[0].datalist || [];
-    dataSource.value.forEach((data: any) => {
-      const readData = data.readData;
-      data = Object.assign(data, readData);
+    const dataArr = res.msgTxt[0].datalist || [];
+    dataSource.value = [];
+    dataArr.forEach((data) => {
+      if (data.deviceType?.startsWith('fanlocal')) {
+        const readData = data.readData;
+        data = Object.assign(data, readData);
+        dataSource.value.push(data);
+      }
     });
+    // // dataSource.value = res.msgTxt[0].datalist || [];
+    // dataSource.value.forEach((data: any) => {
+    //   const readData = data.readData;
+    //   data = Object.assign(data, readData);
+    // });
     const data: any = toRaw(dataSource.value[selectRowIndex.value]); //maxarea
     return data;
   };

+ 45 - 22
src/views/vent/monitorManager/gateMonitor/gate.threejs.ts

@@ -6,6 +6,9 @@ import UseThree from '../../../../hooks/core/threejs/useThree';
 import { animateCamera } from '/@/utils/threejs/util';
 import { flyLine } from '/@/views/vent/comment/threejs/FlyLine';
 import { createComposer } from '/@/views/vent/comment/threejs/bloomPass';
+import * as dat from 'dat.gui';
+const gui = new dat.GUI();
+gui.domElement.style = 'position:absolute;top:10px;right:10px;z-index:99999999999999';
 
 const modelName = 'fm';
 // 模型对象、 文字对象
@@ -77,20 +80,40 @@ const addLight = (scene) => {
   // const pointLightHelper7 = new THREE.PointLightHelper( pointLight7, 1 );
   // scene.add( pointLightHelper7 );
 
-  const spotLight = new THREE.SpotLight();
-  spotLight.angle = Math.PI / 16;
-  spotLight.penumbra = 0;
-  // spotLight.castShadow = true;
-  spotLight.position.set(-231, 463, 687);
-  scene.add(spotLight);
-
-  // spotLight.shadow.mapSize.width = 1500;  // default
-  // spotLight.shadow.mapSize.height = 800; // default
-  spotLight.shadow.camera.near = 0.5; // default
-  spotLight.shadow.camera.far = 1000; // default
-  spotLight.shadow.focus = 1.2;
-  spotLight.shadow.bias = -0.000002;
-
+  const directionalLight = new THREE.DirectionalLight(0xffffff, 0.5);
+  directionalLight.target = group;
+  directionalLight.position.set(-18, 20, 39);
+  directionalLight.rotation.set(1.3, 0.3, 5.8);
+  // scene.add(directionalLight);
+  // const helper = new THREE.DirectionalLightHelper(directionalLight, 5);
+  // scene.add(helper);
+
+  // const spotLight = new THREE.SpotLight();
+  // spotLight.angle = Math.PI / 16;
+  // spotLight.penumbra = 0;
+  // // spotLight.castShadow = true;
+  // spotLight.position.set(-231, 463, 687);
+  // scene.add(spotLight);
+
+  // // spotLight.shadow.mapSize.width = 1500;  // default
+  // // spotLight.shadow.mapSize.height = 800; // default
+  // spotLight.shadow.camera.near = 0.5; // default
+  // spotLight.shadow.camera.far = 1000; // default
+  // spotLight.shadow.focus = 1.2;
+  // spotLight.shadow.bias = -0.000002;
+
+  // const spotLightHelper = new THREE.SpotLightHelper(spotLight);
+  // scene.add(spotLightHelper);
+
+  model.canvasContainer?.appendChild(gui.domElement);
+  gui.add(directionalLight.position, 'x', -100, 100).step(1);
+  gui.add(directionalLight.position, 'y', -100, 100).step(1);
+  gui.add(directionalLight.position, 'z', -100, 100).step(1);
+  gui.add(directionalLight.rotation, 'x', -Math.PI, 2 * Math.PI).step(0.1);
+  gui.add(directionalLight.rotation, 'y', -Math.PI, 2 * Math.PI).step(0.1);
+  gui.add(directionalLight.rotation, 'z', -Math.PI, 2 * Math.PI).step(0.1);
+  // gui.add(spotLight, 'angle', 0, Math.PI / 2);
+  // gui.add(spotLight, 'distance', 0, 1000);
   // gui.add(pointLight6.position, 'x', -200, 200)
   // gui.add(pointLight6.position, 'y', -200, 200)
   // gui.add(pointLight6.position, 'z', -200, 200)
@@ -98,9 +121,7 @@ const addLight = (scene) => {
 
 // 重置摄像头
 const resetCamera = () => {
-  // model.camera?.position.set(0, 0.2, 0.3);
-  model.camera.position.set(30.328, 58.993, 108.315);
-  model.camera.rotation.set(-27.88, 14.35, 7.47);
+  model.camera.far = 274;
   model.orbitControls?.update();
   model.camera.updateProjectionMatrix();
 };
@@ -582,11 +603,13 @@ export const mountedThree = (playerVal1, playerVal2) => {
 
 export const destroy = () => {
   if (model) {
-    model.mixers[0].uncacheClip(clipActionArr.frontDoor.getClip());
-    model.mixers[0].uncacheClip(clipActionArr.backDoor.getClip());
-    model.mixers[0].uncacheAction(clipActionArr.frontDoor, group);
-    model.mixers[0].uncacheAction(clipActionArr.backDoor, group);
-    model.mixers[0].uncacheRoot(group);
+    if (model.mixers[0]) {
+      model.mixers[0].uncacheClip(clipActionArr.frontDoor.getClip());
+      model.mixers[0].uncacheClip(clipActionArr.backDoor.getClip());
+      model.mixers[0].uncacheAction(clipActionArr.frontDoor, group);
+      model.mixers[0].uncacheAction(clipActionArr.backDoor, group);
+      model.mixers[0].uncacheRoot(group);
+    }
     clipActionArr.backDoor = undefined;
     clipActionArr.frontDoor = undefined;
     model.animations[0].tracks = [];

+ 1 - 1
src/views/vent/monitorManager/gateMonitor/index.vue

@@ -338,7 +338,7 @@
 
   // 视频播放
   const addPlayVideo = () => {
-    if(player1.value.play && player2.value.play) {
+    if(player1.value?.play && player2.value?.play) {
       // player1.value.setMuted(false);
       // player2.value.setMuted(false);
       player1.value.play();

+ 74 - 53
src/views/vent/monitorManager/mainFanMonitor/index.vue

@@ -8,7 +8,7 @@
     id="main3DCSS"
     class="threejs-Object-CSS"
     v-show="!loading"
-    style="width: 100%; height: 100%; position: absolute; pointer-events: none; overflow: hidden; z-index: 1"
+    style="width: 100%; height: 100%; position: absolute; pointer-events: none; overflow: hidden; z-index: 1; top: 0"
   >
     <div style="position: relative">
       <div class="elementTag" id="inputBox">
@@ -28,7 +28,7 @@
     </div>
   </div>
   <div class="scene-box" style="z-index: 999">
-    <div class="title-text">{{ selectData.strName }}</div>
+    <div class="title-text" style="position: absolute; z-index: 9999; width: 100%; text-align: center">{{ selectData.strname }}</div>
     <div class="top-box control-group">
       <div class="button-box" v-for="(item, index) in modalTypeArr.centerBtnArr" :key="index" @click="showModal(item)">{{ item.value }}</div>
     </div>
@@ -108,7 +108,8 @@
     <div class="bottom-tabs-box">
       <a-tabs class="tabs-box" v-model:activeKey="activeKey" @change="tabChange">
         <a-tab-pane key="1" tab="实时监测">
-          <a-radio-group v-model:value="selectRowIndex" style="width: 100%">
+          <GroupMonitorTable :dataSource="dataSource" columnsType="fanmain_monitor" @selectRow="getSelectRow" />
+          <!-- <a-radio-group v-model:value="selectRowIndex" style="width: 100%">
             <a-table :columns="tableColumns" :pagination="false" :data-source="dataSource" bordered style="margin-top: 5px">
               <template #bodyCell="{ column, record, index }">
                 <template v-if="column.dataIndex === 'isCheck'">
@@ -116,7 +117,7 @@
                 </template>
               </template>
             </a-table>
-          </a-radio-group>
+          </a-radio-group> -->
         </a-tab-pane>
         <!-- <a-tab-pane key="2" tab="实时曲线图" force-render>
           <div class="tab-item" v-if="activeKey === '2'">
@@ -176,7 +177,7 @@
   import { ExclamationCircleFilled } from '@ant-design/icons-vue';
   import FanEchrats from '/@/views/vent/monitorManager/mainFanMonitor/fanEchrats.vue';
   import { onBeforeMount, computed, ComputedRef, ref, onMounted, nextTick, onUnmounted, reactive, toRaw, toRef, toRefs } from 'vue';
-  import MonitorTable from '../comment/MonitorTable.vue';
+  import GroupMonitorTable from '../comment/GroupMonitorTable.vue';
   import { BasicTable, useTable } from '/@/components/Table';
   import { getTableHeaderColumns } from '/@/hooks/web/useWebColumns';
   import { tableColumns, dataColumns, stateColumns, getData, getMonitorData } from './main.data';
@@ -185,6 +186,7 @@
   import LivePlayer from '@liveqing/liveplayer-v3';
   import { SvgIcon } from '/@/components/Icon';
   import { list, pathList, deviceList, testWind } from './main.api';
+  import { getTableList } from '/@/views/vent/monitorManager/fanLocalMonitor/fanLocal.api';
   const modalTypeArr = reactive({
     centerBtnArr: [
       {
@@ -259,60 +261,86 @@
   // 设备数据
   const controlType = ref(1);
 
+  const getDataSource = async () => {
+    const res = await list({ devicetype: 'fan', pagetype: 'normal' });
+    const dataArr = res.msgTxt[0].datalist || [];
+    dataSource.value = [];
+    dataArr.forEach((data) => {
+      if (data.deviceType?.startsWith('fanmain')) {
+        const readData = data.readData;
+        data = Object.assign(data, readData);
+        dataSource.value.push(data);
+      }
+    });
+    // // dataSource.value = res.msgTxt[0].datalist || [];
+    // dataSource.value.forEach((data: any) => {
+    //   const readData = data.readData;
+    //   data = Object.assign(data, readData);
+    // });
+    const data: any = toRaw(dataSource.value[selectRowIndex.value]); //maxarea
+    return data;
+  };
   // https获取监测数据
   let timer: null | NodeJS.Timeout = null;
-  const getMonitor1 = () => {
-    if (Object.prototype.toString.call(timer) === '[object Null]') {
-      timer = setTimeout(() => {
-        list({ devicetype: 'windrect', pagetype: 'normal' }).then((res) => {
-          dataSource.value = res.msgTxt[0].datalist || [];
-          dataSource.value.forEach((data: any) => {
-            const readData = data.readData;
-            data = Object.assign(data, readData);
-          });
-          const data: any = toRaw(dataSource.value[selectRowIndex.value]); //maxarea
-          Object.assign(selectData, data);
-          // addFmText(selectData);
-          // 根据3个点位分别执行动画
-
-          if (timer) {
-            timer = null;
-          }
-          getMonitor();
-        });
-      }, 1000);
-    }
-  };
-
   const getMonitor = () => {
     if (Object.prototype.toString.call(timer) === '[object Null]') {
-      timer = setTimeout(() => {
+      timer = setTimeout(async () => {
+        await getDataSource();
+        Object.assign(selectData, deviceBaseList.value, dataSource.value[selectRowIndex.value]);
+        addText(selectData);
+        // playAnimation(data, selectData.maxarea);
         if (timer) {
           timer = null;
         }
-        dataSource.value = getData();
-        // 默认前两行(主、备)是正在监测的主通风机, 实际中需要手动选中
-        const monitorData = getMonitorData();
-        Object.assign(dataSource.value[selectRowIndex.value], monitorData);
-        const data: any = toRaw(dataSource.value[selectRowIndex.value]);
-        Object.assign(selectData, data);
-        resetEcharts('mainWindRect');
         getMonitor();
       }, 1000);
     }
   };
 
+  // const getMonitor = () => {
+  //   if (Object.prototype.toString.call(timer) === '[object Null]') {
+  //     timer = setTimeout(() => {
+  //       if (timer) {
+  //         timer = null;
+  //       }
+  //       dataSource.value = getData();
+  //       // 默认前两行(主、备)是正在监测的主通风机, 实际中需要手动选中
+  //       const monitorData = getMonitorData();
+  //       Object.assign(dataSource.value[selectRowIndex.value], monitorData);
+  //       const data: any = toRaw(dataSource.value[selectRowIndex.value]);
+  //       Object.assign(selectData, data);
+  //       resetEcharts('mainWindRect');
+  //       getMonitor();
+  //     }, 1000);
+  //   }
+  // };
+
+  const deviceBaseList = ref([]);
+  const getDeviceBaseList = () => {
+    getTableList({ pageSize: 1000 }).then((res) => {
+      deviceBaseList.value = res.records;
+    });
+  };
   // 切换检测数据
-  const getSelectRow = (selectRow, index) => {
-    selectRowIndex.value = index;
+  const getSelectRow = (id) => {
+    if (!id) return;
     loading.value = true;
-    Object.assign(selectData, selectRow);
+    const baseDataIndex: any = dataSource.value.findIndex((baseData: any) => baseData.deviceID === id);
+    selectRowIndex.value = baseDataIndex;
     const type = 'mainWindRect';
-    loading.value = false;
-    // setModelType(type).then(() => {
-    //   // addFmText(selectData);
-    //   loading.value = false;
-    // });
+    // const type = baseDataIndex > 0 ? 'fm' : 'fc';
+    setModelType(type).then(() => {
+      loading.value = false;
+    });
+    const data = dataSource.value[baseDataIndex];
+    mainWindIsShow1.value = 'stop';
+    mainWindIsShow2.value = 'stop';
+    if (data['fanStart1'] == 1) {
+      mainWindIsShow1.value = 'open';
+    } else if (data['fanStart2'] == 1) {
+      mainWindIsShow2.value = 'open';
+    }
+    return;
   };
 
   const start = (flag) => {
@@ -328,14 +356,6 @@
     });
   };
 
-  const addPlayVideo = (event) => {
-    event.preventDefault();
-    if (player1.value && player1.value.play) {
-      player1.value.play();
-      document.body.removeEventListener('mousedown', addPlayVideo);
-    }
-  };
-
   // 切换左右两边1#、2#风机的监测数据
   const selectDevice = (key, val) => {
     if (key === 'dataMonitorRowIndex') {
@@ -420,6 +440,7 @@
 
   onBeforeMount(() => {
     // document.body.addEventListener('mousedown', addPlayVideo, true);
+    getDeviceBaseList();
   });
 
   onMounted(() => {
@@ -514,7 +535,7 @@
   }
   .data-show-box {
     position: relative;
-    top: -30px;
+
     display: flex;
     flex-direction: row;
     justify-content: space-between;

+ 1 - 1
src/views/vent/monitorManager/mainFanMonitor/mainWind.threejs.ts

@@ -490,7 +490,7 @@ class mainWindRect {
   setSmokePosition() {
     this.frontSmoke.setPoints();
     this.group?.add(this.frontSmoke.points);
-    this.frontSmoke.points.position.set(1.04, 2.51, 8.18);
+    this.frontSmoke.points.position.set(-2.51, 2.51, 8.18);
     this.backSmoke.setPoints();
     this.group?.add(this.backSmoke.points);
     // this.backSmoke.points.position.set(47.07, -8.48, -1.83);

+ 5 - 1
src/views/vent/monitorManager/mainFanMonitor/zhedie.threejs.ts

@@ -69,7 +69,11 @@ class zdWindRect {
         y: 205,
       },
       {
-        text: `${selectData.forntArea && selectData.rearArea ? Math.min(selectData.forntArea, selectData.rearArea) : selectData.forntArea || selectData.rearArea || '-'}`,
+        text: `${
+          selectData.forntArea && selectData.rearArea
+            ? Math.min(selectData.forntArea, selectData.rearArea)
+            : selectData.forntArea || selectData.rearArea || '-'
+        }`,
         font: 'normal 30px Arial',
         color: '#009900',
         strokeStyle: '#002200',

+ 2 - 2
src/views/vent/monitorManager/windowMonitor/dandaoFc.threejs.ts

@@ -263,8 +263,8 @@ class singleWindow {
           const videoPlayer1 = document.getElementById('fc-player1')?.getElementsByClassName('vjs-tech')[0];
           if (videoPlayer1) {
             const mesh = renderVideo(this.group, videoPlayer1, 'player1');
-            mesh.scale.set(0.0382, 0.028, 0.022);
-            mesh.position.set(-1.313, 0.148, -0.22);
+            mesh?.scale.set(0.0382, 0.028, 0.022);
+            mesh?.position.set(-2.008, 0.148, -0.22);
             this.group?.add(mesh);
           }
 

+ 1 - 1
src/views/vent/monitorManager/windowMonitor/index.vue

@@ -299,7 +299,7 @@
 
   onMounted(() => {
     loading.value = true;
-    mountedThree(player1.value, player2.value).then(async () => {
+    mountedThree(player1.value).then(async () => {
       await setModelType('singleWindow');
       loading.value = false;
       addFmText(selectData);

+ 3 - 10
src/views/vent/monitorManager/windowMonitor/shuangdaoFc.threejs.ts

@@ -285,19 +285,12 @@ class doubleWindow {
         this.initAnimation();
 
         setTimeout(async () => {
-          const videoPlayer1 = document.getElementById('fc-player1')?.getElementsByClassName('vjs-tech')[0];
           const videoPlayer2 = document.getElementById('fc-player2')?.getElementsByClassName('vjs-tech')[0];
-          if (videoPlayer1) {
-            const mesh = renderVideo(this.group, videoPlayer1, 'player1');
-            mesh.scale.set(0.0385, 0.028, 0.022);
-            mesh.position.set(4.48, 0.125, -0.22);
-            this.group?.add(mesh);
-          }
           if (videoPlayer2) {
             const mesh = renderVideo(this.group, videoPlayer2, 'player2');
-            mesh.scale.set(0.0385, 0.028, 0.022);
-            mesh.position.set(-4.307, 0.145, -0.22);
-            this.group?.add(mesh);
+            mesh?.scale.set(0.0385, 0.028, 0.022);
+            mesh?.position.set(-4.307, 0.145, -0.22);
+            this.group?.add(mesh as THREE.Mesh);
           }
           resolve(null);
         }, 0);

+ 6 - 4
src/views/vent/monitorManager/windowMonitor/window.threejs.ts

@@ -123,9 +123,11 @@ export const setModelType = (type) => {
       if (model.scene.getObjectByName('ddFc')) {
         model.scene.remove(singleWindowObj.group);
       }
+      const oldCameraPosition = { x: 100, y: 0, z: 1000 };
+      model.scene.add(doubleWindowObj.group);
       setTimeout(async () => {
         resolve(null);
-        const oldCameraPosition = { x: 100, y: 0, z: 1000 };
+
         const position = doubleWindowObj.group;
         await animateCamera(
           oldCameraPosition,
@@ -134,7 +136,6 @@ export const setModelType = (type) => {
           { x: position.x, y: position.y, z: position.z },
           model
         );
-        model.scene.add(doubleWindowObj.group);
       }, 300);
     } else if (windowType === 'singleWindow') {
       // 显示单道风窗
@@ -143,10 +144,12 @@ export const setModelType = (type) => {
       if (model.scene.getObjectByName('sdFc')) {
         model.scene.remove(doubleWindowObj.group);
       }
+      const oldCameraPosition = { x: 100, y: 0, z: 500 };
+      model.scene.add(singleWindowObj.group);
       setTimeout(async () => {
         resolve(null);
         const position = { x: 0, y: 0, z: 0 };
-        const oldCameraPosition = { x: 100, y: 0, z: 500 };
+
         await animateCamera(
           oldCameraPosition,
           { x: 0, y: 0, z: 0 },
@@ -154,7 +157,6 @@ export const setModelType = (type) => {
           { x: position.x, y: position.y, z: position.z },
           model
         );
-        model.scene.add(singleWindowObj.group);
       }, 300);
     }
   });

+ 6 - 6
src/views/vent/monitorManager/windrectMonitor/duishe.threejs.ts

@@ -75,7 +75,7 @@ class dsWindRect {
 
   // 设置模型位置
   setModalPosition() {
-    this.group?.scale.set(28, 28, 28);
+    this.group?.scale.set(27, 27, 27);
     this.group?.position.set(-10, 25, 20);
   }
 
@@ -205,8 +205,8 @@ class dsWindRect {
         const planeGeometry = new THREE.PlaneGeometry(5.6, 3.46); // 平面3维几何体PlaneGeometry
         const planeMesh = new THREE.Mesh(planeGeometry, textMaterial);
         planeMesh.name = 'monitorText';
-        planeMesh.scale.set(0.18, 0.18, 1);
-        planeMesh.position.set(-1.08, 0.038, -0.42);
+        planeMesh.scale.set(0.0022, 0.0022, 0.0022);
+        planeMesh.position.set(3.25, -0.002, -0.41);
         this.group?.add(planeMesh);
       }
     });
@@ -345,9 +345,9 @@ class dsWindRect {
           const videoPlayer1 = document.getElementById('cf-player1')?.getElementsByClassName('vjs-tech')[0];
           if (videoPlayer1) {
             const mesh = renderVideo(this.group, videoPlayer1, 'player1');
-            mesh.scale.set(0.042, 0.036, 1);
-            mesh.position.set(2.217, 0.016, -0.38);
-            this.group?.add(mesh);
+            mesh?.scale.set(0.042, 0.036, 1);
+            mesh?.position.set(2.7, 0.016, -0.38);
+            this.group?.add(mesh as THREE.Mesh);
           }
           resolve(null);
         }, 0);

+ 13 - 12
src/views/vent/monitorManager/windrectMonitor/longmen.threejs.ts

@@ -68,6 +68,7 @@ class lmWindRect {
 
   // 设置模型位置
   setModalPosition() {
+    this.group?.scale.set(22, 22, 22);
     this.group?.position.set(-25, 25, 15);
   }
 
@@ -197,8 +198,8 @@ class lmWindRect {
         const planeGeometry = new THREE.PlaneGeometry(560, 346); // 平面3维几何体PlaneGeometry
         const planeMesh = new THREE.Mesh(planeGeometry, textMaterial);
         planeMesh.name = 'monitorText';
-        planeMesh.scale.set(0.045, 0.045, 0.045);
-        planeMesh.position.set(-27.26, 0.848, -10.46);
+        planeMesh.scale.set(0.0022, 0.0022, 0.0022);
+        planeMesh.position.set(3.25, -0.002, -0.41);
         this.group?.add(planeMesh);
       }
     });
@@ -323,19 +324,19 @@ class lmWindRect {
 
         setTimeout(async () => {
           const videoPlayer1 = document.getElementById('cf-player1')?.getElementsByClassName('vjs-tech')[0];
-          const videoPlayer2 = document.getElementById('cf-player2')?.getElementsByClassName('vjs-tech')[0];
+          // const videoPlayer2 = document.getElementById('cf-player2')?.getElementsByClassName('vjs-tech')[0];
           if (videoPlayer1) {
             const mesh = renderVideo(this.group, videoPlayer1, 'player1');
-            mesh.scale.set(1.07, 0.92, 1);
-            mesh.position.set(93.73, 0.465, -9.62);
-            this.group?.add(mesh);
-          }
-          if (videoPlayer2) {
-            const mesh = renderVideo(this.group, videoPlayer2, 'player2');
-            mesh.scale.set(1.07, 0.92, 1);
-            mesh.position.set(-86.77, 0.405, -9.62);
-            this.group?.add(mesh);
+            mesh?.scale.set(0.042, 0.036, 0.022);
+            mesh?.position.set(-2.74, 0.03, -0.39);
+            this.group?.add(mesh as THREE.Mesh);
           }
+          // if (videoPlayer2) {
+          //   const mesh = renderVideo(this.group, videoPlayer2, 'player2');
+          //   mesh?.scale.set(0.0385, 0.028, 0.022);
+          //   mesh?.position.set(-86.77, 0.405, -9.62);
+          //   this.group?.add(mesh as THREE.Mesh);
+          // }
           resolve(null);
         }, 0);
       });

+ 7 - 7
src/views/vent/monitorManager/windrectMonitor/windrect.threejs.ts

@@ -152,12 +152,12 @@ export const setModelType = (type) => {
       if (model.scene.getObjectByName('dscf')) {
         model.scene.remove(dsWindRectObj.group);
       }
-
+      const oldCameraPosition = { x: -1000, y: 100, z: 500 };
       model.scene.add(lmWindRectObj.group);
       setTimeout(async () => {
         resolve(null);
         const position = lmWindRectObj.group.position;
-        const oldCameraPosition = { x: -1000, y: 100, z: 500 };
+
         await animateCamera(
           oldCameraPosition,
           oldCameraPosition,
@@ -176,10 +176,10 @@ export const setModelType = (type) => {
         model.scene.remove(dsWindRectObj.group);
       }
       model.scene.add(zdWindRectObj.group);
+      const oldCameraPosition = { x: -1000, y: 100, z: 500 };
       setTimeout(async () => {
         resolve(null);
         const position = zdWindRectObj.group.position;
-        const oldCameraPosition = { x: -1000, y: 100, z: 500 };
         await animateCamera(
           oldCameraPosition,
           oldCameraPosition,
@@ -201,7 +201,7 @@ export const setModelType = (type) => {
       setTimeout(async () => {
         resolve(null);
         const position = dsWindRectObj.group.position;
-        const oldCameraPosition = { x: -1000, y: 100, z: 500 };
+        const oldCameraPosition = { x: -1020, y: 100, z: 500 };
         await animateCamera(
           oldCameraPosition,
           oldCameraPosition,
@@ -235,9 +235,9 @@ export const mountedThree = (playerVal1, playerVal2) => {
 
 export const destroy = () => {
   if (model) {
-    lmWindRectObj.destroy();
-    zdWindRectObj.destroy();
-    zdWindRectObj.destroy();
+    lmWindRectObj?.destroy();
+    zdWindRectObj?.destroy();
+    zdWindRectObj?.destroy();
     model.deleteModal();
     model = null;
     group = null;

+ 2 - 2
src/views/vent/monitorManager/windrectMonitor/zhedie.threejs.ts

@@ -321,8 +321,8 @@ class zdWindRect {
           const videoPlayer1 = document.getElementById('cf-player1')?.getElementsByClassName('vjs-tech')[0];
           if (videoPlayer1) {
             const mesh = renderVideo(this.group, videoPlayer1, 'player1');
-            mesh.scale.set(0.0385, 0.028, 0.022);
-            mesh.position.set(4.792, -0.16, -0.4);
+            mesh?.scale.set(0.0385, 0.028, 0.022);
+            mesh?.position.set(4.792, -0.16, -0.4);
             this.group?.add(mesh);
           }
           resolve(null);