Merge pull request #31 from nakazawakan/feature_c_acc

Feature c acc
このコミットが含まれているのは:
I love Github 2021-10-07 20:37:36 -07:00 committed by GitHub
コミット 5d2ba14b61
この署名に対応する既知のキーがデータベースに存在しません
GPGキーID: 4AEE18F83AFDEB23
61個のファイルの変更51970行の追加1969行の削除

ファイルの表示

@ -8,6 +8,7 @@ use Illuminate\Http\Request;
use App\Models\Child;
use App\Models\FatherRelation;
use App\Models\MeetingApprovals;
use Exception;
class ChildrenController extends Controller {
public function login () {}
@ -30,11 +31,11 @@ class ChildrenController extends Controller {
public function listOfFather (Request $r) {
$result = [];
$child_select = ['id', 'image', 'last_name', 'first_name'];
$child_select = ['id', 'image', 'last_name', 'first_name', 'company'];
if ($list = FatherRelation::where('father_id', $r->father_id)->orderBy('created_at', 'desc')->get()->toArray()) {
foreach ($list as $l) {
$result[] = Child::select($child_select)->find($l['father_id']);
$result[] = Child::select($child_select)->find($l['child_id']);
}
return ['status_code' => 200, 'params' => $result];
@ -90,12 +91,14 @@ class ChildrenController extends Controller {
public function updatePassword ($child_id) {}
public function delete ($child_id) {
// 削除成功
if (Child::where('id', $child_id)->delete()) {
return ['status_code' => 200];
try{
// 削除成功
if (Child::where('id', $child_id)->delete()) {
return ['status_code' => 200];
}
} catch (Exception $e) {
// 削除失敗
return ['status_code' => 400, 'error' => $e->getMessage()];
}
// 削除失敗
return ['status_code' => 400];
}
}

ファイル差分が大きすぎるため省略します 差分を読み込み

ファイルの表示

@ -10,7 +10,7 @@
"production": "mix --production"
},
"dependencies": {
"@emotion/react": "^11.4.0",
"@emotion/react": "^11.4.1",
"@emotion/styled": "^11.3.0",
"@iconify/icons-ant-design": "^1.1.0",
"@iconify/icons-eva": "^1.1.0",
@ -30,12 +30,14 @@
"history": "^5.0.0",
"lodash": "^4.17.21",
"mdb-ui-kit": "^3.9.0",
"moment": "^2.29.1",
"numeral": "^2.0.6",
"prop-types": "^15.7.2",
"react": "^17.0.2",
"react-apexcharts": "^1.3.9",
"react-avatar-editor": "^12.0.0",
"react-date-picker": "^8.3.2",
"react-datepicker": "^4.2.1",
"react-dom": "^17.0.2",
"react-helmet-async": "^1.0.9",
"react-image-crop-component": "^1.1.2",
@ -45,6 +47,7 @@
"react-scripts": "4.0.0",
"react-select": "^4.3.1",
"react-simple-star-rating": "^3.0.0",
"react-toastify": "^8.0.3",
"react-validation": "^3.0.7",
"simplebar": "^5.3.5",
"simplebar-react": "^2.3.5",
@ -52,10 +55,10 @@
"yup": "^0.32.9"
},
"devDependencies": {
"@babel/core": "^7.14.8",
"@babel/core": "^7.15.5",
"@babel/eslint-parser": "^7.14.7",
"@babel/preset-react": "^7.0.0",
"axios": "^0.21",
"axios": "^0.21.4",
"bootstrap": "^4.0.0",
"eslint": "^7.31.0",
"eslint-config-airbnb": "^18.2.1",
@ -65,13 +68,13 @@
"eslint-plugin-import": "^2.23.4",
"eslint-plugin-jsx-a11y": "^6.4.1",
"eslint-plugin-prettier": "^3.4.0",
"eslint-plugin-react": "^7.24.0",
"eslint-plugin-react": "^7.26.1",
"eslint-plugin-react-hooks": "^4.2.0",
"jquery": "^3.2",
"laravel-mix": "^6.0.6",
"laravel-mix": "^6.0.31",
"lodash": "^4.17.19",
"popper.js": "^1.12",
"postcss": "^8.1.14",
"postcss": "^8.3.9",
"prettier": "^2.3.1",
"resolve-url-loader": "^3.1.2",
"sass": "^1.42.1",

49566
backend/public/js/app.js vendored

長すぎる行があるためファイル差分は表示されません

ファイルの表示

@ -1,9 +1,11 @@
require('./bootstrap');
require('./parent/app');
// require('./pages/contact');
// require('./pages/contact/complete');
// require('./pages/contact/unknown');
require('./pages/pages');
require('./child');
require('./child/auth');
require('./admin');

44
backend/resources/js/child/auth/index.js vendored ノーマルファイル
ファイルの表示

@ -0,0 +1,44 @@
import React, { Component } from 'react';
import ReactDOM from 'react-dom';
import { BrowserRouter, Route, Switch } from 'react-router-dom';
import ForgotPassword from './forgot_password';
import ForgotPasswordComplete from './forgot_password/complete';
import ForgotPasswordReset from './forgot_password/reset';
import Login from './login';
import SignUpTemporary from './register/temporary';
import SignUp from './register';
import SignUpComplete from './register/complete';
import SignUpError from './register/error';
export default class ChildAuth extends Component {
render() {
return (
<BrowserRouter>
<Switch>
<Route exact path='/register-temporary/c-account' component={SignUpTemporary} />
<Route exact path='/register/c-account' component={SignUp} />
<Route exact path='/register/c-account/complete' component={SignUpComplete} />
<Route exact path='/register/c-account/error/' component={SignUpError} />
<Route exact path="/forgot-password/c-account" component = {ForgotPassword} />
<Route exact path="/forgot-password/c-account/reset" component = {ForgotPasswordReset} />
<Route exact path="/forgot-password/c-account/complete" component = {ForgotPasswordComplete} />
<Route exact path="/login/c-account" component = {Login} />
</Switch>
</BrowserRouter>
);
}
}
// ----------------------------------------------------------------------
if(document.getElementById('c-auth')){
ReactDOM.render(
<ChildAuth />,
document.getElementById('c-auth')
)
}

ファイルの表示

@ -1,14 +1,5 @@
import React, { Component } from 'react';
import ForgotPassword from './auth/forgot_password';
import ForgotPasswordComplete from './auth/forgot_password/complete';
import ForgotPasswordReset from './auth/forgot_password/reset';
import Login from './auth/login';
import SignUpTemporary from './auth/register/temporary';
import SignUp from './auth/register';
import SignUpComplete from './auth/register/complete';
import SignUpError from './auth/register/error';
import Side from './side';
import Meeting from './meeting';
import MeetingDetail from './meeting/detail';
@ -22,7 +13,7 @@ import ProfileEdit from './profile/edit';
import ProfilePasswordEdit from './profile/password_edit';
import ProfileWithdrawal from './profile/withdrawal';
import WithdrawalComplete from './withdrawal/complete';
// import WithdrawalComplete from './withdrawal/complete';
import Search from './search';
@ -32,18 +23,9 @@ import { BrowserRouter, Route, Switch } from 'react-router-dom';
export default class ChildApp extends Component {
render() {
return (
<main className="l-container meeting-consent">
<BrowserRouter>
<Switch>
<Route exact path='/register-temporary/c-account' component={SignUpTemporary} />
<Route exact path='/register/c-account' component={SignUp} />
<Route exact path='/register/c-account/complete' component={SignUpComplete} />
<Route exact path='/register/c-account/error/' component={SignUpError} />
<Route exact path="/forgot-password/c-account" component = {ForgotPassword} />
<Route exact path="/forgot-password/c-account/reset" component = {ForgotPasswordReset} />
<Route exact path="/forgot-password/c-account/complete" component = {ForgotPasswordComplete} />
<Route exact path="/login/c-account" component = {Login} />
<Route exact path="/c-account/meeting" component = {Meeting} />
<Route exact path="/c-account/meeting/detail/:meeting_id" component = {MeetingDetail} />
<Route exact path="/c-account/search" component = {Search} />
@ -55,9 +37,11 @@ export default class ChildApp extends Component {
<Route exact path="/c-account/profile/edit/:child_id" component = {ProfileEdit} />
<Route exact path="/c-account/profile/password-edit/:child_id" component = {ProfilePasswordEdit} />
<Route exact path="/c-account/profile/withdrawal" component = {ProfileWithdrawal} />
<Route exact path="/withdrawal/complete" component = {WithdrawalComplete} />
{/* <Route exact path="/withdrawal/complete" component = {WithdrawalComplete} /> */}
</Switch>
<Side />
</BrowserRouter>
</main>
);
}
}

ファイルの表示

@ -1,13 +1,15 @@
import React, { useEffect, useState } from 'react';
import ReactDOM from 'react-dom';
import axios from 'axios';
import { useHistory } from 'react-router-dom';
import Notification from '../../component/notification';
import ModalYesNo from '../../component/modal_yesno';
import Alert from '../../component/alert';
const MeetingDetail = () => {
const MeetingDetail = (props) => {
const history = useHistory();
const [alertStatus, setAlertStatus] = useState('');
const [modalStatus, setModalStatus] = useState(false);
@ -16,7 +18,7 @@ const MeetingDetail = () => {
const formdata = new FormData();
let child_id = 1;
// axios.get('/api/meetings/listOfNonApprovalOfChild', {child_id: child_id})
// axios.get(`/api/meetings/listOfNonApprovalOfChild/${props.match.params?.id}`, {child_id: child_id})
// .then(response => {
// if(response.data.status_code==200){
// // window.location.href = '/register/c-account/complete';
@ -50,88 +52,92 @@ const MeetingDetail = () => {
}
return (
<div className="l-content-w560">
<div className="l-content__ttl">
<div className="l-content__ttl__left">
<h2>ミーティング詳細</h2>
<div className="p-consent-btn">
<button className="btn-default btn-yellow btn-consent btn-shadow btn-r8 btn-h42 btn-fz14" onClick={showModal}>
<span>承認</span>
</button>
<div className="l-content">
<div className="l-content-w560">
<div className="l-content__ttl">
<div className="l-content__ttl__left">
<h2>ミーティング詳細</h2>
<div className="p-consent-btn">
<button className="btn-default btn-yellow btn-consent btn-shadow btn-r8 btn-h42 btn-fz14" onClick={showModal}>
<span>承認</span>
</button>
</div>
</div>
<Notification/>
</div>
<Notification/>
</div>
<div className="l-content-wrap">
<div className="p-article p-article-single">
<div className="p-article-wrap">
<article className="p-article__body">
<div className="p-article__content">
<p className="meeting-label">未承知</p>
<h3 className="meeting-ttl">ミーティングタイトルミーティングタイトルミミーティングタイトルミーティングタイトルミ</h3>
<time dateTime="2021-07-30" className="meeting-time">
<span className="meeting-date">2021/7/21</span>
</time>
<div className="user-wrap user-sm">
<a href="">
<div className="user-avatar">
<img alt="name" className="avatar-img" src="/assets/img/avatar/avatar-sample03@2x.png"/>
</div>
<p className="user-name text-grey">田中 達也</p>
</a>
<div className="user-advice-btn">
<a className="btn-default btn-yellow btn-pdf btn-r8 btn-h45 btn-fz14">
<span>親に電話で相談</span>
<div className="l-content-wrap">
<div className="p-article p-article-single">
<div className="p-article-wrap">
<article className="p-article__body">
<div className="p-article__content">
<p className="meeting-label">未承知</p>
<h3 className="meeting-ttl">ミーティングタイトルミーティングタイトルミミーティングタイトルミーティングタイトルミ</h3>
<time dateTime="2021-07-30" className="meeting-time">
<span className="meeting-date">2021/7/21</span>
</time>
<div className="user-wrap user-sm">
<a href="">
<div className="user-avatar">
<img alt="name" className="avatar-img" src="/assets/img/avatar/avatar-sample03@2x.png"/>
</div>
<p className="user-name text-grey">田中 達也</p>
</a>
</div>
</div>
<div className="p-article__context">
<div className="p-file-list">
<div className="p-file-for">
<figure><img src="/assets/img/dummy/post-dummy01.jpg" alt=""/></figure>
</div>
<div className="p-file-nav">
<figure><img src="/assets/img/dummy/post-dummy01.jpg" alt=""/></figure>
<figure><img src="/assets/img/dummy/post-dummy02.jpg" alt=""/></figure>
<figure><img src="/assets/img/dummy/post-dummy03.jpg" alt=""/></figure>
<figure><img src="/assets/img/dummy/post-dummy04.jpg" alt=""/></figure>
<figure><img src="/assets/img/dummy/post-dummy05.jpg" alt=""/></figure>
<figure><img src="/assets/img/dummy/post-dummy01.jpg" alt=""/></figure>
<figure><img src="/assets/img/dummy/post-dummy02.jpg" alt=""/></figure>
<figure><img src="/assets/img/dummy/post-dummy03.jpg" alt=""/></figure>
<figure><img src="/assets/img/dummy/post-dummy04.jpg" alt=""/></figure>
<figure><img src="/assets/img/dummy/post-dummy05.jpg" alt=""/></figure>
</div>
</div>
<div className="p-article__pdf">
<div className="p-article__pdf__btn mr-0">
<a href="/assets/img/dummy/sample.pdf" className="btn-default btn-yellow btn-pdf btn-r8 btn-h60 h-xs-45-px" target="_blank">
<span>PDFを確認する</span>
<div className="user-advice-btn">
<a className="btn-default btn-yellow btn-pdf btn-r8 btn-h45 btn-fz14">
<span>親に電話で相談</span>
</a>
</div>
</div>
<p className="p-article__txt">ミーティング詳細ミーティング詳細ミーティング詳細ミーティング詳細ミーティング詳細ミーティングミーティング詳細ミーティング</p>
<p className="p-article__txt">ミーティング詳細ミーティング詳細ミーティング詳細ミーティング詳細ミーティング詳細ミーティングミーティング詳細ミーティング</p>
<div className="p-article__context">
<div className="p-file-list">
<div className="p-file-for">
<figure><img src="/assets/img/dummy/post-dummy01.jpg" alt=""/></figure>
</div>
<div className="p-file-nav">
<figure><img src="/assets/img/dummy/post-dummy01.jpg" alt=""/></figure>
<figure><img src="/assets/img/dummy/post-dummy02.jpg" alt=""/></figure>
<figure><img src="/assets/img/dummy/post-dummy03.jpg" alt=""/></figure>
<figure><img src="/assets/img/dummy/post-dummy04.jpg" alt=""/></figure>
<figure><img src="/assets/img/dummy/post-dummy05.jpg" alt=""/></figure>
<figure><img src="/assets/img/dummy/post-dummy01.jpg" alt=""/></figure>
<figure><img src="/assets/img/dummy/post-dummy02.jpg" alt=""/></figure>
<figure><img src="/assets/img/dummy/post-dummy03.jpg" alt=""/></figure>
<figure><img src="/assets/img/dummy/post-dummy04.jpg" alt=""/></figure>
<figure><img src="/assets/img/dummy/post-dummy05.jpg" alt=""/></figure>
</div>
</div>
<div className="p-article__pdf">
<div className="p-article__pdf__btn mr-0">
<a href="/assets/img/dummy/sample.pdf" className="btn-default btn-yellow btn-pdf btn-r8 btn-h60 h-xs-45-px" target="_blank">
<span>PDFを確認する</span>
</a>
</div>
</div>
<p className="p-article__txt">ミーティング詳細ミーティング詳細ミーティング詳細ミーティング詳細ミーティング詳細ミーティングミーティング詳細ミーティング</p>
<p className="p-article__txt">ミーティング詳細ミーティング詳細ミーティング詳細ミーティング詳細ミーティング詳細ミーティングミーティング詳細ミーティング</p>
</div>
</div>
</div>
</article>
</article>
</div>
</div>
</div>
{ alertStatus == 'success' && <Alert type="success">承認しました</Alert> }
{ alertStatus == 'failed' && <Alert type="fail">失敗しました</Alert> }
{
modalStatus &&
<ModalYesNo hideModal={hideModal}>
一度承知したら元に戻せません<br/>よろしいでしょうか
</ModalYesNo>
}
</div>
{ alertStatus == 'success' && <Alert type="success">承認しました</Alert> }
{ alertStatus == 'failed' && <Alert type="fail">失敗しました</Alert> }
{
modalStatus &&
<ModalYesNo hideModal={hideModal}>
一度承知したら元に戻せません<br/>よろしいでしょうか
</ModalYesNo>
}
</div>
)
}

ファイルの表示

@ -1,11 +1,13 @@
import React, { useEffect, useState } from 'react';
import ReactDOM from 'react-dom';
import axios from 'axios';
import { useHistory } from 'react-router-dom';
import Notification from '../../component/notification';
const meeting_list = [
{
id:1,
first_name: '田中',
last_name:'達也',
image:'/assets/img/avatar/avatar-sample03@2x.png',
@ -17,6 +19,7 @@ const meeting_list = [
}
},
{
id:2,
first_name: '田中',
last_name:'達也',
image:'/assets/img/avatar/avatar-sample03@2x.png',
@ -28,6 +31,7 @@ const meeting_list = [
}
},
{
id:3,
first_name: '田中',
last_name:'達也',
image:'/assets/img/avatar/avatar-sample03@2x.png',
@ -39,6 +43,7 @@ const meeting_list = [
}
},
{
id:4,
first_name: '田中',
last_name:'達也',
image:'/assets/img/avatar/avatar-sample03@2x.png',
@ -54,6 +59,7 @@ const meeting_list = [
const Meeting = () => {
const history = useHistory();
const [tab_status, setTabStatus] = useState(false);
// const [meeting_list, setMettingList] = useState([]);
@ -88,7 +94,7 @@ const Meeting = () => {
);
return (
<>
<div className="l-content">
<div className="l-content__ttl">
<div className="l-content__ttl__left">
<h2>ミーティング一覧</h2>
@ -116,14 +122,29 @@ const Meeting = () => {
<div className="meeting-item" key={id}>
<div className="user-wrap user-sm">
<a href="/c-account/meeting/detail/1">
<a onClick={e => {
e.preventDefault();
history.push({
pathname: `/c-account/parent/detail/${item.id}`,
state: {}
});
}}
>
<div className="user-avatar">
<img alt="name" className="avatar-img" src={item.image}/>
</div>
<p className="user-name">{item.first_name} {item.last_name}</p>
</a>
</div>
<a href="/c-account/meeting/detail/1" className="meeting-link">
<a className="meeting-link"
onClick={e => {
e.preventDefault();
history.push({
pathname: `/c-account/meeting/detail/${item.id}`,
state: {}
});
}}
>
<h3 className="meeting-ttl">{item.title}</h3>
<p className="meeting-txt">{item.text}</p>
</a>
@ -144,7 +165,7 @@ const Meeting = () => {
</div>
</section>
</div>
</>
</div>
)
}

ファイルの表示

@ -1,11 +1,13 @@
import React, { useEffect, useState } from 'react';
import ReactDOM from 'react-dom';
import axios from 'axios';
import { useHistory } from 'react-router-dom';
import Notification from '../../component/notification';
const ParentDetail = () => {
const ParentDetail = (props) => {
const history = useHistory();
const parent = {
tel:'08012927104',
email:'chankan07@gmail.com',
@ -35,47 +37,49 @@ const ParentDetail = () => {
);
return (
<div className="l-content-w560">
<div className="l-content__ttl">
<div className="l-content__ttl__left">
<h2>親詳細</h2>
</div>
<Notification/>
</div>
<div className="l-content-wrap">
<section className="profile-container">
<div className="profile-wrap">
<div className="profile-content">
<div className="profile-thumb">
<img src="/assets/img/avatar/avatar-sample04.jpg" className="profile-image" alt="" />
</div>
<p className="profile-name ft-xs-13">{parent.company}</p>
<div className="profile-info ft-xs-13">
<div className="profile-info__item">
<a href={`mailto:${parent.email}`}>
<p className="profile-info__icon">
<img src="/assets/img/icon/mail.svg" alt="メール"/>
</p>
<p className="txt">{parent.email}</p>
</a>
</div>
<div className="profile-info__item">
<a href={`tel:${parent.tel}`}>
<p className="profile-info__icon">
<img src="/assets/img/icon/phone.svg" alt="電話" />
</p>
<p className="txt">{parent.tel}</p>
</a>
</div>
<div className="profile-info__item txt-long">
<p className="txt">{parent.text}</p>
</div>
</div>
</div>
<div className="l-content">
<div className="l-content-w560">
<div className="l-content__ttl">
<div className="l-content__ttl__left">
<h2>親詳細</h2>
</div>
</section>
<Notification/>
</div>
<div className="l-content-wrap">
<section className="profile-container">
<div className="profile-wrap">
<div className="profile-content">
<div className="profile-thumb">
<img src="/assets/img/avatar/avatar-sample04.jpg" className="profile-image" alt="" />
</div>
<p className="profile-name ft-xs-13">{parent.company}</p>
<div className="profile-info ft-xs-13">
<div className="profile-info__item">
<a href={`mailto:${parent.email}`}>
<p className="profile-info__icon">
<img src="/assets/img/icon/mail.svg" alt="メール"/>
</p>
<p className="txt">{parent.email}</p>
</a>
</div>
<div className="profile-info__item">
<a href={`tel:${parent.tel}`}>
<p className="profile-info__icon">
<img src="/assets/img/icon/phone.svg" alt="電話" />
</p>
<p className="txt">{parent.tel}</p>
</a>
</div>
<div className="profile-info__item txt-long">
<p className="txt">{parent.text}</p>
</div>
</div>
</div>
</div>
</section>
</div>
</div>
</div>
)

ファイルの表示

@ -1,39 +1,47 @@
import React, { useEffect, useState } from 'react';
import ReactDOM from 'react-dom';
import axios from 'axios';
import { useHistory } from 'react-router-dom';
import Notification from '../../component/notification';
const parent_list = [
{
id:1,
company: '株式会社ZOTMAN',
image:'/assets/img/avatar/avatar-sample03@2x.png',
},
{
id:2,
company: '株式会社ZOTMAN',
image:'/assets/img/avatar/avatar-sample03@2x.png',
},
{
id:3,
company: '株式会社ZOTMAN',
image:'/assets/img/avatar/avatar-sample03@2x.png',
},
{
id:4,
company: '株式会社ZOTMAN',
image:'/assets/img/avatar/avatar-sample03@2x.png',
},
{
id:5,
company: '株式会社ZOTMAN',
image:'/assets/img/avatar/avatar-sample03@2x.png',
},
{
id:6,
company: '株式会社ZOTMAN',
image:'/assets/img/avatar/avatar-sample03@2x.png',
},
{
id:7,
company: '株式会社ZOTMAN',
image:'/assets/img/avatar/avatar-sample03@2x.png',
},
{
id:8,
company: '株式会社ZOTMAN',
image:'/assets/img/avatar/avatar-sample03@2x.png',
}
@ -41,7 +49,8 @@ const parent_list = [
const Parent = () => {
const history = useHistory();
const [tab_status, setTabStatus] = useState(false);
// const [meeting_list, setMettingList] = useState([]);
@ -76,7 +85,7 @@ const Parent = () => {
);
return (
<>
<div className="l-content">
<div className="l-content__ttl">
<div className="l-content__ttl__left">
<h2>親一覧</h2>
@ -91,7 +100,14 @@ const Parent = () => {
{
parent_list.map((item, id)=>
<div className="search-item border-0" key={id}>
<a href="/c-account/parent/detail/1">
<a onClick={e => {
e.preventDefault();
history.push({
pathname: `/c-account/parent/detail/${item.id}`,
state: {}
});
}}
>
<div className="user-wrap">
<div className="user-avatar">
<img alt="name" className="avatar-img" src={item.image}/>
@ -108,7 +124,7 @@ const Parent = () => {
</div>
</section>
</div>
</>
</div>
)
}

ファイルの表示

@ -1,5 +1,5 @@
import React, { useEffect, useState } from 'react';
import ReactDOM from 'react-dom';
import { useHistory } from 'react-router-dom';
import IconButton from "@material-ui/core/IconButton";
import axios from 'axios';
@ -8,7 +8,7 @@ import Notification from '../../component/notification';
const ProfileDetail = () => {
const [image, setImage] = useState('/assets/img/avatar/avatar-sample03@2x.png');
const history = useHistory();
const profile = {
id: 1,
@ -56,84 +56,86 @@ const ProfileDetail = () => {
return (
<div className="l-content-w560">
<div className="l-content__ttl">
<div className="l-content__ttl__left">
<h2>プロフィール</h2>
</div>
<Notification/>
</div>
<div className="l-content-wrap">
<section className="profile-container">
<div className="profile-wrap">
<div className="profile-content">
<div>
<input type="file" id="avatar" name="avatar" className="d-none" accept=".png, .jpg, .jpeg" onChange={(e) => handleImageChange(e)}/>
<div className="avatar-wrapper">
<label htmlFor="avatar" className='avatar-label'>
<IconButton color="primary" aria-label="upload picture" component="span" className="bg-color-2 shadow-sm">
<img src="/assets/img/icon/camera.svg" width="16" height="16"/>
</IconButton>
</label>
{
image &&
<img src={image} alt="" width ="100%" height="100%" style={{borderRadius:'50%'}}/>
}
</div>
</div>
<p className="profile-name ft-xs-14">{profile.name}</p>
<div className="profile-info ft-xs-14">
<div className="profile-info__item">
<p className="profile-info__icon">
<img src="/assets/img/icon/mail.svg" alt="メール"/>
</p>
<p className="txt">{profile.email}</p>
</div>
<div className="profile-info__item">
<p className="profile-info__icon">
<img src="/assets/img/icon/phone.svg" alt="電話"/>
</p>
<p className="txt">{profile.tel}</p>
</div>
<div className="profile-info__item">
<p className="profile-info__icon">
<img src="/assets/img/icon/building.svg" alt="会社名"/>
</p>
<p className="txt">{profile.company}</p>
</div>
</div>
<div className="p-profile-btn">
<a href={`/c-account/profile/edit/${profile.id}`} className="btn-default btn-yellow btn-profile btn-r8 btn-h52 h-xs-45-px">
<span className="ft-xs-14">プロフィールを変更する</span>
</a>
</div>
<div className="p-profile-btn">
<a href={`/c-account/profile/password-edit/${profile.id}`} className="btn-default btn-yellow btn-password btn-r8 btn-h52 h-xs-45-px">
<span className="ft-xs-14">パスワードを変更する</span>
</a>
</div>
<div className="p-profile-txtLink">
<a href="">
<span className="ft-xs-14">ログアウト</span>
</a>
</div>
<div className="p-profile-txtLink">
<a href="/c-account/profile/withdrawal">
<span className="ft-xs-14">退会する</span>
</a>
</div>
</div>
<div className="l-content">
<div className="l-content-w560">
<div className="l-content__ttl">
<div className="l-content__ttl__left">
<h2>プロフィール</h2>
</div>
</section>
<Notification/>
</div>
<div className="l-content-wrap">
<section className="profile-container">
<div className="profile-wrap">
<div className="profile-content">
<div>
<input type="file" id="avatar" name="avatar" className="d-none" accept=".png, .jpg, .jpeg" onChange={(e) => handleImageChange(e)}/>
<div className="avatar-wrapper">
<label htmlFor="avatar" className='avatar-label'>
<IconButton color="primary" aria-label="upload picture" component="span" className="bg-color-2 shadow-sm">
<img src="/assets/img/icon/camera.svg" width="16" height="16"/>
</IconButton>
</label>
{
image &&
<img src={image} alt="" width ="100%" height="100%" style={{borderRadius:'50%'}}/>
}
</div>
</div>
<p className="profile-name ft-xs-14">{profile.name}</p>
<div className="profile-info ft-xs-14">
<div className="profile-info__item">
<p className="profile-info__icon">
<img src="/assets/img/icon/mail.svg" alt="メール"/>
</p>
<p className="txt">{profile.email}</p>
</div>
<div className="profile-info__item">
<p className="profile-info__icon">
<img src="/assets/img/icon/phone.svg" alt="電話"/>
</p>
<p className="txt">{profile.tel}</p>
</div>
<div className="profile-info__item">
<p className="profile-info__icon">
<img src="/assets/img/icon/building.svg" alt="会社名"/>
</p>
<p className="txt">{profile.company}</p>
</div>
</div>
<div className="p-profile-btn">
<a href={`/c-account/profile/edit/${profile.id}`} className="btn-default btn-yellow btn-profile btn-r8 btn-h52 h-xs-45-px">
<span className="ft-xs-14">プロフィールを変更する</span>
</a>
</div>
<div className="p-profile-btn">
<a href={`/c-account/profile/password-edit/${profile.id}`} className="btn-default btn-yellow btn-password btn-r8 btn-h52 h-xs-45-px">
<span className="ft-xs-14">パスワードを変更する</span>
</a>
</div>
<div className="p-profile-txtLink">
<a href="">
<span className="ft-xs-14">ログアウト</span>
</a>
</div>
<div className="p-profile-txtLink">
<a href="/c-account/profile/withdrawal">
<span className="ft-xs-14">退会する</span>
</a>
</div>
</div>
</div>
</section>
</div>
</div>
</div>
</div>
)
}

ファイルの表示

@ -1,5 +1,5 @@
import React, { useEffect, useState } from 'react';
import ReactDOM from 'react-dom';
import { useHistory } from 'react-router-dom';
import axios from 'axios';
import { LoadingButton } from '@material-ui/lab';
@ -9,6 +9,8 @@ import Alert from '../../component/alert';
const ProfileEdit = () => {
const history = useHistory();
const [first_name, setFirstName] = useState('');
const [last_name, setLastName] = useState('');
const [email, setEmail] = useState('');
@ -94,91 +96,93 @@ const ProfileEdit = () => {
return (
<div className="l-content-w560">
<div className="l-content__ttl">
<div className="l-content__ttl__left">
<h2>プロフィール編集</h2>
</div>
<Notification/>
</div>
<div className="l-content-wrap">
<section className="profile-container">
<div className="profile-wrap">
<div className="profile-content">
<form onSubmit={handleSubmit} noValidate>
<div className="edit-set">
<label htmlFor="first_name" className="control-label ft-12"> </label>
<input type="text" name="first_name" id="first_name" className={`input-default input-nameSei ${ errors['first_name'].length != 0 && "is-invalid c-input__target" }`} value={first_name} onChange={e=>setFirstName(e.target.value)}/>
{
errors['first_name'].length != 0 &&
<span className="l-alert__text--error ft-16 ft-md-14">
{errors['first_name']}
</span>
}
</div>
<div className="edit-set">
<label htmlFor="last_name" className="control-label ft-12"> </label>
<input type="text" name="last_name" id="last_name" className={`input-default input-nameSei ${ errors['last_name'].length != 0 && "is-invalid c-input__target" }`} value={last_name} onChange={e=>setLastName(e.target.value)}/>
{
errors['last_name'].length != 0 &&
<span className="l-alert__text--error ft-16 ft-md-14">
{errors['last_name']}
</span>
}
</div>
<div className="edit-set">
<label htmlFor="email" className="control-label ft-12"> メールアドレス </label>
<input type="email" name="email" id="email" className = {`input-default input-nameSei ${ errors['email'].length != 0 && "is-invalid c-input__target" }`} value={email} onChange={e=>setEmail(e.target.value)}/>
{
errors['email'].length != 0 &&
<span className="l-alert__text--error ft-16 ft-md-14">
{errors['email']}
</span>
}
</div>
<div className="edit-set">
<label htmlFor="password" className="control-label ft-12"> 電話番号 </label>
<input type="password" name="password" id="password" className = {`input-default input-nameSei ${ errors['password'].length != 0 && "is-invalid c-input__target" }`} value={password} onChange={e=>setPassword(e.target.value)}/>
{
errors['password'].length != 0 &&
<span className="l-alert__text--error ft-16 ft-md-14">
{errors['password']}
</span>
}
</div>
<div className="edit-set">
<label htmlFor="company" className="control-label ft-12"> 会社名下請けの場合のみ </label>
<input type="text" name="company" id="company" className = {`input-default input-nameSei input-h60 input-w480 ${ errors['company'].length != 0 && "is-invalid c-input__target" }`} value={company} onChange={e=>setCompany(e.target.value)}/>
{
errors['company'].length != 0 &&
<span className="l-alert__text--error ft-16 ft-md-14">
{errors['company']}
</span>
}
</div>
<div className="mt-5">
<LoadingButton type="submit" fullWidth className="p-4 rounded-20 ft-15 font-weight-bold text-black bg-color-2">
<span>プロフィールを更新</span>
</LoadingButton>
</div>
{
submitStatus == 'success' && <Alert type="success">Submit Success!</Alert>
}
{
submitStatus == 'failed' && <Alert type="fail">Submit Failed!</Alert>
}
</form>
</div>
<div className="l-content">
<div className="l-content-w560">
<div className="l-content__ttl">
<div className="l-content__ttl__left">
<h2>プロフィール編集</h2>
</div>
</section>
<Notification/>
</div>
<div className="l-content-wrap">
<section className="profile-container">
<div className="profile-wrap">
<div className="profile-content">
<form onSubmit={handleSubmit} noValidate>
<div className="edit-set">
<label htmlFor="first_name" className="control-label ft-12"> </label>
<input type="text" name="first_name" id="first_name" className={`input-default input-nameSei ${ errors['first_name'].length != 0 && "is-invalid c-input__target" }`} value={first_name} onChange={e=>setFirstName(e.target.value)}/>
{
errors['first_name'].length != 0 &&
<span className="l-alert__text--error ft-16 ft-md-14">
{errors['first_name']}
</span>
}
</div>
<div className="edit-set">
<label htmlFor="last_name" className="control-label ft-12"> </label>
<input type="text" name="last_name" id="last_name" className={`input-default input-nameSei ${ errors['last_name'].length != 0 && "is-invalid c-input__target" }`} value={last_name} onChange={e=>setLastName(e.target.value)}/>
{
errors['last_name'].length != 0 &&
<span className="l-alert__text--error ft-16 ft-md-14">
{errors['last_name']}
</span>
}
</div>
<div className="edit-set">
<label htmlFor="email" className="control-label ft-12"> メールアドレス </label>
<input type="email" name="email" id="email" className = {`input-default input-nameSei ${ errors['email'].length != 0 && "is-invalid c-input__target" }`} value={email} onChange={e=>setEmail(e.target.value)}/>
{
errors['email'].length != 0 &&
<span className="l-alert__text--error ft-16 ft-md-14">
{errors['email']}
</span>
}
</div>
<div className="edit-set">
<label htmlFor="password" className="control-label ft-12"> 電話番号 </label>
<input type="password" name="password" id="password" className = {`input-default input-nameSei ${ errors['password'].length != 0 && "is-invalid c-input__target" }`} value={password} onChange={e=>setPassword(e.target.value)}/>
{
errors['password'].length != 0 &&
<span className="l-alert__text--error ft-16 ft-md-14">
{errors['password']}
</span>
}
</div>
<div className="edit-set">
<label htmlFor="company" className="control-label ft-12"> 会社名下請けの場合のみ </label>
<input type="text" name="company" id="company" className = {`input-default input-nameSei input-h60 input-w480 ${ errors['company'].length != 0 && "is-invalid c-input__target" }`} value={company} onChange={e=>setCompany(e.target.value)}/>
{
errors['company'].length != 0 &&
<span className="l-alert__text--error ft-16 ft-md-14">
{errors['company']}
</span>
}
</div>
<div className="mt-5">
<LoadingButton type="submit" fullWidth className="p-4 rounded-20 ft-15 font-weight-bold text-black bg-color-2">
<span>プロフィールを更新</span>
</LoadingButton>
</div>
{
submitStatus == 'success' && <Alert type="success">Submit Success!</Alert>
}
{
submitStatus == 'failed' && <Alert type="fail">Submit Failed!</Alert>
}
</form>
</div>
</div>
</section>
</div>
</div>
</div>
)

ファイルの表示

@ -1,5 +1,5 @@
import React, { useEffect, useState } from 'react';
import ReactDOM from 'react-dom';
import { useHistory } from 'react-router-dom';
import IconButton from "@material-ui/core/IconButton";
import axios from 'axios';
@ -8,7 +8,7 @@ import Notification from '../../component/notification';
const Profile = () => {
const [image, setImage] = useState('/assets/img/avatar/avatar-sample03@2x.png');
const history = useHistory();
const profile = {
id: 1,
@ -56,84 +56,88 @@ const Profile = () => {
return (
<div className="l-content-w560">
<div className="l-content__ttl">
<div className="l-content__ttl__left">
<h2>プロフィール</h2>
</div>
<Notification/>
</div>
<div className="l-content">
<div className="l-content-wrap">
<section className="profile-container">
<div className="profile-wrap">
<div className="profile-content">
<div>
<input type="file" id="avatar" name="avatar" className="d-none" accept=".png, .jpg, .jpeg" onChange={(e) => handleImageChange(e)}/>
<div className="avatar-wrapper">
<label htmlFor="avatar" className='avatar-label'>
<IconButton color="primary" aria-label="upload picture" component="span" className="bg-color-2 shadow-sm">
<img src="/assets/img/icon/camera.svg" width="16" height="16"/>
</IconButton>
</label>
{
image &&
<img src={image} alt="" width ="100%" height="100%" style={{borderRadius:'50%'}}/>
}
</div>
</div>
<p className="profile-name ft-xs-14">{profile.name}</p>
<div className="profile-info ft-xs-14">
<div className="profile-info__item">
<p className="profile-info__icon">
<img src="/assets/img/icon/mail.svg" alt="メール"/>
</p>
<p className="txt">{profile.email}</p>
</div>
<div className="profile-info__item">
<p className="profile-info__icon">
<img src="/assets/img/icon/phone.svg" alt="電話"/>
</p>
<p className="txt">{profile.tel}</p>
</div>
<div className="profile-info__item">
<p className="profile-info__icon">
<img src="/assets/img/icon/building.svg" alt="会社名"/>
</p>
<p className="txt">{profile.company}</p>
</div>
</div>
<div className="p-profile-btn">
<a href={`/c-account/profile/edit/${profile.id}`} className="btn-default btn-yellow btn-profile btn-r8 btn-h52 h-xs-45-px">
<span className="ft-xs-14">プロフィールを変更する</span>
</a>
</div>
<div className="p-profile-btn">
<a href={`/c-account/profile/password-edit/${profile.id}`} className="btn-default btn-yellow btn-password btn-r8 btn-h52 h-xs-45-px">
<span className="ft-xs-14">パスワードを変更する</span>
</a>
</div>
<div className="p-profile-txtLink">
<a href="/login/c-account">
<span className="ft-xs-14">ログアウト</span>
</a>
</div>
<div className="p-profile-txtLink">
<a href="/c-account/profile/withdrawal">
<span className="ft-xs-14">退会する</span>
</a>
</div>
</div>
<div className="l-content-w560">
<div className="l-content__ttl">
<div className="l-content__ttl__left">
<h2>プロフィール</h2>
</div>
</section>
<Notification/>
</div>
<div className="l-content-wrap">
<section className="profile-container">
<div className="profile-wrap">
<div className="profile-content">
<div>
<input type="file" id="avatar" name="avatar" className="d-none" accept=".png, .jpg, .jpeg" onChange={(e) => handleImageChange(e)}/>
<div className="avatar-wrapper">
<label htmlFor="avatar" className='avatar-label'>
<IconButton color="primary" aria-label="upload picture" component="span" className="bg-color-2 shadow-sm">
<img src="/assets/img/icon/camera.svg" width="16" height="16"/>
</IconButton>
</label>
{
image &&
<img src={image} alt="" width ="100%" height="100%" style={{borderRadius:'50%'}}/>
}
</div>
</div>
<p className="profile-name ft-xs-14">{profile.name}</p>
<div className="profile-info ft-xs-14">
<div className="profile-info__item">
<p className="profile-info__icon">
<img src="/assets/img/icon/mail.svg" alt="メール"/>
</p>
<p className="txt">{profile.email}</p>
</div>
<div className="profile-info__item">
<p className="profile-info__icon">
<img src="/assets/img/icon/phone.svg" alt="電話"/>
</p>
<p className="txt">{profile.tel}</p>
</div>
<div className="profile-info__item">
<p className="profile-info__icon">
<img src="/assets/img/icon/building.svg" alt="会社名"/>
</p>
<p className="txt">{profile.company}</p>
</div>
</div>
<div className="p-profile-btn">
<a href={`/c-account/profile/edit/${profile.id}`} className="btn-default btn-yellow btn-profile btn-r8 btn-h52 h-xs-45-px">
<span className="ft-xs-14">プロフィールを変更する</span>
</a>
</div>
<div className="p-profile-btn">
<a href={`/c-account/profile/password-edit/${profile.id}`} className="btn-default btn-yellow btn-password btn-r8 btn-h52 h-xs-45-px">
<span className="ft-xs-14">パスワードを変更する</span>
</a>
</div>
<div className="p-profile-txtLink">
<a href="/login/c-account">
<span className="ft-xs-14">ログアウト</span>
</a>
</div>
<div className="p-profile-txtLink">
<a href="/c-account/profile/withdrawal">
<span className="ft-xs-14">退会する</span>
</a>
</div>
</div>
</div>
</section>
</div>
</div>
</div>
</div>
)
}

ファイルの表示

@ -9,6 +9,9 @@ import Alert from '../../component/alert';
const ProfilePasswordEdit = () => {
const history = useHistory();
const [pwd, setPwd] = useState('');
const [confirm_pwd, setConfirmPwd] = useState('');
@ -62,66 +65,68 @@ const ProfilePasswordEdit = () => {
return (
<div className="l-content-w560">
<div className="l-content__ttl">
<div className="l-content__ttl__left">
<h2>パスワード編集</h2>
</div>
<Notification/>
</div>
<div className="l-content-wrap">
<section className="profile-container">
<div className="profile-wrap">
<div className="profile-content">
<form onSubmit={handleSubmit} noValidate>
<div className="edit-set">
<label htmlFor="pwd" className="control-label ft-14 ft-md-12">
新しいパスワード
</label>
<input type="password" name="pwd" id="pwd" className={`input-default input-h60 input-w480 ${ errors['pwd'].length != 0 && "is-invalid c-input__target" }`}
value={pwd} onChange={e=>setPwd(e.target.value)} autoFocus/>
{
errors['pwd'].length != 0 &&
<span className="l-alert__text--error ft-16 ft-md-14">
{errors['pwd']}
</span>
}
</div>
<div className="edit-set">
<label htmlFor="confirm_pwd" className="control-label ft-14 ft-md-12">
確認用新しいパスワード
</label>
<input type="password" name="confirm_pwd" id="confirm_pwd" className={`input-default input-h60 input-w480 ${ errors['confirm_pwd'].length != 0 && "is-invalid c-input__target" }`}
value={confirm_pwd} onChange={e=>setConfirmPwd(e.target.value)}/>
{
errors['confirm_pwd'].length != 0 &&
<span className="l-alert__text--error ft-16 ft-md-14">
{errors['confirm_pwd']}
</span>
}
</div>
<div className="mt-5">
<LoadingButton type="submit" fullWidth className="p-4 rounded-20 ft-15 font-weight-bold text-black bg-color-2">
<span>パスワードを更新</span>
</LoadingButton>
</div>
{
submitStatus == 'success' && <Alert type="success">Submit Success!</Alert>
}
{
submitStatus == 'fail' && <Alert type="fail">Submit Failed!</Alert>
}
</form>
<div className="l-content">
<div className="l-content-w560">
<div className="l-content__ttl">
<div className="l-content__ttl__left">
<h2>パスワード編集</h2>
</div>
<Notification/>
</div>
</section>
<div className="l-content-wrap">
<section className="profile-container">
<div className="profile-wrap">
<div className="profile-content">
<form onSubmit={handleSubmit} noValidate>
<div className="edit-set">
<label htmlFor="pwd" className="control-label ft-14 ft-md-12">
新しいパスワード
</label>
<input type="password" name="pwd" id="pwd" className={`input-default input-h60 input-w480 ${ errors['pwd'].length != 0 && "is-invalid c-input__target" }`}
value={pwd} onChange={e=>setPwd(e.target.value)} autoFocus/>
{
errors['pwd'].length != 0 &&
<span className="l-alert__text--error ft-16 ft-md-14">
{errors['pwd']}
</span>
}
</div>
<div className="edit-set">
<label htmlFor="confirm_pwd" className="control-label ft-14 ft-md-12">
確認用新しいパスワード
</label>
<input type="password" name="confirm_pwd" id="confirm_pwd" className={`input-default input-h60 input-w480 ${ errors['confirm_pwd'].length != 0 && "is-invalid c-input__target" }`}
value={confirm_pwd} onChange={e=>setConfirmPwd(e.target.value)}/>
{
errors['confirm_pwd'].length != 0 &&
<span className="l-alert__text--error ft-16 ft-md-14">
{errors['confirm_pwd']}
</span>
}
</div>
<div className="mt-5">
<LoadingButton type="submit" fullWidth className="p-4 rounded-20 ft-15 font-weight-bold text-black bg-color-2">
<span>パスワードを更新</span>
</LoadingButton>
</div>
{
submitStatus == 'success' && <Alert type="success">Submit Success!</Alert>
}
{
submitStatus == 'fail' && <Alert type="fail">Submit Failed!</Alert>
}
</form>
</div>
</div>
</section>
</div>
</div>
</div>
</div>
)
}

ファイルの表示

@ -22,30 +22,32 @@ const ProfileWithdrawal = () => {
}
return (
<div className="l-content-w560">
<div className="l-content__ttl">
<div className="l-content__ttl__left">
<h2>退会確認</h2>
</div>
<Notification/>
</div>
<div className="l-content-wrap">
<section className="edit-container">
<div className="edit-wrap">
<div className="edit-content">
<form className="edit-form" onSubmit={handleSubmit} noValidate>
<div className="edit-set-bg ft-xs-14">
<p>本当に退会してもよろしいでしょうか</p>
</div>
<button type="submit" className="btn-edit btn-default btn-h70 btn-r14 btn-yellow ft-xs-15">退会する</button>
</form>
</div>
<div className="l-content">
<div className="l-content-w560">
<div className="l-content__ttl">
<div className="l-content__ttl__left">
<h2>退会確認</h2>
</div>
</section>
<Notification/>
</div>
<div className="l-content-wrap">
<section className="edit-container">
<div className="edit-wrap">
<div className="edit-content">
<form className="edit-form" onSubmit={handleSubmit} noValidate>
<div className="edit-set-bg ft-xs-14">
<p>本当に退会してもよろしいでしょうか</p>
</div>
<button type="submit" className="btn-edit btn-default btn-h70 btn-r14 btn-yellow ft-xs-15">退会する</button>
</form>
</div>
</div>
</section>
</div>
</div>
</div>
)

ファイルの表示

@ -1,11 +1,12 @@
import React, { useEffect, useState } from 'react';
import { useHistory } from 'react-router-dom';
import axios from 'axios';
import Notification from '../../component/notification';
const meeting_list = [
{
id:1,
first_name: '田中',
last_name:'達也',
image:'/assets/img/avatar/avatar-sample03@2x.png',
@ -17,6 +18,7 @@ const meeting_list = [
}
},
{
id:2,
first_name: '田中',
last_name:'達也',
image:'/assets/img/avatar/avatar-sample03@2x.png',
@ -28,6 +30,7 @@ const meeting_list = [
}
},
{
id:3,
first_name: '田中',
last_name:'達也',
image:'/assets/img/avatar/avatar-sample03@2x.png',
@ -39,6 +42,7 @@ const meeting_list = [
}
},
{
id:4,
first_name: '田中',
last_name:'達也',
image:'/assets/img/avatar/avatar-sample03@2x.png',
@ -51,9 +55,10 @@ const meeting_list = [
}
]
const Search = () => {
const history = useHistory();
const [keyword, setKeyword] = useState('')
const [tab_status, setTabStatus] = useState(false);
// const [meeting_list, setMettingList] = useState([]);
@ -88,69 +93,84 @@ const Search = () => {
);
return (
<>
<div className="l-content__ttl">
<div className="l-content__ttl__left">
<h2>ミーティング検索</h2>
</div>
<Notification/>
<div className="l-content">
<div className="l-content__ttl">
<div className="l-content__ttl__left">
<h2>ミーティング検索</h2>
</div>
<Notification/>
</div>
<div className="l-content-wrap">
<section className="meeting-tab-container meeting-search">
<div className="meeting-tab-wrap">
<div className="meeting-head">
<form action="" className="meeting-form">
<label className="control-label" htmlFor="keyword">キーワード</label>
<input type="search" name="keyword" className="input-default input-keyword input-w380" id="keyword" value={keyword} onChange={e=> setKeyword(e.target.value)}/>
<i className="icon icon-search"></i>
</form>
<input className="tab-switch" id="tab-01" type="radio" name="tab_btn"/>
<input className="tab-switch" id="tab-02" type="radio" name="tab_btn"/>
<div className="meeting-tab">
<label className={`tab-label ${!tab_status && 'is-active'} `} htmlFor="tab-01" onClick={clickTab01}><span>未承知</span></label>
<label className={`tab-label ${tab_status && 'is-active'} `} htmlFor="tab-02" onClick={clickTab02}><span>承知済み</span></label>
</div>
</div>
<div className="l-content-wrap">
<section className="meeting-tab-container meeting-search">
<div className="meeting-tab-wrap">
<div className="meeting-head">
<form action="" className="meeting-form">
<label className="control-label" htmlFor="keyword">キーワード</label>
<input type="search" name="keyword" className="input-default input-keyword input-w380" id="keyword" value={keyword} onChange={e=> setKeyword(e.target.value)}/>
<i className="icon icon-search"></i>
</form>
<div className="meeting-content">
<div className="meeting-content-wrap is-active" id="item01">
{
meeting_list.map((item, id) =>
<div className="meeting-item" key={id}>
<div className="user-wrap user-sm">
<a href="/c-account/meeting/detail/1">
<div className="user-avatar">
<img alt="name" className="avatar-img" src={item.image}/>
</div>
<p className="user-name">{item.first_name} {item.last_name}</p>
</a>
</div>
<a href="/c-account/meeting/detail/1" className="meeting-link">
<h3 className="meeting-ttl">{item.title}</h3>
<p className="meeting-txt">{item.text}</p>
</a>
<div className="user-date">
<time dateTime="2021-07-30" className="user-updated-time">
<span className="user-updated">最終更新日<span className="date">{item.meeting_approval.updated_at}</span></span>
</time>
<time dateTime="2021-07-30" className="user-awareness-time">
<span className="user-awareness">承知日<span className="date">{item.meeting_approval.approve_at}</span></span>
</time>
</div>
</div>
)
}
</div>
<input className="tab-switch" id="tab-01" type="radio" name="tab_btn"/>
<input className="tab-switch" id="tab-02" type="radio" name="tab_btn"/>
<div className="meeting-tab">
<label className={`tab-label ${!tab_status && 'is-active'} `} htmlFor="tab-01" onClick={clickTab01}><span>未承知</span></label>
<label className={`tab-label ${tab_status && 'is-active'} `} htmlFor="tab-02" onClick={clickTab02}><span>承知済み</span></label>
</div>
</div>
</section>
</div>
</>
<div className="meeting-content">
<div className="meeting-content-wrap is-active" id="item01">
{
meeting_list.map((item, id) =>
<div className="meeting-item" key={id}>
<div className="user-wrap user-sm">
<a onClick={e => {
e.preventDefault();
history.push({
pathname: `/c-account/parent/detail/${item.id}`,
state: {}
});
}}
>
<div className="user-avatar">
<img alt="name" className="avatar-img" src={item.image}/>
</div>
<p className="user-name">{item.first_name} {item.last_name}</p>
</a>
</div>
<a className="meeting-link"
onClick={e => {
e.preventDefault();
history.push({
pathname: `/c-account/meeting/detail/${item.id}`,
state: {}
});
}}
>
<h3 className="meeting-ttl">{item.title}</h3>
<p className="meeting-txt">{item.text}</p>
</a>
<div className="user-date">
<time dateTime="2021-07-30" className="user-updated-time">
<span className="user-updated">最終更新日<span className="date">{item.meeting_approval.updated_at}</span></span>
</time>
<time dateTime="2021-07-30" className="user-awareness-time">
<span className="user-awareness">承知日<span className="date">{item.meeting_approval.approve_at}</span></span>
</time>
</div>
</div>
)
}
</div>
</div>
</div>
</section>
</div>
</div>
)
}

68
backend/resources/js/child/side.jsx ノーマルファイル
ファイルの表示

@ -0,0 +1,68 @@
import React, { useEffect, useState } from 'react';
import { Link } from 'react-router-dom'
export default function Side() {
const [selected, setSelected] = useState('');
return (
<div className="l-side">
<div className="l-side-logo">
<a href=""><img src="/assets/img/common/logo.svg" alt="ロゴ" /></a>
</div>
<nav className="mypage-nav">
<ul className="mypage-nav-list">
<li
className={`mypage-nav-list__item -meeting ${(selected == 'meeting' || (selected == '' && document.getElementById('c_router').value == 'meeting')) && "nav-active"}`}
onClick={e => {
e.preventDefault();
setSelected('meeting');
}}>
<Link className='mypage-nav-list__link' to='/c-account/meeting'>
<i className="icon meeting"></i>
<span>ミーティング</span>
</Link>
</li>
<li className={`mypage-nav-list__item -search ${ (selected == 'search' || (selected == '' && document.getElementById('c_router').value == 'search')) && "nav-active"}`}
onClick={e => {
e.preventDefault();
setSelected('search');
}}>
<Link className='mypage-nav-list__link' to='/c-account/search'>
<i className="icon search"></i>
<span>検索</span>
</Link>
</li>
<li className={`mypage-nav-list__item -parentinfo ${ (selected == 'parent' || (selected == '' && document.getElementById('c_router').value == 'parent')) && "nav-active"}`}
onClick={e => {
e.preventDefault();
setSelected('parent');
}}>
<Link className='mypage-nav-list__link' to='/c-account/parent'>
<i className="icon parents"></i>
<span>親情報</span>
</Link>
</li>
<li className={`mypage-nav-list__item -profile ${ (selected == 'profile' || (selected == '' && document.getElementById('c_router').value == 'profile')) && "nav-active"}`}
onClick={e => {
e.preventDefault();
setSelected('profile');
}}>
<Link className='user-icon mypage-nav-list__link ' to='/c-account/profile'>
<figure>
<div className="prof-wrap">
<img src="/assets/img/avatar/avatar-sample01@2x.png" alt="" />
</div>
</figure>
<span>プロフィール</span>
</Link>
</li>
<li className="mypage-nav-list__item -logout">
<a href="" className="mypage-nav-list__link">
<i className="icon log-out"></i><span>ログアウト</span>
</a>
</li>
</ul>
</nav>
</div>
);
}

ファイルの表示

@ -2,19 +2,21 @@ import React from 'react';
const WithdrawalComplete = () => {
return (
<div className="l-centeringbox">
<div className="l-centeringbox-wrap">
<div className="l-single-container login-panel">
<div className="l-single-inner">
<h1 className="ft-xs-20">退会完了</h1>
<div className="edit-set-bg u-mb30-lose u-mb25-gain ft-xs-13">
退会完了しました<br/>
今後とも危機管理をよろしくお願いいたします
<div className="l-content">
<div className="l-centeringbox">
<div className="l-centeringbox-wrap">
<div className="l-single-container login-panel">
<div className="l-single-inner">
<h1 className="ft-xs-20">退会完了</h1>
<div className="edit-set-bg u-mb30-lose u-mb25-gain ft-xs-13">
退会完了しました<br/>
今後とも危機管理をよろしくお願いいたします
</div>
</div>
</div>
</div>
</div>
</div>
</div>
)
}

ファイルの表示

@ -0,0 +1,27 @@
import React, { useEffect, useState } from 'react';
import { makeStyles } from '@material-ui/styles';
const useStyles = makeStyles(theme => ({
show: {
display: 'block',
},
hide: {
display: 'none',
},
}));
export default function ModalAlert({ show, message, textColor, handleClose }){
const classes = useStyles();
return (
<div className={`modal-area modal-pd ${show ? classes.show : classes.hide}`}>
<div className="modal-bg"></div>
<div className="modal-wrap">
<p className="modal-ttl" style={{ whiteSpace: 'pre-wrap', color: `${textColor ?? "red"}`}}>{message}</p>
<p className="modal-close-btn">
<img onClick={handleClose} src="/assets/img/icon/plus02.svg" alt="閉じるボタン" width="18" height="18" />
</p>
</div>
</div>
)
}

ファイルの表示

@ -0,0 +1,32 @@
import React, { useEffect, useState } from 'react';
import { makeStyles } from '@material-ui/styles';
const useStyles = makeStyles(theme => ({
show: {
display: 'block',
},
hide: {
display: 'none',
},
}));
export default function ModalConfirm({ show, message, handleClose, handleAccept }){
const classes = useStyles();
return (
<div className={`modal-area modal-01 ${show ? classes.show : classes.hide}`} >
<div className="modal-bg"></div>
<div className="modal-wrap">
<p className="modal-ttl" style={{ whiteSpace: 'pre-wrap' }}>{message}</p>
<ul className="modal-answer">
<li>
<a className="close-modal" onClick={handleClose} >いいえ</a>
</li>
<li>
<a onClick={handleAccept} >はい</a>
</li>
</ul>
</div>
</div>
)
}

78
backend/resources/js/component/side.jsx ノーマルファイル
ファイルの表示

@ -0,0 +1,78 @@
import React, { useEffect, useState } from 'react';
import { Link } from 'react-router-dom'
export default function Side() {
const [selected, setSelected] = useState('');
return (
<div className="l-side">
<div className="l-side-logo">
<a href=""><img src="../assets/img/common/logo.svg" alt="ロゴ" /></a>
</div>
<nav className="mypage-nav">
<ul className="mypage-nav-list">
<li
className={ (selected == '' || selected == 'meeting') ? "mypage-nav-list__item nav-active" : "mypage-nav-list__item" }
onClick={e => {
e.preventDefault();
setSelected('meeting');
}}>
<Link className='mypage-nav-list__link' to='/p-account/meeting'>
<i className="icon meeting"></i>
<span>ミーティング</span>
</Link>
</li>
<li
className={ selected == 'favorite' ? "mypage-nav-list__item -favorite nav-active" : "mypage-nav-list__item -favorite" }
onClick={e => {
e.preventDefault();
setSelected('favorite');
}}>
<Link className='mypage-nav-list__link' to='/p-account/favorite'>
<i className="icon star"></i>
</Link>
</li>
<li className={ selected == 'search' ? "mypage-nav-list__item nav-active" : "mypage-nav-list__item" }
onClick={e => {
e.preventDefault();
setSelected('search');
}}>
<Link className='mypage-nav-list__link' to='/p-account/search'>
<i className="icon search"></i>
<span>検索</span>
</Link>
</li>
<li className={ selected == 'child' ? "mypage-nav-list__item nav-active" : "mypage-nav-list__item" }
onClick={e => {
e.preventDefault();
setSelected('child');
}}>
<Link className='mypage-nav-list__link' to='/p-account/child'>
<i className="icon parents"></i>
<span>子情報</span>
</Link>
</li>
<li className={ selected == 'profile' ? "mypage-nav-list__item nav-active" : "mypage-nav-list__item" }
onClick={e => {
e.preventDefault();
setSelected('profile');
}}>
<Link className='user-icon mypage-nav-list__link' to='/p-account/profile'>
<figure>
<div className="prof-wrap">
<img src="../assets/img/avatar/avatar-sample01@2x.png" alt="" />
</div>
</figure>
<span>プロフィール</span>
</Link>
</li>
<li className="mypage-nav-list__item -logout">
<a href="/login/p-account" className="mypage-nav-list__link">
<i className="icon log-out"></i><span>ログアウト</span>
</a>
</li>
</ul>
</nav>
</div>
);
}

63
backend/resources/js/parent/app.js vendored ノーマルファイル
ファイルの表示

@ -0,0 +1,63 @@
import React, { Component } from 'react';
import ReactDOM from 'react-dom';
import Side from '../component/side';
import Meeting from '../parent/meeting';
import MeetingDetail from '../parent/meeting/detail';
import MeetingAdd from '../parent/meeting/add';
import MeetingEdit from '../parent/meeting/edit';
import Favorite from '../parent/favorite';
import Search from '../parent/search';
import Child from '../parent/child';
import ChildAdd from '../parent/child/add';
import ChildEdit from '../parent/child/edit';
import ChildDetail from '../parent/child/detail';
import Profile from '../parent/profile';
import ProfileEdit from '../parent/profile/edit';
import ProfilePasswordEdit from '../parent/profile/password_edit';
import ProfileWithdrawal from '../parent/profile/withdrawal';
import ProfileWithdrawalComplete from '../parent/profile/withdrawal_complete';
import { BrowserRouter, Route, Switch } from 'react-router-dom'
export default class App extends Component {
render() {
return (
<main className="l-container">
<BrowserRouter>
<Switch>
<Route exact path='/p-account' component={Meeting} />
<Route exact path='/p-account/meeting' component={Meeting} />
<Route exact path='/p-account/meeting/detail/:id' component={MeetingDetail} />
<Route exact path='/p-account/meeting/new' component={MeetingAdd} />
<Route exact path='/p-account/meeting/edit/:id' component={MeetingEdit} />
<Route exact path='/p-account/favorite' component={Favorite} />
<Route exact path='/p-account/search' component={Search} />
<Route exact path='/p-account/child' component={Child} />
<Route exact path='/p-account/child/add' component={ChildAdd} />
<Route exact path='/p-account/child/edit/hire-date/:id' component={ChildEdit} />
<Route exact path='/p-account/child/detail/:id' component={ChildDetail} />
<Route exact path='/p-account/profile' component={Profile} />
<Route exact path='/p-account/profile/edit/:id' component={ProfileEdit} />
<Route exact path='/p-account/profile/edit/password/:id' component={ProfilePasswordEdit} />
<Route exact path='/p-account/profile/withdrawal' component={ProfileWithdrawal} />
<Route exact path='/p-account/profile/withdrawal/complete' component={ProfileWithdrawalComplete} />
</Switch>
<Side />
</BrowserRouter>
</main>
);
}
}
if(document.getElementById('p-app')){
ReactDOM.render(
<App />,
document.getElementById('p-app')
)
}

113
backend/resources/js/parent/child/add.jsx ノーマルファイル
ファイルの表示

@ -0,0 +1,113 @@
import React, { useEffect, useState } from 'react';
import ModalAlert from '../../component/modal_alert';
const ChildAdd = () => {
const [tel, setTel] = useState('');
const [textColor, setTextColor] = useState(null);
const [showAlert, setShowAlert] = useState(false);
const [messageAlert, setMessageAlert] = useState(null);
async function handleClick() {
try {
if(tel == '') {
return;
}
const formdata = new FormData();
formdata.append('tel', tel);
axios.post('/api/children/checkTel', formdata)
.then(response => {
if(response.data.status_code==201){
const formdata2 = new FormData();
formdata2.append('father_id ', 1);
axios.post('/api/children/registerTemporary', formdata2)
.then(response2 => {
if(response2.data.status_code==200){
const formdata3 = new FormData();
formdata3.append('send_id ', 1);
formdata3.append('receive_id', tel);
formdata3.append('message', "危機管理アプリに招待URLが届きました。1時間以内に、URLから本登録を行ってください。https://○○○.com/register/c-account/{token}'");
axios.post('/api/smss/register', formdata3)
.then(response3 => {
if(response3.data.status_code==200){
setMessageAlert(response.data.success_messages);
setTextColor("black");
}
});
}
});
} else if(response.data.status_code==200){
formdata.append('father_id', 1);
axios.post('/api//father-relations/register', formdata)
.then(response => {
if(response.data.status_code==200){
setMessageAlert(response.data.success_messages);
setTextColor("black");
} else {
setMessageAlert(response.data.success_messages);
}
});
}
});
} catch (error) {
console.log('error', error);
}
}
async function handleCloseAlert() {
setShowAlert(false);
};
return (
<div className="l-content">
<div className="l-content-w560">
<div className="l-content__ttl">
<div className="l-content__ttl__left">
<h2>子追加</h2>
</div>
<div className="p-notification">
<div className="p-notification-icon">
<div className="p-notification-icon-wrap">
<div className="count">1</div>
<div className="p-notification-icon-bg"></div>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 22.742 19.855" className="icon svg-icon svg-fill svg-y50" ><g fill="none" stroke="#080808" strokeLinecap="round" strokeLinejoin="round" strokeWidth="1.5" data-name="Icon feather-alert-triangle" transform="translate(0.777 0.75)"><path d="M11.188,5.322,2.6,19.659A2.028,2.028,0,0,0,4.334,22.7H21.51a2.028,2.028,0,0,0,1.734-3.042L14.656,5.322a2.028,2.028,0,0,0-3.468,0Z" data-name="パス 3" transform="translate(-2.328 -4.346)"/><path d="M18,13.5v6.91" data-name="パス 4" transform="translate(-7.406 -8.547)"/><path d="M18,25.5h0" data-name="パス 5" transform="translate(-7.406 -11.2)"/></g></svg>
</div>
</div>
</div>
</div>
<div className="l-content-wrap">
<section className="edit-container">
<div className="edit-wrap">
<div className="edit-content">
<form action="" className="edit-form">
<div className="edit-set">
<label className="control-label" htmlFor="tel">追加する子の電話番号を入力</label>
<input type="tel" name="tel" onChange={e=>setTel(e.target.value)} value={tel} className="input-default input-tel input-h60 input-w480" id="tel" />
</div>
<button
onClick={e => {
e.preventDefault();
handleClick();
}}
type="button"
className="btn-edit btn-default btn-h70 btn-r14 btn-yellow">追加 or 招待</button>
</form>
</div>
</div>
</section>
</div>
</div>
<ModalAlert
show={showAlert}
message={messageAlert}
textColor={textColor}
handleClose={handleCloseAlert}
/>
</div>
)
}
export default ChildAdd;

162
backend/resources/js/parent/child/detail.jsx ノーマルファイル
ファイルの表示

@ -0,0 +1,162 @@
import React, { useEffect, useState } from 'react';
import moment from 'moment';
import axios from 'axios';
import ModalConfirm from '../../component/modal_confirm';
import ModalAlert from '../../component/modal_alert';
import { useHistory } from 'react-router-dom'
const ChildDetail = (props) => {
const [child, setChild] = useState(null);
const [show, setShow] = useState(false);
const [showAlert, setShowAlert] = useState(false);
const [messageAlert, setMessageAlert] = useState(null);
const history = useHistory();
useEffect(() => {
axios.get(`/api/children/detail/${props.match.params?.id}`, {params: { father_id: 1 }}).then((response) => {
if(response.data.status_code==200){
console.log(response.data.params[0]);
setChild(response.data.params[0]);
} else if(response.data.status_code==400){
//TODO
}
});
}, []);
async function showModal() {
setShow(true);
};
async function handleClose() {
setShow(false);
};
async function handleAccept() {
try {
axios.delete(`/api/children/delete/${props.match.params?.id}`)
.then(response => {
if(response.data.status_code == 200){
// setMessageAlert("");
history.push({
pathname: "/p-account/child",
state: {message : "子の削除に成功しました!"}
});
} else {
setMessageAlert("子の削除に失敗しました。");
}
setShowAlert(true);
});
setShow(false);
} catch (error) {
console.log('error', error);
}
};
async function handleCloseAlert() {
setShowAlert(false);
};
if (!child) return null;
return (
<div className="l-content">
<div className="l-content-w560">
<div className="l-content__ttl">
<div className="l-content__ttl__left">
<h2>子詳細</h2>
</div>
<div className="p-notification">
<div className="p-notification-icon">
<div className="p-notification-icon-wrap">
<div className="count">1</div>
<div className="p-notification-icon-bg"></div>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 22.742 19.855" className="icon svg-icon svg-fill svg-y50" >
<g fill="none" stroke="#080808" strokeLinecap="round" strokeLinejoin="round" data-name="Icon feather-alert-triangle" transform="translate(0.777 0.75)">
<path d="M11.188,5.322,2.6,19.659A2.028,2.028,0,0,0,4.334,22.7H21.51a2.028,2.028,0,0,0,1.734-3.042L14.656,5.322a2.028,2.028,0,0,0-3.468,0Z" data-name="パス 3" transform="translate(-2.328 -4.346)"/>
<path d="M18,13.5v6.91" data-name="パス 4" transform="translate(-7.406 -8.547)"/>
<path d="M18,25.5h0" data-name="パス 5" transform="translate(-7.406 -11.2)"/>
</g>
</svg>
</div>
</div>
</div>
</div>
<div className="l-content-wrap">
<div className="profile-container">
<div className="profile-wrap">
<div className="profile-content">
<div className="profile-thumb">
{/* <label> */}
<input id="profile-file" type="file" className="profile-thumb-img" />
<img src={ child.image } id="profile-file-preview" className="profile-thumb__image" alt="" />
{/* </label> */}
</div>
<p className="profile-name">{ child.last_name } { child.first_name }</p>
<div className="profile-info">
<div className="profile-info__item">
<p className="profile-info__icon">
<img src="../../../assets/img/icon/mail.svg" alt="メール" />
</p>
<p className="txt"><a href={"mailto:" + child.email}>{ child.email }</a></p>
</div>
<div className="profile-info__item">
<p className="profile-info__icon">
<img src="../../../assets/img/icon/phone.svg" alt="電話" />
</p>
<p className="txt"><a href={"tel:" + child.tel}>{ child.tel }</a></p>
</div>
<div className="profile-info__item">
<p className="profile-info__icon">
<img src="../../../assets/img/icon/building.svg" alt="会社名" />
</p>
<p className="txt">{ child.company }</p>
</div>
<div className="profile-info__item">
<p className="profile-info__icon">
<img src="../../../assets/img/icon/calendar.svg" alt="日付" />
</p>
<p className="txt">{ moment(child.father_relation?.hire_at).format('YYYY/MM/DD HH:mm') || '' }</p>
</div>
</div>
<div className="p-profile-btn">
<a
onClick={e => {
e.preventDefault();
history.push({
pathname: `/p-account/child/edit/hire-date/${props.match.params?.id}`,
state: {}
});
}}
data-v-ade1d018=""
className="btn-default btn-yellow btn-profile btn-r8 btn-h52">
<span>入社日を変更</span>
</a>
</div>
<div className="p-profile-txtLink">
<button type="button" onClick={showModal} className="a-icon txt-link">削除する</button>
</div>
</div>
</div>
</div>
</div>
</div>
<ModalConfirm
show={show}
message={"全てのミーティングの情報から \n 消えますがよろしいでしょうか。"}
handleClose={handleClose}
handleAccept={handleAccept}
/>
<ModalAlert
show={showAlert}
message={messageAlert}
handleClose={handleCloseAlert}
/>
</div>
)
}
export default ChildDetail;

119
backend/resources/js/parent/child/edit.jsx ノーマルファイル
ファイルの表示

@ -0,0 +1,119 @@
import React, { useEffect, useState } from 'react';
import ModalAlert from '../../component/modal_alert';
import ja from "date-fns/locale/ja";
import DatePicker, { registerLocale } from "react-datepicker";
import "react-datepicker/dist/react-datepicker.css";
registerLocale("ja", ja);
import axios from 'axios';
import moment from 'moment';
const ChildEdit = (props) => {
const [showAlert, setShowAlert] = useState(false);
const [textColor, setTextColor] = useState(null);
const [messageAlert, setMessageAlert] = useState(null);
const [hireDate, setHireDate] = useState(null);
useEffect(() => {
axios.get(`/api/children/detail/${props.match.params?.id}`, {params: { father_id: 1 }}).then((response) => {
if(response.data.status_code==200){
if(response.data.params[0]?.father_relation?.hire_at) {
let hire_at = moment(response.data.params[0]?.father_relation?.hire_at).toDate();
setHireDate(hire_at);
}
} else if(response.data.status_code==400){
//TODO
}
});
}, []);
async function handleClick() {
try {
const formdata = new FormData();
formdata.append('father_id', 1);
formdata.append('child_id', props.match.params?.id);
formdata.append('hire_at', hireDate);
axios.post(`/api/father-relations/updateHireDate/${props.match.params?.id}`, formdata)
.then(response => {
if(response.data.status_code == 200){
setMessageAlert(response.data.success_messages);
setTextColor("black");
} else {
setMessageAlert(response.data.success_messages);
}
setShowAlert(true);
});
} catch (error) {
console.log('error', error);
}
}
async function handleCloseAlert() {
setShowAlert(false);
};
return (
<div className="l-content">
<div className="l-content-w560">
<div className="l-content__ttl">
<div className="l-content__ttl__left">
<h2>入社日を変更</h2>
</div>
<div className="p-notification">
<div className="p-notification-icon">
<div className="p-notification-icon-wrap">
<div className="count">1</div>
<div className="p-notification-icon-bg"></div>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 22.742 19.855" className="icon svg-icon svg-fill svg-y50" ><g fill="none" stroke="#080808" strokeLinecap="round" strokeLinejoin="round" strokeWidth="1.5" data-name="Icon feather-alert-triangle" transform="translate(0.777 0.75)"><path d="M11.188,5.322,2.6,19.659A2.028,2.028,0,0,0,4.334,22.7H21.51a2.028,2.028,0,0,0,1.734-3.042L14.656,5.322a2.028,2.028,0,0,0-3.468,0Z" data-name="パス 3" transform="translate(-2.328 -4.346)"/><path d="M18,13.5v6.91" data-name="パス 4" transform="translate(-7.406 -8.547)"/><path d="M18,25.5h0" data-name="パス 5" transform="translate(-7.406 -11.2)"/></g></svg>
</div>
</div>
</div>
</div>
<div className="l-content-wrap">
<section className="edit-container">
<div className="edit-wrap">
<div className="edit-content">
<form action="" className="edit-form">
<div className="edit-set">
<label className="control-label" htmlFor="hireDate">入社日</label>
{/* <input type="text" name="hireDate" value="" className="input-default input-hiredate input-h60 input-w480" id="hireDate" />
<i className="icon icon-calendar"></i> */}
<div>
<DatePicker
selected={hireDate}
className="input-default input-hiredate input-h60 input-w480"
onChange={date => setHireDate(date)}
dateFormat="yyyy/MM/dd"
locale="ja"
minDate={new Date()}
/>
</div>
</div>
<button
onClick={e => {
e.preventDefault();
handleClick();
}}
type="button"
className="btn-edit btn-default btn-h70 btn-r14 btn-yellow">変更内容を保存する</button>
</form>
</div>
</div>
</section>
</div>
</div>
<ModalAlert
show={showAlert}
message={messageAlert}
textColor={textColor}
handleClose={handleCloseAlert}
/>
</div>
)
}
export default ChildEdit;

101
backend/resources/js/parent/child/index.jsx ノーマルファイル
ファイルの表示

@ -0,0 +1,101 @@
import React, { useEffect, useState } from 'react';
import { CircularProgress } from '@material-ui/core';
import Notification from '../../component/notification';
import { ToastContainer, toast } from 'react-toastify';
import 'react-toastify/dist/ReactToastify.css';
import axios from 'axios';
import { useHistory } from 'react-router-dom'
const Child = () => {
const [children, setChildren ] = useState(null);
const [loading, setLoading] = useState(true);
const history = useHistory();
const state = history.location.state
useEffect(() => {
axios.get('/api/children/listOfFather', {params: { father_id: 1 }}).then((response) => {
if(response.data.status_code==200){
console.log(response.data.params);
setChildren(response.data.params);
} else if(response.data.status_code==400){
//TODO
}
setLoading(false);
if(state?.message) {
toast.success(state?.message, {
position: "top-center",
autoClose: 5000,
className:"bg-success",
hideProgressBar: true,
closeOnClick: true,
pauseOnHover: true,
draggable: false,
progress: undefined,
style:{ color: '#ffffff', opacity: 0.95}
});
}
});
}, []);
return (
<div className="l-content">
<ToastContainer />
<div className="l-content__ttl">
<div className="l-content__ttl__left">
<h2>子一覧</h2>
<div className="p-meetingAdd-btn">
<a
onClick={e => {
e.preventDefault();
history.push({
pathname: '/p-account/child/add',
state: {}
});
}}
data-v-ade1d018=""
className="btn-default btn-yellow btn-meeting btn-shadow btn-r8 btn-h48 btn-fz14">
<span>子を追加</span>
<svg version="1.1" viewBox="0 0 500 500" className="icon svg-icon svg-fill svg-up">
<path fill="#000" stroke="none" pid="0" d="M250 437.6c-16.5 0-30-13.5-30-30V280.1H92.5c-16.5 0-30-13.5-30-30s13.5-30 30-30H220V92.6c0-16.5 13.5-30 30-30s30 13.5 30 30v127.5h127.5c16.5 0 30 13.5 30 30s-13.5 30-30 30H280v127.5c0 16.5-13.5 30-30 30z"></path>
</svg>
</a>
</div>
</div>
<Notification />
</div>
<div className="l-content-wrap">
<section className="search-container">
<div className="search-wrap">
<div className="search-content">
{ !loading ? children?.map((child, index) => {
return (
<div className="search-item">
<a onClick={e => {
e.preventDefault();
history.push({
pathname: `/p-account/child/detail/${child.id}`,
state: { child_id : child.id }
});
}} >
<div className="user-wrap">
<div className="user-avatar">
<img alt="name" className="avatar-img" src={ child.image } />
</div>
<div className="user-info">
<p className="user-name">{ child.last_name } { child.first_name }</p>
<p className="user-tel">{ child.company }</p>
</div>
</div>
</a>
</div>
);
}) : <div style={{position: "relative", left: "50%"}}><CircularProgress /></div>}
</div>
</div>
</section>
</div>
</div>
)
}
export default Child;

179
backend/resources/js/parent/favorite/index.jsx ノーマルファイル
ファイルの表示

@ -0,0 +1,179 @@
import React, { useEffect, useState } from 'react';
import { CircularProgress } from '@material-ui/core';
import moment from 'moment';
import axios from 'axios';
import { useHistory } from 'react-router-dom'
const Favorite = () => {
const history = useHistory();
const [loading, setLoading] = useState(true);
const [flg, setFlg] = useState(true);
const [favorites, setFavorites ] = useState(null);
const [others, setOthers ] = useState(null);
useEffect(() => {
axios.get('/api/meetings/listOfFavoriteOfFather', {params: { father_id: 1 }}).then((response) => {
if(response.data.status_code==200){
console.log(response.data.params);
setFavorites(response.data.params);
} else if(response.data.status_code==400){
//TODO
}
setLoading(false);
});
}, []);
useEffect(() => {
axios.get('/api/meetings/listOfNonFavoriteOfFather', {params: { father_id: 1 }}).then((response) => {
if(response.data.status_code==200){
console.log(response.data.params);
setOthers(response.data.params);
} else if(response.data.status_code==400){
//TODO
}
});
}, []);
return (
<div className="l-content">
<div className="l-content__ttl">
<div className="l-content__ttl__left">
<h2>お気に入り</h2>
</div>
<div className="p-notification">
<div className="p-notification-icon">
<div className="p-notification-icon-wrap">
<div className="count">1</div>
<div className="p-notification-icon-bg"></div>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 22.742 19.855" className="icon svg-icon svg-fill svg-y50" ><g fill="none" stroke="#080808" strokeLinecap="round" strokeLinejoin="round" strokeWidth="1.5" data-name="Icon feather-alert-triangle" transform="translate(0.777 0.75)"><path d="M11.188,5.322,2.6,19.659A2.028,2.028,0,0,0,4.334,22.7H21.51a2.028,2.028,0,0,0,1.734-3.042L14.656,5.322a2.028,2.028,0,0,0-3.468,0Z" data-name="パス 3" transform="translate(-2.328 -4.346)"/><path d="M18,13.5v6.91" data-name="パス 4" transform="translate(-7.406 -8.547)"/><path d="M18,25.5h0" data-name="パス 5" transform="translate(-7.406 -11.2)"/></g></svg>
</div>
</div>
</div>
</div>
<div className="l-content-wrap">
<div className="meeting-tab-container">
<div className="meeting-tab-wrap">
<div className="meeting-head">
<input className="tab-switch" id="tab-01" type="radio" name="tab_btn" />
<input className="tab-switch" id="tab-02" type="radio" name="tab_btn" />
<div className="meeting-tab">
<label
onClick={e => {
e.preventDefault();
setFlg(true);
}}
className={`tab-label ${flg ? "is-active" : ""}`}
htmlFor="tab-01"><span>お気に入り</span></label>
<label
onClick={e => {
e.preventDefault();
setFlg(false);
}}
className={`tab-label ${flg ? "" : "is-active"}`}
htmlFor="tab-02"><span>その他</span></label>
</div>
</div>
<div className="meeting-content">
<div className={ `meeting-content-wrap ${flg ? "is-active" : ""}` } id="item01">
{ !loading ? favorites?.map((item, index) => {
return (
<div className="meeting-item">
<a href="" className="meeting-link">
<h3 className="meeting-ttl">{ item.title }</h3>
<p className="meeting-txt">{ item.text }</p>
<time dateTime="2021-07-30" className="meeting-time">
<span className="meeting-date">{ moment(item.updated_at).format('YYYY/MM/DD HH:mm') || '' }</span>
</time>
<div className="meeting-member">
<div className="meeting-member-wrap">
<div data-url="login.html" className="meeting-member-link">
<ul className="meeting-member-count">
<li className="numerator">3</li>
<li className="denominator">4</li>
</ul>
<ul className="meeting-member-list" role="list">
<li className="meeting-member__item" role="listitem">
<div className="avatar">
<img alt="name" className="avatar-img" src="../assets/img/avatar/avatar-sample01@2x.png" />
</div>
</li>
<li className="meeting-member__item" role="listitem">
<div className="avatar">
<img alt="name" className="avatar-img" src="../assets/img/avatar/avatar-sample02@2x.png" />
</div>
</li>
<li className="meeting-member__item" role="listitem">
<div className="avatar">
<img alt="name" className="avatar-img" src="../assets/img/avatar/avatar-sample03@2x.png" />
</div>
</li>
</ul>
</div>
</div>
</div>
</a>
<button type="button" aria-label="お気に入り" data-tooltip="お気に入り" aria-pressed="false" className="icon a-icon like-icon icon-starFill a-icon-size_medium"></button>
</div>
);
}) : <div style={{position: "relative", left: "50%"}}><CircularProgress /></div>}
</div>
<div className={ `meeting-content-wrap ${!flg ? "is-active" : ""}` } id="item02">
{ others?.length > 0 && others.map((item, index) => {
return (
<div className="meeting-item">
<a href="" className="meeting-link">
<h3 className="meeting-ttl">{ item.title }</h3>
<p className="meeting-txt">{ item.text }</p>
<time dateTime="2021-07-30" className="meeting-time">
<span className="meeting-date">{ moment(item.updated_at).format('YYYY/MM/DD HH:mm') || '' }</span>
</time>
<div className="meeting-member">
<div className="meeting-member-wrap">
<div data-url="login.html" className="meeting-member-link">
<ul className="meeting-member-count">
<li className="numerator">3</li>
<li className="denominator">4</li>
</ul>
<ul className="meeting-member-list" role="list">
<li className="meeting-member__item" role="listitem">
<div className="avatar">
<img alt="name" className="avatar-img" src="../assets/img/avatar/avatar-sample01@2x.png" />
</div>
</li>
<li className="meeting-member__item" role="listitem">
<div className="avatar">
<img alt="name" className="avatar-img" src="../assets/img/avatar/avatar-sample02@2x.png" />
</div>
</li>
<li className="meeting-member__item" role="listitem">
<div className="avatar">
<img alt="name" className="avatar-img" src="../assets/img/avatar/avatar-sample03@2x.png" />
</div>
</li>
</ul>
</div>
</div>
</div>
</a>
<button type="button" aria-label="お気に入り" data-tooltip="お気に入り" aria-pressed="false" className="icon a-icon like-icon icon-star a-icon-size_medium"></button>
</div>
);
}) }
</div>
</div>
</div>
</div>
</div>
</div>
)
}
export default Favorite;

86
backend/resources/js/parent/meeting/add.jsx ノーマルファイル
ファイルの表示

@ -0,0 +1,86 @@
import React, { useEffect, useState } from 'react';
const MeetingAdd = () => {
return (
<div className="l-content">
<div className="l-content-w560">
<div className="l-content__ttl">
<div className="l-content__ttl__left">
<h2>ミーティング作成</h2>
</div>
<div className="p-notification">
<div className="p-notification-icon">
<div className="p-notification-icon-wrap">
<div className="count">1</div>
<div className="p-notification-icon-bg"></div>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 22.742 19.855" className="icon svg-icon svg-fill svg-y50" ><g fill="none" stroke="#080808" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" data-name="Icon feather-alert-triangle" transform="translate(0.777 0.75)"><path d="M11.188,5.322,2.6,19.659A2.028,2.028,0,0,0,4.334,22.7H21.51a2.028,2.028,0,0,0,1.734-3.042L14.656,5.322a2.028,2.028,0,0,0-3.468,0Z" data-name="パス 3" transform="translate(-2.328 -4.346)"/><path d="M18,13.5v6.91" data-name="パス 4" transform="translate(-7.406 -8.547)"/><path d="M18,25.5h0" data-name="パス 5" transform="translate(-7.406 -11.2)"/></g></svg>
</div>
</div>
</div>
</div>
<div className="l-content-wrap">
<div className="p-article">
<div className="p-article-wrap">
<article className="p-article__body">
<div className="p-article__content">
<div className="p-article__context">
<form action="" className="edit-form">
<div className="edit-set">
<label className="control-label" for="title">タイトル</label>
<input type="text" name="title" value="" className="input-default input-title input-h60 input-w480" id="title" />
</div>
<div className="edit-set">
<label className="control-label" for="meeting_textarea">本文</label>
<textarea name="data[MeetingContent][description]" rows="8" className="textarea-default" id="meeting_textarea"></textarea>
</div>
<div className="edit-set edit-set-mt15">
<label className="edit-set-file-label" for="file_pdf">
PDFアップロード
<input type="file" name="file_pdf" accept=".pdf" id="file_pdf" />
</label>
</div>
<div className="edit-set edit-set-mt15">
<label className="edit-set-file-label" for="file_image">
画像アップロード
<input type="file" name="file_image" accept=".png, .jpg, .jpeg" id="file_image" />
</label>
</div>
<div className="p-file-image">
<figure></figure>
<figure></figure>
<figure></figure>
<figure></figure>
<figure></figure>
<figure></figure>
<figure></figure>
<figure></figure>
<figure></figure>
<figure></figure>
</div>
<div className="edit-set edit-set-send">
<label for="allmember_send">
<input className="boolean optional" type="checkbox" name="allmember_send" id="allmember_send" />全員に送信</label>
</div>
<div className="edit-set-mt5 edit-set-send">
<label for="pickup_send">
<input className="boolean optional" type="checkbox" name="pickup_send" id="pickup_send" />選んで送信</label>
</div>
<button type="button" className="btn-edit btn-default btn-h70 btn-r14 btn-yellow">本登録</button>
</form>
</div>
</div>
</article>
</div>
</div>
</div>
</div>
</div>
)
}
export default MeetingAdd;

225
backend/resources/js/parent/meeting/detail.jsx ノーマルファイル
ファイルの表示

@ -0,0 +1,225 @@
import React, { useEffect, useState } from 'react';
import moment from 'moment';
import axios from 'axios';
import ModalConfirm from '../../component/modal_confirm';
import ModalAlert from '../../component/modal_alert';
import { useHistory } from 'react-router-dom'
const MeetingDetail = (props) => {
const history = useHistory();
const [show, setShow] = useState(false);
const [showAlert, setShowAlert] = useState(false);
const [messageAlert, setMessageAlert] = useState(null);
const [typeAlert, setTypeAlert] = useState(null);
const [meeting, setMeeting] = useState(null);
useEffect(() => {
axios.get(`/api/meetings/detail/${props.match.params?.id}`, {params: { father_id: 1 }}).then((response) => {
if(response.data.status_code==200){
console.log(response.data.params[0]);
setMeeting(response.data.params[0]);
} else if(response.data.status_code==400){
//TODO
}
});
}, []);
async function showModal() {
setShow(true);
};
async function handleClose() {
setShow(false);
};
async function handleAccept() {
try {
axios.delete(`/api/meetings/delete/${props.match.params?.id}`)
.then(response => {
if(response.data.status_code == 200){
axios.delete(`/api/meeting-images/deleteRelationMeeting/${props.match.params?.id}`)
.then(response => {});
axios.delete(`/api/meeting-approvals/deleteRelationMeeting/${props.match.params?.id}`)
.then(response => {
setMessageAlert("ミーティングの削除に成功しました!");
setTypeAlert("success");
});
} else {
setMessageAlert("ミーティングの削除に失敗しました。");
setTypeAlert("danger");
}
setShowAlert(true);
});
setShow(false);
} catch (error) {
console.log('error', error);
}
};
async function handleCloseAlert() {
setShowAlert(false);
};
if (!meeting) return null;
return (
<div className="l-content">
<div className="l-content-w560">
<div className="l-content__ttl">
<div className="l-content__ttl__left">
<h2>ミーティング詳細</h2>
</div>
<div className="p-notification">
<div className="p-notification-icon">
<div className="p-notification-icon-wrap">
<div className="count">1</div>
<div className="p-notification-icon-bg"></div>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 22.742 19.855" className="icon svg-icon svg-fill svg-y50" ><g fill="none" stroke="#080808" strokeLinecap="round" strokeLinejoin="round" strokeWidth="1.5" data-name="Icon feather-alert-triangle" transform="translate(0.777 0.75)"><path d="M11.188,5.322,2.6,19.659A2.028,2.028,0,0,0,4.334,22.7H21.51a2.028,2.028,0,0,0,1.734-3.042L14.656,5.322a2.028,2.028,0,0,0-3.468,0Z" data-name="パス 3" transform="translate(-2.328 -4.346)"/><path d="M18,13.5v6.91" data-name="パス 4" transform="translate(-7.406 -8.547)"/><path d="M18,25.5h0" data-name="パス 5" transform="translate(-7.406 -11.2)"/></g></svg>
</div>
</div>
</div>
</div>
<div className="l-content-wrap">
<div className="p-article">
<div className="p-article-wrap">
<article className="p-article__body">
<div className="p-article__content">
<div className="meeting-member">
<div className="meeting-member-wrap">
<div data-url="login.html" className="meeting-member-link">
<ul className="meeting-member-count">
<li className="numerator">3</li>
<li className="denominator">4</li>
</ul>
<ul className="meeting-member-list" role="list">
<li className="meeting-member__item" role="listitem">
<div className="avatar">
<img alt="name" className="avatar-img" src="../../../assets/img/avatar/avatar-sample01@2x.png" />
</div>
</li>
<li className="meeting-member__item" role="listitem">
<div className="avatar">
<img alt="name" className="avatar-img" src="../../../assets/img/avatar/avatar-sample02@2x.png" />
</div>
</li>
<li className="meeting-member__item" role="listitem">
<div className="avatar">
<img alt="name" className="avatar-img" src="../../../assets/img/avatar/avatar-sample03@2x.png" />
</div>
</li>
<li className="meeting-member__item" role="listitem">
<div className="avatar">
<img alt="name" className="avatar-img" src="../../../assets/img/avatar/avatar-sample01@2x.png" />
</div>
</li>
<li className="meeting-member__item" role="listitem">
<div className="avatar">
<img alt="name" className="avatar-img" src="../../../assets/img/avatar/avatar-sample02@2x.png" />
</div>
</li>
<li className="meeting-member__item" role="listitem">
<div className="avatar">
<img alt="name" className="avatar-img" src="../../../assets/img/avatar/avatar-sample03@2x.png" />
</div>
</li>
<li className="meeting-member__item" role="listitem">
<div className="avatar">
<img alt="name" className="avatar-img" src="../../../assets/img/avatar/avatar-sample01@2x.png" />
</div>
</li>
</ul>
<div className="meeting-member__read">
<p>3人既読</p>
</div>
</div>
</div>
</div>
<h3 className="meeting-ttl">{ meeting.title }</h3>
<time dateTime="2021-07-30" className="meeting-time">
<span className="meeting-date">{ moment(meeting.updated_at).format('YYYY/MM/DD HH:mm') || '' }</span>
</time>
<ul className="p-article-btn-list">
<li className="p-article-btn__item">
<a
onClick={e => {
e.preventDefault();
history.push({
pathname: `/p-account/meeting/edit/${props.match.params?.id}`,
state: {}
});
}}
className="btn-default btn-yellow btn-pdf btn-r8 btn-h48">
編集
</a>
</li>
<li className="p-article-btn__item">
<a onClick={showModal} className="btn-default btn-yellow btn-pdf btn-r8 btn-h48">削除</a>
</li>
<li className="p-article-btn__item">
<a href="" className="btn-default btn-yellow btn-pdf btn-r8 btn-h48">複製</a>
</li>
<li className="p-article-btn__item">
<a href="" className="btn-default btn-yellow btn-pdf btn-r8 btn-h48">再通知</a>
</li>
</ul>
<div className="p-article__context">
<div className="p-file-list">
<div className="p-file-for">
<figure><img src="../../../assets/img/dummy/post-dummy01.jpg" alt="" /></figure>
</div>
<div className="p-file-nav">
<figure><img src="../../../assets/img/dummy/post-dummy01.jpg" alt="" /></figure>
<figure><img src="../../../assets/img/dummy/post-dummy02.jpg" alt="" /></figure>
<figure><img src="../../../assets/img/dummy/post-dummy03.jpg" alt="" /></figure>
<figure><img src="../../../assets/img/dummy/post-dummy04.jpg" alt="" /></figure>
<figure><img src="../../../assets/img/dummy/post-dummy05.jpg" alt="" /></figure>
<figure><img src="../../../assets/img/dummy/post-dummy01.jpg" alt="" /></figure>
<figure><img src="../../../assets/img/dummy/post-dummy02.jpg" alt="" /></figure>
<figure><img src="../../../assets/img/dummy/post-dummy03.jpg" alt="" /></figure>
<figure><img src="../../../assets/img/dummy/post-dummy04.jpg" alt="" /></figure>
<figure><img src="../../../assets/img/dummy/post-dummy05.jpg" alt="" /></figure>
<figure><img src="../../../assets/img/dummy/post-dummy03.jpg" alt="" /></figure>
<figure><img src="../../../assets/img/dummy/post-dummy04.jpg" alt="" /></figure>
<figure><img src="../../../assets/img/dummy/post-dummy05.jpg" alt="" /></figure>
</div>
</div>
<div className="p-article__pdf">
<div className="p-article__pdf__btn">
<a data-v-ade1d018="" className="btn-default btn-yellow btn-pdf btn-r8 btn-h52">
<span>PDFを確認する</span>
</a>
</div>
<button type="button" aria-label="お気に入り" data-tooltip="お気に入り" aria-pressed="false" className="icon a-icon like-icon icon-star icon-star-wrap a-icon-size_medium"></button>
</div>
<p className="p-article__txt">{ meeting.text }</p>
</div>
</div>
</article>
</div>
</div>
</div>
</div>
<ModalConfirm
show={show}
message={"本当に削除しても\nよろしいでしょうか?"}
handleClose={handleClose}
handleAccept={handleAccept}
/>
<ModalAlert
show={showAlert}
message={messageAlert}
type={typeAlert}
handleClose={handleCloseAlert}
/>
</div>
)
}
export default MeetingDetail;

122
backend/resources/js/parent/meeting/edit.jsx ノーマルファイル
ファイルの表示

@ -0,0 +1,122 @@
import React, { useEffect, useState } from 'react';
import axios from 'axios';
const MeetingEdit = (props) => {
const [meeting, setMeeting] = useState(null);
useEffect(() => {
axios.get(`/api/meetings/detail/${props.match.params?.id}`, {params: { father_id: 1 }}).then((response) => {
if(response.data.status_code==200){
console.log(response.data.params[0]);
setMeeting(response.data.params[0]);
} else if(response.data.status_code==400){
//TODO
}
});
}, []);
if (!meeting) return null;
return (
<div className="l-content">
<div className="l-content__ttl">
<div className="l-content__ttl__left">
<h2>ミーティング作成</h2>
</div>
<div className="p-notification">
<div className="p-notification-icon">
<div className="p-notification-icon-wrap">
<div className="count">1</div>
<div className="p-notification-icon-bg"></div>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 22.742 19.855" className="icon svg-icon svg-fill svg-y50" ><g fill="none" stroke="#080808" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" data-name="Icon feather-alert-triangle" transform="translate(0.777 0.75)"><path d="M11.188,5.322,2.6,19.659A2.028,2.028,0,0,0,4.334,22.7H21.51a2.028,2.028,0,0,0,1.734-3.042L14.656,5.322a2.028,2.028,0,0,0-3.468,0Z" data-name="パス 3" transform="translate(-2.328 -4.346)"/><path d="M18,13.5v6.91" data-name="パス 4" transform="translate(-7.406 -8.547)"/><path d="M18,25.5h0" data-name="パス 5" transform="translate(-7.406 -11.2)"/></g></svg>
</div>
</div>
</div>
</div>
<div className="l-content-wrap">
<div className="p-article">
<div className="p-article-wrap">
<article className="p-article__body">
<div className="p-article__content">
<div className="p-article__context">
<form action="" className="edit-form">
<div className="edit-set">
<label className="control-label" for="title">タイトル</label>
<input type="text" name="title" value={meeting.title} className="input-default input-title input-h60 input-w480" id="title" />
</div>
<div className="edit-set">
<label className="control-label" for="meeting_textarea">本文</label>
<textarea name="data[MeetingContent][description]" rows="8" className="textarea-default" id="meeting_textarea">{meeting.text}</textarea>
</div>
<div className="edit-set edit-set-mt15">
<label className="edit-set-file-label" for="file_pdf">
PDFアップロード
<input type="file" name="file_pdf" accept=".pdf" id="file_pdf" />
</label>
</div>
<div className="edit-set edit-set-mt15">
<label className="edit-set-file-label" for="file_image">
画像アップロード
<input type="file" name="file_image" accept=".png, .jpg, .jpeg" id="file_image" />
</label>
</div>
<div className="p-file-image">
<figure className="image-upload"><img src="../../../assets/img/dummy/post-dummy01.jpg" alt="" /></figure>
<figure className="image-upload"><img src="../../../assets/img/dummy/post-dummy02.jpg" alt="" /></figure>
<figure className="image-upload"><img src="../../../assets/img/dummy/post-dummy03.jpg" alt="" /></figure>
<figure className="image-upload"><img src="../../../assets/img/dummy/post-dummy04.jpg" alt="" /></figure>
<figure className="image-upload"><img src="../../../assets/img/dummy/post-dummy05.jpg" alt="" /></figure>
<figure className="image-upload"><img src="../../../assets/img/dummy/post-dummy01.jpg" alt="" /></figure>
<figure className="image-upload"><img src="../../../assets/img/dummy/post-dummy02.jpg" alt="" /></figure>
<figure className="image-upload"><img src="../../../assets/img/dummy/post-dummy03.jpg" alt="" /></figure>
<figure className="image-upload"><img src="../../../assets/img/dummy/post-dummy04.jpg" alt="" /></figure>
<figure className="image-upload"><img src="../../../assets/img/dummy/post-dummy05.jpg" alt="" /></figure>
</div>
<div className="edit-set edit-set-send">
<label for="allmember_send">
<input className="boolean optional" type="checkbox" name="allmember_send" id="allmember_send" />全員に送信</label>
</div>
<div className="edit-set-mt5 edit-set-send">
<label for="pickup_send">
<input className="boolean optional" type="checkbox" name="pickup_send" id="pickup_send" />選んで送信</label>
</div>
<div className="checkbox-wrap edit-bg">
<div className="checkbox">
<label for="user_name01">
<input className="boolean optional" type="checkbox" name="chk[]" id="user_name01" />田中 達也</label>
</div>
<div className="checkbox">
<label for="user_name02">
<input className="boolean optional" type="checkbox" name="chk[]" id="user_name02" />田中 達也</label>
</div>
<div className="checkbox">
<label for="user_name03">
<input className="boolean optional" type="checkbox" name="chk[]" id="user_name03" />田中 達也</label>
</div>
<div className="checkbox">
<label for="user_name04">
<input className="boolean optional" type="checkbox" name="chk[]" id="user_name04" />田中 達也</label>
</div>
<div className="checkbox">
<label for="user_name05">
<input className="boolean optional" type="checkbox" name="chk[]" id="user_name05" />田中 達也</label>
</div>
</div>
<button type="button" className="btn-edit btn-default btn-h70 btn-r14 btn-yellow">本登録</button>
</form>
</div>
</div>
</article>
</div>
</div>
</div>
</div>
)
}
export default MeetingEdit;

216
backend/resources/js/parent/meeting/index.jsx ノーマルファイル
ファイルの表示

@ -0,0 +1,216 @@
import React, { useEffect, useState } from 'react';
import { CircularProgress } from '@material-ui/core';
import moment from 'moment';
import axios from 'axios';
import { useHistory } from 'react-router-dom'
const Meeting = () => {
const history = useHistory();
const [loading, setLoading] = useState(true);
const [finish, setFinish] = useState(false);
const [completeOfFather, setCompleteOfFather ] = useState(null);
const [inCompleteOfFather, setInCompleteOfFather ] = useState(null);
useEffect(() => {
axios.get('/api/meetings/listOfCompleteOfFather', {params: { father_id: 1 }}).then((response) => {
if(response.data.status_code==200){
console.log(response.data.params);
} else if(response.data.status_code==400){
//TODO
}
setCompleteOfFather(response.data.params);
});
}, []);
useEffect(() => {
axios.get('/api/meetings/listOfIncompleteOfFather', {params: { father_id: 1 }}).then((response) => {
if(response.data.status_code==200){
console.log(response.data.params);
setInCompleteOfFather(response.data.params);
setLoading(false);
} else if(response.data.status_code==400){
//TODO
}
});
}, []);
return (
<div className="l-content">
<div className="l-content__ttl">
<div className="l-content__ttl__left">
<h2>ミーティング一覧</h2>
<div className="p-meetingAdd-btn">
<a
onClick={e => {
e.preventDefault();
history.push({
pathname: '/p-account/meeting/new',
state: {}
});
}}
data-v-ade1d018=""
className="btn-default btn-yellow btn-meeting btn-shadow btn-r8 btn-h48 btn-fz14">
<span>ミーティングを追加</span>
<svg version="1.1" viewBox="0 0 500 500" className="icon svg-icon svg-fill svg-up">
<path fill="#000" stroke="none" pid="0" d="M250 437.6c-16.5 0-30-13.5-30-30V280.1H92.5c-16.5 0-30-13.5-30-30s13.5-30 30-30H220V92.6c0-16.5 13.5-30 30-30s30 13.5 30 30v127.5h127.5c16.5 0 30 13.5 30 30s-13.5 30-30 30H280v127.5c0 16.5-13.5 30-30 30z"></path>
</svg>
</a>
</div>
</div>
<div className="p-notification">
<div className="p-notification-icon">
<div className="p-notification-icon-wrap">
<div className="count">1</div>
<div className="p-notification-icon-bg"></div>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 22.742 19.855" className="icon svg-icon svg-fill svg-y50" >
<g fill="none" stroke="#080808" strokeLinecap="round" strokeLinejoin="round" strokeWidth="1.5" data-name="Icon feather-alert-triangle" transform="translate(0.777 0.75)"><path d="M11.188,5.322,2.6,19.659A2.028,2.028,0,0,0,4.334,22.7H21.51a2.028,2.028,0,0,0,1.734-3.042L14.656,5.322a2.028,2.028,0,0,0-3.468,0Z" data-name="パス 3" transform="translate(-2.328 -4.346)"/><path d="M18,13.5v6.91" data-name="パス 4" transform="translate(-7.406 -8.547)"/><path d="M18,25.5h0" data-name="パス 5" transform="translate(-7.406 -11.2)"/></g>
</svg>
</div>
</div>
</div>
</div>
<div className="l-content-wrap">
<div className="meeting-tab-container">
<div className="meeting-tab-wrap">
<div className="meeting-head">
<input className="tab-switch" id="tab-01" type="radio" name="tab_btn" />
<input className="tab-switch" id="tab-02" type="radio" name="tab_btn" />
<div className="meeting-tab">
<label
onClick={e => {
e.preventDefault();
setFinish(false);
}}
className={`tab-label ${finish ? "" : "is-active"}`}
htmlFor="tab-01">
<span>未完了</span>
</label>
<label
onClick={e => {
e.preventDefault();
setFinish(true);
}}
className={`tab-label ${finish ? "is-active" : ""}`}
htmlFor="tab-02">
<span>完了済み</span>
</label>
</div>
</div>
<div className="meeting-content">
<div className={ `meeting-content-wrap ${!finish ? "is-active" : ""}` } id="item01">
{ !loading ? inCompleteOfFather?.map((item, index) => {
return (
<div className="meeting-item">
<a
className="meeting-link"
onClick={e => {
e.preventDefault();
history.push({
pathname: `/p-account/meeting/detail/${item.id}`,
state: {}
});
}} >
<h3 className="meeting-ttl">{ item.title }</h3>
<p className="meeting-txt">{ item.text }</p>
<time dateTime="2021-07-30" className="meeting-time">
<span className="meeting-date">{ moment(item.updated_at).format('YYYY/MM/DD HH:mm') || '' }</span>
</time>
<div className="meeting-member">
<div className="meeting-member-wrap">
<div data-url="login.html" className="meeting-member-link">
<ul className="meeting-member-count">
<li className="numerator">3</li>
<li className="denominator">4</li>
</ul>
<ul className="meeting-member-list" role="list">
<li className="meeting-member__item" role="listitem">
<div className="avatar">
<img alt="name" className="avatar-img" src="../assets/img/avatar/avatar-sample01@2x.png" />
</div>
</li>
<li className="meeting-member__item" role="listitem">
<div className="avatar">
<img alt="name" className="avatar-img" src="../assets/img/avatar/avatar-sample02@2x.png" />
</div>
</li>
<li className="meeting-member__item" role="listitem">
<div className="avatar">
<img alt="name" className="avatar-img" src="../assets/img/avatar/avatar-sample03@2x.png" />
</div>
</li>
</ul>
</div>
</div>
</div>
</a>
<button type="button" aria-label="お気に入り" data-tooltip="お気に入り" aria-pressed="false" className="icon a-icon like-icon icon-star a-icon-size_medium"></button>
</div>
);
}) : <CircularProgress /> }
</div>
<div className={`meeting-content-wrap ${finish ? "is-active" : ""}`} id="item02">
{ completeOfFather?.length > 0 && completeOfFather.map((item, index2) => {
return (
<div className="meeting-item">
<a
className="meeting-link"
onClick={e => {
e.preventDefault();
history.push({
pathname: `/p-account/meeting/detail/${item.id}`,
state: {}
});
}} >
<h3 className="meeting-ttl">{ item.title }</h3>
<p className="meeting-txt">{ item.text }</p>
<time dateTime="2021-07-30" className="meeting-time">
<span className="meeting-date">{ moment(item.updated_at).format('YYYY/MM/DD HH:mm') || '' }</span>
</time>
<div className="meeting-member">
<div className="meeting-member-wrap">
<div data-url="login.html" className="meeting-member-link">
<ul className="meeting-member-count">
<li className="numerator">3</li>
<li className="denominator">4</li>
</ul>
<ul className="meeting-member-list" role="list">
<li className="meeting-member__item" role="listitem">
<div className="avatar">
<img alt="name" className="avatar-img" src="../assets/img/avatar/avatar-sample01@2x.png" />
</div>
</li>
<li className="meeting-member__item" role="listitem">
<div className="avatar">
<img alt="name" className="avatar-img" src="../assets/img/avatar/avatar-sample02@2x.png" />
</div>
</li>
<li className="meeting-member__item" role="listitem">
<div className="avatar">
<img alt="name" className="avatar-img" src="../assets/img/avatar/avatar-sample03@2x.png" />
</div>
</li>
</ul>
</div>
</div>
</div>
</a>
<button type="button" aria-label="お気に入り" data-tooltip="お気に入り" aria-pressed="false" className="icon a-icon like-icon icon-star a-icon-size_medium"></button>
</div>
);
}) }
</div>
</div>
</div>
</div>
</div>
</div>
)
}
export default Meeting;

61
backend/resources/js/parent/profile/edit.jsx ノーマルファイル
ファイルの表示

@ -0,0 +1,61 @@
import React, { useEffect, useState } from 'react';
const ProfileEdit = () => {
return (
<div className="l-content">
<div className="l-content-w560">
<div className="l-content__ttl">
<div className="l-content__ttl__left">
<h2>プロフィール編集</h2>
</div>
<div className="p-notification">
<div className="p-notification-icon">
<div className="p-notification-icon-wrap">
<div className="count">1</div>
<div className="p-notification-icon-bg"></div>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 22.742 19.855" className="icon svg-icon svg-fill svg-y50" ><g fill="none" stroke="#080808" strokeLinecap="round" strokeLinejoin="round" strokeWidth="1.5" data-name="Icon feather-alert-triangle" transform="translate(0.777 0.75)"><path d="M11.188,5.322,2.6,19.659A2.028,2.028,0,0,0,4.334,22.7H21.51a2.028,2.028,0,0,0,1.734-3.042L14.656,5.322a2.028,2.028,0,0,0-3.468,0Z" data-name="パス 3" transform="translate(-2.328 -4.346)"/><path d="M18,13.5v6.91" data-name="パス 4" transform="translate(-7.406 -8.547)"/><path d="M18,25.5h0" data-name="パス 5" transform="translate(-7.406 -11.2)"/></g></svg>
</div>
</div>
</div>
</div>
<div className="l-content-wrap">
<div className="edit-container">
<div className="edit-wrap">
<div className="edit-content">
<form action="" className="edit-form">
<div className="edit-set">
<label className="control-label" htmlFor="nameSei"></label>
<input type="text" name="nameSei" value="" className="input-default input-nameSei input-h60 input-w480" id="nameSei" />
</div>
<div className="edit-set">
<label className="control-label" htmlFor="nameMei"></label>
<input type="text" name="nameMei" value="" className="input-default input-nameMei input-h60 input-w480" id="nameMei" />
</div>
<div className="edit-set">
<label className="control-label" htmlFor="mail">メールアドレス</label>
<input type="email" name="mail" value="" className="input-default input-mail input-h60 input-w480" id="mail" />
</div>
<div className="edit-set">
<label className="control-label" htmlFor="tel">電話番号</label>
<input type="tel" name="tel" value="" className="input-default input-tel input-h60 input-w480" id="tel" />
</div>
<div className="edit-set">
<label className="control-label" htmlFor="profile_textarea">プロフィール</label>
<textarea name="data[UserProfile][description]" rows="8" className="textarea-default" id="profile_textarea"></textarea>
</div>
<button type="button" className="btn-edit btn-default btn-h70 btn-r14 btn-yellow">プロフィール更新</button>
</form>
</div>
</div>
</div>
</div>
</div>
</div>
)
}
export default ProfileEdit;

126
backend/resources/js/parent/profile/index.jsx ノーマルファイル
ファイルの表示

@ -0,0 +1,126 @@
import React, { useEffect, useState } from 'react';
import axios from 'axios';
import { useHistory } from 'react-router-dom'
const Profile = () => {
const [child, setChild] = useState(null);
const history = useHistory();
useEffect(() => {
axios.get('/api/children/detail/1', {params: { father_id: 1 }}).then((response) => {
if(response.data.status_code==200){
console.log(response.data.params[0]);
setChild(response.data.params[0]);
} else if(response.data.status_code==400){
//TODO
}
});
}, []);
if (!child) return null;
return (
<div className="l-content">
<div className="l-content-w560">
<div className="l-content__ttl">
<div className="l-content__ttl__left">
<h2>プロフィール</h2>
</div>
<div className="p-notification">
<div className="p-notification-icon">
<div className="p-notification-icon-wrap">
<div className="count">1</div>
<div className="p-notification-icon-bg"></div>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 22.742 19.855" className="icon svg-icon svg-fill svg-y50" >
<g fill="none" stroke="#080808" strokeLinecap="round" strokeLinejoin="round" strokeWidth="1.5" data-name="Icon feather-alert-triangle" transform="translate(0.777 0.75)">
<path d="M11.188,5.322,2.6,19.659A2.028,2.028,0,0,0,4.334,22.7H21.51a2.028,2.028,0,0,0,1.734-3.042L14.656,5.322a2.028,2.028,0,0,0-3.468,0Z" data-name="パス 3" transform="translate(-2.328 -4.346)"/>
<path d="M18,13.5v6.91" data-name="パス 4" transform="translate(-7.406 -8.547)"/><path d="M18,25.5h0" data-name="パス 5" transform="translate(-7.406 -11.2)"/>
</g>
</svg>
</div>
</div>
</div>
</div>
<div className="l-content-wrap">
<div className="profile-container">
<div className="profile-wrap">
<div className="profile-content">
<div className="profile-thumb">
{/* <label> */}
<input id="profile-file" type="file" className="profile-thumb-img" />
<img src={ child.image } id="profile-file-preview" className="profile-thumb__image" alt="" />
{/* </label> */}
<div className="profile-camera">
<label className="btn-default btn-camera btn-shadow">
<input id="profile-file" type="file" className="profile-thumb-img" />
<i className="icon icon-camera"></i>
</label>
</div>
</div>
<p className="profile-name">{ child.last_name } { child.first_name }</p>
<div className="profile-info">
<div className="profile-info__item">
<p className="profile-info__icon">
<img src="../assets/img/icon/mail.svg" alt="メール" />
</p>
<p className="txt">{ child.email }</p>
</div>
<div className="profile-info__item">
<p className="profile-info__icon">
<img src="../assets/img/icon/phone.svg" alt="電話" />
</p>
<p className="txt">{ child.tel }</p>
</div>
<div className="profile-info__item">
<p className="txt">{ child.company }</p>
</div>
</div>
<div className="p-profile-btn">
<a
onClick={e => {
e.preventDefault();
history.push({
pathname: '/p-account/profile/edit/1',
state: {}
});
}}
data-v-ade1d018=""
className="btn-default btn-yellow btn-profile btn-r8 btn-h52">
<span>プロフィールを変更する</span>
</a>
</div>
<div className="p-profile-btn">
<a
onClick={e => {
e.preventDefault();
history.push({
pathname: '/p-account/profile/edit/password/1',
state: {}
});
}}
data-v-ade1d018=""
className="btn-default btn-yellow btn-password btn-r8 btn-h52">
<span>パスワードを変更する</span>
</a>
</div>
<div className="p-profile-txtLink">
<button type="button" className="a-icon txt-link">ログアウト</button>
</div>
<div className="p-profile-txtLink">
<button type="button" className="a-icon txt-link">退会する</button>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
)
}
export default Profile;

ファイルの表示

@ -0,0 +1,49 @@
import React, { useEffect, useState } from 'react';
const ProfilePasswordEdit = () => {
return (
<div className="l-content">
<div className="l-content-w560">
<div className="l-content__ttl">
<div className="l-content__ttl__left">
<h2>パスワード編集</h2>
</div>
<div className="p-notification">
<div className="p-notification-icon">
<div className="p-notification-icon-wrap">
<div className="count">1</div>
<div className="p-notification-icon-bg"></div>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 22.742 19.855" className="icon svg-icon svg-fill svg-y50" ><g fill="none" stroke="#080808" strokeLinecap="round" strokeLinejoin="round" strokeWidth="1.5" data-name="Icon feather-alert-triangle" transform="translate(0.777 0.75)"><path d="M11.188,5.322,2.6,19.659A2.028,2.028,0,0,0,4.334,22.7H21.51a2.028,2.028,0,0,0,1.734-3.042L14.656,5.322a2.028,2.028,0,0,0-3.468,0Z" data-name="パス 3" transform="translate(-2.328 -4.346)"/><path d="M18,13.5v6.91" data-name="パス 4" transform="translate(-7.406 -8.547)"/><path d="M18,25.5h0" data-name="パス 5" transform="translate(-7.406 -11.2)"/></g></svg>
</div>
</div>
</div>
</div>
<div className="l-content-wrap">
<section className="edit-container">
<div className="edit-wrap">
<div className="edit-content">
<form action="" className="edit-form">
<div className="edit-set">
<label className="control-label" htmlFor="new_password">パスワード</label>
<input type="text" name="new_password" value="" className="input-default input-new-password input-h60 input-w480" id="new_password" />
</div>
<div className="edit-set">
<label className="control-label" htmlFor="confirm_password">確認用 新しいパスワード</label>
<input type="text" name="confirm_password" value="" className="input-default input-confirm-password input-h60 input-w480" id="confirm_password" />
</div>
<button type="button" className="btn-edit btn-default btn-h70 btn-r14 btn-yellow">パスワード更新</button>
</form>
</div>
</div>
</section>
</div>
</div>
</div>
)
}
export default ProfilePasswordEdit;

ファイルの表示

@ -0,0 +1,44 @@
import React, { useEffect, useState } from 'react';
const ProfileWithdrawal = () => {
return (
<div className="l-content">
<div className="l-content-w560">
<div className="l-content__ttl">
<div className="l-content__ttl__left">
<h2>退会確認</h2>
</div>
<div className="p-notification">
<div className="p-notification-icon">
<div className="p-notification-icon-wrap">
<div className="count">1</div>
<div className="p-notification-icon-bg"></div>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 22.742 19.855" className="icon svg-icon svg-fill svg-y50" ><g fill="none" stroke="#080808" strokeLinecap="round" strokeLinejoin="round" strokeWidth="1.5" data-name="Icon feather-alert-triangle" transform="translate(0.777 0.75)"><path d="M11.188,5.322,2.6,19.659A2.028,2.028,0,0,0,4.334,22.7H21.51a2.028,2.028,0,0,0,1.734-3.042L14.656,5.322a2.028,2.028,0,0,0-3.468,0Z" data-name="パス 3" transform="translate(-2.328 -4.346)"/><path d="M18,13.5v6.91" data-name="パス 4" transform="translate(-7.406 -8.547)"/><path d="M18,25.5h0" data-name="パス 5" transform="translate(-7.406 -11.2)"/></g></svg>
</div>
</div>
</div>
</div>
<div className="l-content-wrap">
<section className="edit-container">
<div className="edit-wrap">
<div className="edit-content">
<form action="" className="edit-form">
<div className="edit-set-bg">
<p>本当に退会してもよろしいでしょうか</p>
</div>
<button type="button" className="btn-edit btn-default btn-h70 btn-r14 btn-yellow">退会する</button>
</form>
</div>
</div>
</section>
</div>
</div>
</div>
)
}
export default ProfileWithdrawal;

ファイルの表示

@ -0,0 +1,44 @@
import React, { useEffect, useState } from 'react';
const ProfileWithdrawalComplete = () => {
return (
<div className="l-content">
<div className="l-content-w560">
<div className="l-content__ttl">
<div className="l-content__ttl__left">
<h2>退会完了</h2>
</div>
<div className="p-notification">
<div className="p-notification-icon">
<div className="p-notification-icon-wrap">
<div className="count">1</div>
<div className="p-notification-icon-bg"></div>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 22.742 19.855" className="icon svg-icon svg-fill svg-y50" ><g fill="none" stroke="#080808" strokeLinecap="round" strokeLinejoin="round" strokeWidth="1.5" data-name="Icon feather-alert-triangle" transform="translate(0.777 0.75)"><path d="M11.188,5.322,2.6,19.659A2.028,2.028,0,0,0,4.334,22.7H21.51a2.028,2.028,0,0,0,1.734-3.042L14.656,5.322a2.028,2.028,0,0,0-3.468,0Z" data-name="パス 3" transform="translate(-2.328 -4.346)"/><path d="M18,13.5v6.91" data-name="パス 4" transform="translate(-7.406 -8.547)"/><path d="M18,25.5h0" data-name="パス 5" transform="translate(-7.406 -11.2)"/></g></svg>
</div>
</div>
</div>
</div>
<div className="l-content-wrap">
<section className="edit-container">
<div className="edit-wrap">
<div className="edit-content">
<div className="edit-set-bg">
<p>退会完了しました<br />今後とも危機管理をよろしくお願いいたします</p>
</div>
<div className="edit-txtLink">
<button type="button" className="a-icon txt-link">トップページへ戻る</button>
</div>
</div>
</div>
</section>
</div>
</div>
</div>
)
}
export default ProfileWithdrawalComplete;

205
backend/resources/js/parent/search/index.jsx ノーマルファイル
ファイルの表示

@ -0,0 +1,205 @@
import React, { useEffect, useState } from 'react';
import { CircularProgress } from '@material-ui/core';
import Notification from '../../component/notification';
import moment from 'moment';
import axios from 'axios';
import { useHistory } from 'react-router-dom'
const Search = () => {
const history = useHistory();
const [loading, setLoading] = useState(false);
const [keyword, setKeyword] = useState('');
const [finish, setFinish] = useState(false);
const [completeOfFather, setCompleteOfFather ] = useState(null);
const [inCompleteOfFather, setInCompleteOfFather ] = useState(null);
// useEffect(() => {
// axios.get('/api/meetings/searchOfCompleteOfFather', {params: { father_id: 1, keyword: '' }}).then((response) => {
// if(response.data.status_code==200){
// console.log(response.data.params);
// setCompleteOfFather(response.data.params);
// } else if(response.data.status_code==400){
// //TODO
// }
// });
// }, []);
// useEffect(() => {
// axios.get('/api/meetings/searchOfIncompleteOfFather', {params: { father_id: 1, keyword: '' }}).then((response) => {
// if(response.data.status_code==200){
// console.log(response.data.params);
// setInCompleteOfFather(response.data.params);
// } else if(response.data.status_code==400){
// //TODO
// }
// setLoading(false);
// });
// }, []);
async function search() {
setLoading(true);
finish
? axios.get('/api/meetings/searchOfCompleteOfFather', {params: { father_id: 1, keyword: keyword }}).then((response) => {
if(response.data.status_code==200){
console.log(response.data.params);
setCompleteOfFather(response.data.params);
} else if(response.data.status_code==400){
//TODO
}
setLoading(false);
})
: axios.get('/api/meetings/searchOfIncompleteOfFather', {params: { father_id: 1, keyword: keyword }}).then((response) => {
if(response.data.status_code==200){
console.log(response.data.params);
setInCompleteOfFather(response.data.params);
} else if(response.data.status_code==400){
//TODO
}
setLoading(false);
});
};
return (
<div className="l-content">
<div className="l-content__ttl">
<div className="l-content__ttl__left">
<h2>検索</h2>
</div>
<Notification/>
</div>
<div className="l-content-wrap">
<section className="meeting-tab-container meeting-search">
<div className="meeting-tab-wrap">
<div className="meeting-head">
<form action="" className="meeting-form">
<label className="control-label" htmlFor="keyword">キーワード</label>
<input type="search" name="keyword" value={keyword} onChange={e=> setKeyword(e.target.value)} className="input-default input-keyword input-h56 input-w380" id="keyword" />
<i className="icon icon-search" onClick={search} ></i>
</form>
<input className="tab-switch" id="tab-01" type="radio" name="tab_btn" />
<input className="tab-switch" id="tab-02" type="radio" name="tab_btn" />
<div className="meeting-tab">
<label
onClick={e => {
e.preventDefault();
setFinish(false);
}}
className={`tab-label ${finish ? "" : "is-active"}`}
htmlFor="tab-01">
<span>未完了</span>
</label>
<label
onClick={e => {
e.preventDefault();
setFinish(true);
}}
className={`tab-label ${finish ? "is-active" : ""}`}
htmlFor="tab-02">
<span>完了済み</span>
</label>
</div>
</div>
<div className="meeting-content">
<div className={ `meeting-content-wrap ${!finish ? "is-active" : ""}` } id="item01">
{ !loading ? inCompleteOfFather?.map((item, index) => {
return (
<div className="meeting-item">
<a
className="meeting-link"
onClick={e => {
e.preventDefault();
history.push({
pathname: `/p-account/meeting/detail/${item.id}`,
state: {}
});
}} >
<h3 className="meeting-ttl">{ item.title }</h3>
<p className="meeting-txt">{ item.text }</p>
<time dateTime="2021-07-30" className="meeting-time">
<span className="meeting-date">{ moment(item.updated_at).format('YYYY/MM/DD HH:mm') || '' }</span>
</time>
<div className="meeting-member">
<div className="meeting-member-wrap">
<div data-url="login.html" className="meeting-member-link">
<ul className="meeting-member-count">
<li className="numerator">3</li>
<li className="denominator">4</li>
</ul>
<ul className="meeting-member-list" role="list">
{ item?.meeting_image.map((v, inx) => {
return (<li className="meeting-member__item" role="listitem">
<div className="avatar">
<img alt="name" className="avatar-img" src={v.image} />
</div>
</li>);
}) }
</ul>
</div>
</div>
</div>
</a>
<button type="button" aria-label="お気に入り" data-tooltip="お気に入り" aria-pressed="false" className="icon a-icon like-icon icon-star a-icon-size_medium"></button>
</div>
);
}) : <CircularProgress /> }
</div>
<div className={`meeting-content-wrap ${finish ? "is-active" : ""}`} id="item02">
{ completeOfFather?.length > 0 && completeOfFather.map((item, index2) => {
return (
<div className="meeting-item">
<a
className="meeting-link"
onClick={e => {
e.preventDefault();
history.push({
pathname: `/p-account/meeting/detail/${item.id}`,
state: {}
});
}} >
<h3 className="meeting-ttl">{ item.title }</h3>
<p className="meeting-txt">{ item.text }</p>
<time dateTime="2021-07-30" className="meeting-time">
<span className="meeting-date">{ moment(item.updated_at).format('YYYY/MM/DD HH:mm') || '' }</span>
</time>
<div className="meeting-member">
<div className="meeting-member-wrap">
<div data-url="login.html" className="meeting-member-link">
<ul className="meeting-member-count">
<li className="numerator">3</li>
<li className="denominator">4</li>
</ul>
<ul className="meeting-member-list" role="list">
{ item?.meeting_image.map((v, inx2) => {
return (<li className="meeting-member__item" role="listitem">
<div className="avatar">
<img alt="name" className="avatar-img" src={v.image} />
</div>
</li>);
}) }
</ul>
</div>
</div>
</div>
</a>
<button type="button" aria-label="お気に入り" data-tooltip="お気に入り" aria-pressed="false" className="icon a-icon like-icon icon-star a-icon-size_medium"></button>
</div>
);
}) }
</div>
</div>
</div>
</section>
</div>
</div>
)
}
export default Search;

ファイルの表示

@ -3,5 +3,5 @@
@section('title', 'パスワード再登録完了')
@section('content')
<div id="c-app"></div>
<div id="c-auth"></div>
@endsection

ファイルの表示

@ -3,5 +3,5 @@
@section('title', 'パスワードを忘れた方へ')
@section('content')
<div id="c-app"></div>
<div id="c-auth"></div>
@endsection

ファイルの表示

@ -3,5 +3,5 @@
@section('title', 'パスワード再登録')
@section('content')
<div id="c-app"></div>
<div id="c-auth"></div>
@endsection

ファイルの表示

@ -3,5 +3,5 @@
@section('title', 'ログイン')
@section('content')
<div id="c-app"></div>
<div id="c-auth"></div>
@endsection

ファイルの表示

@ -3,7 +3,7 @@
@section('title', '本登録完了')
@section('content')
<div id="c-app"></div>
<div id="c-auth"></div>
@endsection

ファイルの表示

@ -3,7 +3,7 @@
@section('title', '本登録エラー')
@section('content')
<div id="c-app"></div>
<div id="c-auth"></div>
@endsection

ファイルの表示

@ -3,5 +3,5 @@
@section('title', '本登録')
@section('content')
<div id="c-app"></div>
<div id="c-auth"></div>
@endsection

ファイルの表示

@ -3,5 +3,5 @@
@section('title', '仮登録')
@section('content')
<div id="c-app"></div>
<div id="c-auth"></div>
@endsection

ファイルの表示

@ -16,16 +16,17 @@
</head>
<body>
<main class="l-container meeting-consent">
@yield('content')
<!-- <main class="l-container meeting-consent">
<div class="l-content">
@yield('content')
</div>
@include('c_account.side')
</main>
</main> -->
</body>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
@stack('js')
<script src="{{ asset('js/app.js') }}"></script>
@stack('js')
</html>

ファイルの表示

@ -4,15 +4,6 @@
@section('content')
<div id="c-app"></div>
<input type="hidden" id="c_router" value="meeting" />
<input type="hidden" id="child_id" value="1" />
@endsection
@push('js')
<script>
$('.-meeting').addClass('nav-active');
$('.-search').removeClass('nav-active');
$('.-childinfo').removeClass('nav-active');
$('.-profile').removeClass('nav-active');
$('.-logout').removeClass('nav-active');
</script>
@endpush

ファイルの表示

@ -4,15 +4,6 @@
@section('content')
<div id="c-app"></div>
<input type="hidden" id="c_router" value="meeting" />
<input type="hidden" id="child_id" value="1" />
@endsection
@push('js')
<script>
$('.-meeting').addClass('nav-active');
$('.-search').removeClass('nav-active');
$('.-childinfo').removeClass('nav-active');
$('.-profile').removeClass('nav-active');
$('.-logout').removeClass('nav-active');
</script>
@endpush

ファイルの表示

@ -4,14 +4,6 @@
@section('content')
<div id="c-app"></div>
<input type="hidden" id="c_router" value="parent" />
<input type="hidden" id="child_id" value="1" />
@endsection
@push('js')
<script>
$('.-meeting').removeClass('nav-active');
$('.-search').removeClass('nav-active');
$('.-childinfo').addClass('nav-active');
$('.-profile').removeClass('nav-active');
$('.-logout').removeClass('nav-active');
</script>
@endpush

ファイルの表示

@ -4,14 +4,6 @@
@section('content')
<div id="c-app"></div>
<input type="hidden" id="c_router" value="parent" />
<input type="hidden" id="child_id" value="1" />
@endsection
@push('js')
<script>
$('.-meeting').removeClass('nav-active');
$('.-search').removeClass('nav-active');
$('.-childinfo').addClass('nav-active');
$('.-profile').removeClass('nav-active');
$('.-logout').removeClass('nav-active');
</script>
@endpush

ファイルの表示

@ -4,15 +4,6 @@
@section('content')
<div id="c-app"></div>
<input type="hidden" id="c_router" value="profile" />
<input type="hidden" id="child_id" value="1" />
@endsection
@push('js')
<script>
$('.-meeting').removeClass('nav-active');
$('.-search').removeClass('nav-active');
$('.-childinfo').removeClass('nav-active');
$('.-profile').addClass('nav-active');
$('.-logout').removeClass('nav-active');
</script>
@endpush

ファイルの表示

@ -4,15 +4,6 @@
@section('content')
<div id="c-app"></div>
<input type="hidden" id="c_router" value="profile" />
<input type="hidden" id="child_id" value="1" />
@endsection
@push('js')
<script>
$('.-meeting').removeClass('nav-active');
$('.-search').removeClass('nav-active');
$('.-childinfo').removeClass('nav-active');
$('.-profile').addClass('nav-active');
$('.-logout').removeClass('nav-active');
</script>
@endpush

ファイルの表示

@ -4,15 +4,6 @@
@section('content')
<div id="c-app"></div>
<input type="hidden" id="c_router" value="profile" />
<input type="hidden" id="child_id" value="1" />
@endsection
@push('js')
<script>
$('.-meeting').removeClass('nav-active');
$('.-search').removeClass('nav-active');
$('.-childinfo').removeClass('nav-active');
$('.-profile').addClass('nav-active');
$('.-logout').removeClass('nav-active');
</script>
@endpush

ファイルの表示

@ -4,14 +4,6 @@
@section('content')
<div id="c-app"></div>
<input type="hidden" id="c_router" value="profile" />
<input type="hidden" id="child_id" value="1" />
@endsection
@push('js')
<script>
$('.-meeting').removeClass('nav-active');
$('.-search').removeClass('nav-active');
$('.-childinfo').removeClass('nav-active');
$('.-profile').addClass('nav-active');
$('.-logout').removeClass('nav-active');
</script>
@endpush

ファイルの表示

@ -4,14 +4,7 @@
@section('content')
<div id="c-app"></div>
<input type="hidden" id="c_router" value="search" />
<input type="hidden" id="child_id" value="1" />
@endsection
@push('js')
<script>
$('.-meeting').removeClass('nav-active');
$('.-search').addClass('nav-active');
$('.-childinfo').removeClass('nav-active');
$('.-profile').removeClass('nav-active');
$('.-logout').removeClass('nav-active');
</script>
@endpush

ファイルの表示

@ -34,12 +34,24 @@
<link href="{{ asset('css/app.css') }}" rel="stylesheet">
<link rel="stylesheet" href="{{ asset('assets/css/style.css') }}" />
<link rel="preload" href="{{ asset('assets/css/style.css') }}" as="style">
</head>
<body class="">
<main class="l-single-main l-sign-up">
<div id="c-app"></div>
<div class="l-centeringbox">
<div class="l-centeringbox-wrap">
<div class="l-single-container login-panel">
<div class="l-single-inner">
<h1 class="ft-xs-20">退会完了</h1>
<div class="edit-set-bg u-mb30-lose u-mb25-gain ft-xs-13">
退会完了しました。<br/>
今後とも、危機管理をよろしくお願いいたします。
</div>
</div>
</div>
</div>
</div>
</main>
</body>

ファイルの表示

@ -0,0 +1,7 @@
@extends('p_account.layout')
@section('title', '親')
@section('content')
<div id="p-app"></div>
@endsection

ファイルの表示

@ -0,0 +1,23 @@
<!doctype html>
<html lang="{{ str_replace('_', '-', app()->getLocale()) }}">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="csrf-token" content="{{ csrf_token() }}">
<title>@yield('title')</title>
<link rel="dns-prefetch" href="//fonts.gstatic.com">
<link href="https://use.fontawesome.com/releases/v5.6.1/css/all.css" rel = "stylesheet">
<link href="https://fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet">
<link href="https://fonts.googleapis.com/css?family=Nunito" rel="stylesheet">
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.0.2/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-EVSTQN3/azprG1Anm3QDgpJLIm9Nao0Yz1ztcQTwFspd3yD65VohhpuuCOmLASjC" crossorigin="anonymous">
<link href="{{ asset('assets/css/style.css') }}" rel="stylesheet">
</head>
<body class="">
@yield('content')
<script src="{{ asset('js/app.js') }}"></script>
</body>
</html>

ファイルの表示

@ -82,7 +82,7 @@ Route::delete('/children/delete/{child_id}', '\App\Http\Controllers\Api\Children
// FatherRelationsController
Route::post('/father-relations/register/', '\App\Http\Controllers\Api\FatherRelationsController@register');
Route::put('/father-relations/updateHireDate/{child_id}', '\App\Http\Controllers\Api\FatherRelationsController@updateHireDate');
Route::post('/father-relations/updateHireDate/{child_id}', '\App\Http\Controllers\Api\FatherRelationsController@updateHireDate');
Route::delete('/father-relations/deleteRelationFather/{father_id}', '\App\Http\Controllers\Api\FatherRelationsController@deleteRelationFather');
Route::delete('/father-relations/deleteRelationChild/{child_id}', '\App\Http\Controllers\Api\FatherRelationsController@deleteRelationChild');

ファイルの表示

@ -17,6 +17,8 @@ Route::get('/', function () {
return view('welcome');
});
Route::get('/p-account', function () {return view('p_account.index');});
Route::get('/contact-us', function () { return view('pages.contact.index'); });
Route::get('/contact-us/complete/', function () { return view('pages.contact.complete'); });
Route::get('/unknown-error ', function () { return view('pages.contact.unknown_error'); });