<template>
  <van-nav-bar
    title="信息上报中心"
    left-text=""
    left-arrow
    @click-left="onClickLeft"
  />
  <van-loading size="16px" v-if="isLoading">加载中...</van-loading>
  <div class="main" v-if="!isLoading">
    <p class="title">私设聚会点上报</p>
    <div class="formArea">
      <p class="miniTitle">基础信息</p>
      <van-cell-group>
        <van-field
          v-model="inputForm.placeSelectName"
          center
          readonly
          label="地点:"
          placeholder="请填写参加地点"
          input-align="right"
          right-icon="arrow-down"
          @click="showArea = true"
        />
        <van-popup v-model:show="showArea" round position="bottom">
          <van-cascader
            v-model="cascaderValue"
            title="请选择所在地区"
            :options="options"
            @close="showArea = false"
            @finish="onFinish"
            :field-names="fieldNames"
          />
        </van-popup>
      </van-cell-group>
      <van-cell-group>
        <van-field
          v-model="inputForm.placeDel"
          center
          label="详细地址:"
          placeholder="请填写具体地址"
          input-align="right"
          right-icon="location"
        />
      </van-cell-group>

      <van-cell-group>
        <van-field
          v-model="inputForm.frequency"
          center
          label="频次:"
          placeholder="请填写频次"
          input-align="right"
          type="digit"
        />
      </van-cell-group>
      <van-cell-group>
        <van-field
          v-model="inputForm.partyTime"
          center
          readonly
          label="时间:"
          placeholder="请选择时间"
          input-align="right"
          right-icon="arrow-down"
          @click="showAct = true"
        />
        <van-popup v-model:show="showAct" round position="bottom">
          <van-picker-group
            :tabs="['选择日期', '选择时间']"
            next-step-text="下一步"
            @confirm="getTime"
            @cancel="showAct = false"
          >
            <van-date-picker v-model="currentDate" />
            <van-time-picker
              v-model="currentTime"
              :columns-type="columnsType"
            />
          </van-picker-group>
        </van-popup>
      </van-cell-group>
      <van-cell-group>
        <van-field
          v-model="inputForm.relatedPersons.name"
          center
          required
          label="相关人:"
          placeholder="请选择相关人"
          input-align="right"
          right-icon="arrow-down"
          @click="showPerson = true"
        />
        <van-dialog
          v-model:show="showPerson"
          title="选择人员"
          show-cancel-button
          @confirm="reselected"
        >
          <person-list @selected="selected" :type="1"></person-list>
        </van-dialog>
      </van-cell-group>
      <van-cell-group>
        <div class="rowTextArea">
          <van-field
            v-model="inputForm.into"
            center
            rows="2"
            type="textarea"
            label="内容:"
            label-align="top"
          />
        </div>
      </van-cell-group>
    </div>
    <div class="subbtn">
      <van-button type="primary">提交</van-button>
      <van-button type="default" hairline>取消</van-button>
    </div>
  </div>
</template>
  
  <script>
import { ref, onMounted } from "vue";
import personList from "../personList.vue";
import tools from "@/api/sys/tools";
import PrivatePartyPointService from "@/api/privateparty/PrivatePartyPointService";
import UserManage from "@/api/user/UserManage";
import { useRoute } from "vue-router";
export default {
  components: { personList },
  setup() {
    // 加载
    let isLoading = ref(true);
    // 返回
    const onClickLeft = () => {
      history.back();
    };
    // 私设聚会点信息
    let inputForm = ref({
      id: "",
      place: "320900",
      placeSelectName: "盐城市",
      placeSelectType3: "320900",
      placeSelectType4: "",
      placeSelectType5: "",
      placeSelectType6: "",
      placeDel: "",
      frequency: "",
      partyTime: "",
      relatedPersons: {
        id: "",
        name: "",
      },
      content: "",
      state: "0",
      assessment: "0",
    });
    // 根据路由初始化
    let route = useRoute();
    onMounted(() => {
      if (route.query.id) {
        new PrivatePartyPointService()
          .queryById(route.query.id)
          .then((data) => {
            inputForm.value = data;
            let ids = data.relatedPersons.id.split(",");
            inputForm.value.relatedPersons.name = "";
            ids.forEach((item) => {
              new UserManage().queryById(item).then((data) => {
                inputForm.value.relatedPersons.name += data.name + ",";
              });
            });
            isLoading.value = false;
          });
      } else {
        isLoading.value = false;
      }
    });
    // 获取活动时间
    let showAct = ref(false);
    let currentDate = ref(["" + new Date().getFullYear(), "01", "01"]);
    let currentTime = ref(["00", "00"]);
    const columnsType = ["hour", "minute", "second"];
    const getTime = () => {
      showAct.value = false;
      inputForm.value.partyTime = `${currentDate.value.join(
        "-"
      )} ${currentTime.value.join(":")}`;
    };
    // 相关人
    let showPerson = ref(false);
    let list = {
      value: [],
      type: "",
    };
    const selected = (val, type) => {
      list.value = val;
      list.type = type;
    };
    const reselected = () => {
      let ids = [];
      let names = [];
      if (list.type == 1) {
        list.value.forEach((item) => {
          ids.push(item.id);
          names.push(item.name);
        });
        inputForm.value.relatedPersons.id = ids.join(",");
        inputForm.value.relatedPersons.name = names.join(",");
      }
    };
    // 地区选择
    let showArea = ref(false);
    const cascaderValue = ref("");
    const fieldNames = {
      text: "name",
      value: "code",
      children: "children",
    };
    // 选项列表，children 代表子选项，支持多级嵌套
    let options = ref([]);
    new tools().treeData().then((res) => {
      options.value.push(res[0]);
    });
    // 全部选项选择完毕后，会触发 finish 事件
    const onFinish = ({ selectedOptions }) => {
      showArea.value = false;
      inputForm.value.placeSelectName = selectedOptions
        .map((option) => option.name)
        .join("/");
    };
    return {
      isLoading,
      inputForm,
      // 活动时间
      showAct,
      currentDate,
      currentTime,
      columnsType,
      getTime,
      // 返回
      onClickLeft,
      // 人员选择
      showPerson,
      selected,
      reselected,
      // 地区选择
      showArea,
      fieldNames,
      options,
      onFinish,
      cascaderValue,
    };
  },
};
</script>
  
  <style scoped>
* {
  margin: 0;
  padding: 0;
}
.main {
  background: #fff;
}
.main p {
  height: 40px;
  line-height: 40px;
  color: #36a7f3;
  border-bottom: 1px solid #eee;
}
.title {
  font-size: 20px;
  font-weight: 700;
  padding-left: 20px;
}
.miniTitle {
  font-size: 16px;
}
.formArea {
  padding: 0px 20px;
}
.formArea .van-cell-group .van-field__label {
  height: 40px;
}
.formArea .van-cell-group .van-cell {
  line-height: 40px;
}
.van-cell__value .van-field__right-icon .van-icon-location {
  color: #36a7f3 !important;
}
.rowTextArea::v-deep .van-field__value {
  width: 98%;
  border: 2px solid #ccc;
  border-radius: 10px;
}
.rowTextArea::v-deep .van-cell {
  display: flow-root;
}
.subbtn {
  margin: 20px;
  text-align: center;
}
.subbtn .van-button {
  width: 40%;
  margin: 5px;
}
.van-uploader .van-button {
  border: none;
  color: #36a7f3;
  top: -4px;
}
.van-dialog {
  width: 80%;
  top: 50%;
}
.van-loading {
  text-align: center;
  margin-top: 20px;
}
</style>