info.vue 5.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199
  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. </div>
  10. </div>
  11. <div class="padding">
  12. <el-form
  13. label-position="right"
  14. label-width="100px"
  15. :disabled="disabled"
  16. style="background-color: white"
  17. >
  18. <div class="full-width flex flex-center flex-justify-between">
  19. <el-form-item label="合同名称" class="flex-child-average">
  20. <el-input v-model="form.title"/>
  21. </el-form-item>
  22. <el-form-item label="合同类别" class="flex-child-average">
  23. <div class="full-width">
  24. <avue-input-tree
  25. v-model="form.type"
  26. class="full-width"
  27. placeholder="请选择合同类型"
  28. :dic="typeDic"
  29. ></avue-input-tree>
  30. </div>
  31. </el-form-item>
  32. </div>
  33. <div class="full-width flex flex-center flex-justify-between">
  34. <el-form-item label="合同编号" class="flex-child-average">
  35. <el-input v-model="form.number"/>
  36. </el-form-item>
  37. <el-form-item label="合同金额" class="flex-child-average">
  38. <el-input v-model="form.amount"/>
  39. </el-form-item>
  40. </div>
  41. <div class="full-width flex flex-center flex-justify-between">
  42. <el-form-item label="合同甲方" class="flex-child-average">
  43. <el-input v-model="form.partyA"/>
  44. </el-form-item>
  45. <el-form-item label="合同乙方" class="flex-child-average">
  46. <el-input v-model="form.partyB"/>
  47. </el-form-item>
  48. </div>
  49. <div class="full-width flex flex-center flex-justify-between">
  50. <el-form-item label="签订日期" class="flex-child-average">
  51. <el-date-picker
  52. v-model="form.signTime"
  53. type="date"
  54. style="width: 100%"
  55. placeholder="合同签订日期"
  56. format="YYYY-MM-DD"
  57. value-format="YYYY-MM-DD"
  58. />
  59. </el-form-item>
  60. <el-form-item label="到期日期" class="flex-child-average">
  61. <el-date-picker
  62. v-model="form.expireTime"
  63. type="date"
  64. style="width: 100%"
  65. placeholder="合同到期日期"
  66. format="YYYY-MM-DD"
  67. value-format="YYYY-MM-DD"
  68. />
  69. </el-form-item>
  70. </div>
  71. <div class="full-width flex flex-center flex-justify-between">
  72. <el-form-item label="签订地点" class="flex-child-average">
  73. <el-input v-model="form.signLocation"/>
  74. </el-form-item>
  75. <el-form-item label="合同状态" class="flex-child-average">
  76. <div class="full-width">
  77. <avue-input-tree
  78. v-model="form.status"
  79. class="full-width"
  80. placeholder="请选择合同状态"
  81. :dic="stuasDic"
  82. ></avue-input-tree>
  83. </div>
  84. </el-form-item>
  85. </div>
  86. <div class="full-width flex flex-center flex-justify-between">
  87. <el-form-item label="支付方式" class="flex-child-average">
  88. <el-input v-model="form.paymentMode" type="textarea" :rows="5"/>
  89. </el-form-item>
  90. </div>
  91. </el-form>
  92. </div>
  93. </div>
  94. </template>
  95. <script>
  96. export default {
  97. name: 'info',
  98. props: {
  99. info: {
  100. type: Object,
  101. default: null
  102. }
  103. },
  104. watch: {
  105. info: {
  106. handler(val) {
  107. if (val) {
  108. this.form = val
  109. }
  110. },
  111. immediate: true
  112. },
  113. disabled: {
  114. handler(val) {
  115. if (val) {
  116. this.conUpdate()
  117. }
  118. },
  119. immediate: false
  120. }
  121. },
  122. data() {
  123. return {
  124. disabled: true,
  125. typeDic: [],
  126. stuasDic: [],
  127. form: {
  128. title: '',
  129. partyA: '',
  130. partyB: '',
  131. signTime: '',
  132. expireTime: '',
  133. signLocation: '',
  134. status: '',
  135. type: '',
  136. amount: '',
  137. paymentMode: '',
  138. number: '',
  139. id: ''
  140. }
  141. }
  142. },
  143. created() {
  144. this.form.id = this.$route.query.id
  145. this.getDic('contract-status')
  146. this.getDic('contract-type')
  147. },
  148. methods: {
  149. getDic(code) {
  150. this.$api.common.dicList({code}).then(res => {
  151. if (res.code === 200) {
  152. if (code === 'contract-status') {
  153. this.stuasDic = res.data.map(item => this.mapTree(item))
  154. } else if (code === 'contract-type') {
  155. this.typeDic = res.data.map(item => this.mapTree(item))
  156. }
  157. }
  158. })
  159. },
  160. mapTree(item) {
  161. const haveChildren =
  162. Array.isArray(item.children) && item.children.length > 0
  163. return {
  164. key: item.dictKey,
  165. value: item.dictKey,
  166. label: item.dictKey,
  167. children: haveChildren ? item.children.map(i => this.mapTree(i)) : []
  168. }
  169. },
  170. conUpdate() {
  171. const data1 = new Date(this.form.signTime).getDate()
  172. const data2 = new Date(this.form.expireTime).getDate()
  173. if (data1 > data2) {
  174. this.$message.error('合同签订日期不能大于合同到期日期!')
  175. this.disabled = false
  176. return
  177. }
  178. this.$api.contract.contractUpdate(this.form).then(res => {
  179. if (res.code === 200) {
  180. this.$message.success(res.msg)
  181. } else {
  182. this.disabled = false
  183. this.$message.error(res.msg)
  184. }
  185. })
  186. },
  187. }
  188. }
  189. </script>
  190. <style lang="scss" scoped>
  191. .top {
  192. height: 35px;
  193. border-radius: var(--el-card-border-radius);
  194. background-color: #f5f5f3;
  195. }
  196. </style>