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.
		
		
		
		
			
				
					1075 lines
				
				55 KiB
			
		
		
			
		
	
	
					1075 lines
				
				55 KiB
			| 
											6 months ago
										 | @@master_page.html
 | ||
|  | <link href="css/page_table_list.css?v=1" rel="stylesheet" />
 | ||
|  | <link href="css/page_entity_manager.css?v=1" 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 mypage">
 | ||
|  |     <!--正文-->
 | ||
|  |     <div class="card">
 | ||
|  |         <div class="search-bar"> </div>
 | ||
|  |         <div class="card">
 | ||
|  |             <form id="frmSearach" onsubmit="return false;">
 | ||
|  |                 <div class="row ">
 | ||
|  |                     <div class="form-group">
 | ||
|  |                         <div class="col-md-1"><label class="form-control m-l-15">数据库:</label></div>
 | ||
|  |                         <div class="col-md-11">
 | ||
|  |                             <div class="input-group">
 | ||
|  |                                 <select v-model="databaseId" @change="changeDatabase()" id="selDataBaseId" class="form-control" style="width:150px;">
 | ||
|  |                                     <option v-for="item in  database" v-bind:value="item.Id"> {{item.Name}} </option>
 | ||
|  |                                 </select>
 | ||
|  |                                 <input id="txtSearch" type="text" style="width:150px;margin-left:20px; margin-right:10px" class="form-control" value="" name="keyword" placeholder="请输入名称">
 | ||
|  |                                 <a class="btn btn-secondary    m-r-5" id="btnSearch" data-toggle="tooltip" @click="onSearch()" href="#!"><i class="mdi mdi-magnify"></i> 搜索</a>
 | ||
|  |                                 <button onclick="frmSearach.reset()" type="submit" class="btn btn-close">清空</button>
 | ||
|  |                             </div>
 | ||
|  |                         </div>
 | ||
|  |                     </div>
 | ||
|  |                 </div>
 | ||
|  |             </form>
 | ||
|  |             <div class="card-toolbar clearfix">
 | ||
|  | 
 | ||
|  |                 <div class="toolbar-btn-action">
 | ||
|  |                     <a @click="openAddDiv()" data-toggle="modal" data-target="#gridSystemModal" class="btn btn-primary m-r-10" href="#!"><i class="mdi mdi-plus"></i> 新增</a>
 | ||
|  |                     <a class="btn btn-success m-r-10" @click="openImportEntity()" data-toggle="tooltip" data-original-title="从数据库导入实体" href="#!"><i class="mdi mdi-format-vertical-align-bottom"></i>导入</a>
 | ||
|  |                     <a class="btn btn-warning m-r-10" @click="openCompareDatabaseStructure()" data-toggle="tooltip" data-original-title="根据实体修改表结构" href="#!"><i class="mdi mdi-redo-variant"></i>同步</a>
 | ||
|  |                     <a class="btn btn-pink m-r-10" @click="openSqlTool()" data-toggle="tooltip" data-original-title="可以方便执行SQL,让你不需要打开数据库" href="#!"><i class="mdi mdi-database"></i>SQL</a>
 | ||
|  |                     <a class="btn btn-danger m-r-10" @click="exportExcel()" data-toggle="tooltip" data-original-title="导出表文档" href="#!"><i class="mdi mdi-file-export"></i> 导出文档</a>
 | ||
|  |                     <a class="btn btn-purple m-r-10" @click="openGenerateCode()" data-toggle="tooltip" data-original-title="根据实体生成文件" href="#!"><i class="mdi mdi-language-csharp"></i>实体生成器</a>
 | ||
|  |                     <a class="btn btn-primary m-r-10" @click="openGenerateCodeByView()" data-toggle="tooltip" data-original-title="根据视图生成文件" href="#!"><i class="mdi mdi-language-csharp"></i>视图生成器</a>
 | ||
|  |                     <a class="btn btn-cyan m-r-10" @click="openSetting()" data-toggle="tooltip" data-original-title="实体管理个性化配置" href="#!"><i class="mdi mdi-account-settings-variant"></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>
 | ||
|  |                                     <template v-for="(column,thIndex) in data.Columns" v-if="column.PropertyName !== 'Id'">
 | ||
|  |                                         <th>
 | ||
|  |                                             {{ column.ColumnDescription }}
 | ||
|  |                                             <span :class="sortClass">
 | ||
|  |                                                 <span v-if="thIndex == 1" class="caret-wrapper">
 | ||
|  |                                                     <i @click="sortAsc" class="sort-caret ascending mdi mdi-chevron-up"></i>
 | ||
|  |                                                     <i @click="sortDesc" class="sort-caret descending mdi mdi-chevron-down"></i>
 | ||
|  |                                                 </span>
 | ||
|  |                                             </span>
 | ||
|  |                                         </th>
 | ||
|  |                                     </template>
 | ||
|  |                                     <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>
 | ||
|  |                                     <template v-for="column in data.Columns" v-if="column.PropertyName !== 'Id'">
 | ||
|  |                                         <td>
 | ||
|  |                                             {{ item[column.PropertyName] }}
 | ||
|  |                                         </td>
 | ||
|  |                                     </template>
 | ||
|  |                                     <td class="table_opt2">
 | ||
|  |                                         <button data-toggle="modal" @click="openColumns(item)" class="btn btn-link" type="button">
 | ||
|  |                                             <i class="mdi mdi-lead-pencil"></i> 配列
 | ||
|  |                                         </button>
 | ||
|  |                                         <button data-toggle="modal" @click="openEditDiv(item)" data-target="#gridSystemModal" class="btn btn-link" type="button">
 | ||
|  |                                             <i class="mdi mdi-lead-pencil"></i> 修改
 | ||
|  |                                         </button>
 | ||
|  |                                         <button data-toggle="modal" @click="deleteAndConfirm(item)" data-target="#divDelBox" class="btn btn-link" type="button">
 | ||
|  |                                             <i class="mdi mdi-do-not-disturb"></i> 删除
 | ||
|  |                                         </button>
 | ||
|  |                                     </td>
 | ||
|  |                                 </tr>
 | ||
|  | 
 | ||
|  |                             </tbody>
 | ||
|  |                         </table>
 | ||
|  |                     </div>
 | ||
|  |                 </div>
 | ||
|  |                 @@page_control.html
 | ||
|  |             </div>
 | ||
|  |         </div>
 | ||
|  |     </div>
 | ||
|  |     <!--插入或者新增-->
 | ||
|  |     <div class="modal fade" tabindex="-1" role="dialog" aria-labelledby="gridSystemModalLabel" id="gridSystemModal" style="display: none;">
 | ||
|  |         <div class="modal-dialog" role="document">
 | ||
|  |             <div class="modal-content">
 | ||
|  |                 <div class="modal-header">
 | ||
|  |                     <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">×</span></button>
 | ||
|  |                     <h4 class="modal-title" id="exampleModalLabel">{{title}}</h4>
 | ||
