379 lines
		
	
	
		
			10 KiB
		
	
	
	
		
			Vue
		
	
	
	
			
		
		
	
	
			379 lines
		
	
	
		
			10 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("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="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" @click="showMulLinkageThreePicker(idx)">
 | ||
|                   <view class="form-label">
 | ||
|                     <text class="domation mr10">*</text>
 | ||
|                     {{ $t("S_C_26") }}
 | ||
|                   </view>
 | ||
|                   <view class="d-s-c">
 | ||
|                     <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 {
 | ||
|      loading: false,
 | ||
|       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: [],
 | ||
|     };
 | ||
|   },
 | ||
|   mounted() {
 | ||
|     this.getCityData();
 | ||
|   },
 | ||
|   //普通监听
 | ||
|   watch: {
 | ||
|     goalsMeetingVOList: {
 | ||
|       deep: true,
 | ||
|       handler: function (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, "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
 | ||
|         );
 | ||
|       });
 | ||
| 
 | ||
|       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: 6000rpx;
 | ||
|   overflow: hidden;
 | ||
|   transition: all ease 0.8s;
 | ||
| 
 | ||
|   &.closed {
 | ||
|     max-height: 0;
 | ||
|     transition: all ease 0.6s;
 | ||
|   }
 | ||
| }
 | ||
| </style> |