sale-client 3.7.14 → 3.7.15

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": "sale-client",
3
- "version": "3.7.14",
3
+ "version": "3.7.15",
4
4
  "description": "收费模块前台组件",
5
5
  "main": "src/index.js",
6
6
  "scripts": {
@@ -0,0 +1,310 @@
1
+ <template>
2
+ <div class="flex-row">
3
+ <div class="basic-main">
4
+ <criteria-paged :model="model" v-ref:paged @sort="sort">
5
+ <criteria partial='criteria' v-ref:criteria @condition-changed="$parent.selfSearch">
6
+ <div novalidate class="form-horizontal select-overspread container-fluid auto" partial>
7
+ <div class="row">
8
+ <div class="col-sm-3 form-group">
9
+ <label class="font_normal_body">用户姓名:</label>
10
+ <input type="text" class="input_search" v-model="model.f_user_name"
11
+ condition="f_user_name like '%{}%'" placeholder='请输入用户姓名'>
12
+ </div>
13
+ <div class="col-sm-3 form-group">
14
+ <label class="font_normal_body">用户标识:</label>
15
+ <input type="text" class="input_search" v-model="model.f_user_id"
16
+ condition="f_user_id like '%{}%'" placeholder='请输入用户标识'>
17
+ </div>
18
+ <div class="col-sm-3 form-group">
19
+ <label class="font_normal_body">用户地址:</label>
20
+ <input type="text" class="input_search" v-model="model.f_user_address"
21
+ condition="f_user_address like '%{}%'" placeholder='请输入用户地址'>
22
+ </div>
23
+ <div class="col-sm-3 form-group">
24
+ <label class="font_normal_body">回复人:</label>
25
+ <input type="text" class="input_search" v-model="model.f_attendant"
26
+ condition="f_attendant like '%{}%'" placeholder='请输入回复人'>
27
+ </div>
28
+ </div>
29
+ <div class="row">
30
+ <div class="col-sm-3 form-group">
31
+ <label class="font_normal_body">转人工时间:</label>
32
+ <div style="display: flex; align-items: center;">
33
+ <datepicker placeholder="开始日期"
34
+ style="width: 100px; margin-right: 5px;"
35
+ v-model="model.startDate"
36
+ :value.sync="model.startDate"
37
+ :format="'yyyy-MM-dd'"></datepicker>
38
+ <span style="margin: 0 5px;">~</span>
39
+ <datepicker placeholder="结束日期"
40
+ style="width: 100px;"
41
+ v-model="model.endDate"
42
+ :value.sync="model.endDate"
43
+ :format="'yyyy-MM-dd'"></datepicker>
44
+ </div>
45
+ </div>
46
+ <div class="col-sm-3 form-group">
47
+ <label class="font_normal_body">人工回复时间:</label>
48
+ <div style="display: flex; align-items: center;">
49
+ <datepicker placeholder="开始日期"
50
+ style="width: 100px; margin-right: 5px;"
51
+ v-model="model.startMsgDate"
52
+ :value.sync="model.startMsgDate"
53
+ :format="'yyyy-MM-dd'"></datepicker>
54
+ <span style="margin: 0 5px;">~</span>
55
+ <datepicker placeholder="结束日期"
56
+ style="width: 100px;"
57
+ v-model="model.endMsgDate"
58
+ :value.sync="model.endMsgDate"
59
+ :format="'yyyy-MM-dd'"></datepicker>
60
+ </div>
61
+ </div>
62
+ <div class="col-sm-6 form-group" style="text-align: right;">
63
+ <button class="button_search button_spacing" @click="search()">查询</button>
64
+ <button class="button_clear button_spacing" @click="clear()">重置</button>
65
+ <export-excel
66
+ :data="getCondition"
67
+ :field="getfield"
68
+ sqlurl="rs/logic/userExport"
69
+ sql-name="userQuery"
70
+ template-name='用户导出'
71
+ :choose-col="true">
72
+ </export-excel>
73
+ </div>
74
+ </div>
75
+ </div>
76
+ </criteria>
77
+
78
+ <data-grid :model="model" partial='list' class="list_area table_sy" v-ref:grid>
79
+ <template partial='head'>
80
+ <tr>
81
+ <th><input type='checkbox' v-model="allSelect" @change="selectAll"></th>
82
+ <th>序号</th>
83
+ <th>
84
+ <nobr>
85
+ <data-order field="f_user_name" name="用户姓名"
86
+ :order.sync="orderFields.f_user_name"></data-order>
87
+ </nobr>
88
+ </th>
89
+ <th>
90
+ <nobr>
91
+ <data-order field="f_user_id" name="用户标识"
92
+ :order.sync="orderFields.f_user_id"></data-order>
93
+ </nobr>
94
+ </th>
95
+ <th>
96
+ <nobr>
97
+ <data-order field="f_user_address" name="用户地址"
98
+ :order.sync="orderFields.f_user_address"></data-order>
99
+ </nobr>
100
+ </th>
101
+ <th>
102
+ <nobr>
103
+ <data-order field="f_ivr_time" name="转人工时间"
104
+ :order.sync="orderFields.f_ivr_time"></data-order>
105
+ </nobr>
106
+ </th>
107
+ <th>
108
+ <nobr>
109
+ <data-order field="f_msg_time" name="人工回复时间"
110
+ :order.sync="orderFields.f_msg_time"></data-order>
111
+ </nobr>
112
+ </th>
113
+ <th>
114
+ <nobr>
115
+ <data-order field="f_attendant" name="回复人"
116
+ :order.sync="orderFields.f_attendant"></data-order>
117
+ </nobr>
118
+ </th>
119
+ <th>
120
+ <nobr>
121
+ <data-order field="f_rate" name="评价等级"
122
+ :order.sync="orderFields.f_rate"></data-order>
123
+ </nobr>
124
+ </th>
125
+ </tr>
126
+ </template>
127
+
128
+ <template partial='body' scope="row">
129
+ <tr>
130
+ <td><input type='checkbox' @change="selectRow($event, row)" :checked="row.selected"></td>
131
+ <td>{{ $index + 1 }}</td>
132
+ <td>{{ row.f_user_name }}</td>
133
+ <td>{{ row.f_user_id }}</td>
134
+ <td>{{ row.f_user_address }}</td>
135
+ <td>{{ row.f_ivr_time }}</td>
136
+ <td>{{ row.f_msg_time }}</td>
137
+ <td>{{ row.f_attendant }}</td>
138
+ <td>{{ row.f_rate }}</td>
139
+ </tr>
140
+ </template>
141
+ </data-grid>
142
+ </criteria-paged>
143
+ </div>
144
+ </div>
145
+ </template>
146
+
147
+ <script>
148
+ import { PagedList } from 'vue-client'
149
+
150
+ export default {
151
+ data() {
152
+ return {
153
+ model: new PagedList('rs/sql/saleSingleTable', 20, {
154
+ tablename: 't_text_log'
155
+ }, {
156
+ f_user_name: '',
157
+ f_user_id: '',
158
+ f_user_address: '',
159
+ f_ivr_time: '',
160
+ f_msg_time: '',
161
+ f_attendant: '',
162
+ f_rate: ''
163
+ }),
164
+ allSelect: false,
165
+ orderFields: {
166
+ f_user_name: 'no',
167
+ f_user_id: 'no',
168
+ f_user_address: 'no',
169
+ f_ivr_time: 'no',
170
+ f_msg_time: 'no',
171
+ f_attendant: 'no',
172
+ f_rate: 'no'
173
+ },
174
+ getfield: {
175
+ 'f_user_name': '用户姓名',
176
+ 'f_user_id': '用户标识',
177
+ 'f_user_address': '用户地址',
178
+ 'f_ivr_time': '转人工时间',
179
+ 'f_msg_time': '人工回复时间',
180
+ 'f_attendant': '回复人',
181
+ 'f_rate': '评价等级'
182
+ }
183
+ }
184
+ },
185
+ methods: {
186
+ search() {
187
+ this.$refs.paged.$refs.criteria.search()
188
+ },
189
+ clear() {
190
+ Object.keys(this.model).forEach(key => {
191
+ if (key !== 'items' && key !== 'tablename') {
192
+ this.model[key] = ''
193
+ }
194
+ })
195
+ this.$refs.paged.$refs.criteria.model.f_user_name = ''
196
+ this.$refs.paged.$refs.criteria.model.f_user_id = ''
197
+ this.$refs.paged.$refs.criteria.model.f_user_address = ''
198
+ this.$refs.paged.$refs.criteria.model.f_attendant = ''
199
+ this.startDate = ''
200
+ this.endDate = ''
201
+ this.startMsgDate = ''
202
+ this.endMsgDate = ''
203
+ this.$refs.paged.$refs.criteria.search()
204
+ },
205
+ selectAll(event) {
206
+ this.model.rows.forEach(row => {
207
+ row.selected = event.target.checked
208
+ })
209
+ },
210
+ selectRow(event, row) {
211
+ row.selected = event.target.checked
212
+ },
213
+ sort(field) {
214
+ this.orderFields[field] = this.orderFields[field] === 'asc' ? 'desc' : 'asc'
215
+ }
216
+ },
217
+ computed: {
218
+ getCondition() {
219
+ let condition = ''
220
+ if (this.model.f_user_name) {
221
+ condition += ` and f_user_name like '%${this.model.f_user_name}%'`
222
+ }
223
+ if (this.model.f_user_id) {
224
+ condition += ` and f_user_id like '%${this.model.f_user_id}%'`
225
+ }
226
+ if (this.model.f_user_address) {
227
+ condition += ` and f_user_address like '%${this.model.f_user_address}%'`
228
+ }
229
+ if (this.model.f_attendant) {
230
+ condition += ` and f_attendant like '%${this.model.f_attendant}%'`
231
+ }
232
+ if (this.startDate && this.endDate) {
233
+ condition += ` and f_ivr_time between '${this.startDate}' and '${this.endDate}'`
234
+ }
235
+ if (this.startMsgDate && this.endMsgDate) {
236
+ condition += ` and f_msg_time between '${this.startMsgDate}' and '${this.endMsgDate}'`
237
+ }
238
+ return condition
239
+ }
240
+ }
241
+ }
242
+ </script>
243
+
244
+ <style scoped>
245
+ .flex-row {
246
+ display: flex;
247
+ flex-direction: row;
248
+ }
249
+
250
+ .basic-main {
251
+ width: 100%;
252
+ }
253
+
254
+ .form-group {
255
+ margin-bottom: 15px;
256
+ }
257
+
258
+ .input_search {
259
+ width: 200px;
260
+ padding: 6px;
261
+ border: 1px solid #ccc;
262
+ border-radius: 4px;
263
+ }
264
+
265
+ .button_search {
266
+ background-color: #007bff;
267
+ color: white;
268
+ padding: 6px 12px;
269
+ border: none;
270
+ border-radius: 4px;
271
+ cursor: pointer;
272
+ }
273
+
274
+ .button_clear {
275
+ background-color: #6c757d;
276
+ color: white;
277
+ padding: 6px 12px;
278
+ border: none;
279
+ border-radius: 4px;
280
+ cursor: pointer;
281
+ }
282
+
283
+ .button_spacing {
284
+ margin-left: 10px;
285
+ }
286
+
287
+ .list_area {
288
+ width: 100%;
289
+ border-collapse: collapse;
290
+ margin-top: 10px;
291
+ }
292
+
293
+ .list_area th,
294
+ .list_area td {
295
+ padding: 8px;
296
+ text-align: left;
297
+ border-bottom: 1px solid #ddd;
298
+ }
299
+
300
+ .list_area th {
301
+ background-color: #f2f2f2;
302
+ position: sticky;
303
+ top: 0;
304
+ z-index: 1;
305
+ }
306
+
307
+ .list_area tr:hover {
308
+ background-color: #f5f5f5;
309
+ }
310
+ </style>
@@ -4,7 +4,8 @@
4
4
  <criteria partial='criteria' @condition-changed='$parent.selfSearch' v-ref:cri>
5
5
  <div novalidate class="form-horizontal select-overspread container-fluid auto" partial>
6
6
  <div class="row">
7
- <res-select-group :show-component="['company','department', 'operator']" :initres="$parent.$parent.initres"
7
+ <!-- <res-select-group :show-component="['company','department', 'operator']" :initres="$parent.$parent.initres"-->
8
+ <res-select-group :show-component="['department', 'operator']" :initres="$parent.$parent.initres"
8
9
  @re-res="$parent.$parent.getRes" v-ref:sel></res-select-group>
9
10
  <div class="form-group col-sm-2">
10
11
  <label class="font_normal_body">客户编号</label>
@@ -5,7 +5,8 @@
5
5
  <div novalidate class="form-horizontal select-overspread container-fluid auto" partial>
6
6
  <div class="row">
7
7
  <div class="row" width="100%">
8
- <res-select-group :show-component="['company','department', 'operator']" :initres="$parent.$parent.initres"
8
+ <!-- <res-select-group :show-component="['company','department', 'operator']" :initres="$parent.$parent.initres"-->
9
+ <res-select-group :show-component="['department', 'operator']" :initres="$parent.$parent.initres"
9
10
  @re-res="$parent.$parent.getRes" v-ref:sel></res-select-group>
10
11
  <div class="form-group col-sm-2">
11
12
  <label class="font_normal_body">客户编号</label>
@@ -5,7 +5,8 @@
5
5
  <div novalidate class="form-horizontal select-overspread container-fluid auto" partial>
6
6
  <div class="row">
7
7
  <div class="row" width="100%">
8
- <res-select-group :show-component="['company','department', 'operator']" :initres="$parent.$parent.initres"
8
+ <!-- <res-select-group :show-component="['company','department', 'operator']" :initres="$parent.$parent.initres"-->
9
+ <res-select-group :show-component="['department', 'operator']" :initres="$parent.$parent.initres"
9
10
  @re-res="$parent.$parent.getRes" v-ref:sel></res-select-group>
10
11
  <div class="form-group col-sm-2">
11
12
  <label class="font_normal_body">客户编号</label>
@@ -0,0 +1,219 @@
1
+ <template>
2
+ <div class="basic-main" style="height: 98%">
3
+ <div class="flex">
4
+ <criteria-paged :model="model" v-ref:paged>
5
+ <criteria partial='criteria' v-ref:criteria @condition-changed='$parent.selfSearch'>
6
+ <div novalidate class="form-horizontal select-overspread container-fluid auto" partial>
7
+ <div class="row">
8
+ <!-- 用户姓名查询 -->
9
+ <div class="col-sm-2 form-group">
10
+ <label class="font_normal_body">用户姓名</label>
11
+ <input type="text" class="input_search"
12
+ style="width:60%"
13
+ v-model="model.f_user_name"
14
+ condition="f_user_name like '%{}%'"
15
+ placeholder="请输入用户姓名"/>
16
+ </div>
17
+
18
+ <!-- 用户标识查询 -->
19
+ <div class="col-sm-2 form-group">
20
+ <label class="font_normal_body">用户标识</label>
21
+ <input type="text" class="input_search"
22
+ style="width:60%"
23
+ v-model="model.f_user_id"
24
+ condition="f_user_id like '%{}%'"
25
+ placeholder="请输入用户标识"/>
26
+ </div>
27
+
28
+ <!-- 回复人查询 -->
29
+ <div class="col-sm-2 form-group">
30
+ <label class="font_normal_body">回复人</label>
31
+ <input type="text" class="input_search"
32
+ style="width:60%"
33
+ v-model="model.f_attendant"
34
+ condition="f_attendant like '%{}%'"
35
+ placeholder="请输入回复人"/>
36
+ </div>
37
+
38
+ <!-- 查询按钮 -->
39
+ <div class="span col-sm-2 form-group button-range" style="float: right">
40
+ <button class="button_search button_spacing" @click="search()" v-el:cx>查询</button>
41
+ <button class="button_clear button_spacing" @click="clear">清空</button>
42
+ <div style="float: right" class="button_spacing"
43
+ :class="{'button_shrink_top': criteriaShow,'button_shrink_bottom': !criteriaShow}"
44
+ @click="criteriaShow = !criteriaShow"></div>
45
+ </div>
46
+ </div>
47
+
48
+ <!-- 扩展查询条件 -->
49
+ <div class="row" v-show="criteriaShow">
50
+ <!-- 转人工时间范围 -->
51
+ <div class="col-sm-3 form-group">
52
+ <label class="font_normal_body">转人工起始时间</label>
53
+ <datepicker placeholder='转人工起始时间' style="width:60%"
54
+ v-model="model.ivrStartDate"
55
+ :value.sync="model.ivrStartDate"
56
+ :format="'yyyy-MM-dd HH:mm:ss'"
57
+ :show-reset-button="true"
58
+ condition="f_ivr_time >= '{}'">
59
+ </datepicker>
60
+ </div>
61
+ <div class="col-sm-3 form-group">
62
+ <label class="font_normal_body">转人工结束时间</label>
63
+ <datepicker placeholder='转人工结束时间' style="width:60%"
64
+ v-model="model.ivrEndDate"
65
+ :value.sync="model.ivrEndDate"
66
+ :format="'yyyy-MM-dd HH:mm:ss'"
67
+ :show-reset-button="true"
68
+ condition="f_ivr_time <= '{}'">
69
+ </datepicker>
70
+ </div>
71
+
72
+ <!-- 人工回复时间范围 -->
73
+ <div class="col-sm-3 form-group">
74
+ <label class="font_normal_body">回复起始时间</label>
75
+ <datepicker placeholder='回复起始时间' style="width:60%"
76
+ v-model="model.msgStartDate"
77
+ :value.sync="model.msgStartDate"
78
+ :format="'yyyy-MM-dd HH:mm:ss'"
79
+ :show-reset-button="true"
80
+ condition="f_msg_time >= '{}'">
81
+ </datepicker>
82
+ </div>
83
+ <div class="col-sm-3 form-group">
84
+ <label class="font_normal_body">回复结束时间</label>
85
+ <datepicker placeholder='回复结束时间' style="width:60%"
86
+ v-model="model.msgEndDate"
87
+ :value.sync="model.msgEndDate"
88
+ :format="'yyyy-MM-dd HH:mm:ss'"
89
+ :show-reset-button="true"
90
+ condition="f_msg_time <= '{}'">
91
+ </datepicker>
92
+ </div>
93
+ </div>
94
+ </div>
95
+ </criteria>
96
+
97
+ <!-- 数据表格 -->
98
+ <data-grid :model="model" partial='list' class="list_area table_sy" v-ref:grid>
99
+ <template partial='head'>
100
+ <tr>
101
+ <th>序号</th>
102
+ <th>用户姓名</th>
103
+ <th>用户标识</th>
104
+ <th>转人工时间</th>
105
+ <th>人工回复时间</th>
106
+ <th>回复人</th>
107
+ <th>评价等级</th>
108
+ </tr>
109
+ </template>
110
+ <template partial='body'>
111
+ <tr>
112
+ <td style="text-align:center">{{$index+1}}</td>
113
+ <td style="text-align:center">{{row.f_user_name}}</td>
114
+ <td style="text-align:center">{{row.f_user_id}}</td>
115
+ <td style="text-align:center">{{row.f_ivr_time}}</td>
116
+ <td style="text-align:center">{{row.f_msg_time}}</td>
117
+ <td style="text-align:center">{{row.f_attendant}}</td>
118
+ <td style="text-align:center">{{row.f_rate}}</td>
119
+ </tr>
120
+ </template>
121
+ </data-grid>
122
+ </criteria-paged>
123
+ </div>
124
+ </div>
125
+ </template>
126
+
127
+ <script>
128
+ import { PagedList } from 'vue-client'
129
+
130
+ export default {
131
+ title: '转人工管理',
132
+ data() {
133
+ return {
134
+ model: new PagedList('rs/sql/saleSingleTable', 20, {
135
+ tablename: '`t_text_log`',
136
+ items: '`*`'
137
+ }),
138
+ criteriaShow: false,
139
+ condition2: '',
140
+ rateOptions: [
141
+ {label: '全部', value: ''},
142
+ {label: '1星', value: 1},
143
+ {label: '2星', value: 2},
144
+ {label: '3星', value: 3},
145
+ {label: '4星', value: 4},
146
+ {label: '5星', value: 5}
147
+ ]
148
+ }
149
+ },
150
+ ready() {
151
+ this.search()
152
+ },
153
+ methods: {
154
+ search() {
155
+ this.selfSearch({condition: '1=1', model: this.model})
156
+ },
157
+
158
+ clear() {
159
+ // 清空所有查询条件
160
+ this.model.f_user_name = ''
161
+ this.model.f_user_id = ''
162
+ this.model.f_attendant = ''
163
+ this.model.f_rate = ''
164
+ this.model.ivrStartDate = ''
165
+ this.model.ivrEndDate = ''
166
+ this.model.msgStartDate = ''
167
+ this.model.msgEndDate = ''
168
+
169
+ // 清空后自动查询
170
+ this.search()
171
+ },
172
+
173
+ selfSearch(args) {
174
+ let condition = args.condition || '1=1'
175
+
176
+ // 用户姓名条件
177
+ if (this.model.f_user_name) {
178
+ condition += ` and f_user_name like '%${this.model.f_user_name}%'`
179
+ }
180
+
181
+ // 用户标识条件
182
+ if (this.model.f_user_id) {
183
+ condition += ` and f_user_id like '%${this.model.f_user_id}%'`
184
+ }
185
+
186
+ // 回复人条件
187
+ if (this.model.f_attendant) {
188
+ condition += ` and f_attendant like '%${this.model.f_attendant}%'`
189
+ }
190
+
191
+
192
+ // 转人工时间范围条件 - 使用 SQL Server 兼容的格式
193
+ if (this.model.ivrStartDate && this.model.ivrEndDate) {
194
+ condition += ` and f_ivr_time between '${this.model.ivrStartDate}' and '${this.model.ivrEndDate}'`
195
+ } else if (this.model.ivrStartDate) {
196
+ condition += ` and f_ivr_time >= '${this.model.ivrStartDate}'`
197
+ } else if (this.model.ivrEndDate) {
198
+ condition += ` and f_ivr_time <= '${this.model.ivrEndDate}'`
199
+ }
200
+
201
+ // 人工回复时间范围条件 - 使用 SQL Server 兼容的格式
202
+ if (this.model.msgStartDate && this.model.msgEndDate) {
203
+ condition += ` and f_msg_time between '${this.model.msgStartDate}' and '${this.model.msgEndDate}'`
204
+ } else if (this.model.msgStartDate) {
205
+ condition += ` and f_msg_time >= '${this.model.msgStartDate}'`
206
+ } else if (this.model.msgEndDate) {
207
+ condition += ` and f_msg_time <= '${this.model.msgEndDate}'`
208
+ }
209
+
210
+ console.log('转人工管理查询条件:', condition)
211
+ this.condition2 = condition
212
+ this.model.search(condition, args.model)
213
+ }
214
+ }
215
+ }
216
+ </script>
217
+
218
+ <style lang="less" scoped>
219
+ </style>
package/src/main.js CHANGED
@@ -2,7 +2,7 @@ import Vue from 'vue'
2
2
  import all from 'vue-client/src/all'
3
3
  import App from './App'
4
4
  import system from 'system-clients/src/system'
5
- import FilialeSale from './filiale/meihekou/sale'
5
+ import FilialeSale from './filiale/jingyang/sale'
6
6
  import sale from './sale'
7
7
  import address from 'address-client/src/address'
8
8
  import ldap from 'ldap-clients/src/ldap'
File without changes