|
@@ -1,375 +0,0 @@
|
|
|
-<template>
|
|
|
- <view class="gg-container">
|
|
|
- <view class="gg-tit">
|
|
|
- <view class="gg-title">
|
|
|
- 我的吉农宝<text>上个页面传过来的参数{{id}}</text>
|
|
|
- </view>
|
|
|
- <view>
|
|
|
- <uni-section title="基本用法" type="line">
|
|
|
- <view class="example">
|
|
|
- <!-- 基础用法,不包含校验规则 -->
|
|
|
- <uni-forms ref="baseForm" :modelValue="baseFormData">
|
|
|
- <uni-forms-item label="姓名" required>
|
|
|
- <uni-easyinput v-model="baseFormData.name" placeholder="请输入姓名" />
|
|
|
- </uni-forms-item>
|
|
|
- <uni-forms-item label="年龄" required>
|
|
|
- <uni-easyinput v-model="baseFormData.age" placeholder="请输入年龄" />
|
|
|
- </uni-forms-item>
|
|
|
- <uni-forms-item label="性别" required>
|
|
|
- <uni-data-checkbox v-model="baseFormData.sex" :localdata="sexs" />
|
|
|
- </uni-forms-item>
|
|
|
- <uni-forms-item label="兴趣爱好" required>
|
|
|
- <uni-data-checkbox v-model="baseFormData.hobby" multiple :localdata="hobbys" />
|
|
|
- </uni-forms-item>
|
|
|
- <uni-forms-item label="自我介绍">
|
|
|
- <uni-easyinput type="textarea" v-model="baseFormData.introduction" placeholder="请输入自我介绍" />
|
|
|
- </uni-forms-item>
|
|
|
- <uni-forms-item label="日期时间">
|
|
|
- <uni-datetime-picker type="datetime" return-type="timestamp" v-model="baseFormData.datetimesingle"/>
|
|
|
- </uni-forms-item>
|
|
|
- </uni-forms>
|
|
|
- </view>
|
|
|
- </uni-section>
|
|
|
- <uni-section title="多行文本" subTitle="指定属性 type=textarea 使用多行文本框" type="line" padding>
|
|
|
- <uni-easyinput type="textarea" v-model="value" placeholder="请输入内容"></uni-easyinput>
|
|
|
- </uni-section>
|
|
|
- <view class="content">
|
|
|
- <editor
|
|
|
- class="myEdit"
|
|
|
- placeholder="写点什么吧~~"
|
|
|
- show-img-resize
|
|
|
- show-img-toolbar
|
|
|
- show-img-size
|
|
|
- @ready="onEditReady"
|
|
|
- @focus="OnFocus"
|
|
|
- @statuschange="statuschange"
|
|
|
- ></editor>
|
|
|
- </view>
|
|
|
- <view class="btnGroup">
|
|
|
- <u-button type="primary" text="确认发表" @click="onSubmit" :disabled="!artData.title"></u-button>
|
|
|
- </view>
|
|
|
- <view class="tools" v-show="toolsShow">
|
|
|
- <!-- 标题 -->
|
|
|
- <view class="item" @click="headChange">
|
|
|
- <text class="iconfont icon-zitibiaoti" :class="headShow ? 'active' : ''"></text>
|
|
|
- </view>
|
|
|
- <!-- 加粗 -->
|
|
|
- <view class="item" @click="boldChange">
|
|
|
- <text class="iconfont icon-zitijiacu" :class="boldShow ? 'active' : ''"></text>
|
|
|
- </view>
|
|
|
- <!-- 斜体 -->
|
|
|
- <view class="item" @click="italicChange">
|
|
|
- <text class="iconfont icon-zitixieti" :class="italicShow ? 'active' : ''"></text>
|
|
|
- </view>
|
|
|
- <!-- 分割线 -->
|
|
|
- <view class="item" @click="insertDivider"><text class="iconfont icon-fengexian"></text></view>
|
|
|
- <view class="item" @click="insertImage"><text class="iconfont icon-charutupian"></text></view>
|
|
|
- <!-- 完成 -->
|
|
|
- <view class="item" @click="editOk"><text class="iconfont icon-duigou_kuai"></text></view>
|
|
|
- </view>
|
|
|
- <!-- 这张图片就是自定义的图片,地址填写自己本地的就行 -->
|
|
|
- <image src="https://qiniu-web-assets.dcloud.net.cn/unidoc/zh/unicloudlogo.png"
|
|
|
- mode="widthFix" style="width: 112rpx;height: 110rpx;" @click="uploadImagePhoto()"></image>
|
|
|
-
|
|
|
- </view>
|
|
|
- </view>
|
|
|
- </view>
|
|
|
-</template>
|
|
|
-
|
|
|
-<script>
|
|
|
- export default {
|
|
|
- data() {
|
|
|
- return {
|
|
|
- toolsShow: false,
|
|
|
- editorContent: null,
|
|
|
- headShow: false,
|
|
|
- boldShow: false,
|
|
|
- italicShow: false,
|
|
|
- artData: {
|
|
|
- title: '',
|
|
|
- content: ''
|
|
|
- },
|
|
|
-
|
|
|
-
|
|
|
- baseFormData: {
|
|
|
- name: '',
|
|
|
- age: '',
|
|
|
- introduction: '',
|
|
|
- sex: 2,
|
|
|
- hobby: [5],
|
|
|
- datetimesingle: 1627529992399
|
|
|
- },
|
|
|
- // 单选数据源
|
|
|
- sexs: [{
|
|
|
- text: '男',
|
|
|
- value: 0
|
|
|
- }, {
|
|
|
- text: '女',
|
|
|
- value: 1
|
|
|
- }, {
|
|
|
- text: '保密',
|
|
|
- value: 2
|
|
|
- }],
|
|
|
- // 多选数据源
|
|
|
- hobbys: [{
|
|
|
- text: '跑步',
|
|
|
- value: 0
|
|
|
- }, {
|
|
|
- text: '游泳',
|
|
|
- value: 1
|
|
|
- }, {
|
|
|
- text: '绘画',
|
|
|
- value: 2
|
|
|
- }, {
|
|
|
- text: '足球',
|
|
|
- value: 3
|
|
|
- }, {
|
|
|
- text: '篮球',
|
|
|
- value: 4
|
|
|
- }, {
|
|
|
- text: '其他',
|
|
|
- value: 5
|
|
|
- }],
|
|
|
- value: '',
|
|
|
- password: '',
|
|
|
- placeholderStyle: "color:#2979FF;font-size:14px",
|
|
|
- styles: {
|
|
|
- color: '#2979FF',
|
|
|
- borderColor: '#2979FF'
|
|
|
- },
|
|
|
- id:'',
|
|
|
- fileList1: []
|
|
|
- }
|
|
|
-
|
|
|
- },
|
|
|
- onLoad(options) {
|
|
|
- this.id = options.id;
|
|
|
- },
|
|
|
- onReady() {},
|
|
|
- methods: {
|
|
|
- input(e) {
|
|
|
- console.log('输入内容:', e);
|
|
|
- },
|
|
|
- iconClick(type) {
|
|
|
- uni.showToast({
|
|
|
- title: `点击了${type==='prefix'?'左侧':'右侧'}的图标`,
|
|
|
- icon: 'none'
|
|
|
- })
|
|
|
- },
|
|
|
- //*****************************************富文本编辑器方法**********************************************//
|
|
|
- // 初始化
|
|
|
- onEditReady() {
|
|
|
- // 查询节点信息的对象
|
|
|
- // 将选择器的选取范围更改为自定义组件 component 内,返回一个 SelectorQuery 对象实例。(初始时,选择器仅选取页面范围的节点,不会选取任何自定义组件中的节点)。
|
|
|
- // 在当前页面下选择第一个匹配选择器 selector 的节点,返回一个 NodesRef 对象实例,可以用于获取节点信息。
|
|
|
- // 获取节点的相关信息。第一个参数是节点相关信息配置(必选);第二参数是方法的回调函数,参数是指定的相关节点信息。
|
|
|
- // 执行所有的请求。请求结果按请求次序构成数组,在 callback 的第一个参数中返回。
|
|
|
- uni.createSelectorQuery()
|
|
|
- .in(this)
|
|
|
- .select('.myEdit')
|
|
|
- .fields(
|
|
|
- {
|
|
|
- size: true, //是否返回节点尺寸(width height)
|
|
|
- context: true //是否返回节点尺寸(width height)
|
|
|
- },
|
|
|
- (res) => {
|
|
|
- console.log(res);
|
|
|
- this.editorContent = res.context;
|
|
|
- }
|
|
|
- )
|
|
|
- .exec();
|
|
|
- },
|
|
|
- // 离开焦点
|
|
|
- OnFocus() {
|
|
|
- this.toolsShow = true;
|
|
|
- },
|
|
|
- // 添加分割线
|
|
|
- insertDivider() {
|
|
|
- this.editorContent.insertDivider();
|
|
|
- },
|
|
|
- // 添加大标题
|
|
|
- headChange() {
|
|
|
- this.headShow = !this.headShow;
|
|
|
- this.editorContent.format('header', this.headShow ? 'H2' : false);
|
|
|
- },
|
|
|
- // 加粗
|
|
|
- boldChange() {
|
|
|
- this.boldShow = !this.boldShow;
|
|
|
- this.editorContent.format('bold');
|
|
|
- },
|
|
|
- // 斜体
|
|
|
- italicChange() {
|
|
|
- this.italicShow = !this.italicShow;
|
|
|
- this.editorContent.format('italic');
|
|
|
- },
|
|
|
- // 用于检查对象detail是否包含名为name的属性
|
|
|
- checkStatus(name, detail, key) {
|
|
|
- if (detail.hasOwnProperty(name)) {
|
|
|
- this[key] = true;
|
|
|
- } else {
|
|
|
- this[key] = false;
|
|
|
- }
|
|
|
- },
|
|
|
- // 通过 Context 方法改变编辑器内样式时触发,返回选区已设置的样式(解决标题标签回弹问题)
|
|
|
- statuschange(e) {
|
|
|
- let detail = e.detail;
|
|
|
- console.log(detail);
|
|
|
- this.checkStatus('header', detail, 'headShow');
|
|
|
- this.checkStatus('bold', detail, 'boldShow');
|
|
|
- this.checkStatus('italic', detail, 'italicShow');
|
|
|
- },
|
|
|
- // 添加图像
|
|
|
- insertImage() {
|
|
|
- // 打开相机
|
|
|
- uni.chooseImage({
|
|
|
- count: 3, //默认9
|
|
|
- sizeType: ['compressed'], //可以指定是原图还是压缩图,默认二者都有
|
|
|
- success: async (res) => {
|
|
|
- let tempFiles = res.tempFiles;
|
|
|
- for (let item of tempFiles) {
|
|
|
- uni.showLoading({
|
|
|
- mask: true,
|
|
|
- title: '上传中...'
|
|
|
- });
|
|
|
- try {
|
|
|
- let res = await uniCloud.uploadFile({
|
|
|
- filePath: item.path, //要上传的文件对象
|
|
|
- cloudPath: item.name //cloudPath为云端文件名,
|
|
|
- });
|
|
|
- // 设置图片地址 图片地址,仅支持 http(s)、base64、本地图片
|
|
|
- this.editorContent.insertImage({
|
|
|
- src: res.fileID
|
|
|
- });
|
|
|
- uni.hideLoading();
|
|
|
- } catch (e) {
|
|
|
- uni.hideLoading();
|
|
|
- uni.showModal({
|
|
|
- content: '上传失败',
|
|
|
- title: '提示'
|
|
|
- });
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- });
|
|
|
- },
|
|
|
- // 确认
|
|
|
- editOk() {
|
|
|
- this.toolsShow = false;
|
|
|
- },
|
|
|
- onSubmit() {
|
|
|
- console.log(11);
|
|
|
- this.editorContent.getContents({
|
|
|
- success: (res) => {
|
|
|
- console.log(res);
|
|
|
- this.artData.content = res.html;
|
|
|
- }
|
|
|
- });
|
|
|
- },
|
|
|
- //*****************************************富文本编辑器方法**********************************************//
|
|
|
- uploadImagePhoto() {
|
|
|
- uni.chooseImage({
|
|
|
- count: 9, //默认9
|
|
|
- sizeType: ['original', 'compressed'], //可以指定是原图还是压缩图,默认二者都有
|
|
|
- sourceType: ['album'], //从相册选择
|
|
|
- success: function (res) {
|
|
|
- }
|
|
|
- });
|
|
|
- },
|
|
|
- // 新增图片
|
|
|
- async afterRead(event) {
|
|
|
- console.log(event)
|
|
|
- // 当设置 mutiple 为 true 时, file 为数组格式,否则为对象格式
|
|
|
- let lists = [].concat(event.file)
|
|
|
- let fileListLen = this[`fileList${event.name}`].length
|
|
|
- lists.map((item) => {
|
|
|
- this[`fileList${event.name}`].push({
|
|
|
- ...item,
|
|
|
- status: 'uploading',
|
|
|
- message: '上传中'
|
|
|
- })
|
|
|
- })
|
|
|
- for (let i = 0; i < lists.length; i++) {
|
|
|
- const result = await this.uploadFilePromise(lists[i].url)
|
|
|
- let item = this[`fileList${event.name}`][fileListLen]
|
|
|
- this[`fileList${event.name}`].splice(fileListLen, 1, Object.assign(item, {
|
|
|
- status: 'success',
|
|
|
- message: '',
|
|
|
- url: result
|
|
|
- }))
|
|
|
- fileListLen++
|
|
|
- }
|
|
|
- },
|
|
|
- //上传图片
|
|
|
- uploadFilePromise(url) {
|
|
|
- return new Promise((resolve, reject) => {
|
|
|
- let a = uni.uploadFile({
|
|
|
- //url: this.$common.domain+'/api/common/upload', // 仅为示例,非真实的接口地址
|
|
|
- // url:'http://192.168.2.21:7001/upload', // 仅为示例,非真实的接口地址
|
|
|
- filePath: url,
|
|
|
- name: 'file',
|
|
|
- formData: {
|
|
|
- user: 'test'
|
|
|
- },
|
|
|
- success: (res) => {
|
|
|
- let data=JSON.parse(res.data) //最终传给的是字符串,这里需要转换格式
|
|
|
- resolve(data.data.url)
|
|
|
- }
|
|
|
- });
|
|
|
- })
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
-</script>
|
|
|
-
|
|
|
-<style scoped lang="scss">
|
|
|
- .uni-mt-5 {
|
|
|
- margin-top: 5px;
|
|
|
- }
|
|
|
-
|
|
|
- /deep/ .ql-blank::before {
|
|
|
- font-style: normal;
|
|
|
- color: #e0e0e0;
|
|
|
- }
|
|
|
-
|
|
|
- .edit {
|
|
|
- padding: 30rpx;
|
|
|
- .title {
|
|
|
- input {
|
|
|
- height: 120rpx;
|
|
|
- font-size: 46rpx;
|
|
|
- border-bottom: 1px solid #e4e4e4;
|
|
|
- margin-bottom: 30rpx;
|
|
|
- color: #000;
|
|
|
- }
|
|
|
- .placeholderClass {
|
|
|
- color: #e0e0e0;
|
|
|
- }
|
|
|
- }
|
|
|
- .content {
|
|
|
- .myEdit {
|
|
|
- height: calc(100vh - 500rpx);
|
|
|
- margin-bottom: 30rpx;
|
|
|
- }
|
|
|
- }
|
|
|
- .tools {
|
|
|
- width: 100%;
|
|
|
- height: 80rpx;
|
|
|
- background: #fff;
|
|
|
- border-top: 1rpx solid #f4f4f4;
|
|
|
- position: fixed;
|
|
|
- left: 0;
|
|
|
- bottom: 0;
|
|
|
- display: flex;
|
|
|
- justify-content: space-around;
|
|
|
- align-items: center;
|
|
|
- .iconfont {
|
|
|
- font-size: 36rpx;
|
|
|
- color: #333;
|
|
|
- // 选择按钮的高亮
|
|
|
- &.active {
|
|
|
- color: #0199fe;
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
-</style>
|