baseInfo.vue 22 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699
  1. <template>
  2. <div id="baseInfo">
  3. <div class="YZsty">
  4. <el-row :gutter="20">
  5. <el-form
  6. label-position="right"
  7. label-width="130px"
  8. :model="listData"
  9. :rules="rules"
  10. ref="listData"
  11. >
  12. <el-col :span="24">
  13. <el-form-item label="所属商品课程">
  14. <div class="flex_s">
  15. <div>商品编码:{{ listData.goodsList[0].code }}</div>
  16. <div style="display: flex">
  17. <div>商品业务层级:</div>
  18. <div style="flex: 1">
  19. {{
  20. `${listData.goodsList[0].educationName}-${listData.goodsList[0].projectName}-${listData.goodsList[0].businessName}`
  21. }}
  22. </div>
  23. </div>
  24. <div>学时:{{ listData.goodsList[0].classHours }}</div>
  25. <div>年份:{{ listData.goodsList[0].year }}</div>
  26. <div>商品名称:{{ listData.goodsList[0].goodsName }}</div>
  27. </div>
  28. </el-form-item>
  29. </el-col>
  30. <el-col :span="24">
  31. <div class="fgx"></div>
  32. </el-col>
  33. <el-col :span="12">
  34. <el-form-item label="班级编码" prop="gradeCode">
  35. <el-input
  36. disabled
  37. v-model="listData.gradeCode"
  38. placeholder="请填写班级编码"
  39. ></el-input>
  40. </el-form-item>
  41. <el-form-item label="班级名称" prop="className">
  42. <el-input
  43. v-model="listData.className"
  44. placeholder="请填写班级名称"
  45. ></el-input>
  46. </el-form-item>
  47. <el-form-item label="学员上限" prop="studentUpper">
  48. <el-input-number
  49. :min="minNums"
  50. :controls="false"
  51. v-model="listData.studentUpper"
  52. placeholder="请填写学员上限"
  53. ></el-input-number>
  54. </el-form-item>
  55. <el-form-item label="当前学员人数" prop="studentNum">
  56. <el-input-number
  57. :min="minNums"
  58. :controls="false"
  59. disabled
  60. v-model="listData.studentNum"
  61. placeholder="请填写学员上限"
  62. ></el-input-number>
  63. </el-form-item>
  64. <el-form-item
  65. label="开放学习时间"
  66. :prop="
  67. listData.learningStatus == 3
  68. ? 'learningTimeStart'
  69. : 'learningStatus'
  70. "
  71. >
  72. <!-- <el-button
  73. style="margin-right: 14px"
  74. size="mini"
  75. v-if="listData.learningStatus"
  76. @click="listData.learningStatus = ''"
  77. >清除选择</el-button
  78. > -->
  79. <el-radio-group
  80. v-model="listData.learningStatus"
  81. @change="changeLearning"
  82. >
  83. <el-radio :label="1">即刻</el-radio>
  84. <el-radio :label="2">待定</el-radio>
  85. <el-radio :label="3">日期</el-radio>
  86. </el-radio-group>
  87. <el-date-picker
  88. v-if="listData.learningStatus === 3"
  89. v-model="listData.learningTimeStart"
  90. type="datetime"
  91. value-format="timestamp"
  92. placeholder="请选择开放学习时间"
  93. >
  94. </el-date-picker>
  95. </el-form-item>
  96. <el-form-item label="状态" prop="status">
  97. <el-radio-group v-model="listData.status">
  98. <el-radio :label="1">有效</el-radio>
  99. <el-radio :label="0">无效</el-radio>
  100. </el-radio-group>
  101. </el-form-item>
  102. <el-form-item label="官方班级号">
  103. <el-button
  104. style="margin-right: 14px"
  105. size="mini"
  106. v-if="
  107. (listData.classStatus || listData.classStatus === 0) &&
  108. !classStatusDis
  109. "
  110. @click="clearClassNumber"
  111. >清除选择</el-button
  112. >
  113. <el-radio-group
  114. v-model="listData.classStatus"
  115. @change="changeClassStatus"
  116. :disabled="classStatusDis"
  117. >
  118. <el-radio :label="0">预报名(未开班)</el-radio>
  119. <el-radio :label="1">已开班</el-radio>
  120. </el-radio-group>
  121. </el-form-item>
  122. <el-form-item
  123. label=""
  124. prop="officialName"
  125. v-if="listData.classStatus === 1"
  126. >
  127. <el-input
  128. :disabled="classStatusDis"
  129. placeholder="请填写继教二建官方班级"
  130. v-model="listData.officialName"
  131. ></el-input>
  132. </el-form-item>
  133. <div class="dis_style" v-if="listData.classStatus === 1">
  134. <el-form-item label="班级有效期" prop="classStartTime">
  135. <el-date-picker
  136. v-model="listData.classStartTime"
  137. type="datetime"
  138. value-format="timestamp"
  139. placeholder="选择开始日期时间"
  140. @change="changeTimeList1"
  141. :disabled="classStartStatus"
  142. >
  143. </el-date-picker>
  144. </el-form-item>
  145. <el-form-item label-width="10px" label="" prop="classEndTime">
  146. <el-date-picker
  147. v-model="listData.classEndTime"
  148. type="datetime"
  149. value-format="timestamp"
  150. placeholder="选择结束日期时间"
  151. @change="changeTimeList2"
  152. :disabled="classEndStatus"
  153. >
  154. </el-date-picker>
  155. </el-form-item>
  156. </div>
  157. <!-- <el-tooltip class="item" effect="dark" placement="right">
  158. <div slot="content">
  159. 商品学习有效期:{{
  160. $methodsTools.onlyForma(
  161. listData.goodsList[0].studyStartTime
  162. )
  163. }}
  164. {{
  165. $methodsTools.onlyForma(listData.goodsList[0].studyEndTime)
  166. }}
  167. </div>
  168. <i
  169. style="margin-left: 10px; font-size: 20px; color: #e6a23c"
  170. v-show="timeArrays.length"
  171. class="el-icon-warning"
  172. ></i>
  173. </el-tooltip> -->
  174. <el-form-item label="考期" prop="examineId">
  175. <el-select
  176. v-model="listData.examineId"
  177. placeholder="请选择考期"
  178. clearable
  179. >
  180. <el-option
  181. v-for="(item, index) in courseExamine"
  182. :key="index"
  183. :label="item.examineName"
  184. :value="item.id"
  185. >
  186. </el-option>
  187. </el-select>
  188. </el-form-item>
  189. <el-form-item label="报考地区(省)" prop="areasId">
  190. <el-select
  191. v-model="listData.areasId"
  192. placeholder="请选择报考地区(省)"
  193. @change="getNewCityList"
  194. clearable
  195. >
  196. <el-option
  197. v-for="(item, index) in areas"
  198. :key="index"
  199. :label="item.areaName"
  200. :value="item.areaId"
  201. >
  202. </el-option>
  203. </el-select>
  204. </el-form-item>
  205. <el-form-item
  206. label="报考地区(地市)"
  207. :prop="listData.areasId ? 'cityId' : ''"
  208. v-if="listData.areasId"
  209. >
  210. <el-select
  211. v-model="listData.cityId"
  212. placeholder="请选择报考地区(地市)"
  213. clearable
  214. >
  215. <el-option
  216. v-for="(item, index) in newCityList"
  217. :key="index"
  218. :label="item.areaName"
  219. :value="item.areaId"
  220. >
  221. </el-option>
  222. </el-select>
  223. </el-form-item>
  224. <el-form-item label="指派班主任">
  225. <el-select
  226. v-model="listData.sysUserId"
  227. placeholder="请选择指派班主任"
  228. clearable
  229. >
  230. <el-option
  231. v-for="(item, index) in teacherList"
  232. :key="index"
  233. :label="item.nickName"
  234. :value="item.userId"
  235. >
  236. </el-option>
  237. </el-select>
  238. </el-form-item>
  239. </el-col>
  240. <el-col :span="12">
  241. <div v-if="statusShow === 1">
  242. <el-form-item label="官方信息推送" prop="interfacePushId">
  243. <el-select
  244. v-model="listData.interfacePushId"
  245. placeholder="请选择官方信息推送"
  246. :disabled="copyData.interfacePushId ? true : false"
  247. clearable
  248. >
  249. <el-option
  250. v-for="(item, index) in type1List"
  251. :key="index"
  252. :label="item.name"
  253. :value="item.id"
  254. >
  255. </el-option>
  256. </el-select>
  257. </el-form-item>
  258. <el-form-item label="官方学时推送" prop="interfacePeriodId">
  259. <el-select
  260. v-model="listData.interfacePeriodId"
  261. placeholder="请选择官方学时推送"
  262. :disabled="copyData.interfacePeriodId ? true : false"
  263. clearable
  264. >
  265. <el-option
  266. v-for="(item, index) in type3List"
  267. :key="index"
  268. :label="item.name"
  269. :value="item.id"
  270. >
  271. </el-option>
  272. </el-select>
  273. </el-form-item>
  274. <el-form-item label="官方账号标记(有接口+标记功能)">
  275. <el-select
  276. v-model="listData.interfaceAccountId"
  277. placeholder="请选择官方学习账号开通"
  278. :disabled="
  279. copyData.noInterfaceAccountId || copyData.interfaceAccountId
  280. ? true : listData.noInterfaceAccountId ? true
  281. : false
  282. "
  283. clearable
  284. >
  285. <el-option
  286. v-for="(item, index) in type2List"
  287. :key="index"
  288. :label="item.name"
  289. :value="item.id"
  290. >
  291. </el-option>
  292. </el-select>
  293. </el-form-item>
  294. <el-form-item label="官方账号标记(无接口+标记功能)">
  295. <el-select
  296. v-model="listData.noInterfaceAccountId"
  297. placeholder="请选择官方账号标记(无接口+标记功能)"
  298. :disabled="
  299. copyData.noInterfaceAccountId || copyData.interfaceAccountId
  300. ? true : listData.interfaceAccountId ? true
  301. : false
  302. "
  303. clearable
  304. >
  305. <el-option
  306. v-for="(item, index) in type4List"
  307. :key="index"
  308. :label="item.name"
  309. :value="item.id"
  310. >
  311. </el-option>
  312. </el-select>
  313. </el-form-item>
  314. <!-- <el-form-item
  315. v-if="listData.interfaceAccountId"
  316. label="学习网址"
  317. prop="officialLearningUrl"
  318. >
  319. <el-input
  320. v-model="listData.officialLearningUrl"
  321. placeholder="请输入学习的网址"
  322. ></el-input>
  323. </el-form-item> -->
  324. </div>
  325. <el-form-item label="备注" prop="remark">
  326. <el-input
  327. type="textarea"
  328. :rows="5"
  329. v-model="listData.remark"
  330. ></el-input>
  331. </el-form-item>
  332. </el-col>
  333. <el-col :span="24" style="text-align: center">
  334. <el-button @click="backPage">返回</el-button>
  335. <el-button type="primary" @click="submitForm('listData')"
  336. >确定</el-button
  337. >
  338. </el-col>
  339. </el-form>
  340. </el-row>
  341. </div>
  342. </div>
  343. </template>
  344. <script>
  345. import { mapGetters } from "vuex";
  346. export default {
  347. data() {
  348. return {
  349. copyData: {},
  350. classStartStatus: false,
  351. classEndStatus: false,
  352. minNums: 0,
  353. listData: {
  354. goodsList: [{}],
  355. },
  356. rules: {
  357. className: [
  358. { required: true, message: "请填写班级名称", trigger: "blur" },
  359. ],
  360. officialLearningUrl: [
  361. { required: true, message: "请输入学习的网址", trigger: "blur" },
  362. ],
  363. officialName: [
  364. { required: true, message: "请填写官方班级", trigger: "blur" },
  365. ],
  366. studentUpper: [
  367. { required: true, message: "请填写学员上限", trigger: "blur" },
  368. {
  369. validator(rule, value, callback) {
  370. var reg = /^[1-9]\d*$/;
  371. if (reg.test(value)) {
  372. callback();
  373. } else {
  374. callback(new Error("请规范输入学员上限数量"));
  375. }
  376. },
  377. trigger: "blur",
  378. },
  379. ],
  380. studentNum: [
  381. { required: true, message: "请填写学员上限", trigger: "blur" },
  382. ],
  383. classStartTime: [
  384. { required: true, message: "请选择开始时间", trigger: "change" },
  385. ],
  386. classEndTime: [
  387. { required: true, message: "请选择结束时间", trigger: "change" },
  388. ],
  389. status: [{ required: true, message: "请选择状态", trigger: "change" }],
  390. learningTimeStart: [
  391. {
  392. type: "date",
  393. required: true,
  394. message: "请选择开放学习时间",
  395. trigger: "change",
  396. },
  397. ],
  398. cityId: [
  399. {
  400. required: true,
  401. message: "请选择报考地市",
  402. trigger: ["blur", "change"],
  403. },
  404. ],
  405. },
  406. cityList: [],
  407. classStatusDis: false,
  408. newCityList: [],
  409. // 1官方推送 2官方学习账号开通 3官方学时推送
  410. type1List: [],
  411. type2List: [],
  412. type3List: [],
  413. type4List: [],
  414. teacherList: [],
  415. statusShow: 0, //0隐藏1出现
  416. timeArrays: [], //限制班级有效期时间
  417. disabledFunc: false,
  418. };
  419. },
  420. computed: { ...mapGetters(["courseExamine", "areas"]) },
  421. mounted() {
  422. this.$modal.loading("正在导入数据,请稍后...");
  423. this.getInfoCityDict();
  424. this.getVoselect();
  425. this.search();
  426. },
  427. methods: {
  428. clearClassNumber() {
  429. this.listData.classStatus = "";
  430. this.changeClassStatus();
  431. },
  432. changeTimeList1(arr) {
  433. if (!arr) {
  434. return;
  435. }
  436. // if (arr < this.timeArrays[0] || arr >= this.timeArrays[1]) {
  437. // this.$message.warning("超出商品学习有效期,请重新选择");
  438. // this.listData.classStartTime = "";
  439. // } else
  440. if (this.listData.classEndTime && arr > this.listData.classEndTime) {
  441. this.$message.warning("开始时间不能大于等于结束时间,请重新选择");
  442. this.listData.classStartTime = "";
  443. }
  444. },
  445. changeTimeList2(arr) {
  446. if (!arr) {
  447. return;
  448. }
  449. // if (arr < this.timeArrays[0] || arr > this.timeArrays[1]) {
  450. // this.$message.warning("超出商品学习有效期,请重新选择");
  451. // this.listData.classEndTime = "";
  452. // } else
  453. if (this.listData.classStartTime && arr <= this.listData.classStartTime) {
  454. this.$message.warning("结束时间不能小于等于开始时间,请重新选择");
  455. this.listData.classEndTime = "";
  456. }
  457. },
  458. // 初始获取数据
  459. search() {
  460. this.$api
  461. .obtainGradegrade(this.$route.query.id)
  462. .then((res) => {
  463. if (res.data.classStatus === 1) {
  464. this.classStatusDis = true;
  465. }
  466. if (res.data.areasId) {
  467. this.newCityList = this.cityList.filter((item) => {
  468. return item.parentId == res.data.areasId;
  469. });
  470. }
  471. if (res.data.learningStatus === 3) {
  472. res.data.learningTimeStart = this.$methodsTools.time10to13(
  473. res.data.learningTimeStart,
  474. 2
  475. );
  476. }
  477. if (res.data.classStartTime && res.data.classEndTime) {
  478. res.data.classStartTime = this.$methodsTools.time10to13(
  479. res.data.classStartTime,
  480. 2
  481. );
  482. res.data.classEndTime = this.$methodsTools.time10to13(
  483. res.data.classEndTime,
  484. 2
  485. );
  486. // classStartStatus
  487. if (new Date().getTime() > res.data.classEndTime) {
  488. this.classStartStatus = true;
  489. this.classEndStatus = true;
  490. } else {
  491. this.classStartStatus = true;
  492. }
  493. }
  494. if (
  495. res.data.goodsList[0].studyStartTime &&
  496. res.data.goodsList[0].studyEndTime
  497. ) {
  498. this.timeArrays = [
  499. this.$methodsTools.time10to13(
  500. res.data.goodsList[0].studyStartTime,
  501. 2
  502. ),
  503. this.$methodsTools.time10to13(
  504. res.data.goodsList[0].studyEndTime,
  505. 2
  506. ),
  507. ];
  508. }
  509. this.minNums = res.data.studentNum;
  510. this.copyData = JSON.parse(JSON.stringify(res.data));
  511. this.listData = res.data;
  512. })
  513. .finally(() => {
  514. this.$modal.closeLoading();
  515. });
  516. },
  517. //官方接口是否出现
  518. getVoselect() {
  519. this.$api.inquirelistInterfaceVoselect().then((res) => {
  520. if (res.data === 1) {
  521. this.getGFList();
  522. }
  523. this.statusShow = res.data;
  524. });
  525. this.$api
  526. .obtainUserList({ status: 1, roleName: "班主任" })
  527. .then((res) => {
  528. this.teacherList = res.rows;
  529. });
  530. },
  531. //获取官方接口
  532. getGFList() {
  533. this.$api.inquirelistInterfaceVo().then((res) => {
  534. res.rows.forEach((item) => {
  535. if (item.type === 1) {
  536. this.type1List.push(item);
  537. }
  538. if (item.type === 2) {
  539. this.type2List.push(item);
  540. }
  541. if (item.type === 3) {
  542. this.type3List.push(item);
  543. }
  544. if (item.type === 4) {
  545. this.type4List.push(item);
  546. }
  547. });
  548. });
  549. },
  550. //获取地市列表
  551. getInfoCityDict() {
  552. this.$api.inquireapplyCityList({ status: 1, areaType: 2 }).then((res) => {
  553. this.cityList = res.rows;
  554. });
  555. },
  556. //获取最新地市列表
  557. getNewCityList(n) {
  558. this.newCityList = this.cityList.filter((item) => {
  559. return item.parentId == n;
  560. });
  561. this.listData.cityId = "";
  562. },
  563. //改变开放学习状态-清空选择框
  564. changeLearning() {
  565. this.listData.learningTimeStart = "";
  566. },
  567. //改变班级号状态-清空输入框
  568. changeClassStatus() {
  569. this.listData.officialName = "";
  570. this.listData.classStartTime = "";
  571. this.listData.classEndTime = "";
  572. this.$nextTick(() => {
  573. this.$refs.listData.clearValidate();
  574. });
  575. },
  576. //返回
  577. backPage() {
  578. this.$store.dispatch("tagsView/delView", this.$route).then((res) => {
  579. this.$router.push({
  580. path: "classList",
  581. });
  582. });
  583. },
  584. //表单验证
  585. submitForm(formName) {
  586. this.$refs[formName].validate((valid) => {
  587. if (valid) {
  588. this.submit(); //提交
  589. } else {
  590. console.log("error submit!!");
  591. return false;
  592. }
  593. });
  594. },
  595. //提交
  596. submit() {
  597. var data = JSON.parse(JSON.stringify(this.listData));
  598. if (!data.classStartTime && !data.classEndTime) {
  599. data.classStartTime = null;
  600. data.classEndTime = null;
  601. } else {
  602. if (data.classStartTime && data.classEndTime) {
  603. data.classStartTime = data.classStartTime / 1000;
  604. data.classEndTime = data.classEndTime / 1000;
  605. } else {
  606. this.$message.warning("请选择班级有效期的开始时间与结束时间");
  607. return;
  608. }
  609. }
  610. if (data.learningStatus === 3) {
  611. data.learningTimeStart = this.listData.learningTimeStart / 1000;
  612. }
  613. // if(!data.interfaceAccountId){
  614. // delete data.officialLearningUrl
  615. // }
  616. delete data.goodsList;
  617. this.$api.editGradegrade(data).then((res) => {
  618. this.$message.success("修改成功");
  619. this.search();
  620. });
  621. },
  622. },
  623. };
  624. </script>
  625. <style lang="less" scoped>
  626. .YZsty {
  627. background-color: #eee;
  628. padding: 30px;
  629. margin-top: 16px;
  630. }
  631. /deep/.el-button {
  632. border-radius: 8px;
  633. }
  634. /deep/.el-dialog {
  635. border-radius: 8px;
  636. .el-dialog__header {
  637. padding: 0;
  638. .hearders {
  639. height: 40px;
  640. display: flex;
  641. align-items: center;
  642. justify-content: space-between;
  643. padding: 0px 18px 0px 20px;
  644. border-bottom: 1px solid #e2e2e2;
  645. .leftTitle {
  646. font-size: 14px;
  647. font-weight: bold;
  648. color: #2f4378;
  649. }
  650. .rightBoxs {
  651. display: flex;
  652. align-items: center;
  653. img {
  654. width: 14px;
  655. height: 14px;
  656. margin-left: 13px;
  657. cursor: pointer;
  658. }
  659. }
  660. }
  661. }
  662. .el-dialog__footer {
  663. padding: 0;
  664. .dialog-footer {
  665. padding: 0px 40px;
  666. height: 70px;
  667. border-top: 1px solid #e2e2e2;
  668. display: flex;
  669. align-items: center;
  670. justify-content: flex-end;
  671. }
  672. }
  673. }
  674. /deep/.radioTables > .el-radio__label {
  675. display: none;
  676. }
  677. .fgx {
  678. border-bottom: 1px dashed #999;
  679. margin-bottom: 20px;
  680. }
  681. .flex_s {
  682. display: flex;
  683. // align-items: center;
  684. flex-wrap: wrap;
  685. & > div {
  686. flex-shrink: 0;
  687. width: 33%;
  688. font-weight: bold;
  689. }
  690. }
  691. .dis_style {
  692. display: flex;
  693. align-items: center;
  694. }
  695. </style>