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.

500 lines
15 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
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-user">
  3. <el-form :inline="true" label-position="top" :model="dataForm" @keyup.enter.native="getDataList()">
  4. <el-form-item>
  5. <el-button @click="getDataList()" type="primary">查询</el-button>
  6. <el-button v-if="isAuth('sys:user:save')" type="primary" @click="addOrUpdateHandle()">新增</el-button>
  7. </el-form-item>
  8. </el-form>
  9. <el-form :inline="true" label-position="top" :model="dataForm" @keyup.enter.native="getDataList()">
  10. <el-form-item label="用户账号">
  11. <el-input v-model="dataForm.userName" placeholder="用户账号" clearable></el-input>
  12. </el-form-item>
  13. <el-form-item label="用户名">
  14. <el-input v-model="dataForm.userDisplay" placeholder="用户名" clearable></el-input>
  15. </el-form-item>
  16. </el-form>
  17. <el-table
  18. :data="dataList"
  19. border
  20. :height="height"
  21. v-loading="dataListLoading"
  22. @selection-change="selectionChangeHandle"
  23. highlight-current-row
  24. @current-change="handleCurrentChange"
  25. style="width: 100%;">
  26. <!-- <el-table-column-->
  27. <!-- type="selection"-->
  28. <!-- header-align="center"-->
  29. <!-- align="center"-->
  30. <!-- width="50">-->
  31. <!-- </el-table-column>-->
  32. <!-- <el-table-column-->
  33. <!-- prop="userId"-->
  34. <!-- header-align="center"-->
  35. <!-- align="center"-->
  36. <!-- width="80"-->
  37. <!-- label="ID">-->
  38. <!-- </el-table-column>-->
  39. <el-table-column
  40. prop="username"
  41. header-align="center"
  42. align="center"
  43. label="用户账号">
  44. </el-table-column>
  45. <el-table-column
  46. prop="site"
  47. header-align="center"
  48. align="center"
  49. width="80"
  50. label="工厂编号">
  51. </el-table-column>
  52. <el-table-column
  53. prop="userDisplay"
  54. header-align="center"
  55. align="center"
  56. label="用户名">
  57. </el-table-column>
  58. <el-table-column
  59. prop="email"
  60. header-align="center"
  61. align="center"
  62. label="邮箱">
  63. </el-table-column>
  64. <el-table-column
  65. prop="mobile"
  66. header-align="center"
  67. align="center"
  68. label="手机号">
  69. </el-table-column>
  70. <el-table-column
  71. prop="status"
  72. header-align="center"
  73. align="center"
  74. label="状态">
  75. <template slot-scope="scope">
  76. <el-link v-if="scope.row.status === 0" type="success">禁用</el-link>
  77. <el-link v-else type="danger">正常</el-link>
  78. </template>
  79. </el-table-column>
  80. <el-table-column
  81. prop="createTime"
  82. header-align="center"
  83. align="center"
  84. width="180"
  85. label="创建时间">
  86. </el-table-column>
  87. <el-table-column
  88. v-if="isAuth('sys:user:update') || isAuth('sys:user:workcenter') || isAuth('sys:user:delete')"
  89. fixed="left"
  90. header-align="center"
  91. align="center"
  92. width="150"
  93. label="操作">
  94. <template slot-scope="scope">
  95. <a v-if="isAuth('sys:user:update')" type="text" size="small"
  96. @click="addOrUpdateHandle(scope.row.userId)">修改</a>
  97. <!-- <a v-if="isAuth('sys:user:update')" type="text" size="small"-->
  98. <!-- @click="accessSiteModal(scope.row)">工厂权限</a>-->
  99. <a v-if="isAuth('sys:user:delete')" type="text" size="small" @click="deleteHandle(scope.row.userId)">删除</a>
  100. </template>
  101. </el-table-column>
  102. </el-table>
  103. <el-pagination
  104. @size-change="sizeChangeHandle"
  105. @current-change="currentChangeHandle"
  106. :current-page="pageIndex"
  107. :page-sizes="[20, 50, 100, 200,500]"
  108. :page-size="pageSize"
  109. :total="totalPage"
  110. layout="total, sizes, prev, pager, next, jumper">
  111. </el-pagination>
  112. <!-- 弹窗, 新增 / 修改 -->
  113. <add-or-update v-if="addOrUpdateVisible" ref="addOrUpdate" @refreshDataList="getDataList"></add-or-update>
  114. <el-dialog title="工厂权限" :close-on-click-modal="false" v-drag :visible.sync="accessSiteFlag" width="800px">
  115. <div style="font-size: 12px">
  116. 用户ID<el-input v-model="userData.username" style="width: 120px"></el-input>
  117. 用户姓名<el-input v-model="userData.userDisplay" style="width: 120px"></el-input>
  118. </div>
  119. <el-container style="margin-top: -12px;">
  120. <el-main style="width: 300px">
  121. <span style="font-size: 12px" >可选工厂</span>
  122. <el-table
  123. height="300px"
  124. :data="SiteList1"
  125. border
  126. @row-click="clickSite1"
  127. highlight-current-row
  128. v-loading="dataListLoading"
  129. style="width: 100%">
  130. <el-table-column
  131. prop="siteID"
  132. header-align="center"
  133. align="left"
  134. min-width="110"
  135. label="工厂ID">
  136. </el-table-column>
  137. <el-table-column
  138. prop="siteName"
  139. header-align="center"
  140. align="left"
  141. min-width="170"
  142. label="工厂名称">
  143. </el-table-column>
  144. </el-table>
  145. </el-main>
  146. <el-main style="width: 100px">
  147. <div style="margin-top: 100px">
  148. <el-button type="primary" @click="addSite()">添加>></el-button>
  149. </div>
  150. <div style="margin-top: 20px">
  151. <el-button type="primary" @click="deleteSite()">删除<<</el-button>
  152. </div>
  153. </el-main>
  154. <el-main style="width: 300px">
  155. <span style="font-size: 12px" >已选工厂</span>
  156. <el-table
  157. height="300px"
  158. :data="SiteList2"
  159. border
  160. @row-click="clickSite2"
  161. highlight-current-row
  162. v-loading="dataListLoading"
  163. style="width: 100%">
  164. <el-table-column
  165. prop="siteID"
  166. header-align="center"
  167. align="left"
  168. min-width="110"
  169. label="工厂ID">
  170. </el-table-column>
  171. <el-table-column
  172. prop="siteName"
  173. header-align="center"
  174. align="left"
  175. min-width="170"
  176. label="工厂名称">
  177. </el-table-column>
  178. </el-table>
  179. </el-main>
  180. </el-container>
  181. <!-- <el-footer style="height:40px;margin-top: 20px;text-align:center">-->
  182. <!-- <el-button type="primary" @click="routingModelFlag = false">关闭</el-button>-->
  183. <!-- </el-footer>-->
  184. </el-dialog>
  185. </div>
  186. </template>
  187. <script>
  188. import AddOrUpdate from './user-add-or-update'
  189. import {debounce, throttle} from '../../../utils/common'
  190. import {
  191. getUnSelectedSiteData,
  192. getAccessSiteData,
  193. addAccessSite,
  194. deleteAccessSite
  195. } from '@/api/base/site.js'
  196. export default {
  197. data () {
  198. return {
  199. showButton: true,
  200. height: 200,
  201. currentData: {},
  202. userId: this.$store.state.user.name,
  203. site: this.$store.state.user.site,
  204. transferData: [],
  205. checked: [],
  206. // 设置
  207. setUp: {
  208. reviewFlag: false,
  209. saveButton: false
  210. },
  211. dataForm: {
  212. userName: '',
  213. userDisplay: ''
  214. },
  215. columnList: [
  216. {
  217. userId: this.$store.state.user.name,
  218. serialNumber: 'security' + this.$route.meta.menuId + 'securitydesc',
  219. tableId: this.$route.meta.menuId + 'security',
  220. tableName: 'securityTable',
  221. columnProp: 'securitydesc',
  222. headerAlign: 'center',
  223. align: 'left',
  224. columnLabel: '参数描述',
  225. columnHidden: false,
  226. columnImage: false,
  227. columnWidth: 70,
  228. columnSortable: false,
  229. sortLv: 0,
  230. status: true,
  231. fixed: ''
  232. },
  233. {
  234. userId: this.$store.state.user.name,
  235. serialNumber: 'security' + this.$route.meta.menuId + 'securitydesc',
  236. tableId: this.$route.meta.menuId + 'security',
  237. tableName: 'securityTable',
  238. columnProp: 'module',
  239. headerAlign: 'center',
  240. align: 'left',
  241. columnLabel: '模块',
  242. columnHidden: false,
  243. columnImage: false,
  244. columnSortable: false,
  245. columnWidth: 20,
  246. sortLv: 0,
  247. status: true,
  248. fixed: ''
  249. },
  250. {
  251. userId: this.$store.state.user.name,
  252. serialNumber: 'security' + this.$route.meta.menuId + 'securitydesc',
  253. tableId: this.$route.meta.menuId + 'security',
  254. tableName: 'securityTable',
  255. columnProp: 'itemvalue',
  256. headerAlign: 'center',
  257. align: 'center',
  258. columnLabel: '参数值',
  259. columnHidden: true,
  260. columnImage: false,
  261. columnSortable: false,
  262. columnWidth: 10,
  263. sortLv: 0,
  264. status: true,
  265. fixed: ''
  266. }
  267. ],
  268. dataList: [],
  269. workCenterVisible: false,
  270. workCenterList: [],
  271. selectWorkCenterList: [],
  272. selectUser: {},
  273. pageIndex: 1,
  274. pageSize: 20,
  275. totalPage: 0,
  276. dataListLoading: false,
  277. dataListSelections: [],
  278. addOrUpdateVisible: false,
  279. accessSiteFlag: false,
  280. SiteList1: [],
  281. SiteList2: [],
  282. SiteRow1: null,
  283. SiteRow2: null,
  284. userData: {
  285. username: '',
  286. userDisplay: ''
  287. }
  288. }
  289. },
  290. components: {
  291. AddOrUpdate
  292. },
  293. activated () {
  294. this.getDataList()
  295. },
  296. mounted () {
  297. this.$nextTick(() => {
  298. this.height = window.innerHeight - 220
  299. })
  300. },
  301. methods: {
  302. accessSiteModal (row) {
  303. let inData = {
  304. username: row.username
  305. }
  306. getUnSelectedSiteData(inData).then(({data}) => {
  307. this.SiteList1 = data.rows
  308. })
  309. getAccessSiteData(inData).then(({data}) => {
  310. this.SiteList2 = data.rows
  311. })
  312. this.userData.username = row.username
  313. this.userData.userDisplay = row.userDisplay
  314. this.accessSiteFlag = true
  315. },
  316. clickSite1 (row) {
  317. this.SiteRow1 = JSON.parse(JSON.stringify(row))
  318. },
  319. clickSite2 (row) {
  320. this.SiteRow2 = JSON.parse(JSON.stringify(row))
  321. },
  322. addSite () {
  323. if (this.SiteRow1 == null) {
  324. this.$alert('请选择可选工厂!', '错误', {
  325. confirmButtonText: '确定'
  326. })
  327. return false
  328. }
  329. let inSiteData = {
  330. site: this.SiteRow1.siteID,
  331. userID: this.userData.username
  332. }
  333. addAccessSite(inSiteData).then(({data}) => {
  334. let inData = {
  335. username: this.userData.username
  336. }
  337. getUnSelectedSiteData(inData).then(({data}) => {
  338. this.SiteList1 = data.rows
  339. })
  340. getAccessSiteData(inData).then(({data}) => {
  341. this.SiteList2 = data.rows
  342. })
  343. this.SiteRow1 = null
  344. })
  345. },
  346. deleteSite () {
  347. if (this.SiteRow2 == null) {
  348. this.$alert('请选择已选工厂!', '错误', {
  349. confirmButtonText: '确定'
  350. })
  351. return false
  352. }
  353. let inSiteData = {
  354. site: this.SiteRow2.siteID,
  355. userID: this.userData.username
  356. }
  357. deleteAccessSite(inSiteData).then(({data}) => {
  358. let inData = {
  359. username: this.userData.username
  360. }
  361. getUnSelectedSiteData(inData).then(({data}) => {
  362. this.SiteList1 = data.rows
  363. })
  364. getAccessSiteData(inData).then(({data}) => {
  365. this.SiteList2 = data.rows
  366. })
  367. this.SiteRow2 = null
  368. })
  369. },
  370. // 选中行
  371. handleCurrentChange (val) {
  372. this.selectUser = val
  373. this.showButton = false
  374. },
  375. // 保存用户加工中心
  376. saveUserWorkCenter () {
  377. },
  378. // 获取用户已授权的加工中心
  379. searchUserWorkCenterList () {
  380. },
  381. // 获取数据列表
  382. getDataList: throttle(function () {
  383. this.dataListLoading = true
  384. this.$http({
  385. url: this.$http.adornUrl('/sys/user/list'),
  386. method: 'get',
  387. params: this.$http.adornParams({
  388. 'page': this.pageIndex,
  389. 'limit': this.pageSize,
  390. 'username': this.dataForm.userName,
  391. 'userDisplay': this.dataForm.userDisplay
  392. })
  393. }).then(({data}) => {
  394. if (data && data.code === 0) {
  395. this.dataList = data.page.list
  396. this.totalPage = data.page.totalCount
  397. } else {
  398. this.dataList = []
  399. this.totalPage = 0
  400. }
  401. this.dataListLoading = false
  402. })
  403. }, 1000),
  404. // 每页数
  405. sizeChangeHandle (val) {
  406. this.pageSize = val
  407. this.pageIndex = 1
  408. this.getDataList()
  409. },
  410. // 当前页
  411. currentChangeHandle (val) {
  412. this.pageIndex = val
  413. this.getDataList()
  414. },
  415. // 多选
  416. selectionChangeHandle (val) {
  417. this.dataListSelections = val
  418. },
  419. // 新增 / 修改
  420. addOrUpdateHandle (id) {
  421. this.addOrUpdateVisible = true
  422. this.$nextTick(() => {
  423. this.$refs.addOrUpdate.init(id)
  424. })
  425. },
  426. // 删除
  427. deleteHandle (id) {
  428. var userIds = id ? [id] : this.dataListSelections.map(item => {
  429. return item.userId
  430. })
  431. this.$confirm(`确定对[id=${userIds.join(',')}]进行[${id ? '删除' : '批量删除'}]操作?`, '提示', {
  432. confirmButtonText: '确定',
  433. cancelButtonText: '取消',
  434. type: 'warning'
  435. }).then(() => {
  436. this.$http({
  437. url: this.$http.adornUrl('/sys/user/delete'),
  438. method: 'post',
  439. data: this.$http.adornData(userIds, false)
  440. }).then(({data}) => {
  441. if (data && data.code === 0) {
  442. this.$message.success('操作成功')
  443. this.getDataList()
  444. } else {
  445. this.$message.error(data.msg)
  446. }
  447. })
  448. }).catch(() => {
  449. })
  450. }
  451. }
  452. }
  453. </script>
  454. <style>
  455. .el-transfer-panel {
  456. border: 2px solid #17b3a3;
  457. border-radius: 4px;
  458. overflow: hidden;
  459. background: #fff;
  460. display: inline-block;
  461. vertical-align: middle;
  462. width: 252px;
  463. max-height: 100%;
  464. -webkit-box-sizing: border-box;
  465. box-sizing: border-box;
  466. position: relative;
  467. }
  468. .el-transfer-panel .el-transfer-panel__header {
  469. height: 40px;
  470. line-height: 40px;
  471. background: #17b3a3;
  472. margin: 0;
  473. padding-left: 15px;
  474. border-bottom: 1px solid #17b3a3;
  475. -webkit-box-sizing: border-box;
  476. box-sizing: border-box;
  477. color: #000;
  478. }
  479. .el-transfer-panel .el-transfer-panel__header .el-checkbox .el-checkbox__label {
  480. font-size: 14px;
  481. color: #303133;
  482. font-weight: 400;
  483. }
  484. .el-dialog__title {
  485. line-height: 24px;
  486. font-size: 16px;
  487. color: #303133;
  488. }
  489. </style>