opendb-feedback.vue 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142
  1. <template>
  2. <view class="uni-container">
  3. <uni-forms ref="form" :value="formData" validate-trigger="submit" err-show-type="toast">
  4. <uni-forms-item name="content" label="留言内容/回复内容" required>
  5. <textarea @input="binddata('content', $event.detail.value)" class="uni-textarea-border"
  6. v-model="formData.content" trim="right"></textarea>
  7. </uni-forms-item>
  8. <uni-forms-item name="imgs" label="图片列表">
  9. <uni-file-picker file-mediatype="image" :limit="6" return-type="array" v-model="formData.imgs">
  10. </uni-file-picker>
  11. </uni-forms-item>
  12. <uni-forms-item name="contact" label="联系人">
  13. <uni-easyinput v-model="formData.contact" trim="both"></uni-easyinput>
  14. </uni-forms-item>
  15. <uni-forms-item name="mobile" label="联系电话">
  16. <uni-easyinput v-model="formData.mobile" trim="both"></uni-easyinput>
  17. </uni-forms-item>
  18. <view class="uni-button-group">
  19. <button type="primary" class="uni-button" @click="submit">提交</button>
  20. </view>
  21. </uni-forms>
  22. </view>
  23. </template>
  24. <script>
  25. import {
  26. validator
  27. } from '../../js_sdk/validator/opendb-feedback.js';
  28. console.log(validator);
  29. const db = uniCloud.database();
  30. const dbCollectionName = 'opendb-feedback';
  31. function getValidator(fields) {
  32. let result = {}
  33. for (let key in validator) {
  34. if (fields.indexOf(key) > -1) {
  35. result[key] = validator[key]
  36. }
  37. }
  38. return result
  39. }
  40. export default {
  41. data() {
  42. let formData = {
  43. "content": "",
  44. "imgs": [],
  45. "contact": "",
  46. "mobile": ""
  47. }
  48. return {
  49. formData,
  50. formOptions: {},
  51. rules: {
  52. ...getValidator(Object.keys(formData))
  53. }
  54. }
  55. },
  56. onReady() {
  57. this.$refs.form.setRules(this.rules)
  58. },
  59. methods: {
  60. /**
  61. * 触发表单提交
  62. */
  63. submit() {
  64. uni.showLoading({
  65. mask: true
  66. })
  67. this.$refs.form.validate().then((res) => {
  68. this.submitForm(res)
  69. }).catch(() => {
  70. uni.hideLoading()
  71. })
  72. },
  73. submitForm(value) {
  74. // 使用 clientDB 提交数据
  75. db.collection(dbCollectionName).add(value).then((res) => {
  76. uni.showToast({
  77. icon: 'none',
  78. title: '提交成功'
  79. })
  80. this.getOpenerEventChannel().emit('refreshData')
  81. setTimeout(() => uni.navigateBack(), 500)
  82. }).catch((err) => {
  83. uni.showModal({
  84. content: err.message || '请求服务失败',
  85. showCancel: false
  86. })
  87. }).finally(() => {
  88. uni.hideLoading()
  89. })
  90. }
  91. }
  92. }
  93. </script>
  94. <style>
  95. .uni-container {
  96. padding: 15px;
  97. }
  98. .uni-input-border,
  99. .uni-textarea-border {
  100. width: 100%;
  101. font-size: 14px;
  102. color: #666;
  103. border: 1px #e5e5e5 solid;
  104. border-radius: 5px;
  105. box-sizing: border-box;
  106. }
  107. .uni-input-border {
  108. padding: 0 10px;
  109. height: 35px;
  110. }
  111. .uni-textarea-border {
  112. padding: 10px;
  113. height: 80px;
  114. }
  115. .uni-button-group {
  116. margin-top: 50px;
  117. /* #ifndef APP-NVUE */
  118. display: flex;
  119. /* #endif */
  120. justify-content: center;
  121. }
  122. .uni-button {
  123. width: 184px;
  124. padding: 12px 20px;
  125. font-size: 14px;
  126. border-radius: 4px;
  127. line-height: 1;
  128. margin: 0;
  129. }
  130. </style>