360 lines
14 KiB
Vue
360 lines
14 KiB
Vue
<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_6') }}</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('S_C_62') }}</text>
|
||
<u-icon name="arrow-down" size="28rpx" color="#333"></u-icon>
|
||
</view>
|
||
</picker>
|
||
</view>
|
||
|
||
<view class="prefecture form-group">
|
||
<view class="form-item">
|
||
<view class="form-label">
|
||
<text class="domation mr10">*</text>
|
||
{{ $t('S_C_22') }}
|
||
</view>
|
||
<input class="form-input bg" type="number" v-model="totalAchieve" disabled />
|
||
</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 bg" type="text" v-model="v.cycleValue" disabled />
|
||
</view>
|
||
<view class="pb20">
|
||
<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 bg" 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_28') }}
|
||
</view>
|
||
<input class="form-input bg" 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_25') }}
|
||
</view>
|
||
<input class="form-input bg" 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_70')" />
|
||
<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 bg" 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_31') }}
|
||
</view>
|
||
<view class="flex-1">
|
||
<view class="d-s-c">
|
||
<view class="flex-1">
|
||
<picker mode="date" :value="v.meetingDate" :start="startDate" :end="endDate" @change="bindDateChange1($event,idx)">
|
||
<view class="f26">{{ v.meetingDate || $t('CK_KS_3') }}</view>
|
||
</picker>
|
||
</view>
|
||
<view class="icon iconfont fb icon-icon1"></view>
|
||
</view>
|
||
</view>
|
||
</view>
|
||
<view class="form-item">
|
||
<view class="form-label">
|
||
<text class="domation mr10">*</text>
|
||
{{ $t('S_C_29') }}
|
||
</view>
|
||
<input class="form-input bg" 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,
|
||
};
|
||
},
|
||
computed: {
|
||
startDate() {
|
||
return this.getDate('start');
|
||
},
|
||
endDate() {
|
||
return this.getDate('end');
|
||
}
|
||
},
|
||
mounted() {
|
||
this.getCityData();
|
||
},
|
||
methods: {
|
||
bindDateChange1: function(e,idx) {
|
||
this.goalsMeetingVOList[idx].meetingDate = `${e.detail.value} 00:00:00`;
|
||
},
|
||
getDate(type) {
|
||
const date = new Date();
|
||
let year = date.getFullYear();
|
||
let month = date.getMonth() + 1;
|
||
let day = date.getDate();
|
||
|
||
if (type === 'start') {
|
||
year = year - 60;
|
||
} else if (type === 'end') {
|
||
year = year + 2;
|
||
}
|
||
month = month > 9 ? month : '0' + month;
|
||
day = day > 9 ? day : '0' + day;
|
||
return `${year}-${month}-${day}`;
|
||
},
|
||
clickFold() {
|
||
this.fold = !this.fold;
|
||
},
|
||
getPreData(list) {
|
||
this.goalsMeetingVOList = list;
|
||
},
|
||
resetData(e) {
|
||
this.totalAchieve = e.totalAchieve;
|
||
this.goalsDetailVOList = e.goalsDetailVOList;
|
||
this.changTotalAchieve();
|
||
},
|
||
changTotalAchieve() {
|
||
this.loading = true;
|
||
this.goalsMeetingVOList = [];
|
||
let num = this.totalAchieve;
|
||
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: "",
|
||
})
|
||
}
|
||
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, 'quarter')
|
||
},
|
||
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 && item.remarks
|
||
})
|
||
|
||
if (!goalsFlag) {
|
||
uni.showToast({
|
||
title: `${this.$t('S_C_70')}${this.$t('S_C_23')}`,
|
||
duration: 1000,
|
||
icon: 'none'
|
||
});
|
||
return
|
||
}
|
||
let newArr = this.filterFields(this.goalsMeetingVOList);
|
||
this.$props.data.totalAchieve = this.totalAchieve;
|
||
// this.$props.data.goalsDetailVOList = this.goalsDetailVOList;
|
||
this.$props.data.goalsDetailVOList = [
|
||
{
|
||
cycleKey: "m1",
|
||
cycleValue: "",
|
||
},
|
||
{
|
||
cycleKey: "m2",
|
||
cycleValue: "",
|
||
},
|
||
{
|
||
cycleKey: "m3",
|
||
cycleValue: "",
|
||
},
|
||
{
|
||
cycleKey: "m4",
|
||
cycleValue: "",
|
||
},
|
||
];
|
||
this.$props.data.goalsMeetingVOList = newArr;
|
||
return true
|
||
}
|
||
}
|
||
};
|
||
</script>
|
||
|
||
<style lang="scss" scoped>
|
||
.collspaceContent {
|
||
max-height: 6000rpx;
|
||
overflow: hidden;
|
||
transition: all ease 0.8s;
|
||
|
||
&.closed {
|
||
max-height: 0;
|
||
transition: all ease 0.6s;
|
||
}
|
||
}
|
||
</style> |