Эх сурвалжийг харах

长护险:时间选择器

seamong 6 жил өмнө
parent
commit
8c0d02f9cb

+ 4 - 0
www/webapp/safety/.gitignore

@@ -19,3 +19,7 @@ yarn-error.log*
 *.njsproj
 *.njsproj
 *.sln
 *.sln
 *.sw*
 *.sw*
+
+
+# other
+docs/004.md

+ 5 - 4
www/webapp/safety/package.json

@@ -8,14 +8,15 @@
     "lint": "vue-cli-service lint"
     "lint": "vue-cli-service lint"
   },
   },
   "dependencies": {
   "dependencies": {
+    "axios": "^0.18.0",
     "better-scroll": "^1.13.2",
     "better-scroll": "^1.13.2",
+    "js-md5": "^0.7.3",
+    "moment": "^2.22.2",
+    "qiniu-js": "^2.5.3",
     "vant": "^1.4.5",
     "vant": "^1.4.5",
     "vue": "^2.5.17",
     "vue": "^2.5.17",
     "vue-router": "^3.0.1",
     "vue-router": "^3.0.1",
-    "vuex": "^3.0.1",
-    "axios": "^0.18.0",
-    "qiniu-js": "^2.5.3",
-    "js-md5": "^0.7.3"
+    "vuex": "^3.0.1"
   },
   },
   "devDependencies": {
   "devDependencies": {
     "@vue/cli-plugin-babel": "^3.0.5",
     "@vue/cli-plugin-babel": "^3.0.5",

+ 36 - 36
www/webapp/safety/src/App.vue

@@ -1,20 +1,20 @@
 <template>
 <template>
-    <div id="app">
-        <!--<p>{{ firstPath.length }}</p>-->
-        <!-- <img src="./assets/logo.png"> -->
-        <keep-alive>
-            <router-view/>
-        </keep-alive>
-         <!--<router-link to="/login">Go to Login</router-link>-->
-         <!--<router-link to="/care/upon">Go to Home</router-link>-->
-    </div>
+  <div id="app">
+    <!--<p>{{ firstPath.length }}</p>-->
+    <!-- <img src="./assets/logo.png"> -->
+    <keep-alive>
+      <router-view />
+    </keep-alive>
+    <!--<router-link to="/login">Go to Login</router-link>-->
+    <!--<router-link to="/care/upon">Go to Home</router-link>-->
+  </div>
 </template>
 </template>
 
 
 <script>
 <script>
-import { mapState } from 'vuex';
+import { mapState } from "vuex";
 
 
 export default {
 export default {
-  name: 'App',
+  name: "App",
   // data() {
   // data() {
   //   return {
   //   return {
   //     firstPath: '',
   //     firstPath: '',
@@ -23,23 +23,23 @@ export default {
 
 
   computed: {
   computed: {
     ...mapState({
     ...mapState({
-      info: state => state.user.info,
-    }),
+      info: state => state.user.info
+    })
   },
   },
   created() {
   created() {
-    this.$store.dispatch('getUserInfo');
+    this.$store.dispatch("getUserInfo");
   },
   },
   mounted() {
   mounted() {
     // this.toPath();
     // this.toPath();
-    console.log(this.info);
-    // if (JSON.stringify(this.info) === '{}') {
-    //   console.log('this.info');
-    //   this.$router.push({
-    //     path: '/client/login',
-    //   });
-    // } else {
-    //   console.log('1this.info');
-    // }
+    // console.log(this.info);
+    if (JSON.stringify(this.info) === "{}") {
+      // console.log('this.info');
+      this.$router.push({
+        path: "/"
+      });
+    } else {
+      // console.log('1this.info');
+    }
   },
   },
   methods: {
   methods: {
     // toPath() {
     // toPath() {
@@ -79,23 +79,23 @@ export default {
     //     console.log(e);
     //     console.log(e);
     //   }
     //   }
     // },
     // },
-  },
+  }
 };
 };
 </script>
 </script>
 
 
 <style lang="less">
 <style lang="less">
-    @import './assets/style/vant.less';
+@import "./assets/style/vant.less";
 
 
-    #app {
-        font-family: 'Avenir', Helvetica, Arial, sans-serif;
-        -webkit-font-smoothing: antialiased;
-        -moz-osx-font-smoothing: grayscale;
-        /* text-align: center; */
-        /* color: #2c3e50; */
-        /* margin-top: 60px; */
-    }
+#app {
+  font-family: "Avenir", Helvetica, Arial, sans-serif;
+  -webkit-font-smoothing: antialiased;
+  -moz-osx-font-smoothing: grayscale;
+  /* text-align: center; */
+  /* color: #2c3e50; */
+  /* margin-top: 60px; */
+}
 
 
-    .van-radio .van-icon-checked {
-        color: #41b883 !important;
-    }
+.van-radio .van-icon-checked {
+  color: #41b883 !important;
+}
 </style>
 </style>

+ 392 - 0
www/webapp/safety/src/components/datePicker.vue

@@ -0,0 +1,392 @@
+<template>
+  <div class="date-picker-wrapper van-hairline--bottom">
+    <!--时间选择插件-->
+    <div class="bar-nav-wrapper">
+      <div class="flex">
+        <div @click="setPreviousYear">&lt;&lt;</div>
+        <div @click='setPrevious'>&lt;</div>
+      </div>
+      <div class="flex">
+        <div class="year">{{year}}年</div>
+        <div class="months">{{months}}月</div>
+      </div>
+      <div class="flex">
+        <div @click="setNext">&gt;</div>
+        <div @click="setNextYear">&gt;&gt;</div>
+      </div>
+    </div>
+    <div class="date">
+      <div class="weeks date van-hairline--bottom">
+        <div
+            class="day"
+            @click="getDate(item)"
+            v-for="(item, index) in weeks"
+            :key='index'
+        >{{item}}
+        </div>
+      </div>
+    </div>
+    <div
+        class="days"
+        v-if="daysShow"
+    >
+      <div
+          v-for="(items, i) in date"
+          :key="i"
+          class="date"
+      >
+        <div
+            v-for="(item, index) in items"
+            :key="index"
+            class="day"
+            @click.stop="onChange(item)"
+        >
+          <span class="text" :class="{'active':item.isWork}">{{item.day}}</span>
+        </div>
+      </div>
+    </div>
+  </div>
+</template>
+<script>
+/**
+   * 日期结构
+   * 数据结构为二元数组,
+   * 下面为数据中的某一个数组示例
+   * [
+   * ....星期....
+   *   {
+   *     year: 2018, // 哪一年
+   *     months: 12, // 哪一月
+   *     day: 15, // 几号
+   *     week: 6, // 星期几
+   *     isWork: true|false // 当天是否有派单
+   *   },
+   *   {
+   *     year: 2018, // 哪一年
+   *     months: 12, // 哪一月
+   *     day: 16, // 几号
+   *     week: 7, // 星期几
+   *     isWork: true|false // 当天是否有派单
+   *   },
+   *   {
+   *     year: 2018, // 哪一年
+   *     day: 17, // 几号
+   *     week: 1, // 星期几
+   *     months: 12, // 哪一月
+   *     isWork: true|false // 当天是否有派单
+   *   }
+   * ......
+   * ]
+   */
+import moment from 'moment';
+// eslint-disable-next-line
+  import {formatDate} from '@/util/index';
+
+export default {
+  name: 'date-picker',
+  data() {
+    return {
+      year: '',
+      date: [[], [], [], [], [], []],
+      months: '',
+      weeks: ['一', '二', '三', '四', '五', '六', '日'],
+      days: '',
+      day: '',
+      daysShow: false,
+    };
+  },
+  props: {
+    period: Array,
+    start: Number,
+    end: Number,
+  },
+  created() {
+    // 初始化[年, 月, 日] 为当前时间
+    this.year = moment().year();
+    this.months = moment().month() + 1;
+    this.day = moment().date();
+    this.init();
+    // console.log(this.period);
+    // console.log(this.period.indexOf(5));
+  },
+  mounted() {
+    this.$nextTick(() => {
+      this.getDate();
+      const date = {
+        day: this.day,
+        year: this.year,
+        months: this.months,
+        week: '',
+        isWork: true,
+      };
+      date.week = this.getWeek(this.setDate(date));
+      date.isWork = this.isServerWork(this.setDate(date), date.week);
+      this.onChange(date);
+      // this.isServerWork();
+    });
+  },
+  methods: {
+    /**
+       * 1 星期一
+       * 2 星期二
+       * 3 星期三
+       * 4 星期四
+       * 5 星期五
+       * 6 星期六
+       * 7 星期日
+       */
+    init() {
+      for (let i = 0; i < 6; i += 1) {
+        this.date[i] = new Array(7);
+      }
+    },
+    getDate() {
+      const self = this;
+      self.init();
+      // console.clear();
+      // 时间字符串
+      // 获取下月天数
+      const date = self.setDate({
+        year: self.year,
+        months: self.months,
+        day: self.day,
+      }); // 2018-12-04
+        // 获取上月天数
+      let previousDays = moment(date)
+        .subtract(1, 'month')
+        .daysInMonth() + 1;
+        // 获取指定月份天数
+      self.days = moment(date).daysInMonth();
+      // 填充当月天数
+      let n = 0;
+      for (let i = 1; i < self.days + 1; i += 1) {
+        const dateInFor = self.setDate({
+          year: self.year,
+          months: self.months,
+          day: i,
+        });
+        const dayInWeek = self.getWeek(dateInFor);
+        self.date[n][dayInWeek - 1] = {
+          year: self.year,
+          months: self.months,
+          day: i,
+          week: dayInWeek,
+          // 判断当天是否有服务
+          isWork: self.isServerWork(dateInFor, dayInWeek),
+        };
+        if (dayInWeek === 7) {
+          n += 1;
+        }
+      }
+      // 给self.date[0]中填充上月天数
+      const firstDayInWeek = self.getWeek(
+        self.setDate({ year: self.year, months: self.months, day: 1 }),
+      );
+      for (let i = firstDayInWeek; i > -1; i -= 1) {
+        const getPreviousDate = self.getPreviousDate(previousDays -= 1);
+        const dayInWeek = self.getWeek(self.setDate(getPreviousDate));
+        self.date[0][i - 2] = {
+          year: getPreviousDate.year,
+          months: getPreviousDate.months,
+          day: previousDays,
+          week: dayInWeek,
+          isWork: self.isServerWork(self.setDate(getPreviousDate), dayInWeek),
+        };
+      }
+      // 给self.date填充下月天数
+      // console.log(`n:  ${n}`);
+      let next = 0;
+      for (let x = n; x < 6; x += 1) {
+        for (let y = 0; y < 7; y += 1) {
+          if (self.date[x][y] === undefined) {
+            self.getNextDate(next);
+            const getNextDate = self.getNextDate(next + 1);
+            const dayInWeek = self.getWeek(self.setDate(getNextDate));
+            self.date[x][y] = {
+              year: getNextDate.year,
+              months: getNextDate.months,
+              day: next += 1,
+              week: dayInWeek,
+              isWork: self.isServerWork(self.setDate(getNextDate), dayInWeek),
+            };
+          }
+        }
+      }
+      self.daysShow = true;
+    },
+    // 上个年
+    setPreviousYear() {
+      this.$nextTick(() => {
+        this.year -= 1;
+        this.getDate();
+      });
+    },
+    // 下个年
+    setNextYear() {
+      this.$nextTick(() => {
+        this.year += 1;
+        this.getDate();
+      });
+    },
+    // 上个月
+    setPrevious() {
+      const getPreviousDate = this.getPreviousDate(1);
+      // return;
+      this.$nextTick(() => {
+        this.year = getPreviousDate.year;
+        this.months = getPreviousDate.months;
+        this.getDate();
+      });
+    },
+    // 下个月
+    setNext() {
+      const getNextDate = this.getNextDate(1);
+      this.$nextTick(() => {
+        this.year = getNextDate.year;
+        this.months = getNextDate.months;
+        // this.day = moment().date();
+        this.getDate();
+      });
+    },
+    // 设置指定日期
+    setDate(date) {
+      return `${date.year}-${this.setMonths(date.months)}-${this.setDays(
+        date.day,
+      )}`;
+    },
+    // 处理月份字符串格式: 2 ==> 02
+    setMonths(months) {
+      if (`${months}`.length === 1) return `0${months}`;
+      return months;
+    },
+    // 处理月份字符串格式: 2 ==> 02
+    setDays(day) {
+      if (`${day}`.length === 1) return `0${day}`;
+      return day;
+    },
+    // 获取指定日期为星期几
+    getWeek(date) {
+      const week = moment(date).day();
+      return week === 0 ? 7 : week;
+    },
+    // 获取上个月为几年几月几日
+    getPreviousDate(d) {
+      const date = {
+        months: 0,
+        year: 0,
+        day: d,
+      };
+      if (this.months === 1) {
+        date.months = 12;
+        date.year = this.year - 1;
+      } else {
+        date.months = this.months - 1;
+        date.year = this.year;
+      }
+      return date;
+    },
+    // 获取下个月为几年几月几日
+    getNextDate(d) {
+      const date = {
+        year: 0,
+        months: 0,
+        day: d,
+      };
+      if (this.months === 12) {
+        date.months = 1;
+        date.year = this.year + 1;
+      } else {
+        date.months = this.months + 1;
+        date.year = this.year;
+      }
+      return date;
+    },
+    // 判断当天是否有服务
+    isServerWork(date, dayInWeek) {
+      const self = this;
+      const dayToTime = moment(date).valueOf() / 1000;
+      let isServerWork = false;
+      // 判断当前日期是否为服务日期
+      this.period.forEach((value) => {
+        if (value === window.Number.parseInt(dayInWeek)) {
+          if (dayToTime > self.start && dayToTime < this.end) {
+            isServerWork = true;
+          }
+        }
+      });
+      // console.log(`dayInWeek:__${dayInWeek};isServerWork:__${isServerWork}`);
+      return isServerWork;
+    },
+    // 回调
+    onChange(item) {
+      this.$emit('time', item);
+    },
+  },
+};
+</script>
+<style lang="less" scoped>
+  .date-picker-wrapper {
+    .date {
+      display: flex;
+      justify-content: center;
+      align-items: center;
+      width: 100%;
+      line-height: 30px;
+      .day {
+        flex: 1;
+        text-align: center;
+        font-size: 16px;
+        width: calc(100% / 7);
+        height: 40px;
+        position: relative;
+        border-right: 1px solid black;
+        border-bottom: 1px solid black;
+        box-sizing: border-box;
+        .text {
+          position: absolute;
+          z-index: 1;
+          width: 25px;
+          height: 25px;
+          line-height: 25px;
+          text-align: center;
+          transform: translate(-50%, 25%);
+        }
+        .active {
+          color: white;
+          background-color: red;
+          border-radius: 50%;
+        }
+        &:last-child {
+          border-right: 0;
+        }
+      }
+      &:nth-child(even) {
+        background-color: #0ac8ff;
+      }
+      &:last-child {
+        .day {
+          border-bottom: 0;
+        }
+      }
+    }
+    .bar-nav-wrapper {
+      display: flex;
+      padding: 10px 0;
+      text-align: center;
+      .flex {
+        width: calc(100% / 3);
+        display: flex;
+        & > div {
+          flex: 1;
+          font-size: 17px;
+          line-height: 20px;
+        }
+      }
+    }
+    .weeks {
+      background-color: #eee;
+      line-height: 40px;
+      border-bottom: 1px solid black;
+    }
+  }
+</style>

+ 1 - 3
www/webapp/safety/src/main.js

@@ -53,9 +53,7 @@ router.beforeEach((to, from, next) => {
           next();
           next();
         }
         }
       } else {
       } else {
-        next({
-          path: '/care/other',
-        });
+        next();
       }
       }
       break;
       break;
     }
     }

