chenyidong 3 місяців тому
батько
коміт
6652f7bb8e
31 змінених файлів з 1016 додано та 1521 видалено
  1. BIN
      943c87e4f214f261b1f269e1d2d32326.keystore
  2. 3 3
      manifest.json
  3. 15 0
      pages/addClue/index.vue
  4. 6 6
      pages/clue/mixins/clue.js
  5. 1 1
      pages/clueDetail/page/clueDetail.vue
  6. 28 0
      pages/clueDetail/tabs/clueInfo/index.vue
  7. 3 2
      pages/commissionForm/index.vue
  8. 0 229
      pages/login/index - 副本 (2).vue
  9. 0 349
      pages/login/index - 副本.vue
  10. 4 4
      pages/login/index.vue
  11. 1 1
      pages/order/components/commission/commissionItem.vue
  12. 1 1
      pages/order/components/commission/myCommission.vue
  13. 59 2
      pages/order/components/orderCenter/orderCenter.vue
  14. 1 1
      pages/order/index.vue
  15. 633 752
      pages/orderDetail/page/detail.vue
  16. 7 5
      pages/orderDetail/tabs/commissionFormList/commissionFormList.vue
  17. 7 1
      pages/orderDetail/tabs/receiptFormList/receiptFormList.vue
  18. 157 156
      pages/orderDetail/tabs/sendInfo/index.vue
  19. 1 0
      pages/orderForm/index.vue
  20. 2 0
      pages/receiptForm/index.vue
  21. 4 0
      uni_modules/android-keeplive/changelog.md
  22. 1 2
      uni_modules/android-keeplive/encrypt
  23. 2 2
      uni_modules/android-keeplive/package.json
  24. 77 2
      uni_modules/android-keeplive/readme.md
  25. BIN
      uni_modules/android-keeplive/utssdk/app-android/index.uts
  26. BIN
      uni_modules/android-keeplive/utssdk/app-android/libs/cactus-release.aar
  27. BIN
      uni_modules/android-keeplive/utssdk/app-harmony/index.uts
  28. BIN
      uni_modules/android-keeplive/utssdk/app-ios/KeepLive.swift
  29. BIN
      uni_modules/android-keeplive/utssdk/app-ios/index.uts
  30. 1 1
      uni_modules/android-keeplive/utssdk/unierror.uts
  31. 2 1
      utils/api.js

BIN
943c87e4f214f261b1f269e1d2d32326.keystore


+ 3 - 3
manifest.json

@@ -2,8 +2,8 @@
2 2
     "name" : "时与",
3 3
     "appid" : "__UNI__0C0EF72",
4 4
     "description" : "",
5
-    "versionName" : "1.2.0",
6
-    "versionCode" : 120,
5
+    "versionName" : "1.2.1",
6
+    "versionCode" : 121,
7 7
     "transformPx" : false,
8 8
     /* 5+App特有相关 */
9 9
     "app-plus" : {
@@ -158,7 +158,7 @@
158 158
         },
159 159
         "nativePlugins" : {
160 160
             "lemonjk-FileSelect" : {
161
-                "appid_android" : "",
161
+                "appid_android" : "uni.UNI0C0EF72",
162 162
                 "__plugin_info__" : {
163 163
                     "name" : "FileSelect",
164 164
                     "description" : "文件选取插件",

+ 15 - 0
pages/addClue/index.vue

@@ -124,6 +124,18 @@
124 124
 				<u-form-item label="广告计划ID" prop="adId" borderBottom>
125 125
 					<u--input v-model="form.adId" disabledColor="#ffffff" border="none" placeholder="请输入广告计划ID"></u--input>
126 126
 				</u-form-item>
127
+				
128
+				<u-form-item label="广告计划名称" prop="adName" borderBottom>
129
+					<u--input v-model="form.adName" disabledColor="#ffffff" border="none" placeholder="请输入广告计划名称"></u--input>
130
+				</u-form-item>
131
+				
132
+				<u-form-item label="广告主ID" prop="advId" borderBottom>
133
+					<u--input v-model="form.advId" disabledColor="#ffffff" border="none" placeholder="请输入广告主ID"></u--input>
134
+				</u-form-item>
135
+				
136
+				<u-form-item label="广告主名称" prop="advName" borderBottom>
137
+					<u--input v-model="form.advName" disabledColor="#ffffff" border="none" placeholder="请输入广告主名称"></u--input>
138
+				</u-form-item>
127 139
 					  
128 140
 			</u--form>
129 141
 		</view>
@@ -267,6 +279,9 @@
267 279
 					clueOwnerName: undefined,
268 280
 					deptName: undefined,
269 281
 					deptId: undefined,
282
+					advName : undefined,
283
+					advId : undefined,
284
+					adName : undefined,
270 285
 					clueBizType: '回收',
271 286
 					clueObjType: '腕表',
272 287
 					clueAdType: '常规',

+ 6 - 6
pages/clue/mixins/clue.js

@@ -143,7 +143,7 @@ export default {
143 143
 					windowBottom,
144 144
 					windowHeight
145 145
 				} = e;
146
-				this.mapHeight = windowHeight + 'px';
146
+				this.mapHeight = (windowHeight - 100) + 'px';
147 147
 			}
148 148
 		});
149 149
 		this.getDicts();
@@ -199,11 +199,11 @@ export default {
199 199
 				this.$getDicts('crm_clue_type').then(res => {
200 200
 					this.dicts.crmClueType = res;
201 201
 				});
202
-			uni.$u.api.getClueTagGroupVoList({ tagGroupApplication : '1' }).then(({
203
-				data
204
-			}) => {
205
-				this.clueTagGroupVoList = data;
206
-			});
202
+				uni.$u.api.getClueTagGroupVoList({ tagGroupApplication : '1' }).then(({
203
+					data
204
+				}) => {
205
+					this.clueTagGroupVoList = data;
206
+				});
207 207
 		},
208 208
 		getOtherData() {
209 209
 			this.statisticsCaseState();

+ 1 - 1
pages/clueDetail/page/clueDetail.vue

@@ -96,7 +96,7 @@
96 96
 		<yui-tabs :tabs="tabs" v-model="activeIndex" :lineWidth="'120rpx'" :isLazyRender="false" color="#108cff"
97 97
 			titleActiveColor="#108cff" :swipeable="true" :swiper="false" :ellipsis="false" :scroll-threshold="3">
98 98
 			<template #clueInfo>
99
-				<clueInfo :clueId="clueDetail.id" v-if="clueDetail.id" :params="params" ref="clueInfoRef" type="1">
99
+				<clueInfo :clueId="clueDetail.id" v-if="clueDetail.id" :clueDetailVo="clueDetail" :params="params" ref="clueInfoRef" type="1">
100 100
 				</clueInfo>
101 101
 			</template>
102 102
 			<template #advertising>

+ 28 - 0
pages/clueDetail/tabs/clueInfo/index.vue

@@ -31,6 +31,12 @@
31 31
 							<text v-else class="value">{{clueDetail[item.prop]}}</text>
32 32
 						</view>
33 33
 					</template>
34
+					<template v-if="parsedRemarkDict && Object.keys(parsedRemarkDict).length > 0">
35
+						<view class="Info_item" v-for="(value, key) in parsedRemarkDict" :key="key">
36
+							<text class="label">{{ key }}</text>
37
+							<text class="value">{{ value }}</text>
38
+						</view>
39
+					</template>
34 40
 				</view>
35 41
 			</view>
36 42
 		</template>
@@ -124,6 +130,28 @@
124 130
 				type: Object,
125 131
 				required: true
126 132
 			},
