Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
F
foc_manage
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
首航-临时账号
foc_manage
Commits
58d82750
Commit
58d82750
authored
Mar 12, 2018
by
java-李谡
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
修改jdbc连接,代码review,去除UI切换
parent
1ba13285
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
12 changed files
with
111 additions
and
207 deletions
+111
-207
sysIndex2.jsp
WebContent/WEB-INF/views/modules/sys/sysIndex2.jsp
+8
-8
SecurityPropertyPlaceholderConfigurer.java
src/com/ejweb/core/conf/SecurityPropertyPlaceholderConfigurer.java
+2
-2
AircraftController.java
src/com/ejweb/modules/aircraft/web/AircraftController.java
+0
-2
VerifyService.java
src/com/ejweb/modules/airline/service/VerifyService.java
+35
-53
VerifyController.java
src/com/ejweb/modules/airline/web/VerifyController.java
+0
-0
AirportService.java
src/com/ejweb/modules/contact/service/AirportService.java
+1
-1
UserProfileServce.java
src/com/ejweb/modules/contact/service/UserProfileServce.java
+1
-4
AirportBaseController.java
src/com/ejweb/modules/contact/web/AirportBaseController.java
+1
-24
AirportController.java
src/com/ejweb/modules/contact/web/AirportController.java
+1
-42
SystemService.java
src/com/ejweb/modules/sys/service/SystemService.java
+0
-11
LoginController.java
src/com/ejweb/modules/sys/web/LoginController.java
+9
-9
RoleController.java
src/com/ejweb/modules/sys/web/RoleController.java
+53
-51
No files found.
WebContent/WEB-INF/views/modules/sys/sysIndex2.jsp
View file @
58d82750
...
...
@@ -133,14 +133,14 @@
<div
class=
"brand"
><span
id=
"productName"
>
${fns:getValue('productName')}
</span></div>
<ul
id=
"userControl"
class=
"nav pull-right"
><
%
--
<
li
><a
href=
"${pageContext.request.contextPath}${fns:getFrontPath()}/index-${fnc:getCurrentSiteId()}.html"
target=
"_blank"
title=
"访问网站主页"
><i
class=
"icon-home"
></i></a></li>
--%>
<
li
id=
"themeSwitch"
class=
"dropdown"
>
<
a
class=
"dropdown-toggle"
data-toggle=
"dropdown"
href=
"#"
title=
"主题切换"
><i
class=
"icon-th-large"
></i></a
>
<
ul
class=
"dropdown-menu"
>
<
c:forEach
items=
"${fns:getDictList('theme')}"
var=
"dict"
><li><a
href=
"#"
onclick=
"location='${pageContext.request.contextPath}/theme/${dict.value}?url='+location.href"
>
${dict.label}
</a></li></c:forEach
>
<
li><a
href=
"javascript:cookie('tabmode','${cookie.tabmode.value eq '1' ? '0' : '1'}');location=location.href"
>
${cookie.tabmode.value eq '1' ? '关闭' : '开启'}页签模式
</a></li
>
<
/ul
>
<
!--[if lte IE 6]><script type="text/javascript">$('#themeSwitch').hide();</script><![endif]--
>
<
/li
>
<
%
--
<
li
id=
"themeSwitch"
class=
"dropdown"
>
--%
>
<
%
--
<
a
class=
"dropdown-toggle"
data-toggle=
"dropdown"
href=
"#"
title=
"主题切换"
><i
class=
"icon-th-large"
></i></a>
--%
>
<
%
--
<
ul
class=
"dropdown-menu"
>
--%
>
<
%
--
<
c:forEach
items=
"${fns:getDictList('theme')}"
var=
"dict"
><li><a
href=
"#"
onclick=
"location='${pageContext.request.contextPath}/theme/${dict.value}?url='+location.href"
>
${dict.label}
</a></li></c:forEach>
--%
>
<
%
--
<
li
><a
href=
"javascript:cookie('tabmode','${cookie.tabmode.value eq '1' ? '0' : '1'}');location=location.href"
>
${cookie.tabmode.value eq '1' ? '关闭' : '开启'}页签模式
</a></li>
--%
>
<
%
--
</
ul
>
--%
>
<
%
--
<!
--
[
if
lte
IE
6
]
><script
type=
"text/javascript"
>
$
(
'#themeSwitch'
).
hide
();
</script><
![
endif
]
--
>
--%
>
<
%
--
</
li
>
--%
>
<li
id=
"userInfo"
class=
"dropdown"
>
<a
class=
"dropdown-toggle"
data-toggle=
"dropdown"
href=
"#"
title=
"个人信息"
>
您好, ${fns:getUser().name}
<span
id=
"notifyNum"
class=
"label label-info hide"
></span></a>
<ul
class=
"dropdown-menu"
>
...
...
src/com/ejweb/core/conf/SecurityPropertyPlaceholderConfigurer.java
View file @
58d82750
...
...
@@ -153,7 +153,7 @@ public class SecurityPropertyPlaceholderConfigurer extends PropertyPlaceholderCo
// }
// }
System
.
out
.
println
(
DES3Utils
.
encrypt
(
"jdbc:mysql://10.70.78.27:3306/foc?useUnicode=true&characterEncoding=utf-8"
,
CONF_DESC_KEY
));
// System.out.println(DES3Utils.decrypt("7aaee3bf1b522eeeb27b967ef218248f7b15a97cd36dfddec36d4db09e9d03ee7cc6a4738c942183df0929c2937db163e9cd92ba373f32208f3eecbf8e3a2db330c7ea9972bb81a166a76c7ae55aa85e
", CONF_DESC_KEY));
//
System.out.println(DES3Utils.encrypt("jdbc:mysql://10.70.78.27:3306/foc?useUnicode=true&characterEncoding=utf-8", CONF_DESC_KEY));
System
.
out
.
println
(
DES3Utils
.
decrypt
(
"7aaee3bf1b522eee9c5cade1a71670f3aed546d27bf021874da7580fa9df6021c87eaddeb9b9a6eb200842455cb776b4347eb35b6c4fb07af249a322047538d40a3047091eb83489e3f02dd6c57c44d6
"
,
CONF_DESC_KEY
));
}
}
src/com/ejweb/modules/aircraft/web/AircraftController.java
View file @
58d82750
...
...
@@ -91,8 +91,6 @@ public class AircraftController extends BaseController {
/**
* 获取机构JSON数据。
* @param extId 排除的ID
* @param grade 显示级别
* @param response
* @return
*/
...
...
src/com/ejweb/modules/airline/service/VerifyService.java
View file @
58d82750
...
...
@@ -23,12 +23,12 @@ import com.github.pagehelper.PageHelper;
/**
* Verify Service
*
*
* @author zhanglg
* @version 2016-8-23
*/
@Service
@Transactional
(
readOnly
=
true
)
@Transactional
(
readOnly
=
true
)
public
class
VerifyService
extends
CrudService
<
VerifyDao
,
VerifyEntity
>
{
@Autowired
private
VerifyDao
verifyDao
;
...
...
@@ -60,71 +60,63 @@ public class VerifyService extends CrudService<VerifyDao, VerifyEntity> {
verifyEntity
.
setPage
(
page
);
PageHelper
.
startPage
(
page
.
getPageNo
(),
page
.
getPageSize
());
List
<
VerifyEntity
>
list
=
verifyDao
.
findAllList
(
verifyEntity
);
for
(
VerifyEntity
entity
:
list
)
{
if
(
"06"
.
equals
(
entity
.
getVerifType
())||
"07"
.
equals
(
entity
.
getVerifType
())
||
"08"
.
equals
(
entity
.
getVerifType
()))
{
for
(
VerifyEntity
entity
:
list
)
{
if
(
"06"
.
equals
(
entity
.
getVerifType
())
||
"07"
.
equals
(
entity
.
getVerifType
())
||
"08"
.
equals
(
entity
.
getVerifType
()))
{
entity
.
setExpiryDate
(
"长期有效"
);
}
else
{
}
else
{
Integer
day
=
verifyDao
.
getDay
(
entity
);
if
(
day
!=
null
)
{
if
(
day
<=
0
)
day
=
0
;
day
=
90
-
day
;
if
(
day
<
0
)
{
if
(
day
!=
null
)
{
if
(
day
<=
0
)
day
=
0
;
day
=
90
-
day
;
if
(
day
<
0
)
{
entity
.
setExpiryDate
(
"0"
);
entity
.
setStatus
(
"失效"
);
}
else
{
entity
.
setExpiryDate
(
day
+
""
);
}
else
{
entity
.
setExpiryDate
(
day
+
""
);
entity
.
setStatus
(
"有效"
);
}
}
}
}
}
// List<VerifEntity> list1 = verifyDao.findAllList2(verifyEntity);
page
.
setList
(
list
);
return
page
;
}
public
List
<
VerifyEntity
>
findAllList
(
VerifyEntity
verifyEntity
)
{
List
<
VerifyEntity
>
list
=
verifyDao
.
findAllList1
(
verifyEntity
);
/* for (VerifyEntity verifyEntity1 : list) {
AirportEntity areaAr = verifyEntity1.getAreaAr();// 到达地
AirportEntity areaSt = verifyEntity1.getAreaSt();// 出发地
if (areaAr != null && areaSt != null && !areaSt.getCityName().equals("") && areaSt.getCityName() != null
&& !areaAr.getCityName().equals("") && areaAr.getCityName() != null) {
verifyEntity1.setAirline(areaSt.getCityName() + areaSt.getAirportIata() + "-" + areaAr.getCityName()
+ areaAr.getAirportIata());
}
}*/
List
<
VerifyEntity
>
list
=
verifyDao
.
findAllList1
(
verifyEntity
);
return
list
;
}
@Transactional
(
readOnly
=
false
)
public
void
inser
(
VerifyEntity
verifyEntity
,
List
<
ConnectEntity
>
list
)
{
public
void
inser
(
VerifyEntity
verifyEntity
,
List
<
ConnectEntity
>
list
)
{
UserProfileEntity
user
=
new
UserProfileEntity
();
user
.
setId
(
UserUtils
.
getUser
().
getId
());
String
departId
=
userProfileDao
.
getDepartId
(
user
);
DepartEntity
depart
=
new
DepartEntity
();
depart
.
setId
(
departId
);
verifyEntity
.
setDepart
(
depart
);
if
(
StringUtils
.
isBlank
(
verifyEntity
.
getExpiryDate
())||
isNumeric
(
verifyEntity
.
getExpiryDate
()))
{
if
(
StringUtils
.
isBlank
(
verifyEntity
.
getExpiryDate
())
||
isNumeric
(
verifyEntity
.
getExpiryDate
()))
{
verifyEntity
.
setExpiryDate
(
null
);
}
verifyDao
.
insert
(
verifyEntity
);
for
(
ConnectEntity
connect:
list
)
{
for
(
ConnectEntity
connect
:
list
)
{
connectDao
.
insert
(
connect
);
}
}
public
boolean
isNumeric
(
String
str
){
Pattern
pattern
=
Pattern
.
compile
(
"[0-9]*"
);
public
boolean
isNumeric
(
String
str
)
{
Pattern
pattern
=
Pattern
.
compile
(
"[0-9]*"
);
Matcher
isNum
=
pattern
.
matcher
(
str
);
if
(
!
isNum
.
matches
()
)
{
return
false
;
}
return
true
;
}
if
(!
isNum
.
matches
())
{
return
false
;
}
return
true
;
}
@Transactional
(
readOnly
=
false
)
public
void
save
(
VerifyEntity
verifyEntity
)
{
...
...
@@ -140,8 +132,8 @@ public class VerifyService extends CrudService<VerifyDao, VerifyEntity> {
verifyDao
.
insert
(
verifyEntity
);
// 如果不是航线则结束
if
(
"06"
.
equals
(
verifyEntity
.
getVerifType
())
||
"07"
.
equals
(
verifyEntity
.
getVerifType
())
||
"08"
.
equals
(
verifyEntity
.
getVerifType
())
)
{
return
;
||
"08"
.
equals
(
verifyEntity
.
getVerifType
()))
{
return
;
}
ConnectEntity
connect
=
new
ConnectEntity
();
connect
.
preInsert
();
// 生成id
...
...
@@ -164,15 +156,14 @@ public class VerifyService extends CrudService<VerifyDao, VerifyEntity> {
}
}
else
{
VerifyEntity
verif
=
getVerify
(
verifyEntity
.
getId
());
VerifyEntity
verif
=
getVerify
(
verifyEntity
.
getId
());
verif
.
setVerifNo
(
verifyEntity
.
getVerifNo
());
verif
.
setRouteNo
(
verifyEntity
.
getRouteNo
());
verif
.
setVerifType
(
verifyEntity
.
getVerifType
());
verif
.
setExpiryDate
(
verifyEntity
.
getExpiryDate
());
verif
.
setAircraft
(
verifyEntity
.
getAircraft
());
if
(
"06"
.
equals
(
verifyEntity
.
getVerifType
())
||
"07"
.
equals
(
verifyEntity
.
getVerifType
())
||
"08"
.
equals
(
verifyEntity
.
getVerifType
())
)
{
// verif.setAreaAr(verifyEntity.getAreaAr());
||
"08"
.
equals
(
verifyEntity
.
getVerifType
()))
{
verif
.
setAreaSt
(
verifyEntity
.
getAreaSt
());
verif
.
setFlightNo
(
verifyEntity
.
getFlightNo
());
verifyDao
.
update
(
verifyEntity
);
...
...
@@ -185,16 +176,7 @@ public class VerifyService extends CrudService<VerifyDao, VerifyEntity> {
verif
.
setFlightNo
(
verifyEntity
.
getFlightNo
());
}
verifyDao
.
update
(
verif
);
/* // 如果不是航线则结束
if ("06".equals(verifyEntity.getVerifType()) || "07".equals(verifyEntity.getVerifType())
|| "08".equals(verifyEntity.getVerifType()) ) {
verifyDao.update(verifyEntity);
return;
}
if ("1".equals(verifyEntity.getConnect().getIsMain())) {
verifyDao.update(verifyEntity);
}*/
ConnectEntity
connect
=
new
ConnectEntity
();
connect
=
verifyEntity
.
getConnect
();
connect
.
setArrIata
(
verifyEntity
.
getAreaAr
().
getAirportIata
());
...
...
@@ -202,7 +184,7 @@ public class VerifyService extends CrudService<VerifyDao, VerifyEntity> {
connect
.
setFlightNo
(
verifyEntity
.
getFlightNo
());
connectDao
.
update
(
verifyEntity
.
getConnect
());
}
}
public
List
<
VerifyEntity
>
CheckValidator
(
VerifyEntity
verifyEntity
)
{
...
...
@@ -215,7 +197,7 @@ public class VerifyService extends CrudService<VerifyDao, VerifyEntity> {
}
@Transactional
(
readOnly
=
false
)
public
VerifyEntity
get
verifyByVerif
No
(
String
VerifNo
)
{
public
VerifyEntity
get
VerifyByVerify
No
(
String
VerifNo
)
{
VerifyEntity
verifyEntity
=
new
VerifyEntity
();
verifyEntity
.
setVerifNo
(
VerifNo
);
return
verifyDao
.
getverifyByVerifNo
(
verifyEntity
);
...
...
src/com/ejweb/modules/airline/web/VerifyController.java
View file @
58d82750
This diff is collapsed.
Click to expand it.
src/com/ejweb/modules/contact/service/AirportService.java
View file @
58d82750
...
...
@@ -105,7 +105,7 @@ public class AirportService extends CrudService<AirportDao, AirportEntity> {
return
str
.
substring
(
0
,
1
).
toUpperCase
();
}
public
List
<
AirportEntity
>
getAllA
ri
portsData
(
AirportEntity
entity
){
public
List
<
AirportEntity
>
getAllA
ir
portsData
(
AirportEntity
entity
){
return
dao
.
findAllAirport
(
entity
);
}
...
...
src/com/ejweb/modules/contact/service/UserProfileServce.java
View file @
58d82750
...
...
@@ -106,10 +106,7 @@ public class UserProfileServce extends CrudService<UserProfileDao, UserProfileEn
userProfileDao
.
insertUserProfileByHrm
(
userProfileEntity2
);
}
public
String
getDepartId
(
UserProfileEntity
entity
){
return
userProfileDao
.
getDepartId
(
entity
);
}
public
List
<
Dict
>
getUserTypeDict
(
Dict
dict
)
{
return
dictDao
.
findListByType
(
dict
);
}
...
...
src/com/ejweb/modules/contact/web/AirportBaseController.java
View file @
58d82750
...
...
@@ -102,7 +102,7 @@ public class AirportBaseController extends BaseController{
public
List
<
Map
<
String
,
String
>>
getAirportsData
(){
List
<
Map
<
String
,
String
>>
listMap
=
new
ArrayList
<>();
Map
<
String
,
String
>
map
=
new
HashMap
<
String
,
String
>();
List
<
AirportEntity
>
lists
=
airportService
.
getAllA
ri
portsData
(
new
AirportEntity
());
List
<
AirportEntity
>
lists
=
airportService
.
getAllA
ir
portsData
(
new
AirportEntity
());
if
(
lists
.
size
()>
0
){
for
(
AirportEntity
entity
:
lists
){
map
.
put
(
"id"
,
entity
.
getId
());
...
...
@@ -118,7 +118,6 @@ public class AirportBaseController extends BaseController{
if
(!
beanValidator
(
model
,
baseEntity
)){
return
form
(
baseEntity
,
model
);
}
// AirportTBaseEntity entity = new AirportTBaseEntity();
if
(
baseEntity
.
getReadyH
()==
null
||
baseEntity
.
getReadyH
()==
0
){
baseEntity
.
setReadyH
(
null
);
}
...
...
@@ -132,28 +131,6 @@ public class AirportBaseController extends BaseController{
if
(!
CollectionUtils
.
isEmpty
(
baseEntity
.
getAirportsList
()))
{
airportBaseService
.
union
(
baseEntity
);
}
// //插入关联表
// if(StringUtils.isNotEmpty(baseEntity.getAirports())||baseEntity.getAirportsList()!= null){
// String[] str =null;
// if(StringUtils.isNotEmpty(baseEntity.getAirports())){
// str = baseEntity.getAirports().split(",");
// }else if(baseEntity.getAirportsList().size() > 0){
// str = baseEntity.getAirportsList().toArray(new String[baseEntity.getAirportsList().size()]);
// }
// for(int i=0;i<str.length;i++){
// entity.setId(str[i]);
// AirportTBaseEntity entity1 = airportBaseService.getAirportTBase(entity);
// if(entity1 == null){
// entity1 = new AirportTBaseEntity();
// entity1.setId(entity.getId());
// entity1.setBaseId(baseEntity.getId());
// airportBaseService.insert(entity1);
// }else{
// entity1.setBaseId(baseEntity.getId());
// airportBaseService.update(entity1);
// }
// }
// }
addMessage
(
redirectAttributes
,
"保存成功"
);
return
"redirect:"
+
adminPath
+
"/contact/airportBase/list?repage"
;
}
...
...
src/com/ejweb/modules/contact/web/AirportController.java
View file @
58d82750
...
...
@@ -183,48 +183,7 @@ public class AirportController extends BaseController {
* @param redirectAttributes
* @return
*/
/*
* @RequiresPermissions("im:airport:edit")
*
* @RequestMapping("batchImport") public String batchImport(MultipartFile
* file, RedirectAttributes redirectAttributes) { try { List<Map<String,
* String>> excelContents =
* ImportExcel.getImportFileContent(file.getInputStream()); if
* (excelContents != null && excelContents.size() > 0) { if
* (!excelContents.get(0).containsKey("机场名称") ||
* !excelContents.get(0).containsKey("三字码") ||
* !excelContents.get(0).containsKey("四字码") ||
* !excelContents.get(0).containsKey("所属国家") ||
* !excelContents.get(0).containsKey("所属城市") ) {
* addMessage(redirectAttributes,
* "导入失败, 机场名称、三字码、四字码、所属国家、所属城市为必填字段,请按模板进行填写!"); return "redirect:" +
* adminPath + "/contact/contacts/list?repage"; } StringBuilder
* errorContents = new StringBuilder(); for (int i = 0; i <
* excelContents.size(); i ++) { AirportEntity entity = new AirportEntity();
* AirportEntity airport =
* airportService.getAirportByAirportIata(excelContents.get(i).get("三字码"));
* if (airport!=null) { errorContents.append("添加第").append(String.valueOf(i
* +
* 1)).append("行数据失败,错误原因:三字码+"+airport.getAirportIata()+"+存在,请重新填写!<br/>");
* continue; } entity.setAirportName(excelContents.get(i).get("机场名称"));
* entity.setAirportIata(excelContents.get(i).get("三字码"));
* entity.setAirportIcao(excelContents.get(i).get("四字码"));
* entity.setCountryName(excelContents.get(i).get("所属国家"));
* entity.setCityName(excelContents.get(i).get("所属城市"));
* entity.setLiftoffTime(Integer.parseInt(excelContents.get(i).get("延误标准-起飞"
* )));
* entity.setLandingTime(Integer.parseInt(excelContents.get(i).get("延误标准-落地"
* ))); String status = excelContents.get(i).get("状态");
* entity.setStatus(StringUtils.isBlank(status)?Short.parseShort(status):1);
* try { airportService.save(entity); } catch (Exception e) {
* errorContents.append("插入第").append(String.valueOf(i +
* 1)).append("行数据失败,错误原因:系统错误,请联系技术员!"); } } if
* (StringUtils.isBlank(errorContents.toString())) {
* errorContents.append("导入成功!"); } addMessage(redirectAttributes,
* errorContents.toString()); } } catch (IOException e) {
* e.printStackTrace(); } return "redirect:" + adminPath +
* "/contact/airport/list?repage"; }
*/
@RequiresPermissions
(
"im:airport:edit"
)
@RequestMapping
(
value
=
"batchImport"
,
method
=
RequestMethod
.
POST
)
public
String
importFile
(
MultipartFile
file
,
RedirectAttributes
redirectAttributes
)
{
...
...
src/com/ejweb/modules/sys/service/SystemService.java
View file @
58d82750
...
...
@@ -253,14 +253,6 @@ public class SystemService extends BaseService implements InitializingBean {
return
password
.
equals
(
Encodes
.
encodeHex
(
salt
)
+
Encodes
.
encodeHex
(
hashPassword
));
}
/**
* 获得活动会话
*
* @return
*/
public
Collection
<
Session
>
getActiveSessions
()
{
return
sessionDao
.
getActiveSessions
(
false
);
}
// -- Role Service --//
...
...
@@ -280,9 +272,6 @@ public class SystemService extends BaseService implements InitializingBean {
return
roleDao
.
getByEnname
(
r
);
}
public
List
<
Role
>
findRole
(
Role
role
)
{
return
roleDao
.
findList
(
role
);
}
public
List
<
Role
>
findAllRole
(
Role
role
)
{
return
UserUtils
.
getRoleList
(
role
);
...
...
src/com/ejweb/modules/sys/web/LoginController.java
View file @
58d82750
...
...
@@ -188,15 +188,15 @@ public class LoginController extends BaseController{
/**
* 获取主题方案
*/
@RequestMapping
(
value
=
"/theme/{theme}"
)
public
String
getThemeInCookie
(
@PathVariable
String
theme
,
HttpServletRequest
request
,
HttpServletResponse
response
){
if
(
StringUtils
.
isNotBlank
(
theme
)){
CookieUtils
.
setCookie
(
response
,
"theme"
,
theme
);
}
else
{
theme
=
CookieUtils
.
getCookie
(
request
,
"theme"
);
}
return
"redirect:"
+
request
.
getParameter
(
"url"
);
}
//
@RequestMapping(value = "/theme/{theme}")
//
public String getThemeInCookie(@PathVariable String theme, HttpServletRequest request, HttpServletResponse response){
//
if (StringUtils.isNotBlank(theme)){
//
CookieUtils.setCookie(response, "theme", theme);
//
}else{
//
theme = CookieUtils.getCookie(request, "theme");
//
}
//
return "redirect:"+request.getParameter("url");
//
}
/**
* 是否是验证码登录
...
...
src/com/ejweb/modules/sys/web/RoleController.java
View file @
58d82750
This diff is collapsed.
Click to expand it.
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment