510 lines
		
	
	
		
			22 KiB
		
	
	
	
		
			Cheetah
		
	
	
	
	
	
			
		
		
	
	
			510 lines
		
	
	
		
			22 KiB
		
	
	
	
		
			Cheetah
		
	
	
	
	
	
| {{template "header"}}
 | |
| 
 | |
| <form class="layui-form" style="padding-bottom: 80px;">
 | |
|     {{.CsrfTokenField}}
 | |
|     <input type="hidden" id="ID" name="ID" value="{{.Item.ID}}" />
 | |
| 
 | |
|     <div class="layui-tab-content" style="padding-top: 0;">
 | |
|         <div class="layui-tab-item layui-show">
 | |
|             <!-- <div class="layui-card">
 | |
|                 <div class="layui-card-header">客户信息</div>
 | |
|                 <div class="layui-card-body">
 | |
|                     <div class="layui-form-item">
 | |
|                         <div class="layui-form-label">选择客户</div>
 | |
|                         <div class="layui-input-inline" id="CustomerID" style="width: 240px;"></div>
 | |
|                     </div>
 | |
|                 </div>
 | |
|             </div> -->
 | |
|             <div class="layui-card">
 | |
|                 <div class="layui-card-header">客户信息</div>
 | |
|                 <div class="layui-card-body">
 | |
|                     <div class="layui-form-item">
 | |
|                         <div class="layui-form-label">选择客户</div>
 | |
|                         <div class="layui-input-inline">
 | |
|                             <button type="button" id="selectCustomer" class="layui-btn layui-btn-primary layui-border">
 | |
|                                 <i class="layui-icon layui-icon-search"></i>
 | |
|                                 选择数据
 | |
|                             </button>
 | |
|                         </div>
 | |
|                         <div class="layui-form-label">客户编号</div>
 | |
|                         <div class="layui-input-inline">
 | |
|                             <input type="text" id="CustomerID" name="CustomerID" value="{{.Item.CustomerID}}"
 | |
|                                 lay-verify="required" readonly autocomplete="off" placeholder="请输入客户编号"
 | |
|                                 class="layui-input" />
 | |
|                         </div>
 | |
|                         <div class="layui-form-label">客户名称</div>
 | |
|                         <div class="layui-input-inline">
 | |
|                             <input type="text" id="CustomerName" name="CustomerName" value="{{.Item.CustomerName}}"
 | |
|                                 readonly autocomplete="off" placeholder="请输入客户名称" class="layui-input" />
 | |
|                         </div>
 | |
|                     </div>
 | |
|                 </div>
 | |
|             </div>
 | |
| 
 | |
|             <div class="layui-card">
 | |
|                 <div class="layui-card-header">项目信息</div>
 | |
|                 <div class="layui-card-body">
 | |
|                     {{if .Item.ID}}
 | |
|                     <div class="layui-form-item">
 | |
|                         <div class="layui-form-label">编号</div>
 | |
|                         <div class="layui-form-label" style="width:400px;text-align:left;">
 | |
|                             {{.Item.ID}}
 | |
|                         </div>
 | |
|                     </div>
 | |
|                     {{end}}
 | |
|                     <div class="layui-form-item">
 | |
|                         <label class="layui-form-label">名称</label>
 | |
|                         <div class="layui-input-inline">
 | |
|                             <input type="text" id="Name" name="Name" value="{{.Item.Name}}" lay-verify="required"
 | |
|                                 autocomplete="off" placeholder="请输入名称" class="layui-input" style="width:700px;" />
 | |
|                         </div>
 | |
|                     </div>
 | |
|                     <div class="layui-form-item">
 | |
|                         <label class="layui-form-label">状态</label>
 | |
|                         <div class="layui-input-inline" style="width:600px;">
 | |
|                             {{range .Statuses}}
 | |
|                             {{if.Selected}}
 | |
|                             <input type="radio" name="Status" value="{{.Value}}" title="{{.Name}}" checked>
 | |
|                             {{else}}
 | |
|                             <input type="radio" name="Status" value="{{.Value}}" title="{{.Name}}">
 | |