133
+			clueDetailVo : {
134
+				type : Object,
135
+				required : true
136
+			},
137
+		},
138
+		computed : {
139
+			parsedRemarkDict() {
140
+			      try {
141
+			        const remarkDict = this.clueDetailVo.remarkDict
142
+			        if (!remarkDict) {
143
+			          return null
144
+			        }
145
+			        if (typeof remarkDict === 'string') {
146
+			          const parsed = JSON.parse(remarkDict)
147
+			          return typeof parsed === 'object' && parsed !== null ? parsed : null
148
+			        }
149
+			        return typeof remarkDict === 'object' && remarkDict !== null ? remarkDict : null
150
+			      } catch (error) {
151
+			        console.error('解析remarkDict失败:', error)
152
+			        return null
153
+			      }
154
+			    }
127 155
 		},
128 156
 		methods: {
129 157
 			async updateClueMainInfo() {

+ 3 - 2
pages/commissionForm/index.vue

@@ -231,10 +231,12 @@ export default {
231 231
         if (this.commissionForm.id) {
232 232
           // 修改
233 233
           await uni.$u.api.clueCommissionUpdate(this.commissionForm);
234
+		  uni.$emit('addCommissionSuccess');
234 235
           uni.$u.toast("修改成功");
235 236
         } else {
236 237
           // 新增
237 238
           await uni.$u.api.clueCommissionAdd(this.commissionForm);
239
+		  uni.$emit('addCommissionSuccess');
238 240
           uni.$u.toast("新增成功");
239 241
         }
240 242
 
@@ -243,8 +245,7 @@ export default {
243 245
           uni.navigateBack();
244 246
         }, 1500);
245 247
       } catch (error) {
246
-        console.error("保存失败:", error);
247
-        uni.$u.toast("保存失败,请重试");
248
+        uni.$u.toast(error);
248 249
       } finally {
249 250
         this.loading = false;
250 251
       }

+ 0 - 229
pages/login/index - 副本 (2).vue

@@ -1,229 +0,0 @@
1
-<template>
2
-	<view class="content">
3
-		<view class="uni-btn-v uni-common-mt">
4
-			<button type="primary" @click="startListerPhone">注册电话监听</button>
5
-			<button type="primary" @click="stopListerPhone">注销电话监听</button>
6
-			<button type="primary" @click="checkIsAutoRecord">是否开启通话自动录音功能</button>
7
-
8
-			<button type="primary" @click="toCallAutoRecorderPage">跳转到开启通话自动录音界面</button>
9
-			<button type="primary" @click="navigateToCallRecordingSettings">跳转到系统的通话录音界面</button>
10
-			<button type="primary" @click="jumpToPermissionPage">请求所有文件访问权限(主要针对ANDROID 11以上获取录音文件需要的权限)</button>
11
-			<button type="primary" @click="allRecorderFilesAction">获取通话自动录音文件</button>
12
-
13
-
14
-			<!-- <button type="primary" @click="registerSmsReceiver">注册短信监听</button> -->
15
-			<button type="primary" @click="makePhoneCall">拨打电话</button>
16
-		</view>
17
-		<view class="text-box" scroll-y="true">
18
-			<text>{{phoneState}}</text>
19
-		</view>
20
-		<view v-if="change_pop_show">
21
-			<view class="status text-center">蓝牙列表(直接点击连接打印机)</view>
22
-			<view class="divider"></view>
23
-			<view :class="{ 'popup-height': type === 'left' || type === 'right' }" class="device-list">
24
-				<scroll-view scroll-y="true" class="p-content underline">
25
-					<view class="underline p-item device-item" hover-class="list-active"
26
-						v-for="(item, index) in Filelist" :key="index">
27
-						<view class="desc">
28
-							{{item}}
29
-						</view>
30
-					</view>
31
-				</scroll-view>
32
-			</view>
33
-		</view>
34
-
35
-	</view>
36
-</template>
37
-
38
-<script>
39
-	import {
40
-		startPhoneListener,
41
-		stopPhoneListener,
42
-		checkIsAutoRecord,
43
-		toCallAutoRecorderPage,
44
-		navigateToCallRecordingSettings,
45
-		jumpToPermissionPage,
46
-		makePhoneCall,
47
-		allRecorderFilesAction
48
-	} from '@/uni_modules/yao-lister';
49
-
50
-
51
-	export default {
52
-		data() {
53
-			return {
54
-				title: 'Hello',
55
-				phoneState: '',
56
-				stateText: '',
57
-				isAndroid: true,
58
-				change_pop_show: false,
59
-				type: 'center',
60
-				Filelist: [],
61
-			}
62
-		},
63
-		mounted() {
64
-			this.initPhoneStateListener()
65
-		},
66
-		beforeDestroy() {
67
-			stopListerPhone()
68
-		},
69
-		methods: {
70
-			toggle(type) {
71
-				const _this = this;
72
-				_this.type = type;
73
-				_this.change_pop_show = true;
74
-			},
75
-			allRecorderFilesAction() {
76
-				const _this = this;
77
-				allRecorderFilesAction(res => {
78
-					console.log("录音文件输入", JSON.stringify(res));
79
-					// 录音文件输入,  ["/storage/emulated/0/Recordings/Record/Call/15099989786 2025-11-11 09-41-57.m4a","/storage/emulated/0/Recordings/Record/Call/18925012557 2025-11-11 11-10-33.m4a"]
80
-					_this.toggle('bottom');
81
-					_this.Filelist = res
82
-					uni.showToast({
83
-						title: JSON.stringify(res),
84
-						duration: 2000
85
-					})
86
-				})
87
-			},
88
-			jumpToPermissionPage() {
89
-				jumpToPermissionPage()
90
-			},
91
-			navigateToCallRecordingSettings() {
92
-				navigateToCallRecordingSettings()
93
-			},
94
-			toCallAutoRecorderPage() {
95
-				toCallAutoRecorderPage()
96
-			},
97
-			checkIsAutoRecord() {
98
-				let checkRecord = checkIsAutoRecord()
99
-				uni.showToast({
100
-					title: checkRecord ? "已开启电话录音" : "未开启电话录音",
101
-					duration: 2000
102
-				})
103
-			},
104
-			makePhoneCall() {
105
-				makePhoneCall('13417106969')
106
-				// uni.makePhoneCall({
107
-				// 	phoneNumber: '13771854499', // 电话号码
108
-				// 	success: function() {
109
-				// 		console.log('拨打电话成功!');
110
-				// 	},
111
-				// 	fail: function(err) {
112
-				// 		console.error('拨打电话失败:', err);
113
-				// 	}
114
-				// });
115
-			},
116
-			startListerPhone() {
117
-				startPhoneListener(res => {
118
-					console.log(res,"监听结果==============================")
119
-				})
120
-			},
121
-			stopListerPhone() {
122
-				stopPhoneListener(res => {
123
-					console.log(res,"3123123123");
124
-					uni.showToast({
125
-						icon: 'success',
126
-						title: res,
127
-						duration: 2000
128
-					});
129
-				})
130
-			},
131
-
132
-			async initPhoneStateListener() {
133
-				// 动态申请权限
134
-				const permissions = [
135
-					"android.permission.READ_PHONE_STATE",
136
-					"android.permission.ANSWER_PHONE_CALLS", "android.permission.CALL_PHONE",
137
-					"android.permission.MANAGE_EXTERNAL_STORAGE",
138
-					"android.permission.READ_EXTERNAL_STORAGE",
139
-					"android.permission.READ_CALL_LOG",
140
-					"android.permission.READ_PHONE_NUMBERS",
141
-					"android.permission.FOREGROUND_SERVICE"
142
-				]
143
-				await plus.android.requestPermissions(permissions, 1001)
144
-			}
145
-		},
146
-	}
147
-</script>
148
-
149
-<style>
150
-	.text-box {
151
-		margin-bottom: 40rpx;
152
-		padding: 40rpx 0;
153
-		display: flex;
154
-		min-height: 300rpx;
155
-		background-color: #FFFFFF;
156
-		justify-content: center;
157
-		align-items: center;
158
-		text-align: center;
159
-		font-size: 30rpx;
160
-		color: #353535;
161
-		line-height: 1.8;
162
-		border: 1px #007AFF;
163
-		height: 200px;
164
-		width: 200px;
165
-	}
166
-
167
-	.content {
168
-		display: flex;
169
-		flex-direction: column;
170
-		align-items: center;
171
-		justify-content: center;
172
-	}
173
-
174
-	button {
175
-		margin: 10px 0;
176
-		background-color: #007AFF;
177
-		color: white;
178
-	}
179
-
180
-	.logo {
181
-		height: 200rpx;
182
-		width: 200rpx;
183
-		margin-top: 200rpx;
184
-		margin-left: auto;
185
-		margin-right: auto;
186
-		margin-bottom: 50rpx;
187
-	}
188
-
189
-	.text-area {
190
-		display: flex;
191
-		justify-content: center;
192
-	}
193
-
194
-	.title {
195
-		font-size: 36rpx;
196
-		color: #8f8f94;
197
-	}
198
-
199
-	.uni-popup {
200
-		z-index: 9999;
201
-		/* 根据需要调整 */
202
-	}
203
-
204
-	.p-content {
205
-		height: calc(70vh - 20px);
206
-		width: 700rpx;
207
-	}
208
-
209
-	.text-area {
210
-		display: flex;
211
-		justify-content: center;
212
-	}
213
-
214
-	.title {
215
-		font-size: 36rpx;
216
-		color: #8f8f94;
217
-	}
218
-
219
-	.text-center {
220
-		display: flex;
221
-		justify-content: center;
222
-		align-items: center;
223
-	}
224
-
225
-	.desc {
226
-		padding-left: 10px;
227
-		margin-top: 10px;
228
-	}
229
-</style>

+ 0 - 349
pages/login/index - 副本.vue

@@ -1,349 +0,0 @@
1
-<template>
2
-	<view>
3
-		<view class="loginway">
4
-			<div class="navigation"></div>
5
-			<image class="loginimg" mode="widthFix" src="/static/login/logo_word.png"></image>
6
-			<view class="input_wrap">
7
-				<u--form labelPosition="left" :model="form" :rules="rules" ref="uForm">
8
-					<u-form-item label="" prop="username" class="inputFormWrap">
9
-						<u--input shape="circle" clearable prefixIcon="/static/login/icon-account.png"
10
-							:prefixIconStyle="prefixIconStyle" v-model="form.username" placeholder="请输入账号"></u--input>
11
-					</u-form-item>
12
-					<u-form-item label="" prop="password" class="inputFormWrap">
13
-						<u--input shape="circle" clearable password prefixIcon="/static/login/icon-password.png"
14
-							:prefixIconStyle="prefixIconStyle" v-model="form.password" placeholder="请输入密码"></u--input>
15
-					</u-form-item>
16
-					<u-form-item label="" prop="" class="inputFormWrap">
17
-						<u-checkbox-group v-model="checkboxs" placement="column" @change="changeRemember">
18
-							<u-checkbox :label="'记住密码'" :name="'remember'"></u-checkbox>
19
-						</u-checkbox-group>
20
-					</u-form-item>
21
-					<u-form-item>
22
-						<u-button type="primary" text="登录" shape="circle" @click="handleLogin"></u-button>
23
-					</u-form-item>
24
-					<!-- 			<u-form-item>
25
-						<view class="network_configuration_box">
26
-							<view class="netWrokSet" @click="handleToConfiguration">
27
-								<image src="/static/login/network.png" mode=""></image>
28
-								<text class="text">呼叫中心配置</text>
29
-							</view>
30
-						</view>
31
-					</u-form-item> -->
32
-				</u--form>
33
-			</view>
34
-		</view>
35
-	</view>
36
-</template>
37
-
38
-<script>
39
-	export default {
40
-		data() {
41
-			return {
42
-				firstLoginState : "",
43
-				// systemList,
44
-				prefixIconStyle: {
45
-					width: "16px",
46
-					height: "16px",
47
-					marginRight: "4px",
48
-					marginLeft: "10px"
49
-				},
50
-				form: {
51
-					// password: "Huilong@#$999",
52
-					password: "",
53
-					systemCode: "system_crm",
54
-					username: "",
55
-					clientFlag: "2",
56
-					// username: "huihui",
57
-					code: "996007qa.code",
58
-					uuid: "123"
59
-				},
60
-				checkboxs: [],
61
-				rules: {
62
-					username: {
63
-						type: 'string',
64
-						required: true,
65
-						message: '请输入账号',
66
-						trigger: []
67
-					},
68
-					password: {
69
-						type: 'string',
70
-						required: true,
71
-						message: '请输入密码',
72
-						trigger: []
73
-					}
74
-				},
75
-				// mac: getMacAddress(),
76
-			};
77
-		},
78
-		computed: {
79
-			systemList() {
80
-				return this.$store.state.user.systemList;
81
-			},
82
-			remember: {
83
-				get() {
84
-					return this.checkboxs.length > 0
85
-				},
86
-				set(value) {
87
-					this.checkboxs = value ? ['remember'] : [];
88
-				}
89
-			}
90
-		},
91
-		mounted() {
92
-			// 触发水印隐藏
93
-			this.systemChange(this.form.systemCode);
94
-			this.getUserByCache();
95
-		},
96
-		onLoad(option){
97
-			const { shiYuWxLogin } = option;
98
-			this.firstLoginState = shiYuWxLogin;
99
-		},
100
-		methods: {
101
-			changeRemember(value){
102
-				if (value.length > 0) {
103
-					uni.setStorageSync('username', this.form.username);
104
-					uni.setStorageSync('password', this.form.password);
105
-				} else {
106
-					uni.removeStorageSync('username');
107
-					uni.removeStorageSync('password');
108
-				}
109
-			},
110
-			getUserByCache() {
111
-				const savedUsername = uni.getStorageSync('username');
112
-				const savedPassword = uni.getStorageSync('password');
113
-
114
-				if (savedUsername && savedPassword) {
115
-					this.form.username = savedUsername;
116
-					this.form.password = savedPassword;
117
-					this.remember = true;
118
-				}
119
-			},
120
-			handleToConfiguration() {
121
-				uni.navigateTo({
122
-					url: "/pages/configuration/index"
123
-				})
124
-			},
125
-			systemChange(e) {
126
-				if (!e) return;
127
-				uni.$u.api.getAppSystemList().then((res) => {
128
-					const systemCodeList = res.data;
129
-					this.$store.dispatch("user/setSystemlist", systemCodeList);
130
-					const system = this.systemList.find(v => v.value === e);
131
-					this.$store.commit("user/SET_SYSTEM", system);
132
-				}).catch((e) => {
133
-					uni.$u.toast("服务网络不通");
134
-				})
135
-			},
136
-			handleLogin() {
137
-				this.$refs.uForm.validate().then(() => {
138
-					if (this.remember) {
139
-						uni.setStorageSync('username', this.form.username);
140
-						uni.setStorageSync('password', this.form.password);
141
-					} else {
142
-						uni.removeStorageSync('username');
143
-						uni.removeStorageSync('password');
144
-					}
145
-					this.$store.dispatch("user/login", this.form).then(async (userId) => {
146
-						// #ifdef H5
147
-						if(this.firstLoginState){
148
-							// 有state要绑定一下用户
149
-						  	await uni.$u.api.firstLogin({ userId , firstLoginState : this.firstLoginState });
150
-							
151
-							uni.reLaunch({
152
-								url:"/pages/bindSuccess/index",
153
-								success: () => {
154
-									uni.$u.toast("绑定成功");
155
-								}
156
-							});
157
-						}else{
158
-							uni.$u.toast("授权失败,无法绑定");
159
-						}
160
-						// #endif
161
-						
162
-						// #ifdef  APP-PLUS
163
-						uni.switchTab({
164
-							url: `/pages/person/index`,
165
-							success: () => {
166
-								this.$store.dispatch("app/register");
167
-								uni.$u.toast("登录成功");
168
-							}
169
-						})
170
-						// #endif
171
-						
172
-					}).catch((res) => {
173
-						uni.$u.toast(res);
174
-					})
175
-				})
176
-			},
177
-		},
178
-	}
179
-</script>
180
-
181
-<style lang="scss">
182
-	.network_configuration_box {
183
-		margin: auto;
184
-
185
-		.netWrokSet {
186
-			display: flex;
187
-			align-items: center;
188
-
189
-			image {
190
-				width: 30rpx;
191
-				height: 30rpx;
192
-			}
193
-
194
-			.text {
195
-				margin-left: 10rpx;
196
-				font-size: 26rpx;
197
-			}
198
-		}
199
-	}
200
-
201
-	.systemLabel_wrap {
202
-		display: flex;
203
-		align-items: center;
204
-
205
-		.label {
206
-			margin-left: 10rpx;
207
-		}
208
-	}
209
-
210
-	.systemCode_wrap {
211
-		position: relative;
212
-
213
-		::v-deep .uni-select {
214
-			border-radius: 100px;
215
-			border: 1px solid #dadbde;
216
-			height: 40px;
217
-			padding: 0px 10px 0px 46px;
218
-
219
-			&:before {
220
-				content: "";
221
-				display: block;
222
-				width: 16px;
223
-				height: 16px;
224
-				background-image: url("../../static/login/icon-system.png");
225
-				background-size: 16px 16px;
226
-				position: absolute;
227
-				left: 20px;
228
-				top: 50%;
229
-				transform: translate(0%, -50%);
230
-			}
231
-
232
-			.uni-select__input-placeholder {
233
-				font-size: 14px;
234
-				color: rgb(192, 196, 204);
235
-			}
236
-		}
237
-
238
-		.system_debt {
239
-			::v-deep .uni-select {
240
-				&:before {
241
-					background-image: url("../../static/outbound/icon-zycs.png");
242
-				}
243
-			}
244
-		}
245
-
246
-		.system_debt_ccb {
247
-			::v-deep .uni-select {
248
-				&:before {
249
-					background-image: url("../../static/outbound/icon-zycs.png");
250
-				}
251
-			}
252
-		}
253
-
254
-		.system_debt_spdb {
255
-			::v-deep .uni-select {
256
-				&:before {
257
-					background-image: url("../../static/outbound/icon-zycs.png");
258
-				}
259
-			}
260
-		}
261
-
262
-		.system_debt_public {
263
-			::v-deep .uni-select {
264
-				&:before {
265
-					background-image: url("../../static/outbound/icon-zycs.png");
266
-				}
267
-			}
268
-		}
269
-
270
-		.system_debt_dfkl {
271
-			::v-deep .uni-select {
272
-				&:before {
273
-					background-image: url("../../static/outbound/icon-zycs.png");
274
-				}
275
-			}
276
-		}
277
-
278
-		.system_debt_cib {
279
-			::v-deep .uni-select {
280
-				&:before {
281
-					background-image: url("../../static/outbound/icon-zycs.png");
282
-				}
283
-			}
284
-		}
285
-
286
-		.system_debt_icbc_h {
287
-			::v-deep .uni-select {
288
-				&:before {
289
-					background-image: url("../../static/outbound/icon-zycs.png");
290
-				}
291
-			}
292
-		}
293
-
294
-		.system_debt_tjxt {
295
-			::v-deep .uni-select {
296
-				&:before {
297
-					background-image: url("../../static/outbound/icon-zycs.png");
298
-				}
299
-			}
300
-		}
301
-
302
-		// .systemIcon{
303
-		// 	width: 16px;
304
-		// 	height: 16px;
305
-		// 	position: absolute;
306
-		// 	left: 20px;
307
-		// 	top: 50%;
308
-		// 	transform: translate(0%, -50%);
309
-		// 	display: none;
310
-		// }
311
-	}
312
-
313
-	.inputFormWrap {
314
-		::v-deep .u-border {
315
-			border: 1px solid #dadbde !important;
316
-		}
317
-	}
318
-
319
-	.max {
320
-		width: 500rpx;
321
-		height: 500rpx;
322
-	}
323
-
324
-	page {
325
-		background: #fff;
326
-	}
327
-
328
-	.loginway {
329
-		display: flex;
330
-		flex-direction: column;
331
-		height: 100vh;
332
-
333
-		.navigation {
334
-			background-color: #108cff;
335
-			width: 100%;
336
-			height: 120rpx;
337
-		}
338
-
339
-		.loginimg {
340
-			display: block;
341
-			width: 100%;
342
-			height: 100%;
343
-		}
344
-
345
-		.input_wrap {
346
-			padding: 20rpx 30rpx;
347
-		}
348
-	}
349
-</style>

+ 4 - 4
pages/login/index.vue

@@ -48,12 +48,12 @@
48 48
 					marginLeft: "10px"
49 49
 				},