+ 21 - 1
www/webapp/safety/src/store/modules/user.js

@@ -3,11 +3,12 @@
  * 通过判断
  * 通过判断
  * */
  * */
 // eslint-disable-next-line
 // eslint-disable-next-line
-import { getJClient, getJWorker, userId } from '@/util/api';
+import { getJClient, getJWorker, getJxOrderList, userId } from '@/util/api';
 
 
 const state = {
 const state = {
   character: '', // 0: 护工; 1: 客户; 2; 访客
   character: '', // 0: 护工; 1: 客户; 2; 访客
   info: {},
   info: {},
+  orders: {},
 };
 };
 const getters = {};
 const getters = {};
 const actions = {
 const actions = {
@@ -34,6 +35,20 @@ const actions = {
       info,
       info,
     });
     });
   },
   },
+  async getUserOrders({ commit }) {
+    let orders;
+    if (this.state.user.character === 0) {
+      orders = await getJxOrderList({
+        work_id: userId(),
+      });
+    } else if (this.state.user.character === 1) {
+      orders = await getJxOrderList({
+        user_id: userId(),
+      });
+    }
+    // console.log(this.state.user.character);
+    commit('GETUSERORDER', orders);
+  },
 };
 };
 const mutations = {
 const mutations = {
   // eslint-disable-next-line
   // eslint-disable-next-line
@@ -54,6 +69,11 @@ const mutations = {
       console.log(error);
       console.log(error);
     }
     }
   },
   },
