This commit is contained in:
南思 2023-09-04 16:24:12 +08:00
parent 8bf5c835be
commit 85bd434543
2 changed files with 338 additions and 346 deletions

View File

@ -1,358 +1,350 @@
<template> <template>
<!-- 使用示例 --> <!-- 使用示例 -->
<div class="example"> <div class="example">
<el-main> <el-main>
<el-form ref="ruleFormRef" :model="form.region" :rules="addpro"> <el-form ref="ruleFormRef" :model="form.region" :rules="addpro">
<el-row style="margin-bottom: 24px">
<el-col :span="24">
<el-button type="primary" @click="submitForm(ruleFormRef)"
>保存</el-button
>
<el-button @click="sysDept(ruleFormRef)">重置</el-button>
<el-button @click="route.back">返回</el-button>
</el-col>
</el-row>
<el-form-item label="服务名称" prop="name">
<el-input v-model="form.region.name" />
</el-form-item>
<el-row>
<el-col :span="11">
<el-form-item label="所属部门" prop="deptId">
<el-select
@change="log"
v-model="form.region.deptId"
placeholder="请选择部门"
>
<el-option
v-for="(item, index) in play.oplen"
:key="index"
:label="item.name"
:value="item.id"
/>
</el-select>
</el-form-item>
</el-col>
<el-col :span="2" />
<el-col :span="11">
<el-form-item label="资源目录" prop="metadataId">
<el-select
v-model="form.region.metadataId"
placeholder="请选择资源目录"
>
<el-option
v-for="(item, index) in play.region"
:key="index"
:label="item.name"
:value="item.id"
/>
</el-select>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="11">
<el-form-item label="是否需要用户认证" prop="isAuth">
<el-select v-model="form.region.isAuth" placeholder="请选择">
<el-option label="是" :value="1" />
<el-option label="否" :value="0" />
</el-select>
</el-form-item>
</el-col>
<el-col :span="2" />
<el-col :span="11">
<el-form-item label="是否外网公开" prop="isPublic">
<el-select v-model="form.region.isPublic" placeholder="请选择">
<el-option label="是" :value="1" />
<el-option label="否" :value="0" />
</el-select>
</el-form-item>
</el-col>
</el-row>
<el-form-item label="资源描述" prop="intro">
<el-input v-model="form.region.intro" type="textarea" />
</el-form-item>
</el-form>
</el-main>
<el-footer>
<el-row style="margin-bottom: 24px"> <el-row style="margin-bottom: 24px">
<el-col :span="2"> <el-col :span="24">
<el-button type="primary" @click="opneDialogs">新建</el-button> <el-button type="primary" @click="submitForm(ruleFormRef)">保存</el-button>
<el-button @click="sysDept(ruleFormRef)">重置</el-button>
<el-button @click="route.back">返回</el-button>
</el-col> </el-col>
</el-row> </el-row>
<el-table <el-form-item label="服务名称" prop="name">
:header-cell-style="{ background: '#eef1f6', color: '#606266' }" <el-input v-model="form.region.name" />
:data="form.region.interfaceList" </el-form-item>
> <el-row>
<el-table-column prop="sortNo" label="序号" /> <el-col :span="11">
<el-table-column prop="name" label="接口名称" /> <el-form-item label="所属部门" prop="deptId">
<el-table-column prop="url" label="接口地址" /> <el-select @change="log" v-model="form.region.deptId" placeholder="请选择部门">
<el-table-column prop="scope" label="开发范围" /> <el-option v-for="(item, index) in play.oplen" :key="index" :label="item.name" :value="item.id" />
<el-table-column prop="intro" label="接口描述" /> </el-select>
<el-table-column prop="操作" label="操作"> </el-form-item>
<template #default="scope"> </el-col>
<el-button type="danger" text @click="delet(scope)">删除</el-button <el-col :span="2" />
><el-button type="primary" text @click="fromVlauesj(scope)" <el-col :span="11">
>编辑</el-button <el-form-item label="资源目录" prop="metadataId">
> <el-select v-model="form.region.metadataId" placeholder="请选择资源目录">
</template> <el-option v-for="(item, index) in play.region" :key="index" :label="item.name" :value="item.id" />
</el-table-column> </el-select>
</el-table> </el-form-item>
</el-footer> </el-col>
<!-- <yd_diainputXMGL </el-row>
ref="childrenRef" <el-row>
@funFlag="funFlag" <el-col :span="11">
@resetForm="resetForm" <el-form-item label="是否需要用户认证" prop="isAuth">
:inputArray="inputArray" <el-select v-model="form.region.isAuth" placeholder="请选择">
:width="width" <el-option label="是" :value="1" />
:inputArrays="inputArrays" <el-option label="否" :value="0" />
:dialogVisible="moreConditionsXmgl" </el-select>
:control="true" </el-form-item>
/> --> </el-col>
</div> <el-col :span="2" />
</template> <el-col :span="11">
<script setup> <el-form-item label="是否外网公开" prop="isPublic">
import { ref, reactive, watch, nextTick } from "vue"; <el-select v-model="form.region.isPublic" placeholder="请选择">
// import yd_diainputXMGL from "@/components/yd_diang_xmgl.vue"; <el-option label="是" :value="1" />
import { ElMessage, ElMessageBox } from "element-plus"; <el-option label="否" :value="0" />
import http from "@/utils/request.js"; </el-select>
import { useRoute, useRouter } from "vue-router"; </el-form-item>
const route = useRouter(); </el-col>
const routes = useRoute(); </el-row>
const ruleFormRef = ref(); <el-form-item label="资源描述" prop="intro">
const play = reactive({ <el-input v-model="form.region.intro" type="textarea" />
oplen: [], </el-form-item>
region: [], </el-form>
index: "", </el-main>
}); <el-footer>
const form = reactive({ <el-row style="margin-bottom: 24px">
region: { <el-col :span="2">
deptId: "", <el-button type="primary" @click="opneDialogs">新建</el-button>
deptStr: "", </el-col>
id: "", </el-row>
interfaceList: [], <el-table :header-cell-style="{ background: '#eef1f6', color: '#606266' }" :data="interData">
intro: "", <el-table-column prop="catalogId" label="目录" />
isAuth: 0, <el-table-column prop="name" label="接口名称" />
isPublic: 0, <el-table-column prop="url" label="接口地址" />
metadataId: "", <el-table-column prop="tableName" label="表名" />
name: "", <el-table-column prop="fields" label="字段" />
}, <el-table-column prop="scope" label="范围" />
}); <el-table-column prop="state" label="状态">
// <template #default="scope">
const childrenRef = ref(null); <div>
// {{ scope.row.state ? '启用' : '未启用' }}
const handleChildren1 = () => childrenRef.value.resetForms(); </div>
const width = ref("40%"); </template>
const inputArray = reactive([ </el-table-column>
{ <el-table-column prop="操作" label="操作">
type: "input", <template #default="scope">
title: "序号", <el-button type="primary" text @click="fromVlauesj(scope.row)">编辑</el-button>
model: "sortNo", <el-popconfirm title="确定要删除吗?" @confirm="delet(scope.row.id)">
row: 24, <template #reference>
placeholder: "请输入", <el-button type="danger" text>删除</el-button>
optionsValue: "updataOption", </template>
SetectPla: "请选择", </el-popconfirm>
}, </template>
{ </el-table-column>
type: "input", </el-table>
title: "接口名称",
model: "name", <el-dialog v-model="dialogVisible" title="Tips" width="800px" close-on-press-escape="false"
row: 24, close-on-click-modal="false">
placeholder: "请输入", <div style="padding-right: 30px;">
optionsValue: "updataOption", <el-form ref="fromIm" :model="formInline" class="demo-form-inline" label-width="100" :rules="rules">
SetectPla: "请选择", <el-form-item label="目录" prop="catalogId">
}, <el-select v-model="formInline.catalogId" placeholder="请选择目录" clearable>
{ <el-option v-for="item, index in catalogIdList " :key="index" :label="item" :value="item" />
type: "input", </el-select>
title: "接口地址", </el-form-item>
model: "url", <el-form-item label="接口名称:" prop="name">
row: 24, <el-input v-model="formInline.name" placeholder="请输入接口名称" clearable />
placeholder: "请输入", </el-form-item>
optionsValue: "updataOption", <el-form-item label="接口地址:" prop="url">
SetectPla: "请选择", <el-input v-model="formInline.url" placeholder="请输入接口地址" clearable />
}, </el-form-item>
{ <el-form-item label="表名:" prop="tableName">
type: "input", <el-select v-model="formInline.tableName" placeholder="请选择表名" @change="tableChange" clearable>
title: "开发范围", <el-option v-for="item, index in tablesList " :key="index" :label="item" :value="item" />
model: "scope", </el-select>
row: 24, </el-form-item>
placeholder: "请输入", <el-form-item label="字段" prop="fields" v-if="formInline.tableName !== ''">
optionsValue: "updataOption", <el-transfer filterable v-model="formInline.fields" :data="data1" />
SetectPla: "请选择", </el-form-item>
}, <el-form-item label="范围:" prop="scope">
{ <el-input v-model="formInline.scope" placeholder="请输入范围" clearable />
type: "input", </el-form-item>
title: "接口描述", <el-form-item label="简介:" prop="intro">
model: "intro", <el-input v-model="formInline.intro" placeholder="请输入简介" clearable />
row: 24, </el-form-item>
placeholder: "请输入", <el-form-item label="状态:" prop="state">
optionsValue: "updataOption", <el-switch v-model="formInline.state" />
SetectPla: "请选择", </el-form-item>
}, </el-form>
]); </div>
// <template #footer>
const inputArrays = reactive({ <span class="dialog-footer">
sortNo: [{ required: true, message: "内容不能为空", trigger: "blur" }], <el-button @click="interFaceSave(fromIm)">保存</el-button>
name: [{ required: true, message: "内容不能为空", trigger: "blur" }], <el-button type="primary" @click="handleHide(fromIm)">
url: [{ required: true, message: "内容不能为空", trigger: "blur" }], 取消
scope: [{ required: true, message: "内容不能为空", trigger: "blur" }], </el-button>
intro: [{ required: true, message: "内容不能为空", trigger: "blur" }], </span>
}); </template>
const addpro = reactive({ </el-dialog>
name: [{ required: true, message: "内容不能为空", trigger: "blur" }], </el-footer>
deptId: [{ required: true, message: "内容不能为空", trigger: "blur" }], </div>
metadataId: [{ required: true, message: "内容不能为空", trigger: "blur" }], </template>
isAuth: [{ required: true, message: "内容不能为空", trigger: "blur" }], <script setup>
isPublic: [{ required: true, message: "内容不能为空", trigger: "blur" }], import { ref, reactive, watch, onMounted } from "vue";
intro: [{ required: true, message: "内容不能为空", trigger: "blur" }], import { ElMessage, ElMessageBox } from "element-plus";
}); import http from "@/utils/request.js";
/* 更多弹框 */ import { useRoute, useRouter } from "vue-router";
const moreConditionsXmgl = ref(false); const route = useRouter();
const ruleFormRef = ref();
// const dialogVisible = ref(false)
const opneDialogs = () => { const fromIm = ref()
// watch const tablesList = ref([])
inputArray.forEach((element, index) => { const interData = ref([])
if (element.model) {
element.lable = null; const play = reactive({
oplen: [],
region: [],
index: "",
});
const formInline = reactive({
catalogId: '',
name: '',
url: '',
tableName: '',
fields: [],
scope: '',
intro: '',
state: false,
})
const data1 = ref([])
const rules = reactive({
name: [{
required: true,
message: '请输入接口名称',
trigger: 'blur',
}],
url: [{
required: true,
message: '请输入接口地址',
trigger: 'blur',
}],
tableName: [{
required: true,
message: '请输入表名',
trigger: 'blur',
}],
})
const byId = ref('')
const catalogIdList = ref([])
const form = reactive({
region: {
deptId: "",
deptStr: "",
id: "",
interfaceList: [],
intro: "",
isAuth: 0,
isPublic: 0,
metadataId: "",
name: "",
},
});
const opneDialogs = () => {
dialogVisible.value = true
http.get(`/api/interface/tables`).then(response => {
if (response.code == 200) {
tablesList.value = response.data
}
})
}
const tableChange = (val) => {
http.get(`/api/interface/fields?tableName=${val}`).then(response => {
if (response.code == 200) {
data1.value = []
response.data.forEach(item => {
data1.value.push({
key: item.field,
label: `${item.field}(${item.comment ? item.comment : ''})`,
})
})
}
})
}
const interFaceSave = (formEl) => {
if (!formEl) return
formInline.fields = formInline.fields.join(',')
console.log('formInline', formInline);
formEl.validate((valid) => {
if (valid) {
if (byId.value) {
http.post(`/api/interface/${byId.value}`, formInline).then(response => {
if (response.code == 200) {
ElMessage.success('修改成功')
}
})
} else {
http.post(`/api/interface`, formInline).then(response => {
if (response.code == 200) {
ElMessage.success('新增成功')
}
})
} }
}); dialogVisible.value = false
moreConditionsXmgl.value = !moreConditionsXmgl.value; init()
}; handleInterface()
// fromIm.value?.resetFields();
const fromVlauesj = (datas) => {
play.index = datas.$index;
inputArray.forEach((element, index) => {
if (element.model) {
element.lable = datas.row[element.model];
}
});
// id
moreConditionsXmgl.value = !moreConditionsXmgl.value;
};
//
const funFlag = (val) => {
if (play.index == "") {
form.region.interfaceList.push(JSON.parse(JSON.stringify(val)));
handleChildren1();
} else { } else {
form.region.interfaceList[play.index] = JSON.parse(JSON.stringify(val)); return false
play.index = "";
handleChildren1();
} }
}; })
}
const resetForm = (val) => {
console.log(val); const delet = (value) => {
}; console.log('value', value);
const sysDept = (formEl) => { http.delete(`/api/interface/${value}`).then(response => {
if (!formEl) return; if (response.code == 200) {
formEl.resetFields(); console.log('response');
form.region.interfaceList = []; handleInterface()
}; byId.value = ''
// ElMessage.success('删除成功')
const metadataProject = () => {
http.get("/metadata/sysDept").then((resp) => {
if (resp.code == 200) {
play.oplen = resp.data;
} else {
ElMessage.error(resp.message);
}
});
};
const deptId = (e) => {
http.get(`/metadata/metadata/list/?deptId=${e}`).then((resp) => {
if (resp.code == 200) {
play.region = resp.data;
} else {
ElMessage.error(resp.message);
}
});
};
const log = (e) => {
http
.get(`/metadata/metadata/list/?deptId=${form.region.deptId}`)
.then((resp) => {
form.region.metadataId = "";
if (resp.code == 200) {
play.region = resp.data;
} else {
ElMessage.error(resp.message);
}
});
};
const dataCatalog = async () => {
http.post("/metadata/dataCatalog", form.region).then((resp) => {
if (resp.code == 200) {
ElMessage.success("保存成功");
} else {
ElMessage.error(resp.message);
}
});
};
const submitForm = async (formEl) => {
if (!formEl) return;
await formEl.validate((valid, fields) => {
if (valid) {
console.log(form.region.interfaceList.length);
if (form.region.interfaceList.length == 0) {
ElMessage.error("需创建一条接口数据");
} else {
dataCatalog();
}
} else {
console.log("error submit!", fields);
}
});
};
const delet = (e) => {
if (form.region.interfaceList.length <= 1) {
ElMessage.error("需保留一条数据");
} else {
form.region.interfaceList.splice(e.$index, 1);
} }
}; })
// metadataProject();
</script> }
<style lang="scss" scoped> const handleHide = () => {
.example { dialogVisible.value = false
.el-header { fromIm.value?.resetFields();
background-color: rgb(246, 246, 246); init()
}
const init = () => {
formInline.catalogId = '',
formInline.name = '',
formInline.url = '',
formInline.tableName = '',
formInline.fields = [],
formInline.scope = '',
formInline.intro = '',
formInline.state = false
byId.value = ''
}
const fromVlauesj = (val) => {
dialogVisible.value = true
formInline.catalogId = val.catalogId,
formInline.name = val.name,
formInline.url = val.url,
formInline.tableName = val.tableName,
opneDialogs()
tableChange(val.tableName)
formInline.fields = val.fields,
formInline.scope = val.scope,
formInline.intro = val.intro,
formInline.state = val.state
byId.value = val.id
}
const handleInterface = () => {
http.get(`/api/interface`).then(response => {
if (response.code == 200) {
interData.value = response.data
} }
.el-aside { })
width: 15%; }
min-width: 200px;
background-color: #fff; onMounted(() => {
.el-menu { handleInterface()
min-height: calc(100vh - 130px); })
border: #fff solid; </script>
.el-menu-item.is-active { <style lang="scss" scoped>
color: #409eff; .example {
} .el-header {
background-color: rgb(246, 246, 246);
}
.el-aside {
width: 15%;
min-width: 200px;
background-color: #fff;
.el-menu {
min-height: calc(100vh - 130px);
border: #fff solid;
.el-menu-item.is-active {
color: #409eff;
} }
} }
.el-main {
background-color: #fff;
.el-scrollbar {
padding-right: 15px;
}
:deep(.set-select) {
width: 100%;
}
:deep(.el-select) {
width: 100%;
}
}
.el-footer {
padding-top: 15px;
margin-top: 16px;
min-height: calc(50.3vh);
background-color: #fff;
}
} }
.el-button {
padding: 8px 10px; .el-main {
background-color: #fff;
.el-scrollbar {
padding-right: 15px;
}
:deep(.set-select) {
width: 100%;
}
:deep(.el-select) {
width: 100%;
}
} }
</style>
.el-footer {
padding-top: 15px;
margin-top: 16px;
min-height: calc(50.3vh);
background-color: #fff;
}
}
.el-button {
padding: 8px 10px;
}
</style>

View File

@ -30,14 +30,14 @@ export default defineConfig({
'/api': { '/api': {
// target: 'http://10.0.0.29:9999', // target: 'http://10.0.0.29:9999',
// target: 'http://demo35.ydool.net/', // target: 'http://demo35.ydool.net/',
target: 'http://192.168.1.14:7777', target: 'http://192.168.1.27:7777',
// target: 'http://10.0.0.63:7777', // 刘进 // target: 'http://10.0.0.63:7777', // 刘进
changeOrigin: true, changeOrigin: true,
// rewrite: (path) => path.replace(/^\/api/, '') // rewrite: (path) => path.replace(/^\/api/, '')
// ws: true,// 开启webSocket // ws: true,// 开启webSocket
}, },
'/metadata': { '/metadata': {
target: 'http://192.168.1.14:7777', target: 'http://192.168.1.27:7777',
changeOrigin: true, changeOrigin: true,
rewrite: (path) => path.replace(/^\/api/, '') rewrite: (path) => path.replace(/^\/api/, '')
// ws: true,// 开启webSocket // ws: true,// 开启webSocket