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.
2473 lines
63 KiB
2473 lines
63 KiB
@@master_page.html |
|
<link |
|
href="css/page_table_list.css" |
|
rel="stylesheet" |
|
/> |
|
<link |
|
href="css/page_interface_manager.css" |
|
rel="stylesheet" |
|
/> |
|
<script src="js/ace/src-min/ace.js"></script> |
|
<script src="js/ace/src-min/ext-language_tools.js"></script> |
|
<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">数据库:</label> |
|
</div> |
|
<div class="col-md-2"> |
|
<select |
|
@change="changeDatabase" |
|
v-model="databaseId" |
|
id="selDatabase" |
|
class="form-control" |
|
> |
|
<option |
|
v-for="item in database" |
|
:value="item.Id" |
|
> |
|
{{item.Name}} |
|
</option> |
|
</select> |
|
</div> |
|
<div class="col-md-2"> |
|
<input |
|
class="form-control" |
|
type="text" |
|
id="txtName" |
|
name="example-text-input" |
|
placeholder="接口名 或者 URL" |
|
/> |
|
</div> |
|
<div class="col-md-2"> |
|
<select |
|
id="selGroupName" |
|
class="form-control" |
|
> |
|
<option value="">==分组==</option> |
|
<option v-for="item in groupList">{{item.GroupName}}</option> |
|
</select> |
|
</div> |
|
<div class="col-md-2"> |
|
<select |
|
id="selInterfaceCategoryId" |
|
class="form-control" |
|
> |
|
<option value="">==分类==</option> |
|
<option |
|
v-for="item in interfaceCategroyList" |
|
:value="item.Id" |
|
> |
|
{{item.Name}} |
|
</option> |
|
</select> |
|
</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> |
|
</div> |
|
</form> |
|
</div> |
|
<!--主表列表操作按钮--> |
|
<div class="card-toolbar clearfix"> |
|
<div class="toolbar-btn-action"> |
|
<a |
|
class="btn btn-primary m-r-5" |
|
@click="openNext()" |
|
href="#!" |
|
><i class="mdi mdi-plus"></i> 新增</a |
|
> |
|
<a |
|
class="btn btn-success m-r-10" |
|
@click="openGenerateCode()" |
|
data-toggle="tooltip" |
|
data-original-title="根据实体生成文件" |
|
href="#!" |
|
><i class="mdi mdi-web"></i> 生成前端调用</a |
|
> |
|
</div> |
|
</div> |
|
<!--主列表--> |
|
<div class="card-body"> |
|
<div class="table-responsive"> |
|
<div class="master-table-container"> |
|
<table class="table table-bordered"> |
|
<thead> |
|
<tr v-if="data && data.Columns && data.Columns.length > 0"> |
|
<th class="width30"> |
|
<label class="lyear-checkbox checkbox-primary"> |
|
<input |
|
type="checkbox" |
|
@change="selectAll" |
|
id="check-all" |
|
/><span></span> |
|
</label> |
|
</th> |
|
<th 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> |
|
<label class="lyear-checkbox checkbox-primary"> |
|
<input |
|
type="checkbox" |
|
name="ids[]" |
|
v-model="selectedItems" |
|
:alt="item.Id" |
|
:value="item.Id" |
|
/><span></span> |
|
</label> |
|
</td> |
|
<td v-for="column in data.Columns"> |
|
{{ item[column.PropertyName] }} |
|
</td> |
|
|
|
<td class="table_opt"> |
|
<button |
|
data-toggle="modal" |
|
@click="openEdit(item)" |
|
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> |
|
</div> |
|
<!--分页局部视图--> |
|
@@page_control.html |
|
<!--创建接口第一步:选择接口分类--> |
|
<div |
|
class="modal fade" |
|
tabindex="-1" |
|
role="dialog" |
|
aria-labelledby="gridSystemModalLabel" |
|
id="divBefore" |
|
style="display: none" |
|
> |
|
<button |
|
id="btnNext" |
|
type="button" |
|
class="btn btn-primary hidden" |
|
data-toggle="modal" |
|
data-target="#divBefore" |
|
></button> |
|
<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" |
|
> |
|
接口类型 |
|
</h4> |
|
</div> |
|
<div class="modal-body"> |
|
<form id="frmEdit"> |
|
<input |
|
type="hidden" |
|
v-model="formData.Id" |
|
name="Id" |
|
/> |
|
<div class="form-group"> |
|
<label class="control-label">数据库</label> |
|
<select |
|
v-model="databaseId" |
|
readonly="readonly" |
|
id="selDataBaseId" |
|
class="form-control" |
|
> |
|
<option |
|
v-for="item in database" |
|
v-bind:value="item.Id" |
|
> |
|
{{item.Name}} |
|
</option> |
|
</select> |
|
<label class="control-label">分类</label> |
|
<select |
|
v-model="currentActionType" |
|
id="selTextGroup" |
|
class="form-control" |
|
> |
|
<option |
|
v-for="item in actionList" |
|
:value="item" |
|
> |
|
{{item.TextGroup}} |
|
</option> |
|
</select> |
|
</div> |
|
</form> |
|
</div> |
|
<div class="modal-footer"> |
|
<button |
|
type="button" |
|
id="btnNextClose" |
|
class="btn btn-default" |
|
data-dismiss="modal" |
|
> |
|
关闭 |
|
</button> |
|
<button |
|
type="button" |
|
@click="openAdd()" |
|
class="btn btn-primary" |
|
> |
|
下一步 |
|
</button> |
|
</div> |
|
</div> |
|
</div> |
|
</div> |
|
<!--创建接口主窗体:填写接口详细信息--> |
|
<div |
|
id="divSave" |
|
class="modal fade bs-example-modal-lg" |
|
tabindex="-1" |
|
role="dialog" |
|
aria-labelledby="myLargeModalLabel" |
|
style="display: none" |
|
> |
|
<button |
|
id="btnSave" |
|
type="button" |
|
class="btn btn-primary hidden" |
|
data-toggle="modal" |
|
data-target="#divSave" |
|
></button> |
|
<div |
|
class="modal-dialog modal-lg width1200" |
|
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="myLargeModalLabel" |
|
> |
|
{{title}} |
|
</h4> |
|
</div> |
|
|
|
<div class="modal-body"> |
|
<div class="table-container"> |
|
<div class="card"> |
|
<ul class="nav nav-tabs page-tabs"> |
|
<li |
|
v-for="(item,index) in currentActionType.Items" |
|
@click="interfaceListTabClick(index,item)" |
|
:class="index==tabIndex?'active':''" |
|
> |
|
<a href="#!">{{item.Text}}</a> |
|
</li> |
|
</ul> |
|
<div class="tab-content tabbox"> |
|
<div class="tab-pane active"> |
|
<form |
|
id="frmSave" |
|
action="#!" |
|
method="post" |
|
name="edit-form" |
|
class="edit-form" |
|
> |
|
<input |
|
v-model="editId" |
|
type="hidden" |
|
value="0" |
|
/> |
|
<div |
|
v-for="item in currentActionTypeContext.FormElements" |
|
class="form-group col-md-12" |
|
> |
|
<label v-if="item.ElementType!=5" |
|
>{{item.Text}}<span |
|
class="red" |
|
v-if="item.IsRequired" |
|
>*</span |
|
></label |
|
> |
|
<div class="form-controls"> |
|
<!--text--> |
|
<template v-if="item.ElementType==0"> |
|
<input |
|
:name="item.Name" |
|
:placeholder="item.Placeholder" |
|
v-model="item.Value" |
|
:validate-data="JSON.stringify(item)" |
|
class="form-control" |
|
/> |
|
</template> |
|
<!--table--> |
|
<template v-if="item.ElementType==1"> |
|
<div class="input-group"> |
|
<input |
|
:name="item.Name" |
|
:placeholder="item.Placeholder" |
|
v-model="item.Value" |
|
:validate-data="JSON.stringify(item)" |
|
type="text" |
|
readonly="readonly" |
|
class="form-control" |
|
/> |
|
<span class="input-group-btn"> |
|
<button |
|
@click="openImportEntity(item)" |
|
class="btn btn-default" |
|
type="button" |
|
> |
|
选择表 |
|
</button> |
|
</span> |
|
</div> |
|
</template> |
|
<!--Columns--> |
|
<template v-if="item.ElementType==3"> |
|
<span |
|
@click="openAddColumn(item)" |
|
class="btn btn-primary m-tb-10" |
|
> |
|
<i class="mdi mdi-settings"></i> 配置主表列 |
|
</span> |
|
<span |
|
@click="openAddComplexityColumn(item)" |
|
class="btn btn-success m-tb-10" |
|
> |
|
<i class="mdi mdi-plus"></i> 追加复杂列 |
|
</span> |
|
<span |
|
@click="openOrderByColumn(item)" |
|
class="btn btn-purple m-tb-10" |
|
> |
|
<i class="mdi mdi-settings"></i> 配置排序 |
|
</span> |
|
<span |
|
@click="openWhere(item)" |
|
class="btn btn-warning m-tb-10" |
|
> |
|
<i class="mdi mdi-settings"></i> 配置条件 |
|
</span> |
|
<p> |
|
<code |
|
>排序:{{selectedOrderByString}} {{ |
|
selectedOrderBys_EnableSort==false ? "": |
|
"["+selectedOrderBys_EnableSort+"]" }} |
|
</code> |
|
</p> |
|
<p |
|
v-if="selectedWheres.filter(item => item.PropertyName).length>0" |
|
> |
|
<code |
|
>条件:{{selectedWheres.filter(item => |
|
item.PropertyName ).length}} |
|
</code> |
|
</p> |
|
<p |
|
v-if="selectedWheres.filter(item => item.PropertyName).length==0" |
|
> |
|
<code>条件:{{selectedWhereString}}</code> |
|
</p> |
|
<table class="table table-bordered m-b-0"> |
|
<thead> |
|
<tr> |
|
<th>列名</th> |
|
<th>显示名称</th> |
|
<th>排序号</th> |
|
<th>删除</th> |
|
</tr> |
|
</thead> |
|
<tbody> |
|
<tr v-for="item in selectedColumns"> |
|
<td>{{item.PropertyName}}</td> |
|
<td>{{item.DbColumnName}}</td> |
|
<td>{{item.SortId}}</td> |
|
<td> |
|
<button |
|
@click="deleteSelectedColumn(item)" |
|
type="button" |
|
class="btn btn-link" |
|
> |
|
<i class="mdi mdi-do-not-disturb"></i> 删除 |
|
</button> |
|
</td> |
|
</tr> |
|
<tr v-for="item in selectedComplexityColumns"> |
|
<td>{{item.PropertyName}}</td> |
|
<td>{{item.DbColumnName}}</td> |
|
<td>{{item.SortId}}</td> |
|
<td> |
|
<button |
|
@click="deleteComplexitySelectedColumn(item)" |
|
type="button" |
|
class="btn btn-link" |
|
> |
|
<i class="mdi mdi-do-not-disturb"></i> 删除 |
|
</button> |
|
</td> |
|
</tr> |
|
</tbody> |
|
</table> |
|
<input |
|
:name="item.Name" |
|
type="hidden" |
|
:placeholder="item.Placeholder" |
|
v-model="item.Value" |
|
:validate-data="JSON.stringify(item)" |
|
class="form-control" |
|
/> |
|
</template> |
|
<!--Select--> |
|
<template v-if="item.ElementType==4"> |
|
<select |
|
:name="item.Name" |
|
v-model="item.Value" |
|
:validate-data="JSON.stringify(item)" |
|
class="form-control" |
|
> |
|
<option |
|
v-if="item.SelectDataSource" |
|
v-for="o in item.SelectDataSource" |
|
:value="o.Key" |
|
> |
|
{{o.Value}} |
|
</option> |
|
</select> |
|
</template> |
|
<!--Hidden--> |
|
<template v-if="item.ElementType==5"> |
|
<input |
|
:name="item.Name" |
|
v-model="item.Value" |
|
type="hidden" |
|
:validate-data="JSON.stringify(item)" |
|
class="form-control" |
|
/> |
|
</template> |
|
<!--Page--> |
|
<template v-if="item.ElementType==6"> |
|
<label class="lyear-checkbox t_a_l" |
|
><input |
|
v-model="item.Value" |
|
:name="item.Name" |
|
value="true" |
|
type="checkbox" |
|
/> |
|
<span class="p-l-15">是否分页</span></label |
|
> |
|
</template> |
|
<!--SqlTest--> |
|
<template v-if="item.ElementType==7"> |
|
<p> |
|
<code |
|
>接口参数:{string:name} 等于 |
|
@name=string类型的参数 |
|
,C#类型有string、int、DateTime等</code |
|
> |
|
</p> |
|
<p> |
|
<code |
|
>授权参数:{ClaimKey:OrgId} 等于 |
|
你授权的Claim[OrgId]</code |
|
> |
|
</p> |
|
<textarea |
|
rows="10" |
|
style="display: none" |
|
:placeholder="item.Placeholder" |
|
:name="item.Name" |
|
v-model="item.Value" |
|
class="form-control" |
|
></textarea> |
|
<div |
|
id="divAceEditor" |
|
style="width: 100%; height: 300px" |
|
></div> |
|
</template> |
|
<!--DefaultValueColumns--> |
|
<template v-if="item.ElementType==8"> |
|
<span |
|
class="btn btn-primary m-b-10" |
|
@click="openDefaultValue" |
|
><i class="mdi-account-settings-variant mdi"></i> |
|
配置 |
|
</span> |
|
<textarea |
|
rows="5" |
|
class="form-control" |
|
readonly="readonly" |
|
> |
|
{{saveDefaultValueColumns}}</textarea |
|
> |
|
</template> |
|
<!--UpdateColumns--> |
|
<template v-if="item.ElementType==9"> |
|
<input |
|
v-model="item.Value" |
|
type="hidden" |
|
:name="item.Name" |
|
/> |
|
<select |
|
id="selUpdateColumns" |
|
@change="setUpdateColums(item)" |
|
multiple |
|
class="form-control" |
|
> |
|
<option v-for="childItem in updateColumns"> |
|
{{childItem.PropertyName}} |
|
</option> |
|
</select> |
|
</template> |
|
<!--UpdateResultType--> |
|
<template v-if="item.ElementType==10"> |
|
<select |
|
v-model="item.Value" |
|
:name="item.Name" |
|
class="form-control" |
|
> |
|
<option |
|
selected |
|
value="1" |
|
> |
|
默认 |
|
</option> |
|
<option value="2">受影响行数</option> |
|
</select> |
|
</template> |
|
<!--InsertResultType--> |
|
<template v-if="item.ElementType==12"> |
|
<select |
|
v-model="item.Value" |
|
:name="item.Name" |
|
class="form-control" |
|
> |
|
<option |
|
selected |
|
value="1" |
|
> |
|
默认 |
|
</option> |
|
<option value="4">自增列(只支持int)</option> |
|
</select> |
|
</template> |
|
<!--Where--> |
|
<template v-if="item.ElementType==11"> |
|
<div |
|
v-if="item.Placeholder" |
|
class="alert-success p-10" |
|
> |
|
{{item.Placeholder}} |
|
</div> |
|
<span |
|
@click="openMiniWhere(item)" |
|
class="btn btn-primary m-tb-10" |
|
> |
|
<i class="mdi mdi-settings"></i> 配置条件 |
|
</span> |
|
<span |
|
@click="showWherePreview" |
|
class="btn btn-info" |
|
> |
|
<i class="mdi mdi-refresh"></i> 刷新预览 |
|
</span> |
|
<span |
|
@click="clearMiniWhere(item)" |
|
class="btn btn-danger m-r-10" |
|
> |
|
<i class="mdi mdi-do-not-disturb"></i> 清空条件 |
|
</span> |
|
<div>{{selectdWherePreviewString}}</div> |
|
</template> |
|
</div> |
|
</div> |
|
</form> |
|
</div> |
|
</div> |
|
</div> |
|
</div> |
|
</div> |
|
<div class="modal-footer"> |
|
<button |
|
type="button" |
|
id="btnAddOrUpdateColse" |
|
class="btn btn-default" |
|
data-dismiss="modal" |
|
> |
|
关闭 |
|
</button> |
|
<button |
|
type="button" |
|
@click="addOrUpdateInterfaceList()" |
|
class="btn btn-primary" |
|
> |
|
点击保存 |
|
</button> |
|
</div> |
|
</div> |
|
</div> |
|
</div> |
|
<!--创建接口子窗体:选择表--> |
|
<div |
|
id="divImportEntity" |
|
class="modal fade bs-example-modal-lg" |
|
tabindex="-1" |
|
role="dialog" |
|
aria-labelledby="myLargeModalLabel" |
|
style="display: none" |
|
> |
|
<button |
|
id="btnImportEntity" |
|
type="button" |
|
class="btn btn-primary hidden" |
|
data-toggle="modal" |
|
data-target="#divImportEntity" |
|
></button> |
|
<div |
|
class="modal-dialog modal-lg border3CCC" |
|
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="myLargeModalLabel" |
|
> |
|
选择表 |
|
</h4> |
|
</div> |
|
<div class="modal-body"> |
|
<div class="input-group width250 m-b-10"> |
|
<input |
|
id="txtTableName" |
|
type="text" |
|
class="form-control" |
|
/> |
|
<span class="input-group-btn"> |
|
<button |
|
type="button" |
|
@click="bindImportTables()" |
|
class="btn btn-default" |
|
> |
|
<i class="mdi mdi-magnify"></i>搜索 |
|
</button> |
|
<button |
|
type="button" |
|
onclick="txtTableName.value=''" |
|
class="btn btn-default" |
|
> |
|
<i class="mdi mdi-refresh"></i>清空 |
|
</button> |
|
</span> |
|
</div> |
|
<div class="master-table-container"> |
|
<table class="table table-bordered"> |
|
<thead> |
|
<tr> |
|
<th class="width30"> |
|
<label class="lyear-checkbox checkbox-primary"> |
|
<input |
|
type="checkbox" |
|
@change="selectAllTables" |
|
id="check-all2" |
|
/><span></span> |
|
</label> |
|
</th> |
|
<th>表名</th> |
|
<th>描述</th> |
|
</tr> |
|
</thead> |
|
<tbody v-if="tables"> |
|
<tr v-for="item in tables"> |
|
<td> |
|
<input |
|
type="checkbox" |
|
name="ids[]" |
|
v-model="selectedTables" |
|
:alt="item.Name" |
|
:value="item" |
|
/> |
|
</td> |
|
<td>{{ item.Name }}</td> |
|
<td>{{ item.Description }}</td> |
|
</tr> |
|
</tbody> |
|
</table> |
|
</div> |
|
</div> |
|
<div class="modal-footer"> |
|
<button |
|
type="button" |
|
id="btnImportEntityClose" |
|
class="btn btn-default" |
|
data-dismiss="modal" |
|
> |
|
关闭 |
|
</button> |
|
<button |
|
type="button" |
|
@click="importEntitySubmit()" |
|
class="btn btn-primary" |
|
> |
|
确定 |
|
</button> |
|
</div> |
|
</div> |
|
</div> |
|
</div> |
|
<!--创建接口子窗体:添加简单列--> |
|
<div |
|
class="modal fade" |
|
tabindex="-1" |
|
role="dialog" |
|
aria-labelledby="gridSystemModalLabel" |
|
id="divAddColumns" |
|
style="display: none" |
|
> |
|
<button |
|
id="btnDivAddColumns" |
|
type="button" |
|
class="btn btn-primary hidden" |
|
data-toggle="modal" |
|
data-target="#divAddColumns" |
|
></button> |
|
<div |
|
class="modal-dialog width800 border3CCC" |
|
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" |
|
> |
|
选择列 |
|
</h4> |
|
</div> |
|
<div class="modal-body"> |
|
<table class="table table-bordered"> |
|
<thead> |
|
<tr> |
|
<th> |
|
<input |
|
@change="selectAllColumns" |
|
type="checkbox" |
|
/> |
|
</th> |
|
<th>列名</th> |
|
<th>显示名称</th> |
|
<th>排序号</th> |
|
</tr> |
|
</thead> |
|
<tbody> |
|
<tr v-for="item in columns"> |
|
<th scope="row"> |
|
<input |
|
name="columnIds[]" |
|
v-model="selectColumns" |
|
:alt="item.Id" |
|
:value="item.Id" |
|
type="checkbox" |
|
/> |
|
</th> |
|
<td>{{item.PropertyName}}</td> |
|
<td> |
|
<input |
|
v-model="item.DbColumnName" |
|
class="form-control" |
|
/> |
|
</td> |
|
<td> |
|
<input |
|
v-model="item.SortId" |
|
onchange="tools.ensureNumeric(this)" |
|
class="form-control" |
|
/> |
|
</td> |
|
</tr> |
|
</tbody> |
|
</table> |
|
</div> |
|
<div class="modal-footer"> |
|
<button |
|
type="button" |
|
id="btnCloseAddColumns" |
|
class="btn btn-default" |
|
data-dismiss="modal" |
|
> |
|
关闭 |
|
</button> |
|
<button |
|
type="button" |
|
@click="saveColumns()" |
|
class="btn btn-primary" |
|
> |
|
确定 |
|
</button> |
|
</div> |
|
</div> |
|
</div> |
|
</div> |
|
<!--创建接口子窗体:追加复杂列--> |
|
<div |
|
class="modal fade bs-example-modal-lg" |
|
tabindex="-1" |
|
role="dialog" |
|
aria-labelledby="gridSystemModalLabel" |
|
id="divAddComplexityColumns" |
|
style="display: none" |
|
> |
|
<button |
|
id="btnAddComplexityColumns" |
|
type="button" |
|
class="btn btn-primary hidden" |
|
data-toggle="modal" |
|
data-target="#divAddComplexityColumns" |
|
></button> |
|
<div |
|
class="modal-dialog width800 border3CCC" |
|
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" |
|
> |
|
追加列 |
|
</h4> |
|
</div> |
|
<div class="modal-body"> |
|
<div class="card p-b-0 m-b-0"> |
|
<ul class="nav nav-tabs page-tabs"> |
|
<li |
|
id="liComplexityColumns" |
|
class="active" |
|
@click="tabClickComplexityColumns(1)" |
|
> |
|
<a href="#!">联表字段</a> |
|
</li> |
|
<li> |
|
<a |
|
href="#!" |
|
@click="tabClickComplexityColumns(2)" |
|
>函数字段</a |
|
> |
|
</li> |
|
<li> |
|
<a |
|
href="#!" |
|
@click="tabClickComplexityColumns(3)" |
|
>导航对象</a |
|
> |
|
</li> |
|
<li> |
|
<a |
|
href="#!" |
|
@click="tabClickComplexityColumns(4)" |
|
>更多开发中</a |
|
> |
|
</li> |
|
</ul> |
|
</div> |
|
<div class="tab-content tabbox"> |
|
<div class="tab-pane active"> |
|
<div class="form-group"> |
|
<label |
|
>主表关联字段 (一般是外键) <span class="red">*</span></label |
|
> |
|
<select |
|
v-model="copcol_MasterField" |
|
name="MasterField" |
|
class="form-control" |
|
> |
|
<option |
|
v-if="columns&&columns.length>0" |
|
v-for="item in columns" |
|
> |
|
{{item.PropertyName}} |
|
</option> |
|
</select> |
|
</div> |
|
<div class="form-group"> |
|
<label>关联的表 <span class="red">*</span></label> |
|
<input |
|
v-model="copcol_JoinTable" |
|
@change="changeJoinTable" |
|
class="form-control" |
|
list="browsers" |
|
name="joinTable" |
|
/> |
|
<datalist id="browsers"> |
|
<option |
|
v-if="tables&&tables.length>0" |
|
v-for="item in tables" |
|
:value="item.Name" |
|
> |
|
{{item.Name}} |
|
</option> |
|
</datalist> |
|
<button |
|
class="btn btn-xs btn-primary removedatalist" |
|
@click="clearJoinTable" |
|
> |
|
<i class="mdi mdi-do-not-disturb"></i>删除选定项 |
|
</button> |
|
</div> |
|
<div class="form-group"> |
|
<label>关联方式<span class="red">*</span></label> |
|
<select |
|
v-model="copcol_joinType" |
|
name="joinType" |
|
class="form-control" |
|
> |
|
<option value="LeftJoin">左链接 [存在相同关联会重复]</option> |
|
<option value="InnerJoin"> |
|
内链接 [存在相同关联会重复+子表不存在主表也不显示] |
|
</option> |
|
<option value="SubqueryJoin">子查询 [不会重复]</option> |
|
</select> |
|
</div> |
|
<div class="form-group"> |
|
<label>关联字段(一般主键) <span class="red">*</span></label> |
|
<select |
|
v-model="copcol_joinField" |
|
name="joinField" |
|
class="form-control" |
|
> |
|
<option |
|
v-if="joinColumns&&joinColumns.length>0" |
|
v-for="item in joinColumns" |
|
> |
|
{{item.PropertyName}} |
|
</option> |
|
</select> |
|
</div> |
|
<div class="form-group"> |
|
<label |
|
>关联显示字段 (一般是Name) <span class="red">*</span></label |
|
> |
|
<select |
|
v-model="copcol_ShowFields" |
|
multiple |
|
@change="changeShowField" |
|
name="joinField" |
|
class="form-control" |
|
> |
|
<option |
|
v-if="joinColumns&&joinColumns.length>0" |
|
v-for="item in joinColumns" |
|
> |
|
{{item.PropertyName}} |
|
</option> |
|
</select> |
|
<input |
|
class="form-control" |
|
readonly="readonly" |
|
v-model="copcol_ShowField" |
|
/> |
|
</div> |
|
<div class="form-group"> |
|
<label>关联显示字段别名(AS 名称)</label> |
|
<input |
|
v-model="copcol_Name" |
|
name="Name" |
|
placeholder="默认:关联显示字段" |
|
class="form-control" |
|
/> |
|
</div> |
|
<div class="form-group"> |
|
<label>排序号</label> |
|
<input |
|
v-model="copcol_SortId" |
|
onchange="tools.ensureNumeric(this)" |
|
name="Sort" |
|
class="form-control" |
|
/> |
|
</div> |
|
</div> |
|
<div class="tab-pane"> |
|
<div class="form-group">开发中</div> |
|
</div> |
|
<div class="tab-pane"> |
|
<div class="form-group">开发中..</div> |
|
</div> |
|
<div class="tab-pane"> |
|
<div class="form-group">开发中..</div> |
|
</div> |
|
</div> |
|
</div> |
|
<div class="modal-footer"> |
|
<button |
|
type="button" |
|
id="btnCloseAddComplexityColumns" |
|
class="btn btn-default" |
|
data-dismiss="modal" |
|
> |
|
关闭 |
|
</button> |
|
<button |
|
type="button" |
|
@click="saveComplexityColumns" |
|
class="btn btn-primary" |
|
> |
|
确定 |
|
</button> |
|
</div> |
|
</div> |
|
</div> |
|
</div> |
|
<!--创建接口子窗体:添加排序--> |
|
<div |
|
class="modal fade bs-example-modal-lg" |
|
tabindex="-1" |
|
role="dialog" |
|
aria-labelledby="gridSystemModalLabel" |
|
id="divAddOrderBy" |
|
style="display: none" |
|
> |
|
<button |
|
id="btnAddOrderBy" |
|
type="button" |
|
class="btn btn-primary hidden" |
|
data-toggle="modal" |
|
data-target="#divAddOrderBy" |
|
></button> |
|
<div |
|
class="modal-dialog width800 border3CCC" |
|
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" |
|
> |
|
添加排序 |
|
</h4> |
|
</div> |
|
<div class="modal-body"> |
|
<div class="card-body tabbox"> |
|
<table class="table table-bordered"> |
|
<thead> |
|
<tr> |
|
<th>列名</th> |
|
<th>排序方式</th> |
|
<th>排序号</th> |
|
</tr> |
|
</thead> |
|
<tbody> |
|
<tr v-for="item in selectedOrderBys"> |
|
<td> |
|
{{item.Name}}<input |
|
type="hidden" |
|
v-model="item.Name" |
|
/> |
|
</td> |
|
<td> |
|
<select |
|
v-model="item.OrderByType" |
|
class="form-control" |
|
> |
|
<option></option> |
|
<option value="ASC">正序</option> |
|
<option value="DESC">倒序</option> |
|
</select> |
|
</td> |
|
<td> |
|
<input |
|
v-model="item.SortId" |
|
onchange="tools.ensureNumeric(this)" |
|
class="form-control" |
|
/> |
|
</td> |
|
</tr> |
|
</tbody> |
|
</table> |
|
<div> |
|
<div> |
|
<p class="example-box"> |
|
<label class="lyear-checkbox"> |
|
<input |
|
v-model="selectedOrderBys_EnableSort" |
|
type="checkbox" |
|
/> |
|
<span class="p-l-15">允许URL覆盖上面排序</span> |
|
</label> |
|
</p> |
|
<p> |
|
<code>参数OrderByName生效:值为上面列名或者为空</code> |
|
</p> |
|
<p> |
|
<code>参数OrderByType生效:值为ASC或者DESC</code> |
|
</p> |
|
</div> |
|
</div> |
|
</div> |
|
</div> |
|
<div class="modal-footer"> |
|
<button |
|
type="button" |
|
id="btnCloseAddOrderBy" |
|
class="btn btn-default" |
|
data-dismiss="modal" |
|
> |
|
关闭 |
|
</button> |
|
<button |
|
type="button" |
|
@click="saveBtnOrderBy" |
|
class="btn btn-primary" |
|
> |
|
确定 |
|
</button> |
|
</div> |
|
</div> |
|
</div> |
|
</div> |
|
<!--创建接口子窗体:添加条件--> |
|
<div |
|
class="modal fade bs-example-modal-lg" |
|
tabindex="-1" |
|
role="dialog" |
|
aria-labelledby="gridSystemModalLabel" |
|
id="divAddWhere" |
|
style="display: none" |
|
> |
|
<button |
|
id="btnAddWhere" |
|
type="button" |
|
class="btn btn-primary hidden" |
|
data-toggle="modal" |
|
data-target="#divAddWhere" |
|
></button> |
|
<div |
|
class="modal-dialog width1000 border3CCC" |
|
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" |
|
> |
|
添加条件 |
|
</h4> |
|
</div> |
|
<div class="modal-body"> |
|
<div class="card-body tabbox"> |
|
<table class="table table-bordered"> |
|
<thead> |
|
<tr> |
|
<th class="w-15">条件编号</th> |
|
<th class="w-15">条件列</th> |
|
<th class="w-15">条件关系</th> |
|
<th>条件值</th> |
|
<th class="w-20">操作</th> |
|
</tr> |
|
</thead> |
|
<tbody> |
|
<tr |
|
v-for="(item, index) in selectedWheres" |
|
:key="item.Id" |
|
> |
|
<td>{{item.Id}}</td> |
|
<td> |
|
<select |
|
v-model="item.PropertyName" |
|
class="form-control" |
|
> |
|
<option></option> |
|
<option v-for="item in selectedColumns"> |
|
{{item.PropertyName}} |
|
</option> |
|
<option v-for="item in selectedComplexityColumns"> |
|
{{item.DbColumnName}} |
|
</option> |
|
</select> |
|
</td> |
|
<td> |
|
<select |
|
v-model="item.WhereType" |
|
class="form-control" |
|
> |
|
<option></option> |
|
<option v-for="item in whereTypeList"> |
|
{{item.Key}} |
|
</option> |
|
</select> |
|
</td> |
|
<td> |
|
<div class="row"> |
|
<div class="col-md-6"> |
|
<select |
|
v-model="item.ValueType" |
|
id="selectOption" |
|
class="form-control" |
|
> |
|
<option value="0">固定值</option> |
|
<option value="1">参数名</option> |
|
<option class="2">ClaimKey</option> |
|
</select> |
|
</div> |
|
<div class="col-md-6"> |
|
<input |
|
v-model="item.Value" |
|
id="inputValue" |
|
class="form-control" |
|
type="text" |
|
/> |
|
</div> |
|
</div> |
|
</td> |
|
<td> |
|
<span |
|
class="pointer m-r-10" |
|
@click="addWhereItem(selectedWheres[selectedWheres.length - 1].Id)" |
|
><i class="mdi mdi-plus"></i> 添加</span |
|
> |
|
<span |
|
class="pointer" |
|
@click="deleteWhereItem(item.Id)" |
|
><i class="mdi mdi-window-close"></i> 删除</span |
|
> |
|
</td> |
|
</tr> |
|
</tbody> |
|
</table> |
|
<div class="form-group"> |
|
<p><code>条件关系:</code></p> |
|
<select |
|
v-model="selectedWheresConditionalRelation" |
|
@change="showWherePreview" |
|
class="form-control" |
|
> |
|
<option value="And">And:并且-带OR参数NULL</option> |
|
<option value="AndAll">AndAll:并且</option> |
|
<option value="Or">Or:或者-带OR参数NULL</option> |
|
<option value="OrAll">OrAll: 或者</option> |
|
<option value="Custom">Custom :自定义-带OR参数NULL</option> |
|
<option value="CustomAll">CustomAll:自定义</option> |
|
</select> |
|
</div> |
|
<div |
|
v-if="selectedWheresConditionalRelation=='Custom'||selectedWheresConditionalRelation=='CustomAll'" |
|
class="form-group" |
|
> |
|
<textarea |
|
rows="5" |
|
v-model="selectedWhereRelationTemplate" |
|
class="form-control" |
|
> |
|
</textarea> |
|
<p> |
|
<code>{1}表示编号为1的条件,{2}表示编号为2的条件 </code> |
|
</p> |
|
</div> |
|
<div class="form-group"> |
|
<p><code>预览:</code></p> |
|
<p style="white-space: pre-line">{{selectdWherePreviewString}}</p> |
|
<button |
|
@click="showWherePreview" |
|
class="btn btn-info" |
|
> |
|
<i class="mdi mdi-refresh"></i> 刷新结果 |
|
</button> |
|
</div> |
|
</div> |
|
<div class="modal-footer"> |
|
<button |
|
type="button" |
|
id="btnCloseAddWhere" |
|
class="btn btn-default" |
|
data-dismiss="modal" |
|
> |
|
关闭 |
|
</button> |
|
<button |
|
type="button" |
|
@click="saveBtnWhere" |
|
class="btn btn-primary" |
|
> |
|
确定 |
|
</button> |
|
</div> |
|
</div> |
|
</div> |
|
</div> |
|
</div> |
|
<!--创建接口子窗体:默认值--> |
|
<div |
|
class="modal fade bs-example-modal-lg" |
|
tabindex="-1" |
|
role="dialog" |
|
aria-labelledby="gridSystemModalLabel" |
|
id="divDefaultValue" |
|
style="display: none" |
|
> |
|
<button |
|
id="btnDafeultValue" |
|
type="button" |
|
class="btn btn-primary hidden" |
|
data-toggle="modal" |
|
data-target="#divDefaultValue" |
|
></button> |
|
<div |
|
class="modal-dialog width800 border3CCC" |
|
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" |
|
> |
|
配置列默认值 |
|
</h4> |
|
</div> |
|
<div class="modal-body"> |
|
<div class="card-body tabbox"> |
|
<table class="table table-bordered"> |
|
<thead> |
|
<tr> |
|
<th>列名</th> |
|
<th width="300">默认值类型</th> |
|
<th width="200">值</th> |
|
</tr> |
|
</thead> |
|
<tbody> |
|
<tr |
|
v-if="selectDefaultValueColumns&&selectDefaultValueColumns.length>0" |
|
v-for="x in selectDefaultValueColumns" |
|
> |
|
<td>{{x.PropertyName}}</td> |
|
<td> |
|
<select |
|
v-model="x.Type" |
|
class="form-control" |
|
> |
|
<option value="0">无</option> |
|
<option value="1">固定值</option> |
|
<option value="2"> |
|
默认值(int等于0,空字符串等于空等) |
|
</option> |
|
<option value="3">当前时间</option> |
|
<option value="4">ClaimKey</option> |
|
</select> |
|
</td> |
|
<td> |
|
<input |
|
v-model="x.Value" |
|
:class="[x.Type != 1&&x.Type != 4 ? 'hidden' : '', 'form-control'].join(' ')" |
|
/> |
|
</td> |
|
</tr> |
|
</tbody> |
|
</table> |
|
</div> |
|
</div> |
|
<div class="modal-footer"> |
|
<button |
|
type="button" |
|
id="btnDafeultValueClose" |
|
class="btn btn-default" |
|
data-dismiss="modal" |
|
> |
|
关闭 |
|
</button> |
|
<button |
|
type="button" |
|
@click="saveDefaultValue" |
|
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: '', |
|
tabIndex: 0, |
|
formData: {}, |
|
selectedItems: [], |
|
groupList: [], |
|
whereTypeList: [], |
|
interfaceCategroyList: [], |
|
actionList: [], |
|
currentActionType: [], |
|
currentActionTypeContext: [], |
|
tables: [], |
|
selectedTables: [], |
|
databaseId: 0, |
|
database: [], |
|
editId: 0, |
|
columns: [], |
|
joinColumns: [], |
|
selectColumns: [], |
|
selectColumnsTabIndex: 1, |
|
selectedColumns: [], |
|
selectedOrderBys: [], |
|
selectedOrderByString: '-', |
|
selectedOrderBys_EnableSort: false, |
|
selectedComplexityColumns: [], |
|
selectedWhereString: '-', |
|
selectedWheres: [], |
|
selectedWhereRelationTemplate: '( {1} and {2} ) ', |
|
selectedWheresConditionalRelation: 'AND', |
|
selectdWherePreviewString: null, |
|
selectDefaultValueColumns: [], |
|
saveDefaultValueColumns: [], |
|
//ComplexityColumn |
|
copcol_JoinTable: null, |
|
copcol_MasterField: null, |
|
copcol_joinType: null, |
|
copcol_joinField: null, |
|
copcol_SortId: null, |
|
copcol_Name: null, |
|
copcol_ShowField: null, |
|
copcol_ShowFields: [], |
|
//update |
|
updateColumns: [], |
|
}, |
|
mounted() { |
|
this.fetchData('') |
|
this.bindGroupListSelect() |
|
this.bindInterfaceCategroySelect() |
|
this.bindActionLists() |
|
this.bindDatabaseSelect() |
|
this.bindWhereType() |
|
}, |
|
methods: { |
|
/* |
|
主列表逻辑 |
|
*/ |
|
fetchData(append) { |
|
var url = |
|
'/PrivateReZeroRoute/100003/GetDynamicInterfacePageList' + 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({ |
|
__pageNumber: page, |
|
__pageSize: tools.getValue('selPageSize'), |
|
Name: txtName.value, |
|
GroupName: selGroupName.value, |
|
DataBaseId: selDatabase.value, |
|
InterfaceCategoryId: selInterfaceCategoryId.value, |
|
}) |
|
this.fetchData(urlParameters) |
|
}, |
|
changeDatabase: function () { |
|
this.onSearch(1) |
|
}, |
|
selectAll(event) { |
|
if (event.target.checked) { |
|
// 全选 |
|
this.selectedItems = this.data.Data.map(item => item.Id) |
|
} else { |
|
// 全不选 |
|
this.selectedItems = [] |
|
} |
|
}, |
|
deleteAndConfirm: function (item) { |
|
if (item == null) { |
|
var url = |
|
'/PrivateReZeroRoute/100003/DeleteDynamicInterface?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 |
|
} |
|
}, |
|
enable: function () { |
|
alert('开发中') |
|
}, |
|
disable: function () { |
|
alert('开发中') |
|
}, |
|
openGenerateCode: function () { |
|
tools.alert('功能开发中..') |
|
}, |
|
|
|
/* |
|
编辑接口 |
|
*/ |
|
openEdit: function (item) { |
|
var th = this |
|
var title = th.editTitle |
|
var urlById = |
|
'/PrivateReZeroRoute/100003/GetInternalDetail?id=' + item.Id |
|
if (item.Id) { |
|
axios |
|
.get(urlById, jwHeader) |
|
.then(response => { |
|
var oldData = JSON.parse(JSON.stringify(th.$data)) |
|
var oldDatabase = th.database |
|
var data = JSON.parse(response.data.DataModel.CurrentDataString) |
|
tools.assignValuesToObject(data, th) |
|
th.title = title |
|
th.editId = response.data.Id |
|
th.data = oldData.data |
|
th.interfaceCategroyList = oldData.interfaceCategroyList |
|
th.actionList = oldData.actionList |
|
th.database = oldDatabase |
|
if (th.currentActionTypeContext) { |
|
if (th.currentActionTypeContext.FormElements) { |
|
if ( |
|
th.currentActionTypeContext.FormElements[1].SelectDataSource |
|
) { |
|
th.currentActionTypeContext.FormElements[1].SelectDataSource = |
|
oldData.actionList[0].Items[1].FormElements[1].SelectDataSource |
|
} |
|
} |
|
} |
|
btnSave.click() |
|
this.showEditSql() |
|
setTimeout(function () { |
|
th.setSelectedOptions() |
|
}, 500) |
|
}) |
|
.catch(error => { |
|
this.error = error.message |
|
this.data = null |
|
}) |
|
} |
|
}, |
|
|
|
/* |
|
添加接口 |
|
*/ |
|
//1.打开和保存-添加接口 |
|
openNext: function () { |
|
this.title = this.addTitle |
|
btnNext.click() |
|
this.currentActionTypeContext = [] |
|
this.selectDefaultValueColumns = [] |
|
this.saveDefaultValueColumns = [] |
|
this.selectdWherePreviewString = null |
|
this.editId = 0 |
|
}, |
|
openAdd: function (item) { |
|
if (this.currentActionType.length == 0) { |
|
tools.alert('请选择类型') |
|
return |
|
} |
|
btnNextClose.click() |
|
btnSave.click() |
|
this.currentActionTypeContext = this.currentActionType.Items[0] |
|
this.currentActionTypeContext.FormElements[0].Value = |
|
this.currentActionTypeContext.Text |
|
this.showEditSql() |
|
}, |
|
addOrUpdateInterfaceList: function () { |
|
var elementsWithValidateData = |
|
document.querySelectorAll('[validate-data]') |
|
var isSuccess = true |
|
var th = this |
|
elementsWithValidateData.forEach(function (element) { |
|
var attributeName = 'validate-data' |
|
var attributeValue = JSON.parse(element.getAttribute(attributeName)) |
|
|
|
if (isSuccess) { |
|
isSuccess = th.validateElement(element, attributeValue) |
|
} |
|
}) |
|
|
|
if (isSuccess) { |
|
this.setValueEditSql() |
|
var formData = tools.formToJson('frmSave') |
|
formData.DatabaseId = this.DatabaseId |
|
var vueData = this.$data |
|
vueData.data = [] |
|
var oldActionList = vueData.actionList |
|
vueData.actionList = null |
|
var currentString = JSON.stringify(vueData) |
|
vueData.actionList = oldActionList |
|
formData.Json = { |
|
Id: this.editId, |
|
Columns: this.selectedColumns, |
|
ComplexityColumns: this.selectedComplexityColumns, |
|
Where: this.selectedWheres, |
|
WhereRelation: this.selectedWheresConditionalRelation, |
|
WhereRelationTemplate: this.selectedWhereRelationTemplate, |
|
OrderBys: this.selectedOrderBys, |
|
OrderBysEnableSort: this.selectedOrderBys_EnableSort, |
|
CurrentDataString: currentString, |
|
DataBaseId: this.databaseId, |
|
DefaultValueColumns: this.saveDefaultValueColumns, |
|
} |
|
var url = '/PrivateReZeroRoute/100003/SaveInterfaceList' |
|
axios |
|
.post(url, formData, jwHeader) |
|
.then(response => { |
|
if (response.data == true) { |
|
tools.alert('保存成功') |
|
btnAddOrUpdateColse.click() |
|
this.error = null |
|
th.onSearch() |
|
} else { |
|
tools.alert(response.data.message) |
|
} |
|
}) |
|
.catch(error => { |
|
this.error = error.message |
|
}) |
|
} |
|
}, |
|
interfaceListTabClick: function (index, item) { |
|
this.tabIndex = index |
|
this.currentActionTypeContext = this.currentActionType.Items[index] |
|
if (this.currentActionTypeContext.FormElements.length > 0) |
|
this.currentActionTypeContext.FormElements[0].Value = item.Text |
|
this.showEditSql() |
|
}, |
|
//2.选择表逻辑-添加接口 |
|
openImportEntity: function () { |
|
btnImportEntity.click() |
|
this.bindImportTables() |
|
}, |
|
importEntitySubmit: function () { |
|
var th = this |
|
this.currentActionType.Items.forEach(item => { |
|
item.FormElements.forEach(element => { |
|
element.Value = |
|
element.ElementType == '1' |
|
? this.selectedTables[0].Name |
|
: element.Value |
|
}) |
|
}) |
|
this.columns = [] |
|
btnImportEntityClose.click() |
|
this.bindUpdates() |
|
}, |
|
bindImportTables: function () { |
|
var url = |
|
'/PrivateReZeroRoute/100004/GetAllTables?databaseId=' + |
|
this.databaseId + |
|
'&tableName=' + |
|
txtTableName.value |
|
axios |
|
.get(url, jwHeader) |
|
.then(response => { |
|
this.tables = response.data |
|
this.error = null |
|
}) |
|
.catch(error => { |
|
this.error = error.message |
|
}) |
|
}, |
|
selectAllTables(event) { |
|
if (event.target.checked) { |
|
// 全选 |
|
this.selectedTables = this.tables.map(item => item) |
|
} else { |
|
// 全不选 |
|
this.selectedTables = [] |
|
} |
|
}, |
|
//3.添加简单列逻辑-添加接口 |
|
openAddColumn: function (item) { |
|
var tableValue = document.querySelectorAll('[name=TableId]')[0].value |
|
if (!tableValue) { |
|
tools.alert('请先选择主表') |
|
return |
|
} |
|
var th = this |
|
btnDivAddColumns.click() |
|
this.setColumns() |
|
}, |
|
saveColumns: function () { |
|
var th = this |
|
this.selectedColumns = this.columns.filter(it => |
|
th.selectColumns.includes(it.Id) |
|
) |
|
btnCloseAddColumns.click() |
|
this.clearOrderBy() |
|
}, |
|
selectAllColumns(event) { |
|
if (event.target.checked) { |
|
// 全选 |
|
this.selectColumns = this.columns.map(item => item.Id) |
|
} else { |
|
// 全不选 |
|
this.selectColumns = [] |
|
} |
|
}, |
|
//4.追加复杂列逻辑-添加接口 |
|
openAddComplexityColumn: function (item) { |
|
var tableValue = document.querySelectorAll('[name=TableId]')[0].value |
|
if (!tableValue) { |
|
tools.alert('请先选择主表') |
|
return |
|
} |
|
var th = this |
|
this.setColumns() |
|
btnAddComplexityColumns.click() |
|
this.clearComplexityColumns() |
|
}, |
|
changeJoinTable: function () { |
|
this.setJoinColumns() |
|
}, |
|
clearJoinTable: function () { |
|
this.copcol_JoinTable = null |
|
this.joinColumns = [] |
|
}, |
|
saveComplexityColumns: function () { |
|
// 封装以 this.copcol_ 开头的属性到 json 对象中 |
|
var json = { |
|
ShowField: this.copcol_ShowField, |
|
Name: this.copcol_Name, |
|
joinType: this.copcol_joinType, |
|
JoinTable: this.copcol_JoinTable, |
|
MasterField: this.copcol_MasterField, |
|
joinField: this.copcol_joinField, |
|
SortId: this.copcol_SortId, |
|
} |
|
if (json.ShowField) { |
|
if (!this.checkCommas(json.ShowField, json.Name)) { |
|
return |
|
} |
|
} else { |
|
tools.alert('带*的请填写完整') |
|
return |
|
} |
|
if (!json.Name) { |
|
json.Name = json.ShowField |
|
} |
|
var newJsons = this.splitJsonByTwoKeys(json, 'ShowField', 'Name') |
|
var isOk = true |
|
newJsons.forEach(copcolJson => { |
|
if (!isOk) { |
|
return |
|
} |
|
if (this.selectColumnsTabIndex != 1) { |
|
tools.alert('开发中..') |
|
isOk = false |
|
return |
|
} |
|
|
|
if (!this.validateComplexityColumns(copcolJson)) { |
|
tools.alert('带*的请填写完整') |
|
isOk = false |
|
return |
|
} |
|
|
|
var asName = copcolJson.Name || copcolJson.ShowField |
|
|
|
var addItem = { |
|
PropertyName: |
|
document.querySelectorAll('[name=TableId]')[0].value + |
|
' ' + |
|
copcolJson.joinType + |
|
' ' + |
|
copcolJson.JoinTable + |
|
' ON ' + |
|
document.querySelectorAll('[name=TableId]')[0].value + |
|
'.' + |
|
copcolJson.MasterField + |
|
'=' + |
|
copcolJson.JoinTable + |
|
'.' + |
|
copcolJson.joinField, |
|
DbColumnName: |
|
copcolJson.JoinTable + |
|
'.' + |
|
copcolJson.ShowField + |
|
' AS ' + |
|
asName, |
|
SortId: 1, |
|
Json: { |
|
JoinInfo: { |
|
MasterField: copcolJson.MasterField, |
|
JoinTable: copcolJson.JoinTable, |
|
JoinType: copcolJson.joinType, |
|
JoinField: copcolJson.joinField, |
|
ShowField: copcolJson.ShowField, |
|
Name: copcolJson.Name, |
|
SortId: copcolJson.SortId, |
|
}, |
|
}, |
|
} |
|
|
|
if ( |
|
this.selectedColumns.some(column => column.DbColumnName == asName) |
|
) { |
|
tools.alert( |
|
'【关联显示字段】与主表重复,可以设置【关联显示字段别名】来定义显示名' |
|
) |
|
isOk = false |
|
return |
|
} |
|
|
|
this.selectedComplexityColumns.push(addItem) |
|
btnCloseAddComplexityColumns.click() |
|
this.clearOrderBy() |
|
}) |
|
}, |
|
deleteSelectedColumn: function (item) { |
|
this.selectedColumns.removeArrayItem(item) |
|
}, |
|
deleteComplexitySelectedColumn: function (item) { |
|
this.selectedComplexityColumns.removeArrayItem(item) |
|
}, |
|
tabClickComplexityColumns: function (index) { |
|
if (index != 1) liComplexityColumns.className = '' |
|
var $tabs = $('#divAddComplexityColumns .tab-pane') |
|
$tabs.hide() |
|
$tabs.eq(index - 1).show() |
|
this.selectColumnsTabIndex = index |
|
}, |
|
//5.添加排序逻辑-添加接口 |
|
openOrderByColumn: function () { |
|
if (!this.validateColumsAny()) { |
|
tools.alert('请选择列后在选择排序') |
|
return |
|
} |
|
if (this.selectedOrderBys.length == 0) { |
|
this.selectedOrderBys = this.selectedColumns.map(it => ({ |
|
Name: it.DbColumnName, |
|
})) |
|
var selectComplexityColumnOrderBys = |
|
this.selectedComplexityColumns.map(it => ({ |
|
Name: it.DbColumnName, |
|
})) |
|
this.selectedOrderBys = this.selectedOrderBys.concat( |
|
selectComplexityColumnOrderBys |
|
) |
|
} |
|
btnAddOrderBy.click() |
|
}, |
|
saveBtnOrderBy: function () { |
|
btnCloseAddOrderBy.click() |
|
this.selectedOrderByString = this.selectedOrderBys |
|
.filter(it => it.OrderByType == 'ASC' || it.OrderByType == 'DESC') |
|
.sort(function (a, b) { |
|
return a.SortId - b.SortId |
|
}) |
|
.map(it => it.Name + ' ' + it.OrderByType) |
|
.join(',') |
|
}, |
|
//6.添加条件逻辑-添加接口 |
|
openWhere: function () { |
|
if (!this.validateColumsAny()) { |
|
tools.alert('请选择列后在选择条件') |
|
return |
|
} |
|
if (this.selectedWheres.length == 0) { |
|
this.selectedWheres.push(this.getWhereModel()) |
|
} |
|
btnAddWhere.click() |
|
}, |
|
openMiniWhere: function () { |
|
var tableValue = document.querySelectorAll('[name=TableId]')[0].value |
|
if (!tableValue) { |
|
tools.alert('请先选择主表') |
|
return |
|
} |
|
if (this.selectedWheres.length == 0) { |
|
this.selectedWheres.push(this.getWhereModel()) |
|
} |
|
var th = this |
|
var url = |
|
'/PrivateReZeroRoute/100003/GetEntityColuminsByEntityId?TableId=' + |
|
this.selectedTables[0].Id |
|
axios |
|
.get(url, jwHeader) |
|
.then(response => { |
|
th.columns = response.data |
|
th.selectedColumns = th.columns |
|
}) |
|
.catch(error => { |
|
this.error = error.message |
|
}) |
|
btnAddWhere.click() |
|
}, |
|
clearMiniWhere: function () { |
|
this.selectedColumns = [] |
|
this.selectedWheres = [] |
|
this.selectdWherePreviewString = null |
|
}, |
|
saveBtnWhere: function () { |
|
btnCloseAddWhere.click() |
|
}, |
|
addWhereItem: function (id) { |
|
var model = this.getWhereModel() |
|
model.Id = id + 1 |
|
this.selectedWheres.push(model) |
|
}, |
|
deleteWhereItem: function (id) { |
|
if (this.selectedWheres.length == 1) { |
|
this.selectedWheres = [] |
|
btnCloseAddWhere.click() |
|
} else { |
|
this.selectedWheres.removeArrayItem( |
|
this.selectedWheres.find(it => it.Id == id) |
|
) |
|
} |
|
}, |
|
showWherePreview: function () { |
|
var cr = this.selectedWheresConditionalRelation |
|
var isAndAll = cr == 'AndAll' |
|
var isOrAll = cr == 'OrAll' |
|
var isAnd = cr == 'And' |
|
var isOr = cr == 'Or' |
|
var isCustom = cr == 'Custom' |
|
var isCustomAll = cr == 'CustomAll' |
|
var andStr = 'AND' |
|
var orStr = 'Or' |
|
var empStr = '' |
|
if (isCustom || isCustomAll) { |
|
var template = this.selectedWhereRelationTemplate + '' |
|
this.selectedWheres.forEach(function (it) { |
|
var value = ` (${it.PropertyName} ${it.WhereType} ${ |
|
it.ValueType == 0 |
|
? it.Value |
|
: `@${it.Value} OR (@${it.Value} IS NULL)` |
|
}) ` |
|
if (isCustomAll) { |
|
value = `(${it.PropertyName} ${it.WhereType} ${ |
|
it.ValueType == 0 ? it.Value : `@${it.Value}` |
|
}) ` |
|
} |
|
var regex = new RegExp('\\{' + it.Id + '\\}', 'g') |
|
template = template.replace(regex, value) |
|
}) |
|
this.selectdWherePreviewString = template |
|
} |
|
if (isAnd || isOr) { |
|
var type = isAnd ? andStr : orStr |
|
var wheres = this.selectedWheres |
|
.map( |
|
it => |
|
`${type} (${it.PropertyName} ${it.WhereType} ${ |
|
it.ValueType == 0 |
|
? it.Value |
|
: `@${it.Value} OR (@${it.Value} IS NULL)` |
|
})\r\n` |
|
) |
|
.join(empStr) |
|
this.selectdWherePreviewString = wheres |
|
} else if (isAndAll || isOrAll) { |
|
var type = isAndAll ? andStr : orStr |
|
var wheres = this.selectedWheres |
|
.map( |
|
it => |
|
`${type} (${it.PropertyName} ${it.WhereType} ${ |
|
it.ValueType == 0 ? it.Value : `@${it.Value}` |
|
})\r\n ` |
|
) |
|
.join(empStr) |
|
this.selectdWherePreviewString = wheres |
|
} |
|
}, |
|
//7.配置插入或者更新默认值 |
|
saveDefaultValue: function () { |
|
var th = this |
|
th.saveDefaultValueColumns = [] |
|
th.selectDefaultValueColumns.forEach(function (item) { |
|
th.saveDefaultValueColumns.push({ |
|
PropertyName: item.PropertyName, |
|
Type: item.Type, |
|
Value: item.Value, |
|
}) |
|
}) |
|
btnDafeultValueClose.click() |
|
}, |
|
openDefaultValue: function () { |
|
var tableValue = document.querySelectorAll('[name=TableId]')[0].value |
|
if (!tableValue) { |
|
tools.alert('请先选择主表') |
|
return |
|
} |
|
var th = this |
|
var url = |
|
'/PrivateReZeroRoute/100003/GetEntityColuminsByEntityId?TableId=' + |
|
this.selectedTables[0].Id |
|
axios |
|
.get(url, jwHeader) |
|
.then(response => { |
|
th.selectDefaultValueColumns = [] |
|
response.data |
|
.filter(it => !it.IsPrimarykey) |
|
.forEach(function (item) { |
|
if ( |
|
th.saveDefaultValueColumns.some( |
|
it => it.PropertyName == item.PropertyName |
|
) |
|
) { |
|
var match = th.saveDefaultValueColumns.find( |
|
it => it.PropertyName == item.PropertyName |
|
) |
|
th.selectDefaultValueColumns.push({ |
|
PropertyName: match.PropertyName, |
|
Value: match.Value, |
|
Type: match.Type, |
|
}) |
|
} else { |
|
th.selectDefaultValueColumns.push({ |
|
PropertyName: item.PropertyName, |
|
Type: 0, |
|
Value: null, |
|
}) |
|
} |
|
}) |
|
btnDafeultValue.click() |
|
}) |
|
.catch(error => { |
|
this.error = error.message |
|
}) |
|
}, |
|
|
|
/* |
|
次要方法 |
|
*/ |
|
bindGroupListSelect: function () { |
|
axios |
|
.get('/PrivateReZeroRoute/100004/GetDynamicGroupNameList', jwHeader) |
|
.then(response => { |
|
this.groupList = response.data |
|
}) |
|
.catch(error => { |
|
this.error = error.message |
|
this.data = null |
|
}) |
|
}, |
|
bindInterfaceCategroySelect: function () { |
|
axios |
|
.get( |
|
'/PrivateReZeroRoute/100004/GetDynamicInterfaceCategoryList', |
|
jwHeader |
|
) |
|
.then(response => { |
|
this.interfaceCategroyList = response.data |
|
}) |
|
.catch(error => { |
|
this.error = error.message |
|
this.data = null |
|
}) |
|
}, |
|
bindActionLists: function () { |
|
axios |
|
.get('/PrivateReZeroRoute/100004/GetActionType', jwHeader) |
|
.then(response => { |
|
this.actionList = response.data |
|
}) |
|
.catch(error => { |
|
this.error = error.message |
|
}) |
|
}, |
|
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 |
|
}) |
|
}, |
|
bindWhereType: function () { |
|
axios |
|
.get('/PrivateReZeroRoute/100004/GetWhereTypeList', jwHeader) |
|
.then(response => { |
|
this.whereTypeList = response.data |
|
}) |
|
.catch(error => { |
|
this.error = error.message |
|
}) |
|
}, |
|
setColumns: function () { |
|
var th = this |
|
if (this.selectedTables.length > 0) { |
|
var url = |
|
'/PrivateReZeroRoute/100003/GetEntityColuminsByEntityId?TableId=' + |
|
this.selectedTables[0].Id |
|
axios |
|
.get(url, jwHeader) |
|
.then(response => { |
|
th.columns = response.data |
|
}) |
|
.catch(error => { |
|
this.error = error.message |
|
}) |
|
} |
|
}, |
|
setJoinColumns: function () { |
|
var th = this |
|
var tableId = this.copcol_JoinTable |
|
tableId = this.tables.find(function (item) { |
|
return item.Name === tableId |
|
}).Id |
|
if (this.selectedTables.length > 0) { |
|
var url = |
|
'/PrivateReZeroRoute/100003/GetEntityColuminsByEntityId?TableId=' + |
|
tableId |
|
axios |
|
.get(url, jwHeader) |
|
.then(response => { |
|
th.joinColumns = response.data |
|
}) |
|
.catch(error => { |
|
this.error = error.message |
|
}) |
|
} |
|
}, |
|
validateElement: function (element, attributeValue) { |
|
if (attributeValue.IsRequired && !element.value) { |
|
tools.alert(attributeValue.Text + '不能为空') |
|
return false |
|
} |
|
if ( |
|
attributeValue.Name === 'Url' && |
|
element.value && |
|
!tools.isValidURLPattern(element.value) |
|
) { |
|
tools.alert('Url格式不正确,应该是/xxx/yyy 或者 /xx.xx') |
|
return false |
|
} |
|
return true |
|
}, |
|
validateColumsAny: function () { |
|
return ( |
|
this.selectedColumns.length + this.selectedComplexityColumns.length > |
|
0 |
|
) |
|
}, |
|
clearOrderBy: function () { |
|
this.selectedOrderBys = [] |
|
this.selectedOrderBys_EnableSort = false |
|
}, |
|
clearComplexityColumns: function () { |
|
this.copcol_joinField = null |
|
this.copcol_Name = null |
|
this.copcol_SortId = null |
|
this.copcol_ShowField = null |
|
this.copcol_MasterField = null |
|
this.copcol_JoinTable = null |
|
this.copcol_joinType = null |
|
this.copcol_ShowFields = [] |
|
}, |
|
validateComplexityColumns: function () { |
|
if ( |
|
this.copcol_joinField == null || |
|
this.copcol_ShowField == null || |
|
this.copcol_joinType == null || |
|
this.copcol_MasterField == null || |
|
this.copcol_JoinTable == null |
|
) { |
|
return false |
|
} |
|
return true |
|
}, |
|
getWhereModel: function () { |
|
return { |
|
Id: 1, |
|
PropertyName: null, |
|
WhereType: 'Equal', |
|
ValueType: 0, |
|
Value: null, |
|
} |
|
}, |
|
checkCommas: function (str1, str2) { |
|
if (!str2) { |
|
return true |
|
} |
|
|
|
// 计算两个字符串中的逗号数量 |
|
var commasInStr1 = (str1.match(/,/g) || []).length |
|
if (commasInStr1 == 0) { |
|
return true |
|
} |
|
var commasInStr2 = (str2.match(/,/g) || []).length |
|
|
|
// 比较两个字符串中的逗号数量是否相等 |
|
if (commasInStr1 === commasInStr2) { |
|
return true |
|
} else { |
|
tools.alert( |
|
'【关联显示字段别名】存在多个要用 “,” 分割开,数量要一样。' |
|
) |
|
return false |
|
} |
|
}, |
|
changeShowField: function () { |
|
this.copcol_ShowField = this.copcol_ShowFields.join(',') |
|
}, |
|
splitJsonByTwoKeys: function (jsonObj, key1, key2) { |
|
// 验证输入对象是否有效 |
|
if (typeof jsonObj !== 'object' || jsonObj === null) { |
|
throw new Error('Invalid input: jsonObj must be an object.') |
|
} |
|
|
|
// 验证key1和key2是否存在于jsonObj中且为字符串类型 |
|
if (!(key1 in jsonObj) || typeof jsonObj[key1] !== 'string') { |
|
throw new Error( |
|
`Invalid input: ${key1} must be a string property of jsonObj.` |
|
) |
|
} |
|
if (!(key2 in jsonObj) || typeof jsonObj[key2] !== 'string') { |
|
throw new Error( |
|
`Invalid input: ${key2} must be a string property of jsonObj.` |
|
) |
|
} |
|
|
|
// 分割key1和key2对应的值 |
|
const values1 = jsonObj[key1].split(',') |
|
const values2 = jsonObj[key2].split(',') |
|
|
|
// 验证两个键的值分割后长度是否一致 |
|
if (values1.length !== values2.length) { |
|
throw new Error( |
|
`The number of elements in ${key1} and ${key2} must be the same.` |
|
) |
|
} |
|
|
|
// 创建结果数组 |
|
const result = [] |
|
|
|
// 遍历分割后的值,构建新的对象并添加到结果数组中 |
|
for (let i = 0; i < values1.length; i++) { |
|
const newObj = Object.assign({}, jsonObj) // 复制原始对象 |
|
newObj[key1] = values1[i].trim() // 替换key1的值 |
|
newObj[key2] = values2[i].trim() // 替换key2的值 |
|
result.push(newObj) |
|
} |
|
|
|
return result |
|
}, |
|
showEditSql: function () { |
|
setTimeout(function () { |
|
var $sql = $("[name='Sql']") |
|
if ($sql.size() > 0) { |
|
var editor = ace.edit('divAceEditor') |
|
editor.setOption('showPrintMargin', false) |
|
editor.setTheme('ace/theme/twilight') // 设置主题 |
|
editor.getSession().setMode('ace/mode/sql') // 设置语言模式为SQL |
|
editor.setOption('enableBasicAutocompletion', true) |
|
editor.setOption('enableSnippets', true) |
|
editor.setOption('enableLiveAutocompletion', true) |
|
editor.setValue($sql.val()) |
|
editor.selection.clearSelection() |
|
} |
|
}, 100) |
|
}, |
|
setValueEditSql: function () { |
|
var $sql = $("[name='Sql']") |
|
if ($sql.size() > 0) { |
|
var editor = ace.edit('divAceEditor') |
|
this.currentActionTypeContext.FormElements[3].Value = |
|
editor.getValue() |
|
$sql.val(editor.getValue()) |
|
} |
|
}, |
|
closeEditSql: function () { |
|
var editor = ace.edit('divAceEditor') |
|
editor.destroy() |
|
}, |
|
bindUpdates: function () { |
|
var th = this |
|
var url = |
|
'/PrivateReZeroRoute/100003/GetEntityColuminsByEntityId?TableId=' + |
|
this.selectedTables[0].Id |
|
axios |
|
.get(url, jwHeader) |
|
.then(response => { |
|
th.updateColumns = response.data |
|
}) |
|
.catch(error => { |
|
this.error = error.message |
|
}) |
|
}, |
|
setUpdateColums: function (item) { |
|
// 初始化一个空数组来存储选中的值 |
|
var selectedValues = [] |
|
|
|
// 遍历 <select> 元素的所有 <option> 子元素 |
|
for (var i = 0; i < selUpdateColumns.options.length; i++) { |
|
// 检查 <option> 是否被选中 |
|
if (selUpdateColumns.options[i].selected) { |
|
// 如果被选中,则将其值添加到 selectedValues 数组中 |
|
selectedValues.push(selUpdateColumns.options[i].value) |
|
} |
|
} |
|
// 将选中的值转换为逗号分隔的字符串 |
|
var valueStr = selectedValues.join(',') |
|
item.Value = valueStr |
|
}, |
|
setSelectedOptions: function () { |
|
var id = 'selUpdateColumns' |
|
var selectElement = document.getElementById(id) |
|
if (selectElement == null) return |
|
var valueStr = $(selectElement).prev().val() |
|
// 清空当前select的所有选中项 |
|
for (var i = 0; i < selectElement.options.length; i++) { |
|
selectElement.options[i].selected = false |
|
} |
|
|
|
// 将传入的逗号分隔字符串分割成数组 |
|
var values = valueStr.split(',') |
|
|
|
// 遍历数组中的每一个值 |
|
for (var j = 0; j < values.length; j++) { |
|
// 去除值两边的空格 |
|
var value = values[j].trim() |
|
|
|
// 遍历<select>的所有<option>,查找匹配的项并选中 |
|
for (var k = 0; k < selectElement.options.length; k++) { |
|
if (selectElement.options[k].value === value) { |
|
selectElement.options[k].selected = true |
|
break // 找到匹配项后跳出内层循环 |
|
} |
|
} |
|
} |
|
}, |
|
}, |
|
}) |
|
</script>
|
|
|