xiugai
This commit is contained in:
commit
4388be95db
|
@ -9,6 +9,7 @@ scratch. This page gets rid of all links and provides the needed markup only.
|
|||
{% load static %}
|
||||
<meta charset="utf-8">
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
||||
<meta name="viewport" content="initial-scale=1.0, user-scalable=no">
|
||||
<title>集团管理分析后台</title>
|
||||
<!-- Tell the browser to be responsive to screen width -->
|
||||
<meta content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no" name="viewport">
|
||||
|
@ -23,7 +24,12 @@ scratch. This page gets rid of all links and provides the needed markup only.
|
|||
page. However, you can choose any other skin. Make sure you
|
||||
apply the skin class to the body tag so the changes take effect. -->
|
||||
<link rel="stylesheet" href="{% static 'groups/dist/css/skins/skin-blue.min.css' %}">
|
||||
|
||||
<!-- jQuery 3 -->
|
||||
<script src="{% static 'groups/bower_components/jquery/dist/jquery.min.js' %}"></script>
|
||||
<!-- Bootstrap 3.3.7 -->
|
||||
<script src="{% static 'groups/bower_components/bootstrap/dist/js/bootstrap.min.js' %}"></script>
|
||||
<!-- AdminLTE App -->
|
||||
<script src="{% static 'groups/dist/js/adminlte.min.js' %}"></script>
|
||||
<!-- HTML5 Shim and Respond.js IE8 support of HTML5 elements and media queries -->
|
||||
<!-- WARNING: Respond.js doesn't work if you view the page via file:// -->
|
||||
<!--[if lt IE 9]>
|
||||
|
@ -110,9 +116,6 @@ desired effect
|
|||
</ul>
|
||||
</li>
|
||||
<!-- Control Sidebar Toggle Button -->
|
||||
<li>
|
||||
<a href="#" data-toggle="control-sidebar"><i class="fa fa-gears"></i></a>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</nav>
|
||||
|
@ -136,7 +139,7 @@ desired effect
|
|||
</div>
|
||||
|
||||
<!-- search form (Optional) -->
|
||||
<form action="#" method="get" class="sidebar-form">
|
||||
<!-- <form action="#" method="get" class="sidebar-form">
|
||||
<div class="input-group">
|
||||
<input type="text" name="q" class="form-control" placeholder="搜索...">
|
||||
<span class="input-group-btn">
|
||||
|
@ -144,7 +147,7 @@ desired effect
|
|||
</button>
|
||||
</span>
|
||||
</div>
|
||||
</form>
|
||||
</form> -->
|
||||
<!-- /.search form -->
|
||||
|
||||
<!-- Sidebar Menu -->
|
||||
|
@ -307,12 +310,7 @@ desired effect
|
|||
|
||||
<!-- REQUIRED JS SCRIPTS -->
|
||||
|
||||
<!-- jQuery 3 -->
|
||||
<script src="{% static 'groups/bower_components/jquery/dist/jquery.min.js' %}"></script>
|
||||
<!-- Bootstrap 3.3.7 -->
|
||||
<script src="{% static 'groups/bower_components/bootstrap/dist/js/bootstrap.min.js' %}"></script>
|
||||
<!-- AdminLTE App -->
|
||||
<script src="{% static 'groups/dist/js/adminlte.min.js' %}"></script>
|
||||
|
||||
|
||||
<!-- Optionally, you can add Slimscroll and FastClick plugins.
|
||||
Both of these plugins are recommended to enhance the
|
||||
|
|
|
@ -1,497 +1,176 @@
|
|||
{% extends "./base.html" %}
|
||||
|
||||
{% block pagehead %}
|
||||
<h1>
|
||||
本月数据
|
||||
<small>Month Data</small>
|
||||
</h1>
|
||||
<ol class="breadcrumb">
|
||||
<li class="active"><a href="{% url 'groups_index' %}"><i class="fa fa-dashboard"></i> 主页</a></li>
|
||||
</ol>
|
||||
{% endblock %}
|
||||
{% block content %}
|
||||
<!-- Info boxes -->
|
||||
<div class="row">
|
||||
<div class="col-md-3 col-sm-6 col-xs-12">
|
||||
<div class="info-box">
|
||||
<span class="info-box-icon bg-aqua"><i class="ion ion-ios-gear-outline"></i></span>
|
||||
<!-- Info boxes -->
|
||||
<div class="row">
|
||||
<div class="col-lg-2 col-xs-6">
|
||||
<!-- small box -->
|
||||
<div class="small-box bg-yellow">
|
||||
<div class="inner">
|
||||
<h3>{{troublenum}}</h3>
|
||||
|
||||
<div class="info-box-content">
|
||||
<span class="info-box-text">CPU Traffic</span>
|
||||
<span class="info-box-number">90<small>%</small></span>
|
||||
</div>
|
||||
<!-- /.info-box-content -->
|
||||
</div>
|
||||
<!-- /.info-box -->
|
||||
</div>
|
||||
<!-- /.col -->
|
||||
<div class="col-md-3 col-sm-6 col-xs-12">
|
||||
<div class="info-box">
|
||||
<span class="info-box-icon bg-red"><i class="fa fa-google-plus"></i></span>
|
||||
|
||||
<div class="info-box-content">
|
||||
<span class="info-box-text">Likes</span>
|
||||
<span class="info-box-number">41,410</span>
|
||||
</div>
|
||||
<!-- /.info-box-content -->
|
||||
</div>
|
||||
<!-- /.info-box -->
|
||||
</div>
|
||||
<!-- /.col -->
|
||||
|
||||
<!-- fix for small devices only -->
|
||||
<div class="clearfix visible-sm-block"></div>
|
||||
|
||||
<div class="col-md-3 col-sm-6 col-xs-12">
|
||||
<div class="info-box">
|
||||
<span class="info-box-icon bg-green"><i class="ion ion-ios-cart-outline"></i></span>
|
||||
|
||||
<div class="info-box-content">
|
||||
<span class="info-box-text">Sales</span>
|
||||
<span class="info-box-number">760</span>
|
||||
</div>
|
||||
<!-- /.info-box-content -->
|
||||
</div>
|
||||
<!-- /.info-box -->
|
||||
</div>
|
||||
<!-- /.col -->
|
||||
<div class="col-md-3 col-sm-6 col-xs-12">
|
||||
<div class="info-box">
|
||||
<span class="info-box-icon bg-yellow"><i class="ion ion-ios-people-outline"></i></span>
|
||||
|
||||
<div class="info-box-content">
|
||||
<span class="info-box-text">New Members</span>
|
||||
<span class="info-box-number">2,000</span>
|
||||
</div>
|
||||
<!-- /.info-box-content -->
|
||||
</div>
|
||||
<!-- /.info-box -->
|
||||
</div>
|
||||
<!-- /.col -->
|
||||
<p>事故隐患</p>
|
||||
</div>
|
||||
<!-- /.row -->
|
||||
|
||||
<div class="row">
|
||||
<div class="col-md-12">
|
||||
<div class="box">
|
||||
<div class="box-header with-border">
|
||||
<h3 class="box-title">Monthly Recap Report</h3>
|
||||
|
||||
<div class="box-tools pull-right">
|
||||
<button type="button" class="btn btn-box-tool" data-widget="collapse"><i class="fa fa-minus"></i>
|
||||
</button>
|
||||
<div class="btn-group">
|
||||
<button type="button" class="btn btn-box-tool dropdown-toggle" data-toggle="dropdown">
|
||||
<i class="fa fa-wrench"></i></button>
|
||||
<ul class="dropdown-menu" role="menu">
|
||||
<li><a href="#">Action</a></li>
|
||||
<li><a href="#">Another action</a></li>
|
||||
<li><a href="#">Something else here</a></li>
|
||||
<li class="divider"></li>
|
||||
<li><a href="#">Separated link</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<button type="button" class="btn btn-box-tool" data-widget="remove"><i class="fa fa-times"></i></button>
|
||||
</div>
|
||||
</div>
|
||||
<!-- /.box-header -->
|
||||
<div class="box-body">
|
||||
<div class="row">
|
||||
<div class="col-md-8">
|
||||
<p class="text-center">
|
||||
<strong>Sales: 1 Jan, 2014 - 30 Jul, 2014</strong>
|
||||
</p>
|
||||
|
||||
<div class="chart">
|
||||
<!-- Sales Chart Canvas -->
|
||||
<canvas id="salesChart" style="height: 180px;"></canvas>
|
||||
</div>
|
||||
<!-- /.chart-responsive -->
|
||||
</div>
|
||||
<!-- /.col -->
|
||||
<div class="col-md-4">
|
||||
<p class="text-center">
|
||||
<strong>Goal Completion</strong>
|
||||
</p>
|
||||
|
||||
<div class="progress-group">
|
||||
<span class="progress-text">Add Products to Cart</span>
|
||||
<span class="progress-number"><b>160</b>/200</span>
|
||||
|
||||
<div class="progress sm">
|
||||
<div class="progress-bar progress-bar-aqua" style="width: 80%"></div>
|
||||
</div>
|
||||
</div>
|
||||
<!-- /.progress-group -->
|
||||
<div class="progress-group">
|
||||
<span class="progress-text">Complete Purchase</span>
|
||||
<span class="progress-number"><b>310</b>/400</span>
|
||||
|
||||
<div class="progress sm">
|
||||
<div class="progress-bar progress-bar-red" style="width: 80%"></div>
|
||||
</div>
|
||||
</div>
|
||||
<!-- /.progress-group -->
|
||||
<div class="progress-group">
|
||||
<span class="progress-text">Visit Premium Page</span>
|
||||
<span class="progress-number"><b>480</b>/800</span>
|
||||
|
||||
<div class="progress sm">
|
||||
<div class="progress-bar progress-bar-green" style="width: 80%"></div>
|
||||
</div>
|
||||
</div>
|
||||
<!-- /.progress-group -->
|
||||
<div class="progress-group">
|
||||
<span class="progress-text">Send Inquiries</span>
|
||||
<span class="progress-number"><b>250</b>/500</span>
|
||||
|
||||
<div class="progress sm">
|
||||
<div class="progress-bar progress-bar-yellow" style="width: 80%"></div>
|
||||
</div>
|
||||
</div>
|
||||
<!-- /.progress-group -->
|
||||
</div>
|
||||
<!-- /.col -->
|
||||
</div>
|
||||
<!-- /.row -->
|
||||
</div>
|
||||
<!-- ./box-body -->
|
||||
<div class="box-footer">
|
||||
<div class="row">
|
||||
<div class="col-sm-3 col-xs-6">
|
||||
<div class="description-block border-right">
|
||||
<span class="description-percentage text-green"><i class="fa fa-caret-up"></i> 17%</span>
|
||||
<h5 class="description-header">$35,210.43</h5>
|
||||
<span class="description-text">TOTAL REVENUE</span>
|
||||
</div>
|
||||
<!-- /.description-block -->
|
||||
</div>
|
||||
<!-- /.col -->
|
||||
<div class="col-sm-3 col-xs-6">
|
||||
<div class="description-block border-right">
|
||||
<span class="description-percentage text-yellow"><i class="fa fa-caret-left"></i> 0%</span>
|
||||
<h5 class="description-header">$10,390.90</h5>
|
||||
<span class="description-text">TOTAL COST</span>
|
||||
</div>
|
||||
<!-- /.description-block -->
|
||||
</div>
|
||||
<!-- /.col -->
|
||||
<div class="col-sm-3 col-xs-6">
|
||||
<div class="description-block border-right">
|
||||
<span class="description-percentage text-green"><i class="fa fa-caret-up"></i> 20%</span>
|
||||
<h5 class="description-header">$24,813.53</h5>
|
||||
<span class="description-text">TOTAL PROFIT</span>
|
||||
</div>
|
||||
<!-- /.description-block -->
|
||||
</div>
|
||||
<!-- /.col -->
|
||||
<div class="col-sm-3 col-xs-6">
|
||||
<div class="description-block">
|
||||
<span class="description-percentage text-red"><i class="fa fa-caret-down"></i> 18%</span>
|
||||
<h5 class="description-header">1200</h5>
|
||||
<span class="description-text">GOAL COMPLETIONS</span>
|
||||
</div>
|
||||
<!-- /.description-block -->
|
||||
</div>
|
||||
</div>
|
||||
<!-- /.row -->
|
||||
</div>
|
||||
<!-- /.box-footer -->
|
||||
</div>
|
||||
<!-- /.box -->
|
||||
</div>
|
||||
<!-- /.col -->
|
||||
<div class="icon">
|
||||
<i class="fa fa-camera"></i>
|
||||
</div>
|
||||
<!-- /.row -->
|
||||
<a href="{% url 'groups_trouble' %}" class="small-box-footer">更多分析 <i class="fa fa-arrow-circle-right"></i></a>
|
||||
</div>
|
||||
</div>
|
||||
<!-- ./col -->
|
||||
<div class="col-lg-2 col-xs-6">
|
||||
<!-- small box -->
|
||||
<div class="small-box bg-green">
|
||||
<div class="inner">
|
||||
<h3>{{observenum}}
|
||||
<!-- <sup style="font-size: 20px">%</sup> -->
|
||||
</h3>
|
||||
|
||||
<!-- Main row -->
|
||||
<div class="row">
|
||||
<!-- Left col -->
|
||||
<div class="col-md-8">
|
||||
<!-- MAP & BOX PANE -->
|
||||
<div class="box box-success">
|
||||
<div class="box-header with-border">
|
||||
<h3 class="box-title">Visitors Report</h3>
|
||||
|
||||
<div class="box-tools pull-right">
|
||||
<button type="button" class="btn btn-box-tool" data-widget="collapse"><i class="fa fa-minus"></i>
|
||||
</button>
|
||||
<button type="button" class="btn btn-box-tool" data-widget="remove"><i class="fa fa-times"></i></button>
|
||||
</div>
|
||||
</div>
|
||||
<!-- /.box-header -->
|
||||
<div class="box-body no-padding">
|
||||
<div class="row">
|
||||
<div class="col-md-9 col-sm-8">
|
||||
<div class="pad">
|
||||
<!-- Map will be created here -->
|
||||
<div id="world-map-markers" style="height: 325px;"></div>
|
||||
</div>
|
||||
</div>
|
||||
<!-- /.col -->
|
||||
<div class="col-md-3 col-sm-4">
|
||||
<div class="pad box-pane-right bg-green" style="min-height: 280px">
|
||||
<div class="description-block margin-bottom">
|
||||
<div class="sparkbar pad" data-color="#fff">90,70,90,70,75,80,70</div>
|
||||
<h5 class="description-header">8390</h5>
|
||||
<span class="description-text">Visits</span>
|
||||
</div>
|
||||
<!-- /.description-block -->
|
||||
<div class="description-block margin-bottom">
|
||||
<div class="sparkbar pad" data-color="#fff">90,50,90,70,61,83,63</div>
|
||||
<h5 class="description-header">30%</h5>
|
||||
<span class="description-text">Referrals</span>
|
||||
</div>
|
||||
<!-- /.description-block -->
|
||||
<div class="description-block">
|
||||
<div class="sparkbar pad" data-color="#fff">90,50,90,70,61,83,63</div>
|
||||
<h5 class="description-header">70%</h5>
|
||||
<span class="description-text">Organic</span>
|
||||
</div>
|
||||
<!-- /.description-block -->
|
||||
</div>
|
||||
</div>
|
||||
<!-- /.col -->
|
||||
</div>
|
||||
<!-- /.row -->
|
||||
</div>
|
||||
<!-- /.box-body -->
|
||||
</div>
|
||||
<!-- /.box -->
|
||||
<!-- TABLE: LATEST ORDERS -->
|
||||
<div class="box box-info">
|
||||
<div class="box-header with-border">
|
||||
<h3 class="box-title">Latest Orders</h3>
|
||||
|
||||
<div class="box-tools pull-right">
|
||||
<button type="button" class="btn btn-box-tool" data-widget="collapse"><i class="fa fa-minus"></i>
|
||||
</button>
|
||||
<button type="button" class="btn btn-box-tool" data-widget="remove"><i class="fa fa-times"></i></button>
|
||||
</div>
|
||||
</div>
|
||||
<!-- /.box-header -->
|
||||
<div class="box-body">
|
||||
<div class="table-responsive">
|
||||
<table class="table no-margin">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Order ID</th>
|
||||
<th>Item</th>
|
||||
<th>Status</th>
|
||||
<th>Popularity</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td><a href="pages/examples/invoice.html">OR9842</a></td>
|
||||
<td>Call of Duty IV</td>
|
||||
<td><span class="label label-success">Shipped</span></td>
|
||||
<td>
|
||||
<div class="sparkbar" data-color="#00a65a" data-height="20">90,80,90,-70,61,-83,63</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="pages/examples/invoice.html">OR1848</a></td>
|
||||
<td>Samsung Smart TV</td>
|
||||
<td><span class="label label-warning">Pending</span></td>
|
||||
<td>
|
||||
<div class="sparkbar" data-color="#f39c12" data-height="20">90,80,-90,70,61,-83,68</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="pages/examples/invoice.html">OR7429</a></td>
|
||||
<td>iPhone 6 Plus</td>
|
||||
<td><span class="label label-danger">Delivered</span></td>
|
||||
<td>
|
||||
<div class="sparkbar" data-color="#f56954" data-height="20">90,-80,90,70,-61,83,63</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="pages/examples/invoice.html">OR7429</a></td>
|
||||
<td>Samsung Smart TV</td>
|
||||
<td><span class="label label-info">Processing</span></td>
|
||||
<td>
|
||||
<div class="sparkbar" data-color="#00c0ef" data-height="20">90,80,-90,70,-61,83,63</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="pages/examples/invoice.html">OR1848</a></td>
|
||||
<td>Samsung Smart TV</td>
|
||||
<td><span class="label label-warning">Pending</span></td>
|
||||
<td>
|
||||
<div class="sparkbar" data-color="#f39c12" data-height="20">90,80,-90,70,61,-83,68</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="pages/examples/invoice.html">OR7429</a></td>
|
||||
<td>iPhone 6 Plus</td>
|
||||
<td><span class="label label-danger">Delivered</span></td>
|
||||
<td>
|
||||
<div class="sparkbar" data-color="#f56954" data-height="20">90,-80,90,70,-61,83,63</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="pages/examples/invoice.html">OR9842</a></td>
|
||||
<td>Call of Duty IV</td>
|
||||
<td><span class="label label-success">Shipped</span></td>
|
||||
<td>
|
||||
<div class="sparkbar" data-color="#00a65a" data-height="20">90,80,90,-70,61,-83,63</div>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<!-- /.table-responsive -->
|
||||
</div>
|
||||
<!-- /.box-body -->
|
||||
<div class="box-footer clearfix">
|
||||
<a href="javascript:void(0)" class="btn btn-sm btn-info btn-flat pull-left">Place New Order</a>
|
||||
<a href="javascript:void(0)" class="btn btn-sm btn-default btn-flat pull-right">View All Orders</a>
|
||||
</div>
|
||||
<!-- /.box-footer -->
|
||||
</div>
|
||||
<!-- /.box -->
|
||||
</div>
|
||||
<!-- /.col -->
|
||||
|
||||
<div class="col-md-4">
|
||||
<!-- Info Boxes Style 2 -->
|
||||
<div class="info-box bg-yellow">
|
||||
<span class="info-box-icon"><i class="ion ion-ios-pricetag-outline"></i></span>
|
||||
|
||||
<div class="info-box-content">
|
||||
<span class="info-box-text">Inventory</span>
|
||||
<span class="info-box-number">5,200</span>
|
||||
|
||||
<div class="progress">
|
||||
<div class="progress-bar" style="width: 50%"></div>
|
||||
</div>
|
||||
<span class="progress-description">
|
||||
50% Increase in 30 Days
|
||||
</span>
|
||||
</div>
|
||||
<!-- /.info-box-content -->
|
||||
</div>
|
||||
<!-- /.info-box -->
|
||||
<div class="info-box bg-green">
|
||||
<span class="info-box-icon"><i class="ion ion-ios-heart-outline"></i></span>
|
||||
|
||||
<div class="info-box-content">
|
||||
<span class="info-box-text">Mentions</span>
|
||||
<span class="info-box-number">92,050</span>
|
||||
|
||||
<div class="progress">
|
||||
<div class="progress-bar" style="width: 20%"></div>
|
||||
</div>
|
||||
<span class="progress-description">
|
||||
20% Increase in 30 Days
|
||||
</span>
|
||||
</div>
|
||||
<!-- /.info-box-content -->
|
||||
</div>
|
||||
<!-- /.info-box -->
|
||||
<div class="info-box bg-red">
|
||||
<span class="info-box-icon"><i class="ion ion-ios-cloud-download-outline"></i></span>
|
||||
|
||||
<div class="info-box-content">
|
||||
<span class="info-box-text">Downloads</span>
|
||||
<span class="info-box-number">114,381</span>
|
||||
|
||||
<div class="progress">
|
||||
<div class="progress-bar" style="width: 70%"></div>
|
||||
</div>
|
||||
<span class="progress-description">
|
||||
70% Increase in 30 Days
|
||||
</span>
|
||||
</div>
|
||||
<!-- /.info-box-content -->
|
||||
</div>
|
||||
<!-- /.info-box -->
|
||||
<div class="info-box bg-aqua">
|
||||
<span class="info-box-icon"><i class="ion-ios-chatbubble-outline"></i></span>
|
||||
|
||||
<div class="info-box-content">
|
||||
<span class="info-box-text">Direct Messages</span>
|
||||
<span class="info-box-number">163,921</span>
|
||||
|
||||
<div class="progress">
|
||||
<div class="progress-bar" style="width: 40%"></div>
|
||||
</div>
|
||||
<span class="progress-description">
|
||||
40% Increase in 30 Days
|
||||
</span>
|
||||
</div>
|
||||
<!-- /.info-box-content -->
|
||||
</div>
|
||||
<!-- /.info-box -->
|
||||
<!-- PRODUCT LIST -->
|
||||
<div class="box box-primary">
|
||||
<div class="box-header with-border">
|
||||
<h3 class="box-title">Recently Added Products</h3>
|
||||
|
||||
<div class="box-tools pull-right">
|
||||
<button type="button" class="btn btn-box-tool" data-widget="collapse"><i class="fa fa-minus"></i>
|
||||
</button>
|
||||
<button type="button" class="btn btn-box-tool" data-widget="remove"><i class="fa fa-times"></i></button>
|
||||
</div>
|
||||
</div>
|
||||
<!-- /.box-header -->
|
||||
<div class="box-body">
|
||||
<ul class="products-list product-list-in-box">
|
||||
<li class="item">
|
||||
<div class="product-img">
|
||||
<img src="dist/img/default-50x50.gif" alt="Product Image">
|
||||
</div>
|
||||
<div class="product-info">
|
||||
<a href="javascript:void(0)" class="product-title">Samsung TV
|
||||
<span class="label label-warning pull-right">$1800</span></a>
|
||||
<span class="product-description">
|
||||
Samsung 32" 1080p 60Hz LED Smart HDTV.
|
||||
</span>
|
||||
</div>
|
||||
</li>
|
||||
<!-- /.item -->
|
||||
<li class="item">
|
||||
<div class="product-img">
|
||||
<img src="dist/img/default-50x50.gif" alt="Product Image">
|
||||
</div>
|
||||
<div class="product-info">
|
||||
<a href="javascript:void(0)" class="product-title">Bicycle
|
||||
<span class="label label-info pull-right">$700</span></a>
|
||||
<span class="product-description">
|
||||
26" Mongoose Dolomite Men's 7-speed, Navy Blue.
|
||||
</span>
|
||||
</div>
|
||||
</li>
|
||||
<!-- /.item -->
|
||||
<li class="item">
|
||||
<div class="product-img">
|
||||
<img src="dist/img/default-50x50.gif" alt="Product Image">
|
||||
</div>
|
||||
<div class="product-info">
|
||||
<a href="javascript:void(0)" class="product-title">Xbox One <span
|
||||
class="label label-danger pull-right">$350</span></a>
|
||||
<span class="product-description">
|
||||
Xbox One Console Bundle with Halo Master Chief Collection.
|
||||
</span>
|
||||
</div>
|
||||
</li>
|
||||
<!-- /.item -->
|
||||
<li class="item">
|
||||
<div class="product-img">
|
||||
<img src="dist/img/default-50x50.gif" alt="Product Image">
|
||||
</div>
|
||||
<div class="product-info">
|
||||
<a href="javascript:void(0)" class="product-title">PlayStation 4
|
||||
<span class="label label-success pull-right">$399</span></a>
|
||||
<span class="product-description">
|
||||
PlayStation 4 500GB Console (PS4)
|
||||
</span>
|
||||
</div>
|
||||
</li>
|
||||
<!-- /.item -->
|
||||
</ul>
|
||||
</div>
|
||||
<!-- /.box-body -->
|
||||
<div class="box-footer text-center">
|
||||
<a href="javascript:void(0)" class="uppercase">View All Products</a>
|
||||
</div>
|
||||
<!-- /.box-footer -->
|
||||
</div>
|
||||
<!-- /.box -->
|
||||
</div>
|
||||
<!-- /.col -->
|
||||
<p>行为观察</p>
|
||||
</div>
|
||||
<!-- /.row -->
|
||||
<div class="icon">
|
||||
<i class="fa fa-eye"></i>
|
||||
</div>
|
||||
<a href="#" class="small-box-footer">更多分析 <i class="fa fa-arrow-circle-right"></i></a>
|
||||
</div>
|
||||
</div>
|
||||
<!-- ./col -->
|
||||
<div class="col-lg-2 col-xs-6">
|
||||
<!-- small box -->
|
||||
<div class="small-box bg-red">
|
||||
<div class="inner">
|
||||
<h3>{{missnum}}</h3>
|
||||
|
||||
<p>未遂事件</p>
|
||||
</div>
|
||||
<div class="icon">
|
||||
<i class="fa fa-life-ring"></i>
|
||||
</div>
|
||||
<a href="#" class="small-box-footer">更多分析 <i class="fa fa-arrow-circle-right"></i></a>
|
||||
</div>
|
||||
</div>
|
||||
<!-- ./col -->
|
||||
<div class="col-lg-2 col-xs-6">
|
||||
<!-- small box -->
|
||||
<div class="small-box bg-aqua">
|
||||
<div class="inner">
|
||||
<h3>{{trainnum}}</h3>
|
||||
|
||||
<p>教育培训</p>
|
||||
</div>
|
||||
<div class="icon">
|
||||
<i class="fa fa-graduation-cap"></i>
|
||||
</div>
|
||||
<a href="#" class="small-box-footer">更多分析 <i class="fa fa-arrow-circle-right"></i></a>
|
||||
</div>
|
||||
</div>
|
||||
<!-- ./col -->
|
||||
<div class="col-lg-2 col-xs-6">
|
||||
<!-- small box -->
|
||||
<div class="small-box bg-teal">
|
||||
<div class="inner">
|
||||
<h3>{{companynum}}</h3>
|
||||
|
||||
<p>下属公司数</p>
|
||||
</div>
|
||||
<div class="icon">
|
||||
<i class="fa fa-industry"></i>
|
||||
</div>
|
||||
<a href="#" class="small-box-footer">更多分析 <i class="fa fa-arrow-circle-right"></i></a>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-lg-2 col-xs-6">
|
||||
<!-- small box -->
|
||||
<div class="small-box bg-orange">
|
||||
<div class="inner">
|
||||
<h3>{{usernum}}</h3>
|
||||
|
||||
<p>下属员工总数</p>
|
||||
</div>
|
||||
<div class="icon">
|
||||
<i class="fa fa-users"></i>
|
||||
</div>
|
||||
<a href="#" class="small-box-footer">更多分析 <i class="fa fa-arrow-circle-right"></i></a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!-- /.row -->
|
||||
|
||||
<div class="row">
|
||||
|
||||
<div class="col-md-12">
|
||||
<h3>
|
||||
{{group.groupname}}
|
||||
</h3>
|
||||
<div class="box">
|
||||
<div class="box-header with-border">
|
||||
<h3 class="box-title">公司分布</h3>
|
||||
|
||||
<div class="box-tools pull-right">
|
||||
<button type="button" class="btn btn-box-tool" data-widget="collapse"><i class="fa fa-minus"></i>
|
||||
</button>
|
||||
<button type="button" class="btn btn-box-tool" data-widget="remove"><i class="fa fa-times"></i></button>
|
||||
</div>
|
||||
</div>
|
||||
<!-- /.box-header -->
|
||||
<div class="box-body">
|
||||
<div class="row">
|
||||
<div class="col-md-12">
|
||||
<!-- <p class="text-center">
|
||||
<strong>Sales: 1 Jan, 2014 - 30 Jul, 2014</strong>
|
||||
</p> -->
|
||||
|
||||
<div id="container" style="height: 800px;width:auto">
|
||||
|
||||
</div>
|
||||
<!-- /.chart-responsive -->
|
||||
</div>
|
||||
</div>
|
||||
<!-- /.row -->
|
||||
</div>
|
||||
<!-- ./box-body -->
|
||||
</div>
|
||||
<!-- /.box -->
|
||||
</div>
|
||||
<!-- /.col -->
|
||||
</div>
|
||||
<!-- /.row -->
|
||||
<script src="https://webapi.amap.com/maps?v=1.4.15&key=978fc7c286560aa4cb3f18ef06737f9a"></script>
|
||||
<script>
|
||||
var map = new AMap.Map('container', {
|
||||
resizeEnable: true, //是否监控地图容器尺寸变化
|
||||
zoom: 6, //初始化地图层级
|
||||
center: [116.397428, 39.90923],//初始化地图中心点
|
||||
//viewMode:'3D'//使用3D视图
|
||||
});
|
||||
$.getJSON('/groups/api/positions', function (res) {
|
||||
var x=0,y=0,num=0;
|
||||
for (var i = 0; i < res.data.length; i++) {
|
||||
let podata = res.data[i]
|
||||
if(podata.position !=null){
|
||||
let arrayposition = podata.position.location.split(',')
|
||||
x = x + parseFloat(arrayposition[0])
|
||||
y = y + parseFloat(arrayposition[1])
|
||||
num = num + 1
|
||||
let marker = new AMap.Marker({
|
||||
position: podata.position.location.split(','), // 经纬度对象,也可以是经纬度构成的一维数组[116.39, 39.9]
|
||||
label:{'content':podata.partname,'direction':'bottom'}
|
||||
// title: res.data[i].partname,
|
||||
// bubble:true,
|
||||
// clickable:true
|
||||
});
|
||||
map.add(marker);
|
||||
}
|
||||
}
|
||||
map.setCenter([x/num,y/num])
|
||||
})
|
||||
</script>
|
||||
{% endblock %}
|
|
@ -16,6 +16,8 @@ urlpatterns = [
|
|||
path('tain/', views.job, name='groups_train'),#教育培训统计图
|
||||
path('test/', views.job, name='groups_test'),#在线考试统计图
|
||||
path('refresh_captcha/', views.refresh_captcha),
|
||||
path('updateposition/',views.updateposition),
|
||||
path('api/positions',views.apipositions),
|
||||
path('api/troubleChart',views.troubleChart),
|
||||
path('api/observeChart',views.observeChart)
|
||||
]
|
||||
]
|
||||
|
|
|
@ -1,19 +1,25 @@
|
|||
from django.http import HttpResponse
|
||||
from django.http import HttpResponse,JsonResponse
|
||||
from django.shortcuts import render
|
||||
from django.shortcuts import redirect
|
||||
from .models import Group,GroupUser
|
||||
from .forms import GroupUserForm
|
||||
from safesite import models as s_models
|
||||
from safesite.tasks import gettime
|
||||
import requests
|
||||
import json
|
||||
import time
|
||||
from datetime import datetime,date,timedelta
|
||||
from safesite.tasks import send_wechatmsgs,send_wechatmsg,yjjs,gettime,yjjs_px,yjjs_yl,updateTzzs,updateAqzs,yjjs_gc,yjjs_ws
|
||||
from django.db.models import Q
|
||||
from django.core.serializers.json import DjangoJSONEncoder
|
||||
from django.db.models import F,Count,Sum
|
||||
def index(request):
|
||||
if not request.session.get('is_login', None):
|
||||
return redirect('/groups/login/')
|
||||
return render(request, 'groups/index.html')
|
||||
from django.db.models import Q,F,Count,Sum
|
||||
|
||||
def check_login(func): # 自定义登录验证装饰器
|
||||
def warpper(request,*args,**kwargs):
|
||||
is_login = request.session.get('is_login', False)
|
||||
if is_login:
|
||||
return func(request,*args,**kwargs)
|
||||
else:
|
||||
return redirect('/groups/login')
|
||||
return warpper
|
||||
|
||||
def login(request):
|
||||
# 不允许重复登录
|
||||
|
@ -44,8 +50,8 @@ def login(request):
|
|||
return render(request, 'groups/login.html', locals())
|
||||
|
||||
def logout(request):
|
||||
if not request.session.get('is_login', None):
|
||||
return redirect('/groups/login')
|
||||
# if not request.session.get('is_login', None):
|
||||
# return redirect('/groups/login')
|
||||
request.session.flush()
|
||||
return redirect('/groups/login')
|
||||
|
||||
|
@ -57,7 +63,7 @@ def refresh_captcha(request):
|
|||
image_url = captcha_image_url(hashkey)
|
||||
return HttpResponse(json.dumps({'key': hashkey, 'image_url': image_url}), content_type='application/json')
|
||||
|
||||
|
||||
@check_login
|
||||
def company(request):
|
||||
companys = GroupUser.objects.get(id = request.session['user_id']).group.members.all()
|
||||
for i in companys:
|
||||
|
@ -66,6 +72,48 @@ def company(request):
|
|||
|
||||
def job(request):
|
||||
return render(request, 'groups/job.html', locals())
|
||||
|
||||
@check_login
|
||||
def index(req):
|
||||
first_day,first_day_of_next_month=gettime()
|
||||
group = GroupUser.objects.get(id = req.session['user_id']).group
|
||||
companys = group.members.all()
|
||||
troublenum = s_models.Trouble.objects.filter(deletemark=1,usecomp__in=companys,fxsj__range=(first_day, first_day_of_next_month)).count()
|
||||
observenum = s_models.Observe.objects.filter(deletemark=1,usecomp__in=companys,looktime__range=(first_day, first_day_of_next_month)).count()
|
||||
missnum = s_models.Miss.objects.filter(deletemark=1,usecomp__in=companys,misstime__range=(first_day, first_day_of_next_month)).count()
|
||||
trainnum = s_models.Train.objects.filter(deletemark=1,usecomp__in=companys,starttime__range=(first_day, first_day_of_next_month)).count()
|
||||
companynum = len(companys)
|
||||
usernum = s_models.User.objects.filter(deletemark=1,usecomp__in=companys).count()
|
||||
return render(req, 'groups/index.html', locals())
|
||||
|
||||
|
||||
def updateposition(req):
|
||||
allcompanys = s_models.Partment.objects.filter(deletemark=1,iscompany=1)
|
||||
for i in allcompanys:
|
||||
address = i.partname
|
||||
data = getPosition(address)
|
||||
if data['status'] == '1' and int(data['count'])>0:
|
||||
i.position = data['geocodes'][0]
|
||||
i.save()
|
||||
else:
|
||||
address = i.partname.replace('公司','').replace('责任','').replace('有限','')
|
||||
data = getPosition(address)
|
||||
if data['status'] == '1' and int(data['count'])>0:
|
||||
i.position = data['geocodes'][0]
|
||||
i.save()
|
||||
return JsonResponse({"code":1})
|
||||
|
||||
def getPosition(address):
|
||||
url = 'http://restapi.amap.com/v3/geocode/geo'
|
||||
par = {'address': address, 'key': '86e0993305a427ac2d0b5371ad97f242'}
|
||||
res = requests.get(url, par)
|
||||
json_data = json.loads(res.text)
|
||||
return json_data
|
||||
|
||||
def apipositions(req):
|
||||
companys = GroupUser.objects.get(id = req.session['user_id']).group.members.all()
|
||||
positions = companys.values('position','partname')
|
||||
return JsonResponse({"code":1,"data":list(positions)})
|
||||
def trouble(request):#隐患排查
|
||||
return render(request, 'groups/troublepic.html', locals())
|
||||
def observe(request):#行为观察
|
||||
|
@ -95,6 +143,6 @@ def observeChart(request):#行为观察
|
|||
hjzj=[]#环境整洁
|
||||
first_day,first_day_of_next_month = gettime(datetime(year,month,1))
|
||||
companys = GroupUser.objects.get(id = request.session['user_id']).group.members.all()
|
||||
|
||||
|
||||
return HttpResponse(json.dumps({'code':companys}), content_type='application/json')
|
||||
|
||||
return HttpResponse(json.dumps({'code':1,'data':{'list':list(Observe)},'userfy':userfy,'userwz':userwz,'grfh':grfh,'gjhsb':gjhsb,'cxhbz':cxhbz,'rtgcx':rtgcx,'hjzj':hjzj,}), content_type='application/json')
|
||||
|
||||
|
|
|
@ -268,10 +268,14 @@ def drusers(companyid,path):
|
|||
wb = load_workbook(path)
|
||||
sheet = wb.worksheets[0]
|
||||
partdict = {}
|
||||
groupdict = {}
|
||||
userdict = {}
|
||||
parts = Partment.objects.filter(partlink__contains=',' + companyid + ',')|Partment.objects.filter(partid=companyid) #获取所有部门
|
||||
for i in parts:
|
||||
partdict[i.partname] = i.partid
|
||||
# groups = Group.objects.filter(usecomp__partid=companyid)
|
||||
# for i in groups:
|
||||
# groupdict[i.groupname] = i.groupid
|
||||
i = 4
|
||||
while sheet['C'+str(i)].value !=None:
|
||||
empid = sheet['A'+str(i)].value
|
||||
|
@ -283,7 +287,7 @@ def drusers(companyid,path):
|
|||
username = sheet['C'+str(i)].value
|
||||
if isinstance(username,str):
|
||||
username = username.replace(' ', '')
|
||||
partname = sheet['D'+str(i)].value
|
||||
partname = sheet['D'+str(i)].value #部门
|
||||
if partname != None:
|
||||
partname = partname.replace(' ', '')
|
||||
if partname not in partdict:
|
||||
|
@ -293,6 +297,14 @@ def drusers(companyid,path):
|
|||
a.partlink = Partment.objects.get(partid=companyid).partlink + str(companyid) + ','
|
||||
a.save()
|
||||
partdict[partname] = a.partid
|
||||
# groupname = sheet['E'+str(i)].value
|
||||
# groupname = groupname.replace(' ', '') if groupname else None
|
||||
# if groupname and groupname not in groupdict:
|
||||
# obj = Group()
|
||||
# obj.groupname = groupname
|
||||
# obj.usecomp = Partment.objects.get(partid=companyid)
|
||||
# obj.save()
|
||||
# groupdict[groupname] = obj.groupid
|
||||
if User.objects.filter(username = username).count() == 0:
|
||||
a = User()
|
||||
a.name = name
|
||||
|
@ -303,6 +315,8 @@ def drusers(companyid,path):
|
|||
a.usecomp = Partment.objects.get(partid=companyid)
|
||||
a.save()
|
||||
Group.objects.get(usecomp__partid=companyid,grouptype=3).users.add(a) #赋权
|
||||
# if groupname:
|
||||
# Group.objects.get(groupid=groupdict[groupname]).users.add(a)
|
||||
else:
|
||||
userdict[username]=i
|
||||
i = i + 1
|
||||
|
|
|
@ -0,0 +1,23 @@
|
|||
# Generated by Django 2.1.5 on 2019-10-22 16:35
|
||||
|
||||
import django.contrib.postgres.fields.jsonb
|
||||
from django.db import migrations
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('safesite', '0278_auto_20191018_1723'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
# migrations.RemoveField(
|
||||
# model_name='companyinfo',
|
||||
# name='liaison_fax',
|
||||
# ),
|
||||
migrations.AddField(
|
||||
model_name='partment',
|
||||
name='position',
|
||||
field=django.contrib.postgres.fields.jsonb.JSONField(blank=True, null=True, verbose_name='坐标'),
|
||||
),
|
||||
]
|
|
@ -0,0 +1,32 @@
|
|||
# Generated by Django 2.1.5 on 2019-10-23 17:11
|
||||
|
||||
from django.db import migrations, models
|
||||
import django.db.models.deletion
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('safesite', '0279_auto_20191022_1635'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.CreateModel(
|
||||
name='Groupuser2',
|
||||
fields=[
|
||||
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('group', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='safesite.Group')),
|
||||
('part', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='safesite.Partment')),
|
||||
('user', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='safesite.User')),
|
||||
],
|
||||
),
|
||||
# migrations.RemoveField(
|
||||
# model_name='companyinfo',
|
||||
# name='liaison_fax',
|
||||
# ),
|
||||
migrations.AddField(
|
||||
model_name='group',
|
||||
name='users2',
|
||||
field=models.ManyToManyField(related_name='userg2', through='safesite.Groupuser2', to='safesite.User'),
|
||||
),
|
||||
]
|
|
@ -17,6 +17,7 @@ class Partment(models.Model):
|
|||
aqy = models.CharField(max_length=1000,default=',')#安全员
|
||||
bmzg = models.CharField(max_length=1000,default=',')#主管
|
||||
bsq = models.CharField(max_length=1000,default=',')#授权者
|
||||
position = JSONField('坐标',null=True,blank=True)
|
||||
def __str__(self):
|
||||
return self.partname
|
||||
|
||||
|
@ -281,9 +282,15 @@ class Group(models.Model):#用户组,岗位
|
|||
groupname = models.CharField(max_length=30,blank=True,null=True)
|
||||
grouptype = models.IntegerField(default=4)
|
||||
users = models.ManyToManyField(User,related_name='userg')
|
||||
users2 = models.ManyToManyField(User,related_name='userg2',through='Groupuser2')
|
||||
usecomp = models.ForeignKey(Partment, on_delete=models.CASCADE,related_name='usecompg',default=1)
|
||||
menulink = models.CharField(max_length=200,default='11')
|
||||
|
||||
class Groupuser2(models.Model): #比较好的方式
|
||||
group = models.ForeignKey(Group, on_delete=models.CASCADE)
|
||||
user = models.ForeignKey(User, on_delete=models.CASCADE)
|
||||
part = models.ForeignKey(Partment, on_delete=models.CASCADE,null=True,blank=True)
|
||||
|
||||
class Menu(models.Model):#菜单
|
||||
menuid = models.AutoField(primary_key=True)
|
||||
menuname = models.CharField(max_length=30,blank=True,null=True)
|
||||
|
|
Binary file not shown.
|
@ -36,6 +36,20 @@
|
|||
$('#ubelongpart').treegrid('unselect');
|
||||
}
|
||||
} -->
|
||||
<!-- <div style="margin-bottom:5px">
|
||||
<input id="group" class="easyui-combobox" name="group" style="width:90%"
|
||||
data-options="
|
||||
label:'岗位',
|
||||
url: 'grouphandle?a=list2',
|
||||
multiple:true,
|
||||
valueField:'groupid',
|
||||
textField:'groupname',
|
||||
loadFilter: function (data) {
|
||||
return data.rows;
|
||||
}
|
||||
"
|
||||
editable="false">
|
||||
</select></div> -->
|
||||
</form>
|
||||
</div>
|
||||
<script>
|
||||
|
@ -62,6 +76,7 @@
|
|||
}
|
||||
function submitFormu() {
|
||||
var form = new FormData(document.getElementById("puffuser"));
|
||||
console.log(form)
|
||||
$.ajax({
|
||||
type: "POST",
|
||||
url: 'userhandle?a=add',
|
||||
|
|
|
@ -148,7 +148,7 @@
|
|||
maximizable: true,
|
||||
title: '新增用户',
|
||||
width: 600,
|
||||
height: 300,
|
||||
height: 400,
|
||||
closed: false,
|
||||
cache: false,
|
||||
href: url,
|
||||
|
|
|
@ -485,29 +485,38 @@ def getspr(ubp):
|
|||
return User.objects.get(ubelongpart=currentpart,issuper=1)
|
||||
return a
|
||||
|
||||
def getsprs(ubp):
|
||||
def getsprs(userid,ubp):
|
||||
currentpart=ubp
|
||||
a=getsprs_ubp(currentpart)
|
||||
a=getsprs_ubp(userid,currentpart)
|
||||
while a==False:
|
||||
currentpart=currentpart.parentid #已找不到上级部门
|
||||
if currentpart:
|
||||
a=getsprs_ubp(currentpart)
|
||||
a=getsprs_ubp(userid,currentpart)
|
||||
else:
|
||||
return User.objects.get(ubelongpart=currentpart,issuper=1)
|
||||
return a
|
||||
|
||||
def getsprs_ubp(ubp):
|
||||
def getsprs_ubp(userid,ubp):
|
||||
a=ubp
|
||||
if a.aqy !=',':
|
||||
aqystr = a.aqy
|
||||
aqylist = aqystr.split(',')
|
||||
aqylist = list(map(int, list(filter(None, aqylist))))
|
||||
return aqylist
|
||||
if userid in aqylist:
|
||||
return [userid]
|
||||
else:
|
||||
if ',' + str(userid) + ',' in a.bmzg:
|
||||
return [userid]
|
||||
else:
|
||||
return aqylist
|
||||
if a.bmzg !=',':
|
||||
zgstr = a.bmzg
|
||||
zglist = zgstr.split(',')
|
||||
zglist = list(map(int, list(filter(None, zglist))))
|
||||
return zglist
|
||||
if userid in zglist:
|
||||
return [userid]
|
||||
else:
|
||||
return zglist
|
||||
else:
|
||||
return False
|
||||
|
||||
|
@ -1442,6 +1451,12 @@ def grouphandle(req):
|
|||
a=Group.objects.filter(usecomp__partid = companyid).exclude(grouptype=0).values('groupid','groupname','grouptype')
|
||||
total=a.count()
|
||||
return HttpResponse(transjson(total,a),content_type="application/json")
|
||||
elif req.GET.get('a') =='list2':#排除全体用户组
|
||||
userid = req.session['userid']
|
||||
companyid = getcompany(userid)
|
||||
a=Group.objects.filter(usecomp__partid = companyid).exclude(grouptype=0).exclude(grouptype=3).values('groupid','groupname','grouptype')
|
||||
total=a.count()
|
||||
return HttpResponse(transjson(total,a),content_type="application/json")
|
||||
elif req.GET.get('a') =='combobox':
|
||||
userid = req.session['userid']
|
||||
companyid = getcompany(userid)
|
||||
|
@ -2116,6 +2131,8 @@ def userhandle(req):
|
|||
name = req.POST.get('name')
|
||||
empid = req.POST.get('empid')
|
||||
ubelongpart=Partment.objects.get(partid=req.POST.get('ubelongpart'))
|
||||
# if req.POST.getlist('group',None):
|
||||
# a[0].userg.add(*req.POST.getlist('group'))
|
||||
a.update(name=name,empid=empid,ubelongpart=ubelongpart,username=newname)
|
||||
return JsonResponse({"code":1})
|
||||
else:
|
||||
|
@ -2133,6 +2150,13 @@ def userhandle(req):
|
|||
companyid = getcompany(a.userid)
|
||||
a.usecomp = Partment.objects.get(partid=companyid)
|
||||
a.save()
|
||||
# if req.POST.getlist('group',None):
|
||||
# #a.userg.add(*req.POST.getlist('group'))
|
||||
# objs = Group.objects.filter(groupid__in=req.POST.getlist('group'))
|
||||
# for i in objs:
|
||||
# if i.grouptype == 1:
|
||||
|
||||
# i.users.add(a)
|
||||
Group.objects.get(usecomp__partid=companyid,grouptype=3).users.add(a)
|
||||
return JsonResponse({"code":1})
|
||||
else:
|
||||
|
@ -2963,12 +2987,12 @@ def bwlogin(req):
|
|||
|
||||
def unbindwechat(req):
|
||||
userid=req.session['userid']
|
||||
User.objects.filter(userid=userid).update(openid=0,headimgurl=0,nickname=0,mpopenid=0)
|
||||
User.objects.filter(userid=userid).update(openid=None,headimgurl=None,nickname=None,mpopenid=None)
|
||||
return JsonResponse({"code":1})
|
||||
|
||||
def unbindmp(req):
|
||||
userid=req.session['userid']
|
||||
User.objects.filter(userid=userid).update(openid=0,headimgurl=0,nickname=0,mpopenid=0)
|
||||
User.objects.filter(userid=userid).update(openid=None,headimgurl=None,nickname=None,mpopenid=None)
|
||||
return JsonResponse({"code":1})
|
||||
|
||||
def vewechat(req):
|
||||
|
@ -3054,7 +3078,7 @@ def importusers(req):
|
|||
|
||||
def apicompany(req):
|
||||
a = req.GET.get('a')
|
||||
menurights = '11,1,2,3,4,5,6,7,8,9,10,12,13,15,16,17,18,19,20,21,22,23,24,28,29,32,36'#菜单编码
|
||||
menurights = '11,1,2,3,4,5,6,7,8,9,10,12,13,15,16,17,18,19,20,21,22,23,24,28,29,32,36,46,47,48,50'#菜单编码
|
||||
if a=='add':
|
||||
admin = req.GET.get('admin')
|
||||
company = req.GET.get('company')
|
||||
|
@ -4212,8 +4236,8 @@ def apioperation(req):
|
|||
obj.save()
|
||||
splc = []
|
||||
splc.append({'jdmc':'作业负责人审批','sprs':[userid]})
|
||||
splc.append({'jdmc':'作业部门审批','sprs':getsprs(obj.zybm)})
|
||||
splc.append({'jdmc':'属地部门审批','sprs':getsprs(obj.sdbm)})
|
||||
splc.append({'jdmc':'作业部门审批','sprs':getsprs(userid,obj.zybm)})
|
||||
splc.append({'jdmc':'属地部门审批','sprs':getsprs(userid,obj.sdbm)})
|
||||
for i in Operationspjd.objects.filter(zylx=obj.zylx,usecomp=Partment.objects.get(partid=getcompany(userid))).order_by('id'):
|
||||
splc.append({'jdmc':i.jdmc,'sprs':i.sprs})
|
||||
obj.zyzt['splc']=splc
|
||||
|
@ -5024,6 +5048,11 @@ def apiexamtestdetail(req):
|
|||
total = a.count()
|
||||
startnum,endnum=fenye(req)
|
||||
a = a[startnum:endnum].values('id','examtest__id','examtest__name','examtest__starttime','examtest__endtime','examtest__passscore','examtest__state','examtest__duration')
|
||||
for i in a:
|
||||
if i['examtest__endtime']>datetime.now():
|
||||
i['isActive'] = True
|
||||
else:
|
||||
i['isActive'] = False
|
||||
return HttpResponse(transjson(total,a),content_type="application/json")
|
||||
elif a=='listyk':
|
||||
a = ExamTestDetail.objects
|
||||
|
|
Loading…
Reference in New Issue