From 218e84d2264e413f31a2f3957f05bb7b8ad42d5d Mon Sep 17 00:00:00 2001
From: rk <94314517@qq.com>
Date: 星期一, 29 九月 2025 10:36:28 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/master'

---
 admin/src/components/common/CommonHeader.vue |  222 ++++++++++++++++++++++++++++++++++++++++++------------
 1 files changed, 171 insertions(+), 51 deletions(-)

diff --git a/admin/src/components/common/CommonHeader.vue b/admin/src/components/common/CommonHeader.vue
index 5afc768..2ef2259 100644
--- a/admin/src/components/common/CommonHeader.vue
+++ b/admin/src/components/common/CommonHeader.vue
@@ -2,13 +2,18 @@
   <div class="common-header">
     <div class="header">
       <div class="logo">
-        <div>{{ title }}</div>
+        <div class="title">{{ title }}</div>
         <div class="list">
-          <div class="item">鏈嶅姟涓績</div>
-          <div class="item">瀹夐槻涓績</div>
-          <div class="item">娑堥槻涓績</div>
-          <div class="item">鑳界涓績</div>
-          <div class="item">椹鹃┒鑸�</div>
+          <div class="item active">
+            <div>鏈嶅姟涓績</div>
+            <div class="linellae"></div>
+          </div>
+          <div class="item" @click="getHeaderNav('0')">瀹夐槻涓績</div>
+          <div class="item" @click="getHeaderNav('1')">娑堟帶涓績</div>
+          <div class="item" @click="getHeaderNav('2')">鑳界涓績</div>
+          <div class="item" @click="getHeaderNav('7')">鍚庡嫟涓績</div>
+          <div class="item" @click="getHeaderNav('3')">椹鹃┒鑸�</div>
+          <!-- <div class="item" @click="handleTest">娴嬭瘯</div> -->
         </div>
         <!-- <div class="title-en">Diagnosis of Intelligent Manufacturing Integrated Service Platfrom</div> -->
       </div>
@@ -16,61 +21,35 @@
         <el-dropdown v-if="isLogined" trigger="click">
           <span class="el-dropdown-link">
             <!-- <img v-if="userInfo != null" :src="userInfo.avatar == null ? `${require('@/assets/avatar/man.png')}` : userInfo.avatar" alt="">{{userInfo | displayName}}<i class="el-icon-arrow-down el-icon--right"></i> -->
