Просмотр исходного кода

Merge branch '11/24SAAS' of http://git.dayaedu.com/yonge/dy-admin-manager into 11/24SAAS

lex-xin 3 лет назад
Родитель
Сommit
2a123da9a9

+ 1 - 1
src/App.vue

@@ -1,6 +1,6 @@
 <template>
   <div id="app" v-cloak>
-    <router-view v-if="isRouterAlive" />
+    <router-view v-if="isRouterAlive" v-cloak/>
   </div>
 </template>
 

+ 2 - 0
src/permission.js

@@ -76,6 +76,7 @@ function checkPathUrl(path) {
 
 
 router.beforeEach(async (to, from, next) => {
+
   // from.query = to.query
   // start progress bar
   NProgress.start()
@@ -100,6 +101,7 @@ router.beforeEach(async (to, from, next) => {
         // router.addRoutes(accessRoutes)
           next()
       } else {
+        console.log('跳转调用获取用户信息方法')
         try {
           // 异步获取用户信息
           await store.dispatch('user/getInfo')

+ 3 - 1
src/store/getters.js

@@ -22,6 +22,8 @@ const getters = {
   reactClassStudentList:state=>state.reactClassStudent.classList ,
   buildIndex:state=>state.buildTeam.buildIndex,
   draftIndex:state=>state.buildTeam.draftIndex,
-  views:state=>state.tagsView.visitedViews
+  views:state=>state.tagsView.visitedViews,
+  loadCount:state=>state.app.loadCount,
+  isLoading:state=>state.app.isLoading
 }
 export default getters

+ 76 - 16
src/store/modules/app.js

@@ -1,8 +1,14 @@
 /* eslint-disable no-empty */
 import Cookies from 'js-cookie'
-import { hasIndexErrData } from '@/views/main/api'
-import { permission } from '@/utils/directivePage'
-import { queryTenantInfoSumm } from '@/views/productService/api'
+import {
+  hasIndexErrData
+} from '@/views/main/api'
+import {
+  permission
+} from '@/utils/directivePage'
+import {
+  queryTenantInfoSumm
+} from '@/views/productService/api'
 import dayjs from 'dayjs'
 
 const state = {
@@ -17,7 +23,8 @@ const state = {
     musicPatrol: false,
     studentInfo: false,
     teacherInfo: false,
-    attendanceServe:false
+    attendanceServe: false,
+
   },
   tenantInfo: {
     serverName: null,
@@ -27,10 +34,21 @@ const state = {
     expiryDateEnd: null,
     validRemaining: 0, // 剩余有效期
     balance: 0
-  }
+  },
+  loadCount: 0,
+  isLoading: false
 }
 
 const mutations = {
+  SET_LOAD_STATUS: (state, flag) => {
+    state.isLoading = flag
+  },
+  RESET_LOAD_COUNT: state => {
+    state.loadCount = 0
+  },
+  SET_LOAD_COUNT: (state, count) => {
+    state.loadCount += count
+  },
   TOGGLE_SIDEBAR: state => {
     // state.sidebar.opened = !state.sidebar.opened
     state.sidebar.opened = true;
@@ -50,7 +68,12 @@ const mutations = {
     state.device = device
   },
   COMMIT_DOT_STATUS: (state, status) => {
-    const { musicPatrol, studentInfo, teacherInfo,attendanceServe } = status
+    const {
+      musicPatrol,
+      studentInfo,
+      teacherInfo,
+      attendanceServe
+    } = status
     state.status = {
       ...status,
       indexErrData: musicPatrol || studentInfo || teacherInfo || attendanceServe
@@ -58,8 +81,11 @@ const mutations = {
     toggleDot(state.status)
   },
   TEANAT_SETTING: (state, status) => {
-    const { expiryDateEnd, ...res } = status
-    state.tenantInfo = { 
+    const {
+      expiryDateEnd,
+      ...res
+    } = status
+    state.tenantInfo = {
       ...res,
       // expiryDate: expiryDate ? dayjs(expiryDate).format('YYYY-MM-DD') : null,
       expiryDateEnd: expiryDateEnd ? dayjs(expiryDateEnd).format('YYYY-MM-DD') : null
@@ -68,8 +94,11 @@ const mutations = {
 }
 
 const toggleDot = status => {
-  const { indexErrData, remindMatterData } = status
-  const dotStatus =  indexErrData || remindMatterData
+  const {
+    indexErrData,
+    remindMatterData
+  } = status
+  const dotStatus = indexErrData || remindMatterData
   setTimeout(() => {
     // const el = document.querySelector('.menu-wrapper a[href="#/main/main"] span')
     const el = document.querySelector('.el-scrollbar__view a.indexlayout-top-menu-li[href="#/main"] span')
@@ -84,16 +113,44 @@ const toggleDot = status => {
 }
 
 const actions = {
-  toggleSideBar ({ commit }) {
+  setLoadStatus({
+    commit
+  }, flag) {
+
+    commit('SET_LOAD_STATUS', flag)
+  },
+  // setLoadStatus
+  resetLoadCount({
+    commit
+  }) {
+    commit('RESET_LOAD_COUNT')
+  },
+  setLoadCount({
+    commit
+  }, count) {
+    commit('SET_LOAD_COUNT', count)
+  },
+  toggleSideBar({
+    commit
+  }) {
     commit('TOGGLE_SIDEBAR')
   },
-  closeSideBar ({ commit }, { withoutAnimation }) {
+  closeSideBar({
+    commit
+  }, {
+    withoutAnimation
+  }) {
     commit('CLOSE_SIDEBAR', withoutAnimation)
   },
-  toggleDevice ({ commit }, device) {
+  toggleDevice({
+    commit
+  }, device) {
     commit('TOGGLE_DEVICE', device)
   },
-  async setDotStatus({ commit }) {
+
+  async setDotStatus({
+    commit
+  }) {
     if (permission('hasIndexErrData')) {
       try {
         const res = await hasIndexErrData()
@@ -101,14 +158,17 @@ const actions = {
       } catch (error) {}
     }
   },
-  async setServiceInfo({ commit }) {
+  async setServiceInfo({
+    commit
+  }) {
     if (permission('tenantInfo/queryTenantInfoSumm')) {
       try {
         const res = await queryTenantInfoSumm()
         commit('TEANAT_SETTING', res.data)
       } catch (error) {}
     }
-  }
+  },
+
 }
 
 export default {

+ 5 - 4
src/store/modules/user.js

@@ -95,9 +95,9 @@ const actions = {
     commit('SET_AVATAR',userName)
   },
   // user login
-  login ({ commit }, userInfo) {
+ async login ({ commit }, userInfo) {
     const { username, password } = userInfo
-    return new Promise((resolve, reject) => {
+    return await new Promise((resolve, reject) => {
       //qs.stringify({ username: username.trim(), password: password, clientId: 'app', clientSecret: 'app' })
       // { username: username.trim(), password: password }
       login({ username: username.trim(), password: password, clientId: 'system', clientSecret: 'system' }).then(response => {
@@ -113,12 +113,13 @@ const actions = {
         }
       }).catch(error => {
         reject(error)
+        console.log('登录错误',error)
       })
     })
   },
   // get 获取用户信息
-  getInfo ({ commit, state }) {
-    return new Promise((resolve, reject) => {
+ async getInfo ({ commit, state }) {
+    return await new Promise((resolve, reject) => {
       getInfo(state.token).then(async (response) => {
         if (response.code == 200) {
           const data = response

+ 16 - 5
src/utils/loading.js

@@ -1,12 +1,23 @@
 import { Loading } from 'element-ui'
-let loading        //定义loading变量
+let loading    //定义loading变量
+import Vue from 'vue'
+// function startLoading () {    //使用Element loading-start 方法
+//   loading = Loading.service({
+//     lock: true,
+//     fullscreen: true,
+//     text: '加载中……',
+//     background: 'rgba(0, 0, 0, 0.7)',
+//     spinner: 'el-icon-loading',
+//   })
+// }
 
 function startLoading () {    //使用Element loading-start 方法
-  loading = Loading.service({
+  loading =  Vue.prototype.$loading({
     lock: true,
     fullscreen: true,
     text: '加载中……',
-    background: 'rgba(0, 0, 0, 0.7)'
+    background: 'rgba(0, 0, 0, 0.7)',
+    spinner: 'el-icon-loading',
   })
 }
 function endLoading () {
@@ -16,5 +27,5 @@ function endLoading () {
 
 export default {
     startLoading,
-    endLoading
-}
+    endLoading,
+}

+ 18 - 8
src/utils/request-loading.js

@@ -1,19 +1,29 @@
 import load from '@/utils/loading'
-let times = 0
+// isLoading
 
-export function showFullScreenLoading () {
-  if (times === 0) {
+// let times = store.getters.loadCount;
+
+export async function showFullScreenLoading(store) {
+
+  if (store.getters.loadCount === 0&&!store.getters.isLoading) {
+    await store.dispatch('app/setLoadCount', 1)
+    await store.dispatch('app/setLoadStatus',true)
+    // console.log(store.getters.isLoading,store.getters,'打开loding')
     load.startLoading()
+
+  } else {
+    await store.dispatch('app/setLoadCount', 1)
   }
-  times++
+
 
 }
 
-export function tryHideFullScreenLoading () {
-  times--
-  if (times <= 0) {
+export async function tryHideFullScreenLoading(store) {
+  await store.dispatch('app/setLoadCount', -1)
+  if (store.getters.loadCount <= 0&&store.getters.isLoading) {
     load.endLoading();
-    times = 0
+    await store.dispatch('app/resetLoadCount')
+    await  store.dispatch('app/setLoadStatus',false)
   }
 
 }

+ 12 - 10
src/utils/request.js

@@ -70,9 +70,9 @@ const service = axios.create({
 // { fullscreen: true, text: '努力加载中', spinner: 'el-icon-loading' }
 // request interceptor
 service.interceptors.request.use(
-  config => {
+ async config => {
     // do something before request is sent
-    showFullScreenLoading()
+  await  showFullScreenLoading(store)
     if (store.getters.token) {
       // let each request carry token
       // ['X-Token'] is a custom headers key
@@ -92,7 +92,6 @@ service.interceptors.request.use(
   },
   error => {
     // do something with request error
-    tryHideFullScreenLoading()
     return Promise.reject(error)
 
   }
@@ -100,9 +99,12 @@ service.interceptors.request.use(
 
 // response interceptor
 service.interceptors.response.use(
-  res => {
+ async res => {
     //res.code !== 200
+  await tryHideFullScreenLoading(store)
     if (res.data) {
+
+
       let data = JSON.parse(JSON.stringify(res.data))
       // 50008: Illegal token; 50012: Other clients logged in; 50014: Token expired;
       if (data.code == 401 || data.code == 403) {
@@ -113,7 +115,7 @@ service.interceptors.response.use(
         // })
         vue.$message.error(`登录过期,请重新登录!`)
         setTimeout(() => {
-          tryHideFullScreenLoading()
+
           store.dispatch('user/resetToken').then(() => {
             location.reload()
           })
@@ -132,26 +134,26 @@ service.interceptors.response.use(
         let str = data.msg || `请求失败code码为${data.code}`
 
         vue.$message.error(str)
-        tryHideFullScreenLoading()
+
         return Promise.reject(new Error(data.msg || 'Error'))
       } else {
-        tryHideFullScreenLoading()
+
         return data
 
       }
     } else {
 
-      tryHideFullScreenLoading()
+
       return Promise.reject()
     }
   },
-  error => {
+ async error => {
     if (error.message == 'Network Error') {
       vue.$message.error('网络异常,请检查网络连接')
     } else {
       vue.$message.error(error.message)
     }
-    tryHideFullScreenLoading()
+  await  tryHideFullScreenLoading(store)
     return Promise.reject(error)
   }
 )

+ 14 - 14
src/utils/request2.js

@@ -72,12 +72,13 @@ const service = axios.create({
 // { fullscreen: true, text: '努力加载中', spinner: 'el-icon-loading' }
 // request interceptor
 service.interceptors.request.use(
-  config => {
+ async config => {
+  await  showFullScreenLoading(store)
     // do something before request is sent
-    let hideLoading = config.hideLoading || false
-    if(!hideLoading) {
-      showFullScreenLoading()
-    }
+    // let hideLoading = config.hideLoading || false
+    // if(!hideLoading) {
+
+    // }
     if (store.getters.token) {
       // let each request carry token
       // ['X-Token'] is a custom headers key
@@ -101,9 +102,9 @@ service.interceptors.request.use(
     config.params = noCleanDeep ? config.data : cleanDeep(config.params)
     return config
   },
-  error => {
+async  error => {
     // do something with request error
-    tryHideFullScreenLoading()
+  await  tryHideFullScreenLoading(store)
     return Promise.reject(error)
 
   }
@@ -111,8 +112,9 @@ service.interceptors.request.use(
 
 // response interceptor
 service.interceptors.response.use(
-  res => {
+async  res => {
     //res.code !== 200
+  await  tryHideFullScreenLoading(store)
     if (res.data) {
       let data = JSON.parse(JSON.stringify(res.data))
       // 50008: Illegal token; 50012: Other clients logged in; 50014: Token expired;
@@ -124,7 +126,7 @@ service.interceptors.response.use(
         // })
         vue.$message.error(`登录过期,请重新登录!`)
         setTimeout(() => {
-          tryHideFullScreenLoading()
+
           store.dispatch('user/resetToken').then(() => {
             location.reload()
           })
@@ -144,26 +146,24 @@ service.interceptors.response.use(
         if (res.config.hint !== true) {
           vue.$message.error(str)
         }
-        tryHideFullScreenLoading()
+
         return Promise.reject(data)
       } else {
-        tryHideFullScreenLoading()
         return data
 
       }
     } else {
 
-      tryHideFullScreenLoading()
       return Promise.reject()
     }
   },
-  error => {
+ async error => {
     if (error.message == 'Network Error') {
       vue.$message.error('网络异常,请检查网络连接')
     } else {
       vue.$message.error(error.message)
     }
-    tryHideFullScreenLoading()
+   await tryHideFullScreenLoading(store)
     return Promise.reject(error)
   }
 )

+ 4 - 3
src/utils/setTheme.js

@@ -1,4 +1,5 @@
 // 设置系统主题和主题色
+import store from '@/store'
 import { showFullScreenLoading, tryHideFullScreenLoading } from './request-loading'
 const version = require('element-ui/package.json').version // element-ui version from node_modules
 const ORIGINAL_THEME = '#409EFF' // default color
@@ -59,7 +60,7 @@ export const setTheme = async (params) => { // 是否显示加载样式
     const originalCluster = getThemeCluster(oldVal.replace('#', ''))
 
     if(isLoading) {
-      showFullScreenLoading()
+      showFullScreenLoading(store)
     }
 
     const getHandler = (variable, id) => {
@@ -119,7 +120,7 @@ export const setTheme = async (params) => { // 是否显示加载样式
     sessionStorage.setItem('tenantConfig', JSON.stringify(tenantConfig))
   }
   if(isLoading) {
-    tryHideFullScreenLoading()
+    tryHideFullScreenLoading(store)
   }
 }
 
@@ -188,4 +189,4 @@ function getThemeCluster(theme) {
   }
   clusters.push(shadeColor(theme, 0.1))
   return clusters
-}
+}

+ 4 - 4
src/views/businessManager/shopManager/shopList.vue

@@ -87,7 +87,7 @@
             ></el-option>
           </el-select>
         </el-form-item> -->
-        <el-form-item prop="studentShowOrganId">
+        <!-- <el-form-item prop="studentShowOrganId">
           <el-select
             v-model.trim="searchForm.studentShowOrganId"
             clearable
@@ -100,12 +100,12 @@
               :value="item.id.toString()"
             ></el-option>
           </el-select>
-        </el-form-item>
+        </el-form-item> -->
         <el-form-item prop="educationShowOrganId">
           <el-select
             v-model.trim="searchForm.educationShowOrganId"
             clearable
-            placeholder="管理端可见分部"
+            placeholder="管理端APP可售分部"
           >
             <el-option
               v-for="item in selects.branchs"
@@ -119,7 +119,7 @@
           <el-select
             v-model.trim="searchForm.courseFeeShowOrganId"
             clearable
-            placeholder="课程&AMR可见分部"
+            placeholder="课程收费团可售分部"
           >
             <el-option
               v-for="item in selects.branchs"

+ 19 - 9
src/views/courseRulersManager/components/offlineTeamRules.vue

@@ -3,7 +3,7 @@
     <div class="m-core">
       <el-form :inline="true" :model="form" ref="form">
         <el-alert
-          style="margin: 20px 0"
+          style="margin: 20px 0 40px"
           title="线下课考勤定位范围"
           :closable="false"
           type="info"
@@ -30,6 +30,7 @@
             以内。
           </el-form-item>
         </el-row>
+            <el-divider></el-divider>
         <p class="subtitle">签到签退定位异常:</p>
         <el-row>
           <el-form-item
@@ -86,7 +87,7 @@
           </el-form-item>
         </el-row>
         <el-alert
-          style="margin: 20px 0"
+          style="margin: 40px 0 "
           title="乐团签到规则"
           :closable="false"
           type="info"
@@ -152,6 +153,7 @@
           }}</span
           >可以进行签到。
         </p>
+            <el-divider></el-divider>
         <p class="subtitle" v-if="form['140']">异常签到:</p>
         <el-row v-if="form['140']">
           <el-form-item
@@ -195,6 +197,7 @@
           }}</span
           >。
         </p>
+            <el-divider></el-divider>
         <p class="subtitle">迟到:</p>
         <el-row>
           <el-form-item
@@ -255,6 +258,7 @@
           }}</span
           >。
         </p>
+            <el-divider></el-divider>
         <p class="subtitle">旷课:</p>
         <el-row>
           <el-form-item prop="143">
@@ -302,6 +306,7 @@
           }}</span
           >以后。
         </p>
+            <el-divider></el-divider>
         <p class="subtitle">未签到:</p>
         <el-row>
           <el-form-item
@@ -331,7 +336,7 @@
           </el-form-item>
         </el-row>
         <el-alert
-          style="margin: 10px 0"
+          style="margin: 40px 0 "
           title="乐团签退规则"
           :closable="false"
           type="info"
@@ -372,6 +377,7 @@
           }}</span
           >。
         </p>
+            <el-divider></el-divider>
         <p class="subtitle">异常签退:</p>
         <el-row>
           课程结束前
@@ -414,6 +420,7 @@
           <span style="color: #f56c6c; margin-right: 4px">{{ "12:59:59" }}</span
           >。
         </p>
+            <el-divider></el-divider>
         <p class="subtitle">早退:</p>
         <el-row>
           <el-form-item prop="151">
@@ -458,6 +465,7 @@
           }}</span
           >之前。
         </p>
+         <el-divider></el-divider>
         <p class="subtitle">未签退:</p>
         <el-row>
           <el-form-item
@@ -486,6 +494,7 @@
             >。
           </el-form-item>
         </el-row>
+            <el-divider></el-divider>
         <p class="subtitle">签退提醒:</p>
         <el-row>
           <el-form-item
@@ -506,7 +515,7 @@
           </el-form-item>
         </el-row>
         <el-alert
-          style="margin: 10px 0"
+          style="margin: 40px 0 "
           title="乐团线下连堂课"
           :closable="false"
           type="info"
@@ -548,7 +557,7 @@
           </el-form-item>
         </el-row>
         <el-alert
-          style="margin: 10px 0"
+          style="margin: 40px 0 "
           title="VIP课点名规则"
           :closable="false"
           type="info"
@@ -589,6 +598,7 @@
             >。
           </el-form-item>
         </el-row>
+            <el-divider></el-divider>
         <p class="subtitle">点名GPS定位:</p>
         <el-row>
           <el-form-item
@@ -647,7 +657,7 @@
         </el-row>
 
         <el-alert
-          style="margin: 10px 0"
+          style="margin: 40px 0 "
           title="试用期课酬"
           :closable="false"
           type="info"
@@ -667,13 +677,13 @@
           </el-form-item>
         </el-row>
         <el-alert
-          style="margin: 10px 0"
+          style="margin: 40px 0 "
           title="考勤申诉规则"
           :closable="false"
           type="info"
         />
-
-        <p class="subtitle">考勤申诉:课程结束后,如果考勤异常,老师可以在APP端进行考勤申诉,但已结算的课程无法再进行申诉,系统常规会在次月6号进行结算。</p>
+        <p class="subtitle">考勤申诉</p>
+        <p>考勤申诉:课程结束后,如果考勤异常,老师可以在APP端进行考勤申诉,但已结算的课程无法再进行申诉,系统常规会在次月6号进行结算。</p>
         <el-row>
           <el-form-item
             prop="184"

+ 7 - 5
src/views/courseRulersManager/components/onlineCloudRules.vue

@@ -3,7 +3,7 @@
     <div class="m-core">
       <el-form :inline="true" :model="form" ref="form">
         <el-alert
-          style="margin: 10px 0"
+          style="margin: 20px 0 40px"
           title="线上课考勤规则"
           :closable="false"
           type="info"
@@ -97,6 +97,7 @@
           }}</span
           >为迟到时间范围。
         </p>
+          <el-divider></el-divider>
         <p class="subtitle">旷课:</p>
         <el-row>
           <el-form-item prop="162">
@@ -139,7 +140,7 @@
           }}</span>
           以后进入云教室为旷课。
         </p>
-
+  <el-divider></el-divider>
         <p class="subtitle">未签到:</p>
         <el-row>
           <el-form-item
@@ -168,7 +169,7 @@
             </el-input>。
           </el-form-item>
         </el-row>
-
+      <el-divider></el-divider>
         <p class="subtitle">异常签退:</p>
         <el-row>
           <el-form-item
@@ -231,7 +232,7 @@
           }}</span>
           为异常签退时间范围。
         </p>
-
+  <el-divider></el-divider>
         <p class="subtitle">早退:</p>
         <el-row>
           <el-form-item prop="173">
@@ -276,6 +277,7 @@
           }}</span
           >之前退出云教室为早退。
         </p>
+          <el-divider></el-divider>
         <p class="subtitle">未签退:</p>
         <el-row>
           <el-form-item
@@ -306,7 +308,7 @@
         </el-row>
 
         <el-alert
-          style="margin: 10px 0"
+          style="margin: 40px 0"
           title="线上课连堂课"
           :closable="false"
           type="info"

+ 27 - 3
src/views/courseRulersManager/index.scss

@@ -12,18 +12,36 @@ p,
   padding: 0 24px;
 }
 
+// 这个标题要改
 .subtitle {
-  font-size: 14px;
+  font-size: 18px;
+  margin-bottom: 20px;
+  position: relative;
+  font-weight: 600;
+  margin-left: 22px;
+  padding-left: 14px;
 
+  &::after {
+    position: absolute;
+    width: 3px;
+    height: 16px;
+    background: #00A79D;
+    border-radius: 2px;
+    left: 0;
+    top: 2px;
+    content:''
+  }
 }
 
-.chiose{
+.chiose {
   /deep/.el-input-group__append {
     padding: 0;
   }
+
   .append {
     margin: 0;
-    width: 70px!important;
+    width: 70px !important;
+
     /deep/.el-input__inner {
       height: 34px;
       line-height: 34px;
@@ -37,6 +55,7 @@ p,
 .saveBtn {
   margin-left: 24px;
 }
+
 /deep/.el-form-item__content {
   display: flex;
   flex-direction: row;
@@ -46,6 +65,11 @@ p,
 /deep/.el-form-item {
   margin-bottom: 0px;
 }
+
 .marginLR5 {
   margin: 0 5px;
 }
+
+/deep/.el-divider{
+  margin-left: 24px;
+}

+ 1 - 1
src/views/login/index.vue

@@ -126,7 +126,7 @@ export default {
     },
     handleLogin () {
       // 清除所有savekey
- const s = new Searchs();
+      const s = new Searchs();
        s.removeAll()
 
       // 判断是否点击了记住密码 =>  存储密码

+ 3 - 3
src/views/resetTeaming/components/payInfoDetail.vue

@@ -407,7 +407,7 @@ export default {
               this.form.musicGroupOrganizationCourseSettingId =
                 res.data?.calender?.musicGroupOrganizationCourseSettingId;
             } else {
-              this.form.leixing = "2";
+              this.form.leixing = "1";
             }
             this.$set(this.form, "paymentDate", [
               res.data?.calender?.startPaymentDate,
@@ -529,7 +529,7 @@ export default {
         if (this.charges.length <= 0) {
           this.submitList.push("teamCourseType");
         }else{
-          if(this.form.leixing == 1){
+          if(this.form.leixing == 1&&this.teamCourse){
             this.$set(this.form,'musicGroupOrganizationCourseSettingId',this.charges[0].id)
           }
         }
@@ -810,7 +810,7 @@ export default {
     teamCourse(val) {
       if (!val) {
         this.$set(this.form, "eclass", [{}]);
-        this.$set(this.form, "leixing", "2");
+        this.$set(this.form, "leixing", "1");
       }
     },
     member(val) {