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.

638 lines
19 KiB

  1. <template>
  2. <div class="mod-config">
  3. <el-form :inline="true" label-position="top" :model="searchData" @keyup.enter.native="getDataList">
  4. <el-form-item :label="'BU'">
  5. <el-select v-model="searchData.buDesc" placeholder="请选择" clearable style="width: 130px">
  6. <el-option
  7. v-for = "i in userBuList"
  8. :key = "i.buNo"
  9. :label = "i.buDesc"
  10. :value = "i.buDesc">
  11. </el-option>
  12. </el-select>
  13. </el-form-item>
  14. <el-form-item :label="'分组编码'">
  15. <el-input v-model="searchData.groupId" clearable style="width: 120px"></el-input>
  16. </el-form-item>
  17. <el-form-item :label="'分组名称'">
  18. <el-input v-model="searchData.groupName" clearable style="width: 120px"></el-input>
  19. </el-form-item>
  20. <el-form-item :label="'是否在用'">
  21. <el-select clearable v-model="searchData.active" style="width: 120px">
  22. <el-option label="是" value="Y"></el-option>
  23. <el-option label="否" value="N"></el-option>
  24. </el-select>
  25. </el-form-item>
  26. <el-form-item :label="' '">
  27. <el-button v-if="!authSearch" @click="getDataList">查询</el-button>
  28. <el-button v-if="!authSave" type="primary" @click="addModal">新增</el-button>
  29. <download-excel
  30. :fields="fields()"
  31. :data="exportData"
  32. type="xls"
  33. :name="exportName"
  34. :header="exportHeader"
  35. :footer="exportFooter"
  36. :fetch="createExportData"
  37. :before-generate="startDownload"
  38. :before-finish="finishDownload"
  39. worksheet="导出信息"
  40. class="el-button el-button--primary el-button--medium">
  41. {{ "导出" }}
  42. </download-excel>
  43. </el-form-item>
  44. </el-form>
  45. <el-table
  46. :height="height"
  47. :data="dataList"
  48. border
  49. style="width: 100%;">
  50. <el-table-column
  51. v-for="(item,index) in columnList" :key="index"
  52. :sortable="item.columnSortable"
  53. :prop="item.columnProp"
  54. :header-align="item.headerAlign"
  55. :show-overflow-tooltip="item.showOverflowTooltip"
  56. :align="item.align"
  57. :fixed="item.fixed==''?false:item.fixed"
  58. :min-width="item.columnWidth"
  59. :label="item.columnLabel">
  60. <template slot-scope="scope">
  61. <span v-if="!item.columnHidden">{{ scope.row[item.columnProp] }}</span>
  62. <span v-if="item.columnImage"><img :src="scope.row[item.columnProp]" style="width: 100px; height: 80px"/></span>
  63. </template>
  64. </el-table-column>
  65. <el-table-column
  66. fixed="right"
  67. header-align="center"
  68. align="center"
  69. width="160"
  70. label="操作">
  71. <template slot-scope="scope">
  72. <el-link v-if="!authUpdate" style="cursor: pointer" @click="updateModal(scope.row)">修改</el-link>
  73. <el-link v-if="!authDelete" style="cursor: pointer" @click="delModal(scope.row)">删除</el-link>
  74. </template>
  75. </el-table-column>
  76. </el-table>
  77. <!-- 分页栏 -->
  78. <el-pagination
  79. @size-change="sizeChangeHandle"
  80. @current-change="currentChangeHandle"
  81. :current-page="pageIndex"
  82. :page-sizes="[20, 50, 100, 200, 500]"
  83. :page-size="pageSize"
  84. :total="totalPage"
  85. layout="total, sizes, prev, pager, next, jumper">
  86. </el-pagination>
  87. <el-dialog :title="modalData.title" :close-on-click-modal="false" v-drag :visible.sync="modalFlag" width="495px">
  88. <el-form :inline="true" label-position="top" :model="modalData" :rules="rules" style="margin-left: 7px;margin-top: -5px;">
  89. <el-form-item label="BU" prop="bu" :rules="rules.bu">
  90. <el-select v-model="modalData.bu" placeholder="请选择" :disabled="modalDisableFlag" style="width: 221px">
  91. <el-option
  92. v-for = "i in userBuList"
  93. :key = "i.buNo"
  94. :label = "i.buDesc"
  95. :value = "i.buNo">
  96. <span style="float: left;width: 100px">{{ i.sitename }}</span>
  97. <span style="float: right; color: #8492a6;white-space:nowrap;overflow:hidden;text-overflow:ellipsis; font-size: 11px;width: 60px">
  98. {{ i.buDesc }}
  99. </span>
  100. </el-option>
  101. </el-select>
  102. </el-form-item>
  103. <el-form-item label="是否在用" prop="active" :rules="rules.active">
  104. <el-select v-model="modalData.active" style="width: 221px">
  105. <el-option label="是" value="Y"></el-option>
  106. <el-option label="否" value="N"></el-option>
  107. </el-select>
  108. </el-form-item>
  109. </el-form>
  110. <el-form :inline="true" label-position="top" :model="modalData" :rules="rules" style="margin-left: 7px;margin-top: -5px;">
  111. <el-form-item label="分组编码" prop="groupId" :rules="rules.groupId">
  112. <el-input v-model="modalData.groupId" :disabled="modalDisableFlag" style="width: 140px"></el-input>
  113. </el-form-item>
  114. <el-form-item label="分组名称" prop="groupName" :rules="rules.groupName">
  115. <el-input v-model="modalData.groupName" style="width: 302px"></el-input>
  116. </el-form-item>
  117. </el-form>
  118. <el-footer style="height:30px;margin-top: 20px;text-align:center">
  119. <el-button type="primary" @click="saveData">保存</el-button>
  120. <el-button type="primary" @click="modalFlag = false">关闭</el-button>
  121. </el-footer>
  122. </el-dialog>
  123. </div>
  124. </template>
  125. <script>
  126. import {
  127. partGroupInformationSearch, // 分组信息列表查询
  128. partGroupInformationSave, // 分组信息新增
  129. partGroupInformationEdit, // 分组信息编辑
  130. partGroupInformationDelete // 分组信息删除
  131. } from '@/api/part/partGroupInformation.js'
  132. import {getSiteAndBuByUserName} from "@/api/eam/eam.js"
  133. import {getTableDefaultListLanguage, getTableUserListLanguage} from "@/api/table.js"
  134. import Chooselist from '@/views/modules/common/Chooselist_eam'
  135. export default {
  136. components: {
  137. Chooselist
  138. },
  139. watch: {
  140. searchData: {
  141. deep: true,
  142. handler: function (newV, oldV) {
  143. this.searchData.groupId = this.searchData.groupId.toUpperCase()
  144. }
  145. },
  146. modalData: {
  147. deep: true,
  148. handler: function (newV, oldV) {
  149. this.modalData.groupId = this.modalData.groupId.toUpperCase()
  150. }
  151. }
  152. },
  153. data () {
  154. return {
  155. // 导出
  156. exportData: [],
  157. exportName: '物料分组' + this.dayjs().format('YYYYMMDDHHmmss'),
  158. exportHeader: ['物料分组'],
  159. exportFooter: [],
  160. resultList: [],
  161. userBuList: [],
  162. // ======== 行高 ========
  163. height: 200,
  164. // ======== 分页 ========
  165. pageIndex: 1,
  166. pageSize: 50,
  167. totalPage: 0,
  168. // 条件查询
  169. searchData: {
  170. site: this.$store.state.user.site,
  171. userName: this.$store.state.user.name,
  172. buDesc: '',
  173. groupId: '',
  174. groupName: '',
  175. active: '',
  176. page: 1,
  177. limit: 10
  178. },
  179. modalData: {
  180. flag: '',
  181. title: '',
  182. bu: '',
  183. site: this.$store.state.user.site,
  184. buNo: '',
  185. groupId: '',
  186. groupName: '',
  187. active: ''
  188. },
  189. // ======== 数据列表 ========
  190. dataList: [],
  191. // 展示列集
  192. columnList: [
  193. {
  194. userId: this.$store.state.user.name,
  195. functionId: 601005,
  196. serialNumber: '601005Table1groupId',
  197. tableId: "601005Table1",
  198. tableName: "分组信息表",
  199. columnProp: 'groupId',
  200. headerAlign: "center",
  201. align: "center",
  202. columnLabel: '分组编码',
  203. columnHidden: false,
  204. columnImage: false,
  205. columnSortable: false,
  206. sortLv: 0,
  207. status: true,
  208. fixed: '',
  209. columnWidth: 120
  210. },
  211. {
  212. userId: this.$store.state.user.name,
  213. functionId: 601005,
  214. serialNumber: '601005Table1groupName',
  215. tableId: "601005Table1",
  216. tableName: "分组表",
  217. columnProp: 'groupName',
  218. headerAlign: "center",
  219. align: "left",
  220. columnLabel: '分组名称',
  221. columnHidden: false,
  222. columnImage: false,
  223. columnSortable: false,
  224. sortLv: 0,
  225. status: true,
  226. fixed: '',
  227. columnWidth: 300
  228. },
  229. {
  230. functionId: 601005,
  231. serialNumber: '601005Table1Active',
  232. tableId: '601005Table1',
  233. tableName: '分组信息表',
  234. columnProp: 'active',
  235. headerAlign: 'center',
  236. align: 'center',
  237. columnLabel: '是否在用',
  238. columnHidden: false,
  239. columnImage: false,
  240. columnSortable: false,
  241. sortLv: 0,
  242. status: true,
  243. fixed: '',
  244. columnWidth: 100
  245. },
  246. {
  247. userId: this.$store.state.user.name,
  248. functionId: 601005,
  249. serialNumber: '601005Table1CreateDate',
  250. tableId: '601005Table1',
  251. tableName: '分组表',
  252. columnProp: 'createDate',
  253. headerAlign: 'center',
  254. align: 'center',
  255. columnLabel: '创建时间',
  256. columnHidden: false,
  257. columnImage: false,
  258. columnSortable: false,
  259. sortLv: 0,
  260. status: true,
  261. fixed: '',
  262. columnWidth: 170
  263. },
  264. {
  265. userId: this.$store.state.user.name,
  266. functionId: 601005,
  267. serialNumber: '601005Table1CreateBy',
  268. tableId: "601005Table1",
  269. tableName: "分组表",
  270. columnProp: 'createBy',
  271. headerAlign: "center",
  272. align: "center",
  273. columnLabel: '创建人',
  274. columnHidden: false,
  275. columnImage: false,
  276. columnSortable: false,
  277. sortLv: 0,
  278. status: true,
  279. fixed: '',
  280. columnWidth: 100
  281. },
  282. {
  283. userId: this.$store.state.user.name,
  284. functionId: 601005,
  285. serialNumber: '601005Table1UpdateDate',
  286. tableId: "601005Table1",
  287. tableName: "分组表",
  288. columnProp: 'updateDate',
  289. headerAlign: "center",
  290. align: "center",
  291. columnLabel: '更新时间',
  292. columnHidden: false,
  293. columnImage: false,
  294. columnSortable: false,
  295. sortLv: 0,
  296. status: true,
  297. fixed: '',
  298. columnWidth: 170
  299. },
  300. {
  301. userId: this.$store.state.user.name,
  302. functionId: 601005,
  303. serialNumber: '601005Table1UpdateBy',
  304. tableId: "601005Table1",
  305. tableName: "分组表",
  306. columnProp: 'updateBy',
  307. headerAlign: "center",
  308. align: "center",
  309. columnLabel: '更新人',
  310. columnHidden: false,
  311. columnImage: false,
  312. columnSortable: false,
  313. sortLv: 0,
  314. status: true,
  315. fixed: '',
  316. columnWidth: 100
  317. },
  318. ],
  319. rules: {
  320. bu: [
  321. {
  322. required: true,
  323. message: ' ',
  324. trigger: ['blur','change']
  325. }
  326. ],
  327. groupId:[
  328. {
  329. required: true,
  330. message: ' ',
  331. trigger: 'change'
  332. }
  333. ],
  334. groupName:[
  335. {
  336. required: true,
  337. message: ' ',
  338. trigger: 'change'
  339. }
  340. ],
  341. active:[
  342. {
  343. required: true,
  344. message: ' ',
  345. trigger: 'change'
  346. }
  347. ],
  348. },
  349. // ======== 模态框开关控制 ========
  350. authSearch: false,
  351. authSave: false,
  352. authUpdate: false,
  353. authDelete: false,
  354. modalFlag: false,
  355. modalDisableFlag: false,
  356. menuId: this.$route.meta.menuId,
  357. }
  358. },
  359. mounted () {
  360. this.$nextTick(() => {
  361. this.height = window.innerHeight - 180
  362. })
  363. },
  364. created () {
  365. // 按钮控制
  366. this.getButtonAuthData()
  367. // 获取用户的 site 和 bu
  368. this.getSiteAndBuByUserName()
  369. // 动态列
  370. this.getTableUserColumn(this.$route.meta.menuId+'table1',1)
  371. if (!this.authSearch) {
  372. // 获取数据列表
  373. this.getDataList()
  374. }
  375. },
  376. methods: {
  377. // 获取用户的bu
  378. getSiteAndBuByUserName () {
  379. let tempData = {
  380. username: this.$store.state.user.name,
  381. }
  382. getSiteAndBuByUserName(tempData).then(({data}) => {
  383. if (data.code === 0) {
  384. this.userBuList = data.rows
  385. }
  386. })
  387. },
  388. // 每页数
  389. sizeChangeHandle (val) {
  390. this.pageSize = val
  391. this.pageIndex = 1
  392. this.getDataList()
  393. },
  394. // 当前页
  395. currentChangeHandle (val) {
  396. this.pageIndex = val
  397. this.getDataList()
  398. },
  399. //导出excel
  400. async createExportData() {
  401. this.searchData.limit = -1
  402. this.searchData.page = 1
  403. await partGroupInformationSearch(this.searchData).then(({data}) => {
  404. this.exportList= data.page.list
  405. })
  406. return this.exportList
  407. },
  408. startDownload() {
  409. },
  410. finishDownload() {
  411. },
  412. fields () {
  413. let json = "{"
  414. this.columnList.forEach((item, index) => {
  415. if (index == this.columnList.length - 1) {
  416. json += "\"" + item.columnLabel + "\"" + ":" + "\"" + item.columnProp + "\""
  417. } else {
  418. json += "\"" + item.columnLabel + "\"" + ":" + "\"" + item.columnProp + "\"" + ","
  419. }
  420. })
  421. json += "}"
  422. let s = eval("(" + json + ")")
  423. return s
  424. },
  425. // 获取数据列表
  426. getDataList () {
  427. this.searchData.limit = this.pageSize
  428. this.searchData.page = this.pageIndex
  429. partGroupInformationSearch(this.searchData).then(({data}) => {
  430. if (data.code === 0) {
  431. this.dataList = data.page.list
  432. this.pageIndex = data.page.currPage
  433. this.pageSize = data.page.pageSize
  434. this.totalPage = data.page.totalCount
  435. }
  436. })
  437. },
  438. addModal () {
  439. this.modalData = {
  440. flag: '1',
  441. title: '分组新增',
  442. bu: this.userBuList[0].buNo,
  443. buNo: '',
  444. site: '',
  445. groupId: '',
  446. groupName: '',
  447. active: 'Y',
  448. createBy: this.$store.state.user.name,
  449. }
  450. this.modalDisableFlag = false
  451. this.modalFlag = true
  452. },
  453. /**
  454. * 分组信息编辑模态框
  455. * @param row
  456. */
  457. updateModal (row) {
  458. this.modalData = {
  459. flag: '2',
  460. title: '分组编辑',
  461. site: row.site,
  462. bu: row.site + '_' + row.buNo,
  463. buNo: row.buNo,
  464. groupId: row.groupId,
  465. groupName: row.groupName,
  466. active: row.active,
  467. updateBy: this.$store.state.user.name,
  468. }
  469. this.modalDisableFlag = true
  470. this.modalFlag = true
  471. },
  472. // ======== 新增/编辑/删除方法 ========
  473. /**
  474. * 分组信息新增/编辑
  475. */
  476. saveData () {
  477. if (this.modalData.bu === '' || this.modalData.bu == null) {
  478. this.$message.warning('请选择BU!')
  479. return
  480. }
  481. if (this.modalData.groupId === '' || this.modalData.groupId == null) {
  482. this.$message.warning('请填写分组编码!')
  483. return
  484. }
  485. if (this.modalData.groupName === '' || this.modalData.groupName == null) {
  486. this.$message.warning('请填写分组名称!')
  487. return
  488. }
  489. if (this.modalData.active === '' || this.modalData.active == null) {
  490. this.$message.warning('请选择是否可用!')
  491. return
  492. }
  493. if (this.modalData.flag === '1') {
  494. partGroupInformationSave(this.modalData).then(({data}) => {
  495. if (data && data.code === 0) {
  496. this.getDataList()
  497. this.modalFlag = false
  498. this.$message({
  499. message: '操作成功',
  500. type: 'success',
  501. duration: 1500,
  502. onClose: () => {}
  503. })
  504. } else {
  505. this.$alert(data.msg, '错误', {
  506. confirmButtonText: '确定'
  507. })
  508. }
  509. })
  510. } else {
  511. partGroupInformationEdit(this.modalData).then(({data}) => {
  512. if (data && data.code === 0) {
  513. this.getDataList()
  514. this.modalFlag = false
  515. this.$message({
  516. message: '操作成功',
  517. type: 'success',
  518. duration: 1500,
  519. onClose: () => {}
  520. })
  521. } else {
  522. this.$alert(data.msg, '错误', {
  523. confirmButtonText: '确定'
  524. })
  525. }
  526. })
  527. }
  528. },
  529. /**
  530. * 分组信息删除
  531. */
  532. delModal (row) {
  533. this.$confirm(`是否删除这条分组信息?`, '提示', {
  534. confirmButtonText: '确定',
  535. cancelButtonText: '取消',
  536. type: 'warning'
  537. }).then(() => {
  538. partGroupInformationDelete(row).then(({data}) => {
  539. if (data && data.code === 0) {
  540. this.getDataList()
  541. this.partSelections = []
  542. this.$message({
  543. message: '操作成功',
  544. type: 'success',
  545. duration: 1500,
  546. onClose: () => {}
  547. })
  548. } else {
  549. this.$alert(data.msg, '错误', {
  550. confirmButtonText: '确定'
  551. })
  552. }
  553. })
  554. }).catch(() => {
  555. })
  556. },
  557. // 动态列开始 获取 用户保存的 格式列
  558. async getTableUserColumn(tableId, columnId) {
  559. let queryTableUser = {
  560. userId: this.$store.state.user.name,
  561. functionId: this.$route.meta.menuId,
  562. tableId: tableId,
  563. status: true,
  564. languageCode: this.$i18n.locale
  565. }
  566. await getTableUserListLanguage(queryTableUser).then(({data}) => {
  567. if (data.rows.length > 0) {
  568. switch (columnId) {
  569. case 1:
  570. this.columnList = data.rows
  571. break;
  572. }
  573. } else {
  574. this.getColumnList(tableId, columnId)
  575. }
  576. })
  577. },
  578. // 获取 tableDefault 列
  579. async getColumnList (tableId, columnId) {
  580. let queryTable= {
  581. functionId: this.$route.meta.menuId,
  582. tableId: tableId,
  583. languageCode: this.$i18n.locale
  584. }
  585. await getTableDefaultListLanguage(queryTable).then(({data}) => {
  586. if (!data.rows.length === 0) {
  587. switch (columnId) {
  588. case 1:
  589. this.columnList = data.rows
  590. break;
  591. }
  592. }
  593. })
  594. },
  595. //获取按钮的权限数据
  596. getButtonAuthData () {
  597. let searchFlag = this.isAuth(this.menuId+":search")
  598. let saveFlag = this.isAuth(this.menuId+":save")
  599. let updateFlag = this.isAuth(this.menuId+":update")
  600. let deleteFlag = this.isAuth(this.menuId+":delete")
  601. //处理页面的权限数据
  602. this.authSearch = !searchFlag
  603. this.authSave = !saveFlag
  604. this.authUpdate = !updateFlag
  605. this.authDelete = !deleteFlag
  606. },
  607. }
  608. }
  609. </script>
  610. <style scoped lang="scss">
  611. /deep/ .customer-tab .el-tabs__content {
  612. padding: 0px !important;
  613. height: 459px;
  614. }
  615. </style>