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.

510 lines
15 KiB

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