|  |                 </div>
 | ||
|  |                 <div class="modal-body">
 | ||
|  |                     <form id="frmEdit">
 | ||
|  |                         <input type="hidden" v-model="formData.Id" name="Id" />
 | ||
|  |                         <div class="form-group">
 | ||
|  |                             <label class="control-label">实体名:</label>
 | ||
|  |                             <input type="text" placeholder="类的名字" @input="classNameInput" @change="classNameInput" v-model="formData.ClassName" name="ClassName" class="form-control">
 | ||
|  |                         </div>
 | ||
|  |                         <div class="form-group">
 | ||
|  |                             <label for="message-text" class="control-label">表名:</label>
 | ||
|  |                             <input type="text" placeholder="数据库中表的名称" v-model="formData.DbTableName" name="DbTableName" class="form-control">
 | ||
|  |                         </div>
 | ||
|  |                         <div class="form-group">
 | ||
|  |                             <label for="message-text" class="control-label">数据库:</label>
 | ||
|  |                             <select readonly v-model="formData.DataBaseId" name="DataBaseId" class="form-control">
 | ||
|  |                                 <option v-for="item in  database" v-bind:value="item.Id"> {{item.Name}} </option>
 | ||
|  |                             </select>
 | ||
|  |                         </div>
 | ||
|  |                         <div class="form-group">
 | ||
|  |                             <label for="message-text" class="control-label">表备注:</label>
 | ||
|  |                             <textarea placeholder="数据库中表的备注" class="form-control" v-model="formData.Description" name="Description" id="message-text"></textarea>
 | ||
|  |                         </div>
 | ||
|  |                     </form>
 | ||
|  |                 </div>
 | ||
|  |                 <div class="modal-footer">
 | ||
|  |                     <button type="button" id="btnCloseEdit" class="btn btn-default" data-dismiss="modal">关闭</button>
 | ||
|  |                     <button type="button" @click="addOrUpdate()" class="btn btn-primary">保存</button>
 | ||
|  |                 </div>
 | ||
|  |             </div>
 | ||
|  |         </div>
 | ||
|  |     </div>
 | ||
|  |     <!--表结构对比-->
 | ||
|  |     <div id="divCompareDatabaseStructure" class="modal fade bs-example-modal-lg" tabindex="-1" role="dialog" aria-labelledby="myLargeModalLabel" style="display: none;">
 | ||
|  |         <button id="btnCompareDatabaseStructure" type="button" class="btn btn-primary hidden" data-toggle="modal" data-target="#divCompareDatabaseStructure"></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="myLargeModalLabel">同步表结构</h4>
 | ||
|  |                 </div>
 | ||
|  |                 <div class="modal-body" v-html="columnsCompareResult">
 | ||
|  | 
 | ||
|  |                 </div>
 | ||
|  |                 <div class="modal-footer">
 | ||
|  |                     <button type="button" class="btn btn-default" data-dismiss="modal">关闭</button>
 | ||
|  |                     <button type="button" @click="createTables()" class="btn btn-primary">同步表结构</button>
 | ||
|  |                 </div>
 | ||
|  |             </div>
 | ||
|  |         </div>
 | ||
|  |     </div>
 | ||
|  |     <!--编辑列-->
 | ||
|  |     <div id="divEditColumns" class="modal fade bs-example-modal-lg" tabindex="-1" role="dialog" aria-labelledby="myLargeModalLabel" style="display: none;">
 | ||
|  |         <button id="btnEditColumns" type="button" class="btn btn-primary hidden" data-toggle="modal" data-target="#divEditColumns"></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">{{editTable}} </h4>
 | ||
|  |                 </div>
 | ||
|  | 
 | ||
|  |                 <div class="modal-body">
 | ||
|  |                     <div class="table-container">
 | ||
|  |                         <table class="table">
 | ||
|  |                             <thead>
 | ||
|  |                                 <tr>
 | ||
|  |                                     <th>实体属性</th>
 | ||
|  |                                     <th>列名</th>
 | ||
|  |                                     <th width="200">C#类型</th>
 | ||
|  |                                     <th>备注</th>
 | ||
|  |                                     <th width="50">可空</th>
 | ||
|  |                                     <th width="50">主键</th>
 | ||
|  |                                     <th width="50">自增</th>
 | ||
|  |                                     <th width="250">
 | ||
|  |                                         <a class="btn  btn-secondary m-r-5" @click="openCopy" href="#!"><i class="mdi mdi-content-copy"></i> 复制列</a>
 | ||
|  |                                         <a class="btn  btn-secondary m-r-5" href="#!" onclick="alert('开发中')"><i class="mdi mdi-lead-pencil"></i> 配置索引</a>
 | ||
|  |                                     </th>
 | ||
|  |                                 </tr>
 | ||
|  |                             </thead>
 | ||
|  |                             <tbody>
 | ||
|  |                                 <tr v-for="(item,index) in columns" :key="index">
 | ||
|  |                                     <td scope="row">
 | ||
|  |                                         <input v-model="item.Id" type="hidden" />
 | ||
|  |                                         <input v-model="item.PropertyName" class="form-control" placeholder="必填" type="text" />
 | ||
|  |                                     </td>
 | ||
|  |                                     <td><input v-model="item.DbColumnName" class="form-control" placeholder="可空:默认取属性名" type="text" /></td>
 | ||
|  |                                     <td>
 | ||
|  |                                         <div class="row">
 | ||
|  |                                             <div class="col-md-6">
 | ||
|  |                                                 <select v-model="item.PropertyType" class="form-control width100">
 | ||
|  |                                                     <option v-for="item in  nativeTypes" :value="item.Value"> {{item.Name}} </option>
 | ||
|  |                                                 </select>
 | ||
|  |                                             </div>
 | ||
|  |                                             <div class="col-md-6">
 | ||
|  |                                                 <a class="btn btn-link" @click="openEditNativeType(item)">配置<span v-if="item.DataType"> <i class="mdi mdi-lead-pencil"></i> </span></a>
 | ||
|  |                                             </div>
 | ||
|  |                                         </div>
 | ||
|  |                                     </td>
 | ||
|  |                                     <td><input v-model="item.Description" class="form-control" placeholder="" type="text" /></td>
 | ||
|  |                                     <td><input v-model="item.IsNullable" type="checkbox" class="form-control" /></td>
 | ||
|  |                                     <td><input v-model="item.IsPrimarykey" type="checkbox" class="form-control" /></td>
 | ||
|  |                                     <td><input v-model="item.IsIdentity" type="checkbox" class="form-control" /></td>
 | ||
|  |                                     <td>
 | ||
|  |                                         <span @click="pushColumns(item)" class="pointer m-r-10"><i class="mdi mdi-plus"></i>添加</span>
 | ||
|  |                                         <span @click="removeColumns(index)" class="pointer"><i class="mdi  mdi-window-close"></i>删除</span>
 | ||
