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>
|