apply-clients 3.4.89-37 → 3.4.89-39

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 CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "apply-clients",
3
- "version": "3.4.89-37",
3
+ "version": "3.4.89-39",
4
4
  "description": "报建前端模块",
5
5
  "main": "src/index.js",
6
6
  "directories": {
package/src/apply.js CHANGED
@@ -110,7 +110,8 @@ export default function (filiale) {
110
110
  Vue.component('area-select', (resolve) => { require(['./components/product/AreaSelect/MyAreaSelect'], resolve) })
111
111
  // 地图组件
112
112
  Vue.component('gaode-map', (resolve) => { require(['./components/product/GaoDeMapComponents/GaoDeMap'], resolve) })
113
-
113
+ // 预收组件
114
+ Vue.component('apply-contract-charge', (resolve) => { require(['./components/product/Install/ContractCharge'], resolve) })
114
115
  if (filiale) {
115
116
  let filialeComp = require(`./filiale/${filiale}/pc`).specialComp
116
117
  for (let key in filialeComp) {
@@ -1011,6 +1011,26 @@ export default {
1011
1011
  }
1012
1012
  })
1013
1013
  },
1014
+ //获取抄表册
1015
+ async getMeterBook () {
1016
+ let data = {
1017
+ tablename: 't_meter_book',
1018
+ condition: `f_book_state='有效' `
1019
+ }
1020
+ let http = new HttpResetClass()
1021
+ let res = await http.load(
1022
+ 'POST',
1023
+ `${this.$androidUtil.getProxyUrl()}/rs/sql/apply_singleTable`,
1024
+ {data: data},
1025
+ {resolveMsg: null, rejectMsg: '抄表册查询失败!!!'}
1026
+ )
1027
+ return res.data.map(item => {
1028
+ return {
1029
+ label: item.f_book_name,
1030
+ value: item.f_book_code
1031
+ }
1032
+ })
1033
+ },
1014
1034
  async getDesignerPeople () {
1015
1035
  let data = {
1016
1036
  source: 'this.getParentByType($organization$).getChildByName($设计部报装$).getChildren()',
@@ -0,0 +1,167 @@
1
+ <template>
2
+ <div class="col-sm-12" style="margin: 20px 0px;">
3
+ <data-grid :model="model" v-ref:grid class="list_area table_sy" style="padding: 0px">
4
+ <template partial='head'>
5
+ <tr>
6
+ <th>合同金额</th>
7
+ <th>付款节点</th>
8
+ <th>付款比例</th>
9
+ <th>应收金额</th>
10
+ <th><button type="button" class="btn btn-primary" @click="$parent.$parent.showAdd()">新增</button></th>
11
+ </tr>
12
+ </template>
13
+ <template partial='body'>
14
+ <tr >
15
+ <td style="text-align: center;">
16
+ <nobr><font>{{row.f_amount}}</font></nobr>
17
+ </td>
18
+ <td style="text-align: center;">
19
+ <nobr><font>{{row.defname}}</font></nobr>
20
+ </td>
21
+ <td style="text-align: center;">
22
+ <nobr><font>{{row.f_payment_ratio}}%</font></nobr>
23
+ </td>
24
+ <td style="text-align: center;">
25
+ <nobr><font>{{row.f_due_money}}</font></nobr>
26
+ </td>
27
+ <td style="text-align: center;">
28
+ <nobr><font>
29
+ <button type="button" class="btn btn-primary" @click="$parent.$parent.updateData(row)">修改</button>
30
+ <button type="button" class="btn btn-primary" @click="$parent.$parent.delData(row)">删除</button>
31
+ </font></nobr>
32
+ </td>
33
+ </tr>
34
+ </template>
35
+ </data-grid>
36
+ <modal
37
+ :show.sync="addModal"
38
+ backdrop="false"
39
+ :title="titleText"
40
+ cancel-text="取消"
41
+ ok-text="确认"
42
+ :callback="saveOrUpdate"
43
+ >
44
+ <div class="form-horizontal" slot="modal-body">
45
+ <div class="form-group" style="margin: 10px auto">
46
+ <label class="col-sm-3 control-label">合同金额(元):</label>
47
+ <div class="col-sm-9">
48
+ <input type="number" style="width: 60%" v-model="addData.f_amount" readonly/>
49
+ </div>
50
+ </div>
51
+ <div class="form-group" style="margin: 10px auto">
52
+ <label class="col-sm-3 control-label">付款节点:</label>
53
+ <div class="col-sm-9">
54
+ <v-select
55
+ v-model="addData.applyType"
56
+ placeholder='请选择需要发起的工程类型'
57
+ :value.sync="addData.applyType"
58
+ :options='payProjects'
59
+ :value-single="true"
60
+ class="select select_list"
61
+ :search="false"
62
+ close-on-select ></v-select>
63
+ </div>
64
+ <div class="form-group" style="margin: 10px auto">
65
+ <label class="col-sm-3 control-label">付款比例(%):</label>
66
+ <div class="col-sm-9">
67
+ <input type="number" style="width: 60%" v-model="addData.f_payment_ratio" @change="inputChange(1)"/>
68
+ </div>
69
+ </div>
70
+ <div class="form-group" style="margin: 10px auto">
71
+ <label class="col-sm-3 control-label">付款金额(元):</label>
72
+ <div class="col-sm-9">
73
+ <input type="number" style="width: 60%" v-model="addData.f_due_money" @change="inputChange(2)"/>
74
+ </div>
75
+ </div>
76
+ </div>
77
+ </div>
78
+ </modal>
79
+ </div>
80
+ </template>
81
+ <script>
82
+ import {HttpResetClass} from 'vue-client'
83
+ import Vue from "vue";
84
+ export default {
85
+ title: '付款预设',
86
+ props: {
87
+ selectdata: {
88
+ type: Object
89
+ },
90
+ mark: {
91
+ type: Number,
92
+ default: 1
93
+ }
94
+ },
95
+ data () {
96
+ return {
97
+ model: {rows: [{f_process_id: 100, f_payment_ratio: '', defname: '', f_due_money: ''}]},
98
+ payProjects: [{label: '合同签订', value: '合同签订'}, {label: '验收通气', value: '验收通气'}, {label: '完工', value: '完工'}],
99
+ addModal: false,
100
+ addData: {f_amount: 0, f_process_id: '', f_payment_ratio: '', defname: '', f_due_money: ''},
101
+ titleText: ''
102
+ }
103
+ },
104
+ methods: {
105
+ showAdd () {
106
+ this.addData = {
107
+ f_amount: this.selectdata.f_contract_money,
108
+ f_process_id: this.selectdata.f_process_id,
109
+ f_payment_ratio: '',
110
+ defname: this.selectdata.defname,
111
+ f_due_money: ''
112
+ }
113
+ this.titleText = '新增付款预设'
114
+ this.addModal = true
115
+ },
116
+ inputChange (type) {
117
+ if (this.addData.f_amount) {
118
+ if (type === 1) {
119
+ this.addData.f_due_money = (this.addData.f_amount * (this.addData.f_payment_ratio / 100)).toFixed(2)
120
+ } else {
121
+ this.addData.f_payment_ratio = Math.floor(this.addData.f_due_money / this.addData.f_amount * 100)
122
+ }
123
+ }
124
+ },
125
+ updateData (row){
126
+ this.addData = row
127
+ this.addData.f_amount=this.selectdata.f_contract_money
128
+ this.titleText = '修改付款预设'
129
+ this.addModal = true
130
+ },
131
+ delData (row){
132
+ console.log("delData=========")
133
+ this.$resetdelete(`apply/rs/entity/t_contract_charge`, {id: row.id}, {resolveMsg: null, rejectMsg: null}).then(() => {
134
+ this.search()
135
+ })
136
+ this.addModal = false
137
+ },
138
+ saveOrUpdate () {
139
+ // this.addData
140
+ console.log("saveOrUpdate=========")
141
+ new HttpResetClass().load('POST', 'apply/rs/entity/t_contract_charge', this.addData, {resolveMsg: null, rejectMsg: null}).then(() => {
142
+ this.search()
143
+ })
144
+ //关闭弹窗
145
+ this.addModal = false
146
+ },
147
+ search (){
148
+ let data = {
149
+ condition: `f_process_id = '${this.selectdata.f_process_id}'`
150
+ }
151
+ new HttpResetClass().load('POST', 'rs/sql/getContractCharge', {data: data}
152
+ , {resolveMsg: null, rejectMsg: null})
153
+ .then((res) => {
154
+ this.model.rows = res.data
155
+ })
156
+ }
157
+ },
158
+ ready () {
159
+ this.payProjects = this.$appdata.getParam(this.selectdata.f_apply_type + '付款预设')
160
+ this.search()
161
+ }
162
+ }
163
+ </script>
164
+
165
+ <style scoped>
166
+
167
+ </style>
@@ -657,6 +657,28 @@
657
657
  })
658
658
  return a
659
659
  },
