This commit is contained in:
xd 2024-06-17 12:49:35 +08:00
parent dc84e89bcd
commit 14c1c2bfd1
17 changed files with 375 additions and 76 deletions

View File

@ -157,6 +157,35 @@ public class QuotController extends BaseController
return success(quot); return success(quot);
} }
/**
* 获取报价详细信息-整单通过
*/
@PreAuthorize("@ss.hasPermi('quot:quot:allPass')")
@GetMapping(value = "/allPass/{quotId}")
@Log(title = "报价单-手动更新状态为通过", businessType = BusinessType.UPDATE)
public AjaxResult getAllPassInfo(@PathVariable("quotId") String quotId)
{
Quot quot = quotService.selectQuotByQuotId(quotId);
quot.setQuotApprovalStatus("2");// 提交状态设置为 通过
quot.setQuotQuotationDate(DateUtils.getNowDate());//报价单-报价日期设置为 当前日期
quot.setQuotCheckUserName(getUsername());
quotService.updateQuot(quot);
return success(quot);
}
/**
* 获取报价详细信息-整单驳回
*/
@PreAuthorize("@ss.hasPermi('quot:quot:allReject')")
@PostMapping(value = "/allReject")
@Log(title = "报价单-手动更新状态为驳回", businessType = BusinessType.UPDATE)
public AjaxResult getAllRejectInfo(@RequestBody Quot quot)
{
quot.setQuotApprovalStatus("3");// 提交状态设置为 驳回
quotService.updateQuot(quot);
return success(quot);
}
/** /**
* 导出产品明细模板 * 导出产品明细模板
* @param response * @param response

View File

@ -275,7 +275,7 @@ public class RedBookController extends BaseController
} }
/** /**
* 导出产品明细模板 * 导出产品明细模板-型号规格电压数量
* @param response * @param response
*/ */
@PostMapping("/importTemplate") @PostMapping("/importTemplate")
@ -286,7 +286,7 @@ public class RedBookController extends BaseController
} }
/** /**
* 导入产品明细 * 导入产品明细-型号规格电压数量
* @param file * @param file
* @param updateSupport * @param updateSupport
* @return * @return
@ -332,7 +332,9 @@ public class RedBookController extends BaseController
} }
System.out.println("开始时间:" + DateUtils.getTime()); System.out.println("开始时间:" + DateUtils.getTime());
List<List<OAQuotProductTemplate>> list = ListSplitUtil.averageList(tempList,10); //List<List<OAQuotProductTemplate>> list = ListSplitUtil.averageList(tempList,10);
List<List<OAQuotProductTemplate>> list = ListSplitUtil.partList(tempList,20);
List<OAQuotProduct> OAQuotProducts = new ArrayList<>(); List<OAQuotProduct> OAQuotProducts = new ArrayList<>();
//定义一个存所有线程回调函数的list //定义一个存所有线程回调函数的list
@ -363,6 +365,85 @@ public class RedBookController extends BaseController
return success(OAQuotProducts); return success(OAQuotProducts);
} }
/**
* 导出产品明细模板-品名型号
* @param response
*/
@PostMapping("/importTemplate2")
public void importTemplate2(HttpServletResponse response)
{
ExcelUtil<OAQuotProductTemplate2> util = new ExcelUtil<OAQuotProductTemplate2>(OAQuotProductTemplate2.class);
util.importTemplateExcel(response, "产品数据");
}
/**
* 导入产品明细-品名型号
* @param file
* @param updateSupport
* @return
* @throws Exception
*/
@PostMapping("/importData2")
public AjaxResult importData2(String rbUid, MultipartFile file, boolean updateSupport) throws Exception
{
ExcelUtil<OAQuotProductTemplate2> util = new ExcelUtil<OAQuotProductTemplate2>(OAQuotProductTemplate2.class);
List<OAQuotProductTemplate2> tempList = util.importExcel(file.getInputStream());
if(tempList.size()==0){
return error("导入文件无产品明细数据");
}else if(tempList.size()>200){
return error("最多导入200条");
}
int index = 1;
for(OAQuotProductTemplate2 temp:tempList){
temp.setIndex(index);
temp.setRbUid(rbUid);
String name_0 = temp.getName_0();
if(StringUtils.isNotBlank(name_0)){
name_0 = name_0.trim();
name_0 = name_0.replace(" "," ");
name_0 = name_0.toUpperCase();
temp.setName_0(name_0);
}
index++;
}
System.out.println("开始时间:" + DateUtils.getTime());
//List<List<OAQuotProductTemplate>> list = ListSplitUtil.averageList(tempList,10);
List<List<OAQuotProductTemplate2>> list = ListSplitUtil.partList(tempList,20);
List<OAQuotProduct> OAQuotProducts = new ArrayList<>();
//定义一个存所有线程回调函数的list
List<Future<List<OAQuotProduct>>> futureList=new ArrayList<>();
int num = 1;
for(List<OAQuotProductTemplate2> lt:list){
futureList.add(asyncRbTaskService.executeAsyncTask3("线程"+num+""+lt.size()+"条】",lt));
num++;
}
//判断进程是否全部结束**
while (true){
//回调信息空了就结束**
if (futureList.isEmpty()){
break;
}
for (int i = 0; i < futureList.size(); i++) {
if (futureList.get(i).isDone()){
OAQuotProducts.addAll(futureList.get(i).get());
//判断线程结束输出回调信息并将该回调清除
futureList.remove(i);
}else {
continue;
}
}
}
System.out.println("结束时间:" + DateUtils.getTime());
Collections.sort(OAQuotProducts);
return success(OAQuotProducts);
}
/** /**
* 获取调价日期 * 获取调价日期
* @param oAQuot * @param oAQuot

View File

@ -359,8 +359,8 @@ public class excelUtil {
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/"+quot.getQuotCode()+".png"); File jnlogo_file = new File("logon/"+IdUtils.createNo("jnlogo_",3)+".png");
File wc_file = new File("logon/"+quot.getQuotCode()+".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);

View File

@ -31,7 +31,7 @@ server:
uri-encoding: UTF-8 uri-encoding: UTF-8
# 连接数满后的排队数默认为100 # 连接数满后的排队数默认为100
accept-count: 1000 accept-count: 1000
connection-timeout: 120s connection-timeout: 600s
threads: threads:
# tomcat最大线程数默认为200 # tomcat最大线程数默认为200
max: 800 max: 800
@ -110,7 +110,7 @@ token:
# 令牌密钥 # 令牌密钥
secret: abcdefghijklmnopqrstuvwxyz secret: abcdefghijklmnopqrstuvwxyz
# 令牌有效期默认30分钟 # 令牌有效期默认30分钟
expireTime: 30 expireTime: 60
# MyBatis配置 # MyBatis配置
mybatis: mybatis:

View File

@ -13,7 +13,7 @@ import org.springframework.stereotype.Component;
/** /**
* websocket 消息处理 * websocket 消息处理
* *
* @author ruoyi * @author ruoyi
*/ */
@Component @Component
@ -28,7 +28,7 @@ public class WebSocketServer
/** /**
* 默认最多允许同时在线人数100 * 默认最多允许同时在线人数100
*/ */
public static int socketMaxOnlineCount = 100; public static int socketMaxOnlineCount = 10000;
private static final Semaphore SOCKET_SEMAPHORE = new Semaphore(socketMaxOnlineCount); private static final Semaphore SOCKET_SEMAPHORE = new Semaphore(socketMaxOnlineCount);

