Browse Source

新增角色页面地区,权限列表单选,角色重复提示

zhangrenyuan/feature-20250714163943-金币前端二期
ZhangYong 2 weeks ago
parent
commit
240f112f53
  1. 192
      src/views/permissions/permission.vue

192
src/views/permissions/permission.vue

@ -4,10 +4,11 @@ import ElementPlus from 'element-plus'
import { ElMessage, ElMessageBox } from 'element-plus'
import axios from 'axios'
import moment from 'moment'
import {InfoFilled, UserFilled} from '@element-plus/icons-vue'
import { InfoFilled, UserFilled } from '@element-plus/icons-vue'
import _ from 'lodash'
import request from '@/util/http'
import API from '@/util/http'
import { } from 'vue';
//
const tableData = ref([])
const roleData = ref([])
@ -44,8 +45,6 @@ const market = ref([])
const postiton = ref([])
//
const userAddObj = ref({})
//
const permissionAddObj = ref({})
//
const permissionAddVisible = ref(false)
// addMachineIdInput
@ -67,6 +66,7 @@ const addRole = ref({
grade: '',
market: ''
})
const addRoleMarket = ref([])
//
const permissionSelect = ref()
//
@ -273,7 +273,13 @@ const userAddInit = function () {
}
//
const permissionAddInit = function () {
permissionAddObj.value = {}
const addRole = ref({
roleName: '',
parentId: null,
checkedKeys: [],
grade: '',
market: ''
})
openPermissionAddVisible()
}
//
@ -600,8 +606,13 @@ const handleAddRole = async function () {
"market": addRole.value.market
}
})
console.log('成功了,看看addRole', addRole.value)
closePermissionAddVisible()
if (res.code == 200) {
ElMessage.success('角色' + addRole.value.roleName + '添加成功')
console.log('成功了,看看addRole', addRole.value)
closePermissionAddVisible()
} else {
ElMessage.error(res.msg)
}
} catch (error) {
console.log('请求失败', error)
console.log('失败,看看addRole', addRole.value);
@ -670,6 +681,37 @@ const getLists = async function () {
}
console.log('看看data', data.value)
console.log('parentID:', addRole.value.parentId, 'roleId:', roleId)
if (addRole.value.parentId) {
const result = await API({
url: '/general/roleMarket',
data: { id: addRole.value.parentId }
})
if (result.code == 200) {
if (typeof result.data === 'string' && result.data) {
addRoleMarket.value = result.data.split(',');
} else if (Array.isArray(result.data)) {
addRoleMarket.value = result.data
}
else {
addRoleMarket.value = [];
}
} else {
ElMessage.error('该上级角色无所属地区')
console.log('该上级角色无所属地区');
}
console.log('addRoleMarket.value', addRoleMarket.value);
} else {
if (typeof adminData.value.markets === 'string' && adminData.value.markets) {
addRoleMarket.value = adminData.value.markets.split(',');
} else if (Array.isArray(adminData.value.markets)) {
addRoleMarket.value = adminData.value.markets
}
else {
addRoleMarket.value = [];
}
}
} catch (error) {
console.log('请求失败', error)
}
@ -684,8 +726,8 @@ const handleMarketChange = (values) => {
//
addAdmin.value.market = ['总部'];
}
console.log('看看现在的地区',addAdmin.value.market);
console.log('看看现在的地区', addAdmin.value.market);
};
const includeHq = computed(() => {
const i = addAdmin.value.market.includes('总部')
@ -702,13 +744,59 @@ const EdithandleMarketChange = (values) => {
//
permissionEditObj.value.market = ['总部'];
}
console.log('看看现在的地区',permissionEditObj.value.market);
console.log('看看现在的地区', permissionEditObj.value.market);
};
const handleCheckChange = async (checkedNodes, checkedInfo) => {
const { checkedKeys, checkedNodes: allCheckedNodes } = checkedInfo;
//
if (allCheckedNodes.length === 0) return;
//
const node = allCheckedNodes[0];
//
const checked = checkedKeys.includes(node.id);
console.log('checkedInfo', checkedInfo);
console.log('node', node);
console.log('checked', checked);
if (checked) {
const newCheckedKeys = [...checkedInfo.checkedKeys];
console.log('初始选中项:', newCheckedKeys);
//
const uniqueKeys = [...new Set(newCheckedKeys)];
selectParentNodes(data.value, node.id, uniqueKeys);
console.log('包含父级的选中项:', uniqueKeys);
addRole.value.checkedKeys = uniqueKeys;
} else {
addRole.value.checkedKeys = checkedInfo.checkedKeys;
console.log('else');
}
};
const handleCheckChange = (checkedNodes, { checkedKeys }) => {
addRole.value.checkedKeys = checkedKeys;
}
const selectParentNodes = (treeData, nodeId, checkedKeys) => {
if (!Array.isArray(treeData)) return false;
for (const item of treeData) {
if (item.children && Array.isArray(item.children) && item.children.length > 0) {
const found = selectParentNodes(item.children, nodeId, checkedKeys);
if (found) {
//
if (!checkedKeys.includes(item.id)) {
checkedKeys.push(item.id);
}
return true;
}
}
if (item.id === nodeId) {
return true;
}
}
return false;
};
//
const menuTreeVisible = ref(false);
const currentRoleMenuTree = ref([]);
@ -742,7 +830,7 @@ const confirmResetPassword = async function () {
// markets
if (typeof adminData.value.markets === 'string' && adminData.value.markets) {
adminData.value.markets = adminData.value.markets.split(',');
}else if(Array.isArray(adminData.value.markets)){
} else if (Array.isArray(adminData.value.markets)) {
//
}
else {
@ -755,7 +843,7 @@ const confirmResetPassword = async function () {
//
if (adminData.value.markets.includes(currentRow.value.market) || adminData.value.markets[0] === '总部') {
console.log('符合条件,可以操作',adminData.value.markets.includes(currentRow.value.market) || adminData.value.markets[0] === '总部');
console.log('符合条件,可以操作', adminData.value.markets.includes(currentRow.value.market) || adminData.value.markets[0] === '总部');
const params = {
account: currentRow.value.account,
}
@ -790,54 +878,6 @@ const confirmResetPassword = async function () {
const cancelResetPassword = function () {
resetConfirmVisible.value = false
}
/*//用户密码重置
const resetPassword = function (row) {
console.log('adminData.value.markets', adminData.value.markets);
// markets
if (typeof adminData.value.markets === 'string' && adminData.value.markets) {
adminData.value.markets = adminData.value.markets.split(',');
} else {
adminData.value.markets = [];
}
if (adminData.value.markets.includes(row.market)||adminData.value.markets=='总部') {
console.log('符合条件,可以操作');
// thencatch
ElMessageBox.confirm(
`确认重置该账号密码?`,
'提示',
{
confirmButtonText: '确认',
cancelButtonText: '取消',
type: "warning",
lockScroll: false
}
).then(async () => {
//
try {
const res = await API({
url: '/admin/reset',
data: { account: row.account }
});
if (res.code === 200) {
ElMessage.success(res.data);
}
} catch (error) {
ElMessage.error('请求失败: ' + (error.message || error));
}
}).catch(() => {
//
console.log('用户取消了重置密码操作');
});
}else{
ElMessage.error('您没有修改'+row.market+'地区的用户密码的权限')
}
}*/
const Rolerules = reactive({
roleName: [
{ required: true, message: '请输入角色名称', trigger: 'blur' },
@ -849,6 +889,20 @@ const Rolerules = reactive({
grade: [
{ required: true, message: '请输入优先级', trigger: 'blur' },
{ pattern: /^[1-9]\d{0,2}$/, message: '优先级应为1-999的数字', trigger: 'blur' }
],
checkedKeys: [
{
required: true,
message: '请选择权限列表',
trigger: 'change', //
validator: (rule, value, callback) => {
if (value && value.length > 0) {
callback(); //
} else {
callback(new Error('请选择权限列表')); //
}
}
}
]
});
//
@ -1119,7 +1173,8 @@ onMounted(async function () {
<el-input v-model="permissionEditObj.adminName" placeholder="请输入用户名" style="width: 220px" disabled />
</el-form-item>
<el-form-item prop="market" label="所属地区:" clearable>
<el-select multiple v-model="permissionEditObj.market" placeholder="请选择所属地区" style="width: 440px" clearable @change="EdithandleMarketChange">
<el-select multiple v-model="permissionEditObj.market" placeholder="请选择所属地区" style="width: 440px" clearable
@change="EdithandleMarketChange">
<el-option v-for="item in market" :key="item" :label="item" :value="item" :disabled="EditincludeHq(item)" />
</el-select>
</el-form-item>
@ -1178,7 +1233,7 @@ onMounted(async function () {
</el-form-item>
<el-form-item prop="market" label="所属地区:" required>
<el-select v-model="addRole.market" placeholder="请选择所属地区" style="width: 240px" clearable>
<el-option v-for="item in market" :key="item" :label="item" :value="item" />
<el-option v-for="item in addRoleMarket" :key="item" :label="item" :value="item" />
</el-select>
</el-form-item>
<el-form-item prop="parentName" label="上级角色:">
@ -1213,13 +1268,12 @@ onMounted(async function () {
</template>
</el-dialog>
<!-- 重置密码确认弹窗 -->
<el-dialog
v-model="resetConfirmVisible" width="500px" :close-on-click-modal="false" :before-close="cancelResetPassword"
>
<el-dialog v-model="resetConfirmVisible" width="500px" :close-on-click-modal="false"
:before-close="cancelResetPassword">
<el-row>
<el-col :span="4" style="margin-top: 20px">
<el-icon class="dialog-icon" color="#10AEFF" size="50">
<InfoFilled/>
<InfoFilled />
</el-icon>
</el-col>
<el-col :span="20">

Loading…
Cancel
Save