|  |                                         <span @click="move(index,true)" class="pointer"><i class="mdi  mdi-arrow-up"></i>上移</span>
 | ||
|  |                                         <span @click="move(index,false)" class="pointer"><i class="mdi mdi-arrow-down"></i>下移</span>
 | ||
|  |                                     </td>
 | ||
|  |                                 </tr>
 | ||
|  |                             </tbody>
 | ||
|  |                         </table>
 | ||
|  |                     </div>
 | ||
|  |                 </div>
 | ||
|  |                 <div class="modal-footer">
 | ||
|  |                     <button type="button" class="btn btn-default" data-dismiss="modal">关闭</button>
 | ||
|  |                     <button type="button" @click="addOrUpdateColumnInfoSubmit()" class="btn btn-primary">点击保存</button>
 | ||
|  |                 </div>
 | ||
|  |             </div>
 | ||
|  |         </div>
 | ||
|  |     </div>
 | ||
|  |     <!--复制列-->
 | ||
|  |     <div id="divCopy" class="modal fade bs-example-modal-sm inC" tabindex="-1" role="dialog" aria-labelledby="myLargeModalLabel" style="display: none;">
 | ||
|  |         <button id="btnCopy" type="button" class="btn btn-primary hidden" data-toggle="modal" data-target="#divCopy"></button>
 | ||
|  |         <div class="modal-dialog modal-sm  border3CCC width500" 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="form-group">
 | ||
|  |                         <div class="alert alert-success">技巧: 建一个只有 创建时间、创建人 这样的表 作为模版表</div>
 | ||
|  |                     </div>
 | ||
|  |                     <div class="form-group">
 | ||
|  |                         <label for="message-text" class="control-label">表名:</label>
 | ||
|  |                         <input v-model="tableName" @change="changeTable" class="form-control" list="browsers" name="joinTable">
 | ||
|  |                         <datalist id="browsers">
 | ||
|  |                             <option v-if="allTables&&allTables.length>0" v-for="item in allTables" :value="item.Name">{{item.Name}}</option>
 | ||
|  |                         </datalist>
 | ||
|  |                         <button class="btn btn-xs btn-primary removedatalist" @click="clearTable"><i class="mdi mdi-do-not-disturb"></i>删除选定项</button>
 | ||
|  |                     </div>
 | ||
|  |                 </div>
 | ||
|  |                 <div class="modal-footer">
 | ||
|  |                     <button type="button" id="btnCloseCopy" class="btn btn-default" data-dismiss="modal">关闭</button>
 | ||
|  |                     <button type="button" @click="submitCopy" 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" 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="table-container2">
 | ||
|  |                         <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>
 | ||
|  |                                     <th>描述</th>
 | ||
|  |                                 </tr>
 | ||
|  |                             </thead>
 | ||
|  |                             <tbody v-if="tables">
 | ||
|  |                                 <tr v-for="(item,index) in tables">
 | ||
|  |                                     <td>
 | ||
|  |                                         <input type="checkbox" name="ids[]" v-model="selectedTables" :alt="item.Name" :value="item.Name">
 | ||
|  |                                     </td>
 | ||
|  |                                     <td>{{index+1}}</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>
 | ||
|  |     <!--SQL工具-->
 | ||
|  |     <div id="divDatabaseTool" class="modal fade bs-example-modal-lg" tabindex="-1" role="dialog" aria-labelledby="myLargeModalLabel" style="display: none;">
 | ||
|  |         <button id="btnDatabaseTool" type="button" class="btn btn-primary hidden" data-toggle="modal" data-target="#divDatabaseTool"></button>
 | ||
|  |         <div class="modal-dialog  width_r_80 " 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">简化版SQL工具</h4>
 | ||
|  |                 </div>
 | ||
|  |                 <div class="modal-body">
 | ||
|  |                     <div id="divAceEditor" style="width: 100%; height: calc(50vh - 150px) "> </div>
 | ||
|  |                     <button @click="executeSql" class="btn btn-danger m-10 m-b-0"><i class="mdi mdi-play-circle-outline"></i>运行</button>
 | ||
|  |                     <button @click="executeSqlRegurnExcel" class="btn btn-success m-10 m-b-0"><i class="mdi mdi-file-excel"></i>下载</button>
 | ||
|  |                     <button @click="clearSql" class="btn btn-cyan m-10 m-b-0"><i class="mdi-restart mdi"></i>清空</button>
 | ||
|  |                     <div id="divAceEditorResult" style="width: 100%; height: calc(50vh - 150px)"> </div>
 | ||
|  |                 </div>
 | ||
|  |                 <div class="modal-footer">
 | ||
|  |                     <button type="button" id="btnDatabaseTooClose" class="btn btn-default" data-dismiss="modal">关闭</button>
 | ||
|  |                 </div>
 | ||
|  |             </div>
 | ||
|  |         </div>
 | ||
|  |     </div>
 | ||
|  |     <!--通用配置-->
 | ||
|  |     <div id="divSetting" class="modal fade bs-example-modal-lg" tabindex="-1" role="dialog" aria-labelledby="myLargeModalLabel" style="display: none;">
 | ||
|  |         <button id="btnSetting" type="button" class="btn btn-primary hidden" data-toggle="modal" data-target="#divSetting"></button>
 | ||
|  |         <div class="modal-dialog  width300 " 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="example-box">
 | ||
|  |                         <label class="lyear-checkbox">
 | ||
|  |                             <input type="checkbox" v-model="setting.importUnunderline" value="true">
 | ||
|  |                             <span class="p-l-15">导入实体去掉下划线</span>
 | ||
|  |                         </label>
 | ||
|  |                     </div>
 | ||
|  |                 </div>
 | ||
|  |                 <div class="modal-footer">
 | ||
|  |                     <button type="button" id="btnSettingClose" class="btn btn-default" data-dismiss="modal">关闭</button>
 | ||
|  |                     <button type="button" @click="saveSetting()" class="btn btn-primary">保存</button>
 | ||
|  |                 </div>
 | ||
|  |             </div>
 | ||
|  |         </div>
 | ||
|  |     </div>
 | ||
|  |     <!--代码生成-->
 | ||
|  |     <div id="divGenerateFile" class="modal fade bs-example-modal-lg" tabindex="-1" role="dialog" aria-labelledby="myLargeModalLabel" style="display: none;">
 | ||
|  |         <button id="btnGenerateFile" type="button" class="btn btn-primary hidden" data-toggle="modal" data-target="#divGenerateFile"></button>
 | ||
|  |         <div class="modal-dialog  width300 " 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="example-box">
 | ||
|  |                         <div class=" form-group">
 | ||
|  |                             <label class="control-label">
 | ||
|  |                                 模版
 | ||
|  |                             </label>
 | ||
|  |                             <select v-model="currentTemplateId" @change="changeTemplate" class="form-control">
 | ||