+  // eslint-disable-next-line
+  GETUSERORDER(state, params) {
+    // eslint-disable-next-line
+    state.orders = params;
+  },
 };
 };
 export default {
 export default {
   state,
   state,

+ 10 - 28
www/webapp/safety/src/util/api.js

@@ -19,7 +19,7 @@ export function userId() {
       '57e38f1b9f5160ac048b457d', // 塘下七武海-涛
       '57e38f1b9f5160ac048b457d', // 塘下七武海-涛
     ],
     ],
   };
   };
-  return localStorage.getItem('wxUserID2') != null ? localStorage.getItem('wxUserID2') : id.care[2];
+  return localStorage.getItem('wxUserID2') != null ? localStorage.getItem('wxUserID2') : id.client[0];
 }
 }
 
 
 export function apiPath() {
 export function apiPath() {
@@ -78,15 +78,15 @@ export async function getJWorker(userId) {
   return data.data.data;
   return data.data.data;
 }
 }
 
 
-// 获取用户订单列表
-export async function getClientList(params) {
-  const data = await axios.post(`${apiPath()}/j/HouseKeeping/list`, qs.stringify(params));
-  return data.data;
-}
-
-// 获取门店地址
-export async function getStore() {
-  const data = await axios.post(`${apiPath()}/j/HouseKeeping/GetStore`);
+/**
+ * 获取用户订单列表
+ * @param {String} params.userId // user_id work_id
+ */
+export async function getJxOrderList(params) {
+  const data = await axios.post(
+    `${apiPath()}/ch/JxOrder/list`,
+    qs.stringify(params),
+  );
   return data.data;
   return data.data;
 }
 }
 
 
@@ -95,21 +95,3 @@ export async function getSMS(params) {
   const data = await axios.post(`${apiPath()}/moonclub/reserve/code`, qs.stringify(params));
   const data = await axios.post(`${apiPath()}/moonclub/reserve/code`, qs.stringify(params));
   return data.data;
   return data.data;
 }
 }
