179 lines
4.4 KiB
Vue
179 lines
4.4 KiB
Vue
<template>
|
|
<view class="content">
|
|
<view class="container">
|
|
<headers :titles="titles">
|
|
<uni-icons type="arrow-left" color="#000000" size="22px"></uni-icons>
|
|
</headers>
|
|
<view class="f-box">
|
|
<u-parse :content="content"></u-parse>
|
|
</view>
|
|
|
|
<jushi-signature :settings="settings" base64 @cancel="signatureCancel"
|
|
@change="signatureChange"></jushi-signature>
|
|
</view>
|
|
|
|
</view>
|
|
</template>
|
|
|
|
<script>
|
|
import headers from '../../components/header/headers.vue'
|
|
import request from '@/utils/request.js'
|
|
|
|
export default {
|
|
data() {
|
|
return {
|
|
titles: "合同",
|
|
settings: { //签名设置
|
|
width: '750', //签名区域的宽
|
|
height: '500', //签名区域的高
|
|
lineWidth: 4, //签名时线宽
|
|
textColor: '#000' //签名文字颜色
|
|
},
|
|
contentTemp: '',
|
|
content: '',
|
|
List: [],
|
|
show: false,
|
|
status: 'loading',
|
|
name: '',
|
|
Address: '',
|
|
tenantId: '',
|
|
contractData: {},
|
|
userData: {},
|
|
callback: null,
|
|
}
|
|
},
|
|
onLoad(options) {
|
|
/*this.name = option.name
|
|
this.Address = option.Address
|
|
this.tenantId = option.tenantId
|
|
console.log('name',this.name)
|
|
console.log('Address',this.Address)
|
|
console.log('tenantId',this.tenantId)*/
|
|
if (options.data) {
|
|
this.contractData = JSON.parse(decodeURIComponent(options.data));
|
|
this.callback = options.callback;
|
|
}
|
|
this.callback = options.callback;
|
|
this.userData = uni.getStorageSync('userInfo');
|
|
},
|
|
onShow() {
|
|
this.getdriveSchool()
|
|
// this.actList = ["1", "1", "1", "1", "1", ]
|
|
// this.status = "nomore" 底部刷新结束
|
|
},
|
|
onPullDownRefresh() {
|
|
console.log("刷新");
|
|
uni.stopPullDownRefresh()
|
|
},
|
|
onReachBottom() {
|
|
// this.show = true
|
|
setTimeout(() => {
|
|
console.log("加载执行");
|
|
}, 2000)
|
|
},
|
|
components: {
|
|
headers
|
|
},
|
|
methods: {
|
|
async getdriveSchool() {
|
|
let res = await request({
|
|
url: `/app-api/small/driveSchool/obtainContract/tenantId/${this.contractData.tenantId}`,
|
|
method: 'get',
|
|
})
|
|
this.content = res.data.content
|
|
|
|
// 执行替换
|
|
for (const [key, value] of Object.entries(this.contractData)) {
|
|
this.content = this.content.replace(
|
|
new RegExp(` ${key} |${key}`, 'g'),
|
|
value
|
|
);
|
|
}
|
|
|
|
// 处理特殊格式的占位符(如下划线格式)
|
|
this.content = this.content.replace(/<u[^>]*>([^<]*)name([^<]*)<\/u>/g, `<u>$1${this.contractData.name}$2</u>`);
|
|
this.content = this.content.replace(/<u[^>]*>([^<]*)type([^<]*)<\/u>/g, `<u>$1${this.contractData.type}$2</u>`);
|
|
|
|
|
|
},
|
|
|
|
signatureCancel() {
|
|
uni.navigateBack()
|
|
},
|
|
async signatureChange(e) {
|
|
this.imgUrl = e
|
|
let res = await request({
|
|
url: '/app-api/small/driveSchool/obtainContract',
|
|
method: 'post',
|
|
data: {
|
|
userName: this.contractData.name,
|
|
tenantId: this.tenantId,
|
|
userId: this.userData.id,
|
|
content: this.content,
|
|
}
|
|
})
|
|
console.log(res);
|
|
uni.showToast({
|
|
title: '报名成功',
|
|
duration: 3000
|
|
|
|
});
|
|
|
|
const pages = getCurrentPages();
|
|
const prevPage = pages[pages.length - 2];
|
|
|
|
if (prevPage && (prevPage.route === 'newPages/register/index' || prevPage.route === '/newPages/register/index')) {
|
|
if (this.callback) { // 从onLoad中获取的callback
|
|
try {
|
|
const callback = decodeURIComponent(this.callback);
|
|
if (prevPage.$vm && typeof prevPage.$vm[callback] === 'function') {
|
|
prevPage.$vm[callback]();
|
|
}
|
|
} catch (e) {
|
|
console.error('回调执行失败:', e);
|
|
}
|
|
}
|
|
}
|
|
|
|
setTimeout(function () {
|
|
// 在这里写需要延迟执行的代码
|
|
uni.navigateTo({
|
|
url: '/newPages/newIndex/index'
|
|
})
|
|
}, 2600); // 3000毫秒即为3秒
|
|
|
|
// const index = e.lastIndexOf("/")
|
|
// let fileName = e.substring(index + 1, e.length)
|
|
// this.uploadFile(this.imgUrl, fileName)
|
|
|
|
},
|
|
|
|
goback() {
|
|
uni.navigateBack()
|
|
},
|
|
|
|
}
|
|
}
|
|
</script>
|
|
|
|
<style scoped lang="scss">
|
|
.content {
|
|
background: #f4f5f6;
|
|
|
|
height: 100vh;
|
|
}
|
|
|
|
.container {
|
|
width: 100%;
|
|
background: #f4f5f6;
|
|
box-sizing: border-box;
|
|
padding-top: 88px;
|
|
}
|
|
|
|
.f-box {
|
|
width: 100%;
|
|
box-sizing: border-box;
|
|
padding: 15px;
|
|
}
|
|
</style>
|