detail.vue 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695
  1. <template>
  2. <view class="detail white-wrap">
  3. <image :src="statusImg" mode="aspectFill" class="status-img" v-if="statusImg"></image>
  4. <view class="section white-wrap">
  5. <view class="section-title require">用印用途</view>
  6. <view :class="opButton.CheckEdit?'section-select-box':null" :style="{color:oldUse?'#333':'#999'}" @click="handleOperation('showPurpose')">{{oldUse?oldUse:'请选择'}}</view>
  7. </view>
  8. <view class="section white-wrap">
  9. <view class="section-title require">客户名称(全称)</view>
  10. <view>{{detail.CompanyName}}</view>
  11. </view>
  12. <view class="section white-wrap">
  13. <view class="section-title require">统一社会信用码</view>
  14. <input type="text" v-model="detail.CreditCode" placeholder="请填写统一社会信用码" disabled/>
  15. </view>
  16. <view class="section white-wrap">
  17. <view class="section-title">实际使用方名称</view>
  18. <input type="text" v-model="detail.UseCompanyName" placeholder="请填写实际使用方名称" disabled/>
  19. </view>
  20. <view class="section white-wrap">
  21. <view class="section-title require">业务类型</view>
  22. <input type="text" v-model="detail.ServiceType" placeholder="请填写业务类型" disabled/>
  23. </view>
  24. <view class="section white-wrap">
  25. <view class="section-title require">文件份数</view>
  26. <input type="number" v-model="oldFileNum" placeholder="请填写总共盖章文件份数" :disabled="!opButton.CheckEdit"/>
  27. </view>
  28. <view class="section white-wrap">
  29. <view class="section-title require">加盖何种印章</view>
  30. <view :class="opButton.CheckEdit?'section-select-box':null" :style="{color:oldSealType?'#333':'#999'}" @click="handleOperation('showType')">{{oldSealType?oldSealType:'请选择'}}</view>
  31. </view>
  32. <view class="section white-wrap" v-if="detail.ContractId>0">
  33. <view class="section-title require">合同附件</view>
  34. <image
  35. :src="files.img"
  36. mode="aspectFill"
  37. style="width: 102rpx;height: 120rpx"
  38. @click="handlepreViewFile(files)">
  39. </image>
  40. </view>
  41. <view class="section white-wrap" v-else>
  42. <view class="section-title require">合同附件</view>
  43. <!-- 合规可修改上传 -->
  44. <div class="check-file-box" :style="'background-image:url('+files.img+')'" v-if="files.url" @click="handlepreViewFile(files)">
  45. <image class="del-icon" src="../static/del-icon.png" @click.stop="handleDeleteCheckFile" v-if="opButton.CheckEdit"></image>
  46. </div>
  47. <image v-else @click="handleUpload" src="../static/upload-icon.png" mode="aspectFill" style="width: 102rpx;height: 120rpx;"></image>
  48. </view>
  49. <view class="section white-wrap" v-if="detail.Status==='已驳回'">
  50. <view class="section-title">驳回理由</view>
  51. <view style="color: #F55768;">{{detail.ApprovalRemark}}</view>
  52. </view>
  53. <view class="section white-wrap">
  54. <view class="section-title">备注</view>
  55. <textarea type="text" v-model="oldRemark" placeholder="请填写备注" :disabled="!opButton.CheckEdit"></textarea>
  56. </view>
  57. <!-- 流程模块 -->
  58. <view class="section white-wrap process-wrap">
  59. <view class="title" style="font-size: 16px;font-weight: bold;">审批流程</view>
  60. <steps :data="processData"></steps>
  61. </view>
  62. <!-- 审批/撤回申请 -->
  63. <view class="fix-bottom-wrap" style="text-align: center;" v-if="opButton.Approval||opButton.Cancel">
  64. <div class="flex" style="justify-content: space-between;width:100%">
  65. <van-button type="info" color="#3385FF" style="flex:1;" custom-class="btn-small" round @click="handleClickPass" v-if="opButton.Approval">通过</van-button>
  66. <van-button type="info" color="#F55768" style="flex:1;" custom-class="btn-small" round @click="handleApprovalReject" v-if="opButton.Approval">驳回</van-button>
  67. <van-button type="info" color="#F55768" style="flex:1;" :custom-class="opButton.Approval?'btn-small':'btn-big'" round @click="handleCancelApply" v-if="opButton.Cancel">撤回申请</van-button>
  68. </div>
  69. </view>
  70. <!-- 作废 -->
  71. <view class="fix-bottom-wrap" style="text-align: center;" v-if="opButton.Invalid">
  72. <view v-if="detail.ContractId>0" style="margin-bottom: 10rpx;" @click="checked=!checked"><radio value="同时作废合同" :checked="checked" color="#3385FF" style="transform:scale(0.8)"/>是否同时作废合同?</view>
  73. <van-button type="info" color="#F55768" custom-class="btn-big" round @click="handleSealInvalid">用印作废</van-button>
  74. </view>
  75. <!-- 重新提交 -->
  76. <view class="fix-bottom-wrap" style="text-align: center;" v-if="opButton.Edit">
  77. <van-button type="info" color="#3385FF" custom-class="btn-big" round @click="handleEdit">重新申请</van-button>
  78. </view>
  79. <!-- 撤回申请 -->
  80. <!-- <view class="fix-bottom-wrap" style="text-align: center;" v-if="opButton.Cancel">
  81. <van-button type="info" color="#3385FF" custom-class="btn-big" round @click="handleCancelApply">撤回申请</van-button>
  82. </view> -->
  83. <!-- 用印用途 -->
  84. <van-popup :show="showPurpose" @close="showPurpose=false" position="bottom">
  85. <van-picker
  86. show-toolbar
  87. title="选择用印用途"
  88. :columns="purposeArr"
  89. @confirm="handlePurposeConfirm"
  90. @cancel="showPurpose=false"
  91. />
  92. </van-popup>
  93. <!-- 何种印章 -->
  94. <van-popup :show="showType" @close="showType=false" position="bottom">
  95. <van-picker
  96. show-toolbar
  97. title="选择何种印章"
  98. :columns="typeArr"
  99. @confirm="handleTypeConfirm"
  100. @cancel="showType=false"
  101. />
  102. </van-popup>
  103. <!-- 客户搜索 -->
  104. <van-popup :show="showCustome" @close="showCustome=false" position="bottom" custom-style="height: 100vh">
  105. <view class="custome-search-wrap">
  106. <van-search use-left-icon-slot use-action-slot shape="round" :value="searchCustomeVal" placeholder="请输入客户名称/社会信用码" @change="onSearchValChange" @search="onSearch"
  107. custom-class="search-box" field-class="search-con">
  108. <view slot="left-icon">
  109. <image src="../static/search-icon.png" mode="aspectFill" class="search-icon"></image>
  110. </view>
  111. <view slot="action" @click="showCustome=false" class="search-btn">取消</view>
  112. </van-search>
  113. <view class="search-result">
  114. <view class="result-custome-box" v-if="searchContractList.length===0">
  115. <view class="result-item flex" v-for="item in searchCustomeList" :key="item" @click="getContract(item)">
  116. <image src="../static/search-icon.png" mode="aspectFill" class="search-icon"></image>
  117. <view class="con van-ellipsis">{{item}}</view>
  118. <image src="../static/click-icon.png" mode="aspectFill" class="click-icon"></image>
  119. </view>
  120. </view>
  121. <view class="result-contract-box" v-else>
  122. <view class="result-contract-item" v-for="item in searchContractList" :key="item.ContractId" @click="handleChooseContract(item)">
  123. <view class="name">{{item.CompanyName}}</view>
  124. <view style="margin-top: 20rpx;">合同编号:{{item.ContractCode}}</view>
  125. <view style="margin-top: 20rpx;">合同类型:{{item.ContractType}}</view>
  126. <view style="margin-top: 20rpx;">合同金额:{{item.Price}}</view>
  127. </view>
  128. </view>
  129. </view>
  130. </view>
  131. </van-popup>
  132. <van-dialog id="van-dialog" />
  133. </view>
  134. </template>
  135. <script>
  136. import {
  137. apiSealDetail,
  138. apiSearchCustome,
  139. apiSearchContract,
  140. apiApprovalPass,
  141. apiInvalidSeal,
  142. apiApprovalPassModify,
  143. apiSealCancelApply
  144. } from '@/api/approve/seal.js'
  145. import steps from '../components/steps.vue'
  146. import {preViewFile} from '../utils/util.js'
  147. import {uploadFiles} from '@/utils/uploadFile.js'
  148. export default{
  149. components:{
  150. steps
  151. },
  152. computed:{
  153. statusImg(){
  154. if(this.detail.Status==='已审批'){
  155. return require('../static/pass-icon.png')
  156. }else if(this.detail.Status==='已驳回'){
  157. return require('../static/fail-icon.png')
  158. }else if(this.detail.Status==='处理中'){
  159. return require('../static/processing-icon.png')
  160. }else if(this.detail.Status==='已撤回'){
  161. return require('../static/recall-icon.png')
  162. }else if(this.detail.Status==='已作废'){
  163. return require('../static/cancel-icon.png')
  164. }
  165. }
  166. },
  167. data() {
  168. return {
  169. val:'',
  170. ContractApprovalId:0,
  171. ContractApprovalRecordId:0,
  172. SealId:0,
  173. processData:null,
  174. detail:{},
  175. opButton:{},
  176. files:{
  177. type:'',
  178. img:'',
  179. url:''
  180. },//合同附件
  181. showPurpose:false,//显示用印用途选项
  182. purposeArr:['销售合同','渠道合同','付款通知函','招投标','战略合作协议'],
  183. showType:false,//显示用印用途选项
  184. typeArr:['合同章','公章','法人章'],
  185. showCustome:false,//显示搜索客户名称
  186. searchCustomeVal:'',//搜索客户输入数据
  187. searchCustomeList:[],//搜索到的客户名称列表
  188. searchContractList:[],//选择搜索中的客户后合同列表数据
  189. checked:false,//是否同时作废合同
  190. oldUse:"",
  191. oldFileNum:'',
  192. oldSealType:'',
  193. oldRemark:'',
  194. oldFile:''
  195. }
  196. },
  197. onLoad(options) {
  198. this.ContractApprovalId=options.ContractApprovalId
  199. this.ContractApprovalRecordId=options.ContractApprovalRecordId
  200. this.SealId=options.SealId
  201. this.getDetail()
  202. },
  203. onShow() {
  204. uni.$once('updateSealDetail',(data)=>{
  205. console.log('监听到事件来自updateSealDetail ,携带参数 msg 为:' + data.msg);
  206. this.getDetail()
  207. })
  208. },
  209. onPullDownRefresh() {
  210. this.getDetail()
  211. setTimeout(()=>{
  212. uni.stopPullDownRefresh()
  213. },1000)
  214. },
  215. methods: {
  216. // 更新列表页
  217. handleUpdateList(){
  218. uni.$emit('sealApproveListUpdate',{
  219. ContractApprovalId:this.ContractApprovalId,
  220. ContractApprovalRecordId:this.ContractApprovalRecordId,
  221. SealId:this.SealId
  222. })
  223. },
  224. // 合规删除合同附件
  225. handleDeleteCheckFile(){
  226. this.files={
  227. type:'',
  228. img:'',
  229. url:''
  230. }
  231. },
  232. //合规上传附件
  233. async handleUpload(){
  234. const res=await uploadFiles({type:'all'})
  235. const reg = /\.(pdf)$/;
  236. if(reg.test(res[0])){
  237. this.files={
  238. type:'pdf',
  239. url:res[0],
  240. img:require('../static/pdf.png')
  241. }
  242. }else{
  243. this.files={
  244. type:'img',
  245. url:res[0],
  246. img:res[0]
  247. }
  248. }
  249. },
  250. // 撤回申请
  251. handleCancelApply(){
  252. this.$dialog.confirm({
  253. title: '提示',
  254. message: '是否确认撤回',
  255. }).then(async ()=>{
  256. const res=await apiSealCancelApply({SealId:Number(this.detail.SealId)})
  257. if(res.code===200){
  258. uni.showToast({
  259. title:'撤回成功',
  260. icon:'none'
  261. })
  262. this.handleUpdateList()
  263. this.getDetail()
  264. }
  265. }).catch(() => {
  266. console.log('取消撤回');
  267. });
  268. },
  269. handlePurposeConfirm(e){
  270. this.oldUse=e.detail.value
  271. this.showPurpose=false
  272. },
  273. handleTypeConfirm(e){
  274. this.oldSealType=e.detail.value
  275. this.showType=false
  276. },
  277. //前去重审
  278. handleEdit(){
  279. uni.$once('sealEditSubmit',()=>{
  280. this.handleUpdateList()
  281. })
  282. uni.navigateTo({
  283. url:`./edit?ContractApprovalId=${this.ContractApprovalId}&ContractApprovalRecordId=${this.ContractApprovalRecordId}&SealId=${this.SealId}`
  284. })
  285. },
  286. //用印作废
  287. handleSealInvalid(){
  288. this.$dialog.confirm({
  289. title: '提示',
  290. message: '是否确认作废',
  291. }).then(async ()=>{
  292. const res=await apiInvalidSeal({
  293. IsInvalidContract:this.checked,
  294. SealId:this.detail.SealId
  295. })
  296. if(res.code===200){
  297. uni.showToast({
  298. title:'操作成功',
  299. icon:'none'
  300. })
  301. this.handleUpdateList()
  302. this.getDetail()
  303. }
  304. }).catch(() => {
  305. console.log('取消作废');
  306. });
  307. },
  308. //点击通过
  309. handleClickPass(){
  310. //判断是否有内容修改
  311. const flag1=this.oldUse===this.detail.Use
  312. const flag2=Number(this.oldFileNum)===Number(this.detail.FileNum)
  313. const flag3=this.oldSealType===this.detail.SealType
  314. const flag4=this.oldRemark===this.detail.Remark
  315. const flag5=this.files.url===this.detail.FileUrl
  316. if(flag1&&flag2&&flag3&&flag4&&flag5){
  317. this.handleApprovalPass()
  318. }else{
  319. this.handleApprovePassModify()
  320. }
  321. },
  322. //审批通过 (修改内容)
  323. async handleApprovePassModify(){
  324. if(!this.oldFileNum){
  325. uni.showToast({
  326. title:'请填写文件份数',
  327. icon:"none"
  328. })
  329. return
  330. }
  331. if(this.oldFileNum<1){
  332. uni.showToast({
  333. title:'文件份数不合法',
  334. icon:"none"
  335. })
  336. return
  337. }
  338. if(!this.oldSealType){
  339. uni.showToast({
  340. title:'印章类型不能为空',
  341. icon:"none"
  342. })
  343. return
  344. }
  345. if(!this.oldUse){
  346. uni.showToast({
  347. title:'请选择用印用途',
  348. icon:"none"
  349. })
  350. return
  351. }
  352. if(!this.files.url){
  353. uni.showToast({
  354. title:'合同附件不能为空',
  355. icon:"none"
  356. })
  357. return
  358. }
  359. const res=await apiApprovalPassModify({
  360. FileNum:Number(this.oldFileNum),
  361. Remark:this.oldRemark,
  362. SealId:Number(this.detail.SealId),
  363. SealType:this.oldSealType,
  364. Use:this.oldUse,
  365. FileUrl:this.files.url
  366. })
  367. if(res.code===200){
  368. this.$dialog.alert({
  369. title: "处理成功",
  370. confirmButtonColor: "#5890FB",
  371. }).then(() => {
  372. this.handleUpdateList()
  373. this.getDetail()
  374. });
  375. }
  376. },
  377. // 审批通过 (未修改内容)
  378. async handleApprovalPass(){
  379. const res=await apiApprovalPass({
  380. SealId:Number(this.detail.SealId),
  381. Remark:""
  382. })
  383. if(res.code===200){
  384. this.$dialog.alert({
  385. title: "处理成功",
  386. confirmButtonColor: "#5890FB",
  387. }).then(() => {
  388. this.handleUpdateList()
  389. this.getDetail()
  390. });
  391. }
  392. },
  393. //驳回
  394. handleApprovalReject(){
  395. uni.$once('sealApproveReject',()=>{
  396. this.handleUpdateList()
  397. })
  398. uni.navigateTo({
  399. url:`./reason?SealId=${this.detail.SealId}`
  400. })
  401. },
  402. //预览文件
  403. handlepreViewFile(e){
  404. if (e.type === "pdf") {
  405. preViewFile(e.url)
  406. } else {
  407. uni.previewImage({
  408. urls: [e.url]
  409. })
  410. }
  411. },
  412. // 只有当 checkEdit 为true 即合规才能修改
  413. handleOperation(key){
  414. if(this.opButton.CheckEdit){
  415. this[key]=true
  416. }
  417. },
  418. // 客户搜索
  419. // 先搜索出客户 再通过客户去请求出客户下面存在的合同
  420. onSearchValChange(e){
  421. this.searchCustomeVal=e.detail
  422. },
  423. //搜索客户
  424. async onSearch(){
  425. if(!this.searchCustomeVal){
  426. uni.showToast({
  427. title:'请输入搜索关键字',
  428. icon:'none'
  429. })
  430. return
  431. }
  432. this.searchContractList=[]
  433. this.searchCustomeList=[]
  434. const res=await apiSearchCustome({Keyword:this.searchCustomeVal})
  435. if(res.code===200){
  436. this.searchCustomeList=res.data
  437. }
  438. },
  439. // 搜索客户对应的合同
  440. async getContract(e){
  441. const res=await apiSearchContract({Keyword:e})
  442. if(res.code===200){
  443. if(res.data.List){
  444. this.searchContractList=res.data.List
  445. }else{
  446. uni.showToast({
  447. title:"此客户无合同,请重新选择",
  448. icon:"none"
  449. })
  450. }
  451. }
  452. },
  453. // 选择合同 更新表单数据
  454. handleChooseContract(e){
  455. this.detail.CompanyName=e.CompanyName
  456. this.detail.ServiceType=e.ContractType
  457. this.detail.CreditCode=e.CreditCode
  458. this.detail.UseCompanyName=e.CompanyName
  459. this.detail.ContractId=e.ContractId
  460. this.detail.ContractfileUrl=e.FileUrl
  461. // 关闭搜索弹窗
  462. this.showCustome=false
  463. this.searchCustomeVal=''
  464. this.searchContractList=[]
  465. this.searchCustomeList=[]
  466. },
  467. //获取详情
  468. async getDetail() {
  469. const res=await apiSealDetail({
  470. ContractApprovalId:Number(this.ContractApprovalId),
  471. ContractApprovalRecordId:Number(this.ContractApprovalRecordId),
  472. SealId:Number(this.SealId)
  473. })
  474. if(res.code===200){
  475. this.detail=res.data.SealDetail
  476. this.oldUse=res.data.SealDetail.Use
  477. this.oldFileNum=res.data.SealDetail.FileNum
  478. this.oldSealType=res.data.SealDetail.SealType
  479. this.oldRemark=res.data.SealDetail.Remark
  480. this.processData=res.data.FlowNodeList
  481. this.opButton=res.data.OpButton
  482. this.handleFile(res.data.SealDetail.FileUrl)
  483. }
  484. },
  485. //处理文件
  486. handleFile(filesUrl){
  487. const reg = /\.(pdf)$/;
  488. if(reg.test(filesUrl)){
  489. this.files={
  490. type: "pdf",
  491. url: filesUrl,
  492. img: require("../static/pdf.png"),
  493. }
  494. }else{
  495. this.files={
  496. type: "img",
  497. url: filesUrl,
  498. img: filesUrl,
  499. }
  500. }
  501. },
  502. },
  503. }
  504. </script>
  505. <style lang="scss">
  506. .check-file-box{
  507. width: 102rpx;
  508. height: 120rpx;
  509. background-size: cover;
  510. background-position: center;
  511. position: relative;
  512. .del-icon{
  513. position: absolute;
  514. width: 30rpx;
  515. height: 30rpx;
  516. top: -15rpx;
  517. right: -15rpx;
  518. }
  519. }
  520. .detail{
  521. width: 100%;
  522. min-height: 100vh;
  523. padding-bottom: calc(150rpx + constant(safe-area-inset-bottom));
  524. padding-bottom: calc(150rpx + env(safe-area-inset-bottom));
  525. position: relative;
  526. }
  527. .status-img{
  528. position: absolute;
  529. right: 0;
  530. top: 50rpx;
  531. width: 220rpx;
  532. height: 220rpx;
  533. z-index: 10;
  534. }
  535. .section{
  536. padding: 30rpx 34rpx;
  537. border-top: 10rpx solid #F5F5F5;
  538. position: relative;
  539. .section-title{
  540. font-size: 16px;
  541. margin-bottom: 20rpx;
  542. }
  543. .require::before{
  544. content: '*';
  545. font-size: 16px;
  546. color: #FF0000;
  547. position: absolute;
  548. left: 20rpx;
  549. }
  550. .section-select-box{
  551. color: #999;
  552. position: relative;
  553. &::after{
  554. position: absolute;
  555. right: 0;
  556. top: 50%;
  557. content: '';
  558. display: block;
  559. width: 18rpx;
  560. height: 18rpx;
  561. border-top: 1px solid #999;
  562. border-right: 1px solid #999;
  563. transform: translateY(-50%) rotate(45deg);
  564. }
  565. }
  566. }
  567. .btn-big{
  568. width: 450rpx;
  569. height: 60rpx;
  570. }
  571. .btn-small{
  572. min-width: 220rpx;
  573. height: 60rpx;
  574. }
  575. .custome-search-wrap{
  576. padding: 34rpx;
  577. height: 100%;
  578. .search-box {
  579. border: 1px solid #3385FF;
  580. padding: 0 !important;
  581. border-radius: 60rpx;
  582. background-color: #fff !important;
  583. }
  584. .search-con {
  585. background-color: #fff !important;
  586. }
  587. .van-search__content {
  588. background-color: #fff !important;
  589. padding-left: 30rpx !important;
  590. }
  591. .search-btn {
  592. position: relative;
  593. color: #3385FF;
  594. &::before {
  595. content: '';
  596. display: block;
  597. width: 1px;
  598. height: 60%;
  599. background-color: #D1D1D1;
  600. position: absolute;
  601. left: -16rpx;
  602. top: 20%;
  603. }
  604. }
  605. .search-icon{
  606. width: 40rpx;
  607. height: 40rpx;
  608. display: block;
  609. position: relative;
  610. top: 4rpx;
  611. margin-right: 20rpx;
  612. }
  613. .click-icon{
  614. width: 24rpx;
  615. height: 24rpx;
  616. }
  617. .result-item{
  618. align-items: center;
  619. padding: 20rpx 0;
  620. border-bottom: 1px solid #EBEBEB;
  621. .con{
  622. flex: 1;
  623. margin-right: 20rpx;
  624. }
  625. }
  626. .search-result{
  627. overflow-y: auto;
  628. height: 100%;
  629. }
  630. .result-contract-box{
  631. padding: 0 10rpx;
  632. .result-contract-item{
  633. margin-top: 30rpx;
  634. box-shadow: 0px 0px 12rpx rgba(175, 175, 175, 0.38);
  635. padding: 30rpx;
  636. border-radius: 8px;
  637. .name{
  638. font-size: 16px;
  639. font-weight: bold;
  640. &::before{
  641. content:'';
  642. display:inline-block;
  643. width: 31rpx;
  644. height: 34rpx;
  645. background-image: url(../../static/man.png);
  646. background-size: cover;
  647. position: relative;
  648. top: 4rpx;
  649. margin-right: 10rpx;
  650. }
  651. }
  652. }
  653. }
  654. }
  655. </style>