-
-// 用户注册
-export async function userAddInfo(params) {
-  const data = await axios.post(`${apiPath()}/j/HouseKeeping/AddUserInfo`, qs.stringify(params));
-  return data.data;
-}
-
-// 添加订单数据 /j/HouseKeeping/Add
-export async function userAddOrder(params) {
-  const data = await axios.post(`${apiPath()}/j/HouseKeeping/Add`, qs.stringify(params));
-  return data.data;
-}
-
-// JGEmpolyerList
-export async function getEmpolyerList(params) {
-  const data = await axios.post(`${apiPath()}/j/JGEmpolyer/List/`, qs.stringify(params));
-  return data.data;
-}

+ 262 - 174
www/webapp/safety/src/views/Care/Login/index.vue

@@ -1,133 +1,217 @@
 <template>
 <template>
-    <div class="login-wrapper" ref="login">
-        <van-nav-bar title="护工注册" left-text="返回" @click-left="onClickLeft"
-                     left-arrow fixed/>
-        <van-cell-group class="van-cell-group-top">
-            <!-- <van-button class="btn" @click='submit' size="large"
+  <div
+    class="login-wrapper"
+    ref="login"
+  >
+    <van-nav-bar
+      title="护工注册"
+      left-text="返回"
+      @click-left="onClickLeft"
+      left-arrow
+      fixed
+    />
+    <van-cell-group class="van-cell-group-top">
+      <!-- <van-button class="btn" @click='submit' size="large"
                     type="primary">提交</van-button> -->
                     type="primary">提交</van-button> -->
-            <!-- 姓名: name -->
-            <van-field required clearable v-model="user.name"
-                       label="姓名" placeholder="请输入姓名" autosize/>
-            <!-- 性别: sex -->
-            <!-- <h-sex @sex='getSex' /> -->
-            <!-- 生日: birthday -->
-            <!-- <h-birthday></h-birthday> -->
-            <!-- 手机: mobilePhone -->
-            <van-field required clearable v-model="user.mobilePhone"
-                       label="手机" placeholder="请输入手机号码" autosize/>
-            <h-phone ref='hPhone' :phone='user.mobilePhone'/>
-            <!-- 身份证: IDcard -->
-            <van-field required clearable v-model="user.IDcard"
-                       label="身份证" placeholder="请输入身份证" autosize/>
-            <!-- 电话: phone -->
-            <van-field required clearable v-model="user.phone"
-                       label="电话" placeholder="请输入电话号码" autosize/>
-            <!-- 邮箱: email -->
-            <van-field required clearable type='email' v-model="user.email"
-                       label="邮箱" placeholder="请输入邮箱" autosize/>
-            <!-- 户籍地址: address1 -->
-            <van-field required clearable v-model="user.address1"
-                       label="户籍地址" placeholder="请输入户籍地址" autosize/>
-            <!-- 居住地址: address2 -->
-            <van-field required clearable v-model="user.address2"
-                       label="居住地址" placeholder="请输入居住地址" autosize/>
-            <!-- <van-button class="btn" @click='submit' size="large"
+      <!-- 姓名: name -->
+      <van-field
+        required
+        clearable
+        v-model="user.name"
+        label="姓名"
+        placeholder="请输入姓名"
+        autosize
+      />
+      <!-- 性别: sex -->
+      <!-- <h-sex @sex='getSex' /> -->
+      <!-- 生日: birthday -->
+      <!-- <h-birthday></h-birthday> -->
+      <!-- 手机: mobilePhone -->
+      <van-field
+        required
+        clearable
+        v-model="user.mobilePhone"
+        label="手机"
+        placeholder="请输入手机号码"
+        autosize
+      />
+      <h-phone
+        ref='hPhone'
+        :phone='user.mobilePhone'
+      />
+      <!-- 身份证: IDcard -->
+      <van-field
+        required
+        clearable
+        v-model="user.IDcard"
+        label="身份证"
+        placeholder="请输入身份证"
+        autosize
+      />
+      <!-- 电话: phone -->
+      <van-field
+        required
+        clearable
+        v-model="user.phone"
+        label="电话"
+        placeholder="请输入电话号码"
+        autosize
+      />
+      <!-- 邮箱: email -->
+      <van-field
+        required
+        clearable
+        type='email'
+        v-model="user.email"
+        label="邮箱"
+        placeholder="请输入邮箱"
+        autosize
+      />
+      <!-- 户籍地址: address1 -->
+      <van-field
+        required
+        clearable
+        v-model="user.address1"
+        label="户籍地址"
+        placeholder="请输入户籍地址"
+        autosize
+      />
+      <!-- 居住地址: address2 -->
+      <van-field
+        required
+        clearable
+        v-model="user.address2"
+        label="居住地址"
+        placeholder="请输入居住地址"
+        autosize
+      />
+      <!-- <van-button class="btn" @click='submit' size="large"
                       type="primary">提交</van-button> -->
                       type="primary">提交</van-button> -->