|                             {{end}}
 | |
|                             {{end}}
 | |
|                         </div>
 | |
|                     </div>
 | |
|                     <div class="layui-form-item">
 | |
|                         <label class="layui-form-label">开始时间</label>
 | |
|                         <div class="layui-input-inline">
 | |
|                             <input type="text" id="StartAt" name="StartAt" value="{{.Item.StartAt}}"
 | |
|                                 lay-verify="required" autocomplete="off" placeholder="请输入名称" class="layui-input" />
 | |
|                         </div>
 | |
|                         <label class="layui-form-label">结束时间</label>
 | |
|                         <div class="layui-input-inline">
 | |
|                             <input type="text" id="EndAt" name="EndAt" value="{{.Item.EndAt}}" lay-verify="required"
 | |
|                                 autocomplete="off" placeholder="请输入名称" class="layui-input" />
 | |
|                         </div>
 | |
|                     </div>
 | |
|                     <div class="layui-form-item">
 | |
|                         <label class="layui-form-label">总金额</label>
 | |
|                         <div class="layui-input-inline">
 | |
|                             <input type="text" id="TotalMoney" name="TotalMoney" value="{{.Item.TotalMoney}}"
 | |
|                                 lay-verify="required" autocomplete="off" placeholder="请输入总金额" class="layui-input" />
 | |
|                         </div>
 | |
|                     </div>
 | |
|                     <div class="layui-form-item">
 | |
|                         <label class="layui-form-label">简介</label>
 | |
|                         <div class="layui-input-inline">
 | |
|                             <textarea id="Description" name="Description" class="layui-textarea"
 | |
|                                 style="width: 600px; height: 60px;">{{.Item.Description}}</textarea>
 | |
|                         </div>
 | |
|                     </div>
 | |
|                     <div class="layui-form-item">
 | |
|                         <label class="layui-form-label">物料</label>
 | |
|                         <div class="layui-input-inline" style="width: auto;">
 | |
|                             {{template "upload_mutil" .Item.ProjectFiles}}
 | |
|                         </div>
 | |
|                     </div>
 | |
|                 </div>
 | |
|             </div>
 | |
| 
 | |
|             <div class="layui-card">
 | |
|                 <div class="layui-card-header">项目团队</div>
 | |
|                 <div class="layui-card-body">
 | |
|                     <div class="layui-form-item">
 | |
|                         <div class="layui-form-label">项目经理</div>
 | |
|                         <div class="layui-input-inline" id="ManagerID" style="width: 400px;"></div>
 | |
|                         <div class="layui-form-label">项目成员</div>
 | |
|                         <div class="layui-input-inline" id="Members" style="width: 400px;"></div>
 | |
|                     </div>
 | |
|                 </div>
 | |
|             </div>
 | |
| 
 | |
|             <div class="layui-card">
 | |
|                 <div class="layui-card-header">申请信息</div>
 | |
|                 <div class="layui-card-body">
 | |
|                     <div class="layui-form-item">
 | |
|                         <div class="layui-form-label">申请人</div>
 | |
|                         <div class="layui-input-inline" id="ApplyUserID" style="width: 400px;"></div>
 | |
|                         <label class="layui-form-label">申请时间</label>
 | |
|                         <div class="layui-input-inline">
 | |
|                             <input type="text" id="ApplyAt" name="ApplyAt" value="{{.Item.ApplyAt}}"
 | |
|                                 lay-verify="required" autocomplete="off" class="layui-input" />
 | |
|                         </div>
 | |
|                     </div>
 | |
|                 </div>
 | |
|             </div>
 | |
| 
 | |
|             <div class="layui-card">
 | |
|                 <div class="layui-card-header">其他</div>
 | |
|                 <div class="layui-card-body">
 | |
|                     {{if .Item.ID}}
 | |
|                     <div class="layui-form-item">
 | |
|                         <div class="layui-form-label">创建</div>
 | |
|                         <div class="layui-form-label" style="width:400px;text-align:left;">
 | |
|                             {{.Item.CreatedName}}
 | |
|                             ({{dateFormat .Item.CreatedAt}})
 | |
