detail.vue 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735
  1. <template>
  2. <view class="detail-page white-wrap">
  3. <view>
  4. <!-- 基础信息模块 -->
  5. <view class="section white-wrap base-info-wrap" v-if="info">
  6. <view class="title">
  7. {{ info.CompanyApprovalDetail.CompanyName }}
  8. <van-tag v-if="info.CompanyApprovalDetail.ApplyMethod === 3" color="#ECF5FF" text-color="#4A83F1"
  9. style="margin-bottom:0;margin-left: 10rpx;">第{{ info.CompanyApprovalDetail.ApprovalCount }}次申请</van-tag>
  10. </view>
  11. <view class="base-info-list">
  12. <block v-for="item in baseInfo">
  13. <view :key="item.key" v-if="!item.hidden">
  14. <text class="lable">{{ item.key }}:</text>
  15. <text :style="{ color: item.color }">
  16. {{ item.val }}
  17. </text>
  18. <van-tag v-if="item.tag" color="#ECF5FF" text-color="#4A83F1" style="margin-left:5px">
  19. {{ item.tag }}
  20. </van-tag>
  21. </view>
  22. </block>
  23. <view v-if="info && info.CompanyApprovalDetail.ApproveStatus === '驳回'">
  24. <text class="lable" style="color:#FE6B7C">驳回理由:</text>
  25. <text style="color:#FE6B7C">{{ info.CompanyApprovalDetail.ApproveRemark }}</text>
  26. </view>
  27. </view>
  28. <image :src="info.CompanyApprovalDetail.statusImg" mode="aspectFill" class="status-img"></image>
  29. <!-- view class="status-img pass-img" v-if="info.CompanyApprovalDetail.ApproveStatus==='已审批'"></view>
  30. <view class="status-img fail-img" v-if="info.CompanyApprovalDetail.ApproveStatus==='驳回'"></view> -->
  31. </view>
  32. <!-- 品种模块 -->
  33. <view class="section white-wrap variety-wrap" v-if="varietyInfo">
  34. <view class="title">{{ varietyInfo.title }}</view>
  35. <view class="variety-list">
  36. <view class="variety-item flex" v-for="item in varietyInfo.list" :key="item.ClassifyName">
  37. <view class="lable">{{ item.ClassifyName }}:</view>
  38. <view class="content">
  39. <van-tag color="#ECF5FF" text-color="#4A83F1" v-for="tag in item.Items"
  40. :key="tag.ChartPermissionId" custom-class="tag">{{ tag.PermissionName }}</van-tag>
  41. </view>
  42. </view>
  43. </view>
  44. </view>
  45. <!-- 合同模块 -->
  46. <view class="section white-wrap contract-wrap" v-if="constractFiles.length !== 0">
  47. <view class="title">查看合同附件</view>
  48. <view class="contract-list">
  49. <view class="contract-item" v-for="item in constractFiles" :key="item.url"
  50. @click="preViewContract(item)">
  51. <image class="contract-img" mode="aspectFill" :src="item.img"></image>
  52. </view>
  53. </view>
  54. </view>
  55. <!-- 客户信息模块 -->
  56. <view class="section white-wrap customer-wrap" v-if="showCustomerInfo && info">
  57. <view class="title">客户信息</view>
  58. <view class="customer-main-info">
  59. <view class="customer-info-item">
  60. <text>客户名称:</text>
  61. <text>{{ info.CompanyApprovalDetail.CompanyName }}</text>
  62. </view>
  63. <view class="customer-info-item">
  64. <text>社会信用码:</text>
  65. <text>{{ info.CompanyApprovalDetail.CreditCode }}</text>
  66. </view>
  67. <view class="customer-info-item">
  68. <text>地址:</text>
  69. <text>{{ info.CompanyApprovalDetail.Address }}</text>
  70. </view>
  71. </view>
  72. <view class="customer-info-list flex">
  73. <view class="customer-info-item flex" style="width:50%">
  74. <text style="flexShrink:0">客户类型:</text>
  75. <text>{{ info.CompanyApprovalDetail.CompanyType }}</text>
  76. </view>
  77. <view class="customer-info-item flex" style="width:50%">
  78. <text style="flexShrink:0">客户状态:</text>
  79. <text>{{ info.CompanyApprovalDetail.Status }}</text>
  80. </view>
  81. <view class="customer-info-item flex" style="width:50%">
  82. <text style="flexShrink:0">客户来源:</text>
  83. <text>{{ info.CompanyApprovalDetail.Source }}</text>
  84. </view>
  85. <view class="customer-info-item flex" style="width:50%">
  86. <text style="flexShrink:0">行业:</text>
  87. <text>{{ info.CompanyApprovalDetail.IndustryName }}</text>
  88. </view>
  89. <view class="customer-info-item flex" style="width:50%">
  90. <text style="flexShrink:0">申请销售:</text>
  91. <text>{{ info.CompanyApprovalDetail.SellerName }}</text>
  92. </view>
  93. </view>
  94. </view>
  95. <!-- 流程模块 -->
  96. <view class="section process-wrap">
  97. <view class="title" style="font-size: 16px;font-weight: bold;">审批流程</view>
  98. <steps :data="info.FlowNodeList"></steps>
  99. </view>
  100. </view>
  101. <!-- 审批按钮 -->
  102. <view class="fix-bottom-wrap btns-wrap flex" v-if="info &&info.CompanyApprovalDetail.OpButton&& info.CompanyApprovalDetail.ApproveStatus === '待审批'">
  103. <button class="pass-btn" @click="handlePass">通过</button>
  104. <button class="refuse-btn" @click="handleRefuse">驳回</button>
  105. </view>
  106. <van-dialog id="van-dialog" />
  107. </view>
  108. </template>
  109. <script>
  110. import {apiCustomeDetail,apiCustomeContractDetail,apiCustomeApprove} from '@/api/approve/custome.js'
  111. import {preViewFile} from '../utils/util.js'
  112. import steps from '../components/steps.vue'
  113. export default {
  114. components:{
  115. steps
  116. },
  117. computed: {
  118. //是否显示客户信息模块
  119. showCustomerInfo() {
  120. if (this.info && (this.info.CompanyApprovalDetail.ApplyMethod === 2 || this.info.CompanyApprovalDetail
  121. .ApplyMethod === 4)) {
  122. return false;
  123. } else {
  124. return true;
  125. }
  126. },
  127. },
  128. data() {
  129. return {
  130. id: null,
  131. info: null,
  132. baseInfo: null, //顶部基础信息
  133. varietyInfo: null, //品种信息
  134. constractFiles: [], //合同文件
  135. };
  136. },
  137. onLoad(options) {
  138. this.id = options.id||0
  139. },
  140. onShow() {
  141. this.getDetail()
  142. },
  143. onPullDownRefresh() {
  144. this.getDetail()
  145. setTimeout(() => {
  146. uni.stopPullDownRefresh()
  147. }, 1000)
  148. },
  149. methods: {
  150. // 同意
  151. async handlePass() {
  152. const res = await apiCustomeApprove({
  153. CompanyApprovalId: Number(this.info.CompanyApprovalDetail.CompanyApprovalId),
  154. CompanyContractId: Number(this.info.CompanyApprovalDetail.CompanyContractId),
  155. CompanyId: Number(this.info.CompanyApprovalDetail.CompanyId),
  156. Remark: "",
  157. Status: 1,
  158. })
  159. if (res.code === 200) {
  160. this.$dialog.alert({
  161. title: "处理成功",
  162. confirmButtonColor: "#5890FB",
  163. }).then(() => {
  164. // on close
  165. this.getDetail()
  166. // 更新列表
  167. uni.$emit('customeApproveListUpdate',{CompanyApprovalId:this.id})
  168. });
  169. }
  170. },
  171. //拒绝
  172. handleRefuse(){
  173. const data=this.info.CompanyApprovalDetail
  174. uni.navigateTo({
  175. url:`./reason?CompanyApprovalId=${data.CompanyApprovalId}&CompanyContractId=${data.CompanyContractId}&CompanyId=${data.CompanyId}`
  176. })
  177. },
  178. // 获取审批单详情
  179. async getDetail() {
  180. const res = await apiCustomeDetail({
  181. ApprovalId: this.id
  182. })
  183. if (res.code === 200) {
  184. this.info = res.data
  185. // 初始化状态
  186. let statusImg=''
  187. switch(res.data.CompanyApprovalDetail.ApproveStatus){
  188. case '已审批':
  189. statusImg=require('../static/pass-icon.png')
  190. break;
  191. case '驳回':
  192. statusImg=require('../static/fail-icon.png')
  193. break;
  194. }
  195. this.info.CompanyApprovalDetail.statusImg=statusImg
  196. let contractInfo = null
  197. // 如果有合同id 则获取合同数据
  198. if (res.data.CompanyApprovalDetail.CompanyContractId != 0) {
  199. const contractRes = await apiCustomeContractDetail({
  200. CompanyId: res.data.CompanyApprovalDetail.CompanyId,
  201. CompanyContractId: res.data.CompanyApprovalDetail.CompanyContractId
  202. })
  203. if (contractRes.code === 200) {
  204. contractInfo = contractRes.data
  205. }
  206. }
  207. this.initTopInfo(res.data, contractInfo)
  208. this.initVarietyInfo(res.data, contractInfo)
  209. this.initContractFiles(res.data, contractInfo)
  210. }
  211. },
  212. // 预览合同文件
  213. preViewContract(e) {
  214. if (e.type === "pdf") {
  215. preViewFile(e.url)
  216. } else {
  217. uni.previewImage({
  218. urls: [e.url]
  219. })
  220. }
  221. },
  222. // 初始化合同文件数据
  223. initContractFiles(info, contractInfo) {
  224. let arr = [];
  225. if (info && contractInfo && (info.CompanyApprovalDetail.ApplyMethod === 1 || info
  226. .CompanyApprovalDetail.ApplyMethod === 5||info
  227. .CompanyApprovalDetail.ApplyMethod === 6)) {
  228. const reg = /\.(pdf)|\.doc|\.docx$/;
  229. arr = contractInfo.ImgUrl.split("#").map((item) => {
  230. if (reg.test(item)) {
  231. return {
  232. type: "pdf",
  233. url: item,
  234. img: require("@/pages-approve/static/pdf.png"),
  235. };
  236. } else {
  237. return {
  238. type: "img",
  239. url: item,
  240. img: item,
  241. };
  242. }
  243. });
  244. }
  245. this.constractFiles = arr
  246. },
  247. // 初始化顶部数据
  248. initTopInfo(info, contractInfo) {
  249. let arr = [];
  250. //试用转正式
  251. if (info && contractInfo && info.CompanyApprovalDetail.ApplyMethod === 1) {
  252. uni.setNavigationBarTitle({
  253. title:'试用转正式'
  254. })
  255. arr = [{
  256. key: "合同编号",
  257. val: contractInfo.ContractCode,
  258. tag: contractInfo.ContractType,
  259. },
  260. {
  261. key: "合同期限",
  262. val: `${contractInfo.StartDate}~${contractInfo.EndDate}`.replace(/-/g, '.'),
  263. },
  264. {
  265. key: "合同金额",
  266. val: contractInfo.Money+'元',
  267. color: "#FE6B7C",
  268. },
  269. {
  270. key: "付款方式",
  271. val: contractInfo.PayMethod,
  272. },
  273. {
  274. key: "付款渠道",
  275. val: contractInfo.PayChannel,
  276. },
  277. {
  278. key: "申请时间",
  279. val: info.CompanyApprovalDetail.ApprovalTime.replace(/-/g, '.'),
  280. },
  281. {
  282. key:"审批时间",
  283. val:info.CompanyApprovalDetail.ApproveTime.replace(/-/g, '.'),
  284. hidden:info.CompanyApprovalDetail.ApproveStatus==='待审批'
  285. },
  286. {
  287. key: "申请理由",
  288. val: info.CompanyApprovalDetail.ApplyReasons || "无",
  289. },
  290. ];
  291. }
  292. //冻结转试用
  293. if (info && info.CompanyApprovalDetail.ApplyMethod === 2) {
  294. uni.setNavigationBarTitle({
  295. title:'冻结转试用'
  296. })
  297. arr = [{
  298. key: "客户状态",
  299. val: info.CompanyApprovalDetail.Status,
  300. },
  301. {
  302. key: "冻结期限",
  303. val: `${info.CompanyApprovalDetail.FreezeStartDate}~${info.CompanyApprovalDetail.FreezeEndDate}`
  304. .replace(/-/g, '.'),
  305. },
  306. {
  307. key: "到期天数",
  308. val: info.CompanyApprovalDetail.FreezeExpireDays,
  309. },
  310. {
  311. key: "申请销售",
  312. val: info.CompanyApprovalDetail.ApplyRealName,
  313. },
  314. {
  315. key: "申请时间",
  316. val: info.CompanyApprovalDetail.ApprovalTime.replace(/-/g, '.'),
  317. },
  318. {
  319. key:"审批时间",
  320. val:info.CompanyApprovalDetail.ApproveTime.replace(/-/g, '.'),
  321. hidden:info.CompanyApprovalDetail.ApproveStatus==='待审批'
  322. },
  323. {
  324. key: "解冻理由",
  325. val: info.CompanyApprovalDetail.ApplyReasons,
  326. },
  327. ];
  328. }
  329. //试用延期
  330. if (info && info.CompanyApprovalDetail.ApplyMethod === 3) {
  331. uni.setNavigationBarTitle({
  332. title:'试用延期'
  333. })
  334. arr = [{
  335. key: "地址",
  336. val: info.CompanyApprovalDetail.Address,
  337. },
  338. {
  339. key: "申请时间",
  340. val: info.CompanyApprovalDetail.ApprovalTime.replace(/-/g, '.'),
  341. },
  342. {
  343. key:"审批时间",
  344. val:info.CompanyApprovalDetail.ApproveTime.replace(/-/g, '.'),
  345. hidden:info.CompanyApprovalDetail.ApproveStatus==='待审批'
  346. },
  347. {
  348. key: "申请理由",
  349. val: info.CompanyApprovalDetail.ApplyReasons,
  350. },
  351. ];
  352. }
  353. //原销售申请领取
  354. if (info && info.CompanyApprovalDetail.ApplyMethod === 4) {
  355. uni.setNavigationBarTitle({
  356. title:'原销售申请领取'
  357. })
  358. arr = [{
  359. key: "客户状态",
  360. val: info.CompanyApprovalDetail.Status,
  361. },
  362. {
  363. key: "原销售",
  364. val: info.CompanyApprovalDetail.SellerName,
  365. },
  366. {
  367. key: "申请销售",
  368. val: info.CompanyApprovalDetail.ApplyRealName,
  369. },
  370. {
  371. key: "申请时间",
  372. val: info.CompanyApprovalDetail.ApprovalTime.replace(/-/g, '.'),
  373. },
  374. {
  375. key:"审批时间",
  376. val:info.CompanyApprovalDetail.ApproveTime.replace(/-/g, '.'),
  377. hidden:info.CompanyApprovalDetail.ApproveStatus==='待审批'
  378. },
  379. {
  380. key: "申请理由",
  381. val: info.CompanyApprovalDetail.ApplyReasons,
  382. },
  383. ];
  384. }
  385. //续约申请/补充协议
  386. if (info && contractInfo && (info.CompanyApprovalDetail.ApplyMethod === 5||info.CompanyApprovalDetail.ApplyMethod===6)) {
  387. uni.setNavigationBarTitle({
  388. title:info.CompanyApprovalDetail.ApplyMethod === 5?'续约申请':'补充协议'
  389. })
  390. arr = [{
  391. key: "合同编号",
  392. val: contractInfo.ContractCode,
  393. tag: contractInfo.ContractType,
  394. },
  395. {
  396. key: "合同期限",
  397. val: `${contractInfo.StartDate}~${contractInfo.EndDate}`.replace(/-/g, '.'),
  398. },
  399. {
  400. key: "合同金额",
  401. val: contractInfo.Money+'元',
  402. color: "#FE6B7C",
  403. },
  404. {
  405. key: "付款方式",
  406. val: contractInfo.PayMethod,
  407. },
  408. {
  409. key: "付款渠道",
  410. val: contractInfo.PayChannel,
  411. },
  412. {
  413. key: "申请时间",
  414. val: info.CompanyApprovalDetail.ApprovalTime.replace(/-/g, '.'),
  415. },
  416. {
  417. key:"审批时间",
  418. val:info.CompanyApprovalDetail.ApproveTime.replace(/-/g, '.'),
  419. hidden:info.CompanyApprovalDetail.ApproveStatus==='待审批'
  420. },
  421. {
  422. key: "申请理由",
  423. val: info.CompanyApprovalDetail.ApplyReasons || "无",
  424. },
  425. ];
  426. }
  427. this.baseInfo = arr
  428. },
  429. // 初始化品种信息
  430. initVarietyInfo(info, contractInfo) {
  431. let usertype = this.$store.state.userInfo.ProductName; //用户身份类型admin,ficc,权益
  432. let arr = [];
  433. let obj = {
  434. title: "",
  435. list: [],
  436. };
  437. //试用转正式
  438. if (info && contractInfo && info.CompanyApprovalDetail.ApplyMethod === 1) {
  439. obj.title = "购买品种";
  440. arr = contractInfo.PermissionList;
  441. if (!arr) return obj;
  442. arr.forEach((item) => {
  443. let temarr = item.Items.filter((e) => {
  444. let flag = item.CheckList.includes(e.ChartPermissionId);
  445. if (flag) return e;
  446. });
  447. if (temarr.length !== 0) {
  448. obj.list.push({
  449. ClassifyName: item.ClassifyName,
  450. Items: temarr,
  451. });
  452. }
  453. });
  454. }
  455. //冻结转试用
  456. if (info && info.CompanyApprovalDetail.ApplyMethod === 2) {
  457. obj.title = "申请品种";
  458. if (usertype === "ficc") {
  459. arr = info.FiccPermissionList;
  460. } else if (usertype === "权益") {
  461. arr = info.PermissionList;
  462. } else if (usertype === "admin") {
  463. if (info.FiccPermissionList) {
  464. arr = [...info.FiccPermissionList];
  465. }
  466. if (info.PermissionList) {
  467. arr = [...info.PermissionList];
  468. }
  469. }
  470. if (!arr) return obj;
  471. arr.forEach((item) => {
  472. let temarr = item.Items.filter((e) => {
  473. let flag = item.CheckList.includes(e.ChartPermissionId);
  474. if (flag) return e;
  475. });
  476. if (temarr.length !== 0) {
  477. obj.list.push({
  478. ClassifyName: item.ClassifyName,
  479. Items: temarr,
  480. });
  481. }
  482. });
  483. }
  484. //试用延期
  485. if (info && info.CompanyApprovalDetail.ApplyMethod === 3) {
  486. obj.title = "申请品种";
  487. if (usertype === "ficc") {
  488. arr = info.FiccPermissionList;
  489. } else if (usertype === "权益") {
  490. arr = info.PermissionList;
  491. } else if (usertype === "admin") {
  492. if (info.FiccPermissionList) {
  493. arr = [...info.FiccPermissionList];
  494. }
  495. if (info.PermissionList) {
  496. arr = [...info.PermissionList];
  497. }
  498. }
  499. if (!arr) return obj;
  500. arr.forEach((item) => {
  501. let temarr = item.Items.filter((e) => {
  502. let flag = item.CheckList.includes(e.ChartPermissionId);
  503. if (flag) return e;
  504. });
  505. if (temarr.length !== 0) {
  506. obj.list.push({
  507. ClassifyName: item.ClassifyName,
  508. Items: temarr,
  509. });
  510. }
  511. });
  512. }
  513. //原销售申请领取
  514. if (info && info.CompanyApprovalDetail.ApplyMethod === 4) {
  515. obj.title = "申请品种";
  516. if (usertype === "ficc") {
  517. arr = info.FiccPermissionList;
  518. } else if (usertype === "权益") {
  519. arr = info.PermissionList;
  520. } else if (usertype === "admin") {
  521. if (info.FiccPermissionList) {
  522. arr = [...info.FiccPermissionList];
  523. }
  524. if (info.PermissionList) {
  525. arr = [...info.PermissionList];
  526. }
  527. }
  528. if (!arr) return obj;
  529. arr.forEach((item) => {
  530. let temarr = item.Items.filter((e) => {
  531. let flag = item.CheckList.includes(e.ChartPermissionId);
  532. if (flag) return e;
  533. });
  534. if (temarr.length !== 0) {
  535. obj.list.push({
  536. ClassifyName: item.ClassifyName,
  537. Items: temarr,
  538. });
  539. }
  540. });
  541. }
  542. //续约申请/补充协议
  543. if (info && contractInfo && (info.CompanyApprovalDetail.ApplyMethod === 5||info.CompanyApprovalDetail.ApplyMethod===6)) {
  544. obj.title = "购买品种";
  545. arr = contractInfo.PermissionList;
  546. if (!arr) return obj;
  547. arr.forEach((item) => {
  548. let temarr = item.Items.filter((e) => {
  549. let flag = item.CheckList.includes(e.ChartPermissionId);
  550. if (flag) return e;
  551. });
  552. if (temarr.length !== 0) {
  553. obj.list.push({
  554. ClassifyName: item.ClassifyName,
  555. Items: temarr,
  556. });
  557. }
  558. });
  559. }
  560. this.varietyInfo = obj
  561. }
  562. },
  563. }
  564. </script>
  565. <style lang="scss">
  566. .detail-page {
  567. width: 100%;
  568. min-height: 100vh;
  569. padding-bottom: calc(150rpx + constant(safe-area-inset-bottom));
  570. padding-bottom: calc(150rpx + env(safe-area-inset-bottom));
  571. }
  572. .section {
  573. padding: 30rpx 34rpx;
  574. border-bottom: 14rpx solid #f5f5f5;
  575. &:last-child {
  576. margin-bottom: 0;
  577. border: none;
  578. }
  579. .title {
  580. font-size: 16px;
  581. font-weight: bold;
  582. margin: 0 0 40rpx 0;
  583. }
  584. .lable {
  585. color: #666;
  586. flex-shrink: 0;
  587. font-size: 14px;
  588. }
  589. }
  590. .base-info-wrap {
  591. position: relative;
  592. .title {
  593. margin: 0 0 40rpx 0;
  594. &::before {
  595. content: "";
  596. display: inline-block;
  597. width: 15px;
  598. height: 17px;
  599. background-image: url("@/static/man.png");
  600. background-size: cover;
  601. background-repeat: no-repeat;
  602. margin-right: 10rpx;
  603. position: relative;
  604. top: 4rpx;
  605. }
  606. }
  607. .base-info-list {
  608. font-size: 14px;
  609. color: #000;
  610. view {
  611. margin-bottom: 10px;
  612. display: flex;
  613. }
  614. }
  615. .status-img{
  616. position: absolute;
  617. width: 220rpx;
  618. height: 220rpx;
  619. right: 0;
  620. top: 100rpx;
  621. }
  622. }
  623. .variety-wrap {
  624. .variety-item {
  625. padding-top: 24rpx;
  626. padding-bottom: 24rpx;
  627. border-bottom: 1px dashed rgba(112, 112, 112, 0.2);
  628. }
  629. .variety-item:first-child {
  630. padding-top: 0;
  631. }
  632. .variety-item:last-child {
  633. border-bottom: none;
  634. }
  635. .tag {
  636. margin-right: 10rpx;
  637. margin-bottom: 10rpx;
  638. }
  639. }
  640. .contract-list {
  641. display: flex;
  642. flex-wrap: wrap;
  643. .contract-img {
  644. width: 102rpx;
  645. height: 120rpx;
  646. }
  647. }
  648. .customer-main-info {
  649. padding-bottom: 40rpx;
  650. border-bottom: 1px dashed rgba(112, 112, 112, 0.2);
  651. }
  652. .customer-info-item {
  653. font-size: 14px;
  654. color: #999;
  655. margin-bottom: 20rpx;
  656. }
  657. .customer-info-list {
  658. flex-wrap: wrap;
  659. padding-top: 20rpx;
  660. }
  661. .btns-wrap {
  662. justify-content: center;
  663. button {
  664. width: 260rpx;
  665. height: 70rpx;
  666. border-radius: 28px;
  667. border: none;
  668. margin: 0 15px;
  669. font-size: 15px;
  670. color: #fff;
  671. line-height: 70rpx;
  672. }
  673. .pass-btn {
  674. background-color: #5890fb;
  675. }
  676. .refuse-btn {
  677. background-color: #f55768;
  678. }
  679. }
  680. </style>