info.vue 6.8 KB

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