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.

1538 lines
82 KiB

3 weeks ago
@@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>