staff.vue 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345
  1. <template>
  2. <section>
  3. <!--工具条-->
  4. <el-col :span="24" class="toolbar" style="padding-bottom: 0px;">
  5. <el-form :inline="true" :model="filters">
  6. <el-col :span="2">
  7. <el-form-item>
  8. <el-select v-model="filters.value" clearable placeholder="请选择">
  9. <el-option
  10. v-for="item in options"
  11. :key="item.value"
  12. :label="item.label"
  13. :value="item.value">
  14. </el-option>
  15. </el-select>
  16. </el-form-item>
  17. </el-col>
  18. <el-form-item>
  19. <el-input v-model="filters.name" placeholder="请输入账号或姓名进行搜索"></el-input>
  20. </el-form-item>
  21. <el-form-item>
  22. <el-button type="primary" @click="getUsers">查询</el-button>
  23. </el-form-item>
  24. <el-form-item style="float:right;">
  25. <el-button type="primary" @click="handleAdd">新增</el-button>
  26. </el-form-item>
  27. <el-form-item style="float:right;">
  28. <el-button type="danger" @click="batchRemove" :disabled="this.sels.length===0">批量删除</el-button>
  29. </el-form-item>
  30. </el-form>
  31. </el-col>
  32. <!--列表-->
  33. <el-table :data="users" highlight-current-row :height="tableHeight" v-loading="listLoading" @selection-change="selsChange" style="width: 100%;">
  34. <el-table-column type="selection" width="55"></el-table-column>
  35. <el-table-column type="index" width="60"></el-table-column>
  36. <el-table-column prop="name" label="姓名" width="120" sortable></el-table-column>
  37. <el-table-column prop="sex" label="性别" width="100" :formatter="formatSex" sortable></el-table-column>
  38. <el-table-column prop="age" label="年龄" width="100" sortable></el-table-column>
  39. <el-table-column prop="birth" label="生日" width="120" sortable></el-table-column>
  40. <el-table-column prop="addr" label="地址" min-width="180" sortable></el-table-column>
  41. <el-table-column label="操作" width="150">
  42. <template slot-scope="scope">
  43. <el-button size="small" @click="handleEdit(scope.$index, scope.row)">编辑</el-button>
  44. <el-button type="danger" size="small" @click="handleDel(scope.$index, scope.row)">删除</el-button>
  45. </template>
  46. </el-table-column>
  47. </el-table>
  48. <!--工具条-->
  49. <el-col :span="24" class="toolbar">
  50. <el-pagination
  51. @size-change="handleSizeChange"
  52. @current-change="handleCurrentChange"
  53. :page-sizes="[20 , 50 , 80 , 100 , 200]"
  54. :page-size="20"
  55. layout="total, sizes, prev, pager, next"
  56. :total="total"
  57. style="float:right;">
  58. </el-pagination>
  59. <!-- <el-pagination layout="prev, pager, next" @current-change="handleCurrentChange" :page-size="20" :total="total" style="float:right;">
  60. </el-pagination> -->
  61. </el-col>
  62. <!--新增界面-->
  63. <el-dialog title="新增人员" :visible.sync="addFormVisible" :close-on-click-modal="false">
  64. <el-form :model="addForm" label-width="80px" :rules="addFormRules" ref="addForm">
  65. <el-form-item label="姓名" prop="name">
  66. <el-input v-model="addForm.name" auto-complete="off"></el-input>
  67. </el-form-item>
  68. <el-form-item label="性别">
  69. <el-radio-group v-model="addForm.sex">
  70. <el-radio class="radio" :label="1">男</el-radio>
  71. <el-radio class="radio" :label="0">女</el-radio>
  72. </el-radio-group>
  73. </el-form-item>
  74. <el-form-item label="年龄">
  75. <el-input-number v-model="addForm.age" :min="0" :max="200"></el-input-number>
  76. </el-form-item>
  77. <el-form-item label="生日">
  78. <el-date-picker type="date" placeholder="选择日期" v-model="addForm.birth"></el-date-picker>
  79. </el-form-item>
  80. <el-form-item label="地址">
  81. <el-input type="textarea" v-model="addForm.addr"></el-input>
  82. </el-form-item>
  83. </el-form>
  84. <div slot="footer" class="dialog-footer">
  85. <el-button @click.native="addFormVisible = false">取消</el-button>
  86. <el-button type="primary" @click.native="addSubmit" :loading="addLoading">提交</el-button>
  87. </div>
  88. </el-dialog>
  89. <!--编辑界面-->
  90. <el-dialog title="编辑人员" :visible.sync="editFormVisible" :close-on-click-modal="false">
  91. <el-form :model="editForm" label-width="80px" :rules="editFormRules" ref="editForm">
  92. <el-form-item label="姓名" prop="name">
  93. <el-input v-model="editForm.name" auto-complete="off"></el-input>
  94. </el-form-item>
  95. <el-form-item label="性别">
  96. <el-radio-group v-model="editForm.sex">
  97. <el-radio class="radio" :label="1">男</el-radio>
  98. <el-radio class="radio" :label="0">女</el-radio>
  99. </el-radio-group>
  100. </el-form-item>
  101. <el-form-item label="年龄">
  102. <el-input-number v-model="editForm.age" :min="0" :max="200"></el-input-number>
  103. </el-form-item>
  104. <el-form-item label="生日">
  105. <el-date-picker type="date" placeholder="选择日期" v-model="editForm.birth"></el-date-picker>
  106. </el-form-item>
  107. <el-form-item label="地址">
  108. <el-input type="textarea" v-model="editForm.addr"></el-input>
  109. </el-form-item>
  110. </el-form>
  111. <div slot="footer" class="dialog-footer">
  112. <el-button @click.native="editFormVisible = false">取消</el-button>
  113. <el-button type="primary" @click.native="editSubmit" :loading="editLoading">提交</el-button>
  114. </div>
  115. </el-dialog>
  116. </section>
  117. </template>
  118. <script>
  119. import util from '../../common/js/util'
  120. //import NProgress from 'nprogress'
  121. import { getUserListPage, removeUser, batchRemoveUser, editUser, addUser } from '../../api/api';
  122. export default {
  123. data() {
  124. return {
  125. options: [{
  126. value: '选项1',
  127. label: '黄金糕'
  128. }, {
  129. value: '选项2',
  130. label: '双皮奶'
  131. }, {
  132. value: '选项3',
  133. label: '蚵仔煎'
  134. }, {
  135. value: '选项4',
  136. label: '龙须面'
  137. }, {
  138. value: '选项5',
  139. label: '北京烤鸭'
  140. }],
  141. filters: {
  142. name: '',
  143. value: ''
  144. },
  145. users: [],
  146. total: 0,
  147. page: 1,
  148. size: 20,
  149. listLoading: false,
  150. tableHeight: 0,
  151. sels: [],//列表选中列
  152. editFormVisible: false,//编辑界面是否显示
  153. editLoading: false,
  154. editFormRules: {
  155. name: [
  156. { required: true, message: '请输入姓名', trigger: 'blur' }
  157. ]
  158. },
  159. //编辑界面数据
  160. editForm: {
  161. id: 0,
  162. name: '',
  163. sex: -1,
  164. age: 0,
  165. birth: '',
  166. addr: ''
  167. },
  168. addFormVisible: false,//新增界面是否显示
  169. addLoading: false,
  170. addFormRules: {
  171. name: [
  172. { required: true, message: '请输入姓名', trigger: 'blur' }
  173. ]
  174. },
  175. //新增界面数据
  176. addForm: {
  177. name: '',
  178. sex: -1,
  179. age: 0,
  180. birth: '',
  181. addr: ''
  182. }
  183. }
  184. },
  185. methods: {
  186. //性别显示转换
  187. formatSex: function (row, column) {
  188. return row.sex == 1 ? '男' : row.sex == 0 ? '女' : '未知';
  189. },
  190. handleCurrentChange(val) {
  191. this.page = val;
  192. this.getUsers();
  193. },
  194. handleSizeChange(val) {
  195. this.size = val;
  196. this.getUsers();
  197. },
  198. //获取用户列表
  199. getUsers() {
  200. let para = {
  201. page: this.page,
  202. name: this.filters.name
  203. };
  204. this.listLoading = true;
  205. //NProgress.start();
  206. getUserListPage(para).then((res) => {
  207. this.total = res.data.total;
  208. this.users = res.data.users;
  209. this.listLoading = false;
  210. //NProgress.done();
  211. });
  212. },
  213. //删除
  214. handleDel: function (index, row) {
  215. this.$confirm('确认删除该人员吗?', '提示', {
  216. type: 'warning'
  217. }).then(() => {
  218. this.listLoading = true;
  219. //NProgress.start();
  220. let para = { id: row.id };
  221. removeUser(para).then((res) => {
  222. this.listLoading = false;
  223. //NProgress.done();
  224. this.$message({
  225. message: '删除成功',
  226. type: 'success'
  227. });
  228. this.getUsers();
  229. });
  230. }).catch(() => {
  231. });
  232. },
  233. //显示编辑界面
  234. handleEdit: function (index, row) {
  235. this.editFormVisible = true;
  236. this.editForm = Object.assign({}, row);
  237. },
  238. //显示新增界面
  239. handleAdd: function () {
  240. this.addFormVisible = true;
  241. this.addForm = {
  242. name: '',
  243. sex: -1,
  244. age: 0,
  245. birth: '',
  246. addr: ''
  247. };
  248. },
  249. //编辑
  250. editSubmit: function () {
  251. this.$refs.editForm.validate((valid) => {
  252. if (valid) {
  253. this.$confirm('确认提交吗?', '提示', {}).then(() => {
  254. this.editLoading = true;
  255. //NProgress.start();
  256. let para = Object.assign({}, this.editForm);
  257. para.birth = (!para.birth || para.birth == '') ? '' : util.formatDate.format(new Date(para.birth), 'yyyy-MM-dd');
  258. editUser(para).then((res) => {
  259. this.editLoading = false;
  260. //NProgress.done();
  261. this.$message({
  262. message: '提交成功',
  263. type: 'success'
  264. });
  265. this.$refs['editForm'].resetFields();
  266. this.editFormVisible = false;
  267. this.getUsers();
  268. });
  269. });
  270. }
  271. });
  272. },
  273. //新增
  274. addSubmit: function () {
  275. this.$refs.addForm.validate((valid) => {
  276. if (valid) {
  277. this.$confirm('确认提交吗?', '提示', {}).then(() => {
  278. this.addLoading = true;
  279. //NProgress.start();
  280. let para = Object.assign({}, this.addForm);
  281. para.birth = (!para.birth || para.birth == '') ? '' : util.formatDate.format(new Date(para.birth), 'yyyy-MM-dd');
  282. addUser(para).then((res) => {
  283. this.addLoading = false;
  284. //NProgress.done();
  285. this.$message({
  286. message: '提交成功',
  287. type: 'success'
  288. });
  289. this.$refs['addForm'].resetFields();
  290. this.addFormVisible = false;
  291. this.getUsers();
  292. });
  293. });
  294. }
  295. });
  296. },
  297. selsChange: function (sels) {
  298. this.sels = sels;
  299. },
  300. //批量删除
  301. batchRemove: function () {
  302. var ids = this.sels.map(item => item.id).toString();
  303. this.$confirm('确认删除选中记录吗?', '提示', {
  304. type: 'warning'
  305. }).then(() => {
  306. this.listLoading = true;
  307. //NProgress.start();
  308. let para = { ids: ids };
  309. batchRemoveUser(para).then((res) => {
  310. this.listLoading = false;
  311. //NProgress.done();
  312. this.$message({
  313. message: '删除成功',
  314. type: 'success'
  315. });
  316. this.getUsers();
  317. });
  318. }).catch(() => {
  319. });
  320. }
  321. },
  322. created() {
  323. let height = window.innerHeight;
  324. this.tableHeight = height - 240;
  325. },
  326. mounted() {
  327. this.getUsers();
  328. }
  329. }
  330. </script>
  331. <style scoped>
  332. </style>