warningPusher-list.vue 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417
  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. v-model="queryModel.companyId"
  36. height="200"
  37. ></el-select-tree>
  38. </el-form-item>
  39. <el-form-item label="姓名" prop="name">
  40. <el-input type="text" size="mini" v-model="queryModel.name"></el-input>
  41. </el-form-item>
  42. <el-form-item label="手机号" prop="phone">
  43. <el-input type="text" size="mini" v-model="queryModel.phone"></el-input>
  44. </el-form-item>
  45. <el-form-item>
  46. <el-button
  47. type="primary"
  48. size="mini"
  49. icon="ios-search"
  50. @click="changePage(1)"
  51. :loading="loading"
  52. >查询</el-button>&nbsp;
  53. <el-button
  54. type="info"
  55. size="mini"
  56. style="margin-left: 8px"
  57. @click="handleReset('queryForm')"
  58. >重置</el-button>&nbsp;
  59. </el-form-item>
  60. </el-form>
  61. <el-divider></el-divider>
  62. <el-row class="button-group">
  63. <el-button type="primary" size="small" plain icon="el-icon-circle-plus" @click="handleAdd">新增</el-button>
  64. <el-button
  65. type="primary"
  66. size="small"
  67. plain
  68. icon="el-icon-remove"
  69. :disabled="multipleSelection.length==0"
  70. @click="handleBatchDelete"
  71. >删除选中项</el-button>
  72. </el-row>
  73. <el-table
  74. ref="formTable"
  75. :data="tableData"
  76. v-loading="loading"
  77. stripe
  78. :height="tableHeight"
  79. @sort-change="sortChange"
  80. @selection-change="handleSelectionChange"
  81. >
  82. <el-table-column type="selection" width="55"></el-table-column>
  83. <el-table-column prop="name" label="姓名" width="100" fixed="left"></el-table-column>
  84. <el-table-column prop="remark" label="备注" width="150"></el-table-column>
  85. <el-table-column prop="phone" label="手机号" width="120"></el-table-column>
  86. <el-table-column prop="companyName" label="单位" width="120"></el-table-column>
  87. <el-table-column prop="temperature" label="预警触发温度" width="120"></el-table-column>
  88. <el-table-column prop="times" label="上报触发次数" width="120"></el-table-column>
  89. <el-table-column prop="openId" label="是否绑定公众号" width="120">
  90. <template slot-scope="{row}">{{row.openId == null ? "否" : "是"}}</template>
  91. </el-table-column>
  92. <el-table-column prop="missingNoticeEnabled" label="未测温提醒" width="120">
  93. <template slot-scope="{row}">
  94. <el-switch v-model="row.missingNoticeEnabled" @change="changeMissingNoticeEnabled(row)" />
  95. </template>
  96. </el-table-column>
  97. <el-table-column prop="openId" label="open_id" width="280"></el-table-column>
  98. <el-table-column label="操作" width="200" fixed="right">
  99. <template slot-scope="{row}">
  100. <el-row>
  101. <el-col>
  102. <el-link type="primary" :underline="false" @click="handleEdit(row)">编辑</el-link>-
  103. <el-link type="danger" :underline="false" @click="handleDelete(row)">删除</el-link>-
  104. <el-popover
  105. placement="right"
  106. width="400"
  107. trigger="click"
  108. @show="handleBindWeChat(row)"
  109. @hide="handleHideWechat(row)"
  110. >
  111. <el-image style="width: 400px; height: 400px" :src="qrcodeImg">
  112. <div slot="error" class="image-slot">
  113. 加载中
  114. <span class="dot">...</span>
  115. </div>
  116. </el-image>
  117. <el-link type="primary" :underline="false" slot="reference">绑定公众号</el-link>
  118. </el-popover>
  119. </el-col>
  120. </el-row>
  121. </template>
  122. </el-table-column>
  123. </el-table>
  124. <el-pagination
  125. :current-page.sync="pageIndex"
  126. :total="totalElements"
  127. :page-sizes="pageSizeList"
  128. @current-change="changePage"
  129. @size-change="pageSizeChange"
  130. layout="total, sizes, prev, pager, next, jumper"
  131. ></el-pagination>
  132. <warningPusher-detail
  133. v-if="showModal"
  134. :businessKey="businessKey"
  135. :title="modalTitle"
  136. :typeData="typeData"
  137. :companyResult="companyResult"
  138. @close="onDetailModalClose"
  139. ></warningPusher-detail>
  140. </div>
  141. </template>
  142. <script>
  143. import Constant from "@/constant";
  144. import WarningPusherDetail from "./warningPusher-detail";
  145. import warningPusherApi from "@/api/base/warningPusher";
  146. import dataDictionaryApi from "@/api/sys/dataDictionary";
  147. import companyInfoApi from "@/api/base/companyInfo";
  148. import SelectTree from "@/components/SelectTree";
  149. import wxApi from "@/api/base/wx";
  150. import pageUtil from "@/utils/page";
  151. import NProgress from "nprogress"; // progress bar
  152. import "nprogress/nprogress.css"; // progress bar style
  153. export default {
  154. name: "BaseWarningPusherList",
  155. data() {
  156. var self = this;
  157. return {
  158. queryModel: {
  159. phone: "",
  160. name: "",
  161. companyId: ""
  162. },
  163. loading: false,
  164. tableData: [],
  165. pageIndex: 1,
  166. pageSize: 10,
  167. totalPages: 0,
  168. totalElements: 0,
  169. field: "",
  170. direction: "",
  171. pageSizeList: [10, 20, 30],
  172. multipleSelection: [],
  173. showModal: false,
  174. modalTitle: "",
  175. businessKey: "",
  176. typeData: [],
  177. companyResult: [],
  178. tableHeight: 400,
  179. qrcodeImg: "",
  180. treeData: [],
  181. props: {
  182. // 配置项(必选)
  183. value: "id",
  184. label: "name",
  185. children: "children"
  186. }
  187. };
  188. },
  189. created() {
  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 == "ascending" ? "asc" : "desc";
  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. setTimeout(()=>{
  361. this.tableHeight = pageUtil.autoAdjustHeight(this.$refs.formTable.$el);
  362. },1000);
  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>