edit.vue 4.0 KB

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