升级:1、增加界面夜间模式

2、qtask 功能交互升级
     3、mysql连接管理增加心跳保活
     4、其他修改
This commit is contained in:
2024-03-31 00:34:26 +08:00
parent 8cc55c2c4b
commit 4dcebf32de
37 changed files with 1136 additions and 301 deletions

View File

@@ -1,9 +1,16 @@
const qtask = {
qtaskList() {
return red.postX('_qtask/list', {})
qtaskList({flipper={}}) {
return red.get2('_qtask/list', {flipper})
},
qtaskSave({task}) {
return red.postX('_qtask/save', {task: JSON.stringify(task)})
qtaskSave(task) {
if (task.qtaskid) {
return red.post2('_qtask/update', task)
} else {
return red.post2('_qtask/create', task)
}
},
qtaskDelete(qtaskid) {
return red.post2("_qtask/delete", {qtaskid})
},
qtaskDebug({task}) {
return red.postX('_qtask/debug', {task: JSON.stringify(task)})

View File

@@ -4,7 +4,7 @@
</div>
<div class="col-md-12" style="padding-top: 10px;overflow:auto;">
<table class="table table-bordered table-hover" style="width: 100%">
<table class="table table-bordered table-hover">
<!--<thead>
<tr>
<th v-for="field in cfg.cols" v-text="field.label"></th>

View File

@@ -22,7 +22,7 @@
</div>
</div>
<div class="col-md-12" style="padding-top: 10px;overflow:auto;">
<table class="table table-bordered table-hover" style="width: 100%">
<table class="table table-bordered table-hover">
<thead>
<tr>
<th v-for="field in cfg.cols" v-text="field.label"></th>

View File

@@ -5,8 +5,10 @@
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>MetaKit</title>
<link rel="stylesheet" href="/res/zui/css/zui.min.css">
<link rel="stylesheet" href="/res/css/zui-theme.css">
<!--<link rel="stylesheet" href="/res/css/zui-theme.css">-->
<link rel="stylesheet" href="/res/css/zui-theme-x.css">
<link rel="stylesheet" href="/res/css/red-kit.css">
<link rel="stylesheet" href="/res/ztree/zTreeStyle.css">
</head>
<body id="home">
<div class="container-fluid">
@@ -22,40 +24,58 @@
</li>
<li class="pull-right" title="刷新服务端缓存数据">
<a @click="refresh()" href="javascript:;" style="padding: 6px 15px;border: 0;background-color: #404a53;color: #fff;">
<a @click="refresh()" href="javascript:;" class="btn btn-default" style="padding: 6px 15px;border: 0;background-color: #404a53!important;color: #fff;">
<i class="icon icon-repeat"></i>
</a>
</li>
<li class="pull-right">
<a @click="logout()" href="javascript:;" style="padding: 6px 15px;border: 0;background-color: #404a53;color: #fff;">
<a @click="logout()" href="javascript:;" class="btn btn-default" style="padding: 6px 15px;border: 0;background-color: #404a53!important;color: #fff;">
<i class="icon icon-user"></i> 退出
</a>
</li>
<li class="pull-right">
<select v-model="sysPlat" class="form-control" style="border: 0;background-color: #404a53;color: #fff;">
<select v-model="sysPlat" class="form-control plat-switch">
<option v-for="item in sysPlats" :value="item" v-text="item.name"></option>
</select>
</li>
</ul>
</div>
<div id="mainDiv">
<div class="col-md-1 col-xs-1" id="left">
<div id="mainDiv" :class="{leftMini:leftMini}">
<div :class="['col-md-1 col-xs-1']" id="left">
<nav class="menu" data-ride="menu">
<ul class="nav nav-primary">
<li class="active show nav-parent" style="width: 100%;">
<!--<a href="javascript:;"><i class="icon icon-tasks"></i> <span v-text="pageId"></span></a>-->
<ul class="nav">
<ul class="nav" v-if="!leftMini">
<!-- item in menus -->
<li v-for="item in menus" @click="loadPage(item)" :class="{active:page.url==item.url}">
<a href="javascript:;"><i :class="['icon', item.icon ? item.icon : 'icon-circle-blank']"></i> <span v-text="item.name"></span></a>
</li>
</ul>
<ul class="nav" v-if="leftMini">
<!-- item in menus -->
<li v-for="item in menus" @click="loadPage(item)" :class="{active:page.url==item.url}"
data-toggle="tooltip"
:title="item.name">
<a href="javascript:;"><i
:class="['icon', item.icon ? item.icon : 'icon-circle-blank']"></i>
<!--<span v-text="item.name"></span>-->
</a>
</li>
</ul>
</li>
</ul>
<!--<div class="user">
<a style="cursor: pointer">绝尘</a>
</div>-->
<div class="footer" @click="leftMiniSwitch()">
<i :class="['icon', leftMini? 'icon-caret-right':'icon-caret-left']"></i>
</div>
</nav>
</div>
<div class="col-md-11 col-xs-11">
@@ -85,6 +105,7 @@
<script src="/api/tmp.js"></script>
<script src="/res/zui/lib/sortable/zui.sortable.js"></script>
<script src="/res/zui/lib/uploader/zui.uploader.min.js"></script>
<script src="/res/ztree/jquery.ztree.all.min.js"></script>
<script type="module">
import { logout } from './api/user.js'
let { refresh } = meta
@@ -156,7 +177,8 @@
],
menus: {},
page: {},
pageId: ''
pageId: '',
leftMini: red.getData('leftMini') === 'Min',
},
watch: {
page: function () {
@@ -168,6 +190,12 @@
sysPlat: function (v) {
red.setData("sysPlat", v);
this.loadPage();
},
leftMini: function () {
this.tooltipShow()
},
menus: function () {
this.tooltipShow()
}
},
methods: {
@@ -217,8 +245,23 @@
data[k] = vs
}
red.setData("dictKv", data)
red.getData()
})
}
},
leftMiniSwitch() {
this.leftMini = !this.leftMini;
red.setData("leftMini", this.leftMini ? 'Min' : 'Max');
},
tooltipShow() {
$('[data-toggle="tooltip"]').tooltip('destroy');
if (!this.leftMini) {
return
}
setTimeout(function () {
$('[data-toggle="tooltip"]').tooltip({placement: 'right'});
}, 5)
},
},
mounted: function () {
this.loadDictData()

View File

@@ -1,6 +1,28 @@
<row class="data-list">
<div class="col-md-12">
<h3 class="pull-left">业务预览</h3>
<div class="col-xs-4 pull-right">
<div class="input-group">
<span class="input-group-btn">
<button class="btn btn-default" type="button">添加过滤条件</button>
</span>
<select class="form-control" v-model="addFilter" style="width: 130px;">
<option v-for="f in cfg.filters" :value="f.name" v-show="!f.checked">{{f.label}}</option>
</select>
<span class="input-group-btn">
<button @click="findList()" class="btn btn-primary" type="button"> 查询</button>
</span>
<span class="input-group-btn" style="padding-left: 10px">
<button @click="exportExcel" class="btn" type="button"> 导出</button>
</span>
</div>
</div>
</div>
<div class="clearfix"></div>
<div class="info">
<a @click="showInfo()" href="javascript:;"><i class="icon icon-info"></i></a>
</div>
@@ -24,9 +46,9 @@
<!-- 业务列表 -->
<div class="col-xs-2">
<div style="padding-left: 10px;background-color: #ccc;width: 100%"> 业务列表(Meta-Service)</div>
<div style="padding-left: 10px;/*background-color: #ccc;*/width: 100%"> 业务列表(Meta-Service)</div>
<ul class="nav nav-tabs nav-stacked dlist" style="height: 100%">
<li :class="['clearfix',{'active':service==item.alias}]" v-for="item in services" >
<li :class="[{'active':service==item.alias}]" v-for="item in services" >
<a @click="service=item.name" :title="`${item.name}`" v-text="`${item.comment}`" href="javascript:;"></a>
</li>
</ul>
@@ -34,24 +56,7 @@
<!-- 预览功能 -->
<div class="col-xs-10">
<div class="col-xs-4 pull-right">
<div class="input-group">
<span class="input-group-btn">
<button class="btn btn-default" type="button">添加过滤条件</button>
</span>
<select class="form-control" v-model="addFilter" style="width: 130px;">
<option v-for="f in cfg.filters" :value="f.name" v-show="!f.checked">{{f.label}}</option>
</select>
<span class="input-group-btn">
<button @click="findList()" class="btn btn-primary" type="button"> 查询</button>
</span>
<span class="input-group-btn" style="padding-left: 10px">
<button @click="exportExcel" class="btn" type="button"> 导出</button>
</span>
</div>
</div>
<div class="clearfix"></div>
<!-- 过滤条件 -->
<div class="col-lg-4 col-xs-6" v-for="(filter,index) in cfg.filters" v-if="filter.checked">
@@ -76,7 +81,7 @@
<!-- 数据表格 -->
<div class="col-xs-12" style="padding-top: 10px;overflow:auto;">
<table class="table table-bordered table-hover" style="width: 100%">
<table class="table table-bordered table-hover">
<thead>
<tr>
<!-- 'sort':field.order>0 -->
@@ -110,6 +115,7 @@
<img src="../res/img/none.png">
<p>暂无数据</p>
</div>
<!-- 分页 -->
<div>
<ul class="pager pull-right" style="margin: 5px 10px">

View File

@@ -1,4 +1,8 @@
<row class="meta-link">
<div class="col-md-12">
<h3 v-text="cfg.title"></h3>
</div>
<div class="info">
<a @click="showInfo()" href="javascript:;"><i class="icon icon-info"></i></a>
</div>
@@ -24,8 +28,8 @@
</div>
<div class="col-xs-4 sheet-cell">
<div style="padding-left: 10px;background-color: #ccc;width: 100%;height: 32px;">
实体表(Meta-Table) <input v-model="filter" placeholder="筛选实体" style="margin-top: 5px;">
<div class="base-info">
实体表(Meta-Table) <input v-model="filter" placeholder="关键字筛选表" class="base-input">
</div>
<ul class="nav nav-tabs nav-stacked tlist" style="height: 100%">
<li :class="[{'active': aliasA == item.alias}]" v-for="item in tables" v-if="dealFilter(item)">
@@ -35,7 +39,7 @@
<!--<p v-show="ckTable && ckTable.length">已选择 <code v-text="ckTable.length||0"></code> 个实体待导入</p>-->
</div>
<div class="col-xs-8">
<div style="padding-left: 10px;background-color: #ccc;width: 100%;height: 32px;"> 已关联的表 </div>
<div class="base-info"> 已关联的表 </div>
<!-- 关联表列表 -->
<button v-for="link in linkInfos" @click="aliasB=link.alias" :class="['btn', {'btn-primary' :aliasB==link.alias}]" style="margin: 5px">
<i class="icon icon-table"></i>
@@ -43,9 +47,9 @@
</button>
<div class="pull-right" style="margin: 5px;">
<button @click="status=1" v-show="status==0 && aliasB" class="btn">修改关联关系</button>
<button @click="status=0" v-show="status==1" class="btn">取消修改</button>
<button @click="addLinkDia()" class="btn">+ 添加关联表</button>
<button @click="status=1" v-show="status==0 && aliasB" class="btn btn-default">修改关联关系</button>
<button @click="status=0" v-show="status==1" class="btn btn-default">取消修改</button>
<button @click="addLinkDia()" class="btn btn-default">+ 添加关联表</button>
<button @click="saveLink()" v-show="status==1" class="btn btn-primary" style="margin-left: 15px">保存</button>
</div>
<!--<div class="clearfix"></div>-->
@@ -128,6 +132,7 @@
let vm = new Vue({
el: ".meta-link",
data: {
cfg:{title:"实体关系"},
status: 0,
tables: [], //所有的表数据{name,comment, alias, linkCount}
aliasA: '', //选中的主体表别名

View File

@@ -22,53 +22,88 @@
}*/
</style>
<row class="meta-service">
<div class="col-xs-12">
<div class="info" style="padding-left: 10px">
<a @click="showInfo()" href="javascript:;"><i class="icon icon-info"></i></a>
</div>
<!-- info -->
<div class="modal fade" id="f-info">
<div class="modal-dialog modal-lg">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal"><span aria-hidden="true">×</span><span class="sr-only">关闭</span></button>
<h4 class="modal-title">功能介绍</h4>
<div class="col-md-12">
<h3>业务管理</h3>
</div>
<div class="info" style="padding-left: 10px">
<a @click="showInfo()" href="javascript:;"><i class="icon icon-info"></i></a>
</div>
<!-- info -->
<div class="modal fade" id="f-info">
<div class="modal-dialog modal-lg">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal"><span aria-hidden="true">×</span><span class="sr-only">关闭</span></button>
<h4 class="modal-title">功能介绍</h4>
</div>
<div class="modal-body" style="text-align: left">
<div style="text-align: left">
<p>
<b>如何创建一个业务?</b><br><!-- <span style="color: #f1a325;font-size: 25px">so easy</span> -->
1、选择业务主表、填写名称、标识码<br>
2、保存<br>
3、业务维护(常规业务维护:列表,查询配置,导出配置,修改基本信息, 以及未开发的:详情配置,表单配置)<br>
</p>
<p>
<b>选择主表的意义,关联表信息业务中如何控制?</b><br>
业务主表选择某个表,也即当前业务主要围绕这个实体表进行;<br>
对于关联表只需要在MetaLink中建立关联即可此处选择了业务主表后会自动查询所有已经关联关联的业务表<br>
然后便可以轻松配置 列表要展示,导出哪些字段,查询过滤条件用哪些表的哪些字段,等等。。
</p>
<b>MetaService概念模型</b>
<img src="../res/img/MetaService.png">
</div>
<div class="modal-body" style="text-align: left">
<div style="text-align: left">
<p>
<b>如何创建一个业务?</b><br><!-- <span style="color: #f1a325;font-size: 25px">so easy</span> -->
1、选择业务主表、填写名称、标识码<br>
2、保存<br>
3、业务维护(常规业务维护:列表,查询配置,导出配置,修改基本信息, 以及未开发的:详情配置,表单配置)<br>
</p>
<p>
<b>选择主表的意义,关联表信息业务中如何控制?</b><br>
业务主表选择某个表,也即当前业务主要围绕这个实体表进行;<br>
对于关联表只需要在MetaLink中建立关联即可此处选择了业务主表后会自动查询所有已经关联关联的业务表<br>
然后便可以轻松配置 列表要展示,导出哪些字段,查询过滤条件用哪些表的哪些字段,等等。。
</p>
<b>MetaService概念模型</b>
<img src="../res/img/MetaService.png">
</div>
<!--<p>数据存贮结构如下:</p>
<img src="../res/img/meta_service.png">-->
</div>
<div class="modal-footer">
<button type="button" class="btn btn-default" data-dismiss="modal">关闭</button>
</div>
<!--<p>数据存贮结构如下:</p>
<img src="../res/img/meta_service.png">-->
</div>
<div class="modal-footer">
<button type="button" class="btn btn-default" data-dismiss="modal">关闭</button>
</div>
</div>
</div>
</div>
<div class="input-group list-head">
<div class="col-xs-3">
<button @click="createService()" class="btn btn-primary" type="button"> 新建业务</button>
<hr>
<table class="table">
<tr>
<th>业务KEY</th>
<th>业务名称</th>
<th>操作</th>
</tr>
<tr v-for="item in services" @click="service=item.name;serviceLabel=item.comment;">
<td>{{item.name}}</td>
<td>{{item.comment}}</td>
<td>
<a href="javascript:">编辑</a>
<a href="javascript:">删除</a>
</td>
</tr>
<span class="input-group-btn">
</table>
</div>
<!-- 实体字段信息 -->
<!--<div class="col-xs-4" style="padding-left: 0px;">
</div>-->
<div class="col-xs-9" style="padding-left: 0px;padding-right: 0px;">
<div class="input-group list-head pull-right">
<div class="pull-left"></div>
<!--<span class="input-group-btn">
<button class="btn btn-default" type="button">选择业务类型</button>
</span>
@@ -77,7 +112,7 @@
<ul class="dropdown-menu">
<li v-for="item in services" @click="service=item.name;serviceLabel=item.comment;"><a href="javascript:;" v-text="`${item.comment}`"></a></li>
</ul>
</div>
</div>-->
<!--
<option v-for="item in services" :value="item.name"> {{item.name}}&nbsp;&nbsp;&nbsp;[{{item.comment}}]</option>
@@ -86,9 +121,9 @@
</select>
-->
<span class="input-group-btn pull-left" style="padding-left: 5px">
<button @click="createService()" :class="['btn']" type="button"> 新建业务</button>
</span>
<!--<span class="input-group-btn pull-left" style="padding-left: 5px">
<button @click="createService()" class="btn btn-primary" type="button"> 新建业务</button>
</span>-->
<span class="input-group-btn" style="padding-left: 20px">
@@ -121,60 +156,55 @@
<button @click="save()" :class="['btn',{'btn-primary':status!=0},{'disabled':status==0}]" type="button"> 保存</button>
</span>
</div>
</div>
<div class="clearfix"></div>
<hr>
<div class="col-xs-4">
<div class="base-info"> 业务相关表</div>
<!--<ul class="nav nav-tabs nav-stacked tlist">
<li @click="sheet=item" :class="[{active: sheet==item }]" v-for="item in sheetArr">
<a href="javascript:;" data-target="#tab3Content1" data-toggle="tab" v-text="serviceDetail['tables'][item]['name']"></a>
</li>
</ul>-->
<div class="col-xs-6">
<div style="padding-left: 10px;background-color: #ccc;width: 100%"> 业务相关表</div>
<!--<ul class="nav nav-tabs nav-stacked tlist">
<li @click="sheet=item" :class="[{active: sheet==item }]" v-for="item in sheetArr">
<a href="javascript:;" data-target="#tab3Content1" data-toggle="tab" v-text="serviceDetail['tables'][item]['name']"></a>
</li>
</ul>-->
<div class="btn-group" style="margin: 5px 0">
<a class="btn btn-default" @click="sheet=item" v-for="item in sheetArr" v-text="dealTableName(item)"> </a>
</div>
<div class="btn-group" style="margin: 5px 0">
<a class="btn" @click="sheet=item" v-for="item in sheetArr" v-text="dealTableName(item)"> </a>
<div class="base-info">字段信息</div>
<table class="table table-bordered">
<tr>
<td v-show="status==3 || status==4 || status==5 || status==6"><input type="checkbox"></td>
<th v-show="status==1"></th>
<th>数据字段</th>
<th>注释</th>
<!--<th>数据类型</th>
<th>输入类型</th>
<th>附加属性</th>
<th>备注</th>-->
</tr>
<tr v-for="(item, index) in serviceDetail['tables'][sheet].items">
<td v-show="status==3"><input type="checkbox" v-model="exportArr" :value="sheet + '$' + item.name"></td>
<td v-show="status==4"><input type="checkbox" v-model="serviceInfo.imports" :value="sheet + '$' + item.name"></td>
<td v-show="status==5"><input type="checkbox" v-model="showFields" :value="sheet + '$' + item.name"></td>
<td v-show="status==6"><input type="checkbox" v-model="filterArr" :value="sheet + '$' + item.name"></td>
<td v-show="status=='detail'"><input type="checkbox" v-model="detailArr" :value="sheet + '$' + item.name"></td>
<td v-show="status=='edit'"><input type="checkbox" v-model="editArr" :value="sheet + '$' + item.name"></td>
<td v-text="item.name" style="background-color: rgb(235, 235, 228);"></td>
<td v-text="item.label"></td>
<!--<td v-text="item.type"></td>
<td v-text="item.inType"></td>
<td v-text="item.inExt"></td>
<td v-text="item.remark"></td>-->
</tr>
</table>
</div>
<div style="padding-left: 10px;background-color: #ccc;">字段信息</div>
<table class="table table-bordered">
<tr>
<td v-show="status==3 || status==4 || status==5 || status==6"><input type="checkbox"></td>
<th v-show="status==1"></th>
<th>数据字段</th>
<th>注释</th>
<!--<th>数据类型</th>
<th>输入类型</th>
<th>附加属性</th>
<th>备注</th>-->
</tr>
<tr v-for="(item, index) in serviceDetail['tables'][sheet].items">
<td v-show="status==3"><input type="checkbox" v-model="exportArr" :value="sheet + '$' + item.name"></td>
<td v-show="status==4"><input type="checkbox" v-model="serviceInfo.imports" :value="sheet + '$' + item.name"></td>
<td v-show="status==5"><input type="checkbox" v-model="showFields" :value="sheet + '$' + item.name"></td>
<td v-show="status==6"><input type="checkbox" v-model="filterArr" :value="sheet + '$' + item.name"></td>
<td v-show="status=='detail'"><input type="checkbox" v-model="detailArr" :value="sheet + '$' + item.name"></td>
<td v-show="status=='edit'"><input type="checkbox" v-model="editArr" :value="sheet + '$' + item.name"></td>
<td v-text="item.name" style="background-color: rgb(235, 235, 228);"></td>
<td v-text="item.label"></td>
<!--<td v-text="item.type"></td>
<td v-text="item.inType"></td>
<td v-text="item.inExt"></td>
<td v-text="item.remark"></td>-->
</tr>
</table>
</div>
<!-- 实体字段信息 -->
<div class="col-xs-6" style="padding-left: 0px;">
</div>
<div class="col-xs-6" style="padding-left: 0px;padding-right: 0px;">
<div class="col-xs-8">
<!-- shows -->
<div id="show" v-show="status==5">
<div style="padding-left: 10px;background-color: #ccc;"> 列表配置</div>
<div class="base-info"> 列表配置</div>
<table class="table table-bordered table-auto">
<thead>
<tr>
@@ -213,8 +243,8 @@
<!-- exports -->
<div id="export" v-show="status==3">
<div style="padding-left: 10px;background-color: #ccc;"> 导出配置</div>
<table class="table table-bordered table-auto" style="width: 100%">
<div class="base-info"> 导出配置</div>
<table class="table table-bordered table-auto">
<thead>
<tr>
<th></th>
@@ -274,8 +304,8 @@
<!-- filters -->
<div id="filter" v-show="status==6">
<div style="padding-left: 10px;background-color: #ccc;width: 100%"> 查询配置</div>
<table class="table table-bordered table-auto" style="width: 100%">
<div class="base-info"> 查询配置</div>
<table class="table table-bordered table-auto">
<thead>
<tr>
<th></th>
@@ -338,7 +368,7 @@
<!-- details -->
<div id="detail" v-show="status=='detail'">
<div style="padding-left: 10px;background-color: #ccc;width: 100%"> 详情配置</div>
<div class="base-info"> 详情配置</div>
<table class="table table-bordered table-auto">
<thead>
<tr>
@@ -372,7 +402,7 @@
<!-- edits -->
<div id="edit" v-show="status=='edit'">
<div style="padding-left: 10px;background-color: #ccc;width: 100%"> 表单配置</div>
<div class="base-info"> 表单配置</div>
<table class="table table-bordered table-auto">
<thead>
<tr>
@@ -428,7 +458,7 @@
<!-- del -->
<div id="del" v-show="status=='del'">
<div style="padding-left: 10px;background-color: #ccc;width: 100%"> 删除策略</div>
<div class="base-info"> 删除策略</div>
<div class="panel-body" style="overflow:auto;">
<form class="form-horizontal">
<!--
@@ -468,6 +498,7 @@
</form>
</div>
</div>
</div>
</div>
@@ -1112,7 +1143,7 @@
dictList({type:"dict"}).then(res => {
this.dictType = res
console.log(res)
//console.log(res)
})
}
});

