四算预算修改

master
OathK1per 2022-08-15 10:15:21 +08:00
parent f1b65c5966
commit 099271cad6
23 changed files with 764 additions and 318 deletions

View File

@ -0,0 +1,47 @@
package cn.palmte.work.bean;
/**
* @author xiongshiyan at 2021/11/1 , contact me with email yanshixiong@126.com or phone 15208384257
*/
public enum CertaintyEnum {
PLAN_A(1,"A基本确定中标待签合同合同签订中"),
PLAN_B(2,"B客户产品参数、商务评分、商务资质引导成功"),
PLAN_C(3,"C项目初期引导阶段");
private int certainty;
private String certaintyStr;
private CertaintyEnum(int certainty, String certaintyStr) {
this.certainty = certainty;
this.certaintyStr = certaintyStr;
}
public int getCertainty() {
return certainty;
}
public void setCertainty(int certainty) {
this.certainty = certainty;
}
public String getCertaintyStr() {
return certaintyStr;
}
public void setCertaintyStr(String certaintyStr) {
this.certaintyStr = certaintyStr;
}
public static CertaintyEnum parseCertainty(int certainty){
if(certainty == 1){
return PLAN_A;
}
if(certainty == 2){
return PLAN_B;
}
if(certainty == 3){
return PLAN_C;
}
throw new IllegalArgumentException("Unkown certainty:"+certainty);
}
}

View File

@ -0,0 +1,43 @@
package cn.palmte.work.bean;
/**
* @author xiongshiyan at 2021/11/1 , contact me with email yanshixiong@126.com or phone 15208384257
*/
public enum IsSecondEnum {
PLAN_A(1,"是"),
PLAN_B(2,"否");
private int isSecond;
private String isSecondStr;
private IsSecondEnum(int isSecond, String isSecondStr) {
this.isSecond = isSecond;
this.isSecondStr = isSecondStr;
}
public int getIsSecond() {
return isSecond;
}
public void setIsSecond(int isSecond) {
this.isSecond = isSecond;
}
public String getIsSecondStr() {
return isSecondStr;
}
public void setIsSecondStr(String isSecondStr) {
this.isSecondStr = isSecondStr;
}
public static IsSecondEnum parseIsSecond(int isSecond){
if(isSecond == 1){
return PLAN_A;
}
if(isSecond == 2){
return PLAN_B;
}
throw new IllegalArgumentException("Unkown isSecond:"+isSecond);
}
}

View File

@ -0,0 +1,47 @@
package cn.palmte.work.bean;
/**
* @author xiongshiyan at 2021/11/1 , contact me with email yanshixiong@126.com or phone 15208384257
*/
public enum ResolvePlanEnum {
PLAN_A(1,"公共服务(智慧交通、雪亮工程、治安防控体系等)"),
PLAN_B(2,"泛行业(智慧园区、智慧医疗、智慧工地等)"),
PLAN_C(3,"其他生态");
private int resolvePlan;
private String resolvePlanStr;
private ResolvePlanEnum(int resolvePlan, String resolvePlanStr) {
this.resolvePlan = resolvePlan;
this.resolvePlanStr = resolvePlanStr;
}
public int getResolvePlan() {
return resolvePlan;
}
public void setResolvePlan(int resolvePlan) {
this.resolvePlan = resolvePlan;
}
public String getResolvePlanStr() {
return resolvePlanStr;
}
public void setResolvePlanStr(String resolvePlanStr) {
this.resolvePlanStr = resolvePlanStr;
}
public static ResolvePlanEnum parseResolvePlan(int resolvePlan){
if(resolvePlan == 1){
return PLAN_A;
}
if(resolvePlan == 2){
return PLAN_B;
}
if(resolvePlan == 3){
return PLAN_C;
}
throw new IllegalArgumentException("Unkown resolvePlan:"+resolvePlan);
}
}

View File

@ -0,0 +1,39 @@
package cn.palmte.work.bean;
/**
* @author xiongshiyan at 2021/11/1 , contact me with email yanshixiong@126.com or phone 15208384257
*/
public enum SignTypeEnum {
PLAN_A(1,"紫光汇智直接投标");
private int signType;
private String signTypeStr;
private SignTypeEnum(int signType, String signTypeStr) {
this.signType = signType;
this.signTypeStr = signTypeStr;
}
public int getSignType() {
return signType;
}
public void setSignType(int signType) {
this.signType = signType;
}
public String getSignTypeStr() {
return signTypeStr;
}
public void setSignTypeStr(String signTypeStr) {
this.signTypeStr = signTypeStr;
}
public static SignTypeEnum parseSignType(int signType){
if(signType == 1){
return PLAN_A;
}
throw new IllegalArgumentException("Unkown signType:"+signType);
}
}

View File

