'123'
This commit is contained in:
parent
dc84e89bcd
commit
14c1c2bfd1
|
@ -157,6 +157,35 @@ public class QuotController extends BaseController
|
|||
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
|
||||
|
|
|
@ -275,7 +275,7 @@ public class RedBookController extends BaseController
|
|||
}
|
||||
|
||||
/**
|
||||
* 导出产品明细模板
|
||||
* 导出产品明细模板-型号、规格、电压、数量
|
||||
* @param response
|
||||
*/
|
||||
@PostMapping("/importTemplate")
|
||||
|
@ -286,7 +286,7 @@ public class RedBookController extends BaseController
|
|||
}
|
||||
|
||||
/**
|
||||
* 导入产品明细
|
||||
* 导入产品明细-型号、规格、电压、数量
|
||||
* @param file
|
||||
* @param updateSupport
|
||||
* @return
|
||||
|
@ -332,7 +332,9 @@ public class RedBookController extends BaseController
|
|||
}
|
||||
|
||||
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
|
||||
|
@ -363,6 +365,85 @@ public class RedBookController extends BaseController
|
|||
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
|
||||
|
|
|
@ -359,8 +359,8 @@ public class excelUtil {
|
|||
response.setContentType("application/vnd.ms-excel");
|
||||
BigDecimal totalmoney = BigDecimal.ZERO;
|
||||
|
||||
File jnlogo_file = new File("logon/"+quot.getQuotCode()+".png");
|
||||
File wc_file = new File("logon/"+quot.getQuotCode()+".png");
|
||||
File jnlogo_file = new File("logon/"+IdUtils.createNo("jnlogo_",3)+".png");
|
||||
File wc_file = new File("logon/"+IdUtils.createNo("wc_",3)+".png");
|
||||
try {
|
||||
OutputStream os = response.getOutputStream();
|
||||
WritableWorkbook wwb = Workbook.createWorkbook(os);
|
||||
|
|
|
@ -31,7 +31,7 @@ server:
|
|||
uri-encoding: UTF-8
|
||||
# 连接数满后的排队数,默认为100
|
||||
accept-count: 1000
|
||||
connection-timeout: 120s
|
||||
connection-timeout: 600s
|
||||
threads:
|
||||
# tomcat最大线程数,默认为200
|
||||
max: 800
|
||||
|
@ -110,7 +110,7 @@ token:
|
|||
# 令牌密钥
|
||||
secret: abcdefghijklmnopqrstuvwxyz
|
||||
# 令牌有效期(默认30分钟)
|
||||
expireTime: 30
|
||||
expireTime: 60
|
||||
|
||||
# MyBatis配置
|
||||
mybatis:
|
||||
|
|
|
@ -28,7 +28,7 @@ public class WebSocketServer
|
|||
/**
|
||||
* 默认最多允许同时在线人数100
|
||||
*/
|
||||
public static int socketMaxOnlineCount = 100;
|
||||
public static int socketMaxOnlineCount = 10000;
|
||||
|
||||
private static final Semaphore SOCKET_SEMAPHORE = new Semaphore(socketMaxOnlineCount);
|
||||
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
}
|
|
@ -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);
|
||||
|
||||
/**
|
||||
* 导入明细批量获取红本价格
|
||||
* @param name_0
|
||||
* 导入明细批量获取红本价格-型号、规格、电压、数量
|
||||
* @param name_1
|
||||
* @param spec
|
||||
* @param rbUid
|
||||
* @return
|
||||
*/
|
||||
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
|
||||
|
|
|
@ -141,12 +141,20 @@ public interface IRedBookService
|
|||
List<OAQuotProduct> setRedBookPrice(List<OAQuotProduct> list);
|
||||
|
||||
/**
|
||||
* 导入明细批量获取红本价格
|
||||
* 导入明细批量获取红本价格-型号、规格、电压、数量
|
||||
* @param list
|
||||
* @return
|
||||
*/
|
||||
List<OAQuotProduct> setRedBookPrice2(List<OAQuotProductTemplate> list);
|
||||
|
||||
/**
|
||||
* 导入明细批量获取红本价格-品名型号
|
||||
* @param list
|
||||
* @return
|
||||
*/
|
||||
List<OAQuotProduct> setRedBookPrice3(List<OAQuotProductTemplate2> list);
|
||||
|
||||
|
||||
/**
|
||||
* 获取单据编号
|
||||
* @param type
|
||||
|
|
|
@ -3,6 +3,7 @@ package com.ruoyi.redBook.service.impl;
|
|||
import com.ruoyi.common.utils.DateUtils;
|
||||
import com.ruoyi.redBook.domain.OAQuotProduct;
|
||||
import com.ruoyi.redBook.domain.OAQuotProductTemplate;
|
||||
import com.ruoyi.redBook.domain.OAQuotProductTemplate2;
|
||||
import com.ruoyi.redBook.service.IRedBookService;
|
||||
import org.springframework.scheduling.annotation.Async;
|
||||
import org.springframework.scheduling.annotation.AsyncResult;
|
||||
|
@ -32,7 +33,7 @@ public class AsyncRbTaskService {
|
|||
}
|
||||
|
||||
/**
|
||||
* 导入明细批量获取红本价格
|
||||
* 导入明细批量获取红本价格-型号、规格、电压、数量
|
||||
* @param threadname
|
||||
* @param list
|
||||
* @return
|
||||
|
@ -44,5 +45,19 @@ public class AsyncRbTaskService {
|
|||
System.out.println(threadname+"结束时间:" + DateUtils.getTime());
|
||||
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);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -208,12 +208,17 @@ public class RedBookServiceImpl implements IRedBookService
|
|||
for(OAQuotProduct oAQuotProduct : list){
|
||||
String price = oaRedBookMapper.getFixDatePrice(oAQuotProduct.getName_0(),oAQuotProduct.getSpec(),oAQuotProduct.getVoltage(),oAQuotProduct.getUid_0());
|
||||
oAQuotProduct.setPrice(price);
|
||||
if(StringUtils.isEmpty(price)){
|
||||
oAQuotProduct.setName_1("");
|
||||
oAQuotProduct.setVoltage("");
|
||||
oAQuotProduct.setStu("");
|
||||
}
|
||||
}
|
||||
return list;
|
||||
}
|
||||
|
||||
/**
|
||||
* 导入明细批量获取红本价格
|
||||
* 导入明细批量获取红本价格-型号、规格、电压、数量
|
||||
* @param list
|
||||
* @return
|
||||
*/
|
||||
|
@ -224,19 +229,44 @@ public class RedBookServiceImpl implements IRedBookService
|
|||
OAQuotProduct oAQuotProduct = new OAQuotProduct();
|
||||
for(OAQuotProductTemplate oAQuotProductTemplate : list){
|
||||
OAQuotProduct rbProduct = oaRedBookMapper.getFixDatePrice2(oAQuotProductTemplate.getName_1(),oAQuotProductTemplate.getSpec(),oAQuotProductTemplate.getVoltage(),oAQuotProductTemplate.getRbUid());
|
||||
if(rbProduct!=null){
|
||||
oAQuotProduct = new OAQuotProduct();
|
||||
oAQuotProduct.setIndex(oAQuotProductTemplate.getIndex());
|
||||
oAQuotProduct.setUid_0(rbProduct.getUid_0());
|
||||
oAQuotProduct.setName_0(rbProduct.getName_0());
|
||||
oAQuotProduct.setUid_0(oAQuotProductTemplate.getRbUid());
|
||||
oAQuotProduct.setName_0(rbProduct!=null?rbProduct.getName_0():"");
|
||||
oAQuotProduct.setName_1(oAQuotProductTemplate.getName_1());
|
||||
oAQuotProduct.setSpec(oAQuotProductTemplate.getSpec());
|
||||
oAQuotProduct.setVoltage(rbProduct.getVoltage());
|
||||
oAQuotProduct.setStu(rbProduct.getStu());
|
||||
oAQuotProduct.setPrice(rbProduct.getPrice());
|
||||
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;
|
||||
}
|
||||
|
||||
/**
|
||||
* 导入明细批量获取红本价格-品名型号
|
||||
* @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;
|
||||
}
|
||||
|
|
|
@ -144,7 +144,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
|||
<!-- 数据范围过滤 -->
|
||||
${params.dataScope}
|
||||
</where>
|
||||
order by a.quot_code desc
|
||||
order by a.quot_inquiry_date desc
|
||||
</select>
|
||||
|
||||
<select id="selectQuotListCount" resultType="String">
|
||||
|
|
|
@ -183,6 +183,16 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
|||
and (B.sta_0=1 or sta_0=0)
|
||||
</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">
|
||||
LEFT JOIN sys_user u on u.user_name=a.create_by
|
||||
LEFT JOIN sys_dept d on u.dept_id = d.dept_id
|
||||
|
|
|
@ -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) {
|
||||
return request({
|
||||
|
|
|
@ -147,7 +147,7 @@
|
|||
},
|
||||
mounted() {
|
||||
// 初始化WebSocket
|
||||
this.initWebSocket();
|
||||
//this.initWebSocket();
|
||||
},
|
||||
created(){
|
||||
this.getList();
|
||||
|
|
|
@ -18,7 +18,7 @@ const service = axios.create({
|
|||
// axios中请求配置有baseURL选项,表示请求URL公共部分
|
||||
baseURL: process.env.VUE_APP_BASE_API,
|
||||
// 超时
|
||||
timeout: 300000
|
||||
timeout: 720000
|
||||
})
|
||||
|
||||
// request拦截器
|
||||
|
|
|
@ -113,6 +113,28 @@
|
|||
v-hasPermi="['quot:quot:returnUpdate']"
|
||||
>错误修订</el-button>
|
||||
</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>
|
||||
</el-row>
|
||||
|
||||
|
@ -129,29 +151,6 @@
|
|||
<dict-tag :options="dict.type.quot_approval_status" :value="scope.row.quotApprovalStatus"/>
|
||||
</template>
|
||||
</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')">
|
||||
<template slot-scope="scope">
|
||||
<el-switch
|
||||
|
@ -164,7 +163,30 @@
|
|||
</template>
|
||||
</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="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">
|
||||
<template slot-scope="scope">
|
||||
<span>{{ parseTime(scope.row.quotInquiryDate) }}</span>
|
||||
|
@ -208,17 +230,17 @@
|
|||
</el-form-item>
|
||||
</el-col>
|
||||
<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">
|
||||
<dict-tag :options="dict.type.quot_approval_status" :value="this.form.quotJsxzApprovalStatus"/>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="4">
|
||||
<el-col :span="4" v-if="!checkRole(['SALES_MAN'])">
|
||||
<el-form-item label="核价协助" prop="quotHjApprovalStatus">
|
||||
<dict-tag :options="dict.type.quot_approval_status" :value="this.form.quotHjApprovalStatus"/>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="4">
|
||||
<el-col :span="4" v-if="!checkRole(['SALES_MAN'])">
|
||||
<el-form-item label="金思维协助" prop="quotJswApprovalStatus">
|
||||
<dict-tag :options="dict.type.quot_jsw_approval_status" :value="this.form.quotJswApprovalStatus"/>
|
||||
</el-form-item>
|
||||
|
@ -367,14 +389,14 @@
|
|||
</el-form-item>
|
||||
</el-col>
|
||||
</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-form-item label="反馈说明" prop="quotFeedbackExplanation">
|
||||
<el-input type="textarea" autosize v-model="form.quotFeedbackExplanation" placeholder="报价组填写" :disabled="this.form.quotApprovalStatus == 2"/>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</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-form-item label="OA审批说明" prop="quotOAApprovalStatusRemark">
|
||||
<el-input type="textarea" autosize v-model="form.quotOAApprovalStatusRemark" :disabled="true"/>
|
||||
|
@ -576,7 +598,7 @@
|
|||
<div v-if="checkPermi(['quot:quot:jsxzInfo'])">
|
||||
<el-divider content-position="left" class="customer_divider_text">技术协助</el-divider>
|
||||
<el-row :gutter="8">
|
||||
<el-col :span="8">
|
||||
<!--<el-col :span="8">
|
||||
<el-form-item label="标准" prop="quotJsxzStandard">
|
||||
<el-select v-model="form.quotJsxzStandard" :disabled="this.form.quotJsxzApprovalStatus != '0'">
|
||||
<el-option
|
||||
|
@ -587,7 +609,7 @@
|
|||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-col>-->
|
||||
<el-col :span="8">
|
||||
<el-form-item label="技术协助状态" prop="quotJsxzApprovalStatus">
|
||||
<el-select v-model="form.quotJsxzApprovalStatus" :disabled="true">
|
||||
|
@ -600,7 +622,7 @@
|
|||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<!--<el-col :span="8">
|
||||
<el-form-item label="是否盖技术章" prop="quotJsxzChapter">
|
||||
<el-select v-model="form.quotJsxzChapter" :disabled="this.form.quotJsxzApprovalStatus != '0'">
|
||||
<el-option
|
||||
|
@ -611,7 +633,7 @@
|
|||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-col>-->
|
||||
</el-row>
|
||||
<el-row :gutter="8">
|
||||
<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="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-->
|
||||
<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>
|
||||
<script>
|
||||
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 { checkPermi,checkRole } from '@/utils/permission';// 权限判断函数
|
||||
import { getDicts } from "@/api/system/dict/data";
|
||||
|
@ -1296,7 +1318,6 @@ export default {
|
|||
handleReturnUpdate(row) {
|
||||
this.reset();
|
||||
const quotId = row.quotId || this.ids
|
||||
let self = this;
|
||||
this.$modal.confirm('是否确认修订所选报价单且更新状态为协助中?').then(function() {
|
||||
}).then(() => {
|
||||
getReturnUpdateQuot(quotId).then(response => {
|
||||
|
@ -1305,6 +1326,39 @@ export default {
|
|||
});
|
||||
}).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){
|
||||
|
@ -1613,11 +1667,13 @@ export default {
|
|||
const param = {relationId:this.form.quotId,fileType:'quotFkFile'}
|
||||
|
||||
//协助中状态不显示反馈附件
|
||||
if(this.form.quotApprovalStatus!='1' && checkRole(['SALES_MAN'])){
|
||||
if(checkRole(['SALES_MAN'])){
|
||||
if(this.form.quotApprovalStatus!='1'){
|
||||
quotFileList(param).then(response => {
|
||||
this.quotFkFileList = response.rows;
|
||||
});
|
||||
}else if(checkRole(['QUOT'])){
|
||||
}
|
||||
}else{
|
||||
quotFileList(param).then(response => {
|
||||
this.quotFkFileList = response.rows;
|
||||
});
|
||||
|
@ -1692,7 +1748,8 @@ export default {
|
|||
this.quotXjFileLoading = true;
|
||||
let activeName = this.activeName;
|
||||
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.quotXjFileLoading = false;
|
||||
return false;
|
||||
|
|
|
@ -348,7 +348,7 @@
|
|||
// 设置上传的请求头部
|
||||
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){
|
||||
return {'background-color':'#ff494959'}
|
||||
}
|
||||
if(!row.stu && (columnIndex == 2 || columnIndex == 3)){
|
||||
return 'color:red'
|
||||
}
|
||||
},
|
||||
|
||||
//删除已选结果数据
|
||||
|
@ -783,7 +786,7 @@
|
|||
},
|
||||
/** 下载模板操作 */
|
||||
importTemplate() {
|
||||
this.download('redBook/redBook/importTemplate', {
|
||||
this.download('redBook/redBook/importTemplate2', {
|
||||
}, `product_template_${new Date().getTime()}.xlsx`)
|
||||
},
|
||||
// 文件上传中处理
|
||||
|
|
Loading…
Reference in New Issue