Sfoglia il codice sorgente

Merge branch 'feature/text' into develop

huang, kai (Contractor) 10 mesi fa
parent
commit
68a7274d4c
30 ha cambiato i file con 1092 aggiunte e 1358 eliminazioni
  1. 15 0
      admin.ui.plus-master/src/stores/personalStore.ts
  2. 1 141
      admin.ui.plus-master/src/stores/themeConfig.ts
  3. 217 222
      admin.ui.plus-master/src/views/admin/PCBA/boardFunctionResult/index.vue
  4. 29 33
      admin.ui.plus-master/src/views/admin/PCBA/boardFunctionSummary/index.vue
  5. 156 172
      admin.ui.plus-master/src/views/admin/PCBA/boardList/index.vue
  6. 159 240
      admin.ui.plus-master/src/views/admin/PCBA/boardSummary/index.vue
  7. 183 200
      admin.ui.plus-master/src/views/admin/PCBA/boardTestRecord/index.vue
  8. 5 6
      admin.ui.plus-master/src/views/admin/authorize/dispenserAuthCode/index.vue
  9. 2 2
      admin.ui.plus-master/src/views/admin/authorize/fuelingFTP/index.vue
  10. 5 9
      admin.ui.plus-master/src/views/admin/authorize/fuelingFTPofDate/index.vue
  11. 11 2
      admin.ui.plus-master/src/views/admin/authorize/fuelingsdk/index.vue
  12. 13 2
      admin.ui.plus-master/src/views/admin/authorize/softwarePackageManagement/index.vue
  13. 19 1
      admin.ui.plus-master/src/views/admin/personal/index.vue
  14. 1 111
      admin.ui.plus-master/src/views/admin/product/goodInfo/index.vue
  15. 15 6
      admin.ui.plus-master/src/views/admin/product/groupLogo/index.vue
  16. 23 2
      admin.ui.plus-master/src/views/admin/product/qrBook/components/qrbook-edit.vue
  17. 12 2
      admin.ui.plus-master/src/views/admin/product/qrBook/index.vue
  18. 18 9
      admin.ui.plus-master/src/views/admin/product/record/index.vue
  19. 2 1
      admin.ui.plus-master/src/views/admin/product/type/index.vue
  20. 3 3
      admin.ui.plus-master/src/views/admin/statement/alarmManagement/index.vue
  21. 21 3
      admin.ui.plus-master/src/views/admin/statement/alarmRules/index.vue
  22. 26 6
      admin.ui.plus-master/src/views/admin/statement/alarmRules/template.vue
  23. 2 2
      admin.ui.plus-master/src/views/admin/statement/associationManagement/index.vue
  24. 2 2
      admin.ui.plus-master/src/views/admin/statement/gasStationManagement/index.vue
  25. 2 2
      admin.ui.plus-master/src/views/admin/statement/listOfOilEngines/index.vue
  26. 123 161
      admin.ui.plus-master/src/views/admin/statement/moreOilEngineDetails/component/main.vue
  27. 3 3
      admin.ui.plus-master/src/views/admin/statement/partsManagement/oilGun/index.vue
  28. 21 12
      admin.ui.plus-master/src/views/admin/workbench/index.vue
  29. 2 2
      admin.ui.plus-master/src/views/example/codeGeneration/index.vue
  30. 1 1
      package-lock.json

+ 15 - 0
admin.ui.plus-master/src/stores/personalStore.ts

@@ -0,0 +1,15 @@
+import { defineStore } from 'pinia';
+
+export const usePersonalStore = defineStore('personal', {
+  state: () => ({
+    personalFormNickName: ''
+  }),
+  getters: {
+    // 可以添加计算属性
+  },
+  actions: {
+    setPersonalFormNickName(nickName: string) {
+      this.personalFormNickName = nickName;
+    }
+  }
+});

+ 1 - 141
admin.ui.plus-master/src/stores/themeConfig.ts

