feat: 新增资产授权
commit
e66670f576
|
@ -39,6 +39,7 @@
|
|||
"@riophae/vue-treeselect": "0.4.0",
|
||||
"axios": "0.24.0",
|
||||
"clipboard": "2.0.8",
|
||||
"codemirror": "^5.65.16",
|
||||
"core-js": "3.25.3",
|
||||
"echarts": "5.4.0",
|
||||
"element-ui": "2.15.13",
|
||||
|
@ -53,6 +54,7 @@
|
|||
"screenfull": "5.0.2",
|
||||
"sortablejs": "1.10.2",
|
||||
"vue": "2.6.12",
|
||||
"vue-codemirror": "^6.1.1",
|
||||
"vue-count-to": "1.0.13",
|
||||
"vue-cropper": "0.5.5",
|
||||
"vue-meta": "2.4.0",
|
||||
|
|
|
@ -0,0 +1,67 @@
|
|||
import request from '@/utils/request'
|
||||
|
||||
// 查询规则引擎列表
|
||||
export function listRuleengine(query) {
|
||||
return request({
|
||||
url: '/rule/rule/list',
|
||||
method: 'get',
|
||||
params: query
|
||||
})
|
||||
}
|
||||
|
||||
// 查询规则引擎详细
|
||||
export function getRuleengine(id) {
|
||||
return request({
|
||||
url: '/rule/rule/' + id,
|
||||
method: 'get'
|
||||
})
|
||||
}
|
||||
|
||||
export function ruleengine(content) {
|
||||
return request({
|
||||
url: `/rule/rule/compiler`,
|
||||
method: 'post',
|
||||
data:content
|
||||
})
|
||||
}
|
||||
|
||||
export function getRuleContent(ruleId) {
|
||||
return request({
|
||||
url: `/rule/rule/getRuleContent?ruleId=`+ruleId,
|
||||
method: 'get'
|
||||
})
|
||||
}
|
||||
|
||||
export function loader(ruleId) {
|
||||
return request({
|
||||
url: `/rule/rule/loader?ruleId=`+ruleId,
|
||||
method: 'get'
|
||||
})
|
||||
}
|
||||
|
||||
|
||||
// 新增规则引擎
|
||||
export function addRuleengine(data) {
|
||||
return request({
|
||||
url: '/rule/rule',
|
||||
method: 'post',
|
||||
data: data
|
||||
})
|
||||
}
|
||||
|
||||
// 修改规则引擎
|
||||
export function updateRuleengine(data) {
|
||||
return request({
|
||||
url: '/rule/rule/'+data.id,
|
||||
method: 'put',
|
||||
data: data
|
||||
})
|
||||
}
|
||||
|
||||
// 删除规则引擎
|
||||
export function delRuleengine(id) {
|
||||
return request({
|
||||
url: '/rule/rule/' + id,
|
||||
method: 'delete'
|
||||
})
|
||||
}
|
|
@ -0,0 +1,232 @@
|
|||
<template>
|
||||
<div class="app-container">
|
||||
<el-form ref="form" :model="baseInfo" label-width="120px">
|
||||
<el-row>
|
||||
<el-col :offset="2" :span="8">
|
||||
<el-form-item label="数据接入名称" prop="nickName">
|
||||
<el-input v-model="baseInfo.accessSourceName" disabled/>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :offset="2" :span="8">
|
||||
<el-form-item label="系统名称" prop="userName">
|
||||
<el-input v-model="baseInfo.dataSourceSystemName" disabled/>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :offset="2" :span="8">
|
||||
<el-form-item label="数据库名称" prop="nickName">
|
||||
<el-input v-model="baseInfo.databaseName" disabled/>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
</el-form>
|
||||
|
||||
<el-tabs type="border-card" v-model="idType" style="margin-top: 20px">
|
||||
<el-tab-pane label="部门授权" name="dept">
|
||||
<el-table
|
||||
ref="deptTable"
|
||||
v-loading="loading"
|
||||
:data="deptList"
|
||||
:default-expand-all="true"
|
||||
:tree-props="{children: 'children', hasChildren: 'hasChildren'}"
|
||||
row-key="deptId"
|
||||
>
|
||||
<el-table-column label="部门名称" prop="deptName" ></el-table-column>
|
||||
<el-table-column label="部门负责人" prop="leader" ></el-table-column>
|
||||
<el-table-column label="邮箱" prop="email" ></el-table-column>
|
||||
<el-table-column align="center" label="创建时间" prop="createTime" >
|
||||
<template slot-scope="scope">
|
||||
<span>{{ parseTime(scope.row.createTime) }}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column align="center" label="操作" prop="createTime" >
|
||||
<template slot-scope="scope">
|
||||
<el-switch
|
||||
style="display: block"
|
||||
v-model="scope.row.isAuth"
|
||||
@change="(val)=>authChange(val,scope.row,scope.row.deptId)"
|
||||
active-color="#13ce66"
|
||||
inactive-color="#ff4949"
|
||||
active-text="已授权"
|
||||
inactive-text="未授权">
|
||||
</el-switch>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
<pagination v-show="total> 0" :limit.sync="pageSize" :page.sync="pageNum" :total="total"/>
|
||||
</el-tab-pane>
|
||||
<el-tab-pane label="用户授权" name="user">
|
||||
<el-table ref="table" v-loading="loading" :data="userList">
|
||||
<el-table-column align="center" label="用户名称" prop="userName"/>
|
||||
<el-table-column align="center" label="用户昵称" prop="nickName"/>
|
||||
<el-table-column align="center" label="用户部门" prop="dept.deptName"/>
|
||||
<el-table-column align="center" label="用户邮箱" prop="email"/>
|
||||
<el-table-column align="center" label="用户手机号" prop="phonenumber"/>
|
||||
<el-table-column align="center" label="创建时间" prop="createTime" />
|
||||
<el-table-column align="center" label="操作" prop="createTime" width="200px" >
|
||||
<template slot-scope="scope">
|
||||
<el-switch
|
||||
style="display: block"
|
||||
v-model="scope.row.isAuth"
|
||||
@change="(val)=>authChange(val,scope.row,scope.row.userId)"
|
||||
active-color="#13ce66"
|
||||
inactive-color="#ff4949"
|
||||
active-text="已授权"
|
||||
inactive-text="未授权">
|
||||
</el-switch>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
<pagination v-show="total> 0" :limit.sync="pageSize" :page.sync="pageNum" :total="total"/>
|
||||
</el-tab-pane>
|
||||
</el-tabs>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
|
||||
import { parseTime } from '@/utils/muyu'
|
||||
import {listDept} from "@/api/system/dept";
|
||||
import {listUser} from "@/api/system/user";
|
||||
import {addAuth, delAuth, listAuth} from "@/api/accredit/auth";
|
||||
|
||||
export default {
|
||||
name: "AuthDataSource",
|
||||
props:{
|
||||
baseInfo:{
|
||||
type:Object,
|
||||
default:{}
|
||||
}
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
// 遮罩层
|
||||
loading: true,
|
||||
idType: "dept",
|
||||
// 分页信息
|
||||
total: 0,
|
||||
pageNum: 1,
|
||||
pageSize: 1,
|
||||
deptData: [],
|
||||
// 部门列表
|
||||
deptList: [],
|
||||
// 用户列表
|
||||
userList: [],
|
||||
authType:'dataSource',
|
||||
argumentsList:{
|
||||
authId:"",
|
||||
idType:"",
|
||||
authData:"",
|
||||
authType:"",
|
||||
}
|
||||
};
|
||||
},
|
||||
watch:{
|
||||
baseInfo:{
|
||||
handler(){
|
||||
this.loading = true;
|
||||
setTimeout(() => this.loading = false, 200)
|
||||
this.init();
|
||||
},
|
||||
immediate:true,
|
||||
deep:true
|
||||
},
|
||||
idType:{
|
||||
handler(){
|
||||
this.setAuthInfo();
|
||||
},
|
||||
immediate:true
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
parseTime,
|
||||
init() {
|
||||
listDept(null).then(response => {
|
||||
//部门集合
|
||||
this.deptData = response.data;
|
||||
//转换成树状图
|
||||
this.deptList = this.handleTree(response.data, "deptId");
|
||||
});
|
||||
|
||||
listUser(null).then(response => {
|
||||
//用户集合
|
||||
this.userList = response.data.rows;
|
||||
}
|
||||
);
|
||||
setTimeout(() => {
|
||||
this.setAuthInfo();
|
||||
}, 600);
|
||||
},
|
||||
setAuthInfo() {
|
||||
//获取是否存在
|
||||
listAuth({idType: this.idType, authType: this.authType}).then(response => {
|
||||
let data;
|
||||
if (this.idType === 'dept') {
|
||||
data = this.deptData
|
||||
data.forEach(x => {
|
||||
response.data.rows.forEach(y => {
|
||||
console.log("y",y)
|
||||
if (this.idType === 'dept' && x.deptId === y.authId && this.baseInfo.databaseName==y.authData) {
|
||||
console.log("y1是等于什么=?",y)
|
||||
this.$set(x, 'isAuth', true);
|
||||
this.$set(x, 'assetAuthId', y.databaseName);
|
||||
} else if (this.idType === 'user' && x.userId === y.authId && this.baseInfo.databaseName==y.authData) {
|
||||
console.log("y2是等于什么=?",y)
|
||||
this.$set(x, 'isAuth', true);
|
||||
this.$set(x, 'assetAuthId', y.databaseName);
|
||||
}
|
||||
})
|
||||
})
|
||||
} else {
|
||||
data = this.userList;
|
||||
data.forEach(x => {
|
||||
response.data.rows.forEach(y => {
|
||||
if (this.idType === 'dept' && x.deptId === y.authId && this.baseInfo.databaseName==y.authData) {
|
||||
console.log("y1是等于什么=?",y)
|
||||
this.$set(x, 'isAuth', true);
|
||||
this.$set(x, 'assetAuthId', y.databaseName);
|
||||
} else if (this.idType === 'user' && x.userId === y.authId && this.baseInfo.databaseName==y.authData) {
|
||||
console.log("y2是等于什么=?",y)
|
||||
this.$set(x, 'isAuth', true);
|
||||
this.$set(x, 'assetAuthId', y.databaseName);
|
||||
}
|
||||
})
|
||||
})
|
||||
}
|
||||
if(this.idType === 'dept'){
|
||||
this.deptList = this.handleTree(this.deptData, "deptId");
|
||||
}
|
||||
})
|
||||
},
|
||||
authChange(val, row, id) {
|
||||
if (val) {
|
||||
//增
|
||||
addAuth({
|
||||
authId: id, idType: this.idType,
|
||||
authData: this.baseInfo.databaseName
|
||||
, authType: this.authType
|
||||
}).then(response => {
|
||||
this.$message.success("授权成功");
|
||||
this.setAuthInfo();
|
||||
});
|
||||
} else {
|
||||
//删
|
||||
console.log("val",val)
|
||||
console.log("row",row)
|
||||
console.log("id",id)
|
||||
|
||||
this.argumentsList={}
|
||||
|
||||
this.argumentsList.authId=id
|
||||
this.argumentsList.authData=this.baseInfo.databaseName
|
||||
this.argumentsList.authType=this.authType
|
||||
this.argumentsList.idType=this.idType
|
||||
|
||||
delAuth(this.argumentsList).then(response => {
|
||||
this.$message.success("取消授权成功");
|
||||
this.setAuthInfo();
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
</script>
|
|
@ -0,0 +1,200 @@
|
|||
<template>
|
||||
<div class="app-container">
|
||||
<el-descriptions title="基本信息" direction="vertical" :column="4" border>
|
||||
<el-descriptions-item label="数据接入名称">{{baseInfo.accessSourceName}}</el-descriptions-item>
|
||||
<el-descriptions-item label="系统名称">{{baseInfo.dataSourceSystemName}}</el-descriptions-item>
|
||||
<el-descriptions-item label="数据库名称" :span="2">{{baseInfo.databaseName}}</el-descriptions-item>
|
||||
<el-descriptions-item label="表名称">{{asset2.name}}</el-descriptions-item>
|
||||
<el-descriptions-item label="表中文名称">{{asset2.as}}</el-descriptions-item>
|
||||
<el-descriptions-item label="数据量">{{asset2.dataTotal}}</el-descriptions-item>
|
||||
</el-descriptions>
|
||||
|
||||
<el-tabs type="border-card" v-model="idType" style="margin-top: 20px">
|
||||
<el-tab-pane label="部门授权" name="dept">
|
||||
<el-table
|
||||
ref="deptTable"
|
||||
v-loading="loading"
|
||||
:data="deptList"
|
||||
:default-expand-all="true"
|
||||
:tree-props="{children: 'children', hasChildren: 'hasChildren'}"
|
||||
row-key="deptId"
|
||||
>
|
||||
<el-table-column label="部门名称" prop="deptName" ></el-table-column>
|
||||
<el-table-column label="部门负责人" prop="leader" ></el-table-column>
|
||||
<el-table-column label="邮箱" prop="email" ></el-table-column>
|
||||
<el-table-column align="center" label="创建时间" prop="createTime" >
|
||||
<template slot-scope="scope">
|
||||
<span>{{ parseTime(scope.row.createTime) }}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column align="center" label="操作" prop="createTime" >
|
||||
<template slot-scope="scope">
|
||||
<el-switch
|
||||
style="display: block"
|
||||
v-model="scope.row.isAuth"
|
||||
@change="(val)=>authChange(val,scope.row,scope.row.deptId)"
|
||||
active-color="#13ce66"
|
||||
inactive-color="#ff4949"
|
||||
active-text="已授权"
|
||||
inactive-text="未授权">
|
||||
</el-switch>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
<pagination v-show="total> 0" :limit.sync="pageSize" :page.sync="pageNum" :total="total"/>
|
||||
</el-tab-pane>
|
||||
<el-tab-pane label="用户授权" name="user">
|
||||
<el-table ref="table" v-loading="loading" :data="userList">
|
||||
<el-table-column align="center" label="用户名称" prop="userName"/>
|
||||
<el-table-column align="center" label="用户昵称" prop="nickName"/>
|
||||
<el-table-column align="center" label="用户部门" prop="dept.deptName"/>
|
||||
<el-table-column align="center" label="用户邮箱" prop="email"/>
|
||||
<el-table-column align="center" label="用户手机号" prop="phonenumber"/>
|
||||
<el-table-column align="center" label="创建时间" prop="createTime" />
|
||||
<el-table-column align="center" label="操作" prop="createTime" width="200px" >
|
||||
<template slot-scope="scope">
|
||||
<el-switch
|
||||
style="display: block"
|
||||
v-model="scope.row.isAuth"
|
||||
active-color="#13ce66"
|
||||
inactive-color="#ff4949"
|
||||
@change="(val)=>authChange(val,scope.row,scope.row.userId)"
|
||||
active-text="已授权"
|
||||
inactive-text="未授权">
|
||||
</el-switch>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
<pagination v-show="total> 0" :limit.sync="pageSize" :page.sync="pageNum" :total="total"/>
|
||||
</el-tab-pane>
|
||||
</el-tabs>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
|
||||
import { parseTime } from '@/utils/muyu'
|
||||
import {listDept} from "@/api/system/dept";
|
||||
import {listUser} from "@/api/system/user";
|
||||
import {addAuth, delAuth, listAuth} from "@/api/accredit/auth";
|
||||
|
||||
export default {
|
||||
name: "AuthTable",
|
||||
props:{
|
||||
baseInfo:{
|
||||
type:Object,
|
||||
default:{}
|
||||
},
|
||||
asset2:{
|
||||
type:Object,
|
||||
default:{}
|
||||
}
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
// 遮罩层
|
||||
loading: true,
|
||||
idType: "dept",
|
||||
// 分页信息
|
||||
total: 0,
|
||||
pageNum: 1,
|
||||
pageSize: 1,
|
||||
deptData:[],
|
||||
// 部门列表
|
||||
deptList: [],
|
||||
// 用户列表
|
||||
userList: [],
|
||||
authType:'table',
|
||||
argumentsList:{
|
||||
authId:"",
|
||||
idType:"",
|
||||
authData:"",
|
||||
authType:"",
|
||||
}
|
||||
};
|
||||
},
|
||||
watch:{
|
||||
baseInfo:{
|
||||
handler(){
|
||||
this.loading = true;
|
||||
setTimeout(() => this.loading = false, 200)
|
||||
this.init();
|
||||
},
|
||||
immediate:true,
|
||||
deep:true
|
||||
},
|
||||
idType:{
|
||||
handler(){
|
||||
this.setAuthInfo();
|
||||
},
|
||||
immediate:true
|
||||
},
|
||||
},
|
||||
methods: {
|
||||
parseTime,
|
||||
init(){
|
||||
listDept(null).then(response => {
|
||||
this.deptData = response.data;
|
||||
this.deptList = this.handleTree(response.data, "deptId");
|
||||
});
|
||||
listUser(null).then(response => {
|
||||
this.userList = response.data.rows;
|
||||
}
|
||||
);
|
||||
setTimeout(()=>{
|
||||
this.setAuthInfo();
|
||||
},600);
|
||||
},
|
||||
setAuthInfo(){
|
||||
listAuth({idType:this.idType,authType:this.authType}).then(response=>{
|
||||
let data;
|
||||
if(this.idType==='dept'){
|
||||
data=this.deptData;
|
||||
}else {
|
||||
data=this.userList;
|
||||
}
|
||||
data.forEach(x=>{
|
||||
response.data.rows.forEach(y=>{
|
||||
let id=y.authData.split(",")[1];
|
||||
if(this.idType==='dept'&&x.deptId===y.authId&&this.baseInfo.databaseName +","+this.asset2.name==y.authData){
|
||||
console.log(this.baseInfo)
|
||||
this.$set(x,'isAuth',true);
|
||||
this.$set(x,'assetAuthId',y.id);
|
||||
}else if(this.idType==='user'&&x.userId===y.authId&&this.baseInfo.databaseName +","+this.asset2.name==y.authData){
|
||||
this.$set(x,'isAuth',true);
|
||||
this.$set(x,'assetAuthId',y.id);
|
||||
}
|
||||
})
|
||||
})
|
||||
if(this.idType === 'dept'){
|
||||
this.deptList = this.handleTree(this.deptData, "deptId");
|
||||
}
|
||||
})
|
||||
},
|
||||
authChange(val,row,id){
|
||||
if(val){
|
||||
//增
|
||||
addAuth({authId:id,idType:this.idType,
|
||||
authData:this.baseInfo.databaseName+','+this.asset2.name
|
||||
,authType:this.authType}).then(response=>{
|
||||
this.$message.success("授权成功");
|
||||
this.setAuthInfo();
|
||||
});
|
||||
}else {
|
||||
this.argumentsList={}
|
||||
|
||||
this.argumentsList.authId=id
|
||||
this.argumentsList.authData=this.baseInfo.databaseName +","+ this.asset2.name
|
||||
this.argumentsList.authType=this.authType
|
||||
this.argumentsList.idType=this.idType
|
||||
|
||||
//删
|
||||
delAuth(this.argumentsList).then(response=>{
|
||||
this.$message.success("取消授权成功");
|
||||
this.setAuthInfo();
|
||||
});
|
||||
}
|
||||
}
|
||||
},
|
||||
};
|
||||
</script>
|
|
@ -0,0 +1,132 @@
|
|||
<template>
|
||||
|
||||
|
||||
<el-container :style="{height: mainHeight + 'px'}">
|
||||
<el-aside>
|
||||
<el-tree :data="parentList"
|
||||
:expand-on-click-node="false"
|
||||
:load="expandTable"
|
||||
lazy
|
||||
@node-click="handleNodeClick"
|
||||
:props="defaultProps">
|
||||
<div class="custom-tree-node" slot-scope="{ node, data }">
|
||||
<div v-if="data.type === 0" @click="select(data.id)">{{ data.accessSourceName + '(' + data.databaseName + '-' + data.dataSourceSystemName + ')' }}</div>
|
||||
<div v-if="data.type === 1">{{ data.name + '-'+data.as + '(' + data.dataTotal+'条)' }}</div>
|
||||
</div>
|
||||
</el-tree>
|
||||
</el-aside>
|
||||
<el-main>
|
||||
<el-container>
|
||||
<el-main>
|
||||
<el-empty v-if="showAssets === null" description="暂无数据" style="height: 100%;background-color: white"></el-empty>
|
||||
<auth-data-source v-if="showAssets === 0" :baseInfo="asset" />
|
||||
<auth-table v-else-if="showAssets === 1" :baseInfo="asset" :asset2="asset2"/>
|
||||
</el-main>
|
||||
</el-container>
|
||||
</el-main>
|
||||
</el-container>
|
||||
|
||||
</template>
|
||||
<script>
|
||||
|
||||
import {
|
||||
findStructure,
|
||||
structureList,
|
||||
} from '@/api/dataSource/source'
|
||||
import AuthDataSource from '@/views/dataSource/assetAuthorization/auth/AuthDataSource.vue'
|
||||
import AuthTable from '@/views/dataSource/assetAuthorization/auth/AuthTable.vue'
|
||||
export default {
|
||||
|
||||
name: 'assetAuthorization',
|
||||
components: { AuthTable, AuthDataSource},
|
||||
data() {
|
||||
return {
|
||||
mainHeight: window.innerHeight - 85,
|
||||
showAssets:null,
|
||||
parentList:[],
|
||||
defaultProps: {
|
||||
children: 'childrenList',
|
||||
label: 'name'
|
||||
},
|
||||
showAuth:null,
|
||||
asset:{},
|
||||
asset2:{},
|
||||
}
|
||||
},
|
||||
created() {
|
||||
this.getList();
|
||||
},
|
||||
methods: {
|
||||
handleNodeClick(data,node) {
|
||||
if (node.level==1){
|
||||
this.asset ={}
|
||||
console.log(data)
|
||||
this.asset.accessSourceName=data.accessSourceName
|
||||
this.asset.dataSourceSystemName=data.dataSourceSystemName
|
||||
this.asset.databaseName=data.databaseName
|
||||
console.log("asset",this.asset)
|
||||
}
|
||||
|
||||
if(node.level === 2) {
|
||||
this.asset2 ={}
|
||||
console.log(data)
|
||||
this.asset2.name=data.name
|
||||
this.asset2.as=data.as
|
||||
this.asset2.dataTotal=data.dataTotal
|
||||
console.log("asset",this.asset)
|
||||
}
|
||||
},
|
||||
expandTable(node, resolve) {
|
||||
if (node.level === 0){
|
||||
return resolve(this.parentList);
|
||||
}
|
||||
|
||||
const { data } = node;
|
||||
|
||||
this.showAssets = data.type;
|
||||
|
||||
if (data.type === 1) {
|
||||
return resolve([])
|
||||
}
|
||||
// 模拟异步操作,延迟返回子节点数据
|
||||
setTimeout(() => {
|
||||
resolve(this.childrenList);
|
||||
}, 500);
|
||||
|
||||
// 设置标题
|
||||
this.title = data.accessSourceName + '(' + data.databaseName + '-' + data.dataSourceSystemName + ')';
|
||||
},
|
||||
select(id){
|
||||
structureList(id).then(
|
||||
res=>{
|
||||
this.childrenList=res.data.databaseTableInformationList
|
||||
}
|
||||
)
|
||||
},
|
||||
//树状列表
|
||||
getList(){
|
||||
this.loading =true;
|
||||
findStructure().then(
|
||||
res=>{
|
||||
this.parentList=res.data.assetStructureList;
|
||||
}
|
||||
)
|
||||
},
|
||||
}
|
||||
}
|
||||
</script>
|
||||
<style scoped lang="scss">
|
||||
.el-aside {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
width: 400px;
|
||||
background-color: white;
|
||||
}
|
||||
|
||||
.el-main {
|
||||
background-color: #f1f1f1;
|
||||
}
|
||||
.custom-tree-node{
|
||||
height: 30px;
|
||||
}
|
||||
</style>
|
|
@ -0,0 +1,483 @@
|
|||
<template>
|
||||
<div class="app-container">
|
||||
<el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
|
||||
<el-form-item label="规则名称" prop="name">
|
||||
<el-input
|
||||
v-model="queryParams.name"
|
||||
placeholder="请输入规则名称"
|
||||
clearable
|
||||
@keyup.enter.native="handleQuery"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="规则类型" prop="type">
|
||||
<el-select v-model="queryParams.type" placeholder="请选择规则类型" clearable>
|
||||
<el-option
|
||||
v-for="dict in dict.type.rule_engine_type"
|
||||
:key="dict.value"
|
||||
:label="dict.label"
|
||||
:value="dict.value"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="是否激活" prop="isActivate">
|
||||
<el-select v-model="queryParams.isActivate" placeholder="请选择是否激活" clearable>
|
||||
<el-option
|
||||
v-for="dict in dict.type.rule_engine_activate_status"
|
||||
:key="dict.value"
|
||||
:label="dict.label"
|
||||
:value="dict.value"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="规则状态" prop="status">
|
||||
<el-select v-model="queryParams.status" placeholder="请选择规则状态" clearable>
|
||||
<el-option
|
||||
v-for="dict in dict.type.sys_normal_disable"
|
||||
:key="dict.value"
|
||||
:label="dict.label"
|
||||
:value="dict.value"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
|
||||
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
|
||||
<el-row :gutter="10" class="mb8">
|
||||
<el-col :span="1.5">
|
||||
<el-button
|
||||
type="primary"
|
||||
plain
|
||||
icon="el-icon-plus"
|
||||
size="mini"
|
||||
@click="handleAdd"
|
||||
v-hasPermi="['rule:rule:add']"
|
||||
>新增
|
||||
</el-button>
|
||||
</el-col>
|
||||
<el-col :span="1.5">
|
||||
<el-button
|
||||
type="danger"
|
||||
plain
|
||||
icon="el-icon-delete"
|
||||
size="mini"
|
||||
:disabled="multiple"
|
||||
@click="handleDelete"
|
||||
v-hasPermi="['rule:rule:remove']"
|
||||
>删除
|
||||
</el-button>
|
||||
</el-col>
|
||||
<el-col :span="1.5">
|
||||
<el-button
|
||||
type="warning"
|
||||
plain
|
||||
icon="el-icon-download"
|
||||
size="mini"
|
||||
@click="handleExport"
|
||||
v-hasPermi="['rule:rule:export']"
|
||||
>导出
|
||||
</el-button>
|
||||
</el-col>
|
||||
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
|
||||
</el-row>
|
||||
|
||||
<el-table v-loading="loading" :data="engineList" @selection-change="handleSelectionChange">
|
||||
<el-table-column type="selection" width="55" align="center"/>
|
||||
<el-table-column label="规则名称" align="center" prop="name"/>
|
||||
<el-table-column label="规则类型" align="center" prop="type">
|
||||
<template slot-scope="scope">
|
||||
<dict-tag :options="dict.type.rule_engine_type" :value="scope.row.type"/>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="规则作用域" align="center" prop="level">
|
||||
<template slot-scope="scope">
|
||||
<dict-tag :options="dict.type.rule_engine_level" :value="scope.row.level"/>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="引擎编码" align="center" prop="code"/>
|
||||
<el-table-column label="是否激活" align="center" prop="isActivate">
|
||||
<template slot-scope="scope">
|
||||
<dict-tag :options="dict.type.rule_engine_activate_status" :value="scope.row.isActivate"/>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="规则状态" align="center" prop="status">
|
||||
<template slot-scope="scope">
|
||||
<dict-tag :options="dict.type.sys_normal_disable" :value="scope.row.status"/>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="操作" align="center" class-name="small-padding fixed-width">
|
||||
<template slot-scope="scope">
|
||||
<el-button
|
||||
size="mini"
|
||||
type="text"
|
||||
@click="loader(scope.row)"
|
||||
>加载
|
||||
</el-button>
|
||||
<el-button
|
||||
size="mini"
|
||||
type="text"
|
||||
@click="addEngine(scope.row)"
|
||||
>代码编辑
|
||||
</el-button>
|
||||
<el-button
|
||||
size="mini"
|
||||
type="text"
|
||||
icon="el-icon-takeaway-box"
|
||||
@click="toEngineVersion(scope.row)"
|
||||
v-hasPermi="['rule:engine:edit']"
|
||||
>规则维护
|
||||
</el-button>
|
||||
<el-button
|
||||
size="mini"
|
||||
type="text"
|
||||
icon="el-icon-edit"
|
||||
@click="handleUpdate(scope.row)"
|
||||
v-hasPermi="['system:rule:edit']"
|
||||
>修改
|
||||
</el-button>
|
||||
<el-button
|
||||
size="mini"
|
||||
type="text"
|
||||
icon="el-icon-delete"
|
||||
@click="handleDelete(scope.row)"
|
||||
v-hasPermi="['rule:rule:remove']"
|
||||
>删除
|
||||
</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
|
||||
<pagination
|
||||
v-show="total>0"
|
||||
:total="total"
|
||||
:page.sync="queryParams.pageNum"
|
||||
:limit.sync="queryParams.pageSize"
|
||||
@pagination="getList"
|
||||
/>
|
||||
|
||||
<!-- 添加或修改规则引擎对话框 -->
|
||||
<el-dialog :title="title" :visible.sync="open" width="80%" append-to-body>
|
||||
<el-form ref="form" :model="form" :rules="rules" label-width="80px">
|
||||
<el-row>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="规则名称" prop="name">
|
||||
<el-input v-model="form.name" placeholder="请输入规则名称"/>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="规则编码" prop="code">
|
||||
<el-input v-model="form.code" placeholder="请输入规则编码"/>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<el-row>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="规则类型" prop="type">
|
||||
<el-select v-model="form.type" placeholder="请选择规则类型" style="width: 100%">
|
||||
<el-option
|
||||
v-for="dict in dict.type.rule_engine_type"
|
||||
:key="dict.value"
|
||||
:label="dict.label"
|
||||
:value="dict.value"
|
||||
></el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="规则级别" prop="level">
|
||||
<el-select v-model="form.level" placeholder="请选择规则级别" style="width: 100%">
|
||||
<el-option
|
||||
v-for="dict in dict.type.rule_engine_level"
|
||||
:key="dict.value"
|
||||
:label="dict.label"
|
||||
:value="dict.value"
|
||||
></el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<el-row>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="是否激活" prop="isActivate">
|
||||
<el-radio-group v-model="form.isActivate">
|
||||
<el-radio
|
||||
v-for="dict in dict.type.rule_engine_activate_status"
|
||||
:key="dict.value"
|
||||
:label="dict.value"
|
||||
>{{ dict.label }}
|
||||
</el-radio>
|
||||
</el-radio-group>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="规则状态" prop="status">
|
||||
<el-radio-group v-model="form.status">
|
||||
<el-radio
|
||||
v-for="dict in dict.type.sys_normal_disable"
|
||||
:key="dict.value"
|
||||
:label="dict.value"
|
||||
>{{ dict.label }}
|
||||
</el-radio>
|
||||
</el-radio-group>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<el-row>
|
||||
<el-col :span="24">
|
||||
<el-form-item label="规则描述">
|
||||
<editor v-model="form.description" :min-height="192"/>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="24">
|
||||
<el-form-item label="备注" prop="remark">
|
||||
<el-input v-model="form.remark" type="textarea" placeholder="请输入内容"/>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
</el-form>
|
||||
<div slot="footer" class="dialog-footer">
|
||||
<el-button type="primary" @click="submitForm">确 定</el-button>
|
||||
<el-button @click="cancel">取 消</el-button>
|
||||
</div>
|
||||
</el-dialog>
|
||||
|
||||
<!--编写代码-->
|
||||
<el-dialog
|
||||
title="代码编辑器"
|
||||
:visible.sync="dialogVisible"
|
||||
width="50%"
|
||||
>
|
||||
<div ref="editor" style="height: 300px; border: 1px solid #ccc; padding: 10px;"></div>
|
||||
<div slot="footer" class="dialog-footer">
|
||||
<el-button type="primary" @click="tosend">确 定</el-button>
|
||||
</div>
|
||||
</el-dialog>
|
||||
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import 'codemirror/lib/codemirror.css';
|
||||
import 'codemirror/mode/javascript/javascript.js';
|
||||
import CodeMirror from 'codemirror';
|
||||
import {
|
||||
addRuleengine, delRuleengine,
|
||||
getRuleengine,
|
||||
listRuleengine,
|
||||
loader,
|
||||
ruleengine,
|
||||
updateRuleengine
|
||||
} from '@/api/rule/maintenance'
|
||||
|
||||
export default {
|
||||
name: "EngineMaintenance",
|
||||
dicts: ['rule_engine_activate_status', 'rule_engine_type', 'sys_normal_disable', 'rule_engine_level'],
|
||||
data() {
|
||||
return {
|
||||
// 遮罩层
|
||||
loading: true,
|
||||
// 选中数组
|
||||
ids: [],
|
||||
// 非单个禁用
|
||||
single: true,
|
||||
// 非多个禁用
|
||||
multiple: true,
|
||||
// 显示搜索条件
|
||||
showSearch: true,
|
||||
// 总条数
|
||||
total: 0,
|
||||
// 规则引擎表格数据
|
||||
engineList: [],
|
||||
// 弹出层标题
|
||||
title: "",
|
||||
// 是否显示弹出层
|
||||
open: false,
|
||||
// 查询参数
|
||||
queryParams: {
|
||||
pageNum: 1,
|
||||
pageSize: 10,
|
||||
name: null,
|
||||
type: null,
|
||||
isActivate: null,
|
||||
status: null,
|
||||
description: null,
|
||||
},
|
||||
// 表单参数
|
||||
form: {},
|
||||
// 表单校验
|
||||
rules: {
|
||||
name: [
|
||||
{required: true, message: "规则名称不能为空", trigger: "blur"}
|
||||
],
|
||||
type: [
|
||||
{required: true, message: "规则类型不能为空", trigger: "change"}
|
||||
],
|
||||
code: [
|
||||
{required: true, message: "规则编码不能为空", trigger: "blur"}
|
||||
],
|
||||
level: [
|
||||
{required: true, message: "规则级别不能为空", trigger: "change"}
|
||||
],
|
||||
isActivate: [
|
||||
{required: true, message: "是否激活不能为空", trigger: "change"}
|
||||
],
|
||||
status: [
|
||||
{required: true, message: "规则状态不能为空", trigger: "change"}
|
||||
],
|
||||
createBy: [
|
||||
{required: true, message: "创建者不能为空", trigger: "blur"}
|
||||
],
|
||||
createTime: [
|
||||
{required: true, message: "创建时间不能为空", trigger: "blur"}
|
||||
],
|
||||
},
|
||||
editor: null,
|
||||
isEditorVisible:false,
|
||||
dialogVisible:false,
|
||||
ruleContentReq:{}
|
||||
};
|
||||
},
|
||||
created() {
|
||||
this.getList();
|
||||
},
|
||||
methods: {
|
||||
addEngine(row) {
|
||||
this.ruleContentReq.ruleId=row.id
|
||||
this.isEditorVisible = true
|
||||
this.dialogVisible = true;
|
||||
// 初始化 CodeMirror(如果尚未初始化)
|
||||
if (!this.editor) {
|
||||
this.$nextTick(() => {
|
||||
this.editor = CodeMirror(this.$refs.editor, {
|
||||
value: "public class Test {\n public boolean execute(String name) {\n if (name == null || name.length() == 0) {\n System.out.println(\"哈哈哈哈\");\n return true;\n }\n return false;\n }\n}",
|
||||
mode: "javascript",
|
||||
lineNumbers: true,
|
||||
});
|
||||
});
|
||||
}
|
||||
},
|
||||
loader(row){
|
||||
loader(row.id).then(
|
||||
res=>{
|
||||
this.$message.success(res.data)
|
||||
}
|
||||
)
|
||||
},
|
||||
tosend(){
|
||||
const code = this.editor.getValue();
|
||||
this.ruleContentReq.ruleContent=code
|
||||
console.log(this.ruleContentReq)
|
||||
ruleengine(this.ruleContentReq).then(
|
||||
res=>{
|
||||
this.$message.success(res.data)
|
||||
}
|
||||
)
|
||||
},
|
||||
toEngineVersion(row) {
|
||||
console.log(row)
|
||||
this.$router.push({path: '/rule/engineVersion/',query: {id: row.id}});
|
||||
},
|
||||
/** 查询规则引擎列表 */
|
||||
getList() {
|
||||
this.loading = true;
|
||||
listRuleengine(this.queryParams).then(
|
||||
response => {
|
||||
this.engineList = response.data.rows;
|
||||
this.total = response.data.total;
|
||||
this.loading = false;
|
||||
}
|
||||
)
|
||||
|
||||
},
|
||||
// 取消按钮
|
||||
cancel() {
|
||||
this.open = false;
|
||||
this.reset();
|
||||
},
|
||||
// 表单重置
|
||||
reset() {
|
||||
this.form = {
|
||||
id: null,
|
||||
name: null,
|
||||
type: null,
|
||||
isActivate: "no-activate",
|
||||
status: "0",
|
||||
description: null,
|
||||
remark: null
|
||||
};
|
||||
this.resetForm("form");
|
||||
},
|
||||
/** 搜索按钮操作 */
|
||||
handleQuery() {
|
||||
this.queryParams.pageNum = 1;
|
||||
this.getList();
|
||||
},
|
||||
/** 重置按钮操作 */
|
||||
resetQuery() {
|
||||
this.resetForm("queryForm");
|
||||
this.handleQuery();
|
||||
},
|
||||
// 多选框选中数据
|
||||
handleSelectionChange(selection) {
|
||||
this.ids = selection.map(item => item.id)
|
||||
this.single = selection.length !== 1
|
||||
this.multiple = !selection.length
|
||||
},
|
||||
/** 新增按钮操作 */
|
||||
handleAdd() {
|
||||
this.reset();
|
||||
this.open = true;
|
||||
this.title = "添加规则引擎";
|
||||
},
|
||||
/** 修改按钮操作 */
|
||||
handleUpdate(row) {
|
||||
this.reset();
|
||||
const id = row.id || this.ids
|
||||
getRuleengine(id).then(response => {
|
||||
this.form = response.data;
|
||||
this.open = true;
|
||||
this.title = "修改规则引擎";
|
||||
});
|
||||
},
|
||||
/** 提交按钮 */
|
||||
submitForm() {
|
||||
this.$refs["form"].validate(valid => {
|
||||
if (valid) {
|
||||
if (this.form.id != null) {
|
||||
updateRuleengine(this.form).then(response => {
|
||||
this.$modal.msgSuccess("修改成功");
|
||||
this.open = false;
|
||||
this.getList();
|
||||
});
|
||||
} else {
|
||||
addRuleengine(this.form).then(response => {
|
||||
this.$modal.msgSuccess("新增成功");
|
||||
this.open = false;
|
||||
this.getList();
|
||||
});
|
||||
}
|
||||
}
|
||||
});
|
||||
},
|
||||
/** 删除按钮操作 */
|
||||
handleDelete(row) {
|
||||
const ids = row.id || this.ids;
|
||||
this.$modal.confirm('是否确认删除规则引擎编号为"' + ids + '"的数据项?').then(function () {
|
||||
return delRuleengine(ids);
|
||||
}).then(() => {
|
||||
this.getList();
|
||||
this.$modal.msgSuccess("删除成功");
|
||||
}).catch(() => {
|
||||
});
|
||||
},
|
||||
/** 导出按钮操作 */
|
||||
handleExport() {
|
||||
this.download('ruleengine/ruleengine/export', {
|
||||
...this.queryParams
|
||||
}, `ruleengine_${new Date().getTime()}.xlsx`)
|
||||
}
|
||||
}
|
||||
};
|
||||
</script>
|
|
@ -8,10 +8,10 @@
|
|||
<el-table ref="dragTable" :data="columns" :max-height="tableHeight" row-key="columnId">
|
||||
<el-table-column class-name="allowDrag" label="序号" min-width="5%" type="index"/>
|
||||
<el-table-column
|
||||
:show-overflow-tooltip="true"
|
||||
label="字段列名"
|
||||
min-width="10%"
|
||||
prop="columnName"
|
||||
:show-overflow-tooltip="true"
|
||||
label="字段列名"
|
||||
min-width="10%"
|
||||
prop="columnName"
|
||||
/>
|
||||
<el-table-column label="字段描述" min-width="10%">
|
||||
<template slot-scope="scope">
|
||||
|
@ -19,10 +19,10 @@
|
|||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column
|
||||
:show-overflow-tooltip="true"
|
||||
label="物理类型"
|
||||
min-width="10%"
|
||||
prop="columnType"
|
||||
:show-overflow-tooltip="true"
|
||||
label="物理类型"
|
||||
min-width="10%"
|
||||
prop="columnType"
|
||||
/>
|
||||
<el-table-column label="Java类型" min-width="11%">
|
||||
<template slot-scope="scope">
|
||||
|
@ -101,10 +101,10 @@
|
|||
<template slot-scope="scope">
|
||||
<el-select v-model="scope.row.dictType" clearable filterable placeholder="请选择">
|
||||
<el-option
|
||||
v-for="dict in dictOptions"
|
||||
:key="dict.dictType"
|
||||
:label="dict.dictName"
|
||||
:value="dict.dictType">
|
||||
v-for="dict in dictOptions"
|
||||
:key="dict.dictType"
|
||||
:label="dict.dictName"
|
||||
:value="dict.dictType">
|
||||
<span style="float: left">{{ dict.dictName }}</span>
|
||||
<span style="float: right; color: #8492a6; font-size: 13px">{{ dict.dictType }}</span>
|
||||
</el-option>
|
||||
|
|
Loading…
Reference in New Issue