소스 검색

发包方调查签字和承包方调查签字

rongxin_prod
QI_YUJIE 1 년 전
부모
커밋
6634a2236e
4개의 변경된 파일265개의 추가작업 그리고 5개의 파일을 삭제
  1. +9
    -0
      src/api/contracted/cbf.js
  2. +9
    -0
      src/api/contracted/fbf.js
  3. +127
    -2
      src/views/contracted/village/contractor/contractorHeader.vue
  4. +120
    -3
      src/views/contracted/village/employer/employer.vue

+ 9
- 0
src/api/contracted/cbf.js 파일 보기

@@ -51,3 +51,12 @@ export function generateContractorCode(params) {
params: params
});
}

// 承包方调查签字
export function contractorSignature(data) {
return request({
url: '/service/cbf/surveySign',
method: 'post',
data: data
});
}

+ 9
- 0
src/api/contracted/fbf.js 파일 보기

@@ -26,3 +26,12 @@ export function updateFbf(data) {
data: data
})
}

// 发包方调查签字
export function manualSignature(data) {
return request({
url: '/service/fbf/surveySign',
method: 'post',
data: data
});
}

+ 127
- 2
src/views/contracted/village/contractor/contractorHeader.vue 파일 보기

@@ -3,24 +3,128 @@
<van-nav-bar left-arrow fixed placeholder @click-left="goBack">
<template #title>
<div class="tb_main">
{{ contractorName }}<p><span class="tb">签字完成</span><span class="tb">异常挂起</span></p>
{{ contractorName }}<p><span class="tb" @click="handleSign">签字完成</span><span class="tb">异常挂起</span></p>
</div>
</template>
</van-nav-bar>

<van-popup v-model="showSignPopup" closeable position="right" :style="{ height: '100%' }" >
<van-cell-group style="width: 100%;height:100%;overflow: hidden;padding-top: 10px;padding-bottom: 10px;">
<div class="signature-box" @mousedown="canvasTTdown" @touchstart="canvasTTdown">
<vue-esign
ref="esign"
class="mySign"
:width="500"
:height="height"
:isCrop="signature.isCrop"
:lineWidth="signature.lineWidth"
:lineColor="signature.lineColor"
:bgColor.sync="signature.bgColor"
/>
</div>
<img src="../../../../assets/images/sunVillage_info/signature_icon_10.png" id="canvasTT" style="position:absolute;top: 50%;left: 50%;transform: translate(-50%,-50%)" alt="">
<div class="signature-footer">
<van-button @click="handleReset" class="clearBtn" type="info" plain size="small">清空画板</van-button>
<van-button @click="handleGenerate" type="info" size="small">保存签字</van-button>
</div>
</van-cell-group>
</van-popup>

</div>
</template>
<script>
import { getDept } from "@/api/contracted";
import { contractorSignature } from "@/api/contracted/cbf";
import vueEsign from "vue-esign";
import $ from "jquery";

export default {
name: 'contractedVillageHeader',
props: ['deptId', 'contractorCode', 'contractorName', 'surveyStatus'],
components: {
vueEsign
},
data() {
return {
// 控制签字面板的显示和隐藏
showSignPopup: false,
height: null,
//电子签名
signature: {
lineWidth: 6, // 画笔的线条粗细
lineColor: "#000000", // 画笔的颜色
bgColor: "", // 画布的背景颜色
resultImg: "", // 最终画布生成的base64图片
isCrop: false, // 是否裁剪,在画布设定尺寸基础上裁掉四周空白部分
},
};
},
created() {
this.height = window.screen.height * 1.28 - 20;
},
methods: {
goBack() {
getDept(this.deptId).then(response => {
this.$router.push({path:'/contracted/village/contractor', query: { deptId: this.deptId, deptName: response.data.deptName }});
});
}
},
handleSign() {
this.showSignPopup = true;
this.handleReset();
},
canvasTTdown() {
$('#canvasTT').css('display', 'none');
},
// 清空画板
handleReset() {
if (this.$refs.esign) {
this.$refs.esign.reset();
}
$('#canvasTT').css('display', 'block')
},
// 生成签字图片
handleGenerate() {
this.$refs.esign
.generate() // 使用生成器调用把签字的图片转换成为base64图片格式
.then((res) => {
this.signature.resultImg = res;
let wj = this.dataURLtoBlob(res);
let param = new FormData() // 创建form对象
param.append('file', wj) // 通过append向form对象添加数据
param.append('cbfbm', this.contractorCode);
contractorSignature(param).then(response => {
if (response.code === 200) {
this.$toast({
icon: 'success', // 找到自己需要的图标
message: '签字成功',
duration: "1000",
onClose: () => {
this.showSignPopup = false;
this.goBack();
}
});
}
});
})
.catch((err) => {
// 画布没有签字时会执行这里提示一下
this.$toast.fail('请签名后再保存签字');
});
},
dataURLtoBlob(dataurl, filename = 'file') {
let arr = dataurl.split(',')
let mime = arr[0].match(/:(.*?);/)[1]
let suffix = mime.split('/')[1]
let bstr = atob(arr[1])
let n = bstr.length
let u8arr = new Uint8Array(n)
while (n--) {
u8arr[n] = bstr.charCodeAt(n)
}
return new File([u8arr], `${filename}.${suffix}`, {
type: mime
})
},
}
}
</script>
@@ -43,4 +147,25 @@
border-radius: 50PX;
margin-right: 5PX;
}

