chenwei 5 miesięcy temu
rodzic
commit
ec648b825b
26 zmienionych plików z 612 dodań i 93 usunięć
  1. 1 1
      AWechat/AWechat/src/WechatBinding/Hello.vue
  2. 2 2
      admin.ui.plus-master/.env.development
  3. 2 2
      admin.ui.plus-master/.env.production
  4. 2 0
      admin.ui.plus-master/src/api/admin/AlarmService/alarmRulesDto.ts
  5. 147 0
      admin.ui.plus-master/src/api/admin/afterSaleOrg.ts
  6. 2 2
      admin.ui.plus-master/src/api/admin/afterSaleRole.ts
  7. 2 2
      admin.ui.plus-master/src/api/admin/afterSaleUser.ts
  8. 2 2
      admin.ui.plus-master/src/api/admin/deviceAuthorization/softwarePackageManagementApi.ts
  9. 23 12
      admin.ui.plus-master/src/api/admin/reportManagement/alarm/alarmApi.ts
  10. 0 1
      admin.ui.plus-master/src/router/backEnd.ts
  11. 4 4
      admin.ui.plus-master/src/router/route.ts
  12. 1 1
      admin.ui.plus-master/src/views/admin/afterSale/role/components/org-menu.vue
  13. 7 7
      admin.ui.plus-master/src/views/admin/afterSale/role/components/set-role-data-scope.vue
  14. 13 4
      admin.ui.plus-master/src/views/admin/afterSale/role/components/user-select.vue
  15. 7 8
      admin.ui.plus-master/src/views/admin/afterSale/role/index.vue
  16. 1 1
      admin.ui.plus-master/src/views/admin/afterSale/user/components/org-menu.vue
  17. 2 2
      admin.ui.plus-master/src/views/admin/afterSale/user/components/user-form.vue
  18. 8 10
      admin.ui.plus-master/src/views/admin/afterSale/user/index.vue
  19. 303 0
      admin.ui.plus-master/src/views/admin/product/sinopecKey/index.vue
  20. 0 0
      admin.ui.plus-master/src/views/admin/product/slelist/components/ProjectSearchHistory.vue
  21. 1 1
      admin.ui.plus-master/src/views/admin/product/slelist/index.vue
  22. 23 10
      admin.ui.plus-master/src/views/admin/statement/alarmManagement/index.vue
  23. 1 0
      admin.ui.plus-master/src/views/admin/statement/alarmQuery/index.vue
  24. 1 0
      admin.ui.plus-master/src/views/admin/statement/jikongzhuban/index.vue
  25. 1 1
      admin.ui.plus-master/src/views/admin/workbench/index.vue
  26. 56 20
      admin.ui.plus-master/src/views/admin/yujing/alarmRules/components/add-alarmRules.vue

+ 1 - 1
AWechat/AWechat/src/WechatBinding/Hello.vue

