studentList.vue 25 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740
  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" v-permission="'studentManage/register'" @click="addStudent">新增学员</div>
  8. <div class="newBand" @click="onCreateQRCode">学员激活列表</div>
  9. <!-- 搜索标题 -->
  10. <el-form :inline="true" class="searchForm" v-model.trim="searchForm">
  11. <el-form-item>
  12. <el-input
  13. placeholder="学生姓名或电话"
  14. @keyup.enter.native="onSearch"
  15. v-model.trim="searchForm.search"
  16. ></el-input>
  17. </el-form-item>
  18. <el-form-item prop="organId">
  19. <el-select
  20. class="multiple"
  21. filterable
  22. v-model.trim="searchForm.organId"
  23. clearable
  24. placeholder="请选择分部"
  25. >
  26. <el-option
  27. v-for="(item,index) in organList"
  28. :key="index"
  29. :label="item.name"
  30. :value="item.id"
  31. ></el-option>
  32. </el-select>
  33. </el-form-item>
  34. <el-form-item>
  35. <el-select placeholder="指导老师" v-model="searchForm.teacherId" clearable filterable>
  36. <el-option
  37. v-for="(item,index) in teacherList"
  38. :label="item.realName"
  39. :value="item.id"
  40. :key="index"
  41. ></el-option>
  42. </el-select>
  43. </el-form-item>
  44. <el-form-item prop="isActive">
  45. <el-select
  46. class="multiple"
  47. v-model.trim="searchForm.isActive"
  48. clearable
  49. placeholder="是否激活"
  50. >
  51. <el-option label="是" value="true"></el-option>
  52. <el-option label="否" value="false"></el-option>
  53. </el-select>
  54. </el-form-item>
  55. <el-form-item prop="hasCourse">
  56. <el-select
  57. class="multiple"
  58. v-model.trim="searchForm.hasCourse"
  59. clearable
  60. placeholder="是否有课"
  61. >
  62. <el-option label="是" value="1"></el-option>
  63. <el-option label="否" value="0"></el-option>
  64. </el-select>
  65. </el-form-item>
  66. <el-form-item prop="isMake">
  67. <el-select
  68. class="multiple"
  69. v-model.trim="searchForm.isMake"
  70. clearable
  71. placeholder="预约网管课"
  72. >
  73. <el-option label="是" value="true"></el-option>
  74. <el-option label="否" value="false"></el-option>
  75. </el-select>
  76. </el-form-item>
  77. <el-form-item prop="hasPracticeCourse">
  78. <el-select
  79. class="multiple"
  80. v-model.trim="searchForm.hasPracticeCourse"
  81. clearable
  82. placeholder="是否有网管课"
  83. >
  84. <el-option label="是" value="true"></el-option>
  85. <el-option label="否" value="false"></el-option>
  86. </el-select>
  87. </el-form-item>
  88. <el-form-item prop="hasCourse">
  89. <el-select
  90. class="multiple"
  91. v-model.trim="searchForm.operatingTag"
  92. clearable
  93. placeholder="是否运营"
  94. >
  95. <el-option label="是" value="1"></el-option>
  96. <el-option label="否" value="0"></el-option>
  97. </el-select>
  98. </el-form-item>
  99. <el-form-item prop="hasCourse">
  100. <el-select
  101. class="multiple"
  102. v-model.trim="searchForm.serviceTag"
  103. clearable
  104. placeholder="是否服务"
  105. >
  106. <el-option label="是" value="1"></el-option>
  107. <el-option label="否" value="0"></el-option>
  108. </el-select>
  109. </el-form-item>
  110. <el-form-item>
  111. <el-button @click="onSearch" type="danger">搜索</el-button>
  112. <el-button @click="onReSet" type="primary">重置</el-button>
  113. <el-button
  114. type="primary"
  115. v-permission="'export/studentHasCourse'"
  116. @click="downLoadStudent"
  117. >导出名单</el-button>
  118. </el-form-item>
  119. </el-form>
  120. <!-- 列表 -->
  121. <div class="tableWrap">
  122. <el-table :data="tableList" :header-cell-style="{background:'#EDEEF0',color:'#444'}">
  123. <el-table-column align="center" prop="userId" label="学员编号"></el-table-column>
  124. <el-table-column align="center" prop="username" label="学员姓名"></el-table-column>
  125. <el-table-column align="center" prop="organName" label="所属分部"></el-table-column>
  126. <el-table-column align="center" prop="teacherName" label="指导老师"></el-table-column>
  127. <el-table-column align="center" label="性别">
  128. <template slot-scope="scope">{{ scope.row.gender ? '男': '女' }}</template>
  129. </el-table-column>
  130. <el-table-column align="center" prop="realName" label="家长姓名"></el-table-column>
  131. <el-table-column align="center" width="120px" prop="parentsPhone" label="家长联系电话"></el-table-column>
  132. <el-table-column align="center" label="是否激活">
  133. <template slot-scope="scope">{{ scope.row.isActive ? '是' : '否' }}</template>
  134. </el-table-column>
  135. <el-table-column align="center" label="是否有课">
  136. <template slot-scope="scope">{{ scope.row.hasCourse ? '是' : '否' }}</template>
  137. </el-table-column>
  138. <el-table-column align="center" label="预约网管课">
  139. <template slot-scope="scope">{{ scope.row.isMake ? '是' : '否' }}</template>
  140. </el-table-column>
  141. <el-table-column align="center" label="是否有网管课">
  142. <template slot-scope="scope">{{ scope.row.hasPracticeCourse ? '是' : '否' }}</template>
  143. </el-table-column>
  144. <el-table-column align="center" label="是否运营">
  145. <template slot-scope="scope">{{ scope.row.operatingTag ? '是' : '否' }}</template>
  146. </el-table-column>
  147. <el-table-column align="center" label="是否服务">
  148. <template slot-scope="scope">{{ scope.row.serviceTag ? '是' : '否' }}</template>
  149. </el-table-column>
  150. <el-table-column align="center" prop="courseBalance" label="课程余额(元)"></el-table-column>
  151. <el-table-column align="center" fixed="right" width="180px" label="操作">
  152. <template slot-scope="scope">
  153. <router-link
  154. style="color:#409EFF"
  155. v-permission="'/studentDetail'"
  156. :to="{path:`/business/studentDetail?userId=${scope.row.userId}`,query:{search:JSON.stringify(searchForm),rules:JSON.stringify(pageInfo),studentName:scope.row.username}}"
  157. >查看</router-link>
  158. <el-button
  159. type="text"
  160. v-permission="'studentManage/studentUpdate'"
  161. @click="resetStudent(scope.row)"
  162. >修改</el-button>
  163. <!-- api-auth/user/updatePassword2 -->
  164. <el-button
  165. v-permission="'api-auth/user/updatePassword2'"
  166. @click="resetPassWrod(scope.row)"
  167. type="text"
  168. >修改密码</el-button>
  169. </template>
  170. </el-table-column>
  171. </el-table>
  172. <pagination
  173. :total="pageInfo.total"
  174. :page.sync="pageInfo.page"
  175. :limit.sync="pageInfo.limit"
  176. :page-sizes="pageInfo.page_size"
  177. @pagination="getList"
  178. />
  179. </div>
  180. </div>
  181. <el-dialog
  182. :title="maskName"
  183. width="700px"
  184. label-width="100px"
  185. label-position="right"
  186. class="studentInfo"
  187. :visible.sync="studentVisible"
  188. >
  189. <el-divider>基本信息</el-divider>
  190. <el-form
  191. :model="studentForm"
  192. :inline="true"
  193. label-width="80px"
  194. label-position="right"
  195. ref="studentForm"
  196. :rules="studentRules"
  197. >
  198. <el-form-item
  199. label="联系电话"
  200. prop="phone"
  201. :rules="[{ required: true, message: '请输入手机号' }, { pattern: /^1[3456789]\d{9}$/, message: '请输入正确的手机号', trigger: 'blur' }]"
  202. >
  203. <!-- @blur="checkPhone(studentForm.phone)" -->
  204. <el-input v-model.trim="studentForm.phone"></el-input>
  205. </el-form-item>
  206. <el-form-item label="所属分部" prop="organId">
  207. <el-select
  208. class="multiple"
  209. v-model.trim="studentForm.organId"
  210. filterable
  211. clearable
  212. placeholder="请选择分部"
  213. >
  214. <el-option
  215. v-for="(item,index) in organList"
  216. :key="index"
  217. :label="item.name"
  218. :value="item.id"
  219. ></el-option>
  220. </el-select>
  221. </el-form-item>
  222. <el-form-item label="学生姓名" prop="name">
  223. <el-input v-model.trim="studentForm.name"></el-input>
  224. </el-form-item>
  225. <el-form-item label="学生性别" prop="sex">
  226. <el-select
  227. class="multiple"
  228. filterable
  229. v-model.trim="studentForm.sex"
  230. clearable
  231. placeholder="请选择性别"
  232. >
  233. <el-option :value="0" label="女"></el-option>
  234. <el-option :value="1" label="男"></el-option>
  235. </el-select>
  236. </el-form-item>
  237. <el-form-item label="是否运营" prop="operatingTag">
  238. <el-select class="multiple" v-model.trim="studentForm.operatingTag" clearable>
  239. <el-option value="1" label="是"></el-option>
  240. <el-option value="0" label="否"></el-option>
  241. </el-select>
  242. </el-form-item>
  243. <el-form-item label="是否服务" prop="serviceTag">
  244. <el-select class="multiple" v-model.trim="studentForm.serviceTag" clearable>
  245. <el-option value="1" label="是"></el-option>
  246. <el-option value="0" label="否"></el-option>
  247. </el-select>
  248. </el-form-item>
  249. <el-form-item label="指导老师" prop="teacherId">
  250. <el-select class="multiple" v-model.trim="studentForm.teacherId" clearable filterable>
  251. <el-option
  252. v-for="(item,index) in teacherList"
  253. :label="item.realName"
  254. :value="item.id"
  255. :key="index"
  256. ></el-option>
  257. </el-select>
  258. </el-form-item>
  259. <el-form-item label="家长姓名">
  260. <el-input v-model.trim="studentForm.parseName"></el-input>
  261. </el-form-item>
  262. <el-form-item label="出生日期">
  263. <el-date-picker
  264. v-model.trim="studentForm.date"
  265. value-format="yyyy-MM-dd"
  266. type="date"
  267. placeholder="选择日期"
  268. ></el-date-picker>
  269. </el-form-item>
  270. </el-form>
  271. <div slot="footer" class="dialog-footer">
  272. <el-button @click="studentVisible = false">取 消</el-button>
  273. <el-button type="primary" v-if="isNew" @click="submitAddStudent">确 定</el-button>
  274. <el-button type="primary" v-if="!isNew" @click="resetStudentSubmie">确 定</el-button>
  275. </div>
  276. </el-dialog>
  277. <el-dialog :visible.sync="qrcodeStatus" center width="300px">
  278. <div class="right-code">
  279. <h2 class="title">学员激活列表</h2>
  280. <div id="qrcode" class="qrcode code" ref="qrCodeUrl"></div>
  281. <!-- <p class="code-url"
  282. v-if="codeUrl2">{{ codeUrl2 }}</p>-->
  283. </div>
  284. </el-dialog>
  285. <el-dialog
  286. title="修改密码"
  287. :visible.sync="passwrodVisiable"
  288. :before-close="closePassWord"
  289. width="400px"
  290. >
  291. <el-form :model="passwrodForm" ref="passwrodForm" :inline="true">
  292. <el-form-item
  293. label="手机号"
  294. prop="phone"
  295. label-width="80px"
  296. :rules="[{ required: true, message: '手机号不能为空',trigger: 'blur'},{pattern: /^1[3456789]\d{9}$/, message: '请输入正确的手机号',trigger: 'blur' }]"
  297. >
  298. <el-input v-model.trim="passwrodForm.phone"></el-input>
  299. </el-form-item>
  300. <el-form-item
  301. label="输入密码"
  302. prop="password"
  303. label-width="80px"
  304. :rules="[{ required: true, message: '密码不能为空',trigger: 'blur'},{pattern:/^[\w]{6,20}$/,message:'密码为6-20位',trigger: 'blur'}]"
  305. >
  306. <el-input v-model.trim="passwrodForm.password"></el-input>
  307. </el-form-item>
  308. <el-form-item
  309. label="再次输入"
  310. prop="password2"
  311. label-width="80px"
  312. :rules="[{ required: true, message: '密码不能为空',trigger: 'blur'},{pattern:/^[\w]{6,20}$/,message:'密码为6-20位',trigger: 'blur'}]"
  313. >
  314. <el-input v-model.trim="passwrodForm.password2"></el-input>
  315. </el-form-item>
  316. </el-form>
  317. <span slot="footer" class="dialog-footer">
  318. <el-button @click="passwrodVisiable = false">取 消</el-button>
  319. <el-button type="primary" @click="submitResetPassWord">确 定</el-button>
  320. </span>
  321. </el-dialog>
  322. </div>
  323. </template>
  324. <script>
  325. import pagination from "@/components/Pagination/index";
  326. import {
  327. queryStudentList,
  328. getStudentInfoByPhone,
  329. registerStudent,
  330. updateStudent,
  331. studentHasCourse
  332. } from "@/api/studentManager";
  333. import { vaildStudentUrl } from "@/utils/validate";
  334. import { getEmployeeOrgan, resetPassword2,getTeacher } from "@/api/buildTeam";
  335. import QRCode from "qrcodejs2";
  336. import store from "@/store";
  337. import axios from "axios";
  338. import qs from "qs";
  339. import { getToken } from "@/utils/auth";
  340. import load from "@/utils/loading";
  341. import { permission } from "@/utils/directivePage";
  342. export default {
  343. name: "studentList",
  344. components: { pagination },
  345. data() {
  346. return {
  347. studentVisible: false,
  348. searchForm: {
  349. organId: null,
  350. search: null,
  351. studentName: null,
  352. isActive: null,
  353. hasCourse: null,
  354. isMake: null,
  355. hasPracticeCourse: null,
  356. operatingTag: null,
  357. serviceTag: null,
  358. teacherId:null
  359. },
  360. searchList: [],
  361. tableList: [],
  362. organList: [],
  363. teacherList:[],
  364. pageInfo: {
  365. // 分页规则
  366. limit: 10, // 限制显示条数
  367. page: 1, // 当前页
  368. total: 0, // 总条数
  369. page_size: [10, 20, 40, 50] // 选择限制显示条数
  370. },
  371. studentForm: {
  372. phone: "",
  373. organId: "",
  374. name: "",
  375. sex: "",
  376. parseName: "",
  377. date: "",
  378. nation: "",
  379. serviceTag: null,
  380. operatingTag: null,
  381. teacherId:null
  382. },
  383. studentRules: {
  384. name: [{ required: true, message: "请输入学生姓名" }],
  385. sex: [{ required: true, message: "请选择学生姓名" }],
  386. date: [{ required: true, message: "请选择出生日期" }],
  387. organId: [{ required: true, message: "请选择分部" }],
  388. nation: [{ required: true, message: "请输入名族" }],
  389. serviceTag: [{ required: true, message: "请选择是否参与服务" }],
  390. operatingTag: [{ required: true, message: "请选择是否参与运营" }],
  391. teacherId: [{ required: true, message: "请选择指导老师" }],
  392. },
  393. isNew: false,
  394. active: null,
  395. maskName: "新增学员",
  396. qrcodeStatus: false,
  397. qrcodes: true,
  398. activeRow: null,
  399. passwrodVisiable: false,
  400. passwrodForm: {
  401. phone: "",
  402. password: "",
  403. password2: ""
  404. },
  405. activatedRow: null
  406. };
  407. },
  408. mounted() {
  409. if (this.$route.query.search) {
  410. this.$route.query.search instanceof Object
  411. ? (this.searchForm = this.$route.query.search)
  412. : (this.searchForm = JSON.parse(this.$route.query.search));
  413. }
  414. if (this.$route.query.rules) {
  415. this.$route.query.rules instanceof Object
  416. ? (this.pageInfo = this.$route.query.rules)
  417. : (this.pageInfo = JSON.parse(this.$route.query.rules));
  418. }
  419. getEmployeeOrgan().then(res => {
  420. if (res.code == 200) {
  421. this.organList = res.data;
  422. }
  423. });
  424. getTeacher().then(res => {
  425. if (res.code == 200) {
  426. this.teacherList = res.data;
  427. }
  428. });
  429. this.getList();
  430. },
  431. methods: {
  432. onSearch() {
  433. this.pageInfo.page = 1;
  434. this.getList();
  435. },
  436. onCreateQRCode() {
  437. // 生成报名二维码
  438. this.qrcodeStatus = true;
  439. // let id = this.$route.query.id
  440. // let teamName = this.$route.query.name
  441. setTimeout(() => {
  442. if (this.qrcodes) {
  443. this.qrcodes = false;
  444. this.qrcode = new QRCode("qrcode", {
  445. width: 250,
  446. height: 250,
  447. colorDark: "#000000",
  448. colorLight: "#ffffff",
  449. correctLevel: QRCode.CorrectLevel.H
  450. });
  451. }
  452. // vaildStudentUrl() + `/#/sporadicLogin?id=${刷刷刷}`
  453. this.qrcode.clear();
  454. this.qrcode.makeCode(vaildStudentUrl() + `/#/queryStudentPer`);
  455. // this.codeUrl = vaildStudentUrl() + '/#/login?musicGroupId=' + id
  456. }, 500);
  457. },
  458. getList() {
  459. let params = this.searchForm;
  460. params.rows = this.pageInfo.limit;
  461. params.page = this.pageInfo.page;
  462. params.organId ? params.organId : (params.organId = null);
  463. queryStudentList(params).then(res => {
  464. if (res.code == 200) {
  465. this.tableList = res.data.rows;
  466. this.pageInfo.total = res.data.total;
  467. }
  468. });
  469. },
  470. onReSet() {
  471. this.searchForm = {
  472. organId: null,
  473. search: null,
  474. studentName: null,
  475. isActive: null,
  476. hasCourse: null,
  477. isMake: null,
  478. hasPracticeCourse: null,
  479. operatingTag: null,
  480. serviceTag: null,
  481. teacherId:null,
  482. };
  483. },
  484. downLoadStudent() {
  485. let url = "/api-web/export/studentHasCourse";
  486. let searchForm = this.searchForm;
  487. let data = {
  488. organId: searchForm.organId ? searchForm.organId : null,
  489. search: searchForm.search ? searchForm.search : null,
  490. isActive: searchForm.isActive ? searchForm.isActive : null,
  491. hasCourse: searchForm.hasCourse == "" ? null : searchForm.hasCourse,
  492. isMake: searchForm.isMake ? searchForm.isMake : null,
  493. hasPracticeCourse: searchForm.hasPracticeCourse
  494. ? searchForm.hasPracticeCourse
  495. : null,
  496. operatingTag: searchForm.operatingTag ? searchForm.operatingTag : null,
  497. serviceTag: searchForm.serviceTag ? searchForm.serviceTag : null,
  498. teacherId:searchForm.teacherId ? searchForm.teacherId:null
  499. };
  500. const options = {
  501. method: "POST",
  502. headers: {
  503. Authorization: getToken()
  504. },
  505. url,
  506. data: qs.stringify(data),
  507. responseType: "blob"
  508. };
  509. this.$confirm("确定导出学员名单?", "提示", {
  510. confirmButtonText: "确定",
  511. cancelButtonText: "取消",
  512. type: "warning"
  513. })
  514. .then(() => {
  515. load.startLoading();
  516. axios(options)
  517. .then(res => {
  518. let blob = new Blob([res.data], {
  519. // type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=utf-8',
  520. type: "application/vnd.ms-excel;charset=utf-8"
  521. // word文档为application/msword,pdf文档为application/pdf,application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=utf-8
  522. });
  523. let text = new Response(blob).text();
  524. text.then(res => {
  525. // 判断是否报错
  526. if (res.indexOf("code") != -1) {
  527. let json = JSON.parse(res);
  528. this.$message.error(json.msg);
  529. } else {
  530. let objectUrl = URL.createObjectURL(blob);
  531. let link = document.createElement("a");
  532. let nowTime = new Date();
  533. let ymd =
  534. nowTime.getFullYear() +
  535. (nowTime.getMonth() + 1) +
  536. nowTime.getDate();
  537. let fname = `导出学员名单` + ymd; //下载文件的名字
  538. link.href = objectUrl;
  539. link.setAttribute("download", fname);
  540. document.body.appendChild(link);
  541. link.click();
  542. }
  543. });
  544. load.endLoading();
  545. })
  546. .catch(error => {
  547. this.$message.error("导出数据失败,请连接管理员");
  548. load.endLoading();
  549. });
  550. })
  551. .catch(() => {});
  552. },
  553. checkPhone(val) {
  554. var regu = /^1[3456789]\d{9}$/;
  555. var re = new RegExp(regu);
  556. if (re.test(val)) {
  557. getStudentInfoByPhone({ mobile: this.studentForm.phone }).then(res => {
  558. if (res.code == 200) {
  559. if (res.data) {
  560. this.studentForm = {
  561. name: res.data.name,
  562. sex: res.data.gender,
  563. parseName: res.data.parentsName,
  564. // sound: parseInt(res.data.subjectId),
  565. phone: val,
  566. date: res.data.birthdate
  567. };
  568. }
  569. }
  570. });
  571. }
  572. },
  573. submitAddStudent() {
  574. // 效验 然后组数据提交
  575. this.$refs["studentForm"].validate(item => {
  576. if (item) {
  577. let obj = {
  578. phone: this.studentForm.phone,
  579. username: this.studentForm.name,
  580. gender: this.studentForm.sex,
  581. realName: this.studentForm.parseName,
  582. birthdate: this.studentForm.date,
  583. organId: this.studentForm.organId,
  584. nation: this.studentForm.nation,
  585. serviceTag: this.studentForm.serviceTag,
  586. operatingTag: this.studentForm.operatingTag,
  587. teacherId:this.studentForm.teacherId
  588. };
  589. registerStudent(obj).then(res => {
  590. if (res.code == 200) {
  591. this.$message.success("添加成功");
  592. this.studentVisible = false;
  593. this.getList();
  594. }
  595. });
  596. }
  597. });
  598. },
  599. // 修改学生信息
  600. resetStudentSubmie() {
  601. this.$refs["studentForm"].validate(item => {
  602. if (item) {
  603. let obj = {
  604. phone: this.studentForm.phone,
  605. username: this.studentForm.name,
  606. gender: this.studentForm.sex,
  607. realName: this.studentForm.parseName,
  608. birthdate: this.studentForm.date,
  609. organId: this.studentForm.organId,
  610. id: this.active.userId,
  611. nation: this.studentForm.nation,
  612. serviceTag: this.studentForm.serviceTag,
  613. operatingTag: this.studentForm.operatingTag,
  614. teacherId:this.studentForm.teacherId
  615. };
  616. updateStudent(obj).then(res => {
  617. if (res.code == 200) {
  618. this.$message.success("修改成功");
  619. this.studentVisible = false;
  620. this.getList();
  621. }
  622. });
  623. }
  624. });
  625. },
  626. addStudent() {
  627. this.isNew = true;
  628. this.studentVisible = true;
  629. this.maskName = "新增学员";
  630. },
  631. resetStudent(row) {
  632. this.isNew = false;
  633. this.active = row;
  634. this.studentVisible = true;
  635. this.maskName = "修改学员";
  636. this.studentForm = {
  637. phone: row.parentsPhone,
  638. name: row.username,
  639. sex: row.gender,
  640. parseName: row.realName,
  641. date: row.birthdate,
  642. organId: row.organId,
  643. nation: row.nation,
  644. serviceTag: row.serviceTag+'',
  645. operatingTag: row.operatingTag+'',
  646. teacherId:row.teacherId
  647. };
  648. },
  649. resetPassWrod(row) {
  650. this.activatedRow = row;
  651. this.passwrodForm.phone = row.parentsPhone;
  652. this.passwrodVisiable = true;
  653. },
  654. closePassWord() {
  655. this.activatedRow = null;
  656. this.passwrodForm = {
  657. phone: "",
  658. password: "",
  659. password2: ""
  660. };
  661. this.$refs["passwrodForm"].resetFields();
  662. this.passwrodVisiable = false;
  663. },
  664. submitResetPassWord() {
  665. if (this.passwrodForm.password !== this.passwrodForm.password2) {
  666. this.$message.error("两次密码必须相同");
  667. return;
  668. }
  669. this.$refs["passwrodForm"].validate(res => {
  670. if (res) {
  671. // 发请求
  672. resetPassword2({
  673. mobile: this.passwrodForm.phone,
  674. newPassword: this.passwrodForm.password,
  675. userId: this.activatedRow.userId
  676. }).then(res => {
  677. if (res.code == 200) {
  678. // 修改成功
  679. this.$message.success("修改成功");
  680. this.closePassWord();
  681. }
  682. });
  683. }
  684. });
  685. }
  686. },
  687. watch: {
  688. studentVisible(val) {
  689. if (!val) {
  690. this.studentForm = {
  691. phone: "",
  692. organId: "",
  693. name: "",
  694. sex: "",
  695. parseName: "",
  696. date: "",
  697. nation: "",
  698. serviceTag: null,
  699. operatingTag: null,
  700. teacherId:null
  701. };
  702. this.$refs["studentForm"].resetFields();
  703. }
  704. }
  705. }
  706. };
  707. </script>
  708. <style lang="scss" scoped>
  709. .newBand {
  710. display: inline-block;
  711. margin-right: 10px;
  712. }
  713. .right-code {
  714. // width: 50%;
  715. // float: left;
  716. .title {
  717. font-size: 18px;
  718. text-align: center;
  719. padding-bottom: 8px;
  720. }
  721. }
  722. /deep/.studentInfo {
  723. .el-dialog__body {
  724. padding-top: 0;
  725. padding-bottom: 0;
  726. }
  727. .multiple.el-select {
  728. width: 185px !important;
  729. }
  730. }
  731. </style>