工单管理

master
yulingwei 5 years ago
parent 9208f78293
commit b8fda2417a

@ -8394,4 +8394,125 @@ class ExportController extends Controller
addOperationLog(['op_type'=>3,'key'=>getNowDate(),'url'=>U($url,$GetData),'menu'=>$menu]);
}
public function exportResrouces()
{
$map = [];
$map['_string'] = " status <> 2 and type=1 and attachment_url = ''";
if (I('server_id')) {
$map['server_id'] = I('server_id');
}
if (I('game_id')) {
$map['game_id'] = I('game_id');
}
$havMap = "1=1";
if (I('resource_num_start')) {
$start = I('resource_num_start');
$havMap .= " and (total_resource_num >= '{$start}' or apply_num >= '{$start}')";
}
if (I('resource_num_end')) {
$end = I('resource_num_end');
$havMap .= " and (total_resource_num <= '{$end}' or apply_num <= '{$end}')";
}
$xlsName = '资源管理列表';
$xlsData = M('work_order_info', 'tab_')
->field("user_account, game_name, server_name, role_name, sum(resource_num) as total_resource_num, sum(if(status=1, resource_num, 0)) as apply_num, tab_user.phone")
->join('tab_user on tab_user.account = tab_work_order_info.user_account')
->where($map)
->group('user_account, game_name, server_name, role_name')
->having($havMap)
->order("created_time desc")
->select();
$xlsCell = array(
array('game_name','游戏名'),
array('server_name','区服'),
array('user_account','游戏账号'),
array('phone', '手机号'),
array('role_name','角色名'),
array('total_resource_num', '申请数量'),
array('apply_num', '实际发放数量')
);
$show_data_power = (is_administrator()|| session('user_auth')['show_data']);
foreach ($xlsData as &$item) {
if (!$show_data_power) {
$item['phone'] = encryptStr($item['phone']);
}
}
$this->exportAddOperationLog("TestResource/resources","用户-玩家组-资源列表-导出");
$this->exportExcel($xlsName, $xlsCell, $xlsData);
}
public function exportWorkOrder()
{
$map = [];
$map['_string'] = " status <> 2 ";
if (I('order_no')) {
$map['_string'] .= ' and order_no like "{'.I('order_no').'}%"';
}
if (I('user_account')) {
$map['_string'] .= ' and user_account like "%{'.I('user_account').'}%"';
}
if (I('attachment_type', '')) {
if (I('attachment_type') == 1) {
$map['_string'] .= ' and attachment_url <> ""';
} else {
$map['_string'] .= ' and attachment_url = ""';
}
}
if (I('server_id')) {
$map['server_id'] = I('server_id');
}
if (I('handler_id')) {
$map['handler_id'] = I('handler_id');
}
if (I('game_id')) {
$map['game_id'] = I('game_id');
}
if (I('type')) {
$map['type'] = I('type');
}
if (I('score')) {
$map['score'] = I('score');
}
if (I('status')) {
$map['status'] = I('status');
}
if (isset($_GET['created_time_start'])) {
$map['_string'] .= " and created_time >= " . strtotime($_GET['created_time_start']);
}
if (isset($_GET['created_time_end'])) {
$map['_string'] .= " and created_time < " . (strtotime($_GET['created_time_end']) + 86400);
}
$xlsName = '工单管理列表';
$xlsCell = array(
array('order_no','工单号'),
array('game_name','游戏名'),
array('server_name','区服'),
array('type','工单类型'),
array('status','状态'),
array('user_account','游戏账号'),
array('creator','创单人'),
array('created_time', '创单时间'),
array('score', '分数'),
array('attachment_type', '附件')
);
$xlsData = M('work_order_info', 'tab_')->where($map)->order("created_time desc")->select();
foreach ($xlsData as &$item) {
$item['type'] = $item['type'] == 1 ? '资源' : '反馈';
$item['status'] = $item['status'] == 1 ? '完成' : '处理中';
$item['creator'] = get_admin_name($item['creator_id']);
$item['created_time'] = date('Y-m-d h:i:s', $item['created_time']);
$item['attachment_type'] = empty('attachment_url') ? '无' : '有';
}
$this->exportAddOperationLog("WorkOrder/list","用户-玩家组工单管理-导出");
$this->exportExcel($xlsName, $xlsCell, $xlsData);
}
}

