info.vue 6.7 KB

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