@@ -8,147 +8,7 @@ import { defineStore } from 'pinia'
  */
 export const useThemeConfig = defineStore('themeConfig', {
   state: (): ThemeConfigState => ({
-    themeConfig: {
-      // 是否开启布局配置抽屉
-      isDrawer: false,
-      // 是否创建一个h5历史,否则创建一个 hash 历史记录
-      isCreateWebHistory: true,
-
-      /**
-       * 全局主题
-       */
-      // 默认 primary 主题颜色 蓝色 #409eff 红色 #F34D37 紫色 #6954f0 绿色 #41b584
-      primary: '#6954f0',
-      // 是否开启深色模式
-      isIsDark: false,
-
-      /**
-       * 顶栏设置
-       */
-      // 默认顶栏导航背景颜色
-      topBar: '#323233',
-      // 默认顶栏导航字体颜色
-      topBarColor: '#eaeaea',
-      // 是否开启顶栏背景颜色渐变
-      isTopBarColorGradual: false,
-
-      /**
-       * 菜单设置
-       */
-      // 默认菜单导航背景颜色
-      menuBar: '#252526',
-      // 默认菜单导航字体颜色
-      menuBarColor: '#eaeaea',
-      // 默认菜单高亮背景色
-      menuBarActiveColor: 'rgba(0, 0, 0, 0.2)',
-      // 是否开启菜单背景颜色渐变
-      isMenuBarColorGradual: false,
-
-      /**
-       * 分栏设置
-       */
-      // 默认分栏菜单背景颜色
-      columnsMenuBar: '#333333',
-      // 默认分栏菜单字体颜色
-      columnsMenuBarColor: '#eaeaea',
-      // 默认分栏菜单高亮字体颜色
-      columnsMenuBarActiveColor: '#ffffff',
-      // 是否开启分栏菜单背景颜色渐变
-      isColumnsMenuBarColorGradual: false,
-      // 是否开启分栏菜单鼠标悬停预加载(预览菜单)
-      isColumnsMenuHoverPreload: false,
-
-      /**
-       * 界面设置
-       */
-      // 是否开启菜单水平折叠效果
-      isCollapse: false,
-      // 是否开启菜单手风琴效果
-      isUniqueOpened: true,
-      // 是否开启固定 Header
-      isFixedHeader: true,
-      // 初始化变量,用于更新菜单 el-scrollbar 的高度,请勿删除
-      isFixedHeaderChange: false,
-      // 是否开启经典布局分割菜单(仅经典布局生效)
-      isClassicSplitMenu: true,
-      // 是否开启自动锁屏
-      isLockScreen: false,
-      // 开启自动锁屏倒计时(s/秒)
-      lockScreenTime: 30,
-
-      /**
-       * 界面显示
-       */
-      // 是否开启侧边栏 Logo
-      isShowLogo: true,
-      // 初始化变量,用于 el-scrollbar 的高度更新,请勿删除
-      isShowLogoChange: false,
-      // 是否开启 Breadcrumb,强制经典、横向布局不显示
-      isBreadcrumb: true,
-      // 是否开启 Tagsview
-      isTagsview: true,
-      // 是否开启 Breadcrumb 图标
-      isBreadcrumbIcon: false,
-      // 是否开启 Tagsview 图标
-      isTagsviewIcon: false,
-      // 是否开启 TagsView 缓存
-      isCacheTagsView: true,
-      // 是否开启 TagsView 拖拽
-      isSortableTagsView: true,
-      // 是否开启 TagsView 共用
-      isShareTagsView: false,
-      // 是否开启 Footer 底部版权信息
-      isFooter: false,
-      // 是否开启灰色模式
-      isGrayscale: false,
-      // 是否开启色弱模式
-      isInvert: false,
-      // 是否开启水印
-      isWatermark: false,
-      // 水印文案
-      watermarkText: 'IMES-Cloud',
-
-      /**
-       * 其它设置
-       */
-      // Tagsview 风格:可选值"<tags-style-one|tags-style-four|tags-style-five>",默认 tags-style-five
-      // 定义的值与 `/src/layout/navBars/tagsView/tagsView.vue` 中的 class 同名
-      tagsStyle: 'tags-style-five',
-      // 主页面切换动画:可选值"<slide-right|slide-left|opacitys>",默认 slide-right
-      animation: 'opacitys',
-      // 分栏高亮风格:可选值"<columns-round|columns-card>",默认 columns-round
-      columnsAsideStyle: 'columns-round',
-      // 分栏布局风格:可选值"<columns-horizontal|columns-vertical>",默认 columns-horizontal
-      columnsAsideLayout: 'columns-vertical',
-
-      /**
-       * 布局切换
-       * 注意:为了演示,切换布局时,颜色会被还原成默认,代码位置:/@/layout/navBars/topBar/setings.vue
-       * 中的 `initSetLayoutChange(设置布局切换,重置主题样式)` 方法
-       */
-      // 布局切换:可选值"<默认 defaults | 经典 classic | 横向 transverse | 分栏 columns>",默认 defaults
-      layout: 'columns',
-
-      /**
-       * 后端控制路由
-       */
-      // 是否开启后端控制路由
-      isRequestRoutes: true,
-
-      /**
-       * 全局网站标题 / 副标题
-       */
-      // 网站主标题(菜单导航、浏览器当前网页标题)
-      globalTitle: 'IMES-Cloud',
-      // 网站副标题(登录页顶部文字)
-      globalViceTitle: 'IMES-Cloud',
-      // 网站副标题(登录页顶部文字)
-      globalViceTitleMsg: 'IMES-Cloud 数字化生产平台',
-      // 默认初始语言,可选值"<zh-cn|en|zh-tw>",默认 zh-cn
-      globalI18n: 'zh-cn',
-      // 默认全局组件大小,可选值"<large|'default'|small>",默认 'large'
-      globalComponentSize: 'default',
-    },
+    themeConfig: {"isDrawer":false,"isCreateWebHistory":true,"primary":"#0A2BBC","isIsDark":false,"topBar":"#FFFFFF","topBarColor":"#606266","isTopBarColorGradual":false,"menuBar":"#FFFFFF","menuBarColor":"#606266","menuBarActiveColor":"#e6e9f8","isMenuBarColorGradual":false,"columnsMenuBar":"#FFFFFF","columnsMenuBarColor":"#606266","columnsMenuBarActiveColor":"#ffffff","isColumnsMenuBarColorGradual":false,"isColumnsMenuHoverPreload":false,"isCollapse":false,"isUniqueOpened":true,"isFixedHeader":true,"isFixedHeaderChange":false,"isClassicSplitMenu":true,"isLockScreen":false,"lockScreenTime":30,"isShowLogo":true,"isShowLogoChange":false,"isBreadcrumb":true,"isTagsview":true,"isBreadcrumbIcon":false,"isTagsviewIcon":false,"isCacheTagsView":true,"isSortableTagsView":true,"isShareTagsView":false,"isFooter":false,"isGrayscale":false,"isInvert":false,"isWatermark":false,"watermarkText":"IMES-Cloud","tagsStyle":"tags-style-five","animation":"opacitys","columnsAsideStyle":"columns-round","columnsAsideLayout":"columns-vertical","layout":"columns","isRequestRoutes":true,"globalTitle":"IMES-Cloud","globalViceTitle":"IMES-Cloud","globalViceTitleMsg":"IMES-Cloud 数字化生产平台","globalI18n":"zh-cn","globalComponentSize":"default"},
   }),
   actions: {
     setThemeConfig(data: ThemeConfigState) {

+ 217 - 222
admin.ui.plus-master/src/views/admin/PCBA/boardFunctionResult/index.vue

@@ -1,96 +1,83 @@
-
 <template>
   <div class="layout-pd">
     <el-row>
-<!--操作-->
-      <el-col :xs="24" >
-        <el-card class="mt8"  shadow="hover" >
-<el-form :model="state.filter" :inline="true" @submit.stop.prevent>
+      <!--操作-->
+      <el-col :xs="24">
+        <el-card class="mt8" shadow="hover">
+          <el-form :model="state.filter" :inline="true" @submit.stop.prevent>
             <el-form-item prop="name" style="width: 100%">
-<el-col :xs="24" :sm="12" :md="8" :lg="6" :xl="4" class="mb20">
-                <el-form-item label="序列号">
-                  <el-input v-model="state.filter.serno" placeholder="单行输入" clearable></el-input>
-                </el-form-item>
-              </el-col>
- <el-col :xs="24" :sm="12" :md="8" :lg="6" :xl="4" class="mb20">
-                <el-form-item label="外部序列号">
-                  <el-input v-model="state.filter.exserno" placeholder="单行输入" clearable></el-input>
-                </el-form-item>
-              </el-col>             
-<el-col :xs="24" :sm="12" :md="8" :lg="6" :xl="4" class="mb20">
-  <el-form-item label="主板类型">
-                  <el-select v-model="state.filter.boardType" placeholder="">
-                    <el-option v-for="(value, key) in PCBABoardType" :key="key" :label="value[1].name"
-                      :value="Number(value[1].value)" />
-                  </el-select>
-                </el-form-item>
-              </el-col>
-<el-col :xs="24" :sm="12" :md="8" :lg="6" :xl="4" class="mb20">
-  <el-form-item label="功能码">
-                    <el-select  v-model="state.filter.code" default-first-option="true" filterable allow-create 
-                      value-key="code"
-                      @blur="codeblur()"
-                      title='可直接输入具体功能码'
-                      ref="codeSel">
-                    <el-option v-for="item in options" :key="item.key" :label="item.name"
-                      :value="Number(item.value)" />
-                  </el-select>
-                </el-form-item>
-              </el-col>
-<el-col :xs="24" :sm="12" :md="8" :lg="6" :xl="4" class="mb20">
-  <el-form-item label="测试结果">
-                  <el-select v-model="state.filter.result" placeholder="">
-                    <el-option v-for="(value, key) in PCBATestState" :key="key" :label="value[1].name"
-                      :value="Number(value[1].value)" />
-                  </el-select>
-                </el-form-item>
-              </el-col>
-<el-col :xs="24" :sm="12" :md="8" :lg="6" :xl="4" class="mb20">
-            <el-form-item label="开始创建日期">
-                  <el-date-picker
-                    v-model="state.filter.beginCreateTime"
-                    type="datetime"
-                    value-format="YYYY-MM-DD HH:mm:ss"
-                    range-separator="To"
-                    start-placeholder="Start date"
-                    end-placeholder="End date"
-                  />
-                </el-form-item>
-              </el-col>
-<el-col :xs="24" :sm="12" :md="8" :lg="6" :xl="4" class="mb20">
-            <el-form-item label="结束创建日期">
-                  <el-date-picker
-                    v-model="state.filter.endCreateTime"
-                    type="datetime"
-                    value-format="YYYY-MM-DD HH:mm:ss"
-                    range-separator="To"
-                    start-placeholder="Start date"
-                    end-placeholder="End date"
-                  />
-                </el-form-item>
-              </el-col>
-<el-col :xs="24" :sm="12" :md="8" :lg="6" :xl="4" class="mb20">
-                <el-form-item label="最新测试员">
-                  <el-input v-model="state.filter.lastTestUser" placeholder="单行输入" clearable></el-input>
-                </el-form-item>
-              </el-col>
-</el-form-item>
+              <el-row :gutter="20">
+                <!-- 第一行 -->
+                <el-col :xs="24" :sm="12" :md="8" :lg="6" :xl="4" class="mb20">
+                  <el-form-item label="序列号">
+                    <el-input v-model="state.filter.serno" placeholder="单行输入" clearable></el-input>
+                  </el-form-item>
+                </el-col>
+                <el-col :xs="24" :sm="12" :md="8" :lg="6" :xl="4" class="mb20">
+                  <el-form-item label="外部序列号">
+                    <el-input v-model="state.filter.exserno" placeholder="单行输入" clearable></el-input>
+                  </el-form-item>
+                </el-col>
+                <el-col :xs="24" :sm="12" :md="8" :lg="6" :xl="4" class="mb20">
+                  <el-form-item label="主板类型">
+                    <el-select v-model="state.filter.boardType" placeholder="">
+                      <el-option v-for="(value, key) in PCBABoardType" :key="key" :label="value[1].name"
+                                 :value="Number(value[1].value)" />
+                    </el-select>
+                  </el-form-item>
+                </el-col>
+                <!-- 第二行 -->
+                <el-col :xs="24" :sm="12" :md="8" :lg="6" :xl="4" class="mb20">
+                  <el-form-item label="功能码">
+                    <el-select v-model="state.filter.code" default-first-option="true" filterable allow-create
+                               value-key="code"
+                               @blur="codeblur()"
+                               title='可直接输入具体功能码'
+                               ref="codeSel">
+                      <el-option v-for="item in options" :key="item.key" :label="item.name"
+                                 :value="Number(item.value)" />
+                    </el-select>
+                  </el-form-item>
+                </el-col>
+                <el-col :xs="24" :sm="12" :md="8" :lg="6" :xl="4" class="mb20">
+                  <el-form-item label="测试结果">
+                    <el-select v-model="state.filter.result" placeholder="">
+                      <el-option v-for="(value, key) in PCBATestState" :key="key" :label="value[1].name"
+                                 :value="Number(value[1].value)" />
+                    </el-select>
+                  </el-form-item>
+                </el-col>
+                <el-col :xs="24" :sm="16" :md="12" :lg="10" :xl="8" class="mb20">
+                  <el-form-item label="创建时间范围">
+                    <el-date-picker
+                        v-model="state.filter.createTimeRange"
+                        type="daterange"
+                        value-format="YYYY-MM-DD HH:mm:ss"
+                        range-separator="To"
+                        start-placeholder="开始日期"
+                        end-placeholder="结束日期"
+                    />
+                  </el-form-item>
+                </el-col>
+                <el-col :xs="24" :sm="12" :md="8" :lg="6" :xl="4" class="mb20">
+                  <el-form-item label="最新测试员">
+                    <el-input v-model="state.filter.lastTestUser" placeholder="单行输入" clearable></el-input>
+                  </el-form-item>
+                </el-col>
+              </el-row>
+            </el-form-item>
           </el-form>
-<div class="my-flex my-flex-start" >
-<el-button  type="primary" icon="ele-Search" @click="onQuery"> 查询 </el-button>
-</div>
-</el-card>
+          <div class="my-flex my-flex-start" style="margin-top: -35px;">
+            <el-button type="primary" icon="ele-Search" @click="onQuery"> 查询 </el-button>
+          </div>
+        </el-card>
       </el-col>
-<!--表格-->
-      <el-col  :xs="24" >
-        <el-card style="height: 70vh" class="my-fill mt8" shadow="hover">
-<el-table v-loading="state.loading" stripe :data="state.tableModel" row-key="id" style="width: 100%">
-        <!--<el-table-column v-for="column in state.dynamicColumns" :key="column.prop" :prop="column.prop" :label="column.label"  >
-        </el-table-column>-->
-
-
-        <el-table-column prop="serno" label="序列号" />
-        <el-table-column prop="exserno" label="外部序列号" />
+      <!--表格-->
+      <el-col :xs="24">
+        <el-card style="height: 50vh" class="my-fill mt8" shadow="hover">
+          <el-table v-loading="state.loading" stripe :data="state.tableModel" row-key="id" style="width: 100%">
+            <el-table-column prop="serno" label="序列号" />
+            <el-table-column prop="exserno" label="外部序列号" />
             <el-table-column prop="boardType" label="主板类型">
               <template #default="{ row }">
                 <div :style="{ color: getPCBABoardType(row.boardType).color }" class="bold-font">
@@ -107,10 +94,10 @@
                 </div>
               </template>
             </el-table-column>
-            <el-table-column prop="onceTestPass" label="是否一次通过" >
+            <el-table-column prop="onceTestPass" label="是否一次通过">
               <template #default="{ row }">
-              <el-text  v-if="row.onceTestPass">是</el-text>
-              <el-text  v-else>否</el-text>
+                <el-text v-if="row.onceTestPass">是</el-text>
+                <el-text v-else>否</el-text>
               </template>
             </el-table-column>
             <el-table-column prop="testTimes" label="测试次数" />
@@ -119,169 +106,177 @@
             <el-table-column prop="lastTestTime" label="最近测试时间" />
             <el-table-column prop="lastTestUser" label="最新检测员" />
             <el-table-column prop="info" label="备注" />
-</el-table>
-<div class="my-flex my-flex-end" style="margin-top: 20px">
+          </el-table>
+          <div class="my-flex my-flex-end" style="margin-top: 20px">
             <el-pagination
-              v-model:currentPage="state.pageInput.CurrentPage"
-              v-model:page-size="state.pageInput.PageSize"
-              :total="state.total"
-              :page-sizes="[10, 20, 50, 100]"
-              small
-              background
-              @size-change="onSizeChange"
-              @current-change="onCurrentChange"
-              layout="total, sizes, prev, pager, next, jumper"
+                v-model:currentPage="state.pageInput.CurrentPage"
+                v-model:page-size="state.pageInput.PageSize"
+                :total="state.total"
+                :page-sizes="[10, 20, 50, 100]"
+                small
+                background
+                @size-change="onSizeChange"
+                @current-change="onCurrentChange"
+                layout="total, sizes, prev, pager, next, jumper"
             />
           </div>
-</el-card>
+        </el-card>
       </el-col>
-</el-row>
-    </div>
-  </template>
-  <script setup lang="ts">
-  import {onBeforeMount, onMounted, reactive, watch,ref} from "vue";
-  import eventBus from "/@/utils/mitt";
-import { BoardFunctionResultApi } from '/@/api/admin/PCBA/BoardFunctionResultApi'
-import { BoardFunctionResultDto } from '/@/api/admin/PCBA/BoardFunctionResultDto'
+    </el-row>
+  </div>
+</template>
+<script setup lang="ts">
+import { onBeforeMount, onMounted, reactive, watch, ref } from "vue";
+import eventBus from "/@/utils/mitt";
+import { BoardFunctionResultApi } from '/@/api/admin/PCBA/BoardFunctionResultApi';
+import { BoardFunctionResultDto } from '/@/api/admin/PCBA/BoardFunctionResultDto';
 import type { pageInput } from "/@/api/admin/shareDto/shareDto";
 import { useGlobalCacheStore } from "/@/stores/globalCacheStore";
 import { getCurrentInstance } from 'vue';
 const { proxy: ctx } = getCurrentInstance();
 
-
 /**获取全局缓存*/
-const globalCacheStore = useGlobalCacheStore()
+const globalCacheStore = useGlobalCacheStore();
 /**数据字典缓存*/
-const PCBATestState = ref(globalCacheStore.getGlobalStore().get('pcbaTestState'))
-const PCBABoardType = ref(globalCacheStore.getGlobalStore().get('pcbaBoardType'))
+const PCBATestState = ref(globalCacheStore.getGlobalStore().get('pcbaTestState'));
+const PCBABoardType = ref(globalCacheStore.getGlobalStore().get('pcbaBoardType'));
 
 const getPCBATestState = (val) => {
-  val = String(val)
-  if(PCBATestState.value?.has(val)){
-    return PCBATestState.value.get(val)
-  }else {
-    return val
+  val = String(val);
+  if (PCBATestState.value?.has(val)) {
+    const stateObj = PCBATestState.value.get(val);
+    if (stateObj.name === '未测试') {
+      return { ...stateObj, color:'royalblue' };
+    }
+    return stateObj;
+  } else {
+    return { name: val, color: 'inherit' };
   }
-}
+};
+
 
 const getPCBABoardType = (val) => {
-  val = String(val)
-  if(PCBABoardType.value?.has(val)){
-    return PCBABoardType.value.get(val)
-  }else {
-    return val
+  val = String(val);
+  if (PCBABoardType.value?.has(val)) {
+    return PCBABoardType.value.get(val);
+  } else {
+    return val;
   }
-}
-
-const  codeblur = ()=>{
+};
 
-let value = ctx.$refs.codeSel.selectedLabel
-
-if(value == '所有' || value == '')
-{
-  value = -1
-}
-state.filter.code = value
-}
-
-const options= [{
-      value: -1,
-      name: '所有',
-      key:"-1"
-    }]
+const codeblur = () => {
+  let value = ctx.$refs.codeSel.selectedLabel;
+  if (value == '所有' || value == '') {
+    value = -1;
+  }
+  state.filter.code = value;
+};
 
+const options = [{
+  value: -1,
+  name: '所有',
+  key: "-1"
+}];
 
 /**数据对象*/
-  const state = reactive({
-    /**加载显示 */
-    loading: false,
-    /**条件查询模块 */
-      filter: {
-/**序列号 */
-        serno: "",
-/**外部序列号 */
-        exserno: "",
-/**boardType */
-        boardType: -1,
-/**code */
-        code: -1,
-/**测试结果 */
-        result: -1,
-/**起始创建时间 */
-        beginCreateTime: "",
-/**结束创建时间 */
-        endCreateTime: "",
-/**最新测试员 */
-        lastTestUser: "",},
+const state = reactive({
+  /**加载显示 */
+  loading: false,
+  /**条件查询模块 */
+  filter: {
+    /**序列号 */
+    serno: "",
+    /**外部序列号 */
+    exserno: "",
+    /**boardType */
+    boardType: -1,
+    /**code */
+    code: -1,
+    /**测试结果 */
+    result: -1,
+    /**创建时间范围 */
+    createTimeRange: [],
+    /**最新测试员 */
+    lastTestUser: "",
+  },
   /**表格信息 */
-tableModel: [] as BoardFunctionResultDto,
-    /**动态表头 */
-    dynamicColumns: [
-{ prop: 'serno', label: '序列号' },
-{ prop: 'boardType', label: '主板类型' },
-{ prop: 'code', label: '功能码' },
-{ prop: 'name', label: '功能名称' },
-{ prop: 'result', label: '测试结果' },
-{ prop: 'onceTestPass', label: '是否一次通过' },
-{ prop: 'testTimes', label: '测试次数' },
-{ prop: 'successTimes', label: '成功次数' },
-{ prop: 'createTime', label: '创建时间' },
-{ prop: 'lastTestTime', label: '最新测试时间' },
-{ prop: 'lastTestUser', label: '最新测试员' },
-{ prop: 'duration', label: '测试总耗时' },
-{ prop: 'info', label: '备注' },],
-/**分页标识 */
-    pageInput:{
-      CurrentPage: 1,
-      PageSize: 10,
-    } as pageInput,
-    /**分页总数 */
-    total: 0,
-})
-  onMounted(() => {
-    init()
-    eventBus.off('refreshView')
-    eventBus.on('refreshView', async () => {
-      await init()
-    })
-  })
-  onBeforeMount(() => {
-    eventBus.off('refreshView')
-  })
+  tableModel: [] as BoardFunctionResultDto,
+  /**动态表头 */
+  dynamicColumns: [
+    { prop:'serno', label: '序列号' },
+    { prop: 'boardType', label: '主板类型' },
+    { prop: 'code', label: '功能码' },
+    { prop: 'name', label: '功能名称' },
+    { prop:'result', label: '测试结果' },
+    { prop: 'onceTestPass', label: '是否一次通过' },
+    { prop: 'testTimes', label: '测试次数' },
+    { prop:'successTimes', label: '成功次数' },
+    { prop: 'createTime', label: '创建时间' },
+    { prop: 'lastTestTime', label: '最新测试时间' },
+    { prop: 'lastTestUser', label: '最新检测员' },
+    { prop: 'duration', label: '测试总耗时' },
+    { prop: 'info', label: '备注' },
+  ],
+  /**分页标识 */
+  pageInput: {
+    CurrentPage: 1,
+    PageSize: 10,
+  } as pageInput,
+  /**分页总数 */
+  total: 0,
+});
 
+onMounted(() => {
+  init();
+  eventBus.off('refreshView');
+  eventBus.on('refreshView', async () => {
+    await init();
+  });
+});
+onBeforeMount(() => {
+  eventBus.off('refreshView');
+});
 
-    /**页条数变化*/
+/**页条数变化*/
 const onSizeChange = () => {
-  init()
-}
+  init();
+};
 
 /**页数变化*/
 const onCurrentChange = () => {
-  init()
-}
+  init();
+};
 
+/**
+ * 监听变换
+ */
+watch(() => {}, () => {});
 
-  /**
-  * 监听变换
-  */
-  watch(() => {},() => {})
 /**条件查询 */
-          const onQuery = () => {
-          init()
-        }
-        /**初始化 */
-        const init = async () => {
-          state.loading = true
-
- 
+const onQuery = () => {
+  init();
+};
 
-const res:any = await new BoardFunctionResultApi().getList({...state.pageInput, Filter:state.filter})
-            state.total = res?.data?.total ?? 0
-
-
-state.tableModel = res?.data?.list ?? []
-          state.loading = false
-        }
+/**初始化 */
+const init = async () => {
+  state.loading = true;
+  // 处理时间范围,将数组中的开始和结束时间分别赋值给API需要的字段
+  const { createTimeRange, ...filterWithoutTimeRange } = state.filter;
+  const beginCreateTime = createTimeRange.length > 0? createTimeRange[0] : "";
+  const endCreateTime = createTimeRange.length > 1? createTimeRange[1] : "";
+  const res: any = await new BoardFunctionResultApi().getList({
+    ...state.pageInput,
+    Filter: {
+      ...filterWithoutTimeRange,
+      beginCreateTime,
+      endCreateTime,
+    },
+  });
+  state.total = res?.data?.total?? 0;
+  state.tableModel = res?.data?.list?? [];
+  state.loading = false;
+};
 </script>
 <style scoped lang="scss">
-  </style>
+
+</style>    

+ 29 - 33
admin.ui.plus-master/src/views/admin/PCBA/boardFunctionSummary/index.vue

@@ -20,33 +20,21 @@
                   <el-input v-model="state.filter.lastTestUser" placeholder="单行输入" clearable></el-input>
                 </el-form-item>
               </el-col>
-<el-col :xs="24" :sm="12" :md="8" :lg="6" :xl="4" class="mb20">
-            <el-form-item label="开始创建时间">
-                  <el-date-picker
-                    v-model="state.filter.beginCreateTime"
-                    type="datetime"
-                    value-format="YYYY-MM-DD HH:mm:ss"
-                    range-separator="To"
-                    start-placeholder="Start date"
-                    end-placeholder="End date"
-                  />
-                </el-form-item>
-              </el-col>
-<el-col :xs="24" :sm="12" :md="8" :lg="6" :xl="4" class="mb20">
-            <el-form-item label="结束创建时间">
+              <el-col :xs="24" :sm="12" :md="8" :lg="6" :xl="6" class="mb20">
+                <el-form-item label="创建时间范围">
                   <el-date-picker
-                    v-model="state.filter.endCreateTime"
-                    type="datetime"
+                    v-model="state.filter.createTimeRange"
+                    type="daterange"
                     value-format="YYYY-MM-DD HH:mm:ss"
                     range-separator="To"
-                    start-placeholder="Start date"
-                    end-placeholder="End date"
+                    start-placeholder="开始日期"
+                    end-placeholder="结束日期"
                   />
                 </el-form-item>
               </el-col>
 </el-form-item>
           </el-form>
-      <div class="my-flex my-flex-start" >
+      <div class="my-flex my-flex-start" style="margin-top: -38px;">
 <el-button  type="primary" icon="ele-Search" @click="onQuery"> 查询 </el-button>
 <el-button  type="primary" icon="ele-Document" @click="exportDataToExcel"> 导出 </el-button>
 </div>
@@ -54,7 +42,7 @@
       </el-col>
 <!--表格-->
       <el-col  :xs="24" >
-        <el-card style="height: 70vh" class="my-fill mt8" shadow="hover">
+        <el-card style="height: 55vh" class="my-fill mt8" shadow="hover">
 <el-table v-loading="state.loading" ref="myTable" stripe :data="state.tableModel" row-key="id" style="width: 100%">
         <!--<el-table-column v-for="column in state.dynamicColumns" :key="column.prop" :prop="column.prop" :label="column.label"  >
         </el-table-column>-->
@@ -162,10 +150,9 @@ const getPCBABoardType = (val) => {
         boardType: -1,
 /**检测员 */
         lastTestUser: "",
-/**起始创建时间 */
-        beginCreateTime: "",
-/**结束创建时间 */
-        endCreateTime: "",},
+// 创建时间范围
+        createTimeRange:[],
+      },
   /**表格信息 */
 tableModel: [] as BoardFunctionSummaryOutput,
     /**动态表头 */
@@ -220,15 +207,24 @@ const onCurrentChange = () => {
           init()
         }
 /**初始化 */
-      const init = async () => {
-          state.loading = true
-const res:any = await new BoardFunctionSummaryApi().getList({...state.pageInput, Filter:state.filter})
-            state.total = res?.data?.total ?? 0
-
-state.tableModel = res?.data?.list ?? []
-
-          state.loading = false
-      }
+const init = async () => {
+  state.loading = true;
+  // 处理时间范围,将数组中的开始和结束时间分别赋值给API需要的字段
+  const { createTimeRange, ...filterWithoutTimeRange } = state.filter;
+  const beginCreateTime = createTimeRange.length > 0? createTimeRange[0] : "";
+  const endCreateTime = createTimeRange.length > 1? createTimeRange[1] : "";
+  const res: any = await new BoardFunctionSummaryApi().getList({
+   ...state.pageInput,
+    Filter: {
+     ...filterWithoutTimeRange,
+      beginCreateTime,
+      endCreateTime,
+    },
+  });
+  state.total = res?.data?.total?? 0;
+  state.tableModel = res?.data?.list?? [];
+  state.loading = false;
+};
 
 
       async function exportDataToExcel() {

+ 156 - 172
admin.ui.plus-master/src/views/admin/PCBA/boardList/index.vue

@@ -1,95 +1,67 @@
-
 <template>
   <div class="layout-pd">
     <el-row>
-<!--操作-->
-      <el-col :xs="24" >
-        <el-card class="mt8"  shadow="hover" >
-<el-form :model="state.filter" :inline="true" @submit.stop.prevent>
+      <!--操作-->
+      <el-col :xs="24">
+        <el-card class="mt8" shadow="hover">
+          <el-form :model="state.filter" :inline="true" @submit.stop.prevent>
             <el-form-item prop="name" style="width: 100%">
-<el-col :xs="24" :sm="12" :md="8" :lg="6" :xl="4" class="mb20">
+              <el-col :xs="24" :sm="12" :md="8" :lg="6" :xl="4" class="mb20">
                 <el-form-item label="序列号">
                   <el-input v-model="state.filter.serno" placeholder="单行输入" clearable></el-input>
                 </el-form-item>
               </el-col>
-<el-col :xs="24" :sm="12" :md="8" :lg="6" :xl="4" class="mb20">
+              <el-col :xs="24" :sm="12" :md="8" :lg="6" :xl="4" class="mb20">
                 <el-form-item label="外部序列号">
                   <el-input v-model="state.filter.exserno" placeholder="单行输入" clearable></el-input>
                 </el-form-item>
               </el-col>
               <el-col :xs="24" :sm="12" :md="8" :lg="6" :xl="4" class="mb20">
-
                 <el-form-item label="主板类型">
-                  <!--<el-input v-model="state.filter.boardType" placeholder="单行输入" clearable></el-input>-->
                   <el-select v-model="state.filter.boardType" placeholder="">
                     <el-option v-for="(value, key) in PCBABoardType" :key="key" :label="value[1].name"
                       :value="Number(value[1].value)" />
                   </el-select>
                 </el-form-item>
               </el-col>
-<el-col :xs="24" :sm="12" :md="8" :lg="6" :xl="4" class="mb20">
-            <el-form-item label="开始创建时间">
-                  <el-date-picker
-                    v-model="state.filter.beginCreateTime"
-                    type="datetime"
-                    value-format="YYYY-MM-DD HH:mm:ss"
-                    range-separator="To"
-                    start-placeholder="Start date"
-                    end-placeholder="End date"
-                  />
-                </el-form-item>
-              </el-col>
-<el-col :xs="24" :sm="12" :md="8" :lg="6" :xl="4" class="mb20">
-            <el-form-item label="结束创建时间">
-                  <el-date-picker
-                    v-model="state.filter.endCreateTime"
-                    type="datetime"
-                    value-format="YYYY-MM-DD HH:mm:ss"
-                    range-separator="To"
-                    start-placeholder="Start date"
-                    end-placeholder="End date"
-                  />
-                </el-form-item>
-              </el-col>
-
-
-
-<el-col :xs="24" :sm="12" :md="8" :lg="6" :xl="4" class="mb20">
+              <el-col :xs="24" :sm="12" :md="8" :lg="6" :xl="4" class="mb20">
                 <el-form-item label="最新测试状态">
-                  <!--el-input v-model="state.filter.lastTestState" placeholder="单行输入" clearable></el-input-->
-                  <!--<el-select id="fruits" name="fruits" v-model="state.filter.lastTestState">
-                    <el-option value="-1" >所有</el-option>
-                    <el-option value="0">未测试</el-option>
-                    <el-option value="1">成功</el-option>
-                    <el-option value="2">失败</el-option>
-                  </el-select>-->
                   <el-select v-model="state.filter.lastTestState" placeholder="">
                     <el-option v-for="(value, key) in PCBATestState" :key="key" :label="value[1].name"
                       :value="Number(value[1].value)" />
                   </el-select>
                 </el-form-item>
               </el-col>
-<el-col :xs="24" :sm="12" :md="8" :lg="6" :xl="4" class="mb20">
+              <el-col :xs="24" :sm="12" :md="8" :lg="6" :xl="4" class="mb20">
                 <el-form-item label="最新检测员">
                   <el-input v-model="state.filter.lastTestUser" placeholder="单行输入" clearable></el-input>
                 </el-form-item>
               </el-col>
-</el-form-item>
+              <el-col :xs="24" :sm="12" :md="8" :lg="6" :xl="6" class="mb20">
+                <el-form-item label="创建时间范围">
+                  <el-date-picker
+                    v-model="state.filter.createTimeRange"
+                    type="daterange"
+                    value-format="YYYY-MM-DD HH:mm:ss"
+                    range-separator="To"
+                    start-placeholder="开始日期"
+                    end-placeholder="结束日期"
+                  />
+                </el-form-item>
+              </el-col>
+            </el-form-item>
           </el-form>
-<div class="my-flex my-flex-start" >
-<el-button  type="primary" icon="ele-Search" @click="onQuery"> 查询 </el-button>
-</div>
-</el-card>
+          <div class="my-flex my-flex-start" style="margin-top:-38px">
+            <el-button type="primary" icon="ele-Search" @click="onQuery"> 查询 </el-button>
+          </div>
+        </el-card>
       </el-col>
-<!--表格-->
-      <el-col  :xs="24" >
-        <el-card style="height: 70vh" class="my-fill mt8" shadow="hover">
-<el-table v-loading="state.loading" stripe :data="state.tableModel" row-key="id" style="width: 100%">
-<!--        <el-table-column v-for="column in state.dynamicColumns" :key="column.prop" :prop="column.prop" :label="column.label"  >
-        </el-table-column>
--->
-        <el-table-column prop="serno" label="序列号" />
-        <el-table-column prop="exserno" label="外部序列号" />
+      <!--表格-->
+      <el-col :xs="24">
+        <el-card style="height: 50vh" class="my-fill mt8" shadow="hover">
+          <el-table v-loading="state.loading" stripe :data="state.tableModel" row-key="id" style="width: 100%">
+            <el-table-column prop="serno" label="序列号" />
+            <el-table-column prop="exserno" label="外部序列号" />
             <el-table-column prop="boardType" label="主板类型">
               <template #default="{ row }">
                 <div :style="{ color: getPCBABoardType(row.boardType).color }" class="bold-font">
@@ -107,20 +79,19 @@
               </template>
             </el-table-column>
             <el-table-column prop="lastTestUser" label="最新检测员" />
-            <el-table-column prop="onceTestPass" label="是否一次通过" >
-            <template #default="{ row }">
-            <el-text  v-if="row.onceTestPass">是</el-text>
-            <el-text  v-else>否</el-text>
-            </template>
+            <el-table-column prop="onceTestPass" label="是否一次通过">
+              <template #default="{ row }">
+                <el-text v-if="row.onceTestPass">是</el-text>
+                <el-text v-else>否</el-text>
+              </template>
             </el-table-column>
             <el-table-column prop="testTimes" label="测试次数" />
             <el-table-column prop="successTimes" label="测试成功次数" />
             <el-table-column prop="functionNum" label="功能项数" />
             <el-table-column prop="functionSuccessNum" label="功能项成功数" />
             <el-table-column prop="info" label="备注" />
-
-</el-table>
-<div class="my-flex my-flex-end" style="margin-top: 20px">
+          </el-table>
+          <div class="my-flex my-flex-end" style="margin-top: 20px">
             <el-pagination
               v-model:currentPage="state.pageInput.CurrentPage"
               v-model:page-size="state.pageInput.PageSize"
@@ -133,132 +104,145 @@
               layout="total, sizes, prev, pager, next, jumper"
             />
           </div>
-</el-card>
+        </el-card>
       </el-col>
-</el-row>
-    </div>
-  </template>
-  <script setup lang="ts">
-  import {onBeforeMount, onMounted, reactive, watch, ref} from "vue";
-  import eventBus from "/@/utils/mitt";
-import { BoardListApi } from '/@/api/admin/PCBA/boardListApi'
-import { BoardListDto } from '/@/api/admin/PCBA/boardListDto'
+    </el-row>
+  </div>
+</template>
+<script setup lang="ts">
+import { onBeforeMount, onMounted, reactive, watch, ref } from "vue";
+import eventBus from "/@/utils/mitt";
+import { BoardListApi } from '/@/api/admin/PCBA/boardListApi';
+import { BoardListDto } from '/@/api/admin/PCBA/boardListDto';
 import type { pageInput } from "/@/api/admin/shareDto/shareDto";
 import { useGlobalCacheStore } from "/@/stores/globalCacheStore";
 
-
 /**获取全局缓存*/
-const globalCacheStore = useGlobalCacheStore()
+const globalCacheStore = useGlobalCacheStore();
 /**数据字典缓存*/
-const PCBATestState = ref(globalCacheStore.getGlobalStore().get('pcbaTestState'))
-const PCBABoardType = ref(globalCacheStore.getGlobalStore().get('pcbaBoardType'))
+const PCBATestState = ref(globalCacheStore.getGlobalStore().get('pcbaTestState'));
+const PCBABoardType = ref(globalCacheStore.getGlobalStore().get('pcbaBoardType'));
 
 const getPCBATestState = (val) => {
-  val = String(val)
-  if(PCBATestState.value?.has(val)){
-    return PCBATestState.value.get(val)
-  }else {
-    return val
+  val = String(val);
+  if (PCBATestState.value?.has(val)) {
+    const stateObj = PCBATestState.value.get(val);
+    if (stateObj.name === '未测试') {
+      return { ...stateObj, color:'royalblue' };
+    }
+    return stateObj;
+  } else {
+    return { name: val, color: 'inherit' };
   }
-}
+};
 
 const getPCBABoardType = (val) => {
-  val = String(val)
-  if(PCBABoardType.value?.has(val)){
-    return PCBABoardType.value.get(val)
-  }else {
-    return val
+  val = String(val);
+  if (PCBABoardType.value?.has(val)) {
+    return PCBABoardType.value.get(val);
+  } else {
+    return { name: val, color: 'inherit' };
   }
-}
+};
 
 /**数据对象*/
-  const state = reactive({
-    /**加载显示 */
-    loading: false,
-    /**条件查询模块 */
-      filter: {
-/**序列号 */
-        serno: "",
-/**外部序列号 */
-        exserno: "",
-
-/**boardType */
-        boardType: -1,
-/**起始创建时间 */
-        beginCreateTime: "",
-/**结束创建时间 */
-        endCreateTime: "",
-/**lastTestState */
-        lastTestState: -1,
-/**最新检测员 */
-        lastTestUser: "",},
-
-        testState_text:"所有",
+const state = reactive({
+  /**加载显示 */
+  loading: false,
+  /**条件查询模块 */
+  filter: {
+    /**序列号 */
+    serno: "",
+    /**外部序列号 */
+    exserno: "",
+    /**boardType */
+    boardType: -1,
+    /**创建时间范围 */
+    createTimeRange: [], // 新增属性,用于存储时间范围
+    /**lastTestState */
+    lastTestState: -1,
+    /**最新检测员 */
+    lastTestUser: "",
+  },
+  testState_text: "所有",
   /**表格信息 */
-tableModel: [] as BoardListDto,
-    /**动态表头 */
-    dynamicColumns: [
-{ prop: 'serno', label: '序列号' },
-{ prop: 'boardType', label: '主板类型' },
-{ prop: 'boardName', label: '主板名称' },
-{ prop: 'createTime', label: '创建时间' },
-{ prop: 'lastTestTime', label: '最近检测时间' },
-{ prop: 'lastTestState', label: '最新检测状态' },
-{ prop: 'lastTestUser', label: '最新检测员' },
-{ prop: 'onceTestPass', label: '是否一次通过' },
-{ prop: 'testTimes', label: '测试次数' },
-{ prop: 'successTimes', label: '测试成功次数' },
-{ prop: 'functionNum', label: '功能项数' },
-{ prop: 'functionSuccessNum', label: '功能项成功数' },
-{ prop: 'duration', label: '测试总耗时' },
-{ prop: 'info', label: '备注' },],
-/**分页标识 */
-    pageInput:{
-      CurrentPage: 1,
-      PageSize: 10,
-    } as pageInput,
-    /**分页总数 */
-    total: 0,
-})
-  onMounted(() => {
-    init()
-    eventBus.off('refreshView')
-    eventBus.on('refreshView', async () => {
-      await init()
-    })
-  })
-  onBeforeMount(() => {
-    eventBus.off('refreshView')
-  })
-  
-
-    /**页条数变化*/
+  tableModel: [] as BoardListDto,
+  /**动态表头 */
+  dynamicColumns: [
+    { prop:'serno', label: '序列号' },
+    { prop: 'boardType', label: '主板类型' },
+    { prop: 'boardName', label: '主板名称' },
+    { prop: 'createTime', label: '创建时间' },
+    { prop: 'lastTestTime', label: '最近检测时间' },
+    { prop: 'lastTestState', label: '最新检测状态' },
+    { prop: 'lastTestUser', label: '最新检测员' },
+    { prop: 'onceTestPass', label: '是否一次通过' },
+    { prop: 'testTimes', label: '测试次数' },
+    { prop:'successTimes', label: '测试成功次数' },
+    { prop: 'functionNum', label: '功能项数' },
+    { prop: 'functionSuccessNum', label: '功能项成功数' },
+    { prop: 'duration', label: '测试总耗时' },
+    { prop: 'info', label: '备注' },
+  ],
+  /**分页标识 */
+  pageInput: {
+    CurrentPage: 1,
+    PageSize: 10,
+  } as pageInput,
+  /**分页总数 */
+  total: 0,
+});
+
+onMounted(() => {
+  init();
+  eventBus.off('refreshView');
+  eventBus.on('refreshView', async () => {
+    await init();
+  });
+});
+onBeforeMount(() => {
+  eventBus.off('refreshView');
+});
+
+/**页条数变化*/
 const onSizeChange = () => {
-  init()
-}
+  init();
+};
 
 /**页数变化*/
 const onCurrentChange = () => {
-  init()
-}
+  init();
+};
 
