| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151 |
- <template>
- <div></div>
- </template>
- <script setup>
- import { useRoute, useRouter } from "vue-router";
- import { useStore } from "vuex";
- import { SET_TOKEN, SET_USER_ROLES, SET_USER_CUR_ROLE } from "@/store/modules/app/type";
- import { onMounted } from "vue";
- const router = useRouter();
- const route = useRoute();
- const store = useStore();
- let userId = route.query.userId;
- const resolveFarmPointWkt = (farm) => {
- if (farm.geom_wkt && /^POINT\s*\(/i.test(String(farm.geom_wkt).trim())) {
- return farm.geom_wkt;
- }
- if (farm.farm_location && /^POINT\s*\(/i.test(String(farm.farm_location).trim())) {
- return farm.farm_location;
- }
- return farm.geom_wkt || farm.wkt || "";
- };
- const normalizeFarm = (farm) => {
- const id = farm.farm_id ?? farm.id;
- return {
- ...farm,
- id,
- name: farm.farm_name || farm.name,
- wkt: resolveFarmPointWkt(farm),
- rawAddress: farm.farm_address || farm.city || "",
- };
- };
- const hasSelectedFarm = (farm) => {
- if (!farm || typeof farm !== "object") return false;
- return !!(farm.farm_id || farm.id || farm.farm_name || farm.name);
- };
- const saveSelectedFarm = (farm) => {
- localStorage.setItem("selectedFarmId", farm.id);
- localStorage.setItem("selectedFarmName", farm.name || "");
- localStorage.setItem("selectedFarmPoint", farm.wkt || "");
- localStorage.setItem("selectedFarmData", JSON.stringify(farm));
- };
- /** 拉取农场列表:有数据则恢复缓存选中或默认第一项;无数据仍继续进入目标页 */
- const resolveFarmsAfterLogin = async () => {
- const id = userId || localStorage.getItem("MINI_USER_ID");
- if (!id) return;
- try {
- const res = await VE_API.questionnaire.getFarms({ id });
- const list = Array.isArray(res?.data) ? res.data : [];
- if (!list.length) {
- // 无农场清掉旧选中缓存,避免长势报告仍按有农场走接口
- localStorage.removeItem("selectedFarmId");
- localStorage.removeItem("selectedFarmName");
- localStorage.removeItem("selectedFarmPoint");
- localStorage.removeItem("selectedFarmData");
- return;
- }
- let cached = null;
- try {
- cached = JSON.parse(localStorage.getItem("selectedFarmData") || "null");
- } catch {
- cached = null;
- }
- const farm = hasSelectedFarm(cached) ? normalizeFarm(cached) : normalizeFarm(list[0]);
- saveSelectedFarm(farm);
- } catch (e) {
- console.warn("[dev_login] getFarms failed", e);
- }
- };
- onMounted(async () => {
- const token = route.query.token;
- let targetUrl = route.query.targetUrl ? route.query.targetUrl : "/growth_report";
- // 先从 session 获取保存的角色
- let savedRole = null;
- if (!token) {
- const { data } = await VE_API.system.devLogin({ userId: userId });
- store.dispatch(`app/${SET_TOKEN}`, data.token);
- store.dispatch(`app/${SET_USER_ROLES}`, data.roles);
- const sessionRes = await VE_API.mine.getSessionStore({ key: "cur_role" });
- if (sessionRes && sessionRes.data) {
- savedRole = sessionRes.data.val;
- }
- store.dispatch(`app/${SET_USER_CUR_ROLE}`, data.roles[data.roles.length - 1]);
- localStorage.setItem("localUserInfo", JSON.stringify(data));
- }
- // 存userId
- let pointXy = route.query.point.split(",");
- // 刷新后仍保留id和point
- localStorage.setItem("MINI_USER_ID", userId);
- route.query?.userInfo && localStorage.setItem("localUserInfo", route.query.userInfo);
- if (route.query.roles) {
- const roles = JSON.parse(route.query.roles);
- store.dispatch(`app/${SET_USER_ROLES}`, roles);
- const sessionRes = await VE_API.mine.getSessionStore({ key: "cur_role" });
- if (sessionRes && sessionRes.data) {
- savedRole = sessionRes.data.val;
- }
- store.dispatch(`app/${SET_USER_CUR_ROLE}`, roles[roles.length - 1]);
- }
- localStorage.setItem("MINI_USER_LOCATION", route.query.point);
- localStorage.setItem("MINI_USER_LOCATION_POINT", `POINT(${pointXy[0]} ${pointXy[1]})`);
- store.commit("home/SET_MINI_USER_LOCATION", route.query.point);
- store.commit("home/SET_MINI_USER_ID", userId);
- store.commit("home/SET_MINI_USER_LOCATION_POINT", `POINT(${pointXy[0]} ${pointXy[1]})`);
- await resolveFarmsAfterLogin();
- router.push(`${targetUrl}?miniJson=${JSON.stringify(route.query)}`);
- });
- const getFarmList = async (callback) => {
- localStorage.removeItem("selectedFarmId");
- localStorage.removeItem("selectedFarmName");
- const { data } = await VE_API.farm.userFarmSelectOption();
- if (data && data.length > 0) {
- const defalutFarm = data[0];
- localStorage.setItem("selectedFarmId", defalutFarm.id);
- localStorage.setItem("selectedFarmName", defalutFarm.name);
- localStorage.setItem("selectedFarmPoint", defalutFarm.point);
- } else {
- callback();
- }
- };
- // 获取用户是否为托管农户,并缓存 USER_TYPE
- const fetchUserType = async () => {
- const { data } = await VE_API.farm.userFarmSelectOption({ userType: 2 });
- if (Array.isArray(data) && data.length > 0) {
- localStorage.setItem("USER_TYPE", "2");
- } else {
- localStorage.setItem("USER_TYPE", "1");
- }
- };
- </script>
- <style scoped></style>
|