408 lines
11 KiB
Vue
408 lines
11 KiB
Vue
|
<template>
|
|||
|
<view class="page">
|
|||
|
<view class="step_num" style="margin-bottom: 22upx;">
|
|||
|
<view class="step step1">完善报销明细</view>
|
|||
|
<view class="step step2">上传报销凭证</view>
|
|||
|
</view>
|
|||
|
<view v-for="(item,index) in itemList" :key="index" class="example-box">
|
|||
|
<view class="item">
|
|||
|
<view class="itemname">报销明细{{index+1}}</view>
|
|||
|
<view class="itemtext" style="color:#007aff;" @click="deleteItem(index)">
|
|||
|
<uni-icons type="trash" class="myarrowright" style="right:56upx; font-size: 36upx;color:#007aff;"></uni-icons>删除
|
|||
|
</view>
|
|||
|
</view>
|
|||
|
<view class="item">
|
|||
|
<view class="itemname redMi">报销金额</view>
|
|||
|
<view class="itemtext">
|
|||
|
<input class="iteminput InputRightMargin" type="number" placeholder="请输入金额" v-model="item.reiCount" @change='dataChange'/>
|
|||
|
<view class="itemunit">元</view>
|
|||
|
</view>
|
|||
|
</view>
|
|||
|
<view class="item " @click="onShowDatePicker(index)">
|
|||
|
<view class="itemname redMi">日期</view>
|
|||
|
<view class="itemtext">
|
|||
|
<view >
|
|||
|
<input class="iteminput InputRightMargin" disabled placeholder="请选择日期" :value='item.reiDate'/>
|
|||
|
<img src="../../static/img/dateIcon.png" class="dateIcon" />
|
|||
|
</view>
|
|||
|
</view>
|
|||
|
</view>
|
|||
|
<view class="item">
|
|||
|
<view class="itemname redMi">报销类别</view>
|
|||
|
<view class="itemtext">
|
|||
|
<input class="iteminput InputRightMargin" disabled placeholder="请选择报销类别" @click="showSinglePicker(index)" :value="item.typeName"/>
|
|||
|
<uni-icons type="arrowright" class="myarrowright" style="right: 0px;"></uni-icons>
|
|||
|
</view>
|
|||
|
</view>
|
|||
|
<view class="item item_line">
|
|||
|
<view class="itemname">报销摘要</view>
|
|||
|
<view class="itemtext">
|
|||
|
<input class="iteminput" placeholder="请输入报销摘要" v-model="item.reiItemDescription" @input='dataChange'/>
|
|||
|
</view>
|
|||
|
</view>
|
|||
|
</view>
|
|||
|
<view class="fixMargin"></view>
|
|||
|
<view class="fixBottom">
|
|||
|
<view class="uni-flex uni-row">
|
|||
|
<view style="-webkit-flex:1;flex: 1;">
|
|||
|
<button type="primary" plain="true" style="width: 90%; background: #fff;" @click="addReim">新增报销明细</button>
|
|||
|
</view>
|
|||
|
<view style="-webkit-flex:1;flex: 1;">
|
|||
|
<button type="primary" style="width: 90%;" @click="next">下一步</button>
|
|||
|
</view>
|
|||
|
</view>
|
|||
|
</view>
|
|||
|
<mx-datepicker type="date" :value="value_time" :show="showPicker" @confirm="onSelected" @cancel="onSelected"></mx-datepicker>
|
|||
|
<mpvue-picker themeColor="#007AFF" ref="mpvuePicker" mode="selector" :deepLength="deepLength"
|
|||
|
@onConfirm="pickerConfirm" :pickerValueArray="reim_type"></mpvue-picker>
|
|||
|
<view class="goHome" @click='goMain("reimInfo")'>
|
|||
|
<img src="../../static/img/gohome.png">
|
|||
|
</view>
|
|||
|
</view>
|
|||
|
</template>
|
|||
|
|
|||
|
<script>
|
|||
|
import {
|
|||
|
config
|
|||
|
} from '../../request/js/config.js'
|
|||
|
import mpvuePicker from '@/components/mpvue-picker/mpvuePicker.vue';
|
|||
|
import mxDatepicker from '@/components/mx-datepicker/mx-datepicker.vue'
|
|||
|
import uniIcons from "@/components/uni-icons/uni-icons.vue"
|
|||
|
export default {
|
|||
|
components: {
|
|||
|
mxDatepicker, mpvuePicker,
|
|||
|
uniIcons
|
|||
|
},
|
|||
|
data() {
|
|||
|
return {
|
|||
|
config:config,
|
|||
|
showPicker: false,
|
|||
|
csr:[],
|
|||
|
imgsrc_list_local:[],
|
|||
|
imgsrc_list:[],
|
|||
|
deepLength:1,
|
|||
|
itemList:[{
|
|||
|
"reiCount":"",
|
|||
|
"reiDate":"",
|
|||
|
"type":"",
|
|||
|
"typeName":'',
|
|||
|
"reiItemDescription":""}
|
|||
|
],
|
|||
|
value_time:'',
|
|||
|
id:'',
|
|||
|
reim_type:[],
|
|||
|
dateIndex:0,
|
|||
|
pickerIndex:0,
|
|||
|
deletDetailIds:[]
|
|||
|
}
|
|||
|
},
|
|||
|
onLoad(option) {
|
|||
|
var _this = this;
|
|||
|
this.id = option.id||'';
|
|||
|
|
|||
|
//如果是编辑,就根据接口获取数据,
|
|||
|
if(option.id){
|
|||
|
this.$http.request({
|
|||
|
url: '/apis/reimApply/detail',
|
|||
|
method:'GET',
|
|||
|
params: {
|
|||
|
id:option.id,
|
|||
|
},
|
|||
|
}).then(res => {
|
|||
|
if (res.data.code == 0) {
|
|||
|
var reimInfos = res.data.reimApplyDO;
|
|||
|
res.data.approveList.forEach((vals,index)=>{
|
|||
|
var json = {
|
|||
|
user_id:vals.user_id,
|
|||
|
name:vals.name
|
|||
|
}
|
|||
|
this.csr.push(json);
|
|||
|
});
|
|||
|
for(var i=0;i<res.data.initFileList.length;i++){
|
|||
|
this.imgsrc_list.push(res.data.initFileList[i].filePath);
|
|||
|
this.imgsrc_list_local.push(config.imgURL+res.data.initFileList[i].filePath);
|
|||
|
}
|
|||
|
var items = res.data.itemList;
|
|||
|
_this.itemList = [];
|
|||
|
for(var i=0;i<items.length;i++){
|
|||
|
var json = {
|
|||
|
"reiCount":items[i].rei_count,
|
|||
|
"reiDate":items[i].rei_date,
|
|||
|
"type":items[i].type,
|
|||
|
"typeName":items[i].typeName,
|
|||
|
"reiItemDescription":items[i].rei_item_description,
|
|||
|
"id":items[i].id
|
|||
|
}
|
|||
|
_this.itemList.push(json);
|
|||
|
}
|
|||
|
uni.setStorage({
|
|||
|
key: 'reimInfo',
|
|||
|
data: {
|
|||
|
info:this.itemList,
|
|||
|
imgsrc_list:this.imgsrc_list,
|
|||
|
imgsrc_list_local:this.imgsrc_list_local,
|
|||
|
targetList:this.csr,
|
|||
|
id:_this.id,
|
|||
|
process_instance_id:reimInfos.process_instance_id,
|
|||
|
approveState:reimInfos.approveState,
|
|||
|
deletDetailIds:_this.deletDetailIds
|
|||
|
},
|
|||
|
success: function () {
|
|||
|
}
|
|||
|
});
|
|||
|
}
|
|||
|
}).catch(err => {
|
|||
|
uni.showToast({
|
|||
|
title: '获取信息失败',
|
|||
|
icon: 'none',
|
|||
|
duration: 2000
|
|||
|
});
|
|||
|
});
|
|||
|
}else{
|
|||
|
//如果不是,是新增,获取session中的数据。
|
|||
|
uni.getStorage({
|
|||
|
key: 'reimInfo',
|
|||
|
success: function (res) {
|
|||
|
_this.itemList = res.data.info||[],
|
|||
|
_this.csr = res.data.targetList||[];
|
|||
|
_this.imgsrc_list = res.data.imgsrc_list||[];
|
|||
|
_this.imgsrc_list_local = res.data.imgsrc_list_local||[];
|
|||
|
}
|
|||
|
});
|
|||
|
}
|
|||
|
|
|||
|
//初始化获取 报销类别
|
|||
|
this.$http.request({
|
|||
|
url: '/apis/dict/getDictsByType',
|
|||
|
params: {
|
|||
|
type: 'reim_apply_type'
|
|||
|
},
|
|||
|
}).then(res=>{
|
|||
|
if(res.statusCode == '200'){
|
|||
|
var useType = res.data.datas;
|
|||
|
for (let i = 0; i < useType.length; i++) {
|
|||
|
var myVal=
|
|||
|
{
|
|||
|
'label': useType[i].name,
|
|||
|
'value': useType[i].id
|
|||
|
}
|
|||
|
_this.reim_type.push(myVal);
|
|||
|
}
|
|||
|
}
|
|||
|
}).catch(err=>{
|
|||
|
console.log(err);
|
|||
|
});
|
|||
|
},
|
|||
|
methods: {
|
|||
|
addReim(){
|
|||
|
var myjson = {
|
|||
|
"reiCount":"",
|
|||
|
"reiDate":"",
|
|||
|
"type":"",
|
|||
|
'typeName':'',
|
|||
|
"reiItemDescription":""
|
|||
|
};
|
|||
|
this.itemList.push(myjson);
|
|||
|
},
|
|||
|
next(){
|
|||
|
//在跳转到下一个界面之前,需要判断当前报销内容是否都填写完整。
|
|||
|
if(this.itemList.length >0){
|
|||
|
var items = this.itemList;
|
|||
|
for(var i=0; i<items.length; i++){
|
|||
|
if(!items[i].reiCount || !items[i].reiDate || !items[i].type){
|
|||
|
uni.showToast({
|
|||
|
title: '请填写完整该条报销明细',
|
|||
|
duration: 2000,
|
|||
|
icon:"none",
|
|||
|
});
|
|||
|
return false;
|
|||
|
}
|
|||
|
}
|
|||
|
}else{
|
|||
|
uni.showToast({
|
|||
|
title: '请至少新增一条报销明细',
|
|||
|
duration: 2000,
|
|||
|
icon:"none"
|
|||
|
});
|
|||
|
return false;
|
|||
|
}
|
|||
|
uni.navigateTo({
|
|||
|
url: "addReimApplyStep"
|
|||
|
});
|
|||
|
},
|
|||
|
deleteItem(index){
|
|||
|
//删除报销的同时,需要保存当前删除的id。
|
|||
|
var thisItem = this.itemList[index];
|
|||
|
if(thisItem && thisItem.id){
|
|||
|
//如果当前存在id就删除,如果不存在,代表是新增的,就不需要保存
|
|||
|
this.deletDetailIds.push(thisItem.id);
|
|||
|
}
|
|||
|
//删除 报销
|
|||
|
this.itemList.splice(index,1);
|
|||
|
|
|||
|
//保存当前修改信息 保存删除信息
|
|||
|
var reimInfo = uni.getStorageSync('reimInfo');
|
|||
|
if(!reimInfo){
|
|||
|
reimInfo = {}
|
|||
|
}
|
|||
|
reimInfo.info = this.itemList;
|
|||
|
reimInfo.deletDetailIds = this.deletDetailIds;
|
|||
|
uni.setStorage({
|
|||
|
key: 'reimInfo',
|
|||
|
data: reimInfo,
|
|||
|
success: function () {
|
|||
|
}
|
|||
|
});
|
|||
|
},
|
|||
|
pickerConfirm(e){
|
|||
|
var n = this.pickerIndex;
|
|||
|
this.itemList[n].typeName = e.label;
|
|||
|
this.itemList[n].type = e.value[0]; //我也不知道为什么这边是数组,可能改picker框架支持多选。
|
|||
|
var reimInfo = uni.getStorageSync('reimInfo');
|
|||
|
if(!reimInfo){
|
|||
|
reimInfo = {}
|
|||
|
}
|
|||
|
reimInfo.info = this.itemList;
|
|||
|
uni.setStorage({
|
|||
|
key: 'reimInfo',
|
|||
|
data: reimInfo,
|
|||
|
success: function () {
|
|||
|
}
|
|||
|
});
|
|||
|
},
|
|||
|
showSinglePicker(index) {
|
|||
|
this.pickerIndex = index;
|
|||
|
this.pickerValueDefault = [0]
|
|||
|
this.$refs.mpvuePicker.show()
|
|||
|
},
|
|||
|
onShowDatePicker(n) { //显示
|
|||
|
this.dateIndex = n;
|
|||
|
this.value_time=this.itemList[n].reiDate;
|
|||
|
this.showPicker = true;
|
|||
|
},
|
|||
|
onSelected(e) { //选择
|
|||
|
this.showPicker = false;
|
|||
|
var _this = this;
|
|||
|
if (e) {
|
|||
|
this.itemList[_this.dateIndex].reiDate= e.value
|
|||
|
//保存当前修改信息
|
|||
|
var reimInfo = uni.getStorageSync('reimInfo');
|
|||
|
if(!reimInfo){
|
|||
|
reimInfo = {}
|
|||
|
}
|
|||
|
reimInfo.info = this.itemList;
|
|||
|
uni.setStorage({
|
|||
|
key: 'reimInfo',
|
|||
|
data: reimInfo,
|
|||
|
success: function () {
|
|||
|
|
|||
|
}
|
|||
|
});
|
|||
|
}
|
|||
|
},
|
|||
|
dataChange(){
|
|||
|
//保存当前修改信息
|
|||
|
var reimInfo = uni.getStorageSync('reimInfo');
|
|||
|
if(!reimInfo){
|
|||
|
reimInfo = {}
|
|||
|
}
|
|||
|
reimInfo.info = this.itemList;
|
|||
|
uni.setStorage({
|
|||
|
key: 'reimInfo',
|
|||
|
data: reimInfo,
|
|||
|
success: function () {
|
|||
|
|
|||
|
}
|
|||
|
});
|
|||
|
},
|
|||
|
//点击暂存和确认提交 需要进行的操作。
|
|||
|
goAddRepair(flag){
|
|||
|
if(flag == 'tj'){
|
|||
|
//提交进行的操作
|
|||
|
var url = '/apis/payApply/saveSbmitChange'
|
|||
|
}else if(flag == 'zc'){
|
|||
|
//暂存进行的操作。
|
|||
|
var url = '/apis/payApply/addAndSaveChange'
|
|||
|
}
|
|||
|
var _this = this;
|
|||
|
}
|
|||
|
},
|
|||
|
onBackPress(options) { //取消默认的返回事件.用来返回上一页时重新加载页面,删除本地缓存的巡检操作
|
|||
|
uni.removeStorageSync('reimInfo');
|
|||
|
uni.navigateTo({
|
|||
|
url: 'reimApply'
|
|||
|
});
|
|||
|
return true;
|
|||
|
|
|||
|
},
|
|||
|
}
|
|||
|
</script>
|
|||
|
<style scoped>
|
|||
|
.step_num {
|
|||
|
display: flex;
|
|||
|
flex-direction: row;
|
|||
|
justify-content: center;
|
|||
|
width: 100%;
|
|||
|
height: 80upx;
|
|||
|
background-color: #fff;
|
|||
|
padding-right: 48upx;
|
|||
|
box-sizing: border-box;
|
|||
|
}
|
|||
|
|
|||
|
.step {
|
|||
|
position: relative;
|
|||
|
font-size: 28upx;
|
|||
|
line-height: 80upx;
|
|||
|
padding-left: 30upx;
|
|||
|
float: left;
|
|||
|
}
|
|||
|
|
|||
|
.step:before {
|
|||
|
position: absolute;
|
|||
|
left: 0px;
|
|||
|
content: '1';
|
|||
|
border: 1px solid #000;
|
|||
|
width: 28upx;
|
|||
|
height: 28upx;
|
|||
|
box-sizing: border-box;
|
|||
|
line-height: 28upx;
|
|||
|
border-radius: 200upx;
|
|||
|
font-size: 20upx;
|
|||
|
text-align: center;
|
|||
|
top: 26upx;
|
|||
|
}
|
|||
|
|
|||
|
.step:after {
|
|||
|
position: absolute;
|
|||
|
content: '';
|
|||
|
width: 60upx;
|
|||
|
height: 2upx;
|
|||
|
background-color: #000;
|
|||
|
top: 40upx;
|
|||
|
left: 200upx;
|
|||
|
}
|
|||
|
|
|||
|
.step2 {
|
|||
|
margin-left: 64upx;
|
|||
|
color: #828282;
|
|||
|
}
|
|||
|
|
|||
|
.step2:before {
|
|||
|
content: '2';
|
|||
|
border: 2upx solid #828282;
|
|||
|
}
|
|||
|
|
|||
|
.step2:after{
|
|||
|
background-color: transparent;
|
|||
|
}
|
|||
|
.itemunit{
|
|||
|
position: absolute;
|
|||
|
right: 0;
|
|||
|
top: 0;
|
|||
|
height: 92upx;
|
|||
|
line-height: 92upx;
|
|||
|
color: #999;
|
|||
|
font-size: 26upx;
|
|||
|
}
|
|||
|
</style>
|