Browse Source

代码提交

user5 7 months ago
parent
commit
79835af552

+ 28 - 6
src/api/sys/OSSService.js

@@ -75,8 +75,8 @@ export const client = new OSS({
   region: 'oss-cn-hangzhou', // oss地址
   accessKeyId: 'LTAI5tKa6kzGr5EyPWJB4EcD', // 通过阿里云控制台创建的AccessKey ID。
   accessKeySecret: 'arHxB7ZPhizrBYf4844TtyaRctPMgW', // 通过阿里云控制台创建的AccessKey Secret。
-	bucket: 'xgxm-test', // 仓库名字
-	// bucket: 'xg-pg', // 仓库名字
+	// bucket: 'xgxm-test', // 仓库名字
+	bucket: 'xg-pg', // 仓库名字
   useFetch: true, // 支持上传大于100KB的文件
   secure: false // 返回的url为https
 })
@@ -260,10 +260,32 @@ export async function openWindowOnUrl (row) {
     rowUrl = data
   })
 	suffix = suffix.toLowerCase();
-  if (suffix === 'pdf' || suffix === 'xml') {
-    window.open('https://view.xdocin.com/xdoc?_xdoc=' + encodeURIComponent(rowUrl), '_blank')
-  } else if (suffix === 'rar' || suffix === 'zip' || suffix === 'jar' || suffix === '7z') {
-    window.open('https://view.xdocin.com/xdoc?_xdoc=' + encodeURIComponent(rowUrl), '_blank')
+  if (suffix === 'pdf' || suffix === 'xml' || suffix === 'rar' || suffix === 'zip' || suffix === 'jar' || suffix === '7z') {
+	  var url = 'https://view.xdocin.com/xdoc?_xdoc='+encodeURIComponent(rowUrl);
+	  //预览参数
+	  var ops = {
+		  // "pdf": true, //word文档尝试以pdf方式显示,默认false
+		  // "img": true, //尝试以图片方式显示,默认false
+		  // "watermark": "XDOC文档预览", //水印文本,显示水印
+		  // "saveable": true, //是否允许保存源文件,默认false
+		  // "printable": false, //是否允许打印,默认true
+		  // "copyable": false, //是否允许选择复制内容,默认true
+		  // "toolbar": false, //是否显示工具条,默认true
+		  // "title": "文档预览", //自定义标题
+		  "expire": 1, //预览链接有效期,单位分钟,默认永久有效
+		  // "limit": "1,3", //限制页数,如:“5”表示只显示前5页,“2,5”表示从第2页开始的5页,对pdf/doc/docx/ppt/pptx有效
+		  // "mtime": 1633093801, //文件修改时间戳(精确到秒)或修改时间(如:2021-10-01 21:10:01),值改变刷新缓存,实时预览
+		  // "referer": "", //读取http源文件时传入的referer值
+		  // "header": "", //读取http源文件时传入的header值,格式为JSON字符串
+		  // "ip": "", //限制ip预览,多个用","分割,支持*,如:192.168.*
+		  // "password": "", //口令,用户需要输入正确的口令,才能预览
+	  };
+	  //传入预览参数
+	  for (var a in ops) {
+		  url += "&" + a + "=" + encodeURIComponent(ops[a]);
+	  }
+
+    window.open(url, '_blank')
   } else {
     window.open('https://view.officeapps.live.com/op/view.aspx?src=' + encodeURIComponent(rowUrl), '_blank')
   }

+ 2 - 2
src/views/cw/invoice/InvoiceForm.vue

@@ -1307,8 +1307,8 @@
       },
       checkRate (row, rowIndex) {
         if (!this.commonJS.isEmpty(row.rate)) {
-          if (parseFloat(row.rate) < 1 || parseFloat(row.rate) > 100) {
-            this.$message.warning('“税率” 请填写 1 到 100 之间的数字,请重新输入')
+          if (parseFloat(row.rate) < 0 || parseFloat(row.rate) > 100) {
+            this.$message.warning('“税率” 请填写 0 到 100 之间的数字,请重新输入')
             row.rate = undefined
           }
         }

+ 2 - 2
src/views/cw/invoice/InvoiceFormTask.vue

@@ -1779,8 +1779,8 @@
 		  },
 		  checkRate(row, rowIndex) {
 			  if (!this.commonJS.isEmpty(row.rate)) {
-				  if (parseFloat(row.rate) < 1 || parseFloat(row.rate) > 100) {
-					  this.$message.warning('“税率” 请填写 1 到 100 之间的数字,请重新输入')
+				  if (parseFloat(row.rate) < 0 || parseFloat(row.rate) > 100) {
+					  this.$message.warning('“税率” 请填写 0 到 100 之间的数字,请重新输入')
 					  row.rate = undefined
 				  }
 			  }

+ 2 - 2
src/views/cw/invoice/InvoiceFormTaskInvalid.vue

@@ -1178,8 +1178,8 @@
       },
       checkRate (row, rowIndex) {
         if (!this.commonJS.isEmpty(row.rate)) {
-          if (parseFloat(row.rate) < 1 || parseFloat(row.rate) > 100) {
-            this.$message.warning('“税率” 请填写 1 到 100 之间的数字,请重新输入')
+          if (parseFloat(row.rate) < 0 || parseFloat(row.rate) > 100) {
+            this.$message.warning('“税率” 请填写 0 到 100 之间的数字,请重新输入')
             row.rate = undefined
           }
         }

+ 2 - 2
src/views/cw/invoice/InvoiceUpdateForm.vue

@@ -1409,8 +1409,8 @@
       },
       checkRate (row, rowIndex) {
         if (!this.commonJS.isEmpty(row.rate)) {
-          if (parseFloat(row.rate) < 1 || parseFloat(row.rate) > 100) {
-            this.$message.warning('“税率” 请填写 1 到 100 之间的数字,请重新输入')
+          if (parseFloat(row.rate) < 0 || parseFloat(row.rate) > 100) {
+            this.$message.warning('“税率” 请填写 0 到 100 之间的数字,请重新输入')
             row.rate = undefined
           }
         }

+ 2 - 2
src/views/cw/invoice/ProgramForm.vue

@@ -521,8 +521,8 @@
       },
       checkRate (row, rowIndex) {
         if (!this.commonJS.isEmpty(row.rate)) {
-          if (parseFloat(row.rate) < 1 || parseFloat(row.rate) > 100) {
-            this.$message.warning('“税率” 请填写 1 到 100 之间的数字,请重新输入')
+          if (parseFloat(row.rate) < 0 || parseFloat(row.rate) > 100) {
+            this.$message.warning('“税率” 请填写 0 到 100 之间的数字,请重新输入')
             row.rate = undefined
           }
         }

+ 24 - 6
src/views/cw/projectRecords/ProjectRecordsAddForm.vue

@@ -153,15 +153,33 @@
                   </el-form-item>
                 </el-col>
 				  <el-col :span="12">
-					  <el-form-item label="有无报告" prop="isHaveReport"
+					  <el-form-item prop="isHaveReport"
 									:rules="[
-                                 {required: true, message:'有无报告不能为空', trigger:'blur'}
-                  ]">
-						  <el-radio @change="preInvoice()" :disabled="isReport" v-model="inputForm.isHaveReport" v-for="item in $dictUtils.getDictList('is_have_report')" :label="item.value" style="margin-right: 20px">
-							  {{item.label}}</el-radio>
+                    {required: true, message:'有无报告不能为空', trigger:'blur'}
+                ]">
+						  <template #label>
+							  <el-tooltip placement="top">
+								  <!-- 使用插槽自定义内容 -->
+								  <template #content>
+									  <div>
+										  注:<br>
+										  选择“有报告”则开票时仅可通过报告进行开票。<br>
+										  选择“无报告”则开票时仅可通过项目进行开票,且该项目无法创建报告信息
+									  </div>
+								  </template>
+								  <span style="color: #F56C6C">有无报告</span>
+							  </el-tooltip>
+						  </template>
+
+						  <el-radio @change="preInvoice()" :disabled="isReport" v-model="inputForm.isHaveReport"
+									v-for="item in $dictUtils.getDictList('is_have_report')" :label="item.value"
+									style="margin-right: 20px">
+							  {{item.label}}
+						  </el-radio>
 					  </el-form-item>
 				  </el-col>
-                <el-col :span="12">
+
+				  <el-col :span="12">
                   <el-form-item label="报备类型" prop="reportType"
                                 :rules="[
                                  {required: true, message:'报备类型不能为空', trigger:'blur'}

+ 22 - 5
src/views/cw/projectRecords/ProjectRecordsForm.vue

@@ -156,12 +156,29 @@
                   </el-form-item>
                 </el-col>
 				  <el-col :span="12">
-					  <el-form-item label="有无报告" prop="isHaveReport"
+					  <el-form-item prop="isHaveReport"
 									:rules="[
-                                 {required: true, message:'有无报告不能为空', trigger:'blur'}
-                  ]">
-						  <el-radio v-model="inputForm.isHaveReport" v-for="item in $dictUtils.getDictList('is_have_report')" :label="item.value" style="margin-right: 20px">
-							  {{item.label}}</el-radio>
+                    {required: true, message:'有无报告不能为空', trigger:'blur'}
+                ]">
+						  <template #label>
+							  <el-tooltip placement="top">
+								  <!-- 使用插槽自定义内容 -->
+								  <template #content>
+									  <div>
+										  注:<br>
+										  选择“有报告”则开票时仅可通过报告进行开票。<br>
+										  选择“无报告”则开票时仅可通过项目进行开票,且该项目无法创建报告信息
+									  </div>
+								  </template>
+								  <span style="color: #F56C6C">有无报告</span>
+							  </el-tooltip>
+						  </template>
+
+						  <el-radio @change="preInvoice()" :disabled="isReport" v-model="inputForm.isHaveReport"
+									v-for="item in $dictUtils.getDictList('is_have_report')" :label="item.value"
+									style="margin-right: 20px">
+							  {{item.label}}
+						  </el-radio>
 					  </el-form-item>
 				  </el-col>
                 <el-col :span="12">

+ 10 - 1
src/views/dashboard/widgets/components/MyNoticePageList.vue

@@ -15,9 +15,18 @@
 		<el-table :data="dataList" style="width: 100%" height="480" border="inner" @sort-change="sortChangeHandle">
 			<el-table-column label="实例标题" prop="title" min-width="400px">
 				<template #default="scope">
-					<el-link  type="primary" :underline="false" @click="todo(scope.row)">{{scope.row.title}}</el-link>
+					<el-link type="primary" :underline="false" @click="todo(scope.row)">
+						<span v-if="scope.row.repetitionCount > 0" >
+							<span style="color: red; font-weight: bold;">【{{ scope.row.repetitionCount }}】</span>{{ scope.row.title }}
+						</span>
+						<span v-else>
+							{{ scope.row.title }}
+						</span>
+					</el-link>
 				</template>
 			</el-table-column>
+
+
 			<el-table-column
 				min-width="90px"
 				show-overflow-tooltip

+ 2 - 2
src/views/finance/invoice/InvoiceForm.vue

@@ -1223,8 +1223,8 @@
       },
       checkRate (row, rowIndex) {
         if (!this.commonJS.isEmpty(row.rate)) {
-          if (parseFloat(row.rate) < 1 || parseFloat(row.rate) > 100) {
-            this.$message.warning('“税率” 请填写 1 到 100 之间的数字,请重新输入')
+          if (parseFloat(row.rate) < 0 || parseFloat(row.rate) > 100) {
+            this.$message.warning('“税率” 请填写 0 到 100 之间的数字,请重新输入')
             row.rate = undefined
           }
         }

+ 27 - 26
src/views/finance/invoice/InvoiceFormTask.vue

@@ -1317,6 +1317,7 @@
         if (type === 'detail') {
           this.$refs.detailTable.insert().then((data) => {
             this.inputForm.financeInvoiceDetailDTOList.push(data)
+			  this.detailKey = Math.random()
           })
         }
         if (type === 'receivables') {
@@ -1435,30 +1436,30 @@
           }
         })
       },