@ -6,7 +6,7 @@ package cn.palmte.work.bean;
public enum TypeEnum {
PROJECT_INTEGRATION(1,"工程集成类"),
DEVICE_INTEGRATION(2,"设备集成类"),
STRATEGIC_PARTNER(3,"战略合作类");
STRATEGIC_PARTNER(3,"工程集成类");
private int type;
private String typeDesc;

View File

@ -0,0 +1,51 @@
package cn.palmte.work.bean;
/**
* @author xiongshiyan at 2021/11/1 , contact me with email yanshixiong@126.com or phone 15208384257
*/
public enum UnderwrittenModeEnum {
PLAN_A(1,"A类-不垫资(战略合作)"),
PLAN_B(2,"B类-不垫资(背靠背)"),
PLAN_C(3,"C类-垫资(账期覆盖)"),
PLAN_D(4,"D类-垫资(账期不覆盖");
private int underwrittenMode;
private String underwrittenModeStr;
private UnderwrittenModeEnum(int underwrittenMode, String underwrittenModeStr) {
this.underwrittenMode = underwrittenMode;
this.underwrittenModeStr = underwrittenModeStr;
}
public int getUnderwrittenMode() {
return underwrittenMode;
}
public void setUnderwrittenMode(int underwrittenMode) {
this.underwrittenMode = underwrittenMode;
}
public String getUnderwrittenModeStr() {
return underwrittenModeStr;
}
public void setUnderwrittenModeStr(String underwrittenModeStr) {
this.underwrittenModeStr = underwrittenModeStr;
}
public static UnderwrittenModeEnum parseUnderwrittenMode(int underwrittenMode){
if(underwrittenMode == 1){
return PLAN_A;
}
if(underwrittenMode == 2){
return PLAN_B;
}
if(underwrittenMode == 3){
return PLAN_C;
}
if(underwrittenMode == 4){
return PLAN_D;
}
throw new IllegalArgumentException("Unkown underwrittenMode:"+underwrittenMode);
}
}

View File

@ -1,8 +1,11 @@
package cn.palmte.work.controller.backend;
import cn.palmte.work.bean.ResponseMsg;
import cn.palmte.work.model.MonthlySettle;
import cn.palmte.work.model.MonthlySettleRepository;
import cn.palmte.work.service.MonthlySettleService;
import cn.palmte.work.utils.Utils;
import cn.palmte.work.utils.excel.AppendMore;
import cn.palmte.work.utils.excel.ExcelLogs;
import cn.palmte.work.utils.excel.ExcelUtil;
import cn.palmte.work.utils.excel.ExportUtils;
@ -22,6 +25,7 @@ import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.Collection;
import java.util.List;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
@ -37,6 +41,9 @@ public class MonthlySettleController extends BaseController {
@Autowired
private MonthlySettleService monthlySettleService;
@Autowired
private MonthlySettleRepository monthlySettleRepository;
@RequestMapping("/list")
public String list(@RequestParam(value = KEYWORDS, required = false) String keywords,
@RequestParam(value = PAGE_NUMBER, defaultValue = DEFAULT_PAGE_NUMBER) int pageNumber,
@ -46,7 +53,14 @@ public class MonthlySettleController extends BaseController {
setModel(keywords, model);
ConcurrentHashMap<String, String> searchInfo = getSearchInfo(keywords, model);
model.put("pager", monthlySettleService.list(searchInfo, pageNumber, pageSize));
return "/admin/account_list";
return "/admin/monthlySettle_list";
}
@RequestMapping("/info")
public String list(@RequestParam("id") int id, Map<String, Object> model) {
MonthlySettle monthlySettle = monthlySettleRepository.findOne(id);
model.put("monthlySettle", monthlySettle);
return "/admin/monthlySettle_info";
}
private void setModel(@RequestParam(value = "keywords", required = false) String keywords, Map<String, Object> model) {
@ -57,18 +71,32 @@ public class MonthlySettleController extends BaseController {
public void export(@RequestParam(value = "keywords", required = false) String keywords, HttpServletResponse httpServletResponse) throws IOException {
Map<String, String> searchInfo = getSearchInfo(keywords);
downloadHeader(httpServletResponse, Utils.generateExcelName("人员信息"), "application/octet-stream");
String[] headers = {"工号", "手机号码", "姓名", "常驻地", "一级部门", "直接主管", "职位", "角色名称", "公司邮件地址"};
String[] exportColumns = {"userName", "telephone", "realName", "workLocation", "deptName", "directManager", "positionName", "roleName", "companyEmail"};
String[] headers = {"项目编号", "项目名称", "项目类型", "合同编号", "合同方", "合同金额", "合同签订时间", "最终业主", "累计已收款", "已采购累计付款", "已采购累计未付款", "超期垫资金额", "销售累计开票金额",
"销售经理", "项目经理", "收款节点", "收款要求时间", "收款金额", "实际收款时间", "实际收款金额", "实际欠收金额", "到货证明", "项目风险预警", "已计收金额", "未计收金额", "超期天数", "验收报告时间"};
String[] exportColumns = {"projectNo", "projectName", "projectType", "contractNo", "contractParty", "contractAmount", "contractSignTime", "owner", "totalCollect",
"totalPurchasedPaid", "totalPurchasedUnpaid", "timeOutAmount", "totalBillAmount", "saleManager", "projectManager", "collectPoint", "collectRequiredTime", "collectAmount",
"collectActualTime", "collectActualAmount", "uncollectActualAmount", "productCertificate", "riskWarning", "uncalColAmount", "calColAmount", "timeOutDay", "inspectionReportTime"};
ExportUtils.exportToExcel(headers, exportColumns, 1, 10000,
httpServletResponse.getOutputStream(), (pN, pS) -> monthlySettleService.list(searchInfo, pN, pS).getList());
}
@RequestMapping("/exportSingle")
public void exportSingle(@RequestParam String id, @RequestParam String time, @RequestParam String projectName, HttpServletResponse httpServletResponse) throws IOException {
downloadHeader(httpServletResponse, Utils.generateExcelName("月度结算表明细"), "application/octet-stream");
String[] headers = {"月份", "项目编号", "项目名称", "项目类型", "合同编号", "合同方", "合同金额", "合同签订时间", "最终业主", "累计已收款", "已采购累计付款", "已采购累计未付款", "超期垫资金额", "销售累计开票金额",
"销售经理", "项目经理", "收款节点", "收款要求时间", "收款金额", "实际收款时间", "实际收款金额", "实际欠收金额", "超期天数", "到货证明", "验收报告时间", "项目风险预警", "已计收金额", "未计收金额"};
String[] exportColumns = {"month", "projectNo", "projectName", "projectType", "contractNo", "contractParty", "contractAmount", "contractSignTime", "owner", "totalCollect",
"totalPurchasedPaid", "totalPurchasedUnpaid", "timeOutAmount", "totalBillAmount", "saleManager", "projectManager", "collectPoint", "collectRequiredTime", "collectAmount",
"collectActualTime", "collectActualAmount", "uncollectActualAmount", "timeOutDay", "productCertificate", "inspectionReportTime", "riskWarning", "uncalColAmount", "calColAmount"};
ExportUtils.exportToExcel(headers, exportColumns, 1, 10000,
httpServletResponse.getOutputStream(), (pageNumber, pageSize) -> monthlySettleService.findOne(id, time, projectName));
}
/**
*
*/
@RequestMapping("/template")
public void template(HttpServletResponse response) throws Exception {
String[] headers = new String[]{"项目编号", "最终业主", "合同方", "项目名称", "合同金额", "累计已收款", "已采购累计付款", "已采购累计未付款", "超期垫资金额", "销售累计开票金额", "合同编号", "项目类型", "合同签订时间", "销售经理", "项目经理", "收款节点", "收款要求时间", "收款金额",
"实际收款时间", "实际收款金额", "实际欠收金额", "超期天数", "到货证明", "验收报告时间", "项目风险预警", "已计收金额", "未计收金额"};
downloadHeader(response, Utils.generateExcelName("月度结算表导入模板"));

View File

@ -119,8 +119,11 @@ public class ProjectController extends BaseController {
public void export(@RequestParam(value = "keywords", required = false) String keywords, HttpServletResponse httpServletResponse) throws IOException {
Map<String, String> searchInfo = getSearchInfo(keywords);
downloadHeader(httpServletResponse, Utils.generateExcelName("项目报表"), "application/octet-stream");
String[] headers = {"项目编号", "项目名称", "项目类型", "项目合同金额", "华智产品金额", "其他产品金额", "项目状态", "审核状态", "当前审核人", "项目创建者", "部门名称", "项目开始时间", "项目结束时间", "最后更新时间"};
String[] exportColumns = {"projectNo", "name", "typeDesc", "contractRound", "huazhiRound", "ziguangRound", "statusDesc", "approveStatusDesc", "approveName", "creatorName", "deptName", "startDateYM", "endDateYM", "lastUpdateTime"};
String[] headers = {"项目编号", "项目名称", "项目类型", "项目合同金额", "华智产品金额", "汇智产品金额", "华三产品金额", "其他产品金额", "项目状态", "垫资模式", "合作对象", "项目把握度", "行业场景应用", "客户名称", "终端客户名称",
"项目毛利", "项目毛利率", "项目负责人", "预计合同签订时间", "项目计划招标时间", "是否二次合作", "签单方式", "垫资利息", "垫资峰值", "审核状态", "当前审核人", "项目创建者", "部门名称", "项目开始时间", "项目结束时间", "最后更新时间"};
String[] exportColumns = {"projectNo", "name", "typeDesc", "contractRound", "huazhiRound", "huizhiRound", "huasanRound", "ziguangRound", "statusDesc", "underwrittenModeDesc", "collaborator",
"certaintyStr", "industryScenario", "customer", "terminalCustomer", "grossProfit", "grossProfitMargin", "principal", "contractTime", "bidsTime", "isSecondStr", "signTypeStr",
"advanceInterestAmount", "advancePeakAmount", "approveStatusDesc", "approveName", "creatorName", "deptName", "startDateYM", "endDateYM", "lastUpdateTime"};
ExportUtils.exportToExcel(headers, exportColumns, 1, 10000,
httpServletResponse.getOutputStream(), (pN, pS) -> projectService.list(searchInfo, pN, pS).getList());
}
@ -205,8 +208,6 @@ public class ProjectController extends BaseController {
@RequestMapping("/add")
public String add(Map<String, Object> model) {
Dept one = deptService.findUserDept(InterfaceUtil.getAdmin());
String projectNo = numSeqService.generate();
model.put("projectNo", projectNo);
model.put("dept", one);
model.put("projectId",-1);
return "admin/project_estimate_add";

View File

@ -3,6 +3,7 @@ package cn.palmte.work.model;
import org.hibernate.annotations.GenericGenerator;
import javax.persistence.*;
import java.util.Date;
/**
* @author Yuanping Zhang
@ -79,7 +80,8 @@ public class MonthlySettle {
*
*/
@Column(name = "contract_sign_time")
private String contractSignTime;
@Temporal(TemporalType.DATE)
private Date contractSignTime;
/**
*
*/
@ -99,7 +101,8 @@ public class MonthlySettle {
*
*/
@Column(name = "collect_required_time")
private String collectRequiredTime;
@Temporal(TemporalType.DATE)
private Date collectRequiredTime;
/**
*
*/
@ -109,7 +112,8 @@ public class MonthlySettle {
*
*/
@Column(name = "collect_actual_time")
private String collectActualTime;
@Temporal(TemporalType.DATE)
private Date collectActualTime;
/**
*
*/
@ -134,7 +138,8 @@ public class MonthlySettle {
*
*/
@Column(name = "inspection_report_time")
private String inspectionReportTime;
@Temporal(TemporalType.DATE)
private Date inspectionReportTime;
/**
*
*/
@ -255,11 +260,11 @@ public class MonthlySettle {
this.projectType = projectType;
}
public String getContractSignTime() {
public Date getContractSignTime() {
return contractSignTime;
}
public void setContractSignTime(String contractSignTime) {
public void setContractSignTime(Date contractSignTime) {
this.contractSignTime = contractSignTime;
}
@ -287,11 +292,11 @@ public class MonthlySettle {
this.collectPoint = collectPoint;
}
public String getCollectRequiredTime() {
public Date getCollectRequiredTime() {
return collectRequiredTime;
}
public void setCollectRequiredTime(String collectRequiredTime) {
public void setCollectRequiredTime(Date collectRequiredTime) {
this.collectRequiredTime = collectRequiredTime;
}
@ -303,11 +308,11 @@ public class MonthlySettle {
this.collectAmount = collectAmount;
}
public String getCollectActualTime() {
public Date getCollectActualTime() {
return collectActualTime;
}
public void setCollectActualTime(String collectActualTime) {
public void setCollectActualTime(Date collectActualTime) {
this.collectActualTime = collectActualTime;
}
@ -343,11 +348,11 @@ public class MonthlySettle {
this.productCertificate = productCertificate;
}
public String getInspectionReportTime() {
public Date getInspectionReportTime() {
return inspectionReportTime;
}
public void setInspectionReportTime(String inspectionReportTime) {
public void setInspectionReportTime(Date inspectionReportTime) {
this.inspectionReportTime = inspectionReportTime;
}

View File

@ -1,6 +1,7 @@
package cn.palmte.work.model;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
/**
* @author Yuanping Zhang
@ -8,4 +9,6 @@ import org.springframework.data.jpa.repository.JpaRepository;
*/
public interface MonthlySettleRepository extends JpaRepository<MonthlySettle, Integer> {
// @Query(value = "select * from monthly_settle where id = ?1 order by month desc limit 1", nativeQuery = true)
// MonthlySettle findLatest(int id);
}

View File

@ -118,16 +118,16 @@ public class Project {
*/
@Column(name = "terminal_customer")
private String terminalCustomer;
// /**
// * 垫资利息(元为单位)
// */
// @Column(name = "advance_interest_amount")
// private BigDecimal advanceInterestAmount;
// /**
// * 垫资峰值
// */
// @Column(name = "advance_peak_amount")
// private BigDecimal advancePeakAmount;
/**
*
*/
@Column(name = "advance_interest_amount")
private BigDecimal advanceInterestAmount;
/**
*
*/
@Column(name = "advance_peak_amount")
private BigDecimal advancePeakAmount;
/**
*
*/
@ -192,13 +192,13 @@ public class Project {
@Column(name = "plan_end_str")
private String planEndStr;
@Transient
private String underwrittenModeDesc;
@Column(name = "underwritten_mode_str")
private String underwrittenModeStr;
@Column(name = "certainty")
private String certainty;
private Integer certainty;
@Transient
@Column(name = "certainty_str")
private String certaintyStr;
@Column(name = "gross_profit")
@ -223,21 +223,21 @@ public class Project {
private Date bidsTime;
@Column(name = "is_second")
private int isSecond;
private Integer isSecond;
@Transient
@Column(name = "is_second_str")
private String isSecondStr;
@Column(name = "sign_type")
private int signType;
private Integer signType;
@Transient
@Column(name = "sign_type_str")
private String signTypeStr;
@Column(name = "resolve_plan")
private int resolvePlan;
private Integer resolvePlan;
@Transient
@Column(name = "resolve_plan_str")
private String resolvePlanStr;
@Column(name = "main_contract_resolve_plan")
@ -255,6 +255,24 @@ public class Project {
@Transient
private String ziguangRound;
@Transient
private String huizhiRound;
@Transient
private String huasanRound;
@Transient
private String grossProfitRound;
@Transient
private String grossProfitMarginRound;
@Transient
private String advanceInterestAmountRound;
@Transient
private String advancePeakAmountRound;
public int getId() {
return id;
}
@ -344,6 +362,46 @@ public class Project {
return ApproveStatusEnum.parseApproveStatus(approveStatus).getApproveStatusDesc();
}
public int getApproveStatusEstimate() {
return approveStatusEstimate;
}
public void setApproveStatusEstimate(int approveStatusEstimate) {
this.approveStatusEstimate = approveStatusEstimate;
}
public int getApproveStatusBudget() {
return approveStatusBudget;
}
public void setApproveStatusBudget(int approveStatusBudget) {
this.approveStatusBudget = approveStatusBudget;
}
public int getApproveStatusSettle() {
return approveStatusSettle;
}
public void setApproveStatusSettle(int approveStatusSettle) {
this.approveStatusSettle = approveStatusSettle;
}
public int getApproveStatusFinal() {
return approveStatusFinal;
}
public void setApproveStatusFinal(int approveStatusFinal) {
this.approveStatusFinal = approveStatusFinal;
}
public int getApproveId() {
return approveId;
}
public void setApproveId(int approveId) {
this.approveId = approveId;
}
public String getApproveName() {
return approveName;
}
@ -440,6 +498,22 @@ public class Project {
this.terminalCustomer = terminalCustomer;
}
public BigDecimal getAdvanceInterestAmount() {
return advanceInterestAmount;
}
public void setAdvanceInterestAmount(BigDecimal advanceInterestAmount) {
this.advanceInterestAmount = advanceInterestAmount;
}
public BigDecimal getAdvancePeakAmount() {
return advancePeakAmount;
}
public void setAdvancePeakAmount(BigDecimal advancePeakAmount) {
this.advancePeakAmount = advancePeakAmount;
}
public BigDecimal getContractAmount() {
return contractAmount;
}
@ -528,53 +602,6 @@ public class Project {
this.lastUpdateTime = lastUpdateTime;
}
public int getApproveStatusEstimate() {
return approveStatusEstimate;
}
public void setApproveStatusEstimate(int approveStatusEstimate) {
this.approveStatusEstimate = approveStatusEstimate;
}
public int getApproveStatusBudget() {
return approveStatusBudget;
}
public void setApproveStatusBudget(int approveStatusBudget) {
this.approveStatusBudget = approveStatusBudget;
}
public int getApproveStatusSettle() {
return approveStatusSettle;
}
public void setApproveStatusSettle(int approveStatusSettle) {
this.approveStatusSettle = approveStatusSettle;
}
public int getApproveStatusFinal() {
return approveStatusFinal;
}
public void setApproveStatusFinal(int approveStatusFinal) {
this.approveStatusFinal = approveStatusFinal;
}
public int getApproveId() {
return approveId;
}
public void setApproveId(int approveId) {
this.approveId = approveId;
}
public String getStartDateYM(){
return DatetimeUtils.toStr(this.startDate,"yyyy-MM");
}
public String getEndDateYM(){
return DatetimeUtils.toStr(this.endDate,"yyyy-MM");
}
public String getPlanStartStr() {
return planStartStr;
}
@ -591,19 +618,19 @@ public class Project {
this.planEndStr = planEndStr;
}
public String getUnderwrittenModeDesc() {
return underwrittenModeDesc;
public String getUnderwrittenModeStr() {
return underwrittenModeStr;
}
public void setUnderwrittenModeDesc(String underwrittenModeDesc) {
this.underwrittenModeDesc = underwrittenModeDesc;
public void setUnderwrittenModeStr(String underwrittenModeStr) {
this.underwrittenModeStr = underwrittenModeStr;
}
public String getCertainty() {
public Integer getCertainty() {
return certainty;
}
public void setCertainty(String certainty) {
public void setCertainty(Integer certainty) {
this.certainty = certainty;
}
@ -671,6 +698,14 @@ public class Project {
this.bidsTime = bidsTime;
}
public Integer getIsSecond() {
return isSecond;
}
public void setIsSecond(Integer isSecond) {
this.isSecond = isSecond;
}
public String getIsSecondStr() {
return isSecondStr;
}
@ -679,6 +714,14 @@ public class Project {
this.isSecondStr = isSecondStr;
}
public Integer getSignType() {
return signType;
}
public void setSignType(Integer signType) {
this.signType = signType;
}
public String getSignTypeStr() {
return signTypeStr;
}
@ -687,6 +730,14 @@ public class Project {
this.signTypeStr = signTypeStr;
}
public Integer getResolvePlan() {
return resolvePlan;
}
public void setResolvePlan(Integer resolvePlan) {
this.resolvePlan = resolvePlan;
}
public String getResolvePlanStr() {
return resolvePlanStr;
}
@ -735,27 +786,51 @@ public class Project {
this.ziguangRound = ziguangRound;
}
public int getIsSecond() {
return isSecond;
public String getHuizhiRound() {
return huizhiRound;
}
public void setIsSecond(int isSecond) {
this.isSecond = isSecond;
public void setHuizhiRound(String huizhiRound) {
this.huizhiRound = huizhiRound;
}
public int getSignType() {
return signType;
public String getHuasanRound() {
return huasanRound;
}
public void setSignType(int signType) {
this.signType = signType;
public void setHuasanRound(String huasanRound) {
this.huasanRound = huasanRound;
}
public int getResolvePlan() {
return resolvePlan;
public String getGrossProfitRound() {
return grossProfitRound;
}
public void setResolvePlan(int resolvePlan) {
this.resolvePlan = resolvePlan;
public void setGrossProfitRound(String grossProfitRound) {
this.grossProfitRound = grossProfitRound;
}
public String getGrossProfitMarginRound() {
return grossProfitMarginRound;
}
public void setGrossProfitMarginRound(String grossProfitMarginRound) {
this.grossProfitMarginRound = grossProfitMarginRound;
}
public String getAdvanceInterestAmountRound() {
return advanceInterestAmountRound;
}
public void setAdvanceInterestAmountRound(String advanceInterestAmountRound) {
this.advanceInterestAmountRound = advanceInterestAmountRound;
}
public String getAdvancePeakAmountRound() {
return advancePeakAmountRound;
}
public void setAdvancePeakAmountRound(String advancePeakAmountRound) {
this.advancePeakAmountRound = advancePeakAmountRound;
}
}

View File

@ -122,4 +122,14 @@ public class ProjectBudgetCostDetailBase {
//不含税总金额=含税总金额/1+税率)
return totalTaxInclude.divide(taxRate.divide(new BigDecimal(100), 2, BigDecimal.ROUND_HALF_UP).add(new BigDecimal(1)), 2, BigDecimal.ROUND_HALF_UP);
}
public BigDecimal getTotalTax(){
BigDecimal totalTaxInclude = getTotalTaxInclude();
if(null == totalTaxInclude || taxRate == null){
return null;
}
//不含税总金额=含税总金额/1+税率)
return totalTaxInclude.multiply(taxRate.divide(new BigDecimal(100), 2, BigDecimal.ROUND_HALF_UP)).divide(taxRate.divide(new BigDecimal(100), 2, BigDecimal.ROUND_HALF_UP).add(new BigDecimal(1)), 2, BigDecimal.ROUND_HALF_UP);
}
}

View File

@ -113,4 +113,15 @@ public class ProjectBudgetIncomeDetailBase {
BigDecimal bigDecimal = taxRate.divide(new BigDecimal(100), 2, BigDecimal.ROUND_HALF_UP).add(new BigDecimal(1));
return totalTaxInclude.divide(bigDecimal, 2, BigDecimal.ROUND_HALF_UP);
}
public BigDecimal getTotalTax(){
BigDecimal totalTaxInclude = getTotalTaxInclude();
if(null == totalTaxInclude || taxRate == null){
return null;
}
//不含税总金额=含税总金额/1+税率)
BigDecimal bigDecimal = taxRate.divide(new BigDecimal(100), 2, BigDecimal.ROUND_HALF_UP).add(new BigDecimal(1));
return totalTaxInclude.multiply(taxRate.divide(new BigDecimal(100), 2, BigDecimal.ROUND_HALF_UP)).divide(bigDecimal, 2, BigDecimal.ROUND_HALF_UP);
}
}

View File

@ -8,6 +8,7 @@ import org.springframework.stereotype.Service;
import top.jfunc.common.db.bean.Page;
import java.util.Collection;
import java.util.List;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
@ -26,4 +27,8 @@ public class MonthlySettleService {
public String check(Collection<Map> maps) {
return null;
}
public List<MonthlySettle> findOne(String id, String time, String projectName) {
return null;
}
}

View File

@ -46,13 +46,16 @@ public class ProjectService {
private ProjectInstanceService projectInstanceService;
@Autowired
private ProjectBudgetService projectBudgetService;
@Autowired
private NumSeqService numSeqService;
private QueryHelper getQueryHelper(Map<String, String> searchInfo) {
/*"CASE p.type WHEN 1 THEN '工程集成类' WHEN 2 THEN '设备集成类' WHEN 3 THEN '战略合作类' ELSE '未知' AS typeDesc," +
"CASE p.status WHEN 0 THEN '草稿' WHEN 1 THEN '项目创建' WHEN 5 THEN '概算完成' WHEN 10 THEN '预算完成' WHEN 15 THEN '结算中' WHEN 20 THEN '决算完成' ELSE '未知' AS statusDesc," +
"CASE p.approve_status WHEN 0 THEN '待审核' WHEN 1 THEN '审核通过' WHEN 2 THEN '审核不通过' ELSE '未知' AS approveStatusDesc," +
*/
QueryHelper queryHelper = new QueryHelper("SELECT p.*, FORMAT(p.contract_amount,2) as contractRound, FORMAT(p.huazhi_product_amount,2) as huazhiRound, FORMAT(p.ziguang_other_amount,2) as ziguangRound","project","p");
QueryHelper queryHelper = new QueryHelper("SELECT p.*, FORMAT(p.contract_amount,2) as contractRound, FORMAT(p.huazhi_product_amount,2) as huazhiRound, FORMAT(p.huizhi_product_amount,2) as huizhiRound, FORMAT(p.huasan_product_amount,2) as huasanRound, FORMAT(p.ziguang_other_amount,2) as ziguangRound" +
", FORMAT(p.gross_profit,2) as grossProfitRound, FORMAT(p.gross_profit_margin,2) as grossProfitMarginRound, FORMAT(p.advance_interest_amount,2) as advanceInterestAmountRound, FORMAT(p.advance_peak_amount,2) as advancePeakAmountRound","project","p");
if(StrUtil.isNotEmpty(searchInfo.get("status")) && !"-1".equals(searchInfo.get("status"))){
queryHelper.addCondition("p.status=?", Integer.parseInt(searchInfo.get("status")));
}
@ -151,7 +154,14 @@ public class ProjectService {
public Project addProject(Project project, Admin admin, ApproveStatusEnum approveStatusEnum) {
String projectNo = numSeqService.generate();
project.setProjectNo(projectNo);
project.setTypeDesc(TypeEnum.parseType(project.getType()).getTypeDesc());
project.setUnderwrittenModeStr(UnderwrittenModeEnum.parseUnderwrittenMode(project.getUnderwrittenMode()).getUnderwrittenModeStr());
project.setCertaintyStr(CertaintyEnum.parseCertainty(project.getCertainty()).getCertaintyStr());
project.setIsSecondStr(IsSecondEnum.parseIsSecond(project.getIsSecond()).getIsSecondStr());
project.setSignTypeStr(SignTypeEnum.parseSignType(project.getSignType()).getSignTypeStr());
project.setResolvePlanStr(ResolvePlanEnum.parseResolvePlan(project.getResolvePlan()).getResolvePlanStr());
project.setStatus(StatusEnum.ESTIMATE_ACCOUNTS.getStatus());
project.setStatusDesc(StatusEnum.ESTIMATE_ACCOUNTS.getStatusDesc());
project.setApproveStatusEstimate(approveStatusEnum.getApproveStatus());
@ -188,6 +198,7 @@ public class ProjectService {
projectInDb.setType(project.getType());
projectInDb.setTypeDesc(TypeEnum.parseType(project.getType()).getTypeDesc());
projectInDb.setUnderwrittenMode(project.getUnderwrittenMode());
projectInDb.setUnderwrittenModeStr(UnderwrittenModeEnum.parseUnderwrittenMode(project.getUnderwrittenMode()).getUnderwrittenModeStr());
projectInDb.setStartDate(project.getStartDate());
projectInDb.setEndDate(project.getEndDate());

View File

@ -515,6 +515,7 @@ function bindChangeableInput() {
$(this).parent().parent().find(".input-changeable-total-tax-include").val(f2Fixed(amount * price));
$(this).parent().parent().find(".input-changeable-total-tax-exclude").val(f2Fixed(amount * price / (1 + taxRate / 100)));
$(this).parent().parent().find(".input-changeable-total-tax").val(f2Fixed(amount * price * taxRate /(100 + taxRate)));
});
//单价改变
$(".input-changeable-price").change(function () {
@ -526,6 +527,7 @@ function bindChangeableInput() {
$(this).parent().parent().find(".input-changeable-total-tax-include").val(f2Fixed(amount * price));
$(this).parent().parent().find(".input-changeable-total-tax-exclude").val(f2Fixed(amount * price / (1 + taxRate / 100)));
$(this).parent().parent().find(".input-changeable-total-tax").val(f2Fixed(amount * price * taxRate /(100 + taxRate)));
$(this).val(f5Price(price));
console.log("单价:" + $(this).val());
});
@ -538,6 +540,7 @@ function bindChangeableInput() {
console.log(amount, price, taxRate);
$(this).parent().parent().find(".input-changeable-total-tax-exclude").val(f2Fixed(amount * price / (1 + taxRate / 100)));
$(this).parent().parent().find(".input-changeable-total-tax").val(f2Fixed(amount * price * taxRate /(100 + taxRate)));
});
}
@ -673,6 +676,9 @@ function updateCostDataIfUnsubmit(details) {
calCostExclude();
calCostInclude();
var costTotalTaxInclude = inputVal("costTotalTaxInclude");
var costTotalTaxExclude = inputVal("costTotalTaxExclude");
$("input[name='costTotalTax']").val(f2Fixed(f2(costTotalTaxInclude) - f2(costTotalTaxExclude)));
updateProjectContributionProfitRate();
}
@ -712,6 +718,8 @@ function updateIncomeDataUnsubmit(incomeDetails) {
$("input[name='incomeTotalTaxInclude']").val(f2Fixed(deviceTaxInclude+engineerTaxInclude+serviceTaxInclude));
$("input[name='incomeTotalTaxExclude']").val(f2Fixed(deviceTaxExclude+engineerTaxExclude+serviceTaxExclude));
$("input[name='incomeTotalTax']").val(f2Fixed(deviceTaxInclude+engineerTaxInclude+serviceTaxInclude-(deviceTaxExclude+engineerTaxExclude+serviceTaxExclude)));
$("input[name='costCompanyManageTaxExclude']").val(f2Fixed(0.028*(deviceTaxInclude+engineerTaxInclude+serviceTaxInclude)));
$(".input-total-title-sale-income-budget-plan").val($("input[name='incomeTotalTaxInclude']").val());

View File

@ -143,6 +143,7 @@ function appendTrIncome() {
' <td><input type="text" min="0.00" max="99.99" step="0.01" maxlength="5" class="number am-modal-prompt-input am-modal-prompt-input-income input-changeable-tax-rate input-changeable-tax-rate-income"></td>\n' +
' <td><input type="text" class="am-modal-prompt-input am-modal-prompt-input-income input-changeable-total-tax-include input-changeable-total-tax-include-income" readonly></td>\n' +
' <td><input type="text" class="am-modal-prompt-input am-modal-prompt-input-income input-changeable-total-tax-exclude input-changeable-total-tax-exclude-income" readonly></td>\n' +
' <td><input type="text" class="am-modal-prompt-input am-modal-prompt-input-income input-changeable-total-tax-exclude input-changeable-total-tax-income" readonly></td>\n' +
' <td><button type="button" style="margin-top: 10px" class="am-btn am-btn-danger am-btn-xs am-round am-modal-line-delete"><span class="am-icon-minus"></span></button></td>\n' +
' </tr>';
$("#incomeTotal").before(template);

View File

@ -27,17 +27,17 @@
<!--验证表单元素validate) begin-->
<div class="am-g am-form-group am-margin-top">
<div class="am-u-sm-4 am-u-md-2 am-text-right"><input readonly style="text-align: right;width: 69px;margin-bottom: 6px;" value="项目编号"></div>
<div class="am-u-sm-4 am-u-md-2 am-text-right"><input readonly style="text-align: right;width: 69px; margin-bottom: 13px;" value="月份"></div>
<div class="am-u-sm-6 am-u-md-6">
<input readonly type="text" style="word-break: break-word; border:0 none;outline:none;" readonly value="${monthlySettle.projectNo!}">
<input readonly value="${monthlySettle.month}"></input>
</div>
<div class="am-u-sm-2 am-u-md-4 input-msg"></div>
</div>
<div class="am-g am-form-group am-margin-top">
<div class="am-u-sm-4 am-u-md-2 am-text-right"><input readonly style="text-align: right;width: 69px; margin-bottom: 13px;" value="部门名称"></div>
<div class="am-u-sm-4 am-u-md-2 am-text-right"><input readonly style="text-align: right;width: 69px;margin-bottom: 6px;" value="项目编号"></div>
<div class="am-u-sm-6 am-u-md-6">
<input readonly value="${monthlySettle.deptName}"></input>
<input readonly type="text" style="word-break: break-word; border:0 none;outline:none;" value="${monthlySettle.projectNo!}">
</div>
<div class="am-u-sm-2 am-u-md-4 input-msg"></div>
</div>
@ -45,7 +45,7 @@
<div class="am-g am-form-group am-margin-top">
<div class="am-u-sm-4 am-u-md-2 am-text-right"><input readonly style="text-align: right;width: 69px;margin-bottom: 6px;" value="项目名称"></div>
<div class="am-u-sm-6 am-u-md-6">
<input readonly type="text" style="word-break: break-word; border:0 none;outline:none;" value="${monthlySettle.name}">
<input readonly type="text" style="word-break: break-word; border:0 none;outline:none;" value="${monthlySettle.projectName!}">
</div>
<div class="am-u-sm-2 am-u-md-4 input-msg"></div>
</div>
@ -53,180 +53,199 @@
<div class="am-g am-form-group am-margin-top">
<div class="am-u-sm-4 am-u-md-2 am-text-right"><input readonly style="text-align: right;width: 69px ;margin-bottom: 12px;" value="项目类型"></div>
<div class="am-u-sm-6 am-u-md-6">
<input readonly type="text" style="word-break: break-word; border:0 none;outline:none;" value="${monthlySettle.name}">
<input readonly type="text" style="word-break: break-word; border:0 none;outline:none;" value="${monthlySettle.projectType!}">
</div>
<div class="am-u-sm-2 am-u-md-4 input-msg"></div>
</div>
<div class="am-g am-form-group am-margin-top">
<div class="am-u-sm-4 am-u-md-2 am-text-right"><input readonly style="text-align: right;width: 134px ;margin-bottom: 6px;" value="项目计划开始时间"></div>
<div class="am-u-sm-4 am-u-md-2 am-text-right"><input readonly style="text-align: right;width: 69px;margin-bottom: 6px;" value="合同编号"></div>
<div class="am-u-sm-6 am-u-md-6">
<input readonly value="${project.startDate?string("yyyy-MM-dd")}"></input>
<input readonly type="text" style="word-break: break-word; border:0 none;outline:none;" value="${monthlySettle.contractNo!}">
</div>
<div class="am-u-sm-2 am-u-md-4 input-msg"></div>
</div>
<div class="am-g am-form-group am-margin-top">
<div class="am-u-sm-4 am-u-md-2 am-text-right"><input readonly style="text-align: right;width: 134px ;margin-bottom: 6px;" value="项目计划结束时间"></div>
<div class="am-u-sm-4 am-u-md-2 am-text-right"><input readonly style="text-align: right;width: 69px;margin-bottom: 6px;" value="合同方"></div>
<div class="am-u-sm-6 am-u-md-6">
<input readonly value="${project.endDate?string("yyyy-MM-dd")}"></input>
<input readonly type="text" style="word-break: break-word; border:0 none;outline:none;" value="${monthlySettle.contractParty!}">
</div>
<div class="am-u-sm-2 am-u-md-4 input-msg"></div>
</div>
<div class="am-g am-form-group am-margin-top">
<div class="am-u-sm-4 am-u-md-2 am-text-right"><input readonly style="text-align: right;width: 69px ;margin-bottom: 12px;" value="垫资模式"></div>
<div class="am-u-sm-4 am-u-md-2 am-text-right"><input readonly style="text-align: right;width: 69px ;margin-bottom: 12px;" value="合同金额"></div>
<div class="am-u-sm-6 am-u-md-6">
<span>
<#if (project.underwrittenMode) =1>
<input readonly value="A类-不垫资(战略合作)">
<#elseif (project.underwrittenMode) =2>
<input readonly value="B类-不垫资(背靠背)">
<#elseif (project.underwrittenMode) =3>
<input readonly value="C类-垫资(账期覆盖)">
<#elseif (project.underwrittenMode) =4>
<input readonly value="D类-垫资(账期不覆盖)">
</#if>
</span>
<input readonly type="text" style="word-break: break-word; border:0 none;outline:none;" value="${Utils.format(monthlySettle.contractAmount)}元">
</div>
<div class="am-u-sm-2 am-u-md-4 input-msg"></div>
</div>
<div class="am-g am-form-group am-margin-top">
<div class="am-u-sm-4 am-u-md-2 am-text-right"><input readonly style="text-align: right;width: 69px ;margin-bottom: 12px;" value="合作对象"></div>
<div class="am-u-sm-4 am-u-md-2 am-text-right"><input readonly style="text-align: right;width: 134px ;margin-bottom: 6px;" value="合同签订时间"></div>
<div class="am-u-sm-6 am-u-md-6">
<input readonly value="${project.collaborator!}" />
</div>
<div class="am-form-file am-text-xs">
<button type="button" class="am-btn am-btn-primary am-btn-sm">
<i class="am-icon-cloud-upload"></i> 下载附件
</button>
<input id="fileupload_button_icon" type="file" name="files[]" multiple>
</div>
<!-- The global progress bar -->
<div id="progress-area-icon" class="am-margin-top-sm am-hide">
<div id="progress-text-icon" class="am-text-xs am-text-right"></div>
<div id="progress" class="am-progress am-progress-xs">
<div class="am-progress-bar" style="width: 0%"></div>
</div>
</div>
</div>
<div class="am-g am-form-group am-margin-top">
<div class="am-u-sm-4 am-u-md-2 am-text-right"><input readonly style="text-align: right;width: 69px ;margin-bottom: 12px;" value="项目把握度"></div>
<div class="am-u-sm-6 am-u-md-6">
<span>
<#if (project.certainty) =1>
<input readonly value="A基本确定中标待签合同合同签订中">
<#elseif (project.certainty) =2>
<input readonly value="B客户产品参数、商务评分、商务资质引导成功">
<#elseif (project.certainty) =3>
<input readonly value="C项目初期引导阶段">
</#if>
</span>
<input readonly value="${monthlySettle.contractSignTime?string("yyyy-MM-dd")}"></input>
</div>
<div class="am-u-sm-2 am-u-md-4 input-msg"></div>
</div>
<div class="am-g am-form-group am-margin-top">
<div class="am-u-sm-4 am-u-md-2 am-text-right"><input readonly style="text-align: right;width: 100px;margin-bottom: 12px;" value="行业场景应用"></div>
<div class="am-u-sm-4 am-u-md-2 am-text-right"><input readonly style="text-align: right;width: 134px ;margin-bottom: 6px;" value="最终业主"></div>
<div class="am-u-sm-6 am-u-md-6">
<input readonly value="${project.industryScenario}"></input>
<input readonly value="${monthlySettle.owner!}"></input>
</div>
<div class="am-u-sm-2 am-u-md-4 input-msg"></div>
</div>
<div class="am-g am-form-group am-margin-top">
<div class="am-u-sm-4 am-u-md-2 am-text-right"><input readonly style="text-align: right;width: 69px ;margin-bottom: 6px;" value="客户名称"></div>
<div class="am-u-sm-4 am-u-md-2 am-text-right"><input readonly style="text-align: right;width: 69px ;margin-bottom: 12px;" value="累计已收款"></div>
<div class="am-u-sm-6 am-u-md-6">
<#-- <textarea style="overflow:auto; background-attachment: fixed;
background-repeat: no-repeat; border-style: solid;border-color: #FFFFFF">${project.customer}</textarea>-->
<input readonly type="text" style="word-break: break-word; border:0 none;outline:none;" value="${project.customer}">
<input readonly value="${Utils.format(monthlySettle.totalCollect)}元"></input>
</div>
<div class="am-u-sm-2 am-u-md-4 input-msg"></div>
</div>
<div class="am-g am-form-group am-margin-top">
<div class="am-u-sm-4 am-u-md-2 am-text-right"><input readonly style="text-align: right;width: 100px ;margin-bottom: 6px;" value="终端客户名称"></div>
<div class="am-u-sm-4 am-u-md-2 am-text-right"><input readonly style="text-align: right;width: 100px;margin-bottom: 12px;" value="已采购累计付款"></div>
<div class="am-u-sm-6 am-u-md-6">
<#--<textarea style="overflow:auto; background-attachment: fixed;
background-repeat: no-repeat; border-style: solid;border-color: #FFFFFF">${project.terminalCustomer}</textarea>-->
<input readonly type="text" style="word-break: break-word; border:0 none;outline:none;" value="${project.terminalCustomer}">
<input readonly value="${Utils.format(monthlySettle.totalPurchasedPaid)}元"></input>
</div>
<div class="am-u-sm-2 am-u-md-4 input-msg"></div>
</div>
<div class="am-g am-form-group am-margin-top">
<div class="am-u-sm-4 am-u-md-2 am-text-right"><input readonly style="text-align: right;width: 69px;margin-bottom: 12px;" value="合同金额"></div>
<div class="am-u-sm-4 am-u-md-2 am-text-right"><input readonly style="text-align: right;width: 69px ;margin-bottom: 6px;" value="已采购累计未付款"></div>
<div class="am-u-sm-6 am-u-md-6">
<input readonly value="${Utils.format(project.contractAmount)}元"></input>
<input readonly type="text" style="word-break: break-word; border:0 none;outline:none;" value="${Utils.format(monthlySettle.totalPurchasedUnpaid)}元">
</div>
<div class="am-u-sm-2 am-u-md-4 input-msg"></div>
</div>
<div class="am-g am-form-group am-margin-top">
<div class="am-u-sm-4 am-u-md-2 am-text-right"><input readonly style="text-align: right;width: 69px ;margin-bottom: 12px;" value="项目毛利"></div>
<div class="am-u-sm-4 am-u-md-2 am-text-right"><input readonly style="text-align: right;width: 100px ;margin-bottom: 6px;" value="超期垫资金额"></div>
<div class="am-u-sm-6 am-u-md-6">
<input readonly value="${Utils.format(project.grossProfit)}" />
<input readonly type="text" style="word-break: break-word; border:0 none;outline:none;" value="${Utils.format(monthlySettle.timeOutAmount)}元">
</div>
<div class="am-u-sm-2 am-u-md-4 input-msg"></div>
</div>
<div class="am-g am-form-group am-margin-top">
<div class="am-u-sm-4 am-u-md-2 am-text-right"><span style="color: red;">*</span><input readonly style="text-align: right;width: 69px ;margin-bottom: 12px;" value="项目毛利率"></div>
<div class="am-u-sm-4 am-u-md-2 am-text-right"><input readonly style="text-align: right;width: 69px;margin-bottom: 12px;" value="销售累计开票金额"></div>
<div class="am-u-sm-6 am-u-md-6">
<input readonly value="${Utils.format(project.grossProfitMargin)}" />
<input readonly value="${Utils.format(monthlySettle.totalBillAmount)}元"></input>
</div>
<div class="am-u-sm-2 am-u-md-4 input-msg"></div>
</div>
<div class="am-g am-form-group am-margin-top">
<div class="am-u-sm-4 am-u-md-2 am-text-right"><input readonly style="text-align: right;margin-left: 10px;margin-left: -15px" value="华智产品金额"></div>
<div class="am-u-sm-4 am-u-md-2 am-text-right"><input readonly style="text-align: right;width: 69px ;margin-bottom: 12px;" value="销售经理"></div>
<div class="am-u-sm-6 am-u-md-6">
<input readonly value="${Utils.format(project.huazhiProductAmount, '0.00')}元"></input>
<input readonly value="${monthlySettle.saleManager!}" />
</div>
<div class="am-u-sm-2 am-u-md-4 input-msg"></div>
</div>
<div class="am-g am-form-group am-margin-top">
<div class="am-u-sm-4 am-u-md-2 am-text-right"><input readonly style="text-align: right;margin-left: -15px" value="汇智产品金额"></div>
<div class="am-u-sm-4 am-u-md-2 am-text-right"><input readonly style="text-align: right;width: 69px ;margin-bottom: 12px;" value="项目经理"></div>
<div class="am-u-sm-6 am-u-md-6">
<input readonly value="${Utils.format(project.huizhiProductAmount, '0.00')}元"></input>
<input readonly value="${monthlySettle.projectManager!}" />
</div>
<div class="am-u-sm-2 am-u-md-4 input-msg"></div>
</div>
<div class="am-g am-form-group am-margin-top">
<div class="am-u-sm-4 am-u-md-2 am-text-right"><input readonly style="text-align: right;margin-left: 10px;margin-left: -15px" value="华三产品金额"></div>
<div class="am-u-sm-4 am-u-md-2 am-text-right"><input readonly style="text-align: right;margin-left: 10px;margin-left: -15px" value="收款节点"></div>
<div class="am-u-sm-6 am-u-md-6">
<input readonly value="${Utils.format(project.huasanProductAmount, '0.00')}元"></input>
<input readonly value="${monthlySettle.collectPoint!}"></input>
</div>
<div class="am-u-sm-2 am-u-md-4 input-msg"></div>
</div>
<div class="am-g am-form-group am-margin-top">
<div class="am-u-sm-4 am-u-md-2 am-text-right"><input readonly style="text-align: right;margin-left: -15px" value="其他产品金额"></div>
<div class="am-u-sm-4 am-u-md-2 am-text-right"><input readonly style="text-align: right;margin-left: -15px" value="收款要求时间"></div>
<div class="am-u-sm-6 am-u-md-6">
<input readonly value="${Utils.format(project.ziguangOtherAmount, '0.00')}元"></input>
<input readonly value="${monthlySettle.contractSignTime?string("yyyy-MM-dd")}"></input>
</div>
<div class="am-u-sm-2 am-u-md-4 input-msg"></div>
</div>
<div class="am-g am-form-group am-margin-top">
<div class="am-u-sm-4 am-u-md-2 am-text-right"><span style="color: red;">*</span><input readonly style="text-align: right;width: 116px;margin-top: -6px;" value="主合同收款条款"></div>
<div class="am-u-sm-4 am-u-md-2 am-text-right"><input readonly style="text-align: right;margin-left: 10px;margin-left: -15px" value="收款金额"></div>
<div class="am-u-sm-6 am-u-md-6">
<textarea style="overflow:auto; background-attachment: fixed;
background-repeat: no-repeat; border-style: solid;border-color: #FFFFFF">${project.mainContractCollectionTerms!}</textarea>
<input readonly value="${Utils.format(monthlySettle.collectAmount)}元"></input>
</div>
<div class="am-u-sm-2 am-u-md-4 input-msg"></div>
</div>
<div class="am-g am-form-group am-margin-top">
<div class="am-u-sm-4 am-u-md-2 am-text-right"><span style="color: red;">*</span><input readonly style="text-align: right;width: 90px;margin-top: -6px;" value="价值及风险"></div>
<div class="am-u-sm-4 am-u-md-2 am-text-right"><input readonly style="text-align: right;margin-left: -15px" value="实际收款时间"></div>
<div class="am-u-sm-6 am-u-md-6">
<textarea style="overflow:auto; background-attachment: fixed;
background-repeat: no-repeat; border-style: solid;border-color: #FFFFFF">${project.valueRisk!}</textarea>
<input readonly value="${monthlySettle.collectActualTime?string("yyyy-MM-dd")}"></input>
</div>
<div class="am-u-sm-2 am-u-md-4 input-msg"></div>
</div>
<div class="am-g am-form-group am-margin-top">
<div class="am-u-sm-4 am-u-md-2 am-text-right"><input readonly style="text-align: right;width: 100px;margin-bottom: 12px;" value="实际收款金额"></div>
<div class="am-u-sm-6 am-u-md-6">
<input readonly value="${Utils.format(monthlySettle.collectActualAmount)}元"></input>
</div>
<div class="am-u-sm-2 am-u-md-4 input-msg"></div>
</div>
<div class="am-g am-form-group am-margin-top">
<div class="am-u-sm-4 am-u-md-2 am-text-right"><input readonly style="text-align: right;width: 69px ;margin-bottom: 6px;" value="实际欠收金额"></div>
<div class="am-u-sm-6 am-u-md-6">
<input readonly type="text" style="word-break: break-word; border:0 none;outline:none;" value="${Utils.format(monthlySettle.uncollectActualAmount)}元">
</div>
<div class="am-u-sm-2 am-u-md-4 input-msg"></div>
</div>
<div class="am-g am-form-group am-margin-top">
<div class="am-u-sm-4 am-u-md-2 am-text-right"><input readonly style="text-align: right;width: 100px ;margin-bottom: 6px;" value="超期天数"></div>
<div class="am-u-sm-6 am-u-md-6">
<input readonly type="text" style="word-break: break-word; border:0 none;outline:none;" value="${monthlySettle.timeOutDay!}">
</div>
<div class="am-u-sm-2 am-u-md-4 input-msg"></div>
</div>
<div class="am-g am-form-group am-margin-top">
<div class="am-u-sm-4 am-u-md-2 am-text-right"><input readonly style="text-align: right;width: 69px;margin-bottom: 12px;" value="到货证明"></div>
<div class="am-u-sm-6 am-u-md-6">
<input readonly value="${monthlySettle.productCertificate!}"></input>
</div>
<div class="am-u-sm-2 am-u-md-4 input-msg"></div>
</div>
<div class="am-g am-form-group am-margin-top">
<div class="am-u-sm-4 am-u-md-2 am-text-right"><input readonly style="text-align: right;width: 69px ;margin-bottom: 12px;" value="验收报告时间"></div>
<div class="am-u-sm-6 am-u-md-6">
<input readonly value="${monthlySettle.inspectionReportTime?string("yyyy-MM-dd")}" />
</div>
<div class="am-u-sm-2 am-u-md-4 input-msg"></div>
</div>
<div class="am-g am-form-group am-margin-top">
<div class="am-u-sm-4 am-u-md-2 am-text-right"><input readonly style="text-align: right;width: 69px;margin-bottom: 12px;" value="项目风险预警"></div>
<div class="am-u-sm-6 am-u-md-6">
<input readonly value="${monthlySettle.riskWarning!}"></input>
</div>
<div class="am-u-sm-2 am-u-md-4 input-msg"></div>
</div>
<div class="am-g am-form-group am-margin-top">
<div class="am-u-sm-4 am-u-md-2 am-text-right"><input readonly style="text-align: right;width: 69px ;margin-bottom: 12px;" value="已计收金额"></div>
<div class="am-u-sm-6 am-u-md-6">
<input readonly value="${Utils.format(monthlySettle.calColAmount)}元" />
</div>
<div class="am-u-sm-2 am-u-md-4 input-msg"></div>
</div>
<div class="am-g am-form-group am-margin-top">
<div class="am-u-sm-4 am-u-md-2 am-text-right"><input readonly style="text-align: right;margin-left: 10px;margin-left: -15px" value="未计收金额"></div>
<div class="am-u-sm-6 am-u-md-6">
<input readonly value="${Utils.format(monthlySettle.uncalColAmount)}元"></input>
</div>
<div class="am-u-sm-2 am-u-md-4 input-msg"></div>
</div>
@ -234,9 +253,29 @@
<!--验证表单元素validate end-->
</div>
</div>
<!--选项卡tabsend-->
<div class="am-margin">
<button type="button" class="am-btn am-btn-warning am-btn-xs" onclick="javascript:history.go(-1);">返回上一级</button>
<button type="button" class="am-btn am-btn-primary am-btn-xs" id="exportSingle">导出</button>
</div>
</form>
</div>
</div>
</@defaultLayout.layout>
<script>
/**
*导出数据
*/
$("#exportSingle").on('click', function(event) {
var time = $("#time").val();
var id = $("#id").val();
var projectName = $("#projectName").val();
location.href = "${base}/monthlySettle/exportSingle?id=" + id + "&time=" + time + "&projectName=" + projectName;
});
</script>

View File

@ -140,13 +140,9 @@
<div class="am-btn-toolbar" style="padding-left:.5rem;">
<div class="am-btn-group am-btn-group-xs">
<div class="am-btn-group am-btn-group-xs am-form-file">
<button type="button" id="bt_import" class="am-btn am-btn-default">
<span class="am-icon-archive"></span>
批量导入
<button type="button" id="importAccount" onclick="windows()" class="am-btn am-btn-default"><span
class="am-icon-archive"></span> 批量导入
</button>
<input id="doc-form-file" type="file" name="file"
onChange="ajaxUploadFile('doc-form-file','${base}/monthlySettle/batchImport')"
multiple>
</div>
<button type="button" class="am-btn am-btn-default"
onclick="location.href='${base}/monthlySettle/template'">
@ -257,40 +253,47 @@
<script src="${base}/common/jQuery-File-Upload/js/jquery.fileupload-validate.js"></script>
<script src="../assets/js/amazeui.switch.js"></script>
<script type="text/javascript">
// $(function () {
// layui.use('laydate', function(){
// var laydate = layui.laydate;
//
// var keywordsObj = {};
// $("#submit-btn").on("click", function () {
// if ($("#realName").val())
// keywordsObj.realName = $("#realName").val();
// if ($("#telephone").val())
// keywordsObj.telephone = $("#telephone").val();
// if ($("#userName").val())
// keywordsObj.userName = $("#userName").val();
// if ($("#deptId").val())
// keywordsObj.deptId = $("#deptId").val();
// if ($("#roleId").val())
// keywordsObj.roleId = $("#roleId").val();
// if ($("#workLocation").val())
// keywordsObj.workLocation = $("#workLocation").val();
// if ($("#startTime").val())
// keywordsObj.startTime = $("#startTime").val();
// if ($("#endTime").val())
// keywordsObj.endTime = $("#endTime").val();
// var startTime = $("#startTime").val();
// var endTime = $("#endTime").val();
// if(startTime > endTime){
// window.confirm('开始日期应早于结束日期');
// laydate.render({
// elem: '#time',
// type: 'month',
// btns: ['confirm'],
// trigger: 'click',
// ready: function(date){
// console.log(date);
// }
// var keywords = "";
// if (!$.isEmptyObject(keywordsObj)) {
// keywords = JSON.stringify(keywordsObj);
// }
// $("#keywords").val(keywords);
// $("#listForm").submit();
// });
// });
function windows() {
layui.use('layer', function(){
var layer = layui.layer;
var html = '<input type="text" name="layTime" id="layTime" class="form-control layer-date" readonly required value="${time!}">\n' +
'<input id="doc-form-file" type="file" name="file" onChange="ajaxUploadFile(\'doc-form-file\',\'${base}/monthlySettle/batchImport\')">'
layer.open({
type: 1,
title: "请选择导入的月份",
offset: '0px',
id: 'layerDemo',
content: html,
area: ['400px', '400px'],
success: function (layero, index) {
layui.laydate.render({
elem: "#layTime",
type: 'month',
btns: ['confirm'],
trigger: 'click',
ready: function(date){
console.log(date);
}
});
}
});
});
};
function ajaxUploadFile(id, url) {
$.ajaxFileUpload({
url: url,

View File

@ -44,7 +44,7 @@
<div class="am-tabs am-margin" data-am-tabs>
<ul class="am-tabs-nav am-nav am-nav-tabs">
<li class="am-active"><a href="#tab1">项目基本信息</a></li>
<li><a href="#tab2">项目立项(概算)信息</a></li>
<li><a href="#tab2">项目其他信息</a></li>
<li><a href="#tab3">收入明细表</a></li>
<li><a href="#tab4">采购成本明细表</a></li>
<li><a href="#tab5">项目管理成本表</a></li>
@ -104,7 +104,7 @@
<i class="am-icon-calendar"></i>
<input type="text" class="am-form-field am-input-sm" id="startDate"
name="startDate" autocomplete="off"
value="${project.startDate?string("yyyy-MM-dd")}" placeholder="项目计划开始时间"
value="${(project.startDate?string("yyyy-MM-dd"))!}" placeholder="项目计划开始时间"
data-am-datepicker>
</div>
</div>
@ -117,7 +117,7 @@
<i class="am-icon-calendar"></i>
<input type="text" class="am-form-field am-input-sm" id="endDate"
name="endDate" autocomplete="off"
value="${project.endDate?string("yyyy-MM-dd")}" placeholder="项目计划结束时间"
value="${(project.endDate?string("yyyy-MM-dd"))!}" placeholder="项目计划结束时间"
data-am-datepicker>
</div>
</div>
@ -137,36 +137,42 @@
<div class="am-u-sm-2 am-u-md-4 input-msg"></div>
</div>
<div class="am-g am-form-group am-margin-top">
<div class="am-u-sm-4 am-u-md-2 am-text-right"><span style="color: red;">*</span>合作对象</div>
<div class="am-u-sm-6 am-u-md-6">
<input type="text" class="am-input" data-validate-async data-validation-message="请输入合作对象"
name="collaborator" id="collaborator" placeholder="请输入合作对象" maxlength="20"
value="${project.collaborator!}" />
</div>
<#-- <div class="am-g am-form-group am-margin-top">-->
<#-- <div class="am-u-sm-4 am-u-md-2 am-text-right"><span style="color: red;">*</span>合作对象</div>-->
<#-- <div class="am-u-sm-6 am-u-md-6">-->
<#-- <input type="text" class="am-input" data-validate-async data-validation-message="请输入合作对象"-->
<#-- name="collaborator" id="collaborator" placeholder="请输入合作对象" maxlength="20"-->
<#-- value="${project.collaborator!}" />-->
<#-- </div>-->
<div class="am-form-file am-text-xs">
<button type="button" class="am-btn am-btn-primary am-btn-sm">
<i class="am-icon-cloud-upload"></i> 上传附件
</button>
<input id="fileupload_button_icon" type="file" name="files[]" multiple>
</div>
<!-- The global progress bar -->
<div id="progress-area-icon" class="am-margin-top-sm am-hide">
<div id="progress-text-icon" class="am-text-xs am-text-right"></div>
<div id="progress" class="am-progress am-progress-xs">
<div class="am-progress-bar" style="width: 0%"></div>
</div>
</div>
</div>
<#-- <div class="am-form-file am-text-xs">-->
<#-- <button type="button" class="am-btn am-btn-primary am-btn-sm">-->
<#-- <i class="am-icon-cloud-upload"></i> 上传附件-->
<#-- </button>-->
<#-- <input id="fileupload_button_icon" type="file" name="files[]" multiple>-->
<#-- </div>-->
<#-- <!-- The global progress bar &ndash;&gt;-->
<#-- <div id="progress-area-icon" class="am-margin-top-sm am-hide">-->
<#-- <div id="progress-text-icon" class="am-text-xs am-text-right"></div>-->
<#-- <div id="progress" class="am-progress am-progress-xs">-->
<#-- <div class="am-progress-bar" style="width: 0%"></div>-->
<#-- </div>-->
<#-- </div>-->
<#-- </div>-->
<div class="am-g am-form-group am-margin-top">
<div class="am-u-sm-4 am-u-md-2 am-text-right"><span style="color: red;">*</span>项目把握度</div>
<div class="am-u-sm-6 am-u-md-6">
<select data-am-selected id="certainty" name="certainty">
<option value="1" <#if project.certainty=1>selected</#if>>A基本确定中标待签合同合同签订中</option>
<option value="2" <#if project.certainty=2>selected</#if>>B客户产品参数、商务评分、商务资质引导成功</option>
<option value="3" <#if project.certainty=3>selected</#if>>C项目初期引导阶段</option>
<#if project.certainty??>
<option value="1" <#if project.certainty=1>selected</#if>>A基本确定中标待签合同合同签订中</option>
<option value="2" <#if project.certainty=2>selected</#if>>B客户产品参数、商务评分、商务资质引导成功</option>
<option value="3" <#if project.certainty=3>selected</#if>>C项目初期引导阶段</option>
<#else>
<option value="1" >A基本确定中标待签合同合同签订中</option>
<option value="2" >B客户产品参数、商务评分、商务资质引导成功</option>
<option value="3" >C项目初期引导阶段</option>
</#if>
</select>
</div>
<div class="am-u-sm-2 am-u-md-4 input-msg"></div>
@ -187,7 +193,7 @@
<div class="am-u-sm-6 am-u-md-6">
<input type="text" class="am-input" data-validate-async data-validation-message="请输入客户名称1000字符以内"
name="customer" placeholder="请输入客户名称1000字符以内" maxlength="1000"
value="${project.customer}" required/>
value="${project.customer!}" required/>
</div>
<div class="am-u-sm-2 am-u-md-4 input-msg"></div>
</div>
@ -197,7 +203,7 @@
<div class="am-u-sm-6 am-u-md-6">
<input type="text" class="am-input" data-validate-async data-validation-message="请输入终端客户名称1000字符以内"
name="terminalCustomer" placeholder="请输入终端客户名称1000字符以内" maxlength="1000"
value="${project.terminalCustomer}" required/>
value="${project.terminalCustomer!}" required/>
</div>
<div class="am-u-sm-2 am-u-md-4 input-msg"></div>
</div>
@ -307,7 +313,7 @@
<i class="am-icon-calendar"></i>
<input type="text" class="am-form-field am-input-sm" id="contractTime"
name="contractTime" autocomplete="off"
value="${project.contractTime?string("yyyy-MM-dd")}" placeholder="预计合同签订时间"
value="${(project.contractTime?string("yyyy-MM-dd"))!}" placeholder="预计合同签订时间"
data-am-datepicker required>
</div>
</div>
@ -320,7 +326,7 @@
<i class="am-icon-calendar"></i>
<input type="text" class="am-form-field am-input-sm" id="bidsTime"
name="bidsTime" autocomplete="off"
value="${project.bidsTime?string("yyyy-MM-dd")}" placeholder="项目计划招标时间"
value="${(project.bidsTime?string("yyyy-MM-dd"))!}" placeholder="项目计划招标时间"
data-am-datepicker required>
</div>
</div>
@ -331,8 +337,13 @@
<div class="am-u-sm-4 am-u-md-2 am-text-right"><span style="color: red;">*</span>是否二次合作</div>
<div class="am-u-sm-6 am-u-md-6">
<select data-am-selected id="isSecond" name="isSecond">
<option value="1" <#if project.isSecond=1>selected</#if>>是</option>
<option value="2" <#if project.isSecond=2>selected</#if>>否</option>
<#if project.isSecond??>
<option value="1" <#if project.isSecond=1>selected</#if>>是</option>
<option value="2" <#if project.isSecond=2>selected</#if>>否</option>
<#else>
<option value="1" >是</option>
<option value="2" >否</option>
</#if>
</select>
</div>
<div class="am-u-sm-2 am-u-md-4 input-msg"></div>
@ -342,7 +353,11 @@
<div class="am-u-sm-4 am-u-md-2 am-text-right"><span style="color: red;">*</span>签单方式</div>
<div class="am-u-sm-6 am-u-md-6">
<select data-am-selected id="signType" name="signType">
<option value="1" <#if project.signType=1>selected</#if>>紫光汇智直接投标</option>
<#if project.signType??>
<option value="1" <#if project.signType=1>selected</#if>>紫光汇智直接投标</option>
<#else>
<option value="1" >紫光汇智直接投标</option>
</#if>
</select>
</div>
<div class="am-u-sm-2 am-u-md-4 input-msg"></div>
@ -352,9 +367,15 @@
<div class="am-u-sm-4 am-u-md-2 am-text-right"><span style="color: red;">*</span>项目解决方案</div>
<div class="am-u-sm-6 am-u-md-6">
<select data-am-selected id="resolvePlan" name="resolvePlan">
<option value="1" <#if project.resolvePlan=1>selected</#if>>公共服务(智慧交通、雪亮工程、治安防控体系等)</option>
<option value="2" <#if project.resolvePlan=2>selected</#if>>泛行业(智慧园区、智慧医疗、智慧工地等)</option>
<option value="3" <#if project.resolvePlan=3>selected</#if>>其他生态</option>
<#if project.resolvePlan??>
<option value="1" <#if project.resolvePlan=1>selected</#if>>公共服务(智慧交通、雪亮工程、治安防控体系等)</option>
<option value="2" <#if project.resolvePlan=2>selected</#if>>泛行业(智慧园区、智慧医疗、智慧工地等)</option>
<option value="3" <#if project.resolvePlan=3>selected</#if>>其他生态</option>
<#else>
<option value="1" >公共服务(智慧交通、雪亮工程、治安防控体系等)</option>
<option value="2" >泛行业(智慧园区、智慧医疗、智慧工地等)</option>
<option value="3" >其他生态</option>
</#if>
</select>
</div>
<div class="am-u-sm-2 am-u-md-4 input-msg"></div>
@ -611,7 +632,7 @@
<td></td>
<td><input type="text" class="am-modal-prompt-input am-modal-prompt-input-income input-changeable-total-total-tax-include-income" value="${Utils.format(budgetBean.incomeTotalTaxInclude,'0')}" readonly></td>
<td><input type="text" class="am-modal-prompt-input am-modal-prompt-input-income input-changeable-total-total-tax-exclude-income" value="${Utils.format(budgetBean.incomeTotalTaxExclude,'0')}" readonly></td>
<td><input type="text" class="am-modal-prompt-input am-modal-prompt-input-income input-changeable-total-total-tax" value="${Utils.format(incomeDetail.incomeTotalTax,'0')}" readonly></td>
<td></td>
<td></td>
</tr>
@ -696,7 +717,7 @@
<td></td>
<td><input type="text" class="am-modal-prompt-input am-modal-prompt-input-cost input-changeable-total-total-tax-include-cost" value="${Utils.format(budgetBean.costPurchaseTotalTaxInclude,'0')}" readonly></td>
<td><input type="text" class="am-modal-prompt-input am-modal-prompt-input-cost input-changeable-total-total-tax-exclude-cost" value="${Utils.format(budgetBean.costPurchaseTotalTaxExclude,'0')}" readonly></td>
<td><input type="text" class="am-modal-prompt-input am-modal-prompt-input-cost input-changeable-total-total-tax-cost" value="${Utils.format(budgetBean.costPurchaseTotalTax,'0')}" readonly></td>
<td></td>
<td></td>
</tr>
@ -965,7 +986,7 @@
<td><input type="text" class="number" name="incomeTotalTax" value="${Utils.format(budgetBean.incomeTotalTax,'0')}" required readonly title="此列累计"></td>
</tr>
</tbody>
备注:本表所用税率分别为:
备注:本表所用税率分别为:${Utils.format(budgetBean.incomeTaxRates,'0')}
</table>
<span>成本</span>
<#-- <span class="am-text-primary"><a style="cursor: pointer" id="cost-detail">采购成本明细表</a></span>
@ -1038,7 +1059,7 @@
<td><input type="text" class="number" name="costTotalTax" value="${Utils.format(budgetBean.costTotalTax,'0')}" readonly required title="此列累计"></td>
</tr>
</tbody>
备注:本表所用税率分别为:
备注:本表所用税率分别为:${Utils.format(budgetBean.costTaxRates,'0')}
</table>
<span>管理</span>
<#--<span class="am-text-primary budget-plan-detail"><a style="cursor: pointer">资金计划表</a></span>-->

View File

@ -30,9 +30,7 @@
<div class="am-g am-form-group am-margin-top">
<div class="am-u-sm-4 am-u-md-2 am-text-right"><span style="color: red;">*</span>项目编号</div>
<div class="am-u-sm-6 am-u-md-6">
<input type="text" id="projectNo" class="am-input" data-validate-async data-validation-message="请输入项目编号50字符以内"
name="projectNo" placeholder="请输入项目编号50字符以内" maxlength="50"
value="${projectNo!}" readonly required />
<span>保存后默认提供</span>
</div>
<div class="am-u-sm-2 am-u-md-4 input-msg"></div>
</div>
@ -99,28 +97,28 @@
<div class="am-u-sm-2 am-u-md-4 input-msg"></div>
</div>
<div class="am-g am-form-group am-margin-top">
<div class="am-u-sm-4 am-u-md-2 am-text-right"><span style="color: red;">*</span>合作对象</div>
<div class="am-u-sm-6 am-u-md-6">
<input type="text" class="am-input" data-validate-async data-validation-message="请输入合作对象"
name="collaborator" id="collaborator" placeholder="请输入合作对象" maxlength="20"
value="" />
</div>
<#-- <div class="am-g am-form-group am-margin-top">-->
<#-- <div class="am-u-sm-4 am-u-md-2 am-text-right"><span style="color: red;">*</span>合作对象</div>-->
<#-- <div class="am-u-sm-6 am-u-md-6">-->
<#-- <input type="text" class="am-input" data-validate-async data-validation-message="请输入合作对象"-->
<#-- name="collaborator" id="collaborator" placeholder="请输入合作对象" maxlength="20"-->
<#-- value="" />-->
<#-- </div>-->
<div class="am-form-file am-text-xs">
<button type="button" class="am-btn am-btn-primary am-btn-sm">
<i class="am-icon-cloud-upload"></i> 上传附件
</button>
<input id="fileupload_button_icon" type="file" name="files[]" multiple>
</div>
<!-- The global progress bar -->
<div id="progress-area-icon" class="am-margin-top-sm am-hide">
<div id="progress-text-icon" class="am-text-xs am-text-right"></div>
<div id="progress" class="am-progress am-progress-xs">
<div class="am-progress-bar" style="width: 0%"></div>
</div>
</div>
</div>
<#-- <div class="am-form-file am-text-xs">-->
<#-- <button type="button" class="am-btn am-btn-primary am-btn-sm">-->
<#-- <i class="am-icon-cloud-upload"></i> 上传附件-->
<#-- </button>-->
<#-- <input id="fileupload_button_icon" type="file" name="files[]" multiple>-->
<#-- </div>-->
<#-- <!-- The global progress bar &ndash;&gt;-->
<#-- <div id="progress-area-icon" class="am-margin-top-sm am-hide">-->
<#-- <div id="progress-text-icon" class="am-text-xs am-text-right"></div>-->
<#-- <div id="progress" class="am-progress am-progress-xs">-->
<#-- <div class="am-progress-bar" style="width: 0%"></div>-->
<#-- </div>-->
<#-- </div>-->
<#-- </div>-->
<div class="am-g am-form-group am-margin-top">
<div class="am-u-sm-4 am-u-md-2 am-text-right"><span style="color: red;">*</span>项目把握度</div>

View File

@ -107,28 +107,28 @@
<div class="am-u-sm-2 am-u-md-4 input-msg"></div>
</div>
<div class="am-g am-form-group am-margin-top">
<div class="am-u-sm-4 am-u-md-2 am-text-right"><span style="color: red;">*</span>合作对象</div>
<div class="am-u-sm-6 am-u-md-6">
<input type="text" class="am-input" data-validate-async data-validation-message="请输入合作对象"
name="collaborator" id="collaborator" placeholder="请输入合作对象" maxlength="20"
value="${project.collaborator!}" />
</div>
<#-- <div class="am-g am-form-group am-margin-top">-->
<#-- <div class="am-u-sm-4 am-u-md-2 am-text-right"><span style="color: red;">*</span>合作对象</div>-->
<#-- <div class="am-u-sm-6 am-u-md-6">-->
<#-- <input type="text" class="am-input" data-validate-async data-validation-message="请输入合作对象"-->
<#-- name="collaborator" id="collaborator" placeholder="请输入合作对象" maxlength="20"-->
<#-- value="${project.collaborator!}" />-->
<#-- </div>-->
<div class="am-form-file am-text-xs">
<button type="button" class="am-btn am-btn-primary am-btn-sm">
<i class="am-icon-cloud-upload"></i> 上传附件
</button>
<input id="fileupload_button_icon" type="file" name="files[]" multiple>
</div>
<!-- The global progress bar -->
<div id="progress-area-icon" class="am-margin-top-sm am-hide">
<div id="progress-text-icon" class="am-text-xs am-text-right"></div>
<div id="progress" class="am-progress am-progress-xs">
<div class="am-progress-bar" style="width: 0%"></div>
</div>
</div>
</div>
<#-- <div class="am-form-file am-text-xs">-->
<#-- <button type="button" class="am-btn am-btn-primary am-btn-sm">-->
<#-- <i class="am-icon-cloud-upload"></i> 上传附件-->
<#-- </button>-->
<#-- <input id="fileupload_button_icon" type="file" name="files[]" multiple>-->
<#-- </div>-->
<#-- <!-- The global progress bar &ndash;&gt;-->
<#-- <div id="progress-area-icon" class="am-margin-top-sm am-hide">-->
<#-- <div id="progress-text-icon" class="am-text-xs am-text-right"></div>-->
<#-- <div id="progress" class="am-progress am-progress-xs">-->
<#-- <div class="am-progress-bar" style="width: 0%"></div>-->
<#-- </div>-->
<#-- </div>-->
<#-- </div>-->
<div class="am-g am-form-group am-margin-top">
<div class="am-u-sm-4 am-u-md-2 am-text-right"><span style="color: red;">*</span>项目把握度</div>
@ -277,7 +277,7 @@
<i class="am-icon-calendar"></i>
<input type="text" class="am-form-field am-input-sm" id="contractTime"
name="contractTime" autocomplete="off"
value="${project.contractTime?string("yyyy-MM-dd")}" placeholder="预计合同签订时间"
value="${(project.contractTime?string("yyyy-MM-dd"))!}" placeholder="预计合同签订时间"
data-am-datepicker required>
</div>
</div>
@ -290,7 +290,7 @@
<i class="am-icon-calendar"></i>
<input type="text" class="am-form-field am-input-sm" id="bidsTime"
name="bidsTime" autocomplete="off"
value="${project.bidsTime?string("yyyy-MM-dd")}" placeholder="项目计划招标时间"
value="${(project.bidsTime?string("yyyy-MM-dd"))!}" placeholder="项目计划招标时间"
data-am-datepicker required>
</div>
</div>
@ -377,7 +377,7 @@
<textarea rows="3" cols="20" id="CalculationCollection" name="CalculationCollection" maxlength="1000"
class="am-input" data-validate-async data-validation-message="按照开票金额及时间罗列计收计划"
placeholder="按照开票金额及时间罗列计收计划" required
>${project.CalculationCollection!}</textarea>
>${project.calculationCollection!}</textarea>
</div>
<div class="am-u-sm-2 am-u-md-4 input-msg"></div>
</div>

View File

@ -338,8 +338,8 @@
<td>${Utils.format(list.grossProfit, "0.00")}</td>
<td>${Utils.format(list.grossProfitMargin, "0.00")}</td>
<td>${list.principal!}</td>
<td>${list.contractTime?string("yyyy-MM-dd HH:mm:ss")}</td>
<td>${list.bidsTime?string("yyyy-MM-dd HH:mm:ss")}</td>
<td>${(list.contractTime?string("yyyy-MM-dd HH:mm:ss"))!}</td>
<td>${(list.bidsTime?string("yyyy-MM-dd HH:mm:ss"))!}</td>
<td>${list.isSecondStr!}</td>
<td>${list.signTypeStr!}</td>
<td>${Utils.format(list.advanceInterestAmount, "0.00")}</td>
@ -348,8 +348,8 @@
<td>${list.approveName!}</td>
<td>${list.creatorName!}</td>
<td>${list.deptName!}</td>
<td>${list.startDate?string("yyyy-MM")} ~ ${list.endDate?string("yyyy-MM")}</td>
<td>${list.lastUpdateTime?string("yyyy-MM-dd HH:mm:ss")}</td>
<td>${(list.startDate?string("yyyy-MM"))!} ~ ${(list.endDate?string("yyyy-MM"))!}</td>
<td>${(list.lastUpdateTime?string("yyyy-MM-dd HH:mm:ss"))!}</td>
<td>
<div class="am-btn-toolbar">
<div class="am-btn-group am-btn-group-xs">