Style(店铺):界面调整
This commit is contained in:
@@ -0,0 +1,303 @@
|
||||
<template>
|
||||
<view class="container" :style="{height: height}">
|
||||
<editor
|
||||
class="ql-container"
|
||||
:placeholder="placeholder"
|
||||
:show-img-size="true"
|
||||
:show-img-toolbar="true"
|
||||
:show-img-resize="true"
|
||||
@ready="onEditorReady"
|
||||
id="editor"
|
||||
@statuschange="statuschange"
|
||||
@focus="editFocus"
|
||||
@blur="editBlur"
|
||||
ref="editot"
|
||||
></editor>
|
||||
<!-- 操作工具 -->
|
||||
<view class="tool-view" >
|
||||
<!-- 文字相关操作 -->
|
||||
<view class="font-more" :style="{ height: showMoreTool ? '100rpx' : 0 }">
|
||||
<jinIcon class="single" type="" title="加粗" @click="setBold" :color="showBold ? activeColor : '#666666'"></jinIcon>
|
||||
<jinIcon class="single" type="" title="斜体" @click="setItalic" :color="showItalic ? activeColor : '#666666'"></jinIcon>
|
||||
<jinIcon class="single" type="" title="分割线" @click="setIns" :color="showIns ? activeColor : '#666666'"></jinIcon>
|
||||
<jinIcon class="single" type="" title="标题" @click="setHeader" :color="showHeader ? activeColor : '#666666'"></jinIcon>
|
||||
<jinIcon class="single" type="" title="居中" @click="setCenter" :color="showCenter ? activeColor : '#666666'"></jinIcon>
|
||||
<jinIcon class="single" type="" title="居右" @click="setRight" :color="showRight ? activeColor : '#666666'"></jinIcon>
|
||||
</view>
|
||||
<view class="setting-layer-mask" v-if="showSettingLayer" @click="showSetting"></view>
|
||||
<view class="setting-layer" v-if="showSettingLayer">
|
||||
<view class="single" @click="release(true)">
|
||||
<jinIcon class="icon" type="" ></jinIcon>
|
||||
<view>公开发布</view>
|
||||
</view>
|
||||
<view class="single" @click="release(false)">
|
||||
<jinIcon class="icon" type="" ></jinIcon>
|
||||
<view>暂时保存</view>
|
||||
</view>
|
||||
</view>
|
||||
<view class="tool">
|
||||
<!-- <jinIcon class="single" type="" title="图片" @click="insertImage"></jinIcon> -->
|
||||
<jinIcon class="single" type="" title="格式" @click="showMore" :color="showMoreTool ? activeColor : '#666666'"></jinIcon>
|
||||
<jinIcon class="single" type="" title="分割线" @click="insertDivider"></jinIcon>
|
||||
<jinIcon class="single" type="" title="撤回" @click="undo"></jinIcon>
|
||||
<jinIcon class="single" type="" title="还原" @click="redo"></jinIcon>
|
||||
<!-- <jinIcon class="single" type="" title="设置" @click="showSetting"></jinIcon> -->
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import jinIcon from './jin-icons.vue';
|
||||
export default {
|
||||
props: {
|
||||
// 点击图片时显示图片大小控件
|
||||
showImgSize: {
|
||||
type: Boolean,
|
||||
default: false
|
||||
},
|
||||
// 点击图片时显示工具栏控件
|
||||
showImgToolbar: {
|
||||
type: Boolean,
|
||||
default: false
|
||||
},
|
||||
// 点击图片时显示修改尺寸控件
|
||||
showImgResize: {
|
||||
type: Boolean,
|
||||
default: false
|
||||
},
|
||||
// 占位符
|
||||
placeholder: {
|
||||
type: String,
|
||||
default: '开始输入...'
|
||||
},
|
||||
// 图片上传的地址
|
||||
uploadFileUrl: {
|
||||
type: String,
|
||||
default: '#'
|
||||
},
|
||||
// 上传文件时的name
|
||||
fileKeyName: {
|
||||
type: String,
|
||||
default: 'file'
|
||||
},
|
||||
// 上传图片时,http请求的header
|
||||
header: {
|
||||
type: Object
|
||||
},
|
||||
// 初始化html
|
||||
html: {
|
||||
type: String
|
||||
},
|
||||
// 整个控件的高度
|
||||
height: {
|
||||
type: String,
|
||||
default: '25vh'
|
||||
}
|
||||
},
|
||||
computed:{
|
||||
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
showMoreTool: false,
|
||||
showBold: false,
|
||||
showItalic: false,
|
||||
showIns: false,
|
||||
showHeader: false,
|
||||
showCenter: false,
|
||||
showRight: false,
|
||||
showSettingLayer: false,
|
||||
activeColor: '#F56C6C'
|
||||
};
|
||||
},
|
||||
components: {
|
||||
jinIcon
|
||||
},
|
||||
mounted() {
|
||||
},
|
||||
methods: {
|
||||
onEditorReady(e) {
|
||||
uni.createSelectorQuery()
|
||||
.in(this)
|
||||
.select('.ql-container')
|
||||
.fields({
|
||||
size: true,
|
||||
context: true
|
||||
},res => {
|
||||
this.editorCtx = res.context;
|
||||
this.editorCtx.setContents({
|
||||
html: this.html
|
||||
})
|
||||
})
|
||||
.exec();
|
||||
},
|
||||
undo() {
|
||||
this.editorCtx.undo();
|
||||
},
|
||||
/// 插入分割线
|
||||
insertDivider() {
|
||||
this.editorCtx.insertDivider();
|
||||
},
|
||||
redo() {
|
||||
this.editorCtx.redo();
|
||||
},
|
||||
showMore() {
|
||||
this.showMoreTool = !this.showMoreTool;
|
||||
this.editorCtx.setContents()
|
||||
},
|
||||
setBold() {
|
||||
this.showBold = !this.showBold;
|
||||
this.editorCtx.format('bold');
|
||||
},
|
||||
setItalic() {
|
||||
this.showItalic = !this.showItalic;
|
||||
this.editorCtx.format('italic');
|
||||
},
|
||||
checkStatus(name, detail, obj) {
|
||||
if (detail.hasOwnProperty(name)) {
|
||||
this[obj] = true;
|
||||
} else {
|
||||
this[obj] = false;
|
||||
}
|
||||
},
|
||||
statuschange(e) {
|
||||
var detail = e.detail;
|
||||
this.checkStatus('bold', detail, 'showBold');
|
||||
this.checkStatus('italic', detail, 'showItalic');
|
||||
this.checkStatus('ins', detail, 'showIns');
|
||||
this.checkStatus('header', detail, 'showHeader');
|
||||
if (detail.hasOwnProperty('align')) {
|
||||
if (detail.align == 'center') {
|
||||
this.showCenter = true;
|
||||
this.showRight = false;
|
||||
} else if (detail.align == 'right') {
|
||||
this.showCenter = false;
|
||||
this.showRight = true;
|
||||
} else {
|
||||
this.showCenter = false;
|
||||
this.showRight = false;
|
||||
}
|
||||
} else {
|
||||
this.showCenter = false;
|
||||
this.showRight = false;
|
||||
}
|
||||
},
|
||||
setIns() {
|
||||
this.showIns = !this.showIns;
|
||||
this.editorCtx.format('ins');
|
||||
},
|
||||
setHeader() {
|
||||
this.showHeader = !this.showHeader;
|
||||
this.editorCtx.format('header', this.showHeader ? 'H2' : false);
|
||||
},
|
||||
setCenter() {
|
||||
this.showCenter = !this.showCenter;
|
||||
this.editorCtx.format('align', this.showCenter ? 'center' : false);
|
||||
},
|
||||
setRight() {
|
||||
this.showRight = !this.showRight;
|
||||
this.editorCtx.format('align', this.showRight ? 'right' : false);
|
||||
},
|
||||
showSetting() {
|
||||
this.showSettingLayer = !this.showSettingLayer;
|
||||
},
|
||||
async editFocus(e) {
|
||||
},
|
||||
editBlur(e) {
|
||||
this.editorCtx.getContents({
|
||||
success: res => {
|
||||
this.$emit('editOk', res);
|
||||
}
|
||||
})
|
||||
},
|
||||
release(isPublic) {
|
||||
this.showSettingLayer = false;
|
||||
this.editorCtx.getContents({
|
||||
success: res => {
|
||||
Object.assign(res, {
|
||||
isPublic: isPublic
|
||||
})
|
||||
this.$emit('editOk', res);
|
||||
}
|
||||
})
|
||||
},
|
||||
}
|
||||
};
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
.container {
|
||||
box-sizing: border-box;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
height: 100%;
|
||||
box-sizing: border-box;
|
||||
/* padding-top: 30rpx; */
|
||||
}
|
||||
|
||||
.ql-container {
|
||||
line-height: 150%;
|
||||
font-size: 22rpx;
|
||||
width: 100%;
|
||||
height: 240px;
|
||||
background: #fff;
|
||||
margin: 0 auto;
|
||||
flex: 1;
|
||||
box-sizing: border-box;
|
||||
/* padding-bottom: 5rpx; */
|
||||
}
|
||||
.tool-view{
|
||||
width: 100%;
|
||||
background: #eee;
|
||||
/* margin-top: 20px; */
|
||||
}
|
||||
.tool {
|
||||
height: 95rpx;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: space-around;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.font-more {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: space-around;
|
||||
width: 100%;
|
||||
background: rgb(235, 235, 235);
|
||||
overflow: hidden;
|
||||
transition: all 0.15s;
|
||||
}
|
||||
|
||||
.setting-layer {
|
||||
position: absolute;
|
||||
bottom: 100rpx;
|
||||
background: #fff;
|
||||
width: 250rpx;
|
||||
right: 20rpx;
|
||||
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.15);
|
||||
border-radius: 8rpx;
|
||||
}
|
||||
.setting-layer .single {
|
||||
height: 80rpx;
|
||||
font-size: 32rpx;
|
||||
padding: 0 30rpx;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
line-height: 80rpx;
|
||||
flex-direction: row;
|
||||
color: #666;
|
||||
}
|
||||
.setting-layer .single .icon {
|
||||
margin-right: 20rpx;
|
||||
}
|
||||
.setting-layer-mask{
|
||||
position: fixed;
|
||||
left: 0;
|
||||
top: 0;
|
||||
width: 100vw;
|
||||
height: 100vh;
|
||||
background: transparent;
|
||||
}
|
||||
</style>
|
||||
@@ -0,0 +1,71 @@
|
||||
<template>
|
||||
<view class="content">
|
||||
<view
|
||||
class="icon"
|
||||
:style="{color: color, fontSize: fontSize}"
|
||||
v-html="type"
|
||||
@click="toclick"
|
||||
></view>
|
||||
<view class="desc">{{ title }}</view>
|
||||
</view>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
export default {
|
||||
props: {
|
||||
type: {
|
||||
type: String,
|
||||
default: ''
|
||||
},
|
||||
color: {
|
||||
type: String,
|
||||
default: '#666666'
|
||||
},
|
||||
fontSize: {
|
||||
type: String,
|
||||
default: '32rpx'
|
||||
},
|
||||
title: {
|
||||
type: String,
|
||||
default: '说明'
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
toclick() {
|
||||
this.$emit('click');
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
.content{
|
||||
position: relative;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
height: 80upx;
|
||||
min-width: 60px;
|
||||
padding-bottom: 15upx;
|
||||
}
|
||||
.content .desc {
|
||||
position: absolute;
|
||||
bottom: 0;
|
||||
width: 100%;
|
||||
text-align: center;
|
||||
font-size: 8px;
|
||||
color: #666;
|
||||
line-height: 8px;
|
||||
transform: translateY(-8px);
|
||||
}
|
||||
@font-face {
|
||||
font-family: 'jin';
|
||||
/** 阿里巴巴矢量图标库的字体库地址,可以替换自己的字体库地址 **/
|
||||
src: url('https://at.alicdn.com/t/font_1491431_6m7ltjo8wi.ttf') format('truetype');
|
||||
}
|
||||
|
||||
.icon {
|
||||
font-family: jin !important;
|
||||
}
|
||||
|
||||
</style>
|
||||
@@ -0,0 +1,65 @@
|
||||
## jin-edit 基于editor的富文本编辑器
|
||||
|
||||
### 兼容性
|
||||
|
||||
这是一个uni-app的通用组件,兼容微信小程序端、安卓端、ios端(未测试)、H5端。作者因没有ios设备无法对ios端进行测试,其他端测试无问题。
|
||||
|
||||
微信小程序 | APP | H5
|
||||
:--: | :--: | :--:
|
||||
√ | √ | √
|
||||
|
||||
我的HbuilderX版本2.6.7,不同的版本可能会造成不兼容的问题。
|
||||
|
||||
### 使用方式
|
||||
|
||||
1. 将此组件进入你的项目中的 /components/ 目录中
|
||||
2. 在某个页面中使用该插件
|
||||
- 在 `script` 中引用组件
|
||||
```javascript
|
||||
import jinEdit from '../../components/jin-edit/jin-edit.vue';
|
||||
export default {
|
||||
data() {
|
||||
return {
|
||||
|
||||
}
|
||||
},
|
||||
components: {
|
||||
jinEdit
|
||||
},
|
||||
methods: {
|
||||
// 点击发布
|
||||
editOk(res) {
|
||||
console.log(res);
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
- 在 `template` 中使用组件
|
||||
```html
|
||||
<jinEdit placeholder="请输入内容" @editOk="editOk" uploadFileUrl="/#"></jinEdit>
|
||||
```
|
||||
|
||||
### Demo
|
||||
|
||||
[uni-jin(一个uni-app组件集合)](https://github.com/wangjinxin613/uni-jin)
|
||||
|
||||
### 参数
|
||||
|
||||
属性 | 类型 | 默认值 | 说明
|
||||
:--: | :--: | :--: | :--:
|
||||
showImgSize | Boolean | false | 点击图片时显示图片大小控件
|
||||
showImgToolbar | Boolean | false | 点击图片时显示工具栏控件
|
||||
showImgResize | Boolean | false | 点击图片时显示修改尺寸控件
|
||||
placeholder | String | '' | 编辑器占位符
|
||||
uploadFileUrl | String | '#' | 图片上传的服务器地址
|
||||
fileKeyName | String | 'file' | 图片上传时的name
|
||||
header | Object | - | 图片上传http请求的header
|
||||
html | String | - | 初始化的html
|
||||
|
||||
### 方法
|
||||
|
||||
方法名 | 参数 | 说明
|
||||
:--: | :--: | :--:
|
||||
editOk | e={html,text,delta,isPublic} | 点击发布按钮触发
|
||||
|
||||
以上
|
||||
Reference in New Issue
Block a user