660
+ //获取抄表册
661
+ async getMeterBook () {
662
+ let data = {
663
+ tablename: 't_meter_book',
664
+ condition: `f_book_state='有效' `
665
+ }
666
+ let http = new HttpResetClass()
667
+ let res = await http.load(
668
+ 'POST',
669
+ `rs/sql/apply_singleTable`,
670
+ {data: data},
671
+ {resolveMsg: null, rejectMsg: '抄表册查询失败!!!'}
672
+ )
673
+ return res.data.map(item => {
674
+ return {
675
+ label: item.f_book_name,
676
+ value: item.f_book_code
677
+ }
678
+ })
679
+ },
680
+
681
+
660
682
  addressInitialization () {
661
683
  this.$getConfig(this, 'UserAddress')
662
684
 
@@ -187,7 +187,7 @@
187
187
  <nobr>{{row.total}}</nobr>
188
188
  </td>
189
189
  <td style="text-align: center;">
190
- <nobr>{{row.confirmTotal}}</nobr>
190
+ <nobr>{{row.confirmtotal}}</nobr>
191
191
  </td>
192
192
  <td style="text-align: center;">
193
193
  <dropdown>
@@ -0,0 +1,610 @@
1
+ <template>
2
+ <work-busy :is-busy="showWork" v-show="showWork"></work-busy>
3
+
4
+ <div class="col-sm-12" style="margin: 20px 0px;">
5
+ <criteria-paged :model="model" v-ref:cp :pager="pager">
6
+ <criteria partial='criteria' @condition-changed='$parent.searchCondition' v-ref:cri>
7
+ <div novalidate class="form-horizontal select-overspread container-fluid auto" partial>
8
+ </div>
9
+ </criteria>
10
+ <data-grid :model="model" v-ref:grid partial='list' class="list_area table_sy" style="padding: 0px">
11
+ <template partial='head'>
12
+ <tr>
13
+ <th>序号</th>
14
+ <th>客户编号</th>
15
+ <th>客户名称</th>
16
+ <th>客户电话</th>
17
+ <th>地址信息</th>
18
+ <th v-if="$parent.$parent.$parent.selectdata.f_apply_type === '团购报建'">备注</th>
19
+ <th>表具数量</th>
20
+ <th>
21
+ <template v-if="$parent.$parent.$parent.selectdata.f_apply_type === '团购报建'">
22
+ <button type="button" class="btn btn-info head-but" v-if="$parent.$parent.$parent.mark === 0"
23
+ @click="$parent.$parent.$parent.showFile = !$parent.$parent.$parent.showFile">导入</button>
24
+ <a type="button" class="btn btn-info head-but" v-if="$parent.$parent.$parent.mark === 0"
25
+ href="/apply/download/excel/安装明细.xlsx" download>模板下载</a>
26
+ <export-excel :data="$parent.$parent.$parent.getCondition"
27
+ :field="$parent.$parent.$parent.getfield"
28
+ sqlurl="rs/logic/applyExportfile"
29
+ sql-name="getInstallableAddress"
30
+ template-name='可安装地址'
31
+ btn-name="导出可安装"
32
+ :choose-col="true"></export-excel>
33
+ </template>
34
+ </th>
35
+ </tr>
36
+ </template>
37
+ <template partial='body'>
38
+ <tr>
39
+ <td style="text-align: center;">
40
+ <nobr>{{$index+1}}</nobr>
41
+ </td>
42
+ <td style="text-align: center;">
43
+ <nobr>{{row.f_userinfo_code}}</nobr>
44
+ </td>
45
+ <td style="text-align: center;">
46
+ <nobr>{{row.f_user_name}}</nobr>
47
+ </td>
48
+ <td style="text-align: center;">
49
+ <nobr>{{row.f_user_phone}}</nobr>
50
+ </td>
51
+ <td style="text-align: center;">
52
+ <nobr>{{row.f_address}}</nobr>
53
+ </td>
54
+ <th v-if="$parent.$parent.$parent.selectdata.f_apply_type === '团购报建'">
55
+ <nobr>{{row.f_userinfo_comments}}</nobr>
56
+ </th>
57
+ <td style="text-align: center;">
58
+ <nobr>{{row.f_userfiles_num === null ? 0 : row.f_userfiles_num}}</nobr>
59
+ </td>
60
+ <td style="text-align: center;">
61
+ <nobr>
62
+ <button
63
+ type="button" name="button" class="btn btn-link"
64
+ :disabled="row.f_cumulative_payment_money < $parent.$parent.$parent.selectdata.f_price && $parent.$parent.$parent.selectdata.f_apply_type !== '开发商集体报建'"
65
+ @click="$parent.$parent.$parent.showUserFileModal(row)">
66
+ {{$parent.$parent.$parent.mark === 1 ? '查看' : row.f_userfiles_num > 0 ? '修正' : '添加'}}
67
+ </button>
68
+ </nobr>
69
+ </td>
70
+ </tr>
71
+ </template>
72
+ </data-grid>
73
+ </criteria-paged>
74
+ </div>
75
+ <modal v-if="showFile" :show.sync="showFile" v-ref:modal :backdrop="false" title="选择文件">
76
+ <header slot="modal-header" class="modal-header">
77
+ <button type="button" class="close" @click="closeFile"><span>&times;</span></button>
78
+ <h4 class="modal-title">选择文件</h4>
79
+ </header>
80
+ <article slot="modal-body" class="modal-body">
81
+ <div class="form-group">
82
+ <file-upload class="my-file-uploader" name="useraddressUploadFile" action="rs/file/uploadFile" tagname="确定" v-ref:file></file-upload>
83
+ </div>
84
+ </article>
85
+ <footer slot="modal-footer" class="modal-footer"></footer>
86
+ </modal>
87
+
88
+ <modal v-if="showUserFile" :show.sync="showUserFile" v-ref:modal :large="true" :backdrop="false" title="安装明细">
89
+ <header slot="modal-header" class="modal-header">
90
+ <button type="button" class="close" @click="closeUserFile"><span>&times;</span></button>
91
+ <h4 class="modal-title">安装明细</h4>
92
+ </header>
93
+ <article slot="modal-body" class="modal-body clearfix">
94
+ <div class="form-group col-sm-12">
95
+ <label class="col-sm-2 control-label">地址信息:</label>
96
+ <div class="col-sm-10">
97
+ <input class="form-control input_view" style=""
98
+ v-model="useradders.f_address"
99
+ :value="useradders.f_address"
100
+ :readonly="true"/>
101
+ </div>
102
+ </div>
103
+
104
+ <div v-for="(i, item) in userinfo.userfiles" class="form-group col-sm-12 panel panel-info">
105
+ <div class="panel-heading head col-sm-12" style="background-color: #e8f4ff;margin-bottom: 10px">
106
+ <div class="col-sm-6 text-left">表具{{$index+1}}信息</div>
107
+ <div class="col-sm-6 text-right"><button
108
+ class="button_delete button_spacing"
109
+ v-if="!item.f_userfiles_id"
110
+ @click.prevent="deleteUserFile(i)"
111
+ >删除</button></div>
112
+ </div>
113
+ <div class="form-group col-sm-6" :class="[item.gasbrand ? '' : 'has-error']">
114
+ <label class="col-sm-4 control-label">气表品牌:</label>
115
+ <div class="col-sm-8">
116
+ <input-select
117
+ class="select select_list"
118
+ :value.sync="item.gasbrand"
119
+ v-model="item.gasbrand"
120
+ :options="meterbrands"
121
+ @change="gasbrandChange(i)"
122
+ :disable="mark === 1"
123
+ :valueSingle="true"></input-select>
124
+ </div>
125
+ </div>
126
+ <div class="form-group col-sm-6" :class="[item.gasmodel ? '' : 'has-error']">
127
+ <label class="col-sm-4 control-label">气表型号:</label>
128
+ <div class="col-sm-8">
129
+ <input-select
130
+ class="select select_list"
131
+ :value.sync="item.gasmodel"
132
+ v-model="item.gasmodel"
133
+ :options.sync="item.gasbrand.gasmodel"
134
+ @change="gasmodelChange(i)"
135
+ :disable="mark === 1"
136
+ :valueSingle="true"></input-select>
137
+ </div>
138
+ </div>
139
+ <div class="form-group col-sm-6" :class="[item.f_meternumber ? '' : 'has-error']">
140
+ <label class="col-sm-4 control-label">表&emsp;&emsp;号:</label>
141
+ <div class="col-sm-8">
142
+ <input class="form-control input_view" style=""
143
+ placeholder="表号"
144
+ type="number"
145
+ οnkeyup="this.value=this.value.replace(/\s+/g,'')"
146
+ v-model="item.f_meternumber"
147
+ :value="item.f_meternumber"
148
+ @change="meternumberValidate(i)"
149
+ :readonly="mark === 1"/>
150
+ </div>
151
+ </div>
152
+ <div class="form-group col-sm-6">
153
+ <label class="col-sm-4 control-label">表&ensp;封&ensp;号:</label>
154
+ <div class="col-sm-8">
155
+ <input class="form-control input_view" style=""
156
+ placeholder="表封号"
157
+ v-model="item.f_metertitles"
158
+ :value="item.f_metertitles"
159
+ :readonly="mark === 1"/>
160
+ </div>
161
+ </div>
162
+ <div class="form-group col-sm-6">
163
+ <label class="col-sm-4 control-label">表&ensp;读&ensp;数:</label>
164
+ <div class="col-sm-8">
165
+ <input class="form-control input_view" style=""
166
+ type="number"
167
+ placeholder="表读数"
168
+ v-model="item.f_meter_base"
169
+ :value="item.f_meter_base"
170
+ :readonly="mark === 1"/>
171
+ </div>
172
+ </div>
173
+ <div class="form-group col-sm-6">
174
+ <label class="col-sm-4 control-label">初始底数:</label>
175
+ <div class="col-sm-8">
176
+ <input class="form-control input_view" style=""
177
+ type="number"
178
+ v-model="item.f_initial_base"
179
+ :value="item.f_initial_base"
180
+ placeholder="初始底数"
181
+ :readonly="mark === 1"/>
182
+ </div>
183
+ </div>
184
+ <div class="form-group col-sm-6">
185
+ <label class="col-sm-4 control-label">表&emsp;&emsp;向:</label>
186
+ <div class="col-sm-8">
187
+ <input-select
188
+ class="select select_list"
189
+ :value.sync="item.f_aroundmeter"
190
+ v-model="item.f_aroundmeter"
191
+ :options="aroundmeters"
192
+ :disable="mark === 1"
193
+ :valueSingle="true"></input-select>
194
+ </div>
195
+ </div>
196
+ <div class="form-group col-sm-6">
197
+ <label class="col-sm-4 control-label">安装位置:</label>
198
+ <div class="col-sm-8">
199
+ <input-select
200
+ class="select select_list"
201
+ :value.sync="item.f_position"
202
+ v-model="item.f_position"
203
+ :options="positions"
204
+ :disable="mark === 1"
205
+ :valueSingle="true"></input-select>
206
+ </div>
207
+ </div>
208
+ <div class="form-group col-sm-6">
209
+ <label class="col-sm-4 control-label">安&ensp;装&ensp;人:</label>
210
+ <div class="col-sm-8">
211
+ <input class="form-control input_view" style=""
212
+ v-model="item.f_install_person"
213
+ :value.sync="installperson(item.f_install_person)"
214
+ placeholder="安装人"
215
+ readonly/>
216
+ <!-- <input-select-->
217
+ <!-- class="select select_list"-->
218
+ <!-- :value.sync="item.f_install_person"-->
219
+ <!-- v-model="item.f_install_person"-->
220
+ <!-- :options="installperson"-->
221
+ <!-- :disable="mark === 1"-->
222
+ <!-- :valueSingle="true"></input-select>-->
223
+ </div>
224
+ </div>
225
+ <div class="form-group col-sm-6">
226
+ <label class="col-sm-4 control-label">安装日期:</label>
227
+ <div class="col-sm-8">
228
+ <input class="form-control input_view" style=""
229
+ v-model="item.f_install_date"
230
+ :value.sync="installdate(item.f_install_date)"
231
+ placeholder="安装日期"
232
+ readonly/>
233
+ <!-- <datepicker-->
234
+ <!-- placeholder="安装日期"-->
235
+ <!-- :value.sync="item.f_install_date"-->
236
+ <!-- v-model="item.f_install_date"-->
237
+ <!-- format="yyyy-MM-dd HH:mm:ss"-->
238
+ <!-- :disabled="mark === 1"-->
239
+ <!-- :show-reset-button="reset">-->
240
+ <!-- </datepicker>-->
241
+ </div>
242
+ </div>
243
+ </div>
244
+
245
+ </article>
246
+ <footer slot="modal-footer" class="modal-footer">
247
+ <template v-if="mark !== 1">
248
+ <!-- 去除一户多表 -->
249
+ <button type="button" class="btn btn-primary" @click="addUserFile" v-if="false">添加表具</button>
250
+ <button type="button" class="btn btn-primary" @click="saveUserFile" :disabled="!$v.valid">确认</button>
251
+ </template>
252
+ </footer>
253
+ </modal>
254
+ </template>
255
+ <script>
256
+ import Vue from 'vue'
257
+ import {PagedList} from 'vue-client'
258
+ import {HttpResetClass} from 'vue-client'
259
+ import {isEmpty} from '../../../components/Util'
260
+ // Date格式化
261
+ Date.prototype.Format = function (fmt) {
262
+ var o = {
263
+ 'M+': this.getMonth() + 1, // 月份
264
+ 'd+': this.getDate(), // 日
265
+ 'H+': this.getHours(), // 小时
266
+ 'm+': this.getMinutes(), // 分
267
+ 's+': this.getSeconds(), // 秒
268
+ 'q+': Math.floor((this.getMonth() + 3) / 3), // 季度
269
+ 'S': this.getMilliseconds() // 毫秒
270
+ }
271
+ if (/(y+)/.test(fmt)) fmt = fmt.replace(RegExp.$1, (this.getFullYear() + '').substr(4 - RegExp.$1.length))
272
+ for (var k in o) {
273
+ if (new RegExp('(' + k + ')').test(fmt)) fmt = fmt.replace(RegExp.$1, (RegExp.$1.length === 1) ? (o[k]) : (('00' + o[k]).substr(('' + o[k]).length)))
274
+ }
275
+ return fmt
276
+ }
277
+
278
+ export default {
279
+ title: '安装明细',
280
+ props: {
281
+ selectdata: {
282
+ type: Object
283
+ },
284
+ mark: {
285
+ type: Number,
286
+ default: 0
287
+ }
288
+ },
289
+ data () {
290
+ return {
291
+ showFile: false,
292
+ showUserFile: false,
293
+ model: new PagedList('rs/sql/getAddresAndUserinfoAndUserfilesAmount', 20, null),
294
+ meterbrands: [], // 气表品牌
295
+ useradders: null,
296
+ userinfo: {},
297
+ getfield: {
298
+ 'f_address': '地址',
299
+ 'f_user_name': '用户姓名/单位名称',
300
+ 'f_meternumber': '表号',
301
+ 'f_gasbrand': '气表品牌',
302
+ 'f_gasmodel': '气表型号',
303
+ 'f_metertitles': '表封号',
304
+ 'f_meter_base': '表读数',
305
+ 'f_initial_base': '初始底数',
306
+ 'f_aroundmeter': '表向',
307
+ 'f_user_phone': '电话',
308
+ 'f_userinfo_comments': '备注',
309
+ 'f_position': '安装位置',
310
+ 'f_userinfo_code': '用户编号',
311
+ 'f_material_name': '材料名称',
312
+ 'f_material_style': '材料型号',
313
+ 'f_material_price': '材料价格',
314
+ 'f_material_unit': '材料单位',
315
+ 'f_material_number': '材料数量'
316
+ },
317
+ showWork: false
318
+ }
319
+ },
320
+ ready () {
321
+ this.search()
322
+ this.getMeterbrands()
323
+ if (this.selectdata.f_apply_type === '团购报建') {
324
+ this.notInstalled()
325
+ }
326
+ },
327
+ methods: {
328
+ // 删除未保存的表具
329
+ async deleteUserFile (index) {
330
+ this.userinfo.userfiles.splice(index, 1)
331
+ },
332
+ // 追加表具
333
+ addUserFile() {
334
+ this.userinfo.userfiles.push({})
335
+ },
336
+ // 保存档案
337
+ async saveUserFile() {
338
+ // 检查必填项
339
+ for (let i = 0; i < this.userinfo.userfiles.length; i++) {
340
+ let userfile = this.userinfo.userfiles[i]
341
+ if (userfile.f_gasbrand_id === null || userfile.f_gasbrand_id === '') {
342
+ this.$showMessage(`表具${i+1}气表品牌没有选择!!!`)
343
+ return
344
+ }
345
+ if (userfile.f_gasmodel_id === null || userfile.f_gasmodel_id === '') {
346
+ this.$showMessage(`表具${i+1}气表型号没有选择!!!`)
347
+ return
348
+ }
349
+ if (userfile.f_meternumber === null || userfile.f_meternumber === '') {
350
+ this.$showMessage(`表具${i+1}表号没有填写!!!`)
351
+ return
352
+ }
353
+ }
354
+ let data = {
355
+ user: this.$login.f,
356
+ useradders: this.useradders,
357
+ userinfo: this.userinfo,
358
+ selectdata: this.selectdata
359
+ }
360
+ let res = await this.$resetpost('rs/logic/addInstallationDetails', {data:data}, {
361
+ resolveMsg: null,
362
+ rejectMsg: '表具添加失败!!!'
363
+ })
364
+ this.$dispatch('breakControl', this.selectdata)
365
+ },
366
+ // 检查表号是否存在
367
+ async meternumberValidate(i) {
368
+ if (!this.userinfo.userfiles[i].f_gasbrand_id) {
369
+ this.userinfo.userfiles[i].f_meternumber = ''
370
+ this.$showAlert('请先选择气表品牌!!!', 'warning', 3000)
371
+ return
372
+ }
373
+ if (this.userinfo.userfiles[i].f_gasbrand_id && this.userinfo.userfiles[i].f_meternumber) {
374
+ let data = {
375
+ f_meternumber: this.userinfo.userfiles[i].f_meternumber,
376
+ f_gasbrand_id: this.userinfo.userfiles[i].f_gasbrand_id
377
+ }
378
+ if (this.userinfo.userfiles[i].f_userfiles_id) {
379
+ data.f_userfiles_id = this.userinfo.userfiles[i].f_userfiles_id
380
+ }
381
+ let res = await this.$resetpost('rs/logic/meterbrandsNumberValidate', {data:data}, {
382
+ resolveMsg: null,
383
+ rejectMsg: '表号验证失败!!'
384
+ })
385
+ if (res.data) {
386
+ this.userinfo.userfiles[i].f_meternumber = ''
387
+ this.$showAlert('表号已存在!!', 'warning', 3000)
388
+ }
389
+ }
390
+ },
391
+ // 选择气表型号
392
+ gasmodelChange(i) {
393
+ if (this.userinfo.userfiles[i].gasmodel) {
394
+ this.userinfo.userfiles[i].f_gasmodel_id = this.userinfo.userfiles[i].gasmodel.id
395
+ }
396
+ },
397
+ // 选择气表品牌
398
+ gasbrandChange(i) {
399
+ // 清空已保存的气表型号
400
+ this.userinfo.userfiles[i].f_gasmodel_id = null
401
+ this.userinfo.userfiles[i].gasmodel = null
402
+
403
+ if (this.userinfo.userfiles[i].gasbrand) {
404
+ // 气表品牌id
405
+ this.userinfo.userfiles[i].f_gasbrand_id = this.userinfo.userfiles[i].gasbrand.id
406
+ // 气表分类
407
+ this.userinfo.userfiles[i].f_meter_classify = this.userinfo.userfiles[i].gasbrand.f_meter_type
408
+ }
409
+ },
410
+ // 打开安装明细
411
+ async showUserFileModal (row) {
412
+ this.useradders = row
413
+
414
+ let http = new HttpResetClass()
415
+ let data = {
416
+ condition: `f_userinfo_id = '${row.f_userinfo_id}'`
417
+ }
418
+ let res = await http.load('POST', 'rs/logic/getUserinfoAndUserfiles', {data:data}, {
419
+ resolveMsg: null,
420
+ rejectMsg: null
421
+ })
422
+
423
+ this.userinfo = res.data
424
+
425
+ // 已有表具的 气表信息补充
426
+ for (let i = 0; i < this.userinfo.userfiles.length; i++) {
427
+ for (const item of this.meterbrands) {
428
+ if (item.value.id === this.userinfo.userfiles[i].f_gasbrand_id) {
429
+ // this.userinfo.userfiles[i].gasbrand = item.value // 防止双向绑定失败
430
+ Vue.set(this.userinfo.userfiles[i], 'gasbrand', item.value)
431
+ }
432
+ }
433
+ if (this.userinfo.userfiles[i].gasbrand) {
434
+ for (const item of this.userinfo.userfiles[i].gasbrand.gasmodel) {
435
+ if (item.value.id === this.userinfo.userfiles[i].f_gasmodel_id) {
436
+ // this.userinfo.userfiles[i].gasmodel = item.value
437
+ Vue.set(this.userinfo.userfiles[i], 'gasmodel', item.value)
438
+ }
439
+ }
440
+ }
441
+ }
442
+
443
+ this.showUserFile = true
444
+ },
445
+ // 获取气表品牌
446
+ async getMeterbrands() {
447
+ let http = new HttpResetClass()
448
+ let data = {
449
+ f_orgid: this.$login.f.orgid
450
+ }
451
+ let res = await http.load('POST', 'rs/logic/getMeterbrands', {data:data}, {
452
+ resolveMsg: null,
453
+ rejectMsg: null
454
+ })
455
+ this.meterbrands = res.data
456
+ },
457
+ async notInstalled () {
458
+ let http = new HttpResetClass()
459
+ let data = {
460
+ condition: `ui.f_process_id = '${this.selectdata.f_process_id}' and uf.f_table_state != '待开通'`
461
+ }
462
+ let res = await http.load(
463
+ 'POST',
464
+ 'rs/sql/countApplyUserinfo',
465
+ {data: data},
466
+ {
467
+ resolveMsg: null,
468
+ rejectMsg: '安装数量查询失败!!!'
469
+ })
470
+
471
+ for (const item of this.selectdata.fields) {
472
+ if (item.label === '已安装户数') {
473
+ item.value = this.selectdata.f_apply_count - res.data[0].num
474
+ }
475
+ if (item.label === '未安装户数') {
476
+ item.value = res.data[0].num
477
+ }
478
+ }
479
+ },
480
+ searchCondition (args) {
481
+ var tablestate=''
482
+ if(this.selectdata.f_sub_state==='完工'){
483
+ tablestate='正常'
484
+ }else{
485
+ tablestate='待开通'
486
+ }
487
+ if (this.selectdata.f_apply_type === '启封通气') {
488
+ args.condition = args.condition + `and ui.f_userinfo_id = '${this.selectdata.f_userinfo_id}'`
489
+ } else {
490
+ args.condition = args.condition + `and ua.f_process_id = '${this.selectdata.f_process_id}'`
491
+ }
492
+ this.model.search(args.condition, args.model,tablestate)
493
+ },
494
+ // 查询
495
+ async search () {
496
+ this.$refs.cp.$refs.cri.search()
497
+ },
498
+ // 关闭安装明细
499
+ closeUserFile() {
500
+ this.showUserFile = false
501
+ this.useradders = null
502
+ this.userinfo = {}
503
+ this.search()
504
+ },
505
+ // 关闭文件上传对话框
506
+ closeFile() {
507
+ this.showWork = false
508
+ this.showFile = false
509
+ // 将选的文件清空
510
+ this.$refs.file.$el.querySelector('input').value = ''
511
+ this.search()
512
+ }
513
+ },
514
+ events: {
515
+ 'beforeFileUpload' (file) {
516
+ this.showWork = true
517
+ },
518
+ async 'onFileUpload'(file, result) {
519
+ let data = {
520
+ selectdata: this.selectdata,
521
+ filepath: result.f_downloadpath,
522
+ user: this.$login.f
523
+ }
524
+ try {
525
+ let res = await this.$resetpost(`rs/logic/importAddInstallationDetails`, {data: data}, {
526
+ resolveMsg: null,
527
+ rejectMsg: '导入失败!!!',
528
+ silent: true
529
+ }, 0)
530
+ } catch (e) {
531
+ this.closeFile()
532
+ }
533
+ this.$dispatch('breakControl', this.selectdata)
534
+ }
535
+ },
536
+ computed: {
537
+ pager () {
538
+ return this.selectdata.f_apply_type === '团购报建'
539
+ },
540
+ getCondition () {
541
+ let condition = `ua.f_process_id = '${this.selectdata.f_process_id}'`
542
+
543
+ return {
544
+ condition: condition
545
+ }
546
+ },
547
+ // 安装人
548
+ installperson() {
549
+ return function (f_install_person) {
550
+ if (isEmpty(f_install_person)) {
551
+ return this.$login.f.name
552
+ }
553
+ return f_install_person
554
+ }
555
+ },
556
+ installdate() {
557
+ return function (f_install_date) {
558
+ if (isEmpty(f_install_date)) {
559
+ return new Date().Format('yyyy-MM-dd HH:mm:ss')
560
+ }
561
+ return f_install_date
562
+ }
563
+ },
564
+ // 表向
565
+ aroundmeters() {
566
+ return this.$appdata.getParam('左右表')
567
+ },
568
+ // 安装位置
569
+ positions() {
570
+ return this.$appdata.getParam('安装位置')
571
+ }
572
+ },
573
+ watch: {
574
+ }
575
+ }
576
+ </script>
577
+ <style scoped>
578
+ .head-but{
579
+ margin-left: 5px;
580
+ height: 34px;
581
+ /*background-color: #6aa6e2;*/
582
+ border-radius: 4px;
583
+ font-family: PingFang;
584
+ color: #ffffff;
585
+ }
586
+ /*清除model中的浮动*/
587
+ .clearfix:after,.clearfix:before{
588
+ display: table;
589
+ }
590
+ .clearfix:after{
591
+ clear: both;
592
+ }
593
+ .input_view{
594
+ padding: 8px;
595
+ background-color: #ffffff;
596
+ border-radius: 2px;
597
+ border: solid 1px #c7c7c7!important;
598
+ color: #333333!important;
599
+ font-size: 15px!important;
600
+ }
601
+
602
+ .input_view[readonly]{
603
+ border: 1px solid #DDD!important;
604
+ color:#ACA899!important;
605
+ }
606
+ .input_view:disabled{
607
+ border: 1px solid #DDD!important;
608
+ color:#ACA899!important;
609
+ }
610
+ </style>
@@ -547,11 +547,13 @@
547
547
  {data: data},
548
548
  {resolveMsg: null, rejectMsg: '查询失败!!!'}
549
549
  )