|  |                                 <option v-for="item in templates" :value="item.Id">
 | ||
|  |                                     {{item.Title}}
 | ||
|  |                                 </option>
 | ||
|  |                             </select>
 | ||
|  |                         </div>
 | ||
|  |                         <div class=" form-group" v-if="isView">
 | ||
|  |                             <label class="control-label">
 | ||
|  |                                 视图名 <span class="red">*</span>
 | ||
|  |                             </label>
 | ||
|  |                             <input v-model="viewName" class="form-control" placeholder="视图名字" value="" />
 | ||
|  |                         </div>
 | ||
|  |                         <div class=" form-group">
 | ||
|  |                             <label class="control-label">
 | ||
|  |                                 生成地址
 | ||
|  |                             </label>
 | ||
|  |                             <div><code>地址说明:修改模版可以修改这个地址</code> <a class="red" :href="tempUrl">[进入模版管理]</a></div>
 | ||
|  |                             <div><code>符号说明:{0}是ClassName, {1}表示TableName,{project}表示项目的sln文件目录</code></div>
 | ||
|  |                             <input class="form-control" v-model="currentTemplate.Url" />
 | ||
|  |                         </div>
 | ||
|  |                     </div>
 | ||
|  |                 </div>
 | ||
|  |                 <div class="modal-footer">
 | ||
|  |                     <button type="button" id="btnGenerateFileClose" class="btn btn-default" data-dismiss="modal"><i class="mdi mdi-close"></i>关闭</button>
 | ||
|  |                     <button type="button" @click="previewEntity()" class="btn btn-primary"> <i class="mdi mdi-eye"></i>预览实体</button>
 | ||
|  |                     <button type="button" @click="submitGenerateFile()" class="btn btn-primary"><i class="mdi mdi-file"></i>生成文件</button>
 | ||
|  |                 </div>
 | ||
|  |             </div>
 | ||
|  |         </div>
 | ||
|  |     </div>
 | ||
|  |     <!--修改原生类型-->
 | ||
|  |     <div id="divEditNativeType" class="modal fade bs-example-modal-lg" tabindex="-1" role="dialog" aria-labelledby="myLargeModalLabel" style="display: none;">
 | ||
|  |         <button id="btnEditNativeType" type="button" class="btn btn-primary hidden" data-toggle="modal" data-target="#divEditNativeType"></button>
 | ||
|  |         <div class="modal-dialog border3CCC  width300 " 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="example-box">
 | ||
|  |                         <div class="form-group">
 | ||
|  |                             <label class="control-label">类型</label>
 | ||
|  |                             <div><code>注意:这儿有配置不支持多库,一般用于单库或者导入</code></div>
 | ||
|  |                             <input v-model="currentColumn.DataType" class="form-control" />
 | ||
|  |                         </div>
 | ||
|  |                         <div class="form-group">
 | ||
|  |                             <label class="control-label">长度</label>
 | ||
|  |                             <input v-model="currentColumn.Length" class="form-control" />
 | ||
|  |                         </div>
 | ||
|  |                         <div class="form-group">
 | ||
|  |                             <label class="control-label">精度</label>
 | ||
|  |                             <input v-model="currentColumn.DecimalDigits" class="form-control" />
 | ||
|  |                         </div>
 | ||
|  |                     </div>
 | ||
|  |                 </div>
 | ||
|  |             </div>
 | ||
|  |         </div>
 | ||
|  |     </div>
 | ||
|  |     <!--预览实体-->
 | ||
|  |     <div id="divPreviewEntity" class="modal fade bs-example-modal-lg" tabindex="-11" role="dialog" aria-labelledby="myLargeModalLabel" style="display: none;">
 | ||
|  |         <button id="btnPreviewEntity" type="button" class="btn btn-primary hidden" data-toggle="modal" data-target="#divPreviewEntity"></button>
 | ||
|  |         <div class="modal-dialog  width_r_80 " 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 ">
 | ||
|  |                     <code>双击可以全选,预览只显示一个实体</code>
 | ||
|  |                     <pre @dblclick="selectText" id="preReviewClass" style="height:380px !important" >{{reviewClass}}</pre>
 | ||
|  |                 </div>
 | ||
|  |                 <div class="modal-footer">
 | ||
|  |                     <button type="button" id="btnClosePreviewEntity" class="btn btn-default" data-dismiss="modal">关闭</button>
 | ||
|  |                 </div>
 | ||
|  |             </div>
 | ||
|  |         </div>
 | ||
|  |     </div>
 | ||
|  | </div>
 | ||
|  | <script>
 | ||
