|
@@ -35,6 +35,10 @@ |
|
@@ -35,6 +35,10 @@ |
35
|
<el-button slot="trigger" type="primary">Excel文件</el-button>
|
35
|
<el-button slot="trigger" type="primary">Excel文件</el-button>
|
36
|
</el-upload>
|
36
|
</el-upload>
|
37
|
</el-col>
|
37
|
</el-col>
|
|
|
38
|
+
|
|
|
39
|
+ <el-col style="margin-left: 30px" :span="2">
|
|
|
40
|
+ <el-button type="success" icon="el-icon-s-opportunity" @click="batchFile">AI批量</el-button>
|
|
|
41
|
+ </el-col>
|
38
|
</el-row>
|
42
|
</el-row>
|
39
|
<!-- 发货人信息-->
|
43
|
<!-- 发货人信息-->
|
40
|
<el-row>
|
44
|
<el-row>
|
|
@@ -2089,6 +2093,47 @@ Handling Information |
|
@@ -2089,6 +2093,47 @@ Handling Information |
2089
|
v-on:consigerrow="consigerSelect"
|
2093
|
v-on:consigerrow="consigerSelect"
|
2090
|
></Consigner>
|
2094
|
></Consigner>
|
2091
|
</el-dialog>
|
2095
|
</el-dialog>
|
|
|
2096
|
+ <el-drawer
|
|
|
2097
|
+ title="批量处理"
|
|
|
2098
|
+ :visible.sync="drawer"
|
|
|
2099
|
+ direction="rtl">
|
|
|
2100
|
+ <!-- 进度提示 -->
|
|
|
2101
|
+ <div v-if="uploadProgress.total > 0">
|
|
|
2102
|
+ <el-progress
|
|
|
2103
|
+ :percentage="uploadProgress.percent"
|
|
|
2104
|
+ :status="uploadProgress.percent === 100 ? 'success' : 'exception'"
|
|
|
2105
|
+ striped
|
|
|
2106
|
+ />
|
|
|
2107
|
+ <div class="progress-text">
|
|
|
2108
|
+ {{ uploadProgress.currentFile }}
|
|
|
2109
|
+ ({{ uploadProgress.processed }}/{{ uploadProgress.total }})
|
|
|
2110
|
+ </div>
|
|
|
2111
|
+ </div>
|
|
|
2112
|
+ <div style="height: 100%; padding: 20px;">
|
|
|
2113
|
+ <!-- 通过 text-align 实现水平居中 -->
|
|
|
2114
|
+ <el-row :gutter="10" style="text-align: center;">
|
|
|
2115
|
+ <el-col :span="24">
|
|
|
2116
|
+ <el-upload
|
|
|
2117
|
+ action=""
|
|
|
2118
|
+ multiple
|
|
|
2119
|
+ drag
|
|
|
2120
|
+ style="display: inline-block;"
|
|
|
2121
|
+ :file-list="uploadFileList"
|
|
|
2122
|
+ :on-change="batchFileUpload"
|
|
|
2123
|
+ :auto-upload="false"
|
|
|
2124
|
+ :show-file-list="false">
|
|
|
2125
|
+ <el-button slot="trigger" type="primary">Excel文件</el-button>
|
|
|
2126
|
+ </el-upload>
|
|
|
2127
|
+ </el-col>
|
|
|
2128
|
+ </el-row>
|
|
|
2129
|
+ <!-- 下方其他内容保持原布局 -->
|
|
|
2130
|
+ <el-row style="margin-top: 20px;">
|
|
|
2131
|
+ <el-col :span="24">
|
|
|
2132
|
+ <todo-list :uploadFileList="batchFileListResult" />
|
|
|
2133
|
+ </el-col>
|
|
|
2134
|
+ </el-row>
|
|
|
2135
|
+ </div>
|
|
|
2136
|
+ </el-drawer>
|
2092
|
<!-- 列表区域 获取收货人-->
|
2137
|
<!-- 列表区域 获取收货人-->
|
2093
|
<el-dialog :visible.sync="dialogVisible1" width="70%">
|
2138
|
<el-dialog :visible.sync="dialogVisible1" width="70%">
|
2094
|
<Consignee
|
2139
|
<Consignee
|
|
@@ -2112,8 +2157,10 @@ Handling Information |
|
@@ -2112,8 +2157,10 @@ Handling Information |
2112
|
import Consignee from "../consigner/consignee"
|
2157
|
import Consignee from "../consigner/consignee"
|
2113
|
import {loginedUserInfo} from "../../api/user";
|
2158
|
import {loginedUserInfo} from "../../api/user";
|
2114
|
import {getList} from "../../api/consigner/consigner";
|
2159
|
import {getList} from "../../api/consigner/consigner";
|
|
|
2160
|
+ import {getInfo} from "@/api/dify/SHP_CNE_info_API";
|
2115
|
import jsutil from "@/common/js/util";
|
2161
|
import jsutil from "@/common/js/util";
|
2116
|
import XLSX from 'xlsx';
|
2162
|
import XLSX from 'xlsx';
|
|
|
2163
|
+ import TodoList from "@/views/nav3/components/TodoList.vue";
|
2117
|
function cleanString(str, maxLength = 20) {
|
2164
|
function cleanString(str, maxLength = 20) {
|
2118
|
return str.replace(/[^a-zA-Z0-9\s]/g, '').slice(0, maxLength);
|
2165
|
return str.replace(/[^a-zA-Z0-9\s]/g, '').slice(0, maxLength);
|
2119
|
}
|
2166
|
}
|
|
@@ -2166,10 +2213,14 @@ Handling Information |
|
@@ -2166,10 +2213,14 @@ Handling Information |
2166
|
|
2213
|
|
2167
|
export default {
|
2214
|
export default {
|
2168
|
components: {
|
2215
|
components: {
|
|
|
2216
|
+ TodoList,
|
2169
|
Consigner,Consignee
|
2217
|
Consigner,Consignee
|
2170
|
},
|
2218
|
},
|
2171
|
data(){
|
2219
|
data(){
|
2172
|
return {
|
2220
|
return {
|
|
|
2221
|
+ drawer: false,
|
|
|
2222
|
+ uploadFileList: [],
|
|
|
2223
|
+ batchFileListResult:[],
|
2173
|
hidden: ['a1', 'a2', 'a3', 'a4', 'a5','a6'],
|
2224
|
hidden: ['a1', 'a2', 'a3', 'a4', 'a5','a6'],
|
2174
|
// 主单
|
2225
|
// 主单
|
2175
|
activeName: 'first',
|
2226
|
activeName: 'first',
|
|
@@ -2484,9 +2535,18 @@ Handling Information |
|
@@ -2484,9 +2535,18 @@ Handling Information |
2484
|
fileContent: null,
|
2535
|
fileContent: null,
|
2485
|
currentDate:new Date(),
|
2536
|
currentDate:new Date(),
|
2486
|
dialogVisible2:false,
|
2537
|
dialogVisible2:false,
|
|
|
2538
|
+ uploadProgress: {
|
|
|
2539
|
+ total: 0, // 总文件数
|
|
|
2540
|
+ processed: 0, // 已处理文件数
|
|
|
2541
|
+ percent: 0, // 进度百分比
|
|
|
2542
|
+ currentFile: '' // 当前处理的文件名
|
|
|
2543
|
+ },
|
2487
|
}
|
2544
|
}
|
2488
|
},
|
2545
|
},
|
2489
|
methods:{
|
2546
|
methods:{
|
|
|
2547
|
+ batchFile(){
|
|
|
2548
|
+ this.drawer = true;
|
|
|
2549
|
+ },
|
2490
|
handlePaste(event, maxLength) {
|
2550
|
handlePaste(event, maxLength) {
|
2491
|
// 阻止默认的粘贴行为
|
2551
|
// 阻止默认的粘贴行为
|
2492
|
event.preventDefault();
|
2552
|
event.preventDefault();
|
|
@@ -2792,8 +2852,8 @@ Handling Information |
|
@@ -2792,8 +2852,8 @@ Handling Information |
2792
|
|
2852
|
|
2793
|
})
|
2853
|
})
|
2794
|
},
|
2854
|
},
|
2795
|
- //新增主运单
|
|
|
2796
|
- addFwb() {
|
2855
|
+ //新增FWB主运单的属性设置方法
|
|
|
2856
|
+ addFwbWithSet(){
|
2797
|
this.form.rtd.rtd_gross_weight=this.form.bill.quantity_weight;
|
2857
|
this.form.rtd.rtd_gross_weight=this.form.bill.quantity_weight;
|
2798
|
this.form.rtd.rtd_number_pieces=this.form.bill.quantity_picecs;
|
2858
|
this.form.rtd.rtd_number_pieces=this.form.bill.quantity_picecs;
|
2799
|
this.form.rtd.rtd_volume=this.form.bill.quantity_volume;
|
2859
|
this.form.rtd.rtd_volume=this.form.bill.quantity_volume;
|
|
@@ -2811,6 +2871,10 @@ Handling Information |
|
@@ -2811,6 +2871,10 @@ Handling Information |
2811
|
this.form.oci.push(this.cne_oci);
|
2871
|
this.form.oci.push(this.cne_oci);
|
2812
|
this.form.cne.cne_contacts.push(this.cne_contact);
|
2872
|
this.form.cne.cne_contacts.push(this.cne_contact);
|
2813
|
this.form.nfy.nfy_contacts.push(this.nfy_contact);
|
2873
|
this.form.nfy.nfy_contacts.push(this.nfy_contact);
|
|
|
2874
|
+ },
|
|
|
2875
|
+ //新增主运单
|
|
|
2876
|
+ addFwb() {
|
|
|
2877
|
+ this.addFwbWithSet();
|
2814
|
/*进行表单的预验证*/
|
2878
|
/*进行表单的预验证*/
|
2815
|
this.$refs.apply_formRef.validate(valid => {
|
2879
|
this.$refs.apply_formRef.validate(valid => {
|
2816
|
// 未通过,表单预校验
|
2880
|
// 未通过,表单预校验
|
|
@@ -2820,10 +2884,10 @@ Handling Information |
|
@@ -2820,10 +2884,10 @@ Handling Information |
2820
|
//添加调度记录信息,失败
|
2884
|
//添加调度记录信息,失败
|
2821
|
if (res.code !== '200'){
|
2885
|
if (res.code !== '200'){
|
2822
|
return this.$message.error(res.msg);
|
2886
|
return this.$message.error(res.msg);
|
2823
|
- }
|
2887
|
+ }else {
|
2824
|
this.$message.success(res.msg);
|
2888
|
this.$message.success(res.msg);
|
|
|
2889
|
+ }
|
2825
|
Object.assign(this.$data, this.$options.data());
|
2890
|
Object.assign(this.$data, this.$options.data());
|
2826
|
-
|
|
|
2827
|
}).catch(error => {
|
2891
|
}).catch(error => {
|
2828
|
this.form.oci=[];
|
2892
|
this.form.oci=[];
|
2829
|
this.$message.error(error.toString());
|
2893
|
this.$message.error(error.toString());
|
|
@@ -2944,11 +3008,22 @@ Handling Information |
|
@@ -2944,11 +3008,22 @@ Handling Information |
2944
|
//批量尺寸信息识别
|
3008
|
//批量尺寸信息识别
|
2945
|
convertAndCalculateVolume() {
|
3009
|
convertAndCalculateVolume() {
|
2946
|
let _this= this;
|
3010
|
let _this= this;
|
2947
|
- this.$confirm('是否需要根据录入的尺寸信息生成详细的尺寸计算数据表,此操作会往表里面添加新的尺寸数据', '提示', {
|
3011
|
+ return this.$confirm('是否需要根据录入的尺寸信息生成详细的尺寸计算数据表,此操作会往表里面添加新的尺寸数据', '提示', {
|
2948
|
confirmButtonText: '确定',
|
3012
|
confirmButtonText: '确定',
|
2949
|
cancelButtonText: '取消',
|
3013
|
cancelButtonText: '取消',
|
2950
|
type: 'warning'
|
3014
|
type: 'warning'
|
2951
|
}).then(() => {
|
3015
|
}).then(() => {
|
|
|
3016
|
+ _this.convertAndCalculateVolumeTool();
|
|
|
3017
|
+ }).catch((e) => {
|
|
|
3018
|
+ this.$message({
|
|
|
3019
|
+ type: 'error',
|
|
|
3020
|
+ message: '已取消'+e
|
|
|
3021
|
+ });
|
|
|
3022
|
+ });
|
|
|
3023
|
+ },
|
|
|
3024
|
+ // 尺寸识别方法
|
|
|
3025
|
+ convertAndCalculateVolumeTool(){
|
|
|
3026
|
+ let _this= this;
|
2952
|
let text = this.dimension_textarea.trim().replaceAll("*","x");
|
3027
|
let text = this.dimension_textarea.trim().replaceAll("*","x");
|
2953
|
text = text.replaceAll("CM","");
|
3028
|
text = text.replaceAll("CM","");
|
2954
|
text = text.replaceAll("cm","");
|
3029
|
text = text.replaceAll("cm","");
|
|
@@ -3006,7 +3081,7 @@ Handling Information |
|
@@ -3006,7 +3081,7 @@ Handling Information |
3006
|
type: 'error',
|
3081
|
type: 'error',
|
3007
|
message: '行:'+ line +'尺寸格式错误! 录入信息支持 数字和Xx*- '
|
3082
|
message: '行:'+ line +'尺寸格式错误! 录入信息支持 数字和Xx*- '
|
3008
|
});
|
3083
|
});
|
3009
|
- return ;
|
3084
|
+ throw new Error('行:'+ line +'尺寸格式错误! 录入信息支持 数字和Xx*- ');
|
3010
|
}
|
3085
|
}
|
3011
|
}
|
3086
|
}
|
3012
|
if (totalVolume>0){
|
3087
|
if (totalVolume>0){
|
|
@@ -3017,12 +3092,6 @@ Handling Information |
|
@@ -3017,12 +3092,6 @@ Handling Information |
3017
|
converted: output.trim(),
|
3092
|
converted: output.trim(),
|
3018
|
totalVolume: totalVolume
|
3093
|
totalVolume: totalVolume
|
3019
|
};
|
3094
|
};
|
3020
|
- }).catch((e) => {
|
|
|
3021
|
- this.$message({
|
|
|
3022
|
- type: 'error',
|
|
|
3023
|
- message: '已取消'+e.message
|
|
|
3024
|
- });
|
|
|
3025
|
- });
|
|
|
3026
|
},
|
3095
|
},
|
3027
|
cancleBtn(){
|
3096
|
cancleBtn(){
|
3028
|
Object.assign(this.$data, this.$options.data());
|
3097
|
Object.assign(this.$data, this.$options.data());
|
|
@@ -3079,20 +3148,12 @@ Handling Information |
|
@@ -3079,20 +3148,12 @@ Handling Information |
3079
|
const AF38 = (worksheet['AF38'] && worksheet['AF38'].v) || '';
|
3148
|
const AF38 = (worksheet['AF38'] && worksheet['AF38'].v) || '';
|
3080
|
//判定acc 中是否包含COU 特殊操作代码
|
3149
|
//判定acc 中是否包含COU 特殊操作代码
|
3081
|
const S10 = (worksheet['S10'] && worksheet['S10'].v) || '';
|
3150
|
const S10 = (worksheet['S10'] && worksheet['S10'].v) || '';
|
3082
|
-
|
|
|
3083
|
if (S10.includes("COU")){
|
3151
|
if (S10.includes("COU")){
|
3084
|
this.sphCodes += "COU"
|
3152
|
this.sphCodes += "COU"
|
3085
|
}
|
3153
|
}
|
3086
|
|
3154
|
|
3087
|
-
|
|
|
3088
|
- if(I18.includes("/")){
|
|
|
3089
|
- const inFlightInfo = I18.split('/');
|
|
|
3090
|
- const outFlightInfo = M18.split('/');
|
|
|
3091
|
- const inFlightNumber = inFlightInfo[0];
|
|
|
3092
|
- const inFlightDate = inFlightInfo.length > 1 ? inFlightInfo[1].split(' ')[0] : '';
|
|
|
3093
|
- const outFlightNumber = outFlightInfo[0];
|
|
|
3094
|
- const outFlightDate = outFlightInfo.length > 1 ? outFlightInfo[1].split(' ')[0] : '';
|
|
|
3095
|
-
|
3155
|
+ const tempDate=this.NumberToDate(M18);
|
|
|
3156
|
+ const outFlightDate=tempDate.split('/')[2];
|
3096
|
const SSRInfo = A20.replace(/[^a-zA-Z0-9\s]/g, '');
|
3157
|
const SSRInfo = A20.replace(/[^a-zA-Z0-9\s]/g, '');
|
3097
|
//const signatureDate = parseCustomDate(O38);
|
3158
|
//const signatureDate = parseCustomDate(O38);
|
3098
|
const formattedAF23 = formatAF23(AF23);
|
3159
|
const formattedAF23 = formatAF23(AF23);
|
|
@@ -3104,16 +3165,15 @@ Handling Information |
|
@@ -3104,16 +3165,15 @@ Handling Information |
3104
|
K16: K16,
|
3165
|
K16: K16,
|
3105
|
L16: L16,
|
3166
|
L16: L16,
|
3106
|
S16: S16,
|
3167
|
S16: S16,
|
3107
|
- inFlightNumber: inFlightNumber,
|
|
|
3108
|
- inFlightDate: inFlightDate,
|
|
|
3109
|
- outFlightNumber: outFlightNumber,
|
|
|
3110
|
- outFlightDate: outFlightDate,
|
3168
|
+ //outFlightDate: outFlightDate,
|
|
|
3169
|
+ I18:I18,
|
3111
|
SSRInfo: SSRInfo,
|
3170
|
SSRInfo: SSRInfo,
|
3112
|
A22: A22,
|
3171
|
A22: A22,
|
3113
|
C22: C22,
|
3172
|
C22: C22,
|
3114
|
K22: K22,
|
3173
|
K22: K22,
|
3115
|
P22: P22,
|
3174
|
P22: P22,
|
3116
|
U22: U22,
|
3175
|
U22: U22,
|
|
|
3176
|
+ M18: outFlightDate,
|
3117
|
AF22: cleanString(AF22),
|
3177
|
AF22: cleanString(AF22),
|
3118
|
AF23: formattedAF23,
|
3178
|
AF23: formattedAF23,
|
3119
|
O34: cleanString(O34),
|
3179
|
O34: cleanString(O34),
|
|
@@ -3121,42 +3181,169 @@ Handling Information |
|
@@ -3121,42 +3181,169 @@ Handling Information |
3121
|
X38: X38,
|
3181
|
X38: X38,
|
3122
|
AF38: cleanString(AF38),
|
3182
|
AF38: cleanString(AF38),
|
3123
|
};
|
3183
|
};
|
|
|
3184
|
+
|
3124
|
this.form.bill.waybillNum=this.fileContent.AF1;
|
3185
|
this.form.bill.waybillNum=this.fileContent.AF1;
|
3125
|
this.form.cvd.cvd_currency_code=this.fileContent.S16;
|
3186
|
this.form.cvd.cvd_currency_code=this.fileContent.S16;
|
3126
|
this.form.rtg.destinationAirport=this.fileContent.A16;
|
3187
|
this.form.rtg.destinationAirport=this.fileContent.A16;
|
3127
|
this.form.rtg.destinationCarrier=this.fileContent.C16;
|
3188
|
this.form.rtg.destinationCarrier=this.fileContent.C16;
|
3128
|
this.form.rtg.onwardAirport=this.fileContent.K16;
|
3189
|
this.form.rtg.onwardAirport=this.fileContent.K16;
|
3129
|
this.form.rtg.onwardCarrier=this.fileContent.L16;
|
3190
|
this.form.rtg.onwardCarrier=this.fileContent.L16;
|
3130
|
- this.form.flt.cariier=this.fileContent.inFlightNumber.substring(0,2);
|
|
|
3131
|
- this.form.flt.day=this.fileContent.inFlightDate.substring(0,2);
|
|
|
3132
|
- this.form.flt.flightNumber=this.fileContent.inFlightNumber.substring(2);
|
|
|
3133
|
- this.form.flt.cariier2=this.fileContent.outFlightNumber.substring(0,2);
|
|
|
3134
|
- this.form.flt.day2=this.fileContent.outFlightDate.substring(0,2);
|
|
|
3135
|
- this.form.flt.flightNumber2=this.fileContent.outFlightNumber.substring(2);
|
3191
|
+ this.form.flt.cariier=this.fileContent.I18.substring(0,2);
|
|
|
3192
|
+ this.form.flt.day=this.fileContent.M18;
|
|
|
3193
|
+ this.form.flt.flightNumber=this.fileContent.I18.substring(2);
|
3136
|
this.ssr_content=this.fileContent.SSRInfo;
|
3194
|
this.ssr_content=this.fileContent.SSRInfo;
|
3137
|
this.form.bill.quantity_picecs=this.fileContent.A22;
|
3195
|
this.form.bill.quantity_picecs=this.fileContent.A22;
|
3138
|
this.form.bill.quantity_weight=parseFloat(this.fileContent.C22).toFixed(2);
|
3196
|
this.form.bill.quantity_weight=parseFloat(this.fileContent.C22).toFixed(2);
|
3139
|
this.form.rtd.rtd_charge_weight=parseFloat(this.fileContent.K22).toFixed(2);
|
3197
|
this.form.rtd.rtd_charge_weight=parseFloat(this.fileContent.K22).toFixed(2);
|
3140
|
- this.form.rtd.rtd_rate_charge=this.fileContent.P22;
|
|
|
3141
|
- this.form.rtd.rtd_total=parseFloat(this.fileContent.U22).toFixed(2);
|
|
|
3142
|
- this.form.ppd.ppd_weight_amount=parseFloat(this.fileContent.U22).toFixed(2);
|
|
|
3143
|
- this.form.ppd.ppd_charge_summary_total=parseFloat(this.fileContent.U22).toFixed(2);
|
3198
|
+ this.form.rtd.rtd_rate_charge='';
|
3144
|
this.form.rtd.rtd_goods_DES=this.fileContent.AF22;
|
3199
|
this.form.rtd.rtd_goods_DES=this.fileContent.AF22;
|
3145
|
this.form.cer.cer_signature=this.fileContent.O34;
|
3200
|
this.form.cer.cer_signature=this.fileContent.O34;
|
3146
|
this.form.isu.isu_signature=this.fileContent.AF38;
|
3201
|
this.form.isu.isu_signature=this.fileContent.AF38;
|
3147
|
this.dimension_textarea=this.fileContent.AF23;
|
3202
|
this.dimension_textarea=this.fileContent.AF23;
|
3148
|
- //this.convertAndCalculateVolume();
|
|
|
3149
|
|
3203
|
|
3150
|
this.form.isu.isu_day_mounth_year=this.formattedDate();
|
3204
|
this.form.isu.isu_day_mounth_year=this.formattedDate();
|
3151
|
- }else{
|
|
|
3152
|
- console.log(M18)
|
3205
|
+
|
|
|
3206
|
+ //尺寸处理
|
|
|
3207
|
+ this.convertAndCalculateVolumeTool();
|
|
|
3208
|
+
|
|
|
3209
|
+
|
|
|
3210
|
+ //发货人信息
|
|
|
3211
|
+ const A3_ShipInfo = (worksheet['A3'] && worksheet['A3'].v) || '';
|
|
|
3212
|
+ //收货人信息
|
|
|
3213
|
+ const A7_CNEInfo = (worksheet['A7'] && worksheet['A7'].v) || '';
|
|
|
3214
|
+ //收发货人处理
|
|
|
3215
|
+ const dify_para_ship = {
|
|
|
3216
|
+ "inputs": {
|
|
|
3217
|
+ "logisticsInformation": A3_ShipInfo
|
|
|
3218
|
+ },
|
|
|
3219
|
+ "response_mode": "blocking",
|
|
|
3220
|
+ "user": "C6"
|
|
|
3221
|
+ }
|
|
|
3222
|
+ const dify_api_token = 'app-1jFyrO64582meeymRG219FdK'
|
|
|
3223
|
+ return getInfo(dify_para_ship, dify_api_token)
|
|
|
3224
|
+ .then(response => {
|
|
|
3225
|
+ let response_data = response.data;
|
|
|
3226
|
+ let CompletionResponse = response_data.data;
|
|
|
3227
|
+ // 获取dify 执行状态结果
|
|
|
3228
|
+ let excute_result = CompletionResponse.status;
|
|
|
3229
|
+
|
|
|
3230
|
+ if ("succeeded" === excute_result) {
|
|
|
3231
|
+ // 获取返回信息
|
|
|
3232
|
+ let result = CompletionResponse.outputs.text;
|
|
|
3233
|
+ // 返回的json字符串转换成JSON对象,todo:后续对收发货人内容进行字符串过滤,或者在dify后端过滤
|
|
|
3234
|
+ let shipOrCneInfo = JSON.parse(result);
|
|
|
3235
|
+ this.form.shp.shp_adr = shipOrCneInfo.address;
|
|
|
3236
|
+ this.form.shp.shp_name = shipOrCneInfo.name;
|
|
|
3237
|
+ this.form.shp.shp_country = shipOrCneInfo.country;
|
|
|
3238
|
+ this.form.shp.shp_loc_place = shipOrCneInfo.city;
|
|
|
3239
|
+ this.shp_contact.contact_number = shipOrCneInfo.phoneNum;
|
|
|
3240
|
+ this.shp_oci.oci_csrc_info = shipOrCneInfo.enterpriseRegistrationCode;
|
|
|
3241
|
+
|
|
|
3242
|
+ // 构建下一个请求参数
|
|
|
3243
|
+ const dify_para_cne = {
|
|
|
3244
|
+ "inputs": {
|
|
|
3245
|
+ "logisticsInformation": A7_CNEInfo
|
|
|
3246
|
+ },
|
|
|
3247
|
+ "response_mode": "blocking",
|
|
|
3248
|
+ "user": "C6"
|
|
|
3249
|
+ };
|
|
|
3250
|
+
|
|
|
3251
|
+ // 返回下一个 API 调用的 Promise
|
|
|
3252
|
+ return getInfo(dify_para_cne, dify_api_token);
|
|
|
3253
|
+ } else {
|
|
|
3254
|
+ throw new Error("人工智能助手执行错误");
|
|
|
3255
|
+ }
|
|
|
3256
|
+ })
|
|
|
3257
|
+ .then(response => {
|
|
|
3258
|
+ let response_data = response.data;
|
|
|
3259
|
+ let CompletionResponse = response_data.data;
|
|
|
3260
|
+ // 获取dify 执行状态结果
|
|
|
3261
|
+ let excute_result = CompletionResponse.status;
|
|
|
3262
|
+
|
|
|
3263
|
+ if ("succeeded" === excute_result) {
|
|
|
3264
|
+ // 获取返回信息
|
|
|
3265
|
+ let result = CompletionResponse.outputs.text;
|
|
|
3266
|
+ // 返回的json字符串转换成JSON对象,todo:后续对收发货人内容进行字符串过滤,或者在dify后端过滤
|
|
|
3267
|
+ let cneInfo = JSON.parse(result);
|
|
|
3268
|
+ this.form.cne.cne_adr = cneInfo.address;
|
|
|
3269
|
+ this.form.cne.cne_name = cneInfo.name;
|
|
|
3270
|
+ this.form.cne.cne_country = cneInfo.country;
|
|
|
3271
|
+ this.form.cne.cne_loc_place = cneInfo.city;
|
|
|
3272
|
+ this.cne_contact.contact_number = cneInfo.phoneNum;
|
|
|
3273
|
+ this.cne_oci.oci_csrc_info = cneInfo.enterpriseRegistrationCode;
|
|
|
3274
|
+ } else {
|
|
|
3275
|
+ throw new Error("人工智能助手执行错误");
|
|
|
3276
|
+ }
|
|
|
3277
|
+
|
|
|
3278
|
+ //返回下个promise
|
|
|
3279
|
+ return new Promise((resolve, reject) => {
|
|
|
3280
|
+ resolve({success:true,code:'200'});
|
|
|
3281
|
+ });
|
|
|
3282
|
+ })
|
|
|
3283
|
+ .then(response=>{
|
|
|
3284
|
+ alert('执行提交'+JSON.stringify(response))
|
|
|
3285
|
+ //导入后提交
|
|
|
3286
|
+ // this.addFwb();
|
|
|
3287
|
+ return {success:true,code:'200'};
|
|
|
3288
|
+ })
|
|
|
3289
|
+ .catch(e => {
|
|
|
3290
|
+ this.$message({
|
|
|
3291
|
+ type: 'error',
|
|
|
3292
|
+ message: e.message
|
|
|
3293
|
+ });
|
|
|
3294
|
+ return {success:false,code:'400'};
|
|
|
3295
|
+ });
|
|
|
3296
|
+
|
|
|
3297
|
+ } else {
|
|
|
3298
|
+ this.fileContent = { AF1: '工作表不存在' };
|
|
|
3299
|
+ }
|
|
|
3300
|
+ };
|
|
|
3301
|
+ reader.readAsArrayBuffer(files);
|
|
|
3302
|
+ },
|
|
|
3303
|
+ // 异步处理
|
|
|
3304
|
+ fileBatchHandle(file){
|
|
|
3305
|
+ return new Promise((resolve, reject) => {
|
|
|
3306
|
+ const files = file.raw;
|
|
|
3307
|
+ const reader = new FileReader();
|
|
|
3308
|
+ reader.onload = (e) => {
|
|
|
3309
|
+ try {
|
|
|
3310
|
+ const data = new Uint8Array(e.target.result);
|
|
|
3311
|
+ const workbook = XLSX.read(data, { type: 'array' });
|
|
|
3312
|
+ const worksheetName = '格式化打印'; // 指定工作表名称
|
|
|
3313
|
+ const worksheet = workbook.Sheets[worksheetName];
|
|
|
3314
|
+ if (worksheet) {
|
|
|
3315
|
+ const AF1 = (worksheet['AF1'] && worksheet['AF1'].v) || '';
|
|
|
3316
|
+ const A16 = (worksheet['A16'] && worksheet['A16'].v) || '';
|
|
|
3317
|
+ const C16 = (worksheet['C16'] && worksheet['C16'].v) || '';
|
|
|
3318
|
+ const K16 = (worksheet['K16'] && worksheet['K16'].v) || '';
|
|
|
3319
|
+ const L16 = (worksheet['L16'] && worksheet['L16'].v) || '';
|
|
|
3320
|
+ const S16 = (worksheet['S16'] && worksheet['S16'].v) || '';
|
|
|
3321
|
+ const I18 = (worksheet['I18'] && worksheet['I18'].v) || '';
|
|
|
3322
|
+ const M18 = (worksheet['M18'] && worksheet['M18'].v) || '';
|
|
|
3323
|
+ const A20 = (worksheet['A20'] && worksheet['A20'].v) || '';
|
|
|
3324
|
+ const A22 = (worksheet['A22'] && worksheet['A22'].v) || '';
|
|
|
3325
|
+ const C22 = (worksheet['C22'] && worksheet['C22'].v) || '';
|
|
|
3326
|
+ const K22 = (worksheet['K22'] && worksheet['K22'].v) || '';
|
|
|
3327
|
+ const P22 = (worksheet['P22'] && worksheet['P22'].v) || '';
|
|
|
3328
|
+ const U22 = (worksheet['U22'] && worksheet['U22'].v) || '';
|
|
|
3329
|
+ const AF22 = (worksheet['AF22'] && worksheet['AF22'].v) || '';
|
|
|
3330
|
+ const AF23 = (worksheet['AF23'] && worksheet['AF23'].v) || '';
|
|
|
3331
|
+ const O34 = (worksheet['O34'] && worksheet['O34'].v) || '';
|
|
|
3332
|
+ //const O38 = (worksheet['O38'] && worksheet['O38'].v) || '';
|
|
|
3333
|
+ const X38 = (worksheet['X38'] && worksheet['X38'].v) || '';
|
|
|
3334
|
+ const AF38 = (worksheet['AF38'] && worksheet['AF38'].v) || '';
|
|
|
3335
|
+ //判定acc 中是否包含COU 特殊操作代码
|
|
|
3336
|
+ const S10 = (worksheet['S10'] && worksheet['S10'].v) || '';
|
|
|
3337
|
+ if (S10.includes("COU")){
|
|
|
3338
|
+ this.sphCodes += "COU"
|
|
|
3339
|
+ }
|
|
|
3340
|
+
|
3153
|
const tempDate=this.NumberToDate(M18);
|
3341
|
const tempDate=this.NumberToDate(M18);
|
3154
|
const outFlightDate=tempDate.split('/')[2];
|
3342
|
const outFlightDate=tempDate.split('/')[2];
|
3155
|
const SSRInfo = A20.replace(/[^a-zA-Z0-9\s]/g, '');
|
3343
|
const SSRInfo = A20.replace(/[^a-zA-Z0-9\s]/g, '');
|
3156
|
//const signatureDate = parseCustomDate(O38);
|
3344
|
//const signatureDate = parseCustomDate(O38);
|
3157
|
const formattedAF23 = formatAF23(AF23);
|
3345
|
const formattedAF23 = formatAF23(AF23);
|
3158
|
|
3346
|
|
3159
|
-
|
|
|
3160
|
this.fileContent = {
|
3347
|
this.fileContent = {
|
3161
|
AF1: AF1,
|
3348
|
AF1: AF1,
|
3162
|
A16: A16,
|
3349
|
A16: A16,
|
|
@@ -3180,7 +3367,7 @@ Handling Information |
|
@@ -3180,7 +3367,7 @@ Handling Information |
3180
|
X38: X38,
|
3367
|
X38: X38,
|
3181
|
AF38: cleanString(AF38),
|
3368
|
AF38: cleanString(AF38),
|
3182
|
};
|
3369
|
};
|
3183
|
- //this.convertAndCalculateVolume();
|
3370
|
+
|
3184
|
this.form.bill.waybillNum=this.fileContent.AF1;
|
3371
|
this.form.bill.waybillNum=this.fileContent.AF1;
|
3185
|
this.form.cvd.cvd_currency_code=this.fileContent.S16;
|
3372
|
this.form.cvd.cvd_currency_code=this.fileContent.S16;
|
3186
|
this.form.rtg.destinationAirport=this.fileContent.A16;
|
3373
|
this.form.rtg.destinationAirport=this.fileContent.A16;
|
|
@@ -3201,14 +3388,172 @@ Handling Information |
|
@@ -3201,14 +3388,172 @@ Handling Information |
3201
|
this.dimension_textarea=this.fileContent.AF23;
|
3388
|
this.dimension_textarea=this.fileContent.AF23;
|
3202
|
|
3389
|
|
3203
|
this.form.isu.isu_day_mounth_year=this.formattedDate();
|
3390
|
this.form.isu.isu_day_mounth_year=this.formattedDate();
|
|
|
3391
|
+
|
|
|
3392
|
+ //尺寸处理
|
|
|
3393
|
+ this.convertAndCalculateVolumeTool();
|
|
|
3394
|
+
|
|
|
3395
|
+
|
|
|
3396
|
+ //发货人信息
|
|
|
3397
|
+ const A3_ShipInfo = (worksheet['A3'] && worksheet['A3'].v) || '';
|
|
|
3398
|
+ //收货人信息
|
|
|
3399
|
+ const A7_CNEInfo = (worksheet['A7'] && worksheet['A7'].v) || '';
|
|
|
3400
|
+ //收发货人处理
|
|
|
3401
|
+ const dify_para_ship = {
|
|
|
3402
|
+ "inputs": {
|
|
|
3403
|
+ "logisticsInformation": A3_ShipInfo
|
|
|
3404
|
+ },
|
|
|
3405
|
+ "response_mode": "blocking",
|
|
|
3406
|
+ "user": "C6"
|
|
|
3407
|
+ }
|
|
|
3408
|
+ const dify_api_token = 'app-1jFyrO64582meeymRG219FdK'
|
|
|
3409
|
+ getInfo(dify_para_ship, dify_api_token)
|
|
|
3410
|
+ .then(response => {
|
|
|
3411
|
+ let response_data = response.data;
|
|
|
3412
|
+ let CompletionResponse = response_data.data;
|
|
|
3413
|
+ // 获取dify 执行状态结果
|
|
|
3414
|
+ let excute_result = CompletionResponse.status;
|
|
|
3415
|
+
|
|
|
3416
|
+ if ("succeeded" === excute_result) {
|
|
|
3417
|
+ // 获取返回信息
|
|
|
3418
|
+ let result = CompletionResponse.outputs.text;
|
|
|
3419
|
+ // 返回的json字符串转换成JSON对象,todo:后续对收发货人内容进行字符串过滤,或者在dify后端过滤
|
|
|
3420
|
+ let shipOrCneInfo = JSON.parse(result);
|
|
|
3421
|
+ this.form.shp.shp_adr = shipOrCneInfo.address;
|
|
|
3422
|
+ this.form.shp.shp_name = shipOrCneInfo.name;
|
|
|
3423
|
+ this.form.shp.shp_country = shipOrCneInfo.country;
|
|
|
3424
|
+ this.form.shp.shp_loc_place = shipOrCneInfo.city;
|
|
|
3425
|
+ this.shp_contact.contact_number = shipOrCneInfo.phoneNum;
|
|
|
3426
|
+ this.shp_oci.oci_csrc_info = shipOrCneInfo.enterpriseRegistrationCode;
|
|
|
3427
|
+
|
|
|
3428
|
+ // 构建下一个请求参数
|
|
|
3429
|
+ const dify_para_cne = {
|
|
|
3430
|
+ "inputs": {
|
|
|
3431
|
+ "logisticsInformation": A7_CNEInfo
|
|
|
3432
|
+ },
|
|
|
3433
|
+ "response_mode": "blocking",
|
|
|
3434
|
+ "user": "C6"
|
|
|
3435
|
+ };
|
|
|
3436
|
+
|
|
|
3437
|
+ // 返回下一个 API 调用的 Promise
|
|
|
3438
|
+ return getInfo(dify_para_cne, dify_api_token);
|
|
|
3439
|
+ } else {
|
|
|
3440
|
+ throw new Error("人工智能助手执行错误");
|
|
|
3441
|
+ }
|
|
|
3442
|
+ })
|
|
|
3443
|
+ .then(response => {
|
|
|
3444
|
+ let response_data = response.data;
|
|
|
3445
|
+ let CompletionResponse = response_data.data;
|
|
|
3446
|
+ // 获取dify 执行状态结果
|
|
|
3447
|
+ let excute_result = CompletionResponse.status;
|
|
|
3448
|
+
|
|
|
3449
|
+ if ("succeeded" === excute_result) {
|
|
|
3450
|
+ // 获取返回信息
|
|
|
3451
|
+ let result = CompletionResponse.outputs.text;
|
|
|
3452
|
+ // 返回的json字符串转换成JSON对象,todo:后续对收发货人内容进行字符串过滤,或者在dify后端过滤
|
|
|
3453
|
+ let cneInfo = JSON.parse(result);
|
|
|
3454
|
+ this.form.cne.cne_adr = cneInfo.address;
|
|
|
3455
|
+ this.form.cne.cne_name = cneInfo.name;
|
|
|
3456
|
+ this.form.cne.cne_country = cneInfo.country;
|
|
|
3457
|
+ this.form.cne.cne_loc_place = cneInfo.city;
|
|
|
3458
|
+ this.cne_contact.contact_number = cneInfo.phoneNum;
|
|
|
3459
|
+ this.cne_oci.oci_csrc_info = cneInfo.enterpriseRegistrationCode;
|
|
|
3460
|
+ } else {
|
|
|
3461
|
+ throw new Error("人工智能助手执行错误");
|
|
|
3462
|
+ }
|
|
|
3463
|
+
|
|
|
3464
|
+ //主单提交
|
|
|
3465
|
+ this.addFwbWithSet();
|
|
|
3466
|
+ /*进行表单的预验证*/
|
|
|
3467
|
+ this.$refs.apply_formRef.validate(valid => {
|
|
|
3468
|
+ // 未通过,表单预校验
|
|
|
3469
|
+ if (!valid) {
|
|
|
3470
|
+ this.form.oci=[];
|
|
|
3471
|
+ throw new Error("表单未通过校验");
|
|
|
3472
|
+ }
|
|
|
3473
|
+ })
|
|
|
3474
|
+ // return {data:{ success: true, code: '200',message:'testOK' }}
|
|
|
3475
|
+ return fwb(this.form);
|
|
|
3476
|
+ })
|
|
|
3477
|
+ .then(response=>{
|
|
|
3478
|
+ let res = response.data;
|
|
|
3479
|
+ //添加调度记录信息,失败
|
|
|
3480
|
+ if (res.code === '200'){
|
|
|
3481
|
+ this.$message.success(res.msg);
|
|
|
3482
|
+ // 返回成功结果
|
|
|
3483
|
+ resolve({ success: true, code: '200' });
|
|
|
3484
|
+ }else {
|
|
|
3485
|
+ this.$message.error(res.msg);
|
|
|
3486
|
+ throw new Error("后端报错"+res.msg);
|
3204
|
}
|
3487
|
}
|
|
|
3488
|
+ })
|
|
|
3489
|
+ .catch(error => {
|
|
|
3490
|
+ this.$message({
|
|
|
3491
|
+ type: 'error',
|
|
|
3492
|
+ message: '接口访问报错' + error.message
|
|
|
3493
|
+ });
|
|
|
3494
|
+ reject(error);
|
|
|
3495
|
+ });
|
3205
|
|
3496
|
|
3206
|
} else {
|
3497
|
} else {
|
3207
|
this.fileContent = { AF1: '工作表不存在' };
|
3498
|
this.fileContent = { AF1: '工作表不存在' };
|
3208
|
}
|
3499
|
}
|
|
|
3500
|
+ }catch (error){
|
|
|
3501
|
+ reject(error);
|
|
|
3502
|
+ }
|
|
|
3503
|
+ };
|
|
|
3504
|
+ reader.onerror = (error) => {
|
|
|
3505
|
+ reject(error);
|
3209
|
};
|
3506
|
};
|
3210
|
reader.readAsArrayBuffer(files);
|
3507
|
reader.readAsArrayBuffer(files);
|
3211
|
- this.convertAndCalculateVolume();
|
3508
|
+ }); // 返回 Promise
|
|
|
3509
|
+ },
|
|
|
3510
|
+ async batchFileUpload(file,fileList){
|
|
|
3511
|
+ // alert(JSON.stringify(file))
|
|
|
3512
|
+ // alert(JSON.stringify(fileList))
|
|
|
3513
|
+ // alert(JSON.stringify(this.uploadFileList))
|
|
|
3514
|
+ let _this = this;
|
|
|
3515
|
+ if (fileList && fileList.length === this.uploadFileList.length + 1){
|
|
|
3516
|
+ this.uploadFileList = fileList;
|
|
|
3517
|
+ // 初始化进度
|
|
|
3518
|
+ this.uploadProgress = {
|
|
|
3519
|
+ total: fileList.length,
|
|
|
3520
|
+ processed: 0,
|
|
|
3521
|
+ percent: 0,
|
|
|
3522
|
+ currentFile: ''
|
|
|
3523
|
+ };
|
|
|
3524
|
+
|
|
|
3525
|
+ for(const [index, item] of fileList.entries()){
|
|
|
3526
|
+ try {
|
|
|
3527
|
+ // 更新当前处理文件名
|
|
|
3528
|
+ this.uploadProgress.currentFile = `正在处理第 ${index + 1} 个文件: ${item.name}`;
|
|
|
3529
|
+
|
|
|
3530
|
+ const result = await this.fileBatchHandle(item);//等待异步结果
|
|
|
3531
|
+ _this.$message.success(JSON.stringify(result));
|
|
|
3532
|
+ if (result.code === '200'){
|
|
|
3533
|
+ item.done = true;
|
|
|
3534
|
+ //文件处理状态
|
|
|
3535
|
+ }else{
|
|
|
3536
|
+ item.done = false;
|
|
|
3537
|
+ _this.$message.error(item.name+ ' 发送报文失败:');
|
|
|
3538
|
+ }
|
|
|
3539
|
+ this.batchFileListResult.push(item)
|
|
|
3540
|
+ }catch (error){
|
|
|
3541
|
+ _this.$message.error(item.name+ ' 处理文件失败:',error);
|
|
|
3542
|
+ item.done = false;
|
|
|
3543
|
+ this.batchFileListResult.push(item);
|
|
|
3544
|
+ }finally {
|
|
|
3545
|
+ // 更新进度
|
|
|
3546
|
+ this.uploadProgress.processed += 1;
|
|
|
3547
|
+ this.uploadProgress.percent = Math.round(
|
|
|
3548
|
+ (this.uploadProgress.processed / this.uploadProgress.total) * 100
|
|
|
3549
|
+ );
|
|
|
3550
|
+ alert('总进度:'+this.uploadProgress.percent+'/当前已处理:'+this.uploadProgress.processed +"/总文件数量:"+ this.uploadProgress.total)
|
|
|
3551
|
+ }
|
|
|
3552
|
+
|
|
|
3553
|
+ // 清空当前处理文件名
|
|
|
3554
|
+ this.uploadProgress.currentFile = '';
|
|
|
3555
|
+ }
|
|
|
3556
|
+ }
|
3212
|
},
|
3557
|
},
|
3213
|
formattedDate() {
|
3558
|
formattedDate() {
|
3214
|
// 格式化日期为 yyyy-MM-dd
|
3559
|
// 格式化日期为 yyyy-MM-dd
|
|
@@ -3387,5 +3732,10 @@ Handling Information |
|
@@ -3387,5 +3732,10 @@ Handling Information |
3387
|
display: inline-block;
|
3732
|
display: inline-block;
|
3388
|
margin-left: 40px;
|
3733
|
margin-left: 40px;
|
3389
|
}
|
3734
|
}
|
|
|
3735
|
+ .progress-text {
|
|
|
3736
|
+ margin-top: 8px;
|
|
|
3737
|
+ color: #666;
|
|
|
3738
|
+ font-size: 14px;
|
|
|
3739
|
+ }
|
3390
|
</style>
|
3740
|
</style>
|
3391
|
|
3741
|
|