create.php 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239
  1. <?php
  2. use yii\widgets\ActiveForm;
  3. use common\helpers\ArrayHelper;
  4. use common\helpers\Url;
  5. use yii\helpers\Json;
  6. $this->title = '设计新插件';
  7. $this->params['breadcrumbs'][] = ['label' => $this->title];
  8. ?>
  9. <style>
  10. .well {
  11. background-color: #f5f5f5;
  12. }
  13. </style>
  14. <div class="row">
  15. <div class="col-12">
  16. <div class="nav-tabs-custom">
  17. <ul class="nav nav-tabs">
  18. <li><a href="<?= Url::to(['index']) ?>"> 已安装的插件</a></li>
  19. <li><a href="<?= Url::to(['local']) ?>"> 安装插件</a></li>
  20. <li class="active"><a href="<?= Url::to(['create']) ?>"> 设计新插件</a></li>
  21. </ul>
  22. <div class="tab-content">
  23. <div class="active tab-pane rf-auto">
  24. <div class="col-lg-12">
  25. <?php $form = ActiveForm::begin([
  26. 'options' => [
  27. 'enctype' => 'multipart/form-data'
  28. ],
  29. ]); ?>
  30. <div class="row">
  31. <div class="col-12">
  32. <?= $form->field($model, 'title')->textInput()->hint('显示在用户的插件列表中. 不要超过20个字符') ?>
  33. <?= $form->field($model, 'name')->textInput()->hint('应对应插件文件夹的名称, 系统按照此标识符查找插件定义, 只能英文和下划线组成,建议大写驼峰,例如:RfArticle') ?>
  34. <?= $form->field($model, 'author')->textInput() ?>
  35. <?= $form->field($model, 'version')->textInput()->hint('此版本号用于插件的版本更新') ?>
  36. <?= $form->field($model, 'brief_introduction')->textInput() ?>
  37. <?= $form->field($model, 'description')->textarea()->hint('详细介绍插件的功能和使用方法 ') ?>
  38. <?= $form->field($model, 'group')->dropDownList(ArrayHelper::map($addonsGroup, 'name', 'title')) ?>
  39. <?= $form->field($model, 'is_merchant_route_map')->checkbox()->hint('开启后会将商户端的 url 直接映射到后台来,节省相同代码,请了解后再使用') ?>
  40. <div class="hr-line-dashed"></div>
  41. <div id="app">
  42. <div class="form-group desk-menu">
  43. <label class="control-label">总后台菜单</label>
  44. </div>
  45. <div class="well well-sm">
  46. <div v-for="(list, index) in backendList">
  47. <div class="col-12 col-sm-12 row mt-2 mb-2">
  48. <div class="col-2 col-md-2">
  49. <div class="input-group">
  50. <span class="btn btn-white">名称</span>
  51. <input class="form-control" name="menu[backend][title][]" placeholder="首页管理" type="text">
  52. </div>
  53. </div>
  54. <div class="col-2 col-md-2">
  55. <div class="input-group">
  56. <span class="btn btn-white">路由</span>
  57. <input class="form-control" name="menu[backend][name][]" placeholder="test/index" type="text">
  58. </div>
  59. </div>
  60. <div class="col-2 col-md-2">
  61. <div class="input-group">
  62. <span class="btn btn-white">图标</span>
  63. <input class="form-control" name="menu[backend][icon][]" placeholder="fa fa-wechat" type="text">
  64. </div>
  65. </div>
  66. <div class="col-5 col-md-5">
  67. <div class="input-group">
  68. <span class="btn btn-white">参数</span>
  69. <input class="form-control" name="menu[backend][params][]" type="text" readonly>
  70. <span class="btn btn-white editValue" data-toggle="modal" data-target="#ajaxModalLgForAttribute">编辑</span>
  71. </div>
  72. </div>
  73. <div class="col-1 col-md-1">
  74. <div style="margin-top:7px">
  75. <a class="icon ion-android-cancel" href="javascript:void(0);" onclick="$(this).parent().parent().parent().remove()"></a>
  76. </div>
  77. </div>
  78. </div>
  79. </div>
  80. <a href="javascript:void(0);" class="m-l" @click="add('backend')">添加菜单 <i class="iconfont iconplus-circle" title="添加菜单"></i></a>
  81. </div>
  82. <div class="form-group desk-menu">
  83. <label class="control-label">商家菜单</label>
  84. </div>
  85. <div class="well well-sm">
  86. <div v-for="(list, index) in merchantList">
  87. <div class="col-12 col-sm-12 row mt-2 mb-2">
  88. <div class="col-2 col-md-2">
  89. <div class="input-group">
  90. <span class="btn btn-white">名称</span>
  91. <input class="form-control" name="menu[merchant][title][]" placeholder="首页管理" type="text">
  92. </div>
  93. </div>
  94. <div class="col-2 col-md-2">
  95. <div class="input-group">
  96. <span class="btn btn-white">路由</span>
  97. <input class="form-control" name="menu[merchant][name][]" placeholder="test/index" type="text">
  98. </div>
  99. </div>
  100. <div class="col-2 col-md-2">
  101. <div class="input-group">
  102. <span class="btn btn-white">图标</span>
  103. <input class="form-control" name="menu[merchant][icon][]" placeholder="fa fa-wechat" type="text">
  104. </div>
  105. </div>
  106. <div class="col-5 col-md-5">
  107. <div class="input-group">
  108. <span class="btn btn-white">参数</span>
  109. <input class="form-control" name="menu[merchant][params][]" type="text" readonly>
  110. <span class="btn btn-white editValue" data-toggle="modal" data-target="#ajaxModalLgForAttribute">编辑</span>
  111. </div>
  112. </div>
  113. <div class="col-1 col-md-1">
  114. <div style="margin-top:7px">
  115. <a class="icon ion-android-cancel" href="javascript:void(0);" onclick="$(this).parent().parent().parent().remove()"></a>
  116. </div>
  117. </div>
  118. </div>
  119. </div>
  120. <a href="javascript:void(0);" class="m-l" @click="add('merchant')">添加菜单 <i class="iconfont iconplus-circle" title="添加菜单"></i></a>
  121. </div>
  122. </div>
  123. <div class="hint-block">会在顶部导航菜单或者应用中心入口创建菜单列表</div>
  124. <div class="hr-line-dashed"></div>
  125. <?= $form->field($model,
  126. 'install')->textInput()->hint('当前插件全新安装时所执行的脚本, 指定为单个的php脚本文件, 如: Install.php') ?>
  127. <?= $form->field($model,
  128. 'uninstall')->textInput()->hint('当前插件卸载时所执行的脚本, 指定为单个的php脚本文件, 如: UnInstall.php') ?>
  129. <?= $form->field($model,
  130. 'upgrade')->textInput()->hint('当前插件更新时所执行的脚本, 指定为单个的php脚本文件, 如: Upgrade.php') ?>
  131. </div>
  132. <div class="col-12 text-center">
  133. <div class="hr-line-dashed"></div>
  134. <button class="btn btn-primary" type="submit">保存</button>
  135. </div>
  136. </div>
  137. <?php ActiveForm::end(); ?>
  138. </div>
  139. </div>
  140. </div>
  141. </div>
  142. </div>
  143. </div>
  144. <!--模拟框加载 -->
  145. <div class="modal fade" id="ajaxModalLgForAttribute" aria-hidden="true">
  146. <div class="modal-dialog">
  147. <div class="modal-content">
  148. <div class="modal-header">
  149. <h4 class="modal-title">参数</h4>
  150. <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">×</span></button>
  151. </div>
  152. <div class="modal-body">
  153. <?= \common\helpers\Html::textarea('value', '', [
  154. 'class'=> 'form-control',
  155. 'id' => 'tmpValue',
  156. 'style' => 'height:200px',
  157. 'placeholder' => '例如:status:1',
  158. ]);?>
  159. <div class="help-block">
  160. 一行为一个k-v参数值,多个参数值用换行输入<br>
  161. </div>
  162. </div>
  163. <div class="modal-footer">
  164. <button type="button" class="btn btn-white" data-dismiss="modal">关闭</button>
  165. <button class="btn btn-primary js-confirm" data-dismiss="modal">保存</button>
  166. </div>
  167. </div>
  168. </div>
  169. </div>
  170. <script>
  171. var app = new Vue({
  172. el: '#app',
  173. data: {
  174. backendList: [[]],
  175. merchantList: [[]],
  176. },
  177. methods: {
  178. add: function (menuType) {
  179. if (menuType === 'backend') {
  180. this.backendList.push([]);
  181. } else {
  182. this.merchantList.push([]);
  183. }
  184. },
  185. },
  186. // 初始化
  187. mounted () {
  188. },
  189. });
  190. // 编辑参数值
  191. $(document).on("click", ".editValue",function(){
  192. editValue = $(this).parent();
  193. var value = $(editValue).find('input').val();
  194. if (value) {
  195. var value = value.split(',');
  196. var html = '';
  197. console.log(value);
  198. for (var i = 0; i < value.length; i++) {
  199. if(value[i] !== ""){
  200. if ((i+1) == value.length) {
  201. html += value[i]
  202. } else {
  203. html += value[i] + "\n";
  204. }
  205. }
  206. }
  207. }
  208. $('#tmpValue').val(html);
  209. });
  210. // 确定编辑参数
  211. $(document).on("click", ".js-confirm",function(){
  212. var tmpVal = $('#tmpValue').val();
  213. var value = tmpVal.split("\n");
  214. var html = '';
  215. for (var i = 0; i < value.length; i++) {
  216. if(value[i] !== "" && value[i].length > 0){
  217. if ((i+1) == value.length) {
  218. html += value[i]
  219. } else {
  220. html += value[i] + ",";
  221. }
  222. }
  223. }
  224. $(editValue).parent().find('input').val(html);
  225. });
  226. </script>
粤ICP备19079148号