feat: 新增资产授权

master
031026 2024-05-03 09:44:54 +08:00
commit e66670f576
7 changed files with 1128 additions and 12 deletions

View File

@ -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",

View File

@ -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'
})
}

View File

@ -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>

View File

@ -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>

View File

@ -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>

View File

@ -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>

View File

@ -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>