123123123

This commit is contained in:
xd 2024-06-03 21:26:33 +08:00
parent c213f47116
commit cb1002a694
19 changed files with 112 additions and 559 deletions

Binary file not shown.

Before

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.1 KiB

View File

@ -430,6 +430,21 @@ public class QuotController extends BaseController
return success(); return success();
} }
/**
* 报价单提交OA
*/
@PreAuthorize("@ss.hasPermi('quot:quot:assistOA')")
@Log(title = "报价单提交OA", businessType = BusinessType.OTHER)
@PostMapping("/commitOAQuot")
public AjaxResult commitOAQuot(@RequestBody Quot quot)
{
// TODO 对接OA
return success();
}
/** /**
* 发送信息-报价组提交核价协助 * 发送信息-报价组提交核价协助
* @param quotHj * @param quotHj
@ -481,6 +496,7 @@ public class QuotController extends BaseController
*/ */
@Log(title = "报价单生成", businessType = BusinessType.OTHER) @Log(title = "报价单生成", businessType = BusinessType.OTHER)
@PostMapping("/madeQuot") @PostMapping("/madeQuot")
@PreAuthorize("@ss.hasPermi('quot:quot:madeQuot')")
public void madeQuot(HttpServletResponse response, @RequestBody Quot quot) public void madeQuot(HttpServletResponse response, @RequestBody Quot quot)
{ {
List<QuotMaterial> list = quot.getQuotMaterialList(); List<QuotMaterial> list = quot.getQuotMaterialList();

View File

@ -47,6 +47,10 @@ public class excelUtil {
public static void exportExcel(HttpServletResponse response, OAQuot quot, List<OAQuotProduct> list){ public static void exportExcel(HttpServletResponse response, OAQuot quot, List<OAQuotProduct> list){
response.setContentType("application/vnd.ms-excel"); response.setContentType("application/vnd.ms-excel");
BigDecimal totalmoney = BigDecimal.ZERO; BigDecimal totalmoney = BigDecimal.ZERO;
File jnlogo_file = new File("logon/"+IdUtils.createNo("jnlogo_",3)+".png");
File wc_file = new File("logon/"+IdUtils.createNo("wc_",3)+".png");
try { try {
OutputStream os = response.getOutputStream(); OutputStream os = response.getOutputStream();
WritableWorkbook wwb = Workbook.createWorkbook(os); WritableWorkbook wwb = Workbook.createWorkbook(os);
@ -287,21 +291,19 @@ public class excelUtil {
wsheet.addCell(label); wsheet.addCell(label);
InputStream fileInputStream = new ClassPathResource("/jnlogo.png").getInputStream(); InputStream fileInputStream = new ClassPathResource("/jnlogo.png").getInputStream();
File file = new File("logon/"+IdUtils.createNo("jnlogo_",3)+".png"); // 指定输出文件路径
//转换 //转换
FileUtils.copyInputStreamToFile(fileInputStream, file); FileUtils.copyInputStreamToFile(fileInputStream, jnlogo_file);
//设置图片位置前两个参数为插入图片的单元格坐标后面是设置从插入的单元格开始横向和纵向分别要占用的单元格个数最后传入图片文件 //设置图片位置前两个参数为插入图片的单元格坐标后面是设置从插入的单元格开始横向和纵向分别要占用的单元格个数最后传入图片文件
WritableImage image=new WritableImage(0.3, 0.2, 1.25, 2.55,file); WritableImage image=new WritableImage(0.3, 0.2, 1.25, 2.55,jnlogo_file);
wsheet.addImage(image); wsheet.addImage(image);
InputStream fileInputStream2 = new ClassPathResource("/wc.png").getInputStream(); InputStream fileInputStream2 = new ClassPathResource("/wc.png").getInputStream();
File file2 = new File("logon/"+IdUtils.createNo("wc_",3)+".png"); // 指定输出文件路径
//转换 //转换
FileUtils.copyInputStreamToFile(fileInputStream2, file2); FileUtils.copyInputStreamToFile(fileInputStream2, wc_file);
//设置图片位置前两个参数为插入图片的单元格坐标后面是设置从插入的单元格开始横向和纵向分别要占用的单元格个数最后传入图片文件 //设置图片位置前两个参数为插入图片的单元格坐标后面是设置从插入的单元格开始横向和纵向分别要占用的单元格个数最后传入图片文件
image=new WritableImage(6.7, 0.2, 1.20, 2.65,file2); image=new WritableImage(6.7, 0.2, 1.20, 2.65,wc_file);
wsheet.addImage(image); wsheet.addImage(image);
wsheet.getSettings().setBottomMargin(0.7d); wsheet.getSettings().setBottomMargin(0.7d);
@ -327,7 +329,6 @@ public class excelUtil {
os.close(); os.close();
response.flushBuffer(); response.flushBuffer();
} catch (RowsExceededException e) { } catch (RowsExceededException e) {
// TODO Auto-generated catch block // TODO Auto-generated catch block
e.printStackTrace(); e.printStackTrace();
@ -336,6 +337,13 @@ public class excelUtil {
e.printStackTrace(); e.printStackTrace();
} catch (IOException e) { } catch (IOException e) {
e.printStackTrace(); e.printStackTrace();
}finally {
try {
FileUtils.delete(jnlogo_file);
FileUtils.delete(wc_file);
} catch (IOException e) {
e.printStackTrace();
}
} }
} }
@ -349,6 +357,9 @@ public class excelUtil {
public static void exportQuotExcel(HttpServletResponse response, Quot quot, List<QuotMaterial> list){ public static void exportQuotExcel(HttpServletResponse response, Quot quot, List<QuotMaterial> list){
response.setContentType("application/vnd.ms-excel"); response.setContentType("application/vnd.ms-excel");
BigDecimal totalmoney = BigDecimal.ZERO; BigDecimal totalmoney = BigDecimal.ZERO;
File jnlogo_file = new File("logon/"+IdUtils.createNo("jnlogo_",3)+".png");
File wc_file = new File("logon/"+IdUtils.createNo("wc_",3)+".png");
try { try {
OutputStream os = response.getOutputStream(); OutputStream os = response.getOutputStream();
WritableWorkbook wwb = Workbook.createWorkbook(os); WritableWorkbook wwb = Workbook.createWorkbook(os);
@ -595,21 +606,19 @@ public class excelUtil {
wsheet.addCell(label); wsheet.addCell(label);
InputStream fileInputStream = new ClassPathResource("/jnlogo.png").getInputStream(); InputStream fileInputStream = new ClassPathResource("/jnlogo.png").getInputStream();
File file = new File("logon/"+IdUtils.createNo("jnlogo_",3)+".png"); // 指定输出文件路径
//转换 //转换
FileUtils.copyInputStreamToFile(fileInputStream, file); FileUtils.copyInputStreamToFile(fileInputStream, jnlogo_file);
//设置图片位置前两个参数为插入图片的单元格坐标后面是设置从插入的单元格开始横向和纵向分别要占用的单元格个数最后传入图片文件 //设置图片位置前两个参数为插入图片的单元格坐标后面是设置从插入的单元格开始横向和纵向分别要占用的单元格个数最后传入图片文件
WritableImage image=new WritableImage(0.3, 0.2, 1.25, 2.55,file); WritableImage image=new WritableImage(0.3, 0.2, 1.25, 2.55,jnlogo_file);
wsheet.addImage(image); wsheet.addImage(image);
InputStream fileInputStream2 = new ClassPathResource("/wc.png").getInputStream(); InputStream fileInputStream2 = new ClassPathResource("/wc.png").getInputStream();
File file2 = new File("logon/"+IdUtils.createNo("wc_",3)+".png"); // 指定输出文件路径
//转换 //转换
FileUtils.copyInputStreamToFile(fileInputStream2, file2); FileUtils.copyInputStreamToFile(fileInputStream2, wc_file);
//设置图片位置前两个参数为插入图片的单元格坐标后面是设置从插入的单元格开始横向和纵向分别要占用的单元格个数最后传入图片文件 //设置图片位置前两个参数为插入图片的单元格坐标后面是设置从插入的单元格开始横向和纵向分别要占用的单元格个数最后传入图片文件
image=new WritableImage(6.7, 0.2, 1.20, 2.65,file2); image=new WritableImage(6.7, 0.2, 1.20, 2.65,wc_file);
wsheet.addImage(image); wsheet.addImage(image);
wsheet.getSettings().setBottomMargin(0.7d); wsheet.getSettings().setBottomMargin(0.7d);
@ -644,6 +653,13 @@ public class excelUtil {
e.printStackTrace(); e.printStackTrace();
} catch (IOException e) { } catch (IOException e) {
e.printStackTrace(); e.printStackTrace();
}finally {
try {
FileUtils.delete(jnlogo_file);
FileUtils.delete(wc_file);
} catch (IOException e) {
e.printStackTrace();
}
} }
} }

View File

@ -79,6 +79,13 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<result property="matDanw" column="sub_mat_danw" /> <result property="matDanw" column="sub_mat_danw" />
<result property="matSl" column="sub_mat_sl" /> <result property="matSl" column="sub_mat_sl" />
<result property="matRemark" column="sub_mat_remark" /> <result property="matRemark" column="sub_mat_remark" />
<result property="matMatprice" column="sub_mat_matprice" />
<result property="matPrice" column="sub_mat_price" />
<result property="matQuotPrice" column="sub_mat_quot_price" />
<result property="matQuotAllPrice" column="sub_mat_quot_allPrice" />
<result property="matMatpriceDiff" column="sub_mat_matprice_diff" />
<result property="quotId" column="sub_quot_id" /> <result property="quotId" column="sub_quot_id" />
</resultMap> </resultMap>
@ -154,9 +161,16 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
a.quot_jsw_approval_status, a.quot_jsw_approval_status,
b.mat_id as sub_mat_id, b.mat_xingh as sub_mat_xingh, b.mat_guig as sub_mat_guig, b.mat_id as sub_mat_id, b.mat_xingh as sub_mat_xingh, b.mat_guig as sub_mat_guig,
b.mat_diany as sub_mat_diany, b.mat_standard as sub_mat_standard, b.mat_danw as sub_mat_danw, b.mat_sl as sub_mat_sl, b.mat_diany as sub_mat_diany, b.mat_standard as sub_mat_standard, b.mat_danw as sub_mat_danw, b.mat_sl as sub_mat_sl,
b.mat_remark as sub_mat_remark,b.quot_id as sub_quot_id b.mat_remark as sub_mat_remark,
b.mat_matprice as sub_mat_matprice,
b.mat_price as sub_mat_price,
b.mat_quot_price as sub_mat_quot_price,
b.mat_quot_allPrice as sub_mat_quot_allPrice,
b.mat_matprice_diff as sub_mat_matprice_diff,
b.quot_id as sub_quot_id
from quot a from quot a
left join quot_material b on b.quot_id = a.quot_id left join quot_material b on b.quot_id = a.quot_id
<include refid="quotJoins"/> <include refid="quotJoins"/>

View File

@ -119,6 +119,15 @@ export function commitJswQuot(data) {
}) })
} }
//提交OA
export function commitOAQuot(data) {
return request({
url: '/quot/quot/commitOAQuot',
method: 'post',
data: data
})
}
//提交反馈按钮 //提交反馈按钮
export function feedbackQuot(data) { export function feedbackQuot(data) {
return request({ return request({

View File

@ -182,53 +182,30 @@
<el-form ref="form" :model="form" :rules="rules" label-width="100px"> <el-form ref="form" :model="form" :rules="rules" label-width="100px">
<el-divider content-position="left" class="customer_divider_text">当前协助情况</el-divider> <el-divider content-position="left" class="customer_divider_text">当前协助情况</el-divider>
<el-row> <el-row>
<el-col :span="6"> <el-col :span="4">
<el-form-item label="提交状态" prop="quotApprovalStatus"> <el-form-item label="提交状态" prop="quotApprovalStatus">
<el-select v-model="this.form.quotApprovalStatus" :disabled="true"> <dict-tag :options="dict.type.quot_approval_status" :value="this.form.quotApprovalStatus"/>
<el-option
v-for="dict in dict.type.quot_approval_status"
:key="dict.value"
:label="dict.label"
:value="dict.value"
/>
</el-select>
</el-form-item> </el-form-item>
</el-col> </el-col>
<div v-if="checkPermi(['quot:quot:xzInfo'])"> <div v-if="checkPermi(['quot:quot:xzInfo'])">
<el-col :span="6"> <el-col :span="4">
<el-form-item label="技术协助" prop="quotJsxzApprovalStatus"> <el-form-item label="技术协助" prop="quotJsxzApprovalStatus">
<el-select v-model="this.form.quotJsxzApprovalStatus" :disabled="true"> <dict-tag :options="dict.type.quot_approval_status" :value="this.form.quotJsxzApprovalStatus"/>
<el-option
v-for="dict in dict.type.quot_jsxz_approval_status"
:key="dict.value"
:label="dict.label"
:value="dict.value"
/>
</el-select>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="6"> <el-col :span="4">
<el-form-item label="核价协助" prop="quotHjApprovalStatus"> <el-form-item label="核价协助" prop="quotHjApprovalStatus">
<el-select v-model="this.form.quotHjApprovalStatus" :disabled="true"> <dict-tag :options="dict.type.quot_approval_status" :value="this.form.quotHjApprovalStatus"/>
<el-option
v-for="dict in dict.type.quot_hj_approval_status"
:key="dict.value"
:label="dict.label"
:value="dict.value"
/>
</el-select>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="6"> <el-col :span="4">
<el-form-item label="金思维协助" prop="quotJswApprovalStatus"> <el-form-item label="金思维协助" prop="quotJswApprovalStatus">
<el-select v-model="this.form.quotJswApprovalStatus" :disabled="true"> <dict-tag :options="dict.type.quot_approval_status" :value="this.form.quotJswApprovalStatus"/>
<el-option </el-form-item>
v-for="dict in dict.type.quot_jsw_approval_status" </el-col>
:key="dict.value" <el-col :span="4">
:label="dict.label" <el-form-item label="OA审批" prop="quotOAApprovalStatus">
:value="dict.value" <dict-tag :options="dict.type.quot_approval_status" :value="this.form.quotOAApprovalStatus"/>
/>
</el-select>
</el-form-item> </el-form-item>
</el-col> </el-col>
</div> </div>
@ -316,7 +293,7 @@
</el-form-item> </el-form-item>
</el-col> </el-col>
</el-row> </el-row>
<div v-if="checkPermi(['quot:quot:assist'])"> <div v-if="checkRole(['QUOT'])">
<el-row :gutter="8" v-if="this.form.quotApprovalStatus != '0' && this.form.quotApprovalStatus != null"> <el-row :gutter="8" v-if="this.form.quotApprovalStatus != '0' && this.form.quotApprovalStatus != null">
<el-col :span="12"> <el-col :span="12">
<el-form-item label="总数量" prop="quotQuantity"> <el-form-item label="总数量" prop="quotQuantity">
@ -330,7 +307,7 @@
</el-col> </el-col>
</el-row> </el-row>
</div> </div>
<div v-if="checkPermi(['quot:quot:assist'])"> <div v-if="checkRole(['QUOT'])">
<el-row :gutter="8" v-if="this.form.quotApprovalStatus != '0' && this.form.quotApprovalStatus != null"> <el-row :gutter="8" v-if="this.form.quotApprovalStatus != '0' && this.form.quotApprovalStatus != null">
<el-col :span="12"> <el-col :span="12">
<el-form-item label="是否打印" prop="quotPrint"> <el-form-item label="是否打印" prop="quotPrint">
@ -430,6 +407,16 @@
<el-input v-model="scope.row.matSl" placeholder="请输入数量" :disabled="form.quotApprovalStatus != '0' && form.quotApprovalStatus != null"/> <el-input v-model="scope.row.matSl" placeholder="请输入数量" :disabled="form.quotApprovalStatus != '0' && form.quotApprovalStatus != null"/>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="报价" prop="matQuotPrice" v-if="checkRole(['QUOT'])">
<template slot-scope="scope">
<el-input v-model="scope.row.matQuotPrice"/>
</template>
</el-table-column>
<el-table-column label="报价金额" prop="matQuotAllPrice" v-if="checkRole(['QUOT'])">
<template slot-scope="scope">
<el-input v-model="scope.row.matQuotAllPrice"/>
</template>
</el-table-column>
<el-table-column label="备注" prop="matRemark"> <el-table-column label="备注" prop="matRemark">
<template slot-scope="scope"> <template slot-scope="scope">
<el-input v-model="scope.row.matRemark" placeholder="请输入备注" :disabled="form.quotApprovalStatus != '0' && form.quotApprovalStatus != null"/> <el-input v-model="scope.row.matRemark" placeholder="请输入备注" :disabled="form.quotApprovalStatus != '0' && form.quotApprovalStatus != null"/>
@ -437,7 +424,7 @@
</el-table-column> </el-table-column>
</el-table> </el-table>
<el-divider content-position="left" class="customer_divider_text">询价附件(产品清单必须是EXCEL文件)</el-divider> <el-divider content-position="left" class="customer_divider_text">询价附件(先保存再上传且产品清单必须是EXCEL文件)</el-divider>
<div v-hasPermi="['quot:quot:quotXjFile']"> <div v-hasPermi="['quot:quot:quotXjFile']">
<el-upload class="upload-demo" <el-upload class="upload-demo"
ref="upload" ref="upload"
@ -764,506 +751,6 @@
</el-row> </el-row>
</div> </div>
<!--<el-tabs v-model="activeName" tab-position="left" style="margin-left: 15px; margin-right: 15px;height: 480px;">
<el-tab-pane label="报价信息" name="quotInfo">
<el-row :gutter="8">
<el-col :span="10">
<el-form-item label="报价单号" prop="quotCode">
<el-input v-model="form.quotCode" placeholder="系统自动生成" :disabled="true"/>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="业务员" prop="quotSalesmanName">
<el-input v-model="form.quotSalesmanName" :disabled="true"/>
<el-input v-model="form.quotSalesmanBm" v-if="false"/>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="所属部门" prop="quotSalesmanDeptName">
<el-input v-model="form.quotSalesmanDeptName" :disabled="true"/>
<el-input v-model="form.quotSalesmanDeptId" v-if="false"/>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="8">
<el-col :span="16">
<el-form-item label="客户" prop="quotCustomerName">
<el-input v-model="form.quotCustomerBm" v-if="false"/>
<el-input v-model="form.quotCustomerName" placeholder="请输入客户" :disabled="true">
<el-button slot="append" icon="el-icon-search" @click="openCustomer" v-if="this.form.quotApprovalStatus == '0' || this.form.quotApprovalStatus == null"></el-button>
</el-input>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="联系电话" prop="quotPhone">
<el-input v-model="form.quotPhone" placeholder="请输入联系电话" :disabled="this.form.quotApprovalStatus != '0' && this.form.quotApprovalStatus != null"/>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="8">
<el-col :span="8">
<el-form-item label="询价日期" prop="quotInquiryDate">
<div class="el-p" style="width:100%">
<el-date-picker
style="width:100%"
v-model="form.quotInquiryDate"
type="datetime"
placeholder="系统自动生成"
:disabled="true">
</el-date-picker>
</div>
</el-form-item>
</el-col>
<el-col :span="16">
<el-form-item label="地址" prop="quotAddress">
<el-input type="textarea" autosize v-model="form.quotAddress" placeholder="请输入地址" :disabled="this.form.quotApprovalStatus != '0' && this.form.quotApprovalStatus != null"/>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="8">
<el-col :span="8">
<el-form-item label="报价日期" prop="quotQuotationDate">
<div class="el-p" style="width:100%">
<el-date-picker
style="width:100%"
v-model="form.quotQuotationDate"
type="datetime"
placeholder="报价组填写"
:disabled="true">
</el-date-picker>
</div>
</el-form-item>
</el-col>
<el-col :span="16">
<el-form-item label="项目名称" prop="quotProject">
<el-input type="textarea" autosize v-model="form.quotProject" placeholder="请输入项目名称" :disabled="this.form.quotApprovalStatus != '0' && this.form.quotApprovalStatus != null"/>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="8">
<el-col :span="24">
<el-form-item label="报价要求" prop="quotQuotationRequire">
<el-input type="textarea" autosize v-model="form.quotQuotationRequire" placeholder="请输入报价要求" :disabled="this.form.quotApprovalStatus != '0' && this.form.quotApprovalStatus != null"/>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="8" v-if="this.form.quotApprovalStatus != '0' && this.form.quotApprovalStatus != null">
<el-col :span="24">
<el-form-item label="反馈说明" prop="quotFeedbackExplanation">
<el-input type="textarea" autosize v-model="form.quotFeedbackExplanation" placeholder="报价组填写"/>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="8" v-if="this.form.quotApprovalStatus != '0' && this.form.quotApprovalStatus != null">
<el-col :span="12">
<el-form-item label="总数量" prop="quotQuantity">
<el-input v-model="form.quotQuantity"/>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="总价" prop="quotTotalPrice">
<el-input v-model="form.quotTotalPrice"/>
</el-form-item>
</el-col>
</el-row>
</el-tab-pane>
<el-tab-pane label="产品" name="matInfo">
<el-row :gutter="10" class="mb8">
<el-col :span="1.5">
<el-button type="primary" icon="el-icon-plus" size="mini" @click="handleAddQuotMaterial" v-if="this.form.quotApprovalStatus == '0' || this.form.quotApprovalStatus == null">添加</el-button>
</el-col>
<el-col :span="1.5">
<el-button type="danger" icon="el-icon-delete" size="mini" @click="handleDeleteQuotMaterial" v-if="this.form.quotApprovalStatus == '0' || this.form.quotApprovalStatus == null">删除</el-button>
</el-col>
<el-col :span="1.5">
<el-button type="info" plain icon="el-icon-upload2" size="mini" @click="handleImport" v-if="this.form.quotApprovalStatus == '0' || this.form.quotApprovalStatus == null">导入</el-button>
</el-col>
</el-row>
<el-table :data="quotMaterialList" show-summary :summary-method="getSummaries" :row-class-name="rowQuotMaterialIndex" @selection-change="handleQuotMaterialSelectionChange" ref="quotMaterial">
<el-table-column type="selection" width="80" align="center" />
<el-table-column label="序号" align="center" prop="index" width="50"/>
<el-table-column label="型号" prop="matXingh">
<template slot-scope="scope">
<el-input v-model="scope.row.matXingh" placeholder="请输入型号" />
</template>
</el-table-column>
<el-table-column label="规格" prop="matGuig">
<template slot-scope="scope">
<el-input v-model="scope.row.matGuig" placeholder="请输入规格" />
</template>
</el-table-column>
<el-table-column label="电压" prop="matDiany">
<template slot-scope="scope">
<el-input v-model="scope.row.matDiany" placeholder="请输入电压" />
</template>
</el-table-column>
<el-table-column label="单位" prop="matDanw">
<template slot-scope="scope">
<el-input v-model="scope.row.matDanw" placeholder="请输入单位" />
</template>
</el-table-column>
<el-table-column label="数量" prop="matSl">
<template slot-scope="scope">
<el-input v-model="scope.row.matSl" placeholder="请输入数量" />
</template>
</el-table-column>
</el-table>
</el-tab-pane>
<el-tab-pane label="询价附件" name="quotXjFile">
<div v-hasPermi="['quot:quot:quotXjFile']">
<el-upload class="upload-demo"
ref="upload"
name="quotFile"
:action="uploadUrl"
:headers="headers"
:data="{ relation_id: this.form.quotId,file_type: 'quotXjFile' }"
:on-success="handleAvatarSuccess"
:show-file-list="false"
:limit="1"
v-if="this.form.quotApprovalStatus == '0'">
<el-button size="small" type="primary">上传文件</el-button>
</el-upload>
</div>
<el-table class="down" :data="quotXjFileList" border stripe style="width: 100%;margin-top: 20px;" height="300px">
<el-table-column prop="fileName" label="文件名称" ></el-table-column>
<el-table-column prop="fileSize" label="文件大小" width="150px">
<template slot-scope="scope">
<span v-if="scope.row.fileSize / 1024 / 1024 < 1">{{(scope.row.fileSize / 1024).toFixed(2) + 'KB'}}</span>
<span v-else>{{(scope.row.fileSize / 1024 / 1024).toFixed(2) + 'MB'}}</span>
</template>
</el-table-column>
<el-table-column prop="fileTime" label="上传时间" width="200px"></el-table-column>
<el-table-column width="150px" label="操作">
<template slot-scope="scope">
<el-button :key="Math.random()" size="small" type="text">
<a @click="downloadFile(scope.row.fileUrl)">下载</a>
</el-button>
<el-button :key="Math.random()" size="small" type="text" v-if="form.quotApprovalStatus == '0'">
<a @click="deleteFile(scope.row.fileId)">删除</a>
</el-button>
</template>
</el-table-column>
</el-table>
</el-tab-pane>
<el-tab-pane label="技术协助" name="quotJsInfo" style="width:98%" v-if="checkPermi(['quot:quot:assist'])">
<el-row :gutter="8">
<el-col :span="8">
<el-form-item label="标准" prop="quotJsxzStandard">
<el-select v-model="form.quotJsxzStandard" :disabled="this.form.quotJsxzApprovalStatus != '0'">
<el-option
v-for="dict in dict.type.quot_jsxz_standard"
:key="dict.value"
:label="dict.label"
:value="dict.value"
/>
</el-select>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="技术协助状态" prop="quotJsxzApprovalStatus">
<el-select v-model="form.quotJsxzApprovalStatus" :disabled="true">
<el-option
v-for="dict in dict.type.quot_jsxz_approval_status"
:key="dict.value"
:label="dict.label"
:value="dict.value"
/>
</el-select>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="是否盖技术章" prop="quotJsxzChapter">
<el-select v-model="form.quotJsxzChapter" :disabled="this.form.quotJsxzApprovalStatus != '0'">
<el-option
v-for="dict in dict.type.quot_jsxz_chapter"
:key="dict.value"
:label="dict.label"
:value="dict.value"
/>
</el-select>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="8">
<el-col :span="12">
<el-form-item label="技术确认单号" prop="quotJsxzConfirmCode">
<el-link :underline="false" type="primary" @click="showJsqrDialog">{{form.quotJsxzConfirmCode}}</el-link>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="分组" prop="quotJsxzGroup">
<el-select v-model="form.quotJsxzGroup" multiple style="width: 100%" :disabled="this.form.quotJsxzApprovalStatus != '0'">
<el-option
v-for="dict in dict.type.quot_jsxz_group"
:key="dict.value"
:label="dict.label"
:value="dict.value">
</el-option>
</el-select>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="8">
<el-col :span="24">
<el-form-item label="技术要求" prop="quotJsxzTechnicalRequirement">
<el-input type="textarea" autosize v-model="form.quotJsxzTechnicalRequirement" placeholder="请输入技术要求" :disabled="this.form.quotJsxzApprovalStatus != '0'"/>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="8">
<el-col :span="24">
<el-divider content-position="center">技术规范要求(询价附件)</el-divider>
<div v-hasPermi="['quot:quot:quotJsgfFile']">
<el-upload class="upload-demo"
ref="upload"
name="quotFile"
:action="uploadUrl"
:headers="headers"
:data="{ relation_id: this.form.quotId,file_type: 'quotJsgfFile' }"
:on-success="handleAvatarSuccess"
:show-file-list="false"
:limit="1"
v-if="this.form.quotJsxzApprovalStatus == '0'">
<el-button size="small" type="primary">上传文件</el-button>
</el-upload>
</div>
<el-table class="down" :data="quotJsgfFileList" border stripe style="width: 100%;margin-top: 10px;" height="150px">
<el-table-column prop="fileName" label="文件名称" width="450px"></el-table-column>
<el-table-column prop="fileSize" label="文件大小" width="100px">
<template slot-scope="scope">
<span v-if="scope.row.fileSize / 1024 / 1024 < 1">{{(scope.row.fileSize / 1024).toFixed(2) + 'KB'}}</span>
<span v-else>{{(scope.row.fileSize / 1024 / 1024).toFixed(2) + 'MB'}}</span>
</template>
</el-table-column>
<el-table-column prop="fileTime" label="上传时间"></el-table-column>
<el-table-column width="150px" label="操作">
<template slot-scope="scope">
<el-button :key="Math.random()" size="small" type="text">
<a @click="downloadFile(scope.row.fileUrl)">下载</a>
</el-button>
<el-button :key="Math.random()" size="small" type="text" v-if="form.quotJsxzApprovalStatus == '0'">
<a @click="deleteFile(scope.row.fileId)">删除</a>
</el-button>
</template>
</el-table-column>
</el-table>
</el-col>
</el-row>
<div v-if="showTl">
<el-divider content-position="center">特缆协助</el-divider>
<el-row :gutter="8">
<el-col :span="8">
<el-form-item label="特缆协助状态" prop="quotJsqrTlApprovalStatus">
<el-select v-model="form.quotJsqrTlApprovalStatus" :disabled="true">
<el-option
v-for="dict in dict.type.quot_jsxz_approval_status"
:key="dict.value"
:label="dict.label"
:value="dict.value"
/>
</el-select>
</el-form-item>
</el-col>
<el-col :span="16">
<el-form-item label="特缆反馈附件">
<el-button size="mini" type="primary" @click="handleAddFile('quotJsqrTl')">上传文件 ({{this.quotJsqrTlFileNum}})</el-button>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="8">
<el-col :span="24">
<el-form-item label="特缆协助说明" prop="quotJsqrTlRemark">
<el-input type="textarea" autosize v-model="form.quotJsqrTlRemark" placeholder="技术部填写" :disabled="true"/>
</el-form-item>
</el-col>
</el-row>
</div>
<div v-if="showDy">
<el-divider content-position="center">低压协助</el-divider>
<el-row :gutter="8">
<el-col :span="8">
<el-form-item label="低压协助状态" prop="quotJsqrDyApprovalStatus">
<el-select v-model="form.quotJsqrDyApprovalStatus" :disabled="true">
<el-option
v-for="dict in dict.type.quot_jsxz_approval_status"
:key="dict.value"
:label="dict.label"
:value="dict.value"
/>
</el-select>
</el-form-item>
</el-col>
<el-col :span="16">
<el-form-item label="低压反馈附件">
<el-button size="mini" type="primary" @click="handleAddFile('quotJsqrDy')">上传文件 ({{this.quotJsqrDyFileNum}})</el-button>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="8">
<el-col :span="24">
<el-form-item label="低压协助说明" prop="quotJsqrDyRemark">
<el-input type="textarea" autosize v-model="form.quotJsqrDyRemark" placeholder="技术部填写" :disabled="true"/>
</el-form-item>
</el-col>
</el-row>
</div>
<div v-if="showZy">
<el-divider content-position="center">中压协助</el-divider>
<el-row :gutter="8">
<el-col :span="8">
<el-form-item label="中压协助状态" prop="quotJsqrZyApprovalStatus">
<el-select v-model="form.quotJsqrZyApprovalStatus" :disabled="true">
<el-option
v-for="dict in dict.type.quot_jsxz_approval_status"
:key="dict.value"
:label="dict.label"
:value="dict.value"
/>
</el-select>
</el-form-item>
</el-col>
<el-col :span="16">
<el-form-item label="中压反馈附件">
<el-button size="mini" type="primary" @click="handleAddFile('quotJsqrZy')">上传文件 ({{this.quotJsqrZyFileNum}})</el-button>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="8">
<el-col :span="24">
<el-form-item label="中压协助说明" prop="quotJsqrZyRemark">
<el-input type="textarea" autosize v-model="form.quotJsqrZyRemark" placeholder="技术部填写" :disabled="true"/>
</el-form-item>
</el-col>
</el-row>
</div>
<div v-if="showQt">
<el-divider content-position="center">其他协助</el-divider>
<el-row :gutter="8">
<el-col :span="8">
<el-form-item label="其他协助状态" prop="quotJsqrQtApprovalStatus">
<el-select v-model="form.quotJsqrQtApprovalStatus" :disabled="true">
<el-option
v-for="dict in dict.type.quot_jsxz_approval_status"
:key="dict.value"
:label="dict.label"
:value="dict.value"
/>
</el-select>
</el-form-item>
</el-col>
<el-col :span="16">
<el-form-item label="其他反馈附件">
<el-button size="mini" type="primary" @click="handleAddFile('quotJsqrQt')">上传文件 ({{this.quotJsqrQtFileNum}})</el-button>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="8">
<el-col :span="24">
<el-form-item label="其他协助说明" prop="quotJsqrQtRemark">
<el-input type="textarea" autosize v-model="form.quotJsqrQtRemark" placeholder="技术部填写" :disabled="true"/>
</el-form-item>
</el-col>
</el-row>
</div>
</el-tab-pane>
<el-tab-pane label="核价" name="quotHjInfo" style="width:98%" v-if="checkPermi(['quot:quot:assistHj'])">
<el-row :gutter="8">
<el-col :span="10">
<el-form-item label="核价单号" prop="quotHjCode">
<el-link :underline="false" type="primary" @click="showHjDialog">{{form.quotHjCode}}</el-link>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="核价日期" prop="quotHjPricingDate">
<div class="el-p" style="width:100%">
<el-date-picker
style="width:100%"
v-model="form.quotHjPricingDate"
type="datetime"
:disabled="true">
</el-date-picker>
</div>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="核价确认状态" prop="quotHjApprovalStatus">
<el-select v-model="form.quotHjApprovalStatus" :disabled="true">
<el-option
v-for="dict in dict.type.quot_hj_approval_status"
:key="dict.value"
:label="dict.label"
:value="dict.value"
/>
</el-select>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="8">
<el-col :span="24">
<el-form-item label="备注" prop="quotHjRemark">
<el-input type="textarea" autosize v-model="form.quotHjRemark" :disabled="true"/>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="8">
<el-col :span="24">
<el-divider content-position="center">核价附件</el-divider>
<el-table class="down" :data="quotHjFileList" border stripe style="width: 100%;" height="150px">
<el-table-column prop="fileName" label="文件名称" width="450px"></el-table-column>
<el-table-column prop="fileSize" label="文件大小" width="100px">
<template slot-scope="scope">
<span v-if="scope.row.fileSize / 1024 / 1024 < 1">{{(scope.row.fileSize / 1024).toFixed(2) + 'KB'}}</span>
<span v-else>{{(scope.row.fileSize / 1024 / 1024).toFixed(2) + 'MB'}}</span>
</template>
</el-table-column>
<el-table-column prop="fileTime" label="上传时间"></el-table-column>
<el-table-column width="150px" label="操作">
<template slot-scope="scope">
<el-button :key="Math.random()" size="small" type="text">
<a @click="downloadFile(scope.row.fileUrl)">下载</a>
</el-button>
</template>
</el-table-column>
</el-table>
</el-col>
</el-row>
</el-tab-pane>
<el-tab-pane label="反馈附件" name="quotFkFile" v-if="checkPermi(['quot:quot:assist','quot:quot:assistHj','quot:quot:add'])">
<div v-hasPermi="['quot:quot:quotFkFile']">
<el-upload class="upload-demo"
ref="upload"
name="quotFile"
:action="uploadUrl"
:headers="headers"
:data="{ relation_id: this.form.quotId,file_type: 'quotFkFile' }"
:on-success="handleAvatarSuccess"
:show-file-list="false"
:limit="1"
v-if="this.form.quotApprovalStatus == '1'">
<el-button size="small" type="primary">上传文件</el-button>
</el-upload>
</div>
<el-table class="down" :data="quotFkFileList" border stripe style="width: 100%;margin-top: 10px;" height="300px">
<el-table-column prop="fileName" label="文件名称"></el-table-column>
<el-table-column prop="fileSize" label="文件大小" width="150px">
<template slot-scope="scope">
<span v-if="scope.row.fileSize / 1024 / 1024 < 1">{{(scope.row.fileSize / 1024).toFixed(2) + 'KB'}}</span>
<span v-else>{{(scope.row.fileSize / 1024 / 1024).toFixed(2) + 'MB'}}</span>
</template>
</el-table-column>
<el-table-column prop="fileTime" label="上传时间" width="200px"></el-table-column>
<el-table-column width="150px" label="操作">
<template slot-scope="scope">
<el-button size="small" type="text">
<a @click="downloadFile(scope.row.fileUrl)">下载</a>
</el-button>
<el-button size="small" type="text" @click="deleteFile(scope.row.fileId)" v-if="form.quotApprovalStatus == '1'">删除</el-button>
</template>
</el-table-column>
</el-table>
</el-tab-pane>
</el-tabs>-->
<!-- 特缆中压低压其他协助反馈附件对话框 --> <!-- 特缆中压低压其他协助反馈附件对话框 -->
<el-dialog custom-class="fkfjDialog" :title="addFileTitle" :visible.sync="addFileOpen" width="800px" append-to-body> <el-dialog custom-class="fkfjDialog" :title="addFileTitle" :visible.sync="addFileOpen" width="800px" append-to-body>
<!--<el-upload class="upload-demo" <!--<el-upload class="upload-demo"
@ -1386,7 +873,7 @@
</style> </style>
<script> <script>
import { NumberAdd } from '@/utils/number';// import { NumberAdd } from '@/utils/number';//
import { changQuotPrintStatus,listQuot, getQuot, getReturnUpdateQuot, delQuot, addQuot, updateQuot, quotFileList, quotFileDelete, commitQuot, commitJsQuot, commitHjQuot, commitJswQuot, feedbackQuot, madeQuot, rejectQuot } from "@/api/quot/quot"; import { changQuotPrintStatus,listQuot, getQuot, getReturnUpdateQuot, delQuot, addQuot, updateQuot, quotFileList, quotFileDelete, commitQuot, commitJsQuot, commitHjQuot, commitJswQuot, commitOAQuot, feedbackQuot, madeQuot, rejectQuot } from "@/api/quot/quot";
import { getToken } from "@/utils/auth"; import { getToken } from "@/utils/auth";
import { checkPermi,checkRole } from '@/utils/permission';// import { checkPermi,checkRole } from '@/utils/permission';//
import { getDicts } from "@/api/system/dict/data"; import { getDicts } from "@/api/system/dict/data";
@ -1412,7 +899,7 @@ export default {
'jsqrDialog': jsqrDialog, 'jsqrDialog': jsqrDialog,
'hjDialog': hjDialog 'hjDialog': hjDialog
}, },
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'], 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() { data() {
return { return {
// //
@ -1801,6 +1288,16 @@ export default {
}); });
}, },
/** 报价组提交金OA按钮 */
commitOAForm() {
this.form.quotMaterialList = this.quotMaterialList;
commitOAQuot(this.form).then(response => {
this.$modal.msgSuccess("提交OA成功");
this.open = false;
this.getList();
});
},
/** 报价组报价单提交反馈按钮 */ /** 报价组报价单提交反馈按钮 */
feedbackQuotForm() { feedbackQuotForm() {
var quotFkFileNum = this.quotFkFileList.length; var quotFkFileNum = this.quotFkFileList.length;
@ -1907,8 +1404,8 @@ export default {
return; return;
} }
const values = data.map(item => Number(item[column.property])); const values = data.map(item => Number(item[column.property]));
// amount
if (column.property === 'matSl') { if (column.property === 'matSl' || column.property === 'matQuotAllPrice') {
if (!values.every(value => isNaN(value))) { if (!values.every(value => isNaN(value))) {
sums[index] = values.reduce((prev, curr) => { sums[index] = values.reduce((prev, curr) => {
const value = Number(curr); const value = Number(curr);
@ -1924,6 +1421,7 @@ export default {
} }
}); });
this.form.quotQuantity = sums[6]; this.form.quotQuantity = sums[6];
this.form.quotTotalPrice = sums[8];
return sums; return sums;
}, },