busiTimeout.vue 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372
  1. <template>
  2. <div class="container">
  3. <fullscreen :fullscreen.sync="fullscreen" class="container-box">
  4. <div class="titbox">
  5. <h2>异常数据监控</h2>
  6. <div>
  7. <i class="el-icon-download" @click="iconCli(3)"></i>
  8. <i class="el-icon-refresh" @click="iconCli(1)"></i>
  9. <i class="el-icon-full-screen" @click="iconCli(2)"></i>
  10. <!-- <i class="el-icon-folder-opened"></i>-->
  11. <!-- <i class="el-icon-view"></i>-->
  12. <!-- <i class="el-icon-more"></i>-->
  13. </div>
  14. </div>
  15. <div class="search">
  16. <mySearch :searchList="searchList" @searchInfo="searchInfo"></mySearch>
  17. </div>
  18. <div class="tabbox">
  19. <el-table height="100%" v-loading="loading" class="com-table" ref="multipleTable"
  20. :data="tableData" tooltip-effect="dark" size="small" border style="width: 100%">
  21. <el-table-column prop="region" label="地市"> </el-table-column>
  22. <el-table-column prop="channelType" label="渠道类型"></el-table-column>
  23. <el-table-column prop="opName" label="业务类型"></el-table-column>
  24. <el-table-column prop="normalTime" label="标准用时(秒)"></el-table-column>
  25. <el-table-column prop="busiTimeoutTime" label="异常业务平均用时(秒)" width="160px"></el-table-column>
  26. <el-table-column prop="busiTimeoutPercentage" label="异常用时超出比例" width="140px"></el-table-column>
  27. <el-table-column prop="busiTotal" label="总业务笔数"></el-table-column>
  28. <el-table-column prop="timeoutTotal" label="超时业务笔数"></el-table-column>
  29. <el-table-column prop="timeoutPercentage" label="超时业务量占比"></el-table-column>
  30. <el-table-column label="操作" width="220px" align="center">
  31. <template slot-scope="scope">
  32. <el-button :disabled="scope.row.region == '全省'" size="mini" type="primary" @click="dialogCheck(scope.row)">查看超时业务详情</el-button>
  33. </template>
  34. </el-table-column>
  35. </el-table>
  36. </div>
  37. </fullscreen>
  38. <el-dialog title="异常数据监控(超时业务笔数达到或超过10%)" :visible.sync="dialogStatus" width="50%" :destroy-on-close="true"
  39. :modal-append-to-body="false" :close-on-click-modal="true" >
  40. <div>
  41. <el-table
  42. height="400px"
  43. v-loading="loadingDialog"
  44. class="com-table"
  45. ref="multipleTable"
  46. :data="tableDataDialog"
  47. tooltip-effect="dark"
  48. size="small"
  49. style="width: 100%"
  50. :row-class-name="addRowId"
  51. id="rptTable"
  52. >
  53. <el-table-column prop="region" fixed label="地市"> </el-table-column>
  54. <el-table-column prop="channelType" label="渠道类型"></el-table-column>
  55. <el-table-column prop="opName" label="业务类型" width="180px"></el-table-column>
  56. <el-table-column prop="shop" label="网点" width="200px"></el-table-column>
  57. <el-table-column prop="channelCode" label="渠道编码"></el-table-column>
  58. <!-- <el-table-column prop="busiType" label="业务类型"></el-table-column> -->
  59. <el-table-column prop="normalTime" label="标准用时"></el-table-column>
  60. <el-table-column prop="timeoutTotal" label="超时业务笔数" width="120px"></el-table-column>
  61. <el-table-column prop="aveTime" label="平均实际用时" width="120px"></el-table-column>
  62. <el-table-column prop="timeoutFlag" label="是否超时"></el-table-column>
  63. </el-table>
  64. <div slot="footer" class="dialog-footer myfooter">
  65. <el-button @click="dialogExpData()">导出数据</el-button>
  66. </div>
  67. </div>
  68. </el-dialog>
  69. </div>
  70. </template>
  71. <script>
  72. import mySearch from "../../../components/search";
  73. import {export_json_to_excel} from "../vendor/Export2Excel";
  74. export default {
  75. components: {
  76. mySearch
  77. },
  78. data() {
  79. return {
  80. loading: false,
  81. subBtn: true,
  82. fullscreen: false,
  83. total: 0,
  84. pageSize: 1,
  85. tableData: [],
  86. totalData: [],
  87. totalSums: [],
  88. params: {},
  89. dialogParams:{},
  90. tooltit: "异常数据监控(超时业务笔数达到或超过10%)",
  91. searchList: [{
  92. type: 'sel',
  93. tit: '地市',
  94. value: '-',
  95. width: '32%',
  96. options: [{dataName:'全部',dataCode:'-'},
  97. {dataName:'哈尔滨',dataCode:'哈尔滨'},
  98. {dataName:'齐齐哈尔',dataCode:'齐齐哈尔'},
  99. {dataName:'牡丹江',dataCode:'牡丹江'},
  100. {dataName:'佳木斯',dataCode:'佳木斯'},
  101. {dataName:'大庆',dataCode:'大庆'},
  102. {dataName:'鸡西',dataCode:'鸡西'},
  103. {dataName:'双鸭山',dataCode:'双鸭山'},
  104. {dataName:'伊春',dataCode:'伊春'},
  105. {dataName:'七台河',dataCode:'七台河'},
  106. {dataName:'鹤岗',dataCode:'鹤岗'},
  107. {dataName:'黑河',dataCode:'黑河'},
  108. {dataName:'绥化',dataCode:'绥化'},
  109. {dataName:'大兴安岭',dataCode:'大兴安岭'}],
  110. },{
  111. type: 'sel',
  112. tit: '渠道类型',
  113. value: '自有渠道',
  114. width: '32%',
  115. options: [{dataName:'自有渠道',dataCode:'自有渠道'},
  116. {dataName:'社会渠道',dataCode:'社会渠道'}]
  117. },{
  118. type: 'sel',
  119. tit: '业务类型',
  120. value: '-',
  121. width: '32%',
  122. options: [{dataName:'全部',dataCode:'-'},
  123. {dataName:'营销活动办理',dataCode:'营销活动办理'},
  124. {dataName:'资费变更',dataCode:'资费变更'},
  125. {dataName:'普通缴费',dataCode:'普通缴费'},
  126. {dataName:'开户',dataCode:'开户'},
  127. {dataName:'补卡',dataCode:'补卡'},
  128. {dataName:'营销活动取消',dataCode:'营销活动取消'},
  129. {dataName:'智能组网加装业务受理',dataCode:'智能组网加装业务受理'},
  130. {dataName:'携号转网开户',dataCode:'携号转网开户'},
  131. {dataName:'家庭成员管理',dataCode:'家庭成员管理'},
  132. {dataName:'过户',dataCode:'过户'},
  133. {dataName:'用户密码修改',dataCode:'用户密码修改'},
  134. {dataName:'销户',dataCode:'销户'},
  135. {dataName:'流量共享业务',dataCode:'流量共享业务'},
  136. {dataName:'融合宽带业务',dataCode:'融合宽带业务'}]
  137. },
  138. {
  139. type: 'date',
  140. tit: '数据时间',
  141. value: new Date(new Date()-24*60*60*1000),
  142. width: '32%',
  143. }
  144. ],
  145. dialogStatus: false,
  146. loadingDialog: false,
  147. totalDialog: 0,
  148. pageSizeDialog: 1,
  149. tableDataDialog: [],
  150. };
  151. },
  152. methods: {
  153. //获取列表
  154. getList(v, n) {
  155. this.loading = true;
  156. this.params.orderByClause = '(case when region=\'全省\' THEN 1 else 2 END)';
  157. this.$http({
  158. url: "/market/mkBusiTimeout/queryList",
  159. method: "post",
  160. headers: {
  161. "Content-Type": "application/json"
  162. },
  163. data: this.params,
  164. }).then((res) => {
  165. console.log(res.data);
  166. this.loading = false;
  167. this.tableData = res.data;
  168. });
  169. },
  170. dialogCheck(row){
  171. this.dialogParams = {};
  172. this.loadingDialog = true;
  173. this.dialogStatus=true;
  174. this.dialogParams = {channelType:row.channelType,region:row.region,opTime:row.opTime,opName:row.opName};
  175. this.$http({
  176. url: "/market/mkBusiTimeoutDetail/queryList",
  177. method: "post",
  178. headers: {
  179. "Content-Type": "application/json"
  180. },
  181. data: this.dialogParams,
  182. }).then((res) => {
  183. console.log(res.data);
  184. this.loadingDialog = false;
  185. this.tableDataDialog = res.data;
  186. });
  187. },
  188. addRowId({row, rowIndex}){
  189. row.id = rowIndex+1;
  190. },
  191. //搜索数据
  192. searchInfo(v) {
  193. this.params = {};
  194. v[0] && v[0] !=='-' ? this.params.region = v[0] : '';
  195. v[1] ? this.params.channelType = v[1] : '';
  196. v[2] && v[2] !=='-' ? this.params.opName= v[2] : '';
  197. if(v[3]){
  198. var date = new Date(v[3]);//时间戳为10位需*1000,时间戳为13位的话不需乘1000
  199. var Y = date.getFullYear() ;
  200. var M = (date.getMonth()+1 < 10 ? '0'+(date.getMonth()+1) : date.getMonth()+1);
  201. var D = (date.getDate()+1 < 10 ? '0'+(date.getDate()) : date.getDate())
  202. this.params.opTime = Y+M+D;
  203. }else{
  204. this.$message({
  205. message: '必须选择数据日期',
  206. type: 'warning'
  207. });
  208. return;
  209. }
  210. this.getList(this.params, this.pageSize);
  211. },
  212. iconCli(v) {
  213. if (v === 1) {
  214. this.getList(this.params, this.pageSize);
  215. }
  216. if (v === 2) {
  217. this.fullscreen = !this.fullscreen;
  218. }
  219. if(v === 3){
  220. // this.exportExcel();
  221. this.expData();
  222. }
  223. },
  224. expData() {
  225. let exdata = [];
  226. this.$http({
  227. url: "/market/mkBusiTimeout/queryList",
  228. method: "post",
  229. headers: {
  230. "Content-Type": "application/json",
  231. },
  232. data: this.params,
  233. }).then((res) => {
  234. exdata = res.data;
  235. var that = this;
  236. require.ensure([], () => {
  237. const { export_json_to_excel } = require("../vendor/Export2Excel");
  238. const tHeader = [
  239. "地市",
  240. "渠道类型",
  241. "业务类型",
  242. "标准用时(秒)",
  243. "异常业务平均用时(秒)",
  244. "异常用时超出比例",
  245. "总业务笔数",
  246. "超时业务笔数",
  247. "超时业务量占比",
  248. ]; // 导出的表头名
  249. const filterVal = [
  250. "region",
  251. "channelType",
  252. "opName",
  253. "normalTime",
  254. "busiTimeoutTime",
  255. "busiTimeoutPercentage",
  256. "busiTotal",
  257. "timeoutTotal",
  258. "timeoutPercentage",
  259. ]; // 导出的表头字段名
  260. let list = exdata;
  261. const data = that.formatJson(filterVal, list);
  262. export_json_to_excel(tHeader, data, `report`); // 导出的表格名称,根据需要自己命名
  263. });
  264. });
  265. },
  266. dialogExpData() {
  267. let exdata = [];
  268. this.$http({
  269. url: "/market/mkBusiTimeoutDetail/queryList",
  270. method: "post",
  271. headers: {
  272. "Content-Type": "application/json",
  273. },
  274. data: this.dialogParams,
  275. }).then((res) => {
  276. exdata = res.data;
  277. var that = this;
  278. require.ensure([], () => {
  279. const { export_json_to_excel } = require("../vendor/Export2Excel");
  280. const tHeader = [
  281. "地市",
  282. "渠道类型",
  283. "业务类型",
  284. "网点",
  285. "渠道编码",
  286. // "业务类型",
  287. "标准用时",
  288. "超时业务笔数",
  289. "平均实际用时",
  290. "是否超时",
  291. ]; // 导出的表头名
  292. const filterVal = [
  293. "region",
  294. "channelType",
  295. "opName",
  296. "shop",
  297. "channelCode",
  298. // "busiType",
  299. "normalTime",
  300. "timeoutTotal",
  301. "aveTime",
  302. "timeoutFlag",
  303. ]; // 导出的表头字段名
  304. let list = exdata;
  305. const data = that.formatJson(filterVal, list);
  306. export_json_to_excel(tHeader, data, `report`); // 导出的表格名称,根据需要自己命名
  307. });
  308. });
  309. },
  310. formatJson(filterVal, jsonData) {
  311. return jsonData.map((v) => filterVal.map((j) => v[j]));
  312. },
  313. },
  314. created() {
  315. var date = new Date(this.searchList[3].value);//时间戳为10位需*1000,时间戳为13位的话不需乘1000
  316. var Y = date.getFullYear();
  317. var M = (date.getMonth()+1 < 10 ? '0'+(date.getMonth()+1) : date.getMonth()+1);
  318. var D = (date.getDate()+1 < 10 ? '0'+(date.getDate()) : date.getDate())
  319. this.params={opTime:Y+M+D,channelType:this.searchList[1].value}
  320. this.getList(this.params, this.pageSize);
  321. },
  322. };
  323. </script>
  324. <style>
  325. .el-input__suffix {
  326. cursor: pointer;
  327. }
  328. </style>
  329. <style scoped lang="scss">
  330. .titbox {
  331. div {
  332. float: right;
  333. i {
  334. font-size: 22px;
  335. margin-left: 20px;
  336. cursor: pointer;
  337. }
  338. }
  339. }
  340. .tabbox {
  341. margin-top: 15px;
  342. }
  343. .pageBox {
  344. text-align: right;
  345. margin-top: 10px;
  346. }
  347. </style>