index.vue 11KB

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