Przeglądaj źródła

Merge branch 'master' of http://106.52.242.177:3000/askqvn/crm-app

zhangxin 2 miesięcy temu
rodzic
commit
8875c1ec9d

+ 22 - 60
pages/commissionForm/index.vue

@@ -1,79 +1,39 @@
1 1
 <template>
2 2
   <view class="commission-form-page">
3
-    <u-navbar
4
-      placeholder
5
-      :autoBack="true"
6
-      :title="pageTitle"
7
-      @rightClick="submitForm"
8
-    >
3
+    <u-navbar placeholder :autoBack="true" :title="pageTitle" @rightClick="submitForm">
9 4
       <view class="u-nav-slot" slot="right"> 保存 </view>
10 5
     </u-navbar>
11 6
 
12 7
     <!-- 表单内容 -->
13 8
     <view class="follow_form_wrap">
14
-      <u--form
15
-          labelPosition="left"
16
-          labelWidth="130"
17
-          :model="commissionForm"
18
-          :rules="rules"
19
-          ref="commissionFormRef"
20
-          class="form_wrap"
21
-          :errorType="'toast'"
22
-        >
9
+      <u--form labelPosition="left" labelWidth="130" :model="commissionForm" :rules="rules" ref="commissionFormRef"
10
+        class="form_wrap" :errorType="'toast'">
23 11
         <u-form-item label="账户类型" prop="accountType" borderBottom :required="true">
24
-          <ld-select
25
-            :list="accountTypeOptions"
26
-            label-key="label"
27
-            value-key="value"
28
-            placeholder="请选择账户类型"
29
-            v-model="commissionForm.accountType"
30
-            :border="false"
31
-          ></ld-select>
12
+          <ld-select :list="accountTypeOptions" label-key="label" value-key="value" placeholder="请选择账户类型"
13
+            v-model="commissionForm.accountType" :border="false"></ld-select>
32 14
           <u-icon slot="right" name="arrow-right"></u-icon>
33 15
         </u-form-item>
34 16
 
35 17
         <u-form-item label="分成人" prop="userName" borderBottom :required="true" @click="handleShowCommissionUser">
36
-          <u--input
37
-            v-model="commissionForm.userName"
38
-            disabled style='pointer-events: none !important'
39
-            disabledColor="#ffffff"
40
-            placeholder="点击选择"
41
-            border="none"
42
-          ></u--input>
18
+          <u--input v-model="commissionForm.userName" disabled style='pointer-events: none !important'
19
+            disabledColor="#ffffff" placeholder="点击选择" border="none"></u--input>
43 20
           <u-icon slot="right" name="arrow-right"></u-icon>
44 21
         </u-form-item>
45 22
 
46 23
         <u-form-item label="分成比例(%)" prop="commissionRate" borderBottom :required="true">
47
-          <u--input
48
-            v-model.number="commissionForm.commissionRate"
49
-            type="number"
50
-            placeholder="请输入分成比例(0-100)"
51
-            border="none"
52
-            @blur="validateCommissionRate"
53
-          ></u--input>
24
+          <u--input v-model.number="commissionForm.commissionRate" type="number" placeholder="请输入分成比例(0-100)"
25
+            border="none" @blur="validateCommissionRate"></u--input>
54 26
         </u-form-item>
55 27
 
56 28
         <u-form-item label="是否归属公司业绩" prop="isCompanyPerformance" borderBottom :required="true">
57
-          <ld-select
58
-            :list="companyPerformanceOptions"
59
-            label-key="label"
60
-            value-key="value"
61
-            placeholder="请选择是否归属公司业绩"
62
-            v-model="commissionForm.isCompanyPerformance"
63
-            :border="false"
64
-          ></ld-select>
29
+          <ld-select :list="companyPerformanceOptions" label-key="label" value-key="value" placeholder="请选择是否归属公司业绩"
30
+            v-model="commissionForm.isCompanyPerformance" :border="false"></ld-select>
65 31
           <u-icon slot="right" name="arrow-right"></u-icon>
66 32
         </u-form-item>
67 33
 
68 34
         <u-form-item label="关联收单信息" prop="receiptFormId" borderBottom :required="true">
69
-          <ld-select
70
-            :list="receiptList"
71
-            label-key="item"
72
-            value-key="id"
73
-            placeholder="请选择收单信息"
74
-            v-model="commissionForm.receiptFormId"
75
-            :border="false"
76
-          ></ld-select>
35
+          <ld-select :list="receiptList" label-key="item" value-key="id" placeholder="请选择收单信息"
36
+            v-model="commissionForm.receiptFormId" :border="false"></ld-select>
77 37
           <u-icon slot="right" name="arrow-right"></u-icon>
78 38
         </u-form-item>
79 39
       </u--form>
@@ -81,8 +41,9 @@
81 41
 
82 42
     <!-- 分成人选择器 -->
83 43
     <ba-tree-picker :selectParent="false" v-if="commissionUserList.length > 0" ref="commissionUser" :multiple='false'
84
-      @select-change="commissionUserSelectChange" border title="分成人" :localdata="commissionUserList" valueKey="id" textKey="label"
85
-      childrenKey="children" :selectedValues="commissionForm.userId" :personNames="commissionForm.userName" />
44
+      @select-change="commissionUserSelectChange" border title="分成人" :localdata="commissionUserList" valueKey="id"
45
+      textKey="label" childrenKey="children" :selectedValues="commissionForm.userId"
46
+      :personNames="commissionForm.userName" />
86 47
   </view>
87 48
 </template>
88 49
 
