2026-02-02 16:04:47 +08:00
|
|
|
<template>
|
|
|
|
|
<el-dialog
|
|
|
|
|
v-model="visible"
|
|
|
|
|
:title="dialogTitle"
|
|
|
|
|
width="600px"
|
|
|
|
|
:close-on-click-modal="false"
|
|
|
|
|
destroy-on-close
|
|
|
|
|
@closed="handleClosed"
|
|
|
|
|
>
|
|
|
|
|
<el-form
|
|
|
|
|
ref="formRef"
|
|
|
|
|
:model="form"
|
|
|
|
|
:rules="rules"
|
|
|
|
|
label-width="100px"
|
|
|
|
|
>
|
|
|
|
|
<el-form-item label="应用名称" prop="appName">
|
|
|
|
|
<el-input v-model="form.appName" placeholder="请输入应用名称" maxlength="50" />
|
|
|
|
|
</el-form-item>
|
|
|
|
|
<el-form-item label="应用编码" prop="appCode">
|
|
|
|
|
<el-input v-model="form.appCode" placeholder="保存后自动生成" disabled />
|
|
|
|
|
</el-form-item>
|
2026-02-02 17:11:06 +08:00
|
|
|
<el-form-item label="备注" prop="remark">
|
2026-02-02 16:04:47 +08:00
|
|
|
<el-input
|
2026-02-02 17:11:06 +08:00
|
|
|
v-model="form.remark"
|
2026-02-02 16:04:47 +08:00
|
|
|
type="textarea"
|
2026-02-02 17:11:06 +08:00
|
|
|
placeholder="请输入备注说明"
|
2026-02-02 16:04:47 +08:00
|
|
|
:rows="3"
|
|
|
|
|
maxlength="200"
|
|
|
|
|
show-word-limit
|
|
|
|
|
/>
|
|
|
|
|
</el-form-item>
|
2026-02-02 17:11:06 +08:00
|
|
|
<el-form-item label="联系人" prop="contactPerson">
|
|
|
|
|
<el-input v-model="form.contactPerson" placeholder="请输入联系人" maxlength="20" />
|
2026-02-02 16:04:47 +08:00
|
|
|
</el-form-item>
|
|
|
|
|
<el-form-item label="联系电话" prop="contactPhone">
|
|
|
|
|
<el-input v-model="form.contactPhone" placeholder="请输入联系电话" maxlength="11" />
|
|
|
|
|
</el-form-item>
|
|
|
|
|
<el-form-item label="状态" prop="status">
|
|
|
|
|
<el-switch
|
|
|
|
|
v-model="form.status"
|
|
|
|
|
active-value="0"
|
|
|
|
|
inactive-value="1"
|
|
|
|
|
active-text="正常"
|
|
|
|
|
inactive-text="停用"
|
|
|
|
|
/>
|
|
|
|
|
</el-form-item>
|
2026-02-02 17:11:06 +08:00
|
|
|
<el-form-item label="接口授权" prop="apiCodes">
|
|
|
|
|
<el-checkbox-group v-model="form.apiCodes">
|
2026-02-02 16:04:47 +08:00
|
|
|
<el-checkbox
|
|
|
|
|
v-for="item in apiAuthOptions"
|
2026-02-02 17:11:06 +08:00
|
|
|
:key="item.apiCode"
|
|
|
|
|
:label="item.apiCode"
|
2026-02-02 16:04:47 +08:00
|
|
|
>
|
2026-02-02 17:11:06 +08:00
|
|
|
{{ item.apiName }}
|
2026-02-02 16:04:47 +08:00
|
|
|
</el-checkbox>
|
|
|
|
|
</el-checkbox-group>
|
|
|
|
|
</el-form-item>
|
|
|
|
|
</el-form>
|
|
|
|
|
<template #footer>
|
|
|
|
|
<el-button @click="visible = false">取消</el-button>
|
|
|
|
|
<el-button type="primary" @click="handleSubmit" :loading="submitLoading">确定</el-button>
|
|
|
|
|
</template>
|
|
|
|
|
</el-dialog>
|
|
|
|
|
</template>
|
|
|
|
|
|
|
|
|
|
<script setup>
|
|
|
|
|
/**
|
|
|
|
|
* 应用管理 - 新增/编辑弹窗
|
|
|
|
|
* @author pangu
|
|
|
|
|
*/
|
|
|
|
|
import { ElMessage } from 'element-plus'
|
|
|
|
|
import { computed, nextTick, reactive, ref } from 'vue'
|
2026-02-02 17:11:06 +08:00
|
|
|
import request from '@/utils/request'
|
2026-02-02 16:04:47 +08:00
|
|
|
|
|
|
|
|
const emit = defineEmits(['success'])
|
|
|
|
|
|
|
|
|
|
const visible = ref(false)
|
|
|
|
|
const submitLoading = ref(false)
|
|
|
|
|
const formRef = ref(null)
|
|
|
|
|
const isEdit = ref(false)
|
|
|
|
|
const apiAuthOptions = ref([])
|
|
|
|
|
|
|
|
|
|
const form = reactive({
|
2026-02-02 17:11:06 +08:00
|
|
|
appId: null,
|
2026-02-02 16:04:47 +08:00
|
|
|
appName: '',
|
|
|
|
|
appCode: '',
|
2026-02-02 17:11:06 +08:00
|
|
|
remark: '',
|
|
|
|
|
contactPerson: '',
|
2026-02-02 16:04:47 +08:00
|
|
|
contactPhone: '',
|
|
|
|
|
status: '0',
|
2026-02-02 17:11:06 +08:00
|
|
|
apiCodes: []
|
2026-02-02 16:04:47 +08:00
|
|
|
})
|
|
|
|
|
|
|
|
|
|
const rules = {
|
|
|
|
|
appName: [
|
|
|
|
|
{ required: true, message: '请输入应用名称', trigger: 'blur' }
|
|
|
|
|
],
|
|
|
|
|
contactPhone: [
|
|
|
|
|
{ pattern: /^1[3-9]\d{9}$/, message: '请输入正确的手机号', trigger: 'blur' }
|
|
|
|
|
]
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
const dialogTitle = computed(() => isEdit.value ? '编辑应用' : '新增应用')
|
|
|
|
|
|
|
|
|
|
// 加载接口授权选项
|
|
|
|
|
const loadAuthOptions = async () => {
|
|
|
|
|
try {
|
2026-02-02 17:11:06 +08:00
|
|
|
const res = await request.get('/business/application/apiList')
|
2026-02-02 16:04:47 +08:00
|
|
|
if (res.code === 200) {
|
2026-02-02 17:11:06 +08:00
|
|
|
apiAuthOptions.value = res.data || []
|
2026-02-02 16:04:47 +08:00
|
|
|
}
|
|
|
|
|
} catch (error) {
|
|
|
|
|
console.error('加载接口授权选项失败:', error)
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 打开弹窗
|
|
|
|
|
const open = (row = null) => {
|
|
|
|
|
visible.value = true
|
|
|
|
|
loadAuthOptions()
|
|
|
|
|
|
|
|
|
|
if (row) {
|
|
|
|
|
isEdit.value = true
|
|
|
|
|
nextTick(() => {
|
|
|
|
|
Object.assign(form, {
|
2026-02-02 17:11:06 +08:00
|
|
|
appId: row.appId,
|
2026-02-02 16:04:47 +08:00
|
|
|
appName: row.appName,
|
|
|
|
|
appCode: row.appCode,
|
2026-02-02 17:11:06 +08:00
|
|
|
remark: row.remark || '',
|
|
|
|
|
contactPerson: row.contactPerson || '',
|
2026-02-02 16:04:47 +08:00
|
|
|
contactPhone: row.contactPhone || '',
|
|
|
|
|
status: row.status || '0',
|
2026-02-02 17:11:06 +08:00
|
|
|
apiCodes: row.apiCodes || []
|
2026-02-02 16:04:47 +08:00
|
|
|
})
|
|
|
|
|
})
|
|
|
|
|
} else {
|
|
|
|
|
isEdit.value = false
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 提交表单
|
|
|
|
|
const handleSubmit = async () => {
|
|
|
|
|
try {
|
|
|
|
|
await formRef.value.validate()
|
|
|
|
|
submitLoading.value = true
|
|
|
|
|
|
2026-02-02 17:11:06 +08:00
|
|
|
const method = isEdit.value ? 'put' : 'post'
|
|
|
|
|
const res = await request[method]('/business/application', form)
|
2026-02-02 16:04:47 +08:00
|
|
|
|
|
|
|
|
if (res.code === 200) {
|
|
|
|
|
ElMessage.success(isEdit.value ? '修改成功' : '新增成功')
|
|
|
|
|
visible.value = false
|
|
|
|
|
emit('success')
|
|
|
|
|
} else {
|
|
|
|
|
ElMessage.error(res.msg || '操作失败')
|
|
|
|
|
}
|
|
|
|
|
} catch (error) {
|
|
|
|
|
console.error('表单验证失败或提交失败:', error)
|
|
|
|
|
} finally {
|
|
|
|
|
submitLoading.value = false
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 关闭弹窗后重置表单
|
|
|
|
|
const handleClosed = () => {
|
|
|
|
|
formRef.value?.resetFields()
|
|
|
|
|
Object.assign(form, {
|
2026-02-02 17:11:06 +08:00
|
|
|
appId: null,
|
2026-02-02 16:04:47 +08:00
|
|
|
appName: '',
|
|
|
|
|
appCode: '',
|
2026-02-02 17:11:06 +08:00
|
|
|
remark: '',
|
|
|
|
|
contactPerson: '',
|
2026-02-02 16:04:47 +08:00
|
|
|
contactPhone: '',
|
|
|
|
|
status: '0',
|
2026-02-02 17:11:06 +08:00
|
|
|
apiCodes: []
|
2026-02-02 16:04:47 +08:00
|
|
|
})
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
defineExpose({ open })
|
|
|
|
|
</script>
|