commit
9a14b99b18
@ -0,0 +1,82 @@ |
|||||||
|
<template> |
||||||
|
<el-dialog v-if="show" title="新增报销" :visible.sync="show" width="500px"> |
||||||
|
<el-form ref="form" :model="form" :rules="rules" label-width="100px"> |
||||||
|
<el-form-item label="成交学员" prop="stuName"> |
||||||
|
<el-input v-model="form.stuName" placeholder="请输入" /> |
||||||
|
</el-form-item> |
||||||
|
<el-form-item label="报名点" prop="spotName"> |
||||||
|
<el-input v-model="form.spotName" placeholder="请输入" /> |
||||||
|
</el-form-item> |
||||||
|
<el-form-item label="报销款项" prop="expenseType"> |
||||||
|
<el-radio-group v-model="form.expenseType"> |
||||||
|
<el-radio v-for="(item, index) in expenseTypeOptions" :key="index" :label="item.key"> |
||||||
|
{{ item.value }} |
||||||
|
</el-radio> |
||||||
|
</el-radio-group> |
||||||
|
</el-form-item> |
||||||
|
<el-form-item label="报销金额" prop="expenseTotal"> |
||||||
|
<el-input v-model="form.expenseTotal" placeholder="请输入" /> |
||||||
|
</el-form-item> |
||||||
|
<el-form-item label="报销说明" prop="applyRemark"> |
||||||
|
<el-input v-model="form.applyRemark" type="textarea" placeholder="请输入" /> |
||||||
|
</el-form-item> |
||||||
|
</el-form> |
||||||
|
|
||||||
|
<el-table v-if="form.type == 2" :data="tableList" border stripe> |
||||||
|
<el-table-column prop="expenseType" label="报销款项" /> |
||||||
|
<el-table-column prop="expenseTotal" label="报销金额" /> |
||||||
|
<el-table-column prop="applyUser" label="申请人" /> |
||||||
|
<el-table-column prop="applyTime" label="申请时间" /> |
||||||
|
</el-table> |
||||||
|
|
||||||
|
<span slot="footer"> |
||||||
|
<el-button @click="show = false">取消</el-button> |
||||||
|
<el-button type="primary" @click="handleSure">确定</el-button> |
||||||
|
</span> |
||||||
|
</el-dialog> |
||||||
|
|
||||||
|
</template> |
||||||
|
|
||||||
|
<script> |
||||||
|
export default { |
||||||
|
data() { |
||||||
|
return { |
||||||
|
show: false, |
||||||
|
showColumns: [], |
||||||
|
form: { |
||||||
|
stuName: undefined, |
||||||
|
spotName: undefined, |
||||||
|
expenseTotal: undefined, |
||||||
|
expenseType: undefined, |
||||||
|
applyRemark: undefined |
||||||
|
}, |
||||||
|
expenseTypeOptions: [], |
||||||
|
rules: { |
||||||
|
stuName: { required: true, message: '请输入', trigger: 'blur' }, |
||||||
|
spotName: { required: true, message: '请输入', trigger: 'blur' }, |
||||||
|
expenseTotal: { required: true, message: '请输入', trigger: 'blur' }, |
||||||
|
applyRemark: { required: true, message: '请输入', trigger: 'blur' } |
||||||
|
} |
||||||
|
}; |
||||||
|
}, |
||||||
|
methods: { |
||||||
|
init(data) { |
||||||
|
this.show = true; |
||||||
|
this.form.type = data.type; |
||||||
|
if (!this.expenseTypeOptions.length) { |
||||||
|
// 获取款项类型下拉 |
||||||
|
this.expenseTypeOptions = []; |
||||||
|
} |
||||||
|
}, |
||||||
|
handleSure() { |
||||||
|
this.$refs.form.validate(async valid => { |
||||||
|
if (valid) { |
||||||
|
// 提交申请 |
||||||
|
} |
||||||
|
}); |
||||||
|
} |
||||||
|
} |
||||||
|
}; |
||||||
|
</script> |
||||||
|
|
||||||
|
<style lang="scss" scoped></style> |
@ -0,0 +1,72 @@ |
|||||||
|
<template> |
||||||
|
<el-dialog v-if="show" title="报销审批" :visible.sync="show" width="800px"> |
||||||
|
<el-descriptions :column="2" border> |
||||||
|
<el-descriptions-item v-for="(item, index) in showColumns" :key="index" :label="item.label"> |
||||||
|
{{ info[item.prop] }} |
||||||
|
</el-descriptions-item> |
||||||
|
</el-descriptions> |
||||||
|
<el-form ref="form" class="mt20" :model="form" :rules="rules" label-width="100px"> |
||||||
|
<el-form-item label="是否通过" prop="auditStatus"> |
||||||
|
<el-radio-group v-model="form.auditStatus"> |
||||||
|
<el-radio :label="1">通过</el-radio> |
||||||
|
<el-radio :label="0">驳回</el-radio> |
||||||
|
</el-radio-group> |
||||||
|
</el-form-item> |
||||||
|
<el-form-item label="审批说明" prop="auditRemark"> |
||||||
|
<el-input v-model="form.auditRemark" type="textarea" placeholder="请输入" /> |
||||||
|
</el-form-item> |
||||||
|
</el-form> |
||||||
|
|
||||||
|
<span slot="footer"> |
||||||
|
<el-button @click="show = false">取消</el-button> |
||||||
|
<el-button type="primary" @click="handleSure">确定</el-button> |
||||||
|
</span> |
||||||
|
</el-dialog> |
||||||
|
|
||||||
|
</template> |
||||||
|
|
||||||
|
<script> |
||||||
|
export default { |
||||||
|
data() { |
||||||
|
return { |
||||||
|
show: false, |
||||||
|
showColumns: [], |
||||||
|
info: {}, |
||||||
|
form: { |
||||||
|
auditStatus: 1, |
||||||
|
auditRemark: undefined |
||||||
|
}, |
||||||
|
rules: { |
||||||
|
auditRemark: { required: true, message: '请输入', trigger: 'blur' } |
||||||
|
} |
||||||
|
}; |
||||||
|
}, |
||||||
|
methods: { |
||||||
|
init(data) { |
||||||
|
this.show = true; |
||||||
|
this.info = { ...data, type: '1' }; |
||||||
|
const commonColumns = [ |
||||||
|
{ prop: 'applyUser', label: `申请人` }, |
||||||
|
{ prop: 'applyDate', label: `申请时间` }, |
||||||
|
{ prop: 'applyRemark', label: `申请备注` }, |
||||||
|
{ prop: 'expenseType', label: `报销款项` }, |
||||||
|
{ prop: 'expenseTotal', label: `报销金额` } |
||||||
|
]; |
||||||
|
const otherColumns = { |
||||||
|
1: [{ prop: 'spotName', label: `报名点` }], |
||||||
|
2: [{ prop: 'stuName', label: `成交学员` }] |
||||||
|
}; |
||||||
|
this.showColumns = otherColumns[this.info.type].concat(commonColumns); |
||||||
|
}, |
||||||
|
handleSure() { |
||||||
|
this.$refs.form.validate(async valid => { |
||||||
|
if (valid) { |
||||||
|
// 提交审批结果 |
||||||
|
} |
||||||
|
}); |
||||||
|
} |
||||||
|
} |
||||||
|
}; |
||||||
|
</script> |
||||||
|
|
||||||
|
<style lang="scss" scoped></style> |
@ -0,0 +1,49 @@ |
|||||||
|
<template> |
||||||
|
<el-dialog v-if="show" :title="`报销详情【${info.statusName}】`" :visible.sync="show" width="800px"> |
||||||
|
<el-descriptions :column="2" border> |
||||||
|
<el-descriptions-item v-for="(item, index) in showColumns" :key="index" :label="item.label"> |
||||||
|
{{ info[item.prop] }} |
||||||
|
</el-descriptions-item> |
||||||
|
</el-descriptions> |
||||||
|
<span slot="footer"> |
||||||
|
<el-button @click="show = false">取消</el-button> |
||||||
|
</span> |
||||||
|
</el-dialog> |
||||||
|
|
||||||
|
</template> |
||||||
|
|
||||||
|
<script> |
||||||
|
export default { |
||||||
|
data() { |
||||||
|
return { |
||||||
|
show: false, |
||||||
|
showColumns: [], |
||||||
|
info: {} |
||||||
|
}; |
||||||
|
}, |
||||||
|
methods: { |
||||||
|
init(data) { |
||||||
|
this.show = true; |
||||||
|
this.info = { ...data, statusName: '待审核', type: '1' }; |
||||||
|
const commonColumns = [ |
||||||
|
{ prop: 'applyUser', label: `申请人` }, |
||||||
|
{ prop: 'applyDate', label: `申请时间` }, |
||||||
|
{ prop: 'applyRemark', label: `申请备注` }, |
||||||
|
{ prop: 'expenseType', label: `报销款项` }, |
||||||
|
{ prop: 'expenseTotal', label: `报销金额` }, |
||||||
|
{ prop: 'auditStatus', label: `审批状态` }, |
||||||
|
{ prop: 'auditUser', label: `审批人` }, |
||||||
|
{ prop: 'auditDate', label: `审批时间` }, |
||||||
|
{ prop: 'auditRemark', label: `审批备注` } |
||||||
|
]; |
||||||
|
const otherColumns = { |
||||||
|
1: [{ prop: 'spotName', label: `报名点` }], |
||||||
|
2: [{ prop: 'stuName', label: `成交学员` }] |
||||||
|
}; |
||||||
|
this.showColumns = otherColumns[this.info.type].concat(commonColumns); |
||||||
|
} |
||||||
|
} |
||||||
|
}; |
||||||
|
</script> |
||||||
|
|
||||||
|
<style lang="scss" scoped></style> |
@ -0,0 +1,97 @@ |
|||||||
|
<template> |
||||||
|
<div> |
||||||
|
<SearchForm v-show="showSearch" :value.sync="searchForm" /> |
||||||
|
<el-row :gutter="10" class="mb8"> |
||||||
|
<el-col :span="1.5"> |
||||||
|
<el-button type="primary" plain icon="el-icon-plus" @click="handleAdd">新增</el-button> |
||||||
|
<el-button type="warning" icon="el-icon-download" @click="handleExport">导出</el-button> |
||||||
|
</el-col> |
||||||
|
<right-toolbar :show-search.sync="showSearch" :columns="columns" @queryTable="_getTableList" /> |
||||||
|
</el-row> |
||||||
|
<el-table :data="tableList"> |
||||||
|
<el-table-column type="selection" width="50" align="center" /> |
||||||
|
<template v-for="item in columns"> |
||||||
|
<el-table-column v-if="item.visible" :key="item.prop" :label="item.label" align="center" min-width="100" :prop="item.prop" /> |
||||||
|
</template> |
||||||
|
<el-table-column label="操作" fixed="right" align="center" width="160"> |
||||||
|
<template slot-scope="scope"> |
||||||
|
<el-button type="text" @click="handleDetail(scope.row)">详情</el-button> |
||||||
|
<el-button type="text" @click="handleCheck(scope.row)">审核</el-button> |
||||||
|
</template> |
||||||
|
</el-table-column> |
||||||
|
</el-table> |
||||||
|
|
||||||
|
<pagination :total="total" :page.sync="searchForm.pageNum" :limit.sync="searchForm.pageSize" @pagination="_getTableList" /> |
||||||
|
|
||||||
|
<DialogDetail ref="DialogDetail" /> |
||||||
|
<DialogAudit ref="DialogAudit" /> |
||||||
|
<DialogAdd ref="DialogAdd" /> |
||||||
|
</div> |
||||||
|
</template> |
||||||
|
|
||||||
|
<script> |
||||||
|
import DialogDetail from './DialogDetail.vue'; |
||||||
|
import DialogAudit from './DialogAudit.vue'; |
||||||
|
import DialogAdd from './DialogAdd.vue'; |
||||||
|
import SearchForm from './SearchForm.vue'; |
||||||
|
import { defaultColumns } from './columns.js'; |
||||||
|
export default { |
||||||
|
components: { |
||||||
|
SearchForm, DialogDetail, DialogAudit, DialogAdd |
||||||
|
}, |
||||||
|
props: { |
||||||
|
type: { |
||||||
|
type: String, |
||||||
|
default: '1' |
||||||
|
} |
||||||
|
}, |
||||||
|
data() { |
||||||
|
return { |
||||||
|
searchForm: { |
||||||
|
expenseUser: undefined, |
||||||
|
expenseDate: [], |
||||||
|
pageNum: 1, |
||||||
|
pageSize: 20 |
||||||
|
}, |
||||||
|
showSearch: true, |
||||||
|
tableList: [], |
||||||
|
total: 0, |
||||||
|
columns: [] |
||||||
|
}; |
||||||
|
}, |
||||||
|
watch: { |
||||||
|
type: { |
||||||
|
handler() { |
||||||
|
const str = localStorage.getItem(`${this.$route.name}-${this.type}-table-columns`); |
||||||
|
this.columns = str ? JSON.parse(str) : defaultColumns[this.type]; |
||||||
|
this._getTableList(); |
||||||
|
}, |
||||||
|
immediate: true |
||||||
|
} |
||||||
|
}, |
||||||
|
methods: { |
||||||
|
async _getTableList() { |
||||||
|
const params = { ...this.searchForm }; |
||||||
|
// api.list(params) |
||||||
|
this.tableList = []; |
||||||
|
for (let i = 0; i < 20; i++) { |
||||||
|
this.tableList.push({ applyUser: `数据${i + 1}` }); |
||||||
|
} |
||||||
|
}, |
||||||
|
handleDetail(row) { |
||||||
|
this.$refs.DialogDetail && this.$refs.DialogDetail.init({ ...row, type: this.type }); |
||||||
|
}, |
||||||
|
handleCheck(row) { |
||||||
|
this.$refs.DialogAudit && this.$refs.DialogAudit.init({ ...row, type: this.type }); |
||||||
|
}, |
||||||
|
handleExport() { |
||||||
|
|
||||||
|
}, |
||||||
|
handleAdd() { |
||||||
|
this.$refs.DialogAdd && this.$refs.DialogAdd.init({ type: this.type }); |
||||||
|
} |
||||||
|
} |
||||||
|
}; |
||||||
|
</script> |
||||||
|
|
||||||
|
<style lang="scss" scoped></style> |
@ -0,0 +1,40 @@ |
|||||||
|
<template> |
||||||
|
<el-form ref="searchForm" :model="searchForm" inline label-width="100px"> |
||||||
|
<el-form-item label="报销人:" label-width="90px"> |
||||||
|
<el-input v-model="searchForm.expenseUser" placeholder="请输入" clearable @change="$emit('update:value', searchForm)" /> |
||||||
|
</el-form-item> |
||||||
|
<el-form-item label="报销时间:"> |
||||||
|
<el-date-picker v-model="searchForm.expenseDate" value-format="yyyy-MM-dd" type="daterange" range-separator="-" start-placeholder="开始日期" end-placeholder="结束日期" @change="$emit('update:value', searchForm)" /> |
||||||
|
</el-form-item> |
||||||
|
<el-form-item label-width="0"> |
||||||
|
<el-button type="primary" icon="el-icon-search" @click="$emit('search')">搜索</el-button> |
||||||
|
</el-form-item> |
||||||
|
</el-form> |
||||||
|
</template> |
||||||
|
|
||||||
|
<script> |
||||||
|
export default { |
||||||
|
props: { |
||||||
|
value: { |
||||||
|
type: Object, |
||||||
|
default: () => ({}) |
||||||
|
} |
||||||
|
}, |
||||||
|
data() { |
||||||
|
return { |
||||||
|
searchForm: {} |
||||||
|
}; |
||||||
|
}, |
||||||
|
watch: { |
||||||
|
value: { |
||||||
|
handler(val) { |
||||||
|
this.searchForm = this.deepClone(val); |
||||||
|
}, |
||||||
|
deep: true, |
||||||
|
immediate: true |
||||||
|
} |
||||||
|
} |
||||||
|
}; |
||||||
|
</script> |
||||||
|
|
||||||
|
<style lang="scss" scoped></style> |
@ -0,0 +1,24 @@ |
|||||||
|
export const defaultColumns = { |
||||||
|
1: [ |
||||||
|
{ key: 0, prop: 'spotName', label: `报名点`, visible: true }, |
||||||
|
{ key: 1, prop: 'expenseType', label: `报销款项`, visible: true }, |
||||||
|
{ key: 2, prop: 'expenseTotal', label: `报销金额`, visible: true }, |
||||||
|
{ key: 3, prop: 'applyUser', label: `申请人`, visible: true }, |
||||||
|
{ key: 4, prop: 'applyDate', label: `申请时间`, visible: true }, |
||||||
|
{ key: 5, prop: 'applyRemark', label: `申请备注`, visible: true }, |
||||||
|
{ key: 6, prop: 'auditStatus', label: `审批状态`, visible: true }, |
||||||
|
{ key: 7, prop: 'auditUser', label: `审批人`, visible: true }, |
||||||
|
{ key: 8, prop: 'auditDate', label: `审批时间`, visible: true } |
||||||
|
], |
||||||
|
2: [ |
||||||
|
{ key: 0, prop: 'stuName', label: `成交学员`, visible: true }, |
||||||
|
{ key: 1, prop: 'expenseType', label: `报销款项`, visible: true }, |
||||||
|
{ key: 2, prop: 'expenseTotal', label: `报销金额`, visible: true }, |
||||||
|
{ key: 3, prop: 'applyUser', label: `申请人`, visible: true }, |
||||||
|
{ key: 4, prop: 'applyDate', label: `申请时间`, visible: true }, |
||||||
|
{ key: 5, prop: 'applyRemark', label: `申请备注`, visible: true }, |
||||||
|
{ key: 6, prop: 'auditStatus', label: `审批状态`, visible: true }, |
||||||
|
{ key: 7, prop: 'auditUser', label: `审批人`, visible: true }, |
||||||
|
{ key: 8, prop: 'auditDate', label: `审批时间`, visible: true } |
||||||
|
] |
||||||
|
}; |
@ -0,0 +1,29 @@ |
|||||||
|
<template> |
||||||
|
<div class="p20"> |
||||||
|
<el-tabs v-model="expenseType" tab-position="left"> |
||||||
|
<el-tab-pane label="报名点报销" name="1"> |
||||||
|
<RightPane :type="expenseType" /> |
||||||
|
</el-tab-pane> |
||||||
|
<el-tab-pane label="学员成交报销" name="2"> |
||||||
|
<RightPane :type="expenseType" /> |
||||||
|
</el-tab-pane> |
||||||
|
</el-tabs> |
||||||
|
|
||||||
|
</div> |
||||||
|
</template> |
||||||
|
|
||||||
|
<script> |
||||||
|
import RightPane from './RightPane'; |
||||||
|
export default { |
||||||
|
components: { |
||||||
|
RightPane |
||||||
|
}, |
||||||
|
data() { |
||||||
|
return { |
||||||
|
expenseType: '1' |
||||||
|
}; |
||||||
|
} |
||||||
|
}; |
||||||
|
</script> |
||||||
|
|
||||||
|
<style lang="scss" scoped></style> |
Loading…
Reference in new issue