ContractInfo.vue 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175
  1. <template>
  2. <div class="contract-info">
  3. <InfoCard title="协议签订信息">
  4. <ContractInfoSignModule></ContractInfoSignModule>
  5. </InfoCard>
  6. <InfoCard v-if="contractResStatus">
  7. <template #title>
  8. <div class="contract-info-card-title">
  9. <span>协议归档信息</span>
  10. <button @click="editContractArchive" v-if="contractRes?.contract_archive_status === 1" class="edit-btn">编辑</button>
  11. </div>
  12. </template>
  13. <div class="contract-info-card">
  14. <div class="contract-info-card-item">
  15. 协议归档状态:{{contractRes?.contract_archive_status === 1 ? '已归档' : '未归档' }}
  16. </div>
  17. <div class="contract-info-card-item" v-if="contractRes?.contract_archive_status === 1">
  18. 归档时间:{{ formatDate(contractRes?.contract_archive_time) }}
  19. </div>
  20. <div class="contract-info-card-item" v-if="contractRes?.contract_archive_status === 1">
  21. 归档份数:{{ contractRes?.contract_archive_num || '-' }}
  22. </div>
  23. <div class="contract-info-card-item" @click="viewfileEvent" v-if="contractRes?.contract_archive_status === 1">
  24. 归档协议:<span class="column-cell">{{ contractRes?.contract_file_name || '-' }}</span>
  25. </div>
  26. </div>
  27. </InfoCard>
  28. <ContractInfoElectronModule @refresh="doRefresh"></ContractInfoElectronModule>
  29. <new-d-model :data="orderDetail" ref="detailModelContract" @refresh="doRefresh"></new-d-model>
  30. </div>
  31. </template>
  32. <script>
  33. import InfoCard from '../../ui/InfoCard.vue';
  34. import NewDModel from "@/views/order/components/new-detailModel.vue";
  35. import ContractInfoSignModule from './ContractInfoSignModule.vue';
  36. import ContractInfoElectronModule from './ContractInfoElectronModule.vue';
  37. import { mapState } from 'vuex'
  38. export default {
  39. name: 'ContractInfo',
  40. components: {
  41. NewDModel,
  42. InfoCard,
  43. ContractInfoSignModule,
  44. ContractInfoElectronModule
  45. },
  46. computed: {
  47. ...mapState({
  48. orderDetail: state => state.order.orderDetail
  49. }),
  50. contractResStatus() {
  51. return this.contractRes?.contract_status === 1
  52. },
  53. isAdmin() {
  54. const list = this.orderDetail?.userIdentity || [];
  55. return list.includes(1) || list.includes(2);
  56. },
  57. contractRes () {
  58. return this.orderDetail?.contractRes || {}
  59. }
  60. },
  61. data() {
  62. return {
  63. }
  64. },
  65. mounted() {
  66. },
  67. methods: {
  68. doRefresh (type = '') {
  69. this.$emit('refresh', type)
  70. },
  71. editContractArchive() {
  72. // userIdentity 1超级管理员 2销管
  73. if(this.isAdmin) {
  74. // 协议归档信息
  75. this.$refs.detailModelContract.pShow = true;
  76. } else {
  77. this.$message.error('暂无权限')
  78. }
  79. },
  80. formatDate(timeString) {
  81. if (!timeString) return '-';
  82. // 只取空格前的日期部分
  83. return timeString.split(' ')[0];
  84. },
  85. // 查看归档协议
  86. viewfileEvent() {
  87. const url = this.contractRes?.contract_file_url;
  88. if(url) {
  89. const urls = this.$router.resolve(url)
  90. const fileUrl = '/shareFile' + urls.href.split('/shareFile')[1]
  91. this.$confirm("确定下载该归档协议吗?", "提示").then(() => {
  92. const a1 = document.createElement('a')
  93. a1.download = this.contractRes.contract_file_name
  94. a1.href = fileUrl
  95. a1.click()
  96. })
  97. }
  98. }
  99. }
  100. }
  101. </script>
  102. <style lang="scss" scoped>
  103. .contract-info {
  104. background: #f5f7f9;
  105. ::v-deep {
  106. .info-card {
  107. margin-bottom: 16px;
  108. }
  109. }
  110. }
  111. .contract-info-card-title {
  112. display: flex;
  113. justify-content: space-between;
  114. align-items: center;
  115. .edit-btn {
  116. padding: 4px 31px;
  117. background: $color_main;
  118. color: $white;
  119. border-radius: 4px;
  120. font-size: 14px;
  121. line-height: 22px;
  122. border: none;
  123. cursor: pointer;
  124. }
  125. }
  126. .contract-info-card {
  127. display: flex;
  128. align-items: center;
  129. flex-wrap: wrap;
  130. &.card-noflex {
  131. display: block;
  132. }
  133. &-item {
  134. display: flex;
  135. align-items: center;
  136. margin-right: 32px;
  137. min-width: 255px;
  138. font-size: 14px;
  139. line-height: 22px;
  140. color: $gray_10;
  141. .red-chong {
  142. color: $red_light;
  143. }
  144. }
  145. .arow {
  146. display: flex;
  147. align-items: center;
  148. margin: 10px 0;
  149. }
  150. }
  151. .edit-contract-archive-dialog {
  152. width: 100%;
  153. ::v-deep {
  154. .el-dialog {
  155. width: 100%;
  156. .dialog-footer {
  157. justify-content: center;
  158. }
  159. .action-button {
  160. flex: none;
  161. width: 132px;
  162. }
  163. }
  164. }
  165. }
  166. .column-cell {
  167. color: $color_main;
  168. cursor: pointer;
  169. text-decoration: underline;
  170. }
  171. </style>