123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375 |
- <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>
|