content_copy.html 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292
  1. <style>
  2. .measure-input{
  3. background:transparent url("${ctxPath}/static/images/ruler.gif") repeat-x scroll 0 bottom
  4. }
  5. .mutiUpload{
  6. max-width: 510px;
  7. height:auto;
  8. font-size: 18px;
  9. margin-left: 90px;
  10. margin-top: -10px;
  11. }
  12. .mutiUpload div{
  13. line-height: 1.8;
  14. }
  15. .mutiUpload p{
  16. font-size: 20px;
  17. }
  18. .bjui-pageContent{
  19. margin: 0 auto;
  20. }
  21. </style>
  22. <script type="text/javascript">
  23. function thumb_upload_success(file, data) {
  24. var json = $.parseJSON(data)
  25. $(this).bjuiajax('ajaxDone', json)
  26. if (json[BJUI.keys.statusCode] == BJUI.statusCode.ok) {
  27. $('#j_content_thumb').val(json.filename).trigger('validate')
  28. $('#j_custom_pic').val(json.filename)
  29. $('#j_custom_span_pic').html('<img src="'+ json.filename +'" style="margin: 10px 0 0 0" WIDTH="200" HEIGHT="120"/>')
  30. }
  31. }
  32. function content_save_post(){
  33. $("#status").val("1");
  34. }
  35. function content_save(){
  36. $("#status").val("0");
  37. }
  38. </script>
  39. @if(isWindow=="NO"){
  40. <div class="bjui-pageHeader">
  41. <div class="bjui-searchBar">
  42. <a class="btn btn-default" data-icon="reply" href="${ctxPath}/system/cms/content/page?categoryId=${category.categoryId!}" data-toggle="ajaxload" data-target="#layout-content">返回栏目</a>&nbsp;
  43. <div class="pull-right">
  44. @if(has(content)){
  45. <!--<a class="btn btn-default" data-icon="desktop" href="${ctxPath}/system/cms/content/input?categoryId=${category.categoryId!}&contentId=${content.content_id!}&isWindow=YES" data-toggle="dialog" data-width="850" data-height="650" data-id="post-content-window-tab" data-mask="true">窗口模式</a>&nbsp;-->
  46. @}else{
  47. <!--<a class="btn btn-default" data-icon="desktop" href="${ctxPath}/system/cms/content/input?categoryId=${category.categoryId!}&isWindow=YES" data-toggle="dialog" data-width="900" data-height="600" data-id="post-content-window-tab" data-mask="true">窗口模式</a>&nbsp;-->
  48. @}
  49. </div>
  50. </div>
  51. </div>
  52. @}
  53. <div class="bjui-pageContent">
  54. <form method="post" action="${ctxPath}/system/cms/content/save" id="j_model_form" data-toggle="validate" data-autorefresh="true" data-alertmsg="false">
  55. <input TYPE="hidden" name="userId" value="${session.SysUser.userId!}">
  56. <input TYPE="hidden" name="siteId" value="${session.SysUser.siteId!}">
  57. <input type="hidden" name="tableName" value="${model.tableName!}" >
  58. <input TYPE="hidden" id="status" name="status" >
  59. <div class="form-group tc" hidden>
  60. <label for="j_title" class="control-label x85">标题:</label>
  61. <input type="text" name="title" id="j_title" class="input-nm measure-input" value="${content.title!,xss}" placeholder="请填写标题" size="50" >
  62. </div>
  63. <div class="form-group tc" hidden>
  64. <label for="j_keyword" class="control-label x85">关键字:</label>
  65. <input type="text" name="keywords" id="j_keyword" class="input-nm" value="${content.keywords!,xss}" placeholder="关键字请用逗号,隔开" size="50" >
  66. </div>
  67. <div class="form-group tc" hidden>
  68. <label for="j_des" class="control-label x85">描述:</label>
  69. <textarea id="j_des" name="description" placeholder="请填写文章描述" cols="50">${content.description!,xss}</textarea>
  70. </div>
  71. <div class="form-group tc" >
  72. <label for="categoryId" class="control-label x85">栏目:</label>
  73. <select id="categoryId" data-toggle="selectpicker" class="input-nm" readonly="readonly" name="categoryId">
  74. ${ContentSelectCategoryFunction(session.SysUser.siteId!0,category.categoryId!0)}
  75. </select>
  76. </div>
  77. <div class="form-group tc" hidden>
  78. <label class="control-label x85">封面图片:</label>
  79. <div style="display: inline-block; vertical-align: middle;">
  80. <div id="j_content_thumb" data-toggle="upload" data-uploader="${ctxPath}/uploads"
  81. data-file-size-limit="1024000000"
  82. data-file-type-exts="*.jpg;*.png;*.gif;*.mpg"
  83. data-multi="false"
  84. data-on-upload-success="thumb_upload_success"
  85. data-icon="cloud-upload"></div>
  86. <input type="hidden" name="thumb" value="${content.thumb!}" id="j_custom_pic">
  87. <span id="j_custom_span_pic">
  88. @if(isNotEmpty(content.thumb)){
  89. <IMG WIDTH="200" HEIGHT="120" style="margin: 10px 0 0 0" src="${content.thumb!}">
  90. @}
  91. </span>
  92. </div>
  93. </div>
  94. <div class="form-group tc" hidden>
  95. <label for="j_url" class="control-label x85">外部链接:</label>
  96. <input type="text" name="url" id="j_url" value="${content.url!,xss}" class="input-nm" placeholder="如果填写为外部链接,则文章链接以外部链接为准" size="50" data-rule="url;" >
  97. </div>
  98. <div class="form-group tc" hidden>
  99. <label class="control-label x85">推荐顶置:</label>
  100. <input type="checkbox" id="recommend" name="recommend" data-toggle="icheck" data-label="推荐" ${(isNotEmpty(content.recommend)&&content.recommend)?'checked':''}>
  101. <input type="checkbox" id="top" name="top" data-toggle="icheck" data-label="顶置" ${(isNotEmpty(content.top)&&content.top)?'checked':''}>
  102. </div>
  103. <div class="form-group tc" hidden>
  104. <label for="j_viewnum" class="control-label x85">浏览次数:</label>
  105. <input type="text" name="viewNum" id="j_viewnum" class="input-nm" placeholder="浏览量" value="${content.viewNum!0}" size="20" data-rule="required;integer(+0)" >
  106. </div>
  107. <div class="form-group tc" hidden>
  108. <label for="j_author" class="control-label x85">作者:</label>
  109. <input type="text" name="author" id="j_author" class="input-nm" placeholder="文章作者" value="${isEmpty(content.author)?session.SysUser.username:content.author!,xss}" size="20" data-rule="required;" >
  110. </div>
  111. <div class="form-group tc" hidden>
  112. <label class="control-label x85">标签:</label>
  113. <input type="text" name="tags" data-toggle="tags" VALUE="" data-url="${ctxPath}/system/cms/tag/json" data-width="500" placeholder="输入关键字,回车提交">
  114. </div>
  115. @for(filed in modelFiled){
  116. <div class="form-group" hidden>
  117. @if(filed.filedClass=="input"){
  118. <!--TODO 有待做详细的表单验证-->
  119. <!--普通表单输入-->
  120. @var t="";
  121. @if(filed.notNull){
  122. @t ="data-rule=\"required;";
  123. @if(filed.filedType=='int'){
  124. @t=t+"'integer;'";
  125. @if(filed.filedLength>1){
  126. @t=t+"length(1~"+filed.filedLength+");";
  127. @}else{
  128. @t=t+"length("+filed.filedLength+");";
  129. @}
  130. @}
  131. @t=t+"\"";
  132. @}
  133. <label for="${filed.filedName!}" class="control-label x85">${filed.alias}:</label>
  134. <input type='text' name='${filed.filedName!}' id='${filed.filedName!}' class='input-nm' placeholder='${filed.alias!}' value='${(!has(content)?filed.filedValue!:content[filed.filedName]!),xss}' size='50' ${t!}>
  135. @}
  136. @if(filed.filedClass=="image"){
  137. <!--判断是否为图片上传字段-->
  138. <!--TODO 有待做自定义文件类型-->
  139. <label for="${filed.filedName!}" class="control-label x85">${filed.alias}:</label>
  140. <input type="file" class="form-control" data-name="${filed.filedName!}" data-toggle="webuploader" data-options="
  141. {
  142. pick: {label: '点击选择图片'},
  143. server: '${ctxPath}/uploads',
  144. fileNumLimit: 20,
  145. formData: {dir:'${filed.filedName!}'},
  146. required: true,
  147. uploaded: '',
  148. basePath: '',
  149. accept: {
  150. title: '图片',
  151. extensions: 'jpg,JPG,jpeg,JPEG,png,gif',
  152. mimeTypes: '.jpg,.JPG,.jpeg,.png,gif'
  153. }
  154. }"
  155. >
  156. <input TYPE="hidden" name="${filed.filedName!}" value="${!has(content)?'':content[filed.filedName]}" >
  157. @}
  158. @if(filed.filedClass=="file"){
  159. <!--判断是否为文件上传字段-->
  160. <script type="text/javascript">
  161. function ${filed.filedName!}_upload_success(file, data) {
  162. var json = $.parseJSON(data)
  163. $(this).bjuiajax('ajaxDone', json)
  164. if (json[BJUI.keys.statusCode] == BJUI.statusCode.ok) {
  165. $('#${filed.filedName!}').val(json.filename).trigger('validate');
  166. $('#${filed.filedName!}_file').val(json.filename);
  167. }
  168. }
  169. </script>
  170. <label for="${filed.filedName!}" class="control-label x85">${filed.alias}:</label>
  171. <div style="display: inline-block; vertical-align: middle;">
  172. <!--遍历获取运行上传的文件类型-->
  173. @var strs = strutil.split(filed.filedValue,"#");
  174. @var str="";
  175. @if(isNotEmpty(strs)){
  176. @for(s in strs){
  177. @str=str+"*."+s+";";
  178. @}
  179. @}
  180. <div id="${filed.filedName!}" data-toggle="upload" data-uploader="${ctxPath}/uploads"
  181. data-file-size-limit="1024000000"
  182. data-file-type-exts="${isNotEmpty(str)?strutil.subStringTo(str,0,strutil.length(str)-1):'*.jpg;*.png;*.gif;*.mpg;*.docx;*.doc;*.xls;*.mp4;'}"
  183. data-multi="false"
  184. data-on-upload-success="${filed.filedName!}_upload_success"
  185. data-icon="cloud-upload"></div>
  186. <span>
  187. <input type="text" class="input-nm" style="margin: 5px 0 0 0" size="50" name="${filed.filedName!}" placeholder="${filed.alias!}" value="${(!has(content)?'':content[filed.filedName]!),xss='escape'}" id="${filed.filedName!}_file">
  188. </span>
  189. </div>
  190. @}
  191. @if(filed.filedClass=="editor"){
  192. <!--判断是否为文本编辑器-->
  193. <textarea data-toggle="CKEditor" data-upload="${ctxPath}/uploads/CKEditorUpload" style="height:650px;max-height:750px;margin:10px 0 0 0" name="${filed.filedName!}"}>${(has(content)?content[filed.filedName]:filed.filedValue),xss="escape"}</textarea>
  194. @}
  195. @if(filed.filedClass=="textarea"){
  196. <label for="${filed.filedName!}" class="control-label x85">${filed.alias}:</label>
  197. <!--判断是否为文本编辑器-->
  198. <textarea id="${filed.filedName!}" name="${filed.filedName!}" value="" PLACEHOLDER="${filed.filedValue!}" cols="50" ${filed.notNull?'data-rule=\"required;\"':''}>${(!has(content)?filed.filedValue:content[filed.filedName]),xss="escape"}</textarea>
  199. @}
  200. @if(filed.filedClass=="dateInput"){
  201. <label for="${filed.filedName!}" class="control-label x85">${filed.alias}:</label>
  202. <!--判断是否为日期输入框-->
  203. <input type="text" name="${filed.filedName!}" data-toggle="datepicker" value="${(!has(content)?filed.filedValue!:content[filed.filedName]),xss}" data-pattern="yyyy-MM-dd HH:mm:ss">
  204. @}
  205. @if(filed.filedClass=="radio"){
  206. <label class="control-label x85">${filed.alias}:</label>
  207. <!--判断是否为单选按钮-->
  208. @if(isNotEmpty(filed.filedValue)){
  209. @var radios = strutil.split(filed.filedValue,"#");
  210. @for(radio in radios){
  211. @var checked ="";
  212. @if(has(content)){
  213. @if(radio==content[filed.filedName]){
  214. @checked="checked";
  215. @}
  216. @}
  217. <input type="radio" name="${filed.filedName!}" id="${filed.filedName!}_${radio}" ${checked!} data-toggle="icheck" data-label="[${radio}]" value="${radio}" ${filed.notNull?'data-rule=\"required;\"':''}></input>
  218. @}
  219. @}
  220. @}
  221. @if(filed.filedClass=="checkbox"){
  222. <label for="${filed.filedName!}" class="control-label x85">${filed.alias}:</label>
  223. <!--判断是为多选按钮-->
  224. @if(isNotEmpty(filed.filedValue)){
  225. @var checkboxs = strutil.split(filed.filedValue,"#");
  226. @for(checkbox in checkboxs){
  227. @var checked ="";
  228. @if(has(content)){
  229. @if(checkbox==content[filed.filedName]){
  230. @checked="checked";
  231. @}
  232. @}
  233. <input type="checkbox" name="${filed.filedName!}" id="${filed.filedName!}" ${checked!} data-toggle="icheck" data-label="${checkbox}" value="${checkbox}" ${filed.notNull?'data-rule=\"required;\"':''}></input>
  234. @}
  235. @}
  236. @}
  237. @if(filed.filedClass=="select"){
  238. <label for="${filed.filedName!}" class="control-label x85">${filed.alias}:</label>
  239. <!--判断是为单选菜单-->
  240. @if(isNotEmpty(filed.filedValue)){
  241. @var selects = strutil.split(filed.filedValue,"#");
  242. <select name="${filed.filedName!}" data-toggle="selectpicker" ${filed.notNull?'data-rule=\"required\"':''}>
  243. <option value="" selected>所有</option>
  244. @for(s in selects){
  245. @var selected ="";
  246. @if(has(content)){
  247. @if(s==content[filed.filedName]){
  248. @selected="selected";
  249. @}
  250. @}
  251. <option value="${s}" ${selected!}>${s}</option>
  252. @}
  253. </select>
  254. @}
  255. @}
  256. </div>
  257. @}
  258. </form>
  259. </div>
  260. <div class="bjui-pageFooter">
  261. <ul>
  262. <li><button onclick="content_save()" type="submit" class="btn btn-blue" data-icon="pencil">暂存草稿</button></li>
  263. @if(!(shiro.lacksRole("superAdmin"))){
  264. <li><button onclick="content_save_post()" type="submit" class="btn btn-green" data-icon="send">保存发布</button></li>
  265. @}
  266. </ul>
  267. </div>