Commit 9d6b3a01 authored by youjie's avatar youjie

签名

parent 184fa774
.row{ iconfont.row{
display: flex; display: flex;
} }
.row-w{ .row-w{
......
/* Logo 字体 */
@font-face {
font-family: "iconfont logo";
src: url('https://at.alicdn.com/t/font_985780_km7mi63cihi.eot?t=1545807318834');
src: url('https://at.alicdn.com/t/font_985780_km7mi63cihi.eot?t=1545807318834#iefix') format('embedded-opentype'),
url('https://at.alicdn.com/t/font_985780_km7mi63cihi.woff?t=1545807318834') format('woff'),
url('https://at.alicdn.com/t/font_985780_km7mi63cihi.ttf?t=1545807318834') format('truetype'),
url('https://at.alicdn.com/t/font_985780_km7mi63cihi.svg?t=1545807318834#iconfont') format('svg');
}
.logo {
font-family: "iconfont logo";
font-size: 160px;
font-style: normal;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
}
/* tabs */
.nav-tabs {
position: relative;
}
.nav-tabs .nav-more {
position: absolute;
right: 0;
bottom: 0;
height: 42px;
line-height: 42px;
color: #666;
}
#tabs {
border-bottom: 1px solid #eee;
}
#tabs li {
cursor: pointer;
width: 100px;
height: 40px;
line-height: 40px;
text-align: center;
font-size: 16px;
border-bottom: 2px solid transparent;
position: relative;
z-index: 1;
margin-bottom: -1px;
color: #666;
}
#tabs .active {
border-bottom-color: #f00;
color: #222;
}
.tab-container .content {
display: none;
}
/* 页面布局 */
.main {
padding: 30px 100px;
width: 960px;
margin: 0 auto;
}
.main .logo {
color: #333;
text-align: left;
margin-bottom: 30px;
line-height: 1;
height: 110px;
margin-top: -50px;
overflow: hidden;
*zoom: 1;
}
.main .logo a {
font-size: 160px;
color: #333;
}
.helps {
margin-top: 40px;
}
.helps pre {
padding: 20px;
margin: 10px 0;
border: solid 1px #e7e1cd;
background-color: #fffdef;
overflow: auto;
}
.icon_lists {
width: 100% !important;
overflow: hidden;
*zoom: 1;
}
.icon_lists li {
width: 100px;
margin-bottom: 10px;
margin-right: 20px;
text-align: center;
list-style: none !important;
cursor: default;
}
.icon_lists li .code-name {
line-height: 1.2;
}
.icon_lists .icon {
display: block;
height: 100px;
line-height: 100px;
font-size: 42px;
margin: 10px auto;
color: #333;
-webkit-transition: font-size 0.25s linear, width 0.25s linear;
-moz-transition: font-size 0.25s linear, width 0.25s linear;
transition: font-size 0.25s linear, width 0.25s linear;
}
.icon_lists .icon:hover {
font-size: 100px;
}
.icon_lists .svg-icon {
/* 通过设置 font-size 来改变图标大小 */
width: 1em;
/* 图标和文字相邻时,垂直对齐 */
vertical-align: -0.15em;
/* 通过设置 color 来改变 SVG 的颜色/fill */
fill: currentColor;
/* path 和 stroke 溢出 viewBox 部分在 IE 下会显示
normalize.css 中也包含这行 */
overflow: hidden;
}
.icon_lists li .name,
.icon_lists li .code-name {
color: #666;
}
/* markdown 样式 */
.markdown {
color: #666;
font-size: 14px;
line-height: 1.8;
}
.highlight {
line-height: 1.5;
}
.markdown img {
vertical-align: middle;
max-width: 100%;
}
.markdown h1 {
color: #404040;
font-weight: 500;
line-height: 40px;
margin-bottom: 24px;
}
.markdown h2,
.markdown h3,
.markdown h4,
.markdown h5,
.markdown h6 {
color: #404040;
margin: 1.6em 0 0.6em 0;
font-weight: 500;
clear: both;
}
.markdown h1 {
font-size: 28px;
}
.markdown h2 {
font-size: 22px;
}
.markdown h3 {
font-size: 16px;
}
.markdown h4 {
font-size: 14px;
}
.markdown h5 {
font-size: 12px;
}
.markdown h6 {
font-size: 12px;
}
.markdown hr {
height: 1px;
border: 0;
background: #e9e9e9;
margin: 16px 0;
clear: both;
}
.markdown p {
margin: 1em 0;
}
.markdown>p,
.markdown>blockquote,
.markdown>.highlight,
.markdown>ol,
.markdown>ul {
width: 80%;
}
.markdown ul>li {
list-style: circle;
}
.markdown>ul li,
.markdown blockquote ul>li {
margin-left: 20px;
padding-left: 4px;
}
.markdown>ul li p,
.markdown>ol li p {
margin: 0.6em 0;
}
.markdown ol>li {
list-style: decimal;
}
.markdown>ol li,
.markdown blockquote ol>li {
margin-left: 20px;
padding-left: 4px;
}
.markdown code {
margin: 0 3px;
padding: 0 5px;
background: #eee;
border-radius: 3px;
}
.markdown strong,
.markdown b {
font-weight: 600;
}
.markdown>table {
border-collapse: collapse;
border-spacing: 0px;
empty-cells: show;
border: 1px solid #e9e9e9;
width: 95%;
margin-bottom: 24px;
}
.markdown>table th {
white-space: nowrap;
color: #333;
font-weight: 600;
}
.markdown>table th,
.markdown>table td {
border: 1px solid #e9e9e9;
padding: 8px 16px;
text-align: left;
}
.markdown>table th {
background: #F7F7F7;
}
.markdown blockquote {
font-size: 90%;
color: #999;
border-left: 4px solid #e9e9e9;
padding-left: 0.8em;
margin: 1em 0;
}
.markdown blockquote p {
margin: 0;
}
.markdown .anchor {
opacity: 0;
transition: opacity 0.3s ease;
margin-left: 8px;
}
.markdown .waiting {
color: #ccc;
}
.markdown h1:hover .anchor,
.markdown h2:hover .anchor,
.markdown h3:hover .anchor,
.markdown h4:hover .anchor,
.markdown h5:hover .anchor,
.markdown h6:hover .anchor {
opacity: 1;
display: inline-block;
}
.markdown>br,
.markdown>p>br {
clear: both;
}
.hljs {
display: block;
background: white;
padding: 0.5em;
color: #333333;
overflow-x: auto;
}
.hljs-comment,
.hljs-meta {
color: #969896;
}
.hljs-string,
.hljs-variable,
.hljs-template-variable,
.hljs-strong,
.hljs-emphasis,
.hljs-quote {
color: #df5000;
}
.hljs-keyword,
.hljs-selector-tag,
.hljs-type {
color: #a71d5d;
}
.hljs-literal,
.hljs-symbol,
.hljs-bullet,
.hljs-attribute {
color: #0086b3;
}
.hljs-section,
.hljs-name {
color: #63a35c;
}
.hljs-tag {
color: #333333;
}
.hljs-title,
.hljs-attr,
.hljs-selector-id,
.hljs-selector-class,
.hljs-selector-attr,
.hljs-selector-pseudo {
color: #795da3;
}
.hljs-addition {
color: #55a532;
background-color: #eaffea;
}
.hljs-deletion {
color: #bd2c00;
background-color: #ffecec;
}
.hljs-link {
text-decoration: underline;
}
/* 代码高亮 */
/* PrismJS 1.15.0
https://prismjs.com/download.html#themes=prism&languages=markup+css+clike+javascript */
/**
* prism.js default theme for JavaScript, CSS and HTML
* Based on dabblet (http://dabblet.com)
* @author Lea Verou
*/
code[class*="language-"],
pre[class*="language-"] {
color: black;
background: none;
text-shadow: 0 1px white;
font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace;
text-align: left;
white-space: pre;
word-spacing: normal;
word-break: normal;
word-wrap: normal;
line-height: 1.5;
-moz-tab-size: 4;
-o-tab-size: 4;
tab-size: 4;
-webkit-hyphens: none;
-moz-hyphens: none;
-ms-hyphens: none;
hyphens: none;
}
pre[class*="language-"]::-moz-selection,
pre[class*="language-"] ::-moz-selection,
code[class*="language-"]::-moz-selection,
code[class*="language-"] ::-moz-selection {
text-shadow: none;
background: #b3d4fc;
}
pre[class*="language-"]::selection,
pre[class*="language-"] ::selection,
code[class*="language-"]::selection,
code[class*="language-"] ::selection {
text-shadow: none;
background: #b3d4fc;
}
@media print {
code[class*="language-"],
pre[class*="language-"] {
text-shadow: none;
}
}
/* Code blocks */
pre[class*="language-"] {
padding: 1em;
margin: .5em 0;
overflow: auto;
}
:not(pre)>code[class*="language-"],
pre[class*="language-"] {
background: #f5f2f0;
}
/* Inline code */
:not(pre)>code[class*="language-"] {
padding: .1em;
border-radius: .3em;
white-space: normal;
}
.token.comment,
.token.prolog,
.token.doctype,
.token.cdata {
color: slategray;
}
.token.punctuation {
color: #999;
}
.namespace {
opacity: .7;
}
.token.property,
.token.tag,
.token.boolean,
.token.number,
.token.constant,
.token.symbol,
.token.deleted {
color: #905;
}
.token.selector,
.token.attr-name,
.token.string,
.token.char,
.token.builtin,
.token.inserted {
color: #690;
}
.token.operator,
.token.entity,
.token.url,
.language-css .token.string,
.style .token.string {
color: #9a6e3a;
background: hsla(0, 0%, 100%, .5);
}
.token.atrule,
.token.attr-value,
.token.keyword {
color: #07a;
}
.token.function,
.token.class-name {
color: #DD4A68;
}
.token.regex,
.token.important,
.token.variable {
color: #e90;
}
.token.important,
.token.bold {
font-weight: bold;
}
.token.italic {
font-style: italic;
}
.token.entity {
cursor: help;
}
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
<!DOCTYPE html>
<html lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0, user-scalable=no, target-densitydpi=device-dpi" />
<meta name="screen-orientation" content="portrait">
</meta>
<meta name="x5-orientation" content="portrait">
</meta>
<link rel="stylesheet" href="../../css/bts/bootstrap.min.css">
<link rel="stylesheet" href="../../css/flex.css">
</head>
<body class="signAconFrom">
<div class="signAconBox">
<div class="contractTitle">大红包专案活动合作协议</div>
<div class="contractCenter">
<div>甲方:四川和平国际旅行社有限公司</div>
<div>地址:成都市锦江区青和里南段 55 号阳光新业 2310、2311 号</div>
<div>经营许证号:L-SC-CJ00015 法定负责人:谢麟</div>
<div>乙方:</div>
<div>经营地址:</div>
<div>经营许可证号:</div>
<div>法定负责人:</div>
<div>为加强甲乙双方紧密合作,并进一步巩固甲乙双方的合作关系,达到双方互惠互利的双赢模式,甲方特推出“大红包专案活动”,具体活动时间及内容如下:</div>
<div>1、活动时间:2024 年 07 月 1 日-2025 年 06 月 30 日(报名起算)</div>
<div>2、活动内容:为答谢各位同行对“印象”系列产品的支持和厚爱,在同行销售反点外特推出“大红包专案活动”,在“合作协议”期间内同行只要达到红包申请额度即按照红包系数申请该额度红包。</div>
<div>3、活动要求:</div>
<div>3.1 所有在 2024 年 08 月 31 日前签约此协议的同行均可参加此活动,签约“合作协议”即视为有效参加,并在合作协议生效后报名第一单开始计算累计销售额;</div>
<div>3.2 此活动“印象”产品均可参加参与;此“大红包专案活动”累计销售及红包计算方式如下:</div>
<table style="width: 100%;" border>
<tr>
<th>
销售合计金额(预估)
</th>
<th>
累计销售额档次
</th>
<th>
红包系数
</th>
<th>红包(预收)</th>
</tr>
<tr>
<td>
799999 元以下
</td>
<td>
50 万~80 万
</td>
<td>
0.80%
</td>
<td>
6399.99
</td>
</tr>
<tr>
<td>
999999 元以下
</td>
<td>
80 万~100 万
</td>
<td>
1.00%
</td>
<td>
9999.99
</td>
</tr>
<tr>
<td>
1499999 元以下
</td>
<td>
100 万~150 万
</td>
<td>
1.20%
</td>
<td>
17999.99
</td>
</tr>
<tr>
<td>
1500000
</td>
<td>
150 万以上
</td>
<td>
1.50%
</td>
<td>
22500.00
</td>
</tr>
</table>
<div> 5、乙方累计销售金额达标即可申请大红包,由甲方审批通过后转至乙方公帐</div>
<div>(备注:乙方需提前向甲方出具相同金额的发票)</div>
<div>5.1 乙方账户信息</div>
<div>开户行:</div>
<div>帐号:</div>
<div>同行系统帐号:</div>
<div>6、此活动与“印象”其它活动互不影响,同行均可同时参加享受。</div>
<div>7、签订协议内容:</div>
<div>7.1 本协议一式两份,甲乙双方各执一份,具有同等法律效力;</div>
<div>7.2 本协议有效期为 2024 年 07 月 1 日-2025 年 06 月 30 日。</div>
<div>8、本协议需填写完整 5.1 事项内容并由甲乙双方负责人签字并加盖公章方能生效;</div>
<div>协议中未尽事宜,双方可协商解决或签订补充协议,其效力与本协议相等。</div>
<div>甲方:四川和平国际旅行社有限公司 乙方:</div>
<div>法定代表人(或授权代表): 法定代表人(或授权代表):</div>
</div>
<div class="contractTisp">
<div>请仔细阅读条款</div>
</div>
<div class="contractSign row justify-center" onclick="goSign()">
<div>签 字</div>
</div>
</div>
<script src="../../js/md5.js"></script>
<script type="text/javascript" src="../../js/autosize.js"></script>
<script type="text/javascript" src="../../js/jquery-1.10.2.js"></script>
<script src="../../js/layer/layer.js"></script>
<script src="../../js/mian.js"></script>
<script>
var qMsg = query()
var msg = JSON.parse(decodeURIComponent(qMsg.msg))
function goSign(){
window.location.href = `sign.html?msg=${qMsg.msg}`
}
</script>
</body>
<style>
.signAconFrom{
height: 100vh;
padding: 20px 10px;
overflow: hidden;
}
.signAconBox{
height: 100%;
display: flex;
flex-direction: column;
}
.contractTitle{
font-weight: 500;
font-size: 24px;
color: #080A09;
text-align: center;
margin-bottom: 20px;
}
.contractCenter{
height: 1px;
flex: 1;
padding: 20px 10px;
overflow: auto;
font-size: 14px;
line-height: 25px;
background: #F3F5F9;
border-radius: 20px;
}
.contractCenter table{
font-size: 12px;
margin: 0 0 10px 0;
}
.contractCenter table th{
padding: 0 2px;
}
.contractCenter table td{
padding: 0 2px;
}
.contractTisp{
font-weight: 800;
font-size: 14px;
color: #0198FF;
text-align: center;
margin-top: 20px;
}
.contractSign{
display: flex;
padding-top: 10px;
}
.contractSign div{
padding: 5px 23px;
background: #F3F5F9;
border-radius: 40px;
border: 1px solid #0198FF;
font-weight: 800;
font-size: 16px;
color: #0198FF;
}
</style>
</html>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0, user-scalable=no, target-densitydpi=device-dpi" />
<meta name="screen-orientation" content="portrait">
</meta>
<meta name="x5-orientation" content="portrait">
</meta>
<link rel="stylesheet" href="../../css/bts/bootstrap.min.css">
<link rel="stylesheet" href="../../css/flex.css">
<link rel="stylesheet" href="../../fonts/demo.css">
<link rel="stylesheet" href="../../fonts/iconfont.css">
<style>
.signAconFrom{
width: 100vw;
height: 100vh;
overflow: hidden;
}
.signAconBox{
height: 100%;
display: flex;
flex-direction: column;
}
.signAconCanvas{
height: 1px;
flex: 1;
overflow: hidden;
position: relative;
border: 1px solid #eee;
margin: 5px 5px 5px 5px;
}
.signAconBut{
}
.signAconBut{
border: 0;
background: #fff;
}
.signAconBut span:first-child{
font-size: 30px;
}
.signAconBut span:last-child{
font-size: 16px;
margin-left: 10px;
}
</style>
</head>
<body class="signAconFrom">
<div class="signAconBox">
<div class="signAconCanvas">
<div id="canvas" style="position:absolute;right: 0;left: 0; top:0;bottom: 0;">
</div>
</div>
<div class="signAconBut row-sb-n">
<button id="signAconButL" class="signAconBut col row items-center justify-center"
onclick="handelClearEl()">
<span style="color:rgb(36, 173, 229)"
class="iconfont icon-zhongzhi1"></span>
<span>重新签名</span>
</button>
<button id="signAconButR" class="signAconBut col row items-center justify-center"
onclick="handelSaveEl()">
<span style="color:rgb(36, 173, 229)"
class="iconfont icon-wancheng1"></span>
<span>完成签名</span>
</button>
</div>
</div>
<script type="text/javascript" src="https://gitcode.net/dcloud/uni-app/-/raw/dev/dist/uni.webview.1.5.6.js"></script>
<script src="../../js/md5.js"></script>
<script type="text/javascript" src="../../js/autosize.js"></script>
<script type="text/javascript" src="../../js/jquery-1.10.2.js"></script>
<script src="../../js/layer/layer.js"></script>
<script src="../../js/mian.js"></script>
<script>
var qMsg = query()
var isSignature = false
var isMouseDown = false
var canvas = document.createElement("canvas");
var cxt = canvas.getContext("2d");
var msg = JSON.parse(decodeURIComponent(qMsg.msg))
var parameters = {
Tourists_Sign: '',
ID: msg.contractID,
}
console.log(msg,'---')
var userAgent = navigator.userAgent;
if (/miniProgram/i.test(userAgent) && /micromessenger/i.test(userAgent)) {
// 微信小程序 JS-SDK 如果不需要兼容微信小程序,则无需引用此 JS 文件。
document.write('<script type="text/javascript" src="https://res.wx.qq.com/open/js/jweixin-1.4.0.js"><\/script>');
}
getCanvas()
function getCanvas() {
var that = this;
let el = document.getElementById("canvas");
el.appendChild(canvas);
canvas.width = el.clientWidth;
canvas.height = el.clientHeight;
cxt.fillStyle = '#fff'; //填充绘图的背景颜色
cxt.fillRect(0, 0, canvas.width, canvas.height); //绘制“已填色”的矩形
cxt.strokeStyle = this.color; //笔触的颜色
cxt.lineCap = "round"; //线条末端线帽的样式
let linewidth = 5;
//开始绘制
canvas.addEventListener(
"touchstart",
function (e) {
cxt.beginPath();
cxt.lineWidth = linewidth; //当前线条的宽度,以像素计
cxt.moveTo(e.changedTouches[0].pageX, e.changedTouches[0].pageY);
}.bind(this),
false
);
//绘制中
canvas.addEventListener(
"touchmove",
function (e) {
cxt.lineTo(e.changedTouches[0].pageX, e.changedTouches[0].pageY);
cxt.stroke();
isSignature = true;
}.bind(this),
false
);
//结束绘制
canvas.addEventListener(
"touchend",
function () {
cxt.closePath();
}.bind(this),
false
);
//开始绘制
canvas.addEventListener(
"mousedown",
function (e) {
isMouseDown = tripBusOrderVue
cxt.beginPath();
cxt.lineWidth = linewidth; //当前线条的宽度,以像素计
cxt.moveTo(e.pageX - 20, e.pageY - 20);
}.bind(this),
false
);
//绘制中
canvas.addEventListener(
"mousemove",
function (e) {
if (isMouseDown) {
cxt.lineTo(e.pageX - 20, e.pageY - 20);
cxt.stroke();
isSignature = true;
}
}.bind(this),
false
);
//结束绘制
canvas.addEventListener(
"mouseup",
function () {
this.isMouseDown = false
cxt.closePath();
}.bind(this),
false
);
}
function handelClearEl() {
cxt.clearRect(0, 0, canvas.width, canvas.height);
isSignature = false;
}
function handelSaveEl() {
var imageData = canvas.getContext("2d").getImageData(0, 0, canvas.width, canvas.height);
for (var i = 0; i < imageData.data.length; i += 4) {
// 当该像素是白色的,则设置成透明
if (imageData.data[i] == 255) {
imageData.data[i] = 0;
imageData.data[i + 1] = 0;
imageData.data[i + 2] = 0;
imageData.data[i + 3] = 0;
}
}
canvas.getContext("2d").putImageData(imageData, 0, 0);
let imgBase64 = canvas.toDataURL();
parameters.Tourists_Sign = imgBase64;
SaveMsg();
}
//提交数据
function SaveMsg() {
if(!isSignature){
return layer.msg('请先签名')
}
$('#signAconButR').attr('disabled', true)
document.getElementById("signAconButR").classList.add("active")
$.ajax({
type: "POST",
url: `${getApiUrl().urlPost}`,
contentType: "application/json",
data: getAjaxData("travelcontract_post_UpdateTravelContractSignService", parameters),
async: false,
success: function(res) {
if (res.resultCode === 1) {
// var url = `/pages/bigredrnvelope/signAcontract?msg=${encodeURIComponent(JSON.stringify(msg))}`
console.log(res,'签名---')
document.addEventListener('UniAppJSBridgeReady', function() {
// uni.postMessage({
// data: {
// url: `/pages/bigredrnvelope/signAcontract?msg=${encodeURIComponent(JSON.stringify(msg))}`
// }
// });
uni.redirectTo({
url:`/pages/bigredrnvelope/index`
});
})
} else {
layer.msg(res.message)
}
$('#signAconButR').attr('disabled', false)
document.getElementById("signAconButR").classList.remove("active")
},
error: function(message) {
$('#signAconButR').attr('disabled', false)
alert(JSON.stringify(message));
document.getElementById("signAconButR").classList.remove("active")
}
});
}
</script>
</body>
</html>
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment