feat: 字典管理及首页接口联调

dev_1.0.0
JINGYJ 11 months ago
parent b823116412
commit 5efd523303

@ -0,0 +1,16 @@
import { http } from "@/utils/http";
type Result = {
success: boolean;
data: Array<any>;
};
/**
*
* @returns
*/
export const queryMyKnowledgeList = (data?: object) => {
return http.request<Result>("get", "/know-sub/homepage/queryMyKnowledge", {
params: data
});
};

@ -129,10 +129,66 @@ export const updateDeptManage = (data?: object) => {
/** /**
* *
* @returns * @returns
*/ */
export const deleteDeptManage = (data?: object) => { export const deleteDeptManage = (data?: object) => {
return http.request<Result>("delete", "/know-sub/deptManage/delete", { return http.request<Result>("delete", "/know-sub/deptManage/delete", {
params: data params: data
}); });
}; };
/**
*
* @returns
*/
export const getDicManageList = (data?: object) => {
return http.request<Result>("get", "/know-sub/dicManage/list", {
params: data
});
};
/**
*
* @returns
*/
export const createSaveDic = (data?: object) => {
return http.request<Result>("post", "/know-sub/dicManage/saveDic", {
data
});
};
/**
*
* @returns
*/
export const queryDicDateList = (data?: object) => {
return http.request<Result>("get", "/know-sub/dicManage/queryDicDate", {
params: data
});
};
/**
*
* @returns
*/
export const createSaveDicData = (data?: object) => {
return http.request<Result>(
"post",
`/know-sub/dicManage/saveDicData?dicId=${
(data as { dicId: string }).dicId
}`,
{
data: (data as { dicDataReqVos: object }).dicDataReqVos
}
);
};
/**
*
* @returns
*/
export const deleteDicManage = (data?: object) => {
return http.request<Result>("delete", "/know-sub/dicManage/delete", {
params: data
});
};

@ -363,7 +363,7 @@ onMounted(() => {
placeholder="请选择" placeholder="请选择"
:max-collapse-tags="2" :max-collapse-tags="2"
class="w-[100%]" class="w-[100%]"
:disabled="item.roleId === ''" :disabled="item.roleId === '' || item.roleId === null"
> >
<el-option <el-option
v-for="item in userNameList" v-for="item in userNameList"

@ -21,7 +21,7 @@ const updateId = ref("");
const columns: TableColumnList = [ const columns: TableColumnList = [
{ {
label: "序号", label: "序号",
prop: "id" slot: "index"
}, },
{ {
label: "流程名称", label: "流程名称",
@ -140,9 +140,13 @@ onMounted(() => {
background: 'var(--el-table-row-hover-bg-color)', background: 'var(--el-table-row-hover-bg-color)',
color: 'var(--el-text-color-primary)' color: 'var(--el-text-color-primary)'
}" }"
adaptive
:pagination="pagination" :pagination="pagination"
@page-current-change="onCurrentChange" @page-current-change="onCurrentChange"
> >
<template #index="{ index }">
<span>{{ index + 1 }}</span>
</template>
<template #operation="{ row }"> <template #operation="{ row }">
<el-button link type="primary" @click="handleEdit(row)"> <el-button link type="primary" @click="handleEdit(row)">
编辑 编辑

@ -1,6 +1,7 @@
import { tableData } from "../../data"; // import { tableData } from "../../data";
import { delay } from "@pureadmin/utils"; import { delay } from "@pureadmin/utils";
import { ref, onMounted, reactive } from "vue"; import { ref, onMounted, reactive } from "vue";
import { queryKnowledgePage } from "@/api/knowledgeCentre";
import type { PaginationProps } from "@pureadmin/table"; import type { PaginationProps } from "@pureadmin/table";
import Empty from "./empty.svg?component"; import Empty from "./empty.svg?component";
@ -11,17 +12,22 @@ export function useColumns() {
{ {
sortable: false, sortable: false,
label: "知识标题", label: "知识标题",
prop: "questionNumber" prop: "title"
}, },
{ {
sortable: false, sortable: false,
label: "发文日期", label: "时效性",
prop: "date" prop: "timeliness",
cellRenderer: ({ row }) => (
<div class="flex justify-center w-full">
<span>{row.timeliness == 1 ? "长期有效" : "临时有效"}</span>
</div>
)
}, },
{ {
sortable: false, sortable: false,
label: "政策类型", label: "政策类型",
prop: "resolveNumber" prop: "policyType"
}, },
{ {
label: "最新时间", label: "最新时间",
@ -45,11 +51,22 @@ export function useColumns() {
loading.value = false; loading.value = false;
}); });
} }
const getData = async () => {
const params = {
pageNum: pagination.currentPage,
pageSize: pagination.pageSize
};
const res: any = await queryKnowledgePage(params);
dataList.value = res.data.records;
pagination.total = res.data.total;
loading.value = false;
};
onMounted(() => { onMounted(() => {
dataList.value = tableData; getData();
pagination.total = dataList.value.length; // dataList.value = tableData;
loading.value = false; // pagination.total = dataList.value.length;
// loading.value = false;
}); });
return { return {

@ -1,17 +1,46 @@
<script setup lang="ts"> <script setup lang="ts">
// import { ref, markRaw } from "vue";
import ReCol from "@/components/ReCol"; import ReCol from "@/components/ReCol";
import WelcomeTable from "./components/table/index.vue"; import WelcomeTable from "./components/table/index.vue";
import { onMounted, ref } from "vue";
import { ArrowRight } from "@element-plus/icons-vue"; import { ArrowRight } from "@element-plus/icons-vue";
import { queryMyKnowledgeList } from "@/api/home";
import { processList, commonList } from "./data"; import { processList, commonList } from "./data";
defineOptions({ defineOptions({
name: "Home" name: "Home"
}); });
const knowledgeList = ref<any>([]);
/**
* 查询我的知识
*/
const getTableData = async () => {
const res: any = await queryMyKnowledgeList();
if (res.code === 200) {
knowledgeList.value = res.data;
// pagination.total = res.data.total;
}
console.log(res);
};
const assignedAmount = (type: any) => {
if (type === "全量报送") {
return knowledgeList.value.knowledgeCount;
} else if (type === "待审批") {
return knowledgeList.value.waitProcessCount;
} else if (type === "审批通过") {
return knowledgeList.value.passProcessCount;
} else if (type === "驳回") {
return knowledgeList.value.rejectProcessCount;
} else {
return knowledgeList.value.invalidProcessCount;
}
};
onMounted(() => {
getTableData();
});
</script> </script>
<template> <template>
<div class="main px-14"> <div class="main px-[80px]">
<el-row :gutter="24" justify="space-around"> <el-row :gutter="24" justify="space-around">
<re-col <re-col
v-motion v-motion
@ -75,8 +104,10 @@ defineOptions({
<span>知识报送</span> <span>知识报送</span>
</div> </div>
<div class="my_process_header-left"> <div class="my_process_header-left">
<span class="mr-[52px]">姓名: {{ "1111" }}</span> <span class="mr-[52px]"
<span>最后登陆时间: {{ "1111" }}</span> >姓名: {{ knowledgeList.userName }}</span
>
<span>最后登陆时间: {{ knowledgeList.lastLoginTime }}</span>
</div> </div>
</div> </div>
<div class="my_process_content"> <div class="my_process_content">
@ -87,8 +118,8 @@ defineOptions({
> >
<img :src="v.bgImage" class="w-[56px] h-[56px] mr-2" /> <img :src="v.bgImage" class="w-[56px] h-[56px] mr-2" />
<div class="my_process_content-box-left"> <div class="my_process_content-box-left">
<span>{{ v.value }}</span> <span>{{ assignedAmount(v.label) }}</span>
<sapn>{{ v.label }}</sapn> <span>{{ v.label }}</span>
</div> </div>
</div> </div>
</div> </div>

@ -313,6 +313,7 @@ onMounted(() => {
alignWhole="center" alignWhole="center"
:data="accountDataList" :data="accountDataList"
:columns="accountColumns" :columns="accountColumns"
adaptive
:header-cell-style="{ :header-cell-style="{
background: 'var(--el-table-row-hover-bg-color)', background: 'var(--el-table-row-hover-bg-color)',
color: 'var(--el-text-color-primary)' color: 'var(--el-text-color-primary)'
@ -357,6 +358,7 @@ onMounted(() => {
alignWhole="center" alignWhole="center"
:data="deptOptions" :data="deptOptions"
:columns="deptColumns" :columns="deptColumns"
adaptive
:header-cell-style="{ :header-cell-style="{
background: 'var(--el-table-row-hover-bg-color)', background: 'var(--el-table-row-hover-bg-color)',
color: 'var(--el-text-color-primary)' color: 'var(--el-text-color-primary)'
@ -388,6 +390,7 @@ onMounted(() => {
alignWhole="center" alignWhole="center"
:data="dataList" :data="dataList"
:columns="roleColumns" :columns="roleColumns"
adaptive
:header-cell-style="{ :header-cell-style="{
background: 'var(--el-table-row-hover-bg-color)', background: 'var(--el-table-row-hover-bg-color)',
color: 'var(--el-text-color-primary)' color: 'var(--el-text-color-primary)'

@ -1,23 +1,23 @@
import { ref } from "vue"; import { ref } from "vue";
export function useColumns() { export function useColumns() {
const dataList1 = ref([]); const dicDataReqVos = ref([]);
const columns1: TableColumnList = [ const columns1: TableColumnList = [
{ {
label: "字典标签", label: "字典标签",
prop: "name", prop: "dicLabel",
cellRenderer: ({ row }) => <el-input v-model={row.name} /> cellRenderer: ({ row }) => <el-input v-model={row.dicLabel} />
}, },
{ {
label: "字典数值", label: "字典数值",
prop: "name", prop: "dicValue",
cellRenderer: ({ row }) => <el-input v-model={row.name} /> cellRenderer: ({ row }) => <el-input v-model={row.dicValue} />
}, },
{ {
label: "字典排序", label: "字典排序",
prop: "name", prop: "dicSort",
cellRenderer: ({ row }) => <el-input v-model={row.name} /> cellRenderer: ({ row }) => <el-input v-model={row.dicSort} />
}, },
{ {
label: "操作", label: "操作",
@ -28,23 +28,22 @@ export function useColumns() {
]; ];
function onAdd() { function onAdd() {
dataList1.value.push({ dicDataReqVos.value.push({
id: dataList1.value.length + 1, id: dicDataReqVos.value.length + 1,
name: "", dicLabel: "",
sex: 0, dicValue: "",
hobby: "", dicSort: ""
date: ""
}); });
} }
function onDel(row) { function onDel(row) {
const index = dataList1.value.indexOf(row); const index = dicDataReqVos.value.indexOf(row);
if (index !== -1) dataList1.value.splice(index, 1); if (index !== -1) dicDataReqVos.value.splice(index, 1);
} }
return { return {
columns1, columns1,
dataList1, dicDataReqVos,
onAdd, onAdd,
onDel onDel
}; };

@ -1,50 +1,66 @@
<script setup lang="ts"> <script setup lang="ts">
import { reactive, ref, watch } from "vue"; import { onMounted, reactive, ref, watch } from "vue";
import type { CheckboxValueType } from "element-plus"; import type { CheckboxValueType, FormInstance, FormRules } from "element-plus";
import { useColumns } from "./columns"; import { useColumns } from "./columns";
import { useRenderIcon } from "@/components/ReIcon/src/hooks"; import { useRenderIcon } from "@/components/ReIcon/src/hooks";
import {
getDicManageList,
createSaveDic,
queryDicDateList,
createSaveDicData,
deleteDicManage
} from "@/api/system";
import { message } from "@/utils/message";
import AddFill from "@iconify-icons/ep/plus"; import AddFill from "@iconify-icons/ep/plus";
import Delete from "@iconify-icons/ep/delete"; import Delete from "@iconify-icons/ep/delete";
defineOptions({ defineOptions({
name: "DictionaryManagement" name: "DictionaryManagement"
}); });
const { columns1, dataList1, onAdd, onDel } = useColumns(); const { columns1, dicDataReqVos, onAdd, onDel } = useColumns();
const seachForm = reactive({ const seachForm = reactive({
title: "", dicName: "",
publishDeptName: "", dicCode: ""
status: ""
}); });
const dictionaryForm = reactive({ const dictionaryForm = reactive({
title: "", id: "",
code: "", dicName: "",
desc: "" dicCode: "",
remark: ""
}); });
const rules = reactive<FormRules>({
dicName: [{ required: true, message: "请输入", trigger: "blur" }],
dicCode: [{ required: true, message: "请输入", trigger: "blur" }]
});
const ruleCreateFormRef = ref<FormInstance>();
const ruleConfigFormRef = ref<FormInstance>();
const pagination = reactive({ const pagination = reactive({
total: 0, total: 0,
pageSize: 10, pageSize: 10,
currentPage: 1, currentPage: 1,
align: "center",
layout: "total, prev, pager, next, jumper",
background: true background: true
}); });
const columns: TableColumnList = [ const columns: TableColumnList = [
{ {
label: "序号", label: "序号",
prop: "diseaseName" slot: "index"
}, },
{ {
label: "字典名称", label: "字典名称",
prop: "diseaseName" prop: "dicName"
}, },
{ {
label: "字典编码", label: "字典编码",
prop: "diseaseName" prop: "dicCode"
}, },
{ {
label: "备注", label: "备注",
prop: "diseaseName" prop: "remark"
}, },
{ {
label: "最新时间", label: "最新时间",
prop: "diseaseName" prop: "createTime"
}, },
{ {
label: "操作", label: "操作",
@ -57,23 +73,51 @@ const dataList = ref([]);
const search = () => { const search = () => {
pagination.currentPage = 1; pagination.currentPage = 1;
pagination.pageSize = 10; pagination.pageSize = 10;
getTableData();
}; };
const reset = () => { const reset = () => {
seachForm.title = ""; seachForm.dicName = "";
seachForm.publishDeptName = ""; seachForm.dicCode = "";
// search(); search();
}; };
const createFlag = ref(false); const createFlag = ref(false);
const updateFlag = ref(false); const updateFlag = ref(false);
const deleteFormVisible = ref(false);
const create = () => { const create = () => {
updateFlag.value = true; createFlag.value = true;
// search(); // search();
}; };
// const changeStatus = item => { /**
// seachForm.status = item.id; * 字典列表查询
// }; */
const getTableData = async () => {
const res: any = await getDicManageList({
dicName: seachForm.dicName,
dicCode: seachForm.dicCode,
pageNum: pagination.currentPage,
pageSize: pagination.pageSize
});
if (res.code === 200) {
dataList.value = res.data.records;
pagination.total = res.data.total;
}
console.log(res);
};
const handleConfig = async (value: any) => {
console.log(value);
// updateFlag.value = true;
const res: any = await queryDicDateList({
dicId: value.id
});
if (res.code === 200) {
(dictionaryForm.id = value.id), (dictionaryForm.dicName = value.dicName);
dicDataReqVos.value = res.data;
updateFlag.value = true;
}
// console.log(res);
};
const checkAll = ref(false); const checkAll = ref(false);
const indeterminate = ref(false); const indeterminate = ref(false);
const value = ref<CheckboxValueType[]>([]); const value = ref<CheckboxValueType[]>([]);
@ -115,6 +159,89 @@ watch(value, val => {
indeterminate.value = true; indeterminate.value = true;
} }
}); });
const submitForm = async (formEl: FormInstance | undefined) => {
if (!formEl) return;
await formEl.validate((valid, fields) => {
if (valid) {
console.log(valid);
const createForm = {
id: "",
dicName: dictionaryForm.dicName,
dicCode: dictionaryForm.dicCode,
remark: dictionaryForm.remark
};
createSaveDic(createForm).then(res => {
if (res.code === 200) {
message("新建成功", { type: "success" });
createFlag.value = false;
search();
}
});
} else {
console.log("error submit!", fields);
}
});
};
const resetForm = (formEl: FormInstance | undefined) => {
if (!formEl) return;
formEl.resetFields();
};
const submitConfigForm = async (formEl: FormInstance | undefined) => {
if (!formEl) return;
await formEl.validate((valid, fields) => {
if (valid) {
// console.log(valid);
// console.log(dicDataReqVos.value);
const createForm = {
dicId: dictionaryForm.id,
dicDataReqVos: dicDataReqVos.value.map(item => {
return {
dicLabel: item.dicLabel,
dicValue: item.dicValue,
dicSort: item.dicSort
};
})
};
createSaveDicData(createForm).then(res => {
if (res.code === 200) {
message("保存成功", { type: "success" });
updateFlag.value = false;
search();
}
});
} else {
console.log("error submit!", fields);
}
});
};
const resetConfigForm = (formEl: FormInstance | undefined) => {
if (!formEl) return;
formEl.resetFields();
};
const handleDelete = (value: any) => {
deleteFormVisible.value = true;
dictionaryForm.id = value.id;
};
const deleteForm = () => {
deleteDicManage({
id: dictionaryForm.id
}).then(res => {
if (res.code === 200) {
message("删除成功", { type: "success" });
deleteFormVisible.value = false;
search();
}
});
};
function onCurrentChange(page: number) {
// console.log("onCurrentChange", page);
pagination.currentPage = page;
pagination.pageSize = 10;
getTableData();
}
onMounted(() => {
search();
});
</script> </script>
<template> <template>
@ -124,7 +251,7 @@ watch(value, val => {
<el-form :model="seachForm"> <el-form :model="seachForm">
<el-row> <el-row>
<el-form-item label="字典名称"> <el-form-item label="字典名称">
<el-input v-model="seachForm.title" /> <el-input v-model="seachForm.dicName" />
</el-form-item> </el-form-item>
<el-button class="ml-8" @click="search" type="primary" <el-button class="ml-8" @click="search" type="primary"
>搜索</el-button >搜索</el-button
@ -144,16 +271,26 @@ watch(value, val => {
alignWhole="center" alignWhole="center"
:data="dataList" :data="dataList"
:columns="columns" :columns="columns"
adaptive
:header-cell-style="{ :header-cell-style="{
background: 'var(--el-table-row-hover-bg-color)', background: 'var(--el-table-row-hover-bg-color)',
color: 'var(--el-text-color-primary)' color: 'var(--el-text-color-primary)'
}" }"
:pagination="pagination"
@page-current-change="onCurrentChange"
> >
<!-- <template #operation="{ row }"> <template #index="{ index }">
<span>{{ index + 1 }}</span>
</template>
<template #operation="{ row }">
<el-button link type="primary" @click="handleConfig(row)">
配置
</el-button>
<span>|</span>
<el-button link type="danger" @click="handleDelete(row)"> <el-button link type="danger" @click="handleDelete(row)">
删除 删除
</el-button> </el-button>
</template> --> </template>
</pure-table> </pure-table>
</div> </div>
<el-drawer <el-drawer
@ -165,20 +302,29 @@ watch(value, val => {
<span>新建字典</span> <span>新建字典</span>
</div> </div>
<div class="drawer_box"> <div class="drawer_box">
<el-form :model="dictionaryForm" label-width="auto"> <el-form
<el-form-item label="字典名称"> :model="dictionaryForm"
<el-input v-model="dictionaryForm.title" autocomplete="off" /> label-width="auto"
ref="ruleCreateFormRef"
:rules="rules"
>
<el-form-item label="字典名称" prop="dicName">
<el-input v-model="dictionaryForm.dicName" autocomplete="off" />
</el-form-item> </el-form-item>
<el-form-item label="字典编码"> <el-form-item label="字典编码" prop="dicCode">
<el-input v-model="dictionaryForm.code" autocomplete="off" /> <el-input v-model="dictionaryForm.dicCode" autocomplete="off" />
</el-form-item> </el-form-item>
<el-form-item label="备注"> <el-form-item label="备注">
<el-input v-model="dictionaryForm.desc" type="textarea" /> <el-input v-model="dictionaryForm.remark" type="textarea" />
</el-form-item> </el-form-item>
</el-form> </el-form>
<div class="drawer_footer"> <div class="drawer_footer">
<el-button plain>重置</el-button> <el-button plain @click="resetForm(ruleCreateFormRef)"
<el-button type="primary">确定</el-button> >重置</el-button
>
<el-button type="primary" @click="submitForm(ruleCreateFormRef)"
>确定</el-button
>
</div> </div>
</div> </div>
</el-drawer> </el-drawer>
@ -188,12 +334,21 @@ watch(value, val => {
:with-header="false" :with-header="false"
> >
<div class="drawer_header"> <div class="drawer_header">
<span>新建字典</span> <span>配置字典</span>
</div> </div>
<div class="drawer_box"> <div class="drawer_box">
<el-form :model="dictionaryForm" label-width="auto"> <el-form
<el-form-item label="字典名称"> :model="dictionaryForm"
<el-input v-model="dictionaryForm.title" autocomplete="off" /> label-width="auto"
:rules="rules"
ref="ruleConfigFormRef"
>
<el-form-item label="字典名称" prop="dicName">
<el-input
v-model="dictionaryForm.dicName"
autocomplete="off"
disabled
/>
</el-form-item> </el-form-item>
<div> <div>
<pure-table <pure-table
@ -203,7 +358,7 @@ watch(value, val => {
background: 'var(--el-fill-color-light)', background: 'var(--el-fill-color-light)',
color: 'var(--el-text-color-primary)' color: 'var(--el-text-color-primary)'
}" }"
:data="dataList1" :data="dicDataReqVos"
:columns="columns1" :columns="columns1"
> >
<!-- <template #empty> <!-- <template #empty>
@ -232,11 +387,38 @@ watch(value, val => {
</div> </div>
</el-form> </el-form>
<div class="drawer_footer"> <div class="drawer_footer">
<el-button plain>重置</el-button> <el-button plain @click="resetConfigForm(ruleConfigFormRef)"
<el-button type="primary">确定</el-button> >重置</el-button
>
<el-button type="primary" @click="submitConfigForm(ruleConfigFormRef)"
>确定</el-button
>
</div> </div>
</div> </div>
</el-drawer> </el-drawer>
<!-- 删除弹框 -->
<el-dialog
v-model="deleteFormVisible"
title="Shipping address"
width="500"
:show-close="false"
>
<template #header="{ titleId, titleClass }">
<div class="my-header_delete">
<h4 :id="titleId" :class="titleClass">
<div class="my_delete_icon" />
确认删除字典
</h4>
</div>
</template>
<div class="my_delete_body">删除后无法找回此操作不可逆请谨慎处理</div>
<template #footer>
<div class="dialog-footer_delete">
<el-button @click="deleteFormVisible = false">取消</el-button>
<el-button type="primary" @click="deleteForm"> </el-button>
</div>
</template>
</el-dialog>
</div> </div>
</template> </template>
<style lang="scss" scoped> <style lang="scss" scoped>
@ -252,6 +434,10 @@ watch(value, val => {
} }
} }
:deep(.el-dialog) {
background: linear-gradient(180deg, #e1ecfe 0%, #fff 30%);
}
:deep(.el-drawer__body) { :deep(.el-drawer__body) {
padding: 0 !important; padding: 0 !important;
} }
@ -285,5 +471,45 @@ watch(value, val => {
} }
} }
} }
:deep(.el-dialog__body) {
padding: 0;
}
.my-header_delete {
box-sizing: border-box;
display: flex;
flex-direction: row;
gap: 16px;
justify-content: space-between;
height: 74px;
padding: 24px 24px 0;
// border-bottom: 1px solid rgb(91 139 255 / 30%);
h4 {
display: flex;
align-items: center;
justify-content: center;
.my_delete_icon {
display: block;
width: 28px;
height: 28px;
margin-right: 10px;
background-image: url("@/assets/home/tishi@2x.png");
background-size: 100% 100%;
}
}
}
.my_delete_body {
text-align: center;
}
.dialog-footer_delete {
display: flex;
align-items: center;
justify-content: flex-end;
}
} }
</style> </style>

@ -160,7 +160,7 @@ const submitForm = async (formEl: FormInstance | undefined) => {
}; };
updateSubLibrary(updateForm).then(res => { updateSubLibrary(updateForm).then(res => {
if (res.code === 200) { if (res.code === 200) {
message("新建成功", { type: "success" }); message("修改成功", { type: "success" });
createFlag.value = false; createFlag.value = false;
search(); search();
} }
@ -243,6 +243,7 @@ onMounted(() => {
alignWhole="center" alignWhole="center"
:data="dataList" :data="dataList"
:columns="columns" :columns="columns"
adaptive
:header-cell-style="{ :header-cell-style="{
background: 'var(--el-table-row-hover-bg-color)', background: 'var(--el-table-row-hover-bg-color)',
color: 'var(--el-text-color-primary)' color: 'var(--el-text-color-primary)'

Loading…
Cancel
Save