123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305
  1. <template>
  2. <div class="subPage">
  3. <div class="system-table-search">
  4. <div class="flex-h">
  5. <div class="flex-item flex-h">
  6. <el-button size="mini" type="success" @click="addUser">新增用户</el-button>
  7. </div>
  8. <ul>
  9. <li>
  10. <span>选择案场:</span>
  11. <el-select v-model="CaseId" placeholder="请选择">
  12. <el-option
  13. v-for="item in cases"
  14. :key="item.CaseId"
  15. :label="item.CaseName"
  16. :value="item.CaseId">
  17. </el-option>
  18. </el-select>
  19. </li>
  20. </ul>
  21. <el-button
  22. size="mini"
  23. type="primary" @click="search">搜索</el-button>
  24. </div>
  25. <div class="moreFilter"></div>
  26. </div>
  27. <div class="system-table-box">
  28. <el-table
  29. :data="currentList"
  30. stripe
  31. style="width: 100%">
  32. <el-table-column
  33. fixed
  34. prop="UserName"
  35. label="用户名"
  36. width="150">
  37. </el-table-column>
  38. <el-table-column
  39. prop="RealName"
  40. label="真实姓名"
  41. width="120">
  42. </el-table-column>
  43. <el-table-column
  44. prop="Email"
  45. label="邮箱"
  46. width="150">
  47. </el-table-column>
  48. <el-table-column
  49. prop="WorkNo"
  50. label="工号"
  51. width="200">
  52. </el-table-column>
  53. <el-table-column
  54. prop="Phone"
  55. label="手机号"
  56. width="100">
  57. </el-table-column>
  58. <el-table-column
  59. prop="UserTypeNames"
  60. label="用户类型"
  61. width="100">
  62. </el-table-column>
  63. <el-table-column
  64. prop="CreateDate"
  65. label="创建时间"
  66. width="200">
  67. </el-table-column>
  68. <el-table-column label="操作" fixed='right' width="300">
  69. <template slot-scope="scope">
  70. <el-button
  71. size="mini"
  72. type="warning"
  73. @click="handleEdit(scope.$index, scope.row)">编辑</el-button>
  74. <el-button
  75. size="mini"
  76. type="danger"
  77. @click="handleDelete(scope.$index, scope.row)">删除</el-button>
  78. <el-button
  79. size="mini"
  80. type="success"
  81. @click="handleBind(scope.$index, scope.row)">绑定角色</el-button>
  82. </template>
  83. </el-table-column>
  84. </el-table>
  85. </div>
  86. <el-pagination
  87. @current-change="handleCurrentChange"
  88. :current-page.sync="postData.page"
  89. :page-size="postData.pagesize"
  90. layout="prev, pager, next, jumper"
  91. :total="total">
  92. </el-pagination>
  93. <el-dialog v-if="currentEditItem != null" :title="'绑定角色 - ' + currentEditItem.UserName" :visible.sync="dialogTableVisible">
  94. <form class="mainForm">
  95. <ul>
  96. <li class="flex-h">
  97. <span>输入搜索:</span>
  98. <div class="flex-item">
  99. <div>
  100. <el-input
  101. placeholder="请输入角色名称并按回车搜索"
  102. v-model="postData.name"
  103. @change='getRole'
  104. clearable>
  105. </el-input>
  106. </div>
  107. </div>
  108. </li>
  109. <li class="flex-h">
  110. <span>搜索结果:</span>
  111. <div class="flex-item">
  112. <div>
  113. <el-button
  114. v-for="tag in searchTagList"
  115. :key="tag.RoleId"
  116. style="margin-right:1rem"
  117. @click='addTag(tag)'>
  118. {{tag.RoleName}}
  119. </el-button>
  120. </div>
  121. </div>
  122. </li>
  123. <li class="flex-h">
  124. <span>当前角色:</span>
  125. <div class="flex-item">
  126. <div>
  127. <el-tag
  128. v-for="tag in tags"
  129. :key="tag.RoleId"
  130. style="margin-right:1rem"
  131. @close="handleClose(tag)"
  132. closable>
  133. {{tag.RoleName}}
  134. </el-tag>
  135. </div>
  136. </div>
  137. </li>
  138. <li style="text-align:right;">
  139. <el-button
  140. size="mini"
  141. type="success" @click="bindRoles">确认绑定</el-button>
  142. </li>
  143. </ul>
  144. </form>
  145. </el-dialog>
  146. </div>
  147. </template>
  148. <script>
  149. import { mapState } from 'vuex'
  150. export default {
  151. name: '',
  152. data () {
  153. return {
  154. currentEditItem: null,
  155. dialogTableVisible: false,
  156. total: 0,
  157. postData: { // 表格搜索条件
  158. caseid: '',
  159. name: '', // 搜索关键词
  160. page: 1, // 当前页码
  161. pagesize: 10000, // 请求数据量
  162. },
  163. currentList: [],
  164. searchTagList: [],
  165. tags: [],
  166. }
  167. },
  168. computed: {
  169. ...mapState({
  170. cases: x => x.app.cases.list,
  171. defaultCaseId: x => x.app.cases.default
  172. }),
  173. CaseId: {
  174. get () {
  175. return this.postData.caseid || this.defaultCaseId
  176. },
  177. set (val) {
  178. this.postData.caseid = val
  179. }
  180. }
  181. },
  182. created () {
  183. this.getList()
  184. },
  185. methods: {
  186. bindRoles () { // 绑定角色
  187. this.$ajax(this.$api.systemSet.bindRoles.url, {
  188. method: this.$api.systemSet.bindRoles.method,
  189. queryData: {
  190. userid: this.currentEditItem.UserId,
  191. roles: this.returnRoles()
  192. }
  193. }).then(res => {
  194. this.$message({
  195. type: 'success',
  196. message: '操作成功'
  197. })
  198. this.dialogTableVisible = false
  199. this.postData.name = ''
  200. this.tags = []
  201. this.searchTagList = []
  202. })
  203. },
  204. returnRoles () {
  205. var arr = []
  206. for (var n = 0; n < this.tags.length; n++) {
  207. arr.push(this.tags[n].RoleId)
  208. }
  209. return arr.join(',')
  210. },
  211. search () { // 搜索
  212. this.postData.page = 1
  213. this.currentList = []
  214. this.getList()
  215. },
  216. getList () { // 获取列表
  217. this.$ajax(this.$api.systemSet.getUserList.url, {
  218. method: this.$api.systemSet.getUserList.method,
  219. queryData: { ...this.postData, caseid: this.CaseId }
  220. }).then(res => {
  221. for (var n = 0; n < res.list.length; n++) {
  222. res.list[n].CreateDate = this.returnTime(res.list[n].CreateDate)
  223. }
  224. this.currentList = res.list
  225. this.postData.page = res.page
  226. this.total = res.pagenum
  227. })
  228. },
  229. returnTime (val) {
  230. val = new Date(val)
  231. return val.getFullYear() + '-' + this.returnNum(val.getMonth() + 1) + '-' + this.returnNum(val.getDate()) + ' ' + this.returnNum(val.getHours()) + ':' + this.returnNum(val.getMinutes()) + ':' + this.returnNum(val.getSeconds())
  232. },
  233. returnNum (num) {
  234. return num > 9 ? num : '0' + num
  235. },
  236. handleCurrentChange (val) { // 跳转到分页
  237. this.getList()
  238. },
  239. handleEdit (index, row) { // 编辑
  240. this.$router.push({ name: 'editUser', query: { id: row.UserId } })
  241. },
  242. handleDelete (index, row) { // 删除
  243. this.$confirm('确认删除此用户?', '提示', {
  244. confirmButtonText: '确定',
  245. cancelButtonText: '取消',
  246. type: 'warning'
  247. }).then(() => {
  248. this.$ajax(this.$api.systemSet.deleteUser.url, {
  249. method: this.$api.systemSet.deleteUser.method,
  250. urlData: { id: row.UserId }
  251. }).then(res => {
  252. this.$message({
  253. type: 'success',
  254. message: '删除成功!'
  255. })
  256. this.getList()
  257. })
  258. }).catch(() => {
  259. this.$message({
  260. type: 'info',
  261. message: '已取消删除'
  262. })
  263. })
  264. },
  265. handleBind (index, row) {
  266. this.$ajax(this.$api.systemSet.getUserRoles.url, {
  267. method: this.$api.systemSet.getUserRoles.method,
  268. queryData: { userid: row.UserId }
  269. }).then(res => {
  270. if (res !== null) this.tags = res
  271. this.currentEditItem = row
  272. this.dialogTableVisible = true
  273. })
  274. },
  275. addUser () {
  276. this.$router.push({ name: 'addUser' })
  277. },
  278. handleClose (tag) {
  279. this.tags.splice(this.tags.indexOf(tag), 1)
  280. },
  281. addTag (tag) { // 调用添加绑定角色接口
  282. if (!this.tags.filter(x => x.RoleId === tag.RoleId)[0]) {
  283. this.tags.push({
  284. RoleId: tag.RoleId,
  285. RoleName: tag.RoleName
  286. })
  287. }
  288. },
  289. getRole () { // 绑定角色搜索事件,发送请求搜索角色列表
  290. this.$ajax(this.$api.caseManager.getRolesList.url, {
  291. method: this.$api.caseManager.getRolesList.method,
  292. data: this.postData
  293. }).then(res => {
  294. this.searchTagList = res.list
  295. })
  296. }
  297. }
  298. }
  299. </script>
  300. <!-- Add "scoped" attribute to limit CSS to this component only -->
  301. <style lang="scss" scoped>
  302. </style>