askbot-dragon 1.2.9 → 1.3.11
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +27 -27
- package/babel.config.js +6 -6
- package/dragon.iml +7 -7
- package/package.json +56 -56
- package/public/index.html +43 -43
- package/src/App.vue +31 -31
- package/src/api/index.js +1 -1
- package/src/api/mock.http +2 -2
- package/src/api/requestUrl.js +185 -185
- package/src/assets/js/AliyunlssUtil.js +92 -92
- package/src/assets/js/Base64Util.js +22 -22
- package/src/assets/js/common.js +11 -11
- package/src/assets/js/script.js +36 -36
- package/src/assets/less/common.css +6773 -6773
- package/src/assets/less/converSationContainer/common.less +191 -191
- package/src/assets/less/converSationContainer/converSatonContainer.less +493 -493
- package/src/assets/less/iconfont.css +37 -37
- package/src/assets/less/ticketMessage.less +211 -211
- package/src/components/ActionAlertIframe.vue +112 -112
- package/src/components/AiGuide.vue +467 -467
- package/src/components/AnswerDocknowledge.vue +362 -362
- package/src/components/AnswerVoice.vue +256 -0
- package/src/components/AskIFrame.vue +15 -15
- package/src/components/ConversationContainer.vue +4024 -4011
- package/src/components/FileType.vue +86 -86
- package/src/components/Message.vue +27 -27
- package/src/components/actionSatisfaction.vue +107 -107
- package/src/components/actionSendToBot.vue +62 -62
- package/src/components/answerDissatisfaction.vue +62 -62
- package/src/components/answerRadio.vue +76 -76
- package/src/components/ask-components/DissatisfactionOptions.vue +57 -57
- package/src/components/ask-components/Msgloading.vue +37 -37
- package/src/components/ask-components/SatisfactionV2.vue +15 -15
- package/src/components/askVideo.vue +138 -138
- package/src/components/assetDetails.vue +370 -370
- package/src/components/assetMessage.vue +228 -228
- package/src/components/associationIntention.vue +323 -323
- package/src/components/attachmentPreview.vue +90 -90
- package/src/components/botActionSatisfactor.vue +68 -68
- package/src/components/chatContent.vue +513 -513
- package/src/components/feedBack.vue +136 -136
- package/src/components/fielListView.vue +344 -344
- package/src/components/file/AliyunOssComponents.vue +108 -108
- package/src/components/formTemplate.vue +3363 -3363
- package/src/components/loadingProcess.vue +164 -164
- package/src/components/message/ActionAlertIframe.vue +112 -112
- package/src/components/message/ShopMessage.vue +164 -164
- package/src/components/message/TextMessage.vue +924 -924
- package/src/components/message/TicketMessage.vue +177 -177
- package/src/components/message/swiper/index.js +4 -4
- package/src/components/message/swiper/ticketSwiper.vue +503 -503
- package/src/components/message/swiper/ticketSwiperItem.vue +61 -61
- package/src/components/msgLoading.vue +231 -231
- package/src/components/myPopup.vue +70 -70
- package/src/components/popup.vue +227 -227
- package/src/components/previewDoc.vue +108 -112
- package/src/components/previewPdf.vue +205 -205
- package/src/components/receiverMessagePlatform.vue +65 -65
- package/src/components/recommend.vue +89 -89
- package/src/components/selector/hOption.vue +20 -20
- package/src/components/selector/hSelector.vue +199 -199
- package/src/components/selector/hWrapper.vue +216 -216
- package/src/components/senderMessagePlatform.vue +50 -50
- package/src/components/source/BotMessage.vue +24 -24
- package/src/components/source/CustomMessage.vue +24 -24
- package/src/components/test.vue +260 -260
- package/src/components/tree.vue +294 -294
- package/src/components/utils/AliyunIssUtil.js +72 -72
- package/src/components/utils/ckeditor.js +155 -155
- package/src/components/utils/ckeditorImageUpload/command.js +109 -109
- package/src/components/utils/ckeditorImageUpload/editing.js +11 -11
- package/src/components/utils/ckeditorImageUpload/plugin-image.js +11 -11
- package/src/components/utils/ckeditorImageUpload/toolbar-ui.js +40 -40
- package/src/components/utils/ckeditorfileUpload/common.js +111 -111
- package/src/components/utils/ckeditorfileUpload/editing.js +11 -11
- package/src/components/utils/ckeditorfileUpload/plugin_file.js +11 -11
- package/src/components/utils/ckeditorfileUpload/toolbar_ui.js +34 -34
- package/src/components/utils/format_date.js +25 -25
- package/src/components/utils/index.js +6 -6
- package/src/components/utils/math_utils.js +29 -29
- package/src/components/voiceComponent.vue +119 -119
- package/src/main.js +60 -60
- package/vue.config.js +55 -55
|
@@ -1,34 +1,34 @@
|
|
|
1
|
-
import Plugin from "@ckeditor/ckeditor5-core/src/plugin";
|
|
2
|
-
import ButtonView from "@ckeditor/ckeditor5-ui/src/button/buttonview";
|
|
3
|
-
// import aoteman from "@ckeditor/ckeditor5-basic-styles/theme/icons/bold.svg";
|
|
4
|
-
// import aoteman from '../../assets/image/2.jpg'
|
|
5
|
-
|
|
6
|
-
// console.log(aoteman.replace('/',''));
|
|
7
|
-
export default class BoldToolbarUI extends Plugin {
|
|
8
|
-
init() {
|
|
9
|
-
this._createToolbarButton();
|
|
10
|
-
}
|
|
11
|
-
|
|
12
|
-
_createToolbarButton() {
|
|
13
|
-
const editor = this.editor;
|
|
14
|
-
const command = editor.commands.get('fileUpload');
|
|
15
|
-
editor.ui.componentFactory.add('MyFileUpload', (locale) => {
|
|
16
|
-
const view = new ButtonView(locale);
|
|
17
|
-
view.set({
|
|
18
|
-
label: '上传附件',
|
|
19
|
-
tooltip: true,
|
|
20
|
-
withText: true, // 在按钮上展示 label
|
|
21
|
-
// icon:`<svg t="1674962541538" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="30473" width="14" height="14"><path d="M81.92 432.64L0 732.672V156.672C0 126.976 24.064 102.4 54.272 102.4h256c14.336 0 27.648 5.632 38.4 15.872l110.08 110.08c2.048 2.048 4.608 3.072 7.68 3.072h385.024c29.696 0 54.272 24.064 54.272 54.272v75.776H176.128c-44.544 0-82.944 28.672-94.208 71.168z m931.328-7.168c-9.728-13.824-26.112-20.992-43.008-20.992H175.616c-24.064 0-45.568 16.384-51.712 39.936L12.288 852.992c-7.68 28.672 8.704 58.368 37.888 66.048 4.608 1.024 9.216 2.048 14.336 2.048h794.112c24.064 0 45.568-16.384 51.712-39.936l111.616-409.088c4.608-16.384 1.024-33.28-8.704-46.592z" p-id="30474"></path></svg>`,
|
|
22
|
-
// icon:'<svg t="1674984294045" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" style="width: 20px !important;height: 18px !important;" p-id="30878" ><path d="M94.72 444.928L14.848 737.792V175.616C14.848 146.432 38.4 122.88 67.584 122.88H317.44c13.824 0 27.136 5.632 37.376 15.36l107.52 107.52c2.048 2.048 4.608 3.072 7.68 3.072h375.808c29.184 0 52.736 23.552 52.736 52.736v73.728h-711.68c-43.52 0-80.896 28.16-92.16 69.632zM1003.52 437.76c-9.728-13.312-25.6-20.48-41.984-20.48H186.368c-23.552 0-44.544 15.872-50.688 38.912L26.624 855.04c-7.68 28.16 8.704 56.832 36.864 64.512 4.608 1.024 9.216 2.048 13.824 2.048h775.168c23.552 0 44.544-15.872 50.688-38.912l109.056-399.36c4.608-15.872 1.024-32.768-8.704-45.568z" p-id="30879"></path></svg>',
|
|
23
|
-
});
|
|
24
|
-
|
|
25
|
-
// console.log(Template);
|
|
26
|
-
// 将按钮的状态关联到命令对应值上
|
|
27
|
-
view.bind("isOn", "isEnabled").to(command, "value", "isEnabled");
|
|
28
|
-
// 点击按钮时触发相应命令
|
|
29
|
-
this.listenTo(view, "execute", () => editor.execute('fileUpload'));
|
|
30
|
-
return view;
|
|
31
|
-
|
|
32
|
-
})
|
|
33
|
-
}
|
|
34
|
-
}
|
|
1
|
+
import Plugin from "@ckeditor/ckeditor5-core/src/plugin";
|
|
2
|
+
import ButtonView from "@ckeditor/ckeditor5-ui/src/button/buttonview";
|
|
3
|
+
// import aoteman from "@ckeditor/ckeditor5-basic-styles/theme/icons/bold.svg";
|
|
4
|
+
// import aoteman from '../../assets/image/2.jpg'
|
|
5
|
+
|
|
6
|
+
// console.log(aoteman.replace('/',''));
|
|
7
|
+
export default class BoldToolbarUI extends Plugin {
|
|
8
|
+
init() {
|
|
9
|
+
this._createToolbarButton();
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
_createToolbarButton() {
|
|
13
|
+
const editor = this.editor;
|
|
14
|
+
const command = editor.commands.get('fileUpload');
|
|
15
|
+
editor.ui.componentFactory.add('MyFileUpload', (locale) => {
|
|
16
|
+
const view = new ButtonView(locale);
|
|
17
|
+
view.set({
|
|
18
|
+
label: '上传附件',
|
|
19
|
+
tooltip: true,
|
|
20
|
+
withText: true, // 在按钮上展示 label
|
|
21
|
+
// icon:`<svg t="1674962541538" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="30473" width="14" height="14"><path d="M81.92 432.64L0 732.672V156.672C0 126.976 24.064 102.4 54.272 102.4h256c14.336 0 27.648 5.632 38.4 15.872l110.08 110.08c2.048 2.048 4.608 3.072 7.68 3.072h385.024c29.696 0 54.272 24.064 54.272 54.272v75.776H176.128c-44.544 0-82.944 28.672-94.208 71.168z m931.328-7.168c-9.728-13.824-26.112-20.992-43.008-20.992H175.616c-24.064 0-45.568 16.384-51.712 39.936L12.288 852.992c-7.68 28.672 8.704 58.368 37.888 66.048 4.608 1.024 9.216 2.048 14.336 2.048h794.112c24.064 0 45.568-16.384 51.712-39.936l111.616-409.088c4.608-16.384 1.024-33.28-8.704-46.592z" p-id="30474"></path></svg>`,
|
|
22
|
+
// icon:'<svg t="1674984294045" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" style="width: 20px !important;height: 18px !important;" p-id="30878" ><path d="M94.72 444.928L14.848 737.792V175.616C14.848 146.432 38.4 122.88 67.584 122.88H317.44c13.824 0 27.136 5.632 37.376 15.36l107.52 107.52c2.048 2.048 4.608 3.072 7.68 3.072h375.808c29.184 0 52.736 23.552 52.736 52.736v73.728h-711.68c-43.52 0-80.896 28.16-92.16 69.632zM1003.52 437.76c-9.728-13.312-25.6-20.48-41.984-20.48H186.368c-23.552 0-44.544 15.872-50.688 38.912L26.624 855.04c-7.68 28.16 8.704 56.832 36.864 64.512 4.608 1.024 9.216 2.048 13.824 2.048h775.168c23.552 0 44.544-15.872 50.688-38.912l109.056-399.36c4.608-15.872 1.024-32.768-8.704-45.568z" p-id="30879"></path></svg>',
|
|
23
|
+
});
|
|
24
|
+
|
|
25
|
+
// console.log(Template);
|
|
26
|
+
// 将按钮的状态关联到命令对应值上
|
|
27
|
+
view.bind("isOn", "isEnabled").to(command, "value", "isEnabled");
|
|
28
|
+
// 点击按钮时触发相应命令
|
|
29
|
+
this.listenTo(view, "execute", () => editor.execute('fileUpload'));
|
|
30
|
+
return view;
|
|
31
|
+
|
|
32
|
+
})
|
|
33
|
+
}
|
|
34
|
+
}
|
|
@@ -1,26 +1,26 @@
|
|
|
1
|
-
const formatDate = (fmt) => { //author: meizz
|
|
2
|
-
var o = {
|
|
3
|
-
"M+": this.getMonth() + 1, //月份
|
|
4
|
-
"d+": this.getDate(), //日
|
|
5
|
-
"h+": this.getHours(), //小时
|
|
6
|
-
"m+": this.getMinutes(), //分
|
|
7
|
-
"s+": this.getSeconds(), //秒
|
|
8
|
-
"q+": Math.floor((this.getMonth() + 3) / 3), //季度
|
|
9
|
-
"S": this.getMilliseconds() //毫秒
|
|
10
|
-
};
|
|
11
|
-
if (/(y+)/.test(fmt)) fmt = fmt.replace(RegExp.$1, (this.getFullYear() + "").substr(4 - RegExp.$1.length));
|
|
12
|
-
for (var k in o)
|
|
13
|
-
if (new RegExp("(" + k + ")").test(fmt)) fmt = fmt.replace(RegExp.$1, (RegExp.$1.length == 1) ? (o[k]) : (("00" + o[k]).substr(("" + o[k]).length)));
|
|
14
|
-
return fmt;
|
|
15
|
-
}
|
|
16
|
-
function forMatTime(value){
|
|
17
|
-
let startTime = ''
|
|
18
|
-
let currentTime = new Date(), year = currentTime.getFullYear(),
|
|
19
|
-
month = currentTime.getMonth() + 1 < 10 ? '0' + (currentTime.getMonth() + 1) : currentTime.getMonth() + 1,
|
|
20
|
-
day = currentTime.getDate() < 10 ? '0' + currentTime.getDate() : currentTime.getDate();
|
|
21
|
-
startTime = year + "-" + month + "-" + day +' ' + value;
|
|
22
|
-
return new Date(startTime)
|
|
23
|
-
}
|
|
24
|
-
export { formatDate,forMatTime };
|
|
25
|
-
|
|
1
|
+
const formatDate = (fmt) => { //author: meizz
|
|
2
|
+
var o = {
|
|
3
|
+
"M+": this.getMonth() + 1, //月份
|
|
4
|
+
"d+": this.getDate(), //日
|
|
5
|
+
"h+": this.getHours(), //小时
|
|
6
|
+
"m+": this.getMinutes(), //分
|
|
7
|
+
"s+": this.getSeconds(), //秒
|
|
8
|
+
"q+": Math.floor((this.getMonth() + 3) / 3), //季度
|
|
9
|
+
"S": this.getMilliseconds() //毫秒
|
|
10
|
+
};
|
|
11
|
+
if (/(y+)/.test(fmt)) fmt = fmt.replace(RegExp.$1, (this.getFullYear() + "").substr(4 - RegExp.$1.length));
|
|
12
|
+
for (var k in o)
|
|
13
|
+
if (new RegExp("(" + k + ")").test(fmt)) fmt = fmt.replace(RegExp.$1, (RegExp.$1.length == 1) ? (o[k]) : (("00" + o[k]).substr(("" + o[k]).length)));
|
|
14
|
+
return fmt;
|
|
15
|
+
}
|
|
16
|
+
function forMatTime(value){
|
|
17
|
+
let startTime = ''
|
|
18
|
+
let currentTime = new Date(), year = currentTime.getFullYear(),
|
|
19
|
+
month = currentTime.getMonth() + 1 < 10 ? '0' + (currentTime.getMonth() + 1) : currentTime.getMonth() + 1,
|
|
20
|
+
day = currentTime.getDate() < 10 ? '0' + currentTime.getDate() : currentTime.getDate();
|
|
21
|
+
startTime = year + "-" + month + "-" + day +' ' + value;
|
|
22
|
+
return new Date(startTime)
|
|
23
|
+
}
|
|
24
|
+
export { formatDate,forMatTime };
|
|
25
|
+
|
|
26
26
|
// new Date("2019-12-14T00:09:16.000+0000").Format("yyyy-MM-dd hh:mm:ss")
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import {formatDate} from './format_date';
|
|
2
|
-
|
|
3
|
-
let utils = {
|
|
4
|
-
formatDate
|
|
5
|
-
}
|
|
6
|
-
|
|
1
|
+
import {formatDate} from './format_date';
|
|
2
|
+
|
|
3
|
+
let utils = {
|
|
4
|
+
formatDate
|
|
5
|
+
}
|
|
6
|
+
|
|
7
7
|
export { utils }
|
|
@@ -1,29 +1,29 @@
|
|
|
1
|
-
//生成从minNum到maxNum-1的随机数
|
|
2
|
-
function randomNum(minNum,maxNum){
|
|
3
|
-
switch(arguments.length){
|
|
4
|
-
case 1:
|
|
5
|
-
return parseInt(Math.random()*minNum+1,10)-1;
|
|
6
|
-
case 2:
|
|
7
|
-
return parseInt(Math.random()*(maxNum-minNum+1)+minNum,10)-1;
|
|
8
|
-
default:
|
|
9
|
-
return 0;
|
|
10
|
-
}
|
|
11
|
-
}
|
|
12
|
-
function uniqueData(tempArr) {
|
|
13
|
-
let result = [];
|
|
14
|
-
let obj = {};
|
|
15
|
-
if (!tempArr){
|
|
16
|
-
return []
|
|
17
|
-
}
|
|
18
|
-
for (let i = 0; i < tempArr.length; i++) {
|
|
19
|
-
if (!obj[tempArr[i].value]) {
|
|
20
|
-
result.push(tempArr[i]);
|
|
21
|
-
obj[tempArr[i].value] = true;
|
|
22
|
-
}
|
|
23
|
-
}
|
|
24
|
-
return result;
|
|
25
|
-
}
|
|
26
|
-
export {
|
|
27
|
-
randomNum,
|
|
28
|
-
uniqueData
|
|
29
|
-
}
|
|
1
|
+
//生成从minNum到maxNum-1的随机数
|
|
2
|
+
function randomNum(minNum,maxNum){
|
|
3
|
+
switch(arguments.length){
|
|
4
|
+
case 1:
|
|
5
|
+
return parseInt(Math.random()*minNum+1,10)-1;
|
|
6
|
+
case 2:
|
|
7
|
+
return parseInt(Math.random()*(maxNum-minNum+1)+minNum,10)-1;
|
|
8
|
+
default:
|
|
9
|
+
return 0;
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
function uniqueData(tempArr) {
|
|
13
|
+
let result = [];
|
|
14
|
+
let obj = {};
|
|
15
|
+
if (!tempArr){
|
|
16
|
+
return []
|
|
17
|
+
}
|
|
18
|
+
for (let i = 0; i < tempArr.length; i++) {
|
|
19
|
+
if (!obj[tempArr[i].value]) {
|
|
20
|
+
result.push(tempArr[i]);
|
|
21
|
+
obj[tempArr[i].value] = true;
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
return result;
|
|
25
|
+
}
|
|
26
|
+
export {
|
|
27
|
+
randomNum,
|
|
28
|
+
uniqueData
|
|
29
|
+
}
|
|
@@ -1,120 +1,120 @@
|
|
|
1
|
-
<template>
|
|
2
|
-
<div id="voice-component">
|
|
3
|
-
<div id="voice-component-container">
|
|
4
|
-
<div id="voice-component-c">
|
|
5
|
-
<div class="voice-btn">
|
|
6
|
-
<i class="iconfont arsenalchess-pawn-solid"></i>
|
|
7
|
-
</div>
|
|
8
|
-
</div>
|
|
9
|
-
<div class="close-voice" @click="closeVoice">
|
|
10
|
-
<div class="voice-style">
|
|
11
|
-
<i class="arsenal_icon arsenalcuo1"></i>
|
|
12
|
-
</div>
|
|
13
|
-
</div>
|
|
14
|
-
<div class="voice-tip">
|
|
15
|
-
<slot name="voiceTip"></slot>
|
|
16
|
-
</div>
|
|
17
|
-
</div>
|
|
18
|
-
|
|
19
|
-
</div>
|
|
20
|
-
</template>
|
|
21
|
-
|
|
22
|
-
<script>
|
|
23
|
-
export default {
|
|
24
|
-
name: "voice_component",
|
|
25
|
-
data(){
|
|
26
|
-
return{
|
|
27
|
-
|
|
28
|
-
}
|
|
29
|
-
},
|
|
30
|
-
methods:{
|
|
31
|
-
closeVoice(){
|
|
32
|
-
this.$emit('closeVoice')
|
|
33
|
-
}
|
|
34
|
-
}
|
|
35
|
-
}
|
|
36
|
-
</script>
|
|
37
|
-
|
|
38
|
-
<style scoped lang="less">
|
|
39
|
-
#voice-component{
|
|
40
|
-
position: fixed;
|
|
41
|
-
bottom: 0;
|
|
42
|
-
width: 100%;
|
|
43
|
-
z-index: 9999;
|
|
44
|
-
left: 0;
|
|
45
|
-
#voice-component-container{
|
|
46
|
-
position: relative;
|
|
47
|
-
/* .half-top-ovals{
|
|
48
|
-
width: 130%;
|
|
49
|
-
position: relative;
|
|
50
|
-
left: -15%;
|
|
51
|
-
height: 80px;
|
|
52
|
-
padding-bottom: 40px;
|
|
53
|
-
padding-right: 20px;
|
|
54
|
-
padding-left: 20px;
|
|
55
|
-
!* width: 200px;*!
|
|
56
|
-
background: lightcoral;
|
|
57
|
-
border-radius: 50% 50% 0 0;
|
|
58
|
-
}*/
|
|
59
|
-
#voice-component-c{
|
|
60
|
-
height: 200px;
|
|
61
|
-
width: 130%;
|
|
62
|
-
position: relative;
|
|
63
|
-
left: -15%;
|
|
64
|
-
bottom: -80px;
|
|
65
|
-
background: linear-gradient(180deg, #EEF1F7, #FFFFFF);
|
|
66
|
-
border: 2px solid white;
|
|
67
|
-
border-radius: 100% 100% 0 0;
|
|
68
|
-
border-bottom: none;
|
|
69
|
-
display: flex;
|
|
70
|
-
align-items: center;
|
|
71
|
-
justify-content: center;
|
|
72
|
-
.voice-btn{
|
|
73
|
-
display: flex;
|
|
74
|
-
align-items: center;
|
|
75
|
-
justify-content: center;
|
|
76
|
-
position: absolute;
|
|
77
|
-
top: 50px;
|
|
78
|
-
i{
|
|
79
|
-
color: #366aff;
|
|
80
|
-
font-size: 30px;
|
|
81
|
-
}
|
|
82
|
-
}
|
|
83
|
-
}
|
|
84
|
-
.voice-tip{
|
|
85
|
-
width: 100%;
|
|
86
|
-
position: absolute;
|
|
87
|
-
top: -40px;
|
|
88
|
-
display: flex;
|
|
89
|
-
align-items: center;
|
|
90
|
-
justify-content: center;
|
|
91
|
-
color: #FFFFFF;
|
|
92
|
-
font-size: 13px;
|
|
93
|
-
}
|
|
94
|
-
.close-voice{
|
|
95
|
-
width: 100%;
|
|
96
|
-
position: absolute;
|
|
97
|
-
top: -35px;
|
|
98
|
-
display: flex;
|
|
99
|
-
align-items: center;
|
|
100
|
-
justify-content: center;
|
|
101
|
-
.voice-style{
|
|
102
|
-
width: 60px;
|
|
103
|
-
height: 60px;
|
|
104
|
-
background: #EEF1F7;
|
|
105
|
-
border-radius: 50%;
|
|
106
|
-
display: flex;
|
|
107
|
-
align-items: center;
|
|
108
|
-
justify-content: center;
|
|
109
|
-
transition: all 0.3s;
|
|
110
|
-
i{
|
|
111
|
-
font-size: 24px;
|
|
112
|
-
color: #999999;
|
|
113
|
-
transition: all 0.3s;
|
|
114
|
-
}
|
|
115
|
-
}
|
|
116
|
-
}
|
|
117
|
-
}
|
|
118
|
-
|
|
119
|
-
}
|
|
1
|
+
<template>
|
|
2
|
+
<div id="voice-component">
|
|
3
|
+
<div id="voice-component-container">
|
|
4
|
+
<div id="voice-component-c">
|
|
5
|
+
<div class="voice-btn">
|
|
6
|
+
<i class="iconfont arsenalchess-pawn-solid"></i>
|
|
7
|
+
</div>
|
|
8
|
+
</div>
|
|
9
|
+
<div class="close-voice" @click="closeVoice">
|
|
10
|
+
<div class="voice-style">
|
|
11
|
+
<i class="arsenal_icon arsenalcuo1"></i>
|
|
12
|
+
</div>
|
|
13
|
+
</div>
|
|
14
|
+
<div class="voice-tip">
|
|
15
|
+
<slot name="voiceTip"></slot>
|
|
16
|
+
</div>
|
|
17
|
+
</div>
|
|
18
|
+
|
|
19
|
+
</div>
|
|
20
|
+
</template>
|
|
21
|
+
|
|
22
|
+
<script>
|
|
23
|
+
export default {
|
|
24
|
+
name: "voice_component",
|
|
25
|
+
data(){
|
|
26
|
+
return{
|
|
27
|
+
|
|
28
|
+
}
|
|
29
|
+
},
|
|
30
|
+
methods:{
|
|
31
|
+
closeVoice(){
|
|
32
|
+
this.$emit('closeVoice')
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
</script>
|
|
37
|
+
|
|
38
|
+
<style scoped lang="less">
|
|
39
|
+
#voice-component{
|
|
40
|
+
position: fixed;
|
|
41
|
+
bottom: 0;
|
|
42
|
+
width: 100%;
|
|
43
|
+
z-index: 9999;
|
|
44
|
+
left: 0;
|
|
45
|
+
#voice-component-container{
|
|
46
|
+
position: relative;
|
|
47
|
+
/* .half-top-ovals{
|
|
48
|
+
width: 130%;
|
|
49
|
+
position: relative;
|
|
50
|
+
left: -15%;
|
|
51
|
+
height: 80px;
|
|
52
|
+
padding-bottom: 40px;
|
|
53
|
+
padding-right: 20px;
|
|
54
|
+
padding-left: 20px;
|
|
55
|
+
!* width: 200px;*!
|
|
56
|
+
background: lightcoral;
|
|
57
|
+
border-radius: 50% 50% 0 0;
|
|
58
|
+
}*/
|
|
59
|
+
#voice-component-c{
|
|
60
|
+
height: 200px;
|
|
61
|
+
width: 130%;
|
|
62
|
+
position: relative;
|
|
63
|
+
left: -15%;
|
|
64
|
+
bottom: -80px;
|
|
65
|
+
background: linear-gradient(180deg, #EEF1F7, #FFFFFF);
|
|
66
|
+
border: 2px solid white;
|
|
67
|
+
border-radius: 100% 100% 0 0;
|
|
68
|
+
border-bottom: none;
|
|
69
|
+
display: flex;
|
|
70
|
+
align-items: center;
|
|
71
|
+
justify-content: center;
|
|
72
|
+
.voice-btn{
|
|
73
|
+
display: flex;
|
|
74
|
+
align-items: center;
|
|
75
|
+
justify-content: center;
|
|
76
|
+
position: absolute;
|
|
77
|
+
top: 50px;
|
|
78
|
+
i{
|
|
79
|
+
color: #366aff;
|
|
80
|
+
font-size: 30px;
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
.voice-tip{
|
|
85
|
+
width: 100%;
|
|
86
|
+
position: absolute;
|
|
87
|
+
top: -40px;
|
|
88
|
+
display: flex;
|
|
89
|
+
align-items: center;
|
|
90
|
+
justify-content: center;
|
|
91
|
+
color: #FFFFFF;
|
|
92
|
+
font-size: 13px;
|
|
93
|
+
}
|
|
94
|
+
.close-voice{
|
|
95
|
+
width: 100%;
|
|
96
|
+
position: absolute;
|
|
97
|
+
top: -35px;
|
|
98
|
+
display: flex;
|
|
99
|
+
align-items: center;
|
|
100
|
+
justify-content: center;
|
|
101
|
+
.voice-style{
|
|
102
|
+
width: 60px;
|
|
103
|
+
height: 60px;
|
|
104
|
+
background: #EEF1F7;
|
|
105
|
+
border-radius: 50%;
|
|
106
|
+
display: flex;
|
|
107
|
+
align-items: center;
|
|
108
|
+
justify-content: center;
|
|
109
|
+
transition: all 0.3s;
|
|
110
|
+
i{
|
|
111
|
+
font-size: 24px;
|
|
112
|
+
color: #999999;
|
|
113
|
+
transition: all 0.3s;
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
}
|
|
120
120
|
</style>
|
package/src/main.js
CHANGED
|
@@ -1,60 +1,60 @@
|
|
|
1
|
-
import Vue from 'vue'
|
|
2
|
-
import App from './App.vue'
|
|
3
|
-
import VueResource from 'vue-resource'
|
|
4
|
-
import ElementUI from 'element-ui';
|
|
5
|
-
import { requestUrl } from './api/index';
|
|
6
|
-
import { utils } from '../src/components/utils/index';
|
|
7
|
-
// /*import 'element-ui/lib/theme-chalk/index.css';*/
|
|
8
|
-
import './assets/theme/index.css'
|
|
9
|
-
import 'video.js/dist/video-js.css'
|
|
10
|
-
import Vant from 'vant';
|
|
11
|
-
import 'vant/lib/index.css';
|
|
12
|
-
|
|
13
|
-
import CKEditor from '@ckeditor/ckeditor5-vue';
|
|
14
|
-
|
|
15
|
-
Vue.use(CKEditor);
|
|
16
|
-
/*import VConsole from 'vconsole'
|
|
17
|
-
const vConsole = new VConsole();
|
|
18
|
-
Vue.use(vConsole);*/
|
|
19
|
-
import $ from 'jquery'
|
|
20
|
-
Vue.prototype._$ = $;
|
|
21
|
-
Vue.use(Vant);
|
|
22
|
-
Date.prototype.Format = function (fmt) { //author: meizz
|
|
23
|
-
var o = {
|
|
24
|
-
"M+": this.getMonth() + 1, //月份
|
|
25
|
-
"d+": this.getDate(), //日
|
|
26
|
-
"h+": this.getHours(), //小时
|
|
27
|
-
"m+": this.getMinutes(), //分
|
|
28
|
-
"s+": this.getSeconds(), //秒
|
|
29
|
-
"q+": Math.floor((this.getMonth() + 3) / 3), //季度
|
|
30
|
-
"S": this.getMilliseconds() //毫秒
|
|
31
|
-
};
|
|
32
|
-
if (/(y+)/.test(fmt)) fmt = fmt.replace(RegExp.$1, (this.getFullYear() + "").substr(4 - RegExp.$1.length));
|
|
33
|
-
for (var k in o)
|
|
34
|
-
if (new RegExp("(" + k + ")").test(fmt)) fmt = fmt.replace(RegExp.$1, (RegExp.$1.length == 1) ? (o[k]) : (("00" + o[k]).substr(("" + o[k]).length)));
|
|
35
|
-
return fmt;
|
|
36
|
-
}
|
|
37
|
-
Vue.config.productionTip = false
|
|
38
|
-
Vue.use(VueResource)
|
|
39
|
-
Vue.use(ElementUI)
|
|
40
|
-
//导入图片预览viewer组件以及css
|
|
41
|
-
import Viewer from 'v-viewer'
|
|
42
|
-
import 'viewerjs/dist/viewer.css'
|
|
43
|
-
Vue.use(Viewer, {
|
|
44
|
-
defaultOptions: {
|
|
45
|
-
zIndex: 9999,//解决图片放大的层级问题
|
|
46
|
-
}
|
|
47
|
-
});
|
|
48
|
-
// setDeafaults配置
|
|
49
|
-
Viewer.setDefaults({
|
|
50
|
-
Options: { "inline": true, "button": true, "navbar": true, "title": true, "toolbar": true, "tooltip": true, "movable": true, "zoomable": true, "rotatable": true, "scalable": true, "transition": true, "fullscreen": true, "keyboard": true, "url": "data-source" }
|
|
51
|
-
})
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
Vue.prototype.requestUrl = requestUrl;
|
|
56
|
-
Vue.prototype.utils = utils;
|
|
57
|
-
|
|
58
|
-
new Vue({
|
|
59
|
-
render: h => h(App),
|
|
60
|
-
}).$mount('#app')
|
|
1
|
+
import Vue from 'vue'
|
|
2
|
+
import App from './App.vue'
|
|
3
|
+
import VueResource from 'vue-resource'
|
|
4
|
+
import ElementUI from 'element-ui';
|
|
5
|
+
import { requestUrl } from './api/index';
|
|
6
|
+
import { utils } from '../src/components/utils/index';
|
|
7
|
+
// /*import 'element-ui/lib/theme-chalk/index.css';*/
|
|
8
|
+
import './assets/theme/index.css'
|
|
9
|
+
import 'video.js/dist/video-js.css'
|
|
10
|
+
import Vant from 'vant';
|
|
11
|
+
import 'vant/lib/index.css';
|
|
12
|
+
|
|
13
|
+
import CKEditor from '@ckeditor/ckeditor5-vue';
|
|
14
|
+
|
|
15
|
+
Vue.use(CKEditor);
|
|
16
|
+
/*import VConsole from 'vconsole'
|
|
17
|
+
const vConsole = new VConsole();
|
|
18
|
+
Vue.use(vConsole);*/
|
|
19
|
+
import $ from 'jquery'
|
|
20
|
+
Vue.prototype._$ = $;
|
|
21
|
+
Vue.use(Vant);
|
|
22
|
+
Date.prototype.Format = function (fmt) { //author: meizz
|
|
23
|
+
var o = {
|
|
24
|
+
"M+": this.getMonth() + 1, //月份
|
|
25
|
+
"d+": this.getDate(), //日
|
|
26
|
+
"h+": this.getHours(), //小时
|
|
27
|
+
"m+": this.getMinutes(), //分
|
|
28
|
+
"s+": this.getSeconds(), //秒
|
|
29
|
+
"q+": Math.floor((this.getMonth() + 3) / 3), //季度
|
|
30
|
+
"S": this.getMilliseconds() //毫秒
|
|
31
|
+
};
|
|
32
|
+
if (/(y+)/.test(fmt)) fmt = fmt.replace(RegExp.$1, (this.getFullYear() + "").substr(4 - RegExp.$1.length));
|
|
33
|
+
for (var k in o)
|
|
34
|
+
if (new RegExp("(" + k + ")").test(fmt)) fmt = fmt.replace(RegExp.$1, (RegExp.$1.length == 1) ? (o[k]) : (("00" + o[k]).substr(("" + o[k]).length)));
|
|
35
|
+
return fmt;
|
|
36
|
+
}
|
|
37
|
+
Vue.config.productionTip = false
|
|
38
|
+
Vue.use(VueResource)
|
|
39
|
+
Vue.use(ElementUI)
|
|
40
|
+
//导入图片预览viewer组件以及css
|
|
41
|
+
import Viewer from 'v-viewer'
|
|
42
|
+
import 'viewerjs/dist/viewer.css'
|
|
43
|
+
Vue.use(Viewer, {
|
|
44
|
+
defaultOptions: {
|
|
45
|
+
zIndex: 9999,//解决图片放大的层级问题
|
|
46
|
+
}
|
|
47
|
+
});
|
|
48
|
+
// setDeafaults配置
|
|
49
|
+
Viewer.setDefaults({
|
|
50
|
+
Options: { "inline": true, "button": true, "navbar": true, "title": true, "toolbar": true, "tooltip": true, "movable": true, "zoomable": true, "rotatable": true, "scalable": true, "transition": true, "fullscreen": true, "keyboard": true, "url": "data-source" }
|
|
51
|
+
})
|
|
52
|
+
|
|
53
|
+
|
|
54
|
+
|
|
55
|
+
Vue.prototype.requestUrl = requestUrl;
|
|
56
|
+
Vue.prototype.utils = utils;
|
|
57
|
+
|
|
58
|
+
new Vue({
|
|
59
|
+
render: h => h(App),
|
|
60
|
+
}).$mount('#app')
|