courseEdit.vue 58 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441
  1. <template>
  2. <div class="context">
  3. <div class="panel">
  4. <div class="panel-body">
  5. <br>
  6. <el-page-header @back="goBack" content="课程管理">
  7. <br>
  8. </el-page-header>
  9. <span class="classNames">
  10. {{ title }} {{ ClassStateText }}
  11. </span>
  12. <br>
  13. <div class="panel_control">
  14. <el-row :gutter="20">
  15. <el-col :span="4">
  16. <em>会员名:</em>
  17. <el-input v-model="panel.name" placeholder="请输入会员名"></el-input>
  18. </el-col>
  19. <el-col :span="4">
  20. <em>手机号:</em>
  21. <el-input v-model="panel.phone" placeholder="请输入手机号" type="number"></el-input>
  22. </el-col>
  23. <el-col :span="4">
  24. <el-button size="" type="primary" @click="query" plain :disabled="serachBtnStatus"
  25. :loading="serachBtnStatus">查询
  26. </el-button>
  27. </el-col>
  28. </el-row>
  29. </div>
  30. </div>
  31. <div class="change">
  32. <el-button @click="confirmBegin" type="primary" :disabled="BeginState" :loading="BeginState"
  33. v-if="FinishClass == 3">确认上课
  34. </el-button>
  35. <el-button @click="addFinish" type="primary" v-if="FinishClass == 2">确认下课</el-button>
  36. <el-button @click="addFinishMember">添加上课会员</el-button>
  37. <el-button @click="addTempMember" type="warning">添加临时会员</el-button>
  38. </div>
  39. </div>
  40. <div class="table">
  41. <el-table
  42. :data="tableData"
  43. border
  44. is-horizontal-resize
  45. :default-sort="{prop: 'data', order: 'descending'}"
  46. element-loading-background="rgba(0, 0, 0, 0.8)"
  47. class=""
  48. :row-class-name="tableRowClassName"
  49. >
  50. >
  51. <el-table-column
  52. type="index"
  53. label="排名"
  54. align="center"
  55. width="50">
  56. </el-table-column>
  57. <el-table-column
  58. prop="head"
  59. label="头像"
  60. width="75"
  61. align="center"
  62. sortable
  63. >
  64. <template slot-scope="scope">
  65. <div class="demo-image__preview" v-if="scope.row.Head">
  66. <el-image
  67. style="width: 25px; height: 25px"
  68. :src="scope.row.Head"
  69. :preview-src-list="[scope.row.Head]"
  70. >
  71. </el-image>
  72. </div>
  73. <img src="../assets/img/nav/head.png" alt="" v-else width="25px" height="25px">
  74. <!--<img class="head" :src="scope.row.Head" alt="" height="51" width="51" v-if="scope.row.Head">-->
  75. <!--<img class="head" src="../assets/img/nav/head.png" height="51" width="51" v-else/>-->
  76. </template>
  77. </el-table-column>
  78. <el-table-column
  79. prop="Name"
  80. label="会员名"
  81. width="90"
  82. sortable
  83. >
  84. </el-table-column>
  85. <el-table-column
  86. prop="Phone"
  87. label="手机号"
  88. width="120"
  89. sortable
  90. >
  91. </el-table-column>
  92. <el-table-column
  93. prop="ClassName"
  94. label="课程"
  95. width="110"
  96. sortable
  97. >
  98. <template slot-scope="scope">
  99. <span class="lessons"
  100. :style="{ background:scope.row.ClassColor }">{{ scope.row.ClassName }}</span>
  101. </template>
  102. </el-table-column>
  103. <el-table-column
  104. prop="OrderTime"
  105. label="预约时间"
  106. :formatter="filterFmtDate"
  107. sortable
  108. >
  109. </el-table-column>
  110. <el-table-column
  111. prop="RemainTotalhour"
  112. label="剩余课时"
  113. width="110"
  114. sortable
  115. >
  116. </el-table-column>
  117. <el-table-column
  118. prop="group_no"
  119. label="队伍"
  120. width="140"
  121. v-if="ClassType == 2"
  122. sortable
  123. >
  124. <template slot-scope="scope">
  125. <!--正式会员-->
  126. <div v-if="scope.row.IsTmpUser != 1">
  127. <el-select v-model="scope.row.group_no"
  128. filterable
  129. :disabled="FinishClass == 2 && scope.row.DpId != 0"
  130. placeholder="请选团队">
  131. <el-option
  132. v-for="item in panel.groupList"
  133. :key="item.value"
  134. :label="item.label"
  135. :value="item.value">
  136. </el-option>
  137. </el-select>
  138. </div>
  139. <div v-if="scope.row.IsTmpUser == 1">
  140. <el-select v-model="scope.row.group_no"
  141. filterable
  142. :disabled="FinishClass == 2 && scope.row.HrSubmitFlag == 1"
  143. placeholder="请选团队">
  144. <el-option
  145. v-for="item in panel.groupList"
  146. :key="item.value"
  147. :label="item.label"
  148. :value="item.value">
  149. </el-option>
  150. </el-select>
  151. </div>
  152. </template>
  153. </el-table-column>
  154. <el-table-column
  155. prop="BindId"
  156. label="心率带"
  157. sortable
  158. >
  159. <template slot-scope="scope">
  160. <div v-if="scope.row.IsTmpUser != 1">
  161. <el-select v-model="scope.row.BindId"
  162. @change="bindSensorToUser(scope.row)"
  163. @focus="getSelectHrSensors(scope.row)"
  164. filterable
  165. v-if="!scope.row.BindId" placeholder="请选心率带">
  166. <el-option
  167. v-for="item in panel.bindList"
  168. :key="item.index"
  169. :label="item.label"
  170. :value="item.HrId">
  171. <!--私有的-->
  172. <span v-if="item.HrType == 1" style="background: #409eff;color: #fff">
  173. {{ item.label }}
  174. </span>
  175. <!--共有的-->
  176. <span v-else>
  177. {{ item.label }}
  178. </span>
  179. </el-option>
  180. </el-select>
  181. <el-button @click="takeBack(scope.row)" :type="scope.row.IsPrivate == 1 ?'primary':'danger'" v-if="scope.row.BindId"
  182. icon="el-icon-cpu">
  183. {{ scope.row.Sn }} {{scope.row.IsPrivate == 1 ? '私有':''}}
  184. 设备收回
  185. </el-button>
  186. </div>
  187. <div v-if="scope.row.IsTmpUser == 1">
  188. <!--临时会员-->
  189. <el-select v-model="scope.row.BindId"
  190. @change="bindSensorToTmepUser(scope.row)"
  191. @focus="getSelectHrSensors(scope.row)"
  192. filterable
  193. v-if="!scope.row.Sn" placeholder="请选心率带">
  194. <el-option
  195. v-for="item in panel.bindList"
  196. :key="item.index"
  197. :label="item.label"
  198. :value="item.HrId">
  199. </el-option>
  200. </el-select>
  201. <el-button @click="takeTempBack(scope.row)" type="danger" v-if="scope.row.Sn"
  202. icon="el-icon-cpu">
  203. {{ scope.row.Sn }}
  204. 临时设备收回
  205. </el-button>
  206. </div>
  207. </template>
  208. </el-table-column>
  209. <el-table-column
  210. prop="Status"
  211. label="状态"
  212. width="110"
  213. sortable
  214. >
  215. <template slot-scope="scope">
  216. <span v-if="scope.row.Status == 1">预约上课 </span>
  217. <span v-if="scope.row.Status == 2">预约未到</span>
  218. <span v-if="scope.row.Status == 3">上课未预约</span>
  219. </template>
  220. </el-table-column>
  221. <el-table-column
  222. prop="Status"
  223. label="操作"
  224. >
  225. <template slot-scope="scope">
  226. <div v-if="scope.row.DpId <= 0">
  227. <el-button type="primary" round v-if="scope.row.Status == 1 " size="mini"
  228. @click="pauseRow(scope.row,2)">
  229. 预约未到
  230. </el-button>
  231. <el-button type="warning" round v-if="scope.row.Status == 2" size="mini"
  232. @click="pauseRow(scope.row,1)">
  233. 上课
  234. </el-button>
  235. <el-button type="danger" round v-if="scope.row.Status == 3" size="mini"
  236. @click="getClassOverDetailDel(scope.row)">
  237. 删除
  238. </el-button>
  239. <em v-if="FinishClass != 3">
  240. <el-button type="warning" round
  241. v-if="scope.row.Status == 1 || scope.row.Status == 3 && FinishClass == 2 "
  242. size="mini"
  243. :disabled="scope.row.HrSubmitFlag == 1"
  244. @click="getClassDetailAndSnAdd(scope.row)">
  245. 提交
  246. </el-button>
  247. </em>
  248. </div>
  249. <div v-if=" scope.row.IsTmpUser == 1">
  250. <el-button type="danger" round v-if="scope.row.Status == 3 && scope.row.HrSubmitFlag != 1 "
  251. size="mini"
  252. @click="getClassOverTempDel(scope.row)">
  253. 删除
  254. </el-button>
  255. &nbsp;
  256. <span v-if="FinishClass != 3 && scope.row.IsTmpUser == 1">
  257. <el-button type="warning" round
  258. v-if="scope.row.Status == 1 || scope.row.Status == 3 && FinishClass == 2 "
  259. size="mini"
  260. :disabled="scope.row.HrSubmitFlag == 1"
  261. @click="getClassDetailAndSnAdd(scope.row)">
  262. 提交
  263. </el-button>
  264. </span>
  265. </div>
  266. </template>
  267. </el-table-column>
  268. </el-table>
  269. <br>
  270. <el-pagination
  271. background
  272. :total="pageination.total"
  273. :page-size="pageination.pageItem"
  274. @current-change="pageChange"
  275. ></el-pagination>
  276. </div>
  277. <el-dialog title="添加上课会员" :visible.sync="dialogVisible" width="720px">
  278. <div class="dialogContent viplist">
  279. <span class="blueTitle">{{ ClassName }} {{ BeginTime }}</span>
  280. <div>
  281. <el-transfer filterable v-model="dialogValue" :data="form.dialogdata"
  282. :titles="['会员列表', '已添加会员']"></el-transfer>
  283. </div>
  284. </div>
  285. <div class="dialogFooter">
  286. <el-button type="primary" size="small" :disabled="BtnConfirmMember" :loading="BtnConfirmMember"
  287. @click="confirmMember">确定
  288. </el-button>
  289. <el-button size="small" @click="dialogVisible = false">取消</el-button>
  290. </div>
  291. </el-dialog>
  292. <el-dialog title="添加临时会员" :visible.sync="dialogTempVisible" width="720px">
  293. <div class="dialogContent viplist">
  294. <span class="blueTitle">{{ ClassName }} {{ BeginTime }}</span>
  295. <div>
  296. <el-transfer filterable v-model="dialogTempValue" :data="form.dialogTempdata"
  297. :titles="['临时会员', '已添加会员']"></el-transfer>
  298. </div>
  299. </div>
  300. <div class="dialogFooter">
  301. <el-button type="primary" size="small" :disabled="BtnTempConfirmMember" :loading="BtnTempConfirmMember"
  302. @click="TempconfirmMember">确定
  303. </el-button>
  304. <el-button size="small" @click="dialogTempVisible = false">取消</el-button>
  305. </div>
  306. </el-dialog>
  307. <el-dialog title="确认下课" :visible.sync="dialogFinishVisible" width="650px">
  308. <div class="dialogContent">
  309. <span class="blueTitle">{{ ClassName }} {{ BeginTime }}</span>
  310. <div>
  311. <!--<el-transfer filterable v-model="dialogCoachValue" :data="form.dialogCoachdata"-->
  312. <!--:titles="['教练列表', '已添加教练']"></el-transfer>-->
  313. <p>
  314. 您是否确认下课?
  315. <br>
  316. <br>
  317. (确定后将不可再编辑上课学员的信息)
  318. </p>
  319. <br>
  320. </div>
  321. </div>
  322. <div class="dialogFooter">
  323. <el-button type="primary" size="small" :disabled="BtnConfirmClassFinish"
  324. :loading="BtnConfirmClassFinish" @click="confirmClassFinish">确定
  325. </el-button>
  326. <el-button size="small" @click="dialogFinishVisible = false">取消</el-button>
  327. </div>
  328. </el-dialog>
  329. </div>
  330. </template>
  331. <script>
  332. import Global from '../Global.js'
  333. import {
  334. ClassDetailQuery,
  335. ClassOverDetailListQuery,
  336. VipUserSimpleQuery,
  337. ClassOverDetailAdd,
  338. ClassDetailAndSnAdd,
  339. ClassOverDetailStatusEdit,
  340. ClassOverDetailDel,
  341. SelectHrSensors,
  342. BindHrSensorsToUser,
  343. UnBindHrSensorsToUser,
  344. ClassStartConfirm,
  345. ShopManagerListQuery,
  346. ClassOverConfirm,
  347. TmpUserQuery,
  348. ClassOverTmpDetailAdd,
  349. ClassTmpUserOverDetailDel,
  350. BindHrSensorsToTempUser,
  351. } from "../api/getApiRes";
  352. let qs = require('qs');
  353. export default {
  354. data() {
  355. return {
  356. serachBtnStatus: false,
  357. BtnConfirmClassFinish: false,
  358. BtnConfirmMember: false,
  359. BtnTempConfirmMember: false,
  360. BeginState: true,//确认上课
  361. tableData: [],
  362. title: '',
  363. ClassType: 0,
  364. PkNum: 0,
  365. ClassStateText: '',
  366. FinishClass: 0,//当前上课状态 1已下课 2已上课 3准备上课 FinishClass
  367. dialogVisible: false,//添加下课会员
  368. dialogTempVisible: false,//添加临时会员
  369. dialogFinishVisible: false,//确认下课dialog
  370. dialogLesson: false,//课时调整
  371. dialogGift: false,//赠送课时调整
  372. dialogExpTime: false,//有效期调整
  373. dialogLessonTable: false,//会员课程
  374. dialogTitle: '新增会员',
  375. current: getNowDate(),
  376. dialogValue: [],
  377. dialogTempValue: [],
  378. dialogCoachValue: [],
  379. BeginTime: '',
  380. ClassName: '',
  381. // panel 配置项目
  382. panel: {
  383. name: '',
  384. phone: '',
  385. usercode: '',
  386. username: '',
  387. compname: '',
  388. keyword: '',
  389. USERCODE: '',
  390. endType: '',
  391. taskstatus: 99,
  392. draw: 1,
  393. start: 0,
  394. recordsTotal: 0,
  395. tableData: [],
  396. allTableData: [],
  397. limit: '10',
  398. multipleSort: false,
  399. loading: false,
  400. fileList: [],
  401. bindList: [
  402. {
  403. value: 0,
  404. HrId: 0,
  405. label: "请选择心率带",
  406. InVenueNo: 0,
  407. index: 0
  408. }
  409. ],
  410. groupList: [
  411. {label: '红队', value: 1},
  412. {label: '蓝队', value: 2},
  413. {label: '黄队', value: 3}
  414. ],
  415. multipleSelection: [],
  416. detectedmac: '',
  417. BeginTime: '',
  418. ClassName: '',
  419. options: [
  420. {value: 99, label: '全部'},
  421. {value: 1, label: '进行中'},
  422. {value: 2, label: '已完成'},
  423. ],
  424. endTypeOptions: [
  425. {value: 99, label: '全部'},
  426. {value: 30, label: '近一个月'},
  427. {value: 7, label: '近一周'},
  428. {value: 1, label: '当日'},
  429. ],
  430. time1: globalBt(),
  431. },
  432. form: {
  433. name: '',
  434. userCode: '',
  435. coach: '',
  436. coachOptions: [],
  437. shopId: '',
  438. memberType: 1,
  439. lesson: 1,
  440. gift: 1,
  441. btnType: 0,//0新建,1编辑编辑
  442. memo: '',
  443. expTime: '',
  444. dialogdata: [],//穿梭待选
  445. dialogTempdata: [],//穿梭待选
  446. dialogValue: [],//穿梭已选
  447. dialogCoachdata: [],//穿梭已选
  448. },
  449. memberTypes: [
  450. {value: 1, label: '年会员'},
  451. {value: 2, label: '充值会员'},
  452. ],
  453. pageination: {
  454. pageItem: 100,
  455. pageoptions: pageOptions(),
  456. total: 100,
  457. pageIndex: 1,
  458. },
  459. }
  460. },
  461. mounted() {
  462. this.getTableQuery();
  463. // this.getSelectHrSensors();
  464. this.ClassType = this.$route.query.ClassType;
  465. this.PkNum = this.$route.query.PkNum;
  466. this.FinishClass = this.$route.query.FinishClass;
  467. this.title = this.$route.query.ClassName + ' ' + this.$route.query.BeginStr + '-' + this.$route.query.EndStr;
  468. },
  469. methods: {
  470. // 请选心率带
  471. bindSensorToUser(row) {
  472. let that = this;
  473. let obj = {};
  474. // 未到用户不能绑心率带
  475. if (row.Status == 2) {
  476. row.BindId = 0;
  477. that.$message.error("会员未到不能绑定心率带");
  478. return false
  479. }
  480. obj = this.panel.bindList.find((item) => {
  481. return item.HrId === row.BindId;
  482. });
  483. // let oldSn = row.BindId == 0 ? row.Sn : '';
  484. let oldSn = "";
  485. let param = {
  486. token: localStorage.token,
  487. shopId: localStorage.shopId,
  488. cfId: row.CfId,
  489. userId: row.UserId,
  490. sn: obj.Sn,
  491. hrId: row.BindId,
  492. };
  493. let postdata = qs.stringify(param);
  494. BindHrSensorsToUser(postdata).then(res => {
  495. let json = res;
  496. if (json.Code == 0) {
  497. that.$message({
  498. showClose: true,
  499. message: '心率带绑定成功!',
  500. type: 'success'
  501. });
  502. // table 重载
  503. that.getTableQuery();
  504. // 重置心率带可选列表
  505. // that.getSelectHrSensors();
  506. } else {
  507. that.$message.error(json.Memo + ' 错误码:' + json.Code);
  508. }
  509. })
  510. },
  511. // 临时会员绑定心率带
  512. bindSensorToTmepUser(row) {
  513. let that = this;
  514. let obj = {};
  515. obj = this.panel.bindList.find((item) => {
  516. return item.HrId === row.BindId;
  517. });
  518. // let oldSn = row.BindId == 0 ? row.Sn : '';
  519. let param = {
  520. token: localStorage.token,
  521. sn: obj.Sn,
  522. cfId: row.CfId,
  523. userId: row.UserId,
  524. shopId: localStorage.shopId,
  525. hrId: row.BindId,
  526. };
  527. let postdata = qs.stringify(param);
  528. BindHrSensorsToTempUser(postdata).then(res => {
  529. let json = res;
  530. if (json.Code == 0) {
  531. that.$message({
  532. showClose: true,
  533. message: '临时会员心率带绑定成功!',
  534. type: 'success'
  535. });
  536. // table 重载
  537. that.getTableQuery();
  538. // 重置心率带可选列表
  539. // that.getSelectHrSensors();
  540. } else {
  541. that.$message.error(json.Memo + ' 错误码:' + json.Code);
  542. }
  543. })
  544. },
  545. // 设备回收
  546. takeBack(row) {
  547. let that = this;
  548. let text = "";
  549. if (this.$route.query.FinishClass == 2) {
  550. text = '当前上课种是否回收用户' + row.Name + '的心率设备?(回收将重置用户的上课成绩)'
  551. } else {
  552. text = '是否回收用户' + row.Name + '的心率设备?'
  553. }
  554. this.$confirm(text, '回收操作', {
  555. confirmButtonText: '确定',
  556. cancelButtonText: '取消',
  557. type: 'warning'
  558. }).then(() => {
  559. let param = {
  560. token: localStorage.token,
  561. cfId: row.CfId,
  562. bindId: row.BindId,
  563. userId: row.UserId,
  564. sn: row.Sn,
  565. };
  566. let postdata = qs.stringify(param);
  567. UnBindHrSensorsToUser(postdata).then(res => {
  568. let json = res;
  569. if (json.Code == 0) {
  570. that.$message({
  571. showClose: true,
  572. message: '心率带' + row.Sn + '回收成功!',
  573. type: 'success'
  574. });
  575. // table 重载
  576. that.getTableQuery();
  577. // 重置心率带可选列表
  578. // that.getSelectHrSensors();
  579. } else {
  580. that.$message.error(json.Memo + ' 错误码:' + json.Code);
  581. }
  582. })
  583. }).catch(() => {
  584. this.$message({
  585. type: 'info',
  586. message: '已取消回收'
  587. });
  588. });
  589. },
  590. takeTempBack(row){
  591. let that = this;
  592. if(this.FinishClass == 2){
  593. that.$message.error('请删除临时会员后重新添加');
  594. }else{
  595. that.$message.error('临时会员无法替换心率带');
  596. }
  597. // let that = this;
  598. // let text = "";
  599. // if (this.$route.query.FinishClass == 2) {
  600. // text = '当前上课种是否回收用户' + row.Name + '的心率设备?(回收将重置用户的上课成绩)'
  601. // } else {
  602. // text = '是否回收用户' + row.Name + '的心率设备?'
  603. // }
  604. // this.$confirm(text, '回收操作', {
  605. // confirmButtonText: '确定',
  606. // cancelButtonText: '取消',
  607. // type: 'warning'
  608. // }).then(() => {
  609. // let param = {
  610. // token: localStorage.token,
  611. // cfId: row.CfId,
  612. // bindId: row.BindId,
  613. // userId: row.UserId,
  614. // sn: row.Sn,
  615. // };
  616. // let postdata = qs.stringify(param);
  617. // UnBindHrSensorsToUser(postdata).then(res => {
  618. // let json = res;
  619. // if (json.Code == 0) {
  620. // that.$message({
  621. // showClose: true,
  622. // message: '心率带' + row.Sn + '回收成功!',
  623. // type: 'success'
  624. // });
  625. // // table 重载
  626. // that.getTableQuery();
  627. // // 重置心率带可选列表
  628. // // that.getSelectHrSensors();
  629. // } else {
  630. // that.$message.error(json.Memo + ' 错误码:' + json.Code);
  631. // }
  632. // })
  633. // }).catch(() => {
  634. // this.$message({
  635. // type: 'info',
  636. // message: '已取消回收'
  637. // });
  638. // });
  639. },
  640. // 确认下课
  641. addFinish() {
  642. this.clearForm();
  643. // 重新获得教练名单
  644. this.getCoachOption();
  645. this.dialogFinishVisible = true;
  646. this.btnType = 0;
  647. this.dialogTitle = '确认下课'
  648. },
  649. // 获取教练选项
  650. getCoachOption() {
  651. let that = this;
  652. let param = {
  653. token: localStorage.token,
  654. name: this.panel.name,//
  655. phone: this.panel.phone,//
  656. shopId: localStorage.ShopId,//
  657. adminType: 4,//
  658. start: 1,//
  659. tableMax: 299,//
  660. };
  661. let postdata = qs.stringify(param);
  662. ShopManagerListQuery(postdata).then(res => {
  663. let json = res;
  664. if (json.Code == 0) {
  665. that.form.dialogCoachdata = turnResToOptionByUsers(json.Rs);
  666. } else {
  667. that.$message.error(json.Memo + ' 错误码:' + json.Code);
  668. }
  669. })
  670. },
  671. // 确认下课
  672. confirmClassFinish() {
  673. this.BtnConfirmClassFinish = true;
  674. let that = this;
  675. // checkNum
  676. let userlist = that.dialogCoachValue.toString();
  677. let param = {
  678. token: localStorage.token,
  679. stdId: this.$route.query.StdId,
  680. teacherList: userlist
  681. };
  682. let postdata = qs.stringify(param);
  683. // 下课记录详情添加
  684. ClassOverConfirm(postdata).then(res => {
  685. that.BtnConfirmClassFinish = false;
  686. let json = res;
  687. if (json.Code == 0) {
  688. // 关闭弹窗
  689. that.dialogFinishVisible = false;
  690. // 重载列表
  691. that.getTableQuery();
  692. that.$message({
  693. showClose: true,
  694. message: '当前课程已确认下课!',
  695. type: 'success'
  696. });
  697. // 返回下课列表
  698. // that.$router.push({path: '/finish'});
  699. this.$router.go(-1);
  700. } else {
  701. that.$message.error(json.Memo + ' 错误码:' + json.Code);
  702. }
  703. })
  704. },
  705. // 确认上课
  706. confirmBegin() {
  707. let that = this;
  708. // 没绑心率带不能开课,预约未到的不管他
  709. for (var i = 0; i < this.tableData.length; i++) {
  710. if (this.tableData[i].Sn == 0 && this.tableData[i].Status != 2) {
  711. that.$message.error("会员" + this.tableData[i].Name + '没绑心率带,不能开课');
  712. return false
  713. }
  714. }
  715. let duRs = [];
  716. // "sn":"10001",//心率带
  717. // "group_no":0,// 0不分队 1蓝队 2红队 3黄队
  718. // "begin_time":1605686788,//开始上课时间戳
  719. // "name":"张三",
  720. // "head":"http://192.168.0.2/lhs.png",
  721. // "static_hr":100,
  722. // "sex":1,//性别
  723. // "height":176,
  724. // "age":40,
  725. // "user_id":50,
  726. // "weight":1000
  727. let row;
  728. let begin_time = parseInt(new Date().valueOf() / 1000);
  729. // 过滤未到会员
  730. let curPeolle = this.tableData.filter(item => {
  731. if (item.Status != 2) {
  732. return item
  733. }
  734. });
  735. // 拼装上课人员信息
  736. for (var i = 0; i < curPeolle.length; i++) {
  737. row = curPeolle[i];
  738. // 过滤预约未到
  739. duRs[i] = {
  740. sn: row.Sn,
  741. group_no: row.group_no,//0不分队 1蓝队 2红队 3黄队
  742. begin_time: begin_time,
  743. name: row.Name,
  744. head: row.Head,
  745. static_hr: row.StaticHr,
  746. sex: row.Sex,
  747. height: row.Height,
  748. age: row.Age,
  749. user_id: row.UserId,
  750. weight: row.Weight,
  751. user_md5: row.UserMd5,
  752. birthday: row.Birthday,
  753. is_tmp_user: row.IsTmpUser,
  754. is_private: row.IsPrivate,
  755. }
  756. }
  757. // 确认上课
  758. this.getClassStartConfirm(duRs);
  759. },
  760. // 确认上课
  761. getClassStartConfirm(duRs) {
  762. duRs = '{"Rs":' + JSON.stringify(duRs).toString() + '}';
  763. let that = this;
  764. that.BeginState = true;
  765. let param = {
  766. token: localStorage.token,
  767. stdId: this.$route.query.StdId,
  768. duRs: duRs
  769. };
  770. let postdata = qs.stringify(param);
  771. ClassStartConfirm(postdata).then(res => {
  772. let json = res;
  773. that.BeginState = false;
  774. if (json.Code == 0) {
  775. that.$message({
  776. showClose: true,
  777. message: '确认上课成功!',
  778. type: 'success'
  779. });
  780. // 返回课程管理
  781. that.$router.push({
  782. path: '/courses', query: {}
  783. });
  784. // that.FinishClass = 2;
  785. // that.getTableQuery();
  786. } else {
  787. that.$message.error(json.Memo + ' 错误码:' + json.Code);
  788. }
  789. })
  790. },
  791. // 添加下课会员
  792. addFinishMember() {
  793. let that = this;
  794. this.clearForm();
  795. this.getClassVipuserQuery();
  796. this.dialogValue = [];
  797. // 遍历已添加的上课会员,回填穿梭框
  798. let std = [];
  799. if (this.tableData) {
  800. this.tableData.map(function (item) {
  801. if(item.IsTmpUser != 1){
  802. std.push(item.UserId)
  803. }
  804. })
  805. }
  806. that.dialogValue = std;
  807. this.dialogVisible = true
  808. },
  809. // 获取临时会员列表
  810. getTmpUserQuery() {
  811. let that = this;
  812. let param = {
  813. token: localStorage.token,
  814. start: 1,
  815. tableMax: 999,
  816. };
  817. let postdata = qs.stringify(param);
  818. TmpUserQuery(postdata).then(res => {
  819. let json = res;
  820. if (json.Code == 0) {
  821. that.form.dialogTempdata = turnResToOptionByTempUser(json.Rs);
  822. } else {
  823. that.$message.error(json.Memo);
  824. }
  825. })
  826. },
  827. // 添加临时会员
  828. addTempMember() {
  829. let that = this;
  830. this.clearForm();
  831. // this.getClassVipuserQuery();
  832. this.getTmpUserQuery();
  833. this.dialogTempValue = [];
  834. let std = [];
  835. if (this.tableData) {
  836. this.tableData.map(function (item) {
  837. if(item.IsTmpUser == 1){
  838. std.push(item.UserId)
  839. }
  840. })
  841. }
  842. that.dialogTempValue = std;
  843. this.dialogTempVisible = true
  844. },
  845. clearForm() {
  846. // clear
  847. this.form.name = '';
  848. this.form.userCode = '';
  849. this.form.shopId = '';
  850. this.dialogCoachValue = [];
  851. },
  852. // 获取本课程下的会员列表
  853. getClassVipuserQuery() {
  854. let that = this;
  855. let param = {
  856. token: localStorage.token,
  857. // classId: this.$route.query.classId,
  858. };
  859. let postdata = qs.stringify(param);
  860. // ClassVipuserQuery(postdata).then(res => {
  861. VipUserSimpleQuery(postdata).then(res => {
  862. let json = res;
  863. if (json.Code == 0) {
  864. // that.form.dialogdata = turnResToOptionByViper(json.Rs);
  865. that.form.dialogdata = turnResToOptionBySimViper(json.Rs);
  866. } else {
  867. that.$message.error(json.Memo + ' 错误码:' + json.Code);
  868. }
  869. })
  870. },
  871. // 确认提交上课会员
  872. confirmMember() {
  873. let that = this;
  874. if (that.BtnConfirmMember == true) return false;
  875. that.BtnConfirmMember = true;
  876. // checkNum
  877. let userlist = that.dialogValue.toString();
  878. let param = {
  879. token: localStorage.token,
  880. stdId: this.$route.query.StdId,
  881. userlist: userlist
  882. };
  883. let postdata = qs.stringify(param);
  884. // 下课记录详情添加
  885. ClassOverDetailAdd(postdata).then(res => {
  886. let json = res;
  887. if (json.Code == 0) {
  888. // 关闭弹窗
  889. that.dialogVisible = false;
  890. // 重载列表
  891. that.getTableQuery();
  892. that.$message({
  893. showClose: true,
  894. message: '会员添加成功!',
  895. type: 'success'
  896. });
  897. that.BtnConfirmMember = false;
  898. } else {
  899. that.$message.error(json.Memo + ' 错误码:' + json.Code);
  900. that.BtnConfirmMember = false;
  901. }
  902. })
  903. }, // 确认提交临时会员
  904. TempconfirmMember() {
  905. let that = this;
  906. if (that.BtnTempConfirmMember == true) return false;
  907. that.BtnTempConfirmMember = true;
  908. // checkNum
  909. let userlist = that.dialogTempValue.toString();
  910. let param = {
  911. token: localStorage.token,
  912. stdId: this.$route.query.StdId,
  913. tmpuserlist: userlist
  914. };
  915. let postdata = qs.stringify(param);
  916. // 下课记录详情添加
  917. ClassOverTmpDetailAdd(postdata).then(res => {
  918. let json = res;
  919. if (json.Code == 0) {
  920. // 关闭弹窗
  921. that.dialogTempVisible = false;
  922. // 重载列表
  923. that.getTableQuery();
  924. that.$message({
  925. showClose: true,
  926. message: '会员添加成功!',
  927. type: 'success'
  928. });
  929. that.BtnTempConfirmMember = false;
  930. } else {
  931. that.$message.error(json.Memo + ' 错误码:' + json.Code);
  932. that.BtnTempConfirmMember = false;
  933. }
  934. })
  935. },
  936. pauseRow(row, status) {
  937. let that = this;
  938. let param = {
  939. token: localStorage.token,
  940. stdId: this.$route.query.StdId,
  941. cfId: row.CfId,
  942. status: status,
  943. };
  944. let postdata = qs.stringify(param);
  945. ClassOverDetailStatusEdit(postdata).then(res => {
  946. let json = res;
  947. if (json.Code == 0) {
  948. that.$message({
  949. showClose: true,
  950. message: '执行成功!',
  951. type: 'success'
  952. });
  953. // table 重载
  954. that.getTableQuery();
  955. } else {
  956. that.$message.error(json.Memo + ' 错误码:' + json.Code);
  957. }
  958. })
  959. },
  960. // 下课记录详情删除
  961. getClassOverDetailDel(row) {
  962. let that = this;
  963. let param = {
  964. token: localStorage.token,
  965. stdId: row.StdId,
  966. cfId: row.CfId,
  967. };
  968. this.$confirm('是否删除用户 ' + row.Name + '?', '提示', {
  969. confirmButtonText: '确定',
  970. cancelButtonText: '取消',
  971. type: 'warning'
  972. }).then(() => {
  973. let postdata = qs.stringify(param);
  974. ClassOverDetailDel(postdata).then(res => {
  975. let json = res;
  976. if (json.Code == 0) {
  977. that.$message({
  978. showClose: true,
  979. message: '当前学生上课记录已删除!',
  980. type: 'success'
  981. });
  982. that.getTableQuery();
  983. } else {
  984. that.$message.error(json.Memo + ' 错误码:' + json.Code);
  985. }
  986. })
  987. }).catch(() => {
  988. this.$message({
  989. type: 'info',
  990. message: '已取消删除'
  991. });
  992. });
  993. },
  994. // 下课记录临时会员删除
  995. getClassOverTempDel(row) {
  996. let that = this;
  997. let param = {
  998. token: localStorage.token,
  999. stdId: row.StdId,
  1000. tcfId: row.CfId,
  1001. };
  1002. this.$confirm('是否删除临时会员 ' + row.Name + '?', '提示', {
  1003. confirmButtonText: '确定',
  1004. cancelButtonText: '取消',
  1005. type: 'warning'
  1006. }).then(() => {
  1007. let postdata = qs.stringify(param);
  1008. ClassTmpUserOverDetailDel(postdata).then(res => {
  1009. let json = res;
  1010. if (json.Code == 0) {
  1011. that.$message({
  1012. showClose: true,
  1013. message: '当前临时会员上课记录已删除!',
  1014. type: 'success'
  1015. });
  1016. that.getTableQuery();
  1017. } else {
  1018. that.$message.error(json.Memo + ' 错误码:' + json.Code);
  1019. }
  1020. })
  1021. }).catch(() => {
  1022. this.$message({
  1023. type: 'info',
  1024. message: '已取消删除'
  1025. });
  1026. });
  1027. },
  1028. // 查询按钮
  1029. query() {
  1030. let that = this;
  1031. that.serachBtnStatus = true;
  1032. let totalTime = 2;
  1033. let clock = window.setInterval(() => {
  1034. totalTime--;
  1035. if (totalTime < 0) {
  1036. totalTime = 2;
  1037. that.serachBtnStatus = false;
  1038. }
  1039. }, 1000);
  1040. this.getTableQuery();
  1041. this.$message.success('查询完毕');
  1042. },
  1043. goBack() {
  1044. this.$router.push({
  1045. path: '/courses', query: {}
  1046. });
  1047. },
  1048. // 页面数据查询
  1049. getTableQuery() {
  1050. let that = this;
  1051. that.loading = true;
  1052. that.BeginState = true;
  1053. let param = {
  1054. token: localStorage.token,
  1055. stdId: this.$route.query.StdId,
  1056. start: 1,//
  1057. tableMax: 9999,//
  1058. };
  1059. let postdata = qs.stringify(param);
  1060. ClassOverDetailListQuery(postdata).then(res => {
  1061. let json = res;
  1062. if (json.Code == 0) {
  1063. that.loading = false;
  1064. if (json.Rs) {
  1065. // 没人不允许开课
  1066. if (json.Rs.length > 0) {
  1067. // 全部预约 都是未到也不允许开课
  1068. json.Rs.map(function (item) {
  1069. // 只要有一个不是就放开
  1070. if (item.Status != 2) {
  1071. that.BeginState = false;
  1072. }
  1073. });
  1074. }
  1075. // 分队处理
  1076. // 未上课的分队,已上课的旧的不处理,新人需要处理
  1077. if (that.FinishClass == 3) {
  1078. if (that.ClassType == 2) {
  1079. that.TurnUnit(json.Rs);
  1080. } else {
  1081. json.Rs.map(function (item) {
  1082. item.group_no = item.GroupNo;
  1083. })
  1084. }
  1085. } else {
  1086. // 已上课的状态
  1087. json.Rs.map(function (item, i) {
  1088. if (that.ClassType == 2) {
  1089. if (item.GroupNo == 0) {
  1090. item.group_no = i % that.PkNum + 1;
  1091. } else {
  1092. item.group_no = item.GroupNo;
  1093. }
  1094. } else {
  1095. item.group_no = item.GroupNo;
  1096. }
  1097. });
  1098. }
  1099. that.allTableData = json.Rs;
  1100. that.recordsTotal = json.Rs.length;
  1101. } else {
  1102. that.allTableData = [];
  1103. that.recordsTotal = 0;
  1104. }
  1105. // 设置分页数据
  1106. that.setPaginations();
  1107. } else {
  1108. that.$message.error(json.Memo + ' 错误码:' + json.Code);
  1109. }
  1110. })
  1111. },
  1112. // 分队
  1113. TurnUnit(Rs) {
  1114. let that = this;
  1115. // 分拆2队
  1116. if (that.PkNum == 2) {
  1117. Rs.map(function (item, t) {
  1118. item.group_no = t % 2 + 1;
  1119. })
  1120. }
  1121. // 分拆3队
  1122. if (that.PkNum == 3) {
  1123. Rs.map(function (item, t) {
  1124. item.group_no = t % 3 + 1;
  1125. })
  1126. }
  1127. },
  1128. // 获取心率带下拉菜单
  1129. getSelectHrSensors(row) {
  1130. let that = this;
  1131. that.loading = true;
  1132. let param = {
  1133. token: localStorage.token,
  1134. shopId: localStorage.shopId,
  1135. userId: row.UserId,
  1136. };
  1137. let postdata = qs.stringify(param);
  1138. SelectHrSensors(postdata).then(res => {
  1139. let json = res;
  1140. if (json.Code == 0) {
  1141. that.loading = false;
  1142. if (json.Rs) {
  1143. that.panel.bindList = json.Rs;
  1144. let HrTypeText = "";
  1145. json.Rs.map(function (item, i) {
  1146. HrTypeText = item.HrType == 1 ? "(私有)" : "";
  1147. item.label = "Sn:" + item.Sn + HrTypeText;
  1148. item.index = i + 1;
  1149. });
  1150. that.panel.bindList.push({
  1151. value: 0,
  1152. HrId: 0,
  1153. label: "请选择心率带",
  1154. InVenueNo: 0
  1155. });
  1156. } else {
  1157. that.panel.bindList = [];
  1158. }
  1159. } else {
  1160. that.$message.error(json.Memo + ' 错误码:' + json.Code);
  1161. }
  1162. })
  1163. },
  1164. // 设置分页数据
  1165. setPaginations() {
  1166. // 分页属性
  1167. let that = this;
  1168. that.pageination.total = that.recordsTotal;
  1169. // 默认分页
  1170. that.tableData = that.allTableData.filter((item, index) => {
  1171. return index < that.pageination.pageItem;
  1172. });
  1173. },
  1174. // 每页显示数量
  1175. handleSizeChange() {
  1176. let that = this;
  1177. that.tableData = that.allTableData.filter((item, index) => {
  1178. return index < that.pageination.pageItem;
  1179. });
  1180. that.draw = that.pageination.pageItem;
  1181. // that.getTableQuery();
  1182. },
  1183. // 翻页
  1184. pageChange(pageIndex) {
  1185. let that = this;
  1186. // 获取当前页
  1187. let index = that.pageination.pageItem * (pageIndex - 1);
  1188. // 数据总数
  1189. let nums = that.pageination.pageItem * pageIndex;
  1190. // 容器
  1191. let tables = [];
  1192. for (var i = index; i < nums; i++) {
  1193. if (that.allTableData[i]) {
  1194. tables.push(that.allTableData[i])
  1195. }
  1196. this.tableData = tables;
  1197. }
  1198. that.start = index * that.draw;
  1199. // that.getTableQuery();
  1200. },
  1201. // 过滤时间
  1202. filterFmtDate(value, row, column) {
  1203. let that = this;
  1204. if (column == "0001-01-01T08:05:43+08:05" || column == "0001-01-01T00:00:00Z") {
  1205. return '未预约';
  1206. } else {
  1207. return nonTfmtDate(column, 11);
  1208. }
  1209. },
  1210. // 提交单人
  1211. getClassDetailAndSnAdd(row) {
  1212. let begin_time = parseInt(new Date().valueOf() / 1000);
  1213. let duRs = [];
  1214. if (!row.Sn) {
  1215. this.$message.error(row.Name + '没有绑定心率带');
  1216. return false
  1217. }
  1218. // 拼装上课人员信息
  1219. duRs[0] = {
  1220. sn: row.Sn,
  1221. group_no: row.group_no,//0不分队 1蓝队 2红队 3黄队
  1222. begin_time: begin_time,
  1223. name: row.Name,
  1224. head: row.Head,
  1225. static_hr: row.StaticHr,
  1226. sex: row.Sex,
  1227. height: row.Height,
  1228. age: row.Age,
  1229. user_id: row.UserId,
  1230. weight: row.Weight,
  1231. user_md5: row.UserMd5,
  1232. birthday: row.Birthday,
  1233. is_tmp_user: row.IsTmpUser,
  1234. is_private: row.IsPrivate,
  1235. };
  1236. duRs = '{"Rs":' + JSON.stringify(duRs).toString() + '}';
  1237. let that = this;
  1238. let param = {
  1239. token: localStorage.token,
  1240. stdId: this.$route.query.StdId,
  1241. duRs: duRs
  1242. };
  1243. let postdata = qs.stringify(param);
  1244. ClassDetailAndSnAdd(postdata).then(res => {
  1245. let json = res;
  1246. if (json.Code == 0) {
  1247. that.$message({
  1248. showClose: true,
  1249. message: '提交成功!',
  1250. type: 'success'
  1251. });
  1252. this.getTableQuery();
  1253. } else {
  1254. that.$message.error(json.Memo + ' 错误码:' + json.Code);
  1255. }
  1256. })
  1257. },
  1258. tableRowClassName({row, rowIndex}) {
  1259. if (row.group_no == 1) {
  1260. return 'red-row';
  1261. } else if (row.group_no == 2) {
  1262. return 'blue-row';
  1263. } else if (row.group_no == 3) {
  1264. return 'yellow-row';
  1265. }
  1266. return '';
  1267. }
  1268. },
  1269. watch: {
  1270. $route(to) {
  1271. if (to.name == 'courseEdit') {
  1272. this.getTableQuery();
  1273. this.FinishClass = this.$route.query.FinishClass;
  1274. this.ClassType = this.$route.query.ClassType;
  1275. this.PkNum = this.$route.query.PkNum;
  1276. this.title = this.$route.query.ClassName + ' ' + this.$route.query.BeginStr + '-' + this.$route.query.EndStr;
  1277. }
  1278. },
  1279. FinishClass(to) {
  1280. switch (parseInt(to)) {
  1281. case 1:
  1282. this.ClassStateText = "已下课";
  1283. break;
  1284. case 2:
  1285. this.ClassStateText = "已上课";
  1286. break;
  1287. case 3:
  1288. this.ClassStateText = "准备上课";
  1289. break;
  1290. }
  1291. },
  1292. PkNum(to) {
  1293. let that = this;
  1294. console.log(to);
  1295. if (to == 2) {
  1296. that.panel.groupList = [
  1297. {label: '红队', value: 1},
  1298. {label: '蓝队', value: 2},
  1299. ]
  1300. } else {
  1301. that.panel.groupList = [
  1302. {label: '红队', value: 1},
  1303. {label: '蓝队', value: 2},
  1304. {label: '黄队', value: 3}
  1305. ]
  1306. }
  1307. }
  1308. },
  1309. }
  1310. </script>
  1311. <style scoped>
  1312. @import "../assets/css/panel.css";
  1313. .context {
  1314. height: 770px;
  1315. overflow-y: scroll;
  1316. display: block;
  1317. margin: 0 auto;
  1318. background-color: #fff !important;
  1319. padding: 30px;
  1320. }
  1321. .classNames {
  1322. height: 25px;
  1323. background: #f0f2f5;
  1324. font-family: "Source Han Sans CN";
  1325. font-weight: normal;
  1326. font-size: 16px;
  1327. color: #3799ff;
  1328. border-radius: 250px;
  1329. text-align: center;
  1330. margin-top: 15px;
  1331. margin-bottom: 3px;
  1332. float: left;
  1333. padding-left: 10px;
  1334. padding-right: 10px;
  1335. }
  1336. .head {
  1337. overflow: hidden;
  1338. display: block;
  1339. margin: 0 auto;
  1340. border-radius: 250px;
  1341. }
  1342. .panel_control {
  1343. width: 100%;
  1344. overflow: hidden;
  1345. display: block;
  1346. margin: 0 auto;
  1347. }
  1348. /*.panel-body {*/
  1349. .panel_control {
  1350. padding: 20px;
  1351. background: #F0F2F5;
  1352. }
  1353. .change {
  1354. width: 100%;
  1355. overflow: hidden;
  1356. display: block;
  1357. margin: 0 auto;
  1358. padding-top: 10px;
  1359. padding-bottom: 10px;
  1360. }
  1361. .change button {
  1362. float: left;
  1363. }
  1364. .change button.pull-right {
  1365. float: right;
  1366. }
  1367. .lessons {
  1368. padding: 1px 7px;
  1369. border-radius: 250px;
  1370. float: left;
  1371. color: #000;
  1372. }
  1373. /deep/ .el-transfer-panel__item .el-checkbox__input {
  1374. /*float: left;*/
  1375. left: 10%;
  1376. }
  1377. /*/deep/ .el-checkbox .el-checkbox {*/
  1378. /*margin-right: 1px;*/
  1379. /*}*/
  1380. /deep/ .el-checkbox__label span {
  1381. width: 100%;
  1382. white-space: nowrap;
  1383. overflow: hidden;
  1384. text-overflow: ellipsis;
  1385. float: left;
  1386. }
  1387. .cell em {
  1388. margin-left: 5px;
  1389. margin-right: 5px;
  1390. }
  1391. /deep/ .el-transfer-panel .el-transfer-panel__header .el-checkbox .el-checkbox__label span {
  1392. width: 50px;
  1393. float: right;
  1394. right: 0;
  1395. }
  1396. /*/deep/ .el-table .red-row {*/
  1397. /*background: #fb88c1;*/
  1398. /*}*/
  1399. /*/deep/ .el-table .blue-row {*/
  1400. /*background: #7099d0;*/
  1401. /*}*/
  1402. /*/deep/ .el-table .yellow-row {*/
  1403. /*background: #fbe56e;*/
  1404. /*}*/
  1405. </style>