|  |     var vueObj = new Vue({
 | ||
|  |         el: '#apibox',
 | ||
|  |         data: {
 | ||
|  |             databaseId: 0,
 | ||
|  |             data: null,
 | ||
|  |             error: null,
 | ||
|  |             addTitle: "添加实体",
 | ||
|  |             editTitle: "修改实体",
 | ||
|  |             title: "",
 | ||
|  |             sort: 0,
 | ||
|  |             sortName: null,
 | ||
|  |             sortClass: "",
 | ||
|  |             editTable: "",
 | ||
|  |             formData: {},
 | ||
|  |             database: [],
 | ||
|  |             nativeTypes: [],
 | ||
|  |             selectedItems: [],
 | ||
|  |             selectedTables: [],
 | ||
|  |             columns: [{}],
 | ||
|  |             currentColumn: {},
 | ||
|  |             columnsCompareResult: null,
 | ||
|  |             tables: [],
 | ||
|  |             allTables: [],
 | ||
|  |             tableName: null,
 | ||
|  |             editTableId: 0,
 | ||
|  |             setting: {
 | ||
|  |                 importUnunderline: false
 | ||
|  |             },
 | ||
|  |             templates: [],
 | ||
|  |             currentTemplate: {},
 | ||
|  |             currentTemplateId: 0,
 | ||
|  |             isView: false,
 | ||
|  |             viewName: null,
 | ||
|  |             tempUrl: "/rezero/template.html",
 | ||
|  |             reviewClass:null
 | ||
|  |         },
 | ||
|  |         mounted() {
 | ||
|  |             this.bindDatabaseSelect();
 | ||
|  |             this.bindNativeTypeSelect();
 | ||
|  |             this.bindTemplates();
 | ||
|  |             this.bindTempUrl();
 | ||
|  |         },
 | ||
|  |         methods: {
 | ||
|  |             fetchData(append) {
 | ||
|  |                 var url = "/PrivateReZeroRoute/100003/GetEntityInoList?random=1" + append;
 | ||
|  |                 axios.get(url, jwHeader)
 | ||
|  |                     .then(response => {
 | ||
|  |                         this.data = response.data;
 | ||
|  |                         this.error = null;
 | ||
|  |                     })
 | ||
|  |                     .catch(error => {
 | ||
|  |                         this.error = error.message;
 | ||
|  |                         this.data = null;
 | ||
|  |                     });
 | ||
|  |             },
 | ||
|  |             bindTempUrl: function () {
 | ||
|  |                 var urlParams = new URLSearchParams(window.location.search);
 | ||
|  |                 var model = urlParams.get('model');
 | ||
|  |                 var token = urlParams.get('token');
 | ||
|  |                 if (model) {
 | ||
|  |                     this.tempUrl += `?model=${model}`;
 | ||
|  |                 }
 | ||
|  |                 if (token) {
 | ||
|  |                     this.tempUrl += model ? `&token=${token}` : `?token=${token}`;
 | ||
|  |                 }
 | ||
|  |             },
 | ||
|  |             onSearch: function (page) {
 | ||
|  | 
 | ||
|  |                 var urlParameters = "&" + tools.objectToQueryString({
 | ||
|  |                     ClassName: txtSearch.value,
 | ||
|  |                     __pageNumber: page, 
 | ||
|  |                    __pageSize: tools.getValue("selPageSize"),
 | ||
|  |                     DataBaseId: selDataBaseId.value,
 | ||
|  |                     OrderByType: this.sort,
 | ||
|  |                     OrderByName: this.sortName
 | ||
|  |                 });
 | ||
|  |                 this.fetchData(urlParameters);
 | ||
|  |             },
 | ||
|  |             deleteAndConfirm: function (item) {
 | ||
|  |                 if (item == null) {
 | ||
|  |                     var url = "/PrivateReZeroRoute/100003/DeleteEntityInfo?IsDeleted=true&Id=" + localStorage.delId;
 | ||
|  |                     axios.get(url, jwHeader)
 | ||
|  |                         .then(response => {
 | ||
|  |                             if (response.data.message) {
 | ||
|  |                                 tools.alert(response.data.message);
 | ||
|  |                             }
 | ||
|  |                             this.error = null;
 | ||
|  |                             this.onSearch();
 | ||
|  |                             btnDelClose.click();
 | ||
|  |                         })
 | ||
|  |                         .catch(error => {
 | ||
|  |                             this.error = error.message;
 | ||
|  |                             this.data = null;
 | ||
|  |                         });
 | ||
|  |                 } else {
 | ||
|  |                     localStorage.delId = item.Id;
 | ||
|  |                 }
 | ||
|  |             },
 | ||
|  |             openEditDiv: function (item) {
 | ||
|  |                 var urlById = "/PrivateReZeroRoute/100003/GetEntityInfoById?id=" + item.Id;
 | ||
|  |                 if (item.Id) {
 | ||
|  |                     this.title = this.editTitle;
 | ||
|  |                     axios.get(urlById, jwHeader)
 | ||
|  |                         .then(response => {
 | ||
|  |                             this.formData = response.data;
 | ||
|  |                         })
 | ||
|  |                         .catch(error => {
 | ||
|  |                             this.error = error.message;
 | ||
|  |                             this.data = null;
 | ||
|  |                         });
 | ||
|  |                 }
 | ||
|  |             },
 | ||
|  |             openAddDiv: function (item) {
 | ||
|  |                 this.title = this.addTitle;
 | ||
|  |                 this.formData = { DataBaseId: this.databaseId };
 | ||
|  |             },
 | ||
|  |             addOrUpdate: function () {
 | ||
|  |                 var th = this;
 | ||
|  |                 var frmId = "frmEdit";
 | ||
|  |                 var json = this.formData;
 | ||
|  |                 var url = json.Id ?
 | ||
|  |                     "/PrivateReZeroRoute/100003/UpdateEntityInfo" :
 | ||
|  |                     "/PrivateReZeroRoute/100003/AddEntityInfo";
 | ||
|  |                 this.addOrUpdateSubmit(url, json);
 | ||
|  |             },
 | ||
|  |             addOrUpdateSubmit: function (url, json) {
 | ||
|  |                 var th = this;
 | ||
|  |                 axios.post(url, json, jwHeader)
 | ||
|  |                     .then(response => {
 | ||
|  |                         this.error = null;
 | ||
|  |                         this.onSearch();
 | ||
|  |                         if (response.data == true) {
 | ||
|  |                             frmEdit.reset();
 | ||
|  |                             btnCloseEdit.click();
 | ||
|  |                         }
 | ||
|  |                         else {
 | ||
|  |                             tools.highlightErrorFields(response.data)
 | ||
|  |                         }
 | ||
|  |                     })
 | ||
|  |                     .catch(error => {
 | ||
|  |                         this.error = error.message;
 | ||
|  |                         this.data = null;
 | ||
|  |                     });
 | ||
|  |             },
 | ||
|  |             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;
 | ||
|  |                     });
 | ||
|  |             },
 | ||
|  |             bindNativeTypeSelect: function () {
 | ||
|  |                 axios.get("/PrivateReZeroRoute/100004/GetNativeTypeList", jwHeader)
 | ||
|  |                     .then(response => {
 | ||
|  |                         this.nativeTypes = response.data;
 | ||
|  |                     })
 | ||
|  |                     .catch(error => {
 | ||
|  |                         this.error = error.message;
 | ||
|  |                         this.data = null;
 | ||
|  |                     });
 | ||
|  |             },
 | ||
|  |             openColumns: function (item) {
 | ||
|  |                 btnEditColumns.click();
 | ||
|  |                 this.editTableId = item.Id;
 | ||
|  |                 this.editTable = item.ClassName + " -  " + item.DataBaseName;
 | ||
|  |                 var url = "/PrivateReZeroRoute/100003/GetEntityColuminsByEntityId?TableId=" + item.Id;
 | ||
|  |                 axios.get(url, jwHeader)
 | ||
|  |                     .then(response => {
 | ||
|  |                         this.columns = response.data;
 | ||
|  |                         if (this.columns.length == 0) {
 | ||
|  |                             this.columns.push({ TableId: item.Id });
 | ||
|  |                         }
 | ||
|  |                     })
 | ||
|  |                     .catch(error => {
 | ||
|  |                         this.error = error.message;
 | ||
|  |                     });
 | ||
|  |             },
 | ||
|  |             openEditNativeType: function (item) { 
 | ||
|  |                 this.currentColumn = item;
 | ||
|  |                 btnEditNativeType.click();
 | ||
|  |             },  
 | ||
|  |             removeColumns: function (index) {
 | ||
|  |                 this.columns.splice(index, 1);
 | ||
|  |             },
 | ||
|  |             addOrUpdateColumnInfoSubmit: function () {
 | ||
|  |                 var url = "/PrivateReZeroRoute/100003/SaveEntityColumnInfos"
 | ||
|  |                 var th = this;
 | ||
|  |                 axios.post(url, { Columns: this.columns }, jwHeader)
 | ||
|  |                     .then(response => {
 | ||
|  |                         this.error = null;
 | ||
|  |                         if (response.data == true) {
 | ||
|  |                             tools.alert("保存成功");
 | ||
|  |                             th.onSearch(1);
 | ||
|  |                         }
 | ||
|  |                         else {
 | ||
|  |                             tools.alert(response.data);
 | ||
|  |                         }
 | ||
|  |                     })
 | ||
|  |                     .catch(error => {
 | ||
|  |                         this.error = error.message;
 | ||
|  |                     });
 | ||
|  |             },
 | ||
