This commit is contained in:
xd 2024-07-01 15:37:09 +08:00
parent 04d517dc29
commit 4278bd577a
6 changed files with 176 additions and 32 deletions

View File

@ -0,0 +1,15 @@
package com.ruoyi.common.annotation;
import java.lang.annotation.*;
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.FIELD})
@Documented
public @interface DataName {
String name() default ""; // 字段名称
/**
* 读取枚举内容转义表达式 (: 0=,1=,2=未知)
*/
String readConverterExp() default "";
}

View File

@ -73,6 +73,11 @@
<artifactId>lombok</artifactId> <artifactId>lombok</artifactId>
<version>1.18.26</version> <version>1.18.26</version>
</dependency> </dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus</artifactId>
<version>2.0.5</version>
</dependency>
</dependencies> </dependencies>

View File

@ -0,0 +1,78 @@
package com.ruoyi.system.domain;
import com.fasterxml.jackson.annotation.JsonFormat;
import java.util.Date;
public class SysChangeRecord {
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date changeTime;
private String createName;
private String changeField;
private String beforeChange;
private String afterChange;
private String typeId;
private String remark;
public Date getChangeTime() {
return changeTime;
}
public void setChangeTime(Date changeTime) {
this.changeTime = changeTime;
}
public String getCreateName() {
return createName;
}
public void setCreateName(String createName) {
this.createName = createName;
}
public String getChangeField() {
return changeField;
}
public void setChangeField(String changeField) {
this.changeField = changeField;
}
public String getBeforeChange() {
return beforeChange;
}
public void setBeforeChange(String beforeChange) {
this.beforeChange = beforeChange;
}
public String getAfterChange() {
return afterChange;
}
public void setAfterChange(String afterChange) {
this.afterChange = afterChange;
}
public String getTypeId() {
return typeId;
}
public void setTypeId(String typeId) {
this.typeId = typeId;
}
public String getRemark() {
return remark;
}
public void setRemark(String remark) {
this.remark = remark;
}
}

View File

@ -0,0 +1,14 @@
package com.ruoyi.system.mapper;
import com.ruoyi.system.domain.SysChangeRecord;
/**
* 变更日志记录Mapper
*/
public interface SysChangeRecordMapper {
/**
* 插入
* @param changeRecord
*/
public void insertChangeRecord(SysChangeRecord changeRecord);
}

View File

@ -0,0 +1,27 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.ruoyi.system.mapper.SysChangeRecordMapper">
<insert id="insertChangeRecord" parameterType="SysChangeRecord">
insert into sys_change_record
<trim prefix="(" suffix=")" suffixOverrides=",">
<if test="changeTime != null">changeTime,</if>
<if test="createName != null and createName != ''">createName,</if>
<if test="changeField != null and changeField != ''">changeField,</if>
<if test="beforeChange != null and beforeChange != ''">beforeChange,</if>
<if test="afterChange != null and afterChange != ''">afterChange,</if>
<if test="typeId != null and typeId != ''">typeId,</if>
<if test="remark != null and remark != ''">remark,</if>
</trim>
<trim prefix="values (" suffix=")" suffixOverrides=",">
<if test="changeTime != null">#{changeTime},</if>
<if test="createName != null and createName != ''">#{createName},</if>
<if test="changeField != null and changeField != ''">#{changeField},</if>
<if test="beforeChange != null and beforeChange != ''">#{beforeChange},</if>
<if test="afterChange != null and afterChange != ''">#{afterChange},</if>
<if test="typeId != null and typeId != ''">#{typeId},</if>
<if test="remark != null and remark != ''">#{remark},</if>
</trim>
</insert>
</mapper>

View File

