c1f04dae by tianhaohao@pashanhoo.com

111

1 parent ea18b6ac
<!--
* @Description:
* @Autor: renchao
* @LastEditTime: 2023-07-17 13:51:29
-->
<template>
<lb-table :column="column" :maxHeight="200" :heightNumSetting="true" :pagination="false" :key="key" :data="tableData">
</lb-table>
</template>
<script>
import addQlr from './dialog/addQlr.vue'
import { mapGetters } from 'vuex'
export default {
components: {
addQlr
},
computed: {
...mapGetters(["dictData"]),
},
props: {
tableData: {
type: Array,
default: function () {
return []
}
},
gyfs: {
type: String,
default: '1'
}
},
data () {
return {
key: 0,
dataIndex: 0,
dialog: false,
details: {},
tableDataList: [],
qlrCommonTable: [
{
label: '序号',
type: 'index',
width: '50',
render: (h, scope) => {
return (
<div>
{scope.$index + 1}
</div>
)
}
},
{
prop: "qllxmc",
label: "权利类型"
},
{
prop: "bdcqzh",
label: "不动产权证号"
},
{
prop: "qlrmc",
label: "权利人"
},
{
prop: "qlrzjhm",
label: "证件号码"
},
{
prop: "bdcdyh",
label: "不动产单元号"
},
{
prop: "qlxzmc",
label: "权利性质"
},
{
prop: "qlytmc",
label: "用途"
},
{
prop: "qlmjmc",
label: "面积"
},
{
prop: "zl",
label: "坐落"
},
],
column: this.qlrCommonTable
}
},
watch: {
tableData: {
handler: function (val, oldVal) {
let that = this
if (val.length == 0 || !val) {
that.tableDataList = _.cloneDeep([{
sqrmc: '',
dlrzjlx: '',
dlrzjh: '',
fr: ''
}])
} else {
that.tableDataList = _.cloneDeep(val)
}
},
immediate: true,
deep: true
},
gyfs: {
handler (newVal, oldValue) {
let dataList = _.cloneDeep(this.qlrCommonTable)
if (newVal == '1') {
this.column = _.cloneDeep(dataList).slice(1, dataList.length)
} else if ((newVal == '2')) {
this.column = dataList
} else {
this.column = _.cloneDeep(dataList)
this.column.splice(
2, 0, {
prop: "qlbl",
label: "份数"
})
}
},
immediate: true
}
},
methods: {
}
}
</script>
<style scoped lang='scss'>
/deep/.el-table th {
height: 30px !important;
}
/deep/.el-table--small .el-table__cell {
padding: 5px;
}
</style>
<!--
* @Description:
* @Autor: renchao
* @LastEditTime: 2023-07-17 13:51:29
-->
<template>
<lb-table :column="column" :maxHeight="200" :heightNumSetting="true" :pagination="false" :key="key" :data="tableData">
</lb-table>
</template>
<script>
import addQlr from './dialog/addQlr.vue'
import { mapGetters } from 'vuex'
export default {
components: {
addQlr
},
computed: {
...mapGetters(["dictData"]),
},
props: {
tableData: {
type: Array,
default: function () {
return []
}
},
gyfs: {
type: String,
default: '1'
}
},
data () {
return {
key: 0,
dataIndex: 0,
dialog: false,
details: {},
tableDataList: [],
qlrCommonTable: [
{
label: '序号',
type: 'index',
width: '50',
render: (h, scope) => {
return (
<div>
{scope.$index + 1}
</div>
)
}
},
{
prop: "yg",
label: "原告"
},
{
prop: "cfjg",
label: "查封机关"
},
{
prop: "cfwh",
label: "查封文号"
},
{
prop: "cfqssj",
label: "查封开始时间"
},
{
prop: "cfjssj",
label: "查封结束时间"
},
{
prop: "cflxmc",
label: "查封类型"
},
{
prop: "ywrmc",
label: "被执行人"
},
{
prop: "bcfzh",
label: "被查封证号"
},
{
prop: "bdcdyh",
label: "不动产单元号"
},
{
prop: "zl",
label: "坐落"
},
],
column: this.qlrCommonTable
}
},
watch: {
tableData: {
handler: function (val, oldVal) {
let that = this
if (val.length == 0 || !val) {
that.tableDataList = _.cloneDeep([{
sqrmc: '',
dlrzjlx: '',
dlrzjh: '',
fr: ''
}])
} else {
that.tableDataList = _.cloneDeep(val)
}
},
immediate: true,
deep: true
},
gyfs: {
handler (newVal, oldValue) {
let dataList = _.cloneDeep(this.qlrCommonTable)
if (newVal == '1') {
this.column = _.cloneDeep(dataList).slice(1, dataList.length)
} else if ((newVal == '2')) {
this.column = dataList
} else {
this.column = _.cloneDeep(dataList)
this.column.splice(
2, 0, {
prop: "qlbl",
label: "份数"
})
}
},
immediate: true
}
},
methods: {
}
}
</script>
<style scoped lang='scss'>
/deep/.el-table th {
height: 30px !important;
}
/deep/.el-table--small .el-table__cell {
padding: 5px;
}
</style>
<!--
* @Description:
* @Autor: renchao
* @LastEditTime: 2023-10-24 16:08:44
-->
<template>
<div class="clxx">
<!-- 材料预览 -->
<div class="clyl-box">
<div class="menu-tree">
<el-button
type="primary"
native-type="submit"
@click="viewDetail"
style="width: 100%; margin-top: 10px">申请材料目录</el-button>
<div class="item">
材料目录({{ tableData.length }})
<div class="tableList">
<div
style="
text-align: center;
line-height: 20px;
color: black;
font-size: 14px;
"
v-if="tableData.length == 0">
暂无数据
</div>
<div
v-for="(item, index) in tableData"
:key="item.bsmSj"
:class="['child', treeCheckId == item.bsmSj ? 'checked' : '']"
@click="treeClick(item, index)">
<span v-if="item.isrequired == 1" class="required">必选</span>
<span class="item_name">{{ item.sjmc }}</span>
<span class="cl_number" :key="key">({{ item.ys ? item.ys : 0 }})</span>
</div>
</div>
</div>
<el-button
type="primary"
native-type="submit"
style="width: 100%"
@click="handleAdd()"
v-if="ableOperation">新增</el-button>
</div>
<image-preview
ref="imageRef"
:key="imgKey"
v-if="tableData.length > 0"
:previewImg="previewImg"
:ableOperation="ableOperation"
@updateList="updateList"
@nextPriview="nextPriview"
@prevPriview="prevPriview" />
</div>
<clxxAddDialog v-model="isDialog" />
</div>
</template>
<script>
import { mapGetters } from "vuex";
import clxxAddDialog from "../dialog/clxxAddDialog.vue";
import clxxDetailDialog from "../dialog/clxxDetailDialog.vue";
import imagePreview from "@/views/components/imagePreview.vue";
import { InitClml, saveClml, getClmxList } from "@/api/clxx.js";
export default {
components: { clxxAddDialog, imagePreview, clxxDetailDialog },
data () {
return {
imgKey: 0,
//表单是否可操作
ableOperation: true,
isDialog: false,
iclass: "",
// 材料目录选中
treeCheckIndex: 0,
treeCheckId: "",
key: 0,
tableData: [],
previewImg: {
// 收件标识码
bsmSj: "",
bsmSlsq: this.$parent.bsmSlsq,
index: 0,
selectedIndex: 0,
imgList: [],
},
};
},
computed: {
...mapGetters(["dictData"]),
},
created () {
this.clmlInitList(1);
},
computed: {
...mapGetters(["workFresh"]),
},
watch: {
workFresh: {
handler (newVal, oldVal) {
if (newVal) this.clmlInitList(1);
},
},
},
mounted () {
this.ableOperation = this.$parent.ableOperation;
},
methods: {
/**
* @description: 自动预览
* @author: renchao
*/
nextPriview () {
if (this.treeCheckIndex < this.tableData.length) {
this.treeCheckIndex++;
if (this.tableData[this.treeCheckIndex]) {
this.treeCheckId = this.tableData[this.treeCheckIndex].bsmSj;
// 判断页数
let ys = this.tableData[this.treeCheckIndex].ys
this.previewImg.index = 0;
// 获取材料明细
if (ys > 0) {
getClmxList(this.treeCheckId).then(res => {
this.previewImg.imgList = res.result ? res.result : [];
})
} else {
this.previewImg.imgList = []
}
this.previewImg.bsmSj = this.tableData[this.treeCheckIndex].bsmSj;
} else {
this.$message.error('没有最后一张了');
}
}
},
/**
* @description: prevPriview
* @author: renchao
*/
prevPriview () {
if (this.treeCheckIndex >= 1) {
this.treeCheckIndex--;
this.treeCheckId = this.tableData[this.treeCheckIndex].bsmSj;
// 判断页数
let ys = this.tableData[this.treeCheckIndex].ys
if (ys > 0) {
// 获取材料明细
getClmxList(this.treeCheckId).then(res => {
this.previewImg.imgList = res.result ? res.result : [];
this.previewImg.index = this.previewImg.imgList.length - 1;
})
} else {
this.previewImg.imgList = [];
this.previewImg.index = 0
}
this.previewImg.bsmSj = this.tableData[this.treeCheckIndex].bsmSj;
} else {
this.$message.error('没有第一张了');
}
},
/**
* @description: 材料目录明细初始化
* @param {*} type
* @author: renchao
*/
clmlInitList (type) {
//type 1:列表初始化 2:新增材料
return new Promise((resolve) => {
this.unitData = this.$parent.unitData;
var formdata = new FormData();
formdata.append("bsmSlsq", this.$parent.bsmSlsq);
formdata.append("bsmSldy", this.$parent.currentSelectProps.bsmSldy);
InitClml(formdata).then((res) => {
if (res.code == 200) {
resolve(res.code);
if (res.result && res.result.length > 0) {
this.tableData = res.result;
if (type == 1) {
this.treeClick(this.tableData[0], 0);
} else if (type == 2) {
//新增材料后刷新列表焦点置于新增的对象上
this.treeClick(
this.tableData[this.tableData.length - 1],
this.tableData.length - 1
);
}
}
} else {
this.$message.error(res.message);
}
});
});
},
/**
* @description: setChecked
* @param {*} item
* @author: renchao
*/
setChecked (item) {
this.treeCheckId = item.bsmSj;
this.title = item.sjmc;
this.titleYs = 1;
this.titleNum = item.children.length;
this.previewImg.imgList = item.children;
this.previewImg.bsmSj = item.bsmSj;
},
/**
* @description: updateList
* @param {*} val
* @author: renchao
*/
updateList (val) {
let that = this;
if (val.children.length != 0) {
//删除最后一张图片时 val=null
this.tableData.forEach((item) => {
if (item.bsmSj === val.bsmSj) {
item.ys = val.children.length;
}
});
this.previewImg.imgList = _.cloneDeep(val.children);
if (this.previewImg.index == this.previewImg.imgList.length) {
this.previewImg.index = this.previewImg.index - 1;
}
this.key++
} else {
this.previewImg.imgList = [];
this.tableData.forEach((item, index) => {
if (this.treeCheckId == item.bsmSj) {
item.ys = 0;
that.treeCheckIndex = index;
}
});
}
},
/**
* @description: 添加材料目录
* @author: renchao
*/
handleAdd () {
this.isDialog = true;
},
/**
* @description: 新增弹窗保存
* @param {*} data
* @author: renchao
*/
addSave (data) {
let obj = {
bsmSlsq: this.$parent.bsmSlsq,
isrequired: "1",
sjmc: data.clmc,
sjsl: 0,
smzt: "",
ys: 0,
sjlx: data.cllx,
sfxjcl: "1", // 是否必选
sfggcl: data.sfggcl,
};
//是否公共材料
if (data.sfggcl == "0") {
obj["bsmSldy"] = this.$parent.currentSelectProps.bsmSldy;
}
if (this.$route.query?.djywbm == "DJBBL") {
obj.bsmSldy = this.$parent.bsmRepair
}
saveClml(obj).then(async (res) => {
if (res.code == 200) {
let res = await this.clmlInitList(2);
if (res == 200)
this.$message({
message: "新增成功",
type: "success",
});
}
});
},
/**
* @description: 材料目录点击选中
* @param {*} item
* @param {*} index
* @author: renchao
*/
treeClick (item, index) {
this.previewImg.index = 0;
this.treeCheckId = item?.bsmSj;
this.treeCheckIndex = index;
// 获取材料明细
getClmxList(item.bsmSj).then(res => {
this.previewImg.imgList = res.result ? res.result : [];
})
this.previewImg.bsmSj = item?.bsmSj;
if (this.$refs.imageRef) {
this.$refs.imageRef.initialIndex = 0
}
this.imgKey++
},
/**
* @description: 小图片点击
* @param {*} item
* @param {*} index
* @author: renchao
*/
imgClick (item, index) {
this.showImg = item;
this.titleYs = index + 1;
},
//查看明细
async viewDetail () {
await this.clmlInitList();
this.$store.dispatch("user/reWorkFresh", false);
this.$popupDialog(
"申请材料目录",
"workflow/components/dialog/clxxDetailDialog",
{
data: this.tableData,
bsmSldy: this.$parent.currentSelectProps.bsmSldy,
unitData: this.$parent.unitData,
ableOperation: this.$parent.ableOperation,
bsmRepair: this.$parent.bsmRepair
},
"60%",
true
)
},
//设置tableData
setTableData (tableData) {
this.$nextTick((res) => {
this.tableData = tableData;
})
}
}
}
</script>
<style scoped lang="scss">
@import "~@/styles/mixin.scss";
.active {
background: $light-blue !important;
color: #fff;
}
.required {
font-size: 12px;
color: $pink;
float: left;
}
.cl_number {
width: 30px;
}
.clxx {
width: 100%;
display: flex;
padding-left: 5px;
height: calc(100vh - 125px);
.left {
display: flex;
flex-direction: column;
justify-content: space-between;
.item {
width: 28px;
height: 49%;
@include flex-center;
background-color: #e4e7ed;
border-bottom-right-radius: 10px;
padding: 5px;
cursor: pointer;
transition: all 0.3s;
&:hover {
@extend .active;
}
}
}
.clmlmx-box {
margin: 0 auto;
.title {
text-align: center;
height: 60px;
line-height: 60px;
border: 1px solid #dfe6ec;
font-size: 20px;
background: #81d3f81a;
margin-bottom: -1px;
}
}
.clyl-box {
width: 100%;
height: 100%;
display: flex;
.tableList {
margin-top: 10px;
}
.menu-tree {
width: 20%;
min-width: 160px;
height: 100%;
font-size: 14px;
border-right: 1px dotted #d9d9d9;
padding: 0 10px;
.item {
line-height: 30px;
padding-top: 5px;
border-bottom: 1px solid #e8e8e8;
font-size: 16px;
text-align: center;
color: $light-blue;
.itemIcon {
float: right;
line-height: 60px;
cursor: pointer;
}
.child {
line-height: 32px;
border-bottom: 1px solid #e8e8e8;
padding-left: 10px;
color: #6b6b6b;
cursor: pointer;
box-sizing: border-box;
border-radius: 6px;
line-height: 20px;
transition: all 0.3s;
padding: 8px 0;
overflow: hidden;
display: flex;
justify-content: space-between;
}
.item_name {
flex: 1;
font-size: 14px;
display: flex;
justify-content: center;
}
.child:hover {
color: $light-blue;
transform: scale(1.1);
}
.checked {
border: 1px solid $light-blue;
color: $light-blue;
box-sizing: border-box;
}
}
}
.clyl-img {
width: 75%;
height: 100%;
background: #f3f4f7;
margin: 0 auto;
position: relative;
}
}
}
</style>
<!--
* @Description:
* @Autor: renchao
* @LastEditTime: 2023-09-19 10:15:07
-->
<template>
<dialogBox title="新建材料信息" width="25%" isMain v-model="myValue" @closeDialog="closeDialog" @submitForm="handleSubmit"
:isFullscreen="false">
<el-form :model="ruleForm" :rules="rules" ref="ruleForm" label-width="100px">
<el-row>
<el-col :span="24">
<el-form-item label="材料类型" prop="cllx">
<el-select v-model="ruleForm.cllx" class="width100" placeholder="请选择">
<el-option v-for="item in dictData['A40']" :key="item.dcode" :label="item.dname" :value="item.dcode">
</el-option>
</el-select>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="20">
<el-col :span="24">
<el-form-item label="材料名称" prop="clmc">
<el-input v-model="ruleForm.clmc"></el-input>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="20">
<el-col :span="24">
<el-form-item
label="是否公共材料">
<el-radio-group
v-model="ruleForm.sfggcl">
<el-radio label="1"></el-radio>
<el-radio label="0"></el-radio>
</el-radio-group>
</el-form-item>
</el-col>
</el-row>
</el-form>
</dialogBox>
</template>
<script>
import { mapGetters } from "vuex";
export default {
props: {
value: { type: Boolean, default: false },
},
data () {
return {
myValue: this.value,
ruleForm: {
cllx: "",
clmc: "",
sfggcl: "0"
},
rules: {
cllx: [
{ required: true, message: '请选择材料类型', trigger: 'change' }
],
clmc: [
{ required: true, message: '请输入材料名称', trigger: 'blur' }
],
clbm: [
{ required: true, message: '请输入材料编码', trigger: 'blur' }
]
}
}
},
computed: {
...mapGetters(["dictData"]),
},
watch: {
value (val) {
this.myValue = val;
},
},
methods: {
/**
* @description: closeDialog
* @author: renchao
*/
closeDialog () {
this.$emit("input", false);
this.ruleForm = {
cllx: "",
clmc: "",
sfggcl: "0"
}
},
/**
* @description: handleSubmit
* @author: renchao
*/
handleSubmit () {
this.$refs['ruleForm'].validate((valid) => {
if (valid) {
this.$parent.addSave(this.ruleForm);
this.ruleForm = {
cllx: "",
clmc: "",
sfggcl: "0"
}
this.$emit("input", false);
} else {
return false;
}
})
}
}
};
</script>
<style scoped lang="scss">
.submit-button {
text-align: center;
height: 52px;
padding-top: 10px;
background-color: #fff;
}
</style>
<!--
* @Description:
* @Autor: renchao
* @LastEditTime: 2023-10-24 17:16:18
-->
<template>
<div class="clmlmx-box">
<lb-table :column="column" :key="key" row-key="bsmSj" ref="listTable" :heightNumSetting="true" :calcHeight="600"
:pagination="false" :data="tableData">
</lb-table>
<div class="text-center">
<el-button @click="$popupCacel">取消</el-button>
<el-button type="primary" @click="handleSubmit" :loading="loading" v-if="formData.ableOperation && tableData.length>0">保存</el-button>
</div>
</div>
</template>
<script>
import Vue from 'vue'
import Sortable from 'sortablejs'
import store from '@/store/index.js'
import { updateClml } from "@/api/clxx.js";
export default {
props: {
formData: {
type: Object,
default: () => {
return {}
}
}
},
data () {
return {
loading: false,
sortable: null,
column: [
{
prop: "isrequired",
label: "是否必选",
width: "80",
render: (h, scope) => {
if (scope.row.isrequired === "1") {
return (
<div>
<span>必选</span>
</div>
);
}
else {
return (
<div>
<span>可选</span>
</div>
)
}
}
},
{
label: "材料名称",
render: (h, scope) => {
return (
(this.formData.ableOperation && scope.row.sfxjcl == '1') ?
<el-input value={scope.row.sjmc} onInput={(val) => { scope.row.sjmc = val }}></el-input> : <span>{scope.row.sjmc}</span>
)
}
},
{
label: "材料类型",
width: "110",
render: (h, scope) => {
return (
this.formData.ableOperation ?
<el-select value={scope.row.sjlx}
onChange={(val) => { scope.row.sjlx = val }}>
{
store.getters.dictData['A40'].map(option => {
return (
<el-option label={option.dname} value={option.dcode}></el-option>
)
})
}
</el-select> : <span>{this.dicStatus(scope.row.sjlx, "A40")}</span>
)
}
},
{
prop: "sjsl",
label: "收件数量",
width: "80",
render: (h, scope) => {
return (
(this.formData.ableOperation) ?
<el-input value={scope.row.sjsl} onInput={(val) => { scope.row.sjsl = val }}></el-input> : <span>{
scope.row.sjsl
}</span>
)
}
},
{
label: "扫描时间",
width: "140",
render: (h, scope) => {
return (
<span>{scope.row.sjsj}</span>
)
}
},
{
label: "页数",
width: "60",
render: (h, scope) => {
if (scope.row.ys && scope.row.ys > 0) {
return (
<div>
<span>{scope.row.ys}</span>
</div>
);
} else {
return (
<div>
<span>0</span>
</div>
);
}
},
},
{
label: "是否新建材料",
width: "80",
render: (h, scope) => {
if (scope.row.sfxjcl && scope.row.sfxjcl == '1') {
return (
<span></span>
);
} else {
return (
<span></span>
);
}
},
},
{
label: "操作",
width: "100",
render: (h, scope) => {
return (
<el-button
type="text"
icon="el-icon-delete"
disabled={!(scope.row.ys == 0 && scope.row.sfxjcl == '1') || !this.formData.ableOperation}
onClick={() => {
this.handleDelete(scope.$index, scope.row);
}}
>
删除
</el-button>
)
}
}
],
key: 0,
tableData: []
}
},
watch: {
'formData.data': {
handler: function (val, oldVal) {
this.tableData = _.cloneDeep(val)
},
immediate: true,
deep: true
}
},
mounted () {
this.initSort()
},
beforeDestroy () {
if (this.sortable) {
this.sortable.destroy();
}
},
methods: {
handleSubmit () {
this.loading = true
store.dispatch('user/reWorkFresh', false)
updateClml(this.tableData, this.formData.bsmSldy, Vue.prototype.$currentRoute.query.bsmSlsq).then(res => {
this.loading = false
if (res.code == 200) {
this.$message({
message: '保存成功',
type: 'success'
})
this.$popupCacel()
store.dispatch('user/reWorkFresh', true)
}
}).catch(() => {
this.loading = false
})
},
/**
* @description: 材料目录删除
* @param {*} index
* @param {*} row
*/
handleDelete (index, row) {
this.$confirm('此操作将永久删除该 是否继续?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
}).then(() => {
this.tableData.splice(index, 1);
}).catch(() => {
this.$message({
type: 'info',
message: '已取消删除'
})
})
},
initSort () {
const el = this.$refs.listTable.$el.querySelectorAll('.el-table__body-wrapper > table > tbody')[0]
this.sortable = Sortable.create(el, {
ghostClass: 'sortable-ghost',
setData: function (dataTransfer) {
dataTransfer.setData('Text', '')
},
onEnd: evt => {
const targetRow = this.tableData.splice(evt.oldIndex, 1)[0];
this.tableData.splice(evt.newIndex, 0, targetRow);
}
})
},
dicStatus (val, code) {
let data = store.getters.dictData[code],
name = '暂无'
if (data) {
data.map((item) => {
if (item.dcode == val) {
name = item.dname
}
})
return name
}
}
}
}
</script>
<style scoped lang='scss'>
@import "~@/styles/mixin.scss";
.clmlmx-box {
margin: 0 auto;
.title {
text-align: center;
height: 60px;
line-height: 60px;
border: 1px solid #dfe6ec;
font-size: 20px;
background: #81d3f81a;
margin-bottom: -1px;
}
}
</style>
<!--
* @Description:
* @Autor: renchao
* @LastEditTime: 2023-05-04 14:13:28
-->
<template>
<lb-table :column="tableData.columns" heightNumSetting :pagination="false" :key="key" :data="tableData.data">
</lb-table>
</template>
<script>
import { mapGetters } from 'vuex'
import { getSzRecordList } from "@/api/bdcqz.js";
import table from "@/utils/mixin/table";
import { szxxdatas } from "../../javascript/szxxdata";
export default {
components: {
},
mixins: [table],
computed: {
...mapGetters(["dictData"]),
},
props: {
formData: {
type: Object,
default: {}
}
},
data () {
return {
key: 0,
dataIndex: 0,
dialog: false,
details: {},
tableData: {
total: 0,
columns: szxxdatas.columns(),
data: [],
},
}
},
mounted () {
this.query()
},
methods: {
/**
* @description: query
* @author: renchao
*/
query () {
getSzRecordList({ bsmBdcqz: this.formData.bsmBdcqz }).then(res => {
if (res.code == 200) {
this.tableData.data = res.result;
this.key++
}
})
}
}
}
</script>
<style scoped lang='scss'>
</style>
<!--
* @Description:
* @Autor: renchao
* @LastEditTime: 2023-11-23 17:20:01
-->
<template>
<iframe :src="ip +'/txdw/#/' + formData.bsmZd" frameborder="0" style="width: 100%; height:710px;"></iframe>
</template>
<script>
export default {
props: {
formData: {
type: Object,
default: () => {
return {}
}
}
},
data () {
return {
ip: window._config.services.management
}
}
}
</script>
\ No newline at end of file
<!--
* @Description:
* @Autor: renchao
* @LastEditTime: 2024-02-06 13:23:36
-->
<template>
<div>
<div class="zsdy-content" v-Loading="loading">
<el-form
:model="ruleForm"
ref="ruleForm"
label-width="120px">
<el-form-item label="印刷序列号:" prop="ysxlh">
<el-row>
<el-col :span="18">
<el-select v-model="ruleForm.ysxlh" @change="handleSelect" :disabled="disabled" placeholder="请选择">
<el-option
v-for="item in ysxlh"
:key="item.ysxlh"
:label="item.ysxlh"
:value="item.ysxlh">
</el-option>
</el-select>
</el-col>
<el-col :span="4" v-if="this.formData.bdcqzlx==1">
<el-tabs v-model="activeTitle">
<el-tab-pane label="第一页" name="title1"></el-tab-pane>
<el-tab-pane label="第二页" name="title2"></el-tab-pane>
</el-tabs>
</el-col>
<el-col :span="2" v-if="this.formData.ysxlh" style="float:right">
<el-button type="primary" @click="handleZF" v-if="disabled">作废</el-button>
</el-col>
</el-row>
</el-form-item>
</el-form>
<div class="zs-content">
<canvas ref="zs1" width="1024" v-show="this.formData.bdcqzlx==1 && activeTitle=='title1'" height="739"></canvas>
<canvas ref="zs" width="1024" v-show="this.formData.bdcqzlx==1 && activeTitle=='title2'" height="739"></canvas>
<canvas ref="zm" width="1169" v-show="this.formData.bdcqzlx==2" height="828"></canvas>
</div>
</div>
<!-- 打印模板需要此模块 -->
<object id="LODOP_OB" classid="clsid:2105C259-1E0C-4534-8141-A753534CB4CA" v-show="false">
<embed id="LODOP_EM" type="application/x-print-lodop" width="1180" height="720" pluginspage="install_lodop32.exe" />
</object>
<div class="text-center pt-10">
<el-button @click="$popupCacel">取消</el-button>
<el-button type="primary" @click="handlePrint" v-if="disabled">打印</el-button>
<el-button type="primary" @click="handleSubmit" v-else>确定</el-button>
</div>
<el-dialog title="证书作废" :visible.sync="invalidDiglog" width="40%" :modal-append-to-body="false" top="30vh">
<div class="invalid-diglog">
<div class="invalid-title">
<i class="el-icon-question invalid-icon"></i>
<div class="invalid-body">您确定作废证书并再次打印?印刷序列号{{bdcqz.ysxlh}}</div>
</div>
<div class="invalid-reson">作废原因:</div>
<el-input v-model="zfyy" placeholder="请输入作废原因" type="textarea" :rows="4"></el-input>
<div class="text-center pt-10">
<el-button @click="closeInvalidDiglog">取 消</el-button>
<el-button type="primary" @click="confirmInvalid">确 定</el-button>
</div>
</div>
</el-dialog>
</div>
</template>
<script>
import QRCode from 'qrcode'
import store from '@/store/index.js'
import { datas } from "../../javascript/zsyl.js";
import { getPrintTemplateByCode } from "@/api/print";
import { getLodop } from "@/utils/LodopFuncs"
import { readYsxlh, certificate, getBdcqzDetail, invalidCertificate } from "@/api/bdcqz.js";
export default {
props: {
formData: {
type: Object,
default: () => {
return {}
}
}
},
data () {
return {
activeTitle: 'title1',
// 详细信息
bdcqz: {},
key: 0,
disabled: false,
// 不动产证书图片地址
imgSrc1: require('@/image/bdcqz/bdcqzs1.jpg'),
imgSrc: require('@/image/bdcqz/bdcqzs2.jpg'),
bdczmSrc: require('@/image/bdcqz/bdczm.jpg'),
loading: false,
//印刷序列号集合
ysxlh: [],
//列名称对象
columns: [],
//tab选择绑定值
activeName: '',
invalidDiglog: false,
zfyy: "",
ruleForm: {
bsmBdcqz: "",
szmc: "不动产权证书",
bdcqzlx: "",
szzh: "",
ysxlh: ""
}
}
},
mounted () {
store.dispatch('user/refreshPage', false)
this.columns = datas.columns()
this.ysxlhList()
// 获取详细信息
this.getDetail()
if (this.formData.ysxlh) {
this.disabled = true
} else {
this.disabled = false
}
},
methods: {
/**
* @description: 获取详细信息
* @author: renchao
*/
getDetail () {
this.loading = true
getBdcqzDetail(this.formData.bsmBdcqz).then(res => {
this.bdcqz = res.result
this.loading = false
if (this.bdcqz.ysxlh) this.ruleForm.ysxlh = this.bdcqz.ysxlh
if (this.bdcqz.bdcqzlx == 1) {
this.drawTextOnImage()
} else {
this.drawTextzmImage()
}
})
},
/**
* @description: 获取印刷序列号列表
* @author: renchao
*/
ysxlhList () {
readYsxlh({ zslx: this.formData.bdcqzlx }).then((res) => {
if (res.code === 200) {
this.ysxlh = res.result;
}
})
},
/**
* @description: handleSelect
* @param {*} val
* @author: renchao
*/
handleSelect (val) {
this.bdcqz.ysxlh = this.ruleForm.ysxlh
if (this.bdcqz.bdcqzlx == 1) {
this.drawTextOnImage()
} else {
this.drawTextzmImage()
}
},
/**
* @description: closeInvalidDiglog
* @author: renchao
*/
closeInvalidDiglog () {
this.zfyy = "";
this.invalidDiglog = false
},
/**
* @description: handleZF
* @author: renchao
*/
handleZF () {
this.invalidDiglog = true
},
/**
* @description: 作废缮证信息
* @author: renchao
*/
confirmInvalid () {
store.dispatch('user/reWorkFresh', false)
invalidCertificate({ bsmBdcqz: this.bdcqz.bsmBdcqz, zfyy: this.zfyy }).then((res) => {
if (res.code === 200) {
this.$message.success("作废成功");
this.disabled = false
this.invalidDiglog = false;
this.zfyy = ''
this.ruleForm.ysxlh = ''
this.bdcqz.ysxlh = ''
if (this.bdcqz.bdcqzlx == 1) {
this.drawTextOnImage()
} else {
this.drawTextzmImage()
}
store.dispatch('user/reWorkFresh', true)
} else {
this.$message.error(res.message);
}
})
},
/**
* @description: 不动产证书
* @author: renchao
*/
drawTextOnImage1 () {
const canvas = this.$refs.zs1;
const context = canvas.getContext('2d');
const image = new Image();
image.onload = () => {
context.drawImage(image, 0, 0);
context.font = '18px 楷体';
context.fillStyle = '#000000';
let date = this.bdcqz.djsj.split(' ')[0].split('/');
let nian = date[0]
let yue = date[1]
let ri = date[2]
this.bdcqz.nian = nian
this.bdcqz.yue = yue
this.bdcqz.ri = ri
context.fillText(nian ? nian : '', 780, 499);
context.fillText(yue ? yue : '', 840, 499);
context.fillText(ri ? ri : '', 885, 499);
QRCode.toDataURL(this.bdcqz.bdcqzh, { margin: 0 })
.then(url => {
const qrImage = new Image();
this.bdcqz.qrImage = url; // 将二维码图片的 URL 存储到 bdcqz 对象的 qrImage 属性中
qrImage.onload = () => {
context.drawImage(qrImage, 670, 400, 100, 100);
};
qrImage.src = url;
})
.catch(error => {
console.error(error);
});
context.fillText(this.bdcqz.bdcqzbm ? this.bdcqz.bdcqzbm : '', 745, 633);
};
image.src = this.imgSrc1;
},
drawTextOnImage () {
this.drawTextOnImage1()
function getByteLen (val) {
var len = 0;
if (!val) return len;
for (var i = 0; i < val.length; i++) {
var length = val.charCodeAt(i);
if (length >= 0 && length <= 128) {
len += 1;
} else {
len += 2;
}
}
return len;
}
const canvas = this.$refs.zs;
const context = canvas.getContext('2d');
const image = new Image();
image.onload = () => {
context.drawImage(image, 0, 0);
context.font = '18px 楷体';
context.fillStyle = '#000000';
context.fillText(this.bdcqz.sjjc ? this.bdcqz.sjjc : '', 60, 56);
context.fillText(this.bdcqz.djnd ? this.bdcqz.djnd : '', 113, 56);
context.fillText(this.bdcqz.sxqc ? this.bdcqz.sxqc : '', 180, 56);
context.fillText(this.bdcqz.sxh ? this.bdcqz.sxh : '', 370, 56);
context.fillText(this.bdcqz.qlr ? this.bdcqz.qlr : '', 129, 97);
context.fillText(this.bdcqz.gyqk ? this.bdcqz.gyqk : '', 129, 136);
this.bdcdyh = this.bdcqz.bdcdyh.slice(0, 6) + ' ' + this.bdcqz.bdcdyh.slice(6, 12) + ' ' +
this.bdcqz.bdcdyh.slice(12, 19) + ' ' + this.bdcqz.bdcdyh.slice(19, this.bdcqz.bdcdyh.length)
context.fillText(this.bdcdyh ? this.bdcdyh : '', 129, 223);
context.fillText(this.bdcqz.qllx ? this.bdcqz.qllx : '', 129, 263);
context.fillText(this.bdcqz.qlxz ? this.bdcqz.qlxz : '', 129, 303);
context.fillText(this.bdcqz.yt ? this.bdcqz.yt : '', 129, 346);
let lines6 = this.bdcqz.mj ? this.bdcqz.mj.split(' ') : [];
if (getByteLen(this.bdcqz.mj) > 37) {
lines6.forEach((line, index) => {
const y = 378 + (index * 27); // 每行文本的垂直位置
let currentLine = '';
let arr = [];
for (let word of line) {
const testLine = currentLine + word;
const lineWidth = context.measureText(testLine).width;
if (lineWidth <= 336) {
currentLine = testLine;
} else {
arr.push(currentLine);
currentLine = word;
}
}
arr.push(currentLine);
arr.forEach((line, index) => {
context.fillText(line, 129, y + (index * 20)); // 调整行高
})
})
} else {
lines6.forEach((line, index) => {
const y = 386 + (index * 27); // 每行文本的垂直位置
let currentLine = '';
let arr = [];
for (let word of line) {
const testLine = currentLine + word;
const lineWidth = context.measureText(testLine).width;
if (lineWidth <= 336) {
currentLine = testLine;
} else {
arr.push(currentLine);
currentLine = word;
}
}
arr.push(currentLine);
arr.forEach((line, index) => {
context.fillText(line, 129, y + (index * 20)); // 调整行高
})
})
}
// 权利其他状态
const maxWidth = 332; // 最大宽度限制
let lines = this.bdcqz.qlqtzk ? this.bdcqz.qlqtzk.split('\n').filter(i => i && i.trim()) : [];
for (let i = 0; i < lines.length; i++) {
let num = Math.ceil(getByteLen(lines[i]) / 37)
if (getByteLen(lines[i]) > 37) {
let currentLine = '';
let arr = [];
for (let word of lines[i]) {
const testLine = currentLine + word;
const lineWidth = context.measureText(testLine).width;
if (lineWidth <= maxWidth) {
currentLine = testLine;
} else {
arr.push(currentLine);
currentLine = word;
}
}
arr.push(currentLine);
if (i > 0) {
arr.forEach((line, index) => {
context.fillText(line, 129, 495 + (29 * (i - 1)) + 4 * num + (index * 14)); // 调整行高
})
} else {
arr.forEach((line, index) => {
context.fillText(line, 129, 493 + (26 * (i - 1)) + (index * 14)); // 调整行高
})
}
} else {
if (i > 0) {
context.fillText(lines[i] ? lines[i] : '', 129, 500 + 4 * num + (29 * (i - 1)));
} else {
context.fillText(lines[i] ? lines[i] : '', 129, 505 + (27 * (i - 1)));
}
}
}
let lines1 = this.bdcqz.fj ? this.bdcqz.fj.split('\n').filter(i => i && i.trim()) : [];
lines1.forEach((line, index) => {
const y = 100 + (index * 30); // 每行文本的垂直位置
let currentLine = '';
let arr = [];
for (let word of line) {
const testLine = currentLine + word;
const lineWidth = context.measureText(testLine).width;
if (lineWidth <= 395) {
currentLine = testLine;
} else {
arr.push(currentLine);
currentLine = word;
}
}
arr.push(currentLine);
arr.forEach((line, index) => {
context.fillText(line, 580, y + (index * 30)); // 调整行高
})
})
let lines3 = this.bdcqz.syqx ? this.bdcqz.syqx.split(' ') : [];
if (getByteLen(this.bdcqz.syqx) > 37) {
lines3.forEach((line, index) => {
const y = 423 + (index * 27); // 每行文本的垂直位置
let currentLine = '';
let arr = [];
for (let word of line) {
const testLine = currentLine + word;
const lineWidth = context.measureText(testLine).width;
if (lineWidth <= 330) {
currentLine = testLine;
} else {
arr.push(currentLine);
currentLine = word;
}
}
arr.push(currentLine);
arr.forEach((line, index) => {
context.fillText(line, 129, y + (index * 20)); // 调整行高
})
})
} else {
lines3.forEach((line, index) => {
const y = 430 + (index * 27); // 每行文本的垂直位置
let currentLine = '';
let arr = [];
for (let word of line) {
const testLine = currentLine + word;
const lineWidth = context.measureText(testLine).width;
if (lineWidth <= 315) {
currentLine = testLine;
} else {
arr.push(currentLine);
currentLine = word;
}
}
arr.push(currentLine);
arr.forEach((line, index) => {
context.fillText(line, 129, y + (index * 20)); // 调整行高
})
})
}
let lines2 = this.bdcqz.zl ? this.bdcqz.zl.split(' ') : [];
if (getByteLen(this.bdcqz.zl) > 37) {
lines2.forEach((line, index) => {
const y = 170 + (index * 20); // 每行文本的垂直位置
let currentLine = '';
let arr = [];
for (let word of line) {
const testLine = currentLine + word;
const lineWidth = context.measureText(testLine).width;
if (lineWidth <= 336) {
currentLine = testLine;
} else {
arr.push(currentLine);
currentLine = word;
}
}
arr.push(currentLine);
arr.forEach((line, index) => {
context.fillText(line, 129, y + (index * 20)); // 调整行高
})
})
} else {
lines2.forEach((line, index) => {
const y = 180 + (index * 20); // 每行文本的垂直位置
let currentLine = '';
let arr = [];
for (let word of line) {
const testLine = currentLine + word;
const lineWidth = context.measureText(testLine).width;
if (lineWidth <= 336) {
currentLine = testLine;
} else {
arr.push(currentLine);
currentLine = word;
}
}
arr.push(currentLine);
arr.forEach((line, index) => {
context.fillText(line, 129, y + (index * 20)); // 调整行高
})
})
}
}
image.src = this.imgSrc
},
/**
* @description: 不动产证明
* @author: renchao
*/
drawTextzmImage () {
function getByteLen (val) {
var len = 0;
if (!val) return len;
for (var i = 0; i < val.length; i++) {
var length = val.charCodeAt(i);
if (length >= 0 && length <= 128) {
len += 1;
} else {
len += 2;
}
}
return len;
}
const canvas = this.$refs.zm;
const context = canvas.getContext('2d');
const image = new Image();
image.onload = () => {
context.drawImage(image, 0, 0);
context.font = '18px 楷体';
context.fillStyle = '#000000';
// ysxlh
context.fillText(this.bdcqz.ysxlh ? this.bdcqz.ysxlh : '', 280, 712);
// djsj
if (this.bdcqz.djsj) {
let djsjList = this.bdcqz.djsj.split(' ')[0].split('/')
context.fillText(djsjList[0] ? djsjList[0] : '', 327, 580);
context.fillText(djsjList[1] ? djsjList[1] : '', 393, 580);
context.fillText(djsjList[2] ? djsjList[2] : '', 443, 580);
}
context.fillText(this.bdcqz.sjjc ? this.bdcqz.sjjc : '', 620, 125);
context.fillText(this.bdcqz.djnd ? this.bdcqz.djnd : '', 665, 125);
// context.fillText(this.bdcqz.sxqc ? this.bdcqz.sxqc : '', 750, 125);
if (getByteLen(this.bdcqz.sxqc) > 14) {
const originalFont = context.font;
// 设置新的字体大小
context.font = '14px 楷体'; // 替换为你想要的字体和大小
// 绘制 bdcdyh
context.fillText(this.bdcqz.sxqc ? this.bdcqz.sxqc : '', 725, 125);
// 恢复原始字体设置
context.font = originalFont;
} else {
context.fillText(this.bdcqz.sxqc ? this.bdcqz.sxqc : '', 755, 125);
}
context.fillText(this.bdcqz.sxh ? this.bdcqz.sxh : '', 960, 123);
context.fillText(this.bdcqz.zmqlhsx ? this.bdcqz.zmqlhsx : '', 775, 180);
// context.fillText(this.bdcqz.qlr ? this.bdcqz.qlr : '', 775, 228);
// 权利人
let qlrlines = this.bdcqz.qlr
if (getByteLen(this.bdcqz.qlr) > 32) {
let currentLine = '';
let arr = [];
for (let word of qlrlines) {
const testLine = currentLine + word;
const lineWidth = context.measureText(testLine).width;
if (lineWidth <= 295) {
currentLine = testLine;
} else {
arr.push(currentLine);
currentLine = word;
}
}
arr.push(currentLine); // 将最后一行添加到数组
// 绘制所有行
for (let i = 0; i < arr.length; i++) {
context.fillText(arr[i], 775, 218 + i * 20); // lineHeight 为行高
}
} else {
context.fillText(this.bdcqz.qlr ? this.bdcqz.qlr : '', 775, 228);
}
// 义务人
// context.fillText(this.bdcqz.ywr ? this.bdcqz.ywr : '', 775, 275);
let ywrlines = this.bdcqz.ywr
if (getByteLen(this.bdcqz.ywr) > 32) {
let currentLine = '';
let arr = [];
for (let word of ywrlines) {
const testLine = currentLine + word;
const lineWidth = context.measureText(testLine).width;
if (lineWidth <= 295) {
currentLine = testLine;
} else {
arr.push(currentLine);
currentLine = word;
}
}
arr.push(currentLine); // 将最后一行添加到数组
// 绘制所有行
for (let i = 0; i < arr.length; i++) {
context.fillText(arr[i], 775, 268 + i * 20); // lineHeight 为行高
}
} else {
context.fillText(this.bdcqz.ywr ? this.bdcqz.ywr : '', 775, 275);
}
let lines2 = this.bdcqz.zl ? this.bdcqz.zl.split(' ') : [];
if (getByteLen(this.bdcqz.zl) > 32) {
lines2.forEach((line, index) => {
const y = 315 + (index * 20); // 每行文本的垂直位置
let currentLine = '';
let arr = [];
for (let word of line) {
const testLine = currentLine + word;
const lineWidth = context.measureText(testLine).width;
if (lineWidth <= 295) {
currentLine = testLine;
} else {
arr.push(currentLine);
currentLine = word;
}
}
arr.push(currentLine);
arr.forEach((line, index) => {
context.fillText(line, 775, y + (index * 20)); // 调整行高
})
})
} else {
lines2.forEach((line, index) => {
const y = 325 + (index * 20); // 每行文本的垂直位置
let currentLine = '';
let arr = [];
for (let word of line) {
const testLine = currentLine + word;
const lineWidth = context.measureText(testLine).width;
if (lineWidth <= 295) {
currentLine = testLine;
} else {
arr.push(currentLine);
currentLine = word;
}
}
arr.push(currentLine);
arr.forEach((line, index) => {
context.fillText(line, 775, y + (index * 20)); // 调整行高
})
})
}
// bdcdyh
this.bdcdyh = this.bdcqz.bdcdyh.slice(0, 6) + ' ' + this.bdcqz.bdcdyh.slice(6, 12) + ' ' +
this.bdcqz.bdcdyh.slice(12, 19) + ' ' + this.bdcqz.bdcdyh.slice(19, this.bdcqz.bdcdyh.length)
// 保存当前字体设置
const originalFont = context.font;
// 设置新的字体大小
context.font = '16px 楷体'; // 替换为你想要的字体和大小
// 绘制 bdcdyh
context.fillText(this.bdcdyh ? this.bdcdyh : '', 775, 373);
// 恢复原始字体设置
context.font = originalFont;
// qlqtzk
function getByteLenBdcdy (val) {
var encoder = new TextEncoder('utf-8');
return encoder.encode(val).length;
}
const maxWidth = 290; // 最大宽度限制
let lines = this.bdcqz.qlqtzk ? this.bdcqz.qlqtzk.split('\n').filter(i => i && i.trim()) : [];
let bdcdyNum = Math.ceil(getByteLenBdcdy(lines[0]) / 43)
// 单独处理不动产单元号
let linesBdcdy = lines[0] ? lines[0].split(' ') : [];
if (getByteLenBdcdy(lines[0]) > 43) {
linesBdcdy.forEach((line, index) => {
const y = 412 + (index * 17); // 每行文本的垂直位置
let currentLine = '';
let arr = [];
for (let word of line) {
const testLine = currentLine + word;
const lineWidth = context.measureText(testLine).width;
if (lineWidth <= maxWidth) {
currentLine = testLine;
} else {
arr.push(currentLine);
currentLine = word;
}
}
arr.push(currentLine);
arr.forEach((line, index) => {
context.fillText(line, 770, y + (index * 17)); // 调整行高
})
})
} else {
linesBdcdy.forEach((line, index) => {
const y = 418 + (index * 17); // 每行文本的垂直位置
let currentLine = '';
let arr = [];
for (let word of line) {
const testLine = currentLine + word;
const lineWidth = context.measureText(testLine).width;
if (lineWidth <= maxWidth) {
currentLine = testLine;
} else {
arr.push(currentLine);
currentLine = word;
}
}
arr.push(currentLine);
arr.forEach((line, index) => {
context.fillText(line, 770, y + (index * 17)); // 调整行高
})
})
}
for (let i = 1; i < lines.length; i++) {
let num = Math.ceil(getByteLen(lines[i]) / 32)
if (getByteLen(lines[i]) > 32) {
let currentLine = '';
let arr = [];
for (let word of lines[i]) {
const testLine = currentLine + word;
const lineWidth = context.measureText(testLine).width;
if (lineWidth <= maxWidth) {
currentLine = testLine;
} else {
arr.push(currentLine);
currentLine = word;
}
}
arr.push(currentLine);
if (i > 0) {
arr.forEach((line, index) => {
context.fillText(line, 770, 408 + (bdcdyNum * 15) + (24 * (i - 1)) + 5 * num + (index * 17)); // 调整行高
})
} else {
arr.forEach((line, index) => {
context.fillText(line, 770, 408 + (bdcdyNum * 15) + (24 * (i - 1)) + (index * 17)); // 调整行高
})
}
} else {
if (i > 0) {
context.fillText(lines[i] ? lines[i] : '', 770, 417 + (bdcdyNum * 15) + 6 * num + (25 * (i - 1)));
} else {
context.fillText(lines[i] ? lines[i] : '', 770, 417 + (bdcdyNum * 15) + (25 * (i - 1)));
}
}
}
// fj
let lines1 = this.bdcqz.fj ? this.bdcqz.fj.split('\n').filter(i => i && i.trim()) : [];
for (let i = 0; i < lines1.length; i++) {
let num = Math.ceil(getByteLen(lines1[i]) / 37)
if (getByteLen(lines1[i]) > 37) {
let currentLine = '';
let arr = [];
for (let word of lines1[i]) {
const testLine = currentLine + word;
const lineWidth = context.measureText(testLine).width;
if (lineWidth <= maxWidth) {
currentLine = testLine;
} else {
arr.push(currentLine);
currentLine = word;
}
}
arr.push(currentLine);
if (i > 0) {
arr.forEach((line, index) => {
context.fillText(line, 770, 605 + (24 * (i - 1)) + 5 * num + (index * 17)); // 调整行高
})
} else {
arr.forEach((line, index) => {
context.fillText(line, 770, 605 + (24 * (i - 1)) + (index * 17)); // 调整行高
})
}
} else {
if (i > 0) {
context.fillText(lines1[i] ? lines1[i] : '', 770, 616 + 6 * num + (25 * (i - 1)));
} else {
context.fillText(lines1[i] ? lines1[i] : '', 770, 616 + (25 * (i - 1)));
}
}
}
}
image.src = this.bdczmSrc;
},
/**
* @description: 打印
* @author: renchao
*/
handlePrint () {
let that = this
if (this.ruleForm.ysxlh == '') {
this.$message.error('请选择印刷序列号');
return;
}
store.dispatch('user/reWorkFresh', false)
if (this.bdcqz.bdcqzlx == 1) {
if (this.activeTitle == 'title1') {
getPrintTemplateByCode({ tmpno: 'zsdy1' }).then(resInfo => {
if (resInfo.code == 200) {
//打开模板设计
let LODOP = getLodop(document.getElementById('LODOP_OB'), document.getElementById('LODOP_EM'));
LODOP.ADD_PRINT_DATA("ProgramData", resInfo.result.tmpcontent); //装载模板
console.log(that.bdcqz);
for (let key in that.bdcqz) {
LODOP.SET_PRINT_STYLEA(key, "CONTENT", that.bdcqz[key]);
}
LODOP.PREVIEW();
} else {
that.$message.error(resInfo.message)
}
that.$popupCacel()
//刷新列表
store.dispatch('user/reWorkFresh', true)
})
} else {
getPrintTemplateByCode({ tmpno: 'zsdy' }).then(resInfo => {
if (resInfo.code == 200) {
//打开模板设计
let LODOP = getLodop(document.getElementById('LODOP_OB'), document.getElementById('LODOP_EM'));
LODOP.ADD_PRINT_DATA("ProgramData", resInfo.result.tmpcontent); //装载模板
that.bdcqz.bdcdyh1 = that.bdcqz.bdcdyh.slice(0, 6) + ' ' + that.bdcqz.bdcdyh.slice(6, 12) + ' ' +
that.bdcqz.bdcdyh.slice(12, 19) + ' ' + that.bdcqz.bdcdyh.slice(19, that.bdcqz.bdcdyh.length)
//todo 调取后端接口获取数据 循环set
for (let key in that.bdcqz) {
LODOP.SET_PRINT_STYLEA(key, "CONTENT", that.bdcqz[key]);
}
LODOP.PREVIEW();
} else {
that.$message.error(resInfo.message)
}
that.$popupCacel()
//刷新列表
store.dispatch('user/reWorkFresh', true)
})
}
} else {
getPrintTemplateByCode({ tmpno: 'zmdy' }).then(resInfo => {
if (resInfo.code == 200) {
//打开模板设计
let LODOP = getLodop(document.getElementById('LODOP_OB'), document.getElementById('LODOP_EM'));
LODOP.ADD_PRINT_DATA("ProgramData", resInfo.result.tmpcontent); //装载模板
// 年月日
this.bdcqz.nian = this.bdcqz.djsj.split(' ')[0].split('/')[0]
this.bdcqz.yue = this.bdcqz.djsj.split(' ')[0].split('/')[1]
this.bdcqz.ri = this.bdcqz.djsj.split(' ')[0].split('/')[1]
this.bdcqz.bdcdyh1 = this.bdcqz.bdcdyh.slice(0, 6) + ' ' + this.bdcqz.bdcdyh.slice(6, 12) + ' ' +
this.bdcqz.bdcdyh.slice(12, 19) + ' ' + this.bdcqz.bdcdyh.slice(19, this.bdcqz.bdcdyh.length)
//todo 调取后端接口获取数据 循环set
for (let key in this.bdcqz) {
LODOP.SET_PRINT_STYLEA(key, "CONTENT", this.bdcqz[key]);
}
LODOP.PREVIEW();
} else {
this.$message.error(resInfo.message)
}
that.$popupCacel()
//刷新列表
store.dispatch('user/reWorkFresh', true)
})
}
},
/**
* @description: 保存打印记录
* @author: renchao
*/
handleSubmit () {
let that = this
if (this.ruleForm.ysxlh == '') {
this.$message.error('请选择印刷序列号');
return;
}
store.dispatch('user/reWorkFresh', false)
this.ruleForm.bsmBdcqz = this.bdcqz.bsmBdcqz;
this.ruleForm.bdcqzlx = this.bdcqz.bdcqzlx;
this.ruleForm.szzh = this.bdcqz.bdcqzh;
this.bdcqz.ysxlh = this.ruleForm.ysxlh
certificate(this.ruleForm).then((res) => {
if (res.code === 200) {
that.$popupCacel()
this.handlePrint()
} else {
this.$message.error(res.message)
}
store.dispatch('user/reWorkFresh', true)
})
}
}
}
</script>
<style scoped lang="scss">
@import "~@/styles/mixin.scss";
/deep/.el-tabs__nav-wrap::after {
display: none;
}
/deep/.el-tabs__header {
margin: 0;
}
/deep/.el-form-item--small.el-form-item {
margin-bottom: 0;
}
.zsdy-content {
height: 80vh;
overflow-y: scroll;
}
.zs-content {
text-align: center;
}
.invalid-diglog {
padding-bottom: 20px;
font-size: 16px;
font-weight: bold;
color: rgb(99, 99, 99);
.invalid-title {
display: flex;
align-content: center;
.invalid-icon {
color: rgb(254, 148, 0);
font-size: 34px;
margin-right: 10px;
}
.invalid-body {
line-height: 40px;
margin-bottom: 10px;
}
}
.invalid-reson {
margin-bottom: 10px;
}
.dialog-footer {
margin-top: 10px;
display: flex;
justify-content: flex-end;
}
}
</style>
<!--
* @Description:
* @Autor: renchao
* @LastEditTime: 2024-01-19 14:45:09
-->
<template>
<el-form :model="ruleForm" :rules="rules" ref="ruleForm" label-width="100px">
<el-row>
<el-col :span="8">
<el-form-item label="发证人姓名">
<el-input v-model="ruleForm.fzrmc" disabled></el-input>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="发证时间">
<el-input v-model="ruleForm.fzsj" disabled></el-input>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="发证数量">
<el-input v-model="ruleForm.fzsl" disabled></el-input>
</el-form-item>
</el-col>
</el-row>
<lb-table :column="tableData.columns" @row-dblclick="handleRowClick" ref="table" @selection-change="handleSelectionChange"
:data="tableData.data"
:pagination="false"
:calcHeight="300">
</lb-table>
<el-row>
<el-col :span="3">
<el-form-item label="身份证读卡器">
<el-button type="text" icon="el-icon-tickets" @click="readClick">读取</el-button>
</el-form-item>
</el-col>
<el-col :span="5">
<el-form-item label="领证人" prop="lzrxm" label-width="70px">
<el-input v-model="ruleForm.lzrxm"></el-input>
</el-form-item>
</el-col>
<el-col :span="5">
<el-form-item label="证件类型" prop="lzrzjlb" label-width="80px">
<el-select v-model="ruleForm.lzrzjlb" filterable clearable placeholder="请选择">
<el-option v-for="item in lzrzjlbData" :key="item.dcode" :label="item.dname" :value="item.dcode">
</el-option>
</el-select>
</el-form-item>
</el-col>
<el-col :span="5">
<el-form-item label="证件号" prop="lzrzjh" label-width="70px">
<el-input v-model="ruleForm.lzrzjh"></el-input>
</el-form-item>
</el-col>
<el-col :span="5">
<el-form-item label="领证人电话" prop="lzrdh">
<el-input v-model="ruleForm.lzrdh"></el-input>
</el-form-item>
</el-col>
</el-row>
<el-form-item class="text-center">
<el-button @click="$popupCacel">取消</el-button>
<el-button type="primary" @click="handleSubmit">确定</el-button>
</el-form-item>
</el-form>
</template>
<script>
const checkPhone = (rule, value, callback) => {
let regPone = null
let mobile = /^(1[3456789]\d{9})$/ //手机号
let tel = /^((0\d{2,3}-\d{7,8})|(1[3584]\d{9}))$/ // 座机
if (value && value[0] === '0') {// 检查 value 是否存在并且不是 null 或者 undefined
regPone = tel
} else if (value && value[0] !== '0') {
regPone = mobile
}
if (regPone === null) {
return callback(
new Error('请输入电话')
)
} else if (!regPone.test(value)) {
return callback(
new Error("请输入正确的电话格式,其中座机格式'区号-座机号码'")
)
} else {
callback()
}
};
import Vue from 'vue'
import store from '@/store/index.js'
import table from "@/utils/mixin/table";
import { getIdCardInfo } from '@/utils/operation.js'
import { getUnclaimedBdcqz, issueCertificate, getBdcqzQlr } from "@/api/bdcqz.js";
import { datas } from "../../javascript/fzxxdata";
export default {
props: {
formData: {
type: Object,
default: () => {
return {}
}
}
},
mixins: [table],
data () {
return {
lzrzjlbData: store.getters.dictData['A30'],
ruleForm: {
fzrmc: '',
fzsj: '',
fzsl: '',
bdcqzList: [],
lzrxm: '',
lzrzjlb: '',
lzrzjh: '',
lzrdh: ''
},
rules: {
lzrxm: [
{ required: true, message: '请输入领证人', trigger: 'blur' }
],
lzrzjlb: [
{ required: true, message: '请选择证件类型', trigger: 'change' }
],
lzrzjh: [
{ required: true, message: '请输入证件号', trigger: 'blur' }
],
lzrdh: [
{ required: true, validator: checkPhone, trigger: ["blur"] }
]
},
tableData: {
total: 0,
columns: datas.columns().lzgrid,
data: []
}
}
},
mounted () {
this.$nextTick(() => {
this.loadGrid()
})
},
methods: {
/**
* @description: 身份证打卡器
* @author: renchao
*/
readClick () {
function getObjectByValue (arrayOfObjects, value) {
var name = ''
arrayOfObjects.forEach(item => {
if (item.dname.includes(value)) name = item.dcode
})
return name
}
getIdCardInfo(this.BASE_API.gaopaiyi).then(res => {
if (this.BASE_API.gaopaiyi == 'jy') {
const {
Name,
IdNo,
} = JSON.parse(res)
if (Name) {
this.ruleForm.lzrxm = Name;
this.ruleForm.lzrzjlb = '1';
this.ruleForm.lzrzjh = IdNo;
this.$message({
message: '读取成功!',
type: 'success'
})
} else {
this.$message({
message: '请放置身份证',
type: 'warning'
})
}
} else {
if (res.data.code == 0) {
let data = res.data.IDCardInfo
this.ruleForm.lzrxm = data.name
this.ruleForm.lzrzjlb = '1'
this.ruleForm.lzrzjh = data.cardID
this.$message({
message: '读取成功!',
type: 'success'
})
} else {
this.$message({
message: res.data.message,
type: 'warning'
})
}
}
})
},
/**
* @description: 列表初始化
* @author: renchao
*/
loadGrid () {
let that = this
getUnclaimedBdcqz({ bsmSlsq: Vue.prototype.$currentRoute.query.bsmSlsq }).then(res => {
if (res.code === 200) {
this.tableData.data = res.result.list;
this.$nextTick(() => {
this.tableData.data.forEach(item => {
that.$refs.table.toggleRowSelection(item)
})
})
this.ruleForm.fzrmc = res.result.fzrmc
this.ruleForm.fzsj = res.result.fzsj
this.ruleForm.fzsl = res.result.fzsl
this.ruleForm.bdcqzList = res.result.list;
res.result.list.length && this.getQlr(res.result.list[0].bsmBdcqz)
}
})
},
/**
* @description: 获取权利人信息
* @author: renchao
*/
getQlr (bsmBdcqz) {
getBdcqzQlr(bsmBdcqz).then(res => {
if (res.code === 200) {
this.ruleForm.lzrxm = res.result.qlrmc;
this.ruleForm.lzrzjlb = res.result.zjzl;
this.ruleForm.lzrzjh = res.result.zjh;
this.ruleForm.lzrdh = res.result.dh;
}
})
},
/**
* @description: handleSelectionChange
* @param {*} val
* @author: renchao
*/
handleSelectionChange (val) {
this.ruleForm.bdcqzList = val
},
/**
* @description: handleRowClick
* @param {*} row
* @author: renchao
*/
handleRowClick (row) {
this.$refs.table.toggleRowSelection(row)
},
/**
* @description: handleSubmit
* @author: renchao
*/
handleSubmit () {
this.$refs.ruleForm.validate(valid => {
if (valid) {
issueCertificate(this.ruleForm).then(res => {
if (res.code == 200) {
this.$message.success('保存成功');
//刷新列表
store.dispatch('user/reWorkFresh', true)
this.$popupCacel()
} else {
this.$message.error(res.message)
}
})
} else {
return false;
}
})
}
}
}
</script>
<style scoped lang="scss">
@import "~@/styles/mixin.scss";
</style>
<!--
* @Description:
* @Autor: renchao
* @LastEditTime: 2023-11-15 15:41:43
-->
<template>
<div class="from-clues loadingtext" v-Loading="loading" element-loading-text="拼命加载中...">
<!-- 表单部分 -->
<el-tabs v-model="activeName" @tab-click="handleClick" v-if="headTabBdcqz.length >1" style="margin-top:-15px">
<el-tab-pane :label="item.qlr + (item.bdcqzh !== null ? '(' + item.bdcqzh + ')' : '')" :name="item.bsmBdcqz"
v-for="(item, index) in headTabBdcqz" :key="index">
</el-tab-pane>
</el-tabs>
<el-empty description="暂无数据" v-if="headTabBdcqz.length == 0 && noData"></el-empty>
<div v-else>
<div style="height:540px">
<el-form class="zs" :model="bdcqz" v-if="this.bdcqz.bdcqzlx==1" ref="ruleForm" label-width="100px">
<el-row>
<el-col :span="24">
<el-form-item label="权利人">
<el-input v-model="bdcqz.qlr"></el-input>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="24">
<el-form-item label="共有情况">
<el-select v-model="bdcqz.gyqk" class="width100" placeholder="请选择">
<el-option
v-for="item in gyqkList"
:key="item.dcode"
:label="item.dname"
:value="item.dcode">
</el-option>
</el-select>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="24">
<el-form-item label="坐落">
<el-input v-model="bdcqz.zl"></el-input>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="24">
<el-form-item label="不动产单元号">
<el-input v-model="bdcqz.bdcdyh"></el-input>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="24">
<el-form-item label="权利类型">
<el-input v-model="bdcqz.qllx"></el-input>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="24">
<el-form-item label="权利性质 ">
<el-input v-model="bdcqz.qlxz"></el-input>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="24">
<el-form-item label="用途">
<el-input v-model="bdcqz.yt"></el-input>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="24">
<el-form-item label="面积">
<el-input v-model="bdcqz.mj"></el-input>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="24">
<el-form-item label="使用期限 ">
<el-input v-model="bdcqz.syqx"></el-input>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="24">
<el-form-item label="权利其他状况">
<el-input v-model="bdcqz.qlqtzk" :rows="4" type="textarea"></el-input>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="24">
<el-form-item label="附记">
<el-input v-model="bdcqz.fj" :rows="4" type="textarea"></el-input>
</el-form-item>
</el-col>
</el-row>
</el-form>
<el-form :model="bdcqz" class="zm" v-else ref="ruleForm" label-width="110px">
<el-row>
<el-col :span="24">
<el-form-item label="证明权利或事项">
<el-input v-model="bdcqz.zmqlhsx"></el-input>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="24">
<el-form-item label="权利人(申请人)">
<el-input v-model="bdcqz.qlr"></el-input>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="24">
<el-form-item label="义务人">
<el-input v-model="bdcqz.ywr"></el-input>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="24">
<el-form-item label="坐落">
<el-input v-model="bdcqz.zl"></el-input>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="24">
<el-form-item label="不动产单元号">
<el-input v-model="bdcqz.bdcdyh"></el-input>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="24">
<el-form-item label="其他状况">
<el-input v-model="bdcqz.qlqtzk" :rows="6" type="textarea"></el-input>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="24">
<el-form-item label="附记">
<el-input v-model="bdcqz.fj" :rows="6" type="textarea"></el-input>
</el-form-item>
</el-col>
</el-row>
</el-form>
</div>
<div style="text-align:center">
<el-button @click="$popupCacel">取消</el-button>
<el-button type="primary" @click="handleSubmit">保存</el-button>
</div>
</div>
</div>
</template>
<script>
import store from '@/store/index.js'
import { getSlsqBdcqzList, editBdcqz } from "@/api/bdcqz.js"
export default {
name: "zsxg",
props: {
formData: {
type: Object,
default: {}
}
},
data () {
return {
gyqkList: store.getters.dictData['A34'],
key: 0,
noData: false,
loading: false,
bdcqz: {},
//tab切换栏数组
headTabBdcqz: [],
//tab选择绑定值
activeName: '',
}
},
mounted () {
this.getHeadTabBdcqz()
},
methods: {
/**
* @description: 获取受理申请下全部不动产权证
* @author: renchao
*/
getHeadTabBdcqz () {
this.loading = true
getSlsqBdcqzList({ bsmSlsq: this.formData.bsmSlsq }).then(res => {
if (res.code == 200) {
this.noData = true
if (res.result && res.result.length > 0) {
this.bdcqz = res.result[0]
this.headTabBdcqz = _.cloneDeep(res.result)
if (this.formData.bsmBdcqz) {
this.activeName = this.formData.bsmBdcqz
} else {
this.activeName = res.result[0].bsmBdcqz
}
}
}
this.loading = false
})
},
handleClick (tab) {
this.bdcqz = _.cloneDeep(this.headTabBdcqz[tab.index])
},
handleSubmit () {
editBdcqz(this.bdcqz).then(res => {
if (res.code == 200) {
this.$message.success('保存成功');
//刷新列表
this.$popupCacel()
} else {
this.$message.error(res.message)
}
})
}
}
}
</script>
<style scoped lang="scss">
@import "~@/styles/mixin.scss";
</style>
<!--
* @Description:
* @Autor: renchao
* @LastEditTime: 2024-02-06 13:23:44
-->
<template>
<div class="from-clues loadingtext" v-Loading="loading" element-loading-text="拼命加载中..." style="text-align: center;">
<!-- 表单部分 -->
<div style="margin-top:-20px">
<el-tabs v-model="activeName" @tab-click="handleClick" v-if="headTabBdcqz.length >1">
<el-tab-pane :label="item.qlr + (item.bdcqzh !== null ? '(' + item.bdcqzh + ')' : '')" :name="item.bsmBdcqz"
v-for="(item, index) in headTabBdcqz" :key="index">
</el-tab-pane>
</el-tabs>
</div>
<el-empty description="暂无数据" v-if="headTabBdcqz.length == 0 && noData"></el-empty>
<div style="max-height:89vh;overflow-y:auto">
<div v-show="this.bdcqz.bdcqzlx==1">
<el-tabs v-model="activeTitle">
<el-tab-pane label="第一页" name="title1"></el-tab-pane>
<el-tab-pane label="第二页" name="title2"></el-tab-pane>
</el-tabs>
<div style="width:1169px;overflow-x: hidden;">
<canvas ref="zs1" width="1024" v-show="activeTitle=='title1'" height="739"></canvas>
<canvas ref="zs" width="1024" v-show="activeTitle=='title2'" height="739"></canvas>
</div>
</div>
<div style="width:1169px;overflow-x: hidden;" v-show="this.bdcqz.bdcqzlx==2">
<canvas ref="zm" width="1169" height="828"></canvas>
</div>
</div>
</div>
</template>
<script>
import QRCode from 'qrcode'
import { datas } from "../../javascript/zsyl.js";
import { getSlsqBdcqzList } from "@/api/bdcqz.js"
export default {
name: "zsyl",
props: {
formData: {
type: Object,
default: {}
}
},
data () {
return {
activeTitle: 'title1',
key: 0,
noData: false,
imgSrc1: require('@/image/bdcqz/bdcqzs1.jpg'),
imgSrc: require('@/image/bdcqz/bdcqzs2.jpg'),
bdczmSrc: require('@/image/bdcqz/bdczm.jpg'),
loading: false,
//印刷序列号集合
ysxlh: [],
//列名称对象
columns: [],
//选择的不动产权证文件
bdcqz: '',
//证书打开类型 是否需要展示打印按钮
isToPrint: false,
//tab切换栏数组
headTabBdcqz: [],
//tab选择绑定值
activeName: '',
//证书图片预览
previewImage: '',
ruleForm: {
bsmBdcqz: '',
szmc: '不动产权证书',
bsmBdcqz: '',
szzh: '',
ysxlh: '',
},
}
},
mounted () {
this.columns = datas.columns();
if (this.formData.bdcqz) {
//从缮证进入
this.bdcqz = this.formData.bdcqz
} else {
//从按钮进入
this.getHeadTabBdcqz();
}
},
methods: {
/**
* @description: 获取证书内容
* @param {*} code
* @author: renchao
*/
getRowValue (code) {
var value = this.bdcqz[code];
return value;
},
/**
* @description: 获取受理申请下全部不动产权证
* @author: renchao
*/
getHeadTabBdcqz () {
this.loading = true
getSlsqBdcqzList({ bsmSlsq: this.formData.bsmSlsq }).then(res => {
if (res.code == 200) {
this.noData = true
if (res.result && res.result.length > 0) {
this.bdcqz = res.result[0]
this.headTabBdcqz = res.result
if (this.formData.bsmBdcqz) {
this.activeName = this.formData.bsmBdcqz
} else {
this.activeName = res.result[0].bsmBdcqz
}
if (this.bdcqz.bdcqzlx == 1) {
this.drawTextOnImage()
} else {
this.drawTextzmImage()
}
}
}
this.loading = false
})
},
/**
* @description: tab表头切换方法
* @param {*} e
* @author: renchao
*/
handleClick (tab, event) {
this.bdcqz = this.headTabBdcqz[tab.index]
if (this.bdcqz.bdcqzlx == 1) {
this.drawTextOnImage()
} else {
this.drawTextzmImage()
}
},
/**
* @description: 不动产证书
* @author: renchao
*/
drawTextOnImage1 () {
const canvas = this.$refs.zs1;
const context = canvas.getContext('2d');
const image = new Image();
image.onload = () => {
context.drawImage(image, 0, 0);
context.font = '18px 楷体';
context.fillStyle = '#000000';
let date = this.bdcqz.djsj.split(' ')[0].split('/');
let nian = date[0]
let yue = date[1]
let ri = date[2]
this.bdcqz.nian = nian
this.bdcqz.yue = yue
this.bdcqz.ri = ri
context.fillText(nian ? nian : '', 780, 499);
context.fillText(yue ? yue : '', 840, 499);
context.fillText(ri ? ri : '', 885, 499);
QRCode.toDataURL(this.bdcqz.bdcqzh, { margin: 0 })
.then(url => {
const qrImage = new Image();
this.bdcqz.qrImage = url; // 将二维码图片的 URL 存储到 bdcqz 对象的 qrImage 属性中
qrImage.onload = () => {
context.drawImage(qrImage, 670, 400, 100, 100);
};
qrImage.src = url;
})
.catch(error => {
console.error(error);
});
context.fillText(this.bdcqz.sxh ? this.bdcqz.sxh : '', 745, 633);
};
image.src = this.imgSrc1;
},
drawTextOnImage () {
this.drawTextOnImage1()
function getByteLen (val) {
var len = 0;
if (!val) return len;
for (var i = 0; i < val.length; i++) {
var length = val.charCodeAt(i);
if (length >= 0 && length <= 128) {
len += 1;
} else {
len += 2;
}
}
return len;
}
const canvas = this.$refs.zs;
const context = canvas.getContext('2d');
const image = new Image();
image.onload = () => {
context.drawImage(image, 0, 0);
context.font = '18px 楷体';
context.fillStyle = '#000000';
context.fillText(this.bdcqz.sjjc ? this.bdcqz.sjjc : '', 60, 56);
context.fillText(this.bdcqz.djnd ? this.bdcqz.djnd : '', 113, 56);
context.fillText(this.bdcqz.sxqc ? this.bdcqz.sxqc : '', 180, 56);
context.fillText(this.bdcqz.sxh ? this.bdcqz.sxh : '', 370, 56);
context.fillText(this.bdcqz.qlr ? this.bdcqz.qlr : '', 129, 97);
context.fillText(this.bdcqz.gyqk ? this.bdcqz.gyqk : '', 129, 136);
this.bdcdyh = this.bdcqz.bdcdyh.slice(0, 6) + ' ' + this.bdcqz.bdcdyh.slice(6, 12) + ' ' +
this.bdcqz.bdcdyh.slice(12, 19) + ' ' + this.bdcqz.bdcdyh.slice(19, this.bdcqz.bdcdyh.length)
context.fillText(this.bdcdyh ? this.bdcdyh : '', 129, 223);
context.fillText(this.bdcqz.qllx ? this.bdcqz.qllx : '', 129, 263);
context.fillText(this.bdcqz.qlxz ? this.bdcqz.qlxz : '', 129, 303);
context.fillText(this.bdcqz.yt ? this.bdcqz.yt : '', 129, 346);
// context.fillText(this.bdcqz.mj ? this.bdcqz.mj : '', 129, 386);
let lines6 = this.bdcqz.mj ? this.bdcqz.mj.split(' ') : [];
if (getByteLen(this.bdcqz.mj) > 37) {
lines6.forEach((line, index) => {
const y = 378 + (index * 27); // 每行文本的垂直位置
let currentLine = '';
let arr = [];
for (let word of line) {
const testLine = currentLine + word;
const lineWidth = context.measureText(testLine).width;
if (lineWidth <= 330) {
currentLine = testLine;
} else {
arr.push(currentLine);
currentLine = word;
}
}
arr.push(currentLine);
arr.forEach((line, index) => {
context.fillText(line, 129, y + (index * 20)); // 调整行高
})
})
} else {
lines6.forEach((line, index) => {
const y = 386 + (index * 27); // 每行文本的垂直位置
let currentLine = '';
let arr = [];
for (let word of line) {
const testLine = currentLine + word;
const lineWidth = context.measureText(testLine).width;
if (lineWidth <= 330) {
currentLine = testLine;
} else {
arr.push(currentLine);
currentLine = word;
}
}
arr.push(currentLine);
arr.forEach((line, index) => {
context.fillText(line, 129, y + (index * 20)); // 调整行高
})
})
}
// 权利其他状态
let lines = this.bdcqz.qlqtzk ? this.bdcqz.qlqtzk.split('\n').filter(i => i && i.trim()) : [];
for (let i = 0; i < lines.length; i++) {
let num = Math.ceil(getByteLen(lines[i]) / 38)
if (getByteLen(lines[i]) > 37) {
let currentLine = '';
let arr = [];
for (let word of lines[i]) {
const testLine = currentLine + word;
const lineWidth = context.measureText(testLine).width;
if (lineWidth <= 323) {
currentLine = testLine;
} else {
arr.push(currentLine);
currentLine = word;
}
}
arr.push(currentLine);
if (i > 0) {
arr.forEach((line, index) => {
context.fillText(line, 129, 495 + (29 * (i - 1)) + 4 * num + (index * 14)); // 调整行高
})
} else {
arr.forEach((line, index) => {
context.fillText(line, 129, 493 + (26 * (i - 1)) + (index * 14)); // 调整行高
})
}
} else {
if (i > 0) {
context.fillText(lines[i] ? lines[i] : '', 129, 500 + 4 * num + (29 * (i - 1)));
} else {
context.fillText(lines[i] ? lines[i] : '', 129, 505 + (27 * (i - 1)));
}
}
}
let lines1 = this.bdcqz.fj ? this.bdcqz.fj.split('\n').filter(i => i && i.trim()) : [];
lines1.forEach((line, index) => {
const y = 100 + (index * 30); // 每行文本的垂直位置
let currentLine = '';
let arr = [];
for (let word of line) {
const testLine = currentLine + word;
const lineWidth = context.measureText(testLine).width;
if (lineWidth <= 395) {
currentLine = testLine;
} else {
arr.push(currentLine);
currentLine = word;
}
}
arr.push(currentLine);
arr.forEach((line, index) => {
context.fillText(line, 580, y + (index * 30)); // 调整行高
})
})
let lines3 = this.bdcqz.syqx ? this.bdcqz.syqx.split(' ') : [];
if (getByteLen(this.bdcqz.syqx) > 37) {
lines3.forEach((line, index) => {
const y = 423 + (index * 27); // 每行文本的垂直位置
let currentLine = '';
let arr = [];
for (let word of line) {
const testLine = currentLine + word;
const lineWidth = context.measureText(testLine).width;
if (lineWidth <= 330) {
currentLine = testLine;
} else {
arr.push(currentLine);
currentLine = word;
}
}
arr.push(currentLine);
arr.forEach((line, index) => {
context.fillText(line, 129, y + (index * 20)); // 调整行高
})
})
} else {
lines3.forEach((line, index) => {
const y = 430 + (index * 27); // 每行文本的垂直位置
let currentLine = '';
let arr = [];
for (let word of line) {
const testLine = currentLine + word;
const lineWidth = context.measureText(testLine).width;
if (lineWidth <= 315) {
currentLine = testLine;
} else {
arr.push(currentLine);
currentLine = word;
}
}
arr.push(currentLine);
arr.forEach((line, index) => {
context.fillText(line, 129, y + (index * 20)); // 调整行高
})
})
}
let lines2 = this.bdcqz.zl ? this.bdcqz.zl.split(' ') : [];
if (getByteLen(this.bdcqz.zl) > 37) {
lines2.forEach((line, index) => {
const y = 170 + (index * 20); // 每行文本的垂直位置
let currentLine = '';
let arr = [];
for (let word of line) {
const testLine = currentLine + word;
const lineWidth = context.measureText(testLine).width;
if (lineWidth <= 336) {
currentLine = testLine;
} else {
arr.push(currentLine);
currentLine = word;
}
}
arr.push(currentLine);
arr.forEach((line, index) => {
context.fillText(line, 129, y + (index * 20)); // 调整行高
})
})
} else {
lines2.forEach((line, index) => {
const y = 180 + (index * 20); // 每行文本的垂直位置
let currentLine = '';
let arr = [];
for (let word of line) {
const testLine = currentLine + word;
const lineWidth = context.measureText(testLine).width;
if (lineWidth <= 336) {
currentLine = testLine;
} else {
arr.push(currentLine);
currentLine = word;
}
}
arr.push(currentLine);
arr.forEach((line, index) => {
context.fillText(line, 129, y + (index * 20)); // 调整行高
})
})
}
}
image.src = this.imgSrc
},
/**
* @description: 不动产证明
* @author: renchao
*/
drawTextzmImage () {
function getByteLen (val) {
var len = 0;
if (!val) return len;
for (var i = 0; i < val.length; i++) {
var length = val.charCodeAt(i);
if (length >= 0 && length <= 128) {
len += 1;
} else {
len += 2;
}
}
return len;
}
const canvas = this.$refs.zm;
const context = canvas.getContext('2d');
const image = new Image();
image.onload = () => {
context.drawImage(image, 0, 0);
context.font = '18px 楷体';
context.fillStyle = '#000000';
// ysxlh
context.fillText(this.bdcqz.ysxlh ? this.bdcqz.ysxlh : '', 280, 712);
// djsj
if (this.bdcqz.djsj) {
let djsjList = this.bdcqz.djsj.split(' ')[0].split('/')
context.fillText(djsjList[0] ? djsjList[0] : '', 327, 580);
context.fillText(djsjList[1] ? djsjList[1] : '', 393, 580);
context.fillText(djsjList[2] ? djsjList[2] : '', 443, 580);
}
context.fillText(this.bdcqz.sjjc ? this.bdcqz.sjjc : '', 620, 125);
context.fillText(this.bdcqz.djnd ? this.bdcqz.djnd : '', 665, 125);
if (getByteLen(this.bdcqz.sxqc) > 14) {
const originalFont = context.font;
// 设置新的字体大小
context.font = '14px 楷体'; // 替换为你想要的字体和大小
// 绘制 bdcdyh
context.fillText(this.bdcqz.sxqc ? this.bdcqz.sxqc : '', 725, 125);
// 恢复原始字体设置
context.font = originalFont;
} else {
context.fillText(this.bdcqz.sxqc ? this.bdcqz.sxqc : '', 755, 125);
}
context.fillText(this.bdcqz.sxh ? this.bdcqz.sxh : '', 960, 123);
context.fillText(this.bdcqz.zmqlhsx ? this.bdcqz.zmqlhsx : '', 775, 180);
// context.fillText(this.bdcqz.qlr ? this.bdcqz.qlr : '', 775, 228);
// 权利人
let qlrlines = this.bdcqz.qlr
if (getByteLen(this.bdcqz.qlr) > 32) {
let currentLine = '';
let arr = [];
for (let word of qlrlines) {
const testLine = currentLine + word;
const lineWidth = context.measureText(testLine).width;
if (lineWidth <= 295) {
currentLine = testLine;
} else {
arr.push(currentLine);
currentLine = word;
}
}
arr.push(currentLine); // 将最后一行添加到数组
// 绘制所有行
for (let i = 0; i < arr.length; i++) {
context.fillText(arr[i], 775, 218 + i * 20); // lineHeight 为行高
}
} else {
context.fillText(this.bdcqz.qlr ? this.bdcqz.qlr : '', 775, 228);
}
// 义务人
// context.fillText(this.bdcqz.ywr ? this.bdcqz.ywr : '', 775, 275);
let ywrlines = this.bdcqz.ywr
if (getByteLen(this.bdcqz.ywr) > 32) {
let currentLine = '';
let arr = [];
for (let word of ywrlines) {
const testLine = currentLine + word;
const lineWidth = context.measureText(testLine).width;
if (lineWidth <= 295) {
currentLine = testLine;
} else {
arr.push(currentLine);
currentLine = word;
}
}
arr.push(currentLine); // 将最后一行添加到数组
// 绘制所有行
for (let i = 0; i < arr.length; i++) {
context.fillText(arr[i], 775, 268 + i * 20); // lineHeight 为行高
}
} else {
context.fillText(this.bdcqz.ywr ? this.bdcqz.ywr : '', 775, 275);
}
// context.fillText(this.bdcqz.zl ? this.bdcqz.zl : '', 775, 325);
let lines2 = this.bdcqz.zl ? this.bdcqz.zl.split(' ') : [];
if (getByteLen(this.bdcqz.zl) > 32) {
lines2.forEach((line, index) => {
const y = 315 + (index * 20); // 每行文本的垂直位置
let currentLine = '';
let arr = [];
for (let word of line) {
const testLine = currentLine + word;
const lineWidth = context.measureText(testLine).width;
if (lineWidth <= 295) {
currentLine = testLine;
} else {
arr.push(currentLine);
currentLine = word;
}
}
arr.push(currentLine);
arr.forEach((line, index) => {
context.fillText(line, 775, y + (index * 20)); // 调整行高
})
})
} else {
lines2.forEach((line, index) => {
const y = 325 + (index * 20); // 每行文本的垂直位置
let currentLine = '';
let arr = [];
for (let word of line) {
const testLine = currentLine + word;
const lineWidth = context.measureText(testLine).width;
if (lineWidth <= 295) {
currentLine = testLine;
} else {
arr.push(currentLine);
currentLine = word;
}
}
arr.push(currentLine);
arr.forEach((line, index) => {
context.fillText(line, 775, y + (index * 20)); // 调整行高
})
})
}
// bdcdyh
this.bdcdyh = this.bdcqz.bdcdyh.slice(0, 6) + ' ' + this.bdcqz.bdcdyh.slice(6, 12) + ' ' +
this.bdcqz.bdcdyh.slice(12, 19) + ' ' + this.bdcqz.bdcdyh.slice(19, this.bdcqz.bdcdyh.length)
// context.fillText(this.bdcdyh ? this.bdcdyh : '', 775, 373);
// 保存当前字体设置
const originalFont = context.font;
// 设置新的字体大小
context.font = '16px 楷体'; // 替换为你想要的字体和大小
// 绘制 bdcdyh
context.fillText(this.bdcdyh ? this.bdcdyh : '', 775, 373);
// 恢复原始字体设置
context.font = originalFont;
// qlqtzk
function getByteLenBdcdy (val) {
var encoder = new TextEncoder('utf-8');
return encoder.encode(val).length;
}
const maxWidth = 295; // 最大宽度限制
let lines = this.bdcqz.qlqtzk ? this.bdcqz.qlqtzk.split('\n').filter(i => i && i.trim()) : [];
let bdcdyNum = Math.ceil(getByteLenBdcdy(lines[0]) / 43)
// 单独处理不动产单元号
let linesBdcdy = lines[0] ? lines[0].split(' ') : [];
if (getByteLenBdcdy(lines[0]) > 43) {
linesBdcdy.forEach((line, index) => {
const y = 412 + (index * 17); // 每行文本的垂直位置
let currentLine = '';
let arr = [];
for (let word of line) {
const testLine = currentLine + word;
const lineWidth = context.measureText(testLine).width;
if (lineWidth <= maxWidth) {
currentLine = testLine;
} else {
arr.push(currentLine);
currentLine = word;
}
}
arr.push(currentLine);
arr.forEach((line, index) => {
context.fillText(line, 770, y + (index * 17)); // 调整行高
})
})
} else {
linesBdcdy.forEach((line, index) => {
const y = 418 + (index * 17); // 每行文本的垂直位置
let currentLine = '';
let arr = [];
for (let word of line) {
const testLine = currentLine + word;
const lineWidth = context.measureText(testLine).width;
if (lineWidth <= maxWidth) {
currentLine = testLine;
} else {
arr.push(currentLine);
currentLine = word;
}
}
arr.push(currentLine);
arr.forEach((line, index) => {
context.fillText(line, 770, y + (index * 17)); // 调整行高
})
})
}
for (let i = 1; i < lines.length; i++) {
let num = Math.ceil(getByteLen(lines[i]) / 32)
if (getByteLen(lines[i]) > 32) {
let currentLine = '';
let arr = [];
for (let word of lines[i]) {
const testLine = currentLine + word;
const lineWidth = context.measureText(testLine).width;
if (lineWidth <= maxWidth) {
currentLine = testLine;
} else {
arr.push(currentLine);
currentLine = word;
}
}
arr.push(currentLine);
if (i > 0) {
arr.forEach((line, index) => {
context.fillText(line, 770, 408 + (bdcdyNum * 15) + (24 * (i - 1)) + 5 * num + (index * 17)); // 调整行高
})
} else {
arr.forEach((line, index) => {
context.fillText(line, 770, 408 + (bdcdyNum * 15) + (24 * (i - 1)) + (index * 17)); // 调整行高
})
}
} else {
if (i > 0) {
context.fillText(lines[i] ? lines[i] : '', 770, 417 + (bdcdyNum * 15) + 6 * num + (25 * (i - 1)));
} else {
context.fillText(lines[i] ? lines[i] : '', 770, 417 + (bdcdyNum * 15) + (25 * (i - 1)));
}
}
}
// fj
let lines1 = this.bdcqz.fj ? this.bdcqz.fj.split('\n').filter(i => i && i.trim()) : [];
for (let i = 0; i < lines1.length; i++) {
let num = Math.ceil(getByteLen(lines1[i]) / 37)
if (getByteLen(lines1[i]) > 37) {
let currentLine = '';
let arr = [];
for (let word of lines1[i]) {
const testLine = currentLine + word;
const lineWidth = context.measureText(testLine).width;
if (lineWidth <= maxWidth) {
currentLine = testLine;
} else {
arr.push(currentLine);
currentLine = word;
}
}
arr.push(currentLine);
if (i > 0) {
arr.forEach((line, index) => {
context.fillText(line, 770, 605 + (24 * (i - 1)) + 5 * num + (index * 17)); // 调整行高
})
} else {
arr.forEach((line, index) => {
context.fillText(line, 770, 605 + (24 * (i - 1)) + (index * 17)); // 调整行高
})
}
} else {
if (i > 0) {
context.fillText(lines1[i] ? lines1[i] : '', 770, 616 + 6 * num + (25 * (i - 1)));
} else {
context.fillText(lines1[i] ? lines1[i] : '', 770, 616 + (25 * (i - 1)));
}
}
}
}
image.src = this.bdczmSrc;
}
}
}
</script>
<style scoped lang="scss">
@import "~@/styles/mixin.scss";
/deep/.el-tabs__nav-wrap::after {
display: none;
}
/deep/.el-tabs__header {
margin: 0;
}
/deep/.el-form-item--small.el-form-item {
margin-bottom: 0;
}
/deep/.mask-content {
padding-top: 10px !important;
}
.imgClass {
display: inline-block;
height: auto;
max-width: 100%;
}
.middle_padding {
padding-bottom: 10px;
}
.zsyl-button {
text-align: center;
margin-top: 20px;
.operation_button {
width: 100px;
border: 1px solid rgb(0, 121, 254);
}
.dy-button {
color: white;
background-color: rgb(0, 121, 254);
}
}
.table-column {
border-spacing: 1px;
width: 100%;
tr td {
border: 1px solid #ccc;
text-align: center;
height: 40px;
padding: 4px;
font-size: 13px;
background: rgb(251, 249, 229);
}
}
.zsyl-title {
background: #fafbe5;
text-align: center;
padding: 5px 0px;
font-size: 20px;
}
.no-data {
font-size: 18px;
display: flex;
text-align: center;
justify-content: center;
}
</style>
<!--
* @Description:
* @Autor: miaofang
* @LastEditTime: 2023-10-23 16:16:24
-->
<template>
<div
class="from-clues loadingtext"
v-Loading="loading"
element-loading-text="拼命加载中..."
style="height: 720px; text-align: center">
<!-- 表单部分 -->
<el-tabs v-model="activeName" @tab-click="handleClick">
<el-tab-pane label="证书预览" name="zsyl">
<el-empty
description="暂无数据"
v-if="headTabBdcqz.length == 0 && noData"></el-empty>
<div class="zsys">
<canvas
ref="zs"
width="1000"
v-show="this.bdcqz.bdcqzlx == 1"
height="700"></canvas>
<canvas
ref="zm"
width="1180"
v-show="this.bdcqz.bdcqzlx == 2"
height="780"></canvas>
</div>
</el-tab-pane>
<el-tab-pane label="证书详情" name="lcjl">
<div class="slxx_title title-block">
证书详情信息
<div class="triangle"></div>
</div>
<el-form :rules="rules" ref="ruleForm" label-width="120px">
<el-row>
<el-col :span="8">
<el-form-item label="权利人" prop="cyxm">
<el-input disabled v-model="bdcqz.qlr" maxlegth="15"></el-input>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="义务人" prop="jtgxdm">
<el-input disabled v-model="bdcqz.qlr" maxlegth="15"></el-input>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="坐落" prop="cbfdm">
<el-input disabled v-model="bdcqz.zl" maxlegth="15"></el-input>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="8">
<el-form-item label="不动产单元号" prop="cyxm">
<el-input disabled v-model="bdcqz.bdcdyh" maxlegth="15"></el-input>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="印刷序列号" prop="jtgxdm">
<el-input disabled v-model="bdcqz.ysxlh" maxlegth="15"></el-input>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="不动产权证号" prop="cbfdm">
<el-input disabled v-model="bdcqz.bdcqzh" maxlegth="15"></el-input>
</el-form-item>
</el-col>
</el-row>
</el-form>
<div class="slxx_title title-block">
缮证记录信息
<div class="triangle"></div>
</div>
<lb-table
class="sz"
:column="szxxtableData.columns"
heightNumSetting
:pagination="false"
:key="key"
:data="szxxtableData.data">
</lb-table>
<div class="slxx_title title-block">
发证记录信息
<div class="triangle"></div>
</div>
<lb-table
border
:column="tableDatas.columns"
:heightNum="100"
:data="tableDatas.data"
:pagination="false">
</lb-table>
</el-tab-pane>
<el-tab-pane label="电子证照" name="third"> 等一个照片 </el-tab-pane>
</el-tabs>
</div>
</template>
<script>
// import { zsyldatas } from "../../javascript/zsyl.js";
import { getSlsqBdcqzList } from "@/api/bdcqz.js";
import { getCertificateList } from "@/api/bdcqz.js";
import { getSzRecordList } from "@/api/bdcqz.js";
import { szxxdatas } from "../../javascript/szxxdatapart";
import { datas } from "../../javascript/fzxxdatapart";
export default {
name: "zsyl",
props: {
formData: {
type: Object,
default: {},
},
},
data () {
return {
key: 0,
noData: false,
imgSrc: require("@/image/bdcqz/bdcqzs2.jpg"),
bdczmSrc: require("@/image/bdcqz/bdczm.jpg"),
loading: false,
//印刷序列号集合
ysxlh: [],
//列名称对象
columns: [],
//选择的不动产权证文件
bdcqz: "",
//证书打开类型 是否需要展示打印按钮
isToPrint: false,
//tab切换栏数组
tabslist: [],
headTabBdcqz: [],
//tab选择绑定值
activeName: "zsyl",
//证书图片预览
previewImage: "",
ruleForm: {
bsmBdcqz: "",
szmc: "不动产权证书",
bsmBdcqz: "",
szzh: "",
ysxlh: "",
},
formdata: {},
szxxtableData: {
total: 0,
columns: szxxdatas.columns(),
data: [],
},
tableDatas: {
total: 0,
columns: datas.columns().fzgrid,
data: [],
},
};
},
mounted () {
this.queryClick();
this.query();
if (this.formData.bdcqz) {
//从缮证进入
this.bdcqz = this.formData.bdcqz;
} else {
//从按钮进入
this.getHeadTabBdcqz();
}
},
methods: {
/**
* @description: queryClick
* @author: miaofang
*/
queryClick () {
this.formdata.bsmSlsq = this.formData.bsmSlsq;
getCertificateList(this.formdata).then((res) => {
if (res.code === 200) {
this.tableDatas.data = res.result ? res.result : [];
}
})
},
/**
* @description: query
* @author: miaofang
*/
query () {
getSzRecordList({ bsmBdcqz: this.formData.bsmBdcqz }).then((res) => {
if (res.code == 200) {
this.szxxtableData.data = res.result;
this.key++;
}
})
},
/**
* @description: 获取证书内容
* @param {*} code
* @author: miaofang
*/
getRowValue (code) {
var value = this.bdcqz[code];
return value;
},
/**
* @description: 获取受理申请下全部不动产权证
* @author: miaofang
*/
getHeadTabBdcqz () {
this.loading = true;
getSlsqBdcqzList({ bsmSlsq: this.formData.bsmSlsq }).then((res) => {
if (res.code == 200) {
this.noData = true;
if (res.result && res.result.length > 0) {
this.bdcqz = res.result[0];
this.headTabBdcqz = res.result;
if (this.bdcqz.bdcqzlx == 1) {
this.drawTextOnImage();
} else {
this.drawTextzmImage();
}
}
}
this.loading = false;
});
},
/**
* @description: tab表头切换方法
* @param {*} e
* @author: miaofang
*/
handleClick (tab, event) {
console.log(tab, event);
this.bdcqz = this.headTabBdcqz[0];
if (this.bdcqz.bdcqzlx == 1) {
this.drawTextOnImage();
} else {
this.drawTextzmImage();
}
},
/**
* @description: 不动产证书
* @author: miaofang
*/
drawTextOnImage () {
function getByteLen (val) {
var len = 0;
if (!val) return len;
for (var i = 0; i < val.length; i++) {
var length = val.charCodeAt(i);
if (length >= 0 && length <= 128) {
len += 1;
} else {
len += 2;
}
}
return len;
}
const canvas = this.$refs.zs;
const context = canvas.getContext("2d");
const image = new Image();
image.onload = () => {
context.drawImage(image, 0, 0);
context.font = "18px 楷体";
context.fillStyle = "#000000";
context.fillText(this.bdcqz.sjjc ? this.bdcqz.sjjc : "", 60, 56);
context.fillText(this.bdcqz.djnd ? this.bdcqz.djnd : "", 113, 56);
context.fillText(this.bdcqz.sxqc ? this.bdcqz.sxqc : "", 180, 56);
context.fillText(this.bdcqz.sxh ? this.bdcqz.sxh : "", 370, 56);
context.fillText(this.bdcqz.qlr ? this.bdcqz.qlr : "", 129, 97);
context.fillText(this.bdcqz.gyqk ? this.bdcqz.gyqk : "", 129, 136);
this.bdcdyh =
this.bdcqz.bdcdyh.slice(0, 6) +
" " +
this.bdcqz.bdcdyh.slice(6, 12) +
" " +
this.bdcqz.bdcdyh.slice(12, 19) +
" " +
this.bdcqz.bdcdyh.slice(19, this.bdcqz.bdcdyh.length);
context.fillText(this.bdcdyh ? this.bdcdyh : "", 129, 223);
context.fillText(this.bdcqz.qllx ? this.bdcqz.qllx : "", 129, 263);
context.fillText(this.bdcqz.qlxz ? this.bdcqz.qlxz : "", 129, 303);
context.fillText(this.bdcqz.yt ? this.bdcqz.yt : "", 129, 346);
// context.fillText(this.bdcqz.mj ? this.bdcqz.mj : '', 129, 386);
let lines6 = this.bdcqz.mj ? this.bdcqz.mj.split(" ") : [];
if (getByteLen(this.bdcqz.mj) > 41) {
lines6.forEach((line, index) => {
const y = 378 + index * 27; // 每行文本的垂直位置
let currentLine = "";
let arr = [];
for (let word of line) {
const testLine = currentLine + word;
const lineWidth = context.measureText(testLine).width;
if (lineWidth <= 330) {
currentLine = testLine;
} else {
arr.push(currentLine);
currentLine = word;
}
}
arr.push(currentLine);
arr.forEach((line, index) => {
context.fillText(line, 129, y + index * 20); // 调整行高
});
});
} else {
lines6.forEach((line, index) => {
const y = 386 + index * 27; // 每行文本的垂直位置
let currentLine = "";
let arr = [];
for (let word of line) {
const testLine = currentLine + word;
const lineWidth = context.measureText(testLine).width;
if (lineWidth <= 330) {
currentLine = testLine;
} else {
arr.push(currentLine);
currentLine = word;
}
}
arr.push(currentLine);
arr.forEach((line, index) => {
context.fillText(line, 129, y + index * 20); // 调整行高
});
});
}
// 权利其他状态
let lines = this.bdcqz.qlqtzk ? this.bdcqz.qlqtzk.split("\n") : [];
for (let i = 0; i < lines.length; i++) {
let num = Math.ceil(getByteLen(lines[i]) / 38);
if (getByteLen(lines[i]) > 38) {
let currentLine = "";
let arr = [];
for (let word of lines[i]) {
const testLine = currentLine + word;
const lineWidth = context.measureText(testLine).width;
if (lineWidth <= 323) {
currentLine = testLine;
} else {
arr.push(currentLine);
currentLine = word;
}
}
arr.push(currentLine);
if (i > 0) {
arr.forEach((line, index) => {
context.fillText(
line,
129,
490 + 26 * (i - 1) + 4 * num + index * 14
); // 调整行高
});
} else {
arr.forEach((line, index) => {
context.fillText(line, 129, 500 + 26 * (i - 1) + index * 14); // 调整行高
});
}
} else {
if (i > 0) {
context.fillText(
lines[i] ? lines[i] : "",
129,
500 + 4 * num + 24 * (i - 1)
);
} else {
context.fillText(
lines[i] ? lines[i] : "",
129,
505 + 24 * (i - 1)
);
}
}
}
let lines1 = this.bdcqz.fj ? this.bdcqz.fj.split("\n") : [];
lines1.forEach((line, index) => {
const y = 100 + index * 30; // 每行文本的垂直位置
let currentLine = "";
let arr = [];
for (let word of line) {
const testLine = currentLine + word;
const lineWidth = context.measureText(testLine).width;
if (lineWidth <= 395) {
currentLine = testLine;
} else {
arr.push(currentLine);
currentLine = word;
}
}
arr.push(currentLine);
arr.forEach((line, index) => {
context.fillText(line, 580, y + index * 30); // 调整行高
});
});
let lines3 = this.bdcqz.syqx ? this.bdcqz.syqx.split(" ") : [];
if (getByteLen(this.bdcqz.syqx) > 41) {
lines3.forEach((line, index) => {
const y = 423 + index * 27; // 每行文本的垂直位置
let currentLine = "";
let arr = [];
for (let word of line) {
const testLine = currentLine + word;
const lineWidth = context.measureText(testLine).width;
if (lineWidth <= 330) {
currentLine = testLine;
} else {
arr.push(currentLine);
currentLine = word;
}
}
arr.push(currentLine);
arr.forEach((line, index) => {
context.fillText(line, 129, y + index * 20); // 调整行高
});
});
} else {
lines3.forEach((line, index) => {
const y = 430 + index * 27; // 每行文本的垂直位置
let currentLine = "";
let arr = [];
for (let word of line) {
const testLine = currentLine + word;
const lineWidth = context.measureText(testLine).width;
if (lineWidth <= 315) {
currentLine = testLine;
} else {
arr.push(currentLine);
currentLine = word;
}
}
arr.push(currentLine);
arr.forEach((line, index) => {
context.fillText(line, 129, y + index * 20); // 调整行高
});
});
}
let lines2 = this.bdcqz.zl ? this.bdcqz.zl.split(" ") : [];
if (getByteLen(this.bdcqz.zl) > 41) {
lines2.forEach((line, index) => {
const y = 170 + index * 20; // 每行文本的垂直位置
let currentLine = "";
let arr = [];
for (let word of line) {
const testLine = currentLine + word;
const lineWidth = context.measureText(testLine).width;
if (lineWidth <= 336) {
currentLine = testLine;
} else {
arr.push(currentLine);
currentLine = word;
}
}
arr.push(currentLine);
arr.forEach((line, index) => {
context.fillText(line, 129, y + index * 20); // 调整行高
});
});
} else {
lines2.forEach((line, index) => {
const y = 180 + index * 20; // 每行文本的垂直位置
let currentLine = "";
let arr = [];
for (let word of line) {
const testLine = currentLine + word;
const lineWidth = context.measureText(testLine).width;
if (lineWidth <= 336) {
currentLine = testLine;
} else {
arr.push(currentLine);
currentLine = word;
}
}
arr.push(currentLine);
arr.forEach((line, index) => {
context.fillText(line, 129, y + index * 20); // 调整行高
});
});
}
};
image.src = this.imgSrc;
},
/**
* @description: 不动产证明
* @author: miaofang
*/
drawTextzmImage () {
function getByteLen (val) {
var len = 0;
if (!val) return len;
for (var i = 0; i < val.length; i++) {
var length = val.charCodeAt(i);
if (length >= 0 && length <= 128) {
len += 1;
} else {
len += 2;
}
}
return len;
}
const canvas = this.$refs.zm;
const context = canvas.getContext("2d");
const image = new Image();
image.onload = () => {
context.drawImage(image, 0, 0);
context.font = "18px 楷体";
context.fillStyle = "#000000";
// ysxlh
context.fillText(this.bdcqz.ysxlh ? this.bdcqz.ysxlh : "", 280, 712);
// djsj
if (this.bdcqz.djsj) {
let djsjList = this.bdcqz.djsj.split(" ")[0].split("/");
context.fillText(djsjList[0] ? djsjList[0] : "", 327, 580);
context.fillText(djsjList[1] ? djsjList[1] : "", 393, 580);
context.fillText(djsjList[2] ? djsjList[2] : "", 443, 580);
}
context.fillText(this.bdcqz.sjjc ? this.bdcqz.sjjc : "", 620, 125);
context.fillText(this.bdcqz.djnd ? this.bdcqz.djnd : "", 665, 125);
context.fillText(this.bdcqz.sxqc ? this.bdcqz.sxqc : "", 750, 125);
context.fillText(this.bdcqz.sxh ? this.bdcqz.sxh : "", 960, 123);
context.fillText(
this.bdcqz.zmqlhsx ? this.bdcqz.zmqlhsx : "",
775,
180
);
context.fillText(this.bdcqz.qlr ? this.bdcqz.qlr : "", 775, 228);
// 义务人
context.fillText(this.bdcqz.ywr ? this.bdcqz.ywr : "", 775, 275);
// context.fillText(this.bdcqz.zl ? this.bdcqz.zl : '', 775, 325);
let lines2 = this.bdcqz.zl ? this.bdcqz.zl.split(" ") : [];
if (getByteLen(this.bdcqz.zl) > 41) {
lines2.forEach((line, index) => {
const y = 315 + index * 20; // 每行文本的垂直位置
let currentLine = "";
let arr = [];
for (let word of line) {
const testLine = currentLine + word;
const lineWidth = context.measureText(testLine).width;
if (lineWidth <= 295) {
currentLine = testLine;
} else {
arr.push(currentLine);
currentLine = word;
}
}
arr.push(currentLine);
arr.forEach((line, index) => {
context.fillText(line, 775, y + index * 20); // 调整行高
});
});
} else {
lines2.forEach((line, index) => {
const y = 325 + index * 20; // 每行文本的垂直位置
let currentLine = "";
let arr = [];
for (let word of line) {
const testLine = currentLine + word;
const lineWidth = context.measureText(testLine).width;
if (lineWidth <= 295) {
currentLine = testLine;
} else {
arr.push(currentLine);
currentLine = word;
}
}
arr.push(currentLine);
arr.forEach((line, index) => {
context.fillText(line, 775, y + index * 20); // 调整行高
});
});
}
// bdcdyh
this.bdcdyh =
this.bdcqz.bdcdyh.slice(0, 6) +
" " +
this.bdcqz.bdcdyh.slice(6, 12) +
" " +
this.bdcqz.bdcdyh.slice(12, 19) +
" " +
this.bdcqz.bdcdyh.slice(19, this.bdcqz.bdcdyh.length);
context.fillText(this.bdcdyh ? this.bdcdyh : "", 775, 373);
// qlqtzk
const maxWidth = 295; // 最大宽度限制
let lines = this.bdcqz.qlqtzk ? this.bdcqz.qlqtzk.split("\n") : [];
for (let i = 0; i < lines.length; i++) {
let num = Math.ceil(getByteLen(lines[i]) / 37);
if (getByteLen(lines[i]) > 37) {
let currentLine = "";
let arr = [];
for (let word of lines[i]) {
const testLine = currentLine + word;
const lineWidth = context.measureText(testLine).width;
if (lineWidth <= maxWidth) {
currentLine = testLine;
} else {
arr.push(currentLine);
currentLine = word;
}
}
arr.push(currentLine);
if (i > 0) {
arr.forEach((line, index) => {
context.fillText(
line,
770,
428 + 25 * (i - 1) + 5 * num + index * 15
); // 调整行高
});
} else {
arr.forEach((line, index) => {
context.fillText(line, 770, 435 + 25 * (i - 1) + index * 14); // 调整行高
});
}
} else {
if (i > 0) {
context.fillText(
lines[i] ? lines[i] : "",
770,
440 + 5 * num + 24 * (i - 1)
);
} else {
context.fillText(
lines[i] ? lines[i] : "",
770,
440 + 24 * (i - 1)
);
}
}
}
// fj
let lines1 = this.bdcqz.fj ? this.bdcqz.fj.split("\n") : [];
for (let i = 0; i < lines1.length; i++) {
let num = Math.ceil(getByteLen(lines1[i]) / 37);
if (getByteLen(lines1[i]) > 37) {
let currentLine = "";
let arr = [];
for (let word of lines1[i]) {
const testLine = currentLine + word;
const lineWidth = context.measureText(testLine).width;
if (lineWidth <= maxWidth) {
currentLine = testLine;
} else {
arr.push(currentLine);
currentLine = word;
}
}
arr.push(currentLine);
if (i > 0) {
arr.forEach((line, index) => {
context.fillText(
line,
770,
610 + 25 * (i - 1) + 5 * num + index * 15
); // 调整行高
});
} else {
arr.forEach((line, index) => {
context.fillText(line, 770, 610 + 25 * (i - 1) + index * 15); // 调整行高
});
}
} else {
if (i > 0) {
context.fillText(
lines1[i] ? lines1[i] : "",
770,
610 + 5 * num + 23 * (i - 1)
);
} else {
context.fillText(
lines1[i] ? lines1[i] : "",
770,
610 + 23 * (i - 1)
);
}
}
}
};
image.src = this.bdczmSrc;
},
},
computed: {
hdiffHeight () {
return 0;
// return this.headTabBdcqz.length > 1 ? 54 : 0
},
},
};
</script>
<style scoped lang="scss">
@import "~@/styles/mixin.scss";
.imgClass {
display: inline-block;
height: auto;
max-width: 100%;
}
.middle_padding {
padding-bottom: 10px;
}
.zsyl-button {
text-align: center;
margin-top: 20px;
.operation_button {
width: 100px;
border: 1px solid rgb(0, 121, 254);
}
.dy-button {
color: white;
background-color: rgb(0, 121, 254);
}
}
.table-column {
border-spacing: 1px;
width: 100%;
tr td {
border: 1px solid #ccc;
text-align: center;
height: 40px;
padding: 4px;
font-size: 13px;
background: rgb(251, 249, 229);
}
}
.zsyl-title {
background: #fafbe5;
text-align: center;
padding: 5px 0px;
font-size: 20px;
}
.no-data {
font-size: 18px;
display: flex;
text-align: center;
justify-content: center;
}
.el-tab-pane {
width: 1190px;
height: 670px;
overflow-y: auto;
}
.zsys {
width: 1180px;
height: 670px;
}
/deep/.el-table {
height: 100px !important;
}
// /deep/.sz {
// height: 340px !important;
// }
.el-form {
margin-top: 20px;
}
</style>
<!--
* @Description:
* @Autor: renchao
* @LastEditTime: 2023-07-17 13:51:29
-->
<template>
<lb-table :column="column" :maxHeight="200" :heightNumSetting="true" :pagination="false" :key="key" :data="tableData">
</lb-table>
</template>
<script>
import addQlr from './dialog/addQlr.vue'
import { mapGetters } from 'vuex'
export default {
components: {
addQlr
},
computed: {
...mapGetters(["dictData"]),
},
props: {
tableData: {
type: Array,
default: function () {
return []
}
},
gyfs: {
type: String,
default: '1'
}
},
data () {
return {
key: 0,
dataIndex: 0,
dialog: false,
details: {},
tableDataList: [],
qlrCommonTable: [
{
label: '序号',
type: 'index',
width: '50',
render: (h, scope) => {
return (
<div>
{scope.$index + 1}
</div>
)
}
},
{
prop: "qlrmc",
label: "抵押权人"
},
{
prop: "ywrmc",
label: "抵押人"
},
{
prop: "bdcqzh",
label: "不动产登记证明号"
},
{
prop: "dyjelx",
label: "抵押金额类型"
},
{
prop: "dyfsmc",
label: "抵押方式"
},
{
prop: "qdjgmc",
label: "抵押金额"
},
{
prop: "qlmjmc",
label: "抵押面积1"
},
{
prop: "zwlxqssj",
label: "债务履行开始时间"
},
{
prop: "zwlxjssj",
label: "债务履行结束时间"
},
{
prop: "bdcdyh",
label: "不动产单元号"
},
{
prop: "zl",
label: "坐落"
},
],
column: this.qlrCommonTable
}
},
watch: {
tableData: {
handler: function (val, oldVal) {
let that = this
if (val.length == 0 || !val) {
that.tableDataList = _.cloneDeep([{
sqrmc: '',
dlrzjlx: '',
dlrzjh: '',
fr: ''
}])
} else {
that.tableDataList = _.cloneDeep(val)
}
},
immediate: true,
deep: true
},
gyfs: {
handler (newVal, oldValue) {
let dataList = _.cloneDeep(this.qlrCommonTable)
if (newVal == '1') {
this.column = _.cloneDeep(dataList).slice(1, dataList.length)
} else if ((newVal == '2')) {
this.column = dataList
} else {
this.column = _.cloneDeep(dataList)
this.column.splice(
2, 0, {
prop: "qlbl",
label: "份数"
})
}
},
immediate: true
}
},
methods: {
}
}
</script>
<style scoped lang='scss'>
/deep/.el-table th {
height: 30px !important;
}
/deep/.el-table--small .el-table__cell {
padding: 5px;
}
</style>
<!--
* @Description: 房屋多幢明细
* @Autor:
* @LastEditTime: 2023-09-01 13:29:29
-->
<template>
<div>
<el-table
:data="tableDataList"
border
:pagination="false"
:key="key"
:header-cell-style="{ 'text-align': 'center' }"
:heightNumSetting="true"
:minHeight="150"
height="150"
style="width: 100%">
<el-table-column prop="index" width="50" :render-header="renderHeader">
<template slot-scope="scope">
<div style="text-align: center">{{ scope.$index + 1 }}</div>
</template>
</el-table-column>
<el-table-column prop="bdcdyh" label="不动产单元号" min-width="100">
<template slot-scope="scope">
<div style="text-align: center">{{ scope.row.bdcdyh }}</div>
</template>
</el-table-column>
<el-table-column prop="xmmc" label="项目名称" min-width="100">
<template slot-scope="scope">
<el-input
class="item"
:disabled="!ableOperation"
v-model="scope.row.xmmc"
placeholder="请输入内容"
@input="updaterow(scope.row)">
</el-input>
</template>
</el-table-column>
<el-table-column prop="fwxz" label="房屋性质" min-width="100">
<template slot-scope="scope">
<treeselect
v-model="scope.row.fwxz"
:disabled="!ableOperation"
noOptionsText="暂无数据"
placeholder=""
:show-count="true"
:options="dictData['A19']"
:normalizer="normalizer"
:appendToBody="true"
z-index="9999"
@input="updaterow(scope.row)" />
</template>
</el-table-column>
<el-table-column prop="ghyt" label="房屋用途" min-width="100">
<template slot-scope="scope">
<treeselect
v-model="scope.row.ghyt"
:disabled="!ableOperation"
noOptionsText="暂无数据"
placeholder=""
:show-count="true"
:options="dictData['A17']"
:normalizer="normalizer"
:appendToBody="true"
z-index="9999"
@input="updaterow(scope.row)" />
</template>
</el-table-column>
<el-table-column prop="fwjg" label="房屋结构" min-width="100">
<template slot-scope="scope">
<treeselect
v-model="scope.row.fwjg"
:disabled="!ableOperation"
noOptionsText="暂无数据"
placeholder=""
:show-count="true"
:options="dictData['A46']"
:normalizer="normalizer"
:appendToBody="true"
z-index="9999"
@input="updaterow(scope.row)" />
</template>
</el-table-column>
<el-table-column prop="jzmj" label="建筑面积" min-width="100">
<template slot-scope="scope">
<el-input
maxlength="12"
class="item"
:disabled="!ableOperation"
oninput="value = (value.match(/^\d*(\.?\d{0,2})/g)[0]) || null"
v-model="scope.row.jzmj"
placeholder="请输入内容"
@input="updaterow(scope.row)">
</el-input>
</template>
</el-table-column>
<el-table-column prop="jgsj" label="竣工时间" min-width="100">
<template slot-scope="scope">
<el-date-picker
v-model="scope.row.jgsj"
type="date"
:disabled="!ableOperation"
placeholder="选择日期"
value-format="yyyy-MM-dd HH:mm:ss"
format="yyyy-MM-dd"
@input="updaterow(scope.row)">
</el-date-picker>
</template>
</el-table-column>
<el-table-column prop="zcs" label="总层数" min-width="100">
<template slot-scope="scope">
<el-input
class="item"
:disabled="!ableOperation"
oninput="value = (value.match(/^\d*(\.?\d{0,2})/g)[0]) || null"
v-model="scope.row.zcs"
placeholder="请输入内容"
@input="updaterow(scope.row)">
</el-input>
</template>
</el-table-column>
<el-table-column prop="zts" label="总套数" min-width="100">
<template slot-scope="scope">
<el-input
class="item"
:disabled="!ableOperation"
oninput="value = (value.match(/^\d*(\.?\d{0,2})/g)[0]) || null"
v-model="scope.row.zts"
placeholder="请输入内容"
@input="updaterow(scope.row)">
</el-input>
</template>
</el-table-column>
</el-table>
</div>
</template>
<script>
import { mapGetters } from "vuex";
export default {
computed: {
...mapGetters(["dictData"]),
},
props: {
tableData: {
type: Array,
default: function () {
return [];
},
},
ableOperation: {
type: Boolean,
default: false,
},
},
data () {
return {
// 键名转换,方法默认是label和children进行树状渲染
key: 0,
tableDataList: [],
normalizer (node) {
if (node.children == null || node.children == "null") {
delete node.children;
}
return {
id: node.dcode,
label: node.dname,
children: node.children,
};
},
};
},
mounted () {
},
watch: {
tableData: {
handler: function (val, oldVal) {
let that = this;
this.$nextTick(() => {
if (val.length == 0 || !val) {
that.tableDataList = _.cloneDeep([
{
yt: null,
qssj: "",
jssj: "",
tdsyqx: "",
},
]);
} else {
that.tableDataList = _.cloneDeep(val);
}
});
},
immediate: true,
deep: true,
},
},
methods: {
/**
* @description: renderHeader
* @author: renchao
*/
renderHeader () {
return (
<div>
{"序号"}
</div>
);
},
updaterow (a) {
this.$emit("updateFdcwxmList", this.tableDataList);
}
}
}
</script>
<style scoped lang="scss">
.el-input {
border: none !important;
}
/deep/ .el-table__row {
border: none !important;
}
.el-date-editor.el-input {
width: 100%;
}
/deep/ .el-table th {
height: 30px !important;
}
</style>
<!--
* @Description:
* @Autor: renchao
* @LastEditTime: 2023-07-28 16:28:43
-->
<template>
<div class="from-clues">
<!-- 发证信息 -->
<div class="from-clues-header">
<el-form :model="ruleForm">
<el-row :gutter="20">
<el-col :span="6">
<el-form-item label="印刷序列号">
<el-input v-model="ruleForm.ysxlh" clearable placeholder="请输入印刷序列号"></el-input>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="证书号">
<el-input v-model="ruleForm.zsh" clearable placeholder="请输入证书号"></el-input>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="权利人">
<el-input v-model="ruleForm.qlr" clearable placeholder="请输入权利人"></el-input>
</el-form-item>
</el-col>
<el-col :span="6" class="btnColRight" v-if="viewEdit">
<el-form-item>
<el-button type="primary" icon="el-icon-search" @click="handleSearch">查询</el-button>
<el-button type="primary" icon="el-icon-search" @click="zslqClick">证书领取</el-button>
</el-form-item>
</el-col>
</el-row>
</el-form>
</div>
<div class="from-clues-content">
<lb-table border :column="tableData.columns" :heightNum="210" :data="tableData.data" :pagination="false">
</lb-table>
</div>
</div>
</template>
<script>
import { mapGetters } from 'vuex'
import store from '@/store/index.js'
import table from "@/utils/mixin/table";
import { datas } from "../javascript/fzxxdata";
import { getCertificateList } from "@/api/bdcqz.js";
export default {
mixins: [table],
data () {
return {
//表单是否可操作
viewEdit: false,
ruleForm: {
ysxlh: '',
zsh: '',
qlr: '',
bsmSldy: ''
},
tableData: {
total: 0,
columns: datas.columns().fzgrid,
data: []
},
dialogVisible: false
}
},
created () {
this.viewEdit = this.$parent.currentSelectTab.ableOperation
},
computed: {
...mapGetters(['workFresh'])
},
watch: {
workFresh: {
handler (newVal, oldVal) {
if (newVal) this.queryClick()
}
}
},
methods: {
/**
* @description: queryClick
* @author: renchao
*/
queryClick () {
this.ruleForm.bsmSlsq = this.$route.query.bsmSlsq;
getCertificateList(this.ruleForm).then(res => {
if (res.code === 200) {
this.tableData.data = res.result ? res.result : []
}
})
},
/**
* @description:
* @author: renchao
*/
zslqClick () {
store.dispatch('user/reWorkFresh', false)
this.$popupDialog("不动产权证领取", "workflow/components/dialog/zslq", {}, '80%', true)
}
}
}
</script>
<style scoped lang='scss'>
@import "~@/styles/public.scss";
</style>
<!--
* @Description:
* @Autor: renchao
* @LastEditTime: 2023-05-17 10:41:15
-->
<template>
<div>
<div class="process-viewer">
<div
v-show="!isLoading"
ref="processCanvas"
class="process-canvas"
style="height: 280px"
/>
<!-- 自定义箭头样式,用于成功状态下流程连线箭头 -->
<defs ref="customSuccessDefs">
<marker
id="sequenceflow-end-white-success"
view-box="0 0 20 20"
ref-x="11"
ref-y="10"
marker-width="10"
marker-height="10"
orient="auto"
>
<path
class="success-arrow"
d="M 1 5 L 11 10 L 1 15 Z"
style="
stroke-width: 1px;
stroke-linecap: round;
stroke-dasharray: 10000, 1;
"
/>
</marker>
<marker
id="conditional-flow-marker-white-success"
view-box="0 0 20 20"
ref-x="-1"
ref-y="10"
marker-width="10"
marker-height="10"
orient="auto"
>
<path
class="success-conditional"
d="M 0 10 L 8 6 L 16 10 L 8 14 Z"
style="
stroke-width: 1px;
stroke-linecap: round;
stroke-dasharray: 10000, 1;
"
/>
</marker>
</defs>
<!-- 自定义箭头样式,用于失败状态下流程连线箭头 -->
<defs ref="customFailDefs">
<marker
id="sequenceflow-end-white-fail"
view-box="0 0 20 20"
ref-x="11"
ref-y="10"
marker-width="10"
marker-height="10"
orient="auto"
>
<path
class="fail-arrow"
d="M 1 5 L 11 10 L 1 15 Z"
style="
stroke-width: 1px;
stroke-linecap: round;
stroke-dasharray: 10000, 1;
"
/>
</marker>
<marker
id="conditional-flow-marker-white-fail"
view-box="0 0 20 20"
ref-x="-1"
ref-y="10"
marker-width="10"
marker-height="10"
orient="auto"
>
<path
class="fail-conditional"
d="M 0 10 L 8 6 L 16 10 L 8 14 Z"
style="
stroke-width: 1px;
stroke-linecap: round;
stroke-dasharray: 10000, 1;
"
/>
</marker>
</defs>
<div style="position: absolute; top: 0px; left: 0px; width: 100%">
<el-row type="flex" justify="end">
<el-button-group key="scale-control" size="medium">
<el-button
size="medium"
type="default"
:plain="true"
:disabled="defaultZoom <= 0.3"
icon="el-icon-zoom-out"
@click="processZoomOut()"
/>
<el-button size="medium" type="default" style="width: 90px">{{
Math.floor(this.defaultZoom * 10 * 10) + "%"
}}</el-button>
<el-button
size="medium"
type="default"
:plain="true"
:disabled="defaultZoom >= 3.9"
icon="el-icon-zoom-in"
@click="processZoomIn()"
/>
<el-button
size="medium"
type="default"
icon="el-icon-c-scale-to-original"
@click="processReZoom()"
/>
<slot />
</el-button-group>
</el-row>
</div>
</div>
<!-- 已完成节点悬浮弹窗 -->
<div class="information-list">
<el-select v-model="selectValue" @change="handleSelect">
<el-option
v-for="item in selectOptions"
:key="item.value"
:label="item.label"
:value="item.value"
>
</el-option>
</el-select>
<div class="cutline">
<p class="cutlines">图例</p>
<div v-for="item in cutlinelist" :key="item.value" class="concent" :style="{ backgroundColor: item.backgroundColor,borderColor:item.color }">
{{item.value}}
</div>
</div>
<el-table
height="190"
:data="taskCommentList"
size="mini"
border
header-cell-class-name="table-header-gray"
>
<el-table-column
label="序号"
header-align="center"
align="center"
type="index"
width="55px"
/>
<el-table-column
label="转入时间"
prop="createTime"
:formatter="formatDate"
width="160"
align="center"
/>
<el-table-column
label="认领时间"
prop="claimTime"
:formatter="formatDate"
width="160"
align="center"
/>
<el-table-column
label="转出时间"
prop="endTime"
:formatter="formatDate"
width="160"
align="center"
/>
<el-table-column label="操作方式" prop="controls" align="center" />
<el-table-column label="意见" prop="idea" align="center" />
</el-table>
</div>
</div>
</template>
<script>
import "@/styles/package/theme/index.scss";
import BpmnViewer from "bpmn-js/lib/Viewer";
import MoveCanvasModule from "diagram-js/lib/navigation/movecanvas";
export default {
props: {
formData: {
type: Object,
default: {},
},
},
data() {
return {
dlgTitle: undefined,
defaultZoom: 1,
// 是否正在加载流程图
isLoading: true,
bpmnViewer: undefined,
// 已完成流程元素
processNodeInfo: undefined,
// 当前任务id
selectTaskId: undefined,
// 任务节点审批记录
taskList: [],
taskCommentList: [],
// 已完成任务悬浮延迟Timer
hoverTimer: null,
// 下拉
selectValue: "",
selectOptions: [],
cutlinelist:[
{
value: "完成节点",
color: "#4eb819",
backgroundColor :"rgba(78, 184, 25,0.2)"
},
{
value: "当前节点",
color: "#409EFF",
backgroundColor :"rgba(64, 158, 255,0.2)"
},
{
value: "挂起节点",
color: "#E6A23C",
backgroundColor :"rgba(230, 162, 60,0.2)"
},
{
value: "阻塞节点",
color: "#F56C6C",
backgroundColor :"rgb(245, 108, 108,0.2)"
},
{
value: "未激活节点",
color: "#000000",
backgroundColor :"none",
}
],
};
},
created() {
this.$nextTick(() => {
// 获取流程记录
this.getCommentList();
this.setProcessStatus(this.formData.finishedInfo);
this.importXML(this.formData.xml);
});
},
destroyed() {
this.clearViewer();
},
methods: {
/**
* @description: formatDate
* @param {*} row
* @param {*} column
* @author: renchao
*/
formatDate(row, column) {
let data = row[column.property];
if (data == null) {
return null;
}
let dt = new Date(data);
return (
dt.getFullYear() +
"-" +
(dt.getMonth() + 1) +
"-" +
dt.getDate() +
" " +
dt.getHours() +
":" +
dt.getMinutes() +
":" +
dt.getSeconds()
);
},
/**
* @description: processReZoom
* @author: renchao
*/
processReZoom() {
this.defaultZoom = 1;
this.bpmnViewer.get("canvas").zoom("fit-viewport", "auto");
},
/**
* @description: processZoomIn
* @param {*} zoomStep
* @author: renchao
*/
processZoomIn(zoomStep = 0.1) {
const newZoom = Math.floor(this.defaultZoom * 100 + zoomStep * 100) / 100;
if (newZoom > 4) {
throw new Error(
"[Process Designer Warn ]: The zoom ratio cannot be greater than 4"
);
}
this.defaultZoom = newZoom;
this.bpmnViewer.get("canvas").zoom(this.defaultZoom);
},
/**
* @description: processZoomOut
* @param {*} zoomStep
* @author: renchao
*/
processZoomOut(zoomStep = 0.1) {
const newZoom = Math.floor(this.defaultZoom * 100 - zoomStep * 100) / 100;
if (newZoom < 0.2) {
throw new Error(
"[Process Designer Warn ]: The zoom ratio cannot be scss than 0.2"
);
}
this.defaultZoom = newZoom;
this.bpmnViewer.get("canvas").zoom(this.defaultZoom);
},
/**
* @description: getOperationTagType
* @param {*} type
* @author: renchao
*/
getOperationTagType(type) {
return "success";
},
// 流程图预览清空
/**
* @description: 流程图预览清空
* @param {*} e
* @author: renchao
*/
clearViewer(a) {
if (this.$refs.processCanvas) {
this.$refs.processCanvas.innerHTML = "";
}
if (this.bpmnViewer) {
this.bpmnViewer.destroy();
}
this.bpmnViewer = null;
},
// 添加自定义箭头
/**
* @description: 添加自定义箭头
* @author: renchao
*/
addCustomDefs() {
const canvas = this.bpmnViewer.get("canvas");
const svg = canvas._svg;
const customSuccessDefs = this.$refs.customSuccessDefs;
const customFailDefs = this.$refs.customFailDefs;
svg.appendChild(customSuccessDefs);
svg.appendChild(customFailDefs);
},
// 任务悬浮弹窗
/**
* @description: 任务悬浮弹窗
* @param {*} element
* @author: renchao
*/
onSelectElement(element) {
this.selectTaskId = undefined;
this.dlgTitle = undefined;
let allfinishedTaskSet = [
...this.processNodeInfo.finishedTaskSet,
...this.processNodeInfo.unfinishedTaskSet,
];
if (this.processNodeInfo == null || allfinishedTaskSet == null) return;
if (element == null || allfinishedTaskSet.indexOf(element.id) === -1) {
return;
}
this.selectTaskId = element.id;
this.selectValue = element.id;
this.dlgTitle = element.businessObject
? element.businessObject.name
: undefined;
// 计算当前悬浮任务审批记录,如果记录为空不显示弹窗
this.taskCommentList = (this.taskList || []).filter((item) => {
return item.taskDefinitionKey === this.selectTaskId;
});
if (this.taskCommentList.length == 0) {
this.taskCommentList = this.taskList;
}
},
// 下拉列表切换
/**
* @description: 下拉列表切换
* @param {*} val
* @author: renchao
*/
handleSelect(val) {
this.taskCommentList = (this.taskList || []).filter((item) => {
return item.taskDefinitionKey === val;
});
if (this.taskCommentList.length == 0) {
this.taskCommentList = this.taskList;
}
},
// 显示流程图
/**
* @description: 显示流程图
* @param {*} xml
* @author: renchao
*/
async importXML(xml) {
let xmlData = this.$x2js.xml2js(xml).definitions.process;
this.selectOptions = xmlData.userTask.map((item) => {
return { value: item._id, label: item._name };
});
this.selectOptions = [
{ value: xmlData.startEvent._id, label: "浏览记录" },
...this.selectOptions,
];
this.selectOptions = this.selectOptions
.map((item) => {
if (this.formData.finishedInfo.finishedTaskSet.includes(item.value)) {
return item;
}
if (
this.formData.finishedInfo.unfinishedTaskSet.includes(item.value)
) {
return item;
}
})
.filter(Boolean);
this.selectValue = xmlData.startEvent._id;
this.clearViewer("a");
if (xml != null && xml !== "") {
try {
this.bpmnViewer = new BpmnViewer({
additionalModules: [
// 移动整个画布
MoveCanvasModule,
],
container: this.$refs.processCanvas,
});
// 任务节点悬浮事件
this.bpmnViewer.on("element.click", ({ element }) => {
this.onSelectElement(element);
});
await this.bpmnViewer.importXML(xml);
this.isLoading = true;
this.addCustomDefs();
} catch (e) {
this.clearViewer("b");
} finally {
this.isLoading = false;
this.setProcessStatus(this.processNodeInfo);
this.$nextTick(() => {
this.processReZoom();
});
}
}
},
// 获取流程记录
/**
* @description: 获取流程记录
* @author: renchao
*/
getCommentList() {
this.formData.allCommentList.forEach(async (item, index) => {
// item.comments.forEach(element => {
// if(element.type=="COMPLETE"){
// this.formData.allCommentList[index].idea=element.message
// this.formData.allCommentList[index].controls="完成"
// }
// });
let type = item.comments[item.comments.length - 1].type;
this.formData.allCommentList[index].idea =
item.comments[item.comments.length - 1].message;
// 操作方式
let controls = "";
// 正在办理
// 已完结
// 已退回
switch (type) {
case "COMPLETE":
controls = "完成";
break;
case "CLAIM":
controls = "完成";
break;
case "ASSIGN":
controls = "转办";
break;
case "DELEGATE":
controls = "委派";
break;
case "UNCLAIM":
controls = "取消认领";
break;
case "STOP":
controls = "终止";
break;
case "BACK":
controls = "退回";
break;
}
this.formData.allCommentList[index].controls = controls;
this.formData.allCommentList[index].agent = item.assignee.name;
});
this.formData.handlinglist.forEach(async (item, index) => {
if (item.assignee.name) {
this.formData.handlinglist[index].agent = item.assignee.name;
} else {
let str = "";
item.countersign.forEach((item) => {
str += item.name + ",";
});
str = str.slice(0, -1);
this.formData.allCommentList[index].agent = str;
}
});
this.taskList = [
...this.formData.allCommentList,
...this.formData.handlinglist,
];
// this.taskList =this.formData.allCommentList;
// 处理数据之后赋值
this.taskCommentList = this.taskList;
this.taskCommentList = this.taskCommentList.sort(this.sortDownDate);
},
/**
* 时间排序函数
* @description: formatDate
* @param {*} row
* @param {*} column
* @author: renchao
*/
sortDownDate(a, b) {
return Date.parse(a.createTime) - Date.parse(b.createTime);
},
// 设置流程图元素状态
/**
* @description: 设置流程图元素状态
* @param {*} processNodeInfo
* @author: renchao
*/
setProcessStatus(processNodeInfo) {
this.processNodeInfo = processNodeInfo;
if (
this.isLoading ||
this.processNodeInfo == null ||
this.bpmnViewer == null
)
return;
const {
finishedTaskSet,
rejectedTaskSet,
unfinishedTaskSet,
finishedSequenceFlowSet,
} = this.processNodeInfo;
const canvas = this.bpmnViewer.get("canvas");
const elementRegistry = this.bpmnViewer.get("elementRegistry");
if (Array.isArray(finishedSequenceFlowSet)) {
finishedSequenceFlowSet.forEach((item) => {
if (item != null) {
canvas.addMarker(item, "success");
const element = elementRegistry.get(item);
const conditionExpression =
element.businessObject.conditionExpression;
if (conditionExpression) {
canvas.addMarker(item, "condition-expression");
}
}
});
}
if (Array.isArray(finishedTaskSet)) {
finishedTaskSet.forEach((item) => canvas.addMarker(item, "success"));
}
if (Array.isArray(unfinishedTaskSet)) {
unfinishedTaskSet.forEach((item) => canvas.addMarker(item, "primary"));
}
if (Array.isArray(rejectedTaskSet)) {
rejectedTaskSet.forEach((item) => {
if (item != null) {
const element = elementRegistry.get(item);
if (element.type.includes("Task")) {
canvas.addMarker(item, "danger");
} else {
canvas.addMarker(item, "warning");
}
}
});
}
},
},
};
</script>
<style scoped lang="scss">
.information-list {
height: 220px;
margin-top: 10px;
p {
font-size: 16px;
line-height: 24px;
}
}
/deep/.bjs-powered-by {
display: none;
}
// /deep/.information-list {
// height: 170px;
// overflow: visible;
// }
.cutline {
float: right;
width: 30%;
height: 30px;
display: flex;
margin-right: 30px;
justify-content: space-between;
.cutlines{
line-height: 30px;
font-weight: 600;
margin-right: 50px;
}
.concent{
line-height: 30px;
line-height: 14px;
text-align: center;
align-items: center;
margin: auto;
padding: 3px;
border-radius: 4px;
border:1px solid #fff;
}
}
</style>
<!--
* @Description:
* @Autor: renchao
* @LastEditTime: 2023-07-17 13:50:53
-->
<template>
<lb-table :column="column" :maxHeight="200" :heightNumSetting="true" :pagination="false" :key="key" :data="tableData">
</lb-table>
</template>
<script>
import addQlr from './dialog/addQlr.vue'
import { mapGetters } from 'vuex'
export default {
components: {
addQlr
},
computed: {
...mapGetters(["dictData"]),
},
props: {
tableData: {
type: Array,
default: function () {
return []
}
},
gyfs: {
type: String,
default: '1'
}
},
data () {
return {
key: 0,
dataIndex: 0,
dialog: false,
details: {},
tableDataList: [],
qlrCommonTable: [
{
label: '序号',
type: 'index',
width: '50',
render: (h, scope) => {
return (
<div>
{scope.$index + 1}
</div>
)
}
},
// {
// prop: "bdcdyh",
// label: "不动产单元号"
// },
{
prop: "zl",
label: "坐落"
},
{
prop: "shbw",
label: "室号部位"
},
{
prop: "fwxzmc",
label: "房屋性质"
},
{
prop: "sjc",
label: "层号"
},
{
prop: "jzmj",
label: "建筑面积"
},
{
prop: "fwlxmc",
label: "房屋类型"
},
{
prop: "showfwyt",
label: "房屋用途"
},
{
prop: "showfwjg",
label: "房屋结构"
},
],
column: this.qlrCommonTable
}
},
watch: {
tableData: {
handler: function (val, oldVal) {
let that = this;
if (val.length == 0 || !val) {
} else {
that.tableDataList = _.cloneDeep(val)
}
},
immediate: true,
deep: true
},
gyfs: {
handler (newVal, oldValue) {
let dataList = _.cloneDeep(this.qlrCommonTable)
if (newVal == '1') {
this.column = _.cloneDeep(dataList).slice(1, dataList.length)
} else if ((newVal == '2')) {
this.column = dataList
} else {
this.column = _.cloneDeep(dataList)
this.column.splice(
2, 0, {
prop: "qlbl",
label: "份数"
})
}
},
immediate: true
}
},
methods: {
}
}
</script>
<style scoped lang="scss">
/deep/.el-table th {
height: 30px !important;
}
/deep/.el-table--small .el-table__cell {
padding: 5px;
}
</style>
<!--
* @Description:
* @Autor: renchao
* @LastEditTime: 2023-09-14 17:19:26
-->
<template>
<div class="slxx sdqxx">
<el-form
:model="ruleForm"
ref="ruleForm"
v-Loading="loading"
:label-position="flag ? 'top' : ''"
:inline="flag"
label-width="130px">
<div class="slxx_con" :class="flag ? 'formMarginBot0' : ''">
<div class="slxx_title title-block">
电力信息
<div class="triangle"></div>
</div>
<el-row :gutter="10">
<el-col :span="8">
<el-form-item label="服务代码:">
<el-input v-model="ruleForm.serviceCode"></el-input>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="行政区划区县代码:">
<el-input v-model="ruleForm.areacode"></el-input>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="登记系统业务号:">
<el-input v-model="ruleForm.ywh"></el-input>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="10">
<el-col :span="8">
<el-form-item label="推送日期:">
<el-input v-model="ruleForm.SENDTIME"></el-input>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="原户主姓名:">
<el-input v-model="ruleForm.mcOld"></el-input>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="原户主身份证号码:">
<el-input v-model="ruleForm.zjhmOld"></el-input>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="10">
<el-col :span="8">
<el-form-item label="原户主联系电话:">
<el-input v-model="ruleForm.lxdhOld"></el-input>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="新户主姓名:">
<el-input v-model="ruleForm.mcNew"></el-input>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="新户主身份证号码:">
<el-input v-model="ruleForm.zjhmNew"></el-input>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="10">
<el-col :span="8">
<el-form-item label="新户主联系电话:">
<el-input v-model="ruleForm.lxdhNew"></el-input>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="房产证编号:">
<el-input v-model="ruleForm.fczbh"></el-input>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="是否过户:">
<el-switch
v-model="ruleForm.sfgh"
:active-value='1'
active-text="是"
:inactive-value="0"
inactive-text="否">
</el-switch>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="10">
<el-col :span="24">
<el-form-item label="房屋坐落(地址):">
<el-input v-model="ruleForm.fwzl" type="textarea"
:rows="2"></el-input>
</el-form-item>
</el-col>
</el-row>
<el-row class="btn" v-if="viewEdit">
<el-form-item>
<el-button type="primary" @click="onSubmit">保存</el-button>
</el-form-item>
</el-row>
</div>
</el-form>
</div>
</template>
<script>
import { mapGetters } from "vuex";
import { getDlxxByBsmSldy, saveOrUpdateDlxx } from "@/api/sfxx.js";
export default {
computed: {
...mapGetters(["dictData", "flag"]),
},
mounted () {
// this.loading = true
this.viewEdit = this.$parent.currentSelectTab.ableOperation;
this.propsParam = this.$attrs;
var formdata = new FormData();
formdata.append("bsmSldy", this.propsParam.bsmSldy);
formdata.append("djlx", this.propsParam.djlx);
formdata.append("isEdit", this.viewEdit);
console.log(this.propsParam)
this.getDlxxByBsmSldy()
},
data () {
return {
loading: false,
//表单是否可操作
viewEdit: false,
ruleForm: {
SFGH: 1
}
}
},
methods: {
getDlxxByBsmSldy() {
getDlxxByBsmSldy(this.propsParam.bsmSldy).then((res) => {
if (res.code === 200) {
if (res.result != null) {
this.ruleForm = res.result
}
}
});
},
saveOrUpdateDlxx() {
saveOrUpdateDlxx(this.ruleForm).then((res) => {
if (res.code === 200) {
this.$message.success("成功")
}
});
},
onSubmit () {
this.saveOrUpdateDlxx()
}
}
}
</script>
<style scoped lang="scss">
@import "~@/styles/public.scss";
@import "~@/styles/slxx/slxx.scss";
</style>
<!--
* @Description:
* @Autor: renchao
* @LastEditTime: 2023-12-29 16:35:50
-->
<template>
<div class='sfxx'>
<div class="sfxx-left">
<div class="slxx_title title-block">
基本信息
<div class="triangle"></div>
</div>
<ul>
<li>
<p>业务号</p>
<p>{{detail.ywh}}</p>
</li>
<li>
<p>申请登记类型</p>
<p>{{detail.sqdjlx}}</p>
</li>
<li>
<p>联系人</p>
<p>{{detail.lxr}}</p>
</li>
<li>
<p>联系人电话</p>
<p>{{detail.lxdh}}</p>
</li>
<li>
<p>缴费人</p>
<p><el-input v-model="detail.jfr"></el-input></p>
</li>
<li>
<p>缴费单号</p>
<p><el-input v-model="detail.jfdh"></el-input></p>
</li>
<li>
<p>应收金额</p>
<p style="color:red">{{detail.ysje}}</p>
</li>
<li>
<p>实收金额</p>
<p><el-input v-model="detail.ssje"></el-input></p>
</li>
<li>
<p>备注</p>
<p><el-input v-model="detail.bz"></el-input></p>
</li>
</ul>
</div>
<div class="sfxx-right">
<div class="slxx_title title-block">
收费明细
<!-- <div class="triangle"></div> -->
<el-button type="primary" @click="hanldeAdd" style="float:right;margin-top:-5px">增加</el-button>
</div>
<el-table :data="tableData.data" border :height="355">
<el-table-column v-for="item in tableData.columns" :key="item.index" :prop="item.prop" :label="item.label" align="center">
</el-table-column>
<el-table-column label="操作" width="50">
<template slot-scope="scope">
<el-button type="text" @click="handleDelete(scope.row)">删除</el-button>
</template>
</el-table-column>
</el-table>
<div class="slxx_title title-block">
票据
<div style="height:250px">
<img src="../../../image/pj.jpg" alt="" style="height:100%">
</div>
</div>
</div>
</div>
</template>
<script>
import { mapGetters } from "vuex";
import { getSfmxList, deleteSfmx } from "@/api/sfxx.js";
export default {
components: {},
data () {
return {
detail: {
ywh: '',
sqdjlx: '',
lxr: '',
lxdh: '',
jfr: '',
jfdh: '',
ysje: '',
ssje: '',
bz: ''
},
tableData: {
columns: [
{
prop: "sfdw",
label: "收费单位",
},
{
label: '是否额外收费',
align: 'center',
render: (h, scope) => {
return (
<div>
{scope.row.sfewsf == '1' ? <span></span> : <span>否</span>}
</div>
)
}
},
{
prop: "sfry",
label: "收费人员",
},
{
prop: "sfkmmc",
label: "收费科目名称",
},
{
prop: "sjffr",
label: "实际付费人",
},
{
prop: "ssje",
label: "实收金额",
},
{
prop: "ysje",
label: "应收金额",
}
],
data: []
}
}
},
computed: {
...mapGetters(["workFresh"]),
},
watch: {
workFresh: {
handler (newVal, oldVal) {
if (newVal) this.getList();
},
},
},
mounted () {
this.getList()
},
methods: {
getList () {
let bsmBusiness = this.$route.query.bsmBusiness ? this.$route.query.bsmBusiness : window.currentSelect.bsmBusiness
getSfmxList(bsmBusiness).then(res => {
this.tableData.data = res.result
})
},
hanldeAdd () {
let bsmBusiness = this.$route.query.bsmBusiness ? this.$route.query.bsmBusiness : window.currentSelect.bsmBusiness
this.$popupDialog('新增', 'workflow/components/dialog/xzsf', { bsmBusiness: bsmBusiness }, '50%', true)
},
handleDelete (row) {
let that = this
this.$confirm('此操作将永久删除该 是否继续?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
}).then(() => {
deleteSfmx(row.bsmSf).then(res => {
if (res.code == 200) {
that.$message({
message: '删除成功!',
type: 'success'
})
that.getList()
} else {
that.$message({
type: 'info',
message: res.message
})
}
})
}).catch(() => {
this.$message({
type: 'info',
message: '已取消删除'
})
})
}
}
}
</script>
<style scoped lang='scss'>
@import "~@/styles/public.scss";
.sfxx {
display: flex;
padding: 10px;
height: 100%;
box-sizing: border-box;
&-left {
width: 50%;
margin-right: 10px;
ul {
border-radius: 3px;
}
li:last-child {
border-bottom: 1px solid #e8e5e5;
}
li {
display: flex;
border: 1px solid #e8e5e5;
border-bottom: none;
p:nth-child(1) {
width: 35%;
text-align: center;
background-color: #fafafa;
border-right: 1px solid #e8e5e5;
padding: 10px 0;
}
p:nth-child(2) {
width: 65%;
display: flex;
align-items: center;
box-sizing: border-box;
margin: 0 10px;
}
}
}
&-right {
width: 50%;
margin-left: 10px;
}
}
</style>
<!--
* @Description: 审批意见
* @Autor: renchao
* @LastEditTime: 2024-01-26 08:45:07
-->
<template>
<div class="spyj" v-Loading="loading">
<div class="box">
<div class="spyj_title">
<div class="righttitle">审批表</div>
</div>
<div v-for="(item, index) in tableData" :key="index">
<el-form
:model="tableData[index]"
label-width="120px"
ref="ruleForm'">
<div class="spyj_form">
<div class="item_left">
<div class="right">{{ item.jdmc }}意见</div>
</div>
<div class="item_right">
<el-row>
<el-col :span="24">
<el-form-item
label-width="0"
class="opinion_item">
<el-input
:disabled="!viewEdit || item.show"
type="textarea"
:rows="4"
class="opinion"
placeholder=""
v-model="item.shyj"></el-input>
<el-button
class="opinion_btn"
@click="commonOpinion(index)"
:disabled="!viewEdit|| item.show">常用意见</el-button>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="16">
<el-form-item label="审查人">
{{ item.shryxm }}
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item disabled label="审核时间" :key="refresh">
{{ item.shjssj }}
</el-form-item>
</el-col>
</el-row>
</div>
</div>
</el-form>
</div>
<div class="submit_button" v-if="viewEdit">
<el-button type="primary" :disabled="shows" @click="onSubmit()">保存</el-button>
</div>
</div>
</div>
</template>
<script>
import { saveSpyjBySlsq, getSpyjList } from "@/api/opinion.js";
import { mapGetters } from "vuex";
import { getNewDatesh } from "@/utils/util";
export default {
computed: {
...mapGetters(["dqhj", "yjsqOptions", "userInfo"]),
},
data () {
return {
loading: false,
currentindex: 0,
refresh: 10,
viewEdit: false,
bsmSlsq: this.$route.query.bsmSlsq,
bestepid: this.$route.query.bestepid,
propsParam: {},
tableData: [],
shows: false,
};
},
watch: {
yjsqOptions: {
handler (val) {
this.add(val.opinion);
},
deep: true,
immediate: true,
},
dqhj: {
handler (val) {
this.propsParam = this.$attrs;
this.dataset()
this.getShList();
},
deep: true,
immediate: true,
},
},
methods: {
/**
* @description: dataset
* @param {*} 数据处理
* @author: renchao
*/
dataset () {
this.viewEdit = this.$parent.currentSelectTab.ableOperation;
},
/**
* @description: getShList
* @param {*} obj
* @author: renchao
*/
getShList () {
this.loading = true
var formdata = new FormData();
formdata.append("bsmBusiness", this.propsParam.bsmBusiness);
formdata.append("bestepid", this.$route.query.bestepid);
getSpyjList(formdata).then((res) => {
if (res.code === 200 && res.result) {
this.tableData = res.result;
if (this.shows) {
this.shows = false;
}
var index = this.tableData.findIndex(
(item) => item.jddm === this.$parent.dqhj
);
if (index == -1) {
switch (this.$parent.dqhj) {
case "cs":
this.tableData.push({ jdmc: "初审", jddm: "cs", sxh: 1 });
break;
case "fs":
this.tableData.push({ jdmc: "复审", jddm: "fs", sxh: 2 });
break;
case "hd":
this.tableData.push({ jdmc: "核定", jddm: "hd", sxh: 3 });
break;
}
}
this.tableData.forEach((item) => {
item.show = true;
if (this.$parent.dqhj == item.jddm) {
item["stepid"] = this.$route.query.bestepid;
item.shjssj = getNewDatesh();
item.shkssj = getNewDatesh();
item["shryxm"] = this.userInfo.name;
item["userid"] = this.userInfo.id;
item.show = false;
}
});
this.loading = false
}
})
},
/**
* @description: onSubmit
* @author: renchao
*/
onSubmit () {
this.tableData.forEach((item, index) => {
item["bsmBusiness"] = this.propsParam.bsmBusiness;
item["czjg"] = "1";
});
var index = this.tableData.findIndex(
(item) => item.shyj == null || item.shyj == ""
);
if (index == -1) {
this.shows = true;
saveSpyjBySlsq(this.tableData).then((res) => {
if (res.code === 200) {
this.$message.success("保存成功");
this.refresh += 1;
this.getShList();
} else {
this.$message.error(res.message);
}
});
} else {
this.$message.error("意见不能为空");
}
},
//打开常用意见列表弹窗
/**
* @description: 打开常用意见列表弹窗
* @param {*} index
* @author: renchao
*/
commonOpinion (index) {
this.currentindex = index;
this.$popupDialog(
"常用意见",
"workflow/components/dialog/commonOpinion",
{},
"70%",
true
);
},
/**
* @description: add
* @param {*} val
* @author: renchao
*/
add (val) {
if (val != "" && this.tableData.length > 0) {
this.$set(this.tableData[this.currentindex], "shyj", val);
}
},
},
};
</script>
<style scoped lang="scss">
@import "~@/styles/mixin.scss";
.spyj {
width: 100%;
height: 100%;
background-color: #f5f5f5;
.box {
overflow-x: auto;
width: 100%;
height: 95%;
background: #fff;
text-align: center;
padding: 4px;
overflow-y: scroll;
padding-top: 20px;
padding: 20px 40px;
.spyj_title {
width: 100%;
height: 80px;
border: 1px solid $borderColor;
background-color: #eceef2;
display: flex;
}
.leftadd {
width: 3%;
height: 100%;
display: flex;
font-size: 14px;
text-indent: 20px;
align-items: center;
border: 1px solid $borderColor;
}
.righttitle {
width: 80%;
height: 100%;
line-height: 80px;
border: 1px solid $borderColor;
margin: auto;
font-size: 22px;
font-weight: 400;
}
}
/deep/.el-form-item {
margin-bottom: 0;
}
.bottom10 {
margin-bottom: 15px;
}
.spyj_form {
display: flex;
border: 1px solid $borderColor;
.item_left {
width: 150px;
background-color: #f8f8fa;
color: #606266;
display: flex;
font-size: 14px;
text-indent: 50px;
align-items: center;
border-right: 1px solid $borderColor;
}
.item_right {
flex: 1;
width: 100%;
/deep/.el-form-item__label {
background-color: #f8f8fa;
}
/deep/.el-form-item__content {
display: block;
text-align: left;
}
.opinion_item {
/deep/.el-form-item__error {
margin-top: -16px !important;
left: 3px;
}
border-bottom: 1px solid $borderColor;
}
.opinion {
position: relative;
font-size: 14px;
/deep/.el-textarea__inner {
border: none;
}
}
.opinion_btn {
position: absolute;
right: 15px;
bottom: 10px;
}
}
}
.submit_button {
text-align: center;
margin: 15px 0;
}
.el-date-editor.el-input {
width: 100%;
}
}
</style>
<template>
<div class="slxx swxx">
<el-form
:model="ruleForm"
ref="ruleForm"
v-Loading="loading"
:label-position="flag ? 'top' : ''"
:inline="flag"
label-width="120px">
<div class="slxx_con" :class="flag ? 'formMarginBot0' : ''">
<div class="slxx_title title-block">
不动产信息
<div class="triangle"></div>
</div>
<el-row :gutter="10">
<el-col :span="8">
<el-form-item label="不动产单元号:">
<el-input disabled v-model="ruleForm.bdcdyh"></el-input>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="原产证号:">
<el-input disabled v-model="ruleForm.yfczh"></el-input>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="面积(m3):">
<el-input disabled v-model="ruleForm.mj"></el-input>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="10">
<el-col :span="8">
<el-form-item label="权利类型:">
<el-input disabled v-model="ruleForm.qllxmc"></el-input>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="用途:">
<el-input disabled v-model="ruleForm.yt"></el-input>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="坐落:">
<el-input disabled v-model="ruleForm.zl"></el-input>
</el-form-item>
</el-col>
</el-row>
<div class="slxx_title title-block">
买方信息
<div class="triangle"></div>
</div>
<lb-table :column="column" :pagination="false" :heightNumSetting="true"
:data="ruleForm.tableDataList">
</lb-table>
<div class="slxx_title title-block">
卖方信息
<div class="triangle"></div>
</div>
<lb-table :column="column1" :pagination="false" :heightNumSetting="true"
:data="ruleForm.tableDataList">
</lb-table>
<div class="slxx_title title-block">
合同信息
<div class="triangle"></div>
</div>
<el-row :gutter="10">
<el-col :span="8">
<el-form-item label="合同编号:">
<el-input v-model="ruleForm.htbh"></el-input>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="合同金额(万元):">
<el-input v-model="ruleForm.htje"></el-input>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="签订时间:">
<el-date-picker
class="width100"
v-model="ruleForm.qdsj"
type="date"
placeholder="选择日期"
value-format="yyyy-MM-dd HH:mm:ss"
format="yyyy-MM-dd">
</el-date-picker>
</el-form-item>
</el-col>
</el-row>
<div class="slxx_title title-block">
缴税信息
<div class="triangle"></div>
</div>
<lb-table :column="column2" :pagination="false" :heightNumSetting="true"
:data="ruleForm.tableDataList">
</lb-table>
</div>
<el-row class="btn" v-if="viewEdit">
<el-form-item>
<el-button type="primary" @click="onSubmit">保存</el-button>
</el-form-item>
</el-row>
</el-form>
</div>
</template>
<script>
import { mapGetters } from "vuex";
export default {
computed: {
...mapGetters(["dictData", "flag"]),
},
mounted () {
// this.loading = true
this.viewEdit = this.$parent.currentSelectTab.ableOperation;
this.propsParam = this.$attrs;
var formdata = new FormData();
formdata.append("bsmSldy", this.propsParam.bsmSldy);
formdata.append("djlx", this.propsParam.djlx);
formdata.append("isEdit", this.viewEdit);
// Init(formdata).then((res) => {
// if (res.code === 200 && res.result) {
// }
// });
},
data () {
return {
loading: false,
//表单是否可操作
viewEdit: false,
column: [
{
prop: "qlrxm",
label: "权利人姓名"
},
{
prop: "gyqk",
label: "共有情况"
},
{
prop: "zjzl",
label: "身份证号种类"
},
{
prop: "zjhm",
label: "证件号码"
},
],
column1: [{
prop: "ywrxm",
label: "义务人姓名"
},
{
prop: "zjzl",
label: "身份证号种类"
},
{
prop: "zjhm",
label: "证件号码"
}],
column2: [{
type: 'index',
label: "序号",
width: '50'
},
{
prop: "nsr",
label: "纳税人"
},
{
prop: "sz",
label: "税种"
},
{
prop: "jsyj",
label: "计税依据"
},
{
prop: "sl",
label: "税率"
},
{
prop: "jsje",
label: "计税金额"
}],
ruleForm: {
tableDataList: []
}
}
},
methods: {
onSubmit () { }
}
}
</script>
<style scoped lang="scss">
@import "~@/styles/public.scss";
@import "~@/styles/slxx/slxx.scss";
</style>
<!--
* @Description:
* @Autor: renchao
* @LastEditTime: 2024-01-30 15:46:45
-->
<template>
<div class="szxx">
<el-card
:class="classJudge(item)"
v-for="(item, index) in tableData"
:key="index">
<div slot="header" class="szxx_header">
<span class="header_type">{{
item.bdcqzlx == 1 ? "不动产权证书" : "不动产登记证明"
}}</span>
<div class="header_text">{{ item.bdcqzh }}</div>
</div>
<div class="szxx_body card_padding">
<div class="text color_iray">
<span>{{ item.qllx }}</span>
</div>
<div class="text color_red">
<span>{{ item.qlr }}</span><span class="color_iray">({{ item.qllx }})</span>
</div>
<div class="text color_iray">
<span>{{ item.gyqk }}</span>
</div>
<div class="text color_red">
<span>{{ item.bdcdyh }}</span>
</div>
<div class="text color_iray">
<span>{{ item.zl }}</span>
</div>
<div class="text color_red">
<span>{{ item.yt }}</span>
</div>
<div class="text color_iray">
<span>{{ item.mj }}</span>
</div>
<div class="text color_red">
<span>{{ item.syqx }}</span>
</div>
<div class="text color_iray">
<span>印刷序列号:{{ item.ysxlh }}</span>
</div>
</div>
<div class="card_padding" v-if="viewEdit">
<div class="top_line middle_margin"></div>
<div class="text tac" v-if="item.ysxlh">
<el-button
class="operation_button"
type="text"
@click="openInvalidDiglog(item)">再次打印({{ item.szcs }})</el-button>
<el-button
class="operation_button"
type="text"
@click="openRecordPop(item)">缮证记录</el-button>
</div>
<div class="text tac" v-else>
<el-button
class="operation_button"
type="text"
@click="openZsylDialog(item, 2)">证书打印({{ item.szcs }}</el-button>
<el-button
class="operation_button"
type="text"
@click="openRecordPop(item)">缮证记录</el-button>
</div>
</div>
</el-card>
<el-empty description="暂无数据" v-if="tableData.length == 0"></el-empty>
</div>
</template>
<script>
import { mapGetters } from "vuex";
import store from "@/store/index.js";
import { getSlsqBdcqzList } from "@/api/bdcqz.js";
export default {
props: {},
data () {
return {
//表单是否可操作
viewEdit: false,
dialog: false,
tableData: [],
bdcqzlx: 1,
bdcqz: {},
};
},
computed: {
...mapGetters(["workFresh"]),
},
watch: {
workFresh: {
handler (newVal, oldVal) {
if (newVal) this.list();
},
},
},
created () {
this.list();
this.viewEdit = this.$parent.currentSelectTab.ableOperation;
},
methods: {
/**
* @description: 初始化列表
* @author: renchao
*/
list () {
return new Promise((resolve, reject) => {
var bsmSlsq = this.$route.query.bsmSlsq;
getSlsqBdcqzList({ bsmSlsq: bsmSlsq }).then((res) => {
resolve(res.code);
if (res.code === 200) {
this.tableData = res.result;
if (res.result) {
this.bdcqz = res.result[0];
}
}
});
});
},
/**
* @description: 打开证书预览弹窗
* @param {*} item
* @param {*} type
* @author: renchao
*/
openZsylDialog (item, type) {
store.dispatch("user/reWorkFresh", false);
if (type == 1) {
this.$popupDialog(
"证书证明预览",
"workflow/components/dialog/zsyl",
{ bdcqz: item, bsmSlsq: this.$route.query.bsmSlsq },
'1230px',
true
);
} else {
this.$popupDialog(
"证书证明打印",
"workflow/components/dialog/zsdy",
{ ...item },
"76%",
true
);
}
},
/**
* @description: 再次打印
* @param {*} item
* @author: renchao
*/
openInvalidDiglog (item) {
this.$popupDialog(
"证书证明打印",
"workflow/components/dialog/zsdy",
{ ...item },
"76%",
true
);
},
/**
* @description: openRecordPop
* @param {*} item
* @author: renchao
*/
openRecordPop (item) {
this.$popupDialog(
"缮证记录",
"workflow/components/dialog/szRecord",
{ bsmBdcqz: item.bsmBdcqz },
"60%",
true
);
},
/**
* @description: classJudge 判断class
* @param {*} item
* @author: renchao
*/
classJudge (item) {
let className = "box-card";
if (item.bdcqzlx == 1) {
className += " zs-card";
} else {
className += " zm-card";
}
if (item.szcs == 0) {
className += " no-print";
}
return className;
},
},
};
</script>
<style scoped lang="scss">
@import "~@/styles/public.scss";
.szxx {
box-sizing: border-box;
padding-right: 15px;
width: 100%;
height: 100%;
overflow-y: scroll;
padding-bottom: 55px;
.box-card {
float: left;
width: 350px;
margin: 10px;
box-shadow: none;
background-image: url("~@/image/zm-bg.png");
background-size: 100% 100%;
border: 1px solid transparent;
/deep/ .el-card__header {
padding: 12px 66px;
background-size: auto;
border-bottom: 0;
position: relative;
}
.szxx_header {
color: #8b4534;
}
.szxx_body {
height: 330px;
}
}
.zs-card {
border: 1px solid #a6b0be;
background-image: none;
/deep/ .el-card__header {
background-image: url("~@/image/zs-red.png");
.szxx_header {
color: #ffe47c;
}
}
.top_line {
border-top: 1px solid #d3dbe5;
width: 330px;
margin: 0 auto 10px;
}
}
.zm-card {
/deep/ .el-card__header {
&:after {
content: "";
display: inline-block;
width: 330px;
height: 1px;
background-color: #b28676;
position: absolute;
left: 10px;
bottom: 0;
}
}
}
.zm-card.no-print {
background-image: url("~@/image/zm-gray.png");
/deep/ .el-card__header {
&:after {
background-color: #6d7278;
}
}
.szxx_header {
color: #6d7278;
}
}
.zs-card.no-print {
/deep/ .el-card__header {
background-image: url("~@/image/zs-gray.png");
.szxx_header {
color: #ffffff;
}
}
}
}
.szxx_header {
// color: #ffffff;
// font-weight: bolder;
font-size: 16px;
.header_type {
display: flex;
justify-content: center;
align-content: center;
}
.header_text {
text-align: center;
margin-top: 2px;
line-height: 22px;
}
}
.text {
margin-bottom: 8px;
text-align: left;
text-indent: 16px;
}
.text.tac {
text-align: center;
}
.color_iray {
color: #6d7278;
}
.color_red {
color: #ab0c0c;
}
.middle_margin {
margin-bottom: 10px;
}
.operation_button {
border: 1px solid #5c95e5;
padding: 5px;
text-align: center;
}
.card_padding {
padding-top: 8px;
font-size: 14px;
line-height: 22px;
}
/deep/.el-card__body {
padding: 0px;
}
</style>
<!--
* @Description:
* @Autor: renchao
* @LastEditTime: 2023-08-02 14:24:20
-->
<template>
<div class="from-clues">
<!-- 表单部分 -->
<div class="from-clues-header">
<div class="title">请选择要退回到的环节:</div>
<el-form ref="queryForm" label-width="90px">
<ul style="margin-bottom: 15px">
<li
v-for="(item, index) in dataList"
class="listDetail"
:key="index"
@click="changeSelectItem(item)">
<p class="icon">
<el-radio
v-model="selectActivity"
:label="item.activityId"
@change="changeSelectItem(item)"></el-radio>
</p>
<p>{{ item.activityName }}</p>
<p v-for="(child, childIndex) in item.assignee" :key="childIndex">
{{ child.name }}
</p>
</li>
</ul>
<div class="title">退回意见:</div>
<el-form-item>
<el-input
class="textArea"
type="textarea"
v-model="outstepopinion"
placeholder="请输入退回意见"></el-input>
</el-form-item>
<el-form-item>
<el-button style="float:right" @click="cancelBack">取消</el-button>
<el-button type="primary" @click="onSubmit" style="float:right">退回</el-button>
</el-form-item>
</el-form>
</div>
</div>
</template>
<script>
import { getTaskBackNode, sendBackTask } from "@/api/workFlow.js"
import { popupCacel } from "@/utils/popup.js";
export default {
props: {
formData: {
type: Object,
default: {},
},
},
data () {
return {
selectActivity: "",
dataList: [],
outstepopinion: "",
selectItem: {},
};
},
created () {
this.getBackNode();
},
methods: {
/**
* @description: onSubmit
* @author: renchao
*/
onSubmit () {
if (!this.outstepopinion) {
this.$message.error("请填写退回意见");
} else {
sendBackTask({
bsmSlsq: this.formData.bsmSlsq,
backNodeList: [this.selectItem],
message: this.outstepopinion
}).then((res) => {
if (res.code == 200) {
this.$message.success("退回成功");
setTimeout(() => {
if (window.opener && window.opener.getBpageList) {
window.opener.getBpageList();
} else {
window.opener.frames[0].getBpageList();
}
window.close();
this.$emit("input", false);
}, 1000);
} else {
this.$message.error(res.message);
}
});
}
},
/**
* @description: changeSelectItem
* @param {*} item
* @author: renchao
*/
changeSelectItem (item) {
this.selectItem = item;
this.selectActivity = item.activityId;
},
//获取可回退环节信息
/**
* @description: 获取可回退环节信息
* @author: renchao
*/
getBackNode () {
getTaskBackNode(this.formData).then((res) => {
if (res.code == 200) {
this.dataList = res.result;
console.log("this.dataList", this.dataList);
if (res.result) {
this.selectActivity = res.result[0].activityId;
this.selectItem = res.result[0];
}
}
});
},
/**
* @description: cancelBack
* @author: renchao
*/
cancelBack () {
popupCacel();
}
}
}
</script>
<style scoped lang="scss">
@import "~@/styles/mixin.scss";
.listDetail {
display: flex;
align-items: center;
width: 100%;
p {
line-height: 30px;
height: 30px;
@include flex-center;
flex: 1;
width: 100%;
border: 1px solid rgb(233, 235, 237);
margin-top: -1px;
margin-left: -1px;
}
.icon {
flex: 0 0 60px;
}
}
.title {
margin-bottom: 10px;
}
.textArea {
/deep/.el-textarea__inner {
min-height: 90px !important;
}
}
/deep/.el-radio .el-radio__label {
display: none;
}
</style>
<!--
* @Description:
* @Autor: renchao
* @LastEditTime: 2024-01-19 16:43:43
-->
<template>
<div class="from-clues">
<!-- 表单部分 -->
<div class="from-clues-header">
<el-form ref="queryForm" label-width="180px" v-if="this.formData.obj">
<el-form-item label="下一环节名称:">
{{ this.formData.obj.taskName }}
</el-form-item>
<el-form-item label="下一环节办理人:">
{{ this.formData.obj.usernames.join(",") }}
</el-form-item>
</el-form>
<el-form ref="queryForm" label-width="180px" v-else>
<el-form-item label="">
此环节为流程最后环节,转出后流程将结束
</el-form-item>
</el-form>
<div class="invalid-reson">审批意见:</div>
<el-input
class="opinion"
v-model="shyj"
placeholder="请输入审批意见"
type="textarea"
:rows="4"></el-input>
<!-- <el-button
class="opinion_btn"
@click="commonOpinion"
>常用意见</el-button
> -->
<el-button style="float: right" @click="cancelBack">取消转出</el-button>
<el-button type="primary" @click="submitForm" :loading="loading" style="float: right">确定转出</el-button>
</div>
</div>
</template>
<script>
import { completeTask, getNextLinkInfo } from "@/api/workFlow.js";
import { popupCacel } from "@/utils/popup.js";
import { mapGetters } from 'vuex'
export default {
components: {},
props: {
formData: {
type: Object,
default: {},
},
},
computed: {
...mapGetters(['yjsqOptions'])
},
data () {
return {
loading: false,
queryForm: {},
shyj: "",
};
},
watch: {
// yjsqOptions: {
// handler (val) {
// if(val){
// this.shyj = val
// }
// },
// },
},
mounted () {
// this.queryForm= this.queryForm.obj
},
methods: {
/**
* @description: submitForm
* @author: renchao
*/
commonOpinion () {
this.$popupDialog(
"常用意见",
"workflow/components/dialog/commonOpinion",
{},
"70%",
true
);
},
submitForm () {
this.loading = true
this.queryForm = {
bsmSlsq: this.formData.bsmSlsq,
shyj: this.shyj,
stepform: JSON.stringify(this.formData.tabList),
};
completeTask(this.queryForm).then((res) => {
this.loading = false
if (res.code === 200) {
this.$message.success("转件成功");
popupCacel();
setTimeout(() => {
window.close();
this.$emit("input", false);
if (window.opener && window.opener.getBpageList) {
window.opener.getBpageList();
} else {
window.opener.frames[0].getBpageList();
}
}, 360);
} else {
this.$message.error(res.message);
}
}).catch(() => {
this.loading = false
})
},
/**
* @description: closeDialog
* @author: renchao
*/
cancelBack () {
popupCacel();
},
},
};
</script>
<style scoped lang="scss">
@import "~@/styles/mixin.scss";
.el-button {
margin-top: 20px;
margin-right: 10px;
}
.opinion {
position: relative;
font-size: 14px;
}
.opinion_btn {
position: absolute;
right: 35px;
bottom: 80px;
}
</style>
<!--
* @Description:
* @Autor: renchao
* @LastEditTime: 2023-09-18 14:06:16
-->
<template>
<div style="width:100%;height:100%;">
<canvas id="mxcad" style="width:100%;height:100%;">
</canvas>
</div>
</template>
<script>
import Mx from "mxdraw"
export default {
mounted () {
// 动态加载 js库核心代码
Mx.loadCoreCode().then(() => {
// Mx.MxFun.setMxServer("ws://localhost:5090") // 开启socket通信 可编辑图纸
// 创建控件对象
Mx.MxFun.createMxObject({
canvasId: "mxcad", // canvas元素的id
cadFile: "buf/hhhh.dwg", // http方式(预览): 加载public/demo文件夹下转换后的图纸
callback: (mxDraw, {
canvas,
canvasParent
}) => {
// 可以拿到canvas元素和它的父级元素
// 拿到图层数据
mxDraw.addEvent('uiSetLayerData', (listLayer) => {
console.log(listLayer)
})
},
isNewFile: true // 是否新建文件
})
})
},
}
</script>
<style scoped lang="scss">
#mxcad {
pointer-events: none;
}
</style>
\ No newline at end of file
/*
* @Description:
* @Autor: renchao
* @LastEditTime: 2023-08-29 12:55:07
*/
import filter from '@/utils/filter.js'
let vm = null
const sendThis = (_this) => {
vm = _this
}
class data extends filter {
constructor() {
super()
}
columns () {
return {
//发证列表
fzgrid: [
{
label: '序号',
type: 'index',
width: '50'
},
{
prop: "fzrmc",
label: "发证人"
},
{
prop: "bdcqzlx",
label: "不动产权证类型",
width: '130',
render: (h, scope) => {
return (
<div>
<span v-show={scope.row.bdcqzlx == '1'}>不动产权证书</span>
<span v-show={scope.row.bdcqzlx == '2'}>不动产登记证明</span>
</div>
)
}
},
{
label: "权利类型",
width: '100',
render: (h, scope) => {
return (
<el-tooltip effect="dark" content={scope.row.qllx} placement="top" popper-class="tooltip-width ">
<span class="ellipsis-table"> {scope.row.qllx}</span>
</el-tooltip>
)
}
},
{
label: "面积(㎡)",
width: '100',
render: (h, scope) => {
return (
<el-tooltip effect="dark" content={scope.row.mj} placement="top" popper-class="tooltip-width ">
<span class="ellipsis-table"> {scope.row.mj}</span>
</el-tooltip>
)
}
},
{
prop: "fzsj",
label: "发证时间",
width: '140',
},
{
prop: "lzrxm",
label: "领证人姓名"
},
],
}
}
}
let datas = new data()
export {
datas,
sendThis
}
/*
* @Description:
* @Autor: renchao
* @LastEditTime: 2023-05-17 10:39:03
*/
import filter from '@/utils/filter.js'
let vm = null
const sendThis = (_this) => {
vm = _this
}
class data extends filter {
constructor() {
super()
}
columns () {
return [
{
width:"50px",
label: '序号',
type: 'index',
render: (h, scope) => {
return (
<div>
{scope.$index + 1}
</div>
)
}
},
{
prop: "szry",
label: "缮证人员",
},
{
prop: "szsj",
label: "缮证时间",
},
{
label: "是否作废",
render: (h, scope) => {
if (scope.row.sfzf == '0') {
return <div></div>
} else {
return <div>已作废</div>
}
}
},
{
prop: "bz",
label: "备注信息",
},
]
}
}
let szxxdatas = new data()
export {
szxxdatas,
sendThis
}