+/**
+ * 监听变换
+ */
+watch(() => {}, () => {});
 
-  /**
-  * 监听变换
-  */
-  watch(() => {},() => {})
 /**条件查询 */
-          const onQuery = () => {
-          init()
-        }
-        /**初始化 */
-        const init = async () => {
-          state.loading = true
-const res:any = await new BoardListApi().getList({...state.pageInput, Filter:state.filter})
-            state.total = res?.data?.total ?? 0
-state.tableModel = res?.data?.list ?? []
-          state.loading = false
-        }
+const onQuery = () => {
+  init();
+};
+
+/**初始化 */
+const init = async () => {
+  state.loading = true;
+  // 处理时间范围,将数组中的开始和结束时间分别赋值给API需要的字段
+  const { createTimeRange, ...filterWithoutTimeRange } = state.filter;
+  const beginCreateTime = createTimeRange.length > 0? createTimeRange[0] : "";
+  const endCreateTime = createTimeRange.length > 1? createTimeRange[1] : "";
+  const res: any = await new BoardListApi().getList({
+   ...state.pageInput,
+    Filter: {
+     ...filterWithoutTimeRange,
+      beginCreateTime,
+      endCreateTime,
+    },
+  });
+  state.total = res?.data?.total?? 0;
+  state.tableModel = res?.data?.list?? [];
+  state.loading = false;
+};
 </script>
 <style scoped lang="scss">
-  </style>
+  </style>    

+ 159 - 240
admin.ui.plus-master/src/views/admin/PCBA/boardSummary/index.vue

@@ -1,69 +1,52 @@
-
 <template>
   <div class="layout-pd">
     <el-row>
-<!--操作-->
-      <el-col :xs="24" >
-        <el-card class="mt8"  shadow="hover" >
-<el-form :model="state.filter" :inline="true" @submit.stop.prevent>
+      <!--操作-->
+      <el-col :xs="24">
+        <el-card class="mt8" shadow="hover">
+          <el-form :model="state.filter" :inline="true" @submit.stop.prevent>
             <el-form-item prop="name" style="width: 100%">
-<el-col :xs="24" :sm="12" :md="8" :lg="6" :xl="4" class="mb20">
-  <el-form-item label="主板类型">
+              <el-col :xs="24" :sm="12" :md="8" :lg="6" :xl="4" class="mb20">
+                <el-form-item label="主板类型">
                   <el-select v-model="state.filter.boardType" placeholder="">
                     <el-option v-for="(value, key) in PCBABoardType" :key="key" :label="value[1].name"
                       :value="Number(value[1].value)" />
                   </el-select>
                 </el-form-item>
               </el-col>
-<el-col :xs="24" :sm="12" :md="8" :lg="6" :xl="4" class="mb20">
+              <el-col :xs="24" :sm="12" :md="8" :lg="6" :xl="4" class="mb20">
                 <el-form-item label="检测员">
                   <el-input v-model="state.filter.lastTestUser" placeholder="单行输入" clearable></el-input>
                 </el-form-item>
               </el-col>
-<el-col :xs="24" :sm="12" :md="8" :lg="6" :xl="4" class="mb20">
-            <el-form-item label="开始创建时间">
+              <el-col :xs="24" :sm="12" :md="8" :lg="6" :xl="4" class="mb20">
+                <el-form-item label="创建时间范围">
                   <el-date-picker
-                    v-model="state.filter.beginCreateTime"
-                    type="datetime"
+                    v-model="state.filter.createTimeRange"
+                    type="daterange"
                     value-format="YYYY-MM-DD HH:mm:ss"
                     range-separator="To"
-                    start-placeholder="Start date"
-                    end-placeholder="End date"
+                    start-placeholder="开始日期"
+                    end-placeholder="结束日期"
                   />
                 </el-form-item>
               </el-col>
-<el-col :xs="24" :sm="12" :md="8" :lg="6" :xl="4" class="mb20">
-            <el-form-item label="结束创建时间">
-                  <el-date-picker
-                    v-model="state.filter.endCreateTime"
-                    type="datetime"
-                    value-format="YYYY-MM-DD HH:mm:ss"
-                    range-separator="To"
-                    start-placeholder="Start date"
-                    end-placeholder="End date"
-                  />
-                </el-form-item>
-              </el-col>
-</el-form-item>
+            </el-form-item>
           </el-form>
-<div class="my-flex my-flex-start" >
-<el-button  type="primary" icon="ele-Search" @click="onQuery"> 查询 </el-button>
-<el-button  type="primary" icon="ele-Document" @click="exportDataToExcel"> 导出 </el-button>
-<!--<el-button  type="primary" icon="ele-CirclePlus" @click="onBatExport"> 批量导出 </el-button>-->
-</div>
-</el-card>
+          <div class="my-flex my-flex-start" style="margin-top: -38px;">
+            <el-button type="primary" icon="ele-Search" @click="onQuery"> 查询 </el-button>
+            <el-button type="primary" icon="ele-Document" @click="exportDataToExcel"> 导出 </el-button>
+            <!--<el-button  type="primary" icon="ele-CirclePlus" @click="onBatExport"> 批量导出 </el-button>-->
+          </div>
+        </el-card>
       </el-col>
-<!--表格-->
-      <el-col  :xs="24" >
-        <el-card style="height: 70vh" class="my-fill mt8" shadow="hover">
-
-<el-table id="myTable" ref="myTable" v-loading="state.loading" stripe :data="state.tableModel" row-key="id" style="width: 100%">
-        <!--<el-table-column v-for="column in state.dynamicColumns" :key="column.prop" :prop="column.prop" :label="column.label"  >
-        </el-table-column>-->
-
-
-
-        <el-table-column prop="boardType" label="主板类型">
+      <!--表格-->
+      <el-col :xs="24">
+        <el-card style="height: 55vh" class="my-fill mt8" shadow="hover">
+          <el-table id="myTable" ref="myTable" v-loading="state.loading" stripe :data="state.tableModel" row-key="id" style="width: 100%">
+            <!--<el-table-column v-for="column in state.dynamicColumns" :key="column.prop" :prop="column.prop" :label="column.label"  >
+            </el-table-column>-->
+            <el-table-column prop="boardType" label="主板类型">
               <template #default="{ row }">
                 <div :style="{ color: getPCBABoardType(row.boardType).color }" class="bold-font">
                   {{ getPCBABoardType(row.boardType).name }}
@@ -75,25 +58,23 @@
             <el-table-column prop="boardOneTestSuccessNum" label="一次通过数量" />
             <el-table-column prop="boardTestTimes" label="测试次数" />
             <el-table-column prop="boardSuccessTimes" label="测试成功次数" />
-            <el-table-column prop="boardSuccessRate" label="测试通过率" >
-            <template #default="{ row }">
+            <el-table-column prop="boardSuccessRate" label="测试通过率">
+              <template #default="{ row }">
                 <div> {{row.boardSuccessRate }}%</div>
               </template>
             </el-table-column>
