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) => {
return http.request<Result>("delete", "/know-sub/deptManage/delete", {
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="请选择"
:max-collapse-tags="2"
class="w-[100%]"
:disabled="item.roleId === ''"
:disabled="item.roleId === '' || item.roleId === null"
>
<el-option
v-for="item in userNameList"

@ -21,7 +21,7 @@ const updateId = ref("");
const columns: TableColumnList = [
{
label: "序号",
prop: "id"
slot: "index"
},
{
label: "流程名称",
@ -140,9 +140,13 @@ onMounted(() => {
background: 'var(--el-table-row-hover-bg-color)',
color: 'var(--el-text-color-primary)'
}"
adaptive
:pagination="pagination"
@page-current-change="onCurrentChange"
>
<template #index="{ index }">
<span>{{ index + 1 }}</span>
</template>
<template #operation="{ 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 { ref, onMounted, reactive } from "vue";
import { queryKnowledgePage } from "@/api/knowledgeCentre";
import type { PaginationProps } from "@pureadmin/table";
import Empty from "./empty.svg?component";
@ -11,17 +12,22 @@ export function useColumns() {
{
sortable: false,
label: "知识标题",
prop: "questionNumber"
prop: "title"
},
{
sortable: false,
label: "发文日期",
prop: "date"
label: "时效性",
prop: "timeliness",
cellRenderer: ({ row }) => (
<div class="flex justify-center w-full">
<span>{row.timeliness == 1 ? "长期有效" : "临时有效"}</span>
</div>
)
},
{
sortable: false,
label: "政策类型",
prop: "resolveNumber"
prop: "policyType"
},
{
label: "最新时间",
@ -45,11 +51,22 @@ export function useColumns() {
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(() => {
dataList.value = tableData;
pagination.total = dataList.value.length;
loading.value = false;
getData();
// dataList.value = tableData;
// pagination.total = dataList.value.length;
// loading.value = false;
});
return {

@ -1,17 +1,46 @@
<script setup lang="ts">
// import { ref, markRaw } from "vue";
import ReCol from "@/components/ReCol";
import WelcomeTable from "./components/table/index.vue";
import { onMounted, ref } from "vue";
import { ArrowRight } from "@element-plus/icons-vue";
import { queryMyKnowledgeList } from "@/api/home";
import { processList, commonList } from "./data";
defineOptions({
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>
<template>
<div class="main px-14">
<div class="main px-[80px]">
<el-row :gutter="24" justify="space-around">
<re-col
v-motion
@ -75,8 +104,10 @@ defineOptions({
<span>知识报送</span>
</div>
<div class="my_process_header-left">
<span class="mr-[52px]">姓名: {{ "1111" }}</span>
<span>最后登陆时间: {{ "1111" }}</span>
<span class="mr-[52px]"
>姓名: {{ knowledgeList.userName }}</span
>
<span>最后登陆时间: {{ knowledgeList.lastLoginTime }}</span>
</div>
</div>
<div class="my_process_content">
@ -87,8 +118,8 @@ defineOptions({
>
<img :src="v.bgImage" class="w-[56px] h-[56px] mr-2" />
<div class="my_process_content-box-left">
<span>{{ v.value }}</span>
<sapn>{{ v.label }}</sapn>
<span>{{ assignedAmount(v.label) }}</span>
<span>{{ v.label }}</span>
</div>
</div>
</div>

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

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

@ -1,50 +1,66 @@
<script setup lang="ts">
import { reactive, ref, watch } from "vue";
import type { CheckboxValueType } from "element-plus";
import { onMounted, reactive, ref, watch } from "vue";
import type { CheckboxValueType, FormInstance, FormRules } from "element-plus";
import { useColumns } from "./columns";
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 Delete from "@iconify-icons/ep/delete";
defineOptions({
name: "DictionaryManagement"
});
const { columns1, dataList1, onAdd, onDel } = useColumns();
const { columns1, dicDataReqVos, onAdd, onDel } = useColumns();
const seachForm = reactive({
title: "",
publishDeptName: "",
status: ""
dicName: "",
dicCode: ""
});
const dictionaryForm = reactive({
title: "",
code: "",
desc: ""
id: "",
dicName: "",
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({
total: 0,
pageSize: 10,
currentPage: 1,
align: "center",
layout: "total, prev, pager, next, jumper",
background: true
});
const columns: TableColumnList = [
{
label: "序号",
prop: "diseaseName"
slot: "index"
},
{
label: "字典名称",
prop: "diseaseName"
prop: "dicName"
},
{
label: "字典编码",
prop: "diseaseName"
prop: "dicCode"
},
{
label: "备注",
prop: "diseaseName"
prop: "remark"
},
{
label: "最新时间",
prop: "diseaseName"
prop: "createTime"
},
{
label: "操作",
@ -57,23 +73,51 @@ const dataList = ref([]);
const search = () => {
pagination.currentPage = 1;
pagination.pageSize = 10;
getTableData();
};
const reset = () => {
seachForm.title = "";
seachForm.publishDeptName = "";
// search();
seachForm.dicName = "";
seachForm.dicCode = "";
search();
};
const createFlag = ref(false);
const updateFlag = ref(false);
const deleteFormVisible = ref(false);
const create = () => {
updateFlag.value = true;
createFlag.value = true;
// 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 indeterminate = ref(false);
const value = ref<CheckboxValueType[]>([]);
@ -115,6 +159,89 @@ watch(value, val => {
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>
<template>
@ -124,7 +251,7 @@ watch(value, val => {
<el-form :model="seachForm">
<el-row>
<el-form-item label="字典名称">
<el-input v-model="seachForm.title" />
<el-input v-model="seachForm.dicName" />
</el-form-item>
<el-button class="ml-8" @click="search" type="primary"
>搜索</el-button
@ -144,16 +271,26 @@ watch(value, val => {
alignWhole="center"
:data="dataList"
:columns="columns"
adaptive
:header-cell-style="{
background: 'var(--el-table-row-hover-bg-color)',
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>
</template> -->
</template>
</pure-table>
</div>
<el-drawer
@ -165,20 +302,29 @@ watch(value, val => {
<span>新建字典</span>
</div>
<div class="drawer_box">
<el-form :model="dictionaryForm" label-width="auto">
<el-form-item label="字典名称">
<el-input v-model="dictionaryForm.title" autocomplete="off" />
<el-form
:model="dictionaryForm"
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 label="字典编码">
<el-input v-model="dictionaryForm.code" autocomplete="off" />
<el-form-item label="字典编码" prop="dicCode">
<el-input v-model="dictionaryForm.dicCode" autocomplete="off" />
</el-form-item>
<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>
<div class="drawer_footer">
<el-button plain>重置</el-button>
<el-button type="primary">确定</el-button>
<el-button plain @click="resetForm(ruleCreateFormRef)"
>重置</el-button
>
<el-button type="primary" @click="submitForm(ruleCreateFormRef)"
>确定</el-button
>
</div>
</div>
</el-drawer>
@ -188,12 +334,21 @@ watch(value, val => {
:with-header="false"
>
<div class="drawer_header">
<span>新建字典</span>
<span>配置字典</span>
</div>
<div class="drawer_box">
<el-form :model="dictionaryForm" label-width="auto">
<el-form-item label="字典名称">
<el-input v-model="dictionaryForm.title" autocomplete="off" />
<el-form
:model="dictionaryForm"
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>
<div>
<pure-table
@ -203,7 +358,7 @@ watch(value, val => {
background: 'var(--el-fill-color-light)',
color: 'var(--el-text-color-primary)'
}"
:data="dataList1"
:data="dicDataReqVos"
:columns="columns1"
>
<!-- <template #empty>
@ -232,11 +387,38 @@ watch(value, val => {
</div>
</el-form>
<div class="drawer_footer">
<el-button plain>重置</el-button>
<el-button type="primary">确定</el-button>
<el-button plain @click="resetConfigForm(ruleConfigFormRef)"
>重置</el-button
>
<el-button type="primary" @click="submitConfigForm(ruleConfigFormRef)"
>确定</el-button
>
</div>
</div>
</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>
</template>
<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) {
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>

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

Loading…
Cancel
Save