From 89761212ad3ac02b68276d82c26ab6cd767ea216 Mon Sep 17 00:00:00 2001
From: zhangxiaoxu <819527061@qq.com>
Date: 星期二, 06 一月 2026 14:56:29 +0800
Subject: [PATCH] 新政修改密码功能

---
 pages/home/home.vue |  350 ++++++++++++++++++++++++++++++++++++++++++++++++++++++----
 1 files changed, 325 insertions(+), 25 deletions(-)

diff --git a/pages/home/home.vue b/pages/home/home.vue
index 6d06960..81c1ea5 100644
--- a/pages/home/home.vue
+++ b/pages/home/home.vue
@@ -11,7 +11,7 @@
 		</view>
 
 
-    <view class="huoshiju-box" v-if="compId == '1000278'">
+    <view class="huoshiju-box" v-if="roles && roles.includes(2000144)">
       <!-- 浜у搧褰撳墠浠锋牸 -->
       <view class="price-group" v-if="coalData && coalData.length > 0">
         <combined-title title="浜у搧褰撳墠浠锋牸"></combined-title>
@@ -25,8 +25,8 @@
               </uni-tr>
               <uni-tr v-for="(item,index) in coalData" :key="index">
                 <uni-td align="left">{{item.coalName}}</uni-td>
-                <uni-td align="center">{{item.price1}}</uni-td>
-                <uni-td align="center">{{item.price2}}</uni-td>
+                <uni-td align="center">{{item.price1 || ''}}</uni-td>
+                <uni-td align="center">{{item.price2 || ''}}</uni-td>
               </uni-tr>
             </uni-table>
 <!--            <view class="price-line">
@@ -78,7 +78,7 @@
                 <view class="text1">{{item.ledgerName || ''}}</view>
               </view>
             </view>
-            <view class="shouqiIcon" @click="handleShouKuanIsMore">
+            <view v-if="shoukuanJiluTemp && shoukuanJiluTemp.length > 2" class="shouqiIcon" @click="handleShouKuanIsMore">
               <image v-if="!shoukuanIsMore" src="@/static/home/xialaIcon.png"></image>
               <image v-else src="@/static/home/shouqiIcon.png"></image>
             </view>
@@ -145,12 +145,12 @@
                   <view class="num">{{item.lyDSum || 0}}</view>
                 </view>
                 <view class="caol-block">
-                  <view class="name">鏃ュ悎璁�(鍏�)</view>
+                  <view class="name">鏃ュ悎璁�(鍚�)</view>
                   <view class="num">{{item.d1 || 0}}</view>
                 </view>
               </view>
             </view>
-            <view class="shouqiIcon" @click="handleCoalIsMore">
+            <view class="shouqiIcon"  v-if="coalTongjiTemp && coalTongjiTemp.length > 2" @click="handleCoalIsMore">
               <image v-if="!coalShowIsMore" src="@/static/home/xialaIcon.png"></image>
               <image v-else src="@/static/home/shouqiIcon.png"></image>
             </view>
@@ -169,23 +169,35 @@
           <div class="shoukuan-box-inside">
             <view class="shoukuan-main" v-for="(item,index) in kehuTongji" :key="index">
               <view class="shoukuan-line">
-                <view class="name">瀹㈡埛锛�</view>
+<!--                <view class="name">瀹㈡埛锛�</view>-->
                 <view class="text1">{{item.customerName}}</view>
+<!--                <view class="meizhong">
+                  <view class="coal">{{item.coalName}}</view>
+                </view>-->
+              </view>
+              <view class="shoukuan-line coal-line">
+                <view class="coal" v-if="item.coalName">{{item.coalName}}</view>
+                <view class="coal" v-if="item.type">{{item.type || ''}}</view>
+                <view class="coal" v-if="item.carSize">{{item.carSize || ''}}杞�</view>
               </view>
               <view class="shoukuan-line">
                 <view class="name">璐﹀锛�</view>
                 <view class="text1">{{item.ledgerName}}</view>
               </view>
-              <view class="coalTongji-box">
+<!--              <view class="coalTongji-box">
                 <view class="shoukuan-line kehu-block">
                   <view class="name">杞︽暟锛�</view>
-                  <view class="text1 num">{{item.carSize}}</view>
+                  <view class="text1 num">{{item.carSize || ''}}</view>
                 </view>
                 <view class="shoukuan-line kehu-block">
