sale-client 3.6.258 → 3.6.259

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,120 +1,120 @@
1
- {
2
- "name": "sale-client",
3
- "version": "3.6.258",
4
- "description": "收费模块前台组件",
5
- "main": "src/index.js",
6
- "scripts": {
7
- "example": "node build/example-server.js",
8
- "dev": "webpack-dev-server --config ./build/dev-server.js",
9
- "lint": "eslint src/**.js test/e2e/**.js test/unit/specs/** build/**.js",
10
- "unit": "karma start test/unit/karma.conf.js",
11
- "build": "rimraf lib && mkdirp lib && cross-env webpack --progress --hide-modules --config build/webpack.prod.conf.js",
12
- "e2e": "node test/e2e/runner.js",
13
- "release": "bash build/release.sh"
14
- },
15
- "repository": {
16
- "type": "git",
17
- "url": "https://gitee.com/aote/product.git"
18
- },
19
- "dependencies": {
20
- "crypto-js": "^4.1.1",
21
- "examples": "^0.1.0",
22
- "js-file-download": "0.4.12",
23
- "less-loader": "^2.2.3",
24
- "qrcodejs2": "0.0.2",
25
- "vue": "^1.0.17",
26
- "webpack-dev-server": "^2.11.5",
27
- "vue-client": "1.24.137",
28
- "yarn": "^1.22.10"
29
- },
30
- "devDependencies": {
31
- "address-client": "3.2.56",
32
- "axios": "0.15.3",
33
- "babel-core": "^6.0.0",
34
- "babel-loader": "^6.0.0",
35
- "babel-plugin-transform-runtime": "^6.0.0",
36
- "babel-preset-es2015": "^6.0.0",
37
- "babel-preset-stage-2": "^6.0.0",
38
- "chai": "^3.5.0",
39
- "co": "^4.6.0",
40
- "compression-webpack-plugin": "1.1.2",
41
- "connect-history-api-fallback": "^1.1.0",
42
- "cross-env": "^1.0.7",
43
- "cross-spawn": "^2.1.5",
44
- "css-loader": "^0.23.0",
45
- "echarts": "^4.1.0",
46
- "eslint": "^3.19.0",
47
- "eslint-config-standard": "^10.2.1",
48
- "eslint-friendly-formatter": "^3.0.0",
49
- "eslint-loader": "^1.7.1",
50
- "eslint-plugin-html": "^3.0.0",
51
- "eslint-plugin-import": "^2.7.0",
52
- "eslint-plugin-node": "^5.2.0",
53
- "eslint-plugin-promise": "^3.4.0",
54
- "eslint-plugin-standard": "^3.0.1",
55
- "eventsource-polyfill": "^0.9.6",
56
- "express": "^4.13.3",
57
- "extract-text-webpack-plugin": "^3.0.2",
58
- "terser-webpack-plugin-legacy": "^1.2.5",
59
- "file-loader": "^0.8.4",
60
- "filemanager-webpack-plugin": "^2.0.5",
61
- "function-bind": "^1.0.2",
62
- "html-webpack-plugin": "^2.8.1",
63
- "http-proxy-middleware": "^0.11.0",
64
- "inject-loader": "^2.0.1",
65
- "isparta-loader": "^2.0.0",
66
- "jasmine-core": "^2.4.1",
67
- "jquery": "^3.3.1",
68
- "jsencrypt": "3.0.0-rc.1",
69
- "json-loader": "^0.5.4",
70
- "karma": "^1.4.1",
71
- "karma-chrome-launcher": "^2.2.0",
72
- "karma-coverage": "^1.1.1",
73
- "karma-mocha": "^1.3.0",
74
- "karma-sinon-chai": "^1.3.1",
75
- "karma-sourcemap-loader": "^0.3.7",
76
- "karma-spec-reporter": "0.0.31",
77
- "karma-webpack": "^2.0.2",
78
- "ldap-clients": "3.0.62",
79
- "less": "^2.7.3",
80
- "manage-client": "3.1.8-88",
81
- "mkdirp": "^0.5.1",
82
- "mocha": "^3.2.0",
83
- "moment": "2.24.0",
84
- "ncp": "^2.0.0",
85
- "nightwatch": "^0.8.18",
86
- "qrcodejs2": "0.0.2",
87
- "rimraf": "^2.5.0",
88
- "selenium-server": "2.52.0",
89
- "sinon": "^2.1.0",
90
- "sinon-chai": "^2.8.0",
91
- "style": "0.0.3",
92
- "style-loader": "^0.20.3",
93
- "system-clients": "3.2.61",
94
- "url-loader": "^0.5.7",
95
- "vue-clipboard2": "0.3.1",
96
- "vue-hot-reload-api": "^1.2.0",
97
- "vue-html-loader": "^1.0.0",
98
- "vue-loader": "^8.2.1",
99
- "vue-resource": "^1.5.0",
100
- "vue-router": "^0.7.13",
101
- "vue-strap": "^1.0.9",
102
- "vue-style-loader": "^1.0.0",
103
- "vue-validator": "2.1.7",
104
- "webpack": "^3.12.0",
105
- "webpack-dev-middleware": "^1.4.0",
106
- "webpack-hot-middleware": "^2.6.0",
107
- "webpack-merge": "^0.8.3",
108
- "webpack-parallel-uglify-plugin": "^1.0.0",
109
- "weixin-js-sdk": "^1.2.0"
110
- },
111
- "keywords": [
112
- "selling-clients"
113
- ],
114
- "author": "张桥",
115
- "license": "ISC",
116
- "directories": {
117
- "example": "examples",
118
- "test": "test"
119
- }
120
- }
1
+ {
2
+ "name": "sale-client",
3
+ "version": "3.6.259",
4
+ "description": "收费模块前台组件",
5
+ "main": "src/index.js",
6
+ "scripts": {
7
+ "example": "node build/example-server.js",
8
+ "dev": "webpack-dev-server --config ./build/dev-server.js",
9
+ "lint": "eslint src/**.js test/e2e/**.js test/unit/specs/** build/**.js",
10
+ "unit": "karma start test/unit/karma.conf.js",
11
+ "build": "rimraf lib && mkdirp lib && cross-env webpack --progress --hide-modules --config build/webpack.prod.conf.js",
12
+ "e2e": "node test/e2e/runner.js",
13
+ "release": "bash build/release.sh"
14
+ },
15
+ "repository": {
16
+ "type": "git",
17
+ "url": "https://gitee.com/aote/product.git"
18
+ },
19
+ "dependencies": {
20
+ "crypto-js": "^4.1.1",
21
+ "examples": "^0.1.0",
22
+ "js-file-download": "0.4.12",
23
+ "less-loader": "^2.2.3",
24
+ "qrcodejs2": "0.0.2",
25
+ "vue": "^1.0.17",
26
+ "webpack-dev-server": "^2.11.5",
27
+ "vue-client": "1.24.137",
28
+ "yarn": "^1.22.10"
29
+ },
30
+ "devDependencies": {
31
+ "address-client": "3.2.56",
32
+ "axios": "0.15.3",
33
+ "babel-core": "^6.0.0",
34
+ "babel-loader": "^6.0.0",
35
+ "babel-plugin-transform-runtime": "^6.0.0",
36
+ "babel-preset-es2015": "^6.0.0",
37
+ "babel-preset-stage-2": "^6.0.0",
38
+ "chai": "^3.5.0",
39
+ "co": "^4.6.0",
40
+ "compression-webpack-plugin": "1.1.2",
41
+ "connect-history-api-fallback": "^1.1.0",
42
+ "cross-env": "^1.0.7",
43
+ "cross-spawn": "^2.1.5",
44
+ "css-loader": "^0.23.0",
45
+ "echarts": "^4.1.0",
46
+ "eslint": "^3.19.0",
47
+ "eslint-config-standard": "^10.2.1",
48
+ "eslint-friendly-formatter": "^3.0.0",
49
+ "eslint-loader": "^1.7.1",
50
+ "eslint-plugin-html": "^3.0.0",
51
+ "eslint-plugin-import": "^2.7.0",
52
+ "eslint-plugin-node": "^5.2.0",
53
+ "eslint-plugin-promise": "^3.4.0",
54
+ "eslint-plugin-standard": "^3.0.1",
55
+ "eventsource-polyfill": "^0.9.6",
56
+ "express": "^4.13.3",
57
+ "extract-text-webpack-plugin": "^3.0.2",
58
+ "terser-webpack-plugin-legacy": "^1.2.5",
59
+ "file-loader": "^0.8.4",
60
+ "filemanager-webpack-plugin": "^2.0.5",
61
+ "function-bind": "^1.0.2",
62
+ "html-webpack-plugin": "^2.8.1",
63
+ "http-proxy-middleware": "^0.11.0",
64
+ "inject-loader": "^2.0.1",
65
+ "isparta-loader": "^2.0.0",
66
+ "jasmine-core": "^2.4.1",
67
+ "jquery": "^3.3.1",
68
+ "jsencrypt": "3.0.0-rc.1",
69
+ "json-loader": "^0.5.4",
70
+ "karma": "^1.4.1",
71
+ "karma-chrome-launcher": "^2.2.0",
72
+ "karma-coverage": "^1.1.1",
73
+ "karma-mocha": "^1.3.0",
74
+ "karma-sinon-chai": "^1.3.1",
75
+ "karma-sourcemap-loader": "^0.3.7",
76
+ "karma-spec-reporter": "0.0.31",
77
+ "karma-webpack": "^2.0.2",
78
+ "ldap-clients": "3.0.62",
79
+ "less": "^2.7.3",
80
+ "manage-client": "3.1.8-88",
81
+ "mkdirp": "^0.5.1",
82
+ "mocha": "^3.2.0",
83
+ "moment": "2.24.0",
84
+ "ncp": "^2.0.0",
85
+ "nightwatch": "^0.8.18",
86
+ "qrcodejs2": "0.0.2",
87
+ "rimraf": "^2.5.0",
88
+ "selenium-server": "2.52.0",
89
+ "sinon": "^2.1.0",
90
+ "sinon-chai": "^2.8.0",
91
+ "style": "0.0.3",
92
+ "style-loader": "^0.20.3",
93
+ "system-clients": "3.2.61",
94
+ "url-loader": "^0.5.7",
95
+ "vue-clipboard2": "0.3.1",
96
+ "vue-hot-reload-api": "^1.2.0",
97
+ "vue-html-loader": "^1.0.0",
98
+ "vue-loader": "^8.2.1",
99
+ "vue-resource": "^1.5.0",
100
+ "vue-router": "^0.7.13",
101
+ "vue-strap": "^1.0.9",
102
+ "vue-style-loader": "^1.0.0",
103
+ "vue-validator": "2.1.7",
104
+ "webpack": "^3.12.0",
105
+ "webpack-dev-middleware": "^1.4.0",
106
+ "webpack-hot-middleware": "^2.6.0",
107
+ "webpack-merge": "^0.8.3",
108
+ "webpack-parallel-uglify-plugin": "^1.0.0",
109
+ "weixin-js-sdk": "^1.2.0"
110
+ },
111
+ "keywords": [
112
+ "selling-clients"
113
+ ],
114
+ "author": "张桥",
115
+ "license": "ISC",
116
+ "directories": {
117
+ "example": "examples",
118
+ "test": "test"
119
+ }
120
+ }
@@ -84,6 +84,9 @@
84
84
  <saletab header="用户设备查询" v-if="permission('用户设备查看')">
