123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105 |
- <template>
- <el-form ref="formRef" :model="formData" :rules="ruleForm" label-width="80px" @keyup.enter="onSubmit">
- <el-form-item label="上级分类" prop="parentId">
- <el-cascader :options="typeData" :props="{ checkStrictly: true, multiple: false, emitPath: false, value: 'id', label: 'name' }" placeholder="请选择关联页面" clearable class="w100" v-model="formData.parentId"></el-cascader>
- </el-form-item>
- <el-form-item label="关联页面" prop="menuIds">
- <el-cascader :options="menuData" :props="{ checkStrictly: false, multiple: true, emitPath: false, value: 'id', label: 'title' }" placeholder="请选择关联页面" clearable class="w100" v-model="formData.menuIds"></el-cascader>
- </el-form-item>
- <el-form-item label="接口名称" prop="name">
- <el-input v-model="formData.name" placeholder="输入接口名称" />
- </el-form-item>
- <el-form-item label="接口地址" prop="address">
- <el-input v-model="formData.address" placeholder="接口地址" />
- </el-form-item>
- </el-form>
- </template>
- <script lang="ts" setup>
- import { ref, reactive, nextTick, watch } from 'vue';
- import api from '/@/api/system';
- import { ApiRow } from '/@/api/model/system/menu';
- import { ruleRequired } from '/@/utils/validator';
- import { ElMessage } from 'element-plus';
- import apiDatahub from '/@/api/datahub';
- const emit = defineEmits(['getList']);
- const showDialog = ref(false);
- const formRef = ref();
- const menuData = ref<any[]>([]);
- const typeData = ref<any[]>([]);
- const methodOptions = ref<any[]>([]);
- const baseForm: ApiRow = {
- menuIds: [],
- id: undefined,
- parentId: undefined,
- name: '',
- types: 2,
- address: '',
- method: '',
- remark: '',
- status: 1,
- };
- const formData = reactive<ApiRow>({
- ...baseForm,
- });
- // 切换分类时清空上级分类的选择。因为接口里不能选择跟分类节点
- watch(
- () => formData.types,
- () => {
- formData.parentId = undefined;
- }
- );
- const ruleForm = {
- parentId: [ruleRequired('上级分类不能为空', 'change')],
- menuIds: [ruleRequired('关联页面不能为空', 'change')],
- method: [ruleRequired('请求方式不能为空', 'change')],
- name: [ruleRequired('接口名称不能为空')],
- address: [ruleRequired('接口地址不能为空')],
- };
- apiDatahub.template.getDictData({ DictType: 'api_methods' }).then((res: any) => {
- methodOptions.value = res.values;
- });
- // 加载菜单列表
- api.menu.getList({ status: -1 }).then((res: any[]) => {
- menuData.value = res;
- });
- const onSubmit = async () => {
- await formRef.value.validate();
- const theApi = formData.id ? api.api.edit : api.api.add;
- await theApi(formData);
- ElMessage.success('操作成功');
- resetForm();
- showDialog.value = false;
- emit('getList');
- };
- const resetForm = async () => {
- Object.assign(formData, { ...baseForm });
- formRef.value && formRef.value.resetFields();
- };
- const open = async (row: any) => {
- resetForm();
- showDialog.value = true;
- api.api.getList({ types: 1, status: -1 }).then((res: any) => {
- typeData.value = res.Info;
- });
- nextTick(() => {
- Object.assign(formData, { method: methodOptions.value.length ? methodOptions.value[0].value : '', ...row });
- });
- };
- defineExpose({ open });
- </script>
|