+                  <view class="name">鏂瑰紡锛�</view>
+                  <view class="text1 num">{{item.type || ''}}</view>
+                </view>
+&lt;!&ndash;                <view class="shoukuan-line kehu-block">
                   <view class="name">鐓ょ锛�</view>
                   <view class="text1">{{item.coalName}}</view>
-                </view>
-              </view>
+                </view>&ndash;&gt;
+              </view>-->
               <view class="coalTongji-box marginTop">
                 <view class="caol-block">
                   <view class="name">鍙戣繍閲�(鍚�)</view>
@@ -201,7 +213,7 @@
                 </view>
               </view>
             </view>
-            <view class="shouqiIcon" @click="handlekehuTongjiShowIsMore">
+            <view class="shouqiIcon" v-if="kehuTongjiTemp && kehuTongjiTemp.length > 2" @click="handlekehuTongjiShowIsMore">
               <image v-if="!kehuTongjiShowIsMore" src="@/static/home/xialaIcon.png"></image>
               <image v-else src="@/static/home/shouqiIcon.png"></image>
             </view>
@@ -517,6 +529,14 @@
 		<!-- 鑿滃崟鏍� -->
 		<!-- <popup-menu @menuShow="menushow" ref="menuRef"></popup-menu> -->
 		<u-gap height="15" bgColor="#eeeeee"></u-gap>
+
+
+
+    <view class="editorPass" @click="handlePwd">
+        <image class="icon" src="@/static/home/editorIcon.png"></image>
+        <view class="">淇敼瀵嗙爜</view>
+    </view>
+    <view class="huiseBox"></view>
 		<view class="utils">
 			<view class="utils-container">
 				<view class="utils-container-body" @click="redirectLogin">
@@ -530,6 +550,66 @@
 			</view>
 		</view>
 		<u-gap height="60" bgColor="#eeeeee"></u-gap>
+
+    <view class="passWord-main-box">
+      <u-popup :show="passShow"
+               :closeable="true"
+               :closeOnClickOverlay="true"
+               @close="handleClosePassShow"
+               mode="center"
+               width="90%"
+               class="passBox">
+        <view class="popup-box">
+          <u-form :model="formData" ref="uForm" borderBottom :rules="rules" :label-width="150">
+            <u-form-item prop="password" label="鍘熷瘑鐮�" borderBottom>
+              <u-input
+                  class="flex-1"
+                  type="password"
+                  v-model="formData.password"
+                  :border="false"
+                  placeholder="璇疯緭鍏ュ師鏉ョ殑瀵嗙爜"
+              />
+            </u-form-item>
+            <u-form-item prop="newpassword1" label="鏂板瘑鐮�" borderBottom>
+              <u-input
+                  class="flex-1"
+                  type="password"
+                  v-model="formData.newpassword1"
+                  placeholder="瀵嗙爜搴旂敱8-16浣嶆暟瀛椼�佸瓧姣嶃�佺鍙风粍鎴愩�傝涓嶈浣跨敤瀹规槗琚寽鍒扮殑瀵嗙爜"
+                  :border="false"
+              />
+            </u-form-item>
+            <view class="intensity">
+              <view class="psdText">瀵嗙爜寮哄害</view>
+              <view
+                  class="line"
+                  :class="[level.includes('low') ? 'low' : '']"></view>
+              <view
+                  class="line"
+                  :class="[level.includes('middle') ? 'middle' : '']"></view>
+              <view
+                  class="line"
+                  :class="[level.includes('high') ? 'high' : '']"></view>
+              <div class="warningtext">
+                瀵嗙爜搴旂敱8-16浣嶆暟瀛椼�佸瓧姣嶃�佺鍙风粍鎴愩�傝涓嶈浣跨敤瀹规槗琚寽鍒扮殑瀵嗙爜
+              </div>
+            </view>
+            <u-form-item prop="newpassword2" label="纭瀵嗙爜" borderBottom>
+              <u-input
+                  class="flex-1"
+                  type="password"
+                  v-model="formData.newpassword2"
+                  placeholder="鍐嶆杈撳叆鏂板瘑鐮�"
+                  :border="false"
+              />
+            </u-form-item>
+          </u-form>
+          <view class="sumbmit-box">
+            <u-button type="primary" shape="circle" @click="handlePassConfirm" :loading="sumbLoading"> 纭畾 </u-button>
+          </view>
+        </view>
+      </u-popup>
+    </view>
 	</view>
 </template>
 
