warningPusher-list.vue 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412
  1. <template>
  2. <div>
  3. <el-breadcrumb separator=">">
  4. <el-breadcrumb-item :to="{ path: '/' }">首页</el-breadcrumb-item>
  5. <el-breadcrumb-item>
  6. <a href="#">系统管理</a>
  7. </el-breadcrumb-item>
  8. <el-breadcrumb-item>
  9. <a href="/warningPusher">预警上报人员管理</a>
  10. </el-breadcrumb-item>
  11. </el-breadcrumb>
  12. <el-divider></el-divider>
  13. <!--
  14. 要resetFields起作用,必须配置:model和prop
  15. -->
  16. <el-form ref="queryForm" :model="queryModel" inline class="demo-form-inline">
  17. <el-form-item label="所属单位" prop="companyId">
  18. <!-- <el-select
  19. v-model="queryModel.companyId"
  20. size="mini"
  21. filterable
  22. placeholder="请选择"
  23. style="width:220px;"
  24. >
  25. <el-option
  26. v-for="company in companyResult"
  27. :key="company.id"
  28. :label="company.name"
  29. :value="company.id"
  30. ></el-option>
  31. </el-select>-->
  32. <el-select-tree
  33. :props="props"
  34. :options="companyResult"
  35. :value="queryModel.companyId"
  36. @getValue="getSelectedValue($event)"
  37. height="200"
  38. ></el-select-tree>
  39. </el-form-item>
  40. <el-form-item label="姓名" prop="name">
  41. <el-input type="text" size="mini" v-model="queryModel.name"></el-input>
  42. </el-form-item>
  43. <el-form-item label="手机号" prop="phone">
  44. <el-input type="text" size="mini" v-model="queryModel.phone"></el-input>
  45. </el-form-item>
  46. <el-form-item>
  47. <el-button
  48. type="primary"
  49. size="mini"
  50. icon="ios-search"
  51. @click="changePage(1)"
  52. :loading="loading"
  53. >查询</el-button>&nbsp;
  54. <el-button
  55. type="info"
  56. size="mini"
  57. style="margin-left: 8px"
  58. @click="handleReset('queryForm')"
  59. >重置</el-button>&nbsp;
  60. </el-form-item>
  61. </el-form>
  62. <el-divider></el-divider>
  63. <el-row class="button-group">
  64. <el-button type="primary" size="small" plain icon="el-icon-circle-plus" @click="handleAdd">新增</el-button>
  65. <el-button
  66. type="primary"
  67. size="small"
  68. plain
  69. icon="el-icon-remove"
  70. :disabled="multipleSelection.length==0"
  71. @click="handleBatchDelete"
  72. >删除选中项</el-button>
  73. </el-row>
  74. <el-table
  75. :data="tableData"
  76. style="min-height:400px;"
  77. v-loading="loading"
  78. stripe
  79. :height="tableHeight"
  80. @sort-change="sortChange"
  81. @selection-change="handleSelectionChange"
  82. >
  83. <el-table-column type="selection" width="55"></el-table-column>
  84. <el-table-column prop="name" label="姓名" width="100" fixed="left"></el-table-column>
  85. <el-table-column prop="remark" label="备注" width="150"></el-table-column>
  86. <el-table-column prop="phone" label="手机号" width="120"></el-table-column>
  87. <el-table-column prop="companyName" label="单位" width="120"></el-table-column>
  88. <el-table-column prop="temperature" label="预警触发温度" width="120"></el-table-column>
  89. <el-table-column prop="times" label="上报触发次数" width="120"></el-table-column>
  90. <el-table-column prop="openId" label="是否绑定公众号" width="120">
  91. <template slot-scope="{row}">{{row.openId == null ? "否" : "是"}}</template>
  92. </el-table-column>
  93. <el-table-column prop="missingNoticeEnabled" label="未测温提醒" width="120">
  94. <template slot-scope="{row}">
  95. <el-switch v-model="row.missingNoticeEnabled" @change="changeMissingNoticeEnabled(row)" />
  96. </template>
  97. </el-table-column>
  98. <el-table-column prop="openId" label="open_id" width="280"></el-table-column>
  99. <el-table-column label="操作" width="200" fixed="right">
  100. <template slot-scope="{row}">
  101. <el-row>
  102. <el-col>
  103. <el-link type="primary" :underline="false" @click="handleEdit(row)">编辑</el-link>-
  104. <el-link type="danger" :underline="false" @click="handleDelete(row)">删除</el-link>-
  105. <el-popover
  106. placement="right"
  107. width="400"
  108. trigger="click"
  109. @show="handleBindWeChat(row)"
  110. @hide="handleHideWechat(row)"
  111. >
  112. <el-image style="width: 400px; height: 400px" :src="qrcodeImg">
  113. <div slot="error" class="image-slot">
  114. 加载中
  115. <span class="dot">...</span>
  116. </div>
  117. </el-image>
  118. <el-link type="primary" :underline="false" slot="reference">绑定公众号</el-link>
  119. </el-popover>
  120. </el-col>
  121. </el-row>
  122. </template>
  123. </el-table-column>
  124. </el-table>
  125. <el-pagination
  126. :current-page.sync="pageIndex"
  127. :total="totalElements"
  128. :page-sizes="pageSizeList"
  129. @current-change="changePage"
  130. @size-change="pageSizeChange"
  131. layout="total, sizes, prev, pager, next, jumper"
  132. ></el-pagination>
  133. <warningPusher-detail
  134. v-if="showModal"
  135. :businessKey="businessKey"
  136. :title="modalTitle"
  137. :typeData="typeData"
  138. :companyResult="companyResult"
  139. @close="onDetailModalClose"
  140. ></warningPusher-detail>
  141. </div>
  142. </template>
  143. <script>
  144. import Constant from "@/constant";
  145. import WarningPusherDetail from "./warningPusher-detail";
  146. import warningPusherApi from "@/api/base/warningPusher";
  147. import dataDictionaryApi from "@/api/sys/dataDictionary";
  148. import companyInfoApi from "@/api/base/companyInfo";
  149. import SelectTree from "@/components/SelectTree";
  150. import wxApi from "@/api/base/wx";
  151. import NProgress from "nprogress"; // progress bar
  152. import "nprogress/nprogress.css"; // progress bar style
  153. export default {
  154. data() {
  155. var self = this;
  156. return {
  157. queryModel: {
  158. phone: "",
  159. name: "",
  160. companyId: ""
  161. },
  162. loading: false,
  163. tableData: [],
  164. pageIndex: 1,
  165. pageSize: 10,
  166. totalPages: 0,
  167. totalElements: 0,
  168. field: "",
  169. direction: "",
  170. pageSizeList: [10, 20, 30],
  171. multipleSelection: [],
  172. showModal: false,
  173. modalTitle: "",
  174. businessKey: "",
  175. typeData: [],
  176. companyResult: [],
  177. tableHeight: "",
  178. qrcodeImg: "",
  179. treeData: [],
  180. props: {
  181. // 配置项(必选)
  182. value: "id",
  183. label: "name",
  184. children: "children"
  185. }
  186. };
  187. },
  188. created() {
  189. this.tableHeight = window.innerHeight - 280;
  190. this.loadTree();
  191. },
  192. methods: {
  193. getSelectedValue(value) {
  194. this.queryModel.companyId = value;
  195. },
  196. loadTree() {
  197. var formData = new FormData();
  198. companyInfoApi.loadChildren(formData).then(resp => {
  199. var jsonData = resp.data;
  200. if (jsonData.result) {
  201. this.treeData = jsonData.data;
  202. } else {
  203. this.$message.error(jsonData.message + "");
  204. }
  205. });
  206. },
  207. loadChildren(tree, treeNode, resolve) {
  208. console.log(tree);
  209. var formData = new FormData();
  210. formData.append("parentId", tree.id);
  211. companyInfoApi.loadChildren(formData).then(resp => {
  212. var jsonData = resp.data;
  213. if (jsonData.result) {
  214. resolve(jsonData.data);
  215. } else {
  216. this.$message.error(jsonData.message + "");
  217. }
  218. });
  219. },
  220. changePage(pageIndex) {
  221. var self = this;
  222. self.loading = true;
  223. self.pageIndex = pageIndex;
  224. var formData = new FormData();
  225. formData.append("pageIndex", self.pageIndex);
  226. formData.append("pageSize", self.pageSize);
  227. formData.append("name", self.queryModel.name);
  228. formData.append("phone", self.queryModel.phone);
  229. if(self.queryModel.companyId == null ){
  230. self.queryModel.companyId = "";
  231. }
  232. formData.append("companyId", self.queryModel.companyId);
  233. if (this.field != null) {
  234. formData.append("field", this.field);
  235. }
  236. if (this.direction != null) {
  237. formData.append("direction", this.direction);
  238. }
  239. warningPusherApi
  240. .pageList(formData)
  241. .then(function(response) {
  242. self.loading = false;
  243. var jsonData = response.data.data;
  244. self.tableData = jsonData.data;
  245. self.totalPages = jsonData.totalPages;
  246. self.totalElements = jsonData.recordsTotal;
  247. })
  248. .catch(error => {
  249. self.loading = false;
  250. // self.$message.error(error + "");
  251. });
  252. },
  253. pageSizeChange(pageSize) {
  254. this.pageSize = pageSize;
  255. },
  256. sortChange(data) {
  257. this.field = data.column.field;
  258. this.direction = data.order;
  259. this.changePage(this.pageIndex);
  260. },
  261. handleSelectionChange(val) {
  262. this.multipleSelection = val;
  263. },
  264. handleReset(name) {
  265. this.$refs[name].resetFields();
  266. },
  267. handleAdd() {
  268. this.modalTitle = "新增";
  269. this.businessKey = "";
  270. this.showModal = true;
  271. },
  272. handleEdit(record) {
  273. this.modalTitle = "编辑";
  274. this.businessKey = record.id;
  275. this.showModal = true;
  276. },
  277. handleDelete(record) {
  278. var self = this;
  279. self
  280. .$confirm("是否确认删除?", "提示", {
  281. confirmButtonText: "确定",
  282. cancelButtonText: "取消",
  283. type: "warning"
  284. })
  285. .then(() => {
  286. warningPusherApi.remove(record.id).then(function(response) {
  287. var jsonData = response.data;
  288. if (jsonData.result) {
  289. // var index = self.tableData.indexOf(record);
  290. // self.tableData.splice(index, 1);
  291. self.changePage(self.pageIndex);
  292. self.$message({
  293. type: "success",
  294. message: "删除成功!"
  295. });
  296. }
  297. });
  298. });
  299. },
  300. handleBatchDelete() {
  301. var self = this;
  302. var idList = this.multipleSelection.map(record => {
  303. return record.id;
  304. });
  305. this.$confirm("是否确认删除选中项?", "提示", {
  306. confirmButtonText: "确定",
  307. cancelButtonText: "取消",
  308. type: "warning"
  309. }).then(() => {
  310. warningPusherApi.batchRemove(idList).then(function(response) {
  311. var jsonData = response.data;
  312. if (jsonData.result) {
  313. self.changePage(self.pageIndex);
  314. self.$message({
  315. type: "success",
  316. message: "删除成功!"
  317. });
  318. }
  319. });
  320. });
  321. },
  322. onDetailModalClose(refreshed) {
  323. //保存成功后回调
  324. this.showModal = false;
  325. if (refreshed) {
  326. this.changePage(this.pageIndex);
  327. }
  328. },
  329. handleBindWeChat(record) {
  330. //二维码地址
  331. //5000,id
  332. //wechat/createQrcode
  333. var self = this;
  334. var formData = new FormData();
  335. formData.append("scene_str", "5000," + record.id);
  336. wxApi.createQrcode(formData).then(function(response) {
  337. var jsonData = response.data;
  338. if (jsonData.result) {
  339. self.qrcodeImg = jsonData.data;
  340. }
  341. });
  342. },
  343. handleHideWechat(record) {
  344. var self = this;
  345. self.qrcodeImg = "";
  346. },
  347. changeMissingNoticeEnabled(row) {
  348. warningPusherApi.update(row);
  349. }
  350. },
  351. mounted: function() {
  352. var self = this;
  353. this.changePage(1);
  354. companyInfoApi.list().then(function(response) {
  355. var jsonData = response.data;
  356. if (jsonData.result) {
  357. self.companyResult = jsonData.data;
  358. }
  359. });
  360. },
  361. components: {
  362. "warningPusher-detail": WarningPusherDetail,
  363. "el-select-tree": SelectTree
  364. }
  365. };
  366. </script>
  367. <style lang="scss" scoped>
  368. .el-breadcrumb {
  369. margin: 10px;
  370. line-height: 20px;
  371. }
  372. .el-divider {
  373. margin: 5px 0;
  374. }
  375. .demo-form-inline {
  376. margin-left: 10px;
  377. text-align: left;
  378. }
  379. .button-group {
  380. margin-left: 10px;
  381. text-align: left;
  382. }
  383. </style>