View File

@ -0,0 +1,41 @@
package com.ruoyi.redBook.domain;
import com.ruoyi.common.annotation.Excel;
import java.math.BigDecimal;
public class OAQuotProductTemplate2 {
private Integer index;
private String rbUid;
@Excel(name = "品名型号")
private String name_0;//品名型号
@Excel(name = "数量")
private BigDecimal count;//数量
public Integer getIndex() { return index; }
public void setIndex(Integer index) { this.index = index; }
public String getRbUid() { return rbUid; }
public void setRbUid(String rbUid) { this.rbUid = rbUid; }
public String getName_0() {
return name_0;
}
public void setName_0(String name_0) {
this.name_0 = name_0;
}
public BigDecimal getCount() {
return count;
}
public void setCount(BigDecimal count) {
this.count = count;
}
}

View File

@ -117,14 +117,22 @@ public interface OARedBookMapper
String getFixDatePrice(@Param("name_0") String name_0,@Param("spec") String spec,@Param("voltage") String voltage, @Param("uid_0") String uid_0); String getFixDatePrice(@Param("name_0") String name_0,@Param("spec") String spec,@Param("voltage") String voltage, @Param("uid_0") String uid_0);
/** /**
* 导入明细批量获取红本价格 * 导入明细批量获取红本价格-型号规格电压数量
* @param name_0 * @param name_1
* @param spec * @param spec
* @param rbUid * @param rbUid
* @return * @return
*/ */
OAQuotProduct getFixDatePrice2(@Param("name_1") String name_1, @Param("spec") String spec, @Param("voltage") String voltage, @Param("uid_0") String rbUid); OAQuotProduct getFixDatePrice2(@Param("name_1") String name_1, @Param("spec") String spec, @Param("voltage") String voltage, @Param("uid_0") String rbUid);
/**
* 导入明细批量获取红本价格-品名型号
* @param name_0
* @param rbUid
* @return
*/
OAQuotProduct getFixDatePrice3(@Param("name_0") String name_0, @Param("uid_0") String rbUid);
/** /**
* 查询已生成的报价单列表 * 查询已生成的报价单列表
* @param oaQuot * @param oaQuot

View File

@ -141,12 +141,20 @@ public interface IRedBookService
List<OAQuotProduct> setRedBookPrice(List<OAQuotProduct> list); List<OAQuotProduct> setRedBookPrice(List<OAQuotProduct> list);
/** /**
* 导入明细批量获取红本价格 * 导入明细批量获取红本价格-型号规格电压数量
* @param list * @param list
* @return * @return
*/ */
List<OAQuotProduct> setRedBookPrice2(List<OAQuotProductTemplate> list); List<OAQuotProduct> setRedBookPrice2(List<OAQuotProductTemplate> list);
/**
* 导入明细批量获取红本价格-品名型号
* @param list
* @return
*/
List<OAQuotProduct> setRedBookPrice3(List<OAQuotProductTemplate2> list);
/** /**
* 获取单据编号 * 获取单据编号
* @param type * @param type

View File

@ -3,6 +3,7 @@ package com.ruoyi.redBook.service.impl;
import com.ruoyi.common.utils.DateUtils; import com.ruoyi.common.utils.DateUtils;
import com.ruoyi.redBook.domain.OAQuotProduct; import com.ruoyi.redBook.domain.OAQuotProduct;
import com.ruoyi.redBook.domain.OAQuotProductTemplate; import com.ruoyi.redBook.domain.OAQuotProductTemplate;
import com.ruoyi.redBook.domain.OAQuotProductTemplate2;
import com.ruoyi.redBook.service.IRedBookService; import com.ruoyi.redBook.service.IRedBookService;
import org.springframework.scheduling.annotation.Async; import org.springframework.scheduling.annotation.Async;
import org.springframework.scheduling.annotation.AsyncResult; import org.springframework.scheduling.annotation.AsyncResult;
@ -32,7 +33,7 @@ public class AsyncRbTaskService {
} }
/** /**
* 导入明细批量获取红本价格 * 导入明细批量获取红本价格-型号规格电压数量
* @param threadname * @param threadname
* @param list * @param list
* @return * @return
@ -44,5 +45,19 @@ public class AsyncRbTaskService {
System.out.println(threadname+"结束时间:" + DateUtils.getTime()); System.out.println(threadname+"结束时间:" + DateUtils.getTime());
return new AsyncResult<>( OAQuotProducts); return new AsyncResult<>( OAQuotProducts);
} }
/**
* 导入明细批量获取红本价格-品名型号
* @param threadname
* @param list
* @return
*/
@Async
public Future<List<OAQuotProduct>> executeAsyncTask3(String threadname, List<OAQuotProductTemplate2> list) {
System.out.println(threadname+"开始时间:" + DateUtils.getTime());
List<OAQuotProduct> OAQuotProducts = iRedBookService.setRedBookPrice3(list);
System.out.println(threadname+"结束时间:" + DateUtils.getTime());
return new AsyncResult<>( OAQuotProducts);
}
} }

