warningPusher-list.vue 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416
  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. ref="formTable"
  76. :data="tableData"
  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.loadTree();
  190. },
  191. methods: {
  192. getSelectedValue(value) {
  193. this.queryModel.companyId = value;
  194. },
  195. loadTree() {
  196. var formData = new FormData();
  197. companyInfoApi.loadChildren(formData).then(resp => {
  198. var jsonData = resp.data;
  199. if (jsonData.result) {
  200. this.treeData = jsonData.data;
  201. } else {
  202. this.$message.error(jsonData.message + "");
  203. }
  204. });
  205. },
  206. loadChildren(tree, treeNode, resolve) {
  207. console.log(tree);
  208. var formData = new FormData();
  209. formData.append("parentId", tree.id);
  210. companyInfoApi.loadChildren(formData).then(resp => {
  211. var jsonData = resp.data;
  212. if (jsonData.result) {
  213. resolve(jsonData.data);
  214. } else {
  215. this.$message.error(jsonData.message + "");
  216. }
  217. });
  218. },
  219. changePage(pageIndex) {
  220. var self = this;
  221. self.loading = true;
  222. self.pageIndex = pageIndex;
  223. var formData = new FormData();
  224. formData.append("pageIndex", self.pageIndex);
  225. formData.append("pageSize", self.pageSize);
  226. formData.append("name", self.queryModel.name);
  227. formData.append("phone", self.queryModel.phone);
  228. if (self.queryModel.companyId == null) {
  229. self.queryModel.companyId = "";
  230. }
  231. formData.append("companyId", self.queryModel.companyId);
  232. if (this.field != null) {
  233. formData.append("field", this.field);
  234. }
  235. if (this.direction != null) {
  236. formData.append("direction", this.direction);
  237. }
  238. warningPusherApi
  239. .pageList(formData)
  240. .then(function(response) {
  241. self.loading = false;
  242. var jsonData = response.data.data;
  243. self.tableData = jsonData.data;
  244. self.totalPages = jsonData.totalPages;
  245. self.totalElements = jsonData.recordsTotal;
  246. //45为分页栏的高度
  247. //页面高度-列表上面的高度-分页栏高度
  248. self.tableHeight =
  249. window.innerHeight - self.$refs.formTable.$el.offsetTop - 45;
  250. })
  251. .catch(error => {
  252. self.loading = false;
  253. // self.$message.error(error + "");
  254. });
  255. },
  256. pageSizeChange(pageSize) {
  257. this.pageSize = pageSize;
  258. },
  259. sortChange(data) {
  260. this.field = data.column.field;
  261. this.direction = data.order;
  262. this.changePage(this.pageIndex);
  263. },
  264. handleSelectionChange(val) {
  265. this.multipleSelection = val;
  266. },
  267. handleReset(name) {
  268. this.$refs[name].resetFields();
  269. },
  270. handleAdd() {
  271. this.modalTitle = "新增";
  272. this.businessKey = "";
  273. this.showModal = true;
  274. },
  275. handleEdit(record) {
  276. this.modalTitle = "编辑";
  277. this.businessKey = record.id;
  278. this.showModal = true;
  279. },
  280. handleDelete(record) {
  281. var self = this;
  282. self
  283. .$confirm("是否确认删除?", "提示", {
  284. confirmButtonText: "确定",
  285. cancelButtonText: "取消",
  286. type: "warning"
  287. })
  288. .then(() => {
  289. warningPusherApi.remove(record.id).then(function(response) {
  290. var jsonData = response.data;
  291. if (jsonData.result) {
  292. // var index = self.tableData.indexOf(record);
  293. // self.tableData.splice(index, 1);
  294. self.changePage(self.pageIndex);
  295. self.$message({
  296. type: "success",
  297. message: "删除成功!"
  298. });
  299. }
  300. });
  301. });
  302. },
  303. handleBatchDelete() {
  304. var self = this;
  305. var idList = this.multipleSelection.map(record => {
  306. return record.id;
  307. });
  308. this.$confirm("是否确认删除选中项?", "提示", {
  309. confirmButtonText: "确定",
  310. cancelButtonText: "取消",
  311. type: "warning"
  312. }).then(() => {
  313. warningPusherApi.batchRemove(idList).then(function(response) {
  314. var jsonData = response.data;
  315. if (jsonData.result) {
  316. self.changePage(self.pageIndex);
  317. self.$message({
  318. type: "success",
  319. message: "删除成功!"
  320. });
  321. }
  322. });
  323. });
  324. },
  325. onDetailModalClose(refreshed) {
  326. //保存成功后回调
  327. this.showModal = false;
  328. if (refreshed) {
  329. this.changePage(this.pageIndex);
  330. }
  331. },
  332. handleBindWeChat(record) {
  333. //二维码地址
  334. //5000,id
  335. //wechat/createQrcode
  336. var self = this;
  337. var formData = new FormData();
  338. formData.append("scene_str", "5000," + record.id);
  339. wxApi.createQrcode(formData).then(function(response) {
  340. var jsonData = response.data;
  341. if (jsonData.result) {
  342. self.qrcodeImg = jsonData.data;
  343. }
  344. });
  345. },
  346. handleHideWechat(record) {
  347. var self = this;
  348. self.qrcodeImg = "";
  349. },
  350. changeMissingNoticeEnabled(row) {
  351. warningPusherApi.update(row);
  352. }
  353. },
  354. mounted: function() {
  355. var self = this;
  356. this.changePage(1);
  357. companyInfoApi.list().then(function(response) {
  358. var jsonData = response.data;
  359. if (jsonData.result) {
  360. self.companyResult = jsonData.data;
  361. }
  362. });
  363. },
  364. components: {
  365. "warningPusher-detail": WarningPusherDetail,
  366. "el-select-tree": SelectTree
  367. }
  368. };
  369. </script>
  370. <style lang="scss" scoped>
  371. .el-breadcrumb {
  372. margin: 10px;
  373. line-height: 20px;
  374. }
  375. .el-divider {
  376. margin: 5px 0;
  377. }
  378. .demo-form-inline {
  379. margin-left: 10px;
  380. text-align: left;
  381. }
  382. .button-group {
  383. margin-left: 10px;
  384. text-align: left;
  385. }
  386. </style>