Compare commits

..

No commits in common. "5537a6977979301fff191cc9ee9dee2f0dba12a1" and "852dd9780ed0cf2b01af77b30c3ff5b387c0348d" have entirely different histories.

9 changed files with 121 additions and 368 deletions

View File

@ -74,7 +74,7 @@ export default {
console.log(data, "data--"); console.log(data, "data--");
uni.setStorageSync( uni.setStorageSync(
"token", "token",
"Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93cy8yMDA1LzA1L2lkZW50aXR5L2NsYWltcy9zaWQiOiIwOGRkNzFiZC01N2MxLTQ1YmMtODBiYS0xMjkzYjU4MTViMmEiLCJ1bmlxdWVfbmFtZSI6IuS_nea0gSIsInJvbGUiOiJVc2VyIiwiaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3MvMjAwNS8wNS9pZGVudGl0eS9jbGFpbXMvbW9iaWxlcGhvbmUiOiIxODE3NDAxMDU2MiIsImdyb3Vwc2lkIjoiNGIyZDk2NjItYTc2OC0wOGYyLWEwYzgtNzYyYjhjNzZkYTJhIiwibmJmIjoxNzQ0MjYzMTAyLCJleHAiOjE3NDQyNjY3MDIsImlhdCI6MTc0NDI2MzEwMn0.ZJTwC7rWCcywoM7ncysw-JRIiwXz4y_6hlmqctN-gMM" "Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93cy8yMDA1LzA1L2lkZW50aXR5L2NsYWltcy9zaWQiOiIwOGRkNzFiZC01N2MxLTQ1YmMtODBiYS0xMjkzYjU4MTViMmEiLCJ1bmlxdWVfbmFtZSI6IuS_nea0gSIsInJvbGUiOiJVc2VyIiwiaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3MvMjAwNS8wNS9pZGVudGl0eS9jbGFpbXMvbW9iaWxlcGhvbmUiOiIxODE3NDAxMDU2MiIsImdyb3Vwc2lkIjoiNGIyZDk2NjItYTc2OC0wOGYyLWEwYzgtNzYyYjhjNzZkYTJhIiwibmJmIjoxNzQ0MjUxNjY1LCJleHAiOjE3NDQyNTUyNjUsImlhdCI6MTc0NDI1MTY2NX0.4xEKtdOQNijnQAZttfbUlrtRkMYu69YvtNOV4conUIk"
); );
uni.switchTab({ uni.switchTab({

View File

@ -45,8 +45,8 @@ export const ReportingNFCDanger = (data) =>
request.post("/api/App/ReportingNFCDanger", data); request.post("/api/App/ReportingNFCDanger", data);
// 上传图片 // 上传图片
export const UploadFiles = (formData) => export const UploadFiles = (data) =>
request.upload("/api/App/UploadFiles", formData); request.post("/api/App/UploadFiles", data);
// 上传 // 上传
export const UploadArea = (data) => export const UploadArea = (data) =>

View File

@ -41,26 +41,9 @@
</template> </template>
<script> <script>
import { GetPlanInfoAre } from "@/api/apiList";
export default { export default {
data() { data() {
return { return {};
id: "",
};
},
onLoad(options) {
this.id = options.id;
this.getAreaInfo();
},
methods: {
async getAreaInfo() {
const res = await GetPlanInfoAre({
id: this.id,
});
console.log(res);
},
}, },
}; };
</script> </script>

View File

@ -178,10 +178,9 @@ export default {
methods: { methods: {
minutesToTime, minutesToTime,
nfcResFn(data){
nfcResFn(data) { if(data){
if (data) { console.log('%c%s', 'color:red', 'nfc刷卡成功');
console.log("%c%s", "color:red", "nfc刷卡成功");
this.successShow = true; this.successShow = true;
} else { } else {
console.log("%c%s", "color:red", "刷卡失败"); console.log("%c%s", "color:red", "刷卡失败");

View File

@ -27,7 +27,7 @@
<image <image
src="/static/iconfont/more.svg" src="/static/iconfont/more.svg"
mode="scaleToFill" mode="scaleToFill"
style="width: 48rpx; height: 48rpx; margin-right: 32rpx" style="width: 40rpx; height: 40rpx; margin-right: 32rpx"
@click="toggleMenu" @click="toggleMenu"
/> />
</view> </view>
@ -35,9 +35,7 @@
</u-navbar> </u-navbar>
<view class="content-header"> <view class="content-header">
<view class="content-header-title"> <view class="content-header-title"> 区域名称所属计划 </view>
{{ areaName }} {{ planName }}
</view>
</view> </view>
<view class="planList"> <view class="planList">
@ -46,40 +44,17 @@
</view> </view>
<view class="plan-content"> <view class="plan-content">
<view class="plan-content-top"> <view class="plan-content-top">
<view class="plan-content-top-uploadBox" @click="takePhoto"> <image
<image src="/static/images/logo.png"
src="/static/images/icon-camera.png" mode="scaleToFill"
mode="aspectFit" style="width: 160rpx; height: 160rpx"
style="width: 49rpx; height: 43rpx" />
/>
<view class="plan-content-top-uploadBox-text">添加照片</view>
</view>
<view
class="plan-content-top-imgList"
v-for="(item, index) in imageList"
:key="index"
>
<image
:src="item"
mode="scaleToFill"
style="width: 180rpx; height: 180rpx"
@click="previewImage(index)"
/>
<view class="delete-icon" @click="handleDelete(index)">×</view>
</view>
</view> </view>
<view class="plan-content-remark"> <view class="plan-content-remark">
<view class="plan-content-remark-title">备注</view> <view class="plan-content-remark-title">备注</view>
<!-- <view class="plan-content-remark-text"> <view class="plan-content-remark-text">
备注备注备注备注备注备注备注备注备注备注备注备注 备注备注备注备注备注备注备注备注备注备注备注备注备注
</view> --> </view>
<u-input
v-model="remark"
type="textarea"
placeholder="请输入"
:border="false"
/>
</view> </view>
</view> </view>
</view> </view>
@ -88,6 +63,7 @@
class="bottom-btn" class="bottom-btn"
shape="circle" shape="circle"
type="primary" type="primary"
style="margin: 0 32rpx"
@click="submitForm" @click="submitForm"
>上传</u-button >上传</u-button
> >
@ -95,23 +71,12 @@
</template> </template>
<script> <script>
import { UploadFiles, UploadArea } from "@/api/apiList";
export default { export default {
data() { data() {
return { return {
activeTab: "completed", activeTab: "completed",
showMenu: false, showMenu: false,
menuItems: ["教学楼楼道", "南广场跑道", "食堂大厅"], menuItems: ["教学楼楼道", "南广场跑道", "食堂大厅", "食堂大厅"],
//
areaName: "操场",
//
planName: "保洁计划",
//
remark: "",
imageList: ["/static/images/logo.png"], //
}; };
}, },
created() {}, created() {},
@ -125,87 +90,17 @@ export default {
selectMenuItem(item) { selectMenuItem(item) {
// //
console.log("选择了:", item); console.log("选择了:", item);
this.areaName = item;
// //
this.showMenu = false; this.showMenu = false;
}, },
//
takePhoto() {
uni.chooseImage({
count: 1, // 1
sourceType: ["camera"], //
sizeType: ["compressed"], //
success: async (res) => {
console.log("拍照成功", res);
this.uploadFiles(res.tempFilePaths[0]);
},
fail: (err) => {
uni.showToast({ title: "拍照失败,请重试", icon: "none" });
},
});
},
//
async uploadFiles(filePath) {
const res = await UploadFiles(filePath);
if (res.succeed) {
this.imageList = [...this.imageList, res.data];
}
},
//
handleDelete(index) {
this.imageList.splice(index, 1);
},
//
previewImage(index) {
uni.previewImage({
urls: this.imageList,
current: index,
});
},
//
async submitForm() {
if (this.imageList.length === 0) {
uni.showToast({ title: "请上传图片", icon: "none" });
return;
}
const picturesDto = this.imageList.map((item) => {
return {
path: item,
};
});
console.log("提交表单", picturesDto, this.remark);
const res = await UploadArea({
id: this.id,
picturesDto: picturesDto,
note: this.remark,
});
if (res.succeed) {
//
uni.showToast({ title: "上传成功", icon: "success" });
}
},
}, },
}; };
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>
page {
background: #f7f8fc;
}
.content { .content {
position: relative; position: relative;
// height: 100vh; height: 100vh;
padding-bottom: 32rpx;
background: #f7f8fc; background: #f7f8fc;
.mask { .mask {
@ -217,15 +112,14 @@ page {
background-color: rgba(0, 0, 0, 0.2); background-color: rgba(0, 0, 0, 0.2);
z-index: 999; z-index: 999;
} }
.content-header { .content-header {
height: 180rpx; height: 160rpx;
background: #ddd;
border-radius: 16rpx; border-radius: 16rpx;
margin: 32rpx; margin: 32rpx;
display: flex; display: flex;
flex-direction: column-reverse; flex-direction: column-reverse;
background: url("/static/images/region-bg.png") no-repeat center center;
background-size: 100% 100%;
&-title { &-title {
font-size: 32rpx; font-size: 32rpx;
@ -236,8 +130,7 @@ page {
text-align: center; text-align: center;
background-color: #fff; background-color: #fff;
border-radius: 32rpx; border-radius: 32rpx;
min-width: 80%; width: 70%;
padding: 0 32rpx;
margin: 0 auto 32rpx; margin: 0 auto 32rpx;
} }
} }
@ -257,44 +150,17 @@ page {
padding: 32rpx; padding: 32rpx;
&-top { &-top {
display: flex; display: flex;
flex-wrap: wrap; justify-content: space-between;
gap: 32rpx; align-items: center;
.place {
&-uploadBox { font-size: 32rpx;
border: 1px dashed #526fa3; color: #333;
width: 180rpx;
height: 180rpx;
background-color: #edf2ff;
border-radius: 16rpx;
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
gap: 20rpx;
}
&-imgList {
position: relative;
.delete-icon {
position: absolute;
right: -10rpx;
top: -10rpx;
width: 36rpx;
height: 36rpx;
background: #6d6d6d;
border-radius: 50%;
color: white;
text-align: center;
line-height: 36rpx;
font-size: 28rpx;
}
} }
} }
&-remark { &-remark {
margin-top: 32rpx; margin-top: 32rpx;
border-radius: 16rpx; border-radius: 16rpx;
&-title { &-title {
margin-bottom: 16rpx;
font-size: 32rpx; font-size: 32rpx;
color: #333; color: #333;
font-weight: 500; font-weight: 500;
@ -319,11 +185,10 @@ page {
} }
.bottom-btn { .bottom-btn {
margin: 60rpx 32rpx 0rpx; position: fixed;
// position: fixed; bottom: 32rpx;
// bottom: 32rpx; left: 0;
// left: 0; right: 0;
// right: 0;
} }
} }

View File

@ -3,32 +3,15 @@
<!-- 设置 --> <!-- 设置 -->
<view class="head"> <view class="head">
<view class="personInfo"> <view class="personInfo">
<view>{{ baseInfo.name }}</view> <view>张三</view>
<view class="account">{{ baseInfo.personType }}</view> <view class="account">勤工岗</view>
</view>
<view class="avatar-box">
<u-avatar
:src="baseInfo.avatar || '/static/images/avatar.png'"
size="140"
mode="circle"
class="avatar"
></u-avatar>
<view
class="sex-icon"
:class="{
'sex-icon-man': baseInfo.sex === 0,
'sex-icon-woman': baseInfo.sex === 1,
}"
>
<u-icon
v-if="baseInfo.sex === 0"
name="man"
color="#fff"
size="26"
></u-icon>
<u-icon v-else name="woman" color="#fff" size="26"></u-icon>
</view>
</view> </view>
<u-avatar
src="/static/images/avatar.png"
size="140"
mode="circle"
class="avatar"
></u-avatar>
</view> </view>
<view class="cell-list-box"> <view class="cell-list-box">
@ -63,8 +46,6 @@
</template> </template>
<script> <script>
import { GetCompanyInformation } from "@/api/apiList.js";
import { import {
toast, toast,
clearStorageSync, clearStorageSync,
@ -77,14 +58,14 @@ export default {
data() { data() {
return { return {
baseInfo: { baseInfo: {
name: "",
phone: "",
avatar: "", avatar: "",
companyName: "南昌理工", company_name: "",
name: "保洁", registerDate: "",
sex: 0, // 0 1 login_code: "",
time: "2025/4/2-2026/4/2", auth: 0,
personType: "保洁员",
}, },
version: "", version: "",
cellList: [ cellList: [
@ -118,7 +99,6 @@ export default {
// }); // });
}, },
onShow() { onShow() {
this.getCompanyInformation();
// uni.$on("refresh", (e) => { // uni.$on("refresh", (e) => {
// this.getUserInfo(); // this.getUserInfo();
// uni.$off("refresh"); // uni.$off("refresh");
@ -167,18 +147,25 @@ export default {
}, },
}); });
}, },
getUserInfo() {
// this.$api.baseInfo().then((res) => {
async getCompanyInformation() { //console.log(res)
const res = await GetCompanyInformation();
if (res.succeed) {
this.baseInfo = res.data; this.baseInfo = res.data;
this.cellList[0].content = this.baseInfo.time; this.avatar_src = res.data.avatar;
} });
},
service_center() {
toast("未设置跳转,请自行定义");
},
setting() {
useRouter("/pages/my/account/setting", {}, "navigateTo");
}, },
toPage(path) { toPage(path) {
if (!path) return; if (!path) return;
console.log("path", path);
useRouter(path, {}, "navigateTo"); useRouter(path, {}, "navigateTo");
}, },
@ -211,31 +198,8 @@ export default {
margin-top: 10rpx; margin-top: 10rpx;
} }
} }
.avatar {
.avatar-box { margin-left: 50rpx;
width: 140rpx;
height: 140rpx;
border-radius: 50%;
position: relative;
.avatar {
width: 100%;
}
.sex-icon {
width: 32rpx;
height: 32rpx;
line-height: 32rpx;
text-align: center;
border-radius: 50%;
position: absolute;
top: 20rpx;
right: 0;
}
.sex-icon-man {
background-color: #007aff;
}
.sex-icon-woman {
background-color: #ff4d4f;
}
} }
} }

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 110 KiB

View File

@ -1,125 +1,67 @@
import BASE_URL from "@/api/env.js"; //引入接口共用地址
import RequestManager from "@/utils/requestManager.js";
import { import BASE_URL from '@/api/env.js' //引入接口共用地址
toast, import RequestManager from '@/utils/requestManager.js'
clearStorageSync, import {toast, clearStorageSync, getStorageSync, useRouter} from '@/utils/utils.js'
getStorageSync, import systemConfig from '@/config/config.js';
useRouter, const manager = new RequestManager()
} from "@/utils/utils.js";
import systemConfig from "@/config/config.js";
const manager = new RequestManager();
// 先写死调接口 // 先写死调接口
// uni.setStorageSync('token', 'Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93cy8yMDA1LzA1L2lkZW50aXR5L2NsYWltcy9zaWQiOiI1YmJiYTBhMi04YmJmLTcxMmUtMjMxMy1kYTc0N2E1MGUxYzEiLCJ1bmlxdWVfbmFtZSI6Iua1i-ivlSIsInJvbGUiOiJBZG1pbiIsImh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzLzIwMDUvMDUvaWRlbnRpdHkvY2xhaW1zL21vYmlsZXBob25lIjoiMTgxNzQwMTA1NjEiLCJncm91cHNpZCI6IjRiMmQ5NjYyLWE3NjgtMDhmMi1hMGM4LTc2MmI4Yzc2ZGEyYSIsIm5iZiI6MTc0NDE3OTY2NiwiZXhwIjoxNzQ0MTgzMjY2LCJpYXQiOjE3NDQxNzk2NjZ9.TTLt3vwefdrd8rx3zNN4rr0OI4yp14m781N3PC3lIHw') // uni.setStorageSync('token', 'Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93cy8yMDA1LzA1L2lkZW50aXR5L2NsYWltcy9zaWQiOiI1YmJiYTBhMi04YmJmLTcxMmUtMjMxMy1kYTc0N2E1MGUxYzEiLCJ1bmlxdWVfbmFtZSI6Iua1i-ivlSIsInJvbGUiOiJBZG1pbiIsImh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzLzIwMDUvMDUvaWRlbnRpdHkvY2xhaW1zL21vYmlsZXBob25lIjoiMTgxNzQwMTA1NjEiLCJncm91cHNpZCI6IjRiMmQ5NjYyLWE3NjgtMDhmMi1hMGM4LTc2MmI4Yzc2ZGEyYSIsIm5iZiI6MTc0NDE3OTY2NiwiZXhwIjoxNzQ0MTgzMjY2LCJpYXQiOjE3NDQxNzk2NjZ9.TTLt3vwefdrd8rx3zNN4rr0OI4yp14m781N3PC3lIHw')
const baseRequest = async (url, method, data = {}, loading = true) => {
let requestId = manager.generateId(method, url, data);
if (!requestId) {
console.log("重复请求");
}
if (!requestId) return false;
const header = {}; const baseRequest = async (url, method, data = {}, loading = true) =>{
header.Authorization = getStorageSync(systemConfig.token) || ""; let requestId = manager.generateId(method, url, data)
return new Promise((reslove, reject) => { if(!requestId) {
loading && uni.showLoading({ title: "loading" }); console.log('重复请求')
uni.request({ }
url: BASE_URL + url, if(!requestId)return false;
method: method || "GET",
header: header, const header = {}
timeout: 10000, header.Authorization = getStorageSync(systemConfig.token) || ''
data: data || {}, return new Promise((reslove, reject) => {
complete: () => { loading && uni.showLoading({title: 'loading'})
uni.hideLoading(); uni.request({
manager.deleteById(requestId); url: BASE_URL + url,
}, method: method || 'GET',
success: (successData) => { header: header,
//console.log(successData) timeout: 10000,
const res = successData.data; data: data || {},
if (successData.statusCode == 200) { complete: ()=>{
// 业务逻辑自行修改401是服务器上返回该token过期过期后跳转到登陆页面 uni.hideLoading()
if (res.code > 400) { manager.deleteById(requestId)
clearStorageSync("token"); },
useRouter(systemConfig.login_page, "reLaunch"); success: (successData) => {
} else { //console.log(successData)
reslove(res); const res = successData.data
} if(successData.statusCode == 200){
} else { // 业务逻辑自行修改401是服务器上返回该token过期过期后跳转到登陆页面
console.log("网络连接失败,请稍后重试", url); if(res.code > 400){
toast("网络连接失败,请稍后重试"); clearStorageSync('token')
reject(res); useRouter(systemConfig.login_page, 'reLaunch')
} }else{
}, reslove(res)
fail: (msg) => { }
console.log("请求:" + BASE_URL + url + ",发生错误:", err); }else{
toast("网络连接失败,请稍后重试"); console.log('网络连接失败,请稍后重试' ,url)
reject(msg); toast('网络连接失败,请稍后重试')
}, reject(res)
}); }
}); },
}; fail: (msg) => {
console.log("请求:"+BASE_URL + url +',发生错误:', err)
// 添加文件上传的基础方法 toast('网络连接失败,请稍后重试')
const baseUpload = async (api, filePath, formData = {}, loading = true) => { reject(msg)
if (loading) { }
uni.showLoading({ })
title: "上传中...", })
mask: true, }
});
}
const header = {};
header.Authorization = getStorageSync(systemConfig.token) || "";
return new Promise((resolve, reject) => {
uni.uploadFile({
url: BASE_URL + api,
filePath: filePath,
name: "Files", // 文件对应的 key
formData: formData,
header: header,
success: (res) => {
if (loading) uni.hideLoading();
// 处理响应数据
if (res.statusCode === 200) {
const data = JSON.parse(res.data);
if (data.succeed) {
resolve(data);
} else {
uni.showToast({
title: data.msg || "上传失败",
icon: "none",
});
reject(data);
}
} else {
reject(res);
}
},
fail: (err) => {
if (loading) uni.hideLoading();
uni.showToast({
title: "上传失败",
icon: "none",
});
reject(err);
},
});
});
};
const request = {}; const request = {};
// 将 upload 方法添加到 request 对象中 ['options', 'get', 'post', 'put', 'head', 'delete', 'trace', 'connect'].forEach((method) => {
request.upload = (api, filePath, formData, loading) => request[method] = (api, data, loading) => baseRequest(api, method, data, loading)
baseUpload(api, filePath, formData, loading); })
["options", "get", "post", "put", "head", "delete", "trace", "connect"].forEach( export default request
(method) => {
request[method] = (api, data, loading) =>
baseRequest(api, method, data, loading);
}
);
export default request;