fixed css & size & ... in admin

このコミットが含まれているのは:
dragon1211 2021-11-17 18:04:35 -08:00
コミット 12c23c0d42
18個のファイルの変更949行の追加1136行の削除

ファイルの表示

@ -11313,59 +11313,59 @@ input[type=date].hide-calender::-webkit-inner-spin-button, input[type=date].hide
}
.ft-12 {
font-size: 12px;
font-size: 12px !important;
}
.ft-13 {
font-size: 13px;
font-size: 13px !important;
}
.ft-14 {
font-size: 14px;
font-size: 14px !important;
}
.ft-15 {
font-size: 15px;
font-size: 15px !important;
}
.ft-16 {
font-size: 16px;
font-size: 16px !important;
}
.ft-17 {
font-size: 17px;
font-size: 17px !important;
}
.ft-18 {
font-size: 18px;
font-size: 18px !important;
}
.ft-19 {
font-size: 19px;
font-size: 19px !important;
}
.ft-20 {
font-size: 20px;
font-size: 20px !important;
}
.ft-22 {
font-size: 22px;
font-size: 22px !important;
}
.ft-25 {
font-size: 25px;
font-size: 25px !important;
}
.ft-30 {
font-size: 30px;
font-size: 30px !important;
}
.ft-35 {
font-size: 35px;
font-size: 35px !important;
}
.ft-40 {
font-size: 40px;
font-size: 40px !important;
}
@media (max-width: 991.98px) {
@ -12294,10 +12294,17 @@ a {
height: 30px !important;
}
.p-article__txt {
.p-article__txt, .profile-info__item .txt {
white-space: pre-wrap;
}
.meeting-txt {
-webkit-box-orient: vertical;
overflow: hidden;
display: -webkit-box;
-webkit-line-clamp: 2;
}
@media screen and (min-width: 1068px) {
.p-meetingAdd-btn {
width: 200px !important;
@ -12320,6 +12327,13 @@ a {
::-webkit-scrollbar {
display: none;
}
.search-item:first-child {
border-top: none !important;
}
.search-item:last-child {
border-bottom: none !important;
}
}
@media (max-width: 575.98px) {
.l-content__ttl h2 {

1163
backend/public/js/app.js vendored

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

ファイルの表示

@ -16,24 +16,27 @@ const ChildDetail = (props) => {
const history = useHistory();
const [image, setImage] = useState('');
const [open, setOpen] = useState(false);
const [loaded, setLoaded] = useState(false);
const [submit, setSubmit] = useState(false);
const [child, setChild] = useState(null);
const [_400error, set400Error] = useState('');
const [_422errors, set422Errors] = useState({ image: '' });
const [_success_delete, setSuccessDelete] = useState('');
const [_success_update_image, setSuccessUpdateImage] = useState('');
const [_success, setSuccess] = useState(props.history.location.state);
const [show_confirm_modal, setShowConfirmModal] = useState(false);
useEffect(() => {
setLoaded(false);
axios.get(`/api/admin/children/detail/${props.match.params?.child_id}`)
.then(response => {
setLoaded(true);
if(response.data.status_code==200){
setChild(response.data.params);
setImage(response.data.params.image);
switch(response.data.status_code){
case 200:{
setChild(response.data.params);
setImage(response.data.params.image);
break;
}
case 400: set400Error('失敗しました。'); break;
}
})
},[]);
@ -50,7 +53,7 @@ const ChildDetail = (props) => {
switch(response.data.status_code){
case 200: {
setImage(reader.result);
setSuccessUpdateImage(response.data.success_messages);
setSuccess(response.data.success_messages);
break;
}
case 400: set400Error(response.data.error_messages); break;
@ -61,30 +64,20 @@ const ChildDetail = (props) => {
};
async function openModal() {
setOpen(true);
};
async function closeModal() {
setOpen(false);
};
async function handleAcceptDelete() {
try {
setSubmit(true);
axios.delete(`/api/admin/children/delete/${props.match.params?.child_id}`)
.then(response => {
closeModal();
setSubmit(false);
if(response.data.status_code == 200){
setSuccessDelete('削除に成功しました!');
} else {
set400Error("削除に失敗しました。");
setSubmit(true);
axios.delete(`/api/admin/children/delete/${props.match.params?.child_id}`)
.then(response => {
setShowConfirmModal(false);
setSubmit(false);
switch(response.data.status_code){
case 200:{
history.push({pathname: "/admin/child", state: "削除に成功しました!"});
break;
}
});
} catch (error) {
console.log('error', error);
}
case 400: set400Error("削除に失敗しました。"); break;
}
});
};
@ -103,7 +96,7 @@ const ChildDetail = (props) => {
<div className="profile-wrap position-relative" style={{ minHeight:'500px'}}>
{
!loaded &&
<CircularProgress color="secondary" style={{top:'30%', left:'calc(50% - 22px)', color:'green', position:'absolute'}}/>
<CircularProgress className="css-loader"/>
}
{
loaded &&
@ -116,7 +109,6 @@ const ChildDetail = (props) => {
<label htmlFor="avatar" className='avatar-label'>
<IconButton color="primary" aria-label="upload picture" component="span" className="bg-yellow shadow-sm w-50-px h-50-px">
<PhotoCameraOutlinedIcon style={{width:'25px', height:'25px', color:'black'}}/>
{/* <img src="/assets/img/icon/camera.svg" width="20" height="20"/> */}
</IconButton>
</label>
<img src={image} className="avatar-img" alt="avatar-img"/>
@ -128,8 +120,8 @@ const ChildDetail = (props) => {
</span>
}
</div>
<p className="profile-name ft-xs-14">{`${child.first_name} ${child.last_name}`}</p>
<div className="profile-info ft-xs-14">
<p className="profile-name ft-18 ft-xs-16">{`${child.first_name} ${child.last_name}`}</p>
<div className="profile-info ft-18 ft-xs-16">
<div className="profile-info__item">
<p className="profile-info__icon">
<img src="/assets/img/icon/person-pin.svg" alt="Person"/>
@ -161,26 +153,26 @@ const ChildDetail = (props) => {
</div>
<div className="p-profile-btn">
<Link className="btn-default btn-yellow btn-profile btn-r8 btn-h52 h-xs-45-px"
<Link className="btn-default btn-yellow btn-profile btn-r8 btn-h52 h-xs-60-px"
to = {`/admin/child/edit/${props.match.params?.child_id}`}
>
<span className="ft-18 ft-xs-14">プロフィールを変更する</span>
<span className="ft-18 ft-xs-16">プロフィールを変更する</span>
</Link>
</div>
<div className="p-profile-btn">
<Link className="btn-default btn-yellow btn-password btn-r8 btn-h52 h-xs-45-px"
<Link className="btn-default btn-yellow btn-password btn-r8 btn-h52 h-xs-60-px"
to = {`/admin/child/edit/password/${props.match.params?.child_id}`}
>
<span className="ft-18 ft-xs-14">パスワードを変更する</span>
<span className="ft-18 ft-xs-16">パスワードを変更する</span>
</Link>
</div>
<div className="p-profile-txtLink">
<a className="btn-default btn-password btn-r8 btn-h52 h-xs-45-px"
onClick={openModal}
<a className="btn-default btn-password btn-r8 btn-h52 h-xs-60-px"
onClick={()=>setShowConfirmModal(true)}
>
<span className="ft-xs-14">削除する</span>
<span className="ft-xs-16">削除する</span>
</a>
</div>
</div>
@ -193,27 +185,18 @@ const ChildDetail = (props) => {
</div>
</div>
<ModalConfirm
show={open}
show={show_confirm_modal}
message={"本当に削除しても\nよろしいでしょうか?"}
handleClose={closeModal}
handleClose={()=>setShowConfirmModal(false)}
handleAccept={handleAcceptDelete}
loading={submit}
/>
{
_400error && <Alert type="fail" hide={()=>set400Error('')}>{_400error}</Alert>
}
{
_success_delete &&
<Alert type="success"
hide={()=>
history.push({
pathname: "/admin/child",
state: {}
})}>{_success_delete}</Alert>
}
{ _success_update_image &&
<Alert type="success" hide={()=>setSuccessUpdateImage('')}>
{_success_update_image}
{ _success &&
<Alert type="success" hide={()=>setSuccess('')}>
{_success}
</Alert>
}
</div>

ファイルの表示

@ -50,6 +50,9 @@ const ChildEdit = (props) => {
setCompany(child.company);
}
}
else {
set400error("失敗しました。");
}
})
},[]);
@ -77,7 +80,12 @@ const ChildEdit = (props) => {
.then(response => {
setSubmit(false);
switch(response.data.status_code){
case 200: setSuccess(response.data.success_messages); break;
case 200: {
history.push({
pathname: `/admin/child/detail/${props.match.params?.child_id}`,
state: response.data.success_messages});
break;
}
case 400: set400Error(response.data.error_messages); break;
case 422: set422Errors(response.data.error_messages); break;
}
@ -96,104 +104,95 @@ const ChildEdit = (props) => {
</div>
<div className="l-content-wrap">
<section className="profile-container position-relative">
<section className="edit-container">
{
!loaded &&
<CircularProgress color="secondary" style={{top:'30%', left:'calc(50% - 22px)', color:'green', position:'absolute', zIndex:'10'}}/>
<CircularProgress className="css-loader"/>
}
<div className="profile-wrap">
<div className="mx-5">
<form onSubmit={handleSubmit} noValidate>
{
loaded &&
<div className="edit-wrap">
<div className="edit-content">
<form onSubmit={handleSubmit} className="edit-form">
<div className="edit-set">
<label htmlFor="identity" className="control-label ft-12"> ID </label>
<input type="text" name="identity" id="identity" className={`input-default input-nameSei input-h60 ${ _422errors.identity && "is-invalid c-input__target" }`} value={identity} onChange={e=>setIdentity(e.target.value)}/>
{
_422errors.identity &&
<span className="l-alert__text--error ft-16 ft-md-14">
{ _422errors.identity }
</span>
}
</div>
<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 input-h60 ${ _422errors.first_name && "is-invalid c-input__target" }`} value={first_name} onChange={e=>setFirstName(e.target.value)}/>
{
_422errors.first_name &&
<span className="l-alert__text--error ft-16 ft-md-14">
{ _422errors.first_name }
</span>
}
</div>
<div className="edit-set">
<label htmlFor="identity" className="control-label ft-12"> ID </label>
<input type="text" name="identity" id="identity" className={`input-default input-nameSei input-h60 ${ _422errors.identity && "is-invalid c-input__target" }`} value={identity} onChange={e=>setIdentity(e.target.value)}/>
{
_422errors.identity &&
<span className="l-alert__text--error ft-16 ft-md-14">
{ _422errors.identity }
</span>
}
</div>
<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 input-h60 ${ _422errors.first_name && "is-invalid c-input__target" }`} value={first_name} onChange={e=>setFirstName(e.target.value)}/>
{
_422errors.first_name &&
<span className="l-alert__text--error ft-16 ft-md-14">
{ _422errors.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 input-h60 ${ _422errors.last_name && "is-invalid c-input__target" }`} value={last_name} onChange={e=>setLastName(e.target.value)}/>
{
_422errors.last_name &&
<span className="l-alert__text--error ft-16 ft-md-14">
{ _422errors.last_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 input-h60 ${ _422errors.last_name && "is-invalid c-input__target" }`} value={last_name} onChange={e=>setLastName(e.target.value)}/>
{
_422errors.last_name &&
<span className="l-alert__text--error ft-16 ft-md-14">
{ _422errors.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 input-h60 ${ _422errors.email && "is-invalid c-input__target" }`} value={email} onChange={e=>setEmail(e.target.value)}/>
{
_422errors.email &&
<span className="l-alert__text--error ft-16 ft-md-14">
{ _422errors.email }
</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 input-h60 ${ _422errors.email && "is-invalid c-input__target" }`} value={email} onChange={e=>setEmail(e.target.value)}/>
{
_422errors.email &&
<span className="l-alert__text--error ft-16 ft-md-14">
{ _422errors.email }
</span>
}
</div>
<div className="edit-set">
<label htmlFor="tel" className="control-label ft-12"> 電話番号 </label>
<input type="tel" name="tel" id="tel" className = {`input-default input-nameSei input-h60 ${ _422errors.tel && "is-invalid c-input__target" }`} value={tel} onChange={e=>setTelephone(e.target.value)}/>
{
_422errors.tel &&
<span className="l-alert__text--error ft-16 ft-md-14">
{ _422errors.tel }
</span>
}
</div>
<div className="edit-set">
<label htmlFor="tel" className="control-label ft-12"> 電話番号 </label>
<input type="tel" name="tel" id="tel" className = {`input-default input-nameSei input-h60 ${ _422errors.tel && "is-invalid c-input__target" }`} value={tel} onChange={e=>setTelephone(e.target.value)}/>
{
_422errors.tel &&
<span className="l-alert__text--error ft-16 ft-md-14">
{ _422errors.tel }
</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 ${ _422errors.company && "is-invalid c-input__target" }`} value={company} onChange={e=>setCompany(e.target.value)}/>
{
_422errors.company &&
<span className="l-alert__text--error ft-16 ft-md-14">
{ _422errors.company }
</span>
}
</div>
<div className="mt-5">
<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 ${ _422errors.company && "is-invalid c-input__target" }`} value={company} onChange={e=>setCompany(e.target.value)}/>
{
_422errors.company &&
<span className="l-alert__text--error ft-16 ft-md-14">
{ _422errors.company }
</span>
}
</div>
<LoadingButton type="submit" fullWidth
loading={submit}
className="btn-edit btn-default btn-h60 bg-yellow rounded-15">
<span className={`ft-18 font-weight-bold ${!submit && 'text-black'}`}>プロフィールを更新</span>
className="btn-edit btn-default btn-h75 bg-yellow rounded-20">
<span className={`ft-18 ft-xs-16 font-weight-bold ${!submit && 'text-black'}`}>プロフィールを更新</span>
</LoadingButton>
</div>
{
_400error && <Alert type="fail" hide={()=>set400Error('')}>{_400error}</Alert>
}
{
_success &&
<Alert type="success"
hide={()=>
history.push({
pathname: `/admin/child/detail/${props.match.params?.child_id}`,
state: {}
})}>{_success}</Alert>
}
</form>
{ _400error && <Alert type="fail" hide={()=>set400Error('')}> {_400error} </Alert> }
{ _success && <Alert type="success" hide={()=>setSuccess('')}> {_success} </Alert> }
</form>
</div>
</div>
</div>
}
</section>
</div>
</div>

ファイルの表示

@ -6,11 +6,12 @@ import { useHistory, Link } from 'react-router-dom';
import IconButton from '@mui/material/IconButton';
import SearchIcon from '@mui/icons-material/Search';
import InfiniteScroll from "react-infinite-scroll-component";
import Alert from '../../component/alert';
const INFINITE = 10;
const SCROLL_DELAY_TIME = 1500;
const Child = () => {
const Child = (props) => {
const [keyword, setKeyword] = useState('')
const [loaded, setLoaded] = useState(false);
@ -19,6 +20,7 @@ const Child = () => {
const [_422errors, set422errors] = useState({keyword:''});
const [_400error, set400error] = useState('');
const [_success, setSuccess] = useState(props.history.location.state);
useEffect(() => {
setLoaded(false);
@ -32,6 +34,9 @@ const Child = () => {
setFetchChildrenList(response.data.params.slice(0, INFINITE));
else setFetchChildrenList(response.data.params.slice(0, len));
}
else {
set400error("失敗しました。");
}
});
}, []);
@ -96,10 +101,10 @@ const Child = () => {
</div>
<div className="search-wrap">
<div className="search-content position-relative" style={{minHeight:'100px'}}>
<div className="search-content position-relative">
{
!loaded &&
<CircularProgress color="secondary" style={{top:'20px', left:'calc(50% - 22px)', color:'green', position:'absolute'}}/>
<CircularProgress className="css-loader"/>
}
{
loaded &&
@ -127,7 +132,7 @@ const Child = () => {
<img alt="name" className="avatar-img" src={ child.image } />
</div>
<div className="user-info">
<p className="user-name mb-1 font-weight-bold">{ child.last_name } { child.first_name }</p>
<p className="user-name mb-1 font-weight-bold">{`${child.first_name} ${child.last_name}`}</p>
<p className="user-tel">{ child.tel }</p>
</div>
</div>
@ -139,6 +144,8 @@ const Child = () => {
}
</div>
</div>
{ _400error && <Alert type="fail" hide={()=>set400Error('')}> {_400error} </Alert> }
{ _success && <Alert type="success" hide={()=>setSuccess('')}> {_success} </Alert> }
</section>
</div>
</div>

ファイルの表示

@ -39,7 +39,12 @@ const ChildPasswordEdit = (props) => {
.then(response => {
setSubmit(false);
switch(response.data.status_code){
case 200: setSuccess(response.data.success_messages); break;
case 200: {
history.push({
pathname: `/admin/child/detail/${props.match.params?.child_id}`,
state: response.data.success_messages});
break;
}
case 400: set400Error(response.data.error_messages); break;
case 422: set422Errors(response.data.error_messages); break;
}
@ -57,10 +62,10 @@ const ChildPasswordEdit = (props) => {
</div>
<div className="l-content-wrap">
<section className="profile-container">
<div className="profile-wrap">
<div className="mx-5">
<form onSubmit={handleSubmit} noValidate>
<section className="edit-container">
<div className="edit-wrap">
<div className="edit-content">
<form onSubmit={handleSubmit} className="edit-form">
<div className="edit-set">
<label htmlFor="password" className="control-label ft-14 ft-md-12">
@ -90,25 +95,13 @@ const ChildPasswordEdit = (props) => {
}
</div>
<div className="mt-5">
<LoadingButton type="submit" fullWidth
loading = {submit}
className="btn-edit btn-default btn-h60 bg-yellow rounded-15">
<span className={`ft-18 font-weight-bold ${!submit && 'text-black'}`}>パスワードを更新</span>
</LoadingButton>
</div>
{
_400error && <Alert type="fail" hide={()=>set400Error('')}>{_400error}</Alert>
}
{
_success &&
<Alert type="success"
hide={()=>
history.push({
pathname: `/admin/child/detail/${props.match.params?.child_id}`,
state: {}
})}>{_success}</Alert>
}
<LoadingButton type="submit" fullWidth
loading = {submit}
className="btn-edit btn-default btn-h75 bg-yellow rounded-20">
<span className={`ft-18 ft-xs-16 font-weight-bold ${!submit && 'text-black'}`}>パスワードを更新</span>
</LoadingButton>
{ _400error && <Alert type="fail" hide={()=>set400Error('')}> {_400error} </Alert> }
{ _success && <Alert type="success" hide={()=>setSuccess('')}> {_success} </Alert> }
</form>
</div>

ファイルの表示

@ -1,5 +1,5 @@
import React, { useEffect, useState } from 'react';
import { useHistory } from 'react-router-dom'
import { useEffect, useState } from 'react';
import { useHistory, Link } from 'react-router-dom';
import moment from 'moment';
import axios from 'axios';
import { CircularProgress } from '@material-ui/core';
@ -13,17 +13,17 @@ import ModalConfirm from '../../component/modal_confirm';
const MeetingDetail = (props) => {
const history = useHistory();
const [open, setOpen] = useState(false);
const [loaded, setLoaded] = useState(false);
const [submit, setSubmit] = useState(false);
const [meeting, setMeeting] = useState(null);
const [thumbnail, setThumbnail] = useState('');
const [_400error, set400Error] = useState('');
const [_success, setSuccess] = useState('');
const [showPdf, setShowPdf] = useState(false);
const [showMemo, setShowMemo] = useState(false);
const [_400error, set400Error] = useState('');
const [_success, setSuccess] = useState(props.history.location.state);
const [show_confirm_modal, setShowConfirmModal] = useState(false);
const [show_pdf_modal, setShowPDFModal] = useState(false);
const [show_memo_modal, setShowMemoModal] = useState(false);
useEffect(() => {
@ -43,34 +43,28 @@ const MeetingDetail = (props) => {
}
setMeeting({...list, denominator:total, numerator:num});
if(list.meeting_image.length > 0) setThumbnail(list.meeting_image[0].image);
}
}
else {
set400error("失敗しました。");
}
});
}, []);
async function openModal() {
setOpen(true);
};
async function closeModal() {
setOpen(false);
};
async function handleAcceptDelete() {
try {
setSubmit(true);
axios.delete(`/api/admin/meetings/delete/${props.match.params?.meeting_id}`)
.then(response => {
closeModal();
setSubmit(false);
if(response.data.status_code == 200){
setSuccess('削除に成功しました!');
} else {
set400Error("削除に失敗しました。");
}
});
} catch (error) {
console.log('error', error);
}
setSubmit(true);
axios.delete(`/api/admin/meetings/delete/${props.match.params?.meeting_id}`)
.then(response => {
setShowConfirmModal(false);
setSubmit(false);
switch(response.data.status_code){
case 200:{
history.push({pathname: '/admin/meeting', state: '削除に成功しました!'});
break;
}
case 400: set400Error("削除に失敗しました。"); break;
}
});
};
@ -85,10 +79,10 @@ const MeetingDetail = (props) => {
<div className="l-content-wrap">
<div className="p-article">
<div className="p-article-wrap position-relative" style={{ minHeight:'500px'}}>
<div className="p-article-wrap position-relative" style={{ minHeight:'700px'}}>
{
!loaded &&
<CircularProgress color="secondary" style={{top:'150px', left:'calc(50% - 22px)', color:'green', position:'absolute'}}/>
<CircularProgress className="css-loader"/>
}
{
loaded &&
@ -124,25 +118,20 @@ const MeetingDetail = (props) => {
</time>
<ul className="p-article-btn-list">
<li className="p-article__pdf__btn">
<a
onClick={e => {
e.preventDefault();
history.push({
pathname: `/admin/meeting/edit/${props.match.params?.meeting_id}`,
state: {}
});
}}
<Link to={`/admin/meeting/edit/${props.match.params?.meeting_id}`}
className="btn-default btn-yellow btn-pdf btn-r8 btn-h48">
編集
</a>
</Link>
</li>
<li className="p-article__pdf__btn mr-0">
<a onClick={openModal} className="btn-default btn-yellow btn-pdf btn-r8 btn-h48">削除</a>
<a className="btn-default btn-yellow btn-pdf btn-r8 btn-h48"
onClick={()=>setShowConfirmModal(true)}>
削除
</a>
</li>
</ul>
<div className="p-article__context">
<div className="p-file-list">
<div className="p-file-for">
<figure>
@ -170,7 +159,8 @@ const MeetingDetail = (props) => {
<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" onClick={e=>setShowPdf(true)}>
<a data-v-ade1d018="" className="btn-default btn-yellow btn-pdf btn-r8 btn-h52"
onClick={e=>setShowPDFModal(true)}>
<span>PDFを確認する</span>
</a>
</div>
@ -179,51 +169,40 @@ const MeetingDetail = (props) => {
aria-pressed="false"
className="icon a-icon text-icon icon-text icon-starFill-wrap a-icon-size_medium"
style={{border:'1px solid #f0de00'}}
onClick = {()=>setShowMemo(true)} />
onClick = {()=>setShowMemoModal(true)} />
</div>
<p className="p-article__txt">{ meeting.text }</p>
</div>
</div>
<ModalMemo
show={showMemo}
show={show_memo_modal}
title={"メモ"}
content={meeting?.memo}
handleClose={()=>setShowMemo(false)}
handleClose={()=>setShowMemoModal(false)}
/>
<ModalPdf
show={showPdf}
show={show_pdf_modal}
pdfPath={meeting.pdf ?? '/pdf/test.pdf'}
handleClose={()=>setShowPdf(false)}
handleClose={()=>setShowPDFModal(false)}
/>
</article>
: <p className="text-center pt-5">データが存在していません</p>
)
}
</div>
</div>
</div>
</div>
<ModalConfirm
show={open}
show={show_confirm_modal}
message={"本当に削除しても\nよろしいでしょうか?"}
handleClose={closeModal}
handleClose={()=>setShowConfirmModal(false)}
handleAccept={handleAcceptDelete}
loading={submit}
/>
{
_400error && <Alert type="fail" hide={()=>set400Error('')}>{_400error}</Alert>
}
{
_success &&
<Alert type="success"
hide={()=>
history.push({
pathname: "/admin/meeting",
state: {}
})}>{_success}</Alert>
}
{ _400error && <Alert type="fail" hide={()=>set400Error('')}> {_400error} </Alert> }
{ _success && <Alert type="success" hide={()=>setSuccess('')}> {_success} </Alert> }
</div>
)
}

ファイルの表示

@ -77,6 +77,9 @@ const MeetingEdit = (props) => {
}
setChildrenTemp(arr);
}
else {
set400error("失敗しました。");
}
});
}, []);
@ -97,28 +100,28 @@ const MeetingEdit = (props) => {
if(children_temp.findIndex(ele=> ele.checked && ele.child_id == approval_list[i].child_id) < 0)
approval_deleteIndexes.push(approval_list[i].child_id);
}
console.log(approval_registerIndexes, approval_deleteIndexes);
const formdata = new FormData();
formdata.append('children', JSON.stringify(approval_registerIndexes));
axios.post('/api/admin/meeting/approvals/register',formdata, {params:{meeting_id: props.match.params.meeting_id}})
axios.delete('/api/admin/meeting/approvals/delete',{params:{children: approval_deleteIndexes, meeting_id: props.match.params.meeting_id}})
try {
const request = { title: title, text: text, memo: memo, pdf: pdf };
setSubmit(true);
axios.put(`/api/admin/meetings/update/${props.match.params?.meeting_id}`, request)
.then(response => {
setSubmit(false);
switch(response.data.status_code){
case 200: setSuccess("更新成功しました!"); break;
case 400: set400Error("更新失敗しました。"); break;
case 422: set422Errors(response.data.error_messages); break;
const request = { title: title, text: text, memo: memo, pdf: pdf };
setSubmit(true);
axios.put(`/api/admin/meetings/update/${props.match.params?.meeting_id}`, request)
.then(response => {
setSubmit(false);
switch(response.data.status_code){
case 200: {
history.push({
pathname: `/admin/meeting/detail/${props.match.params?.meeting_id}`,
state: "更新成功しました!"});
break;
}
});
} catch (error) {
console.log('error', error);
}
case 400: set400Error("更新失敗しました。"); break;
case 422: set422Errors(response.data.error_messages); break;
}
});
}
@ -212,7 +215,7 @@ const MeetingEdit = (props) => {
<div className="p-article-wrap position-relative" style={{ minHeight:'500px'}}>
{
!loaded &&
<CircularProgress color="secondary" style={{top:'150px', left:'calc(50% - 22px)', color:'green', position:'absolute'}}/>
<CircularProgress className="css-loader"/>
}
{
loaded &&
@ -255,6 +258,20 @@ const MeetingEdit = (props) => {
PDFアップロード
<input type="file" name="file_pdf" accept=".pdf" id="file_pdf" onChange={handlePDFChange} />
</label>
{
pdf &&
<IconButton
onClick={()=>setPdf('')}
style={{position: 'absolute',
top: '-6px',
right: '-6px'}}>
<RemoveIcon
style={{width:'22px', height:'22px',
color: 'white',
background: '#dd0000',
borderRadius: '50%'}}/>
</IconButton>
}
{
_422errors.pdf &&
<span className="l-alert__text--error ft-16 ft-md-14">
@ -263,7 +280,7 @@ const MeetingEdit = (props) => {
}
</div>
<div className="edit-set edit-set-mt15">
<label className="edit-set-file-label" htmlFor="file_image">
<label className="edit-set-file-label" htmlFor={meeting_image.length < 10 ? 'file_image': ''}>
画像アップロード
<input type="file" name="file_image" accept=".png, .jpg, .jpeg" id="file_image" onChange={handleImageChange}/>
</label>
@ -328,48 +345,37 @@ const MeetingEdit = (props) => {
</div>
<div className={`checkbox-wrap edit-bg ${check_radio!="true" && 'd-none'}`}>
{
children_list.length != 0 ?
children_temp?.map((item, k)=>
<div className="checkbox" key={k}>
<label htmlFor={`user_name${k}`}>
<input className="boolean optional"
type="checkbox"
id={`user_name${k}`}
checked = {item.checked}
onChange={e=>handleCheck(e, k)}/>
{`${item.first_name} ${item.last_name}`}
</label>
</div>
)
: <p className="text-center">子はありません</p>
}
{
children_list.length != 0 ?
children_temp?.map((item, k)=>
<div className="checkbox" key={k}>
<label htmlFor={`user_name${k}`}>
<input className="boolean optional"
type="checkbox"
id={`user_name${k}`}
checked = {item.checked}
onChange={e=>handleCheck(e, k)}/>
{`${item.first_name} ${item.last_name}`}
</label>
</div>
)
: <p className="text-center">子はありません</p>
}
</div>
<LoadingButton
type="submit" fullWidth
loading={submit}
className="btn-edit btn-default btn-h60 bg-yellow rounded-15">
<span className={`ft-20 font-weight-bold ${!submit && 'text-black'}`}>ミーティングを更新</span>
className="btn-edit btn-default btn-h75 bg-yellow rounded-20">
<span className={`ft-18 ft-xs-16 font-weight-bold ${!submit && 'text-black'}`}>ミーティングを更新</span>
</LoadingButton>
{
_400error && <Alert type="fail" hide={()=>set400Error('')}>{_400error}</Alert>
}
{
_success &&
<Alert type="success"
hide={()=>
history.push({
pathname: `/admin/meeting/detail/${props.match.params?.meeting_id}`,
state: {}
})}>{_success}</Alert>
}
{ _400error && <Alert type="fail" hide={()=>set400Error('')}> {_400error} </Alert> }
{ _success && <Alert type="success" hide={()=>setSuccess('')}> {_success} </Alert> }
</form>
</div>
</div>
</article>
}
</div>
</div>
</div>

ファイルの表示

@ -11,14 +11,14 @@ import Alert from '../../component/alert';
const INFINITE = 5;
const SCROLL_DELAY_TIME = 1500;
const Meeting = () => {
const Meeting = (props) => {
const [keyword, setKeyword] = useState('')
const [loaded, setLoaded] = useState(false);
const [meeting_list, setMeetingList ] = useState([]);
const [fetch_meeting_list, setFetchMeetingList ] = useState([]);
const [_422errors, set422errors] = useState({keyword:''});
const [_success, setSuccess] = useState('');
const [_success, setSuccess] = useState(props.history.location.state);
useEffect(()=>{
@ -52,6 +52,9 @@ const Meeting = () => {
setFetchMeetingList(arr.slice(0, INFINITE));
else setFetchMeetingList(arr.slice(0, len));
}
else {
set400error("失敗しました。");
}
});
}, []);
@ -128,10 +131,10 @@ const Meeting = () => {
</form>
</div>
<div className="search-wrap">
<div className="search-content position-relative" style={{minHeight:'100px'}}>
<div className="search-content position-relative">
{
!loaded &&
<CircularProgress color="secondary" style={{top:'20px', left:'calc(50% - 22px)', color:'green', position:'absolute'}}/>
<CircularProgress className="css-loader"/>
}
{
loaded &&
@ -190,9 +193,7 @@ const Meeting = () => {
}
</div>
</div>
{
_success && <Alert type="success">{_success}</Alert>
}
{ _success && <Alert type="success" hide={()=>setSuccess('')}>{_success}</Alert> }
</section>
</div>
</div>

ファイルの表示

@ -22,15 +22,14 @@ const ParentDetail = (props) => {
const history = useHistory();
const [image, setImage] = useState('');
const [open, setOpen] = useState(false);
const [loaded, setLoaded] = useState(false);
const [submit, setSubmit] = useState(false);
const [parent, setParent] = useState(null);
const [_400error, set400Error] = useState('');
const [_422errors, set422Errors] = useState({image: ''});
const [_success_delete, setSuccessDelete] = useState('');
const [_success_update_image, setSuccessUpdateImage] = useState('');
const [_success, setSuccess] = useState(props.history.location.state);
const [show_confirm_modal, setShowConfirmModal] = useState(false);
useEffect(() => {
setLoaded(false);
@ -41,6 +40,9 @@ const ParentDetail = (props) => {
setParent(response.data.params);
setImage(response.data.params.image);
}
else{
set400error("失敗しました。");
}
})
},[]);
@ -56,7 +58,7 @@ const ParentDetail = (props) => {
switch(response.data.status_code){
case 200: {
setImage(reader.result);
setSuccessUpdateImage(response.data.success_messages);
setSuccess(response.data.success_messages);
break;
}
case 400: set400Error(response.data.error_messages); break;
@ -66,31 +68,21 @@ const ParentDetail = (props) => {
};
};
async function openModal() {
setOpen(true);
};
async function closeModal() {
setOpen(false);
};
async function handleAcceptDelete() {
try {
setSubmit(true);
axios.delete(`/api/admin/fathers/delete/${props.match.params?.father_id}`)
.then(response => {
closeModal();
setSubmit(false);
if(response.data.status_code == 200){
setSuccessDelete('削除に成功しました!');
} else {
set400Error("削除に失敗しました。");
}
});
} catch (error) {
console.log('error', error);
}
setSubmit(true);
axios.delete(`/api/admin/fathers/delete/${props.match.params?.father_id}`)
.then(response => {
setShowConfirmModal(false);
setSubmit(false);
if(response.data.status_code == 200){
history.push({
pathname: "/admin/parent",
state: '削除に成功しました!'});
} else {
set400Error("削除に失敗しました。");
}
});
};
@ -109,7 +101,7 @@ const ParentDetail = (props) => {
<div className="profile-wrap position-relative" style={{ minHeight:'500px'}}>
{
!loaded &&
<CircularProgress color="secondary" style={{top:'30%', left:'calc(50% - 22px)', color:'green', position:'absolute'}}/>
<CircularProgress className="css-loader"/>
}
{
loaded &&
@ -122,7 +114,6 @@ const ParentDetail = (props) => {
<label htmlFor="avatar" className='avatar-label'>
<IconButton color="primary" aria-label="upload picture" component="span" className="bg-yellow shadow-sm w-50-px h-50-px">
<PhotoCameraOutlinedIcon style={{width:'25px', height:'25px', color:'black'}}/>
{/* <img src="/assets/img/icon/camera.svg" width="20" height="20"/> */}
</IconButton>
</label>
<img src={image} className="avatar-img" alt="avatar-img"/>
@ -134,8 +125,8 @@ const ParentDetail = (props) => {
</span>
}
</div>
<p className="profile-name ft-xs-14">{parent.company}</p>
<div className="profile-info ft-18 ft-xs-14">
<p className="profile-name ft-18 ft-xs-16">{parent.company}</p>
<div className="profile-info ft-18 ft-xs-16">
<div className="profile-info__item">
<a href={`mailto:${parent.email}`}>
<p className="profile-info__icon">
@ -158,26 +149,26 @@ const ParentDetail = (props) => {
</div>
<div className="p-profile-btn">
<Link className="btn-default btn-yellow btn-profile btn-r8 btn-h52 h-xs-45-px"
<Link className="btn-default btn-yellow btn-profile btn-r8 btn-h52 h-xs-60-px"
to = {`/admin/parent/edit/${props.match.params?.father_id}`}
>
<span className="ft-18 ft-xs-14">プロフィールを変更する</span>
<span className="ft-18 ft-xs-16">プロフィールを変更する</span>
</Link>
</div>
<div className="p-profile-btn">
<Link className="btn-default btn-yellow btn-password btn-r8 btn-h52 h-xs-45-px"
<Link className="btn-default btn-yellow btn-password btn-r8 btn-h52 h-xs-60-px"
to = {`/admin/parent/edit/password/${props.match.params?.father_id}`}
>
<span className="ft-18 ft-xs-14">パスワードを変更する</span>
<span className="ft-18 ft-xs-16">パスワードを変更する</span>
</Link>
</div>
<div className="p-profile-txtLink">
<a className="btn-default btn-password btn-r8 btn-h52 h-xs-45-px"
onClick={openModal}
<a className="btn-default btn-password btn-r8 btn-h52 h-xs-60-px"
onClick={()=>setShowConfirmModal(true)}
>
<span className="ft-xs-14">削除する</span>
<span className="ft-xs-16">削除する</span>
</a>
</div>
</div>
@ -190,29 +181,14 @@ const ParentDetail = (props) => {
</div>
</div>
<ModalConfirm
show={open}
show={show_confirm_modal}
message={"本当に削除しても\nよろしいでしょうか?"}
handleClose={closeModal}
handleClose={()=>setShowConfirmModal(false)}
handleAccept={handleAcceptDelete}
loading={submit}
/>
{
_400error && <Alert type="fail" hide={()=>set400Error('')}>{_400error}</Alert>
}
{
_success_delete &&
<Alert type="success"
hide={()=>
history.push({
pathname: "/admin/parent",
state: {}
})}>{_success_delete}</Alert>
}
{ _success_update_image &&
<Alert type="success" hide={()=>setSuccessUpdateImage('')}>
{_success_update_image}
</Alert>
}
{ _400error && <Alert type="fail" hide={()=>set400Error('')}> {_400error} </Alert> }
{ _success && <Alert type="success" hide={()=>setSuccess('')}> {_success} </Alert> }
</div>
)
}

ファイルの表示

@ -41,6 +41,9 @@ const ParentEdit = (props) => {
setProfile(parent.profile);
}
}
else{
set400error("失敗しました。");
}
})
},[]);
@ -64,7 +67,12 @@ const ParentEdit = (props) => {
.then(response => {
setSubmit(false);
switch(response.data.status_code){
case 200: setSuccess(response.data.success_messages); break;
case 200: {
history.push({
pathname: `/admin/parent/detail/${props.match.params?.father_id}`,
state: response.data.success_messages});
break;
}
case 400: set400Error(response.data.error_messages); break;
case 422: set422Errors(response.data.error_messages); break;
}
@ -81,81 +89,72 @@ const ParentEdit = (props) => {
</div>
<div className="l-content-wrap">
<section className="profile-container position-relative">
<section className="edit-container">
{
!loaded &&
<CircularProgress color="secondary" style={{top:'30%', left:'calc(50% - 22px)', color:'green', position:'absolute', zIndex:'10'}}/>
<CircularProgress className="css-loader"/>
}
<div className="profile-wrap">
<div className="mx-5">
<form onSubmit={handleSubmit} noValidate>
<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 ${ _422errors.company && "is-invalid c-input__target" }`} value={company} onChange={e=>setCompany(e.target.value)}/>
{
_422errors.company &&
<span className="l-alert__text--error ft-16 ft-md-14">
{ _422errors.company }
</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 input-h60 ${ _422errors.email && "is-invalid c-input__target" }`} value={email} onChange={e=>setEmail(e.target.value)}/>
{
_422errors.email &&
<span className="l-alert__text--error ft-16 ft-md-14">
{ _422errors.email }
</span>
}
</div>
{
loaded &&
<div className="edit-wrap">
<div className="edit-content">
<form onSubmit={handleSubmit} className="edit-form">
<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 ${ _422errors.company && "is-invalid c-input__target" }`} value={company} onChange={e=>setCompany(e.target.value)}/>
{
_422errors.company &&
<span className="l-alert__text--error ft-16 ft-md-14">
{ _422errors.company }
</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 input-h60 ${ _422errors.email && "is-invalid c-input__target" }`} value={email} onChange={e=>setEmail(e.target.value)}/>
{
_422errors.email &&
<span className="l-alert__text--error ft-16 ft-md-14">
{ _422errors.email }
</span>
}
</div>
<div className="edit-set">
<label htmlFor="tel" className="control-label ft-12"> 電話番号 </label>
<input type="text" name="tel" id="tel" className = {`input-default input-nameSei input-h60 ${ _422errors.tel && "is-invalid c-input__target" }`} value={tel} onChange={e=>setTelephone(e.target.value)}/>
{
_422errors.tel &&
<span className="l-alert__text--error ft-16 ft-md-14">
{ _422errors.tel }
</span>
}
</div>
<div className="edit-set">
<label htmlFor="tel" className="control-label ft-12"> 電話番号 </label>
<input type="text" name="tel" id="tel" className = {`input-default input-nameSei input-h60 ${ _422errors.tel && "is-invalid c-input__target" }`} value={tel} onChange={e=>setTelephone(e.target.value)}/>
{
_422errors.tel &&
<span className="l-alert__text--error ft-16 ft-md-14">
{ _422errors.tel }
</span>
}
</div>
<div className="edit-set">
<label htmlFor="profile" className="control-label ft-12"> プロフィール </label>
<textarea name="profile" id="profile" rows="8" className = {`textarea-default ${ _422errors.profile && "is-invalid c-input__target" }`} value={profile} onChange={e=>setProfile(e.target.value)}/>
{
_422errors.profile &&
<span className="l-alert__text--error ft-16 ft-md-14">
{ _422errors.profile }
</span>
}
</div>
<div className="edit-set">
<label htmlFor="profile" className="control-label ft-12"> プロフィール </label>
<textarea name="profile" id="profile" rows="8" className = {`textarea-default ${ _422errors.profile && "is-invalid c-input__target" }`} value={profile} onChange={e=>setProfile(e.target.value)}/>
{
_422errors.profile &&
<span className="l-alert__text--error ft-16 ft-md-14">
{ _422errors.profile }
</span>
}
</div>
<div className="mt-5">
<LoadingButton type="submit" fullWidth
className="btn-edit btn-default btn-h60 bg-yellow rounded-15"
className="btn-edit btn-default btn-h75 bg-yellow rounded-20"
loading={submit}>
<span className={`ft-18 font-weight-bold ${!submit && 'text-black'}`}>プロフィールを更新</span>
<span className={`ft-18 ft-xs-16 font-weight-bold ${!submit && 'text-black'}`}>プロフィールを更新</span>
</LoadingButton>
</div>
{
_400error && <Alert type="fail" hide={()=>set400Error('')}>{_400error}</Alert>
}
{
_success &&
<Alert type="success"
hide={()=>
history.push({
pathname: `/admin/parent/detail/${props.match.params?.father_id}`,
state: {}
})}>{_success}</Alert>
}
</form>
{ _400error && <Alert type="fail" hide={()=>set400Error('')}> {_400error} </Alert> }
{ _success && <Alert type="success" hide={()=>setSuccess('')}> {_success} </Alert> }
</form>
</div>
</div>
</div>
}
</section>
</div>
</div>

ファイルの表示

@ -5,12 +5,13 @@ import { useHistory, Link } from 'react-router-dom';
import IconButton from '@mui/material/IconButton';
import SearchIcon from '@mui/icons-material/Search';
import InfiniteScroll from "react-infinite-scroll-component";
import Alert from '../../component/alert';
const INFINITE = 8;
const SCROLL_DELAY_TIME = 1500;
const Parent = () => {
const Parent = (props) => {
const [keyword, setKeyword] = useState('')
const [loaded, setLoaded] = useState(false);
@ -18,6 +19,7 @@ const Parent = () => {
const [fetch_father_list, setFetchFatherList ] = useState([]);
const [_422errors, set422errors] = useState({keyword:''});
const [_400error, set400error] = useState('');
const [_success, setSuccess] = useState(props.history.location.state);
useEffect(() => {
setLoaded(false);
@ -31,6 +33,9 @@ const Parent = () => {
setFetchFatherList(response.data.params.slice(0, INFINITE));
else setFetchFatherList(response.data.params.slice(0, len));
}
else {
set400error("失敗しました。");
}
});
}, []);
@ -94,10 +99,10 @@ const Parent = () => {
</div>
<div className="search-wrap">
<div className="search-content position-relative" style={{minHeight:'100px'}}>
<div className="search-content position-relative">
{
!loaded &&
<CircularProgress color="secondary" style={{top:'20px', left:'calc(50% - 22px)', color:'green', position:'absolute'}}/>
<CircularProgress className="css-loader"/>
}
{
loaded &&
@ -136,7 +141,9 @@ const Parent = () => {
</InfiniteScroll>
}
</div>
</div>
</div>
{ _400error && <Alert type="fail" hide={()=>set400Error('')}> {_400error} </Alert> }
{ _success && <Alert type="success" hide={()=>setSuccess('')}> {_success} </Alert> }
</section>
</div>
</div>

ファイルの表示

@ -38,7 +38,12 @@ const ParentPasswordEdit = (props) => {
.then(response => {
setSubmit(false);
switch(response.data.status_code){
case 200: setSuccess(response.data.success_messages); break;
case 200: {
history.push({
pathname: `/admin/parent/detail/${props.match.params?.father_id}`,
state: response.data.success_messages});
break;
}
case 400: set400Error(response.data.error_messages); break;
case 422: set422Errors(response.data.error_messages); break;
}
@ -55,10 +60,10 @@ const ParentPasswordEdit = (props) => {
</div>
<div className="l-content-wrap">
<section className="profile-container">
<div className="profile-wrap">
<div className="mx-5">
<form onSubmit={handleSubmit} noValidate>
<section className="edit-container">
<div className="edit-wrap">
<div className="edit-content">
<form onSubmit={handleSubmit} className="edit-form">
<div className="edit-set">
<label htmlFor="password" className="control-label ft-14 ft-md-12">
@ -88,25 +93,13 @@ const ParentPasswordEdit = (props) => {
}
</div>
<div className="mt-5">
<LoadingButton type="submit" fullWidth
loading = {submit}
className="btn-edit btn-default btn-h60 bg-yellow rounded-15">
<span className={`ft-18 font-weight-bold ${!submit && 'text-black'}`}>パスワードを更新</span>
</LoadingButton>
</div>
{
_400error && <Alert type="fail" hide={()=>set400Error('')}>{_400error}</Alert>
}
{
_success &&
<Alert type="success"
hide={()=>
history.push({
pathname: `/admin/parent/detail/${props.match.params?.father_id}`,
state: {}
})}>{_success}</Alert>
}
<LoadingButton type="submit" fullWidth
loading = {submit}
className="btn-edit btn-default btn-h75 bg-yellow rounded-20">
<span className={`ft-18 ft-xs-16 font-weight-bold ${!submit && 'text-black'}`}>パスワードを更新</span>
</LoadingButton>
{ _400error && <Alert type="fail" hide={()=>set400Error('')}> {_400error} </Alert> }
{ _success && <Alert type="success" hide={()=>setSuccess('')}> {_success} </Alert> }
</form>
</div>

ファイルの表示

@ -64,9 +64,9 @@ const ParentRegister = () => {
<div className="mt-5">
<LoadingButton type="submit" fullWidth
className="btn-edit btn-default btn-h60 bg-yellow rounded-15"
className="btn-edit btn-default btn-h75 bg-yellow rounded-20"
loading={submit}>
<span className={`ft-20 font-weight-bold ${!submit && 'text-black'}`}>親追加</span>
<span className={`ft-18 ft-xs-16 font-weight-bold ${!submit && 'text-black'}`}>親追加</span>
</LoadingButton>
</div>
{

ファイルの表示

@ -104,14 +104,12 @@ const MeetingAdd = (props) => {
if(children_list[i].checked) c_arr.push(children_list[i].id);
}
formdata.append('children', JSON.stringify(c_arr));
console.log(c_arr);
setSubmit(true);
axios.post('/api/fathers/meetings/register', formdata)
.then(response => {
setSubmit(false);
setNotice(response.data.notice);
console.log(response.data.params)
switch(response.data.status_code){
case 200: {
history.push({

ファイルの表示

@ -295,7 +295,7 @@ useEffect(()=>{
}
</div>
<div className="edit-set edit-set-mt15">
<label className="edit-set-file-label" htmlFor="file_image">
<label className="edit-set-file-label" htmlFor={meeting_image.length < 10 ? 'file_image': ''}>
画像アップロード
<input type="file" name="file_image" accept=".png, .jpg, .jpeg" id="file_image" onChange={handleImageChange}/>
</label>

ファイルの表示

@ -1,19 +1,19 @@
.ft-12{ font-size: 12px; }
.ft-13{ font-size: 13px; }
.ft-14{ font-size: 14px; }
.ft-15{ font-size: 15px; }
.ft-16{ font-size: 16px; }
.ft-17{ font-size: 17px; }
.ft-18{ font-size: 18px; }
.ft-19{ font-size: 19px; }
.ft-20{ font-size: 20px; }
.ft-22{ font-size: 22px; }
.ft-25{ font-size: 25px; }
.ft-30{ font-size: 30px; }
.ft-35{ font-size: 35px; }
.ft-40{ font-size: 40px; }
.ft-12{ font-size: 12px !important;}
.ft-13{ font-size: 13px !important;}
.ft-14{ font-size: 14px !important;}
.ft-15{ font-size: 15px !important;}
.ft-16{ font-size: 16px !important;}
.ft-17{ font-size: 17px !important;}
.ft-18{ font-size: 18px !important;}
.ft-19{ font-size: 19px !important;}
.ft-20{ font-size: 20px !important;}
.ft-22{ font-size: 22px !important;}
.ft-25{ font-size: 25px !important;}
.ft-30{ font-size: 30px !important;}
.ft-35{ font-size: 35px !important;}
.ft-40{ font-size: 40px !important;}
.ft-md-12{ @include media-breakpoint-down(md){ font-size: 12px !important; } }

ファイルの表示

@ -170,10 +170,17 @@ a{
}
}
.p-article__txt{
.p-article__txt, .profile-info__item .txt{
white-space: pre-wrap;
}
.meeting-txt{
-webkit-box-orient: vertical;
overflow: hidden;
display: -webkit-box;
-webkit-line-clamp: 2;
}
/////////////////////////////////////////////////////////////////////////
@media screen and (min-width: 1068px){
@ -196,6 +203,10 @@ a{
::-webkit-scrollbar {
display: none;
}
.search-item{
&:first-child{ border-top: none !important; }
&:last-child{ border-bottom: none !important;}
}
}