7 changed files with 240 additions and 21 deletions
-
196components/FeedbackModal.vue
-
38pages/customerServicePlatform/csPlatformIndex.vue
-
15pages/customerServicePlatform/historyRecord.vue
-
BINstatic/customer-service-platform/a1.png
-
BINstatic/customer-service-platform/a2.jpg
-
BINstatic/customer-service-platform/fail-icon.png
-
BINstatic/customer-service-platform/success-icon.png
@ -0,0 +1,196 @@ |
|||||
|
<template> |
||||
|
<view> |
||||
|
<view v-if="internalVisible" class="fm-overlay"></view> |
||||
|
|
||||
|
<view v-if="internalVisible" class="fm-wrap"> |
||||
|
<view class="fm-card" :style="{ width: _width }"> |
||||
|
<text class="fm-title">{{ _title }}</text> |
||||
|
|
||||
|
<view class="fm-icon-wrap"> |
||||
|
<image :src="imgSrcComputed" mode="aspectFit" class="fm-icon-img" /> |
||||
|
</view> |
||||
|
|
||||
|
<text class="fm-sub">{{ _subtitle }}</text> |
||||
|
|
||||
|
<view class="fm-btn-wrap"> |
||||
|
<button class="fm-btn" @click="onConfirm">{{ _buttonText }}</button> |
||||
|
</view> |
||||
|
</view> |
||||
|
</view> |
||||
|
</view> |
||||
|
</template> |
||||
|
|
||||
|
<script> |
||||
|
export default { |
||||
|
name: 'FeedbackModal', |
||||
|
props: { |
||||
|
title: { |
||||
|
type: String, |
||||
|
default: '提交成功' |
||||
|
}, |
||||
|
subtitle: { |
||||
|
type: String, |
||||
|
default: '— 感谢您的反馈 —' |
||||
|
}, |
||||
|
buttonText: { |
||||
|
type: String, |
||||
|
default: '确定' |
||||
|
}, |
||||
|
status: { |
||||
|
type: String, |
||||
|
default: 'success' |
||||
|
}, |
||||
|
lockScroll: { |
||||
|
type: Boolean, |
||||
|
default: true |
||||
|
}, |
||||
|
width: { |
||||
|
type: String, |
||||
|
default: '600rpx' |
||||
|
} |
||||
|
}, |
||||
|
data() { |
||||
|
return { |
||||
|
internalVisible: false, |
||||
|
_title: this.title, |
||||
|
_subtitle: this.subtitle, |
||||
|
_buttonText: this.buttonText, |
||||
|
_status: this.status, |
||||
|
_width: this.width, |
||||
|
}; |
||||
|
}, |
||||
|
computed: { |
||||
|
imgSrcComputed() { |
||||
|
return this._status === 'fail' ? |
||||
|
'/static/customer-service-platform/fail-icon.png' : |
||||
|
'/static/customer-service-platform/success-icon.png'; |
||||
|
} |
||||
|
}, |
||||
|
methods: { |
||||
|
show(options = {}) { |
||||
|
if (options.title) this._title = options.title; |
||||
|
if (options.subtitle) this._subtitle = options.subtitle; |
||||
|
if (options.buttonText) this._buttonText = options.buttonText; |
||||
|
if (options.status) this._status = options.status; |
||||
|
if (options.width) this._width = options.width; |
||||
|
if (this.lockScroll) this._lockScroll(); |
||||
|
|
||||
|
this.internalVisible = true; |
||||
|
}, |
||||
|
|
||||
|
hide() { |
||||
|
this.internalVisible = false; |
||||
|
if (this.lockScroll) this._unlockScroll(); |
||||
|
}, |
||||
|
|
||||
|
onConfirm() { |
||||
|
this.hide(); |
||||
|
this.$nextTick(() => { |
||||
|
this.$emit('confirm', { |
||||
|
status: this._status |
||||
|
}); |
||||
|
}); |
||||
|
}, |
||||
|
//整个页面的滚动条被禁用,防止用户无法上下滚动页面 |
||||
|
_lockScroll() { |
||||
|
try { |
||||
|
document.body.style.overflow = 'hidden'; |
||||
|
} catch (e) {} |
||||
|
}, |
||||
|
_unlockScroll() { |
||||
|
try { |
||||
|
document.body.style.overflow = ''; |
||||
|
} catch (e) {} |
||||
|
} |
||||
|
}, |
||||
|
beforeDestroy() { |
||||
|
if (this.lockScroll) this._unlockScroll(); |
||||
|
} |
||||
|
}; |
||||
|
</script> |
||||
|
|
||||
|
<style scoped> |
||||
|
.fm-overlay { |
||||
|
position: fixed; |
||||
|
left: 0; |
||||
|
right: 0; |
||||
|
top: 0; |
||||
|
bottom: 0; |
||||
|
background: rgba(0, 0, 0, 0.35); |
||||
|
z-index: 999; |
||||
|
} |
||||
|
|
||||
|
.fm-wrap { |
||||
|
position: fixed; |
||||
|
left: 0; |
||||
|
right: 0; |
||||
|
top: 0; |
||||
|
bottom: 0; |
||||
|
display: flex; |
||||
|
align-items: center; |
||||
|
justify-content: center; |
||||
|
z-index: 1000; |
||||
|
padding: 40rpx; |
||||
|
box-sizing: border-box; |
||||
|
} |
||||
|
|
||||
|
.fm-card { |
||||
|
background: #fff; |
||||
|
border-radius: 24rpx; |
||||
|
padding: 40rpx; |
||||
|
box-sizing: border-box; |
||||
|
text-align: center; |
||||
|
box-shadow: 0 6rpx 30rpx rgba(0, 0, 0, 0.12); |
||||
|
} |
||||
|
|
||||
|
.fm-title { |
||||
|
display: block; |
||||
|
font-size: 48rpx; |
||||
|
font-weight: 700; |
||||
|
color: #333333; |
||||
|
margin-bottom: 40rpx; |
||||
|
} |
||||
|
|
||||
|
.fm-icon-wrap { |
||||
|
width: 200rpx; |
||||
|
height: 200rpx; |
||||
|
margin: 0 auto 40rpx; |
||||
|
display: flex; |
||||
|
align-items: center; |
||||
|
justify-content: center; |
||||
|
} |
||||
|
|
||||
|
.fm-icon-img { |
||||
|
width: 100%; |
||||
|
height: 100%; |
||||
|
} |
||||
|
|
||||
|
.fm-sub { |
||||
|
display: block; |
||||
|
color: #666666; |
||||
|
font-size: 32rpx; |
||||
|
margin-bottom: 40rpx; |
||||
|
font-weight: 500; |
||||
|
} |
||||
|
|
||||
|
.fm-btn-wrap { |
||||
|
display: flex; |
||||
|
justify-content: center; |
||||
|
} |
||||
|
|
||||
|
.fm-btn { |
||||
|
width: 220rpx; |
||||
|
height: 60rpx; |
||||
|
border-radius: 32rpx; |
||||
|
background: #000; |
||||
|
color: #ffffff; |
||||
|
font-weight: 700; |
||||
|
font-size: 32rpx; |
||||
|
font-style: normal; |
||||
|
border: none; |
||||
|
display: flex; |
||||
|
align-items: center; |
||||
|
justify-content: center; |
||||
|
margin-bottom: 20rpx; |
||||
|
} |
||||
|
</style> |
||||
|
Before Width: 1920 | Height: 1040 | Size: 521 KiB |
|
Before Width: 522 | Height: 928 | Size: 166 KiB |
|
After Width: 100 | Height: 100 | Size: 4.2 KiB |
|
After Width: 100 | Height: 100 | Size: 4.2 KiB |
Write
Preview
Loading…
Cancel
Save
Reference in new issue