@ -11,6 +11,47 @@ use OSS\Core\OssException;
class TestResourceController extends ThinkController
{
public function resources($row = 10, $p = 1)
{
$map = [];
$map['_string'] = " status <> 2 and type=1 and attachment_url = ''";
if (I('server_id')) {
$map['server_id'] = I('server_id');
}
if (I('game_id')) {
$map['game_id'] = I('game_id');
}
$havMap = "1=1";
if (I('resource_num_start')) {
$start = I('resource_num_start');
$havMap .= " and (total_resource_num >= '{$start}' or apply_num >= '{$start}')";
}
if (I('resource_num_end')) {
$end = I('resource_num_end');
$havMap .= " and (total_resource_num <= '{$end}' or apply_num <= '{$end}')";
}
$list = M('work_order_info', 'tab_')
->field("user_account, game_name, server_name, role_name, sum(resource_num) as total_resource_num, sum(if(status=1, resource_num, 0)) as apply_num, tab_user.phone")
->join('tab_user on tab_user.account = tab_work_order_info.user_account')
->where($map)
->page($p, $row)
->group('user_account, game_name, server_name, role_name')
->having($havMap)
->order("created_time desc")
->select();
//echo M('work_order_info', 'tab_')->getLastSql();exit;
$count = M('work_order_info', 'tab_')->where($map)->group('user_account, game_name, server_name, role_name')->count();
$page = set_pagination($count, $row);
if ($page) {
$this->assign('_page', $page);
}
$show_data_power = (is_administrator()|| session('user_auth')['show_data']);
$this->assign('show_data_power', $show_data_power);
$this->assign('list_data', $list);
$this->display('resources');
}
public function test(){
echo 'test1';
}

@ -0,0 +1,328 @@
<?php
namespace Admin\Controller;
use User\Api\UserApi;
/**
* 结算单
* @author ylw
*/
class WorkOrderController extends ThinkController
{
public function list($row = 10, $p = 1)
{
$map = [];
$map['_string'] = " status <> 2 ";
if (I('order_no')) {
$map['_string'] .= ' and order_no like "'.I('order_no').'%"';
}
if (I('user_account')) {
$map['_string'] .= ' and user_account like "%'.I('user_account').'%"';
}
if (I('attachment_type', '')) {
if (I('attachment_type') == 1) {
$map['_string'] .= ' and attachment_url <> ""';
} else {
$map['_string'] .= ' and attachment_url = ""';
}
}
if (I('server_id')) {
$map['server_id'] = I('server_id');
}
if (I('handler_id')) {
$map['handler_id'] = I('handler_id');
}
if (I('game_id')) {
$map['game_id'] = I('game_id');
}
if (I('type')) {
$map['type'] = I('type');
}
if (I('score')) {
$map['score'] = I('score');
}
if (I('status')) {
$map['status'] = I('status');
}
if (isset($_GET['created_time_start'])) {
$map['_string'] .= " and created_time >= " . strtotime($_GET['created_time_start']);
}
if (isset($_GET['created_time_end'])) {
$map['_string'] .= " and created_time < " . (strtotime($_GET['created_time_end']) + 86400);
}
$list = M('work_order_info', 'tab_')->where($map)->page($p, $row)->order("status desc, created_time desc")->select();
$count = M('work_order_info', 'tab_')->where($map)->count();
if ($list) {
foreach ($list as &$item) {
$item['status'] = $this->getOrderStatus($item['status']);
}
}
$page = set_pagination($count, $row);
if ($page) {
$this->assign('_page', $page);
}
$this->assign('admin_users', M('member')->where(['status'=>1])->field('uid, nickname')->select());
$this->assign('list_data', $list);
$this->display('list');
}
public function store()
{
if (IS_POST) {
// 存储
$data['game_id'] = I('game_id');
$data['game_name'] = I('game_name');
$data['server_id'] = I('server_id');
$data['server_name'] = I('server_name');
$data['type'] = I('type');
$data['creator_id'] = is_login();
if (empty($data['game_id']) || empty($data['server_id'])) {
$this->error('请选择游戏及区服');
}
$data['created_time'] = time();
switch (I('type')) {
case 1: // 资源工单
// 如果不是附件形式
$User = new UserApi;
$user_accounts = I('user_accounts');
$passwords = I('user_passwords');
if (count($user_accounts) == 1 && (empty($user_accounts[0]) && empty($passwords[0])) && empty(I('attachment_url'))) {
$this->error('请填写工单内容');
}
M('work_order_info', 'tab_')->startTrans(); //事物
if (!empty($user_accounts[0])) {
for ($i = 0; $i<sizeof($user_accounts); $i++) {
$user = M('user', 'tab_')->where(['account'=>$user_accounts[$i]])->find();
if (empty($user)) {M('work_order_info', 'tab_')->rollback(); $this->error($user_accounts[$i]."账号不存在");}
if ($this->think_ucenter_md5($passwords[$i], UC_AUTH_KEY) != $user['password']) {M('work_order_info', 'tab_')->rollback(); $this->error(sprintf('%s 密码错误', $user_accounts[$i]));}
$info = $data;
$info['user_account'] = $user_accounts[$i];
$info['remark'] = I('remarks')[$i];
$info['role_name'] = I('role_names')[$i];
$info['resource_num'] = I('apply_resources')[$i];
$info['order_no'] = $info['type'] . date('YmdHis'). $i. rand(10, 99) . $info['creator_id'];
$info['handler_id'] = $info['creator_id'];
$ins = M('work_order_info', 'tab_')->add($info);
if (!$ins) {M('work_order_info', 'tab_')->rollback(); $this->error("创建失败");}
}
}
if (!empty(I('attachment_url', ''))) {
// 添加一条附件信息
$attachement_info = $data;
$attachement_info['attachment_url'] = I('attachment_url', '');
$attachement_info['handler_id'] = $attachement_info['creator_id'];
$attachement_info['order_no'] = $attachement_info['type'] . date('YmdHis'). rand(100, 999) . $attachement_info['creator_id'];
$ins = M('work_order_info', 'tab_')->add($attachement_info);
if (!$ins) {M('work_order_info', 'tab_')->rollback(); $this->error("创建失败");}
}
M('work_order_info', 'tab_')->commit();
return $this->success('创建工单成功', U('WorkOrder/list'));
break;
case 2: // 反馈工单
$data['order_no'] = $data['type'] . date('YmdHis'). rand(100, 999) . is_login();
if (empty(I('user_account')) || empty(I('role_name')) || empty(I('feedback'))) {
$this->error('请填写必填的数据');
}
if (empty('handler_id')) {
$this->error('请选择处理人');
}
$data['attachment_url'] = I('attachment_url', '');
$data['user_account'] = I('user_account');
$data['role_name'] = I('role_name');
$data['feedback'] = I('feedback');
$data['handler_id'] = I('handler_id');
$data['remark'] = I('remark', '');
$data['process_log'] = json_encode([['title'=>sprintf('%s于 %s 创建了工单%s,工单状态处理中。', get_admin_name($data['creator_id']), date('Y-m-d H:i:s'), $data['order_no']), 'type'=>1]]);
$ins = M('work_order_info', 'tab_')->add($data);
return $ins ? $this->success('创建工单成功', U('WorkOrder/list')) : $this->error('创建失败');
break;
default:
$this->error('错误的工单类型');
}
} else {
$this->assign('admin_users', M('member')->where(['status'=>1])->field('uid, nickname')->select());
$this->display('store');
}
}
public function modify($id=0)
{
$info = M('work_order_info', 'tab_')->where(['id'=>$id])->find();
if (empty($info)) $this->error('未找到该资源');
if (IS_POST) {
$data['game_id'] = I('game_id');
$data['game_name'] = I('game_name');
$data['server_id'] = I('server_id');
$data['server_name'] = I('server_name');
$data['attachment_url'] = I('attachment_url', '');
switch($info['type']) {
case 1:
$data = array_merge(I('resource'), $data);
if (empty($info['attachment_url'])) {
$user = M('user', 'tab_')->where(['account'=>$data['user_account']])->find();
if (empty($user)) $this->error("账号不存在");
if ($this->think_ucenter_md5($data['user_password'], UC_AUTH_KEY) != $user['password']) $this->error(sprintf('%s 密码错误', $user_accounts[$i]));
unset($data['user_password']);
}
$upt = M('work_order_info', 'tab_')->where(['id'=>$id])->save($data);
return $upt ? $this->success('更新成功', U('WorkOrder/list')) : $this->error('更新失败');
break;
case 2:
$data = array_merge(I('feedback'), $data);
$user = M('user', 'tab_')->where(['account'=>$data['user_account']])->find();
if (empty($user)) $this->error("账号不存在");
$log = $this->modifyProcessLog($info, $data);
if ($log) {
$process_log = json_decode($info['process_log'], true) ?: [];
$log = ['title'=>sprintf("%s于%s 修改了工单%s内容", get_admin_name(is_login()), date('Y-m-d H:i:s'), $info['order_no']), 'detail'=>$log, 'type'=>2];
$data['process_log'] = json_encode(array_merge($process_log, [$log]));
}
$upt = M('work_order_info', 'tab_')->where(['id'=>$id])->save($data);
return $upt ? $this->success('更新成功', U('WorkOrder/list')) : $this->error('更新失败');
break;
default:
$this->error('错误的工单类型');
}
} else {
$info['process_log'] = json_decode($info['process_log'], true);
$this->assign('data', $info);
$this->assign('admin_users', M('member')->where(['status'=>1])->field('uid, nickname')->select());
$this->display('modify');
}
}
private function modifyProcessLog($oldData, $newData)
{
$key = ['game_name'=>'游戏名称', 'server_name'=>'区服名称', 'role_name'=>'角色名称', 'user_account'=>'玩家账号', 'feedback'=>'反馈原因', 'handler_id'=>'处理人', 'remark'=>'备注', 'status'=>'状态', 'attachment_url'=>'附件'];
$log = [];
foreach ($newData as $k => $v) {
if (array_key_exists($k, $oldData) && array_key_exists($k, $key) && $oldData[$k] != $newData[$k]) {
if ($k == 'handler_id') {
$log[] = ['key_name'=>$key[$k], 'key'=>$k, 'old'=>get_admin_name($oldData[$k]), 'new'=>get_admin_name($newData[$k])];
} else if ($k == 'status') {
$log[] = ['key_name'=>$key[$k], 'key'=>$k, 'old'=>$this->getOrderStatus($oldData[$k]), 'new'=>$this->getOrderStatus($newData[$k])];
} else {
$log[] = ['key_name'=>$key[$k], 'key'=>$k, 'old'=>$oldData[$k], 'new'=>$newData[$k]];
}
}
}
return $log;
}
private function getOrderStatus($status)
{
switch($status) {
case 1:
return '完成';
case 2:
return '失败';
case 3:
return '处理中';
default:
return '未知';
}
}
/**
* 系统非常规MD5加密方法
* @param string $str 要加密的字符串
* @return string
*/
public function think_ucenter_md5($str, $key = 'ThinkUCenter'){
return '' === $str ? '' : md5(sha1($str) . $key);
}
public function resourceApply($id=0)
{
$info = M('work_order_info', 'tab_')->where(['id'=>$id])->find();
if (empty($info)) $this->error('未找到该资源');
if ($info['type'] != 1) $this->error('错误的订单类型');
if (IS_POST) {
if (!empty($info['attachment_url'])) {
if (!I('attachment_url')) $this->error('请上传附件');
} else {
if (!I('resource_num')) $this->error('请填写申请资源数量');
}
$data['handler_id'] = $data['creator_id'] = is_login();
$data['created_time'] = time();
$data['type'] = $info['type'];
$data['server_id'] = $info['server_id'];
$data['server_name'] = $info['server_name'];
$data['game_id'] = $info['game_id'];
$data['game_name'] = $info['game_name'];
$data['role_name'] = $info['role_name'];
$data['user_account'] = $info['user_account'];
$data['order_no'] = $info['type'] . date('YmdHis', $data['created_time']). rand(100, 999) . $data['creator_id'];
$data['resource_num'] = I('resource_num', 0);
$data['remark'] = I('remark', '');
$data['attachment_url'] = I('attachment_url', '');
$ins = M('work_order_info', 'tab_')->add($data);
return $ins ? $this->success('申请成功') : $this->error('申请失败');
} else {
$this->assign('data', $info);
$this->display('resourceApply');
}
}
// 反馈进度存储
public function feedbackProcessLogStore($id=0)
{
$info = M('work_order_info', 'tab_')->where(['id'=>$id])->find();
if (empty($info)) $this->error('未找到该资源');
$info['process_log'] = json_decode($info['process_log'], true);
if ($info['type'] != 2) $this->error('错误的订单类型');
if (IS_POST) {
$log = [['type'=>3, 'title'=>sprintf('%s于 %s 更新了工单%s进度工单状态%s', get_admin_name(is_login()), date('Y-m-d H:i:s'), $info['order_no'], $this->getOrderStatus($info['status'])), 'detail'=>I('process_log')]];
$upt = M('work_order_info', 'tab_')->where(['id'=>$id])->save(['process_log'=>json_encode(array_merge($info['process_log'], $log))]);
return $upt ? $this->success('更新进度成功', U('WorkOrder/list')) : $this->error('更新进度失败');
} else {
$this->assign('data', $info);
$this->display('feedbackProcessLogStore');
}
}
// 评价
public function evaluate($id=0)
{
$info = M('work_order_info', 'tab_')->where(['id'=>$id])->find();
if (empty($info)) $this->error('未找到该资源');
if (IS_POST) {
if (empty(I('evaluate_content'))) $this->error('请填写评价内容');
$data['evaluate'] = I('evaluate', 5);
if($info['type'] == 2) {
$info['process_log'] = json_decode($info['process_log'], true);
$log = [['type'=>3, 'title'=>sprintf('%s于 %s 评价了工单%s为%s分工单状态%s', get_admin_name(is_login()), date('Y-m-d H:i:s'), $info['order_no'], $data['evaluate'], $this->getOrderStatus($info['status'])), 'detail'=>I('evaluate_content')]];
$data['process_log'] = json_encode(array_merge($info['process_log'], $log));
$upt = M('work_order_info', 'tab_')->where(['id'=>$id])->save($data);
return $upt ? $this->success('评价成功', U('WorkOrder/list')) : $this->error('评价失败');
}
} else {
$this->assign('data', $info);
$this->display('feedbackEvaluate');
}
}
// 删除
public function delete($ids)
{
$delete = M('work_order_info', 'tab_')->where(['id'=>['in', $ids]])->save(['status'=>2]);
return $delete ? $this->success('删除成功') : $this->error('删除失败');
}
public function finish($id)
{
$info = M('work_order_info', 'tab_')->where(['id'=>$id])->find();
if (empty($info)) $this->error('未找到该资源');
$info['process_log'] = json_decode($info['process_log'], true);
$log = [['type'=>1, 'title'=>sprintf('%s于 %s 完成了工单%s工单状态完成', get_admin_name(is_login()), date('Y-m-d H:i:s'), $info['order_no'])]];
$data['process_log'] = json_encode(array_merge($info['process_log'], $log));
$data['status'] = 1;
$delete = M('work_order_info', 'tab_')->where(['id'=>$id])->save($data);
return $delete ? $this->success('成功完成工单') : $this->error('更新失败');
}
}

@ -0,0 +1,261 @@
<extend name="Public/base"/>
<block name="body">
<link rel="stylesheet" href="__CSS__/select2.min.css" type="text/css"/>
<script type="text/javascript" src="__JS__/bootstrap.min.js"></script>
<script type="text/javascript" src="__JS__/select2.min.js"></script>
<style>
.select2-container--default .select2-selection--single {
color: #000;
resize: none;
border-width: 1px;
border-style: solid;
border-color: #a7b5bc #ced9df #ced9df #a7b5bc;
box-shadow: 0px 3px 3px #F7F8F9 inset;height:35px;
height:28px;border-radius:3px;font-size:12px;
}
.select2-container--default .select2-selection--single .select2-selection__rendered {
line-height:35px;
line-height:28px;
}
.select2-container--default .select2-selection--single .select2-selection__arrow {
height:26px;
}
.select2-container--default .select2-search--dropdown .select2-search__field {
height:26px;line-height:26px;font-size:12px;
}
.select2-results__option[aria-selected] {font-size:12px;}
.layui-layer-dialog .layui-layer-content{color:red}
.butnbox {padding:10px 0 10px;}
.butnbox .butnlist {overflow:hidden;clear:both;}
.butnbox .butnlist .butn,.butnbox .butnlist .butn:hover {text-decoration:none;border:none;}
.butnbox .butnlist .butn {display:inline-block;width:120px;height:28px;line-height:28px;text-align:center;color:#FFF;background:#3C95C8;border-radius:3px;}
.butnbox .butnlist .butn.last {background:#009900;}
.butnbox .butnlist .butn~.butn {margin-left:20px;}
.data_list table tbody tr a.disabled,.data_list table tbody tr a.disabled:hover {color:#999;cursor:default;}
.layui-layer-title {
text-align: center;
height: 80px;
line-height: 80px;
font-weight: 600;
font-size: 18px;
}
</style>
<!-- 标题栏 -->
<div class="cf main-place top_nav_list navtab_list">
<h3 class="page_title">资源管理</h3>
</div>
<div class="cf top_nav_list">
<!-- <div class="fl button_list">
<a class="confirm ajax-post" id="dtnn" target-form="ids" url="{:U('Member/delprovide')}"><span class="button_icon button_icon2 "></span>批量删除</a>
</div> -->
<!-- 高级搜索 -->
<div class="jssearch fl cf search_list">
<div class="input-list search-title-box">
<label>搜索:</label>
<input id="gameid" name="game_id" type="text" value="{:I('game_id')}" style="display:none" >
<input id="serverid" name="server_id" type="text" value="{:I('server_id')}" style="display:none">
</div>
<div class="input-list input-list-game search_label_rehab">
<select id="game_id" name="game_name" class="select_gallery" style="width:120px;">
<option value="">游戏名称</option>
<volist name=":get_game_list()" id="vo">
<option game-id="{$vo.id}" value="{$vo.game_name}" <?php if (I('game_id') == $vo['id']):?>selected<?php endif;?> >{$vo.game_name}</option>
</volist>
</select>
</div>
<div class="input-list input-list-game search_label_rehab">
<select id="server_id" name="server_name" class="select_gallery" style="width:120px;">
<option value="">区服名称</option>
<if condition="$data['server_name'] neq ''"><option value="{$data['server_name']}">{$data['server_name']}</option></if>
</select>
</div>
<div class="input-list">
<input type="text" class="" name='resource_num_start' value="{:I('resource_num_start')}"
placeholder="资源查询开始值"/>
-
<input type="text" value="{:I('resource_num_end')}" name='resource_num_end' placeholder="资源查询开始值"/>
</div>
<div class="input-list">
<a class="sch-btn" href="javascript:;" id="search"
url="{:U('TestResource/resources','model='.$model['name'],false)}">
搜索
</a>
</div>
</div>
</div>
<!-- 数据列表 -->
<div class="data_list">
<div class="">
<table>
<!-- 表头 -->
<thead>
<tr>
<th>游戏名</th>
<th>区服</th>
<th>测试账号</th>
<th>手机号</th>
<th>角色名</th>
<th>申请数</th>
<th>实发数</th>
</tr>
</thead>
<!-- 列表 -->
<tbody>
<empty name="list_data">
<td colspan="99" class="text-center">aOh! 暂时还没有内容!</td>
<else/>
<volist name="list_data" id="data">
<tr>
<td>{$data.game_name}</td>
<td>{$data.server_name}</td>
<td>{$data.user_account}</td>
<if condition="$show_data_power eq true ">
<td>{$data['phone']}</td>
<else />
<td>{$data['phone']|encryptStr}</td>
</if>
<td>{$data.role_name}</td>
<td>{$data.total_resource_num}</td>
<td>{$data.apply_num}</td>
</tr>
</volist>
</empty>
</tbody>
</table>
</div>
</div>
<div class="page">
<if condition="$is_admin eq true ">
<a class="sch-btn" href="{:U('Export/exportResrouces',I('get.'))}">导出</a>
</if>
{$_page|default=''}
</div>
<div class="common_settings">
<span class="plus_icon"><span><img src="__IMG__/zwmimages/icon_jia.png"></span></span>
<form class="addShortcutIcon">
<input type="hidden" name="title" value="{$m_title}">
<input type="hidden" name="url" value="settlement/sheetList">
</form>
<a class="ajax-post add-butn <notempty name='commonset'>addSIsetted</notempty>" href="javascript:;" target-form="addShortcutIcon" url="{:U('Think/addShortcutIcon')}"><img src="__IMG__/zwmimages/icon_jia.png"><span><notempty name='commonset'>已添加<else />添加至常用设置</notempty></span></a>
</div>
</block>
<block name="script">
<script src="__STATIC__/layer/layer.js"></script>
<script src="__STATIC__/layer/extend/layer.ext.js"></script>
<link href="__STATIC__/datetimepicker/css/datetimepicker.css" rel="stylesheet" type="text/css">
<php>if(C('COLOR_STYLE')=='blue_color') echo '<link href="__STATIC__/datetimepicker/css/datetimepicker_blue.css" rel="stylesheet" type="text/css">';</php>
<script src="__STATIC__/layer/layer.js" type="text/javascript"></script>
<script type="text/javascript" src="__STATIC__/layer/extend/layer.ext.js" ></script>
<link href="__STATIC__/datetimepicker/css/dropdown.css" rel="stylesheet" type="text/css">
<script type="text/javascript" src="__STATIC__/datetimepicker/js/bootstrap-datetimepicker.min.js"></script>
<script type="text/javascript" src="__STATIC__/datetimepicker/js/locales/bootstrap-datetimepicker.zh-CN.js" charset="UTF-8"></script>
<link rel="stylesheet" href="__STATIC__/flatpickr/flatpickr.min.css">
<script src="__STATIC__/flatpickr/flatpickr.min.js"></script>
<script src="__STATIC__/flatpickr/l10n/zh.js"></script>
<style>
.layui-layer-demo .layui-layer-title {background:#F0F5F7;font-weight:bold;}
.layui-layer-demo .layui-layer-content {}
.layui-layer-demo .layui-layer-content table{width:100%;border:0;border-spacing:0;padding:0;}
.layui-layer-demo .layui-layer-content td {height:42px;padding-left:20px;}
.layui-layer-demo .layui-layer-content tr:hover {background:#F0F5F7;}
.layui-layer-demo .layui-layer-content tr~tr {border-top:1px solid #ccc;}
.layui-layer-demo .layui-layer-content td~td {border-left:1px solid #ccc;}
.layui-layer-demo .layui-layer-content tr:last-child td {}
</style>
<script type="text/javascript">
//导航高亮
highlight_subnav('{:U('TestResource/resources')}');
$(function () {
$(".select_gallery").select2();
//搜索功能
$("#search").click(function () {
var sdate = Date.parse($('#time-start').val()) / 1000;
var edate = Date.parse($('#time-end').val()) / 1000;
if (sdate > edate) {
layer.msg('开始时间必须小于等于结束时间');
return false;
}
if ((edate - sdate) > 2592000) {
layer.msg('时间间隔不能超过31天请重新选择日期');
return false;
}
var url = $(this).attr('url');
var query = $('.jssearch').find('input').serialize();
query += "&" + $('.jssearch').find('select').serialize();
query = query.replace(/(&|^)(\w*?\d*?\-*?_*?)*?=?((?=&)|(?=$))/g, '');
query = query.replace(/^&/g, '');
if (url.indexOf('?') > 0) {
url += '&' + query;
} else {
url += '?' + query;
}
window.location.href = url;
});
//回车自动提交
$('.jssearch').find('input').keyup(function (event) {
if (event.keyCode === 13) {
$("#search").click();
}
});
$('#create-time-start').datetimepicker({
format: 'yyyy-mm-dd',
language: "zh-CN",
minView: 2,
autoclose: true
});
$('#datetimepicker').datetimepicker({
format: 'yyyy-mm-dd',
language: "zh-CN",
minView: 2,
autoclose: true,
pickerPosition: 'bottom-left'
})
$("#server_id").change(function () {
var g_server_id = $("#server_id option:selected").attr('server-id');
$("#serverid").attr('value',g_server_id);
});
var server_id = "{:I('server_id')}";
$("#game_id").change(function(){
var addData = '';
$.ajax({
url:"{:U('Ajax/getServer')}",
type:"post",
data:{game_id:$("#game_id option:selected").attr('game-id')},
dataType:'json',
success:function(data){
str = "<option value=''>请选择区服</option>";
for (var i in data){
if (data[i].id == server_id) {
str += "<option value='"+data[i].server_name+"' server-id='"+data[i].id+"' selected >"+data[i].server_name+"</option>"
} else {
str += "<option value='"+data[i].server_name+"' server-id='"+data[i].id+"'>"+data[i].server_name+"</option>"
}
}
var g_game_id = $("#game_id option:selected").attr('game-id');
$("#gameid").val(g_game_id);
$("#server_id").empty();
$("#server_id").append(str);
$("#server_id").select2();
}
})
});
$("#game_id").change();
})
</script>
</block>

@ -0,0 +1,147 @@
<extend name="Public/base" />
<block name="body">
<link rel="stylesheet" type="text/css" href="__CSS__/admin_table.css" media="all">
<script type="text/javascript" src="__STATIC__/layer/layer.js"></script>
<script type="text/javascript" src="__STATIC__/uploadify/jquery.uploadify.min.js"></script>
<!-- <link rel="stylesheet" type="text/css" href="__CSS__/admin_table.css" media="all"> -->
<script type="text/javascript" src="__STATIC__/uploadify/jquery.uploadify.min.js"></script>
<script type="text/javascript" src="__STATIC__/provincecityarea/area1.js"></script>
<script type="text/javascript" src="__STATIC__/provincecityarea/AreaData_min.js"></script>
<script type="text/javascript" src="__STATIC__/provincecityarea/jquery-1.7.min.js"></script>
<script type="text/javascript" src="__JS__/jquery.mousewheel.js"></script>
<style>
.tabcon1711 td {
text-decoration: none;
text-align: center!important;
padding-left: 55px;
padding-right: 55px;
width: 0;
}
.tabcon1711 td:first-child {
padding-left: 55px;
margin-right: 55px;
width: 0;
}
.tabcon1711 input {
width: 100%;
}
</style>
<style>
.data_list table td {
line-height:0px;
}
.bnt_add,.bnt_remove,.bnt_save{
height: 30px;
width: 20px;
font-size: 20px;
line-height: 10px;
color: #3399ff;
background: none;
border: none;
margin-left: 20px;
cursor: pointer;
}
.bnt_remove{
color: #F70909;
}
.bnt_save{
color: #4DB361;
}
</style>
<div class="cf main-place top_nav_list navtab_list">
<h3 class="page_title">评价工单</h3>
</div>
<!-- 标签页导航 -->
<div class="data_list">
<div style="display: flex;">
<form method="post" action="{:U('evaluate')}" enctype="multipart/form-data" id="form1" action="javascript:;" class="form-horizontal" style="width: 600px;">
<ul class="form_info" style="margin-top: 10px;" id='feedback-form' >
<li>
<label>玩家账号</label>
<label>{$data.user_account}</label>
</li>
<li>
<label>角色名称</label>
<label>{$data.role_name}</label>
</li>
<li>
<label>反馈原因</label>
<label>{$data.feedback}</label>
</li>
<li>
<label>创单人员</label>
<label>{:get_admin_name($data['creator_id'])}</label>
</li>
<li>
<label>处理人</label>
<label>{:get_admin_name($data['handler_id'])}</label>
</li>
<li>
<label>备注</label>
<label>{$data.remark}</label>
</li>
<li <?php if (empty($data['attachment_url'])):?>hidden<?php endif;?>>
<label>附件</label>
<label><a href="{$data.attachment_url}" target="_blank">下载</a></label>
</li>
<input type="hidden" name="id" value="{$data.id}">
<li>
<label>分数</label>
<select id="evaluate" name="evaluate" class="select_gallery">
<option value="1" >1</option>
<option value="2" >2</option>
<option value="3" >3</option>
<option value="4" >4</option>
<option value="5" selected >5</option>
</select>
</li>
<li>
<label>评价</label>
<textarea name="evaluate_content" class="" placeholder="" ></textarea>
</li>
</ul>
<div class="form-item cf" style="margin-top: 10px;">
<button class="submit_btn ajax-post " id="submit" type="submit" target-form="form-horizontal" style="margin-left:10px;">
保存
</button>
</div>
</form>
</div>
</div>
<div class="common_settings">
<span class="plus_icon"><span><img src="__IMG__/zwmimages/icon_jia.png"></span></span>
<form class="addShortcutIcon">
<input type="hidden" name="title" value="{$m_title}">
<input type="hidden" name="url" value="Promote/lists/type/1">
</form>
<a class="ajax-post add-butn <notempty name='commonset'>addSIsetted</notempty>" href="javascript:;" target-form="addShortcutIcon" url="{:U('Think/addShortcutIcon')}"><img src="__IMG__/zwmimages/icon_jia.png"><span><notempty name='commonset'>已添加<else />添加至常用设置</notempty></span></a>
</div>
</block>
<block name="script">
<script type="text/javascript" src="__STATIC__/datetimepicker/js/bootstrap-datetimepicker.min.js"></script>
<script type="text/javascript">
//导航高亮
highlight_subnav('{:U('WorkOrder/list')}');
Think.setValue("game_type_id", {$data.game_type_id|default = 0});
Think.setValue("category", {$data.category|default = 0});
Think.setValue("ba_id", {$data.ba_id|default = 0});
$('#submit').click(function(){
$('#form').submit();
});
</script>
</block>

@ -0,0 +1,149 @@
<extend name="Public/base" />
<block name="body">
<link rel="stylesheet" type="text/css" href="__CSS__/admin_table.css" media="all">
<script type="text/javascript" src="__STATIC__/layer/layer.js"></script>
<script type="text/javascript" src="__STATIC__/uploadify/jquery.uploadify.min.js"></script>
<!-- <link rel="stylesheet" type="text/css" href="__CSS__/admin_table.css" media="all"> -->
<script type="text/javascript" src="__STATIC__/uploadify/jquery.uploadify.min.js"></script>
<script type="text/javascript" src="__STATIC__/provincecityarea/area1.js"></script>
<script type="text/javascript" src="__STATIC__/provincecityarea/AreaData_min.js"></script>
<script type="text/javascript" src="__STATIC__/provincecityarea/jquery-1.7.min.js"></script>
<script type="text/javascript" src="__JS__/jquery.mousewheel.js"></script>
<style>
.tabcon1711 td {
text-decoration: none;
text-align: center!important;
padding-left: 55px;
padding-right: 55px;
width: 0;
}
.tabcon1711 td:first-child {
padding-left: 55px;
margin-right: 55px;
width: 0;
}
.tabcon1711 input {
width: 100%;
}
</style>
<style>
.data_list table td {
line-height:0px;
}
.bnt_add,.bnt_remove,.bnt_save{
height: 30px;
width: 20px;
font-size: 20px;
line-height: 10px;
color: #3399ff;
background: none;
border: none;
margin-left: 20px;
cursor: pointer;
}
.bnt_remove{
color: #F70909;
}
.bnt_save{
color: #4DB361;
}
</style>
<div class="cf main-place top_nav_list navtab_list">
<h3 class="page_title">更新反馈进度</h3>
</div>
<!-- 标签页导航 -->
<div class="data_list">
<div style="display: flex;">
<form method="post" action="{:U('feedbackProcessLogStore')}" enctype="multipart/form-data" id="form1" action="javascript:;" class="form-horizontal" style="width: 600px;">
<ul class="form_info" style="margin-top: 10px;" id='feedback-form' >
<li>
<label>玩家账号</label>
<label>{$data.user_account}</label>
</li>
<li>
<label>角色名称</label>
<label>{$data.role_name}</label>
</li>
<li>
<label>反馈原因</label>
<label>{$data.feedback}</label>
</li>
<li>
<label>创单人员</label>
<label>{:get_admin_name($data['creator_id'])}</label>
</li>
<li>
<label>处理人</label>
<label>{:get_admin_name($data['handler_id'])}</label>
</li>
<li>
<label>备注</label>
<label>{$data.remark}</label>
</li>
<input type="hidden" name="id" value="{$data.id}">
<li>
<label>更新进度</label>
<textarea name="process_log" class="" placeholder="" ></textarea>
</li>
</ul>
<div class="form-item cf" style="margin-top: 10px;">
<button class="submit_btn ajax-post " id="submit" type="submit" target-form="form-horizontal" style="margin-left:10px;">
保存
</button>
</div>
</form>
<span style="width: 0.5px;background-color: gray; margin-left: 50px;margin-right: 50px;" <?php if (empty($data['process_log'])):?>hidden<?php endif;?>></span>
<div <?php if (empty($data['process_log'])):?>hidden<?php endif;?></div>
<div style="font-size:large;">工单进度</div>
<div style="width: 600px;border: 0.5px solid #000;height: 100%;padding-top: 20px;padding-right: 50px;padding-left: 50px;margin-bottom: 50px;">
<?php foreach($data['process_log'] as $index => $log):?>
<p style="font-weight: bold;font-size: medium;margin-top: 10px;">{$index+1}. {$log['title']}</p>
<?php if ($log['type'] == 2):?>
<?php foreach($log['detail'] as $detail):?>
<p style="margin-left: 20px;">--<?php echo $detail['key_name'] . " 旧值:".$detail['old']." 新值:".$detail['new'] ?></p>
<?php endforeach;?>
<?php elseif($log['type'] == 3):?>
<p style="margin-left: 20px;"><label>内容:</label><span style="color: gray;">{$log['detail']}</span></p>
<?php endif;?>
<?php endforeach;?>
</div>
</div>
</div>
</div>
<div class="common_settings">
<span class="plus_icon"><span><img src="__IMG__/zwmimages/icon_jia.png"></span></span>
<form class="addShortcutIcon">
<input type="hidden" name="title" value="{$m_title}">
<input type="hidden" name="url" value="Promote/lists/type/1">
</form>
<a class="ajax-post add-butn <notempty name='commonset'>addSIsetted</notempty>" href="javascript:;" target-form="addShortcutIcon" url="{:U('Think/addShortcutIcon')}"><img src="__IMG__/zwmimages/icon_jia.png"><span><notempty name='commonset'>已添加<else />添加至常用设置</notempty></span></a>
</div>
</block>
<block name="script">
<script type="text/javascript" src="__STATIC__/datetimepicker/js/bootstrap-datetimepicker.min.js"></script>
<script type="text/javascript">
//导航高亮
highlight_subnav('{:U('WorkOrder/list')}');
Think.setValue("game_type_id", {$data.game_type_id|default = 0});
Think.setValue("category", {$data.category|default = 0});
Think.setValue("ba_id", {$data.ba_id|default = 0});
$('#submit').click(function(){
$('#form').submit();
});
</script>
</block>

@ -0,0 +1,318 @@
<extend name="Public/base"/>
<block name="body">
<link rel="stylesheet" href="__CSS__/select2.min.css" type="text/css"/>
<script type="text/javascript" src="__JS__/bootstrap.min.js"></script>
<script type="text/javascript" src="__JS__/select2.min.js"></script>
<style>
.select2-container--default .select2-selection--single {
color: #000;
resize: none;
border-width: 1px;
border-style: solid;
border-color: #a7b5bc #ced9df #ced9df #a7b5bc;
box-shadow: 0px 3px 3px #F7F8F9 inset;height:35px;
height:28px;border-radius:3px;font-size:12px;
}
.select2-container--default .select2-selection--single .select2-selection__rendered {
line-height:35px;
line-height:28px;
}
.select2-container--default .select2-selection--single .select2-selection__arrow {
height:26px;
}
.select2-container--default .select2-search--dropdown .select2-search__field {
height:26px;line-height:26px;font-size:12px;
}
.select2-results__option[aria-selected] {font-size:12px;}
.layui-layer-dialog .layui-layer-content{color:red}
.butnbox {padding:10px 0 10px;}
.butnbox .butnlist {overflow:hidden;clear:both;}
.butnbox .butnlist .butn,.butnbox .butnlist .butn:hover {text-decoration:none;border:none;}
.butnbox .butnlist .butn {display:inline-block;width:120px;height:28px;line-height:28px;text-align:center;color:#FFF;background:#3C95C8;border-radius:3px;}
.butnbox .butnlist .butn.last {background:#009900;}
.butnbox .butnlist .butn~.butn {margin-left:20px;}
.data_list table tbody tr a.disabled,.data_list table tbody tr a.disabled:hover {color:#999;cursor:default;}
.layui-layer-title {
text-align: center;
height: 80px;
line-height: 80px;
font-weight: 600;
font-size: 18px;
}
</style>
<!-- 标题栏 -->
<div class="cf main-place top_nav_list navtab_list">
<h3 class="page_title">工单管理列表</h3>
</div>
<div class="cf top_nav_list">
<!-- 高级搜索 -->
<div class="jssearch fl cf search_list">
<div class="input-list search-title-box">
<label>搜索:</label>
<input id="serverid" name="server_id" type="text" value="{:I('server_id')}" style="display:none">
</div>
<div class="input-list input-list-game search_label_rehab">
<input type="text" name="order_no" value="{$_GET['order_no']}" placeholder="工单号">
</div>
<div class="input-list input-list-game search_label_rehab">
<select id="game_id" name="game_id" class="select_gallery" style="width:120px;">
<option value="">游戏名称</option>
<volist name=":get_game_list()" id="vo">
<option game-id="{$vo.id}" value="{$vo.id}" <?php if (I('game_id') == $vo['id']):?>selected<?php endif;?> >{$vo.game_name}</option>
</volist>
</select>
</div>
<div class="input-list input-list-game search_label_rehab">
<select id="server_id" name="server_name" class="select_gallery" style="width:120px;">
<option value="">区服名称</option>
<if condition="$data['server_name'] neq ''"><option value="{$data['server_name']}">{$data['server_name']}</option></if>
</select>
</div>
<div class="input-list input-list-game search_label_rehab">
<input type="text" name="user_account" value="{$_GET['user_account']}" placeholder="玩家账号">
</div>
<div class="input-list input-list-game search_label_rehab">
<select id="status" name="status" class="select_gallery">
<option value="">状态</option>
<option value="1" <?php echo I('status') == 1 ? "selected" : "" ?> >完成</option>
<option value="3" <?php echo I('status') == 3 ? "selected" : "" ?> >处理中</option>
</select>
</div>
<div class="input-list input-list-game search_label_rehab">
<select id="attachment_type" name="attachment_type" class="select_gallery">
<option value="">附件</option>
<option value="1" <?php echo I('attachment_type') == 1 ? "selected" : "" ?> >有</option>
<option value="2" <?php echo I('attachment_type') == 2 ? "selected" : "" ?> >无</option>
</select>
</div>
<div class="input-list input-list-game search_label_rehab">
<select id="handler_id" name="handler_id" class="select_gallery">
<option value="">创单人员选择</option>
<?php foreach ($admin_users as $user):?>
<option value="{$user['uid']}" <?php if ($user['uid'] == I('handler_id')):?>selected<?php endif;?> >{$user.nickname}</option>
<?php endforeach;?>
</select>
</div>
<div class="input-list">
<input type="text" readonly id="create-time-start" name="created_time_start" class="" value="{:I('created_time_start')}"
placeholder="申请开始时间"/>
-
<div class="input-append date" id="datetimepicker" style="display:inline-block">
<input type="text" readonly id="create-time-end" name="created_time_end" class="" value="{:I('created_time_end')}"
placeholder="申请结束时间"/>
<span class="add-on"><i class="icon-th"></i></span>
</div>
</div>
<div class="input-list input-list-game search_label_rehab">
<select id="score" name="score" class="select_gallery">
<option value="">评分选择</option>
<option value="1" <?php if(I('score') == 1):?>selected<?php endif;?> >1</option>
<option value="2" <?php if(I('score') == 2):?>selected<?php endif;?> >2</option>
<option value="3" <?php if(I('score') == 3):?>selected<?php endif;?> >3</option>
<option value="4" <?php if(I('score') == 4):?>selected<?php endif;?> >4</option>
<option value="5" <?php if(I('score') == 5):?>selected<?php endif;?> >5</option>
</select>
</div>
<div class="input-list">
<a class="sch-btn" href="javascript:;" id="search"
url="{:U('workOrder/list','model='.$model['name'],false)}">
搜索
</a>
</div>
</div>
<div class="fl button_list" style="margin-bottom: 10px;">
<div class="tools">
<a class="" href="{:U('WorkOrder/store')}"><span class="button_icon button_icon1"></span>新增工单</a>
<a class="confirm ajax-post" id="dtnn" target-form="ids" url="{:U('WorkOrder/delete')}"><span class="button_icon button_icon2 "></span>批量删除</a>
</div>
</div>
</div>
<!-- 数据列表 -->
<div class="data_list">
<div class="">
<table>
<!-- 表头 -->
<thead>
<tr>
<th class="">
<input class="check-all" type="checkbox">
</th>
<th>工单号</th>
<th>游戏名</th>
<th>区服</th>
<th>工单类型</th>
<th>状态</th>
<th>游戏账号</th>
<th>创单人员</th>
<th>创建时间</th>
<th>评价分数</th>
<th>附件</th>
<th>操作</th>
</tr>
</thead>
<!-- 列表 -->
<tbody>
<empty name="list_data">
<td colspan="99" class="text-center">aOh! 暂时还没有内容!</td>
<else/>
<volist name="list_data" id="data">
<tr>
<td><input class="ids" type="checkbox" value="{$data['id']}" name="ids[]"></td>
<td>{$data.order_no}</td>
<td>{$data.game_name}</td>
<td>{$data.server_name}</td>
<td><?php echo $data['type'] == 1 ? "资源" : "反馈";?></td>
<td>{$data.status}</td>
<td>{$data.user_account}</td>
<td>{:get_admin_nickname($data['creator_id'])}</td>
<td>{$data.created_time|date='Y-m-d H:i:s',###}</td>
<td>{$data.score}</td>
<td><?php echo $data['attachment_url'] ? '有' : '无'?></td>
<td>
<a href="{:U('workOrder/modify',array('id'=>$data['id']))}">编辑 </a>
<?php if ($data['type'] == 1):?><a href="{:U('workOrder/resourceApply',array('id'=>$data['id']))}">申请 </a><?php endif;?>
<?php if ($data['type'] == 2):?><a href="{:U('workOrder/feedbackProcessLogStore',array('id'=>$data['id']))}">更新 </a><?php endif;?>
<a class="ajax-get" href="{:U('workOrder/finish',array('id'=>$data['id']))}">完成 </a>
<a href="{:U('workOrder/evaluate',array('id'=>$data['id']))}">评价 </a>
<a class="ajax-get confirm" href="{:U('workOrder/delete',array('ids'=>$data['id']))}">删除 </a>
</td>
</tr>
</volist>
</empty>
</tbody>
</table>
</div>
</div>
<div class="page">
<if condition="$is_admin eq true ">
<a class="sch-btn" href="{:U('Export/exportWorkOrder',I('get.'))}">导出</a>
</if>
{$_page|default=''}
</div>
<div class="common_settings">
<span class="plus_icon"><span><img src="__IMG__/zwmimages/icon_jia.png"></span></span>
<form class="addShortcutIcon">
<input type="hidden" name="title" value="{$m_title}">
<input type="hidden" name="url" value="settlement/sheetList">
</form>
<a class="ajax-post add-butn <notempty name='commonset'>addSIsetted</notempty>" href="javascript:;" target-form="addShortcutIcon" url="{:U('Think/addShortcutIcon')}"><img src="__IMG__/zwmimages/icon_jia.png"><span><notempty name='commonset'>已添加<else />添加至常用设置</notempty></span></a>
</div>
</block>
<block name="script">
<script src="__STATIC__/layer/layer.js"></script>
<script src="__STATIC__/layer/extend/layer.ext.js"></script>
<link href="__STATIC__/datetimepicker/css/datetimepicker.css" rel="stylesheet" type="text/css">
<php>if(C('COLOR_STYLE')=='blue_color') echo '<link href="__STATIC__/datetimepicker/css/datetimepicker_blue.css" rel="stylesheet" type="text/css">';</php>
<script src="__STATIC__/layer/layer.js" type="text/javascript"></script>
<script type="text/javascript" src="__STATIC__/layer/extend/layer.ext.js" ></script>
<link href="__STATIC__/datetimepicker/css/dropdown.css" rel="stylesheet" type="text/css">
<script type="text/javascript" src="__STATIC__/datetimepicker/js/bootstrap-datetimepicker.min.js"></script>
<script type="text/javascript" src="__STATIC__/datetimepicker/js/locales/bootstrap-datetimepicker.zh-CN.js" charset="UTF-8"></script>
<link rel="stylesheet" href="__STATIC__/flatpickr/flatpickr.min.css">
<script src="__STATIC__/flatpickr/flatpickr.min.js"></script>
<script src="__STATIC__/flatpickr/l10n/zh.js"></script>
<style>
.layui-layer-demo .layui-layer-title {background:#F0F5F7;font-weight:bold;}
.layui-layer-demo .layui-layer-content {}
.layui-layer-demo .layui-layer-content table{width:100%;border:0;border-spacing:0;padding:0;}
.layui-layer-demo .layui-layer-content td {height:42px;padding-left:20px;}
.layui-layer-demo .layui-layer-content tr:hover {background:#F0F5F7;}
.layui-layer-demo .layui-layer-content tr~tr {border-top:1px solid #ccc;}
.layui-layer-demo .layui-layer-content td~td {border-left:1px solid #ccc;}
.layui-layer-demo .layui-layer-content tr:last-child td {}
</style>
<script type="text/javascript">
//导航高亮
highlight_subnav('{:U('WorkOrder/list')}');
$(function () {
$(".select_gallery").select2();
//搜索功能
$("#search").click(function () {
var sdate = Date.parse($('#time-start').val()) / 1000;
var edate = Date.parse($('#time-end').val()) / 1000;
if (sdate > edate) {
layer.msg('开始时间必须小于等于结束时间');
return false;
}
if ((edate - sdate) > 2592000) {
layer.msg('时间间隔不能超过31天请重新选择日期');
return false;
}
var url = $(this).attr('url');
var query = $('.jssearch').find('input').serialize();
query += "&" + $('.jssearch').find('select').serialize();
query = query.replace(/(&|^)(\w*?\d*?\-*?_*?)*?=?((?=&)|(?=$))/g, '');
query = query.replace(/^&/g, '');
if (url.indexOf('?') > 0) {
url += '&' + query;
} else {
url += '?' + query;
}
window.location.href = url;
});
//回车自动提交
$('.jssearch').find('input').keyup(function (event) {
if (event.keyCode === 13) {
$("#search").click();
}
});
$('#create-time-start').datetimepicker({
format: 'yyyy-mm-dd',
language: "zh-CN",
minView: 2,
autoclose: true
});
$('#datetimepicker').datetimepicker({
format: 'yyyy-mm-dd',
language: "zh-CN",
minView: 2,
autoclose: true,
pickerPosition: 'bottom-left'
})
$("#server_id").change(function () {
var g_server_id = $("#server_id option:selected").attr('server-id');
$("#serverid").val(g_server_id);
});
var server_id = "{:I('server_id')}";
$("#game_id").change(function(){
var addData = '';
$.ajax({
url:"{:U('Ajax/getServer')}",
type:"post",
data:{game_id:$("#game_id option:selected").attr('game-id')},
dataType:'json',
success:function(data){
str = "<option value=''>请选择区服</option>";
for (var i in data){
if (data[i].id == server_id) {
str += "<option value='"+data[i].server_name+"' server-id='"+data[i].id+"' selected >"+data[i].server_name+"</option>"
} else {
str += "<option value='"+data[i].server_name+"' server-id='"+data[i].id+"'>"+data[i].server_name+"</option>"
}
}
var g_game_id = $("#game_id option:selected").attr('game-id');
$("#gameid").val(g_game_id);
$("#server_id").empty();
$("#server_id").append(str);
$("#server_id").select2();
}
})
});
$("#game_id").change();
})
</script>
</block>

@ -0,0 +1,515 @@
<extend name="Public/base" />
<block name="body">
<link rel="stylesheet" type="text/css" href="__CSS__/admin_table.css" media="all">
<script type="text/javascript" src="__STATIC__/layer/layer.js"></script>
<script type="text/javascript" src="__STATIC__/uploadify/jquery.uploadify.min.js"></script>
<!-- <link rel="stylesheet" type="text/css" href="__CSS__/admin_table.css" media="all"> -->
<script type="text/javascript" src="__STATIC__/uploadify/jquery.uploadify.min.js"></script>
<script type="text/javascript" src="__STATIC__/provincecityarea/area1.js"></script>
<script type="text/javascript" src="__STATIC__/provincecityarea/AreaData_min.js"></script>
<script type="text/javascript" src="__STATIC__/provincecityarea/jquery-1.7.min.js"></script>
<script type="text/javascript" src="__JS__/jquery.mousewheel.js"></script>
<script type="text/javascript" src="__STATIC__/uploadify/jquery.uploadify.min.js"></script>
<link rel="stylesheet" type="text/css" href="__STATIC__/webuploader/webuploader.css" media="all">
<script src="__STATIC__/md5.js" type="text/javascript" charset="utf-8"></script>
<script type="text/javascript" src="__STATIC__/webuploader/webuploader.js"></script>
<script src="__STATIC__/layer/layer.js" type="text/javascript"></script>
<script type="text/javascript" src="__STATIC__/layer/extend/layer.ext.js"></script>
<style>
.tabcon1711 td {
text-decoration: none;
text-align: center!important;
padding-left: 55px;
padding-right: 55px;
width: 0;
}
.tabcon1711 td:first-child {
padding-left: 55px;
margin-right: 55px;
width: 0;
}
.tabcon1711 input {
width: 100%;
}
</style>
<style>
.data_list table td {
line-height:0px;
}
.bnt_add,.bnt_remove,.bnt_save{
height: 30px;
width: 20px;
font-size: 20px;
line-height: 10px;
color: #3399ff;
background: none;
border: none;
margin-left: 20px;
cursor: pointer;
}
.bnt_remove{
color: #F70909;
}
.bnt_save{
color: #4DB361;
}
</style>
<div class="cf main-place top_nav_list navtab_list">
<h3 class="page_title">编辑工单</h3>
</div>
<!-- 标签页导航 -->
<div class="data_list">
<div style="display: flex;">
<form method="post" action="{:U('modify')}" enctype="multipart/form-data" id="form1" action="javascript:;" class="form-horizontal">
<div class="cf top_nav_list">
<!-- 高级搜索 -->
<div class="jssearch fl cf search_list" style="margin-bottom:15px">
<input id="id" name="id" type="text" value="{$data['id']}" style="display:none" >
<input id="gameid" name="game_id" type="text" value="{$data['game_id']}" style="display:none" >
<input id="serverid" name="server_id" type="text" value="{$data['server_id']}" style="display:none">
<div class="input-list search-title-box">
<label>工单类型:</label>
</div>
<div class="input-list input-list-game search_label_rehab">
<label><?php if ($data['type'] == 1):?>资源<?php else:?>反馈<?php endif;?></label>
</div>
<div class="input-list search-title-box">
<label>区服选择:</label>
</div>
<div class="input-list input-list-game search_label_rehab">
<select id="game_id" name="game_name" class="select_gallery" style="width:120px;">
<option value="">游戏名称</option>
<volist name=":get_game_list()" id="vo">
<option game-id="{$vo.id}" value="{$vo.game_name}" <?php if ($data['game_id'] == $vo['id']):?>selected<?php endif;?> >{$vo.game_name}</option>
</volist>
</select>
</div>
<div class="input-list input-list-server search_label_rehab">
<select id="server_id" name="server_name" class="select_gallery" style="width:120px;">
<option value="">区服名称</option>
<if condition="$data['server_name'] neq ''"><option value="{$data['server_name']}">{$data['server_name']}</option></if>
</select>
</div>
<?php if (!empty($data['attachment_url'])):?>
<div class="input-list">
<div id="uploader" class="wu-example">
<div class="btns">
<div id="picker" style="height:30px;">附件</div>
</div>
<!--用来存放文件信息-->
<div id="thelist" class="uploader-list">
<div id="beforeupload" class="item">
<h4 class="info">已有附件<a href="javascript:;" class="jsdelzip table_click" style="float:none;display:inline-block;margin-left:10px;" onclick="$('#file_url').val('');$(this).parents('#beforeupload').remove()">删除</a><a href="{$data.attachment_url}" target="_blank" style="float:none;display:inline-block;margin-left:10px;">下载</a></h4>
</div>
</div>
<input type="hidden" id="file_url" name="attachment_url" value="{$data['attachment_url']}"/>
</div>
</div>
<?php endif;?>
</div>
</div>
<div class="tab-content tabcon1711" id='resource-form' <?php if ($data['type'] == 2 || ($data['type']==1 && !empty($data['attachment_url']))):?>hidden<?php endif;?>>
<table class="table">
<!-- 表头 -->
<thead>
<tr>
<th>测试账号</th>
<th>密码</th>
<th>角色名称</th>
<th>资源数量</th>
<th>备注</th>
</tr>
</thead>
<!-- 列表 -->
<tbody>
<tr>
<td class="r" style="line-height: 0px;">
<div class="from-element from-input">
<input type="text" title="账号" placeholder="账号" class="my_text"
name='resource[user_account]' value="{$data.user_account}"></div>
</td>
<td class="r">
<div class="from-element from-input">
<input type="text" title="密码" placeholder="密码" class="my_text"
name='resource[user_password]' ></div>
</td>
<td class="r">
<div class="from-element from-input">
<input type="text" title="角色名称" placeholder="角色名称" class="my_text"
name='resource[role_name]' value="{$data.role_name}"></div>
</td>
<td class="r">
<div class="from-element from-input">
<input type="text" title="申请元宝或钻石数量" placeholder="申请元宝或钻石数量" class="my_text"
name='resource[apply_resource]' onkeyup="value=value.replace(/[^\d]/g,'')" value="{$data.resource_num}"></div>
</td>
<td class="r">
<div class="from-element from-input">
<input type="text" title="备注" placeholder="备注" class="my_text"
name='resource[remark]' value="{$data.remark}"></div>
</td>
</tr>
</tbody>
</table>
</div>
<ul class="form_info" style="margin-top: 10px;" id='feedback-form' <?php if ($data['type'] == 1):?>hidden<?php endif;?> >
<li>
<label>玩家账号</label>
<input type="text" name='feedback[user_account]' value="{$data.user_account}">
</li>
<li>
<label>角色名称</label>
<input type="text" name='feedback[role_name]' value="{$data.role_name}">
</li>
<li>
<label>反馈原因</label>
<textarea name="feedback[feedback]" class="" placeholder="" >{$data.feedback}</textarea>
</li>
<li>
<label>状态</label>
<select id="status" name="feedback[status]" class="select_gallery">
<option value="3" <?php if($data['status'] == 3):?>selected<?php endif;?> >处理中</option>
<option value="1" <?php if($data['status'] == 1):?>selected<?php endif;?> >完成</option>
</select>
</li>
<li>
<label>创单人员</label>
<label>{:get_admin_name(is_login())}</label>
</li>
<li>
<label>处理人</label>
<select id="handler_id" name="feedback[handler_id]" class="select_gallery">
<?php foreach ($admin_users as $user):?>
<option value="{$user['uid']}" <?php if ($user['uid'] == $data['handler_id']):?>selected<?php endif;?> >{$user.nickname}</option>
<?php endforeach;?>
</select>
</li>
<li>
<label>备注</label>
<textarea name="feedback[remark]" class="" placeholder="" >{$data.remark}</textarea>
</li>
</ul>
<div class="form-item cf" style="margin-top: 10px;">
<button class="submit_btn ajax-post " id="submit" type="submit" target-form="form-horizontal" style="margin-left:10px;">
保存
</button>
</div>
</form>
<span style="width: 0.5px;background-color: gray; margin-left: 50px;margin-right: 50px;" <?php if (empty($data['process_log']) || $data['type'] == 1):?>hidden<?php endif;?>></span>
<div <?php if (empty($data['process_log']) || $data['type'] == 1):?>hidden<?php endif;?> >
<div style="font-size:large;">工单进度</div>
<div style="width: 600px;border: 0.5px solid #000;height: 100%;padding-top: 20px;padding-right: 50px;padding-left: 50px;margin-bottom: 50px;">
<?php foreach($data['process_log'] as $index => $log):?>
<p style="font-weight: bold;font-size: medium;margin-top: 10px;">{$index+1}. {$log['title']}</p>
<?php if ($log['type'] == 2):?>
<?php foreach($log['detail'] as $detail):?>
<p style="margin-left: 20px;">--<?php echo $detail['key_name'] . " 旧值:".$detail['old']." 新值:".$detail['new'] ?></p>
<?php endforeach;?>
<?php elseif($log['type'] == 3):?>
<p style="margin-left: 20px;"><label>内容:</label><span style="color: gray;">{$log['detail']}</span></p>
<?php endif;?>
<?php endforeach;?>
</div>
</div>
</div>
</div>
<div class="common_settings">
<span class="plus_icon"><span><img src="__IMG__/zwmimages/icon_jia.png"></span></span>
<form class="addShortcutIcon">
<input type="hidden" name="title" value="{$m_title}">
<input type="hidden" name="url" value="Promote/lists/type/1">
</form>
<a class="ajax-post add-butn <notempty name='commonset'>addSIsetted</notempty>" href="javascript:;" target-form="addShortcutIcon" url="{:U('Think/addShortcutIcon')}"><img src="__IMG__/zwmimages/icon_jia.png"><span><notempty name='commonset'>已添加<else />添加至常用设置</notempty></span></a>
</div>
</block>
<block name="script">
<script type="text/javascript" src="__STATIC__/datetimepicker/js/bootstrap-datetimepicker.min.js"></script>
<script type="text/javascript">
//导航高亮
highlight_subnav('{:U('WorkOrder/list')}');
Think.setValue("game_type_id", {$data.game_type_id|default = 0});
Think.setValue("category", {$data.category|default = 0});
Think.setValue("ba_id", {$data.ba_id|default = 0});
$('#submit').click(function(){
$('#form').submit();
});
$(function(){
// var pro="{:$data['bank_area']['0']}";
// alert (pro);
showTab();
prov="{:substr($data['bank_area'],0,2)}";
city="{:substr($data['bank_area'],2,2)}";
ciarea="{:substr($data['bank_area'],4,2)}";
//initComplexArea('seachprov', 'seachcity', 'seachdistrict', area_array, sub_array, prov, city, ciarea);
$('.table').on("click", '.add-act', function (event) {
$(".table").find("tr:last").find('td:last').find('a:last').css("display", 'none');
var rowNum = $(".table tr").size() - 1;
var html = "<tr class='table_tr' data-val='" + rowNum + "'><td><div class='from-element from-input'><input type='text' class='my_text' title='账号' placeholder='账号' name='user_accounts[]' ></div></td><td><div class='from-element from-input'><input type='text' title='密码' class='my_text' placeholder='密码' name='user_passwords[]'></div></td><td><div class='from-element from-input'><input type='text' title='角色名称' placeholder='角色名称' class='my_text' name='role_names[]'></div></td><td><div class='from-element from-input'><input type='text' maxlength='19' placeholder='申请元宝或钻石数量' title='申请数量' class='my_text' name='apply_resources[]' onkeyup = " + '"' + "value=value.replace(/[^\\d]/g,'')" + '"' + "></div></td><td><div class='from-element from-input'><input type='text' placeholder='备注' class='my_text' maxlength='100' name='remarks[]'></div></td><td><div style='display: flex;'><a class='add-act bnt_add'></a><a class='del-act bnt_remove'></a></div></td></tr>";
$(".table").append(html);
});
$('.table').on("click", '.del-act', function (event) {
var rowNum = $(".table tr").size() - 1;
if (rowNum > 1) {
$(this).closest("tr").remove();
$(".table").find("tr:last").find('td:last').find('a:last').css("display", ' inline-block');
}
});
});
$("#server_id").change(function () {
var g_server_id = $("#server_id option:selected").attr('server-id');
$("#serverid").attr('value',g_server_id);
});
var server_id = '{$data.server_id}';
$("#game_id").change(function(){
var addData = '';
$("#gameid").val($(this).val());
$.ajax({
url:"{:U('Ajax/getServer')}",
type:"post",
data:{game_id:$("#game_id option:selected").attr('game-id')},
dataType:'json',
success:function(data){
str = "<option value=''>请选择区服</option>";
for (var i in data){
if (data[i].id == server_id) {
str += "<option value='"+data[i].server_name+"' server-id='"+data[i].id+"' selected >"+data[i].server_name+"</option>"
} else {
str += "<option value='"+data[i].server_name+"' server-id='"+data[i].id+"'>"+data[i].server_name+"</option>"
}
}
var g_game_id = $("#game_id option:selected").attr('game-id');
$("#gameid").attr('value',g_game_id);
$("#server_id").empty();
$("#server_id").append(str);
$("#server_id").select2();
}
})
});
$("#game_id").change();
var userInfo = {userId:"kazaff", md5:""}; //用户会话信息
var chunkSize = 5000 * 1024; //分块大小
var uniqueFileName = null; //文件唯一标识符
var md5Mark = null;
var backEndUrl = "{:U('File/shard_upload',array('type'=>1,'session_id'=>session_id()))}";
WebUploader.Uploader.register({
"before-send-file" : "beforeSendFile",
"before-send" : "beforeSend",
"after-send-file" : "afterSendFile"
}, {
beforeSendFile: function(file){
//秒传验证
if (file['source']['ext'] === 'zip' || file['source']['ext'] === 'rar') {
var task = new $.Deferred();
var start = new Date().getTime();
(new WebUploader.Uploader()).md5File(file, 0, 10*1024*1024).progress(function(percentage){
//console.log(percentage);
}).then(function(val){
//console.log("总耗时: "+((new Date().getTime()) - start)/1000);
md5Mark = val;
userInfo.md5 = val;
$.ajax({
type: "POST"
, url: backEndUrl
, data: {status: "md5Check", md5: val}
, cache: false
, timeout: 1000 //todo 超时的话,只能认为该文件不曾上传过
, dataType: "json"
}).then(function(data, textStatus, jqXHR){
//console.log(data);
if(data != null && data.ifExist){ //若存在这返回失败给WebUploader表明该文件不需要上传
task.reject();
uploader.skipFile(file);
file.path = data.path;
}else{
task.resolve();
//拿到上传文件的唯一名称,用于断点续传
uniqueFileName = md5(''+userInfo.userId+file.name+file.type+file.lastModifiedDate+file.size);
}
}, function(jqXHR, textStatus, errorThrown){ //任何形式的验证失败,都触发重新上传
task.resolve();
//拿到上传文件的唯一名称,用于断点续传
uniqueFileName = md5(''+userInfo.userId+file.name+file.type+file.lastModifiedDate+file.size);
});
});
return $.when(task);
}
}
, beforeSend: function(block){
//分片验证是否已传过,用于断点续传
if (block['file']['source']['ext'] === 'zip' || block['file']['source']['ext'] === 'rar') {
var task = new $.Deferred();
$.ajax({
type: "POST"
, url: backEndUrl
, data: {
status: "chunkCheck"
, name: uniqueFileName
, chunkIndex: block.chunk
, size: block.end - block.start
}
, cache: false
, timeout: 1000 //todo 超时的话,只能认为该分片未上传过
, dataType: "json"
}).then(function(data, textStatus, jqXHR){
if(data.ifExist){ //若存在返回失败给WebUploader表明该分块不需要上传
task.reject();
}else{
task.resolve();
}
}, function(jqXHR, textStatus, errorThrown){ //任何形式的验证失败,都触发重新上传
task.resolve();
});
return $.when(task);
}
}
, afterSendFile: function(file){
if (file['source']['ext'] === 'zip' || file['source']['ext'] === 'rar') {
var chunksTotal = 0;
if((chunksTotal = Math.ceil(file.size/chunkSize)) > 1){
//合并请求
var task = new $.Deferred();
$.ajax({
type: "POST"
, url: backEndUrl
, data: {
status: "chunksMerge"
, name: uniqueFileName
, chunks: chunksTotal
, ext: file.ext
, md5: md5Mark
}
, cache: false
, dataType: "json"
}).then(function(data, textStatus, jqXHR){
//todo 检查响应是否正常
task.resolve();
file.path = data.path;
$("#file_name").val(data.name);
$("#file_url").val(data.path+'/'+data.name);
$("#file_size").val(file.size);
}, function(jqXHR, textStatus, errorThrown){
task.reject();
});
return $.when(task);
}else{
//UploadComlate(file);
}
}
}
});
var uploaderFile = WebUploader.create({
// 选完文件后,是否自动上传。
auto: true,
// swf文件路径
swf: '__STATIC__/webuploader/Uploader.swf',
// 文件接收服务端。
server: backEndUrl,
// 选择文件的按钮。可选。
// 内部根据当前运行是创建可能是input元素也可能是flash.
pick: {id:'#picker'},
//dnd: "#theList",
paste: document.body,
accept: {
title: '压缩包',
extensions: 'rar,zip',
mimeTypes: '.rar,.zip',
},
// 不压缩image, 默认如果是jpeg文件上传前会压缩一把再上传
resize: false,
disableGlobalDnd: true,
fileNumLimit:1,
threads:3,
compress: false,
prepareNextFile: true,
formData: function(){return $.extend(true, {}, userInfo);},
chunked:true,
chunkSize: 5*1000*1024,
duplicate: true
});
uploaderFile.on('beforeFileQueued',function(file){
var mycars=new Array("zip","rar","tar","jar");
if($.inArray(file.ext,mycars) == -1){
updateAlert('上传文件非法','tip_error');
setTimeout(function(){
$('#tip').find('.tipclose').click();
},1500);
return false;
}
if ($('#file_url').val()) {
layer.msg('请先删除原文件后,再上传');
return false;
}
//$.each(mycars,function(index,value){});
})
// 当有文件被添加进队列的时候
uploaderFile.on( 'fileQueued', function( file ) {
$("#thelist").append( '<div id="' + file.id + '" class="item">' +
'<h4 class="info">' + file.name + '</h4>' +
'<p class="state">等待上传...</p>' +
'</div>' );
});
// 文件上传过程中创建进度条实时显示。
uploaderFile.on( 'uploadProgress', function( file, percentage ) {
var $li = $( '#'+file.id ),
$percent = $li.find('.progress .progress-bar');
// 避免重复创建
if ( !$percent.length ) {
$percent = $('<div class="progress progress-striped active">' +
'<div class="progress-bar" role="progressbar" style="width: 0%">' +
'</div>' +
'</div>').appendTo( $li ).find('.progress-bar');
}
$li.find('p.state').text('上传中');
$percent.css( 'width', percentage * 100 + '%' );
$percent.text( (percentage * 100).toFixed(0) + '%' );
});
uploaderFile.on( 'uploadSuccess', function( file , response) {
$( '#'+file.id ).find('p.state').text('已上传').fadeOut(800);
$('#'+file.id).find('h4.info').append('<a href="javascript:;" class="jsdelzip table_click" style="float:none;display:inline-block;margin-left:10px;">删除</a>');
$('#'+file.id).find('.jsdelzip').on('click',function() {
$("#file_url").val('');
uploaderFile.removeFile( file.id );
$('#'+file.id).remove();
return false;
});
if(!response.chunk){
var url = response.path + "/" +response.name;
$("#file_url").val(url);
}
});
uploaderFile.on( 'uploadError', function( file ) {
$( '#'+file.id ).find('p.state').text('上传出错');
});
uploaderFile.on( 'uploadComplete', function(file) {
$( '#'+file.id ).find('.progress').fadeOut();
});
</script>
</block>

@ -0,0 +1,362 @@
<extend name="Public/base" />
<block name="body">
<link rel="stylesheet" type="text/css" href="__CSS__/admin_table.css" media="all">
<script type="text/javascript" src="__STATIC__/layer/layer.js"></script>
<script type="text/javascript" src="__STATIC__/uploadify/jquery.uploadify.min.js"></script>
<!-- <link rel="stylesheet" type="text/css" href="__CSS__/admin_table.css" media="all"> -->
<script type="text/javascript" src="__STATIC__/uploadify/jquery.uploadify.min.js"></script>
<script type="text/javascript" src="__STATIC__/provincecityarea/area1.js"></script>
<script type="text/javascript" src="__STATIC__/provincecityarea/AreaData_min.js"></script>
<script type="text/javascript" src="__STATIC__/provincecityarea/jquery-1.7.min.js"></script>
<script type="text/javascript" src="__JS__/jquery.mousewheel.js"></script>
<script type="text/javascript" src="__STATIC__/uploadify/jquery.uploadify.min.js"></script>
<link rel="stylesheet" type="text/css" href="__STATIC__/webuploader/webuploader.css" media="all">
<script src="__STATIC__/md5.js" type="text/javascript" charset="utf-8"></script>
<script type="text/javascript" src="__STATIC__/webuploader/webuploader.js"></script>
<script src="__STATIC__/layer/layer.js" type="text/javascript"></script>
<script type="text/javascript" src="__STATIC__/layer/extend/layer.ext.js"></script>
<style>
.tabcon1711 td {
text-decoration: none;
text-align: center!important;
padding-left: 55px;
padding-right: 55px;
width: 0;
}
.tabcon1711 td:first-child {
padding-left: 55px;
margin-right: 55px;
width: 0;
}
.tabcon1711 input {
width: 100%;
}
</style>
<style>
.data_list table td {
line-height:0px;
}
.bnt_add,.bnt_remove,.bnt_save{
height: 30px;
width: 20px;
font-size: 20px;
line-height: 10px;
color: #3399ff;
background: none;
border: none;
margin-left: 20px;
cursor: pointer;
}
.bnt_remove{
color: #F70909;
}
.bnt_save{
color: #4DB361;
}
</style>
<div class="cf main-place top_nav_list navtab_list">
<h3 class="page_title">工单申请</h3>
</div>
<!-- 标签页导航 -->
<div class="data_list">
<div style="display: flex;">
<form method="post" action="{:U('resourceApply')}" enctype="multipart/form-data" id="form1" action="javascript:;" class="form-horizontal" style="width: 600px;">
<ul class="form_info" style="margin-top: 10px;" id='feedback-form' >
<li>
<label>工单号</label>
<label>{$data.order_no}</label>
</li>
<li>
<label>游戏名称</label>
<label>{$data.game_name}</label>
</li>
<li>
<label>游戏区服</label>
<label>{$data.server_name}</label>
</li>
<li>
<label>游戏账号</label>
<label>{$data.user_account}</label>
</li>
<li>
<label>游戏角色</label>
<label>{$data.role_name}</label>
</li>
<?php if (empty($data['attachment_url'])):?>
<li>
<label>测试资源数量</label>
<input type="text" name='resource_num' value="0">
</li>
<li>
<label>备注</label>
<textarea name="remark" class="" placeholder="" ></textarea>
</li>
<?php else:?>
<li>
<label>附件</label>
<label>
<div id="uploader" class="wu-example">
<div class="btns">
<div id="picker" style="height:30px;">附件</div>
</div>
<!--用来存放文件信息-->
<div id="thelist" class="uploader-list">
<div id="beforeupload" class="item">
<h4 class="info" style="width: max-content;">已有附件<a href="javascript:;" class="jsdelzip table_click" style="float:none;display:inline-block;margin-left:10px;" onclick="$('#file_url').val('');$(this).parents('#beforeupload').remove()">删除</a><a href="{$data.attachment_url}" target="_blank" style="float:none;display:inline-block;margin-left:10px;">下载</a></h4>
</div>
</div>
<input type="hidden" id="file_url" name="attachment_url" value="{$data['attachment_url']}"/>
</div>
</label>
</li>
<?php endif;?>
<input type="hidden" name="id" value="{$data.id}">
</ul>
<div class="form-item cf" style="margin-top: 10px;">
<button class="submit_btn ajax-post " id="submit" type="submit" target-form="form-horizontal" style="margin-left:10px;">
保存
</button>
</div>
</form>
</div>
</div>
<div class="common_settings">
<span class="plus_icon"><span><img src="__IMG__/zwmimages/icon_jia.png"></span></span>
<form class="addShortcutIcon">
<input type="hidden" name="title" value="{$m_title}">
<input type="hidden" name="url" value="Promote/lists/type/1">
</form>
<a class="ajax-post add-butn <notempty name='commonset'>addSIsetted</notempty>" href="javascript:;" target-form="addShortcutIcon" url="{:U('Think/addShortcutIcon')}"><img src="__IMG__/zwmimages/icon_jia.png"><span><notempty name='commonset'>已添加<else />添加至常用设置</notempty></span></a>
</div>
</block>
<block name="script">
<script type="text/javascript" src="__STATIC__/datetimepicker/js/bootstrap-datetimepicker.min.js"></script>
<script type="text/javascript">
//导航高亮
highlight_subnav('{:U('WorkOrder/list')}');
Think.setValue("game_type_id", {$data.game_type_id|default = 0});
Think.setValue("category", {$data.category|default = 0});
Think.setValue("ba_id", {$data.ba_id|default = 0});
$('#submit').click(function(){
$('#form').submit();
});
var userInfo = {userId:"kazaff", md5:""}; //用户会话信息
var chunkSize = 5000 * 1024; //分块大小
var uniqueFileName = null; //文件唯一标识符
var md5Mark = null;
var backEndUrl = "{:U('File/shard_upload',array('type'=>1,'session_id'=>session_id()))}";
WebUploader.Uploader.register({
"before-send-file" : "beforeSendFile",
"before-send" : "beforeSend",
"after-send-file" : "afterSendFile"
}, {
beforeSendFile: function(file){
//秒传验证
if (file['source']['ext'] === 'zip' || file['source']['ext'] === 'rar') {
var task = new $.Deferred();
var start = new Date().getTime();
(new WebUploader.Uploader()).md5File(file, 0, 10*1024*1024).progress(function(percentage){
//console.log(percentage);
}).then(function(val){
//console.log("总耗时: "+((new Date().getTime()) - start)/1000);
md5Mark = val;
userInfo.md5 = val;
$.ajax({
type: "POST"
, url: backEndUrl
, data: {status: "md5Check", md5: val}
, cache: false
, timeout: 1000 //todo 超时的话,只能认为该文件不曾上传过
, dataType: "json"
}).then(function(data, textStatus, jqXHR){
//console.log(data);
if(data != null && data.ifExist){ //若存在这返回失败给WebUploader表明该文件不需要上传
task.reject();
uploader.skipFile(file);
file.path = data.path;
}else{
task.resolve();
//拿到上传文件的唯一名称,用于断点续传
uniqueFileName = md5(''+userInfo.userId+file.name+file.type+file.lastModifiedDate+file.size);
}
}, function(jqXHR, textStatus, errorThrown){ //任何形式的验证失败,都触发重新上传
task.resolve();
//拿到上传文件的唯一名称,用于断点续传
uniqueFileName = md5(''+userInfo.userId+file.name+file.type+file.lastModifiedDate+file.size);
});
});
return $.when(task);
}
}
, beforeSend: function(block){
//分片验证是否已传过,用于断点续传
if (block['file']['source']['ext'] === 'zip' || block['file']['source']['ext'] === 'rar') {
var task = new $.Deferred();
$.ajax({
type: "POST"
, url: backEndUrl
, data: {
status: "chunkCheck"
, name: uniqueFileName
, chunkIndex: block.chunk
, size: block.end - block.start
}
, cache: false
, timeout: 1000 //todo 超时的话,只能认为该分片未上传过
, dataType: "json"
}).then(function(data, textStatus, jqXHR){
if(data.ifExist){ //若存在返回失败给WebUploader表明该分块不需要上传
task.reject();
}else{
task.resolve();
}
}, function(jqXHR, textStatus, errorThrown){ //任何形式的验证失败,都触发重新上传
task.resolve();
});
return $.when(task);
}
}
, afterSendFile: function(file){
if (file['source']['ext'] === 'zip' || file['source']['ext'] === 'rar') {
var chunksTotal = 0;
if((chunksTotal = Math.ceil(file.size/chunkSize)) > 1){
//合并请求
var task = new $.Deferred();
$.ajax({
type: "POST"
, url: backEndUrl
, data: {
status: "chunksMerge"
, name: uniqueFileName
, chunks: chunksTotal
, ext: file.ext
, md5: md5Mark
}
, cache: false
, dataType: "json"
}).then(function(data, textStatus, jqXHR){
//todo 检查响应是否正常
task.resolve();
file.path = data.path;
$("#file_name").val(data.name);
$("#file_url").val(data.path+'/'+data.name);
$("#file_size").val(file.size);
}, function(jqXHR, textStatus, errorThrown){
task.reject();
});
return $.when(task);
}else{
//UploadComlate(file);
}
}
}
});
var uploaderFile = WebUploader.create({
// 选完文件后,是否自动上传。
auto: true,
// swf文件路径
swf: '__STATIC__/webuploader/Uploader.swf',
// 文件接收服务端。
server: backEndUrl,
// 选择文件的按钮。可选。
// 内部根据当前运行是创建可能是input元素也可能是flash.
pick: {id:'#picker'},
//dnd: "#theList",
paste: document.body,
accept: {
title: '压缩包',
extensions: 'rar,zip',
mimeTypes: '.rar,.zip',
},
// 不压缩image, 默认如果是jpeg文件上传前会压缩一把再上传
resize: false,
disableGlobalDnd: true,
fileNumLimit:1,
threads:3,
compress: false,
prepareNextFile: true,
formData: function(){return $.extend(true, {}, userInfo);},
chunked:true,
chunkSize: 5*1000*1024,
duplicate: true
});
uploaderFile.on('beforeFileQueued',function(file){
var mycars=new Array("zip","rar","tar","jar");
if($.inArray(file.ext,mycars) == -1){
updateAlert('上传文件非法','tip_error');
setTimeout(function(){
$('#tip').find('.tipclose').click();
},1500);
return false;
}
if ($('#file_url').val()) {
layer.msg('请先删除原文件后,再上传');
return false;
}
//$.each(mycars,function(index,value){});
})
// 当有文件被添加进队列的时候
uploaderFile.on( 'fileQueued', function( file ) {
$("#thelist").append( '<div id="' + file.id + '" class="item">' +
'<h4 class="info">' + file.name + '</h4>' +
'<p class="state">等待上传...</p>' +
'</div>' );
});
// 文件上传过程中创建进度条实时显示。
uploaderFile.on( 'uploadProgress', function( file, percentage ) {
var $li = $( '#'+file.id ),
$percent = $li.find('.progress .progress-bar');
// 避免重复创建
if ( !$percent.length ) {
$percent = $('<div class="progress progress-striped active">' +
'<div class="progress-bar" role="progressbar" style="width: 0%">' +
'</div>' +
'</div>').appendTo( $li ).find('.progress-bar');
}
$li.find('p.state').text('上传中');
$percent.css( 'width', percentage * 100 + '%' );
$percent.text( (percentage * 100).toFixed(0) + '%' );
});
uploaderFile.on( 'uploadSuccess', function( file , response) {
$( '#'+file.id ).find('p.state').text('已上传').fadeOut(800);
$('#'+file.id).find('h4.info').append('<a href="javascript:;" class="jsdelzip table_click" style="float:none;display:inline-block;margin-left:10px;">删除</a>');
$('#'+file.id).find('.jsdelzip').on('click',function() {
$("#file_url").val('');
uploaderFile.removeFile( file.id );
$('#'+file.id).remove();
return false;
});
if(!response.chunk){
var url = response.path + "/" +response.name;
$("#file_url").val(url);
}
});
uploaderFile.on( 'uploadError', function( file ) {
$( '#'+file.id ).find('p.state').text('上传出错');
});
uploaderFile.on( 'uploadComplete', function(file) {
$( '#'+file.id ).find('.progress').fadeOut();
});
</script>
</block>

@ -0,0 +1,513 @@
<extend name="Public/base" />
<block name="body">
<link rel="stylesheet" type="text/css" href="__CSS__/admin_table.css" media="all">
<script type="text/javascript" src="__STATIC__/layer/layer.js"></script>
<script type="text/javascript" src="__STATIC__/uploadify/jquery.uploadify.min.js"></script>
<!-- <link rel="stylesheet" type="text/css" href="__CSS__/admin_table.css" media="all"> -->
<script type="text/javascript" src="__STATIC__/uploadify/jquery.uploadify.min.js"></script>
<script type="text/javascript" src="__STATIC__/provincecityarea/area1.js"></script>
<script type="text/javascript" src="__STATIC__/provincecityarea/AreaData_min.js"></script>
<script type="text/javascript" src="__STATIC__/provincecityarea/jquery-1.7.min.js"></script>
<script type="text/javascript" src="__JS__/jquery.mousewheel.js"></script>
<script type="text/javascript" src="__STATIC__/uploadify/jquery.uploadify.min.js"></script>
<link rel="stylesheet" type="text/css" href="__STATIC__/webuploader/webuploader.css" media="all">
<script src="__STATIC__/md5.js" type="text/javascript" charset="utf-8"></script>
<script type="text/javascript" src="__STATIC__/webuploader/webuploader.js"></script>
<script src="__STATIC__/layer/layer.js" type="text/javascript"></script>
<script type="text/javascript" src="__STATIC__/layer/extend/layer.ext.js"></script>
<style>
.tabcon1711 td {
text-decoration: none;
text-align: center!important;
padding-left: 55px;
padding-right: 55px;
width: 0;
}
.tabcon1711 td:first-child {
padding-left: 55px;
margin-right: 55px;
width: 0;
}
.tabcon1711 input {
width: 100%;
}
</style>
<style>
.data_list table td {
line-height:0px;
}
.bnt_add,.bnt_remove,.bnt_save{
height: 30px;
width: 20px;
font-size: 20px;
line-height: 10px;
color: #3399ff;
background: none;
border: none;
margin-left: 20px;
cursor: pointer;
}
.bnt_remove{
color: #F70909;
}
.bnt_save{
color: #4DB361;
}
</style>
<div class="cf main-place top_nav_list navtab_list">
<h3 class="page_title">新增工单</h3>
</div>
<!-- 标签页导航 -->
<div class="data_list">
<div style="display: flex;">
<form method="post" action="{:U('store')}" enctype="multipart/form-data" id="form1" action="javascript:;" class="form-horizontal">
<div class="cf top_nav_list">
<!-- 高级搜索 -->
<div class="jssearch fl cf search_list" style="margin-bottom:15px">
<input id="gameid" name="game_id" type="text" value="" style="display:none" >
<input id="serverid" name="server_id" type="text" value="" style="display:none">
<div class="input-list search-title-box">
<label>工单类型:</label>
</div>
<div class="input-list input-list-game search_label_rehab">
<select id="type" name="type" class="select_gallery" style="width:120px;">
<option value="1">资源</option>
<option value="2">反馈</option>
</select>
</div>
<div class="input-list search-title-box">
<label>区服选择:</label>
</div>
<div class="input-list input-list-game search_label_rehab">
<select id="game_id" name="game_name" class="select_gallery" style="width:120px;">
<option value="">游戏名称</option>
<volist name=":get_game_list()" id="vo">
<option game-id="{$vo.id}" value="{$vo.game_name}">{$vo.game_name}</option>
</volist>
</select>
</div>
<div class="input-list input-list-server search_label_rehab">
<select id="server_id" name="server_name" class="select_gallery" style="width:120px;">
<option value="">区服名称</option>
<if condition="$_GET['server_name'] neq ''"><option value="{$_GET['server_name']}">{$_GET['server_name']}</option></if>
</select>
</div>
<div class="input-list">
<div id="uploader" class="wu-example">
<div class="btns">
<div id="picker" style="height:30px;">附件</div>
</div>
<!--用来存放文件信息-->
<div id="thelist" class="uploader-list">
</div>
<input type="hidden" id="file_url" name="attachment_url" value="{$data['attachment_url']}"/>
</div>
</div>
</div>
</div>
<div class="tab-content tabcon1711" id='resource-form' >
<table class="table">
<!-- 表头 -->
<thead>
<tr>
<th>测试账号</th>
<th>密码</th>
<th>角色名称</th>
<th>资源数量</th>
<th>备注</th>
<th>操作</th>
</tr>
</thead>
<!-- 列表 -->
<tbody>
<tr>
<td class="r" style="line-height: 0px;">
<div class="from-element from-input">
<input type="text" title="账号" placeholder="账号" class="my_text"
name='user_accounts[]'></div>
</td>
<td class="r">
<div class="from-element from-input">
<input type="text" title="密码" placeholder="密码" class="my_text"
name='user_passwords[]'></div>
</td>
<td class="r">
<div class="from-element from-input">
<input type="text" title="角色名称" placeholder="角色名称" class="my_text"
name='role_names[]'></div>
</td>
<td class="r">
<div class="from-element from-input">
<input type="text" title="申请元宝或钻石数量" placeholder="申请元宝或钻石数量" class="my_text"
name='apply_resources[]' onkeyup="value=value.replace(/[^\d]/g,'')"></div>
</td>
<td class="r">
<div class="from-element from-input">
<input type="text" title="备注" placeholder="备注" class="my_text"
name='remarks[]'></div>
</td>
<td class="r">
<div style="display: flex;">
<a href="#" class="add-act bnt_add"></a>
<a href="#" class="del-act bnt_remove"></a>
</div>
</td>
</tr>
</tbody>
</table>
</div>
<ul class="form_info" style="margin-top: 10px;" id='feedback-form' hidden >
<input type="hidden" name="id" value="{$auth_group.id}" />
<li>
<label>玩家账号</label>
<input type="text" name='user_account'>
</li>
<li>
<label>角色名称</label>
<input type="text" name='role_name'>
</li>
<li>
<label>反馈原因</label>
<textarea name="feedback" class="" placeholder="" ></textarea>
</li>
<li>
<label>创单人员</label>
<label>{:get_admin_name(is_login())}</label>
</li>
<li>
<label>处理人</label>
<select id="handler_id" name="handler_id" class="select_gallery">
<?php foreach ($admin_users as $user):?>
<option value="{$user['uid']}" >{$user.nickname}</option>
<?php endforeach;?>
</select>
</li>
<li>
<label>备注</label>
<textarea name="remark" class="" placeholder="" ></textarea>
</li>
</ul>
<div class="form-item cf" style="margin-top: 10px;">
<button class="submit_btn ajax-post " id="submit" type="submit" target-form="form-horizontal" style="margin-left:10px;">
保存
</button>
</div>
</form>
<span style="width: 0.5px;background-color: gray; margin-left: 50px;margin-right: 50px;" hidden></span>
<div hidden>
<div style="font-size:large;">工单进度</div>
<div style="width: 600px;border: 0.5px solid #000;height: 100%;padding-top: 20px;padding-right: 50px;padding-left: 50px;margin-bottom: 50px;">
<p>工单内容</p>
</div>
</div>
</div>
</div>
<div class="common_settings">
<span class="plus_icon"><span><img src="__IMG__/zwmimages/icon_jia.png"></span></span>
<form class="addShortcutIcon">
<input type="hidden" name="title" value="{$m_title}">
<input type="hidden" name="url" value="Promote/lists/type/1">
</form>
<a class="ajax-post add-butn <notempty name='commonset'>addSIsetted</notempty>" href="javascript:;" target-form="addShortcutIcon" url="{:U('Think/addShortcutIcon')}"><img src="__IMG__/zwmimages/icon_jia.png"><span><notempty name='commonset'>已添加<else />添加至常用设置</notempty></span></a>
</div>
</block>
<block name="script">
<script type="text/javascript" src="__STATIC__/datetimepicker/js/bootstrap-datetimepicker.min.js"></script>
<script type="text/javascript">
//导航高亮
highlight_subnav('{:U('WorkOrder/list')}');
Think.setValue("game_type_id", {$data.game_type_id|default = 0});
Think.setValue("category", {$data.category|default = 0});
Think.setValue("ba_id", {$data.ba_id|default = 0});
$('#submit').click(function(){
$('#form').submit();
});
$(function(){
// var pro="{:$data['bank_area']['0']}";
// alert (pro);
showTab();
prov="{:substr($data['bank_area'],0,2)}";
city="{:substr($data['bank_area'],2,2)}";
ciarea="{:substr($data['bank_area'],4,2)}";
//initComplexArea('seachprov', 'seachcity', 'seachdistrict', area_array, sub_array, prov, city, ciarea);
$('.table').on("click", '.add-act', function (event) {
$(".table").find("tr:last").find('td:last').find('a:last').css("display", 'none');
var rowNum = $(".table tr").size() - 1;
var html = "<tr class='table_tr' data-val='" + rowNum + "'><td><div class='from-element from-input'><input type='text' class='my_text' title='账号' placeholder='账号' name='user_accounts[]' ></div></td><td><div class='from-element from-input'><input type='text' title='密码' class='my_text' placeholder='密码' name='user_passwords[]'></div></td><td><div class='from-element from-input'><input type='text' title='角色名称' placeholder='角色名称' class='my_text' name='role_names[]'></div></td><td><div class='from-element from-input'><input type='text' maxlength='19' placeholder='申请元宝或钻石数量' title='申请数量' class='my_text' name='apply_resources[]' onkeyup = " + '"' + "value=value.replace(/[^\\d]/g,'')" + '"' + "></div></td><td><div class='from-element from-input'><input type='text' placeholder='备注' class='my_text' maxlength='100' name='remarks[]'></div></td><td><div style='display: flex;'><a class='add-act bnt_add'></a><a class='del-act bnt_remove'></a></div></td></tr>";
$(".table").append(html);
});
$('.table').on("click", '.del-act', function (event) {
var rowNum = $(".table tr").size() - 1;
if (rowNum > 1) {
$(this).closest("tr").remove();
$(".table").find("tr:last").find('td:last').find('a:last').css("display", ' inline-block');
}
});
});
$("#server_id").change(function () {
var g_server_id = $("#server_id option:selected").attr('server-id');
$("#serverid").attr('value',g_server_id);
});
$("#game_id").change(function(){
var addData = '';
$.ajax({
url:"{:U('Ajax/getServer')}",
type:"post",
data:{game_id:$("#game_id option:selected").attr('game-id')},
dataType:'json',
success:function(data){
str = "<option value=''>请选择区服</option>";
for (var i in data){
str += "<option value='"+data[i].server_name+"' server-id='"+data[i].id+"'>"+data[i].server_name+"</option>"
}
var g_game_id = $("#game_id option:selected").attr('game-id');
$("#gameid").attr('value',g_game_id);
console.log(g_game_id);
$("#server_id").empty();
$("#server_id").append(str);
$("#server_id").select2();
}
})
});
$('#type').on('change', function(){
var seleted = $(this).val();
if (seleted == 1) {
$('#feedback-form').hide();
$('#resource-form').show();
$('#feedback-form input').disable(true);
$('#resource-form input').disable(false);
} else {
$('#feedback-form').show();
$('#resource-form').hide();
$('#feedback-form input').disable(false);
$('#resource-form input').disable(true);
}
});
var userInfo = {userId:"kazaff", md5:""}; //用户会话信息
var chunkSize = 5000 * 1024; //分块大小
var uniqueFileName = null; //文件唯一标识符
var md5Mark = null;
var backEndUrl = "{:U('File/shard_upload',array('type'=>1,'session_id'=>session_id()))}";
WebUploader.Uploader.register({
"before-send-file" : "beforeSendFile",
"before-send" : "beforeSend",
"after-send-file" : "afterSendFile"
}, {
beforeSendFile: function(file){
//秒传验证
if (file['source']['ext'] === 'zip' || file['source']['ext'] === 'rar') {
var task = new $.Deferred();
var start = new Date().getTime();
(new WebUploader.Uploader()).md5File(file, 0, 10*1024*1024).progress(function(percentage){
//console.log(percentage);
}).then(function(val){
//console.log("总耗时: "+((new Date().getTime()) - start)/1000);
md5Mark = val;
userInfo.md5 = val;
$.ajax({
type: "POST"
, url: backEndUrl
, data: {status: "md5Check", md5: val}
, cache: false
, timeout: 1000 //todo 超时的话,只能认为该文件不曾上传过
, dataType: "json"
}).then(function(data, textStatus, jqXHR){
//console.log(data);
if(data != null && data.ifExist){ //若存在这返回失败给WebUploader表明该文件不需要上传
task.reject();
uploader.skipFile(file);
file.path = data.path;
}else{
task.resolve();
//拿到上传文件的唯一名称,用于断点续传
uniqueFileName = md5(''+userInfo.userId+file.name+file.type+file.lastModifiedDate+file.size);
}
}, function(jqXHR, textStatus, errorThrown){ //任何形式的验证失败,都触发重新上传
task.resolve();
//拿到上传文件的唯一名称,用于断点续传
uniqueFileName = md5(''+userInfo.userId+file.name+file.type+file.lastModifiedDate+file.size);
});
});
return $.when(task);
}
}
, beforeSend: function(block){
//分片验证是否已传过,用于断点续传
if (block['file']['source']['ext'] === 'zip' || block['file']['source']['ext'] === 'rar') {
var task = new $.Deferred();
$.ajax({
type: "POST"
, url: backEndUrl
, data: {
status: "chunkCheck"
, name: uniqueFileName
, chunkIndex: block.chunk
, size: block.end - block.start
}
, cache: false
, timeout: 1000 //todo 超时的话,只能认为该分片未上传过
, dataType: "json"
}).then(function(data, textStatus, jqXHR){
if(data.ifExist){ //若存在返回失败给WebUploader表明该分块不需要上传
task.reject();
}else{
task.resolve();
}
}, function(jqXHR, textStatus, errorThrown){ //任何形式的验证失败,都触发重新上传
task.resolve();
});
return $.when(task);
}
}
, afterSendFile: function(file){
if (file['source']['ext'] === 'zip' || file['source']['ext'] === 'rar') {
var chunksTotal = 0;
if((chunksTotal = Math.ceil(file.size/chunkSize)) > 1){
//合并请求
var task = new $.Deferred();
$.ajax({
type: "POST"
, url: backEndUrl
, data: {
status: "chunksMerge"
, name: uniqueFileName
, chunks: chunksTotal
, ext: file.ext
, md5: md5Mark
}
, cache: false
, dataType: "json"
}).then(function(data, textStatus, jqXHR){
//todo 检查响应是否正常
task.resolve();
file.path = data.path;
$("#file_name").val(data.name);
$("#file_url").val(data.path+'/'+data.name);
$("#file_size").val(file.size);
}, function(jqXHR, textStatus, errorThrown){
task.reject();
});
return $.when(task);
}else{
//UploadComlate(file);
}
}
}
});
var uploaderFile = WebUploader.create({
// 选完文件后,是否自动上传。
auto: true,
// swf文件路径
swf: '__STATIC__/webuploader/Uploader.swf',
// 文件接收服务端。
server: backEndUrl,
// 选择文件的按钮。可选。
// 内部根据当前运行是创建可能是input元素也可能是flash.
pick: {id:'#picker'},
//dnd: "#theList",
paste: document.body,
accept: {
title: '压缩包',
extensions: 'rar,zip',
mimeTypes: '.rar,.zip',
},
// 不压缩image, 默认如果是jpeg文件上传前会压缩一把再上传
resize: false,
disableGlobalDnd: true,
fileNumLimit:1,
threads:3,
compress: false,
prepareNextFile: true,
formData: function(){return $.extend(true, {}, userInfo);},
chunked:true,
chunkSize: 5*1000*1024,
duplicate: true
});
uploaderFile.on('beforeFileQueued',function(file){
var mycars=new Array("zip","rar","tar","jar");
if($.inArray(file.ext,mycars) == -1){
updateAlert('上传文件非法','tip_error');
setTimeout(function(){
$('#tip').find('.tipclose').click();
},1500);
return false;
}
//$.each(mycars,function(index,value){});
})
// 当有文件被添加进队列的时候
uploaderFile.on( 'fileQueued', function( file ) {
$("#thelist").append( '<div id="' + file.id + '" class="item">' +
'<h4 class="info">' + file.name + '</h4>' +
'<p class="state">等待上传...</p>' +
'</div>' );
});
// 文件上传过程中创建进度条实时显示。
uploaderFile.on( 'uploadProgress', function( file, percentage ) {
var $li = $( '#'+file.id ),
$percent = $li.find('.progress .progress-bar');
// 避免重复创建
if ( !$percent.length ) {
$percent = $('<div class="progress progress-striped active">' +
'<div class="progress-bar" role="progressbar" style="width: 0%">' +
'</div>' +
'</div>').appendTo( $li ).find('.progress-bar');
}
$li.find('p.state').text('上传中');
$percent.css( 'width', percentage * 100 + '%' );
$percent.text( (percentage * 100).toFixed(0) + '%' );
});
uploaderFile.on( 'uploadSuccess', function( file , response) {
$( '#'+file.id ).find('p.state').text('已上传').fadeOut(800);
$('#'+file.id).find('h4.info').append('<a href="javascript:;" class="jsdelzip table_click" style="float:none;display:inline-block;margin-left:10px;">删除</a>');
$('#'+file.id).find('.jsdelzip').on('click',function() {
$("#file_url").val('');
uploaderFile.removeFile( file.id );
$('#'+file.id).remove();
return false;
});
if(!response.chunk){
var url = response.path + "/" +response.name;
$("#file_url").val(url);
}
});
uploaderFile.on( 'uploadError', function( file ) {
$( '#'+file.id ).find('p.state').text('上传出错');
});
uploaderFile.on( 'uploadComplete', function(file) {
$( '#'+file.id ).find('.progress').fadeOut();
});
</script>
</block>

@ -1426,4 +1426,28 @@ CREATE TABLE `tab_user_action_log` (
`create_time` int(11) NULL DEFAULT 0 COMMENT '创建时间',
`remarks` text CHARACTER SET utf8 COLLATE utf8_unicode_ci NULL COMMENT '备注',
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_unicode_ci ROW_FORMAT = Dynamic;
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_unicode_ci ROW_FORMAT = Dynamic;
-- 2020-03-05 yulingwei 工单表
CREATE TABLE `tab_work_order_info` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`order_no` varchar(32) COLLATE utf8mb4_bin NOT NULL DEFAULT '' COMMENT '订单号',
`user_account` varchar(64) COLLATE utf8mb4_bin NOT NULL DEFAULT '' COMMENT '用户账号',
`type` tinyint(1) unsigned NOT NULL DEFAULT '1' COMMENT '工单类型 1资源 2反馈',
`game_id` int(11) unsigned NOT NULL DEFAULT '0' COMMENT '游戏ID',
`game_name` varchar(255) COLLATE utf8mb4_bin NOT NULL DEFAULT '',
`server_id` int(11) unsigned NOT NULL DEFAULT '0' COMMENT '区服ID',
`server_name` varchar(255) COLLATE utf8mb4_bin NOT NULL DEFAULT '',
`role_name` varchar(255) COLLATE utf8mb4_bin NOT NULL DEFAULT '',
`score` tinyint(1) unsigned NOT NULL DEFAULT '0' COMMENT '评价分数',
`attachment_url` varchar(1000) COLLATE utf8mb4_bin NOT NULL DEFAULT '' COMMENT '附件ID',
`feedback` varchar(1000) COLLATE utf8mb4_bin NOT NULL DEFAULT '',
`status` tinyint(1) unsigned NOT NULL DEFAULT '3' COMMENT '单号状态 1完成 2失败 3等待',
`remark` varchar(1000) COLLATE utf8mb4_bin NOT NULL DEFAULT '',
`creator_id` int(11) unsigned NOT NULL DEFAULT '0' COMMENT '创建者',
`handler_id` int(11) unsigned NOT NULL DEFAULT '0' COMMENT '处理人ID',
`created_time` int(11) unsigned NOT NULL DEFAULT '0' COMMENT '创建时间',
`process_log` json DEFAULT NULL COMMENT '进度日志',
`resource_num` int(11) unsigned NOT NULL DEFAULT '0' COMMENT '资源数',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=26 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin;

Loading…
Cancel
Save