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.

700 lines
22 KiB

3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
  1. <template>
  2. <div class="mod-config">
  3. <div>
  4. <span @click="favoriteFunction()">
  5. <icon-svg :name="favorite?'xiangqufill':'xiangqu'" class="sl-svg"></icon-svg>
  6. </span>
  7. </div>
  8. <el-form :inline="true" label-position="top" :model="searchData" @keyup.enter.native="getDataList()">
  9. <el-form-item :label="'BU'">
  10. <el-select v-model="searchData.buDesc" placeholder="请选择" clearable style="width: 130px">
  11. <el-option
  12. v-for = "i in userBuList"
  13. :key = "i.buNo"
  14. :label = "i.buDesc"
  15. :value = "i.buDesc">
  16. </el-option>
  17. </el-select>
  18. </el-form-item>
  19. <el-form-item :label="'分组编码'">
  20. <el-input v-model="searchData.groupID" style="width: 120px"></el-input>
  21. </el-form-item>
  22. <el-form-item :label="'分组名称'">
  23. <el-input v-model="searchData.groupDesc" style="width: 120px"></el-input>
  24. </el-form-item>
  25. <el-form-item :label="'在用'">
  26. <el-select filterable v-model="searchData.active" style="width: 130px">
  27. <el-option label="全部" value=""></el-option>
  28. <el-option label="是" value="Y"></el-option>
  29. <el-option label="否" value="N"></el-option>
  30. </el-select>
  31. </el-form-item>
  32. <el-form-item :label="' '">
  33. <el-button v-if="!authSearch" @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. <el-table
  52. :height="height"
  53. :data="dataList"
  54. border
  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="100"
  76. label="操作">
  77. <template slot-scope="scope">
  78. <a v-if="!authUpdate" type="text" size="small" @click="updateModal(scope.row)">修改</a>
  79. <a v-if="!authDelete" type="text" size="small" @click="deleteGroup(scope.row)">删除</a>
  80. </template>
  81. </el-table-column>
  82. </el-table>
  83. <el-pagination
  84. @size-change="sizeChangeHandle"
  85. @current-change="currentChangeHandle"
  86. :current-page="pageIndex"
  87. :page-sizes="[20, 50, 100, 200, 500]"
  88. :page-size="pageSize"
  89. :total="totalPage"
  90. layout="total, sizes, prev, pager, next, jumper">
  91. </el-pagination>
  92. <el-dialog title="分组" :close-on-click-modal="false" v-drag :visible.sync="modalFlag" width="430px">
  93. <el-form :inline="true" label-position="top" :model="modalData" :rules="rules" style="margin-left: 7px;margin-top: -5px;">
  94. <el-form-item label="BU" prop="bu" :rules="rules.bu">
  95. <el-select v-model="modalData.bu" placeholder="请选择" :disabled="modalDisableFlag" style="width: 230px">
  96. <el-option
  97. v-for = "i in userBuList"
  98. :key = "i.buNo"
  99. :label = "i.buNo"
  100. :value = "i.buNo">
  101. <span style="float: left;width: 100px">{{ i.sitename }}</span>
  102. <span style="float: right; color: #8492a6;white-space:nowrap;overflow:hidden;text-overflow:ellipsis; font-size: 11px;width: 60px">
  103. {{ i.buDesc }}
  104. </span>
  105. </el-option>
  106. </el-select>
  107. </el-form-item>
  108. <el-form-item label="是否在用" prop="active" :rules="rules.activeType">
  109. <el-select filterable v-model="modalData.active" style="width: 140px">
  110. <el-option label="是" value="Y"></el-option>
  111. <el-option label="否" value="N"></el-option>
  112. </el-select>
  113. </el-form-item>
  114. </el-form>
  115. <el-form :inline="true" label-position="top" :model="modalData" :rules="rules" style="margin-left: 7px;margin-top: -5px;">
  116. <el-form-item label="分组编码" prop="groupID" :rules="rules.groupIdType">
  117. <el-input v-model="modalData.groupID" :disabled="modalDisableFlag" style="width: 140px"></el-input>
  118. </el-form-item>
  119. <el-form-item label="分组名称" prop="groupDesc" :rules="rules.groupDescType">
  120. <el-input v-model="modalData.groupDesc" style="width: 230px"></el-input>
  121. </el-form-item>
  122. </el-form>
  123. <el-footer style="height:40px;margin-top: 10px;text-align:center">
  124. <el-button type="primary" @click="saveData()">保存</el-button>
  125. <el-button type="primary" @click="modalFlag = false">关闭</el-button>
  126. </el-footer>
  127. </el-dialog>
  128. </div>
  129. </template>
  130. <script>
  131. import {
  132. eamGroupSearch,
  133. eamGroupSave,
  134. eamGroupEdit,
  135. eamGroupDelete,
  136. getSiteAndBuByUserName
  137. } from "@/api/eam/eam.js"
  138. import {userFavoriteList, saveUserFavorite, removeUserFavorite} from '@/api/userFavorite.js'
  139. import {
  140. getTableDefaultListLanguage,
  141. getTableUserListLanguage,
  142. } from "@/api/table.js"
  143. export default {
  144. watch: {
  145. searchData: {
  146. deep: true,
  147. handler: function (newV, oldV) {
  148. this.searchData.groupID = this.searchData.groupID.toUpperCase()
  149. }
  150. },
  151. modalData: {
  152. deep: true,
  153. handler: function (newV, oldV) {
  154. this.modalData.groupID = this.modalData.groupID.toUpperCase()
  155. }
  156. }
  157. },
  158. data () {
  159. return {
  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: this.$store.state.user.site,
  171. userName: this.$store.state.user.name,
  172. groupID: '',
  173. groupDesc: '',
  174. buDesc: '',
  175. active: 'Y',
  176. page: 1,
  177. limit: 10,
  178. },
  179. height: 200,
  180. pageIndex: 1,
  181. pageSize: 20,
  182. totalPage: 0,
  183. dataList: [],
  184. dataListSelections: [],
  185. modalFlag:false,
  186. modalDisableFlag:false,
  187. modalData:{
  188. flag:'',
  189. bu: '',
  190. site: this.$store.state.user.site,
  191. groupID:'',
  192. groupDesc:'',
  193. active:'',
  194. createBy: this.$store.state.user.name,
  195. updateBy: this.$store.state.user.name,
  196. },
  197. departmentList:[],
  198. // 展示列集
  199. columnList: [
  200. {
  201. userId: this.$store.state.user.name,
  202. functionId: 101001002,
  203. serialNumber: '101001002Table1BuDesc',
  204. tableId: "101001002Table1",
  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: 101001002,
  221. serialNumber: '101001002Table1GroupID',
  222. tableId: "101001002Table1",
  223. tableName: "设备分组表",
  224. columnProp: 'groupID',
  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: 101001002,
  239. serialNumber: '101001002Table1GroupDesc',
  240. tableId: "101001002Table1",
  241. tableName: "设备分组表",
  242. columnProp: 'groupDesc',
  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: 120,
  253. },
  254. {
  255. userId: this.$store.state.user.name,
  256. functionId: 101001002,
  257. serialNumber: '101001002Table1Active',
  258. tableId: "101001002Table1",
  259. tableName: "设备分组表",
  260. columnProp: 'active',
  261. headerAlign: "center",
  262. align: "center",
  263. columnLabel: '在用',
  264. columnHidden: false,
  265. columnImage: false,
  266. columnSortable: false,
  267. sortLv: 0,
  268. status: true,
  269. fixed: '',
  270. columnWidth: 120,
  271. },
  272. {
  273. userId: this.$store.state.user.name,
  274. functionId: 101001002,
  275. serialNumber: '101001002Table1CreateDate',
  276. tableId: "101001002Table1",
  277. tableName: "设备分组表",
  278. columnProp: 'createDate',
  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: 101001002,
  293. serialNumber: '101001002Table1CreateBy',
  294. tableId: "101001002Table1",
  295. tableName: "设备分组表",
  296. columnProp: 'createBy',
  297. headerAlign: "center",
  298. align: "left",
  299. columnLabel: '创建人',
  300. columnHidden: false,
  301. columnImage: false,
  302. columnSortable: false,
  303. sortLv: 0,
  304. status: true,
  305. fixed: '',
  306. columnWidth: 120,
  307. },
  308. {
  309. userId: this.$store.state.user.name,
  310. functionId: 101001002,
  311. serialNumber: '101001002Table1UpdateDate',
  312. tableId: "101001002Table1",
  313. tableName: "设备分组表",
  314. columnProp: 'updateDate',
  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: 101001002,
  329. serialNumber: '101001002Table1UpdateBy',
  330. tableId: "101001002Table1",
  331. tableName: "设备分组表",
  332. columnProp: 'updateBy',
  333. headerAlign: "center",
  334. align: "left",
  335. columnLabel: '更新人',
  336. columnHidden: false,
  337. columnImage: false,
  338. columnSortable: false,
  339. sortLv: 0,
  340. status: true,
  341. fixed: '',
  342. columnWidth: 120,
  343. },
  344. ],
  345. levelList:[],
  346. rules:{
  347. groupIdType:[
  348. {
  349. required: true,
  350. message: ' ',
  351. trigger: 'change'
  352. }
  353. ],
  354. groupDescType:[
  355. {
  356. required: true,
  357. message: ' ',
  358. trigger: 'change'
  359. }
  360. ],
  361. activeType:[
  362. {
  363. required: true,
  364. message: ' ',
  365. trigger: 'change'
  366. }
  367. ],
  368. bu:[
  369. {
  370. required: true,
  371. message: ' ',
  372. trigger: 'change'
  373. }
  374. ]
  375. },
  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 - 210
  387. })
  388. },
  389. created () {
  390. // 按钮控制
  391. this.getButtonAuthData()
  392. // 获取用户的 site 和 bu
  393. this.getSiteAndBuByUserName()
  394. // 校验用户是否收藏
  395. this.favoriteIsOk()
  396. // 动态列
  397. this.getTableUserColumn(this.$route.meta.menuId+'table1',1)
  398. if (!this.authSearch) {
  399. // 获取数据列表
  400. this.getDataList()
  401. }
  402. },
  403. methods: {
  404. // 获取用户的bu
  405. getSiteAndBuByUserName () {
  406. let tempData = {
  407. username: this.$store.state.user.name,
  408. }
  409. getSiteAndBuByUserName(tempData).then(({data}) => {
  410. if (data.code === 0) {
  411. this.userBuList = data.rows
  412. }
  413. })
  414. },
  415. // 校验用户是否收藏
  416. favoriteIsOk () {
  417. let userFavorite = {
  418. userId: this.$store.state.user.id,
  419. languageCode: this.$i18n.locale
  420. }
  421. userFavoriteList(userFavorite).then(({data}) => {
  422. for (let i = 0; i < data.list.length; i++) {
  423. if (this.$route.meta.menuId === data.list[i].menuId) {
  424. this.favorite = true
  425. }
  426. }
  427. })
  428. },
  429. // 收藏 OR 取消收藏
  430. favoriteFunction () {
  431. let userFavorite = {
  432. userId: this.$store.state.user.id,
  433. functionId: this.$route.meta.menuId,
  434. }
  435. if (this.favorite) {
  436. removeUserFavorite(userFavorite).then(({data}) => {
  437. this.$message.success(data.msg)
  438. this.favorite = false
  439. })
  440. } else {
  441. // 收藏
  442. saveUserFavorite(userFavorite).then(({data}) => {
  443. this.$message.success(data.msg)
  444. this.favorite = true
  445. })
  446. }
  447. },
  448. //导出excel
  449. async createExportData () {
  450. this.searchData.limit = -1
  451. this.searchData.page = 1
  452. await eamGroupSearch(this.searchData).then(({data}) => {
  453. this.exportList = data.page.list
  454. })
  455. return this.exportList
  456. },
  457. startDownload () {},
  458. finishDownload () {},
  459. fields () {
  460. let json = "{"
  461. this.columnList.forEach((item, index) => {
  462. if (index == this.columnList.length - 1) {
  463. json += "\"" + item.columnLabel + "\"" + ":" + "\"" + item.columnProp + "\""
  464. } else {
  465. json += "\"" + item.columnLabel + "\"" + ":" + "\"" + item.columnProp + "\"" + ","
  466. }
  467. })
  468. json += "}"
  469. let s = eval("(" + json + ")")
  470. return s
  471. },
  472. // 获取数据列表
  473. getDataList () {
  474. this.searchData.limit = this.pageSize
  475. this.searchData.page = this.pageIndex
  476. eamGroupSearch(this.searchData).then(({data}) => {
  477. if (data.code === 0) {
  478. this.dataList = data.page.list
  479. this.pageIndex = data.page.currPage
  480. this.pageSize = data.page.pageSize
  481. this.totalPage = data.page.totalCount
  482. }
  483. })
  484. },
  485. // 每页数
  486. sizeChangeHandle (val) {
  487. this.pageSize = val
  488. this.pageIndex = 1
  489. this.getDataList()
  490. },
  491. // 当前页
  492. currentChangeHandle (val) {
  493. this.pageIndex = val
  494. this.getDataList()
  495. },
  496. // 多选
  497. selectionChangeHandle (val) {
  498. this.dataListSelections = val
  499. },
  500. addModal () {
  501. this.modalData = {
  502. flag: '1',
  503. bu: this.userBuList[0].buNo,
  504. site: this.$store.state.user.site,
  505. groupID: '',
  506. groupDesc: '',
  507. active: 'Y',
  508. createBy: this.$store.state.user.name,
  509. updateBy: this.$store.state.user.name,
  510. }
  511. this.modalDisableFlag = false
  512. this.modalFlag = true
  513. },
  514. updateModal (row) {
  515. this.modalData = {
  516. flag: '2',
  517. site: row.site,
  518. bu: row.site + '_' + row.buNo,
  519. groupID: row.groupID,
  520. groupDesc: row.groupDesc,
  521. active: row.active,
  522. createBy: this.$store.state.user.name,
  523. updateBy: this.$store.state.user.name,
  524. }
  525. this.modalDisableFlag = true
  526. this.modalFlag = true
  527. },
  528. // 删除
  529. deleteGroup (row) {
  530. this.$confirm(`是否删除这个分组?`, '提示', {
  531. confirmButtonText: '确定',
  532. cancelButtonText: '取消',
  533. type: 'warning'
  534. }).then(() => {
  535. eamGroupDelete(row).then(({data}) => {
  536. if (data && data.code === '0') {
  537. this.getDataList()
  538. this.$message({
  539. message: '操作成功',
  540. type: 'success',
  541. duration: 1500,
  542. onClose: () => {}
  543. })
  544. } else {
  545. this.$alert(data.msg, '错误', {
  546. confirmButtonText: '确定'
  547. })
  548. }
  549. })
  550. }).catch(() => {
  551. })
  552. },
  553. saveData () {
  554. if (this.modalData.bu === '' || this.modalData.bu == null) {
  555. this.$message.warning('请选择BU!')
  556. return
  557. }
  558. if (this.modalData.groupID === '' || this.modalData.groupID == null) {
  559. this.$message.warning('请输入分组编码!')
  560. return
  561. }
  562. if (this.modalData.groupDesc === '' || this.modalData.groupDesc == null) {
  563. this.$message.warning('请输入分组名称!')
  564. return
  565. }
  566. if (this.modalData.active === '' || this.modalData.active == null) {
  567. this.$message.warning('选择是否在用!')
  568. return
  569. }
  570. if (this.modalData.flag === '1') {
  571. eamGroupSave(this.modalData).then(({data}) => {
  572. if (data && data.code === '0') {
  573. this.getDataList()
  574. this.modalFlag=false
  575. this.$message({
  576. message: '操作成功',
  577. type: 'success',
  578. duration: 1500,
  579. onClose: () => {}
  580. })
  581. } else {
  582. this.$alert(data.msg, '错误', {
  583. confirmButtonText: '确定'
  584. })
  585. }
  586. })
  587. } else {
  588. eamGroupEdit(this.modalData).then(({data}) => {
  589. if (data && data.code === '0') {
  590. this.getDataList()
  591. this.modalFlag=false
  592. this.$message({
  593. message: '操作成功',
  594. type: 'success',
  595. duration: 1500,
  596. onClose: () => {}
  597. })
  598. } else {
  599. this.$alert(data.msg, '错误', {
  600. confirmButtonText: '确定'
  601. })
  602. }
  603. })
  604. }
  605. },
  606. // 动态列开始 获取 用户保存的 格式列
  607. async getTableUserColumn(tableId, columnId) {
  608. let queryTableUser = {
  609. userId: this.$store.state.user.name,
  610. functionId: this.$route.meta.menuId,
  611. tableId: tableId,
  612. status: true,
  613. languageCode: this.$i18n.locale
  614. }
  615. await getTableUserListLanguage(queryTableUser).then(({data}) => {
  616. if (data.rows.length > 0) {
  617. //this.columnList1 = []
  618. switch (columnId) {
  619. case 1:
  620. this.columnList = data.rows
  621. break;
  622. // case 2:
  623. // this.detailColumnList = data.rows
  624. // break;
  625. // case 3:
  626. // this.columnList2 = data.rows
  627. // break;
  628. // case 4:
  629. // this.columnList3 = data.rows
  630. // break;
  631. }
  632. } else {
  633. this.getColumnList(tableId, columnId)
  634. }
  635. })
  636. },
  637. // 获取 tableDefault 列
  638. async getColumnList (tableId, columnId) {
  639. let queryTable= {
  640. functionId: this.$route.meta.menuId,
  641. tableId: tableId,
  642. languageCode: this.$i18n.locale
  643. }
  644. await getTableDefaultListLanguage(queryTable).then(({data}) => {
  645. if (!data.rows.length == 0) {
  646. switch (columnId) {
  647. case 1:
  648. this.columnList = data.rows
  649. break;
  650. // case 2:
  651. // this.detailColumnList = data.rows
  652. // break;
  653. // case 3:
  654. // this.columnList2 = data.rows
  655. // break;
  656. // case 4:
  657. // this.columnList3 = data.rows
  658. // break;
  659. }
  660. } else {
  661. // this.showDefault = true.
  662. }
  663. })
  664. },
  665. //获取按钮的权限数据
  666. getButtonAuthData () {
  667. let searchFlag = this.isAuth(this.menuId+":search")
  668. let saveFlag = this.isAuth(this.menuId+":save")
  669. let updateFlag = this.isAuth(this.menuId+":update")
  670. let deleteFlag = this.isAuth(this.menuId+":delete")
  671. //处理页面的权限数据
  672. this.authSearch = !searchFlag
  673. this.authSave = !saveFlag
  674. this.authUpdate = !updateFlag
  675. this.authDelete = !deleteFlag
  676. },
  677. }
  678. }
  679. </script>