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
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>
|