50 50
 				form: {
51
-					password: "Huilong@#$999",
52
-					// password: "",
51
+					// password: "Huilong@#$999",
52
+					password: "",
53 53
 					systemCode: "system_crm",
54
-					// username: "",
54
+					username: "",
55 55
 					clientFlag: "2",
56
-					username: "huihui",
56
+					// username: "huihui",
57 57
 					code: "996007qa.code",
58 58
 					uuid: "123"
59 59
 				},

+ 1 - 1
pages/order/components/commission/commissionItem.vue

@@ -1,7 +1,7 @@
1 1
 <template>
2 2
 	<view class="commission_item">
3 3
 		<view class="commission_top">
4
-			<view class="top_left">{{item.item}}</view>
4
+			<view class="top_left">{{item.receiptItem}}</view>
5 5
 			<view class="top_right">
6 6
 				<text class="account_type">{{ item.accountType === '1' ? '前端' : '后端' }}</text>
7 7
 			</view>

+ 1 - 1
pages/order/components/commission/myCommission.vue

@@ -102,7 +102,7 @@
102 102
 						windowBottom,
103 103
 						windowHeight
104 104
 					} = e;
105
-					this.mapHeight = windowHeight + 'px';
105
+					this.mapHeight = (windowHeight - 100) + 'px';
106 106
 				}
