家长维护页面调优
This commit is contained in:
parent
6ad62d8fc5
commit
c938f79f87
ruoyi-ui/src
ruoyi/src/main
@ -1,97 +1,97 @@
|
||||
/*
|
||||
* @Author: your name
|
||||
* @Date: 2020-09-01 20:25:37
|
||||
* @LastEditTime: 2020-09-01 20:27:37
|
||||
* @LastEditors: Please set LastEditors
|
||||
* @Description: In User Settings Edit
|
||||
* @FilePath: \ruoyi-ui\src\permission.js
|
||||
*/
|
||||
import router from './router'
|
||||
import store from './store'
|
||||
import {
|
||||
Message
|
||||
} from 'element-ui'
|
||||
import NProgress from 'nprogress'
|
||||
import 'nprogress/nprogress.css'
|
||||
import {
|
||||
getToken
|
||||
} from '@/utils/auth'
|
||||
|
||||
NProgress.configure({
|
||||
showSpinner: false
|
||||
})
|
||||
|
||||
//const whiteList = ['/login', '/auth-redirect', '/bind', '/register']
|
||||
const whiteList = ['/login', '/experience/apply/', '/experience/result/', '/experience/content/']
|
||||
|
||||
router.beforeEach((to, from, next) => {
|
||||
NProgress.start()
|
||||
if (getToken()) {
|
||||
/* has token*/
|
||||
if (to.path === '/login') {
|
||||
next({
|
||||
path: '/'
|
||||
})
|
||||
NProgress.done()
|
||||
} else {
|
||||
if (store.getters.roles.length === 0) {
|
||||
// 判断当前用户是否已拉取完user_info信息
|
||||
store.dispatch('GetInfo').then(res => {
|
||||
// 拉取user_info
|
||||
const roles = res.roles
|
||||
store.dispatch('GenerateRoutes', {
|
||||
roles
|
||||
}).then(accessRoutes => {
|
||||
// 测试 默认静态页面
|
||||
// store.dispatch('permission/generateRoutes', { roles }).then(accessRoutes => {
|
||||
// 根据roles权限生成可访问的路由表
|
||||
router.addRoutes(accessRoutes) // 动态添加可访问路由表
|
||||
next({
|
||||
...to,
|
||||
replace: true
|
||||
}) // hack方法 确保addRoutes已完成
|
||||
})
|
||||
})
|
||||
.catch(err => {
|
||||
store.dispatch('FedLogOut').then(() => {
|
||||
Message.error(err)
|
||||
next({
|
||||
path: '/'
|
||||
})
|
||||
})
|
||||
})
|
||||
} else {
|
||||
next()
|
||||
// 没有动态改变权限的需求可直接next() 删除下方权限判断 ↓
|
||||
// if (hasPermission(store.getters.roles, to.meta.roles)) {
|
||||
// next()
|
||||
// } else {
|
||||
// next({ path: '/401', replace: true, query: { noGoBack: true }})
|
||||
// }
|
||||
// 可删 ↑
|
||||
}
|
||||
}
|
||||
} else {
|
||||
// 没有token
|
||||
// if (whiteList.indexOf(to.path) !== -1 ||to.path.indexOf("/experience/apply/") != -1||to.path.indexOf("/experience/result/") != -1||to.path.indexOf("/experience/content/") != -1||to.path.indexOf("/activity") != -1||to.path.indexOf("/week") != -1) {
|
||||
let whiteBool = false;
|
||||
for (let path of whiteList) {
|
||||
// console.log(to.path.indexOf(path) > -1);
|
||||
if (to.path.indexOf(path) > -1) {
|
||||
whiteBool = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (whiteBool) {
|
||||
// 在免登录白名单,直接进入
|
||||
next()
|
||||
} else {
|
||||
next(`/login?redirect=${to.path}`) // 否则全部重定向到登录页
|
||||
NProgress.done()
|
||||
}
|
||||
}
|
||||
})
|
||||
|
||||
router.afterEach(() => {
|
||||
NProgress.done()
|
||||
})
|
||||
/*
|
||||
* @Author: your name
|
||||
* @Date: 2020-09-01 20:25:37
|
||||
* @LastEditTime: 2020-09-01 20:27:37
|
||||
* @LastEditors: Please set LastEditors
|
||||
* @Description: In User Settings Edit
|
||||
* @FilePath: \ruoyi-ui\src\permission.js
|
||||
*/
|
||||
import router from './router'
|
||||
import store from './store'
|
||||
import {
|
||||
Message
|
||||
} from 'element-ui'
|
||||
import NProgress from 'nprogress'
|
||||
import 'nprogress/nprogress.css'
|
||||
import {
|
||||
getToken
|
||||
} from '@/utils/auth'
|
||||
|
||||
NProgress.configure({
|
||||
showSpinner: false
|
||||
})
|
||||
|
||||
//const whiteList = ['/login', '/auth-redirect', '/bind', '/register']
|
||||
const whiteList = ['/login', '/experience/apply/', '/experience/result/', '/experience/content/', '/benyi_child/child_preserve']
|
||||
|
||||
router.beforeEach((to, from, next) => {
|
||||
NProgress.start()
|
||||
if (getToken()) {
|
||||
/* has token*/
|
||||
if (to.path === '/login') {
|
||||
next({
|
||||
path: '/'
|
||||
})
|
||||
NProgress.done()
|
||||
} else {
|
||||
if (store.getters.roles.length === 0) {
|
||||
// 判断当前用户是否已拉取完user_info信息
|
||||
store.dispatch('GetInfo').then(res => {
|
||||
// 拉取user_info
|
||||
const roles = res.roles
|
||||
store.dispatch('GenerateRoutes', {
|
||||
roles
|
||||
}).then(accessRoutes => {
|
||||
// 测试 默认静态页面
|
||||
// store.dispatch('permission/generateRoutes', { roles }).then(accessRoutes => {
|
||||
// 根据roles权限生成可访问的路由表
|
||||
router.addRoutes(accessRoutes) // 动态添加可访问路由表
|
||||
next({
|
||||
...to,
|
||||
replace: true
|
||||
}) // hack方法 确保addRoutes已完成
|
||||
})
|
||||
})
|
||||
.catch(err => {
|
||||
store.dispatch('FedLogOut').then(() => {
|
||||
Message.error(err)
|
||||
next({
|
||||
path: '/'
|
||||
})
|
||||
})
|
||||
})
|
||||
} else {
|
||||
next()
|
||||
// 没有动态改变权限的需求可直接next() 删除下方权限判断 ↓
|
||||
// if (hasPermission(store.getters.roles, to.meta.roles)) {
|
||||
// next()
|
||||
// } else {
|
||||
// next({ path: '/401', replace: true, query: { noGoBack: true }})
|
||||
// }
|
||||
// 可删 ↑
|
||||
}
|
||||
}
|
||||
} else {
|
||||
// 没有token
|
||||
// if (whiteList.indexOf(to.path) !== -1 ||to.path.indexOf("/experience/apply/") != -1||to.path.indexOf("/experience/result/") != -1||to.path.indexOf("/experience/content/") != -1||to.path.indexOf("/activity") != -1||to.path.indexOf("/week") != -1) {
|
||||
let whiteBool = false;
|
||||
for (let path of whiteList) {
|
||||
// console.log(to.path.indexOf(path) > -1);
|
||||
if (to.path.indexOf(path) > -1) {
|
||||
whiteBool = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (whiteBool) {
|
||||
// 在免登录白名单,直接进入
|
||||
next()
|
||||
} else {
|
||||
next(`/login?redirect=${to.path}`) // 否则全部重定向到登录页
|
||||
NProgress.done()
|
||||
}
|
||||
}
|
||||
})
|
||||
|
||||
router.afterEach(() => {
|
||||
NProgress.done()
|
||||
})
|
@ -89,6 +89,18 @@ export const constantRoutes = [{
|
||||
import ('@/views/benyi/planweek/table'),
|
||||
hidden: true
|
||||
},
|
||||
{
|
||||
path: '/benyi_child/child_preserve',
|
||||
component: () =>
|
||||
import ('@/views/benyi/child_preserve/index'),
|
||||
hidden: true,
|
||||
children: [{
|
||||
path: '/benyi_child/child_preserve',
|
||||
component: () =>
|
||||
import ('@/views/benyi/child_preserve/index'),
|
||||
hidden: true
|
||||
}, ]
|
||||
},
|
||||
{
|
||||
path: '/experience/apply/:id(\\d+)',
|
||||
component: () =>
|
||||
|
@ -868,12 +868,9 @@ export default {
|
||||
//console.log(domain);
|
||||
//this.user = response.data;
|
||||
this.inviteCode =
|
||||
response.data.dept.deptName +
|
||||
"幼儿信息维护链接" +
|
||||
"http://" +
|
||||
domain +
|
||||
"/child_preserve/index/" +
|
||||
response.data.dept.deptId;
|
||||
"/benyi_child/child_preserve";
|
||||
});
|
||||
},
|
||||
// 给家长发送链接
|
||||
|
@ -1,5 +1,6 @@
|
||||
<template>
|
||||
<div class="result-container">
|
||||
<h2 class="title">请输入幼儿姓名和手机号进行查询:</h2>
|
||||
<el-form :model="queryParams" ref="queryForm" :inline="true" label-width="68px">
|
||||
<el-form-item label="幼儿姓名" prop="name">
|
||||
<el-input v-model="queryParams.name" placeholder="请输入幼儿姓名" clearable size="small" />
|
||||
@ -16,142 +17,288 @@
|
||||
<h2 class="title">幼儿信息查询与维护</h2>
|
||||
<div class="result-form">
|
||||
<p class="form-title">提交核对幼儿信息</p>
|
||||
<el-form class="form" ref="form" :model="form" label-width="110px">
|
||||
<el-form-item label="父亲姓名" prop="father">
|
||||
<el-input v-model="form.father" placeholder="请输入父亲姓名" @input="onInput()" />
|
||||
</el-form-item>
|
||||
<el-form-item label="母亲姓名" prop="mother">
|
||||
<el-input v-model="form.mother" placeholder="请输入母亲姓名" @input="onInput()" />
|
||||
</el-form-item>
|
||||
<el-form-item label="家长联系方式" prop="phone">
|
||||
<el-input v-model="form.phone" placeholder="请输入联系方式" :disabled="hide" />
|
||||
</el-form-item>
|
||||
<el-form-item label="幼儿姓名" prop="name">
|
||||
<el-input v-model="form.name" placeholder="请输入幼儿姓名" :disabled="hide" />
|
||||
</el-form-item>
|
||||
<el-form-item label="英文名" prop="enName">
|
||||
<el-input v-model="form.enName" placeholder="请输入联系方式" />
|
||||
</el-form-item>
|
||||
<el-form-item label="小名" prop="infantName">
|
||||
<el-input v-model="form.infantName" placeholder="请输入联系方式" />
|
||||
</el-form-item>
|
||||
<el-form-item label="性别" prop="xb">
|
||||
<el-select v-model="form.xb" placeholder="请选择性别">
|
||||
<el-option
|
||||
v-for="dict in sexOptions"
|
||||
:key="dict.dictValue"
|
||||
:label="dict.dictLabel"
|
||||
:value="dict.dictValue"
|
||||
></el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="民族" prop="mz">
|
||||
<el-select v-model="form.mz" placeholder="请选择民族">
|
||||
<el-option
|
||||
v-for="dict in mzOptions"
|
||||
:key="dict.dictValue"
|
||||
:label="dict.dictLabel"
|
||||
:value="dict.dictValue"
|
||||
></el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="证件号码" prop="zjhm">
|
||||
<el-input v-model="form.zjhm" placeholder="请输入证件号码" />
|
||||
</el-form-item>
|
||||
<el-form-item label="幼儿出生日期" prop="csrq">
|
||||
<el-date-picker
|
||||
clearable
|
||||
size="small"
|
||||
v-model="form.csrq"
|
||||
type="date"
|
||||
value-format="yyyy-MM-dd"
|
||||
placeholder="选择幼儿出生日期"
|
||||
></el-date-picker>
|
||||
</el-form-item>
|
||||
<el-form-item label="出生地" prop="birthProvincename">
|
||||
<v-distpicker
|
||||
v-model="form.birthProvincename"
|
||||
:placeholders="placeholders"
|
||||
:province="diglogForm.province"
|
||||
:city="diglogForm.city"
|
||||
:area="diglogForm.area"
|
||||
@selected="onSelected_brith"
|
||||
></v-distpicker>
|
||||
<el-input v-model="form.birthProvince" v-if="false" />
|
||||
<el-input v-model="form.birthCity" v-if="false" />
|
||||
<el-input v-model="form.birthArea" v-if="false" />
|
||||
</el-form-item>
|
||||
<el-form-item label="户口地" prop="registeredProvincename">
|
||||
<v-distpicker
|
||||
v-model="form.registeredProvincename"
|
||||
:placeholders="placeholders"
|
||||
:province="diglogForm1.province"
|
||||
:city="diglogForm1.city"
|
||||
:area="diglogForm1.area"
|
||||
@selected="onSelected_registered"
|
||||
></v-distpicker>
|
||||
<el-input v-model="form.registeredProvince" v-if="false" />
|
||||
<el-input v-model="form.registeredCity" v-if="false" />
|
||||
<el-input v-model="form.registeredArea" v-if="false" />
|
||||
</el-form-item>
|
||||
<el-form-item label="现住址" prop="addrProvincename">
|
||||
<v-distpicker
|
||||
v-model="form.addrProvincename"
|
||||
:placeholders="placeholders"
|
||||
:province="diglogForm2.province"
|
||||
:city="diglogForm2.city"
|
||||
:area="diglogForm2.area"
|
||||
@selected="onSelected_addr"
|
||||
></v-distpicker>
|
||||
<el-input v-model="form.addrProvince" v-if="false" />
|
||||
<el-input v-model="form.addrCity" v-if="false" />
|
||||
<el-input v-model="form.addrArea" v-if="false" />
|
||||
</el-form-item>
|
||||
<el-form-item label="详细地址" prop="addrDetail">
|
||||
<el-input v-model="form.addrDetail" placeholder="请输入详细地址" />
|
||||
</el-form-item>
|
||||
<el-form-item label="曾就读园" prop="everSchool">
|
||||
<el-input v-model="form.everSchool" placeholder="请输入曾经就读幼儿园" />
|
||||
</el-form-item>
|
||||
<el-form-item label="学习英语" prop="learnEnglish">
|
||||
<el-radio-group v-model="form.learnEnglish">
|
||||
<el-radio
|
||||
v-for="dict in ynOptions"
|
||||
:key="dict.dictValue"
|
||||
:label="dict.dictValue"
|
||||
>{{dict.dictLabel}}</el-radio>
|
||||
</el-radio-group>
|
||||
</el-form-item>
|
||||
<el-form-item label="入园渠道" prop="source">
|
||||
<el-select v-model="form.source" placeholder="请选择入园渠道">
|
||||
<el-option
|
||||
v-for="dict in sourceOptions"
|
||||
:key="dict.dictValue"
|
||||
:label="dict.dictLabel"
|
||||
:value="dict.dictValue"
|
||||
></el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="状态">
|
||||
<el-radio-group v-model="form.status">
|
||||
<el-radio
|
||||
v-for="dict in statusOptions"
|
||||
:key="dict.dictValue"
|
||||
:label="dict.dictValue"
|
||||
>{{dict.dictLabel}}</el-radio>
|
||||
</el-radio-group>
|
||||
</el-form-item>
|
||||
<el-form-item label="第一语言" prop="firstLanguage">
|
||||
<el-input v-model="form.firstLanguage" placeholder="请输入第一语言" maxlength="2" />
|
||||
</el-form-item>
|
||||
<el-form-item label="第二语言" prop="seconderLanguage">
|
||||
<el-input v-model="form.seconderLanguage" placeholder="请输入第二语言" maxlength="2" />
|
||||
</el-form-item>
|
||||
<el-form-item label="其他语言" prop="otherLanguage">
|
||||
<el-input v-model="form.otherLanguage" placeholder="请输入其他语言" />
|
||||
</el-form-item>
|
||||
<div></div>
|
||||
</el-form>
|
||||
<el-tabs type="border-card">
|
||||
<el-tab-pane label="幼儿基础信息">
|
||||
<el-row :gutter="15">
|
||||
<el-form class="form" ref="form" :model="form" label-width="110px">
|
||||
<el-col :span="12">
|
||||
<el-form-item label="家长联系方式" prop="phone">
|
||||
<el-input v-model="form.phone" placeholder="请输入联系方式" :disabled="hide" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="幼儿姓名" prop="name">
|
||||
<el-input v-model="form.name" placeholder="请输入幼儿姓名" :disabled="hide" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="英文名" prop="enName">
|
||||
<el-input v-model="form.enName" placeholder="请输入联系方式" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="小名" prop="infantName">
|
||||
<el-input v-model="form.infantName" placeholder="请输入联系方式" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="性别" prop="xb">
|
||||
<el-select v-model="form.xb" placeholder="请选择性别">
|
||||
<el-option
|
||||
v-for="dict in sexOptions"
|
||||
:key="dict.dictValue"
|
||||
:label="dict.dictLabel"
|
||||
:value="dict.dictValue"
|
||||
></el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="民族" prop="mz">
|
||||
<el-select v-model="form.mz" placeholder="请选择民族">
|
||||
<el-option
|
||||
v-for="dict in mzOptions"
|
||||
:key="dict.dictValue"
|
||||
:label="dict.dictLabel"
|
||||
:value="dict.dictValue"
|
||||
></el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="证件号码" prop="zjhm">
|
||||
<el-input v-model="form.zjhm" placeholder="请输入证件号码" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="幼儿出生日期" prop="csrq">
|
||||
<el-date-picker
|
||||
clearable
|
||||
size="small"
|
||||
v-model="form.csrq"
|
||||
type="date"
|
||||
value-format="yyyy-MM-dd"
|
||||
placeholder="选择幼儿出生日期"
|
||||
></el-date-picker>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="24">
|
||||
<el-form-item label="出生地" prop="birthProvincename">
|
||||
<v-distpicker
|
||||
v-model="form.birthProvincename"
|
||||
:placeholders="placeholders"
|
||||
:province="diglogForm.province"
|
||||
:city="diglogForm.city"
|
||||
:area="diglogForm.area"
|
||||
@selected="onSelected_brith"
|
||||
></v-distpicker>
|
||||
<el-input v-model="form.birthProvince" v-if="false" />
|
||||
<el-input v-model="form.birthCity" v-if="false" />
|
||||
<el-input v-model="form.birthArea" v-if="false" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="24">
|
||||
<el-form-item label="户口地" prop="registeredProvincename">
|
||||
<v-distpicker
|
||||
v-model="form.registeredProvincename"
|
||||
:placeholders="placeholders"
|
||||
:province="diglogForm1.province"
|
||||
:city="diglogForm1.city"
|
||||
:area="diglogForm1.area"
|
||||
@selected="onSelected_registered"
|
||||
></v-distpicker>
|
||||
<el-input v-model="form.registeredProvince" v-if="false" />
|
||||
<el-input v-model="form.registeredCity" v-if="false" />
|
||||
<el-input v-model="form.registeredArea" v-if="false" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="24">
|
||||
<el-form-item label="现住址" prop="addrProvincename">
|
||||
<v-distpicker
|
||||
v-model="form.addrProvincename"
|
||||
:placeholders="placeholders"
|
||||
:province="diglogForm2.province"
|
||||
:city="diglogForm2.city"
|
||||
:area="diglogForm2.area"
|
||||
@selected="onSelected_addr"
|
||||
></v-distpicker>
|
||||
<el-input v-model="form.addrProvince" v-if="false" />
|
||||
<el-input v-model="form.addrCity" v-if="false" />
|
||||
<el-input v-model="form.addrArea" v-if="false" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="详细地址" prop="addrDetail">
|
||||
<el-input v-model="form.addrDetail" placeholder="请输入详细地址" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="曾就读园" prop="everSchool">
|
||||
<el-input v-model="form.everSchool" placeholder="请输入曾经就读幼儿园" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="学习英语" prop="learnEnglish">
|
||||
<el-radio-group v-model="form.learnEnglish">
|
||||
<el-radio
|
||||
v-for="dict in ynOptions"
|
||||
:key="dict.dictValue"
|
||||
:label="dict.dictValue"
|
||||
>{{dict.dictLabel}}</el-radio>
|
||||
</el-radio-group>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="入园渠道" prop="source">
|
||||
<el-select v-model="form.source" placeholder="请选择入园渠道">
|
||||
<el-option
|
||||
v-for="dict in sourceOptions"
|
||||
:key="dict.dictValue"
|
||||
:label="dict.dictLabel"
|
||||
:value="dict.dictValue"
|
||||
></el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="状态">
|
||||
<el-radio-group v-model="form.status">
|
||||
<el-radio
|
||||
v-for="dict in statusOptions"
|
||||
:key="dict.dictValue"
|
||||
:label="dict.dictValue"
|
||||
>{{dict.dictLabel}}</el-radio>
|
||||
</el-radio-group>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="第一语言" prop="firstLanguage">
|
||||
<el-input v-model="form.firstLanguage" placeholder="请输入第一语言" maxlength="2" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="第二语言" prop="seconderLanguage">
|
||||
<el-input v-model="form.seconderLanguage" placeholder="请输入第二语言" maxlength="2" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="其他语言" prop="otherLanguage">
|
||||
<el-input v-model="form.otherLanguage" placeholder="请输入其他语言" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
<div></div>
|
||||
</el-form>
|
||||
</el-row>
|
||||
</el-tab-pane>
|
||||
<el-tab-pane label="监护人信息">
|
||||
<el-form ref="form_jhr" :model="form_jhr" label-width="110px">
|
||||
<el-row :gutter="15">
|
||||
<el-col :span="12">
|
||||
<el-form-item label="父亲姓名" prop="fathername">
|
||||
<el-input v-model="form_jhr.fathername" placeholder="请输入父亲姓名" @input="onInput()" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="联系电话" prop="fphone">
|
||||
<el-input v-model="form_jhr.fphone" placeholder="请输入父亲联系电话" @input="onInput()"/>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="办公电话" prop="foffphone">
|
||||
<el-input v-model="form_jhr.foffphone" placeholder="请输入父亲办公电话" @input="onInput()"/>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<el-row :gutter="15">
|
||||
<el-col :span="12">
|
||||
<el-form-item label="母亲姓名" prop="mothername">
|
||||
<el-input v-model="form_jhr.mothername" placeholder="请输入父亲姓名" @input="onInput()" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="联系电话" prop="mphone">
|
||||
<el-input v-model="form_jhr.mphone" placeholder="请输入母亲姓名" @input="onInput()" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="办公电话" prop="moffphone">
|
||||
<el-input v-model="form_jhr.moffphone" placeholder="请输入母亲办公电话" @input="onInput()"/>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<el-row :gutter="15">
|
||||
<el-col :span="12">
|
||||
<el-form-item label="其他联系人姓名" prop="grandfathername">
|
||||
<el-input v-model="form_jhr.grandfathername" placeholder="请输入其他联系人姓名" @input="onInput()"/>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="与幼儿关系" prop="gfgx">
|
||||
<el-select v-model="form_jhr.gfgx" placeholder="请选择与幼儿关系" >
|
||||
<el-option
|
||||
v-for="dict in jtgxOptions"
|
||||
:key="dict.dictValue"
|
||||
:label="dict.dictLabel"
|
||||
:value="dict.dictValue"
|
||||
></el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="联系电话" prop="gfphone">
|
||||
<el-input v-model="form_jhr.gfphone" placeholder="请输入联系电话" @input="onInput()"/>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="办公电话" prop="gfoffphone">
|
||||
<el-input v-model="form_jhr.gfoffphone" placeholder="请输入办公电话" @input="onInput()" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="24">
|
||||
<el-form-item label="住址" prop="gfaddress">
|
||||
<el-input v-model="form_jhr.gfaddress" placeholder="请输入住址" @input="onInput()"/>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<el-row :gutter="15">
|
||||
<el-col :span="12">
|
||||
<el-form-item label="其他联系人姓名" prop="grandmothername">
|
||||
<el-input v-model="form_jhr.grandmothername" placeholder="请输入其他联系人姓名" @input="onInput()"/>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="与幼儿关系" prop="gmgx">
|
||||
<el-select v-model="form_jhr.gmgx" placeholder="请选择与幼儿关系 ">
|
||||
<el-option
|
||||
v-for="dict in jtgxOptions"
|
||||
:key="dict.dictValue"
|
||||
:label="dict.dictLabel"
|
||||
:value="dict.dictValue"
|
||||
></el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="联系电话" prop="gmphone">
|
||||
<el-input v-model="form_jhr.gmphone" placeholder="请输入联系电话" @input="onInput()"/>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="办公电话" prop="gmoffphone">
|
||||
<el-input v-model="form_jhr.gmoffphone" placeholder="请输入办公电话" @input="onInput()"/>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="24">
|
||||
<el-form-item label="住址" prop="gmaddress">
|
||||
<el-input v-model="form_jhr.gmaddress" placeholder="请输入住址" @input="onInput()"/>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
</el-form>
|
||||
</el-tab-pane>
|
||||
</el-tabs>
|
||||
|
||||
<div slot="footer" class="dialog-footer">
|
||||
<el-button type="primary" @click="submitForm">提 交</el-button>
|
||||
<el-button @click="cancelSub">取 消</el-button>
|
||||
@ -163,16 +310,25 @@
|
||||
|
||||
<script>
|
||||
import { getChild_query, updateChild } from "@/api/benyi/child";
|
||||
import {
|
||||
listContactpeople,
|
||||
getContactpeople,
|
||||
getContactpeopleByChildId,
|
||||
delContactpeople,
|
||||
addContactpeople,
|
||||
updateContactpeople,
|
||||
} from "@/api/benyi/contactpeople";
|
||||
|
||||
import { listClass } from "@/api/system/class";
|
||||
import { getToken } from "@/utils/auth";
|
||||
//导入省市区三级联动库
|
||||
import VDistpicker from "v-distpicker";
|
||||
|
||||
// 更新紧急联系人
|
||||
import { updateContactpeople } from "@/api/benyi/contactpeople";
|
||||
|
||||
export default {
|
||||
name: "result",
|
||||
data() {
|
||||
return {
|
||||
activeNames: ["1"],
|
||||
placeholders: {
|
||||
province: "请选择省",
|
||||
city: "请选择市",
|
||||
@ -199,8 +355,6 @@ export default {
|
||||
yzzs: "",
|
||||
tynrcontent: "",
|
||||
href_tynr: "",
|
||||
father: "",
|
||||
mother: "",
|
||||
// 是否显示弹出层
|
||||
open: false,
|
||||
// 幼儿信息表格数据
|
||||
@ -217,13 +371,19 @@ export default {
|
||||
ynOptions: [],
|
||||
//入园渠道
|
||||
sourceOptions: [],
|
||||
//班级
|
||||
classOptions: [],
|
||||
//家庭关系
|
||||
jtgxOptions: [],
|
||||
// 查询参数
|
||||
queryParams: {
|
||||
name: undefined,
|
||||
phone: undefined
|
||||
},
|
||||
// 表单参数
|
||||
form: {}
|
||||
form: {},
|
||||
// 监护人表单参数
|
||||
form_jhr: {},
|
||||
};
|
||||
},
|
||||
created() {
|
||||
@ -244,6 +404,9 @@ export default {
|
||||
this.getDicts("sys_dm_ryqd").then(response => {
|
||||
this.sourceOptions = response.data;
|
||||
});
|
||||
this.getDicts("sys_dm_jtgx").then((response) => {
|
||||
this.jtgxOptions = response.data;
|
||||
});
|
||||
},
|
||||
components: {
|
||||
//省市区三级联动全局组件
|
||||
@ -294,10 +457,24 @@ export default {
|
||||
this.hide = true;
|
||||
this.childList = response.rows;
|
||||
this.form = response.data;
|
||||
// console.log(this.form);
|
||||
this.form.id = response.data.id;
|
||||
this.form.father = response.data.byChildContactpeople.fathername;
|
||||
this.form.mother = response.data.byChildContactpeople.mothername;
|
||||
this.form_jhr.fathername = response.data.byChildContactpeople.fathername;
|
||||
this.form_jhr.mothername = response.data.byChildContactpeople.mothername;
|
||||
this.form_jhr.fphone = response.data.byChildContactpeople.fphone;
|
||||
this.form_jhr.foffphone = response.data.byChildContactpeople.foffphone;
|
||||
this.form_jhr.mphone = response.data.byChildContactpeople.mphone;
|
||||
this.form_jhr.moffphone = response.data.byChildContactpeople.moffphone;
|
||||
this.form_jhr.grandfathername = response.data.byChildContactpeople.grandfathername;
|
||||
this.form_jhr.gfgx = response.data.byChildContactpeople.gfgx;
|
||||
this.form_jhr.gfphone = response.data.byChildContactpeople.gfphone;
|
||||
this.form_jhr.gfoffphone = response.data.byChildContactpeople.gfoffphone;
|
||||
this.form_jhr.gfaddress = response.data.byChildContactpeople.gfaddress;
|
||||
this.form_jhr.grandmothername = response.data.byChildContactpeople.grandmothername;
|
||||
this.form_jhr.gmgx = response.data.byChildContactpeople.gmgx;
|
||||
this.form_jhr.gmoffphone = response.data.byChildContactpeople.gmoffphone;
|
||||
this.form_jhr.gmaddress = response.data.byChildContactpeople.gmaddress;
|
||||
this.form_jhr.gmoffphone = response.data.byChildContactpeople.gmoffphone;
|
||||
this.form_jhr.createTime = response.data.byChildContactpeople.createTime;
|
||||
|
||||
this.diglogForm.province = response.data.birthProvincename;
|
||||
this.diglogForm.city = response.data.birthCityname;
|
||||
this.diglogForm.area = response.data.birthAreaname;
|
||||
@ -320,10 +497,8 @@ export default {
|
||||
if (this.form.id != undefined) {
|
||||
updateChild(this.form).then(response => {
|
||||
if (response.code === 200) {
|
||||
this.form.childid = this.form.id;
|
||||
this.form.fathername = this.form.father;
|
||||
this.form.mothername = this.form.mother;
|
||||
updateContactpeople(this.form).then(response => {
|
||||
this.form_jhr.childid = this.form.id;
|
||||
updateContactpeople(this.form_jhr).then(response => {
|
||||
if (response.code === 200) {
|
||||
this.msgSuccess("修改成功");
|
||||
this.hide = false;
|
||||
@ -416,6 +591,7 @@ export default {
|
||||
name: undefined,
|
||||
phone: undefined
|
||||
};
|
||||
|
||||
}
|
||||
}
|
||||
};
|
||||
|
@ -1,133 +1,139 @@
|
||||
package com.ruoyi.framework.config;
|
||||
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.context.annotation.Bean;
|
||||
import org.springframework.http.HttpMethod;
|
||||
import org.springframework.security.authentication.AuthenticationManager;
|
||||
import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder;
|
||||
import org.springframework.security.config.annotation.method.configuration.EnableGlobalMethodSecurity;
|
||||
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
|
||||
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
|
||||
import org.springframework.security.config.http.SessionCreationPolicy;
|
||||
import org.springframework.security.core.userdetails.UserDetailsService;
|
||||
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
|
||||
import org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter;
|
||||
import com.ruoyi.framework.security.filter.JwtAuthenticationTokenFilter;
|
||||
import com.ruoyi.framework.security.handle.AuthenticationEntryPointImpl;
|
||||
import com.ruoyi.framework.security.handle.LogoutSuccessHandlerImpl;
|
||||
|
||||
/**
|
||||
* spring security配置
|
||||
*
|
||||
* @author ruoyi
|
||||
*/
|
||||
@EnableGlobalMethodSecurity(prePostEnabled = true, securedEnabled = true)
|
||||
public class SecurityConfig extends WebSecurityConfigurerAdapter {
|
||||
/**
|
||||
* 自定义用户认证逻辑
|
||||
*/
|
||||
@Autowired
|
||||
private UserDetailsService userDetailsService;
|
||||
|
||||
/**
|
||||
* 认证失败处理类
|
||||
*/
|
||||
@Autowired
|
||||
private AuthenticationEntryPointImpl unauthorizedHandler;
|
||||
|
||||
/**
|
||||
* 退出处理类
|
||||
*/
|
||||
@Autowired
|
||||
private LogoutSuccessHandlerImpl logoutSuccessHandler;
|
||||
|
||||
/**
|
||||
* token认证过滤器
|
||||
*/
|
||||
@Autowired
|
||||
private JwtAuthenticationTokenFilter authenticationTokenFilter;
|
||||
|
||||
/**
|
||||
* 解决 无法直接注入 AuthenticationManager
|
||||
*
|
||||
* @return
|
||||
* @throws Exception
|
||||
*/
|
||||
@Bean
|
||||
@Override
|
||||
public AuthenticationManager authenticationManagerBean() throws Exception {
|
||||
return super.authenticationManagerBean();
|
||||
}
|
||||
|
||||
/**
|
||||
* anyRequest | 匹配所有请求路径
|
||||
* access | SpringEl表达式结果为true时可以访问
|
||||
* anonymous | 匿名可以访问
|
||||
* denyAll | 用户不能访问
|
||||
* fullyAuthenticated | 用户完全认证可以访问(非remember-me下自动登录)
|
||||
* hasAnyAuthority | 如果有参数,参数表示权限,则其中任何一个权限可以访问
|
||||
* hasAnyRole | 如果有参数,参数表示角色,则其中任何一个角色可以访问
|
||||
* hasAuthority | 如果有参数,参数表示权限,则其权限可以访问
|
||||
* hasIpAddress | 如果有参数,参数表示IP地址,如果用户IP和参数匹配,则可以访问
|
||||
* hasRole | 如果有参数,参数表示角色,则其角色可以访问
|
||||
* permitAll | 用户可以任意访问
|
||||
* rememberMe | 允许通过remember-me登录的用户访问
|
||||
* authenticated | 用户登录后可访问
|
||||
*/
|
||||
@Override
|
||||
protected void configure(HttpSecurity httpSecurity) throws Exception {
|
||||
httpSecurity
|
||||
// CRSF禁用,因为不使用session
|
||||
.csrf().disable()
|
||||
// 认证失败处理类
|
||||
.exceptionHandling().authenticationEntryPoint(unauthorizedHandler).and()
|
||||
// 基于token,所以不需要session
|
||||
.sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS).and()
|
||||
// 过滤请求
|
||||
.authorizeRequests()
|
||||
// 对于登录login 验证码captchaImage 允许匿名访问
|
||||
.antMatchers("/login", "/captchaImage").anonymous()
|
||||
.antMatchers(
|
||||
HttpMethod.GET,
|
||||
"/*.html",
|
||||
"/**/*.html",
|
||||
"/**/*.css",
|
||||
"/**/*.js"
|
||||
).permitAll()
|
||||
.antMatchers("/profile/**").anonymous()
|
||||
.antMatchers("/common/download**").anonymous()
|
||||
.antMatchers("/common/download/resource**").anonymous()
|
||||
.antMatchers("/swagger-ui.html").anonymous()
|
||||
.antMatchers("/swagger-resources/**").anonymous()
|
||||
.antMatchers("/webjars/**").anonymous()
|
||||
.antMatchers("/*/api-docs").anonymous()
|
||||
.antMatchers("/druid/**").anonymous()
|
||||
.antMatchers("/benyi/experience/add").anonymous()//半日入园体验申请
|
||||
.antMatchers("/benyi/experience/getInfo**").anonymous()//半日入园体验明细
|
||||
.antMatchers("/benyi/halfdayplan/getInfo/**").anonymous()//半日入园内容
|
||||
// 除上面外的所有请求全部需要鉴权认证
|
||||
.anyRequest().authenticated()
|
||||
.and()
|
||||
.headers().frameOptions().disable();
|
||||
httpSecurity.logout().logoutUrl("/logout").logoutSuccessHandler(logoutSuccessHandler);
|
||||
// 添加JWT filter
|
||||
httpSecurity.addFilterBefore(authenticationTokenFilter, UsernamePasswordAuthenticationFilter.class);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 强散列哈希加密实现
|
||||
*/
|
||||
@Bean
|
||||
public BCryptPasswordEncoder bCryptPasswordEncoder() {
|
||||
return new BCryptPasswordEncoder();
|
||||
}
|
||||
|
||||
/**
|
||||
* 身份认证接口
|
||||
*/
|
||||
@Override
|
||||
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
|
||||
auth.userDetailsService(userDetailsService).passwordEncoder(bCryptPasswordEncoder());
|
||||
}
|
||||
}
|
||||
package com.ruoyi.framework.config;
|
||||
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.context.annotation.Bean;
|
||||
import org.springframework.http.HttpMethod;
|
||||
import org.springframework.security.authentication.AuthenticationManager;
|
||||
import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder;
|
||||
import org.springframework.security.config.annotation.method.configuration.EnableGlobalMethodSecurity;
|
||||
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
|
||||
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
|
||||
import org.springframework.security.config.http.SessionCreationPolicy;
|
||||
import org.springframework.security.core.userdetails.UserDetailsService;
|
||||
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
|
||||
import org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter;
|
||||
import com.ruoyi.framework.security.filter.JwtAuthenticationTokenFilter;
|
||||
import com.ruoyi.framework.security.handle.AuthenticationEntryPointImpl;
|
||||
import com.ruoyi.framework.security.handle.LogoutSuccessHandlerImpl;
|
||||
|
||||
/**
|
||||
* spring security配置
|
||||
*
|
||||
* @author ruoyi
|
||||
*/
|
||||
@EnableGlobalMethodSecurity(prePostEnabled = true, securedEnabled = true)
|
||||
public class SecurityConfig extends WebSecurityConfigurerAdapter {
|
||||
/**
|
||||
* 自定义用户认证逻辑
|
||||
*/
|
||||
@Autowired
|
||||
private UserDetailsService userDetailsService;
|
||||
|
||||
/**
|
||||
* 认证失败处理类
|
||||
*/
|
||||
@Autowired
|
||||
private AuthenticationEntryPointImpl unauthorizedHandler;
|
||||
|
||||
/**
|
||||
* 退出处理类
|
||||
*/
|
||||
@Autowired
|
||||
private LogoutSuccessHandlerImpl logoutSuccessHandler;
|
||||
|
||||
/**
|
||||
* token认证过滤器
|
||||
*/
|
||||
@Autowired
|
||||
private JwtAuthenticationTokenFilter authenticationTokenFilter;
|
||||
|
||||
/**
|
||||
* 解决 无法直接注入 AuthenticationManager
|
||||
*
|
||||
* @return
|
||||
* @throws Exception
|
||||
*/
|
||||
@Bean
|
||||
@Override
|
||||
public AuthenticationManager authenticationManagerBean() throws Exception {
|
||||
return super.authenticationManagerBean();
|
||||
}
|
||||
|
||||
/**
|
||||
* anyRequest | 匹配所有请求路径
|
||||
* access | SpringEl表达式结果为true时可以访问
|
||||
* anonymous | 匿名可以访问
|
||||
* denyAll | 用户不能访问
|
||||
* fullyAuthenticated | 用户完全认证可以访问(非remember-me下自动登录)
|
||||
* hasAnyAuthority | 如果有参数,参数表示权限,则其中任何一个权限可以访问
|
||||
* hasAnyRole | 如果有参数,参数表示角色,则其中任何一个角色可以访问
|
||||
* hasAuthority | 如果有参数,参数表示权限,则其权限可以访问
|
||||
* hasIpAddress | 如果有参数,参数表示IP地址,如果用户IP和参数匹配,则可以访问
|
||||
* hasRole | 如果有参数,参数表示角色,则其角色可以访问
|
||||
* permitAll | 用户可以任意访问
|
||||
* rememberMe | 允许通过remember-me登录的用户访问
|
||||
* authenticated | 用户登录后可访问
|
||||
*/
|
||||
@Override
|
||||
protected void configure(HttpSecurity httpSecurity) throws Exception {
|
||||
httpSecurity
|
||||
// CRSF禁用,因为不使用session
|
||||
.csrf().disable()
|
||||
// 认证失败处理类
|
||||
.exceptionHandling().authenticationEntryPoint(unauthorizedHandler).and()
|
||||
// 基于token,所以不需要session
|
||||
.sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS).and()
|
||||
// 过滤请求
|
||||
.authorizeRequests()
|
||||
// 对于登录login 验证码captchaImage 允许匿名访问
|
||||
.antMatchers("/login", "/captchaImage").anonymous()
|
||||
.antMatchers(
|
||||
HttpMethod.GET,
|
||||
"/*.html",
|
||||
"/**/*.html",
|
||||
"/**/*.css",
|
||||
"/**/*.js"
|
||||
).permitAll()
|
||||
.antMatchers("/profile/**").anonymous()
|
||||
.antMatchers("/common/download**").anonymous()
|
||||
.antMatchers("/common/download/resource**").anonymous()
|
||||
.antMatchers("/swagger-ui.html").anonymous()
|
||||
.antMatchers("/swagger-resources/**").anonymous()
|
||||
.antMatchers("/webjars/**").anonymous()
|
||||
.antMatchers("/*/api-docs").anonymous()
|
||||
.antMatchers("/druid/**").anonymous()
|
||||
.antMatchers("/benyi/experience/add").anonymous()//半日入园体验申请
|
||||
.antMatchers("/benyi/experience/getInfo**").anonymous()//半日入园体验明细
|
||||
.antMatchers("/benyi/halfdayplan/getInfo/**").anonymous()//半日入园内容
|
||||
.antMatchers("/benyi/child/add").anonymous()//家长维护申请
|
||||
.antMatchers("/benyi/child/getInfo**").anonymous()//家长维护申请明细
|
||||
.antMatchers("/benyi/contactpeople/add").anonymous()//家长维护申请
|
||||
.antMatchers("/benyi/contactpeople/getInfo**").anonymous()//监护人维护明细
|
||||
.antMatchers("/system/dict/data/dictType/**").anonymous()//家长维护申请中的字典
|
||||
|
||||
// 除上面外的所有请求全部需要鉴权认证
|
||||
.anyRequest().authenticated()
|
||||
.and()
|
||||
.headers().frameOptions().disable();
|
||||
httpSecurity.logout().logoutUrl("/logout").logoutSuccessHandler(logoutSuccessHandler);
|
||||
// 添加JWT filter
|
||||
httpSecurity.addFilterBefore(authenticationTokenFilter, UsernamePasswordAuthenticationFilter.class);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 强散列哈希加密实现
|
||||
*/
|
||||
@Bean
|
||||
public BCryptPasswordEncoder bCryptPasswordEncoder() {
|
||||
return new BCryptPasswordEncoder();
|
||||
}
|
||||
|
||||
/**
|
||||
* 身份认证接口
|
||||
*/
|
||||
@Override
|
||||
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
|
||||
auth.userDetailsService(userDetailsService).passwordEncoder(bCryptPasswordEncoder());
|
||||
}
|
||||
}
|
||||
|
@ -108,7 +108,8 @@
|
||||
</resultMap>
|
||||
|
||||
<sql id="selectByChildVo">
|
||||
select c.id, c.schoolid, c.classid, c.name, c.en_name, c.infant_name, c.phone, c.xb, c.mz, c.zjhm, c.csrq, c.birth_province, c.birth_provincename, c.birth_city, c.birth_cityname, c.birth_area, c.birth_areaname, c.registered_province, c.registered_provincename, c.registered_city, c.registered_cityname, c.registered_area, c.registered_areaname, c.addr_province, c.addr_provincename, c.addr_city, c.addr_cityname, c.addr_area, c.addr_areaname, c.addr_detail, c.ever_school, c.learn_english, c.source, c.status, c.enter_date, c.out_date, c.first_language, c.seconder_language, c.other_language, c.createuserid, c.create_time, p.fathername, p.mothername
|
||||
select c.id, c.schoolid, c.classid, c.name, c.en_name, c.infant_name, c.phone, c.xb, c.mz, c.zjhm, c.csrq, c.birth_province, c.birth_provincename, c.birth_city, c.birth_cityname, c.birth_area, c.birth_areaname, c.registered_province, c.registered_provincename, c.registered_city, c.registered_cityname, c.registered_area, c.registered_areaname, c.addr_province, c.addr_provincename, c.addr_city, c.addr_cityname, c.addr_area, c.addr_areaname, c.addr_detail, c.ever_school, c.learn_english, c.source, c.status, c.enter_date, c.out_date, c.first_language, c.seconder_language, c.other_language, c.createuserid, c.create_time, p.fathername, p.mothername,
|
||||
p.childid, p.fphone, p.foffphone, p.mphone, p.moffphone, p.grandfathername, p.gfgx, p.gfphone, p.gfoffphone, p.gfaddress, p.grandmothername, p.gmgx, p.gmphone, p.gmaddress, p.gmoffphone, p.create_time
|
||||
from by_child c
|
||||
left join by_child_contactpeople p on c.id=p.childid
|
||||
</sql>
|
||||
|
Loading…
x
Reference in New Issue
Block a user