You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
389 lines
15 KiB
389 lines
15 KiB
@@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> |
|
</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,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> |
|
|
|
</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> |
|
<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 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: { |
|
|
|
}, |
|
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/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"), |
|
}); |
|
|
|
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"); |
|
} |
|
} |
|
});</script> |