form.vue.btl 6.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121
  1. <template>
  2. <view class="container snowy-shadow">
  3. <uv-form ref="formRef" :model="formData" :rules="rules" label-position="top" labelWidth="auto" :labelStyle="{marginBottom: '25rpx', fontSize: '27rpx', color: '#606266'}">
  4. <% for(var i = 0; i < configList.~size; i++) { %>
  5. <% if(!configList[i].needTableId && configList[i].whetherAddUpdate && configList[i].fieldNameCamelCase != 'tenantId') { %>
  6. <% if(configList[i].effectType == 'input') { %>
  7. <uv-form-item label="${configList[i].fieldRemark}" prop="${configList[i].fieldNameCamelCase}" :required="${configList[i].required}">
  8. <uv-input v-model="formData.${configList[i].fieldNameCamelCase}" placeholder="请输入${configList[i].fieldRemark}"></uv-input>
  9. </uv-form-item>
  10. <% } else if (configList[i].effectType == 'textarea') {%>
  11. <uv-form-item label="${configList[i].fieldRemark}" prop="${configList[i].fieldNameCamelCase}" :required="${configList[i].required}">
  12. <uv-textarea v-model="formData.${configList[i].fieldNameCamelCase}" placeholder="请输入${configList[i].fieldRemark}"></uv-textarea>
  13. </uv-form-item>
  14. <% } else if (configList[i].effectType == 'select') {%>
  15. <uv-form-item label="${configList[i].fieldRemark}" prop="${configList[i].fieldNameCamelCase}" :required="${configList[i].required}">
  16. <snowy-sel-picker :map="{key: 'value', label: 'text'}" v-model="formData.${configList[i].fieldNameCamelCase}" :rangeData="${configList[i].fieldNameCamelCase}Options" placeholder="请选择${configList[i].fieldRemark}"></snowy-sel-picker>
  17. </uv-form-item>
  18. <% } else if (configList[i].effectType == 'radio') {%>
  19. <uv-form-item label="${configList[i].fieldRemark}" prop="${configList[i].fieldNameCamelCase}" :required="${configList[i].required}">
  20. <uv-radio-group v-model="formData.${configList[i].fieldNameCamelCase}">
  21. <uv-radio :customStyle="{marginRight: '50rpx'}" v-for="(item, index) in ${configList[i].fieldNameCamelCase}Options" :key="index" :name="item.value" :label="item.text"></uv-radio>
  22. </uv-radio-group>
  23. </uv-form-item>
  24. <% } else if (configList[i].effectType == 'checkbox') {%>
  25. <uv-form-item label="${configList[i].fieldRemark}" prop="${configList[i].fieldNameCamelCase}" :required="${configList[i].required}">
  26. <uv-checkbox-group v-model="formData.${configList[i].fieldNameCamelCase}">
  27. <uv-checkbox :customStyle="{marginRight: '50rpx'}" v-for="(item, index) in ${configList[i].fieldNameCamelCase}Options" :key="index" :name="item.value" :label="item.text"></uv-checkbox>
  28. </uv-checkbox-group>
  29. </uv-form-item>
  30. <% } else if (configList[i].effectType == 'datepicker') {%>
  31. <uv-form-item label="${configList[i].fieldRemark}" prop="${configList[i].fieldNameCamelCase}" :required="${configList[i].required}">
  32. <snowy-calendar v-model="formData.${configList[i].fieldNameCamelCase}" placeholder="请输入${configList[i].fieldRemark}"></snowy-calendar>
  33. </uv-form-item>
  34. <% } else if (configList[i].effectType == 'timepicker') {%>
  35. <% } else if (configList[i].effectType == 'inputNumber') {%>
  36. <uv-form-item label="${configList[i].fieldRemark}" prop="${configList[i].fieldNameCamelCase}" :required="${configList[i].required}">
  37. <uv-number-box v-model="formData.${configList[i].fieldNameCamelCase}" :min="1" :max="100"></uv-number-box>
  38. </uv-form-item>
  39. <% } else if (configList[i].effectType == 'slider') {%>
  40. <uv-form-item label="${configList[i].fieldRemark}" prop="${configList[i].fieldNameCamelCase}" :required="${configList[i].required}">
  41. <slider :value="formData.${configList[i].fieldNameCamelCase}" :min="1" :max="100" :step="1" @change="(e)=>{formData.${configList[i].fieldNameCamelCase} = e.detail.value}"></slider>
  42. </uv-form-item>
  43. <% } %>
  44. <% } %>
  45. <% } %>
  46. </uv-form>
  47. <tui-button margin="50rpx 0" :preventClick="true" :shadow="true" @click="submit">提交</tui-button>
  48. </view>
  49. </template>
  50. <script setup name="${classNameFirstLower}Form">
  51. import { onLoad } from "@dcloudio/uni-app"
  52. import { ${classNameFirstLower}Detail, ${classNameFirstLower}SubmitForm } from '@/api/${moduleName}/${classNameFirstLower}Api'
  53. import { reactive, ref, getCurrentInstance } from "vue"
  54. const { proxy } = getCurrentInstance()
  55. const formRef = ref()
  56. const formData = ref({
  57. <% for(var i = 0; i < configList.~size; i++) { %>
  58. <% if(!configList[i].needTableId && configList[i].whetherAddUpdate && configList[i].fieldNameCamelCase != 'tenantId') { %>
  59. ${configList[i].fieldNameCamelCase}: '',
  60. <% } %>
  61. <% } %>
  62. })
  63. // https://www.uvui.cn/components/form.html
  64. // 去pages/biz/user/form.vue中寻找示例
  65. const rules = reactive({
  66. <% for(var i = 0; i < configList.~size; i++) { %>
  67. <% if(!configList[i].needTableId && configList[i].whetherAddUpdate && configList[i].fieldNameCamelCase != 'tenantId' && configList[i].required) { %>
  68. ${configList[i].fieldNameCamelCase}: [{
  69. type: 'string',
  70. required: true,
  71. message: '请输入${configList[i].fieldRemark}',
  72. trigger: ['blur', 'change']
  73. }],
  74. <% } %>
  75. <% } %>
  76. })
  77. <% for(var i = 0; i < configList.~size; i++) { %>
  78. <% if(!configList[i].needTableId) { %>
  79. <% if(configList[i].effectType == 'select' || configList[i].effectType == 'radio' || configList[i].effectType == 'checkbox') { %>
  80. const ${configList[i].fieldNameCamelCase}Options = ref([])
  81. <% } %>
  82. <% } %>
  83. <% } %>
  84. onLoad((option) => {
  85. <% for(var i = 0; i < configList.~size; i++) { %>
  86. <% if(!configList[i].needTableId) { %>
  87. <% if(configList[i].effectType == 'select' || configList[i].effectType == 'radio' || configList[i].effectType == 'checkbox') { %>
  88. ${configList[i].fieldNameCamelCase}Options.value = uni.$snowy.tool.dictList('${configList[i].dictTypeCode}')
  89. <% } %>
  90. <% } %>
  91. <% } %>
  92. if(!option.id){
  93. return
  94. }
  95. ${classNameFirstLower}Detail({
  96. id: option.id
  97. }).then(res => {
  98. formData.value = res?.data
  99. })
  100. })
  101. const submit = () => {
  102. formRef.value.validate().then(res => {
  103. ${classNameFirstLower}SubmitForm(formData.value, !formData.value.id).then(respond => {
  104. uni.$emit('formBack', {
  105. data: respond.data
  106. })
  107. uni.navigateBack({
  108. delta: 1
  109. })
  110. })
  111. })
  112. }
  113. </script>
  114. <style lang="scss" scoped>
  115. .container {
  116. margin: 80rpx 0 0;
  117. padding: 30rpx;
  118. }
  119. </style>