View File

@ -208,12 +208,17 @@ public class RedBookServiceImpl implements IRedBookService
for(OAQuotProduct oAQuotProduct : list){ for(OAQuotProduct oAQuotProduct : list){
String price = oaRedBookMapper.getFixDatePrice(oAQuotProduct.getName_0(),oAQuotProduct.getSpec(),oAQuotProduct.getVoltage(),oAQuotProduct.getUid_0()); String price = oaRedBookMapper.getFixDatePrice(oAQuotProduct.getName_0(),oAQuotProduct.getSpec(),oAQuotProduct.getVoltage(),oAQuotProduct.getUid_0());
oAQuotProduct.setPrice(price); oAQuotProduct.setPrice(price);
if(StringUtils.isEmpty(price)){
oAQuotProduct.setName_1("");
oAQuotProduct.setVoltage("");
oAQuotProduct.setStu("");
}
} }
return list; return list;
} }
/** /**
* 导入明细批量获取红本价格 * 导入明细批量获取红本价格-型号规格电压数量
* @param list * @param list
* @return * @return
*/ */
@ -224,19 +229,44 @@ public class RedBookServiceImpl implements IRedBookService
OAQuotProduct oAQuotProduct = new OAQuotProduct(); OAQuotProduct oAQuotProduct = new OAQuotProduct();
for(OAQuotProductTemplate oAQuotProductTemplate : list){ for(OAQuotProductTemplate oAQuotProductTemplate : list){
OAQuotProduct rbProduct = oaRedBookMapper.getFixDatePrice2(oAQuotProductTemplate.getName_1(),oAQuotProductTemplate.getSpec(),oAQuotProductTemplate.getVoltage(),oAQuotProductTemplate.getRbUid()); OAQuotProduct rbProduct = oaRedBookMapper.getFixDatePrice2(oAQuotProductTemplate.getName_1(),oAQuotProductTemplate.getSpec(),oAQuotProductTemplate.getVoltage(),oAQuotProductTemplate.getRbUid());
if(rbProduct!=null){ oAQuotProduct = new OAQuotProduct();
oAQuotProduct = new OAQuotProduct(); oAQuotProduct.setIndex(oAQuotProductTemplate.getIndex());
oAQuotProduct.setIndex(oAQuotProductTemplate.getIndex()); oAQuotProduct.setUid_0(oAQuotProductTemplate.getRbUid());
oAQuotProduct.setUid_0(rbProduct.getUid_0()); oAQuotProduct.setName_0(rbProduct!=null?rbProduct.getName_0():"");
oAQuotProduct.setName_0(rbProduct.getName_0()); oAQuotProduct.setName_1(oAQuotProductTemplate.getName_1());
oAQuotProduct.setName_1(oAQuotProductTemplate.getName_1()); oAQuotProduct.setSpec(oAQuotProductTemplate.getSpec());
oAQuotProduct.setSpec(oAQuotProductTemplate.getSpec()); oAQuotProduct.setVoltage(rbProduct!=null?rbProduct.getVoltage():"");
oAQuotProduct.setVoltage(rbProduct.getVoltage()); oAQuotProduct.setStu(rbProduct!=null?rbProduct.getStu():"");
oAQuotProduct.setStu(rbProduct.getStu()); oAQuotProduct.setPrice(rbProduct!=null?rbProduct.getPrice():"");
oAQuotProduct.setPrice(rbProduct.getPrice()); oAQuotProduct.setCount(oAQuotProductTemplate.getCount());
oAQuotProduct.setCount(oAQuotProductTemplate.getCount()); OAQuotProducts.add(oAQuotProduct);
OAQuotProducts.add(oAQuotProduct); }
} return OAQuotProducts;
}
/**
* 导入明细批量获取红本价格-品名型号
* @param list
* @return
*/
@Override
@DataSource(DataSourceType.OAREDBOOK)
public List<OAQuotProduct> setRedBookPrice3(List<OAQuotProductTemplate2> list) {
List<OAQuotProduct> OAQuotProducts = new ArrayList<>();
OAQuotProduct oAQuotProduct = new OAQuotProduct();
for(OAQuotProductTemplate2 oAQuotProductTemplate : list){
OAQuotProduct rbProduct = oaRedBookMapper.getFixDatePrice3(oAQuotProductTemplate.getName_0(),oAQuotProductTemplate.getRbUid());
oAQuotProduct = new OAQuotProduct();
oAQuotProduct.setIndex(oAQuotProductTemplate.getIndex());
oAQuotProduct.setUid_0(oAQuotProductTemplate.getRbUid());
oAQuotProduct.setName_0(oAQuotProductTemplate.getName_0());
oAQuotProduct.setName_1(rbProduct!=null?rbProduct.getName_1():"");
oAQuotProduct.setSpec(rbProduct!=null?rbProduct.getSpec():"");
oAQuotProduct.setVoltage(rbProduct!=null?rbProduct.getVoltage():"品名不规范");
oAQuotProduct.setStu(rbProduct!=null?rbProduct.getStu():"");
oAQuotProduct.setPrice(rbProduct!=null?rbProduct.getPrice():"");
oAQuotProduct.setCount(oAQuotProductTemplate.getCount());
OAQuotProducts.add(oAQuotProduct);
} }
return OAQuotProducts; return OAQuotProducts;
} }

