info.vue 7.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236
  1. <template>
  2. <div>
  3. <div class="padding top flex flex-center flex-justify-between">
  4. <span>基础信息</span>
  5. <div>
  6. <el-button type="primary" plain @click="disabled = !disabled"
  7. >{{ disabled ? '编 辑' : '保 存' }}
  8. </el-button>
  9. <el-button type="primary" plain @click="libraryDetail">
  10. 查 看</el-button
  11. >
  12. </div>
  13. </div>
  14. <div class="padding">
  15. <el-form
  16. label-position="right"
  17. label-width="100px"
  18. :disabled="disabled"
  19. style="background-color: white"
  20. >
  21. <div class="full-width flex flex-center flex-justify-between">
  22. <el-form-item label="合同名称" class="flex-child-average">
  23. <el-input v-if="form.fileFolder" v-model="form.fileFolder.title" />
  24. </el-form-item>
  25. <el-form-item label="合同类别" class="flex-child-average">
  26. <el-input v-model="form.type" />
  27. </el-form-item>
  28. </div>
  29. <div class="full-width flex flex-center flex-justify-between">
  30. <el-form-item label="合同编号" class="flex-child-average">
  31. <el-input v-model="form.number" />
  32. </el-form-item>
  33. <el-form-item label="合同金额" class="flex-child-average">
  34. <el-input v-model="form.amount">
  35. <template #append>万元</template>
  36. </el-input>
  37. </el-form-item>
  38. </div>
  39. <div class="full-width flex flex-center flex-justify-between">
  40. <el-form-item label="合同甲方" class="flex-child-average">
  41. <el-input v-model="form.partyA" />
  42. </el-form-item>
  43. <el-form-item label="合同乙方" class="flex-child-average">
  44. <el-input v-model="form.partyB" />
  45. </el-form-item>
  46. </div>
  47. <div class="full-width flex flex-center flex-justify-between">
  48. <el-form-item label="业务联系人" class="flex-child-average">
  49. <el-input v-model="form.contacts" />
  50. </el-form-item>
  51. <el-form-item label="联系人电话" class="flex-child-average">
  52. <el-input v-model="form.phone" type="phone" />
  53. </el-form-item>
  54. </div>
  55. <div class="full-width flex flex-center flex-justify-between">
  56. <el-form-item label="签订日期" class="flex-child-average">
  57. <el-date-picker
  58. v-model="form.signTime"
  59. type="date"
  60. style="width: 100%"
  61. placeholder="合同签订日期"
  62. format="YYYY-MM-DD"
  63. value-format="YYYY-MM-DD"
  64. />
  65. </el-form-item>
  66. <el-form-item label="到期日期" class="flex-child-average">
  67. <el-date-picker
  68. v-model="form.expireTime"
  69. type="date"
  70. style="width: 100%"
  71. placeholder="合同到期日期"
  72. format="YYYY-MM-DD"
  73. value-format="YYYY-MM-DD"
  74. />
  75. </el-form-item>
  76. </div>
  77. <div class="full-width flex flex-center flex-justify-between">
  78. <el-form-item label="签订地点" class="flex-child-average">
  79. <el-input v-model="form.signLocation" />
  80. </el-form-item>
  81. <el-form-item label="合同状态" class="flex-child-average">
  82. <div class="full-width">
  83. <avue-input-tree
  84. v-model="form.contractsStatus"
  85. class="full-width"
  86. placeholder="请选择合同状态"
  87. :dic="stuasDic"
  88. ></avue-input-tree>
  89. </div>
  90. </el-form-item>
  91. </div>
  92. <div class="full-width flex flex-center flex-justify-between">
  93. <el-form-item label="支付方式" class="flex-child-average">
  94. <el-input v-model="form.paymentMode" type="textarea" :rows="5" />
  95. </el-form-item>
  96. </div>
  97. </el-form>
  98. </div>
  99. <el-image-viewer
  100. v-if="showImage"
  101. :url-list="preList"
  102. @close="showImage = false"
  103. />
  104. </div>
  105. </template>
  106. <script>
  107. import api from '@/api/index.js'
  108. export default {
  109. name: 'info',
  110. props: {
  111. info: {
  112. type: Object,
  113. default: null
  114. }
  115. },
  116. watch: {
  117. info: {
  118. handler(val) {
  119. if (val) {
  120. this.form = val
  121. if (this.form.contractsStatus === -1) {
  122. this.form.contractsStatus = ''
  123. }
  124. if (this.form.type === -1) {
  125. this.form.type = ''
  126. }
  127. }
  128. },
  129. immediate: true
  130. },
  131. disabled: {
  132. handler(val) {
  133. if (val) {
  134. this.conUpdate()
  135. }
  136. },
  137. immediate: false
  138. }
  139. },
  140. data() {
  141. return {
  142. showImage: false,
  143. preList: [],
  144. disabled: true,
  145. typeDic: [],
  146. stuasDic: [],
  147. form: {
  148. title: '',
  149. partyA: '',
  150. partyB: '',
  151. signTime: '',
  152. expireTime: '',
  153. signLocation: '',
  154. status: '',
  155. type: '',
  156. amount: '',
  157. paymentMode: '',
  158. number: '',
  159. id: ''
  160. }
  161. }
  162. },
  163. created() {
  164. this.form.id = this.$route.query.id
  165. this.getDic('contract-status')
  166. this.getDic('contract-type')
  167. },
  168. methods: {
  169. getDic(code) {
  170. this.$api.common.dicList({ code }).then(res => {
  171. if (res.code === 200) {
  172. if (code === 'contract-status') {
  173. this.stuasDic = res.data.map(item => this.mapTree(item))
  174. } else if (code === 'contract-type') {
  175. this.typeDic = res.data.map(item => this.mapTree(item))
  176. }
  177. }
  178. })
  179. },
  180. mapTree(item) {
  181. const haveChildren =
  182. Array.isArray(item.children) && item.children.length > 0
  183. return {
  184. value: Number.parseInt(item.dictKey),
  185. label: item.dictValue,
  186. children: haveChildren ? item.children.map(i => this.mapTree(i)) : []
  187. }
  188. },
  189. conUpdate() {
  190. const data1 = new Date(this.form.signTime).getTime()
  191. const data2 = new Date(this.form.expireTime).getTime()
  192. if (data1 > data2) {
  193. this.$message.error('合同签订日期不能大于合同到期日期!')
  194. this.disabled = false
  195. return
  196. }
  197. this.$api.contract.contractUpdate(this.form).then(res => {
  198. if (res.code === 200) {
  199. this.$message.success(res.msg)
  200. } else {
  201. this.disabled = false
  202. this.$message.error(res.msg)
  203. }
  204. })
  205. },
  206. /**
  207. * 以图片形式查看文件
  208. */
  209. libraryDetail() {
  210. if (api.offices.includes(this.form.fileFolder.suffix)) {
  211. this.$api.project
  212. .articleDetailByFile(this.form.fileFolder.fileId)
  213. .then(res => {
  214. if (res.code === 200) {
  215. this.preList = res.data.imgs.map(e => e.filePath)
  216. this.showImage = true
  217. }
  218. })
  219. } else {
  220. this.preList = [this.form.fileFolder.url]
  221. this.showImage = true
  222. }
  223. }
  224. }
  225. }
  226. </script>
  227. <style lang="scss" scoped>
  228. .top {
  229. height: 35px;
  230. border-radius: var(--el-card-border-radius);
  231. background-color: #f5f5f3;
  232. }
  233. </style>