|
@@ -2,18 +2,28 @@
|
|
|
<script setup>
|
|
|
import serviceVarietyDia from './components/serviceVarietyDia.vue'
|
|
|
import {useRouter,useRoute} from 'vue-router'
|
|
|
+ import {useStore} from 'vuex'
|
|
|
import {ElMessage} from 'element-plus'
|
|
|
import {getSellerList,getContractSearchList} from '@/api/crm'
|
|
|
import {getServiceList,registerAdd,registerDetail,registerEdit,registerInvoice,registerPayment} from '@/api/financialMana'
|
|
|
+ import scrollableSelect from '@/components/scrollable-select/index.vue'
|
|
|
|
|
|
const router = useRouter()
|
|
|
const route = useRoute()
|
|
|
+ const store=useStore()
|
|
|
|
|
|
const contractInfoForm=ref(null)
|
|
|
// 开票记录表单
|
|
|
const invoiceFormRef=ref(null)
|
|
|
// 到款记录表单
|
|
|
const placementFormRef=ref(null)
|
|
|
+
|
|
|
+ const contractSourceArray=['非CRM合同导入','CRM合同导入']
|
|
|
+ const contractStatusArray=[{id:1,label:"已审批"},{id:2,label:"单章寄回"},{id:3,label:"已签回"}]
|
|
|
+ const contractTypeArray=[{id:1,label:"新签"},{id:2,label:"续约"}]
|
|
|
+ const operationType=[{op_type:1,label:"合规登记"},{op_type:2,label:"开票登记"},{op_type:3,label:"到款登记"},
|
|
|
+ {op_type:4,label:"修改合同状态"},{op_type:5,label:"删除合同登记"},{op_type:6,label:"合规编辑"}]
|
|
|
+
|
|
|
// 合同信息
|
|
|
const contractInfo=reactive({
|
|
|
/*
|
|
@@ -21,6 +31,13 @@
|
|
|
查看-view 合规登记-compliance 开票登记-invoice 到款登记-placement
|
|
|
*/
|
|
|
operationtype:"compliance",
|
|
|
+ // 权限对象,判断是否有 合规登记、开票登记、到款登记权限
|
|
|
+ permissionItem:{
|
|
|
+ compliance:false, //合规
|
|
|
+ invoice:false, // 开票
|
|
|
+ placement:false // 到款
|
|
|
+ },
|
|
|
+ // 合规登记表单
|
|
|
form:{
|
|
|
product_id:1,
|
|
|
contract_register_id:'',
|
|
@@ -38,21 +55,9 @@
|
|
|
sign_date:'',
|
|
|
agreed_pay_time:'',
|
|
|
services:[],
|
|
|
+ register_status:'',
|
|
|
remark:""
|
|
|
},
|
|
|
- moneyData:{
|
|
|
- haveInvoiceMoney:'',
|
|
|
- waitInvoiceMoney:'',
|
|
|
- allInvoiceMoney:'',
|
|
|
- // 到款金额
|
|
|
- havePlacementMoney:'',
|
|
|
- waitPlacementMoney:'',
|
|
|
- allPlacementMoney:''
|
|
|
- },
|
|
|
- // 有效期
|
|
|
- contractValidityDate:[],
|
|
|
- //销售列表
|
|
|
- sellerList:[],
|
|
|
rules:{
|
|
|
contract_source:{required:true,message:'合同来源不能为空',trigger:'change'},
|
|
|
contract_code:{required:true,message:'合同编号不能为空',trigger:'blur'},
|
|
@@ -76,6 +81,20 @@
|
|
|
agreed_pay_time:{required:true,message:'约定付款时间不能为空',trigger:'blur'}
|
|
|
|
|
|
},
|
|
|
+ moneyData:{
|
|
|
+ // 开票金额
|
|
|
+ haveInvoiceMoney:'',
|
|
|
+ waitInvoiceMoney:'',
|
|
|
+ allInvoiceMoney:'',
|
|
|
+ // 到款金额
|
|
|
+ havePlacementMoney:'',
|
|
|
+ waitPlacementMoney:'',
|
|
|
+ allPlacementMoney:''
|
|
|
+ },
|
|
|
+ // 有效期
|
|
|
+ contractValidityDate:[],
|
|
|
+ //销售列表
|
|
|
+ sellerList:[],
|
|
|
// 合同编号----------------------列表
|
|
|
contractNoArray:[],
|
|
|
// 请求列表参数
|
|
@@ -126,35 +145,66 @@
|
|
|
],
|
|
|
rowErrorShow:''
|
|
|
})
|
|
|
-
|
|
|
+ // 查看套餐报价单 图片
|
|
|
const previewImage=ref('')
|
|
|
+ // 查看套餐报价单 标题
|
|
|
const previewImageTitle=ref('')
|
|
|
+// -----------------------------监听
|
|
|
+ // 已开票金额
|
|
|
watch(()=> contractInfo.moneyData.haveInvoiceMoney ,(newValue)=>{
|
|
|
contractInfo.moneyData.waitInvoiceMoney = contractInfo.moneyData.allInvoiceMoney-newValue
|
|
|
contractInfo.moneyData.waitInvoiceMoney=Math.round(contractInfo.moneyData.waitInvoiceMoney*100)/100
|
|
|
})
|
|
|
+ // 已到款金额
|
|
|
watch(()=> contractInfo.moneyData.havePlacementMoney ,(newValue)=>{
|
|
|
contractInfo.moneyData.waitPlacementMoney = contractInfo.moneyData.allPlacementMoney-newValue
|
|
|
contractInfo.moneyData.waitPlacementMoney=Math.round(contractInfo.moneyData.waitPlacementMoney*100)/100
|
|
|
})
|
|
|
- const contractSourceArray=['非CRM合同导入','CRM合同导入']
|
|
|
- const contractStatusArray=[{id:1,label:"已审批"},{id:2,label:"单章寄回"},{id:3,label:"已签回"}]
|
|
|
- const contractTypeArray=[{id:1,label:"新签"},{id:2,label:"续约"}]
|
|
|
- const operationType=[{op_type:1,label:"合规登记"},{op_type:2,label:"开票登记"},{op_type:3,label:"到款登记"},
|
|
|
- {op_type:4,label:"修改合同状态"},{op_type:5,label:"删除合同登记"}]
|
|
|
// -----------------------method
|
|
|
+ // 权限验证
|
|
|
+ const permissionValidation=()=>{
|
|
|
+ /*
|
|
|
+ 由于可以通过修改地址栏的type更改操作类型和权限,
|
|
|
+ 为了防止用户修改地址栏进行权限之外的操作。
|
|
|
+ */
|
|
|
+ let flag=0 // 拥有的权限个数
|
|
|
+ let permissionButtons=store.getters.permissionButtons
|
|
|
+ for (let i = 0,len=permissionButtons.length; i < len || flag==3; i++) {
|
|
|
+ const element = permissionButtons[i];
|
|
|
+ if(element.button_code=='financial:list:complianceAdd' || element.button_code=='financial:list:complianceEdit'){
|
|
|
+ contractInfo.permissionItem.compliance=true
|
|
|
+ flag++
|
|
|
+ }else if(element.button_code=='financial:list:invoice'){
|
|
|
+ contractInfo.permissionItem.invoice=true
|
|
|
+ flag++
|
|
|
+ }else if(element.button_code=='financial:list:placement'){
|
|
|
+ contractInfo.permissionItem.placement=true
|
|
|
+ flag++
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if(contractInfo.operationtype!='view'){
|
|
|
+ if(contractInfo.permissionItem[contractInfo.operationtype]===false){
|
|
|
+ // 没有权限
|
|
|
+ let messageHint=ElMessage.warning('暂无权限')
|
|
|
+ setTimeout(()=>{
|
|
|
+ messageHint.close()
|
|
|
+ router.back()
|
|
|
+ },1000)
|
|
|
+ return false
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return true
|
|
|
+ }
|
|
|
//获取销售列表
|
|
|
const getSellerListFun=()=>{
|
|
|
getSellerList().then(res=>{
|
|
|
contractInfo.sellerList=res.data || []
|
|
|
- // console.log(contractInfo.sellerList);
|
|
|
})
|
|
|
}
|
|
|
// 获取服务列表
|
|
|
const getServiceListFun=()=>{
|
|
|
getServiceList().then(res=>{
|
|
|
contractInfo.serviceArray=res.data || []
|
|
|
- // console.log(contractInfo.serviceArray);
|
|
|
})
|
|
|
}
|
|
|
|
|
@@ -187,6 +237,7 @@
|
|
|
}
|
|
|
contractInfo.contractValidityDate=[]
|
|
|
setTimeout(()=>{
|
|
|
+ // 去除错误信息
|
|
|
contractInfoForm.value && contractInfoForm.value.clearValidate()
|
|
|
},0)
|
|
|
}
|
|
@@ -245,7 +296,11 @@
|
|
|
contractInfo.form.seller_name=selectItem.seller_name
|
|
|
contractInfo.form.seller_id=selectItem.seller_id
|
|
|
contractInfo.form.contract_type=selectItem.contract_type_key
|
|
|
- contractInfoForm.value && contractInfoForm.value.validateField()
|
|
|
+ contractInfoForm.value &&
|
|
|
+ contractInfoForm.value.validateField([
|
|
|
+ 'contract_code','company_name','contract_type','seller_id',
|
|
|
+ 'start_date','contract_amount','contract_type'
|
|
|
+ ])
|
|
|
}
|
|
|
// 销售选中
|
|
|
const selectSeller=(value)=>{
|
|
@@ -272,108 +327,78 @@
|
|
|
}
|
|
|
// 表格删除行
|
|
|
const deleteRow=(type,index)=>{
|
|
|
+ let tempArr=[]
|
|
|
if(type=='invoice'){
|
|
|
- if(invoiceForm.invoiceData[index].amount=='' && invoiceForm.invoiceData[index].invoice_date==''){
|
|
|
- // 没有内容 直接删除
|
|
|
- invoiceForm.invoiceData.splice(index,1)
|
|
|
- }else{
|
|
|
- ElMessageBox.confirm('删除后不可恢复,是否删除该条开票记录?',
|
|
|
- '提示',
|
|
|
- {
|
|
|
- confirmButtonText: '确定',
|
|
|
- cancelButtonText: '取消',
|
|
|
- type: 'warning',
|
|
|
- }).then(res=>{
|
|
|
- // 有金额才进行删除后的运算
|
|
|
- if(invoiceForm.invoiceData[index].amount!=''){
|
|
|
- invoiceForm.invoiceData.splice(index,1)
|
|
|
- let money=0
|
|
|
- invoiceForm.invoiceData.map(item =>{
|
|
|
- money+=parseFloat(item.amount) || 0
|
|
|
- // console.log(money);
|
|
|
- })
|
|
|
- // 保留两位小数、防止计算时精度丢失
|
|
|
- money=Math.round(money*100)/100
|
|
|
+ tempArr=invoiceForm.invoiceData
|
|
|
+ }else{
|
|
|
+ tempArr=placementForm.placementData
|
|
|
+ }
|
|
|
+ if(tempArr[index].amount=='' && tempArr[index].invoice_date==''){
|
|
|
+ // 没有内容 直接删除
|
|
|
+ tempArr.splice(index,1)
|
|
|
+ }else{
|
|
|
+ ElMessageBox.confirm('删除后不可恢复,是否删除该条开票记录?',
|
|
|
+ '提示',
|
|
|
+ {
|
|
|
+ confirmButtonText: '确定',
|
|
|
+ cancelButtonText: '取消',
|
|
|
+ type: 'warning',
|
|
|
+ }).then(res=>{
|
|
|
+ // 有金额才进行删除后的运算
|
|
|
+ if(tempArr[index].amount!=''){
|
|
|
+ tempArr.splice(index,1)
|
|
|
+ let money=0
|
|
|
+ tempArr.map(item =>{
|
|
|
+ money+=parseFloat(item.amount) || 0
|
|
|
+ // console.log(money);
|
|
|
+ })
|
|
|
+ // 保留两位小数、防止计算时精度丢失
|
|
|
+ money=Math.round(money*100)/100
|
|
|
+ if(type=='invoice'){
|
|
|
contractInfo.moneyData.haveInvoiceMoney=money
|
|
|
}else{
|
|
|
- invoiceForm.invoiceData.splice(index,1)
|
|
|
- }
|
|
|
- }).catch(()=>{})
|
|
|
- }
|
|
|
- }else{
|
|
|
- if(placementForm.placementData[index].amount=='' && placementForm.placementData[index].invoice_date==''){
|
|
|
- // 没有内容 直接删除
|
|
|
- placementForm.placementData.splice(index,1)
|
|
|
- }else{
|
|
|
- ElMessageBox.confirm('删除后不可恢复,是否删除该条到款记录?',
|
|
|
- '提示',
|
|
|
- {
|
|
|
- confirmButtonText: '确定',
|
|
|
- cancelButtonText: '取消',
|
|
|
- type: 'warning',
|
|
|
- }).then(res=>{
|
|
|
- // 有金额才进行删除后的运算
|
|
|
- if(placementForm.placementData[index].amount!=''){
|
|
|
- placementForm.placementData.splice(index,1)
|
|
|
- let money=0
|
|
|
- placementForm.placementData.map(item =>{
|
|
|
- money+=parseFloat(item.amount) || 0
|
|
|
- // console.log(money);
|
|
|
- })
|
|
|
- // 保留两位小数、防止计算时精度丢失
|
|
|
- money=Math.round(money*100)/100
|
|
|
contractInfo.moneyData.havePlacementMoney=money
|
|
|
- }else{
|
|
|
- placementForm.placementData.splice(index,1)
|
|
|
}
|
|
|
- }).catch(()=>{})
|
|
|
- }
|
|
|
+ }else{
|
|
|
+ tempArr.splice(index,1)
|
|
|
+ }
|
|
|
+ }).catch(()=>{})
|
|
|
}
|
|
|
}
|
|
|
// 金额改变
|
|
|
const moneyChange=(type,value,index)=>{
|
|
|
// console.log(value);
|
|
|
let numerValue=parseFloat(value)
|
|
|
+ let tempArr=[]
|
|
|
if(type=='invoice'){
|
|
|
- if(!numerValue&&numerValue!=0&&value){
|
|
|
- invoiceForm.invoiceData[index].amount=''
|
|
|
- ElMessage.error('请输入数字')
|
|
|
- return
|
|
|
- }
|
|
|
- // 如果输入不是 以.结尾&&只有一个.的话,就赋值为转为成数字后的值
|
|
|
- if(!(value.endsWith('.') && value.indexOf('.')==(value.length-1))&&numerValue){
|
|
|
- invoiceForm.invoiceData[index].amount=numerValue
|
|
|
- }
|
|
|
- // console.log(numerValue);
|
|
|
+ tempArr=invoiceForm.invoiceData
|
|
|
+ }else{
|
|
|
+ tempArr=placementForm.placementData
|
|
|
+ }
|
|
|
|
|
|
- let money=0
|
|
|
- invoiceForm.invoiceData.map(item =>{
|
|
|
- money+=parseFloat(item.amount) || 0
|
|
|
- })
|
|
|
- // 保留两位小数、防止计算时精度丢失
|
|
|
- money=Math.round(money*100)/100
|
|
|
+ if(!numerValue&&numerValue!=0&&value){
|
|
|
+ tempArr[index].amount=''
|
|
|
+ ElMessage.error('请输入数字')
|
|
|
+ return
|
|
|
+ }
|
|
|
+ // 如果输入不是 以.结尾&&只有一个. 或者 不是零结尾的话,就赋值为转为成数字后的值
|
|
|
+ // 考虑到类似12.02的情况
|
|
|
+ if(!((value.endsWith('.') && value.indexOf('.')==(value.length-1)) ||
|
|
|
+ (value.endsWith('0') && value.indexOf('.')==(value.length-2)))&&numerValue){
|
|
|
+ tempArr[index].amount=numerValue
|
|
|
+ }
|
|
|
+ let money=0
|
|
|
+ tempArr.map(item =>{
|
|
|
+ money+=Math.round(item.amount*100)/100 || 0
|
|
|
+ })
|
|
|
+ // 保留两位小数、防止计算时精度丢失
|
|
|
+ money=Math.round(money*100)/100
|
|
|
+
|
|
|
+ if(type=='invoice'){
|
|
|
contractInfo.moneyData.haveInvoiceMoney=money
|
|
|
-
|
|
|
}else{
|
|
|
- if(!numerValue&&numerValue!=0&&value){
|
|
|
- placementForm.placementData[index].amount=''
|
|
|
- ElMessage.error('请输入数字')
|
|
|
- return
|
|
|
- }
|
|
|
- // 如果输入不是 以.结尾&&只有一个.的话,就赋值为转为成数字后的值
|
|
|
- if(!(value.endsWith('.') && value.indexOf('.')==(value.length-1))&&numerValue){
|
|
|
- placementForm.placementData[index].amount=numerValue
|
|
|
- }
|
|
|
-
|
|
|
- let money=0
|
|
|
- placementForm.placementData.map(item =>{
|
|
|
- money+=parseFloat(item.amount) || 0
|
|
|
- })
|
|
|
- // 保留两位小数、防止计算时精度丢失
|
|
|
- money=Math.round(money*100)/100
|
|
|
contractInfo.moneyData.havePlacementMoney=money
|
|
|
}
|
|
|
-
|
|
|
}
|
|
|
// 金额格式化,保留两位小数
|
|
|
const moneyFormatter=(money)=>{
|
|
@@ -389,6 +414,7 @@
|
|
|
}
|
|
|
// 合规登记-提交
|
|
|
const complianceSubmit=()=>{
|
|
|
+ console.log(contractInfo.checkedService);
|
|
|
contractInfoForm.value.validate(valid=>{
|
|
|
if(valid){
|
|
|
if(contractInfo.checkedService.length==0){
|
|
@@ -484,6 +510,7 @@
|
|
|
// 转化
|
|
|
placementForm.placementData.forEach(element => {
|
|
|
element.amount = parseFloat(element.amount)
|
|
|
+ element.invoice_date = element.invoice_date+'-01'
|
|
|
});
|
|
|
let param={
|
|
|
contract_register_id:contractInfo.form.contract_register_id,
|
|
@@ -517,12 +544,15 @@
|
|
|
}
|
|
|
|
|
|
// ----------------------created
|
|
|
- getSellerListFun()
|
|
|
- getServiceListFun()
|
|
|
-
|
|
|
contractInfo.form.contract_register_id = parseInt(route.query.complianceId) || ''
|
|
|
- // id没有,认为是合规登记
|
|
|
+ // complianceId没有,认为是合规登记
|
|
|
contractInfo.operationtype=contractInfo.form.contract_register_id?(route.query.type || 'compliance'):'compliance'
|
|
|
+ if(permissionValidation()){
|
|
|
+ // 权限通过
|
|
|
+ getSellerListFun()
|
|
|
+ getServiceListFun()
|
|
|
+ }
|
|
|
+
|
|
|
if(contractInfo.form.contract_register_id){
|
|
|
//请求详情接口
|
|
|
registerDetail({contract_register_id:contractInfo.form.contract_register_id}).then(res=>{
|
|
@@ -541,15 +571,16 @@
|
|
|
sign_date:res.data.sign_date,
|
|
|
agreed_pay_time:res.data.agreed_pay_time,
|
|
|
remark:res.data.remark,
|
|
|
+ register_status:res.data.register_status,
|
|
|
contract_source:res.data.contract_source,
|
|
|
services:res.data.service_list
|
|
|
}
|
|
|
contractInfo.contractValidityDate=[res.data.start_date,res.data.end_date]
|
|
|
- contractInfo.checkedService=res.data.service_list.map(item => item.service_template_id)
|
|
|
- contractInfo.checkedService.map(serviceId=>{
|
|
|
+ contractInfo.checkedService=res.data.service_list.map(item => {
|
|
|
+ let serviceId=item.service_template_id
|
|
|
// 大套餐或者小套餐
|
|
|
- if(serviceId==1 || serviceId==2)
|
|
|
- serciveChange(true,serviceId,false)
|
|
|
+ if(serviceId==1 || serviceId==2) serciveChange(true,serviceId,false)
|
|
|
+ return serviceId
|
|
|
})
|
|
|
// 开票
|
|
|
contractInfo.moneyData.allInvoiceMoney = contractInfo.moneyData.allPlacementMoney=res.data.contract_amount
|
|
@@ -565,6 +596,7 @@
|
|
|
})
|
|
|
})
|
|
|
}
|
|
|
+ // 到款
|
|
|
if(res.data.payment_list.length>0){
|
|
|
placementForm.placementData=[]
|
|
|
res.data.payment_list.map(item=>{
|
|
@@ -592,22 +624,20 @@
|
|
|
}
|
|
|
return rowArr;
|
|
|
});
|
|
|
- let paramsTemp={
|
|
|
- tableHeadData:temarr[0],
|
|
|
- tableData:temarr.slice(1),
|
|
|
- service_template_id:samllService.service_template_id,
|
|
|
- Value:samllService.value,
|
|
|
- chart_permission_ids:samllService.chart_permission_ids
|
|
|
- }
|
|
|
- paramsTemp.tableHeadData = temarr[0];
|
|
|
- paramsTemp.tableData = temarr.slice(1);
|
|
|
+ let paramsTemp={
|
|
|
+ tableHeadData:temarr[0],
|
|
|
+ tableData:temarr.slice(1),
|
|
|
+ service_template_id:samllService.service_template_id,
|
|
|
+ Value:samllService.value,
|
|
|
+ chart_permission_ids:samllService.chart_permission_ids
|
|
|
+ }
|
|
|
if(contractInfo.serviceArray.length==0){
|
|
|
let timer=setInterval(()=>{
|
|
|
if(contractInfo.serviceArray.length>0){
|
|
|
contractInfo.currentSmallService=paramsTemp
|
|
|
clearInterval(timer)
|
|
|
}
|
|
|
- },200)
|
|
|
+ },100)
|
|
|
}else{
|
|
|
contractInfo.currentSmallService=paramsTemp
|
|
|
}
|
|
@@ -638,11 +668,10 @@
|
|
|
<el-form-item label="合同编号" prop="contract_code" id="selectContract">
|
|
|
<el-input v-model="contractInfo.form.contract_code" placeholder="请输入合同编号"
|
|
|
v-if="(contractInfo.form.contract_source==0)"/>
|
|
|
- <el-select :teleported="false" v-optionsLoadMore="loadContractNoMore" v-model="contractInfo.form.contract_code" placeholder="请搜索合同编号" v-else
|
|
|
- filterable remote :remote-method="contractNoSearch" :loading="false" @change="selectContractNo">
|
|
|
+ <scrollableSelect :loadMoreMethod="loadContractNoMore" v-model="contractInfo.form.contract_code" placeholder="请搜索合同编号" v-else
|
|
|
+ :searchMethod="contractNoSearch" @change="selectContractNo" useLoading :isLoading="contractInfo.contractNoLoading">
|
|
|
<el-option :label="item.contract_code" :value="item.contract_code" v-for="item in contractInfo.contractNoArray" :key="item.contract_id"></el-option>
|
|
|
- <div style="height: 40px;width:100%;position: absolute;bottom: 0;pointer-events: none;" v-loading="contractInfo.contractNoLoading"></div>
|
|
|
- </el-select>
|
|
|
+ </scrollableSelect>
|
|
|
</el-form-item>
|
|
|
<el-form-item label="客户名称" prop="company_name">
|
|
|
<el-input v-model="contractInfo.form.company_name"
|
|
@@ -663,7 +692,7 @@
|
|
|
prop="start_date">
|
|
|
<el-date-picker type="daterange"
|
|
|
v-model="contractInfo.contractValidityDate" @change="contractValidityDateChane"
|
|
|
- start-placeholder="合同有效期-开始" range-separator="至" end-placeholder="合同有效期-结束" value-format="YYYY-MM-DD"
|
|
|
+ start-placeholder="开始日期" end-placeholder="结束日期" value-format="YYYY-MM-DD"
|
|
|
:clearable="false">
|
|
|
</el-date-picker>
|
|
|
</el-form-item>
|
|
@@ -695,11 +724,13 @@
|
|
|
<div class="info-row-title">套餐信息</div>
|
|
|
<el-checkbox-group :disabled="contractInfo.operationtype!='compliance'"
|
|
|
v-model="contractInfo.checkedService" class="info-service-box">
|
|
|
+ <!-- 大套餐 -->
|
|
|
<el-checkbox :label="contractInfo.serviceArray[0]?.service_template_id" @change="(e) => serciveChange(e,1)"
|
|
|
:class="{'viewService':canServiceShow(contractInfo.serviceArray[0]?.service_template_id)}"
|
|
|
:disabled="contractInfo.serviceType==2" style="margin-right: 0;" @click="viewService(contractInfo.serviceArray[0]?.service_template_id)">
|
|
|
{{contractInfo.serviceArray[0]?.title}}
|
|
|
</el-checkbox>
|
|
|
+ <!-- 小套餐 -->
|
|
|
<div class="service-small">
|
|
|
<el-checkbox :label="contractInfo.serviceArray[1]?.service_template_id" @change="(e) => serciveChange(e,2)"
|
|
|
:class="{'viewService':canServiceShow(contractInfo.serviceArray[1]?.service_template_id)}"
|
|
@@ -709,11 +740,13 @@
|
|
|
<span v-if="(contractInfo.serviceVarietyShow&&contractInfo.operationtype=='compliance')"
|
|
|
@click="contractInfo.varietyDiaShow=true">选择品种</span>
|
|
|
</div>
|
|
|
+ <!-- 市场策略 -->
|
|
|
<el-checkbox :label="contractInfo.serviceArray[2]?.service_template_id" style="margin-right: 0;"
|
|
|
@click="viewService(contractInfo.serviceArray[2]?.service_template_id)"
|
|
|
:class="{'viewService':canServiceShow(contractInfo.serviceArray[2]?.service_template_id)}">
|
|
|
{{contractInfo.serviceArray[2]?.title}}
|
|
|
</el-checkbox>
|
|
|
+ <!-- 财富管理 -->
|
|
|
<el-checkbox :label="contractInfo.serviceArray[3]?.service_template_id">
|
|
|
{{contractInfo.serviceArray[3]?.title}}
|
|
|
</el-checkbox>
|
|
@@ -736,7 +769,7 @@
|
|
|
</div>
|
|
|
<!-- 开票登记 -->
|
|
|
<div class="info-box" v-if="contractInfo.operationtype!='compliance'" style="margin-top:20px ;" id="info-invoice-box">
|
|
|
- <div class="info-box-head">开票登记(待开票)</div>
|
|
|
+ <div class="info-box-head">开票登记{{contractInfo.moneyData.waitInvoiceMoney==0?'':'(待开票)'}}</div>
|
|
|
<div class="info-row" >
|
|
|
<div class="info-row-title">开票信息</div>
|
|
|
<div class="info-row-invoice-payment">
|
|
@@ -790,7 +823,7 @@
|
|
|
</div>
|
|
|
<!-- 到款登记 -->
|
|
|
<div class="info-box" v-if="contractInfo.operationtype!='compliance'" style="margin-top:20px ;" id="info-invoice-box">
|
|
|
- <div class="info-box-head">到款登记(待到款)</div>
|
|
|
+ <div class="info-box-head">到款登记{{contractInfo.moneyData.waitPlacementMoney==0?'':'(待到款)'}}</div>
|
|
|
<div class="info-row" >
|
|
|
<div class="info-row-title">到款信息</div>
|
|
|
<div class="info-row-invoice-payment">
|
|
@@ -825,8 +858,8 @@
|
|
|
<template #default="{row,$index}">
|
|
|
<el-form-item :prop="`placementData.${$index}.invoice_date`" :show-message="false"
|
|
|
:rules="{required:true,message:()=>{ ElMessage.error('请选择到款日期')},trigger:'change'}">
|
|
|
- <el-date-picker v-model="row.invoice_date" style="width: 124px;"
|
|
|
- placeholder="请选择月份" value-format="YYYY-MM-DD" format="YYYY-MM"></el-date-picker>
|
|
|
+ <el-date-picker v-model="row.invoice_date" type="month" style="width: 124px;" :clearable="false"
|
|
|
+ placeholder="请选择月份" value-format="YYYY-MM" format="YYYY-MM"></el-date-picker>
|
|
|
</el-form-item>
|
|
|
</template>
|
|
|
</el-table-column>
|
|
@@ -847,25 +880,29 @@
|
|
|
</div>
|
|
|
</div>
|
|
|
</div>
|
|
|
- <div class="contract-progress-aside">
|
|
|
- <p class="progress-aside-title">登记流程</p>
|
|
|
+ <div class="contract-progress-aside"></div>
|
|
|
+ </div>
|
|
|
+ <!-- 登记流程 -->
|
|
|
+ <div class="contract-progress-detail">
|
|
|
+ <p class="progress-aside-title">登记流程</p>
|
|
|
+ <el-scrollbar style="height: calc(100% - 110px);">
|
|
|
<div class="progress-box">
|
|
|
- <el-timeline>
|
|
|
- <el-timeline-item color="var(--themeColor)" v-for="item in contractInfo.progressList"
|
|
|
- :key="item.name" size="large" placement="top" hide-timestamp>
|
|
|
- <template #dot>
|
|
|
- <div class="customize-circle-outside">
|
|
|
- <div class="customize-circle-inside"></div>
|
|
|
- </div>
|
|
|
- </template>
|
|
|
- <div class="progress-item-title">{{operationType[item.op_type-1]?.label}}</div>
|
|
|
- <div class="progress-item-info">{{item.admin_name}}</div>
|
|
|
- <div class="progress-item-info">{{item.create_time}}</div>
|
|
|
- <div class="progress-item-info" v-show="item.remark">备注:{{item.remark}}</div>
|
|
|
- </el-timeline-item>
|
|
|
- </el-timeline>
|
|
|
+ <el-timeline>
|
|
|
+ <el-timeline-item color="var(--themeColor)" v-for="item in contractInfo.progressList"
|
|
|
+ :key="item.name" size="large" placement="top" hide-timestamp>
|
|
|
+ <template #dot>
|
|
|
+ <div class="customize-circle-outside">
|
|
|
+ <div class="customize-circle-inside"></div>
|
|
|
+ </div>
|
|
|
+ </template>
|
|
|
+ <div class="progress-item-title">{{operationType[item.op_type-1]?.label}}</div>
|
|
|
+ <div class="progress-item-info">{{item.admin_name}}</div>
|
|
|
+ <div class="progress-item-info">{{item.create_time}}</div>
|
|
|
+ <div class="progress-item-info" v-show="item.remark">备注:{{item.remark}}</div>
|
|
|
+ </el-timeline-item>
|
|
|
+ </el-timeline>
|
|
|
</div>
|
|
|
- </div>
|
|
|
+ </el-scrollbar>
|
|
|
</div>
|
|
|
<!-- 小套餐选择品种弹窗 -->
|
|
|
<service-variety-dia v-model:visible="contractInfo.varietyDiaShow" @selectFinish="getVarieties"
|
|
@@ -976,51 +1013,71 @@
|
|
|
}
|
|
|
}
|
|
|
.contract-progress-aside{
|
|
|
- background-color: white;
|
|
|
- flex: 1;
|
|
|
+ // background-color: white;
|
|
|
+ width: 26vw;
|
|
|
min-width: 300px;
|
|
|
- .progress-aside-title{
|
|
|
- font-size: 18px;
|
|
|
- font-weight: bold;
|
|
|
- margin: 30px;
|
|
|
- }
|
|
|
- .progress-box{
|
|
|
- padding:0 20px 20px 70px;
|
|
|
- .customize-circle-outside{
|
|
|
- display: flex;
|
|
|
- justify-content: center;
|
|
|
- align-items: center;
|
|
|
- background-color: rgba($color: $themeColor, $alpha: 0.4);
|
|
|
- width: 14px;
|
|
|
- left: -2px;
|
|
|
- top: -4px;
|
|
|
- height: 14px;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ .contract-progress-detail{
|
|
|
+ background-color: white;
|
|
|
+ width: 26vw;
|
|
|
+ position: fixed;
|
|
|
+ right: 30px;
|
|
|
+ top: 90px;
|
|
|
+ min-width: 300px;
|
|
|
+ border: 1px solid #E8E8E8;
|
|
|
+ height: calc(100vh - 120px);
|
|
|
+ z-index: 2;
|
|
|
+ .progress-aside-title{
|
|
|
+ font-size: 18px;
|
|
|
+ font-weight: bold;
|
|
|
+ margin: 30px 30px 20px;
|
|
|
+ }
|
|
|
+ .progress-box{
|
|
|
+ margin-top: 10px;
|
|
|
+ padding:0 20px 20px 70px;
|
|
|
+ .customize-circle-outside{
|
|
|
+ display: flex;
|
|
|
+ justify-content: center;
|
|
|
+ align-items: center;
|
|
|
+ background-color: rgba($color: $themeColor, $alpha: 0.4);
|
|
|
+ width: 14px;
|
|
|
+ left: -2px;
|
|
|
+ top: -4px;
|
|
|
+ height: 14px;
|
|
|
+ border-radius: 50%;
|
|
|
+ position: absolute;
|
|
|
+ .customize-circle-inside{
|
|
|
+ background-color:$themeColor;
|
|
|
+ width: 6px;
|
|
|
+ height: 6px;
|
|
|
border-radius: 50%;
|
|
|
- position: absolute;
|
|
|
- .customize-circle-inside{
|
|
|
- background-color:$themeColor;
|
|
|
- width: 6px;
|
|
|
- height: 6px;
|
|
|
- border-radius: 50%;
|
|
|
- }
|
|
|
}
|
|
|
- .progress-item-title{
|
|
|
- font-weight: bold;
|
|
|
- font-size: 16px;
|
|
|
- color: #333;
|
|
|
- margin-bottom: 8px;
|
|
|
- }
|
|
|
- .progress-item-info{
|
|
|
- font-size: 14px;
|
|
|
- color:#666;
|
|
|
- margin-bottom: 8px;
|
|
|
- &:last-child{
|
|
|
- margin-bottom: 0;
|
|
|
- }
|
|
|
+ }
|
|
|
+ .progress-item-title{
|
|
|
+ font-weight: bold;
|
|
|
+ font-size: 16px;
|
|
|
+ color: #333;
|
|
|
+ margin-bottom: 8px;
|
|
|
+ }
|
|
|
+ .progress-item-info{
|
|
|
+ font-size: 14px;
|
|
|
+ color:#666;
|
|
|
+ margin-bottom: 8px;
|
|
|
+ &:last-child{
|
|
|
+ margin-bottom: 0;
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
+ @media screen and (max-width:1023px) {
|
|
|
+ .contract-progress-aside{
|
|
|
+ display: none;
|
|
|
+ }
|
|
|
+ .contract-progress-detail{
|
|
|
+ position: sticky;
|
|
|
+ }
|
|
|
+ }
|
|
|
.contract-operation{
|
|
|
text-align: center;
|
|
|
padding: 100px 30px 30px;
|