onlineCloudRules.vue 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523
  1. <template>
  2. <div class="m-container">
  3. <div class="m-core">
  4. <el-form :inline="true" :model="form" ref="form">
  5. <el-alert
  6. style="margin: 10px 0"
  7. title="云教室考勤规则"
  8. :closable="false"
  9. type="info"
  10. >
  11. </el-alert>
  12. <p class="subtitle">迟到:</p>
  13. <el-row>
  14. <el-form-item
  15. prop="159"
  16. :rules="[
  17. {
  18. required: true,
  19. message: '请输入时间',
  20. trigger: 'blur',
  21. },
  22. {
  23. required: false,
  24. pattern: /^[1-9][0-9]*$/,
  25. message: '请输入正确的时间',
  26. },
  27. { validator: this.validateMin, trigger: 'blur' },
  28. ]"
  29. >
  30. <span style="color: #f56c6c; margin-right: 4px">*</span>
  31. 课程开始前
  32. <el-input v-model="form['159']" placeholder="请输入时间">
  33. <template slot="append">分钟</template>
  34. </el-input>
  35. </el-form-item>
  36. <el-form-item
  37. prop="162"
  38. :rules="[
  39. {
  40. required: false,
  41. message: '请输入时间',
  42. trigger: 'blur',
  43. },
  44. {
  45. required: false,
  46. pattern: /^[1-9][0-9]*$/,
  47. message: '请输入正确的时间',
  48. },
  49. ]"
  50. >
  51. <!-- <span style="color: #f56c6c; margin-right: 4px">*</span> -->
  52. 至课程开始后
  53. <el-input v-model="form['162']" placeholder="请输入时间">
  54. <template slot="append">分钟</template>
  55. </el-input>
  56. </el-form-item>
  57. <el-form-item
  58. prop="163"
  59. :rules="[
  60. {
  61. required: false,
  62. pattern:
  63. /(^[1-9]([0-9]+)?(\.[0-9]{1,2})?$)|(^(0){1}$)|(^[0-9]\.[0-9]([0-9])?$)/,
  64. message: '请输入正确的金额',
  65. },
  66. ]"
  67. >
  68. 以前进入云教室,扣减课酬
  69. <el-input
  70. v-model="form['163']"
  71. placeholder="请输入金额"
  72. class="chiose"
  73. >
  74. <template slot="append">
  75. <el-select class="append" v-model.trim="form['164']">
  76. <el-option label="元" value="1"> </el-option>
  77. <el-option label="%" value="2"> </el-option>
  78. </el-select>
  79. </template>
  80. </el-input>。
  81. </el-form-item>
  82. </el-row>
  83. <p class="example" v-if="form['159']">
  84. 例:
  85. <span style="color: #f56c6c; margin-right: 4px">12:00:00</span>
  86. 开始的课程,最早
  87. <span style="color: #f56c6c; margin-right: 4px">{{
  88. reduceFormMinute("12:00:00", forwardTime)
  89. }}</span
  90. >能进入云教室,
  91. <span style="color: #f56c6c; margin-right: 4px">{{
  92. reduceFormMinuteAddS("12:00:00", form["159"])
  93. }}</span
  94. >到
  95. <span style="color: #f56c6c; margin-right: 4px">{{
  96. addFormMinute("12:00:00", form["162"])
  97. }}</span
  98. >为迟到时间范围。
  99. </p>
  100. <p class="subtitle">旷课:</p>
  101. <el-row>
  102. <el-form-item prop="162">
  103. 课程开始
  104. <el-input v-model="form['162']" placeholder="请输入时间" disabled>
  105. <template slot="append">分钟</template>
  106. </el-input>
  107. </el-form-item>
  108. <el-form-item
  109. prop="166"
  110. :rules="[
  111. {
  112. required: false,
  113. pattern: /^[1-9][0-9]*$/,
  114. message: '请输入正确的距离',
  115. },
  116. ]"
  117. >
  118. 后进入云教室,扣减课酬
  119. <el-input
  120. v-model="form['166']"
  121. placeholder="请输入距离"
  122. class="chiose"
  123. >
  124. <template slot="append">
  125. <el-select class="append" v-model.trim="form['167']">
  126. <el-option label="元" value="1"> </el-option>
  127. <el-option label="%" value="2"> </el-option>
  128. </el-select>
  129. </template>
  130. </el-input>。
  131. </el-form-item>
  132. </el-row>
  133. <p class="example" v-if="form['162']">
  134. 例:
  135. <span style="color: #f56c6c; margin-right: 4px">12:00:00</span>
  136. 开始的课程
  137. <span style="color: #f56c6c; margin-right: 4px">{{
  138. addFormMinuteAddS("12:00:00", form["162"])
  139. }}</span>
  140. 以后进入云教室为旷课。
  141. </p>
  142. <p class="subtitle">未签到:</p>
  143. <el-row>
  144. <el-form-item
  145. prop="168"
  146. :rules="[
  147. {
  148. required: false,
  149. pattern:
  150. /(^[1-9]([0-9]+)?(\.[0-9]{1,2})?$)|(^(0){1}$)|(^[0-9]\.[0-9]([0-9])?$)/,
  151. message: '请输入正确的金额',
  152. },
  153. ]"
  154. >
  155. 老师未签到扣减课酬
  156. <el-input
  157. v-model="form['168']"
  158. placeholder="请输入金额"
  159. class="chiose"
  160. >
  161. <template slot="append">
  162. <el-select class="append" v-model.trim="form['169']">
  163. <el-option label="元" value="1"> </el-option>
  164. <el-option label="%" value="2"> </el-option>
  165. </el-select>
  166. </template>
  167. </el-input>。
  168. </el-form-item>
  169. </el-row>
  170. <p class="subtitle">异常签退:</p>
  171. <el-row>
  172. <el-form-item
  173. prop="173"
  174. :rules="[
  175. {
  176. required: false,
  177. message: '请输入时间',
  178. trigger: 'blur',
  179. },
  180. {
  181. required: false,
  182. pattern: /^[1-9][0-9]*$/,
  183. message: '请输入正确的时间',
  184. },
  185. ]"
  186. >
  187. <!-- <span style="color: #f56c6c; margin-right: 4px">*</span> -->
  188. 课程结束前
  189. <el-input v-model="form['173']" placeholder="请输入时间">
  190. <template slot="append">分钟</template>
  191. </el-input>
  192. </el-form-item>
  193. <el-form-item
  194. prop="171"
  195. :rules="[
  196. {
  197. required: false,
  198. pattern:
  199. /(^[1-9]([0-9]+)?(\.[0-9]{1,2})?$)|(^(0){1}$)|(^[0-9]\.[0-9]([0-9])?$)/,
  200. message: '请输入正确的金额',
  201. },
  202. ]"
  203. >
  204. 以后到课程结束前退出云教室,扣减课酬
  205. <el-input
  206. v-model="form['171']"
  207. placeholder="请输入金额"
  208. class="chiose"
  209. >
  210. <template slot="append">
  211. <el-select class="append" v-model.trim="form['172']">
  212. <el-option label="元" value="1"> </el-option>
  213. <el-option label="%" value="2"> </el-option>
  214. </el-select>
  215. </template>
  216. </el-input>。
  217. </el-form-item>
  218. </el-row>
  219. <p class="example" v-if="form['173']">
  220. 例:
  221. <span style="color: #f56c6c; margin-right: 4px">13:00:00</span>
  222. 结束的课程
  223. <span style="color: #f56c6c; margin-right: 4px">{{
  224. reduceFormMinute("13:00:00", form["173"])
  225. }}</span
  226. >到
  227. <span style="color: #f56c6c; margin-right: 4px">{{
  228. "12:59:59"
  229. }}</span>
  230. 为异常签退时间范围。
  231. </p>
  232. <p class="subtitle">早退:</p>
  233. <el-row>
  234. <el-form-item prop="173">
  235. <!-- <span style="color: #f56c6c; margin-right: 4px">*</span> -->
  236. 早于课程结束前
  237. <el-input disabled v-model="form['173']" placeholder="请输入时间">
  238. <template slot="append">分钟</template>
  239. </el-input>
  240. </el-form-item>
  241. <el-form-item
  242. prop="174"
  243. :rules="[
  244. {
  245. required: false,
  246. pattern:
  247. /(^[1-9]([0-9]+)?(\.[0-9]{1,2})?$)|(^(0){1}$)|(^[0-9]\.[0-9]([0-9])?$)/,
  248. message: '请输入正确的金额',
  249. },
  250. ]"
  251. >
  252. 前退出云教室,扣减课酬
  253. <el-input
  254. v-model="form['174']"
  255. placeholder="请输入金额"
  256. class="chiose"
  257. >
  258. <template slot="append">
  259. <el-select class="append" v-model.trim="form['175']">
  260. <el-option label="元" value="1"> </el-option>
  261. <el-option label="%" value="2"> </el-option>
  262. </el-select>
  263. </template>
  264. </el-input>。
  265. </el-form-item>
  266. </el-row>
  267. <p class="example" v-if="form['173']">
  268. 例:
  269. <span style="color: #f56c6c; margin-right: 4px">13:00:00</span>
  270. 结束的课程
  271. <span style="color: #f56c6c; margin-right: 4px">{{
  272. reduceFormMinuteMS("13:00:00", form["173"])
  273. }}</span
  274. >之前退出云教室为早退。
  275. </p>
  276. <p class="subtitle">未签退:</p>
  277. <el-row>
  278. <el-form-item
  279. prop="176"
  280. :rules="[
  281. {
  282. required: false,
  283. pattern:
  284. /(^[1-9]([0-9]+)?(\.[0-9]{1,2})?$)|(^(0){1}$)|(^[0-9]\.[0-9]([0-9])?$)/,
  285. message: '请输入正确的金额',
  286. },
  287. ]"
  288. >
  289. 老师未签退扣减课酬
  290. <el-input
  291. v-model="form['176']"
  292. placeholder="请输入金额"
  293. class="chiose"
  294. >
  295. <template slot="append">
  296. <el-select class="append" v-model.trim="form['177']">
  297. <el-option label="元" value="1"> </el-option>
  298. <el-option label="%" value="2"> </el-option>
  299. </el-select>
  300. </template>
  301. </el-input>。
  302. </el-form-item>
  303. </el-row>
  304. <el-alert
  305. style="margin: 10px 0"
  306. title="云教室连堂课"
  307. :closable="false"
  308. type="info"
  309. >
  310. </el-alert>
  311. <p class="subtitle">
  312. 云教室连堂课:
  313. <el-tooltip placement="top" popper-class="mTooltip">
  314. <div slot="content">
  315. <p style="color: #fff">
  316. 1.同一班级中,两节课的时间间隔在N分钟之内视为连堂课。
  317. </p>
  318. <p style="color: #fff">
  319. 2.连堂课仅需在第一节课正常签到、最后一节课正常签退,课程中间无需签到签退。
  320. </p>
  321. </div>
  322. <i
  323. class="el-icon-question micon el-tooltip"
  324. style="font-size: 18px; color: #f56c6c"
  325. ></i>
  326. </el-tooltip>
  327. </p>
  328. <el-row>
  329. <el-form-item
  330. prop="50"
  331. :rules="[
  332. {
  333. required: false,
  334. pattern: /^[1-9][0-9]*$/,
  335. message: '请输入正确的时间',
  336. },
  337. ]"
  338. >
  339. 云教室课程间隔<el-input
  340. v-model="form['50']"
  341. placeholder="请输入时间"
  342. >
  343. <template slot="append">分钟</template>
  344. </el-input>
  345. 以内视为连堂课。
  346. </el-form-item>
  347. </el-row>
  348. </el-form>
  349. </div>
  350. <el-button
  351. type="primary"
  352. @click="save"
  353. class="saveBtn"
  354. v-permission="'sysTenantConfig/batchUpSet_onlineCloudRules'"
  355. v-if="!isPlatform"
  356. >保存</el-button
  357. >
  358. <el-button
  359. type="primary"
  360. @click="save"
  361. class="saveBtn"
  362. v-permission="'sysConfig/batchUpdate_onlineCloudRules'"
  363. v-else
  364. >保存</el-button
  365. >
  366. </div>
  367. </template>
  368. <script>
  369. import { getSysTenantConfig, setSysTenantConfig } from "../api";
  370. import { sysConfigList, sysConfigUpdate } from "@/api/generalSettings"; // 平台的修改和查
  371. import {
  372. addFormMinute,
  373. addFormMinuteAddS,
  374. reduceFormMinute,
  375. reduceFormMinuteAddS,
  376. addFormMinuteMS,
  377. reduceFormMinuteMS,
  378. } from "@/utils/date";
  379. export default {
  380. props: ["isPlatform"],
  381. data() {
  382. return {
  383. form: {},
  384. questionList: [],
  385. rulesVisiable: false,
  386. forwardTime: 5,
  387. };
  388. },
  389. async mounted() {
  390. this.getRules();
  391. },
  392. methods: {
  393. getRules() {
  394. if (this.isPlatform) {
  395. this.getPlatformRules();
  396. } else {
  397. this.getInstitutionRules();
  398. }
  399. },
  400. async getPlatformRules() {
  401. try {
  402. const res = await sysConfigList({ group: "ONLINE" });
  403. const forwardRes = await sysConfigList({ group: "DAYA_BASIC" });
  404. forwardRes.data.forEach((item) => {
  405. if (item.id == "203") {
  406. this.forwardTime = item.paranValue;
  407. }
  408. });
  409. res.data.forEach((item) => {
  410. // this.form[item.paramName] = item.paranValue
  411. this.$set(this.form, item.id, item.paranValue);
  412. });
  413. // this.$forceUpdate()
  414. // console.log(this.forwardTime);
  415. } catch (e) {
  416. console.log(e);
  417. }
  418. },
  419. async getInstitutionRules() {
  420. try {
  421. const res = await getSysTenantConfig({ group: "ONLINE" });
  422. const forwardRes = await getSysTenantConfig({ group: "DAYA_BASIC" });
  423. forwardRes.data.forEach((item) => {
  424. if (item.id == "203") {
  425. this.forwardTime = item.paranValue;
  426. }
  427. });
  428. console.log(this.forwardTime);
  429. res.data.forEach((item) => {
  430. // this.form[item.paramName] = item.paranValue
  431. this.$set(this.form, item.id, item.paranValue);
  432. });
  433. // this.$forceUpdate()
  434. } catch (e) {
  435. console.log(e);
  436. }
  437. },
  438. savePlatform() {
  439. this.$refs.form.validate(async (valid) => {
  440. if (valid) {
  441. let param = [];
  442. for (let i in this.form) {
  443. param.push({
  444. id: i,
  445. paranValue: this.form[i],
  446. });
  447. }
  448. try {
  449. const res = await sysConfigUpdate(param);
  450. this.$message.success("保存成功");
  451. this.getRules();
  452. } catch (e) {
  453. console.log(e);
  454. }
  455. }
  456. });
  457. },
  458. saveInstitution() {
  459. this.$refs.form.validate(async (valid) => {
  460. if (valid) {
  461. let param = [];
  462. for (let i in this.form) {
  463. param.push({
  464. id: i,
  465. paranValue: this.form[i],
  466. });
  467. }
  468. try {
  469. const res = await setSysTenantConfig(param);
  470. this.$message.success("保存成功");
  471. this.getRules();
  472. } catch (e) {
  473. console.log(e);
  474. }
  475. }
  476. });
  477. },
  478. save() {
  479. if (this.isPlatform) {
  480. this.savePlatform();
  481. } else {
  482. this.saveInstitution();
  483. }
  484. },
  485. validateMin(rule, value, callback) {
  486. const one = Number(value);
  487. const max = Number(this.forwardTime);
  488. if (!max || one < max) {
  489. return callback();
  490. }
  491. return callback(
  492. new Error(`最早可提前${this.forwardTime - 1}分钟进入教室`)
  493. );
  494. },
  495. addFormMinute(timerStr, time) {
  496. return addFormMinute(timerStr, time);
  497. },
  498. addFormMinuteAddS(timerStr, time) {
  499. return addFormMinuteAddS(timerStr, time);
  500. },
  501. reduceFormMinute(timerStr, time) {
  502. return reduceFormMinute(timerStr, time);
  503. },
  504. reduceFormMinuteAddS(timerStr, time) {
  505. return reduceFormMinuteAddS(timerStr, time);
  506. },
  507. addFormMinuteMS(timerStr, time) {
  508. return addFormMinuteMS(timerStr, time);
  509. },
  510. reduceFormMinuteMS(timerStr, time) {
  511. return reduceFormMinuteMS(timerStr, time);
  512. },
  513. },
  514. };
  515. </script>
  516. <style lang="scss" scoped>
  517. @import "../index.scss";
  518. </style>