![]()
[请求拦截器] -> 服务器
* token校验(JWT) : 接受服务器返回的token,存储到vuex/pinia/本地储存当中
*/
- // this.service.interceptors.request.use(
- // (config: InternalAxiosRequestConfig) => {
- // config.headers['Authorization'] = localStorage.getItem('token') || ''
- // return config
- // },
- // (error: AxiosError) => {
- // // 请求报错
- // Promise.reject(error)
- // }
- // )
+ this.service.interceptors.request.use(
+ (config: InternalAxiosRequestConfig) => {
+ config.headers['Authorization'] = localStorage.getItem('token') || 'Bearer eyJhbGciOiJIUzUxMiJ9.eyJsb2dpbl91c2VyX2NsaWVudCI6ImFzZGg1IiwibG9naW5fdXNlcl9rZXkiOjEwMTk4fQ.0PBl9f8c0bb2y0P5NpOEzo8GDeTCrgQ_D1JVDvya4nQeCfh6z-s1W33muAU-hU-vNOXezCUhEnTN1GymYIAzDQ'
+ return config
+ },
+ (error: AxiosError) => {
+ // 请求报错
+ Promise.reject(error)
+ }
+ )
/**
* 响应拦截器
diff --git a/src/utils/sm4.js b/src/utils/sm4.js
new file mode 100644
index 0000000..bc4904a
--- /dev/null
+++ b/src/utils/sm4.js
@@ -0,0 +1,86 @@
+// 使用require语法引入gm-crypt
+import { sm4 } from 'gm-crypt'
+
+// SM4默认配置
+const sm4Config = {
+ key: "0F2U3wabvOMfs2Y1",
+ mode: "ecb", // 加密的方式有两种,ecb和cbc两种,这里使用的是cbc,cbc模式还要加一个iv的参数,ecb不用
+ // cipherType: "base64", //
+ // iv: "1234567890abcdef", // 16字符,符合要求
+}
+
+// 创建全局SM4实例
+const sm4Instance = new sm4(sm4Config)
+
+/**
+ * SM4加密
+ * @param {string} data - 要加密的数据
+ * @param {object} config - 可选的配置参数,会覆盖默认配置
+ * @returns {string} - 加密后的数据
+ */
+export function encrypt(data, config = {}) {
+ if (!data) {
+ console.warn('SM4加密:数据为空')
+ return ''
+ }
+ console.log(data, 666);
+
+ try {
+ const finalConfig = { ...sm4Config, ...config }
+ const sm4Cipher = new sm4(finalConfig)
+ console.log(sm4Cipher.encrypt(data), '加密');
+ return sm4Cipher.encrypt(data)
+ } catch (error) {
+ console.error('SM4加密失败:', error)
+ return ''
+ }
+}
+
+/**
+ * SM4解密
+ * @param {string} data - 要解密的数据
+ * @param {object} config - 可选的配置参数,会覆盖默认配置
+ * @returns {string} - 解密后的数据
+ */
+export function decrypt(data, config = {}) {
+ if (!data) {
+ console.warn('SM4解密:数据为空')
+ return ''
+ }
+
+ try {
+ const finalConfig = { ...sm4Config, ...config }
+ const sm4Cipher = new sm4(finalConfig)
+ console.log(sm4Cipher.decrypt(data), '解密');
+
+ return sm4Cipher.decrypt(data)
+ } catch (error) {
+ console.error('SM4解密失败:', error)
+ return ''
+ }
+}
+
+/**
+ * 获取默认SM4实例
+ * @returns {object} - SM4实例
+ */
+export function getSm4Instance() {
+ return sm4Instance
+}
+
+/**
+ * 获取默认配置
+ * @returns {object} - 默认配置
+ */
+export function getDefaultConfig() {
+ return { ...sm4Config }
+}
+
+// 导出所有方法
+export default {
+ encrypt,
+ decrypt,
+ getSm4Instance,
+ getDefaultConfig,
+ sm4Config
+}
\ No newline at end of file
diff --git a/src/views/policy/index.vue b/src/views/policy/index.vue
index 9f9b975..72f2e58 100644
--- a/src/views/policy/index.vue
+++ b/src/views/policy/index.vue
@@ -56,24 +56,13 @@
- 信息公告>详情
+ 信息公告>详情
{{ policyInfo.title }}
- {{
- policyInfo.dicId === "1"
- ? "住房政策"
- : policyInfo.dicId === "2"
- ? "人才政策"
- : policyInfo.dicId === "3"
- ? "就业政策"
- : ""
- }}
+ {{ policyType }}
{{ policyInfo.createTime }}
@@ -106,6 +95,7 @@ interface ApiResponse
{
data?: T;
}
const showDetail = ref(false);
+const policyType = ref('');
const router = useRouter();
const handleClickTab = (item: any) => {
active.value = item.dictValue;
@@ -165,6 +155,10 @@ const toPolicyDetail = async (itemOrId: PolicyItem | string | number) => {
const id = typeof itemOrId === "object" ? itemOrId.id : itemOrId;
const res = (await getPolicyInfo(Number(id))) as unknown as ApiResponse;
policyInfo.value = res.data || {};
+ // 从 tabList 中动态查找对应的政策类型
+ const foundType = tabList.value.find(item => item.dictValue === policyInfo.value.dicId);
+ policyType.value = foundType ? foundType.dictLabel : '其他政策';
+
showDetail.value = true;
};
const handleBack = () => {
diff --git a/src/views/showings/apartmentDetail.vue b/src/views/showings/apartmentDetail.vue
index f3a59dd..57e5031 100644
--- a/src/views/showings/apartmentDetail.vue
+++ b/src/views/showings/apartmentDetail.vue
@@ -4,7 +4,7 @@
{ title: '看房', path: '/Showings' },
{ title: '公寓详情', path: '' },
]"
- :width="1678"
+ :width="1310"
/>
diff --git a/src/views/showings/houseDetail.vue b/src/views/showings/houseDetail.vue
index 146002d..c37d79b 100644
--- a/src/views/showings/houseDetail.vue
+++ b/src/views/showings/houseDetail.vue
@@ -5,7 +5,7 @@
{ title: '公寓详情', path: '/apartmentDetail', query: { deptId: deptId } },
{ title: '公寓房型', path: '/roomTypeList', query: { apartmentId: deptId } },
{ title: '房型详情', path: '' },
- ]" :width="1678" />
+ ]" :width="1310" />
房型详情
diff --git a/src/views/test/index.vue b/src/views/test/index.vue
new file mode 100644
index 0000000..80b7837
--- /dev/null
+++ b/src/views/test/index.vue
@@ -0,0 +1,749 @@
+
+
+
+
温馨提示
+
+ 已就业:申请人应完成就业登记或按规定正在我市缴纳城镇企业职工基本养老保险(基本医疗保险);灵活就业的申请人应完成灵活就业登记或按规定正在我市缴纳城镇企业职工基本养老保险(基本医疗保险)。
+
+
+ 已创业:申请人创办企业、个体工商户及民办非企业单位、社会团体、事务所等创业实体。可以是法定代表人,可以是股东,且对股东占股比例没有要求,需在工商登记或相应登记(统一社会信用代码证)中能查到担任法定代表人、占股等信息。
+
+
+
请如实填写您的信息,以免影响审核。
+
+
+
+
+ 请先选择您的申请条件:
+
+ 1、您的院校类型
+
+
+ 普通高等学校
+ 技工学校
+
+
+ 2、您当前的学业状态
+
+
+ 已毕业
+ 毕业学年内
+
+
+ 3、您当前的工作状态
+
+
+ 求职中
+ 已就业
+ 已创业
+
+
+
+
4、您是否是低保家庭毕业生
+
+ 按政策要求,低保家庭须求职中的毕业生可选。
+
+
+
+ 是
+ 否
+
+
+
+
+ 请填写低保家庭申请人信息
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 联系电话:{{ desensitizePhoneNumber(telephone || userInfo.mobile) }}
+
+
+
+
+ 是否更换联系电话(用于接收短信通知)
+
+
+ 否
+ 是
+
+
+
+
+
+
+
+
+ 我承诺所填信息均为本人当前真实有效信息,若与事实不符造成未获得入住资格等后果均由本人自行承担。
+
+
+
+
下一步
+
同意并提交
+
+
+
+
+
+
+
+
\ No newline at end of file