View File

@ -144,7 +144,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<!-- 数据范围过滤 --> <!-- 数据范围过滤 -->
${params.dataScope} ${params.dataScope}
</where> </where>
order by a.quot_code desc order by a.quot_inquiry_date desc
</select> </select>
<select id="selectQuotListCount" resultType="String"> <select id="selectQuotListCount" resultType="String">

View File

@ -183,6 +183,16 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
and (B.sta_0=1 or sta_0=0) and (B.sta_0=1 or sta_0=0)
</select> </select>
<select id="getFixDatePrice3" resultType="OAQuotProduct">
select top 1 B.uid_0,A.namevoltage name_0,isnull(A.电压等级,N' - ') voltage,A.单位 stu,
A.型号 name_1,isnull(A.规格,'') spec
,convert(decimal,convert(float,A.红本价格)) price,convert(varchar(10),B.date_0,23) pricedate
from [rb_product_price] A
left join rb_productVersion B on A.version_uid_0=B.uid_0
where (B.sta_0=1 or sta_0=0) and A.namevoltage=#{name_0}
and B.uid_0 = #{uid_0}
</select>
<sql id="quotsJoins"> <sql id="quotsJoins">
LEFT JOIN sys_user u on u.user_name=a.create_by LEFT JOIN sys_user u on u.user_name=a.create_by
LEFT JOIN sys_dept d on u.dept_id = d.dept_id LEFT JOIN sys_dept d on u.dept_id = d.dept_id

View File

