order-contract.vue 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314
  1. <template>
  2. <view class="container clearfix">
  3. <tui-skeleton v-if="skeletonShow" backgroundColor="#fafafa" borderRadius="10rpx" :isLoading="true"
  4. :loadingType="5" />
  5. <view class="container-content tui-skeleton" v-else>
  6. <!-- <view class="text-h1 center">销售合同</view> -->
  7. <view class="text-h1">甲方(卖方):【厦门盛德至善医疗科技有限公司】</view>
  8. <view class="text-h1">乙方(买方):【{{ clubInfo.name }}】</view>
  9. <view class="text-h1">丙方(平台方):【深圳市采美网络技术有限公司】</view>
  10. <view class="text-h1">鉴于:</view>
  11. <view class="text-p">
  12. 1、丙方系美容行业的电子商务平台运营商,其开发运营的交易平台(www.caimei365.com),采美CRM管理系统和商城小程序(以下简称“丙方平台”或“平台”)是提供美容产品仪器供应商、美容机构、医疗美容机构以及服务商合作和交易平台,丙方平台的运作规则包括
  13. <text @click.stop="this.$api.navigateTo('/pages/service/service?id=1023&title=用户协议')">
  14. 《用户协议》
  15. </text>、
  16. <text @click.stop="this.$api.navigateTo('/pages/service/service?id=1013&title=隐私权政策')">
  17. 《隐私权政策》
  18. </text>、
  19. 以及交易和结算规则、其他由丙方不时公布的平台规则(以下简称“平台规则”)。
  20. </view>
  21. <view class="text-p">
  22. 2、甲方是丙方平台的注册供应商会员,并已提供相关资质和通过电子方式确认接受丙方平台规则、
  23. <text @click.stop="this.$api.navigateTo('/pages/service/service?id=1035&title=供应商合作协议')">
  24. 《供应商合作协议》
  25. </text>、
  26. 并受该等文件的约束。
  27. </view>
  28. <view class="text-p">
  29. 3、乙方是丙方平台的注册机构会员,并已提供相关资质和通过电子方式确认接受丙方平台规则、
  30. <text @click.stop="this.$api.navigateTo('/pages/service/service?id=1016&title=医美机构合作协议')">
  31. 《医美机构合作协议》
  32. </text>
  33. 并受该等文件的约束。
  34. </view>
  35. <view class="text-p">根据《中华人民共和国民法典》等相关法律、法规的规定,甲乙丙三方在平等自愿的基础上,就乙方在丙方平台采购甲方销售的产品和/或服务,达成以下合作内容:</view>
  36. <view class="text-h1">一、乙方向甲方采购订单详情:</view>
  37. <!-- 订单商品信息 -->
  38. <template v-if="contractType === 1">
  39. <cm-contract-goods ref="goods" v-if="!skeletonShow" :goodsData.sync="goodsData" />
  40. </template>
  41. <template v-else>
  42. <cm-contract-order ref="goods" v-if="!skeletonShow" :orderData="orderData" />
  43. </template>
  44. <view class="text-h1">二、付款方式</view>
  45. <view class="text-p">
  46. 乙方应通过丙方的线上交易系统将相应的全额货款汇入甲方收款账号,或经丙方同意通过线下支付方式将相应的全额货款汇入甲方指定收款账号;甲方确认收到货款后的5个工作日内安排发货;甲方按货款金额向乙方开具发票,发票地址以乙方注册邮箱地址或通信地址为准。
  47. </view>
  48. <view class="text-p">甲方收款帐户信息:</view>
  49. <view class="text-p">单位名称:厦门盛德至善医疗科技有限公司</view>
  50. <view class="text-p">开户银行: 招商银行股份有限公司厦门海沧支行</view>
  51. <view class="text-p">账号:592909949010001</view>
  52. <view class="text-h1">三、产品交付方式:</view>
  53. <view class="text-p">运输:产品经由合规冷链运输,运费由甲方承担,产品的附件及相关材料应随产品一并交付乙方。</view>
  54. <view class="text-h1">四、产品所有权及产品毁损、灭失风险转移</view>
  55. <view class="text-p">
  56. 产品所有权及产品毁损、灭失的风险自乙方签收货物之日起转移,货物签收以物流签收信息为准,除有质量问题外。产品发出后,因乙方的原因致使产品不能按期交付,产品毁损、灭失的风险责任由乙方自行负责。
  57. </view>
  58. <view class="text-h1">五、验收及退换货</view>
  59. <view class="text-p">
  60. 1、乙方收货时应在现场验收。乙方在收货时,应检查产品有无破损或缺少,如发现异常,应在收货时当场与承运人一起出具书面证明,并书面通知甲方办理相关事宜;如收货后当日未通知则视为乙方已收到全部合格产品。收货时,以物流信息显示签收作为收货凭证,不再进行纸质签收或返回物流签收单。
  61. </view>
  62. <view class="text-p">
  63. 2、乙方无故拒绝接受货物的,应承担因此给甲方造成的损失,除本协议明确约定外,损失赔偿范围包括但不限于:直接或间接损失、调查费用支出、诉讼费用、仲裁费用、聘请诉讼仲裁代理人的费用以及其他因违约行为所支出的必要费用。
  64. </view>
  65. <view class="text-p">
  66. 3、乙方在收货后如发现产品质量问题的当日通过平台向甲方提出书面申请,经甲方审查符合退换货条件的给予退换货,退换货时间为从书面申请受理之日起30天内完成退换货。
  67. </view>
  68. <view class="text-h1">六:广告合规要求</view>
  69. <view class="text-p">
  70. 1、乙方后续为货物自行设计制作的广告须取得广告批文方可发布,且不得侵犯第三方合法权益。乙方如使用甲方提供材料开展宣传的,不得擅自添加、删减、篡改甲方提供的材料内容。
  71. </view>
  72. <view class="text-p">
  73. 2、乙方应依法开展产品宣传及产品销售,不得通过夸大产品功效、虚构事实或虚假宣传等方式宣传、销售合作产品。否则因此造成的一切责任(包括但不限于民事赔偿、刑事责任、行政处罚等)均由乙方一力承担。若因乙方的违法宣传,给甲方造成损失的,由乙方承担赔偿责任(包括但不限于甲方支出的诉讼费、律师费、保全费、交通费等)。
  74. </view>
  75. <view class="text-h1">七、特别约定</view>
  76. <view class="text-p">
  77. 1、甲乙丙三方确认,丙方仅为甲乙双方的网上交易活动提供交易平台,并非交易行为的参与方,丙方不承担甲乙双方买卖交易项下任何法律责任。如甲乙双方产生争议的,丙方可以出面协调,但丙方的协调不具有强制性。在甲乙双方争议期间,如款项存放在丙方的线上交易分账系统中,丙方有权根据实际情况决定将款项留存,待甲乙双方争议解决后予以支付,丙方不承担该等原因下未支付或迟延支付款项产生的任何责任。
  78. </view>
  79. <view class="text-h1">八、违约责任</view>
  80. <view class="text-p">
  81. 1、在本协议有效期限内,乙方不得将本协议条款中的全部或部分权利、义务转让给任何第三方;若乙方将本协议条款中的权利义务转让给第三方,甲方有权单方解除协议;若因第三方导致甲方权利受到损害的,甲方除可以要求第三方进行损害赔偿之外,仍可以要求乙方承担责任。
  82. </view>
  83. <view class="text-p">
  84. 2、因乙方无正当合理的理由退货或拒收货物造成的相应损失(包括甲方损失和乙方损失)由乙方承担。
  85. </view>
  86. <view class="text-p">
  87. 3、因乙方行为扰乱甲方市场环境的,甲方有权单方解除本协议,并要求乙方赔偿因此产生的损失。
  88. </view>
  89. <view class="text-p">
  90. 4、本协议所述的甲方损失包括但不限于甲方的直接损失、间接损失以及维权所支付的诉讼费、律师费、公证费、鉴定费、差旅费等费用。
  91. </view>
  92. <view class="text-h1">九、不可抗力</view>
  93. <view class="text-p">
  94. 1、如果双方中的任何一方因为不可抗力(如:战争、火灾、台风、洪水、地震)而被迫停止或推迟协议的执行,则协议执行相应延迟,延迟的时间等于不可抗力发生作用的时间。
  95. </view>
  96. <view class="text-p">
  97. 2、因不可抗力因素导致的甲乙双方未能按本协议约定履行相应的权利义务的,甲乙双方免除相应的责任,但双方应采取必要的措施以减少造成的损失。出现不可抗力情形的一方,应在不可抗力发生之日起三日内向对方发出出现不可抗力情形的书面通知,并提供相应的证明。
  98. </view>
  99. <view class="text-p">
  100. 3、如不可抗力及其影响无法终止或消除而致使合同任何一方丧失继续履行协议的能力或不可抗力的影响连续二十天以上时,任何一方均有权通知对方无责解除本协议。双方根据已完成进度据实结算。
  101. </view>
  102. <view class="text-h1">十、保密条款</view>
  103. <view class="text-p">
  104. 本协议有效期内,甲、乙、丙、三方对本协议内容,特别是供货价格及销售政策等信息,均负有严格保密的义务,不得以任何形式泄露给第三方,否则应承担违约责任并赔偿损失。
  105. </view>
  106. <view class="text-h1">十一、其它约定事项</view>
  107. <view class="text-p">
  108. 1、乙方可以在丙方平台下载甲方所经营产品的《中华人民共和国医疗器械注册证》及本企业的《营业执照》、《医疗器械生产许可证》及其他授权证明,如需要加盖甲方公章的纸质复印件可以通过丙方平台向甲方索取,
  109. </view>
  110. <view class="text-p">
  111. 2、甲方可以在丙方平台下载乙方的《营业执照》、《医疗机构执业许可证》,如需要加盖甲方公章的纸质复印件可以通过丙方平台向乙方索取。
  112. </view>
  113. <view class="text-p">
  114. 3、本协议的附件与本协议具同等法律效力,是本协议不可分割的组成部分。
  115. </view>
  116. <view class="text-p">
  117. 4、乙方同意甲方为其首次公开发行股票并上市及其他上市融资需求而将与乙方的合作涉及的相关信息披露予甲方指定的中介机构、证券交易所以及中国证券监督管理委员会。
  118. </view>
  119. <view class="text-h1">十二、争议解决</view>
  120. <view class="text-p">
  121. 合同执行过程中发生争议的,三方友好协商,协商不成的,任何一方有权向甲方所在地人民法院提起诉讼。
  122. </view>
  123. <view class="text-h1">十三、其他</view>
  124. <view class="text-p">
  125. 甲乙丙三方通过丙方平台订立本合同,本合同一经三方完成电子签章程序,即具备法律效力。任何一方均可在丙方平台之上获取合同文本。
  126. </view>
  127. <view class="text-p">(以下无正文)</view>
  128. <template v-if="contractType === 1">
  129. <view class="text-h1">订单日期:{{ formattedDate }}</view>
  130. </template>
  131. <template v-else>
  132. <view class="text-h1" v-if="contractType === 2">订单编号:{{ orderData.shopOrderNo }}</view>
  133. <view class="text-h1">订单日期:{{ orderTime(orderData.orderTime) }}</view>
  134. </template>
  135. </view>
  136. </view>
  137. </template>
  138. <script>
  139. import { mapState, mapMutations } from 'vuex'
  140. import cmContractGoods from './components/cm-contract-goods'
  141. import cmContractOrder from './components/cm-contract-order'
  142. export default {
  143. components: {
  144. cmContractGoods,
  145. cmContractOrder
  146. },
  147. data() {
  148. return {
  149. StaticUrl: this.$Static,
  150. isIphoneX: this.$store.state.isIphoneX,
  151. skeletonShow: true,
  152. clubInfo: {},
  153. invoiceData: {
  154. type: 0, //发票类型 0 不开发票 1 普通发票 2 增值税发票
  155. headingType: 0, //抬头类型 0 个人 1 单位
  156. invoiceTitle: '', //发票抬头
  157. corporationTaxNum: '', //单位税号
  158. registeredAddress: '', //单位地址
  159. registeredPhone: '', //注册电话
  160. openBank: '', //开户银行
  161. bankAccountNo: '' //银行账号
  162. },
  163. formattedDate: '',
  164. goodsData: [],
  165. orderData: {},
  166. contractType: ''
  167. }
  168. },
  169. onLoad(option) {
  170. if (option.type) { this.contractType = option.type * 1 }
  171. console.log('contractType', this.contractType)
  172. if (this.contractType === 1) {
  173. this.goodsData = JSON.parse(option.goods)
  174. this.initStorage()
  175. console.log('goods', this.goods)
  176. const today = new Date()
  177. // 格式化为 "YYYY年M月D日"(月份和日期不补零)
  178. this.formattedDate = `${today.getFullYear()}年${today.getMonth() + 1}月${today.getDate()}日`
  179. console.log(this.formattedDate) // 示例输出:2025年5月27日
  180. } else {
  181. console.log('shopOrderId', option.shopOrderId)
  182. this.initOrderDetaile(option.shopOrderId)
  183. }
  184. },
  185. methods: {
  186. // 获取订单详情
  187. async initOrderDetaile(shopOrderId) {
  188. try {
  189. this.clubInfo = await this.$api.getStorage()
  190. const { data } = await this.OrderService.QueryOrderDetails({ shopOrderId: shopOrderId, userId: this.clubInfo.userId })
  191. this.orderData = data.shopOrder
  192. setTimeout(() => {
  193. this.skeletonShow = false
  194. }, 500)
  195. } catch (error) {
  196. console.log('获取订单详情异常~')
  197. }
  198. },
  199. async initStorage() {
  200. // 初始化信息
  201. try {
  202. this.clubInfo = await this.$api.getStorage()
  203. setTimeout(() => {
  204. this.skeletonShow = false
  205. }, 500)
  206. // this.getUseInvoice(this.clubInfo.userId)
  207. } catch (e) {
  208. console.log('初始化信息异常~')
  209. }
  210. },
  211. //获取发票信息
  212. async getUseInvoice(userId) {
  213. try {
  214. const res = await this.OrderService.GetFindInvoice({ userId: userId })
  215. this.invoiceData = { ...this.invoiceData, ...res.data }
  216. console.log('invoiceData', this.invoiceData)
  217. } catch (error) {
  218. console.log('error', error)
  219. }
  220. },
  221. orderTime(time){
  222. // 按空格拆分取日期部分,再按"-"拆分
  223. const [datePart] = time.split(' ')
  224. const [year, month, day] = datePart.split('-')
  225. // 去除月份和日的首部零,并拼接成目标格式
  226. const result = `${year}年${parseInt(month)}月${parseInt(day)}日`
  227. console.log(result)
  228. return result
  229. }
  230. },
  231. onHide() {
  232. },
  233. onShow() {
  234. }
  235. }
  236. </script>
  237. <style lang="scss">
  238. page {
  239. background-color: #FFFFFF;
  240. }
  241. .container {
  242. width: 100%;
  243. height: auto;
  244. }
  245. .container-content {
  246. width: 100%;
  247. box-sizing: border-box;
  248. padding: 24rpx;
  249. text-align: justify;
  250. font-size: $font-size-26;
  251. color: #666666;
  252. line-height: 58rpx;
  253. .text-h1 {
  254. font-size: $font-size-28;
  255. text-align: left;
  256. font-weight: 600;
  257. color: #333333;
  258. &.center {
  259. text-align: center;
  260. }
  261. }
  262. .text-p {
  263. font-size: 27rpx;
  264. text-align: justify;
  265. text-indent: 24rpx;
  266. color: #666666;
  267. line-height: 52rpx;
  268. text {
  269. color: #1890f9;
  270. }
  271. }
  272. .text-flex {
  273. width: 100%;
  274. height: 168rpx;
  275. display: flex;
  276. justify-content: space-between;
  277. &.first {
  278. margin-top: 120rpx;
  279. }
  280. .flex-p {
  281. display: flex;
  282. justify-content: flex-start;
  283. flex-wrap: wrap;
  284. font-size: $font-size-26;
  285. color: #666666;
  286. margin: 0 20rpx;
  287. line-height: 48rpx;
  288. }
  289. }
  290. }
  291. .empty-container-image {
  292. width: 260rpx;
  293. height: 260rpx;
  294. margin-top: -300rpx;
  295. }
  296. </style>