|  |             pushColumns: function (item) {
 | ||
|  |                 this.columns.push({ TableId: item.TableId, IsNullable: true });
 | ||
|  |             },
 | ||
|  |             openCompareDatabaseStructure: function () {
 | ||
|  |                 if (!this.selectedItems || this.selectedItems.length == 0) {
 | ||
|  |                     tools.alert("请选择实体");
 | ||
|  |                     return;
 | ||
|  |                 }
 | ||
|  |                 btnCompareDatabaseStructure.click();
 | ||
|  |                 var url = " /PrivateReZeroRoute/100003/CompareDatabaseStructure";
 | ||
|  |                 axios.post(url, { ids: this.selectedItems }, jwHeader)
 | ||
|  |                     .then(response => {
 | ||
|  |                         this.columnsCompareResult = response.data;
 | ||
|  |                         this.error = null;
 | ||
|  |                     })
 | ||
|  |                     .catch(error => {
 | ||
|  |                         this.error = error.message;
 | ||
|  |                         this.data = null;
 | ||
|  |                     });
 | ||
|  |             },
 | ||
|  |             // 其他方法...
 | ||
|  |             previewEntity: function () {
 | ||
|  |                 //if (!this.selectedItems || this.selectedItems.length == 0) {
 | ||
|  |                 //    tools.alert("请选择实体");
 | ||
|  |                 //    return;
 | ||
|  |                 //}
 | ||
|  |                 if (this.isView && !this.viewName)
 | ||
|  |                 {
 | ||
|  |                     tools.alert("请填写视图名");
 | ||
|  |                     return;
 | ||
|  |                 }
 | ||
|  |                 var tableId = this.selectedItems[0];
 | ||
|  |                 var url = `/PrivateReZeroRoute/100003/ViewTemplate?databaseId=${this.databaseId}&viewName=${this.isView ? this.viewName : tableId}&templateId=${this.currentTemplateId}&isView=${this.isView}`;
 | ||
|  |                 axios.get(url, jwHeader)
 | ||
|  |                     .then(response => {
 | ||
|  |                         btnGenerateFileClose.click();
 | ||
|  |                         btnPreviewEntity.click();
 | ||
|  |                         this.reviewClass=response.data; 
 | ||
|  |                     })
 | ||
|  |                     .catch(error => {
 | ||
|  |                         this.error = error.message;
 | ||
|  |                     });
 | ||
|  |             },
 | ||
|  |             selectText(event) {
 | ||
|  |                 // 方法1:使用现代浏览器的 Selection API
 | ||
|  |                 const range = document.createRange();
 | ||
|  |                 range.selectNodeContents(event.target);
 | ||
|  |                 const selection = window.getSelection();
 | ||
|  |                 selection.removeAllRanges();
 | ||
|  |                 selection.addRange(range);
 | ||
|  |             },
 | ||
|  |             createTables: function () {
 | ||
|  |                 var url = "/PrivateReZeroRoute/100003/CreateTables";
 | ||
|  |                 this.columnsCompareResult = "同步中....";
 | ||
|  |                 axios.post(url, { ids: this.selectedItems }, jwHeader)
 | ||
|  |                     .then(response => {
 | ||
|  |                         this.columnsCompareResult = response.data == true ? "同步成功" : response.data.message;
 | ||
|  |                         this.error = null;
 | ||
|  |                     })
 | ||
|  |                     .catch(error => {
 | ||
|  |                         this.error = error.message;
 | ||
|  |                         this.data = null;
 | ||
|  |                     });
 | ||
|  |             },
 | ||
|  |             openImportEntity: function () {
 | ||
|  |                 btnImportEntity.click();
 | ||
|  |                 this.bindImportTables();
 | ||
|  |             },
 | ||
|  |             importEntitySubmit: function () {
 | ||
|  |                 var url = " /PrivateReZeroRoute/100003/ImportEntities";
 | ||
|  |                 var th = this;
 | ||
|  |                 axios.post(url, { databasdeId: this.databaseId, tableNames: this.selectedTables }, jwHeader)
 | ||
|  |                     .then(response => {
 | ||
|  |                         this.error = null;
 | ||
|  |                         if (response.data == true) {
 | ||
|  |                             btnImportEntityClose.click();
 | ||
|  |                             th.onSearch(1);
 | ||
|  |                             th.selectedTables = [];
 | ||
|  |                             document.getElementById('check-all2').checked = false;
 | ||
|  |                             tools.alert("导入成功,删除实体可以重新导入。");
 | ||
|  |                         }
 | ||
|  |                         else {
 | ||
|  |                             tools.alert(response.data.message);
 | ||
|  |                         }
 | ||
|  |                     })
 | ||
|  |                     .catch(error => {
 | ||
|  |                         this.error = error.message;
 | ||
|  |                     });
 | ||
|  |             },
 | ||
|  |             changeDatabase: function () {
 | ||
|  |                 this.onSearch();
 | ||
|  |             },
 | ||
|  |             bindImportTables: function () {
 | ||
|  |                 var url = "/PrivateReZeroRoute/100004/GetImportTables?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;
 | ||
|  |                     });
 | ||
|  |             },
 | ||
|  |             bindAllTables: function () {
 | ||
|  |                 var url = "/PrivateReZeroRoute/100004/GetAllTables?databaseId=" + this.databaseId;
 | ||
|  |                 axios.get(url, jwHeader)
 | ||
|  |                     .then(response => {
 | ||
|  |                         this.allTables = response.data;
 | ||
|  |                         this.error = null;
 | ||
|  |                     })
 | ||
|  |                     .catch(error => {
 | ||
|  |                         this.error = error.message;
 | ||
|  |                     });
 | ||
|  |             },
 | ||
|  |             selectAll(event) {
 | ||
|  |                 if (event.target.checked) {
 | ||
|  |                     // 全选
 | ||
|  |                     this.selectedItems = this.data.Data.map(item => item.Id);
 | ||
|  |                 } else {
 | ||
|  |                     // 全不选
 | ||
|  |                     this.selectedItems = [];
 | ||
|  |                 }
 | ||
|  |             },
 | ||
|  |             selectAllTables(event) {
 | ||
|  |                 if (event.target.checked) {
 | ||
|  |                     // 全选
 | ||
|  |                     this.selectedTables = this.tables.map(item => item.Name);
 | ||
|  |                 } else {
 | ||
|  |                     // 全不选
 | ||
|  |                     this.selectedTables = [];
 | ||
|  |                 }
 | ||
|  |             },
 | ||
|  |             classNameInput: function () {
 | ||
|  |                 this.formData.DbTableName = this.formData.ClassName;
 | ||
|  |             },
 | ||
