studentList.vue 28 KB

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