superviseAdmin.vue 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477
  1. <!-- -->
  2. <template>
  3. <div class="superviseAdmin_box">
  4. <!-- 筛选 -->
  5. <el-row>
  6. <el-col>
  7. <div class="search_box">
  8. <!-- 任务处理人 -->
  9. <el-select
  10. filterable
  11. :loading="loading2"
  12. v-model="input"
  13. clearable
  14. @change="searchData"
  15. @focus="selectList('operator')"
  16. placeholder="请选择任务处理人/实际处理人"
  17. size="mini"
  18. >
  19. <el-option
  20. v-for="item in conductorList"
  21. :key="item.value"
  22. :label="item.label"
  23. :value="item.value"
  24. >
  25. </el-option>
  26. </el-select>
  27. <!-- 任务发布人 -->
  28. <!-- <el-input
  29. style="width: 14%"
  30. @change="searchData"
  31. :loading="loading3"
  32. @focus="selectList('owner')"
  33. placeholder="请输入任务发布人"
  34. v-model="input2"
  35. size="mini"
  36. clearable
  37. >
  38. </el-input> -->
  39. <el-select
  40. filterable
  41. :loading="loading3"
  42. v-model="input2"
  43. clearable
  44. @change="searchData"
  45. @focus="selectList('owner')"
  46. placeholder="请选择任务发布人"
  47. size="mini"
  48. >
  49. <el-option
  50. v-for="item in options"
  51. :key="item.value"
  52. :label="item.label"
  53. :value="item.value"
  54. >
  55. </el-option>
  56. </el-select>
  57. <!-- 任务状态 -->
  58. <el-select
  59. filterable
  60. v-model="value"
  61. @change="searchData"
  62. clearable
  63. placeholder="请选择任务状态"
  64. size="mini"
  65. >
  66. <el-option
  67. v-for="item in options2"
  68. :key="item.value"
  69. :label="item.label"
  70. :value="item.value"
  71. >
  72. </el-option>
  73. </el-select>
  74. <!-- 时间筛选 -->
  75. <el-date-picker
  76. size="mini"
  77. v-model="value2"
  78. @change="searchData"
  79. type="daterange"
  80. range-separator="至"
  81. start-placeholder="开始日期"
  82. end-placeholder="结束日期"
  83. align="right"
  84. :editable="false"
  85. >
  86. </el-date-picker>
  87. <div class="btn_box">
  88. <el-button type="info" size="mini" @click="searchData"
  89. >搜索</el-button
  90. >
  91. <el-button size="mini" @click="reset">重置</el-button>
  92. </div>
  93. </div>
  94. </el-col>
  95. </el-row>
  96. <el-card style="margin-top: 15px">
  97. <!-- 表格 -->
  98. <el-table
  99. :data="tableData"
  100. v-loading="loading"
  101. stripe
  102. style="width: 100%; overflow-y: auto"
  103. :height="48 * 13"
  104. >
  105. <el-table-column prop="ind" label="序号" width="80"> </el-table-column>
  106. <el-table-column prop="task_id" label="任务编号" width="100">
  107. </el-table-column>
  108. <el-table-column prop="task_type" label="任务类型" width="180">
  109. </el-table-column>
  110. <el-table-column prop="operator_user" label="任务处理人" width="180">
  111. </el-table-column>
  112. <el-table-column prop="owner_user" label="任务发布人" width="180">
  113. </el-table-column>
  114. <el-table-column prop="supervisor_user" label="任务监督人" width="180">
  115. </el-table-column>
  116. <el-table-column
  117. prop="start_time"
  118. label="任务时间"
  119. width="180"
  120. ></el-table-column>
  121. <el-table-column
  122. prop="last_time"
  123. label="任务结束"
  124. width="180"
  125. ></el-table-column>
  126. <el-table-column prop="end_time" label="任务完成时间" width="180">
  127. <template slot-scope="scope">
  128. <span>{{ scope.row.end_time || "暂无" }}</span>
  129. </template>
  130. </el-table-column>
  131. <el-table-column prop="task_status" label="任务状态" width="180">
  132. <template slot-scope="scope">
  133. <div v-for="(item, index) in type_status" :key="index">
  134. <span
  135. v-if="item.name == scope.row.task_status"
  136. :style="'color:' + item.color + '; font-weight: 550'"
  137. >{{ scope.row.task_status }}</span
  138. >
  139. </div>
  140. </template>
  141. </el-table-column>
  142. <el-table-column label="操作" width="180" fixed="right">
  143. <template slot-scope="scope">
  144. <a
  145. class="reset"
  146. href="javascript:;"
  147. @click="examineDetail(scope.row)"
  148. >查看</a
  149. >
  150. </template>
  151. </el-table-column>
  152. </el-table>
  153. <!-- 分页 -->
  154. <el-pagination
  155. style="margin: 60px 0 0 0"
  156. :page-size="20"
  157. @current-change="newPage"
  158. :current-page="page"
  159. v-if="tableData.length > 0"
  160. background
  161. layout="prev, pager, next, jumper"
  162. :total="tableSum"
  163. >
  164. </el-pagination>
  165. </el-card>
  166. </div>
  167. </template>
  168. <script>
  169. export default {
  170. //import引入的组件需要注入到对象中才能使用
  171. components: {},
  172. data() {
  173. //这里存放数据
  174. return {
  175. fullHeight: document.documentElement.clientHeight - 116, //
  176. // 筛选
  177. input: "", // 任务处理人
  178. loading2: false,
  179. conductorList: [], // 任务处理人 - 列表
  180. input2: "", // 任务发布人
  181. loading3: false,
  182. options: [], // 任务发布人 - 列表
  183. value: "", // 任务状态
  184. options2: [
  185. {
  186. value: "未开始",
  187. label: "未开始"
  188. },
  189. {
  190. value: "处理中",
  191. label: "处理中"
  192. },
  193. {
  194. value: "已完成",
  195. label: "已完成"
  196. },
  197. {
  198. value: "未处理",
  199. label: "未处理"
  200. },
  201. {
  202. value: "逾期完成",
  203. label: "逾期完成"
  204. }
  205. ], // 任务状态 - 列表
  206. value2: "", // 时间筛选
  207. startTime: "", // 开始时间
  208. endTime: "", // 结束时间
  209. // 表格
  210. tableData: [],
  211. loading: false, // 加载
  212. // 任务状态展示
  213. type_status: [
  214. {
  215. name: "未开始",
  216. color: "#E6A23C"
  217. },
  218. {
  219. name: "处理中",
  220. color: "#E6A23C"
  221. },
  222. {
  223. name: "已完成",
  224. color: "#67C23A"
  225. },
  226. {
  227. name: "未处理",
  228. color: "#F56C6C"
  229. },
  230. {
  231. name: "逾期完成",
  232. color: "#409EFF"
  233. }
  234. ],
  235. // 分页
  236. page: 1, // 当前页码
  237. tableSum: 0 // 总页码
  238. };
  239. },
  240. //监听属性 类似于data概念
  241. computed: {},
  242. //监控data中的数据变化
  243. watch: {
  244. fullHeight(val) {
  245. //监控浏览器高度变化
  246. if (!this.timer) {
  247. this.fullHeight = val;
  248. this.timer = true;
  249. let that = this;
  250. setTimeout(function() {
  251. //防止过度调用监测事件,导致卡顿
  252. that.timer = false;
  253. }, 400);
  254. }
  255. }
  256. },
  257. //方法集合
  258. methods: {
  259. //动态获取浏览器高度
  260. get_boderHeight() {
  261. const that = this;
  262. window.onresize = () => {
  263. return (() => {
  264. window.fullHeight = document.documentElement.clientHeight;
  265. that.fullHeight = window.fullHeight;
  266. })();
  267. };
  268. },
  269. // 表格
  270. tableList() {
  271. this.$axios({
  272. method: "POST",
  273. url: "/api/api_gateway?method=control_center.task.supervisor_list",
  274. data: this.qs.stringify({
  275. page: this.page,
  276. page_item: "20",
  277. operator_user_id: this.input, // 处理人
  278. owner_user_id: this.input2, // 发布人id
  279. start_time: this.startTime, // 开始时间
  280. end_time: this.endTime, // 结束时间
  281. task_status: this.value // 任务状态
  282. })
  283. })
  284. .then(res => {
  285. if (res.data.data.total_item !== 0) {
  286. var data = res.data.data;
  287. this.tableSum = data.total_item;
  288. var list = [];
  289. data.page_list.forEach((item, index) => {
  290. item.ind = index + 1;
  291. list.push(item);
  292. });
  293. this.tableData = list;
  294. }
  295. this.loading = false;
  296. })
  297. .catch(err => {
  298. this.loading = false;
  299. });
  300. },
  301. // 搜索
  302. searchData() {
  303. if (this.value2) {
  304. this.startTime = this.formatTime(this.value2[0], "yyyy-MM-dd");
  305. this.endTime = this.formatTime(this.value2[1], "yyyy-MM-dd");
  306. } else {
  307. this.startTime = "";
  308. this.endTime = "";
  309. }
  310. this.page = 1
  311. this.tableData = [];
  312. this.loading = true;
  313. this.tableList();
  314. },
  315. // 筛选列表 - 任务处理人、任务发布人
  316. selectList(type) {
  317. if (type == "operator") {
  318. // 任务处理人
  319. var a = ""; //任务处理人
  320. var b = ""; //任务监督人
  321. var c = this.input2; //任务发布人
  322. this.loading2 = true;
  323. } else if (type == "owner") {
  324. // 任务发布人
  325. var a = this.input; //任务处理人
  326. var b = ""; //任务监督人
  327. var c = ""; //任务发布人
  328. this.loading3 = true;
  329. }
  330. this.conductorAxios(type, a, b, c);
  331. },
  332. // 筛选列表 - 处理人
  333. conductorAxios(type, a, b, c) {
  334. this.$axios({
  335. method: "POST",
  336. url: "/api/api_gateway?method=control_center.task.task_user_list",
  337. data: this.qs.stringify({
  338. user_type: type, // 用户类型,operator(任务处理人), supervisor(任务监督人), owner(任务发布人)
  339. operator_id: a, // 已经选择的任务处理人id
  340. supervisor_id: b, // 已经选择的任务监督人id
  341. owner_id: c // 已经选择的任务发布人id
  342. })
  343. })
  344. .then(res => {
  345. if (res.data.data.length !== 0) {
  346. var data = res.data.data;
  347. var list = [];
  348. data.forEach(item => {
  349. var obj = {};
  350. obj["value"] = item.user_id;
  351. obj["label"] = item.real_name;
  352. list.push(obj);
  353. });
  354. if (type == "operator") {
  355. // 任务处理人
  356. this.loading2 = false;
  357. this.conductorList = list;
  358. } else if (type == "owner") {
  359. // 任务发布人
  360. this.loading3 = false;
  361. this.options = list;
  362. }
  363. }
  364. })
  365. .catch(err => {});
  366. },
  367. // 重置
  368. reset() {
  369. this.input = ""; // 处理人
  370. this.input2 = ""; // 发布人
  371. this.value = ""; // 任务状态
  372. this.value2 = ""; // 时间筛选
  373. this.startTime = ""; // 开始时间
  374. this.endTime = ""; // 结束时间
  375. this.tableData = [];
  376. this.loading = true;
  377. this.page = 1
  378. this.tableList();
  379. },
  380. // 下页
  381. newPage(page) {
  382. this.page = page;
  383. this.tableData = [];
  384. this.loading = true;
  385. this.tableList();
  386. },
  387. // 查看
  388. examineDetail(data) {
  389. this.$router.push({
  390. path: "/index/superviseAdminDetails",
  391. query: {
  392. id: data.task_id
  393. }
  394. });
  395. }
  396. },
  397. //生命周期 - 创建完成(可以访问当前this实例)
  398. created() {},
  399. //生命周期 - 挂载完成(可以访问DOM元素)
  400. mounted() {
  401. this.loading = true;
  402. this.get_boderHeight(); // 动态获取浏览器高度
  403. this.tableList(); // 表格
  404. },
  405. beforeCreate() {}, //生命周期 - 创建之前
  406. beforeMount() {}, //生命周期 - 挂载之前
  407. beforeUpdate() {}, //生命周期 - 更新之前
  408. updated() {}, //生命周期 - 更新之后
  409. beforeDestroy() {}, //生命周期 - 销毁之前
  410. destroyed() {}, //生命周期 - 销毁完成
  411. activated() {} //如果页面有keep-alive缓存功能,这个函数会触发
  412. };
  413. </script>
  414. <style lang="less" scoped>
  415. .superviseAdmin_box {
  416. // 搜索
  417. .search_box {
  418. display: flex;
  419. /deep/.el-select {
  420. margin: 0 15px 0 0;
  421. }
  422. /deep/.el-input {
  423. margin: 0 15px 0 0;
  424. }
  425. .btn_box {
  426. margin: 0 0 0 15px;
  427. // width: 50%;
  428. display: flex;
  429. justify-content: start;
  430. }
  431. /deep/.el-range-editor--mini.el-input__inner {
  432. width: 20%;
  433. }
  434. }
  435. a {
  436. text-decoration: none;
  437. }
  438. .reset {
  439. color: #1890ff;
  440. }
  441. /deep/.el-card {
  442. overflow: hidden;
  443. overflow-y: auto;
  444. }
  445. }
  446. /deep/.el-date-editor {
  447. cursor: pointer;
  448. .el-range-input {
  449. cursor: pointer;
  450. }
  451. }
  452. /deep/.el-button--info {
  453. background-color: #409eff;
  454. border-color: #409eff;
  455. }
  456. </style>