sale-client 3.6.282 → 3.6.283
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +1 -1
- package/src/components/common/userinfo_detail/contractSigning.vue +109 -0
- package/src/components/revenue/base/rightview/RecordCancel.vue +2 -4
- package/src/filiale/bayan/ChargeManage.vue +316 -0
- package/src/filiale/bayan/ChargeOper.vue +319 -0
- package/src/filiale/bayan/sale.js +5 -0
- package/src/filiale/qianneng/revenue/common/ic_detail/HandQueryUser.vue +2 -2
- package/src/plugins/jsign.js +168 -0
- package/src/sale.js +2 -0
- package/src/sign.html +399 -0
package/package.json
CHANGED
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
<template>
|
|
2
|
+
<div id='contractSigning'>
|
|
3
|
+
<modal :show.sync="show" backdrop="false">
|
|
4
|
+
<header slot="modal-header" class="modal-header">
|
|
5
|
+
<h3 style="color:black" class="modal-title">合同</h3>
|
|
6
|
+
</header>
|
|
7
|
+
<article slot="modal-body" class="modal-body">
|
|
8
|
+
<iframe :src="url" v-if="url" width="100%" height="500px">
|
|
9
|
+
</iframe>
|
|
10
|
+
</article>
|
|
11
|
+
<footer slot="modal-footer" class="modal-footer">
|
|
12
|
+
<button type="button" class="btn btn-default" @click="handleReset">签名</button>
|
|
13
|
+
<button type="button" class="btn btn-default" @click="handleGenerate">保存</button>
|
|
14
|
+
<button type="button" class="btn btn-default" @click="clasehand">关闭</button>
|
|
15
|
+
</footer>
|
|
16
|
+
</modal>
|
|
17
|
+
<work-busy :is-busy="showbuy"></work-busy>
|
|
18
|
+
</div>
|
|
19
|
+
</template>
|
|
20
|
+
<script>
|
|
21
|
+
import * as jsign from '../../../plugins/jsign'
|
|
22
|
+
export default {
|
|
23
|
+
title: '合同签名页面',
|
|
24
|
+
data () {
|
|
25
|
+
return {
|
|
26
|
+
url: '',
|
|
27
|
+
imgstr: '',
|
|
28
|
+
scheduleData: '',
|
|
29
|
+
showclase: false,
|
|
30
|
+
showbuy: false
|
|
31
|
+
}
|
|
32
|
+
},
|
|
33
|
+
props: ['show'],
|
|
34
|
+
ready () {
|
|
35
|
+
},
|
|
36
|
+
compiled () {
|
|
37
|
+
},
|
|
38
|
+
methods: {
|
|
39
|
+
clasehand () {
|
|
40
|
+
this.url = ''
|
|
41
|
+
this.imgstr = ''
|
|
42
|
+
this.scheduleData = ''
|
|
43
|
+
this.show = false
|
|
44
|
+
},
|
|
45
|
+
getUserInfo () {
|
|
46
|
+
jsign.jsign_set_string('singurl', encodeURI(this.url))
|
|
47
|
+
},
|
|
48
|
+
getContractData (userinfoid) {
|
|
49
|
+
console.log(userinfoid)
|
|
50
|
+
this.showbuy = true
|
|
51
|
+
this.f_userinfo_id = userinfoid
|
|
52
|
+
this.$resetpost('wx/rs/logic/wordToosRept', {f_userinfo_id: this.f_userinfo_id}, {resolveMsg: null, rejectMsg: '获取合同失败!!'}).then(item => {
|
|
53
|
+
this.showbuy = false
|
|
54
|
+
if (item.data.length > 0) {
|
|
55
|
+
this.scheduleData = item.data[0]
|
|
56
|
+
this.url = item.data[0].f_visitpc_url
|
|
57
|
+
}
|
|
58
|
+
}).catch(err => {
|
|
59
|
+
console.log(err)
|
|
60
|
+
this.showbuy = false
|
|
61
|
+
})
|
|
62
|
+
},
|
|
63
|
+
handleReset () {
|
|
64
|
+
console.log('进入sign()')
|
|
65
|
+
console.log('jsign.dictGetArray', jsign.dictGetArray)
|
|
66
|
+
jsign.jsign_open(this)
|
|
67
|
+
setTimeout(() => {
|
|
68
|
+
jsign.jsign_get_device_status()
|
|
69
|
+
}, 1500)
|
|
70
|
+
setTimeout(() => {
|
|
71
|
+
if (jsign.dictGetArray['devicestatus'] === 'fail') {
|
|
72
|
+
console.log('没签字屏')
|
|
73
|
+
this.$showAlert('没有可用签字屏', 'danger', 0)
|
|
74
|
+
this.busy = 1
|
|
75
|
+
return
|
|
76
|
+
}
|
|
77
|
+
// jsign.jsign_set_string('name', 'jsigner')
|
|
78
|
+
// jsign.jsign_set_string('businessname', 'payment')
|
|
79
|
+
this.getUserInfo()
|
|
80
|
+
jsign.jsign_set_string('picture', '')
|
|
81
|
+
|
|
82
|
+
jsign.jsign_run_sign(jsign.htmlPath + `sign.html`)
|
|
83
|
+
}, 3000)
|
|
84
|
+
},
|
|
85
|
+
handleGenerate () {
|
|
86
|
+
// this.$dispatch('toggle')
|
|
87
|
+
if (this.imgstr === '') {
|
|
88
|
+
this.$showAlert('请先签字!', 'danger', 2000)
|
|
89
|
+
return
|
|
90
|
+
}
|
|
91
|
+
var data = {
|
|
92
|
+
content: this.imgstr,
|
|
93
|
+
f_userinfo_id: this.scheduleData.f_userinfo_id,
|
|
94
|
+
f_contract_signature_id: this.scheduleData.f_contract_signature_id
|
|
95
|
+
}
|
|
96
|
+
this.$resetpost('wx/rs/logic/pdfToosSignature', data).then((res) => {
|
|
97
|
+
if (res.data) {
|
|
98
|
+
this.showclase = true
|
|
99
|
+
this.url = res.data.f_visitpc_url
|
|
100
|
+
} else {
|
|
101
|
+
this.$vux.alert.show({title: '操作提示', content: '提交失败请稍后重试!'})
|
|
102
|
+
}
|
|
103
|
+
})
|
|
104
|
+
}
|
|
105
|
+
},
|
|
106
|
+
computed: {
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
</script>
|
|
@@ -93,10 +93,8 @@
|
|
|
93
93
|
}
|
|
94
94
|
await self.$resetpost('invoice/rs/logic/getInvoice', {data: params}, {resolveMsg: null, rejectMsg: '发票冲红失败!!!'})
|
|
95
95
|
}
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
self.$dispatch('cancel-success')
|
|
99
|
-
}
|
|
96
|
+
console.log('准备刷新了!。。', res, self.model)
|
|
97
|
+
self.$dispatch('cancel-success')
|
|
100
98
|
|
|
101
99
|
// 判断需不需要冲正电子票
|
|
102
100
|
// if (self.isNeedEticket(getRecord.data, self.data.type)) {
|
|
@@ -0,0 +1,316 @@
|
|
|
1
|
+
<template>
|
|
2
|
+
<div id="unit" class="flex-row three" v-show="listpage">
|
|
3
|
+
<div class="binary-left" style="overflow: scroll;width:15%" >
|
|
4
|
+
<mulitinfo :warninginfo="warningInfo" style="height:auto" @deal-msg="dealMsg" :data="row" :card-data="cardInfo" v-ref:info></mulitinfo>
|
|
5
|
+
</div>
|
|
6
|
+
<div class="binary-right" style="width:68%;overflow-y: scroll" >
|
|
7
|
+
<div :style="{height:(row?'auto':'100%')}">
|
|
8
|
+
<!--<div class="auto" v-if="sustainMoney != null">-->
|
|
9
|
+
<!--<h2 style="margin-top: 10px">当前连续收款金额: {{sustainMoney}}</h2>-->
|
|
10
|
+
<!--</div>-->
|
|
11
|
+
<div>
|
|
12
|
+
<charge-list :row="row" @select-oper="showWork" @dblclick="toBusiness" @deal-msg="dealMsg"
|
|
13
|
+
v-ref:list></charge-list>
|
|
14
|
+
|
|
15
|
+
<div class="auto" style="margin-top: 1%;" v-if="row">
|
|
16
|
+
<charge-oper :data.sync="row" :card-info="cardInfo" v-ref:oper></charge-oper>
|
|
17
|
+
</div>
|
|
18
|
+
</div>
|
|
19
|
+
</div>
|
|
20
|
+
</div>
|
|
21
|
+
<div class="binary-right" style="width:22%" >
|
|
22
|
+
<ul class="nav nav-pills span" style="height:auto;margin:8px 0px;padding:4px 0;border-bottom: 1px solid #e7e7e7;" class="nav nav-tabs" >
|
|
23
|
+
<li ><a :style="selectFiled == '其他信息'?'color:#333333!important;':'color:#666666!important;'" :class="{'tel_voiceActive':selectFiled == '其他信息','tel_f_size':selectFiled != '其他信息'}" href="#" @click="setField('其他信息')">其他信息</a></li>
|
|
24
|
+
<li ><a :style="selectFiled == '历史操作'?'color:#333333!important;':'color:#666666!important;'" :class="{'tel_voiceActive':selectFiled == '历史操作','tel_f_size':selectFiled != '历史操作'}" href="#" @click="setField('历史操作')">历史操作</a></li>
|
|
25
|
+
<li v-if="row ?row.f_meter_type=='机表' : false"><a :style="selectFiled == '历史抄表'?'color:#333333!important;':'color:#666666!important;'" :class="{'tel_voiceActive':selectFiled == '历史抄表','tel_f_size':selectFiled != '历史抄表'}" href="#" @click="setField('历史抄表')">历史抄表</a></li>
|
|
26
|
+
</ul>
|
|
27
|
+
<div class="tab-content span" style="overflow-y: auto">
|
|
28
|
+
<otherinfo v-show="worktype === '其他信息'" style="height:auto" @deal-msg="dealMsg" :data="row" :card-data="cardInfo" v-ref:info></otherinfo>
|
|
29
|
+
<card-list v-show="worktype === '历史操作'" :btns="operatebtn" :f_orgid="f_orgid" :userinfoid="row ? row.f_userinfo_code : ''" @list-select-oper="recordCancel"
|
|
30
|
+
v-ref:card></card-list>
|
|
31
|
+
<hand-list v-if="worktype === '历史抄表'" :f_userfiles_id="row ? row.f_userfiles_id : ''" v-ref:hand></hand-list>
|
|
32
|
+
</div>
|
|
33
|
+
|
|
34
|
+
</div>
|
|
35
|
+
|
|
36
|
+
</div>
|
|
37
|
+
<div v-if="!listpage">
|
|
38
|
+
<user-info-detail-manage-new parentname="charge-manage" :f_userfiles_id="rowData.f_userfiles_id" @cancel-main="cancel" @cancel-re="cancelAndRefresh"></user-info-detail-manage-new>
|
|
39
|
+
</div>
|
|
40
|
+
<div v-if="showModal">
|
|
41
|
+
<charge-modal :warninginfo="warningInfo" :row="modalrow" :modal-show.sync="showModal" @close="close" @modalsuccess="modalsuccess"></charge-modal>
|
|
42
|
+
</div>
|
|
43
|
+
</template>
|
|
44
|
+
<script>
|
|
45
|
+
import ChargeOper from './ChargeOper'
|
|
46
|
+
import {HttpResetClass} from "vue-client";
|
|
47
|
+
|
|
48
|
+
export default {
|
|
49
|
+
title: '收费(综合)',
|
|
50
|
+
components: { ChargeOper },
|
|
51
|
+
data () {
|
|
52
|
+
return {
|
|
53
|
+
sustainMoney: null,
|
|
54
|
+
// 页面开关
|
|
55
|
+
listpage: true,
|
|
56
|
+
f_orgid: '',
|
|
57
|
+
row: null,
|
|
58
|
+
cardInfo: null,
|
|
59
|
+
warningInfo: null,
|
|
60
|
+
modalrow: null,
|
|
61
|
+
showModal: false,
|
|
62
|
+
rowData: {},
|
|
63
|
+
dibao_remind: this.$appdata.getSingleValue('低保快到期提醒') ? this.$appdata.getSingleValue('低保快到期提醒') : 0,
|
|
64
|
+
reSearchShowMsy: !!this.$appdata.getSingleValue('收费后验证'),
|
|
65
|
+
show: [true],
|
|
66
|
+
selectFiled: '其他信息',
|
|
67
|
+
worktype: '其他信息',
|
|
68
|
+
searchTime: 1000,
|
|
69
|
+
interval: null
|
|
70
|
+
}
|
|
71
|
+
},
|
|
72
|
+
destroyed () {
|
|
73
|
+
if(this.$appdata.getSingleValue('磁条卡读卡间隔')) {
|
|
74
|
+
clearInterval(this.interval)
|
|
75
|
+
}
|
|
76
|
+
},
|
|
77
|
+
ready () {
|
|
78
|
+
if(this.$appdata.getSingleValue('磁条卡读卡间隔')){
|
|
79
|
+
this.searchTime = this.$appdata.getSingleValue('磁条卡读卡间隔')
|
|
80
|
+
this.readCiTiaoCard()
|
|
81
|
+
}
|
|
82
|
+
this.setsustainMoney()
|
|
83
|
+
},
|
|
84
|
+
methods: {
|
|
85
|
+
async readCiTiaoCard () {
|
|
86
|
+
console.log('读磁条卡,开始,不停的循环')
|
|
87
|
+
let data = {}
|
|
88
|
+
let getUser = {data: []}
|
|
89
|
+
let forgid = this.$login.convertToIn([this.$login.f.orgid])
|
|
90
|
+
try {
|
|
91
|
+
this.interval = setInterval(() => {
|
|
92
|
+
// 1秒一轮回
|
|
93
|
+
let http = new HttpResetClass()
|
|
94
|
+
http.load('POST', 'http://127.0.0.1:8003/ReadCard_HEC', data, {
|
|
95
|
+
resolveMsg: null,
|
|
96
|
+
rejectMsg: null
|
|
97
|
+
}).then(async res => {
|
|
98
|
+
if (res.data.CardID !== '') {
|
|
99
|
+
if (res.data.Err === null && res.data.Exception) {
|
|
100
|
+
this.$showAlert(res.data.Exception, 'danger', 2000)
|
|
101
|
+
// clearInterval(interval)
|
|
102
|
+
} else {
|
|
103
|
+
if (res.data.Factory === 'CiTiao') {
|
|
104
|
+
// 获取用户信息
|
|
105
|
+
getUser = await this.$resetpost('rs/sql/sale_getUser', {
|
|
106
|
+
data: {
|
|
107
|
+
condition: `u.f_filialeid in ${forgid} and gb.f_meter_type in ('机表','物联网表') and i.f_userinfo_code='${res.data.CardID}'`,
|
|
108
|
+
orderitem: `f_userinfo_id`
|
|
109
|
+
}
|
|
110
|
+
}, {resolveMsg: null, rejectMsg: '读卡失败'})
|
|
111
|
+
this.$refs.list.model.rows = getUser.data
|
|
112
|
+
if (!this.row || (this.row && this.row.f_userinfo_code != getUser.data[0].f_userinfo_code)) {
|
|
113
|
+
await this.toBusiness(getUser.data[0])
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
})
|
|
119
|
+
}, this.searchTime * 1000)
|
|
120
|
+
} catch (error) {
|
|
121
|
+
console.log('捕获到异常', error)
|
|
122
|
+
}
|
|
123
|
+
},
|
|
124
|
+
setsustainMoney () {
|
|
125
|
+
this.sustainMoney = window.localStorage.getItem('sustainMoney')
|
|
126
|
+
},
|
|
127
|
+
setField (type) {
|
|
128
|
+
this.selectFiled = type
|
|
129
|
+
this.worktype = type
|
|
130
|
+
},
|
|
131
|
+
async toBusiness (obj) {
|
|
132
|
+
console.log('双击列表的时候传进来的数据:', obj)
|
|
133
|
+
if (!(obj instanceof Event)) {
|
|
134
|
+
// 对此数据进行验证
|
|
135
|
+
if (await this.validateRow(obj)) {
|
|
136
|
+
// 获取未写卡或者写卡失败记录
|
|
137
|
+
let getUnWriteSell = await this.$SqlService.singleTable('t_sellinggas', `f_state = '有效' and (f_write_card = '未写卡' or (f_write_card = '写卡失败' and f_operate_date >= DATEADD(HOUR, -3, GETDATE()))) and f_userfiles_id = '${obj.f_userfiles_id}'`)
|
|
138
|
+
console.log('获取未写卡记录', getUnWriteSell)
|
|
139
|
+
if (getUnWriteSell.data.length > 1) {
|
|
140
|
+
this.$showAlert('此卡已缴费多次未写卡。请核实后处理!!', 'warning', 5000)
|
|
141
|
+
} else {
|
|
142
|
+
this.row = obj
|
|
143
|
+
this.row.unWriteSell = getUnWriteSell.data
|
|
144
|
+
this.cardInfo = this.$refs.list.cardInfo
|
|
145
|
+
this.$refs.list.criteriaShow = false
|
|
146
|
+
// 将列表只显示该条数据
|
|
147
|
+
this.$refs.list.refreshRow(obj)
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
},
|
|
152
|
+
close () {
|
|
153
|
+
this.showModal = false
|
|
154
|
+
this.warningInfo = null
|
|
155
|
+
this.clean()
|
|
156
|
+
this.$refs.list.search()
|
|
157
|
+
// this.$refs.card.search()
|
|
158
|
+
},
|
|
159
|
+
async validateRow (obj) {
|
|
160
|
+
console.log('查看传进来的参数:', obj)
|
|
161
|
+
this.warningInfo = await this.$resetpost('rs/logic/getWarningMsg',
|
|
162
|
+
{data: {
|
|
163
|
+
f_userfiles_id: obj.f_userfiles_id,
|
|
164
|
+
f_userinfo_code: obj.f_userinfo_code,
|
|
165
|
+
f_userinfo_id: obj.f_userinfo_id
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
, {resolveMsg: '', rejectMsg: '获取提示失败'})
|
|
169
|
+
if (this.warningInfo.data.warningNum > 0 && obj.f_user_state !== '预备') {
|
|
170
|
+
this.modalrow = obj
|
|
171
|
+
this.showModal = true
|
|
172
|
+
return false
|
|
173
|
+
} else {
|
|
174
|
+
return true
|
|
175
|
+
}
|
|
176
|
+
},
|
|
177
|
+
clean () {
|
|
178
|
+
this.row = null
|
|
179
|
+
this.cardInfo = null
|
|
180
|
+
},
|
|
181
|
+
clearCondition () {
|
|
182
|
+
Object.keys(this.$refs.list.$refs.paged.$refs.cri.model).forEach((key) => {
|
|
183
|
+
console.log('key', key)
|
|
184
|
+
console.log('对应啥数据', this.$refs.list.$refs.paged.$refs.cri.model[key])
|
|
185
|
+
this.$refs.list.$refs.paged.$refs.cri.model[key] = []
|
|
186
|
+
})
|
|
187
|
+
// console.log('清数据。。。', this.$refs.list.$refs.paged.$refs.grid.model.rows)
|
|
188
|
+
// this.$set('$refs.list.$refs.paged.$refs.grid.model.rows', [])
|
|
189
|
+
},
|
|
190
|
+
dealMsg (obj) {
|
|
191
|
+
console.log('==================obj', obj)
|
|
192
|
+
this.listpage = false
|
|
193
|
+
this.rowData = obj
|
|
194
|
+
},
|
|
195
|
+
cancel (obj) {
|
|
196
|
+
this.listpage = true
|
|
197
|
+
},
|
|
198
|
+
cancelAndRefresh (obj) {
|
|
199
|
+
this.listpage = true
|
|
200
|
+
this.clean()
|
|
201
|
+
this.clearCondition()
|
|
202
|
+
this.$refs.list.searchNoData()
|
|
203
|
+
this.$refs.card.search()
|
|
204
|
+
},
|
|
205
|
+
modalsuccess (obj) {
|
|
206
|
+
this.showModal = false
|
|
207
|
+
this.$refs.list.criteriaShow = false
|
|
208
|
+
this.row = obj
|
|
209
|
+
this.cardInfo = this.$refs.list.cardInfo
|
|
210
|
+
// 将列表只显示该条数据
|
|
211
|
+
this.$refs.list.refreshRow(obj)
|
|
212
|
+
},
|
|
213
|
+
async serRow (obj) {
|
|
214
|
+
let newdata = await this.$resetpost('rs/sql/sale_getUser', {
|
|
215
|
+
data: {condition: `i.f_userinfo_code='${obj.f_userinfo_code}' and u.f_filialeid = '${obj.f_filialeid}'`, orderitem: `f_userinfo_id Desc`}
|
|
216
|
+
}, {resolveMsg: null, rejectMsg: '获取用户信息失败'})
|
|
217
|
+
this.toBusiness(newdata.data[0])
|
|
218
|
+
// this.$refs.list.search()
|
|
219
|
+
}
|
|
220
|
+
},
|
|
221
|
+
events: {
|
|
222
|
+
'error' (name, row, res) {
|
|
223
|
+
this.clean()
|
|
224
|
+
},
|
|
225
|
+
'row' (val) {
|
|
226
|
+
|
|
227
|
+
},
|
|
228
|
+
|
|
229
|
+
'success' (name, row, res) {
|
|
230
|
+
this.setsustainMoney()
|
|
231
|
+
// name === '发卡售气' ? this.$refs.list.toNext(this.index) : null
|
|
232
|
+
if (name === '机表收费确认') {
|
|
233
|
+
this.serRow(row)
|
|
234
|
+
return
|
|
235
|
+
}
|
|
236
|
+
if (name === '卡表收费' && this.reSearchShowMsy) {
|
|
237
|
+
this.$refs.list.$refs.paged.$refs.cri.$refs.readcard.readCard()
|
|
238
|
+
this.$refs.oper.noButton = false
|
|
239
|
+
return
|
|
240
|
+
}
|
|
241
|
+
if (name === '物联网收费' && this.reSearchShowMsy) {
|
|
242
|
+
this.serRow(row)
|
|
243
|
+
return
|
|
244
|
+
}
|
|
245
|
+
console.log('成功事件')
|
|
246
|
+
this.clean()
|
|
247
|
+
this.$refs.list.search()
|
|
248
|
+
// this.clearCondition()
|
|
249
|
+
// this.$refs.card.search()
|
|
250
|
+
// this.$refs.info.$refs.recordstoryinfo.getdata()
|
|
251
|
+
},
|
|
252
|
+
'clean' (row) {
|
|
253
|
+
// this.$refs.list.singleRefresh(row)
|
|
254
|
+
this.clean()
|
|
255
|
+
},
|
|
256
|
+
'refresh' () {
|
|
257
|
+
this.setsustainMoney()
|
|
258
|
+
this.clean()
|
|
259
|
+
this.clearCondition()
|
|
260
|
+
this.$refs.list.searchNoData()
|
|
261
|
+
this.$refs.card.search()
|
|
262
|
+
},
|
|
263
|
+
'resflushvalue' () {
|
|
264
|
+
this.$refs.info.$refs.valueaddinfo.reflush()
|
|
265
|
+
},
|
|
266
|
+
'resflushrowdata' () {
|
|
267
|
+
this.toBusiness(this.row)
|
|
268
|
+
},
|
|
269
|
+
'resflushdata' (data) {
|
|
270
|
+
this.toBusiness(data)
|
|
271
|
+
},
|
|
272
|
+
'refreshrow' (val) {
|
|
273
|
+
console.log(val)
|
|
274
|
+
this.row = val
|
|
275
|
+
this.$refs.list.refreshRow(val)
|
|
276
|
+
// this.$refs.card.search()
|
|
277
|
+
},
|
|
278
|
+
'cancelclean' (row) {
|
|
279
|
+
this.clean()
|
|
280
|
+
this.$refs.list.searchNoData()
|
|
281
|
+
// this.$refs.card.search()
|
|
282
|
+
}
|
|
283
|
+
},
|
|
284
|
+
watch: {
|
|
285
|
+
'row' () {
|
|
286
|
+
// this.$refs.tab.$el.click()
|
|
287
|
+
}
|
|
288
|
+
}
|
|
289
|
+
}
|
|
290
|
+
</script>
|
|
291
|
+
<style>
|
|
292
|
+
.basic-main {
|
|
293
|
+
width: 79%;
|
|
294
|
+
}
|
|
295
|
+
.tel_voiceActive{
|
|
296
|
+
font-family: PingFang-SC-Bold;
|
|
297
|
+
font-size: 16px;
|
|
298
|
+
font-weight: normal!important;
|
|
299
|
+
font-stretch: normal!important;
|
|
300
|
+
line-height: 18px;
|
|
301
|
+
letter-spacing: 0px;
|
|
302
|
+
color: #333333!important;
|
|
303
|
+
border-bottom: 3px solid #599fe5;
|
|
304
|
+
padding:10px 10px!important;
|
|
305
|
+
}
|
|
306
|
+
.tel_f_size{
|
|
307
|
+
font-family: PingFang-SC-Medium;
|
|
308
|
+
font-size: 16px;
|
|
309
|
+
font-weight: normal;
|
|
310
|
+
font-stretch: normal;
|
|
311
|
+
line-height: 18px;
|
|
312
|
+
letter-spacing: 0px;
|
|
313
|
+
color: #666666!important;
|
|
314
|
+
padding:10px 10px!important;
|
|
315
|
+
}
|
|
316
|
+
</style>
|
|
@@ -0,0 +1,319 @@
|
|
|
1
|
+
<template>
|
|
2
|
+
<div class="form-inline" style="height: auto">
|
|
3
|
+
<div class="form-group" v-for="btn in operBtns">
|
|
4
|
+
<button :id="btn.name" type="button"
|
|
5
|
+
:style="['其他欠费','调价补差'].includes(btn.name) ?'color:#CA2C16':'color:black'"
|
|
6
|
+
:class="[($index === 0) ? 'btn btn-click' : 'btn btn-un-click']" @click="business(btn)"
|
|
7
|
+
:disabled="noButton"><span
|
|
8
|
+
:style="['其他欠费','调价补差'].includes(btn.name) ?'color:#CA2C16':'color:black'">{{ btn.name }}</span>
|
|
9
|
+
</button>
|
|
10
|
+
|
|
11
|
+
</div>
|
|
12
|
+
</div>
|
|
13
|
+
<div v-show="isBusiness" style="height: auto" class="select-overspread">
|
|
14
|
+
<route v-ref:route></route>
|
|
15
|
+
</div>
|
|
16
|
+
<modal :show.sync="modalContornShow" backdrop="false" width="50%" title="提示信息">
|
|
17
|
+
<article slot="modal-body">
|
|
18
|
+
<div style="width:98%;margin: auto">
|
|
19
|
+
<p>该用户未签合同请问是否进行签约</p>
|
|
20
|
+
</div>
|
|
21
|
+
</article>
|
|
22
|
+
<footer slot="modal-footer" class="modal-footer" style="border: 0">
|
|
23
|
+
<button class="button_search" @click="abolishcontr()">取消</button>
|
|
24
|
+
<button class="button_search" @click="confcontor()">确认</button>
|
|
25
|
+
</footer>
|
|
26
|
+
</modal>
|
|
27
|
+
<contract-signing :show="contractShow" @toggle="eticket_toggle" v-ref:contractbill></contract-signing>
|
|
28
|
+
</template>
|
|
29
|
+
|
|
30
|
+
<script>
|
|
31
|
+
import {HttpResetClass} from 'vue-client'
|
|
32
|
+
import Vue from 'vue'
|
|
33
|
+
|
|
34
|
+
let getNewmetermsg = async function (self, row) {
|
|
35
|
+
self.cardInfo = undefined
|
|
36
|
+
if (row.f_userfiles_id && row.f_userfiles_id.length > 0) {
|
|
37
|
+
// 获取用户信息
|
|
38
|
+
let getUser = await self.$resetpost('rs/sql/sale_getUser', {
|
|
39
|
+
data: {
|
|
40
|
+
condition: `u.f_userfiles_id='${row.f_userfiles_id}' `,
|
|
41
|
+
orderitem: `u.f_userfiles_id Desc`
|
|
42
|
+
}
|
|
43
|
+
}, {resolveMsg: '读卡新的用户成功', rejectMsg: '读卡新的用户失败'})
|
|
44
|
+
if (getUser.data.length > 0) {
|
|
45
|
+
await self.$showAlert('换表成功', 'success', 200)
|
|
46
|
+
self.data = getUser.data[0]
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
let getBtnsGen = async function (self) {
|
|
51
|
+
let http = new HttpResetClass()
|
|
52
|
+
let param = {
|
|
53
|
+
f_userfiles_id: self.data.f_userfiles_id
|
|
54
|
+
}
|
|
55
|
+
if (self.cardInfo) {
|
|
56
|
+
param.cardInfo = self.cardInfo
|
|
57
|
+
}
|
|
58
|
+
let res = await http.load('POST', 'rs/logic/getOperBtns', {
|
|
59
|
+
data: param
|
|
60
|
+
}, {
|
|
61
|
+
resolveMsg: null,
|
|
62
|
+
rejectMsg: '获取业务按钮失败!!'
|
|
63
|
+
})
|
|
64
|
+
let getBtns = res.data
|
|
65
|
+
console.log('获取的业务按钮', getBtns)
|
|
66
|
+
console.log('有没有用户信息', self.data)
|
|
67
|
+
if (self.$login.r.length === 0) {
|
|
68
|
+
self.$showAlert('您没有相关的业务操作权限, 请联系管理员!!', 'warning', 2000)
|
|
69
|
+
} else {
|
|
70
|
+
self.temp = []
|
|
71
|
+
for (let i = 0; i < getBtns.length; i++) {
|
|
72
|
+
// 不需要权限的按钮
|
|
73
|
+
let noInclude = getBtns[i].name === '垃圾费收费'
|
|
74
|
+
if (noInclude || self.$login.r.includes(getBtns[i].name)) {
|
|
75
|
+
// 进行权限验证
|
|
76
|
+
if (getBtns[i].name === '换表&清零') {
|
|
77
|
+
self.temp.push({
|
|
78
|
+
name: '换表',
|
|
79
|
+
value: getBtns[i].value
|
|
80
|
+
})
|
|
81
|
+
if (self.data.f_totalsplit_type !== '总表') {
|
|
82
|
+
self.temp.push({
|
|
83
|
+
name: '清零',
|
|
84
|
+
value: {
|
|
85
|
+
'weight': getBtns[i].value.weight,
|
|
86
|
+
'routeName': 'reset-meter'
|
|
87
|
+
}
|
|
88
|
+
})
|
|
89
|
+
}
|
|
90
|
+
} else {
|
|
91
|
+
self.temp.push(getBtns[i])
|
|
92
|
+
}
|
|
93
|
+
console.log(self.temp[i])
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
// 如果有未写卡记录,添加线下写卡按钮
|
|
97
|
+
if (self.data.unWriteSell) {
|
|
98
|
+
if (self.data.unWriteSell.length > 0) {
|
|
99
|
+
self.temp.push({
|
|
100
|
+
name: '线下写卡',
|
|
101
|
+
value: {
|
|
102
|
+
'weight': 0,
|
|
103
|
+
'routeName': 'un-write-card-center'
|
|
104
|
+
}
|
|
105
|
+
})
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
if (self.data.f_user_nature === '单位') {
|
|
109
|
+
self.temp.push({
|
|
110
|
+
name: '维管收费',
|
|
111
|
+
value: {
|
|
112
|
+
'weight': 5,
|
|
113
|
+
'routeName': 'repair-charge'
|
|
114
|
+
}
|
|
115
|
+
})
|
|
116
|
+
}
|
|
117
|
+
if (self.data.f_meter_type === '物联网表') {
|
|
118
|
+
if (self.data.f_hascard === '是') {
|
|
119
|
+
if (self.data.f_whether_hairpin === '未发') {
|
|
120
|
+
if (self.data.f_share_times !== '' && self.data.f_share_times === '是' && self.data.f_times > 0) {
|
|
121
|
+
self.temp.push({
|
|
122
|
+
name: '补卡',
|
|
123
|
+
value: {
|
|
124
|
+
'weight': 2,
|
|
125
|
+
'routeName': 'replace-card-manage'
|
|
126
|
+
}
|
|
127
|
+
})
|
|
128
|
+
} else {
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
// 如果卡上有气,添加购气撤销按钮
|
|
134
|
+
if (self.cardInfo && (self.cardInfo.Gas > 0 || self.cardInfo.Money > 0 || (self.cardInfo.TotalMoney > 0 && self.data.f_support_purchase === '是'))) {
|
|
135
|
+
self.temp.push({
|
|
136
|
+
name: '购气撤销',
|
|
137
|
+
value: {
|
|
138
|
+
'weight': 0,
|
|
139
|
+
'routeName': 'card-meter-charge-cancel'
|
|
140
|
+
}
|
|
141
|
+
})
|
|
142
|
+
if (self.data.unWriteSell && self.data.unWriteSell.length > 0) {
|
|
143
|
+
// 过滤掉线下写卡
|
|
144
|
+
self.temp = self.temp.filter((item) => {
|
|
145
|
+
return item.name !== '线下写卡'
|
|
146
|
+
})
|
|
147
|
+
self.data.unWriteSell.forEach(
|
|
148
|
+
async (item) => {
|
|
149
|
+
let sql = `update t_sellinggas set f_write_card = null where id = '${item.id}' and f_write_card ='写卡失败'`
|
|
150
|
+
await self.$resetpost('rs/logic/runSQL', { sql: sql })
|
|
151
|
+
}
|
|
152
|
+
)
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
/* // 如果是预备户,删除发卡售气按钮
|
|
156
|
+
if (self.data.f_user_state == '预备') {
|
|
157
|
+
self.temp.splice(self.temp.findIndex(item => item.name === '发卡售气'), 1)
|
|
158
|
+
} */
|
|
159
|
+
|
|
160
|
+
// 根据权重将业务按钮排序
|
|
161
|
+
self.operBtns = self.temp.sort((a, b) => {
|
|
162
|
+
return a.value.weight - b.value.weight
|
|
163
|
+
})
|
|
164
|
+
|
|
165
|
+
// 当有调价补差时,只展示调价补差按钮
|
|
166
|
+
let adjustSenders = self.operBtns.find((row) => {
|
|
167
|
+
return row.name == '调价补差'
|
|
168
|
+
})
|
|
169
|
+
if (adjustSenders) {
|
|
170
|
+
self.operBtns = []
|
|
171
|
+
self.operBtns.push(adjustSenders)
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
if (self.operBtns.length > 0) {
|
|
175
|
+
self.isBusiness = true
|
|
176
|
+
self.$refs.route.init(self.operBtns[0].value.routeName, {row: self.data, cardData: self.cardInfo})
|
|
177
|
+
self.styleChange(self.operBtns[0])
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
// 判断是否签订合同
|
|
181
|
+
console.log('----------111-------------')
|
|
182
|
+
console.log(self.data)
|
|
183
|
+
console.log('-----------1111------------')
|
|
184
|
+
if (self.data.f_is_signature !== '是') {
|
|
185
|
+
self.modalContornShow = true
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
export default {
|
|
190
|
+
title: '业务操作',
|
|
191
|
+
data() {
|
|
192
|
+
return {
|
|
193
|
+
operBtns: [],
|
|
194
|
+
isBusiness: false,
|
|
195
|
+
modalContornShow: false,
|
|
196
|
+
contractShow: false,
|
|
197
|
+
userinfoid: '',
|
|
198
|
+
noButton: false // 业务请求时禁止按钮点击
|
|
199
|
+
}
|
|
200
|
+
},
|
|
201
|
+
props: ['data', 'cardInfo'],
|
|
202
|
+
ready() {
|
|
203
|
+
getBtnsGen(this)
|
|
204
|
+
console.log('data,cardInfo', this.data, this.cardInfo)
|
|
205
|
+
|
|
206
|
+
},
|
|
207
|
+
methods: {
|
|
208
|
+
eticket_toggle () {
|
|
209
|
+
this.contractShow = false
|
|
210
|
+
},
|
|
211
|
+
confcontor () {
|
|
212
|
+
this.contractShow = true
|
|
213
|
+
this.modalContornShow = false
|
|
214
|
+
this.$refs.contractbill.getContractData(this.data.f_userinfo_id)
|
|
215
|
+
},
|
|
216
|
+
abolishcontr () {
|
|
217
|
+
this.modalContornShow = false
|
|
218
|
+
},
|
|
219
|
+
business (btn) {
|
|
220
|
+
// // 处理按钮样式
|
|
221
|
+
// this.styleChange(btn.name)
|
|
222
|
+
// this.isBusiness = true
|
|
223
|
+
// this.$refs.route.init(btn.value.routeName, {row: this.data, cardData: this.cardInfo})
|
|
224
|
+
if (this.$refs.route.cards.length > 0) {
|
|
225
|
+
if (this.$refs.route.cards[0].title == '增值服务管理') {
|
|
226
|
+
this.$showMessage('切换页面后,当前页面数据会丢失,是否切换?', ['confirm', 'cancel']).then(res => {
|
|
227
|
+
if (res == 'cancel') {
|
|
228
|
+
return;
|
|
229
|
+
} else {
|
|
230
|
+
// 处理按钮样式
|
|
231
|
+
this.styleChange(btn.name)
|
|
232
|
+
this.isBusiness = true
|
|
233
|
+
this.$refs.route.init(btn.value.routeName, {row: this.data, cardData: this.cardInfo})
|
|
234
|
+
}
|
|
235
|
+
})
|
|
236
|
+
} else {
|
|
237
|
+
// 处理按钮样式
|
|
238
|
+
this.styleChange(btn.name)
|
|
239
|
+
this.isBusiness = true
|
|
240
|
+
this.$refs.route.init(btn.value.routeName, {row: this.data, cardData: this.cardInfo})
|
|
241
|
+
}
|
|
242
|
+
}
|
|
243
|
+
},
|
|
244
|
+
|
|
245
|
+
styleChange(name) {
|
|
246
|
+
this.operBtns.forEach((res) => {
|
|
247
|
+
if (res.name === name) {
|
|
248
|
+
if (document.getElementById(res.name)) {
|
|
249
|
+
document.getElementById(res.name).style.backgroundColor = '#6aa6e2'
|
|
250
|
+
document.getElementById(res.name).style.color = 'white'
|
|
251
|
+
}
|
|
252
|
+
} else {
|
|
253
|
+
if (document.getElementById(res.name)) {
|
|
254
|
+
document.getElementById(res.name).style.backgroundColor = 'white'
|
|
255
|
+
document.getElementById(res.name).style.color = 'black'
|
|
256
|
+
}
|
|
257
|
+
}
|
|
258
|
+
})
|
|
259
|
+
}
|
|
260
|
+
},
|
|
261
|
+
watch: {
|
|
262
|
+
'data'() {
|
|
263
|
+
getBtnsGen(this)
|
|
264
|
+
}
|
|
265
|
+
},
|
|
266
|
+
events: {
|
|
267
|
+
'no-button'() {
|
|
268
|
+
this.noButton = true
|
|
269
|
+
},
|
|
270
|
+
'has-button'() {
|
|
271
|
+
this.noButton = false
|
|
272
|
+
},
|
|
273
|
+
'get-new-row'(row) {
|
|
274
|
+
console.log('xxxxxx', row)
|
|
275
|
+
// 发生换表成功
|
|
276
|
+
getNewmetermsg(this, row)
|
|
277
|
+
},
|
|
278
|
+
'toroute' (buttonObj, data) {
|
|
279
|
+
console.log('指定按钮。。', buttonObj)
|
|
280
|
+
this.$resetpost('rs/sql/sale_getUser', {
|
|
281
|
+
data: {condition: `i.f_userinfo_code='${data.f_userinfo_code}' and u.f_filialeid = '${data.f_filialeid}'`, orderitem: `f_userinfo_id Desc`}
|
|
282
|
+
}, {resolveMsg: null, rejectMsg: '获取用户信息失败'}).then((res)=>{
|
|
283
|
+
if (buttonObj) {
|
|
284
|
+
this.$dispatch('resflushdata', res.data[0])
|
|
285
|
+
this.styleChange(buttonObj.name)
|
|
286
|
+
this.$refs.route.init(buttonObj.value, {row: res.data[0]})
|
|
287
|
+
}
|
|
288
|
+
})
|
|
289
|
+
},
|
|
290
|
+
'button-specifies'(buttonObj, data) {
|
|
291
|
+
console.log('指定按钮。。', buttonObj)
|
|
292
|
+
// buttonObj 格式: {name:'机表收费', value: 'machine-meter-center'}
|
|
293
|
+
if (buttonObj) {
|
|
294
|
+
this.styleChange(buttonObj.name)
|
|
295
|
+
this.$refs.route.init(buttonObj.value, {row: data})
|
|
296
|
+
}
|
|
297
|
+
}
|
|
298
|
+
}
|
|
299
|
+
}
|
|
300
|
+
</script>
|
|
301
|
+
|
|
302
|
+
<style scoped>
|
|
303
|
+
|
|
304
|
+
.btn-click {
|
|
305
|
+
background-color: #6aa6e2;
|
|
306
|
+
border-radius: 5px;
|
|
307
|
+
color: white;
|
|
308
|
+
/*border-color: black;*/
|
|
309
|
+
border: solid 1px #c7c7c7;
|
|
310
|
+
}
|
|
311
|
+
|
|
312
|
+
.btn-un-click {
|
|
313
|
+
background-color: white;
|
|
314
|
+
border-radius: 5px;
|
|
315
|
+
color: black;
|
|
316
|
+
/*border-color: black;*/
|
|
317
|
+
border: solid 1px #c7c7c7;
|
|
318
|
+
}
|
|
319
|
+
</style>
|
|
@@ -14,6 +14,10 @@ export default function () {
|
|
|
14
14
|
Vue.component('un-write-card-center', (resolve) => { require(['./UnWriteCardCenter'], resolve) })
|
|
15
15
|
// 当前选择用户的用户基本信息
|
|
16
16
|
Vue.component('sale-userinfo', (resolve) => { require(['./Userinfo'], resolve) })
|
|
17
|
+
// 售气收费 --收费gas-move
|
|
18
|
+
Vue.component('charge-manage', (resolve) => { require(['./ChargeManage'], resolve) })
|
|
19
|
+
// 业务操作组件
|
|
20
|
+
Vue.component('charge-oper', (resolve) => { require(['./ChargeOper'], resolve) })
|
|
17
21
|
// 卡表收费
|
|
18
22
|
Vue.component('card-meter-center', (resolve) => { require(['./CardMeterCenter'], resolve) })
|
|
19
23
|
// 物联网表收费
|
|
@@ -22,4 +26,5 @@ export default function () {
|
|
|
22
26
|
Vue.component('machine-meter-center', (resolve) => { require(['./MachineMeterCenter'], resolve) })
|
|
23
27
|
// 其他收费xin
|
|
24
28
|
Vue.component('other-charge-new', (resolve) => { require(['./OtherChargeNew'], resolve) })
|
|
29
|
+
|
|
25
30
|
}
|
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
<label class="font_normal_body" title="归属日期" >开始时间</label>
|
|
10
10
|
<datepicker :format="'yyyy-MM-dd'" :value.sync="model.f_start_date"
|
|
11
11
|
class="datepicker"
|
|
12
|
-
condition="
|
|
12
|
+
condition="f_input_date >= '{} 00:00:00' "
|
|
13
13
|
placeholder="起始时间"
|
|
14
14
|
style="width:60%"
|
|
15
15
|
v-model="model.f_start_date"
|
|
@@ -19,7 +19,7 @@
|
|
|
19
19
|
<label class="font_normal_body" title="归属日期">结束时间</label>
|
|
20
20
|
<datepicker :format="'yyyy-MM-dd'" :value.sync="model.f_end_date"
|
|
21
21
|
class="datepicker"
|
|
22
|
-
condition="
|
|
22
|
+
condition="f_input_date <= '{} 23:59:59' "
|
|
23
23
|
placeholder="结束时间"
|
|
24
24
|
style="width:60%"
|
|
25
25
|
v-model="model.f_end_date"
|
|
@@ -0,0 +1,168 @@
|
|
|
1
|
+
|
|
2
|
+
import co from 'co'
|
|
3
|
+
|
|
4
|
+
let socket
|
|
5
|
+
let _this
|
|
6
|
+
export let dictGetArray = new Array()
|
|
7
|
+
export let htmlPath = 'c:\\sign\\suite\\frame\\'
|
|
8
|
+
//打开签字 js 模块
|
|
9
|
+
export function jsign_open(self) {
|
|
10
|
+
let gen = connectGen(self)
|
|
11
|
+
return co(gen)
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
let connectGen = function * (self){
|
|
15
|
+
var serverclosed = 1;
|
|
16
|
+
var host = "ws://localhost:81/test";
|
|
17
|
+
_this = self
|
|
18
|
+
try{
|
|
19
|
+
socket = new WebSocket(host);
|
|
20
|
+
socket.onopen = () =>{
|
|
21
|
+
console.log('onopen')
|
|
22
|
+
serverclosed = 0;
|
|
23
|
+
console.log('open的serverclosed',serverclosed)
|
|
24
|
+
socket.send('0'+'jsign');
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
socket.onmessage = (msg) =>{
|
|
28
|
+
console.log('接受消息',msg)
|
|
29
|
+
var str = "";
|
|
30
|
+
str = msg.data;
|
|
31
|
+
var id = str.substr(0, 1);
|
|
32
|
+
var separator = str.indexOf("|");
|
|
33
|
+
var arg1 = "";
|
|
34
|
+
var arg2 = "";
|
|
35
|
+
if(separator != -1) {
|
|
36
|
+
arg1 = str.substr(1, separator-1);
|
|
37
|
+
arg2 = str.substr(separator+1);
|
|
38
|
+
}
|
|
39
|
+
else
|
|
40
|
+
arg1 = str.substr(1);
|
|
41
|
+
|
|
42
|
+
if(id == "0"){
|
|
43
|
+
|
|
44
|
+
}
|
|
45
|
+
if(id == "1"){
|
|
46
|
+
var buf = arg1.substr(0,4);
|
|
47
|
+
if(buf == 'sign') {
|
|
48
|
+
console.log('buuf')
|
|
49
|
+
jsign_sign_callback();
|
|
50
|
+
}
|
|
51
|
+
if(buf == 'get_') {
|
|
52
|
+
buf = arg1.substr(4);
|
|
53
|
+
var separator = buf.indexOf("_");
|
|
54
|
+
if(separator != -1) {
|
|
55
|
+
jsign_get_callback(buf.substr(0, separator), buf.substr(separator+1));
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
socket.onclose = function(){
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
} catch(exception){
|
|
65
|
+
console.log('异常信息',exception)
|
|
66
|
+
jsign_error_callback(2)
|
|
67
|
+
}
|
|
68
|
+
setTimeout(() => {
|
|
69
|
+
if( serverclosed == 1){
|
|
70
|
+
console.log('最后的serverclosed',serverclosed)
|
|
71
|
+
jsign_error_callback(1);
|
|
72
|
+
}
|
|
73
|
+
},2000);
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
|
|
77
|
+
|
|
78
|
+
|
|
79
|
+
//缓存有名字符串,按 key 存储
|
|
80
|
+
export function jsign_set_string(key,value){
|
|
81
|
+
var cmd = '1' + 'set_' + key + '_' + value;
|
|
82
|
+
if (socket.readyState===1) {
|
|
83
|
+
socket.send(cmd);
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
//读取有名字符串,按 key 搜索
|
|
88
|
+
export function jsign_get_string(key) {
|
|
89
|
+
console.log('搜索')
|
|
90
|
+
var cmd = '1' + 'get_' + key;
|
|
91
|
+
if (socket.readyState===1) {
|
|
92
|
+
socket.send(cmd);
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
|
|
97
|
+
export function jsign_get_device_status() {
|
|
98
|
+
var cmd = '1' + 'get_device_status';
|
|
99
|
+
console.log('socket状态----',socket.readyState)
|
|
100
|
+
if (socket.readyState == 1) {
|
|
101
|
+
console.log('开始发送消息')
|
|
102
|
+
socket.send(cmd);
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
|
|
107
|
+
//启动欢迎页或者广告页
|
|
108
|
+
export function jsign_run_welcome(fullpath) {
|
|
109
|
+
var cmd = '1'+'welc'+fullpath;
|
|
110
|
+
if (socket.readyState===1) {
|
|
111
|
+
socket.send(cmd);
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
//启动签字页,传入签字完成处理函数
|
|
116
|
+
export function jsign_run_sign(fullpath) {
|
|
117
|
+
var cmd = '1'+'sign'+fullpath;
|
|
118
|
+
if (socket.readyState===1) {
|
|
119
|
+
socket.send(cmd);
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
|
|
124
|
+
//启动评估页,传入评估完成处理函数
|
|
125
|
+
export function jsign_run_eval(fullpath) {
|
|
126
|
+
var cmd = '1'+'eval'+fullpath;
|
|
127
|
+
if (socket.readyState===1) {
|
|
128
|
+
socket.send(cmd);
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
|
|
133
|
+
|
|
134
|
+
//错误反馈信息接收函数
|
|
135
|
+
function jsign_error_callback(msgcode){
|
|
136
|
+
/*
|
|
137
|
+
1. 服务程序没有工作
|
|
138
|
+
2. 运行时错误
|
|
139
|
+
*/
|
|
140
|
+
if(msgcode == 1){
|
|
141
|
+
_this.$showAlert('服务程序没有工作','danger',0)
|
|
142
|
+
return
|
|
143
|
+
}
|
|
144
|
+
if(msgcode == 2){
|
|
145
|
+
_this.$showAlert('运行时错误','danger',0)
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
//读取字符串处理函数
|
|
150
|
+
function jsign_get_callback(key, value){
|
|
151
|
+
console.log('处理字符串')
|
|
152
|
+
dictGetArray[key] = value;
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
|
|
156
|
+
//签字完成处理函数
|
|
157
|
+
function jsign_sign_callback(){
|
|
158
|
+
console.log('签字')
|
|
159
|
+
console.log(" dictGetArray", dictGetArray)
|
|
160
|
+
jsign_get_string('picture');
|
|
161
|
+
setTimeout(function(){
|
|
162
|
+
_this.imgstr = dictGetArray['picture']
|
|
163
|
+
_this.$showAlert('签字完成','success',2000);/*OutputLog(dictGetArray['picture']);*/
|
|
164
|
+
},500);
|
|
165
|
+
// setTimeout(function(){jsign_run_eval(demopath + 'eval.html');OutputLog('已推送评价页,请评价');},1000);
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
|
package/src/sale.js
CHANGED
|
@@ -1206,4 +1206,6 @@ export default function () {
|
|
|
1206
1206
|
Vue.component('host-meter-user-list', (resolve) => { require(['./components/FilesManage/HostMeterUserList'], resolve) })
|
|
1207
1207
|
Vue.component('add-host-meter-user-list', (resolve) => { require(['./components/FilesManage/AddHostMeterUserList'], resolve) })
|
|
1208
1208
|
Vue.component('add-sub-meter-user-list', (resolve) => { require(['./components/FilesManage/AddSubMeterUserList'], resolve) })
|
|
1209
|
+
// // 单户各表具用气量折断图
|
|
1210
|
+
Vue.component('contract-signing', (resolve) => { require(['./components/common/userinfo_detail/contractSigning'], resolve) })
|
|
1209
1211
|
}
|
package/src/sign.html
ADDED
|
@@ -0,0 +1,399 @@
|
|
|
1
|
+
<!DOCTYPE html>
|
|
2
|
+
<html lang="en">
|
|
3
|
+
<head>
|
|
4
|
+
<meta charset="UTF-8">
|
|
5
|
+
<title>签字页</title>
|
|
6
|
+
<style>
|
|
7
|
+
*{
|
|
8
|
+
padding: 0;
|
|
9
|
+
margin: 0;
|
|
10
|
+
}
|
|
11
|
+
.s_conLeft {
|
|
12
|
+
width: 700px;
|
|
13
|
+
height: 750px;
|
|
14
|
+
padding: 20px;
|
|
15
|
+
position: relative;
|
|
16
|
+
background: #e8f8f8;
|
|
17
|
+
}
|
|
18
|
+
//.s_conLeft {
|
|
19
|
+
// width: 700px;
|
|
20
|
+
// height: 750px;
|
|
21
|
+
// padding: 20px;
|
|
22
|
+
// position: relative;
|
|
23
|
+
// background: #e8f8f8;
|
|
24
|
+
//}
|
|
25
|
+
.s_conLeftsing {
|
|
26
|
+
width: 700px;
|
|
27
|
+
height: 730px;
|
|
28
|
+
}
|
|
29
|
+
.s_conRight {
|
|
30
|
+
position: absolute;
|
|
31
|
+
top: 0;
|
|
32
|
+
right: 0;
|
|
33
|
+
left: 700px;
|
|
34
|
+
bottom: 0;
|
|
35
|
+
overflow: auto;
|
|
36
|
+
margin-top: 0px;
|
|
37
|
+
background: #e8f8f8;
|
|
38
|
+
margin-left: 50px;
|
|
39
|
+
}
|
|
40
|
+
//.s_conRight {
|
|
41
|
+
// position: absolute;
|
|
42
|
+
// top: 0;
|
|
43
|
+
// right: 0;
|
|
44
|
+
// left: 700px;
|
|
45
|
+
// bottom: 0;
|
|
46
|
+
// //overflow: auto;
|
|
47
|
+
// margin-top: -35px;
|
|
48
|
+
// background: #e8f8f8;
|
|
49
|
+
// margin-left: 50px;
|
|
50
|
+
//}
|
|
51
|
+
|
|
52
|
+
.sign_window
|
|
53
|
+
{
|
|
54
|
+
float:left;
|
|
55
|
+
width:500px;
|
|
56
|
+
height:300px;
|
|
57
|
+
position:absolute;
|
|
58
|
+
right:0px;
|
|
59
|
+
top:380px;
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
#open_close_sign
|
|
63
|
+
{
|
|
64
|
+
float:right;
|
|
65
|
+
width:60px;
|
|
66
|
+
height:60px;
|
|
67
|
+
background:#5E5EA2;
|
|
68
|
+
color:#ffffff;
|
|
69
|
+
margin-bottom:20px
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
#enter_sign
|
|
73
|
+
{
|
|
74
|
+
float:left;
|
|
75
|
+
width:100%;
|
|
76
|
+
height:100%;
|
|
77
|
+
background:#CCCC99;
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
.enter_sign_inner
|
|
81
|
+
{
|
|
82
|
+
float:left;
|
|
83
|
+
background:red;
|
|
84
|
+
width:100%;
|
|
85
|
+
height:30px;
|
|
86
|
+
line-height:30px;
|
|
87
|
+
opacity:0.4;
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
.enter_sign_inner p
|
|
91
|
+
{
|
|
92
|
+
margin-left:10px;
|
|
93
|
+
color:#ffffff;
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
.obj_id
|
|
97
|
+
{
|
|
98
|
+
float:left;
|
|
99
|
+
width:490px;
|
|
100
|
+
height:220px;
|
|
101
|
+
margin-top:5px;
|
|
102
|
+
margin-left:5px;
|
|
103
|
+
margin-right:5px;
|
|
104
|
+
background:#ffffff;
|
|
105
|
+
float:left;
|
|
106
|
+
overflow:hidden;
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
.sign_place
|
|
110
|
+
{
|
|
111
|
+
float:left;
|
|
112
|
+
position:absolute;
|
|
113
|
+
left:10px;
|
|
114
|
+
top:310px;
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
.sign_dashed
|
|
118
|
+
{
|
|
119
|
+
float:left;
|
|
120
|
+
border-bottom:1px dashed black;
|
|
121
|
+
width:435px;
|
|
122
|
+
height:30px;
|
|
123
|
+
position:absolute;
|
|
124
|
+
left:60px;
|
|
125
|
+
top:300px;
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
.sign_button
|
|
129
|
+
{
|
|
130
|
+
float:left;
|
|
131
|
+
background:#CCCC99;
|
|
132
|
+
width:100%;
|
|
133
|
+
height:45px;
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
.sign_button_inner
|
|
137
|
+
{
|
|
138
|
+
float:left;
|
|
139
|
+
margin-left:45px;
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
.sign_button_ok
|
|
143
|
+
{
|
|
144
|
+
float:left;
|
|
145
|
+
width:80px;
|
|
146
|
+
margin-left:20px;
|
|
147
|
+
margin-top:8px;
|
|
148
|
+
background:#0000ff;
|
|
149
|
+
padding:3px 5px;
|
|
150
|
+
color:#ffffff;
|
|
151
|
+
border:1px solid #0000ff;
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
.sign_button_resign
|
|
155
|
+
{
|
|
156
|
+
float:left;
|
|
157
|
+
width:80px;
|
|
158
|
+
margin-left:20px;
|
|
159
|
+
margin-top:8px;
|
|
160
|
+
background:#ff0000;
|
|
161
|
+
padding:3px 5px;
|
|
162
|
+
color:#ffffff;
|
|
163
|
+
border:1px solid #ff0000;
|
|
164
|
+
}
|
|
165
|
+
</style>
|
|
166
|
+
</head>
|
|
167
|
+
<body>
|
|
168
|
+
<script>
|
|
169
|
+
var obj;
|
|
170
|
+
//<!-- 笔响应支持脚本开始 -->
|
|
171
|
+
function _getTop(e){
|
|
172
|
+
var offset=e.offsetTop;
|
|
173
|
+
if(e.offsetParent!=null) offset+=_getTop(e.offsetParent);
|
|
174
|
+
return offset;
|
|
175
|
+
}
|
|
176
|
+
function _getLeft(e){
|
|
177
|
+
var offset=e.offsetLeft;
|
|
178
|
+
if(e.offsetParent!=null) offset+=_getLeft(e.offsetParent);
|
|
179
|
+
return offset;
|
|
180
|
+
}
|
|
181
|
+
function _buttonInfo(func, e){
|
|
182
|
+
_top = _getTop(e);
|
|
183
|
+
_left = _getLeft(e);
|
|
184
|
+
s = _top;
|
|
185
|
+
s += ','+_left;
|
|
186
|
+
s += ','+(e.offsetHeight+_top);
|
|
187
|
+
s += ','+(e.offsetWidth+_left);
|
|
188
|
+
s += ','+func
|
|
189
|
+
return s+';';
|
|
190
|
+
}
|
|
191
|
+
function _objectInfo(e){
|
|
192
|
+
return _buttonInfo("object", e);
|
|
193
|
+
}
|
|
194
|
+
function TInput_getButtonsInfo() {
|
|
195
|
+
var obj_ok = document.getElementById("button_ok");
|
|
196
|
+
ok = _buttonInfo("TInput_click_ok", obj_ok);
|
|
197
|
+
var obj_resign = document.getElementById("button_resign");
|
|
198
|
+
resign = _buttonInfo("TInput_click_resign", obj_resign);
|
|
199
|
+
var close_open=document.getElementById("open_close_sign");
|
|
200
|
+
close_open_btn = _buttonInfo("TInput_close_open", close_open);
|
|
201
|
+
activex = _objectInfo(obj);
|
|
202
|
+
s = ok + resign + close_open_btn + activex;
|
|
203
|
+
return s;
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
// <!-- 笔响应支持脚本结束 -->
|
|
207
|
+
window.onload = function(){
|
|
208
|
+
obj = document.getElementById("TInputSign");
|
|
209
|
+
obj.TInputSetString("license","VFZNMGQweHFRWFZOVVNVelJDVXpSQSUzRCUzRA=");
|
|
210
|
+
document.getElementById("singurl").src = decodeURI(obj.TInputGetString("singurl"));
|
|
211
|
+
|
|
212
|
+
setTimeout(function(){
|
|
213
|
+
obj.TInputInitialize();
|
|
214
|
+
obj.TInputMovetoExt();
|
|
215
|
+
obj.TInputRegisterButtonInfo(TInput_getButtonsInfo());
|
|
216
|
+
}, 600);
|
|
217
|
+
}
|
|
218
|
+
window.onunload=function(){
|
|
219
|
+
obj.TInputFinalize();
|
|
220
|
+
}
|
|
221
|
+
|
|
222
|
+
var $_GET = (function(){
|
|
223
|
+
var url = decodeURI(window.document.location.href.toString());
|
|
224
|
+
var u = url.split("?");
|
|
225
|
+
if(typeof(u[1]) == "string"){
|
|
226
|
+
u = u[1].split("&");
|
|
227
|
+
var get = {};
|
|
228
|
+
for(var i in u){
|
|
229
|
+
var j = u[i].split("=");
|
|
230
|
+
get[j[0]] = j[1];
|
|
231
|
+
}
|
|
232
|
+
return get;
|
|
233
|
+
} else {
|
|
234
|
+
return {};
|
|
235
|
+
}
|
|
236
|
+
})();
|
|
237
|
+
|
|
238
|
+
function button_click_ok(){
|
|
239
|
+
var stream;
|
|
240
|
+
var picture;
|
|
241
|
+
stream = obj.TInputGetStrokes();
|
|
242
|
+
if( stream == "" )
|
|
243
|
+
return;
|
|
244
|
+
picture = obj.TInputGetImage();
|
|
245
|
+
obj.TInputSetString("trace",stream);
|
|
246
|
+
obj.TInputSetString("picture", picture);
|
|
247
|
+
obj.TInputCloseSignFrame();
|
|
248
|
+
}
|
|
249
|
+
function button_click_resign(){
|
|
250
|
+
obj.TInputInitialize();
|
|
251
|
+
obj.TInputClear();
|
|
252
|
+
}
|
|
253
|
+
|
|
254
|
+
var flag = true;
|
|
255
|
+
function close_open_button(){
|
|
256
|
+
if(flag)
|
|
257
|
+
{
|
|
258
|
+
document.getElementById("enter_sign").style.display="block";
|
|
259
|
+
document.getElementById("open_close_sign").value="关闭";
|
|
260
|
+
|
|
261
|
+
}
|
|
262
|
+
else
|
|
263
|
+
{
|
|
264
|
+
document.getElementById("enter_sign").style.display="none";
|
|
265
|
+
document.getElementById("open_close_sign").value="打开";
|
|
266
|
+
}
|
|
267
|
+
flag = !flag;
|
|
268
|
+
}
|
|
269
|
+
|
|
270
|
+
//控件调用绑定的函数
|
|
271
|
+
function TInput_click_ok(){
|
|
272
|
+
button_click_ok();
|
|
273
|
+
}
|
|
274
|
+
function TInput_click_resign(){
|
|
275
|
+
button_click_resign();
|
|
276
|
+
}
|
|
277
|
+
function TInput_close_open(){
|
|
278
|
+
close_open_button();
|
|
279
|
+
}
|
|
280
|
+
function Move_Up_Btn(){
|
|
281
|
+
// document.getElementById("div1").style.backgroundColor="#000000";
|
|
282
|
+
move_up();
|
|
283
|
+
}
|
|
284
|
+
function move_up(){
|
|
285
|
+
// alert('up')
|
|
286
|
+
GoTop()
|
|
287
|
+
}
|
|
288
|
+
function Move_Down_Btn(){
|
|
289
|
+
// document.getElementById("div1").style.backgroundColor="#000000";
|
|
290
|
+
move_down();
|
|
291
|
+
}
|
|
292
|
+
function move_down(){
|
|
293
|
+
// alert('down')
|
|
294
|
+
GoBottom();
|
|
295
|
+
}
|
|
296
|
+
|
|
297
|
+
var currentPosition;
|
|
298
|
+
function GoTop() {
|
|
299
|
+
var scr = document.getElementById("div_scroll");
|
|
300
|
+
currentPosition = scr.scrollTop;
|
|
301
|
+
|
|
302
|
+
currentPosition -= 300;
|
|
303
|
+
if (currentPosition > 0) {
|
|
304
|
+
scr.scrollTop = currentPosition;
|
|
305
|
+
// scr.scrollTo(0, currentPosition);
|
|
306
|
+
// timer = setInterval("GoTop()", 10);
|
|
307
|
+
} else {
|
|
308
|
+
currentPosition = 0;
|
|
309
|
+
scr.scrollTop = currentPosition;
|
|
310
|
+
// scr.scrollTo(0, 0);
|
|
311
|
+
|
|
312
|
+
// window.clearInterval(timer);
|
|
313
|
+
}
|
|
314
|
+
|
|
315
|
+
}
|
|
316
|
+
var currentPosition2;
|
|
317
|
+
function GoBottom() {
|
|
318
|
+
var scr = document.getElementById("div_scroll");
|
|
319
|
+
// console.log('down');
|
|
320
|
+
// var scr = document.body;
|
|
321
|
+
currentPosition2 = scr.scrollTop;
|
|
322
|
+
|
|
323
|
+
currentPosition2 += 300;
|
|
324
|
+
if (currentPosition2 <= 3000) {
|
|
325
|
+
scr.scrollTop = currentPosition2;
|
|
326
|
+
// scr.scrollTo(0,currentPosition2);
|
|
327
|
+
// timer2 = setInterval("GoBottom()", 100);
|
|
328
|
+
} else {
|
|
329
|
+
scr.scrollTop = 3000;
|
|
330
|
+
// currentPosition = 1000;
|
|
331
|
+
// scr.scrollTo(0,1000);
|
|
332
|
+
// window.clearInterval(timer2);
|
|
333
|
+
}
|
|
334
|
+
}
|
|
335
|
+
|
|
336
|
+
/*
|
|
337
|
+
*回调
|
|
338
|
+
*/
|
|
339
|
+
function TInputSignWebButtonClickCallback()
|
|
340
|
+
{
|
|
341
|
+
var fname = obj.GetClickedFuncname();
|
|
342
|
+
if(fname == "TInput_click_ok")
|
|
343
|
+
{
|
|
344
|
+
button_click_ok();
|
|
345
|
+
}
|
|
346
|
+
if(fname == "TInput_click_resign")
|
|
347
|
+
{
|
|
348
|
+
button_click_resign();
|
|
349
|
+
}
|
|
350
|
+
if(fname == "TInput_close_open")
|
|
351
|
+
{
|
|
352
|
+
close_open_button();
|
|
353
|
+
}
|
|
354
|
+
if(fname == "Move_Up_Btn")
|
|
355
|
+
{
|
|
356
|
+
move_up();
|
|
357
|
+
}
|
|
358
|
+
if(fname == "Move_Down_Btn")
|
|
359
|
+
{
|
|
360
|
+
move_down();
|
|
361
|
+
}
|
|
362
|
+
}
|
|
363
|
+
</script>
|
|
364
|
+
<div class="s_content">
|
|
365
|
+
<!-- <iframe class="s_conLeftsing" id="singurl"></iframe>-->
|
|
366
|
+
<div id="div_scroll" class="s_conLeft">
|
|
367
|
+
<iframe class="s_conLeftsing" id="singurl"></iframe>
|
|
368
|
+
</div>
|
|
369
|
+
</div>
|
|
370
|
+
<div class="s_conRight">
|
|
371
|
+
<div class="sign_window">
|
|
372
|
+
<button id="open_close_sign" onclick="close_open_button()">关闭</button>
|
|
373
|
+
<div id="enter_sign">
|
|
374
|
+
<div class=enter_sign_inner>
|
|
375
|
+
<p>请填写个人手写签名</p>
|
|
376
|
+
</div>
|
|
377
|
+
<div class="obj_id">
|
|
378
|
+
<object id="TInputSign"
|
|
379
|
+
classid="clsid:E4313E1C-8BF1-4B0F-81FF-46FB40581B27"
|
|
380
|
+
width="100%"
|
|
381
|
+
height="90%">
|
|
382
|
+
</object>
|
|
383
|
+
<SCRIPT FOR="TInputSign" EVENT="WebbtnClick()">
|
|
384
|
+
TInputSignWebButtonClickCallback();
|
|
385
|
+
</SCRIPT>
|
|
386
|
+
<div class="sign_place">签名栏:</div>
|
|
387
|
+
<div class="sign_dashed"></div>
|
|
388
|
+
</div>
|
|
389
|
+
<div class="sign_button">
|
|
390
|
+
<div class="sign_button_inner">
|
|
391
|
+
<button id="button_resign" class="sign_button_resign" onclick="button_click_resign()">重签</button>
|
|
392
|
+
<button id="button_ok" class="sign_button_ok" onclick="button_click_ok()">确认</button>
|
|
393
|
+
</div>
|
|
394
|
+
</div>
|
|
395
|
+
</div>
|
|
396
|
+
</div>
|
|
397
|
+
</div>
|
|
398
|
+
</body>
|
|
399
|
+
</html>
|