107 107
 			});
108 108
 		}

+ 59 - 2
pages/order/components/orderCenter/orderCenter.vue

@@ -11,6 +11,18 @@
11 11
 				<u-icon name="arrow-down-fill" color="#aaa" size="10"></u-icon>
12 12
 			</view>
13 13
 		</view>
14
+		
15
+		<view class="send_status_wrap">
16
+			<scroll-view scroll-x="true">
17
+				<view class="clue_state_list">
18
+					<view @click="handleSendStatusClick(item)" v-for="(item, index) in clueSendStatusCountList " :key="index"
19
+						class="clue_state_item" :class="{ active : queryParams.status === item.status }">
20
+						<text>{{item.statusName}}</text>
21
+						<text>({{item.count}})</text>
22
+					</view>
23
+				</view>
24
+			</scroll-view>
25
+		</view>
14 26
 
15 27
 
16 28
 		<view class="order_item_wrap">
@@ -65,11 +77,26 @@
65 77
 					pageNum: 1,
66 78
 					pageSize: 10,
67 79
 				},
80
+				
81
+				clueSendStatusCountList : [],
68 82
 
69 83
 				mapHeight: "0px"
70 84
 			}
71 85
 		},
72 86
 		methods: {
87
+			getOtherData() {
88
+				this.statisticsSendStatus();
89
+			},
90
+			async statisticsSendStatus() {
91
+				const {
92
+					data
93
+				} = await uni.$u.api.statisticsSendStatus(this.queryParams);
94
+				this.clueSendStatusCountList = data;
95
+			},
96
+			handleSendStatusClick(item) {
97
+				this.queryParams.status = item.status;
98
+				this.resetData();
99
+			},
73 100
 			handleKeyword() {
74 101
 				this.resetData();
75 102
 			},
@@ -114,7 +141,7 @@
114 141
 						windowBottom,
115 142
 						windowHeight
116 143
 					} = e;
