index.blade.php 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244
  1. @extends('layouts.app')
  2. @section('title')邮件@endsection
  3. @section('content')
  4. <div id="nav2">
  5. @component('maintenance.menu')@endcomponent
  6. @component('maintenance.log.menu')@endcomponent
  7. </div>
  8. <div class="container-fluid" id="container">
  9. <div class="card">
  10. <div id="form_div"></div>
  11. <div class="card-body">
  12. @if(Session::has('successTip'))
  13. <div class="alert alert-success h1">{{Session::get('successTip')}}</div>
  14. @endif
  15. <table class="table table-sm table-hover table-condensed">
  16. <tr>
  17. <th>序号</th>
  18. <th>事件名</th>
  19. <th>通知角色</th>
  20. <th>事件描述</th>
  21. <th>邮件模板</th>
  22. <th>操作</th>
  23. </tr>
  24. <tr v-for="(emailEvent,i) in emailEvents" @click="selectTr===i+1?selectTr=0:selectTr=i+1" :class="selectTr===i+1?'focusing' : ''">
  25. <td width="50">@{{ i+1 }}</td>
  26. <td width="50">@{{ emailEvent.name }}</td>
  27. <td width="100">
  28. <table class="table table-sm">
  29. <tr colspan="2">
  30. <td>
  31. <select class="form-control form-control-sm" v-model="emailEvent.role_selected">
  32. <option v-for="role in roles" :value="role.id"> @{{ role.name }}</option>
  33. </select>
  34. </td>
  35. <td>
  36. <button class="btn btn-sm btn-primary" @click="addRole(emailEvent)">添加</button>
  37. </td>
  38. </tr>
  39. <tr v-for="(role,j) in emailEvent.roles" v-if="j<2 || emailEvent.isShowRole">
  40. <td>@{{ role.name }}</td>
  41. <td>
  42. <button class="btn btn-sm btn-outline-danger"
  43. @click="deleteRole(role,j,emailEvent)">
  44. 删除
  45. </button>
  46. </td>
  47. </tr>
  48. <tr>
  49. <td>
  50. <div class="row" @click="showRole(i)" v-if="emailEvent.roles.length > 2">
  51. <label class="text-center mt-0 p-0 cursor-pointer offset-5">
  52. <span class="fa"
  53. :class="emailEvent.isShowRole ? 'fa-angle-double-down' : 'fa-angle-double-right'"></span>
  54. &nbsp;<span v-if="emailEvent.isShowRole">收起</span><span
  55. v-if="!emailEvent.isShowRole">展开</span>共@{{ emailEvent.roles.length
  56. }} 条角色
  57. </label>
  58. </div>
  59. </td>
  60. </tr>
  61. </table>
  62. </td>
  63. <td width="150">
  64. <span class="w-auto" v-show="emailEvents[i].remark_show&&emailEvent.remark"
  65. @click="remarkShow(i,$event)">@{{ emailEvent.remark }}</span>
  66. <span v-show="emailEvents[i].remark_edit||!emailEvent.remark">
  67. <textarea width="150" class="form-control" rows="5" type="text"
  68. @blur="remarkShow(i,$event)">@{{ emailEvent.remark }}</textarea>
  69. <button class="btn btn-sm btn-primary"
  70. @click="updateRemark(emailEvent,$event)">修改</button>
  71. </span>
  72. </td>
  73. <td width="150">
  74. <span v-show="emailEvents[i].template_show&&emailEvent.template" @click="templateShow(i,$event)"
  75. class="w-auto">@{{ emailEvent.template }}</span>
  76. <span v-show="emailEvents[i].template_edit||!emailEvent.template">
  77. <textarea width="150" class="form-control" rows="5" type="text"
  78. @blur="templateShow(i,$event)">@{{ emailEvent.template }}</textarea>
  79. <button class="btn btn-sm btn-primary"
  80. @click="updateTemplate(emailEvent,$event)">修改</button>
  81. </span>
  82. </td>
  83. <td width="50">
  84. <button class="btn btn-success" v-if="emailEvent.is_active===0" @click="active(emailEvent)">
  85. 启用
  86. </button>
  87. <button class="btn btn-secondary" v-if="emailEvent.is_active===1"
  88. @click="active(emailEvent)">
  89. 禁用
  90. </button>
  91. </td>
  92. </tr>
  93. </table>
  94. </div>
  95. </div>
  96. </div>
  97. @stop
  98. @section('lastScript')
  99. <script>
  100. new Vue({
  101. el: "#container",
  102. data: {
  103. emailEvents: {!! $emailEvents->toJson() !!}['data'],
  104. roles: {!! $roles->toJson() !!},
  105. addRolesFlag: false,
  106. selectTr:0,
  107. },
  108. methods: {
  109. /**
  110. * 添加角色,并将添加的角色添加到当前时间角色列表的顶部
  111. * @param emailEvent
  112. */
  113. addRole(emailEvent) {
  114. window.tempTip.postBasicRequest("{{url('maintenance/mail/addRole')}}", {
  115. roleId: emailEvent.role_selected,
  116. eventMailId: emailEvent.id
  117. }, res => {
  118. let role = res.role;
  119. if (role) {
  120. emailEvent.roles.unshift(role);
  121. return "添加关联角色:" + role.name + " 成功!";
  122. }
  123. });
  124. },
  125. /**
  126. * 删除角色,当前事件的指定角色删除
  127. * @param role 要删除的角色
  128. * @param index 删除角色的索引
  129. * @param emailEvent 事件
  130. */
  131. deleteRole(role, index, emailEvent) {
  132. window.tempTip.postBasicRequest("{{url('maintenance/mail/deleteRole')}}", {
  133. roleId: role.id,
  134. eventMailId: emailEvent.id
  135. }, res => {
  136. emailEvent.roles.splice(index, 1);
  137. return "取消关联角色:" + role.name + " 成功!";
  138. });
  139. },
  140. /**
  141. * 更新模板
  142. * 隐藏模板编辑,显示模板展示,更新前端显示
  143. * @param emailEvent
  144. * @param e
  145. */
  146. updateTemplate(emailEvent, e) {
  147. let textarre = $(e.target).prev().val();
  148. window.tempTip.postBasicRequest("{{url('maintenance/mail/updateTemplate')}}", {
  149. id: emailEvent.id,
  150. template: textarre,
  151. }, res => {
  152. emailEvent.template = textarre;
  153. emailEvent.template_show = true;
  154. emailEvent.template_edit = false;
  155. return "修改模板成功!";
  156. });
  157. },
  158. /**
  159. * 更新备注
  160. * 隐藏备注编辑,显示备注展示,更新备注显示
  161. * @param emailEvent
  162. * @param e
  163. */
  164. updateRemark(emailEvent, e) {
  165. let textarre = $(e.target).prev().val();
  166. window.tempTip.postBasicRequest("{{url('maintenance/mail/updateRemark')}}", {
  167. id: emailEvent.id,
  168. remark: textarre,
  169. }, res => {
  170. emailEvent.remark = textarre;
  171. emailEvent.remark_show = true;
  172. emailEvent.remark_edit = false;
  173. return "修改备注成功!";
  174. });
  175. },
  176. /**
  177. * 启用/禁用指定模板
  178. * @param emailEvent
  179. */
  180. active(emailEvent) {
  181. window.tempTip.postBasicRequest("{{url('maintenance/mail/active')}}", {
  182. id: emailEvent.id,
  183. }, res => {
  184. if (res) {
  185. emailEvent.is_active = 0;
  186. return "模板启用禁用!";
  187. } else {
  188. emailEvent.is_active = 1;
  189. return "模板启用成功!";
  190. }
  191. });
  192. },
  193. /**
  194. * 展开折叠指定模板的角色列表
  195. * @param index
  196. */
  197. showRole(index) {
  198. if (this.emailEvents[index].isShowRole) {
  199. this.emailEvents[index].isShowRole = false;
  200. } else {
  201. this.emailEvents[index].isShowRole = true;
  202. }
  203. this.$forceUpdate();
  204. },
  205. /**
  206. * 备注编辑/显示切换
  207. * 切换为编辑时,自动聚焦到textarea
  208. * @param index
  209. * @param $event
  210. */
  211. remarkShow(index, $event) {
  212. let _this = this;
  213. setTimeout(function () {
  214. _this.emailEvents[index].remark_show = !_this.emailEvents[index].remark_show;
  215. _this.emailEvents[index].remark_edit = !_this.emailEvents[index].remark_edit;
  216. setTimeout(function () {
  217. let find = $($event.target).parent().find('textarea');
  218. find.focus();
  219. }, 100)
  220. }, 100);
  221. },
  222. /**
  223. * 模板编辑/显示切换
  224. * 切换为编辑时,自动聚焦到textarea
  225. * @param index
  226. * @param $event
  227. */
  228. templateShow(index,$event) {
  229. let _this = this;
  230. setTimeout(function () {
  231. _this.emailEvents[index].template_show = !_this.emailEvents[index].template_show;
  232. _this.emailEvents[index].template_edit = !_this.emailEvents[index].template_edit;
  233. setTimeout(function () {
  234. let find = $($event.target).parent().find('textarea');
  235. find.focus();
  236. }, 100)
  237. }, 100);
  238. },
  239. }
  240. })
  241. </script>
  242. @stop