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