supervise.vue 10.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383
  1. <!-- -->
  2. <template>
  3. <div class="supervise_box">
  4. <!-- 筛选 -->
  5. <el-row>
  6. <el-col>
  7. <div class="search_box">
  8. <!-- 监督人 -->
  9. <el-select
  10. filterable
  11. v-model="input"
  12. clearable
  13. @change="searchData"
  14. placeholder="请选择监督人"
  15. size="mini"
  16. >
  17. <el-option
  18. v-for="item in conductorList"
  19. :key="item.value"
  20. :label="item.label"
  21. :value="item.value"
  22. >
  23. </el-option>
  24. </el-select>
  25. <!-- 监督形式 -->
  26. <el-select
  27. filterable
  28. v-model="input2"
  29. clearable
  30. @change="searchData"
  31. placeholder="请选择监督形式"
  32. size="mini"
  33. >
  34. <el-option
  35. v-for="item in options"
  36. :key="item.value"
  37. :label="item.label"
  38. :value="item.value"
  39. >
  40. </el-option>
  41. </el-select>
  42. <!-- 时间筛选 -->
  43. <el-date-picker
  44. size="mini"
  45. v-model="value"
  46. @change="searchData"
  47. type="daterange"
  48. range-separator="至"
  49. start-placeholder="开始日期"
  50. end-placeholder="结束日期"
  51. align="right"
  52. :editable="false"
  53. >
  54. </el-date-picker>
  55. <div class="btn_box">
  56. <el-button type="primary" size="mini" @click="searchData"
  57. >搜索</el-button
  58. >
  59. <el-button size="mini" @click="reset">重置</el-button>
  60. <el-button
  61. :disabled="btnShow"
  62. type="primary"
  63. size="mini"
  64. @click="exportData"
  65. >
  66. <i v-if="loadingShow" class="el-icon-loading"></i>
  67. 导出数据</el-button
  68. >
  69. </div>
  70. </div>
  71. </el-col>
  72. </el-row>
  73. <el-card style="margin-top: 15px">
  74. <!-- 表格 -->
  75. <el-table
  76. :data="tableData"
  77. v-loading="loading"
  78. stripe
  79. :height="48 * 13"
  80. style="width: 100%; overflow-y: auto"
  81. >
  82. <el-table-column prop="ind" label="序号" width="180"> </el-table-column>
  83. <el-table-column prop="supervisor_user" label="监督人" width="180">
  84. </el-table-column>
  85. <el-table-column prop="supervisor_type" label="监督形式" width="180">
  86. </el-table-column>
  87. <el-table-column prop="supervisor_depa" label="监督单位" width="180">
  88. </el-table-column>
  89. <el-table-column prop="supervisor_msg" label="监督情况" width="380">
  90. </el-table-column>
  91. <el-table-column prop="supervisor_time" label="监督时间" width="280">
  92. </el-table-column>
  93. <el-table-column label="操作" fixed="right">
  94. <template slot-scope="scope">
  95. <a
  96. class="reset"
  97. href="javascript:;"
  98. @click="examineDetail(scope.row)"
  99. >查看</a
  100. >
  101. </template>
  102. </el-table-column>
  103. </el-table>
  104. <!-- 分页 -->
  105. <el-pagination
  106. style="margin: 60px 0 0 0"
  107. :page-size="20"
  108. @current-change="newPage"
  109. :current-page="page"
  110. v-if="tableData.length > 0"
  111. background
  112. layout="prev, pager, next, jumper"
  113. :total="tableSum"
  114. >
  115. </el-pagination>
  116. </el-card>
  117. </div>
  118. </template>
  119. <script>
  120. export default {
  121. //import引入的组件需要注入到对象中才能使用
  122. components: {},
  123. data() {
  124. //这里存放数据
  125. return {
  126. fullHeight: document.documentElement.clientHeight - 116, //
  127. // 筛选
  128. input: "", // 监督人
  129. conductorList: [], // 监督人 - 列表
  130. input2: "", // 监督形式
  131. // 监督形式 - 列表
  132. options: [
  133. {
  134. value: "远程监督",
  135. label: "远程监督"
  136. },
  137. {
  138. value: "现场监督",
  139. label: "现场监督"
  140. }
  141. ],
  142. value: "", // 时间筛选
  143. startTime: "", // 开始时间
  144. endTime: "", // 结束时间
  145. loadingShow: false, // 导出加载
  146. // 表格
  147. tableData: [],
  148. loading: false, // 加载
  149. // 分页
  150. page: 1, // 当期页码
  151. tableSum: 0, // 总页数
  152. btnShow: false // 防止导出数据重复下载
  153. };
  154. },
  155. //监听属性 类似于data概念
  156. computed: {},
  157. //监控data中的数据变化
  158. watch: {
  159. fullHeight(val) {
  160. //监控浏览器高度变化
  161. if (!this.timer) {
  162. this.fullHeight = val;
  163. this.timer = true;
  164. let that = this;
  165. setTimeout(function() {
  166. //防止过度调用监测事件,导致卡顿
  167. that.timer = false;
  168. }, 400);
  169. }
  170. }
  171. },
  172. //方法集合
  173. methods: {
  174. //动态获取浏览器高度
  175. get_boderHeight() {
  176. const that = this;
  177. window.onresize = () => {
  178. return (() => {
  179. window.fullHeight = document.documentElement.clientHeight;
  180. that.fullHeight = window.fullHeight;
  181. })();
  182. };
  183. },
  184. // 表格
  185. tableList() {
  186. this.$axios({
  187. method: "POST",
  188. url:
  189. "/api/api_gateway?method=control_center.task.supervisor_record_list",
  190. data: this.qs.stringify({
  191. page: this.page,
  192. page_item: "20",
  193. supervisor_user_id: this.input, // 监督人id
  194. start_time: this.startTime, // 开始时间
  195. end_time: this.endTime, // 结束时间
  196. supervisor_type: this.input2 // 监督形式
  197. })
  198. })
  199. .then(res => {
  200. if (res.data.data.total_item !== 0) {
  201. var data = res.data.data;
  202. this.tableSum = data.total_item;
  203. var list = [];
  204. data.page_list.forEach((item, index) => {
  205. item.ind = index + 1;
  206. list.push(item);
  207. });
  208. this.tableData = list;
  209. }
  210. this.loading = false;
  211. })
  212. .catch(err => {
  213. this.loading = false;
  214. });
  215. },
  216. // 监督人列表
  217. conductorAxios() {
  218. this.$axios({
  219. method: "POST",
  220. url: "/api/api_gateway?method=control_center.task.task_user_list",
  221. data: this.qs.stringify({
  222. user_type: "supervisor", // 用户类型,operator(任务处理人), supervisor(任务监督人), owner(任务发布人)
  223. operator_id: "", // 已经选择的任务处理人id
  224. supervisor_id: "", // 已经选择的任务监督人id
  225. owner_id: "" // 已经选择的任务发布人id
  226. })
  227. })
  228. .then(res => {
  229. if (res.data.data.length !== 0) {
  230. var data = res.data.data;
  231. var list = [];
  232. data.forEach(item => {
  233. var obj = {};
  234. obj["value"] = item.user_id;
  235. obj["label"] = item.real_name;
  236. list.push(obj);
  237. });
  238. this.conductorList = list;
  239. }
  240. })
  241. .catch(err => {});
  242. },
  243. // 搜索
  244. searchData() {
  245. this.loading = true;
  246. this.tableData = [];
  247. this.tableList();
  248. },
  249. // 重置
  250. reset() {
  251. this.input = ""; // 监督人
  252. this.input2 = ""; // 监督形式
  253. this.value = ""; // 时间筛选
  254. this.startTime = ""; // 开始时间
  255. this.endTime = ""; // 结束时间
  256. this.loading = true;
  257. this.tableData = [];
  258. this.tableList();
  259. },
  260. // 导出数据
  261. exportData() {
  262. this.loadingShow = true;
  263. this.btnShow = true;
  264. this.$axios({
  265. method: "POST",
  266. url: "/api/api_gateway?method=control_center.task.supervisor_export",
  267. responseType: "blob"
  268. })
  269. .then(res => {
  270. this.downloadFile(res, "监督记录.xls");
  271. this.loadingShow = false;
  272. setTimeout(() => {
  273. this.btnShow = false;
  274. }, 1500);
  275. })
  276. .catch(err => {
  277. this.loadingShow = false;
  278. setTimeout(() => {
  279. this.btnShow = false;
  280. }, 1500);
  281. });
  282. },
  283. // 流文件下载
  284. downloadFile(res, name) {
  285. let link = document.createElement("a");
  286. link.href = window.URL.createObjectURL(new Blob([res.data]));
  287. link.target = "_blank";
  288. // 文件名和格式
  289. link.download = name;
  290. document.body.appendChild(link);
  291. link.click();
  292. document.body.removeChild(link);
  293. },
  294. // 分页
  295. newPage(page) {
  296. this.page = page;
  297. this.loading = true;
  298. this.tableData = []
  299. this.tableList();
  300. },
  301. // 查看
  302. examineDetail(data) {
  303. this.$router.push({
  304. path: "/index/superviseDetails",
  305. query: {
  306. id: data.id
  307. }
  308. });
  309. }
  310. },
  311. //生命周期 - 创建完成(可以访问当前this实例)
  312. created() {},
  313. //生命周期 - 挂载完成(可以访问DOM元素)
  314. mounted() {
  315. this.loading = true;
  316. this.get_boderHeight(); // 动态获取浏览器高度
  317. this.conductorAxios(); // 监督人 - 筛选列表
  318. this.tableList(); // 表格
  319. },
  320. beforeCreate() {}, //生命周期 - 创建之前
  321. beforeMount() {}, //生命周期 - 挂载之前
  322. beforeUpdate() {}, //生命周期 - 更新之前
  323. updated() {}, //生命周期 - 更新之后
  324. beforeDestroy() {}, //生命周期 - 销毁之前
  325. destroyed() {}, //生命周期 - 销毁完成
  326. activated() {} //如果页面有keep-alive缓存功能,这个函数会触发
  327. };
  328. </script>
  329. <style lang="less" scoped>
  330. .supervise_box {
  331. // 搜索
  332. .search_box {
  333. display: flex;
  334. /deep/.el-select {
  335. margin: 0 15px 0 0;
  336. }
  337. /deep/.el-input {
  338. margin: 0 15px 0 0;
  339. }
  340. .btn_box {
  341. margin: 0 0 0 15px;
  342. // width: 50%;
  343. display: flex;
  344. justify-content: start;
  345. }
  346. /deep/.el-range-editor--mini.el-input__inner {
  347. width: 20%;
  348. }
  349. }
  350. a {
  351. text-decoration: none;
  352. }
  353. .reset {
  354. color: #1890ff;
  355. }
  356. }
  357. /deep/.el-date-editor {
  358. cursor: pointer;
  359. .el-range-input {
  360. cursor: pointer;
  361. }
  362. }
  363. </style>