form-diy-tool.php 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165
  1. <?php
  2. use common\helpers\ComponentHelper;
  3. use common\helpers\AddonHelper;
  4. ComponentHelper::loadComponentView('single-link-text-preview', AddonHelper::getAddonRootPath('SmartForm') . 'backend/views/components/formDiy/common/single-link-text');
  5. ComponentHelper::loadComponentView('multi-text-preview', AddonHelper::getAddonRootPath('SmartForm') . 'backend/views/components/formDiy/common/multi-text');
  6. ComponentHelper::loadComponentView('id-card-preview', AddonHelper::getAddonRootPath('SmartForm') . 'backend/views/components/formDiy/common/id-card');
  7. ComponentHelper::loadComponentView('drow-box-preview', AddonHelper::getAddonRootPath('SmartForm') . 'backend/views/components/formDiy/common/drow-box');
  8. ComponentHelper::loadComponentView('checked-tool-preview', AddonHelper::getAddonRootPath('SmartForm') . 'backend/views/components/formDiy/common/checked-tool');
  9. ComponentHelper::loadComponentView('radio-tool-preview', AddonHelper::getAddonRootPath('SmartForm') . 'backend/views/components/formDiy/common/radio-tool');
  10. ComponentHelper::loadComponentView('upload-photo-preview', AddonHelper::getAddonRootPath('SmartForm') . 'backend/views/components/formDiy/common/upload-photo');
  11. ComponentHelper::loadComponentView('date-tool-preview', AddonHelper::getAddonRootPath('SmartForm') . 'backend/views/components/formDiy/common/date-tool');
  12. ComponentHelper::loadComponentView('date-range-preview', AddonHelper::getAddonRootPath('SmartForm') . 'backend/views/components/formDiy/common/date-range');
  13. ComponentHelper::loadComponentView('time-tool-preview', AddonHelper::getAddonRootPath('SmartForm') . 'backend/views/components/formDiy/common/time-tool');
  14. ComponentHelper::loadComponentView('time-range-preview', AddonHelper::getAddonRootPath('SmartForm') . 'backend/views/components/formDiy/common/time-range');
  15. ComponentHelper::loadComponentView('city-chose-preview', AddonHelper::getAddonRootPath('SmartForm') . 'backend/views/components/formDiy/common/city-chose');
  16. ?>
  17. <template id="form-diy-tool">
  18. <div class="diy_tool_phone_box">
  19. <draggable :list="list" group="componentsGroup" :animation="300" @end="grangEnd">
  20. <div class="drag_tool_box" v-for="(r,ri) in list" :key="ri" :class="[ri == toolIndex ? 'drag_tool_box_border': '',ri == moveIndex ? 'diy_chose_box_border' : '']" @click="changeIndex(ri)" @mouseenter="onEnterTd(ri)" @mouseleave="onLeaveTd(ri)">
  21. <components :is="getName(r)" :active-item="r" style-type="renovation"></components>
  22. <div class="drag_item_tool" v-if="ri == toolIndex">
  23. <i class="el-icon-copy-document i_icon_form" @click="copyTool(r,ri)"></i>
  24. <el-popover
  25. width="160"
  26. v-model="isDel">
  27. <p >确定要删除吗</p>
  28. <div style="text-align: right; margin: 0">
  29. <el-button size="mini" type="text" @click="isDel = false">取消</el-button>
  30. <el-button type="primary" size="mini" @click="delTool(ri)">确定</el-button>
  31. </div>
  32. <i class="el-icon-delete i_icon_form" slot="reference"></i>
  33. </el-popover>
  34. </div>
  35. </div>
  36. </draggable>
  37. </div>
  38. </template>
  39. <script src="/resources/js/Sortable.min.js"></script>
  40. <!-- 更改了v-if => v-show -->
  41. <script src="/resources/unpkg/vuedraggable@2.18.1/dist/vuedraggable.umd.min.js"></script>
  42. <script>
  43. Vue.component('form-diy-tool',{
  44. template:'#form-diy-tool',
  45. props:{
  46. toolList:{
  47. type:Array,
  48. default:[]
  49. },
  50. toolIndex:{
  51. type:Number,
  52. default: -1
  53. }
  54. },
  55. data(){
  56. return{
  57. components: [],
  58. list:[],
  59. isDel:true,
  60. moveIndex:-1
  61. }
  62. },
  63. watch:{
  64. toolList(newVal,oldVal){
  65. this.list = newVal
  66. },
  67. toolIndex(newVal,oldVal){
  68. if(newVal == this.moveIndex){
  69. this.moveIndex = -1
  70. }
  71. }
  72. },
  73. methods:{
  74. onEnterTd(index){
  75. if(this.toolIndex != index){
  76. this.moveIndex = index
  77. }
  78. },
  79. onLeaveTd(index){
  80. this.moveIndex = -1
  81. },
  82. grangEnd(e){
  83. this.$emit('change',{
  84. type:'change-index',
  85. index: e.newIndex,
  86. list:this.list
  87. })
  88. },
  89. copyTool(item,index){
  90. this.$emit('change',{
  91. type:'copy',
  92. item,
  93. index
  94. })
  95. },
  96. changeIndex(index){
  97. this.$emit('change',{
  98. type:'change-index',
  99. index,
  100. })
  101. },
  102. delTool(index){
  103. this.isDel = false
  104. this.$emit('change',{
  105. type:'delete',
  106. index,
  107. })
  108. },
  109. getName(target) {
  110. try {
  111. return target.type + "-preview"
  112. } catch (e) {
  113. console.log(e);
  114. return ""
  115. }
  116. },
  117. }
  118. })
  119. </script>
  120. <style scoped>
  121. .diy_chose_box_border{
  122. border: 1px dashed #F10009;
  123. }
  124. .diy_tool_phone_box{
  125. width: 100%;
  126. background: #ffffff;
  127. padding: 20px 20px;
  128. box-sizing: border-box;
  129. }
  130. .drag_tool_box{
  131. width: 100%;
  132. position: relative;
  133. display: flex;
  134. justify-content: center;
  135. padding: 10px 0;
  136. align-items: center;
  137. box-sizing: border-box;
  138. }
  139. .drag_tool_box_border{
  140. background: #f7f7f7;
  141. }
  142. .drag_item_tool{
  143. width: 47px;
  144. padding: 5px 0;
  145. box-sizing: border-box;
  146. display: flex;
  147. align-items: center;
  148. justify-content: space-around;
  149. flex-wrap: nowrap;
  150. background: red;
  151. position: absolute;
  152. top: 0px;
  153. right: 0px;
  154. }
  155. .i_icon_form{
  156. font-size: 14px;
  157. color: #fff;
  158. cursor: pointer;
  159. }
  160. </style>