bossMianshiDetail.vue 26 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944
  1. <template>
  2. <view class="ms-detail">
  3. <view class="detail-bg"></view>
  4. <nav-bar title="面试详情"></nav-bar>
  5. <view class="detail-index">
  6. <view class="detail-title"><block v-if="info.status==2">
  7. <block v-if="currentStep === 1&&info.restHour>3">
  8. {{info.statusText}} {{info.interviewDate}}
  9. </block>
  10. <block v-else-if="currentStep === 1&&info.restHour<=3&&info.restHour>0">
  11. {{info.restHour*60}}分钟后面试
  12. </block>
  13. <block v-else-if="currentStep === 1&&info.restHour==0">
  14. 面试已开始,待签到
  15. </block>
  16. <block v-else-if="currentStep === 2">
  17. 面试已签到
  18. </block>
  19. <block v-else-if="currentStep === 3">
  20. 面试中
  21. </block>
  22. <block v-else-if="currentStep === 4">
  23. 面试已完成
  24. </block>
  25. </block>
  26. <block v-else-if="info.status==3">
  27. 面试已取消
  28. </block></view>
  29. <view class="detail-item">
  30. <view class="user-title">
  31. <view class="user-img-name">
  32. <view class="user-img">
  33. <image :src="info.userEntity&&info.userEntity.avatar||'@/static/images/geren.png'" mode="aspectFill" />
  34. </view>
  35. <view @click="goTo('/pages/talentSearch/resumeDetail?resumesId='+info.resumesId+'&postPushId='+info.postPush.postPushId)" class="user-name"
  36. >{{info.userEntity&&info.userEntity.userName||'匿名'}}
  37. <u-icon
  38. name="arrow-right"
  39. color="#c6c5ca"
  40. size="20"
  41. style="margin-left: 16rpx"
  42. ></u-icon
  43. ></view>
  44. </view>
  45. <view class="img-phone">
  46. <view v-if="info.resumesAttachment" @click="seekDoc(info.resumesAttachment)" class="img-item-icon">
  47. <image src="@/static/images/my/fujianjianli.svg" mode="scaleToFill" />
  48. <text>附件简历</text>
  49. </view>
  50. <view @click="callPhone(info.userEntity.phone)" class="img-item-icon">
  51. <image src="@/static/images/my/dianhua.svg" mode="scaleToFill" />
  52. <text>电话</text>
  53. </view>
  54. </view>
  55. </view>
  56. </view>
  57. <view class="detail-item">
  58. <view class="user-title"> 面试信息 </view>
  59. <view class="msg-box">
  60. <view class="msg-item">
  61. <view class="msg-label">时间</view>
  62. <view class="msg-value">{{info.interviewDateTime}}</view>
  63. </view>
  64. <view class="msg-item">
  65. <view class="msg-label">职位</view>
  66. <view class="msg-value">{{info.postPush&&info.postPush.ruleClassifyName}} {{info.postPush&&info.postPush.salaryRange}} · {{info.postPush&&info.postPush.salaryTimes||12}}薪</view>
  67. </view>
  68. <view class="msg-item">
  69. <view class="msg-label">联系人</view>
  70. <view class="msg-value">{{info.hrName}} {{info.hrPhone}}</view>
  71. </view>
  72. <view class="msg-item">
  73. <view class="msg-label">备注</view>
  74. <view class="msg-value">{{info.remarks}}</view>
  75. </view>
  76. <view class="msg-item">
  77. <view class="msg-label">地址</view>
  78. <view class="msg-value">{{info.address}} {{info.detailedAddress}}</view>
  79. </view>
  80. </view>
  81. </view>
  82. <view class="detail-item">
  83. <view class="txt-content">
  84. <view class="txt-desc">求职者不错?向他发起录用吧~</view>
  85. <view @click="showResult = true;resultType=0" class="txt-btn">录用邀约</view>
  86. </view>
  87. </view>
  88. <view class="detail-item">
  89. <view class="user-title-second" style="padding-bottom: 28rpx">
  90. 将面试结果发送给对方
  91. </view>
  92. <view class="txt-content">
  93. <view class="txt-content-item" @click="showResult = true;resultType=0">
  94. <image src="@/static/images/my/mianshitongguo.svg" mode="scaleToFill" />
  95. <view class="txt-mianshi">通过</view>
  96. </view>
  97. <view class="txt-content-item" @click="showResult = true;resultType=1">
  98. <image src="@/static/images/my/kaolvyixia.svg" mode="scaleToFill" />
  99. <view class="txt-mianshi">考虑一下</view>
  100. </view>
  101. <view class="txt-content-item" @click="showResult = true;resultType=2">
  102. <image src="@/static/images/my/butongguo.svg" mode="scaleToFill" />
  103. <view class="txt-mianshi">不通过</view>
  104. </view>
  105. </view>
  106. </view>
  107. <view v-if="info.interviewRecordType!=null" class="detail-item">
  108. <view class="user-title-second"> 面试记录 </view>
  109. <view class="tag-box">
  110. <view v-for="item in info.interviewRecordType&&info.interviewRecordType.split(',')||[]" class="mianshi-tag">{{item}}</view>
  111. </view>
  112. <view class="mianshi-result-txt">
  113. {{info.interviewRecordMsg}}
  114. </view>
  115. </view>
  116. <view v-if="info.interviewResultType!=null" class="detail-item">
  117. <view class="user-title-second">
  118. <text>面试结果</text>
  119. <view class="user-img-result">
  120. <image
  121. :src="`/static/images/my/${info.interviewResultType == 0
  122. ? 'mianshitongguo'
  123. : info.interviewResultType == 1
  124. ? 'butongguo'
  125. : 'kaolvyixia'}.svg`"
  126. mode="scaleToFill"
  127. />
  128. {{info.interviewResultType==0?'面试通过':(info.interviewResultType==1?'不通过':'考虑一下')}}
  129. </view></view
  130. >
  131. <view class="mianshi-result-txt">
  132. {{info.interviewResultMsg}}
  133. </view>
  134. </view>
  135. </view>
  136. <view class="btn-bottom">
  137. <block v-if="info.restHour>3">
  138. <view class="btn-item" @click="cancelInterview = true">取消面试</view>
  139. <view class="btn-item" @click="onEdit">修改面试</view>
  140. </block>
  141. <block v-else>
  142. <view class="btn-item" @click="onEdit">重新邀约</view>
  143. <view v-if="currentStep==4" class="btn-item" @click="showRecord=true">编辑面试记录</view>
  144. </block>
  145. </view>
  146. <u-popup v-model="showRecord" mode="bottom" border-radius="40">
  147. <view class="mianshi-record">
  148. <view class="mianshi-title"> 面试记录 <text>(求职者不可用)</text> </view>
  149. <view class="mianshi-record-content">
  150. <view class="record-tag-box">
  151. <view
  152. class="record-tag"
  153. :class="{ 'record-tag-check': isCheck == index }"
  154. @click="CheckTag(index)"
  155. v-for="(item, index) in recordList"
  156. :key="index"
  157. >{{ item }}</view
  158. >
  159. </view>
  160. <view class="check-box">
  161. <textarea
  162. v-model="text"
  163. placeholder="请补充其他说明,不超过500个字"
  164. maxlength="500"
  165. class="textarea"
  166. style="width:100%;height:100%;"
  167. ></textarea>
  168. <view class="word-count">
  169. <text>{{ text ? text.length : 0 }}</text> /500</view
  170. >
  171. </view>
  172. </view>
  173. <view @click="updateRecord" class="btn-mianshi">保存</view>
  174. </view>
  175. </u-popup>
  176. <u-popup v-model="showResult" mode="bottom" border-radius="40">
  177. <view class="mianshi-record">
  178. <view class="mianshi-title"> 面试结果</view>
  179. <view class="mianshi-record-content">
  180. <view class="txt-content" style="padding: 54rpx;box-sizing:border-box;justify-content: space-around;">
  181. <view v-if="resultType==0" class="txt-content-item">
  182. <image src="@/static/images/my/mianshitongguo.svg" mode="scaleToFill" />
  183. <view class="txt-mianshi">通过</view>
  184. </view>
  185. <view v-if="resultType==1" class="txt-content-item">
  186. <image src="@/static/images/my/kaolvyixia.svg" mode="scaleToFill" />
  187. <view class="txt-mianshi">考虑一下</view>
  188. </view>
  189. <view v-if="resultType==2" class="txt-content-item">
  190. <image src="@/static/images/my/butongguo.svg" mode="scaleToFill" />
  191. <view class="txt-mianshi">不通过</view>
  192. </view>
  193. </view>
  194. <view class="check-box">
  195. <textarea
  196. v-model="text"
  197. placeholder="请补充其他说明,不超过500个字"
  198. maxlength="500"
  199. class="textarea"
  200. style="width:100%;height:100%;"
  201. ></textarea>
  202. <view class="word-count">
  203. <text>{{ text ? text.length : 0 }}</text> /500</view
  204. >
  205. </view>
  206. </view>
  207. <view @click="submitResult()" class="btn-mianshi">保存</view>
  208. </view>
  209. </u-popup>
  210. <u-popup v-model="cancelInterview" mode="bottom" border-radius="40">
  211. <view class="mianshi-record">
  212. <view class="mianshi-title">
  213. <view>申请面试取消</view>
  214. <view class="cancel-text">请选择取消面试的原因,提交后将发送给对方</view>
  215. </view>
  216. <view class="mianshi-record-content">
  217. <view class="record-tag-box" style="gap: 16rpx 24rpx;">
  218. <view
  219. class="record-item"
  220. :class="{ 'record-tag-check': isCheck == index }"
  221. @click="CheckTag(index)"
  222. v-for="(item, index) in cancelList"
  223. :key="index"
  224. >{{ item }}</view
  225. >
  226. </view>
  227. <view class="check-box">
  228. <textarea
  229. v-model="text"
  230. placeholder="请输入具体原因,不超过40个字"
  231. maxlength="40"
  232. @input="onInput"
  233. class="textarea"
  234. style="width:100%;height:100%;"
  235. ></textarea>
  236. <view class="word-count">
  237. <text>{{ text ? text.length : 0 }}</text> /40</view
  238. >
  239. </view>
  240. </view>
  241. <view class="btn-mianshi" hover-class="btn-pressed" @click="quitInterview">提交</view>
  242. </view>
  243. </u-popup>
  244. <u-popup v-model="cancel" mode="center" border-radius="40">
  245. <view class="pop-rules">
  246. <view class="pop-text">
  247. <view class="pop-rules-title">面试取消</view>
  248. <view>这是面试取消的原因,全部展示出来</view>
  249. </view>
  250. <view>
  251. <button class="confirm" @click="cancel = false">确认</button>
  252. </view>
  253. </view>
  254. </u-popup>
  255. </view>
  256. </template>
  257. <script>
  258. import navBar from "@/components/nav-bar/index.vue";
  259. export default {
  260. data() {
  261. return {
  262. currentStep: 3,
  263. showActions: true,
  264. showRecord: false,
  265. isCheck: 0,
  266. showResult: false,
  267. recordList: [
  268. "需要二面",
  269. "待定",
  270. "淘汰",
  271. "面试通过",
  272. "逻辑清晰",
  273. "经验丰富",
  274. "自我驱动",
  275. ],
  276. text: "",
  277. cancelInterview:false,
  278. cancelList:['已招到人员','求职者已招到工作','面试官有事','时间不合适','其他'],
  279. cancel:false,
  280. info:{},
  281. recordId:'',
  282. resultType:0,
  283. isWork:false
  284. };
  285. },
  286. components: {
  287. navBar,
  288. },
  289. onLoad(options){
  290. this.recordId=options&&options.recordId?options.recordId:''
  291. this.getData()
  292. },
  293. methods: {
  294. getData(){
  295. var that=this
  296. this.$Request.getT("/app/interviewRecord/getInterviewInfo", {recordId:this.recordId}).then((res) => {
  297. if (res.code == 0) {
  298. let statusArr=['','待接受','已同意','已拒绝','已过期']
  299. res.data.statusText=statusArr[res.data.status]
  300. var detailTime=res.data.detailTime?that.$queue.convert12to24(res.data.detailTime):''
  301. res.data.interviewDateTime=res.data.interviewDateTime.substring(0,10)+' '+detailTime
  302. var expired=that.$queue.isDateExpired(res.data.interviewDateTime)
  303. res.data.expired=expired[0]
  304. res.data.restHour=expired[1]
  305. res.data.interviewDate=res.data.interviewDateTime.slice(0, 10)
  306. that.info=res.data
  307. console.log(that.info)
  308. that.currentStep=!res.data.interviewProcesses||res.data.interviewProcesses==0?res.data.interviewProcesses+1:res.data.interviewProcesses
  309. /* that.covers.push({
  310. id:1,
  311. latitude: res.data.lat,
  312. longitude: res.data.lng,
  313. iconPath:'../../static/images/mapMarker.png',
  314. alpha:0.5,
  315. width:20,
  316. height:20,
  317. callout: {
  318. content: res.data.detailedAddress,
  319. color: '#000', //文字颜色
  320. fontSize: 10, //文本大小
  321. padding: 5, //附近留白
  322. borderRadius: 24, //边框圆角
  323. bgColor: '#FFFFFF', //背景颜色
  324. display: 'ALWAYS', //常显
  325. }
  326. }) */
  327. } else {
  328. uni.showToast({
  329. title: res.msg,
  330. icon: "none",
  331. });
  332. }
  333. });
  334. },
  335. CheckTag(index) {
  336. this.isCheck = index;
  337. },
  338. handleSignIn() {
  339. this.$emit("sign-in");
  340. uni.showToast({
  341. title: "签到成功",
  342. icon: "success",
  343. });
  344. },
  345. handleStartInterview() {
  346. this.$emit("start-interview");
  347. },
  348. handleGetResult() {
  349. this.$emit("get-result");
  350. },
  351. handleComplaint() {
  352. this.$emit("complaint");
  353. uni.showModal({
  354. title: "客服投诉",
  355. content: "请描述您遇到的问题",
  356. editable: true,
  357. placeholderText: "请输入问题描述...",
  358. success: (res) => {
  359. if (res.confirm && res.content) {
  360. uni.showToast({
  361. title: "投诉已提交",
  362. icon: "success",
  363. });
  364. }
  365. },
  366. });
  367. },
  368. onEdit(){
  369. uni.navigateTo({
  370. url:`/pages/msg/interviewInvitation?recordId=${this.info.recordId}&postPushId=${this.info.postPush.postPushId}&resumesId=${this.info.resumesId}&interviewerId=${this.info.userEntity.userId}`
  371. })
  372. },
  373. goTo(url){
  374. uni.navigateTo({
  375. url
  376. })
  377. },
  378. callPhone(phone){
  379. if (phone == ""||!phone) return;
  380. uni.makePhoneCall({
  381. phoneNumber: phone, //仅为示例
  382. });
  383. },
  384. submitResult(){
  385. var that=this
  386. if(this.isWork)
  387. return
  388. this.isWork=true
  389. that.$Request.postJson("/app/interviewRecord/saveInterview", {
  390. recordId:that.recordId,
  391. interviewResultType:that.resultType,
  392. interviewResultMsg:that.text,
  393. interviewProcesses:4
  394. }).then(res => {
  395. that.isWork=false
  396. that.showResult=false
  397. if (res.code === 0) {
  398. that.info.interviewResultMsg=that.text
  399. that.info.interviewResultType=that.resultType
  400. that.info.interviewProcesses=4
  401. that.currentStep=4
  402. this.$Request.getT("/app/chat/selectByTwoIds", {userId:this.info.userEntity.userId,'focusedUserId':this.$queue.getData('userId')}).then((res) => {
  403. if (res.code == 0)
  404. this.$queue.sendImMessage(this.info.userEntity.userId,'面试结果:'+(that.resultType==0?'恭喜您通过面试啦':(that.resultType==1?'我们需要再考虑一下':'非常抱歉,您与我们招聘的岗位不太匹配!')),98,res.data)
  405. })
  406. } else {
  407. uni.showToast({
  408. title: res.msg,
  409. icon: "none"
  410. })
  411. }
  412. })
  413. },
  414. updateRecord(){
  415. var that=this
  416. if(this.isWork)
  417. return
  418. this.isWork=true
  419. that.$Request.postJson("/app/interviewRecord/saveInterview", {
  420. recordId:that.recordId,
  421. interviewRecordType:that.recordList[that.isCheck],
  422. interviewRecordMsg:that.text,
  423. }).then(res => {
  424. that.isWork=false
  425. that.showRecord=false
  426. if (res.code === 0) {
  427. that.info.interviewRecordMsg=that.text
  428. that.info.interviewRecordType=that.recordList[that.isCheck]
  429. } else {
  430. uni.showToast({
  431. title: res.msg,
  432. icon: "none"
  433. })
  434. }
  435. })
  436. },
  437. quitInterview(){
  438. var that=this
  439. if(this.isWork)
  440. return
  441. this.isWork=true
  442. that.$Request.postJson("/app/interviewRecord/saveInterview", {
  443. recordId:that.recordId,
  444. status:3,
  445. interviewQuitType:that.cancelList[that.isCheck],
  446. interviewQuitMsg:that.text
  447. }).then(res => {
  448. that.isWork=false
  449. that.cancelInterview=false
  450. if (res.code === 0) {
  451. that.info.status=3
  452. that.info.interviewQuitType=that.cancelList[that.isCheck]
  453. that.info.interviewQuitMsg=that.text
  454. } else {
  455. uni.showToast({
  456. title: res.msg,
  457. icon: "none"
  458. })
  459. }
  460. })
  461. },
  462. seekDoc(it) {
  463. if(!it||!it.attachmentAddress)
  464. return
  465. //#ifdef APP-PLUS
  466. uni.downloadFile({
  467. url: it.attachmentAddress,
  468. success: function (res) {
  469. var filePath = res.tempFilePath;
  470. uni.openDocument({
  471. filePath: filePath,
  472. showMenu: true,
  473. success: function (res) {
  474. console.log('打开文档成功');
  475. }
  476. });
  477. }
  478. });
  479. return;
  480. //#endif
  481. uni.navigateTo({
  482. url: '/pages/index/webView?url=' + it.attachmentAddress + '&title=' + it.attachmentName
  483. });
  484. }
  485. },
  486. };
  487. </script>
  488. <style scoped lang="scss">
  489. .ms-detail {
  490. position: absolute;
  491. left: 0;
  492. right: 0;
  493. bottom: 0;
  494. top: 0;
  495. display: flex;
  496. flex-direction: column;
  497. .detail-bg {
  498. height: 744rpx;
  499. width: 100%;
  500. background: linear-gradient(180deg, rgba(255, 102, 0, 1), rgba(255, 102, 0, 0) 100%);
  501. position: absolute;
  502. left: 0;
  503. top: 0;
  504. }
  505. .detail-index {
  506. flex: 1;
  507. position: relative;
  508. z-index: 2;
  509. overflow: hidden;
  510. overflow-y: auto;
  511. padding: 40rpx;
  512. box-sizing: border-box;
  513. .detail-item {
  514. padding: 36rpx;
  515. box-sizing: border-box;
  516. border: 1rpx solid rgba(227, 231, 236, 1);
  517. border-radius: 6px;
  518. background: rgba(255, 255, 255, 1);
  519. margin-top: 20rpx;
  520. .process-top {
  521. display: flex;
  522. justify-content: space-between;
  523. align-items: center;
  524. .process-title {
  525. color: rgba(29, 33, 41, 1);
  526. font-family: DM Sans;
  527. font-size: 24rpx;
  528. font-weight: 500;
  529. line-height: 32rpx;
  530. }
  531. .process-status {
  532. color: #016bf6;
  533. font-family: DM Sans;
  534. font-size: 20rpx;
  535. font-weight: 700;
  536. line-height: 26rpx;
  537. }
  538. }
  539. .user-title {
  540. display: flex;
  541. align-items: center;
  542. justify-content: space-between;
  543. .user-img-name {
  544. display: flex;
  545. justify-content: center;
  546. align-items: center;
  547. }
  548. .img-phone {
  549. display: flex;
  550. align-items: center;
  551. gap: 28rpx;
  552. .img-item-icon {
  553. display: flex;
  554. flex-direction: column;
  555. justify-content: center;
  556. align-items: center;
  557. image {
  558. width: 48rpx;
  559. height: 48rpx;
  560. }
  561. text {
  562. color: #999999;
  563. font-family: DM Sans;
  564. font-size: 20rpx;
  565. font-weight: 400;
  566. margin-top: 5rpx;
  567. line-height: 26rpx;
  568. }
  569. }
  570. }
  571. .user-img {
  572. overflow: hidden;
  573. width: 80rpx;
  574. height: 80rpx;
  575. border-radius: 50%;
  576. margin-right: 24rpx;
  577. border: 8rpx solid #f6f6f6;
  578. image {
  579. width: 100%;
  580. height: 100%;
  581. }
  582. }
  583. }
  584. .user-title-second {
  585. color: #1d2129;
  586. font-family: DM Sans;
  587. font-size: 24rpx;
  588. font-weight: 500;
  589. line-height: 32rpx;
  590. padding-bottom: 12rpx;
  591. display: flex;
  592. justify-content: space-between;
  593. align-items: center;
  594. }
  595. .user-img-result {
  596. display: flex;
  597. justify-content: center;
  598. align-items: center;
  599. image {
  600. width: 30rpx;
  601. height: 30rpx;
  602. margin-right: 4rpx;
  603. }
  604. color: rgba(102, 102, 102, 1);
  605. font-family: DM Sans;
  606. font-size: 20rpx;
  607. font-weight: 400;
  608. line-height: 26rpx;
  609. }
  610. .tag-box {
  611. display: flex;
  612. .mianshi-tag {
  613. border-radius: 8rpx;
  614. background: rgba(252, 233, 220, 1);
  615. padding: 8rpx;
  616. box-sizing: border-box;
  617. color: #016bf6;
  618. font-family: DM Sans;
  619. font-size: 16rpx;
  620. font-weight: 400;
  621. line-height: 20rpx;
  622. }
  623. }
  624. .mianshi-result-txt {
  625. color: #999999;
  626. font-family: DM Sans;
  627. font-size: 20rpx;
  628. font-weight: 400;
  629. line-height: 26rpx;
  630. margin-top: 4rpx;
  631. }
  632. .txt-desc {
  633. color: #1d2129;
  634. font-family: DM Sans;
  635. font-size: 24rpx;
  636. font-weight: 500;
  637. line-height: 32rpx;
  638. letter-spacing: 0%;
  639. }
  640. .txt-btn {
  641. color: #016bf6;
  642. font-family: DM Sans;
  643. font-size: 20rpx;
  644. font-weight: 700;
  645. line-height: 26rpx;
  646. letter-spacing: 0%;
  647. }
  648. }
  649. }
  650. .txt-content {
  651. display: flex;
  652. justify-content: space-between;
  653. align-items: center;
  654. .txt-content-item {
  655. display: flex;
  656. flex-direction: column;
  657. justify-content: center;
  658. align-items: center;
  659. image {
  660. width: 60rpx;
  661. height: 60rpx;
  662. }
  663. .txt-mianshi {
  664. color: rgba(153, 153, 153, 1);
  665. font-family: DM Sans;
  666. font-size: 20rpx;
  667. font-weight: 400;
  668. line-height: 26rpx;
  669. margin-top: 10rpx;
  670. }
  671. }
  672. }
  673. .btn-bottom {
  674. display: flex;
  675. align-items: center;
  676. justify-content: flex-end;
  677. gap: 16rpx;
  678. padding-bottom: 48rpx;
  679. padding-right: 40rpx;
  680. box-sizing: border-box;
  681. .btn-item {
  682. box-sizing: border-box;
  683. border: 2rpx solid;
  684. border-radius: 999px;
  685. background: rgba(255, 255, 255, 1);
  686. color: #016bf6;
  687. font-family: DM Sans;
  688. font-size: 24rpx;
  689. font-weight: 400;
  690. padding: 16rpx 68rpx;
  691. box-sizing: border-box;
  692. }
  693. }
  694. .msg-box {
  695. .msg-item {
  696. display: flex;
  697. align-items: center;
  698. color: rgba(153, 153, 153, 1);
  699. font-family: DM Sans;
  700. font-size: 24rpx;
  701. font-weight: 400;
  702. line-height: 32rpx;
  703. margin-top: 12rpx;
  704. .msg-label {
  705. min-width: 120rpx;
  706. margin-right: 24rpx;
  707. }
  708. }
  709. }
  710. .detail-title {
  711. color: #fff;
  712. font-size: 50rpx;
  713. font-weight: 500;
  714. font-family: DM Sans;
  715. }
  716. }
  717. .mianshi-record {
  718. height: 700rpx;
  719. border: 1rpx solid rgba(227, 231, 236, 1);
  720. border-radius: 40rpx 40rpx 0px 0px;
  721. background: rgba(253, 253, 253, 1);
  722. display: flex;
  723. flex-direction: column;
  724. padding: 40rpx;
  725. box-sizing: border-box;
  726. .mianshi-title {
  727. flex-shrink: 0;
  728. color: rgba(34, 37, 42, 1);
  729. font-family: DM Sans;
  730. font-size: 36rpx;
  731. font-weight: 500;
  732. line-height: 26rpx;
  733. text-align: center;
  734. border-bottom: 2rpx solid rgba(153, 153, 153, 0.25);
  735. padding-bottom: 16rpx;
  736. box-sizing: border-box;
  737. text {
  738. font-size: 20rpx;
  739. margin-left: 12rpx;
  740. }
  741. .cancel-text{
  742. color: rgba(34, 37, 42, 1);
  743. font-family: DM Sans;
  744. font-size: 24rpx;
  745. font-weight: 400;
  746. line-height: 32rpx;
  747. letter-spacing: 0px;
  748. margin-top: 16rpx;
  749. }
  750. }
  751. .mianshi-record-content {
  752. width: 100%;
  753. flex: 1;
  754. overflow: hidden;
  755. overflow-y: auto;
  756. .record-tag-box {
  757. display: flex;
  758. align-items: center;
  759. gap: 16rpx 44rpx;
  760. flex-wrap: wrap;
  761. padding-top: 28rpx;
  762. box-sizing: border-box;
  763. .record-tag {
  764. flex-shrink: 0;
  765. border-radius: 16rpx;
  766. background: rgba(245, 248, 254, 1);
  767. padding: 12rpx 20rpx;
  768. box-sizing: border-box;
  769. color: rgba(153, 153, 153, 1);
  770. font-family: DM Sans;
  771. font-size: 28rpx;
  772. font-weight: 400;
  773. border: 1rpx solid rgba(245, 248, 254, 1);
  774. }
  775. .record-item{
  776. width: calc((100% - 24rpx) / 2);
  777. flex-shrink: 0;
  778. border-radius: 16rpx;
  779. background: rgba(245, 248, 254, 1);
  780. padding: 12rpx 0;
  781. box-sizing: border-box;
  782. color: rgba(153, 153, 153, 1);
  783. font-family: DM Sans;
  784. font-size: 28rpx;
  785. font-weight: 400;
  786. text-align: center;
  787. box-sizing: border-box;
  788. border: 1rpx solid rgba(245, 248, 254, 1);
  789. }
  790. .record-tag-check {
  791. border: 1rpx solid #016bf6;
  792. background: rgba(252, 233, 220, 1);
  793. color: #016bf6;
  794. }
  795. }
  796. .check-box {
  797. width: 100%;
  798. height: 170rpx;
  799. border-radius: 12rpx;
  800. background: rgba(240, 240, 240, 1);
  801. padding: 34rpx;
  802. // padding-top: 40rpx;
  803. box-sizing: border-box;
  804. margin: 20rpx 0;
  805. .word-count {
  806. font-family: DM Sans;
  807. font-size: 20rpx;
  808. font-weight: 400;
  809. line-height: 26rpx;
  810. text-align: right;
  811. text {
  812. color: #016bf6;
  813. }
  814. }
  815. }
  816. }
  817. .btn-mianshi {
  818. background: rgba(0, 106, 244, 1);
  819. border-radius: 100rpx;
  820. color: rgba(255, 255, 255, 1);
  821. font-family: DM Sans;
  822. font-size: 24rpx;
  823. font-weight: 400;
  824. line-height: 48rpx;
  825. display: flex;
  826. justify-content: center;
  827. align-items: center;
  828. flex-shrink: 0;
  829. width: 100%;
  830. padding: 6rpx;
  831. box-sizing: border-box;
  832. }
  833. .btn-pressed{
  834. background: rgba(0, 106, 244, 0.8);
  835. transition: background-color 0.1s ease;
  836. }
  837. }
  838. .process-title {
  839. font-size: 36rpx;
  840. font-weight: bold;
  841. color: #333;
  842. }
  843. .process-steps {
  844. position: relative;
  845. }
  846. /* 操作按钮 */
  847. .process-actions {
  848. margin-top: 50rpx;
  849. display: flex;
  850. gap: 20rpx;
  851. flex-wrap: wrap;
  852. }
  853. .action-btn {
  854. flex: 1;
  855. background: #016bf6;
  856. color: #fff;
  857. border: none;
  858. border-radius: 100rpx;
  859. padding: 6rpx 24rpx;
  860. font-size: 28rpx;
  861. color: rgba(255, 255, 255, 1);
  862. font-family: DM Sans;
  863. font-size: 24rpx;
  864. font-weight: 400;
  865. text-align: center;
  866. &::after {
  867. border: none;
  868. }
  869. &:active {
  870. background: #009974;
  871. }
  872. }
  873. .complaint-btn {
  874. background: #ff4444;
  875. &:active {
  876. background: #dd3333;
  877. }
  878. }
  879. .pop-rules{
  880. width: 270px;
  881. border-radius: 20rpx;
  882. background: rgba(255, 255, 255, 1);
  883. color: rgba(158, 158, 158, 1);
  884. font-family: DM Sans;
  885. font-size: 20rpx;
  886. font-weight: 400;
  887. .pop-text{
  888. padding: 40rpx;
  889. .pop-rules-title {
  890. color: rgba(88, 88, 88, 1);
  891. font-size: 28rpx;
  892. font-weight: 700;
  893. line-height: 36rpx;
  894. letter-spacing: 0%;
  895. margin-bottom: 30rpx;
  896. }
  897. }
  898. .confirm {
  899. height: 80rpx;
  900. border-radius: 999px;
  901. background: linear-gradient(90.00deg, rgba(13, 39, 247, 1), rgba(19, 193, 234, 1) 100%);
  902. color: rgba(255, 255, 255, 1);
  903. font-family: DM Sans;
  904. font-size: 32rpx;
  905. font-weight: 400;
  906. line-height: 80rpx;
  907. letter-spacing: 0%;
  908. text-align: center;
  909. margin: 0 40rpx 40rpx;
  910. &:active{
  911. background: linear-gradient(90.00deg, rgba(13, 39, 247, 0.8), rgba(19, 193, 234, 0.8) 100%);
  912. }
  913. }
  914. }
  915. ::v-deep .u-btn {
  916. padding: 0 !important;
  917. }
  918. ::v-deep .textarea-placeholder {
  919. color: rgba(153, 153, 153, 1);
  920. font-family: DM Sans;
  921. font-size: 20rpx !important;
  922. font-weight: 400;
  923. line-height: 26rpx;
  924. }
  925. ::v-deep .uni-textarea-textarea {
  926. font-size: 20rpx;
  927. color: #585858;
  928. }
  929. ::v-deep .uni-textarea{
  930. height: 170rpx !important;
  931. }
  932. ::v-deep uni-button:after {
  933. border: none !important;
  934. }
  935. </style>