checkinInfo-list.vue 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530
  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="/base/checkinInfo">租户管理</a>
  10. </el-breadcrumb-item>
  11. </el-breadcrumb>
  12. <el-divider></el-divider>
  13. <!--
  14. 要resetFields起作用,必须配置:model和prop
  15. -->
  16. <el-form
  17. ref="queryForm"
  18. :model="queryModel"
  19. inline
  20. class="demo-form-inline"
  21. >
  22. <el-form-item label="楼栋" prop="building">
  23. <el-input
  24. type="text"
  25. size="mini"
  26. v-model="queryModel.building"
  27. ></el-input>
  28. </el-form-item>
  29. <!-- <el-form-item label="企业名称" prop="name">
  30. <el-input type="text" size="mini" v-model="queryModel.name"></el-input>
  31. </el-form-item> -->
  32. <el-form-item label="费用到期" prop="feeExpirationTime">
  33. <el-date-picker v-model="queryModel.feeExpirationTime" value-format="yyyy-MM-dd" type="date" size="mini" placeholder="选择日期"></el-date-picker>
  34. </el-form-item>
  35. <el-form-item label="合同到期" prop="contractExpirationTime">
  36. <el-date-picker v-model="queryModel.contractExpirationTime" value-format="yyyy-MM-dd" type="date" size="mini" placeholder="选择日期"></el-date-picker>
  37. </el-form-item>
  38. <el-form-item>
  39. <el-button
  40. type="primary"
  41. size="mini"
  42. icon="ios-search"
  43. @click="changePage(1)"
  44. :loading="loading"
  45. >查询</el-button
  46. >&nbsp;
  47. <el-button
  48. type="info"
  49. size="mini"
  50. style="margin-left: 8px"
  51. @click="handleReset('queryForm')"
  52. >重置</el-button
  53. >&nbsp;
  54. </el-form-item>
  55. </el-form>
  56. <el-divider></el-divider>
  57. <el-row class="button-group">
  58. <el-button
  59. type="primary"
  60. size="small"
  61. plain
  62. icon="el-icon-circle-plus"
  63. @click="handleAdd"
  64. >新增</el-button
  65. >
  66. <el-button
  67. type="primary"
  68. size="small"
  69. plain
  70. icon="el-icon-circle-plus"
  71. :disabled="multipleSelection.length == 0"
  72. @click="handleBatchDelete"
  73. >删除选中项</el-button
  74. >
  75. <el-button
  76. type="primary"
  77. size="small"
  78. plain
  79. icon="el-icon-upload2"
  80. @click="batchImportVisible = true"
  81. >导入</el-button
  82. >
  83. </el-row>
  84. <el-table
  85. :data="tableData"
  86. style="min-height: 400px"
  87. v-loading="loading"
  88. stripe
  89. @sort-change="sortChange"
  90. @selection-change="handleSelectionChange"
  91. >
  92. <el-table-column type="selection" width="55"></el-table-column>
  93. <el-table-column
  94. prop="building"
  95. label="楼栋"
  96. width="180"
  97. ></el-table-column>
  98. <el-table-column prop="room" label="房号" width="180"></el-table-column>
  99. <el-table-column
  100. prop="companyName"
  101. label="企业名称"
  102. width="180"
  103. ></el-table-column>
  104. <el-table-column
  105. prop="boss"
  106. label="法人"
  107. width="180"
  108. ></el-table-column>
  109. <el-table-column
  110. prop="artificialPersonN"
  111. label="联系人"
  112. width="180"
  113. ></el-table-column>
  114. <el-table-column
  115. prop="artificialPersonPhone"
  116. label="联系电话"
  117. width="180"
  118. ></el-table-column>
  119. <el-table-column prop="area" label="面积" width="180"></el-table-column>
  120. <el-table-column
  121. prop="checkinTime"
  122. label="入驻时间"
  123. width="180"
  124. ></el-table-column>
  125. <el-table-column
  126. prop="feeExpirationTime"
  127. label="费用到期时间"
  128. width="180"
  129. ></el-table-column>
  130. <el-table-column
  131. prop="contractExpirationTime"
  132. label="合同到期时间"
  133. width="180"
  134. ></el-table-column>
  135. <el-table-column
  136. prop="leaseTerm"
  137. label="租赁期限"
  138. width="180"
  139. ></el-table-column>
  140. <el-table-column prop="wechatPay" label="微信支付" width="120">
  141. <template slot-scope="{row}">
  142. <el-switch
  143. v-model="row.wechatPay"
  144. active-color="#13ce66"
  145. inactive-color="#ff4949"
  146. @change="handlChange(row)">
  147. </el-switch>
  148. </template>
  149. </el-table-column>
  150. <el-table-column prop="aliPay" label="支付宝支付" width="120">
  151. <template slot-scope="{row}">
  152. <el-switch
  153. v-model="row.aliPay"
  154. active-color="#13ce66"
  155. inactive-color="#ff4949"
  156. @change="handlChange(row)">
  157. </el-switch>
  158. </template>
  159. </el-table-column>
  160. <el-table-column label="操作" fixed="right" width="220">
  161. <template slot-scope="{ row }">
  162. <el-button size="mini" type="primary" @click="handlePayment(row)"
  163. >收费项</el-button
  164. >
  165. <el-button size="mini" type="warning" @click="handleEdit(row)"
  166. >编辑</el-button
  167. >
  168. <el-button size="mini" type="danger" @click="handleDelete(row)"
  169. >删除</el-button
  170. >
  171. </template>
  172. </el-table-column>
  173. </el-table>
  174. <el-pagination
  175. :current-page.sync="pageIndex"
  176. :total="totalElements"
  177. :page-sizes="pageSizeList"
  178. @current-change="changePage"
  179. @size-change="pageSizeChange"
  180. layout="total, sizes, prev, pager, next, jumper"
  181. ></el-pagination>
  182. <checkinInfo-detail
  183. v-if="showModal"
  184. :businessKey="businessKey"
  185. :title="modalTitle"
  186. @close="onDetailModalClose"
  187. ></checkinInfo-detail>
  188. <checkinInfo-payment
  189. v-if="showModal1"
  190. :businessKey="businessKey"
  191. :title="modalTitle"
  192. @close="onDetailModalClose"
  193. ></checkinInfo-payment>
  194. <el-dialog
  195. title="批量导入租户"
  196. :visible.sync="batchImportVisible"
  197. :modal-append-to-body="false"
  198. style="text-align: left"
  199. :close-on-click-modal="false"
  200. >
  201. <el-form label-width="150px">
  202. <el-form-item label="模板下载">
  203. <el-link
  204. href="http://rccs.oss-cn-hangzhou.aliyuncs.com/smart/personInfo/2020/10/小鹏管家人员导入模板.xls"
  205. type="primary"
  206. target="_blank"
  207. >点击下载模板</el-link
  208. >
  209. </el-form-item>
  210. <el-form-item label="上传文件">
  211. <el-upload
  212. class="upload-demo"
  213. accept=".xls"
  214. :action="uploadUrlXls"
  215. :headers="headers"
  216. :on-preview="handleBatchImportPreview"
  217. name="uploadFile"
  218. :multiple="true"
  219. :limit="1"
  220. :on-remove="handleBatchImportRemove"
  221. :before-remove="beforeBatchImportRemove"
  222. :before-upload="beforeUpload"
  223. :on-exceed="handleBatchImportExceed"
  224. :on-success="handleBatchImportSuccess"
  225. :file-list="batchImportFileList"
  226. >
  227. <el-button size="small" type="primary" :loading="xlsLoading"
  228. >点击上传</el-button
  229. >
  230. <div slot="tip" class="el-upload__tip">
  231. 只能上传xls文件,且不超过500kb
  232. </div>
  233. </el-upload>
  234. </el-form-item>
  235. </el-form>
  236. <div slot="footer" class="dialog-footer">
  237. <el-button type="primary" @click="batchImportVisible = false"
  238. >关 闭</el-button
  239. >
  240. </div>
  241. </el-dialog>
  242. </div>
  243. </template>
  244. <script>
  245. import Constant from "@/constant";
  246. import CheckinInfoDetail from "./checkinInfo-detail";
  247. import CheckinInfoPayment from "./checkinInfo-payment";
  248. import checkinInfoApi from "@/api/base/checkinInfo";
  249. import NProgress from "nprogress"; // progress bar
  250. import "nprogress/nprogress.css"; // progress bar style
  251. import { getToken } from "@/utils/auth";
  252. export default {
  253. data() {
  254. var self = this;
  255. return {
  256. queryModel: {
  257. id: "",
  258. building: "",
  259. name: "",
  260. feeExpirationTime: "",
  261. contractExpirationTime: "",
  262. },
  263. loading: false,
  264. tableData: [],
  265. pageIndex: 1,
  266. pageSize: 10,
  267. totalPages: 0,
  268. totalElements: 0,
  269. field: "",
  270. direction: "",
  271. pageSizeList: [10, 20, 30],
  272. multipleSelection: [],
  273. showModal: false,
  274. showModal1: false,
  275. modalTitle: "",
  276. businessKey: "",
  277. batchImportVisible: false,
  278. uploadUrlXls: Constant.serverUrl + "/base/personInfo/importXls",
  279. batchImportFileList: [],
  280. xlsLoading: false,
  281. headers: {
  282. Authorization: getToken(),
  283. },
  284. };
  285. },
  286. methods: {
  287. changePage(pageIndex) {
  288. var self = this;
  289. self.loading = true;
  290. self.pageIndex = pageIndex;
  291. var formData = new FormData();
  292. formData.append("pageIndex", self.pageIndex);
  293. formData.append("pageSize", self.pageSize);
  294. formData.append("id", self.queryModel.id);
  295. formData.append("building", self.queryModel.building);
  296. formData.append("name", self.queryModel.name);
  297. formData.append("feeExpirationTime", self.queryModel.feeExpirationTime);
  298. formData.append("contractExpirationTime", self.queryModel.contractExpirationTime);
  299. if (this.field != null) {
  300. formData.append("field", this.field);
  301. }
  302. if (this.direction != null) {
  303. formData.append("direction", this.direction);
  304. }
  305. checkinInfoApi
  306. .pageList(formData)
  307. .then(function (response) {
  308. self.loading = false;
  309. var jsonData = response.data.data;
  310. self.tableData = jsonData.data;
  311. self.totalPages = jsonData.totalPages;
  312. self.totalElements = jsonData.recordsTotal;
  313. })
  314. .catch((error) => {
  315. self.loading = false;
  316. // self.$message.error(error + "");
  317. });
  318. },
  319. pageSizeChange(pageSize) {
  320. this.pageSize = pageSize;
  321. this.$nextTick(() => {
  322. this.changePage(this.pageIndex);
  323. });
  324. },
  325. sortChange(data) {
  326. this.field = data.column.field;
  327. this.direction = data.order == "ascending" ? "asc" : "desc";
  328. this.changePage(this.pageIndex);
  329. },
  330. handleSelectionChange(val) {
  331. this.multipleSelection = val;
  332. },
  333. handleReset(name) {
  334. this.$refs[name].resetFields();
  335. },
  336. handleAdd() {
  337. this.modalTitle = "新增";
  338. this.businessKey = "";
  339. this.showModal = true;
  340. },
  341. handleEdit(record) {
  342. this.modalTitle = "编辑";
  343. this.businessKey = record.id;
  344. this.showModal = true;
  345. },
  346. handlePayment(record) {
  347. this.modalTitle = "收费项";
  348. this.businessKey = record.id;
  349. this.showModal1 = true;
  350. },
  351. handleDelete(record) {
  352. var self = this;
  353. self
  354. .$confirm("是否确认删除?", "提示", {
  355. confirmButtonText: "确定",
  356. cancelButtonText: "取消",
  357. type: "warning",
  358. })
  359. .then(() => {
  360. checkinInfoApi.remove(record.id).then(function (response) {
  361. var jsonData = response.data;
  362. if (jsonData.result) {
  363. // var index = self.tableData.indexOf(record);
  364. // self.tableData.splice(index, 1);
  365. self.changePage(self.pageIndex);
  366. self.$message({
  367. type: "success",
  368. message: "删除成功!",
  369. });
  370. }
  371. });
  372. });
  373. },
  374. handleBatchDelete() {
  375. var self = this;
  376. var idList = this.multipleSelection.map((record) => {
  377. return record.id;
  378. });
  379. this.$confirm("是否确认删除选中项?", "提示", {
  380. confirmButtonText: "确定",
  381. cancelButtonText: "取消",
  382. type: "warning",
  383. }).then(() => {
  384. checkinInfoApi.batchRemove(idList).then(function (response) {
  385. var jsonData = response.data;
  386. if (jsonData.result) {
  387. self.changePage(self.pageIndex);
  388. self.$message({
  389. type: "success",
  390. message: "删除成功!",
  391. });
  392. }
  393. });
  394. });
  395. },
  396. onDetailModalClose(refreshed) {
  397. //保存成功后回调
  398. this.showModal = false;
  399. this.showModal1 = false;
  400. if (refreshed) {
  401. this.changePage(this.pageIndex);
  402. }
  403. },
  404. handlChange(record){
  405. var self = this;
  406. var formData = new FormData();
  407. self.loading = true;
  408. formData.append("id", record.id);
  409. formData.append("wechatPay", !!record.wechatPay);
  410. formData.append("aliPay", !!record.aliPay);
  411. checkinInfoApi.updateWechatPayOrAliPay(formData).then(function (response) {
  412. var jsonData = response.data;
  413. self.loading = false;
  414. if (jsonData.result) {
  415. self.changePage(self.pageIndex);
  416. }
  417. else{
  418. self.$message.error(jsonData.message + "");
  419. }
  420. });
  421. },
  422. beforeUpload(file, fileList) {
  423. //导入前判断
  424. var self = this;
  425. self.xlsLoading = true;
  426. return true;
  427. },
  428. //批量导入-上传成功
  429. handleBatchImportSuccess(response, file, fileList) {
  430. var self = this;
  431. self.xlsLoading = false;
  432. if (response.result) {
  433. self.$message.success(response.message);
  434. this.batchImportFileList = [];
  435. this.changePage(1);
  436. this.batchImportVisible = false;
  437. } else {
  438. //this.$message.error(response.message);
  439. this.batchImportFileList = [];
  440. this.changePage(1);
  441. if (response.data != null) {
  442. //下载有错误信息提示的报表
  443. //window.open(response.data);
  444. self.$message({
  445. showClose: true,
  446. dangerouslyUseHTMLString: true,
  447. message:
  448. response.message +
  449. `,<a href="${response.data}" target="_blank">点击下载未导入的数据报表</a>&nbsp;`,
  450. duration: 30000,
  451. });
  452. }
  453. }
  454. },
  455. //批量导入-预览
  456. handleBatchImportPreview(file) {
  457. console.log(file.url);
  458. },
  459. //批量导入-移除
  460. handleBatchImportRemove(file, fileList) {
  461. console.log(file, fileList);
  462. },
  463. //批量导入-移除前操作
  464. beforeBatchImportRemove(file, fileList) {
  465. console.log(file, fileList);
  466. },
  467. //批量导入-文件超出个数限制时的钩子
  468. handleBatchImportExceed(files, fileList) {
  469. this.$message.warning(
  470. `当前限制选择 3 个文件,本次选择了 ${files.length} 个文件,共选择了 ${
  471. files.length + fileList.length
  472. } 个文件`
  473. );
  474. },
  475. },
  476. mounted: function () {
  477. this.changePage(1);
  478. },
  479. components: {
  480. "checkinInfo-detail": CheckinInfoDetail,
  481. "checkinInfo-payment": CheckinInfoPayment,
  482. },
  483. };
  484. </script>
  485. <style lang="scss" scoped>
  486. .el-breadcrumb {
  487. margin: 10px;
  488. line-height: 20px;
  489. }
  490. .el-divider {
  491. margin: 5px 0;
  492. }
  493. .demo-form-inline {
  494. margin-left: 10px;
  495. text-align: left;
  496. }
  497. .button-group {
  498. margin-left: 10px;
  499. text-align: left;
  500. }
  501. </style>