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.
		
		
		
		
		
			
		
			
				
					
					
						
							389 lines
						
					
					
						
							15 KiB
						
					
					
				
			
		
		
	
	
							389 lines
						
					
					
						
							15 KiB
						
					
					
				@@master_page.html | 
						|
<link href="css/page_table_list.css" rel="stylesheet" /> | 
						|
<div id="apibox" class="card"> | 
						|
  <div class="search-bar"> | 
						|
    <form id="frmSearach" action="lyear_forms_elements.html" method="post" onsubmit="return false;"> | 
						|
      <div class="form-group"> | 
						|
        <div class="row"> | 
						|
          <div class="col-md-1"><label class="form-control" t>库备注:</label></div> | 
						|
          <div class="col-md-3"><input class="form-control" type="text" id="txtSearch" name="example-text-input" placeholder="数据库备注"></div> | 
						|
          <div class="col-md-3"> | 
						|
            <button @click="onSearch()" id="btnSearch" class="btn btn-secondary"><i class="mdi mdi-magnify"></i>搜索</button> | 
						|
            <button onclick="frmSearach.reset()" class="btn btn-close" type="submit">清空</button> | 
						|
          </div> | 
						|
          <div class="col-md-4"></div> | 
						|
        </div> | 
						|
      </div> | 
						|
    </form> | 
						|
    <div class="toolbar-btn-action"> | 
						|
      <button @click="openAddDiv()" class="btn  btn-primary m-r-5" data-toggle="modal" data-target="#gridSystemModal"><i class="mdi mdi-plus"></i> 新增</button> | 
						|
      <button @click="openSynchronousDataDiv()" class="btn btn-success m-r-5" data-toggle="modal" data-target="#btnSynchronousData"><i class="mdi mdi-redo-variant"></i> 同步接口</button> | 
						|
    </div> | 
						|
  </div> | 
						|
  <div class="card-body"> | 
						|
 | 
						|
    <h5> </h5> | 
						|
    <div class="table-responsive"> | 
						|
      <table class="table table-bordered"> | 
						|
        <thead> | 
						|
          <tr v-if="data && data.Columns && data.Columns.length > 0"> | 
						|
            <th class="mi-w-100" v-for="column in data.Columns">{{column.ColumnDescription}}</th> | 
						|
            <th>操作</th> | 
						|
          </tr> | 
						|
        </thead> | 
						|
        <tbody v-if="data &&data.Data"> | 
						|
          <tr v-if="data.Columns && data.Columns.length > 0" v-for="item in data.Data"> | 
						|
 | 
						|
            <td v-for="(column,index) in data.Columns" class="word-all"> | 
						|
              <div v-if="index == 0" class="mi-w-150"> | 
						|
                {{ item[column.PropertyName] }} | 
						|
              </div> | 
						|
              <div v-else> | 
						|
                {{ item[column.PropertyName] }} | 
						|
              </div> | 
						|
            </td> | 
						|
 | 
						|
            <td class="table_opt3"> | 
						|
              <button data-toggle="modal" @click="testDatabase(item)" class="btn btn-link" type="button"> | 
						|
                <i class="mdi mdi-test-tube"></i> 测试 | 
						|
              </button> | 
						|
              <button data-toggle="modal" @click="createDatabase(item)" class="btn btn-link" type="button"> | 
						|
                <i class="mdi mdi-cube"></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 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 for="recipient-name" class="control-label">库备注:</label> | 
						|
              <input type="text" v-model="formData.Name" name="Name" class="form-control" id="recipient-name"> | 
						|
            </div> | 
						|
            <div class="form-group"> | 
						|
              <label for="message-text" class="control-label">数据库类型:</label> | 
						|
              <select @change="showMessage" class="form-control" v-model="formData.DbType" name="DbType"> | 
						|
                <option v-for="item in dbTypeList" v-bind:value="item.Value"> {{item.Name}} </option> | 
						|
              </select> | 
						|
            </div> | 
						|
            <div class="form-group"> | 
						|
              <label for="message-text" class="control-label">字符串:</label> | 
						|
              <textarea class="form-control" v-model="formData.Connection" name="Connection" id="message-text"></textarea> | 
						|
            </div> | 
						|
            <div class="form-group"> | 
						|
              <code class="db0 hidden dbmessage"> | 
						|
                MySql示例:<br /> | 
						|
                server=localhost;Database=SqlSugar4xTest;Uid=root;Pwd=haosql; | 
						|
                非默认端口要用port=3306 | 
						|
              </code> | 
						|
              <code class="db1 hidden dbmessage"> | 
						|
                SqlServer示例:<br /> | 
						|
                server=localhost;Database=SqlSugar4xTest;Uid=root;Pwd=haosql;<br /> | 
						|
                .net8需要注意 启动文件csproj文件 ,InvariantGlobalization设置为false<br /> | 
						|
                有端口localhost:1433; | 
						|
              </code> | 
						|
              <code class="db2 hidden dbmessage"> | 
						|
                Sqlite示例:<br /> | 
						|
                DataSource=xxx.sqlite | 
						|
              </code> | 
						|
              <code class="db3 hidden dbmessage"> | 
						|
                Oracle示例:<br /> | 
						|
                //写法1<br /> | 
						|
                Data Source=localhost/orcl;User ID=system;Password=haha<br /> | 
						|
                //字法2 上面连不上可以试用下面写法<br /> | 
						|
                Data Source=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=150.158.57.125)(PORT=1521)))(CONNECT_DATA=(SERVICE_NAME=ORCL)));User Id=xx;Password=xx;Pooling='true';Max Pool Size=150 | 
						|
              </code> | 
						|
              <code class="db4 hidden dbmessage"> | 
						|
                Postgresql 示例:<br /> | 
						|
                PORT=5432;DATABASE=SqlSugar4xTest;HOST=localhost;PASSWORD=haosql;USER ID=postgres<br /> | 
						|
                不是public需要设置架构名searchpath=架构名 | 
						|
              </code> | 
						|
              <code class="db5 hidden dbmessage"> | 
						|
                达梦 示例:<br /> | 
						|
                Server=153.101.101:5236;User Id=SYSDBA;PWD=123456;SCHEMA=架构;DATABASE=DAMENG | 
						|
              </code> | 
						|
              <code class="db6 hidden dbmessage"> | 
						|
                人大金仓 示例:<br /> | 
						|
                Server=127.0.0.1;Port=54321;UID=SYSTEM;PWD=system;database=SQLSUGAR4XTEST1<br> | 
						|
                默认是Oracle模式,如果不是Oracle模式需要看SqlSugar文档改ReZero源码<br> | 
						|
                通过SQL可以查看安装模式 show database_mode; | 
						|
              </code> | 
						|
            </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 class="modal fade" tabindex="-1" role="dialog" aria-labelledby="gridSystemModalLabel" id="btnSynchronousData" 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">同步数据</h4> | 
						|
        </div> | 
						|
 | 
						|
        <div class="card-body"> | 
						|
          <p class="alert alert-success"> | 
						|
            注意:这儿只同步四张配置表,业务表需要在【菜单:实体表维护】选实体点同步<br /> | 
						|
            1、接口数据 : [zero_interface_list] | 
						|
            [zero_interface_category]<br /> | 
						|
            2、实体数据 : [zero_entity_info] | 
						|
            [zero_entity_column_info] | 
						|
          </p> | 
						|
          <form class="form-horizontal"> | 
						|
            <div class="form-group has-success"> | 
						|
              <label class="col-xs-12 text-align-left" for="example-text-input-success">基准库</label> | 
						|
              <div class="col-xs-12"> | 
						|
                <select v-model="od_originaldb" class="form-control" type="text" id="example-text-input-success" name="example-text-input-success" placeholder="成功状态.."> | 
						|
                  <option value="1">启动库Rezro</option> | 
						|
                </select> | 
						|
              </div> | 
						|
            </div> | 
						|
            <div class="form-group has-success"> | 
						|
              <label class="col-xs-12  text-align-left" for="example-text-input-success2">更新库</label> | 
						|
              <div class="col-xs-12"> | 
						|
                <select v-model="od_targetdb" class="form-control" type="text" id="example-text-input-success2" name="example-text-input-success" placeholder="成功状态.."> | 
						|
                  <option :value="item.Id" v-if="item.Id!=1" v-for="item in dataAll">{{item.Name}}</option> | 
						|
                </select> | 
						|
              </div> | 
						|
            </div> | 
						|
            <div class="form-group has-success"> | 
						|
              <label class="col-xs-12  text-align-left" for="example-text-input-success">备份表</label> | 
						|
              <div class="col-xs-12"> | 
						|
                <label class="lyear-checkbox checkbox-primary text-align-left"> | 
						|
                  <input v-model="od_isbak" type="checkbox" class="checkbox-parent checkbox-child" dataid="id-1-6" value="true"> | 
						|
                  <span class="m-l-15"> 表名+时间HHmmss</span> | 
						|
                </label> | 
						|
              </div> | 
						|
            </div> | 
						|
          </form> | 
						|
        </div> | 
						|
 | 
						|
        <div class="modal-footer"> | 
						|
          <button type="button" class="btn btn-default" data-dismiss="modal">关闭</button> | 
						|
          <button type="button" @click="synchronousData" class="btn btn-primary">同步</button> | 
						|
        </div> | 
						|
      </div> | 
						|
    </div> | 
						|
  </div> | 
						|
