edit.htm 66 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210
  1. {include file="public/layout" /}
  2. <script type="text/javascript" src="__PUBLIC__/plugins/laydate/laydate.js"></script>
  3. {load href="__PUBLIC__/plugins/Ueditor/ueditor.config.js" /}
  4. {load href="__PUBLIC__/plugins/Ueditor/ueditor.all.min.js" /}
  5. {load href="__PUBLIC__/plugins/Ueditor/lang/zh-cn/zh-cn.js" /}
  6. <body style="overflow: auto; cursor: default; -moz-user-select: inherit;background-color:#F4F4F4; padding: 20px; ">
  7. <div id="append_parent"></div>
  8. <div id="ajaxwaitid"></div>
  9. {include file="shop/left" /}
  10. <div class="page" style="min-width:auto; margin-left:98px;">
  11. <div class="flexigrid">
  12. <div class="fixed-bar">
  13. <div class="item-title"><a class="back" href="javascript:history.back();" title="返回列表"><i class="fa fa-chevron-left"></i></a>
  14. <div class="subject">
  15. <h3>编辑产品</h3>
  16. <h5></h5>
  17. </div>
  18. <ul class="tab-base nc-row">
  19. <li><a href="javascript:void(0);" data-index='1' class="tab current"><span>常规选项</span></a></li>
  20. <li><a href="javascript:void(0);" data-index='2' class="tab"><span>商品参数</span></a></li>
  21. <li><a href="javascript:void(0);" data-index='3' class="tab"><span>SEO选项</span></a></li>
  22. <li><a href="javascript:void(0);" data-index='4' class="tab"><span>其他选项</span></a></li>
  23. </ul>
  24. </div>
  25. </div>
  26. <form class="form-horizontal" id="post_form" action="{:url('ShopProduct/edit')}" method="post">
  27. <!-- 常规信息 -->
  28. <div class="ncap-form-default tab_div_1">
  29. <dl class="row">
  30. <dt class="tit">
  31. <label for="title"><em>*</em>标题</label>
  32. </dt>
  33. <dd class="opt">
  34. <input type="text" name="title" value="{$field.title}" id="title" class="input-txt" maxlength="100">
  35. <span class="err"></span>
  36. <p class="notic"></p>
  37. </dd>
  38. </dl>
  39. <dl class="row">
  40. <dt class="tit">
  41. <label for="title"><em>*</em>所属栏目</label>
  42. </dt>
  43. <dd class="opt">
  44. <select name="typeid" id="typeid">
  45. {$arctype_html}
  46. </select>
  47. <span class="err"></span>
  48. <p class="notic"></p>
  49. </dd>
  50. </dl>
  51. <dl class="row">
  52. <dt class="tit">
  53. <label>文档属性</label>
  54. </dt>
  55. <dd class="opt">
  56. <label><input type="checkbox" name="is_head" value="1" {if condition="$field.is_head == 1"}checked{/if}>头条[h]</label>&nbsp;
  57. <label><input type="checkbox" name="is_recom" value="1" {if condition="$field.is_recom == 1"}checked{/if}>推荐[c]</label>&nbsp;
  58. <label><input type="checkbox" name="is_special" value="1" {if condition="$field.is_special == 1"}checked{/if}>特荐[a]</label>&nbsp;
  59. <label><input type="checkbox" name="is_b" value="1" {if condition="$field.is_b == 1"}checked{/if}>加粗[b]</label>&nbsp;
  60. <label><input type="checkbox" name="is_litpic" value="1" {if condition="$field.is_litpic == 1"}checked{/if}>图片[p]</label>&nbsp;
  61. <label><input type="checkbox" name="is_jump" value="1" {if condition="$field.is_jump == 1"}checked{/if}>跳转[j]</label>&nbsp;
  62. <span class="err"></span>
  63. <p class="notic"></p>
  64. </dd>
  65. </dl>
  66. <dl class="row {if condition="$field.is_jump != 1"}none{/if} dl_jump">
  67. <dt class="tit">
  68. <label>跳转网址</label>
  69. </dt>
  70. <dd class="opt">
  71. <input type="text" value="{$field.jumplinks}" name="jumplinks" id="jumplinks" class="input-txt" placeholder="http://">
  72. <span class="err"></span>
  73. <p class="notic">请输入完整的URL网址(包含http或https),设置后访问该条信息将直接跳转到设置的网址</p>
  74. </dd>
  75. </dl>
  76. <dl class="row">
  77. <dt class="tit">
  78. <label>缩略图</label>
  79. </dt>
  80. <dd class="opt">
  81. <div class="input-file-show div_litpic_local" {neq name="$field.is_remote" value="0"}style="display: none;"{/neq}>
  82. <span class="show">
  83. <a id="img_a" target="_blank" class="nyroModal" rel="gal" href="{$field.litpic_local|default='javascript:void(0);'}">
  84. <i id="img_i" class="fa fa-picture-o" {notempty name="$field.litpic_local"}onmouseover="layer_tips=layer.tips('<img src={$field.litpic_local|default=''} class=\'layer_tips_img\'>',this,{tips: [1, '#fff']});"{/notempty} onmouseout="layer.close(layer_tips);"></i>
  85. </a>
  86. </span>
  87. <span class="type-file-box">
  88. <input type="text" id="litpic_local" name="litpic_local" value="{$field.litpic_local|default=''}" class="type-file-text">
  89. <input type="button" name="button" id="button1" value="选择上传..." class="type-file-button">
  90. <input class="type-file-file" onClick="GetUploadify(1,'','allimg','img_call_back')" size="30" hidefocus="true" nc_type="change_site_logo"
  91. title="点击前方预览图可查看大图,点击按钮选择文件并提交表单后上传生效">
  92. </span>
  93. </div>
  94. <input type="text" id="litpic_remote" name="litpic_remote" value="{$field.litpic_remote|default=''}" placeholder="http://" class="input-txt" onKeyup="keyupRemote(this, 'litpic');" {neq name="$field.is_remote" value="1"}style="display: none;"{/neq}>
  95. &nbsp;
  96. <label><input type="checkbox" name="is_remote" id="is_remote" value="1" {eq name="$field.is_remote" value="1"}checked="checked"{/eq} onClick="clickRemote(this, 'litpic');">远程图片</label>
  97. <span class="err"></span>
  98. <p class="notic">当没有手动上传图片时候,会自动提取正文的第一张图片作为缩略图</p>
  99. &nbsp;<a href="javascript:void(0);" onclick="system_thumb();" class="ncap-btn ncap-btn-green">缩略图配置</a>
  100. </dd>
  101. </dl>
  102. <dl class="row">
  103. <dt class="tit">
  104. <label>图片集</label>
  105. </dt>
  106. <dd class="opt">
  107. <div class="tab-pane pics" id="tab_proimg">
  108. <a href="javascript:void(0);" onClick="GetUploadify(30,'','allimg','proimg_call_back');" class="imgupload">
  109. <i class="fa fa-photo"></i>上传图片
  110. </a>
  111. <table class="table table-bordered">
  112. <tbody>
  113. <tr>
  114. <td class="sort-list">
  115. {volist name="proimg_list" id="vo" key="k"}
  116. <div class="images_upload" style="display:inline-block;">
  117. <div style="position: relative; height: 130px;">
  118. <input type="hidden" name="proimg[]" value="{$vo['image_url']}">
  119. <a href="{$vo['image_url']}" onclick="" class="upimg" target="_blank" title="拖动修改排序">
  120. <img src="{$vo['image_url']}" width="120" height="120">
  121. </a>
  122. <a href="javascript:void(0)" onclick="ClearPicArr2(this,'{$vo['image_url']}')" class="delect">删除</a>
  123. </div>
  124. <textarea rows="5" cols="60" name="imgintro[]" style="height:28px; width: 136px;" placeholder="图片注释">{$vo.intro}</textarea>
  125. </div>
  126. {/volist}
  127. <div class="images_upload">
  128. </div>
  129. </td>
  130. </tr>
  131. </tbody>
  132. </table>
  133. </div>
  134. <!-- 上传图片显示的样板 start -->
  135. <div class="images_upload_tpl none">
  136. <div class="images_upload">
  137. <div style="position: relative; height: 130px;">
  138. <input type="hidden" name="proimg[]" value="" />
  139. <a href="javascript:void(0);" onClick="" class="upimg" title="拖动修改排序">
  140. <img src="__STATIC__/admin/images/add-button.jpg" width="120" height="120" />
  141. </a>
  142. <a href="javascript:void(0)" class="delect">&nbsp;&nbsp;</a>
  143. </div>
  144. <textarea rows="5" cols="60" name="imgintro[]" style="height:28px; width: 136px;" placeholder="图片注释"></textarea>
  145. </div>
  146. </div>
  147. <!-- 上传图片显示的样板 end -->
  148. <span class="err"></span>
  149. <p class="notic"></p>
  150. </dd>
  151. </dl>
  152. {if condition="!empty($shopConfig['shop_open']) && 1 == $shopConfig['shop_open']"}
  153. <!-- 产品价格属性 -->
  154. {eq name="$shopConfig['shop_type']" value="2"}
  155. <dl class="row">
  156. <dt class="tit">
  157. <label for="uname">产品类型</label>
  158. </dt>
  159. <dd class="opt">
  160. <label>
  161. <input type="radio" name="prom_type" value="0" onclick="change_prom_type(0)" {eq name="$field.prom_type" value="0" } checked="checked" {/eq} />普通产品
  162. </label>
  163. <br/>
  164. <label>
  165. <input type="radio" name="prom_type" value="1" onclick="change_prom_type(1)" {eyou:range name="$field.prom_type" value="1,2,3" type="in"} checked="checked" {/eyou:range}/>虚拟产品
  166. </label>
  167. </dd>
  168. </dl>
  169. {else/}
  170. {empty name="$IsSame"}
  171. <input type="hidden" name="prom_type" value="{$field.prom_type}"/>
  172. {else/}
  173. <dl class="row">
  174. <dt class="tit">
  175. <label for="uname">产品类型</label>
  176. </dt>
  177. <dd class="opt">
  178. <label>
  179. <input type="radio" name="prom_type" value="0" onclick="change_prom_type(0)" {eq name="$field.prom_type" value="0" } checked="checked" {/eq} />普通产品
  180. </label>
  181. <br/>
  182. <label>
  183. <input type="radio" name="prom_type" value="1" onclick="change_prom_type(1)" {eyou:range name="$field.prom_type" value="1,2,3" type="in"} checked="checked" {/eyou:range}/>虚拟产品
  184. </label>
  185. </dd>
  186. </dl>
  187. {/empty}
  188. {/eq}
  189. {/if}
  190. <dl class="row" id="fahuoxingshi" {empty name="$field.prom_type"} style="display: none;" {/empty}>
  191. <dt class="tit">
  192. <label for="fahuo">发货形式</label>
  193. </dt>
  194. <dd class="opt">
  195. <label>
  196. <input type="radio" name="prom_type_vir" value="1" onclick="change_prom_type(2)" {eq name="$field.prom_type" value="1" } checked="checked" {/eq}/>手动发货
  197. </label>
  198. &nbsp;
  199. <label>
  200. <input type="radio" name="prom_type_vir" value="2" onclick="change_prom_type(3)" {eq name="$field.prom_type" value="2" } checked="checked" {/eq}/>网盘下载
  201. </label>
  202. &nbsp;
  203. <label>
  204. <input type="radio" name="prom_type_vir" value="3" onclick="change_prom_type(4)" {eq name="$field.prom_type" value="3" } checked="checked" {/eq}/>文本内容
  205. </label>
  206. </dd>
  207. </dl>
  208. <div id="wangpanxiazai" {neq name="$field.prom_type" value="2"} style="display: none;" {/neq}>
  209. <dl class="row">
  210. <dt class="tit">
  211. <label for="netdisk_url"><em>*</em>网盘地址</label>
  212. </dt>
  213. <dd class="opt">
  214. <input type="text" name="netdisk_url" id="netdisk_url" value="{$netdisk.netdisk_url|default=''}" class="input-txt" placeholder="http://">
  215. <span class="err"></span>
  216. <p class="notic">输入完整的URL网址(包含http或https)</p>
  217. </dd>
  218. </dl>
  219. <dl class="row">
  220. <dt class="tit">
  221. <label for="netdisk_pwd">提取码</label>
  222. </dt>
  223. <dd class="opt">
  224. <input type="text" name="netdisk_pwd" value="{$netdisk.netdisk_pwd|default=''}" id="netdisk_pwd" class="input-txt">
  225. <span class="err"></span>
  226. <p class="notic"></p>
  227. </dd>
  228. </dl>
  229. <dl class="row">
  230. <dt class="tit">
  231. <label for="unzip_pwd">解压密码</label>
  232. </dt>
  233. <dd class="opt">
  234. <input type="text" name="unzip_pwd" value="{$netdisk.unzip_pwd|default=''}" id="unzip_pwd" class="input-txt">
  235. <span class="err"></span>
  236. <p class="notic"></p>
  237. </dd>
  238. </dl>
  239. </div>
  240. <dl class="row" id="wenbenneirong" {neq name="$field.prom_type" value="3"} style="display: none;" {/neq}>
  241. <dt class="tit">
  242. <label for="text_content"><em>*</em>文本内容</label>
  243. </dt>
  244. <dd class="opt">
  245. <textarea rows="5" cols="80" id="text_content" name="text_content" style="width: 375px;height:160px;">{$netdisk.text_content|default=''}</textarea>
  246. <p class="notic"></p>
  247. </dd>
  248. </dl>
  249. {if condition="1 == $shopConfig['shop_open'] && !empty($ifcontrolRow['users_price'])"}
  250. {if condition="!isset($shopConfig['shop_open_spec']) || 0 == $shopConfig['shop_open_spec']"}
  251. {else/}
  252. <dl class="row">
  253. <dt class="tit">
  254. <label for="users_price">商品规格</label>
  255. </dt>
  256. <dd class="opt">
  257. <div>
  258. <div>
  259. <input type="hidden" id="spec_mark_id_arr" value="{$spec_mark_id_arr}">
  260. <select name="spec_value" id="spec_value" onchange="SpecSelectName(this)">
  261. <option value="0">选择规格名称</option>
  262. {volist name="preset_value" id="vo"}
  263. <option value="{$vo.preset_mark_id}">{$vo.preset_name}</option>
  264. {/volist}
  265. </select>
  266. <a href="javascript:void(0);" onclick="SpecTempLate();" class="ncap-btn ncap-btn-green">规格模板库</a>
  267. </div><br/>
  268. <div id='SpecSelectName'>{volist name="SpecSelectName" id="vo"}{$vo}{/volist}</div>
  269. </div>
  270. <span class="err"></span>
  271. <p class="notic"></p>
  272. </dd>
  273. </dl>
  274. <dl class="row">
  275. <dt class="tit">
  276. <label for="users_price">价格/库存</label>
  277. </dt>
  278. <dd class="opt">
  279. <div id='SpecTempLateDiv'>
  280. {$HtmlTable}
  281. </div>
  282. <span class="err"></span>
  283. <p class="notic"></p>
  284. </dd>
  285. </dl>
  286. {/if}
  287. {/if}
  288. {if condition="!empty($ifcontrolRow['users_price'])"}
  289. <dl class="row">
  290. <dt class="tit">
  291. <label for="users_price">
  292. {if condition="1 == $shopConfig['shop_open']"}<em>*</em>{/if}价格
  293. </label>
  294. </dt>
  295. <dd class="opt">
  296. <input type="text" name="users_price" id="users_price" maxlength="100" placeholder="原价" style="width: 10%;" value="{$field.users_price}">
  297. <span class="err"></span>
  298. <p class="notic"></p>
  299. </dd>
  300. </dl>
  301. {/if}
  302. {if condition="1 == $shopConfig['shop_open'] && !empty($ifcontrolRow['users_price'])"}
  303. {if condition="empty($shopConfig['shop_open_spec'])"}
  304. <dl class="row">
  305. <dt class="tit">
  306. <label for="stock_count">库存</label>
  307. </dt>
  308. <dd class="opt">
  309. <input type="text" name="stock_count" style="width: 10%;" value="{empty name='$field.stock_count'}99999{else /}{$field.stock_count}{/empty}">
  310. <label>
  311. <input type="checkbox" name="stock_show" value='1' {eq name="$field.stock_show" value="1"}checked{/eq}>页面显示商品库存
  312. </label>
  313. <span class="err"></span>
  314. <p class="notic"></p>
  315. </dd>
  316. </dl>
  317. {else /}
  318. <dl class="row">
  319. <dt class="tit">
  320. <label for="stock_count">库存</label>
  321. </dt>
  322. <dd class="opt">
  323. <input type="text" name="stock_count" {notempty name="$spec_mark_id_arr" value="1"}readonly="readonly"{/notempty} id="stock_count" style="width: 10%;" maxlength="100" value="{$field.stock_count}">
  324. <label>
  325. <input type="checkbox" name="stock_show" value='1' {eq name="$field.stock_show" value="1"}checked{/eq}>页面显示商品库存
  326. </label>
  327. <span class="err"></span>
  328. <p class="notic"></p>
  329. </dd>
  330. </dl>
  331. <script type="text/javascript">
  332. // 规格列表管理
  333. var TemplateUrl = "{:url('Shop/spec_template')}";
  334. // 规格选择
  335. var SelectUrl = "{:url('Shop/spec_select')}";
  336. // 获取规格名称规格值框架URL
  337. var GetHtmlUrl = "{:url('Shop/assemble_spec_data')}";
  338. // 当规格库更新后,调用此方式及时更新选择规格名称的下拉框信息
  339. var GetPresetSpecUrl = "{:url('Shop/update_spec_info')}";
  340. // 同步更新规格库数据到产品规格中,单条操作
  341. var RefreshSpecUrl = "{:url('Shop/refresh_spec_value')}";
  342. </script>
  343. <script type="text/javascript">
  344. $(function () {
  345. var stock_count = 0;
  346. $('.stock_count').each(function(){
  347. stock_count +=+ $(this).val();
  348. })
  349. if (0 === stock_count) {
  350. stock_count = '{$field.stock_count}';
  351. }
  352. $('#stock_count').val(stock_count);
  353. // 取最小值价格
  354. UpPrice();
  355. // 合并单元格
  356. MergeCells();
  357. });
  358. // 规格列表管理
  359. function SpecTempLate() {
  360. //iframe窗
  361. layer.open({
  362. type: 2,
  363. title: '规格模板库',
  364. shadeClose: false,
  365. maxmin: false, //开启最大化最小化按钮
  366. area: ['90%', '90%'],
  367. content: TemplateUrl
  368. });
  369. }
  370. // 更新同步规格值信息
  371. function RefreshSpecValue(obj) {
  372. layer.confirm('此操作将会把规格库<span style="color:red;">'+$(obj).data('name')+'</span>的规格数据同步更新!操作不可逆,确认同步?', {
  373. title: false,
  374. btn: ['确定', '取消']
  375. }, function () {
  376. layer_loading('正在处理');
  377. var mark_id = $(obj).data('mark_id');
  378. if (mark_id) {
  379. var aid = $("input[name=aid]").val();
  380. $.ajax({
  381. type : 'post',
  382. url : RefreshSpecUrl,
  383. data : {spec_mark_id:mark_id, aid:aid, _ajax:1},
  384. dataType : 'json',
  385. success : function(res){
  386. layer.closeAll();
  387. if (res.data) {
  388. // 更新规格值下拉框
  389. if (res.data.ValueOption) {
  390. $('#spec_value_'+mark_id).empty().html(res.data.ValueOption);
  391. }
  392. // 更新页面上已选的规格名称及规格值
  393. if (res.data.UpData) {
  394. for (var i = 0; i < res.data.UpData.length; i++) {
  395. /*替换已选商品规格名称及规格值*/
  396. // 替换规格名称
  397. $('.spec_name_span_'+res.data.UpData[i]['spec_mark_id']).html(res.data.UpData[i]['spec_name']);
  398. $('.spec_name_input_'+res.data.UpData[i]['spec_mark_id']).val(res.data.UpData[i]['spec_name']);
  399. if (res.data.UpData[i]['spec_value_id']) {
  400. // 替换规格值
  401. $('.spec_value_span_'+res.data.UpData[i]['spec_value_id']).html(res.data.UpData[i]['spec_value']);
  402. $('.spec_value_input_'+res.data.UpData[i]['spec_value_id']).val(res.data.UpData[i]['spec_value']);
  403. }
  404. /* END */
  405. }
  406. }
  407. // 清除页面上已选的规格数据
  408. if (res.data.SpecIds) {
  409. if (res.data.DelAllSpec) {
  410. $('#spec_'+res.data.DelAllSpec).remove();
  411. }else{
  412. for (var i = 0; i < res.data.SpecIds.length; i++) {
  413. $('#preset-bt2_'+res.data.SpecIds[i]).remove();
  414. }
  415. }
  416. }
  417. // 重新加载规格价格库存填写栏
  418. if (res.data.HtmlTable && res.data.SpecMarks) {
  419. // 加载规格框架
  420. $('#SpecTempLateDiv').html(res.data.HtmlTable);
  421. // 合并单元格
  422. MergeCells();
  423. $('#spec_mark_id_arr').val(res.data.SpecMarks);
  424. }
  425. }
  426. layer.msg(res.msg, {time:1500, icon: 1});
  427. },
  428. error : function() {
  429. layer.closeAll();
  430. layer.alert('未知错误,无法继续!', {icon: 5});
  431. }
  432. });
  433. }else{
  434. layer.closeAll();
  435. layer.msg('数据有误,同步失败,请刷新重试!', {time:2000, icon: 2});
  436. }
  437. }, function (index) {
  438. // 取消
  439. layer.closeAll(index);
  440. });
  441. }
  442. // 加载下拉框
  443. function SpecSelectName(obj) {
  444. var aid = $("input[name=aid]").val();
  445. var spec_mark_id = $(obj).val();
  446. var spec_mark_id_arr = $('#spec_mark_id_arr').val();
  447. var aid = $("input[name=aid]").val();
  448. $.ajax({
  449. type : 'post',
  450. url : SelectUrl,
  451. data : {aid:aid,spec_mark_id:spec_mark_id,spec_mark_id_arr:spec_mark_id_arr,preset_mark_id_arr:spec_mark_id_arr,_ajax:1},
  452. dataType : 'json',
  453. success : function(res){
  454. if (0 == res.code) {
  455. showErrorMsg(res.msg);
  456. }else{
  457. var html = [];
  458. // 主DIV加载
  459. html += [
  460. '<div class="prset-box" id="preset_'+spec_mark_id+'">'+
  461. '<div id="div_'+spec_mark_id+'">'+
  462. '<div><span class="preset-bt"><span class="spec_name_span_'+spec_mark_id+'">'+res.data.preset_name+'</span><em data-name="'+res.data.preset_name+'" data-mark_id="'+spec_mark_id+'" onclick="DelDiv(this)"><i class="fa fa-times-circle" title="关闭"></i></em></span>'+
  463. '<span id="SelectEd_'+spec_mark_id+'"></span> &nbsp; &nbsp;'+
  464. '<select name="spec_value" id="spec_value_'+spec_mark_id+'" onchange="AppEndPreset(this,'+spec_mark_id+')">'+
  465. '</select> &nbsp; <span title="同步规格值" data-mark_id="'+spec_mark_id+'" data-name="'+res.data.preset_name+'" onclick="RefreshSpecValue(this);"><i class="fa fa-refresh"></i></span>'+
  466. '</div>'+
  467. '</div><br/>'+
  468. '</div>'
  469. ];
  470. $('#SpecSelectName').append(html);
  471. // 预设值加载
  472. $('#spec_value_'+spec_mark_id).empty().html(res.data.preset_value_option);
  473. // 更新预设名称下拉框
  474. res.data.preset_name_option = '<option value="0">选择规格名称</option>'+ res.data.preset_name_option;
  475. $('#spec_value').empty().html(res.data.preset_name_option);
  476. $('#spec_mark_id_arr').val(res.data.spec_mark_id_arr);
  477. }
  478. }
  479. });
  480. }
  481. // 清除session中的指定数据,同时对数据库进行操作
  482. function DelDiv(obj) {
  483. var del_mark_id = $(obj).attr('data-mark_id');
  484. var spec_mark_id_arr = $('#spec_mark_id_arr').val();
  485. var aid = $("input[name=aid]").val();
  486. $.ajax({
  487. type : 'post',
  488. url : GetHtmlUrl,
  489. data : {aid:aid,del_mark_id:del_mark_id,spec_mark_id_arr:spec_mark_id_arr,_ajax:1},
  490. dataType : 'json',
  491. success : function(res){
  492. layer.closeAll();
  493. // 清除页面html
  494. $(obj).parent().parent().parent().parent().remove();
  495. if (res.data.HtmlTable) {
  496. // 加载规格框架
  497. $('#SpecTempLateDiv').html(res.data.HtmlTable);
  498. // 合并单元格
  499. MergeCells();
  500. if (res.data.HtmlTable != ' ') {
  501. $("#users_price").attr("readonly", "readonly");
  502. $("#stock_count").attr("readonly", "readonly");
  503. } else {
  504. $("#users_price").removeAttr("readonly");
  505. $("#stock_count").removeAttr("readonly");
  506. }
  507. } else {
  508. $("#users_price").removeAttr("readonly");
  509. $("#stock_count").removeAttr("readonly");
  510. }
  511. // 更新预设名称下拉框
  512. res.data.PresetNameOption = '<option value="0">选择规格名称</option>'+ res.data.PresetNameOption;
  513. $('#spec_value').empty().html(res.data.PresetNameOption);
  514. $('#spec_mark_id_arr').val(res.data.PresetMarkIdArray);
  515. }
  516. });
  517. }
  518. // 清除session中的指定数据,同时对数据库进行操作
  519. function DelValue(obj) {
  520. var del_mark_id = $(obj).attr('data-mark_id');
  521. var del_preset_id = $(obj).attr('data-preset_id');
  522. var aid = $("input[name=aid]").val();
  523. $.ajax({
  524. type : 'post',
  525. url : GetHtmlUrl,
  526. data : {aid:aid,del_preset_id:del_preset_id,del_mark_id:del_mark_id,_ajax:1},
  527. dataType : 'json',
  528. success : function(res){
  529. layer.closeAll();
  530. // 清除页面html
  531. $(obj).parent().remove();
  532. if (res.data.PresetValueOption) {
  533. $('#spec_value_'+del_mark_id).empty().html(res.data.PresetValueOption);
  534. }
  535. if (res.data.HtmlTable) {
  536. // 加载规格框架
  537. $('#SpecTempLateDiv').html(res.data.HtmlTable);
  538. // 合并单元格
  539. MergeCells();
  540. if (res.data.HtmlTable != ' ') {
  541. $("#users_price").attr("readonly", "readonly");
  542. $("#stock_count").attr("readonly", "readonly");
  543. } else {
  544. $("#users_price").removeAttr("readonly");
  545. $("#stock_count").removeAttr("readonly");
  546. }
  547. } else {
  548. $("#users_price").removeAttr("readonly");
  549. $("#stock_count").removeAttr("readonly");
  550. }
  551. }
  552. });
  553. }
  554. // 追加预设规格名称和规格值
  555. function AppEndPreset(obj, preset_mark_id) {
  556. var preset_id = $(obj).val();
  557. var aid = $("input[name=aid]").val();
  558. $.ajax({
  559. type : 'post',
  560. url : GetHtmlUrl,
  561. data:{aid:aid,preset_id:preset_id,preset_mark_id:preset_mark_id,_ajax:1},
  562. dataType : 'json',
  563. success : function(res){
  564. if (0 == res.code) {
  565. showErrorMsg(res.msg);
  566. }else{
  567. // 追加选中的值
  568. $('#SelectEd_'+preset_mark_id).append(
  569. '<span class="preset-bt2" id="preset-bt2_'+preset_id+'"><span class="spec_value_span_'+preset_id+'">'+res.data.SelectPresetValue+'</span><em data-value="'+res.data.SelectPresetValue+'" data-mark_id="'+preset_mark_id+'" data-preset_id="'+preset_id+'" onclick="DelValue(this)"><i class="fa fa-times-circle" title="关闭"></i></em> &nbsp; </span>'
  570. );
  571. if (res.data.PresetValueOption) {
  572. $('#spec_value_'+preset_mark_id).empty().html(res.data.PresetValueOption);
  573. }
  574. if (res.data.HtmlTable) {
  575. // 加载规格框架
  576. $('#SpecTempLateDiv').html(res.data.HtmlTable);
  577. // 合并单元格
  578. MergeCells();
  579. if (res.data.HtmlTable != ' ') {
  580. $("#users_price").attr("readonly", "readonly");
  581. $("#stock_count").attr("readonly", "readonly");
  582. } else {
  583. $("#users_price").removeAttr("readonly");
  584. $("#stock_count").removeAttr("readonly");
  585. }
  586. } else {
  587. $("#users_price").removeAttr("readonly");
  588. $("#stock_count").removeAttr("readonly");
  589. }
  590. }
  591. }
  592. });
  593. }
  594. // 当规格库更新后,调用此方式及时更新选择规格名称的下拉框信息及规格框信息
  595. function UpPresetSpecData(preset_mark_id) {
  596. var spec_mark_id_arr = $('#spec_mark_id_arr').val();
  597. var aid = $("input[name=aid]").val();
  598. $.ajax({
  599. type : 'post',
  600. url : GetPresetSpecUrl,
  601. data : {aid:aid,preset_mark_id:preset_mark_id,spec_mark_id_arr:spec_mark_id_arr,preset_mark_id_arr:spec_mark_id_arr,_ajax:1},
  602. dataType : 'json',
  603. success : function(res){
  604. // 更新规格名称下拉框
  605. res.data.spec_name_option = '<option value="0">选择规格名称</option>'+ res.data.spec_name_option;
  606. $('#spec_value').empty().html(res.data.spec_name_option);
  607. }
  608. });
  609. }
  610. function RefreshPresetValue(preset_id, preset_mark_id) {
  611. // 编辑产品时,无需处理
  612. }
  613. // 批量设置价格
  614. function BulkSetPrice(obj) {
  615. layer.prompt({
  616. title: false,
  617. formType: 3,
  618. id: 'BulkSetPrice',
  619. btn: ['确定', '关闭'],
  620. closeBtn: 0,
  621. success: function(layero, index){
  622. $("#BulkSetPrice").find('input').attr('placeholder', '批量设置价格');
  623. $("#BulkSetPrice").find('input').attr('onkeyup', "this.value=this.value.replace(/[^\\d.]/g,'')");
  624. $("#BulkSetPrice").find('input').attr('onpaste', "this.value=this.value.replace(/[^\\d.]/g,'')");
  625. }
  626. }, function(price, index){
  627. layer.close(index);
  628. // 规格中的价格
  629. $('.users_price').val(price);
  630. // 产品价格
  631. $('#users_price').val(price);
  632. });
  633. }
  634. // 更新价格,取出最小的值赋值到价格中
  635. function UpPrice(obj) {
  636. var UsersPriceArray = new Array();
  637. $('.users_price').each(function(){
  638. UsersPriceArray.push($(this).val());
  639. });
  640. if (UsersPriceArray.length != 0) {
  641. // 取出最小值
  642. var MinValue = Math.min.apply(Math, UsersPriceArray);
  643. // 禁用库存框
  644. $('#users_price').attr('readonly','readonly');
  645. }else{
  646. var MinValue = '{$field.users_price}';
  647. }
  648. $('#users_price').val(MinValue);
  649. }
  650. // 批量设置库存
  651. function BulkSetStock(obj) {
  652. layer.prompt({
  653. title: false,
  654. formType: 3,
  655. id: 'BulkSetStock',
  656. btn: ['确定', '关闭'],
  657. closeBtn: 0,
  658. success: function(layero, index){
  659. $("#BulkSetStock").find('input').attr('placeholder', '批量设置库存');
  660. $("#BulkSetStock").find('input').attr('onkeyup', "this.value=this.value.replace(/[^\\d.]/g,'')");
  661. $("#BulkSetStock").find('input').attr('onpaste', "this.value=this.value.replace(/[^\\d.]/g,'')");
  662. }
  663. }, function(stock, index){
  664. layer.close(index);
  665. // 单个库存
  666. $('.stock_count').val(stock);
  667. $('.stock_count').attr('data-old_stock',stock);
  668. stock_count = Number($('.stock_count').length) * Number(stock);
  669. $('#stock_count').val(stock_count);
  670. // 禁用库存框
  671. $('#stock_count').attr('readonly','readonly');
  672. });
  673. }
  674. // 更新库存量
  675. function UpStock(obj) {
  676. var stock_count = $('#stock_count').val();
  677. var new_stock = $(obj).val();
  678. var old_stock = $(obj).attr('data-old_stock');
  679. $(obj).attr('data-old_stock',new_stock);
  680. if (Number(old_stock) > Number(new_stock)) {
  681. new_stock = Number(old_stock) - Number(new_stock);
  682. stock_count = Number(stock_count) - Number(new_stock);
  683. }else{
  684. new_stock = Number(new_stock) - Number(old_stock);
  685. stock_count = Number(stock_count) + Number(new_stock);
  686. }
  687. $('#stock_count').val(stock_count);
  688. }
  689. // 合并单元格
  690. function MergeCells() {
  691. var tab = document.getElementById("spec_input_tab");
  692. var maxCol = 2, val, count, start;
  693. if (tab != null) {
  694. for (var col = maxCol - 1; col >= 0; col--) {
  695. count = 1;
  696. val = "";
  697. for (var i = 0; i < tab.rows.length; i++) {
  698. if (val == tab.rows[i].cells[col].innerHTML) {
  699. count++;
  700. } else {
  701. if (count > 1) { //合并
  702. start = i - count;
  703. tab.rows[start].cells[col].rowSpan = count;
  704. for (var j = start + 1; j < i; j++) {
  705. tab.rows[j].cells[col].style.display = "none";
  706. }
  707. count = 1;
  708. }
  709. val = tab.rows[i].cells[col].innerHTML;
  710. }
  711. }
  712. if (count > 1) { //合并,最后几行相同的情况下
  713. start = i - count;
  714. tab.rows[start].cells[col].rowSpan = count;
  715. for (var j = start + 1; j < i; j++) {
  716. tab.rows[j].cells[col].style.display = "none";
  717. }
  718. }
  719. }
  720. }
  721. }
  722. </script>
  723. {/if}
  724. <!-- 产品价格属性 -->
  725. {/if}
  726. {include file="field/addonextitem" /}
  727. </div>
  728. <!-- 常规信息 -->
  729. <!-- 产品参数 -->
  730. <div class="ncap-form-default tab_div_2" style="display:none;">
  731. <dl class="row">
  732. <dt class="tit">
  733. <label for="add_time">商品参数</label>
  734. </dt>
  735. <dd class="opt">
  736. <div>
  737. <div>
  738. <select name="attrlist_id" id="attrlist_id" onchange="AttrListSelect(this);">
  739. <option value="0">请选择参数</option>
  740. {volist name="AttrList" id="vo"}
  741. <option value="{$vo.list_id}" {eq name="$vo.list_id" value="$field.attrlist_id"}selected{/eq}>{$vo.list_name}</option>
  742. {/volist}
  743. </select>
  744. </div>
  745. <div id='AttrSelectName' style="margin: 1px;">{$canshu}</div>
  746. </div>
  747. <span class="err"></span>
  748. <p class="notic"></p>
  749. </dd>
  750. </dl>
  751. <script type="text/javascript">
  752. // 参数选择
  753. function AttrListSelect(obj) {
  754. var aid = '';
  755. var list_id = $(obj).val();
  756. if (parseInt(list_id) < 1) return false;
  757. $('#AttrSelectName').html('<div style="color: red;font-size: 12px;text-align: center;">加载中……</div>');
  758. // 商品栏目切换时 ajax 调用 返回不同的属性输入框
  759. $.ajax({
  760. type:'GET',
  761. data:{aid:aid, list_id:list_id, _ajax:1},
  762. url :"{:url('ShopProduct/ajax_get_shop_attr_input')}",
  763. success:function(data) {
  764. $("#AttrSelectName").empty().append(data);
  765. }
  766. });
  767. }
  768. </script>
  769. <!-- <dl class="row">
  770. <div class="tab-pane" id="tab_product_spec">
  771. <table class="table table-bordered" width="100%">
  772. <tr>
  773. <td>
  774. <div id="explanation" class="explanation" style="color: rgb(44, 188, 163); background-color: rgb(237, 251, 248); width: 99%; height: 100%;">
  775. <div id="checkZoom" class="title"><i class="fa fa-lightbulb-o"></i>
  776. <h4 title="提示相关设置操作时应注意的要点">操作提示</h4>
  777. <span title="收起提示" id="explanationZoom" style="display: block;"></span>
  778. </div>
  779. <ul>
  780. <li>
  781. {empty name='$typeid'}
  782. 请先在【常规选项】里选择产品主栏目,再点击【<a href="{:url('Product/attribute_index', array('typeid'=>$field.typeid))}">参数选项</a>】进行更多操作。
  783. {else /}
  784. 如果想对产品参数进行新增、修改、删除等操作,请点击【<a href="{:url('Product/attribute_index', array('typeid'=>$field.typeid))}">参数选项</a>】进行更多操作。
  785. {/empty}
  786. </li>
  787. </ul>
  788. </div>
  789. </td>
  790. </tr>
  791. </table>
  792. </div>
  793. </dl>
  794. <dl class="row" style="margin-top: 10px;" id="product_attr_table">
  795. {empty name='$canshu'}
  796. <div style="color: red;font-size: 12px;text-align: center;">提示:该主栏目还没有参数值,若有需要请点击【<a href="{:url('Product/attribute_index', array('typeid'=>$field.typeid))}">参数选项</a>】进行更多操作。</div>
  797. {else /}
  798. {$canshu}
  799. {/empty}
  800. </dl> -->
  801. </div>
  802. <!-- 产品参数 -->
  803. <!-- SEO参数 -->
  804. <div class="ncap-form-default tab_div_3" style="display:none;">
  805. <dl class="row">
  806. <dt class="tit">
  807. <label>TAG标签</label>
  808. </dt>
  809. <dd class="opt">
  810. <input type="text" value="{$field.tags}" name="tags" id="tags" class="input-txt">
  811. &nbsp;<a href="javascript:void(0);" onclick="tags_list(this);" class="ncap-btn ncap-btn-green">管理</a>
  812. <span class="err"></span>
  813. <p class="notic">多个标签用英文逗号(,)分开,单个标签小于12字节</p>
  814. </dd>
  815. </dl>
  816. <dl class="row">
  817. <dt class="tit">
  818. <label for="seo_title">SEO标题</label>
  819. </dt>
  820. <dd class="opt">
  821. <input type="text" value="{$field.seo_title}" name="seo_title" id="seo_title" class="input-txt">
  822. <p class="notic">一般不超过80个字符,为空时系统自动构成,可以到 <a href="{:url('Seo/index', array('inc_type'=>'seo'))}">SEO设置 - SEO基础</a> 中设置构成规则。</p>
  823. </dd>
  824. </dl>
  825. <dl class="row">
  826. <dt class="tit">
  827. <label>SEO关键词</label>
  828. </dt>
  829. <dd class="opt">
  830. <textarea rows="5" cols="60" id="seo_keywords" name="seo_keywords" style="height:40px;">{$field.seo_keywords}</textarea>
  831. <span class="err"></span>
  832. <p class="notic">一般不超过100个字符,多个关键词请用英文逗号(,)隔开,建议3到5个关键词。</p>
  833. </dd>
  834. </dl>
  835. <dl class="row">
  836. <dt class="tit">
  837. <label>SEO描述</label>
  838. </dt>
  839. <dd class="opt">
  840. <textarea rows="5" cols="60" id="seo_description" name="seo_description" style="height:60px;">{$field.seo_description}</textarea>
  841. <span class="err"></span>
  842. <p class="notic">一般不超过200个字符,不填写时系统自动提取正文的前200个字符</p>
  843. </dd>
  844. </dl>
  845. </div>
  846. <!-- SEO参数 -->
  847. <!-- 其他参数 -->
  848. <div class="ncap-form-default tab_div_4" style="display:none;">
  849. <dl class="row">
  850. <dt class="tit">
  851. <label for="author">作者</label>
  852. </dt>
  853. <dd class="opt">
  854. <input type="text" value="{$field.author}" name="author" id="author" class="input-txt">
  855. &nbsp;<a href="javascript:void(0);" onclick="set_author();" class="ncap-btn ncap-btn-green">设置</a>
  856. <p class="notic">设置作者默认名称(将同步至管理员笔名)</p>
  857. </dd>
  858. </dl>
  859. <dl class="row">
  860. <dt class="tit">
  861. <label>浏览量</label>
  862. </dt>
  863. <dd class="opt">
  864. <input type="text" value="{$field.click}" name="click" id="click" class="input-txt">
  865. <span class="err"></span>
  866. <p class="notic"></p>
  867. </dd>
  868. </dl>
  869. <dl class="row">
  870. <dt class="tit">
  871. <label>阅读权限</label>
  872. </dt>
  873. <dd class="opt">
  874. <select name="arcrank" id="arcrank">
  875. {volist name="arcrank_list" id="vo"}
  876. <option value="{$vo.rank}" {eq name="vo.rank" value="$field.arcrank"}selected{/eq}>{$vo.name}</option>
  877. {/volist}
  878. </select>
  879. <span class="err"></span>
  880. <p class="notic"></p>
  881. </dd>
  882. </dl>
  883. <dl class="row">
  884. <dt class="tit">
  885. <label for="articleForm">发布时间</label>
  886. </dt>
  887. <dd class="opt">
  888. <input type="text" class="input-txt" id="add_time" name="add_time" value="{$field.add_time|date='Y-m-d H:i:s',###}" autocomplete="off">
  889. <span class="add-on input-group-addon">
  890. <i class="glyphicon glyphicon-calendar fa fa-calendar"></i>
  891. </span>
  892. <span class="err"></span>
  893. </dd>
  894. </dl>
  895. <dl class="row">
  896. <dt class="tit">
  897. <label for="tempview">文档模板</label>
  898. </dt>
  899. <dd class="opt">
  900. <select name="tempview" id="tempview">
  901. {volist name='$templateList' id='vo'}
  902. <option value="{$vo}" {eq name='$vo' value='$tempview'}selected{/eq}>{$vo}</option>
  903. {/volist}
  904. </select>
  905. <input type="hidden" name="type_tempview" value="{$tempview}" />
  906. <span class="err"></span>
  907. </dd>
  908. </dl>
  909. <dl class="row" {neq name='$seo_pseudo' value='2'}style="display: none;"{/neq}>
  910. <dt class="tit">
  911. <label>自定义文件名</label>
  912. </dt>
  913. <dd class="opt">
  914. <input type="text" value="{$field.htmlfilename}" name="htmlfilename" id="htmlfilename" style="width: 120px;" onkeyup="this.value=this.value.replace(/[^\w\-]/g,'');" onpaste="this.value=this.value.replace(/[^\w\-]/g,'');">.html
  915. <span class="err"></span>
  916. <p class="notic">自定义文件名可由字母/数字/'_'/'-'等符号组成</p>
  917. </dd>
  918. </dl>
  919. </div>
  920. <!-- 其他参数 -->
  921. <div class="ncap-form-default">
  922. <div class="bot">
  923. <input type="hidden" name="gourl" value="{$gourl}">
  924. <input type="hidden" name="aid" value="{$field.aid}">
  925. <a href="JavaScript:void(0);" onclick="check_submit();" class="ncap-btn-big ncap-btn-green" id="submitBtn">确认提交</a>
  926. </div>
  927. </div>
  928. </form>
  929. </div>
  930. </div>
  931. <script type="text/javascript">
  932. $(function () {
  933. $('#add_time').layDate();
  934. //选项卡切换列表
  935. $('.tab-base').find('.tab').click(function(){
  936. $('.tab-base').find('.tab').each(function(){
  937. $(this).removeClass('current');
  938. });
  939. $(this).addClass('current');
  940. var tab_index = $(this).data('index');
  941. $(".tab_div_1, .tab_div_2, .tab_div_3, .tab_div_4").hide();
  942. $(".tab_div_"+tab_index).show();
  943. });
  944. $('input[name=is_jump]').click(function(){
  945. if ($(this).is(':checked')) {
  946. $('.dl_jump').show();
  947. } else {
  948. $('.dl_jump').hide();
  949. }
  950. });
  951. var dftypeid = {$field.typeid|default='0'};
  952. $('#typeid').change(function(){
  953. var current_channel = $(this).find('option:selected').data('current_channel');
  954. if (0 < $(this).val() && {$channeltype} != current_channel) {
  955. showErrorMsg('请选择对应模型的栏目!');
  956. $(this).val(dftypeid);
  957. } else if ({$channeltype} == current_channel) {
  958. layer.closeAll();
  959. }
  960. });
  961. });
  962. function change_prom_type(val) {
  963. if ( val == 1 ){
  964. $("input[name=prom_type_vir]:eq(0)").attr("checked",'checked');
  965. $("#fahuoxingshi").show();
  966. } else if ( val == 2 ){
  967. $("#wangpanxiazai").hide();
  968. $("#wenbenneirong").hide();
  969. } else if ( val == 3 ){
  970. $("#wangpanxiazai").show();
  971. $("#wenbenneirong").hide();
  972. } else if( val == 4 ){
  973. $("#wangpanxiazai").hide();
  974. $("#wenbenneirong").show();
  975. }
  976. else {
  977. $("#wangpanxiazai").hide();
  978. $("#wenbenneirong").hide();
  979. $("#fahuoxingshi").hide();
  980. }
  981. }
  982. function set_author()
  983. {
  984. layer.prompt({
  985. title:'<font color="red">设置作者默认名称</font>'
  986. },
  987. function(val, index){
  988. var admin_id = '{$Think.session.admin_info.admin_id}';
  989. $.ajax({
  990. url: "{:url('Admin/ajax_setfield')}",
  991. type: 'POST',
  992. dataType: 'JSON',
  993. data: {id_name:'admin_id',id_value:admin_id,field:'pen_name',value:val,_ajax:1},
  994. success: function(res){
  995. if (res.code == 1) {
  996. $('#author').val(val);
  997. layer.msg(res.msg, {icon: 1, time:1000});
  998. } else {
  999. showErrorMsg(res.msg);
  1000. return false;
  1001. }
  1002. },
  1003. error: function(e){
  1004. showErrorMsg(ey_unknown_error);
  1005. return false;
  1006. }
  1007. });
  1008. layer.close(index);
  1009. }
  1010. );
  1011. }
  1012. function tags_list(obj)
  1013. {
  1014. var url = "{:url('Tags/index')}";
  1015. //iframe窗
  1016. layer.open({
  1017. type: 2,
  1018. title: 'TAG标签管理',
  1019. fixed: true, //不固定
  1020. shadeClose: false,
  1021. shade: 0.3,
  1022. maxmin: true, //开启最大化最小化按钮
  1023. area: ['80%', '80%'],
  1024. content: url
  1025. });
  1026. }
  1027. function system_thumb()
  1028. {
  1029. var url = "{:url('System/thumb', ['tabase'=>-1])}";
  1030. //iframe窗
  1031. var iframes = layer.open({
  1032. type: 2,
  1033. title: '缩略图配置',
  1034. fixed: true, //不固定
  1035. shadeClose: false,
  1036. shade: 0.3,
  1037. content: url
  1038. });
  1039. layer.full(iframes);
  1040. }
  1041. // 判断输入框是否为空
  1042. function check_submit(){
  1043. if($.trim($('input[name=title]').val()) == ''){
  1044. showErrorMsg('标题不能为空!');
  1045. $('input[name=title]').focus();
  1046. return false;
  1047. }
  1048. if ($('#typeid').val() == 0) {
  1049. showErrorMsg('请选择栏目…!');
  1050. $('#typeid').focus();
  1051. return false;
  1052. }
  1053. if ($('input[name=prom_type]:checked').val() == 1) {
  1054. if($('input[name=prom_type_vir]:checked').val() == 2 && $.trim($('input[name=netdisk_url]').val()) == ''){
  1055. showErrorMsg('网盘地址不能为空!');
  1056. $('input[name=netdisk_url]').focus();
  1057. return false;
  1058. }
  1059. if($('input[name=prom_type_vir]:checked').val() == 3 && $.trim($('textarea[name=text_content]').val()) == ''){
  1060. showErrorMsg('虚拟文本内容不能为空!');
  1061. $('textarea[name=text_content]').focus();
  1062. return false;
  1063. }
  1064. }
  1065. layer_loading('正在处理');
  1066. $('#post_form').submit();
  1067. }
  1068. function img_call_back(fileurl_tmp)
  1069. {
  1070. $("#litpic_local").val(fileurl_tmp);
  1071. $("#img_a").attr('href', fileurl_tmp);
  1072. $("#img_i").attr('onmouseover', "layer_tips=layer.tips('<img src="+fileurl_tmp+" class=\\'layer_tips_img\\'>',this,{tips: [1, '#fff']});");
  1073. $("input[name=is_litpic]").attr('checked', true); // 自动勾选属性[图片]
  1074. }
  1075. // 上传产品相册回调函数
  1076. function proimg_call_back(paths){
  1077. var last_div = $(".images_upload_tpl").html();
  1078. // var last_div = $(".images_upload:last").prop("outerHTML");
  1079. for (var i=0;i<paths.length ;i++ )
  1080. {
  1081. $(".images_upload:eq(0)").before(last_div); // 插入一个 新图片
  1082. $(".images_upload:eq(0)").find('a:eq(0)').attr('href',paths[i]).attr('onclick','').attr('target', "_blank");// 修改他的链接地址
  1083. $(".images_upload:eq(0)").find('img').attr('src',paths[i]);// 修改他的图片路径
  1084. $(".images_upload:eq(0)").find('a:eq(1)').attr('onclick',"ClearPicArr2(this,'"+paths[i]+"')").text('删除');
  1085. $(".images_upload:eq(0)").find('input').val(paths[i]); // 设置隐藏域 要提交的值
  1086. }
  1087. }
  1088. /*
  1089. * 上传之后删除组图input
  1090. * @access public
  1091. * @val string 删除的图片input
  1092. */
  1093. function ClearPicArr2(obj,path)
  1094. {
  1095. // 删除数据库记录
  1096. $.ajax({
  1097. type:'POST',
  1098. url:"{:url('ShopProduct/del_proimg')}",
  1099. data:{filename:path,_ajax:1},
  1100. success:function(){
  1101. $(obj).parent().parent().remove(); // 删除完服务器的, 再删除 html上的图片
  1102. $.ajax({
  1103. type:'POST',
  1104. url:"{:url('Uploadify/delupload')}",
  1105. data:{action:"del", filename:path,_ajax:1},
  1106. success:function(){}
  1107. });
  1108. }
  1109. });
  1110. }
  1111. /** 以下 产品参数相关 js*/
  1112. $(document).ready(function(){
  1113. // 产品栏目切换时 ajax 调用 返回不同的属性输入框
  1114. $("#typeid").change(function(){
  1115. get_attr_input();
  1116. });
  1117. // 触发产品栏目
  1118. // $("#typeid").trigger('change');
  1119. });
  1120. // 产品栏目切换时 ajax 调用 返回不同的属性输入框
  1121. function get_attr_input()
  1122. {
  1123. var aid = $("input[name=aid]").val();
  1124. var typeid = $("#typeid").val();
  1125. if (parseInt(typeid) < 1) {
  1126. return false;
  1127. }
  1128. $('#product_attr_table').html('<div style="color: red;font-size: 12px;text-align: center;">加载中……</div>');
  1129. // 产品栏目切换时 ajax 调用 返回不同的属性输入框
  1130. $.ajax({
  1131. type:'GET',
  1132. data:{aid:aid,typeid:typeid,_ajax:1},
  1133. url:"{:url('ShopProduct/ajax_get_attr_input')}",
  1134. success:function(data){
  1135. $("#product_attr_table").html('').append(data);
  1136. },
  1137. error: function(e){
  1138. $('#product_attr_table').html('<div style="color: red;font-size: 12px;text-align: center;">加载失败,点击此处<a href="javascript:void(0);" onClick="get_attr_input();">刷新</a></div>');
  1139. }
  1140. });
  1141. }
  1142. /** 以下 图集相册的拖动排序相关 js*/
  1143. $( ".sort-list" ).sortable({
  1144. start: function( event, ui) {
  1145. }
  1146. ,stop: function( event, ui ) {
  1147. // var rdata = '', url="{:url('Product/ajax_sort_proimg')}";
  1148. // var container = $(ui.item).closest("TB");
  1149. // var LIs = $(container).find("DIV");
  1150. // $(LIs).each(function(){
  1151. // console.log($(this))
  1152. // rdata += $(this).attr('rel') + ',' + $(this).index() + '|';
  1153. // });
  1154. // rdata = rdata.substr(0, (rdata.length-1));
  1155. // console.log(rdata)
  1156. // $.post(url, {str:rdata}, function(){
  1157. // });
  1158. }
  1159. });
  1160. //因为他们要拖动,所以尽量设置他们的文字不能选择。
  1161. $( ".sort-list" ).disableSelection();
  1162. </script>
  1163. {include file="public/footer" /}