-      checkNumber (row, rowIndex) {
-        if (!this.commonJS.isEmpty(row.number)) {
-          if (parseInt(row.number) > 99999999) {
-            this.$message.warning('“发票号” 不可以大于 8 位,请重新输入')
-            row.number = undefined
-            return
-          }
-          this.inputForm.financeInvoiceDetailDTOList.forEach((item, index) => {
-            if (rowIndex !== index) {
-              if (row.number === item.number) {
-                row.number = ''
-                this.$message.warning('“发票号” 已存在,请重新输入')
-                throw new Error()
-              }
-            }
-          })
-          this.financeInvoiceService.queryByNumber(row.number, row.id).then((data) => {
-            if (data === true) {
-              row.number = ''
-              this.$message.warning('“发票号” 已存在,请重新输入')
-            }
-          })
-        }
-      },
+		checkNumber(row, rowIndex) {
+			if (!this.commonJS.isEmpty(row.number)) {
+				if (parseInt(row.number) > 99999999) {
+					this.$message.warning('“发票号” 不可以大于 8 位,请重新输入')
+					row.number = undefined
+					return
+				}
+				this.inputForm.financeInvoiceDetailDTOList.forEach((item, index) => {
+					if (rowIndex !== index) {
+						if (row.number === item.number) {
+							row.number = ''
+							this.$message.warning('“发票号” 已存在,请重新输入')
+							throw new Error()
+						}
+					}
+				})
+				this.financeInvoiceService.queryByNumber(row.number, row.id).then((data) => {
+					if (data === true) {
+						row.number = ''
+						this.$message.warning('“发票号” 已存在,请重新输入')
+					}
+				})
+			}
+		},
       checkAccount (row, rowIndex) {
         if (this.commonJS.isEmpty(row.account)) {
           row.account = undefined
@@ -1468,8 +1469,8 @@
       },
       checkRate (row, rowIndex) {
         if (!this.commonJS.isEmpty(row.rate)) {
-          if (parseFloat(row.rate) < 1 || parseFloat(row.rate) > 100) {
-            this.$message.warning('“税率” 请填写 1 到 100 之间的数字,请重新输入')
+          if (parseFloat(row.rate) < 0 || parseFloat(row.rate) > 100) {
+            this.$message.warning('“税率” 请填写 0 到 100 之间的数字,请重新输入')
             row.rate = undefined
           }
         }

+ 2 - 2
src/views/finance/invoice/InvoiceFormTaskInvalid.vue

@@ -1154,8 +1154,8 @@
       },
       checkRate (row, rowIndex) {
         if (!this.commonJS.isEmpty(row.rate)) {
-          if (parseFloat(row.rate) < 1 || parseFloat(row.rate) > 100) {
-            this.$message.warning('“税率” 请填写 1 到 100 之间的数字,请重新输入')
+          if (parseFloat(row.rate) < 0 || parseFloat(row.rate) > 100) {
+            this.$message.warning('“税率” 请填写 0 到 100 之间的数字,请重新输入')
             row.rate = undefined
           }
         }

+ 2 - 2
src/views/finance/invoice/ProgramForm.vue

@@ -525,8 +525,8 @@
       },
       checkRate (row, rowIndex) {
         if (!this.commonJS.isEmpty(row.rate)) {
-          if (parseFloat(row.rate) < 1 || parseFloat(row.rate) > 100) {
-            this.$message.warning('“税率” 请填写 1 到 100 之间的数字,请重新输入')
+          if (parseFloat(row.rate) < 0 || parseFloat(row.rate) > 100) {
+            this.$message.warning('“税率” 请填写 0 到 100 之间的数字,请重新输入')
             row.rate = undefined
           }
         }

+ 8 - 1
src/views/flowable/task/NoticePageList.vue

@@ -42,7 +42,14 @@
               <vxe-column type="checkbox"  width="60px"></vxe-column>
               <vxe-column  title="实例标题" field="title" >
                 <template #default="scope">
-                  <el-link  type="primary" :underline="false" @click="todo(scope.row)">{{scope.row.title}}</el-link>
+					<el-link type="primary" :underline="false" @click="todo(scope.row)">
+						<span v-if="scope.row.repetitionCount > 0 && scope.row.type === '未读'" >
+							<span style="color: red; font-weight: bold;">【{{ scope.row.repetitionCount }}】</span>{{ scope.row.title }}
+						</span>
+						<span v-else>
+							{{ scope.row.title }}
+						</span>
+					</el-link>
                 </template>
               </vxe-column>
               <vxe-column  title="流程名称" field="taskName" > </vxe-column>

+ 2 - 2
src/views/generateForm/InvoiceUpdateGenerateForm.vue

@@ -671,8 +671,8 @@
 			},
 			checkRate(row, rowIndex) {
 				if (!this.commonJS.isEmpty(row.rate)) {
-					if (parseFloat(row.rate) < 1 || parseFloat(row.rate) > 100) {
-						this.$message.warning('“税率” 请填写 1 到 100 之间的数字,请重新输入')
+					if (parseFloat(row.rate) < 0 || parseFloat(row.rate) > 100) {
+						this.$message.warning('“税率” 请填写 0 到 100 之间的数字,请重新输入')
 						row.rate = undefined
 					}
 				}

+ 1 - 1
src/views/human/practice/register/RegistrationEditForm.vue

@@ -637,7 +637,7 @@
 				this.loading = true
 				registerService.downloadRegistrationTpl(this.inputForm.id).then((res) => {
 					// 将二进制流文件写入excel表,以下为重要步骤
-					this.$utils.downloadWord(res, '实习用户信息')
+					this.$utils.downloadWord(res, this.inputForm.name + '实习用户信息')
 					this.loading = false
 				}).catch(function (err) {
 					this.loading = false

+ 30 - 2
src/views/layout/UpdatePassword2.vue

@@ -71,11 +71,39 @@
 						{required: true, message: '原密码不能为空', trigger: 'blur'}
 					],
 					newPassword: [
-						{required: true, message: '新密码不能为空', trigger: 'blur'}
+						{required: true, message: '新密码不能为空', trigger: 'blur'},
+						{
+							validator: (rule, value, callback) => {
+								const passwordRegex = /^(?=(.*[A-Z]))(?=(.*[a-z]))(?=(.*\d))|(?=(.*[A-Z]))(?=(.*[a-z]))(?=(.*[!@#$%^&*.,]))|(?=(.*[A-Z]))(?=(.*\d))(?=(.*[!@#$%^&*.,]))|(?=(.*[a-z]))(?=(.*\d))(?=(.*[!@#$%^&*.,]))[A-Za-z\d!@#$%^&*.,]{8,20}$/;
+
+								if (!value) {
+									callback(new Error('新的密码不能为空'));
+								} else if (!passwordRegex.test(value)) {
+									callback(new Error('密码必须包含大写字母、小写字母、数字或特殊字符中的三种,且长度为8到20个字符'));
+								} else {
+									callback(); // 验证通过
+								}
+							},
+							trigger: 'blur'
+						}
 					],
 					confirmPassword: [
 						{required: true, message: '确认密码不能为空', trigger: 'blur'},
-						{validator: validateConfirmPassword, trigger: 'blur'}
+						{validator: validateConfirmPassword, trigger: 'blur'},
+						{
+							validator: (rule, value, callback) => {
+								const passwordRegex = /^(?=(.*[A-Z]))(?=(.*[a-z]))(?=(.*\d))|(?=(.*[A-Z]))(?=(.*[a-z]))(?=(.*[!@#$%^&*.,]))|(?=(.*[A-Z]))(?=(.*\d))(?=(.*[!@#$%^&*.,]))|(?=(.*[a-z]))(?=(.*\d))(?=(.*[!@#$%^&*.,]))[A-Za-z\d!@#$%^&*.,]{8,20}$/;
+
+								if (!value) {
+									callback(new Error('确认密码不能为空'));
+								} else if (!passwordRegex.test(value)) {
+									callback(new Error('密码必须包含大写字母、小写字母、数字或特殊字符中的三种,且长度为8到20个字符'));
+								} else {
+									callback(); // 验证通过
+								}
+							},
+							trigger: 'blur'
+						}
 					]
 				}
 			};

+ 44 - 4
src/views/sys/login/components/login-form.vue

@@ -140,8 +140,8 @@
 							<span v-else class="count" style="color: white">请等待 {{count}} s</span>
 						</el-button>
 					</el-form-item>
-					<el-form-item prop="newPassword">
-						<el-input type="password" placeholder="新密码" v-model="inputForm.newPassword"></el-input>
+					<el-form-item prop="newPassword" :error="passwordError">
+						<el-input type="password" placeholder="新密码" v-model="inputForm.newPassword" @input="validatePassword"></el-input>
 					</el-form-item>
 					<el-form-item prop="newPasswordAgain">
 						<el-input type="password" placeholder="确认密码" v-model="inputForm.newPasswordAgain"></el-input>
@@ -227,10 +227,38 @@ export default {
 					{required: true, message: '旧密码不能为空', trigger: 'blur'}
 				],
 				newPassword: [
-					{required: true, message: '新的密码不能为空', trigger: 'blur'}
+					{ required: true, message: '新的密码不能为空', trigger: 'blur' },
+					{
+						validator: (rule, value, callback) => {
+							const passwordRegex = /^(?=(.*[A-Z]))(?=(.*[a-z]))(?=(.*\d))|(?=(.*[A-Z]))(?=(.*[a-z]))(?=(.*[!@#$%^&*.,]))|(?=(.*[A-Z]))(?=(.*\d))(?=(.*[!@#$%^&*.,]))|(?=(.*[a-z]))(?=(.*\d))(?=(.*[!@#$%^&*.,]))[A-Za-z\d!@#$%^&*.,]{8,20}$/;
+
+							if (!value) {
+								callback(new Error('新的密码不能为空'));
+							} else if (!passwordRegex.test(value)) {
+								callback(new Error('密码必须包含大写字母、小写字母、数字或特殊字符中的三种,且长度为8到20个字符'));
+							} else {
+								callback(); // 验证通过
+							}
+						},
+						trigger: 'blur'
+					}
 				],
 				newPasswordAgain: [
-					{required: true, message: '再次输入的新密码不能为空', trigger: 'blur'}
+					{required: true, message: '再次输入的新密码不能为空', trigger: 'blur'},
+					{
+						validator: (rule, value, callback) => {
+							const passwordRegex = /^(?=(.*[A-Z]))(?=(.*[a-z]))(?=(.*\d))|(?=(.*[A-Z]))(?=(.*[a-z]))(?=(.*[!@#$%^&*.,]))|(?=(.*[A-Z]))(?=(.*\d))(?=(.*[!@#$%^&*.,]))|(?=(.*[a-z]))(?=(.*\d))(?=(.*[!@#$%^&*.,]))[A-Za-z\d!@#$%^&*.,]{8,20}$/;
+
+							if (!value) {
+								callback(new Error('确认密码不能为空'));
+							} else if (!passwordRegex.test(value)) {
+								callback(new Error('密码必须包含大写字母、小写字母、数字或特殊字符中的三种,且长度为8到20个字符'));
+							} else {
+								callback(); // 验证通过
+							}
+						},
+						trigger: 'blur'
+					}
 				]
 			},
 			captchaPath: "",
@@ -238,6 +266,7 @@ export default {
 			showPhoneCode: true,
 			count: '', // 初始化次数
 			timer: null,
+			passwordError: '', // 保存错误信息
 			isLoginDisabled: false, //登录按钮禁用状态
 		};
 	},
@@ -269,6 +298,17 @@ export default {
 		},
 	},
 	methods: {
+		// 验证密码的函数
+		validatePassword() {
+			const password = this.inputForm.newPassword;
+			const passwordRegex = /^(?=(.*[A-Z]))(?=(.*[a-z]))(?=(.*\d))|(?=(.*[A-Z]))(?=(.*[a-z]))(?=(.*[!@#$%^&*.,]))|(?=(.*[A-Z]))(?=(.*\d))(?=(.*[!@#$%^&*.,]))|(?=(.*[a-z]))(?=(.*\d))(?=(.*[!@#$%^&*.,]))[A-Za-z\d!@#$%^&*.,]{8,20}$/;
+
+			if (!passwordRegex.test(password)) {
+				this.passwordError = '密码必须包含大写字母、小写字母、数字或特殊字符中的三种,且长度为8到20个字符';
+			} else {
+				this.passwordError = ''; // 验证通过,清空错误信息
+			}
+		},
 		// 提交表单
 		async login() {
 			var checked = this.checked

+ 69 - 9
src/views/sys/user/UserInfo.vue

@@ -208,8 +208,9 @@
 							</el-form-item>
 						</el-form>
 					</el-tab-pane>
-					<el-tab-pane label="修改密码">
+					<!--<el-tab-pane label="修改密码">
 						<el-form
+							:rules="dataRule"
 							:model="pwdForm"
 							ref="pwdForm"
 							label-width="100px"
@@ -264,7 +265,7 @@
 								>
 							</el-form-item>
 						</el-form>
-					</el-tab-pane>
+					</el-tab-pane>-->
 					<!--<el-tab-pane label="我的日志">
 						<el-menu
 							default-active="1"
@@ -440,6 +441,46 @@ export default {
 				newPassword: "",
 				confirmNewPassword: "",
 			},
+			dataRule: {
+				password: [
+					{required: true, message: '原密码不能为空', trigger: 'blur'}
+				],
+				newPassword: [
+					{required: true, message: '新密码不能为空', trigger: 'blur'},
+					{
+						validator: (rule, value, callback) => {
+							const passwordRegex = /^(?=(.*[A-Z]))(?=(.*[a-z]))(?=(.*\d))|(?=(.*[A-Z]))(?=(.*[a-z]))(?=(.*[!@#$%^&*.,]))|(?=(.*[A-Z]))(?=(.*\d))(?=(.*[!@#$%^&*.,]))|(?=(.*[a-z]))(?=(.*\d))(?=(.*[!@#$%^&*.,]))[A-Za-z\d!@#$%^&*.,]{8,20}$/;
+
+							if (!value) {
+								callback(new Error('新的密码不能为空'));
+							} else if (!passwordRegex.test(value)) {
+								callback(new Error('密码必须包含大写字母、小写字母、数字或特殊字符中的三种,且长度为8到20个字符'));
+							} else {
+								callback(); // 验证通过
+							}
+						},
+						trigger: 'blur'
+					}
+				],
+				confirmNewPassword: [
+					{required: true, message: '确认密码不能为空', trigger: 'blur'},
+					{validator: validatePass2, trigger: 'blur'},
+					{
+						validator: (rule, value, callback) => {
+							const passwordRegex = /^(?=(.*[A-Z]))(?=(.*[a-z]))(?=(.*\d))|(?=(.*[A-Z]))(?=(.*[a-z]))(?=(.*[!@#$%^&*.,]))|(?=(.*[A-Z]))(?=(.*\d))(?=(.*[!@#$%^&*.,]))|(?=(.*[a-z]))(?=(.*\d))(?=(.*[!@#$%^&*.,]))[A-Za-z\d!@#$%^&*.,]{8,20}$/;
+
+							if (!value) {
+								callback(new Error('确认密码不能为空'));
+							} else if (!passwordRegex.test(value)) {
+								callback(new Error('密码必须包含大写字母、小写字母、数字或特殊字符中的三种,且长度为8到20个字符'));
+							} else {
+								callback(); // 验证通过
+							}
+						},
+						trigger: 'blur'
+					}
+				]
+			},
 			dataList: [],
 			tablePage: {
 				total: 0,
@@ -517,16 +558,35 @@ export default {
 		async submitPwdForm() {
 			console.log(this.pwdForm)
 			let valid = await this.$refs["pwdForm"].validate();
+			console.log(valid)
+
 			if (valid) {
 				const loading = this.$loading();
-				let data = await userService.saveInfo(this.pwdForm);
-				let { user } = await userService.info();
-				this.userInfo = user;
-				this.$TOOL.data.set("USER_INFO", user);
-				loading.close();
-				this.$message.success(data);
+
+				try {
+					let data = await userService.saveInfo(this.pwdForm); // 可能抛出错误的请求
+
+					// 更新用户信息
+					let { user } = await userService.info();
+					this.userInfo = user;
+					this.$TOOL.data.set("USER_INFO", user);
+					this.$message.success(data); // 成功信息提示
+
+				} catch (error) {
+					// 捕获请求中的异常
+					/*if (error.response && error.response.status === 400) {
+						// 使用后端返回的错误信息提示用户
+						this.$message.error(error.response.data); // 比如 "修改密码失败,旧密码错误!"
+					} else {
+						this.$message.error("请求失败,请稍后重试");
+						console.error("请求失败", error);
+					}*/
+				} finally {
+					loading.close(); // 确保 loading 状态关闭
+				}
 			}
-		},
+		}
+		,
 		// 获取数据列表
 		refreshList() {
 			this.loading = true;

+ 1 - 0
src/views/zs/reimbursement/info/ReimbursementForm.vue

@@ -2106,6 +2106,7 @@
 			}
 			//将购买方的名称中括号全部转换成英文进行比较
 			var buyerInformationBuyerName = data.BuyerInformationBuyerName.replace(/(/g, '(').replace(/)/g, ')')
+			buyerInformationBuyerName = buyerInformationBuyerName.replace(/\s+/g, '');
 			console.log(buyerInformationBuyerName)
 			if("中审众环会计师事务所(特殊普通合伙)江苏分所" !== buyerInformationBuyerName){
 				//删除上传的附件信息