plm前端
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

544 lines
15 KiB

2 years ago
  1. <template>
  2. <div class="mod-config">
  3. <!-- 查询条件 -->
  4. <el-form :inline="true" label-position="top" :model="searchData" @keyup.enter.native="getDataList()">
  5. <el-form-item :label="'物料编码'">
  6. <el-input v-model="searchData.partNo" clearable style="width: 120px"></el-input>
  7. </el-form-item>
  8. <el-form-item :label="'物料名称'">
  9. <el-input v-model="searchData.partDesc" clearable style="width: 120px"></el-input>
  10. </el-form-item>
  11. <el-form-item :label="' '">
  12. <el-button @click="getDataList()">查询</el-button>
  13. <el-button type="primary" @click="addModal()">新增</el-button>
  14. <el-button type="primary" @click="delModal()">删除</el-button>
  15. <download-excel
  16. :fields="fields()"
  17. :data="exportData"
  18. type="xls"
  19. :name="exportName"
  20. :header="exportHeader"
  21. :footer="exportFooter"
  22. :fetch="createExportData"
  23. :before-generate="startDownload"
  24. :before-finish="finishDownload"
  25. worksheet="导出信息"
  26. class="el-button el-button--primary el-button--medium">
  27. {{ "导出" }}
  28. </download-excel>
  29. </el-form-item>
  30. </el-form>
  31. <!-- 材料列表 -->
  32. <el-table
  33. :height="height"
  34. :data="dataList"
  35. border
  36. @selection-change="selectionBom"
  37. v-loading="dataListLoading"
  38. style="width: 100%;">
  39. <el-table-column
  40. type="selection"
  41. header-align="center"
  42. align="center"
  43. :selectable="selectFlag"
  44. width="50">
  45. </el-table-column>
  46. <el-table-column
  47. v-for="(item,index) in columnList" :key="index"
  48. :sortable="item.columnSortable"
  49. :prop="item.columnProp"
  50. :header-align="item.headerAlign"
  51. :show-overflow-tooltip="item.showOverflowTooltip"
  52. :align="item.align"
  53. :fixed="item.fixed === ''?false:item.fixed"
  54. :min-width="item.columnWidth"
  55. :label="item.columnLabel">
  56. <template slot-scope="scope">
  57. <span v-if="!item.columnHidden">{{ scope.row[item.columnProp] }}</span>
  58. <span v-if="item.columnImage"><img :src="scope.row[item.columnProp]" style="width: 100px; height: 80px"/></span>
  59. </template>
  60. </el-table-column>
  61. <el-table-column
  62. fixed="right"
  63. header-align="center"
  64. align="center"
  65. width="100"
  66. label="操作">
  67. <template slot-scope="scope">
  68. <a type="text" size="small" @click="updateModal(scope.row)">编辑</a>
  69. </template>
  70. </el-table-column>
  71. </el-table>
  72. <!-- 复选统计 -->
  73. <selectDiv ref="selectDiv"></selectDiv>
  74. <!-- 分页插件 -->
  75. <el-pagination style="margin-top: 0px"
  76. @size-change="sizeChangeHandle"
  77. @current-change="currentChangeHandle"
  78. :current-page="pageIndex"
  79. :page-sizes="[20, 50, 100, 200, 500]"
  80. :page-size="pageSize"
  81. :total="totalPage"
  82. layout="total, sizes, prev, pager, next, jumper">
  83. </el-pagination>
  84. <!-- bom新增/编辑模态框 -->
  85. <el-dialog :title="modalData.title" :close-on-click-modal="false" v-drag :visible.sync="modalFlag" width="495px">
  86. <el-form :inline="true" label-position="top" :model="modalData" :rules="rules" style="margin-left: 7px;margin-top: -5px;">
  87. <el-form-item prop="partNo" :rules="rules.partNo">
  88. <span slot="label" @click="getBaseList(116)"><a herf="#">物料编码</a></span>
  89. <el-input v-model="modalData.partNo" style="width: 221px"></el-input>
  90. </el-form-item>
  91. <el-form-item label="物料名称" prop="partDesc" :rules="rules.partDesc">
  92. <el-input v-model="modalData.partDesc" disabled style="width: 221px"></el-input>
  93. </el-form-item>
  94. </el-form>
  95. <el-footer style="height:30px;margin-top: 20px;text-align:center">
  96. <el-button type="primary" @click="saveData()">保存</el-button>
  97. <el-button type="primary" @click="modalFlag = false">关闭</el-button>
  98. </el-footer>
  99. </el-dialog>
  100. <!-- chooseList模态框 -->
  101. <ChooseList ref="baseList" @getBaseData="getBaseData"></ChooseList>
  102. </div>
  103. </template>
  104. <script>
  105. import {
  106. bomManagementSearch, // bom列表查询
  107. bomManagementSave, // bom新增
  108. bomManagementEdit, // bom编辑
  109. bomManagementDelete, // bom删除
  110. } from '@/api/part/bomManagement.js'
  111. import ChooseList from '@/views/modules/common/Chooselist'
  112. export default {
  113. // 组件
  114. components: {
  115. ChooseList
  116. },
  117. // 监听
  118. watch: {
  119. searchData: {
  120. deep: true,
  121. handler: function (newV, oldV) {
  122. this.searchData.partNo = this.searchData.partNo.toUpperCase()
  123. }
  124. }
  125. },
  126. // 对象
  127. data () {
  128. return {
  129. // 导出
  130. exportData: [],
  131. exportName: 'bom物料列表' + this.dayjs().format('YYYYMMDDHHmmss'),
  132. exportHeader: ['bom物料列表'],
  133. exportFooter: [],
  134. resultList: [],
  135. // ======== 行高 ========
  136. height: 200,
  137. // ======== 分页 ========
  138. pageIndex: 1,
  139. pageSize: 50,
  140. totalPage: 0,
  141. selectedDataNum: 0,
  142. // 条件查询
  143. searchData: {
  144. site: this.$store.state.user.site,
  145. partNo: '',
  146. partDesc: '',
  147. page: 1,
  148. limit: 10
  149. },
  150. // 其它
  151. dataListLoading: false,
  152. // ======== 数据对象 ========
  153. modalData: {
  154. flag: '',
  155. title: '',
  156. site: this.$store.state.user.site,
  157. partNo: '',
  158. partDesc: '',
  159. createDate: '',
  160. createBy: '',
  161. updateDate: '',
  162. updateBy: ''
  163. },
  164. // ======== 数据列表 ========
  165. dataList: [],
  166. // ======== 列表表头 ========
  167. columnList: [
  168. {
  169. userId: this.$store.state.user.name,
  170. functionId: 104002,
  171. serialNumber: '104002Table1PartNo',
  172. tableId: '104002Table1',
  173. tableName: 'BOM信息表',
  174. columnProp: 'partNo',
  175. headerAlign: 'center',
  176. align: 'center',
  177. columnLabel: '物料编码',
  178. columnHidden: false,
  179. columnImage: false,
  180. columnSortable: false,
  181. sortLv: 0,
  182. status: true,
  183. fixed: '',
  184. columnWidth: 120
  185. },
  186. {
  187. userId: this.$store.state.user.name,
  188. functionId: 104002,
  189. serialNumber: '104002Table1PartDesc',
  190. tableId: '104002Table1',
  191. tableName: 'BOM信息表',
  192. columnProp: 'partDesc',
  193. headerAlign: 'center',
  194. align: 'center',
  195. columnLabel: '物料名称',
  196. columnHidden: false,
  197. columnImage: false,
  198. columnSortable: false,
  199. sortLv: 0,
  200. status: true,
  201. fixed: '',
  202. columnWidth: 120
  203. },
  204. {
  205. userId: this.$store.state.user.name,
  206. functionId: 104002,
  207. serialNumber: '104002Table1CreateDate',
  208. tableId: '104002Table1',
  209. tableName: 'BOM信息表',
  210. columnProp: 'createDate',
  211. headerAlign: 'center',
  212. align: 'center',
  213. columnLabel: '创建时间',
  214. columnHidden: false,
  215. columnImage: false,
  216. columnSortable: false,
  217. sortLv: 0,
  218. status: true,
  219. fixed: '',
  220. columnWidth: 160
  221. },
  222. {
  223. userId: this.$store.state.user.name,
  224. functionId: 104002,
  225. serialNumber: '104002Table1CreateBy',
  226. tableId: '104002Table1',
  227. tableName: 'BOM信息表',
  228. columnProp: 'createBy',
  229. headerAlign: 'center',
  230. align: 'center',
  231. columnLabel: '创建人',
  232. columnHidden: false,
  233. columnImage: false,
  234. columnSortable: false,
  235. sortLv: 0,
  236. status: true,
  237. fixed: '',
  238. columnWidth: 80
  239. },
  240. {
  241. userId: this.$store.state.user.name,
  242. functionId: 104002,
  243. serialNumber: '104002Table1UpdateDate',
  244. tableId: '104002Table1',
  245. tableName: 'BOM信息表',
  246. columnProp: 'updateDate',
  247. headerAlign: 'center',
  248. align: 'center',
  249. columnLabel: '更新时间',
  250. columnHidden: false,
  251. columnImage: false,
  252. columnSortable: false,
  253. sortLv: 0,
  254. status: true,
  255. fixed: '',
  256. columnWidth: 160
  257. },
  258. {
  259. userId: this.$store.state.user.name,
  260. functionId: 104002,
  261. serialNumber: '104002Table1UpdateBy',
  262. tableId: '104002Table1',
  263. tableName: 'BOM信息表',
  264. columnProp: 'updateBy',
  265. headerAlign: 'center',
  266. align: 'center',
  267. columnLabel: '更新人',
  268. columnHidden: false,
  269. columnImage: false,
  270. columnSortable: false,
  271. sortLv: 0,
  272. status: true,
  273. fixed: '',
  274. columnWidth: 80
  275. }
  276. ],
  277. // ======== 必填规则 ========
  278. rules: {
  279. partNo: [
  280. {
  281. required: true,
  282. message: ' ',
  283. trigger: 'change'
  284. }
  285. ],
  286. partDesc: [
  287. {
  288. required: true,
  289. message: ' ',
  290. trigger: 'change'
  291. }
  292. ]
  293. },
  294. // ======== 复选数据集 ========
  295. bomSelections: [],
  296. // ======== 模态框开关控制 ========
  297. modalFlag: false,
  298. modalDisableFlag: false,
  299. }
  300. },
  301. mounted () {
  302. this.$nextTick(() => {
  303. this.height = window.innerHeight - 180
  304. })
  305. },
  306. created () {
  307. this.getDataList()
  308. },
  309. // js
  310. methods: {
  311. // ======== 分页相关方法 ========
  312. /**
  313. * 每页数
  314. * @param val
  315. */
  316. sizeChangeHandle (val) {
  317. this.pageSize = val
  318. this.pageIndex = 1
  319. this.getDataList()
  320. },
  321. /**
  322. * 当前页
  323. * @param val
  324. */
  325. currentChangeHandle (val) {
  326. this.pageIndex = val
  327. this.getDataList()
  328. },
  329. // ======== 列表数据操作方法 ========
  330. /**
  331. * 未知
  332. * @returns {boolean}
  333. */
  334. selectFlag () {
  335. return true
  336. },
  337. /**
  338. * 获取数据列表
  339. */
  340. getDataList () {
  341. this.searchData.limit = this.pageSize
  342. this.searchData.page = this.pageIndex
  343. bomManagementSearch(this.searchData).then(({data}) => {
  344. if (data.code === 0) {
  345. this.dataList = data.page.list
  346. this.pageIndex = data.page.currPage
  347. this.pageSize = data.page.pageSize
  348. this.totalPage = data.page.totalCount
  349. this.$refs.selectDiv.setLengthAll( this.dataList.length)
  350. }
  351. this.dataListLoading = false
  352. })
  353. },
  354. /**
  355. * 复选列表信息
  356. * @param val
  357. */
  358. selectionBom (val) {
  359. this.bomSelections = val
  360. this.$refs.selectDiv.setLengthselected(this.bomSelections.length)
  361. },
  362. // ======== 新增/编辑模态框 ========
  363. /**
  364. * bom新增模态框
  365. */
  366. addModal () {
  367. this.modalData = {
  368. flag: '1',
  369. title: 'bom新增',
  370. site: this.$store.state.user.site,
  371. partNo: '',
  372. partDesc: '',
  373. createBy: this.$store.state.user.name
  374. }
  375. this.modalDisableFlag = false
  376. this.modalFlag = true
  377. },
  378. // ======== 新增/编辑/删除方法 ========
  379. /**
  380. * bom新增/编辑
  381. */
  382. saveData () {
  383. if (this.modalData.partNo === '' || this.modalData.partNo == null) {
  384. this.$message.warning('请选择物料编码!')
  385. return
  386. }
  387. if (this.modalData.partDesc === '' || this.modalData.partDesc == null) {
  388. this.$message.warning('请选择物料名称!')
  389. return
  390. }
  391. if (this.modalData.flag === '1') {
  392. bomManagementSave(this.modalData).then(({data}) => {
  393. if (data && data.code === 0) {
  394. this.getDataList()
  395. this.modalFlag = false
  396. this.$message({
  397. message: '操作成功',
  398. type: 'success',
  399. duration: 1500,
  400. onClose: () => {}
  401. })
  402. } else {
  403. this.$alert(data.msg, '错误', {
  404. confirmButtonText: '确定'
  405. })
  406. }
  407. })
  408. } else {
  409. bomManagementEdit(this.modalData).then(({data}) => {
  410. if (data && data.code === 0) {
  411. this.getDataList()
  412. this.modalFlag = false
  413. this.$message({
  414. message: '操作成功',
  415. type: 'success',
  416. duration: 1500,
  417. onClose: () => {}
  418. })
  419. } else {
  420. this.$alert(data.msg, '错误', {
  421. confirmButtonText: '确定'
  422. })
  423. }
  424. })
  425. }
  426. },
  427. /**
  428. * bom删除
  429. */
  430. delModal () {
  431. if(this.bomSelections.length === 0){
  432. this.$message.warning('请勾选要删除的BOM!')
  433. return
  434. }
  435. this.$confirm(`是否删除这 `+ this.bomSelections.length +` 条BOM?`, '提示', {
  436. confirmButtonText: '确定',
  437. cancelButtonText: '取消',
  438. type: 'warning'
  439. }).then(() => {
  440. let tempData = {
  441. informationList: this.bomSelections
  442. }
  443. bomManagementDelete(tempData).then(({data}) => {
  444. if (data && data.code === 0) {
  445. this.getDataList()
  446. this.bomSelections = []
  447. this.$message({
  448. message: '操作成功',
  449. type: 'success',
  450. duration: 1500,
  451. onClose: () => {}
  452. })
  453. } else {
  454. this.$alert(data.msg, '错误', {
  455. confirmButtonText: '确定'
  456. })
  457. }
  458. })
  459. }).catch(() => {
  460. })
  461. },
  462. // ======== chooseList相关方法 ========
  463. /**
  464. * 获取基础数据列表S
  465. * @param val
  466. * @param type
  467. */
  468. getBaseList (val, type) {
  469. this.tagNo = val
  470. this.$nextTick(() => {
  471. let strVal = ''
  472. if (val === 116) {
  473. strVal = this.modalData.partNo
  474. }
  475. this.$refs.baseList.init(val, strVal)
  476. })
  477. },
  478. /**
  479. * 列表方法的回调
  480. * @param val
  481. */
  482. getBaseData (val) {
  483. if (this.tagNo === 116) {
  484. this.modalData.partNo = val.part_no
  485. this.modalData.partDesc = val.part_desc
  486. }
  487. },
  488. // ======== 导出相关方法 ========
  489. /**
  490. * 导出excel
  491. */
  492. async createExportData () {
  493. this.searchData.limit = -1
  494. this.searchData.page = 1
  495. await bomManagementSearch(this.searchData).then(({data}) => {
  496. this.resultList = data.page.list
  497. })
  498. return this.resultList
  499. },
  500. startDownload () {
  501. },
  502. finishDownload () {
  503. },
  504. fields () {
  505. let json = '{'
  506. this.columnList.forEach((item, index) => {
  507. if (index == this.columnList.length - 1) {
  508. json += '"' + item.columnLabel + '"' + ':' + '"' + item.columnProp + '"'
  509. } else {
  510. json += '"' + item.columnLabel + '"' + ':' + '"' + item.columnProp + '"' + ','
  511. }
  512. })
  513. json += '}'
  514. let s = eval('(' + json + ')')
  515. return s
  516. }
  517. }
  518. }
  519. </script>