customerBenefit.vue 23 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777
  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: false, //加载
  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. this.updateUsedAmount();
  281. }
  282. },
  283. computed: {
  284. //选中套餐售价总和
  285. totalPriceCount() {
  286. const total = (this.insOrderRightsPackageList || []).reduce(
  287. (sum, item) => {
  288. // 计算当前项的 packagePrice * quantity(高精度乘法)
  289. const itemTotal = new Decimal(item.packagePrice).times(new Decimal(item.rightsCount || 0));
  290. // 累加到总和
  291. return sum.plus(itemTotal);
  292. },
  293. new Decimal(0) // 初始值
  294. );
  295. const sum = new Decimal(total);
  296. return sum.toString(); // 返回字符串
  297. },
  298. //选中单品售价总和
  299. totalPriceCount1() {
  300. const total = (this.insOrderRightsList || []).reduce(
  301. (sum, item) => {
  302. // 计算当前项的 packagePrice * quantity(高精度乘法)
  303. const itemTotal = new Decimal(item.contractRate).times(new Decimal(item.rightsCount || 0));
  304. // 累加到总和
  305. return sum.plus(itemTotal);
  306. },
  307. new Decimal(0) // 初始值
  308. );
  309. const sum = new Decimal(total);
  310. return sum.toString(); // 返回字符串
  311. },
  312. },
  313. onLoad(options) {
  314. this.loadingShow = true;
  315. try {
  316. if (options) {
  317. if (options.readOnly && options.readOnly == 1) { //等于1页面只读
  318. this.readOnly = options.readOnly;
  319. }
  320. let data = JSON.parse(options.info)
  321. this.insFeeOrders = data.insFeeOrders || {}; //费用信息(防上游缺字段导致 undefined)
  322. this.ordersNo = data.ordersNo;
  323. this.insOrderRightsPackageList = data.insOrderRightsInfoVo?.insOrderRightsPackageList || [];
  324. this.insOrderRightsList = data.insOrderRightsInfoVo?.insOrderRightsList || [];
  325. this.recipientList = [{
  326. title: '车主',
  327. ...data.ownersInfo
  328. }, {
  329. title: '投保人',
  330. ...data.policyHolderInfo
  331. }, {
  332. title: '被保人',
  333. ...data.insuredPersonInfo
  334. }]
  335. this.customerInfo = this.recipientList[1];
  336. }
  337. this.loadingShow = false;
  338. } catch (error) {
  339. this.loadingShow = false;
  340. }
  341. },
  342. methods: {
  343. // 权益数量变化监听
  344. onRightsCountChange(e, index, name, field, type) {
  345. if (e.value == 0) {
  346. this[name].splice(index, 1);
  347. this.updateUsedAmount(); //份数减为0移除后,同步已使用/剩余金额
  348. return;
  349. }
  350. // 获取当前项
  351. const item = this[name][index];
  352. // 获取当前数量和新数量
  353. const currentCount = item.rightsCount;
  354. const newCount = e.value;
  355. // 计算价格
  356. const price = parseFloat(item[field]);
  357. // 计算当前总价
  358. const currentTotalPrice = parseFloat(type == 1 ? this.totalPriceCount : this.totalPriceCount1);
  359. // 计算数量变化和价格变化
  360. const countChange = newCount - currentCount;
  361. const priceChange = countChange * price;
  362. // 计算新总价
  363. const newTotalPrice = currentTotalPrice + priceChange;
  364. // 如果是增加数量,检查是否超过可用金额
  365. if (countChange > 0 && newTotalPrice > this.insFeeOrders.availableAmount) {
  366. uni.showToast({
  367. title: `权益总价不能超过可用金额${this.insFeeOrders.availableAmount}元`,
  368. icon: 'none'
  369. });
  370. } else {
  371. // 无论是减少数量还是增加数量且未超过限制,都允许更新
  372. item.rightsCount = newCount;
  373. this.updateUsedAmount(); //份数变化后,同步已使用/剩余金额
  374. }
  375. },
  376. // 按当前选中权益重新计算已使用/剩余金额(高精度)
  377. updateUsedAmount() {
  378. const used = new Decimal(this.totalPriceCount || 0).plus(new Decimal(this.totalPriceCount1 || 0));
  379. const available = new Decimal(this.insFeeOrders.availableAmount || 0);
  380. this.$set(this.insFeeOrders, 'usedAmount', used.toString());
  381. this.$set(this.insFeeOrders, 'remainingAmount', available.minus(used).toString());
  382. },
  383. // 获取权益明细
  384. async rightsDetails(item, index) {
  385. if (!item.rightsDetailsList) {
  386. let res = await this.$http.get(`/rightsGrant/package/detail/${item.id}`);
  387. if (res.code == 200) {
  388. this.insOrderRightsPackageList[index].rightsDetailsList = res.data; //群益明细赋值对应套餐
  389. this.insOrderRightsPackageList[index].vehicleTaxIsExpanded = !this.insOrderRightsPackageList[
  390. index]
  391. .vehicleTaxIsExpanded; //展开收起
  392. }
  393. } else {
  394. this.insOrderRightsPackageList[index].vehicleTaxIsExpanded = !this.insOrderRightsPackageList[index]
  395. .vehicleTaxIsExpanded; //展开收起
  396. }
  397. },
  398. async adjustAmount() {
  399. this.$refs.uForm.validate().then(async formRes => {
  400. let res = await this.$http.post('/insFeeOrder/updateAvailableAmount', {
  401. orderNo: this.ordersNo,
  402. availableAmount: this.discountAmountForm.availableAmount,
  403. });
  404. if (res.code == 200) {
  405. let res = await this.$http.get('/supplementOrder/getOrderDetail?ordersNo=' + this
  406. .ordersNo);
  407. if (res.code == 200) {
  408. this.insFeeOrders = res.data.insFeeOrders;
  409. this.discountAmountShow = false;
  410. this.insOrderRightsPackageList = []; //权益套餐
  411. this.insOrderRightsList = []; //权益单品
  412. }
  413. }
  414. }).catch(errors => {
  415. })
  416. },
  417. adjustDiscountAmount() {
  418. if (this.insFeeOrders.totalExportKeepPointPremium == 0) {
  419. this.discountAmountShow = true
  420. }
  421. },
  422. //返回键事件
  423. backKeyChange() {
  424. let insOrderRightsInfoDto = {
  425. insOrderRightsPackageList: this.insOrderRightsPackageList,
  426. insOrderRightsList: this.insOrderRightsList,
  427. rightsGrantReceiverDTO: {
  428. receiverType: this.customerInfo.policyPersonType,
  429. receiverName: this.customerInfo.name,
  430. receiverMobile: this.customerInfo.mobile
  431. }
  432. }
  433. let pages = getCurrentPages(); //获取所有页面栈实例列表
  434. let prevPage = pages[pages.length - 2]; //上一页页面实例
  435. prevPage.$vm.insOrderRightsInfoDto = insOrderRightsInfoDto;
  436. uni.navigateBack({ //uni.navigateTo跳转的返回,默认1为返回上一级
  437. delta: 1
  438. });
  439. },
  440. // 选择权益
  441. selectedBenefits(type, index) {
  442. if (this[type].length > 0) {
  443. return uni.showToast({
  444. title: '套餐和单品只能选择其中1种',
  445. icon: 'none'
  446. })
  447. }
  448. uni.navigateTo({
  449. url: `/pages/reward/${index==1?'benefitPackage':'benefitSingleItem'}?availableAmount=${this.insFeeOrders.availableAmount}`,
  450. })
  451. },
  452. recipientchange(item) {
  453. this.customerInfo = this.recipientList.find(val => val.title == item);
  454. this.receiverShow = false;
  455. }
  456. }
  457. }
  458. </script>
  459. <style lang="scss" scoped>
  460. page {
  461. background-color: #f8f8f8;
  462. }
  463. .page {
  464. background-color: #f8f8f8;
  465. }
  466. .customerInfo {
  467. background-color: #fff;
  468. padding: 25rpx 30rpx;
  469. box-sizing: border-box;
  470. .title {
  471. margin-right: auto;
  472. font-size: 30rpx;
  473. color: #666;
  474. }
  475. .phone {
  476. font-size: 30rpx;
  477. color: #333;
  478. font-weight: bold;
  479. margin-right: 10rpx;
  480. }
  481. .u-icon {
  482. margin-top: 4rpx;
  483. }
  484. .editTag {
  485. padding: 4rpx 20rpx;
  486. box-sizing: border-box;
  487. font-size: 24rpx;
  488. margin-right: 4rpx;
  489. color: #333;
  490. background: rgba(253, 233, 53, 0.2);
  491. border-radius: 30rpx 30rpx 30rpx 30rpx;
  492. border: 1rpx solid #FDE935;
  493. image {
  494. width: 24rpx;
  495. height: 24rpx;
  496. margin-right: 10rpx;
  497. }
  498. }
  499. }
  500. .noteText {
  501. font-size: 24rpx;
  502. color: #999;
  503. }
  504. .content-body {
  505. background-color: #fff;
  506. padding: 30rpx;
  507. box-sizing: border-box;
  508. position: relative;
  509. margin-bottom: 20rpx;
  510. .header {
  511. .title {
  512. font-size: 34rpx;
  513. color: #333;
  514. font-weight: bold;
  515. }
  516. .select-btn {
  517. padding: 8rpx 28rpx;
  518. box-sizing: border-box;
  519. font-size: 28rpx;
  520. color: #1f1f1f;
  521. background: #FDE935;
  522. border-radius: 50rpx 50rpx 50rpx 50rpx;
  523. }
  524. }
  525. .view-card {
  526. background-color: #fff;
  527. border-radius: 10rpx;
  528. border-bottom: 1rpx solid #eee;
  529. .view-item {
  530. padding: 30rpx 0;
  531. box-sizing: border-box;
  532. .image {
  533. width: 136rpx;
  534. height: 136rpx;
  535. border-radius: 10rpx;
  536. flex-shrink: 0;
  537. margin-right: 20rpx;
  538. }
  539. .content {
  540. flex: 1;
  541. min-width: 0;
  542. line-height: 1;
  543. .sum {
  544. text {
  545. font-size: 24rpx;
  546. color: #666;
  547. }
  548. }
  549. .plice {
  550. font-size: 30rpx;
  551. color: #FF540A;
  552. font-weight: bold;
  553. line-height: 1;
  554. }
  555. .Detail {
  556. font-size: 26rpx;
  557. color: #FFAC1D;
  558. line-height: 1.4;
  559. text {
  560. margin-right: 5rpx;
  561. }
  562. }
  563. }
  564. }
  565. .Detail-list {
  566. padding: 10rpx 20rpx;
  567. box-sizing: border-box;
  568. margin-top: 20rpx;
  569. background-color: #f8f8f8;
  570. border-radius: 6rpx;
  571. .content {
  572. .view-item {
  573. padding: 20rpx 0;
  574. box-sizing: border-box;
  575. border-bottom: 1rpx solid #eee;
  576. }
  577. /* 为最后一个view-item去掉边框 */
  578. .view-item:last-child {
  579. border-bottom: none;
  580. }
  581. }
  582. .Detail-header {
  583. width: 100%;
  584. height: 30rpx;
  585. background: linear-gradient(0deg, #FFFCEA 0%, #FFFFFF 100%);
  586. border-radius: 6rpx 6rpx 0rpx 0rpx;
  587. border-top: 1rpx solid #FFE1A4;
  588. }
  589. .Detail-footer {
  590. width: 100%;
  591. height: 30rpx;
  592. background: linear-gradient(0deg, #FFFCEA 0%, #FFFFFF 100%);
  593. border-radius: 6rpx 6rpx 0rpx 0rpx;
  594. border-bottom: 1rpx solid #FFE1A4;
  595. }
  596. }
  597. }
  598. .view-card:last-child {
  599. border-bottom: none;
  600. >.view-item {
  601. padding-bottom: 0;
  602. }
  603. }
  604. }
  605. // 步进器自定义样式
  606. .numberBoxMinus {
  607. width: 32rpx;
  608. height: 32rpx;
  609. border-radius: 20rpx 20rpx 20rpx 20rpx;
  610. border: 1rpx solid #FDE935;
  611. }
  612. .numberBoxInput {
  613. font-size: 30rpx;
  614. color: #333;
  615. padding: 0 20rpx;
  616. box-sizing: border-box;
  617. text-align: center;
  618. }
  619. .numberBoxPlus {
  620. width: 32rpx;
  621. height: 32rpx;
  622. border-radius: 20rpx 20rpx 20rpx 20rpx;
  623. background-color: #FDE935;
  624. border: 1rpx solid #FDE935;
  625. }
  626. .footer {
  627. position: fixed;
  628. bottom: 0;
  629. left: 0;
  630. right: 0;
  631. padding: 18rpx 30rpx 48rpx;
  632. box-sizing: border-box;
  633. background: linear-gradient(0deg, #FFFFFF 0%, rgba(255, 254, 245, 0.7) 100%);
  634. border-radius: 0rpx 0rpx 0rpx 0rpx;
  635. backdrop-filter: blur(12rpx);
  636. .footer-item {
  637. text:first-child {
  638. font-size: 30rpx;
  639. color: #666;
  640. }
  641. text:last-child {
  642. font-size: 30rpx;
  643. color: #333;
  644. font-weight: bold;
  645. margin-left: auto;
  646. }
  647. }
  648. .footer-item:last-child {
  649. text:last-child {
  650. color: #FF540A;
  651. }
  652. }
  653. }
  654. //出单机构选择
  655. .overflow {
  656. padding: 30rpx;
  657. box-sizing: border-box;
  658. .deptselect {
  659. .item {
  660. border-radius: 10rpx;
  661. border: 1px solid #EEEEEE;
  662. padding: 24rpx 25rpx;
  663. margin-bottom: 30rpx;
  664. width: 100%;
  665. box-sizing: border-box;
  666. image {
  667. width: 72rpx;
  668. height: 72rpx;
  669. margin-right: 20rpx;
  670. }
  671. .textregion {
  672. margin-right: auto;
  673. text:first-child {
  674. font-size: 32rpx;
  675. color: #333;
  676. font-weight: bold;
  677. }
  678. text:last-child {
  679. font-size: 30rpx;
  680. color: #666;
  681. }
  682. }
  683. }
  684. }
  685. }
  686. .discountAmount {
  687. padding: 40rpx;
  688. box-sizing: border-box;
  689. font-size: 28rpx;
  690. color: #666;
  691. .input-text {
  692. .dis {
  693. text:first-child {
  694. font-size: 32rpx;
  695. color: #333;
  696. }
  697. text:last-child {
  698. font-size: 32rpx;
  699. color: #999;
  700. }
  701. }
  702. }
  703. .footer-text {
  704. margin-top: 10rpx;
  705. font-size: 24rpx;
  706. color: #f56c6c;
  707. }
  708. }
  709. </style>