✨ MK公开页、预结算体验优化、地图选址与认证密码规则完善
This commit is contained in:
+46
-18
@@ -143,7 +143,8 @@
|
||||
:status="oaSyncProgressStatus"
|
||||
:stroke-width="12"
|
||||
/>
|
||||
<div class="oa-sync-meta">
|
||||
<div class="oa-sync-meta" v-if="oaSyncStage === 'clear'">当前阶段:{{ oaSyncStageLabel }}</div>
|
||||
<div class="oa-sync-meta" v-else>
|
||||
当前阶段:{{ oaSyncStageLabel }},第 {{ oaSyncProgress.current || 0 }} / {{ oaSyncTotalPage }} 页
|
||||
</div>
|
||||
<div class="oa-sync-stats">
|
||||
@@ -177,6 +178,7 @@ import {
|
||||
getDeptTree,
|
||||
syncOaCompany,
|
||||
syncOaDepartment,
|
||||
clearNonTopDept,
|
||||
} from '@/api/system/dept';
|
||||
import { getLeaderList } from '@/api/system/user';
|
||||
import { getList as getCustomerArchiveList } from '@/api/vehicle/customer-archive';
|
||||
@@ -215,6 +217,7 @@ export default {
|
||||
oaSyncCancelled: false,
|
||||
oaSyncStatus: 'running',
|
||||
oaSyncStage: 'company',
|
||||
oaSyncClearNonTop: false,
|
||||
oaSyncController: null,
|
||||
oaSyncProgress: {
|
||||
current: 0,
|
||||
@@ -287,8 +290,9 @@ export default {
|
||||
return;
|
||||
}
|
||||
const parentId = this.normalizeParentId(this.form?.parentId);
|
||||
// 顶级组织不选择上级时,编码不依赖上级编码
|
||||
if (!parentId) {
|
||||
callback(new Error('请先选择上级组织'));
|
||||
callback();
|
||||
return;
|
||||
}
|
||||
if (!this.parentDept || String(this.parentDept.id) !== String(parentId)) {
|
||||
@@ -429,13 +433,6 @@ export default {
|
||||
props: {
|
||||
label: 'title',
|
||||
},
|
||||
rules: [
|
||||
{
|
||||
required: true,
|
||||
message: '请选择上级组织',
|
||||
trigger: 'click',
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
label: '所属租户',
|
||||
@@ -520,6 +517,9 @@ export default {
|
||||
return '自动同步组织';
|
||||
},
|
||||
oaSyncStageLabel() {
|
||||
if (this.oaSyncStage === 'clear') {
|
||||
return '清除非顶级组织';
|
||||
}
|
||||
return this.oaSyncStage === 'department' ? '同步部门' : '同步公司';
|
||||
},
|
||||
oaSyncTotalPage() {
|
||||
@@ -555,21 +555,34 @@ export default {
|
||||
},
|
||||
methods: {
|
||||
handleOaOrgSync() {
|
||||
this.$confirm('确定从OA先同步公司、再同步部门?', '提示', {
|
||||
confirmButtonText: '确定',
|
||||
cancelButtonText: '取消',
|
||||
type: 'warning',
|
||||
}).then(() => {
|
||||
this.startOaOrgSync();
|
||||
});
|
||||
this.$confirm(
|
||||
'是否清除非顶级组织?选择“是”将先删除顶级以外的组织后再同步;选择“否”则直接同步。',
|
||||
'提示',
|
||||
{
|
||||
confirmButtonText: '是',
|
||||
cancelButtonText: '否',
|
||||
distinguishCancelAndClose: true,
|
||||
closeOnClickModal: false,
|
||||
type: 'warning',
|
||||
}
|
||||
)
|
||||
.then(() => {
|
||||
this.startOaOrgSync(true);
|
||||
})
|
||||
.catch(action => {
|
||||
if (action === 'cancel') {
|
||||
this.startOaOrgSync(false);
|
||||
}
|
||||
});
|
||||
},
|
||||
startOaOrgSync() {
|
||||
startOaOrgSync(clearNonTop) {
|
||||
this.oaSyncLoading = true;
|
||||
this.oaSyncVisible = true;
|
||||
this.oaSyncRunning = true;
|
||||
this.oaSyncCancelled = false;
|
||||
this.oaSyncStatus = 'running';
|
||||
this.oaSyncStage = 'company';
|
||||
this.oaSyncClearNonTop = !!clearNonTop;
|
||||
this.oaSyncStage = clearNonTop ? 'clear' : 'company';
|
||||
this.oaSyncController = new AbortController();
|
||||
this.oaSyncProgress = {
|
||||
current: 0,
|
||||
@@ -607,6 +620,14 @@ export default {
|
||||
},
|
||||
async runOaOrgSyncPages() {
|
||||
try {
|
||||
if (this.oaSyncClearNonTop) {
|
||||
this.oaSyncStage = 'clear';
|
||||
await clearNonTopDept(this.oaSyncController?.signal);
|
||||
if (this.oaSyncCancelled) {
|
||||
this.oaSyncStatus = 'cancelled';
|
||||
return;
|
||||
}
|
||||
}
|
||||
this.oaSyncStage = 'company';
|
||||
await this.runOaOrgSyncStage(syncOaCompany);
|
||||
if (this.oaSyncCancelled) {
|
||||
@@ -821,6 +842,11 @@ export default {
|
||||
.filter(Boolean);
|
||||
return result.length ? result.join('、') : '-';
|
||||
},
|
||||
normalizeTopParent(row) {
|
||||
if (!this.normalizeParentId(row?.parentId)) {
|
||||
row.parentId = 0;
|
||||
}
|
||||
},
|
||||
isRootDept(row) {
|
||||
return row && (row.parentId === 0 || String(row.parentId) === '0');
|
||||
},
|
||||
@@ -836,6 +862,7 @@ export default {
|
||||
row.tenantId = row.tenantId || this.userInfo.tenantId || website.tenantId;
|
||||
row.deptCode = String(row.deptCode || '').trim();
|
||||
row.leaderId = func.join(row.leaderId);
|
||||
this.normalizeTopParent(row);
|
||||
if (Number(row.deptCategory) === 6 && !row.carrierCustomerId) {
|
||||
this.$message.warning('请选择承运商');
|
||||
loading();
|
||||
@@ -865,6 +892,7 @@ export default {
|
||||
row.tenantId = row.tenantId || this.userInfo.tenantId || website.tenantId;
|
||||
row.deptCode = String(row.deptCode || '').trim();
|
||||
row.leaderId = func.join(row.leaderId);
|
||||
this.normalizeTopParent(row);
|
||||
if (Number(row.deptCategory) === 6 && !row.carrierCustomerId) {
|
||||
this.$message.warning('请选择承运商');
|
||||
loading();
|
||||
|
||||
@@ -205,7 +205,7 @@
|
||||
type="password"
|
||||
show-password
|
||||
autocomplete="new-password"
|
||||
placeholder="请输入登录密码"
|
||||
placeholder="大于8位,含字母、数字、特殊字符.!@#$%^&*"
|
||||
/>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
@@ -332,7 +332,12 @@
|
||||
</el-col>
|
||||
<el-col :span="24">
|
||||
<el-form-item label="新密码" prop="password">
|
||||
<el-input v-model="passwordForm.password" type="password" show-password />
|
||||
<el-input
|
||||
v-model="passwordForm.password"
|
||||
type="password"
|
||||
show-password
|
||||
placeholder="大于8位,含字母、数字、特殊字符.!@#$%^&*"
|
||||
/>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="24">
|
||||
@@ -424,6 +429,7 @@ import { mapGetters } from 'vuex';
|
||||
import { h } from 'vue';
|
||||
import { getToken } from '@/utils/auth';
|
||||
import { downloadXls } from '@/utils/util';
|
||||
import { validateLoginPassword } from '@/utils/validate';
|
||||
import NProgress from 'nprogress';
|
||||
import 'nprogress/nprogress.css';
|
||||
import func from '@/utils/func';
|
||||
@@ -487,8 +493,7 @@ export default {
|
||||
passwordForm: {},
|
||||
passwordRules: {
|
||||
password: [
|
||||
{ required: true, message: '请输入新密码', trigger: 'blur' },
|
||||
{ min: 6, max: 32, message: '密码长度在6到32个字符', trigger: 'blur' },
|
||||
{ required: true, validator: validateLoginPassword, trigger: 'blur' },
|
||||
],
|
||||
password2: [
|
||||
{ required: true, message: '请再次输入新密码', trigger: 'blur' },
|
||||
@@ -497,6 +502,7 @@ export default {
|
||||
},
|
||||
userRules: {
|
||||
account: [{ required: true, message: '请输入账号名', trigger: 'blur' }],
|
||||
password: [{ required: true, validator: validateLoginPassword, trigger: 'blur' }],
|
||||
realName: [{ required: true, message: '请输入姓名', trigger: 'blur' }],
|
||||
phone: [{ required: true, message: '请输入手机号', trigger: 'blur' }],
|
||||
deptId: [{ required: true, message: '请选择所属组织', trigger: 'change' }],
|
||||
|
||||
@@ -91,7 +91,7 @@
|
||||
<el-input
|
||||
v-model="passwordForm.newPassword"
|
||||
type="password"
|
||||
placeholder="请输入新密码"
|
||||
placeholder="大于8位,含字母、数字、特殊字符.!@#$%^&*"
|
||||
show-password
|
||||
>
|
||||
<template #prefix>
|
||||
@@ -143,6 +143,7 @@
|
||||
import { getUserInfo, updateInfo, updatePassword } from '@/api/system/user';
|
||||
import md5 from 'js-md5';
|
||||
import { sensitive } from '@/utils/sensitive';
|
||||
import { isValidLoginPassword, LOGIN_PASSWORD_RULE_MESSAGE } from '@/utils/validate';
|
||||
import {
|
||||
Plus,
|
||||
Bell,
|
||||
@@ -259,6 +260,18 @@ export default {
|
||||
},
|
||||
// 提交密码修改
|
||||
submitPassword() {
|
||||
if (!this.passwordForm.newPassword || !this.passwordForm.newPassword1) {
|
||||
this.$message.warning('请输入新密码和确认密码');
|
||||
return;
|
||||
}
|
||||
if (this.passwordForm.newPassword !== this.passwordForm.newPassword1) {
|
||||
this.$message.warning('两次输入的新密码不一致');
|
||||
return;
|
||||
}
|
||||
if (!isValidLoginPassword(this.passwordForm.newPassword)) {
|
||||
this.$message.warning(LOGIN_PASSWORD_RULE_MESSAGE);
|
||||
return;
|
||||
}
|
||||
this.loading = true;
|
||||
updatePassword(
|
||||
md5(this.passwordForm.oldPassword),
|
||||
|
||||
Reference in New Issue
Block a user