|  |             move: function (index, tyep) {
 | ||
|  |                 if (tyep) {
 | ||
|  |                     if (index == 0) {
 | ||
|  |                         return;
 | ||
|  |                     }
 | ||
|  |                     var temp = this.columns[index];
 | ||
|  |                     this.columns.splice(index, 1);
 | ||
|  |                     this.columns.splice(index - 1, 0, temp);
 | ||
|  |                 }
 | ||
|  |                 else {
 | ||
|  |                     if (index == this.columns.length - 1) {
 | ||
|  |                         return;
 | ||
|  |                     }
 | ||
|  |                     var temp = this.columns[index];
 | ||
|  |                     this.columns.splice(index, 1);
 | ||
|  |                     this.columns.splice(index + 1, 0, temp);
 | ||
|  |                 }
 | ||
|  |             },
 | ||
|  |             sortAsc: function () {
 | ||
|  |                 this.sort = 0;
 | ||
|  |                 this.sortName = "ClassName";
 | ||
|  |                 this.sortClass = "sort-asc";
 | ||
|  |                 this.onSearch(1);
 | ||
|  |             },
 | ||
|  |             sortDesc: function () {
 | ||
|  |                 this.sort = 1;
 | ||
|  |                 this.sortName = "ClassName";
 | ||
|  |                 this.sortClass = "sort-desc";
 | ||
|  |                 this.onSearch(1);
 | ||
|  |             },
 | ||
|  |             openCopy: function () {
 | ||
|  |                 this.bindAllTables();
 | ||
|  |                 btnCopy.click();
 | ||
|  |             },
 | ||
|  |             submitCopy: function () {
 | ||
|  |                 var tableName = this.tableName;
 | ||
|  |                 var table = this.allTables.find(table => table.Name === tableName);
 | ||
|  |                 var tableId = table ? table.Id : null;
 | ||
|  |                 if (tableId == null) {
 | ||
|  |                     tools.alert("请选择表");
 | ||
|  |                     return;
 | ||
|  |                 }
 | ||
|  |                 var editId = this.editTableId;
 | ||
|  |                 var url = "/PrivateReZeroRoute/100003/GetEntityColuminsByEntityId?TableId=" + tableId;
 | ||
|  |                 axios.get(url, jwHeader)
 | ||
|  |                     .then(response => {
 | ||
|  |                         response.data.forEach(item => {
 | ||
|  |                             item.TableId = editId;
 | ||
|  |                             item.Id = 0;
 | ||
|  |                             this.columns.push(item);
 | ||
|  |                             btnCloseCopy.click();
 | ||
|  |                         });
 | ||
|  |                     })
 | ||
|  |                     .catch(error => {
 | ||
|  |                         this.error = error.message;
 | ||
|  |                     });
 | ||
|  |             },
 | ||
|  |             changeTable: function () {
 | ||
|  | 
 | ||
|  |             },
 | ||
|  |             clearTable: function () {
 | ||
|  |                 this.tableName = null;
 | ||
|  |             },
 | ||
|  |             executeSql: function () {
 | ||
|  |                 var editor = ace.edit("divAceEditor");
 | ||
|  |                 var sql = editor.getValue("\r\n");
 | ||
|  |                 var url = "/PrivateReZeroRoute/100003/ExecuetSql";
 | ||
|  |                 axios.post(url, { databaseId: this.databaseId, sql: sql }, jwHeader)
 | ||
|  |                     .then(response => { 
 | ||
|  |                         var editorResult = ace.edit("divAceEditorResult");
 | ||
|  |                         editorResult.setValue(JSON.stringify(response.data, null, 4)); 
 | ||
|  |                         editorResult.selection.clearSelection();
 | ||
|  |                         this.error = null;
 | ||
|  |                     })
 | ||
|  |                     .catch(error => {
 | ||
|  |                         this.error = error.message;
 | ||
|  |                     });
 | ||
|  |             },
 | ||
|  |             executeSqlRegurnExcel: function () {
 | ||
|  |                 var editor = ace.edit("divAceEditor");
 | ||
|  |                 var sql = editor.getValue("\r\n");
 | ||
|  |                 var th = this;
 | ||
|  |                 axios.get("/PrivateReZeroRoute/100003/ExecuetSqlReturnExcel", {
 | ||
|  |                     params: { 
 | ||
|  |                         databaseId: this.databaseId, sql: sql
 | ||
|  |                     },
 | ||
|  |                     responseType: 'blob',
 | ||
|  |                     headers: jwHeader.headers
 | ||
|  |                 })
 | ||
|  |                     .then(function (response) {
 | ||
|  |                         // 创建一个 Blob 对象,指向数据的 URL  
 | ||
|  |                         var url = window.URL.createObjectURL(new Blob([response.data]));
 | ||
|  |                         var link = document.createElement('a');
 | ||
|  |                         link.href = url;
 | ||
|  | 
 | ||
|  |                         // 设置下载文件的名称,可以根据实际情况调整  
 | ||
|  |                         var fileName = 'sql.xlsx';
 | ||
|  |                         link.setAttribute('download', fileName);
 | ||
|  | 
 | ||
|  |                         // 触发下载  
 | ||
|  |                         document.body.appendChild(link);
 | ||
|  |                         link.click();
 | ||
|  | 
 | ||
|  |                         // 清理资源  
 | ||
|  |                         window.URL.revokeObjectURL(link.href);
 | ||
|  |                         document.body.removeChild(link);
 | ||
|  |                     })
 | ||
|  |                     .catch(function (error) {
 | ||
|  |                         console.error("Error downloading the Excel file:", error);
 | ||
|  |                     });
 | ||
|  |             },
 | ||
|  |             openSqlTool: function () {
 | ||
|  |                 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("\r\n");
 | ||
|  |                 editor.selection.clearSelection();
 | ||
|  |                 this.bindSqlResult();
 | ||
|  |                 btnDatabaseTool.click();
 | ||
|  |             },
 | ||
|  |             clearSql: function() {
 | ||
|  |                 var editor = ace.edit("divAceEditor");
 | ||
|  |                 editor.setValue("\r\n");
 | ||
|  |                 editor.selection.clearSelection();
 | ||
|  | 
 | ||
|  |                 var editorResult = ace.edit("divAceEditorResult");
 | ||
|  |                 editorResult.setValue("\r\n");
 | ||
|  |                 editorResult.selection.clearSelection()
 | ||
|  |             },
 | ||
|  |             bindSqlResult: function ()
 | ||
|  |             {
 | ||
|  |                 var editor = ace.edit("divAceEditorResult");
 | ||
|  |                 editor.setOption("showPrintMargin", false);
 | ||
|  |                 editor.setTheme("ace/theme/twilight"); // 设置主题
 | ||
|  |                 editor.getSession().setMode("ace/mode/json5"); // 设置语言模式为SQL
 | ||
|  |                 editor.setOption("enableBasicAutocompletion", true);
 | ||
|  |                 editor.setOption("enableSnippets", true);
 | ||
|  |                 editor.setOption("enableLiveAutocompletion", true)
 | ||
|  |                 editor.setValue("\r\n");
 | ||
|  |                 editor.selection.clearSelection();
 | ||
|  |             },
 | ||