85
85
  <user-device-query :row="row" v-if="show == '用户设备查询'" @deal-msg="dealMsg"></user-device-query>
86
86
  </saletab>
87
+ <saletab header="合同查看" v-if="permission('合同查看')">
88
+ <contract-signing-list :row="row" v-if="show == '合同查看'" @deal-msg="dealMsg"></contract-signing-list>
89
+ </saletab>
87
90
  </saletabbut>
88
91
  </div>
89
92
  </div>
@@ -108,6 +111,7 @@
108
111
  import WebChargeQueryUser from './ic_detail/WebChargeQueryUser'
109
112
  import WebHandQueryUser from './ic_detail/WebHandQueryUser'
110
113
  import UserDeviceQuery from './ic_detail/UserDeviceQuery'
114
+ import contractSigningList from './ic_detail/contractSigningList'
111
115
 
112
116
  // 导入物联网相关查询
113
117
  import QueryInstruct from './iot_detail/QueryInstruct'
@@ -115,10 +119,11 @@
115
119
  import WatchCollection from './iot_detail/WatchCollection'
116
120
  import WatchWarning from './iot_detail/WatchWarning'
117
121
  import PriceChangeQueryUser from './ic_detail/PriceChangeQueryUser'
118
- import ChangeRecord from './ic_detail/ChangeRecord'
122
+ import ChangeRecord from './ic_detail/ChangeRecord'
119
123
  import PriceAdjustmentQueryUser from './ic_detail/PriceAdjustmentQueryUser'