</div> | 
						|
<script> | 
						|
  var vueObj = new Vue({ | 
						|
    el: '#apibox', | 
						|
    data: { | 
						|
      data: null, | 
						|
      dataAll: null, | 
						|
      error: null, | 
						|
      addTitle: "添加数据库配置", | 
						|
      editTitle: "修改数据库配置", | 
						|
      title: "", | 
						|
      dbTypeList: [], | 
						|
      formData: { | 
						|
 | 
						|
      }, | 
						|
      od_isbak: false, | 
						|
      od_originaldb: null, | 
						|
      od_targetdb: null, | 
						|
      lock: false | 
						|
    }, | 
						|
    mounted() { | 
						|
      this.fetchData(""); | 
						|
    }, | 
						|
    methods: { | 
						|
      fetchData(append) { | 
						|
        var url = "/PrivateReZeroRoute/100003/GetDatabaseInfoList?ParentId=200" + append; | 
						|
        axios.get(url, jwHeader) | 
						|
          .then(response => { | 
						|
            this.data = response.data; | 
						|
            this.error = null; | 
						|
          }) | 
						|
          .catch(error => { | 
						|
            this.error = error.message; | 
						|
            this.data = null; | 
						|
          }); | 
						|
 | 
						|
 | 
						|
        axios.get("/PrivateReZeroRoute/100004/GetDbTypeList", jwHeader) | 
						|
          .then(response => { | 
						|
            this.dbTypeList = response.data; | 
						|
            this.error = null; | 
						|
          }) | 
						|
          .catch(error => { | 
						|
            this.error = error.message; | 
						|
            this.data = null; | 
						|
          }); | 
						|
 | 
						|
        axios.get("/PrivateReZeroRoute/100004/GetDatabaseInfoAllList", jwHeader) | 
						|
          .then(response => { | 
						|
            this.dataAll = response.data; | 
						|
          }) | 
						|
          .catch(error => { | 
						|
            this.error = error.message; | 
						|
            this.data = null; | 
						|
          }); | 
						|
      }, | 
						|
      onSearch: function (page) { | 
						|
 | 
						|
        var urlParameters = "&" + tools.objectToQueryString({ | 
						|
          Name: txtSearch.value, | 
						|
          __pageNumber: page, | 
						|
          __pageSize: tools.getValue("selPageSize"), | 
						|
        }); | 
						|
 | 
						|
        this.fetchData(urlParameters); | 
						|
      }, | 
						|
      deleteAndConfirm: function (item) { | 
						|
        if (item == null) { | 
						|
          var url = "/PrivateReZeroRoute/100003/DeleteDataBaseInfo?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/GetDataBaseInfoById?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.formData = {}; | 
						|
        this.title = this.addTitle; | 
						|
      }, | 
						|
      addOrUpdate: function () { | 
						|
        var th = this; | 
						|
        var frmId = "frmEdit"; | 
						|
        var json = this.formData; | 
						|
        var url = json.Id ? | 
						|
          "/PrivateReZeroRoute/100003/UpdateDatabaseInfo" : | 
						|
          "/PrivateReZeroRoute/100003/AddDatabaseInfo"; | 
						|
        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; | 
						|
          }); | 
						|
      }, | 
						|
      testDatabase: function (item) { | 
						|
        axios.post("/PrivateReZeroRoute/100003/TestDatabaseInfo", { Id: item.Id }, jwHeader) | 
						|
          .then(response => { | 
						|
            this.error = null; | 
						|
            tools.alert(response.data + ""); | 
						|
          }) | 
						|
          .catch(error => { | 
						|
            this.error = error.message; | 
						|
 | 
						|
          }); | 
						|
      }, | 
						|
      createDatabase: function (item) { | 
						|
        axios.post("/PrivateReZeroRoute/100003/CreateDatabaseInfo", { Connection: item.Connection, DbType: item.DbType }, jwHeader) | 
						|
          .then(response => { | 
						|
            this.error = null; | 
						|
            tools.alert(response.data + ""); | 
						|
          }) | 
						|
          .catch(error => { | 
						|
            this.error = error.message; | 
						|
          }); | 
						|
      }, | 
						|
      openSynchronousDataDiv: function () { | 
						|
      }, | 
						|
      synchronousData: function () { | 
						|
        if (!this.od_originaldb) { | 
						|
          tools.alert("请选择基准库"); | 
						|
          return; | 
						|
        } | 
						|
        if (!this.od_targetdb) { | 
						|
          tools.alert("请选择更新库"); | 
						|
          return; | 
						|
        } | 
						|
        if (this.od_targetdb == this.od_originaldb) { | 
						|
          tools.alert("相同库不需要同步"); | 
						|
          return; | 
						|
        } | 
						|
        if (this.lock == true) { | 
						|
          return; | 
						|
        } | 
						|
        this.lock = true; | 
						|
        axios.post("/PrivateReZeroRoute/100003/SynchronousData", | 
						|
          { | 
						|
            OriginalDb: this.od_originaldb, | 
						|
            TargetDb: this.od_targetdb, | 
						|
            IsBak: this.od_isbak | 
						|
          }, jwHeader) | 
						|
          .then(response => { | 
						|
            this.lock = false; | 
						|
            this.error = null; | 
						|
            if (response.data == true) { | 
						|
              tools.alert("同步成功"); | 
						|
            } else { | 
						|
              tools.alert(response.data.message); | 
						|
            } | 
						|
          }) | 
						|
          .catch(error => { | 
						|
            this.error = error.message; | 
						|
          }); | 
						|
      }, | 
						|
      showMessage: function () { | 
						|
        var id = this.formData.DbType; | 
						|
        $(".dbmessage").addClass("hidden"); | 
						|
        $(".db" + id).removeClass("hidden"); | 
						|
      } | 
						|
    } | 
						|
  });</script> |