dev_login.vue 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151
  1. <template>
  2. <div></div>
  3. </template>
  4. <script setup>
  5. import { useRoute, useRouter } from "vue-router";
  6. import { useStore } from "vuex";
  7. import { SET_TOKEN, SET_USER_ROLES, SET_USER_CUR_ROLE } from "@/store/modules/app/type";
  8. import { onMounted } from "vue";
  9. const router = useRouter();
  10. const route = useRoute();
  11. const store = useStore();
  12. let userId = route.query.userId;
  13. const resolveFarmPointWkt = (farm) => {
  14. if (farm.geom_wkt && /^POINT\s*\(/i.test(String(farm.geom_wkt).trim())) {
  15. return farm.geom_wkt;
  16. }
  17. if (farm.farm_location && /^POINT\s*\(/i.test(String(farm.farm_location).trim())) {
  18. return farm.farm_location;
  19. }
  20. return farm.geom_wkt || farm.wkt || "";
  21. };
  22. const normalizeFarm = (farm) => {
  23. const id = farm.farm_id ?? farm.id;
  24. return {
  25. ...farm,
  26. id,
  27. name: farm.farm_name || farm.name,
  28. wkt: resolveFarmPointWkt(farm),
  29. rawAddress: farm.farm_address || farm.city || "",
  30. };
  31. };
  32. const hasSelectedFarm = (farm) => {
  33. if (!farm || typeof farm !== "object") return false;
  34. return !!(farm.farm_id || farm.id || farm.farm_name || farm.name);
  35. };
  36. const saveSelectedFarm = (farm) => {
  37. localStorage.setItem("selectedFarmId", farm.id);
  38. localStorage.setItem("selectedFarmName", farm.name || "");
  39. localStorage.setItem("selectedFarmPoint", farm.wkt || "");
  40. localStorage.setItem("selectedFarmData", JSON.stringify(farm));
  41. };
  42. /** 拉取农场列表:有数据则恢复缓存选中或默认第一项;无数据仍继续进入目标页 */
  43. const resolveFarmsAfterLogin = async () => {
  44. const id = userId || localStorage.getItem("MINI_USER_ID");
  45. if (!id) return;
  46. try {
  47. const res = await VE_API.questionnaire.getFarms({ id });
  48. const list = Array.isArray(res?.data) ? res.data : [];
  49. if (!list.length) {
  50. // 无农场清掉旧选中缓存,避免长势报告仍按有农场走接口
  51. localStorage.removeItem("selectedFarmId");
  52. localStorage.removeItem("selectedFarmName");
  53. localStorage.removeItem("selectedFarmPoint");
  54. localStorage.removeItem("selectedFarmData");
  55. return;
  56. }
  57. let cached = null;
  58. try {
  59. cached = JSON.parse(localStorage.getItem("selectedFarmData") || "null");
  60. } catch {
  61. cached = null;
  62. }
  63. const farm = hasSelectedFarm(cached) ? normalizeFarm(cached) : normalizeFarm(list[0]);
  64. saveSelectedFarm(farm);
  65. } catch (e) {
  66. console.warn("[dev_login] getFarms failed", e);
  67. }
  68. };
  69. onMounted(async () => {
  70. const token = route.query.token;
  71. let targetUrl = route.query.targetUrl ? route.query.targetUrl : "/growth_report";
  72. // 先从 session 获取保存的角色
  73. let savedRole = null;
  74. if (!token) {
  75. const { data } = await VE_API.system.devLogin({ userId: userId });
  76. store.dispatch(`app/${SET_TOKEN}`, data.token);
  77. store.dispatch(`app/${SET_USER_ROLES}`, data.roles);
  78. const sessionRes = await VE_API.mine.getSessionStore({ key: "cur_role" });
  79. if (sessionRes && sessionRes.data) {
  80. savedRole = sessionRes.data.val;
  81. }
  82. store.dispatch(`app/${SET_USER_CUR_ROLE}`, data.roles[data.roles.length - 1]);
  83. localStorage.setItem("localUserInfo", JSON.stringify(data));
  84. }
  85. // 存userId
  86. let pointXy = route.query.point.split(",");
  87. // 刷新后仍保留id和point
  88. localStorage.setItem("MINI_USER_ID", userId);
  89. route.query?.userInfo && localStorage.setItem("localUserInfo", route.query.userInfo);
  90. if (route.query.roles) {
  91. const roles = JSON.parse(route.query.roles);
  92. store.dispatch(`app/${SET_USER_ROLES}`, roles);
  93. const sessionRes = await VE_API.mine.getSessionStore({ key: "cur_role" });
  94. if (sessionRes && sessionRes.data) {
  95. savedRole = sessionRes.data.val;
  96. }
  97. store.dispatch(`app/${SET_USER_CUR_ROLE}`, roles[roles.length - 1]);
  98. }
  99. localStorage.setItem("MINI_USER_LOCATION", route.query.point);
  100. localStorage.setItem("MINI_USER_LOCATION_POINT", `POINT(${pointXy[0]} ${pointXy[1]})`);
  101. store.commit("home/SET_MINI_USER_LOCATION", route.query.point);
  102. store.commit("home/SET_MINI_USER_ID", userId);
  103. store.commit("home/SET_MINI_USER_LOCATION_POINT", `POINT(${pointXy[0]} ${pointXy[1]})`);
  104. await resolveFarmsAfterLogin();
  105. router.push(`${targetUrl}?miniJson=${JSON.stringify(route.query)}`);
  106. });
  107. const getFarmList = async (callback) => {
  108. localStorage.removeItem("selectedFarmId");
  109. localStorage.removeItem("selectedFarmName");
  110. const { data } = await VE_API.farm.userFarmSelectOption();
  111. if (data && data.length > 0) {
  112. const defalutFarm = data[0];
  113. localStorage.setItem("selectedFarmId", defalutFarm.id);
  114. localStorage.setItem("selectedFarmName", defalutFarm.name);
  115. localStorage.setItem("selectedFarmPoint", defalutFarm.point);
  116. } else {
  117. callback();
  118. }
  119. };
  120. // 获取用户是否为托管农户,并缓存 USER_TYPE
  121. const fetchUserType = async () => {
  122. const { data } = await VE_API.farm.userFarmSelectOption({ userType: 2 });
  123. if (Array.isArray(data) && data.length > 0) {
  124. localStorage.setItem("USER_TYPE", "2");
  125. } else {
  126. localStorage.setItem("USER_TYPE", "1");
  127. }
  128. };
  129. </script>
  130. <style scoped></style>