yrik 4 anos atrás
pai
commit
680afc3ea3
39 arquivos alterados com 3415 adições e 285 exclusões
  1. 8 0
      boman-h5/.env.development
  2. 5 0
      boman-h5/.env.production
  3. 7 0
      boman-h5/.env.staging
  4. 9 1
      boman-h5/http.js
  5. 0 0
      boman-h5/src/assets/img/icon_back_enter.png
  6. BIN
      boman-h5/src/assets/img/icon_kadk-dw.png
  7. BIN
      boman-h5/src/assets/img/icon_kqdk_jrfw.png
  8. BIN
      boman-h5/src/assets/img/icon_mine_qjjl.png
  9. BIN
      boman-h5/src/assets/img/icon_mine_setting.png
  10. BIN
      boman-h5/src/assets/img/icon_mine_spjl.png
  11. BIN
      boman-h5/src/assets/img/icon_rqxz.png
  12. BIN
      boman-h5/src/assets/img/icon_tab_hp_selected.png
  13. BIN
      boman-h5/src/assets/img/icon_xl.png
  14. BIN
      boman-h5/src/assets/img/icon_xxjl_blue.png
  15. BIN
      boman-h5/src/assets/img/pic_tjxx_sus.png
  16. BIN
      boman-h5/src/assets/img/pic_zt_shtg.png
  17. BIN
      boman-h5/src/assets/img/tx.jpg
  18. 73 11
      boman-h5/src/components/common/Navbar.vue
  19. 3 0
      boman-h5/src/main.js
  20. 68 0
      boman-h5/src/router/index.js
  21. 49 26
      boman-h5/src/views/Home.vue
  22. 27 14
      boman-h5/src/views/Login.vue
  23. 108 85
      boman-h5/src/views/approval.vue
  24. 131 0
      boman-h5/src/views/assword.vue
  25. 310 0
      boman-h5/src/views/details.vue
  26. 378 0
      boman-h5/src/views/ecord.vue
  27. 312 142
      boman-h5/src/views/leave.vue
  28. 251 0
      boman-h5/src/views/lock.vue
  29. 0 0
      boman-h5/src/views/nformation.vue
  30. 138 0
      boman-h5/src/views/number.vue
  31. 279 0
      boman-h5/src/views/ord.vue
  32. 325 0
      boman-h5/src/views/proval.vue
  33. 284 0
      boman-h5/src/views/record.vue
  34. 102 0
      boman-h5/src/views/set.vue
  35. 292 0
      boman-h5/src/views/ttendance.vue
  36. 75 0
      boman-h5/src/views/ubmit.vue
  37. 57 5
      boman-h5/src/views/user.vue
  38. 6 1
      boman-h5/src/views/workbench.vue
  39. 118 0
      boman-h5/vue.config.js

+ 8 - 0
boman-h5/.env.development

@@ -0,0 +1,8 @@
+# 开发环境配置
+ENV = 'development'
+
+# 潜山市云数据中心/开发环境
+VUE_APP_BASE_API = '/dev-api'
+
+# 路由懒加载
+VUE_CLI_BABEL_TRANSPILE_MODULES = true

+ 5 - 0
boman-h5/.env.production

@@ -0,0 +1,5 @@
+# 生产环境配置
+ENV = 'production'
+
+# 潜山市云数据中心/生产环境
+VUE_APP_BASE_API = '/prod-api'

+ 7 - 0
boman-h5/.env.staging

@@ -0,0 +1,7 @@
+NODE_ENV = production
+
+# 测试环境配置
+ENV = 'staging'
+
+# 潜山市云数据中心/测试环境
+VUE_APP_BASE_API = '/stage-api'

+ 9 - 1
boman-h5/http.js

@@ -1,14 +1,21 @@
 import axios from 'axios'
 import router from './src/router'
 import Vue from 'vue'
