web-africa-h5/pages/user/goal/monthly/forms/session.vue

311 lines
12 KiB
Vue
Raw Normal View History

2025-03-21 14:49:01 +08:00
<template>
<view class="bg-white br12 p-0-20">
<view class="d-b-c p-30-0 border-b">
<view class="f28 fb">{{ $t('ENU_G_C_5') }}</view>
<view @click="clickFold">
<u-icon name="arrow-down" size="28rpx" color="#999999" v-if="fold"></u-icon>
<u-icon name="arrow-right" size="28rpx" color="#999999" v-else></u-icon>
</view>
</view>
<view class="collspaceContent" :class="{ 'closed': !fold }">
<view class="d-b-c p-20-0 border-b">
<view class="f28 gray3">{{ $t('S_C_7') }}{{ $t('S_C_68') }}</view>
<picker :range="monthList" @change="changeMonth">
<view class="common picker">
<text>{{ monthList[monthIndex] }}{{ $t('ENU_SETTLE_P_3') }}</text>
<u-icon name="arrow-down" size="28rpx" color="#333"></u-icon>
</view>
</picker>
</view>
<view class="prefecture form-group">
<view class="pb20">
<view class="form-item">
<view class="form-label">
<text class="domation mr10">*</text>
{{ $t('S_C_22') }}
</view>
<input class="form-input" type="number" v-model="totalAchieve" :placeholder="$t('S_C_70')"
@input="changTotalAchieve" />
</view>
<view class="form-item">
<view class="form-label">
{{ $t('S_C_9') }}
</view>
<view class="flex-1">
<text class="domation mr10">*</text>
<text class="f28">{{ $t('ENU_G_C_5') }}</text>
</view>
</view>
<view class="form-item" v-for="(v, idx) in goalsDetailVOList">
<view class="form-label">
{{ $t(transformZh(idx + 1)) }}
</view>
<input class="form-input" type="text" v-model="v.cycleValue" :placeholder="$t('S_C_70')" />
</view>
<template v-if="!loading">
<view class="c-f2 p20" v-for="(v, idx) in goalsMeetingVOList" :key="idx">
<view class="prefecture form-group">
<view class="form-item">
<view class="form-label">
<text class="domation mr10">*</text>
{{ $t('S_C_24') }}
</view>
<input class="form-input" type="text" value="" v-model="v.meetingType"
:placeholder="$t('S_C_70')" />
</view>
<view class="form-item">
<view class="form-label">
<text class="domation mr10">*</text>
{{ $t('S_C_25') }}
</view>
<input class="form-input" type="text" value="" v-model="v.meetingNumber"
:placeholder="$t('S_C_70')" />
</view>
<view class="form-item">
<view class="form-label">
<text class="domation mr10">*</text>
{{ $t('S_C_26') }}
</view>
<view class="d-s-c" @click="showMulLinkageThreePicker(idx)">
<input class="form-input" type="text" value="" v-model="v.selectCity" disabled
:placeholder="$t('S_C_30')" />
<view class="icon iconfont fb icon-icon1"></view>
</view>
</view>
<view class="form-item">
<view class="form-label">
<text class="domation mr10">*</text>
{{ $t('S_C_27') }}
</view>
<input class="form-input" type="text" value="" v-model="v.address"
:placeholder="$t('S_C_70')" />
</view>
<view class="form-item">
<view class="form-label">
<text class="domation mr10">*</text>
{{ $t('S_C_28') }}
</view>
<input class="form-input" type="text" value="" v-model="v.meetingTheme"
:placeholder="$t('S_C_70')" />
</view>
<view class="form-item">
<view class="form-label">
<text class="domation mr10">*</text>
{{ $t('S_C_29') }}
</view>
<input class="form-input" type="text" value="" v-model="v.remarks"
:placeholder="$t('S_C_70')" />
</view>
</view>
</view>
</template>
</view>
</view>
</view>
<mpvue-city-picker v-if="is_load" ref="mpvueCityPicker" :province="province" :city="city" :area="area"
:pickerValueDefault="cityPickerValueDefault" @onConfirm="onConfirm"></mpvue-city-picker>
</view>
</template>
<script>
import utils from '@/common/utils.js';
import mpvueCityPicker from '@/components/mpvue-citypicker/mpvueCityPicker.vue';
export default {
components: {
mpvueCityPicker
},
props: ['data', 'monthList', 'monthIndex'],
data() {
return {
fold: false,
currentAraeIdx: "",
recProvince: 0,
recCity: 0,
recCounty: 0,
is_load: false,
province: [],
city: [],
area: [],
cityPickerValueDefault: [0, 0, 0],
totalAchieve: "",
goalsDetailVOList: [
{
cycleKey: "m1",
cycleValue: "",
},
{
cycleKey: "m2",
cycleValue: "",
},
{
cycleKey: "m3",
cycleValue: "",
},
{
cycleKey: "m4",
cycleValue: "",
},
],
goalsMeetingVOList: [],
loading: false,
};
},
mounted() {
this.getCityData();
},
//普通监听
watch: {
goalsMeetingVOList: {
deep: true,
handler: function (n, o) {
console.log(n,o)
this.$emit('chang-file-data', n)
},
immediate: true
}
},
methods: {
clickFold() {
this.fold = !this.fold;
},
changTotalAchieve(e) {
this.loading = true;
let num = e.detail.value;
this.goalsMeetingVOList = [];
if (num) {
num = Number(num);
}
for (let i = 0; i < num; i++) {
this.goalsMeetingVOList.push({
meetingType: "",
meetingNumber: "",
meetingTheme: "",
pkProvince: "",
pkCity: "",
pkCounty: "",
areaAddress: [],
address: [],
meetingDate: "",
selectCity: "",
remarks: "",
})
}
let req = {
totalAchieve: num,
goalsDetailVOList: this.goalsDetailVOList,
}
this.$emit("chang-conference-num", req)
this.loading = false;
},
getCityData() {
let self = this;
self._get('system/api/area/tree', {}, function (res) {
self.province = res.data;
self.is_load = true;
});
},
onConfirm(event) {
let obj = {
selectCity: event.label,
pkProvince: event.cityCode[0],
pkCity: event.cityCode[1],
pkCounty: event.cityCode[2],
areaAddress: event.cityCode,
}
let addData = Object.assign(this.goalsMeetingVOList[this.currentAraeIdx], obj)
this.$set(this.goalsMeetingVOList, this.currentAraeIdx, addData);
},
changeMonth(e) {
this.$emit('change-month', e)
},
transformZh(index) {
return utils.numberToChinese(index)
},
showMulLinkageThreePicker(index) {
this.currentAraeIdx = index;
this.$refs.mpvueCityPicker.show();
},
filterFields(arr) {
var newObj = {};
var newArr = [];
arr.forEach(function (item, i) {
for (var key in item) {
if (key != 'selectCity') {
newObj[key] = item[key];
}
}
newArr.push(newObj);
newObj = {};
});
return newArr
},
submit() {
if (!this.totalAchieve) {
uni.showToast({
title: `${this.$t('S_C_70')}${this.$t('S_C_22')}`,
duration: 1000,
icon: 'none'
});
return
}
if (this.goalsDetailVOList.length < 1) {
uni.showToast({
title: `${this.$t('S_C_70')}${this.$t('S_C_23')}`,
duration: 1000,
icon: 'none'
});
return
}
let flag = this.goalsDetailVOList.every((item) => {
return item.cycleValue
})
if (!flag) {
uni.showToast({
title: `${this.$t('S_C_70')}${this.$t('S_C_23')}`,
duration: 1000,
icon: 'none'
});
return
}
let goalsFlag = this.goalsMeetingVOList.every((item) => {
return item.meetingType && item.meetingNumber && item.pkProvince && item.pkCity && item.pkCounty && item.address && item.meetingTheme
})
if (!goalsFlag) {
uni.showToast({
title: `${this.$t('S_C_70')}${this.$t('S_C_23')}${this.$t('MN_F_T_144')}`,
duration: 1000,
icon: 'none'
});
return
}
let newArr = this.filterFields(this.goalsMeetingVOList);
this.$props.data.totalAchieve = this.totalAchieve;
this.$props.data.goalsDetailVOList = JSON.parse(JSON.stringify(this.goalsDetailVOList));;
this.$props.data.goalsMeetingVOList = JSON.parse(JSON.stringify(newArr));;
return true
}
}
};
</script>
<style lang="scss" scoped>
.collspaceContent {
max-height: 5000rpx;
overflow: hidden;
transition: all ease 0.8s;
&.closed {
max-height: 0;
transition: all ease 0.6s;
}
}
</style>