ReportTableDailog.vue 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391
  1. <!-- 表格对话框都放这里面 -->
  2. <template>
  3. <el-dialog :title="title" :visible.sync="show" :close-on-click-modal="false" custom-class="nopadding">
  4. <el-form :model="val" ref="valForm" label-position="left">
  5. <template v-if="type === 'dimAggre'">
  6. <el-form-item label="聚合方式" label-width="100px">
  7. <el-select v-model="val.aggreType" style="width:100%" placeholder="请选择">
  8. <el-option
  9. v-for="item in opt.aggres"
  10. :key="item.value"
  11. :label="item.name"
  12. :value="item.value">
  13. </el-option>
  14. </el-select>
  15. </el-form-item>
  16. <el-form-item label-width="100px">
  17. <button type="button" class="btn btn-danger btn-rounded btn-outline btn-xs" @click="clearAggre()">清除聚合</button>
  18. </el-form-item>
  19. </template>
  20. <template v-if="type === 'top'">
  21. <el-form-item label="维度取Top" label-width="100px">
  22. <el-input-number v-model="val.top" :min="1" :max="100" label="描述文字" size="small"></el-input-number>
  23. </el-form-item>
  24. <el-form-item label="" label-width="100px">
  25. <el-select v-model="val.topType" placeholder="请选择">
  26. <el-option
  27. v-for="item in opt.tops"
  28. :key="item.value"
  29. :label="item.name"
  30. :value="item.value">
  31. </el-option>
  32. </el-select>
  33. </el-form-item>
  34. </template>
  35. <template v-if="type === 'kpiprop'">
  36. <el-form-item label="度量名称" label-width="100px">
  37. {{kpi.kpi_name}}
  38. </el-form-item>
  39. <el-form-item label="所属表" label-width="100px">
  40. {{kpi.tname}}
  41. </el-form-item>
  42. <el-form-item label="聚合方式" label-width="100px">
  43. {{kpi.aggre}}
  44. </el-form-item>
  45. <el-form-item label="度量单位" label-width="100px">
  46. <el-select
  47. v-model="val.unit"
  48. placeholder="请选择"
  49. >
  50. <el-option
  51. v-for="item in opt.unit"
  52. :key="item.value"
  53. :label="item.name"
  54. :value="item.value"
  55. >
  56. </el-option>
  57. </el-select>
  58. </el-form-item>
  59. <el-form-item label="格式化" label-width="100px">
  60. <el-select
  61. v-model="val.fmt"
  62. placeholder="请选择"
  63. >
  64. <el-option
  65. v-for="item in opt.fmt"
  66. :key="item.value"
  67. :label="item.text"
  68. :value="item.value"
  69. >
  70. </el-option>
  71. </el-select>
  72. </el-form-item>
  73. </template>
  74. <template v-if="type === 'kpifilter'">
  75. <el-form-item label="度量名称" label-width="100px">
  76. {{kpi.kpi_name}}
  77. </el-form-item>
  78. <el-form-item label="操作" label-width="100px">
  79. <el-select
  80. v-model="val.oper"
  81. placeholder="请选择"
  82. >
  83. <el-option
  84. v-for="item in opt.oper"
  85. :key="item.value"
  86. :label="item.text"
  87. :value="item.value"
  88. >
  89. </el-option>
  90. </el-select>
  91. </el-form-item>
  92. <el-form-item label="值" label-width="100px">
  93. <el-input-number v-model="val.value1" label="描述文字" size="small"></el-input-number>
  94. </el-form-item>
  95. <el-form-item label="值2" v-show="val.oper === 'between'" label-width="100px">
  96. <el-input-number v-model="val.value2" label="描述文字" size="small"></el-input-number>
  97. </el-form-item>
  98. </template>
  99. <template v-if="type === 'kpiwarning'">
  100. <el-form-item label="图片样式" label-width="160px">
  101. <el-select v-model="val.wctype" placeholder="请选择" @change="chgpic">
  102. <el-option
  103. v-for="item in opt.wctypes"
  104. :key="item.value"
  105. :label="item.text"
  106. :value="item.value"
  107. >
  108. </el-option>
  109. </el-select>
  110. <el-switch
  111. v-model="val.fztp"
  112. inactive-text="反转图片"
  113. @change="fztpfunc"
  114. >
  115. </el-switch>
  116. </el-form-item>
  117. <el-form-item label="" label-width="160px">
  118. <span slot="label">
  119. <span id="ww1" class="warning6"></span>
  120. 当前值
  121. </span>
  122. <el-select v-model="val.logic1" style="width:100px;" placeholder="请选择" >
  123. <el-option
  124. v-for="item in opt.logics"
  125. :key="item.value"
  126. :label="item.value"
  127. :value="item.value"
  128. >
  129. </el-option>
  130. </el-select>
  131. <el-input-number v-model="val.value1" controls-position="right" @change="handleChange(1)" size="small"></el-input-number>
  132. </el-form-item>
  133. <el-form-item label-width="160px">
  134. <span slot="label">
  135. <span id="ww2" class="warning5">
  136. </span> 当前值 &lt; <span id="and1"></span> 且
  137. </span>
  138. <el-select v-model="val.logic2" style="width:100px;" placeholder="请选择" >
  139. <el-option
  140. v-for="item in opt.logics"
  141. :key="item.value"
  142. :label="item.value"
  143. :value="item.value"
  144. >
  145. </el-option>
  146. </el-select>
  147. <el-input-number v-model="val.value2" controls-position="right" @change="handleChange(2)" size="small"></el-input-number>
  148. </el-form-item>
  149. <el-form-item label-width="160px">
  150. <span slot="label">
  151. <span id="ww3" class="warning4"></span>
  152. 当前值 &lt; <span id="and2"></span>
  153. </span>
  154. </el-form-item>
  155. <button type="button" class="btn btn-danger btn-rounded btn-outline btn-xs" @click="clearwarning">清除预警</button>
  156. </template>
  157. </el-form>
  158. <div slot="footer" class="dialog-footer">
  159. <el-button type="primary" @click="save()">确 定</el-button>
  160. <el-button @click="show = false">取 消</el-button>
  161. </div>
  162. </el-dialog>
  163. </template>
  164. <script>
  165. import {ajax} from '@/common/biConfig'
  166. import $ from 'jquery'
  167. import {findParamById,msginfo} from '@/view/bireport/bireportUtils'
  168. export default {
  169. data(){
  170. return {
  171. show:false,
  172. title:"",
  173. type:"",
  174. comp:null,
  175. dim:null,
  176. kpi:null,
  177. opt:{
  178. aggres:[
  179. {name:"求和",value:"sum"},
  180. {name:"计数",value:"count"},
  181. {name:"平均",value:"avg"},
  182. {name:"最大",value:"max"},
  183. {name:"最小",value:"min"},
  184. {name:"方差",value:"var"},
  185. {name:"标准差",value:"sd"},
  186. {name:"中位数",value:"middle"}
  187. ],
  188. tops:[
  189. {name:"数字", value:"number"},
  190. {name:"百分比", value:"percent"}
  191. ],
  192. unit:[{
  193. name:"", value:"1"
  194. },{
  195. name:"千", value:"1000"
  196. },{
  197. name:"万", value:"10000"
  198. },{
  199. name:"百万", value:"1000000"
  200. },{
  201. name:"亿", value:"100000000"
  202. }],
  203. fmt:[{
  204. value:"#,###", text:"整数"
  205. },{
  206. value:"#,##0.00", text:"小数(保留两位)"
  207. },{
  208. value:"#,##0.0000", text:"小数(保留四位)"
  209. },{
  210. value:"0.00%", text: "百分比"
  211. }
  212. ],
  213. oper:[
  214. {value:">", text:"大于"},
  215. {value:"<", text:"小于"},
  216. {value:"=", text:"等于"},
  217. {value:"between", text:"区间"}
  218. ],
  219. wctypes:[{value:"1",text:"交通灯"},{value:"2",text:"箭头"}],
  220. logics:[{value:">="},{value:">"}]
  221. },
  222. val:{
  223. aggreType:"",
  224. top:null,
  225. topType:"number",
  226. unit:null,
  227. fmt:null,
  228. oper:null,
  229. value1:null,
  230. value2:null,
  231. wctype:"1",
  232. logic1:">=",
  233. logic2:">=",
  234. fztp:false
  235. }
  236. }
  237. },
  238. mounted(){
  239. },
  240. computed: {
  241. },
  242. methods: {
  243. dimAggre(dim, comp){
  244. this.title = "维度聚合";
  245. this.type = "dimAggre";
  246. this.show = true;
  247. this.dim = dim;
  248. if(this.type === 'dimAggre'){
  249. this.val.aggreType = dim.aggre;
  250. }
  251. },
  252. dimTop(dim, comp){
  253. this.title = "维度取Top";
  254. this.type = "top";
  255. this.show = true;
  256. this.dim = dim;
  257. this.val.top = dim.top;
  258. this.val.topType = dim.topType;
  259. },
  260. kpiProperty(kpi, comp){
  261. this.title = "度量属性";
  262. this.type = "kpiprop";
  263. this.show = true;
  264. this.kpi = kpi;
  265. this.val.fmt = kpi.fmt;
  266. this.val.unit = kpi.rate;
  267. },
  268. kpiFilter(kpi, comp){
  269. this.title = "度量筛选";
  270. this.type = "kpifilter";
  271. this.show = true;
  272. this.kpi = kpi;
  273. },
  274. kpiwarning(kpi, comp){
  275. this.title = "指标预警";
  276. this.type = "kpiwarning";
  277. this.show = true;
  278. this.kpi = kpi;
  279. if(kpi.warning){
  280. this.val.wctype = kpi.warning.pictype;
  281. this.val.fztp === kpi.warning.reverse === "y";
  282. this.val.logic1 = kpi.warning.logic1;
  283. this.val.value1 = kpi.warning.val1;
  284. this.val.logic2 = kpi.warning.logic2;
  285. this.val.value2 = kpi.warning.val2;
  286. }
  287. },
  288. save(){
  289. let dim = this.dim;
  290. let kpi = this.kpi;
  291. if(this.type === 'dimAggre'){
  292. if(dim.issum == 'y'){
  293. dim.issum = "n";
  294. delete dim.aggre;
  295. }else{
  296. dim.issum = 'y';
  297. dim.aggre = this.val.aggreType;
  298. }
  299. }else if(this.type === 'top'){
  300. dim.top = this.val.top;
  301. dim.topType = this.val.topType;
  302. }else if(this.type === "kpiprop"){
  303. kpi.fmt = this.val.fmt;
  304. kpi.rate = this.val.unit;
  305. }else if(this.type === 'kpifilter'){
  306. var ft = this.val.oper;
  307. var sv = this.val.value1;
  308. var ev = this.val.value2;
  309. if( !ft || !sv){
  310. delete kpi.filter;
  311. }else{
  312. var filter = {"kpi":kpi.kpi_id,"filterType":ft,"val1":Number(sv),"val2":(ev == ""?0:Number(ev))};
  313. kpi.filter = filter;
  314. }
  315. }else if(this.type === 'kpiwarning'){
  316. var pictype = this.val.wctype;
  317. var reverse = this.val.fztp?"y":"n";
  318. var logic1 = this.val.logic1;
  319. var val1 = this.val.value1;
  320. var logic2 = this.val.logic2;
  321. var val2 = this.val.value2;
  322. var pic1 = $("#ww1").attr("class");
  323. var pic2 = $("#ww2").attr("class");
  324. var pic3 = $("#ww3").attr("class");
  325. kpi.warning = {pictype:pictype,reverse:reverse,logic1:logic1,val1:val1,logic2:logic2,val2:val2,pic1:pic1,pic2:pic2,pic3:pic3}
  326. }
  327. this.show = false;
  328. let o = this.$parent;
  329. o.setUpdate();
  330. o.tableView();
  331. },
  332. clearAggre(){
  333. this.val.aggreType = null;
  334. },
  335. handleChange(idx){
  336. $("#and" + idx).text(idx === 1?this.val.value1:this.val.value2);
  337. },
  338. chgpic(){
  339. if(this.val.wctype == 1){
  340. $("#ww1").attr("class", "warning6");
  341. $("#ww2").attr("class", "warning5");
  342. $("#ww3").attr("class", "warning4");
  343. }else if(this.val.wctype == 2){
  344. $("#ww1").attr("class", "warning3");
  345. $("#ww2").attr("class", "warning2");
  346. $("#ww3").attr("class", "warning1");
  347. }
  348. },
  349. fztpfunc(){
  350. if(this.val.fztp === true){
  351. if(this.val.wctype == 1){
  352. $("#ww1").attr("class", "warning4");
  353. //$("#ww2").attr("class", "warning5");
  354. $("#ww3").attr("class", "warning6");
  355. }else if(this.val.wctype == 2){
  356. $("#ww1").attr("class", "warning1");
  357. //$("#ww2").attr("class", "warning2");
  358. $("#ww3").attr("class", "warning3");
  359. }
  360. }else{
  361. if(this.val.wctype == 1){
  362. $("#ww1").attr("class", "warning6");
  363. //$("#ww2").attr("class", "warning5");
  364. $("#ww3").attr("class", "warning4");
  365. }else if(this.val.wctype == 2){
  366. $("#ww1").attr("class", "warning3");
  367. //$("#ww2").attr("class", "warning2");
  368. $("#ww3").attr("class", "warning1");
  369. }
  370. }
  371. },
  372. clearwarning(){
  373. delete this.kpi.warning;
  374. this.show = false;
  375. let o = this.$parent;
  376. o.setUpdate();
  377. o.tableView();
  378. }
  379. },
  380. watch: {
  381. }
  382. }
  383. </script>
  384. <style lang="less" scoped>
  385. </style>