studentList.vue 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359
  1. <template>
  2. <div class="m-container">
  3. <h2>
  4. <div class="squrt"></div>学员列表
  5. </h2>
  6. <div class="m-core">
  7. <div class="newBand"
  8. v-permission="'studentManage/register'"
  9. @click="addStudent">新增学员</div>
  10. <!-- 搜索标题 -->
  11. <el-form :inline="true"
  12. class="searchForm"
  13. v-model="searchForm">
  14. <el-form-item>
  15. <el-input placeholder="家长联系电话"
  16. @keyup.enter.native='onSearch'
  17. v-model="searchForm.search"></el-input>
  18. </el-form-item>
  19. <el-form-item prop='organId'>
  20. <el-select class='multiple'
  21. v-model="searchForm.organId"
  22. clearable
  23. placeholder="请选择分部">
  24. <el-option v-for="(item,index) in organList"
  25. :key="index"
  26. :label="item.name"
  27. :value="item.id"></el-option>
  28. </el-select>
  29. </el-form-item>
  30. <el-form-item>
  31. <el-input placeholder="学生姓名"
  32. @keyup.enter.native='onSearch'
  33. v-model="searchForm.studentName"></el-input>
  34. </el-form-item>
  35. <el-form-item>
  36. <el-button @click="onSearch"
  37. type="danger">搜索</el-button>
  38. <el-button @click="onReSet"
  39. type="primary">重置</el-button>
  40. </el-form-item>
  41. </el-form>
  42. <!-- 列表 -->
  43. <div class="tableWrap">
  44. <el-table :data='tableList'
  45. :header-cell-style="{background:'#EDEEF0',color:'#444'}">
  46. <el-table-column align='center'
  47. prop="userId"
  48. label="学员编号">
  49. </el-table-column>
  50. <el-table-column align='center'
  51. prop="username"
  52. label="学员姓名">
  53. </el-table-column>
  54. <el-table-column align='center'
  55. label="性别">
  56. <template slot-scope="scope">
  57. {{ scope.row.gender ? '男': '女' }}
  58. </template>
  59. </el-table-column>
  60. <el-table-column align='center'
  61. prop="realName"
  62. label="家长姓名">
  63. </el-table-column>
  64. <el-table-column align='center'
  65. prop="parentsPhone"
  66. label="家长联系电话">
  67. </el-table-column>
  68. <el-table-column align='center'
  69. prop="courseBalance"
  70. label="课程余额(元)">
  71. </el-table-column>
  72. <el-table-column align='center'
  73. label="操作">
  74. <template slot-scope="scope">
  75. <router-link style="color:#409EFF"
  76. v-permission="'/studentDetail'"
  77. :to="{path:`/business/studentDetail?userId=${scope.row.userId}`,query:{search:JSON.stringify(searchForm),rules:JSON.stringify(pageInfo)}}">查看</router-link>
  78. <el-button type="text"
  79. v-permission="'studentManage/studentUpdate'"
  80. @click="resetStudent(scope.row)">修改</el-button>
  81. </template>
  82. </el-table-column>
  83. </el-table>
  84. <pagination :total="pageInfo.total"
  85. :page.sync="pageInfo.page"
  86. :limit.sync="pageInfo.limit"
  87. :page-sizes="pageInfo.page_size"
  88. @pagination="getList" />
  89. </div>
  90. </div>
  91. <el-dialog :title="maskName"
  92. width="700px"
  93. label-width='100px'
  94. label-position="right"
  95. :visible.sync="studentVisible">
  96. <el-divider>基本信息</el-divider>
  97. <el-form :model="studentForm"
  98. :inline='true'
  99. label-width="80px"
  100. label-position="right"
  101. ref='studentForm'
  102. :rules="studentRules">
  103. <el-form-item label="联系电话"
  104. :rules="[{ required: true, message: '请输入手机号' }, { pattern: /^1[3456789]\d{9}$/, message: '请输入正确的手机号', trigger: 'blur' }]">
  105. <!-- @blur="checkPhone(studentForm.phone)" -->
  106. <el-input v-model="studentForm.phone"></el-input>
  107. </el-form-item>
  108. <el-form-item label="所属分部"
  109. v-if="isNew"
  110. prop="organId">
  111. <el-select class='multiple'
  112. v-model="studentForm.organId"
  113. clearable
  114. placeholder="请选择分部">
  115. <el-option v-for="(item,index) in organList"
  116. :key="index"
  117. :label="item.name"
  118. :value="item.id"></el-option>
  119. </el-select>
  120. </el-form-item>
  121. <el-form-item label="学生姓名"
  122. prop="name">
  123. <el-input v-model="studentForm.name"></el-input>
  124. </el-form-item>
  125. <el-form-item label="学生性别"
  126. prop="sex">
  127. <el-select class='multiple'
  128. v-model="studentForm.sex"
  129. clearable
  130. placeholder="请选择分部">
  131. <el-option :value="0"
  132. label="女"></el-option>
  133. <el-option :value="1"
  134. label="男"></el-option>
  135. </el-select>
  136. </el-form-item>
  137. <!-- <el-form-item label="名族"
  138. prop="nation">
  139. <el-input v-model="studentForm.nation"></el-input>
  140. </el-form-item> -->
  141. <el-form-item label="家长姓名">
  142. <el-input v-model="studentForm.parseName"></el-input>
  143. </el-form-item>
  144. <el-form-item label="出生日期">
  145. <el-date-picker v-model="studentForm.date"
  146. value-format="yyyy-MM-dd"
  147. type="date"
  148. placeholder="选择日期">
  149. </el-date-picker>
  150. </el-form-item>
  151. </el-form>
  152. <div slot="footer"
  153. class="dialog-footer">
  154. <el-button @click="studentVisible = false">取 消</el-button>
  155. <el-button type="primary"
  156. v-if="isNew"
  157. @click="submitAddStudent">确 定</el-button>
  158. <el-button type="primary"
  159. v-if="!isNew"
  160. @click="resetStudentSubmie">确 定</el-button>
  161. </div>
  162. </el-dialog>
  163. </div>
  164. </template>
  165. <script>
  166. import pagination from '@/components/Pagination/index'
  167. import { queryStudentList, getStudentInfoByPhone, registerStudent, updateStudent } from '@/api/studentManager'
  168. import { getEmployeeOrgan } from '@/api/buildTeam'
  169. import store from '@/store'
  170. export default {
  171. name: 'studentList',
  172. components: { pagination },
  173. data () {
  174. return {
  175. studentVisible: false,
  176. searchForm: {
  177. organId: null,
  178. search: null,
  179. studentName: null
  180. },
  181. searchList: [],
  182. tableList: [],
  183. organList: [],
  184. pageInfo: {
  185. // 分页规则
  186. limit: 10, // 限制显示条数
  187. page: 1, // 当前页
  188. total: 0, // 总条数
  189. page_size: [10, 20, 40, 50] // 选择限制显示条数
  190. },
  191. studentForm: {
  192. phone: '',
  193. organId: '',
  194. name: '',
  195. sex: '',
  196. parseName: '',
  197. date: '',
  198. nation: ''
  199. },
  200. studentRules: {
  201. name: [{ required: true, message: '请输入学生姓名' },],
  202. sex: [{ required: true, message: '请选择学生姓名' },],
  203. date: [{ required: true, message: '请选择出生日期' },],
  204. organId: [{ required: true, message: '请选择分部' }],
  205. nation: [{ required: true, message: '请输入名族' }]
  206. },
  207. isNew: false,
  208. active: null,
  209. maskName: '新增学员'
  210. }
  211. },
  212. mounted () {
  213. if (this.$route.query.search) {
  214. this.$route.query.search instanceof Object ? this.searchForm = this.$route.query.search : this.searchForm = JSON.parse(this.$route.query.search);
  215. }
  216. if (this.$route.query.rules) {
  217. this.$route.query.rules instanceof Object ? this.pageInfo = this.$route.query.rules : this.pageInfo = JSON.parse(this.$route.query.rules);
  218. }
  219. getEmployeeOrgan().then(res => {
  220. if (res.code == 200) {
  221. this.organList = res.data;
  222. }
  223. })
  224. this.getList();
  225. },
  226. methods: {
  227. onSearch () {
  228. this.pageInfo.page = 1;
  229. this.getList()
  230. },
  231. getList () {
  232. let params = this.searchForm
  233. params.rows = this.pageInfo.limit
  234. params.page = this.pageInfo.page
  235. params.organId ? params.organId : params.organId = null;
  236. queryStudentList(params).then(res => {
  237. if (res.code == 200) {
  238. this.tableList = res.data.rows
  239. this.pageInfo.total = res.data.total
  240. }
  241. })
  242. },
  243. onReSet () {
  244. this.searchForm = {
  245. organId: null,
  246. search: null,
  247. studentName: null
  248. }
  249. },
  250. checkPhone (val) {
  251. var regu = /^1[3456789]\d{9}$/;
  252. var re = new RegExp(regu);
  253. if (re.test(val)) {
  254. getStudentInfoByPhone({ mobile: this.studentForm.phone }).then(res => {
  255. if (res.code == 200) {
  256. if (res.data) {
  257. this.studentForm = {
  258. name: res.data.name,
  259. sex: res.data.gender,
  260. parseName: res.data.parentsName,
  261. // sound: parseInt(res.data.subjectId),
  262. phone: val,
  263. date: res.data.birthdate
  264. }
  265. }
  266. }
  267. })
  268. }
  269. },
  270. submitAddStudent () {
  271. // 效验 然后组数据提交
  272. this.$refs['studentForm'].validate(item => {
  273. if (item) {
  274. let obj = {
  275. phone: this.studentForm.phone,
  276. username: this.studentForm.name,
  277. gender: this.studentForm.sex,
  278. realName: this.studentForm.parseName,
  279. birthdate: this.studentForm.date,
  280. organId: this.studentForm.organId,
  281. nation: this.studentForm.nation
  282. }
  283. registerStudent(obj).then(res => {
  284. if (res.code == 200) {
  285. this.$message.success('添加成功');
  286. this.studentVisible = false;
  287. this.getList()
  288. }
  289. })
  290. }
  291. })
  292. },
  293. // 修改学生信息
  294. resetStudentSubmie () {
  295. this.$refs['studentForm'].validate(item => {
  296. if (item) {
  297. let obj = {
  298. phone: this.studentForm.phone,
  299. username: this.studentForm.name,
  300. gender: this.studentForm.sex,
  301. realName: this.studentForm.parseName,
  302. birthdate: this.studentForm.date,
  303. organId: this.studentForm.organId,
  304. id: this.active.userId,
  305. nation: this.studentForm.nation
  306. }
  307. updateStudent(obj).then(res => {
  308. if (res.code == 200) {
  309. this.$message.success('修改成功');
  310. this.studentVisible = false;
  311. this.getList()
  312. }
  313. })
  314. }
  315. })
  316. },
  317. addStudent () {
  318. this.isNew = true;
  319. this.studentVisible = true;
  320. this.maskName = '新增学员'
  321. },
  322. resetStudent (row) {
  323. this.isNew = false;
  324. this.active = row;
  325. this.studentVisible = true;
  326. this.maskName = '修改学员'
  327. this.studentForm = {
  328. phone: row.parentsPhone,
  329. name: row.username,
  330. sex: row.gender,
  331. parseName: row.realName,
  332. date: row.birthdate,
  333. nation: row.nation
  334. }
  335. }
  336. },
  337. watch: {
  338. studentVisible (val) {
  339. if (!val) {
  340. this.studentForm = {
  341. phone: '',
  342. organId: '',
  343. name: '',
  344. sex: '',
  345. parseName: '',
  346. date: '',
  347. nation: ''
  348. }
  349. // this.studentForm.
  350. }
  351. }
  352. }
  353. }
  354. </script>
  355. <style lang="scss">
  356. </style>