ContractInfo.vue 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187
  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. contractStatus() {
  61. let tip = '-'
  62. if(this.contractRes?.contract_status === 1) {
  63. if (this.contractRes?.contract_archive_status === 0) {
  64. tip = '未归档'
  65. }
  66. if (this.contractRes?.contract_archive_status === 1) {
  67. tip = '已归档'
  68. }
  69. }
  70. return tip
  71. }
  72. },
  73. data() {
  74. return {
  75. }
  76. },
  77. mounted() {
  78. },
  79. methods: {
  80. doRefresh (type = '') {
  81. this.$emit('refresh', type)
  82. },
  83. editContractArchive() {
  84. // userIdentity 1超级管理员 2销管
  85. if(this.isAdmin) {
  86. // 协议归档信息
  87. this.$refs.detailModelContract.pShow = true;
  88. } else {
  89. this.$message.error('暂无权限')
  90. }
  91. },
  92. formatDate(timeString) {
  93. if (!timeString) return '-';
  94. // 只取空格前的日期部分
  95. return timeString.split(' ')[0];
  96. },
  97. // 查看归档协议
  98. viewfileEvent() {
  99. const url = this.contractRes?.contract_file_url;
  100. if(url) {
  101. const urls = this.$router.resolve(url)
  102. const fileUrl = '/shareFile' + urls.href.split('/shareFile')[1]
  103. this.$confirm("确定下载该归档协议吗?", "提示").then(() => {
  104. const a1 = document.createElement('a')
  105. a1.download = this.contractRes.contract_file_name
  106. a1.href = fileUrl
  107. a1.click()
  108. })
  109. }
  110. }
  111. }
  112. }
  113. </script>
  114. <style lang="scss" scoped>
  115. .contract-info {
  116. background: #f5f7f9;
  117. ::v-deep {
  118. .info-card {
  119. margin-bottom: 16px;
  120. }
  121. }
  122. }
  123. .contract-info-card-title {
  124. display: flex;
  125. justify-content: space-between;
  126. align-items: center;
  127. .edit-btn {
  128. padding: 4px 31px;
  129. background: $color_main;
  130. color: $white;
  131. border-radius: 4px;
  132. font-size: 14px;
  133. line-height: 22px;
  134. border: none;
  135. cursor: pointer;
  136. }
  137. }
  138. .contract-info-card {
  139. display: flex;
  140. align-items: center;
  141. flex-wrap: wrap;
  142. &.card-noflex {
  143. display: block;
  144. }
  145. &-item {
  146. display: flex;
  147. align-items: center;
  148. margin-right: 32px;
  149. min-width: 255px;
  150. font-size: 14px;
  151. line-height: 22px;
  152. color: $gray_10;
  153. .red-chong {
  154. color: $red_light;
  155. }
  156. }
  157. .arow {
  158. display: flex;
  159. align-items: center;
  160. margin: 10px 0;
  161. }
  162. }
  163. .edit-contract-archive-dialog {
  164. width: 100%;
  165. ::v-deep {
  166. .el-dialog {
  167. width: 100%;
  168. .dialog-footer {
  169. justify-content: center;
  170. }
  171. .action-button {
  172. flex: none;
  173. width: 132px;
  174. }
  175. }
  176. }
  177. }
  178. .column-cell {
  179. color: $color_main;
  180. cursor: pointer;
  181. text-decoration: underline;
  182. }
  183. </style>