index.vue 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135
  1. <template>
  2. <div
  3. class="absolute top-0 right-0 bottom-0 left-0 bg-[#2d3a4b] flex justify-center items-center overflow-auto"
  4. >
  5. <n-config-provider :theme="darkTheme">
  6. <n-card class="w-[500px] bg-transparent" :bordered="false">
  7. <template #header>
  8. <h2 class="text-center">冷链验证报告生成系统</h2>
  9. </template>
  10. <n-form
  11. ref="formRef"
  12. :rules="rules"
  13. :model="formValue"
  14. size="large"
  15. label-placement="left"
  16. >
  17. <n-form-item path="username">
  18. <n-input v-model:value="formValue.username" :maxlength="8">
  19. <template #prefix>
  20. <n-icon :component="UserOutlined" />
  21. </template>
  22. </n-input>
  23. </n-form-item>
  24. <n-form-item path="password">
  25. <n-input
  26. v-model:value="formValue.password"
  27. type="password"
  28. show-password-on="click"
  29. :maxlength="20"
  30. >
  31. <template #prefix>
  32. <n-icon :component="LockOutlined" />
  33. </template>
  34. </n-input>
  35. </n-form-item>
  36. <n-form-item path="role">
  37. <n-select
  38. v-model:value="formValue.role"
  39. :options="generalOptions"
  40. />
  41. </n-form-item>
  42. <n-form-item>
  43. <n-button type="primary" block @click="handleLogin"
  44. ><span class="text-white">立即登录</span></n-button
  45. >
  46. </n-form-item>
  47. </n-form>
  48. </n-card>
  49. </n-config-provider>
  50. </div>
  51. </template>
  52. <script setup>
  53. import { UserOutlined, LockOutlined } from '@vicons/antd';
  54. import { login } from '@/api';
  55. import md5 from 'md5';
  56. import { setToken } from '@/utils/storage/sessionToken';
  57. import { darkTheme } from 'naive-ui';
  58. import { openWay } from "@/constant/openWay";
  59. const formRef = ref(null);
  60. const router = useRouter();
  61. const message = useMessage();
  62. const notification = useNotification();
  63. //先判断本地能否走通
  64. const openWayApi = async ()=>{
  65. const resIt = await openWay({})
  66. if(resIt.data.Code==200){//本地能走通用本地
  67. localStorage.setItem('ping',true)
  68. }else{//本地不能走通用线上
  69. localStorage.setItem('ping',false)
  70. }
  71. console.log('11',resIt)
  72. }
  73. // 验证表项的规则
  74. const rules = {
  75. username: { required: true, message: '不能为空', trigger: 'blur' },
  76. password: { required: true, message: '不能为空', trigger: 'blur' },
  77. role: { required: true, message: '不能为空', trigger: ['blur', 'change'] },
  78. };
  79. // 登录表单
  80. const formValue = reactive({
  81. username: '',
  82. password: '',
  83. role: '管理员',
  84. });
  85. // 角色列表
  86. const generalOptions = ['管理员', '用户'].map((v) => ({
  87. label: v,
  88. value: v,
  89. }));
  90. // 登录
  91. const handleLogin = async () => {
  92. formRef.value.validate(async (errors) => {
  93. if (!errors) {
  94. const { data: res } = await login(
  95. {
  96. bzd_username: formValue.username,
  97. bzd_password: md5(formValue.password),
  98. },
  99. formValue.role
  100. );
  101. if (res.Code === 200) {
  102. openWayApi()
  103. router.replace('/');
  104. localStorage.setItem('keepAlive',JSON.stringify({T_name:'',page:1}))//需要调用的页码
  105. notification.success({
  106. content: `你好,${formValue.username}`,
  107. title: '登录成功',
  108. duration: 2500,
  109. keepAliveOnHover: true,
  110. });
  111. setToken(res.Data);
  112. window.sessionStorage.setItem('username', formValue.username);
  113. }
  114. } else {
  115. message.error('验证失败');
  116. }
  117. });
  118. };
  119. </script>
  120. <style lang="scss" scoped></style>