From 91032708956ebf374463d7c4d26ff7d9fb0e5c81 Mon Sep 17 00:00:00 2001 From: hezhidong <1531792767@qq.com> Date: Tue, 15 Apr 2025 17:04:08 +0800 Subject: [PATCH 1/3] =?UTF-8?q?=E5=88=9D=E5=A7=8B=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 27 ++++++ .hbuilderx/launch.json | 16 ++++ App.vue | 25 ++++++ api/baseUrl.js | 4 + api/create.js | 25 ++++++ api/index.js | 44 ++++++++++ api/uploadImage.js | 42 +++++++++ com/index.js | 84 ++++++++++++++++++ components/form/date-li.vue | 103 ++++++++++++++++++++++ components/form/input-li.vue | 99 +++++++++++++++++++++ components/form/select-li.vue | 122 ++++++++++++++++++++++++++ index.html | 20 +++++ main.js | 107 +++++++++++++++++++++++ manifest.json | 73 ++++++++++++++++ pages.json | 55 ++++++++++++ pages/index/index.vue | 157 ++++++++++++++++++++++++++++++++++ static/logo.png | Bin 0 -> 4023 bytes subPackages/sub/sub.vue | 17 ++++ uni.scss | 76 ++++++++++++++++ 19 files changed, 1096 insertions(+) create mode 100644 .gitignore create mode 100644 .hbuilderx/launch.json create mode 100644 App.vue create mode 100644 api/baseUrl.js create mode 100644 api/create.js create mode 100644 api/index.js create mode 100644 api/uploadImage.js create mode 100644 com/index.js create mode 100644 components/form/date-li.vue create mode 100644 components/form/input-li.vue create mode 100644 components/form/select-li.vue create mode 100644 index.html create mode 100644 main.js create mode 100644 manifest.json create mode 100644 pages.json create mode 100644 pages/index/index.vue create mode 100644 static/logo.png create mode 100644 subPackages/sub/sub.vue create mode 100644 uni.scss diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..96a7795 --- /dev/null +++ b/.gitignore @@ -0,0 +1,27 @@ +node_modules +.DS_Store +/dist +unpackage +uni_modules + +# local env files +.env.local +.env.*.local +.env.development + +# Log files +npm-debug.log* +yarn-debug.log* +yarn-error.log* +pnpm-debug.log* + +# Editor directories and files +.idea +.vscode +*.suo +*.ntvs* +*.njsproj +*.sln +*.sw? + +.env.development \ No newline at end of file diff --git a/.hbuilderx/launch.json b/.hbuilderx/launch.json new file mode 100644 index 0000000..d4a72df --- /dev/null +++ b/.hbuilderx/launch.json @@ -0,0 +1,16 @@ +{ // launch.json 配置了启动调试时相关设置,configurations下节点名称可为 app-plus/h5/mp-weixin/mp-baidu/mp-alipay/mp-qq/mp-toutiao/mp-360/ + // launchtype项可配置值为local或remote, local代表前端连本地云函数,remote代表前端连云端云函数 + "version": "0.0", + "configurations": [{ + "default" : + { + "launchtype" : "local" + }, + "mp-alipay" : + { + "launchtype" : "local" + }, + "type" : "uniCloud" + } + ] +} diff --git a/App.vue b/App.vue new file mode 100644 index 0000000..700aa9d --- /dev/null +++ b/App.vue @@ -0,0 +1,25 @@ + + + diff --git a/api/baseUrl.js b/api/baseUrl.js new file mode 100644 index 0000000..a98e357 --- /dev/null +++ b/api/baseUrl.js @@ -0,0 +1,4 @@ + +const baseUrl = "http://192.168.31.166:8189" +// const baseUrl = "http://192.168.31.166:8188" +export default baseUrl \ No newline at end of file diff --git a/api/create.js b/api/create.js new file mode 100644 index 0000000..1cb6706 --- /dev/null +++ b/api/create.js @@ -0,0 +1,25 @@ +/*首页*/ +import { request } from "./index.js"; + +// 登录 +export function getToken(code){ + return request({ + method: "get", + url: "/user/getToken", + data: { + code + }, + Header1: { + + } + }) +} + +// 创建工单 +export function postCreatOrder(data){ + return request({ + method: "post", + url: "creatOrder/add", + data + }) +} diff --git a/api/index.js b/api/index.js new file mode 100644 index 0000000..4b1a765 --- /dev/null +++ b/api/index.js @@ -0,0 +1,44 @@ +// const baseUrl = "https://pandamimi.lzyyj.com/prod-api"; +// const baseUrl = "http://192.168.31.121:9221"; + +import baseUrl from "./baseUrl.js" +// const baseUrl = bootUrl +export function request ( optaions ) { + let { url, method, data, header1 } = optaions + method = method || "GET" + data = data || {} + header1 = header1 || { + Authorization: uni.getStorageSync('token') + } + // console.log(com.getCacheToken("userInfo").token) + return new Promise((reslove,reject)=>{ + uni.request({ + url: baseUrl + url, + method, + header: header1, + data, + success: (res) => { + if(res.data.code == 401 ){ + uni.showToast({ title: '登录已失效,请重新登录!', icon: 'none' }); + uni.removeStorageSync('userInfo'); + uni.removeStorageSync('token'); + setTimeout(()=>{ + uni.navigateTo({ url: '/pages/user/login' }); + }, 1000); + }else if(res.data.code != 200){ + reject(res) + uni.showToast({ title: res.data.msg, icon: 'none', duration: 2000 }); + }else { + reslove(res.data) + } + + }, + fail: () => { + reject() + }, + complete: () => { + uni.hideLoading() + } + }) + }) +} \ No newline at end of file diff --git a/api/uploadImage.js b/api/uploadImage.js new file mode 100644 index 0000000..b8b1af8 --- /dev/null +++ b/api/uploadImage.js @@ -0,0 +1,42 @@ +import baseUrl from "./baseUrl.js" + +export function uploadImage (urls,) { + return new Promise( (resovle, reject) =>{ + let urlArr = [] + for(let i = 0; i < urls.length; i ++){ + uni.uploadFile({ + url: baseUrl + '/file/upload', + fileName: 'file', + header: { + 'content-type': 'multipart/form-data' + }, + fileType: "image", // 必填 + filePath: urls[i], + success: (res) => { + urlArr.push(res.data) + if( urls.length == urlArr.length){ + uni.hideLoading(); + uni.showToast({ title: '上传成功', icon: 'success', duration: 2000 }); + resovle(urlArr) + } + }, + fail: (err) =>{ + console.log('--------') + console.log(err) + uni.showToast({ title: '上传失败', icon: 'error', duration: 2000 }); + uni.hideLoading(); + uni.showModal({ + title: '提示', + content: err.msg, + }); + resovle([]) + }, + complete: () => { + + } + }); + } + + }) + +} diff --git a/com/index.js b/com/index.js new file mode 100644 index 0000000..7676293 --- /dev/null +++ b/com/index.js @@ -0,0 +1,84 @@ + +/* + 表单验证 + form为表单 + rules为需要验证的表单 + rules:{ name: '请输入名称' } name为需要验证的字段 + */ +export function rulesFun ( form, rules ) { + console.log('-------------------------------') + let flage = true + let JSONrules = JSON.stringify(rules) + if(JSONrules !== JSON.stringify({})){ + for( let key in rules){ + if(Array.isArray( form[key] ) && form[key].length == 0 ){ + uni.showToast({ + title: rules[key], + }) + flage = false + break; + }else if( !form[key] && form[key] !== 0 ){ + uni.showToast({ + title: rules[key], + }) + flage = false + break; + } + } + } + return flage +} + +/* 手机号验证 */ +export function rulesPhone ( phoneVal ) { + let phoneReg = /(^1\d{10}$)|(^[0-9]\d{7}$)/; + if(!phoneReg.test(phoneVal)) { + uni.showToast({ + title: '请输入正确的手机号', + }) + return false; + }else{ + return true + } +} + +/* 身份证验证 */ +export function rulesIdCard ( IdcardVal ) { + var idCardReg = /^(\d{15}$|^\d{18}$|^\d{17}(\d|X|x))$/; + if(!idCardReg.test(IdcardVal)) { + uni.showToast({ + title: '身份证号码格式错误!', + }) + return false; + } else{ + return true + } +} + +// 计算 +export function calculator ( startNum, endNum, operator = '+'){ + if(operator == '+'){ + return (Number(startNum * 1000) + Number(endNum * 1000)) / 1000 + }else if( operator == '-' ){ + return (Number(startNum * 1000) - Number(endNum * 1000)) / 1000 + }else if( operator == '/' ){ + return (Number(startNum * 1000) / Number(endNum * 1000)) / 1000 + }else if( operator == '*' ){ + return (Number(startNum * 1000) * Number(endNum * 1000)) / 1000 + } +} +// timeStr表示时间 separator表示分隔符 type == yaer表示只返回年月日 +export function formatDate (timeStr = (new Date()), separator = '-', type){ + const date = new Date(timeStr) + let yaer = date.getFullYear() + let month = date.getMonth() + 1 + let day = date.getDate() + let hour = date.getHours() + let minute = date.getMinutes() + let second = date.getSeconds() + if(type == 'year'){ + return yaer + separator + month + separator + day + }else { + return yaer + separator + month + separator + day + ' ' + hour + ':' + minute + ':' + second + } +} diff --git a/components/form/date-li.vue b/components/form/date-li.vue new file mode 100644 index 0000000..1e6a753 --- /dev/null +++ b/components/form/date-li.vue @@ -0,0 +1,103 @@ + + + + + + + + \ No newline at end of file diff --git a/components/form/input-li.vue b/components/form/input-li.vue new file mode 100644 index 0000000..8a41373 --- /dev/null +++ b/components/form/input-li.vue @@ -0,0 +1,99 @@ + + +--> + + + + + \ No newline at end of file diff --git a/components/form/select-li.vue b/components/form/select-li.vue new file mode 100644 index 0000000..989c897 --- /dev/null +++ b/components/form/select-li.vue @@ -0,0 +1,122 @@ + + + + + + + + + \ No newline at end of file diff --git a/index.html b/index.html new file mode 100644 index 0000000..c3ff205 --- /dev/null +++ b/index.html @@ -0,0 +1,20 @@ + + + + + + + + + + +
+ + + diff --git a/main.js b/main.js new file mode 100644 index 0000000..3cc0c5f --- /dev/null +++ b/main.js @@ -0,0 +1,107 @@ +import App from './App' +import Inputli from './components/form/input-li.vue'; +import Selectli from './components/form/select-li.vue'; +import Dateli from './components/form/date-li.vue'; +import { getToken } from './api/create.js' +import { formatDate, calculator } from './com/index.js' + +// #ifndef VUE3 +import Vue from 'vue' +Vue.config.productionTip = false +Vue.prototype.a = '1234456' +const msg = (title,icon = 'none', duration = 1500, mask = false, ) => { + //统一提示方便全局修改 + if (Boolean(title) === false) { + return; + } + uni.showToast({ + title, + duration, + mask, + icon + }); +} + +const setNavigationBar = ( title = '教育平台', backgroundColor = '#ffffff') =>{ + my.setNavigationBar({ + title, + backgroundColor + }); +} +const navTo = (url, skip = 'navigateTo') =>{ + uni[skip]({ + url + }); +} +const login = () =>{ + return new Promise((reslove,reject)=>{ + uni.getAuthCode({ + success:(user)=>{ + console.log(user) + getToken(user.authCode).then((res)=>{ + if(res){ + reslove(res.data) + console.log(res.data) + } + }).catch(err =>{ + reject(err) + }) + }, + }) + }) + +} +// 提示框 点击确定进入resolve 取消进入reject +const showModel = (content) =>{ + return new Promise((resolve, reject)=>{ + uni.showModal({ + title: '提示', + content: content, + cancelText: '取消', + confirmText: '确定', + success: function (res) { + if (res.confirm) { + console.log('用户点击确定'); + resolve('affirm') + } else if (res.cancel) { + console.log('用户点击取消'); + reject('cancal') + } + } + }); + }) +} + +Vue.prototype.$navTo = navTo // 页面跳转 +Vue.prototype.$msg = msg +Vue.prototype.$setNavigationBar = setNavigationBar +Vue.prototype.$login = login +Vue.prototype.$calculator = calculator // 计算数 +Vue.prototype.$formatDate = formatDate // 日期格式修改 +Vue.prototype.$showModel = showModel // 提示框 + + + +Vue.component("Inputli",Inputli) +Vue.component("Selectli",Selectli) +Vue.component("Dateli",Dateli) + +App.mpType = 'app' +const app = new Vue({ + ...App +}) +app.$mount() +// #endif + + + + +// #ifdef VUE3 +import { createSSRApp } from 'vue' +export function createApp() { + const app = createSSRApp(App) + return { + app + } +} +// #endif \ No newline at end of file diff --git a/manifest.json b/manifest.json new file mode 100644 index 0000000..f5ca3e6 --- /dev/null +++ b/manifest.json @@ -0,0 +1,73 @@ +{ + "name": "template", + "appid": "__UNI__9F20DF1", + "description": "", + "versionName": "1.0.0", + "versionCode": "100", + "transformPx": false, + /* 5+App特有相关 */ + "app-plus": { + "usingComponents": true, + "nvueStyleCompiler": "uni-app", + "compilerVersion": 3, + + "splashscreen": { + "alwaysShowBeforeRender": true, + "waiting": true, + "autoclose": true, + "delay": 0 + }, + /* 模块配置 */ + "modules": {}, + /* 应用发布信息 */ + "distribute": { + /* android打包配置 */ + "android": { + "permissions": [ + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "" + ] + }, + /* ios打包配置 */ + "ios": {}, + /* SDK配置 */ + "sdkConfigs": {} + } + }, + /* 快应用特有相关 */ + "quickapp": {}, + /* 小程序特有相关 */ + "mp-weixin": { + "appid": "", + "setting": { + "urlCheck": false + }, + "usingComponents": true + }, + "mp-alipay": { + "usingComponents": true + }, + "mp-baidu": { + "usingComponents": true + }, + "mp-toutiao": { + "usingComponents": true + }, + "uniStatistics": { + "enable": false + }, + "vueVersion": "2" +} diff --git a/pages.json b/pages.json new file mode 100644 index 0000000..bb63e2a --- /dev/null +++ b/pages.json @@ -0,0 +1,55 @@ +{ + "pages": [ //pages数组中第一项表示应用启动页,参考:https://uniapp.dcloud.io/collocation/pages + // 示例模版页面 + { + "path": "pages/index/index", + "style": { + // 顶部标题字 + "navigationBarTitleText": "uni-app", + // 开启下拉加载 + "enablePullDownRefresh": true, + // 下拉的距离触发下拉事件 + "pull-distance": 50, + // 设置背景颜色 + "backgroundColor": "#ffffff", + // 上拉触底的距离 + "onReachBottomDistance": 100 + } + } + ], + "subPackages": [ + { + "root":"subPackages", + "pages":[{ + "path" : "sub/sub", + "style" : + { + "navigationBarTitleText": "", + "enablePullDownRefresh": false + } + + } + ] + } + ], + "globalStyle": { + "navigationBarTextStyle": "black", + "navigationBarTitleText": "uni-app", + "navigationBarBackgroundColor": "#F8F8F8", + "backgroundColor": "#F8F8F8" + }, + "uniIdRouter": {}, + "uni-app": { + "scripts": { + "mp-dingtalk": { + "title": "钉钉小程序", + "env": { + "UNI_PLATFORM": "mp-alipay" + }, + "define": { + "MP-DINGTALK": true + } + } + } + } +} diff --git a/pages/index/index.vue b/pages/index/index.vue new file mode 100644 index 0000000..b73c0cd --- /dev/null +++ b/pages/index/index.vue @@ -0,0 +1,157 @@ + + + + + diff --git a/static/logo.png b/static/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..b5771e209bb677e2ebd5ff766ad5ee11790f305a GIT binary patch literal 4023 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 SYs}WS&%*SCNx89m_ + + 12355555555555 + + + + + + + diff --git a/uni.scss b/uni.scss new file mode 100644 index 0000000..a05adb4 --- /dev/null +++ b/uni.scss @@ -0,0 +1,76 @@ +/** + * 这里是uni-app内置的常用样式变量 + * + * uni-app 官方扩展插件及插件市场(https://ext.dcloud.net.cn)上很多三方插件均使用了这些样式变量 + * 如果你是插件开发者,建议你使用scss预处理,并在插件代码中直接使用这些变量(无需 import 这个文件),方便用户通过搭积木的方式开发整体风格一致的App + * + */ + +/** + * 如果你是App开发者(插件使用者),你可以通过修改这些变量来定制自己的插件主题,实现自定义主题功能 + * + * 如果你的项目同样使用了scss预处理,你也可以直接在你的 scss 代码中使用如下变量,同时无需 import 这个文件 + */ + +/* 颜色变量 */ + +/* 行为相关颜色 */ +$uni-color-primary: #007aff; +$uni-color-success: #4cd964; +$uni-color-warning: #f0ad4e; +$uni-color-error: #dd524d; + +/* 文字基本颜色 */ +$uni-text-color:#333;//基本色 +$uni-text-color-inverse:#fff;//反色 +$uni-text-color-grey:#999;//辅助灰色,如加载更多的提示信息 +$uni-text-color-placeholder: #808080; +$uni-text-color-disable:#c0c0c0; + +/* 背景颜色 */ +$uni-bg-color:#ffffff; +$uni-bg-color-grey:#f8f8f8; +$uni-bg-color-hover:#f1f1f1;//点击状态颜色 +$uni-bg-color-mask:rgba(0, 0, 0, 0.4);//遮罩颜色 + +/* 边框颜色 */ +$uni-border-color:#c8c7cc; + +/* 尺寸变量 */ + +/* 文字尺寸 */ +$uni-font-size-sm:12px; +$uni-font-size-base:14px; +$uni-font-size-lg:16; + +/* 图片尺寸 */ +$uni-img-size-sm:20px; +$uni-img-size-base:26px; +$uni-img-size-lg:40px; + +/* Border Radius */ +$uni-border-radius-sm: 2px; +$uni-border-radius-base: 3px; +$uni-border-radius-lg: 6px; +$uni-border-radius-circle: 50%; + +/* 水平间距 */ +$uni-spacing-row-sm: 5px; +$uni-spacing-row-base: 10px; +$uni-spacing-row-lg: 15px; + +/* 垂直间距 */ +$uni-spacing-col-sm: 4px; +$uni-spacing-col-base: 8px; +$uni-spacing-col-lg: 12px; + +/* 透明度 */ +$uni-opacity-disabled: 0.3; // 组件禁用态的透明度 + +/* 文章场景相关 */ +$uni-color-title: #2C405A; // 文章标题颜色 +$uni-font-size-title:20px; +$uni-color-subtitle: #555555; // 二级标题颜色 +$uni-font-size-subtitle:26px; +$uni-color-paragraph: #3F536E; // 文章段落颜色 +$uni-font-size-paragraph:15px; From 44cba1950d083bbf09a5f7068091293d3cfa931d Mon Sep 17 00:00:00 2001 From: hezhidong <1531792767@qq.com> Date: Fri, 18 Apr 2025 18:01:03 +0800 Subject: [PATCH 2/3] 4.18 --- package.json | 5 + pages.json | 47 +- .../attendanceManagement.vue | 469 ++++++++++++++++++ pages/homePage/homePage.vue | 331 ++++++++++++ pages/index/index.vue | 6 +- pages/salaryDetails/salaryDetails.vue | 260 ++++++++++ pages/sign/sign.vue | 216 ++++++++ static/WorkAtt.png | Bin 0 -> 656 bytes static/arr.png | Bin 0 -> 484 bytes static/money.png | Bin 0 -> 1732 bytes 10 files changed, 1327 insertions(+), 7 deletions(-) create mode 100644 package.json create mode 100644 pages/attendanceManagement/attendanceManagement.vue create mode 100644 pages/homePage/homePage.vue create mode 100644 pages/salaryDetails/salaryDetails.vue create mode 100644 pages/sign/sign.vue create mode 100644 static/WorkAtt.png create mode 100644 static/arr.png create mode 100644 static/money.png diff --git a/package.json b/package.json new file mode 100644 index 0000000..6ea5c6e --- /dev/null +++ b/package.json @@ -0,0 +1,5 @@ +{ + "dependencies": { + "mini-smooth-signature": "^1.2.3" + } +} diff --git a/pages.json b/pages.json index bb63e2a..898f92e 100644 --- a/pages.json +++ b/pages.json @@ -1,8 +1,23 @@ { "pages": [ //pages数组中第一项表示应用启动页,参考:https://uniapp.dcloud.io/collocation/pages // 示例模版页面 + // { + // "path": "pages/index/index", + // "style": { + // // 顶部标题字 + // "navigationBarTitleText": "uni-app", + // // 开启下拉加载 + // "enablePullDownRefresh": true, + // // 下拉的距离触发下拉事件 + // "pull-distance": 50, + // // 设置背景颜色 + // "backgroundColor": "#ffffff", + // // 上拉触底的距离 + // "onReachBottomDistance": 100 + // } + // }, { - "path": "pages/index/index", + "path": "pages/homePage/homePage", "style": { // 顶部标题字 "navigationBarTitleText": "uni-app", @@ -16,7 +31,35 @@ "onReachBottomDistance": 100 } } - ], + ,{ + "path" : "pages/attendanceManagement/attendanceManagement", + "style" : + { + "navigationBarTitleText": "", + "enablePullDownRefresh": false + } + + } + ,{ + "path" : "pages/salaryDetails/salaryDetails", + "style" : + { + "navigationBarTitleText": "", + "enablePullDownRefresh": false + } + + } + + ,{ + "path" : "pages/sign/sign", + "style" : + { + "navigationBarTitleText": "", + "enablePullDownRefresh": false + } + + } + ], "subPackages": [ { "root":"subPackages", diff --git a/pages/attendanceManagement/attendanceManagement.vue b/pages/attendanceManagement/attendanceManagement.vue new file mode 100644 index 0000000..a80c2c5 --- /dev/null +++ b/pages/attendanceManagement/attendanceManagement.vue @@ -0,0 +1,469 @@ + + + + + diff --git a/pages/homePage/homePage.vue b/pages/homePage/homePage.vue new file mode 100644 index 0000000..d76e1a0 --- /dev/null +++ b/pages/homePage/homePage.vue @@ -0,0 +1,331 @@ + + + + + diff --git a/pages/index/index.vue b/pages/index/index.vue index b73c0cd..5666a47 100644 --- a/pages/index/index.vue +++ b/pages/index/index.vue @@ -8,12 +8,8 @@ - + - - - - diff --git a/pages/salaryDetails/salaryDetails.vue b/pages/salaryDetails/salaryDetails.vue new file mode 100644 index 0000000..417d4ee --- /dev/null +++ b/pages/salaryDetails/salaryDetails.vue @@ -0,0 +1,260 @@ + + + + + diff --git a/pages/sign/sign.vue b/pages/sign/sign.vue new file mode 100644 index 0000000..ccfad5a --- /dev/null +++ b/pages/sign/sign.vue @@ -0,0 +1,216 @@ + + + + + diff --git a/static/WorkAtt.png b/static/WorkAtt.png new file mode 100644 index 0000000000000000000000000000000000000000..f469cb4a5fcc0b423e8880c013096ddbb67ae725 GIT binary patch literal 656 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 a0sI4zKCM92Y&q}%0000 Date: Wed, 23 Apr 2025 18:00:35 +0800 Subject: [PATCH 3/3] 4.23 --- api/baseUrl.js | 4 +- api/create.js | 30 +- api/index.js | 92 +- main.js | 41 +- .../attendanceManagement.vue | 879 +++++++++--------- pages/homePage/homePage.vue | 22 +- 6 files changed, 609 insertions(+), 459 deletions(-) diff --git a/api/baseUrl.js b/api/baseUrl.js index a98e357..7a694cf 100644 --- a/api/baseUrl.js +++ b/api/baseUrl.js @@ -1,4 +1,4 @@ -const baseUrl = "http://192.168.31.166:8189" -// const baseUrl = "http://192.168.31.166:8188" +// 肖兴越开发环境 +const baseUrl = "https://paystubs.vip.cpolar.top" export default baseUrl \ No newline at end of file diff --git a/api/create.js b/api/create.js index 1cb6706..cccc390 100644 --- a/api/create.js +++ b/api/create.js @@ -1,25 +1,31 @@ /*首页*/ -import { request } from "./index.js"; +import { request, requestLogin } from "./index.js"; // 登录 -export function getToken(code){ - return request({ - method: "get", - url: "/user/getToken", +export function getToken(authCode){ + return requestLogin({ + method: "GET", + url: `/login?code=${authCode}`, data: { - code }, Header1: { } }) } - -// 创建工单 -export function postCreatOrder(data){ +// 获取用户信息 +export function getUser(authCode){ return request({ - method: "post", - url: "creatOrder/add", - data + method: "get", + url: "/user", + data: { + }, }) } +// 获取绩效考勤统计 +export function getPerformanceAttendanceApi(year,month){ + return request({ + method: "get", + url: `/performance/attendance/detail/${year}/${month}`, + }) +} \ No newline at end of file diff --git a/api/index.js b/api/index.js index 4b1a765..dcec410 100644 --- a/api/index.js +++ b/api/index.js @@ -1,31 +1,101 @@ -// const baseUrl = "https://pandamimi.lzyyj.com/prod-api"; -// const baseUrl = "http://192.168.31.121:9221"; -import baseUrl from "./baseUrl.js" +import allUrl from "./baseUrl.js" // const baseUrl = bootUrl export function request ( optaions ) { let { url, method, data, header1 } = optaions method = method || "GET" data = data || {} + let newData = {} + for( let key in data){ + if( data[key] !== null && data[key] !== ''){ + newData[key] = data[key] + } + } + data = newData || {} header1 = header1 || { - Authorization: uni.getStorageSync('token') + Authorization: 'Bearer ' + uni.getStorageSync('token') } - // console.log(com.getCacheToken("userInfo").token) return new Promise((reslove,reject)=>{ uni.request({ - url: baseUrl + url, + url: allUrl + url, method, header: header1, data, success: (res) => { - if(res.data.code == 401 ){ - uni.showToast({ title: '登录已失效,请重新登录!', icon: 'none' }); + if(res.data.errcode == 401 ){ + uni.showToast({ title: '登录已失效,即将重新登录!', icon: 'none' }); uni.removeStorageSync('userInfo'); uni.removeStorageSync('token'); setTimeout(()=>{ - uni.navigateTo({ url: '/pages/user/login' }); + uni.reLaunch({ url: '/pages/newHomePage/newHomePage' }); }, 1000); - }else if(res.data.code != 200){ + }else if(res.data.errcode != 0){ + console.log('不正确走的') + reject(res) + uni.showToast({ title: res.data.errmsg, icon: 'none', duration: 2000 }); + }else { + reslove(res.data) + } + + }, + fail: (err) => { + console.log('请求失败',err) + uni.hideLoading() + if(err.statusCode == 401 ){ + uni.showToast({ title: '登录已失效,即将重新登录!', icon: 'none' }); + uni.removeStorageSync('userInfo'); + uni.removeStorageSync('token'); + setTimeout(()=>{ + uni.reLaunch({ url: '/pages/newHomePage/newHomePage' }); + }, 1000); + } + if(err.data.errcode == 401 ){ + uni.showToast({ title: '登录已失效,即将重新登录!', icon: 'none' }); + uni.removeStorageSync('userInfo'); + uni.removeStorageSync('token'); + setTimeout(()=>{ + uni.reLaunch({ url: '/pages/newHomePage/newHomePage' }); + }, 1000); + }else{ + uni.showToast({ title: err.data.errmsg, icon: 'none' }); + } + reject() + }, + complete: () => { + setTimeout(()=>{ + uni.hideLoading() + }, 2000) + } + }) + }) +} + + +export function requestLogin ( optaions ) { + let { url, method, data } = optaions + method = method || "GET" + data = data || {} + let newData = {} + for( let key in data){ + if( data[key] !== null && data[key] !== ''){ + newData[key] = data[key] + } + } + data = newData || {} + return new Promise((reslove,reject)=>{ + uni.request({ + url: allUrl + url, + method, + data, + success: (res) => { + if(res.statusCode == 401 ){ + uni.showToast({ title: '登录已失效,即将返回首页!', icon: 'none' }); + uni.removeStorageSync('userInfo'); + uni.removeStorageSync('token'); + setTimeout(()=>{ + uni.reLaunch({ url: '/pages/newHomePage/newHomePage' }); + }, 1000); + }else if(res.statusCode != 200){ reject(res) uni.showToast({ title: res.data.msg, icon: 'none', duration: 2000 }); }else { @@ -41,4 +111,4 @@ export function request ( optaions ) { } }) }) -} \ No newline at end of file +} diff --git a/main.js b/main.js index 3cc0c5f..f9866a9 100644 --- a/main.js +++ b/main.js @@ -2,7 +2,7 @@ import App from './App' import Inputli from './components/form/input-li.vue'; import Selectli from './components/form/select-li.vue'; import Dateli from './components/form/date-li.vue'; -import { getToken } from './api/create.js' +import { getToken,getUser } from './api/create.js' import { formatDate, calculator } from './com/index.js' // #ifndef VUE3 @@ -33,23 +33,38 @@ const navTo = (url, skip = 'navigateTo') =>{ url }); } -const login = () =>{ - return new Promise((reslove,reject)=>{ +const login = () => { + // uni.showLoading({ + // mask: true, + // title: '登录中...' + // }) + return new Promise((reslove, reject) => { uni.getAuthCode({ - success:(user)=>{ - console.log(user) - getToken(user.authCode).then((res)=>{ - if(res){ - reslove(res.data) - console.log(res.data) + success: (user) => { + getToken(user.authCode).then((res) => { + if (res.errcode == 0) { + uni.setStorageSync('token', res.result.token) + getUser().then(data => { + console.log(data) + uni.setStorageSync('user',data) + uni.hideLoading() + // uni.showToast({ + // title: '登录成功', + // icon: 'success' + // }) + }) + reslove(res) } - }).catch(err =>{ - reject(err) + }).catch(err => { + uni.showToast({ + title: '登录失败,服务器出错了', + icon: 'error' + }) }) }, }) }) - + } // 提示框 点击确定进入resolve 取消进入reject const showModel = (content) =>{ @@ -72,7 +87,7 @@ const showModel = (content) =>{ }) } -Vue.prototype.$navTo = navTo // 页面跳转 +Vue.prototype.$navTo = navTo // Vue.prototype.$msg = msg Vue.prototype.$setNavigationBar = setNavigationBar Vue.prototype.$login = login diff --git a/pages/attendanceManagement/attendanceManagement.vue b/pages/attendanceManagement/attendanceManagement.vue index a80c2c5..3b388c2 100644 --- a/pages/attendanceManagement/attendanceManagement.vue +++ b/pages/attendanceManagement/attendanceManagement.vue @@ -1,469 +1,516 @@ diff --git a/pages/homePage/homePage.vue b/pages/homePage/homePage.vue index d76e1a0..3540bb9 100644 --- a/pages/homePage/homePage.vue +++ b/pages/homePage/homePage.vue @@ -10,7 +10,7 @@ 月度考勤 - {{ selectedYear }}年{{ selectedMonth < 10 ? '0' + selectedMonth : selectedMonth }}月考勤统计 + {{ thisYear }}年{{ thisMonth }}月考勤统计 查看详情 @@ -71,24 +71,35 @@