Browse Source

oa 我的申请页面编写完成

wangtao 1 month ago
parent
commit
8d4606ab80
35 changed files with 790 additions and 30 deletions
  1. 92 0
      src/api/oa/approval/index.js
  2. 24 24
      src/manifest.json
  3. 18 0
      src/pages.json
  4. 290 0
      src/pages/business/oa/approval/index.vue
  5. 290 0
      src/pages/business/oa/toDo/index.vue
  6. 5 5
      src/pages/login.vue
  7. 9 0
      src/plugins/common.plugins.js
  8. 22 1
      src/plugins/constData.plugins.js
  9. BIN
      src/static/font/Alibaba_PuHuiTi_2.0_55_Regular_55_Regular.ttf
  10. BIN
      src/static/images/oa/fuKuan.png
  11. BIN
      src/static/images/oa/qingJia.png
  12. BIN
      src/static/images/oa/yongYin.png
  13. BIN
      src/static/images/tabBar/tab-approval-blue.png
  14. BIN
      src/static/images/tabBar/tab-approval-gray.png
  15. BIN
      src/static/images/tabBar/tab-toDo-blue.png
  16. BIN
      src/static/images/tabBar/tab-toDo-gray.png
  17. 39 0
      src/static/scss/font.scss
  18. 1 0
      src/static/scss/index.scss
  19. BIN
      unpackage/res/push-xunJian/1024x1024.png
  20. BIN
      unpackage/res/push-xunJian/120x120.png
  21. BIN
      unpackage/res/push-xunJian/144x144.png
  22. BIN
      unpackage/res/push-xunJian/152x152.png
  23. BIN
      unpackage/res/push-xunJian/167x167.png
  24. BIN
      unpackage/res/push-xunJian/180x180.png
  25. BIN
      unpackage/res/push-xunJian/192x192.png
  26. BIN
      unpackage/res/push-xunJian/20x20.png
  27. BIN
      unpackage/res/push-xunJian/29x29.png
  28. BIN
      unpackage/res/push-xunJian/40x40.png
  29. BIN
      unpackage/res/push-xunJian/58x58.png
  30. BIN
      unpackage/res/push-xunJian/60x60.png
  31. BIN
      unpackage/res/push-xunJian/72x72.png
  32. BIN
      unpackage/res/push-xunJian/76x76.png
  33. BIN
      unpackage/res/push-xunJian/80x80.png
  34. BIN
      unpackage/res/push-xunJian/87x87.png
  35. BIN
      unpackage/res/push-xunJian/96x96.png

+ 92 - 0
src/api/oa/approval/index.js

@@ -0,0 +1,92 @@
+import { request } from "@/utils/request";
+
+// 表单权限列表
+export function getOaFormDefinition(params) {
+    return request({
+        url: '/service-oa/oaFormDefinition/myForm',
+        method: 'get',
+        params
+    })
+}
+// 表单(请假)新增
+export function addQjDocument(data) {
+    return request({
+        url: '/service-oa/oaQjDocument/addQjDocument',
+        method: 'post',
+        data
+    })
+}
+// 表单(请假)修改
+export function updateQjDocument(data) {
+    return request({
+        url: '/service-oa/oaQjDocument/updateQjDocument',
+        method: 'post',
+        data
+    })
+}
+// 表单分页
+export function myApplication(params) {
+    return request({
+        url: '/service-oa/oaDocument/myApplication',
+        method: 'get',
+        params
+    })
+}
+// 表单(加班)新增
+export function addJBDocument(data) {
+    return request({
+        url: '/service-oa/oaJbDocument/add',
+        method: 'post',
+        data
+    })
+}
+// 表单名列表
+export function getFormName(params) {
+    return request({
+        url: '/service-oa/oaFormDefinition/getFormName',
+        method: 'get',
+        params
+    })
+}
+// 表单记录详情
+export function getDocumentDetails(params) {
+    return request({
+        url: '/service-oa/oaDocument/documentDetails',
+        method: 'get',
+        params
+    })
+}
+// 表单记录删除
+export function delDoc(id) {
+    return request({
+        url: '/service-oa/oaDocument/delDoc/' + id,
+        method: 'delete'
+    })
+}
+// 表单记录提交
+export function statueSubmit(params) {
+    return request({
+        url: '/service-oa/oaDocument/submit',
+        method: 'put',
+        params
+    })
+}
+// 表单统计
+export function getFormCount() {
+    return request({
+        url: '/service-oa/oaApproval/count',
+        method: 'get'
+    })
+}
+
+
+
+
+
+
+
+
+
+
+
+