550
- var f_due_money= res.data[0].f_due_money
551
- var cumulative= res.data[0].f_cumulative_payment_money
552
- if (Number(f_due_money) > Number(cumulative)) {
553
- this.$showAlert('费用未结清!!!', 'warning', 3000)
554
- throw null
550
+ if(res.data.length!==0){
551
+ var f_due_money= res.data[0].f_due_money
552
+ var cumulative= res.data[0].f_cumulative_payment_money
553
+ if (Number(f_due_money) > Number(cumulative)) {
554
+ this.$showAlert(`当前${defname}环节,应缴金额为:${f_due_money},费用未结清`, 'warning', 3000)
555
+ throw null
556
+ }
555
557
  }
556
558
  },
557
559
  // 施工前置 加表具后状态是待开通 提交后是正常 所以这里的判断条件需改正 (and uf.f_meter_classify is null and f_meternumber is null)
@@ -1513,180 +1515,11 @@
1513
1515
  this.show_data.start_activity = this.$workflow_vue.start_activity
1514
1516
  this.show_data.xmlfilename = this.$workflow_vue.workflow_xmlfilename
1515
1517
 
1516
- if ((this.show_data.f_apply_type === '报警器报建' || this.show_data.f_apply_type === '工商业报警器报建') && this.show_data.defname === '工程施工' && this.show_data.f_sub_state !='完工' && this.show_data.button.button_name === '完工'){
1517
- //判断是否添加报警器材料
1518
- let bjqlag = false
1519
- let datatemp = {
1520
- 'bjqid':"",
1521
- 'fprocessid':"",
1522
- 'sqvalue':"",
1523
- 'f_bjq_sid':"",
1524
- 'f_material_code':"",
1525
- 'f_bjq_baidu_lng':"",
1526
- 'f_bjq_baidu_lat':"",
1527
- 'f_bjq_gaode_lng':"",
1528
- 'f_bjq_gaode_lat':""
1529
- }
1530
-
1531
- let bjqststedata = {
1532
- "sid":"",
1533
- "bjqtype":"",
1534
- "f_process_id":"",
1535
- "bjqstate":"",
1536
- "f_userinfo_code":""
1537
- }
1538
- let numOne = [];
1539
-
1540
- let http = new HttpResetClass()
1541
- let data = {
1542
- tablename: `t_material_apply`,
1543
- condition: `f_process_id='${this.show_data.f_process_id}'`
1544
- }
1545
- let res = await http.load(
1546
- 'POST',
1547
- `rs/sql/apply_singleTable`,
1548
- {data: data},
1549
- {resolveMsg: null, rejectMsg: 'onetomany查询失败'}
1550
- )
1551
- res.data.forEach(item => {
1552
- if (item.f_material_name.substr(0,3) === '报警器'){
1553
- var bjname = item.f_material_name.split("-")
1554
- bjqststedata.sid = item.f_bjq_sid
1555
- bjqststedata.f_process_id = item.f_process_id
1556
- bjqststedata.bjqtype = bjname[1]
1557
- //====================================
1558
- bjqlag = true
1559
- datatemp.bjqid = item.id
1560
- datatemp.fprocessid = item.f_process_id
1561
- datatemp.f_bjq_sid = item.f_bjq_sid
1562
- datatemp.f_material_code = item.f_material_code
1563
- datatemp.f_bjq_lng = item.f_bjq_lng
1564
- datatemp.f_bjq_lat = item.f_bjq_lat
1565
- datatemp.f_bjq_gaode_lng = item.f_bjq_gaode_lng
1566
- datatemp.f_bjq_gaode_lat = item.f_bjq_gaode_lng
1567
- datatemp.f_bjq_baidu_lng = item.f_bjq_baidu_lng
1568
- datatemp.f_bjq_baidu_lat = item.f_bjq_baidu_lat
1569
- numOne.push(item.f_bjq_sid)
1570
- }
1571
- })
1572
1518
 
1573
- // this.show_data.onetomany.forEach(item=>{
1574
- // console.log("查看报警器材料",item)
1575
- // item.rows.forEach(i=>{
1576
- // if (i.f_material_name.substr(0,3) === '报警器'){
1577
- // var bjname = i.f_material_name.split("-")
1578
- // bjqststedata.sid = i.f_bjq_sid
1579
- // bjqststedata.f_process_id = i.f_process_id
1580
- // bjqststedata.bjqtype = bjname[1]
1581
- // //====================================
1582
- // bjqlag = true
1583
- // datatemp.bjqid = i.id
1584
- // datatemp.fprocessid = i.f_process_id
1585
- // datatemp.f_bjq_sid = i.f_bjq_sid
1586
- // datatemp.f_material_code = i.f_material_code
1587
- // numOne.push(i.f_bjq_sid)
1588
- // }
1589
- // })
1590
- // })
1591
- if (!bjqlag){
1592
- this.$showMessage('请添加报警器物料信息!!!')
1593
- return
1594
- }
1595
- if (numOne.length > 1){
1596
- this.$showMessage("暂时支持单个报警器物料安装!!!")
1597
- return
1598
- }
1599
- datatemp.sqvalue = this.show_data.areaData.sqvalue
1600
- datatemp.f_bjq_baidu_lng = this.show_data.templatlng.baidutemplng
1601
- datatemp.f_bjq_baidu_lat = this.show_data.templatlng.baidutemplat
1602
- datatemp.f_bjq_gaode_lng = this.show_data.templatlng.gaodetemplng
1603
- datatemp.f_bjq_gaode_lat = this.show_data.templatlng.gaodetemplat
1604
- datatemp.f_bjq_lng = this.show_data.templatlng.baidutemplng
1605
- datatemp.f_bjq_lat = this.show_data.templatlng.baidutemplat
1606
-
1607
- bjqststedata.f_userinfo_code = this.show_data.f_userinfo_code
1608
-
1609
- //判断是否推送 及推送的状态
1610
- //查询是否存在, 以型号及厂家判断
1611
- let bjqres = await this.$resetpost(
1612
- `rs/logic/getbjqsyncinfo`,
1613
- bjqststedata
1614
- )
1615
- if (bjqres.data.bjqstate != "成功"){
1616
- //区域地址存入材料记录表
1617
- let areares = await this.$resetpost(
1618
- `rs/logic/saveArea`,
1619
- {data: datatemp},
1620
- {resolveMsg: null, rejectMsg: '区域地址保存失败'}
1621
- )
1519
+ /* if ((this.show_data.defname === '工程决算' || this.show_data.defname === '工程审批') && this.show_data.button.button_name === '提交' && this.show_data.f_payment_ratio == "100%"){
1520
+ this.show_data.button.button_name = '跳过'
1521
+ }*/
1622
1522
 
1623
- //完工之后推送数据到汉威
1624
- let adddata = {
1625
- f_bjq_sid : datatemp.f_bjq_sid,
1626
- f_material_code : datatemp.f_material_code,
1627
- f_bjq_address: this.show_data.areaData.sqvalue,
1628
- f_user_name: this.show_data.f_user_name,
1629
- f_address: this.show_data.f_address,
1630
- f_user_phone: this.show_data.f_phone,
1631
- f_userinfo_code: this.show_data.f_userinfo_code,
1632
- installtime: this.show_data.f_construction_date,
1633
- f_orgid : this.show_data.f_orgid,
1634
- f_bjq_lng: datatemp.f_bjq_baidu_lng,
1635
- f_bjq_lat: datatemp.f_bjq_baidu_lat
1636
- }
1637
- let res = await this.$resetpost(
1638
- `ncc/rs/logic/bjqadduser`,
1639
- // `rs/logic/bjqadduser`,
1640
- adddata
1641
- )
1642
- if (res.data.code != 200){
1643
- if (bjqres.data.bjqstate.length == 0){
1644
- bjqststedata.bjqstate = "失败"
1645
- let bjqres3 = await this.$resetpost(
1646
- `rs/logic/addbjqsyncinfo`,
1647
- bjqststedata
1648
- )
1649
- }
1650
- this.$showMessage(res.data.msg)
1651
- return
1652
- }
1653
- //更改记录表状态
1654
- if (bjqres.data.bjqstate === "失败"){
1655
- bjqststedata.bjqstate = "成功"
1656
- let bjqres1 = await this.$resetpost(
1657
- `rs/logic/updatebjqsyncinfo`,
1658
- bjqststedata
1659
- )
1660
- }else{
1661
- bjqststedata.bjqstate = "成功"
1662
- let bjqres2 = await this.$resetpost(
1663
- `rs/logic/addbjqsyncinfo`,
1664
- bjqststedata
1665
- )
1666
- }
1667
- }
1668
- }
1669
- if ((this.show_data.f_apply_type === '工商户报建' || this.show_data.f_apply_type === '团购报建')
1670
- && (this.show_data.defname === '报装申请') && this.show_data.button.button_name === '提交'){
1671
- await this.contract_number()
1672
- }
1673
- // if(this.show_data.f_apply_type === '散户报建' && this.show_data.defname === '合同签订' && (this.show_data.button.button_name === '保存'||this.show_data.button.button_name === '提交')){
1674
- // let dataz = {
1675
- // condition: `u.id = ${this.show_data.id}`,
1676
- // data: {
1677
- // id: this.$login.f.id,
1678
- // orgid: this.$login.f.orgid
1679
- // }
1680
- // }
1681
- // let http = new HttpResetClass()
1682
- // let restpz = await http.load(
1683
- // 'POST',
1684
- // `rs/sql/checkuser`,
1685
- // {data: dataz},
1686
- // {resolveMsg: null, rejectMsg: '报建数据查询失败!!!'}
1687
- // )
1688
- // this.show_data.actid=restpz.data[0].actid
1689
- // }
1690
1523
  let res = await this.$resetpost(
1691
1524
  `rs/logic/ApplyProductService`,
1692
1525
  {data: this.show_data},
@@ -96,7 +96,7 @@
96
96
  <nobr>{{row.f_confirm_date}}</nobr>
97
97
  </td>
98
98
  <td style="text-align: center;">
99
- <nobr v-if="row.f_charge_status !== '退款'&& row.f_charge_status !== '作废'">
99
+ <nobr v-if="row.f_charge_status !== '退款'&& row.f_charge_status !== '作废' && row.f_confirm_person==null">
100
100
  <button
101
101
  type="button"
102
102
  name="button"
@@ -585,9 +585,15 @@ export default {
585
585
  resolveMsg: null,
586
586
  rejectMsg: '确认收款失败!!!'
587
587
  })
