Browse Source

✨ feat: 适配ivpn

Pchen. 1 month ago
parent
commit
1fa9944f61

+ 2 - 1
src/api/lepao.js

@@ -23,7 +23,8 @@ export function addAccount (parameter) {
   return request({
     url: api.Account,
     method: 'post',
-    data: parameter
+    data: parameter,
+    timeout: 130000
   })
 }
 

+ 20 - 3
src/pages/admin/lepaoAccount/accountList.vue

@@ -200,6 +200,13 @@
             <a-form-item field="student_num" label="学号">
                 <a-input v-model="form.student_num" placeholder="账号所有者学号,填写错误将无法登录" />
             </a-form-item>
+            <a-form-item field="jw_password" label="教务密码" :required="!form.id">
+                <a-input-password v-model="form.jw_password" placeholder="统一身份认证密码(与学号对应)" allow-clear />
+                <template #extra>
+                    <span v-if="!form.id">新绑定必填,将写入教务账号并校验 WebVPN。</span>
+                    <span v-else>留空不修改密码;填写则更新并重新校验。</span>
+                </template>
+            </a-form-item>
             <a-form-item field="notice_type" label="通知方式">
                 <a-radio-group v-model="form.notice_type">
                     <a-radio value="email"><icon-email /> 邮件</a-radio>
@@ -329,6 +336,7 @@ const ok_loading = ref(false)
 const form = reactive({
     id: null,
     student_num: '',
+    jw_password: '',
     email: '',
     area: '',
     notice_type: 'email',
@@ -509,6 +517,7 @@ const editAccount = (item) => {
     if (item) {
         form.id = item.id
         form.student_num = item.student_num
+        form.jw_password = ''
         form.email = item.email
         form.area = item.area
         form.auto_run = item.auto_run
@@ -520,6 +529,7 @@ const editAccount = (item) => {
     } else {
         form.id = null
         form.student_num = ''
+        form.jw_password = ''
         form.auto_run = 1
         form.auto_time = 7
         form.target_count = 30
@@ -545,16 +555,23 @@ const handleBeforeOk = async (done) => {
             return false
         }
 
+        const jwPlain = (form.jw_password || '').trim()
+        if (!form.id && !jwPlain) {
+            Message.error('请填写教务系统密码(统一身份认证密码)')
+            return false
+        }
+
         const emailRegex = /^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/
         if (form.notice_type === 'email' && !emailRegex.test(email)) {
             Message.error('请检查邮箱格式是否正确')
             return false
         }
 
-        let data = {
-            ...form
+        const data = { ...form }
+        delete data.jw_password
+        if (jwPlain) {
+            data.jw_password = btoa(jwPlain)
         }
-
         const res = await addAccount(data)
         if (!res || res.code !== 0) {
             Notification.error({

+ 20 - 3
src/pages/lepao/accountList/index.vue

@@ -302,6 +302,13 @@
       <a-form-item field="student_num" label="学号">
         <a-input v-model="form.student_num" placeholder="账号所有者学号,填写错误将无法登录" allow-clear />
       </a-form-item>
+      <a-form-item field="jw_password" label="教务密码" :required="!form.id">
+        <a-input-password v-model="form.jw_password" placeholder="统一身份认证密码(登录名与上方学号相同)" allow-clear />
+        <template #extra>
+          <span v-if="!form.id">新绑定必填;服务端将校验并通过 WebVPN 访问乐跑接口。</span>
+          <span v-else>留空则不修改已保存的教务密码;填写则更新并重新校验。</span>
+        </template>
+      </a-form-item>
       <a-form-item field="notice_type" label="通知方式">
         <a-radio-group v-model="form.notice_type">
           <a-radio value="email"><icon-email /> 邮件</a-radio>
@@ -510,6 +517,7 @@ const autoFillText = ref('')
 const form = reactive({
   id: null,
   student_num: '',
+  jw_password: '',
   email: '',
   area: '',
   auto_time: -1,
@@ -603,6 +611,7 @@ const editAccount = (item) => {
   if (item) {
     form.id = item.id
     form.student_num = item.student_num
+    form.jw_password = ''
     form.email = item.email
     form.area = item.area
     form.auto_time = item.auto_time
@@ -615,6 +624,7 @@ const editAccount = (item) => {
   } else {
     form.id = null
     form.student_num = ''
+    form.jw_password = ''
     form.email = ''
     form.auto_run = 1
     form.auto_time = -1
@@ -643,16 +653,23 @@ const handleBeforeOk = async (done) => {
       return false
     }
 
+    const jwPlain = (form.jw_password || '').trim()
+    if (!form.id && !jwPlain) {
+      Message.error('请填写教务系统密码(统一身份认证密码)')
+      return false
+    }
+
     const emailRegex = /^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/
     if (notice_type === 'email' && !emailRegex.test(email)) {
       Message.error('请检查邮箱格式是否正确')
       return false
     }
 
-    let data = {
-      ...form
+    const data = { ...form }
+    delete data.jw_password
+    if (jwPlain) {
+      data.jw_password = btoa(jwPlain)
     }
-
     const res = await addAccount(data)
     if (!res || res.code !== 0) {
       Notification.error({