index.vue 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107
  1. <template>
  2. <view class="container">
  3. <uni-forms ref="baseForm" :modelValue="formData" :label-width="110" :rules="rules">
  4. <uni-forms-item v-for="item in fileds" :label="item.title" :name="item.name" :key="item.name" required>
  5. <uni-easyinput v-if="!item.formatter && !item.type" type="text" v-model="formData[item.name]" :placeholder="`请输入${item.title}`" />
  6. <uni-data-checkbox v-model="formData[item.name]" v-if="item.formatter && item.type == 'checkbox'" :multiple="item.multiple || false" :localdata="item.dict" />
  7. <text class="msg" v-if="item.name == 'baobaoloudong'">例:XX社区 + XX小区 + X栋</text>
  8. </uni-forms-item>
  9. </uni-forms>
  10. <button :disabled="btnText == '已报到'" class="btn" type="primary" @click="submitForm">{{ btnText }}</button>
  11. </view>
  12. </template>
  13. <script>
  14. import request from '../../api/report.js';
  15. export default {
  16. data() {
  17. return {
  18. btnText: '提交',
  19. formData: {},
  20. fileds: [
  21. { name: 'name', title: '姓名' },
  22. { name: 'sex', title: '性别', formatter: 'dict:user_sex_type', type: 'checkbox' },
  23. { name: 'workUnit', title: '工作单位' },
  24. { name: 'baobaoloudong', title: '包保楼栋' },
  25. { name: 'phone', title: '联系电话' },
  26. { name: 'jianrensanzhang', title: '是否兼任三长', formatter: 'dict:jianrensanzhang_type', type: 'checkbox' },
  27. ],
  28. rules: {
  29. name: {
  30. rules:[{ required: true, errorMessage: '请填写姓名' }]
  31. },
  32. sex: {
  33. rules:[{ required: true, errorMessage: '请选择性别' }]
  34. },
  35. phone: {
  36. rules:[{ required: true, errorMessage: '请填写联系电话' }]
  37. },
  38. workUnit: {
  39. rules:[{ required: true, errorMessage: '请填写工作单位' }]
  40. },
  41. baobaoloudong: {
  42. rules:[{ required: true, errorMessage: '请填写包保楼栋' }]
  43. },
  44. jianrensanzhang: {
  45. rules:[{ required: true, errorMessage: '请选择是否兼任三长' }]
  46. },
  47. }
  48. }
  49. },
  50. async mounted() {
  51. const res = await request.getGbStatus();
  52. if (res.data) {
  53. this.formData = { ...res.data, sex: String(res.data.sex), jianrensanzhang: String(res.data.jianrensanzhang) };
  54. this.btnText = '已报到';
  55. }
  56. await this.setDict();
  57. },
  58. onShow() {},
  59. methods: {
  60. async setDict() {
  61. this.fileds = await Promise.all(this.fileds.map(async e => {
  62. if (e.formatter && e.formatter.includes('dict')) {
  63. const dictType = e.formatter.split(':')[1];
  64. const res = await request.getDict(dictType);
  65. if (res.code == 200) e.dict = res.data.map(l => ({ ...l, value: l.dictValue, text: l.dictLabel }));
  66. }
  67. return e;
  68. }));
  69. },
  70. async submitForm() {
  71. this.$refs.baseForm.validate().then(async valid=>{
  72. const res = await request.submitgb(this.formData);
  73. if (res.code == 200) {
  74. uni.showToast({
  75. title: '提交成功',
  76. icon: 'success',
  77. duration: 2000,
  78. });
  79. setTimeout(() => {
  80. uni.navigateBack();
  81. }, 1000)
  82. }
  83. }).catch(err =>{
  84. console.log('表单错误信息:', err);
  85. })
  86. }
  87. },
  88. // 页面生命周期中onReachBottom(页面滚动到底部的事件)
  89. onReachBottom() {}
  90. }
  91. </script>
  92. <style>
  93. .uni-forms {
  94. width: 90%;
  95. margin: 10px auto;
  96. }
  97. .btn {
  98. width: 90%;
  99. margin: 0 auto;
  100. }
  101. .msg {
  102. color: red;
  103. font-size: 12px;
  104. }
  105. </style>