117
-					this.mapHeight = windowHeight + 'px';
144
+					this.mapHeight = (windowHeight - 100) + 'px';
118 145
 				}
119 146
 			});
120 147
 		},
@@ -122,6 +149,36 @@
122 149
 </script>
123 150
 
124 151
 <style lang="scss" scoped>
152
+	.send_status_wrap {
153
+		width: 690rpx;
154
+		padding: 0 30rpx;
155
+		margin-top: 20rpx;
156
+		display: flex;
157
+	
158
+		.clue_state_list {
159
+			display: flex;
160
+	
161
+			.clue_state_item {
162
+				font-size: 30rpx;
163
+				display: inline-flex;
164
+				/* 关键改动:改为行内弹性盒子 */
165
+				align-items: center;
166
+				/* 垂直居中 */
167
+				background: #fff;
168
+				margin-right: 30rpx;
169
+				padding: 8rpx 16rpx;
170
+				/* 增加内边距 */
171
+				white-space: nowrap;
172
+				/* 关键:禁止文本换行 */
173
+				border-radius: 6rpx;
174
+	
175
+				&.active {
176
+					color: #fff;
177
+					background: #4c8afe;
178
+				}
179
+			}
180
+		}
181
+	}
125 182
 	.order_center_wrap {
126 183
 		box-sizing: border-box;
127 184
 		min-height: 100vh;
@@ -154,7 +211,7 @@
154 211
 	}
155 212
 
156 213
 	.order_item_wrap {
157
-		padding: 20px 20px;
214
+		padding: 10px 20px;
158 215
 	}
159 216
 
160 217
 	.empty_wrap {

+ 1 - 1
pages/order/index.vue

@@ -76,7 +76,7 @@
76 76
 					this.offsetTop = offsetTop;
77 77
 				}
78 78
 			});
79
-			this.$getDicts('crm_follow_status').then(res => {
79
+			this.$getDicts('crm_form_status').then(res => {
80 80
 				this.dicts.crmFormStatusDict = res;
81 81
 			});
82 82
 			this.$getDicts('crm_form_category').then(res => {

Різницю між файлами не показано, бо вона завелика
+ 633 - 752
pages/orderDetail/page/detail.vue


+ 7 - 5
pages/orderDetail/tabs/commissionFormList/commissionFormList.vue

@@ -89,12 +89,14 @@
89 89
 			}
90 90
 		},
91 91
 		created() {
92
-			this.getList()
92
+			this.getList();
93
+			uni.$on('addCommissionSuccess',()=>{
94
+				this.getList();
95
+			});
96
+		},
97
+		beforeDestroy(){
98
+			uni.$off('addCommissionSuccess');  
93 99
 		},
94
-		// 监听页面显示,刷新列表数据
95
-		onShow() {
96
-			this.getList()
97
-		}
98 100
 	}
99 101
 </script>
100 102
 

+ 7 - 1
pages/orderDetail/tabs/receiptFormList/receiptFormList.vue

@@ -135,7 +135,13 @@ export default {
135 135
 		},
136 136
 	},
137 137
 	created() {
138
-		this.getList()
138
+		this.getList();
139
+		uni.$on('addReceiptFormSuccess',()=>{
140
+			this.getList();
141
+		});
142
+	},
143
+	beforeDestroy(){
144
+		uni.$off('addReceiptFormSuccess');  
139 145
 	}
