AddPlan.vue 25 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747
  1. <template>
  2. <el-scrollbar style="height: 100%" ref="elscrollbar">
  3. <div class="AddPlanWrapper clearfix" @click="close">
  4. <crumbs
  5. :title="isEdit ? '电子病历方案配置-修改方案' : '电子病历方案配置-添加方案'"
  6. class="topBack"
  7. :param="$route.params"
  8. linkTo="Plan"
  9. ></crumbs>
  10. <div class="AddPlanBox">
  11. <el-row :gutter="20">
  12. <el-col :span="16">
  13. <el-form ref="form" :model="form" label-width="80px" :rules="rules">
  14. <!-- <el-form-item label="医院名称" prop="hoipitalName">
  15. <el-input v-model="form.planName" placeholder="2-30位,可输入汉字、字母、数字和下划线"></el-input>
  16. </el-form-item>-->
  17. <el-form-item label="医院名称" class="selectMedicine" prop="hospitalId">
  18. <el-select
  19. v-model="form.hospitalId"
  20. placeholder="请选择"
  21. clearable
  22. style="width: 100%"
  23. >
  24. <el-option
  25. v-for="item in HospitalInfoList"
  26. :label="item.name"
  27. :value="item.id"
  28. :key="item.id"
  29. ></el-option>
  30. </el-select>
  31. </el-form-item>
  32. <el-form-item label="方案名称" prop="planName">
  33. <el-input v-model="form.planName" placeholder="2-30位,可输入汉字、字母、数字和下划线"></el-input>
  34. </el-form-item>
  35. <el-form-item label="方案编码" prop="planCode">
  36. <el-input v-model="form.planCode" placeholder="可输入字母、数字和下划线"></el-input>
  37. </el-form-item>
  38. <el-form-item label="方案配置">
  39. <ul>
  40. <li>
  41. <div class="title">
  42. <div class="handleIcon" @click="openPlanItems">
  43. <img
  44. src="../../../images/multi.png"
  45. alt="辅助信息"
  46. :class="{'open' : isOpenCloseItems}"
  47. />
  48. </div>
  49. <h4>辅助信息</h4>
  50. <div class="titlwSwitch">
  51. <el-switch
  52. v-model="switchSubStatus"
  53. :active-value="1"
  54. :inactive-value="0"
  55. active-color="#4BC4D7"
  56. inactive-color="#BBBBBB"
  57. ></el-switch>
  58. <span class="titlwSwitchStatus">{{switchSubStatus === 1 ? '启用中' : '未启用'}}</span>
  59. </div>
  60. </div>
  61. <transition name="plus-icon">
  62. <div v-if="isOpenCloseItems">
  63. <ul class="sub" v-for="(item,index) in planDefaultList" :key="item.id">
  64. <li class="planItem">
  65. <div class="sort" v-if="item.ismove">
  66. <div class="top">
  67. <img
  68. :src="isTopLight !== index ? require('../../../images/icon_default_top.png') : require('../../../images/icon_hover_top.png')"
  69. alt="上升"
  70. v-if="index !== 0"
  71. @click="sortPlan(item,index,'top')"
  72. @mouseover="handleMouseEnter1(index)"
  73. @mouseleave="handleMouseLeave1(index)"
  74. />
  75. </div>
  76. <div class="down">
  77. <img
  78. :src="isDownLight !== index ? require('../../../images/icon_default_down.png') : require('../../../images/icon_hover_down.png')"
  79. alt="下降"
  80. v-if="index !== planDefaultList.length - 1"
  81. @click="sortPlan(item,index,'down')"
  82. @mouseover="handleMouseEnter(index)"
  83. @mouseleave="handleMouseLeave(index)"
  84. />
  85. </div>
  86. </div>
  87. <div class="sort" v-else></div>
  88. <div class="openOrClose">
  89. <span class="planInfo">{{item.name}}</span>
  90. <!-- <span class="planInfo">{{i.name}}</span> -->
  91. <div class="switch">
  92. <el-switch
  93. v-model="item.status"
  94. :active-value="1"
  95. :inactive-value="0"
  96. active-color="#4BC4D7"
  97. inactive-color="#BBBBBB"
  98. ></el-switch>
  99. </div>
  100. <span class="planStatus">{{item.status === 1 ? '启用中' : '未启用'}}</span>
  101. </div>
  102. <div class="showNum" v-if="item.number">
  103. <span style="marginRight:8px;">默认显示个数</span>
  104. <el-select
  105. v-model="item.number"
  106. placeholder="请选择"
  107. size="small"
  108. :disabled="item.status !== 1 ? true: false"
  109. >
  110. <el-option label="1" value="1"></el-option>
  111. <el-option label="2" value="2"></el-option>
  112. <el-option label="3" value="3"></el-option>
  113. <el-option label="4" value="4"></el-option>
  114. <el-option label="5" value="5"></el-option>
  115. <el-option label="6" value="6"></el-option>
  116. </el-select>
  117. </div>
  118. </li>
  119. <li
  120. class="planItem"
  121. v-if="item.arr.length>0"
  122. v-for="i in item.arr"
  123. :key="i.id"
  124. >
  125. <div class="sort"></div>
  126. <div class="openOrClose">
  127. <span class="planInfo">{{i.name}}</span>
  128. <div class="switch">
  129. <el-switch
  130. v-model="i.status"
  131. :active-value="1"
  132. :inactive-value="0"
  133. active-color="#4BC4D7"
  134. inactive-color="#BBBBBB"
  135. ></el-switch>
  136. </div>
  137. <span class="planStatus">{{i.status === 1 ? '启用中' : '未启用'}}</span>
  138. </div>
  139. <div class="showNum" v-if="item.number">
  140. <span style="marginRight:8px;">默认显示个数</span>
  141. <el-select
  142. v-model="item.number"
  143. placeholder="请选择"
  144. size="small"
  145. :disabled="item.status !== 1 ? true: false"
  146. >
  147. <el-option label="1" value="1"></el-option>
  148. <el-option label="2" value="2"></el-option>
  149. <el-option label="3" value="3"></el-option>
  150. <el-option label="4" value="4"></el-option>
  151. <el-option label="5" value="5"></el-option>
  152. <el-option label="6" value="6"></el-option>
  153. </el-select>
  154. </div>
  155. </li>
  156. </ul>
  157. </div>
  158. </transition>
  159. </li>
  160. <li>
  161. <div class="title">
  162. <div class="handleIcon">
  163. <img src="../../../images/multi.png" alt="医学知识" />
  164. </div>
  165. <h4>医学知识</h4>
  166. <div class="titlwSwitch">
  167. <el-switch
  168. v-model="switchMedStatus"
  169. :active-value="1"
  170. :inactive-value="0"
  171. active-color="#4BC4D7"
  172. inactive-color="#BBBBBB"
  173. ></el-switch>
  174. <span class="titlwSwitchStatus">{{switchMedStatus === 1 ? '启用中' : '未启用'}}</span>
  175. </div>
  176. </div>
  177. </li>
  178. <li>
  179. <div class="title">
  180. <div class="handleIcon">
  181. <img src="../../../images/multi.png" alt="医学知识" />
  182. </div>
  183. <h4>随访计划</h4>
  184. <div class="titlwSwitch">
  185. <el-switch
  186. v-model="switchFollowStatus"
  187. :active-value="1"
  188. :inactive-value="0"
  189. active-color="#4BC4D7"
  190. inactive-color="#BBBBBB"
  191. ></el-switch>
  192. <span class="titlwSwitchStatus">{{switchFollowStatus === 1 ? '启用中' : '未启用'}}</span>
  193. </div>
  194. </div>
  195. </li>
  196. </ul>
  197. </el-form-item>
  198. <el-form-item>
  199. <el-button type="primary" @click="onSubmit" :disabled="saveDisable">确定</el-button>
  200. </el-form-item>
  201. </el-form>
  202. </el-col>
  203. </el-row>
  204. </div>
  205. </div>
  206. </el-scrollbar>
  207. </template>
  208. <script>
  209. import api from '@api/cdss.js';
  210. export default {
  211. name: 'AddPlan',
  212. data() {
  213. var numreg = /^[a-zA-Z0-9_\u4e00-\u9fa5]+$/;
  214. var numreg1 = /^[0-9a-zA-Z_]{1,}$/;
  215. var validatePass = (rule, value, callback) => {
  216. if (!numreg.test(value)) {
  217. callback(new Error('汉字、字母、数字和下划线'));
  218. } else {
  219. callback();
  220. }
  221. };
  222. var validatePass1 = (rule, value, callback) => {
  223. if (!numreg1.test(value)) {
  224. callback(new Error('字母、数字和下划线'));
  225. } else {
  226. callback();
  227. }
  228. };
  229. return {
  230. form: {
  231. hospitalId: '',
  232. planName: '',
  233. planCode: ''
  234. },
  235. saveDisable: false, //保存按钮禁止点击
  236. rules: {
  237. planName: [
  238. { required: true, message: '方案名称不能为空', trigger: 'change' },
  239. { min: 2, max: 30, message: '长度2-30位', trigger: 'blur' },
  240. { required: true, validator: validatePass, trigger: 'blur' }
  241. ],
  242. hospitalId: [
  243. { required: true, message: '医院名称不能为空', trigger: 'change' }
  244. // { min: 2, max: 30, message: '长度2-30位', trigger: 'blur' },
  245. // { required: true, validator: validatePass, trigger: 'blur' }
  246. ],
  247. planCode: [
  248. { required: true, message: '方案编码不能为空', trigger: 'change' },
  249. { required: true, validator: validatePass1, trigger: 'blur' }
  250. ]
  251. },
  252. planDefaultList: [],
  253. // hospitalId: '',
  254. isEdit: false, // 是否处于编辑页面 false--新增 true--编辑
  255. switchSubStatus: 0, // 辅助信息
  256. switchMedStatus: 0, // 医学知识
  257. switchFollowStatus: 0, //随访计划
  258. isOpenCloseItems: true, // 是否展开方案配置项
  259. isDownLight: -1,
  260. isTopLight: -1,
  261. flag: 1,
  262. editCount: -1, // 页面会否被编辑 >0被编辑 =0 未编辑
  263. isSaveSuccess: false, // 是否保存成功
  264. HospitalInfoList: []
  265. };
  266. },
  267. beforeRouteLeave(to, from, next) {
  268. console.log(this.editCount, 'this.editCount');
  269. if (
  270. (this.editCount > 3 && !this.isSaveSuccess && this.isEdit) ||
  271. (this.editCount > 1 && !this.isSaveSuccess && !this.isEdit)
  272. ) {
  273. // console.log('页面被编辑了');
  274. this.$alert('还有未保存的内容,确定要退出当前页面吗?', '提示', {
  275. confirmButtonText: '确定',
  276. // cancelButtonText: '取消',
  277. // cancelButtonClass: 'leaveBtn',
  278. // customClass: 'leaveBox',
  279. type: 'warning'
  280. })
  281. .then(() => {
  282. next();
  283. })
  284. .catch(() => {});
  285. } else {
  286. next();
  287. }
  288. },
  289. watch: {
  290. form: {
  291. handler(newName, oldName) {
  292. this.editCount++;
  293. },
  294. deep: true
  295. // immediate: true
  296. },
  297. planDefaultList: {
  298. handler(newName, oldName) {
  299. // console.log(newName,'newName');
  300. // console.log(oldName,'oldName');
  301. this.editCount++;
  302. },
  303. deep: true,
  304. immediate: true
  305. }
  306. },
  307. async created() {
  308. const { isEdit, data } = this.$route.params;
  309. console.log(data, '编辑页传递的data');
  310. this._getHospitalInfo(); // 获取医院下拉列表
  311. // let res = await api.getHospitalInfo(); // 同步获取医院信息
  312. // this.hospitalId = res.data.data.id;
  313. if (isEdit) {
  314. // 编辑页面
  315. this.isEdit = true;
  316. this.form.hospitalId = data.hospitalId;
  317. let params = {
  318. hospitalId: data.hospitalId,
  319. id: data.id
  320. };
  321. this._getPlanInfoIds(params);
  322. } else {
  323. // 新增页面
  324. this._getDefaultPlans(); // 获取默认配置信息
  325. }
  326. },
  327. methods: {
  328. close() {},
  329. // 获取医院下拉列表
  330. _getHospitalInfo() {
  331. api.getHospitalInfo().then(res => {
  332. if (res.data.code === '0') {
  333. this.HospitalInfoList = res.data.data;
  334. }
  335. });
  336. },
  337. // 方案配置排序
  338. sortPlan(item, index, type) {
  339. console.log('排序', item, index, type);
  340. let tempList = [...this.planDefaultList];
  341. if (type === 'down') {
  342. tempList.splice(index + 2, 0, item);
  343. tempList.splice(index, 1);
  344. [tempList[index + 1].orderNo, tempList[index].orderNo] = [
  345. tempList[index].orderNo,
  346. tempList[index + 1].orderNo
  347. ];
  348. this.planDefaultList = tempList;
  349. // 降序
  350. // let plan = tempList.find(item => {
  351. // console.log(item)
  352. // return item.orderNo === index + 1;
  353. // });
  354. // console.log(item);
  355. // let tempPlan = { ...plan };
  356. // let planNext = tempList.find(item => {
  357. // return item.orderNo === index + 2;
  358. // });
  359. // let tempPlanNext = { ...planNext };
  360. // plan = tempPlanNext;
  361. // plan.orderNo -= 1;
  362. // planNext = tempPlan;
  363. // planNext.orderNo += 1;
  364. // let arr = tempList.map((i, idx) => {
  365. // if (idx === index) {
  366. // return { ...plan };
  367. // } else if (idx === index + 1) {
  368. // return { ...planNext };
  369. // } else {
  370. // return i;
  371. // }
  372. // });
  373. // this.planDefaultList = [...arr];
  374. } else {
  375. tempList.splice(index - 1, 0, item);
  376. tempList.splice(index+1, 1);
  377. [tempList[index - 1].orderNo, tempList[index+1].orderNo] = [
  378. tempList[index+1].orderNo,
  379. tempList[index - 1].orderNo
  380. ];
  381. this.planDefaultList = tempList;
  382. // 升序
  383. // let plan = tempList.find(item => {
  384. // return item.orderNo === index + 1;
  385. // });
  386. // let tempPlan = { ...plan };
  387. // let planPre = tempList.find(item => {
  388. // return item.orderNo === index;
  389. // });
  390. // let tempPlanPre = { ...planPre };
  391. // plan = tempPlanPre;
  392. // plan.orderNo += 1;
  393. // planPre = tempPlan;
  394. // planPre.orderNo -= 1;
  395. // let arr = tempList.map((i, idx) => {
  396. // if (idx === index) {
  397. // return { ...plan };
  398. // } else if (idx === index - 1) {
  399. // return { ...planPre };
  400. // } else {
  401. // return i;
  402. // }
  403. // });
  404. // this.planDefaultList = [...arr];
  405. }
  406. },
  407. // 展开列表项
  408. openPlanItems() {
  409. this.isOpenCloseItems = !this.isOpenCloseItems;
  410. },
  411. // 鼠标移入
  412. handleMouseEnter(index) {
  413. this.isDownLight = index;
  414. },
  415. // 鼠标移除
  416. handleMouseLeave(index) {
  417. this.isDownLight = -1;
  418. },
  419. // 鼠标移入
  420. handleMouseEnter1(index) {
  421. this.isTopLight = index;
  422. },
  423. // 鼠标移除
  424. handleMouseLeave1(index) {
  425. this.isTopLight = -1;
  426. },
  427. // 获取默认方案配置
  428. _getDefaultPlans() {
  429. api.getDefaultPlans().then(res => {
  430. console.log(res, '获取默认的方案配置');
  431. if (res.data.code === '0') {
  432. this.planDefaultList =
  433. res.data.data &&
  434. res.data.data.planDetailDefault.length !== 0 &&
  435. res.data.data.planDetailDefault[0].planDetails;
  436. this.switchSubStatus =
  437. res.data.data &&
  438. res.data.data.planDetailDefault.length !== 0 &&
  439. res.data.data.planDetailDefault[0].status;
  440. this.switchMedStatus =
  441. res.data.data &&
  442. res.data.data.planDetailDefault.length !== 0 &&
  443. res.data.data.planDetailDefault[1].status;
  444. this.switchFollowStatus =
  445. res.data.data &&
  446. res.data.data.planDetailDefault.length !== 0 &&
  447. res.data.data.planDetailDefault[2].status;
  448. }
  449. });
  450. },
  451. // 编辑页面 根据id获取方案配置
  452. async _getPlanInfoIds(params) {
  453. // 先获取默认的所有方案
  454. let tempArr = [];
  455. let newPlan = [];
  456. let res = await api.getDefaultPlans();
  457. if (res.data.code === '0') {
  458. tempArr =
  459. res.data.data &&
  460. res.data.data.planDetailDefault.length !== 0 &&
  461. res.data.data.planDetailDefault[0].planDetails;
  462. }
  463. let res1 = await api.getPlanInfoIds(params);
  464. console.log(res1, '==================');
  465. if (res1.data.code === '0') {
  466. newPlan = res1.data.data[0].sysSetInfo[0].planDetails;
  467. this.form.planName = res1.data.data[0].planName;
  468. this.form.planCode = res1.data.data[0].planCode;
  469. this.switchSubStatus = res1.data.data[0].sysSetInfo[0].status;
  470. this.switchMedStatus = res1.data.data[0].sysSetInfo[1].status;
  471. this.switchFollowStatus = res1.data.data[0].sysSetInfo[2].status;
  472. // this.planDefaultList = res1.data.data[0].sysSetInfo[0].planDetails;
  473. }
  474. let arr = [];
  475. let arrTemp = [];
  476. let arrTemp1 = []; // 不同index
  477. for (var i = 0; i < tempArr.length; i++) {
  478. arrTemp.push(i);
  479. }
  480. for (var i = 0; i < tempArr.length; i++) {
  481. for (var j = 0; j < newPlan.length; j++) {
  482. if (tempArr[i].code === newPlan[j].code) {
  483. arr.push(i);
  484. }
  485. }
  486. }
  487. arrTemp1 = arr
  488. .filter(x => arrTemp.indexOf(x) == -1)
  489. .concat(arrTemp.filter(x => arr.indexOf(x) == -1));
  490. let endArr = [...newPlan];
  491. for (var j = 0; j < arrTemp1.length; j++) {
  492. let temp = tempArr[arrTemp1[j]];
  493. temp.orderNo = arr.length + j + 1;
  494. temp.status = 0;
  495. endArr.push(temp);
  496. }
  497. // console.log(endArr,'-=-=-=-=-=');
  498. this.planDefaultList = endArr;
  499. },
  500. // format处理细项数据
  501. handleSendData() {
  502. let TempPlanDetail = [];
  503. TempPlanDetail = this.planDefaultList.map((item, index) => {
  504. return {
  505. code: item.code,
  506. hospitalId: this.form.hospitalId,
  507. // hospitalId: this.hospitalId,
  508. name: item.name,
  509. number: item.number,
  510. orderNo: item.orderNo,
  511. planId: item.planId,
  512. remark: item.remark,
  513. status: item.status,
  514. value: item.value
  515. };
  516. });
  517. return TempPlanDetail;
  518. // console.log(TempPlanDetail, 'TempPlanDetail');
  519. },
  520. // 处理保存活动信息参数
  521. _getParams() {
  522. let params = {
  523. hospitalId: this.form.hospitalId,
  524. planCode: this.form.planCode,
  525. planDetailParent: [
  526. {
  527. code: 'auxiliary',
  528. hospitalId: this.form.hospitalId,
  529. name: '辅助信息',
  530. number: 0,
  531. orderNo: 1,
  532. planDetailSub: this.handleSendData(),
  533. status: this.switchSubStatus
  534. },
  535. {
  536. code: 'medical',
  537. hospitalId: this.form.hospitalId,
  538. name: '医学知识',
  539. orderNo: 3,
  540. planDetailSub: [{}],
  541. status: this.switchMedStatus
  542. },
  543. {
  544. code: 'followup',
  545. hospitalId: this.form.hospitalId,
  546. name: '随访计划',
  547. orderNo: 4,
  548. planDetailSub: [{}],
  549. status: this.switchFollowStatus
  550. }
  551. ], // 方案配置信息
  552. planName: this.form.planName,
  553. planStatus: 1 // 1 启用 默认启用
  554. };
  555. if (this.isEdit) {
  556. // 编辑状态,需要额外添加ID
  557. const { data } = this.$route.params;
  558. params = { ...params, id: data.id };
  559. }
  560. return params;
  561. },
  562. onSubmit() {
  563. this.$refs.form.validate(valid => {
  564. if (valid) {
  565. this.saveDisable = true;
  566. let params = this._getParams();
  567. // console.log(params, 'params');
  568. // return;
  569. api.savePlanInfoDatas(params).then(res => {
  570. if (res.data.code === '0') {
  571. this.$message({
  572. showClose: true,
  573. message: '保存成功',
  574. type: 'success',
  575. duration: 1000
  576. });
  577. this.isSaveSuccess = true; // 保存成功,可正常退出
  578. this.$router.push({
  579. name: 'Plan',
  580. params: Object.assign({}, this.$route.params, {
  581. currentPage: 1
  582. })
  583. });
  584. } else if (res.data.code === '00020007') {
  585. // 方案名/方案编码已存在
  586. this.$message({
  587. showClose: true,
  588. message: res.data.msg,
  589. type: 'error',
  590. duration: 1000
  591. });
  592. }
  593. this.saveDisable = false;
  594. });
  595. } else {
  596. this.saveDisable = false;
  597. var div = this.$refs['elscrollbar'].$refs['wrap'];
  598. this.$nextTick(() => {
  599. div.scrollTop = 0;
  600. });
  601. return false;
  602. }
  603. });
  604. }
  605. }
  606. };
  607. </script>
  608. <style lang="less" scoped>
  609. .AddPlanWrapper {
  610. min-width: 940px;
  611. .AddPlanBox {
  612. padding: 20px 60px 120px 60px;
  613. margin: 70px 20px 0 20px;
  614. background: #fff;
  615. }
  616. color: #606266;
  617. .topBack {
  618. top: 0;
  619. }
  620. .title {
  621. background-color: #f2f2f2;
  622. display: flex;
  623. .handleIcon {
  624. width: 30px;
  625. cursor: pointer;
  626. height: 40px;
  627. display: flex;
  628. justify-content: center;
  629. align-items: center;
  630. img {
  631. width: 20px;
  632. height: 20px;
  633. }
  634. .open {
  635. transform: rotate(180deg);
  636. }
  637. .close {
  638. transform: rotate(0deg);
  639. }
  640. }
  641. .titlwSwitch {
  642. width: 120px;
  643. }
  644. h4 {
  645. flex: 1;
  646. }
  647. .titlwSwitchStatus {
  648. margin-left: 16px;
  649. }
  650. }
  651. .sub {
  652. .planItem {
  653. display: flex;
  654. .sort {
  655. width: 60px;
  656. display: flex;
  657. .top {
  658. display: flex;
  659. justify-content: center;
  660. align-items: center;
  661. width: 30px;
  662. cursor: pointer;
  663. img {
  664. width: 10px;
  665. height: 14px;
  666. }
  667. }
  668. .down {
  669. width: 30px;
  670. cursor: pointer;
  671. display: flex;
  672. justify-content: center;
  673. align-items: center;
  674. img {
  675. width: 10px;
  676. height: 14px;
  677. }
  678. }
  679. }
  680. .openOrClose {
  681. display: flex;
  682. flex: 1;
  683. .planInfo {
  684. width: 140px;
  685. }
  686. .switch {
  687. }
  688. .planStatus {
  689. margin-left: 16px;
  690. }
  691. }
  692. .showNum {
  693. display: flex;
  694. width: 160px;
  695. /deep/.el-input--small {
  696. width: 60px;
  697. }
  698. }
  699. }
  700. }
  701. .el-button {
  702. float: right;
  703. }
  704. .plus-icon-enter-active {
  705. transition: all 0.8s;
  706. }
  707. .plus-icon-enter {
  708. opacity: 0;
  709. margin-top: 12px;
  710. }
  711. .plus-icon-leave-active {
  712. transition: all 0.8s;
  713. }
  714. .plus-icon-leave-active {
  715. opacity: 0;
  716. margin-top: 12px;
  717. }
  718. }
  719. .leaveBox {
  720. /deep/ .leaveBtn {
  721. // margin-right: 46px;
  722. background-color: #d7d7d7 !important;
  723. border-color: transparent;
  724. }
  725. }
  726. .selectMedicine {
  727. /deep/ .el-input__suffix-inner {
  728. position: relative;
  729. top: -1px;
  730. }
  731. /deep/ .el-icon-circle-close {
  732. position: relative;
  733. top: -2px;
  734. }
  735. }
  736. </style>