-            <!-- 通讯地址: address3 -->
-            <van-field required clearable v-model="user.address3"
-                       label="通讯地址" placeholder="请输入通讯地址" autosize/>
-            <!-- 邮编: ZIPcode -->
-            <van-field required clearable v-model="user.ZIPcode"
-                       label="邮编" placeholder="请输入邮编" autosize/>
-            <!-- 证书(图片): certificate -->
-            <div>
-                <!-- <video class="my-video" src="../../../assets/02.mp4"></video> -->
-                <!-- <video id="my-player" class="my-video video-js" controls
+      <!-- 通讯地址: address3 -->
+      <van-field
+        required
+        clearable
+        v-model="user.address3"
+        label="通讯地址"
+        placeholder="请输入通讯地址"
+        autosize
+      />
+      <!-- 邮编: ZIPcode -->
+      <van-field
+        required
+        clearable
+        v-model="user.ZIPcode"
+        label="邮编"
+        placeholder="请输入邮编"
+        autosize
+      />
+      <!-- 证书(图片): certificate -->
+      <div>
+        <!-- <video class="my-video" src="../../../assets/02.mp4"></video> -->
+        <!-- <video id="my-player" class="my-video video-js" controls
                             preload="auto" autoplay="autoplay" data-setup='{}'>
                             preload="auto" autoplay="autoplay" data-setup='{}'>
                             <source src="../../../assets/02.mp4" type="video/mp4">
                             <source src="../../../assets/02.mp4" type="video/mp4">
                             </source>
                             </source>
                           </video> -->
                           </video> -->
-            </div>
-            <div class="certificate-wrapper">
-                <h-title required text='添加证书'></h-title>
-                <div class="add">
-                    <uploader @imgSrc='getImgSrc'/>
-                    <!-- <uploader @imgSrc='getImgSrc' title='添加证书(反面)' /> -->
-                </div>
-            </div>
-            <!-- 护理机构: nurse -->
-            <van-field required clearable v-model="user.nurse"
-                       label="护理机构" placeholder="请输入护理机构" autosize/>
-            <!-- 状态: status -->
-            <!-- <van-field required clearable v-model="user.status"
+      </div>
+      <div class="certificate-wrapper">
+        <h-title
+          required
+          text='添加证书'
+        ></h-title>
+        <div class="add">
+          <uploader @imgSrc='getImgSrc' />
+          <!-- <uploader @imgSrc='getImgSrc' title='添加证书(反面)' /> -->
+        </div>
+      </div>
+      <!-- 护理机构: nurse -->
+      <van-field
+        required
+        clearable
+        v-model="user.nurse"
+        label="护理机构"
+        placeholder="请输入护理机构"
+        autosize
+      />
+      <!-- 状态: status -->
+      <!-- <van-field required clearable v-model="user.status"
                       label="护理状态" placeholder="请输入状态" autosize /> -->
                       label="护理状态" placeholder="请输入状态" autosize /> -->
-            <!-- 备注: desc -->
-            <van-field clearable v-model="user.desc" label="备注"
-                       placeholder="请输入备注" autosize/>
-            <van-button class="btn" @click='submit' size="large"
-                        type="primary">提交
-            </van-button>
-            <!-- <van-button class="btn" @click='testIDCard' size="large"
+      <!-- 备注: desc -->
+      <van-field
+        clearable
+        v-model="user.desc"
+        label="备注"
+        placeholder="请输入备注"
+        autosize
+      />
+      <van-button
+        class="btn"
+        @click='submit'
+        size="large"
+        type="primary"
+      >提交
+      </van-button>
+      <!-- <van-button class="btn" @click='testIDCard' size="large"
               type="primary">testIDCard
               type="primary">testIDCard
             </van-button> -->
             </van-button> -->
-        </van-cell-group>
-    </div>
+    </van-cell-group>
+  </div>
 </template>
 </template>
 <script>
 <script>
 /**
 /**
-   * 姓名: name
-   * 性别: sex
-   * 生日: birthday
-   * 身份证: IDcard
-   * 手机: mobile
-   * 电话: phone
-   * 邮箱: email
-   * 户籍地址: address1
-   * 居住地址: address2
-   * 通讯地址: address3
-   * 邮编: ZIPcode
-   * 证书(图片): certificate
-   * 护理机构: nurse
-   * 状态: status
-   * 备注: desc
-   */
+ * 姓名: name
+ * 性别: sex
+ * 生日: birthday
+ * 身份证: IDcard
+ * 手机: mobile
+ * 电话: phone
+ * 邮箱: email
+ * 户籍地址: address1
+ * 居住地址: address2
+ * 通讯地址: address3
+ * 邮编: ZIPcode
+ * 证书(图片): certificate
+ * 护理机构: nurse
+ * 状态: status
+ * 备注: desc
+ */
 // import { Cell, CellGroup, Field, RadioGroup, Radio } from 'vant';
 // import { Cell, CellGroup, Field, RadioGroup, Radio } from 'vant';
-import Bscroll from 'better-scroll';
+import Bscroll from "better-scroll";
 // eslint-disable-next-line
 // eslint-disable-next-line