|  |             openSetting: function ()
 | ||
|  |             {
 | ||
|  |                 btnSetting.click();
 | ||
|  |                 this.getSettingItem(1, 1);
 | ||
|  |                
 | ||
|  |             },
 | ||
|  |             saveSetting: function () {
 | ||
|  | 
 | ||
|  |                 this.saveSettingItem(1, 1, this.setting.importUnunderline);
 | ||
|  |             },
 | ||
|  |             exportExcel: function () {
 | ||
|  |                 var th = this;
 | ||
|  |                 axios.get("/PrivateReZeroRoute/100003/ExportEntities", {
 | ||
|  |                     params: {
 | ||
|  |                         tableIds: JSON.stringify(this.selectedItems),
 | ||
|  |                         DataBaseId: this.databaseId
 | ||
|  |                     },
 | ||
|  |                     responseType: 'blob',
 | ||
|  |                     headers: jwHeader.headers
 | ||
|  |                 })
 | ||
|  |                     .then(function (response) {
 | ||
|  |                         // 创建一个 Blob 对象,指向数据的 URL  
 | ||
|  |                         var url = window.URL.createObjectURL(new Blob([response.data]));
 | ||
|  |                         var link = document.createElement('a');
 | ||
|  |                         link.href = url;
 | ||
|  | 
 | ||
|  |                         // 设置下载文件的名称,可以根据实际情况调整  
 | ||
|  |                         var fileName = $("#selDataBaseId option:selected").text() + '.xlsx'; 
 | ||
|  |                         link.setAttribute('download', fileName);
 | ||
|  | 
 | ||
|  |                         // 触发下载  
 | ||
|  |                         document.body.appendChild(link);
 | ||
|  |                         link.click();
 | ||
|  | 
 | ||
|  |                         // 清理资源  
 | ||
|  |                         window.URL.revokeObjectURL(link.href);
 | ||
|  |                         document.body.removeChild(link); 
 | ||
|  |                     })
 | ||
|  |                     .catch(function (error) {
 | ||
|  |                         console.error("Error downloading the Excel file:", error);
 | ||
|  |                     });
 | ||
|  |             },
 | ||
|  |             getSettingItem: function (typeId, childTypeId)
 | ||
|  |             {
 | ||
|  |                 var url = "/PrivateReZeroRoute/100003/GetSetting";
 | ||
|  |                 var th = this;
 | ||
|  |                 axios.post(url, { typeId: typeId, childTypeId: childTypeId }, jwHeader)
 | ||
|  |                     .then(response => {
 | ||
|  |                         th.setting.importUnunderline = response.data.BoolValue;
 | ||
|  |                         this.error = null;
 | ||
|  |                     })
 | ||
|  |                     .catch(error => {
 | ||
|  |                         this.error = error.message;
 | ||
|  |                         this.data = null;
 | ||
|  |                     });
 | ||
|  |             },
 | ||
|  |             saveSettingItem: function (typeId, childTypeId,value) {
 | ||
|  |                 var url = "/PrivateReZeroRoute/100003/UpdateSetting";
 | ||
|  |                 axios.post(url, { typeId: typeId, childTypeId: childTypeId, value: value }, jwHeader)
 | ||
|  |                     .then(response => {
 | ||
|  |                         tools.alert("保存成功"); 
 | ||
|  |                         btnSettingClose.click();
 | ||
|  |                         this.error = null;
 | ||
|  |                     })
 | ||
|  |                     .catch(error => {
 | ||
|  |                         this.error = error.message;
 | ||
|  |                         this.data = null;
 | ||
|  |                     });
 | ||
|  |             },
 | ||
|  |             openGenerateCode: function () {
 | ||
|  |                 if (!this.selectedItems || this.selectedItems.length == 0) {
 | ||
|  |                     tools.alert("请选择实体");
 | ||
|  |                     return;
 | ||
|  |                 }
 | ||
|  |                 this.isView = false;
 | ||
|  |                 this.viewName = null;
 | ||
|  |                 btnGenerateFile.click();
 | ||
|  |             },
 | ||
|  |             openGenerateCodeByView: function () {
 | ||
|  |             
 | ||
|  |                 this.isView = true;
 | ||
|  |                 btnGenerateFile.click();
 | ||
|  |             },
 | ||
|  |             submitGenerateFile: function () {
 | ||
|  |                 if (this.isView && !this.viewName)
 | ||
|  |                 {
 | ||
|  |                     tools.alert("视图名不能为空");
 | ||
|  |                     return;
 | ||
|  |                 }
 | ||
|  |                 var url = "/PrivateReZeroRoute/100003/ExecTemplateByTableIds";
 | ||
|  |                 axios.post(url, {
 | ||
|  |                     TableIds: JSON.stringify(this.selectedItems),
 | ||
|  |                     DataBaseId: this.databaseId,
 | ||
|  |                     TemplateId: this.currentTemplate.Id,
 | ||
|  |                     Url: this.currentTemplate.Url,
 | ||
|  |                     ViewName: this.viewName
 | ||
|  |                 }, jwHeader)
 | ||
|  |                     .then(response => {
 | ||
|  |                         if (response.data && response.data.message){
 | ||
|  |                             tools.alert("生成出错:" + response.data.message);
 | ||
|  |                         } else {
 | ||
|  |                             tools.alert("已生成到目录" + response.data);
 | ||
|  |                         }
 | ||
|  |                     })
 | ||
|  |                     .catch(error => {
 | ||
|  |                         this.error = error.message;
 | ||
|  |                     });
 | ||
|  |             },
 | ||
|  |             bindTemplates: function ()
 | ||
|  |             {
 | ||
|  |                 var th = this;
 | ||
|  |                 var url = "/PrivateReZeroRoute/100003/GetTemplateListByTypeId?typeId=1";
 | ||
|  |                 axios.get(url, jwHeader)
 | ||
|  |                     .then(response => {
 | ||
|  |                         th.templates = response.data; 
 | ||
|  |                         th.currentTemplate = th.templates[0];
 | ||
|  |                         th.currentTemplateId = th.templates[0].Id;
 | ||
|  |                     })
 | ||
|  |                     .catch(error => {
 | ||
|  |                         th.error = error.message;
 | ||
|  |                     });
 | ||
|  |             },
 | ||
|  |             changeTemplate: function (template)
 | ||
|  |             {
 | ||
|  |                 this.currentTemplate = this.templates.find(item => item.Id === this.currentTemplateId); 
 | ||
|  |             }
 | ||
|  |         }
 | ||
|  |     });
 | ||
|  | </script>
 |