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.

534 lines
16 KiB

  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="'部门编码'">
  10. <el-input v-model="searchData.departmentId" style="width: 120px"></el-input>
  11. </el-form-item>
  12. <el-form-item :label="'部门名称'">
  13. <el-input v-model="searchData.departmentName" style="width: 120px"></el-input>
  14. </el-form-item>
  15. <el-form-item :label="' '">
  16. <el-button @click="getDataList()">查询</el-button>
  17. <el-button type="primary" @click="addModal()">新增</el-button>
  18. <download-excel
  19. :fields="fields()"
  20. :data="exportData"
  21. type="xls"
  22. :name="exportName"
  23. :header="exportHeader"
  24. :footer="exportFooter"
  25. :fetch="createExportData"
  26. :before-generate="startDownload"
  27. :before-finish="finishDownload"
  28. worksheet="导出信息"
  29. class="el-button el-button--primary el-button--medium">
  30. {{ "导出" }}
  31. </download-excel>
  32. </el-form-item>
  33. </el-form>
  34. <el-table
  35. :height="height"
  36. :data="dataList"
  37. border
  38. v-loading="dataListLoading"
  39. style="width: 100%;">
  40. <el-table-column
  41. v-for="(item,index) in columnList" :key="index"
  42. :sortable="item.columnSortable"
  43. :prop="item.columnProp"
  44. :header-align="item.headerAlign"
  45. :show-overflow-tooltip="item.showOverflowTooltip"
  46. :align="item.align"
  47. :fixed="item.fixed==''?false:item.fixed"
  48. :min-width="item.columnWidth"
  49. :label="item.columnLabel">
  50. <template slot-scope="scope">
  51. <span v-if="!item.columnHidden"> {{ scope.row[item.columnProp] }}</span>
  52. <span v-if="item.columnImage"><img :src="scope.row[item.columnProp]" style="width: 100px; height: 80px"/></span>
  53. </template>
  54. </el-table-column>
  55. <el-table-column
  56. fixed="right"
  57. header-align="center"
  58. align="center"
  59. width="100"
  60. label="操作">
  61. <template slot-scope="scope">
  62. <!-- <a type="text" size="small" @click="updateModal(scope.row)">编辑</a>-->
  63. <a type="text" size="small" @click="deleteModal(scope.row)">删除</a>
  64. </template>
  65. </el-table-column>
  66. </el-table>
  67. <el-pagination
  68. @size-change="sizeChangeHandle"
  69. @current-change="currentChangeHandle"
  70. :current-page="pageIndex"
  71. :page-sizes="[20, 50, 100, 1000]"
  72. :page-size="pageSize"
  73. :total="totalPage"
  74. layout="total, sizes, prev, pager, next, jumper">
  75. </el-pagination>
  76. <el-dialog title="分类" :close-on-click-modal="false" v-drag :visible.sync="modalFlag" width="430px">
  77. <el-form :inline="true" label-position="top" :model="modalData" :rules="rules" style="margin-left: 7px;margin-top: -5px;">
  78. <!-- <el-form-item prop="siteName" :rules="rules.siteType">-->
  79. <!-- <span slot="label" style="" @click="getBaseList(93)"><a herf="#">工厂</a></span>-->
  80. <!-- <el-input v-model="modalData.siteName" style="width: 120px;"></el-input>-->
  81. <!-- </el-form-item>-->
  82. <el-form-item label="BU" prop="bu" :rules="rules.bu">
  83. <el-select v-model="modalData.bu" placeholder="请选择" :disabled="modalDisableFlag" style="width: 383px">
  84. <el-option
  85. v-for = "i in userBuList"
  86. :key = "i.buNo"
  87. :label = "i.sitename"
  88. :value = "i.buNo">
  89. <span style="float: left;width: 100px">{{ i.sitename }}</span>
  90. <span style="float: right; color: #8492a6;white-space:nowrap;overflow:hidden;text-overflow:ellipsis; font-size: 11px;width: 60px">
  91. {{ i.buDesc }}
  92. </span>
  93. </el-option>
  94. </el-select>
  95. </el-form-item>
  96. </el-form>
  97. <el-form :inline="true" label-position="top" :model="modalData" :rules="rules" style="margin-left: 7px;margin-top: -5px;">
  98. <el-form-item prop="departmentId" :rules="rules.departmentIdType">
  99. <span slot="label" style="" @click="getBaseList(1053)"><a herf="#">部门编码</a></span>
  100. <el-input v-model="modalData.departmentId" style="width: 140px"></el-input>
  101. </el-form-item>
  102. <el-form-item label="部门名称" prop="departmentName" :rules="rules.departmentNameType">
  103. <el-input v-model="modalData.departmentName" disabled style="width: 230px"></el-input>
  104. </el-form-item>
  105. </el-form>
  106. <el-footer style="height:40px;margin-top: 10px;text-align:center">
  107. <el-button type="primary" @click="saveData()">保存</el-button>
  108. <el-button type="primary" @click="modalFlag = false">关闭</el-button>
  109. </el-footer>
  110. </el-dialog>
  111. <Chooselist ref="baseList" @getBaseData="getBaseData"></Chooselist>
  112. </div>
  113. </template>
  114. <script>
  115. import {getSiteAndBuByUserName} from "@/api/eam/eam.js"
  116. import {departmentSearch, departmentSave, departmentDelete} from "@/api/department.js"
  117. import {userFavoriteList, saveUserFavorite, removeUserFavorite} from '@/api/userFavorite.js'
  118. import Chooselist from '@/views/modules/common/Chooselist'
  119. import department from './department.vue'
  120. export default {
  121. components: {Chooselist},
  122. watch: {
  123. searchData: {
  124. deep: true,
  125. handler: function (newV, oldV) {
  126. this.searchData.departmentId = this.searchData.departmentId.toUpperCase()
  127. }
  128. },
  129. modalData: {
  130. deep: true,
  131. handler: function (newV, oldV) {
  132. this.modalData.departmentId = this.modalData.departmentId.toUpperCase()
  133. }
  134. }
  135. },
  136. data () {
  137. return {
  138. // 是否收藏
  139. favorite: false,
  140. // 导出 start
  141. exportData: [],
  142. exportName: "设备分类" + this.dayjs().format('YYYYMMDDHHmmss'),
  143. exportHeader: ["设备分类"],
  144. exportFooter: [],
  145. resultList: [],
  146. // 导出 end
  147. searchData: {
  148. site: this.$store.state.user.site,
  149. username: this.$store.state.user.name,
  150. departmentId: '',
  151. departmentName: '',
  152. page: 1,
  153. limit: 10,
  154. },
  155. height: 200,
  156. pageIndex: 1,
  157. pageSize: 20,
  158. totalPage: 0,
  159. dataList: [],
  160. dataListLoading: false,
  161. dataListSelections: [],
  162. modalFlag: false,
  163. modalDisableFlag: false,
  164. modalData: {
  165. flag: '',
  166. bu: '',
  167. site: this.$store.state.user.site,
  168. departmentId: '',
  169. departmentName: '',
  170. createBy: this.$store.state.user.name,
  171. updateBy: this.$store.state.user.name,
  172. },
  173. departmentList: [],
  174. // 展示列集
  175. columnList: [
  176. {
  177. columnProp: 'site',
  178. headerAlign: "center",
  179. align: "center",
  180. columnLabel: '工厂',
  181. columnHidden: false,
  182. columnImage: false,
  183. columnSortable: false,
  184. sortLv: 0,
  185. status: true,
  186. fixed: '',
  187. },
  188. {
  189. columnProp: 'buDesc',
  190. headerAlign: "center",
  191. align: "center",
  192. columnLabel: 'BU',
  193. columnHidden: false,
  194. columnImage: false,
  195. columnSortable: false,
  196. sortLv: 0,
  197. status: true,
  198. fixed: '',
  199. },
  200. {
  201. columnProp: 'departmentId',
  202. headerAlign: "center",
  203. align: "center",
  204. columnLabel: '部门编码',
  205. columnHidden: false,
  206. columnImage: false,
  207. columnSortable: false,
  208. sortLv: 0,
  209. status: true,
  210. fixed: '',
  211. },
  212. {
  213. columnProp: 'departmentName',
  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. },
  224. {
  225. columnProp: 'createDate',
  226. headerAlign: 'center',
  227. align: "center",
  228. columnLabel: '创建时间',
  229. columnHidden: false,
  230. columnImage: false,
  231. columnSortable: false,
  232. sortLv: 0,
  233. status: true,
  234. fixed: '',
  235. },
  236. {
  237. columnProp: 'createBy',
  238. headerAlign: 'center',
  239. align: "center",
  240. columnLabel: '创建人',
  241. columnHidden: false,
  242. columnImage: false,
  243. columnSortable: false,
  244. sortLv: 0,
  245. status: true,
  246. fixed: '',
  247. },
  248. {
  249. columnProp: 'updateDate',
  250. headerAlign: 'center',
  251. align: "center",
  252. columnLabel: '更新时间',
  253. columnHidden: false,
  254. columnImage: false,
  255. columnSortable: false,
  256. sortLv: 0,
  257. status: true,
  258. fixed: '',
  259. },
  260. {
  261. columnProp: 'updateBy',
  262. headerAlign: 'center',
  263. align: "center",
  264. columnLabel: '更新人',
  265. columnHidden: false,
  266. columnImage: false,
  267. columnSortable: false,
  268. sortLv: 0,
  269. status: true,
  270. fixed: '',
  271. },
  272. ],
  273. levelList: [],
  274. rules: {
  275. // siteType:[
  276. // {
  277. // required: true,
  278. // message: ' ',
  279. // trigger: 'change'
  280. // }
  281. // ],
  282. departmentIdType:[
  283. {
  284. required: true,
  285. message: ' ',
  286. trigger: ['blur','change']
  287. }
  288. ],
  289. departmentNameType:[
  290. {
  291. required: true,
  292. message: ' ',
  293. trigger: ['blur','change']
  294. }
  295. ],
  296. bu:[
  297. {
  298. required: true,
  299. message: ' ',
  300. trigger: ['blur','change']
  301. }
  302. ]
  303. },
  304. userBuList: []
  305. }
  306. },
  307. mounted () {
  308. this.$nextTick(() => {
  309. this.height = window.innerHeight - 210
  310. })
  311. },
  312. created () {
  313. // 获取用户的 site 和 bu
  314. this.getSiteAndBuByUserName()
  315. // 校验用户是否收藏
  316. this.favoriteIsOk()
  317. // 获取数据列表
  318. this.getDataList()
  319. },
  320. methods: {
  321. // 获取用户的bu
  322. getSiteAndBuByUserName () {
  323. let tempData = {
  324. username: this.$store.state.user.name,
  325. }
  326. getSiteAndBuByUserName(tempData).then(({data}) => {
  327. if (data.code === 0) {
  328. this.userBuList = data.rows
  329. }
  330. })
  331. },
  332. getBaseData (val) {
  333. if (this.tagNo === 93) {
  334. this.modalData.site = val.SiteID
  335. this.$set(this.modalData,'siteName',val.SiteName);
  336. }
  337. if (this.tagNo === 1053) {
  338. this.modalData.departmentId = val.dept_id
  339. this.$set(this.modalData,'departmentName',val.dept_name);
  340. }
  341. },
  342. // 获取基础数据列表
  343. getBaseList (val) {
  344. this.tagNo = val
  345. this.$nextTick(() => {
  346. let strVal = "";
  347. if (val === 93){
  348. strVal = this.modalData.site
  349. this.$refs.baseList.init(val,strVal)
  350. }
  351. if (val === 1053) {
  352. strVal = this.modalData.departmentId
  353. this.$refs.baseList.init(val, strVal)
  354. }
  355. })
  356. },
  357. // 获取数据列表
  358. getDataList () {
  359. this.searchData.limit = this.pageSize
  360. this.searchData.page = this.pageIndex
  361. departmentSearch(this.searchData).then(({data}) => {
  362. if (data.code === 0) {
  363. this.dataList = data.page.list
  364. this.pageIndex = data.page.currPage
  365. this.pageSize = data.page.pageSize
  366. this.totalPage = data.page.totalCount
  367. }
  368. this.dataListLoading = false
  369. })
  370. },
  371. // 每页数
  372. sizeChangeHandle (val) {
  373. this.pageSize = val
  374. this.pageIndex = 1
  375. this.getDataList()
  376. },
  377. // 当前页
  378. currentChangeHandle (val) {
  379. this.pageIndex = val
  380. this.getDataList()
  381. },
  382. // 多选
  383. selectionChangeHandle (val) {
  384. this.dataListSelections = val
  385. },
  386. addModal () {
  387. this.modalData = {
  388. flag: '1',
  389. bu: this.userBuList[0].buNo,
  390. site: this.$store.state.user.site,
  391. departmentId: '',
  392. departmentName: '',
  393. createBy: this.$store.state.user.name,
  394. updateBy: this.$store.state.user.name,
  395. }
  396. this.modalDisableFlag = false
  397. this.modalFlag = true
  398. },
  399. // 删除
  400. deleteModal (row) {
  401. this.$confirm(`是否删除这个部门?`, '提示', {
  402. confirmButtonText: '确定',
  403. cancelButtonText: '取消',
  404. type: 'warning'
  405. }).then(() => {
  406. departmentDelete(row).then(({data}) => {
  407. if (data && data.code === 0) {
  408. this.getDataList()
  409. this.$message({
  410. message: '操作成功',
  411. type: 'success',
  412. duration: 1500,
  413. onClose: () => {}
  414. })
  415. } else {
  416. this.$alert(data.msg, '错误', {
  417. confirmButtonText: '确定'
  418. })
  419. }
  420. })
  421. }).catch(() => {
  422. })
  423. },
  424. // 新增
  425. saveData () {
  426. if (this.modalData.bu === '' || this.modalData.bu == null) {
  427. this.$message.warning('请选择BU!')
  428. return
  429. }
  430. if (this.modalData.departmentId === '' || this.modalData.departmentId == null) {
  431. this.$message.warning('请输入部门编码!')
  432. return
  433. }
  434. departmentSave(this.modalData).then(({data}) => {
  435. if (data && data.code === 0) {
  436. this.getDataList()
  437. this.modalFlag = false
  438. this.$message({
  439. message: '操作成功',
  440. type: 'success',
  441. duration: 1500,
  442. onClose: () => {}
  443. })
  444. } else {
  445. this.$alert(data.msg, '错误', {
  446. confirmButtonText: '确定'
  447. })
  448. }
  449. })
  450. },
  451. // 校验用户是否收藏
  452. favoriteIsOk () {
  453. let userFavorite = {
  454. userId: this.$store.state.user.id,
  455. languageCode: this.$i18n.locale
  456. }
  457. userFavoriteList(userFavorite).then(({data}) => {
  458. for (let i = 0; i < data.list.length; i++) {
  459. if (this.$route.meta.menuId === data.list[i].menuId) {
  460. this.favorite = true
  461. }
  462. }
  463. })
  464. },
  465. // 收藏 OR 取消收藏
  466. favoriteFunction () {
  467. let userFavorite = {
  468. userId: this.$store.state.user.id,
  469. functionId: this.$route.meta.menuId,
  470. }
  471. if (this.favorite) {
  472. removeUserFavorite(userFavorite).then(({data}) => {
  473. this.$message.success(data.msg)
  474. this.favorite = false
  475. })
  476. } else {
  477. // 收藏
  478. saveUserFavorite(userFavorite).then(({data}) => {
  479. this.$message.success(data.msg)
  480. this.favorite = true
  481. })
  482. }
  483. },
  484. //导出excel
  485. async createExportData () {
  486. this.searchData.limit = -1
  487. this.searchData.page = 1
  488. await departmentSearch(this.searchData).then(({data}) => {
  489. this.resultList= data.page.list
  490. })
  491. return this.resultList
  492. },
  493. startDownload () {},
  494. finishDownload () {},
  495. fields () {
  496. let json = "{"
  497. this.columnList.forEach((item, index) => {
  498. if (index == this.columnList.length - 1) {
  499. json += "\"" + item.columnLabel + "\"" + ":" + "\"" + item.columnProp + "\""
  500. } else {
  501. json += "\"" + item.columnLabel + "\"" + ":" + "\"" + item.columnProp + "\"" + ","
  502. }
  503. })
  504. json += "}"
  505. let s = eval("(" + json + ")")
  506. return s
  507. },
  508. }
  509. }
  510. </script>