管骁翰_修改

main
guanxiaohan 11 months ago
parent d0ffd43a1a
commit 1c0940dd71
  1. 245
      pages/index/detail.vue
  2. 4
      pages/investigation/task.vue
  3. 91
      pages/knowledge/index.vue

@ -25,59 +25,103 @@
<view class="stepBox">
<view class="step" v-for="(item, index) in tablist" :key="index">
<view class="stepItem">
<view :class="{
<view
:class="{
stepCircleActive: index <= active,
stepCircle: index > active,
}">{{ index + 1 }}
}"
>{{ index + 1 }}
</view>
<view class="stepText" :style="{ color: index <= active ? '#000000' : '#bcc3cd' }">{{ item.title }}
<view
class="stepText"
:style="{ color: index <= active ? '#000000' : '#bcc3cd' }"
>{{ item.title }}
</view>
</view>
<view v-if="index !== 3" class="circles">
<view :class="{ circleActive: index < active, circle: index >= active }" v-for="i in 8" :key="i">
<view
:class="{ circleActive: index < active, circle: index >= active }"
v-for="i in 8"
:key="i"
>
</view>
</view>
</view>
</view>
<scroll-view scroll-y="true" :scroll-top="scrollTop" :style="{
<scroll-view
scroll-y="true"
:scroll-top="scrollTop"
:style="{
height: isExpanded ? 'calc(100% - 350rpx)' : 'calc(100% - 250rpx)',
}" class="chatlist" id="scrollView" ref="scrollView" @click="clickContent">
<view :class="['bar', item.answerId == '0' ? 'currAnswer' : '']" v-for="(item, i) in msgList"
:key="item.id">
}"
class="chatlist"
id="scrollView"
ref="scrollView"
@click="clickContent"
>
<view
:class="['bar', item.answerId == '0' ? 'currAnswer' : '']"
v-for="(item, i) in msgList"
:key="item.id"
>
<!-- <image
:src="
item.answerId == '0' ? '/static/self.png' : '/static/left_user.png'
"
class="img"
/> -->
<image :src="
<image
:src="
item.answerId == '0'
? 'data:image/jpeg;base64,iVBORw0KGgoAAAANSUhEUgAAACYAAAAmCAYAAACoPemuAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyZpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMDY3IDc5LjE1Nzc0NywgMjAxNS8wMy8zMC0yMzo0MDo0MiAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTUgKFdpbmRvd3MpIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOkYwQjdBNUI1OTNGMzExRTk5OEMyRUJEREM0NTA0NzFEIiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOkYwQjdBNUI2OTNGMzExRTk5OEMyRUJEREM0NTA0NzFEIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6RjBCN0E1QjM5M0YzMTFFOTk4QzJFQkREQzQ1MDQ3MUQiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6RjBCN0E1QjQ5M0YzMTFFOTk4QzJFQkREQzQ1MDQ3MUQiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz6ceP8WAAAFRUlEQVR42sxYa0xbVRzvvb29bS9taQvtYBQ63kxhsBlw6mbwQZyabE4H6geTZfOR+MFPiyZO4jRxiYl+UOOXOdTERxyLcxs+trkFxbGxwZgb22CAPDoKpQ8ofVFa7q3/g7ekK33ce9st/pNfbnLPOf/zyzn/839hoVBIJEBKAHWAdYACQA5Azo7NAywAE+Aq4CJgmO8GGA9iFGA7YBugiOc+I4BjgJ8AvnQREwOaAC8DMkWpyRzgIKAVQKdCDF3TB4C1ovRKP2Ave90xBU+weDPgmztASsTq/JbdgxexJwEfATJEd04odo+nuF7lw+wCXHR3hAHsAXQkImZkr4/iorHvHxv13cl+fdf1KbXPHxSH/5OEmKkqznY3PV5urV9f4MKwpKrQS30JMB6LGFL8dTKbYpiQ6LeuUfWP7YP6ayN25ZI9YFho59OV5qK8TL911idpaevL884HCTSWp1P4n60vs+54pMwhlxJMkgexM/xaI6+riYuh/3B6IPu9lnPFYVLLRvlA4WzXtSnV5mqDi4ogYLZ5ZJ8d7i34+PvuPA4P4vlo46dYP5VU6u7JdeMx7iZHmxEkJWIGkZKRxAofdV9FjpuD+t1hMwoT287VeZYY1AsNdUbbbdcbCmG79p8oz9crF97/6rzxltUtjxwvK9B4tmwsdHJQn8lyWbaxVj5hxulZEL/24akytBQdXiBIwyH+d4oSAmdoOoRRMoImxHgI4fXnasw1pXofR/UofDUhAy3lG/vUCikNRi4FAxcnm4sehlYlW+ShHnEpRcRqhTifrZuKrRaHj7wxZlcgktHuEMgHy41ar05NBQpWqQI81dciYpVCiP15eUJjc/rI0nyNt7Io24PjWAg9CoZl6JjzS64M2ZRZmbKgAPVViFihEGKrwT9N2j2yG6MOJSDuvNxshVuA+jXoVeqFENt4b64rnfOiRI9zDT/RAt7ckSGXJMypYHwRzRMS4AUHaoVcwry6rXoi0RwYN6N5QvTjXFPdWPJiQ4UdQpEtZt4E/9G4QNU+RMyaSs7y7q4HTcg1RLsK9D8FtVZEbCwVYl5Id7Co2IlcBgpTKagdQ+6iD9DAZ5VnPoh3XjWregYsio7LE9rP9zw2+PeQjfqk9ZIR2d0T969xvtD889oN5XoXBG/PQ+vyXDxtrQ8R6+Y62zbrIz493Lu6vfdWFoqP4f+nLoyraTihhQCNO91+4gTka6ZplxzhaMfwKikpZurX5zveaNwwqdNQXMJTN1I+xAbOhHK6ezyz8Z22ypMXxnSRpJYMwumT7KgvtZcYNN5N1YY564yPjBxHhNG6pua2yjM948myGMRlKLzB8UQz4dqUzQfOFkemz5HSUGt0nr8+pRyemM34/eKYZvfWKgsKUSvsEYJ+84HO4nN9k4oE2x2PzMeOsMVoTIHrM9BMfGM+9tdwloJ1tih9bj1zM5uJM3+RZjDIaA1xVLlYLsvEkC9ribexFDLTRCd69opZq5CTS8SMOSr/L50juoR1Q/wXezDsV4mIn4fYenJF3v/l3i2DR/4Y0rZfMmkGTDMZ4UIj8hR6+i1KJUUuznkWCMuMVxqtA9JtBrJf7+Yag7Px0fJYjvcmy0F4+TZl90igyCCnoSKanvGSyLgpmYSGrJVBX5PFJSMIPAS5WDBHSwUgEwkYdMoA2J2g8u1/VfDG2hxN2McuuBuk9kWTStS7+BXwZioBnkugBrzF7iWoDbUfUJFmUgOAtxO1ofg07l4BqFIkhPzUF+lo3N2WGwKeYVudfOuEUbbVeRTlAOnuwSZrDlMRtpNyc/hfAQYAFFwdv9Iba+4AAAAASUVORK5CYII='
: '/static/left_user.png'
" class="img" />
"
class="img"
/>
<view class="content">
<view style="width: 100%; overflow: hidden;">
<zeroMarkdownView :markdown="item.data" />
<zeroMarkdownView :markdown="item.data || ''" />
</view>
<!-- <ua-markdown :source="mdvalue" /> -->
<view class="btnBox">
<view class="btn" @click="handleBtn(text)" v-for="(text, index) in item.options" :key="index">
{{ text }}</view>
<view
class="btn"
@click="handleBtn(text)"
v-for="(text, index) in item.options"
:key="index"
>{{ text }}</view
>
</view>
<view v-if="item.answerOptions && item.answerOptions.length > 0 && item.optionType == 1"
style="display: flex; flex-wrap: wrap;">
<u-checkbox-group v-model="item.checkboxValue1" placement="column" iconPlacement="right"
style="width: 100%; padding: 0 15px; box-sizing: border-box">
<u-checkbox :customStyle="{ marginBottom: '8px' }"
v-for="(item, index) in item.answerOptions" :key="index" :label="item" :name="item"
style="background-color: #ededed;padding: 8px;">
<view
v-if="item.answerOptions && item.answerOptions.length > 0 && item.optionType == 1"
style="display: flex; flex-wrap: wrap;"
:class="item.answerOptions.length > 1 ? '' : 'btnBox'"
>
<u-checkbox-group
v-model="item.checkboxValue1"
placement="column"
iconPlacement="right"
style="width: 100%; padding: 0 15px; box-sizing: border-box"
>
<u-checkbox
:customStyle="{ marginBottom: '8px' }"
v-for="(item, index) in item.answerOptions"
:key="index"
:label="item"
:name="item"
style="background-color: #ededed;padding: 8px;"
>
</u-checkbox>
</u-checkbox-group>
</view>
<view v-if="item.answerOptions && item.answerOptions.length > 0 && item.optionType == 0"
style="display: flex; flex-wrap: wrap;">
<view
v-if="item.answerOptions && item.answerOptions.length > 0 && item.optionType == 0"
:style="item.answerOptions.length > 1 ? 'display: flex; flex-wrap: wrap;' : ''"
:class="item.answerOptions.length > 1 ? '' : 'btnBox'"
>
<view v-for="(item, index) in item.answerOptions" :key="index"
style="padding: 8px 8px;margin:0 0 8px 8px;background-color: #ededed;"
:style="item.answerOptions.length > 1 ? 'padding: 8px 8px;margin:0 0 8px 8px;background-color: #ededed;' : ''"
:class="item.answerOptions.length > 1 ? '' : 'btn'"
@click="handleGroup(item)">
{{ item }}
</view>
@ -97,9 +141,12 @@
>
</u-radio>
</u-radio-group> -->
</view>
<view class="btnBox"
v-if="item.answerOptions && item.answerOptions.length > 0 && item.optionType == 1">
<view
class="btnBox"
v-if="item.answerOptions && item.answerOptions.length > 0 && item.optionType == 1"
>
<view class="btn" @click="handleGroup(item)">确认</view>
<view class="btn" @click="handleGroup2(i)">清空</view>
</view>
@ -111,12 +158,27 @@
<view class="bounce-dot"></view>
</view>
</scroll-view>
<view class="input-wrapper" :class="{ 'input-wrapper-expanded': isExpanded }">
<view
class="input-wrapper"
:class="{ 'input-wrapper-expanded': isExpanded }"
>
<view class="topContent">
<input class="uni-input" placeholder="请输入内容" :value="inputValue" @confirm="handleSend"
@input="onKeyInput" />
<uni-icons class="uni-icon" type="plus" size="30" @click="handlePlus"></uni-icons>
<input
class="uni-input"
:placeholder="loading ? '请等待回复结束' : '请输入内容'"
:value="inputValue"
@confirm="handleSend"
@input="onKeyInput"
:disabled="loading"
/>
<uni-icons
class="uni-icon"
type="plus"
size="30"
@click="handlePlus"
:disabled="loading"
></uni-icons>
</view>
<view v-if="isExpanded" class="expanded">
<view @click="chooseImage" class="expandedItem">
@ -133,22 +195,20 @@
</template>
<script>
// import AbortController from "abort-controller/dist/abort-controller";
import TopTitle from "../../components/top-title.vue";
// import headerNavBar from '../../components/headerNavBar/headerNavBar.vue'
import zeroMarkdownView from "../../components/zeroMarkdownView/zeroMarkdownView.vue";
// import {
// EventSourcePolyfill
// } from 'event-source-polyfill';
import $ from "../../common/globalJs/globalJs.js";
import {
fetchEventSource
} from "@microsoft/fetch-event-source";
// import {
// baseUrl
// } from '../../utils/config.js';
export default {
// import AbortController from "abort-controller/dist/abort-controller";
import TopTitle from "../../components/top-title.vue";
// import headerNavBar from '../../components/headerNavBar/headerNavBar.vue'
import zeroMarkdownView from "../../components/zeroMarkdownView/zeroMarkdownView.vue";
// import {
// EventSourcePolyfill
// } from 'event-source-polyfill';
import $ from "../../common/globalJs/globalJs.js";
import { fetchEventSource } from "@microsoft/fetch-event-source";
// import {
// baseUrl
// } from '../../utils/config.js';
export default {
components: {
TopTitle,
zeroMarkdownView,
@ -156,7 +216,8 @@
data() {
return {
active: 0,
tablist: [{
tablist: [
{
title: "信息确认",
},
{
@ -195,6 +256,7 @@
// params.userId = "admin1";
this.params = params;
let str = "";
this.getChatHistory()
if (params.roadName) {
str += "路段名:" + params.roadName;
this.title = params.roadName + "智能排查";
@ -278,12 +340,14 @@
this.active = this.tabkey - 1 > 0 ? this.tabkey - 1 : 0;
}
if (this.msgList.length == 0) {
this.msgList = [{
this.msgList = [
{
answerId,
data: res.result.data.content,
optionType: res.result.data?.optionType,
answerOptions: res.result.data?.answerOptions || [],
}, ];
},
];
} else {
// debugger
//
@ -329,10 +393,49 @@
});
},
async getChatHistory() {
const [err, res] = await uni.request({
// url: 'http://10.16.3.159:8777/api/local_doc_qa/local_doc_chat',
url: $.chatUrl + "/getChatHistory",
dataType: "json",
method: "POST",
// responseType: 'arraybuffer',
headers: {
// 'Accept': 'text/event-stream',
"content-type": "application/json",
},
data: {
userId: 'admin1',
taskId:'RG202408319001'
},
});
console.log('getChatHistory', res)
if(res && res.data && res.data.code == 200) {
const result = res.data.result
let id = 1
result.forEach((item, index) => {
let questionList = {
answerId: '1',
id,
data: item.question
}
let responseList = {
answerId: '0',
id: id + 1,
data: item.response
}
this.msgList.push(questionList)
this.msgList.push(responseList)
id += 2
})
console.log(this.msgList)
}
},
async queryChat(voiceText) {
// console.log(voiceText,"voiceText");
this.loading = true;
console.log({
console.log({
voiceText,
sceneFlag: "",
sessionId: "",
@ -352,7 +455,7 @@
// "history": []
})
let sectionType = "2"
if (this.params.sectionType != 'null') {
if(this.params.sectionType != 'null') {
sectionType = this.params.sectionType
}
const [err, res] = await uni.request({
@ -389,12 +492,8 @@
if (res && res.data && res.data.code == 200) {
// console.log('request success', res.data)
const {
result = {}
} = res.data;
const {
data = {}
} = result;
const { result = {} } = res.data;
const { data = {} } = result;
if (data.tabkey - 1 != this.active) {
this.active = data.tabkey - 1 > 0 ? data.tabkey - 1 : 0;
}
@ -523,6 +622,7 @@
];
this.scrollBottom();
}
console.log('检查msgList', this.msgList)
},
handlePlus() {
@ -548,7 +648,7 @@
uni.chooseImage({
count: 6, //9
sizeType: ["original", "compressed"], //
sourceType: ["album", 'camera'], //
sourceType: ["album",'camera'], //
success: async (res) => {
console.log(res);
if (res.tempFilePaths && res.tempFilePaths.length) {
@ -601,15 +701,15 @@
},
handleGroup2(i) {
this.msgList[i].checkboxValue1 = []
this.$set(this.msgList, i, this.msgList[i])
this.$set(this.msgList,i,this.msgList[i])
},
},
};
};
</script>
<style scoped lang="scss">
.detail {
.detail {
width: 100%;
margin: auto;
height: 100vh;
@ -707,13 +807,16 @@
justify-content: flex-end;
position: absolute;
right: -4px;
bottom: -36px;
bottom: -42px;
.btn {
color: #497cca;
background-color: #d8e3f8;
color: #2663BF;
background-color: rgba(0, 102, 255, 0.1);
display: flex;
padding: 2rpx 20rpx;
justify-content: center;
align-items: center;
// width: 132px;
min-width: 72rpx;
padding: 10rpx;
margin: 10rpx;
border-radius: 4rpx;
}
@ -840,10 +943,9 @@
}
}
}
}
@keyframes bounce {
}
@keyframes bounce {
0%,
80%,
100% {
@ -853,8 +955,5 @@
40% {
transform: scale(1);
}
}
/deep/ ._img{
max-width:220rpx;
}
}
</style>

@ -1249,7 +1249,8 @@
.globalRequest(
"/hiddenDanger/config/getDangerBaseData", {
nuserid: this.$.getData("token"),
sectionCode: this.sectionCode
sectionCode: this.sectionCode,
businessId: this.businessId
},
"GET"
)
@ -1834,6 +1835,7 @@
.globalRequest(
"/hiddenDanger/highDanger/saveManualInvestigation", {
...this.formData,
operator: this.$.getData("token"),
businessId: this.businessId,
extraConfigs: this.extraConfigs,
describe: this.describeArr,

@ -1,6 +1,6 @@
<template>
<view class="detail" @touchmove="handleTouchMove" @touchstart="handleTouchStart">
<scroll-view scroll-y="true" :scroll-top="scrollTop" :style="{
<view class="detail">
<scroll-view @scroll="handleScroll" scroll-y="true" :scroll-top="scrollTop" :style="{
height: isExpanded ? 'calc(100% - 1rpx)' : 'calc(100% - 1rpx)',
}" class="chatlist" :class="{ 'chatlist-wrapper-expanded': isExpanded }" id="scrollView" ref="scrollView"
@click="clickContent">
@ -39,12 +39,14 @@
<view class="icon" v-show="item.answerId != '0' && item.isOver && item.isSuccess">
<uni-icons
:type="item.iconsType == '' ? 'hand-up' : (item.iconsType == 'handUp' ? 'hand-up-filled' : 'hand-up')"
:color="item.iconsType == 'handUp' ? '#FFD131' : ''" size="22"
:color="item.iconsType == 'handUp' ? '#FFD131' : ''"
size="22"
@click="clickIcon('handUp', item.qaId)">
</uni-icons>
<uni-icons
:type="item.iconsType == '' ? 'hand-down' : (item.iconsType == 'handDown' ? 'hand-down-filled' : 'hand-down')"
size="22" @click="clickIcon('handDown', item.qaId)">
size="22"
@click="clickIcon('handDown', item.qaId)">
</uni-icons>
</view>
</view>
@ -54,18 +56,14 @@
<view class="bounce-dot"></view>
<view class="bounce-dot"></view>
</view>
<view class="loading-animation2" v-if="loading">
</view>
</scroll-view>
<view class="con" :class="{ 'con-wrapper-expanded': isExpanded }"></view>
<view class="input-wrapper" :class="{ 'input-wrapper-expanded': isExpanded }">
<view class="topContent">
<input class="uni-input" :placeholder="loading ? '请等待回复结束' : '请输入内容'" :value="inputValue"
@confirm="handleSend" :disabled="loading" @input="onKeyInput" />
<input class="uni-input" :placeholder="loading ? '请等待回复结束' : '请输入内容'" :value="inputValue" @confirm="handleSend" :disabled="loading"
@input="onKeyInput" />
<uni-icons class="uni-icon" type="plus" size="30" @click="handlePlus" color='#cccccc'
:disabled="loading"></uni-icons>
<uni-icons class="uni-icon" type="plus" size="30" @click="handlePlus" color='#cccccc' :disabled="loading"></uni-icons>
</view>
<view v-if="isExpanded" class="expanded">
<view @click="chooseImage" class="expandedItem">
@ -171,13 +169,13 @@
async clickIcon(type, qaId) {
console.log(this.msgList)
this.msgList.forEach(item => {
if (item.qaId == qaId) {
if (item.iconsType == '' || !item.hasOwnProperty('iconsType')) {
if(item.qaId == qaId) {
if(item.iconsType == '' || !item.hasOwnProperty('iconsType')) {
this.iconsType = type
this.$set(item, 'iconsType', type)
} else {
if (item.iconsType == 'handUp') {
if (type == 'handUp') {
if(item.iconsType == 'handUp') {
if(type == 'handUp') {
this.iconsType = ''
this.$set(item, 'iconsType', '')
} else {
@ -185,7 +183,7 @@
this.$set(item, 'iconsType', 'handDown')
}
} else {
if (type == 'handUp') {
if(type == 'handUp') {
this.iconsType = 'handUp'
this.$set(item, 'iconsType', 'handUp')
} else {
@ -199,7 +197,7 @@
const params = {
qaId,
feedbackStatus: this.iconsType == '' ? 0 : (this.iconsType == 'handUp' ? 1 : 2),
feedbackStatus : this.iconsType == '' ? 0 : (this.iconsType == 'handUp' ? 1 : 2),
feedbackInfo: ''
}
// this.$request.globalRequest('/hitap/feadBack', params, 'POST').then(res => {
@ -221,31 +219,44 @@
// duration: 2000
// });
},
//
handleTouchStart(e) {
//
//
this.startX = e.touches[0].clientX;
this.startY = e.touches[0].clientY;
// this.isScrolling = false; //
},
handleTouchMove(e) { //
// this.isHandleScroll = false
let currentX = e.touches[0].clientX;
let currentY = e.touches[0].clientY;
// Y
let moveY = currentY - this.startY;
//
if (moveY < 0) {
handleTouchMove(e) {
//
let moveX = e.touches[0].clientX;
let moveY = e.touches[0].clientY;
//
let deltaX = moveX - this.startX;
let deltaY = moveY - this.startY;
// 5px
if (Math.abs(deltaX) > 5 || Math.abs(deltaY) > 5) {
// this.isScrolling = true; //
this.isHandleScroll = false
//
// deltaY
if (deltaY > 0) {
console.log('用户正在向下滑动');
} else if (deltaY < 0) {
console.log('用户正在向上滑动');
}
// startXstartY便
//
// startXstartYmoveXmoveY
//
}
// startXstartY
},
handleTouchEnd(e) {
//
// startXstartY
//
},
handleScroll(event) {
// event.detail
const scrollTop = event.detail.scrollTop;
@ -271,7 +282,6 @@
// console.log(voiceText,"voiceText");
clearInterval(this.timer)
this.loading = true;
this.scrollTop = Number(this.scrollTop) + 100;
const [err, res] = await uni.request({
// url: 'http://10.16.3.159:8777/api/local_doc_qa/local_doc_chat',
url: this.$.chatUrl + "/chat",
@ -326,7 +336,6 @@
//
handleBtn(text) {
this.handleSend(text);
this.isHandleScroll = true
},
//
onKeyInput(event) {
@ -819,7 +828,6 @@
.titleTwo {
margin: 15rpx 0;
font-size: 28rpx;
line-height: 42rpx;
}
.tipItem {
@ -1034,11 +1042,6 @@
margin: 0 10rpx;
}
.loading-animation2 {
width: 100%;
height: 120rpx;
}
.loading-animation {
display: flex;
justify-content: center;
@ -1106,13 +1109,11 @@
color: #999999 !important;
}
}
.icon {
.icon{
display: flex;
justify-content: flex-end;
margin: 0 15rpx 15rpx 12rpx;
.uni-icons {
.uni-icons{
margin-left: 15rpx;
}
}

Loading…
Cancel
Save