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.

739 lines
23 KiB

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