relation_list.vue 21 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739
  1. <template>
  2. <div class="app-container">
  3. <!-- 筛选条件 -->
  4. <div>
  5. <el-form
  6. ref="screenForm"
  7. :model="screenForm"
  8. label-width="70px"
  9. size="small"
  10. label-position="left"
  11. >
  12. <el-row :gutter="20">
  13. <el-col :xs="24" :sm="12" :lg="6">
  14. <el-form-item label="产品名称" prop="materialName">
  15. <el-select placeholder="请选择产品品类" v-model="screenForm.name">
  16. <el-option label="默认" value=""></el-option>
  17. <el-option
  18. v-for="item in materialLis"
  19. :label="item.name"
  20. :value="item.name"
  21. :key="item.id"
  22. ></el-option>
  23. </el-select>
  24. </el-form-item>
  25. </el-col>
  26. <el-col :xs="24" :sm="12" :lg="6">
  27. <el-form-item label="产品型号" prop="type">
  28. <el-input
  29. placeholder="请输入产品型号"
  30. v-model="screenForm.type"
  31. ></el-input>
  32. </el-form-item>
  33. </el-col>
  34. <el-col :xs="24" :sm="12" :lg="6">
  35. <el-form-item label="套机编码" prop="number">
  36. <el-input
  37. placeholder="请输入套机编码"
  38. v-model="screenForm.number"
  39. ></el-input>
  40. </el-form-item>
  41. </el-col>
  42. <el-col :xs="24" :sm="12" :lg="6">
  43. <el-form-item label="产品体积" prop="volume">
  44. <el-input
  45. placeholder="请输入产品体积"
  46. v-model="screenForm.volume"
  47. ></el-input>
  48. </el-form-item>
  49. </el-col>
  50. <el-col :xs="24" :sm="12" :lg="6">
  51. <el-form-item label="外机名称" prop="outsideName">
  52. <el-input
  53. placeholder="请输入外机名称"
  54. v-model="screenForm.outsideName"
  55. ></el-input>
  56. </el-form-item>
  57. </el-col>
  58. <el-col :xs="24" :sm="12" :lg="6">
  59. <el-form-item label="外机型号" prop="nickname">
  60. <el-input
  61. placeholder="请输入外机型号"
  62. v-model="screenForm.outsideType"
  63. ></el-input>
  64. </el-form-item>
  65. </el-col>
  66. <el-col :xs="24" :sm="12" :lg="6">
  67. <el-form-item label="外机编码" prop="outsideNumber">
  68. <el-input
  69. placeholder="请输入内机编码"
  70. v-model="screenForm.outsideNumber"
  71. ></el-input>
  72. </el-form-item>
  73. </el-col>
  74. <el-col :xs="24" :sm="12" :lg="6">
  75. <el-form-item label="内机名称" prop="innerName">
  76. <el-input
  77. placeholder="请输入内机名称"
  78. v-model="screenForm.innerName"
  79. ></el-input>
  80. </el-form-item>
  81. </el-col>
  82. <el-col :xs="24" :sm="12" :lg="6">
  83. <el-form-item label="内机型号" prop="innerType">
  84. <el-input
  85. placeholder="请输入内机型号"
  86. v-model="screenForm.innerType"
  87. ></el-input>
  88. </el-form-item>
  89. </el-col>
  90. <el-col :xs="24" :sm="12" :lg="6">
  91. <el-form-item label="内机编码" prop="innerNumber">
  92. <el-input
  93. placeholder="请输入内机编码"
  94. v-model="screenForm.innerNumber"
  95. ></el-input>
  96. </el-form-item>
  97. </el-col>
  98. <el-col :xs="24" :sm="24" :lg="12" class="tr">
  99. <el-form-item label="">
  100. <el-button size="small" @click="resetScreenForm">清空</el-button>
  101. <el-button size="small" type="primary" @click="submitScreenForm"
  102. >搜索</el-button
  103. >
  104. </el-form-item>
  105. </el-col>
  106. </el-row>
  107. </el-form>
  108. </div>
  109. <!-- 按钮 -->
  110. <div class="btn-group clearfix">
  111. <div class="fl">
  112. <el-button
  113. type="primary"
  114. size="small"
  115. @click="(showDialogForm = true), (type = 1), hanleMachine()"
  116. >新增</el-button
  117. >
  118. <el-popconfirm
  119. confirm-button-text="好的"
  120. cancel-button-text="不用了"
  121. icon="el-icon-info"
  122. icon-color="red"
  123. title="内容确定删除吗?"
  124. @onConfirm="hanleDelete"
  125. >
  126. <el-button
  127. type="primary"
  128. size="small"
  129. slot="reference"
  130. class="el-popover-left"
  131. >删除</el-button
  132. >
  133. </el-popconfirm>
  134. </div>
  135. <div class="fr">
  136. <el-button type="primary" size="small">导入</el-button>
  137. <el-button type="primary" size="small" @click="handleExport"
  138. >导出</el-button
  139. >
  140. <el-button type="primary" @click="hanlePrint" size="small"
  141. >打印</el-button
  142. >
  143. </div>
  144. </div>
  145. <div class="mymain-container">
  146. <!-- 列表 -->
  147. <div class="table">
  148. <el-table
  149. v-loading="listLoading"
  150. :data="dataList"
  151. element-loading-text="Loading"
  152. border
  153. fit
  154. highlight-current-row
  155. @select-all="hanleSelectAll"
  156. @select="hanleSelectAll"
  157. stripe
  158. >
  159. <el-table-column type="selection" align="center"></el-table-column>
  160. <el-table-column
  161. align="center"
  162. label="产品名称"
  163. prop="materialName"
  164. min-width="160"
  165. show-overflow-tooltip
  166. ></el-table-column>
  167. <el-table-column
  168. align="center"
  169. label="产品型号"
  170. prop="productModel"
  171. min-width="160"
  172. show-overflow-tooltip
  173. ></el-table-column>
  174. <el-table-column
  175. align="center"
  176. label="套机编码"
  177. prop="composeNumber"
  178. min-width="160"
  179. show-overflow-tooltip
  180. ></el-table-column>
  181. <el-table-column
  182. align="center"
  183. label="体积"
  184. prop="productVolume"
  185. min-width="160"
  186. show-overflow-tooltip
  187. ></el-table-column>
  188. <el-table-column
  189. align="center"
  190. label="内机编码"
  191. prop="innerMachineNumber"
  192. min-width="160"
  193. show-overflow-tooltip
  194. ></el-table-column>
  195. <el-table-column
  196. align="center"
  197. label="外机编码"
  198. prop="outsideMachineNumber"
  199. min-width="160"
  200. show-overflow-tooltip
  201. ></el-table-column>
  202. <el-table-column
  203. align="center"
  204. label="配件1"
  205. prop="parts1"
  206. min-width="160"
  207. show-overflow-tooltip
  208. ></el-table-column>
  209. <el-table-column
  210. align="center"
  211. label="配件2"
  212. prop="parts2"
  213. min-width="160"
  214. show-overflow-tooltip
  215. ></el-table-column>
  216. <el-table-column
  217. align="center"
  218. label="创建人"
  219. prop="createBy"
  220. min-width="160"
  221. show-overflow-tooltip
  222. ></el-table-column>
  223. <el-table-column
  224. align="center"
  225. label="创建时间"
  226. prop="createTime"
  227. min-width="160"
  228. show-overflow-tooltip
  229. ></el-table-column>
  230. <el-table-column
  231. align="center"
  232. label="更新人"
  233. prop="updateBy"
  234. min-width="160"
  235. show-overflow-tooltip
  236. ></el-table-column>
  237. <el-table-column
  238. align="center"
  239. label="更新时间"
  240. prop="updateTime"
  241. min-width="160"
  242. show-overflow-tooltip
  243. ></el-table-column>
  244. <el-table-column
  245. align="center"
  246. label="操作"
  247. min-width="160"
  248. show-overflow-tooltip
  249. >
  250. <template slot-scope="scope">
  251. <el-button
  252. type="text"
  253. class="textColor"
  254. @click="editFn(scope.row.id, scope.row)"
  255. >编辑</el-button
  256. >
  257. <el-popconfirm
  258. confirm-button-text="好的"
  259. cancel-button-text="不用了"
  260. icon="el-icon-info"
  261. icon-color="red"
  262. title="内容确定删除吗?"
  263. @onConfirm="hanleDelete(scope.row.id)"
  264. >
  265. <el-button
  266. slot="reference"
  267. type="text"
  268. class="textColor el-popover-left"
  269. >删除</el-button
  270. >
  271. </el-popconfirm>
  272. </template>
  273. </el-table-column>
  274. </el-table>
  275. </div>
  276. <!-- 分页 -->
  277. <div class="fr">
  278. <el-pagination
  279. @size-change="handleSizeChange"
  280. @current-change="handleCurrentChange"
  281. :current-page="currentPage"
  282. :page-sizes="[10, 20, 30, 50]"
  283. :page-size="10"
  284. layout="total, sizes, prev, pager, next, jumper"
  285. :total="listTotal"
  286. >
  287. </el-pagination>
  288. </div>
  289. </div>
  290. <!-- 弹窗 -->
  291. <el-dialog
  292. title="产品信息"
  293. :visible.sync="showDialogForm"
  294. width="70%"
  295. :show-close="false"
  296. :close-on-click-modal="false"
  297. >
  298. <el-form ref="form" :model="diaLogForm" label-width="80px">
  299. <el-row :gutter="20">
  300. <el-col :span="12" :offset="0">
  301. <el-form-item label="产品名称">
  302. <el-select
  303. placeholder="选择名称"
  304. @change="hanleName"
  305. v-model="diaLogForm.materialId"
  306. >
  307. <el-option
  308. v-for="item in materialLis"
  309. :label="item.name"
  310. :value="item.id"
  311. :key="item.id"
  312. ></el-option>
  313. </el-select>
  314. </el-form-item>
  315. <el-form-item label="产品型号">
  316. <el-input v-model="diaLogForm.productModel"></el-input>
  317. </el-form-item>
  318. <el-form-item label="套机编码">
  319. <el-input v-model="diaLogForm.productNumber"></el-input>
  320. </el-form-item>
  321. <el-form-item label="产品体积">
  322. <el-input v-model="diaLogForm.productVolume"></el-input>
  323. </el-form-item>
  324. </el-col>
  325. <el-col :span="12" :offset="0">
  326. <el-row>
  327. <el-col :span="22" type="flex">
  328. <el-form-item label="类型">
  329. <el-select
  330. v-model="diaLogForm.type"
  331. @change="hanleType"
  332. placeholder="请选择类型"
  333. >
  334. <el-option
  335. v-for="item in DistType"
  336. :key="item.dictCode"
  337. :label="item.dictValue"
  338. :value="item.dictCode"
  339. >
  340. </el-option>
  341. </el-select> </el-form-item
  342. ></el-col>
  343. <el-col :span="2">
  344. <el-button type="primary" @click="hanleAddData"
  345. >+</el-button
  346. ></el-col
  347. >
  348. </el-row>
  349. <div v-for="(item, index) in diaLogForm.items" :key="index">
  350. <el-form-item label="编码">
  351. <el-select
  352. v-model="item.number"
  353. placeholder="请选择编码"
  354. @change="hanleCode($event, index)"
  355. >
  356. <el-option
  357. v-for="item in machineList"
  358. :key="item.id"
  359. :label="item.number"
  360. :value="item.id"
  361. >
  362. </el-option>
  363. </el-select>
  364. </el-form-item>
  365. <el-form-item label="名称" prop="">
  366. <el-input v-model="item.name" placeholder=""></el-input>
  367. </el-form-item>
  368. <el-form-item label="型号">
  369. <el-input v-model="item.model" placeholder=""></el-input>
  370. </el-form-item>
  371. <el-form-item label="体积">
  372. <el-input v-model="item.volume" placeholder=""></el-input>
  373. </el-form-item>
  374. </div>
  375. </el-col>
  376. </el-row>
  377. </el-form>
  378. <div slot="footer" class="dialog-footer">
  379. <el-button @click="(showDialogForm = false), resetInfo()"
  380. >取 消</el-button
  381. >
  382. <el-button type="primary" @click="hanleInfo">确 定</el-button>
  383. </div>
  384. </el-dialog>
  385. </div>
  386. </template>
  387. <script>
  388. import Mixin from "@/mixin/index";
  389. import { downloadFiles } from "@/utils/util";
  390. import {
  391. getProductList,
  392. getProductEdit,
  393. getProductDel,
  394. getProductAdd,
  395. getMachineLlist,
  396. getMaterialList,
  397. getDistList,
  398. } from "@/api/basic_data/material";
  399. export default {
  400. mixins: [Mixin],
  401. data() {
  402. return {
  403. currentPage: 1, // 当前页码
  404. pageSize: 10, // 每页数量
  405. listTotal: 0, // 列表总数
  406. options: [
  407. {
  408. value: "选项1",
  409. label: "1",
  410. },
  411. {
  412. value: "选项2",
  413. label: "2",
  414. },
  415. {
  416. value: "选项3",
  417. label: "3",
  418. },
  419. {
  420. value: "选项4",
  421. label: "4",
  422. },
  423. {
  424. value: "选项5",
  425. label: "5",
  426. },
  427. ],
  428. diaLogForm: {
  429. adminCompanyId: null,
  430. productNumber: "",
  431. id: null,
  432. items: [
  433. {
  434. id: "",
  435. innerOutsideMachineId: "",
  436. machineConfigureId: "",
  437. parentId: "",
  438. model: "",
  439. name: "",
  440. number: "",
  441. type: "",
  442. volume: "",
  443. },
  444. ],
  445. materialId: null,
  446. productModel: "",
  447. productVolume: 0,
  448. type: "",
  449. },
  450. showDialogForm: false,
  451. dataList: [
  452. {
  453. name: "新风机",
  454. number: "DSAFSAF232312321",
  455. code: "DSAFSAF232312321",
  456. volume: "23M^3",
  457. inCode: "DSAFSAF232312321",
  458. outCode: "DSAFSAF232312321",
  459. partsOne: "",
  460. partsTwo: "",
  461. create: "admin",
  462. createDate: "2022-09-12",
  463. update: "admin",
  464. updateDate: "2022-09-12",
  465. },
  466. {
  467. name: "新风机",
  468. number: "DSAFSAF232312321",
  469. code: "DSAFSAF232312321",
  470. volume: "23M^3",
  471. inCode: "DSAFSAF232312321",
  472. outCode: "DSAFSAF232312321",
  473. partsOne: "",
  474. partsTwo: "",
  475. create: "admin",
  476. createDate: "2022-09-12",
  477. update: "admin",
  478. updateDate: "2022-09-12",
  479. },
  480. {
  481. name: "新风机",
  482. number: "DSAFSAF232312321",
  483. code: "DSAFSAF232312321",
  484. volume: "23M^3",
  485. inCode: "DSAFSAF232312321",
  486. outCode: "DSAFSAF232312321",
  487. partsOne: "",
  488. partsTwo: "",
  489. create: "admin",
  490. createDate: "2022-09-12",
  491. update: "admin",
  492. updateDate: "2022-09-12",
  493. },
  494. {
  495. name: "新风机",
  496. number: "DSAFSAF232312321",
  497. code: "DSAFSAF232312321",
  498. volume: "23M^3",
  499. inCode: "DSAFSAF232312321",
  500. outCode: "DSAFSAF232312321",
  501. partsOne: "",
  502. partsTwo: "",
  503. create: "admin",
  504. createDate: "2022-09-12",
  505. update: "admin",
  506. updateDate: "2022-09-12",
  507. },
  508. ],
  509. screenForm: {
  510. innerName: "",
  511. innerNumber: "",
  512. innerType: "",
  513. name: "",
  514. number: "",
  515. outsideName: "",
  516. outsideNumber: "",
  517. outsideType: "",
  518. type: "",
  519. volume: "",
  520. },
  521. type: null,
  522. machineList: [],
  523. machinePei: {
  524. currentPage: 1,
  525. pageSize: 10,
  526. name: "",
  527. number: "",
  528. type: "",
  529. volume: "",
  530. },
  531. materialLis: {},
  532. typeList: [],
  533. DistType: [],
  534. machineConfigureId: "",
  535. };
  536. },
  537. mounted() {
  538. this.getMaterMacList();
  539. },
  540. methods: {
  541. hanleAddData() {
  542. this.diaLogForm.items.push({
  543. id: "",
  544. innerOutsideMachineId: "",
  545. machineConfigureId: "",
  546. parentId: "",
  547. model: "",
  548. name: "",
  549. number: "",
  550. type: "",
  551. volume: "",
  552. });
  553. },
  554. getMaterMacList() {
  555. const params = {
  556. pageNum: 1,
  557. pageSize: 10,
  558. keyword: "",
  559. };
  560. getMaterialList(params).then((res) => {
  561. this.materialLis = res.data.records;
  562. });
  563. const params2 = {
  564. pageNum: this.currentPage,
  565. pageSize: this.pageSize,
  566. keyword: "",
  567. };
  568. getMachineLlist(params2).then((res) => {
  569. this.typeList = res.data.records;
  570. });
  571. },
  572. hanleType(e) {
  573. let params2 = {
  574. pageNum: this.machinePei.currentPage,
  575. pageSize: this.machinePei.pageSize,
  576. model: this.machinePei.model,
  577. name: this.machinePei.name,
  578. number: this.machinePei.number,
  579. type: e,
  580. volume: this.machinePei.volume,
  581. };
  582. getMachineLlist(params2).then((res) => {
  583. this.machineList = res.data.records;
  584. console.log(1111);
  585. });
  586. },
  587. hanleCode(e, i) {
  588. this.machineList.find((l) => {
  589. if (l.id == e) {
  590. this.$set(this.diaLogForm.items, i, {
  591. id: "",
  592. machineConfigureId: l.id,
  593. parentId: "",
  594. innerOutsideMachineId: l.id,
  595. model: l.model,
  596. name: l.name,
  597. number: l.number,
  598. type: l.type,
  599. volume: l.volume,
  600. });
  601. return;
  602. }
  603. });
  604. },
  605. hanleName(e) {
  606. this.materialLis.find((k) => {
  607. if (k.id == e) {
  608. console.log(k.number, 4546);
  609. this.diaLogForm.productModel = k.specification;
  610. this.diaLogForm.productNumber = k.number;
  611. this.diaLogForm.volume = k.volume;
  612. return;
  613. }
  614. });
  615. },
  616. getList() {
  617. this.listLoading = true;
  618. let params = {
  619. pageNum: this.currentPage,
  620. pageSize: this.pageSize,
  621. innerName: this.screenForm.innerName,
  622. innerNumber: this.screenForm.innerNumber,
  623. innerType: this.screenForm.innerType,
  624. name: this.screenForm.name,
  625. number: this.screenForm.number,
  626. outsideName: this.screenForm.outsideName,
  627. outsideNumber: this.screenForm.outsideNumber,
  628. outsideType: this.screenForm.outsideType,
  629. type: this.screenForm.type,
  630. volume: this.screenForm.volume,
  631. };
  632. getProductList(params).then((res) => {
  633. this.dataList = res.data.records;
  634. this.listTotal = res.data.total;
  635. this.listLoading = false;
  636. });
  637. },
  638. editFn(id, row) {
  639. this.hanleMachine();
  640. this.type = 2;
  641. this.diaLogForm = {
  642. ...this.diaLogForm,
  643. id,
  644. adminCompanyId: row.adminCompanyId,
  645. materialId: row.materialId,
  646. };
  647. this.showDialogForm = true;
  648. },
  649. hanleInfo() {
  650. if (this.type === 1) {
  651. this.diaLogForm.id = null;
  652. this.diaLogForm.adminCompanyId = null;
  653. getProductAdd({ ...this.diaLogForm }).then((res) => {
  654. this.$successMsg("保存成功");
  655. this.getList();
  656. this.resetInfo();
  657. });
  658. } else if (this.type === 2) {
  659. const params = { ...this.diaLogForm };
  660. getProductEdit(params).then((res) => {
  661. this.$successMsg("编辑成功");
  662. this.getList();
  663. this.resetInfo();
  664. });
  665. }
  666. this.showDialogForm = false;
  667. },
  668. hanleDelete(id) {
  669. this.hanleDeleteAllPromise(id).then((ids) => {
  670. getProductDel({ ids: ids.join(",") }).then((res) => {
  671. this.$successMsg("删除成功");
  672. this.getList();
  673. });
  674. });
  675. },
  676. handleExport() {
  677. let screenData = {
  678. customerName: this.screenForm.customerName,
  679. freeDay: this.screenForm.freeDay,
  680. toll: this.screenForm.toll,
  681. };
  682. downloadFiles("/product-compose/export", screenData);
  683. },
  684. resetInfo() {
  685. this.diaLogForm = {
  686. id: null,
  687. composeNumber: "",
  688. id: "",
  689. items: [
  690. {
  691. id: "",
  692. innerOutsideMachineId: "",
  693. machineConfigureId: "",
  694. parentId: "",
  695. model: "",
  696. name: "",
  697. number: "",
  698. type: "",
  699. volume: "",
  700. },
  701. ],
  702. materialId: "",
  703. orgNumber: 0,
  704. productModel: "",
  705. productVolume: "",
  706. };
  707. },
  708. hanleMachine() {
  709. let params = {
  710. pageNum: 1,
  711. pageSize: 10,
  712. keyword: "",
  713. };
  714. getMaterialList(params).then((res) => {
  715. this.materialLis = res.data.records;
  716. });
  717. getDistList({ sysDictEnum: "MACHINE_CONFIGURE" }).then((res) => {
  718. console.log(res, "type");
  719. this.DistType = res.data;
  720. });
  721. },
  722. },
  723. };
  724. </script>
  725. <style lang="scss" scoped>
  726. ::v-deep .el-select {
  727. width: 100%;
  728. }
  729. </style>