c1f04dae by tianhaohao@pashanhoo.com

111

1 parent ea18b6ac
1 <!--
2 * @Description:
3 * @Autor: renchao
4 * @LastEditTime: 2023-07-17 13:51:29
5 -->
6 <template>
7 <lb-table :column="column" :maxHeight="200" :heightNumSetting="true" :pagination="false" :key="key" :data="tableData">
8 </lb-table>
9 </template>
10 <script>
11 import addQlr from './dialog/addQlr.vue'
12 import { mapGetters } from 'vuex'
13 export default {
14 components: {
15 addQlr
16 },
17 computed: {
18 ...mapGetters(["dictData"]),
19 },
20 props: {
21 tableData: {
22 type: Array,
23 default: function () {
24 return []
25 }
26 },
27 gyfs: {
28 type: String,
29 default: '1'
30 }
31 },
32 data () {
33 return {
34 key: 0,
35 dataIndex: 0,
36 dialog: false,
37 details: {},
38 tableDataList: [],
39 qlrCommonTable: [
40 {
41 label: '序号',
42 type: 'index',
43 width: '50',
44 render: (h, scope) => {
45 return (
46 <div>
47 {scope.$index + 1}
48 </div>
49 )
50 }
51 },
52 {
53 prop: "qllxmc",
54 label: "权利类型"
55 },
56 {
57 prop: "bdcqzh",
58 label: "不动产权证号"
59 },
60 {
61 prop: "qlrmc",
62 label: "权利人"
63 },
64 {
65 prop: "qlrzjhm",
66 label: "证件号码"
67 },
68 {
69 prop: "bdcdyh",
70 label: "不动产单元号"
71 },
72 {
73 prop: "qlxzmc",
74 label: "权利性质"
75 },
76 {
77 prop: "qlytmc",
78 label: "用途"
79 },
80 {
81 prop: "qlmjmc",
82 label: "面积"
83 },
84 {
85 prop: "zl",
86 label: "坐落"
87 },
88 ],
89 column: this.qlrCommonTable
90 }
91 },
92 watch: {
93 tableData: {
94 handler: function (val, oldVal) {
95 let that = this
96 if (val.length == 0 || !val) {
97 that.tableDataList = _.cloneDeep([{
98 sqrmc: '',
99 dlrzjlx: '',
100 dlrzjh: '',
101 fr: ''
102 }])
103 } else {
104 that.tableDataList = _.cloneDeep(val)
105 }
106 },
107 immediate: true,
108 deep: true
109 },
110 gyfs: {
111 handler (newVal, oldValue) {
112 let dataList = _.cloneDeep(this.qlrCommonTable)
113 if (newVal == '1') {
114 this.column = _.cloneDeep(dataList).slice(1, dataList.length)
115 } else if ((newVal == '2')) {
116 this.column = dataList
117 } else {
118 this.column = _.cloneDeep(dataList)
119 this.column.splice(
120 2, 0, {
121 prop: "qlbl",
122 label: "份数"
123 })
124 }
125 },
126 immediate: true
127 }
128 },
129 methods: {
130 }
131 }
132 </script>
133 <style scoped lang='scss'>
134 /deep/.el-table th {
135 height: 30px !important;
136 }
137 /deep/.el-table--small .el-table__cell {
138 padding: 5px;
139 }
140 </style>
1 <!--
2 * @Description:
3 * @Autor: renchao
4 * @LastEditTime: 2023-07-17 13:51:29
5 -->
6 <template>
7 <lb-table :column="column" :maxHeight="200" :heightNumSetting="true" :pagination="false" :key="key" :data="tableData">
8 </lb-table>
9 </template>
10 <script>
11 import addQlr from './dialog/addQlr.vue'
12 import { mapGetters } from 'vuex'
13 export default {
14 components: {
15 addQlr
16 },
17 computed: {
18 ...mapGetters(["dictData"]),
19 },
20 props: {
21 tableData: {
22 type: Array,
23 default: function () {
24 return []
25 }
26 },
27 gyfs: {
28 type: String,
29 default: '1'
30 }
31 },
32 data () {
33 return {
34 key: 0,
35 dataIndex: 0,
36 dialog: false,
37 details: {},
38 tableDataList: [],
39 qlrCommonTable: [
40 {
41 label: '序号',
42 type: 'index',
43 width: '50',
44 render: (h, scope) => {
45 return (
46 <div>
47 {scope.$index + 1}
48 </div>
49 )
50 }
51 },
52 {
53 prop: "yg",
54 label: "原告"
55 },
56 {
57 prop: "cfjg",
58 label: "查封机关"
59 },
60 {
61 prop: "cfwh",
62 label: "查封文号"
63 },
64 {
65 prop: "cfqssj",
66 label: "查封开始时间"
67 },
68 {
69 prop: "cfjssj",
70 label: "查封结束时间"
71 },
72 {
73 prop: "cflxmc",
74 label: "查封类型"
75 },
76 {
77 prop: "ywrmc",
78 label: "被执行人"
79 },
80 {
81 prop: "bcfzh",
82 label: "被查封证号"
83 },
84 {
85 prop: "bdcdyh",
86 label: "不动产单元号"
87 },
88 {
89 prop: "zl",
90 label: "坐落"
91 },
92
93
94 ],
95 column: this.qlrCommonTable
96 }
97 },
98 watch: {
99 tableData: {
100 handler: function (val, oldVal) {
101 let that = this
102 if (val.length == 0 || !val) {
103 that.tableDataList = _.cloneDeep([{
104 sqrmc: '',
105 dlrzjlx: '',
106 dlrzjh: '',
107 fr: ''
108 }])
109 } else {
110 that.tableDataList = _.cloneDeep(val)
111 }
112 },
113 immediate: true,
114 deep: true
115 },
116 gyfs: {
117 handler (newVal, oldValue) {
118 let dataList = _.cloneDeep(this.qlrCommonTable)
119 if (newVal == '1') {
120 this.column = _.cloneDeep(dataList).slice(1, dataList.length)
121 } else if ((newVal == '2')) {
122 this.column = dataList
123 } else {
124 this.column = _.cloneDeep(dataList)
125 this.column.splice(
126 2, 0, {
127 prop: "qlbl",
128 label: "份数"
129 })
130 }
131 },
132 immediate: true
133 }
134 },
135 methods: {
136 }
137 }
138 </script>
139 <style scoped lang='scss'>
140 /deep/.el-table th {
141 height: 30px !important;
142 }
143 /deep/.el-table--small .el-table__cell {
144 padding: 5px;
145 }
146 </style>
1 <!--
2 * @Description:
3 * @Autor: renchao
4 * @LastEditTime: 2023-10-24 16:08:44
5 -->
6 <template>
7 <div class="clxx">
8 <!-- 材料预览 -->
9 <div class="clyl-box">
10 <div class="menu-tree">
11 <el-button
12 type="primary"
13 native-type="submit"
14 @click="viewDetail"
15 style="width: 100%; margin-top: 10px">申请材料目录</el-button>
16 <div class="item">
17 材料目录({{ tableData.length }})
18 <div class="tableList">
19 <div
20 style="
21 text-align: center;
22 line-height: 20px;
23 color: black;
24 font-size: 14px;
25 "
26 v-if="tableData.length == 0">
27 暂无数据
28 </div>
29 <div
30 v-for="(item, index) in tableData"
31 :key="item.bsmSj"
32 :class="['child', treeCheckId == item.bsmSj ? 'checked' : '']"
33 @click="treeClick(item, index)">
34 <span v-if="item.isrequired == 1" class="required">必选</span>
35 <span class="item_name">{{ item.sjmc }}</span>
36 <span class="cl_number" :key="key">({{ item.ys ? item.ys : 0 }})</span>
37 </div>
38 </div>
39 </div>
40 <el-button
41 type="primary"
42 native-type="submit"
43 style="width: 100%"
44 @click="handleAdd()"
45 v-if="ableOperation">新增</el-button>
46 </div>
47 <image-preview
48 ref="imageRef"
49 :key="imgKey"
50 v-if="tableData.length > 0"
51 :previewImg="previewImg"
52 :ableOperation="ableOperation"
53 @updateList="updateList"
54 @nextPriview="nextPriview"
55 @prevPriview="prevPriview" />
56 </div>
57 <clxxAddDialog v-model="isDialog" />
58 </div>
59 </template>
60 <script>
61 import { mapGetters } from "vuex";
62 import clxxAddDialog from "../dialog/clxxAddDialog.vue";
63 import clxxDetailDialog from "../dialog/clxxDetailDialog.vue";
64 import imagePreview from "@/views/components/imagePreview.vue";
65 import { InitClml, saveClml, getClmxList } from "@/api/clxx.js";
66 export default {
67 components: { clxxAddDialog, imagePreview, clxxDetailDialog },
68 data () {
69 return {
70 imgKey: 0,
71 //表单是否可操作
72 ableOperation: true,
73 isDialog: false,
74 iclass: "",
75 // 材料目录选中
76 treeCheckIndex: 0,
77 treeCheckId: "",
78 key: 0,
79 tableData: [],
80 previewImg: {
81 // 收件标识码
82 bsmSj: "",
83 bsmSlsq: this.$parent.bsmSlsq,
84 index: 0,
85 selectedIndex: 0,
86 imgList: [],
87 },
88 };
89 },
90 computed: {
91 ...mapGetters(["dictData"]),
92 },
93 created () {
94 this.clmlInitList(1);
95 },
96 computed: {
97 ...mapGetters(["workFresh"]),
98 },
99 watch: {
100 workFresh: {
101 handler (newVal, oldVal) {
102 if (newVal) this.clmlInitList(1);
103 },
104 },
105 },
106 mounted () {
107 this.ableOperation = this.$parent.ableOperation;
108 },
109 methods: {
110 /**
111 * @description: 自动预览
112 * @author: renchao
113 */
114 nextPriview () {
115 if (this.treeCheckIndex < this.tableData.length) {
116 this.treeCheckIndex++;
117 if (this.tableData[this.treeCheckIndex]) {
118 this.treeCheckId = this.tableData[this.treeCheckIndex].bsmSj;
119 // 判断页数
120 let ys = this.tableData[this.treeCheckIndex].ys
121 this.previewImg.index = 0;
122 // 获取材料明细
123 if (ys > 0) {
124 getClmxList(this.treeCheckId).then(res => {
125 this.previewImg.imgList = res.result ? res.result : [];
126 })
127 } else {
128 this.previewImg.imgList = []
129 }
130 this.previewImg.bsmSj = this.tableData[this.treeCheckIndex].bsmSj;
131 } else {
132 this.$message.error('没有最后一张了');
133 }
134 }
135 },
136 /**
137 * @description: prevPriview
138 * @author: renchao
139 */
140 prevPriview () {
141 if (this.treeCheckIndex >= 1) {
142 this.treeCheckIndex--;
143 this.treeCheckId = this.tableData[this.treeCheckIndex].bsmSj;
144 // 判断页数
145 let ys = this.tableData[this.treeCheckIndex].ys
146 if (ys > 0) {
147 // 获取材料明细
148 getClmxList(this.treeCheckId).then(res => {
149 this.previewImg.imgList = res.result ? res.result : [];
150 this.previewImg.index = this.previewImg.imgList.length - 1;
151 })
152 } else {
153 this.previewImg.imgList = [];
154 this.previewImg.index = 0
155 }
156 this.previewImg.bsmSj = this.tableData[this.treeCheckIndex].bsmSj;
157 } else {
158 this.$message.error('没有第一张了');
159 }
160 },
161 /**
162 * @description: 材料目录明细初始化
163 * @param {*} type
164 * @author: renchao
165 */
166 clmlInitList (type) {
167 //type 1:列表初始化 2:新增材料
168 return new Promise((resolve) => {
169 this.unitData = this.$parent.unitData;
170 var formdata = new FormData();
171 formdata.append("bsmSlsq", this.$parent.bsmSlsq);
172 formdata.append("bsmSldy", this.$parent.currentSelectProps.bsmSldy);
173
174 InitClml(formdata).then((res) => {
175 if (res.code == 200) {
176 resolve(res.code);
177 if (res.result && res.result.length > 0) {
178 this.tableData = res.result;
179 if (type == 1) {
180 this.treeClick(this.tableData[0], 0);
181 } else if (type == 2) {
182 //新增材料后刷新列表焦点置于新增的对象上
183 this.treeClick(
184 this.tableData[this.tableData.length - 1],
185 this.tableData.length - 1
186 );
187 }
188 }
189 } else {
190 this.$message.error(res.message);
191 }
192 });
193 });
194 },
195 /**
196 * @description: setChecked
197 * @param {*} item
198 * @author: renchao
199 */
200 setChecked (item) {
201 this.treeCheckId = item.bsmSj;
202 this.title = item.sjmc;
203 this.titleYs = 1;
204 this.titleNum = item.children.length;
205 this.previewImg.imgList = item.children;
206 this.previewImg.bsmSj = item.bsmSj;
207 },
208 /**
209 * @description: updateList
210 * @param {*} val
211 * @author: renchao
212 */
213 updateList (val) {
214 let that = this;
215 if (val.children.length != 0) {
216 //删除最后一张图片时 val=null
217 this.tableData.forEach((item) => {
218 if (item.bsmSj === val.bsmSj) {
219 item.ys = val.children.length;
220 }
221 });
222 this.previewImg.imgList = _.cloneDeep(val.children);
223 if (this.previewImg.index == this.previewImg.imgList.length) {
224 this.previewImg.index = this.previewImg.index - 1;
225 }
226 this.key++
227 } else {
228 this.previewImg.imgList = [];
229 this.tableData.forEach((item, index) => {
230 if (this.treeCheckId == item.bsmSj) {
231 item.ys = 0;
232 that.treeCheckIndex = index;
233 }
234 });
235 }
236 },
237 /**
238 * @description: 添加材料目录
239 * @author: renchao
240 */
241 handleAdd () {
242 this.isDialog = true;
243 },
244 /**
245 * @description: 新增弹窗保存
246 * @param {*} data
247 * @author: renchao
248 */
249 addSave (data) {
250 let obj = {
251 bsmSlsq: this.$parent.bsmSlsq,
252 isrequired: "1",
253 sjmc: data.clmc,
254 sjsl: 0,
255 smzt: "",
256 ys: 0,
257 sjlx: data.cllx,
258 sfxjcl: "1", // 是否必选
259 sfggcl: data.sfggcl,
260 };
261 //是否公共材料
262 if (data.sfggcl == "0") {
263 obj["bsmSldy"] = this.$parent.currentSelectProps.bsmSldy;
264 }
265 if (this.$route.query?.djywbm == "DJBBL") {
266 obj.bsmSldy = this.$parent.bsmRepair
267 }
268 saveClml(obj).then(async (res) => {
269 if (res.code == 200) {
270 let res = await this.clmlInitList(2);
271 if (res == 200)
272 this.$message({
273 message: "新增成功",
274 type: "success",
275 });
276 }
277 });
278 },
279 /**
280 * @description: 材料目录点击选中
281 * @param {*} item
282 * @param {*} index
283 * @author: renchao
284 */
285 treeClick (item, index) {
286 this.previewImg.index = 0;
287 this.treeCheckId = item?.bsmSj;
288 this.treeCheckIndex = index;
289 // 获取材料明细
290 getClmxList(item.bsmSj).then(res => {
291 this.previewImg.imgList = res.result ? res.result : [];
292 })
293 this.previewImg.bsmSj = item?.bsmSj;
294 if (this.$refs.imageRef) {
295 this.$refs.imageRef.initialIndex = 0
296 }
297 this.imgKey++
298 },
299 /**
300 * @description: 小图片点击
301 * @param {*} item
302 * @param {*} index
303 * @author: renchao
304 */
305 imgClick (item, index) {
306 this.showImg = item;
307 this.titleYs = index + 1;
308 },
309 //查看明细
310 async viewDetail () {
311 await this.clmlInitList();
312 this.$store.dispatch("user/reWorkFresh", false);
313 this.$popupDialog(
314 "申请材料目录",
315 "workflow/components/dialog/clxxDetailDialog",
316 {
317 data: this.tableData,
318 bsmSldy: this.$parent.currentSelectProps.bsmSldy,
319 unitData: this.$parent.unitData,
320 ableOperation: this.$parent.ableOperation,
321 bsmRepair: this.$parent.bsmRepair
322 },
323 "60%",
324 true
325 )
326 },
327 //设置tableData
328 setTableData (tableData) {
329 this.$nextTick((res) => {
330 this.tableData = tableData;
331 })
332 }
333 }
334 }
335 </script>
336 <style scoped lang="scss">
337 @import "~@/styles/mixin.scss";
338
339 .active {
340 background: $light-blue !important;
341 color: #fff;
342 }
343
344 .required {
345 font-size: 12px;
346 color: $pink;
347 float: left;
348 }
349
350 .cl_number {
351 width: 30px;
352 }
353
354 .clxx {
355 width: 100%;
356 display: flex;
357 padding-left: 5px;
358 height: calc(100vh - 125px);
359
360 .left {
361 display: flex;
362 flex-direction: column;
363 justify-content: space-between;
364
365 .item {
366 width: 28px;
367 height: 49%;
368 @include flex-center;
369 background-color: #e4e7ed;
370 border-bottom-right-radius: 10px;
371 padding: 5px;
372 cursor: pointer;
373 transition: all 0.3s;
374
375 &:hover {
376 @extend .active;
377 }
378 }
379 }
380
381 .clmlmx-box {
382 margin: 0 auto;
383
384 .title {
385 text-align: center;
386 height: 60px;
387 line-height: 60px;
388 border: 1px solid #dfe6ec;
389 font-size: 20px;
390 background: #81d3f81a;
391 margin-bottom: -1px;
392 }
393 }
394
395 .clyl-box {
396 width: 100%;
397 height: 100%;
398 display: flex;
399 .tableList {
400 margin-top: 10px;
401 }
402 .menu-tree {
403 width: 20%;
404 min-width: 160px;
405 height: 100%;
406 font-size: 14px;
407 border-right: 1px dotted #d9d9d9;
408 padding: 0 10px;
409
410 .item {
411 line-height: 30px;
412 padding-top: 5px;
413 border-bottom: 1px solid #e8e8e8;
414 font-size: 16px;
415 text-align: center;
416 color: $light-blue;
417
418 .itemIcon {
419 float: right;
420 line-height: 60px;
421 cursor: pointer;
422 }
423
424 .child {
425 line-height: 32px;
426 border-bottom: 1px solid #e8e8e8;
427 padding-left: 10px;
428 color: #6b6b6b;
429 cursor: pointer;
430 box-sizing: border-box;
431 border-radius: 6px;
432 line-height: 20px;
433 transition: all 0.3s;
434 padding: 8px 0;
435 overflow: hidden;
436 display: flex;
437 justify-content: space-between;
438 }
439 .item_name {
440 flex: 1;
441 font-size: 14px;
442 display: flex;
443 justify-content: center;
444 }
445 .child:hover {
446 color: $light-blue;
447 transform: scale(1.1);
448 }
449
450 .checked {
451 border: 1px solid $light-blue;
452 color: $light-blue;
453 box-sizing: border-box;
454 }
455 }
456 }
457
458 .clyl-img {
459 width: 75%;
460 height: 100%;
461 background: #f3f4f7;
462 margin: 0 auto;
463 position: relative;
464 }
465 }
466 }
467 </style>
1 <!--
2 * @Description:
3 * @Autor: renchao
4 * @LastEditTime: 2023-09-19 10:15:07
5 -->
6 <template>
7 <dialogBox title="新建材料信息" width="25%" isMain v-model="myValue" @closeDialog="closeDialog" @submitForm="handleSubmit"
8 :isFullscreen="false">
9 <el-form :model="ruleForm" :rules="rules" ref="ruleForm" label-width="100px">
10 <el-row>
11 <el-col :span="24">
12 <el-form-item label="材料类型" prop="cllx">
13 <el-select v-model="ruleForm.cllx" class="width100" placeholder="请选择">
14 <el-option v-for="item in dictData['A40']" :key="item.dcode" :label="item.dname" :value="item.dcode">
15 </el-option>
16 </el-select>
17 </el-form-item>
18 </el-col>
19 </el-row>
20 <el-row :gutter="20">
21 <el-col :span="24">
22 <el-form-item label="材料名称" prop="clmc">
23 <el-input v-model="ruleForm.clmc"></el-input>
24 </el-form-item>
25 </el-col>
26 </el-row>
27 <el-row :gutter="20">
28 <el-col :span="24">
29 <el-form-item
30 label="是否公共材料">
31 <el-radio-group
32 v-model="ruleForm.sfggcl">
33 <el-radio label="1"></el-radio>
34 <el-radio label="0"></el-radio>
35 </el-radio-group>
36 </el-form-item>
37 </el-col>
38 </el-row>
39 </el-form>
40 </dialogBox>
41 </template>
42
43 <script>
44 import { mapGetters } from "vuex";
45 export default {
46 props: {
47 value: { type: Boolean, default: false },
48 },
49 data () {
50 return {
51 myValue: this.value,
52 ruleForm: {
53 cllx: "",
54 clmc: "",
55 sfggcl: "0"
56 },
57 rules: {
58 cllx: [
59 { required: true, message: '请选择材料类型', trigger: 'change' }
60 ],
61 clmc: [
62 { required: true, message: '请输入材料名称', trigger: 'blur' }
63 ],
64 clbm: [
65 { required: true, message: '请输入材料编码', trigger: 'blur' }
66 ]
67 }
68 }
69 },
70 computed: {
71 ...mapGetters(["dictData"]),
72 },
73 watch: {
74 value (val) {
75 this.myValue = val;
76 },
77 },
78 methods: {
79 /**
80 * @description: closeDialog
81 * @author: renchao
82 */
83 closeDialog () {
84 this.$emit("input", false);
85 this.ruleForm = {
86 cllx: "",
87 clmc: "",
88 sfggcl: "0"
89 }
90 },
91 /**
92 * @description: handleSubmit
93 * @author: renchao
94 */
95 handleSubmit () {
96 this.$refs['ruleForm'].validate((valid) => {
97 if (valid) {
98 this.$parent.addSave(this.ruleForm);
99 this.ruleForm = {
100 cllx: "",
101 clmc: "",
102 sfggcl: "0"
103 }
104 this.$emit("input", false);
105 } else {
106 return false;
107 }
108 })
109 }
110 }
111 };
112 </script>
113 <style scoped lang="scss">
114 .submit-button {
115 text-align: center;
116 height: 52px;
117 padding-top: 10px;
118 background-color: #fff;
119 }
120 </style>
1 <!--
2 * @Description:
3 * @Autor: renchao
4 * @LastEditTime: 2023-10-24 17:16:18
5 -->
6 <template>
7 <div class="clmlmx-box">
8 <lb-table :column="column" :key="key" row-key="bsmSj" ref="listTable" :heightNumSetting="true" :calcHeight="600"
9 :pagination="false" :data="tableData">
10 </lb-table>
11 <div class="text-center">
12 <el-button @click="$popupCacel">取消</el-button>
13 <el-button type="primary" @click="handleSubmit" :loading="loading" v-if="formData.ableOperation && tableData.length>0">保存</el-button>
14 </div>
15 </div>
16 </template>
17 <script>
18 import Vue from 'vue'
19 import Sortable from 'sortablejs'
20 import store from '@/store/index.js'
21 import { updateClml } from "@/api/clxx.js";
22 export default {
23 props: {
24 formData: {
25 type: Object,
26 default: () => {
27 return {}
28 }
29 }
30 },
31 data () {
32 return {
33 loading: false,
34 sortable: null,
35 column: [
36 {
37 prop: "isrequired",
38 label: "是否必选",
39 width: "80",
40 render: (h, scope) => {
41 if (scope.row.isrequired === "1") {
42 return (
43 <div>
44 <span>必选</span>
45 </div>
46 );
47 }
48 else {
49 return (
50 <div>
51 <span>可选</span>
52 </div>
53 )
54 }
55 }
56 },
57 {
58 label: "材料名称",
59 render: (h, scope) => {
60 return (
61 (this.formData.ableOperation && scope.row.sfxjcl == '1') ?
62 <el-input value={scope.row.sjmc} onInput={(val) => { scope.row.sjmc = val }}></el-input> : <span>{scope.row.sjmc}</span>
63 )
64 }
65 },
66 {
67 label: "材料类型",
68 width: "110",
69 render: (h, scope) => {
70 return (
71 this.formData.ableOperation ?
72 <el-select value={scope.row.sjlx}
73 onChange={(val) => { scope.row.sjlx = val }}>
74 {
75 store.getters.dictData['A40'].map(option => {
76 return (
77 <el-option label={option.dname} value={option.dcode}></el-option>
78 )
79 })
80 }
81 </el-select> : <span>{this.dicStatus(scope.row.sjlx, "A40")}</span>
82 )
83 }
84 },
85 {
86 prop: "sjsl",
87 label: "收件数量",
88 width: "80",
89 render: (h, scope) => {
90 return (
91 (this.formData.ableOperation) ?
92 <el-input value={scope.row.sjsl} onInput={(val) => { scope.row.sjsl = val }}></el-input> : <span>{
93 scope.row.sjsl
94 }</span>
95 )
96 }
97 },
98 {
99 label: "扫描时间",
100 width: "140",
101 render: (h, scope) => {
102 return (
103 <span>{scope.row.sjsj}</span>
104 )
105 }
106 },
107 {
108 label: "页数",
109 width: "60",
110 render: (h, scope) => {
111 if (scope.row.ys && scope.row.ys > 0) {
112 return (
113 <div>
114 <span>{scope.row.ys}</span>
115 </div>
116 );
117 } else {
118 return (
119 <div>
120 <span>0</span>
121 </div>
122 );
123 }
124 },
125 },
126 {
127 label: "是否新建材料",
128 width: "80",
129 render: (h, scope) => {
130 if (scope.row.sfxjcl && scope.row.sfxjcl == '1') {
131 return (
132 <span></span>
133 );
134 } else {
135 return (
136 <span></span>
137 );
138 }
139 },
140 },
141 {
142 label: "操作",
143 width: "100",
144 render: (h, scope) => {
145 return (
146 <el-button
147 type="text"
148 icon="el-icon-delete"
149 disabled={!(scope.row.ys == 0 && scope.row.sfxjcl == '1') || !this.formData.ableOperation}
150 onClick={() => {
151 this.handleDelete(scope.$index, scope.row);
152 }}
153 >
154 删除
155 </el-button>
156 )
157 }
158 }
159 ],
160 key: 0,
161 tableData: []
162 }
163 },
164 watch: {
165 'formData.data': {
166 handler: function (val, oldVal) {
167 this.tableData = _.cloneDeep(val)
168 },
169 immediate: true,
170 deep: true
171 }
172 },
173 mounted () {
174 this.initSort()
175 },
176 beforeDestroy () {
177 if (this.sortable) {
178 this.sortable.destroy();
179 }
180 },
181 methods: {
182 handleSubmit () {
183 this.loading = true
184 store.dispatch('user/reWorkFresh', false)
185 updateClml(this.tableData, this.formData.bsmSldy, Vue.prototype.$currentRoute.query.bsmSlsq).then(res => {
186 this.loading = false
187 if (res.code == 200) {
188 this.$message({
189 message: '保存成功',
190 type: 'success'
191 })
192 this.$popupCacel()
193 store.dispatch('user/reWorkFresh', true)
194 }
195 }).catch(() => {
196 this.loading = false
197 })
198 },
199 /**
200 * @description: 材料目录删除
201 * @param {*} index
202 * @param {*} row
203 */
204 handleDelete (index, row) {
205 this.$confirm('此操作将永久删除该 是否继续?', '提示', {
206 confirmButtonText: '确定',
207 cancelButtonText: '取消',
208 type: 'warning'
209 }).then(() => {
210 this.tableData.splice(index, 1);
211 }).catch(() => {
212 this.$message({
213 type: 'info',
214 message: '已取消删除'
215 })
216 })
217 },
218 initSort () {
219 const el = this.$refs.listTable.$el.querySelectorAll('.el-table__body-wrapper > table > tbody')[0]
220 this.sortable = Sortable.create(el, {
221 ghostClass: 'sortable-ghost',
222 setData: function (dataTransfer) {
223 dataTransfer.setData('Text', '')
224 },
225 onEnd: evt => {
226 const targetRow = this.tableData.splice(evt.oldIndex, 1)[0];
227 this.tableData.splice(evt.newIndex, 0, targetRow);
228 }
229 })
230 },
231 dicStatus (val, code) {
232 let data = store.getters.dictData[code],
233 name = '暂无'
234 if (data) {
235 data.map((item) => {
236 if (item.dcode == val) {
237 name = item.dname
238 }
239 })
240 return name
241 }
242 }
243 }
244 }
245 </script>
246 <style scoped lang='scss'>
247 @import "~@/styles/mixin.scss";
248 .clmlmx-box {
249 margin: 0 auto;
250 .title {
251 text-align: center;
252 height: 60px;
253 line-height: 60px;
254 border: 1px solid #dfe6ec;
255 font-size: 20px;
256 background: #81d3f81a;
257 margin-bottom: -1px;
258 }
259 }
260 </style>
1 <!--
2 * @Description:
3 * @Autor: renchao
4 * @LastEditTime: 2023-05-04 14:13:28
5 -->
6 <template>
7 <lb-table :column="tableData.columns" heightNumSetting :pagination="false" :key="key" :data="tableData.data">
8 </lb-table>
9 </template>
10 <script>
11 import { mapGetters } from 'vuex'
12 import { getSzRecordList } from "@/api/bdcqz.js";
13 import table from "@/utils/mixin/table";
14 import { szxxdatas } from "../../javascript/szxxdata";
15 export default {
16 components: {
17
18 },
19 mixins: [table],
20 computed: {
21 ...mapGetters(["dictData"]),
22 },
23 props: {
24 formData: {
25 type: Object,
26 default: {}
27 }
28 },
29 data () {
30 return {
31 key: 0,
32 dataIndex: 0,
33 dialog: false,
34 details: {},
35 tableData: {
36 total: 0,
37 columns: szxxdatas.columns(),
38 data: [],
39 },
40 }
41 },
42 mounted () {
43 this.query()
44 },
45 methods: {
46 /**
47 * @description: query
48 * @author: renchao
49 */
50 query () {
51 getSzRecordList({ bsmBdcqz: this.formData.bsmBdcqz }).then(res => {
52 if (res.code == 200) {
53 this.tableData.data = res.result;
54 this.key++
55 }
56 })
57 }
58 }
59 }
60 </script>
61 <style scoped lang='scss'>
62 </style>
1 <!--
2 * @Description:
3 * @Autor: renchao
4 * @LastEditTime: 2023-11-23 17:20:01
5 -->
6 <template>
7 <iframe :src="ip +'/txdw/#/' + formData.bsmZd" frameborder="0" style="width: 100%; height:710px;"></iframe>
8 </template>
9 <script>
10 export default {
11 props: {
12 formData: {
13 type: Object,
14 default: () => {
15 return {}
16 }
17 }
18 },
19 data () {
20 return {
21 ip: window._config.services.management
22 }
23 }
24 }
25 </script>
...\ No newline at end of file ...\ No newline at end of file
1 <!--
2 * @Description:
3 * @Autor: renchao
4 * @LastEditTime: 2024-02-06 13:23:36
5 -->
6 <template>
7 <div>
8 <div class="zsdy-content" v-Loading="loading">
9 <el-form
10 :model="ruleForm"
11 ref="ruleForm"
12 label-width="120px">
13 <el-form-item label="印刷序列号:" prop="ysxlh">
14 <el-row>
15 <el-col :span="18">
16 <el-select v-model="ruleForm.ysxlh" @change="handleSelect" :disabled="disabled" placeholder="请选择">
17 <el-option
18 v-for="item in ysxlh"
19 :key="item.ysxlh"
20 :label="item.ysxlh"
21 :value="item.ysxlh">
22 </el-option>
23 </el-select>
24 </el-col>
25 <el-col :span="4" v-if="this.formData.bdcqzlx==1">
26 <el-tabs v-model="activeTitle">
27 <el-tab-pane label="第一页" name="title1"></el-tab-pane>
28 <el-tab-pane label="第二页" name="title2"></el-tab-pane>
29 </el-tabs>
30 </el-col>
31 <el-col :span="2" v-if="this.formData.ysxlh" style="float:right">
32 <el-button type="primary" @click="handleZF" v-if="disabled">作废</el-button>
33 </el-col>
34 </el-row>
35
36 </el-form-item>
37 </el-form>
38 <div class="zs-content">
39 <canvas ref="zs1" width="1024" v-show="this.formData.bdcqzlx==1 && activeTitle=='title1'" height="739"></canvas>
40 <canvas ref="zs" width="1024" v-show="this.formData.bdcqzlx==1 && activeTitle=='title2'" height="739"></canvas>
41 <canvas ref="zm" width="1169" v-show="this.formData.bdcqzlx==2" height="828"></canvas>
42 </div>
43 </div>
44 <!-- 打印模板需要此模块 -->
45 <object id="LODOP_OB" classid="clsid:2105C259-1E0C-4534-8141-A753534CB4CA" v-show="false">
46 <embed id="LODOP_EM" type="application/x-print-lodop" width="1180" height="720" pluginspage="install_lodop32.exe" />
47 </object>
48 <div class="text-center pt-10">
49 <el-button @click="$popupCacel">取消</el-button>
50 <el-button type="primary" @click="handlePrint" v-if="disabled">打印</el-button>
51 <el-button type="primary" @click="handleSubmit" v-else>确定</el-button>
52 </div>
53
54 <el-dialog title="证书作废" :visible.sync="invalidDiglog" width="40%" :modal-append-to-body="false" top="30vh">
55 <div class="invalid-diglog">
56 <div class="invalid-title">
57 <i class="el-icon-question invalid-icon"></i>
58 <div class="invalid-body">您确定作废证书并再次打印?印刷序列号{{bdcqz.ysxlh}}</div>
59 </div>
60 <div class="invalid-reson">作废原因:</div>
61 <el-input v-model="zfyy" placeholder="请输入作废原因" type="textarea" :rows="4"></el-input>
62 <div class="text-center pt-10">
63 <el-button @click="closeInvalidDiglog">取 消</el-button>
64 <el-button type="primary" @click="confirmInvalid">确 定</el-button>
65 </div>
66 </div>
67 </el-dialog>
68 </div>
69 </template>
70
71 <script>
72 import QRCode from 'qrcode'
73 import store from '@/store/index.js'
74 import { datas } from "../../javascript/zsyl.js";
75 import { getPrintTemplateByCode } from "@/api/print";
76 import { getLodop } from "@/utils/LodopFuncs"
77 import { readYsxlh, certificate, getBdcqzDetail, invalidCertificate } from "@/api/bdcqz.js";
78 export default {
79 props: {
80 formData: {
81 type: Object,
82 default: () => {
83 return {}
84 }
85 }
86 },
87 data () {
88 return {
89 activeTitle: 'title1',
90 // 详细信息
91 bdcqz: {},
92 key: 0,
93 disabled: false,
94 // 不动产证书图片地址
95 imgSrc1: require('@/image/bdcqz/bdcqzs1.jpg'),
96 imgSrc: require('@/image/bdcqz/bdcqzs2.jpg'),
97 bdczmSrc: require('@/image/bdcqz/bdczm.jpg'),
98 loading: false,
99 //印刷序列号集合
100 ysxlh: [],
101 //列名称对象
102 columns: [],
103 //tab选择绑定值
104 activeName: '',
105 invalidDiglog: false,
106 zfyy: "",
107 ruleForm: {
108 bsmBdcqz: "",
109 szmc: "不动产权证书",
110 bdcqzlx: "",
111 szzh: "",
112 ysxlh: ""
113 }
114 }
115 },
116 mounted () {
117 store.dispatch('user/refreshPage', false)
118 this.columns = datas.columns()
119 this.ysxlhList()
120 // 获取详细信息
121 this.getDetail()
122 if (this.formData.ysxlh) {
123 this.disabled = true
124 } else {
125 this.disabled = false
126 }
127 },
128 methods: {
129 /**
130 * @description: 获取详细信息
131 * @author: renchao
132 */
133 getDetail () {
134 this.loading = true
135 getBdcqzDetail(this.formData.bsmBdcqz).then(res => {
136 this.bdcqz = res.result
137 this.loading = false
138 if (this.bdcqz.ysxlh) this.ruleForm.ysxlh = this.bdcqz.ysxlh
139 if (this.bdcqz.bdcqzlx == 1) {
140 this.drawTextOnImage()
141 } else {
142 this.drawTextzmImage()
143 }
144 })
145 },
146 /**
147 * @description: 获取印刷序列号列表
148 * @author: renchao
149 */
150 ysxlhList () {
151 readYsxlh({ zslx: this.formData.bdcqzlx }).then((res) => {
152 if (res.code === 200) {
153 this.ysxlh = res.result;
154 }
155 })
156 },
157 /**
158 * @description: handleSelect
159 * @param {*} val
160 * @author: renchao
161 */
162 handleSelect (val) {
163 this.bdcqz.ysxlh = this.ruleForm.ysxlh
164 if (this.bdcqz.bdcqzlx == 1) {
165 this.drawTextOnImage()
166 } else {
167 this.drawTextzmImage()
168 }
169 },
170 /**
171 * @description: closeInvalidDiglog
172 * @author: renchao
173 */
174 closeInvalidDiglog () {
175 this.zfyy = "";
176 this.invalidDiglog = false
177 },
178 /**
179 * @description: handleZF
180 * @author: renchao
181 */
182 handleZF () {
183 this.invalidDiglog = true
184 },
185 /**
186 * @description: 作废缮证信息
187 * @author: renchao
188 */
189 confirmInvalid () {
190 store.dispatch('user/reWorkFresh', false)
191 invalidCertificate({ bsmBdcqz: this.bdcqz.bsmBdcqz, zfyy: this.zfyy }).then((res) => {
192 if (res.code === 200) {
193 this.$message.success("作废成功");
194 this.disabled = false
195 this.invalidDiglog = false;
196 this.zfyy = ''
197 this.ruleForm.ysxlh = ''
198 this.bdcqz.ysxlh = ''
199 if (this.bdcqz.bdcqzlx == 1) {
200 this.drawTextOnImage()
201 } else {
202 this.drawTextzmImage()
203 }
204 store.dispatch('user/reWorkFresh', true)
205 } else {
206 this.$message.error(res.message);
207 }
208 })
209 },
210 /**
211 * @description: 不动产证书
212 * @author: renchao
213 */
214 drawTextOnImage1 () {
215 const canvas = this.$refs.zs1;
216 const context = canvas.getContext('2d');
217 const image = new Image();
218 image.onload = () => {
219 context.drawImage(image, 0, 0);
220 context.font = '18px 楷体';
221 context.fillStyle = '#000000';
222 let date = this.bdcqz.djsj.split(' ')[0].split('/');
223 let nian = date[0]
224 let yue = date[1]
225 let ri = date[2]
226 this.bdcqz.nian = nian
227 this.bdcqz.yue = yue
228 this.bdcqz.ri = ri
229 context.fillText(nian ? nian : '', 780, 499);
230 context.fillText(yue ? yue : '', 840, 499);
231 context.fillText(ri ? ri : '', 885, 499);
232 QRCode.toDataURL(this.bdcqz.bdcqzh, { margin: 0 })
233 .then(url => {
234 const qrImage = new Image();
235 this.bdcqz.qrImage = url; // 将二维码图片的 URL 存储到 bdcqz 对象的 qrImage 属性中
236 qrImage.onload = () => {
237 context.drawImage(qrImage, 670, 400, 100, 100);
238 };
239 qrImage.src = url;
240 })
241 .catch(error => {
242 console.error(error);
243 });
244 context.fillText(this.bdcqz.bdcqzbm ? this.bdcqz.bdcqzbm : '', 745, 633);
245 };
246 image.src = this.imgSrc1;
247 },
248 drawTextOnImage () {
249 this.drawTextOnImage1()
250 function getByteLen (val) {
251 var len = 0;
252 if (!val) return len;
253 for (var i = 0; i < val.length; i++) {
254 var length = val.charCodeAt(i);
255 if (length >= 0 && length <= 128) {
256 len += 1;
257 } else {
258 len += 2;
259 }
260 }
261 return len;
262 }
263 const canvas = this.$refs.zs;
264 const context = canvas.getContext('2d');
265 const image = new Image();
266 image.onload = () => {
267 context.drawImage(image, 0, 0);
268 context.font = '18px 楷体';
269 context.fillStyle = '#000000';
270 context.fillText(this.bdcqz.sjjc ? this.bdcqz.sjjc : '', 60, 56);
271 context.fillText(this.bdcqz.djnd ? this.bdcqz.djnd : '', 113, 56);
272 context.fillText(this.bdcqz.sxqc ? this.bdcqz.sxqc : '', 180, 56);
273 context.fillText(this.bdcqz.sxh ? this.bdcqz.sxh : '', 370, 56);
274 context.fillText(this.bdcqz.qlr ? this.bdcqz.qlr : '', 129, 97);
275 context.fillText(this.bdcqz.gyqk ? this.bdcqz.gyqk : '', 129, 136);
276
277 this.bdcdyh = this.bdcqz.bdcdyh.slice(0, 6) + ' ' + this.bdcqz.bdcdyh.slice(6, 12) + ' ' +
278 this.bdcqz.bdcdyh.slice(12, 19) + ' ' + this.bdcqz.bdcdyh.slice(19, this.bdcqz.bdcdyh.length)
279 context.fillText(this.bdcdyh ? this.bdcdyh : '', 129, 223);
280
281
282
283 context.fillText(this.bdcqz.qllx ? this.bdcqz.qllx : '', 129, 263);
284 context.fillText(this.bdcqz.qlxz ? this.bdcqz.qlxz : '', 129, 303);
285 context.fillText(this.bdcqz.yt ? this.bdcqz.yt : '', 129, 346);
286 let lines6 = this.bdcqz.mj ? this.bdcqz.mj.split(' ') : [];
287 if (getByteLen(this.bdcqz.mj) > 37) {
288 lines6.forEach((line, index) => {
289 const y = 378 + (index * 27); // 每行文本的垂直位置
290 let currentLine = '';
291 let arr = [];
292 for (let word of line) {
293 const testLine = currentLine + word;
294 const lineWidth = context.measureText(testLine).width;
295 if (lineWidth <= 336) {
296 currentLine = testLine;
297 } else {
298 arr.push(currentLine);
299 currentLine = word;
300 }
301 }
302 arr.push(currentLine);
303 arr.forEach((line, index) => {
304 context.fillText(line, 129, y + (index * 20)); // 调整行高
305 })
306 })
307 } else {
308 lines6.forEach((line, index) => {
309 const y = 386 + (index * 27); // 每行文本的垂直位置
310 let currentLine = '';
311 let arr = [];
312 for (let word of line) {
313 const testLine = currentLine + word;
314 const lineWidth = context.measureText(testLine).width;
315 if (lineWidth <= 336) {
316 currentLine = testLine;
317 } else {
318 arr.push(currentLine);
319 currentLine = word;
320 }
321 }
322 arr.push(currentLine);
323 arr.forEach((line, index) => {
324 context.fillText(line, 129, y + (index * 20)); // 调整行高
325 })
326 })
327 }
328 // 权利其他状态
329 const maxWidth = 332; // 最大宽度限制
330 let lines = this.bdcqz.qlqtzk ? this.bdcqz.qlqtzk.split('\n').filter(i => i && i.trim()) : [];
331 for (let i = 0; i < lines.length; i++) {
332 let num = Math.ceil(getByteLen(lines[i]) / 37)
333 if (getByteLen(lines[i]) > 37) {
334 let currentLine = '';
335 let arr = [];
336 for (let word of lines[i]) {
337 const testLine = currentLine + word;
338 const lineWidth = context.measureText(testLine).width;
339 if (lineWidth <= maxWidth) {
340 currentLine = testLine;
341 } else {
342 arr.push(currentLine);
343 currentLine = word;
344 }
345 }
346 arr.push(currentLine);
347 if (i > 0) {
348 arr.forEach((line, index) => {
349 context.fillText(line, 129, 495 + (29 * (i - 1)) + 4 * num + (index * 14)); // 调整行高
350 })
351 } else {
352 arr.forEach((line, index) => {
353 context.fillText(line, 129, 493 + (26 * (i - 1)) + (index * 14)); // 调整行高
354 })
355 }
356 } else {
357 if (i > 0) {
358 context.fillText(lines[i] ? lines[i] : '', 129, 500 + 4 * num + (29 * (i - 1)));
359 } else {
360 context.fillText(lines[i] ? lines[i] : '', 129, 505 + (27 * (i - 1)));
361 }
362 }
363 }
364
365 let lines1 = this.bdcqz.fj ? this.bdcqz.fj.split('\n').filter(i => i && i.trim()) : [];
366 lines1.forEach((line, index) => {
367 const y = 100 + (index * 30); // 每行文本的垂直位置
368 let currentLine = '';
369 let arr = [];
370 for (let word of line) {
371 const testLine = currentLine + word;
372 const lineWidth = context.measureText(testLine).width;
373 if (lineWidth <= 395) {
374 currentLine = testLine;
375 } else {
376 arr.push(currentLine);
377 currentLine = word;
378 }
379 }
380 arr.push(currentLine);
381 arr.forEach((line, index) => {
382 context.fillText(line, 580, y + (index * 30)); // 调整行高
383 })
384 })
385 let lines3 = this.bdcqz.syqx ? this.bdcqz.syqx.split(' ') : [];
386 if (getByteLen(this.bdcqz.syqx) > 37) {
387 lines3.forEach((line, index) => {
388 const y = 423 + (index * 27); // 每行文本的垂直位置
389 let currentLine = '';
390 let arr = [];
391 for (let word of line) {
392 const testLine = currentLine + word;
393 const lineWidth = context.measureText(testLine).width;
394 if (lineWidth <= 330) {
395 currentLine = testLine;
396 } else {
397 arr.push(currentLine);
398 currentLine = word;
399 }
400 }
401 arr.push(currentLine);
402 arr.forEach((line, index) => {
403 context.fillText(line, 129, y + (index * 20)); // 调整行高
404 })
405 })
406 } else {
407 lines3.forEach((line, index) => {
408 const y = 430 + (index * 27); // 每行文本的垂直位置
409 let currentLine = '';
410 let arr = [];
411 for (let word of line) {
412 const testLine = currentLine + word;
413 const lineWidth = context.measureText(testLine).width;
414 if (lineWidth <= 315) {
415 currentLine = testLine;
416 } else {
417 arr.push(currentLine);
418 currentLine = word;
419 }
420 }
421 arr.push(currentLine);
422 arr.forEach((line, index) => {
423 context.fillText(line, 129, y + (index * 20)); // 调整行高
424 })
425 })
426 }
427
428 let lines2 = this.bdcqz.zl ? this.bdcqz.zl.split(' ') : [];
429 if (getByteLen(this.bdcqz.zl) > 37) {
430 lines2.forEach((line, index) => {
431 const y = 170 + (index * 20); // 每行文本的垂直位置
432 let currentLine = '';
433 let arr = [];
434 for (let word of line) {
435 const testLine = currentLine + word;
436 const lineWidth = context.measureText(testLine).width;
437 if (lineWidth <= 336) {
438 currentLine = testLine;
439 } else {
440 arr.push(currentLine);
441 currentLine = word;
442 }
443 }
444 arr.push(currentLine);
445 arr.forEach((line, index) => {
446 context.fillText(line, 129, y + (index * 20)); // 调整行高
447 })
448 })
449 } else {
450 lines2.forEach((line, index) => {
451 const y = 180 + (index * 20); // 每行文本的垂直位置
452 let currentLine = '';
453 let arr = [];
454 for (let word of line) {
455 const testLine = currentLine + word;
456 const lineWidth = context.measureText(testLine).width;
457 if (lineWidth <= 336) {
458 currentLine = testLine;
459 } else {
460 arr.push(currentLine);
461 currentLine = word;
462 }
463 }
464 arr.push(currentLine);
465 arr.forEach((line, index) => {
466 context.fillText(line, 129, y + (index * 20)); // 调整行高
467 })
468 })
469 }
470 }
471 image.src = this.imgSrc
472 },
473 /**
474 * @description: 不动产证明
475 * @author: renchao
476 */
477 drawTextzmImage () {
478 function getByteLen (val) {
479 var len = 0;
480 if (!val) return len;
481 for (var i = 0; i < val.length; i++) {
482 var length = val.charCodeAt(i);
483 if (length >= 0 && length <= 128) {
484 len += 1;
485 } else {
486 len += 2;
487 }
488 }
489 return len;
490 }
491
492 const canvas = this.$refs.zm;
493 const context = canvas.getContext('2d');
494 const image = new Image();
495 image.onload = () => {
496 context.drawImage(image, 0, 0);
497 context.font = '18px 楷体';
498 context.fillStyle = '#000000';
499 // ysxlh
500 context.fillText(this.bdcqz.ysxlh ? this.bdcqz.ysxlh : '', 280, 712);
501 // djsj
502 if (this.bdcqz.djsj) {
503 let djsjList = this.bdcqz.djsj.split(' ')[0].split('/')
504 context.fillText(djsjList[0] ? djsjList[0] : '', 327, 580);
505 context.fillText(djsjList[1] ? djsjList[1] : '', 393, 580);
506 context.fillText(djsjList[2] ? djsjList[2] : '', 443, 580);
507 }
508 context.fillText(this.bdcqz.sjjc ? this.bdcqz.sjjc : '', 620, 125);
509 context.fillText(this.bdcqz.djnd ? this.bdcqz.djnd : '', 665, 125);
510 // context.fillText(this.bdcqz.sxqc ? this.bdcqz.sxqc : '', 750, 125);
511
512 if (getByteLen(this.bdcqz.sxqc) > 14) {
513 const originalFont = context.font;
514 // 设置新的字体大小
515 context.font = '14px 楷体'; // 替换为你想要的字体和大小
516 // 绘制 bdcdyh
517 context.fillText(this.bdcqz.sxqc ? this.bdcqz.sxqc : '', 725, 125);
518 // 恢复原始字体设置
519 context.font = originalFont;
520 } else {
521 context.fillText(this.bdcqz.sxqc ? this.bdcqz.sxqc : '', 755, 125);
522 }
523
524 context.fillText(this.bdcqz.sxh ? this.bdcqz.sxh : '', 960, 123);
525 context.fillText(this.bdcqz.zmqlhsx ? this.bdcqz.zmqlhsx : '', 775, 180);
526 // context.fillText(this.bdcqz.qlr ? this.bdcqz.qlr : '', 775, 228);
527 // 权利人
528 let qlrlines = this.bdcqz.qlr
529 if (getByteLen(this.bdcqz.qlr) > 32) {
530 let currentLine = '';
531 let arr = [];
532 for (let word of qlrlines) {
533 const testLine = currentLine + word;
534 const lineWidth = context.measureText(testLine).width;
535 if (lineWidth <= 295) {
536 currentLine = testLine;
537 } else {
538 arr.push(currentLine);
539 currentLine = word;
540 }
541 }
542 arr.push(currentLine); // 将最后一行添加到数组
543 // 绘制所有行
544 for (let i = 0; i < arr.length; i++) {
545 context.fillText(arr[i], 775, 218 + i * 20); // lineHeight 为行高
546 }
547 } else {
548 context.fillText(this.bdcqz.qlr ? this.bdcqz.qlr : '', 775, 228);
549 }
550 // 义务人
551 // context.fillText(this.bdcqz.ywr ? this.bdcqz.ywr : '', 775, 275);
552
553 let ywrlines = this.bdcqz.ywr
554 if (getByteLen(this.bdcqz.ywr) > 32) {
555 let currentLine = '';
556 let arr = [];
557 for (let word of ywrlines) {
558 const testLine = currentLine + word;
559 const lineWidth = context.measureText(testLine).width;
560 if (lineWidth <= 295) {
561 currentLine = testLine;
562 } else {
563 arr.push(currentLine);
564 currentLine = word;
565 }
566 }
567 arr.push(currentLine); // 将最后一行添加到数组
568 // 绘制所有行
569 for (let i = 0; i < arr.length; i++) {
570 context.fillText(arr[i], 775, 268 + i * 20); // lineHeight 为行高
571 }
572 } else {
573 context.fillText(this.bdcqz.ywr ? this.bdcqz.ywr : '', 775, 275);
574 }
575
576
577 let lines2 = this.bdcqz.zl ? this.bdcqz.zl.split(' ') : [];
578 if (getByteLen(this.bdcqz.zl) > 32) {
579 lines2.forEach((line, index) => {
580 const y = 315 + (index * 20); // 每行文本的垂直位置
581 let currentLine = '';
582 let arr = [];
583 for (let word of line) {
584 const testLine = currentLine + word;
585 const lineWidth = context.measureText(testLine).width;
586 if (lineWidth <= 295) {
587 currentLine = testLine;
588 } else {
589 arr.push(currentLine);
590 currentLine = word;
591 }
592 }
593 arr.push(currentLine);
594 arr.forEach((line, index) => {
595 context.fillText(line, 775, y + (index * 20)); // 调整行高
596 })
597 })
598 } else {
599 lines2.forEach((line, index) => {
600 const y = 325 + (index * 20); // 每行文本的垂直位置
601 let currentLine = '';
602 let arr = [];
603 for (let word of line) {
604 const testLine = currentLine + word;
605 const lineWidth = context.measureText(testLine).width;
606 if (lineWidth <= 295) {
607 currentLine = testLine;
608 } else {
609 arr.push(currentLine);
610 currentLine = word;
611 }
612 }
613 arr.push(currentLine);
614 arr.forEach((line, index) => {
615 context.fillText(line, 775, y + (index * 20)); // 调整行高
616 })
617 })
618 }
619 // bdcdyh
620 this.bdcdyh = this.bdcqz.bdcdyh.slice(0, 6) + ' ' + this.bdcqz.bdcdyh.slice(6, 12) + ' ' +
621 this.bdcqz.bdcdyh.slice(12, 19) + ' ' + this.bdcqz.bdcdyh.slice(19, this.bdcqz.bdcdyh.length)
622 // 保存当前字体设置
623 const originalFont = context.font;
624 // 设置新的字体大小
625 context.font = '16px 楷体'; // 替换为你想要的字体和大小
626 // 绘制 bdcdyh
627 context.fillText(this.bdcdyh ? this.bdcdyh : '', 775, 373);
628 // 恢复原始字体设置
629 context.font = originalFont;
630 // qlqtzk
631 function getByteLenBdcdy (val) {
632 var encoder = new TextEncoder('utf-8');
633 return encoder.encode(val).length;
634 }
635 const maxWidth = 290; // 最大宽度限制
636 let lines = this.bdcqz.qlqtzk ? this.bdcqz.qlqtzk.split('\n').filter(i => i && i.trim()) : [];
637 let bdcdyNum = Math.ceil(getByteLenBdcdy(lines[0]) / 43)
638 // 单独处理不动产单元号
639 let linesBdcdy = lines[0] ? lines[0].split(' ') : [];
640 if (getByteLenBdcdy(lines[0]) > 43) {
641 linesBdcdy.forEach((line, index) => {
642 const y = 412 + (index * 17); // 每行文本的垂直位置
643 let currentLine = '';
644 let arr = [];
645 for (let word of line) {
646 const testLine = currentLine + word;
647 const lineWidth = context.measureText(testLine).width;
648 if (lineWidth <= maxWidth) {
649 currentLine = testLine;
650 } else {
651 arr.push(currentLine);
652 currentLine = word;
653 }
654 }
655 arr.push(currentLine);
656 arr.forEach((line, index) => {
657 context.fillText(line, 770, y + (index * 17)); // 调整行高
658 })
659 })
660 } else {
661 linesBdcdy.forEach((line, index) => {
662 const y = 418 + (index * 17); // 每行文本的垂直位置
663 let currentLine = '';
664 let arr = [];
665 for (let word of line) {
666 const testLine = currentLine + word;
667 const lineWidth = context.measureText(testLine).width;
668 if (lineWidth <= maxWidth) {
669 currentLine = testLine;
670 } else {
671 arr.push(currentLine);
672 currentLine = word;
673 }
674 }
675 arr.push(currentLine);
676 arr.forEach((line, index) => {
677 context.fillText(line, 770, y + (index * 17)); // 调整行高
678 })
679 })
680 }
681
682 for (let i = 1; i < lines.length; i++) {
683 let num = Math.ceil(getByteLen(lines[i]) / 32)
684 if (getByteLen(lines[i]) > 32) {
685 let currentLine = '';
686 let arr = [];
687 for (let word of lines[i]) {
688 const testLine = currentLine + word;
689 const lineWidth = context.measureText(testLine).width;
690 if (lineWidth <= maxWidth) {
691 currentLine = testLine;
692 } else {
693 arr.push(currentLine);
694 currentLine = word;
695 }
696 }
697 arr.push(currentLine);
698 if (i > 0) {
699 arr.forEach((line, index) => {
700 context.fillText(line, 770, 408 + (bdcdyNum * 15) + (24 * (i - 1)) + 5 * num + (index * 17)); // 调整行高
701 })
702 } else {
703 arr.forEach((line, index) => {
704 context.fillText(line, 770, 408 + (bdcdyNum * 15) + (24 * (i - 1)) + (index * 17)); // 调整行高
705 })
706 }
707 } else {
708 if (i > 0) {
709 context.fillText(lines[i] ? lines[i] : '', 770, 417 + (bdcdyNum * 15) + 6 * num + (25 * (i - 1)));
710 } else {
711 context.fillText(lines[i] ? lines[i] : '', 770, 417 + (bdcdyNum * 15) + (25 * (i - 1)));
712 }
713 }
714 }
715 // fj
716 let lines1 = this.bdcqz.fj ? this.bdcqz.fj.split('\n').filter(i => i && i.trim()) : [];
717 for (let i = 0; i < lines1.length; i++) {
718 let num = Math.ceil(getByteLen(lines1[i]) / 37)
719 if (getByteLen(lines1[i]) > 37) {
720 let currentLine = '';
721 let arr = [];
722 for (let word of lines1[i]) {
723 const testLine = currentLine + word;
724 const lineWidth = context.measureText(testLine).width;
725 if (lineWidth <= maxWidth) {
726 currentLine = testLine;
727 } else {
728 arr.push(currentLine);
729 currentLine = word;
730 }
731 }
732 arr.push(currentLine);
733 if (i > 0) {
734 arr.forEach((line, index) => {
735 context.fillText(line, 770, 605 + (24 * (i - 1)) + 5 * num + (index * 17)); // 调整行高
736 })
737 } else {
738 arr.forEach((line, index) => {
739 context.fillText(line, 770, 605 + (24 * (i - 1)) + (index * 17)); // 调整行高
740 })
741 }
742 } else {
743 if (i > 0) {
744 context.fillText(lines1[i] ? lines1[i] : '', 770, 616 + 6 * num + (25 * (i - 1)));
745 } else {
746 context.fillText(lines1[i] ? lines1[i] : '', 770, 616 + (25 * (i - 1)));
747 }
748 }
749 }
750 }
751 image.src = this.bdczmSrc;
752 },
753 /**
754 * @description: 打印
755 * @author: renchao
756 */
757 handlePrint () {
758 let that = this
759 if (this.ruleForm.ysxlh == '') {
760 this.$message.error('请选择印刷序列号');
761 return;
762 }
763 store.dispatch('user/reWorkFresh', false)
764 if (this.bdcqz.bdcqzlx == 1) {
765 if (this.activeTitle == 'title1') {
766 getPrintTemplateByCode({ tmpno: 'zsdy1' }).then(resInfo => {
767 if (resInfo.code == 200) {
768 //打开模板设计
769 let LODOP = getLodop(document.getElementById('LODOP_OB'), document.getElementById('LODOP_EM'));
770 LODOP.ADD_PRINT_DATA("ProgramData", resInfo.result.tmpcontent); //装载模板
771 console.log(that.bdcqz);
772 for (let key in that.bdcqz) {
773 LODOP.SET_PRINT_STYLEA(key, "CONTENT", that.bdcqz[key]);
774 }
775 LODOP.PREVIEW();
776 } else {
777 that.$message.error(resInfo.message)
778 }
779 that.$popupCacel()
780 //刷新列表
781 store.dispatch('user/reWorkFresh', true)
782 })
783 } else {
784 getPrintTemplateByCode({ tmpno: 'zsdy' }).then(resInfo => {
785 if (resInfo.code == 200) {
786 //打开模板设计
787 let LODOP = getLodop(document.getElementById('LODOP_OB'), document.getElementById('LODOP_EM'));
788 LODOP.ADD_PRINT_DATA("ProgramData", resInfo.result.tmpcontent); //装载模板
789
790 that.bdcqz.bdcdyh1 = that.bdcqz.bdcdyh.slice(0, 6) + ' ' + that.bdcqz.bdcdyh.slice(6, 12) + ' ' +
791 that.bdcqz.bdcdyh.slice(12, 19) + ' ' + that.bdcqz.bdcdyh.slice(19, that.bdcqz.bdcdyh.length)
792 //todo 调取后端接口获取数据 循环set
793 for (let key in that.bdcqz) {
794 LODOP.SET_PRINT_STYLEA(key, "CONTENT", that.bdcqz[key]);
795 }
796 LODOP.PREVIEW();
797 } else {
798 that.$message.error(resInfo.message)
799 }
800 that.$popupCacel()
801 //刷新列表
802 store.dispatch('user/reWorkFresh', true)
803 })
804 }
805 } else {
806 getPrintTemplateByCode({ tmpno: 'zmdy' }).then(resInfo => {
807 if (resInfo.code == 200) {
808 //打开模板设计
809 let LODOP = getLodop(document.getElementById('LODOP_OB'), document.getElementById('LODOP_EM'));
810 LODOP.ADD_PRINT_DATA("ProgramData", resInfo.result.tmpcontent); //装载模板
811
812 // 年月日
813 this.bdcqz.nian = this.bdcqz.djsj.split(' ')[0].split('/')[0]
814 this.bdcqz.yue = this.bdcqz.djsj.split(' ')[0].split('/')[1]
815 this.bdcqz.ri = this.bdcqz.djsj.split(' ')[0].split('/')[1]
816 this.bdcqz.bdcdyh1 = this.bdcqz.bdcdyh.slice(0, 6) + ' ' + this.bdcqz.bdcdyh.slice(6, 12) + ' ' +
817 this.bdcqz.bdcdyh.slice(12, 19) + ' ' + this.bdcqz.bdcdyh.slice(19, this.bdcqz.bdcdyh.length)
818 //todo 调取后端接口获取数据 循环set
819 for (let key in this.bdcqz) {
820 LODOP.SET_PRINT_STYLEA(key, "CONTENT", this.bdcqz[key]);
821 }
822 LODOP.PREVIEW();
823 } else {
824 this.$message.error(resInfo.message)
825 }
826 that.$popupCacel()
827 //刷新列表
828 store.dispatch('user/reWorkFresh', true)
829 })
830 }
831 },
832 /**
833 * @description: 保存打印记录
834 * @author: renchao
835 */
836 handleSubmit () {
837 let that = this
838 if (this.ruleForm.ysxlh == '') {
839 this.$message.error('请选择印刷序列号');
840 return;
841 }
842 store.dispatch('user/reWorkFresh', false)
843 this.ruleForm.bsmBdcqz = this.bdcqz.bsmBdcqz;
844 this.ruleForm.bdcqzlx = this.bdcqz.bdcqzlx;
845 this.ruleForm.szzh = this.bdcqz.bdcqzh;
846 this.bdcqz.ysxlh = this.ruleForm.ysxlh
847 certificate(this.ruleForm).then((res) => {
848 if (res.code === 200) {
849 that.$popupCacel()
850 this.handlePrint()
851 } else {
852 this.$message.error(res.message)
853 }
854 store.dispatch('user/reWorkFresh', true)
855 })
856 }
857 }
858 }
859 </script>
860 <style scoped lang="scss">
861 @import "~@/styles/mixin.scss";
862 /deep/.el-tabs__nav-wrap::after {
863 display: none;
864 }
865 /deep/.el-tabs__header {
866 margin: 0;
867 }
868 /deep/.el-form-item--small.el-form-item {
869 margin-bottom: 0;
870 }
871 .zsdy-content {
872 height: 80vh;
873 overflow-y: scroll;
874 }
875 .zs-content {
876 text-align: center;
877 }
878 .invalid-diglog {
879 padding-bottom: 20px;
880 font-size: 16px;
881 font-weight: bold;
882 color: rgb(99, 99, 99);
883
884 .invalid-title {
885 display: flex;
886 align-content: center;
887
888 .invalid-icon {
889 color: rgb(254, 148, 0);
890 font-size: 34px;
891 margin-right: 10px;
892 }
893
894 .invalid-body {
895 line-height: 40px;
896 margin-bottom: 10px;
897 }
898 }
899
900 .invalid-reson {
901 margin-bottom: 10px;
902 }
903
904 .dialog-footer {
905 margin-top: 10px;
906 display: flex;
907 justify-content: flex-end;
908 }
909 }
910 </style>
1 <!--
2 * @Description:
3 * @Autor: renchao
4 * @LastEditTime: 2024-01-19 14:45:09
5 -->
6 <template>
7 <el-form :model="ruleForm" :rules="rules" ref="ruleForm" label-width="100px">
8 <el-row>
9 <el-col :span="8">
10 <el-form-item label="发证人姓名">
11 <el-input v-model="ruleForm.fzrmc" disabled></el-input>
12 </el-form-item>
13 </el-col>
14 <el-col :span="8">
15 <el-form-item label="发证时间">
16 <el-input v-model="ruleForm.fzsj" disabled></el-input>
17 </el-form-item>
18 </el-col>
19 <el-col :span="8">
20 <el-form-item label="发证数量">
21 <el-input v-model="ruleForm.fzsl" disabled></el-input>
22 </el-form-item>
23 </el-col>
24 </el-row>
25 <lb-table :column="tableData.columns" @row-dblclick="handleRowClick" ref="table" @selection-change="handleSelectionChange"
26 :data="tableData.data"
27 :pagination="false"
28 :calcHeight="300">
29 </lb-table>
30 <el-row>
31 <el-col :span="3">
32 <el-form-item label="身份证读卡器">
33 <el-button type="text" icon="el-icon-tickets" @click="readClick">读取</el-button>
34 </el-form-item>
35 </el-col>
36 <el-col :span="5">
37 <el-form-item label="领证人" prop="lzrxm" label-width="70px">
38 <el-input v-model="ruleForm.lzrxm"></el-input>
39 </el-form-item>
40 </el-col>
41 <el-col :span="5">
42 <el-form-item label="证件类型" prop="lzrzjlb" label-width="80px">
43 <el-select v-model="ruleForm.lzrzjlb" filterable clearable placeholder="请选择">
44 <el-option v-for="item in lzrzjlbData" :key="item.dcode" :label="item.dname" :value="item.dcode">
45 </el-option>
46 </el-select>
47 </el-form-item>
48 </el-col>
49 <el-col :span="5">
50 <el-form-item label="证件号" prop="lzrzjh" label-width="70px">
51 <el-input v-model="ruleForm.lzrzjh"></el-input>
52 </el-form-item>
53 </el-col>
54 <el-col :span="5">
55 <el-form-item label="领证人电话" prop="lzrdh">
56 <el-input v-model="ruleForm.lzrdh"></el-input>
57 </el-form-item>
58 </el-col>
59 </el-row>
60 <el-form-item class="text-center">
61 <el-button @click="$popupCacel">取消</el-button>
62 <el-button type="primary" @click="handleSubmit">确定</el-button>
63 </el-form-item>
64 </el-form>
65 </template>
66 <script>
67 const checkPhone = (rule, value, callback) => {
68 let regPone = null
69 let mobile = /^(1[3456789]\d{9})$/ //手机号
70 let tel = /^((0\d{2,3}-\d{7,8})|(1[3584]\d{9}))$/ // 座机
71 if (value && value[0] === '0') {// 检查 value 是否存在并且不是 null 或者 undefined
72 regPone = tel
73 } else if (value && value[0] !== '0') {
74 regPone = mobile
75 }
76 if (regPone === null) {
77 return callback(
78 new Error('请输入电话')
79 )
80 } else if (!regPone.test(value)) {
81 return callback(
82 new Error("请输入正确的电话格式,其中座机格式'区号-座机号码'")
83 )
84 } else {
85 callback()
86 }
87 };
88 import Vue from 'vue'
89 import store from '@/store/index.js'
90 import table from "@/utils/mixin/table";
91 import { getIdCardInfo } from '@/utils/operation.js'
92 import { getUnclaimedBdcqz, issueCertificate, getBdcqzQlr } from "@/api/bdcqz.js";
93 import { datas } from "../../javascript/fzxxdata";
94 export default {
95 props: {
96 formData: {
97 type: Object,
98 default: () => {
99 return {}
100 }
101 }
102 },
103 mixins: [table],
104 data () {
105 return {
106 lzrzjlbData: store.getters.dictData['A30'],
107 ruleForm: {
108 fzrmc: '',
109 fzsj: '',
110 fzsl: '',
111 bdcqzList: [],
112 lzrxm: '',
113 lzrzjlb: '',
114 lzrzjh: '',
115 lzrdh: ''
116 },
117 rules: {
118 lzrxm: [
119 { required: true, message: '请输入领证人', trigger: 'blur' }
120 ],
121 lzrzjlb: [
122 { required: true, message: '请选择证件类型', trigger: 'change' }
123 ],
124 lzrzjh: [
125 { required: true, message: '请输入证件号', trigger: 'blur' }
126 ],
127 lzrdh: [
128 { required: true, validator: checkPhone, trigger: ["blur"] }
129 ]
130 },
131 tableData: {
132 total: 0,
133 columns: datas.columns().lzgrid,
134 data: []
135 }
136 }
137 },
138 mounted () {
139 this.$nextTick(() => {
140 this.loadGrid()
141 })
142 },
143 methods: {
144 /**
145 * @description: 身份证打卡器
146 * @author: renchao
147 */
148 readClick () {
149 function getObjectByValue (arrayOfObjects, value) {
150 var name = ''
151 arrayOfObjects.forEach(item => {
152 if (item.dname.includes(value)) name = item.dcode
153 })
154 return name
155 }
156 getIdCardInfo(this.BASE_API.gaopaiyi).then(res => {
157 if (this.BASE_API.gaopaiyi == 'jy') {
158 const {
159 Name,
160 IdNo,
161 } = JSON.parse(res)
162 if (Name) {
163 this.ruleForm.lzrxm = Name;
164 this.ruleForm.lzrzjlb = '1';
165 this.ruleForm.lzrzjh = IdNo;
166 this.$message({
167 message: '读取成功!',
168 type: 'success'
169 })
170 } else {
171 this.$message({
172 message: '请放置身份证',
173 type: 'warning'
174 })
175 }
176 } else {
177 if (res.data.code == 0) {
178 let data = res.data.IDCardInfo
179 this.ruleForm.lzrxm = data.name
180 this.ruleForm.lzrzjlb = '1'
181 this.ruleForm.lzrzjh = data.cardID
182 this.$message({
183 message: '读取成功!',
184 type: 'success'
185 })
186 } else {
187 this.$message({
188 message: res.data.message,
189 type: 'warning'
190 })
191 }
192 }
193 })
194 },
195 /**
196 * @description: 列表初始化
197 * @author: renchao
198 */
199 loadGrid () {
200 let that = this
201 getUnclaimedBdcqz({ bsmSlsq: Vue.prototype.$currentRoute.query.bsmSlsq }).then(res => {
202 if (res.code === 200) {
203 this.tableData.data = res.result.list;
204 this.$nextTick(() => {
205 this.tableData.data.forEach(item => {
206 that.$refs.table.toggleRowSelection(item)
207 })
208 })
209 this.ruleForm.fzrmc = res.result.fzrmc
210 this.ruleForm.fzsj = res.result.fzsj
211 this.ruleForm.fzsl = res.result.fzsl
212 this.ruleForm.bdcqzList = res.result.list;
213 res.result.list.length && this.getQlr(res.result.list[0].bsmBdcqz)
214 }
215 })
216 },
217 /**
218 * @description: 获取权利人信息
219 * @author: renchao
220 */
221 getQlr (bsmBdcqz) {
222 getBdcqzQlr(bsmBdcqz).then(res => {
223 if (res.code === 200) {
224 this.ruleForm.lzrxm = res.result.qlrmc;
225 this.ruleForm.lzrzjlb = res.result.zjzl;
226 this.ruleForm.lzrzjh = res.result.zjh;
227 this.ruleForm.lzrdh = res.result.dh;
228 }
229 })
230 },
231 /**
232 * @description: handleSelectionChange
233 * @param {*} val
234 * @author: renchao
235 */
236 handleSelectionChange (val) {
237 this.ruleForm.bdcqzList = val
238 },
239 /**
240 * @description: handleRowClick
241 * @param {*} row
242 * @author: renchao
243 */
244 handleRowClick (row) {
245 this.$refs.table.toggleRowSelection(row)
246 },
247 /**
248 * @description: handleSubmit
249 * @author: renchao
250 */
251 handleSubmit () {
252 this.$refs.ruleForm.validate(valid => {
253 if (valid) {
254 issueCertificate(this.ruleForm).then(res => {
255 if (res.code == 200) {
256 this.$message.success('保存成功');
257 //刷新列表
258 store.dispatch('user/reWorkFresh', true)
259 this.$popupCacel()
260 } else {
261 this.$message.error(res.message)
262 }
263 })
264 } else {
265 return false;
266 }
267 })
268 }
269 }
270 }
271 </script>
272 <style scoped lang="scss">
273 @import "~@/styles/mixin.scss";
274 </style>
275
276
1 <!--
2 * @Description:
3 * @Autor: renchao
4 * @LastEditTime: 2023-11-15 15:41:43
5 -->
6 <template>
7 <div class="from-clues loadingtext" v-Loading="loading" element-loading-text="拼命加载中...">
8 <!-- 表单部分 -->
9 <el-tabs v-model="activeName" @tab-click="handleClick" v-if="headTabBdcqz.length >1" style="margin-top:-15px">
10 <el-tab-pane :label="item.qlr + (item.bdcqzh !== null ? '(' + item.bdcqzh + ')' : '')" :name="item.bsmBdcqz"
11 v-for="(item, index) in headTabBdcqz" :key="index">
12 </el-tab-pane>
13 </el-tabs>
14 <el-empty description="暂无数据" v-if="headTabBdcqz.length == 0 && noData"></el-empty>
15 <div v-else>
16 <div style="height:540px">
17 <el-form class="zs" :model="bdcqz" v-if="this.bdcqz.bdcqzlx==1" ref="ruleForm" label-width="100px">
18 <el-row>
19 <el-col :span="24">
20 <el-form-item label="权利人">
21 <el-input v-model="bdcqz.qlr"></el-input>
22 </el-form-item>
23 </el-col>
24 </el-row>
25 <el-row>
26 <el-col :span="24">
27 <el-form-item label="共有情况">
28 <el-select v-model="bdcqz.gyqk" class="width100" placeholder="请选择">
29 <el-option
30 v-for="item in gyqkList"
31 :key="item.dcode"
32 :label="item.dname"
33 :value="item.dcode">
34 </el-option>
35 </el-select>
36 </el-form-item>
37 </el-col>
38 </el-row>
39 <el-row>
40 <el-col :span="24">
41 <el-form-item label="坐落">
42 <el-input v-model="bdcqz.zl"></el-input>
43 </el-form-item>
44 </el-col>
45 </el-row>
46 <el-row>
47 <el-col :span="24">
48 <el-form-item label="不动产单元号">
49 <el-input v-model="bdcqz.bdcdyh"></el-input>
50 </el-form-item>
51 </el-col>
52 </el-row>
53 <el-row>
54 <el-col :span="24">
55 <el-form-item label="权利类型">
56 <el-input v-model="bdcqz.qllx"></el-input>
57 </el-form-item>
58 </el-col>
59 </el-row>
60 <el-row>
61 <el-col :span="24">
62 <el-form-item label="权利性质 ">
63 <el-input v-model="bdcqz.qlxz"></el-input>
64 </el-form-item>
65 </el-col>
66 </el-row>
67 <el-row>
68 <el-col :span="24">
69 <el-form-item label="用途">
70 <el-input v-model="bdcqz.yt"></el-input>
71 </el-form-item>
72 </el-col>
73 </el-row>
74 <el-row>
75 <el-col :span="24">
76 <el-form-item label="面积">
77 <el-input v-model="bdcqz.mj"></el-input>
78 </el-form-item>
79 </el-col>
80 </el-row>
81 <el-row>
82 <el-col :span="24">
83 <el-form-item label="使用期限 ">
84 <el-input v-model="bdcqz.syqx"></el-input>
85 </el-form-item>
86 </el-col>
87 </el-row>
88 <el-row>
89 <el-col :span="24">
90 <el-form-item label="权利其他状况">
91 <el-input v-model="bdcqz.qlqtzk" :rows="4" type="textarea"></el-input>
92 </el-form-item>
93 </el-col>
94 </el-row>
95 <el-row>
96 <el-col :span="24">
97 <el-form-item label="附记">
98 <el-input v-model="bdcqz.fj" :rows="4" type="textarea"></el-input>
99 </el-form-item>
100 </el-col>
101 </el-row>
102 </el-form>
103 <el-form :model="bdcqz" class="zm" v-else ref="ruleForm" label-width="110px">
104 <el-row>
105 <el-col :span="24">
106 <el-form-item label="证明权利或事项">
107 <el-input v-model="bdcqz.zmqlhsx"></el-input>
108 </el-form-item>
109 </el-col>
110 </el-row>
111 <el-row>
112 <el-col :span="24">
113 <el-form-item label="权利人(申请人)">
114 <el-input v-model="bdcqz.qlr"></el-input>
115 </el-form-item>
116 </el-col>
117 </el-row>
118 <el-row>
119 <el-col :span="24">
120 <el-form-item label="义务人">
121 <el-input v-model="bdcqz.ywr"></el-input>
122 </el-form-item>
123 </el-col>
124 </el-row>
125 <el-row>
126 <el-col :span="24">
127 <el-form-item label="坐落">
128 <el-input v-model="bdcqz.zl"></el-input>
129 </el-form-item>
130 </el-col>
131 </el-row>
132 <el-row>
133 <el-col :span="24">
134 <el-form-item label="不动产单元号">
135 <el-input v-model="bdcqz.bdcdyh"></el-input>
136 </el-form-item>
137 </el-col>
138 </el-row>
139 <el-row>
140 <el-col :span="24">
141 <el-form-item label="其他状况">
142 <el-input v-model="bdcqz.qlqtzk" :rows="6" type="textarea"></el-input>
143 </el-form-item>
144 </el-col>
145 </el-row>
146 <el-row>
147 <el-col :span="24">
148 <el-form-item label="附记">
149 <el-input v-model="bdcqz.fj" :rows="6" type="textarea"></el-input>
150 </el-form-item>
151 </el-col>
152 </el-row>
153 </el-form>
154 </div>
155 <div style="text-align:center">
156 <el-button @click="$popupCacel">取消</el-button>
157 <el-button type="primary" @click="handleSubmit">保存</el-button>
158 </div>
159 </div>
160 </div>
161 </template>
162
163 <script>
164 import store from '@/store/index.js'
165 import { getSlsqBdcqzList, editBdcqz } from "@/api/bdcqz.js"
166 export default {
167 name: "zsxg",
168 props: {
169 formData: {
170 type: Object,
171 default: {}
172 }
173 },
174 data () {
175 return {
176 gyqkList: store.getters.dictData['A34'],
177 key: 0,
178 noData: false,
179 loading: false,
180 bdcqz: {},
181 //tab切换栏数组
182 headTabBdcqz: [],
183 //tab选择绑定值
184 activeName: '',
185 }
186 },
187 mounted () {
188 this.getHeadTabBdcqz()
189 },
190 methods: {
191 /**
192 * @description: 获取受理申请下全部不动产权证
193 * @author: renchao
194 */
195 getHeadTabBdcqz () {
196 this.loading = true
197 getSlsqBdcqzList({ bsmSlsq: this.formData.bsmSlsq }).then(res => {
198 if (res.code == 200) {
199 this.noData = true
200 if (res.result && res.result.length > 0) {
201 this.bdcqz = res.result[0]
202 this.headTabBdcqz = _.cloneDeep(res.result)
203 if (this.formData.bsmBdcqz) {
204 this.activeName = this.formData.bsmBdcqz
205 } else {
206 this.activeName = res.result[0].bsmBdcqz
207 }
208 }
209 }
210 this.loading = false
211 })
212 },
213 handleClick (tab) {
214 this.bdcqz = _.cloneDeep(this.headTabBdcqz[tab.index])
215 },
216 handleSubmit () {
217 editBdcqz(this.bdcqz).then(res => {
218 if (res.code == 200) {
219 this.$message.success('保存成功');
220 //刷新列表
221 this.$popupCacel()
222 } else {
223 this.$message.error(res.message)
224 }
225 })
226 }
227 }
228 }
229 </script>
230 <style scoped lang="scss">
231 @import "~@/styles/mixin.scss";
232 </style>
1 <!--
2 * @Description:
3 * @Autor: renchao
4 * @LastEditTime: 2024-02-06 13:23:44
5 -->
6 <template>
7 <div class="from-clues loadingtext" v-Loading="loading" element-loading-text="拼命加载中..." style="text-align: center;">
8 <!-- 表单部分 -->
9 <div style="margin-top:-20px">
10 <el-tabs v-model="activeName" @tab-click="handleClick" v-if="headTabBdcqz.length >1">
11 <el-tab-pane :label="item.qlr + (item.bdcqzh !== null ? '(' + item.bdcqzh + ')' : '')" :name="item.bsmBdcqz"
12 v-for="(item, index) in headTabBdcqz" :key="index">
13 </el-tab-pane>
14 </el-tabs>
15 </div>
16 <el-empty description="暂无数据" v-if="headTabBdcqz.length == 0 && noData"></el-empty>
17 <div style="max-height:89vh;overflow-y:auto">
18 <div v-show="this.bdcqz.bdcqzlx==1">
19 <el-tabs v-model="activeTitle">
20 <el-tab-pane label="第一页" name="title1"></el-tab-pane>
21 <el-tab-pane label="第二页" name="title2"></el-tab-pane>
22 </el-tabs>
23 <div style="width:1169px;overflow-x: hidden;">
24 <canvas ref="zs1" width="1024" v-show="activeTitle=='title1'" height="739"></canvas>
25 <canvas ref="zs" width="1024" v-show="activeTitle=='title2'" height="739"></canvas>
26 </div>
27 </div>
28 <div style="width:1169px;overflow-x: hidden;" v-show="this.bdcqz.bdcqzlx==2">
29 <canvas ref="zm" width="1169" height="828"></canvas>
30 </div>
31 </div>
32 </div>
33 </template>
34
35 <script>
36 import QRCode from 'qrcode'
37 import { datas } from "../../javascript/zsyl.js";
38 import { getSlsqBdcqzList } from "@/api/bdcqz.js"
39 export default {
40 name: "zsyl",
41 props: {
42 formData: {
43 type: Object,
44 default: {}
45 }
46 },
47 data () {
48 return {
49 activeTitle: 'title1',
50 key: 0,
51 noData: false,
52 imgSrc1: require('@/image/bdcqz/bdcqzs1.jpg'),
53 imgSrc: require('@/image/bdcqz/bdcqzs2.jpg'),
54 bdczmSrc: require('@/image/bdcqz/bdczm.jpg'),
55 loading: false,
56 //印刷序列号集合
57 ysxlh: [],
58 //列名称对象
59 columns: [],
60 //选择的不动产权证文件
61 bdcqz: '',
62 //证书打开类型 是否需要展示打印按钮
63 isToPrint: false,
64 //tab切换栏数组
65 headTabBdcqz: [],
66 //tab选择绑定值
67 activeName: '',
68 //证书图片预览
69 previewImage: '',
70 ruleForm: {
71 bsmBdcqz: '',
72 szmc: '不动产权证书',
73 bsmBdcqz: '',
74 szzh: '',
75 ysxlh: '',
76 },
77 }
78 },
79 mounted () {
80 this.columns = datas.columns();
81 if (this.formData.bdcqz) {
82 //从缮证进入
83 this.bdcqz = this.formData.bdcqz
84 } else {
85 //从按钮进入
86 this.getHeadTabBdcqz();
87 }
88 },
89 methods: {
90 /**
91 * @description: 获取证书内容
92 * @param {*} code
93 * @author: renchao
94 */
95 getRowValue (code) {
96 var value = this.bdcqz[code];
97 return value;
98 },
99 /**
100 * @description: 获取受理申请下全部不动产权证
101 * @author: renchao
102 */
103 getHeadTabBdcqz () {
104 this.loading = true
105 getSlsqBdcqzList({ bsmSlsq: this.formData.bsmSlsq }).then(res => {
106 if (res.code == 200) {
107 this.noData = true
108 if (res.result && res.result.length > 0) {
109 this.bdcqz = res.result[0]
110 this.headTabBdcqz = res.result
111 if (this.formData.bsmBdcqz) {
112 this.activeName = this.formData.bsmBdcqz
113 } else {
114 this.activeName = res.result[0].bsmBdcqz
115 }
116 if (this.bdcqz.bdcqzlx == 1) {
117 this.drawTextOnImage()
118 } else {
119 this.drawTextzmImage()
120 }
121 }
122 }
123 this.loading = false
124 })
125 },
126 /**
127 * @description: tab表头切换方法
128 * @param {*} e
129 * @author: renchao
130 */
131 handleClick (tab, event) {
132 this.bdcqz = this.headTabBdcqz[tab.index]
133 if (this.bdcqz.bdcqzlx == 1) {
134 this.drawTextOnImage()
135 } else {
136 this.drawTextzmImage()
137 }
138 },
139 /**
140 * @description: 不动产证书
141 * @author: renchao
142 */
143 drawTextOnImage1 () {
144 const canvas = this.$refs.zs1;
145 const context = canvas.getContext('2d');
146 const image = new Image();
147 image.onload = () => {
148 context.drawImage(image, 0, 0);
149 context.font = '18px 楷体';
150 context.fillStyle = '#000000';
151 let date = this.bdcqz.djsj.split(' ')[0].split('/');
152 let nian = date[0]
153 let yue = date[1]
154 let ri = date[2]
155 this.bdcqz.nian = nian
156 this.bdcqz.yue = yue
157 this.bdcqz.ri = ri
158 context.fillText(nian ? nian : '', 780, 499);
159 context.fillText(yue ? yue : '', 840, 499);
160 context.fillText(ri ? ri : '', 885, 499);
161 QRCode.toDataURL(this.bdcqz.bdcqzh, { margin: 0 })
162 .then(url => {
163 const qrImage = new Image();
164 this.bdcqz.qrImage = url; // 将二维码图片的 URL 存储到 bdcqz 对象的 qrImage 属性中
165 qrImage.onload = () => {
166 context.drawImage(qrImage, 670, 400, 100, 100);
167 };
168 qrImage.src = url;
169 })
170 .catch(error => {
171 console.error(error);
172 });
173 context.fillText(this.bdcqz.sxh ? this.bdcqz.sxh : '', 745, 633);
174 };
175 image.src = this.imgSrc1;
176 },
177 drawTextOnImage () {
178 this.drawTextOnImage1()
179 function getByteLen (val) {
180 var len = 0;
181 if (!val) return len;
182 for (var i = 0; i < val.length; i++) {
183 var length = val.charCodeAt(i);
184 if (length >= 0 && length <= 128) {
185 len += 1;
186 } else {
187 len += 2;
188 }
189 }
190 return len;
191 }
192 const canvas = this.$refs.zs;
193 const context = canvas.getContext('2d');
194 const image = new Image();
195 image.onload = () => {
196 context.drawImage(image, 0, 0);
197 context.font = '18px 楷体';
198 context.fillStyle = '#000000';
199 context.fillText(this.bdcqz.sjjc ? this.bdcqz.sjjc : '', 60, 56);
200 context.fillText(this.bdcqz.djnd ? this.bdcqz.djnd : '', 113, 56);
201 context.fillText(this.bdcqz.sxqc ? this.bdcqz.sxqc : '', 180, 56);
202 context.fillText(this.bdcqz.sxh ? this.bdcqz.sxh : '', 370, 56);
203 context.fillText(this.bdcqz.qlr ? this.bdcqz.qlr : '', 129, 97);
204 context.fillText(this.bdcqz.gyqk ? this.bdcqz.gyqk : '', 129, 136);
205
206 this.bdcdyh = this.bdcqz.bdcdyh.slice(0, 6) + ' ' + this.bdcqz.bdcdyh.slice(6, 12) + ' ' +
207 this.bdcqz.bdcdyh.slice(12, 19) + ' ' + this.bdcqz.bdcdyh.slice(19, this.bdcqz.bdcdyh.length)
208 context.fillText(this.bdcdyh ? this.bdcdyh : '', 129, 223);
209
210 context.fillText(this.bdcqz.qllx ? this.bdcqz.qllx : '', 129, 263);
211 context.fillText(this.bdcqz.qlxz ? this.bdcqz.qlxz : '', 129, 303);
212 context.fillText(this.bdcqz.yt ? this.bdcqz.yt : '', 129, 346);
213 // context.fillText(this.bdcqz.mj ? this.bdcqz.mj : '', 129, 386);
214 let lines6 = this.bdcqz.mj ? this.bdcqz.mj.split(' ') : [];
215 if (getByteLen(this.bdcqz.mj) > 37) {
216 lines6.forEach((line, index) => {
217 const y = 378 + (index * 27); // 每行文本的垂直位置
218 let currentLine = '';
219 let arr = [];
220 for (let word of line) {
221 const testLine = currentLine + word;
222 const lineWidth = context.measureText(testLine).width;
223 if (lineWidth <= 330) {
224 currentLine = testLine;
225 } else {
226 arr.push(currentLine);
227 currentLine = word;
228 }
229 }
230 arr.push(currentLine);
231 arr.forEach((line, index) => {
232 context.fillText(line, 129, y + (index * 20)); // 调整行高
233 })
234 })
235 } else {
236 lines6.forEach((line, index) => {
237 const y = 386 + (index * 27); // 每行文本的垂直位置
238 let currentLine = '';
239 let arr = [];
240 for (let word of line) {
241 const testLine = currentLine + word;
242 const lineWidth = context.measureText(testLine).width;
243 if (lineWidth <= 330) {
244 currentLine = testLine;
245 } else {
246 arr.push(currentLine);
247 currentLine = word;
248 }
249 }
250 arr.push(currentLine);
251 arr.forEach((line, index) => {
252 context.fillText(line, 129, y + (index * 20)); // 调整行高
253 })
254 })
255 }
256 // 权利其他状态
257 let lines = this.bdcqz.qlqtzk ? this.bdcqz.qlqtzk.split('\n').filter(i => i && i.trim()) : [];
258 for (let i = 0; i < lines.length; i++) {
259 let num = Math.ceil(getByteLen(lines[i]) / 38)
260 if (getByteLen(lines[i]) > 37) {
261 let currentLine = '';
262 let arr = [];
263 for (let word of lines[i]) {
264 const testLine = currentLine + word;
265 const lineWidth = context.measureText(testLine).width;
266 if (lineWidth <= 323) {
267 currentLine = testLine;
268 } else {
269 arr.push(currentLine);
270 currentLine = word;
271 }
272 }
273 arr.push(currentLine);
274 if (i > 0) {
275 arr.forEach((line, index) => {
276 context.fillText(line, 129, 495 + (29 * (i - 1)) + 4 * num + (index * 14)); // 调整行高
277 })
278 } else {
279 arr.forEach((line, index) => {
280 context.fillText(line, 129, 493 + (26 * (i - 1)) + (index * 14)); // 调整行高
281 })
282 }
283 } else {
284 if (i > 0) {
285 context.fillText(lines[i] ? lines[i] : '', 129, 500 + 4 * num + (29 * (i - 1)));
286 } else {
287 context.fillText(lines[i] ? lines[i] : '', 129, 505 + (27 * (i - 1)));
288 }
289 }
290 }
291
292 let lines1 = this.bdcqz.fj ? this.bdcqz.fj.split('\n').filter(i => i && i.trim()) : [];
293 lines1.forEach((line, index) => {
294 const y = 100 + (index * 30); // 每行文本的垂直位置
295 let currentLine = '';
296 let arr = [];
297 for (let word of line) {
298 const testLine = currentLine + word;
299 const lineWidth = context.measureText(testLine).width;
300 if (lineWidth <= 395) {
301 currentLine = testLine;
302 } else {
303 arr.push(currentLine);
304 currentLine = word;
305 }
306 }
307 arr.push(currentLine);
308 arr.forEach((line, index) => {
309 context.fillText(line, 580, y + (index * 30)); // 调整行高
310 })
311 })
312 let lines3 = this.bdcqz.syqx ? this.bdcqz.syqx.split(' ') : [];
313 if (getByteLen(this.bdcqz.syqx) > 37) {
314 lines3.forEach((line, index) => {
315 const y = 423 + (index * 27); // 每行文本的垂直位置
316 let currentLine = '';
317 let arr = [];
318 for (let word of line) {
319 const testLine = currentLine + word;
320 const lineWidth = context.measureText(testLine).width;
321 if (lineWidth <= 330) {
322 currentLine = testLine;
323 } else {
324 arr.push(currentLine);
325 currentLine = word;
326 }
327 }
328 arr.push(currentLine);
329 arr.forEach((line, index) => {
330 context.fillText(line, 129, y + (index * 20)); // 调整行高
331 })
332 })
333 } else {
334 lines3.forEach((line, index) => {
335 const y = 430 + (index * 27); // 每行文本的垂直位置
336 let currentLine = '';
337 let arr = [];
338 for (let word of line) {
339 const testLine = currentLine + word;
340 const lineWidth = context.measureText(testLine).width;
341 if (lineWidth <= 315) {
342 currentLine = testLine;
343 } else {
344 arr.push(currentLine);
345 currentLine = word;
346 }
347 }
348 arr.push(currentLine);
349 arr.forEach((line, index) => {
350 context.fillText(line, 129, y + (index * 20)); // 调整行高
351 })
352 })
353 }
354
355 let lines2 = this.bdcqz.zl ? this.bdcqz.zl.split(' ') : [];
356 if (getByteLen(this.bdcqz.zl) > 37) {
357 lines2.forEach((line, index) => {
358 const y = 170 + (index * 20); // 每行文本的垂直位置
359 let currentLine = '';
360 let arr = [];
361 for (let word of line) {
362 const testLine = currentLine + word;
363 const lineWidth = context.measureText(testLine).width;
364 if (lineWidth <= 336) {
365 currentLine = testLine;
366 } else {
367 arr.push(currentLine);
368 currentLine = word;
369 }
370 }
371 arr.push(currentLine);
372 arr.forEach((line, index) => {
373 context.fillText(line, 129, y + (index * 20)); // 调整行高
374 })
375 })
376 } else {
377 lines2.forEach((line, index) => {
378 const y = 180 + (index * 20); // 每行文本的垂直位置
379 let currentLine = '';
380 let arr = [];
381 for (let word of line) {
382 const testLine = currentLine + word;
383 const lineWidth = context.measureText(testLine).width;
384 if (lineWidth <= 336) {
385 currentLine = testLine;
386 } else {
387 arr.push(currentLine);
388 currentLine = word;
389 }
390 }
391 arr.push(currentLine);
392 arr.forEach((line, index) => {
393 context.fillText(line, 129, y + (index * 20)); // 调整行高
394 })
395 })
396 }
397 }
398 image.src = this.imgSrc
399 },
400 /**
401 * @description: 不动产证明
402 * @author: renchao
403 */
404 drawTextzmImage () {
405 function getByteLen (val) {
406 var len = 0;
407 if (!val) return len;
408 for (var i = 0; i < val.length; i++) {
409 var length = val.charCodeAt(i);
410 if (length >= 0 && length <= 128) {
411 len += 1;
412 } else {
413 len += 2;
414 }
415 }
416 return len;
417 }
418 const canvas = this.$refs.zm;
419 const context = canvas.getContext('2d');
420 const image = new Image();
421 image.onload = () => {
422 context.drawImage(image, 0, 0);
423 context.font = '18px 楷体';
424 context.fillStyle = '#000000';
425 // ysxlh
426 context.fillText(this.bdcqz.ysxlh ? this.bdcqz.ysxlh : '', 280, 712);
427 // djsj
428 if (this.bdcqz.djsj) {
429 let djsjList = this.bdcqz.djsj.split(' ')[0].split('/')
430 context.fillText(djsjList[0] ? djsjList[0] : '', 327, 580);
431 context.fillText(djsjList[1] ? djsjList[1] : '', 393, 580);
432 context.fillText(djsjList[2] ? djsjList[2] : '', 443, 580);
433 }
434 context.fillText(this.bdcqz.sjjc ? this.bdcqz.sjjc : '', 620, 125);
435 context.fillText(this.bdcqz.djnd ? this.bdcqz.djnd : '', 665, 125);
436 if (getByteLen(this.bdcqz.sxqc) > 14) {
437 const originalFont = context.font;
438 // 设置新的字体大小
439 context.font = '14px 楷体'; // 替换为你想要的字体和大小
440 // 绘制 bdcdyh
441 context.fillText(this.bdcqz.sxqc ? this.bdcqz.sxqc : '', 725, 125);
442 // 恢复原始字体设置
443 context.font = originalFont;
444 } else {
445 context.fillText(this.bdcqz.sxqc ? this.bdcqz.sxqc : '', 755, 125);
446 }
447
448 context.fillText(this.bdcqz.sxh ? this.bdcqz.sxh : '', 960, 123);
449 context.fillText(this.bdcqz.zmqlhsx ? this.bdcqz.zmqlhsx : '', 775, 180);
450 // context.fillText(this.bdcqz.qlr ? this.bdcqz.qlr : '', 775, 228);
451 // 权利人
452 let qlrlines = this.bdcqz.qlr
453 if (getByteLen(this.bdcqz.qlr) > 32) {
454 let currentLine = '';
455 let arr = [];
456 for (let word of qlrlines) {
457 const testLine = currentLine + word;
458 const lineWidth = context.measureText(testLine).width;
459 if (lineWidth <= 295) {
460 currentLine = testLine;
461 } else {
462 arr.push(currentLine);
463 currentLine = word;
464 }
465 }
466 arr.push(currentLine); // 将最后一行添加到数组
467 // 绘制所有行
468 for (let i = 0; i < arr.length; i++) {
469 context.fillText(arr[i], 775, 218 + i * 20); // lineHeight 为行高
470 }
471 } else {
472 context.fillText(this.bdcqz.qlr ? this.bdcqz.qlr : '', 775, 228);
473 }
474
475 // 义务人
476 // context.fillText(this.bdcqz.ywr ? this.bdcqz.ywr : '', 775, 275);
477 let ywrlines = this.bdcqz.ywr
478 if (getByteLen(this.bdcqz.ywr) > 32) {
479 let currentLine = '';
480 let arr = [];
481 for (let word of ywrlines) {
482 const testLine = currentLine + word;
483 const lineWidth = context.measureText(testLine).width;
484 if (lineWidth <= 295) {
485 currentLine = testLine;
486 } else {
487 arr.push(currentLine);
488 currentLine = word;
489 }
490 }
491 arr.push(currentLine); // 将最后一行添加到数组
492 // 绘制所有行
493 for (let i = 0; i < arr.length; i++) {
494 context.fillText(arr[i], 775, 268 + i * 20); // lineHeight 为行高
495 }
496 } else {
497 context.fillText(this.bdcqz.ywr ? this.bdcqz.ywr : '', 775, 275);
498 }
499
500 // context.fillText(this.bdcqz.zl ? this.bdcqz.zl : '', 775, 325);
501 let lines2 = this.bdcqz.zl ? this.bdcqz.zl.split(' ') : [];
502 if (getByteLen(this.bdcqz.zl) > 32) {
503 lines2.forEach((line, index) => {
504 const y = 315 + (index * 20); // 每行文本的垂直位置
505 let currentLine = '';
506 let arr = [];
507 for (let word of line) {
508 const testLine = currentLine + word;
509 const lineWidth = context.measureText(testLine).width;
510 if (lineWidth <= 295) {
511 currentLine = testLine;
512 } else {
513 arr.push(currentLine);
514 currentLine = word;
515 }
516 }
517 arr.push(currentLine);
518 arr.forEach((line, index) => {
519 context.fillText(line, 775, y + (index * 20)); // 调整行高
520 })
521 })
522 } else {
523 lines2.forEach((line, index) => {
524 const y = 325 + (index * 20); // 每行文本的垂直位置
525 let currentLine = '';
526 let arr = [];
527 for (let word of line) {
528 const testLine = currentLine + word;
529 const lineWidth = context.measureText(testLine).width;
530 if (lineWidth <= 295) {
531 currentLine = testLine;
532 } else {
533 arr.push(currentLine);
534 currentLine = word;
535 }
536 }
537 arr.push(currentLine);
538 arr.forEach((line, index) => {
539 context.fillText(line, 775, y + (index * 20)); // 调整行高
540 })
541 })
542 }
543
544 // bdcdyh
545 this.bdcdyh = this.bdcqz.bdcdyh.slice(0, 6) + ' ' + this.bdcqz.bdcdyh.slice(6, 12) + ' ' +
546 this.bdcqz.bdcdyh.slice(12, 19) + ' ' + this.bdcqz.bdcdyh.slice(19, this.bdcqz.bdcdyh.length)
547 // context.fillText(this.bdcdyh ? this.bdcdyh : '', 775, 373);
548 // 保存当前字体设置
549 const originalFont = context.font;
550 // 设置新的字体大小
551 context.font = '16px 楷体'; // 替换为你想要的字体和大小
552 // 绘制 bdcdyh
553 context.fillText(this.bdcdyh ? this.bdcdyh : '', 775, 373);
554 // 恢复原始字体设置
555 context.font = originalFont;
556 // qlqtzk
557 function getByteLenBdcdy (val) {
558 var encoder = new TextEncoder('utf-8');
559 return encoder.encode(val).length;
560 }
561 const maxWidth = 295; // 最大宽度限制
562 let lines = this.bdcqz.qlqtzk ? this.bdcqz.qlqtzk.split('\n').filter(i => i && i.trim()) : [];
563 let bdcdyNum = Math.ceil(getByteLenBdcdy(lines[0]) / 43)
564 // 单独处理不动产单元号
565 let linesBdcdy = lines[0] ? lines[0].split(' ') : [];
566 if (getByteLenBdcdy(lines[0]) > 43) {
567 linesBdcdy.forEach((line, index) => {
568 const y = 412 + (index * 17); // 每行文本的垂直位置
569 let currentLine = '';
570 let arr = [];
571 for (let word of line) {
572 const testLine = currentLine + word;
573 const lineWidth = context.measureText(testLine).width;
574 if (lineWidth <= maxWidth) {
575 currentLine = testLine;
576 } else {
577 arr.push(currentLine);
578 currentLine = word;
579 }
580 }
581 arr.push(currentLine);
582 arr.forEach((line, index) => {
583 context.fillText(line, 770, y + (index * 17)); // 调整行高
584 })
585 })
586 } else {
587 linesBdcdy.forEach((line, index) => {
588 const y = 418 + (index * 17); // 每行文本的垂直位置
589 let currentLine = '';
590 let arr = [];
591 for (let word of line) {
592 const testLine = currentLine + word;
593 const lineWidth = context.measureText(testLine).width;
594 if (lineWidth <= maxWidth) {
595 currentLine = testLine;
596 } else {
597 arr.push(currentLine);
598 currentLine = word;
599 }
600 }
601 arr.push(currentLine);
602 arr.forEach((line, index) => {
603 context.fillText(line, 770, y + (index * 17)); // 调整行高
604 })
605 })
606 }
607
608 for (let i = 1; i < lines.length; i++) {
609 let num = Math.ceil(getByteLen(lines[i]) / 32)
610 if (getByteLen(lines[i]) > 32) {
611 let currentLine = '';
612 let arr = [];
613 for (let word of lines[i]) {
614 const testLine = currentLine + word;
615 const lineWidth = context.measureText(testLine).width;
616 if (lineWidth <= maxWidth) {
617 currentLine = testLine;
618 } else {
619 arr.push(currentLine);
620 currentLine = word;
621 }
622 }
623 arr.push(currentLine);
624 if (i > 0) {
625 arr.forEach((line, index) => {
626 context.fillText(line, 770, 408 + (bdcdyNum * 15) + (24 * (i - 1)) + 5 * num + (index * 17)); // 调整行高
627 })
628 } else {
629 arr.forEach((line, index) => {
630 context.fillText(line, 770, 408 + (bdcdyNum * 15) + (24 * (i - 1)) + (index * 17)); // 调整行高
631 })
632 }
633 } else {
634 if (i > 0) {
635 context.fillText(lines[i] ? lines[i] : '', 770, 417 + (bdcdyNum * 15) + 6 * num + (25 * (i - 1)));
636 } else {
637 context.fillText(lines[i] ? lines[i] : '', 770, 417 + (bdcdyNum * 15) + (25 * (i - 1)));
638 }
639 }
640 }
641 // fj
642 let lines1 = this.bdcqz.fj ? this.bdcqz.fj.split('\n').filter(i => i && i.trim()) : [];
643 for (let i = 0; i < lines1.length; i++) {
644 let num = Math.ceil(getByteLen(lines1[i]) / 37)
645 if (getByteLen(lines1[i]) > 37) {
646 let currentLine = '';
647 let arr = [];
648 for (let word of lines1[i]) {
649 const testLine = currentLine + word;
650 const lineWidth = context.measureText(testLine).width;
651 if (lineWidth <= maxWidth) {
652 currentLine = testLine;
653 } else {
654 arr.push(currentLine);
655 currentLine = word;
656 }
657 }
658 arr.push(currentLine);
659 if (i > 0) {
660 arr.forEach((line, index) => {
661 context.fillText(line, 770, 605 + (24 * (i - 1)) + 5 * num + (index * 17)); // 调整行高
662 })
663 } else {
664 arr.forEach((line, index) => {
665 context.fillText(line, 770, 605 + (24 * (i - 1)) + (index * 17)); // 调整行高
666 })
667 }
668 } else {
669 if (i > 0) {
670 context.fillText(lines1[i] ? lines1[i] : '', 770, 616 + 6 * num + (25 * (i - 1)));
671 } else {
672 context.fillText(lines1[i] ? lines1[i] : '', 770, 616 + (25 * (i - 1)));
673 }
674 }
675 }
676 }
677
678 image.src = this.bdczmSrc;
679 }
680 }
681 }
682 </script>
683 <style scoped lang="scss">
684 @import "~@/styles/mixin.scss";
685 /deep/.el-tabs__nav-wrap::after {
686 display: none;
687 }
688 /deep/.el-tabs__header {
689 margin: 0;
690 }
691 /deep/.el-form-item--small.el-form-item {
692 margin-bottom: 0;
693 }
694 /deep/.mask-content {
695 padding-top: 10px !important;
696 }
697 .imgClass {
698 display: inline-block;
699 height: auto;
700 max-width: 100%;
701 }
702
703 .middle_padding {
704 padding-bottom: 10px;
705 }
706
707 .zsyl-button {
708 text-align: center;
709 margin-top: 20px;
710
711 .operation_button {
712 width: 100px;
713 border: 1px solid rgb(0, 121, 254);
714 }
715
716 .dy-button {
717 color: white;
718 background-color: rgb(0, 121, 254);
719 }
720 }
721
722 .table-column {
723 border-spacing: 1px;
724 width: 100%;
725
726 tr td {
727 border: 1px solid #ccc;
728 text-align: center;
729 height: 40px;
730 padding: 4px;
731 font-size: 13px;
732 background: rgb(251, 249, 229);
733 }
734 }
735
736 .zsyl-title {
737 background: #fafbe5;
738 text-align: center;
739 padding: 5px 0px;
740 font-size: 20px;
741 }
742
743 .no-data {
744 font-size: 18px;
745 display: flex;
746 text-align: center;
747 justify-content: center;
748 }
749 </style>
1 <!--
2 * @Description:
3 * @Autor: miaofang
4 * @LastEditTime: 2023-10-23 16:16:24
5 -->
6 <template>
7 <div
8 class="from-clues loadingtext"
9 v-Loading="loading"
10 element-loading-text="拼命加载中..."
11 style="height: 720px; text-align: center">
12 <!-- 表单部分 -->
13 <el-tabs v-model="activeName" @tab-click="handleClick">
14 <el-tab-pane label="证书预览" name="zsyl">
15 <el-empty
16 description="暂无数据"
17 v-if="headTabBdcqz.length == 0 && noData"></el-empty>
18 <div class="zsys">
19 <canvas
20 ref="zs"
21 width="1000"
22 v-show="this.bdcqz.bdcqzlx == 1"
23 height="700"></canvas>
24 <canvas
25 ref="zm"
26 width="1180"
27 v-show="this.bdcqz.bdcqzlx == 2"
28 height="780"></canvas>
29 </div>
30 </el-tab-pane>
31 <el-tab-pane label="证书详情" name="lcjl">
32 <div class="slxx_title title-block">
33 证书详情信息
34 <div class="triangle"></div>
35 </div>
36 <el-form :rules="rules" ref="ruleForm" label-width="120px">
37 <el-row>
38 <el-col :span="8">
39 <el-form-item label="权利人" prop="cyxm">
40 <el-input disabled v-model="bdcqz.qlr" maxlegth="15"></el-input>
41 </el-form-item>
42 </el-col>
43 <el-col :span="8">
44 <el-form-item label="义务人" prop="jtgxdm">
45 <el-input disabled v-model="bdcqz.qlr" maxlegth="15"></el-input>
46 </el-form-item>
47 </el-col>
48 <el-col :span="8">
49 <el-form-item label="坐落" prop="cbfdm">
50 <el-input disabled v-model="bdcqz.zl" maxlegth="15"></el-input>
51 </el-form-item>
52 </el-col>
53
54 </el-row>
55 <el-row>
56 <el-col :span="8">
57 <el-form-item label="不动产单元号" prop="cyxm">
58 <el-input disabled v-model="bdcqz.bdcdyh" maxlegth="15"></el-input>
59 </el-form-item>
60 </el-col>
61 <el-col :span="8">
62 <el-form-item label="印刷序列号" prop="jtgxdm">
63 <el-input disabled v-model="bdcqz.ysxlh" maxlegth="15"></el-input>
64 </el-form-item>
65 </el-col>
66 <el-col :span="8">
67 <el-form-item label="不动产权证号" prop="cbfdm">
68 <el-input disabled v-model="bdcqz.bdcqzh" maxlegth="15"></el-input>
69 </el-form-item>
70 </el-col>
71
72 </el-row>
73 </el-form>
74 <div class="slxx_title title-block">
75 缮证记录信息
76 <div class="triangle"></div>
77 </div>
78 <lb-table
79 class="sz"
80 :column="szxxtableData.columns"
81 heightNumSetting
82 :pagination="false"
83 :key="key"
84 :data="szxxtableData.data">
85 </lb-table>
86 <div class="slxx_title title-block">
87 发证记录信息
88 <div class="triangle"></div>
89 </div>
90 <lb-table
91 border
92 :column="tableDatas.columns"
93 :heightNum="100"
94 :data="tableDatas.data"
95 :pagination="false">
96 </lb-table>
97 </el-tab-pane>
98 <el-tab-pane label="电子证照" name="third"> 等一个照片 </el-tab-pane>
99 </el-tabs>
100 </div>
101 </template>
102
103 <script>
104 // import { zsyldatas } from "../../javascript/zsyl.js";
105 import { getSlsqBdcqzList } from "@/api/bdcqz.js";
106 import { getCertificateList } from "@/api/bdcqz.js";
107 import { getSzRecordList } from "@/api/bdcqz.js";
108 import { szxxdatas } from "../../javascript/szxxdatapart";
109 import { datas } from "../../javascript/fzxxdatapart";
110 export default {
111 name: "zsyl",
112 props: {
113 formData: {
114 type: Object,
115 default: {},
116 },
117 },
118 data () {
119 return {
120 key: 0,
121 noData: false,
122 imgSrc: require("@/image/bdcqz/bdcqzs2.jpg"),
123 bdczmSrc: require("@/image/bdcqz/bdczm.jpg"),
124 loading: false,
125 //印刷序列号集合
126 ysxlh: [],
127 //列名称对象
128 columns: [],
129 //选择的不动产权证文件
130 bdcqz: "",
131 //证书打开类型 是否需要展示打印按钮
132 isToPrint: false,
133 //tab切换栏数组
134 tabslist: [],
135 headTabBdcqz: [],
136 //tab选择绑定值
137 activeName: "zsyl",
138 //证书图片预览
139 previewImage: "",
140 ruleForm: {
141 bsmBdcqz: "",
142 szmc: "不动产权证书",
143 bsmBdcqz: "",
144 szzh: "",
145 ysxlh: "",
146 },
147 formdata: {},
148 szxxtableData: {
149 total: 0,
150 columns: szxxdatas.columns(),
151 data: [],
152 },
153 tableDatas: {
154 total: 0,
155 columns: datas.columns().fzgrid,
156 data: [],
157 },
158 };
159 },
160 mounted () {
161 this.queryClick();
162 this.query();
163 if (this.formData.bdcqz) {
164 //从缮证进入
165 this.bdcqz = this.formData.bdcqz;
166 } else {
167 //从按钮进入
168 this.getHeadTabBdcqz();
169 }
170 },
171 methods: {
172 /**
173 * @description: queryClick
174 * @author: miaofang
175 */
176 queryClick () {
177 this.formdata.bsmSlsq = this.formData.bsmSlsq;
178 getCertificateList(this.formdata).then((res) => {
179 if (res.code === 200) {
180 this.tableDatas.data = res.result ? res.result : [];
181 }
182 })
183 },
184 /**
185 * @description: query
186 * @author: miaofang
187 */
188 query () {
189 getSzRecordList({ bsmBdcqz: this.formData.bsmBdcqz }).then((res) => {
190 if (res.code == 200) {
191 this.szxxtableData.data = res.result;
192 this.key++;
193 }
194 })
195 },
196 /**
197 * @description: 获取证书内容
198 * @param {*} code
199 * @author: miaofang
200 */
201 getRowValue (code) {
202 var value = this.bdcqz[code];
203 return value;
204 },
205 /**
206 * @description: 获取受理申请下全部不动产权证
207 * @author: miaofang
208 */
209 getHeadTabBdcqz () {
210 this.loading = true;
211 getSlsqBdcqzList({ bsmSlsq: this.formData.bsmSlsq }).then((res) => {
212 if (res.code == 200) {
213 this.noData = true;
214 if (res.result && res.result.length > 0) {
215 this.bdcqz = res.result[0];
216 this.headTabBdcqz = res.result;
217 if (this.bdcqz.bdcqzlx == 1) {
218 this.drawTextOnImage();
219 } else {
220 this.drawTextzmImage();
221 }
222 }
223 }
224 this.loading = false;
225 });
226 },
227 /**
228 * @description: tab表头切换方法
229 * @param {*} e
230 * @author: miaofang
231 */
232 handleClick (tab, event) {
233 console.log(tab, event);
234 this.bdcqz = this.headTabBdcqz[0];
235 if (this.bdcqz.bdcqzlx == 1) {
236 this.drawTextOnImage();
237 } else {
238 this.drawTextzmImage();
239 }
240 },
241 /**
242 * @description: 不动产证书
243 * @author: miaofang
244 */
245 drawTextOnImage () {
246 function getByteLen (val) {
247 var len = 0;
248 if (!val) return len;
249 for (var i = 0; i < val.length; i++) {
250 var length = val.charCodeAt(i);
251 if (length >= 0 && length <= 128) {
252 len += 1;
253 } else {
254 len += 2;
255 }
256 }
257 return len;
258 }
259 const canvas = this.$refs.zs;
260 const context = canvas.getContext("2d");
261 const image = new Image();
262 image.onload = () => {
263 context.drawImage(image, 0, 0);
264 context.font = "18px 楷体";
265 context.fillStyle = "#000000";
266 context.fillText(this.bdcqz.sjjc ? this.bdcqz.sjjc : "", 60, 56);
267 context.fillText(this.bdcqz.djnd ? this.bdcqz.djnd : "", 113, 56);
268 context.fillText(this.bdcqz.sxqc ? this.bdcqz.sxqc : "", 180, 56);
269 context.fillText(this.bdcqz.sxh ? this.bdcqz.sxh : "", 370, 56);
270 context.fillText(this.bdcqz.qlr ? this.bdcqz.qlr : "", 129, 97);
271 context.fillText(this.bdcqz.gyqk ? this.bdcqz.gyqk : "", 129, 136);
272
273 this.bdcdyh =
274 this.bdcqz.bdcdyh.slice(0, 6) +
275 " " +
276 this.bdcqz.bdcdyh.slice(6, 12) +
277 " " +
278 this.bdcqz.bdcdyh.slice(12, 19) +
279 " " +
280 this.bdcqz.bdcdyh.slice(19, this.bdcqz.bdcdyh.length);
281 context.fillText(this.bdcdyh ? this.bdcdyh : "", 129, 223);
282
283 context.fillText(this.bdcqz.qllx ? this.bdcqz.qllx : "", 129, 263);
284 context.fillText(this.bdcqz.qlxz ? this.bdcqz.qlxz : "", 129, 303);
285 context.fillText(this.bdcqz.yt ? this.bdcqz.yt : "", 129, 346);
286 // context.fillText(this.bdcqz.mj ? this.bdcqz.mj : '', 129, 386);
287 let lines6 = this.bdcqz.mj ? this.bdcqz.mj.split(" ") : [];
288 if (getByteLen(this.bdcqz.mj) > 41) {
289 lines6.forEach((line, index) => {
290 const y = 378 + index * 27; // 每行文本的垂直位置
291 let currentLine = "";
292 let arr = [];
293 for (let word of line) {
294 const testLine = currentLine + word;
295 const lineWidth = context.measureText(testLine).width;
296 if (lineWidth <= 330) {
297 currentLine = testLine;
298 } else {
299 arr.push(currentLine);
300 currentLine = word;
301 }
302 }
303 arr.push(currentLine);
304 arr.forEach((line, index) => {
305 context.fillText(line, 129, y + index * 20); // 调整行高
306 });
307 });
308 } else {
309 lines6.forEach((line, index) => {
310 const y = 386 + index * 27; // 每行文本的垂直位置
311 let currentLine = "";
312 let arr = [];
313 for (let word of line) {
314 const testLine = currentLine + word;
315 const lineWidth = context.measureText(testLine).width;
316 if (lineWidth <= 330) {
317 currentLine = testLine;
318 } else {
319 arr.push(currentLine);
320 currentLine = word;
321 }
322 }
323 arr.push(currentLine);
324 arr.forEach((line, index) => {
325 context.fillText(line, 129, y + index * 20); // 调整行高
326 });
327 });
328 }
329 // 权利其他状态
330 let lines = this.bdcqz.qlqtzk ? this.bdcqz.qlqtzk.split("\n") : [];
331 for (let i = 0; i < lines.length; i++) {
332 let num = Math.ceil(getByteLen(lines[i]) / 38);
333 if (getByteLen(lines[i]) > 38) {
334 let currentLine = "";
335 let arr = [];
336 for (let word of lines[i]) {
337 const testLine = currentLine + word;
338 const lineWidth = context.measureText(testLine).width;
339 if (lineWidth <= 323) {
340 currentLine = testLine;
341 } else {
342 arr.push(currentLine);
343 currentLine = word;
344 }
345 }
346 arr.push(currentLine);
347 if (i > 0) {
348 arr.forEach((line, index) => {
349 context.fillText(
350 line,
351 129,
352 490 + 26 * (i - 1) + 4 * num + index * 14
353 ); // 调整行高
354 });
355 } else {
356 arr.forEach((line, index) => {
357 context.fillText(line, 129, 500 + 26 * (i - 1) + index * 14); // 调整行高
358 });
359 }
360 } else {
361 if (i > 0) {
362 context.fillText(
363 lines[i] ? lines[i] : "",
364 129,
365 500 + 4 * num + 24 * (i - 1)
366 );
367 } else {
368 context.fillText(
369 lines[i] ? lines[i] : "",
370 129,
371 505 + 24 * (i - 1)
372 );
373 }
374 }
375 }
376
377 let lines1 = this.bdcqz.fj ? this.bdcqz.fj.split("\n") : [];
378 lines1.forEach((line, index) => {
379 const y = 100 + index * 30; // 每行文本的垂直位置
380 let currentLine = "";
381 let arr = [];
382 for (let word of line) {
383 const testLine = currentLine + word;
384 const lineWidth = context.measureText(testLine).width;
385 if (lineWidth <= 395) {
386 currentLine = testLine;
387 } else {
388 arr.push(currentLine);
389 currentLine = word;
390 }
391 }
392 arr.push(currentLine);
393 arr.forEach((line, index) => {
394 context.fillText(line, 580, y + index * 30); // 调整行高
395 });
396 });
397 let lines3 = this.bdcqz.syqx ? this.bdcqz.syqx.split(" ") : [];
398 if (getByteLen(this.bdcqz.syqx) > 41) {
399 lines3.forEach((line, index) => {
400 const y = 423 + index * 27; // 每行文本的垂直位置
401 let currentLine = "";
402 let arr = [];
403 for (let word of line) {
404 const testLine = currentLine + word;
405 const lineWidth = context.measureText(testLine).width;
406 if (lineWidth <= 330) {
407 currentLine = testLine;
408 } else {
409 arr.push(currentLine);
410 currentLine = word;
411 }
412 }
413 arr.push(currentLine);
414 arr.forEach((line, index) => {
415 context.fillText(line, 129, y + index * 20); // 调整行高
416 });
417 });
418 } else {
419 lines3.forEach((line, index) => {
420 const y = 430 + index * 27; // 每行文本的垂直位置
421 let currentLine = "";
422 let arr = [];
423 for (let word of line) {
424 const testLine = currentLine + word;
425 const lineWidth = context.measureText(testLine).width;
426 if (lineWidth <= 315) {
427 currentLine = testLine;
428 } else {
429 arr.push(currentLine);
430 currentLine = word;
431 }
432 }
433 arr.push(currentLine);
434 arr.forEach((line, index) => {
435 context.fillText(line, 129, y + index * 20); // 调整行高
436 });
437 });
438 }
439
440 let lines2 = this.bdcqz.zl ? this.bdcqz.zl.split(" ") : [];
441 if (getByteLen(this.bdcqz.zl) > 41) {
442 lines2.forEach((line, index) => {
443 const y = 170 + index * 20; // 每行文本的垂直位置
444 let currentLine = "";
445 let arr = [];
446 for (let word of line) {
447 const testLine = currentLine + word;
448 const lineWidth = context.measureText(testLine).width;
449 if (lineWidth <= 336) {
450 currentLine = testLine;
451 } else {
452 arr.push(currentLine);
453 currentLine = word;
454 }
455 }
456 arr.push(currentLine);
457 arr.forEach((line, index) => {
458 context.fillText(line, 129, y + index * 20); // 调整行高
459 });
460 });
461 } else {
462 lines2.forEach((line, index) => {
463 const y = 180 + index * 20; // 每行文本的垂直位置
464 let currentLine = "";
465 let arr = [];
466 for (let word of line) {
467 const testLine = currentLine + word;
468 const lineWidth = context.measureText(testLine).width;
469 if (lineWidth <= 336) {
470 currentLine = testLine;
471 } else {
472 arr.push(currentLine);
473 currentLine = word;
474 }
475 }
476 arr.push(currentLine);
477 arr.forEach((line, index) => {
478 context.fillText(line, 129, y + index * 20); // 调整行高
479 });
480 });
481 }
482 };
483 image.src = this.imgSrc;
484 },
485 /**
486 * @description: 不动产证明
487 * @author: miaofang
488 */
489 drawTextzmImage () {
490 function getByteLen (val) {
491 var len = 0;
492 if (!val) return len;
493 for (var i = 0; i < val.length; i++) {
494 var length = val.charCodeAt(i);
495 if (length >= 0 && length <= 128) {
496 len += 1;
497 } else {
498 len += 2;
499 }
500 }
501 return len;
502 }
503
504 const canvas = this.$refs.zm;
505 const context = canvas.getContext("2d");
506 const image = new Image();
507 image.onload = () => {
508 context.drawImage(image, 0, 0);
509 context.font = "18px 楷体";
510 context.fillStyle = "#000000";
511 // ysxlh
512 context.fillText(this.bdcqz.ysxlh ? this.bdcqz.ysxlh : "", 280, 712);
513 // djsj
514 if (this.bdcqz.djsj) {
515 let djsjList = this.bdcqz.djsj.split(" ")[0].split("/");
516 context.fillText(djsjList[0] ? djsjList[0] : "", 327, 580);
517 context.fillText(djsjList[1] ? djsjList[1] : "", 393, 580);
518 context.fillText(djsjList[2] ? djsjList[2] : "", 443, 580);
519 }
520 context.fillText(this.bdcqz.sjjc ? this.bdcqz.sjjc : "", 620, 125);
521 context.fillText(this.bdcqz.djnd ? this.bdcqz.djnd : "", 665, 125);
522 context.fillText(this.bdcqz.sxqc ? this.bdcqz.sxqc : "", 750, 125);
523 context.fillText(this.bdcqz.sxh ? this.bdcqz.sxh : "", 960, 123);
524 context.fillText(
525 this.bdcqz.zmqlhsx ? this.bdcqz.zmqlhsx : "",
526 775,
527 180
528 );
529 context.fillText(this.bdcqz.qlr ? this.bdcqz.qlr : "", 775, 228);
530 // 义务人
531 context.fillText(this.bdcqz.ywr ? this.bdcqz.ywr : "", 775, 275);
532 // context.fillText(this.bdcqz.zl ? this.bdcqz.zl : '', 775, 325);
533
534 let lines2 = this.bdcqz.zl ? this.bdcqz.zl.split(" ") : [];
535 if (getByteLen(this.bdcqz.zl) > 41) {
536 lines2.forEach((line, index) => {
537 const y = 315 + index * 20; // 每行文本的垂直位置
538 let currentLine = "";
539 let arr = [];
540 for (let word of line) {
541 const testLine = currentLine + word;
542 const lineWidth = context.measureText(testLine).width;
543 if (lineWidth <= 295) {
544 currentLine = testLine;
545 } else {
546 arr.push(currentLine);
547 currentLine = word;
548 }
549 }
550 arr.push(currentLine);
551 arr.forEach((line, index) => {
552 context.fillText(line, 775, y + index * 20); // 调整行高
553 });
554 });
555 } else {
556 lines2.forEach((line, index) => {
557 const y = 325 + index * 20; // 每行文本的垂直位置
558 let currentLine = "";
559 let arr = [];
560 for (let word of line) {
561 const testLine = currentLine + word;
562 const lineWidth = context.measureText(testLine).width;
563 if (lineWidth <= 295) {
564 currentLine = testLine;
565 } else {
566 arr.push(currentLine);
567 currentLine = word;
568 }
569 }
570 arr.push(currentLine);
571 arr.forEach((line, index) => {
572 context.fillText(line, 775, y + index * 20); // 调整行高
573 });
574 });
575 }
576
577 // bdcdyh
578 this.bdcdyh =
579 this.bdcqz.bdcdyh.slice(0, 6) +
580 " " +
581 this.bdcqz.bdcdyh.slice(6, 12) +
582 " " +
583 this.bdcqz.bdcdyh.slice(12, 19) +
584 " " +
585 this.bdcqz.bdcdyh.slice(19, this.bdcqz.bdcdyh.length);
586 context.fillText(this.bdcdyh ? this.bdcdyh : "", 775, 373);
587 // qlqtzk
588 const maxWidth = 295; // 最大宽度限制
589 let lines = this.bdcqz.qlqtzk ? this.bdcqz.qlqtzk.split("\n") : [];
590 for (let i = 0; i < lines.length; i++) {
591 let num = Math.ceil(getByteLen(lines[i]) / 37);
592 if (getByteLen(lines[i]) > 37) {
593 let currentLine = "";
594 let arr = [];
595 for (let word of lines[i]) {
596 const testLine = currentLine + word;
597 const lineWidth = context.measureText(testLine).width;
598 if (lineWidth <= maxWidth) {
599 currentLine = testLine;
600 } else {
601 arr.push(currentLine);
602 currentLine = word;
603 }
604 }
605 arr.push(currentLine);
606 if (i > 0) {
607 arr.forEach((line, index) => {
608 context.fillText(
609 line,
610 770,
611 428 + 25 * (i - 1) + 5 * num + index * 15
612 ); // 调整行高
613 });
614 } else {
615 arr.forEach((line, index) => {
616 context.fillText(line, 770, 435 + 25 * (i - 1) + index * 14); // 调整行高
617 });
618 }
619 } else {
620 if (i > 0) {
621 context.fillText(
622 lines[i] ? lines[i] : "",
623 770,
624 440 + 5 * num + 24 * (i - 1)
625 );
626 } else {
627 context.fillText(
628 lines[i] ? lines[i] : "",
629 770,
630 440 + 24 * (i - 1)
631 );
632 }
633 }
634 }
635 // fj
636 let lines1 = this.bdcqz.fj ? this.bdcqz.fj.split("\n") : [];
637 for (let i = 0; i < lines1.length; i++) {
638 let num = Math.ceil(getByteLen(lines1[i]) / 37);
639 if (getByteLen(lines1[i]) > 37) {
640 let currentLine = "";
641 let arr = [];
642 for (let word of lines1[i]) {
643 const testLine = currentLine + word;
644 const lineWidth = context.measureText(testLine).width;
645 if (lineWidth <= maxWidth) {
646 currentLine = testLine;
647 } else {
648 arr.push(currentLine);
649 currentLine = word;
650 }
651 }
652 arr.push(currentLine);
653 if (i > 0) {
654 arr.forEach((line, index) => {
655 context.fillText(
656 line,
657 770,
658 610 + 25 * (i - 1) + 5 * num + index * 15
659 ); // 调整行高
660 });
661 } else {
662 arr.forEach((line, index) => {
663 context.fillText(line, 770, 610 + 25 * (i - 1) + index * 15); // 调整行高
664 });
665 }
666 } else {
667 if (i > 0) {
668 context.fillText(
669 lines1[i] ? lines1[i] : "",
670 770,
671 610 + 5 * num + 23 * (i - 1)
672 );
673 } else {
674 context.fillText(
675 lines1[i] ? lines1[i] : "",
676 770,
677 610 + 23 * (i - 1)
678 );
679 }
680 }
681 }
682 };
683
684 image.src = this.bdczmSrc;
685 },
686 },
687 computed: {
688 hdiffHeight () {
689 return 0;
690 // return this.headTabBdcqz.length > 1 ? 54 : 0
691 },
692 },
693 };
694 </script>
695 <style scoped lang="scss">
696 @import "~@/styles/mixin.scss";
697
698 .imgClass {
699 display: inline-block;
700 height: auto;
701 max-width: 100%;
702 }
703
704 .middle_padding {
705 padding-bottom: 10px;
706 }
707
708 .zsyl-button {
709 text-align: center;
710 margin-top: 20px;
711
712 .operation_button {
713 width: 100px;
714 border: 1px solid rgb(0, 121, 254);
715 }
716
717 .dy-button {
718 color: white;
719 background-color: rgb(0, 121, 254);
720 }
721 }
722
723 .table-column {
724 border-spacing: 1px;
725 width: 100%;
726
727 tr td {
728 border: 1px solid #ccc;
729 text-align: center;
730 height: 40px;
731 padding: 4px;
732 font-size: 13px;
733 background: rgb(251, 249, 229);
734 }
735 }
736
737 .zsyl-title {
738 background: #fafbe5;
739 text-align: center;
740 padding: 5px 0px;
741 font-size: 20px;
742 }
743
744 .no-data {
745 font-size: 18px;
746 display: flex;
747 text-align: center;
748 justify-content: center;
749 }
750 .el-tab-pane {
751 width: 1190px;
752 height: 670px;
753 overflow-y: auto;
754 }
755 .zsys {
756 width: 1180px;
757 height: 670px;
758 }
759 /deep/.el-table {
760 height: 100px !important;
761 }
762 // /deep/.sz {
763 // height: 340px !important;
764 // }
765 .el-form {
766 margin-top: 20px;
767 }
768 </style>
1 <!--
2 * @Description:
3 * @Autor: renchao
4 * @LastEditTime: 2023-07-17 13:51:29
5 -->
6 <template>
7 <lb-table :column="column" :maxHeight="200" :heightNumSetting="true" :pagination="false" :key="key" :data="tableData">
8 </lb-table>
9 </template>
10 <script>
11 import addQlr from './dialog/addQlr.vue'
12 import { mapGetters } from 'vuex'
13 export default {
14 components: {
15 addQlr
16 },
17 computed: {
18 ...mapGetters(["dictData"]),
19 },
20 props: {
21 tableData: {
22 type: Array,
23 default: function () {
24 return []
25 }
26 },
27 gyfs: {
28 type: String,
29 default: '1'
30 }
31 },
32 data () {
33 return {
34 key: 0,
35 dataIndex: 0,
36 dialog: false,
37 details: {},
38 tableDataList: [],
39 qlrCommonTable: [
40 {
41 label: '序号',
42 type: 'index',
43 width: '50',
44 render: (h, scope) => {
45 return (
46 <div>
47 {scope.$index + 1}
48 </div>
49 )
50 }
51 },
52 {
53 prop: "qlrmc",
54 label: "抵押权人"
55 },
56 {
57 prop: "ywrmc",
58 label: "抵押人"
59 },
60 {
61 prop: "bdcqzh",
62 label: "不动产登记证明号"
63 },
64 {
65 prop: "dyjelx",
66 label: "抵押金额类型"
67 },
68 {
69 prop: "dyfsmc",
70 label: "抵押方式"
71 },
72 {
73 prop: "qdjgmc",
74 label: "抵押金额"
75 },
76 {
77 prop: "qlmjmc",
78 label: "抵押面积1"
79 },
80 {
81 prop: "zwlxqssj",
82 label: "债务履行开始时间"
83 },
84 {
85 prop: "zwlxjssj",
86 label: "债务履行结束时间"
87 },
88 {
89 prop: "bdcdyh",
90 label: "不动产单元号"
91 },
92 {
93 prop: "zl",
94 label: "坐落"
95 },
96
97
98 ],
99 column: this.qlrCommonTable
100 }
101 },
102 watch: {
103 tableData: {
104 handler: function (val, oldVal) {
105 let that = this
106 if (val.length == 0 || !val) {
107 that.tableDataList = _.cloneDeep([{
108 sqrmc: '',
109 dlrzjlx: '',
110 dlrzjh: '',
111 fr: ''
112 }])
113 } else {
114 that.tableDataList = _.cloneDeep(val)
115 }
116 },
117 immediate: true,
118 deep: true
119 },
120 gyfs: {
121 handler (newVal, oldValue) {
122 let dataList = _.cloneDeep(this.qlrCommonTable)
123 if (newVal == '1') {
124 this.column = _.cloneDeep(dataList).slice(1, dataList.length)
125 } else if ((newVal == '2')) {
126 this.column = dataList
127 } else {
128 this.column = _.cloneDeep(dataList)
129 this.column.splice(
130 2, 0, {
131 prop: "qlbl",
132 label: "份数"
133 })
134 }
135 },
136 immediate: true
137 }
138 },
139 methods: {
140 }
141 }
142 </script>
143 <style scoped lang='scss'>
144 /deep/.el-table th {
145 height: 30px !important;
146 }
147 /deep/.el-table--small .el-table__cell {
148 padding: 5px;
149 }
150 </style>
1 <!--
2 * @Description: 房屋多幢明细
3 * @Autor:
4 * @LastEditTime: 2023-09-01 13:29:29
5 -->
6 <template>
7 <div>
8 <el-table
9 :data="tableDataList"
10 border
11 :pagination="false"
12 :key="key"
13 :header-cell-style="{ 'text-align': 'center' }"
14 :heightNumSetting="true"
15 :minHeight="150"
16 height="150"
17 style="width: 100%">
18 <el-table-column prop="index" width="50" :render-header="renderHeader">
19 <template slot-scope="scope">
20 <div style="text-align: center">{{ scope.$index + 1 }}</div>
21 </template>
22 </el-table-column>
23 <el-table-column prop="bdcdyh" label="不动产单元号" min-width="100">
24 <template slot-scope="scope">
25 <div style="text-align: center">{{ scope.row.bdcdyh }}</div>
26 </template>
27 </el-table-column>
28 <el-table-column prop="xmmc" label="项目名称" min-width="100">
29 <template slot-scope="scope">
30 <el-input
31 class="item"
32 :disabled="!ableOperation"
33 v-model="scope.row.xmmc"
34 placeholder="请输入内容"
35 @input="updaterow(scope.row)">
36 </el-input>
37 </template>
38 </el-table-column>
39 <el-table-column prop="fwxz" label="房屋性质" min-width="100">
40 <template slot-scope="scope">
41 <treeselect
42 v-model="scope.row.fwxz"
43 :disabled="!ableOperation"
44 noOptionsText="暂无数据"
45 placeholder=""
46 :show-count="true"
47 :options="dictData['A19']"
48 :normalizer="normalizer"
49 :appendToBody="true"
50 z-index="9999"
51 @input="updaterow(scope.row)" />
52 </template>
53 </el-table-column>
54 <el-table-column prop="ghyt" label="房屋用途" min-width="100">
55 <template slot-scope="scope">
56 <treeselect
57 v-model="scope.row.ghyt"
58 :disabled="!ableOperation"
59 noOptionsText="暂无数据"
60 placeholder=""
61 :show-count="true"
62 :options="dictData['A17']"
63 :normalizer="normalizer"
64 :appendToBody="true"
65 z-index="9999"
66 @input="updaterow(scope.row)" />
67 </template>
68 </el-table-column>
69 <el-table-column prop="fwjg" label="房屋结构" min-width="100">
70 <template slot-scope="scope">
71 <treeselect
72 v-model="scope.row.fwjg"
73 :disabled="!ableOperation"
74 noOptionsText="暂无数据"
75 placeholder=""
76 :show-count="true"
77 :options="dictData['A46']"
78 :normalizer="normalizer"
79 :appendToBody="true"
80 z-index="9999"
81 @input="updaterow(scope.row)" />
82 </template>
83 </el-table-column>
84 <el-table-column prop="jzmj" label="建筑面积" min-width="100">
85 <template slot-scope="scope">
86 <el-input
87 maxlength="12"
88 class="item"
89 :disabled="!ableOperation"
90 oninput="value = (value.match(/^\d*(\.?\d{0,2})/g)[0]) || null"
91 v-model="scope.row.jzmj"
92 placeholder="请输入内容"
93 @input="updaterow(scope.row)">
94 </el-input>
95 </template>
96 </el-table-column>
97 <el-table-column prop="jgsj" label="竣工时间" min-width="100">
98 <template slot-scope="scope">
99 <el-date-picker
100 v-model="scope.row.jgsj"
101 type="date"
102 :disabled="!ableOperation"
103 placeholder="选择日期"
104 value-format="yyyy-MM-dd HH:mm:ss"
105 format="yyyy-MM-dd"
106 @input="updaterow(scope.row)">
107 </el-date-picker>
108 </template>
109 </el-table-column>
110 <el-table-column prop="zcs" label="总层数" min-width="100">
111 <template slot-scope="scope">
112 <el-input
113 class="item"
114 :disabled="!ableOperation"
115 oninput="value = (value.match(/^\d*(\.?\d{0,2})/g)[0]) || null"
116 v-model="scope.row.zcs"
117 placeholder="请输入内容"
118 @input="updaterow(scope.row)">
119 </el-input>
120 </template>
121 </el-table-column>
122 <el-table-column prop="zts" label="总套数" min-width="100">
123 <template slot-scope="scope">
124 <el-input
125 class="item"
126 :disabled="!ableOperation"
127 oninput="value = (value.match(/^\d*(\.?\d{0,2})/g)[0]) || null"
128 v-model="scope.row.zts"
129 placeholder="请输入内容"
130 @input="updaterow(scope.row)">
131 </el-input>
132 </template>
133 </el-table-column>
134 </el-table>
135 </div>
136 </template>
137 <script>
138 import { mapGetters } from "vuex";
139
140 export default {
141 computed: {
142 ...mapGetters(["dictData"]),
143 },
144 props: {
145 tableData: {
146 type: Array,
147 default: function () {
148 return [];
149 },
150 },
151 ableOperation: {
152 type: Boolean,
153 default: false,
154 },
155
156 },
157 data () {
158 return {
159 // 键名转换,方法默认是label和children进行树状渲染
160 key: 0,
161 tableDataList: [],
162 normalizer (node) {
163 if (node.children == null || node.children == "null") {
164 delete node.children;
165 }
166 return {
167 id: node.dcode,
168 label: node.dname,
169 children: node.children,
170 };
171 },
172 };
173 },
174 mounted () {
175 },
176 watch: {
177 tableData: {
178 handler: function (val, oldVal) {
179 let that = this;
180 this.$nextTick(() => {
181 if (val.length == 0 || !val) {
182 that.tableDataList = _.cloneDeep([
183 {
184 yt: null,
185 qssj: "",
186 jssj: "",
187 tdsyqx: "",
188 },
189 ]);
190 } else {
191 that.tableDataList = _.cloneDeep(val);
192 }
193 });
194 },
195 immediate: true,
196 deep: true,
197 },
198 },
199 methods: {
200 /**
201 * @description: renderHeader
202 * @author: renchao
203 */
204 renderHeader () {
205 return (
206 <div>
207 {"序号"}
208 </div>
209 );
210 },
211 updaterow (a) {
212 this.$emit("updateFdcwxmList", this.tableDataList);
213 }
214 }
215 }
216 </script>
217 <style scoped lang="scss">
218 .el-input {
219 border: none !important;
220 }
221
222 /deep/ .el-table__row {
223 border: none !important;
224 }
225
226 .el-date-editor.el-input {
227 width: 100%;
228 }
229
230 /deep/ .el-table th {
231 height: 30px !important;
232 }
233 </style>
234
1 <!--
2 * @Description:
3 * @Autor: renchao
4 * @LastEditTime: 2023-07-28 16:28:43
5 -->
6 <template>
7 <div class="from-clues">
8 <!-- 发证信息 -->
9 <div class="from-clues-header">
10 <el-form :model="ruleForm">
11 <el-row :gutter="20">
12 <el-col :span="6">
13 <el-form-item label="印刷序列号">
14 <el-input v-model="ruleForm.ysxlh" clearable placeholder="请输入印刷序列号"></el-input>
15 </el-form-item>
16 </el-col>
17 <el-col :span="6">
18 <el-form-item label="证书号">
19 <el-input v-model="ruleForm.zsh" clearable placeholder="请输入证书号"></el-input>
20 </el-form-item>
21 </el-col>
22 <el-col :span="6">
23 <el-form-item label="权利人">
24 <el-input v-model="ruleForm.qlr" clearable placeholder="请输入权利人"></el-input>
25 </el-form-item>
26 </el-col>
27 <el-col :span="6" class="btnColRight" v-if="viewEdit">
28 <el-form-item>
29 <el-button type="primary" icon="el-icon-search" @click="handleSearch">查询</el-button>
30 <el-button type="primary" icon="el-icon-search" @click="zslqClick">证书领取</el-button>
31 </el-form-item>
32 </el-col>
33 </el-row>
34 </el-form>
35 </div>
36 <div class="from-clues-content">
37 <lb-table border :column="tableData.columns" :heightNum="210" :data="tableData.data" :pagination="false">
38 </lb-table>
39 </div>
40 </div>
41 </template>
42 <script>
43 import { mapGetters } from 'vuex'
44 import store from '@/store/index.js'
45 import table from "@/utils/mixin/table";
46 import { datas } from "../javascript/fzxxdata";
47 import { getCertificateList } from "@/api/bdcqz.js";
48 export default {
49 mixins: [table],
50 data () {
51 return {
52 //表单是否可操作
53 viewEdit: false,
54 ruleForm: {
55 ysxlh: '',
56 zsh: '',
57 qlr: '',
58 bsmSldy: ''
59 },
60 tableData: {
61 total: 0,
62 columns: datas.columns().fzgrid,
63 data: []
64 },
65 dialogVisible: false
66 }
67 },
68 created () {
69 this.viewEdit = this.$parent.currentSelectTab.ableOperation
70 },
71 computed: {
72 ...mapGetters(['workFresh'])
73 },
74 watch: {
75 workFresh: {
76 handler (newVal, oldVal) {
77 if (newVal) this.queryClick()
78 }
79 }
80 },
81 methods: {
82 /**
83 * @description: queryClick
84 * @author: renchao
85 */
86 queryClick () {
87 this.ruleForm.bsmSlsq = this.$route.query.bsmSlsq;
88 getCertificateList(this.ruleForm).then(res => {
89 if (res.code === 200) {
90 this.tableData.data = res.result ? res.result : []
91 }
92 })
93 },
94 /**
95 * @description:
96 * @author: renchao
97 */
98 zslqClick () {
99 store.dispatch('user/reWorkFresh', false)
100 this.$popupDialog("不动产权证领取", "workflow/components/dialog/zslq", {}, '80%', true)
101 }
102 }
103 }
104 </script>
105 <style scoped lang='scss'>
106 @import "~@/styles/public.scss";
107 </style>
1 <!--
2 * @Description:
3 * @Autor: renchao
4 * @LastEditTime: 2023-05-17 10:41:15
5 -->
6 <template>
7 <div>
8 <div class="process-viewer">
9 <div
10 v-show="!isLoading"
11 ref="processCanvas"
12 class="process-canvas"
13 style="height: 280px"
14 />
15 <!-- 自定义箭头样式,用于成功状态下流程连线箭头 -->
16 <defs ref="customSuccessDefs">
17 <marker
18 id="sequenceflow-end-white-success"
19 view-box="0 0 20 20"
20 ref-x="11"
21 ref-y="10"
22 marker-width="10"
23 marker-height="10"
24 orient="auto"
25 >
26 <path
27 class="success-arrow"
28 d="M 1 5 L 11 10 L 1 15 Z"
29 style="
30 stroke-width: 1px;
31 stroke-linecap: round;
32 stroke-dasharray: 10000, 1;
33 "
34 />
35 </marker>
36 <marker
37 id="conditional-flow-marker-white-success"
38 view-box="0 0 20 20"
39 ref-x="-1"
40 ref-y="10"
41 marker-width="10"
42 marker-height="10"
43 orient="auto"
44 >
45 <path
46 class="success-conditional"
47 d="M 0 10 L 8 6 L 16 10 L 8 14 Z"
48 style="
49 stroke-width: 1px;
50 stroke-linecap: round;
51 stroke-dasharray: 10000, 1;
52 "
53 />
54 </marker>
55 </defs>
56 <!-- 自定义箭头样式,用于失败状态下流程连线箭头 -->
57 <defs ref="customFailDefs">
58 <marker
59 id="sequenceflow-end-white-fail"
60 view-box="0 0 20 20"
61 ref-x="11"
62 ref-y="10"
63 marker-width="10"
64 marker-height="10"
65 orient="auto"
66 >
67 <path
68 class="fail-arrow"
69 d="M 1 5 L 11 10 L 1 15 Z"
70 style="
71 stroke-width: 1px;
72 stroke-linecap: round;
73 stroke-dasharray: 10000, 1;
74 "
75 />
76 </marker>
77 <marker
78 id="conditional-flow-marker-white-fail"
79 view-box="0 0 20 20"
80 ref-x="-1"
81 ref-y="10"
82 marker-width="10"
83 marker-height="10"
84 orient="auto"
85 >
86 <path
87 class="fail-conditional"
88 d="M 0 10 L 8 6 L 16 10 L 8 14 Z"
89 style="
90 stroke-width: 1px;
91 stroke-linecap: round;
92 stroke-dasharray: 10000, 1;
93 "
94 />
95 </marker>
96 </defs>
97
98 <div style="position: absolute; top: 0px; left: 0px; width: 100%">
99 <el-row type="flex" justify="end">
100 <el-button-group key="scale-control" size="medium">
101 <el-button
102 size="medium"
103 type="default"
104 :plain="true"
105 :disabled="defaultZoom <= 0.3"
106 icon="el-icon-zoom-out"
107 @click="processZoomOut()"
108 />
109 <el-button size="medium" type="default" style="width: 90px">{{
110 Math.floor(this.defaultZoom * 10 * 10) + "%"
111 }}</el-button>
112 <el-button
113 size="medium"
114 type="default"
115 :plain="true"
116 :disabled="defaultZoom >= 3.9"
117 icon="el-icon-zoom-in"
118 @click="processZoomIn()"
119 />
120 <el-button
121 size="medium"
122 type="default"
123 icon="el-icon-c-scale-to-original"
124 @click="processReZoom()"
125 />
126 <slot />
127 </el-button-group>
128 </el-row>
129 </div>
130 </div>
131 <!-- 已完成节点悬浮弹窗 -->
132 <div class="information-list">
133 <el-select v-model="selectValue" @change="handleSelect">
134 <el-option
135 v-for="item in selectOptions"
136 :key="item.value"
137 :label="item.label"
138 :value="item.value"
139 >
140 </el-option>
141 </el-select>
142 <div class="cutline">
143 <p class="cutlines">图例</p>
144 <div v-for="item in cutlinelist" :key="item.value" class="concent" :style="{ backgroundColor: item.backgroundColor,borderColor:item.color }">
145 {{item.value}}
146 </div>
147 </div>
148 <el-table
149 height="190"
150 :data="taskCommentList"
151 size="mini"
152 border
153 header-cell-class-name="table-header-gray"
154 >
155 <el-table-column
156 label="序号"
157 header-align="center"
158 align="center"
159 type="index"
160 width="55px"
161 />
162 <el-table-column
163 label="转入时间"
164 prop="createTime"
165 :formatter="formatDate"
166 width="160"
167 align="center"
168 />
169 <el-table-column
170 label="认领时间"
171 prop="claimTime"
172 :formatter="formatDate"
173 width="160"
174 align="center"
175 />
176 <el-table-column
177 label="转出时间"
178 prop="endTime"
179 :formatter="formatDate"
180 width="160"
181 align="center"
182 />
183 <el-table-column label="操作方式" prop="controls" align="center" />
184 <el-table-column label="意见" prop="idea" align="center" />
185 </el-table>
186 </div>
187 </div>
188 </template>
189 <script>
190 import "@/styles/package/theme/index.scss";
191 import BpmnViewer from "bpmn-js/lib/Viewer";
192 import MoveCanvasModule from "diagram-js/lib/navigation/movecanvas";
193 export default {
194 props: {
195 formData: {
196 type: Object,
197 default: {},
198 },
199 },
200 data() {
201 return {
202 dlgTitle: undefined,
203 defaultZoom: 1,
204 // 是否正在加载流程图
205 isLoading: true,
206 bpmnViewer: undefined,
207 // 已完成流程元素
208 processNodeInfo: undefined,
209 // 当前任务id
210 selectTaskId: undefined,
211 // 任务节点审批记录
212 taskList: [],
213 taskCommentList: [],
214 // 已完成任务悬浮延迟Timer
215 hoverTimer: null,
216 // 下拉
217 selectValue: "",
218 selectOptions: [],
219 cutlinelist:[
220 {
221 value: "完成节点",
222 color: "#4eb819",
223 backgroundColor :"rgba(78, 184, 25,0.2)"
224 },
225 {
226 value: "当前节点",
227 color: "#409EFF",
228 backgroundColor :"rgba(64, 158, 255,0.2)"
229 },
230 {
231 value: "挂起节点",
232 color: "#E6A23C",
233 backgroundColor :"rgba(230, 162, 60,0.2)"
234 },
235 {
236 value: "阻塞节点",
237 color: "#F56C6C",
238 backgroundColor :"rgb(245, 108, 108,0.2)"
239 },
240 {
241 value: "未激活节点",
242 color: "#000000",
243 backgroundColor :"none",
244 }
245 ],
246 };
247 },
248 created() {
249 this.$nextTick(() => {
250 // 获取流程记录
251 this.getCommentList();
252 this.setProcessStatus(this.formData.finishedInfo);
253 this.importXML(this.formData.xml);
254 });
255 },
256 destroyed() {
257 this.clearViewer();
258 },
259 methods: {
260 /**
261 * @description: formatDate
262 * @param {*} row
263 * @param {*} column
264 * @author: renchao
265 */
266 formatDate(row, column) {
267 let data = row[column.property];
268 if (data == null) {
269 return null;
270 }
271 let dt = new Date(data);
272 return (
273 dt.getFullYear() +
274 "-" +
275 (dt.getMonth() + 1) +
276 "-" +
277 dt.getDate() +
278 " " +
279 dt.getHours() +
280 ":" +
281 dt.getMinutes() +
282 ":" +
283 dt.getSeconds()
284 );
285 },
286 /**
287 * @description: processReZoom
288 * @author: renchao
289 */
290 processReZoom() {
291 this.defaultZoom = 1;
292 this.bpmnViewer.get("canvas").zoom("fit-viewport", "auto");
293 },
294 /**
295 * @description: processZoomIn
296 * @param {*} zoomStep
297 * @author: renchao
298 */
299 processZoomIn(zoomStep = 0.1) {
300 const newZoom = Math.floor(this.defaultZoom * 100 + zoomStep * 100) / 100;
301 if (newZoom > 4) {
302 throw new Error(
303 "[Process Designer Warn ]: The zoom ratio cannot be greater than 4"
304 );
305 }
306 this.defaultZoom = newZoom;
307 this.bpmnViewer.get("canvas").zoom(this.defaultZoom);
308 },
309 /**
310 * @description: processZoomOut
311 * @param {*} zoomStep
312 * @author: renchao
313 */
314 processZoomOut(zoomStep = 0.1) {
315 const newZoom = Math.floor(this.defaultZoom * 100 - zoomStep * 100) / 100;
316 if (newZoom < 0.2) {
317 throw new Error(
318 "[Process Designer Warn ]: The zoom ratio cannot be scss than 0.2"
319 );
320 }
321 this.defaultZoom = newZoom;
322 this.bpmnViewer.get("canvas").zoom(this.defaultZoom);
323 },
324 /**
325 * @description: getOperationTagType
326 * @param {*} type
327 * @author: renchao
328 */
329 getOperationTagType(type) {
330 return "success";
331 },
332 // 流程图预览清空
333 /**
334 * @description: 流程图预览清空
335 * @param {*} e
336 * @author: renchao
337 */
338 clearViewer(a) {
339 if (this.$refs.processCanvas) {
340 this.$refs.processCanvas.innerHTML = "";
341 }
342 if (this.bpmnViewer) {
343 this.bpmnViewer.destroy();
344 }
345 this.bpmnViewer = null;
346 },
347 // 添加自定义箭头
348 /**
349 * @description: 添加自定义箭头
350 * @author: renchao
351 */
352 addCustomDefs() {
353 const canvas = this.bpmnViewer.get("canvas");
354 const svg = canvas._svg;
355 const customSuccessDefs = this.$refs.customSuccessDefs;
356 const customFailDefs = this.$refs.customFailDefs;
357 svg.appendChild(customSuccessDefs);
358 svg.appendChild(customFailDefs);
359 },
360 // 任务悬浮弹窗
361 /**
362 * @description: 任务悬浮弹窗
363 * @param {*} element
364 * @author: renchao
365 */
366 onSelectElement(element) {
367 this.selectTaskId = undefined;
368 this.dlgTitle = undefined;
369 let allfinishedTaskSet = [
370 ...this.processNodeInfo.finishedTaskSet,
371 ...this.processNodeInfo.unfinishedTaskSet,
372 ];
373 if (this.processNodeInfo == null || allfinishedTaskSet == null) return;
374 if (element == null || allfinishedTaskSet.indexOf(element.id) === -1) {
375 return;
376 }
377 this.selectTaskId = element.id;
378 this.selectValue = element.id;
379 this.dlgTitle = element.businessObject
380 ? element.businessObject.name
381 : undefined;
382 // 计算当前悬浮任务审批记录,如果记录为空不显示弹窗
383 this.taskCommentList = (this.taskList || []).filter((item) => {
384 return item.taskDefinitionKey === this.selectTaskId;
385 });
386 if (this.taskCommentList.length == 0) {
387 this.taskCommentList = this.taskList;
388 }
389 },
390 // 下拉列表切换
391 /**
392 * @description: 下拉列表切换
393 * @param {*} val
394 * @author: renchao
395 */
396 handleSelect(val) {
397 this.taskCommentList = (this.taskList || []).filter((item) => {
398 return item.taskDefinitionKey === val;
399 });
400 if (this.taskCommentList.length == 0) {
401 this.taskCommentList = this.taskList;
402 }
403 },
404 // 显示流程图
405 /**
406 * @description: 显示流程图
407 * @param {*} xml
408 * @author: renchao
409 */
410 async importXML(xml) {
411 let xmlData = this.$x2js.xml2js(xml).definitions.process;
412 this.selectOptions = xmlData.userTask.map((item) => {
413 return { value: item._id, label: item._name };
414 });
415 this.selectOptions = [
416 { value: xmlData.startEvent._id, label: "浏览记录" },
417 ...this.selectOptions,
418 ];
419 this.selectOptions = this.selectOptions
420 .map((item) => {
421 if (this.formData.finishedInfo.finishedTaskSet.includes(item.value)) {
422 return item;
423 }
424 if (
425 this.formData.finishedInfo.unfinishedTaskSet.includes(item.value)
426 ) {
427 return item;
428 }
429 })
430 .filter(Boolean);
431 this.selectValue = xmlData.startEvent._id;
432 this.clearViewer("a");
433 if (xml != null && xml !== "") {
434 try {
435 this.bpmnViewer = new BpmnViewer({
436 additionalModules: [
437 // 移动整个画布
438 MoveCanvasModule,
439 ],
440 container: this.$refs.processCanvas,
441 });
442 // 任务节点悬浮事件
443 this.bpmnViewer.on("element.click", ({ element }) => {
444 this.onSelectElement(element);
445 });
446 await this.bpmnViewer.importXML(xml);
447 this.isLoading = true;
448 this.addCustomDefs();
449 } catch (e) {
450 this.clearViewer("b");
451 } finally {
452 this.isLoading = false;
453 this.setProcessStatus(this.processNodeInfo);
454 this.$nextTick(() => {
455 this.processReZoom();
456 });
457 }
458 }
459 },
460 // 获取流程记录
461 /**
462 * @description: 获取流程记录
463 * @author: renchao
464 */
465 getCommentList() {
466 this.formData.allCommentList.forEach(async (item, index) => {
467 // item.comments.forEach(element => {
468 // if(element.type=="COMPLETE"){
469 // this.formData.allCommentList[index].idea=element.message
470 // this.formData.allCommentList[index].controls="完成"
471 // }
472 // });
473 let type = item.comments[item.comments.length - 1].type;
474 this.formData.allCommentList[index].idea =
475 item.comments[item.comments.length - 1].message;
476 // 操作方式
477 let controls = "";
478 // 正在办理
479 // 已完结
480 // 已退回
481 switch (type) {
482 case "COMPLETE":
483 controls = "完成";
484 break;
485 case "CLAIM":
486 controls = "完成";
487 break;
488 case "ASSIGN":
489 controls = "转办";
490 break;
491 case "DELEGATE":
492 controls = "委派";
493 break;
494 case "UNCLAIM":
495 controls = "取消认领";
496 break;
497 case "STOP":
498 controls = "终止";
499 break;
500 case "BACK":
501 controls = "退回";
502 break;
503 }
504 this.formData.allCommentList[index].controls = controls;
505 this.formData.allCommentList[index].agent = item.assignee.name;
506 });
507 this.formData.handlinglist.forEach(async (item, index) => {
508 if (item.assignee.name) {
509 this.formData.handlinglist[index].agent = item.assignee.name;
510 } else {
511 let str = "";
512 item.countersign.forEach((item) => {
513 str += item.name + ",";
514 });
515 str = str.slice(0, -1);
516 this.formData.allCommentList[index].agent = str;
517 }
518 });
519 this.taskList = [
520 ...this.formData.allCommentList,
521 ...this.formData.handlinglist,
522 ];
523 // this.taskList =this.formData.allCommentList;
524 // 处理数据之后赋值
525 this.taskCommentList = this.taskList;
526 this.taskCommentList = this.taskCommentList.sort(this.sortDownDate);
527 },
528 /**
529 * 时间排序函数
530 * @description: formatDate
531 * @param {*} row
532 * @param {*} column
533 * @author: renchao
534 */
535
536 sortDownDate(a, b) {
537 return Date.parse(a.createTime) - Date.parse(b.createTime);
538 },
539 // 设置流程图元素状态
540 /**
541 * @description: 设置流程图元素状态
542 * @param {*} processNodeInfo
543 * @author: renchao
544 */
545 setProcessStatus(processNodeInfo) {
546 this.processNodeInfo = processNodeInfo;
547 if (
548 this.isLoading ||
549 this.processNodeInfo == null ||
550 this.bpmnViewer == null
551 )
552 return;
553 const {
554 finishedTaskSet,
555 rejectedTaskSet,
556 unfinishedTaskSet,
557 finishedSequenceFlowSet,
558 } = this.processNodeInfo;
559 const canvas = this.bpmnViewer.get("canvas");
560 const elementRegistry = this.bpmnViewer.get("elementRegistry");
561 if (Array.isArray(finishedSequenceFlowSet)) {
562 finishedSequenceFlowSet.forEach((item) => {
563 if (item != null) {
564 canvas.addMarker(item, "success");
565 const element = elementRegistry.get(item);
566 const conditionExpression =
567 element.businessObject.conditionExpression;
568 if (conditionExpression) {
569 canvas.addMarker(item, "condition-expression");
570 }
571 }
572 });
573 }
574 if (Array.isArray(finishedTaskSet)) {
575 finishedTaskSet.forEach((item) => canvas.addMarker(item, "success"));
576 }
577 if (Array.isArray(unfinishedTaskSet)) {
578 unfinishedTaskSet.forEach((item) => canvas.addMarker(item, "primary"));
579 }
580 if (Array.isArray(rejectedTaskSet)) {
581 rejectedTaskSet.forEach((item) => {
582 if (item != null) {
583 const element = elementRegistry.get(item);
584 if (element.type.includes("Task")) {
585 canvas.addMarker(item, "danger");
586 } else {
587 canvas.addMarker(item, "warning");
588 }
589 }
590 });
591 }
592 },
593 },
594 };
595 </script>
596 <style scoped lang="scss">
597 .information-list {
598 height: 220px;
599 margin-top: 10px;
600
601 p {
602 font-size: 16px;
603 line-height: 24px;
604 }
605 }
606 /deep/.bjs-powered-by {
607 display: none;
608 }
609 // /deep/.information-list {
610 // height: 170px;
611 // overflow: visible;
612 // }
613 .cutline {
614
615 float: right;
616 width: 30%;
617 height: 30px;
618 display: flex;
619 margin-right: 30px;
620 justify-content: space-between;
621 .cutlines{
622 line-height: 30px;
623 font-weight: 600;
624 margin-right: 50px;
625 }
626 .concent{
627 line-height: 30px;
628 line-height: 14px;
629 text-align: center;
630 align-items: center;
631 margin: auto;
632 padding: 3px;
633 border-radius: 4px;
634 border:1px solid #fff;
635 }
636
637 }
638 </style>
1 <!--
2 * @Description:
3 * @Autor: renchao
4 * @LastEditTime: 2023-07-17 13:50:53
5 -->
6 <template>
7 <lb-table :column="column" :maxHeight="200" :heightNumSetting="true" :pagination="false" :key="key" :data="tableData">
8 </lb-table>
9 </template>
10 <script>
11 import addQlr from './dialog/addQlr.vue'
12 import { mapGetters } from 'vuex'
13 export default {
14 components: {
15 addQlr
16 },
17 computed: {
18 ...mapGetters(["dictData"]),
19 },
20 props: {
21 tableData: {
22 type: Array,
23 default: function () {
24 return []
25 }
26 },
27 gyfs: {
28 type: String,
29 default: '1'
30 }
31 },
32 data () {
33 return {
34 key: 0,
35 dataIndex: 0,
36 dialog: false,
37 details: {},
38 tableDataList: [],
39 qlrCommonTable: [
40 {
41 label: '序号',
42 type: 'index',
43 width: '50',
44 render: (h, scope) => {
45 return (
46 <div>
47 {scope.$index + 1}
48 </div>
49 )
50 }
51 },
52 // {
53 // prop: "bdcdyh",
54 // label: "不动产单元号"
55 // },
56 {
57 prop: "zl",
58 label: "坐落"
59 },
60 {
61 prop: "shbw",
62 label: "室号部位"
63 },
64 {
65 prop: "fwxzmc",
66 label: "房屋性质"
67 },
68 {
69 prop: "sjc",
70 label: "层号"
71 },
72 {
73 prop: "jzmj",
74 label: "建筑面积"
75 },
76 {
77 prop: "fwlxmc",
78 label: "房屋类型"
79 },
80 {
81 prop: "showfwyt",
82 label: "房屋用途"
83 },
84 {
85 prop: "showfwjg",
86 label: "房屋结构"
87 },
88 ],
89 column: this.qlrCommonTable
90 }
91 },
92 watch: {
93 tableData: {
94 handler: function (val, oldVal) {
95 let that = this;
96 if (val.length == 0 || !val) {
97 } else {
98 that.tableDataList = _.cloneDeep(val)
99 }
100 },
101 immediate: true,
102 deep: true
103 },
104 gyfs: {
105 handler (newVal, oldValue) {
106 let dataList = _.cloneDeep(this.qlrCommonTable)
107 if (newVal == '1') {
108 this.column = _.cloneDeep(dataList).slice(1, dataList.length)
109 } else if ((newVal == '2')) {
110 this.column = dataList
111 } else {
112 this.column = _.cloneDeep(dataList)
113 this.column.splice(
114 2, 0, {
115 prop: "qlbl",
116 label: "份数"
117 })
118 }
119 },
120 immediate: true
121 }
122 },
123 methods: {
124 }
125 }
126 </script>
127 <style scoped lang="scss">
128 /deep/.el-table th {
129 height: 30px !important;
130 }
131 /deep/.el-table--small .el-table__cell {
132 padding: 5px;
133 }
134 </style>
135
1 <!--
2 * @Description:
3 * @Autor: renchao
4 * @LastEditTime: 2023-09-14 17:19:26
5 -->
6 <template>
7 <div class="slxx sdqxx">
8 <el-form
9 :model="ruleForm"
10 ref="ruleForm"
11 v-Loading="loading"
12 :label-position="flag ? 'top' : ''"
13 :inline="flag"
14 label-width="130px">
15 <div class="slxx_con" :class="flag ? 'formMarginBot0' : ''">
16 <div class="slxx_title title-block">
17 电力信息
18 <div class="triangle"></div>
19 </div>
20 <el-row :gutter="10">
21 <el-col :span="8">
22 <el-form-item label="服务代码:">
23 <el-input v-model="ruleForm.serviceCode"></el-input>
24 </el-form-item>
25 </el-col>
26 <el-col :span="8">
27 <el-form-item label="行政区划区县代码:">
28 <el-input v-model="ruleForm.areacode"></el-input>
29 </el-form-item>
30 </el-col>
31 <el-col :span="8">
32 <el-form-item label="登记系统业务号:">
33 <el-input v-model="ruleForm.ywh"></el-input>
34 </el-form-item>
35 </el-col>
36 </el-row>
37
38 <el-row :gutter="10">
39 <el-col :span="8">
40 <el-form-item label="推送日期:">
41 <el-input v-model="ruleForm.SENDTIME"></el-input>
42 </el-form-item>
43 </el-col>
44 <el-col :span="8">
45 <el-form-item label="原户主姓名:">
46 <el-input v-model="ruleForm.mcOld"></el-input>
47 </el-form-item>
48 </el-col>
49 <el-col :span="8">
50 <el-form-item label="原户主身份证号码:">
51 <el-input v-model="ruleForm.zjhmOld"></el-input>
52 </el-form-item>
53 </el-col>
54 </el-row>
55 <el-row :gutter="10">
56 <el-col :span="8">
57 <el-form-item label="原户主联系电话:">
58 <el-input v-model="ruleForm.lxdhOld"></el-input>
59 </el-form-item>
60 </el-col>
61 <el-col :span="8">
62 <el-form-item label="新户主姓名:">
63 <el-input v-model="ruleForm.mcNew"></el-input>
64 </el-form-item>
65 </el-col>
66 <el-col :span="8">
67 <el-form-item label="新户主身份证号码:">
68 <el-input v-model="ruleForm.zjhmNew"></el-input>
69 </el-form-item>
70 </el-col>
71 </el-row>
72 <el-row :gutter="10">
73 <el-col :span="8">
74 <el-form-item label="新户主联系电话:">
75 <el-input v-model="ruleForm.lxdhNew"></el-input>
76 </el-form-item>
77 </el-col>
78 <el-col :span="8">
79 <el-form-item label="房产证编号:">
80 <el-input v-model="ruleForm.fczbh"></el-input>
81 </el-form-item>
82 </el-col>
83 <el-col :span="8">
84 <el-form-item label="是否过户:">
85 <el-switch
86 v-model="ruleForm.sfgh"
87 :active-value='1'
88 active-text="是"
89 :inactive-value="0"
90 inactive-text="否">
91 </el-switch>
92 </el-form-item>
93 </el-col>
94
95 </el-row>
96 <el-row :gutter="10">
97 <el-col :span="24">
98 <el-form-item label="房屋坐落(地址):">
99 <el-input v-model="ruleForm.fwzl" type="textarea"
100 :rows="2"></el-input>
101 </el-form-item>
102 </el-col>
103 </el-row>
104 <el-row class="btn" v-if="viewEdit">
105 <el-form-item>
106 <el-button type="primary" @click="onSubmit">保存</el-button>
107 </el-form-item>
108 </el-row>
109 </div>
110 </el-form>
111 </div>
112 </template>
113 <script>
114 import { mapGetters } from "vuex";
115 import { getDlxxByBsmSldy, saveOrUpdateDlxx } from "@/api/sfxx.js";
116 export default {
117 computed: {
118 ...mapGetters(["dictData", "flag"]),
119 },
120 mounted () {
121 // this.loading = true
122 this.viewEdit = this.$parent.currentSelectTab.ableOperation;
123 this.propsParam = this.$attrs;
124 var formdata = new FormData();
125 formdata.append("bsmSldy", this.propsParam.bsmSldy);
126 formdata.append("djlx", this.propsParam.djlx);
127 formdata.append("isEdit", this.viewEdit);
128 console.log(this.propsParam)
129 this.getDlxxByBsmSldy()
130 },
131 data () {
132 return {
133 loading: false,
134 //表单是否可操作
135 viewEdit: false,
136 ruleForm: {
137 SFGH: 1
138 }
139 }
140 },
141 methods: {
142 getDlxxByBsmSldy() {
143 getDlxxByBsmSldy(this.propsParam.bsmSldy).then((res) => {
144 if (res.code === 200) {
145 if (res.result != null) {
146 this.ruleForm = res.result
147 }
148 }
149 });
150 },
151 saveOrUpdateDlxx() {
152 saveOrUpdateDlxx(this.ruleForm).then((res) => {
153 if (res.code === 200) {
154 this.$message.success("成功")
155 }
156 });
157 },
158 onSubmit () {
159 this.saveOrUpdateDlxx()
160 }
161 }
162 }
163 </script>
164 <style scoped lang="scss">
165 @import "~@/styles/public.scss";
166 @import "~@/styles/slxx/slxx.scss";
167 </style>
1 <!--
2 * @Description:
3 * @Autor: renchao
4 * @LastEditTime: 2023-12-29 16:35:50
5 -->
6 <template>
7 <div class='sfxx'>
8 <div class="sfxx-left">
9 <div class="slxx_title title-block">
10 基本信息
11 <div class="triangle"></div>
12 </div>
13 <ul>
14 <li>
15 <p>业务号</p>
16 <p>{{detail.ywh}}</p>
17 </li>
18 <li>
19 <p>申请登记类型</p>
20 <p>{{detail.sqdjlx}}</p>
21 </li>
22 <li>
23 <p>联系人</p>
24 <p>{{detail.lxr}}</p>
25 </li>
26 <li>
27 <p>联系人电话</p>
28 <p>{{detail.lxdh}}</p>
29 </li>
30 <li>
31 <p>缴费人</p>
32 <p><el-input v-model="detail.jfr"></el-input></p>
33 </li>
34 <li>
35 <p>缴费单号</p>
36 <p><el-input v-model="detail.jfdh"></el-input></p>
37 </li>
38 <li>
39 <p>应收金额</p>
40 <p style="color:red">{{detail.ysje}}</p>
41 </li>
42 <li>
43 <p>实收金额</p>
44 <p><el-input v-model="detail.ssje"></el-input></p>
45 </li>
46 <li>
47 <p>备注</p>
48 <p><el-input v-model="detail.bz"></el-input></p>
49 </li>
50 </ul>
51 </div>
52 <div class="sfxx-right">
53 <div class="slxx_title title-block">
54 收费明细
55 <!-- <div class="triangle"></div> -->
56 <el-button type="primary" @click="hanldeAdd" style="float:right;margin-top:-5px">增加</el-button>
57 </div>
58 <el-table :data="tableData.data" border :height="355">
59 <el-table-column v-for="item in tableData.columns" :key="item.index" :prop="item.prop" :label="item.label" align="center">
60 </el-table-column>
61 <el-table-column label="操作" width="50">
62 <template slot-scope="scope">
63 <el-button type="text" @click="handleDelete(scope.row)">删除</el-button>
64 </template>
65 </el-table-column>
66 </el-table>
67 <div class="slxx_title title-block">
68 票据
69 <div style="height:250px">
70 <img src="../../../image/pj.jpg" alt="" style="height:100%">
71 </div>
72 </div>
73 </div>
74 </div>
75 </template>
76 <script>
77 import { mapGetters } from "vuex";
78 import { getSfmxList, deleteSfmx } from "@/api/sfxx.js";
79 export default {
80 components: {},
81 data () {
82 return {
83 detail: {
84 ywh: '',
85 sqdjlx: '',
86 lxr: '',
87 lxdh: '',
88 jfr: '',
89 jfdh: '',
90 ysje: '',
91 ssje: '',
92 bz: ''
93 },
94 tableData: {
95 columns: [
96 {
97 prop: "sfdw",
98 label: "收费单位",
99 },
100 {
101 label: '是否额外收费',
102 align: 'center',
103 render: (h, scope) => {
104 return (
105 <div>
106 {scope.row.sfewsf == '1' ? <span></span> : <span>否</span>}
107 </div>
108 )
109 }
110 },
111 {
112 prop: "sfry",
113 label: "收费人员",
114 },
115 {
116 prop: "sfkmmc",
117 label: "收费科目名称",
118 },
119 {
120 prop: "sjffr",
121 label: "实际付费人",
122 },
123 {
124 prop: "ssje",
125 label: "实收金额",
126 },
127 {
128 prop: "ysje",
129 label: "应收金额",
130 }
131 ],
132 data: []
133 }
134 }
135 },
136 computed: {
137 ...mapGetters(["workFresh"]),
138 },
139 watch: {
140 workFresh: {
141 handler (newVal, oldVal) {
142 if (newVal) this.getList();
143 },
144 },
145 },
146 mounted () {
147 this.getList()
148 },
149 methods: {
150 getList () {
151 let bsmBusiness = this.$route.query.bsmBusiness ? this.$route.query.bsmBusiness : window.currentSelect.bsmBusiness
152 getSfmxList(bsmBusiness).then(res => {
153 this.tableData.data = res.result
154 })
155 },
156 hanldeAdd () {
157 let bsmBusiness = this.$route.query.bsmBusiness ? this.$route.query.bsmBusiness : window.currentSelect.bsmBusiness
158 this.$popupDialog('新增', 'workflow/components/dialog/xzsf', { bsmBusiness: bsmBusiness }, '50%', true)
159 },
160 handleDelete (row) {
161 let that = this
162 this.$confirm('此操作将永久删除该 是否继续?', '提示', {
163 confirmButtonText: '确定',
164 cancelButtonText: '取消',
165 type: 'warning'
166 }).then(() => {
167 deleteSfmx(row.bsmSf).then(res => {
168 if (res.code == 200) {
169 that.$message({
170 message: '删除成功!',
171 type: 'success'
172 })
173 that.getList()
174 } else {
175 that.$message({
176 type: 'info',
177 message: res.message
178 })
179 }
180 })
181 }).catch(() => {
182 this.$message({
183 type: 'info',
184 message: '已取消删除'
185 })
186 })
187
188 }
189 }
190 }
191 </script>
192 <style scoped lang='scss'>
193 @import "~@/styles/public.scss";
194 .sfxx {
195 display: flex;
196 padding: 10px;
197 height: 100%;
198 box-sizing: border-box;
199 &-left {
200 width: 50%;
201 margin-right: 10px;
202 ul {
203 border-radius: 3px;
204 }
205 li:last-child {
206 border-bottom: 1px solid #e8e5e5;
207 }
208 li {
209 display: flex;
210 border: 1px solid #e8e5e5;
211 border-bottom: none;
212
213 p:nth-child(1) {
214 width: 35%;
215 text-align: center;
216 background-color: #fafafa;
217 border-right: 1px solid #e8e5e5;
218 padding: 10px 0;
219 }
220 p:nth-child(2) {
221 width: 65%;
222 display: flex;
223 align-items: center;
224 box-sizing: border-box;
225 margin: 0 10px;
226 }
227 }
228 }
229 &-right {
230 width: 50%;
231 margin-left: 10px;
232 }
233 }
234 </style>
1 <!--
2 * @Description: 审批意见
3 * @Autor: renchao
4 * @LastEditTime: 2024-01-26 08:45:07
5 -->
6 <template>
7 <div class="spyj" v-Loading="loading">
8 <div class="box">
9 <div class="spyj_title">
10 <div class="righttitle">审批表</div>
11 </div>
12
13 <div v-for="(item, index) in tableData" :key="index">
14 <el-form
15 :model="tableData[index]"
16 label-width="120px"
17 ref="ruleForm'">
18 <div class="spyj_form">
19 <div class="item_left">
20 <div class="right">{{ item.jdmc }}意见</div>
21 </div>
22 <div class="item_right">
23 <el-row>
24 <el-col :span="24">
25 <el-form-item
26 label-width="0"
27 class="opinion_item">
28 <el-input
29 :disabled="!viewEdit || item.show"
30 type="textarea"
31 :rows="4"
32 class="opinion"
33 placeholder=""
34 v-model="item.shyj"></el-input>
35 <el-button
36 class="opinion_btn"
37 @click="commonOpinion(index)"
38 :disabled="!viewEdit|| item.show">常用意见</el-button>
39 </el-form-item>
40 </el-col>
41 </el-row>
42 <el-row>
43 <el-col :span="16">
44 <el-form-item label="审查人">
45 {{ item.shryxm }}
46 </el-form-item>
47 </el-col>
48 <el-col :span="8">
49 <el-form-item disabled label="审核时间" :key="refresh">
50 {{ item.shjssj }}
51 </el-form-item>
52 </el-col>
53 </el-row>
54 </div>
55 </div>
56 </el-form>
57 </div>
58 <div class="submit_button" v-if="viewEdit">
59 <el-button type="primary" :disabled="shows" @click="onSubmit()">保存</el-button>
60 </div>
61 </div>
62 </div>
63 </template>
64 <script>
65 import { saveSpyjBySlsq, getSpyjList } from "@/api/opinion.js";
66 import { mapGetters } from "vuex";
67 import { getNewDatesh } from "@/utils/util";
68 export default {
69 computed: {
70 ...mapGetters(["dqhj", "yjsqOptions", "userInfo"]),
71 },
72 data () {
73 return {
74 loading: false,
75 currentindex: 0,
76 refresh: 10,
77 viewEdit: false,
78 bsmSlsq: this.$route.query.bsmSlsq,
79 bestepid: this.$route.query.bestepid,
80 propsParam: {},
81 tableData: [],
82 shows: false,
83 };
84 },
85
86 watch: {
87 yjsqOptions: {
88 handler (val) {
89 this.add(val.opinion);
90 },
91 deep: true,
92 immediate: true,
93 },
94 dqhj: {
95 handler (val) {
96 this.propsParam = this.$attrs;
97 this.dataset()
98 this.getShList();
99
100 },
101 deep: true,
102 immediate: true,
103 },
104
105 },
106 methods: {
107 /**
108 * @description: dataset
109 * @param {*} 数据处理
110 * @author: renchao
111 */
112 dataset () {
113 this.viewEdit = this.$parent.currentSelectTab.ableOperation;
114 },
115 /**
116 * @description: getShList
117 * @param {*} obj
118 * @author: renchao
119 */
120 getShList () {
121 this.loading = true
122 var formdata = new FormData();
123 formdata.append("bsmBusiness", this.propsParam.bsmBusiness);
124 formdata.append("bestepid", this.$route.query.bestepid);
125
126 getSpyjList(formdata).then((res) => {
127 if (res.code === 200 && res.result) {
128 this.tableData = res.result;
129 if (this.shows) {
130 this.shows = false;
131 }
132 var index = this.tableData.findIndex(
133 (item) => item.jddm === this.$parent.dqhj
134 );
135 if (index == -1) {
136 switch (this.$parent.dqhj) {
137 case "cs":
138 this.tableData.push({ jdmc: "初审", jddm: "cs", sxh: 1 });
139 break;
140 case "fs":
141 this.tableData.push({ jdmc: "复审", jddm: "fs", sxh: 2 });
142 break;
143 case "hd":
144 this.tableData.push({ jdmc: "核定", jddm: "hd", sxh: 3 });
145 break;
146 }
147 }
148 this.tableData.forEach((item) => {
149 item.show = true;
150 if (this.$parent.dqhj == item.jddm) {
151 item["stepid"] = this.$route.query.bestepid;
152 item.shjssj = getNewDatesh();
153 item.shkssj = getNewDatesh();
154 item["shryxm"] = this.userInfo.name;
155 item["userid"] = this.userInfo.id;
156 item.show = false;
157 }
158 });
159 this.loading = false
160 }
161 })
162 },
163 /**
164 * @description: onSubmit
165 * @author: renchao
166 */
167 onSubmit () {
168
169 this.tableData.forEach((item, index) => {
170 item["bsmBusiness"] = this.propsParam.bsmBusiness;
171 item["czjg"] = "1";
172 });
173 var index = this.tableData.findIndex(
174 (item) => item.shyj == null || item.shyj == ""
175 );
176 if (index == -1) {
177 this.shows = true;
178 saveSpyjBySlsq(this.tableData).then((res) => {
179 if (res.code === 200) {
180 this.$message.success("保存成功");
181 this.refresh += 1;
182 this.getShList();
183 } else {
184 this.$message.error(res.message);
185 }
186 });
187 } else {
188 this.$message.error("意见不能为空");
189 }
190
191 },
192 //打开常用意见列表弹窗
193 /**
194 * @description: 打开常用意见列表弹窗
195 * @param {*} index
196 * @author: renchao
197 */
198 commonOpinion (index) {
199 this.currentindex = index;
200 this.$popupDialog(
201 "常用意见",
202 "workflow/components/dialog/commonOpinion",
203 {},
204 "70%",
205 true
206 );
207 },
208 /**
209 * @description: add
210 * @param {*} val
211 * @author: renchao
212 */
213 add (val) {
214 if (val != "" && this.tableData.length > 0) {
215 this.$set(this.tableData[this.currentindex], "shyj", val);
216 }
217 },
218 },
219 };
220 </script>
221 <style scoped lang="scss">
222 @import "~@/styles/mixin.scss";
223
224 .spyj {
225 width: 100%;
226 height: 100%;
227 background-color: #f5f5f5;
228 .box {
229 overflow-x: auto;
230 width: 100%;
231 height: 95%;
232 background: #fff;
233 text-align: center;
234 padding: 4px;
235 overflow-y: scroll;
236 padding-top: 20px;
237 padding: 20px 40px;
238 .spyj_title {
239 width: 100%;
240 height: 80px;
241 border: 1px solid $borderColor;
242 background-color: #eceef2;
243 display: flex;
244 }
245 .leftadd {
246 width: 3%;
247 height: 100%;
248 display: flex;
249 font-size: 14px;
250 text-indent: 20px;
251 align-items: center;
252 border: 1px solid $borderColor;
253 }
254 .righttitle {
255 width: 80%;
256 height: 100%;
257 line-height: 80px;
258 border: 1px solid $borderColor;
259 margin: auto;
260 font-size: 22px;
261 font-weight: 400;
262 }
263 }
264
265 /deep/.el-form-item {
266 margin-bottom: 0;
267 }
268
269 .bottom10 {
270 margin-bottom: 15px;
271 }
272
273 .spyj_form {
274 display: flex;
275 border: 1px solid $borderColor;
276
277 .item_left {
278 width: 150px;
279 background-color: #f8f8fa;
280 color: #606266;
281 display: flex;
282 font-size: 14px;
283 text-indent: 50px;
284 align-items: center;
285 border-right: 1px solid $borderColor;
286 }
287
288 .item_right {
289 flex: 1;
290 width: 100%;
291
292 /deep/.el-form-item__label {
293 background-color: #f8f8fa;
294 }
295 /deep/.el-form-item__content {
296 display: block;
297 text-align: left;
298 }
299 .opinion_item {
300 /deep/.el-form-item__error {
301 margin-top: -16px !important;
302 left: 3px;
303 }
304 border-bottom: 1px solid $borderColor;
305 }
306
307 .opinion {
308 position: relative;
309 font-size: 14px;
310
311 /deep/.el-textarea__inner {
312 border: none;
313 }
314 }
315
316 .opinion_btn {
317 position: absolute;
318 right: 15px;
319 bottom: 10px;
320 }
321 }
322 }
323
324 .submit_button {
325 text-align: center;
326 margin: 15px 0;
327 }
328
329 .el-date-editor.el-input {
330 width: 100%;
331 }
332 }
333 </style>
1 <template>
2 <div class="slxx swxx">
3 <el-form
4 :model="ruleForm"
5 ref="ruleForm"
6 v-Loading="loading"
7 :label-position="flag ? 'top' : ''"
8 :inline="flag"
9 label-width="120px">
10 <div class="slxx_con" :class="flag ? 'formMarginBot0' : ''">
11 <div class="slxx_title title-block">
12 不动产信息
13 <div class="triangle"></div>
14 </div>
15 <el-row :gutter="10">
16 <el-col :span="8">
17 <el-form-item label="不动产单元号:">
18 <el-input disabled v-model="ruleForm.bdcdyh"></el-input>
19 </el-form-item>
20 </el-col>
21 <el-col :span="8">
22 <el-form-item label="原产证号:">
23 <el-input disabled v-model="ruleForm.yfczh"></el-input>
24 </el-form-item>
25 </el-col>
26 <el-col :span="8">
27 <el-form-item label="面积(m3):">
28 <el-input disabled v-model="ruleForm.mj"></el-input>
29 </el-form-item>
30 </el-col>
31 </el-row>
32 <el-row :gutter="10">
33 <el-col :span="8">
34 <el-form-item label="权利类型:">
35 <el-input disabled v-model="ruleForm.qllxmc"></el-input>
36 </el-form-item>
37 </el-col>
38 <el-col :span="8">
39 <el-form-item label="用途:">
40 <el-input disabled v-model="ruleForm.yt"></el-input>
41 </el-form-item>
42 </el-col>
43 <el-col :span="8">
44 <el-form-item label="坐落:">
45 <el-input disabled v-model="ruleForm.zl"></el-input>
46 </el-form-item>
47 </el-col>
48 </el-row>
49 <div class="slxx_title title-block">
50 买方信息
51 <div class="triangle"></div>
52 </div>
53 <lb-table :column="column" :pagination="false" :heightNumSetting="true"
54 :data="ruleForm.tableDataList">
55 </lb-table>
56 <div class="slxx_title title-block">
57 卖方信息
58 <div class="triangle"></div>
59 </div>
60 <lb-table :column="column1" :pagination="false" :heightNumSetting="true"
61 :data="ruleForm.tableDataList">
62 </lb-table>
63 <div class="slxx_title title-block">
64 合同信息
65 <div class="triangle"></div>
66 </div>
67 <el-row :gutter="10">
68 <el-col :span="8">
69 <el-form-item label="合同编号:">
70 <el-input v-model="ruleForm.htbh"></el-input>
71 </el-form-item>
72 </el-col>
73 <el-col :span="8">
74 <el-form-item label="合同金额(万元):">
75 <el-input v-model="ruleForm.htje"></el-input>
76 </el-form-item>
77 </el-col>
78 <el-col :span="8">
79 <el-form-item label="签订时间:">
80 <el-date-picker
81 class="width100"
82 v-model="ruleForm.qdsj"
83 type="date"
84 placeholder="选择日期"
85 value-format="yyyy-MM-dd HH:mm:ss"
86 format="yyyy-MM-dd">
87 </el-date-picker>
88 </el-form-item>
89 </el-col>
90 </el-row>
91 <div class="slxx_title title-block">
92 缴税信息
93 <div class="triangle"></div>
94 </div>
95 <lb-table :column="column2" :pagination="false" :heightNumSetting="true"
96 :data="ruleForm.tableDataList">
97 </lb-table>
98 </div>
99 <el-row class="btn" v-if="viewEdit">
100 <el-form-item>
101 <el-button type="primary" @click="onSubmit">保存</el-button>
102 </el-form-item>
103 </el-row>
104 </el-form>
105 </div>
106 </template>
107 <script>
108 import { mapGetters } from "vuex";
109 export default {
110 computed: {
111 ...mapGetters(["dictData", "flag"]),
112 },
113 mounted () {
114 // this.loading = true
115 this.viewEdit = this.$parent.currentSelectTab.ableOperation;
116 this.propsParam = this.$attrs;
117 var formdata = new FormData();
118 formdata.append("bsmSldy", this.propsParam.bsmSldy);
119 formdata.append("djlx", this.propsParam.djlx);
120 formdata.append("isEdit", this.viewEdit);
121 // Init(formdata).then((res) => {
122 // if (res.code === 200 && res.result) {
123 // }
124 // });
125 },
126 data () {
127 return {
128 loading: false,
129 //表单是否可操作
130 viewEdit: false,
131 column: [
132 {
133 prop: "qlrxm",
134 label: "权利人姓名"
135 },
136 {
137 prop: "gyqk",
138 label: "共有情况"
139 },
140 {
141 prop: "zjzl",
142 label: "身份证号种类"
143 },
144 {
145 prop: "zjhm",
146 label: "证件号码"
147 },
148 ],
149 column1: [{
150 prop: "ywrxm",
151 label: "义务人姓名"
152 },
153 {
154 prop: "zjzl",
155 label: "身份证号种类"
156 },
157 {
158 prop: "zjhm",
159 label: "证件号码"
160 }],
161 column2: [{
162 type: 'index',
163 label: "序号",
164 width: '50'
165 },
166 {
167 prop: "nsr",
168 label: "纳税人"
169 },
170 {
171 prop: "sz",
172 label: "税种"
173 },
174 {
175 prop: "jsyj",
176 label: "计税依据"
177 },
178 {
179 prop: "sl",
180 label: "税率"
181 },
182 {
183 prop: "jsje",
184 label: "计税金额"
185 }],
186 ruleForm: {
187 tableDataList: []
188 }
189 }
190 },
191 methods: {
192 onSubmit () { }
193 }
194 }
195 </script>
196 <style scoped lang="scss">
197 @import "~@/styles/public.scss";
198 @import "~@/styles/slxx/slxx.scss";
199 </style>
1 <!--
2 * @Description:
3 * @Autor: renchao
4 * @LastEditTime: 2024-01-30 15:46:45
5 -->
6 <template>
7 <div class="szxx">
8 <el-card
9 :class="classJudge(item)"
10 v-for="(item, index) in tableData"
11 :key="index">
12 <div slot="header" class="szxx_header">
13 <span class="header_type">{{
14 item.bdcqzlx == 1 ? "不动产权证书" : "不动产登记证明"
15 }}</span>
16 <div class="header_text">{{ item.bdcqzh }}</div>
17 </div>
18 <div class="szxx_body card_padding">
19 <div class="text color_iray">
20 <span>{{ item.qllx }}</span>
21 </div>
22 <div class="text color_red">
23 <span>{{ item.qlr }}</span><span class="color_iray">({{ item.qllx }})</span>
24 </div>
25 <div class="text color_iray">
26 <span>{{ item.gyqk }}</span>
27 </div>
28 <div class="text color_red">
29 <span>{{ item.bdcdyh }}</span>
30 </div>
31 <div class="text color_iray">
32 <span>{{ item.zl }}</span>
33 </div>
34 <div class="text color_red">
35 <span>{{ item.yt }}</span>
36 </div>
37 <div class="text color_iray">
38 <span>{{ item.mj }}</span>
39 </div>
40 <div class="text color_red">
41 <span>{{ item.syqx }}</span>
42 </div>
43 <div class="text color_iray">
44 <span>印刷序列号:{{ item.ysxlh }}</span>
45 </div>
46 </div>
47 <div class="card_padding" v-if="viewEdit">
48 <div class="top_line middle_margin"></div>
49 <div class="text tac" v-if="item.ysxlh">
50 <el-button
51 class="operation_button"
52 type="text"
53 @click="openInvalidDiglog(item)">再次打印({{ item.szcs }})</el-button>
54 <el-button
55 class="operation_button"
56 type="text"
57 @click="openRecordPop(item)">缮证记录</el-button>
58 </div>
59 <div class="text tac" v-else>
60 <el-button
61 class="operation_button"
62 type="text"
63 @click="openZsylDialog(item, 2)">证书打印({{ item.szcs }}</el-button>
64 <el-button
65 class="operation_button"
66 type="text"
67 @click="openRecordPop(item)">缮证记录</el-button>
68 </div>
69 </div>
70 </el-card>
71
72 <el-empty description="暂无数据" v-if="tableData.length == 0"></el-empty>
73 </div>
74 </template>
75 <script>
76 import { mapGetters } from "vuex";
77 import store from "@/store/index.js";
78 import { getSlsqBdcqzList } from "@/api/bdcqz.js";
79 export default {
80 props: {},
81 data () {
82 return {
83 //表单是否可操作
84 viewEdit: false,
85 dialog: false,
86 tableData: [],
87 bdcqzlx: 1,
88 bdcqz: {},
89 };
90 },
91 computed: {
92 ...mapGetters(["workFresh"]),
93 },
94 watch: {
95 workFresh: {
96 handler (newVal, oldVal) {
97 if (newVal) this.list();
98 },
99 },
100 },
101 created () {
102 this.list();
103 this.viewEdit = this.$parent.currentSelectTab.ableOperation;
104 },
105 methods: {
106 /**
107 * @description: 初始化列表
108 * @author: renchao
109 */
110 list () {
111 return new Promise((resolve, reject) => {
112 var bsmSlsq = this.$route.query.bsmSlsq;
113 getSlsqBdcqzList({ bsmSlsq: bsmSlsq }).then((res) => {
114 resolve(res.code);
115 if (res.code === 200) {
116 this.tableData = res.result;
117 if (res.result) {
118 this.bdcqz = res.result[0];
119 }
120 }
121 });
122 });
123 },
124 /**
125 * @description: 打开证书预览弹窗
126 * @param {*} item
127 * @param {*} type
128 * @author: renchao
129 */
130 openZsylDialog (item, type) {
131 store.dispatch("user/reWorkFresh", false);
132 if (type == 1) {
133 this.$popupDialog(
134 "证书证明预览",
135 "workflow/components/dialog/zsyl",
136 { bdcqz: item, bsmSlsq: this.$route.query.bsmSlsq },
137 '1230px',
138 true
139 );
140 } else {
141 this.$popupDialog(
142 "证书证明打印",
143 "workflow/components/dialog/zsdy",
144 { ...item },
145 "76%",
146 true
147 );
148 }
149 },
150 /**
151 * @description: 再次打印
152 * @param {*} item
153 * @author: renchao
154 */
155 openInvalidDiglog (item) {
156 this.$popupDialog(
157 "证书证明打印",
158 "workflow/components/dialog/zsdy",
159 { ...item },
160 "76%",
161 true
162 );
163 },
164 /**
165 * @description: openRecordPop
166 * @param {*} item
167 * @author: renchao
168 */
169 openRecordPop (item) {
170 this.$popupDialog(
171 "缮证记录",
172 "workflow/components/dialog/szRecord",
173 { bsmBdcqz: item.bsmBdcqz },
174 "60%",
175 true
176 );
177 },
178 /**
179 * @description: classJudge 判断class
180 * @param {*} item
181 * @author: renchao
182 */
183 classJudge (item) {
184 let className = "box-card";
185 if (item.bdcqzlx == 1) {
186 className += " zs-card";
187 } else {
188 className += " zm-card";
189 }
190 if (item.szcs == 0) {
191 className += " no-print";
192 }
193 return className;
194 },
195 },
196 };
197 </script>
198 <style scoped lang="scss">
199 @import "~@/styles/public.scss";
200 .szxx {
201 box-sizing: border-box;
202 padding-right: 15px;
203 width: 100%;
204 height: 100%;
205 overflow-y: scroll;
206 padding-bottom: 55px;
207
208 .box-card {
209 float: left;
210 width: 350px;
211 margin: 10px;
212 box-shadow: none;
213 background-image: url("~@/image/zm-bg.png");
214 background-size: 100% 100%;
215 border: 1px solid transparent;
216 /deep/ .el-card__header {
217 padding: 12px 66px;
218 background-size: auto;
219 border-bottom: 0;
220 position: relative;
221 }
222 .szxx_header {
223 color: #8b4534;
224 }
225 .szxx_body {
226 height: 330px;
227 }
228 }
229 .zs-card {
230 border: 1px solid #a6b0be;
231 background-image: none;
232 /deep/ .el-card__header {
233 background-image: url("~@/image/zs-red.png");
234 .szxx_header {
235 color: #ffe47c;
236 }
237 }
238 .top_line {
239 border-top: 1px solid #d3dbe5;
240 width: 330px;
241 margin: 0 auto 10px;
242 }
243 }
244 .zm-card {
245 /deep/ .el-card__header {
246 &:after {
247 content: "";
248 display: inline-block;
249 width: 330px;
250 height: 1px;
251 background-color: #b28676;
252 position: absolute;
253 left: 10px;
254 bottom: 0;
255 }
256 }
257 }
258 .zm-card.no-print {
259 background-image: url("~@/image/zm-gray.png");
260
261 /deep/ .el-card__header {
262 &:after {
263 background-color: #6d7278;
264 }
265 }
266 .szxx_header {
267 color: #6d7278;
268 }
269 }
270 .zs-card.no-print {
271 /deep/ .el-card__header {
272 background-image: url("~@/image/zs-gray.png");
273 .szxx_header {
274 color: #ffffff;
275 }
276 }
277 }
278 }
279
280 .szxx_header {
281 // color: #ffffff;
282 // font-weight: bolder;
283 font-size: 16px;
284
285 .header_type {
286 display: flex;
287 justify-content: center;
288 align-content: center;
289 }
290
291 .header_text {
292 text-align: center;
293 margin-top: 2px;
294 line-height: 22px;
295 }
296 }
297
298 .text {
299 margin-bottom: 8px;
300 text-align: left;
301 text-indent: 16px;
302 }
303 .text.tac {
304 text-align: center;
305 }
306
307 .color_iray {
308 color: #6d7278;
309 }
310
311 .color_red {
312 color: #ab0c0c;
313 }
314
315 .middle_margin {
316 margin-bottom: 10px;
317 }
318
319 .operation_button {
320 border: 1px solid #5c95e5;
321 padding: 5px;
322 text-align: center;
323 }
324
325 .card_padding {
326 padding-top: 8px;
327 font-size: 14px;
328 line-height: 22px;
329 }
330 /deep/.el-card__body {
331 padding: 0px;
332 }
333 </style>
1 <!--
2 * @Description:
3 * @Autor: renchao
4 * @LastEditTime: 2023-08-02 14:24:20
5 -->
6 <template>
7 <div class="from-clues">
8 <!-- 表单部分 -->
9 <div class="from-clues-header">
10 <div class="title">请选择要退回到的环节:</div>
11 <el-form ref="queryForm" label-width="90px">
12 <ul style="margin-bottom: 15px">
13 <li
14 v-for="(item, index) in dataList"
15 class="listDetail"
16 :key="index"
17 @click="changeSelectItem(item)">
18 <p class="icon">
19 <el-radio
20 v-model="selectActivity"
21 :label="item.activityId"
22 @change="changeSelectItem(item)"></el-radio>
23 </p>
24 <p>{{ item.activityName }}</p>
25 <p v-for="(child, childIndex) in item.assignee" :key="childIndex">
26 {{ child.name }}
27 </p>
28 </li>
29 </ul>
30 <div class="title">退回意见:</div>
31 <el-form-item>
32 <el-input
33 class="textArea"
34 type="textarea"
35 v-model="outstepopinion"
36 placeholder="请输入退回意见"></el-input>
37 </el-form-item>
38 <el-form-item>
39 <el-button style="float:right" @click="cancelBack">取消</el-button>
40 <el-button type="primary" @click="onSubmit" style="float:right">退回</el-button>
41 </el-form-item>
42 </el-form>
43 </div>
44 </div>
45 </template>
46
47 <script>
48
49 import { getTaskBackNode, sendBackTask } from "@/api/workFlow.js"
50 import { popupCacel } from "@/utils/popup.js";
51
52 export default {
53 props: {
54 formData: {
55 type: Object,
56 default: {},
57 },
58 },
59 data () {
60 return {
61 selectActivity: "",
62 dataList: [],
63 outstepopinion: "",
64 selectItem: {},
65 };
66 },
67 created () {
68 this.getBackNode();
69 },
70 methods: {
71 /**
72 * @description: onSubmit
73 * @author: renchao
74 */
75 onSubmit () {
76 if (!this.outstepopinion) {
77 this.$message.error("请填写退回意见");
78 } else {
79 sendBackTask({
80 bsmSlsq: this.formData.bsmSlsq,
81 backNodeList: [this.selectItem],
82 message: this.outstepopinion
83 }).then((res) => {
84 if (res.code == 200) {
85 this.$message.success("退回成功");
86 setTimeout(() => {
87 if (window.opener && window.opener.getBpageList) {
88 window.opener.getBpageList();
89 } else {
90 window.opener.frames[0].getBpageList();
91 }
92 window.close();
93 this.$emit("input", false);
94 }, 1000);
95 } else {
96 this.$message.error(res.message);
97 }
98 });
99 }
100 },
101 /**
102 * @description: changeSelectItem
103 * @param {*} item
104 * @author: renchao
105 */
106 changeSelectItem (item) {
107 this.selectItem = item;
108 this.selectActivity = item.activityId;
109 },
110 //获取可回退环节信息
111 /**
112 * @description: 获取可回退环节信息
113 * @author: renchao
114 */
115 getBackNode () {
116 getTaskBackNode(this.formData).then((res) => {
117 if (res.code == 200) {
118 this.dataList = res.result;
119 console.log("this.dataList", this.dataList);
120 if (res.result) {
121 this.selectActivity = res.result[0].activityId;
122 this.selectItem = res.result[0];
123 }
124 }
125 });
126 },
127
128 /**
129 * @description: cancelBack
130 * @author: renchao
131 */
132 cancelBack () {
133 popupCacel();
134 }
135 }
136 }
137 </script>
138 <style scoped lang="scss">
139 @import "~@/styles/mixin.scss";
140
141 .listDetail {
142 display: flex;
143 align-items: center;
144 width: 100%;
145
146 p {
147 line-height: 30px;
148 height: 30px;
149 @include flex-center;
150 flex: 1;
151 width: 100%;
152 border: 1px solid rgb(233, 235, 237);
153 margin-top: -1px;
154 margin-left: -1px;
155 }
156
157 .icon {
158 flex: 0 0 60px;
159 }
160 }
161
162 .title {
163 margin-bottom: 10px;
164 }
165
166 .textArea {
167 /deep/.el-textarea__inner {
168 min-height: 90px !important;
169 }
170 }
171 /deep/.el-radio .el-radio__label {
172 display: none;
173 }
174 </style>
1 <!--
2 * @Description:
3 * @Autor: renchao
4 * @LastEditTime: 2024-01-19 16:43:43
5 -->
6 <template>
7 <div class="from-clues">
8 <!-- 表单部分 -->
9 <div class="from-clues-header">
10 <el-form ref="queryForm" label-width="180px" v-if="this.formData.obj">
11 <el-form-item label="下一环节名称:">
12 {{ this.formData.obj.taskName }}
13 </el-form-item>
14 <el-form-item label="下一环节办理人:">
15 {{ this.formData.obj.usernames.join(",") }}
16 </el-form-item>
17 </el-form>
18 <el-form ref="queryForm" label-width="180px" v-else>
19 <el-form-item label="">
20 此环节为流程最后环节,转出后流程将结束
21 </el-form-item>
22 </el-form>
23 <div class="invalid-reson">审批意见:</div>
24 <el-input
25 class="opinion"
26 v-model="shyj"
27 placeholder="请输入审批意见"
28 type="textarea"
29 :rows="4"></el-input>
30 <!-- <el-button
31 class="opinion_btn"
32 @click="commonOpinion"
33 >常用意见</el-button
34 > -->
35 <el-button style="float: right" @click="cancelBack">取消转出</el-button>
36 <el-button type="primary" @click="submitForm" :loading="loading" style="float: right">确定转出</el-button>
37 </div>
38 </div>
39 </template>
40
41 <script>
42 import { completeTask, getNextLinkInfo } from "@/api/workFlow.js";
43 import { popupCacel } from "@/utils/popup.js";
44 import { mapGetters } from 'vuex'
45 export default {
46 components: {},
47
48 props: {
49 formData: {
50 type: Object,
51 default: {},
52 },
53 },
54 computed: {
55 ...mapGetters(['yjsqOptions'])
56 },
57 data () {
58 return {
59 loading: false,
60 queryForm: {},
61 shyj: "",
62 };
63 },
64
65 watch: {
66 // yjsqOptions: {
67 // handler (val) {
68 // if(val){
69 // this.shyj = val
70 // }
71
72 // },
73 // },
74 },
75 mounted () {
76 // this.queryForm= this.queryForm.obj
77 },
78 methods: {
79 /**
80 * @description: submitForm
81 * @author: renchao
82 */
83 commonOpinion () {
84 this.$popupDialog(
85 "常用意见",
86 "workflow/components/dialog/commonOpinion",
87 {},
88 "70%",
89 true
90 );
91 },
92 submitForm () {
93 this.loading = true
94 this.queryForm = {
95 bsmSlsq: this.formData.bsmSlsq,
96 shyj: this.shyj,
97 stepform: JSON.stringify(this.formData.tabList),
98 };
99 completeTask(this.queryForm).then((res) => {
100 this.loading = false
101 if (res.code === 200) {
102 this.$message.success("转件成功");
103 popupCacel();
104 setTimeout(() => {
105 window.close();
106 this.$emit("input", false);
107 if (window.opener && window.opener.getBpageList) {
108 window.opener.getBpageList();
109 } else {
110 window.opener.frames[0].getBpageList();
111 }
112 }, 360);
113 } else {
114 this.$message.error(res.message);
115 }
116 }).catch(() => {
117 this.loading = false
118 })
119 },
120
121 /**
122 * @description: closeDialog
123 * @author: renchao
124 */
125 cancelBack () {
126 popupCacel();
127 },
128 },
129 };
130 </script>
131 <style scoped lang="scss">
132 @import "~@/styles/mixin.scss";
133 .el-button {
134 margin-top: 20px;
135 margin-right: 10px;
136 }
137
138 .opinion {
139 position: relative;
140 font-size: 14px;
141 }
142
143 .opinion_btn {
144 position: absolute;
145 right: 35px;
146 bottom: 80px;
147 }
148 </style>
1 <!--
2 * @Description:
3 * @Autor: renchao
4 * @LastEditTime: 2023-09-18 14:06:16
5 -->
6 <template>
7 <div style="width:100%;height:100%;">
8 <canvas id="mxcad" style="width:100%;height:100%;">
9 </canvas>
10 </div>
11 </template>
12 <script>
13 import Mx from "mxdraw"
14 export default {
15 mounted () {
16 // 动态加载 js库核心代码
17 Mx.loadCoreCode().then(() => {
18 // Mx.MxFun.setMxServer("ws://localhost:5090") // 开启socket通信 可编辑图纸
19 // 创建控件对象
20 Mx.MxFun.createMxObject({
21 canvasId: "mxcad", // canvas元素的id
22 cadFile: "buf/hhhh.dwg", // http方式(预览): 加载public/demo文件夹下转换后的图纸
23 callback: (mxDraw, {
24 canvas,
25 canvasParent
26 }) => {
27 // 可以拿到canvas元素和它的父级元素
28 // 拿到图层数据
29 mxDraw.addEvent('uiSetLayerData', (listLayer) => {
30 console.log(listLayer)
31 })
32 },
33 isNewFile: true // 是否新建文件
34 })
35 })
36 },
37 }
38 </script>
39 <style scoped lang="scss">
40 #mxcad {
41 pointer-events: none;
42 }
43 </style>
...\ No newline at end of file ...\ No newline at end of file
1 /*
2 * @Description:
3 * @Autor: renchao
4 * @LastEditTime: 2023-08-29 12:55:07
5 */
6 import filter from '@/utils/filter.js'
7 let vm = null
8
9 const sendThis = (_this) => {
10 vm = _this
11 }
12 class data extends filter {
13 constructor() {
14 super()
15 }
16 columns () {
17 return {
18 //发证列表
19 fzgrid: [
20 {
21 label: '序号',
22 type: 'index',
23 width: '50'
24 },
25 {
26 prop: "fzrmc",
27 label: "发证人"
28 },
29 {
30 prop: "bdcqzlx",
31 label: "不动产权证类型",
32 width: '130',
33 render: (h, scope) => {
34 return (
35 <div>
36 <span v-show={scope.row.bdcqzlx == '1'}>不动产权证书</span>
37 <span v-show={scope.row.bdcqzlx == '2'}>不动产登记证明</span>
38 </div>
39 )
40 }
41 },
42 {
43 label: "权利类型",
44 width: '100',
45 render: (h, scope) => {
46 return (
47 <el-tooltip effect="dark" content={scope.row.qllx} placement="top" popper-class="tooltip-width ">
48 <span class="ellipsis-table"> {scope.row.qllx}</span>
49 </el-tooltip>
50 )
51 }
52 },
53 {
54 label: "面积(㎡)",
55 width: '100',
56 render: (h, scope) => {
57 return (
58 <el-tooltip effect="dark" content={scope.row.mj} placement="top" popper-class="tooltip-width ">
59 <span class="ellipsis-table"> {scope.row.mj}</span>
60 </el-tooltip>
61 )
62 }
63 },
64 {
65 prop: "fzsj",
66 label: "发证时间",
67 width: '140',
68 },
69 {
70 prop: "lzrxm",
71 label: "领证人姓名"
72 },
73 ],
74 }
75 }
76 }
77 let datas = new data()
78 export {
79 datas,
80 sendThis
81 }
1 /*
2 * @Description:
3 * @Autor: renchao
4 * @LastEditTime: 2023-05-17 10:39:03
5 */
6 import filter from '@/utils/filter.js'
7 let vm = null
8
9 const sendThis = (_this) => {
10 vm = _this
11 }
12 class data extends filter {
13 constructor() {
14 super()
15 }
16 columns () {
17 return [
18 {
19 width:"50px",
20 label: '序号',
21 type: 'index',
22 render: (h, scope) => {
23 return (
24 <div>
25 {scope.$index + 1}
26 </div>
27 )
28 }
29 },
30 {
31 prop: "szry",
32 label: "缮证人员",
33 },
34 {
35 prop: "szsj",
36 label: "缮证时间",
37 },
38 {
39 label: "是否作废",
40 render: (h, scope) => {
41 if (scope.row.sfzf == '0') {
42 return <div></div>
43 } else {
44 return <div>已作废</div>
45 }
46 }
47 },
48 {
49 prop: "bz",
50 label: "备注信息",
51 },
52 ]
53 }
54 }
55 let szxxdatas = new data()
56 export {
57 szxxdatas,
58 sendThis
59 }