政务管理

This commit is contained in:
于晏彭 2023-03-15 09:50:55 +08:00
parent c5383269ee
commit da6f266b45
6 changed files with 314 additions and 86 deletions

View File

@ -23,7 +23,7 @@ export const editUser = (params: { id: string }) => {
}; };
// * 删除用户 // * 删除用户
export const deleteUser = (params: { id: string }) => { export const deleteUser = (params: { configId: string }) => {
return http.post(PORT1 + `/xmgl/systemConfig/delete`, params); return http.post(PORT1 + `/xmgl/systemConfig/delete`, params);
}; };
@ -31,16 +31,30 @@ export const deleteUser = (params: { id: string }) => {
export const getGovermentList = (params: User.ReqUserParams) => { export const getGovermentList = (params: User.ReqUserParams) => {
return http.post<ResPage<User.ResUserList>>(PORT1 + `/xmgl/government/page`, params); return http.post<ResPage<User.ResUserList>>(PORT1 + `/xmgl/government/page`, params);
}; };
// * 新增用户 // * 新增用户
export const addGovernment = (params: FormData) => { export const addGovernment = (params: FormData) => {
return http.post(PORT1 + `/xmgl/government/add`, params); return http.post(PORT1 + `/xmgl/government/add`, params);
}; };
// * 编辑用户 // * 编辑用户
export const editGovernment = (params: { id: string }) => { export const editGovernment = (params: { id: string }) => {
return http.post(PORT1 + `/xmgl/government/edit`, params); return http.post(PORT1 + `/xmgl/government/edit`, params);
}; };
export const editGoverCheck = (params: { id: string }) => {
return http.post(PORT1 + `/xmgl/moduleTemplate/saveOrUpdate`, params);
};
//权限配置多选编辑
// 通过id查询政务以及账号信息
export const getGoverDetail = (params: User.ReqUserParams) => {
return http.post<ResPage<User.ResUserList>>(PORT1 + `/xmgl/government/queryDetailById`, params);
};
// 列表查询(按模块类型分组)
export const getGoverType = (params: User.ReqUserParams) => {
return http.post<ResPage<User.ResUserList>>(PORT1 + `/xmgl/baseModule/listByType`, params);
};
// 查询政务下的模块模板信息
export const getGoverForm = (params: User.ReqUserParams) => {
return http.post<ResPage<User.ResUserList>>(PORT1 + `/xmgl/baseModule/listByGovernment`, params);
};
// 字典 // 字典
// 查询 // 查询

View File

@ -22,7 +22,7 @@
<el-form-item <el-form-item
:label="item.label + ''" :label="item.label + ''"
:style="{ display: item.hidden == true ? 'none' : '' }" :style="{ display: item.hidden == true ? 'none' : '' }"
style="width: 600px" style="width: 90%"
:prop="item.prop" :prop="item.prop"
> >
<!-- 输入框 --> <!-- 输入框 -->
@ -252,5 +252,8 @@ onMounted(() => {
:deep(.el-dialog__body) { :deep(.el-dialog__body) {
border-top: 1px solid #eee; border-top: 1px solid #eee;
} }
:deep(.el-select--large) {
width: 100%;
}
} }
</style> </style>

View File

@ -14,7 +14,7 @@
<!-- 表格操作 --> <!-- 表格操作 -->
<template #downloadPath="scope"> <template #downloadPath="scope">
<el-button type="primary" link @click="handleEditItem(scope.row)">下载</el-button> <el-button type="primary" link @click="handleEditItem(scope.row)">下载</el-button>
<el-button type="primary" link v-copy="scope.row.downloadPath">复制apk地址</el-button> <el-button type="primary" link v-copy="`${fileUrl + scope.row.downloadPath}`">复制apk地址</el-button>
</template> </template>
<template #operation="{ row }"> <template #operation="{ row }">
<el-button type="primary" link @click="onUpload(row)" <el-button type="primary" link @click="onUpload(row)"
@ -72,9 +72,11 @@ import { useDownload } from "@/hooks/useDownload";
import ProTable from "@/components/ProTable/index.vue"; import ProTable from "@/components/ProTable/index.vue";
import { CirclePlus, Delete, EditPen, Download, Upload, View, Refresh } from "@element-plus/icons-vue"; import { CirclePlus, Delete, EditPen, Download, Upload, View, Refresh } from "@element-plus/icons-vue";
import { getAppList, editApp, addApp, exportApp } from "@/api/modules/jxjview"; import { getAppList, editApp, addApp, exportApp } from "@/api/modules/jxjview";
import { fa } from "element-plus/es/locale";
const router = useRouter(); const router = useRouter();
const globalStore = GlobalStore(); const globalStore = GlobalStore();
const fileUrl = ref("http://192.168.34.122:6688/xmgl/file/preview?fileUrl=");
const data = ref<string>("复制成功"); const data = ref<string>("复制成功");
const headers = ref({ Authorization: "Bearer " + globalStore.token }); const headers = ref({ Authorization: "Bearer " + globalStore.token });
const fileList = ref([]); const fileList = ref([]);
@ -144,17 +146,26 @@ const getTableList = (params: any) => {
const onUpload = (row: any) => { const onUpload = (row: any) => {
visible.value = true; visible.value = true;
formData.value.versionId = row.versionId; formData.value.versionId = row.versionId;
console.log(row);
fileList.value = [{ name: row.fileName, url: row.downloadPath }]; fileList.value = [{ name: row.fileName, url: row.downloadPath }];
formData.value = reactive(row); formData.value = reactive(row);
// if (row.downloadPath) {
// fileList.value.push({ name: row.versionName, url: row.downloadPath });
// }
// formData.value?.resetFields(); // formData.value?.resetFields();
}; };
const onSave = async (params: any) => { const onSave = async (params: any) => {
const res = await editApp(params); const res = await editApp(params);
proTable.value.getAppList(); visible.value = false;
proTable.value.getTableList();
}; };
const uploadSuccess = (response: any) => { const uploadSuccess = (response: any) => {
console.log(response);
ElMessage.success("上传成功"); ElMessage.success("上传成功");
formData.value.fileName = response.result.filename; formData.value.fileName = response.result.originalFilename;
formData.value.downloadPath = response.result.url; formData.value.downloadPath = response.result.url;
// fileList.value = [{ name: response.result.originalFilename, url: response.result.downloadPath }];
}; };
</script> </script>

View File

@ -11,40 +11,129 @@
:pagination="true" :pagination="true"
background background
> >
<!-- 表格 header 按钮 -->
<!-- <template #tableHeader="scope">
<el-button type="primary" :icon="CirclePlus" @click="handleAddItem()">新增用户</el-button>
</template> -->
<template #formButton="scope"> <template #formButton="scope">
<el-button type="primary" @click="handleAddItem()">新增</el-button> <el-button type="primary" @click="handleAddItem()">新增</el-button>
</template> </template>
<!-- 表格操作 --> <!-- 表格操作 -->
<template #operation="scope"> <template #operation="scope">
<el-button type="primary" link :icon="EditPen" @click="handleEditItem('edit', scope.row)">编辑</el-button> <el-button type="primary" link :icon="Delete" @click="onConfiguration(scope.row)">授权配置</el-button>
<el-button type="primary" link :icon="Delete" @click="deleteAccount(scope.row)">删除</el-button>
</template> </template>
</ProTable> </ProTable>
<el-dialog v-model="configureDialogVisible" title="授权配置" show-close>
<div>
<div>
<el-form :model="form" label-width="155px">
<el-row>
<el-col :span="12">
<el-form-item label="名称:">
<el-input v-model="form.governmentName" placeholder="请输入" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="手机号码:">
<el-input v-model="form.governmentTel" placeholder="请输入" />
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="12">
<el-form-item label="账号:">
<el-input v-model="form.account" placeholder="请输入" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="密码:">
<el-input v-model="form.password" placeholder="请输入" />
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="12">
<el-form-item label="授权状态:">
<el-radio-group v-model="form.state">
<el-radio :label="1">启用</el-radio>
<el-radio :label="0">禁用</el-radio>
</el-radio-group>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="到期日期:">
<el-date-picker type="date" v-model="form.expireTime" format="YYYY/MM/DD" placeholder="请选择" />
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="12">
<el-form-item label="是否显示未解锁模块:">
<el-radio-group v-model="form.isShowLockModule">
<el-radio :label="0"></el-radio>
<el-radio :label="1"></el-radio>
</el-radio-group>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="授权项目数:">
<el-input-number v-model="form.authProject" :min="1" :max="10" />
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="24">
<el-form-item label="选择系统版本:">
<el-radio-group @change="onRadio" v-model="form.moduleStyle">
<el-radio :label="1">标准版</el-radio>
<el-radio :label="2">星璇版</el-radio>
<el-radio :label="3">衢州版</el-radio>
</el-radio-group>
</el-form-item>
</el-col>
</el-row>
</el-form>
</div>
<div>
<div class="littleTitle">请勾选功能权限</div>
<div class="allModular">
<el-checkbox v-model="checkAll" @change="checkedState" label="全选" size="large" />
</div>
<div class="littleTitle">政务模块</div>
<div class="allModular">
<div v-for="(item, index) in governmentSelectList" :key="index" class="modularItem">
<el-checkbox v-model="item.select" :label="item.labelName" size="large" />
</div>
</div>
<div class="littleTitle">项目模块</div>
<div class="allModular">
<div v-for="(item, index) in projectSelectList" :key="index" class="modularItem">
<el-checkbox v-model="item.select" :label="item.labelName" size="large" />
</div>
</div>
<div class="littleTitle">企业模块</div>
<div class="allModular">
<div v-for="(item, index) in companySelectList" :key="index" class="modularItem">
<el-checkbox v-model="item.select" :label="item.labelName" size="large" />
</div>
</div>
</div>
</div>
<template #footer>
<span class="dialog-footer">
<el-button @click="configureDialogVisible = false">取消</el-button>
<el-button type="primary" @click="onSubmitConfig">保存</el-button>
</span>
</template>
</el-dialog>
<DialogForm <DialogForm
:title="title"
:formConfig="formConfig" :formConfig="formConfig"
:formData="formData" :formData="formData"
v-model:visible="visible" v-model:visible="visible"
append-to-body append-to-body
width="700px" width="36%"
@confirm="saveItem" @confirm="saveItem"
> >
</DialogForm> </DialogForm>
</div> </div>
</template> </template>
<style lang="scss" scoped>
.my-header {
display: flex;
flex-direction: row;
justify-content: space-between;
background-color: pink;
// height: 25px;
}
</style>
<script setup lang="tsx" name="jxjSystem"> <script setup lang="tsx" name="jxjSystem">
import { ref, reactive } from "vue"; import { ref, reactive } from "vue";
@ -52,90 +141,114 @@ import { ElMessage, ElMessageBox } from "element-plus";
import { useRouter } from "vue-router"; import { useRouter } from "vue-router";
import { User } from "@/api/interface"; import { User } from "@/api/interface";
import { ColumnProps } from "@/components/ProTable/interface"; import { ColumnProps } from "@/components/ProTable/interface";
import { useHandleData } from "@/hooks/useHandleData";
import { useDownload } from "@/hooks/useDownload";
import ProTable from "@/components/ProTable/index.vue"; import ProTable from "@/components/ProTable/index.vue";
import DialogForm from "@/components/DialogForm/index.vue"; import DialogForm from "@/components/DialogForm/index.vue";
import { CirclePlus, Delete, EditPen, Download, Upload, View, Refresh, CircleCloseFilled } from "@element-plus/icons-vue"; import { CirclePlus, Delete, EditPen, Download, Upload, View, Refresh, CircleCloseFilled } from "@element-plus/icons-vue";
import { getUserList, deleteUser, editUser, addUser } from "@/api/modules/jxjview"; import {
getGovermentList,
addGovernment,
editGovernment,
getGoverDetail,
getGoverType,
getGoverForm,
editGoverCheck
} from "@/api/modules/jxjview";
const router = useRouter(); const router = useRouter();
const visible = ref(false);
const title = ref("");
const formData = ref({});
const mode = ref("");
// ProTable 便 // ProTable 便
const proTable = ref(); const proTable = ref();
const title = ref("");
// const ridioValue = ref(1);
const visible = ref(false);
const configureDialogVisible = ref(false);
const checkAll = ref(false);
// const isIndeterminate = ref(true);
const formData = ref({});
const governmentSelectList = ref([]);
const projectSelectList = ref([]);
const companySelectList = ref([]);
// const government = ref([]);
// //
const handleAddItem = () => { const handleAddItem = () => {
mode.value = "add";
visible.value = true; visible.value = true;
title.value = "新增"; title.value = "新增政务";
formData.value = reactive({});
}; };
// //
function handleEditItem(index: string, row: any) { function handleEditItem(index: string, row: any) {}
mode.value = "edit";
visible.value = true;
title.value = "编辑";
formData.value = reactive(row);
}
// //
const columns: ColumnProps[] = [ const columns: ColumnProps[] = [
{ {
prop: "configId", prop: "governmentId",
label: "序号" label: "序号"
}, },
{ {
prop: "configKey", prop: "governmentName",
label: "配置名称", label: "政务名称",
search: { el: "input" } search: { el: "input" }
}, },
// prop // prop
{ prop: "configName", label: "配置键名" }, { prop: "createTime", label: "注册时间" },
{ prop: "configValue", label: "配置键值" }, { prop: "governmentTel", label: "手机号码" },
{ prop: "remark", label: "备注" }, { prop: "state", label: "使用状态" },
{ prop: "operation", label: "操作", fixed: "right", width: 330 } { prop: "diffDay", label: "剩余天数" },
{ prop: "authProject", label: "项目数量" },
{ prop: "operation", label: "操作", fixed: "right" }
]; ];
// //
const formConfig = { const formConfig = {
formItemConfig: [ formItemConfig: [
{ {
label: "配置名称", label: "政务名称",
prop: "configKey", prop: "governmentName",
type: "input" type: "input"
}, },
{ {
label: "配置键名", label: "手机号码",
prop: "configName", prop: "governmentTel",
type: "input" type: "input"
}, },
{ {
label: "配置键值", label: "账户",
prop: "configValue", prop: "account",
type: "input" type: "input"
}, },
{ {
label: "备注", label: "密码",
prop: "remark", prop: "password",
type: "input" type: "input"
} }
], ],
rules: { rules: {
configKey: [ governmentName: [
{ {
required: true, required: true,
message: "请输入类型名", message: "请输入",
trigger: "blur" trigger: "blur"
} }
] ]
} }
}; };
const form = ref({
authProject: 1,
expireTime: "",
governmentName: "",
governmentTel: "",
account: "",
password: "",
state: "",
moduleStyle: "",
isShowLockModule: "",
governmentSn: ""
});
const AuthIdData = ref([]);
// ProTable() // ProTable()
const initParam = reactive({ const initParam = reactive({
type: 1 type: 1
@ -157,27 +270,93 @@ const dataCallback = (data: any) => {
// ProTable :requestApi="getUserList" // ProTable :requestApi="getUserList"
const getTableList = (params: any) => { const getTableList = (params: any) => {
let newParams = JSON.parse(JSON.stringify(params)); let newParams = JSON.parse(JSON.stringify(params));
return getUserList(newParams); return getGovermentList(newParams);
}; };
// //
const saveItem = async (form: any) => { const saveItem = async (form: any) => {
if (form.configId) { const res = await addGovernment(form);
console.log(form.configId); ElMessage.success("新增成功");
const res = await editUser(form);
proTable.value.getTableList();
ElMessage.success("编辑成功");
} else {
const res = await addUser(form);
ElMessage.success("新增成功");
proTable.value.getTableList();
}
visible.value = false; visible.value = false;
};
//
const deleteAccount = async (params: User.ResUserList) => {
await useHandleData(deleteUser, { id: params.configId }, `删除【${params.username}】用户`);
proTable.value.getTableList(); proTable.value.getTableList();
}; };
const onRadio = async (val: number) => {
// console.log(val);
const res1 = await getGoverType({ styleType: val });
governmentSelectList.value = res1.result.government;
projectSelectList.value = res1.result.project;
companySelectList.value = res1.result.enterprise;
};
const checkedState = () => {
// console.log("");
if (checkAll.value) {
governmentSelectList.value.concat(projectSelectList.value, companySelectList.value).forEach((item, index, array) => {
item.select = true;
// isIndeterminate.value = false;
});
} else if (checkAll.value == false) {
governmentSelectList.value.concat(projectSelectList.value, companySelectList.value).forEach((item, index, array) => {
item.select = false;
});
}
};
const onSubmitConfig = async () => {
let checkItem = ref([]);
governmentSelectList.value.concat(projectSelectList.value, companySelectList.value).forEach(item => {
if (item.select == true) {
checkItem.value.push({
moduleId: item.moduleId,
moduleType: item.moduleType,
governmentSn: form.value.governmentSn
});
}
});
await editGovernment(form.value).then(res => {
editGoverCheck(checkItem.value);
ElMessage.success("保存成功");
configureDialogVisible.value = false;
});
};
// btn
const onConfiguration = async (row: any) => {
configureDialogVisible.value = true;
form.value = reactive({ ...row });
// console.log(row.moduleStyle);
const res = await getGoverDetail({ governmentId: row.governmentId });
form.value.account = res.result.account;
form.value.password = res.result.password;
form.value.governmentSn = res.result.governmentSn;
const res1 = await getGoverType({ styleType: row.moduleStyle });
governmentSelectList.value = res1.result.government;
projectSelectList.value = res1.result.project;
companySelectList.value = res1.result.enterprise;
const res2 = await getGoverForm({ governmentSn: row.governmentSn });
governmentSelectList.value.concat(projectSelectList.value, companySelectList.value).forEach((itemA, indexA) => {
res2.result.forEach((itemB, indexB) => {
if (itemA.moduleId == itemB) {
// governmentSelectList.value[indexA].select = true;
itemA.select = true;
}
});
});
};
</script> </script>
<style scoped lang="scss">
.littleTitle {
border-left: 3px solid #008bff;
padding-left: 6px;
}
.allModular {
width: 100%;
margin: 10px;
display: flex;
flex-wrap: wrap;
.modularItem {
padding-right: 50px;
}
}
</style>

View File

@ -272,7 +272,16 @@ function handleEditItem(index: string, row: any) {
mode.value = "edit"; mode.value = "edit";
visible.value = true; visible.value = true;
title.value = "编辑模块"; title.value = "编辑模块";
formData.value = reactive(row); formData.value = reactive(row);
// if (row.styleType === 1) {
// formData.value.styleType == "";
// }
// row.styleType == 1
// ? formData.value.styleType == ""
// : row.styleType == 2
// ? formData.value.styleType == ""
// : "";
} }
// //
@ -349,7 +358,7 @@ const columns: ColumnProps[] = [
]; ];
// //
const formConfig = { const formConfig = reactive({
formItemConfig: [ formItemConfig: [
{ {
label: "标签名称", label: "标签名称",
@ -366,6 +375,18 @@ const formConfig = {
prop: "moduleName", prop: "moduleName",
type: "input" type: "input"
}, },
{
label: "模块类型",
prop: "moduleType",
type: "select",
data: []
},
{
label: "模块风格",
prop: "styleType",
type: "select",
data: []
},
{ {
label: "解锁模块图标", label: "解锁模块图标",
prop: "moduleIconChecked", prop: "moduleIconChecked",
@ -403,7 +424,11 @@ const formConfig = {
{ {
label: "是否是重要模块", label: "是否是重要模块",
prop: "isImportantModule", prop: "isImportantModule",
type: "input" type: "radio",
data: [
{ label: "是", value: "1" },
{ label: "否", value: "0" }
]
} }
], ],
rules: { rules: {
@ -415,7 +440,7 @@ const formConfig = {
} }
] ]
} }
}; });
// //
const formbtnConfig = { const formbtnConfig = {
@ -523,12 +548,6 @@ const onSubmitMenu = async (form: any) => {
getMenuTabList({ moduleId: form.moduleId }); getMenuTabList({ moduleId: form.moduleId });
}; };
//
const getDiaTabList = async (params: any) => {
await getDicList(params);
return getDicList(params);
};
const getBtnTabList = async (params: any) => { const getBtnTabList = async (params: any) => {
const res = await btnList(params); const res = await btnList(params);
buttonData.value = res.result; buttonData.value = res.result;
@ -568,19 +587,21 @@ const onChangeType = async (val: number) => {
}; };
onMounted(async () => { onMounted(async () => {
const res = await getDiaTabList(diaTableData); const res = await getDicList(diaTableData);
optionStyle.value = res.result.map(i => { optionStyle.value = res.result.map(i => {
return { return {
label: i.dictValue, label: i.dictValue,
value: i.dictLabel value: i.dictLabel
}; };
}); });
const res1 = await getDiaTabList(diaTableType); formConfig.formItemConfig[3].data = optionStyle.value;
const res1 = await getDicList(diaTableType);
optionType.value = res1.result.map(i => { optionType.value = res1.result.map(i => {
return { return {
label: i.dictValue, label: i.dictValue,
value: i.dictLabel value: i.dictLabel
}; };
}); });
formConfig.formItemConfig[4].data = optionType.value;
}); });
</script> </script>

View File

@ -170,7 +170,7 @@ const saveItem = async (form: any) => {
// //
const deleteAccount = async (params: User.ResUserList) => { const deleteAccount = async (params: User.ResUserList) => {
await useHandleData(deleteUser, { id: params.configId }, `删除【${params.username}】用户`); await useHandleData(deleteUser, { configId: params.configId }, `删除【${params.username}】用户`);
proTable.value.getTableList(); proTable.value.getTableList();
}; };
</script> </script>