editCheckList.vue 24 KB

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