140 146
 }
141 147
 </script>

+ 157 - 156
pages/orderDetail/tabs/sendInfo/index.vue

@@ -1,176 +1,177 @@
1 1
 <template>
2
-  <view class="caseInfo_wrap">
3
-    <view class="caseInfo_content_wrap">
4
-      <view class="caseInfo_title">
5
-        <view>
6
-          <image src="/static/clueDetail/icon-caseInfo.png" mode=""></image>
7
-          <text class="info_text">发单信息</text>
8
-        </view>
9
-        <u-icon name="edit-pen-fill" color="#2979ff" size="18" @click="handleEdit"></u-icon>
10
-      </view>
11
-      <view class="caseInfo_main_wrap">
12
-        <view class="Info_item" v-for="item in caseInfoColumn" :key="item.prop">
13
-          <text class="label">{{ item.label }}</text>
14
-          <text class="value">{{
2
+	<view class="caseInfo_wrap">
3
+		<view class="caseInfo_content_wrap">
4
+			<view class="caseInfo_title">
5
+				<view>
6
+					<image src="/static/clueDetail/icon-caseInfo.png" mode=""></image>
7
+					<text class="info_text">发单信息</text>
8
+				</view>
9
+				<u-icon name="edit-pen-fill" color="#2979ff" size="18" @click="handleEdit"></u-icon>
10
+			</view>
11
+			<view class="caseInfo_main_wrap">
12
+				<view class="Info_item" v-for="item in caseInfoColumn" :key="item.prop">
13
+					<text class="label">{{ item.label }}</text>
14
+					<text class="value">{{
15 15
             item.dictType
16 16
               ? $selectDictLabel(item.dictType, receiptDetail[item.prop])
17 17
               : receiptDetail[item.prop]
18 18
               ? receiptDetail[item.prop]
19 19
               : "-"
20 20
           }}</text>
21
-        </view>
22
-      </view>
23
-    </view>
24
-  </view>
21
+				</view>
22
+			</view>
23
+		</view>
24
+	</view>
25 25
 </template>
26 26
 
27 27
 <script>
28
-const caseInfoColumn = [
29
-  {
30
-    prop: "receiptDate",
31
-    label: "收单日期",
32
-  },
33
-  {
34
-    prop: "item",
35
-    label: "物品",
36
-  },
37
-  {
38
-    prop: "phone",
39
-    label: "电话",
40
-  },
41
-  {
42
-    prop: "authenticateNickName",
43
-    label: "鉴定",
44
-  },
45
-  {
46
-    prop: "category",
47
-    label: "类别",
48
-    dictType: "crm_form_category",
49
-  },
50
-  {
51
-    prop: "brand",
52
-    label: "品牌",
53
-    dictType: "crm_form_brand",
54
-  },
55
-  {
56
-    prop: "idCard",
57
-    label: "身份证号码",
58
-  },
59
-  {
60
-    prop: "customName",
61
-    label: "开户人姓名",
62
-  },
63
-  {
64
-    prop: "bankCardNumber",
65
-    label: "银行卡号",
66
-  },
67
-  {
68
-    prop: "bankName",
69
-    label: "银行名称",
70
-  },
71
-  {
72
-    prop: "paymentMethod",
73
-    label: "付款方式",
74
-  },
75
-  {
76
-    prop: "visitTime",
77
-    label: "计划上门时间",
78
-  },
79
-  {
80
-    prop: "remarks",
81
-    label: "补充说明",
82
-  },
83
-  {
84
-    prop: "priceRange",
85
-    label: "预估价格范围",
86
-  },
87
-  {
88
-    prop: "tactic",
89
-    label: "采用战术",
90
-    dictType: "crm_form_tactic",
91
-  },
92
-];
93
-export default {
94
-  props: {
95
-    receiptDetail: {
96
-      type: Object,
97
-      default: () => {},
98
-    },
99
-    sendFormId: {
100
-      type: [Number, String],
101
-      required: true,
102
-    },
103
-    clueId: {
104
-      type: [Number, String],
105
-      required: true,
106
-    },
107
-  },
108
-  data() {
109
-    return {
110
-      caseInfoColumn,
111
-    };
112
-  },
113
-  methods: {
114
-    handleEdit() {
115
-      uni.navigateTo({
116
-        url: `/pages/orderForm/index?clueId=${this.clueId}&sendFormId=${this.sendFormId}`,
117
-      });
118
-    },
119
-  },
120
-};
28
+	const caseInfoColumn = [{
29
+			prop: "receiptDate",
30
+			label: "收单日期",
31
+		},
32
+		{
33
+			prop: "item",
34
+			label: "物品",
35
+		},
36
+		{
37
+			prop: "phone",
38
+			label: "电话",
39
+		},
40
+		{
41
+			prop: "authenticateNickName",
42
+			label: "鉴定",
43
+		},
44
+		{
45
+			prop: "category",
46
+			label: "类别",
47
+			dictType: "crm_form_category",
48
+		},
49
+		{
50
+			prop: "brand",
51
+			label: "品牌",
52
+			dictType: "crm_form_brand",
53
+		},
54
+		{
55
+			prop: "idCard",
56
+			label: "身份证号码",
57
+		},
58
+		{
59
+			prop: "customName",
60
+			label: "开户人姓名",
61
+		},
62
+		{
63
+			prop: "bankCardNumber",
64
+			label: "银行卡号",
65
+		},
66
+		{
67
+			prop: "bankName",
68
+			label: "银行名称",
69
+		},
70
+		{
71
+			prop: "paymentMethod",
72
+			label: "付款方式",
73
+		},
74
+		{
75
+			prop: "visitTime",
76
+			label: "计划上门时间",
77
+		},
78
+		{
79
+			prop: "remarks",
80
+			label: "补充说明",
81
+		},
82
+		{
83
+			prop: "priceRange",
84
+			label: "预估价格范围",
85
+		},
86
+		{
87
+			prop: "tactic",
88
+			label: "采用战术",
89
+			dictType: "crm_form_tactic",
90
+		},
91
+	];
92
+	export default {
93
+		props: {
94
+			receiptDetail: {
95
+				type: Object,
96
+				default: () => {},
97
+			},
98
+			sendFormId: {
99
+				type: [Number, String],
100
+				required: true,
101
+			},
102
+			clueId: {
103
+				type: [Number, String],
104
+				required: true,
105
+			},
106
+		},
107
+		data() {
108
+			return {
109
+				caseInfoColumn,
110
+			};
111
+		},
112
+		methods: {
113
+			handleEdit() {
114
+				uni.navigateTo({
115
+					url: `/pages/orderForm/index?clueId=${this.clueId}&sendFormId=${this.sendFormId}`,
116
+				});
117
+			},
118
+
119
+		}
120
+	};
121 121
 </script>
122 122
 
123 123
 <style lang="scss" scoped>
124
-.caseInfo_wrap {
125
-  min-height: 400px;
126
-  .caseInfo_title {
127
-    display: flex;
128
-    align-items: center;
129
-    justify-content: space-between;
130
-    height: 80rpx;
131
-    background: #f4f4f6;
132
-    padding: 0 40rpx;
124
+	.caseInfo_wrap {
125
+		min-height: 400px;
126
+
127
+		.caseInfo_title {
128
+			display: flex;
129
+			align-items: center;
130
+			justify-content: space-between;
131
+			height: 80rpx;
132
+			background: #f4f4f6;
133
+			padding: 0 40rpx;
133 134
 
134
-    image {
135
-      width: 24rpx;
136
-      height: 24rpx;
137
-      margin-right: 10rpx;
138
-    }
135
+			image {
136
+				width: 24rpx;
137
+				height: 24rpx;
138
+				margin-right: 10rpx;
139
+			}
139 140
 
140
-    .info_text {
141
-      font-size: 24rpx;
142
-      color: #202020;
143
-    }
141
+			.info_text {
142
+				font-size: 24rpx;
143
+				color: #202020;
144
+			}
144 145
 
145
-    .edit-btn {
146
-      font-size: 24rpx;
147
-      color: #3498db;
148
-      padding: 8rpx 16rpx;
149
-      border-radius: 8rpx;
150
-      background-color: #fff;
151
-      border: 1rpx solid #3498db;
152
-    }
153
-  }
146
+			.edit-btn {
147
+				font-size: 24rpx;
148
+				color: #3498db;
149
+				padding: 8rpx 16rpx;
150
+				border-radius: 8rpx;
151
+				background-color: #fff;
152
+				border: 1rpx solid #3498db;
153
+			}
154
+		}
154 155
 
155
-  .caseInfo_main_wrap {
156
-    .Info_item {
157
-      padding: 18rpx 40rpx;
158
-      display: flex;
159
-      justify-content: space-between;
156
+		.caseInfo_main_wrap {
157
+			.Info_item {
158
+				padding: 18rpx 40rpx;
159
+				display: flex;
160
+				justify-content: space-between;
160 161
 
161
-      .label {
162
-        color: #999999;
163
-        font-size: 26rpx;
164
-        width: 160rpx;
165
-      }
162
+				.label {
163
+					color: #999999;
164
+					font-size: 26rpx;
165
+					width: 160rpx;
166
+				}
166 167
 
167
-      .value {
168
-        font-size: 26rpx;
169
-        color: #202020;
170
-        text-align: right;
171
-        width: 500rpx;
172
-      }
173
-    }
174
-  }
175
-}
168
+				.value {
169
+					font-size: 26rpx;
170
+					color: #202020;
171
+					text-align: right;
172
+					width: 500rpx;
173
+				}
174
+			}
175
+		}
176
+	}
176 177
 </style>

+ 1 - 0
pages/orderForm/index.vue

@@ -276,6 +276,7 @@
276 276
 							tactic: this.form.tactic
277 277
 						}
278 278
 						await uni.$u.api.updateClueOrderForm(updatedForm);
279
+						uni.$emit('updateSendFormSuccess');
279 280
 						uni.$u.toast('发单记录更新成功');
280 281
 					} else {
281 282
 						// 合并所有附件

+ 2 - 0
pages/receiptForm/index.vue

@@ -717,10 +717,12 @@ export default {
717 717
         if (this.form.id) {
718 718
           // 修改
719 719
           await uni.$u.api.updateReceiptForm(submitData);
720
+		  uni.$emit('addReceiptFormSuccess');
720 721
           uni.$u.toast("修改成功");
721 722
         } else {
722 723
           // 新增
723 724
           await uni.$u.api.addReceiptForm(submitData);
725
+		  uni.$emit('addReceiptFormSuccess');
724 726
           uni.$u.toast("新增成功");
725 727
         }
726 728
 

+ 4 - 0
uni_modules/android-keeplive/changelog.md

@@ -1,3 +1,7 @@
1
+## 1.1.72(2025-11-29)
2
+优化通知栏发布
3
+## 1.1.71(2025-11-20)
4
+优化
1 5
 ## 1.1.70(2025-10-31)
2 6
 优化鸿蒙保活
3 7
 ## 1.1.69(2025-10-27)

+ 1 - 2
uni_modules/android-keeplive/encrypt

@@ -1,2 +1 @@
1
-Sץ©�FבSכ…›אe|�b₪�]ךQ³g‏T#‰9²ג#ִט�<¹—ֻ״I•–�;ׁ“7.—הד#©
םt¯«ר•סƒא�4†ל”^…›ײc8�'ֶ”?B–Fבr™§�יcNm! ׀ֽ
2
-Nf@µR�ֻJ”—w׳XUGִ�הׁתֵֽ6¾
9°™yַ
1
+Sץ©�FבSכ…›אe|�b₪�]ךQ³g‏T#‰9²ג°1[עu)1HB�³�ױק�®@^£‚U€ט‘5o₪­+*5d‎�p�[y¡—W	
ֹשY���gנ˜9½�ƒZ^a׃h¬½[�’ז¶³S¡חן¾/4²ׂ,�fַ¬c�ח[ִˆJ$יaTjטQdA

+ 2 - 2
uni_modules/android-keeplive/package.json

@@ -1,7 +1,7 @@
1 1
 {
2 2
   "id": "android-keeplive",
3
-  "displayName": "安卓保活 ios保活 鸿蒙保活 保应用程序稳定后台运行(uniapp,uniappx保活 长期维护)",
4
-  "version": "1.1.70",
3
+  "displayName": "安卓保活 ios保活 鸿蒙保活 保应用程序稳定后台运行(2025插件大赛二等奖)",
4
+  "version": "1.1.72",
5 5
   "description": "android保活/ios保活/鸿蒙保活 为应用程序提供一个稳定的后台运行环境,为您的应用程序保驾护航,防止程序后台被杀,程序唤醒,息屏唤醒,增加程序活性,优化代码执行,保活稳定",
6 6
   "keywords": [
7 7
     "保活",

+ 77 - 2
uni_modules/android-keeplive/readme.md

@@ -55,6 +55,10 @@ keep.onAddScrrenListenerCallback(function(res:boolean){
55 55
 	console.log("屏幕开启状态 "+res)
56 56
 	
57 57
 })	
58
+keep.onAddNotificationClickListener(function(d:string){
59
+	// d 为点击通知栏信息 的json字符
60
+	console.log(d);
61
+})
58 62
 keep.setWakeLock(1,"keeptag");// 设置唤醒类型
59 63
 keep.setAutoStartEnable(true)
60 64
 
@@ -110,6 +114,10 @@ keep.onAddBackgroundCallback(function(res){
110 114
 keep.onAddScrrenListenerCallback(function(res){
111 115
 	console.log("屏幕开启状态 "+res)
112 116
 	
117
+})
118
+keep.onAddNotificationClickListener(function(d){
119
+	// d 为点击通知栏信息 的json字符
120
+	console.log(d);
113 121
 })	
114 122
 keep.setWakeLock(1,"keeptag");// 设置唤醒类型
115 123
 
@@ -290,6 +298,21 @@ var ignoring=  keep.isIgnoringBatteryOptimizations();
290 298
 keep.setBackgroundMusicEnabled(true);
291 299
 ~~~
292 300
 
301
+### 设置安卓通知点击回调(安卓有效,ios 无功能)
302
+uniappx 
303
+~~~
304
+keep.onAddNotificationClickListener(function(d:string){
305
+	// d 为点击通知栏信息 的json字符
306
+	console.log(d);
307
+})
308
+~~~
309
+uniapp 
310
+~~~
311
+keep.onAddNotificationClickListener(function(d){
312
+	// d 为点击通知栏信息 的json字符
313
+	console.log(d);
314
+})
315
+~~~
293 316
 
294 317
 
295 318
 ### 是否隐藏通知栏 (弃用,后续删除)
@@ -304,7 +327,10 @@ keep.hideNotification(false);
304 327
  ~~~
305 328
  keep.setNotifaicationSoundEnable(true);
306 329
  ~~~
307
-
330
+### 设置通知id
331
+~~~
332
+keep.setNotifationId(333);// id 为随意 重复为更新通知  不同为发布新的
333
+~~~
308 334
  
309 335
 ### 设置通知栏 ChannelId 默认keeplive(安卓有效,ios 无功能)
310 336
 #### setChannelId
@@ -320,6 +346,8 @@ keep.setTitle("Test");
320 346
 keep.setContent("test runing");
321 347
 keep.updateNotification();
322 348
  ~~~
349
+ 
350
+ 
323 351
 
324 352
 ### 设置通知栏标题
325 353
 #### setTitle
@@ -336,11 +364,38 @@ keep.updateNotification();
336 364
  ~~~
337 365
 ### 设置通知重要性(安卓有效,ios 无功能)
338 366
 #### setChannelImportance
339
-参数1 number  0-4 低到高 
367
+参数1 number  1-3 低到高 
340 368
 ~~~
341 369
 keep.setChannelImportance(3);
342 370
 ~~~
371
+### 设置通知栏channel 锁屏可见性(安卓有效,ios 无功能)
372
+~~~
373
+ keep.setLockscreenVisibility(1); 锁屏可见性,可选范围VISIBILITY_PRIVATE:0、VISIBILITY_PUBLIC:1、VISIBILITY_SECRET:-1、VISIBILITY_NO_OVERRIDE:-1000
374
+~~~
343 375
 
376
+### 设置通知栏 channel 震动(安卓有效,ios 无功能)
377
+~~~
378
+keep.enableVibration(true);// true 开启  false 关闭
379
+~~~
380
+
381
+### 设置通知分组(安卓有效,ios 无功能)
382
+~~~
383
+keep.setNotifationMsgGroup("test");// 设置后更新通知 通知在一个分组 通知 setNotifationId需要不同 
384
+~~~
385
+### 设置通知栏附属信息(安卓有效,ios 无功能)
386
+~~~
387
+keep.setNotifationExterData("data");
388
+~~~
389
+
390
+### 如何发送组通知
391
+~~~
392
+ this.id=this.id+1;
393
+keep.setTitle("Test"+this.id);
394
+keep.setContent("test runing");
395
+keep.setNotifationExterData("xxxaa22233"+this.id);
396
+keep.setNotifationMsgGroup("test");
397
+keep.updateNotification();
398
+~~~
344 399
 
345 400
 ### 设置通知栏小图标(安卓有效,ios 无功能)
346 401
 #### setSmallIcon
@@ -356,9 +411,29 @@ keep.setChannelImportance(3);
356 411
 参数1 string   插件的res  drawable 目录下 名称
357 412
 ~~~
358 413
  keep.setLargeIcon("icon");
414
+~~~
415
+
416
+
417
+
418
+### 设置通知栏是否点击取消(安卓有效,ios 无功能)
419
+~~~
420
+keep.setAutoCancel(false);// false 表示不可取消 true 表示可取消
421
+~~~
422
+
423
+
424
+### 取消组通知 (安卓有效,ios 无功能)
425
+~~~
426
+keep.cancelGroupNotifaon("test")
427
+~~~
359 428
 
429
+### 取消指定id 的通知(安卓有效,ios 无功能)
430
+~~~
431
+keep.cancelNotifation(0)
360 432
 ~~~
361 433
 
434
+
435
+
436
+
362 437
 ### 设置唤醒cpu类型(安卓有效,ios 无功能)
363 438
 #### setWakeLock
364 439
 参数1 number   

BIN
uni_modules/android-keeplive/utssdk/app-android/index.uts


BIN
uni_modules/android-keeplive/utssdk/app-android/libs/cactus-release.aar


BIN
uni_modules/android-keeplive/utssdk/app-harmony/index.uts


BIN
uni_modules/android-keeplive/utssdk/app-ios/KeepLive.swift


BIN
uni_modules/android-keeplive/utssdk/app-ios/index.uts


+ 1 - 1
uni_modules/android-keeplive/utssdk/unierror.uts

@@ -1 +1 @@
1
-団蘏烕燉VUY崂
1
+4��5���.˲Q�����

+ 2 - 1
utils/api.js

@@ -98,7 +98,7 @@ const install = (Vue, vm) => {
98 98
 		selectClueFileByDto:(data,config={})=>http.post(store.state.user.path + '/clueFile/selectClueFileByDto',data,config),
99 99
 		updateClueFile:(data,config={})=>http.put(store.state.user.path + '/clueFile/updateClueFile',data),
100 100
 		addReceiptForm:(data,config={})=>http.post(store.state.user.path + '/clueReceiptForm',data),
101
-		updateReceiptForm:(data,config={})=>http.put(store.state.user.path + '/updateReceiptForm',data),
101
+		updateReceiptForm:(data,config={})=>http.put(store.state.user.path + '/clueReceiptForm',data),
102 102
 		listReceiptFormByOrderId:(orderFormId,config={})=>http.get(store.state.user.path + '/clueReceiptForm/listByOrderId/' + orderFormId),
103 103
 		getReceiptForm:(id,config={})=>http.get(store.state.user.path + '/clueReceiptForm/' + id),
104 104
 		delReceiptForm:(id,config={})=>http.delete(store.state.user.path + '/clueReceiptForm/' + id),
@@ -110,6 +110,7 @@ const install = (Vue, vm) => {
110 110
 		clueCommissionRemove: (ids,config={})=>http.post(store.state.user.path + '/clueCommissionForm/remove',ids),
111 111
 		getCustomerManagerAllList: ()=>http.post('/system/user/getCustomerManagerAllList'),
112 112
 		getClueSendFormVoByOrderId: (params)=>http.get(store.state.user.path + '/clueSendForm/getClueSendFormVoByOrderId?' + qs.stringify(params)),
113
+		statisticsSendStatus : (data,config = {})=>http.post(store.state.user.path + '/clueSendForm/statisticsSendStatus',data), // 统计线索阶段
113 114
 	}
114 115
 }
115 116