120
124
  import MeterParam from './ic_detail/MeterParam'
121
125
  import DeveiceRecord from './ic_detail/DeveiceRecord'
126
+
122
127
  export default {
123
128
  title: '用户详细信息',
124
129
  props: ['f_userfiles_id', 'f_userinfo_id', 'f_userinfo_code', 'parentname', 'buttonshow'],
@@ -147,7 +152,8 @@ export default {
147
152
  MeterParam,
148
153
  DeveiceRecord,
149
154
  MachineRecordQuery,
150
- UserDeviceQuery
155
+ UserDeviceQuery,
156
+ contractSigningList
151
157
  },
152
158
  data () {
153
159
  return {
@@ -0,0 +1,117 @@
1
+ <template >
2
+ <div class="flex" style="justify-content: space-between;">
3
+ <div @keyup.enter="search" style="">
4
+ <criteria-paged :model="model" v-ref:paged>
5
+ <criteria @condition-changed='$parent.search' partial='criteria' v-ref:criteria>
6
+ <div class="form-horizontal select-overspread container-fluid auto" novalidate partial>
7
+ <div class="row">
8
+ <div class="col-sm-2 form-group">
9
+ <label class="font_normal_body">开始时间</label>
10
+ <datepicker placeholder='开始时间' style="width:60%"
11
+ v-model="model.startTime"
12
+ :value.sync="model.startTime"
13
+ :format="'yyyy-MM-dd'"
14
+ :show-reset-button="true"
15
+ condition="f_signature_date >= '{} 00:00:00'">
16
+ </datepicker>
17
+ </div>
18
+ <div class="col-sm-2 form-group" >
19
+ <label class="font_normal_body">结束日期</label>
20
+ <datepicker placeholder='结束日期' style="width:60%"
21
+ v-model="model.endTime"
22
+ :value.sync="model.endTime"
23
+ :format="'yyyy-MM-dd'"
24
+ :show-reset-button="true"
25
+ condition="f_signature_date <= '{} 23:59:59'">
26
+ </datepicker>
27
+ </div>
28
+
29
+ <div style="float: right">
30
+ <button @click="search()" class="button_search" style="margin-right: 10px" v-el:cba>查询</button>
31
+ </div>
32
+ </div>
33
+
34
+
35
+ </div>
36
+
37
+ </criteria>
38
+ <data-grid :model="model" class="list_area table_sy" class="list_area table_sy" partial='list' v-ref:grid>
39
+ <template partial='head'>
40
+ <tr>
41
+ <th><nobr>用户编号</nobr></th>
42
+ <th><nobr>用户姓名</nobr></th>
43
+ <th><nobr>用户地址</nobr></th>
44
+ <th><nobr>合同名称</nobr></th>
45
+ <th><nobr>合同签订状态</nobr></th>
46
+ <th><nobr>合同签订时间</nobr></th>
47
+ <th><nobr>合同签订人</nobr></th>
48
+ <th><nobr>操&emsp;&emsp;作</nobr></th>
49
+ </tr>
50
+ </template>
51
+ <template partial='body' partial='list' v-ref:grid>
52
+ <tr >
53
+ <td style="text-align:center">{{ row.f_userinfo_code }}</td>
54
+ <td style="text-align:center">{{ row.f_user_name }}</td>
55
+ <td style="text-align:center">{{ row.f_address }}</td>
56
+ <td style="text-align:center">{{ row.f_contract_name }}</td>
57
+ <td style="text-align:center">{{ row.f_signature_state }}</td>
58
+ <td style="text-align:center">{{ row.f_signature_date }}</td>
59
+ <td style="text-align:center">{{ row.f_user_name_not }}</td>
60
+ <td style="text-align:center"><button type="button" name="button" class="btn btn-link" @click="$parent.$parent.$parent.showExplain(row)">合同预览</button></td>
61
+ </tr>
62
+ </template>
63
+ <template partial='foot'></template>
64
+ </data-grid>
65
+ </criteria-paged>
66
+ </div>
67
+ <modal v-if="explainShow" :show.sync="explainShow" :title="titleL" style="height: 1000px" :width="1000" v-ref:model backdrop="false">
68
+ <article slot="modal-body" class="modal-body">
69
+ <iframe id="myIframe" :src="pdfPath" style="width: 100%;height: 500px"></iframe>
70
+ </article>
71
+ <div slot="modal-footer" class="modal-footer">
72
+ <button type="button" class="btn btn-default" @click="printPDF">打印</button>
73
+ <button type="button" class="btn btn-default" @click="close()">关闭</button>
74
+ </div>
75
+ </modal>
76
+ </div>
77
+
78
+ </template>
79
+
80
+ <script>
81
+ import {PagedList} from 'vue-client'
82
+ export default {
83
+ title: '合同查看',
84
+ data () {
85
+ return {
86
+ condition: `f_userinfo_id = '${this.row.f_userinfo_id}'`,
87
+ model: new PagedList('rs/sql/getContractSigin', 20, {}),
88
+ explainShow: false,
89
+ pdfPath: null,
90
+ prPdf: null,
91
+ titleL: null
92
+ }
93
+ },
94
+ props: ['row'],
95
+ ready () {
96
+ this.$refs.paged.$refs.criteria.search()
97
+ },
98
+ methods: {
99
+ printPDF () {
100
+ window.open(this.prPdf, '_blank')
101
+ },
102
+ async search () {
103
+ this.condition = `f_userinfo_id = '${this.row.f_userinfo_id}'`
104
+ this.model.search(this.condition, this.model)
105
+ },
106
+ showExplain (row) {
107
+ this.pdfPath = row.f_visit_url + '#toolbar=0'
108
+ this.prPdf = row.f_visit_url
109
+ this.titleL = row.f_contract_name
110
+ this.explainShow = true
111
+ }
112
+ },
113
+ computed: {
114
+ }
115
+ }
116
+ </script>
117
+
@@ -10,13 +10,12 @@
10
10
  </template>
11
11
 
12
12
  <script>
13
- import MbpeopleList from './MbpeopleList'
14
13
  import AddTobook from './AddTobook'
15
14
  import {HttpResetClass} from 'vue-client'
16
15
 
17
16
  export default {
18
17
  name: 'meterbookEntry',
19
- components: {AddTobook, MbpeopleList},
18
+ components: {AddTobook},
20
19
  title: '添加用户到抄表册',
21
20
  data () {
22
21
  return {
@@ -11,7 +11,7 @@
11
11
  <input type="text" class="input_search" style="width:60%" v-show="false" v-model="$refs.brand.selectedItems"
12
12
  v-validate:brand='{required: true }'>
13
13
  <v-select :value.sync="row.gasbrand" :options='meterbrands' placeholder='气表品牌' close-on-select
14
- search @change='brandChange' v-model='row.gasbrand' :disabled="curuser.f_user_state != '预备'" v-ref:brand></v-select>
14
+ search @change='brandChange' v-model='row.gasbrand' :disabled="curuser.f_user_state != '预备' && row.f_meter_classify != '机表'" v-ref:brand></v-select>
15
15
  </div>
16
16
  <div class="col-sm-4 form-group" :class="[$m.model.required ? 'has-error' : '']">
17
17
  <label for="gasmodel" class="font_normal_body">气表型号</label>
@@ -19,7 +19,7 @@
19
19
  v-validate:model='{required: true }'>
20
20
  <v-select :value.sync="row.gasmodel" :options='row.gasbrand[0].gasmodel' placeholder='气表型号'
21
21
  close-on-select
22
- v-model='row.gasmodel' :disabled="row.gasbrand.length === 0 || curuser.f_user_state != '预备'" v-ref:model></v-select>
22
+ v-model='row.gasmodel' :disabled="(row.gasbrand.length === 0 || curuser.f_user_state != '预备') && row.f_meter_classify != '机表'" v-ref:model></v-select>
23
23
  </div>
24
24
 
25
25
  <div class="col-sm-4 form-group" v-if="isiot" :class="[$m.f_meternumber.required ? 'has-error' : '']">
@@ -0,0 +1,563 @@
1
+ <template>
2
+ <div id='MbpeopleList' class="flex">
3
+ <criteria-paged :model="model" v-ref:paged>
4
+ <criteria partial='criteria' @condition-changed='$parent.selfSearch' v-ref:cri>
5
+ <div novalidate class="form-horizontal select-overspread container-fluid auto" partial>
6
+ <div class="row">
7
+ <div class="col-sm-3 form-group">
8
+ <label class="font_normal_body">用户编号</label>
9
+ <input type="text" class="input_search" style="width:60%" v-model="model.f_userinfo_code"
10
+ condition="f_userinfo_code = '{}'" placeholder='用户编号'>
11
+ </div>
12
+ <div class="col-sm-3 form-group">
13
+ <label class="font_normal_body">用户姓名</label>
14
+ <input type="text" class="input_search" style="width:60%" v-model="model.f_user_name"
15
+ condition="f_user_name like '%{}%'" placeholder='用户姓名'>
16
+ </div>
17
+
18
+ <div class="form-group button-range" style="float: right">
19
+ <button class="button_search button_spacing" @click="$parent.$parent.search()">查询</button>
20
+ <button class="button_clear button_spacing" @click="clear">清空</button>
21
+ <!-- <button class="button_export button_spacing" @click="$parent.$parent.importFile">导入</button>-->
22
+ <!-- <export-excel-->
23
+ <!-- :data="{condition:$parent.$parent.condition}"-->
24
+ <!-- :field="$parent.$parent.getfield"-->
25
+ <!-- sqlurl="rs/logic/exportfile" sql-name="salembPeopleList" template-name='表册用户导出'-->
26
+ <!-- :choose-col="true"></export-excel>-->
27
+ <div style="float: right" class="button_spacing"
28
+ :class="{'button_shrink_top': $parent.$parent.criteriaShow,'button_shrink_bottom': !$parent.$parent.criteriaShow}"
29
+ @click="$parent.$parent.criteriaShow = !$parent.$parent.criteriaShow"></div>
30
+ </div>
31
+ </div>
32
+ <div class="row" v-show="$parent.$parent.criteriaShow">
33
+ <div class="col-sm-3 form-group">
34
+ <label class="font_normal_body">&nbsp;小&nbsp;区&nbsp;域</label>
35
+ <v-select :value.sync="model.f_small_area" v-model="model.f_small_area"
36
+ :options='$parent.$parent.smallareas' placeholder='小区域'
37
+ close-on-select :search='true'
38
+ condition="f_small_area = '{}'"></v-select>
39
+ </div>
40
+ <div class="form-group col-sm-3">
41
+ <label class="font_normal_body">用户电话</label>
42
+ <input type="text" class="form-control" v-model="model.f_user_phone" placeholder='用户电话'
43
+ condition="f_user_phone like '%{}%'" v-next-el='yhxm' style="width: 60%"
44
+ >
45
+ </div>
46
+ <div class="form-group col-sm-3">
47
+ <label class="font_normal_body">客户类型</label>
48
+ <v-select :options='$parent.$parent.user_type' :value.sync="model.f_user_type"
49
+ close-on-select condition="f_user_type='{}'"
50
+ placeholder='用户类型' v-model="model.f_user_type"></v-select>
51
+ </div>
52
+ <div class="form-group col-sm-3">
53
+ <label class="font_normal_body">客户状态</label>
54
+ <v-select :options='$parent.$parent.user_state' :value.sync="model.f_user_state"
55
+ close-on-select condition="f_user_state = '{}'"
56
+ placeholder='客户状态' v-model="model.f_user_state"></v-select>
57
+ </div>
58
+ <div class="col-sm-3 form-group">
59
+ <label class="font_normal_body">所属表册</label>
60
+ <v-select :value.sync="model.f_meter_book_num" v-model="model.f_meter_book_num"
61
+ :options='$parent.$parent.meterbooks' placeholder='抄表册'
62
+ :value-single="true"
63
+ condition="f_meter_book_num='{}'"
64
+ style="width:60%"
65
+ close-on-select></v-select>
66
+ </div>
67
+ <div class="col-sm-3 form-group">
68
+ <label class="font_normal_body">抄&nbsp;表&nbsp;员&nbsp;</label>
69
+ <v-select :value.sync="model.f_inputtor" v-model='model.f_inputtor'
70
+ style="width:60%"
71
+ multiple="true"
72
+ condition="f_inputtor in {}"
73
+ :options='$parent.$parent.inputtores' placeholder='抄表员'
74
+ close-on-select
75
+ v-el:cc></v-select>
76
+ </div>
77
+ <div class="col-sm-3 form-group">
78
+ <label class="font_normal_body">表箱号&emsp;</label>
79
+ <!-- <input style="width:60%" type="text" class="form-control" v-model="model.f_adjustable_id"-->
80
+ <!-- condition="f_adjustable_id like '%{}%'" placeholder='调压箱号'-->
81
+ <!-- >-->
82
+ <input style="width:60%" type="text" class="form-control" v-model="model.f_metertitles"
83
+ condition="f_metertitles like '%{}%'" placeholder='表箱号'
84
+ >
85
+ <!-- <v-select :value.sync="model.f_adjustable_id" v-model="model.f_adjustable_id"-->
86
+ <!-- :options='$parent.$parent.adjustables' placeholder='调压箱号'-->
87
+ <!-- :value-single="true"-->
88
+ <!-- condition="f_adjustable_id='{}'"-->
89
+ <!-- style="width:60%"-->
90
+ <!-- close-on-select></v-select>-->
91
+ </div>
92
+ <div class="form-group col-sm-3">
93
+ <label class="font_normal_body">用气性质</label>
94
+ <v-select :options='$parent.$parent.gasproperties' :value.sync="model.f_gasproperties"
95
+ close-on-select condition="f_gasproperties='{}'"
96
+ placeholder='用气性质' v-model="model.f_gasproperties"></v-select>
97
+ </div>
98
+ <div class="form-group col-sm-3">
99
+ <label class="font_normal_body">气表类型</label>
100
+ <v-select :options='$parent.$parent.meter_classify' :value.sync="model.f_meter_classify"
101
+ close-on-select condition="f_meter_classify='{}'"
102
+ placeholder='气表类型' v-model="model.f_meter_classify"></v-select>
103
+ </div>
104
+ <div class="col-sm-3 form-group">
105
+ <label class="font_normal_body">气表品牌</label>
106
+ <v-select :value.sync="model.f_meter_brand" multiple
107
+ v-model="model.f_meter_brand"
108
+ :options='$parent.$parent.meterbrands' placeholder='请选择'
109
+ condition="f_meter_brand in {}"
110
+ close-on-select></v-select>
111
+ </div>
112
+ <div class="col-sm-3 form-group">
113
+ <label class="font_normal_body">小&emsp;区&emsp;</label>
114
+ <input type="text" class="input_search" v-model="model.f_residential_area" style="width: 60%"
115
+ condition=" f_residential_area like '{}%'" placeholder="输入小区">
116
+ </div>
117
+ <div class="form-group col-sm-3">
118
+ <label class="font_normal_body">客户地址</label>
119
+ <input type="text" class="input_search" style="width:60%" v-model="model.f_address"
120
+ condition="f_address like '%{}%'" placeholder='客户地址'>
121
+ </div>
122
+ <div class="col-sm-3 form-group">
123
+ <label class="font_normal_body">楼&emsp;号&emsp;</label>
124
+ <input type="text" class="input_search" style="width:60%" v-model="model.f_building"
125
+ condition="f_building = '{}'" placeholder='楼号'>
126
+ </div>
127
+ <div class="form-group col-sm-3">
128
+ <label class="font_normal_body">组织机构</label>
129
+ <res-select :initresid='$parent.$parent.curorgid'
130
+ @res-select="$parent.$parent.getorg"
131
+ class="select select_list"
132
+ restype='organization' :is-mul="false"
133
+ style="width: 60%">
134
+ </res-select>
135
+ </div>
136
+ <div class="form-group col-sm-3">
137
+ <label class="font_normal_body">是否在册</label>
138
+ <v-select :options='$parent.$parent.whether_list'
139
+ :value.sync="model.f_book_name"
140
+ v-model="model.f_book_name"
141
+ close-on-select condition="f_book_name {}"
142
+ placeholder='是否在册'></v-select>
143
+ </div>
144
+ <div class="col-sm-3 form-group">
145
+ <label class="font_normal_body">入户证号</label>
146
+ <input style="width:60%" type="text" class="form-control" v-model="model.f_book_no"
147
+ condition="f_book_no like '%{}%'" placeholder='入户证号'
148
+ >
149
+ </div>
150
+ <div class="col-sm-3 form-group">
151
+ <label class="font_normal_body">表&emsp;号&emsp;</label>
152
+ <input style="width:60%" type="text" class="form-control" v-model="model.f_meternumber"
153
+ condition="f_meternumber like '%{}%'" placeholder='表号'
154
+ >
155
+ </div>
156
+ </div>
157
+ </div>
158
+ </criteria>
159
+ <data-grid class="list_area table_sy" :model="model" partial='list' v-ref:grid :optional="true">
160
+ <template partial='head'>
161
+ <!--<th>-->
162
+ <!--<input type="checkbox" id="f_operator" v-model="$parent.$parent.$parent.all[model.pageIndex-1]"-->
163
+ <!--@change="$parent.$parent.$parent.select()"/>-->
164
+ <!--</th>-->
165
+ <th>
166
+ <nobr>序号</nobr>
167
+ </th>
168
+ <th>
169
+ <nobr>客户编号</nobr>
170
+ </th>
171
+ <th>
172
+ <nobr>客户名称</nobr>
173
+ </th>
174
+ <th>
175
+ <nobr>客户状态</nobr>
176
+ </th>
177
+ <th>
178
+ <nobr>客户地址</nobr>
179
+ </th>
180
+ <th>
181
+ <nobr>表号</nobr>
182
+ </th>
183
+ <th>
184
+ <nobr>所属表册</nobr>
185
+ </th>
186
+ <th>
187
+ <nobr>抄表员</nobr>
188
+ </th>
189
+ <th>
190
+ <nobr>抄表日期</nobr>
191
+ </th>
192
+ <th>
193
+ <nobr>客户类型</nobr>
194
+ </th>
195
+ <th>
196
+ <nobr>表底数</nobr>
197
+ </th>
198
+ </template>
199
+ <template partial='body'>
200
+ <!--<td>-->
201
+ <!--<input :id="'body'+model.pageIndex" type='checkbox' @change="$parent.$parent.$parent.selectOne($event,row,$index)"-->
202
+ <!--:checked="$parent.$parent.$parent.ischecked(model.pageIndex-1,$index)"/>-->
203
+ <!--</td>-->
204
+ <td>
205
+ <nobr>{{ $index + 1 }}</nobr>
206
+ </td>
207
+ <td>
208
+ <nobr>{{ row.f_userinfo_code }}</nobr>
209
+ </td>
210
+ <td>
211
+ <nobr>{{ row.f_user_name }}</nobr>
212
+ </td>
213
+ <td>
214
+ <nobr>{{ row.f_user_state }}</nobr>
215
+ </td>
216
+ <td>
217
+ <nobr>{{ row.f_address }}</nobr>
218
+ </td>
219
+ <td>
220
+ <nobr>{{ row.f_meternumber }}</nobr>
221
+ </td>
222
+ <td>
223
+ <nobr>{{ row.f_book_name }}</nobr>
224
+ </td>
225
+ <td>
226
+ <nobr>{{ row.f_inputtor }}</nobr>
227
+ </td>
228
+ <!-- <td>-->
229
+ <!-- <nobr>{{ row.f_adjustable_id }}</nobr>-->
230
+ <!-- </td>-->
231
+ <td>
232
+ <nobr>{{ row.f_hand_date }}</nobr>
233
+ </td>
234
+ <td>
235
+ <nobr>{{ row.f_user_type }}</nobr>
236
+ </td>
237
+ <td>
238
+ <nobr>{{ row.f_meter_base }}</nobr>
239
+ </td>
240
+ </template>
241
+ </data-grid>
242
+ </criteria-paged>
243
+ </div>
244
+ <modal :show.sync="show" width="500px" title="文件导入" v-ref:modal large backdrop="false">
245
+ <article slot="modal-body" class="modal-body">
246
+ <file-upload class="my-file-uploader " name="UploadFile" style="border-radius: 2px;"
247
+ action="rs/file/uploadFile" tagname="导入表册用户" v-ref:file multiple></file-upload>
248
+ </article>
249
+ <footer slot="modal-footer" class="modal-footer">
250
+ </footer>
251
+ </modal>
252
+ </template>
253
+
254
+ <script>
255
+ import {PagedList} from 'vue-client'
256
+ import Vue from 'vue'
257
+
258
+ let loadParamGem = async function (self) {
259
+ await self.$LoadParams.loadParam()
260
+ self.getfield = self.config.excelHeaders
261
+ // self.$refs.paged.$refs.cri.model.f_meter_classify = ['机表']
262
+ self.$refs.paged.$refs.cri.model.f_book_name = ['is null']
263
+ await self.initAdjustables()
264
+ // await self.search()
265
+ }
266
+ export default {
267
+ name: 'MbpeopleList',
268
+ data() {
269
+ return {
270
+ orgCondtionStr: '',
271
+ f_filialeid: this.$login.f.orgid,
272
+ f_orgid: '',
273
+ invoiceuse: [{label: '是', value: 'is not null'}, {label: '否', value: 'is null'}],
274
+ model: new PagedList('rs/sql/mb_peopleList', 20),
275
+ f_orgstr: this.$login.f.orgid,
276
+ // 要操作的用户
277
+ rowsdata: [],
278
+ aaa: '',
279
+ // 控制全选
280
+ all: [],
281
+ // 控制单选
282
+ radio: [],
283
+ show: false,
284
+ meterbooks: [{label: '全部', value: ''}],
285
+ criteriaShow: false,
286
+ gasproperties: this.$appdata.getParam('用气性质') ? [{
287
+ label: '全部',
288
+ value: ''
289
+ }, ...this.$appdata.getParam('用气性质')] : [],
290
+ user_type: this.$appdata.getParam('用户类型') ? [{
291
+ label: '全部',
292
+ value: ''
293
+ }, ...this.$appdata.getParam('用户类型')] : [],
294
+ meter_classify: this.$appdata.getParam('气表类型') ? [{
295
+ label: '全部',
296
+ value: ''
297
+ }, ...this.$appdata.getParam('气表类型')] : [],
298
+ f_small_areas: this.$appdata.getParam('小区域') ? [{
299
+ label: '全部',
300
+ value: ''
301
+ }, ...this.$appdata.getParam('小区域')] : [],
302
+ user_state: [{label: '正常', value: '正常'}, {label: '预备', value: '预备'}, {label: '销户', value: '销户'}],
303
+ whether_list: [{label: '已在册内', value: 'is not null'}, {label: '不在册内', value: 'is null'}],
304
+ meterbrands: [],
305
+ condition: '',
306
+ adjustables: [],
307
+ unnullrowdata: [],
308
+ getfield: {},
309
+ config: {
310
+ // 导出列要和查询列相同
311
+ excelHeaders: {
312
+ 'f_userfiles_id': '系统识别号',
313
+ 'f_userinfo_code': '用户编号',
314
+ 'f_user_name': '用户姓名',
315
+ 'f_address': '用户地址'
316
+ }
317
+ },
318
+ curorgid: [this.$login.f.orgid]
319
+ }
320
+ },
321
+ created() {
322
+ },
323
+ ready() {
324
+ loadParamGem(this)
325
+ },
326
+ methods: {
327
+ async meterbook() {
328
+ this.meterbooks = []
329
+ if (this.f_orgid == '') {
330
+ this.f_orgid = this.$login.f.orgid
331
+ }
332
+ let res = await this.$resetpost('rs/sql/saleSingleTable', {
333
+ data: {
334
+ tablename: 't_meter_book',
335
+ condition: ` 1=1 and f_orgid='${this.f_orgid}' and f_book_state='有效'`
336
+ }
337
+ }, {resolveMsg: null, rejectMsg: null})
338
+ for (let i = 0; i < res.data.length; i++) {
339
+ console.log('res', res.data[i])
340
+ let temp = []
341
+ temp.label = res.data[i].f_book_name
342
+ temp.value = res.data[i].id
343
+ this.meterbooks.push(temp)
344
+ }
345
+ },
346
+ invoiceuseChange(val) {
347
+ // 查询已开票记录清空选项
348
+ if (val == 'is not null') {
349
+ this.rowsdata = []
350
+ this.radio = []
351
+ }
352
+ },
353
+
354
+ select() {
355
+ let index = this.model.pageIndex - 1
356
+ console.log('全选', this.all[index])
357
+ if (!this.radio[index]) {
358
+ this.radio.$set(index, [])
359
+ }
360
+ if (this.all[index]) {
361
+ // 数据
362
+ this.rowsdata[index] = Object.assign([], this.model.rows)
363
+ // 勾选
364
+ for (var i = 0; i < this.model.rows.length; i++) {
365
+ this.radio[index].$set(i, true)
366
+ }
367
+ } else {
368
+ // 数据
369
+ this.rowsdata[index] = []
370
+ // 不勾选
371
+ for (var i = 0; i < this.model.rows.length; i++) {
372
+ this.radio[index].$set(i, false)
373
+ }
374
+ }
375
+ this.mergeRowData()
376
+ },
377
+ importFile() {
378
+ this.show = true
379
+ },
380
+ async initAdjustables() {
381
+ let arr = []
382
+ let filter = this.$login.f.orgid
383
+ this.$GetSaleParam.getAdjustable(filter).forEach((item) => {
384
+ let temp = {}
385
+ temp.label = '[' + item.value.f_adjustable_id + ']-' + item.label
386
+ temp.value = item.value.id
387
+ arr.push(temp)
388
+ })
389
+ this.adjustables = [{label: '全部', value: ''}, ...arr]
390
+ // 初始化气表品牌
391
+ let brandArr = []
392
+ this.$GetSaleParam.getGasbrand().forEach((item) => {
393
+ let temp1 = {}
394
+ temp1.label = item.label
395
+ temp1.value = item.value.f_meter_brand
396
+ brandArr.push(temp1)
397
+ })
398
+ this.meterbrands = [{label: '全部', value: ''}, ...brandArr]
399
+ //
400
+ // // 加载抄表册
401
+ // console.log("------------------this.$GetSaleParam.getMeterBooks()",this.$GetSaleParam.getMeterBooks())
402
+ // this.meterbooks = [{label: '全部', value: ''}, ...this.$GetSaleParam.getMeterBooks()]
403
+ },
404
+ search() {
405
+ this.$refs.paged.$refs.cri.search()
406
+ console.log('mbpeople this = ', this)
407
+ },
408
+ selfSearch(args) {
409
+ let f_orgstr = this.orgCondtionStr ? this.orgCondtionStr : "and f_orgid in ('" + this.f_orgid + "')"
410
+ args.condition = `${args.condition} ` + f_orgstr
411
+ // args.condition += ` and f_orgid = ${this.f_orgstr}`
412
+ this.condition = args.condition
413
+ this.$parent.condition = this.condition
414
+ this.model.search(args.condition, args.model)
415
+ },
416
+ // 合并二维数组并去空
417
+ mergeRowData() {
418
+ console.log('!!!!!!!!!!!!!数组去空', this.rowsdata)
419
+ let data = []
420
+ // 合并
421
+ for (let array of this.rowsdata) {
422
+ data.push.apply(data, array)
423
+ }
424
+ // 去空
425
+ // 拓展数组去空值的方法
426
+ Array.prototype.removeEmpty = function () {
427
+ for (var i = 0; i < this.length; i++) {
428
+ if (this[i] == '' || typeof (this[i]) == 'undefined') {
429
+ this.splice(i, 1)
430
+ i--
431
+ }
432
+ }
433
+ return this
434
+ }
435
+ data = data.removeEmpty()
436
+ this.unnullrowdata = []
437
+ data.forEach((row) => {
438
+ this.unnullrowdata.push(row.f_userfiles_id + '')
439
+ })
440
+ this.$parent.rowsdata = this.unnullrowdata
441
+ // this.$parent.rowsdata = this.rowsdata
442
+ },
443
+ selectOne(event, row, i) {
444
+ console.log('单选', event.target.checked)
445
+ let index = this.model.pageIndex - 1
446
+ if (!this.rowsdata[index]) {
447
+ this.rowsdata[index] = []
448
+ }
449
+ if (!this.radio[index]) {
450
+ this.radio.$set(index, [])
451
+ }
452
+ if (event.target.checked) {
453
+ // 数据
454
+ this.rowsdata[index][i] = row
455
+ // 勾选
456
+ this.radio[index].$set(i, true)
457
+ // 判断是否全部选中
458
+ var allState = true
459
+ if (this.model.rows.length != this.radio[index].length) {
460
+ allState = false
461
+ }
462
+ for (var state of this.radio[index]) {
463
+ if (!state) {
464
+ allState = false
465
+ }
466
+ }
467
+ if (allState) {
468
+ this.all.$set(index, true)
469
+ } else {
470
+ this.all.$set(index, false)
471
+ }
472
+ } else {
473
+ // 数据
474
+ this.rowsdata[index][i] = []
475
+ // 不勾选
476
+ this.radio[index].$set(i, false)
477
+ // 任意取消一个则全选状态设为false
478
+ this.all.$set(index, false)
479
+ }
480
+ this.mergeRowData()
481
+ },
482
+ getorg(val) {
483
+ console.log('getorg:val=', val)
484
+ console.log('getorg:this.f_orgid=', this.f_orgid)
485
+ this.f_orgid = val
486
+ this.f_filialeid = val[0]
487
+ },
488
+ async getmeterbook() {
489
+ await this.meterbook()
490
+ this.$emit('childre', this.meterbooks)
491
+ }
492
+ },
493
+ computed: {
494
+ ischecked() {
495
+ return function (index, i) {
496
+ if (!this.radio[index]) {
497
+ return false
498
+ }
499
+ return this.radio[index][i]
500
+ }
501
+ },
502
+ smallareas() {
503
+ return [{label: '全部', value: ''}, ...this.$appdata.getParam('小区域')]
504
+ },
505
+ inputtores() {
506
+ // 获取抄表员
507
+ console.log('获取抄表员', this.$login.f)
508
+ let rs = []
509
+ if (this.$login.f.f_gasman.length > 0) {
510
+ for (let i = 0; i < this.$login.f.f_gasman.length; i++) {
511
+ let temp = {
512
+ label: this.$login.f.f_gasman[i].name,
513
+ value: this.$login.f.f_gasman[i].name
514
+ }
515
+ rs.push(temp)
516
+ }
517
+ }
518
+ this.inputtores2 = rs
519
+ return [...rs]
520
+ }
521
+ },
522
+ watch: {
523
+ async 'f_orgid'() {
524
+ this.meterbooks = []
525
+ await this.meterbook()
526
+ this.$emit('childre', this.meterbooks)
527
+ }
528
+ },
529
+ events: {
530
+ onFileUpload: function (file, res) {
531
+ // let URL = res.f_downloadpath.substring(res.f_downloadpath.lastIndexOf(":\\") + 2)
532
+ // res.f_downloadpath = "http://" + location.host + "/" + URL
533
+ // res.f_downloadpath.replace('\\','/')
534
+ this.$resetpost('rs/logic/upLoadBookFile',
535
+ {
536
+ data: {
537
+ condition: this.condition,
538
+ filepath: res.f_downloadpath
539
+ }
540
+ },
541
+ {resolveMsg: null, rejectMsg: '上传失败'}).then((res) => {
542
+ this.show = false
543
+ this.$showAlert(`导入成功`, 'success', 2000)
544
+ this.search()
545
+ })
546
+ }
547
+ }
548
+ }
549
+ </script>
550
+
551
+ <style lang="less">
552
+ #MbpeopleList {
553
+ tr {
554
+ th {
555
+ text-align: center;
556
+ }
557
+
558
+ td {
559
+ text-align: center;
560
+ }
561
+ }
562
+ }
563
+ </style>
@@ -43,4 +43,5 @@ export default function () {
43
43
  Vue.component('batch-edit-files', (resolve) => { require(['./batch/batchEditFiles'], resolve) })
44
44
  // 抄表审核
45
45
  Vue.component('meter-read-audit', (resolve) => { require(['./handAudit/MeterReadAudit'], resolve) })
46
+ Vue.component('mbpeople-list', (resolve) => { require(['./MbpeopleList'], resolve) })
46
47
  }
package/src/sale.js CHANGED
@@ -381,6 +381,7 @@ export default function () {
381
381
  Vue.component('meterbook-user', (resolve) => { require(['./components/revenue/HandManager/MeterBookUser'], resolve) })
382
382
  // 抄表册新增用户管理
383
383
  Vue.component('meterbook-entry', (resolve) => { require(['./components/revenue/HandManager/meterbookEntry'], resolve) })
384
+ Vue.component('mbpeople-list', (resolve) => { require(['./components/revenue/HandManager/MbpeopleList'], resolve) })
384
385
  // 违约金生成规则(f_end_date规则)
385
386
  Vue.component('overdue-set', (resolve) => { require(['./components/revenue/HandManager/OverdueSet'], resolve) })
386
387
  Vue.component('overdue-set-list', (resolve) => { require(['./components/revenue/HandManager/OverdueSetList'], resolve) })