personInfo-list.vue 26 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846
  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="/personInfo">人员管理</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. <div>
  18. <el-form-item label="姓名" prop="name">
  19. <el-input type="text" size="mini" v-model="queryModel.name"></el-input>
  20. </el-form-item>
  21. <el-form-item label="手机号" prop="phone">
  22. <el-input type="text" size="mini" v-model="queryModel.phone"></el-input>
  23. </el-form-item>
  24. <el-form-item label="身份证" prop="idCard">
  25. <el-input type="text" size="mini" v-model="queryModel.idCard"></el-input>
  26. </el-form-item>
  27. <el-form-item>
  28. <el-button
  29. type="primary"
  30. size="mini"
  31. icon="ios-search"
  32. @click="changePage(1)"
  33. :loading="loading"
  34. >查询</el-button>&nbsp;
  35. <el-button
  36. type="info"
  37. size="mini"
  38. style="margin-left: 8px"
  39. @click="handleReset('queryForm')"
  40. >重置</el-button>&nbsp;
  41. </el-form-item>
  42. </div>
  43. <div>
  44. <el-form-item label="所属企业" prop="companyId">
  45. <el-select
  46. v-model="queryModel.companyId"
  47. size="mini"
  48. filterable
  49. placeholder="请选择"
  50. style="width:300px"
  51. >
  52. <el-option
  53. v-for="company in companyResult"
  54. :key="company.id"
  55. :label="company.name"
  56. :value="company.id"
  57. ></el-option>
  58. </el-select>
  59. </el-form-item>
  60. </div>
  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-circle-plus"
  70. :disabled="multipleSelection.length==0"
  71. @click="handleBatchDelete"
  72. >删除选中项</el-button>
  73. <el-button
  74. type="primary"
  75. size="small"
  76. plain
  77. icon="el-icon-circle-plus"
  78. @click="batchImportVisible = true"
  79. >导入</el-button>
  80. <el-button
  81. type="primary"
  82. size="small"
  83. plain
  84. icon="el-icon-circle-plus"
  85. @click="downloadAll"
  86. >导出数据</el-button>
  87. <el-button
  88. type="primary"
  89. size="small"
  90. plain
  91. icon="el-icon-circle-plus"
  92. :disabled="multipleSelection.length==0"
  93. @click="dataSync"
  94. >数据同步</el-button>
  95. <el-button
  96. type="primary"
  97. size="small"
  98. plain
  99. icon="el-icon-circle-plus"
  100. :disabled="multipleSelection.length==0"
  101. @click="handleBatchEnabledFace"
  102. >人脸授权</el-button>
  103. <el-button
  104. type="primary"
  105. size="small"
  106. plain
  107. icon="el-icon-circle-plus"
  108. :disabled="multipleSelection.length==0"
  109. @click="batchBoundDevice = true"
  110. >绑定设备</el-button>
  111. </el-row>
  112. <el-table
  113. :data="tableData"
  114. style="min-height:400px;"
  115. v-loading="loading"
  116. stripe
  117. @sort-change="sortChange"
  118. @selection-change="handleSelectionChange"
  119. >
  120. <el-table-column type="selection" width="55"></el-table-column>
  121. <el-table-column prop="id" label="序号" width="100"></el-table-column>
  122. <el-table-column prop="companyName" label="企业" width="180"></el-table-column>
  123. <el-table-column prop="faceImageUrl" label="人员照片" width="110" fixed="left">
  124. <template slot-scope="{row}">
  125. <a :href="row.faceImageUrl" target="_blank">
  126. <el-avatar
  127. :size="60"
  128. :src="row.faceImageUrl+'?x-oss-process=image/resize,m_lfit,h_100,w_100'"
  129. :key="row.id"
  130. ></el-avatar>
  131. </a>
  132. </template>
  133. </el-table-column>
  134. <el-table-column prop="name" label="姓名" width="150" fixed="left"></el-table-column>
  135. <el-table-column prop="phone" label="手机号" width="180"></el-table-column>
  136. <el-table-column prop="idCard" label="身份证" width="200"></el-table-column>
  137. <el-table-column prop="openId" label="是否绑定公众号" width="180">
  138. <template slot-scope="{row}">{{row.openId == null ? "否" : "是"}}</template>
  139. </el-table-column>
  140. <el-table-column prop="faceBound" label="是否同步人脸信息" width="180">
  141. <template slot-scope="{row}">{{row.faceBound ? "是" : "否"}}</template>
  142. </el-table-column>
  143. <el-table-column label="人脸授权">
  144. <template slot-scope="{row}">
  145. <el-switch
  146. v-model="row.faceEnabled"
  147. @change="enabledTo(row,'face',row.faceEnabled)"
  148. active-color="#13ce66"
  149. inactive-color="#ff4949"
  150. :disabled="disabled"
  151. ></el-switch>
  152. </template>
  153. </el-table-column>
  154. <el-table-column label="刷卡授权">
  155. <template slot-scope="{row}">
  156. <el-switch
  157. v-model="row.cardEnabled"
  158. @change="enabledTo(row,'card','')"
  159. active-color="#13ce66"
  160. inactive-color="#ff4949"
  161. :disabled="disabled"
  162. ></el-switch>
  163. </template>
  164. </el-table-column>
  165. <el-table-column label="手机授权">
  166. <template slot-scope="{row}">
  167. <el-switch
  168. v-model="row.appEnabled"
  169. @change="enabledTo(row,'app','')"
  170. active-color="#13ce66"
  171. inactive-color="#ff4949"
  172. :disabled="disabled"
  173. ></el-switch>
  174. </template>
  175. </el-table-column>
  176. <!-- <el-table-column label="密码">
  177. <template slot-scope="{row}">
  178. <el-switch v-model="row.passwordEnabled" @change="enabledTo(row.id,'face')" active-color="#13ce66" inactive-color="#ff4949"></el-switch>
  179. </template>
  180. </el-table-column>-->
  181. <el-table-column label="访客授权">
  182. <template slot-scope="{row}">
  183. <el-switch
  184. v-model="row.guestEnabled"
  185. @change="enabledTo(row,'guest','')"
  186. active-color="#13ce66"
  187. inactive-color="#ff4949"
  188. :disabled="disabled"
  189. ></el-switch>
  190. </template>
  191. </el-table-column>
  192. <!-- <el-table-column prop="position1" :label="position1" width="180"></el-table-column>
  193. <el-table-column prop="position2" :label="position2" width="180"></el-table-column>
  194. <el-table-column prop="position3" :label="position3" width="180"></el-table-column>
  195. <el-table-column prop="position4" :label="position4" width="180"></el-table-column>
  196. <el-table-column prop="position5" :label="position5" width="180"></el-table-column>-->
  197. <el-table-column label="操作" width="290" fixed="right">
  198. <template slot-scope="{row}">
  199. <el-row>
  200. <el-col :span="24">
  201. <el-button size="mini" type="warning" @click="handleEdit(row)">编辑</el-button>
  202. <el-button size="mini" type="danger" @click="handleDelete(row)">删除</el-button>
  203. </el-col>
  204. </el-row>
  205. <el-row>
  206. <el-col :span="24">
  207. <el-button size="mini" type="success" @click="bindDevice(row)">绑定设备</el-button>
  208. <span v-if="row.faceBound != null && row.faceBound">
  209. &#8195;&#8195;&#8195;
  210. <el-button size="mini" type="success" :disabled="true" @click="uploadData(row)">上传数据</el-button>
  211. </span>
  212. <span v-if="row.faceBound != null && !row.faceBound">
  213. &#8195;&#8195;&#8195;
  214. <el-button size="mini" type="success" @click="uploadData(row)">上传数据</el-button>
  215. </span>
  216. &#8195;&#8195;&#8195;
  217. <el-button size="mini" type="info" @click="showBound(row)">已绑定设备</el-button>
  218. </el-col>
  219. </el-row>
  220. </template>
  221. </el-table-column>
  222. </el-table>
  223. <el-pagination
  224. :current-page.sync="pageIndex"
  225. :total="totalElements"
  226. :page-sizes="pageSizeList"
  227. @current-change="changePage"
  228. @size-change="pageSizeChange"
  229. layout="total, sizes, prev, pager, next, jumper"
  230. ></el-pagination>
  231. <personInfo-detail
  232. v-if="showModal"
  233. :businessKey="businessKey"
  234. :title="modalTitle"
  235. :companyResult="companyResult"
  236. :companyPosition1="position1"
  237. :companyPosition2="position2"
  238. :companyPosition3="position3"
  239. :companyPosition4="position4"
  240. :companyPosition5="position5"
  241. @close="onDetailModalClose"
  242. ></personInfo-detail>
  243. <personDeviceRelation-list
  244. v-if="showDeviceModal"
  245. :personId="personId"
  246. @close="onDetailModalClose"
  247. ></personDeviceRelation-list>
  248. <personDeviceRelation-BoundList
  249. v-if="showBoundModal"
  250. :personId="personId"
  251. @close="onDetailModalClose"
  252. ></personDeviceRelation-BoundList>
  253. <!--批量导入S-->
  254. <el-dialog
  255. title="批量导入人员"
  256. :visible.sync="batchImportVisible"
  257. :modal-append-to-body="false"
  258. style="text-align: left;"
  259. >
  260. <el-form label-width="150px">
  261. <el-form-item label="模板下载">
  262. <el-link
  263. href="http://rccs.oss-cn-hangzhou.aliyuncs.com/smart/companyInfo/2020/3/16170226996.xls"
  264. type="primary"
  265. target="_blank"
  266. >点击下载模板</el-link>
  267. </el-form-item>
  268. <el-form-item label="企业">
  269. <el-select
  270. v-model="uploadCompanyId"
  271. filterable
  272. placeholder="请选择"
  273. @change="changeUploadCompayId"
  274. >
  275. <el-option
  276. v-for="company in companyResult"
  277. :key="company.id"
  278. :label="company.name"
  279. :value="company.id"
  280. ></el-option>
  281. </el-select>
  282. </el-form-item>
  283. <el-form-item label="上传文件">
  284. <el-upload
  285. class="upload-demo"
  286. accept=".xls"
  287. :action="uploadUrlXls"
  288. :data="uploadXlsData"
  289. :headers="headers"
  290. :on-preview="handleBatchImportPreview"
  291. name="uploadFile"
  292. :multiple="true"
  293. :limit="1"
  294. :on-remove="handleBatchImportRemove"
  295. :before-remove="beforeBatchImportRemove"
  296. :on-exceed="handleBatchImportExceed"
  297. :on-success="handleBatchImportSuccess"
  298. :file-list="batchImportFileList"
  299. >
  300. <el-button size="small" type="primary">点击上传</el-button>
  301. <div slot="tip" class="el-upload__tip">只能上传xls文件,且不超过500kb</div>
  302. </el-upload>
  303. </el-form-item>
  304. </el-form>
  305. <div slot="footer" class="dialog-footer">
  306. <el-button type="primary" @click="batchImportVisible = false">关 闭</el-button>
  307. </div>
  308. </el-dialog>
  309. <!--批量导入E-->
  310. <!-- 批量绑定设备 -->
  311. <el-dialog
  312. title="绑定设备"
  313. :visible.sync="batchBoundDevice"
  314. :modal-append-to-body="false"
  315. style="text-align: left;"
  316. >
  317. <el-form label-width="150px">
  318. <el-form-item label="设备">
  319. <el-select v-model="boundDeviceId" filterable placeholder="请选择">
  320. <el-option
  321. v-for="devices in deviceResult"
  322. :key="devices.id"
  323. :label="devices.aliasName"
  324. :value="devices.id"
  325. ></el-option>
  326. </el-select>
  327. </el-form-item>
  328. </el-form>
  329. <div slot="footer" class="dialog-footer">
  330. <el-button @click="closeBatchBoundDevice">关 闭</el-button>
  331. <el-button type="primary" @click="handleBatchBoundDevice">确 定</el-button>
  332. </div>
  333. </el-dialog>
  334. <!-- 批量绑定设备end -->
  335. </div>
  336. </template>
  337. <script>
  338. import Constant from "@/constant";
  339. import PersonInfoDetail from "./personInfo-detail";
  340. import PersonDeviceRelationList from "./personDeviceRelation-list";
  341. import PersonDeviceRelationBoundList from "./personDeviceRelation-BoundList";
  342. import personInfoApi from "@/api/base/personInfo";
  343. import companyInfoApi from "@/api/base/companyInfo";
  344. import companyPositionApi from "@/api/base/companyPosition";
  345. import deviceInfoApi from "@/api/base/deviceInfo";
  346. import personDeviceRelationApi from "@/api/base/personDeviceRelation";
  347. import { getToken } from "@/utils/auth"; // get token from cookie
  348. import NProgress from "nprogress"; // progress bar
  349. import "nprogress/nprogress.css"; // progress bar style
  350. export default {
  351. data() {
  352. var self = this;
  353. return {
  354. queryModel: {
  355. companyId: "",
  356. name: "",
  357. phone: "",
  358. idCard: ""
  359. },
  360. loading: false,
  361. tableData: [],
  362. pageIndex: 1,
  363. pageSize: 10,
  364. totalPages: 0,
  365. totalElements: 0,
  366. field: "",
  367. direction: "",
  368. pageSizeList: [10, 20, 30],
  369. multipleSelection: [],
  370. showModal: false,
  371. modalTitle: "",
  372. businessKey: "",
  373. companyResult: "",
  374. uploadCompanyId: "",
  375. batchImportVisible: false,
  376. batchImportFileList: [],
  377. uploadUrlXls: Constant.serverUrl + "/base/personInfo/importXls",
  378. uploadXlsData: {
  379. subFolder: "company",
  380. companyId: ""
  381. },
  382. headers: {
  383. Authorization: getToken()
  384. },
  385. disabled: false,
  386. position1: "",
  387. position2: "",
  388. position3: "",
  389. position4: "",
  390. position5: "",
  391. showDeviceModal: false,
  392. showBoundModal: false,
  393. personId: "",
  394. uploadSync: [],
  395. batchBoundDevice: false,
  396. deviceResult: "",
  397. boundDeviceId: ""
  398. };
  399. },
  400. created() {
  401. var self = this;
  402. companyPositionApi.detailForCompany().then(function(response) {
  403. var jsonData = response.data.data;
  404. self.position1 = jsonData.position1Name;
  405. self.position2 = jsonData.position2Name;
  406. self.position3 = jsonData.position3Name;
  407. self.position4 = jsonData.position4Name;
  408. self.position5 = jsonData.position5Name;
  409. });
  410. },
  411. methods: {
  412. changePage(pageIndex) {
  413. var self = this;
  414. self.loading = true;
  415. self.pageIndex = pageIndex;
  416. var formData = new FormData();
  417. formData.append("pageIndex", self.pageIndex);
  418. formData.append("pageSize", self.pageSize);
  419. formData.append("companyId", self.queryModel.companyId);
  420. formData.append("name", self.queryModel.name);
  421. formData.append("phone", self.queryModel.phone);
  422. formData.append("idCard", self.queryModel.idCard);
  423. if (this.field != null) {
  424. formData.append("field", this.field);
  425. }
  426. if (this.direction != null) {
  427. formData.append("direction", this.direction);
  428. }
  429. personInfoApi
  430. .pageList(formData)
  431. .then(function(response) {
  432. self.loading = false;
  433. var jsonData = response.data.data;
  434. self.tableData = jsonData.data;
  435. self.totalPages = jsonData.totalPages;
  436. self.totalElements = jsonData.recordsTotal;
  437. })
  438. .catch(error => {
  439. self.loading = false;
  440. // self.$message.error(error + "");
  441. });
  442. },
  443. pageSizeChange(pageSize) {
  444. this.pageSize = pageSize;
  445. },
  446. sortChange(data) {
  447. this.field = data.column.field;
  448. this.direction = data.order;
  449. this.changePage(this.pageIndex);
  450. },
  451. handleSelectionChange(val) {
  452. this.multipleSelection = val;
  453. },
  454. handleReset(name) {
  455. this.$refs[name].resetFields();
  456. },
  457. handleAdd() {
  458. this.modalTitle = "新增";
  459. this.businessKey = "";
  460. this.showModal = true;
  461. },
  462. handleEdit(record) {
  463. this.modalTitle = "编辑";
  464. this.businessKey = record.id;
  465. this.showModal = true;
  466. },
  467. handleDelete(record) {
  468. var self = this;
  469. self.loading = true;
  470. self
  471. .$confirm("是否确认删除?", "提示", {
  472. confirmButtonText: "确定",
  473. cancelButtonText: "取消",
  474. type: "warning"
  475. })
  476. .then(() => {
  477. personInfoApi.remove(record.id).then(function(response) {
  478. var jsonData = response.data;
  479. self.loading = false;
  480. if (jsonData.result) {
  481. // var index = self.tableData.indexOf(record);
  482. // self.tableData.splice(index, 1);
  483. self.changePage(self.pageIndex);
  484. self.$message({
  485. type: "success",
  486. message: "删除成功!"
  487. });
  488. }
  489. });
  490. })
  491. .catch(() => {
  492. self.loading = false;
  493. });
  494. },
  495. handleBatchDelete() {
  496. var self = this;
  497. self.loading = true;
  498. var idList = this.multipleSelection.map(record => {
  499. return record.id;
  500. });
  501. this.$confirm("是否确认删除选中项?", "提示", {
  502. confirmButtonText: "确定",
  503. cancelButtonText: "取消",
  504. type: "warning"
  505. }).then(() => {
  506. personInfoApi
  507. .batchRemove(idList)
  508. .then(function(response) {
  509. var jsonData = response.data;
  510. self.loading = false;
  511. if (jsonData.result) {
  512. self.changePage(self.pageIndex);
  513. self.$message({
  514. type: "success",
  515. message: "删除成功!"
  516. });
  517. }
  518. })
  519. .catch(() => {
  520. self.loading = false;
  521. });
  522. });
  523. },
  524. onDetailModalClose(refreshed) {
  525. //保存成功后回调
  526. this.showModal = false;
  527. this.showDeviceModal = false;
  528. this.showBoundModal = false;
  529. if (refreshed) {
  530. this.changePage(this.pageIndex);
  531. }
  532. },
  533. changeUploadCompayId(value) {
  534. var self = this;
  535. self.uploadXlsData.companyId = value;
  536. },
  537. bindDevice(record) {
  538. //绑定设备
  539. this.personId = record.id;
  540. this.showDeviceModal = true;
  541. },
  542. showBound(record) {
  543. //展示绑定设备
  544. //人员信息ID
  545. this.personId = record.id;
  546. this.showBoundModal = true;
  547. },
  548. //批量导入-上传成功
  549. handleBatchImportSuccess(response, file, fileList) {
  550. console.log(response);
  551. if (response.result) {
  552. this.$message.success(response.message);
  553. this.batchImportFileList = [];
  554. this.changePage(1);
  555. this.uploadCompanyId = "";
  556. this.uploadXlsData.companyId = "";
  557. this.batchImportVisible = false;
  558. } else {
  559. //this.$message.error(response.message);
  560. this.batchImportFileList = [];
  561. this.changePage(1);
  562. this.uploadCompanyId = "";
  563. this.uploadXlsData.companyId = "";
  564. if (response.data != null) {
  565. //下载有错误信息提示的报表
  566. //window.open(response.data);
  567. this.$message({
  568. showClose: true,
  569. dangerouslyUseHTMLString: true,
  570. message:
  571. response.message +
  572. `,<a href="${response.data}" target="_blank">点击下载未导入的数据报表</a>&nbsp;`,
  573. duration: 30000
  574. });
  575. }
  576. }
  577. },
  578. //批量导入-预览
  579. handleBatchImportPreview(file) {
  580. console.log(file.url);
  581. },
  582. //批量导入-移除
  583. handleBatchImportRemove(file, fileList) {
  584. console.log(file, fileList);
  585. },
  586. //批量导入-移除前操作
  587. beforeBatchImportRemove(file, fileList) {
  588. console.log(file, fileList);
  589. },
  590. //批量导入-文件超出个数限制时的钩子
  591. handleBatchImportExceed(files, fileList) {
  592. this.$message.warning(
  593. `当前限制选择 3 个文件,本次选择了 ${
  594. files.length
  595. } 个文件,共选择了 ${files.length + fileList.length} 个文件`
  596. );
  597. },
  598. downloadAll() {
  599. //导出
  600. var self = this;
  601. var formData = new FormData();
  602. formData.append("companyId", self.queryModel.companyId);
  603. formData.append("name", self.queryModel.name);
  604. formData.append("phone", self.queryModel.phone);
  605. formData.append("idCard", self.queryModel.idCard);
  606. this.changePage(1);
  607. personInfoApi.exportXls(formData).then(function(response) {
  608. var jsonData = response.data;
  609. if (jsonData.result) {
  610. if (jsonData.data != null) {
  611. //下载有错误信息提示的报表
  612. self.$message({
  613. showClose: true,
  614. dangerouslyUseHTMLString: true,
  615. message: `<a href="${jsonData.data}" target="_blank">点击下载报表</a>&nbsp;`,
  616. duration: 30000
  617. });
  618. }
  619. }
  620. });
  621. },
  622. enabledTo(row, type, value) {
  623. var self = this;
  624. if (!self.disabled) {
  625. var formData = new FormData();
  626. formData.append("id", row.id);
  627. if ("face" == type) {
  628. personInfoApi.enabledFace(formData);
  629. } else if ("card" == type) {
  630. personInfoApi.enabledCard(formData);
  631. } else if ("app" == type) {
  632. personInfoApi.enabledApp(formData);
  633. } else if ("guest" == type) {
  634. personInfoApi.enabledGuest(formData);
  635. }
  636. self.disabled = true;
  637. setTimeout(function() {
  638. self.disabled = false;
  639. }, 1000); //一秒内不能重复点击
  640. } else {
  641. self.$message({
  642. type: "success",
  643. message: "操作过快!"
  644. });
  645. }
  646. },
  647. uploadData(record) {
  648. //同步人脸数据
  649. var self = this;
  650. self.loading = true;
  651. this.uploadSync.push(record.id);
  652. var idList = this.uploadSync;
  653. personInfoApi.dataSync(idList).then(function(response) {
  654. var jsonData = response.data;
  655. self.loading = false;
  656. if (jsonData.result) {
  657. self.changePage(self.pageIndex);
  658. self.$message({
  659. type: "success",
  660. message: "同步成功!"
  661. });
  662. } else {
  663. self.$message({
  664. type: "warning",
  665. message: jsonData.message
  666. });
  667. }
  668. });
  669. },
  670. dataSync() {
  671. //批量同步人脸
  672. var self = this;
  673. self.loading = true;
  674. var idList = this.multipleSelection.map(record => {
  675. return record.id;
  676. });
  677. this.$confirm("是否确认同步选中项?", "提示", {
  678. confirmButtonText: "确定",
  679. cancelButtonText: "取消",
  680. type: "warning"
  681. })
  682. .then(() => {
  683. personInfoApi.dataSync(idList).then(function(response) {
  684. var jsonData = response.data;
  685. self.loading = false;
  686. if (jsonData.result) {
  687. self.changePage(self.pageIndex);
  688. self.$message({
  689. type: "success",
  690. message: "同步成功!"
  691. });
  692. } else {
  693. self.$message({
  694. type: "warning",
  695. message: jsonData.message
  696. });
  697. }
  698. });
  699. })
  700. .catch(() => {
  701. self.loading = false;
  702. });
  703. },
  704. handleBatchBoundDevice() {
  705. //批量同步人脸
  706. var self = this;
  707. self.loading = true;
  708. let boundDeviceId = self.boundDeviceId;
  709. var idList = this.multipleSelection.map(record => {
  710. return record.id;
  711. });
  712. var formData = new FormData();
  713. formData.append("persons", idList);
  714. formData.append("deviceId", boundDeviceId);
  715. personDeviceRelationApi
  716. .batchBindPerson(formData)
  717. .then(function(response) {
  718. var jsonData = response.data;
  719. self.loading = false;
  720. if (jsonData.result) {
  721. self.changePage(self.pageIndex);
  722. self.batchBoundDevice = false;
  723. self.boundDeviceId = "";
  724. self.$message({
  725. type: "success",
  726. message: "绑定成功!"
  727. });
  728. } else {
  729. self.$message({
  730. type: "warning",
  731. message: jsonData.message
  732. });
  733. }
  734. });
  735. },
  736. closeBatchBoundDevice() {
  737. var self = this;
  738. self.batchBoundDevice = false;
  739. self.boundDeviceId = "";
  740. },
  741. handleBatchEnabledFace() {
  742. //批量人脸授权
  743. var self = this;
  744. self.loading = true;
  745. let boundDeviceId = self.boundDeviceId;
  746. var idList = this.multipleSelection.map(record => {
  747. return record.id;
  748. });
  749. var formData = new FormData();
  750. formData.append("ids", idList);
  751. personInfoApi.enabledFaceList(idList).then(function(response) {
  752. var jsonData = response.data;
  753. self.loading = false;
  754. if (jsonData.result) {
  755. self.changePage(self.pageIndex);
  756. self.$message({
  757. type: "success",
  758. message: "授权成功!"
  759. });
  760. } else {
  761. self.$message({
  762. type: "warning",
  763. message: jsonData.message
  764. });
  765. }
  766. });
  767. }
  768. },
  769. async mounted() {
  770. var self = this;
  771. this.changePage(1);
  772. companyInfoApi.list().then(function(response) {
  773. var jsonData = response.data;
  774. if (jsonData.result) {
  775. self.companyResult = jsonData.data;
  776. }
  777. });
  778. deviceInfoApi.list().then(function(response) {
  779. var jsonData = response.data;
  780. if (jsonData.result) {
  781. self.deviceResult = jsonData.data;
  782. }
  783. });
  784. },
  785. components: {
  786. "personInfo-detail": PersonInfoDetail,
  787. "personDeviceRelation-list": PersonDeviceRelationList,
  788. "personDeviceRelation-BoundList": PersonDeviceRelationBoundList
  789. }
  790. };
  791. </script>
  792. <style lang="scss" scoped>
  793. .el-breadcrumb {
  794. margin: 10px;
  795. line-height: 20px;
  796. }
  797. .el-divider {
  798. margin: 5px 0;
  799. }
  800. .demo-form-inline {
  801. margin-left: 10px;
  802. text-align: left;
  803. }
  804. .button-group {
  805. margin-left: 10px;
  806. text-align: left;
  807. }
  808. </style>