Files
admin-govern/src/views/auth/menu/popupApi.vue

135 lines
4.5 KiB
Vue
Raw Normal View History

2026-01-07 21:01:28 +08:00
<template>
2026-06-18 16:35:16 +08:00
<el-dialog width="500px" v-model.trim="dialogVisible" :title="title">
2026-01-07 21:01:28 +08:00
<el-scrollbar>
<el-form
:mode="form"
:inline="false"
ref="formRef"
:model="form"
label-width="120px"
:rules="rules"
class="form-one"
>
<el-form-item prop="name" label="接口/按钮名称">
2026-06-08 18:34:49 +08:00
<el-input maxlength="32" show-word-limit v-model.trim="form.name" placeholder="请输入接口名称" />
2026-01-07 21:01:28 +08:00
</el-form-item>
<el-form-item prop="code" label="接口/按钮标识">
2026-06-08 18:34:49 +08:00
<el-input maxlength="32" show-word-limit
2026-01-07 21:01:28 +08:00
v-model.trim="form.code"
placeholder="请输入英文接口标识"
/>
</el-form-item>
<el-form-item prop="path" label="接口路径">
2026-06-09 19:51:31 +08:00
<el-input v-model.trim="form.path" placeholder="请输入接口路径" />
2026-01-07 21:01:28 +08:00
</el-form-item>
<el-form-item prop="type" label="接口类型">
<el-radio-group v-model.trim="form.type">
<el-radio :label="1">普通接口</el-radio>
<el-radio :label="2">公用接口</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item prop="sort" label="排序">
2026-06-08 18:34:49 +08:00
<el-input-number v-model.number="form.sort" style="width: 100%;" :min="0" />
2026-01-07 21:01:28 +08:00
</el-form-item>
<el-form-item prop="remark" label="接口/按钮描述">
2026-06-08 18:34:49 +08:00
<el-input show-word-limit
2026-01-07 21:01:28 +08:00
maxlength="300"
2026-06-08 18:34:49 +08:00
2026-01-07 21:01:28 +08:00
v-model.trim="form.remark"
:rows="2"
type="textarea"
placeholder="请输入描述"
/>
</el-form-item>
</el-form>
</el-scrollbar>
<template #footer>
<span class="dialog-footer">
<el-button @click="dialogVisible = false">取消</el-button>
<el-button type="primary" @click="submit">确认</el-button>
</span>
</template>
</el-dialog>
</template>
<script lang="ts" setup>
import { ref, inject } from 'vue'
import { reactive } from 'vue'
import { update, add } from '@/api/user-boot/function'
2026-01-23 09:24:13 +08:00
import { ElMessage } from 'element-plus'
2026-01-07 21:01:28 +08:00
defineOptions({
name: 'auth/menu/popupApi'
})
const emits = defineEmits<{
(e: 'init'): void
}>()
const formRef = ref()
const form: any = reactive({
id: '',
pid: '0',
code: '',
name: '',
path: '',
type: 1,
sort: 100,
remark: ''
})
const rules = {
code: [
2026-01-08 19:51:43 +08:00
{ required: true, message: '请输入标识', trigger: 'blur' },
2026-01-07 21:01:28 +08:00
{
pattern: /^[a-zA-Z_]{1}[a-zA-Z0-9_]{2,20}$/,
message: '请输入至少3-20位英文',
min: 3,
max: 20,
trigger: 'blur'
}
],
name: [{ required: true, message: '请输入接口名称', trigger: 'blur' }],
sort: [{ required: true, message: '请输入排序', trigger: 'blur' }],
path: [{ required: true, message: '请输入接口路径', trigger: 'blur' }]
}
const dialogVisible = ref(false)
const title = ref('新增菜单')
const open = (text: string, data: anyObj) => {
formRef.value?.resetFields()
title.value = text
// 重置表单
for (let key in form) {
form[key] = ''
}
form.type = 1
form.sort = 100
form.pid = data.pid
if (data.id) {
for (let key in form) {
form[key] = data[key] || ''
}
}
dialogVisible.value = true
}
const submit = async () => {
formRef.value.validate(async valid => {
if (valid) {
if (form.id) {
2026-01-23 09:24:13 +08:00
await update(form).then(() => {
ElMessage.success('修改成功!')
})
2026-01-07 21:01:28 +08:00
} else {
let obj = JSON.parse(JSON.stringify(form))
delete obj.id
2026-01-23 09:24:13 +08:00
await add(obj).then(() => {
ElMessage.success('新增成功!')
})
2026-01-07 21:01:28 +08:00
}
emits('init')
dialogVisible.value = false
}
})
}
defineExpose({ open })
</script>