edit.html 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297
  1. {extend name="../../base/view/common/base" /}
  2. <!-- 主体 -->
  3. {block name="body"}
  4. <form class="layui-form p-page">
  5. <h3 class="pb-3">编辑项目</h3>
  6. <table class="layui-table layui-table-form">
  7. <tr>
  8. <td class="layui-td-gray">项目名称<font>*</font></td>
  9. <td colspan="3"><input type="text" name="name" lay-verify="required" lay-reqText="请输入项目名称" placeholder="请输入项目名称" class="layui-input" value="{$detail.name}"></td>
  10. <td class="layui-td-gray">项目类别<font>*</font></td>
  11. <td>
  12. <select name="cate_id" lay-verify="required" lay-reqText="请选择项目类别">
  13. <option value="">请选择</option>
  14. {volist name = ":get_base_data('ProjectCate')" id="vo"}
  15. <option value="{$vo.id}" {eq name="$vo.id" value="$detail.cate_id"} selected{/eq}>{$vo.title}</option>
  16. {/volist}
  17. </select>
  18. </td>
  19. </tr>
  20. <tr>
  21. <td class="layui-td-gray">项目经理<font>*</font></td>
  22. <td>
  23. <input type="text" name="director_name" placeholder="请选择项目经理(负责人)" readonly class="layui-input" value="{$detail.director_name}" lay-verify="required" readonly lay-reqText="请选择项目经理(负责人)">
  24. <input type="hidden" name="director_uid" value="{$detail.director_uid}">
  25. <input type="hidden" name="did" value="{$detail.did}">
  26. </td>
  27. <td class="layui-td-gray">归属部门<font>*</font></td>
  28. <td><input type="text" name="department" value="{$detail.department}" autocomplete="off" readonly class="layui-input"></td>
  29. <td class="layui-td-gray">始止日期<span style="color: red">*</span></td>
  30. <td><input type="text" name="range_time" value="{$detail.start_time|date='Y-m-d'} 到 {$detail.end_time|date='Y-m-d'}" class="layui-input tool-time" data-range="到" readonly placeholder="开始 到 结束" lay-verify="required" lay-reqText="请选择计划完成周期"></td>
  31. </tr>
  32. <tr>
  33. <td class="layui-td-gray">关联合同</td>
  34. <td colspan="5">
  35. <input type="text" class="layui-input picker-oa" data-types="contract" name="contract_name" placeholder="请选择需要关联的合同" readonly value="{$detail.contract_name|default=''}">
  36. <input type="hidden" class="layui-input" name="contract_id" value="{$detail.contract_id}">
  37. </td>
  38. </tr>
  39. <tr>
  40. <td class="layui-td-gray">项目简介</td>
  41. <td colspan="5">
  42. <textarea name="content" class="layui-textarea">{$detail.content|default=''}</textarea>
  43. </td>
  44. </tr>
  45. {lt name="$detail.status" value="3"}
  46. <tr>
  47. <td colspan="6" style="background-color:#FAFAFA;"><strong>项目阶段</strong><span style="color: red">*</span> <span class="layui-btn layui-btn-xs" id="stepAdd">+ 添加阶段</span></td>
  48. </tr>
  49. <tr>
  50. <td colspan="6">
  51. <table id="stepTable" class="layui-table layui-table-min" style="margin:0">
  52. <tr>
  53. <th width="60">序号</th>
  54. <th width="180">阶段名称</th>
  55. <th width="80">阶段负责人</th>
  56. <th width="180">阶段成员</th>
  57. <th width="162">阶段周期</th>
  58. <th>阶段说明</th>
  59. <th width="120">操作</th>
  60. </tr>
  61. {volist name="$detail.step_array" id="vo" key="k"}
  62. {egt name="$vo.sort" value="$detail.current_step"}
  63. <tr class="step-tr">
  64. <td class="step-key">第 <strong>{$k}</strong> 阶段</td>
  65. <td>
  66. <div class="layui-input-group">
  67. <input type="text" name="step_title[]" value="{$vo.title}" class="layui-input" lay-verify="required" lay-reqText="请输入阶段名称">
  68. <div class="layui-input-split layui-input-suffix picker-diy" style="cursor: pointer;"><i class="layui-icon layui-icon-search"></i></div>
  69. </div>
  70. </td>
  71. <td>
  72. <input type="text" value="{$vo.director_name}" class="layui-input layui-input-readonly picker-admin" lay-verify="required" lay-reqText="请选择阶段负责人" readonly>
  73. <input type="hidden" name="step_director_uid[]" value="{$vo.director_uid}" readonly>
  74. </td>
  75. <td>
  76. <input type="text" value="{$vo.unames}" class="layui-input layui-input-readonly picker-admin" data-type="2">
  77. <input type="hidden" name="step_uids[]" value="{$vo.uids}">
  78. </td>
  79. <td><input type="text" name="step_cycle_time[]" value="{$vo.start_time|date='Y-m-d'} 到 {$vo.end_time|date='Y-m-d'}" class="layui-input layui-input-readonly tool-time" data-range="到" lay-verify="required" lay-reqText="请选择阶段周期" readonly></td>
  80. <td><input type="text" name="step_remark[]" value="{$vo.remark|default=''}" class="layui-input"></td>
  81. <td>
  82. <input type="hidden" name="step_id[]" value="{$vo.id}" class="layui-input">
  83. <div class="layui-btn-group">
  84. <span class="layui-btn layui-btn-xs step-up">上移</span>
  85. <span class="layui-btn layui-btn-normal layui-btn-xs step-down">下移</span>
  86. <span class="layui-btn layui-btn-danger layui-btn-xs step-del" data-id="{$vo.id}">删除</span>
  87. </div>
  88. </td>
  89. </tr>
  90. {else/}
  91. <tr>
  92. <td class="step-key">第 <strong>{$k}</strong> 阶段</td>
  93. <td><input type="text" name="step_title[]" value="{$vo.title}" class="layui-input layui-input-readonly" readonly lay-verify="required" lay-reqText="请输入阶段名称"></td>
  94. <td>
  95. <input type="text" value="{$vo.director_name}" class="layui-input layui-input-readonly" lay-verify="required" lay-reqText="请选择阶段负责人" readonly>
  96. <input type="hidden" name="step_director_uid[]" value="{$vo.director_uid}" readonly>
  97. </td>
  98. <td>
  99. <input type="text" value="{$vo.unames}" class="layui-input layui-input-readonly" data-type="2">
  100. <input type="hidden" name="step_uids[]" value="{$vo.uids}">
  101. </td>
  102. <td><input type="text" name="step_cycle_time[]" value="{$vo.start_time|date='Y-m-d'} 到 {$vo.end_time|date='Y-m-d'}" class="layui-input layui-input-readonly" data-range="到" lay-verify="required" lay-reqText="请选择阶段周期" readonly></td>
  103. <td><input type="text" name="step_remark[]" value="{$vo.remark|default=''}" readonly class="layui-input layui-input-readonly"></td>
  104. <td>
  105. <input type="hidden" name="step_id[]" value="{$vo.id}" class="layui-input">
  106. -
  107. </td>
  108. </tr>
  109. {/egt}
  110. {/volist}
  111. </table>
  112. </td>
  113. </tr>
  114. {/lt}
  115. </table>
  116. <div class="pt-3">
  117. <input type="hidden" name="id" value="{$detail.id|default=0}"/>
  118. <button class="layui-btn layui-btn-normal" lay-submit="" lay-filter="webform">立即提交</button>
  119. <button type="reset" class="layui-btn layui-btn-primary">重置</button>
  120. </div>
  121. </form>
  122. {/block}
  123. <!-- /主体 -->
  124. <!-- 脚本 -->
  125. {block name="script"}
  126. <script>
  127. var moduleInit = ['tool','oaPicker'];
  128. function gouguInit() {
  129. var form = layui.form, tool = layui.tool,oaPicker = layui.oaPicker;
  130. //选择项目经理
  131. $('body').on('click','[name="director_name"]',function () {
  132. var ids=$('[name="director_uid"]').val(),names=$('[name="director_name"]').val();
  133. oaPicker.employeeInit({
  134. ids:ids,
  135. names:names,
  136. type:1,
  137. callback:function(data){
  138. let select_id=[],select_name=[],select_did=[],select_dname=[];
  139. for(var a=0; a<data.length;a++){
  140. select_id.push(data[a].id);
  141. select_name.push(data[a].name);
  142. select_did.push(data[a].did);
  143. select_dname.push(data[a].department);
  144. }
  145. $('[name="director_uid"]').val(select_id.join(','));
  146. $('[name="director_name"]').val(select_name.join(','));
  147. $('[name="did"]').val(select_did.join(','));
  148. $('[name="department"]').val(select_dname.join(','));
  149. }
  150. });
  151. });
  152. //添加阶段信息表格
  153. $('#stepAdd').on('click',function(){
  154. var html = '';
  155. html += '<tr class="step-tr">\
  156. <td class="step-key">第 <strong>0</strong> 阶段</td>\
  157. <td>\
  158. <div class="layui-input-group">\
  159. <input type="text" name="step_title[]" value="" class="layui-input" lay-verify="required" lay-reqText="请输入阶段名称">\
  160. <div class="layui-input-split layui-input-suffix picker-diy" style="cursor: pointer;"><i class="layui-icon layui-icon-search"></i></div>\
  161. </div>\
  162. </td>\
  163. <td>\
  164. <input type="text" value="" class="layui-input layui-input-readonly picker-admin" lay-verify="required" lay-reqText="请选择阶段负责人" readonly>\
  165. <input type="hidden" name="step_director_uid[]" value="0" readonly>\
  166. </td>\
  167. <td>\
  168. <input type="text" value="" class="layui-input layui-input-readonly picker-admin" data-type="2">\
  169. <input type="hidden" name="step_uids[]" value="">\
  170. </td>\
  171. <td><input type="text" name="step_cycle_time[]" value="" class="layui-input layui-input-readonly tool-time" data-range="到" lay-verify="required" lay-reqText="请选择服务周期" readonly></td>\
  172. <td><input type="text" name="step_remark[]" value="" class="layui-input"></td>\
  173. <td>\
  174. <input type="hidden" name="step_id[]" value="0" class="layui-input">\
  175. <div class="layui-btn-group">\
  176. <span class="layui-btn layui-btn-xs step-up">上移</span>\
  177. <span class="layui-btn layui-btn-normal layui-btn-xs step-down">下移</span>\
  178. <span class="layui-btn layui-btn-danger layui-btn-xs step-del" data-id="0">删除</span>\
  179. </div>\
  180. </td>\
  181. </tr>';
  182. $('#stepTable').append(html).find('.tr-none').remove();
  183. $('#stepTable').find('.step-key').each(function(index,item){
  184. $(this).html('第 <strong>'+(index+1)+'</strong> 阶段');
  185. })
  186. form.render();
  187. });
  188. $('#stepTable').on('click','.layui-btn-danger',function(){
  189. if($('.step-tr').length<2){
  190. layer.msg('至少保留一个项目阶段');
  191. return false;
  192. }
  193. let that=$(this);
  194. let id = that.data('id');
  195. if(id==0){
  196. that.parents('.step-tr').remove();
  197. $('#stepTable').find('.step-key').each(function(index,item){
  198. $(this).html('第 <strong>'+(index+1)+'</strong> 阶段');
  199. })
  200. }
  201. else{
  202. layer.confirm('确定要删除该项目阶段吗?', { icon: 3, title: '提示' }, function (index) {
  203. let callback = function (e) {
  204. layer.msg(e.msg);
  205. if (e.code == 0) {
  206. that.parents('.step-tr').remove();
  207. $('#stepTable').find('.step-key').each(function(index,item){
  208. $(this).html('第 <strong>'+(index+1)+'</strong> 阶段');
  209. })
  210. }
  211. }
  212. tool.delete("/project/api/step_del", { id: id }, callback);
  213. layer.close(index);
  214. });
  215. }
  216. });
  217. $('#stepTable').on('click','.step-up',function(e){
  218. let obj = $(e.target).closest('tr');
  219. tr_pre($(obj[0]));
  220. })
  221. $('#stepTable').on('click','.step-down',function(e){
  222. var obj = $(e.target).closest('tr');
  223. tr_next($(obj[0]));
  224. })
  225. function tr_pre(o) {
  226. var pres = o.prevAll('tr.step-tr');
  227. if (pres.length > 0) {
  228. var tmp = o.clone(true);
  229. var oo = pres[0];
  230. o.remove();
  231. $(oo).before(tmp);
  232. $('#stepTable').find('.step-key').each(function(index,item){
  233. $(this).html('第 <strong>'+(index+1)+'</strong> 阶段');
  234. })
  235. }
  236. else{
  237. layer.msg('已经第一个了');
  238. }
  239. }
  240. function tr_next(o) {
  241. var nexts = o.nextAll('tr.step-tr');
  242. if (nexts.length > 0) {
  243. var tmp = o.clone(true);
  244. var oo = nexts[0];
  245. o.remove();
  246. $(oo).after(tmp);
  247. $('#stepTable').find('.step-key').each(function(index,item){
  248. $(this).html('第 <strong>'+(index+1)+'</strong> 阶段');
  249. })
  250. }else{
  251. layer.msg('已经最后一个了');
  252. }
  253. }
  254. $('body').on('click','.picker-diy',function () {
  255. let that = $(this),ids = [],titles=[],map = {};
  256. let callback = function(data){
  257. for ( var i = 0; i <data.length; i++){
  258. ids.push(data[i].id);
  259. titles.push(data[i].title);
  260. }
  261. that.prev().val(titles.join(','));
  262. }
  263. let opts={
  264. "title":"选择项目阶段",
  265. "url": "/project/api/get_project_step",
  266. "ids":"",
  267. "titles":"",
  268. "area": ['600px', '580px'],
  269. "cols":[{field: 'id',width: 80,title:'序号',align:'center'},{field:'title',title:'项目阶段'}]
  270. }
  271. oaPicker.picker(opts,1,callback,map);//单选
  272. });
  273. //监听提交
  274. form.on('submit(webform)', function (data) {
  275. let callback = function (e) {
  276. layer.msg(e.msg);
  277. if (e.code == 0) {
  278. tool.sideClose(1000);
  279. }
  280. }
  281. let clickbtn = $(this);
  282. tool.post("/project/index/add", data.field, callback,clickbtn);
  283. return false;
  284. });
  285. }
  286. </script>
  287. {/block}
  288. <!-- /脚本 -->