DsetTableJoin.vue 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161
  1. <template>
  2. <el-dialog title="表关联" :visible.sync="showDailog">
  3. <el-form :model="join" :rules="rules" ref="joinForm">
  4. <el-form-item label="主表" label-width="100px" >
  5. {{ master }}
  6. </el-form-item>
  7. <el-form-item label="字段" label-width="100px" >
  8. {{ masterCol }}
  9. </el-form-item>
  10. <el-form-item label="从表" label-width="100px" prop="ref">
  11. <el-select v-model="join.ref" placeholder="请选择" @change="changejoin">
  12. <el-option
  13. v-for="item in selectTables"
  14. :key="item.id"
  15. :label="item.name"
  16. :value="item.id"
  17. >
  18. </el-option>
  19. </el-select>
  20. </el-form-item>
  21. <el-form-item label="字段" label-width="100px" prop="refKey">
  22. <el-select v-model="join.refKey" placeholder="请选择">
  23. <el-option
  24. v-for="item in refKeyList"
  25. :key="item.id"
  26. :label="item.name"
  27. :value="item.id"
  28. >
  29. </el-option>
  30. </el-select>
  31. </el-form-item>
  32. <el-form-item label="关联方式" label-width="100px" prop="jtype">
  33. <el-select v-model="join.jtype" placeholder="请选择">
  34. <el-option
  35. v-for="item in joinTypes"
  36. :key="item.id"
  37. :label="item.name"
  38. :value="item.id"
  39. >
  40. </el-option>
  41. </el-select>
  42. </el-form-item>
  43. </el-form>
  44. <div slot="footer" class="dialog-footer">
  45. <el-button type="primary" @click="savejoin()">确 定</el-button>
  46. <el-button @click="showDailog = false">取 消</el-button>
  47. </div>
  48. </el-dialog>
  49. </template>
  50. <script>
  51. import { baseUrl, ajax } from "@/common/biConfig";
  52. import $ from "jquery";
  53. export default {
  54. name: "dsetTableJoin",
  55. data() {
  56. return {
  57. showDailog: false,
  58. join: {
  59. ref: null,
  60. refKey: null,
  61. jtype: null,
  62. },
  63. rules: {
  64. ref: [{ required: true, message: "必填", trigger: "blur" }],
  65. refKey: [{ required: true, message: "必填", trigger: "blur" }],
  66. jtype: [{ required: true, message: "必填", trigger: "blur" }],
  67. },
  68. joinTypes: [
  69. { id: "left", name: "左连接" },
  70. { id: "right", name: "右连接" },
  71. { id: "inner", name: "全连接" },
  72. ],
  73. refKeyList:[],
  74. dsetIds:[],
  75. selectTables:null,
  76. master:null,
  77. masterCol:null,
  78. dsetId:null
  79. };
  80. },
  81. components: {},
  82. mounted() {},
  83. computed: {},
  84. methods: {
  85. save() {},
  86. create(isupdate) {
  87. //获取已选择表
  88. this.selectTables = [];
  89. const dsetForm = this.$parent.$refs['dsetAddForm'];
  90. this.master = dsetForm.dset.master;
  91. this.dsetId = dsetForm.dset.dsid;
  92. let ds = dsetForm.selectTables;
  93. //剔除主表
  94. let ts = this;
  95. ds.forEach((element, idx) => {
  96. if(element.id !==dsetForm.dset.master ){
  97. ts.selectTables.push(element);
  98. }
  99. });
  100. //重置表单
  101. if(this.$refs["joinForm"]){
  102. this.$refs["joinForm"].resetFields();
  103. }
  104. //获取已选字段
  105. var ref = $("#masterTableTree").jstree(true);
  106. var node = ref.get_selected(true);
  107. if (node.length == 0) {
  108. this.$notify.error("请选择字段再点关联");
  109. return;
  110. }
  111. this.masterCol = node[0].id;
  112. this.showDailog = true;
  113. },
  114. savejoin(){
  115. var ref = $("#masterTableTree").jstree(true);
  116. var node = ref.get_selected(true);
  117. let ts = this;
  118. node = node[0];
  119. this.$refs['joinForm'].validate(valid => {
  120. if(valid){
  121. node.li_attr.ref = ts.join.ref;
  122. node.li_attr.refKey = ts.join.refKey;
  123. node.li_attr.jtype = ts.join.jtype;
  124. ref.set_icon(node, "glyphicon glyphicon-link");
  125. ref.set_text(node, node.text+"->"+ts.join.ref+"."+ts.join.refKey);
  126. this.showDailog = false;
  127. }
  128. }
  129. )
  130. },
  131. changejoin(){
  132. let tname = this.join.ref;
  133. let ts = this;
  134. ajax({
  135. type: "post",
  136. url: "model/listTableColumns.action",
  137. dataType: "json",
  138. data: { tname, dsid: ts.dsetId },
  139. success: function (dt) {
  140. dt = dt.rows;
  141. ts.refKeyList = [];
  142. $(dt).each((a, b)=>{
  143. ts.refKeyList.push({id:b.name,name:b.name});
  144. });
  145. },
  146. }, this);
  147. }
  148. },
  149. };
  150. </script>
  151. <style lang="less" scoped>
  152. @import "../../style/mixin";
  153. </style>