Users.vue 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594
  1. <template>
  2. <div>
  3. <!-- <h3>用户列表组件</h3> -->
  4. <!-- 面包屑导航 -->
  5. <!-- <el-breadcrumb separator-class="el-icon-arrow-right">
  6. <el-breadcrumb-item :to="{ path: '/' }">首页</el-breadcrumb-item>
  7. <el-breadcrumb-item>用户管理</el-breadcrumb-item>
  8. <el-breadcrumb-item>用户列表</el-breadcrumb-item>
  9. </el-breadcrumb> -->
  10. <el-card class="box-card">
  11. <!-- 添加与搜索区域 -->
  12. <div class="search-bx1">
  13. <el-select v-model="sendData.pastureId" filterable placeholder="单位" style="width: 240px;" class="g-mr20">
  14. <el-option v-for="item in pastureList" :key="item.id" :label="item.name" :value="item.id"
  15. />
  16. </el-select>
  17. <el-select v-model="sendData.roleId" filterable placeholder="角色" style="width: 240px;" class="g-mr20">
  18. <el-option v-for="item in roleSelectList" :key="item.roleId" :label="item.roleName" :value="item.roleId"
  19. />
  20. </el-select>
  21. <el-input v-model="sendData.nameOrLoginName" placeholder="姓名" style="width: 220px;" class="g-mr20" clearable />
  22. <el-input v-model="sendData.loginName" placeholder="工号" style="width: 220px;" class="g-mr20" clearable />
  23. <el-button type="primary" @click="form_search">搜索</el-button>
  24. <!-- <el-button type="primary" @click="form_add">添加用户</el-button>
  25. <el-button type="primary" @click="form_export">导出</el-button> -->
  26. </div>
  27. <!-- 表格 -->
  28. <el-table key="0" :data="tableList" v-loading="tableLoading" element-loading-text="给我一点时间" stripe border fit>
  29. <el-table-column label="序号" width="50px" align="center">
  30. <template slot-scope="scope">
  31. <span>{{ scope.row.number }}</span>
  32. </template>
  33. </el-table-column>
  34. <el-table-column label="单位" min-width="150px" align="center">
  35. <template slot-scope="scope">
  36. <span>{{ scope.row.pastureName }}</span>
  37. </template>
  38. </el-table-column>
  39. <el-table-column label="姓名" min-width="150px" align="center">
  40. <template slot-scope="scope">
  41. <span>{{ scope.row.actualName }}</span>
  42. </template>
  43. </el-table-column>
  44. <el-table-column label="工号" min-width="150px" align="center">
  45. <template slot-scope="scope">
  46. <span>{{ scope.row.loginName }}</span>
  47. </template>
  48. </el-table-column>
  49. <el-table-column label="电话" min-width="150px" align="center">
  50. <template slot-scope="scope">
  51. <span>{{ scope.row.phone }}</span>
  52. </template>
  53. </el-table-column>
  54. <el-table-column label="角色" min-width="150px" align="center">
  55. <template slot-scope="scope">
  56. <span>{{ scope.row.roleNameList }}</span>
  57. </template>
  58. </el-table-column>
  59. <!-- <el-table-column label="状态" min-width="100px" align="center">
  60. <template slot-scope="scope">
  61. <el-switch v-model="scope.row.mg_state" active-color="#13ce66" inactive-color="#ff4949" :active-value="1" :inactive-value="0" />
  62. </template>
  63. </el-table-column> -->
  64. <el-table-column label="操作" align="center" width="300" class-name="small-padding fixed-width" fixed="right">
  65. <template slot-scope="scope">
  66. <!-- 修改按钮 -->
  67. <!-- <el-button type="primary" size="mini" icon="el-icon-edit" @click="form_edit(scope.row)">修改</el-button>-->
  68. <!-- 删除按钮 -->
  69. <!-- <el-button type="danger" size="mini" icon="el-icon-delete" @click="form_delete(scope.row)">删除</el-button> -->
  70. <!-- 分配角色 -->
  71. <el-button type="warning" size="mini" icon="el-icon-setting" @click="form_set(scope.row)">分配角色</el-button>
  72. <el-button type="warning" size="mini" @click="reset_password(scope.row)">重置密码</el-button>
  73. </template>
  74. </el-table-column>
  75. </el-table>
  76. <!-- 分页区域 -->
  77. <el-pagination @size-change="change_size_page" @current-change="change_current_page" :current-page="sendData.pageNum" :page-sizes="[1,5,10,20,30,50]" :page-size="sendData.pageSize" layout="total, prev, pager, next" :total="sendData.total"/>
  78. </el-card>
  79. <!-- 弹窗 新增or修改 -->
  80. <el-dialog :title="addFormTxt[addFormStatus]" :visible.sync="addFormShow" @close="add_dialog_close" width="50%">
  81. <div class="">
  82. <el-form ref="addFormRef" :rules="addFormRules" :model="addForm" label-position="right" label-width="70px" style="width:50%;margin:0 auto 50px">
  83. <el-form-item label="用户名" prop="username">
  84. <el-input v-model="addForm.username" :disabled="addFormStatus==='edit'"></el-input>
  85. </el-form-item>
  86. <el-form-item label="密码" prop="password">
  87. <el-input v-model="addForm.password"></el-input>
  88. </el-form-item>
  89. <el-form-item label="邮箱" prop="email">
  90. <el-input v-model="addForm.email"></el-input>
  91. </el-form-item>
  92. <el-form-item label="手机" prop="mobile">
  93. <el-input v-model="addForm.mobile"></el-input>
  94. </el-form-item>
  95. </el-form>
  96. <div slot="footer" class="dialog-footer">
  97. <el-button type="primary" @click="addFormStatus==='create'?add_dialog_save():edit_dialog_save()">确认</el-button>
  98. <el-button @click="addFormShow = false">关闭</el-button>
  99. </div>
  100. </div>
  101. </el-dialog>
  102. <!-- 弹窗 分配角色 -->
  103. <el-dialog title="分配角色" :visible.sync="setFormShow" @close="set_dialog_close" width="50%">
  104. <div class="">
  105. <el-form ref="setFormRef" :model="setForm" label-position="right" label-width="70px" style="width:50%;margin:0 auto 50px">
  106. <!-- <el-form-item label="用户名" prop="username">
  107. <el-input v-model="setForm.username" disabled ></el-input>
  108. </el-form-item> -->
  109. <el-form-item label="角色" prop="roleList">
  110. <el-select v-model="setForm.roleIdList" style="width:400px;" multiple placeholder="角色">
  111. <el-option v-for="item in roleList" :key="item.roleId" :label="item.roleName" :value="item.roleId" />
  112. </el-select>
  113. </el-form-item>
  114. </el-form>
  115. <div slot="footer" class="dialog-footer">
  116. <el-button type="primary" @click="set_dialog_save()">确认</el-button>
  117. <el-button @click="setFormShow = false">关闭</el-button>
  118. </div>
  119. </div>
  120. </el-dialog>
  121. </div>
  122. </template>
  123. <script>
  124. import { ajaxDataGet, ajaxDataPost } from '@/api/common'
  125. import { parseTime, json2excel } from '@/utils/index.js'
  126. export default {
  127. data() {
  128. //自定义的验证邮箱规则
  129. var checkEmail = (rule, value, cb) => {
  130. const regEmail = /^([a-zA-Z0-9_-])+@([a-zA-Z0-9_-])+(\.[a-zA-Z0-9_-])+/
  131. if(regEmail.test(value)){
  132. //合法的邮箱
  133. return cb()
  134. }
  135. cb(new Error('请输入合法的邮箱'))
  136. }
  137. //自定义的验证手机号规则
  138. var checkMobile = (rule, value, cb) => {
  139. const regMobile= /^(0|86|17951)?(13[0-9]|15[0123456789]|17[678]|18[0-9]|14[57]|)[0-9]{8}$/
  140. if(regMobile.test(value)){
  141. return cb()
  142. }
  143. cb(new Error('请输入合法的手机号'))
  144. }
  145. return {
  146. //接口 - 获取 - 表格
  147. url_get_table:'/role/employee/getRoles',
  148. //接口 - 新增 - 表格
  149. url_add_table:'//',
  150. //接口 - 修改 - 表格
  151. url_edit_table:'//',
  152. //接口 - 删除 - 表格
  153. url_delete_table:'//',
  154. //接口 - 下拉框 列表
  155. url_get_select1:'/role/getAll',
  156. //获取 - 表格数据 - 参数
  157. sendData:{
  158. pastureName: "",
  159. nameOrLoginName: "",
  160. loginName: "",
  161. roleId: "",
  162. pageNum: 1, //页码
  163. pageSize: 10, //每页数量
  164. total:0, //总页数
  165. pastureId: ""
  166. },
  167. tableLoading: false,
  168. //表格内容
  169. tableList:[
  170. { username:"admin", id:100, date:'2023-12-01',email:'测试信息1123',roleList:[2,3] },
  171. { username:"epans", id:200, date:'2023-12-01',email:'测试信息1123',roleList:[] },
  172. { username:"derek", id:300, date:'2023-12-01',email:'测试信息1123' },
  173. { username:"admin", id:100, date:'2023-12-01',email:'测试信息1123' },
  174. { username:"epans", id:200, date:'2023-12-01',email:'测试信息1123' },
  175. // { username:"derek", id:300, date:'2023-12-01',email:'测试信息1123' },
  176. // { username:"admin", id:100, date:'2023-12-01',email:'测试信息1123' },
  177. // { username:"epans", id:200, date:'2023-12-01',email:'测试信息1123' },
  178. // { username:"derek", id:300, date:'2023-12-01',email:'测试信息1123' },
  179. // { username:"admin", id:100, date:'2023-12-01',email:'测试信息1123' },
  180. // { username:"epans", id:200, date:'2023-12-01',email:'测试信息1123' },
  181. // { username:"derek", id:300, date:'2023-12-01',email:'测试信息1123' },
  182. ],
  183. pastureList:[
  184. ],
  185. roleSelectList:[
  186. ],
  187. addFormShow:false,
  188. addFormStatus: '',
  189. addFormTxt: { edit: '修改用户', create: '新增用户' },
  190. addForm:{
  191. username:'',password:'',email:'',mobile:''
  192. },
  193. addFormRules:{
  194. // username: [
  195. // { required: true, message: '用户名必填', trigger: 'blur' },
  196. // { min: 3, max: 5, message: '长度3-5个字符之间', trigger: 'blur' },
  197. // ],
  198. // password: [
  199. // { required: true, message: '密码必填', trigger: 'blur' },
  200. // { min: 3, max: 15, message: '长度3-15个字符之间', trigger: 'blur' },
  201. // ],
  202. // email: [
  203. // { required: true, message: '邮箱必填', trigger: 'blur' },
  204. // { validator: checkEmail, trigger: 'blur' },
  205. // ],
  206. mobile: [
  207. { required: true, message: '手机号必填', trigger: 'blur' },
  208. { validator: checkMobile, trigger: 'blur' },
  209. ],
  210. },
  211. setFormShow:false,
  212. setForm:{
  213. roleIdList:[]
  214. },
  215. roleList:[
  216. { "roleId": 1, "roleName": "厂长", "remark": "" },
  217. { "roleId": 34, "roleName": "副厂长", "remark": "" },
  218. { "roleId": 35, "roleName": "设备主管", "remark": "" },
  219. { "roleId": 36, "roleName": "维修工", "remark": "" },
  220. ]
  221. }
  222. },
  223. created(){
  224. //表格 - 初始化
  225. // this.get_table_data()
  226. this.get_select_list1()
  227. },
  228. methods:{
  229. form_search(){
  230. var me = this
  231. console.log('请求表格列表sendData',me.sendData)
  232. this.get_table_data()
  233. },
  234. get_select_list1(){
  235. var me = this
  236. ajaxDataGet(me.url_get_select1, {"roleName": "", "pageNum": 1, "pageSize": 1000}).then(e => {
  237. console.log("下拉框1:",e)
  238. //打印请求成功结果
  239. if(e.data == null || e.data == undefined ||e.data.length == 0 ){
  240. me.roleList = []
  241. } else {
  242. me.roleList = e.data
  243. }
  244. })
  245. ajaxDataGet('/authdata/pasture', { "pageNum": 1, "pageSize": 1000}).then(e => {
  246. console.log("牧场下拉框1:",e)
  247. //打印请求成功结果
  248. if(e.data == null || e.data == undefined ||e.data.length == 0 ){
  249. me.pastureList = []
  250. } else {
  251. me.pastureList = e.data
  252. }
  253. })
  254. ajaxDataGet('/role/getAll', { "roleName": "", "pageNum": 1, "pageSize": 1000}).then(e => {
  255. console.log("角色下拉框1:",e)
  256. //打印请求成功结果
  257. if(e.data == null || e.data == undefined ||e.data.length == 0 ){
  258. me.roleSelectList = []
  259. } else {
  260. me.roleSelectList = e.data
  261. }
  262. })
  263. },
  264. //获取 表格
  265. get_table_data() {
  266. var me = this
  267. me.tableLoading = true
  268. console.log("sendData======>", me.sendData)
  269. ajaxDataGet(me.url_get_table, me.sendData).then(e => {
  270. console.log("表格请求结果:",e)
  271. //打印请求成功结果
  272. if(e.data == null || e.data == undefined ||e.data.length == 0 ){
  273. me.tableList = []
  274. } else {
  275. me.tableList = e.data
  276. me.sendData.total = e.count; // 总数
  277. me.sendData.pageNum = e.pageNum; //页码
  278. me.sendData.pageSize = e.pageSize; //每页数量
  279. }
  280. setTimeout(() => {
  281. me.tableLoading = false
  282. }, 100)
  283. })
  284. },
  285. //监听 pagesize 改变的事件
  286. change_size_page(item){
  287. console.log(item)
  288. // this.sendData.pageSize = item
  289. // this.getUserList()
  290. },
  291. //监听 pagenum 改变的事件
  292. change_current_page(item){
  293. console.log(item)
  294. this.sendData.pageNum = item
  295. this.get_table_data()
  296. },
  297. form_add() {
  298. this.addFormStatus = 'create'
  299. this.addFormShow = true
  300. this.$nextTick(() => {
  301. this.$refs['addFormRef'].clearValidate()
  302. })
  303. },
  304. form_edit(row) {
  305. console.log('row', row)
  306. this.addForm = Object.assign({}, row) // copy obj
  307. this.addFormStatus = 'edit'
  308. this.addFormShow = true
  309. this.$nextTick(() => {
  310. this.$refs['addFormRef'].clearValidate()
  311. })
  312. },
  313. //监听关闭对话框
  314. add_dialog_close(){
  315. //内容重置
  316. this.$refs['addFormRef'].resetFields()
  317. },
  318. add_dialog_save() {
  319. this.$refs['addFormRef'].validate(valid => {
  320. //验证成功
  321. if (valid) {
  322. //发起请求
  323. //关闭弹窗
  324. this.$message({ type: 'success', message: '请求成功', duration: 2000 })
  325. this.addFormShow = false
  326. }
  327. })
  328. },
  329. edit_dialog_save(){
  330. this.addFormShow = false
  331. },
  332. form_delete(row) {
  333. var me = this
  334. me.$confirm('此操作将永久删除该文件, 是否继续?', '提示', {
  335. confirmButtonText: '确定',
  336. cancelButtonText: '取消',
  337. type: 'warning'
  338. }).then(() => {
  339. me.$message({
  340. type: 'success',
  341. message: '删除成功!'
  342. });
  343. }).catch(() => {
  344. me.$message({
  345. type: 'info',
  346. message: '已取消删除'
  347. });
  348. });
  349. },
  350. form_set(row) {
  351. var me = this
  352. console.log('row', row)
  353. this.setForm = Object.assign({}, row) // copy obj
  354. var roleList = row.
  355. roleIdList
  356. me.setFormShow = true
  357. me.$nextTick(() => {
  358. me.$refs['setFormRef'].clearValidate()
  359. })
  360. },
  361. //监听关闭对话框
  362. set_dialog_close(){
  363. //内容重置
  364. this.$refs['setFormRef'].resetFields()
  365. },
  366. set_dialog_save() {
  367. var me = this
  368. console.log(me.setForm)
  369. var send_data = {
  370. "roleId": me.setForm.roleIdList,
  371. "employeeId": me.setForm.employeeId
  372. }
  373. //加载 - 发送编辑保存
  374. ajaxDataPost("/role/employee/add", send_data).then(e => {
  375. console.log("权限结果:",e)
  376. //打印请求成功结果
  377. if(e.code == 200 ){
  378. me.$message({ type: 'success', message: '设置成功!' , duration: 2000 })
  379. //关闭弹窗
  380. me.setFormShow = false
  381. me.get_table_data()
  382. } else {
  383. me.$message({ type: 'error', message: '设置失败!' + e.msg, duration: 2000 })
  384. }
  385. })
  386. },
  387. reset_password(row) {
  388. var me = this
  389. var send_data = {
  390. "empId": row.employeeId
  391. }
  392. me.$confirm('是否默认密码为Gm@5418#?', '提示', {
  393. confirmButtonText: '确定',
  394. cancelButtonText: '取消',
  395. type: 'warning'
  396. }).then(() => {
  397. //加载 - 发送保存
  398. ajaxDataPost('/employee/password/reset', send_data).then(e => {
  399. console.log("重置结果:",e)
  400. //打印请求成功结果
  401. if(e.code == 200 ){
  402. me.$message({ type: 'success', message: '重置成功!' , duration: 2000 })
  403. //关闭弹窗
  404. me.addFormShow = false
  405. me.get_table_data()
  406. } else {
  407. me.$message({ type: 'error', message: '重置失败!' + e.msg, duration: 2000 })
  408. }
  409. })
  410. // me.$message({
  411. // type: 'success',
  412. // message: '删除成功!'
  413. // });
  414. }).catch(() => {
  415. me.$message({
  416. type: 'info',
  417. message: '已取消重置'
  418. });
  419. });
  420. },
  421. form_export() {
  422. //获取请求表格数据的参数
  423. //this.download.getdataListParm.parammaps = this.tableObj.getdataListParm.parammaps
  424. //请求表格
  425. // GetDataByName(this.download.getdataListParm).then(response => {
  426. // if (response.data.list !== null) {
  427. // this.download.list = response.data.list
  428. // } else {
  429. // this.download.list = []
  430. // }
  431. // var excelDatas = [
  432. // {
  433. // tHeader: ['表头1', '表头2', '表头3', '表头4',],
  434. // filterVal: ['title1', 'title2', 'title3', 'title4'],
  435. // tableDatas: this.download.list,
  436. // sheetName: 'Sheet1'
  437. // }
  438. // ]
  439. // json2excel(excelDatas, '表格大标题', true, 'xlsx')
  440. // })
  441. var excelDatas = [
  442. {
  443. tHeader: ['表头1', '表头2', '表头3', '表头4',],
  444. filterVal: ['title1', 'title2', 'title3', 'title4'],
  445. tableDatas: [
  446. {title1: "内容1",title2: "内容2",title3: "内容3",title4: "内容4"},
  447. {title1: "内容11",title2: "内容22",title3: "内容32",title4: "内容44"},
  448. {title1: "内容111",title2: "内容222",title3: "内容333",title4: "内容444"},
  449. ],
  450. sheetName: 'Sheet1'
  451. }
  452. ]
  453. json2excel(excelDatas, '表格大标题', true, 'xlsx')
  454. }
  455. }
  456. }
  457. </script>
  458. <!-- 加了scoped,则是仅在此组件里生效 -->
  459. <style scoped>
  460. </style>