jiaxing.liao недель назад: 3
Родитель
Сommit
32bc040c93

+ 0 - 2
components.d.ts

@@ -19,8 +19,6 @@ declare module 'vue' {
     ElInput: typeof import('element-plus/es')['ElInput']
     ElInputNumber: typeof import('element-plus/es')['ElInputNumber']
     ElOption: typeof import('element-plus/es')['ElOption']
-    ElRadio: typeof import('element-plus/es')['ElRadio']
-    ElRadioGroup: typeof import('element-plus/es')['ElRadioGroup']
     ElRow: typeof import('element-plus/es')['ElRow']
     ElSelect: typeof import('element-plus/es')['ElSelect']
     ElTable: typeof import('element-plus/es')['ElTable']

+ 58 - 29
src/components/mindmap/Mindmap.vue

@@ -22,7 +22,7 @@ import Drag from "simple-mind-map/src/plugins/Drag";
 import SearchPlugin from "simple-mind-map/src/plugins/Search";
 import Watermark from "simple-mind-map/src/plugins/Watermark";
 
-import changIco from "@/assets/warning.svg";
+// import changIco from "@/assets/warning.svg";
 import deleteIcon from "@/assets/delete.svg";
 import { ElTooltip } from "element-plus";
 
@@ -91,7 +91,7 @@ onMounted(() => {
       backgroundColor: "#eee",
     },
     // 布局
-    layout: config?.layout || 'logicalStructure',
+    layout: config?.layout || "logicalStructure",
     // 拖拽限制
     beforeDragStart: ([node]: any[]) => {
       console.log("dran start", node.nodeData);
@@ -105,40 +105,69 @@ onMounted(() => {
     customCreateNodeContent: (node: any) => {
       const sourceData = node.nodeData;
       const data = sourceData.data;
-      const id = sourceData.id;
-
+      console.log("node data", data);
       const App = defineComponent({
         render() {
           return (
             <div class="text-#666 flex items-center">
-              <span class="mr-4px" style={{ color: node.isRoot ? "#fff" : "" }}>
-                {data?.name}
-              </span>
-              {data?.qty !== undefined && data?.qty !== '' && !node?.isRoot && (
-                <ElTooltip content="数量" placement="top">
-                  <span class="mr-4px text-white px-8px py-2px bg-#40bf8a rounded-4px">
-                    {data?.qty ?? "-"}
-                  </span>
-                </ElTooltip>
-              )}
-              {data?.type && (
-                <ElTooltip content="类型" placement="top">
-                  <span class="mr-4px text-white px-8px py-2px bg-#bf4f40 rounded-4px">
-                    {data?.type || "-"}
-                  </span>
+              {data?.type === "M" ? (
+                <ElTooltip
+                  placement="top"
+                  v-slots={{
+                    content: (
+                      <>
+                        <div>产品类型:{data?.product_category}</div>
+                        <div>制造区域:{data?.manufacture_area}</div>
+                        <div>制造单元:{data?.manufacture_report}</div>
+                        <div>标准用量:{data?.qty}</div>
+                      </>
+                    ),
+                  }}
+                >
+                  <div class="flex">
+                    <span class="mr-4px">{data?.process}</span>
+                    <span class="mr-4px">{data?.name}</span>
+                    <span class="mr-4px">{data?.erp_code}</span>
+                    <span class="mr-4px text-white px-8px py-2px bg-red rounded-4px">
+                      M
+                    </span>
+                  </div>
                 </ElTooltip>
-              )}
-              {data?.is_change && (
-                <ElTooltip content={data?.change_content} placement="top">
-                  <img src={changIco} class="w-20px h-20px inline-block" alt="" />
+              ) : ["P", "C"].includes(data?.type) ? (
+                <ElTooltip
+                  placement="top"
+                  v-slots={{
+                    content: (
+                      <>
+                        <div>材料牌号:{data?.material_grade}</div>
+                        <div>材料供应商:{data?.supplier}</div>
+                        <div>标准用量:{data?.qty}</div>
+                      </>
+                    ),
+                  }}
+                >
+                  <div class="flex">
+                    <span class="mr-4px">{data?.part_attribute}</span>
+                    <span class="mr-4px">{data?.name}</span>
+                    <span class="mr-4px">{data?.erp_code}</span>
+                    {data.type === "P" ? (
+                      <span class="mr-4px text-white px-8px py-2px bg-green rounded-4px">
+                        P
+                      </span>
+                    ) : (
+                      <span class="mr-4px text-white px-8px py-2px bg-yellow rounded-4px">
+                        C
+                      </span>
+                    )}
+                  </div>
                 </ElTooltip>
+              ) : (
+                <div class="text-#fff">{data?.name}</div>
               )}
-              {!id && (
-                <span class="bg-green leading-14px text-12px px-4px py-2px text-#fff rounded-4px">new</span>
-              )}
+              {/* 删除标识 */}
               {data?.is_deleted && (
                 <ElTooltip content='删除标记' placement="top">
-                  <img src={deleteIcon} class="w-20px h-20px inline-block" alt="" />
+                  <img src={deleteIcon} class="w-20px h-20px inline-block" />
                 </ElTooltip>
               )}
             </div>
@@ -186,12 +215,12 @@ onMounted(() => {
     // 新增也会触发该事件,所以需要判断一下
     if (args?.[1]) {
       emit("nodeDblClick", args[0]);
-    } 
+    }
   });
 
   // 数据变化详情 delete create update
   instance.on("data_change_detail", (data: any) => {
-    console.log('date change detail', data)
+    console.log("date change detail", data);
     emit("dataChange", data);
   });
 

+ 3 - 3
src/components/mindmap/defaultTheme.ts

@@ -144,14 +144,14 @@ export default {
     shape: 'rectangle',
     marginX: 50,
     marginY: 0,
-    fillColor: 'transparent',
+    fillColor: '#fff',
     fontFamily: '微软雅黑, Microsoft YaHei',
     color: '#6a6d6c',
     fontSize: 14,
     fontWeight: 'normal',
     fontStyle: 'normal',
-    borderColor: 'transparent',
-    borderWidth: 0,
+    borderColor: '#549688',
+    borderWidth: 1,
     borderRadius: 5,
     borderDasharray: 'none',
     textDecoration: 'none',

Разница между файлами не показана из-за своего большого размера
+ 587 - 193
src/pages/excel/ConfigDrawer.vue


+ 21 - 13
src/pages/excel/MindmapModal.vue

@@ -40,7 +40,9 @@
           </div>
         </el-form-item>
       </el-form>
-      <div class="flex gap-4px">
+      <div class="flex items-center gap-4px">
+        <span class="text-12px mr-12px font-bold text-#f56c6c">{{ type == '1' ? '工程BOM' : '制造BOM'}}编辑</span>
+        <span class="text-12px text-yellow mr-12px">当前版本号:{{ version || '-'}}</span>
         <el-button type="primary" link @click="handleSave" class="mr-8px"
           ><img class="w-1em mr-4px" :src="saveImg" alt="" />保存</el-button
         >
@@ -145,6 +147,8 @@ const props = defineProps<{
   defaultOpen?: boolean;
   hideClose?: boolean;
   defaultData?: any;
+  version?: string
+  type?: string;
 }>();
 
 const visible = ref(!!props.defaultOpen);
@@ -331,7 +335,6 @@ const handleNodeDbClick = (node: any) => {
 
 // 节点配置结束
 const handleConfigOk = (updateNodeData: any) => {
-  console.log('handleConfigOk', updateNodeData);
   const mindmap = mindmapRef.value?.getInstance();
   const allData = mindmap?.getData(false);
   bfsWalk(allData, (node: any) => {
@@ -346,7 +349,7 @@ const handleSave = () => {
   const mindmap = mindmapRef.value?.getInstance();
   const data = mindmap?.getData(false);
   let valid = true;
-  let hasAddData = false;
+  // let hasAddData = false;
 
   bfsWalk(data, (node: any) => {
     delete node?.smmVersion;
@@ -357,18 +360,20 @@ const handleSave = () => {
     delete node.data?.text;
     delete node.data?.id;
     // TODO: 业务校验
-    if (!node.data.name?.trim()) {
-      valid = false;
-    }
-    if(node.data.is_add) {
-      hasAddData = true;
-    }
+    // if (!node.data.name?.trim()) {
+    //   valid = false;
+    // }
+    // if(node.data.is_add) {
+    //   hasAddData = true;
+    // }
   });
 
   if (!valid) {
     ElMessage.error('请检查数据是否填写完整!');
     return;
   }
+  // 添加版本号
+  data.version = props.version;
 
   try {
     window.parent?.BpmTools?.program(
@@ -377,7 +382,7 @@ const handleSave = () => {
         model: data,
       },
       () => {
-        ElMessage.success(`保存成功!${hasAddData ? '存在新增数据,待审批后即可展示!' : ''}`);
+        ElMessage.success(`保存成功!`);
         emit('refresh');
       }
     );
@@ -402,7 +407,7 @@ const handleDataChange = (newData: any) => {
         is_disable: false,
         is_change: false,
         is_add: true,
-        qty: 89,
+        qty: undefined,
         name: '',
         type: '',
         bom_code: '',
@@ -411,7 +416,10 @@ const handleDataChange = (newData: any) => {
       },
     };
     handleConfigOk(newNodeData.data);
-    configDrawerRef.value.open(newNodeData, 'add');
+    const mindmap = mindmapRef.value?.getInstance();
+    const nodeData = mindmap?.renderer.findNodeByUid(newNodeData?.data?.uid);
+
+    configDrawerRef.value.open(newNodeData, 'add', nodeData.layerIndex);
   }
 };
 
@@ -488,7 +496,7 @@ onBeforeUnmount(() => {
   top: 0;
   left: 0;
   width: 100%;
-  height: 100%;
+  height: 100vh;
   z-index: 99;
   display: flex;
   flex-direction: column;

+ 46 - 54
src/pages/excel/TableModal.vue

@@ -1,5 +1,5 @@
 <template>
-  <el-dialog title="推荐零件" v-model="open">
+  <el-dialog title="推荐零件" width="800" v-model="open">
     <el-input
       class="mb-12px"
       v-model="part_name"
@@ -10,40 +10,27 @@
       </template>
     </el-input>
     <el-table
+      header-row-class-name="cus-table-header"
       :loading="loading"
       :data="dataSource"
       :max-height="400"
       @current-change="handleSelect"
       highlight-current-row
     >
-      <el-table-column prop="part_name" label="零件名" width="180" />
-      <el-table-column prop="erp_code" label="ERP号" width="180" />
-      <el-table-column prop="part_type" label="类型" width="180">
-        <template #default="{ row }">
-          <span>{{
-            options.find((item) => item.value === row.part_type)?.label
-          }}</span>
-        </template>
-      </el-table-column>
-      <el-table-column prop="appreance_treat" label="表面处理" width="180" />
-      <el-table-column prop="color" label="颜色" width="180" />
-      <el-table-column prop="color_config" label="颜色配置" width="180" />
-      <el-table-column prop="material_grade" label="材料牌号" width="180" />
-      <el-table-column prop="material_name" label="材料名称" width="180" />
       <el-table-column
-        prop="technology_consume"
-        label="工艺消耗定额"
-        width="180"
+        prop="part_type"
+        label="自制/外购/支给(M/P/C)"
+        width="200"
       />
-      <el-table-column prop="length" label="长" width="180" />
-      <el-table-column prop="width" label="宽" width="180" />
-      <el-table-column prop="height" label="高" width="180" />
-      <el-table-column prop="process" label="生产工艺" width="180" />
-      <el-table-column prop="net_weight" label="每件净重" width="180" />
-      <el-table-column prop="rate" label="利用率" width="180" />
-      <el-table-column prop="spec_standards" label="规格及标准" width="180" />
-      <el-table-column prop="supplier" label="供应商" width="180" />
-      <el-table-column prop="unit" label="单位" width="180" />
+      <el-table-column prop="part_attribute" label="零件属性" width="180" />
+      <el-table-column prop="product_category" label="产品类别" width="180" />
+      <el-table-column prop="manufacture_report" label="制造单元" width="180" />
+      <el-table-column prop="manufacture_area" label="制造区域" width="180" />
+      <el-table-column prop="erp_code" label="NK零件号" width="180" />
+      <el-table-column prop="part_name" label="NK零件名称" width="180" />
+      <el-table-column prop="process" label="制造工艺" width="180" />
+      <el-table-column prop="material_grade" label="材料牌号" width="180" />
+      <el-table-column prop="unit" label="计量单位" width="180" />
     </el-table>
     <template #footer>
       <div class="flex justify-between">
@@ -64,40 +51,34 @@
 </template>
 
 <script setup lang="ts">
-import { Search } from '@element-plus/icons-vue';
-import { ref, defineExpose, defineEmits } from 'vue';
+import { Search } from "@element-plus/icons-vue";
+import { ref, defineExpose, defineEmits } from "vue";
 
 export interface IRecomend {
   process: string;
-  color: string;
-  color_config: string;
-  technology_consume: number;
-  length: number;
+  part_attribute: string;
+  product_category: string;
+  manufacture_report: number;
+  manufacture_area: number;
   part_type: string;
   erp_code: string;
-  appreance_treat: string;
-  width: number;
-  id: string;
-  material_grade: string;
-  material_name: string;
   part_name: string;
-  height: number;
+  material_grade: number;
+  id: string;
+  unit: string;
 }
 
-const options = [
-  { label: '自制', value: 'M' },
-  { label: '外购', value: 'P' },
-  { label: '标准件', value: 'S' },
-  { label: '领用件', value: 'CSMT' },
-  { label: 'DB', value: 'DB' },
-  { label: 'CCC', value: 'CCC' },
-  { label: 'NA', value: 'NA' },
-];
+// const options = [
+//   { label: "自制", value: "M" },
+//   { label: "外购", value: "P" },
+//   { label: "支给", value: "C" },
+// ];
 
-const emit = defineEmits(['ok']);
+const emit = defineEmits(["ok"]);
 
 const open = ref(false);
-const part_name = ref('');
+const part_name = ref("");
+const part_type = ref("");
 const dataSource = ref([]);
 const loading = ref(false);
 const currentRow = ref<IRecomend>();
@@ -127,8 +108,9 @@ const getData = () => {
 
   window.parent?.BpmTools?.program(
     {
-      interfaceCode: 'Common.getPartRecomendList',
+      interfaceCode: "Common.getPartRecomendList",
       part_name: part_name.value,
+      part_type: part_type.value,
     },
     (res: any) => {
       dataSource.value = res || [];
@@ -138,7 +120,7 @@ const getData = () => {
 };
 
 const handleOk = () => {
-  emit('ok', currentRow.value);
+  emit("ok", currentRow.value);
   open.value = false;
   currentRow.value = undefined;
 };
@@ -148,10 +130,20 @@ const handleSelect = (val: IRecomend) => {
 };
 
 defineExpose({
-  open: (str: string = '') => {
+  open: (partName: string = "", partType = "") => {
     open.value = true;
-    part_name.value = str;
+    part_name.value = partName;
+    part_type.value = partType;
     getData();
   },
 });
 </script>
+
+<style lang="less">
+.cus-table-header {
+  color: #666;
+  .el-table__cell {
+    background-color: #f5f5f5 !important;
+  }
+}
+</style>

+ 85 - 51
src/pages/excel/data.ts

@@ -1,59 +1,93 @@
 export class BOMItem {
-  type?: string;                // 类型
-  bom_code?: string;            // BOM编号
-  qty?: number;                 // 数量
-  appreance_treat?: string;     // 表面处理
-  color?: string;               // 颜色
-  color_config?: string;        // 颜色配置
-  customer_part_code?: string;  // 客户零件号
-  customer_part_vesion?: string;// 客户版本号
-  erp_code?: string;           // ERP号
-  height?: number;              // 高
-  internal_part_number?: string;// 内部零件号
-  length?: number;              // 长
-  material_grade?: string;      // 材料牌号
-  material_name?: string;       // 材料名称
-  net_weight?: number;          // 每件净重
-  note?: string;                // 备注
-  part_name?: string;           // 零件名/描述
-  part_type?: string;           // 零件类型
-  process?: string;             // 生产工艺
-  rate?: number;                // 利用率
-  spec_standards?: string;      // 规格及标准
-  supplier?: string;            // 供应商
-  technology_consume?: number;  // 工艺消耗定额
-  unit?: string;                // 单位
-  width?: number;               // 宽
+  gridorder?: string; // "序号",
+  customer_part_code?: string; // "客户零件号",
+  customer_part_name?: string; // "客户零件名称",
+  customer_part_vesion?: string; // "客户图纸号",
+  erp_code?: string; // "NK零件号",
+  part_name?: string; // "NK零件名称",
+  unit_config?: string; // "辆份配置",
+  config_ratio?: string; // "配置比",
+  product_category?: string; // "产品类别",
+  process?: string; // "制造工艺",
+  length?: string; // "长",
+  width?: string; // "宽",
+  height?: string; // "高",
+  color?: string; // "颜色",
+  color_config?: string; // "光泽度",
+  part_type?: string; // "自制/外购/支给(M/P/C)",
+  part_attribute?: string; // "零件属性",
+  material_grade?: string; // "材料牌号",
+  supplier?: string; // "材料供应商",
+  unit?: string; // "计量单位",
+  qty?: string; // "标准用量",
+  technology_consume?: string; // "工艺消耗",
+  nonperform_rate?: string; // "不良率%",
+  manufacture_area?: string; // "制造区域",
+  manufacture_report?: string; // "制造单元",
+  manufature_equip?: string; // "制造设备类(组)",
+  moldtooling_fixture?: string; // "模具/工装治具",
+  cavities?: string; // "模腔数/取数(pcs)",
+  production_cycle?: string; // "制造周期(S)",
+  holding_number?: string; // "持台人数",
+  single_piece?: string; // "单件节拍(S)",
+  package_type?: string; // "外包类型",
+  innerpackage_type?: string; // "内包类型",
+  snp?: string; // "SNP",
+  cycle_number?: string; // "循环次数(次)",
+  supply_local?: string; // "供货地信息",
+  supplier_distance?: string; // "供货距离(KM)",
+  supply_code?: string; // "供应商编码",
+  min_order?: string; // "最小起订量",
+  remark?: string; // "备注",
+  picture?: string; // "简图",
+  parent_gridorder?: string; // "上级序号",
 
   constructor(init?: Partial<BOMItem>) {
-    this.type = undefined;                // 类型
-    this.bom_code = undefined;            // BOM编号
-    this.qty = undefined;                  // 数量
-    this.appreance_treat = undefined;     // 表面处理
-    this.color = undefined;               // 颜色
-    this.color_config = undefined;        // 颜色配置
-    this.customer_part_code = undefined;  // 客户零件号
-    this.customer_part_vesion = undefined;// 客户版本号
-    this.erp_code = undefined;           // ERP号
-    this.height = undefined;              // 高
-    this.internal_part_number = undefined;// 内部零件号
-    this.length = undefined;              // 长
-    this.material_grade = undefined;      // 材料牌号
-    this.material_name = undefined;       // 材料名称
-    this.net_weight = undefined;          // 每件净重
-    this.note = undefined;                // 备注
-    this.part_name = undefined;           // 零件名/描述
-    this.part_type = undefined;           // 零件类型
-    this.process = undefined;             // 生产工艺
-    this.rate = undefined;                // 利用率
-    this.spec_standards = undefined;      // 规格及标准
-    this.supplier = undefined;            // 供应商
-    this.technology_consume = undefined;  // 工艺消耗定额
-    this.unit = undefined;                // 单位
-    this.width = undefined;               // 宽
+    this.gridorder = undefined;  // "序号",
+    this.customer_part_code = undefined;  // "客户零件号",
+    this.customer_part_name = undefined;  // "客户零件名称",
+    this.customer_part_vesion = undefined;  // "客户图纸号",
+    this.erp_code = undefined;  // "NK零件号",
+    this.part_name = undefined;  // "NK零件名称",
+    this.unit_config = undefined;  // "辆份配置",
+    this.config_ratio = undefined;  // "配置比",
+    this.product_category = undefined;  // "产品类别",
+    this.process = undefined;  // "制造工艺",
+    this.length = undefined;  // "长",
+    this.width = undefined;  // "宽",
+    this.height = undefined;  // "高",
+    this.color = undefined;  // "颜色",
+    this.color_config = undefined;  // "光泽度",
+    this.part_type = undefined;  // "自制/外购/支给(M/P/C)",
+    this.part_attribute = undefined;  // "零件属性",
+    this.material_grade = undefined;  // "材料牌号",
+    this.supplier = undefined;  // "材料供应商",
+    this.unit = undefined;  // "计量单位",
+    this.qty = undefined;  // "标准用量",
+    this.technology_consume = undefined;  // "工艺消耗",
+    this.nonperform_rate = undefined;  // "不良率%",
+    this.manufacture_area = undefined;  // "制造区域",
+    this.manufacture_report = undefined;  // "制造单元",
+    this.manufature_equip = undefined;  // "制造设备类(组)",
+    this.moldtooling_fixture = undefined;  // "模具/工装治具",
+    this.cavities = undefined;  // "模腔数/取数(pcs)",
+    this.production_cycle = undefined;  // "制造周期(S)",
+    this.holding_number = undefined;  // "持台人数",
+    this.single_piece = undefined;  // "单件节拍(S)",
+    this.package_type = undefined;  // "外包类型",
+    this.innerpackage_type = undefined;  // "内包类型",
+    this.snp = undefined;  // "SNP",
+    this.cycle_number = undefined;  // "循环次数(次)",
+    this.supply_local = undefined;  // "供货地信息",
+    this.supplier_distance = undefined;  // "供货距离(KM)",
+    this.supply_code = undefined;  // "供应商编码",
+    this.min_order = undefined;  // "最小起订量",
+    this.remark = undefined;  // "备注",
+    this.picture = undefined;  // "简图",
+    this.parent_gridorder = undefined;
 
     if (init) {
       Object.assign(this, init);
     }
   }
-}
+}

+ 12 - 10
src/pages/excel/index.vue

@@ -2,12 +2,13 @@
   <div class="page-container">
     <div class="custom-menu-container">
       <div>
+        <span class="text-12px text-yellow mr-12px">当前版本号:{{ version || '-'}}</span>
         <el-button link @click="handleSave" class="mr-8px"
           ><img class="w-1em mr-4px" :src="saveImg" />保存</el-button
         >
-        <el-button link @click="handleSaveZip" class="mr-8px"
+        <!-- <el-button link @click="handleSaveZip" class="mr-8px"
           ><img class="w-1em mr-4px" :src="saveImg" />压缩保存</el-button
-        >
+        > -->
         <!-- <el-button link @click="openMindmap"><img class="w-1em mr-4px" :src="mindmapImg"/>思维导图模式</el-button> -->
       </div>
       <!-- <div>
@@ -39,13 +40,14 @@ import { useEditBomStore } from "@/store/editbom";
 import type { FUniver, Univer } from "@univerjs/presets";
 import { useRoute } from "vue-router";
 import { ElMessage } from "element-plus";
-import { unzipData, zipData } from "@/utils";
+// import { unzipData, zipData } from "@/utils";
 
 const sheetRef = ref<UniverExpose | null>(null);
 const mindmapModalRef = ref<any>();
 const editBomStore = useEditBomStore();
 const route = useRoute();
 const workbook = ref<any>();
+const version = route.query?.version as string;
 
 const onSheetCreated = (univer: Univer, univerApi: FUniver) => {
   editBomStore.univer = univer;
@@ -87,13 +89,13 @@ const handleSave = () => {
 };
 
 // 压缩保存
-const handleSaveZip = async () => { 
-  const workbook = sheetRef.value?.getUniverSnapshot();
-  console.log(JSON.stringify(workbook), window.parent);
-  const data = zipData(workbook);
-  console.log('压缩之后:', data);
-  console.log('解压之后:', unzipData(data));
-};
+// const handleSaveZip = async () => { 
+//   const workbook = sheetRef.value?.getUniverSnapshot();
+//   console.log(JSON.stringify(workbook), window.parent);
+//   const data = zipData(workbook);
+//   console.log('压缩之后:', data);
+//   console.log('解压之后:', unzipData(data));
+// };
 
 onMounted(() => {
   if (!route.query?.id) return;

+ 5 - 0
src/pages/mindmap/index.vue

@@ -3,6 +3,8 @@
     ref="mindmapModalRef"
     :hide-close="true"
     :default-data="mindmapData"
+    :version="version"
+    :type="type"
     defaultOpen
     @refresh="getData"
   />
@@ -21,6 +23,8 @@ import {
 const mindmapModalRef = ref<InstanceType<typeof MindmapModal>>();
 const route = useRoute();
 const mindmapData = ref<any>();
+const version = route.query?.version as string;
+const type = route.query?.type as string;
 
 const getData = () => {
   if (!route.query?.id) return;
@@ -37,6 +41,7 @@ const getData = () => {
     {
       interfaceCode: 'Common.getBOMAiImageData',
       bom_id: route.query.id,
+      version: version
     },
     (res: any) => {
       loading?.close();

Разница между файлами не показана из-за своего большого размера
+ 1 - 1
stats.html