View File

@@ -30,6 +30,10 @@
</style>
<!-- 对话框HTML -->
<div class="importDev">
<div class="col-md-12">
<h3>实体导入</h3>
</div>
<div class="info">
<a @click="showInfo()" href="javascript:;"><i class="icon icon-info"></i></a>
</div>
@@ -108,7 +112,7 @@
<!-- excel sheets -->
<div class="row" v-show="sheet">
<div class="col-xs-2 sheet-cell">
<div style="padding-left: 10px;background-color: #ccc;width: 100%"> Excel-Sheet</div>
<div class="base-info"> Excel-Sheet</div>
<ul class="nav nav-tabs nav-stacked tlist" style="height: 100%">
<li class="checkbox-inline clearfix" v-for="item in sheetArr" >
<!-- || sheetData[item]['hv']==1 -->
@@ -123,15 +127,15 @@
<p v-show="ck && ck.length">已选择 <code v-text="ck.length||0"></code> 个实体待导入</p>
</div>
<div class="col-xs-8">
<div style="padding-left: 10px;background-color: #ccc;width: 100%"> Sheet-Detail</div>
<div class="base-info"> Sheet-Detail</div>
<div class="tab-content col-xs-9">
<div class="tab-pane fade active in" id="">
<table class="table-bordered" style="width: 100%">
<table class="table-bordered">
<caption class="" v-show="sheet && (sheet!='表说明' || sheet!='表名称')">
表名称: <span v-text="metaTable.field"></span>,中文名:<span v-text="metaTable.comment"></span>
</caption>
<thead>
<tr style="background-color: #f1f1f1" v-show="sheet && sheet!='表说明' && sheet!='表名称'">
<tr v-show="sheet && sheet!='表说明' && sheet!='表名称'">
<th>列名</th>
<th>注释</th>
<th>数据类型</th>
@@ -193,10 +197,10 @@
<div class="clearfix"></div>
<div class="row" v-show="tableName">
<div class="col-xs-2 sheet-cell">
<div style="padding-left: 10px;background-color: #ccc;width: 100%"> DB-Table</div>
<div class="col-xs-4 sheet-cell">
<div class="base-info"> DB-Table</div>
<ul class="nav nav-tabs nav-stacked tlist" style="height: 90%">
<li class="checkbox-inline clearfix" v-for="item in tableArr" >
<li class="checkbox-inline" v-for="item in tableArr" >
<!-- || tableData[item]['hv']==1 -->
<input type="checkbox"
v-model="ckTable"
@@ -207,13 +211,20 @@
</li>
</ul>
<!-- v-show="ckTable && ckTable.length" -->
<p >已选择 <code v-text="ckTable.length||0"></code> 个实体待导入,上面<code class="text-danger">红色</code> 部分已经导入过的数据表</p>
<div class="modal-footer" v-show="cate=='mysql'">
<button @click="back()" type="button" class="btn btn-default" data-dismiss="modal">返回</button>
<button @click="ckTable=[]" type="button" class="btn btn-default" data-dismiss="modal">取消选择</button>
<button @click="saveTable()" type="button" class="btn btn-primary">导入</button>
</div>
</div>
<div class="col-xs-8">
<div style="padding-left: 10px;background-color: #ccc;width: 100%"> Table-Detail</div>
<div class="base-info"> Table-Detail</div>
<div class="tab-content col-xs-9">
<div class="tab-pane fade active in">
<table class="table-bordered" style="width: 100%">
<table class="table-bordered">
<caption class="" v-show="tableName && (sheet!='表说明' || sheet!='表名称')">
表名称: <span v-text="tableInfo.name"></span>,中文名:<span v-text="tableInfo.comment"></span>
</caption>
@@ -255,11 +266,6 @@
<button @click="ck=[]" type="button" class="btn btn-default" data-dismiss="modal">取消选择</button>
<button @click="saveTable()" type="button" class="btn btn-primary">确定</button>
</div>
<div class="modal-footer" v-show="cate=='mysql'">
<button @click="ckTable=[]" type="button" class="btn btn-default" data-dismiss="modal">取消选择</button>
<button @click="back()" type="button" class="btn btn-default" data-dismiss="modal">取消</button>
<button @click="saveTable()" type="button" class="btn btn-primary">确定</button>
</div>
</div>
<script>