|                         </div>
 | |
|                     </div>
 | |
|                     <div class="layui-form-item">
 | |
|                         <div class="layui-form-label">更新</div>
 | |
|                         <div class="layui-form-label" style="width:400px;text-align:left;">
 | |
|                             {{.Item.UpdatedName}}
 | |
|                             ({{dateFormat .Item.UpdatedAt}})
 | |
|                         </div>
 | |
|                     </div>
 | |
|                     {{end}}
 | |
|                 </div>
 | |
|             </div>
 | |
|         </div>
 | |
|     </div>
 | |
| 
 | |
|     <div class="layui-form-item layui-fixbar btn-fixbar-box">
 | |
|         <div class="layui-input-block">
 | |
|             {{ submitBtn .AuthorizeMenus "save"}}
 | |
|             <button type="button" class="pear-btn pear-btn-sm" lay-on="close">
 | |
|                 <i class="layui-icon layui-icon-close"></i>关闭
 | |
|             </button>
 | |
|         </div>
 | |
|     </div>
 | |
| 
 | |
| </form>
 | |
| 
 | |
| {{define "css"}}
 | |
| <style>
 | |
|     .layui-body {
 | |
|         padding: 15px;
 | |
|         left: 0;
 | |
|     }
 | |
| 
 | |
|     .loader::after {
 | |
|         content: '';
 | |
|     }
 | |
| </style>
 | |
| {{end}}
 | |
| 
 | |
| {{define "js"}}
 | |
| <script>
 | |
