311 lines
		
	
	
		
			12 KiB
		
	
	
	
		
			Vue
		
	
	
	
			
		
		
	
	
			311 lines
		
	
	
		
			12 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_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> |