integral_entry_n.vue 23 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699
  1. <template>
  2. <div>
  3. <van-nav-bar :title="type==1?'录入A分':'奖扣B分'" left-text="返回" @click-left="$route_back" left-arrow></van-nav-bar>
  4. <div class="body_com">
  5. <scroller >
  6. <van-cell-group>
  7. <EmployeeSelectorCell
  8. use_employee_list
  9. required
  10. bar_title="选择录入对象"
  11. title="录入对象"
  12. name="录入对象"
  13. v-validate="'required'"
  14. :employee_list="manage_scope"
  15. v-model="employee_list"
  16. :multi="true"
  17. :max="10"
  18. ></EmployeeSelectorCell>
  19. </van-cell-group>
  20. <div v-for="(item, index) in diy_rule_item" :key="index">
  21. <van-cell-group>
  22. <div class="item-title" slot="title">
  23. {{'第'+(index+1)+'条'}}
  24. <a v-if="diy_rule_item.length > 1"
  25. class="item-del-btn color-blue"
  26. @click="diy_item_del(index)"
  27. >删除</a>
  28. </div>
  29. <van-cell title="指定规则">
  30. <template slot="right-icon">
  31. <div>
  32. <van-switch v-model="item.diy" inactive-color="#9a9a9a" size="24"/>
  33. </div>
  34. </template>
  35. </van-cell>
  36. <RuleCategorySelectorCell
  37. v-if="item.diy && showRule"
  38. required
  39. name="选择规则"
  40. v-validate="'required'"
  41. ref="rule_selector"
  42. title="选择规则"
  43. v-model="item.items"
  44. :multi="false"
  45. :max="20"
  46. :pt_code="pt_code"
  47. ></RuleCategorySelectorCell>
  48. <CategorySelectorCell
  49. v-if="!item.diy"
  50. title="选择分类"
  51. name="选择分类"
  52. v-validate="'required'"
  53. v-model="item.rule_cate"
  54. :max="1"
  55. :multi="false"
  56. required
  57. ></CategorySelectorCell>
  58. <NumberInput
  59. v-model="item.point"
  60. :min.sync="item.min_point"
  61. title="积分"
  62. name="积分"
  63. required
  64. v-validate="'required'"
  65. :border="item.point_remark == ''"
  66. :max.sync="item.max_point"
  67. ></NumberInput>
  68. <div v-if="item.point_remark != ''" class="point-remark-box">{{item.point_remark}}</div>
  69. <DateCell
  70. required
  71. title="发生时间"
  72. v-validate="'required'"
  73. name="日期"
  74. v-model="item.event_time"
  75. ></DateCell>
  76. <div v-if="!isCreator">
  77. <EmployeeSelectorCell
  78. bar_title="选择递交审批人"
  79. title="递交审批"
  80. name="递交审批"
  81. v-model="item.reviewer_list"
  82. :multi="false"
  83. :max="1"
  84. use_employee_list
  85. :employee_list="reviewed_score"
  86. ></EmployeeSelectorCell>
  87. </div>
  88. <van-cell required>
  89. <Mtextarea v-model="item.remark" placeholder="请输入事件内容" name="申请事由" v-validate="'required|max:100'" :text_max="100" :imgs_max="3" images speech:imgs.sync="item.files"></Mtextarea>
  90. </van-cell>
  91. </van-cell-group>
  92. </div>
  93. <van-cell-group>
  94. <van-cell class="add_item_cell" title="增加一条" @click="add_diy_item" icon="plus"></van-cell>
  95. </van-cell-group>
  96. <div style="padding:0.32rem;">
  97. <van-button size="large" @click="data_verify" :disabled="subloading" type="info">提交</van-button>
  98. </div>
  99. <div style="height: 1rem;"></div>
  100. </scroller>
  101. </div>
  102. <van-popup v-model="showRes" style=" width: 100vw; height: 100vh;">
  103. <div style="background-color: #26A2FF;"></div>
  104. <van-nav-bar title="返回结果" left-text="返回" @click-left="back()" left-arrow></van-nav-bar>
  105. <div class="rentrun">
  106. <div class="successful_alert">
  107. <van-row class="head_icon" type="flex" align="center" justify="center">
  108. <icon name="overdue_deduction" v-if="total === err_count" class="overdue_deduction"></icon>
  109. <icon name="sucessful_icon" v-else class="sucessful_icon"></icon>
  110. </van-row>
  111. <van-row style="text-align: center; padding: 0.32rem;">
  112. <van-col v-if="total === err_count" span="24">提交失败</van-col>
  113. <van-col v-else span="24">提交成功</van-col>
  114. </van-row>
  115. </div>
  116. <van-row class="row_line_bg">
  117. <van-col span="24">
  118. <span class="color_blue">提交成功: {{success_count}}</span> /
  119. <span class="color_red">提交失败:{{err_count}}</span> /
  120. <span class="color_grey">已提交:{{total}}</span>
  121. </van-col>
  122. </van-row>
  123. <div class="body_com result has_header">
  124. <scroller>
  125. <van-cell-group>
  126. <van-cell v-for="(item,index) in list" :key="index" :label="item.msg || item.rule_item" >
  127. <template slot="title">
  128. <Wxopendata type="userName" :openid="item.target"></Wxopendata>
  129. </template>
  130. <template #value>
  131. <span v-if="item.point != 0" :class="item.point>0?'color_blue':'color_red'">{{item.point}}</span>
  132. </template>
  133. </van-cell>
  134. </van-cell-group>
  135. </scroller>
  136. </div>
  137. <van-row>
  138. <van-col span="12" :offset="6">
  139. <van-button type="info" @click="back()" block>我知道了</van-button>
  140. </van-col>
  141. </van-row>
  142. </div>
  143. </van-popup>
  144. </div>
  145. </template>
  146. <script>
  147. import request from '@/utils/request'
  148. import {getRole_four2} from '@/utils/auth'
  149. import Mtextarea from '@/components/common/Mtextarea'
  150. import NumberInput from '@/components/common/NumberInput'
  151. import EmployeeSelectorCell from '@/components/common/EmployeeSelectorCell'
  152. import RuleCategorySelectorCell from '@/components/common/RuleCategorySelectorCell1'
  153. import CategorySelectorCell from '@/components/common/CategorySelectorCell'
  154. import DateCell from '@/components/common/DateCell'
  155. import moment from 'moment'
  156. import Vue from 'vue'
  157. import {Switch} from 'vant'
  158. var getRole=getRole_four2();
  159. Vue.use(Switch)
  160. export default {
  161. name: 'integral_entry_b',
  162. components: {
  163. DateCell,
  164. Mtextarea,
  165. EmployeeSelectorCell,
  166. RuleCategorySelectorCell,
  167. CategorySelectorCell,
  168. NumberInput
  169. },
  170. watch: {
  171. rule_item: {
  172. handler (val) {
  173. let date = moment().format('YYYY-MM-DD')
  174. let pt_id = 0
  175. for (let i in this.types_list_array) {
  176. if (this.types_list_array[i].code == 'BF') {
  177. pt_id = this.types_list_array[i].id
  178. }
  179. }
  180. for (let i in val) {
  181. if (typeof (val[i]['reviewer_id']) === 'undefined') {
  182. this.rule_item[i]['reviewer_id'] = 0
  183. }
  184. if (typeof (val[i]['rule_id']) === 'undefined') {
  185. this.rule_item[i]['rule_id'] = val[i].rule_id
  186. }
  187. if (typeof (val[i]['item_id']) === 'undefined') {
  188. this.rule_item[i]['item_id'] = val[i].id
  189. }
  190. if (typeof (val[i]['event_time']) === 'undefined') {
  191. this.rule_item[i]['event_time'] = date
  192. }
  193. if (typeof (val[i]['point']) === 'undefined') {
  194. this.rule_item[i]['point'] = val[i].min_point
  195. }
  196. if (typeof (val[i]['remark']) === 'undefined') {
  197. this.rule_item[i]['remark'] = ''
  198. }
  199. if (typeof (val[i]['pt_id']) === 'undefined') {
  200. this.rule_item[i]['pt_id'] = 0
  201. }
  202. if (typeof (val[i]['files']) === 'undefined') {
  203. this.rule_item[i]['files'] = []
  204. }
  205. if (typeof (val[i]['remark']) === 'undefined') {
  206. this.rule_item[i]['remark'] = ''
  207. }
  208. if (typeof (val[i]['reviewer_list']) === 'undefined') {
  209. this.rule_item[i]['reviewer_list'] = []
  210. }
  211. if (val[i].reviewer_list && val[i].reviewer_list.length > 0 && val[i]['reviewer_id'] != val[i].reviewer_list[0].id) {
  212. this.rule_item[i]['reviewer_id'] = val[i].reviewer_list[0].id
  213. } else if (val[i].reviewer_list.length == 0) {
  214. this.rule_item[i]['reviewer_id'] = 0
  215. }
  216. }
  217. if (this.rule_item.length > 0) {
  218. this.entry_type = 1
  219. }
  220. if (this.rule_item_change_count < 1) {
  221. this.rule_item_change_count++
  222. this.rule_item = JSON.parse(JSON.stringify(this.rule_item))
  223. } else if (this.rule_item_change_count == 1) {
  224. this.rule_item_change_count = 0
  225. }
  226. },
  227. deep: true
  228. },
  229. diy_rule_item: {
  230. handler (val, old) {
  231. for (let i in val) {
  232. if (!val[i].diy) {
  233. if (val[i].rule_cate && val[i].rule_cate.length > 0 && val[i]['rule_id'] != val[i].rule_cate[0].id) {
  234. this.diy_rule_item[i]['rule_id'] = val[i].rule_cate[0].id
  235. } else if (val[i].rule_cate.length == 0) {
  236. this.diy_rule_item[i]['rule_id'] = 0
  237. this.diy_rule_item[i]['item_id'] = 0
  238. }
  239. this.diy_rule_item[i]['point_remark'] = ''
  240. delete this.diy_rule_item[i]['min_point']
  241. delete this.diy_rule_item[i]['max_point']
  242. } else {
  243. if (val[i].items && val[i].items.length > 0 && val[i]['item_id'] != val[i].items[0].id) {
  244. this.diy_rule_item[i]['item_id'] = val[i].items[0].id
  245. this.diy_rule_item[i]['rule_id'] = val[i].items[0].rule_id
  246. this.diy_rule_item[i]['point'] = val[i].items[0].min_point
  247. this.diy_rule_item[i]['min_point'] = val[i].items[0].min_point
  248. this.diy_rule_item[i]['max_point'] = val[i].items[0].max_point
  249. this.diy_rule_item[i]['remark'] = val[i].items[0].remark
  250. if (val[i].items[0].range_type == 1) {
  251. this.diy_rule_item[i]['point_remark'] = '固定:' + val[i].items[0].min_point + this.types_list_map[val[i].items[0].pt_id].name
  252. } else {
  253. this.diy_rule_item[i]['point_remark'] = '范围(可修改):' + val[i].items[0].min_point + '至' + val[i].items[0].max_point + this.types_list_map[val[i].items[0].pt_id].name + ''
  254. }
  255. } else if (val[i].items.length == 0) {
  256. this.diy_rule_item[i]['rule_id'] = 0
  257. this.diy_rule_item[i]['item_id'] = 0
  258. this.diy_rule_item[i]['point_remark'] = ''
  259. }
  260. }
  261. if (val[i].reviewer_list && val[i].reviewer_list.length > 0 && val[i]['reviewer_id'] != val[i].reviewer_list[0].id) {
  262. this.diy_rule_item[i]['reviewer_id'] = val[i].reviewer_list[0].id
  263. } else if (val[i].reviewer_list.length == 0) {
  264. this.diy_rule_item[i]['reviewer_id'] = 0
  265. }
  266. }
  267. },
  268. deep: true
  269. },
  270. employee_list: function (val) {
  271. if (val.length > 0) {
  272. let superior_arr = []
  273. this.data.members = []
  274. // this.reviewed_score = []
  275. let employee_map = window.plus ? JSON.parse(plus.storage.getItem('SET_EMPLOYEE_MAP')) : JSON.parse(localStorage.getItem('SET_EMPLOYEE_MAP'))
  276. val.forEach(element => {
  277. this.data.members.push(element.id)
  278. if (employee_map[element.id].superior_list) {
  279. superior_arr.push(employee_map[element.id].superior_list)
  280. }
  281. })
  282. // let reviewed_arr = this.intersection(superior_arr)
  283. // for (const i in employee_map) {
  284. // reviewed_arr.findIndex((item) => {
  285. // if (item == employee_map[i].id) {
  286. // this.reviewed_score.push(employee_map[i])
  287. // }
  288. // })
  289. // }
  290. } else {
  291. this.data.members = []
  292. // this.reviewed_score = []
  293. }
  294. }
  295. },
  296. data () {
  297. let date = moment().format('YYYY-MM-DD')
  298. let types_list_array = this.$store.getters.point_types
  299. return {
  300. isNeed:this.$getCache('isAndroid')==1? false: true,
  301. manage_scope: this.$store.getters.user_info.employee_detail.manage_scope,
  302. entry_type: 1,
  303. types_list_array: types_list_array,
  304. types_list_map: {},
  305. pt_code: 'BF',
  306. pt_id: null,
  307. data: {
  308. members: [],
  309. items: []
  310. },
  311. diy_rule_item: [{
  312. checked: true,
  313. diy: true,
  314. items: [],
  315. event_time: date,
  316. files: [],
  317. item_id: 0,
  318. point: 0,
  319. pt_id: '0',
  320. remark: '',
  321. point_remark: '',
  322. reviewer_id: 0,
  323. rule_id: 0,
  324. reviewer_list: [],
  325. rule_cate: []
  326. }],
  327. types_list: {},
  328. rule_item: [],
  329. rule_item_change_count: 0,
  330. send_loading: false,
  331. employee_list: [],
  332. // 1为A分,2为B分
  333. type: this.$route.query.type,
  334. subloading: false,
  335. showRule: false,
  336. showRes: false,
  337. list: [],
  338. err_count: '',
  339. success_count: '',
  340. total: '',
  341. reviewed_score: [],
  342. isCreator:getRole
  343. }
  344. },
  345. methods: {
  346. back () {
  347. this.showRes = false
  348. this.$route_back()
  349. },
  350. init_diy_item () {
  351. let date = moment().format('YYYY-MM-DD')
  352. let pt_id = 0
  353. for (let i in this.types_list_array) {
  354. if (this.types_list_array[i].code == 'BF' && this.type == 2) {
  355. pt_id = this.types_list_array[i].id
  356. }
  357. if (this.types_list_array[i].code == 'AF' && this.type == 1) {
  358. pt_id = this.types_list_array[i].id
  359. }
  360. }
  361. this.diy_rule_item = [
  362. {
  363. checked: true,
  364. diy: true,
  365. point_remark: '',
  366. items: [],
  367. event_time: date,
  368. files: [],
  369. item_id: 0,
  370. point: 0,
  371. pt_id: '0',
  372. remark: '',
  373. reviewer_id: 0,
  374. rule_id: 0,
  375. reviewer_list: [],
  376. rule_cate: []
  377. }
  378. ]
  379. },
  380. add_diy_item () {
  381. let date = moment().format('YYYY-MM-DD')
  382. this.diy_rule_item.push({
  383. checked: true,
  384. diy: true,
  385. point_remark: '',
  386. event_time: date,
  387. files: [],
  388. items: [],
  389. item_id: 0,
  390. point: 0,
  391. pt_id: '0',
  392. remark: '',
  393. reviewer_id: 0,
  394. rule_id: 0,
  395. reviewer_list: [],
  396. rule_cate: []
  397. })
  398. },
  399. entry_diy () {
  400. this.$refs['rule_selector'].show_dept_selector = false
  401. this.entry_type = 2
  402. this.rule_item = []
  403. },
  404. item_del (index) {
  405. this.rule_item.splice(index, 1)
  406. },
  407. diy_item_del (index) {
  408. this.diy_rule_item.splice(index, 1)
  409. },
  410. isNumber (value) {
  411. return !Number.isNaN(Number(value))
  412. },
  413. data_verify () {
  414. let self = this
  415. self.$validator.validateAll().then(result => {
  416. if (!result) {
  417. self.$notify({type: 'danger', message: self.$validator.errors.items[0].msg})
  418. } else {
  419. const pass = this.diy_rule_item.every(item => this.isNumber(item.point) && item.point !== 0)
  420. if (pass) {
  421. this.validatePointPermission(this.diy_rule_item, err => {
  422. if (err) {
  423. this.$notify({type: 'danger', message: err.message})
  424. } else {
  425. self.subloading = true
  426. this.send()
  427. }
  428. })
  429. } else {
  430. this.$notify({type: 'danger', message: '积分不能为0'})
  431. }
  432. }
  433. })
  434. },
  435. validatePointPermission (items, callback) {
  436. const userInfo = this.$store.getters.user_info
  437. const pointConfig = userInfo.point_config
  438. const index = pointConfig.point_limit.findIndex(o => o.pt_id === 3)
  439. if (index < 0 || userInfo.is_creator === 1) {
  440. callback()
  441. } else {
  442. const maxPointPermission = parseInt(pointConfig.point_limit[index].point)
  443. /** maxPointPermission 等于-1时 不做任何限制 */
  444. if (maxPointPermission === -1) {
  445. callback()
  446. } else {
  447. const ruleLimitCheck = userInfo.site_config.rule_limit_check
  448. // 处理 ruleLimitCheck ( 未完成 0914 )
  449. /** 在 ruleLimitCheck 为0的时候, 超出积分权限都要选择审批人提交 */
  450. // if (ruleLimitCheck === 0) {
  451. this.validateRuleLimit(items, callback, (a) => {
  452. return !((a.reviewer_id && a.point !== 0 && a.rule_id > 0) ||
  453. (a.reviewer_id <= 0 && a.item_id > 0 && ruleLimitCheck && a.point !== 0 && a.point <= maxPointPermission && Math.abs(a.point) <= maxPointPermission) ||
  454. (a.reviewer_id <= 0 && !ruleLimitCheck && this.type == 2 && a.rule_id > 0) ||
  455. (a.reviewer_id <= 0 && a.item_id >= 0 && a.point !== 0 && a.point <= maxPointPermission && Math.abs(a.point) <= maxPointPermission && a.rule_id > 0))
  456. })
  457. // } else {
  458. // /** 在 ruleLimitCheck 为1的时候, 1.选择了规则就不强制选择申请人 2.未选规则超出权限分要提交审批人 */
  459. // // this.validateRuleLimit(items, callback, b => !b.diy && b.point > maxPointPermission)
  460. // }
  461. }
  462. }
  463. },
  464. validateRuleLimit (items, callback, conditionCallback) {
  465. if (typeof callback !== 'function') {
  466. throw new TypeError('callback is not a function')
  467. }
  468. const res = items.every((item, index) => {
  469. if (conditionCallback(item, index)) {
  470. index === 0 ? callback(new Error(`第${index + 1}条输入分值超出权限,请选择审批人递交`)) : callback(new Error(`第${index + 1}条输入分值超出权限,请选择审批人递交`))
  471. return false
  472. }
  473. return true
  474. })
  475. res && callback()
  476. },
  477. send () {
  478. let self = this
  479. self.send_loading = true
  480. self.$toast.loading({
  481. message: '正在处理'
  482. })
  483. let data = null
  484. // self.diy_rule_item[0].pt_id = self.pt_id
  485. this.diy_rule_item.forEach(element => {
  486. element.pt_id = self.pt_id
  487. })
  488. self.data.items = self.diy_rule_item
  489. data = self.data
  490. request('post', self.type == 1 ? '/api/integral/review/a/entry' : '/api/integral/point/entry', data).then(res => {
  491. self.send_loading = false
  492. self.$toast.clear()
  493. if (res.data.code == 1) {
  494. const resultData = res.data.data
  495. this.list = resultData.list
  496. this.err_count = resultData.fail_count
  497. this.success_count = resultData.success_count
  498. this.total = resultData.total
  499. this.showRes = true
  500. let date = moment().format('YYYY-MM-DD')
  501. let types_list_array = self.$store.getters.point_types
  502. let pt_id = 0
  503. for (let i in types_list_array) {
  504. if (types_list_array[i].code == 'BF' && self.type == 2) {
  505. pt_id = types_list_array[i].id
  506. }
  507. if (types_list_array[i].code == 'AF' && self.type == 1) {
  508. pt_id = types_list_array[i].id
  509. }
  510. }
  511. self.data.members = []
  512. self.data.items = []
  513. self.rule_item = []
  514. self.employee_list = []
  515. self.diy_rule_item = [{
  516. checked: true,
  517. diy: true,
  518. items: [],
  519. point_remark: '',
  520. event_time: date,
  521. files: [],
  522. item_id: 0,
  523. point: 0,
  524. pt_id: pt_id,
  525. remark: '',
  526. reviewer_id: 0,
  527. rule_id: 0,
  528. reviewer_list: [],
  529. rule_cate: []
  530. }]
  531. if (window.plus) {
  532. setTimeout(() => {
  533. plus.navigator.setStatusBarStyle('dark')
  534. document.documentElement.style.backgroundColor = '#fff'
  535. }, 100)
  536. }
  537. } else {
  538. self.$toast(res.data.msg)
  539. }
  540. }).catch(e => {
  541. self.send_loading = false
  542. self.$toast.clear()
  543. }).finally(() => { self.subloading = false })
  544. },
  545. intersection (arr) {
  546. const arrSet = []
  547. const intersectionSet = new Set()
  548. arr.forEach(items => {
  549. arrSet.push(new Set(items.map(item => item.id)))
  550. items.forEach(item => intersectionSet.add(item.id))
  551. })
  552. return [...intersectionSet].filter(item => arrSet.every(set => set.has(item)))
  553. }
  554. },
  555. mounted () {
  556. this.reviewed_score = this.$store.getters.user_info.employee_detail.superior_list
  557. for (let i in this.types_list_array) {
  558. this.types_list_map[this.types_list_array[i].id] = this.types_list_array[i]
  559. }
  560. //刷新当前角色下级上级
  561. request('get', '/api/employee/detail').then(res => {
  562. let list = res.data.data.user
  563. this.manage_scope = list.employee_detail.manage_scope
  564. this.reviewed_score = list.employee_detail.superior_list
  565. })
  566. },
  567. activated () {
  568. this.type = this.$route.query.type
  569. for (let i in this.types_list_array) {
  570. if (this.types_list_array[i].code == 'BF' && this.type == 2) {
  571. this.pt_id = this.types_list_array[i].id
  572. }
  573. if (this.types_list_array[i].code == 'AF' && this.type == 1) {
  574. this.pt_id = this.types_list_array[i].id
  575. }
  576. }
  577. this.pt_code = this.$route.query.type == 2 ? 'BF' : 'AF'
  578. this.showRule = false
  579. this.$nextTick(() => {
  580. this.showRule = true
  581. })
  582. },
  583. }
  584. </script>
  585. <style scoped lang="less">
  586. .body_com {
  587. height: calc(100% - 0.92rem);
  588. overflow-y: scroll;
  589. position: relative;
  590. }
  591. .body_com.result{
  592. height: calc(100vh - 6.6rem);
  593. position: relative;
  594. }
  595. .add_item_cell .van-icon {
  596. color: #1989fa;
  597. }
  598. .add_item_cell .van-cell__title span {
  599. color: #1989fa;
  600. }
  601. .color-blue {
  602. color: #1989fa;
  603. }
  604. .item-del-btn {
  605. float: right;
  606. }
  607. .point-remark-box {
  608. color: #969799;
  609. padding: 0.16rem 0.32rem;
  610. position: relative;
  611. padding-top: 0;
  612. padding-left: 2.1rem;
  613. font-size: 0.24rem;
  614. }
  615. .point-remark-box:after {
  616. position: absolute;
  617. box-sizing: border-box;
  618. content: ' ';
  619. pointer-events: none;
  620. right: 0;
  621. bottom: 0;
  622. left: 0.32rem;
  623. border-bottom: 0.02rem solid #ebedf0;
  624. -webkit-transform: scaleY(0.5);
  625. transform: scaleY(0.5);
  626. }
  627. .rentrun {
  628. width:100vw;
  629. background: #fff;
  630. }
  631. .successful_alert{
  632. padding-top:0.5rem;
  633. }
  634. .successful_alert /deep/ .head_icon .sucessful_icon{
  635. width:1.28rem;
  636. height:1.28rem;
  637. color:#26A2FF;
  638. padding-top:0.5rem;
  639. }
  640. .successful_alert /deep/ .head_icon .overdue_deduction{
  641. width:1.28rem;
  642. height:1.28rem;
  643. color:#F56C6C;
  644. padding-top:0.5rem;
  645. }
  646. .row_line_bg{
  647. background: #f1f1f1;
  648. font-size: 0.32rem;
  649. padding: 0.1rem 0.32rem;
  650. }
  651. .buttom_btn{
  652. line-height: 0.83rem;
  653. text-align: center;
  654. font-size: 0.32rem;
  655. position: relative;
  656. /* color: #909399 */
  657. }
  658. .buttom_btn.one::after{
  659. content: '';
  660. width: 1px;
  661. height: 0.85rem;
  662. background: #f1f1f1;
  663. display: block;
  664. position: absolute;
  665. right: 0;
  666. top: 0;
  667. bottom: 0;
  668. }
  669. .color_blue{
  670. color:#26A2FF;
  671. }
  672. .color_red{
  673. color: #F56C6C;
  674. }
  675. .color_grey{
  676. color: #909399;
  677. }
  678. </style>