Ver Fonte

增加接口管理页面,对接列表接口,新增和编辑等接口修改好对接

yanglzh há 3 anos atrás
pai
commit
436d2a53f3

+ 9 - 0
src/api/model/system/menu.ts

@@ -16,4 +16,13 @@ export interface MenuListRow {
   code: string; // 列表 key
   description?: string; // 描述
   status: 0 | 1; // 0 停用 1启用
+}
+
+export interface ApiRow {
+  id?: number; // ID
+  menuIds: number[]; // 名称
+  name: string; // 名称
+  address: string; // 接口地址
+  remark: string; // 备注
+  status: 0 | 1; // 0 停用 1启用
 }

+ 6 - 3
src/api/system/index.ts

@@ -1,15 +1,18 @@
 import { get, post, del, put } from '/@/utils/request';
 
 export default {
+  api: {
+    getList: (params?: object) => get('/system/api/GetAll', params),
+    add: (data: object) => post('/system/api/ApiAdd', data),
+    del: (id: number) => del('/system/api/apiDel', { id }),
+    edit: (data: object) => put('/system/api/apiEdit', data),
+  },
   menu: {
     getList: (params: object) => get('/system/menu/tree', params),
     detail: (id: number) => get('/system/menu/detail', { id }),
     add: (data: object) => post('/system/menu/add', data),
     del: (id: number) => del('/system/menu/del', { id }),
     edit: (data: object) => put('/system/menu/edit', data),
-    api: {
-      getList: (params: object) => get('/system/menu/api/list', params),
-    },
     btn: {
       getList: (params: object) => get('/system/menu/button/tree', params),
       detail: (id: number) => get('/system/menu/button/detail', { id }),

+ 91 - 0
src/views/system/api/component/edit.vue

@@ -0,0 +1,91 @@
+<template>
+  <el-dialog v-model="showDialog" :title="`${formData.id?'编辑接口':'新增接口'}`" width="600px" :close-on-click-modal="false" :close-on-press-escape="false">
+    <el-form ref="formRef" :model="formData" :rules="ruleForm" label-width="80px">
+      <el-form-item label="关联页面" prop="parentId">
+        <el-cascader :options="menuData" :props="{ checkStrictly: false,multiple:true,emitPath: false, value: 'id', label: 'name' }" 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-item label="状态" prop="status">
+        <el-switch v-model="formData.status" :active-value="1" :inactive-value="0" />
+      </el-form-item>
+      <el-form-item label="备注" prop="remark">
+        <el-input v-model="formData.remark" type="textarea" :rows="3" />
+      </el-form-item>
+    </el-form>
+    <template #footer>
+      <div class="dialog-footer">
+        <el-button @click="showDialog = false">取消</el-button>
+        <el-button type="primary" @click="onSubmit">确定</el-button>
+      </div>
+    </template>
+  </el-dialog>
+</template>
+
+<script lang="ts" setup>
+import { ref, reactive } from 'vue';
+import api from '/@/api/system';
+import { ApiRow } from '/@/api/model/system/menu';
+import { ruleRequired } from '/@/utils/validator';
+import { ElMessage } from 'element-plus';
+
+const emit = defineEmits(['getList']);
+
+const showDialog = ref(false);
+const formRef = ref();
+const menuData = ref<any[]>([]);
+
+const baseForm: ApiRow = {
+	menuIds: [],
+	name: '',
+	address: '',
+	remark: '',
+	status: 1,
+};
+
+const formData = reactive<ApiRow>({
+	...baseForm,
+});
+
+const ruleForm = {
+	menuIds: [ruleRequired('关联页面不能为空')],
+	name: [ruleRequired('接口名称不能为空')],
+	address: [ruleRequired('接口地址不能为空')],
+};
+
+// 加载菜单列表
+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();
+	Object.assign(formData, { ...row });
+	showDialog.value = true;
+	// console.log(row);
+};
+
+defineExpose({ open });
+</script>

+ 71 - 0
src/views/system/api/index.vue

@@ -0,0 +1,71 @@
+<template>
+  <div class="page">
+    <el-card shadow="hover">
+      <div class="search">
+        <el-form :inline="true">
+          <el-form-item>
+            <el-button size="default" type="success" class="mr-3" @click="addOrEdit()">
+              <el-icon>
+                <ele-FolderAdd />
+              </el-icon>
+              新增接口
+            </el-button>
+          </el-form-item>
+        </el-form>
+      </div>
+      <el-table :data="tableData" style="width: 100%">
+        <el-table-column type="index" label="序号" width="60" align="center" />
+        <el-table-column prop="name" label="接口名称" show-overflow-tooltip></el-table-column>
+        <el-table-column prop="address" label="接口地址" show-overflow-tooltip></el-table-column>
+        <el-table-column prop="status" label="状态" min-width="100" align="center">
+          <template #default="scope">
+            <el-switch v-model="scope.row.status" inline-prompt :active-value="1" :inactive-value="0" active-text="启" inactive-text="禁" @change="handleStatusChange(scope.row)">
+            </el-switch>
+          </template>
+        </el-table-column>
+        <el-table-column label="操作" width="100" align="center">
+          <template #default="scope">
+            <el-button size="small" text type="warning" @click="addOrEdit(scope.row)">修改</el-button>
+            <el-button size="small" text type="danger" @click="onDel(scope.row)">删除</el-button>
+          </template>
+        </el-table-column>
+      </el-table>
+    </el-card>
+    <EditForm ref="editFormRef" @getList="getList"></EditForm>
+  </div>
+</template>
+
+<script lang="ts" setup>
+import { ref } from 'vue';
+import EditForm from './component/edit.vue';
+import { ApiRow } from '/@/api/model/system/menu';
+import api from '/@/api/system';
+import { ElMessageBox, ElMessage } from 'element-plus';
+
+const tableData = ref<ApiRow[]>([]);
+const editFormRef = ref();
+
+const getList = async () => {
+	tableData.value = [];
+	let res = await api.api.getList();
+	tableData.value = res || [];
+};
+
+getList();
+
+const addOrEdit = (row?: ApiRow) => {
+	editFormRef.value.open(row);
+};
+
+const onDel = (row: ApiRow) => {
+	ElMessageBox.confirm(`此操作将删除按钮:“${row.name}”,是否继续?`, '提示', {
+		confirmButtonText: '确认',
+		cancelButtonText: '取消',
+		type: 'warning',
+	}).then(async () => {
+		await api.menu.btn.del(row.id as number);
+		ElMessage.success('删除成功');
+		getList();
+	});
+};
+</script>

+ 1 - 1
src/views/system/menu/component/btn.vue

@@ -5,7 +5,7 @@
         <el-icon>
           <ele-FolderAdd />
         </el-icon>
-        新增
+        新增按钮
       </el-button>
 
       <el-dropdown @command="addCommonType">

+ 2 - 2
src/views/system/menu/component/list-form.vue

@@ -5,10 +5,10 @@
         <el-cascader :options="parentData" :props="{ label: 'name',value: 'id',checkStrictly: true,emitPath: false }" placeholder="请选择上级菜单" clearable class="w100" v-model="formData.parentId"></el-cascader>
       </el-form-item>
       <el-form-item label="字段名称" prop="name">
-        <el-input v-model="formData.name" placeholder="输入名称" />
+        <el-input v-model="formData.name" placeholder="字段名称" />
       </el-form-item>
       <el-form-item label="字段key" prop="code">
-        <el-input v-model="formData.code" placeholder="输入编码" />
+        <el-input v-model="formData.code" placeholder="输入字段key" />
       </el-form-item>
       <el-form-item label="状态" prop="status">
         <el-switch v-model="formData.status" :active-value="1" :inactive-value="0" />

+ 1 - 1
src/views/system/menu/component/list.vue

@@ -5,7 +5,7 @@
         <el-icon>
           <ele-FolderAdd />
         </el-icon>
-        新增
+        新增
       </el-button>
     </div>