@ -20,16 +20,6 @@
clearable clearable
/> />
</el-form-item> </el-form-item>
<!--<el-form-item label="提交状态" prop="quotApprovalStatus">
<el-select v-model="queryParams.quotApprovalStatus" placeholder="请选择提交状态" clearable>
<el-option
v-for="dict in dict.type.rb_quot_approval_status"
:key="dict.value"
:label="dict.label"
:value="dict.value"
/>
</el-select>
</el-form-item>-->
<el-form-item> <el-form-item>
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button> <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button> <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
@ -38,7 +28,7 @@
<el-table width="100%" v-loading="loading" :data="quotsList" :row-class-name="rowQuotsIndex"> <el-table width="100%" v-loading="loading" :data="quotsList" :row-class-name="rowQuotsIndex">
<el-table-column fixed="left" label="序号" align="center" prop="index" width="50"/> <el-table-column fixed="left" label="序号" align="center" prop="index" width="50"/>
<el-table-column fixed="left" label="操作" align="center" width="60" class-name="small-padding fixed-width" v-if="checkRole(['SALES_MAN'])"> <el-table-column fixed="left" label="操作" align="center" width="60" class-name="small-padding fixed-width">
<template slot-scope="scope"> <template slot-scope="scope">
<el-button type="text" @click="handleDeleteClick(scope.row)">删除</el-button> <el-button type="text" @click="handleDeleteClick(scope.row)">删除</el-button>
</template> </template>
@ -49,11 +39,6 @@
<el-link :underline="false" type="primary" @click="handleDetail(scope.row)">{{scope.row.quotCode}}</el-link> <el-link :underline="false" type="primary" @click="handleDetail(scope.row)">{{scope.row.quotCode}}</el-link>
</template> </template>
</el-table-column> </el-table-column>
<!--<el-table-column fixed="left" label="提交状态" align="center" prop="quotApprovalStatus" width="150px">
<template slot-scope="scope">
<dict-tag :options="dict.type.rb_quot_approval_status" :value="scope.row.quotApprovalStatus"/>
</template>
</el-table-column>-->
<el-table-column label="报价客户" width="250" align="center" prop="quotCustomer" /> <el-table-column label="报价客户" width="250" align="center" prop="quotCustomer" />
<el-table-column label="报价项目" width="250" align="center" prop="quotProject" /> <el-table-column label="报价项目" width="250" align="center" prop="quotProject" />
<el-table-column label="总价" width="100" align="center" prop="totalPrice" /> <el-table-column label="总价" width="100" align="center" prop="totalPrice" />
@ -105,7 +90,7 @@
<el-input style="width:65px" v-model="perc" size="small" @blur="changeData" @keyup.enter.native="changeData"></el-input> <el-input style="width:65px" v-model="perc" size="small" @blur="changeData" @keyup.enter.native="changeData"></el-input>
<el-input style="width:65px;margin-left: 5px" v-model="perc2" size="small" @blur="changeData" @keyup.enter.native="changeData"></el-input> <el-input style="width:65px;margin-left: 5px" v-model="perc2" size="small" @blur="changeData" @keyup.enter.native="changeData"></el-input>
<!--总价:<span style="color:red;font-size: 15px">{{sumSelectedResultData}} </span>--> <!--总价:<span style="color:red;font-size: 15px">{{sumSelectedResultData}} </span>-->
<el-select v-model="form.rbDateUid" style="margin-left: 20px;width: 235px;" :disabled="selectedResultData.length==0 || form.quotApprovalStatus!=0"> <el-select v-model="form.rbDateUid" style="margin-left: 20px;width: 235px;" :disabled="selectedResultData.length==0">
<el-option <el-option
v-for="item in versionList" v-for="item in versionList"
:key="item.value" :key="item.value"
@ -114,13 +99,22 @@
@click.native="selectRbDate(item.value)"/> @click.native="selectRbDate(item.value)"/>
</el-select> </el-select>
<el-button style="float: right;margin-left: 5px;" size="small" type="success" icon="el-icon-document" @click="handleMadeQuotClick" :disabled="selectedResultData.length==0 || madeQuotDis">生成报价单</el-button> <el-button style="float: right;margin-left: 5px;" size="small" type="success" icon="el-icon-document" @click="handleMadeQuotClick" :disabled="selectedResultData.length==0 || madeQuotDis">生成报价单</el-button>
<el-button style="float: right;" size="small" type="warning" icon="el-icon-folder" @click="handleSaveOtherClick" v-if="this.form.quotApprovalStatus==0" :disabled="selectedResultData.length==0">另存为</el-button> <el-button style="float: right;" size="small" type="warning" icon="el-icon-folder" @click="handleSaveOtherClick">另存为</el-button>
<el-button style="float: right;" size="small" type="warning" icon="el-icon-folder" @click="handleSaveClick" v-if="this.form.quotApprovalStatus==0" :disabled="selectedResultData.length==0">保存</el-button> <el-button style="float: right;" size="small" type="warning" icon="el-icon-folder" @click="handleSaveClick">保存</el-button>
</el-form-item> </el-form-item>
</el-col> </el-col>
</el-row> </el-row>
<el-button size="mini" type="info" plain icon="el-icon-upload2" @click="handleExport">导出</el-button>
<el-table v-loading="selectedResultLoading" width="100%;" :row-class-name="selectedResultIndex" :data="selectedResultData" style="margin-top: 10px"> <el-row :gutter="10" class="mb8">
<el-col :span="1.5">
<el-button type="danger" icon="el-icon-delete" size="mini" @click="handleDeleteQuotMaterial">删除</el-button>
</el-col>
<el-col :span="1.5">
<el-button size="mini" type="info" plain icon="el-icon-upload2" @click="handleExport">导出</el-button>
</el-col>
</el-row>
<el-table v-loading="selectedResultLoading" width="100%;" :row-class-name="selectedResultIndex" :data="selectedResultData" @selection-change="handleQuotMaterialSelectionChange" style="margin-top: 10px">
<el-table-column type="selection" width="50" align="center"/>
<el-table-column fixed="left" label="" align="center" prop="index" width="50"/> <el-table-column fixed="left" label="" align="center" prop="index" width="50"/>
<el-table-column label="版本uid" align="center" prop="uid_0" v-if="false"/> <el-table-column label="版本uid" align="center" prop="uid_0" v-if="false"/>
<el-table-column fixed="left" label="产品型号" align="center" prop="name_0" width="180"/> <el-table-column fixed="left" label="产品型号" align="center" prop="name_0" width="180"/>
@ -148,9 +142,6 @@
<el-table-column label="总价" align="center" prop="allPrice"/> <el-table-column label="总价" align="center" prop="allPrice"/>
</el-table> </el-table>
</el-form> </el-form>
<!--<div slot="footer" class="dialog-footer" v-if="this.form.quotApprovalStatus==0">
<el-button type="primary" @click="handleCommitClick">提交报价</el-button>
</div>-->
</el-dialog> </el-dialog>
<pagination <pagination
v-show="total>0" v-show="total>0"
@ -178,8 +169,7 @@
} }
</style> </style>
<script> <script>
import { checkRole } from "@/utils/permission"; // import {toDecimal, versionList,listQuots,getQuotDetail,deleteQuots,updateSelectedResultData,madeQuot,saveQuot } from "@/api/redBook/redBook";
import {toDecimal, versionList,listQuots,getQuotDetail,deleteQuots,updateSelectedResultData,madeQuot,saveQuot,commitQuot } from "@/api/redBook/redBook";
/** 弹窗放大、拖拽 */ /** 弹窗放大、拖拽 */
import elDragDialog from "@/directive/dialog/dragDialog"; import elDragDialog from "@/directive/dialog/dragDialog";
@ -199,6 +189,8 @@
total: 0, total: 0,
// //
quotsList: [], quotsList: [],
//
checkedQuotMaterial: [],
// //
dateRange: [], dateRange: [],
// //
@ -212,7 +204,7 @@
}, },
// //
form: {quotApprovalStatus:''}, form: {},
// //
rules: { rules: {
quotCustomer: [ quotCustomer: [
@ -242,15 +234,10 @@
} }
}, },
created() { created() {
/*const roles = this.$store.state.user.roles;
if(roles && roles.indexOf('QUOT') !== -1 ){//
this.queryParams.quotApprovalStatus = '1';
}*/
this.getList(); this.getList();
this.getVersionList(); this.getVersionList();
}, },
methods: { methods: {
checkRole,
/** 查询报价单列表 */ /** 查询报价单列表 */
getList() { getList() {
this.loading = true; this.loading = true;
@ -478,6 +465,24 @@
} }
}, },
/** 报价单-产品删除按钮操作 */
handleDeleteQuotMaterial() {
if (this.checkedQuotMaterial.length == 0) {
this.$modal.msgError("请先选择要删除的报价单-产品数据");
} else {
const quotMaterialList = this.selectedResultData;
const checkedQuotMaterial = this.checkedQuotMaterial;
this.selectedResultData = quotMaterialList.filter(function(item) {
return checkedQuotMaterial.indexOf(item.index) == -1
});
}
},
/** 复选框选中数据 */
handleQuotMaterialSelectionChange(selection) {
this.checkedQuotMaterial = selection.map(item => item.index)
},
// //
getTodayCourse(){ getTodayCourse(){
const myDate = new Date(); const myDate = new Date();