companyDeviceRelation-list.vue 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373
  1. <template>
  2. <el-dialog
  3. :visible.sync="showDialog"
  4. :title="title"
  5. append-to-body
  6. :modal="true"
  7. style="text-align:left;"
  8. @close="closeDialog"
  9. :close-on-click-modal="false"
  10. width="1000px"
  11. >
  12. <div>
  13. <!--
  14. 要resetFields起作用,必须配置:model和prop
  15. -->
  16. <el-form
  17. ref="queryForm"
  18. :model="queryModel"
  19. inline
  20. class="demo-form-inline"
  21. label-width="100px"
  22. >
  23. <el-form-item label="设备编号" prop="deviceNo">
  24. <el-input type="text" size="mini" v-model="queryModel.deviceNo" ></el-input>
  25. </el-form-item>
  26. <el-form-item label="设备名称" prop="deviceName">
  27. <el-input type="text" size="mini" v-model="queryModel.deviceName" ></el-input>
  28. </el-form-item>
  29. <el-form-item>
  30. <el-button
  31. type="primary"
  32. size="mini"
  33. icon="ios-search"
  34. @click="changePage(1)"
  35. :loading="loading"
  36. >查询</el-button>&nbsp;
  37. </el-form-item>
  38. </el-form>
  39. <el-divider></el-divider>
  40. <el-row class="button-group">
  41. <el-button
  42. type="primary"
  43. size="small"
  44. plain
  45. icon="el-icon-circle-plus"
  46. :disabled="multipleSelection.length==0"
  47. @click="handleBatchBound"
  48. >批量绑定</el-button>
  49. </el-row>
  50. <el-table
  51. :data="tableData"
  52. style="min-height:400px;"
  53. v-loading="loading"
  54. stripe
  55. @sort-change="sortChange"
  56. @selection-change="handleSelectionChange"
  57. >
  58. <el-table-column type="selection" :selectable="disableSelect" width="55"></el-table-column>
  59. <el-table-column prop="deviceNo" label="设备编号" width="220"></el-table-column>
  60. <el-table-column prop="aliasName" label="设备名称" width="180"></el-table-column>
  61. <el-table-column prop="isBind" label="绑定状态" width="120">
  62. <template slot-scope="{row}">{{row.isBind == 0? "未绑定" : "已绑定"}}</template>
  63. </el-table-column>
  64. <el-table-column label="操作">
  65. <template slot-scope="{row}">
  66. <span v-if="row.isBind == 0">
  67. <el-button size="mini" type="success" @click="handleBound(row)">绑定设备</el-button>
  68. </span>
  69. <span v-else>
  70. <el-button size="mini" type="danger" @click="handleUnBound(row)">解除绑定</el-button>
  71. &nbsp;
  72. <el-button size="mini" type="primary" @click="handleSyncDevice(row,'all')">同步(所有人)</el-button>
  73. &nbsp;
  74. <el-button size="mini" type="primary" @click="handleSyncDevice(row,'bind')">同步(已绑定)</el-button>
  75. </span>
  76. </template>
  77. </el-table-column>
  78. </el-table>
  79. <el-pagination
  80. :current-page.sync="pageIndex"
  81. :total="totalElements"
  82. :page-sizes="pageSizeList"
  83. @current-change="changePage"
  84. @size-change="pageSizeChange"
  85. layout="total, sizes, prev, pager, next, jumper"
  86. ></el-pagination>
  87. <personDeviceRelation-detail
  88. v-if="showModal"
  89. :businessKey="businessKey"
  90. :title="modalTitle"
  91. @close="onDetailModalClose"
  92. ></personDeviceRelation-detail>
  93. </div>
  94. </el-dialog>
  95. </template>
  96. <script>
  97. import Constant from "@/constant";
  98. import PersonDeviceRelationDetail from "./personDeviceRelation-detail";
  99. import personDeviceRelationApi from "@/api/base/personDeviceRelation";
  100. import companyInfoApi from "@/api/base/companyInfo";
  101. import NProgress from "nprogress"; // progress bar
  102. import "nprogress/nprogress.css"; // progress bar style
  103. export default {
  104. props: ["title","companyId"],
  105. data() {
  106. var self = this;
  107. return {
  108. formModel: {},
  109. queryModel: {
  110. deviceNo: "",
  111. deviceName: "",
  112. personId: ""
  113. },
  114. tableData: [],
  115. pageIndex: 1,
  116. pageSize: 10,
  117. totalPages: 0,
  118. totalElements: 0,
  119. field: "",
  120. direction: "",
  121. pageSizeList: [10, 20, 30],
  122. multipleSelection: [],
  123. showModal: false,
  124. modalTitle: "",
  125. showDialog: true,
  126. loading: false
  127. };
  128. },
  129. methods: {
  130. closeDialog() {
  131. this.$emit("close", false);
  132. },
  133. disableSelect(row, rowIndex) {
  134. //多选按钮是否禁用
  135. if (row.isBindPerson) {
  136. return false;
  137. } else {
  138. return true;
  139. }
  140. },
  141. changePage(pageIndex) {
  142. var self = this;
  143. self.loading = true;
  144. self.pageIndex = pageIndex;
  145. var formData = new FormData();
  146. formData.append("pageIndex", self.pageIndex);
  147. formData.append("pageSize", self.pageSize);
  148. formData.append("companyId", self.companyId);
  149. formData.append("deviceNo", self.queryModel.deviceNo);
  150. formData.append("deviceName", self.queryModel.deviceName);
  151. if (this.field != null) {
  152. formData.append("field", this.field);
  153. }
  154. if (this.direction != null) {
  155. formData.append("direction", this.direction);
  156. }
  157. companyInfoApi
  158. .queryBindDeviceList(formData)
  159. .then(function(response) {
  160. self.loading = false;
  161. var jsonData = response.data.data;
  162. self.tableData = jsonData.data;
  163. self.totalPages = jsonData.totalPages;
  164. self.totalElements = jsonData.recordsTotal;
  165. })
  166. .catch(error => {
  167. self.loading = false;
  168. // self.$message.error(error + "");
  169. });
  170. },
  171. pageSizeChange(pageSize) {
  172. this.pageSize = pageSize;
  173. },
  174. sortChange(data) {
  175. this.field = data.column.field;
  176. this.direction = data.order == "ascending" ? "asc" : "desc";
  177. this.changePage(this.pageIndex);
  178. },
  179. handleSelectionChange(val) {
  180. this.multipleSelection = val;
  181. },
  182. handleReset(name) {
  183. this.$refs[name].resetFields();
  184. },
  185. handleBatchBound() {
  186. //批量绑定
  187. var self = this;
  188. var idList = this.multipleSelection.map(record => {
  189. return record.id;
  190. });
  191. this.$confirm("是否绑定?", "提示", "warning").then(result => {
  192. if (result) {
  193. self.loading = true;
  194. var formData = new FormData();
  195. formData.append("companyId", self.companyId);
  196. formData.append("deviceIds", idList);
  197. return companyInfoApi.bindDevice(formData).then(function(response) {
  198. self.loading = false;
  199. var jsonData = response.data;
  200. self.changePage(self.pageIndex);
  201. if (jsonData.result) {
  202. self.$message({
  203. message: "绑定成功!",
  204. type: "success"
  205. });
  206. } else {
  207. self.$message({
  208. message: jsonData.message + "",
  209. type: "warning"
  210. });
  211. }
  212. });
  213. }
  214. });
  215. },
  216. handleBound(record,mode) {
  217. //绑定设备
  218. var self = this;
  219. this.$confirm("是否绑定?", "提示", {
  220. confirmButtonText: "确定",
  221. cancelButtonText: "取消",
  222. type: "warning",
  223. distinguishCancelAndClose: true
  224. }).then(result => {
  225. if (result) {
  226. self.loading = true;
  227. var formData = new FormData();
  228. formData.append("companyId", self.companyId);
  229. formData.append("deviceIds", record.id);
  230. formData.append("mode", mode);
  231. return companyInfoApi.bindDevice(formData).then(function(response) {
  232. self.loading = false;
  233. var jsonData = response.data;
  234. self.changePage(self.pageIndex);
  235. if (jsonData.result) {
  236. self.$message({
  237. message: "绑定成功!",
  238. type: "success"
  239. });
  240. } else {
  241. self.$message({
  242. message: jsonData.message + "",
  243. type: "warning"
  244. });
  245. }
  246. });
  247. }
  248. });
  249. },
  250. handleUnBound(record) {
  251. //取消绑定
  252. var self = this;
  253. this.$confirm("是否解除绑定?", "提示", {
  254. confirmButtonText: "确定",
  255. cancelButtonText: "取消",
  256. type: "warning",
  257. distinguishCancelAndClose: true
  258. }).then(() => {
  259. self.loading = true;
  260. var formData = new FormData();
  261. formData.append("companyId", self.companyId);
  262. formData.append("deviceIds", record.id);
  263. return companyInfoApi.unbindDevice(formData).then(function(response) {
  264. self.loading = false;
  265. var jsonData = response.data;
  266. self.changePage(self.pageIndex);
  267. if (jsonData.result) {
  268. self.$message({
  269. message: "解绑成功!",
  270. type: "success"
  271. });
  272. } else {
  273. self.$message({
  274. message: jsonData.message + "",
  275. type: "warning"
  276. });
  277. }
  278. });
  279. });
  280. },
  281. handleSyncDevice(record,mode){
  282. //同步照片
  283. var self = this;
  284. this.$confirm("是否将单位下人员照片同步到设备?", "提示", {
  285. confirmButtonText: "确定",
  286. cancelButtonText: "取消",
  287. type: "warning",
  288. distinguishCancelAndClose: true
  289. }).then(() => {
  290. self.loading = true;
  291. var formData = new FormData();
  292. formData.append("companyId", self.companyId);
  293. formData.append("deviceId", record.id);
  294. formData.append("mode", mode);
  295. return companyInfoApi.syncDevice(formData).then(function(response) {
  296. self.loading = false;
  297. var jsonData = response.data;
  298. if (jsonData.result) {
  299. self.$message({
  300. message: "已下发同步任务" + jsonData.data + "个,请查看同步队列!",
  301. type: "success"
  302. });
  303. } else {
  304. self.$message({
  305. message: jsonData.message + "",
  306. type: "warning"
  307. });
  308. }
  309. });
  310. });
  311. },
  312. onDetailModalClose(refreshed) {
  313. //保存成功后回调
  314. this.showModal = false;
  315. if (refreshed) {
  316. this.changePage(this.pageIndex);
  317. }
  318. }
  319. },
  320. mounted: function() {
  321. this.changePage(1);
  322. },
  323. components: {
  324. "personDeviceRelation-detail": PersonDeviceRelationDetail
  325. }
  326. };
  327. </script>
  328. <style lang="scss" scoped>
  329. .el-breadcrumb {
  330. margin: 10px;
  331. line-height: 20px;
  332. }
  333. .el-divider {
  334. margin: 5px 0;
  335. }
  336. .demo-form-inline {
  337. margin-left: 10px;
  338. text-align: left;
  339. }
  340. .button-group {
  341. margin-left: 10px;
  342. text-align: left;
  343. }
  344. </style>