index.vue 19 KB

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