-            <el-table-column prop="boardOneTestSuccessRate" label="测试一次通过率" >
-            <template #default="{ row }">
+            <el-table-column prop="boardOneTestSuccessRate" label="测试一次通过率">
+              <template #default="{ row }">
                 <div> {{row.boardOneTestSuccessRate }}%</div>
               </template>
             </el-table-column>
-            <el-table-column prop="boardTestSuccessRate" label="测试成功率" >
-            <template #default="{ row }">
+            <el-table-column prop="boardTestSuccessRate" label="测试成功率">
+              <template #default="{ row }">
                 <div> {{row.boardTestSuccessRate }}%</div>
               </template>
             </el-table-column>
-</el-table>
-
-<!--
-<div class="my-flex my-flex-end" style="margin-top: 20px">
+          </el-table>
+          <div class="my-flex my-flex-end" style="margin-top: 20px">
             <el-pagination
               v-model:currentPage="state.pageInput.CurrentPage"
               v-model:page-size="state.pageInput.PageSize"
@@ -106,220 +87,158 @@
               layout="total, sizes, prev, pager, next, jumper"
             />
           </div>
--->
-
-</el-card>
+        </el-card>
       </el-col>
-</el-row>
-    </div>
-  </template>
-  
-
-
-  <script setup lang="ts">
-  import {onBeforeMount, onMounted, reactive, watch,ref} from "vue";
-  import eventBus from "/@/utils/mitt";
-import { BoardSummaryApi } from '/@/api/admin/PCBA/boardSummaryApi'
-import { BoardSummaryOutput } from '/@/api/admin/PCBA/boardSummaryDto'
+    </el-row>
+  </div>
+</template>
+
+<script setup lang="ts">
+import { onBeforeMount, onMounted, reactive, watch, ref } from "vue";
+import eventBus from "/@/utils/mitt";
+import { BoardSummaryApi } from '/@/api/admin/PCBA/boardSummaryApi';
+import { BoardSummaryOutput } from '/@/api/admin/PCBA/boardSummaryDto';
 import type { pageInput } from "/@/api/admin/shareDto/shareDto";
 import { useGlobalCacheStore } from "/@/stores/globalCacheStore";
 import { getCurrentInstance } from 'vue';
 import { saveAs } from 'file-saver';
 import * as ExcelJS from 'exceljs';
 
-
 const { proxy: ctx } = getCurrentInstance();
 
-
 /**获取全局缓存*/
-const globalCacheStore = useGlobalCacheStore()
+const globalCacheStore = useGlobalCacheStore();
 /**数据字典缓存*/
-const PCBATestState = ref(globalCacheStore.getGlobalStore().get('pcbaTestState'))
-const PCBABoardType = ref(globalCacheStore.getGlobalStore().get('pcbaBoardType'))
+const PCBATestState = ref(globalCacheStore.getGlobalStore().get('pcbaTestState'));
+const PCBABoardType = ref(globalCacheStore.getGlobalStore().get('pcbaBoardType'));
 
 const getPCBATestState = (val) => {
-  val = String(val)
-  if(PCBATestState.value?.has(val)){
-    return PCBATestState.value.get(val)
-  }else {
-    return val
+  val = String(val);
+  if (PCBATestState.value?.has(val)) {
+    return PCBATestState.value.get(val);
+  } else {
+    return val;
   }
-}
+};
 
 const getPCBABoardType = (val) => {
-  val = String(val)
-  if(PCBABoardType.value?.has(val)){
-    return PCBABoardType.value.get(val)
-  }else {
-    return val
+  val = String(val);
+  if (PCBABoardType.value?.has(val)) {
+    return PCBABoardType.value.get(val);
+  } else {
+    return val;
   }
-}
-
+};
 
 /**数据对象*/
 const state = reactive({
-    /**加载显示 */
-    loading: false,
-    /**条件查询模块 */
-      filter: {
-/**boardType */
-        boardType: -1,
-/**检测员 */
-        lastTestUser: "",
-/**起始创建时间 */
-        beginCreateTime: "",
-/**结束创建时间 */
-        endCreateTime: "",},
+  /**加载显示 */
+  loading: false,
+  /**条件查询模块 */
+  filter: {
+    /**boardType */
+    boardType: -1,
+    /**检测员 */
+    lastTestUser: "",
+    /**创建时间范围 */
+    createTimeRange: [], // 新增属性,用于存储时间范围
+  },
   /**表格信息 */
-tableModel: [] as BoardSummaryOutput,
-    /**动态表头 */
-    dynamicColumns: [
-    ],
-/**分页标识 */
-    pageInput:{
-      CurrentPage: 1,
-      PageSize: 10,
-    } as pageInput,
-    /**分页总数 */
-    total: 0,
-})
-
-  onMounted(() => {
-
-  //const script = document.createElement('script');
-  //script.src = 'https://cdnjs.cloudflare.com/ajax/libs/tableexport/1.0.4/tableExport.min.js';
- 
-
-
-
-    init()
-    eventBus.off('refreshView')
-    eventBus.on('refreshView', async () => {
-      await init()
-    })
-
- //document.head.appendChild(script);
- // const script2 = document.createElement('script');
-  //script.src = 'https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js'
-  //script2.src = 'https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js';
-  //document.head.appendChild(script);
-
-
-  })
-
-
+  tableModel: [] as BoardSummaryOutput,
+  /**动态表头 */
+  dynamicColumns: [],
+  /**分页标识 */
+  pageInput: {
+    CurrentPage: 1,
+    PageSize: 10,
+  } as pageInput,
+  /**分页总数 */
+  total: 0,
+});
+
+onMounted(() => {
+  init();
+  eventBus.off('refreshView');
+  eventBus.on('refreshView', async () => {
+    await init();
+  });
+});
+
+onBeforeMount(() => {
+  eventBus.off('refreshView');
+});
+
+/**
+ * 监听变换
+ */
+watch(() => {}, () => {});
 
-  onBeforeMount(() => {
-    eventBus.off('refreshView')
-  })
-
-
-
-  /**
-  * 监听变换
-  */
-  watch(() => {},() => {})
 /**条件查询 */
-          const onQuery = () => {
-          init()
-        }
-        /**初始化 */
-        const init = async () => {
-          state.loading = true
-
-          const res:any = await new BoardSummaryApi().getList({...state.pageInput, Filter:state.filter})
-            state.total = res?.data?.total ?? 0
-
-          state.tableModel = res?.data?.list ?? []
-
-
-        /*
-const res:any = await new BoardSummaryApi().getList({...state.filter})
-const array = [res.data] as BoardSummaryOutput;
-state.tableModel = array
-*/
-          state.loading = false
-        }
-        
-/**导出 
-
-
-        const onExport=()=>{
-          //ctx.$refs.myTable.tableExport({type:'excel', escape:'false'}); 
+const onQuery = () => {
+  init();
+};
+
+/**初始化 */
+const init = async () => {
+  state.loading = true;
+  // 处理时间范围,将数组中的开始和结束时间分别赋值给API需要的字段
+  const { createTimeRange, ...filterWithoutTimeRange } = state.filter;
+  const beginCreateTime = createTimeRange.length > 0? createTimeRange[0] : "";
+  const endCreateTime = createTimeRange.length > 1? createTimeRange[1] : "";
+  const res: any = await new BoardSummaryApi().getList({
+   ...state.pageInput,
+    Filter: {
+     ...filterWithoutTimeRange,
+      beginCreateTime,
+      endCreateTime,
+    },
+  });
+  state.total = res?.data?.total?? 0;
+  state.tableModel = res?.data?.list?? [];
+  state.loading = false;
+};
 
