提交 0f001c47 authored 作者: 刘旭's avatar 刘旭

更新代码

上级 f9fcce6c
...@@ -24,7 +24,10 @@ ...@@ -24,7 +24,10 @@
"@dcloudio/uni-mp-toutiao": "3.0.0-alpha-3061620221230002", "@dcloudio/uni-mp-toutiao": "3.0.0-alpha-3061620221230002",
"@dcloudio/uni-mp-weixin": "3.0.0-alpha-3061620221230002", "@dcloudio/uni-mp-weixin": "3.0.0-alpha-3061620221230002",
"@dcloudio/uni-quickapp-webview": "3.0.0-alpha-3061620221230002", "@dcloudio/uni-quickapp-webview": "3.0.0-alpha-3061620221230002",
"@types/file-saver": "^2.0.5",
"crypto-js": "^4.1.1",
"dayjs": "^1.11.8", "dayjs": "^1.11.8",
"file-saver": "^2.0.5",
"node-sass": "^7.0.1", "node-sass": "^7.0.1",
"pinia": "^2.0.21", "pinia": "^2.0.21",
"pinia-plugin-persistedstate": "^3.1.0", "pinia-plugin-persistedstate": "^3.1.0",
......
import request from "@/utils/request" import request from "@/utils/request";
/** /**
* @brief 查阅预约 * @brief 存放预约
* @param data * @param data
* @return * @return
*/ */
export const depositReservation = (data: any) => { export const depositReservation = (data: any, isReject: boolean = false) => {
return request( return request(
"/LQKJ.K3.FileSystem.WebApi.WebApiService.Deposit,LQKJ.K3.FileSystem.WebApi.common.kdsvc", "/LQKJ.K3.FileSystem.WebApi.WebApiService.Deposit,LQKJ.K3.FileSystem.WebApi.common.kdsvc",
"POST", "POST",
data data,
) "",
} isReject
);
};
/**
* @brief 发送验证码
* @param Phone
* @return
*/
export const verification = (Phone: any) =>
request(
"/LQKJ.K3.PeiXunSystem.WebApi.WebApiEditService.Verification,LQKJ.K3.PeiXunSystem.WebApi.common.kdsvc",
"POST",
{ Phone }
);
...@@ -10,10 +10,10 @@ ...@@ -10,10 +10,10 @@
class="time-item" class="time-item"
@tap="change(item, i)" @tap="change(item, i)"
> >
<view class="date">{{ dayjs(item.date, "MM-DD").format("DD") }}</view> <view class="date">{{ item.date.split("-")[1] }}</view>
<view class="week">{{ item.week }}</view> <view class="week">{{ item.week }}</view>
<view v-show="item.show" class="rest"></view> <view v-show="item.show" class="rest"></view>
<view v-show="isFull(item)" class="rest full"></view> <view v-show="!isFull(item) && !item.show" class="rest full"></view>
</view> </view>
</view> </view>
<view class="line"> <view class="line">
...@@ -31,10 +31,10 @@ ...@@ -31,10 +31,10 @@
class="time-item" class="time-item"
@tap="change(item, i)" @tap="change(item, i)"
> >
<view class="date">{{ dayjs(item.date, "MM-DD").format("DD") }}</view> <view class="date">{{ item.date.split("-")[1] }}</view>
<view class="week">{{ item.week }}</view> <view class="week">{{ item.week }}</view>
<view v-show="item.show" class="rest"></view> <view v-show="item.show" class="rest"></view>
<view v-show="isFull(item)" class="rest full"></view> <view v-show="!isFull(item) && !item.show" class="rest full"></view>
</view> </view>
</view> </view>
</view> </view>
...@@ -72,8 +72,13 @@ ...@@ -72,8 +72,13 @@
<view class="time">{{ item.Time }}</view> <view class="time">{{ item.Time }}</view>
<view <view
class="time-detail" class="time-detail"
:style="{ color: item.FREMAINDERNUMBER ? '' : '#999999' }" :style="{
>{{ item.FREMAINDERNUMBER ? "可预约" : "已约满" }}</view color:
item.FREMAINDERNUMBER > 0 && item.type == '0' ? '' : '#999999',
}"
>{{
item.FREMAINDERNUMBER > 0 && item.type == "0" ? "可预约" : "已约满"
}}</view
> >
</view> </view>
</view> </view>
...@@ -89,7 +94,12 @@ ...@@ -89,7 +94,12 @@
<view v-show="show" class="prompt"> <view v-show="show" class="prompt">
<view class="prompt-title">温馨提示:</view> <view class="prompt-title">温馨提示:</view>
<view class="prompt-detail">{{ prompt }}</view> <!-- <view class="prompt-detail">{{ prompt }}</view> -->
<view class="prompt-detail"
>您好!您已预约成功({{
date
}})到西部人力办理档案业务。请携带相关证件、材料按时到场。如未能到场请提前天取消预约,超时未到场号源将自动失效,请重新预约。</view
>
</view> </view>
</view> </view>
</template> </template>
...@@ -117,6 +127,10 @@ const props = defineProps({ ...@@ -117,6 +127,10 @@ const props = defineProps({
type: Boolean, type: Boolean,
default: false, default: false,
}, },
date: {
type: String,
default: "",
},
}); });
const emits = defineEmits(["change", "onConfirm"]); const emits = defineEmits(["change", "onConfirm"]);
...@@ -137,18 +151,14 @@ const appointmentTime = computed(() => { ...@@ -137,18 +151,14 @@ const appointmentTime = computed(() => {
}); });
const isFull = (row: any) => { const isFull = (row: any) => {
return ( let list = [...row.afternoon, ...row.morning].filter(
row.afternoon.some((item: any) => { (item: any) => item.FREMAINDERNUMBER === 0
item.FREMAINDERNUMBER > 0;
}) &&
row.morning.some((item: any) => {
item.FREMAINDERNUMBER > 0;
})
); );
return !(list.length === [...row.afternoon, ...row.morning].length);
}; };
const change = (item: any, index: number) => { const change = (item: any, index: number) => {
if (item.active || item.show) return; if (item.active || item.show || !isFull(item)) return;
state.FEntryID = null; state.FEntryID = null;
emits("change", ""); emits("change", "");
state.current = index; state.current = index;
...@@ -166,7 +176,8 @@ const btnChange = (type: string) => { ...@@ -166,7 +176,8 @@ const btnChange = (type: string) => {
}; };
const gridItem = (item: any) => { const gridItem = (item: any) => {
if (item.FREMAINDERNUMBER <= 0) return; // console.log(item, "gridItem");
if (item.FREMAINDERNUMBER <= 0 || item.type == "1") return;
if (state.FEntryID === item.FEntryID) return; if (state.FEntryID === item.FEntryID) return;
emits("change", item); emits("change", item);
state.FEntryID = item.FEntryID; state.FEntryID = item.FEntryID;
......
...@@ -22,9 +22,17 @@ ...@@ -22,9 +22,17 @@
} }
}, },
{ {
"path": "pages/myReservation/login",
"style": {
"navigationBarTitleText": "档案预约",
"navigationStyle": "custom"
}
},
{
"path": "pages/refer/index", "path": "pages/refer/index",
"style": { "style": {
"navigationBarTitleText": "档案查阅预约" "navigationBarTitleText": "档案查阅预约",
"navigationStyle": "custom"
} }
}, },
{ {
......
...@@ -50,6 +50,7 @@ ...@@ -50,6 +50,7 @@
<script setup lang="ts"> <script setup lang="ts">
import { depositReservation } from "@/api/deposit"; import { depositReservation } from "@/api/deposit";
import { isXgIDCard } from "@/utils/util";
const form = ref(); const form = ref();
const uniA: any = uni; const uniA: any = uni;
...@@ -74,7 +75,7 @@ const data = reactive({ ...@@ -74,7 +75,7 @@ const data = reactive({
}, },
{ {
validator: (rule: any, value: any, callback: any) => { validator: (rule: any, value: any, callback: any) => {
return uniA.$u.test.idCard(value); return uniA.$u.test.idCard(value) || isXgIDCard(value);
}, },
message: "身份证号不正确", message: "身份证号不正确",
trigger: ["change", "blur"], trigger: ["change", "blur"],
......
...@@ -9,7 +9,7 @@ ...@@ -9,7 +9,7 @@
v-model="state.current" v-model="state.current"
@change="change" @change="change"
></u-tabs> ></u-tabs>
<view class="my-list"> <view v-if="list.length" class="my-list">
<view <view
v-for="item in list" v-for="item in list"
:key="item.FID" :key="item.FID"
...@@ -17,7 +17,7 @@ ...@@ -17,7 +17,7 @@
:style="{ :style="{
backgroundColor: state.FID === item.FID ? '#DDF3FF' : '', backgroundColor: state.FID === item.FID ? '#DDF3FF' : '',
}" }"
@tap="tapItem(item.FID)" @tap="tapItem(item)"
> >
<view class="my-item-left"> <view class="my-item-left">
<view class="my-time" <view class="my-time"
...@@ -30,6 +30,13 @@ ...@@ -30,6 +30,13 @@
<view class="my-item-right">{{ item.FHANDLESTATES }}</view> <view class="my-item-right">{{ item.FHANDLESTATES }}</view>
</view> </view>
</view> </view>
<u-empty
v-else
text="暂无数据~"
icon-size="230"
:margin-top="50"
src="../../static/img/noData.png"
></u-empty>
<u-button class="confirm-btn" type="primary" @tap="onConfirm" <u-button class="confirm-btn" type="primary" @tap="onConfirm"
>取消预约</u-button >取消预约</u-button
> >
...@@ -50,6 +57,7 @@ import { ...@@ -50,6 +57,7 @@ import {
cancelReservation, cancelReservation,
} from "../../api/transfer"; } from "../../api/transfer";
import { toast, zconfirm } from "@/utils/util"; import { toast, zconfirm } from "@/utils/util";
import { useGlobalStore } from "@/store/useStore";
const state = reactive({ const state = reactive({
list: [ list: [
...@@ -63,17 +71,22 @@ const state = reactive({ ...@@ -63,17 +71,22 @@ const state = reactive({
current: 0, current: 0,
FID: "", FID: "",
}); });
const globalStore = useGlobalStore();
const paramsData = ref({} as any); const paramsData = ref({} as any);
const list = ref([] as any); const list = ref([] as any);
const tapItem = (id: string) => { const tapItem = (row: string) => {
if (state.FID === id) return (state.FID = ""); if (row.FHANDLESTATES != "未办理") return;
state.FID = id; if (state.FID === row.FID) return (state.FID = "");
state.FID = row.FID;
}; };
const change = (e: any) => { const change = (e: any) => {
state.current = e; state.current = e;
state.FID = "";
init(); init();
}; };
...@@ -83,11 +96,11 @@ const onConfirm = async () => { ...@@ -83,11 +96,11 @@ const onConfirm = async () => {
if (result) { if (result) {
const { data: res } = await cancelReservation({ const { data: res } = await cancelReservation({
Fid: state.FID, Fid: state.FID,
Type: state.current, Type: state.current ? "YJYY" : "CYYY",
}); });
if (res.code === 200) { if (res.code === 200) {
console.log(res);
init(); init();
state.FID = "";
toast("取消预约成功"); toast("取消预约成功");
} }
} }
...@@ -103,20 +116,21 @@ const initAppointmentConfig = async () => { ...@@ -103,20 +116,21 @@ const initAppointmentConfig = async () => {
paramsData.value.WXTS = item.WXTS[0]; paramsData.value.WXTS = item.WXTS[0];
} }
}); });
console.log(paramsData.value); // console.log(paramsData.value);
} }
} }
}; };
const init = async () => { const init = async () => {
console.log(state.current);
const { data: res } = await selectYuYue({ const { data: res } = await selectYuYue({
Phone: "18874693873", Phone: globalStore.phone,
Type: state.current, Type: state.current,
pageIndex: 1,
pageSize: 999,
}); });
console.log(res); // console.log(res);
if (res.code == 200) { if (res.code == 200) {
list.value = res.data; list.value = res.data || [];
} }
}; };
...@@ -164,8 +178,8 @@ onMounted(async () => { ...@@ -164,8 +178,8 @@ onMounted(async () => {
justify-content: space-between; justify-content: space-between;
align-items: center; align-items: center;
background: #ffffff; background: #ffffff;
box-shadow: 0rpx 8rpx 20rpx 0rpx rgba(0, 0, 0, 0.03); box-shadow: 0rpx 8rpx 14rpx 8rpx rgba(0, 0, 0, 0.03);
border-radius: 16rpx 16rpx 16rpx 16rpx; border-radius: 16rpx;
margin-bottom: 32rpx; margin-bottom: 32rpx;
.my-item-left { .my-item-left {
width: 148rpx; width: 148rpx;
......
<template>
<view style="position: relative">
<view class="bg-header">
<u-image src="../../static/img/Frame812.png" width="100%" height="100%" />
</view>
<view class="logo">
<u-image src="../../static/img/logo.png" width="100%" height="240rpx" />
<view class="logo-detail">档案系统</view>
</view>
<view class="container">
<view class="content">
<u-form :model="data.formData" ref="form" label-width="150">
<u-form-item
prop="phone"
left-icon="../../static/img/icon_user.png"
:left-icon-style="data.leftIconStyle"
>
<u-input v-model="data.formData.phone" placeholder="请出输入手机号"
/></u-form-item>
<view class="yanzhenma">
<u-form-item
prop="code"
left-icon="../../static/img/icon_yanzhenma.png"
:left-icon-style="data.leftIconStyle"
><u-input
v-model="data.formData.code"
placeholder="请输入验证码"
:disabled="data.codeDisabled"
/>
</u-form-item>
<u-verification-code
seconds="60"
ref="uCode"
@change="codeChange"
></u-verification-code>
<view @tap="getCode" :disabled="data.codeDisabled" class="code">
{{ data.tips }}
</view>
</view>
</u-form>
<view class="footer">
<u-button @click="submit" type="primary">登录</u-button>
</view>
</view>
</view>
<view v-if="hideshow" class="bg-footer">
<u-image
src="../../static/img/Maskgroup.png"
width="100%"
height="100%"
/>
</view>
</view>
</template>
<script setup lang="ts">
import { toast, encrypt, decrypt } from "@/utils/util";
import { verification } from "@/api/deposit";
import { useGlobalStore } from "../../store/useStore";
const globalStore = useGlobalStore();
const form = ref();
const uniA: any = uni;
const data = reactive({
formData: {
phone: "",
code: "",
},
rules: {
phone: [
{
required: true,
message: "请输入手机号",
trigger: ["change", "blur"],
},
{
// 自定义验证函数,见上说明
validator: (rule: any, value: any, callback: any) => {
return uniA.$u.test.mobile(value);
},
message: "手机号码不正确",
// 触发器可以同时用blur和change
trigger: ["change", "blur"],
},
],
code: [
{
required: true,
message: "请输入验证码",
trigger: ["change", "blur"],
},
],
},
tips: "",
codeDisabled: true,
flag: true,
codeValue: "",
type: 0,
leftIconStyle: {
width: "40rpx",
height: "40rpx",
display: "flex",
},
});
const uCode = ref();
const showHeight = ref();
const hideshow = ref(true);
const docmHeight = document.documentElement.clientHeight;
watch(
() => data.formData.phone,
(newVal: string) => {
if (newVal && uniA.$u.test.mobile(newVal)) {
data.codeDisabled = false;
} else data.codeDisabled = true;
}
);
onLoad((options: any) => {
if (options?.type) {
data.type = options?.type;
}
// screenHeight.value = uni.getSystemInfoSync().windowHeight + "px";
// alert(screenHeight.value);
window.onresize = () => {
return (() => {
showHeight.value = document.body.clientHeight;
})();
};
});
watch(
() => showHeight.value,
() => {
if (docmHeight > showHeight.value) {
hideshow.value = false;
} else {
hideshow.value = true;
}
}
);
const getCode = async () => {
if (uCode.value.canGetCode) {
// 模拟向后端请求验证码
const { data: res } = await verification(data.formData.phone);
if (res.code == 200) {
data.codeValue = decrypt(res.data);
uni.showLoading({
title: "正在获取验证码",
});
setTimeout(() => {
uni.hideLoading();
clearTimeout(timer);
var timer = setTimeout(() => {
data.flag = false;
}, 300000);
// 这里此提示会被this.start()方法中的提示覆盖
toast("验证码已发送");
// 通知验证码组件内部开始倒计时
uCode.value.start();
}, 1000);
} else uni.hideLoading();
}
};
const codeChange = (text: string) => {
data.tips = text;
};
onReady(() => {
form.value.setRules(data.rules);
});
const submit = () => {
form.value.validate(async (valid: boolean) => {
if (valid) {
// if (!data.flag) return toast("验证码失效");
// if (data.formData.code != data.codeValue) return toast("验证码不正确");
globalStore.setPhone(data.formData.phone);
uni.reLaunch({ url: "/pages/myReservation/index" });
}
});
};
</script>
<style lang="scss" scoped>
.container {
position: absolute;
top: 500rpx;
left: 12%;
z-index: 99;
width: 568rpx;
.content {
width: 568rpx;
height: 372rpx;
.yanzhenma {
display: flex;
align-items: center;
margin-top: 48rpx;
.u-form-item {
width: 392rpx;
}
}
:deep(.u-form-item) {
position: relative;
// margin-bottom: 48rpx;
background: #ffffff;
padding: 10rpx 36rpx;
box-shadow: 0rpx 8rpx 100rpx 0rpx rgba(0, 0, 0, 0.05);
border-radius: 16rpx;
height: 90rpx;
}
:deep(.u-form-item__message) {
padding-left: 0 !important;
margin-top: 20rpx;
}
.footer {
height: 84rpx;
margin-top: 64rpx;
.u-btn {
width: 100%;
height: 100%;
background-color: #04a7ff;
}
}
}
}
</style>
...@@ -5,7 +5,6 @@ ...@@ -5,7 +5,6 @@
</template> </template>
</workGuide> </workGuide>
</template> </template>
<script setup lang="ts"> <script setup lang="ts">
import { appointmentConfig } from "@/api/transfer"; import { appointmentConfig } from "@/api/transfer";
import workGuide from "@/pages/workGuide/index.vue"; import workGuide from "@/pages/workGuide/index.vue";
...@@ -16,22 +15,26 @@ const paramsData = ref({} as any); ...@@ -16,22 +15,26 @@ const paramsData = ref({} as any);
// 初始化数据 // 初始化数据
const init = async () => { const init = async () => {
const { data: res } = await appointmentConfig("E"); const {
if (res.code === 200) { data: { code, data: items },
if (res.code === 200) { } = await appointmentConfig("E");
res.data.forEach((item: any) => { if (code === 200) {
if (item.hasOwnProperty("WXTS")) { const properties = ["WXTS", "CLQD", "SYTP", "DZMC"];
paramsData.value.WXTS = item.WXTS[0]; items.forEach((item: any) => {
} properties.forEach((property) => {
if (item.hasOwnProperty("MB")) { if (item.hasOwnProperty(property)) {
paramsData.value.MB = item.MB; paramsData.value[property] = item[property][0];
}
if (item.hasOwnProperty("CLQD")) {
paramsData.value.CLQD = item.CLQD[0];
} }
}); });
console.log(paramsData.value); if (item.hasOwnProperty("MB")) {
} // 对MB属性进行特殊处理
const mbObj = item.MB;
Object.keys(mbObj).forEach((key) => {
paramsData.value[key] = mbObj[key];
});
}
});
// console.log(paramsData.value);
} }
}; };
......
...@@ -10,7 +10,6 @@ ...@@ -10,7 +10,6 @@
<u-form-item prop="FDAIDCard"> <u-form-item prop="FDAIDCard">
<u-input <u-input
v-model="state.parmeters.Model.FDAIDCard" v-model="state.parmeters.Model.FDAIDCard"
type="number"
placeholder="请输入档案人身份证" placeholder="请输入档案人身份证"
/> />
</u-form-item> </u-form-item>
...@@ -29,7 +28,6 @@ ...@@ -29,7 +28,6 @@
> >
<u-input <u-input
v-model="state.parmeters.Model.FDAIDCard1" v-model="state.parmeters.Model.FDAIDCard1"
type="number"
placeholder="请输入档案人2身份证" placeholder="请输入档案人2身份证"
/> />
</u-form-item> </u-form-item>
...@@ -61,7 +59,6 @@ ...@@ -61,7 +59,6 @@
<u-form-item prop="FIDCard" v-if="show"> <u-form-item prop="FIDCard" v-if="show">
<u-input <u-input
v-model="state.parmeters.Model.FIDCard" v-model="state.parmeters.Model.FIDCard"
type="number"
placeholder="请输入查阅人身份证号" placeholder="请输入查阅人身份证号"
/> />
</u-form-item> </u-form-item>
...@@ -113,8 +110,9 @@ ...@@ -113,8 +110,9 @@
<script setup lang="ts"> <script setup lang="ts">
import { verification } from "@/api/transfer"; import { verification } from "@/api/transfer";
import { toast } from "@/utils/util"; import { isXgIDCard, toast } from "@/utils/util";
import { useGlobalStore } from "@/store/useStore"; import { useGlobalStore } from "@/store/useStore";
import { depositReservation } from "@/api/deposit";
defineProps({ defineProps({
wxts: String, wxts: String,
...@@ -136,7 +134,7 @@ const state = reactive({ ...@@ -136,7 +134,7 @@ const state = reactive({
FDatetime: "", //查阅时间 FDatetime: "", //查阅时间
FReservationQty: "", //查阅次数 FReservationQty: "", //查阅次数
FReferToType: "本人查阅", //查阅类型 0:个人,1:他人 FReferToType: "本人查阅", //查阅类型 0:个人,1:他人
FDAPhoneNumber: "", //档案人手机号 // FDAPhoneNumber: "", //档案人手机号
FDAName: "", //档案人姓名 FDAName: "", //档案人姓名
FDAIDCard: "", //档案人身份证 FDAIDCard: "", //档案人身份证
FDAName1: "", // 档案人姓名1 FDAName1: "", // 档案人姓名1
...@@ -160,7 +158,7 @@ const state = reactive({ ...@@ -160,7 +158,7 @@ const state = reactive({
}, },
{ {
validator: (rule: any, value: any, callback: any) => { validator: (rule: any, value: any, callback: any) => {
return uniA.$u.test.idCard(value); return uniA.$u.test.idCard(value) || isXgIDCard(value);
}, },
message: "身份证号不正确", message: "身份证号不正确",
trigger: ["blur"], trigger: ["blur"],
...@@ -181,7 +179,7 @@ const state = reactive({ ...@@ -181,7 +179,7 @@ const state = reactive({
}, },
{ {
validator: (rule: any, value: any, callback: any) => { validator: (rule: any, value: any, callback: any) => {
return uniA.$u.test.idCard(value); return uniA.$u.test.idCard(value) || isXgIDCard(value);
}, },
message: "身份证号不正确", message: "身份证号不正确",
trigger: ["blur"], trigger: ["blur"],
...@@ -206,7 +204,7 @@ const state = reactive({ ...@@ -206,7 +204,7 @@ const state = reactive({
{ {
required: true, required: true,
message: "请输入查阅人姓名", message: "请输入查阅人姓名",
trigger: [, "blur"], trigger: ["blur"],
}, },
], ],
FIDCard: [ FIDCard: [
...@@ -217,7 +215,7 @@ const state = reactive({ ...@@ -217,7 +215,7 @@ const state = reactive({
}, },
{ {
validator: (rule: any, value: any, callback: any) => { validator: (rule: any, value: any, callback: any) => {
return uniA.$u.test.idCard(value); return uniA.$u.test.idCard(value) || isXgIDCard(value);
}, },
message: "身份证号不正确", message: "身份证号不正确",
trigger: ["blur"], trigger: ["blur"],
...@@ -290,14 +288,41 @@ watch( ...@@ -290,14 +288,41 @@ watch(
{ immediate: true } { immediate: true }
); );
// 判断身份证号是否存在
const isExist = async (idCard: string, type: number = 1) => {
const { data: res } = await depositReservation({ name: "", idCard }, true);
if (res.code === 200) return { isIdCard: true, msg: "" };
else
return {
isIdCard: false,
msg: (type === 1 ? "档案人:" : "档案人2:") + res.msg,
};
};
const submit = () => { const submit = () => {
form.value.validate(async (valid: boolean) => { form.value.validate(async (valid: boolean) => {
if (valid) { if (valid) {
console.log(state.parmeters);
// if (state.tips == "重新获取") return toast("验证码失效"); // if (state.tips == "重新获取") return toast("验证码失效");
// if (state.codeValue !== state.parmeters.Model.code) // if (state.codeValue !== state.parmeters.Model.code)
// return toast("验证码不正确"); // return toast("验证码不正确");
Reflect.deleteProperty(state.parmeters.Model, "code"); Reflect.deleteProperty(state.parmeters.Model, "code");
if (state.parmeters.Model.FReferToType == "本人查阅") {
const { isIdCard, msg } = await isExist(
state.parmeters.Model.FDAIDCard
);
if (!isIdCard) return toast(msg);
state.parmeters.Model.FIDCard = state.parmeters.Model.FDAIDCard;
} else {
const { isIdCard, msg } = await isExist(
state.parmeters.Model.FDAIDCard
);
if (!isIdCard) return toast(msg);
const { isIdCard: isIdCard1, msg: msg1 } = await isExist(
state.parmeters.Model.FDAIDCard1,
2
);
if (!isIdCard1) return toast(msg1);
}
globalStore.setReferData(state.parmeters); globalStore.setReferData(state.parmeters);
uni.navigateTo({ uni.navigateTo({
url: "/pages/refer/referReservation", url: "/pages/refer/referReservation",
...@@ -323,7 +348,7 @@ const getCode = async () => { ...@@ -323,7 +348,7 @@ const getCode = async () => {
// return toast("手机号为空或手机号格式不正确"); // return toast("手机号为空或手机号格式不正确");
if (uCode.value.canGetCode) { if (uCode.value.canGetCode) {
// 模拟向后端请求验证码 // 模拟向后端请求验证码
const { state: res } = await verification( const { data: res } = await verification(
state.parmeters.Model.FPhoneNumber state.parmeters.Model.FPhoneNumber
); );
if (res.code == 200) { if (res.code == 200) {
......
...@@ -38,21 +38,26 @@ const onConfirm = () => { ...@@ -38,21 +38,26 @@ const onConfirm = () => {
if (!state.fid) return toast("选择预约时间"); if (!state.fid) return toast("选择预约时间");
zconfirm("确认预约?", async (result: boolean) => { zconfirm("确认预约?", async (result: boolean) => {
if (result) { if (result) {
let params: any = globalStore.referData || "{}"; let params: any =
JSON.parse(JSON.stringify(globalStore.referData)) || "{}";
params.FEntryID = state.fid; params.FEntryID = state.fid;
params.Model.FDAPhoneNumber = params.Model.FPhoneNumber; params.Model.FDAPhoneNumber = params.Model.FPhoneNumber;
params.Model.FReferToType = "本人查阅" ? "0" : "1"; params.Model.FReferToType =
params.Model.FReservationQty = "本人查阅" params.Model.FReferToType === "本人查阅" ? "0" : "1";
? 0 params.Model.FReservationQty =
: params.Model.FReservationQty; params.Model.FReferToType === "本人查阅"
console.log(params, "params"); ? 0
: params.Model.FReservationQty;
// console.log(params, "params");
const { data: res } = await referReservation({ const { data: res } = await referReservation({
parmeters: JSON.stringify(params), parmeters: JSON.stringify(params),
}); });
if (res.code === 200) { if (res.code === 200) {
state.isReservation = true; state.isReservation = true;
toast("查阅预约成功"); appointmentTimeRef.value.FEntryID = null;
} await init();
await toast("查阅预约成功");
} else if (res.code === 402) toast(res.msg);
} }
}); });
}; };
...@@ -68,10 +73,13 @@ const initAppointmentConfig = async () => { ...@@ -68,10 +73,13 @@ const initAppointmentConfig = async () => {
state.paramsData.WXTSX = item.WXTSX[0]; state.paramsData.WXTSX = item.WXTSX[0];
} }
}); });
console.log(state.paramsData);
} }
}; };
const isFull = (row: any) => {
let list = row.filter((item: any) => item.FREMAINDERNUMBER === 0);
return !(list.length === row.length);
};
// 初始化数据 // 初始化数据
const init = async () => { const init = async () => {
let data = { let data = {
...@@ -81,18 +89,22 @@ const init = async () => { ...@@ -81,18 +89,22 @@ const init = async () => {
if (res.code === 200) { if (res.code === 200) {
list.value = []; list.value = [];
let flag = true; let flag = true;
let isCurrent = true;
res.data.slice(0, 7).map((item: any, i: number) => { res.data.slice(0, 7).map((item: any, i: number) => {
list.value.push({ list.value.push({
active: flag && item.FISRESTDAYS === "0" ? true : false, active: flag && item.FISRESTDAYS === "0" && isFull(item.data),
week: item.WeekdayName, week: item.WeekdayName,
date: item.Date, date: item.Date,
show: item.FISRESTDAYS === "1" ? true : false, show: item.FISRESTDAYS === "1",
morning: item.data.filter((el: any) => el.TimeType == "0"), morning: item.data.filter((el: any) => el.TimeType === "0"),
afternoon: item.data.filter((el: any) => el.TimeType == "1"), afternoon: item.data.filter((el: any) => el.TimeType === "1"),
}); });
if (item.FISRESTDAYS === "0") { if (item.FISRESTDAYS === "0" && isFull(item.data)) {
appointmentTimeRef.value.current = i;
flag = false; flag = false;
if (!appointmentTimeRef.value.current && isCurrent) {
appointmentTimeRef.value.current = i;
isCurrent = false;
}
} }
}); });
appointmentTimeRef.value.list = list.value; appointmentTimeRef.value.list = list.value;
......
...@@ -73,7 +73,7 @@ ...@@ -73,7 +73,7 @@
<script setup lang="ts"> <script setup lang="ts">
import { useGlobalStore } from "@/store/useStore"; import { useGlobalStore } from "@/store/useStore";
import { toast } from "@/utils/util"; import { toast, isXgIDCard } from "@/utils/util";
import { verification, appointmentConfig } from "@/api/transfer"; import { verification, appointmentConfig } from "@/api/transfer";
import workGuide from "@/pages/workGuide/index.vue"; import workGuide from "@/pages/workGuide/index.vue";
...@@ -123,7 +123,7 @@ const data = reactive({ ...@@ -123,7 +123,7 @@ const data = reactive({
}, },
{ {
validator: (rule: any, value: any, callback: any) => { validator: (rule: any, value: any, callback: any) => {
return uniA.$u.test.idCard(value); return uniA.$u.test.idCard(value) || isXgIDCard(value);
}, },
message: "身份证号不正确", message: "身份证号不正确",
trigger: ["blur"], trigger: ["blur"],
...@@ -235,8 +235,14 @@ onReady(async () => { ...@@ -235,8 +235,14 @@ onReady(async () => {
if (item.hasOwnProperty("CLQD")) { if (item.hasOwnProperty("CLQD")) {
data.paramsData.CLQD = item.CLQD[0]; data.paramsData.CLQD = item.CLQD[0];
} }
if (item.hasOwnProperty("DZMC")) {
data.paramsData.DZMC = item.DZMC[0];
}
if (item.hasOwnProperty("SYTP")) {
data.paramsData.SYTP = item.SYTP[0];
}
}); });
console.log(data.paramsData); // console.log(data.paramsData);
} }
}); });
</script> </script>
......
...@@ -17,6 +17,7 @@ ...@@ -17,6 +17,7 @@
ref="appointmentTimeRef" ref="appointmentTimeRef"
time-title="选择上门时间" time-title="选择上门时间"
:show="state.isReservation" :show="state.isReservation"
:date="state.successDate"
:prompt="state.paramsData?.WXTSX?.FCONTENT" :prompt="state.paramsData?.WXTSX?.FCONTENT"
@change="reservationChange" @change="reservationChange"
@on-confirm="onConfirm" @on-confirm="onConfirm"
...@@ -52,6 +53,7 @@ const state = reactive({ ...@@ -52,6 +53,7 @@ const state = reactive({
fid: undefined, fid: undefined,
paramsData: {} as any, paramsData: {} as any,
isReservation: false, isReservation: false,
successDate: "",
}); });
const appointmentTimeRef = ref(); const appointmentTimeRef = ref();
...@@ -96,12 +98,23 @@ const upload = (type: number) => { ...@@ -96,12 +98,23 @@ const upload = (type: number) => {
FEntryID: state.fid, FEntryID: state.fid,
type, type,
}, },
success: (uploadFileRes: any) => { success: async (uploadFileRes: any) => {
const res = JSON.parse(uploadFileRes.data); const res = JSON.parse(uploadFileRes.data);
if (res.code === 200) { if (res.code === 200) {
state.isReservation = true; state.isReservation = true;
// init(); list.value.map((item: any) => {
toast("预约成功"); [...item.morning, ...item.afternoon].map((col: any) => {
if (col.FEntryID == state.fid) {
state.successDate = `${item.date.split("-")[0]}${
item.date.split("-")[1]
}${parseInt(col.Time?.split(":")[0], 10).toString()}`;
}
});
});
appointmentTimeRef.value.FEntryID = null;
fileUrl.value = null;
await init();
await toast("移交预约成功");
} else if (res.code === 402) { } else if (res.code === 402) {
zconfirm(res.msg, (e: boolean) => { zconfirm(res.msg, (e: boolean) => {
if (e) { if (e) {
...@@ -125,10 +138,15 @@ const initAppointmentConfig = async () => { ...@@ -125,10 +138,15 @@ const initAppointmentConfig = async () => {
state.paramsData.WXTSX = item.WXTSX[0]; state.paramsData.WXTSX = item.WXTSX[0];
} }
}); });
console.log(state.paramsData); // console.log(state.paramsData);
} }
}; };
const isFull = (row: any) => {
let list = row.filter((item: any) => item.FREMAINDERNUMBER === 0);
return !(list.length === row.length);
};
// 初始化数据 // 初始化数据
const init = async () => { const init = async () => {
let data = { let data = {
...@@ -138,27 +156,30 @@ const init = async () => { ...@@ -138,27 +156,30 @@ const init = async () => {
if (res.code === 200) { if (res.code === 200) {
list.value = []; list.value = [];
let flag = true; let flag = true;
res.data.slice(0, 7).map((item: any, i: number) => { let isCurrent = true;
res.data.slice(0, 7).map((item: any, i: any) => {
list.value.push({ list.value.push({
active: flag && item.FISRESTDAYS === "0" ? true : false, active: flag && item.FISRESTDAYS === "0" && isFull(item.data),
week: item.WeekdayName, week: item.WeekdayName,
date: item.Date, date: item.Date,
show: item.FISRESTDAYS === "1" ? true : false, show: item.FISRESTDAYS === "1",
morning: item.data.filter((el: any) => el.TimeType == "0"), morning: item.data.filter((el: any) => el.TimeType === "0"),
afternoon: item.data.filter((el: any) => el.TimeType == "1"), afternoon: item.data.filter((el: any) => el.TimeType === "1"),
}); });
if (item.FISRESTDAYS === "0") { if (item.FISRESTDAYS === "0" && isFull(item.data)) {
appointmentTimeRef.value.current = i;
flag = false; flag = false;
if (!appointmentTimeRef.value.current && isCurrent) {
appointmentTimeRef.value.current = i;
isCurrent = false;
}
} }
}); });
appointmentTimeRef.value.list = list.value; appointmentTimeRef.value.list = list.value;
initAppointmentConfig(); initAppointmentConfig();
console.log(list.value);
} }
}; };
onMounted(async () => { onMounted(() => {
init(); init();
}); });
</script> </script>
......
...@@ -18,12 +18,20 @@ ...@@ -18,12 +18,20 @@
<view class="guide-map"> <view class="guide-map">
<u-image <u-image
src="@/static/img/Frame545.png" :src="baseUrl + '/' + data?.SYTP?.ImagePath"
width="100%" width="100%"
height="160rpx" height="160rpx"
border-radius="8" border-radius="8"
/> />
<view class="guide-button" style="margin-top: 32rpx"> <view class="attr-name">
<u-image src="../../static/img/map.png" width="48rpx" height="48rpx" />
<view class="attr">{{ data?.DZMC?.FCONTENT }}</view>
</view>
<view
class="guide-button"
style="margin-top: 32rpx"
:style="{ marginBottom: data?.MB?.length ? '' : '24rpx' }"
>
<u-button <u-button
class="custom-style" class="custom-style"
shape="circle" shape="circle"
...@@ -34,7 +42,7 @@ ...@@ -34,7 +42,7 @@
</view> </view>
</view> </view>
<view class="guide-down-temp"> <view v-show="data?.MB?.length" class="guide-down-temp">
<view class="down-temp" v-for="(item, index) in data?.MB" :key="index"> <view class="down-temp" v-for="(item, index) in data?.MB" :key="index">
<view class="down-temp-title">{{ item.FILENAME.split(".")[0] }}</view> <view class="down-temp-title">{{ item.FILENAME.split(".")[0] }}</view>
<u-image <u-image
...@@ -52,8 +60,8 @@ ...@@ -52,8 +60,8 @@
<script setup lang="ts"> <script setup lang="ts">
import { appointmentConfigType, toast, zconfirm } from "@/utils/util"; import { appointmentConfigType, toast, zconfirm } from "@/utils/util";
import { attachmentDownLoad } from "@/api/transfer";
import { baseUrl } from "@/utils/request"; import { baseUrl } from "@/utils/request";
import { saveAs } from "file-saver";
const props = defineProps({ const props = defineProps({
title: String, title: String,
...@@ -65,24 +73,53 @@ const toLookAll = () => { ...@@ -65,24 +73,53 @@ const toLookAll = () => {
}; };
const toLookAttr = () => { const toLookAttr = () => {
uni.navigateTo({ url: "/pages/workGuide/lookAttr" }); uni.navigateTo({ url: "/pages/workGuide/lookAttr?title=" + props.title });
}; };
const downFile = async (row: any) => { const downFile = (row: any) => {
zconfirm(`确定下载${row.FILENAME}`, (result: boolean) => { zconfirm(`确定下载${row.FILENAME}`, (result: boolean) => {
if (result) { if (result) {
try { if (uni.getSystemInfoSync().platform === "ios") downFileIOS(row);
const url = baseUrl + "/" + row.FILEPATH; else downFileWindows(row);
const a = document.createElement("a"); }
a.href = url; });
a.download = row.FILENAME; };
a.click(); const nav: any = navigator;
} catch (error) { const downFileIOS = (row: any) => {
uni.request({
url: baseUrl + "/" + row.FILEPATH,
method: "GET",
responseType: "arraybuffer",
success: (res: any) => {
const blob = new Blob([res.data]);
if (nav?.msSaveBlob) {
// 兼容IE
nav?.msSaveBlob(blob, row.FILENAME);
} else {
const url = window.URL.createObjectURL(blob);
saveAs(url, row.FILENAME);
}
},
fail: (err: any) => {
// 这里可以统一处理错误,比如"未找到相关文件","下载失败"等
if (err.message === "Request failed with status code 404") {
// 提示or弹框:未找到相关文件
toast("未找到相关文件");
} else {
// 提示or弹框:下载失败
toast("下载失败"); toast("下载失败");
} }
} },
}); });
}; };
const downFileWindows = async (row: any) => {
const url = baseUrl + "/" + row.FILEPATH;
const a = document.createElement("a");
a.href = url;
a.download = row.FILENAME;
a.click();
};
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>
...@@ -156,5 +193,19 @@ const downFile = async (row: any) => { ...@@ -156,5 +193,19 @@ const downFile = async (row: any) => {
} }
} }
} }
.attr-name {
display: flex;
align-items: center;
margin-bottom: 14rpx;
margin-top: 10rpx;
.attr {
height: 44rpx;
font-size: 32rpx;
font-family: PingFang SC-Regular, PingFang SC;
font-weight: 400;
color: #222222;
line-height: 38rpx;
}
}
} }
</style> </style>
...@@ -25,6 +25,8 @@ ...@@ -25,6 +25,8 @@
</template> </template>
<script setup lang="ts"> <script setup lang="ts">
import guide from "./guide.vue";
defineProps({ defineProps({
title: String, title: String,
data: Object, data: Object,
...@@ -33,8 +35,6 @@ defineProps({ ...@@ -33,8 +35,6 @@ defineProps({
default: true, default: true,
}, },
}); });
import guide from "./guide.vue";
</script> </script>
<style scoped></style> <style scoped></style>
...@@ -5,7 +5,7 @@ ...@@ -5,7 +5,7 @@
<view class="attr">{{ data.paramsData?.DZMC?.FCONTENT }}</view> <view class="attr">{{ data.paramsData?.DZMC?.FCONTENT }}</view>
</view> </view>
<u-image <u-image
src="../../static/img/attr.png" :src="baseUrl + '/' + data.paramsData?.SYTP?.ImagePath"
width="100%" width="100%"
height="320rpx" height="320rpx"
border-radius="8rpx" border-radius="8rpx"
...@@ -23,7 +23,7 @@ ...@@ -23,7 +23,7 @@
<view class="title">导航搜索:</view> <view class="title">导航搜索:</view>
<view class="detail">{{ data.paramsData?.DHSS?.FCONTENT }}</view> <view class="detail">{{ data.paramsData?.DHSS?.FCONTENT }}</view>
</view> </view>
<map <map
class="attr-map" class="attr-map"
:latitude="data.paramsData?.JWD?.FCONTENT.split(',')[0]" :latitude="data.paramsData?.JWD?.FCONTENT.split(',')[0]"
...@@ -37,6 +37,7 @@ ...@@ -37,6 +37,7 @@
<script setup lang="ts"> <script setup lang="ts">
import { appointmentConfig } from "@/api/transfer"; import { appointmentConfig } from "@/api/transfer";
import { formattedText } from "@/utils/util"; import { formattedText } from "@/utils/util";
import { baseUrl } from "../../utils/request.ts";
const data = reactive({ const data = reactive({
paramsData: {} as any, paramsData: {} as any,
...@@ -60,6 +61,9 @@ const init = async () => { ...@@ -60,6 +61,9 @@ const init = async () => {
if (item.hasOwnProperty("DHSS")) { if (item.hasOwnProperty("DHSS")) {
data.paramsData.DHSS = item.DHSS[0]; data.paramsData.DHSS = item.DHSS[0];
} }
if (item.hasOwnProperty("SYTP")) {
data.paramsData.SYTP = item.SYTP[0];
}
if (item.hasOwnProperty("DZMC")) { if (item.hasOwnProperty("DZMC")) {
data.paramsData.DZMC = item.DZMC[0]; data.paramsData.DZMC = item.DZMC[0];
} }
......
export const useCommonStore = defineStore("common", {
state: () => ({
locationList: [{ name: "武汉家园印象里", key: 1 }],
}),
actions: {},
})
...@@ -9,6 +9,7 @@ export const useGlobalStore = defineStore({ ...@@ -9,6 +9,7 @@ export const useGlobalStore = defineStore({
transferData: null, transferData: null,
referData: null, referData: null,
infoData: {} as any, infoData: {} as any,
phone: "",
}; };
}, },
getters: {}, getters: {},
...@@ -22,6 +23,9 @@ export const useGlobalStore = defineStore({ ...@@ -22,6 +23,9 @@ export const useGlobalStore = defineStore({
setInfoData(infoData: string) { setInfoData(infoData: string) {
this.infoData = infoData; this.infoData = infoData;
}, },
setPhone(phone: string) {
this.phone = phone;
},
}, },
persist: piniaPersistOption("globalStore"), persist: piniaPersistOption("globalStore"),
}); });
......
declare module 'vk-uview-ui' declare module "vk-uview-ui";
\ No newline at end of file declare module "crypto-js";
declare module "file-saver";
...@@ -10,7 +10,8 @@ function request( ...@@ -10,7 +10,8 @@ function request(
url: string, url: string,
method: "GET" | "POST" | "PUT" | "DELETE", method: "GET" | "POST" | "PUT" | "DELETE",
data?: object | any, data?: object | any,
responseType?: string responseType?: string,
isReject: boolean = false
) { ) {
return new Promise<any>(function (resolve, reject) { return new Promise<any>(function (resolve, reject) {
let header: any; let header: any;
...@@ -28,6 +29,7 @@ function request( ...@@ -28,6 +29,7 @@ function request(
responseType, responseType,
success(res: any) { success(res: any) {
hLoading(); hLoading();
if (isReject) return resolve(res);
if ( if (
res.data.code == 200 || res.data.code == 200 ||
res.data.code == 400 || res.data.code == 400 ||
...@@ -38,7 +40,6 @@ function request( ...@@ -38,7 +40,6 @@ function request(
toast(res.data.msg); toast(res.data.msg);
reject(res); reject(res);
} else { } else {
let dd = {};
console.log(res.data.Result, "非200错误"); console.log(res.data.Result, "非200错误");
if (!res.data.hasOwnProperty("code")) return resolve(res.data); if (!res.data.hasOwnProperty("code")) return resolve(res.data);
// res.data.has // res.data.has
......
import CryptoJS from "crypto-js";
/** /**
* @brief 提示框 * @brief 提示框
* @param zconfirm('是否清除数据', (result: boolean) => {if (result) { 确认 } else { 取消 } }) * @param zconfirm('是否清除数据', (result: boolean) => {if (result) { 确认 } else { 取消 } })
...@@ -116,7 +118,6 @@ export const appointmentConfigType = (type: string) => { ...@@ -116,7 +118,6 @@ export const appointmentConfigType = (type: string) => {
case "CLQD": case "CLQD":
str = "材料清单"; str = "材料清单";
break; break;
default: default:
break; break;
} }
...@@ -133,3 +134,53 @@ export const formattedText = (text: string) => { ...@@ -133,3 +134,53 @@ export const formattedText = (text: string) => {
return text; return text;
} }
}; };
const key = "lqkj456789A10086"; // 32位
const iv = "lqkj567890A10086"; // 16位
// 加密
export const encrypt = (text: string) => {
return CryptoJS.AES.encrypt(text, CryptoJS.enc.Utf8.parse(key), {
iv: CryptoJS.enc.Utf8.parse(iv),
mode: CryptoJS.mode.CBC,
padding: CryptoJS.pad.Pkcs7,
}).toString();
};
// 解密
export const decrypt = (text: string) => {
let decrypted = CryptoJS.AES.decrypt(text, CryptoJS.enc.Utf8.parse(key), {
iv: CryptoJS.enc.Utf8.parse(iv),
mode: CryptoJS.mode.CBC,
padding: CryptoJS.pad.Pkcs7,
});
return decrypted.toString(CryptoJS.enc.Utf8);
};
// 香港身份证校验
export const isXgIDCard = (str: string) => {
const checkIDCard = /^[A-Z]\d{6}\([\dA]\)$/;
// console.log(checkIDCard.test(str));
if (checkIDCard.test(str)) {
let hash = (str.substring(0, 1).toUpperCase().charCodeAt(0) - 64) * 8;
for (let i = 1; i <= 6; i++) {
hash += parseInt(str.substring(i, i + 1)) * (8 - i);
}
// console.log(hash);
const validateNo = hash % 11;
let ret: any = "";
if (validateNo == 1) {
ret = "A";
} else {
ret = 11 - validateNo;
}
// console.log(ret);
if (str.substring(8, 9) == ret) {
return true;
} else {
return false;
}
} else {
return false;
}
};
...@@ -65,7 +65,7 @@ export default defineConfig({ ...@@ -65,7 +65,7 @@ export default defineConfig({
// secure: false, // secure: false,
// }, // },
"/K3Cloud": { "/K3Cloud": {
target: "http://192.168.1.168:83", target: "http://192.168.1.168",
// target: "http://192.168.1.61/", // target: "http://192.168.1.61/",
secure: false, secure: false,
}, },
......
...@@ -1127,6 +1127,11 @@ ...@@ -1127,6 +1127,11 @@
resolved "https://registry.npmmirror.com/@types/estree/-/estree-1.0.1.tgz#aa22750962f3bf0e79d753d3cc067f010c95f194" resolved "https://registry.npmmirror.com/@types/estree/-/estree-1.0.1.tgz#aa22750962f3bf0e79d753d3cc067f010c95f194"
integrity sha512-LG4opVs2ANWZ1TJoKc937iMmNstM/d0ae1vNbnBvBhqCSezgVUOzcLCqbI5elV8Vy6WKwKjaqR+zO9VKirBBCA== integrity sha512-LG4opVs2ANWZ1TJoKc937iMmNstM/d0ae1vNbnBvBhqCSezgVUOzcLCqbI5elV8Vy6WKwKjaqR+zO9VKirBBCA==
"@types/file-saver@^2.0.5":
version "2.0.5"
resolved "https://registry.npmmirror.com/@types/file-saver/-/file-saver-2.0.5.tgz#9ee342a5d1314bb0928375424a2f162f97c310c7"
integrity sha512-zv9kNf3keYegP5oThGLaPk8E081DFDuwfqjtiTzm6PoxChdJ1raSuADf2YGCVIyrSynLrgc8JWv296s7Q7pQSQ==
"@types/minimist@^1.2.0": "@types/minimist@^1.2.0":
version "1.2.2" version "1.2.2"
resolved "https://registry.npmmirror.com/@types/minimist/-/minimist-1.2.2.tgz#ee771e2ba4b3dc5b372935d549fd9617bf345b8c" resolved "https://registry.npmmirror.com/@types/minimist/-/minimist-1.2.2.tgz#ee771e2ba4b3dc5b372935d549fd9617bf345b8c"
...@@ -2007,6 +2012,11 @@ cross-spawn@^7.0.1, cross-spawn@^7.0.3: ...@@ -2007,6 +2012,11 @@ cross-spawn@^7.0.1, cross-spawn@^7.0.3:
shebang-command "^2.0.0" shebang-command "^2.0.0"
which "^2.0.1" which "^2.0.1"
crypto-js@^4.1.1:
version "4.1.1"
resolved "https://registry.npmmirror.com/crypto-js/-/crypto-js-4.1.1.tgz#9e485bcf03521041bd85844786b83fb7619736cf"
integrity sha512-o2JlM7ydqd3Qk9CA0L4NL6mTzU2sdx96a+oOfPu8Mkl/PK51vSyoi8/rQ8NknZtk44vq15lmhAj9CIAGwgeWKw==
css-font-size-keywords@^1.0.0: css-font-size-keywords@^1.0.0:
version "1.0.0" version "1.0.0"
resolved "https://registry.npmmirror.com/css-font-size-keywords/-/css-font-size-keywords-1.0.0.tgz#854875ace9aca6a8d2ee0d345a44aae9bb6db6cb" resolved "https://registry.npmmirror.com/css-font-size-keywords/-/css-font-size-keywords-1.0.0.tgz#854875ace9aca6a8d2ee0d345a44aae9bb6db6cb"
...@@ -2512,6 +2522,11 @@ fastq@^1.6.0: ...@@ -2512,6 +2522,11 @@ fastq@^1.6.0:
dependencies: dependencies:
reusify "^1.0.4" reusify "^1.0.4"
file-saver@^2.0.5:
version "2.0.5"
resolved "https://registry.npmmirror.com/file-saver/-/file-saver-2.0.5.tgz#d61cfe2ce059f414d899e9dd6d4107ee25670c38"
integrity sha512-P9bmyZ3h/PRG+Nzga+rbdI4OEpNDzAVyy74uVO9ATgzLK6VtAsYybF/+TOCvrc0MO793d6+42lLyZTw7/ArVzA==
fill-range@^4.0.0: fill-range@^4.0.0:
version "4.0.0" version "4.0.0"
resolved "https://registry.npmmirror.com/fill-range/-/fill-range-4.0.0.tgz#d544811d428f98eb06a63dc402d2403c328c38f7" resolved "https://registry.npmmirror.com/fill-range/-/fill-range-4.0.0.tgz#d544811d428f98eb06a63dc402d2403c328c38f7"
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论