form.ftl 30 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625
  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <title>文章</title>
  5. <#include "../../include/head-file.ftl">
  6. </head>
  7. <body>
  8. <div id="form" v-cloak>
  9. <el-header class="ms-header ms-tr" height="50px">
  10. <el-button type="primary" icon="iconfont icon-baocun" size="mini" @click="save()" :loading="saveDisabled">保存
  11. </el-button>
  12. <el-button size="mini" icon="iconfont icon-fanhui" plain onclick="javascript:history.go(-1)">返回
  13. </el-button>
  14. </el-header>
  15. <el-main class="ms-container">
  16. <el-tabs v-model="activeName" style="height: calc(100% - 10px);">
  17. <el-tab-pane v-for="(item, index) in editableTabs"
  18. :key="index"
  19. :label="item.title"
  20. :name="item.name">
  21. <el-scrollbar class="ms-scrollbar" style="height: 100%;">
  22. <el-form v-if="item.title=='文章编辑'" ref="form" :model="form" :rules="rules" label-width="120px" size="mini">
  23. <el-row
  24. gutter="0"
  25. justify="start" align="top">
  26. <el-col :span="returnIsShow?'12':'24'">
  27. <el-form-item label="文章标题" prop="contentTitle">
  28. <template slot='label'>文章标题
  29. <el-popover placement="top-start" title="提示" trigger="hover" >
  30. <a href="http://doc.ms.mingsoft.net/plugs-cms/biao-qian/nei-rong-biao-qian-ms-field.html" target="_blank">{ms:field.title/}</a>
  31. <a href="http://doc.ms.mingsoft.net/plugs-cms/biao-qian/wen-zhang-lie-biao-ms-arclist.html" target="_blank">[field.title/]</a>
  32. <i class="el-icon-question" slot="reference"></i>
  33. </el-popover>
  34. </template>
  35. <el-input v-model="form.contentTitle"
  36. :disabled="false"
  37. :style="{width: '100%'}"
  38. :clearable="true"
  39. placeholder="请输入文章标题">
  40. </el-input>
  41. </el-form-item>
  42. </el-col>
  43. <el-col span="12" v-if="returnIsShow">
  44. <el-form-item label="所属栏目" prop="contentCategoryId">
  45. <template slot='label'>所属栏目
  46. <el-popover placement="top-start" title="提示" trigger="hover" >
  47. <a href="http://doc.ms.mingsoft.net/plugs-cms/biao-qian/nei-rong-biao-qian-ms-field.html" target="_blank">{ms:field.typetitle/}</a>
  48. <i class="el-icon-question" slot="reference"></i>
  49. </el-popover>
  50. </template>
  51. <tree-select :props="{value: 'id',label: 'categoryTitle',children: 'children'}"
  52. :options="contentCategoryIdOptions" :style="{width:'100%'}"
  53. @change="categoryChange"
  54. v-model="form.contentCategoryId"></tree-select>
  55. </el-form-item>
  56. </el-col>
  57. </el-row>
  58. <el-row
  59. gutter="0"
  60. justify="start" align="top">
  61. <el-col span="12">
  62. <el-form-item label="文章类型" prop="contentType">
  63. <el-select v-model="form.contentType"
  64. :style="{width: '100%'}"
  65. :filterable="false"
  66. :disabled="false"
  67. :multiple="true" :clearable="true"
  68. placeholder="请选择文章类型">
  69. <el-option v-for='item in contentTypeOptions' :key="item.dictValue"
  70. :value="item.dictValue"
  71. :label="item.dictLabel"></el-option>
  72. </el-select>
  73. </el-form-item>
  74. </el-col>
  75. <el-col span="12">
  76. <el-form-item label="发布时间" prop="contentDatetime">
  77. <template slot='label'>发布时间
  78. <el-popover placement="top-start" title="提示" trigger="hover" >
  79. <a href="http://doc.ms.mingsoft.net/plugs-cms/biao-qian/nei-rong-biao-qian-ms-field.html" target="_blank">{ms:field.date?string("yyyy-MM-dd")/}</a>
  80. <a href="http://doc.ms.mingsoft.net/plugs-cms/biao-qian/wen-zhang-lie-biao-ms-arclist.html" target="_blank">[field.date?string("yyyy-MM-dd")/]</a>
  81. <i class="el-icon-question" slot="reference"></i>
  82. </el-popover>
  83. </template>
  84. <el-date-picker
  85. v-model="form.contentDatetime"
  86. placeholder="请选择发布时间"
  87. start-placeholder=""
  88. end-placeholder=""
  89. :readonly="false"
  90. :disabled="false"
  91. :editable="true"
  92. :clearable="true"
  93. format="yyyy-MM-dd HH:mm:ss"
  94. value-format="yyyy-MM-dd HH:mm:ss"
  95. :style="{width:'100%'}"
  96. type="datetime">
  97. </el-date-picker>
  98. </el-form-item>
  99. </el-col>
  100. </el-row>
  101. <el-row
  102. gutter="0"
  103. justify="start" align="top">
  104. <el-col span="12">
  105. <el-form-item label="文章作者" prop="contentAuthor">
  106. <template slot='label'>文章作者
  107. <el-popover placement="top-start" title="提示" trigger="hover" >
  108. <a href="http://doc.ms.mingsoft.net/plugs-cms/biao-qian/nei-rong-biao-qian-ms-field.html" target="_blank">{ms:field.author/}</a>
  109. <a href="http://doc.ms.mingsoft.net/plugs-cms/biao-qian/wen-zhang-lie-biao-ms-arclist.html" target="_blank">[field.author/]</a>
  110. <i class="el-icon-question" slot="reference"></i>
  111. </el-popover>
  112. </template>
  113. <el-input v-model="form.contentAuthor"
  114. :disabled="false"
  115. :style="{width: '100%'}"
  116. :clearable="true"
  117. placeholder="请输入文章作者">
  118. </el-input>
  119. </el-form-item>
  120. </el-col>
  121. <el-col span="12">
  122. <el-form-item label="文章来源" prop="contentSource">
  123. <template slot='label'>文章来源
  124. <el-popover placement="top-start" title="提示" trigger="hover" >
  125. <a href="http://doc.ms.mingsoft.net/plugs-cms/biao-qian/nei-rong-biao-qian-ms-field.html" target="_blank">{ms:field.source/}</a>
  126. <a href="http://doc.ms.mingsoft.net/plugs-cms/biao-qian/wen-zhang-lie-biao-ms-arclist.html" target="_blank">[field.source/]</a>
  127. <i class="el-icon-question" slot="reference"></i>
  128. </el-popover>
  129. </template>
  130. <el-input v-model="form.contentSource"
  131. :disabled="false"
  132. :style="{width: '100%'}"
  133. :clearable="true"
  134. placeholder="请输入文章来源">
  135. </el-input>
  136. </el-form-item>
  137. </el-col>
  138. </el-row>
  139. <el-row
  140. gutter="0"
  141. justify="start" align="top">
  142. <el-col span="12">
  143. <el-form-item label="" prop="contentDisplay">
  144. <template slot='label'>是否显示
  145. <el-popover slot="label" placement="top-start" title="提示" width="200" trigger="hover"
  146. content="选择否后前端将不显示,需要重新生成才有效果">
  147. <i class="el-icon-question" slot="reference"></i>
  148. </el-popover>
  149. </template>
  150. <el-radio-group v-model="form.contentDisplay"
  151. :style="{width: ''}"
  152. :disabled="false">
  153. <el-radio :style="{display: true ? 'inline-block' : 'block'}" :label="item.value"
  154. v-for='(item, index) in contentDisplayOptions' :key="item.value + index">
  155. {{true? item.label : item.value}}
  156. </el-radio>
  157. </el-radio-group>
  158. </el-form-item>
  159. </el-col>
  160. <el-col span="12">
  161. <el-form-item label="自定义顺序" prop="contentSort">
  162. <el-input-number
  163. v-model="form.contentSort"
  164. :disabled="false"
  165. controls-position="">
  166. </el-input-number>
  167. </el-form-item>
  168. </el-col>
  169. </el-row>
  170. <el-form-item label="" prop="contentImg">
  171. <template slot='label'>文章缩略图
  172. <el-popover placement="top-start" title="提示" trigger="hover" >
  173. 文章缩略图,支持jpg格式
  174. <a href="http://doc.ms.mingsoft.net/plugs-cms/biao-qian/nei-rong-biao-qian-ms-field.html" target="_blank">{ms:field.litpic/}</a>
  175. <a href="http://doc.ms.mingsoft.net/plugs-cms/biao-qian/wen-zhang-lie-biao-ms-arclist.html" target="_blank">[field.litpic/]</a>
  176. <i class="el-icon-question" slot="reference"></i>
  177. </el-popover>
  178. </template>
  179. <el-upload
  180. :file-list="form.contentImg"
  181. :action="ms.base+'/file/upload.do'"
  182. :on-remove="contentImghandleRemove"
  183. :style="{width:''}"
  184. :limit="1"
  185. :on-exceed="contentImghandleExceed"
  186. :disabled="false"
  187. :data="{uploadPath:'/${appId}/cms/content','isRename':true}"
  188. :on-success="contentImgSuccess"
  189. accept="image/*"
  190. list-type="picture-card">
  191. <i class="el-icon-plus"></i>
  192. <div slot="tip" class="el-upload__tip">最多上传1张图片</div>
  193. </el-upload>
  194. </el-form-item>
  195. <el-form-item label="关键字" prop="contentKeyword">
  196. <template slot='label'>关键字
  197. <el-popover placement="top-start" title="提示" trigger="hover" >
  198. <a href="http://doc.ms.mingsoft.net/plugs-cms/biao-qian/nei-rong-biao-qian-ms-field.html" target="_blank">{{ms:field.keyword/}</a>
  199. <a href="http://doc.ms.mingsoft.net/plugs-cms/biao-qian/wen-zhang-lie-biao-ms-arclist.html" target="_blank">[field.keyword/]</a>
  200. <i class="el-icon-question" slot="reference"></i>
  201. </el-popover>
  202. </template>
  203. <el-input
  204. type="textarea" :rows="5"
  205. :disabled="false"
  206. v-model="form.contentKeyword"
  207. :style="{width: '100%'}"
  208. placeholder="请输入文章关键字">
  209. </el-input>
  210. </el-form-item>
  211. <el-form-item label="描述" prop="contentDescription">
  212. <template slot='label'>描述
  213. <el-popover placement="top-start" title="提示" trigger="hover" >
  214. <a href="http://doc.ms.mingsoft.net/plugs-cms/biao-qian/nei-rong-biao-qian-ms-field.html" target="_blank">{ms:field.descrip/}</a>
  215. <a href="http://doc.ms.mingsoft.net/plugs-cms/biao-qian/wen-zhang-lie-biao-ms-arclist.html" target="_blank">[field.descrip/]</a>
  216. <i class="el-icon-question" slot="reference"></i>
  217. </el-popover>
  218. </template>
  219. <el-input
  220. type="textarea" :rows="5"
  221. :disabled="false"
  222. v-model="form.contentDescription"
  223. :style="{width: '100%'}"
  224. placeholder="请输入对该文章的简短描述,以便用户查看文章简略">
  225. </el-input>
  226. </el-form-item>
  227. <el-form-item label="文章内容" prop="contentDetails">
  228. <template slot='label'>文章内容
  229. <el-popover placement="top-start" title="提示" trigger="hover" >
  230. <a href="http://doc.ms.mingsoft.net/plugs-cms/biao-qian/nei-rong-biao-qian-ms-field.html" target="_blank">{ms:field.content/}</a>
  231. <a href="http://doc.ms.mingsoft.net/plugs-cms/biao-qian/wen-zhang-lie-biao-ms-arclist.html" target="_blank">[field.content/]</a>
  232. <i class="el-icon-question" slot="reference"></i>
  233. </el-popover>
  234. </template>
  235. <vue-ueditor-wrap style="line-height: 0px" v-model="form.contentDetails"
  236. :config="editorConfig"></vue-ueditor-wrap>
  237. </el-form-item>
  238. </el-form>
  239. <div :id="'model'+index" v-else></div>
  240. </el-scrollbar>
  241. </el-tab-pane>
  242. </el-tabs>
  243. </el-main>
  244. </div>
  245. </body>
  246. </html>
  247. <script>
  248. var form = new Vue({
  249. el: '#form',
  250. data: function () {
  251. return {
  252. saveDisabled: false,
  253. activeName: 'form',
  254. model: undefined,
  255. //自定义模型实例
  256. editableTabs: [{
  257. title: '文章编辑',
  258. name: 'form'
  259. }],
  260. editorConfig: {
  261. imageScaleEnabled: true,
  262. autoHeightEnabled: true,
  263. autoFloatEnabled: false,
  264. scaleEnabled: true,
  265. compressSide: 0,
  266. maxImageSideLength: 1000,
  267. maximumWords: 2000,
  268. initialFrameWidth: '100%',
  269. initialFrameHeight: 400,
  270. serverUrl: ms.base + "/static/plugins/ueditor/1.4.3.1/jsp/editor.do?jsonConfig=%7BvideoUrlPrefix:\'" + ms.base + "\',fileUrlPrefix:\'" + ms.base + "\',imageUrlPrefix:\'" + ms.base + "\',imagePathFormat:\'/upload/${appId}/cms/content/editor/%7Btime%7D\',filePathFormat:\'/upload/${appId}/cms/content/editor/%7Btime%7D\',videoPathFormat:\'/upload/${appId}/cms/content/editor/%7Btime%7D\'%7D",
  271. UEDITOR_HOME_URL: ms.base + '/static/plugins/ueditor/1.4.3.1/'
  272. },
  273. contentCategoryIdOptions: [],
  274. returnIsShow: true,
  275. type: '',
  276. //表单数据
  277. form: {
  278. // 文章标题
  279. contentTitle: '',
  280. // 所属栏目
  281. contentCategoryId: '',
  282. // 文章类型
  283. contentType: [],
  284. // 是否显示
  285. contentDisplay: '0',
  286. // 文章作者
  287. contentAuthor: '',
  288. // 文章来源
  289. contentSource: '',
  290. // 自定义顺序
  291. contentSort: 0,
  292. // 文章缩略图
  293. contentImg: [],
  294. // 描述
  295. contentDescription: '',
  296. // 关键字
  297. contentKeyword: '',
  298. // 文章内容
  299. contentDetails: ''
  300. },
  301. contentTypeOptions: [],
  302. categoryIdOptions: [],
  303. contentDisplayOptions: [{
  304. "value": "0",
  305. "label": "是"
  306. }, {
  307. "value": "1",
  308. "label": "否"
  309. }],
  310. rules: {
  311. // 文章标题
  312. contentTitle: [{
  313. "required": true,
  314. "message": "请选择文章标题"
  315. }],
  316. // 发布时间
  317. contentDatetime: [{
  318. "required": true,
  319. "message": "发布时间不能为空"
  320. }],
  321. contentCategoryId: [{
  322. "required": true,
  323. "message": "所属栏目不能为空"
  324. }]
  325. }
  326. };
  327. },
  328. watch: {},
  329. computed: {
  330. currCategory: function () {
  331. var that = this;
  332. return this.categoryIdOptions.find(function (value) {
  333. return value.id === that.form.contentCategoryId;
  334. });
  335. }
  336. },
  337. methods: {
  338. save: function () {
  339. var _this = this;
  340. var that = this; //自定义模型需要验证
  341. if (this.model && !this.model.validate()) {
  342. this.activeName = 'custom-name';
  343. return;
  344. }
  345. var url = ms.manager + "/cms/content/save.do";
  346. if (that.form.id > 0) {
  347. url = ms.manager + "/cms/content/update.do";
  348. }
  349. this.$refs.form[0].validate(function (valid) {
  350. if (valid) {
  351. that.saveDisabled = true; //判断
  352. if (that.categoryIdOptions.filter(function (f) {
  353. return f['id'] == that.form.contentCategoryId;
  354. })[0].categoryType == '2' && that.returnIsShow) {
  355. that.$notify({
  356. title: '提示',
  357. message: '所属栏目不能为封面',
  358. type: 'error'
  359. });
  360. that.saveDisabled = false;
  361. return;
  362. }
  363. var data = JSON.parse(JSON.stringify(that.form));
  364. if (data.contentType != null) {
  365. data.contentType = data.contentType.join(',');
  366. }
  367. data.contentImg = JSON.stringify(data.contentImg);
  368. ms.http.post(url, data).then(function (data) {
  369. if (data.result) {
  370. //保存时需要赋值关联ID
  371. if (that.model) {
  372. that.model.form.linkId = data.data.id;
  373. that.model.save();
  374. }
  375. that.$notify({
  376. title: '成功',
  377. message: '保存成功',
  378. type: 'success'
  379. });
  380. if (that.returnIsShow) {
  381. javascript: history.go(-1);
  382. }
  383. } else {
  384. that.$notify({
  385. title: '失败',
  386. message: data.msg,
  387. type: 'warning'
  388. });
  389. }
  390. that.saveDisabled = false;
  391. });
  392. } else {
  393. _this.activeName = 'form';
  394. return false;
  395. }
  396. });
  397. },
  398. removeModel: function () {
  399. var that = this;
  400. var model = document.getElementById('model1');
  401. var custom = document.getElementById('c_model');
  402. if (custom) {
  403. model.removeChild(custom);
  404. }
  405. that.model = undefined;
  406. },
  407. categoryChange: function () {
  408. this.changeModel();
  409. },
  410. changeModel: function () {
  411. var that = this;
  412. that.editableTabs = [that.editableTabs[0]];
  413. this.removeModel();
  414. if (this.currCategory) {
  415. if (this.currCategory.mdiyModelId) {
  416. ms.http.get(ms.manager + "/mdiy/model/get.do", {
  417. id: this.currCategory.mdiyModelId
  418. }).then(function (data) {
  419. if (data.data && data.data.id) {
  420. that.rederModel(data.data, JSON.parse(data.data.modelJson));
  421. }
  422. });
  423. }
  424. }
  425. },
  426. rederModel: function (modelEntity, data) {
  427. var that = this;
  428. that.editableTabs.push({
  429. title: modelEntity.modelName,
  430. name: 'custom-name'
  431. });
  432. this.removeModel();
  433. that.$nextTick(function () {
  434. var div = document.createElement('div');
  435. div.id = 'c_model';
  436. var model = document.getElementById('model1');
  437. model.appendChild(div);
  438. var s = document.createElement('script');
  439. s.innerHTML = data.script;
  440. var con = document.createElement('div');
  441. con.id = 'custom-model';
  442. con.innerHTML = data.html;
  443. div.appendChild(s);
  444. div.appendChild(con); //初始化自定义模型并传入关联参数
  445. that.model = new custom_model({
  446. data: {
  447. title: modelEntity.modelName,
  448. modelId: modelEntity.id,
  449. form: {
  450. linkId: that.form.id
  451. }
  452. }
  453. });
  454. });
  455. },
  456. getValue: function (data) {
  457. this.form.contentCategoryId = data.id;
  458. },
  459. //获取当前文章
  460. get: function (id) {
  461. var that = this;
  462. ms.http.get(ms.manager + "/cms/content/get.do", {
  463. "id": id
  464. }).then(function (res) {
  465. if (res.result && res.data) {
  466. if (res.data.contentType&&res.data.contentType!='') {
  467. res.data.contentType = res.data.contentType.split(',');
  468. } else {
  469. res.data.contentType = [];
  470. }
  471. if (res.data.contentImg) {
  472. res.data.contentImg = JSON.parse(res.data.contentImg);
  473. res.data.contentImg.forEach(function (value) {
  474. value.url = ms.base + value.path;
  475. });
  476. } else {
  477. res.data.contentImg = [];
  478. }
  479. that.form = res.data;
  480. var category = that.categoryIdOptions.filter(function (f) {
  481. return f['id'] == that.form.contentCategoryId;
  482. });
  483. if (category.length == 1) {
  484. if (category[0].categoryType == '2') {
  485. that.returnIsShow = false;
  486. }
  487. }
  488. that.changeModel();
  489. }
  490. }).catch(function (err) {
  491. console.log(err);
  492. });
  493. },
  494. //获取contentCategoryId数据源
  495. contentCategoryIdOptionsGet: function () {
  496. var that = this;
  497. ms.http.get(ms.manager + "/cms/category/list.do", {
  498. pageSize: 9999
  499. }).then(function (res) {
  500. if (res.result) {
  501. that.contentCategoryIdOptions = ms.util.treeData(res.data.rows, 'id', 'categoryId', 'children');
  502. that.categoryIdOptions = res.data.rows;
  503. that.changeModel();
  504. }
  505. }).catch(function (err) {
  506. console.log(err);
  507. });
  508. },
  509. //获取contentType数据源
  510. contentTypeOptionsGet: function () {
  511. var that = this;
  512. ms.http.get(ms.base + '/mdiy/dict/list.do', {
  513. dictType: '文章属性',
  514. pageSize: 99999
  515. }).then(function (data) {
  516. that.contentTypeOptions = data.rows;
  517. }).catch(function (err) {
  518. console.log(err);
  519. });
  520. },
  521. //contentImg文件上传完成回调
  522. contentImgSuccess: function (response, file, fileList) {
  523. this.form.contentImg.push({
  524. url: file.url,
  525. name: file.name,
  526. path: response,
  527. uid: file.uid
  528. });
  529. },
  530. contentImghandleRemove: function (file, files) {
  531. var index = -1;
  532. index = this.form.contentImg.findIndex(function (text) {
  533. return text == file;
  534. });
  535. if (index != -1) {
  536. this.form.contentImg.splice(index, 1);
  537. }
  538. },
  539. //上传超过限制
  540. contentImghandleExceed: function (files, fileList) {
  541. this.$notify({
  542. title: '当前最多上传1个文件',
  543. type: 'warning'
  544. });
  545. },
  546. //查询列表
  547. list: function (contentCategoryId) {
  548. var that = this;
  549. ms.http.post(ms.manager + "/cms/content/list.do", {
  550. contentCategoryId: contentCategoryId
  551. }).then(function (res) {
  552. if (res.result && res.data.total > 0) {
  553. if (res.data.rows[0].contentType) {
  554. res.data.rows[0].contentType = res.data.rows[0].contentType.split(',');
  555. }
  556. if (res.data.rows[0].contentImg) {
  557. res.data.rows[0].contentImg = JSON.parse(res.data.rows[0].contentImg);
  558. res.data.rows[0].contentImg.forEach(function (value) {
  559. value.url = ms.base + value.path;
  560. });
  561. } else {
  562. res.data.rows[0].contentImg = [];
  563. }
  564. that.form = res.data.rows[0];
  565. }
  566. }).catch(function (err) {
  567. console.log(err);
  568. });
  569. }
  570. },
  571. created: function () {
  572. this.contentCategoryIdOptionsGet();
  573. this.contentTypeOptionsGet();
  574. this.form.id = ms.util.getParameter("id");
  575. if (ms.util.getParameter("categoryId") != 'undefined' && ms.util.getParameter("categoryId") != 'null') {
  576. this.form.contentCategoryId = ms.util.getParameter("categoryId");
  577. }
  578. this.type = ms.util.getParameter("type");
  579. if (this.form.id) {
  580. this.get(this.form.id);
  581. }
  582. if (this.type) {
  583. this.list(this.form.contentCategoryId);
  584. this.returnIsShow = false;
  585. }
  586. }
  587. });
  588. </script>
  589. <style>
  590. .el-select {
  591. width: 100%;
  592. }
  593. body {
  594. overflow: hidden;
  595. }
  596. #form {
  597. overflow: hidden;
  598. }
  599. </style>