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.

612 lines
20 KiB

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