invoice.vue 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156
  1. <template>
  2. <div class="invoice defbb" :class="{ 'read-only': isReadOnly }">
  3. <div class="gray-color s-fz">[ 说明:用于发票补充展示 ]</div>
  4. <el-form
  5. ref="form"
  6. :model="value"
  7. :disabled="$props.disabled"
  8. size="mini"
  9. label-width="110px"
  10. label-position="left"
  11. class="p-spac pb-spacd4"
  12. >
  13. <div class="flex">
  14. <el-form-item prop="fpAddress" label="购方地址:" label-width="85px" class="mr-spac">
  15. <el-input v-model="value.fpAddress" placeholder="请输入" v-empty="emptyArgs"></el-input>
  16. </el-form-item>
  17. <el-form-item prop="fpBank" label="购方开户银行:">
  18. <el-select v-model="value.fpBank" filterable placeholder="请选择" v-empty="emptyArgs">
  19. <el-option
  20. v-for="(item, index) in banks"
  21. :key="index"
  22. :label="item.bankName"
  23. :value="item.bankNo">
  24. </el-option>
  25. </el-select>
  26. <!-- <el-input v-model="value.fpBank" v-empty="emptyArgs"></el-input> -->
  27. </el-form-item>
  28. </div>
  29. <div class="flex">
  30. <el-form-item prop="fpPhone" label="购方电话:" label-width="85px" class="mr-spac">
  31. <el-input v-model="value.fpPhone" placeholder="请输入" v-empty="emptyArgs"></el-input>
  32. </el-form-item>
  33. <el-form-item prop="fpBankAccount" label="购方银行账号:">
  34. <el-input v-model="value.fpBankAccount" placeholder="请输入" v-empty="emptyArgs"></el-input>
  35. </el-form-item>
  36. <div class="ml-spac pt-spac" v-if="showOpers">
  37. <template v-if="!isEdit">
  38. <el-button type="text" @click="isEdit=true">修改</el-button>
  39. </template>
  40. <template v-else>
  41. <el-button type="text" @click="save()">保存</el-button>
  42. <el-button type="text" @click="cancel()">取消</el-button>
  43. </template>
  44. </div>
  45. </div>
  46. </el-form>
  47. </div>
  48. </template>
  49. <script>
  50. const staticData = {
  51. formDataRaw: {}
  52. }
  53. export default {
  54. name: 'invoice',
  55. data() {
  56. return {
  57. banks: [],
  58. isEdit: false
  59. }
  60. },
  61. props: {
  62. value: {
  63. type: Object,
  64. default: () => ({})
  65. },
  66. readOnly: {
  67. type: Boolean,
  68. default: null
  69. },
  70. disabled: {
  71. type: Boolean,
  72. default: null
  73. }
  74. },
  75. computed: {
  76. showOpers() {
  77. if (this.$props.disabled) {
  78. return false
  79. }
  80. if (this.$props.readOnly) {
  81. return !this.isReadOnly
  82. }
  83. return true
  84. },
  85. saved() {
  86. return this.value.fpStatus === 2
  87. },
  88. isReadOnly() {
  89. return (this.readOnly || !this.isEdit)
  90. },
  91. emptyArgs() {
  92. return { open: !this.disabled && this.isReadOnly, text: '[ 暂无内容 ]' }
  93. }
  94. },
  95. watch: {
  96. disabled() {
  97. console.log('disabled', this.disabled)
  98. },
  99. value() {
  100. staticData.formDataRaw = { ...this.value }
  101. this.isEdit = !this.saved
  102. },
  103. isEdit: {
  104. handler(val) {
  105. console.log('isEdit', val)
  106. if (val) {
  107. staticData.formDataRaw = { ...this.value }
  108. }
  109. }
  110. }
  111. },
  112. mounted() {
  113. this.$http(this.$interfaces.user.list_by_keywords, { keywords: '' }).then(res => {
  114. this.banks = res
  115. })
  116. },
  117. methods: {
  118. save() {
  119. this.$http(this.$interfaces.user.carrier_fp_save, this.value).then(res => {
  120. this.isEdit = false
  121. })
  122. },
  123. cancel() {
  124. Object.keys(this.value).forEach(key => {
  125. this.value[key] = staticData.formDataRaw[key]
  126. })
  127. this.isEdit = false
  128. }
  129. }
  130. }
  131. </script>
  132. <style lang="scss" scoped>
  133. .el-input,.el-select {
  134. width: 300px;
  135. }
  136. .el-select--mini {
  137. font-size: 12px;
  138. }
  139. .el-form-item--mini.el-form-item {
  140. margin-bottom: 6px;
  141. }
  142. .read-only {
  143. ::v-deep .el-input__suffix {
  144. display: none;
  145. }
  146. .el-input,.el-select,::v-deep input {
  147. font-size: 14px;
  148. padding: 0;
  149. border:0;
  150. pointer-events: none;
  151. }
  152. }
  153. </style>