Commit 28075edd authored by 沈翠玲's avatar 沈翠玲

账号管理-重置密码和修改密码

parent 53d70e1e
<template> <template>
<el-dialog v-model="dialogVisible" title="修改密码" width="500px" draggable> <el-dialog v-model="dialogVisible" title="修改密码" width="500px" draggable>
<span>This is Password</span> <span>新密码:<el-input v-model="form.password" placeholder="请输入新密码" /></span>
<template #footer> <template #footer>
<span class="dialog-footer"> <span class="dialog-footer">
<el-button @click="dialogVisible = false">取消</el-button> <el-button @click="dialogVisible = false">取消</el-button>
<el-button type="primary" @click="dialogVisible = false">确认</el-button> <el-button type="primary" @click="submitForm">确认</el-button>
</span> </span>
</template> </template>
</el-dialog> </el-dialog>
...@@ -12,11 +12,41 @@ ...@@ -12,11 +12,41 @@
<script setup> <script setup>
import { ref } from 'vue'; import { ref } from 'vue';
import { editPassword } from '@/api/user';
import { ElMessage } from 'element-plus';
import { useRouter } from 'vue-router';
import { useUserStore } from '@/stores/modules/user';
const { userInfo } = useUserStore();
const userStore = useUserStore();
import { LOGIN_URL } from '@/config';
const router = useRouter();
const form = ref({
password: ''
});
const dialogVisible = ref(false); const dialogVisible = ref(false);
const openDialog = () => { const openDialog = () => {
dialogVisible.value = true; dialogVisible.value = true;
}; };
const submitForm = async () => {
editPassword({
id: userInfo.id,
password: form.value.password
}).then(async res => {
if (res.success) {
ElMessage({
type: 'success',
message: '修改密码成功!',
plain: true,
});
dialogVisible.value = false
await userStore.logout();
// 重定向到登陆页
router.replace(LOGIN_URL);
}
})
}
defineExpose({ openDialog }); defineExpose({ openDialog });
</script> </script>
...@@ -15,11 +15,6 @@ ...@@ -15,11 +15,6 @@
<el-input v-model="form.phone" placeholder="请输入手机号" clearable /> <el-input v-model="form.phone" placeholder="请输入手机号" clearable />
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="24">
<el-form-item class="w-full" label="密码" prop="password">
<el-input v-model="form.password" placeholder="请输入密码" clearable />
</el-form-item>
</el-col>
<el-col :span="24"> <el-col :span="24">
<el-form-item class="w-full" label="用户名称" prop="username"> <el-form-item class="w-full" label="用户名称" prop="username">
<el-input v-model="form.username" placeholder="请输入用户名称" clearable /> <el-input v-model="form.username" placeholder="请输入用户名称" clearable />
...@@ -99,7 +94,6 @@ ...@@ -99,7 +94,6 @@
const form = ref({ const form = ref({
username: '', username: '',
roles: [], roles: [],
password: '',
phone: '', phone: '',
departmentId: null, departmentId: null,
tenant: null, tenant: null,
...@@ -120,7 +114,6 @@ ...@@ -120,7 +114,6 @@
}; };
const rules = ref({ const rules = ref({
username: { required: true, message: '请输入用户名称', trigger: 'blur' }, username: { required: true, message: '请输入用户名称', trigger: 'blur' },
password: { required: true, message: '请输入密码', trigger: 'blur' },
phone: [ phone: [
{ required: true, message: '请输入手机号', trigger: 'blur' }, { required: true, message: '请输入手机号', trigger: 'blur' },
{ validator: validatePhone, trigger: 'blur' }, { validator: validatePhone, trigger: 'blur' },
...@@ -164,7 +157,6 @@ ...@@ -164,7 +157,6 @@
form.value = { form.value = {
username: '', username: '',
roles: [], roles: [],
password: '',
phone: '', phone: '',
departmentId: null, departmentId: null,
tenant: null, tenant: null,
......
...@@ -25,7 +25,7 @@ ...@@ -25,7 +25,7 @@
import { Delete, Edit, Plus } from '@element-plus/icons-vue'; import { Delete, Edit, Plus } from '@element-plus/icons-vue';
import { reactive, ref } from 'vue'; import { reactive, ref } from 'vue';
import { ElButton, ElMessageBox, ElMessage, ElTag } from 'element-plus'; import { ElButton, ElMessageBox, ElMessage, ElTag } from 'element-plus';
import { getUserPage, saveUser, deleteUsers } from '@/api/user'; import { getUserPage, setStatus, deleteUsers, restPassword } from '@/api/user';
import { useDict } from '@/hooks/useDict'; import { useDict } from '@/hooks/useDict';
import { onMounted } from 'vue'; import { onMounted } from 'vue';
import { getTenantPage } from '@/api/tenant'; import { getTenantPage } from '@/api/tenant';
...@@ -53,6 +53,7 @@ import { getdepartmentTree } from '@/api/departmentManage'; ...@@ -53,6 +53,7 @@ import { getdepartmentTree } from '@/api/departmentManage';
}, },
field: 'tenantNames', field: 'tenantNames',
enum: Tenantlist, enum: Tenantlist,
width: 120,
search: { el: 'select', props: { filterable: true }, key: 'tenant', labelWidth: 85 }, search: { el: 'select', props: { filterable: true }, key: 'tenant', labelWidth: 85 },
fieldNames: { label: 'name', value: 'id' }, fieldNames: { label: 'name', value: 'id' },
title: '调解中心' title: '调解中心'
...@@ -66,6 +67,7 @@ import { getdepartmentTree } from '@/api/departmentManage'; ...@@ -66,6 +67,7 @@ import { getdepartmentTree } from '@/api/departmentManage';
); );
}, },
}, },
width: 120,
field: 'role', field: 'role',
enum: Rolelist, enum: Rolelist,
search: { el: 'select', props: { filterable: true }, key: 'roleCode', labelWidth: 85 }, search: { el: 'select', props: { filterable: true }, key: 'roleCode', labelWidth: 85 },
...@@ -116,7 +118,7 @@ import { getdepartmentTree } from '@/api/departmentManage'; ...@@ -116,7 +118,7 @@ import { getdepartmentTree } from '@/api/departmentManage';
{ {
field: 'action', field: 'action',
title: '操作', title: '操作',
width: 200, width: 260,
fixed: 'right', fixed: 'right',
slots: { slots: {
default: ({ row }) => { default: ({ row }) => {
...@@ -128,6 +130,9 @@ import { getdepartmentTree } from '@/api/departmentManage'; ...@@ -128,6 +130,9 @@ import { getdepartmentTree } from '@/api/departmentManage';
<ElButton link type="primary" icon={Edit} onClick={() => handleDisable(row)}> <ElButton link type="primary" icon={Edit} onClick={() => handleDisable(row)}>
{row.status == 'enable' ? '禁用' : '启用'} {row.status == 'enable' ? '禁用' : '启用'}
</ElButton> </ElButton>
<ElButton link type="primary" onClick={() => handleRefresh(row)}>
重置密码
</ElButton>
</> </>
); );
}, },
...@@ -135,7 +140,27 @@ import { getdepartmentTree } from '@/api/departmentManage'; ...@@ -135,7 +140,27 @@ import { getdepartmentTree } from '@/api/departmentManage';
}, },
], ],
}); });
const handleRefresh = async (row) => {
await ElMessageBox.confirm(
`是否确认重置该用户的密码?`,
'提示',
{
confirmButtonText: '确认',
cancelButtonText: '取消',
type: 'warning',
}
);
// 修改的状态
await restPassword({
id: row.id
});
ElMessage({
type: 'success',
message: `重置成功!`,
plain: true,
});
}
const handleDelete = async () => { const handleDelete = async () => {
const list = proTable.value.element.getCheckboxRecords(); const list = proTable.value.element.getCheckboxRecords();
if (list.length) { if (list.length) {
...@@ -170,8 +195,8 @@ import { getdepartmentTree } from '@/api/departmentManage'; ...@@ -170,8 +195,8 @@ import { getdepartmentTree } from '@/api/departmentManage';
// 修改的状态 // 修改的状态
const status = row.status === 'enable' ? 'disable' : 'enable'; const status = row.status === 'enable' ? 'disable' : 'enable';
await saveUser({ await setStatus({
...row, id: row.id,
status, status,
}); });
......
...@@ -15,11 +15,6 @@ ...@@ -15,11 +15,6 @@
<el-input v-model="form.phone" placeholder="请输入手机号" /> <el-input v-model="form.phone" placeholder="请输入手机号" />
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="24">
<el-form-item class="w-full" label="密码" prop="password">
<el-input v-model="form.password" placeholder="请输入密码" />
</el-form-item>
</el-col>
<el-col :span="24"> <el-col :span="24">
<el-form-item class="w-full" label="用户名称" prop="username"> <el-form-item class="w-full" label="用户名称" prop="username">
<el-input v-model="form.username" placeholder="请输入用户名称" /> <el-input v-model="form.username" placeholder="请输入用户名称" />
...@@ -46,7 +41,7 @@ ...@@ -46,7 +41,7 @@
<script setup> <script setup>
import { computed } from 'vue'; import { computed } from 'vue';
import { ref } from 'vue'; import { ref } from 'vue';
import { saveLeaderGroup } from '@/api/user'; import { saveLeaderGroup, saveUser } from '@/api/user';
import { getDefualtRoles } from '@/api/role'; import { getDefualtRoles } from '@/api/role';
import { ElMessage } from 'element-plus'; import { ElMessage } from 'element-plus';
...@@ -56,7 +51,6 @@ ...@@ -56,7 +51,6 @@
const loading = ref(false); const loading = ref(false);
const form = ref({ const form = ref({
username: '', username: '',
password: '',
phone: '', phone: '',
status: 'enable', status: 'enable',
}); });
...@@ -73,7 +67,6 @@ ...@@ -73,7 +67,6 @@
}; };
const rules = ref({ const rules = ref({
username: { required: true, message: '请输入用户名称', trigger: 'blur' }, username: { required: true, message: '请输入用户名称', trigger: 'blur' },
password: { required: true, message: '请输入密码', trigger: 'blur' },
phone: [ phone: [
{ required: true, message: '请输入手机号', trigger: 'blur' }, { required: true, message: '请输入手机号', trigger: 'blur' },
{ validator: validatePhone, trigger: 'blur' }, { validator: validatePhone, trigger: 'blur' },
...@@ -88,9 +81,11 @@ ...@@ -88,9 +81,11 @@
try { try {
await formRef.value.validate(); await formRef.value.validate();
loading.value = true; loading.value = true;
if (isEdit.value) {
await saveUser(form.value)
} else {
await saveLeaderGroup({...form.value, role: 'legal_affairs_commissioner'}); await saveLeaderGroup({...form.value, role: 'legal_affairs_commissioner'});
}
ElMessage({ ElMessage({
type: 'success', type: 'success',
message: isEdit.value ? '修改成功!' : '添加成功!', message: isEdit.value ? '修改成功!' : '添加成功!',
...@@ -106,7 +101,6 @@ ...@@ -106,7 +101,6 @@
form.value = { form.value = {
username: '', username: '',
roles: [], roles: [],
password: '',
phone: '', phone: '',
status: 'enable', status: 'enable',
}; };
......
...@@ -25,7 +25,7 @@ ...@@ -25,7 +25,7 @@
import { Delete, Edit, Plus } from '@element-plus/icons-vue'; import { Delete, Edit, Plus } from '@element-plus/icons-vue';
import { reactive, ref } from 'vue'; import { reactive, ref } from 'vue';
import { ElButton, ElMessageBox, ElMessage, ElTag } from 'element-plus'; import { ElButton, ElMessageBox, ElMessage, ElTag } from 'element-plus';
import { getleaderGroupPage, saveLeaderGroup, batchDeleteByIds } from '@/api/user'; import { getleaderGroupPage, setStatus, batchDeleteByIds, restPassword } from '@/api/user';
import { useDict } from '@/hooks/useDict'; import { useDict } from '@/hooks/useDict';
import { onMounted } from 'vue'; import { onMounted } from 'vue';
import { getTenantPage } from '@/api/tenant'; import { getTenantPage } from '@/api/tenant';
...@@ -76,7 +76,7 @@ ...@@ -76,7 +76,7 @@
{ {
field: 'action', field: 'action',
title: '操作', title: '操作',
width: 200, width: 260,
fixed: 'right', fixed: 'right',
slots: { slots: {
default: ({ row }) => { default: ({ row }) => {
...@@ -88,6 +88,9 @@ ...@@ -88,6 +88,9 @@
<ElButton link type="primary" icon={Edit} onClick={() => handleDisable(row)}> <ElButton link type="primary" icon={Edit} onClick={() => handleDisable(row)}>
{row.staff.status == 'enable' ? '禁用' : '启用'} {row.staff.status == 'enable' ? '禁用' : '启用'}
</ElButton> </ElButton>
<ElButton link type="primary" onClick={() => handleRefresh(row)}>
重置密码
</ElButton>
</> </>
); );
}, },
...@@ -130,8 +133,8 @@ ...@@ -130,8 +133,8 @@
// 修改的状态 // 修改的状态
const status = row.staff.status === 'enable' ? 'disable' : 'enable'; const status = row.staff.status === 'enable' ? 'disable' : 'enable';
await saveLeaderGroup({ await setStatus({
...row.staff, id: row.staff.id,
status status
}); });
row.staff.status = status; row.staff.status = status;
...@@ -141,6 +144,27 @@ ...@@ -141,6 +144,27 @@
plain: true, plain: true,
}); });
}; };
const handleRefresh = async (row) => {
await ElMessageBox.confirm(
`是否确认重置该用户的密码?`,
'提示',
{
confirmButtonText: '确认',
cancelButtonText: '取消',
type: 'warning',
}
);
// 修改的状态
await restPassword({
id: row.staff.id
});
ElMessage({
type: 'success',
message: `重置成功!`,
plain: true,
});
}
const query = () => proTable.value?.search(); const query = () => proTable.value?.search();
......
...@@ -15,11 +15,6 @@ ...@@ -15,11 +15,6 @@
<el-input v-model="form.phone" placeholder="请输入手机号" /> <el-input v-model="form.phone" placeholder="请输入手机号" />
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="24">
<el-form-item class="w-full" label="密码" prop="password">
<el-input v-model="form.password" placeholder="请输入密码" />
</el-form-item>
</el-col>
<el-col :span="24"> <el-col :span="24">
<el-form-item class="w-full" label="用户名称" prop="username"> <el-form-item class="w-full" label="用户名称" prop="username">
<el-input v-model="form.username" placeholder="请输入用户名称" /> <el-input v-model="form.username" placeholder="请输入用户名称" />
...@@ -46,7 +41,7 @@ ...@@ -46,7 +41,7 @@
<script setup> <script setup>
import { computed } from 'vue'; import { computed } from 'vue';
import { ref } from 'vue'; import { ref } from 'vue';
import { saveLeaderGroup } from '@/api/user'; import { saveLeaderGroup,saveUser } from '@/api/user';
import { getDefualtRoles } from '@/api/role'; import { getDefualtRoles } from '@/api/role';
import { ElMessage } from 'element-plus'; import { ElMessage } from 'element-plus';
...@@ -56,7 +51,6 @@ ...@@ -56,7 +51,6 @@
const loading = ref(false); const loading = ref(false);
const form = ref({ const form = ref({
username: '', username: '',
password: '',
phone: '', phone: '',
status: 'enable', status: 'enable',
}); });
...@@ -73,7 +67,6 @@ ...@@ -73,7 +67,6 @@
}; };
const rules = ref({ const rules = ref({
username: { required: true, message: '请输入用户名称', trigger: 'blur' }, username: { required: true, message: '请输入用户名称', trigger: 'blur' },
password: { required: true, message: '请输入密码', trigger: 'blur' },
phone: [ phone: [
{ required: true, message: '请输入手机号', trigger: 'blur' }, { required: true, message: '请输入手机号', trigger: 'blur' },
{ validator: validatePhone, trigger: 'blur' }, { validator: validatePhone, trigger: 'blur' },
...@@ -88,9 +81,11 @@ ...@@ -88,9 +81,11 @@
try { try {
await formRef.value.validate(); await formRef.value.validate();
loading.value = true; loading.value = true;
if (isEdit.value) {
await saveUser(form.value)
} else {
await saveLeaderGroup({...form.value, role: 'risk_control_commissioner'}); await saveLeaderGroup({...form.value, role: 'risk_control_commissioner'});
}
ElMessage({ ElMessage({
type: 'success', type: 'success',
message: isEdit.value ? '修改成功!' : '添加成功!', message: isEdit.value ? '修改成功!' : '添加成功!',
...@@ -106,7 +101,6 @@ ...@@ -106,7 +101,6 @@
form.value = { form.value = {
username: '', username: '',
roles: [], roles: [],
password: '',
phone: '', phone: '',
status: 'enable', status: 'enable',
}; };
......
...@@ -25,7 +25,7 @@ ...@@ -25,7 +25,7 @@
import { Delete, Edit, Plus } from '@element-plus/icons-vue'; import { Delete, Edit, Plus } from '@element-plus/icons-vue';
import { reactive, ref } from 'vue'; import { reactive, ref } from 'vue';
import { ElButton, ElMessageBox, ElMessage, ElTag } from 'element-plus'; import { ElButton, ElMessageBox, ElMessage, ElTag } from 'element-plus';
import { getleaderGroupPage, saveLeaderGroup, batchDeleteByIds } from '@/api/user'; import { getleaderGroupPage, setStatus, batchDeleteByIds, restPassword } from '@/api/user';
import { useDict } from '@/hooks/useDict'; import { useDict } from '@/hooks/useDict';
import { onMounted } from 'vue'; import { onMounted } from 'vue';
import { getTenantPage } from '@/api/tenant'; import { getTenantPage } from '@/api/tenant';
...@@ -76,7 +76,7 @@ ...@@ -76,7 +76,7 @@
{ {
field: 'action', field: 'action',
title: '操作', title: '操作',
width: 200, width: 260,
fixed: 'right', fixed: 'right',
slots: { slots: {
default: ({ row }) => { default: ({ row }) => {
...@@ -88,6 +88,9 @@ ...@@ -88,6 +88,9 @@
<ElButton link type="primary" icon={Edit} onClick={() => handleDisable(row)}> <ElButton link type="primary" icon={Edit} onClick={() => handleDisable(row)}>
{row.staff.status == 'enable' ? '禁用' : '启用'} {row.staff.status == 'enable' ? '禁用' : '启用'}
</ElButton> </ElButton>
<ElButton link type="primary" onClick={() => handleRefresh(row)}>
重置密码
</ElButton>
</> </>
); );
}, },
...@@ -130,8 +133,8 @@ ...@@ -130,8 +133,8 @@
// 修改的状态 // 修改的状态
const status = row.staff.status === 'enable' ? 'disable' : 'enable'; const status = row.staff.status === 'enable' ? 'disable' : 'enable';
await saveLeaderGroup({ await setStatus({
...row.staff, id: row.staff.id,
status status
}); });
row.staff.status = status; row.staff.status = status;
...@@ -141,6 +144,27 @@ ...@@ -141,6 +144,27 @@
plain: true, plain: true,
}); });
}; };
const handleRefresh = async (row) => {
await ElMessageBox.confirm(
`是否确认重置该用户的密码?`,
'提示',
{
confirmButtonText: '确认',
cancelButtonText: '取消',
type: 'warning',
}
);
// 修改的状态
await restPassword({
id: row.staff.id
});
ElMessage({
type: 'success',
message: `重置成功!`,
plain: true,
});
}
const query = () => proTable.value?.search(); const query = () => proTable.value?.search();
......
...@@ -55,9 +55,9 @@ export default defineConfig(({ command, mode }) => { ...@@ -55,9 +55,9 @@ export default defineConfig(({ command, mode }) => {
port: VITE_PORT, port: VITE_PORT,
proxy: { proxy: {
'/api': { '/api': {
target: 'http://192.168.31.189:8080', // target: 'http://192.168.31.189:8080',
// target: 'http://192.168.31.128:8080', // target: 'http://192.168.31.128:8080',
// target: 'http://8.152.205.9:8080', target: 'http://8.152.205.9:8080',
changeOrigin: true, changeOrigin: true,
rewrite: (path) => path.replace(/^\/api/, ''), rewrite: (path) => path.replace(/^\/api/, ''),
}, },
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment