716 lines
		
	
	
		
			28 KiB
		
	
	
	
		
			HTML
		
	
	
	
	
	
			
		
		
	
	
			716 lines
		
	
	
		
			28 KiB
		
	
	
	
		
			HTML
		
	
	
	
	
	
| <div class="page-content">
 | ||
| 	<div class="p-4 border-b">
 | ||
| 		<h3 class="h3-title hover-edit">
 | ||
| 			<span class="layui-btn layui-btn-xs bg-priority-{$detail.priority}">{$detail.priority_name}</span>
 | ||
| 			<span id="title_{$detail.id}" data-val="">{$detail.title}</span>
 | ||
| 			<i class="iconfont icon-wodedianping" title="编辑" data-name="title"></i>
 | ||
| 		</h3>
 | ||
| 		<div>
 | ||
| 			<span class="layui-badge layui-bg-gray">#T{$detail.id}</span>
 | ||
| 			<span class="mx-2">{$detail.admin_name}</span>
 | ||
| 			<span class="font-gray">创建于{$detail.times}<span id="editTips">{gt name="$detail.update_time"
 | ||
| 					value="0"},最近更新于 {:time_trans($detail.update_time)}{/gt}</span></span>
 | ||
| 					
 | ||
| 			<span class="layui-btn layui-btn-xs layui-bg-blue ml-4" id="editBtn">编辑任务</span>
 | ||
| 			{eq name="$detail.admin_id" value="$params.uid"}
 | ||
| 			<span class="layui-btn layui-btn-xs layui-btn-danger ml-4" id="delBtn">删除</span>
 | ||
| 			{/eq}
 | ||
| 		</div>
 | ||
| 	</div>
 | ||
| 	<div class="layui-row border-b">
 | ||
| 		<div class="layui-col-md9 p-4 border-r">
 | ||
| 			<table class="layui-table layui-table-form">
 | ||
| 				<tr>
 | ||
| 					<td class="layui-td-gray">负责人</td>
 | ||
| 					<td class="hover-edit"><span id="director_uid_{$detail.id}"
 | ||
| 							data-val="{$detail.director_uid}">{$detail.director_name}</span></td>
 | ||
| 					<td class="layui-td-gray">协作人</td>
 | ||
| 					<td class="hover-edit"><span id="assist_admin_ids_{$detail.id}"
 | ||
| 							data-val="{$detail.assist_admin_ids}">{$detail.assist_admin_names}</span></td>
 | ||
| 					<td class="layui-td-gray">创建人</td>
 | ||
| 					<td class="hover-edit"><span id="admin_id_{$detail.id}"
 | ||
| 							data-val="{$detail.admin_id}">{$detail.admin_name}</span></td>
 | ||
| 				</tr>
 | ||
| 				<tr>
 | ||
| 					<td class="layui-td-gray">任务类型</td>
 | ||
| 					<td class="hover-edit"><span id="type_{$detail.id}"
 | ||
| 							data-val="{$detail.type}">{$detail.type_name}</span></td>
 | ||
| 					<td class="layui-td-gray">任务性质</td>
 | ||
| 					<td class="hover-edit"><span id="is_bug_{$detail.id}"
 | ||
| 							data-val="{$detail.is_bug}">{$detail.is_bug==0?'普通任务(TASK)':($detail.is_bug==2?'优化建议(OPTIMIZATION)':'问题缺陷(BUG)')}</span></td>
 | ||
| 					<td class="layui-td-gray">工作类型</td>
 | ||
| 					<td class="hover-edit"><span id="cate_{$detail.id}"
 | ||
| 							data-val="{$detail.cate}">{$detail.cate_name}</span></td>
 | ||
| 				</tr>
 | ||
| 				<tr>
 | ||
| 					<td class="layui-td-gray">优先级</td>
 | ||
| 					<td class="hover-edit"><span class="color-priority-{$detail.priority}" id="priority_{$detail.id}"
 | ||
| 							data-val="{$detail.priority}">{$detail.priority_name}</span>
 | ||
| 					</td>
 | ||
| 					<td class="layui-td-gray">预估工时</td>
 | ||
| 					<td class="hover-edit"><span id="plan_hours_{$detail.id}" data-val="">{$detail.plan_hours}</span></td>
 | ||
| 					<td class="layui-td-gray">任务状态</td>
 | ||
| 					<td class="hover-edit">
 | ||
| 						<span class="color-flow-{$detail.flow_status}" id="flow_status_{$detail.id}"
 | ||
| 							data-val="{$detail.flow_status}">{$detail.flow_name}</span></td>
 | ||
| 					<input type="hidden" name="done_ratio" id="done_ratio_val" value="{$detail.done_ratio}">
 | ||
| 				</tr>
 | ||
| 				<tr>
 | ||
| 					<td class="layui-td-gray-2">计划完成日期</td>
 | ||
| 					<td class="hover-edit"><span id="end_time_{$detail.id}" data-val="">{$detail.end_time|
 | ||
| 							date='Y-m-d'}</span>{gt name="$detail.delay" value="0"}<span class="layui-badge ml-2">逾期
 | ||
| 							{$detail.delay} 天</span>{/gt}</td>
 | ||
| 					<td class="layui-td-gray-2">实际完成日期</td>
 | ||
| 					<td class="hover-edit">{eq name="$detail.over_time" value="0"}-{else/}{$detail.over_time|
 | ||
| 						date='Y-m-d'}{/eq}</td>
 | ||
| 					<td class="layui-td-gray">完成进度</td>
 | ||
| 					<td class="hover-edit"><span class="color-done_ratio-{$detail.done_ratio}"
 | ||
| 							id="done_ratio_{$detail.id}" data-val="{$detail.done_ratio}">{$detail.done_ratio}%</span>
 | ||
| 					</td>
 | ||
| 				</tr>
 | ||
| 			</table>
 | ||
| 			<div class="md-content hover-edit">
 | ||
| 				<h5 class="py-4">任务描述<i class="iconfont icon-wodedianping" title="编辑" data-name="md_content"></i></h5>
 | ||
| 				<div class="md-content-content" id="md_content_{$detail.id}" data-val="{$detail.md_content}">
 | ||
| 					{$detail.content|raw}
 | ||
| 				</div>
 | ||
| 			</div>
 | ||
| 			<div class="detail-file">
 | ||
| 				<h5 class="py-4">文件附件</h5>
 | ||
| 				<div>
 | ||
| 					<button type="button" class="layui-btn layui-btn-normal layui-btn-sm" id="flieBtn">选择文件并上传</button>
 | ||
| 					<span
 | ||
| 						style="color:#FF5722; font-size:12px; margin-left: 8px;">上传前,请规范命名,最大只能上传{:get_system_info('upload_max_filesize')}的文件,超过请压缩成多个文件上传。</span>
 | ||
| 					<div class="layui-upload-list" {empty name="$file_array" }style="display:none;" {/empty}>
 | ||
| 						<table class="layui-table">
 | ||
| 							<thead>
 | ||
| 								<tr>
 | ||
| 									<th width="60%">文件</th>
 | ||
| 									<th width="15%" style="text-align:center">文件大小</th>
 | ||
| 									<th width="10%" style="text-align:center">上传人</th>
 | ||
| 									<th width="15%" style="text-align:center">操作</th>
 | ||
| 								</tr>
 | ||
| 							</thead>
 | ||
| 							<tbody id="flieList">
 | ||
| 								{volist name="file_array" id="vo"}
 | ||
| 								<tr>
 | ||
| 									<td><a href="{$vo.filepath}" download="{$vo.name}" data-id="{$vo.id}">{$vo.name}</a>
 | ||
| 									</td>
 | ||
| 									<td style="text-align: center;">{$vo.filesize/1048576|round=2}MB</td>
 | ||
| 									<td style="text-align: center;">{$vo.admin_name}</td>
 | ||
| 									<td style="text-align: center;">
 | ||
| 										<div class="layui-btn-group">
 | ||
| 											<a class="layui-btn layui-btn-xs " href="{$vo.filepath}"
 | ||
| 												download="{$vo.name}" data-id="{$vo.id}">下载</a>
 | ||
| 											<span class="layui-btn layui-btn-xs layui-btn-danger file-delete"
 | ||
| 												data-uid="{$vo.admin_id}" data-id="{$vo.id}">删除</span>
 | ||
| 										</div>
 | ||
| 									</td>
 | ||
| 								</tr>
 | ||
| 								{/volist}
 | ||
| 							</tbody>
 | ||
| 						</table>
 | ||
| 					</div>
 | ||
| 				</div>
 | ||
| 			</div>
 | ||
| 			<div class="detail-link">
 | ||
| 				<h5 class="py-4">关联链接</h5>
 | ||
| 				<div>
 | ||
| 					<button type="button" class="layui-btn layui-btn-sm" id="linkBtn">新增相关联链接</button>
 | ||
| 					<span style="color:#FF5722; font-size:12px; margin-left: 8px;">请规范填写链接说明,方便大家查阅。</span>
 | ||
| 					<div class="layui-upload-list" {empty name="$link_array" }style="display:none;" {/empty}>
 | ||
| 						<table class="layui-table">
 | ||
| 							<thead>
 | ||
| 								<tr>
 | ||
| 									<th width="60%">链接</th>
 | ||
| 									<th width="15%" style="text-align:center">说明</th>
 | ||
| 									<th width="10%" style="text-align:center">添加人</th>
 | ||
| 									<th width="15%" style="text-align:center">操作</th>
 | ||
| 								</tr>
 | ||
| 							</thead>
 | ||
| 							<tbody id="linkList">
 | ||
| 								{volist name="link_array" id="vo"}
 | ||
| 								<tr data-id="{$vo.id}" id="link_{$vo.id}">
 | ||
| 									<td><a href="{$vo.url}" target="_blank">{$vo.url}</a></td>
 | ||
| 									<td>{$vo.desc}</td>
 | ||
| 									<td style="text-align: center;">{$vo.admin_name}</td>
 | ||
| 									<td style="text-align: center;">
 | ||
| 										<div class="layui-btn-group">
 | ||
| 											<span class="layui-btn layui-btn-xs link-edit" data-id="{$vo.id}"
 | ||
| 												data-href="{$vo.url}" data-desc="{$vo.desc}">编辑</span>
 | ||
| 											<span class="layui-btn layui-btn-xs layui-btn-danger link-delete"
 | ||
| 												data-uid="{$vo.admin_id}" data-id="{$vo.id}">删除</span>
 | ||
| 										</div>
 | ||
| 									</td>
 | ||
| 								</tr>
 | ||
| 								{/volist}
 | ||
| 							</tbody>
 | ||
| 						</table>
 | ||
| 					</div>
 | ||
| 				</div>
 | ||
| 			</div>
 | ||
| 		</div>
 | ||
| 		<div class="layui-col-md3 p-4">
 | ||
| 			<div class="pb-4">
 | ||
| 				<p class="font-gray mb-2">关联产品:</p>
 | ||
| 				<span>
 | ||
| 					{gt name="$detail.project_id" value="0"}{$detail.product_name}{else/}<span
 | ||
| 						class="font-gray">未设置</span>{/gt}
 | ||
| 				</span>
 | ||
| 			</div>
 | ||
| 			<div class="pb-4 hover-{$role_edit}">
 | ||
| 				<p class="font-gray mb-2">关联项目:</p>
 | ||
| 				<span id="project_id_{$detail.id}" data-val="{$detail.project_id}">
 | ||
| 					{gt name="$detail.project_id" value="0"}{$detail.project_name}{else/}<span
 | ||
| 						class="font-gray">未设置</span>{/gt}
 | ||
| 				</span>
 | ||
| 				<i class="iconfont icon-wodedianping" title="编辑" data-name="project_id"></i>
 | ||
| 			</div>
 | ||
| 
 | ||
| 			<div class="pb-4 mt-3">
 | ||
| 				<h5 class="mb-4">工作记录<span class="layui-btn layui-btn-xs add-schedule right">+ 工作记录</span></h5>
 | ||
| 				<div id="schedule_{$detail.id}">
 | ||
| 					<span style="color:#999">暂无工作记录</span>
 | ||
| 				</div>
 | ||
| 			</div>
 | ||
| 		</div>
 | ||
| 	</div>
 | ||
| 	<div class="layui-tab layui-tab-brief px-4" lay-filter="docDemoTabBrief">
 | ||
| 		<ul class="layui-tab-title">
 | ||
| 			<li class="layui-this">操作日志({$detail.logs})</li>
 | ||
| 			<li>员工评论({$detail.comments})</li>
 | ||
| 		</ul>
 | ||
| 		<div class="layui-tab-content p-0">
 | ||
| 			<div class="layui-tab-item logs-list ">
 | ||
| 				<div id="log_task_{$detail.id}"></div>
 | ||
| 			</div>
 | ||
| 			<div class="layui-tab-item comment-list ">
 | ||
| 				<div class="comment-input my-2">
 | ||
| 					<input type="text" id="commentInput" readonly placeholder="发表一下你的看法" class="layui-input" value="">
 | ||
| 				</div>
 | ||
| 				<div id="comment_task_{$detail.id}"></div>
 | ||
| 			</div>
 | ||
| 		</div>
 | ||
| 	</div>
 | ||
| </div>
 | ||
| 
 | ||
| <script>
 | ||
| 	// 判断任务状态,并修改任务进度
 | ||
| 	if ($('#flow_status_{$detail.id}').text() === '已完成') {
 | ||
| 		$('#done_ratio_{$detail.id}').text('100%').attr('title', '100');
 | ||
| 	} else if ($('#flow_status_{$detail.id}').text() === '进行中') {
 | ||
| 		$('#done_ratio_{$detail.id}').text('50%').attr('title', '50');
 | ||
| 	} else if ($('#flow_status_{$detail.id}').text() === '未解决') {
 | ||
| 		$('#done_ratio_{$detail.id}').text('0%').attr('title', '0');
 | ||
| 	} else {
 | ||
| 		$('#done_ratio_{$detail.id}').text('0%').attr('title', '0');
 | ||
| 	}
 | ||
| 
 | ||
| 	function previewImg(obj) {
 | ||
| 		var img = new Image();
 | ||
| 		img.src = obj.src;
 | ||
| 		var height = img.height + 50; // 原图片大小
 | ||
| 		var width = img.width; //原图片大小
 | ||
| 		var imgHtml = "<img src='" + obj.src + "' width='width' height='height'/>";
 | ||
| 		//弹出层
 | ||
| 		layer.open({
 | ||
| 			type: 1,
 | ||
| 			shade: 0.8,
 | ||
| 			offset: 'auto',
 | ||
| 			area: [width + 'px', 800 + 'px'], // area: [width + 'px',height+'px'] //原图显示
 | ||
| 			shadeClose: true,
 | ||
| 			scrollbar: false,
 | ||
| 			title: "图片预览", //不显示标题
 | ||
| 			content: imgHtml, //捕获的元素,注意:最好该指定的元素要存放在body最外层,否则可能被其它的相对元素所影响
 | ||
| 			cancel: function () {
 | ||
| 				//layer.msg('捕获就是从页面已经存在的元素上,包裹layer的结构', { time: 5000, icon: 6 });
 | ||
| 			}
 | ||
| 		});
 | ||
| 	}
 | ||
| </script>
 | ||
| 
 | ||