-            <img
-              v-if="userInfo != null"
-              style="width: 30px !important"
-              src="@/assets/avatar/man.png"
-              alt=""
-            />{{ userInfo | displayName
+            <img v-if="userInfo != null" style="width: 30px !important" src="@/assets/avatar/man.png" alt="" />{{
+              userInfo | displayName
             }}<i class="el-icon-arrow-down el-icon--right"></i>
           </span>
           <el-dropdown-menu slot="dropdown">
-            <el-dropdown-item @click.native="changePwd"
-              >淇敼瀵嗙爜</el-dropdown-item
-            >
+            <el-dropdown-item @click.native="changePwd">淇敼瀵嗙爜</el-dropdown-item>
             <el-dropdown-item @click.native="logout">閫�鍑虹櫥褰�</el-dropdown-item>
           </el-dropdown-menu>
         </el-dropdown>
       </div>
     </div>
     <!-- 淇敼瀵嗙爜 -->
-    <GlobalAlertWindow
-      title="淇敼瀵嗙爜"
-      :visible.sync="visible.changePwd"
-      @confirm="confirmChangePwd"
-      @close="visible.changePwd = false"
-    >
-      <el-form
-        :model="changePwdData.form"
-        ref="changePwdDataForm"
-        :rules="changePwdData.rules"
-      >
+    <GlobalAlertWindow title="淇敼瀵嗙爜" :visible.sync="visible.changePwd"
+      :showClose="userInfo && (!userInfo.needChangePwd || userInfo.needChangePwd == '0')"
+      :showCancel="userInfo && (!userInfo.needChangePwd || userInfo.needChangePwd == '0')" @confirm="confirmChangePwd"
+      @close="visible.changePwd = false">
+      <el-form :model="changePwdData.form" ref="changePwdDataForm" :rules="changePwdData.rules">
         <el-form-item label="鍘熷瀵嗙爜" prop="oldPwd" required>
-          <el-input
-            v-model="changePwdData.form.oldPwd"
-            type="password"
-            placeholder="璇疯緭鍏ュ師濮嬪瘑鐮�"
-            maxlength="30"
-            show-password
-          ></el-input>
+          <el-input v-model="changePwdData.form.oldPwd" type="password" placeholder="璇疯緭鍏ュ師濮嬪瘑鐮�" maxlength="30"
+            show-password></el-input>
         </el-form-item>
         <el-form-item label="鏂板瘑鐮�" prop="newPwd" required>
-          <el-input
-            v-model="changePwdData.form.newPwd"
-            type="password"
-            placeholder="璇疯緭鍏ユ柊瀵嗙爜"
-            maxlength="30"
-            show-password
-          ></el-input>
+          <el-input v-model="changePwdData.form.newPwd" type="password" placeholder="璇疯緭鍏ユ柊瀵嗙爜锛屽瘑鐮侀渶鍖呭惈瀛楁瘝銆佹暟瀛楀強鐗规畩瀛楃涓殑鑷冲皯涓ょ"
+            maxlength="20" show-password></el-input>
         </el-form-item>
+        <!-- <div style="font-size: 12px;color:#999999">瀵嗙爜闇�鍖呭惈瀛楁瘝銆佹暟瀛楀強鐗规畩瀛楃涓殑鑷冲皯涓ょ</div> -->
         <el-form-item label="纭鏂板瘑鐮�" prop="confirmPwd" required>
-          <el-input
-            v-model="changePwdData.form.confirmPwd"
-            type="password"
-            placeholder="璇峰啀娆¤緭鍏ユ柊瀵嗙爜"
-            maxlength="30"
-            show-password
-          ></el-input>
+          <el-input v-model="changePwdData.form.confirmPwd" type="password" placeholder="璇峰啀娆¤緭鍏ユ柊瀵嗙爜" maxlength="20"
+            show-password></el-input>
         </el-form-item>
       </el-form>
     </GlobalAlertWindow>
@@ -81,6 +60,7 @@
 import { mapState, mapMutations } from 'vuex'
 import GlobalAlertWindow from './GlobalAlertWindow'
 import { logout, updatePwd } from '@/api/system/common'
+import { getAppHeaderNav } from '@/api'
 export default {
   name: 'CommonHeader',
   components: { GlobalAlertWindow },
@@ -93,6 +73,7 @@
   data() {
     return {
       title: process.env.VUE_APP_TITLE,
+      headerNavData: {},
       visible: {
         // 淇敼瀵嗙爜
         changePwd: false
@@ -114,7 +95,8 @@
             { required: true, message: '璇疯緭鍏ュ師濮嬪瘑鐮�' }
           ],
           newPwd: [
-            { required: true, message: '璇疯緭鍏ユ柊瀵嗙爜' }
+            { required: true, message: '璇疯緭鍏ュ瘑鐮�', trigger: 'blur' },
+            { validator: this.validatePassword, trigger: 'blur' },
           ],
           confirmPwd: [
             { required: true, message: '璇峰啀娆¤緭鍏ユ柊瀵嗙爜' }
@@ -128,6 +110,15 @@
     // title () {
     //   return this.$route.meta.title
     // }
+  },
+  created() {
+
+  },
+  mounted() {
+    // needChangePwd 0 : 榛樿瀵嗙爜闇�瑕佷慨鏀癸紝1 涓嶉渶瑕�
+    if (this.userInfo && (!this.userInfo.needChangePwd || this.userInfo.needChangePwd == '0')) {
+      this.visible.changePwd = true
+    }
   },
   filters: {
     // 灞曠ず鍚嶇О
@@ -149,6 +140,92 @@
       this.$nextTick(() => {
         this.$refs.changePwdDataForm.resetFields()
       })
+    },
+    validatePassword(rule, value, callback) {
+      if (!value) {
+        callback(new Error('璇疯緭鍏ュ瘑鐮�'))
+      } else {
+        const lengthValid = /^.{6,20}$/.test(value)
+        const hasLetter = /[a-zA-Z]/.test(value)
+        const hasNumber = /[0-9]/.test(value)
+        const hasSpecial = /[!@#$%^&*(),.?":{}|<>]/.test(value)
+
+        const typesCount = [hasLetter, hasNumber, hasSpecial].filter(Boolean).length
+
+        if (!lengthValid) {
+          callback(new Error('瀵嗙爜闀垮害闇�涓�6鍒�20涓瓧绗�'))
+        } else if (typesCount < 2) {
+          callback(new Error('瀵嗙爜闇�鍖呭惈瀛楁瘝銆佹暟瀛楀強鐗规畩瀛楃涓殑鑷冲皯涓ょ'))
+        } else {
+          callback() // 楠岃瘉閫氳繃
+        }
+      }
+    },
+    getHeaderNav(type) {
+      getAppHeaderNav(type).then(res => {
+        window.open(res, "_blank")
+      })
+    },
+    handleTest() {
+      const myWindow = window.open('https://10.50.250.253/portal/ui/index?componentId=dfe&componentMenuId=process_apply')
+      setTimeout(() => {
+        const params = {
+          componentId: 'dfe',
+          componentMenuId: 'process_apply',
+          callback: {
+            method: 'dealTlncMsg', argument: {
+              "msgId": "98c256b9-aaff-11ef-8347-fa163ee2c57c",
+              "moduleId": "dfeFlowTodoModuleId",
+              "msgTitle": "璇峰強鏃跺鐞�13856591439鍙戣捣鐨勮鍋囩敵璇�",
+              "msgStatus": "0",
+              "msgCreateTime": "浠婂ぉ 15:33",
+              "msgCreateTimeIso": "2024-11-25T15:33:42.000+08:00",
+              "serverTime": 1732531014591,
+              "menuCode": "process_apply",
+              "msgStatusStr": "寰呭鐞�",
+              "comId": "dfe",
+              "userId": "13856591439",
+              "extendNoShow": "{\"processInstanceId\":\"98a57fe0-aaff-11ef-8347-fa163ee2c57c\",\"processId\":\"process_dabcfdd39f1b6f46d36a9f4ff6ce1080\",\"param\":{\"sourceType\":\"todo\",\"modelCode\":\"tb_leave_dfe_for_dfe_runtime\",\"processNodeId\":\"UserTask_dde7d83377343a2d5fa1f60c23b023ef\",\"taskId\":\"98c256b9-aaff-11ef-8347-fa163ee2c57c\"},\"process.param.appId\":\"32ca8770-6f85-11ec-b5a3-991864da52a6\",\"appId\":\"32ca8770-6f85-11ec-b5a3-991864da52a6\",\"name\":\"璇峰亣鐢宠\",\"taskId\":\"98c256b9-aaff-11ef-8347-fa163ee2c57c\",\"taskNodeId\":\"UserTask_dde7d83377343a2d5fa1f60c23b023ef\",\"url\":\"/dfe-form/process/tlnc/apply\"}",
+              "targetComId": "dfe",
+              "moduleName": "娴佺▼寰呭姙",
+              "tid": "99cad778-aaff-11ef-9dbf-ff08ba71965c",
+              "msgEndTime": null,
+              "msgEndTimeIso": "",
+              "picUrl": "",
+              "extendJson": "{\"key1\":\"璇峰強鏃跺鐞嗛檲楦块鍙戣捣鐨勮鍋囩敵璇穃"}",
+              "extendParam": null,
+              "extendCascade": null,
+              "createUser": "13856591439",
+              "webCascadeUrl": null,
+              "h5CascadeUrl": null,
+              "cascadeTodoOpenType": null,
+              "cascadeSourceConfigId": null,
+              "h5Url": "/h5/pages/form-page/form-page?returnPath=-1&appId=32ca8770-6f85-11ec-b5a3-991864da52a6&taskId=98c256b9-aaff-11ef-8347-fa163ee2c57c&processNodeId=UserTask_dde7d83377343a2d5fa1f60c23b023ef&modelCode=tb_leave_dfe_for_dfe_runtime&type=flowHandle&component=form-apply&_sn=true",
+              "segmentId": "dfe-form",
+              "lastUsers": "闄堥缚椋�",
+              "currentUsers": "闄堥缚椋�",
+              "todoTypeCode": "dfe@@tlnc_placeholder_tlnc@@dfeFlowTodoModuleId",
+              "currentUserIds": "13856591439",
+              "lastUserIds": "13856591439",
+              "msgDesc": null,
+              "widgetUrl": null,
+              "detailType": null,
+              "widgetWidth": null,
+              "widgetHeight": null,
+              "userIdList": null,
+              "statusName": null,
+              "arriveTime": null,
+              "stayTime": null,
+              "todoType": null,
+              "cascadePort": null,
+              "openMode": null
+            }
+          },
+          msgType: 'tlnc'
+        }
+        let argus = JSON.stringify(params)
+        myWindow.postMessage('{"method":"goToApp","argument":' + argus + '}', '*')
+      }, 8000)
     },
     // 纭畾淇敼瀵嗙爜
     confirmChangePwd() {
@@ -172,10 +249,11 @@
         })
           .then(() => {
             this.$tip.apiSuccess('淇敼鎴愬姛')
+            this.$store.commit('setUserInfo', { needChangePwd: 1 })
             this.visible.changePwd = false
           })
           .catch(e => {
-           //  this.$tip.apiFailed(e)
+            //  this.$tip.apiFailed(e)
           })
           .finally(() => {
             this.isWorking.changePwd = false
@@ -201,9 +279,40 @@
 
 <style scoped lang="scss">
 @import "@/assets/style/variables.scss";
+
 .common-header {
   background-color: #2080f7;
 }
+
+.list {
+  flex: 1;
+  display: flex;
+  align-items: center;
+  margin-left: 60px;
+
+  .item {
+    margin-right: 40px;
+    font-size: 16px;
+    font-weight: 400;
+    display: flex;
+    flex-direction: column;
+    align-items: center;
+    justify-content: flex-start;
+    height: 40px;
+    cursor: pointer;
+
+    .linellae {
+      width: 64px;
+      height: 2px;
+      background: #FFFFFF;
+    }
+  }
+
+  .active {
+    font-weight: 500;
+  }
+}
+
 .header {
   overflow: hidden;
   // background: #fff;
@@ -214,7 +323,7 @@
   .logo {
     /* background: url("../../assets/images/top_ic_chilun@2x.png") no-repeat; */
     box-sizing: border-box;
-    min-width: 280px;
+    min-width: 360px;
     height: 56px;
     padding: 10px 30px;
     // flex-shrink: 0;
@@ -224,6 +333,11 @@
     color: #fff;
     display: flex;
     align-items: center;
+
+    .title {
+      width: 240px;
+    }
+
     // display: inline;
     .title-en {
       font-size: 11px;
@@ -231,18 +345,22 @@
       color: rgb(202, 214, 238);
     }
   }
+
   .user {
-    width: 712px;
+    width: 212px;
     box-sizing: border-box;
     height: 56px;
     padding-right: 25px;
     background: url("../../assets/images/top_ic_bolang@2x.png") no-repeat;
     flex-shrink: 0;
     text-align: right;
+    cursor: pointer;
+
     .el-dropdown {
       top: 2px;
       color: #fff;
     }
+
     img {
       width: 32px;
       position: relative;
@@ -251,9 +369,11 @@
     }
   }
 }
+
 // 涓嬫媺鑿滃崟妗�
 .el-dropdown-menu {
   width: 140px;
+
   .el-dropdown-menu__item:hover {
     background: #e3edfb;
     color: $primary-color;

--
Gitblit v1.9.3