editCheckList.vue 24 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992
  1. <template>
  2. <view class="editCheckList">
  3. <view class="searchBar" v-if="checkList.length>0">
  4. <view class="filter">
  5. <view class="selecter" @click="selecterHandle">
  6. <text>{{selectedStr}}</text>
  7. <image src="../../static/fillBlackArrow.png" mode=""></image>
  8. </view>
  9. <view class="searchBar">
  10. <image class="serachIcon" src="../../static/searchIcon.png" mode=""></image>
  11. <tm-input class="searchVal" :clear="ifclearSearch" @onChange="searchInputHandle"
  12. placeholder="请输入单位名称"></tm-input>
  13. <view class="searchBtn" @click="searchHandle">搜索</view>
  14. </view>
  15. </view>
  16. </view>
  17. <view class="check-map-list">
  18. <scroll-view :class="[ifAllPlanListHasDistribution==true?'scroll-y noBottom':'scroll-y']" scroll-y="true"
  19. v-if="checkList.length > 0">
  20. <view class="item" v-for="(item, index) in copiedCheckList" :key="index">
  21. <view
  22. :class="{'checkPoint':true,checked:(checkedList.findIndex(t=>t.deptId == item.deptId) != -1)}"
  23. @click="checkedHandle(item)">
  24. <image class="innerImg" v-if="(checkedList.findIndex(t=>t.deptId == item.deptId) != -1)"
  25. src="../../static/check-checkbox.png" mode=""></image>
  26. </view>
  27. <view class="title-wrap">
  28. <text>{{item.deptName}}</text>
  29. <view>
  30. <image src="../../static/icon-map.png"></image>
  31. <text>{{item.deptClassName}}</text>
  32. </view>
  33. <view :class="getStatus(item.completeDes)">{{item.completeDes}}</view>
  34. </view>
  35. <view class="content">
  36. <text>{{item.decs}}</text>
  37. <text>
  38. 要点概览:{{item.checkPointNames}}
  39. </text>
  40. </view>
  41. <view class="footer">
  42. <view class="row" @click="checkEdit(item, index, '指派查核人员')">
  43. <text class="label">查核人</text>
  44. <view class="labelVal">
  45. <text :class="['base-text', item.empName ? 'black-color' : '']">
  46. {{ item.empName?item.empName : '去选择查核成员'}}
  47. </text>
  48. </view>
  49. </view>
  50. <view class="row" @click="checkEdit(item, index, '设置查核时间')">
  51. <text class="label">计划时间</text>
  52. <view class="labelVal">
  53. <text :class="['base-text', item.startDate ? 'black-color' : '']">
  54. {{ item.startDate ? item.startDate : '选择起始时间' }}
  55. </text>
  56. <text class="center-text">~</text>
  57. <text :class="['base-text', item.endDate ? 'black-color' : '']">
  58. {{ item.endDate ? item.endDate : '选择结束时间' }}
  59. </text>
  60. </view>
  61. </view>
  62. </view>
  63. </view>
  64. </scroll-view>
  65. <view class="null" v-if="copiedCheckList.length==0||checkList.length == 0">暂无数据</view>
  66. <view class="fixed-buttom-btn" @click="submit" v-if="multiple == 'true'">
  67. <text class="btn-text">完成</text>
  68. </view>
  69. <view class="bottomBtnGroup" v-if="multiple != 'true'">
  70. <view class="selectAll" @click="bottomBtnClickHandle('left')">{{ifSlectedAllCheckList?'取消':'全选'}}</view>
  71. <view class="leftBtn" @click="bottomBtnClickHandle('middle')">{{`(已选${checkedList.length}项)撤销分配`}}
  72. </view>
  73. <view class="rightBtn" @click="bottomBtnClickHandle('right')">{{`(已选${checkedList.length}项)批量分配`}}
  74. </view>
  75. </view>
  76. </view>
  77. <uni-popup ref="popup" type="bottom" :maskClick="true">
  78. <view class="selectableList">
  79. <scroll-view scroll-y="true" class="listWrap">
  80. <view :class="getClass(v.id)" v-for="(v,i) in selectables" @click="listClickHandle(v)">
  81. {{`${v.name}(${v.count})`}}
  82. </view>
  83. </scroll-view>
  84. <view class="btnGroup">
  85. <view class="cancelBtn btn" @click="btnGroupClickHandle(false)">取消</view>
  86. <view class="confirmBtn btn" @click="btnGroupClickHandle(true)">确定</view>
  87. </view>
  88. </view>
  89. </uni-popup>
  90. </view>
  91. </template>
  92. <script>
  93. // 查核列表(查核人和计划时间可编辑)
  94. import {
  95. mapState
  96. } from "vuex";
  97. import moment from 'moment';
  98. export default {
  99. computed: {
  100. ...mapState({
  101. checkList: state => state.editCheckList.checkList
  102. }),
  103. //计算当所有查核计划都已分配完时掩藏底部批量按钮
  104. ifAllPlanListHasDistribution: function() {
  105. const tempData = this.checkList.filter(item => (!item.empId && !item.empName));
  106. return tempData.length == 0
  107. },
  108. ifSlectedAllCheckList: function() {
  109. if (this.checkedList.length == this.checkList.length) { //选中集合==总集合
  110. this.ifCheckAll = true;
  111. return true;
  112. } else {
  113. this.ifCheckAll = false;
  114. return false;
  115. }
  116. },
  117. selectedStr() {
  118. const {
  119. status
  120. } = this.filter;
  121. return (status.map(t => t.name)).join(',')
  122. },
  123. },
  124. watch: {
  125. filter(val, oldVal) {
  126. if (val.keyword.length == 0) {
  127. this.searchHandle();
  128. }
  129. }
  130. },
  131. data() {
  132. return {
  133. // 查核组id
  134. checkGroupId: 0,
  135. // 情境id (批量修改有,不然为0)
  136. situationId: 0,
  137. // 查核id
  138. checkId: 0,
  139. // 计划开始时间
  140. startDate: '',
  141. // 计划结束时间
  142. endDate: '',
  143. multiple: false,
  144. planList: [],
  145. hasStartedCheck: [], //查核已经开始的集合
  146. ifInit: null,
  147. ifshowBottom: false,
  148. checkedList: [], //批量选中的集合
  149. ifCheckAll: false, //是否全选
  150. copiedCheckList: [],
  151. ifclearSearch: false,
  152. filter: {
  153. keyword: '',
  154. status: [{
  155. name: '全部',
  156. id: 0,
  157. count: 0
  158. }]
  159. },
  160. selectables: [{
  161. id: 0,
  162. name: '全部',
  163. count: 0
  164. },
  165. {
  166. id: 1,
  167. name: '进行中',
  168. count: 0
  169. },
  170. {
  171. id: 2,
  172. name: '未分配',
  173. count: 0
  174. },
  175. {
  176. id: 3,
  177. name: '已完成',
  178. count: 0
  179. }
  180. ]
  181. };
  182. },
  183. onLoad({
  184. situationId,
  185. checkId,
  186. checkGroupId,
  187. startDate,
  188. endDate,
  189. multiple,
  190. situationType,
  191. checkNo
  192. }) {
  193. this.init(situationId,
  194. checkId,
  195. checkGroupId,
  196. startDate,
  197. endDate,
  198. multiple,
  199. situationType,
  200. checkNo
  201. );
  202. },
  203. onShow() {
  204. let pages = getCurrentPages(); // 获取当前页面栈
  205. let curPage = pages[pages.length - 1]; // 当前页面
  206. if (curPage.ifInit) {
  207. curPage.ifInit = false;
  208. this.init(
  209. this.situationId,
  210. this.checkId,
  211. this.checkGroupId,
  212. this.startDate,
  213. this.endDate,
  214. this.multiple,
  215. this.situationType,
  216. this.checkNo
  217. ) // A页面 method中的方法,用来刷新页面A
  218. }
  219. },
  220. mounted() {},
  221. onUnload() {
  222. //页面卸载或返回
  223. this.$store.commit('planList/comChangeState', {
  224. key: 'ifReloadData',
  225. data: true
  226. })
  227. },
  228. methods: {
  229. init(situationId,
  230. checkId,
  231. checkGroupId,
  232. startDate,
  233. endDate,
  234. multiple,
  235. situationType,
  236. checkNo) {
  237. this.getCheckList(checkId, situationType);
  238. this.checkGroupId = checkGroupId ? +checkGroupId : 0;
  239. this.situationId = situationId ? +situationId : 0;
  240. this.checkId = checkId ? +checkId : 0;
  241. this.startDate = startDate;
  242. this.endDate = endDate;
  243. this.multiple = multiple;
  244. this.checkedList = [];
  245. this.situationType = situationType;
  246. this.checkNo = checkNo;
  247. },
  248. ifStartCheck(timeStr) {
  249. if (timeStr) {
  250. const currentTime = new Date().getTime();
  251. const startTime = Date.parse(timeStr.replace(/-/g, '/'));
  252. if (currentTime < startTime) {
  253. this.ifshowBottom = true;
  254. }
  255. return currentTime < startTime;
  256. }
  257. this.ifshowBottom = true;
  258. return true;
  259. },
  260. /**
  261. * @str string [noStart,checking,completed]
  262. */
  263. getStatus: function(str) { //设置状态颜色
  264. switch (str) {
  265. case '未分配':
  266. return 'status noStart'
  267. break;
  268. case '进行中':
  269. return 'status checking'
  270. break;
  271. case '已完成':
  272. return 'status completed'
  273. break;
  274. }
  275. },
  276. getClass(id) {
  277. const ids = this.filter.status.map(item => item.id);
  278. if (ids.indexOf(id) != -1) {
  279. return "list on"
  280. }
  281. return "list"
  282. },
  283. /**
  284. * @param {boolean} flag true确定按钮点击,false取消按钮
  285. */
  286. btnGroupClickHandle(flag) {
  287. this.$refs.popup.close();
  288. //清空搜索
  289. this.filter = {
  290. ...this.filter,
  291. keyword: ''
  292. }
  293. },
  294. listClickHandle(item) {
  295. const _filter = this.filter;
  296. const {
  297. status
  298. } = _filter;
  299. const index = _filter.status.findIndex(t => t.id == item.id);
  300. if (item.id == 0) {
  301. //全部
  302. this.filter = {
  303. ...this.filter,
  304. status: [{
  305. name: '全部',
  306. id: 0
  307. }]
  308. };
  309. return;
  310. }
  311. //去除全部选项选中
  312. status.splice(_filter.status.findIndex(t => t.id == 0), 1);
  313. if (index != -1) {
  314. status.splice(index, 1)
  315. } else {
  316. status.push({
  317. name: item.name,
  318. id: item.id
  319. })
  320. }
  321. this.filter = _filter;
  322. },
  323. selecterHandle() {
  324. this.$refs.popup.open();
  325. },
  326. searchInputHandle(val) {
  327. this.filter = {
  328. ...this.filter,
  329. keyword: val
  330. };
  331. },
  332. searchHandle() {
  333. let tempArr = this.checkList;
  334. if (this.filter.status[0].id == 1) {
  335. //进行中
  336. tempArr = this.checkList.filter(item => item.completeDes == '进行中');
  337. }
  338. if (this.filter.status[0].id == 2) {
  339. //未分配
  340. tempArr = this.checkList.filter(item => item.completeDes == '未分配');
  341. }
  342. if (this.filter.status[0].id == 3) {
  343. //未分配
  344. tempArr = this.checkList.filter(item => item.completeDes == '已完成');
  345. }
  346. this.copiedCheckList = tempArr.filter(item => item.deptName.indexOf(this.filter.keyword) != -1);
  347. },
  348. batchCancelDistri() { //批量撤销
  349. const _that = this;
  350. this.$store.dispatch({
  351. type: 'editCheckList/commActions',
  352. key: "batchCancelCheckDistribution",
  353. data: {
  354. checkId: this.checkId,
  355. deptIds: this.checkedList.map(t => t.deptId)
  356. }
  357. }).then(data => {
  358. if (data) {
  359. uni.showModal({
  360. title: '提示',
  361. content: '撤销分配成功!',
  362. showCancel: false,
  363. success(res) {
  364. if (res.confirm) {
  365. _that.checkedList = [];
  366. _that.getCheckList(_that.checkId, _that.situationType);
  367. }
  368. }
  369. });
  370. }
  371. })
  372. },
  373. bottomBtnClickHandle(key) {
  374. let details = {
  375. index: '', // 修改的下标
  376. title: '', // 标题
  377. empId: '',
  378. empName: '',
  379. startDate: '',
  380. endDate: '',
  381. situationType: this.situationType,
  382. checkNo: this.checkNo,
  383. checkedList: this.checkedList.map(t => t.deptId),
  384. situationId: this.situationId, // 情境id (批量修改有,不然为0)
  385. checkId: this.checkId, // 查核id
  386. checkGroupId: this.checkGroupId, //查核组id
  387. planStartDate: this.startDate, // 计划开始时间
  388. planEndDate: this.endDate // 计划结束时间
  389. }
  390. if (key == 'left') { //全选
  391. this.ifCheckAll = !this.ifCheckAll;
  392. if (this.ifCheckAll) {
  393. this.checkedList = this.checkList;
  394. } else {
  395. this.checkedList = [];
  396. }
  397. }
  398. if (key == 'middle') { //批量撤销
  399. if (this.checkedList.findIndex(item => item.completeDes == '未分配') != -1) {
  400. //选中项包含未分配
  401. uni.showModal({
  402. title: '提示',
  403. content: '选择的病区里包含未分配项!是否继续操作?',
  404. success: (res) => {
  405. if (res.confirm) {
  406. this.batchCancelDistri();
  407. }
  408. }
  409. });
  410. } else {
  411. this.batchCancelDistri();
  412. }
  413. }
  414. if (key == 'right') { //批量分配
  415. if (this.checkedList.length > 0) {
  416. if (this.checkedList.findIndex(item => item.completeDes == '进行中') != -1) {
  417. //选中项包含已分配
  418. uni.showModal({
  419. title: '提示',
  420. content: '选择的病区里包含已进行中项!是否继续操作?',
  421. success: (res) => {
  422. if (res.confirm) {
  423. uni.navigateTo({
  424. url: `/pages/batchDistribution/batchDistribution?details=${encodeURIComponent(JSON.stringify(details))}`
  425. });
  426. }
  427. }
  428. });
  429. } else {
  430. uni.navigateTo({
  431. url: `/pages/batchDistribution/batchDistribution?details=${encodeURIComponent(JSON.stringify(details))}`
  432. });
  433. }
  434. } else {
  435. uni.showModal({
  436. title: '提示',
  437. content: '请先选择分配项!',
  438. showCancel: false
  439. });
  440. }
  441. }
  442. },
  443. checkedHandle(item) {
  444. let temp = this.checkedList;
  445. let index = temp.findIndex(val => val.deptId == item.deptId)
  446. if (index != -1) {
  447. temp.splice(index, 1);
  448. this.checkedList = temp;
  449. } else {
  450. this.checkedList = this.checkedList.concat([item]);
  451. }
  452. },
  453. // 完成
  454. submit() {
  455. const hadDistributionList = this.checkList.filter((item, index) => {
  456. return item.isDistribution || item.empId;
  457. });
  458. const commitData = hadDistributionList.map(item => ({
  459. "checkId": item.checkId,
  460. "deptId": item.deptId,
  461. "empId": item.empId,
  462. "empName": item.empName,
  463. "startDate": item.startDate,
  464. "endDate": item.endDate,
  465. "categoryIds": item.categoryIds
  466. }));
  467. // console.log({commitData});
  468. this.batchDistribute(commitData);
  469. },
  470. /**
  471. * 获取时间字符串
  472. * @param {Number} startTimestamp 计划开始时间戳
  473. * @param {Number} endTimestamp 计划结束时间戳
  474. * @param {Number} diffTimestamp 第一次计划中的时间差
  475. * @param {String} endDateStr 计划结束时间字符串
  476. */
  477. getDateStr(startTimestamp, endTimestamp, diffTimestamp, endDateStr) {
  478. if ((startTimestamp + diffTimestamp) > endTimestamp) { // 超出计划结束时间, 则取计划结束时间
  479. return endDateStr;
  480. } else {
  481. return moment(startTimestamp + diffTimestamp).format('YYYY-MM-DD HH:mm');
  482. }
  483. },
  484. // 分配单位查核人员
  485. batchDistribute(empList) {
  486. if (empList.length === 0) { // 未作修改直接跳转页面
  487. return this.redirectToPlanList();
  488. }
  489. this.$store.dispatch({
  490. type: 'editCheckList/commActions',
  491. key: "batchDistribute",
  492. data: {
  493. empList
  494. }
  495. }).then(data => {
  496. if (data) {
  497. this.redirectToPlanList();
  498. }
  499. });
  500. },
  501. // 跳转页面
  502. redirectToPlanList() {
  503. uni.redirectTo({
  504. url: `/pages/planList/planList?situationId=${this.situationId}&checkGroupId=${this.checkGroupId}`
  505. });
  506. },
  507. // 日期时间转换为时间戳
  508. dateToTimestamp(dataStr) {
  509. return dataStr ? moment(dataStr).valueOf() : -1
  510. },
  511. checkEdit(data, index, title) {
  512. // console.log({data});
  513. if (data.completeState) { // 计划已开始, 不能编辑查核人和计划时间
  514. uni.showModal({
  515. content: '因查核计划已结束,故不可修改',
  516. showCancel: false
  517. });
  518. } else { // 跳转编辑页面
  519. const {
  520. empId,
  521. empName,
  522. startDate,
  523. endDate,
  524. deptId,
  525. categoryId,
  526. isDistribution,
  527. } = data;
  528. let details = {
  529. index, // 修改的下标
  530. title, // 标题
  531. empId,
  532. empName,
  533. startDate,
  534. endDate,
  535. deptId,
  536. categoryId,
  537. isDistribution,
  538. situationType: this.situationType,
  539. checkNo: this.checkNo,
  540. situationId: this.situationId, // 情境id (批量修改有,不然为0)
  541. checkId: this.checkId, // 查核id
  542. checkGroupId: this.checkGroupId, //查核组id
  543. planStartDate: this.startDate, // 计划开始时间
  544. planEndDate: this.endDate // 计划结束时间
  545. }
  546. if (this.multiple == 'true') {
  547. uni.navigateTo({
  548. url: `/pages/allocationPerson/allocationPerson?details=${encodeURIComponent(JSON.stringify(details))}`
  549. });
  550. }
  551. if (this.multiple == 'false') {
  552. const _detailsTwo = {
  553. ...details,
  554. checkedList: [deptId]
  555. }
  556. uni.navigateTo({
  557. url: `/pages/batchDistribution/batchDistribution?details=${encodeURIComponent(JSON.stringify(_detailsTwo))}`
  558. });
  559. }
  560. }
  561. },
  562. // 获取查核列表
  563. getCheckList(checkId, situationType) {
  564. const that = this;
  565. this.$store.dispatch({
  566. type: 'editCheckList/commActions',
  567. key: "getCheckList",
  568. data: {
  569. checkId,
  570. situationType
  571. }
  572. }).then(data => {
  573. this.$store.dispatch({
  574. type: "commActions",
  575. key: "getDateStr",
  576. }).then((dateStr) => {
  577. if (dateStr) {
  578. const _data = data.map(item => {
  579. if (item.endDate && moment(item.endDate)
  580. .valueOf() < moment(dateStr).valueOf()) {
  581. return {
  582. ...item,
  583. completeState: true // true:说明计划已结束, 不能编辑查核人和计划时间
  584. }
  585. } else {
  586. return item
  587. }
  588. });
  589. //copiedCheckList用于搜索/筛选
  590. that.copiedCheckList = _data;
  591. this.selectables = [{
  592. id: 0,
  593. name: '全部',
  594. count: _data.length
  595. },
  596. {
  597. id: 1,
  598. name: '进行中',
  599. count: (_data.filter(item => item.completeDes == '进行中')).length
  600. },
  601. {
  602. id: 2,
  603. name: '未分配',
  604. count: (_data.filter(item => item.completeDes == '未分配')).length
  605. },
  606. {
  607. id: 3,
  608. name: '已完成',
  609. count: (_data.filter(item => item.completeDes == '已完成')).length
  610. }
  611. ]
  612. this.$store.commit({
  613. type: 'editCheckList/comChangeState',
  614. key: 'checkList',
  615. data: _data
  616. });
  617. }
  618. });
  619. });
  620. },
  621. // 获取计划列表
  622. getPlanList() {
  623. this.$store.dispatch({
  624. type: 'planList/commActions',
  625. payload: {
  626. key: 'planList',
  627. data: {
  628. situationId: this.situationId,
  629. }
  630. }
  631. }).then((data) => {
  632. this.planList = data || [];
  633. })
  634. }
  635. }
  636. }
  637. </script>
  638. <style lang="less" scoped>
  639. .editCheckList {
  640. padding-top: 30rpx;
  641. }
  642. .selectableList {
  643. display: flex;
  644. width: 100%;
  645. flex-direction: column;
  646. height: 50vh;
  647. padding-top: 50rpx;
  648. box-sizing: border-box;
  649. border-radius: 25rpx 25rpx 0px 0px;
  650. background-color: #FFFFFF;
  651. .listWrap {
  652. height: calc(50vh - 75rpx);
  653. overflow-y: scroll;
  654. .list {
  655. height: 87.5rpx;
  656. line-height: 87.5rpx;
  657. text-align: center;
  658. font-size: 30rpx;
  659. font-family: SourceHanSansCN-Normal, SourceHanSansCN;
  660. font-weight: 400;
  661. color: #8A8F99;
  662. &.on {
  663. font-weight: 500;
  664. color: #3377FF;
  665. }
  666. }
  667. }
  668. .btnGroup {
  669. display: flex;
  670. width: 100%;
  671. flex-direction: row;
  672. justify-content: center;
  673. align-items: center;
  674. .btn {
  675. width: 50%;
  676. height: 75rpx;
  677. line-height: 75rpx;
  678. text-align: center;
  679. font-size: 22.5rpx;
  680. font-family: SourceHanSansCN-Normal, SourceHanSansCN;
  681. font-weight: 400;
  682. color: #3377FF;
  683. }
  684. .cancelBtn {
  685. border-top: 0.62rpx solid #DADEE6;
  686. }
  687. .confirmBtn {
  688. color: #FFFFFF;
  689. background: #3377FF;
  690. }
  691. }
  692. }
  693. .searchBar {
  694. width: 93%;
  695. margin: 0 auto;
  696. .filter {
  697. display: flex;
  698. flex-direction: row;
  699. justify-content: space-between;
  700. align-items: center;
  701. margin-bottom: 15rpx;
  702. padding: 0 25rpx;
  703. background: #FFFFFF;
  704. .selecter {
  705. display: flex;
  706. width: 25%;
  707. height: 70rpx;
  708. flex-direction: row;
  709. justify-content: space-between;
  710. align-items: center;
  711. padding-right: 25rpx;
  712. border-right: 0.62rpx solid #DADEE6;
  713. &>text {
  714. width: 112.5rpx;
  715. font-size: 25rpx;
  716. font-family: SourceHanSansCN-Medium, SourceHanSansCN;
  717. font-weight: 500;
  718. color: #292C33;
  719. text-overflow: ellipsis;
  720. overflow: hidden;
  721. white-space: nowrap;
  722. }
  723. &>image {
  724. width: 11.25rpx;
  725. height: 7.5rpx;
  726. }
  727. }
  728. .searchBar {
  729. display: flex;
  730. width: 75%;
  731. flex-direction: row;
  732. align-items: center;
  733. height: 70rpx;
  734. padding-left: 25rpx;
  735. border-radius: 5rpx;
  736. .serachIcon {
  737. width: 25rpx;
  738. height: 25rpx;
  739. }
  740. .searchVal {
  741. width: 79%;
  742. padding-left: 25rpx;
  743. font-size: 25rpx;
  744. font-family: SourceHanSansCN-Normal, SourceHanSansCN;
  745. font-weight: 400;
  746. color: #292C33;
  747. }
  748. .searchBtn {
  749. padding-left: 25rpx;
  750. font-size: 25rpx;
  751. font-family: SourceHanSansCN-Normal, SourceHanSansCN;
  752. font-weight: 400;
  753. color: #3377FF;
  754. white-space: nowrap;
  755. border-left: 1rpx solid #DADEE6;
  756. }
  757. }
  758. }
  759. }
  760. .check-map-list {
  761. display: flex;
  762. flex-direction: column;
  763. height: 100%;
  764. .scroll-y {
  765. flex: 1;
  766. height: 100%;
  767. padding-bottom: 95rpx;
  768. &.noBottom {
  769. padding-bottom: 0;
  770. }
  771. .item {
  772. position: relative;
  773. border-radius: 5rpx;
  774. .title-wrap {
  775. padding-left:60rpx;
  776. text {
  777. white-space: nowrap;
  778. text-overflow: ellipsis;
  779. overflow: hidden;
  780. }
  781. }
  782. .status {
  783. position: absolute;
  784. right: 0;
  785. top:0;
  786. display: flex;
  787. justify-content: center;
  788. width: 110rpx;
  789. height: 35rpx;
  790. color: #FFFFFF;
  791. text-align: center;
  792. line-height: 35rpx;
  793. // border-radius: 20rpx;
  794. background: url(../../static/white_statusbg.png);
  795. background-size:35rpx;
  796. background-repeat: no-repeat;
  797. &.noStart {
  798. background-color: #eee;
  799. }
  800. &.checking {
  801. background-color: #FFCC66;
  802. }
  803. &.completed {
  804. background-color: #29CC96;
  805. }
  806. }
  807. }
  808. .checkPoint {
  809. position: absolute;
  810. top: 30rpx;
  811. left: 25rpx;
  812. width: 25rpx;
  813. height: 25rpx;
  814. z-index: 2;
  815. border-radius: 50%;
  816. border: 2.5rpx solid #C3CAD9;
  817. .innerImg {
  818. width: 100%;
  819. height: 100%;
  820. }
  821. &.checked {
  822. border: none;
  823. }
  824. }
  825. .footer {
  826. .row {
  827. display: flex;
  828. align-items: center;
  829. justify-content: space-between;
  830. border-top: 1px solid #DADEE6;
  831. height: 62.5rpx;
  832. padding: 0 25rpx;
  833. font-size: 22.5rpx;
  834. .label {
  835. color: #525866;
  836. }
  837. .labelVal {
  838. display: flex;
  839. flex-direction: row;
  840. align-items: center;
  841. height: 100%;
  842. .base-text {
  843. flex: 1;
  844. line-height: 62.5rpx;
  845. color: #B8BECC;
  846. font-weight: normal;
  847. margin-bottom: 0;
  848. }
  849. .center-text {
  850. padding: 0 5rpx;
  851. color: #292C33;
  852. }
  853. .black-color {
  854. color: #292C33;
  855. }
  856. }
  857. .arrow {
  858. width: 12.5rpx;
  859. height: 21.25rpx;
  860. }
  861. &:last-child {
  862. border-top: none;
  863. }
  864. }
  865. }
  866. }
  867. .bottomBtnGroup {
  868. position: fixed;
  869. width: 100%;
  870. height: 87.5rpx;
  871. bottom: 0;
  872. left: 0;
  873. display: flex;
  874. flex-direction: row;
  875. background-color: #FFFFFF;
  876. .selectAll {
  877. position: relative;
  878. display: flex;
  879. width: 20%;
  880. height: 100%;
  881. justify-content: center;
  882. align-items: center;
  883. font-size: 22.5rpx;
  884. font-family: SourceHanSansCN-Normal, SourceHanSansCN;
  885. font-weight: 400;
  886. color: #3377FF;
  887. &::after {
  888. position: absolute;
  889. display: inline-block;
  890. content: '';
  891. right: 0;
  892. width: 1rpx;
  893. height: 40%;
  894. background-color: #82848A;
  895. }
  896. }
  897. .leftBtn,
  898. .rightBtn {
  899. display: flex;
  900. width: 40%;
  901. height: 100%;
  902. justify-content: center;
  903. align-items: center;
  904. font-size: 22.5rpx;
  905. font-family: SourceHanSansCN-Normal, SourceHanSansCN;
  906. font-weight: 400;
  907. color: #3377FF;
  908. }
  909. .rightBtn {
  910. color: #FFFFFF;
  911. background-color: #3377FF;
  912. }
  913. }
  914. .null {
  915. margin-top: 375rpx;
  916. text-align: center;
  917. color: #999;
  918. }
  919. }
  920. </style>