588
- this.selectdata = res.data
589
-
590
- this.$dispatch('breakControl', this.selectdata)
588
+ if(res.data==200){
589
+ this.$showAlert('确认收款成功!!!', 'success', 3000)
590
+ //延时1s
591
+ setTimeout(() => {
592
+ this.showConfirm= false
593
+ }, 1000)
594
+ }
595
+ //重新查询
596
+ this.search()
591
597
  },
592
598
  // 打开作废收费
593
599
  showInvalidModal(row) {
@@ -715,7 +721,7 @@ export default {
715
721
 
716
722
  },
717
723
  async showChargeModal() {
718
- this.getUserAddress()
724
+ // this.getUserAddress()
719
725
 
720
726
  if (this.selectdata.f_apply_type === '团购报建') {
721
727
  this.charge.f_dev_info_id = this.selectdata.f_dev_id
@@ -1,11 +1,12 @@
1
- import Vue from 'vue'
2
-
3
- let specialComp = {
4
- 'exploration-select': (resolve) => { require(['./pc/ExplorationSelect.vue'], resolve) },
5
- 'service-control': (resolve) => { require(['./pc/ServiceControl.vue'], resolve) },
6
- 'apply-charge-management': (resolve) => { require(['./pc/chargeManagement.vue'], resolve) },
7
- 'file-upload': (resolve) => { require(['./pc/FileUpload.vue'], resolve) },
8
- 'apply-upload': (resolve) => { require(['./pc/ApplyUpload.vue'], resolve) },
9
- 'installinfoselect': (resolve) => { require(['./pc/InstallInfoSelect.vue'], resolve) }
10
- }
11
- exports.specialComp = specialComp
1
+ import Vue from 'vue'
2
+
3
+ let specialComp = {
4
+ 'exploration-select': (resolve) => { require(['./pc/ExplorationSelect.vue'], resolve) },
5
+ 'service-control': (resolve) => { require(['./pc/ServiceControl.vue'], resolve) },
6
+ 'apply-charge-management': (resolve) => { require(['./pc/chargeManagement.vue'], resolve) },
7
+ 'file-upload': (resolve) => { require(['./pc/FileUpload.vue'], resolve) },
8
+ 'apply-upload': (resolve) => { require(['./pc/ApplyUpload.vue'], resolve) },
9
+ 'installinfoselect': (resolve) => { require(['./pc/InstallInfoSelect.vue'], resolve) },
10
+ 'installation-details': (resolve) => { require(['./pc/InstallationDetails.vue'], resolve) }
11
+ }
12
+ exports.specialComp = specialComp