Sfoglia il codice sorgente

feat: 调整接口

haifeng.zhang 4 giorni fa
parent
commit
b5e38ba021

+ 3 - 1
package.json

@@ -60,6 +60,7 @@
     "axios": "^1.7.2",
     "dayjs": "^1.11.13",
     "gsap": "^3.12.5",
+    "js-md5": "^0.8.3",
     "pinia": "^2.1.7",
     "swiper": "^11.1.8",
     "vant": "^4.9.2",
@@ -86,5 +87,6 @@
     "unplugin-vue-components": "^0.27.3",
     "vite": "5.2.8",
     "vue-tsc": "^1.0.24"
-  }
+  },
+  "packageManager": "pnpm@10.11.1+sha512.e519b9f7639869dc8d5c3c5dfef73b3f091094b0a006d7317353c72b124e80e1afd429732e28705ad6bfa1ee879c1fce46c128ccebd3192101f43dd67c667912"
 }

+ 8 - 0
pnpm-lock.yaml

@@ -65,6 +65,9 @@ importers:
       gsap:
         specifier: ^3.12.5
         version: 3.13.0
+      js-md5:
+        specifier: ^0.8.3
+        version: 0.8.3
       pinia:
         specifier: ^2.1.7
         version: 2.3.1(typescript@4.9.5)(vue@3.4.21(typescript@4.9.5))
@@ -2714,6 +2717,9 @@ packages:
   jpeg-js@0.3.7:
     resolution: {integrity: sha512-9IXdWudL61npZjvLuVe/ktHiA41iE8qFyLB+4VDTblEsWBzeg8WQTlktdUK4CdncUqtUgUg0bbOmTE2bKBKaBQ==}
 
+  js-md5@0.8.3:
+    resolution: {integrity: sha512-qR0HB5uP6wCuRMrWPTrkMaev7MJZwJuuw4fnwAzRgP4J4/F8RwtodOKpGp4XpqsLBFzzgqIO42efFAyz2Et6KQ==}
+
   js-tokens@4.0.0:
     resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==}
 
@@ -7525,6 +7531,8 @@ snapshots:
 
   jpeg-js@0.3.7: {}
 
+  js-md5@0.8.3: {}
+
   js-tokens@4.0.0: {}
 
   js-tokens@9.0.1: {}

+ 34 - 0
src/api/reportService/index.ts

@@ -1,6 +1,15 @@
+/*
+ * @Author: zhanghaifeng
+ * @Date: 2025-07-08 13:31:49
+ * @LastEditors: zhanghaifeng
+ * @LastEditTime: 2025-11-23 17:52:46
+ * @Description: 
+ * @FilePath: /jiangbei-mini-h5/src/api/reportService/index.ts
+ */
 import { service } from '@/utils/request'
 import { addReportServiceDataReq, PageServiceReportDataReq, ReportServiceRes } from './types'
 import { ApiResponse, PageResp } from '../types'
