parent
fc683779ba
commit
e9849a699f
@ -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>
|
Loading…
Reference in new issue