View File

@@ -28,7 +28,7 @@
</div>
</div>
<div class="col-md-12" style="padding-top: 10px;overflow:auto;">
<table class="table table-bordered table-hover" style="width: 100%">
<table class="table table-bordered table-hover">
<thead>
<tr>
<th v-for="field in cfg.cols" v-text="field.label"></th>

View File

@@ -1,4 +1,8 @@
<row class="meta-list">
<div class="col-md-12">
<h3 v-text="cfg.title" class="pull-left"></h3>
</div>
<div class="info">
<a @click="showInfo()" href="javascript:;"><i class="icon icon-info"></i></a>
</div>
@@ -21,22 +25,40 @@
</div>
<div class="col-md-12 col-xs-12">
<hr style="margin: 0px 5px 5px">
</div>
<!-- 实体列表 -->
<div class="col-md-4 col-xs-4">
<div>
实体表(Meta-Table) <input v-model="filter" placeholder="筛选实体" class="base-input">
<button @click="loadImportPage()" class="btn btn-primary pull-right" type="button"> <i class="icon icon-signin"></i>导入实体</button>
</div>
<ul class="nav nav-tabs nav-stacked tlist" style="height: 100%">
<li :class="[{'active':alias==item.alias}]" v-for="item in tables" v-if="dealFilter(item)">
<a @click="alias=item.alias" :title="dealTableLabel(item)" data-toggle="tooltip" v-text="dealTableLabel(item)" href="javascript:;"></a>
</li>
</ul>
</div>
<div class="col-md-8 col-xs-8">
<div class="input-group list-head">
<div class="pull-left">
<span class="input-group-btn">
<button @click="loadImportPage()" :class="['btn','btn-primary']" type="button"> <i class="icon icon-signin"></i>导入实体</button>
</span>
</div>
<span class="input-group-btn" style="padding-left: 5px">
<button @click="status=8" :class="['btn',{'btn-primary':status==8}]" type="button"> 实体关系MetaLink</button>
<button @click="status=8" :class="['btn',{'btn-primary':status==8}]" type="button"> 实体关系</button>
</span>
<span class="input-group-btn" style="padding-left: 10px">
<button @click="status=2" :class="['btn',{'btn-primary':status==2}]" type="button"> 字段编辑</button>
</span>
<span class="input-group-btn">
<button @click="status=1" :class="['btn',{'btn-primary':status==1}]" type="button"> 排序</button>
<button @click="status=1" :class="['btn',{'btn-primary':status==1}]" type="button"> 字段排序</button>
</span>
<span class="input-group-btn" style="padding-left: 10px">
@@ -47,29 +69,14 @@
<button @click="save()" :class="['btn',{'btn-primary':status!=0},{'disabled':status==0}]" type="button"> 保存</button>
</span>
</div>
<hr style="margin: 0px 5px 5px">
</div>
<!-- 实体列表 -->
<div class="col-md-4 col-xs-4">
<div style="padding-left: 10px;background-color: #ccc;width: 100%">
实体表(Meta-Table) <input v-model="filter" placeholder="筛选实体" style="margin-top: 5px;">
</div>
<ul class="nav nav-tabs nav-stacked tlist" style="height: 100%">
<li :class="['clearfix',{'active':alias==item.alias}]" v-for="item in tables" v-if="dealFilter(item)">
<a @click="alias=item.alias" :title="dealTableLabel(item)" data-toggle="tooltip" v-text="dealTableLabel(item)" href="javascript:;"></a>
</li>
</ul>
</div>
<div class="col-md-8 col-xs-8">
<!-- 实体属性列表 -->
<div class="panel" v-show="status!=7 && status!=8">
<!-- baseInfo -->
<div style="padding-left: 10px;background-color: #ccc;width: 100%"> 基本属性</div>
<div class="base-info">基本属性</div>
<!--<div class="panel-heading">基本属性配置</div>-->
<table :class="['table','table-bordered']" style="width: 100%">
<table :class="['table','table-bordered']">
<tr>
<th style="width: 100px">表名</th>
<td><span class="label label-outline" title="表别名alias">{{row.alias}}</span> {{row.name}}</td>
@@ -83,8 +90,8 @@
</table>
<div style="padding-left: 10px;background-color: #ccc;width: 100%"> 字段信息</div>
<table :class="[{'table':status!=2},'table-bordered']" style="width: 100%">
<div class="base-info"> 字段信息</div>
<table :class="[{'table':status!=2},'table-bordered']">
<tr style="background-color: #f1f1f1">
<td v-show="status==3 || status==4 || status==5 || status==6"><input type="checkbox"></td>
<th v-show="status==1"></th>
@@ -148,7 +155,7 @@
<!-- baseInfo -->
<div class="panel" v-show="status==7 ">
<div style="padding-left: 10px;background-color: #ccc;width: 100%"> 基本属性配置</div>
<div class="base-info"> 基本属性配置</div>
<!--<div class="panel-heading">基本属性配置</div>-->
<div class="panel-body" style="overflow:auto;">
<form class="form-horizontal">
@@ -192,7 +199,7 @@
</div>
<div class="panel" v-show="status==8">
<div style="padding-left: 10px;background-color: #ccc;width: 100%"> 实体关系</div>
<div class="base-info"> 实体关系</div>
<p style="padding: 5px">整理中,【实体关系】放到此处维护</p>
</div>
@@ -214,6 +221,7 @@
let vm = new Vue({
el: ".meta-list",
data: {
cfg: {"title": "实体管理"},
inTypes: ["INPUT", "SELECT_EXT", "INPUT_DT", "FMT_FUN", "FILE"],
dataTypes: ["bigint(20)", "varchar(255)", "varchar(64)", "varchar(32)", "varchar(16)", "int(11)", "int(3)", "int(2)", "datetime"],
filterCate: ["EQUAL", "NOTEQUAL", "LIKE", "IN"],

View File

@@ -108,7 +108,7 @@
<h4 class="modal-title">功能概览</h4>
</div>
<div class="modal-body" style="text-align: center">
<table class="table-bordered" style="width: 100%">
<table class="table-bordered">
<tr>
<th v-text="tableA.comment"></th>
<th v-text="tableB.comment"></th>

View File

@@ -27,7 +27,7 @@
</div>
<div class="col-md-5">
<table class="table table-auto" style="width: 100%">
<table class="table table-auto">
<tr>
<th>字段</th>
<th>备注</th>
@@ -52,7 +52,7 @@
</table>
</div>
<div class="col-md-5">
<table class="table table-auto" style="width: 100%">
<table class="table table-auto">
<tr>
<th>字段</th>
<th>备注</th>

View File

@@ -16,7 +16,7 @@
<div class="col-md-12">
<button @click="edit({})" class="btn btn-primary" type="button"> 用户金币发放 </button>
<!--<table class="table table-bordered table-hover" style="width: 100%">
<!--<table class="table table-bordered table-hover">
<thead>
<tr>
<th v-for="field in cfg.cols" v-text="field.label"></th>

View File

@@ -43,7 +43,7 @@
</div>
<div class="col-md-12">
<table class="table table-bordered table-hover" style="width: 100%">
<table class="table table-bordered table-hover">
<thead>
<tr>
<th v-for="field in cfg.cols" v-text="field.label"></th>
@@ -111,7 +111,7 @@
<input v-model="row.pwd" class="form-control" id="pwd" placeholder="连接密码">
</div>
<div class="col-md-2">
<a @click="loadCatalogs" class="btn" href="javascript:;">获取catalogs</a>
<a @click="loadCatalogs" class="btn btn-default" href="javascript:;">获取catalogs</a>
</div>
</div>
<div class="form-group">

View File

@@ -13,7 +13,7 @@
</div>
<div class="col-md-12">
<table class="table table-bordered table-hover" style="width: 100%">
<table class="table table-bordered table-hover">
<thead>
<tr>
<th v-for="field in cfg.cols" v-text="field.label"></th>

View File

@@ -50,7 +50,7 @@
<div class="col-md-6" v-show="logs.total">
<h3>最近使用记录 <small>共 {{logs.total}} 条记录</small></h3>
<table class="table-bordered" style="width: 100%">
<table class="table-bordered">
<thead>
<tr>
<th>IP</th>

View File

@@ -5,7 +5,7 @@
<div class="col-xs-6">
<div class="input-group">
<span class="input-group-btn">
<a href="javascript:;" class="btn" type="button"> 选择QTask任务</a>
<a class="btn btn-default" type="button"> 选择QTask任务</a>
</span>
<select class="form-control" v-model="row">
<option v-for="item in list.rows" :value="item" v-text="`${item.name}--${item.title}`"></option>
@@ -26,7 +26,7 @@
<div class="form-group">
<label for="para" class="col-sm-2 required">数据平台</label>
<div class="col-md-6">
<select v-model="row.dbPlatId" class="form-control">
<select v-model="row.dbplatid" class="form-control">
<option></option>
<option v-for="item in dbPlats" :value="item.key" v-text="item.name"></option>
</select>
@@ -87,7 +87,7 @@
catalogs: function () {
let dbPlats = this.dbPlats;
for (i in dbPlats) {
if (dbPlats[i].key == this.row.dbPlatId) {
if (dbPlats[i].key == this.row.dbplatid) {
return dbPlats[i]["catalogs"]
}
}
@@ -104,7 +104,7 @@
dbList().then(res => {
this.dbPlats = res.rows;
})
qtaskList().then(res => {
qtaskList({}).then(res => {
let list = res
if(list && list.rows.length > 0) {

View File

@@ -1,9 +1,43 @@
<style>
.edit {
table {
border-collapse: collapse;
thead {
text-align: center;
/*th {
background-color: #c3deff;
}*/
}
th {
vertical-align: middle;
}
}
input,textarea,select {
border-top: 0;
border-right: 0;
/*border-left: 2px!important;*/
border-bottom: 0;
/*background-color: #DDF3F5;*/
}
textarea {
width: 100%;
}
.tpl-debug>pre{
background-color: #F1F1F1;
border-top: 0;
border-right: 0;
border-bottom: 0;
}
}
</style>
<row class="qtask-list">
<div class="col-md-12">
<h3 v-text="cfg.title"></h3>
<button @click="openDia({'x':1})" class="btn btn-primary" type="button"> 添加QTask</button>
</div>
<div class="col-md-12 ">
<div class="col-md-4">
<!--<div class="col-md-2" style="padding-left: 0">
<div class="input-group">
<span class="input-group-btn">
@@ -16,13 +50,16 @@
</div>
</div>-->
<div class="input-group pull-right">
<!--<div class="input-group pull-right">
<button @click="openDia({})" class="btn btn-primary" type="button"> 添加QTask</button>
<!--<button @click="openDia({})" class="btn btn-primary" type="button" style="margin-left: 5px"> 添加QTask</button>-->
</div>
&lt;!&ndash;<button @click="openDia({})" class="btn btn-primary" type="button" style="margin-left: 5px"> 添加QTask</button>&ndash;&gt;
</div>-->
</div>
<div class="col-md-12" style="padding-top: 10px;overflow:auto;">
<table class="table table-bordered table-hover" style="width: 100%">
<div class="clearfix"></div>
<div class="col-md-5" style="padding-top: 10px;overflow:auto;">
<ul id="treeDemo" class="ztree" style="display: none"></ul>
<table class="table table-bordered table-hover" style="width: 100%; ">
<thead>
<tr>
<th v-for="field in cfg.cols" v-text="field.label"></th>
@@ -30,12 +67,14 @@
</tr>
</thead>
<tbody>
<tr v-for="row in list.rows">
<tr v-for="row in list.rows" @click="openDia(row)">
<td v-for="field in cfg.cols" v-title="row[field.col]" v-text="row[field.col]"></td>
<td>
<a @click="openDia(row)" href="javascript:;">编辑</a>|
<a @click="openDia(row)" href="javascript:;">编辑</a> |
<!--
<a @click="row['status']=1;qsave(row);" v-show="row.status != 1" href="javascript:;">启用</a>
<a @click="row['status']=0;qsave(row);" v-show="row.status == 1" href="javascript:;">不启用</a> |
-->
<a @click="row['status']=-1;comfirmDel(row);" href="javascript:;">删除</a>
</td>
</tr>
@@ -46,8 +85,116 @@
<img src="../res/img/none.png">
<p>暂无数据</p>
</div>
<!-- 分页 -->
<div>
<ul class="pager pull-right" style="margin: 1px 0">
<li class="previous">
<a >共{{list.total}}条数据</a>
</li>
<li :class="['previous', {'disabled':limit.pn==1}]">
<a @click="loadList(-- limit.pn)" href="javascript:;">«上一页</a>
</li>
<li :class="['next', {'disabled':limit.pn >= limit.total}]">
<a @click="loadList(limit.pn = ++limit.pn )" href="javascript:;">»下一页</a>
</li>
<li class="previous">
<a>到第<input v-model="limit.pn" style="width: 30px;height: 20px;margin: 0">/ {{limit.total}}页</a>
</li>
<li class="previous">
<a @click="loadList(limit.pn)" href="javascript:;">确定</a>
</li>
</ul>
</div>
</div>
<div class="col-md-7 edit">
<table v-show="editStatus==1" class="table table-bordered">
<thead>
<tr>
<th colspan="4"><h5>【任务编辑】</h5></th>
</tr>
</thead>
<tr>
<th style="width: 120px">任务名称</th>
<td>
<input v-model="row.title" class="form-control">
</td>
<th style="width: 120px">任务KEY</th>
<td>
<input v-model="row.name" class="form-control">
</td>
</tr>
<tr>
<th>数据平台</th>
<td>
<select v-model="row.dbplatid" class="form-control">
<option v-for="item in dbPlats" :value="item.key" v-text="item.name"></option>
</select>
</td>
<th>CataLog</th>
<td>
<select v-model="row.catalog" class="form-control">
<option v-for="item in catalogs()" :value="item" v-text="item"></option>
</select>
</td>
<!--<td colspan="3">
<div class="col-xs-6" style="padding: 0;">
<select v-model="row.dbplatid" class="form-control" style="background-color: #f2f4f9">
<option></option>
<option v-for="item in dbPlats" :value="item.key" v-text="item.name"></option>
</select>
</div>
<div class="col-xs-4">
<select v-model="row.catalog" class="form-control" style="background-color: #f2f4f9">
<option></option>
<option v-for="item in catalogs()" :value="item" v-text="item"></option>
</select>
</div>
</td>-->
</tr>
<tr>
<th>执行模板</th>
<td colspan="3" class="tpl-content">
<textarea v-model="row.content" @change="parsePara(row)" rows="6" class="pre-scrollable form-control"></textarea>
</td>
</tr>
<tr>
<th>默认参数</th>
<td colspan="3" class="tpl-para">
<textarea rows="1" v-model="row.para" class="form-control"></textarea>
</td>
</tr>
<tr>
<th>备注</th>
<td colspan="3" class="tpl-remark">
<textarea rows="1" v-model="row.remark" class="form-control"></textarea>
</td>
</tr>
<tr>
<td colspan="4">
<div class="pull-right">
<button @click="debug()" type="button" class="btn btn-primary" style="margin-right: 20px">调试</button>
<button @click="openDia({})" type="button" class="btn btn-default" data-dismiss="modal">取消</button>
<button @click="reset(row.name)" type="button" class="btn btn-default" data-dismiss="modal">重置</button>
<button @click="save()" type="button" class="btn btn-primary">保存</button>
</div>
</td>
</tr>
<tr>
<th>调试结果</th>
<td colspan="3" class="tpl-debug"><pre class="pre-scrollable">{{debugRet}}</pre></td>
</tr>
</table>
<div v-show="editStatus!=1" style="text-align: center">
<img src="../res/img/none.png">
<p>暂无数据</p>
</div>
</div>
<!-- modal-tpl -->
<div class="col-md-12">
<!-- 对话框触发按钮 -->
@@ -70,7 +217,7 @@
<div class="form-group">
<label class="col-sm-2 required">任务标识码</label>
<div class="col-md-6 col-sm-10">
<input v-model="row.name" :readonly="row.key" class="form-control" placeholder="请输入 任务标识码">
<input v-model="row.name" :disabled="row.qtaskid" :readonly="row.key" class="form-control" placeholder="请输入 任务标识码">
</div>
</div>
<div class="form-group" style="margin-bottom: 0">
@@ -87,13 +234,13 @@
</div>
<div class="form-group">
<label for="para" class="col-sm-2 required">数据平台</label>
<div class="col-md-6">
<select v-model="row.dbPlatId" class="form-control">
<div class="col-xs-6">
<select v-model="row.dbplatid" class="form-control">
<option></option>
<option v-for="item in dbPlats" :value="item.key" v-text="item.name"></option>
</select>
</div>
<div class="col-md-4">
<div class="col-xs-4">
<select v-model="row.catalog" class="form-control">
<option></option>
<option v-for="item in catalogs()" :value="item" v-text="item"></option>
@@ -126,7 +273,7 @@
</div>
<div class="modal-footer">
<button type="button" class="btn btn-default" data-dismiss="modal">取消</button>
<button @click="save()" type="button" class="btn btn-primary">确定</button>
<button @click="del()" type="button" class="btn btn-primary">确定</button>
</div>
</div>
</div>
@@ -134,9 +281,21 @@
</row>
<script src="http://www.1216.top/res/layui/layui.js"></script>
<script>
let {qtaskList,qtaskSave} = qtask
//let {qtaskList, qtaskSave, qtaskDelete} = qtask
let {dbList} = plat
function beforeDrag(treeId, treeNodes) {
for (var i=0,l=treeNodes.length; i<l; i++) {
if (treeNodes[i].drag === false) {
return false;
}
}
return true;
}
function beforeDrop(treeId, treeNodes, targetNode, moveType) {
return targetNode ? targetNode.drop !== false : true;
}
var vm = new Vue({
el: ".qtask-list",
data: {
@@ -152,56 +311,151 @@
cates: ["find","update"]
},
list: {rows:[], total: 0},
row: {},
limit: {pn: 1, ps: 20, total: 0},
row: {name:"",content:"", remark:"", para:"", x:""},
_row: {name:"",content:"", remark:""},
dbPlats: [],
sysPlats: [{name: "工控系统"}]
sysPlats: [{name: "工控系统"}],
editStatus: 0,
debugRet:"",
// ZTree
setting : {
edit: {
enable: true,
showRemoveBtn: false,
showRenameBtn: false
},
data: {
simpleData: {
enable: true
}
},
callback: {
beforeDrag: beforeDrag,
beforeDrop: beforeDrop
}
}
},
watch: {
},
methods: {
loadList: function () {
qtaskList().then(res => {
let list = res
this.list = list
})
},
openDia: function (row) {
vm.row = row;
$('#myModal').modal({moveable: true});
if (this.dbPlats.length == 0) {
row: function (row) {
if (row.name || row.x) {
vm.editStatus = 1
} else {
vm.editStatus = 0
}
if (this.dbPlats.length === 0) {
dbList().then(res => {
this.dbPlats = res.rows;
})
}
this.debugRet = ""
$(".tpl-content>textarea").attr("rows", this.countLines(row.content))
$(".tpl-remark>textarea").attr("rows", this.countLines(row.remark, 2, 5))
}
},
methods: {
loadList: function (pn = 1) {
let limit = this.limit.ps
let offset = (pn - 1) * limit
qtask.qtaskList({flipper: {offset, limit}}).then(res => {
this.list = res
let zNodes = [
{id: 1, pId: 0, name: "qtask 任务", open: true},
/*{id: 11, pId: 1, name: "随意拖拽 1-1"},
{id: 12, pId: 1, name: "随意拖拽 1-2", open: true},*/
];
for (let i in res.rows) {
let row = res.rows[i]
zNodes.push({id: row.qtaskid, pId: "1", name: row.title + '-(' + row.name+')'})
}
$.fn.zTree.init($("#treeDemo"), this.setting, zNodes);
this.limit.total = Math.ceil(this.list.total / limit)
})
},
openDia: function (row) {
vm.row = red.deepClone(row);
vm._row = red.deepClone(row);
vm.editStatus = 1
/*$('#myModal').modal({moveable: true});
if (this.dbPlats.length === 0) {
dbList().then(res => {
this.dbPlats = res.rows;
})
}*/
this.parsePara(row)
},
save() {
qtaskSave({task:this.row}).then(res => {
qtask.qtaskSave(this.row).then(res => {
red.showOk()
this.loadList()
$('#myModal').modal('hide')
this.row = {}
red.wait(1000).then(() => {
this.loadList()
this.row = {}
$('#myModal').modal('hide')
})
})
},
dealStatus: function (n) {
var arr = {"0":"未启用", "1":"启用", "-1":"删除",}
return arr[n+""] || "";
},
comfirmDel: function (row) {
vm.row = row;
$('#mySmModal').modal({});
},
del: function () {
qtask.qtaskDelete(this.row.qtaskid).then(res => {
$('#mySmModal').modal('hide')
this.loadList()
})
},
abc: function () {
$(".container-fixed").load("abc.html");
},
catalogs: function () {
let dbPlats = this.dbPlats;
for (i in dbPlats) {
if (dbPlats[i].key == this.row.dbPlatId) {
if (dbPlats[i].key === this.row.dbplatid) {
return dbPlats[i]["catalogs"]
}
}
},
debug: function () {
qtask.qtaskDebug({task: this.row}).then(res => {
this.debugRet = "";
this.debugRet = res;
red.showOk("查询成功")
})
},
countLines: function (text='', min=3, max=15) {
// 计算"\n"和"\r\n"两种换行符的数量
let line = (text.match(/\n/g) || []).length + (text.match(/\r\n/g) || []).length + 1
if (line < 3) {
line = min;
}
if (line > 15) {
line = max;
}
return line; // 最后+1是因为可能末尾没有换行符但仍然算一行
},
reset: function () {
this.row = red.deepClone(vm._row)
},
parsePara(row) {
let sql = row.content || ''
let pattern = /#\((.*?)\)/g; // 创建一个正则表达式来查找 "#()" 内的任何内容
let match;
let para = JSON.parse(row.para)
let _para = {}
while ((match = pattern.exec(sql)) !== null) {
// console.log("提取的变量:", match[1]); // match[1] 存储的是第一个括号内捕获的内容
_para[match[1]] = para[match[1]] || ''
}
this.row.para = JSON.stringify(_para)
}
},
mounted: function () {

View File

@@ -10,7 +10,7 @@ body {
}
#top {
background-color: #404a53;
background-color: #2B323BFF;
padding: 5px 10px;
margin: 0px;
height: 50px;
@@ -31,13 +31,13 @@ body {
#top>.nav-tabs>li.active>a:hover,
#top>.nav-tabs>li>a:hover {
background-color: #404a53;
color: #fff;
/*color: #fff;*/
border: 0;
border-bottom: 3px solid #607d8b;
}
#left {
background-color: #404a53; /*padding-bottom: 0px; margin-bottom: 0px;*/
background-color: #2B323BFF; /*padding-bottom: 0px; margin-bottom: 0px;*/
}
#main {
margin-top: 15px;
@@ -51,7 +51,7 @@ body {
/*background-color: #fff;*/
}
#left .nav {
background-color: #404a53;
background-color: #2B323BFF;
}
#left .menu > .nav > li > .nav > li > a {
@@ -89,7 +89,7 @@ body {
margin-left: -10px;
width: 100%;
height: 35px;
background-color: #eee;
/*background-color: #eee;*/
padding: 8px;
color: #808080;
}
@@ -104,9 +104,9 @@ table td,th{
text-overflow: ellipsis;
max-width: 173px;
}
th{
/*th{
background-color: #f1f1f1;
}
}*/
/*ddl-page*/
.ddl .input-group {
@@ -145,7 +145,7 @@ th{
.table td, .table th{
padding: 5px;
}
.table td {background-color: #fff;}
/*.table td {background-color: #fff;}*/
/* 页面信息按钮样式 */
#main .info {
@@ -177,7 +177,7 @@ th{
.tlist>li.active>a:focus,
.tlist>li.active>a:hover,
.tlist>li>a:hover {
background-color: #e2effc;
background-color: #404348;
border-radius: 2px 0 0 2px;
border-left: 5px solid #a5cff8;
}
@@ -189,4 +189,126 @@ th{
tr.dragging {
visibility: visible;
opacity: .3;
}
}
#left {
.footer {
background-color: #3b474c;
cursor: pointer;
color: #ccc;
margin: auto;
left: -1px;
}
.user {
position: fixed;
bottom: 35px;
height: 35px;
margin: auto;
background-color: #404a53;
color: #808080;
}
}
.leftMini {
#left {
width: auto;
.icon {
font-size: 16px;
}
.footer {
margin: auto;
}
}
.col-md-11 {
width: 96%!important;
}
}
.col-md-12>h3{
margin-top: 0px;
}
.base-info {
padding-left: 10px;
background-color: #ccc;
width: 100%;
}
.base-input {
margin-top: 5px;margin-bottom: 5px;height: 30px; border: 1px solid black;
}
.plat-switch {
border: 0;
background-color: #404a53!important;
color: #fff;
margin-left: -5px;
height: 35px;
}
body,table,th,td,.table-bordered,textarea,.form-control,button,pre,hr,.panel,input,checkbox,
.btn-default,.input-group-btn,.input-group,
/*.nav-tabs>li.active>a,.nav-tabs>li:focus,*/
.previous>a,.next>a,
.dlist>li>a,
.input-group-addon,
.modal-content,.modal-header,.modal-body,.modal-footer,
.base-info,.plat-switch,
.tlist>li.active>a,.tlist>li>a,
.alert-info {
background-color: #22272e !important;
color: #c3c5c7 !important;
border-color: #9e9e9e50!important;
th {
background-color: #3b4652 !important;
color: #85878AFF!important;
}
a {
color: #7f74c4;
}
.btn-primary {
background-color: #8276c9!important;
color: #3e3a57!important;
}
.btn-primary:focus, .btn-primary:hover {
background-color: #998fd9 !important;
}
.btn {
text-shadow: none;
}
.btn-default:focus,.btn-default:hover {
border-color: #7f74c4!important;
color: #7f74c4!important;
}
.footer {
background-color: #404a53 !important;
}
a:focus,a:hover {
color: #fff!important;
}
.nav-tabs.nav-stacked {
border-right: 0;
ul {
li>a {
padding: 7px 15px;
border-radius: 0 25px 25px 0;
}
}
}
.base-info,H3 {
color: #85878AFF!important;
}
.nav-tabs.nav-stacked>li {
margin-right: 5px;
}
.alert-info {
background-color: #607d8b!important;
}
table {
width: 100%;
}
}
.plat-switch {
border: 0;
background-color: #404a53 !important;
color: #fff;
}

View File

@@ -1,6 +1,6 @@
var red = {
showMsg: function(option) {
var defOption = {msg: "操作成功", type:"info", placement: "top"};
var defOption = {msg: "操作成功", /*type:"success",*/ placement: "top"};
option = option || defOption;
for (var k in defOption) {
@@ -63,6 +63,66 @@ var red = {
callback(data)
})
},
get2(url, params = {}) {
return new Promise(resolve => {
// 创建一个包含自定义 headers 的配置对象
const config = {
method: 'get', // 指定请求方法为 GET
url: url, // 指定请求的 URL
headers: { // 设置 Header 参数
//'Authorization': 'Bearer your-token', // 假设添加一个 Bearer 认证 token
//'Content-Type': 'application/json', // 或者指定 Content-Type 等其他 Header
//'Custom-Header': 'Some value' // 自定义 Header 参数
'token': red.getData("token"),
'plattoken': red.getPlatToken(),
},
params: params,
};
axios.request(config).then(res => {
// 未登录,前往登录
if (res.data.retcode === -2) {
location.href = "/user/login.html"
}
resolve(res.data.result)
}).catch(error => {
console.error(error); // 处理错误
});
})
},
post2(url, params = {}) {
return new Promise(resolve => {
// 创建一个包含自定义 headers 的配置对象
const config = {
method: 'post', // 指定请求方法为 GET
url: url, // 指定请求的 URL
data: params,
headers: { // 设置 Header 参数
//'Authorization': 'Bearer your-token', // 假设添加一个 Bearer 认证 token
//'Content-Type': 'application/json', // 或者指定 Content-Type 等其他 Header
//'Custom-Header': 'Some value' // 自定义 Header 参数
'token': red.getData("token"),
'plattoken': red.getPlatToken(),
}
};
axios.request(config).then(res => {
// 未登录,前往登录
if (res.data.retcode === -2) {
location.href = "/user/login.html"
}
if (res.data.retcode !== 0) {
//console.log(res)
red.showError(res.data.retinfo)
return
}
resolve(res.data.result)
}).catch(error => {
console.error(error); // 处理错误
});
})
},
getX(url, params = {}) {
if (!params['platToken'])
params['platToken'] = red.getPlatToken()
@@ -80,7 +140,7 @@ var red = {
resolve(data)
}).catch(res => {
console.log(res)
//console.log(res)
red.showMsg({type:"error", msg:'操作失败!'})
})
})
@@ -118,19 +178,21 @@ var red = {
})
},
post: function(url, params = {}, callback) {
params['platToken'] = red.getPlatToken()
//params['platToken'] = red.getPlatToken()
axios.post(url, params).then(res => {
let data = red.loginCheck(res.data)
/*let data = red.loginCheck(res.data)
if (data && data.code == -1) {
red.showMsg({msg: data.message, type: "error"})
return;
}
}*/
if (callback) {
callback(data.code == 0 ? data.body : data)
console.log("xx", res.data.body)
callback(res.data.code === 0 ? res.data.body : data)
} else {
red.showMsg()
}
return res
})
},
@@ -194,6 +256,7 @@ var red = {
location.href = "/user/login.html";
}, 2000);
}
return json.data
},
replaceAll: function (d, s, t) {
let reg=new RegExp(s,"g"); //创建正则RegExp对象
@@ -206,6 +269,23 @@ var red = {
},
replace$: function (d) {
return red.replaceAll(d, "[$]", ".");
},
wait(ms) {
return new Promise(resolve => setTimeout(resolve, ms));
},
deepClone: function (obj) {
if (obj === null) return obj;
if (obj instanceof Date) return new Date(obj);
if (obj instanceof RegExp) return new RegExp(obj);
if (typeof obj !== 'object') return obj;
let cloneObj = new obj.constructor();
for (let key in obj) {
if (obj.hasOwnProperty(key)) {
cloneObj[key] = this.deepClone(obj[key]);
}
}
return cloneObj;
}
}

View File

@@ -123,7 +123,7 @@
methods: {
login({username, pwd}) {
login({username, pwd}).then(res => {
console.log(res)
red.setData("token", res.sessionid);
platList().then(res => {
let rows = res.rows
console.log(rows)
@@ -133,7 +133,6 @@
if (!this.sysPlat) {
this.sysPlat = rows[0];
}
red.setData("sysPlats", rows);
red.setData('userName', username)
setTimeout(function () {