+import globalConfig from '@/config/global'
 
 export enum reportAPi {
   /** 新增上报服务 */
@@ -11,6 +20,10 @@ export enum reportAPi {
   // /serviceReport/detailsServiceReportData/{uuid}
   SERVICE_REPORT_DETAIL = '/serviceReport/detailsServiceReportData',
 }
+export enum qyApi {
+  // 获取token
+  GET_TOKEN = '/fedoServer/req/getToken',
+}
 
 /** 新增上报服务 */
 export const addServiceReportData = (data: Partial<addReportServiceDataReq>) => {
@@ -25,4 +38,25 @@ export const pageServiceReportData = (params: PageServiceReportDataReq) => {
 /** 上报服务详情 */
 export const getServiceReportDetail = (uuid: string) => {
   return service.get<ApiResponse<ReportServiceRes>>(reportAPi.SERVICE_REPORT_DETAIL + `/${uuid}`)
+}
+
+/** 获取token */
+export const getQyapiToken = (data = {}) => {
+  return service.post(qyApi.GET_TOKEN, data)
+}
+export const getQyapiToken2 = (data = {}) => {
+  return service.post(`/fedoServer/req/${globalConfig.appId}/9001`, data)
+}
+
+export const getQyapiUserInfo = (data = {}) => {
+  return service.post(`/fedoServer/req/${globalConfig.appId}/9002`, data)
+}
+export const getQyapiExternalcontact = (data = {}) => {
+  return service.post(`/fedoServer/req/${globalConfig.appId}/9003`, data)
+}
+export const getQyapiGroupchat = (data = {}) => {
+  return service.post(`/fedoServer/req/${globalConfig.appId}/9004`, data)
+}
+export const getQyapiMobile = (data = {}) => {
+  return service.post(`/fedoServer/req/${globalConfig.appId}/9005`, data)
 }

+ 16 - 1
src/config/global.ts

@@ -1,10 +1,25 @@
+/*
+ * @Author: zhanghaifeng
+ * @Date: 2025-07-08 13:31:49
+ * @LastEditors: zhanghaifeng
+ * @LastEditTime: 2025-11-23 14:49:01
+ * @Description: 
+ * @FilePath: /jiangbei-mini-h5/src/config/global.ts
+ */
 const globalConfig = {
     /** 缓存命名空间  */
     storeNamespace: import.meta.env.VITE_STORAGE_NAMESPACE,
     /** 企微应用基本信息 */
     corpid: 'ww10867c3149d214a2',
     agentId: '1000003',
-    secret: '_E7gXLS_OOI3Oqm4aX1LsN9Oqo7UuyUNIw1Qtp0YqoQ'
+    secret: '_E7gXLS_OOI3Oqm4aX1LsN9Oqo7UuyUNIw1Qtp0YqoQ',
+    /** 飞度 */
+    appId: 'f4088a8d-7daf-461d-b272-5101c1bc02db',
+    getTokenCmdid: 9001,
+    getUserinfoCmdid: 9002,
+    getExternalcontactCmdid: 9003,
+    groupchatCmdid: 9004,
+    fdSecret: '2cf771124c74499aa3a5047ae54af58d',
 }
 
 export default globalConfig

+ 14 - 0
src/config/proxy.ts

@@ -1,3 +1,11 @@
+/*
+ * @Author: zhanghaifeng
+ * @Date: 2025-07-08 13:31:49
+ * @LastEditors: zhanghaifeng
+ * @LastEditTime: 2025-11-23 13:56:50
+ * @Description: 
+ * @FilePath: /jiangbei-mini-h5/src/config/proxy.ts
+ */
 import { ProxyOptions } from 'vite'
 
 const proxy: Record<string, string | ProxyOptions> = {
@@ -14,6 +22,12 @@ const proxy: Record<string, string | ProxyOptions> = {
     secure: false,
     rewrite: (path) => path.replace(/^\/api\/ystlsystemservice/, 'api/ystlsystemservice'),
   },
+  '/api/fedoServer': {
+    target: 'http://10.74.225.182:10080',
+    changeOrigin: true,
+    secure: false,
+    rewrite: (path) => path.replace(/^\/api\/fedoServer/, 'fedoServer/'),
+  },
   '/api/chengyun': {
     target: 'http://10.68.191.64:30002',
     changeOrigin: true,

+ 119 - 41
src/pages/home/index.vue

@@ -4,6 +4,8 @@ import { onLoad } from '@dcloudio/uni-app';
 import { ref } from 'vue';
 import globalConfig from '@/config/global';
 import * as ww from '@wecom/jssdk';
+import { getQyapiToken, getQyapiToken2, getQyapiUserInfo, getQyapiExternalcontact, getQyapiGroupchat} from '@/api/reportService/index';
+import md5 from 'js-md5';
 
 const codeParams = ref('');
 const atoken = ref(localStorage.getItem('CommunityFillingAccessToken') || '');
@@ -12,74 +14,150 @@ onLoad(async (option) => {
     const { code } = option;
     codeParams.value = code;
   }
-  if (!atoken.value) {
+  if (!atoken.value || !localStorage.getItem('CommunityFillingAccessToken')) {
     await getToken();
+    await getAccessToken();
   }
   await getExternalUserid();
   await getGroupChatId();
 })
 // 获取token
 const getToken = async () => {
-  const res = await axios.get(`https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=${globalConfig.corpid}&corpsecret=${globalConfig.secret}`)
-  const resData = res.data || {};
-  if (resData.errcode === 0) {
-    const access_token = resData.access_token;
-    localStorage.setItem('CommunityFillingAccessToken', access_token);
-    atoken.value = access_token
+  const configObj = {
+    appid:globalConfig.appId,
+    secret:globalConfig.fdSecret
+  }
+  const reqMd5 = md5(`${configObj}`)
+  const res = await getQyapiToken({
+    "nonce": "123456", //uuid,不包含"-",自已生成
+    "sign": md5(`appid=${globalConfig.appId}&cmdid=getToken&nonce=123456&req=${reqMd5}&key=${globalConfig.fdSecret}`).toUpperCase(),
+    "req": reqMd5,
+    "encryption": 3,
+    "fromAppId": globalConfig.appId
+  });
+  const resData = res.result || '';
+  if (resData) {
+    atoken.value = resData
+    localStorage.setItem('CommunityToken', resData);
+  }
+}
+const getAccessToken = async () => {
+  const configObj = {
+    corpid: globalConfig.appId,
+    corpsecret: globalConfig.fdSecret,
+  }
+  const reqMd5 = md5(`${configObj}`)
+  const res = await getQyapiToken2({
+    token: atoken.value,
+    nonce: "556677",
+    "sign": md5(`appid=${globalConfig.appId}&cmdid=9001&nonce=556677&req=${reqMd5}&key=${globalConfig.fdSecret}`).toUpperCase(),
+    "req": reqMd5,
+    "encryption": 3,
+    "fromAppId": globalConfig.appId
+  });
+  const resData = res.result || '{}';
+  if (resData) {
+    localStorage.setItem('CommunityFillingAccessToken', JSON.parse(resData).access_token || '');
   }
 }
 // 获取external_userid
 const externalUserid = ref('');
 const getExternalUserid = async () => {
-  const userRes = await axios.get(`https://qyapi.weixin.qq.com/cgi-bin/auth/getuserinfo?access_token=${atoken.value}&code=${codeParams.value}`)
-  if (userRes.data && userRes.data.errcode === 0) {
-    const exUserid = userRes.data.external_userid;
-    externalUserid.value = exUserid;
-    await getUnionid();    
-  } else if (userRes.data && userRes.data.errcode === 40014) {
-    // access_token过期,重新获取
-    await getToken();
-    await getExternalUserid();
+  const configObj = {
+    access_token: localStorage.getItem('CommunityFillingAccessToken'),
+    code: codeParams.value
+  }
+  const reqMd5 = md5(`${configObj}`)
+  const res = await getQyapiUserInfo({
+    "token": atoken.value,
+    "nonce": "222333",
+    "sign": md5(`appid=${globalConfig.appId}&cmdid=9002&nonce=222333&req=${reqMd5}&key=${globalConfig.fdSecret}`).toUpperCase(),
+    "req": reqMd5,
+    "encryption": 3,
+    "fromAppId": globalConfig.appId
+  })
+  const resData = res.result || '{}';
+  if (resData) {
+    const userRes = JSON.parse(resData) || {}
+    if (userRes.errcode === 0) {
+      const exUserid = userRes.external_userid || '';
+      externalUserid.value = exUserid;
+      await getUnionid();    
+    } else if (userRes.errcode === 40014) {
+      // access_token过期,重新获取
+      await getToken();
+      await getAccessToken();
+      await getExternalUserid();
+    }
   }
 }
 // 获取unionid
 const unionidValue = ref('');
 const getUnionid = async () => {
-  const unionidRes = await axios.get(`https://qyapi.weixin.qq.com/cgi-bin/externalcontact/get?access_token=${atoken.value}&external_userid=${externalUserid.value}`)
-  if (unionidRes.data && unionidRes.data.errcode === 0) {
-    const unionid = unionidRes.data.external_contact && unionidRes.data.external_contact.unionid || '';
-    unionidValue.value = unionid;
+  const configObj = {
+    access_token: localStorage.getItem('CommunityFillingAccessToken'),
+    external_userid: externalUserid.value
+  }
+  const reqMd5 = md5(`${configObj}`)
+  const res = await getQyapiExternalcontact({
+    "token": atoken.value,
+    "nonce": "4433345",
+    "sign": md5(`appid=${globalConfig.appId}&cmdid=9003&nonce=4433345&req=${reqMd5}&key=${globalConfig.fdSecret}`).toUpperCase(),
+    "req": reqMd5,
+    "encryption": 3,
+    "fromAppId": globalConfig.appId
+  })
+  const resData = res.result || '{}';
+  if (resData) {
+    const unionidRes = JSON.parse(resData) || {}
+    if (unionidRes.errcode === 0) {
+      const unionid = unionidRes.external_contact && unionidRes.external_contact.unionid || '';
+      unionidValue.value = unionid;
+    } else if (unionidRes.errcode === 40014) {
+      // access_token过期,重新获取
+      await getToken();
+      await getAccessToken();
+      await getExternalUserid();
+    }
   }
 }
 // 获取客户群的群ID
-const isQuestionEntry = ref(true); // 是否显示问题上报入口
+const isQuestionEntry = ref(false); // 是否显示问题上报入口
 const ownerId = ref(''); // 群主id
 const getGroupChatId = async () => {
-  ww.register({
+  ww.register({ // 调用客户端api,注册应用信息
     corpId: globalConfig.corpid, // 必填,从企业微信后台获取
     agentId: globalConfig.agentId, // 必填,自建应用或授权应用的AgentID
     jsApiList: ['getCurExternalChat'], // 声明需调用的API
   });
-  ww.getCurExternalChat({
-    success(res) {
-      axios.post(`https://qyapi.weixin.qq.com/cgi-bin/externalcontact/groupchat/get?access_token=${atoken.value}`, {
-        "chat_id": res.chatId,
-        "need_name": 1
-      }).then((response: any) => {
-        if (response.data && response.data.errcode === 0) {
-          ownerId.value = response.data.group_chat.owner;
-          const marr = response.data.group_chat.member_list || []
-          const unionidArr = marr.filter((item: any) => !!(item.unionid)).map((el: any) => el.unionid)
-          if (unionidArr.includes(unionidValue.value)) {
-            // 证明此人在群内,能上报问题
-           isQuestionEntry.value = true;
-          } else {
-            isQuestionEntry.value = false;
-          }
+  ww.getCurExternalChat({ // 调用客户端api,获取当前客户群的群ID
+    async success(obj) {
+      const configObj = {
+        access_token: localStorage.getItem('CommunityFillingAccessToken'),
+        chat_id: obj.chatId,
+        need_name: 1
+      }
+      const reqMd5 = md5(`${configObj}`)
+      const res = await getQyapiGroupchat({
+        "token": atoken.value,
+        "nonce": "4455366",
+        "sign": md5(`appid=${globalConfig.appId}&cmdid=9004&nonce=4455366&req=${reqMd5}&key=${globalConfig.fdSecret}`).toUpperCase(),
+        "req": reqMd5,
+        "encryption": 3,
+        "fromAppId": globalConfig.appId
+      })
+      const response = res.result || '{}';
+      if (response.errcode === 0) {
+        ownerId.value = response.group_chat && response.group_chat.owner || '';
+        const marr = response.group_chat && response.group_chat.member_list || []
+        const unionidArr = marr.filter((item: any) => !!(item.unionid)).map((el: any) => el.unionid)
+        if (unionidArr.includes(unionidValue.value)) {
+          // 证明此人在群内,能上报问题
+          isQuestionEntry.value = true;
+        } else {
+          isQuestionEntry.value = false;
         }
-      }).catch((error: any) => {
-        console.error('请求失败:', error);
-      });
+      }
     },
     fail(err) {
       console.error('获取失败:', err.errMsg);

+ 1 - 1
src/pages/index/index.vue

@@ -2,7 +2,7 @@
  * @Author: zhanghaifeng
  * @Date: 2025-07-08 13:31:49
  * @LastEditors: zhanghaifeng
- * @LastEditTime: 2025-10-14 17:01:04
+ * @LastEditTime: 2025-11-23 16:37:24
  * @Description: 
  * @FilePath: /jiangbei-mini-h5/src/pages/index/index.vue
 -->

+ 25 - 7
src/subPages/pages/reportProblems/index.vue

@@ -1,16 +1,18 @@
 <script lang="ts" setup>
 import { addQuestionReportData,REPORTDATA, getQuestionTypeList, pageQuestionReportData,getPerson } from '@/api/questionReqort'
 import { AddQuestionReportDataReq, QuestionListRes, QuestionType, QuestionTypeListRes } from '@/api/questionReqort/types'
-import { onMounted, ref } from 'vue'
-import GridAddress from '@/components/address/gridAddress/index.vue'
+import { onMounted, ref, defineAsyncComponent } from 'vue'
 import { showNotify } from 'vant'
-import axios from 'axios'
 import dayjs from 'dayjs';
 import { onLoad } from '@dcloudio/uni-app'
+import md5 from 'js-md5';
+import { getQyapiMobile } from '@/api/reportService'
+import globalConfig from '@/config/global';
 
+const GridAddress = defineAsyncComponent(() => import('@/components/address/gridAddress/index.vue'))
 const active = ref(0)
 
-const formData = ref<AddQuestionReportDataReq & { location?: string }>({})
+const formData = ref<Partial<AddQuestionReportDataReq> & { location?: string }>({})
 const range = ref<{ text: string; value: string }[]>([])
 const rangePerson = ref([]) as any
 
@@ -53,9 +55,25 @@ onLoad((option) => {
 })
 const ownerPhone = ref('')
 const getOwnerPhone = async () => {
-  const res = await axios.get(`https://qyapi.weixin.qq.com/cgi-bin/user/get?access_token=${localStorage.getItem('CommunityFillingAccessToken')}&userid=${ownerId.value}`)
-  if (res.data && res.data.errcode === 0) {
-    ownerPhone.value = res.data.mobile
+  const configObj = {
+    access_token: localStorage.getItem('CommunityFillingAccessToken'),
+    userid: ownerId.value
+  }
+  const reqMd5 = md5(`${configObj}`)
+  const res = await getQyapiMobile({
+    "token": localStorage.getItem('CommunityToken'),
+    "nonce": "6767676",
+    "sign": md5(`appid=${globalConfig.appId}&cmdid=9005&nonce=6767676&req=${reqMd5}&key=${globalConfig.fdSecret}`).toUpperCase(),
+    "req": reqMd5,
+    "encryption": 3,
+    "fromAppId": globalConfig.appId
+  })
+  const resData = res.result || '{}';
+  if (resData) {
+    const userRes = JSON.parse(resData) || {}
+    if (userRes.errcode === 0) {
+      ownerPhone.value = userRes.mobile 
+    }
   }
 }
 

+ 10 - 2
src/utils/request/index.ts

@@ -1,3 +1,11 @@
+/*
+ * @Author: zhanghaifeng
+ * @Date: 2025-07-08 13:31:49
+ * @LastEditors: zhanghaifeng
+ * @LastEditTime: 2025-11-23 15:08:09
+ * @Description: 
+ * @FilePath: /jiangbei-mini-h5/src/utils/request/index.ts
+ */
 import axios from 'axios'
 import { handleToken } from '@/utils/request/requestHandler'
 import { handleHttpError, handleNormalResponse } from '@/utils/request/responseHandler'
@@ -21,8 +29,8 @@ service.interceptors.request.use((requestConfig) => {
 
 service.interceptors.response.use(
   async (resp) => {
-    const isSuccess = await handleNormalResponse(resp)
-    return isSuccess ? resp.data : Promise.reject(resp.data)
+    // const isSuccess = await handleNormalResponse(resp)
+    return resp.data || resp || {}
   },
   (err) => {
     if (axios.isAxiosError(err)) {