bossMianshiDetail.vue 28 KB

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