.signature-box {
border: 1px dashed #666;
margin: 2px 20px;
height: 100%;
/*canvas{*/
/* height: 100%!important;*/
/*}*/
}

.signature-footer {
transform: rotate(90deg);
width: auto;
position: absolute;
top: 50%;
left: 0PX;

.clearBtn {
margin-left: 15px;
}
}
</style>

+ 120
- 3
src/views/contracted/village/employer/employer.vue 파일 보기

@@ -52,19 +52,45 @@
</van-form>
<div class="btn_main">
<p class="btn" @click="submitForm">保存</p>
<p class="btn1">签字</p>
<p class="btn1" @click="handleSign">签字</p>
</div>
</div>

<van-popup v-model="showSignPopup" closeable position="right" :style="{ height: '100%' }" >
<van-cell-group style="width: 100%;height:100%;overflow: hidden;padding-top: 10px;padding-bottom: 10px;">
<div class="signature-box" @mousedown="canvasTTdown" @touchstart="canvasTTdown">
<vue-esign
ref="esign"
class="mySign"
:width="500"
:height="height"
:isCrop="signature.isCrop"
:lineWidth="signature.lineWidth"
:lineColor="signature.lineColor"
:bgColor.sync="signature.bgColor"
/>
</div>
<img src="../../../../assets/images/sunVillage_info/signature_icon_10.png" id="canvasTT" style="position:absolute;top: 50%;left: 50%;transform: translate(-50%,-50%)" alt="">
<div class="signature-footer">
<van-button @click="handleReset" class="clearBtn" type="info" plain size="small">清空画板</van-button>
<van-button @click="handleGenerate" type="info" size="small">保存签字</van-button>
</div>
</van-cell-group>
</van-popup>

</div>
</template>
<script>
import Cookies from "js-cookie";
import { listFbf, addFbf, updateFbf } from "@/api/contracted/fbf";
import { listFbf, addFbf, updateFbf, manualSignature } from "@/api/contracted/fbf";
import vueEsign from "vue-esign";
import $ from "jquery";

export default {
name: "contractedVillageContractor",
components: {
vueEsign
},
data() {
return {
form: {}, // 发包方信息表单
@@ -72,9 +98,22 @@
credentialTypeOptions: [], // 证件类型字典
credentialTypeText: null, // 证件类型标签名
showCredentialType: false, // 控制证件类型字典弹出层的显示和隐藏

// 控制签字面板的显示和隐藏
showSignPopup: false,
height: null,
//电子签名
signature: {
lineWidth: 6, // 画笔的线条粗细
lineColor: "#000000", // 画笔的颜色
bgColor: "", // 画布的背景颜色
resultImg: "", // 最终画布生成的base64图片
isCrop: false, // 是否裁剪,在画布设定尺寸基础上裁掉四周空白部分
},
};
},
created() {
this.height = window.screen.height * 1.28 - 20;
this.getDicts("cert_type").then(response => {
this.credentialTypeOptions = response.data;
});
@@ -145,7 +184,64 @@
fbfdcjs: null,
fbfdcqz: null
}
}
},
handleSign() {
this.showSignPopup = true;
this.handleReset();
},
canvasTTdown() {
$('#canvasTT').css('display', 'none');
},
// 清空画板
handleReset() {
if (this.$refs.esign) {
this.$refs.esign.reset();
}
$('#canvasTT').css('display', 'block')
},
// 生成签字图片
handleGenerate() {
this.$refs.esign
.generate() // 使用生成器调用把签字的图片转换成为base64图片格式
.then((res) => {
this.signature.resultImg = res;
let wj = this.dataURLtoBlob(res);
let param = new FormData(); // 创建form对象
param.append('file', wj); // 通过append向form对象添加数据
param.append('deptId', this.$route.query.deptId);
manualSignature(param).then(response => {
if (response.code === 200) {
this.$toast({
icon: 'success', // 找到自己需要的图标
message: '签字成功',
duration: "1000",
onClose: () => {
this.showSignPopup = false;
this.form.fbfdcqz = response.data;
}
});
}
});
})
.catch((err) => {
// 画布没有签字时会执行这里提示一下
this.$toast.fail('请签名后再保存签字');
});
},
dataURLtoBlob(dataurl, filename = 'file') {
let arr = dataurl.split(',')
let mime = arr[0].match(/:(.*?);/)[1]
let suffix = mime.split('/')[1]
let bstr = atob(arr[1])
let n = bstr.length
let u8arr = new Uint8Array(n)
while (n--) {
u8arr[n] = bstr.charCodeAt(n)
}
return new File([u8arr], `${filename}.${suffix}`, {
type: mime
})
},
},
};
</script>
@@ -308,4 +404,25 @@
margin: 2vh auto;
}

.signature-box {
border: 1px dashed #666;
margin: 2px 20px;
height: 100%;
/*canvas{*/
/* height: 100%!important;*/
/*}*/
}

.signature-footer {
transform: rotate(90deg);
width: auto;
position: absolute;
top: 50%;
left: 0PX;

.clearBtn {
margin-left: 15px;
}
}

</style>

불러오는 중...
취소
저장