|     layui.use(['table', 'form', 'jquery', 'iconPicker', 'laydate', 'dtree', 'xmSelect', "util"], function () {
 | |
|         let $ = layui.jquery;
 | |
|         let table = layui.table;
 | |
|         let form = layui.form;
 | |
|         let iconPicker = layui.iconPicker;
 | |
|         let dtree = layui.dtree;
 | |
|         let xmSelect = layui.xmSelect;
 | |
|         let util = layui.util;
 | |
|         let laydate = layui.laydate;
 | |
| 
 | |
|         /**开始时间 */
 | |
|         laydate.render({
 | |
|             elem: '#StartAt',
 | |
|             type: 'date',
 | |
|             value: '{{today}}',
 | |
|         });
 | |
| 
 | |
|         /**截止时间 */
 | |
|         laydate.render({
 | |
|             elem: '#EndAt',
 | |
|             type: 'date',
 | |
|             value: '{{threeMonth}}',
 | |
|         });
 | |
| 
 | |
|         laydate.render({
 | |
|             elem: '#ApplyAt',
 | |
|             type: 'date',
 | |
|             value: '{{today}}',
 | |
|         });
 | |
| 
 | |
|         // 表单提交
 | |
|         form.on('submit(save)', function (data) {
 | |
|             $.ajax({
 | |
|                 url: '/project/save',
 | |
|                 type: 'post',
 | |
|                 dataType: 'json',
 | |
|                 data: data.field,
 | |
|                 success: function (result) {
 | |
|                     if (result.success) {
 | |
|                         layer.msg(result.msg, { icon: 1, time: 1000 }, function () {
 | |
|                             parent.layer.close(parent.layer.getFrameIndex(window.name)); // 关闭当前页
 | |
|                             parent.layui.table.reload("tablelist", {
 | |
|                                 page: { curr: 1 },
 | |
|                             });
 | |
|                         });
 | |
|                     } else {
 | |
|                         parent.layer.msg(result.msg, { icon: 2 })
 | |
|                     }
 | |
|                 }
 | |
|             });
 | |
| 
 | |
|             return false;
 | |
|         });
 | |
| 
 | |
|         // 事件绑定
 | |
|         util.on("lay-on", {
 | |
|             "close": function () {
 | |
|                 window.parent.layer.close(parent.layer.getFrameIndex(window.name));
 | |
|             }
 | |
|         });
 | |
| 
 | |
|         //getCustomer();
 | |
|         getUser();
 | |
| 
 | |
|         // function getCustomer() {
 | |
|         //     $.ajax({
 | |
|         //         url: '/customer/xmselect',
 | |
|         //         type: 'post',
 | |
|         //         dataType: 'json',
 | |
|         //         headers: { 'X-CSRF-Token': $('#csrf_token').val() },
 | |
|         //         success: function (res) {
 | |
|         //             xmSelect.render({
 | |
|         //                 el: '#CustomerID',
 | |
|         //                 // 工具栏
 | |
|         //                 radio: true,
 | |
|         //                 toolbar: {
 | |
|         //                     show: true
 | |
|         //                 },
 | |
|         //                 tips: '请选择客户',
 | |
|         //                 filterable: true,
 | |
|         //                 data: res,
 | |
|         //                 name: 'CustomerID',
 | |
|         //                 initValue: ['{{.Item.CustomerID}}'],
 | |
|         //                 on: function (data) { },
 | |
|         //             });
 | |
|         //         },
 | |
|         //         error: function (err) {
 | |
|         //             // 处理请求错误
 | |
|         //             console.log('请求出错:', err);
 | |
|         //         }
 | |
|         //     });
 | |
|         // }
 | |
| 
 | |
|         function getUser() {
 | |
|             let array = '{{.Item.Members}}';
 | |
|             $.ajax({
 | |
|                 url: '/system/user/xmselect',
 | |
|                 type: 'post',
 | |
|                 dataType: 'json',
 | |
|                 headers: { 'X-CSRF-Token': $('#csrf_token').val() },
 | |
|                 success: function (res) {
 | |
|                     xmSelect.render({
 | |
|                         el: '#ApplyUserID',
 | |
|                         // 工具栏
 | |
|                         radio: true,
 | |
|                         toolbar: {
 | |
|                             show: true
 | |
|                         },
 | |
|                         tips: '请选择申请人',
 | |
|                         filterable: true,
 | |
|                         data: res,
 | |
|                         name: 'ApplyUserID',
 | |
|                         initValue: ['{{.Item.ApplyUserID}}'],
 | |
|                         on: function (data) { },
 | |
|                     });
 | |
| 
 | |
|                     xmSelect.render({
 | |
|                         el: '#ManagerID',
 | |
|                         // 工具栏
 | |
|                         radio: true,
 | |
|                         toolbar: {
 | |
|                             show: true
 | |
|                         },
 | |
|                         tips: '请选择项目经理',
 | |
|                         filterable: true,
 | |
|                         data: res,
 | |
|                         name: 'ManagerID',
 | |
|                         initValue: ['{{.Item.ManagerID}}'],
 | |
|                         on: function (data) { },
 | |
|                     });
 | |
| 
 | |
| 
 | |
|                     xmSelect.render({
 | |
|                         el: '#Members',
 | |
|                         // 工具栏
 | |
|                         toolbar: {
 | |
|                             show: true
 | |
|                         },
 | |
|                         tips: '请选择项目成员',
 | |
|                         filterable: true,
 | |
|                         data: res,
 | |
|                         name: 'Members',
 | |
|                         initValue: array.split(','),
 | |
|                         on: function (data) { },
 | |
|                     });
 | |
|                 },
 | |
|                 error: function (err) {
 | |
|                     // 处理请求错误
 | |
|                     console.log('请求出错:', err);
 | |
|                 }
 | |
|             });
 | |
|         }
 | |
| 
 | |
|         let customerLayer;
 | |
|         $('#selectCustomer').on('click', function () {
 | |
|             customerLayer = layer.open({
 | |
|                 type: 1, // page 层类型
 | |
|                 area: ['70%', '90%'],
 | |
|                 title: '选择数据',
 | |
|                 scrollbar: false,
 | |
|                 shade: 0.2, // 遮罩透明度
 | |
|                 shadeClose: false, // 点击遮罩区域,关闭弹层
 | |
|                 maxmin: false, // 允许全屏最小化
 | |
|                 anim: 0, // 0-6 的动画形式,-1 不开启
 | |
|                 content: '<table id="customer_list" lay-filter="customer_list"></table>',
 | |
|                 success: function (layero, index, that) {
 | |
|                     // layero 弹层的最外层元素的 jQuery 对象
 | |
|                     // index 弹层的索引值
 | |
|                     // that 弹层内部原型链中的 this --- 2.8+
 | |
|                     loadCustomerList();
 | |
|                 }
 | |
|             });
 | |
|         });
 | |
| 
 | |
|         function loadCustomerList() {
 | |
|             table.render({
 | |
|                 elem: '#customer_list',
 | |
|                 url: "/customer/list",
 | |
|                 method: "POST",
 | |
|                 headers: { 'X-CSRF-Token': $('#csrf_token').val() },
 | |
|                 height: 'full',
 | |
|                 page: true,
 | |
|                 cols: [[
 | |
|                     { field: 'name', title: '名称', align: 'left', fixed: 'left', width: 200 },
 | |
|                     { field: 'sid', title: '编号', align: 'left', width: 180 },
 | |
|                     { field: 'category_name', title: '类别', align: 'left', width: 100 },
 | |
|                     { field: 'source_name', title: '来源', align: 'left', width: 100 },
 | |
|                     {
 | |
|                         field: 'status', title: '状态', align: 'center', width: 90, templet: function (row) {
 | |
|                             switch (row.status) {
 | |
|                                 case 0: return '<span style="color:green;">正常</span>';
 | |
|                                 case -1: return '<span style="color:red;">删除</span>';
 | |
|                                 default: return '其它';
 | |
|                             }
 | |
|                             return '';
 | |
|                         }
 | |
|                     },
 | |
|                     { field: 'contact_name', title: '联系人姓名', align: 'left', width: 120 },
 | |
|                     { field: 'contact_phone', title: '联系人手机', align: 'left', width: 120 },
 | |
|                     { field: 'address', title: '地址', align: 'left', width: 200 },
 | |
|                     { field: 'sort', title: '排序', align: 'center', width: 80 },
 | |
|                 ]],
 | |
|                 skin: 'line',
 | |
|                 defaultToolbar: []
 | |
|             });
 | |
|         }
 | |
| 
 | |
|         // 行单击事件( 双击事件为: rowDouble )
 | |
|         table.on('row(customer_list)', function (obj) {
 | |
|             var data = obj.data; // 获取当前行数据
 | |
|             $('#CustomerID').val(data.sid);
 | |
|             $('#CustomerName').val(data.name);
 | |
|             layer.close(customerLayer);
 | |
|         });
 | |
| 
 | |
|         // let sysUserLayer;
 | |
|         // let projectUserList = "project_user_list"
 | |
|         // $('#selectProjectUser').on('click', function () {
 | |
|         //     sysUserLayer = layer.open({
 | |
|         //         type: 1, // page 层类型
 | |
|         //         area: ['70%', '90%'],
 | |
|         //         title: '选择数据',
 | |
|         //         scrollbar: false,
 | |
|         //         shade: 0.2, // 遮罩透明度
 | |
|         //         shadeClose: false, // 点击遮罩区域,关闭弹层
 | |
|         //         maxmin: false, // 允许全屏最小化
 | |
|         //         anim: 0, // 0-6 的动画形式,-1 不开启
 | |
|         //         content: '<table id="' + projectUserList + '" lay-filter="' + projectUserList + '"></table>',
 | |
|         //         success: function (layero, index, that) {
 | |
|         //             // layero 弹层的最外层元素的 jQuery 对象
 | |
|         //             // index 弹层的索引值
 | |
|         //             // that 弹层内部原型链中的 this --- 2.8+
 | |
|         //             loadUserList(projectUserList);
 | |
|         //         }
 | |
|         //     });
 | |
|         // });
 | |
|         // table.on('row(' + projectUserList + ')', function (obj) {
 | |
|         //     var data = obj.data; // 获取当前行数据
 | |
|         //     console.log(data);
 | |
|         //     $('#ManagerID').val(data.id);
 | |
|         //     $('#ManagerName').val(data.username);
 | |
|         //     layer.close(sysUserLayer);
 | |
|         // });
 | |
| 
 | |
|         // let applyUserList = "apply_user_list"
 | |
|         // $('#selectApplyUser').on('click', function () {
 | |
|         //     sysUserLayer = layer.open({
 | |
|         //         type: 1, // page 层类型
 | |
|         //         area: ['70%', '90%'],
 | |
|         //         title: '选择数据',
 | |
|         //         scrollbar: false,
 | |
|         //         shade: 0.2, // 遮罩透明度
 | |
|         //         shadeClose: false, // 点击遮罩区域,关闭弹层
 | |
|         //         maxmin: false, // 允许全屏最小化
 | |
|         //         anim: 0, // 0-6 的动画形式,-1 不开启
 | |
|         //         content: '<table id="' + applyUserList + '" lay-filter="' + applyUserList + '"></table>',
 | |
|         //         success: function (layero, index, that) {
 | |
|         //             // layero 弹层的最外层元素的 jQuery 对象
 | |
|         //             // index 弹层的索引值
 | |
|         //             // that 弹层内部原型链中的 this --- 2.8+
 | |
|         //             loadUserList(applyUserList);
 | |
|         //         }
 | |
|         //     });
 | |
|         // });
 | |
|         // table.on('row(' + applyUserList + ')', function (obj) {
 | |
|         //     var data = obj.data; // 获取当前行数据
 | |
|         //     $('#ApplyUserID').val(data.id);
 | |
|         //     $('#ApplyUserName').val(data.username);
 | |
|         //     layer.close(sysUserLayer);
 | |
|         // });
 | |
| 
 | |
|         // function loadUserList(elem) {
 | |
|         //     table.render({
 | |
|         //         elem: '#' + elem,
 | |
|         //         url: "/system/user/list",
 | |
|         //         method: "POST",
 | |
|         //         headers: { 'X-CSRF-Token': $('#csrf_token').val() },
 | |
|         //         height: 'full',
 | |
|         //         page: true,
 | |
|         //         cols: [[
 | |
|         //             { field: 'email', title: '邮箱', align: 'left', width: 180 },
 | |
|         //             { field: 'username', title: '用户名', align: 'left', width: 100 },
 | |
|         //             {
 | |
|         //                 field: 'avatar', title: '头像', align: 'center', width: 90, templet: function (d) {
 | |
|         //                     if (d.avatar === 0 || d.avatar === undefined || d.avatar === '') { return ''; }
 | |
|         //                     if (d.avatar === '/statics/admin/images/avatar.jpg') {
 | |
|         //                         return '<img src="/statics/admin/images/avatar.jpg" width=30 height=30 />';
 | |
|         //                     }
 | |
|         //                     return '<img src="' + d.avatar + '" width=30 height=30 />';
 | |
|         //                 }
 | |
|         //             },
 | |
|         //             { field: 'department_name', title: '部门', align: 'left', width: 100 },
 | |
|         //             { field: 'role_name', title: '角色', align: 'left', width: 100 },
 | |
|         //             {
 | |
|         //                 field: 'gender', title: '性别', align: 'center', width: 50, templet: function (d) {
 | |
|         //                     if (d.gender == 0) {
 | |
|         //                         return '未知';
 | |
|         //                     } else if (d.gender == 1) {
 | |
|         //                         return '男';
 | |
|         //                     } else if (d.gender == 2) {
 | |
|         //                         return '女';
 | |
|         //                     }
 | |
|         //                 }
 | |
|         //             },
 | |
|         //             {
 | |
|         //                 field: 'status', title: '状态', align: 'center', width: 90, templet: function (row) {
 | |
|         //                     switch (row.status) {
 | |
|         //                         case 0: return '正常';
 | |
|         //                         case -1: return '删除';
 | |
|         //                         default: return '其它';
 | |
|         //                     }
 | |
|         //                     return '';
 | |
|         //                 }
 | |
|         //             },
 | |
|         //         ]],
 | |
|         //         skin: 'line',
 | |
|         //         defaultToolbar: []
 | |
|         //     });
 | |
|         // }
 | |
| 
 | |
|     });
 | |
| </script>
 | |
| {{end}}
 | |
| 
 | |
| {{template "footer" .}} |