@@ -9,7 +9,7 @@ import { onMounted } from 'vue'
 
 onMounted(() => {
 // 立即跳转
-window.location.href = 'https://open.weixin.qq.com/connect/oauth2/authorize?appid=wx8cd7ceb1a454a42f&redirect_uri=http%3A%2F%2Fimes.hsfuel.com%2Findex&response_type=code&scope=snsapi_userinfo&state=STATE#wechat_redirect'
+window.location.href = 'https://open.weixin.qq.com/connect/oauth2/authorize?appid=wx8cd7ceb1a454a42f&redirect_uri=http%3A%2F%2Fimes.hsfuel.com&response_type=code&scope=snsapi_userinfo&state=STATE#wechat_redirect'
 
 // 如果需要延迟跳转(例如 3 秒后)
 // setTimeout(() => {

+ 2 - 2
admin.ui.plus-master/.env.development

@@ -5,8 +5,8 @@ ENV = 'development'
 # VITE_API_URL = 'http://ipos.biz:8070'
 #VITE_API_URL = 'http://47.97.120.160:8070'
 #VITE_API_URL = 'http://localhost:8000'
-#VITE_API_URL = 'http://imes.hsfuel.com:8070'
-VITE_API_URL = 'http://dev.hsfuel.com:8070'
+VITE_API_URL = 'http://imes.hsfuel.com:8070'
+#VITE_API_URL = 'http://dev.hsfuel.com:8070'
 # VITE_API_URL = 'http://ipos.biz:8070'
 
 

+ 2 - 2
admin.ui.plus-master/.env.production

@@ -11,6 +11,6 @@ VITE_PUBLIC_PATH = '/'
 # VITE_API_URL = 'http://ipos.biz:8070'
  #VITE_API_URL = 'http://47.97.120.160:8070'
 #VITE_API_URL = 'http://localhost:8000'
-#VITE_API_URL = 'http://imes.hsfuel.com:8070'
-VITE_API_URL = 'http://dev.hsfuel.com:8070'
+VITE_API_URL = 'http://imes.hsfuel.com:8070'
+#VITE_API_URL = 'http://dev.hsfuel.com:8070'
 # VITE_API_URL = 'http://ipos.biz:8070'

+ 2 - 0
admin.ui.plus-master/src/api/admin/AlarmService/alarmRulesDto.ts

@@ -45,6 +45,8 @@ export interface alarmRluesFilterModel {
   isPush?: boolean | null;
   /**报警等级(新增) */
   alarmLevel?: string | null;
+  /**报警代码 */
+  code?: Array<number>;
 }
 
 /**

+ 147 - 0
admin.ui.plus-master/src/api/admin/afterSaleOrg.ts

@@ -0,0 +1,147 @@
+/* eslint-disable */
+/* tslint:disable */
+/*
+ * ---------------------------------------------------------------
+ * ## THIS FILE WAS GENERATED VIA SWAGGER-TYPESCRIPT-API        ##
+ * ##                                                           ##
+ * ## AUTHOR: acacode                                           ##
+ * ## SOURCE: https://github.com/acacode/swagger-typescript-api ##
+ * ---------------------------------------------------------------
+ */
+
+import { AxiosResponse } from 'axios'
+import { OrgAddInput, OrgUpdateInput, ResultOutputInt64, ResultOutputListOrgListOutput, ResultOutputOrgGetOutput } from './data-contracts'
+import { ContentType, HttpClient, RequestParams } from './http-client'
+
+export class OrgApi<SecurityDataType = unknown> extends HttpClient<SecurityDataType> {
+  /**
+   * No description
+   *
+   * @tags org
+   * @name Get
+   * @summary 查询
+   * @request GET:/api/admin/org/get
+   * @secure
+   */
+  get = (
+    query?: {
+      /** @format int64 */
+      id?: number
+    },
+    params: RequestParams = {}
+  ) =>
+    this.request<ResultOutputOrgGetOutput, any>({
+      path: `/api/admin/org/get`,
+      method: 'GET',
+      query: query,
+      secure: true,
+      format: 'json',
+      ...params,
+    })
+  /**
+   * No description
+   *
+   * @tags org
+   * @name GetList
+   * @summary 查询列表
+   * @request GET:/api/app/after-sale/get-org-list
+   * @secure
+   */
+  getList = (
+    query?: {
+      key?: string
+    },
+    params: RequestParams = {}
+  ) =>
+    this.request<ResultOutputListOrgListOutput, any>({
+      path: `/api/app/after-sale/get-org-list`,
+      method: 'GET',
+      query: query,
+      secure: true,
+      format: 'json',
+      ...params,
+    })
+  /**
+   * No description
+   *
+   * @tags org
+   * @name Add
+   * @summary 新增
+   * @request POST:/api/admin/org/add
+   * @secure
+   */
+  add = (data: OrgAddInput, params: RequestParams = {}) =>
+    this.request<ResultOutputInt64, any>({
+      path: `/api/admin/org/add`,
+      method: 'POST',
+      body: data,
+      secure: true,
+      type: ContentType.Json,
+      format: 'json',
+      ...params,
+    })
+  /**
+   * No description
+   *
+   * @tags org
+   * @name Update
+   * @summary 修改
+   * @request PUT:/api/admin/org/update
+   * @secure
+   */
+  update = (data: OrgUpdateInput, params: RequestParams = {}) =>
+    this.request<AxiosResponse, any>({
+      path: `/api/admin/org/update`,
+      method: 'PUT',
+      body: data,
+      secure: true,
+      type: ContentType.Json,
+      ...params,
+    })
+  /**
+   * No description
+   *
+   * @tags org
+   * @name Delete
+   * @summary 彻底删除
+   * @request DELETE:/api/admin/org/delete
+   * @secure
+   */
+  delete = (
+    query?: {
+      /** @format int64 */
+      id?: number
+    },
+    params: RequestParams = {}
+  ) =>
+    this.request<AxiosResponse, any>({
+      path: `/api/admin/org/delete`,
+      method: 'DELETE',
+      query: query,
+      secure: true,
+      ...params,
+    })
+  /**
+   * No description
+   *
+   * @tags org
+   * @name SoftDelete
+   * @summary 删除
+   * @request DELETE:/api/admin/org/soft-delete
+   * @secure
+   */
+  softDelete = (
+    query?: {
+      /** @format int64 */
+      id?: number
+    },
+    params: RequestParams = {}
+  ) =>
+    this.request<AxiosResponse, any>({
+      path: `/api/admin/org/soft-delete`,
+      method: 'DELETE',
+      query: query,
+      secure: true,
+      ...params,
+    })
+}

+ 2 - 2
admin.ui.plus-master/src/api/admin/afterSaleRole.ts

@@ -197,7 +197,7 @@ getLabel = (
    */
   addRoleUser = (data: RoleAddRoleUserListInput, params: RequestParams = {}) =>
     this.request<AxiosResponse, any>({
-      path: `/api/admin/role/add-role-user`,
+      path: `/api/app/after-sale/add-role-user`,
       method: 'POST',
       body: data,
       secure: true,
@@ -215,7 +215,7 @@ getLabel = (
    */
   removeRoleUser = (data: RoleAddRoleUserListInput, params: RequestParams = {}) =>
     this.request<AxiosResponse, any>({
-      path: `/api/admin/role/remove-role-user`,
+      path: `/api/app/after-sale/remove-role-user`,
       method: 'POST',
       body: data,
       secure: true,

+ 2 - 2
admin.ui.plus-master/src/api/admin/afterSaleUser.ts

@@ -67,7 +67,7 @@ export class UserApi<SecurityDataType = unknown> extends HttpClient<SecurityData
    */
   getPage = (data: PageInputUserGetPageDto, params: RequestParams = {}) =>
     this.request<ResultOutputPageOutputUserGetPageOutput, any>({
-      path: `/api/admin/user/get-page`,
+      path: `/api/app/after-sale/get-page`,
       method: 'POST',
       body: data,
       secure: true,
@@ -120,7 +120,7 @@ export class UserApi<SecurityDataType = unknown> extends HttpClient<SecurityData
    */
   add = (data: UserAddInput, params: RequestParams = {}) =>
     this.request<ResultOutputInt64, any>({
-      path: `/api/admin/user/add`,
+      path: `/api/app/after-sale/add`,
       method: 'POST',
       body: data,
       secure: true,

+ 2 - 2
admin.ui.plus-master/src/api/admin/deviceAuthorization/softwarePackageManagementApi.ts

@@ -31,7 +31,7 @@ export class SoftwarePackageManagementApi<SecurityDataType = unknown> extends Ht
       ...params,
     })
   getPageData2 = (query: softwarePackageManagement_PageInput) =>{
-    debugger
+
    var dd = this.request<AxiosResponse, any>({
       path: `/api/app/software/get-page`,
       method: 'POST',
@@ -40,7 +40,7 @@ export class SoftwarePackageManagementApi<SecurityDataType = unknown> extends Ht
       type: ContentType.Json,
       format: 'json',
     })
-    debugger
+
     return new Promise(resolve => {
       setTimeout(() => {
         resolve({

+ 23 - 12
admin.ui.plus-master/src/api/admin/reportManagement/alarm/alarmApi.ts

@@ -39,22 +39,33 @@ export class AlarmApi<SecurityDataType = unknown> extends HttpClient<SecurityDat
 
 export class PushRulesApi<SecurityDataType = unknown> extends HttpClient<SecurityDataType> {
 
-  executePushRuleImmediately = (
-    alarmHistoryID?: string,
-    params: RequestParams = {}
-  ): Promise<ResultOutputBoolean> => {
-    const queryParams = alarmHistoryID ? { alarmHistoryID } : {};
-
-    return this.request<ResultOutputBoolean>({
-      path: '/api/app/push/execute-push-rule-immediately',
+  // executePushRuleImmediately = (
+  //   alarmHistoryID?: string,
+  //   codeID?: string,
+  //   params: RequestParams = {}
+  // ): Promise<ResultOutputBoolean> => {
+  //   const queryParams = alarmHistoryID ? { alarmHistoryID } : {};
+    
+  //   return this.request<ResultOutputBoolean>({
+  //     path: '/api/app/push/execute-push-rule-immediately',
+  //     method: 'POST',
+  //     secure: true,
+  //     type: ContentType.UrlEncoded,
+  //     format: 'json',
+  //     query: queryParams,
+  //     ...params,
+  //   });
+  // };
+    executePushRuleImmediately = (query:any ,params: RequestParams = {}) : any  =>
+    this.request<AxiosResponse,any>({
+      path:'/api/app/push/execute-push-rule-immediately',
       method: 'POST',
       secure: true,
-      type: ContentType.UrlEncoded,
+      type:  ContentType.UrlEncoded,
       format: 'json',
-      query: queryParams,
-      ...params,
+      query:query,
+      ...params
     });
-  };
 }
 
 // alarmApi.ts

+ 0 - 1
admin.ui.plus-master/src/router/backEnd.ts

@@ -51,7 +51,6 @@ export async function initBackEndControlRoutes() {
       //    menus = permissionList.data
       //  }
    menus = await getBackEndControlRoutesAfterSale()
-   var ss ='';
     }
   }
   if(menus == null)

+ 4 - 4
admin.ui.plus-master/src/router/route.ts

@@ -81,14 +81,14 @@ export const dynamicRoutes: Array<RouteRecordRaw> = [
           }
         },
         {
-          path: '/Project-search-history',
-          name: 'Project-search-history',
-          component: () => import('/@/views/admin/product/slelist/components/Project-search-history.vue'),
+          path: '/ProjectSearchHistory',
+          name: 'ProjectSearchHistory',
+          component: () => import('../views/admin/product/slelist/components/ProjectSearchHistory.vue'),
           meta: { 
             title: '项目历史版本',
             isLink: '',
             isHide: true, // 不在菜单显示,只通过路由跳转访问
-            isKeepAlive: false,
+            isKeepAlive: true,
             isAffix: false,
             isIframe: false,
             roles: ['admin', 'common'],

+ 1 - 1
admin.ui.plus-master/src/views/admin/afterSale/role/components/org-menu.vue

@@ -26,7 +26,7 @@
 <script lang="ts" setup name="admin/org/menu">
 import { onMounted, reactive, ref, watch, nextTick } from 'vue'
 import { OrgListOutput } from '/@/api/admin/data-contracts'
-import { OrgApi } from '/@/api/admin/Org'
+import { OrgApi } from '/@/api/admin/afterSaleOrg'
 import { listToTree } from '/@/utils/tree'
 import { ElTree } from 'element-plus'
 

+ 7 - 7
admin.ui.plus-master/src/views/admin/afterSale/role/components/set-role-data-scope.vue

@@ -155,16 +155,16 @@ const { form } = toRefs(state)
 const open = async (role: RoleGetListOutput) => {
   state.roleId = role.id
   state.roleName = role.name
-
+state.showDialog = true
   if ((role.id as number) > 0) {
-    const res = await new RoleApi().get({ id: role.id }, { loading: true })
+    // const res = await new RoleApi().get({ id: role.id }, { loading: true })
 
-    if (res?.success) {
-      const data = res.data
-      state.form = { roleId: data?.id, dataScope: data?.dataScope, orgIds: data?.orgIds } as RoleSetDataScopeInput
+    // if (res?.success) {
+    //   const data = res.data
+    //   state.form = { roleId: data?.id, dataScope: data?.dataScope, orgIds: data?.orgIds } as RoleSetDataScopeInput
 
-      state.showDialog = true
-    }
+    //   state.showDialog = true
+    // }
   }
 }
 

+ 13 - 4
admin.ui.plus-master/src/views/admin/afterSale/role/components/user-select.vue

@@ -66,7 +66,7 @@
     <template #footer>
       <span class="dialog-footer">
         <el-button @click="onCancel" size="default">取 消</el-button>
-        <el-button type="primary" @click="onSure" size="default" :loading="sureLoading">确 定</el-button>
+        <el-button type="primary" @click="onSure" size="default" :loading="sureLoading">确 定1</el-button>
       </span>
     </template>
   </el-dialog>
@@ -76,7 +76,8 @@
 import { ref, reactive, defineAsyncComponent } from 'vue'
 import { ElTable } from 'element-plus'
 import { UserGetPageOutput, PageInputUserGetPageDto, OrgListOutput } from '/@/api/admin/data-contracts'
-import { UserApi } from '/@/api/admin/User'
+import { UserApi } from '/@/api/admin/afterSaleUser'
+import { RoleApi } from '/@/api/admin/afterSaleRole'
 
 // 引入组件
 const OrgMenu = defineAsyncComponent(() => import('./org-menu.vue'))
@@ -185,8 +186,16 @@ const onCancel = () => {
 }
 
 // 确定
-const onSure = () => {
-  const selectionRows = userTableRef.value!.getSelectionRows() as UserGetPageOutput[]
+const onSure =  async () =>  {
+  debugger
+//   const selectionRows = userTableRef.value!.getSelectionRows() as RoleAddRoleUserListInput[]
+//   const input = { roleId: state.roleId, userIds } as RoleAddRoleUserListInput
+//  const res =  await new RoleApi().addRoleUser(selectionRows, { showSuccessMessage: true }).catch(() => {
+//      state.showDialog = false
+//   })
+  //onGetRoleUserList()
+ // emits('sure', props.multiple ? selectionRows : selectionRows.length > 0 ? selectionRows[0] : null)
+   const selectionRows = userTableRef.value!.getSelectionRows() as UserGetPageOutput[]
   emits('sure', props.multiple ? selectionRows : selectionRows.length > 0 ? selectionRows[0] : null)
 }
 

+ 7 - 8
admin.ui.plus-master/src/views/admin/afterSale/role/index.vue

@@ -9,7 +9,7 @@
             </el-form-item>
             <el-form-item>
               <el-button type="primary" icon="ele-Search" @click="onQuery"> 查询 </el-button>
-              <el-dropdown v-auth="'api:admin:role:add'" style="margin-left: 12px">
+              <el-dropdown style="margin-left: 12px">
                 <el-button type="primary"
                   >新增<el-icon class="el-icon--right"><ele-ArrowDown /></el-icon
                 ></el-button>
@@ -42,23 +42,22 @@
               <template #default="{ row }">
                 <el-button
                   v-if="row.type === 1"
-                  v-auth="'api:admin:role:add'"
                   icon="ele-Plus"
                   text
                   type="primary"
                   @click="onAdd(2, row)"
                 ></el-button>
-                <my-dropdown-more icon-only v-auths="['api:admin:permission:assign', 'api:admin:role:update', 'api:admin:role:delete']">
+                <my-dropdown-more icon-only >
                   <template #dropdown>
                     <el-dropdown-menu>
-                      <el-dropdown-item v-if="row.type === 2 && auth('api:admin:permission:assign')" @click="onSetRoleMenu(row)"
+                      <el-dropdown-item v-if="row.type === 2" @click="onSetRoleMenu(row)"
                         >菜单权限</el-dropdown-item
                       >
                       <el-dropdown-item v-if="row.type === 2" @click="onSetRoleDataScope(row)">数据权限</el-dropdown-item>
-                      <el-dropdown-item v-if="auth('api:admin:role:update')" @click="onEdit(row)"
+                      <el-dropdown-item  @click="onEdit(row)"
                         >编辑{{ row.type === 1 ? '分组' : '角色' }}</el-dropdown-item
                       >
-                      <el-dropdown-item v-if="auth('api:admin:role:delete')" @click="onDelete(row)"
+                      <el-dropdown-item  @click="onDelete(row)"
                         >删除{{ row.type === 1 ? '分组' : '角色' }}</el-dropdown-item
                       >
                     </el-dropdown-menu>
@@ -79,8 +78,8 @@
             </el-form-item>
             <el-form-item>
               <el-button type="primary" icon="ele-Search" @click="onGetRoleUserList"> 查询 </el-button>
-              <el-button v-auth="'api:admin:role:add-role-user'" type="primary" icon="ele-Plus" @click="onAddUser"> 添加员工 </el-button>
-              <el-button v-auth="'api:admin:role:remove-role-user'" type="danger" icon="ele-Delete" @click="onRemoveUser"> 移除员工 </el-button>
+              <el-button  type="primary" icon="ele-Plus" @click="onAddUser"> 添加员工 </el-button>
+              <el-button type="danger" icon="ele-Delete" @click="onRemoveUser"> 移除员工 </el-button>
             </el-form-item>
           </el-form>
         </el-card>

+ 1 - 1
admin.ui.plus-master/src/views/admin/afterSale/user/components/org-menu.vue

@@ -26,7 +26,7 @@
 <script lang="ts" setup name="admin/org/menu">
 import { onMounted, reactive, ref, watch, nextTick } from 'vue'
 import { OrgListOutput } from '/@/api/admin/data-contracts'
-import { OrgApi } from '/@/api/admin/Org'
+import { OrgApi } from '/@/api/admin/afterSaleOrg'
 import { listToTree } from '/@/utils/tree'
 import { ElTree } from 'element-plus'
 

+ 2 - 2
admin.ui.plus-master/src/views/admin/afterSale/user/components/user-form.vue

@@ -120,8 +120,8 @@
 import { reactive, toRefs, getCurrentInstance, ref, watch, defineAsyncComponent, computed } from 'vue'
 import { UserAddInput, UserUpdateInput, OrgListOutput, RoleGetListOutput } from '/@/api/admin/data-contracts'
 import { UserApi } from '/@/api/admin/afterSaleUser'
-import { OrgApi } from '/@/api/admin/Org'
-import { RoleApi } from '/@/api/admin/Role'
+import { OrgApi } from '/@/api/admin/afterSaleOrg'
+import { RoleApi } from '/@/api/admin/afterSaleRole'
 import { listToTree, treeToList } from '/@/utils/tree'
 import { cloneDeep } from 'lodash-es'
 import { isMobile, testMobile, testEmail } from '/@/utils/test'

+ 8 - 10
admin.ui.plus-master/src/views/admin/afterSale/user/index.vue

@@ -18,7 +18,7 @@
               <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12">
                 <el-form-item>
                   <el-button type="primary" icon="ele-Search" @click="onQuery"> 查询 </el-button>
-                  <el-button v-auth="'api:admin:user:add'" type="primary" icon="ele-Plus" @click="onAdd"> 新增 </el-button>
+                  <el-button  type="primary" icon="ele-Plus" @click="onAdd"> 新增 </el-button>
                 </el-form-item>
               </el-col>
             </el-row>
@@ -41,7 +41,7 @@
             <el-table-column label="状态" width="80" align="center" fixed="right">
               <template #default="{ row }">
                 <el-switch
-                  v-if="auth('api:admin:user:set-enable')"
+                  v-if="true"
                   v-model="row.enabled"
                   :loading="row.loading"
                   :active-value="true"
@@ -59,18 +59,16 @@
             </el-table-column>
             <el-table-column label="操作" width="140" header-align="center" align="center" fixed="right">
               <template #default="{ row }">
-                <el-button v-auth="'api:admin:user:update'" icon="ele-EditPen" text type="primary" @click="onEdit(row)">编辑</el-button>
-                <my-dropdown-more
-                  v-auths="['api:admin:user:set-manager', 'api:admin:user:reset-password', 'api:admin:user:delete', 'api:admin:user:one-click-login']"
-                >
+                <el-button  icon="ele-EditPen" text type="primary" @click="onEdit(row)">编辑</el-button>
+                <my-dropdown-more>
                   <template #dropdown>
                     <el-dropdown-menu>
-                      <el-dropdown-item v-if="auth('api:admin:user:set-manager')" @click="onSetManager(row)"
+                      <el-dropdown-item  @click="onSetManager(row)"
                         >{{ row.isManager ? '取消' : '设置' }}主管</el-dropdown-item
                       >
-                      <el-dropdown-item v-if="auth('api:admin:user:reset-password')" @click="onResetPwd(row)">重置密码</el-dropdown-item>
-                      <el-dropdown-item v-if="auth('api:admin:user:delete')" @click="onDelete(row)">删除用户</el-dropdown-item>
-                      <el-dropdown-item v-if="auth('api:admin:user:one-click-login')" @click="onOneClickLogin(row)">一键登录</el-dropdown-item>
+                      <el-dropdown-item  @click="onResetPwd(row)">重置密码</el-dropdown-item>
+                      <el-dropdown-item @click="onDelete(row)">删除用户</el-dropdown-item>
+                      <el-dropdown-item  @click="onOneClickLogin(row)">一键登录</el-dropdown-item>
                     </el-dropdown-menu>
                   </template>
                 </my-dropdown-more>

+ 303 - 0
admin.ui.plus-master/src/views/admin/product/sinopecKey/index.vue

@@ -0,0 +1,303 @@
+<template>
+  <div class="layout-pd" >
+    <!--部件电子档案-->
+    <el-row>
+      <!--操作--> 
+      <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">
+                <el-form-item label="物料号">
+                  <el-input v-model="bomModel.filterModel.bomMateNo" 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-input v-model="bomModel.filterModel.bomProNo" 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-input v-model.trim="bomModel.filterModel.barcode" placeholder="请输入条码" clearable></el-input>
+                </el-form-item>
+              </el-col>
+            </el-form-item>
+          </el-form>
+
+          <hr>
+
+          <!-- 按钮 -->
+          <el-row justify="space-between" class="submit-button">
+            <el-row>
+              <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-row>
+
+        </el-card>
+      </el-col>
+      <!--表格-->
+    
+      <el-col :xs="24">
+        <el-card  style="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="序号" align="center" />
+            <el-table-column prop="manufacturer" label="厂商" align="center" />
+            <el-table-column prop="bomName" label="部件名称" />
+            <el-table-column prop="bomNo" label="物料号" />
+            <el-table-column prop="bomProNo" label="生产编号" />
+            <el-table-column prop="barCode" label="条码" align="center"/>
+            <el-table-column prop="software_v" label="软件版本" />
+            <el-table-column prop="keyCount" label="密钥数量" />
+            <el-table-column prop="checkStatus" label="检测状态" />
+            <el-table-column prop="infusionOperator" label="灌注人" />
+            <el-table-column prop="status" label="状态" align="center">
+
+            </el-table-column>
+            <el-table-column prop="createTime" label="创建时间" />
+            <el-table-column prop="remark" label="备注">
+            </el-table-column>
+            <el-table-column label="操作" fixed="right" header-align="center" align="center" class="right-operation"
+              width="100">
+              <template #default="{ row }">
+                <el-link class="my-el-link mr12 ml12" @click="toPage(row)" type="primary" icon="ele-Tickets"
+                  :underline="false" target="_blank">详情</el-link>
+              </template>
+            </el-table-column>
+          </el-table>
+          <div class="my-flex my-flex-end" style="margin-top: 20px">
+            <el-pagination v-model:currentPage="pageState.pageInput.currentPage"
+              v-model:page-size="pageState.pageInput.pageSize" :total="bomModel.total" :page-sizes="[10, 15, 20, 50, 100]"
+              small background @size-change="onSizeChange" @current-change="onCurrentChange"
+              layout="total, sizes, prev, pager, next, jumper" />
+          </div>
+        </el-card>
+        </el-col>
+      
+    
+    </el-row>
+  </div>
+</template>
+<script lang="ts" setup name="admin/Component">
+import { onMounted, reactive, ref } from 'vue' //computed, getCurrentInstance
+import { ComponentApi } from '/@/api/admin/productionManagement/Component'
+// import dayjs from 'dayjs'
+// import eventBus from '/@/utils/mitt'
+import { PageInputFileGetPageDto } from "/@/api/admin/productionManagement/ComopnentDto";
+import { ComponentGetPageOutPut } from "/@/api/admin/productionManagement/CommunalDto";
+import router from "/@/router";
+
+import { useGlobalCacheStore } from "/@/stores/globalCacheStore";
+import StatusBox from '/@/components/StatusBox.vue';
+import { useDynamicPageSize } from '/@/composables/useDynamicPageSize';
+
+
+// 使用组合式函数获取分页状态
+const pageState = useDynamicPageSize(10, 15);
+
+/**获取全局缓存*/
+const globalCacheStore = useGlobalCacheStore()
+/**部件类型缓存*/
+const componentType = ref(globalCacheStore.getGlobalStore().get('componentType'))
+/**部件电子档案 - 列表状态 */
+const componentStatusType = ref(globalCacheStore.getGlobalStore().get('componentStatusType'))
+/**部件电子档案 - 列表中化密钥、团标密钥 */
+const componentStatus = ref(globalCacheStore.getGlobalStore().get('componentStatus'))
+
+const fileUploadRef = ref()
+
+//部件的页面对象
+const bomModel = reactive({
+  loading: false,
+  fileFormTitle: '',
+  filterModel: {
+    fileName: '',
+    bomType: '',
+    bomName: '',
+    bomProNo: '',
+    bomMateNo: '',
+    manufacturer: '',
+    barcode: ''
+  },
+  total: 0,
+  pageInput: {
+    currentPage: 1,
+    pageSize: 10,
+  } as PageInputFileGetPageDto,
+  //bomListData: [] as Array<ComponentGetPageOutPut>,
+       bomListData: [
+        // 直接把上面的对象放在这里
+        {
+          guid: 730439586459717,
+          bomName: "网络通讯板",
+          bomNo: "TOK-980804-303",
+          bomProNo: "A1000633",
+          cpuId: "A1000633",
+          software_v: "v1.0.5",
+          status: '已生产',
+          key_name: "POWER_MODULE",
+          stand_name: "STANDARD_V1",
+          tqcKeyState: 1,
+          ecvrKeyState: 0,
+          createTime: '2025-10-15 10:26:19',
+          remark: "",
+          manufacturer: "托肯恒山科技(广州)有限公司",
+          keyCount:8,
+           checkStatus:'通过',
+            infusionOperator: "陈伟",
+        }
+      ],
+  bomLogsTitle: '',
+})
+console.log(componentStatusType.value)
+
+
+/**部件电子档案 - 列表状态 */
+const getComponentStatusType = (val) => {
+  val = String(val)
+
+  
+  if (componentStatusType.value?.has(val)) {
+    return componentStatusType.value.get(val)
+  } else {
+    return val
+  }
+}
+
+/**部件电子档案 - 列表中化密钥、团标密钥 */
+const getComponentStatus = (val) => {
+  val = String(val)
+  if (componentStatus.value.has(val)) {
+    return componentStatus.value.get(val)
+  } else {
+    return val
+  }
+}
+
+//const { copyText } = commonFunction()
+
+//const previewImglist = computed(() => {
+//let imgList = [] as string[]
+//bomModel.bomListData.forEach((a) => {
+
+//})
+// return imgList
+//})
+
+onMounted(async () => {
+   // 初始化分页大小
+   bomModel.pageInput.pageSize = pageState.pageInput.pageSize;
+  await onQuery()
+})
+
+
+
+// const formatterTime = (cellValue: any) => {
+//   return dayjs(cellValue).format('YYYY-MM-DD HH:mm:ss')
+// }
+
+//const getInitialIndex = (imgUrl: string) => {
+//return previewImglist.value.indexOf(imgUrl)
+//}
+
+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
+  // })
+  // bomModel.bomListData = res?.data?.list
+  // //   .map(item => ({
+  // //   ...item,
+  // //   key_name:componentStatus.value?.get(item.key_name) ?? '',
+  // //   stand_name:componentStatus.value?.get(item.stand_name) ?? '',
+  // //   status:componentStatusType.value?.get(item.status) ?? ''
+  // // }))
+  // bomModel.total = res?.data?.total ?? 0
+  // bomModel.loading = false
+}
+
+/**重置表单*/
+const onReset = () => {
+  resetSearchForm()
+  onQuery()
+}
+
+/**
+ * 重置表单
+ */
+const resetSearchForm = () => {
+  bomModel.filterModel.bomType = ''
+  bomModel.filterModel.bomName = ''
+  bomModel.filterModel.bomProNo = ''
+  bomModel.filterModel.bomMateNo = ''
+  bomModel.filterModel.barcode = ''
+  bomModel.filterModel.manufacturer = ''
+  bomModel.pageInput.currentPage = 1
+}
+
+/**
+ * 页条变化
+ * @param val
+ */
+const onSizeChange = (val: number) => {
+  bomModel.pageInput.pageSize = val
+  onQuery()
+}
+
+/**
+ * 页数变化
+ * @param val
+ */
+const onCurrentChange = (val: number) => {
+  bomModel.pageInput.currentPage = val
+  onQuery()
+}
+
+const onUpload = () => {
+  fileUploadRef.value.open()
+}
+
+const toPage = (row) => {
+  router.push({ path: `/product/${row.guid}` })
+}
+
+//const onDelete = (row: FileGetPageOutput) => {
+//proxy.$modal
+//.confirmDelete(`确定要删除文件【${row.fileName}${row.extension}】?`)
+//.then(async () => {
+//await new BomApi().delete({ id: row.id as number }, { loading: true, showSuccessMessage: true })
+// onQuery()
+//  })
+//  .catch(() => {})
+// }
+</script>
+
+<style scoped lang="scss">
+.el-input,
+.el-select {
+  width: 240px;
+}
+
+/* 输入框标签固定四个字符宽度 */
+::v-deep .el-form-item__label {
+  // 字体大小14,4个字符,12px右间距
+  width: 14*4px+12px;
+  justify-content: start;
+}
+
+/* 数据表头 设置灰色样式 */
+::v-deep .el-table th.el-table__cell {
+  background-color: #F6F6F6;
+}
+</style>

+ 0 - 0
admin.ui.plus-master/src/views/admin/product/slelist/components/Project-search-history.vue → admin.ui.plus-master/src/views/admin/product/slelist/components/ProjectSearchHistory.vue


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

@@ -380,7 +380,7 @@ const ProjectHistoricalVersionRecordAsyncSubmit = async () => {
 /** 查看历史版本 - 改为路由跳转 */
 const searchHistory = (row) => {
   router.push({
-    path: '/Project-search-history',
+    path: '/ProjectSearchHistory',
     query: { projectCode: row.projectCode }
   })
 }

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

@@ -177,6 +177,7 @@ import { useDynamicPageSize } from "/@/composables/useDynamicPageSize";
 import router from "/@/router";
 import { PushRulesApi } from "/@/api/admin/reportManagement/alarm/alarmApi";
 import { ResultOutputBoolean } from "/@/api/admin/reportManagement/alarm/alarmDto";
+import { de } from "element-plus/es/locale";
 
 const pushRulesApi = new PushRulesApi();
 const tableRef = ref<InstanceType<typeof ElTable>>();
@@ -216,7 +217,7 @@ const Data = reactive({
     // { prop: 'nozzleControlName', label: '油枪' },
     { prop: 'createdDate', label: '报警时间' },
     { prop: 'gasStation', label: '加油站名称',width: 300 },
-    { prop: '', label: '诊断说明' },
+    { prop: 'diagnostic', label: '诊断说明' },
     { prop: '', label: '是否推送' },
   ],
   pageInput: {
@@ -357,25 +358,37 @@ const handlePushRules = async () => {
     ElMessage.warning('请至少选择一行数据');
     return;
   }
-
+debugger
   const alarmHistoryIDs: string[] = selection
     .map(row => row.alarmHistoryID)
     .filter((id): id is string => !!id);
 
-  if (alarmHistoryIDs.length === 0) {
+      const alarmCodeIds: string[] = selection
+    .map(row => row.alarmCodeId)
+    .filter((alarmCodeId): alarmCodeId is string => !!alarmCodeId);
+
+  if (alarmHistoryIDs.length === 0 && alarmCodeIds.length === 0) {
     ElMessage.warning('所选项中没有有效的报警历史ID');
     return;
   }
 
   const idsString = alarmHistoryIDs.join(',');
-
+const codeidsString = alarmCodeIds.join(',');
   try {
-    const res = await pushRulesApi.executePushRuleImmediately(undefined, {
-      query: {
-        alarmHistoryID: idsString,
-      },
-    });
-
+    // const res = await pushRulesApi.executePushRuleImmediately(undefined, {
+    //   query: {
+    //     alarmHistoryID: idsString,
+    //     codeID: codeidsString
+    //   },
+    // });
+
+ var json = {
+      alarmHistoryID: idsString,
+      codeID: codeidsString
+    };
+	const res = await  pushRulesApi.executePushRuleImmediately(json).catch(() => {
+
+  })
     if (res.success && res.data) {
       ElMessage.success(`推送成功`);
     } else {

+ 1 - 0
admin.ui.plus-master/src/views/admin/statement/alarmQuery/index.vue

@@ -158,6 +158,7 @@ const state = reactive({
     { prop: 'content', label: '推送内容' },
     { prop: 'pushed', label: '是否推送' },
     { prop: 'pushTime', label: '推送时间' },
+    { prop: 'alarmhistoryDate', label: '报警时间' },
     { prop: 'tag', label: '标签' },
   ],
   pageInput: {

+ 1 - 0
admin.ui.plus-master/src/views/admin/statement/jikongzhuban/index.vue

@@ -145,6 +145,7 @@ tableModel: [] as EncodercontrolsDto,
 { prop: 'serialNumber', label: '序列号' },
 { prop: 'softwareVersion', label: '软件版本号' },
 { prop: 'hardwareVersion', label: '硬件版本号' },
+{ prop: 'dispenserNumber', label: '油机号' },
 { prop: 'deviceStatus', label: '计控主板状态' },
 { prop: 'onlineStatus', label: '在线状态' },
 { prop: 'fixTime', label: '安装时间' },

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

@@ -63,7 +63,7 @@
 <!--      </el-col>-->
 <!--    </el-row>-->
 <div class="version">
-  托肯恒山科技有限公司  V 5.2.0  
+  托肯恒山科技有限公司  V 5.2.2  
 </div>
   </div>
 </template>

+ 56 - 20
admin.ui.plus-master/src/views/admin/yujing/alarmRules/components/add-alarmRules.vue

@@ -130,26 +130,17 @@
             <!-- 推送方式选择(包含总开关isPush) -->
       <div style="width: 100%;display: flex;justify-content: center;align-items: center;">
         <el-form :inline="true" @submit.stop.prevent>
-          <el-form-item label="打标签,定义报警等级:" style="width: 100%;" prop="pushMethod">
+          <el-form-item label="打标签" style="width: 100%;" prop="pushMethod">
             <!-- 推送总开关(对应isPush参数) -->
             <el-row style="width: 100%;margin-bottom: 10px;">
-              开启<el-switch v-model="Data.isPush" style="margin-left: 3%;" />
+              开启<el-switch v-model="Data.isLabel" style="margin-left: 3%;" />
             </el-row>
             
-            <!-- 微信和邮箱开关(仅在总开关打开时显示) -->
-            <template v-if="Data.isPush">
-              <el-row style="width: 100%;">
-                微信公众号<el-switch v-model="Data.radioValue1" style="margin-left: 3%;" @change="radioChange" />
-              </el-row>
-              <el-row style="width: 100%;">
-                邮&#8195;&#8195;&#8195;箱<el-switch v-model="Data.radioValue2" style="margin-left: 3%;" @change="radioChange" />
-              </el-row>
-            </template>
           </el-form-item>
         </el-form>
       </div>
       <!-- 推送方式选择(包含总开关isPush) -->
-      <div style="width: 100%;display: flex;justify-content: center;align-items: center;">
+      <div style="width: 100%;display: flex;justify-content: center;align-items: center;"  v-if="!Data.isLabel">
         <el-form :inline="true" @submit.stop.prevent>
           <el-form-item label="推送方式:" style="width: 100%;" prop="pushMethod">
             <!-- 推送总开关(对应isPush参数) -->
@@ -185,7 +176,18 @@
           </el-form-item>
         </el-form>
       </div>
-      
+            <!-- 报警代码 -->
+      <div style="width: 100%;display: flex;justify-content: center;align-items: center;">
+        <el-form :inline="true" @submit.stop.prevent>
+          <el-form-item label="报警代码:" style="width: 100%;">
+            <el-cascader
+              v-model="selectedValue"
+            :options="Data.options"
+            :props="Data.props"
+            clearable></el-cascader>
+          </el-form-item>
+        </el-form>
+      </div>
       <!-- 正则匹配 -->
       <div style="width: 100%;display: flex;justify-content: center;align-items: center;">
         <el-form :inline="true" @submit.stop.prevent>
@@ -468,9 +470,30 @@ const Data = reactive({
   alarmType: ["加油机离线","加油机短期离线","通信异常","非法部件","厂商不符","绑定错误","监控微处理器报警","安全装置报警","加油机报警","检定"],
   alarmSource: ['云平台', '安全装置'],
   alarmproType: ["油机维修","装置维修"],
-  alarmproStatus: ["正在维修","结束维修"]
+  alarmproStatus: ["正在维修","结束维修"],
+  isLabel:false,
+selectedValue: '',
+       props: { multiple: true },
+        options: [{
+          value: 56,
+          label: '56',
+          children: [{
+            value: 143,
+            label: '143',
+          }]
+        },{
+          value: 53,
+          label: '53',
+          children: [{
+            value: 226,
+            label: '226',
+          }]
+        }]
 })
-
+///默认选中报警代码
+const selectedValue = ref([
+  //[56, 143]
+])
 // 转换用户列表为树形结构数据
 const treeUserData = computed(() => {
   return Data.userList.map((group: any) => {
@@ -692,8 +715,8 @@ const getLabel = async () => {
 
 // 获取角色列表
 const getRole = async () => {
-  const res = await new RoleApi().getList()
-  Data.roleList = res.data?.map((item: any) => ({ 'id': item.id, 'name': item.name })) || []
+  //const res = await new RoleApi().getList()
+  //Data.roleList = res.data?.map((item: any) => ({ 'id': item.id, 'name': item.name })) || []
 }
 
 // 查询模板信息
@@ -914,9 +937,11 @@ const submitForm = async () => {
     pushTemplateMappingID: Data.Filter.pushTemplateMappingID,
     tag: Data.Filter.tag || null,
     isPush: Data.isPush,
-    alarmLevel: Data.Filter.alarmLevel
+    alarmLevel: Data.Filter.alarmLevel,
+    isLabel : Data.isLabel,
+    code:getSelectedValueAsJson()
   }
-  
+  const cleanSubmitData = JSON.parse(JSON.stringify(submitData));
   try {
     const api = new alarmRulesApi(); 
     if (isEditing.value && Data.Filter.id) {
@@ -935,7 +960,11 @@ const submitForm = async () => {
     ElMessage.error(`${isEditing.value ? '更新' : '保存'}失败,请稍后重试`);
   }
 }
-
+const getSelectedValueAsJson = () => {
+   return selectedValue.value && selectedValue.value.length > 0 
+    ? JSON.stringify(selectedValue.value)
+    : null
+}
 /**
  * 打开表单对话框 - 修复编辑时推送用户和油站信息被清空的问题
  */
@@ -988,9 +1017,13 @@ const openDialog = (row?: any) => {
       // 处理标签编码回显
       if (row.tag) {
         let tagItem = Data.labelList.find((item: any) => item.code === row.tag);
+       
         if (!tagItem && typeof row.tag === 'string') {
           tagItem = Data.labelList.find((item: any) => item.id === row.tag);
         }
+        if(!tagItem) {
+            tagItem = Data.labelList.find((item: any) => item.name === row.tag);
+        }
         Data.Filter.tag = tagItem?.code || row.tag;
       }
       
@@ -1011,6 +1044,9 @@ const openDialog = (row?: any) => {
       Data.radioValue1 = pushMethods.includes('wx');
       Data.radioValue2 = pushMethods.includes('email');
       radioChange();
+
+      //打标签
+      Data.isLabel = row.isLabel !== undefined ? row.isLabel : false;
       
       // 处理油站数据 - 确保油站选择正确设置
       setStationSelection(stationIds);