Merge branch 'yuan'

yuan
yuan 2024-09-09 08:35:15 +08:00
commit e2f31544e1
5 changed files with 675 additions and 9 deletions

View File

@ -41,6 +41,7 @@
"@riophae/vue-treeselect": "0.4.0", "@riophae/vue-treeselect": "0.4.0",
"axios": "0.24.0", "axios": "0.24.0",
"clipboard": "2.0.8", "clipboard": "2.0.8",
"codemirror": "^5.65.17",
"core-js": "3.25.3", "core-js": "3.25.3",
"echarts": "5.4.0", "echarts": "5.4.0",
"element-ui": "2.15.14", "element-ui": "2.15.14",
@ -65,6 +66,7 @@
"vuex": "3.6.0" "vuex": "3.6.0"
}, },
"devDependencies": { "devDependencies": {
"@types/codemirror": "^5.60.15",
"@vue/cli-plugin-babel": "4.4.6", "@vue/cli-plugin-babel": "4.4.6",
"@vue/cli-plugin-eslint": "4.4.6", "@vue/cli-plugin-eslint": "4.4.6",
"@vue/cli-service": "4.4.6", "@vue/cli-service": "4.4.6",

View File

@ -1,5 +1,5 @@
import request from '@/utils/request' import request from '@/utils/request'
//列表
export function getList(data) { export function getList(data) {
return request({ return request({
url: '/cloud-rule/ruleData/list', url: '/cloud-rule/ruleData/list',
@ -7,7 +7,7 @@ export function getList(data) {
data: data data: data
}) })
} }
//添加
export function save(data) { export function save(data) {
return request({ return request({
url: '/cloud-rule/ruleData/add', url: '/cloud-rule/ruleData/add',
@ -15,7 +15,7 @@ export function save(data) {
data: data data: data
}) })
} }
//修改
export function update(data) { export function update(data) {
return request({ return request({
url: `/cloud-rule/ruleData/upd/${data.ruleId}`, url: `/cloud-rule/ruleData/upd/${data.ruleId}`,
@ -37,3 +37,4 @@ export function del(ruleId){
method : "DELETE", method : "DELETE",
}) })
} }

View File

@ -0,0 +1,109 @@
import request from '@/utils/request'
//规则信息
export function findByRuleId(ruleId) {
return request({
url: `/cloud-rule/ruleData/${ruleId}`,
method: 'get',
})
}
//通过ID启动激活
export function start(ruleId){
return request({
url: `/cloud-rule/ruleData/start/${ruleId}`,
})
}
//通过ID关闭激活
export function unstart(ruleId){
return request({
url: `/cloud-rule/ruleData/unstart/${ruleId}`,
})
}
//列表
export function getList(ruleId) {
return request({
url: `/cloud-rule/ruleVersion/list/${ruleId}`,
method: 'post',
})
}
//通过ID启动激活
export function startVersion(ruleVersionId){
return request({
url: `/cloud-rule/ruleVersion/start/${ruleVersionId}`,
})
}
//通过ID关闭激活
export function unstartVersion(ruleVersionId){
return request({
url: `/cloud-rule/ruleVersion/unstart/${ruleVersionId}`,
})
}
//添加
export function save(data) {
return request({
url: '/cloud-rule/ruleVersion/add',
method: 'post',
data: data
})
}
//获取单条
export function findByRuleVersionId(ruleVersionId){
return request({
url: `/cloud-rule/ruleVersion/${ruleVersionId}`,
method : "GET",
})
}
//获取单条
export function generatedCode(data){
return request({
url: `/cloud-rule/ruleVersion/generatedCode`,
method : "post",
data: data
})
}
//字段测试
export function compileLoad(data){
return request({
url: `/cloud-rule/ruleVersion/compileLoad`,
method : "post",
data: data
})
}
//行测试
export function row(data){
return request({
url: `/cloud-rule/ruleVersion/row`,
method : "post",
data: data
})
}
//保存代码
export function saveCode(data){
return request({
url: `/cloud-rule/ruleVersion/updText/${data.ruleVersionId}`,
method : "put",
data: data
})
}
//查询数据库
export function extractDataName(){
return request({
url: `/property/dataName/list`,
method : "post",
})
}
//查询数据库表
export function findSelectDataShow(dataTableName){
return request({
url: `/property/dataLink/findSelectTableShow?dataTableName=`+dataTableName,
method : "post",
})
}
//查询数据库表数据
export function findSelectTableShow(dataTableName){
return request({
url: `/property/dataLink/findSelectTableShow`,
method : "post",
data : dataTableName
})
}

View File

@ -43,6 +43,11 @@ import VueMeta from 'vue-meta'
// 字典数据组件 // 字典数据组件
import DictData from '@/components/DictData' import DictData from '@/components/DictData'
//CodeMirror
import VueCodeMirror from 'vue-codemirror'
import 'codemirror/lib/codemirror.css'
Vue.use(VueCodeMirror)
// 全局方法挂载 // 全局方法挂载
Vue.prototype.getDicts = getDicts Vue.prototype.getDicts = getDicts
Vue.prototype.getConfigKey = getConfigKey Vue.prototype.getConfigKey = getConfigKey

View File

@ -1,28 +1,557 @@
<template> <template>
<div> <div class="app-container">
<h1></h1> <el-descriptions class="margin-top" :title="this.ruleMsg.ruleName" :column="3" border>
<template slot="extra">
<el-dropdown split-button type="primary">
更多菜单
<el-dropdown-menu slot="dropdown">
<el-dropdown-item @click.native="handleAdd">版本添加</el-dropdown-item>
<el-dropdown-item split-button @click.native="startActivate">激活引擎</el-dropdown-item>
<el-dropdown-item split-button @click.native="unstartActivate">关闭引擎</el-dropdown-item>
</el-dropdown-menu>
</el-dropdown>
</template>
<el-descriptions-item>
<template slot="label">
规则名称
</template>
<span>{{this.ruleMsg.ruleName}}</span>
</el-descriptions-item>
<el-descriptions-item>
<template slot="label">
规则类型
</template>
<span>
<el-tag v-if="this.ruleMsg.ruleType==='Z'" type="success"></el-tag>
<el-tag v-if="this.ruleMsg.ruleType==='M'" type="primary"></el-tag>
</span>
</el-descriptions-item>
<el-descriptions-item>
<template slot="label">
规则作用域
</template>
<span>
<el-tag v-if="this.ruleMsg.ruleRegion==='F'"></el-tag>
<el-tag v-if="this.ruleMsg.ruleRegion==='R'" type="info"></el-tag>
<el-tag v-if="this.ruleMsg.ruleRegion==='C'" type="warning"> </el-tag>
</span>
</el-descriptions-item>
<el-descriptions-item>
<template slot="label">
引擎编码
</template>
<span>{{this.ruleMsg.ruleCoding}}</span>
</el-descriptions-item>
<el-descriptions-item>
<template slot="label">
激活状态
</template>
<span>
<el-tag v-if="this.ruleMsg.ruleActivate==='S'" type="success"></el-tag>
<el-tag v-if="this.ruleMsg.ruleActivate==='U'" type="danger"></el-tag>
</span>
</el-descriptions-item>
<el-descriptions-item>
<template slot="label">
规则状态
</template>
<span>
<el-tag v-if="this.ruleMsg.ruleStatus==='Y'" type="success"></el-tag>
<el-tag v-if="this.ruleMsg.ruleStatus==='N'" type="info"></el-tag>
</span>
</el-descriptions-item>
<el-form-item label="内容">
</el-form-item>
<el-descriptions-item>
<template slot="label">
规则描述
</template>
<span>
<editor v-model="this.ruleMsg.ruleDescribe" :min-height="30" read-only/>
</span>
</el-descriptions-item>
</el-descriptions>
<el-card class="big-card">
<div slot="header" class="clearfix">
<span style="font-size: 28px ;font-weight: bold">规则版本</span>
</div>
<div class="text item">
<el-row :gutter="10">
<el-empty description="暂无规则版本" v-if="versionList.length === 0"></el-empty>
<el-col :span="8" v-for="versionMsg in versionList" v-if="versionList.length !== 0">
<el-card class="box-card">
<div slot="header" class="clearfix">
<span style="font-size: 24px; font-weight: 900;" type="primary">{{versionMsg.ruleVersionName}}</span>
<el-dropdown style="float: right" type="primary">
<el-button type="primary">
更多操作<i class="el-icon-arrow-down el-icon--right"></i>
</el-button>
<el-dropdown-menu slot="dropdown">
<el-dropdown-item @click.native="selectByVersionId(versionMsg.ruleVersionId)">规则详情</el-dropdown-item>
<el-dropdown-item @click.native="testRule(versionMsg.ruleVersionId)">测试规则</el-dropdown-item>
<el-dropdown-item @click.native="startVersionActivate(versionMsg.ruleVersionId)" v-if="versionMsg.ruleVersionActivate==='U'" >激活规则</el-dropdown-item>
<el-dropdown-item @click.native="unstartVersionActivate(versionMsg.ruleVersionId)" v-if="versionMsg.ruleVersionActivate==='S'" >关闭规则</el-dropdown-item>
</el-dropdown-menu>
</el-dropdown>
</div>
<div>
<el-descriptions class="margin-top" :column="1" border>
<el-descriptions-item>
<template slot="label"> 版本类 </template>
{{versionMsg.ruleVersionType}}
</el-descriptions-item>
<el-descriptions-item>
<template slot="label"> 版本名称 </template>
{{versionMsg.ruleVersionName}}
</el-descriptions-item>
<el-descriptions-item>
<template slot="label"> 版本编号 </template>
{{versionMsg.ruleVersionCode}}
</el-descriptions-item>
<el-descriptions-item>
<template slot="label"> 激活状态 </template>
<el-tag v-if="versionMsg.ruleVersionActivate==='S'" type="success"></el-tag>
<el-tag v-if="versionMsg.ruleVersionActivate==='U'" type="danger"></el-tag>
</el-descriptions-item>
<el-descriptions-item>
<template slot="label"> 版本状态 </template>
<el-tag v-if="versionMsg.ruleVersionTest==='I'" type="danger"></el-tag>
<el-tag v-if="versionMsg.ruleVersionTest==='W'" type="danger"></el-tag>
<el-tag v-if="versionMsg.ruleVersionTest==='A'" type="danger"></el-tag>
</el-descriptions-item>
<el-descriptions-item>
<template slot="label"> 测试状态 </template>
<el-tag v-if="versionMsg.ruleVersionTest==='P'" type="danger"></el-tag>
<el-tag v-if="versionMsg.ruleVersionTest==='W'" type="danger"></el-tag>
<el-tag v-if="versionMsg.ruleVersionTest==='U'" type="danger"></el-tag>
<el-tag v-if="versionMsg.ruleVersionTest==='N'" type="danger"></el-tag>
</el-descriptions-item>
</el-descriptions>
<editor class="remark" v-model="versionMsg.remark" :min-height="30" read-only/>
</div>
</el-card>
</el-col>
</el-row>
</div>
</el-card>
<!-- 添加规则版本对话框 -->
<el-dialog :title="title" :visible.sync="open" append-to-body width="800px">
<el-card class="add-card">
<div slot="header" class="clearfix">
<span>新增版本</span>
<el-button style="float: right; padding: 3px 0" type="text" @click="executionGeneration"></el-button>
</div>
<div class="text item">
<el-form ref="form" :model="form" :rules="rules" label-width="70px" :inline="true">
<el-form-item label="版本类">
<el-input v-model="form.ruleVersionType" class="versionType" style="width: 600px;" placeholder="点击类生成自动生成类名称" readonly/>
</el-form-item>
<el-form-item label="名称" prop="ruleVersionName" >
<el-input v-model="form.ruleVersionName" style="width: 260px" placeholder="请输入版本名称"/>
</el-form-item>
<el-form-item label="编码" prop="ruleVersionCode" >
<el-input v-model="form.ruleVersionCode" style="width: 260px" placeholder="请输入版本编码"/>
</el-form-item>
<el-form-item label="状态">
<el-tag type="info">停用</el-tag>
</el-form-item>
<el-form-item label="是否激活" style="margin-left: 220px">
<el-tag type="danger">未启动</el-tag>
</el-form-item>
</el-form>
<editor v-model="form.remark" :min-height="60"/>
<codemirror v-show="addCode" v-model="form.ruleVersionText" @input="changeClassName" style="margin-top: 10px" ref="codeMirrorEditor" :value="code" :options="cmOptions">
</codemirror>
</div>
</el-card>
<div slot="footer" class="dialog-footer">
<el-button type="primary" @click="submitForm"> </el-button>
<el-button @click="cancel"> </el-button>
</div>
</el-dialog>
<!-- 规则版本详情抽屉 -->
<el-drawer
title="规则版本详情"
:visible.sync="drawer"
:size="versionDrawer">
<span>
<el-descriptions class="margin-top" :column="3" border>
<el-descriptions-item>
<template slot="label"> 版本类 </template>
{{ruleVersion.ruleVersionType}}
</el-descriptions-item>
<el-descriptions-item>
<template slot="label"> 版本名称 </template>
{{ruleVersion.ruleVersionName}}
</el-descriptions-item>
<el-descriptions-item>
<template slot="label"> 版本编号 </template>
{{ruleVersion.ruleVersionCode}}
</el-descriptions-item>
<el-descriptions-item>
<template slot="label"> 激活状态 </template>
<el-tag v-if="ruleVersion.ruleVersionActivate==='S'" type="success"></el-tag>
<el-tag v-if="ruleVersion.ruleVersionActivate==='U'" type="danger"></el-tag>
</el-descriptions-item>
<el-descriptions-item>
<template slot="label"> 版本状态 </template>
<el-tag v-if="ruleVersion.ruleVersionTest==='I'" type="danger"></el-tag>
<el-tag v-if="ruleVersion.ruleVersionTest==='W'" type="danger"></el-tag>
<el-tag v-if="ruleVersion.ruleVersionTest==='A'" type="danger"></el-tag>
</el-descriptions-item>
<el-descriptions-item>
<template slot="label"> 测试状态 </template>
<el-tag v-if="ruleVersion.ruleVersionTest==='P'" type="danger"></el-tag>
<el-tag v-if="ruleVersion.ruleVersionTest==='W'" type="danger"></el-tag>
<el-tag v-if="ruleVersion.ruleVersionTest==='U'" type="danger"></el-tag>
<el-tag v-if="ruleVersion.ruleVersionTest==='N'" type="danger"></el-tag>
</el-descriptions-item>
</el-descriptions>
<editor class="remark" v-model="ruleVersion.remark" :min-height="30" read-only/>
<codemirror @input="changeClassName" v-model="ruleVersion.ruleVersionText" style="margin-top: 10px" ref="codeMirrorEditor" :value="code" :options="cmOptions"/>
<el-button @click="saveVersionCode(ruleVersion)"></el-button>
</span>
</el-drawer>
<!-- 测试规则版本对话框 -->
<el-dialog :title="title" :visible.sync="openTest" append-to-body width="1000px">
<div >
<el-card class="add-card">
<div slot="header" class="clearfix">
<el-button style="float: right; padding: 3px 0" type="text" @click="selectData"></el-button>
</div>
<div slot="header" class="clearfix">
<el-descriptions class="margin-top" :column="3" border>
<el-descriptions-item>
<template slot="label"> 版本类 </template>
{{testRuleVersion.ruleVersionType}}
</el-descriptions-item>
<el-descriptions-item>
<template slot="label"> 版本名称 </template>
{{testRuleVersion.ruleVersionName}}
</el-descriptions-item>
<el-descriptions-item>
<template slot="label"> 版本编号 </template>
{{testRuleVersion.ruleVersionCode}}
</el-descriptions-item>
<el-descriptions-item>
<template slot="label"> 激活状态 </template>
<el-tag v-if="testRuleVersion.ruleVersionActivate==='S'" type="success"></el-tag>
<el-tag v-if="testRuleVersion.ruleVersionActivate==='U'" type="danger"></el-tag>
</el-descriptions-item>
<el-descriptions-item>
<template slot="label"> 版本状态 </template>
<el-tag v-if="testRuleVersion.ruleVersionTest==='I'" type="danger"></el-tag>
<el-tag v-if="testRuleVersion.ruleVersionTest==='W'" type="danger"></el-tag>
<el-tag v-if="testRuleVersion.ruleVersionTest==='A'" type="danger"></el-tag>
</el-descriptions-item>
<el-descriptions-item>
<template slot="label"> 测试状态 </template>
<el-tag v-if="testRuleVersion.ruleVersionTest==='P'" type="danger"></el-tag>
<el-tag v-if="testRuleVersion.ruleVersionTest==='W'" type="danger"></el-tag>
<el-tag v-if="testRuleVersion.ruleVersionTest==='U'" type="danger"></el-tag>
<el-tag v-if="testRuleVersion.ruleVersionTest==='N'" type="danger"></el-tag>
</el-descriptions-item>
</el-descriptions>
<editor class="remark" v-model="testRuleVersion.remark" :min-height="30" read-only/>
<codemirror @input="changeClassName" v-model="testRuleVersion.ruleVersionText" style="margin-top: 10px" ref="codeMirrorEditor" :value="code" :options="cmOptions">
</codemirror>
</div>
<!-- 选择测试数据-->
<div v-show="selectDataFrame">
<el-card>
<el-select v-model="tableData.databaseName" placeholder="请选择" @change="selectTable">
<el-option
v-for="item in database"
:key="item.id"
:label="item.name"
:value="item.name">
</el-option>
</el-select>
</el-card>
</div>
</el-card>
</div>
<div slot="footer" class="dialog-footer">
<el-button type="primary" @click="testData(testRuleVersion)"> </el-button>
<el-button > </el-button>
</div>
</el-dialog>
</div> </div>
</template> </template>
<script> <script>
//jsjsjson, //jsjsjson,
//import from ', //import from ',
export default { import {
compileLoad, extractDataName,
findByRuleId,
findByRuleVersionId, findSelectDataShow, generatedCode,
getList, Load, row,
save, saveCode,
start,
startVersion,
unstart,
unstartVersion
} from '@/api/rule/versions'
import codemirror from "codemirror/lib/codemirror";
require("codemirror/mode/clike/clike.js");
require("codemirror/addon/edit/closebrackets.js");
components: {
codemirror;
}
import "codemirror/theme/eclipse.css";
import "codemirror/theme/darcula.css";
import "codemirror/theme/blackboard.css";
export default {
//import使" //import使"
components: {}, components: {},
props: {}, props: {},
data() { data() {
//" //"
return {}; return {
//
ruleMsg:{},
versionList:[],
//
open: false,
openTest: false,
//
title: "",
//
form: {
ruleId:0,
ruleVersionStatus:"N",
ruleVersionActivate:"U"
},
//
rules: {
ruleVersionName: [
{required: true, message: "规则名称不能为空", trigger: "blur"}
],
ruleVersionCode: [
{required: true, message: "引擎编码不能为空", trigger: "blur"}
],
},
//
ruleVersion:{},
//
drawer: false,
code: "",
cmOptions:{
mode: "text/x-java", //Java
theme: "darcula", //
autofocus: true,
lineNumbers: true, //
smartIndent: true, //
autoCloseBrackets: true//
},
versionDrawer:'60%',
addCode:false,
testRuleVersion:"",
//
selectDataFrame:false,
//
database:[],
//
tableData:{
//
databaseName:"",
},
};
}, },
// data", // data",
computed: {}, computed: {},
//data", //data",
watch: {}, watch: {},
//", //",
methods: {}, methods: {
//
getRuleMsg(ruleId){
console.log(ruleId)
findByRuleId(ruleId).then(response => {
this.ruleMsg = response.data
})
},
//
startActivate(){
start(this.ruleMsg.ruleId).then(response => {
this.$modal.msgSuccess("激活成功");
this.getRuleMsg(this.ruleMsg.ruleId)
})
},
//
unstartActivate(){
unstart(this.ruleMsg.ruleId).then(response => {
this.$modal.msgSuccess("关闭成功");
this.getRuleMsg(this.ruleMsg.ruleId)
})
},
start(){
start(this.ruleMsg.ruleId).then(res => {
this.ruleMsg.ruleId = res.data
})
},
unstartVersion(){
unstart(this.ruleMsg.ruleId).then(res => {
this.ruleMsg.ruleId = res.data
})
},
//
showList(ruleId){
console.log(ruleId)
getList(ruleId).then(response => {
this.versionList = response.data
})
},
//
reset() {
this.resetForm("form");
},
/** 新增按钮操作 */
handleAdd() {
this.reset();
this.open = true;
this.title = "基本信息";
},
//
areFieldsValid() {
// 使
return this.form.ruleVersionName && this.form.ruleVersionCode;
},
//
executionGeneration() {
//
if (!this.areFieldsValid()) {
if (!this.form.ruleVersionName) {
this.$message("规则名称不能为空");
}
if (!this.form.ruleVersionCode) {
this.$message("引擎编码不能为空");
}
return;
}
this.form.ruleId = this.ruleMsg.ruleId;
generatedCode(this.form).then(response => {
//
console.log('代码生成成功', response);
this.addCode = true;
this.form.ruleVersionType = response.data.ruleVersionType
this.form.ruleVersionText = response.data.ruleVersionText
}).catch(error => {
console.error('代码生成失败', error);
this.$message("代码生成失败");
});
},
/** 提交按钮 */
submitForm: function () {
console.log(this.form)
this.$refs["form"].validate(valid => {
if (valid) {
save(this.form).then(response => {
this.$modal.msgSuccess("新增成功");
this.open = false;
this.addCode = false;
this.showList(this.ruleMsg.ruleId);
});
}
});
},
//
cancel() {
this.open = false;
this.reset();
},
//
startVersionActivate(ruleVersionId){
startVersion(ruleVersionId).then(response => {
this.$modal.msgSuccess("激活成功");
this.showList(this.ruleMsg.ruleId)
})
},
unstartVersionActivate(ruleVersionId){
unstartVersion(ruleVersionId).then(response => {
this.$modal.msgSuccess("关闭成功");
this.showList(this.ruleMsg.ruleId)
})
},
//
selectByVersionId(ruleVersionId){
console.log(ruleVersionId)
findByRuleVersionId(ruleVersionId).then(response => {
this.drawer = true
this.ruleVersion = response.data
})
},
//
changeClassName(className) {
var reg = new RegExp(/public class .*? extends ActionParamBuilder/);
this.code = this.code.replace(reg,
"public class " + className + " extends ActionParamBuilder"
);
},
testRule(ruleVersionId){
console.log(ruleVersionId)
findByRuleVersionId(ruleVersionId).then(response => {
this.testRuleVersion = response.data
this.openTest = true
})
},
//
testData(testRuleVersion){
console.log(testRuleVersion)
console.log(this.ruleMsg.ruleRegion)
if (this.ruleMsg.ruleRegion==='F'){
compileLoad(testRuleVersion).then(response => {
this.$modal.msgSuccess(response.msg);
})
}
if (this.ruleMsg.ruleRegion==='R'){
row(testRuleVersion).then(response => {
this.$modal.msgSuccess(response.msg);
})
}
if (this.ruleMsg.ruleRegion==='C'){
}
},
//
saveVersionCode(ruleVersion){
console.log(ruleVersion)
saveCode(ruleVersion).then(response => {
this.$modal.msgSuccess(response.msg);
})
},
//
selectData(){
this.selectDataFrame = true
extractDataName().then(response => {
this.database = response.data;
console.log(response)
})
},
//
selectTable(dataTableName){
console.log(dataTableName)
findSelectDataShow(dataTableName).then(response => {
this.tableData = response.data
console.log(this.tableData)
})
}
},
// - 访this", // - 访this",
created() { created() {
const ruleId = this.$route.params && this.$route.params.ruleId;
this.getRuleMsg(ruleId)
this.showList(ruleId)
}, },
// - 访DOM", // - 访DOM",
mounted() { mounted() {
@ -44,5 +573,25 @@
}; };
</script> </script>
<style scoped> <style scoped>
.el-dropdown {
vertical-align: top;
}
.el-dropdown + .el-dropdown {
margin-left: 15px;
}
.el-icon-arrow-down {
font-size: 12px;
}
.big-card {
margin-top: 30px;
}
.box-card {
width: 480px;
}
.remark{
margin-top: 10px;
}
.versionType{
background-color: #5a5e66;
}
</style> </style>