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.

488 lines
14 KiB

1 year ago
3 years ago
3 years ago
1 year ago
3 years ago
3 years ago
1 year ago
1 year ago
1 year ago
1 year ago
3 years ago
3 years ago
3 years ago
1 year ago
  1. <template>
  2. <div class="mod-config">
  3. <el-row>
  4. <el-col :span="24">
  5. <el-form :inline="true" label-position="top" :model="queryForm" @keyup.enter.native="getDataList()">
  6. <el-form-item label="设备编码">
  7. <el-input v-model="queryForm.resourceId" clearable></el-input>
  8. </el-form-item>
  9. <el-form-item label="设备名称">
  10. <el-input v-model="queryForm.resourceDesc" clearable></el-input>
  11. </el-form-item>
  12. <el-form-item label="备品备件编码">
  13. <el-input v-model="queryForm.partNo" clearable></el-input>
  14. </el-form-item>
  15. <el-form-item label="备品备件名称">
  16. <el-input v-model="queryForm.partDescription" clearable></el-input>
  17. </el-form-item>
  18. <el-form-item label="BU">
  19. <el-select v-model="queryForm.buNo" placeholder="请选择" style="width: 120px">
  20. <el-option label="全部" value=""> </el-option>
  21. <el-option
  22. v-for = "i in buList"
  23. :key = "i.buNo"
  24. :label = "i.buDesc"
  25. :value = "i.buNo">
  26. </el-option>
  27. </el-select>
  28. </el-form-item>
  29. <el-form-item label=" ">
  30. <el-button type="primary" @click="getDataList()">查询</el-button>
  31. <el-button type="primary" @click="addOrUpdateHandle()">新增</el-button>
  32. <download-excel
  33. :fields="fields()"
  34. :data="exportData"
  35. type="xls"
  36. :name="exportName"
  37. :header="exportHeader"
  38. :footer="exportFooter"
  39. :fetch="createExportData"
  40. :before-generate="startDownload"
  41. :before-finish="finishDownload"
  42. worksheet="导出信息"
  43. class="el-button el-button--primary el-button--medium">
  44. {{ "导出" }}
  45. </download-excel>
  46. </el-form-item>
  47. </el-form>
  48. </el-col>
  49. </el-row>
  50. <el-table
  51. :data="dataList"
  52. border
  53. :height="height"
  54. v-loading="dataListLoading"
  55. style="width: 100%;">
  56. <el-table-column
  57. v-for="(item,index) in columnList" :key="index"
  58. :sortable="item.columnSortable"
  59. :prop="item.columnProp"
  60. :header-align="item.headerAlign"
  61. :show-overflow-tooltip="item.showOverflowTooltip"
  62. :align="item.align"
  63. :fixed="item.fixed==''?false:item.fixed"
  64. :min-width="item.columnWidth"
  65. :label="item.columnLabel">
  66. <template slot-scope="scope">
  67. <span v-if="!item.columnHidden"> {{ scope.row[item.columnProp] }}</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="120"
  76. label="操作">
  77. <template slot-scope="scope">
  78. <el-link type="text" size="small" @click="addOrUpdateHandle(scope.row)">修改</el-link>
  79. <el-link type="text" size="small" @click="deleteHandle(scope.row)">| 删除</el-link>
  80. </template>
  81. </el-table-column>
  82. </el-table>
  83. <el-pagination
  84. style="margin-top: -2px;"
  85. @size-change="sizeChangeHandle"
  86. @current-change="currentChangeHandle"
  87. :current-page="pageIndex"
  88. :page-sizes="[20, 100, 500, 1000]"
  89. :page-size="pageSize"
  90. :total="totalPage"
  91. layout="total, sizes, prev, pager, next, jumper">
  92. </el-pagination>
  93. <!-- 弹窗, 新增 / 修改 -->
  94. <add-or-update v-if="addOrUpdateVisible" ref="addOrUpdate" @refreshDataList="getDataList"></add-or-update>
  95. </div>
  96. </template>
  97. <script>
  98. import AddOrUpdate from './resourcespare-add-or-update'
  99. import {getTableDefaultListLanguage, getTableUserListLanguage} from "@/api/table.js"
  100. import {
  101. getResourceSpareList,deleteResourceSpare
  102. } from '@/api/partspare/resourcespare.js'
  103. import {userFavoriteList, saveUserFavorite, removeUserFavorite} from '@/api/userFavorite.js'
  104. import {getAllBuList}from '@/api/factory/site.js'
  105. export default {
  106. data() {
  107. return {
  108. // 是否收藏
  109. favorite: false,
  110. // 导出 start
  111. exportData: [],
  112. exportName: "设备备品配件信息" + this.dayjs().format('YYYYMMDDHHmmss'),
  113. exportHeader: ["设备备品配件信息"],
  114. exportFooter: [],
  115. exportList:[],
  116. // 导出 end
  117. queryForm: {
  118. site :this.$store.state.user.site,
  119. partNo :'',
  120. partDescription : '',
  121. resourceId : '',
  122. resourceDesc : '',
  123. limit: 1,
  124. buNo: '',
  125. page: '',
  126. },
  127. buList: [],
  128. dataList: [],
  129. pageIndex: 1,
  130. pageSize: 20,
  131. totalPage: 0,
  132. height: 200,
  133. dataListLoading: false,
  134. dataListSelections: [],
  135. addOrUpdateVisible: false,
  136. // 展示列集
  137. columnList: [
  138. {
  139. userId: this.$store.state.user.name,
  140. functionId: 200101102,
  141. serialNumber: '200101102TableSite',
  142. tableId: "200101102Table",
  143. tableName: "设备备品配件信息表",
  144. columnProp: 'site',
  145. headerAlign: "center",
  146. align: "left",
  147. columnLabel: '工厂编码',
  148. columnHidden: false,
  149. columnImage: false,
  150. columnSortable: false,
  151. sortLv: 0,
  152. status: true,
  153. fixed: '',
  154. columnWidth: 70,
  155. },
  156. {
  157. userId: this.$store.state.user.name,
  158. functionId: 200101102,
  159. serialNumber: '200101102TableBuNo',
  160. tableId: "200101102Table",
  161. tableName: "设备备品配件信息表",
  162. columnProp: 'buNo',
  163. headerAlign: "center",
  164. align: "left",
  165. columnLabel: 'BU',
  166. columnHidden: false,
  167. columnImage: false,
  168. columnSortable: false,
  169. sortLv: 0,
  170. status: true,
  171. fixed: '',
  172. columnWidth: 60,
  173. },
  174. {
  175. userId: this.$store.state.user.name,
  176. functionId: 200101102,
  177. serialNumber: '200101102TableResourceId',
  178. tableId: "200101102Table",
  179. tableName: "设备备品配件信息表",
  180. columnProp: 'resourceId',
  181. headerAlign: "center",
  182. align: "left",
  183. columnLabel: '设备编码',
  184. columnHidden: false,
  185. columnImage: false,
  186. columnSortable: false,
  187. sortLv: 0,
  188. status: true,
  189. fixed: '',
  190. columnWidth: 100,
  191. },
  192. {
  193. userId: this.$store.state.user.name,
  194. functionId: 200101102,
  195. serialNumber: '200101102TableResourceDesc',
  196. tableId: "200101102Table",
  197. tableName: "设备备品配件信息表",
  198. columnProp: 'resourceDesc',
  199. headerAlign: "center",
  200. align: "left",
  201. columnLabel: '设备名称',
  202. columnHidden: false,
  203. columnImage: false,
  204. columnSortable: false,
  205. sortLv: 0,
  206. status: true,
  207. fixed: '',
  208. columnWidth: 150,
  209. },
  210. {
  211. userId: this.$store.state.user.name,
  212. functionId: 200101102,
  213. serialNumber: '200101102TablePartNo',
  214. tableId: "200101102Table",
  215. tableName: "设备备品配件信息表",
  216. columnProp: 'partNo',
  217. headerAlign: "center",
  218. align: "left",
  219. columnLabel: '备品备件编码',
  220. columnHidden: false,
  221. columnImage: false,
  222. columnSortable: false,
  223. sortLv: 0,
  224. status: true,
  225. fixed: '',
  226. columnWidth: 100,
  227. },
  228. {
  229. userId: this.$store.state.user.name,
  230. functionId: 200101102,
  231. serialNumber: '200101102TablePartDescription',
  232. tableId: "200101102Table",
  233. tableName: "设备备品配件信息表",
  234. columnProp: 'partDescription',
  235. headerAlign: "center",
  236. align: "left",
  237. columnLabel: '备品备件名称',
  238. columnHidden: false,
  239. columnImage: false,
  240. columnSortable: false,
  241. sortLv: 0,
  242. status: true,
  243. fixed: '',
  244. columnWidth: 200,
  245. },
  246. {
  247. userId: this.$store.state.user.name,
  248. functionId: 200101102,
  249. serialNumber: '200101102TableQtyUsable',
  250. tableId: "200101102Table",
  251. tableName: "设备备品配件信息表",
  252. columnProp: 'qtyUsable',
  253. headerAlign: "center",
  254. align: "right",
  255. columnLabel: '可用数量',
  256. columnHidden: false,
  257. columnImage: false,
  258. columnSortable: false,
  259. sortLv: 0,
  260. status: true,
  261. fixed: '',
  262. columnWidth: 80,
  263. },
  264. ],
  265. }
  266. },
  267. components: {
  268. AddOrUpdate
  269. },
  270. mounted() {
  271. this.$nextTick(() => {
  272. this.height = window.innerHeight - 190
  273. })
  274. },
  275. created() {
  276. // 动态列
  277. this.getTableUserColumn(this.$route.meta.menuId+'table',1)
  278. this.getBu()
  279. this.favoriteIsOk()
  280. this.getDataList()
  281. },
  282. methods: {
  283. // 校验用户是否收藏
  284. favoriteIsOk() {
  285. let userFavorite = {
  286. userId: this.$store.state.user.id,
  287. languageCode: this.$i18n.locale
  288. }
  289. userFavoriteList(userFavorite).then(({data}) => {
  290. for (let i = 0; i < data.list.length; i++) {
  291. if(this.$route.meta.menuId === data.list[i].menuId){
  292. this.favorite = true
  293. }
  294. }
  295. })
  296. },
  297. // 收藏 OR 取消收藏
  298. favoriteFunction() {
  299. let userFavorite = {
  300. userId: this.$store.state.user.id,
  301. functionId: this.$route.meta.menuId,
  302. }
  303. if (this.favorite) {
  304. // 取消收藏
  305. this.$confirm(`确定取消收藏`, '提示', {
  306. confirmButtonText: '确定',
  307. cancelButtonText: '取消',
  308. type: 'warning'
  309. }).then(() => {
  310. removeUserFavorite(userFavorite).then(({data}) => {
  311. this.$message.success(data.msg)
  312. this.favorite = false
  313. })
  314. })
  315. } else {
  316. // 收藏
  317. saveUserFavorite(userFavorite).then(({data}) => {
  318. this.$message.success(data.msg)
  319. this.favorite = true
  320. })
  321. }
  322. },
  323. // 获取数据列表
  324. getDataList() {
  325. this.dataListLoading = true
  326. this.queryForm.page = this.pageIndex
  327. this.queryForm.limit = this.pageSize
  328. getResourceSpareList(this.queryForm).then(({data}) => {
  329. if (data && data.code === 0) {
  330. this.dataList = data.page.list
  331. this.totalPage = data.page.totalCount
  332. } else {
  333. this.dataList = []
  334. this.totalPage = 0
  335. }
  336. this.dataListLoading = false
  337. })
  338. },
  339. //导出excel
  340. async createExportData() {
  341. this.queryForm.limit = -1
  342. this.queryForm.page = 1
  343. await getResourceSpareList(this.queryForm).then(({data}) => {
  344. this.exportList= data.page.list;
  345. })
  346. return this.exportList;
  347. },
  348. startDownload() {
  349. // this.exportData = this.dataList
  350. },
  351. finishDownload() {
  352. },
  353. fields() {
  354. let json = "{"
  355. this.columnList.forEach((item, index) => {
  356. if (index == this.columnList.length - 1) {
  357. json += "\"" + item.columnLabel + "\"" + ":" + "\"" + item.columnProp + "\""
  358. } else {
  359. json += "\"" + item.columnLabel + "\"" + ":" + "\"" + item.columnProp + "\"" + ","
  360. }
  361. })
  362. json += "}"
  363. let s = eval("(" + json + ")")
  364. return s
  365. },
  366. // 导出 end
  367. // 每页数
  368. sizeChangeHandle(val) {
  369. this.pageSize = val
  370. this.pageIndex = 1
  371. this.getDataList()
  372. },
  373. // 当前页
  374. currentChangeHandle(val) {
  375. this.pageIndex = val
  376. this.getDataList()
  377. },
  378. // 新增 / 修改
  379. addOrUpdateHandle(row) {
  380. this.addOrUpdateVisible = true
  381. this.$nextTick(() => {
  382. this.$refs.addOrUpdate.init(row)
  383. })
  384. },
  385. // 删除
  386. deleteHandle(row) {
  387. this.$confirm(`确定进行删除操作?`, '提示', {
  388. confirmButtonText: '确定',
  389. cancelButtonText: '取消',
  390. type: 'warning'
  391. }).then(() => {
  392. deleteResourceSpare(row).then(({data}) => {
  393. if (data && data.code === 0) {
  394. this.$message.success(data.msg)
  395. this.getDataList()
  396. } else {
  397. this.$message.error(data.msg)
  398. }
  399. })
  400. })
  401. },
  402. // 动态列开始 获取 用户保存的 格式列
  403. async getTableUserColumn (tableId, columnId) {
  404. let queryTableUser = {
  405. userId: this.$store.state.user.name,
  406. functionId: this.$route.meta.menuId,
  407. tableId: tableId,
  408. status: true,
  409. languageCode: this.$i18n.locale
  410. }
  411. await getTableUserListLanguage(queryTableUser).then(({data}) => {
  412. if (data.rows.length > 0) {
  413. //this.columnList1 = []
  414. switch (columnId) {
  415. case 1:
  416. this.columnList = data.rows
  417. break;
  418. // case 2:
  419. // this.columnDetailList = data.rows
  420. // break;
  421. // case 3:
  422. // this.columnList2 = data.rows
  423. // break;
  424. // case 4:
  425. // this.columnList3 = data.rows
  426. // break;
  427. }
  428. } else {
  429. this.getColumnList(tableId, columnId)
  430. }
  431. })
  432. },
  433. // 获取 tableDefault 列
  434. async getColumnList (tableId, columnId) {
  435. let queryTable = {
  436. functionId: this.$route.meta.menuId,
  437. tableId: tableId,
  438. languageCode: this.$i18n.locale
  439. }
  440. await getTableDefaultListLanguage(queryTable).then(({data}) => {
  441. if (!data.rows.length == 0) {
  442. switch (columnId) {
  443. case 1:
  444. this.columnList = data.rows
  445. break;
  446. // case 2:
  447. // this.columnDetailList = data.rows
  448. // break;
  449. // case 3:
  450. // this.columnList2 = data.rows
  451. // break;
  452. // case 4:
  453. // this.columnList3 = data.rows
  454. // break;
  455. }
  456. } else {
  457. // this.showDefault = true.
  458. }
  459. })
  460. },
  461. getBu () {
  462. let tempData = {
  463. username: this.$store.state.user.name,
  464. }
  465. getAllBuList(tempData).then(({data}) => {
  466. if (data.code === 0) {
  467. this.buList = data.rows
  468. }
  469. })
  470. },
  471. }
  472. }
  473. </script>