Browse Source

更改源数据库

master
parent
commit
4cb01d42df
  1. 2
      NugetTest/appsettings.json
  2. 7
      ReZero/SuperAPI/MethodGeneratorAPI/internalapi/PermissionHelper/SavePermissionInfoDetailModel.cs
  3. 20
      SuperAPI/appsettings.json
  4. 66
      SuperAPI/wwwroot/rezero/default_ui/css/page_table_list.css
  5. 728
      SuperAPI/wwwroot/rezero/default_ui/database_manager.html
  6. 365
      SuperAPI/wwwroot/rezero/default_ui/dynamic_interface.html
  7. 317
      SuperAPI/wwwroot/rezero/default_ui/instance-transfer.html
  8. 357
      SuperAPI/wwwroot/rezero/default_ui/interface_categroy.html
  9. 3936
      SuperAPI/wwwroot/rezero/default_ui/interface_manager.html

2
NugetTest/appsettings.json

@ -33,7 +33,7 @@
}
],
//, true
"DisableSystemInterface": false
"DisableSystem": false
},
"Cors": {
"Enable": true, //true

7
ReZero/SuperAPI/MethodGeneratorAPI/internalapi/PermissionHelper/SavePermissionInfoDetailModel.cs

@ -1,13 +1,16 @@
using System;
using SqlSugar;
using System;
using System.Collections.Generic;
using System.Text;
namespace ReZero.SuperAPI
{
public class SavePermissionInfoDetailModel: ZeroPermissionInfo
{
{
[SqlSugar.SugarColumn(ColumnDataType = "CLOB")]
public List<string>? Users { get; set; }
[SqlSugar.SugarColumn(ColumnDataType = "CLOB")]
public List<PermissionInfoInterfaceItem>? Items { get; set; }
}
public class PermissionInfoInterfaceItem

20
SuperAPI/appsettings.json

@ -6,15 +6,17 @@
}
},
"ReZero": {
"BasicDatabase": {
/* MySql,SqlServer,Sqlite,Oracle,PostgreSQL,Dm (),Kdbndp */
// "DbType": "SqlServer",
// "ConnectionString": "server=.;uid=sa;pwd=sasa;database=SuperAPI"
// "DbType": "Sqlite",
// "ConnectionString": "Data Source=SuperAPI.db",
"DbType": "SqlServer",
"ConnectionString": "server=192.168.2.5;uid=hdhis;pwd=haoding@123;database=SuperAPI"
},
"BasicDatabase": {
/* MySql,SqlServer,Sqlite,Oracle,PostgreSQL,Dm (),Kdbndp */
// "DbType": "SqlServer",
// "ConnectionString": "server=.;uid=sa;pwd=sasa;database=SuperAPI"
// "DbType": "Sqlite",
// "ConnectionString": "Data Source=SuperAPI.db",
//"DbType": "SqlServer",
//"ConnectionString": "server=192.168.2.5;uid=hdhis;pwd=haoding@123;database=SuperAPI",
"DbType": "Oracle",
"ConnectionString": "Data Source=192.168.2.5:2521/ORCLPDB;User ID=DATA_TRANSFER;Password=his"
},
"Ui": {
/*ReZerofalse,trueSwagger*/
"ShowNativeApiDocument": true,

66
SuperAPI/wwwroot/rezero/default_ui/css/page_table_list.css

@ -1,58 +1,58 @@
.table-responsive th {
text-align: center;
text-align: center;
}
.table_opt {
text-align: center;
width: 250px;
text-align: center;
width: 250px;
}
.table_opt button {
max-width: 80px;
margin: 0 10px;
}
.table_opt button {
max-width: 80px;
margin: 0 10px;
}
.table_opt2 {
text-align: center;
width: 330px;
text-align: center;
width: 330px;
}
.table_opt2 button {
max-width: 90px;
margin: 0 5px;
}
.table_opt2 button {
max-width: 90px;
margin: 0 5px;
}
.table_opt3 {
text-align: center;
width: 450px;
text-align: center;
width: 450px;
}
.table_opt3 button {
max-width: 75px;
margin: 0 5px;
}
.table_opt3 button {
max-width: 75px;
margin: 0 5px;
}
.form-group label {
border: 0 !important;
text-align: right
border: 0 !important;
text-align: right;
}
.search-bar {
padding: 0 15px;
padding-top: 35px;
padding: 0 15px;
padding-top: 35px;
}
.pagination {
margin-left:20px;
margin-top:-20px;
margin-left: 20px;
margin-top: -20px;
}
.pagination select {
border: 1px solid #ccc;
width: 40px;
text-align: center;
position: relative;
top: 4px;
}
.pagination select {
border:1px solid #ccc;
width:40px;
text-align:center;
position:relative;
top:4px
}
.lyear-checkbox {
padding-left: 10px;
padding-left: 10px;
}

728
SuperAPI/wwwroot/rezero/default_ui/database_manager.html

@ -1,393 +1,389 @@
@@master_page.html
<link href="css/page_table_list.css" rel="stylesheet" />
<div id="apibox" class="card">
<div class="search-bar">
<form id="frmSearach" action="lyear_forms_elements.html" method="post" onsubmit="return false;">
<div class="form-group">
<div class="row">
<div class="col-md-1"><label class="form-control" t>库备注:</label></div>
<div class="col-md-3"><input class="form-control" type="text" id="txtSearch" name="example-text-input" placeholder="数据库备注"></div>
<div class="col-md-3">
<button @click="onSearch()" id="btnSearch" class="btn btn-secondary"><i class="mdi mdi-magnify"></i>搜索</button>
<button onclick="frmSearach.reset()" class="btn btn-close" type="submit">清空</button>
</div>
<div class="col-md-4"></div>
</div>
</div>
</form>
<div class="toolbar-btn-action">
<button @click="openAddDiv()" class="btn btn-primary m-r-5" data-toggle="modal" data-target="#gridSystemModal"><i class="mdi mdi-plus"></i> 新增</button>
<button @click="openSynchronousDataDiv()" class="btn btn-success m-r-5" data-toggle="modal" data-target="#btnSynchronousData"><i class="mdi mdi-redo-variant"></i> 同步接口</button>
<div class="search-bar">
<form id="frmSearach" action="lyear_forms_elements.html" method="post" onsubmit="return false;">
<div class="form-group">
<div class="row">
<div class="col-md-1"><label class="form-control" t>库备注:</label></div>
<div class="col-md-3"><input class="form-control" type="text" id="txtSearch" name="example-text-input" placeholder="数据库备注"></div>
<div class="col-md-3">
<button @click="onSearch()" id="btnSearch" class="btn btn-secondary"><i class="mdi mdi-magnify"></i>搜索</button>
<button onclick="frmSearach.reset()" class="btn btn-close" type="submit">清空</button>
</div>
<div class="col-md-4"></div>
</div>
</div>
</form>
<div class="toolbar-btn-action">
<button @click="openAddDiv()" class="btn btn-primary m-r-5" data-toggle="modal" data-target="#gridSystemModal"><i class="mdi mdi-plus"></i> 新增</button>
<button @click="openSynchronousDataDiv()" class="btn btn-success m-r-5" data-toggle="modal" data-target="#btnSynchronousData"><i class="mdi mdi-redo-variant"></i> 同步接口</button>
</div>
<div class="card-body">
</div>
<div class="card-body">
<h5> </h5>
<div class="table-responsive">
<table class="table table-bordered">
<thead>
<tr v-if="data && data.Columns && data.Columns.length > 0">
<th class="mi-w-100" v-for="column in data.Columns">{{column.ColumnDescription}}</th>
<th>操作</th>
</tr>
</thead>
<tbody v-if="data &&data.Data">
<tr v-if="data.Columns && data.Columns.length > 0" v-for="item in data.Data">
<h5> </h5>
<div class="table-responsive">
<table class="table table-bordered">
<thead>
<tr v-if="data && data.Columns && data.Columns.length > 0">
<th class="mi-w-100" v-for="column in data.Columns">{{column.ColumnDescription}}</th>
<th>操作</th>
</tr>
</thead>
<tbody v-if="data &&data.Data">
<tr v-if="data.Columns && data.Columns.length > 0" v-for="item in data.Data">
<td v-for="(column,index) in data.Columns" class="word-all">
<div v-if="index == 0" class="mi-w-150">
{{ item[column.PropertyName] }}
</div>
<div v-else>
{{ item[column.PropertyName] }}
</div>
</td>
<td v-for="(column,index) in data.Columns" class="word-all">
<div v-if="index == 0" class="mi-w-150">
{{ item[column.PropertyName] }}
</div>
<div v-else>
{{ item[column.PropertyName] }}
</div>
</td>
<td class="table_opt3">
<button data-toggle="modal" @click="testDatabase(item)" class="btn btn-link" type="button">
<i class="mdi mdi-test-tube"></i> 测试
</button>
<button data-toggle="modal" @click="createDatabase(item)" class="btn btn-link" type="button">
<i class="mdi mdi-cube"></i> 建库
</button>
<button data-toggle="modal" @click="openEditDiv(item)" data-target="#gridSystemModal" class="btn btn-link" type="button">
<i class="mdi mdi-lead-pencil"></i> 修改
</button>
<button data-toggle="modal" @click="deleteAndConfirm(item)" data-target="#divDelBox" class="btn btn-link" type="button">
<i class="mdi mdi-do-not-disturb"></i> 删除
</button>
</td>
</tr>
</tbody>
</table>
</div>
<td class="table_opt3">
<button data-toggle="modal" @click="testDatabase(item)" class="btn btn-link" type="button">
<i class="mdi mdi-test-tube"></i> 测试
</button>
<button data-toggle="modal" @click="createDatabase(item)" class="btn btn-link" type="button">
<i class="mdi mdi-cube"></i> 建库
</button>
<button data-toggle="modal" @click="openEditDiv(item)" data-target="#gridSystemModal" class="btn btn-link" type="button">
<i class="mdi mdi-lead-pencil"></i> 修改
</button>
<button data-toggle="modal" @click="deleteAndConfirm(item)" data-target="#divDelBox" class="btn btn-link" type="button">
<i class="mdi mdi-do-not-disturb"></i> 删除
</button>
</td>
</tr>
</tbody>
</table>
</div>
@@page_control.html
<div class="modal fade" tabindex="-1" role="dialog" aria-labelledby="gridSystemModalLabel" id="gridSystemModal" style="display: none;">
<div class="modal-dialog" role="document">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">×</span></button>
<h4 class="modal-title" id="exampleModalLabel">{{title}}</h4>
</div>
<div class="modal-body">
<form id="frmEdit">
<input type="hidden" v-model="formData.Id" name="Id" />
<div class="form-group">
<label for="recipient-name" class="control-label">库备注:</label>
<input type="text" v-model="formData.Name" name="Name" class="form-control" id="recipient-name">
</div>
<div class="form-group">
<label for="message-text" class="control-label">数据库类型:</label>
<select @change="showMessage" class="form-control" v-model="formData.DbType" name="DbType">
<option v-for="item in dbTypeList" v-bind:value="item.Value"> {{item.Name}} </option>
</select>
</div>
<div class="form-group">
<label for="message-text" class="control-label">字符串:</label>
<textarea class="form-control" v-model="formData.Connection" name="Connection" id="message-text"></textarea>
</div>
<div class="form-group">
<code class="db0 hidden dbmessage">
MySql示例:<br />
server=localhost;Database=SqlSugar4xTest;Uid=root;Pwd=haosql;
非默认端口要用port=3306
</code>
<code class="db1 hidden dbmessage">
SqlServer示例:<br />
server=localhost;Database=SqlSugar4xTest;Uid=root;Pwd=haosql;<br />
.net8需要注意 启动文件csproj文件 ,InvariantGlobalization设置为false<br />
有端口localhost:1433;
</code>
<code class="db2 hidden dbmessage">
Sqlite示例:<br />
DataSource=xxx.sqlite
</code>
<code class="db3 hidden dbmessage">
Oracle示例:<br />
//写法1<br />
Data Source=localhost/orcl;User ID=system;Password=haha<br />
//字法2 上面连不上可以试用下面写法<br />
Data Source=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=150.158.57.125)(PORT=1521)))(CONNECT_DATA=(SERVICE_NAME=ORCL)));User Id=xx;Password=xx;Pooling='true';Max Pool Size=150
</code>
<code class="db4 hidden dbmessage">
Postgresql 示例:<br />
PORT=5432;DATABASE=SqlSugar4xTest;HOST=localhost;PASSWORD=haosql;USER ID=postgres<br />
不是public需要设置架构名searchpath=架构名
</code>
<code class="db5 hidden dbmessage">
达梦 示例:<br />
Server=153.101.101:5236;User Id=SYSDBA;PWD=123456;SCHEMA=架构;DATABASE=DAMENG
</code>
<code class="db6 hidden dbmessage">
人大金仓 示例:<br />
Server=127.0.0.1;Port=54321;UID=SYSTEM;PWD=system;database=SQLSUGAR4XTEST1<br>
默认是Oracle模式,如果不是Oracle模式需要看SqlSugar文档改ReZero源码<br>
通过SQL可以查看安装模式 show database_mode;
</code>
</div>
</form>
</div>
<div class="modal-footer">
<button type="button" id="btnCloseEdit" class="btn btn-default" data-dismiss="modal">关闭</button>
<button type="button" @click="addOrUpdate()" class="btn btn-primary">保存</button>
</div>
</div>
@@page_control.html
<div class="modal fade" tabindex="-1" role="dialog" aria-labelledby="gridSystemModalLabel" id="gridSystemModal" style="display: none;">
<div class="modal-dialog" role="document">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">×</span></button>
<h4 class="modal-title" id="exampleModalLabel">{{title}}</h4>
</div>
<div class="modal-body">
<form id="frmEdit">
<input type="hidden" v-model="formData.Id" name="Id" />
<div class="form-group">
<label for="recipient-name" class="control-label">库备注:</label>
<input type="text" v-model="formData.Name" name="Name" class="form-control" id="recipient-name">
</div>
<div class="form-group">
<label for="message-text" class="control-label">数据库类型:</label>
<select @change="showMessage" class="form-control" v-model="formData.DbType" name="DbType">
<option v-for="item in dbTypeList" v-bind:value="item.Value"> {{item.Name}} </option>
</select>
</div>
<div class="form-group">
<label for="message-text" class="control-label">字符串:</label>
<textarea class="form-control" v-model="formData.Connection" name="Connection" id="message-text"></textarea>
</div>
<div class="form-group">
<code class="db0 hidden dbmessage">
MySql示例:<br />
server=localhost;Database=SqlSugar4xTest;Uid=root;Pwd=haosql;
非默认端口要用port=3306
</code>
<code class="db1 hidden dbmessage">
SqlServer示例:<br />
server=localhost;Database=SqlSugar4xTest;Uid=root;Pwd=haosql;<br />
.net8需要注意 启动文件csproj文件 ,InvariantGlobalization设置为false<br />
有端口localhost:1433;
</code>
<code class="db2 hidden dbmessage">
Sqlite示例:<br />
DataSource=xxx.sqlite
</code>
<code class="db3 hidden dbmessage">
Oracle示例:<br />
//写法1<br />
Data Source=localhost/orcl;User ID=system;Password=haha<br />
//字法2 上面连不上可以试用下面写法<br />
Data Source=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=150.158.57.125)(PORT=1521)))(CONNECT_DATA=(SERVICE_NAME=ORCL)));User Id=xx;Password=xx;Pooling='true';Max Pool Size=150
</code>
<code class="db4 hidden dbmessage">
Postgresql 示例:<br />
PORT=5432;DATABASE=SqlSugar4xTest;HOST=localhost;PASSWORD=haosql;USER ID=postgres<br />
不是public需要设置架构名searchpath=架构名
</code>
<code class="db5 hidden dbmessage">
达梦 示例:<br />
Server=153.101.101:5236;User Id=SYSDBA;PWD=123456;SCHEMA=架构;DATABASE=DAMENG
</code>
<code class="db6 hidden dbmessage">
人大金仓 示例:<br />
Server=127.0.0.1;Port=54321;UID=SYSTEM;PWD=system;database=SQLSUGAR4XTEST1<br>
默认是Oracle模式,如果不是Oracle模式需要看SqlSugar文档改ReZero源码<br>
通过SQL可以查看安装模式 show database_mode;
</code>
</div>
</form>
</div>
<div class="modal-footer">
<button type="button" id="btnCloseEdit" class="btn btn-default" data-dismiss="modal">关闭</button>
<button type="button" @click="addOrUpdate()" class="btn btn-primary">保存</button>
</div>
</div>
</div>
<div class="modal fade" tabindex="-1" role="dialog" aria-labelledby="gridSystemModalLabel" id="btnSynchronousData" style="display: none;">
<div class="modal-dialog" role="document">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">×</span></button>
<h4 class="modal-title">同步数据</h4>
</div>
<div class="card-body">
<p class="alert alert-success">
注意:这儿只同步四张配置表,业务表需要在【菜单:实体表维护】选实体点同步<br />
1、接口数据 : [zero_interface_list]
[zero_interface_category]<br />
2、实体数据 : [zero_entity_info]
[zero_entity_column_info]
</p>
<form class="form-horizontal">
<div class="form-group has-success">
<label class="col-xs-12 text-align-left" for="example-text-input-success">基准库</label>
<div class="col-xs-12">
<select v-model="od_originaldb" class="form-control" type="text" id="example-text-input-success" name="example-text-input-success" placeholder="成功状态..">
<option value="1">启动库Rezro</option>
</select>
</div>
</div>
<div class="form-group has-success">
<label class="col-xs-12 text-align-left" for="example-text-input-success2">更新库</label>
<div class="col-xs-12">
<select v-model="od_targetdb" class="form-control" type="text" id="example-text-input-success2" name="example-text-input-success" placeholder="成功状态..">
<option :value="item.Id" v-if="item.Id!=1" v-for="item in dataAll">{{item.Name}}</option>
</select>
</div>
</div>
<div class="form-group has-success">
<label class="col-xs-12 text-align-left" for="example-text-input-success">备份表</label>
<div class="col-xs-12">
<label class="lyear-checkbox checkbox-primary text-align-left">
<input v-model="od_isbak" type="checkbox" class="checkbox-parent checkbox-child" dataid="id-1-6" value="true">
<span class="m-l-15"> 表名+时间HHmmss</span>
</label>
</div>
</div>
</form>
</div>
</div>
<div class="modal fade" tabindex="-1" role="dialog" aria-labelledby="gridSystemModalLabel" id="btnSynchronousData" style="display: none;">
<div class="modal-dialog" role="document">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">×</span></button>
<h4 class="modal-title">同步数据</h4>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-default" data-dismiss="modal">关闭</button>
<button type="button" @click="synchronousData" class="btn btn-primary">同步</button>
</div>
<div class="card-body">
<p class="alert alert-success">
注意:这儿只同步四张配置表,业务表需要在【菜单:实体表维护】选实体点同步<br />
1、接口数据 : [zero_interface_list]
[zero_interface_category]<br />
2、实体数据 : [zero_entity_info]
[zero_entity_column_info]
</p>
<form class="form-horizontal">
<div class="form-group has-success">
<label class="col-xs-12 text-align-left" for="example-text-input-success">基准库</label>
<div class="col-xs-12">
<select v-model="od_originaldb" class="form-control" type="text" id="example-text-input-success" name="example-text-input-success" placeholder="成功状态..">
<option value="1">启动库Rezro</option>
</select>
</div>
</div>
<div class="form-group has-success">
<label class="col-xs-12 text-align-left" for="example-text-input-success2">更新库</label>
<div class="col-xs-12">
<select v-model="od_targetdb" class="form-control" type="text" id="example-text-input-success2" name="example-text-input-success" placeholder="成功状态..">
<option :value="item.Id" v-if="item.Id!=1" v-for="item in dataAll">{{item.Name}}</option>
</select>
</div>
</div>
<div class="form-group has-success">
<label class="col-xs-12 text-align-left" for="example-text-input-success">备份表</label>
<div class="col-xs-12">
<label class="lyear-checkbox checkbox-primary text-align-left">
<input v-model="od_isbak" type="checkbox" class="checkbox-parent checkbox-child" dataid="id-1-6" value="true">
<span class="m-l-15"> 表名+时间HHmmss</span>
</label>
</div>
</div>
</form>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-default" data-dismiss="modal">关闭</button>
<button type="button" @click="synchronousData" class="btn btn-primary">同步</button>
</div>
</div>
</div>
</div>
</div>
<script>
var vueObj = new Vue({
el: '#apibox',
data: {
data: null,
dataAll: null,
error: null,
addTitle: "添加数据库配置",
editTitle: "修改数据库配置",
title: "",
dbTypeList: [],
formData: {
var vueObj = new Vue({
el: '#apibox',
data: {
data: null,
dataAll: null,
error: null,
addTitle: "添加数据库配置",
editTitle: "修改数据库配置",
title: "",
dbTypeList: [],
formData: {
},
od_isbak: false,
od_originaldb: null,
od_targetdb: null,
lock: false
},
mounted() {
this.fetchData("");
},
methods: {
fetchData(append) {
var url = "/PrivateReZeroRoute/100003/GetDatabaseInfoList?ParentId=200" + append;
axios.get(url, jwHeader)
.then(response => {
this.data = response.data;
this.error = null;
})
.catch(error => {
this.error = error.message;
this.data = null;
});
},
od_isbak: false,
od_originaldb: null,
od_targetdb: null,
lock: false
},
mounted() {
this.fetchData("");
},
methods: {
fetchData(append) {
var url = "/PrivateReZeroRoute/100003/GetDatabaseInfoList?ParentId=200" + append;
axios.get(url, jwHeader)
.then(response => {
this.data = response.data;
this.error = null;
})
.catch(error => {
this.error = error.message;
this.data = null;
});
axios.get("/PrivateReZeroRoute/100004/GetDbTypeList", jwHeader)
.then(response => {
this.dbTypeList = response.data;
this.error = null;
})
.catch(error => {
this.error = error.message;
this.data = null;
});
axios.get("/PrivateReZeroRoute/100004/GetDbTypeList", jwHeader)
.then(response => {
this.dbTypeList = response.data;
this.error = null;
})
.catch(error => {
this.error = error.message;
this.data = null;
});
axios.get("/PrivateReZeroRoute/100004/GetDatabaseInfoAllList", jwHeader)
.then(response => {
this.dataAll = response.data;
})
.catch(error => {
this.error = error.message;
this.data = null;
});
},
onSearch: function (page) {
axios.get("/PrivateReZeroRoute/100004/GetDatabaseInfoAllList", jwHeader)
.then(response => {
this.dataAll = response.data;
})
.catch(error => {
this.error = error.message;
this.data = null;
});
},
onSearch: function (page) {
var urlParameters = "&" + tools.objectToQueryString({
Name: txtSearch.value,
__pageNumber: page,
__pageSize: tools.getValue("selPageSize"),
});
var urlParameters = "&" + tools.objectToQueryString({
Name: txtSearch.value,
__pageNumber: page,
__pageSize: tools.getValue("selPageSize"),
});
this.fetchData(urlParameters);
},
deleteAndConfirm: function (item) {
if (item == null) {
var url = "/PrivateReZeroRoute/100003/DeleteDataBaseInfo?IsDeleted=true&Id=" + localStorage.delId;
axios.get(url, jwHeader)
.then(response => {
if (response.data.message) {
tools.alert(response.data.message);
}
this.error = null;
this.onSearch();
btnDelClose.click();
})
.catch(error => {
this.error = error.message;
this.data = null;
});
} else {
localStorage.delId = item.Id;
}
},
openEditDiv: function (item) {
var urlById = "/PrivateReZeroRoute/100003/GetDataBaseInfoById?id=" + item.Id;
if (item.Id) {
this.title = this.editTitle;
axios.get(urlById, jwHeader)
.then(response => {
this.formData = response.data;
})
.catch(error => {
this.error = error.message;
this.data = null;
});
}
},
openAddDiv: function (item) {
this.formData = {};
this.title = this.addTitle;
},
addOrUpdate: function () {
var th = this;
var frmId = "frmEdit";
var json = this.formData;
var url = json.Id ?
"/PrivateReZeroRoute/100003/UpdateDatabaseInfo" :
"/PrivateReZeroRoute/100003/AddDatabaseInfo";
this.addOrUpdateSubmit(url, json);
},
addOrUpdateSubmit: function (url, json) {
var th = this;
axios.post(url, json, jwHeader)
.then(response => {
this.error = null;
this.onSearch();
if (response.data == true) {
frmEdit.reset();
btnCloseEdit.click();
}
else {
tools.highlightErrorFields(response.data)
}
})
.catch(error => {
this.error = error.message;
this.data = null;
});
},
testDatabase: function (item) {
axios.post("/PrivateReZeroRoute/100003/TestDatabaseInfo", { Id: item.Id }, jwHeader)
.then(response => {
this.error = null;
tools.alert(response.data + "");
})
.catch(error => {
this.error = error.message;
});
},
createDatabase: function (item) {
axios.post("/PrivateReZeroRoute/100003/CreateDatabaseInfo", { Connection: item.Connection, DbType: item.DbType }, jwHeader)
.then(response => {
this.error = null;
tools.alert(response.data + "");
})
.catch(error => {
this.error = error.message;
});
},
openSynchronousDataDiv: function () {
},
synchronousData: function () {
if (!this.od_originaldb) {
tools.alert("请选择基准库");
return;
}
if (!this.od_targetdb) {
tools.alert("请选择更新库");
return;
}
if (this.od_targetdb == this.od_originaldb) {
tools.alert("相同库不需要同步");
return;
}
if (this.lock == true)
{
return;
}
this.lock = true;
axios.post("/PrivateReZeroRoute/100003/SynchronousData",
{
OriginalDb: this.od_originaldb,
TargetDb: this.od_targetdb,
IsBak: this.od_isbak
}, jwHeader)
.then(response => {
this.lock = false;
this.error = null;
if (response.data == true) {
tools.alert("同步成功");
} else {
tools.alert(response.data.message);
}
})
.catch(error => {
this.error = error.message;
});
},
showMessage: function ()
{
var id = this.formData.DbType;
$(".dbmessage").addClass("hidden");
$(".db" + id).removeClass("hidden");
this.fetchData(urlParameters);
},
deleteAndConfirm: function (item) {
if (item == null) {
var url = "/PrivateReZeroRoute/100003/DeleteDataBaseInfo?IsDeleted=true&Id=" + localStorage.delId;
axios.get(url, jwHeader)
.then(response => {
if (response.data.message) {
tools.alert(response.data.message);
}
this.error = null;
this.onSearch();
btnDelClose.click();
})
.catch(error => {
this.error = error.message;
this.data = null;
});
} else {
localStorage.delId = item.Id;
}
},
openEditDiv: function (item) {
var urlById = "/PrivateReZeroRoute/100003/GetDataBaseInfoById?id=" + item.Id;
if (item.Id) {
this.title = this.editTitle;
axios.get(urlById, jwHeader)
.then(response => {
this.formData = response.data;
})
.catch(error => {
this.error = error.message;
this.data = null;
});
}
},
openAddDiv: function (item) {
this.formData = {};
this.title = this.addTitle;
},
addOrUpdate: function () {
var th = this;
var frmId = "frmEdit";
var json = this.formData;
var url = json.Id ?
"/PrivateReZeroRoute/100003/UpdateDatabaseInfo" :
"/PrivateReZeroRoute/100003/AddDatabaseInfo";
this.addOrUpdateSubmit(url, json);
},
addOrUpdateSubmit: function (url, json) {
var th = this;
axios.post(url, json, jwHeader)
.then(response => {
this.error = null;
this.onSearch();
if (response.data == true) {
frmEdit.reset();
btnCloseEdit.click();
}
else {
tools.highlightErrorFields(response.data)
}
})
.catch(error => {
this.error = error.message;
this.data = null;
});
},
testDatabase: function (item) {
axios.post("/PrivateReZeroRoute/100003/TestDatabaseInfo", { Id: item.Id }, jwHeader)
.then(response => {
this.error = null;
tools.alert(response.data + "");
})
.catch(error => {
this.error = error.message;
});
},
createDatabase: function (item) {
axios.post("/PrivateReZeroRoute/100003/CreateDatabaseInfo", { Connection: item.Connection, DbType: item.DbType }, jwHeader)
.then(response => {
this.error = null;
tools.alert(response.data + "");
})
.catch(error => {
this.error = error.message;
});
},
openSynchronousDataDiv: function () {
},
synchronousData: function () {
if (!this.od_originaldb) {
tools.alert("请选择基准库");
return;
}
if (!this.od_targetdb) {
tools.alert("请选择更新库");
return;
}
});</script>
if (this.od_targetdb == this.od_originaldb) {
tools.alert("相同库不需要同步");
return;
}
if (this.lock == true) {
return;
}
this.lock = true;
axios.post("/PrivateReZeroRoute/100003/SynchronousData",
{
OriginalDb: this.od_originaldb,
TargetDb: this.od_targetdb,
IsBak: this.od_isbak
}, jwHeader)
.then(response => {
this.lock = false;
this.error = null;
if (response.data == true) {
tools.alert("同步成功");
} else {
tools.alert(response.data.message);
}
})
.catch(error => {
this.error = error.message;
});
},
showMessage: function () {
var id = this.formData.DbType;
$(".dbmessage").addClass("hidden");
$(".db" + id).removeClass("hidden");
}
}
});</script>

365
SuperAPI/wwwroot/rezero/default_ui/dynamic_interface.html

@ -1,191 +1,190 @@
@@master_page.html
<link href="css/page_interface.css?v=2" rel="stylesheet" />
<div id="apibox">
<div class="form-group row">
<form id="frmSearch" onsubmit="return false;">
<div class="row ">
<div class="col-md-2"> </div>
<div class="col-md-6">
<input class="form-control" type="text" id="txtSearch" name="example-text-input" placeholder="Url or name">
</div>
<div class="col-md-4">
<button @click="onSearch()" id="btnSearch" class="btn btn-success" type="submit"><i class="mdi mdi-magnify"></i>搜索</button>
<button onclick="frmSearch.reset()" id="btnSearch" class="btn btn-close" type="submit">清空</button>
<div class="btn-group">
<button type="button" class="btn btn-danger dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
数据库 <span class="caret"></span>
</button>
<ul class="dropdown-menu">
<li v-for="item in database"><a :href="getDynamicApiDocUrlByDatabase(item)">{{item.Name}}</a></li>
</ul>
</div>
<div class="btn-group m-l-10">
<button type="button" class="btn btn-info dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
分类 <span class="caret"></span>
</button>
<ul class="dropdown-menu">
<li v-for="item in interfaceCategroyList"><a :href="getDynamicApiDocUrl(item)">{{item.Name}}</a></li>
</ul>
</div>
</div>
</div>
</form>
</div>
<div class="data" v-for="masterItem in data" :key="masterItem.Key">
<h2>{{ masterItem.Key }} </h2>
<section v-for="item in masterItem.Value" :key="item.Id">
<div :class="getEndpointType(item)">
<p class="p" @click="toggleEndpoint">
<span class="method">{{ item.HttpMethod }}</span>
<span class="url"> {{item.Url}} {{item.Name}}</span>
<span class="openapi">+</span>
</p>
<p>{{ item.Description }}</p>
<div class="parameter-title" style="display:none">
Parameters:
<div class="try-out">
<button class="btn try-out__btn" @click="tryItOut(item)">Try it out </button>
</div>
</div>
<div class="parameter" style="display:none" v-if="item.DataModel.DefaultParameters && item.DataModel.DefaultParameters.length > 0">
<ul>
<li v-for="param in item.DataModel.DefaultParameters.filter(p => !p.ValueIsReadOnly && p.Value !== undefined && p.Value !== '')" :key="param.Name">
<code>{{ param.ValueIsReadOnly ? 'Readonly:':''}}{{ param.Name }}</code> ({{ param.ValueType }}) - {{param.Type}} {{ param.Description }} {{ param.Value ? ' ['+param.Name +' = ' + param.Value+']' : ''}}
</li>
<li v-if="item.DataModel.OrderDynamicParemters">
<code>OrderBy:[{FieldName:"FieldName",OrderByType:0}] 0 Asc, 1 Desc </code>
</li>
</ul>
</div>
</div>
</section>
</div>
<!-- 添加这个div来显示“还没有数据”当data为空时 -->
<div v-if="data==null||data.length === 0" class="no-data-message">
<div class="alert alert-warning" role="alert">
<p> 没有创建接口:1、先创建实体,2、点同步创建表,3、创建接口</p>
<p> 创建了没显示: 菜单:【系统配置-接口授权】 给用户授权可以访问的接口 或者 清空所有接口授权</p>
</div>
<div class="form-group row">
<form id="frmSearch" onsubmit="return false;">
<div class="row ">
<div class="col-md-2"> </div>
<div class="col-md-6">
<input class="form-control" type="text" id="txtSearch" name="example-text-input" placeholder="Url or name">
</div>
<div class="col-md-4">
<button @click="onSearch()" id="btnSearch" class="btn btn-success" type="submit"><i class="mdi mdi-magnify"></i>搜索</button>
<button onclick="frmSearch.reset()" id="btnSearch" class="btn btn-close" type="submit">清空</button>
<div class="btn-group">
<button type="button" class="btn btn-danger dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
数据库 <span class="caret"></span>
</button>
<ul class="dropdown-menu">
<li v-for="item in database"><a :href="getDynamicApiDocUrlByDatabase(item)">{{item.Name}}</a></li>
</ul>
</div>
<div class="btn-group m-l-10">
<button type="button" class="btn btn-info dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
分类 <span class="caret"></span>
</button>
<ul class="dropdown-menu">
<li v-for="item in interfaceCategroyList"><a :href="getDynamicApiDocUrl(item)">{{item.Name}}</a></li>
</ul>
</div>
</div>
</div>
</form>
</div>
<div class="data" v-for="masterItem in data" :key="masterItem.Key">
<h2>{{ masterItem.Key }} </h2>
<section v-for="item in masterItem.Value" :key="item.Id">
<div :class="getEndpointType(item)">
<p class="p" @click="toggleEndpoint">
<span class="method">{{ item.HttpMethod }}</span>
<span class="url"> {{item.Url}} {{item.Name}}</span>
<span class="openapi">+</span>
</p>
<p>{{ item.Description }}</p>
<div class="parameter-title" style="display:none">
Parameters:
<div class="try-out">
<button class="btn try-out__btn" @click="tryItOut(item)">Try it out </button>
</div>
</div>
<div class="parameter" style="display:none" v-if="item.DataModel.DefaultParameters && item.DataModel.DefaultParameters.length > 0">
<ul>
<li v-for="param in item.DataModel.DefaultParameters.filter(p => !p.ValueIsReadOnly && p.Value !== undefined && p.Value !== '')" :key="param.Name">
<code>{{ param.ValueIsReadOnly ? 'Readonly:':''}}{{ param.Name }}</code> ({{ param.ValueType }}) - {{param.Type}} {{ param.Description }} {{ param.Value ? ' ['+param.Name +' = ' + param.Value+']' : ''}}
</li>
<li v-if="item.DataModel.OrderDynamicParemters">
<code>OrderBy:[{FieldName:"FieldName",OrderByType:0}] 0 Asc, 1 Desc </code>
</li>
</ul>
</div>
</div>
</section>
</div>
<!-- 添加这个div来显示“还没有数据”当data为空时 -->
<div v-if="data==null||data.length === 0" class="no-data-message">
<div class="alert alert-warning" role="alert">
<p> 没有创建接口:1、先创建实体,2、点同步创建表,3、创建接口</p>
<p> 创建了没显示: 菜单:【系统配置-接口授权】 给用户授权可以访问的接口 或者 清空所有接口授权</p>
</div>
</div>
</div>
<script>
new Vue({
el: '#apibox',
data: {
data: null,
error: null,
interfaceCategroyList: [],
database: [],
},
mounted() {
// 在组件加载时触发数据获取
this.fetchData(null);
this.bindInterfaceCategroySelect();
this.bindDatabaseSelect();
},
methods: {
fetchData(name) {
var urlParams = new URLSearchParams(window.location.search);
var idFromUrl = urlParams.get('InterfaceCategoryId');
var databaseIdFromUrl = urlParams.get('DatabaseId');
var url = url = '/PrivateReZeroRoute/100003/GetInternalInterfaceList?IsInitialized=0';
var urlParameters = "&" + tools.objectToQueryString({
Name: txtSearch.value,
InterfaceCategoryId: idFromUrl,
DatabaseId:databaseIdFromUrl
});
url = url + urlParameters;
axios.get(url, jwHeader)
.then(response => {
this.data = response.data;
this.error = null;
})
.catch(error => {
this.error = error.message;
this.data = null;
});
},
tryItOut(item) {
var urlParams = new URLSearchParams(window.location.search);
var token = urlParams.get('token');
window.open('/rezero/try_api.html?id=' + item.Id + "&token=" + token, '_blank');
},
onSearch: function () {
this.fetchData(txtSearch.value);
},
toggleEndpoint(event) {
var $currentTarget = $(event.currentTarget);
var $parent = $currentTarget.parent();
var $parameterElements = $parent.find(".parameter-title, .parameter");
var $textEle = $currentTarget.find(".openapi");
var isTextPlus = $textEle.text() === "+";
$parameterElements.toggle(100);
$textEle.text(isTextPlus ? "-" : "+").toggleClass("reduction", isTextPlus);
},
bindInterfaceCategroySelect: function () {
axios.get("/PrivateReZeroRoute/100004/GetDynamicInterfaceCategoryList", jwHeader)
.then(response => {
this.interfaceCategroyList = response.data;
})
.catch(error => {
this.error = error.message;
this.data = null;
});
},
bindDatabaseSelect: function () {
axios.get("/PrivateReZeroRoute/100004/GetDatabaseInfoAllList", jwHeader)
.then(response => {
this.database = response.data;
this.databaseId = this.database[0].Id;
var th = this;
setTimeout(function () {
th.onSearch();
}, 50);
})
.catch(error => {
this.error = error.message;
this.data = null;
});
},
getEndpointType(item) {
var actionType =item.DataModel.ActionType;
if (item.HttpMethod == "Get") {
return 'endpoint endpointGet';
} else if (item.HttpMethod == "Post") {
return 'endpoint endpointPost';
} else if (item.HttpMethod == "Delete") {
return 'endpoint endpointDelete';
} else if (item.HttpMethod == "Put") {
return 'endpoint endpointPut';
} else if (actionType.startsWith('1')) {
return 'endpoint endpointGet';
} else if (actionType.startsWith('2')) {
return 'endpoint endpointPost';
} else if (actionType.startsWith('6')) {
return 'endpoint endpointPost';
} else if (actionType.startsWith('3')) {
return 'endpoint endpointDelete';
} else if (actionType.startsWith('4')) {
return 'endpoint endpointPut';
} else if (actionType.startsWith('9')) {
return 'endpoint endpointSql';
} else {
return 'endpoint endpointOther';
}
},
getDynamicApiDocUrl: function (item)
{
var urlParams = new URLSearchParams(window.location.search);
var token = urlParams.get('token');
var model = urlParams.get('model');
return "/rezero/dynamic_interface.html?InterfaceCategoryId=" + item.Id + "&model=" + model + "&token=" + token;
},
getDynamicApiDocUrlByDatabase: function (item) {
var urlParams = new URLSearchParams(window.location.search);
var token = urlParams.get('token');
var model = urlParams.get('model');
return "/rezero/dynamic_interface.html?DatabaseId=" + item.Id + "&model=" + model + "&token=" + token;
}
new Vue({
el: '#apibox',
data: {
data: null,
error: null,
interfaceCategroyList: [],
database: [],
},
mounted() {
// 在组件加载时触发数据获取
this.fetchData(null);
this.bindInterfaceCategroySelect();
this.bindDatabaseSelect();
},
methods: {
fetchData(name) {
var urlParams = new URLSearchParams(window.location.search);
var idFromUrl = urlParams.get('InterfaceCategoryId');
var databaseIdFromUrl = urlParams.get('DatabaseId');
var url = url = '/PrivateReZeroRoute/100003/GetInternalInterfaceList?IsInitialized=0';
var urlParameters = "&" + tools.objectToQueryString({
Name: txtSearch.value,
InterfaceCategoryId: idFromUrl,
DatabaseId: databaseIdFromUrl
});
url = url + urlParameters;
axios.get(url, jwHeader)
.then(response => {
this.data = response.data;
this.error = null;
})
.catch(error => {
this.error = error.message;
this.data = null;
});
},
tryItOut(item) {
var urlParams = new URLSearchParams(window.location.search);
var token = urlParams.get('token');
window.open('/rezero/try_api.html?id=' + item.Id + "&token=" + token, '_blank');
},
onSearch: function () {
this.fetchData(txtSearch.value);
},
toggleEndpoint(event) {
var $currentTarget = $(event.currentTarget);
var $parent = $currentTarget.parent();
var $parameterElements = $parent.find(".parameter-title, .parameter");
var $textEle = $currentTarget.find(".openapi");
var isTextPlus = $textEle.text() === "+";
$parameterElements.toggle(100);
$textEle.text(isTextPlus ? "-" : "+").toggleClass("reduction", isTextPlus);
},
bindInterfaceCategroySelect: function () {
axios.get("/PrivateReZeroRoute/100004/GetDynamicInterfaceCategoryList", jwHeader)
.then(response => {
this.interfaceCategroyList = response.data;
})
.catch(error => {
this.error = error.message;
this.data = null;
});
},
bindDatabaseSelect: function () {
axios.get("/PrivateReZeroRoute/100004/GetDatabaseInfoAllList", jwHeader)
.then(response => {
this.database = response.data;
this.databaseId = this.database[0].Id;
var th = this;
setTimeout(function () {
th.onSearch();
}, 50);
})
.catch(error => {
this.error = error.message;
this.data = null;
});
},
getEndpointType(item) {
var actionType = item.DataModel.ActionType;
if (item.HttpMethod == "Get") {
return 'endpoint endpointGet';
} else if (item.HttpMethod == "Post") {
return 'endpoint endpointPost';
} else if (item.HttpMethod == "Delete") {
return 'endpoint endpointDelete';
} else if (item.HttpMethod == "Put") {
return 'endpoint endpointPut';
} else if (actionType.startsWith('1')) {
return 'endpoint endpointGet';
} else if (actionType.startsWith('2')) {
return 'endpoint endpointPost';
} else if (actionType.startsWith('6')) {
return 'endpoint endpointPost';
} else if (actionType.startsWith('3')) {
return 'endpoint endpointDelete';
} else if (actionType.startsWith('4')) {
return 'endpoint endpointPut';
} else if (actionType.startsWith('9')) {
return 'endpoint endpointSql';
} else {
return 'endpoint endpointOther';
}
});
},
getDynamicApiDocUrl: function (item) {
var urlParams = new URLSearchParams(window.location.search);
var token = urlParams.get('token');
var model = urlParams.get('model');
return "/rezero/dynamic_interface.html?InterfaceCategoryId=" + item.Id + "&model=" + model + "&token=" + token;
},
getDynamicApiDocUrlByDatabase: function (item) {
var urlParams = new URLSearchParams(window.location.search);
var token = urlParams.get('token');
var model = urlParams.get('model');
return "/rezero/dynamic_interface.html?DatabaseId=" + item.Id + "&model=" + model + "&token=" + token;
}
}
});
</script>

317
SuperAPI/wwwroot/rezero/default_ui/instance-transfer.html

@ -0,0 +1,317 @@
@@master_page.html
<link
href="css/page_table_list.css"
rel="stylesheet"
/>
<div
id="apibox"
class="card"
>
<div class="search-bar">
<form
id="frmSearach"
action="lyear_forms_elements.html"
method="post"
onsubmit="return false;"
>
<div class="form-group">
<div class="row">
<div class="col-md-1">
<label
class="form-control"
t
>名称:</label
>
</div>
<div class="col-md-3">
<input
class="form-control"
type="text"
id="txtSearch"
name="example-text-input"
placeholder="分类名称"
/>
</div>
<div class="col-md-3">
<button
@click="onSearch()"
id="btnSearch"
class="btn btn-secondary"
>
<i class="mdi mdi-magnify"></i>搜索
</button>
<button
onclick="frmSearach.reset()"
class="btn btn-close m-l-15"
type="submit"
>
清空
</button>
</div>
<div class="col-md-4"></div>
</div>
</div>
</form>
<div class="toolbar-btn-action">
<button
@click="openAddDiv()"
class="btn btn-primary m-l-15"
data-toggle="modal"
data-target="#gridSystemModal"
>
<i class="mdi mdi-plus"></i> 新增
</button>
</div>
</div>
<div class="card-body">
<h5></h5>
<div class="table-responsive">
<table class="table table-bordered">
<thead>
<tr v-if="data && data.Columns && data.Columns.length > 0">
<th
class="mi-w-100"
v-for="column in data.Columns"
>
{{column.ColumnDescription}}
</th>
<th>操作</th>
</tr>
</thead>
<tbody v-if="data &&data.Data">
<tr
v-if="data.Columns && data.Columns.length > 0"
v-for="item in data.Data"
>
<td v-for="column in data.Columns">
{{ item[column.PropertyName] }}
</td>
<td class="table_opt">
<button
data-toggle="modal"
@click="openEditDiv(item)"
data-target="#gridSystemModal"
class="btn btn-link"
type="button"
>
<i class="mdi mdi-lead-pencil"></i> 修改
</button>
<button
data-toggle="modal"
@click="deleteAndConfirm(item)"
data-target="#divDelBox"
class="btn btn-link"
type="button"
>
<i class="mdi mdi-do-not-disturb"></i> 删除
</button>
</td>
</tr>
</tbody>
</table>
</div>
</div>
@@page_control.html
<div
class="modal fade"
tabindex="-1"
role="dialog"
aria-labelledby="gridSystemModalLabel"
id="gridSystemModal"
style="display: none"
>
<div
class="modal-dialog"
role="document"
>
<div class="modal-content">
<div class="modal-header">
<button
type="button"
class="close"
data-dismiss="modal"
aria-label="Close"
>
<span aria-hidden="true">×</span>
</button>
<h4
class="modal-title"
id="exampleModalLabel"
>
{{title}}
</h4>
</div>
<div class="modal-body">
<form id="frmEdit">
<input
type="hidden"
v-model="formData.Id"
name="Id"
/>
<div class="form-group">
<label
for="recipient-name"
class="control-label"
>名称:</label
>
<input
type="text"
v-model="formData.Name"
name="Name"
class="form-control"
id="recipient-name"
/>
</div>
<div class="form-group">
<label
for="message-text"
class="control-label"
>内容:</label
>
<textarea
class="form-control"
v-model="formData.Description"
name="Description"
id="message-text"
></textarea>
</div>
</form>
</div>
<div class="modal-footer">
<button
type="button"
id="btnCloseEdit"
class="btn btn-default"
data-dismiss="modal"
>
关闭
</button>
<button
type="button"
@click="addOrUpdate()"
class="btn btn-primary"
>
保存
</button>
</div>
</div>
</div>
</div>
</div>
<script>
var vueObj = new Vue({
el: '#apibox',
data: {
data: null,
error: null,
addTitle: '添加动态接口分类',
editTitle: '修改态接口分类',
title: '',
formData: {},
},
mounted() {
this.fetchData('')
},
methods: {
fetchData(append) {
var url = '/trs/page' + append
axios
.get(url, jwHeader)
.then(response => {
this.data = response.data
this.error = null
})
.catch(error => {
this.error = error.message
this.data = null
})
},
onSearch: function (page) {
var urlParameters =
'&' +
tools.objectToQueryString({
Name: txtSearch.value,
__pageNumber: page,
__pageSize: tools.getValue('selPageSize'),
})
this.fetchData(urlParameters)
},
deleteAndConfirm: function (item) {
if (item == null) {
if (localStorage.delId == 200100) {
tools.alert('初始化分类不能删除')
btnDelClose.click()
return
}
var url =
'/PrivateReZeroRoute/100003/DeleteDynamicInterfaceCategory?IsDeleted=true&Id=' +
localStorage.delId
axios
.get(url, jwHeader)
.then(response => {
this.data = response.data
this.error = null
this.onSearch()
btnDelClose.click()
})
.catch(error => {
this.error = error.message
this.data = null
})
} else {
localStorage.delId = item.Id
}
},
openEditDiv: function (item) {
var urlById =
'/PrivateReZeroRoute/100003/GetDynamicInterfaceCategoryById?id=' +
item.Id
if (item.Id) {
this.title = this.editTitle
axios
.get(urlById, jwHeader)
.then(response => {
this.formData = response.data
})
.catch(error => {
this.error = error.message
this.data = null
})
}
},
openAddDiv: function (item) {
this.title = this.addTitle
this.formData = {}
},
addOrUpdate: function () {
var th = this
var frmId = 'frmEdit'
var json = this.formData
var url = json.Id
? '/PrivateReZeroRoute/100003/UpdateDynamicInterfaceCategory'
: '/PrivateReZeroRoute/100003/AddDynamicInterfaceCategory'
this.addOrUpdateSubmit(url, json)
},
addOrUpdateSubmit: function (url, json) {
var th = this
axios
.post(url, json, jwHeader)
.then(response => {
this.error = null
this.onSearch()
if (response.data == true) {
frmEdit.reset()
btnCloseEdit.click()
} else {
tools.highlightErrorFields(response.data)
}
})
.catch(error => {
this.error = error.message
this.data = null
})
},
},
})
</script>

357
SuperAPI/wwwroot/rezero/default_ui/interface_categroy.html

@ -1,197 +1,194 @@
@@master_page.html
<link href="css/page_table_list.css" rel="stylesheet" />
<div id="apibox" class="card">
<div class="search-bar">
<div class="search-bar">
<form id="frmSearach" action="lyear_forms_elements.html" method="post" onsubmit="return false;">
<div class="form-group">
<div class="row">
<div class="col-md-1"><label class="form-control" t>名称:</label></div>
<div class="col-md-3"><input class="form-control" type="text" id="txtSearch" name="example-text-input" placeholder="分类名称"></div>
<div class="col-md-3">
<button @click="onSearch()" id="btnSearch" class="btn btn-secondary"><i class="mdi mdi-magnify"></i>搜索</button>
<button onclick="frmSearach.reset()" class="btn btn-close m-l-15" type="submit">清空</button>
</div>
<div class="col-md-4"></div>
</div>
</div>
</form>
<div class="toolbar-btn-action">
<button @click="openAddDiv()" class="btn btn-primary m-l-15 " data-toggle="modal" data-target="#gridSystemModal"><i class="mdi mdi-plus"></i> 新增</button>
<form id="frmSearach" action="lyear_forms_elements.html" method="post" onsubmit="return false;">
<div class="form-group">
<div class="row">
<div class="col-md-1"><label class="form-control" t>名称:</label></div>
<div class="col-md-3"><input class="form-control" type="text" id="txtSearch" name="example-text-input" placeholder="分类名称"></div>
<div class="col-md-3">
<button @click="onSearch()" id="btnSearch" class="btn btn-secondary"><i class="mdi mdi-magnify"></i>搜索</button>
<button onclick="frmSearach.reset()" class="btn btn-close m-l-15" type="submit">清空</button>
</div>
<div class="col-md-4"></div>
</div>
</div>
</form>
<div class="toolbar-btn-action">
<button @click="openAddDiv()" class="btn btn-primary m-l-15 " data-toggle="modal" data-target="#gridSystemModal"><i class="mdi mdi-plus"></i> 新增</button>
</div>
<div class="card-body">
</div>
<div class="card-body">
<h5> </h5>
<div class="table-responsive">
<table class="table table-bordered">
<thead>
<tr v-if="data && data.Columns && data.Columns.length > 0">
<th class="mi-w-100" v-for="column in data.Columns">{{column.ColumnDescription}}</th>
<th>操作</th>
</tr>
</thead>
<tbody v-if="data &&data.Data">
<tr v-if="data.Columns && data.Columns.length > 0" v-for="item in data.Data">
<h5> </h5>
<div class="table-responsive">
<table class="table table-bordered">
<thead>
<tr v-if="data && data.Columns && data.Columns.length > 0">
<th class="mi-w-100" v-for="column in data.Columns">{{column.ColumnDescription}}</th>
<th>操作</th>
</tr>
</thead>
<tbody v-if="data &&data.Data">
<tr v-if="data.Columns && data.Columns.length > 0" v-for="item in data.Data">
<td v-for="column in data.Columns">
{{ item[column.PropertyName] }}
</td>
<td v-for="column in data.Columns">
{{ item[column.PropertyName] }}
</td>
<td class="table_opt">
<button data-toggle="modal" @click="openEditDiv(item)" data-target="#gridSystemModal" class="btn btn-link" type="button">
<i class="mdi mdi-lead-pencil"></i> 修改
</button>
<button data-toggle="modal" @click="deleteAndConfirm(item)" data-target="#divDelBox" class="btn btn-link" type="button">
<i class="mdi mdi-do-not-disturb"></i> 删除
</button>
</td>
</tr>
</tbody>
</table>
</div>
<td class="table_opt">
<button data-toggle="modal" @click="openEditDiv(item)" data-target="#gridSystemModal" class="btn btn-link" type="button">
<i class="mdi mdi-lead-pencil"></i> 修改
</button>
<button data-toggle="modal" @click="deleteAndConfirm(item)" data-target="#divDelBox" class="btn btn-link" type="button">
<i class="mdi mdi-do-not-disturb"></i> 删除
</button>
</td>
</tr>
</tbody>
</table>
</div>
@@page_control.html
<div class="modal fade" tabindex="-1" role="dialog" aria-labelledby="gridSystemModalLabel" id="gridSystemModal" style="display: none;">
<div class="modal-dialog" role="document">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">×</span></button>
<h4 class="modal-title" id="exampleModalLabel">{{title}}</h4>
</div>
<div class="modal-body">
<form id="frmEdit">
<input type="hidden" v-model="formData.Id" name="Id" />
<div class="form-group">
<label for="recipient-name" class="control-label">名称:</label>
<input type="text" v-model="formData.Name" name="Name" class="form-control" id="recipient-name">
</div>
<div class="form-group">
<label for="message-text" class="control-label">内容:</label>
<textarea class="form-control" v-model="formData.Description" name="Description" id="message-text"></textarea>
</div>
</form>
</div>
<div class="modal-footer">
<button type="button" id="btnCloseEdit" class="btn btn-default" data-dismiss="modal">关闭</button>
<button type="button" @click="addOrUpdate()" class="btn btn-primary">保存</button>
</div>
</div>
@@page_control.html
<div class="modal fade" tabindex="-1" role="dialog" aria-labelledby="gridSystemModalLabel" id="gridSystemModal" style="display: none;">
<div class="modal-dialog" role="document">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">×</span></button>
<h4 class="modal-title" id="exampleModalLabel">{{title}}</h4>
</div>
<div class="modal-body">
<form id="frmEdit">
<input type="hidden" v-model="formData.Id" name="Id" />
<div class="form-group">
<label for="recipient-name" class="control-label">名称:</label>
<input type="text" v-model="formData.Name" name="Name" class="form-control" id="recipient-name">
</div>
<div class="form-group">
<label for="message-text" class="control-label">内容:</label>
<textarea class="form-control" v-model="formData.Description" name="Description" id="message-text"></textarea>
</div>
</form>
</div>
<div class="modal-footer">
<button type="button" id="btnCloseEdit" class="btn btn-default" data-dismiss="modal">关闭</button>
<button type="button" @click="addOrUpdate()" class="btn btn-primary">保存</button>
</div>
</div>
</div>
</div>
</div>
<script>
var vueObj = new Vue({
el: '#apibox',
data: {
data: null,
error: null,
addTitle: "添加动态接口分类",
editTitle: "修改态接口分类",
title: "",
formData: {
}
},
mounted() {
this.fetchData("");
},
methods: {
fetchData(append) {
var url = "/PrivateReZeroRoute/100003/GetDynamicInterfaceCategoryPageList?ParentId=200" + append;
axios.get(url, jwHeader)
.then(response => {
this.data = response.data;
this.error = null;
})
.catch(error => {
this.error = error.message;
this.data = null;
});
},
onSearch: function (page) {
var urlParameters="&"+tools.objectToQueryString({
Name: txtSearch.value,
__pageNumber: page,
__pageSize: tools.getValue("selPageSize"),
});
this.fetchData(urlParameters);
},
deleteAndConfirm: function (item) {
if (item == null) {
if (localStorage.delId == 200100) {
tools.alert("初始化分类不能删除");
btnDelClose.click();
return;
}
var url = "/PrivateReZeroRoute/100003/DeleteDynamicInterfaceCategory?IsDeleted=true&Id=" + localStorage.delId;
axios.get(url, jwHeader)
.then(response => {
this.data = response.data;
this.error = null;
this.onSearch();
btnDelClose.click();
})
.catch(error => {
this.error = error.message;
this.data = null;
});
} else {
localStorage.delId = item.Id;
}
},
openEditDiv: function (item)
{
var urlById = "/PrivateReZeroRoute/100003/GetDynamicInterfaceCategoryById?id="+item.Id;
if (item.Id) {
this.title = this.editTitle;
axios.get(urlById, jwHeader)
.then(response => {
this.formData= response.data;
})
.catch(error => {
this.error = error.message;
this.data = null;
});
}
},
openAddDiv: function (item)
{
this.title= this.addTitle;
this.formData = {};
},
addOrUpdate: function () {
var th = this;
var frmId = "frmEdit";
var json = this.formData;
var url = json.Id ?
"/PrivateReZeroRoute/100003/UpdateDynamicInterfaceCategory" :
"/PrivateReZeroRoute/100003/AddDynamicInterfaceCategory";
this.addOrUpdateSubmit(url, json);
},
addOrUpdateSubmit: function (url, json) {
var th = this;
axios.post(url, json, jwHeader)
.then(response => {
this.error = null;
this.onSearch();
if (response.data == true) {
frmEdit.reset();
btnCloseEdit.click();
}
else
{
tools.highlightErrorFields(response.data)
}
})
.catch(error => {
this.error = error.message;
this.data = null;
});
}
var vueObj = new Vue({
el: '#apibox',
data: {
data: null,
error: null,
addTitle: "添加动态接口分类",
editTitle: "修改态接口分类",
title: "",
formData: {
}
},
mounted() {
this.fetchData("");
},
methods: {
fetchData(append) {
var url = "/PrivateReZeroRoute/100003/GetDynamicInterfaceCategoryPageList?ParentId=200" + append;
axios.get(url, jwHeader)
.then(response => {
this.data = response.data;
this.error = null;
})
.catch(error => {
this.error = error.message;
this.data = null;
});
},
onSearch: function (page) {
var urlParameters = "&" + tools.objectToQueryString({
Name: txtSearch.value,
__pageNumber: page,
__pageSize: tools.getValue("selPageSize"),
});
this.fetchData(urlParameters);
},
deleteAndConfirm: function (item) {
if (item == null) {
if (localStorage.delId == 200100) {
tools.alert("初始化分类不能删除");
btnDelClose.click();
return;
}
var url = "/PrivateReZeroRoute/100003/DeleteDynamicInterfaceCategory?IsDeleted=true&Id=" + localStorage.delId;
axios.get(url, jwHeader)
.then(response => {
this.data = response.data;
this.error = null;
this.onSearch();
btnDelClose.click();
})
.catch(error => {
this.error = error.message;
this.data = null;
});
} else {
localStorage.delId = item.Id;
}
},
openEditDiv: function (item) {
var urlById = "/PrivateReZeroRoute/100003/GetDynamicInterfaceCategoryById?id=" + item.Id;
if (item.Id) {
this.title = this.editTitle;
axios.get(urlById, jwHeader)
.then(response => {
this.formData = response.data;
})
.catch(error => {
this.error = error.message;
this.data = null;
});
}
});</script>
},
openAddDiv: function (item) {
this.title = this.addTitle;
this.formData = {};
},
addOrUpdate: function () {
var th = this;
var frmId = "frmEdit";
var json = this.formData;
var url = json.Id ?
"/PrivateReZeroRoute/100003/UpdateDynamicInterfaceCategory" :
"/PrivateReZeroRoute/100003/AddDynamicInterfaceCategory";
this.addOrUpdateSubmit(url, json);
},
addOrUpdateSubmit: function (url, json) {
var th = this;
axios.post(url, json, jwHeader)
.then(response => {
this.error = null;
this.onSearch();
if (response.data == true) {
frmEdit.reset();
btnCloseEdit.click();
}
else {
tools.highlightErrorFields(response.data)
}
})
.catch(error => {
this.error = error.message;
this.data = null;
});
}
}
});</script>

3936
SuperAPI/wwwroot/rezero/default_ui/interface_manager.html

File diff suppressed because it is too large Load Diff
Loading…
Cancel
Save