7d0f60a6 by lttnew

更新证书

1 parent 5f967e5c
......@@ -10,8 +10,9 @@
<view class="item" v-for="n in list" :key="n.id">
<view class="w100">
<view class="status">
<text class="text-success" v-if="n.isCert == '1' ">已发送</text>
<text class="text-warning" v-else>未发送</text>
<text class="text-success" v-if="n.isCert == '1'">已发送</text>
<text class="text-warning" v-else-if="n.isCert == '0'">未发送</text>
<text class="text-primary" v-else>生成中</text>
</view>
<view class="name">{{n.realName}}</view>
<view class="date">
......@@ -30,15 +31,36 @@
</view>
</view>
<div class="func">
<button @click="sendCert(n)">{{ ['发送证书','更新证书'][n.isCert] }}</button>
</div>
<view class="func">
<button :disabled="!(n.isCert == '0' || n.isCert == '1')" @click="sendCert(n)">{{ n.isCert == '1' ? '更新证书' : '发送证书' }}</button>
</view>
</view>
</view>
</view>
</view>
<!-- 证书操作提示弹层 -->
<uni-popup ref="certPopup" type="center" :is-mask-click="false">
<view class="cert-dialog">
<view class="cert-dialog__head">
<uni-icons type="info-filled" size="24" color="#FAAD14" />
<view class="cert-dialog__title">{{ popupTitle }}</view>
</view>
<view class="cert-dialog__content">{{ popupContent }}</view>
<view class="cert-dialog__btns">
<view
v-if="!popupIsAlert"
class="cert-dialog__btn cert-dialog__btn--cancel"
@click="onPopupCancel"
>取消</view>
<view
class="cert-dialog__btn cert-dialog__btn--sure"
@click="onPopupSure"
>{{ popupBtnText }}</view>
</view>
</view>
</uni-popup>
</view>
</template>
......@@ -63,6 +85,15 @@
const list = ref([])
const total = ref(0)
const userType = ref('')
// 证书操作提示弹层
const certPopup = ref(null)
const popupTitle = ref('提示')
const popupContent = ref('')
const popupIsAlert = ref(false)
const popupBtnText = ref('确认')
let popupSure = () => {}
onLoad((option) => {
queryParams.value.examId = option.examId
queryParams.value.payId = option.payId
......@@ -82,31 +113,31 @@
uni.hideLoading()
})
}
function checkCert(row){
function checkCert(row) {
return api.checkPersonByPersonId(row.perId).then(res => {
if (!res.data) {
uni.showModal({
openCertPopup({
title: '提示',
content:'该学员没有照片,无法生成证书!',
success: () => {}
content: '该学员没有照片,无法生成证书!',
isAlert: true,
btnText: '知道了',
sure: () => {}
})
return Promise.reject()
}
})
}
function sendCert(row) {
let msg
if (row.isCert == 1) {
msg = `更新`
} else {
msg = `下发`
}
let msg = row.isCert == 1 ? '更新' : '下发'
checkCert(row).then(() => {
uni.showModal({
openCertPopup({
title: '提示',
content: `确定${msg}${row.realName}的证书吗`,
success: function(res) {
if (res.confirm) {
isAlert: false,
btnText: `确认${msg}`,
sure: () => {
const params = [{
id: queryParams.value.payId,
children: [{
......@@ -115,18 +146,35 @@
}]
}]
api.submitCert2(params).then(res => {
api.submitCert3(params).then(() => {
uni.showToast({
title: `下发成功`
title: `${msg}成功`
})
getList()
})
}
}
})
})
}
/** 打开自定义弹层 */
function openCertPopup(opt) {
popupTitle.value = opt.title || '提示'
popupContent.value = opt.content
popupIsAlert.value = !!opt.isAlert
popupBtnText.value = opt.btnText || '确认'
popupSure = opt.sure || (() => {})
certPopup.value.open()
}
function onPopupCancel() {
certPopup.value.close()
}
function onPopupSure() {
certPopup.value.close()
popupSure()
}
function handleImport() {
var arr = []
......@@ -185,4 +233,73 @@
font-size: 26rpx;
}
}
.func button[disabled] {
opacity: 0.4;
color: #999;
border-color: #ccc;
}
/* 证书操作提示弹层 */
.cert-dialog {
width: 560rpx;
background: #fff;
border-radius: 24rpx;
padding: 40rpx 32rpx 28rpx;
display: flex;
flex-direction: column;
align-items: center;
&__head {
display: flex;
align-items: center;
justify-content: center;
margin-bottom: 16rpx;
}
&__title {
font-size: 32rpx;
font-weight: 600;
color: #303133;
margin-left: 10rpx;
}
&__content {
font-size: 28rpx;
color: #606266;
line-height: 1.6;
text-align: center;
margin-bottom: 36rpx;
}
&__btns {
width: 100%;
display: flex;
justify-content: center;
align-items: center;
}
&__btn {
flex: 1;
margin: 0 8rpx;
height: 76rpx;
line-height: 76rpx;
text-align: center;
font-size: 28rpx;
border-radius: 38rpx;
&--cancel {
background: #f4f4f5;
color: #909399;
}
&--sure {
background: #AD181F;
color: #fff;
}
&:active {
opacity: 0.85;
}
}
}
</style>
......
Styling with Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!