DimkpiModify.vue 7.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219
  1. <template>
  2. <el-dialog title="编辑维度及度量" :visible.sync="show">
  3. <el-form :model="node" ref="nodeForm" :rules="rule">
  4. <template v-if="type === 'dim'">
  5. <el-form-item label="维度字段" label-width="100px">
  6. {{ node.col }}
  7. </el-form-item>
  8. </template>
  9. <template v-if="type === 'kpi'">
  10. <el-form-item label="度量字段" label-width="100px">
  11. {{ node.col }}
  12. </el-form-item>
  13. </template>
  14. <el-form-item label="别名" label-width="100px">
  15. {{ node.alias }}
  16. </el-form-item>
  17. <el-form-item label="显示名称" label-width="100px" prop="dimname">
  18. <el-input v-model="node.dimname"></el-input>
  19. </el-form-item>
  20. <el-form-item label="维度类型" label-width="100px" prop="dimtype">
  21. <el-select v-model="node.dimtype" clearable="clearable" style="width:100%" placeholder="请选择">
  22. <el-option
  23. v-for="item in opts.dimtype"
  24. :key="item.value"
  25. :label="item.text"
  26. :value="item.value"
  27. >
  28. </el-option>
  29. </el-select>
  30. </el-form-item>
  31. <el-form-item label="维度格式" label-width="100px" prop="dateformat">
  32. <el-select v-model="node.dateformat" clearable="clearable" style="width:100%" placeholder="请选择">
  33. <el-option
  34. v-for="item in opts.dateformat"
  35. :key="item"
  36. :label="item"
  37. :value="item"
  38. >
  39. </el-option>
  40. </el-select>
  41. </el-form-item>
  42. <el-form-item label="维度对应表" label-width="100px" prop="dateformat">
  43. <el-select v-model="node.colTable" clearable="clearable" style="width:100%" @change="chgtable" placeholder="请选择">
  44. <el-option
  45. v-for="item in opts.colTable"
  46. :key="item"
  47. :label="item"
  48. :value="item"
  49. >
  50. </el-option>
  51. </el-select>
  52. </el-form-item>
  53. <el-form-item label="维度Key字段" label-width="100px" prop="colkey">
  54. <el-select v-model="node.colkey" style="width:100%" placeholder="请选择">
  55. <el-option
  56. v-for="item in opts.colkey"
  57. :key="item"
  58. :label="item"
  59. :value="item"
  60. >
  61. </el-option>
  62. </el-select>
  63. </el-form-item>
  64. <el-form-item label="维度Text字段" label-width="100px" prop="coltext">
  65. <el-select v-model="node.coltext" style="width:100%" placeholder="请选择">
  66. <el-option
  67. v-for="item in opts.coltext"
  68. :key="item"
  69. :label="item"
  70. :value="item"
  71. >
  72. </el-option>
  73. </el-select>
  74. </el-form-item>
  75. <el-form-item label="排序方式" label-width="100px">
  76. <el-select v-model="node.dimord" clearable="clearable" style="width:100%" placeholder="请选择">
  77. <el-option
  78. v-for="item in opts.dimord"
  79. :key="item.value"
  80. :label="item.text"
  81. :value="item.value"
  82. >
  83. </el-option>
  84. </el-select>
  85. </el-form-item>
  86. </el-form>
  87. <div slot="footer" class="dialog-footer">
  88. <el-button type="primary" @click="save()">确 定</el-button>
  89. <el-button @click="show = false">取 消</el-button>
  90. </div>
  91. </el-dialog>
  92. </template>
  93. <script>
  94. import { ajax, newGuid } from "@/common/biConfig";
  95. import $ from "jquery"
  96. export default {
  97. name: 'dimkpiModify',
  98. data() {
  99. return {
  100. show:false,
  101. tit:"",
  102. clearable:true,
  103. node: {
  104. dimname:"",
  105. col:"",
  106. alias:"",
  107. dimtype:"",
  108. dateformat:"",
  109. colTable:"",
  110. colkey:"",
  111. coltext:"",
  112. dimord:""
  113. },
  114. dset:null,
  115. rule:{
  116. //dimname: [{ required: true, message: "必填", trigger: "blur" }],
  117. //dimtype: [{ required: true, message: "必填", trigger: "blur" }],
  118. },
  119. type:'', //dim/kpi 2种
  120. opts:{
  121. dimtype:[
  122. {value:"frd",text:"未选择"},
  123. {value:"year",text:"年"},
  124. {value:"quarter",text:"季度"},
  125. {value:"month",text:"月份"},
  126. {value:"day",text:"日期"},
  127. {value:"prov",text:"省份"},
  128. {value:"city",text:"地市"}
  129. ],
  130. dateformat:[
  131. 'yyyymmdd', 'yyyy-mm-dd', 'yyyy年mm月dd日', 'yyyymm', 'yyyy-mm', 'yyyy年mm月', 'yyyy', 'yyyy年'
  132. ],
  133. colTable:[],
  134. dimord:[{
  135. value:"asc", text:"升序"
  136. },{
  137. value:"desc", text:"降序"
  138. }],
  139. coltext:[],
  140. colkey:[]
  141. }
  142. }
  143. },
  144. components: {
  145. },
  146. mounted() {
  147. },
  148. computed: {},
  149. methods: {
  150. save(){
  151. let ts = this;
  152. this.$refs['nodeForm'].validate(v=>{
  153. if(v){
  154. let ref = $("#cuberighttree").jstree(true);
  155. let node = ref.get_selected(true)[0];
  156. if(ts.type === 'dim'){
  157. var dtp = ts.node.dimtype;
  158. var dtfmt = ts.node.dateformat;
  159. if(dtp != "" && (dtp == "year" || dtp == "month" || dtp == "quarter" || dtp == "day") && dtfmt == "" ){
  160. this.$notify.error("请选择时间维度类型。");
  161. return;
  162. }
  163. node.li_attr.dispName = ts.node.dimname;
  164. node.li_attr.dimtype = dtp;
  165. node.li_attr.colTable = ts.node.colTable;
  166. node.li_attr.colkey = ts.node.colkey;
  167. node.li_attr.coltext = ts.node.coltext;
  168. node.li_attr.dimord = ts.node.dimord;
  169. node.li_attr.dateformat = dtfmt;
  170. node.li_attr.isupdate = "y"; //表示维度已经更改过了。
  171. ref.rename_node(node, ts.node.dimname);
  172. }else{
  173. }
  174. ts.show = false;
  175. }
  176. });
  177. },
  178. modify(selectNode, dset){
  179. this.show = true;
  180. if(this.$refs['nodeForm']){
  181. this.$refs['nodeForm'].resetFields();
  182. }
  183. this.type = selectNode.li_attr.tp;
  184. this.node.col = selectNode.li_attr.col;
  185. this.node.alias = selectNode.li_attr.alias;
  186. this.node.dimname = selectNode.li_attr.dispName;
  187. this.node.dimtype = selectNode.li_attr.dimtype;
  188. this.node.colTable = selectNode.li_attr.colTable;
  189. this.node.colkey = selectNode.li_attr.colkey;
  190. this.node.coltext = selectNode.li_attr.coltext;
  191. this.node.dimord = selectNode.li_attr.dimord;
  192. this.node.dateformat = selectNode.li_attr.dateformat;
  193. this.dset = dset;
  194. let ts = this;
  195. ts.opts.colTable = [];
  196. ts.opts.colkey = [];
  197. ts.opts.colkey = [];
  198. $(dset.cols).each((a, b)=>{
  199. if(!(ts.opts.colTable.indexOf(b.tname) >= 0)){
  200. ts.opts.colTable.push(b.tname);
  201. }
  202. });
  203. },
  204. chgtable(val){
  205. let ls = this.dset.cols.filter(c=>c.tname === val).map(m=>m.name);
  206. this.opts.coltext = this.opts.colkey = ls;
  207. }
  208. }
  209. };
  210. </script>
  211. <style lang="less" scoped>
  212. @import "../../style/mixin";
  213. </style>