edit.vue 22 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611
  1. <template>
  2. <div class="salesNewEdit-wrap">
  3. <a-spin :spinning="spinning" tip="Loading...">
  4. <a-page-header :ghost="false" :backIcon="false" @back="handleBack" >
  5. <!-- 自定义的二级文字标题 -->
  6. <template slot="subTitle">
  7. <a id="salesEdit-back-btn" href="javascript:;" @click="handleBack"><a-icon type="left" /> 返回列表</a>
  8. <span style="margin: 0 15px;color: #666;font-weight: bold;">单号:{{ detailData&&detailData.salesBillNo }}</span>
  9. <span v-if="detailData&&detailData.salesBillNoSource">(原:{{ detailData&&detailData.salesBillNoSource || '--' }})</span>
  10. <span style="margin: 0 10px;color: #666;">客户名称:{{ detailData&&detailData.buyerName }}</span>
  11. <a-button type="link" size="small" class="button-default" @click="showDetail=!showDetail">
  12. <a-icon :type="showDetail ? 'eye-invisible' : 'eye'"/> {{ showDetail?'隐藏':'查看' }}信息
  13. </a-button>
  14. </template>
  15. </a-page-header>
  16. <!-- 单据详情 -->
  17. <a-card size="small" :bordered="false" class="salesEdit-cont" v-show="showDetail">
  18. <div style="padding: 10px;">
  19. <a-descriptions size="small" :column="3">
  20. <a-descriptions-item label="客户名称">{{ detailData&&detailData.buyerName || '--' }}</a-descriptions-item>
  21. <a-descriptions-item label="收货地址" :span="2">{{ shippingAddress||'--' }}</a-descriptions-item>
  22. <a-descriptions-item label="收货人">{{ detailData&&detailData.salesBillExtEntity&&detailData.salesBillExtEntity.consigneeName || '--' }}</a-descriptions-item>
  23. <a-descriptions-item label="收货电话">{{ detailData&&detailData.salesBillExtEntity&&detailData.salesBillExtEntity.consigneeTel || '--' }}</a-descriptions-item>
  24. <a-descriptions-item label="收款方式">{{ detailData&&detailData.settleStyleSnDictValue || '--' }}</a-descriptions-item>
  25. <a-descriptions-item label="审核时间">{{ detailData&&detailData.auditDate || '--' }}</a-descriptions-item>
  26. <a-descriptions-item label="业务状态">{{ detailData&&detailData.billStatusDictValue || '--' }}</a-descriptions-item>
  27. <a-descriptions-item label="财务状态">{{ detailData&&detailData.financialStatusDictValue || '--' }}</a-descriptions-item>
  28. <a-descriptions-item label="改单时间" v-if="detailData&&detailData.salesBillSource=='PURCHASE'&&detailData.submitDate">{{ detailData.submitDate }}</a-descriptions-item>
  29. <a-descriptions-item label="最新提交时间" v-if="detailData&&detailData.salesBillSource=='SALES'&&detailData.submitDate">{{ detailData.submitDate }}</a-descriptions-item>
  30. <a-descriptions-item label="备注" :span="3">{{ detailData&&detailData.remarks || '--' }}</a-descriptions-item>
  31. </a-descriptions>
  32. </div>
  33. </a-card>
  34. <!-- 正常产品 -->
  35. <a-card size="small" :bordered="false" class="salesEdit-cont" v-if="salesBillSn">
  36. <div style="padding: 10px;">
  37. <productNormalList
  38. ref="productNormalList"
  39. @insterOk="insterActiveOk"
  40. @spinning="e=>spinning=e"
  41. @openCpModal="openProductModal"
  42. @allThreeStock="searchAllThreeStock"
  43. @addActive="addActive"
  44. :showTotal="showTotal"
  45. :hasActive="activeList.length>0"
  46. :detailData="detailData"
  47. :warehouseSn="warehouseSn"
  48. :salesBillSn="salesBillSn"></productNormalList>
  49. </div>
  50. </a-card>
  51. <!-- 活动统计列表 -->
  52. <a-card
  53. size="small"
  54. :bordered="false"
  55. class="salesEdit-cont"
  56. v-if="activeList.length"
  57. >
  58. <activeStatisticsList
  59. ref="activeTjList"
  60. @openCpModal="openProductModal"
  61. @insterOk="insterActiveOk"
  62. @upActive="upActive"
  63. :activeList="activeList"
  64. :warehouseSn="warehouseSn"
  65. :salesBillSn="salesBillSn"
  66. ></activeStatisticsList>
  67. </a-card>
  68. <!-- 活动产品列表 -->
  69. <a-card
  70. size="small"
  71. :bordered="false"
  72. class="salesEdit-cont"
  73. title="活动产品"
  74. v-if="activeList.length"
  75. >
  76. <div style="padding: 10px;">
  77. <productList
  78. ref="productList-active-list"
  79. :activeList="activeList"
  80. :detailData="detailData"
  81. :warehouseSn="warehouseSn"
  82. :salesBillSn="salesBillSn">
  83. </productList>
  84. </div>
  85. </a-card>
  86. </a-spin>
  87. <!-- 底部栏 -->
  88. <div class="affix-cont">
  89. <div class="footer-price">
  90. <div></div>
  91. <div v-if="detailData">
  92. <div class="totalPrice">总售价:¥<span>{{ toThousands(detailData.totalAmount) }}</span></div>
  93. <div>
  94. 产品总款数:<strong style="margin-right: 10px;"> {{ detailData.totalCategory }} </strong>
  95. 总数量:<strong style="margin-right: 10px;"> {{ detailData.totalQty }} </strong>
  96. <!-- 总售价:¥<strong> {{ toThousands(detailData.totalOrigAmount) }}</strong> -->
  97. <span style="margin:0 10px;" v-if="detailData.totalDiscountAmount">优惠金额:¥-<strong>{{ Number(detailData.totalDiscountAmount).toFixed(2) }}</strong></span>
  98. <a-popover title="优惠明细" @visibleChange="(visible)=>{visible&&getPromYhDetail()}">
  99. <a-button shape="round" size="small" v-if="detailData.totalDiscountAmount">优惠明细</a-button>
  100. <div slot="content">
  101. <div v-if="yhDetail">
  102. <div
  103. class="yhdetail"
  104. style="min-width:300px;margin-bottom: 5px;"
  105. v-for="(item,index) in yhDetail.promoMapList"
  106. :key="index">
  107. <div class="yhdetail-h" style="font-weight: bold;font-size:14px;">{{ item.description }}</div>
  108. <div
  109. style="padding-left:10px;"
  110. v-for="(sitem,sindex) in item.promoRuleMapList"
  111. :key="sindex"
  112. v-if="sitem.lossAmount"
  113. >
  114. <div style="display: flex;justify-content: space-between;">
  115. <span>{{ sitem.promotionRuleTypeDictValue }}:</span>
  116. <strong>¥{{ toThousands(sitem.lossAmount) }}</strong>
  117. </div>
  118. <div class="yhdetail-d" style="color:#999;">{{ sitem.description }}</div>
  119. </div>
  120. </div>
  121. <div class="yhdetail" style="display: flex;justify-content: space-between;">
  122. <span style="font-weight: bold;font-size:14px;">优惠金额:</span>
  123. <span style="font-weight: bold;font-size:18px;">¥{{ Number(yhDetail.totalLossAmount).toFixed(2) }}</span>
  124. </div>
  125. </div>
  126. <div style="text-align: center;padding: 20px;" v-else>
  127. 正在加载...
  128. </div>
  129. </div>
  130. </a-popover>
  131. </div>
  132. </div>
  133. </div>
  134. <div>
  135. <a-button
  136. size="large"
  137. style="padding: 0 40px;"
  138. :disabled="spinning"
  139. type="primary"
  140. class="button-primary"
  141. @click="submitResult()"
  142. id="productInfoList-handleSubmit">提交</a-button>
  143. </div>
  144. </div>
  145. <!-- 添加产品 -->
  146. <chooseProduct
  147. ref="chooseProduct"
  148. :openModal="showCpModal"
  149. @close="closeProductModal"
  150. @addProduct="insterProduct">
  151. </chooseProduct>
  152. <!-- 新活动窗口 -->
  153. <newPromoModal
  154. :show="showNewActiveModal"
  155. :salesBillSn="salesBillSn"
  156. :newActiveList="newActiveList"
  157. @ok="showNewActiveOk"
  158. ></newPromoModal>
  159. </div>
  160. </template>
  161. <script>
  162. import { commonMixin } from '@/utils/mixin'
  163. import productList from './comps/productList.vue'
  164. import productNormalList from './comps/productNormalList.vue'
  165. import activeStatisticsList from './comps/activeStatisticsList.vue'
  166. import chooseProduct from './comps/chooseProduct.vue'
  167. import newPromoModal from './newPromoModal.vue'
  168. import { salesChangePromo } from '@/api/salesDetailNew'
  169. import { salesDetailBySn, salesPromoQueryCount, salesWriteSubmit, submitCheck, updateBatch, salesPromoQueryList, salesQueryUnPartPromo, salesPromoValidaSubmit, getThirdStockQty } from '@/api/salesNew'
  170. export default {
  171. name: 'SalesNewEdit',
  172. mixins: [commonMixin],
  173. components: {
  174. productList,
  175. chooseProduct,
  176. productNormalList,
  177. newPromoModal,
  178. activeStatisticsList
  179. },
  180. data () {
  181. return {
  182. spinning: false,
  183. activeList: [], // 活动列表
  184. newActiveList: [], // 新活动列表
  185. activeDesKey: {}, // 活动规则详情数据
  186. salesBillSn: null, // 销售单sn
  187. detailData: { discountAmount: 0, id: null, salesBillSn: '' }, // 订单基础数据
  188. warehouseSn: undefined, // 仓库sn
  189. // 有价格变更前后总金额
  190. updataData: {
  191. totalRealAmount: '',
  192. totalAmount: ''
  193. },
  194. showDetail: false, // 显示详细基本信息
  195. showCpModal: false, // 添加产品弹框
  196. cpCurRefId: 'productList-active-list', // 活动产品列表ref
  197. disabledActiveOption: null, // 禁用活动选项
  198. yhDetail: null, // 优惠明细
  199. showNewActiveModal: false // 新活动弹框
  200. }
  201. },
  202. computed: {
  203. // 是否显示统计信息
  204. showTotal () {
  205. return this.activeList.length > 0
  206. },
  207. // 详细地址
  208. shippingAddress () {
  209. const shippingAddrProvinceName = this.detailData && this.detailData.salesBillExtEntity && this.detailData.salesBillExtEntity.shippingAddrProvinceName ? this.detailData.salesBillExtEntity.shippingAddrProvinceName : ''
  210. const shippingAddrCityName = this.detailData && this.detailData.salesBillExtEntity && this.detailData.salesBillExtEntity.shippingAddrCityName ? this.detailData.salesBillExtEntity.shippingAddrCityName : ''
  211. const shippingAddrCountyName = this.detailData && this.detailData.salesBillExtEntity && this.detailData.salesBillExtEntity.shippingAddrCountyName ? this.detailData.salesBillExtEntity.shippingAddrCountyName : ''
  212. const shippingAddr = this.detailData && this.detailData.salesBillExtEntity && this.detailData.salesBillExtEntity.shippingAddr ? this.detailData.salesBillExtEntity.shippingAddr : ''
  213. if (!shippingAddrProvinceName && !shippingAddrCityName && !shippingAddrCountyName && !shippingAddr) {
  214. return '--'
  215. } else {
  216. return shippingAddrProvinceName + shippingAddrCityName + shippingAddrCountyName + shippingAddr
  217. }
  218. }
  219. },
  220. methods: {
  221. // 返回
  222. handleBack () {
  223. this.$router.push({ name: 'salesQueryNewList', query: { closeLastOldTab: true } })
  224. },
  225. // 收起展开活动区域
  226. tooglePanel (item) {
  227. item.isActive = !item.isActive
  228. this.activeList.splice()
  229. // 刷新当前表格
  230. if (item.isActive) {
  231. const row = this.$refs['productList-' + item.promoRuleSn][0]
  232. row && row.resetSearchForm()
  233. }
  234. },
  235. // 销售单详情
  236. getOrderDetail (flag, callback) {
  237. salesDetailBySn({ salesBillSn: this.$route.params.sn }).then(res => {
  238. if (res.status == 200) {
  239. this.detailData = res.data
  240. this.detailData.totalDiscountAmount = Number(this.detailData.totalOrigAmount || 0) - Number(this.detailData.totalAmount || 0)
  241. if (callback) {
  242. callback()
  243. }
  244. }
  245. if (flag) {
  246. this.getActiveList()
  247. }
  248. })
  249. },
  250. // 优惠明细查看
  251. getPromYhDetail () {
  252. salesPromoQueryCount({ salesBillSn: this.$route.params.sn }).then(res => {
  253. if (res.status == 200) {
  254. this.yhDetail = res.data
  255. }
  256. })
  257. },
  258. // 轮询判断是否全部加载完了
  259. isAllLoadFinish (mlist) {
  260. const nid = setInterval(() => {
  261. const ret = []
  262. mlist.map(item => {
  263. const da = item.disabled
  264. ret.push(da)
  265. })
  266. // 加载完了
  267. if (!ret.includes(true)) {
  268. clearInterval(nid)
  269. this.spinning = false
  270. }
  271. }, 50)
  272. },
  273. // 刷新所有第三方库存
  274. searchAllThreeStock () {
  275. this.spinning = true
  276. getThirdStockQty({ salesBillSn: this.$route.params.sn }).then(res => {
  277. if (res.status == 200) {
  278. // 刷新正常活动产品列表
  279. this.$refs.productNormalList.searchThreeStockOk()
  280. // 刷新所有活动产品列表
  281. const activeList = this.activeList
  282. activeList.map(item => {
  283. item.isActive = true
  284. const row = this.$refs['productList-' + item.promoRuleSn][0]
  285. row && row.searchThreeStockOk()
  286. })
  287. activeList.splice()
  288. }
  289. this.spinning = false
  290. })
  291. },
  292. // 刷新所有表格数据
  293. updateAllTable (flag) {
  294. const activeList = this.activeList.filter(item => item.isActive)
  295. const mlist = []
  296. this.spinning = true
  297. // 刷新正常产品列表
  298. this.$refs.productNormalList.resetSearchForm()
  299. mlist.push(this.$refs.productNormalList)
  300. // 刷新所有活动产品列表
  301. activeList.map(item => {
  302. const row = this.$refs['productList-' + item.promoRuleSn][0]
  303. row && row.resetSearchForm()
  304. mlist.push(row)
  305. })
  306. // 判断是否全部调用完
  307. this.isAllLoadFinish(mlist)
  308. // 是否刷新详情
  309. if (flag) {
  310. this.getOrderDetail()
  311. }
  312. },
  313. // 获取销售单参与的活动列表
  314. async getActiveList () {
  315. // 已参与活动列表
  316. const list = await salesPromoQueryList({ salesBillSn: this.$route.params.sn }).then(res => res.data || [])
  317. this.activeList = list.filter(item => item.promotion && item.promotionRule)
  318. this.activeList.map(item => {
  319. item.isActive = item.enabledFlag == 1
  320. item.showDesc = false
  321. item.disabled = item.enabledFlag == 0
  322. this.activeDesKey['search-' + item.promoRuleSn] = false
  323. })
  324. setTimeout(() => {
  325. this.updateAllTable()
  326. }, 500)
  327. },
  328. // 获取是否有新活动,有则弹出弹框
  329. async getNewActive () {
  330. const hasNewActive = await salesQueryUnPartPromo({ salesBillSn: this.$route.params.sn, enabledFlag: '1' }).then(res => res.data)
  331. if (hasNewActive.length) {
  332. this.newActiveList = hasNewActive
  333. this.showNewActiveModal = true
  334. }
  335. },
  336. // 新活动弹框,确认
  337. showNewActiveOk () {
  338. this.showNewActiveModal = false
  339. this.getOrderDetail(true)
  340. },
  341. // 添加产品后,关闭弹框
  342. closeProductModal (type) {
  343. this.showCpModal = false
  344. },
  345. // 打开选择产品弹框
  346. openProductModal (type, promo) {
  347. this.$refs.chooseProduct.pageInit(this.detailData, promo, type)
  348. this.showCpModal = true
  349. },
  350. // 添加活动产品成功的回调
  351. insterActiveOk (type) {
  352. const mlist = []
  353. this.spinning = true
  354. // 如果时活动产品
  355. if (type == 'promo') {
  356. // 刷新正常产品列表
  357. this.$refs.productNormalList.resetSearchForm()
  358. mlist.push(this.$refs.productNormalList)
  359. }
  360. // 如果时正常产品
  361. if (type == 'normal') {
  362. // 刷新活动产品列表
  363. const activeList = this.activeList.filter(item => item.isActive)
  364. activeList.map(item => {
  365. const row = this.$refs['productList-' + item.promoRuleSn][0]
  366. row && row.resetSearchForm()
  367. mlist.push(row)
  368. })
  369. }
  370. // 判断是否全部调用完
  371. this.isAllLoadFinish(mlist)
  372. // 重新获取详情信息
  373. this.getOrderDetail()
  374. },
  375. // 确定新增产品
  376. insterProduct (row, promotionFlag, type) {
  377. // 正常产品
  378. if (type == 0) {
  379. this.$refs.productNormalList.saveNewProduct(row, promotionFlag)
  380. } else {
  381. // 活动产品对象
  382. this.$refs[this.cpCurRefId][0].saveNewProduct(row, promotionFlag, type)
  383. }
  384. },
  385. // 正常产品添加到活动
  386. addActive (data, params) {
  387. const promo = data.split('-')
  388. const newSn = this.activeList.find(item => item.promoRuleSn == promo[1])
  389. const newSalesPromoSn = newSn && newSn.salesPromoSn || ''
  390. salesChangePromo({
  391. salesPromoSn: newSalesPromoSn,
  392. promoRuleSn: promo[1],
  393. promotionFlag: promo[2] || '',
  394. ...params
  395. }).then(res => {
  396. if (res.status == 200) {
  397. const mlist = []
  398. this.spinning = true
  399. // 刷新新参与活动
  400. if (data != 0) {
  401. const nt = this.$refs['productList-' + promo[1]][0]
  402. nt && nt.resetSearchForm()
  403. mlist.push(nt)
  404. }
  405. // 刷新正常活动
  406. const pnt = this.$refs.productNormalList
  407. pnt && pnt.addAcitveSuccess()
  408. mlist.push(pnt)
  409. // 判断是否全部调用完
  410. this.isAllLoadFinish(mlist)
  411. // 刷新详情统计
  412. this.getOrderDetail()
  413. }
  414. })
  415. },
  416. // 更换活动
  417. upActive (oldPromo, data, params) {
  418. const promo = data.split('-')
  419. const newSn = this.activeList.find(item => item.promoRuleSn == promo[1])
  420. const newSalesPromoSn = newSn && newSn.salesPromoSn || ''
  421. salesChangePromo({
  422. salesPromoSn: data != 0 ? newSalesPromoSn : '',
  423. promoRuleSn: promo[1],
  424. promotionFlag: promo[2] || '',
  425. ...params
  426. }).then(res => {
  427. if (res.status == 200) {
  428. const mlist = []
  429. this.spinning = true
  430. // 刷新新参与活动
  431. if (data != 0) {
  432. const nt = this.$refs['productList-' + promo[1]][0]
  433. nt && nt.resetSearchForm()
  434. mlist.push(nt)
  435. }
  436. // 刷新正常活动
  437. const pnt = this.$refs.productNormalList
  438. pnt && pnt.resetSearchForm()
  439. mlist.push(pnt)
  440. // 刷新当前活动
  441. const ot = this.$refs['productList-' + oldPromo.promoRuleSn][0]
  442. ot && ot.upAcitveSuccess()
  443. mlist.push(ot)
  444. // 判断是否全部调用完
  445. this.isAllLoadFinish(mlist)
  446. // 刷新详情统计
  447. this.getOrderDetail()
  448. }
  449. })
  450. },
  451. // 提交销售单
  452. async submitResult () {
  453. const _this = this
  454. const data = { salesBillSn: _this.salesBillSn }
  455. // 校验活动规则
  456. const vaildActive = await salesPromoValidaSubmit({ salesBillSn: this.salesBillSn }).then(res => res.data)
  457. const a = vaildActive.filter(item => item.type == 1) // 不可提交
  458. const b = vaildActive.filter(item => item.type == 0) // 可跳过继续提交
  459. // 弹出不符合规则弹框,不可提交
  460. if (a.length) {
  461. this.$info({
  462. title: '提示',
  463. centered: true,
  464. class: 'confirm-center',
  465. okText: '关闭',
  466. width: 600,
  467. content: <div style="padding-top:15px;">
  468. <ol>
  469. {a.map(item => (
  470. <li style="padding:3px 0;">{item.message}</li>
  471. ))}
  472. </ol>
  473. <div style="padding:10px 0;text-align:center"><strong>请按照以上提示修改后再提交</strong></div>
  474. </div>
  475. })
  476. this.spinning = false
  477. } else {
  478. // 弹出确认提示信息,可跳过继续提交
  479. if (b.length) {
  480. this.$confirm({
  481. title: '提示',
  482. centered: true,
  483. class: 'confirm-center',
  484. okText: '提交',
  485. width: 600,
  486. content: <div style="padding-top:15px;">
  487. <ol>
  488. {b.map(item => (
  489. <li style="padding:3px 0;">{item.message}</li>
  490. ))}
  491. </ol>
  492. </div>,
  493. onOk () {
  494. _this.submitOrder(data)
  495. }
  496. })
  497. this.spinning = false
  498. } else {
  499. _this.submitOrder(data)
  500. }
  501. }
  502. },
  503. // 提交销售单
  504. async submitOrder (data) {
  505. this.spinning = true
  506. const res = await salesWriteSubmit(data)
  507. if (res.status == 200) {
  508. this.handleBack()
  509. this.$message.success(res.message)
  510. }
  511. this.spinning = false
  512. },
  513. // 页面初始化
  514. pageInit () {
  515. this.salesBillSn = this.$route.params.sn
  516. this.warehouseSn = this.$route.params.sn ? this.$route.params.wSn : ''
  517. // 获取销售单详情
  518. this.getOrderDetail(true)
  519. // 是否有新活动
  520. this.getNewActive()
  521. }
  522. },
  523. mounted () {
  524. if (!this.$store.state.app.isNewTab) { // 页签刷新时调用
  525. this.pageInit()
  526. }
  527. },
  528. activated () {
  529. // 如果是新页签打开或者进入新的子页(例:存在列表第2条数据编辑页页签时再打开第4条数据的编辑页),则重置当前页面
  530. if (this.$store.state.app.isNewTab || !this.$store.state.app.isNewSubTab) {
  531. this.pageInit()
  532. }
  533. },
  534. beforeRouteEnter (to, from, next) {
  535. next(vm => {})
  536. }
  537. }
  538. </script>
  539. <style lang="less">
  540. .salesNewEdit-wrap{
  541. position: relative;
  542. height: 100%;
  543. padding-bottom: 65px;
  544. box-sizing: border-box;
  545. >.ant-spin-nested-loading{
  546. overflow-y: auto;
  547. height: 100%;
  548. }
  549. .salesEdit-cont{
  550. margin: 6px 0;
  551. }
  552. .redStyle{
  553. font-weight: bold;
  554. color: red;
  555. }
  556. .ellipsisCon{
  557. display: flex;
  558. justify-content: space-between;
  559. align-items: center;
  560. .ellipsisText{
  561. width: 100%;
  562. overflow: hidden;
  563. text-overflow: ellipsis;
  564. display: box;
  565. display: -webkit-box;
  566. -webkit-line-clamp: 1;
  567. -webkit-box-orient: vertical;
  568. }
  569. }
  570. .ant-card-small > .ant-card-body {
  571. padding: 0!important;
  572. }
  573. .affix-cont{
  574. padding: 6px 12px;
  575. text-align: right;
  576. display: flex;
  577. justify-content: space-between;
  578. align-items: center;
  579. .footer-price{
  580. flex-grow:1;
  581. display: flex;
  582. justify-content: flex-end;
  583. align-items: center;
  584. > div{
  585. padding: 0 15px;
  586. }
  587. .totalPrice{
  588. span{
  589. font-weight: bold;
  590. color: red;
  591. font-size: 20px;
  592. }
  593. }
  594. }
  595. }
  596. }
  597. </style>