index.vue 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143
  1. <template>
  2. <div class="PublicPageForm">
  3. <el-form ref="ruleForm" :model="tableForm" :label-width="labelWidth">
  4. <el-row :gutter="20">
  5. <el-col v-for="(item, index) in formItem" :key="index" :span="formType == 'horizontal' ? formSpan : 24">
  6. <el-form-item :rules="fromDataReq(item)" :prop="item.columncode" :label="item.columnname">
  7. <template v-if="item.dropdownlist ||item.dropdownlist == 0">
  8. <el-select class="input-shadow" size="small" filterable default-first-option style="width: 100%" v-model="tableForm[item.columncode]" @change="changeSelect(item.columncode, item)" placeholder="请选择" clearable @clear="tableForm[item.columncode] = ''">
  9. <el-option v-for="itemParams in tableOptions[item.columncode]" :key="itemParams[item['dropdownlistid']]" :label="itemParams[item['dropdownlistlable']]" :value="itemParams[item['dropdownlistid']]">
  10. </el-option>
  11. </el-select>
  12. </template>
  13. <template v-else-if="fromDataType(item.datatype) == 'text'||fromDataType(item.datatype) == 'VARCHAR'">
  14. <el-input size="small" @change="inputChangeHandler(item.columncode)" v-model="tableForm[item.columncode]"></el-input>
  15. </template>
  16. <template v-else-if="fromDataType(item.datatype) == 'date'">
  17. <el-date-picker class="datetimes" value-format="yyyy-MM-dd" v-model="tableForm[item.columncode]" type="date" placeholder="选择日期" @change="inputChangeHandler(item.columncode)">
  18. </el-date-picker>
  19. </template>
  20. <template v-else-if="fromDataType(item.datatype) == 'datetime'">
  21. <el-date-picker class="datetimes" value-format="yyyy-MM-dd HH:mm:ss" v-model="tableForm[item.columncode]" type="datetime" placeholder="选择日期时间" @change="inputChangeHandler(item.columncode)">
  22. </el-date-picker>
  23. </template>
  24. <template v-else-if="fromDataType(item.datatype) == 'INT' || fromDataType(item.datatype) == 'tinyint'">
  25. <el-input size="small" v-model.number="tableForm[item.columncode]" onkeyup="value=value.replace(/[^1-9]/g,'')" @change="inputChangeHandler(item.columncode)"></el-input>
  26. </template>
  27. <template v-else>
  28. <el-input size="small" v-model="tableForm[item.columncode]" @change="inputChangeHandler(item.columncode)"></el-input>
  29. </template>
  30. </el-form-item>
  31. </el-col>
  32. </el-row>
  33. </el-form>
  34. </div>
  35. </template>
  36. <script>
  37. import { Query } from "@/api/webApi"
  38. export default {
  39. name: 'PublicPageForm',
  40. props: {
  41. formType: {
  42. type: String,
  43. default: 'vertical' //horizontal--水平布局 默认一行3列
  44. },
  45. formItem: {
  46. type: Array,
  47. default: () => new Array()
  48. },
  49. formData: {
  50. type: Object,
  51. default: () => new Object()
  52. },
  53. formSpan: {
  54. type: Number,
  55. default: 8
  56. },
  57. labelWidth: {
  58. type: String,
  59. default: '80px'
  60. }
  61. },
  62. data () {
  63. return {
  64. tableForm: {},
  65. tableOptions: {}
  66. }
  67. },
  68. watch: {
  69. formItem: {
  70. handler (array) {
  71. this.getSelectData(array)
  72. },
  73. deep: true
  74. },
  75. formData: {
  76. handler (obj) {
  77. this.tableForm = obj
  78. },
  79. deep: true,
  80. immediate: true
  81. }
  82. },
  83. computed: {
  84. //设置新增修改表单类型
  85. fromDataType () {
  86. return function (type) {
  87. if (type) {
  88. return type.replace(/\([^\)]*\)/g, "");
  89. }
  90. }
  91. },
  92. //设置新增修改表单必填类型
  93. fromDataReq () {
  94. return function (item) {
  95. const { dropdownlist, datatype, columnname, isrequired, formatrule } = item
  96. const itemType = datatype.replace(/\([^\)]*\)/g, "")
  97. const itemReq = isrequired ? true : false
  98. const itemRule = formatrule ? true : false
  99. if (dropdownlist || dropdownlist == 0) return [{ required: itemReq, message: `${columnname}不能为空`, trigger: 'change' }]
  100. else if (itemType == 'date' || itemType == 'datetime') return [{ required: itemReq, type: 'date', message: `${columnname}不能为空`, trigger: 'change' }]
  101. else
  102. if (itemReq && itemRule) return [{ required: itemReq, message: `${columnname}不能为空`, trigger: 'blur' }, { pattern: new RegExp(formatrule), message: `请输入合法的${columnname}规则`, trigger: 'blur' }]
  103. return [{ required: itemReq, message: `${columnname}不能为空`, trigger: 'blur' }]
  104. }
  105. },
  106. },
  107. methods: {
  108. //获取表单下拉数据
  109. getSelectData (formItem = []) {
  110. if (!formItem.length || !Array.isArray(formItem)) return
  111. const formItemCopy = _.cloneDeep(formItem)
  112. formItemCopy.map(async ({ dropdownlist, columncode }) => {
  113. if (dropdownlist || dropdownlist == 0) {
  114. const datacontent = { filter: { 1: 1 } }
  115. const { code, returnData } = await Query({ serviceid: dropdownlist, datacontent, event: '0' })
  116. this.tableOptions[columncode] = code == 0 && returnData?.length ? returnData : []
  117. }
  118. })
  119. },
  120. //获取表单下拉数据
  121. changeSelect (code, item) { },
  122. inputChangeHandler (data) {
  123. if (!this.tableForm[data]) this.tableForm[data] = null
  124. },
  125. restForm () {
  126. this.$refs['ruleForm'].resetFields()
  127. },
  128. // 新增/编辑-确认
  129. submitClickHandler () {
  130. let flag = false
  131. this.$refs["ruleForm"].validate((valid) => {
  132. if (valid) {
  133. flag = true
  134. } else {
  135. flag = false;
  136. }
  137. });
  138. return flag
  139. }
  140. }
  141. }
  142. </script>