+ 24 - 24
src/manifest.json

@@ -2,8 +2,8 @@
     "name" : "智能巡更",
     "appid" : "__UNI__BF1A1F0",
     "description" : "智能巡更app,是一款用于监督和记录巡逻人员按照预定路线和时间进行巡逻的系统。",
-    "versionName" : "2.3.1",
-    "versionCode" : 31,
+    "versionName" : "2.3.4",
+    "versionCode" : 34,
     "transformPx" : false,
     "app-plus" : {
         "compatible" : {
@@ -145,33 +145,33 @@
             },
             "icons" : {
                 "android" : {
-                    "hdpi" : "unpackage/res/icons/72x72.png",
-                    "xhdpi" : "unpackage/res/icons/96x96.png",
-                    "xxhdpi" : "unpackage/res/icons/144x144.png",
-                    "xxxhdpi" : "unpackage/res/icons/192x192.png"
+                    "hdpi" : "unpackage/res/icons-xunJian/72x72.png",
+                    "xhdpi" : "unpackage/res/icons-xunJian/96x96.png",
+                    "xxhdpi" : "unpackage/res/icons-xunJian/144x144.png",
+                    "xxxhdpi" : "unpackage/res/icons-xunJian/192x192.png"
                 },
                 "ios" : {
-                    "appstore" : "unpackage/res/icons/1024x1024.png",
+                    "appstore" : "unpackage/res/icons-xunJian/1024x1024.png",
                     "ipad" : {
-                        "app" : "unpackage/res/icons/76x76.png",
-                        "app@2x" : "unpackage/res/icons/152x152.png",
-                        "notification" : "unpackage/res/icons/20x20.png",
-                        "notification@2x" : "unpackage/res/icons/40x40.png",
-                        "proapp@2x" : "unpackage/res/icons/167x167.png",
-                        "settings" : "unpackage/res/icons/29x29.png",
-                        "settings@2x" : "unpackage/res/icons/58x58.png",
-                        "spotlight" : "unpackage/res/icons/40x40.png",
-                        "spotlight@2x" : "unpackage/res/icons/80x80.png"
+                        "app" : "unpackage/res/icons-xunJian/76x76.png",
+                        "app@2x" : "unpackage/res/icons-xunJian/152x152.png",
+                        "notification" : "unpackage/res/icons-xunJian/20x20.png",
+                        "notification@2x" : "unpackage/res/icons-xunJian/40x40.png",
+                        "proapp@2x" : "unpackage/res/icons-xunJian/167x167.png",
+                        "settings" : "unpackage/res/icons-xunJian/29x29.png",
+                        "settings@2x" : "unpackage/res/icons-xunJian/58x58.png",
+                        "spotlight" : "unpackage/res/icons-xunJian/40x40.png",
+                        "spotlight@2x" : "unpackage/res/icons-xunJian/80x80.png"
                     },
                     "iphone" : {
-                        "app@2x" : "unpackage/res/icons/120x120.png",
-                        "app@3x" : "unpackage/res/icons/180x180.png",
-                        "notification@2x" : "unpackage/res/icons/40x40.png",
-                        "notification@3x" : "unpackage/res/icons/60x60.png",
-                        "settings@2x" : "unpackage/res/icons/58x58.png",
-                        "settings@3x" : "unpackage/res/icons/87x87.png",
-                        "spotlight@2x" : "unpackage/res/icons/80x80.png",
-                        "spotlight@3x" : "unpackage/res/icons/120x120.png"
+                        "app@2x" : "unpackage/res/icons-xunJian/120x120.png",
+                        "app@3x" : "unpackage/res/icons-xunJian/180x180.png",
+                        "notification@2x" : "unpackage/res/icons-xunJian/40x40.png",
+                        "notification@3x" : "unpackage/res/icons-xunJian/60x60.png",
+                        "settings@2x" : "unpackage/res/icons-xunJian/58x58.png",
+                        "settings@3x" : "unpackage/res/icons-xunJian/87x87.png",
+                        "spotlight@2x" : "unpackage/res/icons-xunJian/80x80.png",
+                        "spotlight@3x" : "unpackage/res/icons-xunJian/120x120.png"
                     }
                 }
             },

+ 18 - 0
src/pages.json

@@ -979,6 +979,24 @@
                     }
                 }
             ]
