Commit 7c43290b authored by 柳 佳乐's avatar 柳 佳乐
Browse files

20221117

parents fdfb3666 b4ec9d53
...@@ -71,6 +71,15 @@ export const rejectPetty = (data) => { ...@@ -71,6 +71,15 @@ export const rejectPetty = (data) => {
}) })
} }
// 撤回审批
export const revokePetty = (data) => {
return request({
url: '/pettyCash/revoke',
method: 'post',
data
})
}
/******还款********/ /******还款********/
......
...@@ -25,3 +25,13 @@ export const downloadPDFFile = function (url, fileName) { ...@@ -25,3 +25,13 @@ export const downloadPDFFile = function (url, fileName) {
} }
}) })
} }
export const previewPDF = (url) => {
const a = document.createElement("a"); //创建一个<a></a>标签
a.href = url; // 给a标签的href属性值加上地址,注意,这里是绝对路径,不用加 点.
a.target = "_blank";
a.style.display = "none"; // 障眼法藏起来a标签
document.body.appendChild(a); // 将a标签追加到文档对象中
a.click(); // 模拟点击了a标签,会触发a标签的href的读取,浏览器就会自动下载了
a.remove(); // 一次性的,用完就删除a标签
}
\ No newline at end of file
...@@ -8,12 +8,13 @@ ...@@ -8,12 +8,13 @@
<div class="container"> <div class="container">
<el-form :model="formData" :rules="addFormValidRules" ref="form" class="contract-form"> <el-form :model="formData" :rules="addFormValidRules" ref="form" class="contract-form">
<el-descriptions :column="3" border class="contract-description-form"> <el-descriptions :column="3" border class="contract-description-form">
<el-descriptions-item labelClassName="required" label="母合同名称" :span="3" v-if="parseInt(formData.contractNature) === 2"> <el-descriptions-item labelClassName="required" label="母合同名称" :span="3"
v-if="parseInt(formData.contractNature) === 2">
<el-form-item prop="contractParent"> <el-form-item prop="contractParent">
<el-select v-model="formData.contractParent" :style="{ width: '100%' }" <el-select v-model="formData.contractParent" :style="{ width: '100%' }"
placeholder="请选择母合同名称"> placeholder="请选择母合同名称">
<el-option v-for="(item, index) in contractParentList" :key="item.contractId" <el-option v-for="(item, index) in contractParentList" :key="item.contractId"
:value="item.contractId" :label="item.name"></el-option> :value="item.contractId" :label="item.contractName"></el-option>
</el-select> </el-select>
</el-form-item> </el-form-item>
</el-descriptions-item> </el-descriptions-item>
...@@ -29,7 +30,8 @@ ...@@ -29,7 +30,8 @@
</el-descriptions-item> </el-descriptions-item>
<el-descriptions-item label="合同乙方" labelClassName="required" :disabled="isEdit"> <el-descriptions-item label="合同乙方" labelClassName="required" :disabled="isEdit">
<el-form-item prop="contractPaetyb"> <el-form-item prop="contractPaetyb">
<el-input placeholder="请输入合同名称合同乙方" :disabled="isEdit" v-model="formData.contractPaetyb"></el-input> <el-input placeholder="请输入合同名称合同乙方" :disabled="isEdit" v-model="formData.contractPaetyb">
</el-input>
</el-form-item> </el-form-item>
</el-descriptions-item> </el-descriptions-item>
<el-descriptions-item label="合同编号" labelClassName="required"> <el-descriptions-item label="合同编号" labelClassName="required">
...@@ -48,23 +50,27 @@ ...@@ -48,23 +50,27 @@
<el-descriptions-item label="客户名称(甲方)" labelClassName="required"> <el-descriptions-item label="客户名称(甲方)" labelClassName="required">
<el-form-item prop="contractFirstParty"> <el-form-item prop="contractFirstParty">
<el-input placeholder="请输入客户名称(甲方)" :disabled="isEdit" v-model="formData.contractFirstParty"></el-input> <el-input placeholder="请输入客户名称(甲方)" :disabled="isEdit"
v-model="formData.contractFirstParty"></el-input>
</el-form-item> </el-form-item>
</el-descriptions-item> </el-descriptions-item>
<el-descriptions-item label="甲方签订人" labelClassName="required"> <el-descriptions-item label="甲方签订人" labelClassName="required">
<el-form-item prop="firstParty"> <el-form-item prop="firstParty">
<el-input placeholder="请输入甲方签订人" :disabled="isEdit" v-model="formData.firstParty"></el-input> <el-input placeholder="请输入甲方签订人" :disabled="isEdit" v-model="formData.firstParty">
</el-input>
</el-form-item> </el-form-item>
</el-descriptions-item> </el-descriptions-item>
<el-descriptions-item label="客户联系电话" labelClassName="required"> <el-descriptions-item label="客户联系电话" labelClassName="required">
<el-form-item prop="firstPartyPhone"> <el-form-item prop="firstPartyPhone">
<el-input placeholder="请输入客户联系电话" :disabled="isEdit" v-model="formData.firstPartyPhone"></el-input> <el-input placeholder="请输入客户联系电话" :disabled="isEdit" v-model="formData.firstPartyPhone">
</el-input>
</el-form-item> </el-form-item>
</el-descriptions-item> </el-descriptions-item>
<el-descriptions-item label="客户联系地址" labelClassName="required"> <el-descriptions-item label="客户联系地址" labelClassName="required">
<el-form-item prop="firstPartyAddress"> <el-form-item prop="firstPartyAddress">
<el-input placeholder="请输入客户联系地址" :disabled="isEdit" v-model="formData.firstPartyAddress"></el-input> <el-input placeholder="请输入客户联系地址" :disabled="isEdit" v-model="formData.firstPartyAddress">
</el-input>
</el-form-item> </el-form-item>
</el-descriptions-item> </el-descriptions-item>
<el-descriptions-item label="合同开始日期" labelClassName="required"> <el-descriptions-item label="合同开始日期" labelClassName="required">
...@@ -86,7 +92,7 @@ ...@@ -86,7 +92,7 @@
<el-descriptions-item label="合同金额" labelClassName="required"> <el-descriptions-item label="合同金额" labelClassName="required">
<el-form-item prop="contractMoney"> <el-form-item prop="contractMoney">
<el-input placeholder="请输入合同金额" :disabled="isEdit" v-model="formData.contractMoney" > <el-input placeholder="请输入合同金额" :disabled="isEdit" v-model="formData.contractMoney">
</el-input> </el-input>
</el-form-item> </el-form-item>
</el-descriptions-item> </el-descriptions-item>
...@@ -100,8 +106,8 @@ ...@@ -100,8 +106,8 @@
</el-descriptions-item> </el-descriptions-item>
<el-descriptions-item label="税点" labelClassName="required"> <el-descriptions-item label="税点" labelClassName="required">
<el-form-item prop="taxPoint"> <el-form-item prop="taxPoint">
<el-input placeholder="请输入税点" :disabled="isEdit" type="number" v-model="formData.taxPoint" min=“0.00” :min="0" <el-input placeholder="请输入税点" :disabled="isEdit" type="number" v-model="formData.taxPoint"
step=“0.01”> min=“0.00” :min="0" step=“0.01”>
</el-input> </el-input>
</el-form-item> </el-form-item>
</el-descriptions-item> </el-descriptions-item>
...@@ -118,7 +124,7 @@ ...@@ -118,7 +124,7 @@
<div class="avator"><i class="el-icon-document"></i></div> <div class="avator"><i class="el-icon-document"></i></div>
<div class="file-content" :title="file.name">{{ file.name }}</div> <div class="file-content" :title="file.name">{{ file.name }}</div>
<div class="file-operate"> <div class="file-operate">
<span class="" @click="handleDownload(file)"> <span class="" v-if="isEdit" @click="handleDownload(file)">
<i class="el-icon-download"></i> <i class="el-icon-download"></i>
</span> </span>
&nbsp; &nbsp;
...@@ -127,6 +133,8 @@ ...@@ -127,6 +133,8 @@
</span> </span>
</div> </div>
</div> </div>
<!-- <div class="el-upload__text">将文件拖到此处,或<em>点击上传</em></div>
<div class="el-upload__tip" slot="tip">只能上传pdf文件,且不超过500kb</div> -->
</el-upload> </el-upload>
</el-descriptions-item> </el-descriptions-item>
...@@ -137,20 +145,23 @@ ...@@ -137,20 +145,23 @@
<el-descriptions :column="3" border class="contract-description-form"> <el-descriptions :column="3" border class="contract-description-form">
<el-descriptions-item label="乙方签订人" labelClassName="required"> <el-descriptions-item label="乙方签订人" labelClassName="required">
<el-form-item prop="partybName"> <el-form-item prop="partybName">
<el-input placeholder="请输入乙方签订人" :disabled="isEdit" v-model="formData.partybName"></el-input> <el-input placeholder="请输入乙方签订人" :disabled="isEdit" v-model="formData.partybName">
</el-input>
</el-form-item> </el-form-item>
</el-descriptions-item> </el-descriptions-item>
<el-descriptions-item label="合同签订时间" labelClassName="required"> <el-descriptions-item label="合同签订时间" labelClassName="required">
<el-form-item prop="signingTime"> <el-form-item prop="signingTime">
<el-date-picker v-model="formData.signingTime" align="right" type="datetime" <el-date-picker v-model="formData.signingTime" align="right" type="datetime"
placeholder="请输入合同签订时间" :disabled="isEdit" format="yyyy-MM-dd HH:mm:ss" value-format="yyyy-MM-dd HH:mm:ss"> placeholder="请输入合同签订时间" :disabled="isEdit" format="yyyy-MM-dd HH:mm:ss"
value-format="yyyy-MM-dd HH:mm:ss">
</el-date-picker> </el-date-picker>
</el-form-item> </el-form-item>
</el-descriptions-item> </el-descriptions-item>
<el-descriptions-item label="合同制定人" labelClassName="required"> <el-descriptions-item label="合同制定人" labelClassName="required">
<el-form-item prop="preparedBy"> <el-form-item prop="preparedBy">
<el-input placeholder="请输入合同制定人" :disabled="isEdit" v-model="formData.preparedBy"></el-input> <el-input placeholder="请输入合同制定人" :disabled="isEdit" v-model="formData.preparedBy">
</el-input>
</el-form-item> </el-form-item>
</el-descriptions-item> </el-descriptions-item>
<el-descriptions-item label="合同保管人" labelClassName="required"> <el-descriptions-item label="合同保管人" labelClassName="required">
...@@ -170,17 +181,13 @@ ...@@ -170,17 +181,13 @@
<br /> <br />
<el-form-item> <el-form-item>
<el-button type="primary" @click="dialogVisible = true">{{ !isEdit ? '创建合同' : '修改合同' }}</el-button> <el-button type="primary" @click="dialogVisible = true">{{ !isEdit ? '创建合同' : '修改合同' }}</el-button>
<el-button @click="$store.dispatch('tagsView/delView', $route);$router.back();">返回</el-button> <el-button @click="$store.dispatch('tagsView/delView', $route); $router.back();">返回</el-button>
<!-- <el-button @click="closeDrawer">取消</el-button> --> <!-- <el-button @click="closeDrawer">取消</el-button> -->
</el-form-item> </el-form-item>
</el-form> </el-form>
</div> </div>
<el-dialog <el-dialog :title="isEdit ? '确认修改' : '确认提交'" :visible.sync="dialogVisible" width="30%">
:title="isEdit ? '确认修改' : '确认提交' " <span>确定{{ isEdit ? '修改' : '添加' }}合同</span>
:visible.sync="dialogVisible"
width="30%"
>
<span>确定{{isEdit ? '修改' : '添加'}}合同</span>
<span slot="footer" class="dialog-footer"> <span slot="footer" class="dialog-footer">
<el-button @click="dialogVisible = false">取 消</el-button> <el-button @click="dialogVisible = false">取 消</el-button>
<el-button type="primary" @click="addContract">确 定</el-button> <el-button type="primary" @click="addContract">确 定</el-button>
...@@ -193,7 +200,8 @@ import { selectAllContractTypeList, selectAllContractList, addContract, getContr ...@@ -193,7 +200,8 @@ import { selectAllContractTypeList, selectAllContractList, addContract, getContr
import { deepClone } from '@/utils' import { deepClone } from '@/utils'
import { contractNatures, addFormValidRules } from '../contractStaticData' import { contractNatures, addFormValidRules } from '../contractStaticData'
import { mapGetters } from 'vuex' import { mapGetters } from 'vuex'
import { downloadPDFFile } from '@/utils/download' import { previewPDF } from '@/utils/download'
import axios from 'axios'
// import { checkPhone } from '@/utils/myValidate' // import { checkPhone } from '@/utils/myValidate'
export default { export default {
// props: ['drawerVisible'], // props: ['drawerVisible'],
...@@ -230,8 +238,8 @@ export default { ...@@ -230,8 +238,8 @@ export default {
isEdit: false, isEdit: false,
addFormValidRules, addFormValidRules,
action: '', action: '',
uploadChange: false, dialogVisible: false,
dialogVisible: false deleteFiles: []
} }
}, },
computed: { computed: {
...@@ -292,7 +300,7 @@ export default { ...@@ -292,7 +300,7 @@ export default {
this.$refs.form.validate((valid) => { this.$refs.form.validate((valid) => {
if (valid) { if (valid) {
if(this.formData.contractStartTime > this.formData.contractEndTime){ if (this.formData.contractStartTime > this.formData.contractEndTime) {
this.dialogVisible = false this.dialogVisible = false
this.$message.warning('合同开始时间和结束时间不符合实际') this.$message.warning('合同开始时间和结束时间不符合实际')
return return
...@@ -310,41 +318,46 @@ export default { ...@@ -310,41 +318,46 @@ export default {
addContract(params).then(res => { addContract(params).then(res => {
if (res.success) { if (res.success) {
this.$message.success("成功添加合同") this.$message.success("成功添加合同")
this.addContractFile(res.data) this.updateContractFile(res.data)
setTimeout(() => { setTimeout(() => {
this.$store.dispatch("tagsView/delView", this.$route); this.$store.dispatch("tagsView/delView", this.$route);
this.$router.push({ path: '/contractList' }) this.$router.push({ path: '/contractList' })
}, 1000); }, 1000);
} else { } else {
this.$message.warning("添加合同失败:"+res.msg) this.$message.warning("添加合同失败:" + res.msg)
} }
}) })
} else { } else {
this.addContractFile(this.formData.contractId)
updateContract(params).then(res => { updateContract(params).then(res => {
if (res.success) { if (res.success) {
this.updateContractFile(this.formData.contractId)
this.$message.success("成功修改合同") this.$message.success("成功修改合同")
setTimeout(() => { setTimeout(() => {
this.$store.dispatch("tagsView/delView", this.$route); this.$store.dispatch("tagsView/delView", this.$route);
this.$router.push({ path: '/contractList' }) this.$router.push({ path: '/contractList' })
}, 1000); }, 1000);
} else { } else {
this.$message.warning("添加修改失败:"+res.msg) this.$message.warning("添加修改失败:" + res.msg)
} }
}) })
} }
}else{ } else {
this.dialogVisible = false this.dialogVisible = false
} }
}); });
}, },
uploadOnchange(file, fileList) { updateContractFile(contractId) {
this.uploadChange = true
},
addContractFile(contractId) {
this.fileParams.Id = String(contractId) this.fileParams.Id = String(contractId)
this.fileParams.companyId = this.companyId || this.$store.getters.companyId this.fileParams.companyId = this.companyId
this.uploadChange && this.$refs.uploadContractFile.submit() this.$refs.uploadContractFile.submit()
if (this.deleteFiles.length) {
this.deleteFiles.forEach(file => {
if(file.id){
deleteContract(file)
}
})
// axios.all(httpArr)
}
}, },
getContractTypeList() { getContractTypeList() {
const params = { const params = {
...@@ -394,21 +407,38 @@ export default { ...@@ -394,21 +407,38 @@ export default {
} }
}) })
}, },
uploadOnchange(file, fileList) {
const index = this.fileList.findIndex(item => item.uid === file.uid)
if (index >= 0) {
this.fileList.splice(index, 1)
} else {
this.fileList.push(file)
}
},
handleDownload(file) { handleDownload(file) {
let { name, filePath } = file let { filePath } = file
let url = process.env.VUE_APP_BASE_API + filePath; let url = process.env.VUE_APP_BASE_API + filePath;
downloadPDFFile(url, name) previewPDF(url)
}, },
handleRemove(file) { handleRemove(file) {
deleteContract(file).then(res => { const index = this.fileList.findIndex(item => item.uid === file.uid)
if (res.success) { if (index >= 0) {
this.$message.success("成功删除合同文件") const deleteFile = this.fileList.splice(index, 1)
this.getContractFiles(file.contractId) if (deleteFile.length) {
} else { this.deleteFiles.push(deleteFile[0])
this.$message.warning("删除合同文件失败") }
} }
}) // splice(index,len,[item])
// deleteContract(file).then(res => {
// if (res.success) {
// this.$message.success("成功删除合同文件")
// this.getContractFiles(file.contractId)
// } else {
// this.$message.warning("删除合同文件失败")
// }
// })
}, },
validFormData() { validFormData() {
let requiredParams = deepClone(this.formData); let requiredParams = deepClone(this.formData);
......
...@@ -21,21 +21,29 @@ ...@@ -21,21 +21,29 @@
<el-input placeholder="请输入备注" v-model="formData.pettyRemarks"></el-input> <el-input placeholder="请输入备注" v-model="formData.pettyRemarks"></el-input>
</el-form-item> </el-form-item>
<el-form-item label="申请附件"> <el-form-item label="申请附件">
<el-upload ref="uploadPettyFile" list-type="picture-card" :action="action" :file-list="fileList" <div v-if="isEdit && filename" class="file-list" :style="{padding: '8px'}">
:on-change="uploadOnchange" :data="fileParams" :auto-upload="false" multiple accept='.pdf' <div class="avator"><i class="el-icon-document"></i></div>
<div class="file-content" :title="filename">{{ filename }}</div>
<div class="file-operate">
<span class="" @click="handleDownload()">
<i class="el-icon-download"></i>
</span>
</div>
</div>
<div v-else-if="isEdit && !filename"></div>
<el-upload v-else ref="uploadPettyFile" list-type="picture-card" :action="action" :file-list="fileList"
:on-change="uploadOnchange" :data="fileParams" :auto-upload="false" multiple
:limit="1" class='el-contract-upload'> :limit="1" class='el-contract-upload'>
<i slot="default" class="el-icon-plus"></i> <i slot="default" class="el-icon-plus"></i>
<div slot="file" slot-scope="{file}" class="file-list"> <div slot="file" slot-scope="{file}" class="file-list">
<div class="avator"><i class="el-icon-document"></i></div> <div class="avator"><i class="el-icon-document"></i></div>
<div class="file-content" :title="file.name">{{ file.name }}</div> <div class="file-content" :title="file.name">{{ file.name }}</div>
<div class="file-operate"> <div class="file-operate">
<span class="" @click="handleDownload(file)"> <span class="" @click="handleRemove(file)">
<i class="el-icon-download"></i> <i class="el-icon-delete"></i>
</span> </span>
</div> </div>
</div> </div>
<!-- <div class="el-upload__text">将文件拖到此处,或<em>点击上传</em></div>
<div class="el-upload__tip" slot="tip">只能上传pdf文件,且不超过500kb</div> -->
</el-upload> </el-upload>
</el-form-item> </el-form-item>
<el-form-item> <el-form-item>
...@@ -49,10 +57,10 @@ ...@@ -49,10 +57,10 @@
</template> </template>
<script> <script>
import { insertPettyMoneyRecord, selctByPettyId, updatePettyMoneyRecord } from '@/api/pettyMoney' import { insertPettyMoneyRecord, selctByPettyId, updatePettyMoneyRecord } from '@/api/pettyMoney'
import { deepClone } from '@/utils' // import { deepClone } from '@/utils'
// import { contractNatures } from '../contractStaticData' // import { contractNatures } from '../contractStaticData'
import { mapGetters } from 'vuex' import { mapGetters } from 'vuex'
import { downloadPDFFile } from '@/utils/download' import { previewPDF } from '@/utils/download'
import { addRecordRules as rules, staticParams } from './pettyMoneyStaticData' import { addRecordRules as rules, staticParams } from './pettyMoneyStaticData'
export default { export default {
// props: ['drawerVisible'], // props: ['drawerVisible'],
...@@ -61,6 +69,10 @@ export default { ...@@ -61,6 +69,10 @@ export default {
'companyId', 'companyId',
'urId' 'urId'
]), ]),
filename: function () {
const { pettyEnclosure } = this.formData
return pettyEnclosure.slice(pettyEnclosure.lastIndexOf('/') + 1, pettyEnclosure.length)
}
}, },
data() { data() {
return { return {
...@@ -76,7 +88,8 @@ export default { ...@@ -76,7 +88,8 @@ export default {
fileParams: {}, fileParams: {},
action: '', action: '',
uploadChange: false, uploadChange: false,
isEdit: false isEdit: false,
deleteFiles: []
} }
}, },
created() { created() {
...@@ -103,6 +116,7 @@ export default { ...@@ -103,6 +116,7 @@ export default {
this.$store.dispatch("tagsView/delView", this.$route); this.$store.dispatch("tagsView/delView", this.$route);
}, },
addPettyMoneyRecord() { addPettyMoneyRecord() {
this.$refs.form.validate(valida => { this.$refs.form.validate(valida => {
if (valida) { if (valida) {
const params = { const params = {
...@@ -115,7 +129,7 @@ export default { ...@@ -115,7 +129,7 @@ export default {
if (this.isEdit) { if (this.isEdit) {
updatePettyMoneyRecord(params).then(res => { updatePettyMoneyRecord(params).then(res => {
if (res.success) { if (res.success) {
this.addPettyFile(params.pettyId) // this.addPettyFile(params.pettyId)
this.$message.success("修改成功") this.$message.success("修改成功")
setTimeout(() => { setTimeout(() => {
this.$router.push('/pettyMoneyRecord') this.$router.push('/pettyMoneyRecord')
...@@ -141,17 +155,31 @@ export default { ...@@ -141,17 +155,31 @@ export default {
}) })
}, },
uploadOnchange(file, fileList) { uploadOnchange(file, fileList) {
this.uploadChange = true const index = this.fileList.findIndex(item => item.uid === file.uid)
if (index >= 0) {
this.fileList.splice(index, 1)
} else {
this.fileList.push(file)
}
}, },
addPettyFile(pettyId) { addPettyFile(pettyId) {
this.fileParams.Id = pettyId this.fileParams.Id = pettyId
this.fileParams.companyId = this.companyId
this.uploadChange && this.$refs.uploadPettyFile.submit() this.uploadChange && this.$refs.uploadPettyFile.submit()
}, },
handleDownload(file) { handleDownload() {
let { name, filePath } = file let { pettyEnclosure: filePath } = this.formData
let url = process.env.VUE_APP_BASE_API + filePath; let url = process.env.VUE_APP_BASE_API + filePath;
downloadPDFFile(url, name) previewPDF(url)
},
handleRemove(file) {
const index = this.fileList.findIndex(item => item.uid === file.uid)
if (index >= 0) {
const deleteFile = this.fileList.splice(index, 1)
if (deleteFile.length) {
this.deleteFiles.push(deleteFile[0])
}
}
}, },
getPettytDetail(pettyId) { getPettytDetail(pettyId) {
if (pettyId) { if (pettyId) {
...@@ -216,6 +244,8 @@ export default { ...@@ -216,6 +244,8 @@ export default {
align-items: center; align-items: center;
width: 250px; width: 250px;
padding: 0 5px; padding: 0 5px;
border: 1px solid #e6ebf5;
border-radius: 5px;
.avator { .avator {
width: 10%; width: 10%;
......
...@@ -28,7 +28,18 @@ ...@@ -28,7 +28,18 @@
<el-descriptions-item label="驳回原因" span="3" v-if="checkedRow.pettyApproval === 2">{{ <el-descriptions-item label="驳回原因" span="3" v-if="checkedRow.pettyApproval === 2">{{
checkedRow.pettyReject checkedRow.pettyReject
}}</el-descriptions-item> }}</el-descriptions-item>
<el-descriptions-item label="借款日期">{{ checkedRow.pettyTime}}</el-descriptions-item> <el-descriptions-item label="借款日期" span="3">{{ checkedRow.pettyTime }}</el-descriptions-item>
<el-descriptions-item label="合同附件" span="3" v-if="checkedRow.pettyEnclosure">
<div class="file-list">
<div class="avator"><i class="el-icon-document"></i></div>
<div class="file-content" :title="filename">{{ filename }}</div>
<div class="file-operate">
<span class="" @click="handleDownload()">
<i class="el-icon-download"></i>
</span>
</div>
</div>
</el-descriptions-item>
</el-descriptions> </el-descriptions>
</div> </div>
<div v-if="checkedRow.pettyApproval === 1"> <div v-if="checkedRow.pettyApproval === 1">
...@@ -42,18 +53,19 @@ ...@@ -42,18 +53,19 @@
<el-timeline-item v-for="item in repayDetailList" :key="item.repaymentId" <el-timeline-item v-for="item in repayDetailList" :key="item.repaymentId"
:type="approveResult[item.repaymentApproval].type" :timestamp="item.repaymentTime"> :type="approveResult[item.repaymentApproval].type" :timestamp="item.repaymentTime">
<div> <div>
<span> <el-descriptions size="mini">
<el-tag <el-descriptions-item label="审批结果"><el-tag size="mini"
:type="approveResult[item.repaymentApproval] && approveResult[item.repaymentApproval].type"> :type="approveResult[item.repaymentApproval] && approveResult[item.repaymentApproval].type">
{{ approveResult[item.repaymentApproval] && {{ approveResult[item.repaymentApproval] &&
approveResult[item.repaymentApproval].text approveResult[item.repaymentApproval].text
}}</el-tag> }}</el-tag></el-descriptions-item>
{{ (item.repaymentApproval === 2 && item.repaymentReject) && <el-descriptions-item label="驳回原因" v-if="item.repaymentApproval === 2 && item.repaymentReject">{{ item.repaymentReject }}</el-descriptions-item>
`驳回原因:${item.repaymentReject}` <el-descriptions-item label="还款金额">{{ item.repaymentMoney }}</el-descriptions-item>
}} <el-descriptions-item label="还款金额">{{ item.repaymentMoney }}</el-descriptions-item>
</span> <el-descriptions-item label="审批人">{{ item.operationName }}</el-descriptions-item>
<span>还款金额{{ item.repaymentMoney }}</span> <el-descriptions-item label="还款方式">{{ item.repaymentMode }}</el-descriptions-item>
<span>审批人{{ item.operationName }}</span> <el-descriptions-item label="还款详情">{{ item.repaymentDetails || '' }}</el-descriptions-item>
</el-descriptions>
</div> </div>
</el-timeline-item> </el-timeline-item>
</el-timeline> </el-timeline>
...@@ -64,6 +76,7 @@ ...@@ -64,6 +76,7 @@
</div> </div>
</template> </template>
<script> <script>
import { previewPDF } from '@/utils/download'
import { approveResult, pettyStates } from '../pettyMoneyStaticData' import { approveResult, pettyStates } from '../pettyMoneyStaticData'
export default { export default {
props: { props: {
...@@ -76,23 +89,36 @@ export default { ...@@ -76,23 +89,36 @@ export default {
type: Array type: Array
}, },
}, },
computed: {
filename: function () {
const { pettyEnclosure } = this.checkedRow
return pettyEnclosure.slice(pettyEnclosure.lastIndexOf('/') + 1, pettyEnclosure.length)
}
},
data() { data() {
return { return {
approveResult, approveResult,
pettyStates, pettyStates,
} }
},
methods: {
handleDownload() {
let { pettyEnclosure: filePath } = this.checkedRow
let url = process.env.VUE_APP_BASE_API + filePath;
previewPDF(url)
},
} }
} }
</script> </script>
<style scoped lang="scss"> <style scoped lang="scss" scoped>
.drawerHeader, .drawerHeader,
.drawerContainer { .drawerContainer {
padding: 15px 15px 0; padding: 15px 15px 0;
.repay-timeline { .repay-timeline {
height: 400px; max-height: 400px;
padding-top: 5px; padding-top: 5px;
overflow-y: scroll; overflow-y: auto;
span { span {
margin-right: 10px; margin-right: 10px;
...@@ -100,4 +126,42 @@ export default { ...@@ -100,4 +126,42 @@ export default {
} }
} }
} }
.file-list {
display: flex;
justify-content: flex-start;
align-items: center;
width: 250px;
padding: 0 5px;
border: 1px solid #e6ebf5;
border-radius: 5px;
.avator {
width: 10%;
font-size: 32px;
color: #d75b5b;
}
.file-content {
width: 80%;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
padding-left: 10px;
}
.file-operate {
width: 15%;
font-size: 16px;
display: flex;
justify-content: space-around;
align-items: center;
span {
cursor: pointer;
}
}
}
</style> </style>
\ No newline at end of file
...@@ -14,13 +14,14 @@ ...@@ -14,13 +14,14 @@
</el-form-item> </el-form-item>
<el-form-item> <el-form-item>
<el-select v-model="pettyMoneyQuery.pettyState" placeholder="请选择还款状态"> <el-select v-model="pettyMoneyQuery.pettyState" placeholder="请选择还款状态">
<el-option v-for="(item, index) in pettyStates" :key="index" :value="index" <el-option v-for="(item, index) in pettyStates" :key="index" :value="index" :label="item.text">
:label="item.text"></el-option> </el-option>
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item> <el-form-item>
<el-button type="primary" icon="el-icon-search" @click="getPettyMoneyList(true)">查询</el-button> <el-button type="primary" icon="el-icon-search" @click="getPettyMoneyList(true)">查询</el-button>
<el-button type="primary" icon="el-icon-refresh-right" @click="pettyMoneyQuery = {}; getPettyMoneyList(false)">重置</el-button> <el-button type="primary" icon="el-icon-refresh-right"
@click="pettyMoneyQuery = {}; getPettyMoneyList(false)">重置</el-button>
<!-- <el-button type="success" icon="el-icon-circle-plus-outline" @click="dialogTableVisible = true">添加合同</el-button> --> <!-- <el-button type="success" icon="el-icon-circle-plus-outline" @click="dialogTableVisible = true">添加合同</el-button> -->
</el-form-item> </el-form-item>
</el-form> </el-form>
...@@ -58,12 +59,19 @@ ...@@ -58,12 +59,19 @@
<template slot-scope="scope"> <template slot-scope="scope">
<el-button-group> <el-button-group>
<el-button type="success" size="mini" v-if="parseInt(scope.row.pettyApproval) === 1" <el-button type="success" size="mini" v-if="parseInt(scope.row.pettyApproval) === 1"
@click="controlDialogDrawerVisible('agree', scope.row)" :disabled="parseInt(scope.row.pettySurplus) === 0">{{parseInt(scope.row.pettySurplus) === 0 ? '已还清':'还款'}} @click="controlDialogDrawerVisible('agree', scope.row)"
:disabled="parseInt(scope.row.pettySurplus) === 0">{{ parseInt(scope.row.pettySurplus)
=== 0 ? '已还清' : '还款'
}}
</el-button> </el-button>
<el-button type="primary" size="mini" v-if="parseInt(scope.row.pettyApproval) === 0" <el-button type="primary" size="mini" v-if="parseInt(scope.row.pettyApproval) === 0"
@click="$router.push({ path: '/editPetty', query: { pettyId: String(scope.row.pettyId) } })"> @click="$router.push({ path: '/editPetty', query: { pettyId: String(scope.row.pettyId) } })">
编辑</el-button> 编辑</el-button>
<el-button size="mini" :style="{background: '#5782df',color: '#fff',border: '1px solid #5782df'}" <el-button type="info" size="mini" v-if="parseInt(scope.row.pettyApproval) === 0"
@click="revoke(scope.row)">
撤销</el-button>
<el-button size="mini"
:style="{ background: '#5782df', color: '#fff', border: '1px solid #5782df' }"
@click="controlDialogDrawerVisible('drawerVisible', scope.row)"> @click="controlDialogDrawerVisible('drawerVisible', scope.row)">
详情</el-button> 详情</el-button>
</el-button-group> </el-button-group>
...@@ -79,9 +87,17 @@ ...@@ -79,9 +87,17 @@
</div> </div>
<el-dialog title="还款金额" :visible="Boolean(dialogVisible)" width="40%" :show-close="false"> <el-dialog title="还款金额" :visible="Boolean(dialogVisible)" width="40%" :show-close="false">
<el-form label-position="left" :model="checkedRow" label-width="100px" ref="dialogForm"> <el-form label-position="left" :model="checkedRow" label-width="100px" ref="dialogForm">
<el-form-item label="还款金额" :rules="{ validator: checkRepayMoney, trigger: 'change' }" <el-form-item label="还款金额" :rules="{ required: true, validator: checkRepayMoney, trigger: 'change' }"
prop="repaymentMoney"> prop="repaymentMoney">
<el-input v-model="checkedRow.repaymentMoney" placeholder="请选择备用金名称" type="number" :min="1"/> <el-input v-model="checkedRow.repaymentMoney" placeholder="请选择备用金名称" />
</el-form-item>
<el-form-item label="还款方式" :rules="{ required: true, message: '请输入还款方式', trigger: 'blur' }"
prop="repaymentMode">
<el-input v-model="checkedRow.repaymentMode" placeholder="请输入还款方式" />
</el-form-item>
<el-form-item label="还款详情" :rules="{ required: false, message: '请输入详情', trigger: 'blur' }"
prop="repaymentDetails">
<el-input v-model="checkedRow.repaymentDetails" placeholder="请输入还款详情" />
</el-form-item> </el-form-item>
</el-form> </el-form>
<span slot="footer" class="dialog-footer"> <span slot="footer" class="dialog-footer">
...@@ -97,7 +113,7 @@ ...@@ -97,7 +113,7 @@
</template> </template>
<script> <script>
import { mapGetters } from 'vuex' import { mapGetters } from 'vuex'
import { selectSelfPettyRecord, repayMoney, repayRecordsByPettyId } from '@/api/pettyMoney' import { selectSelfPettyRecord, repayMoney, repayRecordsByPettyId, revokePetty } from '@/api/pettyMoney'
import { approveResult, pettyStates } from './pettyMoneyStaticData' import { approveResult, pettyStates } from './pettyMoneyStaticData'
import { parseTime } from '@/utils' import { parseTime } from '@/utils'
import applicateDetail from './components/applicateDetail' import applicateDetail from './components/applicateDetail'
...@@ -136,11 +152,11 @@ export default { ...@@ -136,11 +152,11 @@ export default {
methods: { methods: {
checkRepayMoney(rule, value, callback) { checkRepayMoney(rule, value, callback) {
// console.log(1) // console.log(1)
if ( value === null || value === undefined || value === '') { if (value === null || value === undefined || value === '') {
callback(new Error('还款金额不能为空')); callback(new Error('还款金额不能为空'));
}else if(parseFloat(value) <= 0){ } else if (parseFloat(value) <= 0) {
callback(new Error('请输入大于0的金额')); callback(new Error('请输入大于0的金额'));
}else if (value > this.checkedRow.pettySurplus) { } else if (value > this.checkedRow.pettySurplus) {
callback(new Error('超出应还款金额')); callback(new Error('超出应还款金额'));
} else { } else {
callback(); callback();
...@@ -153,11 +169,11 @@ export default { ...@@ -153,11 +169,11 @@ export default {
userId: this.urId userId: this.urId
} }
//不能确定是不是条件查询,则根据上一个查询方式进行条件查询或者一般查询,=== 切换分页时候 //不能确定是不是条件查询,则根据上一个查询方式进行条件查询或者一般查询,=== 切换分页时候
if(isConditionSelect === undefined || isConditionSelect === ''){ if (isConditionSelect === undefined || isConditionSelect === '') {
this.isConditionSelect && Object.assign(params, this.pettyMoneyQuery) this.isConditionSelect && Object.assign(params, this.pettyMoneyQuery)
Object.assign(params, this.pettyMoneyPageQuery) Object.assign(params, this.pettyMoneyPageQuery)
//确定是某种查询方式,则更新标记,作为下一次查询的标准 //确定是某种查询方式,则更新标记,作为下一次查询的标准
}else{ } else {
this.isConditionSelect = isConditionSelect this.isConditionSelect = isConditionSelect
isConditionSelect && Object.assign(params, this.pettyMoneyQuery) isConditionSelect && Object.assign(params, this.pettyMoneyQuery)
params.pageNum = 1 params.pageNum = 1
...@@ -205,12 +221,12 @@ export default { ...@@ -205,12 +221,12 @@ export default {
repay() { repay() {
this.$refs.dialogForm.validate((valida) => { this.$refs.dialogForm.validate((valida) => {
if (valida) { if (valida) {
const { pettyId, repaymentMoney } = this.checkedRow const { pettyId, repaymentMoney, repaymentMode, repaymentDetails } = this.checkedRow
const params = { const params = {
// companyId: this.companyId, // companyId: this.companyId,
operationId: this.urId, operationId: this.urId,
pettyId, pettyId, repaymentMode, repaymentDetails,
repaymentMoney, repaymentMoney, repaymentMode, repaymentDetails,
repaymentApproval: 0, repaymentApproval: 0,
repaymentTime: parseTime(new Date()), repaymentTime: parseTime(new Date()),
repaymentReason: '' repaymentReason: ''
...@@ -227,6 +243,15 @@ export default { ...@@ -227,6 +243,15 @@ export default {
} }
}) })
},
revoke(params) {
revokePetty(params).then(res => {
if (res.success) {
this.$message.success("撤销成功")
} else {
this.$message.error("撤销失败")
}
})
} }
} }
} }
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment