提交 b2a32ac8 authored 作者: 刘旭's avatar 刘旭

同步代码

上级 4cac610a
...@@ -37,3 +37,15 @@ export const signInAndOut = (data?: any) => ...@@ -37,3 +37,15 @@ export const signInAndOut = (data?: any) =>
"POST", "POST",
data data
) )
/**
* @brief 查看附件
* @param data
* @return
*/
export const geFileList = (data?: any) =>
request(
"/LQKJ.K3.PeiXunSystem.WebApi.WebApiService.FilePDF,LQKJ.K3.PeiXunSystem.WebApi.common.kdsvc",
"POST",
data
)
{ {
"name" : "wms测试", "name": "wms测试",
"appid" : "__UNI__6D85B85", "appid": "__UNI__6D85B85",
"description" : "", "description": "",
"versionName" : "1.0.1", "versionName": "1.0.1",
"versionCode" : "100", "versionCode": "100",
"transformPx" : false, "transformPx": false,
/* 5+App特有相关 */ /* 5+App特有相关 */
"app-plus" : { "app-plus": {
"usingComponents" : true, "usingComponents": true,
"nvueStyleCompiler" : "uni-app", "nvueStyleCompiler": "uni-app",
"compilerVersion" : 3, "compilerVersion": 3,
"splashscreen" : { "splashscreen": {
"alwaysShowBeforeRender" : true, "alwaysShowBeforeRender": true,
"waiting" : true, "waiting": true,
"autoclose" : true, "autoclose": true,
"delay" : 0 "delay": 0
}, },
"compatible" : { "compatible": {
"ignoreVersion" : true "ignoreVersion": true
}, },
/* 模块配置 */ /* 模块配置 */
"modules" : { "modules": {
"Bluetooth" : {}, "Bluetooth": {},
"Barcode" : {}, "Barcode": {},
"Geolocation" : {}, "Geolocation": {},
"Webview-x5" : {} "Webview-x5": {}
}, },
/* 应用发布信息 */ /* 应用发布信息 */
"distribute" : { "distribute": {
/* android打包配置 */ /* android打包配置 */
"android" : { "android": {
"permissions" : [ "permissions": [
"<uses-feature android:name=\"android.hardware.camera\"/>", "<uses-feature android:name=\"android.hardware.camera\"/>",
"<uses-feature android:name=\"android.hardware.camera.autofocus\"/>", "<uses-feature android:name=\"android.hardware.camera.autofocus\"/>",
"<uses-permission android:name=\"android.permission.ACCESS_COARSE_LOCATION\"/>", "<uses-permission android:name=\"android.permission.ACCESS_COARSE_LOCATION\"/>",
...@@ -54,53 +54,53 @@ ...@@ -54,53 +54,53 @@
"<uses-permission android:name=\"android.permission.BLUETOOTH\"/>", "<uses-permission android:name=\"android.permission.BLUETOOTH\"/>",
"<uses-permission android:name=\"android.permission.BLUETOOTH_ADMIN\"/>" "<uses-permission android:name=\"android.permission.BLUETOOTH_ADMIN\"/>"
], ],
"minSdkVersion" : 21 "minSdkVersion": 21
}, },
/* ios打包配置 */ /* ios打包配置 */
"ios" : { "ios": {
"dSYMs" : false "dSYMs": false
}, },
/* SDK配置 */ /* SDK配置 */
"sdkConfigs" : { "sdkConfigs": {
"ad" : {}, "ad": {},
"geolocation" : { "geolocation": {
"system" : { "system": {
"__platform__" : [ "android" ] "__platform__": ["android"]
} }
} }
} }
} }
}, },
/* 快应用特有相关 */ /* 快应用特有相关 */
"quickapp" : {}, "quickapp": {},
/* 小程序特有相关 */ /* 小程序特有相关 */
"mp-weixin" : { "mp-weixin": {
"appid" : "wx3c4c615b24d3b72b", "appid": "wx3c4c615b24d3b72b",
"setting" : { "setting": {
"urlCheck" : false "urlCheck": false
}, },
"usingComponents" : true "usingComponents": true
}, },
"mp-alipay" : { "mp-alipay": {
"usingComponents" : true "usingComponents": true
}, },
"mp-baidu" : { "mp-baidu": {
"usingComponents" : true "usingComponents": true
}, },
"mp-toutiao" : { "mp-toutiao": {
"usingComponents" : true "usingComponents": true
}, },
"uniStatistics" : { "uniStatistics": {
"enable" : false, "enable": false,
"version" : "2" "version": "2"
}, },
"vueVersion" : "3", "vueVersion": "3",
"h5" : { "h5": {
"template" : "index.html", "template": "index.html",
"sdkConfigs" : { "sdkConfigs": {
"maps" : { "maps": {
"qqmap" : { "qqmap": {
"key" : "3M5BZ-SFCRJ-AHSF7-XRA5Q-Y6NIJ-DXBH4" "key": "3M5BZ-SFCRJ-AHSF7-XRA5Q-Y6NIJ-DXBH4"
} }
} }
} }
......
...@@ -41,7 +41,8 @@ ...@@ -41,7 +41,8 @@
"path": "pages/class/courseArrange", "path": "pages/class/courseArrange",
"style": { "style": {
"navigationBarTitleText": "课程安排", "navigationBarTitleText": "课程安排",
"navigationStyle": "custom" "navigationStyle": "custom",
"onReachBottomDistance": 50
} }
}, },
{ {
......
<template> <template>
<view class='arrange-item-container'> <view class="arrange-item-container">
<h3>{{ arrangeList.date }}</h3> <h3>
&nbsp;{{ dayjs(arrangeItem.startDate).format("YYYY-MM-DD") }}&nbsp;&nbsp;
{{
dateFormat(arrangeItem.startDate) +
"~" +
dateFormat(arrangeItem.endDate)
}}
</h3>
<u-card :show-head="false" margin="0"> <u-card :show-head="false" margin="0">
<template #body> <template #body>
<view class="arrange-header"> <view class="arrange-header">
<h3>{{ arrangeList.title }}</h3> <h3>{{ arrangeItem.courseName }}</h3>
<u-button size="mini" plain :type="arrangeStatus.type">{{ arrangeStatus.detail }}</u-button> <u-button size="mini" plain :type="arrangeStatus.type">{{
arrangeStatus.detail
}}</u-button>
</view> </view>
<view class="item"> <view class="item">
<u-icon name="account" /> <u-icon name="account" />
<text>{{ arrangeList.classTeacher }}</text> <text v-for="(item, i) in arrangeItem.Teachs" :key="i">
&nbsp;{{ item.teachName }}&nbsp;
</text>
</view> </view>
<view class="item"> <view class="item">
<u-icon name="map" /> <u-icon name="map" />
<text>{{ arrangeList.address }}</text> <text>&nbsp;{{ arrangeItem.classArea }}&nbsp;</text>
</view> </view>
</template> </template>
<template #foot> <template #foot>
<view class="arrange-footer"> <view class="arrange-footer" @tap="openInfo">
<u-icon name="order" /> <u-icon name="order" />
<text>课程安排</text> <text>课件资料</text>
</view> </view>
</template> </template>
</u-card> </u-card>
</view> </view>
<infoPopup
ref="infoRef"
v-model:show="show"
:courseNumber="props.arrangeItem.courseNumber"
/>
</template> </template>
<script setup lang='ts'> <script setup lang="ts">
import infoPopup from "@/pages/course/components/infoPopup.vue"
import dayjs from "dayjs"
const props = defineProps({ const props = defineProps({
arrangeList: { arrangeItem: {
type: Array, type: Array,
default: () => [] default: () => [],
} as any } as any,
}) })
const arrangeDetail = ['未开始', '上课中', '已下课'] const show = ref(false)
const infoRef = ref()
const arrangeDetail = ["未开始", "上课中", "已下课"]
const arrangeStatus = computed(() => { const arrangeStatus = computed(() => {
const statusObj = { const statusObj = {
type: '', type: "",
detail: '' detail: "",
}; }
switch (props.arrangeList.type) { switch (props.arrangeItem.courseType) {
case 0: case 0:
statusObj.type = 'warning'; statusObj.type = "warning"
break; break
case 1: case 1:
statusObj.type = 'primary'; statusObj.type = "primary"
break; break
case 2: case 2:
statusObj.type = 'info'; statusObj.type = "info"
break; break
} }
statusObj.detail = arrangeDetail[props.arrangeList.type] statusObj.detail = arrangeDetail[props.arrangeItem.courseType]
return statusObj; return statusObj
}); })
const dateFormat = (dateStr: string) => {
// 创建一个日期对象,传入特定日期和时间
const date = new Date(dateStr)
// 获取小时和分钟
const hours = ("0" + date.getHours()).slice(-2)
const minutes = ("0" + date.getMinutes()).slice(-2)
// 构建时间字符串
const time = hours + ":" + minutes
return time
}
const openInfo = () => {
show.value = true
infoRef.value.init()
}
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>
......
...@@ -93,7 +93,7 @@ const toAddressBook = () => { ...@@ -93,7 +93,7 @@ const toAddressBook = () => {
} }
const toCourseArrange = () => { const toCourseArrange = () => {
uni.navigateTo({ uni.navigateTo({
url: "/pages/class/courseArrange", url: "/pages/class/courseArrange?classId=" + props.classItem.classId,
}) })
} }
......
<template> <template>
<headers title='课程安排' /> <headers title="课程安排" />
<view class='course-arrange-container'> <view class="course-arrange-container">
<view class="progress"> <view class="progress">
<text>课程进度:</text> <text>课程进度:</text>
<u-line-progress active-color="#2979ff" :percent="60" :height="25" /> <u-line-progress active-color="#2979ff" :percent="percent" :height="25" />
</view> </view>
<view v-if="arrangeList.length">
<u-time-line> <u-time-line>
<u-time-line-item v-for="(item, index) in arrangeList" :key="index"> <u-time-line-item v-for="(item, index) in arrangeList" :key="index">
<template #node> <template #node>
...@@ -13,42 +14,71 @@ ...@@ -13,42 +14,71 @@
</view> </view>
</template> </template>
<template #content> <template #content>
<arrangeItem :arrangeList="item" /> <arrangeItem :arrangeItem="item" />
</template> </template>
</u-time-line-item> </u-time-line-item>
</u-time-line> </u-time-line>
<view style="padding: 20rpx">
<u-loadmore :status="status" icon-type="flower" />
</view>
</view>
<view v-else class="empty">
<u-empty text="暂无课程安排" mode="list" />
</view>
</view> </view>
</template> </template>
<script setup lang='ts'> <script setup lang="ts">
import headers from '@/components/header/index.vue' import headers from "@/components/header/index.vue"
import arrangeItem from './components/arrangeItem.vue' import arrangeItem from "./components/arrangeItem.vue"
import { getCourse } from "@/api/course"
import { useGlobalStore } from "@/store/useStore"
const arrangeList = ref([ const arrangeList = ref([] as any)
{ const globalStore = useGlobalStore()
title: '党支部书记班', const percent = ref()
date: '2022-04-01 09:00~12:00', // 课程时间 const listQuery = reactive({
address: '深圳市南山区西丽街道办公室', // 课程地点 Phone: globalStore.Phone,
classTeacher: '王少龙', // 班主任 pageIndex: 1,
type: 0 // 0 未开始, 1 上课中, 2 已下课 pageSize: 999,
}, total: 0,
{ type: 5,
title: '党支部书记班', classId: "",
date: '2022-04-01 09:00~12:00', // 课程时间 })
address: '深圳市南山区西丽街道办公室', // 课程地点
classTeacher: '王少龙', // 班主任 const status = ref("loadmore")
type: 1 // 0 未开始, 1 上课中, 2 已下课
},
{
title: '党支部书记班',
date: '2022-04-01 09:00~12:00', // 课程时间
address: '深圳市南山区西丽街道办公室', // 课程地点
classTeacher: '王少龙', // 班主任
type: 2 // 0 未开始, 1 上课中, 2 已下课
}
])
onLoad((options: any) => {
listQuery.classId = options.classId
init()
})
// 上拉加载数据
onReachBottom(() => {
// 判断是否还有下一页数据
if (listQuery.pageIndex * listQuery.pageSize >= listQuery.total)
return (status.value = "nomore")
// // 判断是否正在请求其它数据,如果是,则不发起额外的请求
if (status.value === "loading") return
listQuery.pageIndex += 1
init()
})
const init = async () => {
status.value = "loading"
const { data: res } = await getCourse(listQuery)
if (res.code == 200) {
if (res.total > 10) status.value = "loadmore"
else status.value = "nomore"
arrangeList.value = [...arrangeList.value, ...res.data]
listQuery.total = res.total
let num: number = res.data.filter(
(item: any) => item.courseType === 2
).length
percent.value = (num / res.total) * 100
// console.log(arrangeList.value)
}
}
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>
...@@ -61,7 +91,6 @@ const arrangeList = ref([ ...@@ -61,7 +91,6 @@ const arrangeList = ref([
justify-content: center; justify-content: center;
padding: 26rpx 10rpx 50rpx 30rpx; padding: 26rpx 10rpx 50rpx 30rpx;
text { text {
display: block; display: block;
padding: 12rpx 0; padding: 12rpx 0;
......
...@@ -146,7 +146,11 @@ ...@@ -146,7 +146,11 @@
</view> </view>
</view> </view>
</view> </view>
<infoPopup v-model:show="infoState.show" /> <infoPopup
ref="infoRef"
v-model:show="infoState.show"
:courseNumber="props.courseItem.courseNumber"
/>
</template> </template>
<script setup lang="ts"> <script setup lang="ts">
...@@ -174,6 +178,7 @@ const props = defineProps({ ...@@ -174,6 +178,7 @@ const props = defineProps({
}) })
const isRange = ref(true) const isRange = ref(true)
const infoRef = ref()
const courseStore = useCourseStore() const courseStore = useCourseStore()
const globalStore = useGlobalStore() const globalStore = useGlobalStore()
...@@ -277,7 +282,7 @@ const signInStatus = computed(() => { ...@@ -277,7 +282,7 @@ const signInStatus = computed(() => {
} }
infoState.signInColor = signInColor infoState.signInColor = signInColor
console.log(signInStr, "signInStr") // console.log(signInStr, "signInStr")
return signInStr return signInStr
}) })
...@@ -366,6 +371,7 @@ const toSeeMore = () => { ...@@ -366,6 +371,7 @@ const toSeeMore = () => {
const openInfo = () => { const openInfo = () => {
infoState.show = true infoState.show = true
infoRef.value.init()
} }
</script> </script>
......
...@@ -8,51 +8,68 @@ ...@@ -8,51 +8,68 @@
@close="handeClose" @close="handeClose"
> >
<view class="info"> <view class="info">
<text class="title">课程资料</text> <block v-if="infoList.length">
<view v-for="(item, i) in 10" class="item"> <text class="title">课件资料</text>
<view v-for="(item, i) in infoList" :key="i" class="item">
<view> <view>
<u-icon name="order" size="50"></u-icon> <u-icon name="order" size="50"></u-icon>
<text>党性学习第一节课件.pdf</text> <text>{{ item.name }}</text>
</view> </view>
<view> <view>
<u-icon <u-icon
name="eye-fill" name="eye-fill"
size="50" size="50"
style="margin-right: 30rpx" style="margin-right: 30rpx"
@tap="pdfView" @tap="pdfView(item)"
></u-icon> ></u-icon>
<u-icon name="download" size="50" @tap="downLoadPdf"></u-icon> <u-icon name="download" size="50" @tap="downLoadPdf(item)"></u-icon>
</view> </view>
</view> </view>
</block>
<view v-else class="empty">
<u-empty text="暂无资料" mode="list" />
</view>
</view> </view>
</u-popup> </u-popup>
</template> </template>
<script setup lang="ts"> <script setup lang="ts">
import { toast, zconfirm } from "@/utils/util" import { zconfirm } from "@/utils/util"
import { geFileList } from "@/api/course"
import { baseUrl } from "@/utils/request"
const props = defineProps({ const props = defineProps({
show: { show: {
type: Boolean, type: Boolean,
default: false, default: false,
}, },
courseNumber: {
type: String,
default: "",
},
}) })
const emits = defineEmits(["update:show"]) const emits = defineEmits(["update:show"])
const pdfView = () => { const pdfView = (item: any) => {
uni.navigateTo({ uni.navigateTo({
url: "/pages/course/pdfView", url:
"/pages/course/pdfView?name=" +
item.name +
"&url=" +
encodeURIComponent(baseUrl + "/" + item.url),
}) })
} }
const downLoadPdf = () => { const infoList = ref([] as any)
const downLoadPdf = (item: any) => {
zconfirm("确定下载课件资料?", (result: boolean) => { zconfirm("确定下载课件资料?", (result: boolean) => {
if (result) { if (result) {
const url = "/static/pdf/web/compressed.tracemonkey-pldi-09.pdf" const url = baseUrl + "/" + item.url
const a = document.createElement("a") const a = document.createElement("a")
a.href = url a.href = url
a.download = "compressed.tracemonkey-pldi-09.pdf" a.download = item.name
a.click() a.click()
} }
}) })
...@@ -61,6 +78,18 @@ const downLoadPdf = () => { ...@@ -61,6 +78,18 @@ const downLoadPdf = () => {
const handeClose = () => { const handeClose = () => {
emits("update:show", false) emits("update:show", false)
} }
const init = async () => {
const { data: res } = await geFileList({ courseNumber: props.courseNumber })
if (res.code == 200) {
console.log(res)
infoList.value = res.data
}
}
defineExpose({
init,
})
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>
...@@ -84,13 +113,14 @@ const handeClose = () => { ...@@ -84,13 +113,14 @@ const handeClose = () => {
} }
.item { .item {
box-sizing: border-box;
display: flex; display: flex;
justify-content: space-between; justify-content: space-between;
align-items: center; align-items: center;
background-color: $u-type-info-light; background-color: $u-type-info-light;
width: 100%; width: 100%;
height: 100rpx; height: 100rpx;
padding: 20rpx; padding: 30rpx;
border-radius: 10rpx; border-radius: 10rpx;
margin-bottom: 20rpx; margin-bottom: 20rpx;
......
...@@ -177,7 +177,7 @@ onMounted(async () => { ...@@ -177,7 +177,7 @@ onMounted(async () => {
} }
} }
uni-modal { :deep(uni-modal) {
z-index: 19999 !important; z-index: 99999 !important;
} }
</style> </style>
<template> <template>
<headers title="预览pdf" /> <headers :title="pdfState.title" />
<view class="pdf-container"> <view class="pdf-container">
<web-view class="webview" :src="pdfState.pdfUrl"></web-view> <web-view class="webview" :src="pdfState.pdfUrl"></web-view>
</view> </view>
...@@ -9,45 +9,15 @@ ...@@ -9,45 +9,15 @@
import headers from "@/components/header/index.vue" import headers from "@/components/header/index.vue"
const pdfState = reactive({ const pdfState = reactive({
title: "",
pdfUrl: "", pdfUrl: "",
viewerUrl: "/static/pdf/web/viewer.html", viewerUrl: "/static/pdf/web/viewer.html",
fileUrl: "/static/pdf/web/compressed.tracemonkey-pldi-09.pdf",
}) })
const fetch = () => { onLoad((options: any) => {
// url类型 pdfState.title = options.name
// pdfState.urlStr = "" //这里是获取的url值
// pdfState.pdfUrl = `${pdfState.viewerUrl}?file=${encodeURIComponent(
// pdfState.urlStr
// )}`
pdfState.pdfUrl = pdfState.pdfUrl =
pdfState.viewerUrl + "?file=" + encodeURIComponent(pdfState.fileUrl) pdfState.viewerUrl + "?file=" + encodeURIComponent(options.url)
// base64类型:
// 代码中定义base64转blob方法
// pdfState.base64ToBlob()
// const base64Str = ''; // 这里是获取的base64值
// let result = base64Str.replace(/[\r\n]/g, "");
// let pdfBase64 = `data:application/pdf;base64,${result}`;
// let pdf = URL.createObjectURL(pdfState.base64ToBlob(pdfBase64)); // base64ToBlob就是第3步定义的方法
// pdfState.pdfUrl = `${pdfState.viewerUrl}?file=${encodeURIComponent(pdf)}`;
}
const base64ToBlob = (base64Data: any) => {
let arr = base64Data.split(","),
fileType = arr[0].match(/:(.*?);/)[1],
bstr = atob(arr[1]),
l = bstr.length,
u8Arr = new Uint8Array(l)
while (l--) {
u8Arr[l] = bstr.charCodeAt(l)
}
return new Blob([u8Arr], {
type: fileType,
})
}
onMounted(() => {
fetch()
}) })
</script> </script>
......
...@@ -1152,7 +1152,7 @@ const PDFViewerApplication = { ...@@ -1152,7 +1152,7 @@ const PDFViewerApplication = {
this.metadata = metadata; this.metadata = metadata;
this._contentDispositionFilename ??= contentDispositionFilename; this._contentDispositionFilename ??= contentDispositionFilename;
this._contentLength ??= contentLength; this._contentLength ??= contentLength;
console.log(`PDF ${pdfDocument.fingerprints[0]} [${info.PDFFormatVersion} ` + `${(info.Producer || "-").trim()} / ${(info.Creator || "-").trim()}] ` + `(PDF.js: ${_pdfjsLib.version || "?"} [${_pdfjsLib.build || "?"}])`); // console.log(`PDF ${pdfDocument.fingerprints[0]} [${info.PDFFormatVersion} ` + `${(info.Producer || "-").trim()} / ${(info.Creator || "-").trim()}] ` + `(PDF.js: ${_pdfjsLib.version || "?"} [${_pdfjsLib.build || "?"}])`);
let pdfTitle = info.Title; let pdfTitle = info.Title;
const metadataTitle = metadata?.get("dc:title"); const metadataTitle = metadata?.get("dc:title");
if (metadataTitle) { if (metadataTitle) {
...@@ -1642,9 +1642,9 @@ exports.PDFViewerApplication = PDFViewerApplication; ...@@ -1642,9 +1642,9 @@ exports.PDFViewerApplication = PDFViewerApplication;
return; return;
} }
const fileOrigin = new URL(file, window.location.href).origin; const fileOrigin = new URL(file, window.location.href).origin;
if (fileOrigin !== viewerOrigin) { // if (fileOrigin !== viewerOrigin) {
throw new Error("file origin does not match viewer's"); // throw new Error("file origin does not match viewer's");
} // }
} catch (ex) { } catch (ex) {
PDFViewerApplication.l10n.get("loading_error").then(msg => { PDFViewerApplication.l10n.get("loading_error").then(msg => {
PDFViewerApplication._documentError(msg, { PDFViewerApplication._documentError(msg, {
......
This source diff could not be displayed because it is too large. You can view the blob instead.
...@@ -38,7 +38,7 @@ const useQqMaps = () => { ...@@ -38,7 +38,7 @@ const useQqMaps = () => {
location: position.lat + ',' + position.lng, location: position.lat + ',' + position.lng,
get_poi: 1 get_poi: 1
}).then((res: any) => { }).then((res: any) => {
console.log(res.result, 'res.result'); // console.log(res.result, 'res.result');
mapsInfo.addr = res.result.address mapsInfo.addr = res.result.address
}) })
} }
......
...@@ -6,6 +6,12 @@ export const src1 = ...@@ -6,6 +6,12 @@ export const src1 =
export const bacSrc = export const bacSrc =
"https://img2.baidu.com/it/u=460732253,1892860896&fm=253&fmt=auto&app=138&f=JPEG?w=500&h=888" "https://img2.baidu.com/it/u=460732253,1892860896&fm=253&fmt=auto&app=138&f=JPEG?w=500&h=888"
export const pdfUrl =
"https://www.ropiniot.com/DJService/File/BASE_001/ACT/5512e00f-f679-42ec-a3ae-991e9db7df98/e8f7cf96-5774-476e-bced-e28309cd72b3.pdf"
export const pdfUrl1 =
"https://swsdl.vivo.com.cn/appstore/cloudtest/pdf/20220621/202206212026012891400036.pdf"
export const demoAddr = { export const demoAddr = {
lng: "113.86139", lng: "113.86139",
lat: "22.588493", lat: "22.588493",
......
import config from "./config" import config from "./config"
// const baseurl = "https://weixin.lingqingkeji.com:86/k3cloud" export const baseUrl = "/k3cloud"
// const baseurl = "/k3cloud" // 部署到iis上用的
const baseurl = "/XiBU" // const baseUrl = "https://weixin.lingqingkeji.com:86/k3cloud"
// const baseUrl = "/XiBU"
// 封装公共申请办法 // 封装公共申请办法
function request( function request(
...@@ -17,7 +18,7 @@ function request( ...@@ -17,7 +18,7 @@ function request(
title: "加载中...", title: "加载中...",
}) })
header = { "Content-Type": "application/json" } header = { "Content-Type": "application/json" }
url = baseurl + url url = baseUrl + url
uni.request({ uni.request({
url, url,
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论