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.
1537 lines
82 KiB
1537 lines
82 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>
|
|
|