| 
						 | 
						- <template>
 -   <view class="page__view">
 -     <navbar title="意见反馈" leftClick @leftClick="$utils.navigateBack" bgColor="transparent" />
 - 
 -     <view class="bg">
 -       <view class="title">Hello</view>
 -       <view class="desc">有什么好的建议可以告诉我们哦~</view>
 -     </view>
 - 
 -     <view class="main">
 -       <view class="form">
 -         <uv-form 
 -           ref="form"
 -           :model="form"
 -           errorType="toast"
 -         >
 -           <view class="form-item">
 -             <uv-form-item prop="textDetails" :customStyle="formItemStyle">
 -               <view class="card">
 -                 <view class="editor-header">
 -                   <view class="editor-header-content">
 -                     <view>反馈内容</view>
 -                     <view class="editor-icon">
 -                       <uv-icon name="star-fill" color="#FFFFFF" size="26rpx"></uv-icon>
 -                     </view>
 -                   </view>
 -                 </view>
 -                 <view class="editor__view">
 -                   <editor id="editor" class="editor"
 -                     placeholder="请填写10个字以上的内容,以便我们为您提供更好的服务"
 -                     @ready="onEditorReady"
 -                     @input="onEditroInput"
 -                   ></editor>
 -                   <view class="editor-tools">
 -                     <button @click="insertImage" plain class="flex btn">
 -                       <!-- todo: 缺切图 -->
 -                       <uv-icon name="camera-fill" color="#014FA2" size="56rpx"></uv-icon>
 -                     </button>
 -                   </view>
 -                 </view>
 -               </view>
 -             </uv-form-item>
 -           </view>
 -           <view class="form-item">
 -             <uv-form-item prop="phone" :customStyle="formItemStyle">
 -               <view class="flex card phone">
 -                 <view class="label">联系电话</view>
 -                 <input 
 -                   v-model="form.phone" 
 -                   placeholder-style="color: #999999; font-size: 28rpx;"
 -                   placeholder="请输入手机号" 
 -                 />
 -               </view>
 -             </uv-form-item>
 -           </view>
 -         </uv-form>
 -       </view>
 -     </view>
 -   </view>
 - </template>
 - 
 - <script>
 -   export default {
 -     data() {
 -       return {
 -         form: {
 -           textDetails: null,
 -           phone: null,
 - 				},
 -         formItemStyle: { padding: 0 },
 -       }
 -     },
 - 		onReady() {
 - 			this.$refs.form.setRules(this.getRules());
 - 		},
 -     methods: {
 -       onEditorReady() {
 - 				uni.createSelectorQuery().select('#editor').context((res) => {
 - 					this.editorCtx = res.context
 - 				}).exec()
 - 			},
 -       onEditroInput(e) {
 -         const { text } = e.detail
 - 
 -         this.descLen = text?.length || 0
 -       },
 - 			insertImage() {
 - 				uni.chooseImage({
 - 					count: 1,
 - 					success: (res) => {
 - 						// this.editorCtx.insertImage({
 - 						// 	src: res.tempFilePaths[0],
 - 						// 	alt: '图像',
 - 						// })
 - 
 -             // todo: check
 -             this.$Oss.ossUpload(res.tempFilePaths[0]).then(url => {
 -               this.editorCtx.insertImage({
 -                 src: url,
 -                 alt: '图像',
 -               })
 -             })
 - 					}
 - 				})
 - 			},
 -       setEditorContents(html) {
 -         if (!this.editorCtx) {
 -           setTimeout(() => {
 -             this.setEditorContents(html)
 -           }, 200)
 - 
 -           return
 -         }
 - 
 -         this.editorCtx.setContents({ html })
 -       },
 -       getEditorContents() {
 -         return new Promise((resolve, reject) => {
 -           this.editorCtx.getContents({
 -             success: (e) => {
 -               const { html, text } = e
 -               resolve({ html, text })
 -             },
 -             fail: () => {
 -               reject()
 -             }
 -           })
 -         })
 -       },
 -       getRules() {
 -         const textDetailsValidator = async (rule, value, callback) => {
 -           const textDetails = (await this.getEditorContents())?.html
 - 
 -           if (textDetails) {
 -             callback()
 -             return
 -           }
 - 
 -           callback(new Error('请填写10个字以上的内容,以便我们为您提供更好的服务'))
 -         }
 - 
 -         return {
 - 					'phone': {
 - 						type: 'string',
 - 						required: true,
 - 						message: '请输入手机号',
 - 					},
 - 					'textDetails': {
 -             asyncValidator: textDetailsValidator,
 - 					},
 - 				}
 -       },
 -       async onSubmit(headImage) {
 -         try {
 - 
 -           await this.$refs.form.validate()
 - 
 -           const textDetails = (await this.getEditorContents())?.html
 - 
 -           const {
 -             phone,
 -           } = this.form
 - 
 -           const params = {
 -             phone,
 -             textDetails,
 -           }
 - 
 -           // todo
 -           // await this.$fetch('saveOrUpdateArticleShare', params)
 -           
 -           uni.showToast({
 -             title: '提交成功',
 -             icon: 'none'
 -           })
 - 
 -           setTimeout(uni.navigateBack, 1000, -1)
 - 						
 -         } catch (err) {
 - 
 -         }
 -       },
 -     },
 -   }
 - </script>
 - 
 - <style scoped lang="scss">
 - 
 -   .page__view {
 -     background: #F5F5F5;
 -     
 -     /deep/ .nav-bar__view {
 -       position: fixed;
 -       top: 0;
 -       left: 0;
 -     }
 -   }
 - 
 -   .bg {
 -     width: 100%;
 -     height: 501rpx;
 -     padding-top: 203rpx;
 -     box-sizing: border-box;
 -     color: #FFFFFF;
 - 		background: linear-gradient(164deg, #014FA2 30%, #4C8FD6);
 - 
 -     .title {
 -       padding: 0 73rpx;
 -       font-size: 64rpx;
 -       font-weight: 600;
 -     }
 - 
 -     .desc {
 -       margin-top: 18rpx;
 -       padding: 0 68rpx;
 -       box-sizing: border-box;
 -       font-size: 28rpx;
 -     }
 -   }
 - 
 -   .main {
 -     width: 100%;
 -     padding: 0 28rpx;
 -     box-sizing: border-box;
 -     background: #F5F5F5;
 -   }
 - 
 -   .form {
 -     // transform: translateY(-98rpx);
 -     transform: translateY(-46rpx);
 - 
 -     &-item {
 -       & + & {
 -         margin-top: 36rpx;
 -       }
 -     }
 -   }
 - 
 -   .editor__view {
 -     padding: 43rpx 30rpx;
 -     background-color: #FFFFFF;
 -     border-radius: 12rpx;
 -   }
 - 
 -   .editor-header {
 -     position: absolute;
 -     top: 0;
 -     left: 12rpx;
 -     transform: translateY(-100%);
 -     // margin-left: 12rpx;
 - 
 -     &-content {
 -       position: relative;
 -       padding: 9rpx 20rpx 3rpx 20rpx;
 -       font-size: 28rpx;
 -       font-weight: 600;
 -       color: #FFFFFF;
 -       border-top-left-radius: 30rpx;
 -       background: linear-gradient(to right, #014FA2, #6A9ACE);
 -     }
 -   }
 - 
 -   .editor-icon {
 -     position: absolute;
 -     top: 0;
 -     right: 0;
 -     transform: translate(30rpx, -4rpx);
 -   }
 - 
 -   .editor {
 -     height: 462rpx;
 - 
 -     &-tools {
 -       padding: 0 7rpx;
 -       .btn {
 -         width: 133rpx;
 -         height: 133rpx;
 -         border: 2rpx dashed #014FA2;
 -       }
 -     }
 - 
 -   }
 - 
 -   .card {
 -     position: relative;
 -   }
 - 
 -   .phone {
 -     justify-content: flex-start;
 -     padding: 44rpx 27rpx;
 -     column-gap: 31rpx;
 -     background: #FFFFFF;
 -     border-radius: 15rpx;
 - 
 -     .label {
 -       font-size: 28rpx;
 -       color: #000000;
 -     }
 -   }
 - 
 - </style>
 
 
  |