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.

654 lines
19 KiB

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