@ -39,6 +39,23 @@ export function getReturnUpdateQuot(quotId) {
}) })
} }
// 查询报价详细-整单通过
export function getAllPass(quotId) {
return request({
url: '/quot/quot/allPass/' + quotId,
method: 'get'
})
}
// 查询报价详细-整单驳回
export function getAllReject(query) {
return request({
url: '/quot/quot/allReject',
method: 'post',
data: query
})
}
// 新增报价 // 新增报价
export function addQuot(data) { export function addQuot(data) {
return request({ return request({

View File

@ -147,7 +147,7 @@
}, },
mounted() { mounted() {
// WebSocket // WebSocket
this.initWebSocket(); //this.initWebSocket();
}, },
created(){ created(){
this.getList(); this.getList();

View File

@ -18,7 +18,7 @@ const service = axios.create({
// axios中请求配置有baseURL选项表示请求URL公共部分 // axios中请求配置有baseURL选项表示请求URL公共部分
baseURL: process.env.VUE_APP_BASE_API, baseURL: process.env.VUE_APP_BASE_API,
// 超时 // 超时
timeout: 300000 timeout: 720000
}) })
// request拦截器 // request拦截器

View File

@ -113,6 +113,28 @@
v-hasPermi="['quot:quot:returnUpdate']" v-hasPermi="['quot:quot:returnUpdate']"
>错误修订</el-button> >错误修订</el-button>
</el-col> </el-col>
<el-col :span="1.5">
<el-button
type="warning"
plain
icon="el-icon-edit"
size="mini"
:disabled="single"
@click="handleAllPass"
v-hasPermi="['quot:quot:allPass']"
>整单通过</el-button>
</el-col>
<el-col :span="1.5">
<el-button
type="warning"
plain
icon="el-icon-edit"
size="mini"
:disabled="single"
@click="handleAllReject"
v-hasPermi="['quot:quot:allReject']"
>整单驳回</el-button>
</el-col>
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar> <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
</el-row> </el-row>
@ -129,29 +151,6 @@
<dict-tag :options="dict.type.quot_approval_status" :value="scope.row.quotApprovalStatus"/> <dict-tag :options="dict.type.quot_approval_status" :value="scope.row.quotApprovalStatus"/>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="业务员" align="center" prop="quotSalesmanName" width="150px"/>
<el-table-column label="客户名称" align="center" prop="quotCustomerName" width="250px"/>
<el-table-column label="项目名称" align="center" prop="quotProject" width="250px"/>
<el-table-column label="金思维提交状态" align="center" prop="quotJsxzApprovalStatus" width="150px" v-if="checkRole(['QUOT'])">
<template slot-scope="scope">
<dict-tag :options="dict.type.quot_jsw_approval_status" :value="scope.row.quotJswApprovalStatus" v-if="scope.row.quotJswApprovalStatus!=0"/>
</template>
</el-table-column>
<el-table-column label="OA提交状态" align="center" prop="quotJsxzApprovalStatus" width="150px" v-if="checkRole(['QUOT'])">
<template slot-scope="scope">
<dict-tag :options="dict.type.quot_oa_approval_status" :value="scope.row.quotOAApprovalStatus" v-if="scope.row.quotOAApprovalStatus!=0"/>
</template>
</el-table-column>
<el-table-column label="技术协助状态" align="center" prop="quotJsxzApprovalStatus" width="150px" v-if="checkRole(['QUOT'])">
<template slot-scope="scope">
<dict-tag :options="dict.type.quot_jsxz_approval_status" :value="scope.row.quotJsxzApprovalStatus" v-if="scope.row.quotJsxzApprovalStatus!=0"/>
</template>
</el-table-column>
<el-table-column label="核价协助状态" align="center" prop="quotHjApprovalStatus" width="150px" v-if="checkRole(['QUOT'])">
<template slot-scope="scope">
<dict-tag :options="dict.type.quot_hj_approval_status" :value="scope.row.quotHjApprovalStatus" v-if="scope.row.quotHjApprovalStatus!=0"/>
</template>
</el-table-column>
<el-table-column label="是否打印" align="center" prop="quotPrint" v-if="$auth.hasPermi('quot:quot:changQuotPrintStatus')"> <el-table-column label="是否打印" align="center" prop="quotPrint" v-if="$auth.hasPermi('quot:quot:changQuotPrintStatus')">
<template slot-scope="scope"> <template slot-scope="scope">
<el-switch <el-switch
@ -164,7 +163,30 @@
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="打印人" align="center" prop="quotPrintUserName" width="150px" v-if="$auth.hasPermi('quot:quot:changQuotPrintStatus')"/> <el-table-column label="打印人" align="center" prop="quotPrintUserName" width="150px" v-if="$auth.hasPermi('quot:quot:changQuotPrintStatus')"/>
<el-table-column label="金思维报价单号" align="center" prop="quotJswCode" width="280px" v-if="checkRole(['QUOT'])"/> <el-table-column label="业务员" align="center" prop="quotSalesmanName" width="150px"/>
<el-table-column label="客户名称" align="center" prop="quotCustomerName" width="250px"/>
<el-table-column label="项目名称" align="center" prop="quotProject" width="250px"/>
<el-table-column label="金思维提交状态" align="center" prop="quotJsxzApprovalStatus" width="150px" v-if="checkRole(['QUOT','PRICE_VERIFICATION'])">
<template slot-scope="scope">
<dict-tag :options="dict.type.quot_jsw_approval_status" :value="scope.row.quotJswApprovalStatus" v-if="scope.row.quotJswApprovalStatus!=0"/>
</template>
</el-table-column>
<el-table-column label="OA提交状态" align="center" prop="quotJsxzApprovalStatus" width="150px" v-if="checkRole(['QUOT','PRICE_VERIFICATION'])">
<template slot-scope="scope">
<dict-tag :options="dict.type.quot_oa_approval_status" :value="scope.row.quotOAApprovalStatus" v-if="scope.row.quotOAApprovalStatus!=0"/>
</template>
</el-table-column>
<el-table-column label="技术协助状态" align="center" prop="quotJsxzApprovalStatus" width="150px" v-if="checkRole(['QUOT','PRICE_VERIFICATION'])">
<template slot-scope="scope">
<dict-tag :options="dict.type.quot_jsxz_approval_status" :value="scope.row.quotJsxzApprovalStatus" v-if="scope.row.quotJsxzApprovalStatus!=0"/>
</template>
</el-table-column>
<el-table-column label="核价协助状态" align="center" prop="quotHjApprovalStatus" width="150px" v-if="checkRole(['QUOT','PRICE_VERIFICATION'])">
<template slot-scope="scope">
<dict-tag :options="dict.type.quot_hj_approval_status" :value="scope.row.quotHjApprovalStatus" v-if="scope.row.quotHjApprovalStatus!=0"/>
</template>
</el-table-column>
<el-table-column label="金思维报价单号" align="center" prop="quotJswCode" width="280px" v-if="checkRole(['QUOT','PRICE_VERIFICATION'])"/>
<el-table-column label="询价日期" align="center" prop="quotInquiryDate" width="160"> <el-table-column label="询价日期" align="center" prop="quotInquiryDate" width="160">
<template slot-scope="scope"> <template slot-scope="scope">
<span>{{ parseTime(scope.row.quotInquiryDate) }}</span> <span>{{ parseTime(scope.row.quotInquiryDate) }}</span>
@ -208,17 +230,17 @@
</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="4"> <el-col :span="4" v-if="!checkRole(['SALES_MAN'])">
<el-form-item label="技术协助" prop="quotJsxzApprovalStatus"> <el-form-item label="技术协助" prop="quotJsxzApprovalStatus">
<dict-tag :options="dict.type.quot_approval_status" :value="this.form.quotJsxzApprovalStatus"/> <dict-tag :options="dict.type.quot_approval_status" :value="this.form.quotJsxzApprovalStatus"/>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="4"> <el-col :span="4" v-if="!checkRole(['SALES_MAN'])">
<el-form-item label="核价协助" prop="quotHjApprovalStatus"> <el-form-item label="核价协助" prop="quotHjApprovalStatus">
<dict-tag :options="dict.type.quot_approval_status" :value="this.form.quotHjApprovalStatus"/> <dict-tag :options="dict.type.quot_approval_status" :value="this.form.quotHjApprovalStatus"/>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="4"> <el-col :span="4" v-if="!checkRole(['SALES_MAN'])">
<el-form-item label="金思维协助" prop="quotJswApprovalStatus"> <el-form-item label="金思维协助" prop="quotJswApprovalStatus">
<dict-tag :options="dict.type.quot_jsw_approval_status" :value="this.form.quotJswApprovalStatus"/> <dict-tag :options="dict.type.quot_jsw_approval_status" :value="this.form.quotJswApprovalStatus"/>
</el-form-item> </el-form-item>
@ -367,14 +389,14 @@
</el-form-item> </el-form-item>
</el-col> </el-col>
</el-row> </el-row>
<el-row :gutter="8" v-if="checkRole(['QUOT','SALES_MAN'])"> <el-row :gutter="8" v-if="checkRole(['QUOT','PRICE_VERIFICATION','SALES_MAN'])">
<el-col :span="24" v-if="this.form.quotApprovalStatus != '0' && this.form.quotApprovalStatus != null"> <el-col :span="24" v-if="this.form.quotApprovalStatus != '0' && this.form.quotApprovalStatus != null">
<el-form-item label="反馈说明" prop="quotFeedbackExplanation"> <el-form-item label="反馈说明" prop="quotFeedbackExplanation">
<el-input type="textarea" autosize v-model="form.quotFeedbackExplanation" placeholder="报价组填写" :disabled="this.form.quotApprovalStatus == 2"/> <el-input type="textarea" autosize v-model="form.quotFeedbackExplanation" placeholder="报价组填写" :disabled="this.form.quotApprovalStatus == 2"/>
</el-form-item> </el-form-item>
</el-col> </el-col>
</el-row> </el-row>
<el-row :gutter="8" v-if="checkRole(['QUOT'])"> <el-row :gutter="8" v-if="checkRole(['QUOT','PRICE_VERIFICATION'])">
<el-col :span="24" v-if="this.form.quotOAApprovalStatus == '2' || this.form.quotOAApprovalStatus == '3'"> <el-col :span="24" v-if="this.form.quotOAApprovalStatus == '2' || this.form.quotOAApprovalStatus == '3'">
<el-form-item label="OA审批说明" prop="quotOAApprovalStatusRemark"> <el-form-item label="OA审批说明" prop="quotOAApprovalStatusRemark">
<el-input type="textarea" autosize v-model="form.quotOAApprovalStatusRemark" :disabled="true"/> <el-input type="textarea" autosize v-model="form.quotOAApprovalStatusRemark" :disabled="true"/>
@ -576,7 +598,7 @@
<div v-if="checkPermi(['quot:quot:jsxzInfo'])"> <div v-if="checkPermi(['quot:quot:jsxzInfo'])">
<el-divider content-position="left" class="customer_divider_text">技术协助</el-divider> <el-divider content-position="left" class="customer_divider_text">技术协助</el-divider>
<el-row :gutter="8"> <el-row :gutter="8">
<el-col :span="8"> <!--<el-col :span="8">
<el-form-item label="标准" prop="quotJsxzStandard"> <el-form-item label="标准" prop="quotJsxzStandard">
<el-select v-model="form.quotJsxzStandard" :disabled="this.form.quotJsxzApprovalStatus != '0'"> <el-select v-model="form.quotJsxzStandard" :disabled="this.form.quotJsxzApprovalStatus != '0'">
<el-option <el-option
@ -587,7 +609,7 @@
/> />
</el-select> </el-select>
</el-form-item> </el-form-item>
</el-col> </el-col>-->
<el-col :span="8"> <el-col :span="8">
<el-form-item label="技术协助状态" prop="quotJsxzApprovalStatus"> <el-form-item label="技术协助状态" prop="quotJsxzApprovalStatus">
<el-select v-model="form.quotJsxzApprovalStatus" :disabled="true"> <el-select v-model="form.quotJsxzApprovalStatus" :disabled="true">
@ -600,7 +622,7 @@
</el-select> </el-select>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="8"> <!--<el-col :span="8">
<el-form-item label="是否盖技术章" prop="quotJsxzChapter"> <el-form-item label="是否盖技术章" prop="quotJsxzChapter">
<el-select v-model="form.quotJsxzChapter" :disabled="this.form.quotJsxzApprovalStatus != '0'"> <el-select v-model="form.quotJsxzChapter" :disabled="this.form.quotJsxzApprovalStatus != '0'">
<el-option <el-option
@ -611,7 +633,7 @@
/> />
</el-select> </el-select>
</el-form-item> </el-form-item>
</el-col> </el-col>-->
</el-row> </el-row>
<el-row :gutter="8"> <el-row :gutter="8">
<el-col :span="12"> <el-col :span="12">
@ -914,7 +936,7 @@
<span style="margin-left: 10px" v-hasPermi="['quot:quot:assistHj']"><el-button type="primary" plain @click="commitHjForm" v-if="this.form.quotApprovalStatus == '1'&&this.form.quotHjApprovalStatus == '0'">提交核价审核</el-button></span> <span style="margin-left: 10px" v-hasPermi="['quot:quot:assistHj']"><el-button type="primary" plain @click="commitHjForm" v-if="this.form.quotApprovalStatus == '1'&&this.form.quotHjApprovalStatus == '0'">提交核价审核</el-button></span>
<!-- 业务员报价组生成报价单--> <!-- 业务员报价组生成报价单-->
<span style="float:left" v-hasPermi="['quot:quot:madeQuot']"><el-button type="warning" plain @click="madeQuot" v-if="this.form.quotApprovalStatus == '2'||checkRole(['QUOT'])">生成报价单</el-button></span> <span style="float:left" v-hasPermi="['quot:quot:madeQuot']"><el-button type="warning" plain @click="madeQuot" v-if="this.form.quotApprovalStatus == '2'||!checkRole(['SALES_MAN'])">生成报价单</el-button></span>
<!-- 报价组提交金思维OA--> <!-- 报价组提交金思维OA-->
<span style="margin-left: 10px;float:left" v-hasPermi="['quot:quot:assistJsw']"><el-button type="warning" plain @click="commitJswForm" v-if="this.form.quotApprovalStatus == '1'&&(this.form.quotJswApprovalStatus == '0'||this.form.quotJswApprovalStatus == '2')">提交金思维</el-button></span> <span style="margin-left: 10px;float:left" v-hasPermi="['quot:quot:assistJsw']"><el-button type="warning" plain @click="commitJswForm" v-if="this.form.quotApprovalStatus == '1'&&(this.form.quotJswApprovalStatus == '0'||this.form.quotJswApprovalStatus == '2')">提交金思维</el-button></span>
@ -999,7 +1021,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, commitOAQuot, feedbackQuot, madeQuot, rejectQuot } from "@/api/quot/quot"; import { changQuotPrintStatus,listQuot, getQuot, getReturnUpdateQuot,getAllPass,getAllReject, 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";
@ -1296,7 +1318,6 @@ export default {
handleReturnUpdate(row) { handleReturnUpdate(row) {
this.reset(); this.reset();
const quotId = row.quotId || this.ids const quotId = row.quotId || this.ids
let self = this;
this.$modal.confirm('是否确认修订所选报价单且更新状态为协助中?').then(function() { this.$modal.confirm('是否确认修订所选报价单且更新状态为协助中?').then(function() {
}).then(() => { }).then(() => {
getReturnUpdateQuot(quotId).then(response => { getReturnUpdateQuot(quotId).then(response => {
@ -1305,6 +1326,39 @@ export default {
}); });
}).catch(() => {}); }).catch(() => {});
}, },
//
handleAllPass(row) {
this.reset();
const quotId = row.quotId || this.ids
this.$modal.confirm('是否确认修订所选报价单且更新状态为通过?').then(function() {
}).then(() => {
getAllPass(quotId).then(response => {
this.$modal.msgSuccess("更改成功");
this.getList();
});
}).catch(() => {});
},
//
handleAllReject(row) {
this.reset();
const quotId = row.quotId || this.ids;
this.$prompt('请输入驳回原因', '是否确认修订所选报价单且更新状态为驳回?', {
confirmButtonText: '确定',
cancelButtonText: '取消',
inputPattern: /^.+$/,
inputErrorMessage: '驳回原因必填'
}).then(({ value }) => {
this.form = {
"quotId":quotId[0],
"quotFeedbackExplanation":value
}
getAllReject(this.form).then(response => {
this.$modal.msgSuccess("更改成功");
this.getList();
});
}).catch(() => {});
},
/** 修改按钮操作-详细信息设置 */ /** 修改按钮操作-详细信息设置 */
setInfo(response){ setInfo(response){
@ -1613,11 +1667,13 @@ export default {
const param = {relationId:this.form.quotId,fileType:'quotFkFile'} const param = {relationId:this.form.quotId,fileType:'quotFkFile'}
// //
if(this.form.quotApprovalStatus!='1' && checkRole(['SALES_MAN'])){ if(checkRole(['SALES_MAN'])){
quotFileList(param).then(response => { if(this.form.quotApprovalStatus!='1'){
this.quotFkFileList = response.rows; quotFileList(param).then(response => {
}); this.quotFkFileList = response.rows;
}else if(checkRole(['QUOT'])){ });
}
}else{
quotFileList(param).then(response => { quotFileList(param).then(response => {
this.quotFkFileList = response.rows; this.quotFkFileList = response.rows;
}); });
@ -1692,7 +1748,8 @@ export default {
this.quotXjFileLoading = true; this.quotXjFileLoading = true;
let activeName = this.activeName; let activeName = this.activeName;
if(activeName=='quotXjFile'){ if(activeName=='quotXjFile'){
if(file.name.split('.')[1].toLowerCase() != 'xls' && file.name.split('.')[1].toLowerCase() != 'xlsx'){ const fileExtension = file.name.split('.').pop();
if(fileExtension.toLowerCase() != 'xls' && fileExtension.toLowerCase() != 'xlsx'){
this.$modal.msgError("清单附件必须是Excel格式"); this.$modal.msgError("清单附件必须是Excel格式");
this.quotXjFileLoading = false; this.quotXjFileLoading = false;
return false; return false;

View File

@ -153,7 +153,7 @@
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="版本uid" align="center" prop="uid_0" v-if="false"/> <el-table-column label="版本uid" align="center" prop="uid_0" v-if="false"/>
<el-table-column label="产品型号" align="center" prop="name_0" width="200" /> <el-table-column label="产品型号" align="center" prop="name_0" width="200"/>
<el-table-column label="型号" align="center" prop="name_1" v-if="false"/> <el-table-column label="型号" align="center" prop="name_1" v-if="false"/>
<el-table-column label="规格" align="center" prop="spec" v-if="false"/> <el-table-column label="规格" align="center" prop="spec" v-if="false"/>
<el-table-column label="电压" align="center" prop="voltage"/> <el-table-column label="电压" align="center" prop="voltage"/>
@ -348,7 +348,7 @@
// //
headers: { Authorization: "Bearer " + getToken() }, headers: { Authorization: "Bearer " + getToken() },
// //
url: process.env.VUE_APP_BASE_API + "/redBook/redBook/importData" url: process.env.VUE_APP_BASE_API + "/redBook/redBook/importData2"
}, },
// //
@ -624,10 +624,13 @@
}, },
/** 已选结果数据里存在所选调价版本不一致的数据 */ /** 已选结果数据里存在所选调价版本不一致的数据 */
cellStyle({ row }){ cellStyle({ row, columnIndex }){
if(row.uid_0 != this.form.rbDateUid){ if(row.uid_0 != this.form.rbDateUid){
return {'background-color':'#ff494959'} return {'background-color':'#ff494959'}
} }
if(!row.stu && (columnIndex == 2 || columnIndex == 3)){
return 'color:red'
}
}, },
// //
@ -783,7 +786,7 @@
}, },
/** 下载模板操作 */ /** 下载模板操作 */
importTemplate() { importTemplate() {
this.download('redBook/redBook/importTemplate', { this.download('redBook/redBook/importTemplate2', {
}, `product_template_${new Date().getTime()}.xlsx`) }, `product_template_${new Date().getTime()}.xlsx`)
}, },
// //