-  import {testIDCard, IdCard, isEmail, isPhone, isZIPCode} from '@/util/index';
-import uploader from './uploader.vue';
-import phoneComponents from '@/components/phone.vue';
-import { addCare, getSMS, userId } from '@/util/api';
+import { testIDCard, IdCard, isEmail, isPhone, isZIPCode } from "@/util/index";
+import uploader from "./uploader.vue";
+import phoneComponents from "@/components/phone.vue";
+import { addCare, getSMS, userId } from "@/util/api";
 
 
 export default {
 export default {
   data() {
   data() {
     return {
     return {
-      vPhone: '',
+      vPhone: "",
       user: {
       user: {
-        name: '',
-        mobilePhone: '',
-        IDcard: '',
-        phone: '',
-        email: '',
-        address1: '',
-        address2: '',
-        address3: '',
-        ZIPcode: '',
-        certificate: '',
-        nurse: '',
-        status: '',
-        desc: '',
+        name: "",
+        mobilePhone: "",
+        IDcard: "",
+        phone: "",
+        email: "",
+        address1: "",
+        address2: "",
+        address3: "",
+        ZIPcode: "",
+        certificate: "",
+        nurse: "",
+        status: "",
+        desc: ""
       },
       },
       err: {
       err: {
-        phone: '电话',
-        email: '邮箱',
-        address1: '户籍地址',
-        address2: '居住地址',
-        address3: '通讯地址',
-        ZIPcode: '邮编',
-        certificate: '证书',
-        nurse: '护理机构',
-      },
+        phone: "电话",
+        email: "邮箱",
+        address1: "户籍地址",
+        address2: "居住地址",
+        address3: "通讯地址",
+        ZIPcode: "邮编",
+        certificate: "证书",
+        nurse: "护理机构"
+      }
     };
     };
   },
   },
   computed: {
   computed: {
@@ -138,11 +222,15 @@ export default {
   },
   },
   components: {
   components: {
     uploader,
     uploader,
-    'h-phone': phoneComponents,
+    "h-phone": phoneComponents
   },
   },
   methods: {
   methods: {
     submit() {
     submit() {
       const self = this;
       const self = this;
+      console.log(IdCard(self.user.IDcard, 2));
+      // return;
+      // self.$router.push({ path: "/care/other" });
+      // return;
       // console.log(userId());
       // console.log(userId());
       // return;
       // return;
       // 基本错误判断
       // 基本错误判断
@@ -152,7 +240,7 @@ export default {
           `${this.$refs.hPhone.sms.input}` === `${this.$refs.hPhone.sms.create}`
           `${this.$refs.hPhone.sms.input}` === `${this.$refs.hPhone.sms.create}`
         ) {
         ) {
           // console.log(this.$refs.hPhone.sms.input);
           // console.log(this.$refs.hPhone.sms.input);
-          console.log(154);
+          // console.log(154);
           addCare({
           addCare({
             user_id: userId(),
             user_id: userId(),
             name: self.user.name,
             name: self.user.name,
@@ -167,17 +255,17 @@ export default {
             address_number: self.user.ZIPcode,
             address_number: self.user.ZIPcode,
             card_number: self.user.IDcard,
             card_number: self.user.IDcard,
             certificate: self.user.certificate,
             certificate: self.user.certificate,
-            people: '居委会',
+            people: "居委会",
             care_institutions: self.user.nurse,
             care_institutions: self.user.nurse,
-            desc: self.user.nurse,
-          }).then((res) => {
+            desc: self.user.nurse
+          }).then(res => {
             if (res.length === 0) {
             if (res.length === 0) {
               self.$toast.success({
               self.$toast.success({
-                message: '注册成功',
+                message: "注册成功"
               });
               });
-              localStorage.setItem('__H5__character__', 0);
-              self.$store.dispatch('getUserInfo');
-              self.$router.push({ path: '/care/other' });
+              localStorage.setItem("__H5__character__", 0);
+              self.$router.push({ path: "/care/other" });
+              self.$store.dispatch("getUserInfo");
             }
             }
             // console.log(res);
             // console.log(res);
           });
           });
@@ -213,18 +301,18 @@ export default {
     },
     },
     // 手机号码验证
     // 手机号码验证
     // eslint-disable-next-line
     // eslint-disable-next-line
-      getCode( isPhone ) {
+    getCode(isPhone) {
       this.vPhone = isPhone;
       this.vPhone = isPhone;
     },
     },
     testIDCard() {
     testIDCard() {
-      getSMS().then((res) => {
+      getSMS().then(res => {
         console.log(res);
         console.log(res);
       });
       });
     },
     },
     initScroll() {
     initScroll() {
       if (!this.scroll) {
       if (!this.scroll) {
         this.scroll = new Bscroll(this.$refs.login, {
         this.scroll = new Bscroll(this.$refs.login, {
-          click: true,
+          click: true
         });
         });
       } else {
       } else {
         this.scroll.refresh();
         this.scroll.refresh();
@@ -237,33 +325,33 @@ export default {
     isUndefined() {
     isUndefined() {
       const self = this;
       const self = this;
       // eslint-disable-next-line
       // eslint-disable-next-line
-        for (let key in self.user) {
-        if (self.user[key] === '' && key !== 'desc' && key !== 'status') {
+      for (let key in self.user) {
+        if (self.user[key] === "" && key !== "desc" && key !== "status") {
           // eslint-disable-next-line
           // eslint-disable-next-line
-            const msg =
-              key === 'certificate'
-                ? '请添加证书照片!'
-                : `${self.err[key]}不为空!`;
+          const msg =
+            key === "certificate"
+              ? "请添加证书照片!"
+              : `${self.err[key]}不为空!`;
           self.$toast.fail(msg);
           self.$toast.fail(msg);
           return false;
           return false;
         }
         }
         switch (key) {
         switch (key) {
-          case 'IDcard': {
+          case "IDcard": {
             const msg = testIDCard(self.user[key]);
             const msg = testIDCard(self.user[key]);
-            if (msg !== '验证通过!') {
+            if (msg !== "验证通过!") {
               return self.$toast.fail(msg);
               return self.$toast.fail(msg);
             }
             }
             break;
             break;
           }
           }
-          case 'email': {
+          case "email": {
             if (!isEmail(self.user[key])) {
             if (!isEmail(self.user[key])) {
-              return self.$toast.fail('邮箱格式错误!');
+              return self.$toast.fail("邮箱格式错误!");
             }
             }
             break;
             break;
           }
           }
-          case 'ZIPcode': {
+          case "ZIPcode": {
             const msg = isZIPCode(self.user[key]);
             const msg = isZIPCode(self.user[key]);
-            if (!msg && typeof msg !== 'boolean') {
+            if (!msg && typeof msg !== "boolean") {
               return self.$toast.fail(msg);
               return self.$toast.fail(msg);
             }
             }
             break;
             break;
@@ -279,11 +367,11 @@ export default {
     onRead(file) {
     onRead(file) {
       const maxSize = 1024 * 1024 * 2;
       const maxSize = 1024 * 1024 * 2;
       // eslint-disable-next-line
       // eslint-disable-next-line
-        console.log(file);
+      console.log(file);
       if (maxSize < file.file.size) {
       if (maxSize < file.file.size) {
         const errorToast = this.$toast.fail({
         const errorToast = this.$toast.fail({
           duration: 0, // 持续展示 toast
           duration: 0, // 持续展示 toast
-          message: '上传文件不小于2M',
+          message: "上传文件不小于2M"
         });
         });
         setTimeout(() => {
         setTimeout(() => {
           errorToast.clear();
           errorToast.clear();
@@ -291,55 +379,55 @@ export default {
         return;
         return;
       }
       }
       // eslint-disable-next-line
       // eslint-disable-next-line
-        this.user.certificate.push(file.content);
+      this.user.certificate.push(file.content);
     },
     },
     getImgSrc(src) {
     getImgSrc(src) {
       this.user.certificate = src;
       this.user.certificate = src;
       console.log(this.user.certificate);
       console.log(this.user.certificate);
-    },
-  },
+    }
+  }
 };
 };
 </script>
 </script>
 <style lang="less" scoped>
 <style lang="less" scoped>
-    @import '../../../assets/style/vant.less';
+@import "../../../assets/style/vant.less";
 
 
-    .login-wrapper {
-        padding: 0 10px;
-        height: 100%;
-        background-color: #fff;
-        position: fixed;
-        z-index: 100;
-        /*top: 46px;*/
-        /*top: 0px;*/
-        bottom: 0;
-        right: 0;
-        left: 0;
-        overflow: scroll;
-        .van-cell-group-top {
-            margin-top: 46px;
-        }
-        .certificate-wrapper {
-            padding: 5px 15px;
-            .add {
-                // border: 1px solid black;
-            }
-        }
-        .my-video {
-            width: 100vw;
-        }
-        .btn {
-            display: block;
-            margin: 30px auto;
-        }
+.login-wrapper {
+  padding: 0 10px;
+  height: 100%;
+  background-color: #fff;
+  position: fixed;
+  z-index: 100;
+  /*top: 46px;*/
+  /*top: 0px;*/
+  bottom: 0;
+  right: 0;
+  left: 0;
+  overflow: scroll;
+  .van-cell-group-top {
+    margin-top: 46px;
+  }
+  .certificate-wrapper {
+    padding: 5px 15px;
+    .add {
+      // border: 1px solid black;
     }
     }
+  }
+  .my-video {
+    width: 100vw;
+  }
+  .btn {
+    display: block;
+    margin: 30px auto;
+  }
+}
 
 
-    .van-button,
-    .van-cell {
-        font-size: @inputSize;
-    }
+.van-button,
+.van-cell {
+  font-size: @inputSize;
+}
 
 
-    .van-nav-bar__left,
-    .van-nav-bar__right {
-        font-size: @inputSize;
-    }
+.van-nav-bar__left,
+.van-nav-bar__right {
+  font-size: @inputSize;
+}
 </style>
 </style>

+ 1 - 1
www/webapp/safety/src/views/Client/Login/index.vue

@@ -296,8 +296,8 @@ export default {
             message: '注册成功',
             message: '注册成功',
           });
           });
           localStorage.setItem('__H5__character__', 1);
           localStorage.setItem('__H5__character__', 1);
+          self.$router.push({ path: '/client/send' });
           self.$store.dispatch('getUserInfo');
           self.$store.dispatch('getUserInfo');
-          self.$router.push({ path: '/client/other' });
         }
         }
         // console.log(res);
         // console.log(res);
       });
       });

+ 30 - 2
www/webapp/safety/src/views/Client/Send/index.vue

@@ -1,10 +1,38 @@
 <template>
 <template>
   <div class="send">
   <div class="send">
-    派单
+    <!--<div class="title">派单</div>-->
+    <div v-if="orders && orders.rows">
+      <h-date-picker
+        :start='orders.rows[0].serve_time_start'
+        :end='orders.rows[0].serve_time_end'
+        :period='orders.rows[0].serve_period'
+        @time="setOrder"
+      ></h-date-picker>
+      <!-- {{orders}} -->
+      <!-- <div><span>开始日期</span>{{orders.rows[0].serve_time_start}}</div>
+      <div><span>结束日期</span>{{orders.rows[0].serve_time_end}}</div>
+      <div><span>每周服务日期</span>{{orders.rows[0].serve_period}}</div> -->
+    </div>
   </div>
   </div>
 </template>
 </template>
 <script>
 <script>
+import { mapState } from "vuex";
+import datePickerComponents from "@/components/datePicker.vue";
+
 export default {
 export default {
-  name: "派单"
+  name: "send",
+  computed: {
+    ...mapState({
+      orders: state => state.user.orders
+    })
+  },
+  components: {
+    "h-date-picker": datePickerComponents
+  },
+  methods: {
+    setOrder(time) {
+      console.log(time);
+    }
+  }
 };
 };
 </script>
 </script>

+ 5 - 0
www/webapp/safety/src/views/Client/Upon/index.vue

@@ -3,3 +3,8 @@
     上单
     上单
   </div>
   </div>
 </template>
 </template>
+<script>
+export default {
+  created() {}
+};
+</script>

+ 22 - 19
www/webapp/safety/src/views/Client/index.vue

@@ -15,11 +15,14 @@
         slot="right"
         slot="right"
       />
       />
     </van-nav-bar>
     </van-nav-bar>
-    <transition :name="transitionName">
+    <keep-alive>
+        <router-view class="router view app-view" />
+      </keep-alive>
+    <!-- <transition :name="transitionName">
       <keep-alive>
       <keep-alive>
         <router-view class="router view app-view" />
         <router-view class="router view app-view" />
       </keep-alive>
       </keep-alive>
-    </transition>
+    </transition> -->
     <van-tabbar v-model="active">
     <van-tabbar v-model="active">
       <van-tabbar-item
       <van-tabbar-item
         @click="toPath('/client/send')"
         @click="toPath('/client/send')"
@@ -67,23 +70,23 @@ export default {
     };
     };
   },
   },
   // watch $route 决定使用哪种过渡
   // watch $route 决定使用哪种过渡
-  watch: {
-    $route(to, from) {
-      // 此时假设从index页面跳转到pointList页面
-      // console.log(to); // "/pointList"
-      // console.log(from); // “/index”
-      const routeDeep = [
-        "/client/send",
-        "/client/upon",
-        "/client/mine",
-        "/client/edit"
-      ];
-      const toDepth = routeDeep.indexOf(to.path);
-      const fromDepth = routeDeep.indexOf(from.path);
-      this.transitionName = toDepth > fromDepth ? "fold-left" : "fold-right";
-      // this.transitionName = toDepth > fromDepth ? 'van-slide-left' : 'van-slide-right';
-    }
-  },
+  // watch: {
+  //   $route(to, from) {
+  //     // 此时假设从index页面跳转到pointList页面
+  //     // console.log(to); // "/pointList"
+  //     // console.log(from); // “/index”
+  //     // const routeDeep = [
+  //     //   "/client/send",
+  //     //   "/client/upon",
+  //     //   "/client/mine",
+  //     //   "/client/edit"
+  //     // ];
+  //     // const toDepth = routeDeep.indexOf(to.path);
+  //     // const fromDepth = routeDeep.indexOf(from.path);
+  //     // this.transitionName = toDepth > fromDepth ? "fold-left" : "fold-right";
+  //     // this.transitionName = toDepth > fromDepth ? 'van-slide-left' : 'van-slide-right';
+  //   }
+  // },
   components: {
   components: {
     // eslint-disable-next-line
     // eslint-disable-next-line
     [Tabbar.name]: Tabbar,
     [Tabbar.name]: Tabbar,

+ 41 - 32
www/webapp/safety/src/views/Home/index.vue

@@ -11,7 +11,6 @@
         护工注册
         护工注册
       </div>
       </div>
     </div>
     </div>
-
     <!--<span @click="clear">{{ firstPath }}</span>-->
     <!--<span @click="clear">{{ firstPath }}</span>-->
     <!--<hr>-->
     <!--<hr>-->
     <!--<span @click="clear">{{ firstPath.length }}</span>-->
     <!--<span @click="clear">{{ firstPath.length }}</span>-->
@@ -19,9 +18,9 @@
 </template>
 </template>
 <script>
 <script>
 export default {
 export default {
-  name: 'home',
+  name: "home",
   data() {
   data() {
-    return { active: 0, firstPath: '' };
+    return { active: 0, firstPath: "" };
   },
   },
   mounted() {
   mounted() {
     this.toPath();
     this.toPath();
@@ -31,7 +30,18 @@ export default {
       window.localStorage.clear();
       window.localStorage.clear();
     },
     },
     registered(name) {
     registered(name) {
-      this.$router.push({ path: name });
+      const character = window.Number.parseInt(
+        window.localStorage.getItem("__H5__character__")
+      );
+      if (character === 0) {
+        this.$router.push({ path: "/care/other" });
+      } else if (character === 1) {
+        this.$router.push({ path: "/client/send" });
+      } else if (character === 2) {
+        this.$router.push({ path: name });
+      }
+      this.$store.dispatch("getUserOrders");
+      // this.$router.push({ path: name });
     },
     },
     toPath() {
     toPath() {
       try {
       try {
@@ -41,41 +51,40 @@ export default {
       } catch (e) {
       } catch (e) {
         console.log(e);
         console.log(e);
       }
       }
-    },
-  },
+    }
+  }
 };
 };
 </script>
 </script>
 
 
 <style lang="less" scoped>
 <style lang="less" scoped>
-  .home-wrapper {
-    font-size: 50px;
+.home-wrapper {
+  font-size: 50px;
+  width: 100%;
+  .title {
+    margin-top: 20px;
     width: 100%;
     width: 100%;
-    .title {
-      margin-top: 20px;
-      width: 100%;
+    text-align: center;
+    line-height: 250px;
+    font-size: 35px;
+  }
+  .registered {
+    display: flex;
+    /*flex-direction: row;*/
+    justify-content: space-around;
+    & > div {
+      flex: 0 0 35%;
       text-align: center;
       text-align: center;
-      line-height: 250px;
-      font-size: 35px;
-    }
-    .registered {
-
-      display: flex;
-      /*flex-direction: row;*/
-      justify-content: space-around;
-      & > div {
-        flex: 0 0 35%;
-        text-align: center;
-        font-size: 25px;
-        padding: 10px;
-        color: white;
-        background-color: #0ac6ff;
-        transform: rotate3d(0, 0, 0);
-        transition: all .3s ease-in-out;
-        &:active {
-          /*font-size: 15px;*/
-          background-color: #0ab1e2;
-        }
+      font-size: 25px;
+      padding: 10px;
+      color: white;
+      background-color: #0ac6ff;
+      transform: rotate3d(0, 0, 0);
+      transition: all 0.3s ease-in-out;
+      &:active {
+        /*font-size: 15px;*/
+        background-color: #0ab1e2;
       }
       }
     }
     }
   }
   }
+}
 </style>
 </style>

+ 5 - 0
www/webapp/safety/yarn.lock

@@ -5132,6 +5132,11 @@ mkdirp@0.5.1, mkdirp@0.5.x, mkdirp@^0.5.0, mkdirp@^0.5.1, mkdirp@~0.5.0, mkdirp@
   dependencies:
   dependencies:
     minimist "0.0.8"
     minimist "0.0.8"
 
 
+moment@^2.22.2:
+  version "2.22.2"
+  resolved "https://registry.npmjs.org/moment/-/moment-2.22.2.tgz#3c257f9839fc0e93ff53149632239eb90783ff66"
+  integrity sha1-PCV/mDn8DpP/UxSWMiOeuQeD/2Y=
+
 move-concurrently@^1.0.1:
 move-concurrently@^1.0.1:
   version "1.0.1"
   version "1.0.1"
   resolved "https://registry.npmjs.org/move-concurrently/-/move-concurrently-1.0.1.tgz#be2c005fda32e0b29af1f05d7c4b33214c701f92"
   resolved "https://registry.npmjs.org/move-concurrently/-/move-concurrently-1.0.1.tgz#be2c005fda32e0b29af1f05d7c4b33214c701f92"