| <script>
 | ||
| 	function openInit() {
 | ||
| 		const admin_id = '{$detail.admin_id}';
 | ||
| 		const detail_id = '{$detail.id}';
 | ||
| 		const opsData = {
 | ||
| 			flow_status: [
 | ||
| 				{ 'id': 1, 'title': '未开始' },
 | ||
| 				{ 'id': 2, 'title': '进行中' },
 | ||
| 				{ 'id': 3, 'title': '已完成' },
 | ||
| 				{ 'id': 4, 'title': '不解决' },
 | ||
| 				{ 'id': 5, 'title': '已关闭' },
 | ||
| 				{ 'id': 6, 'title': '未解决' },
 | ||
| 			],
 | ||
| 			is_bug: [
 | ||
| 				{ 'id': 0, 'title': '普通任务(TASK)' },
 | ||
| 				{ 'id': 1, 'title': '问题缺陷(BUG)' },
 | ||
| 				{ 'id': 2, 'title': '优化建议(OPTIMIZATION)' },
 | ||
| 			],
 | ||
| 			priority: [
 | ||
| 				{ 'id': 1, 'title': '低' },
 | ||
| 				{ 'id': 2, 'title': '中' },
 | ||
| 				{ 'id': 3, 'title': '高' },
 | ||
| 				{ 'id': 4, 'title': '紧急' }
 | ||
| 			],
 | ||
| 			done_ratio: [
 | ||
| 				{ 'id': 0, 'title': '0%' },
 | ||
| 				{ 'id': 10, 'title': '20%' },
 | ||
| 				{ 'id': 40, 'title': '40%' },
 | ||
| 				{ 'id': 50, 'title': '50%' },
 | ||
| 				{ 'id': 60, 'title': '60%' },
 | ||
| 				{ 'id': 80, 'title': '80%' },
 | ||
| 				{ 'id': 100, 'title': '100%' }
 | ||
| 			]
 | ||
| 		}
 | ||
| 		const layer = layui.layer, edit = layui.gouguEdit, comment = layui.gouguComment, schedule = layui.gouguSchedule, upload = layui.upload, tool = layui.tool;
 | ||
| 
 | ||
| 		$('#flow_status_' + detail_id).on('click', function () {
 | ||
| 			let flow_status = $(this).data('val');
 | ||
| 			if (flow_status === '3') {
 | ||
| 				$('#done_ratio_val').val('100');
 | ||
| 			} else {
 | ||
| 				$('#done_ratio_val').val('0');
 | ||
| 			}
 | ||
| 		});
 | ||
| 
 | ||
| 		$('.hover-edit').hover(function () {
 | ||
| 			$(this).addClass('hover-on');
 | ||
| 		}, function () {
 | ||
| 			$(this).removeClass('hover-on');
 | ||
| 		})
 | ||
| 
 | ||
| 		$('.hover-edit').on('click', 'i', function () {
 | ||
| 			let name = $(this).data('name');
 | ||
| 			let show_txt = $('#' + name + '_' + detail_id).text().replace(/[\r\n\t]/g, "");
 | ||
| 			let real_txt = $('#' + name + '_' + detail_id).data('val');
 | ||
| 			if (real_txt === '') {
 | ||
| 				real_txt = show_txt;
 | ||
| 			}
 | ||
| 			editShow(detail_id, name, show_txt, real_txt);
 | ||
| 		})
 | ||
| 
 | ||
| 		$('#delBtn').on('click', function () {
 | ||
| 			layer.confirm('确定要删除该任务吗?请慎重', { icon: 3, title: '提示' }, function (index) {
 | ||
| 				let callback = function (e) {
 | ||
| 					layer.closeAll();
 | ||
| 					layer.msg(e.msg);
 | ||
| 					setTimeout(function () {
 | ||
| 						location.reload();
 | ||
| 					}, 1000)
 | ||
| 				}
 | ||
| 				let postData = { "id": detail_id };
 | ||
| 				tool.delete("/task/index/delete", postData, callback);
 | ||
| 			});
 | ||
| 		})
 | ||
| 
 | ||
| 		$('#editBtn').on('click', function () {
 | ||
| 			// 获取任务详情
 | ||
| 			$.ajax({
 | ||
| 				url: '/task/index/gettask',
 | ||
| 				method: 'GET',
 | ||
| 				data: { id: '{$detail.id}' },
 | ||
| 				success: function (response) {
 | ||
| 					if (response.code === 0) {
 | ||
| 						const detail = response.data.detail;
 | ||
| 						// 获取工作类型
 | ||
| 						$.ajax({
 | ||
| 							url: '/task/index/getworkcate',
 | ||
| 							method: 'GET',
 | ||
| 							success: function (workcateResponse) {
 | ||
| 								if (workcateResponse.code === 0) {
 | ||
| 									const cateList = workcateResponse.data.cate;
 | ||
| 									const adminList = workcateResponse.data.admin_id;
 | ||
| 									const typeList = workcateResponse.data.type;
 | ||
| 
 | ||
| 									const workcateOptions = cateList.map(cate => `
 | ||
| 										<option value="${cate.id}" ${cate.id == detail.cate ? 'selected' : ''}>${cate.title}</option>
 | ||
| 									`).join('');
 | ||
| 
 | ||
| 									const typeOptions = typeList.map(type => `
 | ||
| 										<option value="${type.id}" ${type.id == detail.type ? 'selected' : ''}>${type.title}</option>
 | ||
| 									`).join('');
 | ||
| 
 | ||
| 									const adminOptions = adminList.map(admin => `
 | ||
| 										<option value="${admin.id}" ${admin.id == detail.director_uid ? 'selected' : ''}>${admin.name}</option>
 | ||
| 									`).join('');
 | ||
| 
 | ||
| 									// 弹出层
 | ||
| 									layer.open({
 | ||
| 										type: 1,
 | ||
| 										title: '编辑任务',
 | ||
| 										area: ['1000px', '500px'],
 | ||
| 										content: `
 | ||
| 								<form class="layui-form layui-form-pane" style="padding: 20px;">
 | ||
| 									<input type="hidden" name="id" value="${detail.id}">
 | ||
| 									<div class="layui-form-item" style="display:flex">
 | ||
| 										<div class="layui-inline" style="display:flex;align-items:center;justify-content:center;">
 | ||
| 											<label class="layui-form-label">负责人</label>
 | ||
| 											<div class="layui-input-inline" style="width:180px">
 | ||
| 												<select name="director_uid" required lay-verify="required" class="layui-input" style="display:block">
 | ||
| 													${adminOptions}
 | ||
| 												</select>
 | ||
| 											</div>
 | ||
| 										</div>
 | ||
| 										<div class="layui-inline" style="display:flex;align-items:center;justify-content:center;">
 | ||
| 											<label class="layui-form-label">协作人</label>
 | ||
| 											<div class="layui-input-inline" style="width:180px">
 | ||
| 												<input type="text" name="assist_admin_ids" autocomplete="off" value="功能还未做好" disabled class="layui-input">
 | ||
| 											</div>
 | ||
| 										</div>
 | ||
| 										<div class="layui-inline" style="display:flex;align-items:center;justify-content:center;">
 | ||
| 											<label class="layui-form-label">优先级</label>
 | ||
| 											<div class="layui-input-inline" style="width:180px">
 | ||
| 												<select name="priority" required lay-verify="required"  value="${detail.flow_status}" style="display:block" class="layui-input">
 | ||
| 													<option value="1" ${detail.priority == 1 ? 'selected' : ''}>低</option>
 | ||
| 													<option value="2" ${detail.priority == 2 ? 'selected' : ''}>中</option>
 | ||
| 													<option value="3" ${detail.priority == 3 ? 'selected' : ''}>高</option>
 | ||
| 													<option value="4" ${detail.priority == 4 ? 'selected' : ''}>紧急</option>
 | ||
| 												</select>
 | ||
| 											</div>
 | ||
| 										</div>
 | ||
| 									</div>
 | ||
| 									<div class="layui-form-item" style="display:flex">
 | ||
| 										<div class="layui-inline" style="display:flex;align-items:center;justify-content:center;">
 | ||
| 											<label class="layui-form-label">任务类型</label>
 | ||
| 											<div class="layui-input-inline" style="width:180px">
 | ||
| 												<select name="type" required lay-verify="required" class="layui-input" style="display:block">
 | ||
| 													${typeOptions}
 | ||
| 												</select>
 | ||
| 											</div>
 | ||
| 										</div>
 | ||
| 										<div class="layui-inline" style="display:flex;align-items:center;justify-content:center;">
 | ||
| 											<label class="layui-form-label">任务性质</label>
 | ||
| 											<div class="layui-input-inline" style="width:180px">
 | ||
| 												<select id="isBugSelect" name="is_bug" required lay-verify="required" value="${detail.flow_status}" style="display:block" class="layui-input">
 | ||
| 													<option value="1" ${detail.is_bug == 1 ? 'selected' : ''}>普通任务(TASK)</option>
 | ||
| 													<option value="2" ${detail.is_bug == 2 ? 'selected' : ''}>问题缺陷(BUG)</option>
 | ||
| 												</select>
 | ||
| 											</div>
 | ||
| 										</div>
 | ||
| 										<div class="layui-inline" style="display:flex;align-items:center;justify-content:center;">
 | ||
| 											<label class="layui-form-label">工作类型</label>
 | ||
| 											<div class="layui-input-inline" style="width:180px">
 | ||
| 												<select name="cate" required lay-verify="required" class="layui-input" style="display:block">
 | ||
| 													${workcateOptions}
 | ||
| 												</select>
 | ||
| 											</div>
 | ||
| 										</div>
 | ||
| 									</div>
 | ||
| 									<div class="layui-form-item" style="display:flex">
 | ||
| 										<div class="layui-inline" style="display:flex;align-items:center;justify-content:center;">
 | ||
| 											<label class="layui-form-label">预计工时</label>
 | ||
| 											<div class="layui-input-inline" style="width:180px">
 | ||
| 												<input type="text" name="plan_hours" placeholder="请输入预计工时" autocomplete="off" class="layui-input" value="${detail.plan_hours}">
 | ||
| 											</div>
 | ||
| 										</div>
 | ||
| 										<div class="layui-inline" style="display:flex;align-items:center;justify-content:center;">
 | ||
| 											<label class="layui-form-label">计划完成日期</label>
 | ||
| 											<div class="layui-input-inline" style="width:180px">
 | ||
| 												<input type="text" name="end_time" required lay-verify="required" placeholder="请输入计划完成日期" autocomplete="off" class="layui-input" value="${detail.end_time}">
 | ||
| 											</div>
 | ||
| 										</div>
 | ||
| 										<div class="layui-inline" style="display:flex;align-items:center;justify-content:center;">
 | ||
| 											<label class="layui-form-label">实际完成日期</label>
 | ||
| 											<div class="layui-input-inline" style="width:180px">
 | ||
| 												<input type="text" name="over_time" placeholder="请输入实际完成日期" autocomplete="off" class="layui-input" value="${detail.over_time}">
 | ||
| 											</div>
 | ||
| 										</div>
 | ||
| 									</div>
 | ||
| 									<div class="layui-form-item" style="display:flex">
 | ||
| 										<div class="layui-inline" style="display:flex;align-items:center;justify-content:center;">
 | ||
| 											<label class="layui-form-label">任务状态</label>
 | ||
| 											<div class="layui-input-inline" style="width:180px">
 | ||
| 												<select name="flow_status" required lay-verify="required"  value="${detail.flow_status}" style="display:block" class="layui-input">
 | ||
| 													<option value="1" ${detail.flow_status == 1 ? 'selected' : ''}>未开始</option>
 | ||
| 													<option value="2" ${detail.flow_status == 2 ? 'selected' : ''}>进行中</option>
 | ||
| 													<option value="3" ${detail.flow_status == 3 ? 'selected' : ''}>已完成</option>
 | ||
| 													<option value="4" ${detail.flow_status == 4 ? 'selected' : ''}>已拒绝</option>
 | ||
| 													<option value="5" ${detail.flow_status == 5 ? 'selected' : ''}>已关闭</option>
 | ||
| 												</select>
 | ||
| 											</div>
 | ||
| 										</div>
 | ||
| 										<div class="layui-inline" style="display:flex;align-items:center;justify-content:center;">
 | ||
| 											<label class="layui-form-label">完成进度</label>
 | ||
| 											<div class="layui-input-inline" style="width:180px; display: flex; align-items: center;">
 | ||
| 												<input type="text" name="done_ratio" required lay-verify="required" placeholder="请输入完成进度" autocomplete="off" class="layui-input" value="${detail.done_ratio}" style="flex: 1;">
 | ||
| 												<div class="layui-input-split layui-input-suffix">
 | ||
| 													%
 | ||
| 												</div>
 | ||
| 											</div>
 | ||
| 										</div>
 | ||
| 										<div class="layui-inline" style="display:flex;align-items:center;justify-content:center;">
 | ||
| 											<label class="layui-form-label">创建人</label>
 | ||
| 											<div class="layui-input-inline" style="width:180px">
 | ||
| 												<input type="text" name="admin_name" disabled required lay-verify="required" class="layui-input" value="{$detail.admin_name}" style="display:block">
 | ||
| 											</div>
 | ||
| 										</div>
 | ||
| 									</div>
 | ||
| 									<div class="layui-form-item">
 | ||
| 										<div class="layui-input-block">
 | ||
| 											<button class="layui-btn" lay-submit lay-filter="saveProject">保存</button>
 | ||
| 										</div>
 | ||
| 									</div>
 | ||
| 								</form>
 | ||
| 								`,
 | ||
| 										success: function (layero, index) {
 | ||
| 											// layui.config({
 | ||
| 											// 	base: 'js/',
 | ||
| 											// })
 | ||
| 											layui.use(['form', 'laydate', 'multiSelect'], function () {
 | ||
| 												var form = layui.form;
 | ||
| 												var laydate = layui.laydate;
 | ||
| 												var multiSelect = layui.multiSelect;
 | ||
| 
 | ||
| 												// 初始化日期选择器
 | ||
| 												laydate.render({
 | ||
| 													elem: 'input[name="end_time"]',
 | ||
| 													type: 'date',
 | ||
| 													format: 'yyyy-MM-dd',
 | ||
| 												});
 | ||
| 
 | ||
| 												laydate.render({
 | ||
| 													elem: 'input[name="over_time"]',
 | ||
| 													type: 'date',
 | ||
| 													format: 'yyyy-MM-dd',
 | ||
| 												});
 | ||
| 
 | ||
| 												// 初始化多选
 | ||
| 												multiSelect.init();
 | ||
| 
 | ||
| 												// 表单提交事件
 | ||
| 												form.on('submit(saveProject)', function (data) {
 | ||
| 													console.log(data.field); // 打印所有表单数据
 | ||
| 													// 可以在这里发送AJAX请求,将数据提交到服务器
 | ||
| 													$.ajax({
 | ||
| 														url: '/task/index/gettask',
 | ||
| 														method: 'POST',
 | ||
| 														data: data.field,
 | ||
| 														success: function (response) {
 | ||
| 															layer.msg('保存成功');
 | ||
| 															layer.close(index); // 关闭弹窗
 | ||
| 															// location.reload(); 
 | ||
| 														}
 | ||
| 													});
 | ||
| 
 | ||
| 													return false; // 阻止表单跳转
 | ||
| 												});
 | ||
| 
 | ||
| 												$('#get-val').click(function() {
 | ||
| 													var vals = [],
 | ||
| 														texts = [];
 | ||
| 													$('select[multiple] option:selected').each(function() {
 | ||
| 														vals.push($(this).val());
 | ||
| 														texts.push($(this).text());
 | ||
| 													})
 | ||
| 													console.dir(vals);
 | ||
| 													console.dir(texts);
 | ||
| 												})
 | ||
| 											});
 | ||
| 										},
 | ||
| 										cancel: function (index, layero) {
 | ||
| 											layer.close(index); // 关闭弹窗
 | ||
| 											return false; // 阻止默认关闭行为
 | ||
| 										}
 | ||
| 									});
 | ||
| 								} else {
 | ||
| 									layer.msg(workcateResponse.msg);
 | ||
| 								}
 | ||
| 							}
 | ||
| 						});
 | ||
| 					} else {
 | ||
| 						layer.msg(response.msg);
 | ||
| 					}
 | ||
| 				}
 | ||
| 			});
 | ||
| 		});
 | ||
| 
 | ||
| 		// 上传文件
 | ||
| 		upload.render({
 | ||
| 			elem: '#flieBtn'
 | ||
| 			, url: '/api/index/upload'
 | ||
| 			, accept: 'file'
 | ||
| 			, exts: 'jpeg|jpg|png|gif|doc|docx|ppt|pptx|xls|xlsx|pdf|zip|rar|7z'
 | ||
| 			, before: function (obj) {
 | ||
| 				layer.msg('上传中...', { time: 3600000 });
 | ||
| 			}
 | ||
| 			, done: function (res, index, upload) {
 | ||
| 				let callback = function (e) {
 | ||
| 					layer.msg('上传成功');
 | ||
| 					tool.load('/task/index/view?id=' + detail_id);
 | ||
| 				}
 | ||
| 				let postData = { 'topic_id': detail_id, 'file_id': res.data.id, 'file_name': res.data.name, 'module': 'task' };
 | ||
| 				tool.post("/api/appendix/add", postData, callback);
 | ||
| 			}
 | ||
| 			, error: function (index, upload) {
 | ||
| 				layer.msg('上传失败');
 | ||
| 			}
 | ||
| 		});
 | ||
| 
 | ||
| 		// 删除文件
 | ||
| 		$('#flieList').on('click', '.file-delete', function () {
 | ||
| 			let id = $(this).data('id');
 | ||
| 			let uid = $(this).data('uid');
 | ||
| 			if (uid != GOUGU_DEV.uid) {
 | ||
| 				layer.msg('你不是该文件的上传人,无权限删除');
 | ||
| 				return false;
 | ||
| 			}
 | ||
| 			layer.confirm('确定要删除该附件吗?', { icon: 3, title: '提示' }, function (index) {
 | ||
| 				let callback = function (e) {
 | ||
| 					layer.closeAll();
 | ||
| 					layer.msg(e.msg);
 | ||
| 					tool.load('/task/index/view?id=' + detail_id);
 | ||
| 				}
 | ||
| 				let postData = { 'id': id };
 | ||
| 				tool.delete("/api/appendix/delete", postData, callback);
 | ||
| 			});
 | ||
| 		})
 | ||
| 
 | ||
| 		// 新增链接
 | ||
| 		$('#linkBtn').on('click', function () {
 | ||
| 			comment.addLink(0, detail_id, 'task', '', '');
 | ||
| 		})
 | ||
| 
 | ||
| 		// 编辑链接
 | ||
| 		$('#linkList').on('click', '.link-edit', function () {
 | ||
| 			let id = $(this).data('id');
 | ||
| 			let url = $(this).data('href');
 | ||
| 			let desc = $(this).data('desc');
 | ||
| 			comment.addLink(id, detail_id, 'task', url, desc);
 | ||
| 		})
 | ||
| 
 | ||
| 		// 删除链接
 | ||
| 		$('#linkList').on('click', '.link-delete', function () {
 | ||
| 			let id = $(this).data('id');
 | ||
| 			layer.confirm('确定要删除该链接吗?', { icon: 3, title: '提示' }, function (index) {
 | ||
| 				let callback = function (e) {
 | ||
| 					layer.closeAll();
 | ||
| 					layer.msg(e.msg);
 | ||
| 					tool.load("/task/index/view?id=" + detail_id);
 | ||
| 				}
 | ||
| 				let postData = { "id": id };
 | ||
| 				tool.delete("/api/appendix/delete_link", postData, callback);
 | ||
| 			});
 | ||
| 		})
 | ||
| 
 | ||
| 		// 新增工作记录
 | ||
| 		$('.add-schedule').on('click', function () {
 | ||
| 			schedule.add(detail_id);
 | ||
| 		})
 | ||
| 
 | ||
| 		// 加载工作记录
 | ||
| 		schedule.load(detail_id);
 | ||
| 
 | ||
| 		// 加载评论
 | ||
| 		comment.load(detail_id, 'task');
 | ||
| 		$('#commentInput').on('click', function () {
 | ||
| 			comment.editor(0, detail_id, 0, 0, 'task', '');
 | ||
| 		})
 | ||
| 
 | ||
| 		// 回复
 | ||
| 		$('#comment_task_' + detail_id).on('click', '[data-event="replay"]', function () {
 | ||
| 			let pid = $(this).data('id');
 | ||
| 			let padmin_id = $(this).data('uid');
 | ||
| 			comment.editor(0, detail_id, pid, padmin_id, 'task', '');
 | ||
| 		})
 | ||
| 
 | ||
| 		// 编辑
 | ||
| 		$('#comment_task_' + detail_id).on('click', '[data-event="edit"]', function () {
 | ||
| 			let id = $(this).data('id');
 | ||
| 			let mdcontent = $('#comment_' + id).data('mdcontent');
 | ||
| 			comment.editor(id, detail_id, 0, 0, 'task', mdcontent);
 | ||
| 		})
 | ||
| 
 | ||
| 		// 删除
 | ||
| 		$('#comment_task_' + detail_id).on('click', '[data-event="del"]', function () {
 | ||
| 			let id = $(this).data('id');
 | ||
| 			comment.del(id, detail_id, 'task');
 | ||
| 		})
 | ||
| 
 | ||
| 		// 加载操作记录
 | ||
| 		comment.log(detail_id, 'task');
 | ||
| 
 | ||
| 		let loading = false;
 | ||
| 
 | ||
| 		// 编辑任务信息
 | ||
| 		let editPost = function (id, name, show_val, real_val) {
 | ||
| 			let callback = function (e) {
 | ||
| 				layer.closeAll();
 | ||
| 				if (e.code == 0) {
 | ||
| 					tool.load('/task/index/view/id/' + id);
 | ||
| 					if (layui.pageTable) {
 | ||
| 						setTimeout(function () {
 | ||
| 							layui.pageTable.reload();
 | ||
| 						}, 400)
 | ||
| 					}
 | ||
| 				}
 | ||
| 				else {
 | ||
| 					layer.msg(e.msg);
 | ||
| 				}
 | ||
| 			}
 | ||
| 			let postData = { id: id };
 | ||
| 			postData[name] = real_val;
 | ||
| 			if (name == 'md_content') {
 | ||
| 				postData['content'] = show_val;
 | ||
| 			}
 | ||
| 			tool.post("/task/index/add", postData, callback);
 | ||
| 		}
 | ||
| 
 | ||
| 		// 显示编辑框
 | ||
| 		function editShow(id, name, show_txt, real_txt) {
 | ||
| 			if (loading == true) {
 | ||
| 				return false;
 | ||
| 			}
 | ||
| 			if (name == "title" || name == "plan_hours") {
 | ||
| 				edit.text(id, name, real_txt, editPost);
 | ||
| 			}
 | ||
| 			if (name == "end_time") {
 | ||
| 				if (admin_id == GOUGU_DEV.uid) {
 | ||
| 					edit.date(id, name, real_txt, editPost);
 | ||
| 				} else {
 | ||
| 					layer.msg('您没权限修改,请联系创建人修改');
 | ||
| 				}
 | ||
| 			}
 | ||
| 			if (name == "director_uid") {
 | ||
| 				edit.employee_one(id, name, show_txt, real_txt, editPost);
 | ||
| 			}
 | ||
| 			if (name == "assist_admin_ids") {
 | ||
| 				edit.employee_more(id, name, show_txt, real_txt, editPost);
 | ||
| 			}
 | ||
| 			if (name == "flow_status" || name == "is_bug" || name == "priority" || name == "done_ratio") {
 | ||
| 				edit.dropdown(id, name, real_txt, opsData[name], editPost);
 | ||
| 			}
 | ||
| 			if (name == "type") {
 | ||
| 				loading = true;
 | ||
| 				tool.get("/api/index/get_task_cate", {}, function (res) {
 | ||
| 					let data = res.data;
 | ||
| 					loading = false;
 | ||
| 					edit.dropdown(id, name, real_txt, data, editPost, 0);
 | ||
| 				});
 | ||
| 			}
 | ||
| 			if (name == "cate") {
 | ||
| 				loading = true;
 | ||
| 				tool.get("/api/index/get_work", {}, function (res) {
 | ||
| 					let data = res.data;
 | ||
| 					loading = false;
 | ||
| 					edit.dropdown(id, name, real_txt, data, editPost, 0);
 | ||
| 				});
 | ||
| 			}
 | ||
| 			if (name == "project_id") {
 | ||
| 				if (admin_id == GOUGU_DEV.uid) {
 | ||
| 					loading = true;
 | ||
| 					tool.get("/api/index/get_project", {}, function (res) {
 | ||
| 						let data = res.data;
 | ||
| 						loading = false;
 | ||
| 						edit.dropdown(id, name, real_txt, data, editPost, 1);
 | ||
| 					});
 | ||
| 				} else {
 | ||
| 					layer.msg('您没权限修改,请联系创建人或负责人修改');
 | ||
| 				}
 | ||
| 			}
 | ||
| 			if (name == "md_content") {
 | ||
| 				edit.editor(id, name, real_txt, editPost);
 | ||
| 			}
 | ||
| 		}
 | ||
| 	}
 | ||
| </script> |