@@ -564,7 +644,83 @@
 		}
 	},
 	data() {
+    const validatePass = (rule, value, callback) => {
+      if (this.formData.newpassword1 !== "") {
+        if (value !== this.formData.newpassword1) {
+          callback(new Error("涓ゆ杈撳叆瀵嗙爜涓嶄竴鑷�!"));
+        } else {
+          callback();
+        }
+      } else {
+        callback();
+      }
+    };
+    const checkPassword = (rule, value, callback) => {
+      // let roles = this.$store.getters.roles;//褰撳墠鐢ㄦ埛瑙掕壊id
+      // let passL = 8;
+      // if (roles.concat(1)){
+      //   passL = 10
+      // }
+      let passL = 8;
+      this.level = []
+      if(!value) {
+        return callback('瀵嗙爜涓嶈兘涓虹┖')
+      }
+      if(value.length < passL) {
+        return callback(`瀵嗙爜涓嶈兘灏戜簬${passL}浣峘)
+      }
+      if(value.length > 16) {
+        return callback('瀵嗙爜涓嶈兘澶т簬16浣�')
+      }
+      //鏍¢獙鏄暟瀛�
+      const regex1 = /^\d+$/
+      // 鏍¢獙瀛楁瘝
+      const regex2 = /^[A-Za-z]+$/
+      // 鏍¢獙绗﹀彿
+      const regex3 =
+          /^[`~!@#$%^&*()_\-+=<>?:"{}|,.\/;'\\[\]路~锛丂#锟�%鈥︹��&*锛堬級鈥斺�擻-+={}|銆娿�嬶紵锛氣�溾�濄�愩�戙�侊紱鈥�'锛屻�傘�乚+$/
+      if(regex1.test(value)) {
+        this.level.push('low')
+        return callback('瀵嗙爜寮哄害杩囦綆')
+      }else if(regex2.test(value)) {
+        this.level.push('low')
+        return callback('瀵嗙爜寮哄害杩囦綆')
+      }else if(regex3.test(value)) {
+        this.level.push('low')
+        return callback('瀵嗙爜寮哄害杩囦綆')
+      }else if(/^[A-Za-z\d]+$/.test(value)) {
+        this.level.push('low')
+        this.level.push('middle')
+        return callback('瀵嗙爜寮哄害杩囦綆')
+      }else if(
+          /^[`~!@#$%^&*()_\-+=<>?:"{}|,.\/;'\\[\]路~锛丂#锟�%鈥︹��&*锛堬級鈥斺�擻-+={}|銆娿�嬶紵锛氣�溾�濄�愩�戙�侊紱鈥�'锛屻�傘�乗d]+$/.test(
+              value
+          )
+      ) {
+        this.level.push('low')
+        this.level.push('middle')
+        return callback('瀵嗙爜寮哄害杩囦綆')
+      }else if(
+          /^[`~!@#$%^&*()_\-+=<>?:"{}|,.\/;'\\[\]路~锛丂#锟�%鈥︹��&*锛堬級鈥斺�擻-+={}|銆娿�嬶紵锛氣�溾�濄�愩�戙�侊紱鈥�'锛屻�傘�丄-Za-z]+$/.test(
+              value
+          )
+      ) {
+        this.level.push('low')
+        this.level.push('middle')
+        return callback('瀵嗙爜寮哄害杩囦綆')
+      } else if (
+          /^[`~!@#$%^&*()_\-+=<>?:"{}|,.\/;'\\[\]路~锛丂#锟�%鈥︹��&*锛堬級鈥斺�擻-+={}|銆娿�嬶紵锛氣�溾�濄�愩�戙�侊紱鈥�'锛屻�傘�丄-Za-z\d]+$/.test(
+              value
+          )
+      ) {
+        this.level.push('low')
+        this.level.push('middle')
+        this.level.push('high')
+      }
+      return callback()
+    };
 		return {
+      level:[],
 			// ucharts鍥捐〃
 			chartData: {},
 			opts: {
@@ -640,7 +796,6 @@
 			procInstId: '',
 			// 閫夋嫨鍣�
 			statusSeletShow: false,
-			statusList: [['涓浗', '缇庡浗', '鏃ユ湰']],
 			// data
 			shenqingData: [],
 			daibanData: [],
@@ -677,17 +832,42 @@
       kehuTongji:[], //鐓ょ缁熻
       kehuTongjiTemp:[], //鐓ょ缁熻
       kehuTongjiShowIsMore: false,
-      compId:'',
+      roles:[],
       d2Sum:0,  //鎬昏閲戦
       d1Sum:0,  //鎬昏
       lyDSumSum:0,  //璺繍
       dsumSum:0,  //姹借繍
+      passShow: false,  //瀵嗙爜寮规
+      sumbLoading: false,
+      formData: {
+        password:'',
+        newpassword1:'',
+        newpassword2:'',
+      },
+      rules: {
+        password: [{
+          type: 'string',
+          required: true,
+          message: '璇峰~鍐欏瘑鐮�',
+          trigger: ['blur', 'change']
+        }],
+        newpassword1: [{
+          required: true,
+          validator: checkPassword,
+          trigger: 'change'
+        }],
+        newpassword2: [{
+          required: true,
+          validator: validatePass,
+          trigger: "blur"
+        }]
+      }
 		};
 	},
 	// 鐩戝惉椤甸潰鍒濇娓叉煋瀹屾垚銆傛敞鎰忓鏋滄覆鏌撻�熷害蹇紝浼氬湪椤甸潰杩涘叆鍔ㄧ敾瀹屾垚鍓嶈Е鍙�
-	// onReady() {
-
-	// },
+	onReady() {
+    this.$refs.uForm.setRules(this.rules)
+	},
 	// 鐐瑰嚮瀵艰埅鏍忚彍鍗曞悗
 	onNavigationBarButtonTap(e) {
 		console.log('閫�鍑哄鑸爮鎸夐挳浜嬩欢', e);
@@ -715,11 +895,11 @@
   watch: {
     shoukuanIsMore: {
       handler(newVal,oldVal) {
-        console.log(newVal,'newVal-------褰撳ぉ鏀舵璁板綍')
         let temp = newVal.toString() || ''
         if(this.shoukuanJiluTemp && this.shoukuanJiluTemp.length > 0) {
           if(temp == 'false') {
             this.shoukuanJilu = this.shoukuanJiluTemp.slice(0,2)
+            console.log(this.shoukuanJilu,'this.shoukuanJilu------鏀舵鎯呭喌')
             this.coalShowIsMore = false
           }else if(temp == 'true') {
             this.shoukuanJilu = this.shoukuanJiluTemp
@@ -732,7 +912,6 @@
     },
     coalShowIsMore: {
       handler(newVal,oldVal) {
-        console.log(newVal,'newVal-------鎸夌叅绉嶇粺璁�')
         let temp = newVal.toString() || ''
         if(this.coalTongjiTemp && this.coalTongjiTemp.length > 0) {
           if(temp == 'false') {
@@ -749,7 +928,6 @@
     },
     kehuTongjiShowIsMore: {
       handler(newVal,oldVal) {
-        console.log(newVal,'newVal-------鎸夊鎴峰彂杩愮粺璁�')
         let temp = newVal.toString() || ''
         if(this.kehuTongjiTemp && this.kehuTongjiTemp.length > 0) {
           if(temp == 'false') {
@@ -766,6 +944,41 @@
     },
   },
 	methods: {
+    handlePassConfirm() { //淇敼瀵嗙爜
+      //鍒楄〃鏌ヨ
+      this.$refs.uForm.validate().then(res => {
+        this.sumbLoading = true
+        uni.showLoading({
+          title: '姝e湪鍔犺浇...'
+        });
+        this.formData.deptId = uni.getStorageSync('userInfo')?.deptId
+        this.formData.username = uni.getStorageSync('userInfo')?.username
+        this.$reqPut('editInfo',this.formData).then(res => {
+          if (res.code == 0) {
+            this.passShow = false
+            this.sumbLoading = false
+            this.$u.toast('淇敼瀵嗙爜鎴愬姛!');
+            setTimeout(() => {
+              uni.reLaunch({
+                url:"/pages/login/login"
+              })
+            }, 1000)
+            uni.hideLoading();
+          }else {
+            this.$u.toast(res.msg || '淇敼瀵嗙爜澶辫触');
+            this.sumbLoading = false
+            uni.hideLoading();
+          }
+        })
+      })
+
+    },
+    handleClosePassShow() {
+      this.passShow = false
+    },
+    handlePwd() {
+      this.passShow = true
+    },
     handleShouKuanIsMore() {  //褰撴棩鏀舵鎯呭喌
       this.shoukuanIsMore = !this.shoukuanIsMore
     },
@@ -804,7 +1017,7 @@
           this.shoukuanJiluTemp = res.data || []
           if(this.shoukuanJiluTemp && this.shoukuanJiluTemp.length > 0) {
             this.shoukuanToatl = this.shoukuanJiluTemp[0]?.money || 0
-            if(this.shoukuanJiluTemp.length > 1) {
+            if(this.shoukuanJiluTemp.length > 0) {
               this.shoukuanJilu = this.shoukuanJiluTemp.slice(0,2)
               this.shoukuanIsMore = false
             }
@@ -821,7 +1034,7 @@
             this.d1Sum = this.coalTongjiTemp[0]?.d1Sum || 0
             this.lyDSumSum = this.coalTongjiTemp[0]?.lyDSumSum || 0
             this.dsumSum = this.coalTongjiTemp[0]?.dsumSum || 0
-            if(this.coalTongjiTemp.length > 1) {
+            if(this.coalTongjiTemp.length > 0) {
               this.coalTongji = this.coalTongjiTemp.slice(0,2)
               this.coalShowIsMore = false
             }
@@ -834,7 +1047,7 @@
         if (res.code == 0) {
           this.kehuTongjiTemp = res.data || []
           if(this.kehuTongjiTemp && this.kehuTongjiTemp.length > 0){
-            if(this.kehuTongjiTemp.length > 1) {
+            if(this.kehuTongjiTemp.length > 0) {
               this.kehuTongji = this.kehuTongjiTemp.slice(0,2)
               this.kehuTongjiShowIsMore = false
             }
@@ -877,8 +1090,8 @@
           this.$store.commit('SET_PERMISSIONS',res.data.permissions)
 					//uni.setStorageSync('permissions', res.data.permissions);
 					this.userId = res.data.sysUser?.userId;
-          this.compId = res.data.sysUser?.compId;
-          console.log(this.compId,'this.compId---111')
+          this.roles = res.data?.roles;
+          console.log(this.roles,'this.roles---111')
 					this.$nextTick(() => {
 						this.coalbunker();
 					});
@@ -1215,6 +1428,17 @@
 ::v-deep{
   .uni-table-td,.uni-table-th{
     color: #000;
+  }
+  .u-popup__content{
+    width: 85%;
+    padding: 40rpx;
+    box-sizing: border-box;
+    border-radius: 10rpx;
+  }
+  .passWord-main-box{
+    .u-icon__icon{
+      font-size: 28rpx!important;
+    }
   }
 }
 ::v-deep.home {
@@ -1650,6 +1874,19 @@
           align-items: baseline;
           height: 60rpx;
           line-height: 60rpx;
+          position: relative;
+          .coal{
+            font-size: 26rpx;
+            color: #3884ff;
+            border: 1px solid #3884ff;
+            margin-right: 26rpx;
+            padding: 0 32rpx;
+            height: 38rpx;
+            line-height: 38rpx;
+            border-radius: 8rpx;
+            letter-spacing: 2px;
+            font-weight: 500;
+          }
           .name{
             font-size: 24rpx;
             color: #606266;
@@ -1665,6 +1902,10 @@
             display: flex;
             align-items: baseline;
           }
+        }
+        .coal-line{
+          display: flex;
+          align-items: center;
         }
         .kehu-block{
           width: 33%;
@@ -1718,4 +1959,63 @@
     }
   }
 }
+.sumbmit-box{
+  margin-top: 40rpx;
+}
+.editorPass{
+  width: 100%;
+  justify-content: center;
+  display: flex;
+  margin: 20rpx 0;
+  align-items: center;
+  .icon{
+    width: 46rpx;
+    height: 46rpx;
+    margin-right: 10rpx;
+  }
+}
+.huiseBox{
+  width: 100%;
+  height: 12rpx;
+  background: #eeeeee;
+}
+.intensity {
+  width: 100%;
+  margin-top: 10rpx;
+  .psdText {
+    font-size: 14px;
+    margin-right: 10px;
+  }
+
+  .line {
+    display: inline-block;
+    width: 70rpx;
+    height: 8rpx;
+    background: #d8d8d8;
+    border-radius: 6rpx;
+    margin-right: 16rpx;
+
+    &.low {
+      background: #f4664a;
+    }
+
+    &.middle {
+      background: #ffb700;
+    }
+
+    &.high {
+      background: #2cbb79;
+    }
+  }
+
+  .level {
+    margin: 0 32rpx 0 16rpx;
+  }
+
+  .warningtext {
+    color: #5a5a5a;
+    font-size: 24rpx;
+    margin-top: 10rpx;
+  }
+}
 </style>

--
Gitblit v1.9.1