Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
S
sample-form-platform
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
赵啸非
sample-form-platform
Commits
b7fbd8e4
Commit
b7fbd8e4
authored
2 years ago
by
赵啸非
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
修改配置文件
parent
d9e2eb21
Changes
11
Expand all
Show whitespace changes
Inline
Side-by-side
Showing
11 changed files
with
40 additions
and
1239 deletions
+40
-1239
assembly/assembly-manager-ui.xml
assembly/assembly-manager-ui.xml
+0
-2
sample-form-manager-ui/admin/.env.production
sample-form-manager-ui/admin/.env.production
+1
-1
sample-form-manager-ui/admin/.env.test
sample-form-manager-ui/admin/.env.test
+3
-0
sample-form-manager-ui/admin/package.json
sample-form-manager-ui/admin/package.json
+1
-0
sample-form-manager/pom.xml
sample-form-manager/pom.xml
+27
-21
sample-form-manager/src/main/bin/deploy.sh
sample-form-manager/src/main/bin/deploy.sh
+4
-6
sample-form-manager/src/main/resources/application.yml
sample-form-manager/src/main/resources/application.yml
+4
-0
sample-form-manager/src/main/resources/static/doc/AllInOne.css
...e-form-manager/src/main/resources/static/doc/AllInOne.css
+0
-13
sample-form-manager/src/main/resources/static/doc/AllInOne.md.md
...form-manager/src/main/resources/static/doc/AllInOne.md.md
+0
-796
sample-form-manager/src/main/resources/static/doc/index.html
sample-form-manager/src/main/resources/static/doc/index.html
+0
-238
sample-form-manager/src/main/resources/static/doc/search.js
sample-form-manager/src/main/resources/static/doc/search.js
+0
-162
No files found.
assembly/assembly-manager-ui.xml
View file @
b7fbd8e4
...
@@ -7,8 +7,6 @@
...
@@ -7,8 +7,6 @@
<format>
tar.gz
</format>
<format>
tar.gz
</format>
</formats>
</formats>
<!-- <includeBaseDirectory>false</includeBaseDirectory>-->
<!-- 需要打包的文件集 -->
<!-- 需要打包的文件集 -->
<fileSets>
<fileSets>
<fileSet>
<fileSet>
...
...
This diff is collapsed.
Click to expand it.
sample-form-manager-ui/admin/.env.production
View file @
b7fbd8e4
#生产环境
#生产环境
NODE_ENV = "production"
NODE_ENV = "production"
VUE_APP_API_BASE_URL=http://192.168.0.
98:11074
VUE_APP_API_BASE_URL=http://192.168.0.
251:11099
This diff is collapsed.
Click to expand it.
sample-form-manager-ui/admin/.env.test
0 → 100644
View file @
b7fbd8e4
#开发环境
NODE_ENV
=
"test"
VUE_APP_API_BASE_URL
=
http
://
192.168
.
0.98
:
17002
\ No newline at end of file
This diff is collapsed.
Click to expand it.
sample-form-manager-ui/admin/package.json
View file @
b7fbd8e4
...
@@ -6,6 +6,7 @@
...
@@ -6,6 +6,7 @@
"dev"
:
"vue-cli-service serve"
,
"dev"
:
"vue-cli-service serve"
,
"serve"
:
"vue-cli-service serve"
,
"serve"
:
"vue-cli-service serve"
,
"build"
:
"vue-cli-service build"
,
"build"
:
"vue-cli-service build"
,
"test"
:
"vue-cli-service build --mode test"
,
"lint"
:
"vue-cli-service lint"
,
"lint"
:
"vue-cli-service lint"
,
"stage"
:
"vue-cli-service build --mode stage"
,
"stage"
:
"vue-cli-service build --mode stage"
,
"build:prod"
:
"vue-cli-service build --model prod"
"build:prod"
:
"vue-cli-service build --model prod"
...
...
This diff is collapsed.
Click to expand it.
sample-form-manager/pom.xml
View file @
b7fbd8e4
...
@@ -26,15 +26,18 @@
...
@@ -26,15 +26,18 @@
<properties>
<properties>
<profiles.active>
develop
</profiles.active>
<profiles.active>
develop
</profiles.active>
<profiles.server.port>
17002
</profiles.server.port>
<profiles.server.port>
17002
</profiles.server.port>
<profiles.queue.type>
rabbitmq
</profiles.queue.type>
<profiles.server.path>
/sampleform
</profiles.server.path>
<profiles.kafka.brokers>
192.168.0.251:9092
</profiles.kafka.brokers>
<profiles.rabbitmq.host>
127.0.0.1
</profiles.rabbitmq.host>
<profiles.rabbitmq.host>
192.168.0.98
</profiles.rabbitmq.host>
<profiles.rabbitmq.port>
5672
</profiles.rabbitmq.port>
<profiles.rabbitmq.port>
5672
</profiles.rabbitmq.port>
<profiles.nacos.server-addr>
192.168.0.252:8848
</profiles.nacos.server-addr>
<profiles.rabbitmq.username>
taxi_mq
</profiles.rabbitmq.username>
<profiles.rabbitmq.password>
admin@2020
</profiles.rabbitmq.password>
<profiles.rabbitmq.virtualhost>
/
</profiles.rabbitmq.virtualhost>
<profiles.nacos.server-addr>
127.0.0.1:8848
</profiles.nacos.server-addr>
<profiles.nacos.group>
DEFAULT_GROUP
</profiles.nacos.group>
<profiles.nacos.group>
DEFAULT_GROUP
</profiles.nacos.group>
<profiles.nacos.namespace>
smart-gov
</profiles.nacos.namespace>
<profiles.nacos.namespace>
smart-gov
</profiles.nacos.namespace>
<profiles.log.path>
/mortals/app/logs
</profiles.log.path>
<profiles.log.path>
/mortals/app/logs
</profiles.log.path>
<package.environment>
build
</package.environment>
<profiles.publish.path>
/home/publish
</profiles.publish.path>
<package.environment>
serve
</package.environment>
<skipDeploy>
false
</skipDeploy>
<skipDeploy>
false
</skipDeploy>
</properties>
</properties>
</profile>
</profile>
...
@@ -44,17 +47,19 @@
...
@@ -44,17 +47,19 @@
<profiles.active>
test
</profiles.active>
<profiles.active>
test
</profiles.active>
<profiles.server.ip>
192.168.0.98
</profiles.server.ip>
<profiles.server.ip>
192.168.0.98
</profiles.server.ip>
<profiles.server.port>
17002
</profiles.server.port>
<profiles.server.port>
17002
</profiles.server.port>
<profiles.nginx.port>
1109
8
</profiles.nginx.port>
<profiles.nginx.port>
1109
9
</profiles.nginx.port>
<profiles.server.path>
/sampleform
</profiles.server.path>
<profiles.server.path>
/sampleform
</profiles.server.path>
<profiles.queue.type>
rabbitmq
</profiles.queue.type>
<profiles.publish.path>
/home/publish
</profiles.publish.path>
<profiles.kafka.brokers>
192.168.0.251:9092
</profiles.kafka.brokers>
<profiles.rabbitmq.host>
192.168.0.98
</profiles.rabbitmq.host>
<profiles.rabbitmq.host>
192.168.0.98
</profiles.rabbitmq.host>
<profiles.rabbitmq.port>
5672
</profiles.rabbitmq.port>
<profiles.rabbitmq.port>
5672
</profiles.rabbitmq.port>
<profiles.rabbitmq.username>
taxi_mq
</profiles.rabbitmq.username>
<profiles.rabbitmq.password>
admin@2020
</profiles.rabbitmq.password>
<profiles.rabbitmq.virtualhost>
/
</profiles.rabbitmq.virtualhost>
<profiles.nacos.server-addr>
192.168.0.252:8848
</profiles.nacos.server-addr>
<profiles.nacos.server-addr>
192.168.0.252:8848
</profiles.nacos.server-addr>
<profiles.nacos.group>
DEFAULT_GROUP
</profiles.nacos.group>
<profiles.nacos.group>
DEFAULT_GROUP
</profiles.nacos.group>
<profiles.nacos.namespace>
smart-gov
</profiles.nacos.namespace>
<profiles.nacos.namespace>
smart-gov
</profiles.nacos.namespace>
<profiles.log.path>
/mortals/app/logs
</profiles.log.path>
<profiles.log.path>
/mortals/app/logs
</profiles.log.path>
<package.environment>
build
</package.environment>
<package.environment>
test
</package.environment>
<skipDeploy>
false
</skipDeploy>
<skipDeploy>
false
</skipDeploy>
</properties>
</properties>
</profile>
</profile>
...
@@ -62,16 +67,21 @@
...
@@ -62,16 +67,21 @@
<id>
product
</id>
<id>
product
</id>
<properties>
<properties>
<profiles.active>
product
</profiles.active>
<profiles.active>
product
</profiles.active>
<profiles.server.port>
19211
</profiles.server.port>
<profiles.server.ip>
192.168.0.251
</profiles.server.ip>
<profiles.queue.type>
rabbitmq
</profiles.queue.type>
<profiles.server.port>
17002
</profiles.server.port>
<profiles.kafka.brokers>
192.168.0.100:9092
</profiles.kafka.brokers>
<profiles.nginx.port>
11099
</profiles.nginx.port>
<profiles.rabbitmq.host>
192.168.0.100
</profiles.rabbitmq.host>
<profiles.server.path>
/sampleform
</profiles.server.path>
<profiles.publish.path>
/home/publish
</profiles.publish.path>
<profiles.rabbitmq.host>
192.168.0.251
</profiles.rabbitmq.host>
<profiles.rabbitmq.port>
5672
</profiles.rabbitmq.port>
<profiles.rabbitmq.port>
5672
</profiles.rabbitmq.port>
<profiles.nacos.server-addr>
192.168.0.100:8848
</profiles.nacos.server-addr>
<profiles.rabbitmq.username>
root_mq
</profiles.rabbitmq.username>
<profiles.rabbitmq.password>
xhx@2022
</profiles.rabbitmq.password>
<profiles.rabbitmq.virtualhost>
/
</profiles.rabbitmq.virtualhost>
<profiles.nacos.server-addr>
192.168.0.251:8848
</profiles.nacos.server-addr>
<profiles.nacos.group>
DEFAULT_GROUP
</profiles.nacos.group>
<profiles.nacos.group>
DEFAULT_GROUP
</profiles.nacos.group>
<profiles.nacos.namespace>
smart-gov
</profiles.nacos.namespace>
<profiles.nacos.namespace>
smart-gov
</profiles.nacos.namespace>
<profiles.log.path>
/mortals/app/logs
</profiles.log.path>
<profiles.log.path>
/
home/
mortals/app/logs
</profiles.log.path>
<package.environment>
build
:prod
</package.environment>
<package.environment>
build
</package.environment>
<skipDeploy>
false
</skipDeploy>
<skipDeploy>
false
</skipDeploy>
</properties>
</properties>
</profile>
</profile>
...
@@ -200,7 +210,6 @@
...
@@ -200,7 +210,6 @@
<groupId>
org.apache.maven.plugins
</groupId>
<groupId>
org.apache.maven.plugins
</groupId>
<artifactId>
maven-resources-plugin
</artifactId>
<artifactId>
maven-resources-plugin
</artifactId>
<executions>
<executions>
<execution>
<execution>
<id>
copy-bin
</id>
<id>
copy-bin
</id>
<phase>
package
</phase>
<phase>
package
</phase>
...
@@ -288,13 +297,9 @@
...
@@ -288,13 +297,9 @@
</executions>
</executions>
</plugin>
</plugin>
<plugin>
<plugin>
<artifactId>
maven-assembly-plugin
</artifactId>
<artifactId>
maven-assembly-plugin
</artifactId>
<version>
3.3.0
</version>
<version>
3.3.0
</version>
<configuration>
<skipAssembly>
${skipDeploy}
</skipAssembly>
</configuration>
<executions>
<executions>
<execution>
<execution>
<id>
make-assembly
</id>
<id>
make-assembly
</id>
...
@@ -318,6 +323,7 @@
...
@@ -318,6 +323,7 @@
<goal>
single
</goal>
<goal>
single
</goal>
</goals>
</goals>
<configuration>
<configuration>
<skipAssembly>
${skipDeploy}
</skipAssembly>
<finalName>
${project.artifactId}-ui
</finalName>
<finalName>
${project.artifactId}-ui
</finalName>
<appendAssemblyId>
false
</appendAssemblyId>
<appendAssemblyId>
false
</appendAssemblyId>
<descriptors>
<descriptors>
...
...
This diff is collapsed.
Click to expand it.
sample-form-manager/src/main/bin/deploy.sh
View file @
b7fbd8e4
...
@@ -10,8 +10,9 @@ LOCK_FILE="/tmp/deploy.lock"
...
@@ -10,8 +10,9 @@ LOCK_FILE="/tmp/deploy.lock"
# 时间变量
# 时间变量
LOG_DATE
=
'date "+%Y-%m-%d"'
LOG_DATE
=
'date "+%Y-%m-%d"'
LOG_TIME
=
'date "+%H-%M-%S"'
LOG_TIME
=
'date "+%H-%M-%S"'
PUBLISH_PATH
=
"
/home/publish
"
PUBLISH_PATH
=
"
@profiles.publish.path@
"
PROJECT_NAME
=
"@project.artifactId@"
PROJECT_NAME
=
"@project.artifactId@"
IP
=
"@profiles.server.ip@"
PORT
=
"@profiles.server.port@"
PORT
=
"@profiles.server.port@"
SHELL_LOG
=
"
${
BASEDIR
}
/
${
SHELL_NAME
}
.log"
SHELL_LOG
=
"
${
BASEDIR
}
/
${
SHELL_NAME
}
.log"
...
@@ -21,7 +22,7 @@ JAVA_HOME="/usr/local/java/jdk1.8"
...
@@ -21,7 +22,7 @@ JAVA_HOME="/usr/local/java/jdk1.8"
NGINX_CONF_PATH
=
"/etc/nginx/conf.d/"
NGINX_CONF_PATH
=
"/etc/nginx/conf.d/"
NGINX_PORT
=
"@profiles.nginx.port@"
NGINX_PORT
=
"@profiles.nginx.port@"
SERVER_PATH
=
"@profiles.server.path@/
"
NGINX_SERVER_PATH
=
"@profiles.server.path@
"
PROJECT_EXECPATH
=
"
${
PUBLISH_PATH
}
/
${
PROJECT_NAME
}
"
PROJECT_EXECPATH
=
"
${
PUBLISH_PATH
}
/
${
PROJECT_NAME
}
"
PROJECT_UI_EXECPATH
=
"
${
PUBLISH_PATH
}
/
${
PROJECT_NAME
}
-ui"
PROJECT_UI_EXECPATH
=
"
${
PUBLISH_PATH
}
/
${
PROJECT_NAME
}
-ui"
PROJECT_FILENAME
=
"
${
PROJECT_NAME
}
.tar.gz"
PROJECT_FILENAME
=
"
${
PROJECT_NAME
}
.tar.gz"
...
@@ -103,7 +104,7 @@ build_nginx() {
...
@@ -103,7 +104,7 @@ build_nginx() {
}
}
location
${
NGINX_SERVER_PATH
}
{
location
${
NGINX_SERVER_PATH
}
{
proxy_pass http://
127.0.0.1
:
${
PORT
}
;
proxy_pass http://
${
IP
}
:
${
PORT
}
;
proxy_set_header Host
\$
host;
proxy_set_header Host
\$
host;
proxy_set_header X-Real-IP
\$
remote_addr;
proxy_set_header X-Real-IP
\$
remote_addr;
proxy_set_header X-Forwarded-For
\$
proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-For
\$
proxy_add_x_forwarded_for;
...
@@ -127,9 +128,7 @@ build_nginx() {
...
@@ -127,9 +128,7 @@ build_nginx() {
autoindex on;
autoindex on;
autoindex_exact_size off;
autoindex_exact_size off;
}
}
}
}
"
>
${
PROJECT_NGINX_CONF
}
"
>
${
PROJECT_NGINX_CONF
}
}
}
...
@@ -139,7 +138,6 @@ start_service_and_nginx() {
...
@@ -139,7 +138,6 @@ start_service_and_nginx() {
systemctl
enable
${
PROJECT_NAME
}
systemctl
enable
${
PROJECT_NAME
}
systemctl daemon-reload
systemctl daemon-reload
systemctl stop
${
PROJECT_NAME
}
systemctl stop
${
PROJECT_NAME
}
sleep
2
systemctl start
${
PROJECT_NAME
}
systemctl start
${
PROJECT_NAME
}
nginx
-t
nginx
-t
nginx
-s
reload
nginx
-s
reload
...
...
This diff is collapsed.
Click to expand it.
sample-form-manager/src/main/resources/application.yml
View file @
b7fbd8e4
spring
:
spring
:
main
:
main
:
allow-bean-definition-overriding
:
true
allow-bean-definition-overriding
:
true
application
:
log
:
level
:
@
profiles.log.level@
path
:
@
profiles.log.path@
This diff is collapsed.
Click to expand it.
sample-form-manager/src/main/resources/static/doc/AllInOne.css
deleted
100644 → 0
View file @
d9e2eb21
This diff is collapsed.
Click to expand it.
sample-form-manager/src/main/resources/static/doc/AllInOne.md.md
deleted
100644 → 0
View file @
d9e2eb21
This diff is collapsed.
Click to expand it.
sample-form-manager/src/main/resources/static/doc/index.html
deleted
100644 → 0
View file @
d9e2eb21
This source diff could not be displayed because it is too large. You can
view the blob
instead.
This diff is collapsed.
Click to expand it.
sample-form-manager/src/main/resources/static/doc/search.js
deleted
100644 → 0
View file @
d9e2eb21
let
api
=
[];
api
.
push
({
alias
:
'
WxOneThingApiController
'
,
order
:
'
1
'
,
link
:
'
一件事微信对外服务接口
'
,
desc
:
'
一件事微信对外服务接口
'
,
list
:
[]
})
api
[
0
].
list
.
push
({
order
:
'
1
'
,
desc
:
'
一件事主题包列表
'
,
});
api
[
0
].
list
.
push
({
order
:
'
2
'
,
desc
:
'
一件事主题列表(包含主题包)
'
,
});
api
[
0
].
list
.
push
({
order
:
'
3
'
,
desc
:
'
一件事列表
'
,
});
api
[
0
].
list
.
push
({
order
:
'
4
'
,
desc
:
'
问题详细
'
,
});
api
[
0
].
list
.
push
({
order
:
'
5
'
,
desc
:
'
问答答案提交后返回的详细结果
'
,
});
api
[
0
].
list
.
push
({
order
:
'
6
'
,
desc
:
'
上传附件
'
,
});
api
[
0
].
list
.
push
({
order
:
'
7
'
,
desc
:
'
删除附件
'
,
});
api
[
0
].
list
.
push
({
order
:
'
8
'
,
desc
:
'
查询用户信息
'
,
});
api
[
0
].
list
.
push
({
order
:
'
9
'
,
desc
:
'
一件事办理资料提交
'
,
});
api
[
0
].
list
.
push
({
order
:
'
10
'
,
desc
:
'
我的办理
'
,
});
api
.
push
({
alias
:
'
WxWechatApiController
'
,
order
:
'
2
'
,
link
:
'
微信认证
'
,
desc
:
'
微信认证
'
,
list
:
[]
})
api
[
1
].
list
.
push
({
order
:
'
1
'
,
desc
:
'
微信注册认证
'
,
});
api
.
push
({
alias
:
'
error
'
,
order
:
'
3
'
,
link
:
'
error_code_list
'
,
desc
:
'
错误码列表
'
,
list
:
[]
})
api
.
push
({
alias
:
'
dict
'
,
order
:
'
4
'
,
link
:
'
dict_list
'
,
desc
:
'
数据字典
'
,
list
:
[]
})
document
.
onkeydown
=
keyDownSearch
;
function
keyDownSearch
(
e
)
{
const
theEvent
=
e
;
const
code
=
theEvent
.
keyCode
||
theEvent
.
which
||
theEvent
.
charCode
;
if
(
code
==
13
)
{
const
search
=
document
.
getElementById
(
'
search
'
);
const
searchValue
=
search
.
value
;
let
searchArr
=
[];
for
(
let
i
=
0
;
i
<
api
.
length
;
i
++
)
{
let
apiData
=
api
[
i
];
const
desc
=
apiData
.
desc
;
if
(
desc
.
indexOf
(
searchValue
)
>
-
1
)
{
searchArr
.
push
({
order
:
apiData
.
order
,
desc
:
apiData
.
desc
,
link
:
apiData
.
link
,
list
:
apiData
.
list
});
}
else
{
let
methodList
=
apiData
.
list
||
[];
let
methodListTemp
=
[];
for
(
let
j
=
0
;
j
<
methodList
.
length
;
j
++
)
{
const
methodData
=
methodList
[
j
];
const
methodDesc
=
methodData
.
desc
;
if
(
methodDesc
.
indexOf
(
searchValue
)
>
-
1
)
{
methodListTemp
.
push
(
methodData
);
break
;
}
}
if
(
methodListTemp
.
length
>
0
)
{
const
data
=
{
order
:
apiData
.
order
,
desc
:
apiData
.
desc
,
link
:
apiData
.
link
,
list
:
methodListTemp
};
searchArr
.
push
(
data
);
}
}
}
let
html
;
if
(
searchValue
==
''
)
{
const
liClass
=
""
;
const
display
=
"
display: none
"
;
html
=
buildAccordion
(
api
,
liClass
,
display
);
document
.
getElementById
(
'
accordion
'
).
innerHTML
=
html
;
}
else
{
const
liClass
=
"
open
"
;
const
display
=
"
display: block
"
;
html
=
buildAccordion
(
searchArr
,
liClass
,
display
);
document
.
getElementById
(
'
accordion
'
).
innerHTML
=
html
;
}
const
Accordion
=
function
(
el
,
multiple
)
{
this
.
el
=
el
||
{};
this
.
multiple
=
multiple
||
false
;
const
links
=
this
.
el
.
find
(
'
.dd
'
);
links
.
on
(
'
click
'
,
{
el
:
this
.
el
,
multiple
:
this
.
multiple
},
this
.
dropdown
);
};
Accordion
.
prototype
.
dropdown
=
function
(
e
)
{
const
$el
=
e
.
data
.
el
;
$this
=
$
(
this
),
$next
=
$this
.
next
();
$next
.
slideToggle
();
$this
.
parent
().
toggleClass
(
'
open
'
);
if
(
!
e
.
data
.
multiple
)
{
$el
.
find
(
'
.submenu
'
).
not
(
$next
).
slideUp
(
"
20
"
).
parent
().
removeClass
(
'
open
'
);
}
};
new
Accordion
(
$
(
'
#accordion
'
),
false
);
}
}
function
buildAccordion
(
apiData
,
liClass
,
display
)
{
let
html
=
""
;
let
doc
;
if
(
apiData
.
length
>
0
)
{
for
(
let
j
=
0
;
j
<
apiData
.
length
;
j
++
)
{
html
+=
'
<li class="
'
+
liClass
+
'
">
'
;
html
+=
'
<a class="dd" href="#_
'
+
apiData
[
j
].
link
+
'
">
'
+
apiData
[
j
].
order
+
'
.
'
+
apiData
[
j
].
desc
+
'
</a>
'
;
html
+=
'
<ul class="sectlevel2" style="
'
+
display
+
'
">
'
;
doc
=
apiData
[
j
].
list
;
for
(
let
m
=
0
;
m
<
doc
.
length
;
m
++
)
{
html
+=
'
<li><a href="#_
'
+
apiData
[
j
].
order
+
'
_
'
+
doc
[
m
].
order
+
'
_
'
+
doc
[
m
].
desc
+
'
">
'
+
apiData
[
j
].
order
+
'
.
'
+
doc
[
m
].
order
+
'
.
'
+
doc
[
m
].
desc
+
'
</a> </li>
'
;
}
html
+=
'
</ul>
'
;
html
+=
'
</li>
'
;
}
}
return
html
;
}
\ No newline at end of file
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