incidentDetail.vue 23 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666
  1. <template>
  2. <view class="incidentDetail">
  3. <view class="head">
  4. <view class="tab" :class="{active: tab.value === dataInfo.tabActiveValue}" v-for="tab in dataInfo.tabs" :key="tab.id" @click="clickTab(tab.value)">
  5. {{tab.name}}<text v-if="tab.num !== ''">({{tab.num}})</text>
  6. </view>
  7. </view>
  8. <scroll-view scroll-y class="body">
  9. <!-- 工单信息 -->
  10. <template v-if="dataInfo.tabActiveValue === '1'">
  11. <view class="detail_head">
  12. <text class="title">报修信息</text>
  13. <view class="other">
  14. <text class="priority" :style="priorityStyle(dataInfo.incidentData.priority)">{{dataInfo.incidentData.priority ? dataInfo.incidentData.priority.name + ' ' : ''}}</text>
  15. <view class="status" :style="stateStyle(dataInfo.incidentData.state)">{{dataInfo.incidentData.state ? dataInfo.incidentData.state.name : ''}}</view>
  16. </view>
  17. </view>
  18. <view class="detail_item_wrap">
  19. <view class="deital_item">
  20. <text class="name">单号:</text>
  21. <text class="value">{{dataInfo.incidentData.incidentsign || '无'}}</text>
  22. </view>
  23. <view class="deital_item">
  24. <text class="name">故障现象:</text>
  25. <text class="value">{{dataInfo.incidentData.category ? dataInfo.incidentData.category.mutiCategory : '无'}}</text>
  26. </view>
  27. <view class="deital_item">
  28. <text class="name">故障描述:</text>
  29. <text class="value">{{dataInfo.incidentData.description || '无'}}</text>
  30. </view>
  31. <view class="deital_item">
  32. <text class="name">报修图片:</text>
  33. <view class="value img">
  34. <image class="imgItem" :src="img.thumbFilePath" mode="aspectFill" v-for="(img, i) in dataInfo.repairImgs" :key="i" @click="previewImg(i, 'repairImgs')"></image>
  35. </view>
  36. </view>
  37. <view class="deital_item">
  38. <text class="name">联系人:</text>
  39. <text class="value">{{dataInfo.incidentData.contacts || '无'}}</text>
  40. <text v-if="dataInfo.incidentData.contactsInformation" @click="makePhoneCall(dataInfo.incidentData.contactsInformation)">{{dataInfo.incidentData.contactsInformation}}<uni-icons type="phone-filled" class="phone-filled" :size="18" :color="primaryColor"></uni-icons></text>
  41. </view>
  42. <view class="deital_item">
  43. <text class="name">来电电话:</text>
  44. <view class="value" @click="makePhoneCall(dataInfo.incidentData.incomingPhone)" v-if="dataInfo.incidentData.incomingPhone">{{dataInfo.incidentData.incomingPhone}}<uni-icons type="phone-filled" class="phone-filled" :size="18" :color="primaryColor"></uni-icons></view>
  45. <text class="value" v-else>无</text>
  46. <uni-icons v-if="dataInfo.incidentData.callID" @click="attachmentClick" type="mic-filled" class="mic-filled" :size="22" :color="primaryColor"></uni-icons>
  47. </view>
  48. <view class="deital_item">
  49. <text class="name">报修科室:</text>
  50. <text class="value">{{dataInfo.incidentData.department ? dataInfo.incidentData.department.dept : '无'}}</text>
  51. </view>
  52. <view class="deital_item">
  53. <text class="name">详细地址:</text>
  54. <text class="value" v-if="dataInfo.incidentData.place || dataInfo.incidentData.houseNumber">{{dataInfo.incidentData.place ? (dataInfo.incidentData.place.area.area + dataInfo.incidentData.place.place) : ''}}{{dataInfo.incidentData.houseNumber || ''}}</text>
  55. <text class="value" v-else>无</text>
  56. </view>
  57. <view class="deital_item">
  58. <text class="name">报修人:</text>
  59. <text class="value">{{dataInfo.incidentData.requester ? dataInfo.incidentData.requester.name : '无'}}</text>
  60. </view>
  61. <view class="deital_item">
  62. <text class="name">预约维修时间:</text>
  63. <text class="value">{{dataInfo.incidentData.yyTime || '无'}}</text>
  64. </view>
  65. <view class="deital_item">
  66. <text class="name">受理人:</text>
  67. <text class="value">{{dataInfo.incidentData.acceptUser ? dataInfo.incidentData.acceptUser.name : '无'}}</text>
  68. </view>
  69. <view class="deital_item">
  70. <text class="name">登记时间:</text>
  71. <text class="value">{{formatDate(dataInfo.incidentData.acceptDate, 'yyyy-MM-dd HH:mm')}}</text>
  72. </view>
  73. <view class="deital_item">
  74. <text class="name">逾期解决时间:</text>
  75. <text class="value">{{formatDate(dataInfo.incidentData.overdueTime, 'yyyy-MM-dd HH:mm')}}</text>
  76. </view>
  77. </view>
  78. <view class="detail_head">
  79. <text class="title">处理信息</text>
  80. </view>
  81. <view class="detail_item_wrap">
  82. <view class="deital_item">
  83. <text class="name">处理方式:</text>
  84. <text class="value">{{dataInfo.incidentData.handleCategory ? dataInfo.incidentData.handleCategory.name : '无'}}</text>
  85. <text class="value">处理结果:{{dataInfo.incidentData.closecode ? dataInfo.incidentData.closecode.name : '无'}}</text>
  86. </view>
  87. <view class="deital_item">
  88. <text class="name">处理人:</text>
  89. <text class="value" v-if="dataInfo.incidentData.state.value == 'pending' && dataInfo.incidentData.currentLog">{{dataInfo.incidentData.currentLog.workerName}}<text @click="makePhoneCall(dataInfo.incidentData.currentLog.workerPhone)" v-if="dataInfo.incidentData.currentLog.workerPhone">({{dataInfo.incidentData.currentLog.workerPhone}})<uni-icons type="phone-filled" class="phone-filled" :size="18" :color="primaryColor"></uni-icons></text></text>
  90. <text class="value" v-else-if="dataInfo.incidentData.state.value != 'pending' && dataInfo.incidentData.handlingPersonnelUser">{{dataInfo.incidentData.handlingPersonnelUser.name}}<text @click="makePhoneCall(dataInfo.incidentData.handlingPersonnelUser.phone)" v-if="dataInfo.incidentData.handlingPersonnelUser.phone">({{dataInfo.incidentData.handlingPersonnelUser.phone}})<uni-icons type="phone-filled" class="phone-filled" :size="18" :color="primaryColor"></uni-icons></text></text>
  91. <text class="value" v-else>无</text>
  92. </view>
  93. <view class="deital_item">
  94. <text class="name">处理方案:</text>
  95. <text class="value">{{dataInfo.incidentData.handleDescription || '无'}}</text>
  96. </view>
  97. <view class="deital_item">
  98. <text class="name">处理图片:</text>
  99. <view class="value img">
  100. <image class="imgItem" :src="img.thumbFilePath" mode="aspectFill" v-for="(img, i) in dataInfo.handlerImgs" :key="i" @click="previewImg(i, 'handlerImgs')"></image>
  101. </view>
  102. </view>
  103. <view class="deital_item">
  104. <text class="name">维修总价:</text>
  105. <text class="value">{{dataInfo.incidentData.rsPrice === undefined ? '无' : dataInfo.incidentData.rsPrice + '元'}}</text>
  106. </view>
  107. <view class="deital_item">
  108. <text class="name">协同人:</text>
  109. <text class="value">{{dataInfo.incidentData.synergetic && dataInfo.incidentData.synergetic.length ? dataInfo.incidentData.synergetic.map(v => v.name).join(',') : '无'}}</text>
  110. </view>
  111. <view class="deital_item">
  112. <text class="name">引用知识库:</text>
  113. <text class="value">{{dataInfo.incidentData.solutionNo?dataInfo.incidentData.solutionNo:'未引用'}}</text>
  114. </view>
  115. </view>
  116. </template>
  117. <!-- 维修汇总单 -->
  118. <template v-if="dataInfo.tabActiveValue === '2'">
  119. <view class="detail_head">
  120. <text class="title">耗材清单</text>
  121. </view>
  122. <view class="summaryItem_bodyItem" v-for="item in dataInfo.summaryObj.consumableList" :key="item.id">
  123. <view class="summaryItem_bodyItem_top">
  124. <text class="name ellipsis">{{ item.consumableName }}<template v-if="item.consumableBrandModel">({{ item.consumableBrandModel }})</template></text>
  125. <text class="value">{{ item.consumableEndPrice }}元</text>
  126. </view>
  127. <view class="summaryItem_bodyItem_bottom">
  128. <text class="name">x{{ item.consumablesNum }}{{ item.consumablesUnit }}</text>
  129. <text class="value">总价{{item.consumablesNum * item.consumableEndPrice}}元</text>
  130. </view>
  131. </view>
  132. <view class="summaryItem_bodyItem_total">耗材总价:{{dataInfo.summaryObj.consumablePrice}}元</view>
  133. <view class="detail_head">
  134. <text class="title">工时清单</text>
  135. </view>
  136. <view class="summaryItem_bodyItem" v-for="item in dataInfo.summaryObj.workHourManagementList" :key="item.id">
  137. <view class="summaryItem_bodyItem_top">
  138. <text class="name ellipsis">{{ item.workName }}</text>
  139. <text class="value">{{ item.wage }}元</text>
  140. </view>
  141. <view class="summaryItem_bodyItem_bottom">
  142. <text class="name">x{{ item.workHourNum2 }}{{ item.workUnit }}</text>
  143. <text class="value">总价{{item.workHourNum2 * item.wage}}元</text>
  144. </view>
  145. </view>
  146. <view class="summaryItem_bodyItem_total">工时总价:{{dataInfo.summaryObj.workHourPrice}}元</view>
  147. <view class="summaryItem_total">汇总单总价:{{dataInfo.summaryObj.totalMaintenancePrice}}元</view>
  148. </template>
  149. <!-- 处理流程 -->
  150. <template v-if="dataInfo.tabActiveValue === '3'">
  151. <view class="process_item_wrap">
  152. <view class="process_item" v-for="item in dataInfo.incidentLogList" :key="item.id">
  153. <view class="process_item_top">
  154. <text class="name">{{item.logType ? item.logType.name : ''}}</text>
  155. <text class="value ellipsis" v-if="item.remark">({{item.remark}})</text>
  156. </view>
  157. <view class="process_item_bottom">
  158. <text class="name">{{formatDate(item.startTime, 'yyyy-MM-dd HH:mm:ss')}}</text>
  159. <text class="value" v-if="item.appointorName">{{item.appointorName}}</text>
  160. </view>
  161. </view>
  162. </view>
  163. </template>
  164. <!-- 评价信息 -->
  165. <template v-if="dataInfo.tabActiveValue === '4'">
  166. <view class="detail_head">
  167. <text class="title">评价信息</text>
  168. </view>
  169. <view class="appraise_detail" v-for="item in dataInfo.resolveLogs" :key="item.id">
  170. <view class="appraise_detail_top">
  171. <text>{{formatDate(item.startTime, 'yyyy-MM-dd HH:mm:ss')}}</text>
  172. <view v-if="dataInfo.incidentData.wxdegree">
  173. <uni-rate readonly :value="dataInfo.incidentData.wxdegree.value" />
  174. </view>
  175. </view>
  176. <view class="appraise_detail_bottom">
  177. <text>{{item.remark}}</text>
  178. </view>
  179. </view>
  180. <view class="detail_head">
  181. <text class="title">回访信息</text>
  182. </view>
  183. <view class="appraise_detail" v-for="item in dataInfo.callbackLogs" :key="item.id">
  184. <view class="appraise_detail_top">
  185. <text>{{formatDate(item.startTime, 'yyyy-MM-dd HH:mm:ss')}}</text>
  186. <text v-if="dataInfo.incidentData.degree">{{dataInfo.incidentData.degree.name}}</text>
  187. </view>
  188. <view class="appraise_detail_bottom">
  189. <text>{{item.remark}}</text>
  190. </view>
  191. </view>
  192. </template>
  193. </scroll-view>
  194. <view class="foot_common_btns">
  195. <button @click="goBack" type="default" class="primaryButton btn">返回</button>
  196. </view>
  197. <IncidentAttachment v-if="dataInfo.isAttachment" @knowEmit="knowAttachment" :incidentData="dataInfo.incidentData"></IncidentAttachment>
  198. </view>
  199. </template>
  200. <script setup>
  201. import { ref, reactive } from 'vue'
  202. import IncidentAttachment from '@/components/IncidentAttachment.vue';
  203. import { onLoad } from '@dcloudio/uni-app'
  204. import { api_listAttachment, api_incidentDetail, api_querySummaryDoc, api_incidentLog } from "@/http/api.js"
  205. import { defaultColor } from '@/static/js/theme.js'
  206. import { useSetTitle } from '@/share/useSetTitle.js'
  207. import { useMakePhoneCall } from '@/share/useMakePhoneCall.js'
  208. import { useGoBack } from '@/share/useGoBack.js'
  209. import { useLoginUserStore } from '@/stores/loginUser'
  210. import { computedPriorityStyle } from '@/filters/computedPriorityStyle.js'
  211. import { computedStateStyle } from '@/filters/computedStateStyle.js'
  212. import { filterFormatDate } from '@/filters/filterFormatDate.js'
  213. useSetTitle();
  214. const loginUserStore = useLoginUserStore();
  215. const { makePhoneCall } = useMakePhoneCall();
  216. const { goBack } = useGoBack();
  217. const { priorityStyle } = computedPriorityStyle();
  218. const { stateStyle } = computedStateStyle();
  219. const { formatDate } = filterFormatDate();
  220. // 主题颜色
  221. const primaryColor = ref(defaultColor)
  222. // 数据
  223. const dataInfo = reactive({
  224. tabs: [
  225. {id: 1, name: '工单信息', value: '1', num: ''},
  226. // {id: 2, name: '维修汇总单', value: '2', num: ''},
  227. {id: 3, name: '处理流程', value: '3', num: ''},
  228. {id: 4, name: '评价信息', value: '4', num: ''},
  229. ],
  230. tabActiveValue: 0,//当前选择的tab
  231. incidentId: undefined,//事件ID
  232. incidentData: {},//事件对象
  233. repairImgs: [],//报修图片
  234. handlerImgs: [],//处理图片
  235. summaryObj: {
  236. consumableList: [],//耗材列表
  237. workHourManagementList: [],//工时列表
  238. },//汇总单信息
  239. incidentLogList: [],//流程列表
  240. resolveLogs: [],//评价
  241. callbackLogs: [],//回访
  242. isAttachment: false,//录音开关
  243. })
  244. // 点击录音
  245. function attachmentClick(){
  246. dataInfo.isAttachment = true;
  247. }
  248. // 知道了录音
  249. function knowAttachment(){
  250. dataInfo.isAttachment = false;
  251. }
  252. // 获取汇总单信息
  253. function getSummaryList(){
  254. uni.showLoading({
  255. title: "加载中",
  256. mask: true,
  257. });
  258. let postData = {
  259. "incidentId": dataInfo.incidentId,
  260. };
  261. api_querySummaryDoc(postData).then(res => {
  262. uni.hideLoading();
  263. if(res.status == 200){
  264. dataInfo.summaryObj = {...{consumableList:[], workHourManagementList: []}, ...res };
  265. }else{
  266. uni.showToast({
  267. icon: 'none',
  268. title: res.msg || '请求数据失败!'
  269. });
  270. }
  271. })
  272. }
  273. // 获取流程列表
  274. function getIncidentLogList(){
  275. uni.showLoading({
  276. title: "加载中",
  277. mask: true,
  278. });
  279. let postData = {
  280. "idx": 0,
  281. "sum": 9999,
  282. "incidentLog": {
  283. "incidentId": dataInfo.incidentId,
  284. }
  285. };
  286. api_incidentLog(postData).then(res => {
  287. uni.hideLoading();
  288. if(res.status == 200){
  289. let incidentLogList = res.list || [];
  290. dataInfo.incidentLogList = incidentLogList;
  291. }else{
  292. uni.showToast({
  293. icon: 'none',
  294. title: res.msg || '请求数据失败!'
  295. });
  296. }
  297. })
  298. }
  299. // 预览图片
  300. function previewImg(index, type){
  301. uni.previewImage({
  302. current: index,
  303. urls: dataInfo[type].map(v => v.previewUrl),
  304. longPressActions: {
  305. itemList: ['发送给朋友', '保存图片', '收藏'],
  306. success: function(data) {
  307. console.log('选中了第' + (data.tapIndex + 1) + '个按钮,第' + (data.index + 1) + '张图片');
  308. },
  309. fail: function(err) {
  310. console.log(err.errMsg);
  311. }
  312. }
  313. });
  314. }
  315. // 初始化表单
  316. function initForm(){
  317. if(dataInfo.tabActiveValue === '1'){
  318. getRepairImgs();
  319. getHandlerImgs();
  320. }else if(dataInfo.tabActiveValue === '2'){
  321. getSummaryList();
  322. }else if(dataInfo.tabActiveValue === '3'){
  323. getIncidentLogList();
  324. }else if(dataInfo.tabActiveValue === '4'){
  325. }
  326. }
  327. // 点击tab
  328. function clickTab(tabValue){
  329. if(dataInfo.tabActiveValue == tabValue){
  330. return;
  331. }
  332. dataInfo.tabActiveValue = tabValue;
  333. initForm()
  334. }
  335. // 获取事件详情
  336. function getIncidentDetail(){
  337. uni.showLoading({
  338. title: "加载中",
  339. mask: true,
  340. });
  341. api_incidentDetail(dataInfo.incidentId).then(res => {
  342. uni.hideLoading();
  343. if(res.status == 200){
  344. dataInfo.incidentData = res.data || {};
  345. let logs = dataInfo.incidentData.logs || [];
  346. dataInfo.resolveLogs = logs.filter(v => v.logType.value == 'resolve').slice(0, 1);
  347. dataInfo.callbackLogs = logs.filter(v => v.logType.value == 'callback').slice(0, 1);
  348. // 维修汇总单
  349. if(dataInfo.incidentData.state.value == 'close' && dataInfo.incidentData.duty.addSummary == 1 && dataInfo.incidentData.repairSummary == 1){
  350. let flag = dataInfo.tabs.some(v => v.value === '2');
  351. !flag && dataInfo.tabs.splice(1, 0, {id: 2, name: '维修汇总单', value: '2', num: ''});
  352. }
  353. dataInfo.tabActiveValue = dataInfo.tabs[0].value;
  354. initForm()
  355. }else{
  356. uni.showToast({
  357. icon: 'none',
  358. title: res.msg || '请求数据失败!'
  359. });
  360. }
  361. })
  362. }
  363. // 获取报修图片
  364. function getRepairImgs(){
  365. uni.showLoading({
  366. title: "加载中",
  367. mask: true,
  368. });
  369. api_listAttachment('wechatRequesterIncident', dataInfo.incidentId).then(res => {
  370. uni.hideLoading();
  371. res.data = res.data || [];
  372. res.data.forEach(v => {
  373. v.previewUrl = location.origin + "/file" + v.relativeFilePath;
  374. v.thumbFilePath = location.origin + "/file" + v.thumbFilePath;
  375. })
  376. dataInfo.repairImgs = res.data;
  377. })
  378. }
  379. // 获取处理图片
  380. function getHandlerImgs(){
  381. uni.showLoading({
  382. title: "加载中",
  383. mask: true,
  384. });
  385. api_listAttachment('incident', dataInfo.incidentId).then(res => {
  386. uni.hideLoading();
  387. res.data = res.data || [];
  388. res.data.forEach(v => {
  389. v.previewUrl = location.origin + "/file" + v.relativeFilePath;
  390. v.thumbFilePath = location.origin + "/file" + v.thumbFilePath;
  391. })
  392. dataInfo.handlerImgs = res.data;
  393. })
  394. }
  395. onLoad((option) => {
  396. dataInfo.incidentId = option.incidentId;
  397. getIncidentDetail();
  398. })
  399. </script>
  400. <style lang="scss" scoped>
  401. .incidentDetail{
  402. height: 100%;
  403. display: flex;
  404. flex-direction: column;
  405. justify-content: space-between;
  406. .head{
  407. height: 88rpx;
  408. display: flex;
  409. position: fixed;
  410. z-index: 99;
  411. width: 100%;
  412. background-color: #fff;
  413. font-size: 30rpx;
  414. .tab{
  415. flex: 1;
  416. display: flex;
  417. justify-content: center;
  418. align-items: center;
  419. border-bottom: 4rpx solid transparent;
  420. position: relative;
  421. &:last-of-type{
  422. &:after{
  423. display: none;
  424. }
  425. }
  426. &:after{
  427. content: '';
  428. position: absolute;
  429. right: 0;
  430. top: 50%;
  431. transform: translateY(-50%);
  432. width: 1rpx;
  433. height: 44rpx;
  434. background-color: #515151;
  435. }
  436. &.active{
  437. color: $uni-primary;
  438. border-color: $uni-primary;
  439. }
  440. }
  441. }
  442. .body{
  443. margin-top: 88rpx;
  444. box-sizing: border-box;
  445. flex: 1;
  446. min-height: 0;
  447. border-top: 7rpx solid #EBEBEB;
  448. .phone-filled{
  449. margin-left: 5rpx;
  450. }
  451. .mic-filled{
  452. margin-right: 100rpx;
  453. }
  454. .detail_item_wrap{
  455. padding-bottom: 24rpx;
  456. }
  457. .detail_head{
  458. padding: 24rpx;
  459. border-top: 1rpx solid #D2D2D2;
  460. border-bottom: 1rpx solid #D2D2D2;
  461. display: flex;
  462. justify-content: space-between;
  463. align-items: center;
  464. &:first-of-type{
  465. border-top: none;
  466. }
  467. .title{
  468. font-size: 26rpx;
  469. color: $uni-primary;
  470. padding-left: 18rpx;
  471. position: relative;
  472. &:before{
  473. content: '';
  474. width: 8rpx;
  475. height: 25rpx;
  476. background-color: $uni-primary;
  477. position: absolute;
  478. left: 0;
  479. top: 50%;
  480. transform: translateY(-50%);
  481. }
  482. }
  483. .other{
  484. display: flex;
  485. align-items: center;
  486. .priority{
  487. font-size: 26rpx;
  488. margin-right: 15rpx;
  489. }
  490. .status{
  491. padding: 4rpx 10rpx;
  492. border-radius: 20rpx;
  493. background-color: #DBE8FE;
  494. font-size: 22rpx;
  495. color: #006CF9;
  496. }
  497. }
  498. }
  499. .deital_item{
  500. font-size: 26rpx;
  501. color: #555;
  502. padding: 24rpx 24rpx 0;
  503. display: flex;
  504. align-items: center;
  505. .name{
  506. width: 7em;
  507. margin-right: 24rpx;
  508. }
  509. .value{
  510. flex: 1;
  511. word-break: break-all;
  512. &.img{
  513. display: flex;
  514. .imgItem{
  515. width: 82rpx;
  516. height: 82rpx;
  517. margin-right: 24rpx;
  518. &:last-of-type{
  519. margin-right: 0;
  520. }
  521. }
  522. }
  523. }
  524. }
  525. .summaryItem_bodyItem{
  526. padding: 24rpx 24rpx 0;
  527. font-size: 26rpx;
  528. .summaryItem_bodyItem_top{
  529. display: flex;
  530. justify-content: space-between;
  531. align-items: center;
  532. .value{
  533. padding-left: 48rpx;
  534. flex-shrink: 0;
  535. }
  536. }
  537. .summaryItem_bodyItem_bottom{
  538. margin-top: 24rpx;
  539. display: flex;
  540. justify-content: space-between;
  541. align-items: center;
  542. .name{
  543. text-align: right;
  544. flex: 1;
  545. }
  546. .value{
  547. width: 220rpx;
  548. text-align: right;
  549. flex-shrink: 0;
  550. }
  551. }
  552. }
  553. .summaryItem_bodyItem_total{
  554. text-align: right;
  555. padding: 24rpx;
  556. font-size: 26rpx;
  557. }
  558. .summaryItem_total{
  559. text-align: center;
  560. padding-top: 24rpx;
  561. font-size: 32rpx;
  562. font-weight: bold;
  563. color: $uni-primary;
  564. border-top: 1rpx solid #D2D2D2;
  565. }
  566. .process_item_wrap{
  567. padding: 38rpx;
  568. .process_item{
  569. &:last-of-type{
  570. .process_item_bottom{
  571. border-left: none;
  572. }
  573. }
  574. .process_item_top{
  575. padding-left: 30rpx;
  576. display: flex;
  577. align-items: center;
  578. position: relative;
  579. &:before{
  580. content: '';
  581. position: absolute;
  582. left: -13rpx;
  583. top: 50%;
  584. width: 26rpx;
  585. height: 26rpx;
  586. border-radius: 50%;
  587. background-color: $uni-primary;
  588. transform: translateY(-50%);
  589. }
  590. .name{
  591. font-size: 30rpx;
  592. }
  593. .value{
  594. margin-left: 20rpx;
  595. font-size: 24rpx;
  596. color: #A1A1A1;
  597. }
  598. }
  599. .process_item_bottom{
  600. min-height: 82rpx;
  601. border-left: 1rpx solid #B7BDC6;
  602. margin-top: 5rpx;
  603. padding-left: 30rpx;
  604. display: flex;
  605. font-size: 24rpx;
  606. color: #A1A1A1;
  607. .value{
  608. margin-left: 20rpx;
  609. }
  610. }
  611. }
  612. }
  613. .appraise_detail{
  614. padding: 24rpx 24rpx 24rpx 40rpx;
  615. .appraise_detail_top{
  616. display: flex;
  617. align-items: center;
  618. justify-content: space-between;
  619. font-size: 26rpx;
  620. .name{
  621. color: #A1A1A1;
  622. }
  623. .value{}
  624. }
  625. .appraise_detail_bottom{
  626. font-size: 30rpx;
  627. margin-top: 24rpx;
  628. word-break: break-all;
  629. }
  630. }
  631. }
  632. }
  633. </style>