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.

672 lines
21 KiB

9 months ago
9 months ago
9 months ago
9 months ago
9 months ago
9 months ago
9 months ago
9 months ago
9 months ago
9 months ago
9 months ago
9 months ago
9 months ago
9 months ago
9 months ago
9 months ago
  1. <template>
  2. <div class="mod-config">
  3. <!-- 条件查询 -->
  4. <el-form :inline="true" label-position="top" :model="searchData">
  5. <el-form-item label="BU">
  6. <el-select v-model="searchData.buDesc" placeholder="请选择" clearable style="width: 80px">
  7. <el-option
  8. v-for = "i in userBuList"
  9. :key = "i.buNo"
  10. :label = "i.buDesc"
  11. :value = "i.buDesc">
  12. </el-option>
  13. </el-select>
  14. </el-form-item>
  15. <el-form-item label="方法编码">
  16. <el-input v-model="searchData.methodNo" clearable style="width: 120px"></el-input>
  17. </el-form-item>
  18. <el-form-item label="方法名称">
  19. <el-input v-model="searchData.methodName" clearable style="width: 200px"></el-input>
  20. </el-form-item>
  21. <el-form-item label="检验类型">
  22. <el-select v-model="searchData.inspectionTypeNo" placeholder="请选择" style="width: 100px">
  23. <el-option label="全部" value=""></el-option>
  24. <el-option
  25. v-for = "i in options"
  26. :key = "i.inspectionTypeNo"
  27. :label = "i.inspectionTypeName"
  28. :value = "i.inspectionTypeNo">
  29. </el-option>
  30. </el-select>
  31. </el-form-item>
  32. <el-form-item label=" ">
  33. <el-button v-if="!authSearch" type="primary" @click="getDataList()">查询</el-button>
  34. <el-button v-if="!authSave" type="primary" @click="addModal()">新增</el-button>
  35. <el-button @click="exportExcel()" type="primary" style="margin-left: 2px">{{'导出'}}</el-button>
  36. </el-form-item>
  37. </el-form>
  38. <!-- 展示列表 -->
  39. <el-table
  40. :height="height"
  41. :data="dataList"
  42. @header-dragend="handleColumnResize"
  43. border
  44. v-loading="dataListLoading"
  45. style="width: 100%;">
  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">
  58. <span v-if="columnsProp.includes(item.columnProp)">{{ scope.row[`${item.columnProp}Desc`] }}</span>
  59. <span v-else>
  60. {{ scope.row[item.columnProp] }}
  61. </span>
  62. </span>
  63. <span v-if="item.columnImage"><img :src="scope.row[item.columnProp]" style="width: 100px; height: 80px"/></span>
  64. </template>
  65. </el-table-column>
  66. <el-table-column
  67. fixed="right"
  68. header-align="center"
  69. align="center"
  70. width="130"
  71. label="操作">
  72. <template slot-scope="scope">
  73. <el-link style="cursor: pointer" v-if="!authUpdate" @click="updateModal(scope.row)">修改</el-link>
  74. <el-link style="cursor: pointer" v-if="!authDelete" @click="deleteModal(scope.row)">删除</el-link>
  75. </template>
  76. </el-table-column>
  77. </el-table>
  78. <el-pagination
  79. style="margin-top: 0px"
  80. @size-change="sizeChangeHandle"
  81. @current-change="currentChangeHandle"
  82. :current-page="pageIndex"
  83. :page-sizes="[20, 50, 100, 200, 500]"
  84. :page-size="pageSize"
  85. :total="totalPage"
  86. layout="total, sizes, prev, pager, next, jumper">
  87. </el-pagination>
  88. <!-- 新增和修改 -->
  89. <el-dialog title="检验方法" :close-on-click-modal="false" v-drag :visible.sync="modalFlag" width="500px">
  90. <el-form :inline="true" label-position="top" :model="modalData" :rules="rules" style="margin-left: 7px;margin-top: -5px;">
  91. <el-form-item label="BU" prop="bu" :rules="rules.bu">
  92. <el-select v-model="modalData.bu" placeholder="请选择" :disabled="modalDisableFlag" style="width: 456px">
  93. <el-option
  94. v-for = "i in userBuList"
  95. :key = "i.buNo"
  96. :label = "i.sitename"
  97. :value = "i.buNo">
  98. <span style="float: left;width: 100px">{{ i.sitename }}</span>
  99. <span style="float: right; color: #8492a6;white-space:nowrap;overflow:hidden;text-overflow:ellipsis; font-size: 11px;width: 60px">
  100. {{ i.buDesc }}
  101. </span>
  102. </el-option>
  103. </el-select>
  104. </el-form-item>
  105. </el-form>
  106. <el-form :inline="true" label-position="top" :model="modalData" :rules="rules" style="margin-left: 7px;margin-top: -5px;">
  107. <el-form-item label="方法名称:" prop="methodName" :rules="rules.methodNameType">
  108. <el-input v-model="modalData.methodName" style="width: 221px"></el-input>
  109. </el-form-item>
  110. <el-form-item label="检验类型:" prop="inspectionTypeNo" :rules="rules.inspectionTypeNoType">
  111. <el-select v-model="modalData.inspectionTypeNo" placeholder="请选择" style="width: 221px">
  112. <el-option
  113. v-for = "i in options"
  114. :key = "i.inspectionTypeNo"
  115. :label = "i.inspectionTypeName"
  116. :value = "i.inspectionTypeNo">
  117. </el-option>
  118. </el-select>
  119. </el-form-item>
  120. </el-form>
  121. <el-form :inline="true" label-position="top" :model="modalData" style="margin-left: 7px;margin-top: -5px;">
  122. <el-form-item :label="'检验方法说明:'">
  123. <el-input v-model="modalData.methodRemark" style="width: 456px"></el-input>
  124. </el-form-item>
  125. </el-form>
  126. <el-footer style="height:35px;margin-top: 15px;text-align:center">
  127. <el-button type="primary" @click="saveData()">保存</el-button>
  128. <el-button type="primary" @click="modalFlag = false">关闭</el-button>
  129. </el-footer>
  130. </el-dialog>
  131. </div>
  132. </template>
  133. <script>
  134. import {
  135. qcMethodSearch, // 检验方法查询
  136. qcMethodSave, // 检验方法新增
  137. qcMethodUpdate, // 检验方法修改
  138. qcMethodDelete, // 检验方法删除
  139. inspectionTypeSearch, // 搜索所有检验类型
  140. getSiteAndBuByUserName
  141. } from "@/api/qc/qc.js"
  142. import {getTableDefaultListLanguage, getTableUserListLanguage,updateColumnSize} from "@/api/table.js"
  143. import {userFavoriteList, saveUserFavorite, removeUserFavorite} from '@/api/userFavorite.js'
  144. import excel from "@/utils/excel-util.js"
  145. export default {
  146. data () {
  147. return {
  148. columnsProp:['createBy', 'updateBy'],
  149. // 是否收藏
  150. favorite: false,
  151. // 导出 start
  152. exportData: [],
  153. exportName: "检验方法" + this.dayjs().format('YYYYMMDDHHmmss'),
  154. exportHeader: ["检验方法"],
  155. exportFooter: [],
  156. exportList: [],
  157. // 导出 end
  158. searchData: {
  159. site: '',
  160. userName: this.$store.state.user.name,
  161. methodNo: '',
  162. methodName: '',
  163. inspectionTypeNo: '',
  164. buDesc: '',
  165. page: 1,
  166. limit: 10,
  167. },
  168. pageIndex: 1,
  169. pageSize: 20,
  170. totalPage: 0,
  171. height: 200,
  172. dataList: [],
  173. dataListLoading: false,
  174. modalFlag: false,
  175. modalDisableFlag: false,
  176. modalData: {
  177. site: '',
  178. bu: '',
  179. flag: '',
  180. methodNo: '',
  181. methodName: '',
  182. createBy: this.$store.state.user.name,
  183. updateBy: this.$store.state.user.name,
  184. methodRemark: '',
  185. inspectionTypeNo: ''
  186. },
  187. // 标头展示
  188. columnList: [
  189. {
  190. userId: this.$store.state.user.name,
  191. functionId: 301001,
  192. serialNumber: '301001TableBuDesc',
  193. tableId: "301001Table",
  194. tableName: "检验方法维护表",
  195. columnProp: 'buDesc',
  196. headerAlign: 'center',
  197. align: "center",
  198. columnLabel: 'BU',
  199. columnHidden: false,
  200. columnImage: false,
  201. columnSortable: false,
  202. sortLv: 0,
  203. status: true,
  204. fixed: '',
  205. columnWidth: 100,
  206. },
  207. {
  208. userId: this.$store.state.user.name,
  209. functionId: 301001,
  210. serialNumber: '301001TableMethodNo',
  211. tableId: "301001Table",
  212. tableName: "检验方法维护表",
  213. columnProp: 'methodNo',
  214. headerAlign: 'center',
  215. align: "center",
  216. columnLabel: '方法编码',
  217. columnHidden: false,
  218. columnImage: false,
  219. columnSortable: false,
  220. sortLv: 0,
  221. status: true,
  222. fixed: '',
  223. columnWidth: 120,
  224. },
  225. {
  226. userId: this.$store.state.user.name,
  227. functionId: 301001,
  228. serialNumber: '301001TableMethodName',
  229. tableId: "301001Table",
  230. tableName: "检验方法维护表",
  231. columnProp: 'methodName',
  232. headerAlign: 'center',
  233. align: "left",
  234. columnLabel: '方法名称',
  235. columnHidden: false,
  236. columnImage: false,
  237. columnSortable: false,
  238. sortLv: 0,
  239. status: true,
  240. fixed: '',
  241. columnWidth: 200,
  242. },
  243. {
  244. userId: this.$store.state.user.name,
  245. functionId: 301001,
  246. serialNumber: '301001TableMethodRemark',
  247. tableId: "301001Table",
  248. tableName: "检验方法维护表",
  249. columnProp: 'methodRemark',
  250. headerAlign: 'center',
  251. align: "left",
  252. columnLabel: '方法说明',
  253. columnHidden: false,
  254. columnImage: false,
  255. columnSortable: false,
  256. sortLv: 0,
  257. status: true,
  258. fixed: '',
  259. columnWidth: 200,
  260. },
  261. {
  262. userId: this.$store.state.user.name,
  263. functionId: 301001,
  264. serialNumber: '301001TableInspectionTypeName',
  265. tableId: "301001Table",
  266. tableName: "检验方法维护表",
  267. columnProp: 'inspectionTypeName',
  268. headerAlign: 'center',
  269. align: "center",
  270. columnLabel: '检验类型',
  271. columnHidden: false,
  272. columnImage: false,
  273. columnSortable: false,
  274. sortLv: 0,
  275. status: true,
  276. fixed: '',
  277. columnWidth: 120,
  278. },
  279. {
  280. userId: this.$store.state.user.name,
  281. functionId: 301001,
  282. serialNumber: '301001TableCreateDate',
  283. tableId: "301001Table",
  284. tableName: "检验方法维护表",
  285. columnProp: 'createDate',
  286. headerAlign: 'center',
  287. align: "center",
  288. columnLabel: '创建时间',
  289. columnHidden: false,
  290. columnImage: false,
  291. columnSortable: false,
  292. sortLv: 0,
  293. status: true,
  294. fixed: '',
  295. columnWidth: 170,
  296. },
  297. {
  298. userId: this.$store.state.user.name,
  299. functionId: 301001,
  300. serialNumber: '301001TableCreateBy',
  301. tableId: "301001Table",
  302. tableName: "检验方法维护表",
  303. columnProp: 'createBy',
  304. headerAlign: 'center',
  305. align: "center",
  306. columnLabel: '创建人',
  307. columnHidden: false,
  308. columnImage: false,
  309. columnSortable: false,
  310. sortLv: 0,
  311. status: true,
  312. fixed: '',
  313. columnWidth: 120,
  314. },
  315. {
  316. userId: this.$store.state.user.name,
  317. functionId: 301001,
  318. serialNumber: '301001TableUpdateDate',
  319. tableId: "301001Table",
  320. tableName: "检验方法维护表",
  321. columnProp: 'updateDate',
  322. headerAlign: 'center',
  323. align: "center",
  324. columnLabel: '更新时间',
  325. columnHidden: false,
  326. columnImage: false,
  327. columnSortable: false,
  328. sortLv: 0,
  329. status: true,
  330. fixed: '',
  331. columnWidth: 170,
  332. },
  333. {
  334. userId: this.$store.state.user.name,
  335. functionId: 301001,
  336. serialNumber: '301001TableUpdateBy',
  337. tableId: "301001Table",
  338. tableName: "检验方法维护表",
  339. columnProp: 'updateBy',
  340. headerAlign: 'center',
  341. align: "center",
  342. columnLabel: '更新人',
  343. columnHidden: false,
  344. columnImage: false,
  345. columnSortable: false,
  346. sortLv: 0,
  347. status: true,
  348. fixed: '',
  349. columnWidth: 120,
  350. },
  351. ],
  352. rules: {
  353. methodNameType:[
  354. {
  355. required: true,
  356. message: ' ',
  357. trigger: ['blur','change']
  358. }
  359. ],
  360. inspectionTypeNoType:[
  361. {
  362. required: true,
  363. message: ' ',
  364. trigger: ['blur','change']
  365. }
  366. ],
  367. bu:[
  368. {
  369. required: true,
  370. message: ' ',
  371. trigger: ['blur','change']
  372. }
  373. ]
  374. },
  375. options: [],
  376. userBuList: [],
  377. authSearch: false,
  378. authSave: false,
  379. authUpdate: false,
  380. authDelete: false,
  381. menuId: this.$route.meta.menuId,
  382. }
  383. },
  384. mounted () {
  385. this.$nextTick(() => {
  386. this.height = window.innerHeight - 170
  387. })
  388. },
  389. created () {
  390. // 按钮控制
  391. this.getButtonAuthData()
  392. // 获取用户的 site 和 bu
  393. this.getSiteAndBuByUserName()
  394. // 校验用户是否收藏
  395. this.favoriteIsOk()
  396. // 获取检验类型
  397. this.inspectionTypeSearch()
  398. // 动态列
  399. this.getTableUserColumn(this.$route.meta.menuId+'table',1)
  400. if (!this.authSearch) {
  401. // 获取数据列表
  402. this.getDataList()
  403. }
  404. },
  405. methods: {
  406. handleColumnResize(newWidth, oldWidth, column, event){
  407. let inData= this.columnList.filter(item => item.columnProp === column.property)[0]
  408. inData.columnWidth=newWidth
  409. updateColumnSize(inData).then(({data}) => {
  410. if (data.code === 0) {
  411. console.log("栏位宽度保存成功!")
  412. }
  413. })
  414. },
  415. // 获取用户的bu
  416. getSiteAndBuByUserName () {
  417. let tempData = {
  418. username: this.$store.state.user.name,
  419. }
  420. getSiteAndBuByUserName(tempData).then(({data}) => {
  421. if (data.code === 0) {
  422. this.userBuList = data.rows
  423. }
  424. })
  425. },
  426. // 查询获取数据列表
  427. getDataList () {
  428. this.searchData.limit = this.pageSize
  429. this.searchData.page = this.pageIndex
  430. qcMethodSearch(this.searchData).then(({data}) => {
  431. if (data.code === 0) {
  432. this.dataList = data.page.list
  433. this.pageIndex = data.page.currPage
  434. this.pageSize = data.page.pageSize
  435. this.totalPage = data.page.totalCount
  436. }
  437. })
  438. },
  439. // 每页数
  440. sizeChangeHandle (val) {
  441. this.pageSize = val
  442. this.pageIndex = 1
  443. this.getDataList()
  444. },
  445. // 当前页
  446. currentChangeHandle (val) {
  447. this.pageIndex = val
  448. this.getDataList()
  449. },
  450. // 新增按钮
  451. addModal () {
  452. this.modalData = {
  453. flag: '1',
  454. site: '',
  455. bu: this.userBuList[0].buNo,
  456. createBy: this.$store.state.user.name,
  457. updateBy: this.$store.state.user.name,
  458. methodNo: '',
  459. methodName: '',
  460. methodRemark: '',
  461. inspectionTypeNo: ''
  462. }
  463. this.modalDisableFlag = false
  464. this.modalFlag = true
  465. },
  466. // 修改按钮
  467. updateModal (row) {
  468. this.modalData = {
  469. flag: '2',
  470. bu: row.site + '_' + row.buNo,
  471. site: row.site,
  472. createBy: this.$store.state.user.name,
  473. updateBy: this.$store.state.user.name,
  474. methodNo: row.methodNo,
  475. methodName: row.methodName,
  476. methodRemark: row.methodRemark,
  477. inspectionTypeNo: row.inspectionTypeNo
  478. }
  479. this.modalDisableFlag = true
  480. this.modalFlag = true
  481. },
  482. // 删除方法
  483. deleteModal (row) {
  484. this.$confirm(`是否删除这个检验方法?`, '提示', {
  485. confirmButtonText: '确定',
  486. cancelButtonText: '取消',
  487. type: 'warning'
  488. }).then(() => {
  489. qcMethodDelete(row).then(({data}) => {
  490. if (data && data.code === 0) {
  491. this.getDataList()
  492. this.$message.success('操作成功')
  493. } else {
  494. this.$message.error(data.msg)
  495. }
  496. })
  497. })
  498. },
  499. // 新增/修改方法
  500. saveData () {
  501. if (this.modalData.bu === '' || this.modalData.bu == null) {
  502. this.$message.warning('请选择BU!')
  503. return
  504. }
  505. if (this.modalData.methodName === '' || this.modalData.methodName == null) {
  506. this.$message.warning('请输入检验方法名称!')
  507. return
  508. }
  509. if(this.modalData.inspectionTypeNo === ''|| this.modalData.inspectionTypeNo == null) {
  510. this.$message.warning('请选择检验类型!')
  511. return
  512. }
  513. if (this.modalData.flag === '1') { // 新增
  514. qcMethodSave(this.modalData).then(({data}) => {
  515. if (data && data.code === 0) {
  516. this.getDataList()
  517. this.modalFlag = false
  518. this.$message.success('操作成功')
  519. } else {
  520. this.$message.error(data.msg)
  521. }
  522. })
  523. } else { // 修改
  524. qcMethodUpdate(this.modalData).then(({data}) => {
  525. if (data && data.code === 0) {
  526. this.getDataList()
  527. this.modalFlag = false
  528. this.$message.success('操作成功')
  529. } else {
  530. this.$message.error(data.msg)
  531. }
  532. })
  533. }
  534. },
  535. // 查询检验类型
  536. inspectionTypeSearch () {
  537. let tempData = {
  538. site: this.$store.state.user.site
  539. }
  540. inspectionTypeSearch(tempData).then(({data}) => {
  541. if (data.code === 0) {
  542. this.options = data.rows
  543. }
  544. })
  545. },
  546. // 校验用户是否收藏
  547. favoriteIsOk () {
  548. let userFavorite = {
  549. userId: this.$store.state.user.id,
  550. languageCode: this.$i18n.locale
  551. }
  552. userFavoriteList(userFavorite).then(({data}) => {
  553. for (let i = 0; i < data.list.length; i++) {
  554. if(this.$route.meta.menuId === data.list[i].menuId){
  555. this.favorite = true
  556. }
  557. }
  558. })
  559. },
  560. // 收藏 OR 取消收藏
  561. favoriteFunction () {
  562. let userFavorite = {
  563. userId: this.$store.state.user.id,
  564. functionId: this.$route.meta.menuId,
  565. }
  566. if (this.favorite) {
  567. removeUserFavorite(userFavorite).then(({data}) => {
  568. this.$message.success(data.msg)
  569. this.favorite = false
  570. })
  571. } else {
  572. // 收藏
  573. saveUserFavorite(userFavorite).then(({data}) => {
  574. this.$message.success(data.msg)
  575. this.favorite = true
  576. })
  577. }
  578. },
  579. async exportExcel() {
  580. this.searchData.limit = -1
  581. this.searchData.page = 1
  582. excel.exportTable({
  583. url: "/pms/qc/qcMethodSearch",
  584. columnMapping: this.columnList, //可以直接用table,不需要的列就剔除
  585. mergeSetting: [],//需要合并的列
  586. params: this.searchData,
  587. fileName: this.exportName+".xlsx",
  588. rowFetcher: res => res.data,
  589. columnFormatter: [],
  590. dropColumns: [],
  591. })
  592. },
  593. // 动态列开始 获取 用户保存的 格式列
  594. async getTableUserColumn (tableId, columnId) {
  595. let queryTableUser = {
  596. userId: this.$store.state.user.name,
  597. functionId: this.$route.meta.menuId,
  598. tableId: tableId,
  599. status: true,
  600. languageCode: this.$i18n.locale
  601. }
  602. await getTableUserListLanguage(queryTableUser).then(({data}) => {
  603. if (data.rows.length > 0) {
  604. switch (columnId) {
  605. case 1:
  606. this.columnList = data.rows
  607. break;
  608. }
  609. } else {
  610. this.getColumnList(tableId, columnId)
  611. }
  612. })
  613. },
  614. // 获取 tableDefault 列
  615. async getColumnList (tableId, columnId) {
  616. let queryTable = {
  617. functionId: this.$route.meta.menuId,
  618. tableId: tableId,
  619. languageCode: this.$i18n.locale
  620. }
  621. await getTableDefaultListLanguage(queryTable).then(({data}) => {
  622. if (data.rows.length !== 0) {
  623. switch (columnId) {
  624. case 1:
  625. this.columnList = data.rows
  626. break;
  627. }
  628. }
  629. })
  630. },
  631. //获取按钮的权限数据
  632. getButtonAuthData () {
  633. let searchFlag = this.isAuth(this.menuId+":search")
  634. let saveFlag = this.isAuth(this.menuId+":save")
  635. let updateFlag = this.isAuth(this.menuId+":update")
  636. let deleteFlag = this.isAuth(this.menuId+":delete")
  637. //处理页面的权限数据
  638. this.authSearch = !searchFlag
  639. this.authSave = !saveFlag
  640. this.authUpdate = !updateFlag
  641. this.authDelete = !deleteFlag
  642. },
  643. }
  644. }
  645. </script>
  646. <style scoped>
  647. .el-table /deep/ .cell{
  648. height: auto;
  649. line-height: 1.5;
  650. }
  651. </style>