main
黄海 9 months ago
parent fc683779ba
commit e9849a699f

@ -83,6 +83,18 @@ export namespace Scheme {
}
}
//结构
export namespace Structure {
export interface ReqStructureParams {
scheme_id: number;
}
export interface ResStructureList {
structure_id: number;
structure_name: string;
sort_id: number;
}
}
// 用户管理模块
export namespace User {
export interface ReqUserParams extends ReqPage {

@ -1,4 +1,4 @@
import { ResPage, Stage, Subject, Scheme } from "@/api/interface/index";
import { ResPage, Stage, Subject, Scheme, Structure } from "@/api/interface/index";
import http from "@/api";
export const getStageList = () => {
@ -44,3 +44,23 @@ export const updateScheme = params => {
export const deleteScheme = params => {
return http.post(`/dsRes/base/delScheme`, params);
};
export const getStructureList = params => {
return http.get<ResPage<Structure.ResStructureList>>(`/dsRes/base/fetchStructure`, params);
};
export const getStructureInfoById = params => {
return http.get(`/dsRes/base/getResourceStructureById`, params);
};
export const addStructure = params => {
return http.post(`/dsRes/base/addResourceStructure`, params);
};
export const updateStructure = params => {
return http.post(`/dsRes/base/updateResourceStructureById`, params);
};
export const deleteStructure = params => {
return http.post(`/dsRes/base/delResourceStructureById`, params);
};

@ -24,7 +24,7 @@ declare namespace View {
interface DefaultParams {
title: string;
row: { [key: string]: any };
refreshParentFun?: (() => Promise<any>) | undefined;
getTableList?: (() => Promise<any>) | undefined;
[key: string]: any;
}
}

@ -1,5 +1,12 @@
<template>
<el-dialog v-model="dialogFormVisible" :title="`${paramsProps.title}`" width="500">
<el-dialog
v-model="dialogFormVisible"
:title="`${paramsProps.title}`"
draggable
append-to-body
:destroy-on-close="true"
width="500"
>
<el-form :model="paramsProps.row" ref="ruleFormRef" :rules="rules">
<el-form-item label="学段" :label-width="formLabelWidth" prop="stage_id">
<el-select v-model="paramsProps.row.stage_id" placeholder="请选择学段" @change="stageChange">
@ -72,10 +79,11 @@ const paramsProps = ref<View.DefaultParams>({
title: "",
row: {},
updateId: 0,
refreshParentFun: undefined
getTableList: undefined
});
const acceptParams = (params: View.DefaultParams) => {
console.log(params);
paramsProps.value = params;
getStageSelect();
if (paramsProps.value.updateId !== 0) {
@ -114,7 +122,7 @@ const handleSubmit = () => {
ruleFormRef.value!.validate(async valid => {
if (!valid) return;
try {
const params = { ...paramsProps.value.row, owner_id: 0 };
const params = { ...paramsProps.value.row, owner_id: 1 };
if (paramsProps.value.updateId === 0) {
await addScheme(params);
} else {

@ -44,6 +44,7 @@ const proTable = ref<ProTableInstance>();
const initParam = reactive({ stage_id: "", subject_id: "" });
const getTableList = (params: any) => {
// proTable.value!.pageable.pageSize = 2;
return getSchemeList(params);
};
@ -95,6 +96,7 @@ const columns = reactive<ColumnProps<Scheme.ResSchemeList>[]>([
search: { el: "select", props: { onChange: subjectSelectChange } },
fieldNames: { label: "subject_name", value: "subject_id" }
},
{ prop: "subject_name", label: "学科" },
{
prop: "type_id",
label: "类型",

@ -8,7 +8,6 @@
<script setup lang="tsx" name="useProTable">
import { reactive } from "vue";
import { useRouter } from "vue-router";
import { Stage } from "@/api/interface";
import ProTable from "@/components/ProTable/index.vue";
@ -17,8 +16,6 @@ import UserDrawer from "@/views/proTable/components/UserDrawer.vue";
import { ColumnProps } from "@/components/ProTable/interface";
import { getStageList } from "@/api/modules/base";
const router = useRouter();
const _toolButton = ["refresh"] as any;
// ProTable

@ -0,0 +1,85 @@
<template>
<el-dialog
v-model="dialogFormVisible"
:title="`${paramsProps.title}`"
draggable
append-to-body
:destroy-on-close="true"
width="500"
>
<el-form :model="paramsProps.row" ref="ruleFormRef" :rules="rules">
<el-form-item label="上级节点" :label-width="formLabelWidth">
<el-input v-model="parentName" disabled />
</el-form-item>
<el-form-item label="节点名称" :label-width="formLabelWidth" prop="structure_name">
<el-input v-model="paramsProps.row.structure_name" placeholder="请输入节点名称" clearable />
</el-form-item>
<el-form-item label="排序号" :label-width="formLabelWidth" prop="sort_id">
<el-input v-model="paramsProps.row.sort_id" placeholder="请输入排序号" clearable />
</el-form-item>
</el-form>
<template #footer>
<div class="dialog-footer">
<el-button @click="dialogFormVisible = false">取消</el-button>
<el-button type="primary" @click="handleSubmit"></el-button>
</div>
</template>
</el-dialog>
</template>
<script setup lang="ts">
import { ref, reactive } from "vue";
import { getStructureInfoById, addStructure, updateStructure, deleteStructure } from "@/api/modules/base";
import { ElMessage, FormInstance, type ElForm } from "element-plus";
const dialogFormVisible = ref(false);
const formLabelWidth = "80px";
const parentName = ref("");
const rules = reactive({
structure_name: [{ required: true, message: "请输入节点名称" }],
sort_id: [{ required: true, message: "请输入排序号" }]
});
const paramsProps = ref<View.DefaultParams>({
title: "",
row: {},
getTableList: undefined
});
const acceptParams = (params: View.DefaultParams) => {
paramsProps.value = params;
dialogFormVisible.value = true;
getParnetName();
};
const getParnetName = async () => {
const res = await getStructureInfoById({ structure_id: paramsProps.value.row.parent_id });
const _data = res.data as any;
parentName.value = _data.structure_name;
};
const ruleFormRef = ref<FormInstance>();
const handleSubmit = () => {
ruleFormRef.value!.validate(async valid => {
if (!valid) return;
try {
if (paramsProps.value.ctlType === "add") {
await addStructure(paramsProps.value.row);
} else {
await updateStructure(paramsProps.value.row);
}
ElMessage.success({ message: `成功!` });
paramsProps.value.getTableList!();
dialogFormVisible.value = false;
} catch (error) {
console.log(error);
}
});
};
defineExpose({
acceptParams
});
</script>

@ -0,0 +1,191 @@
<template>
<div class="table-box">
<div class="card table-search">
<el-row>
<el-col :span="20">
<el-form :inline="true">
<el-form-item label="学段 : ">
<el-select v-model="stageSelect" style="width: 200px" @change="stageChange">
<el-option v-for="(item, index) in stageList" :key="index" :label="item.stage_name" :value="item.stage_id" />
</el-select>
</el-form-item>
<el-form-item label="学科 : ">
<el-select v-model="subjectSelect" style="width: 200px" @change="subjectChange">
<el-option
v-for="(item, index) in subjectList"
:key="index"
:label="item.subject_name"
:value="item.subject_id"
/>
</el-select>
</el-form-item>
<el-form-item label="版本 : ">
<el-select v-model="schemeSelect" style="width: 200px" @change="schemeChange">
<el-option v-for="(item, index) in schemeList" :key="index" :label="item.scheme_name" :value="item.scheme_id" />
</el-select>
</el-form-item>
</el-form>
</el-col>
<el-col :span="4" style="text-align: right">
<el-button type="primary" :icon="Search">搜索</el-button>
<el-button :icon="Delete"> 重置 </el-button>
</el-col>
</el-row>
</div>
<ProTable
ref="proTable"
:indent="20"
:columns="columns"
:request-api="getTableList"
:initParam="initParam"
row-key="structure_id"
:pagination="false"
:border="false"
:default-expand-all="defaultExpandAllKey"
:toolButton="false"
>
<!-- 表格操作 -->
<template #operation="scope">
<el-button type="primary" link :icon="CirclePlus" @click="openDrawer('新增', scope.row, 'add')">新增</el-button>
<el-button
v-if="scope.row.parent_id !== -1"
type="primary"
link
:icon="EditPen"
@click="openDrawer('编辑', scope.row, 'edit')"
>编辑</el-button
>
<el-button
v-if="scope.row.parent_id !== -1"
type="primary"
link
:icon="Delete"
@click="deleteData(scope.row.structure_id)"
>删除</el-button
>
</template>
</ProTable>
<StructureDialog ref="dialogRef" />
</div>
</template>
<script setup lang="ts">
import { reactive, ref, onMounted } from "vue";
import { CirclePlus, Delete, EditPen, Search } from "@element-plus/icons-vue";
import { ElMessageBox, ElMessage } from "element-plus";
import ProTable from "@/components/ProTable/index.vue";
import { Structure } from "@/api/interface";
import { getStructureList, deleteStructure, getStageList, getSubjectList, getSchemeList } from "@/api/modules/base";
import type { ColumnProps, ProTableInstance } from "@/components/ProTable/interface";
import StructureDialog from "@/views/base/structure/components/StructureDialog.vue";
const stageList = ref<any>([]);
const stageSelect = ref("");
const subjectList = ref<any>([]);
const subjectSelect = ref("");
const schemeList = ref<any>([]);
const schemeSelect = ref("");
// ProTable
const proTable = ref<ProTableInstance>();
const initParam = reactive({ scheme_id: 0 });
//
const columns: ColumnProps<Structure.ResStructureList>[] = [
{ prop: "structure_name", label: "节点名称", align: "left" },
{ prop: "sort_id", label: "排序号", width: 300 },
{ prop: "operation", label: "操作", width: 240, align: "left" }
];
const defaultExpandAllKey = ref(true);
// table
const getTableList = (params: any) => {
return getStructureList(params);
};
const dialogRef = ref<InstanceType<typeof StructureDialog> | null>(null);
const openDrawer = (title: string, row: any = {}, ctlType: string) => {
let _row = {};
if (ctlType === "add") {
_row = {
scheme_id: row.scheme_id,
parent_id: row.structure_id
};
} else {
_row = row;
}
const params = {
title,
row: { ..._row },
getTableList: proTable.value?.getTableList,
ctlType
};
dialogRef.value?.acceptParams(params);
};
const deleteData = async (structure_id: number) => {
ElMessageBox.confirm(`是否删除该节点?`, "提示", {
confirmButtonText: "确定",
cancelButtonText: "取消",
type: "warning",
draggable: true
}).then(async () => {
await deleteStructure({ structure_id });
ElMessage.success({ message: `成功!` });
proTable.value?.getTableList();
});
};
const getSssSelectList = async () => {
const resStage = await getStageList();
stageList.value = resStage.data.list;
stageSelect.value = stageList.value[0].stage_id;
const resSubject = await getSubjectList({ stage_id: stageList.value[0].stage_id, pageNum: 1, pageSize: 100 });
subjectList.value = resSubject.data.list;
subjectSelect.value = subjectList.value[0].subject_id;
const resScheme = await getSchemeList({
stage_id: stageList.value[0].stage_id,
subject_id: subjectList.value[0].subject_id,
pageNum: 1,
pageSize: 100
});
schemeList.value = resScheme.data.list;
schemeSelect.value = schemeList.value[0].scheme_id;
initParam.scheme_id = schemeList.value[0].scheme_id;
};
const stageChange = async value => {
const resSubject = await getSubjectList({ stage_id: value, pageNum: 1, pageSize: 100 });
subjectList.value = resSubject.data.list;
subjectSelect.value = "";
schemeList.value = [];
schemeSelect.value = "";
};
const subjectChange = async value => {
const resScheme = await getSchemeList({
stage_id: stageSelect.value as any,
subject_id: value,
pageNum: 1,
pageSize: 100
});
schemeList.value = resScheme.data.list;
schemeSelect.value = "";
};
const schemeChange = async value => {
initParam.scheme_id = value;
};
onMounted(() => {
getSssSelectList();
});
</script>
<style scoped lang="scss"></style>

@ -1,5 +1,12 @@
<template>
<el-dialog v-model="dialogFormVisible" :title="`${paramsProps.title}`" width="500">
<el-dialog
v-model="dialogFormVisible"
:title="`${paramsProps.title}`"
draggable
append-to-body
:destroy-on-close="true"
width="500"
>
<el-form :model="paramsProps.row" ref="ruleFormRef" :rules="rules">
<el-form-item label="学段" :label-width="formLabelWidth" prop="stage_id">
<el-select v-model="paramsProps.row.stage_id" placeholder="请选择学段">
@ -55,7 +62,7 @@ const paramsProps = ref<View.DefaultParams>({
title: "",
row: {},
updateId: 0,
refreshParentFun: undefined
getTableList: undefined
});
const acceptParams = (params: View.DefaultParams) => {

@ -1,48 +1,7 @@
<template>
<div class="table-box">
<ProTable
ref="proTable"
:columns="columns"
:request-api="getTableList"
:init-param="initParam"
:data-callback="dataCallback"
:border="false"
@drag-sort="sortTable"
>
<!-- 表格 header 按钮 -->
<template #tableHeader="scope">
<el-button v-auth="'add'" type="primary" :icon="CirclePlus" @click="openDrawer('新增')"></el-button>
<el-button v-auth="'batchAdd'" type="primary" :icon="Upload" plain @click="batchAdd"></el-button>
<el-button v-auth="'export'" type="primary" :icon="Download" plain @click="downloadFile"></el-button>
<el-button type="primary" plain @click="toDetail">To </el-button>
<el-button type="danger" :icon="Delete" plain :disabled="!scope.isSelected" @click="batchDelete(scope.selectedListIds)">
批量删除用户
</el-button>
</template>
<!-- Expand -->
<template #expand="scope">
{{ scope.row }}
</template>
<!-- usernameHeader -->
<template #usernameHeader="scope">
<el-button type="primary" @click="ElMessage.success('我是通过作用域插槽渲染的表头')">
{{ scope.column.label }}
</el-button>
</template>
<!-- createTime -->
<template #createTime="scope">
<el-button type="primary" link @click="ElMessage.success('我是通过作用域插槽渲染的内容')">
{{ scope.row.createTime }}
</el-button>
</template>
<!-- 表格操作 -->
<template #operation="scope">
<el-button type="primary" link :icon="View" @click="openDrawer('查看', scope.row)">查看</el-button>
<el-button type="primary" link :icon="EditPen" @click="openDrawer('编辑', scope.row)">编辑</el-button>
<el-button type="primary" link :icon="Refresh" @click="resetPass(scope.row)"></el-button>
<el-button type="primary" link :icon="Delete" @click="deleteAccount(scope.row)"></el-button>
</template>
</ProTable>
<el-button type="primary" :icon="CirclePlus" @click="openDrawer('新增')"></el-button>
<UserDrawer ref="drawerRef" />
<ImportExcel ref="dialogRef" />
</div>

Loading…
Cancel
Save