-          const tableData = ctx.$refs.myTable.data; // 确保你的el-table有ref="myTable"
-    const ws = XLSX.utils.json_to_sheet(tableData); // 将数据转换为工作表对象
-    const wb = XLSX.utils.book_new(); // 创建一个新的工作簿
-    XLSX.utils.book_append_sheet(wb, ws, 'Sheet1'); // 将工作表添加到工作簿中
-    // 生成 Excel 文件并导出
-    const excelBuffer = XLSX.write(wb, { bookType: 'xlsx', type: 'array' });
-    const data = new Blob([excelBuffer], { type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=UTF-8' });
-    saveAs(data, 'data.xlsx'); // 使用file-saver保存文件
-        }
-*/
-
-
-
- 
 async function exportDataToExcel() {
-
-const tableData = ctx.$refs.myTable.data;
-
-    const workbook = new ExcelJS.Workbook();
-    const worksheet = workbook.addWorksheet('My Sheet');
-    worksheet.columns = [
-        { header: '主板数量', key: 'boardNum', width: 15 },
-        { header: '测试通过数量', key: 'boardSuccessNum', width: 15 },
-        { header: '一次通过数量', key: 'boardOneTestSuccessNum', width: 15 },
-        { header: '测试次数', key: 'boardTestTimes', width: 15 },
-        { header: '测试成功次数', key: 'boardSuccessTimes', width: 15 },
-        { header: '测试通过率', key: 'boardSuccessRate', width: 15 },
-        { header: '测试一次通过率', key: 'boardOneTestSuccessRate', width: 15 },
-        { header: '测试成功率', key: 'boardTestSuccessRate', width: 15 }
-
-    ];
-
-
-
-
-    for (let i = 0; i < tableData.length; i++)
-    {
-      let data = tableData[i];
-      data.boardSuccessRate +="%";
-      data.boardOneTestSuccessRate +="%";
-      data.boardTestSuccessRate +="%";
-
-      worksheet.addRow(tableData[i]);
-    }
-
-
-
-    
-  
-    // await workbook.xlsx.writeFile('output.xlsx');
-
-    // 生成 Excel 文件
-    const buffer = await workbook.xlsx.writeBuffer();
-
-    // 将文件保存到本地
-    const blob = new Blob([buffer], { type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' });
-    saveAs(blob, '主板检测汇总.xlsx');
-
-      console.log('文件已成功导出!');
+  const tableData = ctx.$refs.myTable.data;
+  const workbook = new ExcelJS.Workbook();
+  const worksheet = workbook.addWorksheet('My Sheet');
+  worksheet.columns = [
+    { header: '主板数量', key: 'boardNum', width: 15 },
+    { header: '测试通过数量', key: 'boardSuccessNum', width: 15 },
+    { header: '一次通过数量', key: 'boardOneTestSuccessNum', width: 15 },
+    { header: '测试次数', key: 'boardTestTimes', width: 15 },
+    { header: '测试成功次数', key: 'boardSuccessTimes', width: 15 },
+    { header: '测试通过率', key: 'boardSuccessRate', width: 15 },
+    { header: '测试一次通过率', key: 'boardOneTestSuccessRate', width: 15 },
+    { header: '测试成功率', key: 'boardTestSuccessRate', width: 15 }
+  ];
+
+  for (let i = 0; i < tableData.length; i++) {
+    let data = tableData[i];
+    data.boardSuccessRate += "%";
+    data.boardOneTestSuccessRate += "%";
+    data.boardTestSuccessRate += "%";
+    worksheet.addRow(tableData[i]);
   }
-  
-  // exportDataToExcel().catch(error => {
-  //     console.error('导出失败:', error);
-  // });
-
-
-
-
-
-
 
+  // 生成 Excel 文件
+  const buffer = await workbook.xlsx.writeBuffer();
+  // 将文件保存到本地
+  const blob = new Blob([buffer], { type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' });
+  saveAs(blob, '主板检测汇总.xlsx');
+  console.log('文件已成功导出!');
+}
 
+/** 页条数变化 */
+const onSizeChange = () => {
+  init();
+};
 
+/** 页数变化 */
+const onCurrentChange = () => {
+  init();
+};
 </script>
+
 <style scoped lang="scss">
-  </style>
+</style>

+ 183 - 200
admin.ui.plus-master/src/views/admin/PCBA/boardTestRecord/index.vue

@@ -1,48 +1,42 @@
-
 <template>
   <div class="layout-pd">
     <el-row>
-<!--操作-->
-      <el-col :xs="24" >
-        <el-card class="mt8"  shadow="hover" >
-<el-form :model="state.filter" :inline="true" @submit.stop.prevent>
+      <!--操作-->
+      <el-col :xs="24">
+        <el-card class="mt8" shadow="hover">
+          <el-form :model="state.filter" :inline="true" @submit.stop.prevent>
             <el-form-item prop="name" style="width: 100%">
-<el-col :xs="24" :sm="12" :md="8" :lg="6" :xl="4" class="mb20">
+              <el-col :xs="24" :sm="12" :md="8" :lg="6" :xl="4" class="mb20">
                 <el-form-item label="序列号">
                   <el-input v-model="state.filter.serno" placeholder="单行输入" clearable></el-input>
                 </el-form-item>
               </el-col>
-<el-col :xs="24" :sm="12" :md="8" :lg="6" :xl="4" class="mb20">
+              <el-col :xs="24" :sm="12" :md="8" :lg="6" :xl="4" class="mb20">
                 <el-form-item label="外部序列号">
                   <el-input v-model="state.filter.exserno" placeholder="单行输入" clearable></el-input>
                 </el-form-item>
               </el-col>
               <el-col :xs="24" :sm="12" :md="8" :lg="6" :xl="4" class="mb20">
-  <el-form-item label="主板类型">
+                <el-form-item label="主板类型">
                   <el-select v-model="state.filter.boardType" placeholder="">
                     <el-option v-for="(value, key) in PCBABoardType" :key="key" :label="value[1].name"
                       :value="Number(value[1].value)" />
                   </el-select>
                 </el-form-item>
               </el-col>
-<el-col :xs="24" :sm="12" :md="8" :lg="6" :xl="4" class="mb20">
+              <el-col :xs="24" :sm="12" :md="8" :lg="6" :xl="4" class="mb20">
                 <el-form-item label="功能码">
-                    <el-select  v-model="state.filter.functionCode" default-first-option="true" filterable allow-create 
-                      value-key="code"
-                      @blur="codeblur()"
-                      title='可直接输入具体功能码'
-                      ref="codeSel">
+                  <el-select v-model="state.filter.functionCode" default-first-option="true" filterable allow-create 
+                    value-key="code"
+                    @blur="codeblur()"
+                    title='可直接输入具体功能码'
+                    ref="codeSel">
                     <el-option v-for="item in options" :key="item.key" :label="item.name"
-                      :value="Number(item.value)" >
-
-                    </el-option>
-                    <!--<el-option  key = "-1" label="所有" value=-1>所有</el-option>-->
-                    
+                      :value="Number(item.value)" />
                   </el-select>
                 </el-form-item>
-                
               </el-col>
-<el-col :xs="24" :sm="12" :md="8" :lg="6" :xl="4" class="mb20">
+              <el-col :xs="24" :sm="12" :md="8" :lg="6" :xl="4" class="mb20">
                 <el-form-item label="检测类型">
                   <el-select v-model="state.filter.testType" placeholder="">
                     <el-option v-for="(value, key) in PCBATestType" :key="key" :label="value[1].name"
@@ -50,61 +44,45 @@
                   </el-select>
                 </el-form-item>
               </el-col>
-<el-col :xs="24" :sm="12" :md="8" :lg="6" :xl="4" class="mb20">
-            <el-form-item label="开始时间">
-                  <el-date-picker
-                    v-model="state.filter.beginTime"
-                    type="datetime"
-                    value-format="YYYY-MM-DD HH:mm:ss"
-                    range-separator="To"
-                    start-placeholder="Start date"
-                    end-placeholder="End date"
-                  />
-                </el-form-item>
-              </el-col>
-<el-col :xs="24" :sm="12" :md="8" :lg="6" :xl="4" class="mb20">
-            <el-form-item label="结束时间">
-                  <el-date-picker
-                    v-model="state.filter.endTime"
-                    type="datetime"
-                    value-format="YYYY-MM-DD HH:mm:ss"
-                    range-separator="To"
-                    start-placeholder="Start date"
-                    end-placeholder="End date"
-                  />
+              <el-col :xs="24" :sm="12" :md="8" :lg="6" :xl="4" class="mb20">
+                <el-form-item label="测试员">
+                  <el-input v-model="state.filter.user" placeholder="单行输入" clearable></el-input>
                 </el-form-item>
               </el-col>
-<el-col :xs="24" :sm="12" :md="8" :lg="6" :xl="4" class="mb20">
-  <el-form-item label="测试结果">
+              <el-col :xs="24" :sm="12" :md="8" :lg="6" :xl="4" class="mb20">
+                <el-form-item label="测试结果">
                   <el-select v-model="state.filter.result" placeholder="">
                     <el-option v-for="(value, key) in PCBATestState" :key="key" :label="value[1].name"
                       :value="Number(value[1].value)" />
                   </el-select>
                 </el-form-item>
               </el-col>
-<el-col :xs="24" :sm="12" :md="8" :lg="6" :xl="4" class="mb20">
-                <el-form-item label="测试员">
-                  <el-input v-model="state.filter.user" placeholder="单行输入" clearable></el-input>
+              <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
+                <el-form-item label="检测时间范围">
+                  <el-date-picker
+                    v-model="state.filter.testTimeRange"
+                    type="daterange"
+                    value-format="YYYY-MM-DD HH:mm:ss"
+                    range-separator="To"
+                    start-placeholder="开始日期"
+                    end-placeholder="结束日期"
+                  />
+                  <el-button type="primary" icon="ele-Search" @click="onQuery" style="margin-left: 80vh;"> 查询 </el-button>
                 </el-form-item>
               </el-col>
-</el-form-item>
+            </el-form-item>
           </el-form>
-<div class="my-flex my-flex-start" >
-<el-button  type="primary" icon="ele-Search" @click="onQuery"> 查询 </el-button>
-</div>
-</el-card>
-      </el-col>
-<!--表格-->
-      <el-col  :xs="24" >
-        <el-card style="height: 70vh" class="my-fill mt8" shadow="hover">
-<el-table v-loading="state.loading" stripe :data="state.tableModel" row-key="id" style="width: 100%">
-        <!--<el-table-column v-for="column in state.dynamicColumns" :key="column.prop" :prop="column.prop" :label="column.label"  >
-        </el-table-column>-->
-
- 
+          <div class="my-flex my-flex-start" style="margin-top: -35px;">
 
-        <el-table-column prop="serno" label="序列号" />
-        <el-table-column prop="exserno" label="外部序列号" />
+          </div>
+        </el-card>
+      </el-col>
+      <!--表格-->
+      <el-col :xs="24">
+        <el-card style="height: 45vh" class="my-fill mt8" shadow="hover">
+          <el-table v-loading="state.loading" stripe :data="state.tableModel" row-key="id" style="width: 100%">
+            <el-table-column prop="serno" label="序列号" />
+            <el-table-column prop="exserno" label="外部序列号" />
             <el-table-column prop="boardType" label="主板类型">
               <template #default="{ row }">
                 <div :style="{ color: getPCBABoardType(row.boardType).color }" class="bold-font">
@@ -114,7 +92,7 @@
             </el-table-column>
             <el-table-column prop="functionCode" label="功能码" />
             <el-table-column prop="functionName" label="功能名称" />
-            <el-table-column prop="testType" label="检测类型" >
+            <el-table-column prop="testType" label="检测类型">
               <template #default="{ row }">
                 <div :style="{ color: getPCBATestType(row.testType).color }" class="bold-font">
                   {{ getPCBATestType(row.testType).name }}
@@ -133,8 +111,8 @@
             <el-table-column prop="testSuccessNum" label="测试成功功能数" />
             <el-table-column prop="user" label="测试员" />
             <el-table-column prop="info" label="备注" />
-</el-table>
-<div class="my-flex my-flex-end" style="margin-top: 20px">
+          </el-table>
+          <div class="my-flex my-flex-end" style="margin-top: 20px">
             <el-pagination
               v-model:currentPage="state.pageInput.CurrentPage"
               v-model:page-size="state.pageInput.PageSize"
@@ -147,169 +125,174 @@
               layout="total, sizes, prev, pager, next, jumper"
             />
           </div>
-</el-card>
+        </el-card>
       </el-col>
-</el-row>
-    </div>
-  </template>
-  <script setup lang="ts">
-  import {onBeforeMount, onMounted, reactive, watch,ref} from "vue";
-  import eventBus from "/@/utils/mitt";
-import { BoardTestRecordApi } from '/@/api/admin/PCBA/boardTestRecordApi'
-import { BoardTestRecordDto } from '/@/api/admin/PCBA/boardTestRecordDto'
+    </el-row>
+  </div>
+</template>
+<script setup lang="ts">
+import { onBeforeMount, onMounted, reactive, watch, ref } from "vue";
+import eventBus from "/@/utils/mitt";
+import { BoardTestRecordApi } from '/@/api/admin/PCBA/boardTestRecordApi';
+import { BoardTestRecordDto } from '/@/api/admin/PCBA/boardTestRecordDto';
 import type { pageInput } from "/@/api/admin/shareDto/shareDto";
 import { useGlobalCacheStore } from "/@/stores/globalCacheStore";
 import { getCurrentInstance } from 'vue';
 const { proxy: ctx } = getCurrentInstance();
 
 /**获取全局缓存*/
-const globalCacheStore = useGlobalCacheStore()
+const globalCacheStore = useGlobalCacheStore();
 /**数据字典缓存*/
-const PCBATestState = ref(globalCacheStore.getGlobalStore().get('pcbaTestState'))
-const PCBABoardType = ref(globalCacheStore.getGlobalStore().get('pcbaBoardType'))
-const PCBATestType = ref(globalCacheStore.getGlobalStore().get('pcbaTestType'))
+const PCBATestState = ref(globalCacheStore.getGlobalStore().get('pcbaTestState'));
+const PCBABoardType = ref(globalCacheStore.getGlobalStore().get('pcbaBoardType'));
+const PCBATestType = ref(globalCacheStore.getGlobalStore().get('pcbaTestType'));
 
 const getPCBATestState = (val) => {
-  val = String(val)
-  if(PCBATestState.value?.has(val)){
-    return PCBATestState.value.get(val)
-  }else {
-    return val
+  val = String(val);
+  if (PCBATestState.value?.has(val)) {
+    const stateObj = PCBATestState.value.get(val);
+    if (stateObj.name === '未测试') {
+      return { ...stateObj, color:'royalblue' };
+    }
+    return stateObj;
+  } else {
+    return { name: val, color: 'inherit' };
   }
-}
+};
 
 const getPCBABoardType = (val) => {
-  val = String(val)
-  if(PCBABoardType.value?.has(val)){
-    return PCBABoardType.value.get(val)
-  }else {
-    return val
+  val = String(val);
+  if (PCBABoardType.value?.has(val)) {
+    return PCBABoardType.value.get(val);
+  } else {
+    return val;
   }
-}
+};
 
 const getPCBATestType = (val) => {
-  val = String(val)
-  if(PCBATestType.value?.has(val)){
-    return PCBATestType.value.get(val)
-  }else {
-    return val
+  val = String(val);
+  if (PCBATestType.value?.has(val)) {
+    return PCBATestType.value.get(val);
+  } else {
+    return val;
   }
-}
+};
 
-
-
-const  codeblur = ()=>{
-
-  let value = ctx.$refs.codeSel.selectedLabel
-
-  if(value == '所有'  || value == '')
-  {
-    value = -1
-
-   // ctx.$refs.codeSel.selectedValue = -1 
-
-   // return
+const codeblur = () => {
+  let value = ctx.$refs.codeSel.selectedLabel;
+  if (value == '所有' || value == '') {
+    value = -1;
   }
+  state.filter.functionCode = value;
+};
 
-  state.filter.functionCode = value
-  
-}
-  
-const options= [{
-        value: -1,
-        name: '所有',
-        key:"-1",
-        info:"可直接输入具体功能码"
-      }
-    ]
+const options = [{
+  value: -1,
+  name: '所有',
+  key: "-1",
+  info: "可直接输入具体功能码"
+}];
 
 /**数据对象*/
-  const state = reactive({
-    /**加载显示 */
-    loading: false,
-    /**条件查询模块 */
-      filter: {
-/**serno */
-        serno: "",
-/**exserno */
-exserno: "",        
-/**boardType */
-        boardType: -1,
-/**functionCode */
-        functionCode: -1,
-/**检测类型 */
-        testType: -1,
-/**起始检测时间 */
-        beginTime: "",
-/**结束检测时间 */
-        endTime: "",
-/**测试结果 */
-        result: -1,
-/**测试员 */
-        user: "",},
+const state = reactive({
+  /**加载显示 */
+  loading: false,
+  /**条件查询模块 */
+  filter: {
+    /**serno */
+    serno: "",
+    /**exserno */
+    exserno: "",
+    /**boardType */
+    boardType: -1,
+    /**functionCode */
+    functionCode: -1,
+    /**检测类型 */
+    testType: -1,
+    /**检测时间范围 */
+    testTimeRange: [], // 新增属性,用于存储时间范围
+    /**测试结果 */
+    result: -1,
+    /**测试员 */
+    user: "",
+  },
   /**表格信息 */
-tableModel: [] as BoardTestRecordDto,
-    /**动态表头 */
-    dynamicColumns: [
-{ prop: 'serno', label: '序列号' },
-{ prop: 'boardType', label: '主板类型' },
-{ prop: 'boardName', label: '主板名称' },
-{ prop: 'functionCode', label: '功能码' },
-{ prop: 'functionName', label: '功能名称' },
-{ prop: 'testType', label: '检测类型' },
-{ prop: 'time', label: '检测时间' },
-{ prop: 'result', label: '测试结果' },
-{ prop: 'testNum', label: '测试功能数' },
-{ prop: 'testSuccessNum', label: '测试成功功能数' },
-{ prop: 'user', label: '测试员' },
-{ prop: 'duration', label: '测试耗时' },
-{ prop: 'info', label: '备注' },],
-/**分页标识 */
-    pageInput:{
-      CurrentPage: 1,
-      PageSize: 10,
-    } as pageInput,
-    /**分页总数 */
-    total: 0,
-})
-  onMounted(() => {
-    init()
-    eventBus.off('refreshView')
-    eventBus.on('refreshView', async () => {
-      await init()
-    })
-  })
-  onBeforeMount(() => {
-    eventBus.off('refreshView')
-  })
-  
-    /**页条数变化*/
+  tableModel: [] as BoardTestRecordDto,
+  /**动态表头 */
+  dynamicColumns: [
+    { prop:'serno', label: '序列号' },
+    { prop: 'boardType', label: '主板类型' },
+    { prop: 'boardName', label: '主板名称' },
+    { prop: 'functionCode', label: '功能码' },
+    { prop: 'functionName', label: '功能名称' },
+    { prop: 'testType', label: '检测类型' },
+    { prop: 'time', label: '检测时间' },
+    { prop:'result', label: '测试结果' },
+    { prop: 'testNum', label: '测试功能数' },
+    { prop: 'testSuccessNum', label: '测试成功功能数' },
+    { prop: 'user', label: '测试员' },
+    { prop: 'duration', label: '测试耗时' },
+    { prop: 'info', label: '备注' },
+  ],
+  /**分页标识 */
+  pageInput: {
+    CurrentPage: 1,
+    PageSize: 10,
+  } as pageInput,
+  /**分页总数 */
+  total: 0,
+});
+
+onMounted(() => {
+  init();
+  eventBus.off('refreshView');
+  eventBus.on('refreshView', async () => {
+    await init();
+  });
+});
+onBeforeMount(() => {
+  eventBus.off('refreshView');
+});
+
+/**页条数变化*/
 const onSizeChange = () => {
-  init()
-}
+  init();
+};
 
 /**页数变化*/
 const onCurrentChange = () => {
-  init()
-}
+  init();
+};
 
+/**
+ * 监听变换
+ */
+watch(() => {}, () => {});
 
-  /**
-  * 监听变换
-  */
-  watch(() => {},() => {})
 /**条件查询 */
-          const onQuery = () => {
-          init()
-        }
-        /**初始化 */
-        const init = async () => {
-          state.loading = true
-const res:any = await new BoardTestRecordApi().getList({...state.pageInput, Filter:state.filter})
-            state.total = res?.data?.total ?? 0
-state.tableModel = res?.data?.list ?? []
-          state.loading = false
-        }
+const onQuery = () => {
+  init();
+};
+
+/**初始化 */
+const init = async () => {
+  state.loading = true;
+  // 处理时间范围,将数组中的开始和结束时间分别赋值给API需要的字段
+  const { testTimeRange, ...filterWithoutTimeRange } = state.filter;
+  const beginTime = testTimeRange.length > 0? testTimeRange[0] : "";
+  const endTime = testTimeRange.length > 1? testTimeRange[1] : "";
+  const res: any = await new BoardTestRecordApi().getList({
+   ...state.pageInput,
+    Filter: {
+     ...filterWithoutTimeRange,
+      beginTime,
+      endTime,
+    },
+  });
+  state.total = res?.data?.total?? 0;
+  state.tableModel = res?.data?.list?? [];
+  state.loading = false;
+};
 </script>
 <style scoped lang="scss">
   </style>

+ 5 - 6
admin.ui.plus-master/src/views/admin/authorize/dispenserAuthCode/index.vue

@@ -11,21 +11,20 @@
             <h1 style="margin-bottom: 10px;color: #81B337;font-size: 20px;">授权码申请成功</h1>
           </div>
           <div style="width: 100%;">
-            <el-form :inline="true" @submit.stop.prevent style="width: 20%;">
+            <el-form :inline="true" @submit.stop.prevent style="width: 30%;display: inline-block;">
               <el-form-item label="油站名称" style="width: 100%;">
                 <el-input v-model="state.filter.station" style="width: 100%;" placeholder="请输入油站名称"
                   @keyup.enter="onQuery" />
               </el-form-item>
             </el-form>
-          </div>
-          <div style="width: 100%;">
-            <el-form :inline="true" @submit.stop.prevent style="width: 20%;">
+            <el-form :inline="true" @submit.stop.prevent style="width: 30%;display: inline-block;margin-left:20vh">
               <el-form-item label="油机id" style="width: 100%;">
                 <el-input v-model="state.filter.dispenserID" style="width: 100%;" placeholder="请输入油机id"
                   @keyup.enter="onQuery" />
               </el-form-item>
             </el-form>
           </div>
+
           <div v-if="state.pwdDisplay" style="width: 100%;">
             <el-form :inline="true" @submit.stop.prevent style="width: 20%;">
               <el-form-item label="油机授权码" style="width: 82%;">
@@ -46,7 +45,7 @@
             </el-row>
             <el-row>
               <div v-if="state.btnDisplay" style="display: flex;justify-content: center;align-items: center;">
-                <el-button style="margin-top: 10px;margin-bottom: 10px;width: 264px;height: 42px;" type="primary"
+                <el-button style="margin-top: 0px;margin-bottom: 10px;width: 264px;height: 42px;" type="primary"
                   @click="onQuery">申请油机授权码</el-button>
               </div>
             </el-row>
@@ -57,7 +56,7 @@
       </el-col>
       <!--表格-->
       <el-col :xs="24">
-        <el-card style="height: 70vh" class="my-fill mt8" shadow="hover">
+        <el-card style="height: 50vh" class="my-fill mt8" shadow="hover">
           <el-table ref="multipleTableRef" v-loading="state.loading" stripe :data="state.tableModel" row-key="id"
             style="width: 100%">
             <el-table-column type="index" label="记录" width="60" />

+ 2 - 2
admin.ui.plus-master/src/views/admin/authorize/fuelingFTP/index.vue

@@ -11,7 +11,7 @@
             <h1 style="margin-bottom: 10px;color: #81B337;font-size: 20px;">密码申请成功</h1>
           </div>
           <div style="width: 100%;">
-            <el-form @submit.stop.prevent style="width: 20%;">
+            <el-form @submit.stop.prevent style="width: 40%;">
               <el-form-item label="申请备注" style="width: 100%;">
                 <el-input v-model="state.filter.info" style="width: 100%;" placeholder="请输入申请备注"
                   @keyup.enter="onQuery" />
@@ -56,7 +56,7 @@
       </el-col>
       <!--表格-->
       <el-col :xs="24">
-        <el-card style="height: 70vh" class="my-fill mt8" shadow="hover">
+        <el-card style="height: 45vh" class="my-fill mt8" shadow="hover">
           <el-table ref="multipleTableRef" v-loading="state.loading" stripe :data="state.tableModel" row-key="id"
             style="width: 100%">
             <el-table-column type="index" label="记录" width="60" />

+ 5 - 9
admin.ui.plus-master/src/views/admin/authorize/fuelingFTPofDate/index.vue

@@ -11,16 +11,12 @@
           <div v-if="state.msgDisplay" style="width: 100%;">
             <h1 style="margin-bottom: 10px;color: #81B337;font-size: 20px;">密码申请成功</h1>
           </div>
-          <div style="width: 100%;">
+          <div style="width: 100%;margin-top:20px">
             <el-form :inline="true" @submit.stop.prevent style="width: 60%;">
-              <el-form-item label="密钥使用日期" style="width: 100%;">
-                <el-input type="date" v-model="state.filter.useDate" style="width: 30%;" @keyup.enter="onQuery" />
+              <el-form-item label="密钥使用日期" style="width: 40%;">
+                <el-input type="date" v-model="state.filter.useDate" style="width: 100%;" @keyup.enter="onQuery" value-format="yyyy/MM" />
               </el-form-item>
-            </el-form>
-          </div>
-          <div style="width: 100%;">
-            <el-form :inline="true" @submit.stop.prevent style="width: 60%;">
-              <el-form-item label="申请备注" style="width: 35%;">
+              <el-form-item label="申请备注" style="width: 40%;">
                 <el-input v-model="state.filter.info" style="width: 100%;" placeholder="请输入申请备注"
                   @keyup.enter="onQuery" />
               </el-form-item>
@@ -62,7 +58,7 @@
       </el-col>
       <!--表格-->
       <el-col :xs="24">
-        <el-card style="height: 65vh" class="my-fill mt8" shadow="hover">
+        <el-card style="height: 44vh" class="my-fill mt8" shadow="hover">
           <el-table ref="multipleTableRef" v-loading="state.loading" stripe :data="state.tableModel" row-key="id"
             style="width: 100%">
             <el-table-column type="index" label="记录" width="60" />

+ 11 - 2
admin.ui.plus-master/src/views/admin/authorize/fuelingsdk/index.vue

@@ -26,10 +26,19 @@
                   <el-input v-model="sdkData.Filter.Key" placeholder="单行输入" clearable></el-input>
                 </el-form-item>
               </el-col>
+              <el-col :xs="24" :sm="12" :md="8" :lg="8" :xl="6" class="mb20">
+                              <el-form-item label="状态">
+                                  <el-select  placeholder="请选择上传状态">
+                                   <el-option label="所有" :value="''"></el-option>
+                                   <el-option label="正常" :value="''"></el-option>
+                                   <el-option label="未授权" :value="''"></el-option>
+                                 </el-select>
+                             </el-form-item>
+                           </el-col>
               <el-col :xs="24" :sm="12" :md="8" :lg="8" :xl="6" class="mb20">
                 <el-form-item label="失效时间">
                   <el-date-picker v-model="sdkData.time" type="datetimerange" value-format="YYYY-MM-DD HH:mm:ss"
-                    range-separator="To" start-placeholder="Start date" end-placeholder="End date" />
+                    range-separator="To" start-placeholder="开始日期" end-placeholder="结束日期" />
                 </el-form-item>
               </el-col>
             </el-form-item>
@@ -55,7 +64,7 @@
       </el-col>
       <!--表格-->
       <el-col :xs="24">
-        <el-card style="height: 70vh" class="my-fill mt8" shadow="hover">
+        <el-card style="height: 45vh" class="my-fill mt8" shadow="hover">
           <el-table ref="multipleTableRef" v-loading="sdkData.loading" stripe :data="sdkData.tableModel" row-key="id"
             style="width: 100%" @row-click="onOilSdkRowClick">
             <el-table-column type="selection" width="50"></el-table-column>

+ 13 - 2
admin.ui.plus-master/src/views/admin/authorize/softwarePackageManagement/index.vue

@@ -9,6 +9,7 @@
               <el-col :xs="24" :sm="12" :md="8" :lg="8" :xl="6" class="mb20">
                 <el-form-item label="软件类型">
                   <el-select v-model="softwareData.Filter.softwareType" placeholder="请选择软件类型" style="width: 200px;">
+                    <el-option label="所有" :value="''"></el-option>
                     <el-option v-for="(value, key) in softwareType" :key="key" :label="value[1].name"
                       :value="Number(value[1].value)" />
                   </el-select>
@@ -27,6 +28,7 @@
               <el-col :xs="24" :sm="12" :md="8" :lg="8" :xl="6" class="mb20">
                 <el-form-item label="设备类型">
                   <el-select v-model="softwareData.Filter.equipmentType" placeholder="请选择设备类型" style="width: 200px;">
+                    <el-option label="所有" :value="''"></el-option>
                     <el-option v-for="(value, key) in equipmentType" :key="key" :label="value[1].name"
                       :value="Number(value[1].value)" />
                   </el-select>
@@ -35,9 +37,18 @@
               <el-col :xs="24" :sm="12" :md="8" :lg="8" :xl="6" class="mb20">
                 <el-form-item label="选择时间">
                   <el-date-picker v-model="softwareData.time" type="datetimerange" value-format="YYYY-MM-DD HH:mm:ss"
-                    range-separator="To" start-placeholder="Start date" end-placeholder="End date" />
+                    range-separator="To" start-placeholder="开始日期" end-placeholder="结束日期" />
                 </el-form-item>
               </el-col>
+              <el-col :xs="24" :sm="12" :md="8" :lg="8" :xl="6" class="mb20">
+                              <el-form-item label="状态">
+                                  <el-select  placeholder="请选择上传状态">
+                                   <el-option label="已发布" :value="''"></el-option>
+                                   <el-option label="待发布" :value="''"></el-option>
+                                   <el-option label="失效" :value="''"></el-option>
+                                 </el-select>
+                             </el-form-item>
+                           </el-col>
             </el-form-item>
           </el-form>
 
@@ -57,7 +68,7 @@
       </el-col>
       <!--表格-->
       <el-col :xs="24">
-        <el-card style="height: 70vh" class="my-fill mt8" shadow="hover">
+        <el-card style="height: 45vh" class="my-fill mt8" shadow="hover">
           <el-table v-loading="softwareData.loading" stripe :data="softwareData.tableModel" row-key="id"
             style="width: 100%">
             <el-table-column v-for="column in softwareData.dynamicColumns" :key="column.prop" :prop="column.prop"

+ 19 - 1
admin.ui.plus-master/src/views/admin/personal/index.vue

@@ -136,8 +136,9 @@
 </template>
 
 <script setup lang="ts" name="personal">
-import { reactive, computed, onMounted, toRefs, ref, getCurrentInstance, defineAsyncComponent } from 'vue'
+import { reactive, computed, onMounted, toRefs, ref, getCurrentInstance, defineAsyncComponent, provide, watch } from 'vue'
 import { formatAxis } from '/@/utils/formatTime'
+import { usePersonalStore } from '/@/stores/personalStore'; // 引入新的 Store
 import { UserApi } from '/@/api/admin/User'
 import { UserGetBasicOutput } from '/@/api/admin/data-contracts'
 import { useUserInfo } from '/@/stores/userInfo'
@@ -177,6 +178,16 @@ const state = reactive({
 
 const { personalInfo, personalForm } = toRefs(state)
 
+const personalStore = usePersonalStore();
+
+// 使用 ref 包装数据,使其具有响应式
+const personalFormNickNameRef = ref(personalForm.nickName);
+provide('personalFormNickName', personalFormNickNameRef);
+
+// 当 personalForm.nickName 变化时,更新 ref 的值
+watch(personalForm.nickName, (newValue) => {
+  personalFormNickNameRef.value = newValue;
+});
 // 当前时间提示语
 const currentTime = computed(() => {
   return formatAxis(new Date())
@@ -211,10 +222,16 @@ const initData = async () => {
     state.personalForm.name = res.data?.name as string
     state.personalForm.nickName = res.data?.nickName as string
     state.personalInfo = res.data as UserGetBasicOutput
+    // 确保数据加载完成后更新 ref 的值
+    personalFormNickNameRef.value = state.personalForm.nickName;
+    personalStore.setPersonalFormNickName(state.personalForm.nickName);
   }
   state.loading = false
 }
 
+console.log(personalForm.nickName);
+
+
 // 上传头像成功
 const onAvatarSuccess = (res: AxiosResponse) => {
   state.avatarLoading = false
@@ -257,6 +274,7 @@ const onUpdateBasic = async () => {
       state.personalInfo.nickName = state.personalForm.nickName
       state.personalInfo.name = state.personalForm.name
       storesUserInfo.setUserName(state.personalForm.nickName || state.personalForm.name)
+      personalStore.setPersonalFormNickName(state.personalForm.nickName); // 更新 Store 中的值
     }
   })
 }

+ 1 - 111
admin.ui.plus-master/src/views/admin/product/goodInfo/index.vue

@@ -8,30 +8,10 @@
           <div class="basicInformation" v-loading="goods.loadingBasic">
             <div class="basicInformation-left">
               <div class="item ">
-                <el-popover
-                  placement="top-start"
-                  :width="200"
-                  title="物料名称"
-                  trigger="hover"
-                  :content="goods.basicInformation.bomName"
-                >
-                  <template #reference>
                     <span class="m-2"> 物料名称: {{goods.basicInformation.bomName}}</span>
-                  </template>
-                </el-popover>
               </div>
               <div class="item">
-                <el-popover
-                  placement="top-start"
-                  :width="200"
-                  title="物料号"
-                  trigger="hover"
-                  :content="goods.basicInformation.bomNo"
-                >
-                  <template #reference>
                     <span class="m-2"> 物料号: {{goods.basicInformation.bomNo}}</span>
-                  </template>
-                </el-popover>
               </div>
               <!-- <div class="item">
                 <el-popover
@@ -47,136 +27,46 @@
                 </el-popover>
               </div> -->
               <div class="item">
-                <el-popover
-                  placement="top-start"
-                  :width="200"
-                  title="条码"
-                  trigger="hover"
-                  :content="goods.basicInformation.barCode"
-                >
-                  <template #reference>
                     <span class="m-2"> 条码: {{goods.basicInformation.barCode}}</span>
-                  </template>
-                </el-popover>
               </div>
               <div class="item">
-                <el-popover
-                  placement="top-start"
-                  :width="200"
-                  title="软件版本"
-                  trigger="hover"
-                  :content="goods.basicInformation.software_v"
-                >
-                  <template #reference>
                     <span class="m-2"> 软件版本: {{goods.basicInformation.software_v}}</span>
-                  </template>
-                </el-popover>
               </div>
               <div class="item">
-                <el-popover
-                  placement="top-start"
-                  :width="200"
-                  title="状态"
-                  trigger="hover"
-                  :content="goods.basicInformation.status"
-                >
-                  <template #reference>
                     <span class="m-2 ">
                       状态:
                       <span class="bold-font" :style="{color:getComponentStatusType(goods.basicInformation.status).color}">
                         {{getComponentStatusType(goods.basicInformation.status).name}}
                       </span>
                     </span>
-                  </template>
-                </el-popover>
               </div>
               <div class="item">
-                <el-popover
-                  placement="top-start"
-                  :width="200"
-                  title="中化密钥"
-                  trigger="hover"
-                  :content="goods.basicInformation.key_name"
-                >
-                  <template #reference>
                     <span class="m-2">
                       密钥状态:
                       <span class="bold-font" :style="{color:getComponentStatus(goods.basicInformation.key_name).color}">
                         {{getComponentStatus(goods.basicInformation.key_name).name }}
                       </span>
                     </span>
-                  </template>
-                </el-popover>
               </div>
               <div class="item">
-                <el-popover
-                  placement="top-start"
-                  :width="200"
-                  title="团标状态"
-                  trigger="hover"
-                  :content="goods.basicInformation.stand_name"
-                >
-                  <template #reference>
                     <span class="m-2 ">
-                      标状态:
+                      国标状态:
                       <span class="bold-font" :style="{color:getComponentStatus(goods.basicInformation.stand_name).color}">
                         {{getComponentStatus(goods.basicInformation.stand_name).name }}
                       </span>
                     </span>
-                  </template>
-                </el-popover>
               </div>
               <div class="item">
-                <el-popover
-                  placement="top-start"
-                  :width="200"
-                  title="创建时间"
-                  trigger="hover"
-                  :content="goods.basicInformation.createTime"
-                >
-                  <template #reference>
                     <span class="m-2"> 创建时间: {{goods.basicInformation.createTime}}</span>
-                  </template>
-                </el-popover>
               </div>
               <div class="item">
-                <el-popover
-                  placement="top-start"
-                  :width="200"
-                  trigger="hover"
-                  title="备注"
-                  :content="goods.basicInformation.remark"
-                >
-                  <template #reference>
                     <span class="m-2"> 备注: {{goods.basicInformation.remark}}</span>
-                  </template>
-                </el-popover>
               </div>
               <div class="item">
-                <el-popover
-                  placement="top-start"
-                  :width="200"
-                  title="检测时间"
-                  trigger="hover"
-                  :content="goods.basicInformation.detectionTime"
-                >
-                  <template #reference>
                     <span class="m-2"> 检测时间: {{goods.basicInformation.detectionTime}}</span>
-                  </template>
-                </el-popover>
               </div>
               <div class="item">
-                <el-popover
-                  placement="top-start"
-                  :width="200"
-                  title="检测员"
-                  trigger="hover"
-                  :content="goods.basicInformation.detectionEmployee"
-                >
-                  <template #reference>
                     <span class="m-2"> 检测员: {{goods.basicInformation.detectionEmployee}}</span>
-                  </template>
-                </el-popover>
               </div>
               <div class="item">
               </div>

+ 15 - 6
admin.ui.plus-master/src/views/admin/product/groupLogo/index.vue

@@ -1,5 +1,5 @@
 <template>
-  <div class="layout-pd">
+  <div class="layout-pd" >
     <el-row>
       <el-col>
         <el-card class="mt8" shadow="hover">
@@ -11,8 +11,9 @@
                 </el-form-item>
               </el-col>
               <el-col :xs="24" :sm="12" :md="8" :lg="8" :xl="6" class="mb20">
-                <el-form-item label="标状态">
+                <el-form-item label="标状态">
                   <el-select v-model="groupLogoKeyOnQuery.filter.state" placeholder="请选择部件类型">
+                    <el-option label="所有" :value="''" ></el-option>
                     <el-option v-for="(value, key) in groupKeyGroupStatus" :key="key" :label="value[1].name"
                       :value="Number(value[1].value)" />
                   </el-select>
@@ -21,6 +22,7 @@
               <el-col :xs="24" :sm="12" :md="8" :lg="8" :xl="6" class="mb20">
                 <el-form-item label="密钥类型">
                   <el-select v-model="groupLogoKeyOnQuery.filter.deviceType" placeholder="请选择部件类型">
+                    <el-option label="所有" :value="''"></el-option>
                     <el-option v-for="(value, key) in groupLogoKeyKeyType" :key="key" :label="value[1].name"
                       :value="value[1].value" />
                   </el-select>
@@ -47,8 +49,8 @@
         </el-card>
       </el-col>
       <el-col :xs="24">
-        <el-card class="mt8" shadow="hover">
-          <el-table v-loading="state.loading" stripe :data="state.list" row-key="id" style="width: 100%">
+        <el-card style="height: 45vh" class="my-fill mt8" shadow="hover" >
+          <el-table v-loading="state.loading" stripe :data="state.list" row-key="id" style="width: 100%;">
             <el-table-column prop="keyGuid" label="GUID" />
             <el-table-column prop="state" label="状态">
               <template #default="{ row }">
@@ -100,6 +102,7 @@ const groupLogoKeyOnQuery = reactive({
     lastUpdate: '',
     applicationTime: '',
     recordTime: '',
+    state:''
   } as groupLogoKeyFilterModel,
 })
 
@@ -111,7 +114,7 @@ const state = reactive({
   list: [] as Array<groupLogoKeyFilterModel>,
   pageInput: {
     currentPage: 1,
-    pageSize: 10,
+    pageSize: 5,
   } as groupLogoKeyPageInput,
   total: 0
 })
@@ -166,7 +169,12 @@ const onCurrentChange = (val: number) => {
 
 const onQuery = async () => {
   state.loading = true
-  const { data } = await new GroupLogoKeyApi().getPage({ ...state.pageInput, filter: groupLogoKeyOnQuery.filter } as groupLogoKeyRequestBody).catch(() => state.loading = false)
+
+  const filterCopy = {...groupLogoKeyOnQuery.filter };
+  if (filterCopy.state === '' || filterCopy.state === null) {
+    delete filterCopy.state;
+  }
+  const { data } = await new GroupLogoKeyApi().getPage({ ...state.pageInput, filter: filterCopy } as groupLogoKeyRequestBody).catch(() => state.loading = false)
   state.list = data?.list ?? []
   state.total = data?.total ?? 0
   state.loading = false
@@ -184,6 +192,7 @@ const onReset = () => {
     lastUpdate: '',
     applicationTime: '',
     recordTime: '',
+    state:''
   }
   state.pageInput.currentPage = 1
   onQuery()

+ 23 - 2
admin.ui.plus-master/src/views/admin/product/qrBook/components/qrbook-edit.vue

@@ -15,7 +15,11 @@
             </el-col>
             <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
               <el-form-item label="上传人" prop="author">
-                <el-input v-model="formData.editData.author" placeholder="请输入上传人" clearable></el-input>
+                <!-- <el-input v-model="formData.editData.author" placeholder="请输入上传人" clearable></el-input> -->
+                
+                  <span v-if="injectedNickName">{{ injectedNickName }}</span>
+                  <span v-else>暂未获取到上传人昵称</span>
+              
               </el-form-item>
             </el-col>
             <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
@@ -44,12 +48,15 @@
   </template>
   
   <script setup lang="ts">
-  import {defineAsyncComponent, reactive, ref, watch} from "vue";
+  import {defineAsyncComponent, reactive, ref, watch, inject, computed} from "vue";
   import {FormRules} from "element-plus";
+  import { useUserInfo } from "/@/stores/userInfo"; // 引入新的 Store
   import {useGlobalCacheStore} from "/@/stores/globalCacheStore";
   import { QRBookFileInfoRequset, QRBookTableInfo } from "/@/api/admin/productionManagement/QRBookDto";
   import { QRBookApi } from "/@/api/admin/productionManagement/qrBookApi";
   import eventBus from "/@/utils/mitt";
+  import {}from"@\views\admin\personal\index.vue"
+import { log } from "console";
   
   /** 引入组件 */
   const QRBookUpload = defineAsyncComponent(() => import('./qrbook-upload.vue'))
@@ -59,6 +66,20 @@
   /** 获取文件状态 */
   const statusType = ref(globalCacheStore.getGlobalStore().get('qrBookFileStatus'))
   
+  const UserInfo = useUserInfo();
+  // 使用computed确保数据变化时能及时更新
+  const injectedNickName = computed(() => UserInfo.userInfos.userName);
+
+  // 可以添加watch用于调试,观察数据变化
+  watch(injectedNickName, (newValue) => {
+    console.log('上传人昵称已更新:', newValue);
+  });
+
+
+// 打印日志进行调试
+console.log('injectedNickName:', injectedNickName.value);
+
+
   /**数据对象 */
   const formData = reactive({
     loading: false,

+ 12 - 2
admin.ui.plus-master/src/views/admin/product/qrBook/index.vue

@@ -24,9 +24,19 @@
                                 <el-form-item label="选择时间">
                                     <el-date-picker v-model="qrBookData.time" type="datetimerange"
                                         value-format="YYYY-MM-DD HH:mm:ss" range-separator="To"
-                                        start-placeholder="Start date" end-placeholder="End date" />
+                                        start-placeholder="开始日期" end-placeholder="结束日期" />
                                 </el-form-item>
                             </el-col>
+
+                            <el-col :xs="24" :sm="12" :md="8" :lg="8" :xl="6" class="mb20">
+                              <el-form-item label="状态">
+                                  <el-select  placeholder="请选择上传状态">
+                                   <el-option label="所有" :value="''"></el-option>
+                                   <el-option label="开启" :value="''"></el-option>
+                                   <el-option label="关闭" :value="''"></el-option>
+                                 </el-select>
+                             </el-form-item>
+                           </el-col>
                         </el-form-item>
                     </el-form>
 
@@ -48,7 +58,7 @@
 
             <!-- 表格 -->
             <el-col :xs="24">
-                <el-card style="height: 70vh;" class="my-fill mt8" shadow="hover">
+                <el-card style="height: 45vh;" class="my-fill mt8" shadow="hover">
                     <el-table v-loading="qrBookData.loading" stripe :data="qrBookData.tableModel" row-key="id"
                         style="width: 100%;">
                         <el-table-column v-for="column in qrBookData.dynamicColumns" :key="column.prop"

+ 18 - 9
admin.ui.plus-master/src/views/admin/product/record/index.vue

@@ -1,10 +1,10 @@
 <template>
-  <div class="layout-pd">
+  <div class="layout-pd" >
     <!--部件电子档案-->
     <el-row>
-      <!--操作-->
-      <el-col :xs="24">
-        <el-card class="mt8" shadow="hover">
+      <!--操作--> 
+      <el-col :xs="24" >
+        <el-card  class="mt8" shadow="never" >
           <el-form :model="bomModel.filterModel" @submit.stop.prevent>
             <el-form-item class="form_item" prop="name" style="width:100%">
               <el-col :xs="24" :sm="12" :md="8" :lg="8" :xl="6" class="mb20">
@@ -25,6 +25,7 @@
               <el-col :xs="24" :sm="12" :md="8" :lg="8" :xl="6" class="mb20">
                 <el-form-item label="部件类型">
                   <el-select v-model="bomModel.filterModel.bomType" placeholder="请选择部件类型">
+                    <el-option label="所有" :value="''"></el-option>
                     <el-option v-for="(value, key) in componentType" :key="key" :label="value[1].name"
                       :value="Number(value[1].value)" />
                   </el-select>
@@ -53,15 +54,16 @@
               <el-button type="primary" icon="ele-Search" @click="onQuery"> 查询 </el-button>
               <el-button type="primary" icon="ele-RefreshRight" @click="onReset"> 重置 </el-button>
             </el-row>
-            <el-button v-auth="'api:admin:file:upload-file'" type="primary" icon="ele-Upload" @click="onUpload"> 上传
-            </el-button>
+            <!-- <el-button v-auth="'api:admin:file:upload-file'" type="primary" icon="ele-Upload" @click="onUpload"> 上传
+            </el-button> -->
           </el-row>
 
         </el-card>
       </el-col>
       <!--表格-->
+    
       <el-col :xs="24">
-        <el-card style="height: 70vh" class="my-fill mt8" shadow="hover">
+        <el-card  style="height: 47vh;overflow: hidden;"  class="my-fill mt8" shadow="never">
           <el-table v-loading="bomModel.loading" stripe :data="bomModel.bomListData" row-key="id" style="width: 100%">
             <el-table-column prop="guid" label="序号" />
             <el-table-column prop="manufacturer" label="厂商" />
@@ -84,7 +86,7 @@
                 </div>
               </template>
             </el-table-column> -->
-            <el-table-column prop="tqcKeyState" label="标状态">
+            <el-table-column prop="tqcKeyState" label="标状态">
               <template #default="{ row }">
                 <!-- <div :style="{color:getComponentStatus(row.key_name).color}" class="bold-font"> -->
                 <div :style="{ color: getColor(getComponentStatus(row.tqcKeyState).name) }" class="bold-font">
@@ -155,7 +157,9 @@
               layout="total, sizes, prev, pager, next, jumper" />
           </div>
         </el-card>
-      </el-col>
+        </el-col>
+      
+    
     </el-row>
   </div>
 </template>
@@ -262,6 +266,11 @@ onMounted(async () => {
 const onQuery = async () => {
   bomModel.loading = true
   debugger
+    let filter = {...bomModel.filterModel };
+  if (!filter.bomType) {
+    // 如果bomType为空,即选择了“所有”,从过滤条件中删除该字段
+    delete filter.bomType; 
+  }
   const res = await new ComponentApi().getPage({ ...bomModel.pageInput, filter: bomModel.filterModel }).catch(() => {
     bomModel.loading = false
   })

+ 2 - 1
admin.ui.plus-master/src/views/admin/product/type/index.vue

@@ -20,6 +20,7 @@
               <el-col :xs="24" :sm="12" :md="8" :lg="8" :xl="6" class="mb20">
                 <el-form-item label="部件类型">
                   <el-select v-model="state.filterModel.bomType" placeholder="请选择部件类型">
+                    <el-option label="所有" :value="''"></el-option>
                     <el-option v-for="(value, key) in componentType" :key="key" :label="value[1].name"
                       :value="Number(value[1].value)" />
                   </el-select>
@@ -48,7 +49,7 @@
 
       <!--表格-->
       <el-col :xs="24">
-        <el-card style="height: 70vh" class="my-fill mt8" shadow="hover">
+        <el-card style="height: 55vh" class="my-fill mt8" shadow="hover">
           <el-table v-loading="state.loading" stripe :data="state.bomListData" row-key="id" style="width: 100%">
             <el-table-column prop="guid" label="序号" />
             <el-table-column prop="type" label="部件类型">

+ 3 - 3
admin.ui.plus-master/src/views/admin/statement/alarmManagement/index.vue

@@ -55,7 +55,7 @@
               <el-col :xs="24" :sm="12" :md="8" :lg="8" :xl="6" class="mb20">
                 <el-form-item label="创建时间">
                   <el-date-picker v-model="Data.time" type="datetimerange" value-format="YYYY-MM-DD HH:mm:ss"
-                    range-separator="To" start-placeholder="Start date" end-placeholder="End date" />
+                    range-separator="To" start-placeholder="开始日期" end-placeholder="结束日期" />
                 </el-form-item>
               </el-col>
               <el-col :xs="24" :sm="12" :md="8" :lg="8" :xl="6" class="mb20">
@@ -68,7 +68,7 @@
           <hr>
 
           <!-- 按钮 -->
-          <el-row justify="space-between" class="submit-button">
+          <el-row justify="space-between" class="submit-button" style="margin-bottom:-6px">
             <el-row>
               <el-button type="primary" icon="ele-Search" @click="onQuery"> 查询 </el-button>
               <el-button type="primary" icon="ele-RefreshRight" @click="onReset"> 重置 </el-button>
@@ -78,7 +78,7 @@
       </el-col>
       <!--表格-->
       <el-col :xs="24">
-        <el-card style="height: 70vh" class="my-fill mt8" shadow="hover">
+        <el-card style="height: 40vh" class="my-fill mt8" shadow="hover">
           <el-table ref="multipleTableRef" v-loading="Data.loading" stripe :data="Data.tableModel" row-key="id"
             style="width: 100%">
             <el-table-column v-for="column in Data.dynamicColumns" :key="column.prop" :prop="column.prop"

+ 21 - 3
admin.ui.plus-master/src/views/admin/statement/alarmRules/index.vue

@@ -12,13 +12,31 @@
                   <el-input v-model="Data.time1" placeholder="请输入规则名称" clearable></el-input>
                 </el-form-item>
               </el-col>
+              <el-col :xs="24" :sm="12" :md="8" :lg="8" :xl="6" class="mb20">
+                              <el-form-item label="状态">
+                                  <el-select  placeholder="请选择上传状态">
+                                   <el-option label="所有" :value="''"></el-option>
+                                   <el-option label="启动" :value="''"></el-option>
+                                   <el-option label="禁用" :value="''"></el-option>
+                                 </el-select>
+                             </el-form-item>
+                           </el-col>
+                           <el-col :xs="24" :sm="12" :md="8" :lg="8" :xl="6" class="mb20">
+                              <el-form-item label="推送方式">
+                                  <el-select  placeholder="请选择推送方式">
+                                   <el-option label="所有" :value="''"></el-option>
+                                   <el-option label="电子邮箱" :value="''"></el-option>
+                                   <el-option label="微信" :value="''"></el-option>
+                                 </el-select>
+                             </el-form-item>
+                           </el-col>
             </el-form-item>
           </el-form>
 
           <hr>
 
           <!-- 按钮 -->
-          <el-row justify="space-between" class="submit-button">
+          <el-row justify="space-between" class="submit-button" style="margin-bottom: -9px;">
             <el-row>
               <el-button type="primary" icon="ele-Search" @click="onQuery"> 查询 </el-button>
               <el-button type="primary" icon="ele-RefreshRight" @click="onReset"> 重置 </el-button>
@@ -31,7 +49,7 @@
       </el-col>
       <!--表格-->
       <el-col :xs="24">
-        <el-card style="height: 70vh" class="my-fill mt8" shadow="hover">
+        <el-card style="height: 55vh" class="my-fill mt8" shadow="hover">
           <el-table ref="multipleTableRef" v-loading="Data.loading" stripe :data="Data.tableModel" row-key="id"
             style="width: 100%">
             <el-table-column v-for="column in Data.dynamicColumns" :key="column.prop" :prop="column.prop"
@@ -101,7 +119,7 @@ const Data = reactive({
     { prop: 'regular', label: '正则匹配' },
     { prop: 'taskPriority', label: '优先级' },
     { prop: 'isExclusive', label: '是否互斥' },
-    { prop: 'stationName', label: '推送方式' },
+    // { prop: 'stationName', label: '推送方式' },
     { prop: 'pushTemplateMappingID', label: '模板' },
     { prop: 'remark', label: '备注' },
 

+ 26 - 6
admin.ui.plus-master/src/views/admin/statement/alarmRules/template.vue

@@ -7,18 +7,37 @@
                 <el-card class="mt8" shadow="hover">
                     <el-form :model="Data.Filter" @submit.stop.prevent>
                         <el-form-item prop="name" style="width: 100%">
-                            <el-col :xs="24" :sm="12" :md="8" :lg="8" :xl="6" class="mb20">
+                            <el-col :xs="24" :sm="12" :md="8" :lg="6" :xl="4" class="mb20">
                                 <el-form-item label="模板名称">
                                     <el-input v-model="Data.time1" placeholder="请输入模板名称" clearable></el-input>
                                 </el-form-item>
                             </el-col>
+                            <el-col :xs="24" :sm="14" :md="10" :lg="8" :xl="6" class="mb20">
+                              <el-form-item label="状态">
+                                  <el-select  placeholder="请选择上传状态">
+                                   <el-option label="所有" :value="''"></el-option>
+                                   <el-option label="正常" :value="''"></el-option>
+                                   <el-option label="未授权" :value="''"></el-option>
+                                 </el-select>
+                             </el-form-item>
+                           </el-col>
+                           <el-col :xs="24" :sm="12" :md="8" :lg="6" :xl="4" class="mb20">
+                <el-form-item label="模板类型">
+                  <el-select placeholder="请选择模板类型类型">
+                    <el-option label="所有" :value="''"></el-option>
+                    <el-option label="电子邮箱" :value="''"></el-option>
+                    <el-option label="微信" :value="''"></el-option>
+                  </el-select>
+                </el-form-item>
+              </el-col>
                         </el-form-item>
-                    </el-form>
 
+                    </el-form>
+ 
                     <hr>
 
                     <!-- 按钮 -->
-                    <el-row justify="space-between" class="submit-button">
+                    <el-row justify="space-between" class="submit-button"  style="margin-bottom: -9px;">
                         <el-row>
                             <el-button type="primary" icon="ele-Search" @click="onQuery"> 查询 </el-button>
                             <el-button type="primary" icon="ele-RefreshRight" @click="onReset"> 重置 </el-button>
@@ -31,11 +50,13 @@
             </el-col>
             <!--表格-->
             <el-col :xs="24">
-                <el-card style="height: 70vh" class="my-fill mt8" shadow="hover">
+                <el-card style="height: 55vh" class="my-fill mt8" shadow="hover">
                     <el-table ref="multipleTableRef" v-loading="Data.loading" stripe :data="Data.tableModel"
                         row-key="id" style="width: 100%">
                         <el-table-column v-for="column in Data.dynamicColumns" :key="column.prop" :prop="column.prop"
                             :label="column.label" />
+                            <el-table-column prop="creator" label="添加人" />
+                            <el-table-column prop="createTime" label="添加时间" />
                         <el-table-column label="状态" width="80" align="center" show-overflow-tooltip>
                             <template #default="{ row }">
                                 <el-tag type="success" v-if="row.isActive">启用</el-tag>
@@ -45,7 +66,7 @@
 
                         <!-- 操作 -->
                         <el-table-column label="操作" fixed="right" header-align="center" align="center"
-                            class="right-operation" width="100">
+                            class="right-operation" width="100" >
                             <template #default="{ row }">
                                 <el-link class="my-el-link mr12 ml12" @click="addTemplate(row)" type="primary"
                                     icon="ele-Edit" :underline="false" target="_blank">编辑</el-link>
@@ -100,7 +121,6 @@ const Data = reactive({
         { prop: 'templateName', label: '模板名称' },
         { prop: 'templateType', label: '模板类型' },
         { prop: 'templateContent', label: '模板内容' },
-
     ],
     /**分页总数 */
     total: 0,

+ 2 - 2
admin.ui.plus-master/src/views/admin/statement/associationManagement/index.vue

@@ -17,7 +17,7 @@
           <hr>
 
           <!-- 按钮 -->
-          <el-row justify="space-between" class="submit-button">
+          <el-row justify="space-between" class="submit-button" style="margin-bottom:-7px">
             <el-row>
               <el-button type="primary" icon="ele-Search" @click="onQuery"> 查询 </el-button>
               <el-button type="primary" icon="ele-RefreshRight" @click="onReset"> 重置 </el-button>
@@ -27,7 +27,7 @@
       </el-col>
       <!--表格-->
       <el-col :xs="24">
-        <el-card style="height: 70vh" class="my-fill mt8" shadow="hover">
+        <el-card style="height: 55vh" class="my-fill mt8" shadow="hover">
           <el-table ref="multipleTableRef" v-loading="Data.loading" stripe :data="Data.tableModel" row-key="id"
             style="width: 100%">
             <el-table-column v-for="column in Data.dynamicColumns" :key="column.prop" :prop="column.prop"

+ 2 - 2
admin.ui.plus-master/src/views/admin/statement/gasStationManagement/index.vue

@@ -22,7 +22,7 @@
           <hr>
 
           <!-- 按钮 -->
-          <el-row justify="space-between" class="submit-button">
+          <el-row justify="space-between" class="submit-button" style="margin-bottom:-7px">
             <el-row>
               <el-button type="primary" icon="ele-Search" @click="onQuery"> 查询 </el-button>
               <el-button type="primary" icon="ele-RefreshRight" @click="onReset"> 重置 </el-button>
@@ -32,7 +32,7 @@
       </el-col>
       <!--表格-->
       <el-col :xs="24">
-        <el-card style="height: 70vh" class="my-fill mt8" shadow="hover">
+        <el-card style="height: 55vh" class="my-fill mt8" shadow="hover">
           <el-table ref="multipleTableRef" v-loading="Data.loading" stripe :data="Data.tableModel" row-key="id"
             style="width: 100%">
             <el-table-column v-for="column in Data.dynamicColumns" :key="column.prop" :prop="column.prop"

+ 2 - 2
admin.ui.plus-master/src/views/admin/statement/listOfOilEngines/index.vue

@@ -43,7 +43,7 @@
           <hr>
 
           <!-- 按钮 -->
-          <el-row justify="space-between" class="submit-button">
+          <el-row justify="space-between" class="submit-button" style="margin-bottom:-6px">
             <el-row>
               <el-button type="primary" icon="ele-Search" @click="onQuery"> 查询 </el-button>
               <el-button type="primary" icon="ele-RefreshRight" @click="onReset"> 重置 </el-button>
@@ -53,7 +53,7 @@
       </el-col>
       <!--列表-->
       <el-col :xs="24">
-        <el-card style="height: 70vh" class="my-fill mt8" shadow="hover">
+        <el-card style="height: 46vh" class="my-fill mt8" shadow="hover">
           <el-table v-loading="oilEngineData.loading" stripe :data="oilEngineData.tableModel" row-key="id"
             style="width: 100%">
             <el-table-column prop="name" label="油机号" />

+ 123 - 161
admin.ui.plus-master/src/views/admin/statement/moreOilEngineDetails/component/main.vue

@@ -1,173 +1,135 @@
 <template>
-    <div class="all-con" style="position: relative;">
-        <el-icon style="position: absolute;left: -15px;top: 17px;">
-            <component style="color:#fff;background-color: #3d3dff;height: 2.5em;border-radius:5px 0 0 5px;"
-                :is="showicon ? CaretLeft : CaretRight" @click="onShowHide" />
-        </el-icon>
-        <el-card class="oilInfo-bottom one">
-            <el-row :gutter="10" style="text-align: center;line-height: 2em;height: 2em">
-
-                <el-col :span="1">
-                    <div :style="isDisplay == 1 ? 'border-bottom:1px solid blue' : 'border:none'" @click="display(1)">概览
-                    </div>
-                </el-col>
-                <el-col :span="2">
-                    <div :style="isDisplay == 2 ? 'border-bottom:1px solid blue' : 'border:none'" @click="display(2)">报警
-                    </div>
-                </el-col>
-                <el-col :span="3" class="oilInfo-bottom">
-                    <div :style="isDisplay == 3 ? 'border-bottom:1px solid blue' : 'border:none'" @click="display(3)">
-                        ECQS编码状态
-                    </div>
-                </el-col>
-                <el-col :span="3" class="oilInfo-bottom">
-                    <div :style="isDisplay == 4 ? 'border-bottom:1px solid blue' : 'border:none'" @click="display(4)">
-                        维修记录
-                    </div>
-                </el-col>
-                <el-row :span="15" class="oilInfo-bottom to-flex" style="position: absolute;right: 0;">
-                    <div style="margin-right: 1em;">
-                        图例:
-                    </div>
-                    <div style="margin-right: 2em;">
-                        <div class="status-point" style="background-color:#5b53f9;right: 18.5em;top: 0.75em;" />
-                        在线
-                    </div>
-                    <div style="margin-right: 0.75em;">
-                        <div class="status-point" style="background-color:#9f9fa3;right: 14.5em;top: 0.75em;" />
-                        离线
-                    </div>
-                    <div style="margin-right: 0.75em;">
-                        <img :src="uurl" style="width: 1em;margin-right: 0.25em;">
-                        校验成功
-                    </div>
-                    <div style="margin-right: 2em;">
-                        <img :src="urrl" style="width: 1em;margin-right: 0.25em;">
-                        校验失败
-                    </div>
-                </el-row>
-            </el-row>
-        </el-card>
-        <div class="tip-con">
-            <el-alert v-if="detailsData.list.onlineStatus === '离线'" title="加油机长时间离线" type="error"
-                class="mb15"></el-alert>
-            <el-alert v-if="detailsData.list.onlineStatus === '在线'" title="加油机长时间在线" type="success"
-                class="mb15"></el-alert>
-        </div>
-        <!-- 油机内容 -->
-        <el-text tag="b" style="color: #000">油机详情</el-text>
-        <el-card class="oilInfo-con oilInfo-bottom">
-            <el-row class='oilInfo-bottom'>
-                <img class="oilInfo-img" :src="url">
-                <div>
-                    <el-col :span="24" class="oilInfo-bottom">
-                        <div class="status-point oilInfo-con-first"
-                            :style="detailsData.list.onlineStatus == '在线' ? 'background-color:#5b53f9' : 'background-color:#9f9fa3'" />
-                        <span style="margin:0 0.5em 0 1em">{{ detailsData.list.name }}号机油机</span>
-                        <img :src="uurl" style="width: 1em;">
-                    </el-col>
-                    <el-col :span="24" class="oilInfo-bottom">
-                        <span class='oilInfo-item'>出厂编号:</span>{{ detailsData.list.serialNumber }}
-                    </el-col>
-                    <el-col :span="24" class="oilInfo-bottom">
-                        <span class='oilInfo-item'>制造商:</span>{{ detailsData.list.manufacturer }}
-                    </el-col>
-                </div>
-            </el-row>
-            <div>
-                <el-row :gutter="20">
-                    <el-col :span="6" class="oilInfo-bottom">
-                        <span class='oilInfo-item'>机型:</span>{{ detailsData.list.model }}
-                    </el-col>
-                    <el-col :span="6" class="oilInfo-bottom">
-                        <span class='oilInfo-item'>规格参数:</span>{{ detailsData.list.modelSpec }}
-                    </el-col>
-                    <el-col :span="6" class="oilInfo-bottom">
-                        <span class='oilInfo-item'>测量范围:</span>{{ detailsData.list.measureRang }}
-                    </el-col>
-                    <el-col :span="6" class="oilInfo-bottom">
-                        <span class='oilInfo-item'>准确度等级:</span>{{ detailsData.list.accuracyLevel }}
-                    </el-col>
-                </el-row>
-                <el-row :gutter="20">
-                    <el-col :span="6" class="oilInfo-bottom">
-                        <span class='oilInfo-item'>生产日期:</span>{{ detailsData.list.createdTime }}
-                    </el-col>
-                    <el-col :span="6" class="oilInfo-bottom">
-                        <span class='oilInfo-item'>安装日期:</span>{{ detailsData.list.installationDate }}
-                    </el-col>
-                    <el-col :span="6" class="oilInfo-bottom">
-                        <span class='oilInfo-item'>启用日期:</span>{{ detailsData.list.startupDate }}
-                    </el-col>
-                    <el-col :span="6" class="oilInfo-bottom">
-                        <span class='oilInfo-item'>累计在线时间:</span>{{ detailsData.list.onlineDesc }}
-                    </el-col>
-                </el-row>
-            </div>
-        </el-card>
-        <el-row :gutter="10" class="oilInfo-bottom">
-            <el-col :span="0.5" class="oilInfo-bottom">
-                <el-text tag="b" style="color: #000">油枪列表</el-text>
+  <div class="all-con" style="position: relative;">
+    <!-- 顶部图标和导航部分 -->
+    <el-icon style="position: absolute;left: -15px;top: 17px;">
+      <component style="color:#fff;background-color: #3d3dff;height: 2.5em;border-radius:5px 0 0 5px;"
+        :is="showicon? CaretLeft : CaretRight" @click="onShowHide" />
+    </el-icon>
+    <el-card class="oilInfo-bottom one">
+      <el-row :gutter="10" style="text-align: center;line-height: 2em;height: 2em">
+        <!-- 导航选项 -->
+        <el-col :span="1">
+          <div :style="isDisplay == 1? 'border-bottom:1px solid blue' : 'border:none'" @click="display(1)">概览</div>
+        </el-col>
+        <el-col :span="2">
+          <div :style="isDisplay == 2? 'border-bottom:1px solid blue' : 'border:none'" @click="display(2)">报警</div>
+        </el-col>
+        <el-col :span="3" class="oilInfo-bottom">
+          <div :style="isDisplay == 3? 'border-bottom:1px solid blue' : 'border:none'" @click="display(3)">ECQS编码状态</div>
+        </el-col>
+        <el-col :span="3" class="oilInfo-bottom">
+          <div :style="isDisplay == 4? 'border-bottom:1px solid blue' : 'border:none'" @click="display(4)">维修记录</div>
+        </el-col>
+        <el-row :span="15" class="oilInfo-bottom to-flex" style="position: absolute;right: 0;">
+          <div style="margin-right: 1em;">图例:</div>
+          <div style="margin-right: 2em;">
+            <div class="status-point" style="background-color:#5b53f9;right: 18.5em;top: 0.75em;" />在线
+          </div>
+          <div style="margin-right: 0.75em;">
+            <div class="status-point" style="background-color:#9f9fa3;right: 14.5em;top: 0.75em;" />离线
+          </div>
+          <div style="margin-right: 0.75em;">
+            <img :src="uurl" style="width: 1em;margin-right: 0.25em;">校验成功
+          </div>
+          <div style="margin-right: 2em;">
+            <img :src="urrl" style="width: 1em;margin-right: 0.25em;">校验失败
+          </div>
+        </el-row>
+      </el-row>
+    </el-card>
+    <div class="tip-con">
+      <el-alert v-if="detailsData.list.onlineStatus === '离线'" title="加油机长时间离线" type="error" class="mb15"></el-alert>
+      <el-alert v-if="detailsData.list.onlineStatus === '在线'" title="加油机长时间在线" type="success" class="mb15"></el-alert>
+    </div>
+    <!-- 新的父容器包裹油机内容,方便设置样式 -->
+    <div class="engine-content-container">
+      <el-card class="oilInfo-con oilInfo-bottom">
+        <el-row class='oilInfo-bottom'>
+          <img class="oilInfo-img" :src="url">
+          <div>
+            <el-col :span="24" class="oilInfo-bottom">
+              <div class="status-point oilInfo-con-first"
+                :style="detailsData.list.onlineStatus == '在线'? 'background-color:#5b53f9' : 'background-color:#9f9fa3'" />
+              <span style="margin:0 0.5em 0 1em">{{ detailsData.list.name }}号机油机</span>
+              <img :src="uurl" style="width: 1em;">
             </el-col>
-            <el-col :span="0.5" class="oilInfo-bottom">
-                <div class="oilLabel-con" @click="isOnline('所有')"
-                    :style="flagData.isFlag == '所有' ? 'background-color:#4d4dff' : 'background-color:#89898b'">
-                    所有
-                </div>
+            <el-col :span="24" class="oilInfo-bottom">
+              <span class='oilInfo-item'>出厂编号:</span>{{ detailsData.list.serialNumber }}
             </el-col>
-            <el-col :span="0.5" class="oilInfo-bottom">
-                <div class="oilLabel-con" @click="isOnline('在线')"
-                    :style="flagData.isFlag == '在线' ? 'background-color:#4d4dff' : 'background-color:#89898b'">
-                    在线</div>
+            <el-col :span="24" class="oilInfo-bottom">
+              <span class='oilInfo-item'>制造商:</span>{{ detailsData.list.manufacturer }}
             </el-col>
-            <el-col :span="0.5" class="oilInfo-bottom">
-                <div class="oilLabel-con" @click="isOnline('离线')"
-                    :style="flagData.isFlag == '离线' ? 'background-color:#4d4dff' : 'background-color:#89898b'">
-                    离线</div>
+          </div>
+        </el-row>
+        <div>
+          <el-row :gutter="20">
+            <el-col :span="6" class="oilInfo-bottom">
+              <span class='oilInfo-item'>机型:</span>{{ detailsData.list.model }}
             </el-col>
-            <el-col :span="0.5" class="oilInfo-bottom">
-                <div class="oilLabel-con" style="background-color: #89898b;  width: 6em;">校验通过</div>
+            <el-col :span="6" class="oilInfo-bottom">
+              <span class='oilInfo-item'>规格参数:</span>{{ detailsData.list.modelSpec }}
             </el-col>
-            <el-col :span="0.5" class="oilInfo-bottom">
-                <div class="oilLabel-con" style="background-color: #89898b;  width: 6em;">校验失败</div>
+            <el-col :span="6" class="oilInfo-bottom">
+              <span class='oilInfo-item'>测量范围:</span>{{ detailsData.list.measureRang }}
             </el-col>
-        </el-row>
-        <el-row :gutter="16" style="margin-top:10px;" :key="flagData.keyData">
-            <el-col :span="8" v-for="(item, index) in listcom" v-bind:key="index">
-                <el-card class="oilInfo-msg oilInfo-bottom"
-                    @click="toParts(item.name, item.mainBoard_NozzleNo, item.onlineStatus, item.fuelName, item.alarming, item.code)">
-                    <el-row class="oilInfo-bottom">
-                        <img :src="url" class="oilInfo-img">
-                        <div>
-                            <el-col :span="24" class="oilInfo-bottom">
-                                <el-text tag="b">逻辑枪号:{{ item.name }}</el-text>
-                                <div style="position: absolute;right: 10%;top: 5%;">
-                                    <div class="status-point"
-                                        :style="item.onlineStatus == '在线' ? 'background-color:#5b53f9' : 'background-color:#9f9fa3'">
-                                    </div>
-                                    <img :src="uurl" style="width: 1em;">
-                                </div>
-                            </el-col>
-                            <el-col :span="24" class="oilInfo-bottom">
-                                <span class="oilInfo-item-two">物理枪号:</span>{{
-                                    item.mainBoard_NozzleNo }}
-                            </el-col>
-                            <el-col :span="24" class="oilInfo-bottom">
-                                <span class="oilInfo-item-two">自锁功能:</span>{{ item.alarming }}
-                            </el-col>
-                        </div>
-                    </el-row>
-                    <el-row class="oilInfo-bottom">
-                        <span class="oilInfo-item-two">油品:</span>{{ item.fuelName }}
-                    </el-row>
-                    <el-row>
-                        <span class="oilInfo-item-two">ECQS编码:</span>{{ item.code }}
-                    </el-row>
-                </el-card>
+            <el-col :span="6" class="oilInfo-bottom">
+              <span class='oilInfo-item'>准确度等级:</span>{{ detailsData.list.accuracyLevel }}
             </el-col>
-        </el-row>
+          </el-row>
+          <el-row :gutter="20">
+            <el-col :span="6" class="oilInfo-bottom">
+              <span class='oilInfo-item'>生产日期:</span>{{ detailsData.list.createdTime }}
+            </el-col>
+            <el-col :span="6" class="oilInfo-bottom">
+              <span class='oilInfo-item'>安装日期:</span>{{ detailsData.list.installationDate }}
+            </el-col>
+            <el-col :span="6" class="oilInfo-bottom">
+              <span class='oilInfo-item'>启用日期:</span>{{ detailsData.list.startupDate }}
+            </el-col>
+            <el-col :span="6" class="oilInfo-bottom">
+              <span class='oilInfo-item'>累计在线时间:</span>{{ detailsData.list.onlineDesc }}
+            </el-col>
+          </el-row>
+        </div>
+      </el-card>
     </div>
-
+    <!-- 新的父容器包裹油枪信息,方便设置样式 -->
+    <div class="nozzle-content-container">
+      <el-row :gutter="16" style="margin-top:10px;" :key="flagData.keyData">
+        <el-col :span="8" v-for="(item, index) in listcom" v-bind:key="index">
+          <el-card class="oilInfo-msg oilInfo-bottom"
+            @click="toParts(item.name, item.mainBoard_NozzleNo, item.onlineStatus, item.fuelName, item.alarming, item.code)">
+            <el-row class="oilInfo-bottom">
+              <img :src="url" class="oilInfo-img">
+              <div>
+                <el-col :span="24" class="oilInfo-bottom">
+                  <el-text tag="b">逻辑枪号:{{ item.name }}</el-text>
+                  <div style="position: absolute;right: 10%;top: 5%;">
+                    <div class="status-point"
+                      :style="item.onlineStatus == '在线'? 'background-color:#5b53f9' : 'background-color:#9f9fa3'">
+                    </div>
+                    <img :src="uurl" style="width: 1em;">
+                  </div>
+                </el-col>
+                <el-col :span="24" class="oilInfo-bottom">
+                  <span class="oilInfo-item-two">物理枪号:</span>{{ item.mainBoard_NozzleNo }}
+                </el-col>
+                <el-col :span="24" class="oilInfo-bottom">
+                  <span class="oilInfo-item-two">自锁功能:</span>{{ item.alarming }}
+                </el-col>
+              </div>
+            </el-row>
+            <el-row class="oilInfo-bottom">
+              <span class="oilInfo-item-two">油品:</span>{{ item.fuelName }}
+            </el-row>
+            <el-row>
+              <span class="oilInfo-item-two">ECQS编码:</span>{{ item.code }}
+            </el-row>
+          </el-card>
+        </el-col>
+      </el-row>
+    </div>
+  </div>
 </template>
 
 <script setup lang="ts">

+ 3 - 3
admin.ui.plus-master/src/views/admin/statement/partsManagement/oilGun/index.vue

@@ -31,7 +31,7 @@
               <el-col :xs="24" :sm="12" :md="8" :lg="8" :xl="6" class="mb20">
                 <el-form-item label="出厂时间">
                   <el-date-picker v-model="Data.time1" type="datetimerange" value-format="YYYY-MM-DD HH:mm:ss"
-                    range-separator="To" start-placeholder="Start date" end-placeholder="End date" />
+                    range-separator="To" start-placeholder="开始日期" end-placeholder="结束日期" />
                 </el-form-item>
               </el-col>
             </el-form-item>
@@ -40,7 +40,7 @@
           <hr>
 
           <!-- 按钮 -->
-          <el-row justify="space-between" class="submit-button">
+          <el-row justify="space-between" class="submit-button" style="margin-bottom:-6px">
             <el-row>
               <el-button type="primary" icon="ele-Search" @click="onQuery"> 查询 </el-button>
               <el-button type="primary" icon="ele-RefreshRight" @click="onReset"> 重置 </el-button>
@@ -50,7 +50,7 @@
       </el-col>
       <!--表格-->
       <el-col :xs="24">
-        <el-card style="height: 70vh" class="my-fill mt8" shadow="hover">
+        <el-card style="height: 47vh" class="my-fill mt8" shadow="hover">
           <el-table ref="multipleTableRef" v-loading="Data.loading" stripe :data="Data.tableModel" row-key="id"
             style="width: 100%">
             <el-table-column v-for="column in Data.dynamicColumns" :key="column.prop" :prop="column.prop"

+ 21 - 12
admin.ui.plus-master/src/views/admin/workbench/index.vue

@@ -25,13 +25,13 @@
         </div>
       </el-col>
     </el-row>
-    <el-row :gutter="15" class="home-card-two mb15">
-      <el-col :xs="24" :sm="14" :md="14" :lg="16" :xl="16">
+    <el-row :gutter="10" class="home-card-two mb15">
+      <el-col :xs="24" :sm="14" :md="14" :lg="14" :xl="14">
         <div class="home-card-item">
           <div style="height: 100%" ref="homeLineRef"></div>
         </div>
       </el-col>
-      <el-col :xs="24" :sm="10" :md="10" :lg="8" :xl="8" class="home-media">
+      <el-col :xs="24" :sm="12" :md="12" :lg="10" :xl="10" class="home-media">
         <div class="home-card-item">
           <div style="height: 100%" ref="homePieRef"></div>
         </div>
@@ -96,7 +96,7 @@ const state = reactive({
     {
       num1: 0,
       // num2: '-12.32',
-      num3: '标备案主板',
+      num3: '标备案主板',
       num4: 'fa fa-microchip',
       color1: '#FF6462',
       color2: '--next-color-primary-lighter',
@@ -217,13 +217,13 @@ const lineChart = ref({
   option : {
     backgroundColor: state.charts.bgColor,
     title: {
-      text: '标灌注',
+      text: '标灌注',
       x: 'left',
       textStyle: { fontSize: '15', color: state.charts.color },
     },
-    grid: { top: 70, right: 20, bottom: 30, left: 30 },
+    grid: { top: 50, right: 30, bottom: 40, left: 40 },
     tooltip: { trigger: 'axis' },
-    legend: { data: ['ECVR-FM', '团标主板', '团标备案主板', 'ECVR-FM备案'], right: 0 },
+    legend: { data: ['ECVR-FM', '国标主板', '国标备案主板', 'ECVR-FM备案'], right: 0 },
     xAxis: {
       data: ['1月', '2月', '3月', '4月', '5月', '6月', '7月', '8月', '9月', '10月', '11月', '12月'],
     },
@@ -252,7 +252,7 @@ const lineChart = ref({
         },
       },
       {
-        name: '标主板',
+        name: '标主板',
         type: 'line',
         symbolSize: 6,
         symbol: 'circle',
@@ -268,7 +268,7 @@ const lineChart = ref({
         },
       },
       {
-        name: '标备案主板',
+        name: '标备案主板',
         type: 'line',
         symbolSize: 6,
         symbol: 'circle',
@@ -324,11 +324,11 @@ const initPieChart = () => {
   for (var i = 0; i < pieChart.getName.length; i++) {
     data.push({ name: pieChart.getName[i], value: pieChart.getValue[i] })
   }
-  const colorList = ['#51A3FC', '#36C78B', '#FEC279', '#968AF5', '#B0C54EFF','#E720E8','#E710E8']
+  const colorList = ['#E720E8', '#36C78B', '#FEC279', '#968AF5', '#B0C54EFF','#51A3FC','#E710E8','#e44040','#d0ff00','#b11eeb','#030396','#00566b','#ff05ac']
   const option = {
     backgroundColor: state.charts.bgColor,
     title: {
-      text: '标灌注',
+      text: '标灌注',
       x: 'left',
       textStyle: { fontSize: '15', color: state.charts.color },
     },
@@ -646,6 +646,7 @@ watch(
 $homeNavLengh: 8;
 .home-container {
   overflow: hidden;
+  max-height:100%;
   .home-card-one,
   .home-card-two,
   .home-card-three {
@@ -693,7 +694,8 @@ $homeNavLengh: 8;
   .home-card-two,
   .home-card-three {
     .home-card-item {
-      height: 400px;
+      // height: 600px;
+      height: 60vh;
       width: 100%;
       overflow: hidden;
       .home-monitor {
@@ -729,5 +731,12 @@ $homeNavLengh: 8;
       }
     }
   }
+  .home-card-one{
+    .home-card-item{
+      overflow: hidden;
+      height: 16vh;
+    }
+  }
+
 }
 </style>

+ 2 - 2
admin.ui.plus-master/src/views/example/codeGeneration/index.vue

@@ -446,8 +446,8 @@ const onsubmit=()=>{
                     type="datetimerange"
                     value-format="YYYY-MM-DD HH:mm:ss"
                     range-separator="To"
-                    start-placeholder="Start date"
-                    end-placeholder="End date"
+                    start-placeholder="开始日期"
+                    end-placeholder="结束日期"
                   />
                 </el-form-item>
               </el-col>`

+ 1 - 1
package-lock.json

@@ -1,5 +1,5 @@
 {
-  "name": "Web",
+  "name": "imes_cloud",
   "lockfileVersion": 3,
   "requires": true,
   "packages": {