@@ -151,10 +112,10 @@ export default {
151 112
     this.commissionForm.sendFormId = options.sendFormId;
152 113
     this.commissionForm.clueId = options.clueId;
153 114
     this.commissionForm.id = options.id;
154
-    
115
+
155 116
     // 获取分成人列表
156 117
     this.getCommissionUserList();
157
-    
118
+
158 119
     this.fetchReceiptList().then(() => {
159 120
       if (options.id) {
160 121
         this.initForm(options.id);
@@ -202,7 +163,7 @@ export default {
202 163
     validateCommissionRate() {
203 164
       const { commissionRate } = this.commissionForm;
204 165
       if (!commissionRate && commissionRate !== 0) return;
205
-      
166
+
206 167
       const rate = Number(commissionRate);
207 168
       if (rate < 0) {
208 169
         uni.$u.toast("分成比例不能小于0");
@@ -231,12 +192,12 @@ export default {
231 192
         if (this.commissionForm.id) {
232 193
           // 修改
233 194
           await uni.$u.api.clueCommissionUpdate(this.commissionForm);
234
-		  uni.$emit('addCommissionSuccess');
195
+          uni.$emit('addCommissionSuccess');
235 196
           uni.$u.toast("修改成功");
236 197
         } else {
237 198
           // 新增
238 199
           await uni.$u.api.clueCommissionAdd(this.commissionForm);
239
-		  uni.$emit('addCommissionSuccess');
200
+          uni.$emit('addCommissionSuccess');
240 201
           uni.$u.toast("新增成功");
241 202
         }
242 203
 
@@ -258,5 +219,6 @@ export default {
258 219
 .commission-form-page {
259 220
   background-color: #fff;
260 221
 }
222
+
261 223
 @import "@/static/follow/index.scss";
262 224
 </style>

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

@@ -26,158 +26,158 @@
26 26
 </template>
27 27
 
28 28
 <script>
29
-	import pullUpRefresh from "@/utils/pullUpRefresh";
30
-	import filterQuery from "./filterQuery.vue";
31
-	import commissionItem from "./commissionItem.vue";
32
-	import dayjs from "dayjs";
33
-	export default {
34
-		mixins: [pullUpRefresh],
35
-		components: {
36
-			filterQuery,
37
-			commissionItem
29
+import pullUpRefresh from "@/utils/pullUpRefresh";
30
+import filterQuery from "./filterQuery.vue";
31
+import commissionItem from "./commissionItem.vue";
32
+import dayjs from "dayjs";
33
+export default {
34
+	mixins: [pullUpRefresh],
35
+	components: {
36
+		filterQuery,
37
+		commissionItem
38
+	},
39
+	props: {
40
+		type: {
41
+			type: String,
42
+			default: '2'
38 43
 		},
39
-		props: {
40
-			type: {
41
-				type: String,
42
-				default: '2'
44
+		showStats: {
45
+			type: Boolean,
46
+			default: true
47
+		}
48
+	},
49
+	data() {
50
+		return {
51
+			queryParams: {
52
+				receiptDateEnd: dayjs().format("YYYY-MM-DD"),
53
+				receiptDateStart: dayjs().startOf('month').format("YYYY-MM-DD"),
54
+				item: undefined,
55
+				phone: undefined,
56
+				receiptUserId: undefined,
57
+				pageNum: 1,
58
+				pageSize: 10,
43 59
 			},
44
-			showStats: {
45
-				type: Boolean,
46
-				default: true
47
-			}
60
+
61
+			mapHeight: "0px"
62
+		}
63
+	},
64
+	methods: {
65
+		handleKeyword() {
66
+			this.resetData();
48 67
 		},
49
-		data() {
50
-			return {
51
-				queryParams: {
52
-					receiptDateEnd: dayjs().format("YYYY-MM-DD"),
53
-					receiptDateStart: dayjs().startOf('month').format("YYYY-MM-DD"),
54
-					item: undefined,
55
-					phone: undefined,
56
-					receiptUserId: undefined,
57
-					pageNum: 1,
58
-					pageSize: 10,
59
-				},
60
-
61
-				mapHeight: "0px"
62
-			}
68
+		handleKeywordClear() {
69
+			// 组件有bug 清空后的值还是存在
70
+			this.queryParams.phone = "";
71
+			this.resetData();
63 72
 		},
64
-		methods: {
65
-			handleKeyword() {
66
-				this.resetData();
67
-			},
68
-			handleKeywordClear() {
69
-				// 组件有bug 清空后的值还是存在
70
-				this.queryParams.phone = "";
71
-				this.resetData();
72
-			},
73
-			handleshowFilter() {
74
-				this.$refs.filter.show();
75
-			},
76
-			async getList() {
77
-				const {
78
-					pageNum,
79
-					pageSize,
80
-				} = this.queryParams;
81
-				this.queryParams.type = this.type;
82
-				// 调用分成接口
83
-				const {
84
-					rows,
85
-					total
86
-				} = await uni.$u.api.selectCommissionList({
87
-					pageSize,
88
-					pageNum,
89
-				}, this.queryParams);
90
-				return rows;
91
-			},
92
-			handleOnReachBottom() {
93
-				this.handleReachBottom();
94
-			}
73
+		handleshowFilter() {
74
+			this.$refs.filter.show();
95 75
 		},
96
-		mounted() {
97
-			this.resetData();
98
-			uni.getSystemInfo({
99
-				success: (e) => {
100
-					const {
101
-						windowTop,
102
-						windowBottom,
103
-						windowHeight
104
-					} = e;
105
-					this.mapHeight = (windowHeight - 70) + 'px';
106
-				}
107
-			});
76
+		async getList() {
77
+			const {
78
+				pageNum,
79
+				pageSize,
80
+			} = this.queryParams;
81
+			this.queryParams.type = this.type;
82
+			// 调用分成接口
83
+			const {
84
+				rows,
85
+				total
86
+			} = await uni.$u.api.selectCommissionList({
87
+				pageSize,
88
+				pageNum,
89
+			}, this.queryParams);
90
+			return rows;
91
+		},
92
+		handleOnReachBottom() {
93
+			this.handleReachBottom();
108 94
 		}
95
+	},
96
+	mounted() {
97
+		this.resetData();
98
+		uni.getSystemInfo({
99
+			success: (e) => {
100
+				const {
101
+					windowTop,
102
+					windowBottom,
103
+					windowHeight
104
+				} = e;
105
+				this.mapHeight = (windowHeight - 70) + 'px';
106
+			}
107
+		});
109 108
 	}
109
+}
110 110
 </script>
111 111
 
112 112
 <style lang="scss" scoped>
113
-	.my_commission_wrap {
114
-		.queryParams_wrap {
115
-			display: flex;
116
-			background: #fff;
117
-			padding: 14px 0;
118
-
119
-
120
-			.query,
121
-			.search {
122
-				display: flex;
123
-				align-items: center;
124
-				justify-content: center;
125
-				font-size: 16px;
126
-				font-weight: 700;
127
-				color: #202020;
128
-			}
113
+.my_commission_wrap {
114
+	.queryParams_wrap {
115
+		display: flex;
116
+		background: #fff;
117
+		padding: 14px 0;
129 118
 
130
-			.query {
131
-				flex: 1;
132
-			}
133 119
 
134
-			.search {
135
-				flex: 2;
136
-				padding-left: 20px;
137
-			}
120
+		.query,
121
+		.search {
122
+			display: flex;
123
+			align-items: center;
124
+			justify-content: center;
125
+			font-size: 16px;
126
+			font-weight: 700;
127
+			color: #202020;
138 128
 		}
139
-	}
140 129
 
141
-	.stats_info_wrap {
142
-		margin-bottom: 30px;
143
-	}
130
+		.query {
131
+			flex: 1;
132
+		}
144 133
 
145
-	.stats_info_top {
146
-		display: flex;
147
-		margin-bottom: 20px;
148
-
149
-		.info_item {
150
-			box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1);
151
-			width: 23%;
152
-			margin-right: 2.6%;
153
-			height: 120px;
154
-			padding: 15px;
155
-			background: #fff;
156
-			border-radius: 15px;
157
-
158
-			&:last-child {
159
-				margin-right: 0;
160
-			}
134
+		.search {
135
+			flex: 2;
136
+			padding-left: 20px;
137
+		}
138
+	}
139
+}
140
+
141
+.stats_info_wrap {
142
+	margin-bottom: 30px;
143
+}
144
+
145
+.stats_info_top {
146
+	display: flex;
147
+	margin-bottom: 20px;
148
+
149
+	.info_item {
150
+		box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1);
151
+		width: 23%;
152
+		margin-right: 2.6%;
153
+		height: 120px;
154
+		padding: 15px;
155
+		background: #fff;
156
+		border-radius: 15px;
157
+
158
+		&:last-child {
159
+			margin-right: 0;
160
+		}
161 161
 
162
-			.info_title {
163
-				font-size: 14px;
164
-				color: #6b7280;
165
-				margin-bottom: 15px;
166
-			}
162
+		.info_title {
163
+			font-size: 14px;
164
+			color: #6b7280;
165
+			margin-bottom: 15px;
166
+		}
167 167
 
168
-			.info_value {
169
-				font-size: 24px;
170
-				font-weight: bold;
171
-				color: #202020;
172
-			}
168
+		.info_value {
169
+			font-size: 24px;
170
+			font-weight: bold;
171
+			color: #202020;
173 172
 		}
174 173
 	}
174
+}
175 175
 
176
-	.commission_item_wrap {
177
-		padding: 20px 20px;
178
-	}
176
+.commission_item_wrap {
177
+	padding: 20px 20px;
178
+}
179 179
 
180
-	.empty_wrap {
181
-		margin-top: 100px;
182
-	}
180
+.empty_wrap {
181
+	margin-top: 100px;
182
+}
183 183
 </style>

+ 69 - 68
pages/orderDetail/tabs/commissionFormList/commissionFormList.vue

@@ -1,6 +1,6 @@
1 1
 <template>
2 2
 	<view class="commission-form-list">
3
-		
3
+
4 4
 
5 5
 		<!-- 分成信息卡片列表 -->
6 6
 		<view v-if="loading" class="loading_wrap">
@@ -10,37 +10,38 @@
10 10
 			<u-empty text="暂无分成数据"></u-empty>
11 11
 		</view>
12 12
 		<view v-else class="card_list">
13
-			<commission-item v-for="(row) in commissionList" :key="row.id" :item="row" :type="'2'" @click.native="handleEdit(row)"></commission-item>
13
+			<commission-item v-for="(row) in commissionList" :key="row.id" :item="row" :type="'2'"
14
+				@click.native="handleEdit(row)"></commission-item>
14 15
 		</view>
15 16
 	</view>
16 17
 </template>
17 18
 
18 19
 <script>
19
-	import commissionItem from "@/pages/order/components/commission/commissionItem.vue";
20
+import commissionItem from "@/pages/order/components/commission/commissionItem.vue";
20 21
 
21
-	export default {
22
-		name: 'CommissionFormList',
23
-		components: {
24
-			commissionItem
25
-		},
26
-		props: {
27
-			sendFormId: {
28
-				type: [Number, String],
29
-				required: true
30
-			},
31
-			clueId: {
32
-				type: [Number, String],
33
-				required: true
34
-			}
22
+export default {
23
+	name: 'CommissionFormList',
24
+	components: {
25
+		commissionItem
26
+	},
27
+	props: {
28
+		sendFormId: {
29
+			type: [Number, String],
30
+			required: true
35 31
 		},
36
-		data() {
37
-			return {
38
-				commissionList: [],
39
-				loading: false
40
-			}
41
-		},
42
-		methods: {
43
-			async getList() {
32
+		clueId: {
33
+			type: [Number, String],
34
+			required: true
35
+		}
36
+	},
37
+	data() {
38
+		return {
39
+			commissionList: [],
40
+			loading: false
41
+		}
42
+	},
43
+	methods: {
44
+		async getList() {
44 45
 			this.loading = true
45 46
 			try {
46 47
 				const data = {
@@ -61,58 +62,58 @@
61 62
 				url: `/pages/commissionForm/index?sendFormId=${this.sendFormId}&clueId=${this.clueId}&id=${row.id}`
62 63
 			})
63 64
 		},
64
-			handleDelete(id) {
65
-				uni.showModal({
66
-					title: '警告',
67
-					content: '确定要删除这条分成记录吗?删除后将无法恢复!',
68
-					confirmButtonText: '确定删除',
69
-					cancelButtonText: '取消',
70
-					success: (res) => {
71
-						if (res.confirm) {
72
-							this.deleteRow(id)
73
-						}
65
+		handleDelete(id) {
66
+			uni.showModal({
67
+				title: '警告',
68
+				content: '确定要删除这条分成记录吗?删除后将无法恢复!',
69
+				confirmButtonText: '确定删除',
70
+				cancelButtonText: '取消',
71
+				success: (res) => {
72
+					if (res.confirm) {
73
+						this.deleteRow(id)
74 74
 					}
75
-				})
76
-			},
77
-			async deleteRow(id) {
78
-				try {
79
-					await uni.$u.api.clueCommissionForm.remove([id])
80
-					uni.$u.toast('删除成功')
81
-					this.getList()
82
-				} catch (error) {
83
-					uni.$u.toast('删除失败,请稍后重试')
84 75
 				}
85
-			},
86
-			// 外部调用获取列表
87
-			getListByExternal() {
76
+			})
77
+		},
78
+		async deleteRow(id) {
79
+			try {
80
+				await uni.$u.api.clueCommissionForm.remove([id])
81
+				uni.$u.toast('删除成功')
88 82
 				this.getList()
83
+			} catch (error) {
84
+				uni.$u.toast('删除失败,请稍后重试')
89 85
 			}
90 86
 		},
91
-		created() {
87
+		// 外部调用获取列表
88
+		getListByExternal() {
89
+			this.getList()
90
+		}
91
+	},
92
+	created() {
93
+		this.getList();
94
+		uni.$on('addCommissionSuccess', () => {
92 95
 			this.getList();
93
-			uni.$on('addCommissionSuccess',()=>{
94
-				this.getList();
95
-			});
96
-		},
97
-		beforeDestroy(){
98
-			uni.$off('addCommissionSuccess');  
99
-		},
100
-	}
96
+		});
97
+	},
98
+	beforeDestroy() {
99
+		uni.$off('addCommissionSuccess');
100
+	},
101
+}
101 102
 </script>
102 103
 
103 104
 <style lang="scss" scoped>
104
-	.commission-form-list {
105
-		padding: 20px 20px 20px;
106
-		background: #f5f6f8;
107
-	}
105
+.commission-form-list {
106
+	padding: 20px 20px 20px;
107
+	background: #f5f6f8;
108
+}
108 109
 
109
-	.commission-header {
110
-		margin-bottom: 16px;
111
-	}
110
+.commission-header {
111
+	margin-bottom: 16px;
112
+}
112 113
 
113
-	.loading_wrap,
114
-	.empty_wrap {
115
-		padding: 40px 20px;
116
-		text-align: center;
117
-	}
114
+.loading_wrap,
115
+.empty_wrap {
116
+	padding: 40px 20px;
117
+	text-align: center;
118
+}
118 119
 </style>

+ 119 - 4
pages/orderDetailNew/components/orderDetailNewView.vue

@@ -5,14 +5,17 @@
5 5
             <pageOne @handleNextClick="handleNextClick" :orderDetail="detail" :orderId="orderId" />
6 6
         </view>
7 7
         <view class="page-item" v-show="activeIndex === 1">
8
-            <pageTwo @handleNextClick="handleNextClick" :orderDetail="detail" :orderId="orderId" />
8
+            <pageTwo @handleNextClick="handleNextClick" :orderDetail="detail" :orderId="orderId"
9
+                :followUpList="followUpList" />
9 10
         </view>
10 11
         <view class="page-item" v-show="activeIndex === 2">
11 12
             <pageThree @handleNextClick="handleNextClick" :orderDetail="detail" @handleNeedSave="handleNeedSave"
12
-                @handleConfirmPay="handleConfirmPay" ref="pageThreeComp" :orderId="orderId" />
13
+                :receiptList="receiptList" @handleConfirmPay="handleConfirmPay" ref="pageThreeComp"
14
+                :orderId="orderId" />
13 15
         </view>
14 16
         <view class="page-item" v-show="activeIndex === 3">
15
-            <pageFour @handleNextClick="handleNextClick" :orderDetail="detail" />
17
+            <pageFour @confirmInterStore="confirmInterStore" @handleNextClick="handleNextClick" :orderDetail="detail"
18
+                :receiptList="receiptList" />
16 19
         </view>
17 20
 
18 21
         <ul class="page">
@@ -59,10 +62,35 @@ export default {
59 62
                 formFour: {},
60 63
             },
61 64
             pageThreeForm: {},
62
-            fileIds: ''
65
+            fileIds: '',
66
+            //收件信息page4
67
+            receiptList: [],
68
+            //订单细节
69
+            orderDetail: {},
70
+            // 跟进记录
71
+            followUpList: [],
63 72
         }
64 73
     },
65 74
     name: 'OrderDetailNewView',
75
+    watch: {
76
+        orderId: {
77
+            handler(newVal) {
78
+                if (newVal) {
79
+                    this.fetchReceiptList();
80
+                }
81
+            }, immediate: true
82
+        },
83
+        detail: {
84
+            handler(newVal) {
85
+                if (newVal) {
86
+                    this.orderDetail = newVal;
87
+                    this.getFollowUpList();
88
+                }
89
+            },
90
+            deep: true,
91
+        }
92
+
93
+    },
66 94
     methods: {
67 95
         handleNextClick({ nowPage, form }) {
68 96
             this.activeIndex++
@@ -154,6 +182,93 @@ export default {
154 182
                 uni.$u.toast(`支付失败:${response.msg}`)
155 183
             }
156 184
         },
185
+        //确认入库
186
+        confirmInterStore({ warehouseInfo }) {
187
+            console.log(warehouseInfo)
188
+            const paramsInterStore = {
189
+                "searchValue": this.detail.searchValue,
190
+                "createBy": this.detail.createBy,
191
+                "createTime": this.detail.createTime,
192
+                "updateBy": this.detail.updateBy,
193
+                "updateTime": this.detail.updateTime,
194
+                // "remark": ,    //发单备注,先不传
195
+                "params": this.detail.params,     //看接口文档
196
+                "id": this.detail.receiptId,
197
+                "sendFormId": this.orderId, //接单中心的id,就是接单中心列表的id(发单id)
198
+                "clueId": this.detail.clueId,
199
+                "item": warehouseInfo.item || '',
200
+                "brand": this.detail.brand,
201
+                // "needCheckCode": 1,   //先不传
202
+                "code": warehouseInfo.codeStorage || '',         //先不传
203
+                // "paymentAmount": null, //支付总额page3 先不传
204
+                "phone": this.detail.phone,
205
+                "tableFee": warehouseInfo.watchPrice || '',//page3支付总额
206
+                "benefitFee": warehouseInfo.benefitFee || '',     //好处费page4加上
207
+                "freight": warehouseInfo.freight || '',         //运费page4加上
208
+                "checkCodeFee": warehouseInfo.checkCodeFee || '',  //查码费
209
+                // "totalCost": "60230.00",   // 成本合计 =   运费 + 好处费 + 查码费 + 表款(支付总额) + 维修费。
210
+                "sellingPrice": this.topInfo.price.replace(/,/g, ''),   //实际价格(售价)顶上tab里面的第三栏
211
+                // "performance": "29772.00",  //sellingPrice - totalCost
212
+                "receiptRemark": warehouseInfo.remarks + ';' + warehouseInfo.uploadedImage || '',//"收单之后还需再跟进", 先不传
213
+                "repairAmount": warehouseInfo.repairAmount || '', //维修总金额 ,先不传
214
+                "grossPerformance": warehouseInfo.grossPerformance || '',   //毛利 performance*splitRatio
215
+                "expressOrderNo": warehouseInfo.expressOrderNo,   //快递单号+后续加上一个键加上图url
216
+                "fileIds": this.fileIds,  //传第三部里面排序完成之后的id的数组,参考编辑收单里面的附件传的方法
217
+                "model": this.detail.model,
218
+                // "splitRatio": "25",   //分成比例,先不传
219
+                "customerServiceName": "1", //默认传1,判断入库的类型,回收类入库,销售类入库,维保类入库,第四步传,增加选项下拉
220
+                "deptId": this.detail.deptId,
221
+                "category": this.detail.category,
222
+                "delFlag": this.detail.delFlag,
223
+                "idCard": this.pageThreeForm.idNumber,
224
+                "paymentMethod": '小葫芦线上支付',     //支付方式,如果是app里面默认传‘小葫芦线上支付’
225
+                "bankCardNumber": this.pageThreeForm.bankAccount,
226
+                "bankName": this.pageThreeForm.bankName,
227
+                "customName": this.pageThreeForm.customName,
228
+            }
229
+            //调用接口保存物流消息
230
+            if (this.detail.receiptId) {
231
+                this.updateData(paramsInterStore);
232
+            } else {
233
+                this.saveData(paramsInterStore);
234
+            }
235
+
236
+
237
+
238
+
239
+        },
240
+        // 获取收单列表
241
+        async fetchReceiptList() {
242
+            try {
243
+                const res = await uni.$u.api.clueReceiptFormListByOrderId(this.orderId);
244
+                console.log('这里是收件列表', res)
245
+                this.receiptList = res.data || [];
246
+            } catch (error) {
247
+                console.error("获取收单列表失败:", error);
248
+                uni.$u.toast("获取收单列表失败");
249
+            }
250
+        },
251
+
252
+        //获取跟进记录
253
+        async getFollowUpList() {
254
+            try {
255
+                const res = await uni.$u.api.getDuplicateOrderFollowListByClueId({ clueId: this.orderDetail.clueId });
256
+                const data = res.data || {};
257
+
258
+                const followUpList = [];
259
+                for (const key in data) {
260
+                    const element = data[key];
261
+                    followUpList.push(...element)
262
+                }
263
+                this.followUpList = followUpList;
264
+
265
+
266
+
267
+            } catch (error) {
268
+                console.error("获取跟进记录失败:", error);
269
+                uni.$u.toast("获取跟进记录失败");
270
+            }
271
+        }
157 272
     },
158 273
 
159 274
 }

+ 341 - 191
pages/orderDetailNew/components/pageFour.vue

@@ -2,7 +2,7 @@
2 2
     <view class="page-container">
3 3
         <!-- 入库信息卡片 -->
4 4
         <view class="card_wrap">
5
-            <u--form labelPosition="top" :model="warehouseInfo" :rules="rules" ref="form" class="address-section">
5
+            <u--form labelPosition="top" :model="warehouseInfo" ref="form" class="address-section">
6 6
                 <view class="address-header">
7 7
                     <u-icon name="car-fill" size="36rpx" color="#108cff" class="location-icon"></u-icon>
8 8
                     <text class="address-title">入库信息</text>
@@ -10,13 +10,13 @@
10 10
                 <!-- 编码和快递单号同一行 -->
11 11
                 <u-row class="info-row" justify="space-between">
12 12
                     <u-col span="4.5">
13
-                        <u-form-item label="编码" prop="accountHolder">
14
-                            <u--input v-model="warehouseInfo.accountHolder" placeholder="请输入编码" class="info-input" />
13
+                        <u-form-item label="编码" prop="codeStorage">
14
+                            <u--input v-model="warehouseInfo.codeStorage" placeholder="请输入编码" class="info-input" />
15 15
                         </u-form-item>
16 16
                     </u-col>
17 17
                     <u-col span="4.5">
18
-                        <u-form-item label="快递单号" prop="bankName">
19
-                            <u--input v-model="warehouseInfo.bankName" placeholder="请输入快递单号" class="info-input" />
18
+                        <u-form-item label="快递单号" prop="expressOrderNo">
19
+                            <u--input v-model="warehouseInfo.expressOrderNo" placeholder="请输入快递单号" class="info-input" />
20 20
                         </u-form-item>
21 21
                     </u-col>
22 22
                     <u-col span="2">
@@ -51,7 +51,22 @@
51 51
                     </u-col>
52 52
                     <u-col span="5.8">
53 53
                         <u-form-item label="表款">
54
-                            <u--input v-model="warehouseInfo.tableFee" placeholder="请输入表款" class="info-input"
54
+                            <u--input v-model="warehouseInfo.watchPrice" placeholder="请输入表款" class="info-input"
55
+                                type="number" />
56
+                        </u-form-item>
57
+                    </u-col>
58
+                </u-row>
59
+
60
+                <u-row class="info-row" justify="space-between">
61
+                    <u-col span="5.8">
62
+                        <u-form-item label="好处费">
63
+                            <u--input v-model="warehouseInfo.benefitFee" placeholder="请输入好处费" class="info-input"
64
+                                type="number" />
65
+                        </u-form-item>
66
+                    </u-col>
67
+                    <u-col span="5.8">
68
+                        <u-form-item label="运费">
69
+                            <u--input v-model="warehouseInfo.freight" placeholder="请输入运费" class="info-input"
55 70
                                 type="number" />
56 71
                         </u-form-item>
57 72
                     </u-col>
@@ -99,66 +114,70 @@
99 114
                 <!-- 分成信息表格 -->
100 115
                 <view class="split-table">
101 116
                     <u-row class="split-table-header">
102
-                        <u-col span="2">
117
+                        <u-col span="4">
103 118
                             <text class="header-text">关联</text>
104 119
                         </u-col>
105 120
                         <u-col span="2">
106
-                            <text class="header-text">账户类型</text>
107
-                        </u-col>
108
-                        <u-col span="2">
109 121
                             <text class="header-text">分成人</text>
110 122
                         </u-col>
123
+
111 124
                         <u-col span="2">
112
-                            <text class="header-text">比例(%)</text>
125
+                            <text class="header-text">比例</text>
113 126
                         </u-col>
114
-                        <u-col span="2">
115
-                            <text class="header-text">归属公司</text>
127
+                        <u-col span="1">
128
+                            <text class="header-text">类型</text>
129
+                        </u-col>
130
+                        <u-col span="1">
131
+                            <text class="header-text">公司</text>
116 132
                         </u-col>
117 133
                         <u-col span="2" class="action-column">
118 134
                             <text class="header-text">操作</text>
119 135
                         </u-col>
120 136
                     </u-row>
121 137
                     <u-row v-for="(item, index) in profitSharingList" :key="item.id" class="split-table-row">
122
-                        <u-col span="2">
138
+                        <u-col span="4">
123 139
                             <view class="table-cell">
124
-                                <select v-model="item.association" class="custom-select">
125
-                                    <option value="">无</option>
126
-                                    <option v-for="option in associationOptions" :key="option" :value="option">
127
-                                        {{ option }}
140
+                                <!-- <select v-model="item.deptId" class="custom-select">
141
+                                    <option v-for="option in associationOptions" :key="option.id" :value="option.id">
142
+                                        {{ option.label }}
128 143
                                     </option>
129
-                                </select>
130
-                            </view>
131
-                        </u-col>
132
-                        <u-col span="2">
133
-                            <view class="table-cell">
134
-                                <view
135
-                                    :class="['account-type', item.accountType === 'frontend' ? 'frontend' : 'backend']"
136
-                                    @click="toggleAccountType(item)" style="cursor: pointer;">
137
-                                    {{ item.accountType === 'frontend' ? '前' : '后' }}
138
-                                </view>
144
+                                </select> -->
145
+                                <u-button @click='handleSelectOrg(item)' :text="item.orgName" plain></u-button>
139 146
                             </view>
140 147
                         </u-col>
148
+
141 149
                         <u-col span="2">
142 150
                             <view class="table-cell">
143
-                                <select v-model="item.person" class="custom-select">
151
+                                <!-- <select v-model="item.userId" class="custom-select">
144 152
                                     <option value="">无</option>
145
-                                    <option v-for="person in personOptions" :key="person" :value="person">
146
-                                        {{ person }}
153
+                                    <option v-for="person in item.personOptions" :key="person.id" :value="person.id">
154
+                                        {{ person.label }}
147 155
                                     </option>
148
-                                </select>
156
+                                </select> -->
157
+                                <u-button @click="handleSelectPerson(item)" :text="item.userName" plain></u-button>
149 158
                             </view>
150 159
                         </u-col>
160
+
161
+
151 162
                         <u-col span="2">
152 163
                             <view class="table-cell">
153
-                                <u--input v-model="item.percentage" type="number" class="percentage-input"
164
+                                <u--input v-model="item.commissionRate" type="number" class="percentage-input"
154 165
                                     @input="handlePercentageInput(item)" min="0" max="100" precision="0" />
155 166
                             </view>
156 167
                         </u-col>
157
-                        <u-col span="2">
168
+                        <u-col span="1">
169
+                            <view class="table-cell">
170
+                                <view :class="['account-type', item.accountType == '1' ? 'frontend' : 'backend']"
171
+                                    @click="toggleAccountType(item)" style="cursor: pointer;">
172
+                                    {{ item.accountType == '1' ? '前' : '后' }}
173
+                                </view>
174
+                            </view>
175
+                        </u-col>
176
+                        <u-col span="1">
158 177
                             <view class="table-cell">
159 178
                                 <view class="radio-wrapper" @click="toggleBelongToCompany(item)">
160
-                                    <view :class="['radio-circle', item.belongToCompany ? 'active' : '']">
161
-                                        <u-icon v-if="item.belongToCompany" name="checkmark" size="20rpx"
179
+                                    <view :class="['radio-circle', item.isCompanyPerformance == '1' ? 'active' : '']">
180
+                                        <u-icon v-if="item.isCompanyPerformance == '1'" name="checkmark" size="20rpx"
162 181
                                             color="#fff"></u-icon>
163 182
                                     </view>
164 183
                                 </view>
@@ -166,8 +185,8 @@
166 185
                         </u-col>
167 186
                         <u-col span="2" class="action-column">
168 187
                             <view class="table-cell">
169
-                                <u-button type="error" plain shape="circle" size="mini" @click="deleteSplit(index)"
170
-                                    :disabled="profitSharingList.length <= 1">
188
+                                <u-button type="error" plain shape="circle" size="mini" @click="deleteRow(item.id)"
189
+                                    class='delectBtn'>
171 190
                                     <u-icon name="trash" size="20rpx" color="#ff6b6b"></u-icon>
172 191
                                 </u-button>
173 192
                             </view>
@@ -184,141 +203,178 @@
184 203
                 <text style="margin-left: 8rpx;">确认入库</text>
185 204
             </u-button>
186 205
         </div>
206
+
207
+        <!-- 组织选择 -->
208
+        <u-picker :show="showOrgPicker" title="请选择组织" :columns="columnsOrgList" keyName="label"
209
+            @confirm="handleOrgConfirmOrg" @cancel='showOrgPicker = false'></u-picker>
210
+
211
+
212
+        <!-- 人员选择 -->
213
+        <u-picker :show="showPersonPicker" title="请选择分成人" :columns="columnsPersonList" keyName="label"
214
+            @confirm="handleConfirmPerson" @cancel='handleCancelPerson'></u-picker>
215
+
216
+        <u-toast ref="uToast"></u-toast>
217
+
187 218
     </view>
188 219
 </template>
189 220
 
190 221
 <script>
191 222
 export default {
223
+
192 224
     props: {
193 225
         orderDetail: {
194 226
             type: Object,
195 227
             default: () => { },
228
+        },
229
+        receiptList: {
230
+            type: Array,
231
+            default: () => { },
232
+        },
233
+    },
234
+
235
+    watch: {
236
+        receiptList: {
237
+            handler(newVal) {
238
+                if (newVal) {
239
+                    // "searchValue": null,
240
+                    // "createBy": "12234",
241
+                    // "createTime": "2025-12-25 13:39:25",
242
+                    // "updateBy": "12234",
243
+                    // "updateTime": "2025-12-27 09:33:05",
244
+                    // "remark": null,
245
+                    // "params": {},
246
+                    // "id": "4347",
247
+                    // "sendFormId": "5464",
248
+                    // "clueId": "1973381744953516033",
249
+                    // "item": "测试发单-VV",               //收单物品
250
+                    // "brand": "LV",
251
+                    // "needCheckCode": 1,
252
+                    // "code": "111",
253
+                    // "paymentAmount": 99.00,
254
+                    // "phone": "18692257000",
255
+                    // "tableFee": 999999.00,
256
+                    // "benefitFee": 666.00,            //好处费
257
+                    // "freight": 666666.00,             //运费
258
+                    // "checkCodeFee": 666.00,           //查码费
259
+                    // "totalCost": null,
260
+                    // "sellingPrice": 125000.00,
261
+                    // "performance": null,
262
+                    // "receiptRemark": null,
263
+                    // "repairAmount": 666.00,           //维修金额
264
+                    // "grossPerformance": 666.00,       //毛业绩
265
+                    // "expressOrderNo": "666",         //快递单号
266
+                    // "fileIds": "",
267
+                    // "model": "lvvvv",
268
+                    // "splitRatio": null,
269
+                    // "customerServiceName": "1",
270
+                    // "deptId": "373",
271
+                    // "category": "2",
272
+                    // "delFlag": null,
273
+                    // "idCard": "444",
274
+                    // "paymentMethod": null,
275
+                    // "bankCardNumber": "333",
276
+                    // "bankName": "222",
277
+                    // "customName": "111"
278
+                    const data = newVal[0]
279
+                    this.warehouseInfo = {
280
+                        codeStorage: data.code,//编码
281
+                        expressOrderNo: data.expressOrderNo || '',//快递单号
282
+                        uploadedImage: data.receiptRemark.split(';')[1] || '',//物流图片 截取备注第二部分
283
+                        item: data.item || '',//收单物品
284
+                        checkCodeFee: data.checkCodeFee || '',//查码费
285
+                        watchPrice: data.tableFee || '',//表款
286
+                        benefitFee: data.benefitFee || '',//好处费
287
+                        freight: data.freight || '',//运费
288
+                        repairAmount: data.repairAmount || '',//维修金额
289
+                        grossPerformance: data.grossPerformance || '',//毛业绩
290
+                        remarks: data.receiptRemark.split(';')[0] || '',//收单备注  截取备注第一部分
291
+                    }
292
+                    this.$nextTick(() => {
293
+                        this.getList()
294
+                    })
295
+                }
296
+            },
196 297
         }
197 298
     },
198 299
     data() {
199 300
         return {
200 301
             // 入库信息相关的数据
201 302
             warehouseInfo: {
202
-                accountHolder: '',
203
-                bankName: '',
204
-                item: '',
205
-                checkCodeFee: '',
206
-                tableFee: '',
207
-                repairAmount: '',
208
-                grossPerformance: '',
209
-                remarks: '',
210
-                uploadedImage: ''
303
+                codeStorage: '',//编码
304
+                expressOrderNo: '',//快递单号
305
+                uploadedImage: '',//物流图片
306
+                item: '',//收单物品
307
+                checkCodeFee: '',//查码费
308
+                watchPrice: '',//表款
309
+                benefitFee: '',//好处费
310
+                freight: '',//运费
311
+                repairAmount: '',//维修金额
312
+                grossPerformance: '',//毛业绩
313
+                remarks: '',//收单备注
211 314
             },
212 315
             // 分成信息相关的数据
213 316
             profitSharingList: [
214
-                {
215
-                    id: Date.now() + '_1', // 唯一ID
216
-                    association: '', // 关联
217
-                    accountType: 'frontend', // 账户类型:frontend(前端)/backend(后端)
218
-                    person: '', // 分成人
219
-                    percentage: 100, // 分成比例
220
-                    belongToCompany: false // 归属公司
221
-                }
317
+
222 318
             ],
223 319
             // 关联选项列表
224
-            associationOptions: ['选项1', '选项2', '选项3'],
320
+            // associationOptions: [],
225 321
             // 分成人选项列表
226
-            personOptions: ['人员A', '人员B', '人员C'],
322
+            // personOptions: [],
227 323
             // 表单验证规则
228
-            rules: {
229
-                accountHolder: {
230
-                    type: 'string',
231
-                    required: true,
232
-                    message: '请输入编码',
233
-                    trigger: []
234
-                },
235
-                bankName: {
236
-                    type: 'string',
237
-                    required: true,
238
-                    message: '请输入快递单号',
239
-                    trigger: []
240
-                },
241
-                item: {
242
-                    type: 'string',
243
-                    required: true,
244
-                    message: '请输入收单物品',
245
-                    trigger: []
246
-                },
247
-                uploadedImage: {
248
-                    type: 'string',
249
-                    required: true,
250
-                    message: '请上传物流图片',
251
-                    trigger: []
252
-                }
253
-            }
324
+            showOrgPicker: false,
325
+            showPersonPicker: false,
326
+
327
+            columnsOrgList: [],
328
+            columnsPersonList: [],
329
+
254 330
         };
255 331
     },
332
+    mounted() {
333
+        // 获取分成人名单
334
+        this.$nextTick(() => {
335
+            this.getCommissionUserList();
336
+        })
337
+    },
338
+
256 339
     methods: {
257
-        // 选择图片
340
+        // 选择物流图片
258 341
         selectImage() {
259 342
             uni.chooseImage({
260 343
                 count: 1,
261
-                sizeType: ['original', 'compressed'],
344
+                sizeType: ['compressed'],
262 345
                 sourceType: ['album', 'camera'],
263
-                success: (res) => {
346
+                success: async (res) => {
264 347
                     const tempFilePath = res.tempFilePaths[0];
265
-                    this.warehouseInfo.uploadedImage = tempFilePath;
348
+                    //把选择的图片上传给服务器,然后获取返回路径
349
+                    const rep = await uni.$u.api.uploadFile(tempFilePath)
350
+                    if (rep.code == 200) {
351
+                        console.log('上传成功=====>', rep.data.url)
352
+                        this.warehouseInfo.uploadedImage = rep.data.url
353
+                    }
266 354
                 }
267 355
             });
268 356
         },
269 357
         // 添加分成行
270 358
         addSplit() {
271
-            // 生成唯一ID
272
-            const newId = Date.now() + '_' + (this.profitSharingList.length + 1);
273 359
             // 添加新行
274 360
             this.profitSharingList.push({
275
-                id: newId,
276
-                association: '',
277
-                accountType: 'frontend',
278
-                person: '',
361
+                deptId: '',
362
+                accountType: '1',
363
+                userId: '',
279 364
                 percentage: 0,
280
-                belongToCompany: false
365
+                isCompanyPerformance: '2',
366
+                orgName: '',
367
+                userName: '',
368
+                id: '',
281 369
             });
282 370
             // 重新计算所有行的比例
283
-            this.recalculatePercentage();
284 371
         },
285
-        // 删除分成行
286
-        deleteSplit(index) {
287
-            if (this.profitSharingList.length <= 1) {
288
-                return; // 至少保留一行
289
-            }
290
-            // 删除对应行
291
-            this.profitSharingList.splice(index, 1);
292
-            // 重新计算所有行的比例
293
-            this.recalculatePercentage();
294
-        },
295
-        // 重新计算分成比例
296
-        recalculatePercentage() {
297
-            // 分别计算前端和后端的行数
298
-            const frontendRows = this.profitSharingList.filter(item => item.accountType === 'frontend');
299
-            const backendRows = this.profitSharingList.filter(item => item.accountType === 'backend');
300
-
301
-            // 计算前端平均比例
302
-            if (frontendRows.length > 0) {
303
-                const frontendAvg = Math.floor(100 / frontendRows.length);
304
-                frontendRows.forEach(item => {
305
-                    item.percentage = frontendAvg;
306
-                });
307
-            }
308 372
 
309
-            // 计算后端平均比例
310
-            if (backendRows.length > 0) {
311
-                const backendAvg = Math.floor(100 / backendRows.length);
312
-                backendRows.forEach(item => {
313
-                    item.percentage = backendAvg;
314
-                });
315
-            }
316
-        },
373
+
317 374
         // 切换账户类型
318 375
         toggleAccountType(item) {
319
-            item.accountType = item.accountType === 'frontend' ? 'backend' : 'frontend';
376
+            item.accountType = item.accountType == '1' ? '2' : '1';
320 377
             // 重新计算分成比例
321
-            this.recalculatePercentage();
322 378
         },
323 379
         // 处理百分比输入
324 380
         handlePercentageInput(item) {
@@ -339,76 +395,156 @@ export default {
339 395
         },
340 396
         // 切换归属公司状态
341 397
         toggleBelongToCompany(item) {
342
-            item.belongToCompany = !item.belongToCompany;
398
+            item.isCompanyPerformance = item.isCompanyPerformance == '1' ? '2' : '1';
343 399
         },
400
+
344 401
         // 确认入库方法
345
-        confirmWarehouseEntry() {
346
-            // 表单校验
347
-            this.$refs.form.validate().then(() => {
348
-                // 表单验证通过后,进行分成信息的自定义验证
349
-                if (this.validateProfitSharing()) {
350
-                    console.log(this.warehouseInfo, this.profitSharingList);
351
-
352
-                    this.$emit('handleNextClick', {
353
-                        nowPage: 'formFour',
354
-                        form: {
355
-                            ...this.warehouseInfo,
356
-                            ...this.profitSharingList
357
-                        },
402
+        async confirmWarehouseEntry() {
403
+
404
+
405
+            //上传物流表单数据
406
+            this.$emit('confirmInterStore', {
407
+                warehouseInfo: this.warehouseInfo,
408
+            })
409
+
410
+            //上传分成数据
411
+            await this.addShare()
412
+
413
+            this.$refs.uToast.show({
414
+                type: "success",
415
+                message: "入库成功",
416
+                iconUrl: "https://uviewui.com/demo/toast/success.png",
417
+                complete() {
418
+                    uni.navigateTo({
419
+                        url: '/pages/pagereceivecenter/pagereceivecenter',
358 420
                     })
359
-                }
360
-            }).catch(() => {
361
-                // 表单验证失败,不执行后续操作
421
+                },
362 422
             });
423
+
424
+            //跳转接单
425
+
426
+
363 427
         },
364
-        // 分成信息校验方法
365
-        validateProfitSharing() {
366
-            // 校验分成信息
367
-            for (let i = 0; i < this.profitSharingList.length; i++) {
368
-                const item = this.profitSharingList[i];
369
-                if (!item.person.trim()) {
370
-                    uni.showToast({
371
-                        title: `第${i + 1}行请选择分成人`,
372
-                        icon: 'none'
373
-                    });
374
-                    return false;
375
-                }
376 428
 
377
-                if (item.percentage <= 0 || item.percentage > 100) {
378
-                    uni.showToast({
379
-                        title: `第${i + 1}行分成比例必须在1-100之间`,
380
-                        icon: 'none'
381
-                    });
382
-                    return false;
429
+        // 获取分成人名单
430
+        async getCommissionUserList() {
431
+            const commissionUserList = await uni.$u.api.getCustomerManagerAllList()
432
+            console.log('分成人名单', commissionUserList.data[0].children)
433
+            // this.associationOptions = commissionUserList.data[0].children
434
+            this.columnsOrgList = [commissionUserList.data[0].children]
435
+        },
436
+
437
+        //初始化分成比例
438
+        async getList() {
439
+            const { rows, total } = await uni.$u.api.selectCommissionList({
440
+                pageSize: 9999,
441
+                pageNum: 1,
442
+            }, { sendFormId: this.receiptList[0].sendFormId, });
443
+            console.log('分成比例表格数据', rows)
444
+            this.profitSharingList = rows
445
+        },
446
+
447
+
448
+
449
+
450
+
451
+
452
+
453
+        addShare() {
454
+            this.profitSharingList.forEach(async item => {
455
+                const data = {
456
+                    id: item.id || '',
457
+                    accountType: item.accountType == '1' ? 1 : 2,
458
+                    clueId: this.receiptList[0].clueId,
459
+                    commissionRate: item.commissionRate,
460
+                    isCompanyPerformance: item.isCompanyPerformance == '1' ? 1 : 2,
461
+                    sendFormId: this.receiptList[0].sendFormId,
462
+                    userId: item.userId,
463
+                    userName: item.userName,
383 464
                 }
384
-            }
465
+                if (item.id) {
466
+                    //更新
467
+                    await uni.$u.api.clueCommissionUpdate(data);
468
+                } else {
469
+                    //新增
470
+                    await uni.$u.api.clueCommissionAdd(data);
471
+                }
472
+            });
473
+        },
385 474
 
386
-            // 校验前端分成比例总和必须是100%
387
-            const frontendTotal = this.profitSharingList
388
-                .filter(item => item.accountType === 'frontend')
389
-                .reduce((sum, item) => sum + Number(item.percentage), 0);
390
-            if (frontendTotal !== 100) {
391
-                uni.showToast({
392
-                    title: '前端分成比例总和必须为100%',
393
-                    icon: 'none'
394
-                });
395
-                return false;
475
+        //删除分成ok
476
+        async deleteRow(id) {
477
+            console.log(id, 'id')
478
+            try {
479
+                await uni.$u.api.deleteClueCommissionForm(id)
480
+                uni.$u.toast('删除成功')
481
+                this.getList()
482
+            } catch (error) {
483
+                uni.$u.toast('删除失败,请稍后重试')
396 484
             }
485
+        },
397 486
 
398
-            // 校验后端分成比例总和必须是100%
399
-            const backendTotal = this.profitSharingList
400
-                .filter(item => item.accountType === 'backend')
401
-                .reduce((sum, item) => sum + Number(item.percentage), 0);
402
-            if (backendTotal !== 100) {
403
-                uni.showToast({
404
-                    title: '后端分成比例总和必须为100%',
405
-                    icon: 'none'
406
-                });
407
-                return false;
487
+        //打开选择框
488
+        handleSelectOrg(item) {
489
+            console.log(item.id, '当前选择的行的id')
490
+            this.currentEditItem = item.id
491
+            this.showOrgPicker = true
492
+        },
493
+        //选择当前的分成人
494
+        handleSelectPerson(item) {
495
+            console.log(item, '当前选择的行')
496
+            this.currentEditItem = item.id
497
+            //获取当前选择组织的分成人名单
498
+            // 获取当前行的关联id
499
+            const deptId = item.deptId
500
+            const org = this.columnsOrgList[0].find(org => org.id == deptId)
501
+            console.log(org, '当前选择的行的组织')
502
+            if (org) {
503
+                this.columnsPersonList = [org.children]
408 504
             }
505
+            // 把当前选择组织的分成人名单赋值给当前行的分成人选项列表
506
+
507
+            this.showPersonPicker = true
508
+        },
509
+
510
+        //确认选择组织
511
+        handleOrgConfirmOrg({ columnIndex, value, values },) {
512
+            console.log(value, '选择的组织')
513
+            //把值赋值给当前行
514
+            this.profitSharingList.forEach(item => {
515
+                if (item.id == this.currentEditItem) {
516
+                    item.orgName = value[0].label
517
+                    item.deptId = value[0].id
518
+                    // item.personOptions = value[0].children
519
+                    //将当前的行的分成人清空
520
+                    item.userId = ''
521
+                    item.userName = ''
522
+                }
523
+            })
409 524
 
410
-            return true;
525
+
526
+            this.showOrgPicker = false
527
+        },
528
+
529
+        //确认选择人
530
+        handleConfirmPerson({ columnIndex, value, values },) {
531
+            console.log(value, '选择的人')
532
+            //把值赋值给当前行
533
+            this.profitSharingList.forEach(item => {
534
+                if (item.id == this.currentEditItem) {
535
+                    item.userName = value[0].label
536
+                    item.userId = value[0].id
537
+                }
538
+            })
539
+            this.columnsPersonList = []
540
+            this.showPersonPicker = false
541
+        },
542
+        // 取消选择人
543
+        handleCancelPerson() {
544
+            this.columnsPersonList = []
545
+            this.showPersonPicker = false
411 546
         }
547
+
412 548
     }
413 549
 };
414 550
 </script>
@@ -726,12 +862,7 @@ export default {
726 862
     padding: 0 5rpx;
727 863
 }
728 864
 
729
-/* 调整输入框样式 */
730
-.percentage-input {
731
-    width: 80%;
732
-    height: 50rpx;
733
-    font-size: 28rpx;
734
-}
865
+
735 866
 
736 867
 /* 归属公司单选框样式 */
737 868
 .radio-wrapper {
@@ -787,4 +918,23 @@ export default {
787 918
         padding: 0 10rpx;
788 919
     }
789 920
 }
921
+
922
+.u-button {
923
+    height: 60rpx;
924
+}
925
+
926
+.delectBtn {
927
+    height: 40rpx;
928
+
929
+    .u-button {
930
+        width: 40rpx;
931
+    }
932
+
933
+
934
+
935
+}
936
+
937
+.delectBtn ::v-deep .u-button--mini {
938
+    min-width: 20rpx !important;
939
+}
790 940
 </style>

+ 17 - 2
pages/orderDetailNew/components/pageThree.vue

@@ -149,7 +149,11 @@ export default {
149 149
         orderId: {
150 150
             type: String,
151 151
             default: '',
152
-        }
152
+        },
153
+        receiptList: {
154
+            type: Array,
155
+            default: () => { },
156
+        },
153 157
     },
154 158
     watch: {
155 159
         orderDetail: {
@@ -159,12 +163,21 @@ export default {
159 163
                     this.paymentInfo.bankName = newVal.bankName || ''
160 164
                     this.paymentInfo.bankAccount = newVal.bankCardNumber || ''
161 165
                     this.paymentInfo.idNumber = newVal.idCard || ''
162
-
166
+                    this.paymentAmount = newVal.tableFee || '0.00'
163 167
                     this.getList('2', '3');
164 168
                 }
165 169
             },
166 170
             deep: true,
167 171
         },
172
+        receiptList: {
173
+            handler(newVal) {
174
+                if (newVal) {
175
+                    console.log('这里是page3的', newVal[0].tableFee)
176
+                    this.paymentAmount = newVal[0].tableFee || '0.00'
177
+                }
178
+            },
179
+            deep: true,
180
+        }
168 181
 
169 182
     },
170 183
     components: {
@@ -624,6 +637,8 @@ export default {
624 637
     font-family: Consolas, 'Courier New', monospace, -apple-system, BlinkMacSystemFont;
625 638
     width: auto;
626 639
     min-width: 150rpx;
640
+    border: none;
641
+    text-align: right !important;
627 642
 }
628 643
 
629 644
 .payment-amount .u-input__input {

+ 138 - 16
pages/orderDetailNew/components/pageTwo.vue

@@ -32,7 +32,7 @@
32 32
                             type="textarea" placeholder="请输入拍图技巧" rows="3" class="checklist-textarea" />
33 33
                         <!-- 上传图片按钮 -->
34 34
                         <view v-if="selectedCheckbox.includes('photo技巧')" class="upload-btn-container">
35
-                            <div class="upload-btn" @click="chooseImage('photoTips')">
35
+                            <div class="upload-btn" @click="handleUpload('photoTips')">
36 36
                                 <u-icon name="camera" size="32rpx" color="#108cff"></u-icon>
37 37
                                 <text class="upload-btn-text">上传图片</text>
38 38
                             </div>
@@ -40,8 +40,7 @@
40 40
                         <!-- 图片显示区域 -->
41 41
                         <view v-if="selectedCheckbox.includes('photo技巧') && photoTipsImages.length > 0"
42 42
                             class="image-list">
43
-                            <view v-for="(image, index) in photoTipsImages" :key="index" class="image-item"
44
-                                @click="previewImageHandler(image, 'photoTips')">
43
+                            <view v-for="(image, index) in photoTipsImages" :key="index" class="image-item">
45 44
                                 <image :src="image" mode="aspectFill" class="image-thumb"></image>
46 45
                             </view>
47 46
                         </view>
@@ -55,7 +54,7 @@
55 54
                             type="textarea" placeholder="请输入备注信息" rows="3" class="checklist-textarea" />
56 55
                         <!-- 上传图片按钮 -->
57 56
                         <view v-if="selectedCheckbox.includes('face2face')" class="upload-btn-container">
58
-                            <div class="upload-btn" @click="chooseImage('face2face')">
57
+                            <div class="upload-btn" @click="handleUpload('face2faceNotes')">
59 58
                                 <u-icon name="camera" size="32rpx" color="#108cff"></u-icon>
60 59
                                 <text class="upload-btn-text">上传图片</text>
61 60
                             </div>
@@ -63,8 +62,7 @@
63 62
                         <!-- 图片显示区域 -->
64 63
                         <view v-if="selectedCheckbox.includes('face2face') && face2faceImages.length > 0"
65 64
                             class="image-list">
66
-                            <view v-for="(image, index) in face2faceImages" :key="index" class="image-item"
67
-                                @click="previewImageHandler(image, 'face2face')">
65
+                            <view v-for="(image, index) in face2faceImages" :key="index" class="image-item">
68 66
                                 <image :src="image" mode="aspectFill" class="image-thumb"></image>
69 67
                             </view>
70 68
                         </view>
@@ -141,23 +139,39 @@ export default {
141 139
         orderId: {
142 140
             type: String,
143 141
             default: '',
144
-        }
142
+        },
143
+        followUpList: {
144
+            type: Array,
145
+            default: () => [],
146
+        },
147
+
145 148
     },
146 149
     watch: {
147 150
         orderDetail: {
148 151
             handler(newVal) {
149 152
                 if (newVal) {
150
-                    this.approvedPrice = newVal.itemPrice || 0;
153
+                    this.approvedPrice = Number(newVal.itemPrice) || 0;
151 154
                     this.getList('2', '3');
152 155
                 }
153 156
             },
154 157
             deep: true,
155
-        }
156
-    },
158
+        },
159
+        followUpList: {
160
+            handler(newVal) {
161
+                if (newVal) {
162
+                    this.followUpListInner = newVal.map(item => (item.content || ''));
157 163
 
164
+                    //判断内容是否含有上面的三个选择
165
+                    this.checkFollowUpContent();
166
+                }
167
+            },
168
+            deep: true,
169
+        },
170
+    },
158 171
     components: {
159 172
         picComp
160 173
     },
174
+
161 175
     data() {
162 176
         return {
163 177
             selectedCheckbox: [],
@@ -179,13 +193,11 @@ export default {
179 193
 
180 194
             detailImages: [],// 高清细节图数组
181 195
             // 绑定订单相关
182
-            bindList: [] // 待绑定的图片列表
196
+            bindList: [],// 待绑定的图片列表,
197
+            followUpListInner: [],// 跟进记录数组
183 198
         };
184 199
     },
185 200
     methods: {
186
-
187
-
188
-
189 201
         // 价格输入回调
190 202
         onPriceInput(e) {
191 203
             // 确保价格是数字且不小于0
@@ -210,7 +222,7 @@ export default {
210 222
         },
211 223
 
212 224
         // 下一步按钮点击事件
213
-        handleNextClick() {
225
+        async handleNextClick() {
214 226
             // 创建一个只包含被勾选checkbox对应数据的对象
215 227
             const result = {};
216 228
 
@@ -243,6 +255,115 @@ export default {
243 255
                 nowPage: 'formTwo',
244 256
                 form: result,
245 257
             })
258
+
259
+            // 下一步的时候要通过判断是否有联系师傅,师傅拍图技巧,到达客户面对面,如果有的话调uni.$u.api.addOrderFollow(orderFormData);接口按照    联系师傅;内容;url1,url2,url3,的格式上传
260
+            //先判断有没有联系师傅
261
+            if (this.selectedCheckbox.includes('contact师傅')) {
262
+                console.log('触发联系师傅')
263
+                // 联系师傅的手机号,已:为分割,取后面的内容
264
+                const phone = this.formData.contactPhone || '';
265
+                const data = `联系师傅;${phone}`;
266
+                // 调用接口上传
267
+                await uni.$u.api.addOrderFollow({
268
+                    orderId: this.orderId,
269
+                    content: data,
270
+                })
271
+            }
272
+            if (this.selectedCheckbox.includes('photo技巧')) {
273
+                console.log('触发师傅拍图技巧')
274
+                // 师傅拍图技巧的内容,已:为分割,取后面的内容
275
+                const photoTips = this.formData.photoTips || '';
276
+                const urls = this.photoTipsImages.join(',');
277
+
278
+                const data = `师傅拍图技巧;${photoTips};${urls}`;
279
+                console.log('urls9999999', data)
280
+
281
+                // 调用接口上传
282
+                await uni.$u.api.addOrderFollow({
283
+                    orderId: this.orderId,
284
+                    content: data,
285
+                })
286
+            }
287
+            if (this.selectedCheckbox.includes('face2face')) {
288
+                // 到达客户面对面的内容,已:为分割,取后面的内容
289
+                const face2faceNotes = this.formData.face2faceNotes || '';
290
+                const urls = this.face2faceImages.join(',');
291
+
292
+
293
+                const data = `到达客户面对面;${face2faceNotes};${urls}`;
294
+                // 调用接口上传
295
+
296
+                await uni.$u.api.addOrderFollow({
297
+                    orderId: this.orderId,
298
+                    content: data,
299
+                })
300
+            }
301
+        },
302
+        checkFollowUpContent() {
303
+            // 检查跟进记录是否包含上面的三个选择
304
+            this.followUpListInner.forEach(item => {
305
+                console.log('这里是跟进记录', item)
306
+                // 判断内容是否含有联系师傅,师傅拍图技巧,到达客户面对面,如果包含的话就上面对应的box就打上对勾
307
+                if (item.includes('联系师傅')) {
308
+                    this.selectedCheckbox.push('contact师傅');
309
+                    // 联系师傅的手机号,已:为分割,取后面的内容
310
+                    const phone = item.split(';')[1] || '';
311
+                    console.log('联系师傅的手机号111111', phone)
312
+                    this.formData.contactPhone = phone;
313
+                }
314
+                if (item.includes('师傅拍图技巧')) {
315
+                    this.selectedCheckbox.push('photo技巧');
316
+                    // 师傅拍图技巧的内容,已:为分割,取后面的内容
317
+                    const photoTips = item.split(';')[1] || '';
318
+                    this.formData.photoTips = photoTips;
319
+                    const urls = item.split(';')[2] || ''
320
+                    //把url转为数组
321
+                    const urlArray = urls.split(',').map(url => url.trim());
322
+                    this.photoTipsImages = [...this.photoTipsImages, ...urlArray];
323
+
324
+                }
325
+                if (item.includes('到达客户面对面')) {
326
+                    this.selectedCheckbox.push('face2face');
327
+                    // 到达客户面对面的内容,已:为分割,取后面的内容
328
+                    const face2faceNotes = item.split(';')[1] || '';
329
+                    this.formData.face2faceNotes = face2faceNotes;
330
+                    const urls = item.split(';')[2] || ''
331
+                    //把url转为数组
332
+                    const urlArray = urls.split(',').map(url => url.trim());
333
+                    this.face2faceImages = [...this.face2faceImages, ...urlArray];
334
+                }
335
+            })
336
+        },
337
+
338
+        // 处理上传图片,上传图片的话就赋值给对应的数组
339
+        async handleUpload(field) {
340
+            uni.chooseImage({
341
+                count: 9, // 最多选择1张
342
+                sizeType: ['compressed'], // 压缩图片
343
+                sourceType: ['album', 'camera'], // 从相册选择或拍照
344
+                success: async (res) => {
345
+                    const tempFilePath = res.tempFilePaths
346
+                    console.log('上传的图片路径:', tempFilePath)
347
+                    // 把blob数组上传到服务器,然后返回路径
348
+                    try {
349
+                        const res = await Promise.all(tempFilePath.map(filePath => uni.$u.api.uploadFile(filePath)));
350
+                        console.log('上传的图片路径数组是:', res.forEach(item => console.log(item.data.url)))
351
+                        // 把返回的路径赋值给对应的数组
352
+                        if (field == 'photoTips') {
353
+                            this.photoTipsImages = [...this.photoTipsImages, ...res.map(item => item.data.url)];
354
+                        } else if (field == 'face2faceNotes') {
355
+                            console.log('1111')
356
+                            this.face2faceImages = [...this.face2faceImages, ...res.map(item => item.data.url)];
357
+                        }
358
+                    } catch (error) {
359
+                        console.error('上传失败:', error);
360
+                        uni.$u.toast('上传失败');
361
+                    }
362
+                },
363
+                fail: (err) => {
364
+                    console.error('选择图片失败:', err)
365
+                }
366
+            })
246 367
         },
247 368
 
248 369
 
@@ -250,6 +371,7 @@ export default {
250 371
 
251 372
 
252 373
 
374
+
253 375
     }
254 376
 };
255 377
 </script>
@@ -650,7 +772,7 @@ u-checkbox {
650 772
     flex: 1;
651 773
     border-radius: 12rpx;
652 774
     font-size: 36rpx;
653
-    padding: 32rpx 0;
775
+    padding: 20rpx 0;
654 776
     min-width: 0;
655 777
     text-align: center;
656 778
     color: #ffffff;

+ 2 - 2
pages/orderDetailNew/index.vue

@@ -2,7 +2,7 @@
2 2
     <view>
3 3
         <!-- 正确使用 u-navbar 的具名插槽 -->
4 4
         <u-navbar :autoBack="true" :placeholder="true" v-hideNav>
5
-            <template v-slot:center>
5
+            <template slot="center">
6 6
                 <view class="slot-wrap">
7 7
                     <text @click="handleBrandClick" class="brand">{{ topInfo.brand }}</text>
8 8
                     <text class="divider">|</text>
@@ -11,7 +11,7 @@
11 11
                     <text @click="handlePriceClick" class="price">¥{{ topInfo.price }}</text>
12 12
                 </view>
13 13
             </template>
14
-            <template v-slot:right>
14
+            <template slot="right">
15 15
                 <view class="slot-right" @click="handleAddClick">
16 16
                     <image src="/static/icons/plus.png" mode="scaleToFill" />
17 17
                     <text>加一单</text>

+ 25 - 1
pages/orderDetailNew/mixin/imgUploadAndDownLoad.js

@@ -85,7 +85,6 @@ export default {
85 85
                 console.log('当前上传的图片类型是', p)
86 86
                 const res = await Promise.all(filePaths.map(filePath => this.uploadFile(filePath, p)));
87 87
 
88
-                // 绑定
89 88
                 this.bindOrder(p);
90 89
 
91 90
                 this.getList('2', '1');
@@ -138,5 +137,30 @@ export default {
138 137
             // 清空待绑定的图片列表
139 138
             this.bindList = [];
140 139
         },
140
+        //选择图图片》上传》返回路径,适用于page2选项里面的上传图片
141
+        getImageUrl() {
142
+            uni.chooseImage({
143
+                count: 9, // 最多选择1张
144
+                sizeType: ['compressed'], // 压缩图片
145
+                sourceType: ['album', 'camera'], // 从相册选择或拍照
146
+                success: async (res) => {
147
+                    const tempFilePath = res.tempFilePaths
148
+                    console.log('上传的图片路径:', tempFilePath)
149
+                    // 把blob数组上传到服务器,然后返回路径
150
+                    try {
151
+                        const res = await Promise.all(tempFilePath.map(filePath => uni.$u.api.uploadFile(filePath)));
152
+                        console.log('上传的图片路径数组是:', res.map(item => item.data.fileUrl))
153
+                        // 把数组返回给调用者
154
+                        return res.map(item => item.data.fileUrl)
155
+                    } catch (error) {
156
+                        console.error('上传失败:', error);
157
+                        uni.$u.toast('上传失败');
158
+                    }
159
+                },
160
+                fail: (err) => {
161
+                    console.error('选择图片失败:', err)
162
+                }
163
+            })
164
+        }
141 165
     }
142 166
 }

+ 217 - 13
pages/pagereceivecenter/pagereceivecenter.vue

@@ -1,9 +1,9 @@
1 1
 <script>
2
-import orderCard from "./compounts/orderCard.vue";
2
+// import orderCard from "./compounts/orderCard.vue";
3 3
 
4 4
 export default {
5 5
     components: {
6
-        orderCard,
6
+        // orderCard,
7 7
     },
8 8
     data() {
9 9
         return {
@@ -17,10 +17,10 @@ export default {
17 17
     },
18 18
     onLoad() {
19 19
         //初始调用
20
-        // this.getOrderList();
21
-        uni.navigateTo({
22
-            url: `/pages/orderDetailNew/index?orderId=5464&item=测试发单&type=undefined&clueId=1973381744953516033`,
23
-        })
20
+        this.getOrderList();
21
+        // uni.navigateTo({
22
+        //     url: `/pages/orderDetailNew/index?orderId=5464&item=测试发单&type=undefined&clueId=1973381744953516033`,
23
+        // })
24 24
     },
25 25
     methods: {
26 26
         //获取列表数据
@@ -82,13 +82,19 @@ export default {
82 82
                 console.log('待跟进', order)
83 83
             }
84 84
         },
85
-
85
+        // 跳转订单详情
86
+        toOrderDetail(order) {
87
+            uni.navigateTo({
88
+                url: `/pages/orderDetailNew/index?orderId=${order.id}&item=${order.item}&type=${this.type}&clueId=${order.clueId}`,
89
+            })
90
+        },
91
+        
86 92
         //滑动加载
87 93
         scrolltolower() {
88 94
             console.log('到底了');
89
-            if (this.orderList.length >= this.page.total) {
90
-                return uni.$u.toast('没有更多了');
91
-            }
95
+            // if (this.orderList.length >= this.page.total) {
96
+            //     return uni.$u.toast('没有更多了');
97
+            // }
92 98
             this.page.pageNum++;
93 99
             this.getOrderList();
94 100
         },
@@ -104,12 +110,64 @@ export default {
104 110
         <view class="scrollViewContainer">
105 111
             <scroll-view class="scrollView" scroll-y @scrolltolower="scrolltolower">
106 112
                 <transition-group name="order-move" tag="div">
107
-                    <orderCard v-for="item in orderList" :key="item.receiptId + item.id" :order="item"
113
+                    <!-- <orderCard v-for="item in orderList" :key="item.receiptId + item.id" :order="item"
108 114
                         @handleBtnClick="handleBtnClick">
109
-                    </orderCard>
115
+                    </orderCard> -->
116
+                    <view class="orderCard" v-for="item in orderList"  :key="item.receiptId + item.id" @click.stop="toOrderDetail(item)">
117
+                        <view class="bandAndPrice">
118
+                            <view class="bandName">{{ item.itemBrand || '暂无品牌' }}</view>
119
+                            <view class="price">¥{{ item.priceRange }}</view>
120
+                        </view>
121
+
122
+                        <view class="mainLind">
123
+                            <view class="mainLindImg">
124
+                                <image :src="'/static/acceptOrder/orderCardPic.jpg'" alt="" />
125
+                            </view>
126
+                            <view class="mainLindInfo">
127
+                                <view class="itemName">{{ item.item || '暂无项目' }}</view>
128
+                                <view>发单人:{{ item.createNickName || '未知' }}</view>
129
+                                <view>{{ item.sendDate || '暂无时间' }}</view>
130
+                            </view>
131
+                        </view>
132
+
133
+                        <view class="tags">
134
+                            <view class="tag" v-for="(tag, index) in item.tags" :key="index"
135
+                                :style="{ backgroundColor: tag.color, opacity: 0.8 }">
136
+                                {{ tag.name }}</view>
137
+
138
+                        </view>
139
+
140
+                        <view class="Btns">
141
+
142
+                            <view class="btnGroup"
143
+                                v-if="item && (item.status == '1' || item.status == null || item.status === undefined)">
144
+                                <view class="card-button" @click.stop="handleBtnClick('acceptOrder', item)">立即接单</view>
145
+                                <view class=" card-button isBusy" @click.stop="handleBtnClick('isBusy', item)">在忙</view>
146
+                            </view>
147
+
148
+                            <view class="btnGroup"
149
+                                v-if="item && (item.status == '2' || item.status == null || item.status === undefined)">
150
+                                <view class="card-button willFollow" @click.stop="handleBtnClick('willFollow', item)">待跟进
151
+                                </view>
152
+                                <view class="card-button isBusy" @click.stop="handleBtnClick('tag', item)">打标签</view>
153
+                            </view>
154
+
155
+                            <view class="btnGroup"
156
+                                v-if="item && (item.status == '3' || item.status == null || item.status === undefined)">
157
+                                <view class="card-button share" @click.stop="handleBtnClick('share', item)">一键分享</view>
158
+                            </view>
159
+
160
+                            <view class="btnGroup"
161
+                                v-if="item && (item.status == '4' || item.status == null || item.status === undefined)">
162
+                                <view class="card-button oneFollow" @click.stop="handleBtnClick('oneFollow', item)">待跟进
163
+                                </view>
164
+                            </view>
165
+
166
+                        </view>
167
+                    </view>
110 168
                 </transition-group>
111 169
                 <view class="hasMore">
112
-                    {{ orderList.length >= page.total ? '没有更多了~' : '向下滑动加载更多~' }}
170
+                    <!-- {{ orderList.length >= page.total ? '没有更多了~' : '向下滑动加载更多~' }} -->
113 171
                 </view>
114 172
             </scroll-view>
115 173
         </view>
@@ -152,4 +210,150 @@ export default {
152 210
 .order-move-move {
153 211
     transition: transform 0.5s ease;
154 212
 }
213
+
214
+
215
+
216
+
217
+
218
+
219
+
220
+
221
+
222
+
223
+/* 订单卡片主容器 */
224
+.orderCard {
225
+    box-sizing: border-box;
226
+    width: 95%;
227
+    background-color: #fff;
228
+    margin: 20rpx auto;
229
+    border-radius: 20rpx;
230
+    padding: 20rpx;
231
+}
232
+
233
+/* 品牌和价格区域 */
234
+.orderCard .bandAndPrice {
235
+    display: flex;
236
+    justify-content: space-between;
237
+    align-items: center;
238
+}
239
+
240
+/* 品牌名称 */
241
+.orderCard .bandAndPrice .bandName {
242
+    font-size: 20rpx;
243
+    font-weight: 700;
244
+    border: 2px solid #2563EB;
245
+    padding: 6rpx 12rpx;
246
+    border-radius: 15rpx;
247
+    background-color: #EFF6FF;
248
+    color: #2563EB;
249
+}
250
+
251
+/* 价格 */
252
+.orderCard .bandAndPrice .price {
253
+    font-size: 30rpx;
254
+    font-weight: 700;
255
+}
256
+
257
+/* 主要内容行 */
258
+.orderCard .mainLind {
259
+    margin-top: 10rpx;
260
+    display: flex;
261
+    justify-content: space-between;
262
+    align-items: center;
263
+    gap: 20rpx;
264
+}
265
+
266
+/* 主要内容行图片容器 */
267
+.orderCard .mainLind .mainLindImg image {
268
+    width: 150rpx;
269
+    height: 150rpx;
270
+    border-radius: 20rpx;
271
+}
272
+
273
+/* 主要内容行信息容器 */
274
+.orderCard .mainLind .mainLindInfo {
275
+    flex: 1;
276
+    display: flex;
277
+    flex-direction: column;
278
+    gap: 10rpx;
279
+    font-size: 24rpx;
280
+    color: #6b7280;
281
+}
282
+
283
+/* 商品名称 */
284
+.orderCard .mainLind .mainLindInfo .itemName {
285
+    font-size: 30rpx;
286
+    font-weight: 700;
287
+    color: #374751;
288
+}
289
+
290
+/* 标签区域 */
291
+.orderCard .tags {
292
+    display: flex;
293
+    gap: 10rpx;
294
+}
295
+
296
+/* 单个标签 */
297
+.orderCard .tags .tag {
298
+    font-size: 20rpx;
299
+    font-weight: 700;
300
+    padding: 6rpx 12rpx;
301
+    border-radius: 15rpx;
302
+    background-color: #EFF6FF;
303
+    color: #fff;
304
+}
305
+
306
+/* 按钮区域 */
307
+.orderCard .Btns {
308
+    margin-top: 10rpx;
309
+}
310
+
311
+/* 按钮组 */
312
+.orderCard .Btns .btnGroup {
313
+    display: flex;
314
+    justify-content: space-between;
315
+    align-items: center;
316
+    gap: 20rpx;
317
+}
318
+
319
+/* 卡片按钮基础样式 */
320
+.orderCard .Btns .btnGroup .card-button {
321
+    font-size: 24rpx;
322
+    font-weight: 700;
323
+    border: 2rpx solid #2563EB;
324
+    padding: 6rpx 12rpx;
325
+    border-radius: 15rpx;
326
+    background-color: #2563EB;
327
+    color: #fff;
328
+    width: 45%;
329
+    text-align: center;
330
+    cursor: pointer;
331
+    height: 60rpx;
332
+    line-height: 60rpx;
333
+}
334
+
335
+/* 忙碌状态按钮 */
336
+.orderCard .Btns .btnGroup .card-button.isBusy {
337
+    background-color: #fff;
338
+    color: #6B7280;
339
+    border-color: #6B7280;
340
+}
341
+
342
+/* 待跟进状态按钮 */
343
+.orderCard .Btns .btnGroup .card-button.willFollow {
344
+    background-color: #EFF6FF;
345
+    color: #2563EB;
346
+}
347
+
348
+/* 分享按钮 */
349
+.orderCard .Btns .btnGroup .card-button.share {
350
+    width: 100%;
351
+}
352
+
353
+/* 单独跟进按钮 */
354
+.orderCard .Btns .btnGroup .card-button.oneFollow {
355
+    width: 100%;
356
+    background-color: #EFF6FF;
357
+    color: #2563EB;
358
+}
155 359
 </style>

+ 106 - 101
utils/api.js

@@ -7,110 +7,110 @@ import config from '../uni_modules/uview-ui/libs/config/config.js';
7 7
 
8 8
 const install = (Vue, vm) => {
9 9
 	vm.$u.api = {
10
-		login : (params = {})=> http.post('/auth/login', params),  // 登录
11
-		getInfo : (params = {})=> http.get('/system/user/getInfo',{params}), // 获取用户数据
12
-		sysMessageReceive : (params = {})=>http.get('/message/sysMessageReceive/list?' + qs.stringify(params)), // 消息接受列表
13
-		getAppMessageList : (params = {})=>http.get('/message/sysMessageReceive/getAppMessageList?' + qs.stringify(params)), // 消息列表接口
14
-		getDicts : (dictType)=>http.get('/system/dict/data/type/' + dictType), // 获取字典
15
-		getPhoneFileterResult : (data = {})=>http.post('/collect/all/casePhoneFilter/getPhoneFileterResult',data), // 滤号
16
-		listDetpUser : (data = {})=>http.post('/system/user/getDeptCustomer',data), // 查询部门人员列表
17
-		getDeptCustomerByOrg : (data = {})=>http.post('/system/user/getDeptCustomerByOrg',data,{ params : data }), // 查询部门人员列表
18
-		getDeptOwner : (data = {})=>http.post('/system/user/getDeptOwner',data), // 查询部门人员列表
19
-		listByOrgDataScope : (params = {})=>http.get('/system/user/listByOrgDataScope',{params}), // 查询部门人员列表
20
-		logout : ()=>http.delete("/auth/logout?systemCode=system_debt"), // 退出登录
21
-		getUserProfile : (params = {})=>http.get('/system/user/profile?' + qs.stringify(params)), // 查询用户个人信息
22
-		uploadAvatar : (url)=> http.upload('/system/user/profile/avatar',{filePath: url,name : "avatarfile",timeout: 1000 * 60 * 10,custom : { loadingText : "上传中" }}),
23
-		updateUserProfile : (data = {})=>http.put("/system/user/profile",data), // 更新个人信息
24
-		getCofDeptBank : (params = {})=>http.get("/system/cofDeptBank/getCofDeptBank",params), // 查询机构配置
25
-		getOutEquipmentByMacAddr : (mac,config)=>http.get("system/caseOutEquipment/" + mac,config), // 根据mac地址获取外访设备状态可能为空
26
-		addCaseOutEquipment : (data = {})=>http.post("system/caseOutEquipment",data), // 申请mac地址授权
27
-		checkOutEquipment : (params = {},config)=>http.get("/system/caseOutEquipment/checkOutEquipment",{params,...config}), // 检测外访设备是否有申请通过记录
28
-		concatRecord : (files,params = {})=>http.upload('/fileVisit/concatRecord',{files, params , name: 'files', timeout: 1000 * 60 * 10, custom : { loadingText : "上传中" }}), // 合并录音并上传
29
-		uploadFile : (url,params = {})=> http.upload('/file/aliossUpload',{filePath: url,params ,name : "file",timeout: 1000 * 60 * 10,custom : { loadingText : "上传中" }}), // 上传文件
30
-		watermarkUpload : (url,params = {})=> http.upload('/fileVisit/watermarkUpload',{filePath: url, params, name : "file",timeout: 1000 * 60 * 10,custom : { loadingText : "上传中" }}), // 上传文件
31
-		getOutPolyline : (params = {})=>http.get("/system/caseOutPolyline/getOutPolyline",{ params , custom : { loading: false } }), // 请求外访轨迹列表
32
-		addOutPolyline : (data = {})=>http.post("/system/caseOutPolyline/addOutPolyline",data,{ custom : { loading: false } }), // 添加外访轨迹
33
-		updateUserPwd : (params = {})=>http.put("/system/user/profile/updatePwd?" + qs.stringify(params)), // 更新用户密码
34
-		getSysVersion : (params = {},config = {})=>http.get("/system/sysVersion/getSysVersion",{params,...config, timeout: 2000}), // 版本更新
35
-		getBankDebtRule : (params = {},config = {})=>http.get('/system/bankInfo/getBankDebtRule',{params,...config}), // 获取委托方催收规则
36
-		getBankContent : (params = {},config = {})=>http.get('/system/bankInfo/getBankContent',{params,...config}), // 催收状态 
37
-		getCofCallOutBindByUserId : (params = {},config = {})=>http.get('/system/cofCallOutBind/getCofCallOutBindByUserId',{params,...config}), // 获取分机号
38
-		getCofShortcuts : (params = {},config = {})=>http.get('/system/cofShortcuts/list',{params,...config}), // 获取键盘速填
39
-		getCofInfo : (params,config = {})=>http.get('/system/user/getCofInfo',{params,...config}), // 获取权限
40
-		extensionNumberState : (params,config = {})=>http.get("http://8.134.50.217:10085/cc/extensionNumberState",{params , custom : { loading: false }}), // 获取来电关联案件
41
-		getSm4En : (str,config = {})=>http.get(store.state.user.path + '/caseMainInfo/getSm4En',{ params : {str} , custom : { loading: false }}), // sm4加密
42
-		setAPPLoginLimit : (params,config = {})=>http.get('/system/user/setAPPLoginLimit',{ params , custom : { loading: false }}), // 设置设备码访问失败次数
43
-		getAPPLoginLimit : (params,config = {})=>http.get('/system/user/getAPPLoginLimit',{ params , custom : { loading: false } , timeout: 1000 }), // 获取设备码访问失败次数
44
-		getExtensionStatus : (params,config = {})=>http.get('/sip/JcSip/getExtensionStatus',{ params , custom : { loading: false }}), // 获取分机的状态
45
-		setEffectiveCallerIdNumber : (params,config = {})=>http.get('/sip/JcSip/setEffectiveCallerIdNumber',{ params , custom : { loading: false }}), // 固话设置号码
46
-		getExtensionByUserId : (params,config = {})=>http.get('/sip/exten/getExtensionByUserId',{ params , custom : { loading: false }}), // 通过用户id获取分机
47
-		getLineByIds : (params,config = {})=>http.get('/sip/line/getLineByIds',{ params , custom : { loading: false }}), // 根据线路获取线路
48
-		getCodeImg : (params,config = {})=>http.get('/code',{ params , custom : { loading: false },timeout: 1500}), // 获取验证码(主要用于判断配置是否正确)
49
-		getAppSystemList : (params = {},config = {})=>http.get('/system/sysVersion/getAppSystemList',{ params , custom : { loading: false },timeout: 1500}), // 获取app的系统列表
50
-		changeOnlineStatus : (data,config = {})=>http.put('/system/user/changeStatus',data), // 用户状态修改
51
-		statisticsCaseState : (data,config = {})=>http.post(store.state.user.path + '/clueFixedFields/statisticsCaseState',data), // 统计线索阶段
52
-		statisticsAddClueCount : (data,config = {})=>http.post(store.state.user.path + '/clueMainInfo/statisticsAddClueCount',data), // 统计添加阶段
53
-		getClueMainInfoList : (params = {},data = {})=> http.post(store.state.user.path + '/clueMainInfo/getClueMainInfoList?' + qs.stringify(params),data), // 线索列表
54
-		getUserByUserIds : (params)=>http.get('/system/user/getUserByUserIds',{params}), //
55
-		getClueTagGroupVoList : (params = {})=>http.get(store.state.user.path + "/clueTagGroup/getClueTagGroupVoList",{ params }), // 获取线索标签;
56
-		getClueMainInfoVoById : (params = {},config = {})=>http.get(store.state.user.path + "/clueMainInfo/getClueMainInfoVoById",{ params , custom : { loading: false },timeout: 1500}), // 获取线索详情;
57
-		updateClueFixedFieldsClueState:(data,config = {})=>http.post(store.state.user.path + '/clueFixedFields/updateClueFixedFieldsClueState',data),
58
-		updateClueFixedFieldsAllTags:(data,config = {})=>http.post(store.state.user.path + '/clueFixedFields/updateClueFixedFieldsAllTags',data),
59
-		getClueMainInfoById:(params = {},config = {})=>http.get(store.state.user.path + '/clueMainInfo/getClueMainInfoById',{params,...config}),
60
-		getClueAdInfoByClueId:(params = {},config = {})=>http.get(store.state.user.path + '/clueAdInfo/getClueAdInfoByClueId',{params,...config}),
61
-		getClueFollowList:(params = {},config = {})=>http.get(store.state.user.path + '/clueFollow/getClueFollowList',{params,...config}),
62
-		deleteClueFollow:(data,config = {})=>http.post(store.state.user.path + '/clueFollow/deleteClueFollow',data),
63
-		updateClueFixedFieldsClueOwner:(data,config={})=>http.post(store.state.user.path + '/clueFixedFields/updateClueFixedFieldsClueOwner',data),
64
-		addClueFollow:(data,config={})=>http.post(store.state.user.path + '/clueFollow/addClueFollow',data),
65
-		getDictCascadeData:(params,config={})=>http.get(store.state.user.path + '/dictCascadeData/list',{params,...config}),
66
-		selectAllDeptList:(params,config={})=>http.get('/system/dept/selectAllDeptList',{ params,...config }),
67
-		getIdByName:(params,config={})=>http.get(store.state.user.path + "/clueMainInfo/getIdByName",{ params,...config }),
68
-		addClueMainInfo : (data,config = {})=>http.post(store.state.user.path + '/clueMainInfo/addClueMainInfo',data),
69
-		saveLog:(data,config={})=>http.post("/system/access/saveLog",data,{ custom : { loading: false } }),
70
-		saveClueFile:(data,config={})=>http.post(store.state.user.path + '/clueFile/saveClueFile',data),
71
-		updateClueMainInfo:(data,config={})=>http.post(store.state.user.path + '/clueMainInfo/updateClueMainInfo',data),
72
-		selectPromotionStats:(data,config={})=>http.post(store.state.user.path + '/promotionStats/selectPromotionStats',data),
73
-		firstLogin : (data)=> http.post('/system/user/firstLogin',data),
74
-		shiYuWxLoginGetInfo : (params)=> http.get('/auth/shiYuWxLoginGetInfo',{params, custom : { noAuth: true }}),
75
-		deleteClueFile : (data)=> http.delete(store.state.user.path + '/clueFile/deleteClueFile',data),
76
-		getCallClueFileByClueId : (params)=> http.get(store.state.user.path + '/clueFile/getCallClueFileByClueId',{params, custom : { noAuth: true }}),
77
-		getClueSendFormCountByClueId : (params = {},config = {})=>http.get(store.state.user.path + '/clueSendForm/getClueSendFormCountByClueId',{ params }),
10
+		login: (params = {}) => http.post('/auth/login', params),  // 登录
11
+		getInfo: (params = {}) => http.get('/system/user/getInfo', { params }), // 获取用户数据
12
+		sysMessageReceive: (params = {}) => http.get('/message/sysMessageReceive/list?' + qs.stringify(params)), // 消息接受列表
13
+		getAppMessageList: (params = {}) => http.get('/message/sysMessageReceive/getAppMessageList?' + qs.stringify(params)), // 消息列表接口
14
+		getDicts: (dictType) => http.get('/system/dict/data/type/' + dictType), // 获取字典
15
+		getPhoneFileterResult: (data = {}) => http.post('/collect/all/casePhoneFilter/getPhoneFileterResult', data), // 滤号
16
+		listDetpUser: (data = {}) => http.post('/system/user/getDeptCustomer', data), // 查询部门人员列表
17
+		getDeptCustomerByOrg: (data = {}) => http.post('/system/user/getDeptCustomerByOrg', data, { params: data }), // 查询部门人员列表
18
+		getDeptOwner: (data = {}) => http.post('/system/user/getDeptOwner', data), // 查询部门人员列表
19
+		listByOrgDataScope: (params = {}) => http.get('/system/user/listByOrgDataScope', { params }), // 查询部门人员列表
20
+		logout: () => http.delete("/auth/logout?systemCode=system_debt"), // 退出登录
21
+		getUserProfile: (params = {}) => http.get('/system/user/profile?' + qs.stringify(params)), // 查询用户个人信息
22
+		uploadAvatar: (url) => http.upload('/system/user/profile/avatar', { filePath: url, name: "avatarfile", timeout: 1000 * 60 * 10, custom: { loadingText: "上传中" } }),
23
+		updateUserProfile: (data = {}) => http.put("/system/user/profile", data), // 更新个人信息
24
+		getCofDeptBank: (params = {}) => http.get("/system/cofDeptBank/getCofDeptBank", params), // 查询机构配置
25
+		getOutEquipmentByMacAddr: (mac, config) => http.get("system/caseOutEquipment/" + mac, config), // 根据mac地址获取外访设备状态可能为空
26
+		addCaseOutEquipment: (data = {}) => http.post("system/caseOutEquipment", data), // 申请mac地址授权
27
+		checkOutEquipment: (params = {}, config) => http.get("/system/caseOutEquipment/checkOutEquipment", { params, ...config }), // 检测外访设备是否有申请通过记录
28
+		concatRecord: (files, params = {}) => http.upload('/fileVisit/concatRecord', { files, params, name: 'files', timeout: 1000 * 60 * 10, custom: { loadingText: "上传中" } }), // 合并录音并上传
29
+		uploadFile: (url, params = {}) => http.upload('/file/aliossUpload', { filePath: url, params, name: "file", timeout: 1000 * 60 * 10, custom: { loadingText: "上传中" } }), // 上传文件
30
+		watermarkUpload: (url, params = {}) => http.upload('/fileVisit/watermarkUpload', { filePath: url, params, name: "file", timeout: 1000 * 60 * 10, custom: { loadingText: "上传中" } }), // 上传文件
31
+		getOutPolyline: (params = {}) => http.get("/system/caseOutPolyline/getOutPolyline", { params, custom: { loading: false } }), // 请求外访轨迹列表
32
+		addOutPolyline: (data = {}) => http.post("/system/caseOutPolyline/addOutPolyline", data, { custom: { loading: false } }), // 添加外访轨迹
33
+		updateUserPwd: (params = {}) => http.put("/system/user/profile/updatePwd?" + qs.stringify(params)), // 更新用户密码
34
+		getSysVersion: (params = {}, config = {}) => http.get("/system/sysVersion/getSysVersion", { params, ...config, timeout: 2000 }), // 版本更新
35
+		getBankDebtRule: (params = {}, config = {}) => http.get('/system/bankInfo/getBankDebtRule', { params, ...config }), // 获取委托方催收规则
36
+		getBankContent: (params = {}, config = {}) => http.get('/system/bankInfo/getBankContent', { params, ...config }), // 催收状态 
37
+		getCofCallOutBindByUserId: (params = {}, config = {}) => http.get('/system/cofCallOutBind/getCofCallOutBindByUserId', { params, ...config }), // 获取分机号
38
+		getCofShortcuts: (params = {}, config = {}) => http.get('/system/cofShortcuts/list', { params, ...config }), // 获取键盘速填
39
+		getCofInfo: (params, config = {}) => http.get('/system/user/getCofInfo', { params, ...config }), // 获取权限
40
+		extensionNumberState: (params, config = {}) => http.get("http://8.134.50.217:10085/cc/extensionNumberState", { params, custom: { loading: false } }), // 获取来电关联案件
41
+		getSm4En: (str, config = {}) => http.get(store.state.user.path + '/caseMainInfo/getSm4En', { params: { str }, custom: { loading: false } }), // sm4加密
42
+		setAPPLoginLimit: (params, config = {}) => http.get('/system/user/setAPPLoginLimit', { params, custom: { loading: false } }), // 设置设备码访问失败次数
43
+		getAPPLoginLimit: (params, config = {}) => http.get('/system/user/getAPPLoginLimit', { params, custom: { loading: false }, timeout: 1000 }), // 获取设备码访问失败次数
44
+		getExtensionStatus: (params, config = {}) => http.get('/sip/JcSip/getExtensionStatus', { params, custom: { loading: false } }), // 获取分机的状态
45
+		setEffectiveCallerIdNumber: (params, config = {}) => http.get('/sip/JcSip/setEffectiveCallerIdNumber', { params, custom: { loading: false } }), // 固话设置号码
46
+		getExtensionByUserId: (params, config = {}) => http.get('/sip/exten/getExtensionByUserId', { params, custom: { loading: false } }), // 通过用户id获取分机
47
+		getLineByIds: (params, config = {}) => http.get('/sip/line/getLineByIds', { params, custom: { loading: false } }), // 根据线路获取线路
48
+		getCodeImg: (params, config = {}) => http.get('/code', { params, custom: { loading: false }, timeout: 1500 }), // 获取验证码(主要用于判断配置是否正确)
49
+		getAppSystemList: (params = {}, config = {}) => http.get('/system/sysVersion/getAppSystemList', { params, custom: { loading: false }, timeout: 1500 }), // 获取app的系统列表
50
+		changeOnlineStatus: (data, config = {}) => http.put('/system/user/changeStatus', data), // 用户状态修改
51
+		statisticsCaseState: (data, config = {}) => http.post(store.state.user.path + '/clueFixedFields/statisticsCaseState', data), // 统计线索阶段
52
+		statisticsAddClueCount: (data, config = {}) => http.post(store.state.user.path + '/clueMainInfo/statisticsAddClueCount', data), // 统计添加阶段
53
+		getClueMainInfoList: (params = {}, data = {}) => http.post(store.state.user.path + '/clueMainInfo/getClueMainInfoList?' + qs.stringify(params), data), // 线索列表
54
+		getUserByUserIds: (params) => http.get('/system/user/getUserByUserIds', { params }), //
55
+		getClueTagGroupVoList: (params = {}) => http.get(store.state.user.path + "/clueTagGroup/getClueTagGroupVoList", { params }), // 获取线索标签;
56
+		getClueMainInfoVoById: (params = {}, config = {}) => http.get(store.state.user.path + "/clueMainInfo/getClueMainInfoVoById", { params, custom: { loading: false }, timeout: 1500 }), // 获取线索详情;
57
+		updateClueFixedFieldsClueState: (data, config = {}) => http.post(store.state.user.path + '/clueFixedFields/updateClueFixedFieldsClueState', data),
58
+		updateClueFixedFieldsAllTags: (data, config = {}) => http.post(store.state.user.path + '/clueFixedFields/updateClueFixedFieldsAllTags', data),
59
+		getClueMainInfoById: (params = {}, config = {}) => http.get(store.state.user.path + '/clueMainInfo/getClueMainInfoById', { params, ...config }),
60
+		getClueAdInfoByClueId: (params = {}, config = {}) => http.get(store.state.user.path + '/clueAdInfo/getClueAdInfoByClueId', { params, ...config }),
61
+		getClueFollowList: (params = {}, config = {}) => http.get(store.state.user.path + '/clueFollow/getClueFollowList', { params, ...config }),
62
+		deleteClueFollow: (data, config = {}) => http.post(store.state.user.path + '/clueFollow/deleteClueFollow', data),
63
+		updateClueFixedFieldsClueOwner: (data, config = {}) => http.post(store.state.user.path + '/clueFixedFields/updateClueFixedFieldsClueOwner', data),
64
+		addClueFollow: (data, config = {}) => http.post(store.state.user.path + '/clueFollow/addClueFollow', data),
65
+		getDictCascadeData: (params, config = {}) => http.get(store.state.user.path + '/dictCascadeData/list', { params, ...config }),
66
+		selectAllDeptList: (params, config = {}) => http.get('/system/dept/selectAllDeptList', { params, ...config }),
67
+		getIdByName: (params, config = {}) => http.get(store.state.user.path + "/clueMainInfo/getIdByName", { params, ...config }),
68
+		addClueMainInfo: (data, config = {}) => http.post(store.state.user.path + '/clueMainInfo/addClueMainInfo', data),
69
+		saveLog: (data, config = {}) => http.post("/system/access/saveLog", data, { custom: { loading: false } }),
70
+		saveClueFile: (data, config = {}) => http.post(store.state.user.path + '/clueFile/saveClueFile', data),
71
+		updateClueMainInfo: (data, config = {}) => http.post(store.state.user.path + '/clueMainInfo/updateClueMainInfo', data),
72
+		selectPromotionStats: (data, config = {}) => http.post(store.state.user.path + '/promotionStats/selectPromotionStats', data),
73
+		firstLogin: (data) => http.post('/system/user/firstLogin', data),
74
+		shiYuWxLoginGetInfo: (params) => http.get('/auth/shiYuWxLoginGetInfo', { params, custom: { noAuth: true } }),
75
+		deleteClueFile: (data) => http.delete(store.state.user.path + '/clueFile/deleteClueFile', data),
76
+		getCallClueFileByClueId: (params) => http.get(store.state.user.path + '/clueFile/getCallClueFileByClueId', { params, custom: { noAuth: true } }),
77
+		getClueSendFormCountByClueId: (params = {}, config = {}) => http.get(store.state.user.path + '/clueSendForm/getClueSendFormCountByClueId', { params }),
78 78
 		// 订单相关接口
79
-		selectClueOrderFormList:(params={},data={})=>http.post(store.state.user.path + '/clueSendForm/list?' + qs.stringify(params),data),
80
-		oderForm:(data={})=>http.post(store.state.user.path + '/clueSendForm/oderForm',data),
81
-		updateTags:(data={})=>http.post(store.state.user.path + '/clueSendForm/updateTags',data),
82
-		addOrderFollow:(data={})=>http.post(store.state.user.path + '/orderFollow/addOrderFollow',data),
83
-		getOrderFollowListByOrderId:(params={})=>http.get(store.state.user.path + '/orderFollow/getOrderFollowListByOrderId',{params}),
84
-		deleteOrder:(data={})=>http.post(store.state.user.path + '/clueSendForm/deleteOrder',data),
85
-		updateOrderState:(data={})=>http.post(store.state.user.path + '/clueSendForm/updateOrderState',data),
86
-		updateClueOrderForm:(data={})=>http.post(store.state.user.path + '/clueSendForm/updateClueOrderForm',data),
87
-		
88
-		getOrderFollowListByClueId:(params = {},config = {})=>http.get(store.state.user.path + '/orderFollow/getOrderFollowListByClueId',{ params }),
89
-		getDuplicateOrderFollowListByClueId:(params = {},config = {})=>http.get(store.state.user.path + '/orderFollow/getDuplicateOrderFollowListByClueId',{ params }),
90
-		deleteOrderFollow:(data,config={})=>http.post(store.state.user.path + '/orderFollow/deleteOrderFollow',data),
91
-		getOrderFollowList:(params = {},config = {})=>http.get(store.state.user.path + '/orderFollow/getOrderFollowList',{ params }),
92
-		
93
-		selectCommissionList:(params={},data={})=>http.post(store.state.user.path + '/clueCommissionForm/list?' + qs.stringify(params),data),
94
-		getClueSendFormVoByOrderId:(params = {},config = {})=>http.get(store.state.user.path + '/clueSendForm/getClueSendFormVoByOrderId',{ params }),
79
+		selectClueOrderFormList: (params = {}, data = {}) => http.post(store.state.user.path + '/clueSendForm/list?' + qs.stringify(params), data),
80
+		oderForm: (data = {}) => http.post(store.state.user.path + '/clueSendForm/oderForm', data),
81
+		updateTags: (data = {}) => http.post(store.state.user.path + '/clueSendForm/updateTags', data),
82
+		addOrderFollow: (data = {}) => http.post(store.state.user.path + '/orderFollow/addOrderFollow', data),
83
+		getOrderFollowListByOrderId: (params = {}) => http.get(store.state.user.path + '/orderFollow/getOrderFollowListByOrderId', { params }),
84
+		deleteOrder: (data = {}) => http.post(store.state.user.path + '/clueSendForm/deleteOrder', data),
85
+		updateOrderState: (data = {}) => http.post(store.state.user.path + '/clueSendForm/updateOrderState', data),
86
+		updateClueOrderForm: (data = {}) => http.post(store.state.user.path + '/clueSendForm/updateClueOrderForm', data),
87
+
88
+		getOrderFollowListByClueId: (params = {}, config = {}) => http.get(store.state.user.path + '/orderFollow/getOrderFollowListByClueId', { params }),
89
+		getDuplicateOrderFollowListByClueId: (params = {}, config = {}) => http.get(store.state.user.path + '/orderFollow/getDuplicateOrderFollowListByClueId', { params }),
90
+		deleteOrderFollow: (data, config = {}) => http.post(store.state.user.path + '/orderFollow/deleteOrderFollow', data),
91
+		getOrderFollowList: (params = {}, config = {}) => http.get(store.state.user.path + '/orderFollow/getOrderFollowList', { params }),
92
+
93
+		selectCommissionList: (params = {}, data = {}) => http.post(store.state.user.path + '/clueCommissionForm/list?' + qs.stringify(params), data),
94
+		getClueSendFormVoByOrderId: (params = {}, config = {}) => http.get(store.state.user.path + '/clueSendForm/getClueSendFormVoByOrderId', { params }),
95 95
 		// 跟进记录相关接口
96
-		getDuplicateClueFollowByClueId:(params,config={})=>http.get(store.state.user.path + '/clueFollow/getDuplicateClueFollowByClueId',{params,...config}),
96
+		getDuplicateClueFollowByClueId: (params, config = {}) => http.get(store.state.user.path + '/clueFollow/getDuplicateClueFollowByClueId', { params, ...config }),
97 97
 		// 文件相关接口
98
-		selectClueFileByDto:(data,config={})=>http.post(store.state.user.path + '/clueFile/selectClueFileByDto',data,config),
99
-		updateClueFile:(data,config={})=>http.put(store.state.user.path + '/clueFile/updateClueFile',data),
100
-		addReceiptForm:(data,config={})=>http.post(store.state.user.path + '/clueReceiptForm',data),
101
-		updateReceiptForm:(data,config={})=>http.put(store.state.user.path + '/clueReceiptForm',data),
102
-		listReceiptFormByOrderId:(orderFormId,config={})=>http.get(store.state.user.path + '/clueReceiptForm/listByOrderId/' + orderFormId),
103
-		getReceiptForm:(id,config={})=>http.get(store.state.user.path + '/clueReceiptForm/' + id),
104
-		delReceiptForm:(id,config={})=>http.delete(store.state.user.path + '/clueReceiptForm/' + id),
105
-		saveClueOrderForm:(data={})=>http.post(store.state.user.path + '/clueSendForm/saveClueOrderForm',data),
106
-		clueReceiptFormListByOrderId:(orderId,config={})=>http.get(store.state.user.path + '/clueReceiptForm/listByOrderId/' + orderId),
107
-		clueCommissionAdd: (data={})=>http.post(store.state.user.path + '/clueCommissionForm',data),
108
-		clueCommissionUpdate: (data={})=>http.put(store.state.user.path + '/clueCommissionForm',data),
109
-		clueCommissionById: (id,config={})=>http.get(store.state.user.path + '/clueCommissionForm/' + id),
110
-		clueCommissionRemove: (ids,config={})=>http.post(store.state.user.path + '/clueCommissionForm/remove',ids),
111
-		getCustomerManagerAllList: ()=>http.post('/system/user/getCustomerManagerAllList'),
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), // 统计线索阶段
98
+		selectClueFileByDto: (data, config = {}) => http.post(store.state.user.path + '/clueFile/selectClueFileByDto', data, config),
99
+		updateClueFile: (data, config = {}) => http.put(store.state.user.path + '/clueFile/updateClueFile', data),
100
+		addReceiptForm: (data, config = {}) => http.post(store.state.user.path + '/clueReceiptForm', data),
101
+		updateReceiptForm: (data, config = {}) => http.put(store.state.user.path + '/clueReceiptForm', data),
102
+		listReceiptFormByOrderId: (orderFormId, config = {}) => http.get(store.state.user.path + '/clueReceiptForm/listByOrderId/' + orderFormId),
103
+		getReceiptForm: (id, config = {}) => http.get(store.state.user.path + '/clueReceiptForm/' + id),
104
+		delReceiptForm: (id, config = {}) => http.delete(store.state.user.path + '/clueReceiptForm/' + id),
105
+		saveClueOrderForm: (data = {}) => http.post(store.state.user.path + '/clueSendForm/saveClueOrderForm', data),
106
+		clueReceiptFormListByOrderId: (orderId, config = {}) => http.get(store.state.user.path + '/clueReceiptForm/listByOrderId/' + orderId),
107
+		clueCommissionAdd: (data = {}) => http.post(store.state.user.path + '/clueCommissionForm', data),
108
+		clueCommissionUpdate: (data = {}) => http.put(store.state.user.path + '/clueCommissionForm', data),
109
+		clueCommissionById: (id, config = {}) => http.get(store.state.user.path + '/clueCommissionForm/' + id),
110
+		clueCommissionRemove: (ids, config = {}) => http.post(store.state.user.path + '/clueCommissionForm/remove', ids),
111
+		getCustomerManagerAllList: () => http.post('/system/user/getCustomerManagerAllList'),
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), // 统计线索阶段
114 114
 
115 115
 		// 支付相关接口
116 116
 		saveOrderFileAndTransfer:(data={})=>http.post(store.state.user.path + '/storeInfo/saveOrderFileAndTransfer',data),
@@ -123,6 +123,11 @@ const install = (Vue, vm) => {
123 123
 		getPersonLatestClue:()=>http.get('http://192.168.0.243:3001/mock-api/prod-api/crm/getPersonLatestClue'),
124 124
 		getPersonRanking:()=>http.get('http://192.168.0.243:3001/mock-api/prod-api/crm/getPersonRanking'),
125 125
 		getWareHouseCard:()=>http.get('http://192.168.0.243:3001/mock-api/prod-api/crm/getWareHouseCard'),
126
+		saveOrderFileAndTransfer: (data = {}) => http.post(store.state.user.path + '/storeInfo/saveOrderFileAndTransfer', data),
127
+
128
+		// 删除订单分成数据
129
+		deleteClueCommissionForm: (id, config = {}) => http.delete(store.state.user.path + '/clueCommissionForm/' + id),
130
+
126 131
 	}
127 132
 }
128 133