index.vue 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681
  1. <template>
  2. <div class="app-container">
  3. <el-form
  4. :model="queryParams"
  5. ref="queryForm"
  6. :inline="true"
  7. v-show="showSearch"
  8. label-width="68px"
  9. >
  10. <el-form-item prop="vehiclenumber">
  11. <!-- <el-input
  12. v-model="queryParams.vehiclenumber"
  13. placeholder="请输入车牌号"
  14. clearable
  15. size="small"
  16. @keyup.enter.native="handleQuery"
  17. /> -->
  18. <el-select
  19. v-model="queryParams.peopleId"
  20. placeholder="请选择车辆所有人"
  21. @change="handleQuery"
  22. filterable
  23. class="input_xiala"
  24. >
  25. <el-option
  26. v-for="item in renYuans"
  27. :key="item.id"
  28. :label="item.name"
  29. :value="item.id"
  30. class="input_xiala"
  31. >
  32. </el-option>
  33. </el-select>
  34. </el-form-item>
  35. <el-form-item>
  36. <!-- <el-button
  37. type="primary"
  38. icon="el-icon-search"
  39. size="mini"
  40. @click="handleQuery"
  41. >搜索</el-button
  42. > -->
  43. <el-button icon="el-icon-refresh" size="mini" @click="resetQuery"
  44. >重置</el-button
  45. >
  46. </el-form-item>
  47. </el-form>
  48. <el-row :gutter="10" class="mb8">
  49. <el-col :span="1.5">
  50. <el-button
  51. type="primary"
  52. plain
  53. icon="el-icon-plus"
  54. size="mini"
  55. @click="handleAdd"
  56. v-hasPermi="['militaryvehicleManagement:privateCar:add']"
  57. >新增</el-button
  58. >
  59. </el-col>
  60. <el-col :span="1.5">
  61. <el-button
  62. type="success"
  63. plain
  64. icon="el-icon-edit"
  65. size="mini"
  66. :disabled="single"
  67. @click="handleUpdate"
  68. v-hasPermi="['militaryvehicleManagement:privateCar:edit']"
  69. >修改</el-button
  70. >
  71. </el-col>
  72. <el-col :span="1.5">
  73. <el-button
  74. type="danger"
  75. plain
  76. icon="el-icon-delete"
  77. size="mini"
  78. :disabled="multiple"
  79. @click="handleDelete"
  80. v-hasPermi="['militaryvehicleManagement:privateCar:remove']"
  81. >删除</el-button
  82. >
  83. </el-col>
  84. <el-col :span="1.5">
  85. <el-button
  86. type="warning"
  87. plain
  88. icon="el-icon-download"
  89. size="mini"
  90. :loading="exportLoading"
  91. @click="handleExport"
  92. v-hasPermi="['militaryvehicleManagement:privateCar:export']"
  93. >导出</el-button
  94. >
  95. </el-col>
  96. </el-row>
  97. <el-table
  98. v-loading="loading"
  99. :data="privateCarList"
  100. @selection-change="handleSelectionChange"
  101. :header-cell-style="{ background: '#003C69', color: 'white' }"
  102. >
  103. <el-table-column type="selection" width="55" align="center" />
  104. <el-table-column label="序号" align="center" prop="id">
  105. <template scope="scope">
  106. <span>{{
  107. (queryParams.pageNum - 1) * queryParams.pageSize + scope.$index + 1
  108. }}</span>
  109. </template>
  110. </el-table-column>
  111. <el-table-column label="车辆所有人" align="center" prop="peopleName" />
  112. <el-table-column label="车牌号" align="center" prop="vehiclenumber" />
  113. <el-table-column label="车辆型号" align="center" prop="vehiclemodel" />
  114. <el-table-column label="车辆颜色" align="center" prop="vehiclecolor" />
  115. <el-table-column
  116. label="车辆类别"
  117. align="center"
  118. prop="vehiclecategory"
  119. :formatter="carLei"
  120. />
  121. <el-table-column label="联系方式" align="center" prop="contactnumber" />
  122. <el-table-column
  123. label="证件类型"
  124. align="center"
  125. prop="documenttype"
  126. :formatter="zhenJian"
  127. />
  128. <el-table-column
  129. label="证件号"
  130. align="center"
  131. prop="certificatenumber"
  132. width="170"
  133. />
  134. <el-table-column label="备注" align="center" prop="remarks" />
  135. <!-- <el-table-column label="创建人" align="center" prop="adminId" />
  136. <el-table-column label="创建时间" align="center" prop="createtime" /> -->
  137. <!-- <el-table-column
  138. label="临时车辆所有人"
  139. align="center"
  140. prop="peopleName"
  141. />
  142. <el-table-column label="修改时间" align="center" prop="updatetime" />
  143. <el-table-column label="授权开始时间" align="center" prop="authStime" />
  144. <el-table-column label="授权结束时间" align="center" prop="authEtime" /> -->
  145. <el-table-column
  146. label="操作"
  147. align="center"
  148. class-name="small-padding fixed-width"
  149. >
  150. <template slot-scope="scope">
  151. <el-button
  152. size="btu"
  153. type="text"
  154. @click="handleUpdate(scope.row)"
  155. v-hasPermi="['militaryvehicleManagement:privateCar:edit']"
  156. >修改</el-button
  157. >
  158. <el-button
  159. size="btd"
  160. type="text"
  161. @click="handleDelete(scope.row)"
  162. v-hasPermi="['militaryvehicleManagement:privateCar:remove']"
  163. >删除</el-button
  164. >
  165. </template>
  166. </el-table-column>
  167. </el-table>
  168. <pagination
  169. v-show="total > 0"
  170. :total="total"
  171. :page.sync="queryParams.pageNum"
  172. :limit.sync="queryParams.pageSize"
  173. @pagination="getList"
  174. />
  175. <!-- 添加或修改私家车管理对话框 -->
  176. <el-dialog :title="title" :visible.sync="open" width="500px" append-to-body>
  177. <el-form
  178. ref="form"
  179. :model="form"
  180. :rules="rules"
  181. label-width="80px"
  182. inline
  183. >
  184. <el-form-item label="车辆类型" prop="vehiclecategory">
  185. <el-select
  186. v-model="form.vehiclecategory"
  187. placeholder="请输入车辆型号"
  188. >
  189. <el-option
  190. v-for="(item, i) in privateCar"
  191. :key="i"
  192. :label="item.dictLabel"
  193. :value="item.dictValue"
  194. class="input_xiala"
  195. >
  196. </el-option>
  197. </el-select>
  198. </el-form-item>
  199. <el-form-item label="车辆所有人" prop="peopleId">
  200. <el-select v-model="form.peopleId" placeholder="请输入车辆所有人">
  201. <el-option
  202. v-for="(item, i) in renYuan"
  203. :key="i"
  204. :label="item.name"
  205. :value="item.id"
  206. @click.native="suoYouRen(item.name)"
  207. class="input_xiala"
  208. >
  209. </el-option>
  210. </el-select>
  211. </el-form-item>
  212. <el-form-item label="车牌号" prop="vehiclenumber">
  213. <el-input v-model="form.vehiclenumber" placeholder="请输入车牌号" />
  214. </el-form-item>
  215. <el-form-item label="车辆颜色" prop="vehiclecolor">
  216. <el-input v-model="form.vehiclecolor" placeholder="请输入车辆颜色" />
  217. </el-form-item>
  218. <el-form-item label="车辆型号" prop="vehiclemodel">
  219. <el-input v-model="form.vehiclemodel" placeholder="请输入车辆型号" />
  220. </el-form-item>
  221. <el-form-item label="联系方式" prop="contactnumber">
  222. <el-input v-model="form.contactnumber" placeholder="请输入联系方式" />
  223. </el-form-item>
  224. <el-form-item label="证件类型" prop="documenttype">
  225. <el-select v-model="form.documenttype" placeholder="请选择证件类型">
  226. <el-option
  227. v-for="(item, i) in documentType"
  228. :key="i"
  229. :label="item.dictLabel"
  230. :value="item.dictValue"
  231. class="input_xiala"
  232. >
  233. </el-option>
  234. </el-select>
  235. </el-form-item>
  236. <el-form-item label="证件号" prop="certificatenumber">
  237. <el-input
  238. v-model="form.certificatenumber"
  239. placeholder="请输入证件号"
  240. />
  241. </el-form-item>
  242. <el-form-item label="授权开始时间" prop="authStime">
  243. <!-- <el-input v-model="form.authStime" placeholder="请输入授权开始时间" /> -->
  244. <el-date-picker
  245. clearable
  246. size="small"
  247. v-model="form.authStime"
  248. type="date"
  249. value-format="yyyy-MM-dd"
  250. placeholder="请输入授权开始时间"
  251. >
  252. </el-date-picker>
  253. </el-form-item>
  254. <el-form-item label="授权结束时间" prop="authEtime">
  255. <!-- <el-input v-model="form.authEtime" placeholder="请输入授权结束时间" /> -->
  256. <el-date-picker
  257. clearable
  258. size="small"
  259. v-model="form.authEtime"
  260. type="date"
  261. value-format="yyyy-MM-dd"
  262. placeholder="请输入授权结束时间"
  263. >
  264. </el-date-picker>
  265. </el-form-item>
  266. <div class="jiben">备注</div>
  267. <el-form-item prop="remarks">
  268. <el-input
  269. v-model="form.remarks"
  270. type="textarea"
  271. placeholder="请输入内容"
  272. />
  273. </el-form-item>
  274. </el-form>
  275. <div slot="footer" class="dialog-footer">
  276. <el-button type="primary" @click="submitForm">确 定</el-button>
  277. <el-button @click="cancel">取 消</el-button>
  278. </div>
  279. </el-dialog>
  280. </div>
  281. </template>
  282. <script>
  283. import {
  284. listPrivateCar,
  285. getPrivateCar,
  286. delPrivateCar,
  287. addPrivateCar,
  288. updatePrivateCar,
  289. exportPrivateCar,
  290. getRenYuanCar,
  291. } from "@/api/militaryvehicleManagement/privateCar";
  292. // 查询字典
  293. import { getDicts } from "@/api/system/dict/data";
  294. import { getAll } from "@/api/grassrootsregistration/bdglmeeting";
  295. export default {
  296. name: "PrivateCar",
  297. data() {
  298. return {
  299. // 遮罩层
  300. loading: true,
  301. // 导出遮罩层
  302. exportLoading: false,
  303. // 选中数组
  304. ids: [],
  305. // 非单个禁用
  306. single: true,
  307. // 非多个禁用
  308. multiple: true,
  309. // 显示搜索条件
  310. showSearch: true,
  311. // 总条数
  312. total: 0,
  313. // 私家车管理表格数据
  314. privateCarList: [],
  315. // 弹出层标题
  316. title: "",
  317. // 是否显示弹出层
  318. open: false,
  319. // 查询参数
  320. queryParams: {
  321. pageNum: 1,
  322. pageSize: 10,
  323. vehiclenumber: null,
  324. vehiclemodel: null,
  325. vehiclecolor: null,
  326. vehiclecategory: null,
  327. peopleId: null,
  328. peopleName: null,
  329. contactnumber: null,
  330. documenttype: null,
  331. certificatenumber: null,
  332. remarks: null,
  333. adminId: null,
  334. createtime: null,
  335. updatetime: null,
  336. authStime: null,
  337. authEtime: null,
  338. },
  339. // 表单参数
  340. form: {},
  341. // 表单校验
  342. rules: {
  343. adminId: [
  344. { required: true, message: "创建人不能为空", trigger: "blur" },
  345. ],
  346. },
  347. // 车辆类别
  348. privateCar: [],
  349. // 人员列表
  350. renYuan: [],
  351. // 证件类别
  352. documentType: [],
  353. // 外面的人员
  354. renYuans: [],
  355. };
  356. },
  357. created() {
  358. this.getList();
  359. getDicts("privateCar").then((response) => {
  360. this.privateCar = response.data;
  361. });
  362. getDicts("documentType").then((response) => {
  363. this.documentType = response.data;
  364. });
  365. this.getSuo();
  366. },
  367. methods: {
  368. // 获取搜索所有人
  369. getSuo() {
  370. getAll().then((res) => {
  371. this.renYuans = res.rows;
  372. });
  373. },
  374. // 证件类型翻译
  375. zhenJian(row, column) {
  376. var zhenJian = "";
  377. this.documentType.map((item) => {
  378. if (item.dictValue == row.documenttype) {
  379. zhenJian = item.dictLabel;
  380. }
  381. });
  382. return zhenJian;
  383. },
  384. // 车辆类别翻译
  385. carLei(row, column) {
  386. var carLei = "";
  387. this.privateCar.map((item) => {
  388. if (item.dictValue == row.vehiclecategory) {
  389. carLei = item.dictLabel;
  390. }
  391. });
  392. return carLei;
  393. },
  394. // 点击车辆所有人选中触发
  395. suoYouRen(name) {
  396. this.form.peopleName = name;
  397. },
  398. // 人员列表
  399. getRen() {
  400. getRenYuanCar().then((response) => {
  401. this.renYuan = response.rows;
  402. });
  403. },
  404. /** 查询私家车管理列表 */
  405. getList() {
  406. this.loading = true;
  407. listPrivateCar(this.queryParams).then((response) => {
  408. this.privateCarList = response.rows;
  409. this.total = response.total;
  410. this.loading = false;
  411. });
  412. },
  413. // 取消按钮
  414. cancel() {
  415. this.open = false;
  416. this.reset();
  417. },
  418. // 表单重置
  419. reset() {
  420. this.form = {
  421. id: null,
  422. vehiclenumber: null,
  423. vehiclemodel: null,
  424. vehiclecolor: null,
  425. vehiclecategory: null,
  426. peopleId: null,
  427. peopleName: null,
  428. contactnumber: null,
  429. documenttype: null,
  430. certificatenumber: null,
  431. remarks: null,
  432. adminId: null,
  433. createtime: null,
  434. updatetime: null,
  435. authStime: null,
  436. authEtime: null,
  437. };
  438. this.resetForm("form");
  439. },
  440. /** 搜索按钮操作 */
  441. handleQuery() {
  442. this.queryParams.pageNum = 1;
  443. this.getList();
  444. },
  445. /** 重置按钮操作 */
  446. resetQuery() {
  447. this.queryParams.peopleId = null;
  448. this.resetForm("queryForm");
  449. this.handleQuery();
  450. },
  451. // 多选框选中数据
  452. handleSelectionChange(selection) {
  453. this.ids = selection.map((item) => item.id);
  454. this.single = selection.length !== 1;
  455. this.multiple = !selection.length;
  456. },
  457. /** 新增按钮操作 */
  458. handleAdd() {
  459. this.getRen();
  460. this.reset();
  461. this.open = true;
  462. this.title = "添加私家车管理";
  463. },
  464. /** 修改按钮操作 */
  465. handleUpdate(row) {
  466. this.reset();
  467. this.getRen();
  468. const id = row.id || this.ids;
  469. getPrivateCar(id).then((response) => {
  470. this.form = response.data;
  471. this.open = true;
  472. this.title = "修改私家车管理";
  473. });
  474. },
  475. /** 提交按钮 */
  476. submitForm() {
  477. this.$refs["form"].validate((valid) => {
  478. if (valid) {
  479. if (this.form.id != null) {
  480. updatePrivateCar(this.form).then((response) => {
  481. this.$modal.msgSuccess("修改成功");
  482. this.open = false;
  483. this.getList();
  484. });
  485. } else {
  486. addPrivateCar(this.form).then((response) => {
  487. this.$modal.msgSuccess("新增成功");
  488. this.open = false;
  489. this.getList();
  490. });
  491. }
  492. }
  493. });
  494. },
  495. /** 删除按钮操作 */
  496. handleDelete(row) {
  497. const ids = row.id || this.ids;
  498. this.$modal
  499. .confirm('是否确认删除私家车管理编号为"' + ids + '"的数据项?')
  500. .then(function () {
  501. return delPrivateCar(ids);
  502. })
  503. .then(() => {
  504. this.getList();
  505. this.$modal.msgSuccess("删除成功");
  506. })
  507. .catch(() => {});
  508. },
  509. /** 导出按钮操作 */
  510. handleExport() {
  511. const queryParams = this.queryParams;
  512. this.$modal
  513. .confirm("是否确认导出所有私家车管理数据项?")
  514. .then(() => {
  515. this.exportLoading = true;
  516. return exportPrivateCar(queryParams);
  517. })
  518. .then((response) => {
  519. this.$download.name(response.msg);
  520. this.exportLoading = false;
  521. })
  522. .catch(() => {});
  523. },
  524. },
  525. };
  526. </script>
  527. <style scoped>
  528. /* 对话框背景颜色 */
  529. ::v-deep .el-dialog {
  530. background: #004d86 !important;
  531. width: 800px !important;
  532. }
  533. ::v-deep .el-textarea__inner {
  534. width: 610px;
  535. height: 104px;
  536. margin: auto;
  537. }
  538. ::v-deep .el-dialog__header {
  539. border-bottom: 1px solid #718a9d;
  540. }
  541. ::v-deep .el-dialog__title {
  542. color: #fff;
  543. font: 18px;
  544. }
  545. ::v-deep .el-dialog__headerbtn .el-dialog__close {
  546. color: #fff;
  547. }
  548. ::v-deep .el-form-item__label {
  549. font: 16px;
  550. color: #fff;
  551. width: 100px !important;
  552. }
  553. ::v-deep .el-input__inner {
  554. /* width: 200px !important;
  555. height: 36px; */
  556. background: transparent;
  557. color: #fff;
  558. }
  559. /* 单位框背景颜色 */
  560. ::v-deep .vue-treeselect__control {
  561. background: #004d86 !important;
  562. }
  563. /* 基本信息背景 */
  564. .jiben {
  565. width: 920px;
  566. height: 32px;
  567. background-image: url(../../../images/小标题底.png);
  568. margin-bottom: 25px;
  569. color: #fff;
  570. padding-left: 16px;
  571. line-height: 32px;
  572. }
  573. /*调整表单间距 */
  574. ::v-deep .el-form-item__content {
  575. width: 200px;
  576. }
  577. ::v-deep .el-input__inner {
  578. cursor: pointer !important;
  579. }
  580. /* 底部确定取消按钮 */
  581. ::v-deep .el-dialog__footer {
  582. padding: 30px 50px;
  583. }
  584. ::v-deep .el-dialog__body {
  585. margin: 10px 24px 20px 30px;
  586. padding-top: 20px !important;
  587. box-sizing: border-box;
  588. /* padding: 30px 12px 30px 28px; */
  589. }
  590. .contents {
  591. padding: 0px 40px !important;
  592. }
  593. /* 下拉菜单 */
  594. .el-dropdown-link {
  595. cursor: pointer;
  596. color: #409eff;
  597. }
  598. .el-icon-arrow-down {
  599. font-size: 12px;
  600. }
  601. /* 下拉菜单字体/背景颜色 */
  602. .el-select-dropdown__item.hover,
  603. .el-select-dropdown__item:hover {
  604. background-color: #004d86;
  605. color: #fff;
  606. }
  607. .el-select-dropdown__item {
  608. color: #fff;
  609. }
  610. /* 时间选择 */
  611. ::v-deep .el-input--small .el-input__inner {
  612. width: 200px;
  613. height: 36px;
  614. line-height: 36px;
  615. }
  616. .el-date-editor.el-input {
  617. width: 200px;
  618. height: 36px;
  619. margin-right: 48px;
  620. }
  621. ::v-deep .el-date-editor.el-input .el-input__inner {
  622. height: 36px;
  623. line-height: 36px;
  624. }
  625. /* 单位框背景颜色 */
  626. ::v-deep .vue-treeselect__control {
  627. background: #004d86 !important;
  628. color: #fff;
  629. }
  630. /* 单位下拉菜单选中字体颜色 */
  631. ::v-deep .vue-treeselect__single-value {
  632. color: #fff !important;
  633. }
  634. /* 分页按钮 */
  635. ::v-deep .el-pagination.is-background .el-pager li {
  636. background-color: #004d86;
  637. color: #fff;
  638. }
  639. ::v-deep .el-pagination.is-background .btn-next {
  640. background-color: #004d86;
  641. color: #fff;
  642. }
  643. /* 底部确定取消按钮 */
  644. ::v-deep .el-dialog__footer {
  645. padding: 18px 50px;
  646. margin-right: 42px;
  647. }
  648. ::v-deep .el-dialog__body {
  649. padding: 30px 63px;
  650. }
  651. /* 小手样式 */
  652. ::v-deep .el-table__cell {
  653. cursor: pointer;
  654. }
  655. .el-button--mini {
  656. width: 80px !important;
  657. border: 1px solid transparent;
  658. padding: 3px 8px;
  659. font-size: 14px;
  660. line-height: 1.5;
  661. border-radius: 3px;
  662. color: #fff;
  663. background-color: #1890ff;
  664. }
  665. /* 调整输入框提示文字颜色 */
  666. ::v-deep .vue-treeselect__placeholder {
  667. color: #bdbdbd4f !important;
  668. }
  669. ::v-deep input::-webkit-input-placeholder {
  670. color: #bdbdbd4f !important;
  671. }
  672. ::v-deep input:-moz-placeholder {
  673. color: #bdbdbd4f !important;
  674. }
  675. </style>