customerBenefit.vue 22 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772
  1. <template>
  2. <view class="page">
  3. <u-sticky zIndex="999" customNavHeight="0">
  4. <uni-NavBar headerTitle="客户权益" background="#fff" :isSlot="false" :backKeySlot="true" :rightSlot="true"
  5. borderBottom="1rpx solid #eee" @backKeyChange="backKeyChange">
  6. </uni-NavBar>
  7. <!-- 客户信息 -->
  8. <view class="" style="background-color: #f8f8f8;">
  9. <view class="customerInfo dis a-c " @click="readOnly=='1'?'':receiverShow=true">
  10. <text class="title">接收客户</text>
  11. <text class="phone">{{customerInfo.name}}-{{customerInfo.mobile}}</text>
  12. <u-icon name="arrow-right" color="#333" size="12" :bold="true"></u-icon>
  13. </view>
  14. <view class="customerInfo mt-2">
  15. <view class="dis a-c">
  16. <text class="title">出单费用</text>
  17. <text class="phone">¥{{insFeeOrders.totalExportPremium}}</text>
  18. </view>
  19. <view class="dis a-c" style="margin: 24rpx 0 ;">
  20. <text class="title">本次使用</text>
  21. <view class="editTag dis a-c " v-if="insFeeOrders.totalExportKeepPointPremium==0 && !readOnly"
  22. @click="adjustDiscountAmount">
  23. <image src="/static/icon/edit.png" mode=""></image>
  24. <text>修改</text>
  25. </view>
  26. <text class="phone">¥{{insFeeOrders.availableAmount}}</text>
  27. </view>
  28. <view class="dis a-c" style="margin-bottom: 24rpx;">
  29. <text class="title">已使用</text>
  30. <text class="phone">¥{{insFeeOrders.usedAmount}}</text>
  31. </view>
  32. <view class="dis a-c mb-1">
  33. <text class="title">剩余金额</text>
  34. <text class="phone">¥{{insFeeOrders.remainingAmount}}</text>
  35. </view>
  36. <text class="noteText">出单后,计算出可使用金额,录入本次使用金额,可使用该金额为用户购买权益,剩余金额会返回到钱包,可提现。</text>
  37. </view>
  38. </view>
  39. </u-sticky>
  40. <!-- 选中权益 -->
  41. <view class="" style="padding-bottom: 226rpx;">
  42. <view class="content-body mt-2">
  43. <view class="header dis a-c j-s mb-2">
  44. <text class="title">权益套餐</text>
  45. <view class="select-btn" v-if="!readOnly" @click="selectedBenefits('insOrderRightsList',1)">去选择
  46. </view>
  47. </view>
  48. <text class="noteText">使用可用金额,可为接收人选购权益套餐 和 权益单品,2选1</text>
  49. <!-- 权益列表 -->
  50. <view class="view-card dis f-c " v-for="(item,index) in insOrderRightsPackageList" :key="index">
  51. <!-- 权益信息 -->
  52. <view class="dis view-item">
  53. <!-- 图片 -->
  54. <image class="image" src="/static/image/banner.png" mode=""></image>
  55. <view class="content dis f-c j-s">
  56. <u--text :lines="1" :text="item.equityPackageName" color="#333" size="16" :bold="true"
  57. style="line-height: 1;flex:0 auto;"></u--text>
  58. <view class="sum dis a-c ">
  59. <!-- 市场价/ 券数量 -->
  60. <text class="couponCount mr-2" v-if="item.totalNumber">券数量{{item.totalNumber}}张</text>
  61. <text class="marketPrice">市场价 {{item.totalPackagePrice}}</text>
  62. <u-number-box v-if="!readOnly" v-model="item.rightsCount" :min="0"
  63. style="margin-left: auto;"
  64. @change="val => onRightsCountChange(val, index, 'insOrderRightsPackageList', 'packagePrice',1)"
  65. :asyncChange="true">
  66. <view slot="minus" class="numberBoxMinus dis a-c j-c ">
  67. <u-icon name="minus" size="12" color="#333" bold></u-icon>
  68. </view>
  69. <text slot="input" class="numberBoxInput">
  70. {{ item.rightsCount }}
  71. </text>
  72. <view slot="plus" class="numberBoxPlus dis a-c j-c ">
  73. <u-icon name="plus" color="#333" size="12" bold></u-icon>
  74. </view>
  75. </u-number-box>
  76. <text v-else
  77. style="margin-left: auto;font-size: 30rpx;color: #333;">x{{item.rightsCount}}</text>
  78. </view>
  79. <view class=" dis a-c j-s ">
  80. <text class="plice">¥{{item.packagePrice}}</text>
  81. <view class="Detail dis a-c " @click="rightsDetails(item,index)">
  82. <text>查看明细</text>
  83. <u-icon :name="item.vehicleTaxIsExpanded?'arrow-up':'arrow-down'" color="#FFAC1D"
  84. size="12"></u-icon>
  85. </view>
  86. </view>
  87. </view>
  88. </view>
  89. <!-- 明细列表 -->
  90. <view class="Detail-list"
  91. v-if="item.vehicleTaxIsExpanded && item.rightsDetailsList && item.rightsDetailsList.length > 0">
  92. <view class="content">
  93. <view class="dis view-item" v-for="(DetailsItem, DetailsIndex) in item.rightsDetailsList"
  94. :key="DetailsIndex">
  95. <image class="image" :src="DetailsItem.rightsPicture" mode=""
  96. style="height: 116rpx;width: 116rpx;">
  97. </image>
  98. <view class="content dis f-c j-s ">
  99. <u--text :lines="1" :text="DetailsItem.rightsName" color="#333" size="16"
  100. :bold="true" style="line-height: 1;flex:0 auto;"></u--text>
  101. <view class="sum dis a-c mt-1 mb-1">
  102. <text class="marketPrice">市场价 {{DetailsItem.marketPrice}}</text>
  103. </view>
  104. <text class="plice">¥{{DetailsItem.contractRate}}</text>
  105. </view>
  106. </view>
  107. </view>
  108. </view>
  109. </view>
  110. </view>
  111. <view class="content-body mt-2">
  112. <view class="header dis a-c j-s mb-2">
  113. <text class="title">权益单品</text>
  114. <view class="select-btn" v-if="!readOnly" @click="selectedBenefits('insOrderRightsPackageList',2)">
  115. 去选择</view>
  116. </view>
  117. <text class="noteText">使用可用金额,可为接收人选购权益套餐 和 权益单品,2选1</text>
  118. <!-- 权益列表 -->
  119. <view class="view-card dis f-c " v-for="(item,index) in insOrderRightsList" :key="index">
  120. <!-- 权益信息 -->
  121. <view class="dis view-item">
  122. <!-- 图片 -->
  123. <image class="image" :src="item.rightsPicture" mode=""></image>
  124. <view class="content dis f-c j-s">
  125. <u--text :lines="1" :text="item.rightsName" color="#333" size="16" :bold="true"
  126. style="line-height: 1;flex:0 auto;"></u--text>
  127. <view class="sum dis a-c ">
  128. <!-- 市场价/ 券数量 -->
  129. <text class="couponCount mr-2" v-if="item.totalNumber">券数量{{item.totalNumber}}张</text>
  130. <text class="marketPrice">市场价 {{ item.marketPrice}}</text>
  131. <u-number-box v-if="!readOnly" v-model="item.rightsCount" :min="0"
  132. style="margin-left: auto;"
  133. @change="val => onRightsCountChange(val, index, 'insOrderRightsList', 'contractRate',2)"
  134. :asyncChange="true">
  135. <view slot="minus" class="numberBoxMinus dis a-c j-c ">
  136. <u-icon name="minus" size="12" color="#333" bold></u-icon>
  137. </view>
  138. <text slot="input" class="numberBoxInput">
  139. {{ item.rightsCount }}
  140. </text>
  141. <view slot="plus" class="numberBoxPlus dis a-c j-c ">
  142. <u-icon name="plus" color="#333" size="12" bold></u-icon>
  143. </view>
  144. </u-number-box>
  145. </view>
  146. <view class=" dis a-c j-s ">
  147. <text class="plice">¥{{item.contractRate}}</text>
  148. <text v-if="readOnly"
  149. style="margin-left: auto;font-size: 30rpx;color: #333;">x{{item.rightsCount}}</text>
  150. </view>
  151. </view>
  152. </view>
  153. <!-- 明细列表 -->
  154. <view class="Detail-list"
  155. v-if="item.vehicleTaxIsExpanded && item.rightsDetailsList && item.rightsDetailsList.length > 0">
  156. <view class="Detail-header"></view>
  157. <view class="content">
  158. <view class="dis view-item" v-for="(DetailsItem, DetailsIndex) in item.rightsDetailsList"
  159. :key="DetailsIndex">
  160. <image class="image" :src="DetailsItem.rightsPicture" mode=""
  161. style="height: 116rpx;width: 116rpx;">
  162. </image>
  163. <view class="content dis f-c j-s ">
  164. <u--text :lines="1" :text="DetailsItem.rightsName" color="#333" size="16"
  165. :bold="true" style="line-height: 1;flex:0 auto;"></u--text>
  166. <view class="sum dis a-c mt-1 mb-1">
  167. <text class="marketPrice">市场价 {{DetailsItem.marketPrice}}</text>
  168. </view>
  169. <text class="plice">¥{{DetailsItem.contractRate}}</text>
  170. </view>
  171. </view>
  172. </view>
  173. <view class="Detail-footer"></view>
  174. </view>
  175. </view>
  176. </view>
  177. </view>
  178. <!-- 接收人弹窗 -->
  179. <uni-Popup :show="receiverShow" @close='receiverShow=false' headerTitle="选择接收客户" overflow="auto"
  180. maxHeight="580rpx">
  181. <template #content>
  182. <view class="overflow">
  183. <view class="deptselect dis f-c ">
  184. <u-radio-group v-model="recipientradiovalue" placement="column" iconPlacement="right"
  185. @change="recipientchange">
  186. <view class="item dis a-c " v-for="(item, index) in recipientList" :key="index">
  187. <u-radio activeColor="#FDE935" iconColor='#333' :name="item.title" style="width: 100%;">
  188. <view class="textregion dis f-c ">
  189. <text>{{item.title}}</text>
  190. <text>{{item.name}}-{{item.mobile}}</text>
  191. </view>
  192. </u-radio>
  193. </view>
  194. </u-radio-group>
  195. </view>
  196. </view>
  197. </template>
  198. </uni-Popup>
  199. <!-- 权益优惠金额弹窗 -->
  200. <uni-Popup :show="discountAmountShow" @close="discountAmountShow=false" :closeable="false"
  201. :headerTitle="`优惠金额(可用${insFeeOrders.availableAmount})`" overflow="auto" :headerStyle="{fontSize:'36rpx'}"
  202. maxHeight="980rpx" mode="center" width="90%">
  203. <template #content>
  204. <view class="discountAmount">
  205. <text class="text ">本次订单共计优惠 <text
  206. style="color: #333;font-weight: bold;">{{insFeeOrders.availableAmount}}</text>元,您可使用部分优惠金额为客户购买车主服务。</text>
  207. <view class="input-text">
  208. <view class="dis a-c mt-3 ">
  209. <text>可用金额</text>
  210. <text>({{insFeeOrders.availableAmount}})</text>
  211. </view>
  212. <u--form labelPosition="left" errorType="message" :model="discountAmountForm" :rules="carRules"
  213. ref="uForm">
  214. <u-form-item prop="availableAmount">
  215. <u--input type="number" v-model="discountAmountForm.availableAmount"
  216. clearable></u--input>
  217. </u-form-item>
  218. </u--form>
  219. </view>
  220. <view class="btn dis f-c a-c mt-3">
  221. <u-button type="primary" shape="circle" text="确定" color="#FDE935"
  222. :customStyle="{color:'#1f1f1f'}" @click="adjustAmount"></u-button>
  223. <text class="footer-text">修改金额会清空您已选择的客户权益,请谨慎操作</text>
  224. </view>
  225. </view>
  226. </template>
  227. </uni-Popup>
  228. <!-- 自定义加载动画 -->
  229. <global-loading :show="loadingShow" :text="loadingText"></global-loading>
  230. </view>
  231. </template>
  232. <script>
  233. import Decimal from 'decimal.js';
  234. export default {
  235. data() {
  236. return {
  237. loadingShow: true, //加载
  238. loadingText: '加载中', //加载提示文字
  239. discountAmountShow: false, //优惠金额弹窗
  240. recipientradiovalue: "投保人",
  241. receiverShow: false, //接收人弹窗
  242. quantity: 0,
  243. vehicleTaxIsExpanded: false,
  244. recipientList: [], //接收人列表
  245. customerInfo: {},
  246. discountAmountForm: {
  247. availableAmount: null,
  248. },
  249. carRules: {
  250. availableAmount: [{
  251. required: true,
  252. message: '金额不能为空',
  253. trigger: ['blur', 'change'],
  254. },
  255. {
  256. // 自定义验证函数,见上说明
  257. validator: (rule, value, callback) => {
  258. if (parseInt(value) < this.insFeeOrders.availableAmount) {
  259. return true
  260. } else {
  261. return false
  262. }
  263. },
  264. message: '可用金额不能大于或等于优惠金额',
  265. // 触发器可以同时用blur和change
  266. trigger: ['change', 'blur'],
  267. }
  268. ],
  269. },
  270. insOrderRightsPackageList: [], //权益套餐
  271. insOrderRightsList: [], //权益单品
  272. insFeeOrders: {}, //费用信息
  273. ordersNo: "",
  274. readOnly: "",
  275. }
  276. },
  277. onShow() {
  278. // 从权益选择页返回时,重新计算剩余金额:剩余 = 可用 - 已使用(高精度)
  279. if (this.insFeeOrders && this.insFeeOrders.availableAmount !== undefined) {
  280. const available = new Decimal(this.insFeeOrders.availableAmount || 0);
  281. const used = new Decimal(this.insFeeOrders.usedAmount || 0);
  282. this.$set(this.insFeeOrders, 'remainingAmount', available.minus(used).toString());
  283. }
  284. },
  285. computed: {
  286. //选中套餐售价总和
  287. totalPriceCount() {
  288. const total = this.insOrderRightsPackageList.reduce(
  289. (sum, item) => {
  290. // 计算当前项的 packagePrice * quantity(高精度乘法)
  291. const itemTotal = new Decimal(item.packagePrice).times(new Decimal(item.rightsCount));
  292. // 累加到总和
  293. return sum.plus(itemTotal);
  294. },
  295. new Decimal(0) // 初始值
  296. );
  297. const sum = new Decimal(total);
  298. return sum.toString(); // 返回字符串
  299. },
  300. //选中单品售价总和
  301. totalPriceCount1() {
  302. const total = this.insOrderRightsList.reduce(
  303. (sum, item) => {
  304. // 计算当前项的 packagePrice * quantity(高精度乘法)
  305. const itemTotal = new Decimal(item.contractRate).times(new Decimal(item.rightsCount));
  306. // 累加到总和
  307. return sum.plus(itemTotal);
  308. },
  309. new Decimal(0) // 初始值
  310. );
  311. const sum = new Decimal(total);
  312. return sum.toString(); // 返回字符串
  313. },
  314. },
  315. onLoad(options) {
  316. this.loadingShow = true;
  317. try {
  318. if (options) {
  319. console.log(options);
  320. if (options.readOnly && options.readOnly == 1) { //等于1页面只读
  321. this.readOnly = options.readOnly;
  322. }
  323. let data = JSON.parse(options.info)
  324. console.log(data);
  325. this.insFeeOrders = data.insFeeOrders || {}; //费用信息(防上游缺字段导致 undefined)
  326. this.ordersNo = data.ordersNo;
  327. this.insOrderRightsPackageList = data.insOrderRightsInfoVo.insOrderRightsPackageList;
  328. this.insOrderRightsList = data.insOrderRightsInfoVo.insOrderRightsList;
  329. this.recipientList = [{
  330. title: '车主',
  331. ...data.ownersInfo
  332. }, {
  333. title: '投保人',
  334. ...data.policyHolderInfo
  335. }, {
  336. title: '被保人',
  337. ...data.insuredPersonInfo
  338. }]
  339. this.customerInfo = this.recipientList[1];
  340. }
  341. this.loadingShow = false;
  342. } catch (error) {
  343. this.loadingShow = false;
  344. }
  345. },
  346. methods: {
  347. // 权益数量变化监听
  348. onRightsCountChange(e, index, name, field, type) {
  349. if (e.value == 0) {
  350. return this[name].splice(index, 1);
  351. }
  352. // 获取当前项
  353. const item = this[name][index];
  354. // 获取当前数量和新数量
  355. const currentCount = item.rightsCount;
  356. const newCount = e.value;
  357. // 计算价格
  358. const price = parseFloat(item[field]);
  359. // 计算当前总价
  360. const currentTotalPrice = parseFloat(type == 1 ? this.totalPriceCount : this.totalPriceCount1);
  361. // 计算数量变化和价格变化
  362. const countChange = newCount - currentCount;
  363. const priceChange = countChange * price;
  364. // 计算新总价
  365. const newTotalPrice = currentTotalPrice + priceChange;
  366. // 如果是增加数量,检查是否超过可用金额
  367. if (countChange > 0 && newTotalPrice > this.insFeeOrders.availableAmount) {
  368. uni.showToast({
  369. title: `权益总价不能超过可用金额${this.insFeeOrders.availableAmount}元`,
  370. icon: 'none'
  371. });
  372. } else {
  373. // 无论是减少数量还是增加数量且未超过限制,都允许更新
  374. item.rightsCount = newCount;
  375. }
  376. },
  377. // 获取权益明细
  378. async rightsDetails(item, index) {
  379. if (!item.rightsDetailsList) {
  380. let res = await this.$http.get(`/rightsGrant/package/detail/${item.id}`);
  381. if (res.code == 200) {
  382. this.insOrderRightsPackageList[index].rightsDetailsList = res.data; //群益明细赋值对应套餐
  383. this.insOrderRightsPackageList[index].vehicleTaxIsExpanded = !this.insOrderRightsPackageList[
  384. index]
  385. .vehicleTaxIsExpanded; //展开收起
  386. }
  387. } else {
  388. this.insOrderRightsPackageList[index].vehicleTaxIsExpanded = !this.insOrderRightsPackageList[index]
  389. .vehicleTaxIsExpanded; //展开收起
  390. }
  391. },
  392. async adjustAmount() {
  393. this.$refs.uForm.validate().then(async formRes => {
  394. let res = await this.$http.post('/insFeeOrder/updateAvailableAmount', {
  395. orderNo: this.ordersNo,
  396. availableAmount: this.discountAmountForm.availableAmount,
  397. });
  398. if (res.code == 200) {
  399. let res = await this.$http.get('/supplementOrder/getOrderDetail?ordersNo=' + this
  400. .ordersNo);
  401. if (res.code == 200) {
  402. this.insFeeOrders = res.data.insFeeOrders;
  403. this.discountAmountShow = false;
  404. this.insOrderRightsPackageList = []; //权益套餐
  405. this.insOrderRightsList = []; //权益单品
  406. }
  407. }
  408. }).catch(errors => {
  409. })
  410. },
  411. adjustDiscountAmount() {
  412. if (this.insFeeOrders.totalExportKeepPointPremium == 0) {
  413. this.discountAmountShow = true
  414. }
  415. },
  416. //返回键事件
  417. backKeyChange() {
  418. let insOrderRightsInfoDto = {
  419. insOrderRightsPackageList: this.insOrderRightsPackageList,
  420. insOrderRightsList: this.insOrderRightsList,
  421. rightsGrantReceiverDTO: {
  422. receiverType: this.customerInfo.policyPersonType,
  423. receiverName: this.customerInfo.name,
  424. receiverMobile: this.customerInfo.mobile
  425. }
  426. }
  427. let pages = getCurrentPages(); //获取所有页面栈实例列表
  428. let prevPage = pages[pages.length - 2]; //上一页页面实例
  429. prevPage.$vm.insOrderRightsInfoDto = insOrderRightsInfoDto;
  430. uni.navigateBack({ //uni.navigateTo跳转的返回,默认1为返回上一级
  431. delta: 1
  432. });
  433. },
  434. // 选择权益
  435. selectedBenefits(type, index) {
  436. if (this[type].length > 0) {
  437. return uni.showToast({
  438. title: '套餐和单品只能选择其中1种',
  439. icon: 'none'
  440. })
  441. }
  442. uni.navigateTo({
  443. url: `/pages/reward/${index==1?'benefitPackage':'benefitSingleItem'}?availableAmount=${this.insFeeOrders.availableAmount}`,
  444. })
  445. },
  446. recipientchange(item) {
  447. this.customerInfo = this.recipientList.find(val => val.title == item);
  448. this.receiverShow = false;
  449. }
  450. }
  451. }
  452. </script>
  453. <style lang="scss" scoped>
  454. page {
  455. background-color: #f8f8f8;
  456. }
  457. .page {
  458. background-color: #f8f8f8;
  459. }
  460. .customerInfo {
  461. background-color: #fff;
  462. padding: 25rpx 30rpx;
  463. box-sizing: border-box;
  464. .title {
  465. margin-right: auto;
  466. font-size: 30rpx;
  467. color: #666;
  468. }
  469. .phone {
  470. font-size: 30rpx;
  471. color: #333;
  472. font-weight: bold;
  473. margin-right: 10rpx;
  474. }
  475. .u-icon {
  476. margin-top: 4rpx;
  477. }
  478. .editTag {
  479. padding: 4rpx 20rpx;
  480. box-sizing: border-box;
  481. font-size: 24rpx;
  482. margin-right: 4rpx;
  483. color: #333;
  484. background: rgba(253, 233, 53, 0.2);
  485. border-radius: 30rpx 30rpx 30rpx 30rpx;
  486. border: 1rpx solid #FDE935;
  487. image {
  488. width: 24rpx;
  489. height: 24rpx;
  490. margin-right: 10rpx;
  491. }
  492. }
  493. }
  494. .noteText {
  495. font-size: 24rpx;
  496. color: #999;
  497. }
  498. .content-body {
  499. background-color: #fff;
  500. padding: 30rpx;
  501. box-sizing: border-box;
  502. position: relative;
  503. margin-bottom: 20rpx;
  504. .header {
  505. .title {
  506. font-size: 34rpx;
  507. color: #333;
  508. font-weight: bold;
  509. }
  510. .select-btn {
  511. padding: 8rpx 28rpx;
  512. box-sizing: border-box;
  513. font-size: 28rpx;
  514. color: #1f1f1f;
  515. background: #FDE935;
  516. border-radius: 50rpx 50rpx 50rpx 50rpx;
  517. }
  518. }
  519. .view-card {
  520. background-color: #fff;
  521. border-radius: 10rpx;
  522. border-bottom: 1rpx solid #eee;
  523. .view-item {
  524. padding: 30rpx 0;
  525. box-sizing: border-box;
  526. .image {
  527. width: 136rpx;
  528. height: 136rpx;
  529. border-radius: 10rpx;
  530. flex-shrink: 0;
  531. margin-right: 20rpx;
  532. }
  533. .content {
  534. flex: 1;
  535. min-width: 0;
  536. line-height: 1;
  537. .sum {
  538. text {
  539. font-size: 24rpx;
  540. color: #666;
  541. }
  542. }
  543. .plice {
  544. font-size: 30rpx;
  545. color: #FF540A;
  546. font-weight: bold;
  547. line-height: 1;
  548. }
  549. .Detail {
  550. font-size: 26rpx;
  551. color: #FFAC1D;
  552. line-height: 1.4;
  553. text {
  554. margin-right: 5rpx;
  555. }
  556. }
  557. }
  558. }
  559. .Detail-list {
  560. padding: 10rpx 20rpx;
  561. box-sizing: border-box;
  562. margin-top: 20rpx;
  563. background-color: #f8f8f8;
  564. border-radius: 6rpx;
  565. .content {
  566. .view-item {
  567. padding: 20rpx 0;
  568. box-sizing: border-box;
  569. border-bottom: 1rpx solid #eee;
  570. }
  571. /* 为最后一个view-item去掉边框 */
  572. .view-item:last-child {
  573. border-bottom: none;
  574. }
  575. }
  576. .Detail-header {
  577. width: 100%;
  578. height: 30rpx;
  579. background: linear-gradient(0deg, #FFFCEA 0%, #FFFFFF 100%);
  580. border-radius: 6rpx 6rpx 0rpx 0rpx;
  581. border-top: 1rpx solid #FFE1A4;
  582. }
  583. .Detail-footer {
  584. width: 100%;
  585. height: 30rpx;
  586. background: linear-gradient(0deg, #FFFCEA 0%, #FFFFFF 100%);
  587. border-radius: 6rpx 6rpx 0rpx 0rpx;
  588. border-bottom: 1rpx solid #FFE1A4;
  589. }
  590. }
  591. }
  592. .view-card:last-child {
  593. border-bottom: none;
  594. >.view-item {
  595. padding-bottom: 0;
  596. }
  597. }
  598. }
  599. // 步进器自定义样式
  600. .numberBoxMinus {
  601. width: 32rpx;
  602. height: 32rpx;
  603. border-radius: 20rpx 20rpx 20rpx 20rpx;
  604. border: 1rpx solid #FDE935;
  605. }
  606. .numberBoxInput {
  607. font-size: 30rpx;
  608. color: #333;
  609. padding: 0 20rpx;
  610. box-sizing: border-box;
  611. text-align: center;
  612. }
  613. .numberBoxPlus {
  614. width: 32rpx;
  615. height: 32rpx;
  616. border-radius: 20rpx 20rpx 20rpx 20rpx;
  617. background-color: #FDE935;
  618. border: 1rpx solid #FDE935;
  619. }
  620. .footer {
  621. position: fixed;
  622. bottom: 0;
  623. left: 0;
  624. right: 0;
  625. padding: 18rpx 30rpx 48rpx;
  626. box-sizing: border-box;
  627. background: linear-gradient(0deg, #FFFFFF 0%, rgba(255, 254, 245, 0.7) 100%);
  628. border-radius: 0rpx 0rpx 0rpx 0rpx;
  629. backdrop-filter: blur(12rpx);
  630. .footer-item {
  631. text:first-child {
  632. font-size: 30rpx;
  633. color: #666;
  634. }
  635. text:last-child {
  636. font-size: 30rpx;
  637. color: #333;
  638. font-weight: bold;
  639. margin-left: auto;
  640. }
  641. }
  642. .footer-item:last-child {
  643. text:last-child {
  644. color: #FF540A;
  645. }
  646. }
  647. }
  648. //出单机构选择
  649. .overflow {
  650. padding: 30rpx;
  651. box-sizing: border-box;
  652. .deptselect {
  653. .item {
  654. border-radius: 10rpx;
  655. border: 1px solid #EEEEEE;
  656. padding: 24rpx 25rpx;
  657. margin-bottom: 30rpx;
  658. width: 100%;
  659. box-sizing: border-box;
  660. image {
  661. width: 72rpx;
  662. height: 72rpx;
  663. margin-right: 20rpx;
  664. }
  665. .textregion {
  666. margin-right: auto;
  667. text:first-child {
  668. font-size: 32rpx;
  669. color: #333;
  670. font-weight: bold;
  671. }
  672. text:last-child {
  673. font-size: 30rpx;
  674. color: #666;
  675. }
  676. }
  677. }
  678. }
  679. }
  680. .discountAmount {
  681. padding: 40rpx;
  682. box-sizing: border-box;
  683. font-size: 28rpx;
  684. color: #666;
  685. .input-text {
  686. .dis {
  687. text:first-child {
  688. font-size: 32rpx;
  689. color: #333;
  690. }
  691. text:last-child {
  692. font-size: 32rpx;
  693. color: #999;
  694. }
  695. }
  696. }
  697. .footer-text {
  698. margin-top: 10rpx;
  699. font-size: 24rpx;
  700. color: #f56c6c;
  701. }
  702. }
  703. </style>