+
 const http = axios.create({
-    baseURL:'http://112.74.99.5:3000/web/api'
+    // baseURL:'http://112.74.99.5:3000/web/api',
+    baseURL:'http://192.168.101.11:8090',  
+    timeout: 30000,
+    headers:{'Content-Type':'application/json;charset=utf-8'}
+    
 })
 
 
 http.interceptors.request.use(function (config) {
     if(localStorage.getItem('token') && localStorage.getItem('id')){
+      console.log(localStorage.getItem('token'))
         config.headers.Authorization = 'Bearer ' + localStorage.getItem('token')
+        // config.headers.Authorization =  localStorage.getItem('token')
     }
     return config;
   }, function (error) {
@@ -18,6 +25,7 @@ http.interceptors.request.use(function (config) {
 http.interceptors.response.use(function (response) {
     return response;
   }, function (error) {
+    console.log(error)
      if(error.response.status == 401 || error.response.status == 402){
          router.push('/login')
          Vue.prototype.$msg.fail(error.response.data.message)

+ 0 - 0
boman-h5/src/assets/img/icon_b;ack_enter.png → boman-h5/src/assets/img/icon_back_enter.png


BIN
boman-h5/src/assets/img/icon_kadk-dw.png


BIN
boman-h5/src/assets/img/icon_kqdk_jrfw.png


BIN
boman-h5/src/assets/img/icon_mine_qjjl.png


BIN
boman-h5/src/assets/img/icon_mine_setting.png


BIN
boman-h5/src/assets/img/icon_mine_spjl.png


BIN
boman-h5/src/assets/img/icon_rqxz.png


BIN
boman-h5/src/assets/img/icon_tab_hp_selected.png


BIN
boman-h5/src/assets/img/icon_xl.png


BIN
boman-h5/src/assets/img/icon_xxjl_blue.png


BIN
boman-h5/src/assets/img/pic_tjxx_sus.png


BIN
boman-h5/src/assets/img/pic_zt_shtg.png


BIN
boman-h5/src/assets/img/tx.jpg


+ 73 - 11
boman-h5/src/components/common/Navbar.vue

@@ -1,34 +1,96 @@
 <template>
-  <div class="NavBar">
-		  <van-tabbar  v-model="active" @change="onChange">
-		    <van-tabbar-item icon="wap-home">首页</van-tabbar-item>
-		    <van-tabbar-item icon="comment">工作台</van-tabbar-item>
-		    <van-tabbar-item icon="manager">个人中心</van-tabbar-item>
+  <div class="NavBar" id="NavBar">
+		  <van-tabbar  v-model="tabbarTempValue" @change="onChange"  >
+		    <van-tabbar-item   icon="wap-home">首页</van-tabbar-item>
+		    <van-tabbar-item  icon="comment">工作台</van-tabbar-item>
+		    <van-tabbar-item   icon="manager">个人中心</van-tabbar-item>
 		  </van-tabbar>
+          <router-view></router-view>
+          <!-- <router-view />
+        <van-tabbar v-model="tabbarTempValue">
+            <van-tabbar-item
+                v-for="(item,index) in tabbars"
+                :key="index"
+                :to="(item.name)"
+            >
+                <span>{{item.title}}</span>
+                <img
+                    slot="icon"
+                    slot-scope="props"
+                    :src="props.active ? item.active : item.normal"
+                />
+            </van-tabbar-item>
+        </van-tabbar> -->
+
   </div>
 </template>
 
 <script>
+import Vue from 'vue';
+import VueRouter from 'vue-router';
 export default {
+    props: {
+    active: Number
+  },
+  name:'NavBar',
     data() {
         return {
-            imgUrl:'',
-			active: 0,
+            imgUrl:'',
+			tabbarTempValue: this.active,
+            tabbars: [
+				{
+					name: "/",
+					title: "首页",
+					normal: "http://test2.h-etrip.com/app/assets/img/TabsHome.png",
+					active: "../../assets/img/icon_tab_hp_selected.png"
+				},
+				{
+					name: "/workbench",
+					title: "工作台",
+					normal: "http://test2.h-etrip.com/app/assets/img/TabsTravel.png",
+					active: "http://test2.h-etrip.com/app/assets/img/TabsTravelFocus.png"
+				},
+				{
+					name: "/user",
+					title: "我的",
+					normal: "http://test2.h-etrip.com/app/assets/img/TabsFace.png",
+					active: "http://test2.h-etrip.com/app/assets/img/TabsFaceFocus.png"
+				}
+			]
         }
     },
+    created() {
+          //由于 vant 标签栏路由模式,无法自动加载页面,所以这里需要初始化
+            console.log(this.$route);//打印当前路由属性
+            // if (this.$route.path === '/') {
+            //     this.$router.push('/home');
+            // }
+        },
     methods:{
         async NavInit() {
             if(localStorage.getItem('token')){
             const res = await this.$http.get('/user/' + localStorage.getItem('id'))
             this.imgUrl = res.data[0].user_img
             }
-        },
-		onChange(index){
-			
+        },
+       
+		onChange(index){
+			console.log(index)
+            this.tabbarTempValue = 0
+            // this.active = index
+            // console.log(this.tabbarTempValue)
+            if(index == 0){
+             this.$router.push("/home");
+            }else if(index == 1){
+                this.$router.push("/workbench");
+            }else{
+              this.$router.push("/user");
+            }
+            
 		}
     },
     mounted() {
-        this.NavInit()
+        // this.NavInit()
     }
 }
 </script>

+ 3 - 0
boman-h5/src/main.js

@@ -6,8 +6,11 @@ import {Toast} from 'vant'
 import 'vant/lib/index.css';
 import http from '../http'
 import '@/assets/style.css'
+import { Notify } from 'vant';
 Vue.prototype.$http = http
+// Vue.prototype.$axios = axios;
 Vue.prototype.$msg = Toast
+Vue.prototype.$Notify = Notify
 
 Vue.use(vant)
 

+ 68 - 0
boman-h5/src/router/index.js

@@ -12,6 +12,19 @@ const cwAttendanceDec = ()=>import('@/views/cwAttendanceDec.vue')
 const user = ()=>import('@/views/user.vue')
 const leave = ()=>import('@/views/leave.vue')
 const approval = ()=>import('@/views/approval.vue')
+const details = ()=>import('@/views/details.vue')
+const record = ()=>import('@/views/record.vue')
+const ecord = ()=>import('@/views/ecord.vue')
+const ubmit = ()=>import('@/views/ubmit.vue')
+const lock = ()=>import('@/views/lock.vue')
+const ttendance = ()=>import('@/views/ttendance.vue')
+const set = ()=>import('@/views/set.vue')
+const number = ()=>import('@/views/number.vue')
+const assword = ()=>import('@/views/assword.vue')
+const nformation = ()=>import('@/views/nformation.vue')
+const ord = ()=>import('@/views/ord.vue')
+const proval = ()=>import('@/views/proval.vue')
+
 Vue.use(VueRouter)
   const routes = [
      {
@@ -21,6 +34,13 @@ Vue.use(VueRouter)
          keepalive:true
        }
      },
+     {
+      path:'/home',
+      component:Home,
+      meta:{
+        keepalive:true
+      }
+    },
      {
        path:'/register',
        component:register
@@ -70,6 +90,54 @@ Vue.use(VueRouter)
     {
       path:'/approval',
       component:approval
+    },
+    {
+      path:'/details',
+      component:details
+    },
+    {
+      path:'/record',
+      component:record
+    },
+    {
+      path:'/ecord',
+      component:ecord
+    },
+    {
+      path:'/ubmit',
+      component:ubmit
+    },
+    {
+      path:'/lock',
+      component:lock
+    },
+    {
+      path:'/ttendance',
+      component:ttendance
+    },
+    {
+      path:'/set',
+      component:set
+    }, 
+    {
+      path:'/number',
+      component:number
+    },
+    {
+      path:'/assword',
+      component:assword
+    },
+    {
+      path:'/nformation',
+      component:nformation
+    },
+    {
+      path:'/ord',
+      component:ord
+    },
+    {
+      path:'/proval',
+      component:proval
     }
   ]
 

+ 49 - 26
boman-h5/src/views/Home.vue

@@ -2,6 +2,10 @@
   <div class="home" v-if="category">
     <div class="categorytab">
       <!-- <div class="category-ico" @click="$router.push('/editcategory')"><van-icon name="setting-o" /></div> -->
+     <van-nav-bar
+                    title="首页"
+                    :left-arrow="false"
+                />
      <div class="index_header">
 		   <div class="inhe_one">
           <p>
@@ -33,21 +37,21 @@
        </div>
 	 </div>
    <div class="index_nav">
-     <p>
+     <p @click="lock">
        <span>考勤打卡</span>
        <img src="../assets/img/icon_hp_kqdk.png" alt="">
      </p>
-     <p>
+     <p @click="application">
        <span>请假申请</span>
        <img src="../assets/img/icon_hp_qjsq.png" alt="">
      </p>
-     <p>
+     <p @click="pproved">
        <span>待审批</span>
        <img src="../assets/img/icon_hp_dsp.png" alt="">
      </p>
    </div>
     </div>
-	<nav-bar></nav-bar>
+   <nav-bar v-bind:active=0></nav-bar>
   </div>
 </template>
 
@@ -65,13 +69,13 @@ export default {
     NavBar,
     cover
   },
-  activated() {
-    if(localStorage.getItem('newCat')) {
-        let newCat = JSON.parse(localStorage.getItem('newCat'))
-        this.category = this.changeCategory(newCat)
-        this.selectArticle();
-    }
-  },
+  // activated() {
+  //   if(localStorage.getItem('newCat')) {
+  //       let newCat = JSON.parse(localStorage.getItem('newCat'))
+  //       this.category = this.changeCategory(newCat)
+  //       this.selectArticle();
+  //   }
+  // },
   methods: {
     async selectCategory() {
       if(localStorage.getItem('newCat')) {
@@ -107,27 +111,45 @@ export default {
       }
     },
     onLoad() {
-      const categoryitem = this.categoryItem();
-      setTimeout(() => {
-        categoryitem.page += 1;
-        this.selectArticle();
-      }, 1000);
+      // const categoryitem = this.categoryItem();
+      // setTimeout(() => {
+      //   categoryitem.page += 1;
+      //   this.selectArticle();
+      // }, 1000);
+      console.log(456)
+    },
+    // categoryItem() {
+    //   const categoryitem = this.category[this.active];
+    //   return categoryitem;
+    // } 
+    // 考勤打卡
+    lock(){
+       this.$router.push("/lock");
+    },
+    // 请假申请
+    application(){
+    this.$router.push("/leave");
     },
-    categoryItem() {
-      const categoryitem = this.category[this.active];
-      return categoryitem;
+    // 待审批
+    pproved(){
+    this.$router.push("/approval");
     }
   },
   watch: {
-    active() {
-      const categoryitem = this.categoryItem();
-      if (!categoryitem.list.length) {
-        this.selectArticle();
-      }
-    }
+    // active() {
+    //   const categoryitem = this.categoryItem();
+    //   if (!categoryitem.list.length) {
+    //     this.selectArticle();
+    //   }
+    // }
+  },
+  mounted(){
+ console.log(345)
   },
   created() {
-    this.selectCategory();
+    console.log(this.active)
+    console.log(345)
+    // this.selectCategory();
   }
 };
 </script>
@@ -163,6 +185,7 @@ export default {
              font-weight: 500;
              color: #666666;
               line-height: 6.933vw;
+              
              i{
                font-style: normal;
                font-size: 6.4vw;

+ 27 - 14
boman-h5/src/views/Login.vue

@@ -11,11 +11,11 @@
 		</div> 
 		<div class="user_name">
 			<p>用户名</p>
-			<p><input type="text" placeholder="请输入用户名"></p>
+			<p><input type="text" v-model="model.username" placeholder="请输入用户名"></p>
 		</div>
 		<div class="user_name">
 			<p>密码</p>
-			<p><input type="text" placeholder="请输入密码"></p>
+			<p><input type="text" v-model="model.password" placeholder="请输入密码"></p>
 		</div>
         <!-- <login-text label="用户名" 
         placeholder="请输入用户名"
@@ -42,7 +42,9 @@ import LoginBtn from '@/components/common/LoginBtn.vue'
 export default {
     data() {
         return {
-            model:{}
+            model:{},
+			username:'',
+			password:''
         }
     },
     components:{
@@ -53,22 +55,33 @@ export default {
     methods:{
         async AjaxInsert() {
             let rulg = /^.{6,16}$/
-            if(rulg.test(this.model.username)&&rulg.test(this.model.password)){
-                const res =  await this.$http.post('/login',this.model)
-                this.$msg.fail(res.data.msg)
+            // if(rulg.test(this.model.username)&&rulg.test(this.model.password)){
+                const res =  await this.$http.post('/boman-auth/login',this.model)
+                // this.$msg.fail(res.data.msg)
                 if(res.data.code == 301 || res.data.code == 302){
                     return
                 }
-                localStorage.setItem('token',res.data.token)
-                localStorage.setItem('id',res.data.id)
+				if(res.data.code !== 200){
+					this.$msg.fail(res.data.msg)
+				}
+				console.log(res.data.msg)
+                localStorage.setItem('token',res.data.data.access_token)
+                // localStorage.setItem('id',res.data.id)
                 setTimeout(() => {  
-                    this.$router.push('/userinfo')
+                    this.$router.push('/home')
                 },1000)
-            }else{
-                this.$msg.fail('格式不正确,请重新输入!')
-            }
-        }
-    }
+            // }else{
+            //     this.$msg.fail('格式不正确,请重新输入!')
+            // }
+        },
+	   async selectCategory() {
+     
+      const res = await this.$http.get("/category");
+    },
+    },
+	created(){
+		// this.selectCategory()
+	}
 }
 </script>
 

+ 108 - 85
boman-h5/src/views/approval.vue

@@ -1,114 +1,137 @@
 <template>
-    <div>
-        <div class="detailItem">
-            <div class="imgparent">
-                <van-nav-bar
-                    title="待审批"
-                    left-text="返回"
-                    left-arrow
-                    @click-left="onClickLeft"
-                />
-            </div>
-            <div class="approva_header">
-                <van-notice-bar
-                    color="#1989fa"
-                    background="#fff"
-                    left-icon="volume-o"
-                >
-                    技术是开发它的人的共同灵魂。
-                </van-notice-bar>
-            </div>
-            <div>
-                <van-list
-                    v-model="loading"
-                    :finished="finished"
-                    finished-text="没有更多了"
-                    @load="onLoad"
-                >
-                    <div class="approba_nave" v-for="(item,index) in list" :key="index">
-                        <p>
-                            <span class="soei"><i>王明</i>的请假申请</span>
-                            <span>2021-04-24</span>
-                        </p>
-                        <p>请假类型:事假</p>
-                        <p>开始时间:2021-04-25 13:00</p>
-                        <p>结束时间:2021-04-25 18:00</p>
-                    </div>
-                </van-list>
-            </div>
+  <div>
+    <div class="detailItem">
+      <div class="imgparent">
+        <van-nav-bar
+          title="待审批"
+          left-text="返回"
+          left-arrow
+          @click-left="onClickLeft"
+        />
+      </div>
+      <div class="approva_header">
+        <van-notice-bar
+          color="#1989fa"
+          background="#fff"
+          left-icon="volume-o"
+        >
+          技术是开发它的人的共同灵魂。
+        </van-notice-bar>
+      </div>
+      <div>
+        <van-list
+          v-model="loading"
+          :finished="finished"
+          :finished-text="finishedText"
+          @load="onLoad"
+          :immediate-check="false"
+        >
+          <div
+            class="approba_nave"
+            v-for="(item,index) in allHouseDetail"
+            :key="index"
+            @click="xiangq(item.id)"
+          >
+            <p>
+              <span class="soei"><i>{{item.leavefrom_user_name}}</i>的请假申请</span>
+              <span>{{item.leavefrom_start_time}}</span>
+            </p>
+            <p>请假类型:{{item.leavefrom_leave_type}}</p>
+            <p>开始时间:{{item.leavefrom_start_time}}</p>
+            <p>结束时间:{{item.leavefrom_end_time}}</p>
+          </div>
+        </van-list>
+      </div>
 
-        </div>
     </div>
+  </div>
 </template>
 
 <script>
 export default {
   data() {
     return {
-      value: "",
-      valuetao: "",
-      valuestartime: "",
-      valueendtime: "",
-      columns: ["杭州", "宁波", "温州", "嘉兴", "湖州"],
-      columnstwo: ["杭州1", "宁波1", "温州1", "嘉兴1", "湖州1"],
-      showPicker: false,
-      showPickertwo: false,
-      showPickerstr: false, //开始时间
-      showPickerend: false, //结束时间
-      minDate: new Date(2020, 0, 1),
-      maxDate: new Date(2025, 10, 1),
-      currentDate: new Date(),
       message: "",
       uploader: [{ url: "https://img01.yzcdn.cn/vant/leaf.jpg" }],
-      list: [],
+      allHouseDetail: [],
       loading: false,
       finished: false,
+      qurmond: {
+        table: "leavefrom",
+        pageNo: 1,
+        pageSize: 4,
+        orderBy: "create_time desc",
+        fixedData: {
+          condition: {
+            status: 1
+          }
+        },
+      },
+       page: 1, // 当前页码
+       page_size: 100, // 每页多少条
+        total: 0, // 总条数
+        error: false, // 错误提示
+        refreshing: false ,// 下拉刷新
+        finishedText:''
     };
   },
   props: ["detailitem"],
 
   methods: {
-    onClickLeft() {},
+    onClickLeft() {
+      this.$router.go(-1);
+    },
     onConfirm(value) {
       this.value = value;
       this.showPicker = false;
     },
-    // 请假类型
-    onConfirmtwo(value) {
-      this.valuetao = value;
-      this.showPickertwo = false;
-    },
-    // 开始时间
-    onConfirmstatime(value) {
-      this.valuestartime = value;
-      this.showPickerstr = false;
-    },
-    // 结束时间
-    onConfirmsendtime(value) {
-      this.valueendtime = value;
-      this.showPickerend = false;
+    xiangq(index) {
+      this.$router.push("/details?id=" + index);
     },
-    // 提交
-    onSubmit(values) {
-      console.log("submit", values);
+    async appList() {
+      const res = await this.$http.post(
+        "/boman-web-core/p/cs/queryList",
+        this.qurmond
+      );
+      console.log(res);
+      if (res.data.code !== 200) {
+        this.$msg.fail(res.data.msg);
+        return false;
+      }
+      // this.allHouseDetail = res.data.data.rows;
+       if (this.qurmond.pageNo == 1) {
+      this.loading = false
+      this.allHouseDetail = res.data.data.rows;
+      this.total = res.total;
+    } else {
+      this.loading = false
+      this.allHouseDetail = this.allHouseDetail.concat(res.data.data.rows)
+      this.total = res.data.total;
+    }
+    if(res.data.data.rows.length < this.qurmond.pageSize){
+      this.finished = true;
+      this.finishedText = '没有更多啦';
+    }
+    if (res.data.data.rows.length == 0) {
+      this.finished = true;
+      this.finishedText = '暂无数据';
+      console.log(34)
+    } else if (res.data.data.rows.length < this.qurmond.pageSize) {
+      console.log(12)
+      this.finished = true;
+      this.finishedText = '没有更多啦';
+    }
+    console.log(this.allHouseDetail)
     },
     onLoad() {
       // 异步更新数据
       // setTimeout 仅做示例,真实场景中一般为 ajax 请求
-      setTimeout(() => {
-        for (let i = 0; i < 10; i++) {
-          this.list.push(this.list.length + 1);
-        }
-
-        // 加载状态结束
-        this.loading = false;
-
-        // 数据全部加载完成
-        if (this.list.length >= 40) {
-          this.finished = true;
-        }
-      }, 1000);
-    },
+      this.qurmond.pageNo++; 
+      this.appList();
+    }
+  },
+  created() {
+    this.appList();
   }
 };
 </script>
@@ -139,7 +162,7 @@ export default {
 <style scoped lang="less">
 .detailItem {
   background-color: #fff;
-//   height: 100vh;
+  //   height: 100vh;
   p {
     font-size: 3.333vw;
     padding: 0.833vw 0;

+ 131 - 0
boman-h5/src/views/assword.vue

@@ -0,0 +1,131 @@
+<template>
+    <div class="number">
+        <div class="imgparent">
+            <van-nav-bar
+                title="修改密码"
+                left-arrow
+                @click-left="onClickLeft"
+            />
+        </div>
+        <div class="set_nav">
+            <!-- <p><span>手机号码</span><span>138****5438</span></p> -->
+            <van-form
+                @submit="onSubmit"
+                style="margin-top:36px;"
+            >
+                <van-field
+                    v-model="username"
+                    name="新密码"
+                    label="新密码"
+                    placeholder="请输入新密码"
+                    :rules="[{ required: true, message: '请填写新密码' }]"
+                />
+                <van-field
+                    v-model="username"
+                    name="再次确认密码"
+                    label="再次确认密码"
+                    placeholder="请输入再次确认密码"
+                    :rules="[{ required: true, message: '请填写再次确认密码' }]"
+                />
+                <div class="srt_bottm">
+                    <p @click="subimt">确认</p>
+                </div>
+            </van-form>
+
+        </div>
+
+    </div>
+</template>
+
+<script>
+export default {
+  data() {
+    return {
+      model: {}
+    };
+  },
+  methods: {
+    async userData() {
+      const res = await this.$http.get("/user/" + localStorage.getItem("id"));
+      this.model = res.data[0];
+    },
+    onClickLeft() {}
+  },
+  created() {
+    // this.userData();
+  }
+};
+</script>
+
+<style lang="less">
+.number {
+  .van-cell::after {
+    border: 0;
+  }
+  .van-field__control {
+    text-align: right;
+  }
+  .van-button--primary {
+    background-color: #fff;
+    border: 1px solid #fff;
+    color: #009fe8;
+    font-size: 14px;
+    font-family: PingFang SC;
+    font-weight: 400;
+    color: #009fe8;
+    border-left: 1px solid #a7a7a7;
+  }
+  background-color: #fff;
+  height: 100vh;
+  //   padding: 0 16px;
+  .set_nav {
+    // padding: 0 16px;
+    // padding-bottom: 36px;
+    p {
+      font-size: 3.733vw;
+      font-family: PingFang SC;
+      font-weight: 500;
+      color: #343434;
+    //   display: flex;
+    //   justify-content: space-between;
+      margin-top: 35px;
+      span {
+        font-size: 3.733vw;
+        font-family: PingFang SC;
+        font-weight: 500;
+        color: #343434;
+      }
+      span:nth-child(2) {
+        font-size: 3.733vw;
+        font-family: PingFang SC;
+        font-weight: 400;
+        color: #343434;
+        img {
+          width: 6px;
+          height: 9px;
+        }
+      }
+    }
+  }
+  .srt_bottm {
+    margin-top: 70%;
+    // background-color: #009fe8;
+    // margin: 0 16px;
+    p {
+      height: 42px;
+        // width: 100%;
+      margin: 0 16px;
+      background-color: #009fe8;
+      border-radius: 3px;
+      font-size: 14px;
+      font-family: PingFang SC;
+      font-weight: 400;
+      color: #ffffff;
+      line-height: 42px;
+      text-align: center;
+    //   margin-left: 50%;
+    //   transform: translateX(-50%);
+    }
+  }
+}
+</style>

+ 310 - 0
boman-h5/src/views/details.vue

@@ -0,0 +1,310 @@
+<template>
+    <div>
+        <div class="detailItem detailes">
+            <div class="imgparent">
+                <van-nav-bar
+                    title="详情"
+                    left-text="返回"
+                    left-arrow
+                    @click-left="onClickLeft"
+                />
+            </div>
+            <div>
+                <div class="approba_nave">
+                    <p>
+                        <span class="soei"><i>{{detaList.hrChildren[1].columnValue}}</i>的请假申请</span>
+                    </p>
+                    <p></p>
+                    <p>提交时间:2021-04-25 13:00</p>
+                    <p>审批状态:已通过</p>
+                    
+                </div>
+            </div>
+            <div class="approba_nition">
+                <p>审批编号</p>
+                <p>20210424134500456832</p>
+            </div>
+            <div class="approba_nition">
+                <p>所在部门</p>
+                <p>市监局</p>
+            </div>
+            <div class="approba_nition">
+                <p>请假类型</p>
+                <p>事假</p>
+            </div>
+            <div class="approba_nition">
+                <p>请假开始时间</p>
+                <p>2021-04-25 13:00</p>
+            </div>
+            <div class="approba_nition">
+                <p>请假结束时间</p>
+                <p>2021-04-25 18:00</p>
+            </div>
+            <div class="approba_nition">
+                <p>请假事由</p>
+                <p>去医院接种新冠疫苗</p>
+            </div>
+            <div class="approba_nition">
+                <p>图片</p>
+                <p><img
+                        src="../assets/img/icon_hp_spjl.png"
+                        alt=""
+                    ></p>
+            </div>
+            <div class="details_bott">
+                <p @click="showPopup">驳回审批</p>
+                <p @click="tyi">同意审批</p>
+            </div>
+
+            <van-popup v-model="show">
+                <div class="detalies_boname">
+                    <p><span>驳回原因</span><span @click="dele">
+                            <van-icon name="close" /></span></p>
+                    <p>
+                        <van-field
+                            v-model="message"
+                            rows="2"
+                            autosize
+                            type="textarea"
+                            maxlength="50"
+                            placeholder="请输入留言"
+                            show-word-limit
+                        />
+                    </p>
+                    <p>提交</p>
+                </div>
+            </van-popup>
+
+        </div>
+    </div>
+</template>
+
+<script>
+export default {
+  data() {
+    return {
+      show: false,
+      message:'',
+      qurmond:{
+        table:'leavefrom',
+        isUi:false,
+        fixedData:{
+          id:0
+        }
+      },
+      detaList:{},
+      oval:{
+        table:'leavefrom',
+        commitData:[
+          {id:undefined,status:1}
+        ]
+      }
+    };
+  },
+  props: ["detailitem"],
+
+  methods: {
+    onClickLeft() {
+      this.$router.go(-1)
+    },
+    onConfirm(value) {
+      this.value = value;
+      this.showPicker = false;
+    },
+    // 驳回
+    showPopup() {
+      this.show = true;
+    },
+    dele(){
+        this.show = false;
+    },
+    // 请求信息
+    async appList() {
+      const res = await this.$http.post(
+        "/boman-web-core/p/cs/getObject",
+        this.qurmond
+      );
+      res.data.data.showData.filter(route => {
+               // route.dept_id = route.dept_id.value
+               if(route.columnComment == '基本信息'){
+                 console.log(34)
+                 this.detaList = route
+               }
+             })
+      console.log(this.detaList);
+     
+    },
+    // 同意审批
+    async tyi(){
+      const res = await this.$http.post(
+        "/boman-web-core/p/cs/objectSubmit",
+        this.oval
+      );
+      if(res.data.code == 200){
+        this.$router.push("/ubmit");
+      }else{
+         this.$msg.fail(res.data.msg);
+      }
+    }
+  },
+  created(){
+    this.qurmond.fixedData.id = this.$route.query.id
+    this.oval.commitData[0].id = this.$route.query.id
+    this.appList()
+   console.log(this.$route.query.id)
+  }
+};
+</script>
+
+<style lang="less">
+.detailes {
+  .van-popup--center {
+    width: 80%;
+  }
+  .van-field__control {
+    height: 85px;
+  }
+}
+</style>
+
+
+<style scoped lang="less">
+.detailItem {
+  background-color: #fff;
+  margin-bottom: 16vw;
+  //   height: 100vh;
+  p {
+    font-size: 3.333vw;
+    padding: 0.833vw 0;
+  }
+  .imgparent {
+    position: relative;
+    .bottom {
+      padding: 0 2.778vw;
+      margin-bottom: 1.389vw;
+      position: absolute;
+      bottom: 0.556vw;
+      background: linear-gradient(0deg, rgba(0, 0, 0, 0.85), transparent);
+      justify-content: space-between;
+      color: white;
+      display: flex;
+      left: 0;
+      right: 0;
+    }
+  }
+  .approba_nave {
+    border-bottom: 0.267vw solid #dadada;
+    margin: 0 16px;
+    padding: 16px 0;
+    margin-bottom: 0;
+    p {
+      font-size: 2.667vw;
+      font-family: PingFang SC;
+      font-weight: 400;
+      color: #666666;
+    }
+    p:nth-child(1) {
+      display: flex;
+      justify-content: space-between;
+      margin-bottom: 1.333vw;
+
+      i {
+        font-style: normal;
+        font-weight: 700;
+      }
+      .soei {
+        font-size: 3.733vw;
+        font-family: PingFang SC;
+        font-weight: 400;
+        color: #343434;
+      }
+      span:nth-child(2) {
+        color: #aaa;
+        font-weight: 500;
+      }
+    }
+  }
+}
+.approva_header {
+  box-shadow: 0vw 0.8vw 0.533vw 0vw rgba(218, 218, 218, 0.35);
+}
+.approba_nition {
+  padding: 2.133vw 4.267vw;
+  img {
+    width: 27.733vw;
+    height: 27.733vw;
+    margin-top: 1.333vw;
+  }
+  p {
+    font-size: 2.667vw;
+    font-family: PingFang SC;
+    font-weight: 500;
+    color: #aaaaaa;
+  }
+  p:nth-child(2) {
+    color: #343434;
+  }
+}
+.details_bott {
+  position: fixed;
+  bottom: 0;
+  left: 0;
+  display: flex;
+  width: 100%;
+  p {
+    flex: 1;
+    height: 49px;
+    line-height: 49px;
+    text-align: center;
+    background: #fd3737;
+    font-size: 4vw;
+    font-family: PingFang SC;
+    font-weight: 400;
+    color: #ffffff;
+  }
+  p:nth-child(2) {
+    background: #009fe8;
+  }
+}
+.detalies_boname {
+  padding: 0 4.267vw;
+  p:nth-child(1) {
+    display: flex;
+    justify-content: space-between;
+    margin-bottom:6.667vw;
+    margin-top:2.667vw;
+    span:nth-child(1) {
+      font-size: 4vw;
+      font-family: PingFang SC;
+      font-weight: bold;
+      color: #343434;
+      width: 98%;
+      text-align: center;
+    }
+    span:nth-child(2) {
+      flex: 1;
+      font-size: 4vw;
+      font-family: PingFang SC;
+      font-weight: bold;
+      color: #343434;
+    }
+  }
+  p:nth-child(2) {
+    border: 0.267vw solid #009fe8;
+    border-radius: 0.8vw;
+  }
+  p:nth-child(3) {
+    height: 10.133vw;
+    line-height:10.133vw;
+    background: #009fe8;
+    border-radius: 3px;
+    font-size: 4vw;
+    font-family: PingFang SC;
+    font-weight: 400;
+    color: #FFFFFF;
+    text-align:center;
+    margin-top:18px;
+    margin-bottom:18px;
+  }
+}
+</style>

+ 378 - 0
boman-h5/src/views/ecord.vue

@@ -0,0 +1,378 @@
+<template>
+  <div>
+    <div class="detailItem">
+      <div class="imgparent">
+        <van-nav-bar
+          title="请假记录"
+          left-text="返回"
+          left-arrow
+          @click-left="onClickLeft"
+        />
+      </div>
+      <div class="approva_header ecord_header ">
+        <van-tabs @click="onClick">
+          <van-tab title="全部申请">
+            <p
+              class="ijeud"
+              @click="showPicker = true"
+            >
+              <img
+                src="../assets/img/icon_rqxz.png"
+                alt=""
+              >
+              <span>{{text}}</span>
+              <!-- <img
+                src="../assets/img/icon_xl.png"
+                alt=""
+              > -->
+            </p>
+            <van-list
+              v-model="loading"
+              :finished="finished"
+              :finished-text="finishedText"
+              @load="onLoad"
+            >
+              <div
+                class="approba_nave"
+                v-for="(item,index) in allHouseDetail"
+                :key="index"
+                @click="lkju"
+              >
+                <p>
+                  <span class="soei"><i>{{item.leavefrom_user_name == null? "暂无数据" : item.leavefrom_user_name}}</i>的请假申请</span>
+                  <span>{{item.leavefrom_start_time == null? "暂无数据" : item.leavefrom_start_time}}</span>
+                </p>
+                <p>请假类型:{{item.leavefrom_leave_type == null ? '暂无数据' : item.leavefrom_leave_type}}</p>
+                <p>开始时间:{{item.leavefrom_start_time == null? '暂无数据':item.leavefrom_start_time}}</p>
+                <p>结束时间:{{item.leavefrom_end_time == null? '暂无数据' : item.leavefrom_end_time == null }}</p>
+                <img
+                  src="../assets/img/pic_zt_shtg.png"
+                  alt=""
+                  class="ecord_img"
+                >
+              </div>
+            </van-list>
+          </van-tab>
+          <van-tab title="已通过申请">
+            <p
+              class="ijeud"
+              @click="showPicker = true"
+            >
+              <img
+                src="../assets/img/icon_rqxz.png"
+                alt=""
+              >
+              <span>{{text}}</span>
+              <img
+                src="../assets/img/icon_xl.png"
+                alt=""
+              >
+            </p>
+            <van-list
+              v-model="loading"
+              :finished="finished"
+              :finished-text="finishedText"
+              @load="onLoad"
+            >
+              <div
+                class="approba_nave"
+                v-for="(item,index) in allHouseDetail"
+                :key="index"
+              >
+                <p>
+                  <span class="soei"><i>王明</i>的请假申请</span>
+                  <span>2021-04-24</span>
+                </p>
+                <p>请假类型:事假</p>
+                <p>开始时间:2021-04-25 13:00</p>
+                <p>结束时间:2021-04-25 18:00</p>
+                <img
+                  src="../assets/img/pic_zt_shtg.png"
+                  alt=""
+                  class="ecord_img"
+                >
+              </div>
+            </van-list>
+          </van-tab>
+          <van-tab title="已驳回申请">
+            <p
+              class="ijeud"
+              @click="showPicker = true"
+            >
+              <img
+                src="../assets/img/icon_rqxz.png"
+                alt=""
+              >
+              <span>{{text}}</span>
+              <img
+                src="../assets/img/icon_xl.png"
+                alt=""
+              >
+            </p>
+            <van-list
+              v-model="loading"
+              :finished="finished"
+              :finished-text="finishedText"
+              @load="onLoad"
+            >
+              <div
+                class="approba_nave"
+                v-for="(item,index) in allHouseDetail"
+                :key="index"
+              >
+                <p>
+                  <span class="soei"><i>王明</i>的请假申请</span>
+                  <span>2021-04-24</span>
+                </p>
+                <p>请假类型:事假</p>
+                <p>开始时间:2021-04-25 13:00</p>
+                <p>结束时间:2021-04-25 18:00</p>
+                <img
+                  src="../assets/img/pic_zt_shtg.png"
+                  alt=""
+                  class="ecord_img"
+                >
+              </div>
+            </van-list>
+          </van-tab>
+        </van-tabs>
+      </div>
+      <div>
+
+      </div>
+      <van-popup
+        v-model="showPicker"
+        position="bottom"
+      >
+        <van-datetime-picker
+          type="date"
+          @confirm="onConfirm"
+          @cancel="showPicker = false"
+        />
+      </van-popup>
+    </div>
+  </div>
+</template>
+
+<script>
+export default {
+  data() {
+    return {
+      message: "",
+      uploader: [{ url: "https://img01.yzcdn.cn/vant/leaf.jpg" }],
+      allHouseDetail: [],
+      text: "选择日期",
+      loading: false,
+      finished: false,
+      showPicker: false,
+       qurmond: {
+        table: "leavefrom",
+        pageNo: 1,
+        pageSize: 4,
+        orderBy: "create_time desc",
+        fixedData: {
+          condition: {
+            status: undefined
+          }
+        },
+      },
+       page: 1, // 当前页码
+       page_size: 100, // 每页多少条
+        total: 0, // 总条数
+        error: false, // 错误提示
+        refreshing: false ,// 下拉刷新
+        finishedText:''
+    };
+  },
+  props: ["detailitem"],
+  created(){
+   this.appList()
+  },
+
+  methods: {
+    onClickLeft() {
+      this.$router.go(-1);
+    },
+    lkju() {
+      this.$router.push("/ord");
+    },
+    onConfirm(value) {
+      const month = value;
+      this.formatDateTime(month);
+      this.showPicker = false;
+    },
+    onClick(name, title) {
+      //   Toast(title);
+      console.log(title,name) 
+      if(name ==0){
+        this.qurmond.fixedData.condition.status =undefined
+      }else if(name ==1){
+        this.qurmond.fixedData.condition.status = 2
+      }else{
+        this.qurmond.fixedData.condition.status = 3
+      }
+      this.appList()
+      console.log(this.qurmond.fixedData.condition.status)
+    },
+    async appList() {
+      const res = await this.$http.post(
+        "/boman-web-core/p/cs/queryList",
+        this.qurmond
+      );
+      console.log(res);
+      if (res.data.code !== 200) {
+        this.$msg.fail(res.data.msg);
+        return false;
+      }
+      // this.allHouseDetail = res.data.data.rows;
+       if (this.qurmond.pageNo == 1) {
+      this.loading = false
+      this.allHouseDetail = res.data.data.rows;
+      this.total = res.total;
+    } else {
+      this.loading = false
+      this.allHouseDetail = this.allHouseDetail.concat(res.data.data.rows)
+      this.total = res.data.total;
+    }
+    
+    if ( res.data.data.rows==null) {
+      this.finished = true;
+      this.finishedText = '暂无数据';
+      console.log(34)
+    } else if (res.data.data.rows.length < this.qurmond.pageSize) {
+      console.log(12)
+      this.finished = true;
+      this.finishedText = '没有更多啦';
+    }
+    console.log(this.allHouseDetail)
+    },
+    onLoad() {
+      // 异步更新数据
+      // setTimeout 仅做示例,真实场景中一般为 ajax 请求
+      
+    },
+    formatDateTime(inputTime) {
+      
+     let date = new Date(inputTime);
+      let y = date.getFullYear();
+      let m = date.getMonth() + 1;
+      m = m < 10 ? "0" + m : m;
+      let d = date.getDate();
+      d = d < 10 ? "0" + d : d;
+      const time = y + "-" + m + "-" + d;
+      this.text = time
+      console.log(time);
+
+      return this.text;
+      console.log(second);
+      // return this.shoutime
+    }
+  }
+};
+</script>
+
+<style lang="less">
+.ecord_header {
+  .van-tabs__line {
+    background: #009fe8;
+  }
+  .van-tabs__wrap {
+    box-shadow: 0px 3px 2px 0px rgba(218, 218, 218, 0.35);
+  }
+  .van-tab__pane {
+    background: #fff;
+  }
+}
+</style>
+
+
+<style scoped lang="less">
+.detailItem {
+  background-color: #fff;
+  //   height: 100vh;
+  p {
+    font-size: 3.333vw;
+    padding: 0.833vw 0;
+  }
+  .imgparent {
+    position: relative;
+    .bottom {
+      padding: 0 2.778vw;
+      margin-bottom: 1.389vw;
+      position: absolute;
+      bottom: 0.556vw;
+      background: linear-gradient(0deg, rgba(0, 0, 0, 0.85), transparent);
+      justify-content: space-between;
+      color: white;
+      display: flex;
+      left: 0;
+      right: 0;
+    }
+  }
+  .approba_nave {
+    border-bottom: 0.267vw solid #dadada;
+    margin: 10px 16px;
+    padding: 5px 0;
+    position: relative;
+    .ecord_img {
+      width: 11.2vw;
+      height: 11.2vw;
+      position: absolute;
+      right: 0;
+      bottom: 12px;
+    }
+    p {
+      font-size: 2.667vw;
+      font-family: PingFang SC;
+      font-weight: 400;
+      color: #666666;
+    }
+    p:nth-child(1) {
+      display: flex;
+      justify-content: space-between;
+      margin-bottom: 2.133vw;
+      i {
+        font-style: normal;
+        font-weight: 700;
+      }
+      .soei {
+        font-size: 3.733vw;
+        font-family: PingFang SC;
+        font-weight: 400;
+        color: #343434;
+      }
+      span:nth-child(2) {
+        color: #aaa;
+        font-weight: 500;
+      }
+    }
+  }
+}
+.approva_header {
+  height: 40px;
+  .ijeud {
+    padding: 0 4.267vw;
+    display: flex;
+    align-items: center;
+    height: 40px;
+    padding-top: 10px;
+    img:nth-child(1) {
+      width: 4.267vw;
+      height: 4.267vw;
+    }
+    img:nth-child(3) {
+      width: 12px;
+      height: 12px;
+    }
+    span {
+      height: 100%;
+      line-height:40px;
+      font-size: 3.467vw;
+      font-family: PingFang SC;
+      font-weight: 400;
+      color: #343434;
+      margin: 0 5px;
+    }
+  }
+}
+</style>

+ 312 - 142
boman-h5/src/views/leave.vue

@@ -1,134 +1,149 @@
 <template>
-    <div>
-        <div class="detailItem">
-            <div class="imgparent">
-                <van-nav-bar
-                    title="填写请假信息"
-                    left-text="返回"
-                    left-arrow
-                    @click-left="onClickLeft"
-                />
-            </div>
-            <div class="formtr">
-                <van-form @submit="onSubmit">
-                    <van-field
-                        readonly
-                        clickable
-                        name="picker"
-                        :value="value"
-                        label="部门"
-                        placeholder="点击选择部门"
-                        @click="showPicker = true"
-                        class="stru"
-                    />
-                    <van-popup
-                        v-model="showPicker"
-                        position="bottom"
-                    >
-                        <van-picker
-                            show-toolbar
-                            :columns="columns"
-                            @confirm="onConfirm"
-                            @cancel="showPicker = false"
-                        />
-                    </van-popup>
-                    <van-field
-                        readonly
-                        clickable
-                        name="picker"
-                        :value="valuetao"
-                        label="请假类型"
-                        placeholder="点击选择请假类型"
-                        @click="showPickertwo = true"
-                        class="stru"
-                    />
-                    <van-popup
-                        v-model="showPickertwo"
-                        position="bottom"
-                    >
-                        <van-picker
-                            show-toolbar
-                            :columns="columnstwo"
-                            @confirm="onConfirmtwo"
-                            @cancel="showPickertwo = false"
-                        />
-                    </van-popup>
-                    <van-field
-                        readonly
-                        clickable
-                        name="datetimePicker"
-                        :value="valuestartime"
-                        label="开始时间"
-                        placeholder="点击选择开始时间"
-                        @click="showPickerstr = true"
-                        class="stru"
-                    />
-                    <van-popup
-                        v-model="showPickerstr"
-                        position="bottom"
-                    >
-                        <van-datetime-picker
-                            type="datetime"
-                            v-model="currentDate"
-                            @confirm="onConfirmstatime"
-                            @cancel="showPickerstr = false"
-                            :min-date="minDate"
-                            :max-date="maxDate"
-                        />
-                    </van-popup>
-                    <van-field
-                        readonly
-                        clickable
-                        name="datetimePicker"
-                        :value="valueendtime"
-                        label="结束时间"
-                        placeholder="点击选择结束时间"
-                        @click="showPickerend = true"
-                        class="stru"
-                    />
-                    <van-popup
-                        v-model="showPickerend"
-                        position="bottom"
-                    >
-                        <van-datetime-picker
-                            type="time"
-                            @confirm="onConfirmsendtime"
-                            @cancel="showPickerend = false"
-                        />
-                    </van-popup>
-                    <van-field
-                        v-model="message"
-                        rows="2"
-                        autosize
-                        label="请假事由"
-                        type="textarea"
-                        maxlength="50"
-                        placeholder="请输入请假事由"
-                        show-word-limit
-                        class="stru"
-                    />
-                    <van-field
-                        name="uploader"
-                        label="文件上传"
-                        class="stru"
-                    >
-                        <template #input>
-                            <van-uploader v-model="uploader" />
-                        </template>
-                    </van-field>
-                    <div style="margin: 16px;">
-                        <van-button
-                            round
-                            block
-                            type="info"
-                            native-type="submit"
-                        >提交</van-button>
-                    </div>
-                </van-form>
-            </div>
+  <div>
+    <div class="detailItem">
+      <div class="imgparent">
+        <van-nav-bar
+          title="填写请假信息"
+          left-text="返回"
+          left-arrow
+          @click-left="onClickLeft"
+        />
+      </div>
+      <div class="formtr">
+        <van-form @submit="onSubmit">
+          <van-field
+            v-model="fieldValue"
+            is-link
+            readonly
+            label="部门"
+            placeholder="请选择部门"
+            @click="show = true"
+            :rules="[{ required: true, message: '请选择部门' }]"
+            
+          />
+          <van-popup
+            v-model="show"
+            round
+            position="bottom"
+          >
+            <van-cascader
+              v-model=" form.leavefrom_department"
+              title="请选择所在部门"
+              :options="options"
+              @close="show = false"
+              @finish="onFinish"
+              :field-names="fieldNames"
+            />
+          </van-popup>
+          <van-field
+            readonly
+            clickable
+            name="picker"
+            :value="valuetao"
+            label="请假类型"
+            placeholder="点击选择请假类型"
+            @click="showPickertwo = true"
+            class="stru"
+            v-model="form.leavefrom_leave_type"
+            :rules="[{ required: true, message: '请选择请假类型' }]"
+          />
+          <van-popup
+            v-model="showPickertwo"
+            position="bottom"
+          >
+            <van-picker
+              show-toolbar
+              :columns="columnstwo"
+              @confirm="onConfirmtwo"
+              @cancel="showPickertwo = false"
+               v-model="form.leavefrom_leave_type"
+            />
+          </van-popup>
+          <van-field
+            readonly
+            clickable
+            name="datetimePicker"
+            v-model="form.leavefrom_start_time"
+            :value="valuestartime"
+            label="开始时间"
+            placeholder="点击选择开始时间"
+            @click="showPickerstr = true"
+            class="stru"
+            :rules="[{ required: true, message: '请选择开始时间' }]"
+          />
+          <van-popup
+            v-model="showPickerstr"
+            position="bottom"
+          >
+            <van-datetime-picker
+              type="datetime"
+              v-model="currentDate"
+              @confirm="onConfirmstatime"
+              @cancel="showPickerstr = false"
+              :min-date="minDate"
+              :max-date="maxDate"
+            />
+          </van-popup>
+          <van-field
+            readonly
+            clickable
+            name="datetimePicker"
+            :value="valueendtime"
+            label="结束时间"
+            placeholder="点击选择结束时间"
+            @click="showPickerend = true"
+            class="stru"
+            v-model="form.leavefrom_end_time "
+            :rules="[{ required: true, message: '请选择结束时间' }]"
+          />
+          <van-popup
+            v-model="showPickerend"
+            position="bottom"
+          >
+            <van-datetime-picker
+              type="datetime"
+              v-model="currentDate"
+               :min-date="minDate"
+              :max-date="maxDate"
+              @confirm="onConfirmsendtime"
+              @cancel="showPickerend = false"
+            />
+          </van-popup>
+          <van-field
+            v-model="form.leavefrom_reason"
+            rows="2"
+            autosize
+            label="请假事由"
+            type="textarea"
+            maxlength="50"
+            placeholder="请输入请假事由"
+            show-word-limit
+            class="stru"
+            :rules="[{ required: true, message: '请输入请假事由' }]"
+          />
+          <van-field
+            name="uploader"
+            label="文件上传"
+            class="stru"
+          >
+            <template #input>
+              <!-- <van-uploader v-model="uploader" /> -->
+              <van-uploader   class="df_txt_box" v-model="fileList" multiple :max-count="3"  :after-read="afterRead"   />
+            </template>
+          </van-field>
+          <div style="margin: 16px;">
+            <van-button
+              round
+              block
+              type="info"
+              native-type="submit"
+            >提交</van-button>
+          </div>
+        </van-form>
+      </div>
 
-        </div>
     </div>
+  </div>
 </template>
 
 <script>
@@ -139,6 +154,13 @@ export default {
       valuetao: "",
       valuestartime: "",
       valueendtime: "",
+       fieldValue: '',
+      cascaderValue: '',
+       show: false,
+      // 选项列表,children 代表子选项,支持多级嵌套
+      options: [
+        
+      ],
       columns: ["杭州", "宁波", "温州", "嘉兴", "湖州"],
       columnstwo: ["杭州1", "宁波1", "温州1", "嘉兴1", "湖州1"],
       showPicker: false,
@@ -149,13 +171,35 @@ export default {
       maxDate: new Date(2025, 10, 1),
       currentDate: new Date(),
       message: "",
-      uploader: [{ url: 'https://img01.yzcdn.cn/vant/leaf.jpg' }],
+      uploader: [{ url: "https://img01.yzcdn.cn/vant/leaf.jpg" }],
+      fokeu:{
+        table:'leavefrom',
+        objId:-1,
+        fixedData:{}
+      },
+      form:{},
+      fieldNames:{
+        text:'label',
+        value:'id'
+      },
+      text:'',
+      fileList: [
+
+						],
+      uejtyu:[],
+      imgList:[]
     };
   },
   props: ["detailitem"],
+  created(){
+    this.department()
+    this.leaveType()
+  },
 
   methods: {
-    onClickLeft() {},
+    onClickLeft() {
+      this.$router.go(-1);
+    },
     onConfirm(value) {
       this.value = value;
       this.showPicker = false;
@@ -167,18 +211,141 @@ export default {
     },
     // 开始时间
     onConfirmstatime(value) {
-      this.valuestartime = value;
+      const month = value;
+      this.valuestartime = this.formatDateTime(month)
+      this.form.leavefrom_start_time = this.valuestartime
       this.showPickerstr = false;
     },
     // 结束时间
     onConfirmsendtime(value) {
-      this.valueendtime = value;
+      const month = value;
+       this.valueendtime = this.formatDateTime(month)
+        this.form.leavefrom_end_time= this.valueendtime
       this.showPickerend = false;
     },
+    // 部门
+     onFinish({ selectedOptions }) {
+      this.show = false;
+      console.log(selectedOptions[selectedOptions.length - 1].label)
+      this.uejtyu = []
+      // this.fieldValue = selectedOptions.map((option) => {
+      //   // console.log(option)
+      //   option.label
+      //   // console.log(option.id)
+      //   this.uejtyu.push(option.label)
+      // }).join('/');
+      this.fieldValue = selectedOptions[selectedOptions.length - 1].label
+      // this.fieldValue = this.uejtyu.join('/')
+      this.form.leavefrom_department = selectedOptions[selectedOptions.length - 1].id
+      console.log(this.form.leavefrom_department)
+
+    },
     // 提交
-    onSubmit(values) {
+    async onSubmit(values) {
+      console.log(this.form)
       console.log("submit", values);
-    }
+      this.fokeu.fixedData = this.form
+       const res = await this.$http.post("/boman-web-core/p/cs/objectSave",this.fokeu);
+       if(res.data.code !== 200){
+        this.$msg.fail(res.data.msg)
+        return  false
+       }
+      this.$router.push("/ubmit");
+    },
+    // 部门数据
+    async department(){
+      const res = await this.$http.get("/system/dept/treeselect");
+      console.log(res.data)
+      if(res.data.code !== 200){
+        this.$msg.fail(res.data.msg)
+        return false
+      }
+      this.options = res.data.data
+      console.log(this.options)
+    },
+    // 请假类型
+    async leaveType(){
+      const res = await this.$http.get("/boman-system/dict/data/type/" + 'leavefrom');
+      console.log(res.data)
+      if(res.data.code !== 200){
+        this.$msg.fail(res.data.msg)
+        return false
+      }
+      this.columnstwo = res.data.data
+      console.log(this.columnstwo)
+    },
+    //递归
+    dietj(index){
+       console.log(index)
+       let iuy = []
+      for(var i = 0 ; i < index.length; i++){
+        index[i].value = index[i].id
+        iuy = index[i].children
+        // this.dietj(index[i].children)
+         console.log(iuy)
+         if(index[i].children !== undefined){
+           if(index[i].children != 0){
+             console.log(index[i].children)
+             this.dietj(index[i].children)
+           }else{
+             return
+           }
+         }
+
+      }
+    },
+    formatDateTime(inputTime) {
+     let date = new Date(inputTime);
+      let y = date.getFullYear();
+      let m = date.getMonth() + 1;
+      m = m < 10 ? "0" + m : m;
+      let d = date.getDate();
+      d = d < 10 ? "0" + d : d;
+      let h = date.getHours();
+      h = h < 10 ? "0" + h : h;
+      let ms = date.getMinutes();
+      ms = ms < 10 ? "0" + ms : ms;
+      let s = date.getSeconds();
+      s = s < 10 ? "0" + s : s;
+      const time = y + '-' + m + '-' + d + ' ' + h + ':' + ms + ':' + s;
+      this.text = time;
+      
+      console.log(time);
+      return this.text;
+      console.log(second);
+      // return this.shoutime
+    },
+    // 图片上传接口
+    async uplod(index){
+      const res = await this.$http.post("/boman-file/upload/base64",{
+        file:index
+      });
+      if(res.data.code == 200){
+         this.imgList.push(res.data.url)
+         this.form.url = this.imgList.join(',')
+         this.$Notify({
+											type: 'success',
+											message: '上传成功'
+										});
+      }else{
+        this.$msg.fail(res.data.msg)
+      }
+     
+
+      console.log(res)
+    },
+    // 图片上传
+    afterRead(filed) {
+						// 此时可以自行将文件上传至服务器
+						console.log(this.fileList);
+            this.uplod(filed.content)
+						// var tu = this.base64ImgtoFile(file.content)
+						// console.log(tu)
+						// this.filety.file = filed.content
+						// this.filety.file = filed.content
+						// console.log(this.file)
+					
+					},
   }
 };
 </script>
@@ -194,13 +361,16 @@ export default {
   .van-cell:not(:last-child)::after {
     border-bottom: 0;
   }
-  .van-field__control--custom{
-      justify-content: flex-end;
+  .van-field__control--custom {
+    justify-content: flex-end;
+  }
+  .van-cell {
+    font-weight: 500;
+    color: #343434;
+    padding: 5.6vw 4.267vw;
   }
-  .van-cell{
-      font-weight: 500;
-      color: #343434;
-      padding: 5.6vw 4.267vw;
+  .van-field__control{
+    text-align: right;
   }
 }
 </style>
@@ -208,8 +378,8 @@ export default {
 
 <style scoped lang="less">
 .detailItem {
- background-color:#fff;
- height: 100vh;
+  background-color: #fff;
+  height: 100vh;
   p {
     font-size: 3.333vw;
     padding: 0.833vw 0;

+ 251 - 0
boman-h5/src/views/lock.vue

@@ -0,0 +1,251 @@
+<template>
+    <div>
+        <div class="lock">
+            <div class="imgparent">
+                <van-nav-bar
+                    title="考勤打卡"
+                    left-text="返回"
+                    left-arrow
+                    @click-left="onClickLeft"
+                />
+            </div>
+            <div class="lock_header">
+                <div><img
+                        src="../assets/img/tx.jpg"
+                        alt=""
+                    ></div>
+                <div class="userheader_one">
+                    <p>李鑫</p>
+                    <p>所在部门:市监局</p>
+                </div>
+                <div @click="chas">
+                    查看考勤记录 >
+                </div>
+            </div>
+            <div class="bottom">
+                <p>当前位置</p>
+                <div class="bott_nav">
+                    <img
+                        src="../assets/img/icon_kadk-dw.png"
+                        alt=""
+                    >
+                    <p>安徽省合肥市蜀山区高薪技术产业开发区黄山路59号
+                        时代数码港</p>
+                </div>
+                <!-- 第二部分 -->
+                <div class="lock_navebut">
+                    <p>
+                        <span>{{gettime}}</span>
+                            <span>下班打卡</span>
+                    </p>
+                    <p>
+                        <img
+                            src="../assets/img/icon_kqdk_jrfw.png"
+                            alt=""
+                        >
+                        <span>已进入考勤范围</span>
+                    </p>
+                </div>
+                <!-- 第三部分 -->
+                <div class="lockbom_nam">
+                    <van-steps
+                        direction="vertical"
+                        :active="0"
+                    >
+                        <van-step>
+                            <h3>08:47 打卡成功</h3>
+                            <p>安徽省合肥市蜀山区高薪技术产业开发区黄山路59号
+                                时代数码港</p>
+                        </van-step>
+                        <van-step>
+                            <h3>下班打卡</h3>
+                            <p>{{gettimetwo}}</p>
+                        </van-step>
+                    </van-steps>
+                </div>
+            </div>
+
+            <p></p>
+        </div>
+    </div>
+</template>
+
+<script>
+export default {
+  data() {
+    return {
+      list: [],
+      loading: false,
+      finished: false,
+      text: "选择日期",
+      value: "",
+      showPicker: false,
+      minDate: new Date(2020, 0, 1),
+      maxDate: new Date(2025, 10, 1),
+      currentDate: new Date(),
+      gettime: "",
+      gettimetwo: ""
+    };
+  },
+  created() {
+    this.time();
+  },
+  methods: {
+    pathPush() {},
+    onClickLeft() {
+      this.$router.go(-1)
+    },
+    // 查看考勤记录
+    chas(){
+        this.$router.push("/ttendance");
+    },
+    // 日期
+    time() {
+      var _this = this;
+      let yy = new Date().getFullYear();
+      let mm = new Date().getMonth() + 1;
+      let dd = new Date().getDate();
+      let hh = new Date().getHours();
+      let mf =
+        new Date().getMinutes() < 10
+          ? "0" + new Date().getMinutes()
+          : new Date().getMinutes();
+      let ss =
+        new Date().getSeconds() < 10
+          ? "0" + new Date().getSeconds()
+          : new Date().getSeconds();
+      _this.gettimetwo =
+        yy + "-" + mm + "-" + dd + " " + hh + ":" + mf + ":" + ss;
+      _this.gettime = hh + ":" + mf + ":" + ss;
+      console.log(this.gettime);
+    }
+  }
+};
+</script>
+
+<style scoped lang="less">
+.lock {
+  //   height: 100vh;
+  background: #fff;
+  padding: 0 17px;
+  padding-bottom: 40px;
+  .lock_header {
+    height: 22.133vw;
+    display: flex;
+    justify-content: space-between;
+    padding: 4.533vw;
+    align-items: center;
+    box-shadow: 0px 0px 6px 0px rgba(153, 152, 152, 0.39);
+    border-radius: 3px;
+    margin-top: 30px;
+    div:nth-child(2) {
+      flex: 1;
+      p:nth-child(1) {
+        margin-bottom: 1.333vw;
+        font-size: 13px;
+        font-family: PingFang SC;
+        font-weight: bold;
+        color: #343434;
+      }
+      p:nth-child(2) {
+        font-size: 10px;
+        font-family: PingFang SC;
+        font-weight: 400;
+        color: #666666;
+      }
+    }
+    div:nth-child(1) {
+      display: flex;
+      width: 16.8vw;
+      height: 16.8vw;
+      border-radius: 16.8vw;
+      overflow: hidden;
+      margin-right: 2.667vw;
+      img {
+        width: 100%;
+        height: 100%;
+      }
+    }
+    div:nth-child(3) {
+      font-size: 2.933vw;
+      font-family: PingFang SC;
+      font-weight: 400;
+      color: #009fe8;
+    }
+  }
+  //   第二部分样式
+  .bottom {
+    box-shadow: 0px 0px 6px 0px rgba(153, 152, 152, 0.39);
+    border-radius: 3px;
+    margin-top: 15px;
+    padding: 0 16px;
+    padding-top: 27px;
+
+    p {
+      font-size: 13px;
+      font-family: PingFang SC;
+      font-weight: bold;
+      color: #343434;
+    }
+    .bott_nav {
+      display: flex;
+      margin-top: 16px;
+      img {
+        width: 14px;
+        height: 14px;
+      }
+      p {
+        flex: 1;
+        font-size: 13px;
+        font-family: PingFang SC;
+        font-weight: 400;
+        color: #343434;
+        margin-left: 6px;
+      }
+    }
+  }
+  //   按钮样式
+  .lock_navebut {
+    display: flex;
+    flex-direction: column;
+    justify-content: center;
+    align-items: center;
+    margin: 50px 0;
+    p:nth-child(1) {
+      width: 167px;
+      height: 56px;
+      background: #009fe8;
+      box-shadow: 0px 3px 3px 0px rgba(3, 141, 204, 0.39);
+      border-radius: 28px;
+      display: flex;
+      flex-direction: column;
+      justify-content: center;
+      align-items: center;
+      margin-bottom: 13px;
+      span {
+        font-size: 14px;
+        font-family: PingFang SC;
+        font-weight: bold;
+        color: #ffffff;
+      }
+      span:nth-child(2) {
+        font-weight: 500;
+        margin-top: 3px;
+      }
+    }
+    p:nth-child(2) {
+      img {
+        width: 10px;
+        height: 10px;
+      }
+      span {
+        font-size: 10px;
+        font-family: PingFang SC;
+        font-weight: 400;
+        color: #666666;
+        margin-left: 5px;
+      }
+    }
+  }
+}
+</style>

+ 0 - 0
boman-h5/src/views/nformation.vue


+ 138 - 0
boman-h5/src/views/number.vue

@@ -0,0 +1,138 @@
+<template>
+    <div class="number">
+        <div class="imgparent">
+            <van-nav-bar
+                title="更换手机号码"
+                left-arrow
+                @click-left="onClickLeft"
+            />
+        </div>
+        <div class="set_nav">
+            <!-- <p><span>手机号码</span><span>138****5438</span></p> -->
+            <van-form
+                @submit="onSubmit"
+                style="margin-top:36px;"
+            >
+                <van-field
+                    v-model="username"
+                    name="手机号码"
+                    label="手机号码"
+                    placeholder="请输入手机号码"
+                    :rules="[{ required: true, message: '请填写手机号码' }]"
+                />
+                <van-field
+                    v-model="sms"
+                    center
+                    clearable
+                    label="短信验证码"
+                    placeholder="请输入短信验证码"
+                >
+                    <template #button>
+                        <van-button
+                            size="small"
+                            type="primary"
+                        >发送验证码</van-button>
+                    </template>
+                </van-field>
+                <div class="srt_bottm">
+                    <p @click="subimt">确认</p>
+                </div>
+            </van-form>
+
+        </div>
+
+    </div>
+</template>
+
+<script>
+export default {
+  data() {
+    return {
+      model: {}
+    };
+  },
+  methods: {
+    async userData() {
+      const res = await this.$http.get("/user/" + localStorage.getItem("id"));
+      this.model = res.data[0];
+    },
+    onClickLeft() {}
+  },
+  created() {
+    // this.userData();
+  }
+};
+</script>
+
+<style lang="less">
+.number {
+  .van-cell::after {
+    border: 0;
+  }
+  .van-field__control {
+    text-align: right;
+  }
+  .van-button--primary {
+    background-color: #fff;
+    border: 1px solid #fff;
+    color: #009fe8;
+    font-size: 14px;
+    font-family: PingFang SC;
+    font-weight: 400;
+    color: #009fe8;
+    border-left: 1px solid #a7a7a7;
+  }
+  background-color: #fff;
+  height: 100vh;
+  //   padding: 0 16px;
+  .set_nav {
+    // padding: 0 16px;
+    // padding-bottom: 36px;
+    p {
+      font-size: 3.733vw;
+      font-family: PingFang SC;
+      font-weight: 500;
+      color: #343434;
+    //   display: flex;
+    //   justify-content: space-between;
+      margin-top: 35px;
+      span {
+        font-size: 3.733vw;
+        font-family: PingFang SC;
+        font-weight: 500;
+        color: #343434;
+      }
+      span:nth-child(2) {
+        font-size: 3.733vw;
+        font-family: PingFang SC;
+        font-weight: 400;
+        color: #343434;
+        img {
+          width: 6px;
+          height: 9px;
+        }
+      }
+    }
+  }
+  .srt_bottm {
+    margin-top: 70%;
+    // background-color: #009fe8;
+    // margin: 0 16px;
+    p {
+      height: 42px;
+        // width: 100%;
+      margin: 0 16px;
+      background-color: #009fe8;
+      border-radius: 3px;
+      font-size: 14px;
+      font-family: PingFang SC;
+      font-weight: 400;
+      color: #ffffff;
+      line-height: 42px;
+      text-align: center;
+    //   margin-left: 50%;
+    //   transform: translateX(-50%);
+    }
+  }
+}
+</style>

+ 279 - 0
boman-h5/src/views/ord.vue

@@ -0,0 +1,279 @@
+<template>
+    <div>
+        <div class="detailItem detailesty">
+            <div class="imgparent">
+                <van-nav-bar
+                    title="详情"
+                    left-text="返回"
+                    left-arrow
+                    @click-left="onClickLeft"
+                />
+            </div>
+            <div>
+                <div class="approba_nave">
+                    <p>
+                        <span class="soei"><i>王明</i>的请假申请</span>
+                    </p>
+                    <p></p>
+                    <p>提交时间:2021-04-25 13:00</p>
+                    <p>审批状态:已通过</p>
+                    <img
+                                    src="../assets/img/pic_zt_shtg.png"
+                                    alt=""
+                                    class="ecord_img"
+                                >
+                </div>
+            </div>
+            <div class="approba_nition">
+                <p>审批编号</p>
+                <p>20210424134500456832</p>
+            </div>
+            <div class="approba_nition">
+                <p>所在部门</p>
+                <p>市监局</p>
+            </div>
+            <div class="approba_nition">
+                <p>请假类型</p>
+                <p>事假</p>
+            </div>
+            <div class="approba_nition">
+                <p>请假开始时间</p>
+                <p>2021-04-25 13:00</p>
+            </div>
+            <div class="approba_nition">
+                <p>请假结束时间</p>
+                <p>2021-04-25 18:00</p>
+            </div>
+            <div class="approba_nition">
+                <p>请假结束时间</p>
+                <p>2021-04-25 18:00</p>
+            </div>
+            <div class="approba_nition">
+                <p>请假事由</p>
+                <p>去医院接种新冠疫苗</p>
+            </div>
+            <div class="approba_nition">
+                <p>图片</p>
+                <p><img
+                        src="../assets/img/icon_hp_spjl.png"
+                        alt=""
+                    ></p>
+            </div>
+            <!-- <div class="details_bott">
+                <p @click="showPopup">驳回审批</p>
+                <p>同意审批</p>
+            </div> -->
+
+            <van-popup v-model="show">
+                <div class="detalies_boname">
+                    <p><span>驳回原因</span><span @click="dele">
+                            <van-icon name="close" /></span></p>
+                    <p>
+                        <van-field
+                            v-model="message"
+                            rows="2"
+                            autosize
+                            type="textarea"
+                            maxlength="50"
+                            placeholder="请输入留言"
+                            show-word-limit
+                        />
+                    </p>
+                    <p>提交</p>
+                </div>
+            </van-popup>
+
+        </div>
+    </div>
+</template>
+
+<script>
+export default {
+  data() {
+    return {
+      show: false,
+      message:''
+    };
+  },
+  props: ["detailitem"],
+
+  methods: {
+    onClickLeft() {
+      this.$router.go(-1)
+    },
+    onConfirm(value) {
+      this.value = value;
+      this.showPicker = false;
+    },
+    // 驳回
+    showPopup() {
+      this.show = true;
+    },
+    dele(){
+        this.show = false;
+    }
+  }
+};
+</script>
+
+<style lang="less">
+.detailes {
+  .van-popup--center {
+    width: 80%;
+  }
+  .van-field__control {
+    height: 85px;
+  }
+}
+</style>
+
+
+<style scoped lang="less">
+.detailesty {
+  background-color: #fff;
+//   margin-bottom: 16vw;
+  //   height: 100vh;
+  p {
+    font-size: 3.333vw;
+    padding: 0.833vw 0;
+  }
+  .imgparent {
+    position: relative;
+    .bottom {
+      padding: 0 2.778vw;
+      margin-bottom: 1.389vw;
+      position: absolute;
+      bottom: 0.556vw;
+      background: linear-gradient(0deg, rgba(0, 0, 0, 0.85), transparent);
+      justify-content: space-between;
+      color: white;
+      display: flex;
+      left: 0;
+      right: 0;
+    }
+  }
+  .approba_nave {
+    border-bottom: 0.267vw solid #dadada;
+    margin: 0 16px;
+    padding: 16px 0;
+    margin-bottom: 0;
+    position: relative;
+    .ecord_img {
+      width: 11.2vw;
+      height: 11.2vw;
+      position: absolute;
+      right: 0;
+      bottom: 12px;
+    }
+    p {
+      font-size: 2.667vw;
+      font-family: PingFang SC;
+      font-weight: 400;
+      color: #666666;
+    }
+    p:nth-child(1) {
+      display: flex;
+      justify-content: space-between;
+      margin-bottom: 1.333vw;
+
+      i {
+        font-style: normal;
+        font-weight: 700;
+      }
+      .soei {
+        font-size: 3.733vw;
+        font-family: PingFang SC;
+        font-weight: 400;
+        color: #343434;
+      }
+      span:nth-child(2) {
+        color: #aaa;
+        font-weight: 500;
+      }
+    }
+  }
+}
+.approva_header {
+  box-shadow: 0vw 0.8vw 0.533vw 0vw rgba(218, 218, 218, 0.35);
+}
+.approba_nition {
+  padding: 2.133vw 4.267vw;
+  img {
+    width: 27.733vw;
+    height: 27.733vw;
+    margin-top: 1.333vw;
+  }
+  p {
+    font-size: 2.667vw;
+    font-family: PingFang SC;
+    font-weight: 500;
+    color: #aaaaaa;
+  }
+  p:nth-child(2) {
+    color: #343434;
+  }
+}
+.details_bott {
+  position: fixed;
+  bottom: 0;
+  left: 0;
+  display: flex;
+  width: 100%;
+  p {
+    flex: 1;
+    height: 49px;
+    line-height: 49px;
+    text-align: center;
+    background: #fd3737;
+    font-size: 4vw;
+    font-family: PingFang SC;
+    font-weight: 400;
+    color: #ffffff;
+  }
+  p:nth-child(2) {
+    background: #009fe8;
+  }
+}
+.detalies_boname {
+  padding: 0 4.267vw;
+  p:nth-child(1) {
+    display: flex;
+    justify-content: space-between;
+    margin-bottom:6.667vw;
+    margin-top:2.667vw;
+    span:nth-child(1) {
+      font-size: 4vw;
+      font-family: PingFang SC;
+      font-weight: bold;
+      color: #343434;
+      width: 98%;
+      text-align: center;
+    }
+    span:nth-child(2) {
+      flex: 1;
+      font-size: 4vw;
+      font-family: PingFang SC;
+      font-weight: bold;
+      color: #343434;
+    }
+  }
+  p:nth-child(2) {
+    border: 0.267vw solid #009fe8;
+    border-radius: 0.8vw;
+  }
+  p:nth-child(3) {
+    height: 10.133vw;
+    line-height:10.133vw;
+    background: #009fe8;
+    border-radius: 3px;
+    font-size: 4vw;
+    font-family: PingFang SC;
+    font-weight: 400;
+    color: #FFFFFF;
+    text-align:center;
+    margin-top:18px;
+    margin-bottom:18px;
+  }
+}
+
+</style>

+ 325 - 0
boman-h5/src/views/proval.vue

@@ -0,0 +1,325 @@
+<template>
+    <div>
+        <div class="detailItem">
+            <div class="imgparent">
+                <van-nav-bar
+                    title="审核记录"
+                    left-text="返回"
+                    left-arrow
+                    @click-left="onClickLeft"
+                />
+            </div>
+            <div class="approva_header ecord_header ">
+                <van-tabs @click="onClick">
+                    <van-tab title="全部申批">
+                        <p
+                            class="ijeud"
+                            @click="showPicker = true"
+                        >
+                            <img
+                                src="../assets/img/icon_rqxz.png"
+                                alt=""
+                            >
+                            <span>{{text}}</span>
+                            <img
+                                src="../assets/img/icon_xl.png"
+                                alt=""
+                            >
+                        </p>
+                        <van-list
+                            v-model="loading"
+                            :finished="finished"
+                            finished-text="没有更多了"
+                            @load="onLoad"
+                        >
+                            <div
+                                class="approba_nave"
+                                v-for="(item,index) in list"
+                                :key="index"
+                                @click="lkju"
+                            >
+                                <p>
+                                    <span class="soei"><i>王明</i>的请假申请</span>
+                                    <span>2021-04-24</span>
+                                </p>
+                                <p>请假类型:事假</p>
+                                <p>开始时间:2021-04-25 13:00</p>
+                                <p>结束时间:2021-04-25 18:00</p>
+                                <img
+                                    src="../assets/img/pic_zt_shtg.png"
+                                    alt=""
+                                    class="ecord_img"
+                                >
+                            </div>
+                        </van-list>
+                    </van-tab>
+                    <van-tab title="已通过申批">
+                        <p
+                            class="ijeud"
+                            @click="showPicker = true"
+                        >
+                            <img
+                                src="../assets/img/icon_rqxz.png"
+                                alt=""
+                            >
+                            <span>{{text}}</span>
+                            <img
+                                src="../assets/img/icon_xl.png"
+                                alt=""
+                            >
+                        </p>
+                        <van-list
+                            v-model="loading"
+                            :finished="finished"
+                            finished-text="没有更多了"
+                            @load="onLoad"
+                        >
+                            <div
+                                class="approba_nave"
+                                v-for="(item,index) in list"
+                                :key="index"
+                            >
+                                <p>
+                                    <span class="soei"><i>王明</i>的请假申请</span>
+                                    <span>2021-04-24</span>
+                                </p>
+                                <p>请假类型:事假</p>
+                                <p>开始时间:2021-04-25 13:00</p>
+                                <p>结束时间:2021-04-25 18:00</p>
+                                <img
+                                    src="../assets/img/pic_zt_shtg.png"
+                                    alt=""
+                                    class="ecord_img"
+                                >
+                            </div>
+                        </van-list>
+                    </van-tab>
+                    <van-tab title="已驳回申批">
+                        <p
+                            class="ijeud"
+                            @click="showPicker = true"
+                        >
+                            <img
+                                src="../assets/img/icon_rqxz.png"
+                                alt=""
+                            >
+                            <span>{{text}}</span>
+                            <img
+                                src="../assets/img/icon_xl.png"
+                                alt=""
+                            >
+                        </p>
+                        <van-list
+                            v-model="loading"
+                            :finished="finished"
+                            finished-text="没有更多了"
+                            @load="onLoad"
+                        >
+                            <div
+                                class="approba_nave"
+                                v-for="(item,index) in list"
+                                :key="index"
+                            >
+                                <p>
+                                    <span class="soei"><i>王明</i>的请假申请</span>
+                                    <span>2021-04-24</span>
+                                </p>
+                                <p>请假类型:事假</p>
+                                <p>开始时间:2021-04-25 13:00</p>
+                                <p>结束时间:2021-04-25 18:00</p>
+                                <img
+                                    src="../assets/img/pic_zt_shtg.png"
+                                    alt=""
+                                    class="ecord_img"
+                                >
+                            </div>
+                        </van-list>
+                    </van-tab>
+                </van-tabs>
+            </div>
+            <div>
+
+            </div>
+            <van-popup
+                v-model="showPicker"
+                position="bottom"
+            >
+                <van-datetime-picker
+                    type="date"
+                    @confirm="onConfirm"
+                    @cancel="showPicker = false"
+                />
+            </van-popup>
+        </div>
+    </div>
+</template>
+
+<script>
+export default {
+  data() {
+    return {
+      message: "",
+      uploader: [{ url: "https://img01.yzcdn.cn/vant/leaf.jpg" }],
+      list: [],
+      text: "选择日期",
+      loading: false,
+      finished: false,
+      showPicker: false
+    };
+  },
+  props: ["detailitem"],
+
+  methods: {
+    onClickLeft() {
+      this.$router.go(-1)
+    },
+    lkju(){
+     this.$router.push("/ord");
+    },
+    onConfirm(value) {
+      const month = value;
+      this.formatDateTime(month);
+      this.showPicker = false;
+    },
+    onClick(name, title) {
+      //   Toast(title);
+    },
+    onLoad() {
+      // 异步更新数据
+      // setTimeout 仅做示例,真实场景中一般为 ajax 请求
+      setTimeout(() => {
+        for (let i = 0; i < 10; i++) {
+          this.list.push(this.list.length + 1);
+        }
+
+        // 加载状态结束
+        this.loading = false;
+
+        // 数据全部加载完成
+        if (this.list.length >= 40) {
+          this.finished = true;
+        }
+      }, 1000);
+    },
+    formatDateTime(inputTime) {
+      let date = new Date(inputTime);
+      let y = date.getFullYear();
+      let m = date.getMonth() + 1;
+      m = m < 10 ? "0" + m : m;
+      let d = date.getDate();
+      d = d < 10 ? "0" + d : d;
+      const time = y + "-" + m + "-" + d;
+      this.text = time;
+      console.log(time);
+
+      return this.text;
+      console.log(second);
+      // return this.shoutime
+    }
+  }
+};
+</script>
+
+<style lang="less">
+.ecord_header {
+  .van-tabs__line {
+    background: #009fe8;
+  }
+  .van-tabs__wrap {
+    box-shadow: 0px 3px 2px 0px rgba(218, 218, 218, 0.35);
+  }
+  .van-tab__pane {
+    background: #fff;
+  }
+}
+</style>
+
+
+<style scoped lang="less">
+.detailItem {
+  background-color: #fff;
+  //   height: 100vh;
+  p {
+    font-size: 3.333vw;
+    padding: 0.833vw 0;
+  }
+  .imgparent {
+    position: relative;
+    .bottom {
+      padding: 0 2.778vw;
+      margin-bottom: 1.389vw;
+      position: absolute;
+      bottom: 0.556vw;
+      background: linear-gradient(0deg, rgba(0, 0, 0, 0.85), transparent);
+      justify-content: space-between;
+      color: white;
+      display: flex;
+      left: 0;
+      right: 0;
+    }
+  }
+  .approba_nave {
+    border-bottom: 0.267vw solid #dadada;
+    margin: 10px 16px;
+    padding: 5px 0;
+    position: relative;
+    .ecord_img {
+      width: 11.2vw;
+      height: 11.2vw;
+      position: absolute;
+      right: 0;
+      bottom: 12px;
+    }
+    p {
+      font-size: 2.667vw;
+      font-family: PingFang SC;
+      font-weight: 400;
+      color: #666666;
+    }
+    p:nth-child(1) {
+      display: flex;
+      justify-content: space-between;
+      margin-bottom: 2.133vw;
+      i {
+        font-style: normal;
+        font-weight: 700;
+      }
+      .soei {
+        font-size: 3.733vw;
+        font-family: PingFang SC;
+        font-weight: 400;
+        color: #343434;
+      }
+      span:nth-child(2) {
+        color: #aaa;
+        font-weight: 500;
+      }
+    }
+  }
+}
+.approva_header {
+  height: 40px;
+  .ijeud {
+    padding: 0 4.267vw;
+    display: flex;
+    align-items: center;
+    height: 40px;
+    padding-top: 10px;
+    img:nth-child(1) {
+      width: 4.267vw;
+      height: 4.267vw;
+    }
+    img:nth-child(3) {
+      width: 1.867vw;
+      height: 1.867vw;
+    }
+    span {
+      font-size: 3.467vw;
+      font-family: PingFang SC;
+      font-weight: 400;
+      color: #343434;
+      margin: 0 5px;
+    }
+  }
+}
+</style>

+ 284 - 0
boman-h5/src/views/record.vue

@@ -0,0 +1,284 @@
+<template>
+  <div>
+    <div class="detailItem">
+      <div class="imgparent">
+        <van-nav-bar
+          title="详细记录"
+          left-text="返回"
+          left-arrow
+          @click-left="onClickLeft"
+        />
+      </div>
+      <div class="approva_header">
+        <p @click="showPicker = true">
+          <img
+            src="../assets/img/icon_rqxz.png"
+            alt=""
+          >
+          <span>{{text}}</span>
+          <img
+            src="../assets/img/icon_xl.png"
+            alt=""
+          >
+        </p>
+      </div>
+      <div>
+        <van-list
+          v-model="loading"
+          :finished="finished"
+          :finished-text="finishedText"
+          @load="onLoad"
+        >
+          <div
+            class="approba_nave"
+            v-for="(item,index) in allHouseDetail"
+            :key="index"
+            @click="tijao(item.id)"
+          >
+            <p>
+              <span class="soei">上班打卡 {{item.attendanceTableWork}}</span>
+              <span>{{item.dateTime == null? '暂无数据' : item.dateTime }}</span>
+            </p>
+            <p>下班打卡 {{item.attendanceTableOffWork == null? '暂无数据' : item.attendanceTableOffWork}}</p>
+          </div>
+        </van-list>
+      </div>
+      <van-popup
+        v-model="showPicker"
+        position="bottom"
+      >
+        <van-datetime-picker
+          type="date"
+          @confirm="onConfirm"
+          @cancel="showPicker = false"
+        />
+      </van-popup>
+    </div>
+  </div>
+</template>
+
+<script>
+export default {
+  data() {
+    return {
+      allHouseDetail: [],
+      loading: false,
+      finished: false,
+      text: "选择日期",
+      value: "",
+      showPicker: false,
+      minDate: new Date(2020, 0, 1),
+      maxDate: new Date(2025, 10, 1),
+      currentDate: new Date(),
+      qurmond: {
+        table: "attendance_table",
+        pageNo: 1,
+        pageSize: 4,
+        orderBy: "create_time desc",
+        fixedData: {
+          condition: {
+            // status: 1
+          }
+        }
+      },
+      page: 1, // 当前页码
+      page_size: 100, // 每页多少条
+      total: 0, // 总条数
+      error: false, // 错误提示
+      refreshing: false, // 下拉刷新
+      finishedText: ""
+    };
+  },
+  props: ["detailitem"],
+  created() {
+    this.appList();
+  },
+  methods: {
+    onClickLeft() {
+      this.$router.go(-1);
+    },
+    onConfirm(value) {
+      const month = value;
+      this.formatDateTime(month);
+      this.showPicker = false;
+    },
+    // 提交
+    onSubmit(values) {
+      console.log("submit", values);
+    },
+    // 请求数据
+    async appList() {
+      const res = await this.$http.post(
+        "/boman-web-core/attendance/detailedRecord",
+        this.qurmond
+      );
+      console.log(res);
+      if (res.data.code !== 200) {
+        this.$msg.fail(res.data.msg);
+        return false;
+      }
+      // this.allHouseDetail = res.data.data.rows;
+      if (this.qurmond.pageNo == 1) {
+        this.loading = false;
+        this.allHouseDetail = res.data.data;
+        this.total = res.total;
+      } else {
+        this.loading = false;
+        this.allHouseDetail = this.allHouseDetail.concat(res.data.data);
+        this.total = res.data.total;
+      }
+      if (res.data.data.length < this.qurmond.pageSize) {
+        this.finished = true;
+        this.finishedText = "没有更多啦";
+      }
+      if (res.data.data.length == 0) {
+        this.finished = true;
+        this.finishedText = "暂无数据";
+        console.log(34);
+      } else if (res.data.data.length < this.qurmond.pageSize) {
+        console.log(12);
+        this.finished = true;
+        this.finishedText = "没有更多啦";
+      }
+      console.log(this.allHouseDetail);
+    },
+    onLoad() {
+      // 异步更新数据
+      // setTimeout 仅做示例,真实场景中一般为 ajax 请求
+      // setTimeout(() => {
+      //   for (let i = 0; i < 10; i++) {
+      //     this.list.push(this.list.length + 1);
+      //   }
+      //   // 加载状态结束
+      //   this.loading = false;
+      //   // 数据全部加载完成
+      //   if (this.list.length >= 40) {
+      //     this.finished = true;
+      //   }
+      // }, 1000);
+      // 时间格式化
+    },
+    formatDateTime(inputTime) {
+      let date = new Date(inputTime);
+      let y = date.getFullYear();
+      let m = date.getMonth() + 1;
+      m = m < 10 ? "0" + m : m;
+      let d = date.getDate();
+      d = d < 10 ? "0" + d : d;
+      const time = y + "-" + m + "-" + d;
+      this.text = time;
+      console.log(time);
+
+      return this.text;
+      console.log(second);
+      // return this.shoutime
+    },
+    tijao(index){
+      //  this.$router.push("/ord?id=" + index);
+    }
+  }
+};
+</script>
+
+<style lang="less">
+.formtr {
+  .stru {
+    .van-field__control {
+      text-align: right;
+    }
+  }
+
+  .van-cell:not(:last-child)::after {
+    border-bottom: 0;
+  }
+  .van-field__control--custom {
+    justify-content: flex-end;
+  }
+  .van-cell {
+    font-weight: 500;
+    color: #343434;
+    padding: 5.6vw 4.267vw;
+  }
+}
+</style>
+
+
+<style scoped lang="less">
+.detailItem {
+  background-color: #fff;
+  //   height: 100vh;
+  p {
+    font-size: 3.333vw;
+    padding: 0.833vw 0;
+  }
+  .imgparent {
+    position: relative;
+    .bottom {
+      padding: 0 2.778vw;
+      margin-bottom: 1.389vw;
+      position: absolute;
+      bottom: 0.556vw;
+      background: linear-gradient(0deg, rgba(0, 0, 0, 0.85), transparent);
+      justify-content: space-between;
+      color: white;
+      display: flex;
+      left: 0;
+      right: 0;
+    }
+  }
+  .approba_nave {
+    border-bottom: 0.267vw solid #dadada;
+    margin: 5px 16px;
+    padding: 10px 0;
+    p {
+      font-size: 2.667vw;
+      font-family: PingFang SC;
+      font-weight: 400;
+      color: #343434;
+    }
+    p:nth-child(1) {
+      display: flex;
+      justify-content: space-between;
+      margin-bottom: 1.333vw;
+      i {
+        font-style: normal;
+        font-weight: 700;
+      }
+      .soei {
+        font-size: 3.733vw;
+        font-family: PingFang SC;
+        font-weight: 400;
+        color: #343434;
+      }
+      span:nth-child(2) {
+        color: #aaa;
+        font-weight: 500;
+      }
+    }
+  }
+}
+.approva_header {
+  height: 40px;
+  p {
+    padding: 0 4.267vw;
+    display: flex;
+    align-items: center;
+    height: 40px;
+    img:nth-child(1) {
+      width: 4.267vw;
+      height: 4.267vw;
+    }
+    img:nth-child(3) {
+      width: 1.867vw;
+      height: 1.867vw;
+    }
+    span {
+      font-size: 3.467vw;
+      font-family: PingFang SC;
+      font-weight: 400;
+      color: #343434;
+      margin: 0 5px;
+    }
+  }
+}
+</style>

+ 102 - 0
boman-h5/src/views/set.vue

@@ -0,0 +1,102 @@
+<template>
+    <div class="set">
+        <div class="imgparent">
+            <van-nav-bar
+                title="设置"
+                left-arrow
+                @click-left="onClickLeft"
+            />
+        </div>
+        <div class="set_nav">
+            <p><span>我的账号</span><span>138****5438</span></p>
+            <p>
+                <span>更换手机号码</span>
+                <span><img
+                        src="../assets/img/icon_back_enter.png"
+                        alt=""
+                    ></span>
+            </p>
+            <p><span>修改密码</span><span><img
+                        src="../assets/img/icon_back_enter.png"
+                        alt=""
+                    ></span></p>
+
+        </div>
+        <div class="srt_bottm">
+            <p>退出当前账号</p>
+        </div>
+    </div>
+</template>
+
+<script>
+export default {
+  data() {
+    return {
+      model: {}
+    };
+  },
+  methods: {
+    async userData() {
+      const res = await this.$http.get("/user/" + localStorage.getItem("id"));
+      this.model = res.data[0];
+    },
+    onClickLeft() {}
+  },
+  created() {
+    // this.userData();
+  }
+};
+</script>
+
+<style lang="less">
+.set {
+  background-color: #fff;
+  height: 100vh;
+//   padding: 0 16px;
+  .set_nav {
+      padding: 0 16px;
+    p {
+      font-size: 3.733vw;
+      font-family: PingFang SC;
+      font-weight: 500;
+      color: #343434;
+      display: flex;
+      justify-content: space-between;
+      margin-top: 35px;
+      span {
+        font-size: 3.733vw;
+        font-family: PingFang SC;
+        font-weight: 500;
+        color: #343434;
+      }
+      span:nth-child(2) {
+        font-size: 3.733vw;
+        font-family: PingFang SC;
+        font-weight: 400;
+        color: #343434;
+        img {
+          width: 6px;
+          height: 9px;
+        }
+      }
+    }
+  }
+  .srt_bottm {
+      margin-top: 90%;
+    p {
+      
+      height: 42px;
+    //   width: 100%;
+      margin: 0 16px;
+      background-color: #009fe8;
+      border-radius: 3px;
+      font-size: 14px;
+      font-family: PingFang SC;
+      font-weight: 400;
+      color: #ffffff;
+      line-height: 42px;
+      text-align: center;
+    }
+  }
+}
+</style>

+ 292 - 0
boman-h5/src/views/ttendance.vue

@@ -0,0 +1,292 @@
+<template>
+    <div>
+        <div class="lock">
+            <div class="imgparent">
+                <van-nav-bar
+                    title="考勤记录"
+                    left-text="返回"
+                    left-arrow
+                    @click-left="onClickLeft"
+                />
+            </div>
+            <div class="lock_header">
+                <div class="lock_headerth">
+                    <p>本月考勤记录</p>
+                    <p @click="cords"><span>详细记录</span><img
+                            src="../assets/img/icon_xxjl_blue.png"
+                            alt=""
+                        > </p>
+                </div>
+                <div class="lock_headerthbt">
+                    <p>
+                        <span>1</span>
+                        <span>迟到</span>
+                    </p>
+                    <p>
+                        <span>1</span>
+                        <span>早退</span>
+                    </p>
+                    <p>
+                        <span>1</span>
+                        <span>请假</span>
+                    </p>
+                </div>
+            </div>
+            <div class="bottom tten_bottom">
+                <van-calendar
+                    color="#1989fa"
+                    :poppable="false"
+                    :show-confirm="false"
+                    :style="{ height: '350px' }"
+                    :show-title="false"
+                    :formatter="formatter"
+                    :min-date="minDate" :max-date="maxDate"
+                />
+                <!-- <inline-calendar
+      v-model="value"
+      :start-date="minDate"
+      :end-date="maxDate"
+      :return-six-rows="false"
+      :render-function="buildSlotFn"
+      @on-change="chooseCalendarDay"
+    ></inline-calendar> -->
+
+            </div>
+
+            <p></p>
+        </div>
+    </div>
+</template>
+
+<script>
+export default {
+  data() {
+    return {
+      list: [],
+      loading: false,
+      finished: false,
+      text: "选择日期",
+      value: "",
+      showPicker: false,
+      minDate: new Date(2020, 0, 1),
+      maxDate: new Date(2022, 10, 1),
+      currentDate: new Date(),
+      gettime: "",
+      gettimetwo: "",
+      timeList:['2021-05-26','2021-05-27']
+
+    };
+  },
+  created() {
+    this.time();
+  },
+  methods: {
+    pathPush() {},
+    onClickLeft() {
+      this.$router.go(-1)
+    },
+    buildSlotFn (){
+
+    },
+    chooseCalendarDay(){
+
+    },
+    // 查看详细记录
+    cords(){
+      this.$router.push("/record");
+    },
+     formatter(day) {
+      const month = day.date.getMonth() + 1;
+      const datee = day.date.getDate();
+      let date = new Date(day.date);
+      let y = date.getFullYear();
+      let m = date.getMonth() + 1;
+      m = m < 10 ? "0" + m : m;
+      let d = date.getDate();
+      d = d < 10 ? "0" + d : d;
+      const time = y + "-" + m + "-" + d;
+      console.log(day)
+      for(var i = 0 ; i < this.timeList.length; i++){
+          if(this.timeList[i] == time){
+               day.bottomInfo = "正常";
+          }
+      }
+      if (month === 5) {
+        if (datee === 1) {
+          day.topInfo = '劳动节';
+        } else if (datee === 4) {
+          day.topInfo = '青年节';
+        } else if (datee === 11) {
+          day.text = '今天';
+        }
+      }
+
+    //   if (day.type === 'start') {
+    //     day.bottomInfo = '正常';
+    //   } else if (day.type === 'end') {
+    //     day.bottomInfo = '离店';
+    //   }
+
+      return day;
+    },
+    // 日期
+    time() {
+      var _this = this;
+      let yy = new Date().getFullYear();
+      let mm = new Date().getMonth() + 1;
+      let dd = new Date().getDate();
+      let hh = new Date().getHours();
+      let mf =
+        new Date().getMinutes() < 10
+          ? "0" + new Date().getMinutes()
+          : new Date().getMinutes();
+      let ss =
+        new Date().getSeconds() < 10
+          ? "0" + new Date().getSeconds()
+          : new Date().getSeconds();
+      _this.gettimetwo =
+        yy + "-" + mm + "-" + dd + " " + hh + ":" + mf + ":" + ss;
+      _this.gettime = hh + ":" + mf + ":" + ss;
+      console.log(this.gettime);
+    }
+  }
+};
+</script>
+
+
+<style lang="less">
+.tten_bottom {
+  .van-calendar__header {
+    box-shadow: 0 0 0 !important;
+  }
+  .van-calendar__bottom-info{
+     color: #009FE8;
+  }
+//   .van-calendar__selected-day{
+//     background-color: #009FE8;
+//     border-radius:44px;
+//     width: 37px;
+//     height: 37px;
+//   }
+}
+</style>
+
+
+
+<style scoped lang="less">
+.lock {
+  height: 100vh;
+  background: #fff;
+  padding: 0 17px;
+  padding-bottom: 40px;
+  .lock_header {
+    height: 29.6vw;
+    padding: 4.533vw;
+    box-shadow: 0px 0px 6px 0px rgba(153, 152, 152, 0.39);
+    border-radius: 3px;
+    margin-top: 30px;
+    .lock_headerth {
+      display: flex;
+      justify-content: space-between;
+      align-items: center;
+      p:nth-child(1) {
+        font-size: 13px;
+        font-family: PingFang SC;
+        font-weight: bold;
+        color: #343434;
+      }
+      p:nth-child(2) {
+        display: flex;
+        align-items: center;
+        span {
+          font-size: 13px;
+          font-family: PingFang SC;
+          font-weight: 400;
+          color: #009fe8;
+        }
+        img {
+          width: 1.333vw;
+          height: 2.4vw;
+          margin-left: 5px;
+        }
+      }
+    }
+    .lock_headerthbt {
+      display: flex;
+      justify-content: space-between;
+      p {
+        flex: 1;
+        text-align: center;
+        display: flex;
+        flex-direction: column;
+        align-items: center;
+        margin-top: 30px;
+        span:nth-child(1) {
+          margin-bottom: 5px;
+          font-size: 17px;
+          font-family: PingFang SC;
+          font-weight: bold;
+          color: #343434;
+        }
+        span:nth-child(2) {
+          font-size: 11px;
+          font-family: PingFang SC;
+          font-weight: 400;
+          color: #343434;
+        }
+      }
+    }
+  }
+  //   第二部分样式
+  .bottom {
+    box-shadow: 0px 0px 6px 0px rgba(153, 152, 152, 0.39);
+    border-radius: 3px;
+    margin-top: 15px;
+    padding: 0 16px;
+    padding-top: 27px;
+  }
+  //   按钮样式
+  .lock_navebut {
+    display: flex;
+    flex-direction: column;
+    justify-content: center;
+    align-items: center;
+    margin: 50px 0;
+    p:nth-child(1) {
+      width: 167px;
+      height: 56px;
+      background: #009fe8;
+      box-shadow: 0px 3px 3px 0px rgba(3, 141, 204, 0.39);
+      border-radius: 28px;
+      display: flex;
+      flex-direction: column;
+      justify-content: center;
+      align-items: center;
+      margin-bottom: 13px;
+      span {
+        font-size: 14px;
+        font-family: PingFang SC;
+        font-weight: bold;
+        color: #ffffff;
+      }
+      span:nth-child(2) {
+        font-weight: 500;
+        margin-top: 3px;
+      }
+    }
+    p:nth-child(2) {
+      img {
+        width: 10px;
+        height: 10px;
+      }
+      span {
+        font-size: 10px;
+        font-family: PingFang SC;
+        font-weight: 400;
+        color: #666666;
+        margin-left: 5px;
+      }
+    }
+  }
+}
+</style>

+ 75 - 0
boman-h5/src/views/ubmit.vue

@@ -0,0 +1,75 @@
+<template>
+    <div>
+        <div class="ubmit">
+            <div class="imgparent">
+                <van-nav-bar
+                    title="提交"
+                    left-text="返回"
+                    left-arrow
+                    @click-left="onClickLeft"
+                />
+            </div>
+            <div class="bottom">
+                <img
+                    src="../assets/img/pic_tjxx_sus.png"
+                    alt=""
+                >
+                <p>您的请假信息已提交成功请等待审批</p>
+                <span @click="fanhu ">返回首页</span>
+            </div>
+
+            <p></p>
+        </div>
+    </div>
+</template>
+
+<script>
+export default {
+  props: ["detailitem"],
+  methods: {
+    pathPush() {},
+    onClickLeft() {
+      this.$router.go(-1)
+    },
+    fanhu(){
+      
+    }
+  }
+};
+</script>
+
+<style scoped lang="less">
+.ubmit {
+  height: 100vh;
+  background: #fff;
+  .bottom {
+      display: flex;
+      flex-direction: column;
+      align-items: center;
+    p {
+      font-size: 3.733vw;
+      font-family: PingFang SC;
+      font-weight: 600;
+      color: #343434;
+      line-height: 5.6vw;
+      text-align: center;
+      width: 42%;
+    }
+    span {
+      font-size: 2.933vw;
+      font-family: PingFang SC;
+      font-weight: 500;
+      color: #aaaaaa;
+      line-height: 5.6vw;
+      position: fixed;
+      bottom: 28vw;
+    }
+    img{
+        widows: 16.267vw;
+        height: 19.2vw;
+        margin-top: 24vw;
+        margin-bottom: 10.667vw;
+    }
+  }
+}
+</style>

+ 57 - 5
boman-h5/src/views/user.vue

@@ -15,6 +15,12 @@
                     <p>所在部门:市监局</p>
                 </div>
             </div>
+            <div class="imkjimg">
+              <img
+                        src="../assets/img/icon_mine_setting.png"
+                        alt=""
+                    >
+            </div>
             <div class="user_nicti">
 
                 <van-swipe
@@ -58,21 +64,45 @@
 
         </div>
         <div class="index_nav">
-            <p>
+            <p @click="dance">
 
                 <img
                     src="../assets/img/icon_mine_kqjl.png"
                     alt=""
                 >
-                <span>考勤打卡</span>
+                <span>考勤记录</span>
+                <img
+                    src="../assets/img/icon_back_enter.png"
+                    alt=""
+                >
+            </p>
+            <p @click="ave">
+
+                <img
+                    src="../assets/img/icon_mine_qjjl.png"
+                    alt=""
+                >
+                <span>请假记录</span>
                 <img
-                    src="../assets/img/icon_b;ack_enter.png"
+                    src="../assets/img/icon_back_enter.png"
+                    alt=""
+                >
+            </p>
+            <p @click="oval">
+
+                <img
+                    src="../assets/img/icon_mine_spjl.png"
+                    alt=""
+                >
+                <span>审批记录</span>
+                <img
+                    src="../assets/img/icon_back_enter.png"
                     alt=""
                 >
             </p>
 
         </div>
-        <nav-bar></nav-bar>
+        <nav-bar v-bind:active=2></nav-bar>
     </div>
 </template>
 
@@ -83,7 +113,7 @@ export default {
   data() {
     return {
       category: [],
-      active: 1
+      active: 2
     };
   },
   components: {
@@ -141,6 +171,18 @@ export default {
     categoryItem() {
       const categoryitem = this.category[this.active];
       return categoryitem;
+    },
+    // 考勤记录
+    dance(){
+      this.$router.push("/record");
+    },
+    //  请假记录 
+    ave(){
+      this.$router.push("/ecord");
+    },
+    // 审批记录
+    oval(){
+     this.$router.push("/proval");
     }
   },
   watch: {
@@ -152,6 +194,7 @@ export default {
     }
   },
   created() {
+    console.log(3)
     this.selectCategory();
   }
 };
@@ -270,4 +313,13 @@ export default {
     }
   }
 }
+.imkjimg{
+  position: fixed;
+  top: 50px;
+  right: 16px;
+  img{
+    width: 17px;
+    height: 17px;
+  }
+}
 </style>

+ 6 - 1
boman-h5/src/views/workbench.vue

@@ -2,6 +2,10 @@
   <div class="home" v-if="category">
     <div class="categorytab">
       <!-- <div class="category-ico" @click="$router.push('/editcategory')"><van-icon name="setting-o" /></div> -->
+     <van-nav-bar
+                    title="工作台"
+                    :left-arrow="false"
+                />
      <div class="workben_header">
 		   <van-swipe class="my-swipe" :autoplay="3000" indicator-color="white">
              <van-swipe-item><img src="../assets/img/pic_gzt_banner.png" alt=""></van-swipe-item>
@@ -23,7 +27,7 @@
      </p>
    </div>
     </div>
-	<nav-bar></nav-bar>
+	<nav-bar v-bind:active=1></nav-bar>
   </div>
 </template>
 
@@ -103,6 +107,7 @@ export default {
     }
   },
   created() {
+    console.log(34)
     this.selectCategory();
   }
 };

+ 118 - 0
boman-h5/vue.config.js

@@ -0,0 +1,118 @@
+// // 'use strict'
+// // const path = require('path')
+// // // const defaultSettings = require('./src/settings.js')
+
+// // function resolve(dir) {
+// //   return path.join(__dirname, dir)
+// // }
+
+// // const name =  '潜山市云数据中心' // 标题
+
+// // const port = process.env.port || process.env.npm_config_port || 80 // 端口
+
+// // // vue.config.js 配置说明
+// // //官方vue.config.js 参考文档 https://cli.vuejs.org/zh/config/#css-loaderoptions
+// // // 这里只列一部分,具体配置参考文档
+// module.exports = {
+//   // 部署生产环境和开发环境下的URL。
+//   // 默认情况下,Vue CLI 会假设你的应用是被部署在一个域名的根路径上
+//   // 例如 https://www.ruoyi.vip/。如果应用被部署在一个子路径上,你就需要用这个选项指定这个子路径。例如,如果你的应用被部署在 https://www.ruoyi.vip/admin/,则设置 baseUrl 为 /admin/。
+//   publicPath: process.env.NODE_ENV === "production" ? "/" : "/",
+//   // 在npm run build 或 yarn build 时 ,生成文件的目录名称(要和baseUrl的生产环境路径一致)(默认dist)
+//   outputDir: 'dist',
+//   // 用于放置生成的静态资源 (js、css、img、fonts) 的;(项目打包之后,静态资源会放在这个文件夹下)
+//   assetsDir: 'static',
+//   // 是否开启eslint保存检测,有效值:ture | false | 'error'
+//   lintOnSave: process.env.NODE_ENV === 'development',
+//   // 如果你不需要生产环境的 source map,可以将其设置为 false 以加速生产环境构建。
+//   productionSourceMap: false,
+//   // webpack-dev-server 相关配置
+//   devServer: {
+//     host: '0.0.0.0',
+//     port: port,
+//     open: true,
+//     proxy: {
+//       // detail: https://cli.vuejs.org/config/#devserver-proxy
+//       [process.env.VUE_APP_BASE_API]: {
+//         target: '',     
+//         changeOrigin: true,  
+//         pathRewrite: {
+//           ['^' + process.env.VUE_APP_BASE_API]: ''
+//         }
+//       }
+//     },
+//     disableHostCheck: true
+//   },
+//   configureWebpack: {
+//     name: name,
+//     resolve: {
+//       alias: {
+//         '@': resolve('src')
+//       }
+//     }
+//   },
+//   chainWebpack(config) {
+//     config.plugins.delete('preload') // TODO: need test
+//     config.plugins.delete('prefetch') // TODO: need test
+
+//     // set svg-sprite-loader
+//     config.module
+//       .rule('svg')
+//       .exclude.add(resolve('src/assets/icons'))
+//       .end()
+//     config.module
+//       .rule('icons')
+//       .test(/\.svg$/)
+//       .include.add(resolve('src/assets/icons'))
+//       .end()
+//       .use('svg-sprite-loader')
+//       .loader('svg-sprite-loader')
+//       .options({
+//         symbolId: 'icon-[name]'
+//       })
+//       .end()
+
+//     config
+//       .when(process.env.NODE_ENV !== 'development',
+//         config => {
+//           config
+//             .plugin('ScriptExtHtmlWebpackPlugin')
+//             .after('html')
+//             .use('script-ext-html-webpack-plugin', [{
+//             // `runtime` must same as runtimeChunk name. default is `runtime`
+//               inline: /runtime\..*\.js$/
+//             }])
+//             .end()
+//           config
+//             .optimization.splitChunks({
+//               chunks: 'all',
+//               cacheGroups: {
+//                 libs: {
+//                   name: 'chunk-libs',
+//                   test: /[\\/]node_modules[\\/]/,
+//                   priority: 10,
+//                   chunks: 'initial' // only package third parties that are initially dependent
+//                 },
+//                 elementUI: {
+//                   name: 'chunk-elementUI', // split elementUI into a single package
+//                   priority: 20, // the weight needs to be larger than libs and app or it will be packaged into libs or app
+//                   test: /[\\/]node_modules[\\/]_?element-ui(.*)/ // in order to adapt to cnpm
+//                 },
+//                 commons: {
+//                   name: 'chunk-commons',
+//                   test: resolve('src/components'), // can customize your rules
+//                   minChunks: 3, //  minimum common number
+//                   priority: 5,
+//                   reuseExistingChunk: true
+//                 }
+//               }
+//             })
+//           config.optimization.runtimeChunk('single'),
+//           {
+//              from: path.resolve(__dirname, './public/robots.txt'), //防爬虫文件
+//              to: './', //到根目录下
+//           }
+//         }
+//       )
+//   }
+// }