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

更新代码

上级 f9fcce6c
......@@ -24,7 +24,10 @@
"@dcloudio/uni-mp-toutiao": "3.0.0-alpha-3061620221230002",
"@dcloudio/uni-mp-weixin": "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",
"file-saver": "^2.0.5",
"node-sass": "^7.0.1",
"pinia": "^2.0.21",
"pinia-plugin-persistedstate": "^3.1.0",
......
import request from "@/utils/request"
import request from "@/utils/request";
/**
* @brief 查阅预约
* @brief 存放预约
* @param data
* @return
*/
export const depositReservation = (data: any) => {
export const depositReservation = (data: any, isReject: boolean = false) => {
return request(
"/LQKJ.K3.FileSystem.WebApi.WebApiService.Deposit,LQKJ.K3.FileSystem.WebApi.common.kdsvc",
"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 @@
class="time-item"
@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 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 class="line">
......@@ -31,10 +31,10 @@
class="time-item"
@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 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>
......@@ -72,8 +72,13 @@
<view class="time">{{ item.Time }}</view>
<view
class="time-detail"
:style="{ color: item.FREMAINDERNUMBER ? '' : '#999999' }"
>{{ item.FREMAINDERNUMBER ? "可预约" : "已约满" }}</view
:style="{
color:
item.FREMAINDERNUMBER > 0 && item.type == '0' ? '' : '#999999',
}"
>{{
item.FREMAINDERNUMBER > 0 && item.type == "0" ? "可预约" : "已约满"
}}</view
>
</view>
</view>
......@@ -89,7 +94,12 @@
<view v-show="show" class="prompt">
<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>
</template>
......@@ -117,6 +127,10 @@ const props = defineProps({
type: Boolean,
default: false,
},
date: {
type: String,
default: "",
},
});
const emits = defineEmits(["change", "onConfirm"]);
......@@ -137,18 +151,14 @@ const appointmentTime = computed(() => {
});
const isFull = (row: any) => {
return (
row.afternoon.some((item: any) => {
item.FREMAINDERNUMBER > 0;
}) &&
row.morning.some((item: any) => {
item.FREMAINDERNUMBER > 0;
})
let list = [...row.afternoon, ...row.morning].filter(
(item: any) => item.FREMAINDERNUMBER === 0
);
return !(list.length === [...row.afternoon, ...row.morning].length);
};
const change = (item: any, index: number) => {
if (item.active || item.show) return;
if (item.active || item.show || !isFull(item)) return;
state.FEntryID = null;
emits("change", "");
state.current = index;
......@@ -166,7 +176,8 @@ const btnChange = (type: string) => {
};
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;
emits("change", item);
state.FEntryID = item.FEntryID;
......
......@@ -22,9 +22,17 @@
}
},
{
"path": "pages/myReservation/login",
"style": {
"navigationBarTitleText": "档案预约",
"navigationStyle": "custom"
}
},
{
"path": "pages/refer/index",
"style": {
"navigationBarTitleText": "档案查阅预约"
"navigationBarTitleText": "档案查阅预约",
"navigationStyle": "custom"
}
},
{
......
......@@ -50,6 +50,7 @@
<script setup lang="ts">
import { depositReservation } from "@/api/deposit";
import { isXgIDCard } from "@/utils/util";
const form = ref();
const uniA: any = uni;
......@@ -74,7 +75,7 @@ const data = reactive({
},
{
validator: (rule: any, value: any, callback: any) => {
return uniA.$u.test.idCard(value);
return uniA.$u.test.idCard(value) || isXgIDCard(value);
},
message: "身份证号不正确",
trigger: ["change", "blur"],
......
......@@ -9,7 +9,7 @@
v-model="state.current"
@change="change"
></u-tabs>
<view class="my-list">
<view v-if="list.length" class="my-list">
<view
v-for="item in list"
:key="item.FID"
......@@ -17,7 +17,7 @@
:style="{
backgroundColor: state.FID === item.FID ? '#DDF3FF' : '',
}"
@tap="tapItem(item.FID)"
@tap="tapItem(item)"
>
<view class="my-item-left">
<view class="my-time"
......@@ -30,6 +30,13 @@
<view class="my-item-right">{{ item.FHANDLESTATES }}</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
>
......@@ -50,6 +57,7 @@ import {
cancelReservation,
} from "../../api/transfer";
import { toast, zconfirm } from "@/utils/util";
import { useGlobalStore } from "@/store/useStore";
const state = reactive({
list: [
......@@ -63,17 +71,22 @@ const state = reactive({
current: 0,
FID: "",
});
const globalStore = useGlobalStore();
const paramsData = ref({} as any);
const list = ref([] as any);
const tapItem = (id: string) => {
if (state.FID === id) return (state.FID = "");
state.FID = id;
const tapItem = (row: string) => {
if (row.FHANDLESTATES != "未办理") return;
if (state.FID === row.FID) return (state.FID = "");
state.FID = row.FID;
};
const change = (e: any) => {
state.current = e;
state.FID = "";
init();
};
......@@ -83,11 +96,11 @@ const onConfirm = async () => {
if (result) {
const { data: res } = await cancelReservation({
Fid: state.FID,
Type: state.current,
Type: state.current ? "YJYY" : "CYYY",
});
if (res.code === 200) {
console.log(res);
init();
state.FID = "";
toast("取消预约成功");
}
}
......@@ -103,20 +116,21 @@ const initAppointmentConfig = async () => {
paramsData.value.WXTS = item.WXTS[0];
}
});
console.log(paramsData.value);
// console.log(paramsData.value);
}
}
};
const init = async () => {
console.log(state.current);
const { data: res } = await selectYuYue({
Phone: "18874693873",
Phone: globalStore.phone,
Type: state.current,
pageIndex: 1,
pageSize: 999,
});
console.log(res);
// console.log(res);
if (res.code == 200) {
list.value = res.data;
list.value = res.data || [];
}
};
......@@ -164,8 +178,8 @@ onMounted(async () => {
justify-content: space-between;
align-items: center;
background: #ffffff;
box-shadow: 0rpx 8rpx 20rpx 0rpx rgba(0, 0, 0, 0.03);
border-radius: 16rpx 16rpx 16rpx 16rpx;
box-shadow: 0rpx 8rpx 14rpx 8rpx rgba(0, 0, 0, 0.03);
border-radius: 16rpx;
margin-bottom: 32rpx;
.my-item-left {
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 @@
</template>
</workGuide>
</template>
<script setup lang="ts">
import { appointmentConfig } from "@/api/transfer";
import workGuide from "@/pages/workGuide/index.vue";
......@@ -16,22 +15,26 @@ const paramsData = ref({} as any);
// 初始化数据
const init = async () => {
const { data: res } = await appointmentConfig("E");
if (res.code === 200) {
if (res.code === 200) {
res.data.forEach((item: any) => {
if (item.hasOwnProperty("WXTS")) {
paramsData.value.WXTS = item.WXTS[0];
}
if (item.hasOwnProperty("MB")) {
paramsData.value.MB = item.MB;
}
if (item.hasOwnProperty("CLQD")) {
paramsData.value.CLQD = item.CLQD[0];
const {
data: { code, data: items },
} = await appointmentConfig("E");
if (code === 200) {
const properties = ["WXTS", "CLQD", "SYTP", "DZMC"];
items.forEach((item: any) => {
properties.forEach((property) => {
if (item.hasOwnProperty(property)) {
paramsData.value[property] = item[property][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 @@
<u-form-item prop="FDAIDCard">
<u-input
v-model="state.parmeters.Model.FDAIDCard"
type="number"
placeholder="请输入档案人身份证"
/>
</u-form-item>
......@@ -29,7 +28,6 @@
>
<u-input
v-model="state.parmeters.Model.FDAIDCard1"
type="number"
placeholder="请输入档案人2身份证"
/>
</u-form-item>
......@@ -61,7 +59,6 @@
<u-form-item prop="FIDCard" v-if="show">
<u-input
v-model="state.parmeters.Model.FIDCard"
type="number"
placeholder="请输入查阅人身份证号"
/>
</u-form-item>
......@@ -113,8 +110,9 @@
<script setup lang="ts">
import { verification } from "@/api/transfer";
import { toast } from "@/utils/util";
import { isXgIDCard, toast } from "@/utils/util";
import { useGlobalStore } from "@/store/useStore";
import { depositReservation } from "@/api/deposit";
defineProps({
wxts: String,
......@@ -136,7 +134,7 @@ const state = reactive({
FDatetime: "", //查阅时间
FReservationQty: "", //查阅次数
FReferToType: "本人查阅", //查阅类型 0:个人,1:他人
FDAPhoneNumber: "", //档案人手机号
// FDAPhoneNumber: "", //档案人手机号
FDAName: "", //档案人姓名
FDAIDCard: "", //档案人身份证
FDAName1: "", // 档案人姓名1
......@@ -160,7 +158,7 @@ const state = reactive({
},
{
validator: (rule: any, value: any, callback: any) => {
return uniA.$u.test.idCard(value);
return uniA.$u.test.idCard(value) || isXgIDCard(value);
},
message: "身份证号不正确",
trigger: ["blur"],
......@@ -181,7 +179,7 @@ const state = reactive({
},
{
validator: (rule: any, value: any, callback: any) => {
return uniA.$u.test.idCard(value);
return uniA.$u.test.idCard(value) || isXgIDCard(value);
},
message: "身份证号不正确",
trigger: ["blur"],
......@@ -206,7 +204,7 @@ const state = reactive({
{
required: true,
message: "请输入查阅人姓名",
trigger: [, "blur"],
trigger: ["blur"],
},
],
FIDCard: [
......@@ -217,7 +215,7 @@ const state = reactive({
},
{
validator: (rule: any, value: any, callback: any) => {
return uniA.$u.test.idCard(value);
return uniA.$u.test.idCard(value) || isXgIDCard(value);
},
message: "身份证号不正确",
trigger: ["blur"],
......@@ -290,14 +288,41 @@ watch(
{ 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 = () => {
form.value.validate(async (valid: boolean) => {
if (valid) {
console.log(state.parmeters);
// if (state.tips == "重新获取") return toast("验证码失效");
// if (state.codeValue !== state.parmeters.Model.code)
// return toast("验证码不正确");
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);
uni.navigateTo({
url: "/pages/refer/referReservation",
......@@ -323,7 +348,7 @@ const getCode = async () => {
// return toast("手机号为空或手机号格式不正确");
if (uCode.value.canGetCode) {
// 模拟向后端请求验证码
const { state: res } = await verification(
const { data: res } = await verification(
state.parmeters.Model.FPhoneNumber
);
if (res.code == 200) {
......
......@@ -38,21 +38,26 @@ const onConfirm = () => {
if (!state.fid) return toast("选择预约时间");
zconfirm("确认预约?", async (result: boolean) => {
if (result) {
let params: any = globalStore.referData || "{}";
let params: any =
JSON.parse(JSON.stringify(globalStore.referData)) || "{}";
params.FEntryID = state.fid;
params.Model.FDAPhoneNumber = params.Model.FPhoneNumber;
params.Model.FReferToType = "本人查阅" ? "0" : "1";
params.Model.FReservationQty = "本人查阅"
? 0
: params.Model.FReservationQty;
console.log(params, "params");
params.Model.FReferToType =
params.Model.FReferToType === "本人查阅" ? "0" : "1";
params.Model.FReservationQty =
params.Model.FReferToType === "本人查阅"
? 0
: params.Model.FReservationQty;
// console.log(params, "params");
const { data: res } = await referReservation({
parmeters: JSON.stringify(params),
});
if (res.code === 200) {
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 () => {
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 () => {
let data = {
......@@ -81,18 +89,22 @@ const init = async () => {
if (res.code === 200) {
list.value = [];
let flag = true;
let isCurrent = true;
res.data.slice(0, 7).map((item: any, i: number) => {
list.value.push({
active: flag && item.FISRESTDAYS === "0" ? true : false,
active: flag && item.FISRESTDAYS === "0" && isFull(item.data),
week: item.WeekdayName,
date: item.Date,
show: item.FISRESTDAYS === "1" ? true : false,
morning: item.data.filter((el: any) => el.TimeType == "0"),
afternoon: item.data.filter((el: any) => el.TimeType == "1"),
show: item.FISRESTDAYS === "1",
morning: item.data.filter((el: any) => el.TimeType === "0"),
afternoon: item.data.filter((el: any) => el.TimeType === "1"),
});
if (item.FISRESTDAYS === "0") {
appointmentTimeRef.value.current = i;
if (item.FISRESTDAYS === "0" && isFull(item.data)) {
flag = false;
if (!appointmentTimeRef.value.current && isCurrent) {
appointmentTimeRef.value.current = i;
isCurrent = false;
}
}
});
appointmentTimeRef.value.list = list.value;
......
......@@ -73,7 +73,7 @@
<script setup lang="ts">
import { useGlobalStore } from "@/store/useStore";
import { toast } from "@/utils/util";
import { toast, isXgIDCard } from "@/utils/util";
import { verification, appointmentConfig } from "@/api/transfer";
import workGuide from "@/pages/workGuide/index.vue";
......@@ -123,7 +123,7 @@ const data = reactive({
},
{
validator: (rule: any, value: any, callback: any) => {
return uniA.$u.test.idCard(value);
return uniA.$u.test.idCard(value) || isXgIDCard(value);
},
message: "身份证号不正确",
trigger: ["blur"],
......@@ -235,8 +235,14 @@ onReady(async () => {
if (item.hasOwnProperty("CLQD")) {
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>
......
......@@ -17,6 +17,7 @@
ref="appointmentTimeRef"
time-title="选择上门时间"
:show="state.isReservation"
:date="state.successDate"
:prompt="state.paramsData?.WXTSX?.FCONTENT"
@change="reservationChange"
@on-confirm="onConfirm"
......@@ -52,6 +53,7 @@ const state = reactive({
fid: undefined,
paramsData: {} as any,
isReservation: false,
successDate: "",
});
const appointmentTimeRef = ref();
......@@ -96,12 +98,23 @@ const upload = (type: number) => {
FEntryID: state.fid,
type,
},
success: (uploadFileRes: any) => {
success: async (uploadFileRes: any) => {
const res = JSON.parse(uploadFileRes.data);
if (res.code === 200) {
state.isReservation = true;
// init();
toast("预约成功");
list.value.map((item: any) => {
[...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) {
zconfirm(res.msg, (e: boolean) => {
if (e) {
......@@ -125,10 +138,15 @@ const initAppointmentConfig = async () => {
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 () => {
let data = {
......@@ -138,27 +156,30 @@ const init = async () => {
if (res.code === 200) {
list.value = [];
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({
active: flag && item.FISRESTDAYS === "0" ? true : false,
active: flag && item.FISRESTDAYS === "0" && isFull(item.data),
week: item.WeekdayName,
date: item.Date,
show: item.FISRESTDAYS === "1" ? true : false,
morning: item.data.filter((el: any) => el.TimeType == "0"),
afternoon: item.data.filter((el: any) => el.TimeType == "1"),
show: item.FISRESTDAYS === "1",
morning: item.data.filter((el: any) => el.TimeType === "0"),
afternoon: item.data.filter((el: any) => el.TimeType === "1"),
});
if (item.FISRESTDAYS === "0") {
appointmentTimeRef.value.current = i;
if (item.FISRESTDAYS === "0" && isFull(item.data)) {
flag = false;
if (!appointmentTimeRef.value.current && isCurrent) {
appointmentTimeRef.value.current = i;
isCurrent = false;
}
}
});
appointmentTimeRef.value.list = list.value;
initAppointmentConfig();
console.log(list.value);
}
};
onMounted(async () => {
onMounted(() => {
init();
});
</script>
......
......@@ -18,12 +18,20 @@
<view class="guide-map">
<u-image
src="@/static/img/Frame545.png"
:src="baseUrl + '/' + data?.SYTP?.ImagePath"
width="100%"
height="160rpx"
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
class="custom-style"
shape="circle"
......@@ -34,7 +42,7 @@
</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-title">{{ item.FILENAME.split(".")[0] }}</view>
<u-image
......@@ -52,8 +60,8 @@
<script setup lang="ts">
import { appointmentConfigType, toast, zconfirm } from "@/utils/util";
import { attachmentDownLoad } from "@/api/transfer";
import { baseUrl } from "@/utils/request";
import { saveAs } from "file-saver";
const props = defineProps({
title: String,
......@@ -65,24 +73,53 @@ const toLookAll = () => {
};
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) => {
if (result) {
try {
const url = baseUrl + "/" + row.FILEPATH;
const a = document.createElement("a");
a.href = url;
a.download = row.FILENAME;
a.click();
} catch (error) {
if (uni.getSystemInfoSync().platform === "ios") downFileIOS(row);
else downFileWindows(row);
}
});
};
const nav: any = navigator;
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("下载失败");
}
}
},
});
};
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>
<style lang="scss" scoped>
......@@ -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>
......@@ -25,6 +25,8 @@
</template>
<script setup lang="ts">
import guide from "./guide.vue";
defineProps({
title: String,
data: Object,
......@@ -33,8 +35,6 @@ defineProps({
default: true,
},
});
import guide from "./guide.vue";
</script>
<style scoped></style>
......@@ -5,7 +5,7 @@
<view class="attr">{{ data.paramsData?.DZMC?.FCONTENT }}</view>
</view>
<u-image
src="../../static/img/attr.png"
:src="baseUrl + '/' + data.paramsData?.SYTP?.ImagePath"
width="100%"
height="320rpx"
border-radius="8rpx"
......@@ -23,7 +23,7 @@
<view class="title">导航搜索:</view>
<view class="detail">{{ data.paramsData?.DHSS?.FCONTENT }}</view>
</view>
<map
class="attr-map"
:latitude="data.paramsData?.JWD?.FCONTENT.split(',')[0]"
......@@ -37,6 +37,7 @@
<script setup lang="ts">
import { appointmentConfig } from "@/api/transfer";
import { formattedText } from "@/utils/util";
import { baseUrl } from "../../utils/request.ts";
const data = reactive({
paramsData: {} as any,
......@@ -60,6 +61,9 @@ const init = async () => {
if (item.hasOwnProperty("DHSS")) {
data.paramsData.DHSS = item.DHSS[0];
}
if (item.hasOwnProperty("SYTP")) {
data.paramsData.SYTP = item.SYTP[0];
}
if (item.hasOwnProperty("DZMC")) {
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({
transferData: null,
referData: null,
infoData: {} as any,
phone: "",
};
},
getters: {},
......@@ -22,6 +23,9 @@ export const useGlobalStore = defineStore({
setInfoData(infoData: string) {
this.infoData = infoData;
},
setPhone(phone: string) {
this.phone = phone;
},
},
persist: piniaPersistOption("globalStore"),
});
......
declare module 'vk-uview-ui'
\ No newline at end of file
declare module "vk-uview-ui";
declare module "crypto-js";
declare module "file-saver";
......@@ -10,7 +10,8 @@ function request(
url: string,
method: "GET" | "POST" | "PUT" | "DELETE",
data?: object | any,
responseType?: string
responseType?: string,
isReject: boolean = false
) {
return new Promise<any>(function (resolve, reject) {
let header: any;
......@@ -28,6 +29,7 @@ function request(
responseType,
success(res: any) {
hLoading();
if (isReject) return resolve(res);
if (
res.data.code == 200 ||
res.data.code == 400 ||
......@@ -38,7 +40,6 @@ function request(
toast(res.data.msg);
reject(res);
} else {
let dd = {};
console.log(res.data.Result, "非200错误");
if (!res.data.hasOwnProperty("code")) return resolve(res.data);
// res.data.has
......
import CryptoJS from "crypto-js";
/**
* @brief 提示框
* @param zconfirm('是否清除数据', (result: boolean) => {if (result) { 确认 } else { 取消 } })
......@@ -116,7 +118,6 @@ export const appointmentConfigType = (type: string) => {
case "CLQD":
str = "材料清单";
break;
default:
break;
}
......@@ -133,3 +134,53 @@ export const formattedText = (text: string) => {
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({
// secure: false,
// },
"/K3Cloud": {
target: "http://192.168.1.168:83",
target: "http://192.168.1.168",
// target: "http://192.168.1.61/",
secure: false,
},
......
......@@ -1127,6 +1127,11 @@
resolved "https://registry.npmmirror.com/@types/estree/-/estree-1.0.1.tgz#aa22750962f3bf0e79d753d3cc067f010c95f194"
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":
version "1.2.2"
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:
shebang-command "^2.0.0"
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:
version "1.0.0"
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:
dependencies:
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:
version "4.0.0"
resolved "https://registry.npmmirror.com/fill-range/-/fill-range-4.0.0.tgz#d544811d428f98eb06a63dc402d2403c328c38f7"
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论