|
@@ -4,10 +4,10 @@
|
|
|
<a-page-header :ghost="false" :backIcon="false" class="expenseReimbursementAddcont" >
|
|
|
<!-- 自定义的二级文字标题 -->
|
|
|
<template slot="subTitle">
|
|
|
- <a id="purchaseOrderEdit-back-btn" href="javascript:;" @click="handleBack(0)"><a-icon type="left" /> 返回列表</a>
|
|
|
+ <a id="expenseEdit-back-btn" href="javascript:;" @click="handleBack(0)"><a-icon type="left" /> 返回列表</a>
|
|
|
<span style="margin: 0 15px;color: #666;font-weight: bold;">单号:{{ detailData&&detailData.expenseAccountNo }}</span>
|
|
|
<span style="margin: 0 10px;color: #666;">申请人:{{ detailData&&detailData.applyPersonName || '--' }}</span>
|
|
|
- <a-button size="small" type="link" class="button-default" @click="showDetail=!showDetail">
|
|
|
+ <a-button size="small" type="link" class="button-default" id="expenseEdit-showdesc" @click="showDetail=!showDetail">
|
|
|
<a-icon :type="showDetail ? 'eye-invisible' : 'eye'"/> {{ showDetail?'隐藏':'查看' }}信息
|
|
|
</a-button>
|
|
|
</template>
|
|
@@ -15,7 +15,7 @@
|
|
|
<a-card :bordered="false" size="small" class="expenseReimbursementAddcont" v-show="showDetail">
|
|
|
<div slot="title">
|
|
|
<span>基础信息</span>
|
|
|
- <div style="cursor:pointer;color: #00aaff;float:right;" @click.stop="handleEditBase" >
|
|
|
+ <div style="cursor:pointer;color: #00aaff;float:right;" id="expenseEdit-showEditModal" @click.stop="handleEditBase" >
|
|
|
<a-icon type="edit" /> 编辑基础信息
|
|
|
</div>
|
|
|
</div>
|
|
@@ -33,7 +33,13 @@
|
|
|
<a-descriptions-item label="主题" :span="3">{{ detailData&&detailData.title || '--' }}</a-descriptions-item>
|
|
|
<a-descriptions-item label="详细说明" :span="3">{{ detailData&&detailData.content.join(',')||'' }}</a-descriptions-item>
|
|
|
<a-descriptions-item label="附件" :span="3">
|
|
|
- <a target="_blank" style="color: #00aaff;text-decoration: underline;margin-right: 15px;" :href="item.filePath" v-for="item in detailData.expenseAccountFilesList" :key="item.id">
|
|
|
+ <a
|
|
|
+ target="_blank"
|
|
|
+ style="color: #00aaff;text-decoration: underline;margin-right: 15px;"
|
|
|
+ :href="item.filePath"
|
|
|
+ v-for="item in detailData.expenseAccountFilesList"
|
|
|
+ :id="item.id"
|
|
|
+ :key="item.id">
|
|
|
{{ item.fileName }}
|
|
|
</a>
|
|
|
</a-descriptions-item>
|
|
@@ -45,8 +51,9 @@
|
|
|
<div style="display: flex;justify-content: space-between;align-items: center;">
|
|
|
<div>费用明细</div>
|
|
|
<div>
|
|
|
- <a-button size="small" class="button-info" type="primary" @click="openGuideModal=true">导入费用明细</a-button>
|
|
|
- <a-button size="small" class="button-error" type="primary" @click="newExpenseDetail">新增费用明细</a-button>
|
|
|
+ <a-button id="expenseEdit-plEdit" size="small" class="button-info" type="primary" @click="plEdit">变更记账名称</a-button>
|
|
|
+ <a-button id="expenseEdit-import" size="small" class="button-info" type="primary" @click="openGuideModal=true">导入费用明细</a-button>
|
|
|
+ <a-button id="expenseEdit-new" size="small" class="button-error" type="primary" @click="newExpenseDetail">新增费用明细</a-button>
|
|
|
</div>
|
|
|
</div>
|
|
|
</div>
|
|
@@ -63,6 +70,8 @@
|
|
|
:rowKey="(record) => record.id"
|
|
|
:columns="columns"
|
|
|
:data="loadData"
|
|
|
+ :row-selection="{ columnWidth: 40 }"
|
|
|
+ @rowSelection="rowSelectionFun"
|
|
|
:defaultLoadData="false"
|
|
|
:showPagination="false"
|
|
|
bordered>
|
|
@@ -72,18 +81,21 @@
|
|
|
type="link"
|
|
|
class="button-info"
|
|
|
@click="setProduct(record)"
|
|
|
+ :id="'expenseEdit-set-'+record.id"
|
|
|
>设置产品信息</a-button>
|
|
|
<a-button
|
|
|
size="small"
|
|
|
type="link"
|
|
|
class="button-info"
|
|
|
@click="handleEdit(record)"
|
|
|
+ :id="'expenseEdit-edit-'+record.id"
|
|
|
>编辑</a-button>
|
|
|
<a-button
|
|
|
size="small"
|
|
|
type="link"
|
|
|
class="button-error"
|
|
|
@click="handleDel(record)"
|
|
|
+ :id="'expenseEdit-del-'+record.id"
|
|
|
>删除</a-button>
|
|
|
</template>
|
|
|
<!-- 记账名称 -->
|
|
@@ -91,6 +103,10 @@
|
|
|
<div>{{ text }}</div>
|
|
|
<div v-if="record.accountNameFnumber">({{ record.accountNameFnumber }})</div>
|
|
|
</template>
|
|
|
+ <!-- 原记账名称 -->
|
|
|
+ <template slot="yjzname" slot-scope="text,record">
|
|
|
+ <div>{{ text == record.accountName || !text ? '--' : text }}</div>
|
|
|
+ </template>
|
|
|
<!-- 费用承担方 -->
|
|
|
<template slot="fycdf" slot-scope="text,record">
|
|
|
<div v-for="(item,index) in record.detailSplitList" :key="item.id+'-'+index">
|
|
@@ -128,12 +144,14 @@
|
|
|
</div>
|
|
|
<!-- 费用明细 -->
|
|
|
<epenseDetailModal
|
|
|
+ ref="epenseDetailForm"
|
|
|
:openModal="openEpenseDetailModal"
|
|
|
:expenseAccountSn="$route.params.sn"
|
|
|
:expenseAccountNo="detailData?detailData.expenseAccountNo:''"
|
|
|
:expenseAccountDetailSn="expenseAccountDetailSn"
|
|
|
+ :isBatch="isBatch"
|
|
|
@ok="epenseDetailOk"
|
|
|
- @close="openEpenseDetailModal=false"></epenseDetailModal>
|
|
|
+ @close="epenseDetailClose"></epenseDetailModal>
|
|
|
<!-- 产品信息设置 -->
|
|
|
<productInfoModal
|
|
|
ref="productInfo"
|
|
@@ -160,7 +178,7 @@ import productInfoModal from './productInfoModal.vue'
|
|
|
import baseDataModal from './baseDataModal.vue'
|
|
|
import ImportGuideModal from './importGuideModal.vue'
|
|
|
import chooseDepartUserModal from './chooseDepartUserModal.vue'
|
|
|
-import { expenseAccountDetail, expenseAcctDetailDelete, expenseAcctDetailFindList, expenseAccountSubmit, expenseInsertImport } from '@/api/expenseManagement.js'
|
|
|
+import { expenseAccountDetail, expenseAcctDetailDelete, updateBatchExpenseAcctDetail, expenseAcctDetailFindList, expenseAccountSubmit, expenseInsertImport } from '@/api/expenseManagement.js'
|
|
|
export default {
|
|
|
name: 'ExpenseReimbursementEdit',
|
|
|
mixins: [commonMixin],
|
|
@@ -169,15 +187,15 @@ export default {
|
|
|
const _this = this
|
|
|
return {
|
|
|
spinning: false,
|
|
|
- detailData: null,
|
|
|
- openBaseModal: false,
|
|
|
- openGuideModal: false,
|
|
|
- openDepartUserModal: false,
|
|
|
+ detailData: null, // 详情信息
|
|
|
+ openBaseModal: false, // 基础信息编辑弹框
|
|
|
+ openGuideModal: false, // 导入费用明细弹框
|
|
|
+ openDepartUserModal: false, // 选择审核人员弹框
|
|
|
openEpenseDetailModal: false, // 费用明细弹框
|
|
|
- expenseAccountDetailSn: '',
|
|
|
+ expenseAccountDetailSn: '', // 费用明细sn
|
|
|
openProductInfoModal: false, // 产品信息弹框
|
|
|
- showDetail: false,
|
|
|
- total: 0,
|
|
|
+ showDetail: false, // 是否显示详细信息
|
|
|
+ total: 0, // 总记录数
|
|
|
loadData: parameter => {
|
|
|
const params = Object.assign(parameter, { expenseAccountSn: this.$route.params.sn })
|
|
|
return expenseAcctDetailFindList(params).then(res => {
|
|
@@ -203,20 +221,23 @@ export default {
|
|
|
})
|
|
|
},
|
|
|
columns: [
|
|
|
- { title: '序号', dataIndex: 'no', width: '5%', align: 'center' },
|
|
|
+ { title: '序号', dataIndex: 'no', width: '4%', align: 'center' },
|
|
|
{ title: '记账类型', dataIndex: 'accountTypeDictValue', align: 'center', width: '8%', customRender: function (text) { return text || '--' } },
|
|
|
{ title: '记账名称', dataIndex: 'accountName', scopedSlots: { customRender: 'jzname' }, align: 'center', width: '10%' },
|
|
|
- { title: '所属区域', dataIndex: 'subareaNames', width: '6%', align: 'center', customRender: function (text) { return text || '--' } },
|
|
|
- { title: '所属分区', dataIndex: 'subareaAreaName', width: '6%', align: 'center', customRender: function (text) { return text || '--' } },
|
|
|
- { title: '所属省份', dataIndex: 'provinceName', align: 'center', width: '8%', customRender: function (text) { return text || '--' } },
|
|
|
- { title: '所属城市', dataIndex: 'cityName', align: 'center', width: '8%', customRender: function (text) { return text || '--' } },
|
|
|
- { title: '记账费用', dataIndex: 'expense', align: 'center', width: '10%', customRender: function (text) { return (text == 0 || text) ? _this.toThousands(text) : '--' } },
|
|
|
+ { title: '原记账名称', dataIndex: 'origAccountName', scopedSlots: { customRender: 'yjzname' }, align: 'center', width: '10%' },
|
|
|
+ { title: '所属区域', dataIndex: 'subareaNames', width: '5%', align: 'center', customRender: function (text) { return text || '--' } },
|
|
|
+ { title: '所属分区', dataIndex: 'subareaAreaName', width: '5%', align: 'center', customRender: function (text) { return text || '--' } },
|
|
|
+ { title: '所属省份', dataIndex: 'provinceName', align: 'center', width: '5%', customRender: function (text) { return text || '--' } },
|
|
|
+ { title: '所属城市', dataIndex: 'cityName', align: 'center', width: '5%', customRender: function (text) { return text || '--' } },
|
|
|
+ { title: '记账费用', dataIndex: 'expense', align: 'center', width: '8%', customRender: function (text) { return (text == 0 || text) ? _this.toThousands(text) : '--' } },
|
|
|
{ title: '费用承担方', scopedSlots: { customRender: 'fycdf' }, align: 'center', width: '15%' },
|
|
|
- { title: '产品信息', scopedSlots: { customRender: 'cpxx' }, align: 'center', width: '12%' },
|
|
|
+ { title: '产品信息', scopedSlots: { customRender: 'cpxx' }, align: 'center', width: '10%' },
|
|
|
{ title: '销售单号', dataIndex: 'salesBillNo', width: '8%', align: 'center', customRender: function (text) { return text || '--' } },
|
|
|
{ title: '备注', dataIndex: 'remarks', align: 'center', width: '10%', customRender: function (text) { return text || '--' } },
|
|
|
{ title: '操作', scopedSlots: { customRender: 'action' }, width: '100px', align: 'center' }
|
|
|
- ]
|
|
|
+ ],
|
|
|
+ isBatch: false, // 是否变更记账名称
|
|
|
+ rowSelectionInfo: null // 批量选择的数据
|
|
|
}
|
|
|
},
|
|
|
methods: {
|
|
@@ -224,10 +245,11 @@ export default {
|
|
|
handleEditBase (event) {
|
|
|
this.openBaseModal = true
|
|
|
},
|
|
|
+ // 刷新列表
|
|
|
refashData () {
|
|
|
this.getDetail(true)
|
|
|
},
|
|
|
- // 费用单基础详情
|
|
|
+ // 获取费用单基础详情
|
|
|
getDetail (type) {
|
|
|
this.spinning = true
|
|
|
this.disabled = true
|
|
@@ -245,46 +267,92 @@ export default {
|
|
|
}
|
|
|
})
|
|
|
},
|
|
|
+ // 查询列表
|
|
|
getExpenseDetailList () {
|
|
|
this.$refs.table.refresh()
|
|
|
},
|
|
|
// 确认导入明细
|
|
|
hanldeImprotOk (obj) {
|
|
|
- console.log(obj)
|
|
|
expenseInsertImport(obj).then(res => {
|
|
|
if (res.status == 200) {
|
|
|
this.getDetail(false)
|
|
|
}
|
|
|
})
|
|
|
},
|
|
|
- // 新增明细
|
|
|
- newExpenseDetail () {
|
|
|
+ // 批量修改明细
|
|
|
+ plEdit () {
|
|
|
+ if (!this.rowSelectionInfo || (this.rowSelectionInfo && this.rowSelectionInfo.selectedRowKeys.length < 1)) {
|
|
|
+ this.$message.warning('请在列表勾选后再进行操作!')
|
|
|
+ return
|
|
|
+ }
|
|
|
this.expenseAccountDetailSn = ''
|
|
|
this.openEpenseDetailModal = true
|
|
|
+ this.isBatch = true
|
|
|
},
|
|
|
- // 新增明细成功
|
|
|
- epenseDetailOk () {
|
|
|
- // 刷新列表
|
|
|
- this.openEpenseDetailModal = false
|
|
|
- this.getDetail(false)
|
|
|
+ // 表格选中项
|
|
|
+ rowSelectionFun (obj) {
|
|
|
+ this.rowSelectionInfo = obj || null
|
|
|
},
|
|
|
- // 设置产品
|
|
|
- setProduct (row) {
|
|
|
- this.openProductInfoModal = true
|
|
|
- this.expenseAccountDetailSn = row.expenseAccountDetailSn
|
|
|
- this.$refs.productInfo.setBaseData(row)
|
|
|
- },
|
|
|
- // 新增产品成功
|
|
|
- productInfoOk () {
|
|
|
- // 刷新列表
|
|
|
- this.openProductInfoModal = false
|
|
|
- this.getDetail(false)
|
|
|
+ // 新增明细
|
|
|
+ newExpenseDetail () {
|
|
|
+ this.expenseAccountDetailSn = ''
|
|
|
+ this.openEpenseDetailModal = true
|
|
|
},
|
|
|
// 编辑明细
|
|
|
handleEdit (row) {
|
|
|
this.openEpenseDetailModal = true
|
|
|
this.expenseAccountDetailSn = row.expenseAccountDetailSn
|
|
|
},
|
|
|
+ // 新增修改明细成功
|
|
|
+ epenseDetailOk (data) {
|
|
|
+ // 如果是批量修改
|
|
|
+ if (this.isBatch) {
|
|
|
+ const rows = this.rowSelectionInfo && this.rowSelectionInfo.selectedRows || []
|
|
|
+ const params = []
|
|
|
+ if (rows.length) {
|
|
|
+ rows.forEach(item => {
|
|
|
+ params.push({
|
|
|
+ expenseAccountDetailSn: item.expenseAccountDetailSn,
|
|
|
+ origAccountName: item.origAccountName,
|
|
|
+ origAccountNameSn: item.origAccountNameSn,
|
|
|
+ accountNameSn: data.accountNameSn,
|
|
|
+ accountType: data.accountType,
|
|
|
+ provinceName: data.provinceName,
|
|
|
+ provinceSn: data.provinceSn,
|
|
|
+ subareaArea: data.subareaArea,
|
|
|
+ cityName: data.cityName,
|
|
|
+ citySn: data.citySn,
|
|
|
+ expenseAccountNo: data.expenseAccountNo,
|
|
|
+ expenseAccountSn: data.expenseAccountSn,
|
|
|
+ remarks: data.remarks
|
|
|
+ })
|
|
|
+ })
|
|
|
+ // 组织数据
|
|
|
+ updateBatchExpenseAcctDetail(params).then(res => {
|
|
|
+ if (res.status == 200) {
|
|
|
+ this.$message.success(res.message)
|
|
|
+ // 修改成功
|
|
|
+ this.$refs.table.clearTable()
|
|
|
+ this.epenseDetailClose()
|
|
|
+ this.getDetail(false)// 刷新列表
|
|
|
+ }
|
|
|
+ this.$refs.epenseDetailForm.spinning = false
|
|
|
+ })
|
|
|
+ } else {
|
|
|
+ this.$message.warning('请在列表勾选后再进行操作!')
|
|
|
+ this.$refs.epenseDetailForm.spinning = false
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ // 单个修改成功
|
|
|
+ this.epenseDetailClose()
|
|
|
+ this.getDetail(false)// 刷新列表
|
|
|
+ }
|
|
|
+ },
|
|
|
+ // 明细弹框关闭
|
|
|
+ epenseDetailClose () {
|
|
|
+ this.openEpenseDetailModal = false
|
|
|
+ this.isBatch = false
|
|
|
+ },
|
|
|
// 删除明细
|
|
|
handleDel (row) {
|
|
|
const _this = this
|
|
@@ -307,6 +375,19 @@ export default {
|
|
|
}
|
|
|
})
|
|
|
},
|
|
|
+ // 设置产品
|
|
|
+ setProduct (row) {
|
|
|
+ this.openProductInfoModal = true
|
|
|
+ this.expenseAccountDetailSn = row.expenseAccountDetailSn
|
|
|
+ this.$refs.productInfo.setBaseData(row)
|
|
|
+ },
|
|
|
+ // 新增产品成功
|
|
|
+ productInfoOk () {
|
|
|
+ // 刷新列表
|
|
|
+ this.openProductInfoModal = false
|
|
|
+ this.getDetail(false)
|
|
|
+ },
|
|
|
+ // 提交前,选择审批人员
|
|
|
beforeSubmit () {
|
|
|
if (this.total) {
|
|
|
this.openDepartUserModal = true
|
|
@@ -329,7 +410,9 @@ export default {
|
|
|
handleBack (data) {
|
|
|
this.$router.push({ name: 'expenseReimbursementList' })
|
|
|
},
|
|
|
+ // 初始化页面
|
|
|
pageInit () {
|
|
|
+ this.$refs.table.clearTable()
|
|
|
if (this.$route.params.sn) { // 编辑页
|
|
|
this.getDetail(false)
|
|
|
}
|
|
@@ -341,10 +424,7 @@ export default {
|
|
|
}
|
|
|
},
|
|
|
activated () {
|
|
|
- // 如果是新页签打开或者进入新的子页(例:存在列表第2条数据编辑页页签时再打开第4条数据的编辑页),则重置当前页面
|
|
|
- if (this.$store.state.app.isNewTab || !this.$store.state.app.isNewSubTab) {
|
|
|
- this.pageInit()
|
|
|
- }
|
|
|
+ this.pageInit()
|
|
|
},
|
|
|
beforeRouteEnter (to, from, next) {
|
|
|
next(vm => {})
|