核价协助
@@ -786,22 +900,34 @@
+
+
+
@@ -884,6 +1010,8 @@ import CustomerSelect from "@/views/components/Tools/CustomerSelect/index.vue";
import jsqrDialog from '@/views/technicalConfirm/technicalConfirm/jsxzInfo.vue';
/** 导入核价单详情组件*/
import hjDialog from '@/views/priceVerification/priceVerification/hjInfo.vue';
+/** 导入选人组件 */
+import PeopleSelect from "@/views/components/Tools/PeopleSelect/index.vue";
/** 弹窗放大、拖拽 */
import elDragDialog from "@/directive/dialog/dragDialog";
@@ -897,7 +1025,8 @@ export default {
// 注册组件
'CustomerSelect': CustomerSelect,
'jsqrDialog': jsqrDialog,
- 'hjDialog': hjDialog
+ 'hjDialog': hjDialog,
+ 'PeopleSelect': PeopleSelect
},
dicts: ['quot_print', 'quot_approval_status','quot_jsxz_group','quot_jsxz_chapter','quot_jsxz_approval_status','quot_jsxz_standard','quot_hj_approval_status','quot_jsw_approval_status','quot_oa_approval_status'],
data() {
@@ -938,10 +1067,13 @@ export default {
},
// 报价单-询价附件列表数据
+ quotXjFileLoading: false,
quotXjFileList: [],
// 报价单-反馈附件列表数据
+ quotFkFileLoading: false,
quotFkFileList: [],
// 报价单-技术规范附件列表数据
+ quotJsgfFileLoading: false,
quotJsgfFileList: [],
//报价单-询价附件上传地址
uploadUrl: process.env.VUE_APP_BASE_API + "/quot/quot/quotFile",
@@ -996,13 +1128,23 @@ export default {
quotQuotationRequire: [
{ required: true, message: "报价要求不能为空", trigger: "blur" }
],
+ quotMaterialsCount: [
+ { required: true, message: "明细条数不能为空", trigger: "blur" }
+ ],
+ quotTotalPrice: [
+ { required: true, message: "总价不能为空", trigger: "blur" }
+ ],
},
//技术协助-特缆、低压、中压、其他 隐藏控制
showTl: false,
showDy: false,
showZy: false,
- showQt: false
+ showQt: false,
+
+ //是否打开选人组件,默认不打开
+ peopleOpen:false,
+ selectedPeoples:[]
};
},
created() {
@@ -1013,7 +1155,7 @@ export default {
this.getList();
},
methods: {
- // 打印状态修改
+ /** 打印状态修改 */
handleStatusChange(row) {
let text = row.quotPrint === "0" ? "打印" : "取消打印";
this.$modal.confirm('确认要"' + text + '"报价单:"' + row.quotCode + '"吗?').then(function() {
@@ -1026,11 +1168,11 @@ export default {
});
},
- //打开客户选择弹窗
+ /** 打开客户选择弹窗 */
openCustomer(){
this.customerOpen=true;
},
- //客户选择确定按钮事件
+ /** 客户选择确定按钮事件 */
submitCustomer(customer){
this.form.quotCustomerBm = customer.value;
this.form.quotCustomerName = customer.label;
@@ -1043,6 +1185,7 @@ export default {
quotCode: null,
quotSalesmanName: null,
quotSalesmanBm: null,
+ quotSalesmanCode: null,
quotSalesmanDeptName: null,
quotSalesmanDeptId: null,
quotCustomerBm: null,
@@ -1054,8 +1197,15 @@ export default {
quotQuotationDate: null,
quotQuotationRequire: null,
quotFeedbackExplanation: null,
+ quotOAApprovalStatusRemark: null,
quotApprovalStatus: null,
+ quotPrintUserName: null,
+ quotMaterialsCount: null,
+ quotTongPrice: null,
+ quotLvPrice: null,
+ quotMatpriceDiff: null,
+
quotJsxzApprovalStatus: null,
quotJsxzChapter: null,
quotJsxzConfirmCode: null,
@@ -1116,7 +1266,7 @@ export default {
this.resetForm("queryForm");
this.handleQuery();
},
- // 多选框选中数据
+ /** 多选框选中数据 */
handleSelectionChange(selection) {
this.ids = selection.map(item => item.quotId)
this.single = selection.length!==1
@@ -1127,8 +1277,10 @@ export default {
this.reset();
this.open = true;
this.activeName = "quotInfo";
- this.form.quotSalesmanName = this.$store.state.user.sapUserName;
+ this.form.quotSalesmanName = this.$store.state.user.nickName;
+ //this.form.quotSalesmanName = this.$store.state.user.sapUserName;
this.form.quotSalesmanBm = this.$store.state.user.sapBm;
+ this.form.quotSalesmanCode = this.$store.state.user.name;
this.form.quotSalesmanDeptId = this.$store.state.user.deptId;
this.form.quotSalesmanDeptName = this.$store.state.user.deptName;
},
@@ -1146,10 +1298,12 @@ export default {
const quotId = row.quotId || this.ids
let self = this;
this.$modal.confirm('是否确认修订所选报价单且更新状态为协助中?').then(function() {
+ }).then(() => {
getReturnUpdateQuot(quotId).then(response => {
- self.setInfo(response);
+ this.$modal.msgSuccess("更改成功");
+ this.getList();
});
- }).then(() => {}).catch(() => {});
+ }).catch(() => {});
},
/** 修改按钮操作-详细信息设置 */
@@ -1190,16 +1344,23 @@ export default {
this.productUpload.title = "产品数据导入";
this.productUpload.open = true;
},
- /** 下载模板操作 */
+ /** 产品数据导出按钮操作 */
+ handleExportMaterial() {
+ const quot = {"quotId":this.form.quotId};
+ this.download('quot/quot/exportMaterial', {
+ ...quot
+ }, this.form.quotCode +".xlsx")
+ },
+ /** 产品数据下载模板操作 */
importTemplate() {
this.download('quot/quot/importTemplate', {
}, `product_template_${new Date().getTime()}.xlsx`)
},
- // 文件上传中处理
+ /** 产品数据文件上传中处理 */
handleFileUploadProgress(event, file, fileList) {
this.productUpload.isUploading = true;
},
- // 文件上传成功处理
+ /** 产品数据文件上传成功处理 */
handleFileSuccess(response, file, fileList) {
this.productUpload.open = false;
this.productUpload.isUploading = false;
@@ -1207,12 +1368,12 @@ export default {
this.$message.success("产品数据导入成功!");
this.quotMaterialList = this.quotMaterialList.concat(response.data)
},
- // 提交上传文件
+ /** 产品数据提交上传文件 */
submitFileForm() {
this.$refs.productUpload.submit();
},
- /** 保存按钮 */
+ /** 保存报价单按钮 */
saveForm() {
this.$refs["form"].validate(valid => {
if (valid) {
@@ -1225,7 +1386,7 @@ export default {
});
} else {
addQuot(this.form).then(response => {
- this.$modal.msgSuccess("新增成功");
+ this.$modal.msgSuccess("创建成功");
const row = {'quotId':response.data.quotId}
this.handleUpdate(row);
@@ -1246,6 +1407,7 @@ export default {
}
this.form.quotMaterialList = this.quotMaterialList;
+ console.log(this.form)
commitQuot(this.form).then(response => {
this.$modal.msgSuccess("提交成功");
this.open = false;
@@ -1300,11 +1462,18 @@ export default {
/** 报价组报价单提交反馈按钮 */
feedbackQuotForm() {
- var quotFkFileNum = this.quotFkFileList.length;
+ const quotTotalPrice = this.form.quotTotalPrice;
+ const quotMaterialsCount = this.form.quotMaterialsCount;
+ if(!quotTotalPrice || !quotMaterialsCount ){
+ this.$modal.msgError("明细条数或总价未填");
+ return;
+ }
+
+ /*const quotFkFileNum = this.quotFkFileList.length;
if(quotFkFileNum==0){
this.$modal.msgError("反馈附件必须上传");
return;
- }
+ }*/
feedbackQuot(this.form).then(response => {
this.$modal.msgSuccess("提交反馈成功");
this.open = false;
@@ -1357,10 +1526,12 @@ export default {
this.$modal.msgSuccess("删除成功");
}).catch(() => {});
},
- /** 报价单-产品序号 */
+
+ /** 报价单-产品序号 */
rowQuotMaterialIndex({ row, rowIndex }) {
row.index = rowIndex + 1;
},
+
/** 报价单-产品添加按钮操作 */
handleAddQuotMaterial() {
let obj = {};
@@ -1371,6 +1542,7 @@ export default {
obj.matSl = "";
this.quotMaterialList.push(obj);
},
+
/** 报价单-产品删除按钮操作 */
handleDeleteQuotMaterial() {
if (this.checkedQuotMaterial.length == 0) {
@@ -1383,10 +1555,12 @@ export default {
});
}
},
+
/** 复选框选中数据 */
handleQuotMaterialSelectionChange(selection) {
this.checkedQuotMaterial = selection.map(item => item.index)
},
+
/** 导出按钮操作 */
handleExport() {
this.download('quot/quot/export', {
@@ -1394,7 +1568,7 @@ export default {
}, `quot_${new Date().getTime()}.xlsx`)
},
- // 对列进行合算
+ /** 对产品数据-数量、金额进行合算 */
getSummaries(param) {
const { columns, data } = param;
const sums = [];
@@ -1421,11 +1595,12 @@ export default {
}
});
this.form.quotQuantity = sums[6];
- this.form.quotTotalPrice = sums[8];
+ this.form.quotTotalPrice = checkRole(['QUOT_MAT_PRICE_DIFF'])? sums[12] : sums[11];
+ this.form.quotMaterialsCount = data.length;
return sums;
},
-/*********************************附件上传*****************************************/
+ /*********************************附件列表数据展示、上传*****************************************/
//获取报价单-询价附件列表
getQuotXjFileList(){
const param = {relationId:this.form.quotId,fileType:'quotXjFile'}
@@ -1448,8 +1623,9 @@ export default {
});
}
},
- //获取报价单-技术规范附件列表 (包含询价附件)
+ //获取报价单-技术规范附件列表
getQuotJsgfFileList(){
+ console.log(this.form.quotId)
const param = {relationId:this.form.quotId,fileType:'quotJsgfFile'}
quotFileList(param).then(response => {
this.quotJsgfFileList = response.rows;
@@ -1478,7 +1654,7 @@ export default {
this.quotHjFileList = response.rows;
});
},
- //特缆、低压、中压、其他 反馈附件上传窗口
+ //特缆、低压、中压、其他 反馈附件显示窗口
handleAddFile(group){
this.addFileOpen = true;
this.quotJsqrFileList = [];
@@ -1507,7 +1683,32 @@ export default {
uploadFile(activeName){
this.activeName = activeName
},
-
+ //上传前校验-反馈附件
+ beforeAvatarUploadQuotFkFile(file) {
+ this.quotFkFileLoading = true;
+ },
+ //上传前校验-清单附件
+ beforeAvatarUploadQuotXjFile(file) {
+ this.quotXjFileLoading = true;
+ let activeName = this.activeName;
+ if(activeName=='quotXjFile'){
+ if(file.name.split('.')[1].toLowerCase() != 'xls' && file.name.split('.')[1].toLowerCase() != 'xlsx'){
+ this.$modal.msgError("清单附件必须是Excel格式");
+ this.quotXjFileLoading = false;
+ return false;
+ }
+ }
+ },
+ //上传前校验-清单附件
+ beforeAvatarUploadQuotJsgfFile(file){
+ this.quotJsgfFileLoading = true;
+ const maxSize = 100 * 1024 * 1024; // 100MB,根据你的需求设置最大文件大小
+ if (file.size > maxSize) {
+ this.$modal.msgError("文件大小超过了"+maxSize / (1024 * 1024)+"MB的限制");
+ this.quotJsgfFileLoading = false;
+ return false;
+ }
+ },
//成功回调
handleAvatarSuccess(res) {
let activeName = this.activeName;
@@ -1516,15 +1717,30 @@ export default {
this.$modal.msgSuccess(res.msg);
if(activeName=='quotXjFile'){
this.getQuotXjFileList();
- }else if(activeName=='quotJsInfo'){
+ this.quotXjFileLoading = false;
+ this.$refs.quotXjFileUpload.clearFiles(); //上传成功之后清除历史记录**加粗样式**
+ }else if(activeName=='quotJsgfFile'){
this.getQuotJsgfFileList();
+ this.quotJsgfFileLoading = false;
+ this.$refs.quotJsgfFileUpload.clearFiles(); //上传成功之后清除历史记录**加粗样式**
}else if(activeName=='quotFkFile'){
this.getQuotFkFileList();
+ this.quotFkFileLoading = false;
+ this.$refs.quotFkFileUpload.clearFiles(); //上传成功之后清除历史记录**加粗样式**
}
} else {
this.$modal.msgError(res.msg);
+ if(activeName=='quotXjFile'){
+ this.quotXjFileLoading = false;
+ this.$refs.quotXjFileUpload.clearFiles(); //上传成功之后清除历史记录**加粗样式**
+ }else if(activeName=='quotJsgfFile'){
+ this.quotJsgfFileLoading = false;
+ this.$refs.quotJsgfFileUpload.clearFiles(); //上传成功之后清除历史记录**加粗样式**
+ }else if(activeName=='quotFkFile'){
+ this.quotFkFileLoading = false;
+ this.$refs.quotFkFileUpload.clearFiles(); //上传成功之后清除历史记录**加粗样式**
+ }
}
- this.$refs.upload.clearFiles(); //上传成功之后清除历史记录**加粗样式**
},
//下载附件
@@ -1534,18 +1750,41 @@ export default {
//删除附件
deleteFile(fileId,activeName){
- //let activeName = this.activeName;
- quotFileDelete(fileId).then(response => {
- if(activeName=='quotXjFile'){
+ if(activeName=='quotXjFile'){
+ this.quotXjFileLoading = true;
+ quotFileDelete(fileId).then(response => {
this.getQuotXjFileList();
- }else if(activeName=='quotJsInfo'){
+ this.quotXjFileLoading = false;
+ })
+ }else if(activeName=='quotJsgfFile'){
+ this.quotJsgfFileLoading = true;
+ quotFileDelete(fileId).then(response => {
this.getQuotJsgfFileList();
- }else if(activeName=='quotFkFile'){
+ this.quotJsgfFileLoading = false;
+ })
+ }else if(activeName=='quotFkFile'){
+ this.quotFkFileLoading = true;
+ quotFileDelete(fileId).then(response => {
this.getQuotFkFileList();
- }
- });
+ this.quotFkFileLoading = false;
+ })
+ }
},
- /*********************************附件上传*****************************************/
+
+ //打开选人弹窗
+ openPeopleSelect(){
+ this.peopleOpen=true;
+ },
+ //选择人的确定按钮事件 submitPeople(nikeNamelist)方法传参一个默认接收用户昵称数组 submitPeople(peopleList,nikeNamelist)方法传参两个则是接收用户昵称数组和用户账号数组
+ submitPeople(peopleList,nickNameList){
+ this.selectedPeoples = this.selectedPeoples.concat(nickNameList)
+ this.selectedPeoples = this.unique(this.selectedPeoples)
+ this.form.quotSalesmanName = this.selectedPeoples[0].nickName;
+ this.form.quotSalesmanBm = this.selectedPeoples[0].sapUserBm;
+ this.form.quotSalesmanCode = this.selectedPeoples[0].userName;
+ this.peopleOpen=false;
+ },
+ /*********************************附件列表数据展示、上传*****************************************/
//技术确认单 详细信息
showJsqrDialog(){
@@ -1555,7 +1794,12 @@ export default {
//核价单 详细信息
showHjDialog(){
this.$refs.hjDialog.getInfo("报价单-核价单",true,false,this.form.quotHjId);
- }
+ },
+ //数组去重
+ unique(arr) {
+ const res = new Map();
+ return arr.filter((arr) => !res.has(arr.userName) && res.set(arr.userName, 1));
+ },
}
};
diff --git a/ruoyi-ui/src/views/redBook/productSelect.vue b/ruoyi-ui/src/views/redBook/productSelect.vue
index 3f76769..e6b09bb 100644
--- a/ruoyi-ui/src/views/redBook/productSelect.vue
+++ b/ruoyi-ui/src/views/redBook/productSelect.vue
@@ -8,11 +8,10 @@
搜索
- 刷新
生成报价单
保存
+ 清空信息
导入
-
@@ -138,6 +137,7 @@
:value="item.value"
@click.native="selectRbDate(item.value)"/>
+
导出
@@ -152,7 +152,7 @@
删除
-
+
@@ -593,7 +593,7 @@
const allPrice = toDecimal(count * price * (per?per:1) * (per2?per2:1));
const rowDate = {
- uid_0: uid_0,
+ uid_0: uid_0.toString(),
name_0: name_0,
name_1: model,
spec: spec,
@@ -758,7 +758,7 @@
// 处理返回的文件流
const content = response;
const blob = new Blob([content]);
- const fileName = "BJD_"+this.getTodayCourse()+".xls";
+ const fileName = "RB_BJD_"+this.getTodayCourse()+".xls";
if ("download" in document.createElement("a")) {
// 非IE下载
const elink = document.createElement("a");
@@ -814,6 +814,14 @@
this.$refs.productUpload.submit();
},
+ // 导出明细
+ handleExport(){
+ const fileName = "RB_BJD_"+this.getTodayCourse();
+ this.download('redBook/redBook/exportProduct', {
+ selectedResultData: JSON.stringify(this.selectedResultData)
+ }, fileName +".xlsx")
+ },
+
//获取调价日期
getVersionList(){
versionList(this.queryParams).then(response => {
@@ -899,6 +907,7 @@
isColumn1ValuesEqual() {
if(this.selectedResultData.length > 0){
const uid_0 = this.selectedResultData[0].uid_0;//版本uid
+ console.log(this.selectedResultData)
return this.selectedResultData.every(row => row.uid_0 === uid_0);
}else{
return false;
diff --git a/ruoyi-ui/src/views/redBook/quots.vue b/ruoyi-ui/src/views/redBook/quots.vue
index f151e8c..16f9cc4 100644
--- a/ruoyi-ui/src/views/redBook/quots.vue
+++ b/ruoyi-ui/src/views/redBook/quots.vue
@@ -119,8 +119,8 @@
-
-
+ 导出
+
@@ -433,7 +433,7 @@
const content = response;
const blob = new Blob([content]);
- let fileName = "BJD_"+this.getTodayCourse()+".xls";
+ let fileName = "RB_BJD_"+this.getTodayCourse()+".xls";
if(this.form.quotCode){
fileName = this.form.quotCode+".xls";
}
@@ -454,6 +454,18 @@
}
});
},
+
+ // 导出明细
+ handleExport(){
+ let fileName = "RB_BJD_"+this.getTodayCourse();
+ if(this.form.quotCode){
+ fileName = this.form.quotCode;
+ }
+ this.download('redBook/redBook/exportProduct', {
+ selectedResultData: JSON.stringify(this.selectedResultData)
+ }, fileName +".xlsx")
+ },
+
// 获取当前时间
getTodayCourse(){
const myDate = new Date();
diff --git a/ruoyi-ui/src/views/technicalConfirm/technicalConfirm/jsxzInfo.vue b/ruoyi-ui/src/views/technicalConfirm/technicalConfirm/jsxzInfo.vue
index c66365c..2d5a7e3 100644
--- a/ruoyi-ui/src/views/technicalConfirm/technicalConfirm/jsxzInfo.vue
+++ b/ruoyi-ui/src/views/technicalConfirm/technicalConfirm/jsxzInfo.vue
@@ -79,7 +79,7 @@
- 技术规范要求(询价附件)
+ 技术规范要求(技术附件)
@@ -714,13 +714,14 @@
:action="uploadUrl"
:headers="headers"
:data="{ relation_id: this.form.quotJsqrId,file_type: fileType }"
+ :before-upload="beforeAvatarUpload"
:on-success="handleAvatarSuccess"
:show-file-list="false"
:limit="1"
v-if="uploadDis">
上传文件
-
+
@@ -809,6 +810,7 @@
// 反馈附件显示弹窗 上传按钮设置 删除设置
uploadDis: false,
// 反馈附件表格数据
+ quotJsqrFileLoading: false,
quotJsqrFileList: [],
quotJsqrTlFileNum: 0,
quotJsqrDyFileNum: 0,
@@ -993,8 +995,9 @@
param.quotJsxzGroup = quotJsxzGroup;//组名
param.type = type;//操作人、审核人、组长
param.state = state;//通过/驳回
- param.fileNum = quotJsxzGroup=='TL'?this.quotJsqrTlFileNum:quotJsxzGroup=='Dy'?this.quotJsqrDyFileNum:quotJsxzGroup=='Zy'?this.quotJsqrZyFileNum:this.quotJsqrQtFileNum;//反馈附件数
+ param.fileNum = quotJsxzGroup=='TL'?this.quotJsqrTlFileNum:(quotJsxzGroup=='DY'?this.quotJsqrDyFileNum:(quotJsxzGroup=='ZY'?this.quotJsqrZyFileNum:this.quotJsqrQtFileNum));//反馈附件数
+ console.log(param.fileNum)
param.quotJsqrTlRemark = this.form.quotJsqrTlRemark;
param.quotJsqrTlCheckRemark = this.form.quotJsqrTlCheckRemark;
param.quotJsqrTlLeaderRemark = this.form.quotJsqrTlLeaderRemark;
@@ -1149,8 +1152,10 @@
//删除附件
deleteFile(fileId){
+ this.quotJsqrFileLoading = true;
quotFileDelete(fileId).then(response => {
this.getQuotJsqrFileList(this.fileType);
+ this.quotJsqrFileLoading = false;
});
},
@@ -1411,6 +1416,10 @@
// 获取反馈附件
this.getQuotJsqrFileList(this.fileType);
},
+ //上传前校验
+ beforeAvatarUpload(file){
+ this.quotJsqrFileLoading = true;
+ },
//成功回调
handleAvatarSuccess(res) {
// 如果上传成功
@@ -1420,6 +1429,7 @@
} else {
this.$modal.msgError(res.msg);
}
+ this.quotJsqrFileLoading = false;
this.$refs.upload.clearFiles(); //上传成功之后清除历史记录**加粗样式**
},
//下载附件