index.vue 11KB

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