edit.vue 22 KB

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