+        },
+        {
+            "name": "oa",
+            "root": "pages/business/oa/",
+            "pages": [
+                {
+                    "path": "approval/index",
+                    "style": {
+                        "navigationBarTitleText": "我的申请",
+                        "enablePullDownRefresh": false,
+                        "navigationStyle": "custom",
+                        "app-plus": {
+                            "bounce": "none",
+                            "titleNView": false
+                        }
+                    }
+                }
+            ]
         }
     ],
     "globalStyle": {

+ 290 - 0
src/pages/business/oa/approval/index.vue

@@ -0,0 +1,290 @@
+<template>
+    <u-navbar :autoBack="false" :placeholder="true" :safeAreaInsetTop="true" :bgColor="proxy.$settingStore.themeColor.color">
+      <template #left>
+        <u-icon name="arrow-left" size="20" color="#fff" @click="returnTo('index')"></u-icon>
+      </template>
+      <template #center>
+        <text class="grid-area_center_item_title" style="color: #fff;">我的申请</text>
+      </template>
+    </u-navbar>
+    <oa-scroll
+      customClass="scroll-height"
+      :customStyle="{ height: `calc(100vh - (104px + ${proxy.$settingStore.StatusBarHeight} + ${proxy.$settingStore.tabBarHeight}))` }"
+      :refresherLoad="false"
+      :refresherEnabled="true"
+      :refresherEnabledTitle="false"
+      :refresherDefaultStyle="'none'"
+      :refresherThreshold="44"
+      :refresherBackground="'#f5f6f7'"
+      @refresh="refresh"
+    >
+      <template #default>
+        <view class="home-container">
+            <!-- 我的宫格 -->
+          <view class="grid-area bg-white">
+            <view class="grid-area_center cu-list grid col-4 no-border">
+              <view class="grid-area_center_item cu-item justify-center align-center">
+                <text class="grid-area_center_item_num">{{ state.statistics.pendingSum }}</text>
+                <text class="grid-area_center_item_title">待处理</text>
+              </view>
+              <view class="grid-area_center_item cu-item justify-center align-center">
+                <text class="grid-area_center_item_num">{{ state.statistics.alreadySum }}</text>
+                <text class="grid-area_center_item_title">已处理</text>
+              </view>
+              <view class="grid-area_center_item cu-item justify-center align-center">
+                <text class="grid-area_center_item_num">{{ state.statistics.myInitiated }}</text>
+                <text class="grid-area_center_item_title">已发起</text>
+              </view>
+              <view class="grid-area_center_item cu-item justify-center align-center">
+                <text class="grid-area_center_item_num">{{ state.statistics.myReceived }}</text>
+                <text class="grid-area_center_item_title">我收到的</text>
+              </view>
+            </view>
+          </view>
+          <!-- 我的宫格 -->
+          <view class="grid-area bg-white" v-if="state.formList.length > 0">
+            <view class="grid-area_title">我的</view>
+            <u-icon class="grid-area_icon"  name="arrow-down" color="#000" size="18"  @click="splitNum('recentlyUsed',5)"></u-icon>
+            <!-- <u-icon class="grid-area_icon"  name="arrow-up" color="#000" size="18"  @click="splitNum('recentlyUsed',5)"></u-icon> -->
+            <!-- <u-icon  name="arrow-bottom" size="20" color="#000" @click="returnTo('index')"></u-icon> -->
+            <view class="grid-area_center cu-list grid col-5 no-border">
+              <view class="grid-area_center_item cu-item align-center" v-for="(item, index) in state.formList" :key="index">
+                <image class="grid-area_center_item_image" :src="item.icon"></image>
+                <text class="grid-area_center_item_title" >{{ item.formName }}</text>
+              </view>
+            </view>
+          </view>
+  
+          <!-- 常用功能宫格 -->
+          <!-- <view class="grid-area bg-white">
+            <view class="grid-area_title">人事功能</view>
+            <view class="grid-area_center cu-list grid col-5 no-border">
+              <view class="grid-area_center_item cu-item justify-center align-center" @tap="navItemClick(item)" v-for="(item, index) in state.cuIconList" :key="index">
+                <image class="grid-area_center_item_image" :src="item.meta.icon"></image>
+                <text class="grid-area_center_item_title">{{ item.meta.aliasTitle ? item.meta.aliasTitle : item.meta.title }}</text>
+              </view>
+            </view>
+          </view> -->
+        </view>
+      </template>
+    </oa-scroll>
+  
+    <oa-tabbar :tabbarValue="0" :tabbarList="proxy.$constData.oaApprovalTabbar"></oa-tabbar>
+</template>
+  
+  <script setup>
+  /*----------------------------------依赖引入-----------------------------------*/
+  import { onReady, onLoad, onShow, onNavigationBarButtonTap, onPullDownRefresh, onReachBottom } from "@dcloudio/uni-app";
+  import { ref, onMounted, inject, shallowRef, reactive, getCurrentInstance, toRefs, nextTick } from "vue";
+  /*----------------------------------接口引入-----------------------------------*/
+  import { scan_push, getHomePageData, getFunctionalModuleStatistics, getAppRouters, qrCodeSend, getMobileBanner } from "@/api/index";
+  import { getOaFormDefinition, getFormCount } from "@/api/oa/approval/index";
+  /*----------------------------------组件引入-----------------------------------*/
+  /*----------------------------------store引入-----------------------------------*/
+  import { useStores } from "@/store/modules/index";
+  /*----------------------------------公共方法引入-----------------------------------*/
+  import * as jwx from "@/utils/jssdk.js"; //引入js sdk的封装
+  import { getToken, setToken, removeToken } from "@/utils/auth";
+  import { storage, storageSystem } from "@/utils/storage"; // 公共方法引用
+  /*----------------------------------公共变量-----------------------------------*/
+  const { proxy } = getCurrentInstance();
+  const useStore = useStores();
+  /*----------------------------------变量声明-----------------------------------*/
+  const state = reactive({
+    dialogFlag: false,
+  
+    swiperBool: false,
+    swiperIndex: 0,
+    swiperTime: 5000,
+    swiperList: [],
+  
+    cuIconList: [],
+    recentlyUsed: [],
+    formList:[],
+    statistics:{
+      "pendingSum": 0, 
+      "alreadySum": 0, 
+      "myInitiated": 0, 
+      "myReceived": 0
+    },//头部统计
+  });
+  
+  const { dialogFlag, formList, statistics } = toRefs(state);
+
+  function init(){
+    getFormList(); //获取表单列表数据
+    getStatistics();//获取头部统计
+  }
+  
+  /**
+   * @scrollView刷新数据
+   */
+  function refresh() {
+    getAppRoutersData(); //调用路由信息接口
+  }
+  /**
+   * 表单权限列表
+   */
+  function getFormList(){
+    getOaFormDefinition().then((res) => {
+      state.formList = res.data;
+      for(let i=0;i<state.formList.length;i++){
+        state.formList[i].icon = proxy.$common.getAssetsFile(`images/oa/${state.formList[i].formImage}.png`);
+      }
+      console.log(res.data,state.formList)
+    })
+  }
+  function getStatistics(){
+    getFormCount().then((res)=>{
+      state.statistics = res.data
+    })
+  }
+  /**
+   * 返回上级页面
+   * @param defaultPage 默认页面
+   */
+  function returnTo(defaultPage) {
+    if(getCurrentPages().length > 1){
+      uni.navigateBack()
+    }else{
+      uni.switchTab({
+        url: `/pages/${defaultPage}`
+      })
+    }
+  }
+  /**
+   * 
+   * @param array 展示数组
+   * @param num 显示数量
+   */
+  function splitNum(array,num) {
+    state[array] = state[array].slice(0, num);
+  }
+  
+  /**
+   * @获取路由信息
+   * @api接口请求
+   */
+  function getAppRoutersData() {
+    getAppRouters().then((res) => {
+      state.cuIconList = res.data;
+      storageSystem.set("homeList", state);
+    });
+  }
+  
+  onLoad((options) => {
+    // uni.hideTabBar(); //隐藏自带tabbar
+    // init(options);
+  });
+  
+  onShow(() => {
+    init()
+    // var storages = storageSystem.get("homeList");
+    // Object.keys(storages).forEach((key) => {
+    //   state[key] = storages[key];
+    // });
+  });
+  </script>
+  
+  <style lang="scss" scoped>
+  .home-container {
+    font-family: "Alibaba_PuHuiTi_Regular";
+    .transition {
+      position: fixed;
+      top: 0;
+      left: 0;
+      right: 0;
+      bottom: 0;
+      z-index: 1100;
+  
+      &-section {
+        position: absolute;
+        top: 10px;
+        right: 15px;
+        background-color: #fff;
+        border-radius: 10px;
+        box-shadow: 0px 0px 15px 0 rgba(0, 0, 0, 0.2);
+  
+        &-divider {
+          border-bottom: 0.5px rgba(0, 0, 0, 0.1) solid;
+          margin: 0 20px;
+        }
+  
+        &-content {
+          display: flex;
+          padding: 15px 20px;
+  
+          &-icon {
+            font-size: 18px;
+            color: #000;
+          }
+  
+          &-text {
+            margin: 0 20px;
+          }
+        }
+  
+        &-content:first-child {
+          padding-top: 15px;
+          border-radius: 10px 10px 0 0;
+        }
+  
+        &-content:last-child {
+          padding-bottom: 15px;
+          border-radius: 0 0 10px 10px;
+        }
+  
+        &-content:hover {
+          // transform: 3s;
+          // transition: all 600ms cubic-bezier(0.3, 1, 0.2, 1);
+          transition: all 3s cubic-bezier(0.7, -0.5, 0.2, 2);
+          background-color: rgba(0, 0, 0, 0.1);
+        }
+      }
+    }
+  
+    .grid-area {
+      margin-top: 10px;
+      width:calc(100% - 20px);
+      margin-left:10px;
+      border-radius: 6px;
+      position: relative;
+      &_title {
+        padding: 10px 10px 5px 10px;
+        color: #000000;
+        font-size: $uni-font-size-base;
+      }
+      &_icon {
+        position: absolute;
+        right: 10px;
+        top:10px;
+      }
+      &_center {
+        border-radius: 6px;
+        color:#000;
+        &_item {
+          &_image {
+            width: 40px;
+            height: 40px;
+          }
+          &_title {
+            font-size: $uni-font-size-sm;
+            word-wrap: break-word;
+            max-width: 60px;
+            text-align: center;
+          }
+          &_num {
+            font-size: 16px;
+            
+          }
+        }
+      }
+    }
+  }
+  .topReturn{
+    width:100%;
+    height:44px;
+    line-height: 44px;
+  }
+  </style>
+  

+ 290 - 0
src/pages/business/oa/toDo/index.vue

@@ -0,0 +1,290 @@
+<template>
+    <u-navbar :autoBack="false" :placeholder="true" :safeAreaInsetTop="true" :bgColor="proxy.$settingStore.themeColor.color">
+      <template #left>
+        <u-icon name="arrow-left" size="20" color="#fff" @click="returnTo('index')"></u-icon>
+      </template>
+      <template #center>
+        <text class="grid-area_center_item_title" style="color: #fff;">我的申请</text>
+      </template>
+    </u-navbar>
+    <oa-scroll
+      customClass="scroll-height"
+      :customStyle="{ height: `calc(100vh - (104px + ${proxy.$settingStore.StatusBarHeight} + ${proxy.$settingStore.tabBarHeight}))` }"
+      :refresherLoad="false"
+      :refresherEnabled="true"
+      :refresherEnabledTitle="false"
+      :refresherDefaultStyle="'none'"
+      :refresherThreshold="44"
+      :refresherBackground="'#f5f6f7'"
+      @refresh="refresh"
+    >
+      <template #default>
+        <view class="home-container">
+            <!-- 我的宫格 -->
+          <view class="grid-area bg-white">
+            <view class="grid-area_center cu-list grid col-4 no-border">
+              <view class="grid-area_center_item cu-item justify-center align-center">
+                <text class="grid-area_center_item_num">{{ state.statistics.pendingSum }}</text>
+                <text class="grid-area_center_item_title">待处理</text>
+              </view>
+              <view class="grid-area_center_item cu-item justify-center align-center">
+                <text class="grid-area_center_item_num">{{ state.statistics.alreadySum }}</text>
+                <text class="grid-area_center_item_title">已处理</text>
+              </view>
+              <view class="grid-area_center_item cu-item justify-center align-center">
+                <text class="grid-area_center_item_num">{{ state.statistics.myInitiated }}</text>
+                <text class="grid-area_center_item_title">已发起</text>
+              </view>
+              <view class="grid-area_center_item cu-item justify-center align-center">
+                <text class="grid-area_center_item_num">{{ state.statistics.myReceived }}</text>
+                <text class="grid-area_center_item_title">我收到的</text>
+              </view>
+            </view>
+          </view>
+          <!-- 我的宫格 -->
+          <view class="grid-area bg-white" v-if="state.formList.length > 0">
+            <view class="grid-area_title">我的</view>
+            <u-icon class="grid-area_icon"  name="arrow-down" color="#000" size="18"  @click="splitNum('recentlyUsed',5)"></u-icon>
+            <!-- <u-icon class="grid-area_icon"  name="arrow-up" color="#000" size="18"  @click="splitNum('recentlyUsed',5)"></u-icon> -->
+            <!-- <u-icon  name="arrow-bottom" size="20" color="#000" @click="returnTo('index')"></u-icon> -->
+            <view class="grid-area_center cu-list grid col-5 no-border">
+              <view class="grid-area_center_item cu-item align-center" v-for="(item, index) in state.formList" :key="index">
+                <image class="grid-area_center_item_image" :src="item.icon"></image>
+                <text class="grid-area_center_item_title" >{{ item.formName }}</text>
+              </view>
+            </view>
+          </view>
+  
+          <!-- 常用功能宫格 -->
+          <!-- <view class="grid-area bg-white">
+            <view class="grid-area_title">人事功能</view>
+            <view class="grid-area_center cu-list grid col-5 no-border">
+              <view class="grid-area_center_item cu-item justify-center align-center" @tap="navItemClick(item)" v-for="(item, index) in state.cuIconList" :key="index">
+                <image class="grid-area_center_item_image" :src="item.meta.icon"></image>
+                <text class="grid-area_center_item_title">{{ item.meta.aliasTitle ? item.meta.aliasTitle : item.meta.title }}</text>
+              </view>
+            </view>
+          </view> -->
+        </view>
+      </template>
+    </oa-scroll>
+  
+    <oa-tabbar :tabbarValue="0" :tabbarList="proxy.$constData.oaApprovalTabbar"></oa-tabbar>
+</template>
+  
+  <script setup>
+  /*----------------------------------依赖引入-----------------------------------*/
+  import { onReady, onLoad, onShow, onNavigationBarButtonTap, onPullDownRefresh, onReachBottom } from "@dcloudio/uni-app";
+  import { ref, onMounted, inject, shallowRef, reactive, getCurrentInstance, toRefs, nextTick } from "vue";
+  /*----------------------------------接口引入-----------------------------------*/
+  import { scan_push, getHomePageData, getFunctionalModuleStatistics, getAppRouters, qrCodeSend, getMobileBanner } from "@/api/index";
+  import { getOaFormDefinition, getFormCount } from "@/api/oa/approval/index";
+  /*----------------------------------组件引入-----------------------------------*/
+  /*----------------------------------store引入-----------------------------------*/
+  import { useStores } from "@/store/modules/index";
+  /*----------------------------------公共方法引入-----------------------------------*/
+  import * as jwx from "@/utils/jssdk.js"; //引入js sdk的封装
+  import { getToken, setToken, removeToken } from "@/utils/auth";
+  import { storage, storageSystem } from "@/utils/storage"; // 公共方法引用
+  /*----------------------------------公共变量-----------------------------------*/
+  const { proxy } = getCurrentInstance();
+  const useStore = useStores();
+  /*----------------------------------变量声明-----------------------------------*/
+  const state = reactive({
+    dialogFlag: false,
+  
+    swiperBool: false,
+    swiperIndex: 0,
+    swiperTime: 5000,
+    swiperList: [],
+  
+    cuIconList: [],
+    recentlyUsed: [],
+    formList:[],
+    statistics:{
+      "pendingSum": 0, 
+      "alreadySum": 0, 
+      "myInitiated": 0, 
+      "myReceived": 0
+    },//头部统计
+  });
+  
+  const { dialogFlag, formList, statistics } = toRefs(state);
+
+  function init(){
+    getFormList(); //获取表单列表数据
+    getStatistics();//获取头部统计
+  }
+  
+  /**
+   * @scrollView刷新数据
+   */
+  function refresh() {
+    getAppRoutersData(); //调用路由信息接口
+  }
+  /**
+   * 表单权限列表
+   */
+  function getFormList(){
+    getOaFormDefinition().then((res) => {
+      state.formList = res.data;
+      for(let i=0;i<state.formList.length;i++){
+        state.formList[i].icon = proxy.$common.getAssetsFile(`images/oa/${state.formList[i].formImage}.png`);
+      }
+      console.log(res.data,state.formList)
+    })
+  }
+  function getStatistics(){
+    getFormCount().then((res)=>{
+      state.statistics = res.data
+    })
+  }
+  /**
+   * 返回上级页面
+   * @param defaultPage 默认页面
+   */
+  function returnTo(defaultPage) {
+    if(getCurrentPages().length > 1){
+      uni.navigateBack()
+    }else{
+      uni.switchTab({
+        url: `/pages/${defaultPage}`
+      })
+    }
+  }
+  /**
+   * 
+   * @param array 展示数组
+   * @param num 显示数量
+   */
+  function splitNum(array,num) {
+    state[array] = state[array].slice(0, num);
+  }
+  
+  /**
+   * @获取路由信息
+   * @api接口请求
+   */
+  function getAppRoutersData() {
+    getAppRouters().then((res) => {
+      state.cuIconList = res.data;
+      storageSystem.set("homeList", state);
+    });
+  }
+  
+  onLoad((options) => {
+    // uni.hideTabBar(); //隐藏自带tabbar
+    // init(options);
+  });
+  
+  onShow(() => {
+    init()
+    // var storages = storageSystem.get("homeList");
+    // Object.keys(storages).forEach((key) => {
+    //   state[key] = storages[key];
+    // });
+  });
+  </script>
+  
+  <style lang="scss" scoped>
+  .home-container {
+    font-family: "Alibaba_PuHuiTi_Regular";
+    .transition {
+      position: fixed;
+      top: 0;
+      left: 0;
+      right: 0;
+      bottom: 0;
+      z-index: 1100;
+  
+      &-section {
+        position: absolute;
+        top: 10px;
+        right: 15px;
+        background-color: #fff;
+        border-radius: 10px;
+        box-shadow: 0px 0px 15px 0 rgba(0, 0, 0, 0.2);
+  
+        &-divider {
+          border-bottom: 0.5px rgba(0, 0, 0, 0.1) solid;
+          margin: 0 20px;
+        }
+  
+        &-content {
+          display: flex;
+          padding: 15px 20px;
+  
+          &-icon {
+            font-size: 18px;
+            color: #000;
+          }
+  
+          &-text {
+            margin: 0 20px;
+          }
+        }
+  
+        &-content:first-child {
+          padding-top: 15px;
+          border-radius: 10px 10px 0 0;
+        }
+  
+        &-content:last-child {
+          padding-bottom: 15px;
+          border-radius: 0 0 10px 10px;
+        }
+  
+        &-content:hover {
+          // transform: 3s;
+          // transition: all 600ms cubic-bezier(0.3, 1, 0.2, 1);
+          transition: all 3s cubic-bezier(0.7, -0.5, 0.2, 2);
+          background-color: rgba(0, 0, 0, 0.1);
+        }
+      }
+    }
+  
+    .grid-area {
+      margin-top: 10px;
+      width:calc(100% - 20px);
+      margin-left:10px;
+      border-radius: 6px;
+      position: relative;
+      &_title {
+        padding: 10px 10px 5px 10px;
+        color: #000000;
+        font-size: $uni-font-size-base;
+      }
+      &_icon {
+        position: absolute;
+        right: 10px;
+        top:10px;
+      }
+      &_center {
+        border-radius: 6px;
+        color:#000;
+        &_item {
+          &_image {
+            width: 40px;
+            height: 40px;
+          }
+          &_title {
+            font-size: $uni-font-size-sm;
+            word-wrap: break-word;
+            max-width: 60px;
+            text-align: center;
+          }
+          &_num {
+            font-size: 16px;
+            
+          }
+        }
+      }
+    }
+  }
+  .topReturn{
+    width:100%;
+    height:44px;
+    line-height: 44px;
+  }
+  </style>
+  

+ 5 - 5
src/pages/login.vue

@@ -180,10 +180,10 @@ function init() {
   useStore.GetWxOpenId(1); //调用获取微信公众号openId
 
   if (window.location.host) {
-    linkUrl.value = window.location.host;
-    // linkUrl.value = "192.168.10.165:13200";
+    // linkUrl.value = window.location.host;
+    linkUrl.value = "192.168.10.165:13200";
     // linkUrl.value = "localhost:81";
-    // linkUrl.value = "xf.usky.cn:13212";
+    // linkUrl.value = "120.26.164.249:13212";
     // linkUrl.value = "manager.usky.cn";
     useStore.GetMobileTenantConfig({ url: linkUrl.value });
   }
@@ -195,8 +195,8 @@ function init() {
     useStore.GetMobileTenantConfig({ url: linkUrl.value });
   } else {
     if(config.appInfo.appid == '__UNI__BF1A1F0'){
-      uni.setStorageSync("serveUrl", "xf.usky.cn:13212");
-      commonStore.setServeList("xf.usky.cn:13212", "");
+      uni.setStorageSync("serveUrl", "120.26.164.249:13212");
+      commonStore.setServeList("120.26.164.249:13212", "");
     }else{
       uni.setStorageSync("serveUrl", "manager.usky.cn");
       commonStore.setServeList("manager.usky.cn", "");

+ 9 - 0
src/plugins/common.plugins.js

@@ -303,4 +303,13 @@ export default {
       uni.previewImage(param)
     }
   },
+  /**
+   * 获取本地图片
+   * @param {图片路径} url
+   * @returns
+   */
+  getAssetsFile(url) {
+    var img = `/static/${url}`
+    return new URL(img, import.meta.url).href;
+  },
 };

+ 22 - 1
src/plugins/constData.plugins.js

@@ -139,6 +139,26 @@ let projectTabbar = [
 	// },
 ]
 
+// OA-我的申请导航栏
+let oaApprovalTabbar = [
+	{
+		pagePath: "/pages/business/oa/approval/index",
+		iconClass: "oaIcon-tab-reportRecord",
+		iconPath: "/static/images/tabBar/tab-approval-gray.png",
+		selectedIconPath: "/static/images/tabBar/tab-approval-blue.png",
+		text: "我的申请",
+		dot: false,
+	},
+	{
+		pagePath: "/pages/business/oa/toDo/index",
+		iconClass: "oaIcon-tab-reportInsert",
+		iconPath: "/static/images/tabBar/tab-toDo-gray.png",
+		selectedIconPath: "/static/images/tabBar/tab-toDo-blue.png",
+		text: "我的待办",
+		dot: false,
+	}
+]
+
 
 export default {
 	// 主题列表
@@ -288,5 +308,6 @@ export default {
 	homeRouter: homeRouter,
 	xunJianList: xunJianList,
 	homeTabbar: homeTabbar,
-	projectTabbar: projectTabbar
+	projectTabbar: projectTabbar,
+	oaApprovalTabbar:oaApprovalTabbar
 };

BIN
src/static/font/Alibaba_PuHuiTi_2.0_55_Regular_55_Regular.ttf


BIN
src/static/images/oa/fuKuan.png


BIN
src/static/images/oa/qingJia.png


BIN
src/static/images/oa/yongYin.png


BIN
src/static/images/tabBar/tab-approval-blue.png


BIN
src/static/images/tabBar/tab-approval-gray.png


BIN
src/static/images/tabBar/tab-toDo-blue.png


BIN
src/static/images/tabBar/tab-toDo-gray.png


+ 39 - 0
src/static/scss/font.scss

@@ -0,0 +1,39 @@
+// /* 数字特殊字体 */
+// @font-face {
+//     /*给字体命名*/
+//     font-family: 'DINCondBold';
+//     /*引入字体文件*/
+//     src: url('@/assets/font/DINCond-Bold.otf');
+//     font-weight: normal;
+//     font-style: normal;
+// }
+ 
+// /* 时间特殊字体 */
+// @font-face {
+//     /*给字体命名*/
+//     font-family: 'DigitalBold';
+//     /*引入字体文件*/
+//     src: url('@/assets/font/DS-Digital-Bold.ttf');
+//     font-weight: normal;
+//     font-style: normal;
+// }
+
+// /* 标题特殊字体 */
+// @font-face {
+//     /*给字体命名*/
+//     font-family: 'SourceHanSansCN-Heavy';
+//     /*引入字体文件*/
+//     src: url('@/assets/font/SourceHanSansCN-Heavy.otf');
+//     font-weight: normal;
+//     font-style: normal;
+// }
+/* 内容特殊字体 */
+@font-face {
+    /*给字体命名*/
+    font-family: 'Alibaba_PuHuiTi_Regular';
+    /*引入字体文件*/
+    src: url('@/static/font/Alibaba_PuHuiTi_2.0_55_Regular_55_Regular.ttf');
+    font-weight: normal;
+    font-style: normal;
+}
+

+ 1 - 0
src/static/scss/index.scss

@@ -8,6 +8,7 @@
 @import "@/static/iconfont/iconfont.css";
 // sidebar
 @import "./sidebar.scss";
+@import "./font.scss";
 
 
 .weight {

BIN
unpackage/res/push-xunJian/1024x1024.png


BIN
unpackage/res/push-xunJian/120x120.png


BIN
unpackage/res/push-xunJian/144x144.png


BIN
unpackage/res/push-xunJian/152x152.png


BIN
unpackage/res/push-xunJian/167x167.png


BIN
unpackage/res/push-xunJian/180x180.png


BIN
unpackage/res/push-xunJian/192x192.png


BIN
unpackage/res/push-xunJian/20x20.png


BIN
unpackage/res/push-xunJian/29x29.png


BIN
unpackage/res/push-xunJian/40x40.png


BIN
unpackage/res/push-xunJian/58x58.png


BIN
unpackage/res/push-xunJian/60x60.png


BIN
unpackage/res/push-xunJian/72x72.png


BIN
unpackage/res/push-xunJian/76x76.png


BIN
unpackage/res/push-xunJian/80x80.png


BIN
unpackage/res/push-xunJian/87x87.png


BIN
unpackage/res/push-xunJian/96x96.png