formModule.vue 5.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175
  1. <template>
  2. <zj-form-module title="活动网点" label-width="120px" :form-data="item" :form-items="formItems"> </zj-form-module>
  3. </template>
  4. <script>
  5. import editTable from '@/components/template/editTable.js'
  6. import { required, mobileRequired, mobile, httpUrl, email } from '@/components/template/rules_verify.js'
  7. import { string } from '@zjlib/element-plugins'
  8. export default {
  9. props: {
  10. item: {
  11. type: Object,
  12. default: () => ({})
  13. },
  14. typeView: {
  15. type: [String, Number],
  16. default: 0
  17. }
  18. },
  19. mixins: [editTable],
  20. data() {
  21. return {}
  22. },
  23. computed: {
  24. formItems() {
  25. return [
  26. {
  27. name: 'slot-component',
  28. md: 24,
  29. formItemAttributes: {
  30. label: '',
  31. 'label-width': '0px',
  32. prop: 'promotionQuestionnaireQrcodes',
  33. rules: []
  34. },
  35. render: (h, { props, onInput }) => {
  36. var { value } = props
  37. return this.convertTableJson(
  38. value,
  39. [
  40. {
  41. columnAttributes: {
  42. label: '网点名称',
  43. prop: 'websitName'
  44. },
  45. editRender: (h, { row, column, index }) => {
  46. return (
  47. <div class="redbordererr">
  48. <el-form-item
  49. label=""
  50. label-width="0px"
  51. prop={`promotionQuestionnaireQrcodes.${index}.${column.columnAttributes.prop}`}
  52. rules={[{ required: true, message: '请填写', trigger: 'blur' }]}
  53. >
  54. <el-input
  55. value={row[column.columnAttributes.prop]}
  56. onInput={val => {
  57. row[column.columnAttributes.prop] = val
  58. }}
  59. placeholder="请输入内容"
  60. ></el-input>
  61. </el-form-item>
  62. </div>
  63. )
  64. },
  65. viewRender: (h, { row, column, index }) => {
  66. return <div style="padding-left:10px">{row[column.columnAttributes.prop]}</div>
  67. }
  68. },
  69. {
  70. columnAttributes: {
  71. label: '活动二维码',
  72. prop: 'qrcode',
  73. width: 160
  74. },
  75. render: (h, { row, column, index }) => {
  76. return (
  77. <div class="redbordererr">
  78. {row[column.columnAttributes.prop] ? (
  79. <el-image
  80. src={row[column.columnAttributes.prop]}
  81. preview-src-list={[row[column.columnAttributes.prop]]}
  82. fit="fit"
  83. style="width:80px;height:80px;"
  84. />
  85. ) : null}
  86. </div>
  87. )
  88. }
  89. }
  90. ],
  91. {
  92. isEdit: this.qx(this.item),
  93. isAdd: this.qx(this.item),
  94. isUpdate: false,
  95. isDel: ({ row, column, index }) => {
  96. return !row.id
  97. }
  98. },
  99. {
  100. add: () => {
  101. this.item.promotionQuestionnaireQrcodes.push({
  102. websitName: '',
  103. qrcode: ''
  104. })
  105. this.isEditTableIndex = this.item.promotionQuestionnaireQrcodes.length - 1
  106. },
  107. delete: ({ row, column, index }, cb) => {
  108. if (this.isEditTableIndex == index) {
  109. this.isEditTableIndex = -1
  110. } else if (this.isEditTableIndex > index) {
  111. this.isEditTableIndex--
  112. }
  113. cb && cb()
  114. },
  115. verify: ({ row, column, index }, isEditTableIndex) => {
  116. return new Promise(r => {
  117. if (isEditTableIndex > -1) {
  118. this.acquireVerify(this, 'dqangqianyemian')(
  119. [`promotionQuestionnaireQrcodes.${isEditTableIndex}.websitName`],
  120. v => {
  121. if (v) {
  122. r(true)
  123. } else {
  124. r(false)
  125. }
  126. }
  127. )
  128. r(true)
  129. } else {
  130. r(true)
  131. }
  132. })
  133. },
  134. btnSlot: ({ row, column, index }) => {
  135. if (row.id && row.qrcode) {
  136. return (
  137. <el-button
  138. type="text"
  139. onClick={() => {
  140. window.open(row.qrcode)
  141. }}
  142. >
  143. 下载二维码
  144. </el-button>
  145. )
  146. }
  147. return null
  148. }
  149. }
  150. )
  151. }
  152. }
  153. ]
  154. }
  155. },
  156. methods: {
  157. qx(item) {
  158. return (
  159. !!this.typeView &&
  160. (!item.id || !!~[0, 1].indexOf(item.status) || !!~['待生效', '生效中'].indexOf(item.statusText))
  161. )
  162. },
  163. acquireVerify(v, name) {
  164. if (v.$parent[name]) {
  165. return v.$parent[name]
  166. } else {
  167. return this.acquireVerify(v.$parent, name)
  168. }
  169. }
  170. }
  171. }
  172. </script>
  173. <style lang="scss"></style>